diff --git a/.github/guides/HARDDELETES.md b/.github/guides/HARDDELETES.md index cdbdb2a126d68..6817de0d9b31a 100644 --- a/.github/guides/HARDDELETES.md +++ b/.github/guides/HARDDELETES.md @@ -1,6 +1,6 @@ # Hard Deletes -> Garbage collection is pretty gothic when you think about it. +> 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 > @@ -52,7 +52,7 @@ This of course means they can store that location in memory in another object's /proc/someshit(mem_location) var/datum/some_obj = new() - some_obj.reference = mem_location + 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! @@ -135,13 +135,13 @@ If that fails, search the object's typepath, and look and see if anything is hol 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` +If you're having issues solving a harddel and want to perform this check yourself, go to `_compile_options.dm` and uncomment `REFERENCE_TRACKING_STANDARD`. -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` +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 [log_dir]/harddels.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 +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, alongside the references remaining. -## Techniques For Fixing Hard Deletes +## 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 diff --git a/.github/guides/VISUALS.md b/.github/guides/VISUALS.md index 1c3cc6360c57b..4d8f7d3b585c8 100644 --- a/.github/guides/VISUALS.md +++ b/.github/guides/VISUALS.md @@ -4,10 +4,10 @@ Welcome to a breakdown of visuals and visual effects in our codebase, and in BYO I will be describing all of the existing systems we use, alongside explaining and providing references to BYOND's ref for each tool. -Note, I will not be covering things that are trivial to understand, and which we don't mess with much. +Note, I will not be covering things that are trivial to understand, and which we don't mess with much. For a complete list of byond ref stuff relevant to this topic, see [here](https://www.byond.com/docs/ref/#/atom/var/appearance). -This is to some extent a collation of the BYOND ref, alongside a description of how we actually use these tools. +This is to some extent a collation of the BYOND ref, alongside a description of how we actually use these tools. My hope is after reading this you'll be able to understand and implement different visual effects in our codebase. Also please see the ref entry on the [renderer](https://www.byond.com/docs/ref/#/{notes}/renderer). @@ -53,10 +53,10 @@ You'll find links to the relevant reference entries at the heading of each entry ## Appearances in BYOND - [Table of Contents](#table-of-contents) -- [Reference Entry](https://www.byond.com/docs/ref/#/atom/var/appearance) +- [Reference Entry](https://www.byond.com/docs/ref/#/atom/var/appearance) Everything that is displayed on the map has an appearance variable that describes exactly how it should be rendered. -To be clear, it doesn't contain EVERYTHING, [plane masters](#planes) exist separately and so do many other factors. +To be clear, it doesn't contain EVERYTHING, [plane masters](#planes) exist separately and so do many other factors. But it sets out a sort of recipe of everything that could effect rendering. Appearances have a few quirks that can be helpful or frustrating depending on what you're trying to do. @@ -65,25 +65,27 @@ To start off with, appearances are static. You can't directly edit an appearance The way to edit them most of the time is to just modify the corresponding variable on the thing the appearance represents. -This doesn't mean it's impossible to modify them directly however. While appearances are static, +This doesn't mean it's impossible to modify them directly however. While appearances are static, their cousins mutable appearances [(Ref Entry)](https://www.byond.com/docs/ref/info.html#/mutable_appearance) **are**. -What we can do is create a new mutable appearance, set its appearance to be a copy of the static one (remember all appearance variables are static), +What we can do is create a new mutable appearance, set its appearance to be a copy of the static one (remember all appearance variables are static), edit it, and then set the desired thing's appearance var to the appearance var of the mutable. Somewhat like this ```byond -// NOTE: we do not actually have access to a raw appearance type, so we will often +// NOTE: we do not actually have access to a raw appearance type, so we will often // Lie to the compiler, and pretend we are using a mutable appearance // This lets us access vars as expected. Be careful with it tho -/proc/mutate_icon_state(mutable_appearance/thing) +/proc/mutate_icon_state(mutable_appearance/thing) var/mutable_appearance/temporary_lad = new() temporary_lad.appearance = thing temporary_lad.icon_state += "haha_owned" return temporary_lad.appearance ``` +> **Note:** More then being static, appearances are unique. Only one copy of each set of appearance vars exists, and when you modify any of those vars, the corrosponding appearance variable changes its value to whatever matches the new hash. That's why appearance vars can induce inconsistent cost on modification. + > **Warning:** BYOND has been observed to have issues with appearance corruption, it's something to be weary of when "realizing" appearances in this manner. ## Overlays @@ -91,7 +93,7 @@ Somewhat like this - [Table of Contents](#table-of-contents) - [Reference Entry](https://www.byond.com/docs/ref/#/atom/var/overlays) (Also see [rendering](https://www.byond.com/docs/ref/#/{notes}/renderer)) -Overlays are a list of static [appearances](#appearances-in-byond) that we render on top of ourselves. +Overlays are a list of static [appearances](#appearances-in-byond) that we render on top of ourselves. Said appearances can be edited via the realizing method mentioned above. Their rendering order is determined by [layer](#layers) and [plane](#planes), but conflicts are resolved based off order of appearance inside the list. @@ -104,67 +106,67 @@ It's not significant, but it is there, and something to be aware of. ### Our Implementation -We use overlays as our primary method of overlaying visuals. +We use overlays as our primary method of overlaying visuals. However, since overlays are COPIES of a thing's appearance, ensuring that they can be cleared is semi troublesome. To solve this problem, we manage most overlays using `update_overlays()`. -This proc is called whenever an atom's appearance is updated with `update_appearance()` -(essentially just a way to tell an object to rerender anything static about it, like icon state or name), +This proc is called whenever an atom's appearance is updated with `update_appearance()` +(essentially just a way to tell an object to rerender anything static about it, like icon state or name), which will often call `update_icon()`. `update_icon()` handles querying the object for its desired icon, and also manages its overlays, by calling `update_overlays()`. -Said proc returns a list of things to turn into static appearances, which are then passed into `add_overlay()`, +Said proc returns a list of things to turn into static appearances, which are then passed into `add_overlay()`, which makes them static with `build_appearance_list()` before queuing an overlay compile. -This list of static appearances is then queued inside a list called `managed_overlays` on `/atom`. +This list of static appearances is then queued inside a list called `managed_overlays` on `/atom`. This is so we can clear old overlays out before running an update. -We actually compile queued overlay builds once every tick using a dedicated subsystem. +We actually compile queued overlay builds once every tick using a dedicated subsystem. This is done to avoid adding/removing/adding again to the overlays list in cases like humans where it's mutated a lot. -You can bypass this managed overlays system if you'd like, using `add_overlay()` and `cut_overlay()`, +You can bypass this managed overlays system if you'd like, using `add_overlay()` and `cut_overlay()`, but this is semi dangerous because you don't by default have a way to "clear" the overlay. Be careful of this. ## Visual Contents - [Table of Contents](#table-of-contents) -- [Reference Entry](https://www.byond.com/docs/ref/#/atom/var/vis_contents) +- [Reference Entry](https://www.byond.com/docs/ref/#/atom/var/vis_contents) The `vis_contents` list allows you to essentially say "Hey, render this thing ON me". -The definition of "ON" varies significantly with the `vis_flags` value of the *thing* being relayed. -See the ref [here](https://www.byond.com/docs/ref/#/atom/var/vis_flags). +The definition of "ON" varies significantly with the `vis_flags` value of the *thing* being relayed. +See the ref [here](https://www.byond.com/docs/ref/#/atom/var/vis_flags). Some flags of interest: -- `VIS_INHERIT_ID`: This allows you to link the object DIRECTLY to the thing it's drawn on, +- `VIS_INHERIT_ID`: This allows you to link the object DIRECTLY to the thing it's drawn on, so clicking on the `vis_contents`'d object is just like clicking on the thing -- `VIS_INHERIT_PLANE`: We will discuss [planes](#planes) more in future, but we use them to both effect rendering order and apply effects as a group. -This flag changes the plane of any `vis_contents`'d object (while displayed on the source object) to the source's. +- `VIS_INHERIT_PLANE`: We will discuss [planes](#planes) more in future, but we use them to both effect rendering order and apply effects as a group. +This flag changes the plane of any `vis_contents`'d object (while displayed on the source object) to the source's. This is occasionally useful, but should be used with care as it breaks any effects that rely on plane. -Anything inside a `vis_contents` list will have its loc stored in its `vis_locs` variable. +Anything inside a `vis_contents` list will have its loc stored in its `vis_locs` variable. We very rarely use this, primarily just for clearing references from `vis_contents`. -`vis_contents`, unlike `overlays` is a reference, not a copy. So you can update a `vis_contents`'d thing and have it mirror properly. +`vis_contents`, unlike `overlays` is a reference, not a copy. So you can update a `vis_contents`'d thing and have it mirror properly. This is how we do multiz by the by, with uh, some more hell discussed under [multiz](#multiz). -To pay for this additional behavior however, vis_contents has additional cost in maptick. -Because it's not a copy, we need to constantly check if it's changed at all, which leads to cost scaling with player count. +To pay for this additional behavior however, vis_contents has additional cost in maptick. +Because it's not a copy, we need to constantly check if it's changed at all, which leads to cost scaling with player count. Careful how much you use it. ## Images - [Table of Contents](#table-of-contents) -- [Reference Entry](https://www.byond.com/docs/ref/#/image) +- [Reference Entry](https://www.byond.com/docs/ref/#/image) Images are technically parents of [mutable appearances](#appearances-in-byond). We don't often use them, mostly because we can accomplish their behavior with just MAs. -Images exist both to be used in overlays, and to display things to only select clients on the map. +Images exist both to be used in overlays, and to display things to only select clients on the map. See [/client/var/images](#client-images) > Note: the inheritance between the two is essentially for engine convenience. Don't rely on it. @@ -172,7 +174,7 @@ See [/client/var/images](#client-images) ## Client Images - [Table of Contents](#table-of-contents) -- [Reference Entry](https://www.byond.com/docs/ref/#/client/var/images) +- [Reference Entry](https://www.byond.com/docs/ref/#/client/var/images) `/client/var/images` is a list of image objects to display to JUST that particular client. @@ -180,35 +182,35 @@ The image objects are displayed at their loc variable, and can be shown to more ### Our Implementation -We use client images in a few ways. Often they will be used just as intended, to modify the view of just one user. +We use client images in a few ways. Often they will be used just as intended, to modify the view of just one user. Think tray scanner or technically ai static. -However, we often want to show a set of images to the same GROUP of people, but in a limited manner. +However, we often want to show a set of images to the same GROUP of people, but in a limited manner. For this, we use the `/datum/atom_hud` (hereafter hud) system. This is different from `/datum/hud`, which I will discuss later. -HUDs are datums that represent categories of images to display to users. +HUDs are datums that represent categories of images to display to users. They are most often global, but can be created on an atom to atom bases in rare cases. They store a list of images to display (sorted by source z level to reduce lag) and a list of clients to display to. -We then mirror this group of images into/out of the client's images list, based on what HUDs they're able to see. +We then mirror this group of images into/out of the client's images list, based on what HUDs they're able to see. This is the pattern we use for things like the medihud, or robot trails. ## View - [Table of Contents](#table-of-contents) -- [Reference Entry](https://www.byond.com/docs/ref/#/client/var/view) +- [Reference Entry](https://www.byond.com/docs/ref/#/client/var/view) -`/client/var/view` is actually a pretty simple topic, -but I'm gonna take this chance to discuss the other things we do to manage pixel sizing and such since there isn't a better place for it, +`/client/var/view` is actually a pretty simple topic, +but I'm gonna take this chance to discuss the other things we do to manage pixel sizing and such since there isn't a better place for it, and they're handled in the same place by us. Alright then, view. This is pretty simple, but it basically just lets us define the tile bound we want to show to our client. This can either be a number for an X by X square, or a string in the form "XxY" for more control. -We use `/datum/view_data` to manage and track view changes, so zoom effects can work without canceling or being canceled by anything else. +We use `/datum/view_data` to manage and track view changes, so zoom effects can work without canceling or being canceled by anything else. ### Client Rendering Modes @@ -218,29 +220,29 @@ Clients get some choice in literally how they want the game to be rendered to th The two I'm gonna discuss here are `zoom`, and `zoom-mode` mode, both of which are skin params (basically just variables that live on the client) -`zoom` decides how the client wants to display the turfs shown to it. -It can have two types of values. -If it's equal to 0 it will stretch the tiles sent to the client to fix the size of the map-window. -Otherwise, any other numbers will lead to pixels being scaled by some multiple. +`zoom` decides how the client wants to display the turfs shown to it. +It can have two types of values. +If it's equal to 0 it will stretch the tiles sent to the client to fix the size of the map-window. +Otherwise, any other numbers will lead to pixels being scaled by some multiple. This effect can only really result in nice clean edges if you pass in whole numbers which is why most of the constant scaling we give players are whole numbers. -`zoom-mode` controls how a pixel will be up-scaled, if it needs to be. -See the ref for more details, but `normal` is gonna have the sharpest output, `distort` uses nearest neighbor, +`zoom-mode` controls how a pixel will be up-scaled, if it needs to be. +See the ref for more details, but `normal` is gonna have the sharpest output, `distort` uses nearest neighbor, which causes some blur, and `blur` uses bilinear sampling, which causes a LOT of blur. ## Eye - [Table of Contents](#table-of-contents) -- [Reference Entry](https://www.byond.com/docs/ref/#/client/var/eye) +- [Reference Entry](https://www.byond.com/docs/ref/#/client/var/eye) -`/client/var/eye` is the atom or mob at which our view should be centered. +`/client/var/eye` is the atom or mob at which our view should be centered. Any screen objects we display will show "off" this, as will our actual well eye position. -It is by default `/client/var/mob` but it can be modified. +It is by default `/client/var/mob` but it can be modified. This is how we accomplish ai eyes and ventcrawling, alongside most other effects that involve a player getting "into" something. ## Client Screen - [Table of Contents](#table-of-contents) -- [Reference Entry](https://www.byond.com/docs/ref/#/{notes}/HUD) +- [Reference Entry](https://www.byond.com/docs/ref/#/{notes}/HUD) Similar to client images but not *quite* the same, we can also insert objects onto our client's literal screen @@ -256,21 +258,21 @@ The classic `screen_loc` format looks something like this (keeping in mind it co The pixel offsets can be discarded as optional, but crucially the x and y values do not NEED to be absolute. -We can use cardinal keywords like `NORTH` to anchor screen objects to the view size of the client (a topic that will be discussed soon). -You can also use directional keywords like `TOP` to anchor to the actual visible map-window, which prevents any accidental out of bounds. -Oh yeah you can use absolute offsets to position screen objects out of the view range, which will cause the map-window to forcefully expand, +We can use cardinal keywords like `NORTH` to anchor screen objects to the view size of the client (a topic that will be discussed soon). +You can also use directional keywords like `TOP` to anchor to the actual visible map-window, which prevents any accidental out of bounds. +Oh yeah you can use absolute offsets to position screen objects out of the view range, which will cause the map-window to forcefully expand, exposing the parts of the map byond uses to ahead of time render border things so moving is smooth. ### Secondary Maps While we're here, this is a bit of a side topic but you can have more then one map-window on a client's screen at once. -This gets into dmf fuckery but you can use [window ids](https://www.byond.com/docs/ref/#/{skin}/param/id) to tell a screen object to render to a secondary map. +This gets into dmf fuckery but you can use [window ids](https://www.byond.com/docs/ref/#/{skin}/param/id) to tell a screen object to render to a secondary map. Useful for creating popup windows and such. ## Blend Mode - [Table of Contents](#table-of-contents) -- [Reference Entry](https://www.byond.com/docs/ref/#/atom/var/blend_mode) +- [Reference Entry](https://www.byond.com/docs/ref/#/atom/var/blend_mode) `/atom/var/blend_mode` defines how an atom well, renders onto the map. @@ -280,7 +282,7 @@ This is how we do lighting effects, since the lighting [plane](#planes) can be u ## Appearance Flags - [Table of Contents](#table-of-contents) -- [Reference Entry](https://www.byond.com/docs/ref/#/atom/var/appearance_flags) +- [Reference Entry](https://www.byond.com/docs/ref/#/atom/var/appearance_flags) `/atom/var/appearance_flags` is a catch all for toggles that apply to visual elements of an atom. I won't go over all of them, but I will discuss a few. @@ -293,8 +295,8 @@ Flags of interest: ## Gliding - [Table of Contents](#table-of-contents) -- [Reference Entry](https://www.byond.com/docs/ref/#/{notes}/gliding) - +- [Reference Entry](https://www.byond.com/docs/ref/#/{notes}/gliding) + You may have noticed that moving between tiles is smooth, or at least as close as we can get it. Moving at 0.2 or 10 tiles per second will be smooth. This is because we have control over the speed at which atoms animate between moves. @@ -306,37 +308,37 @@ This is done using `/atom/movable/proc/set_glide_size`, which will inform anythi Glide size is often set in the context of some rate of movement. Either the movement delay of a mob, set in `/client/Move()`, or the delay of a movement subsystem. We use defines to turn delays into pixels per tick. -Client moves will be limited by `DELAY_TO_GLIDE_SIZE` which will allow at most 32 pixels a tick. -Subsystems and other niche uses use `MOVEMENT_ADJUSTED_GLIDE_SIZE`. -We will also occasionally use glide size as a way to force a transition between different movement types, like space-drift into normal walking. +Client moves will be limited by `DELAY_TO_GLIDE_SIZE` which will allow at most 32 pixels a tick. +Subsystems and other niche uses use `MOVEMENT_ADJUSTED_GLIDE_SIZE`. +We will also occasionally use glide size as a way to force a transition between different movement types, like space-drift into normal walking. There's extra cruft here. -> Something you should know: Our gliding system attempts to account for time dilation when setting move rates. +> Something you should know: Our gliding system attempts to account for time dilation when setting move rates. This is done in a very simplistic way however, so a spike in td will lead to jumping around as glide rate is outpaced by mob movement rate. -On that note, it is VERY important that glide rate is the same or near the same as actual move rate. -Otherwise you will get strange jumping and jitter. +On that note, it is VERY important that glide rate is the same or near the same as actual move rate. +Otherwise you will get strange jumping and jitter. This can also lead to stupid shit where people somehow manage to intentionally shorten a movement delay to jump around. Dumb. Related to the above, we are not always able to maintain sync between glide rate and mob move rate. -This is because mob move rate is a function of the initial move delay and a bunch of slowdown/speedup modifiers. -In order to maintain sync we would need to issue a move command the MOMENT a delay is up, and if delays are not cleanly divisible by our tick rate (0.5 deciseconds) this is impossible. +This is because mob move rate is a function of the initial move delay and a bunch of slowdown/speedup modifiers. +In order to maintain sync we would need to issue a move command the MOMENT a delay is up, and if delays are not cleanly divisible by our tick rate (0.5 deciseconds) this is impossible. This is why you'll sometime see a stutter in your step when slowed Just so you know, client movement works off `/client/var/move_delay` which sets the next time an input will be accepted. It's typically glide rate, but is in some cases just 1 tick. ## Sight - [Table of Contents](#table-of-contents) -- [Reference Entry](https://www.byond.com/docs/ref/#/mob/var/sight) +- [Reference Entry](https://www.byond.com/docs/ref/#/mob/var/sight) `/mob/var/sight` is a set of bitflags that *mostly* set what HAS to render on your screen. Be that mobs, turfs, etc. That said, there is some nuance here so I'ma get into that. -- `SEE_INFRA`: I'll get into this later, but infrared is essentially a copy of BYOND darkness, it's not something we currently use. -- `SEE_BLACKNESS`: This relates heavily to [planes](#planes), essentially typically the "blackness" (that darkness that masks things that you can't see) -is rendered separately, out of our control as "users". +- `SEE_INFRA`: I'll get into this later, but infrared is essentially a copy of BYOND darkness, it's not something we currently use. +- `SEE_BLACKNESS`: This relates heavily to [planes](#planes), essentially typically the "blackness" (that darkness that masks things that you can't see) +is rendered separately, out of our control as "users". However, if the `SEE_BLACKNESS` flag is set, it will instead render on plane 0, the default BYOND plane. -This allows us to capture it, and say, blur it, or redraw it elsewhere. This is in theory very powerful, but not possible with the 'side_map' [map format](https://www.byond.com/docs/ref/#/world/var/map_format) +This allows us to capture it, and say, blur it, or redraw it elsewhere. This is in theory very powerful, but not possible with the 'side_map' [map format](https://www.byond.com/docs/ref/#/world/var/map_format) ## BYOND Lighting @@ -346,14 +348,14 @@ Alongside OUR lighting implementation, which is discussed in with color matrixes It's very basic. Essentially, a tile is either "lit" or it's not. -If a tile is not lit, and it matches some other preconditions, it and all its contents will be hidden from the user, +If a tile is not lit, and it matches some other preconditions, it and all its contents will be hidden from the user, sort of like if there was a wall between them. This hiding uses BYOND darkness, and is thus controllable. I'll use this section to discuss all the little bits that contribute to this behavior ### Luminosity - [Table of Contents](#table-of-contents) -- [Reference Entry](https://www.byond.com/docs/ref/#/atom/var/luminosity) +- [Reference Entry](https://www.byond.com/docs/ref/#/atom/var/luminosity) `/atom/var/luminosity` is a variable that lets us inject light into BYOND's lighting system. It's real simple, just a range of tiles that will be lit, respecting sight-lines and such of course. @@ -363,7 +365,7 @@ You can actually force it to use a particular mob's sight to avoid aspects of th ### See in Dark - [Table of Contents](#table-of-contents) -- [Reference Entry](https://www.byond.com/docs/ref/#/mob/var/see_in_dark) +- [Reference Entry](https://www.byond.com/docs/ref/#/mob/var/see_in_dark) `/mob/var/see_in_dark` sets the radius of a square around the mob that cuts out BYOND darkness. @@ -372,9 +374,9 @@ It's quite simple, but worth describing. ### Infrared - [Table of Contents](#table-of-contents) -- [Reference Entry](https://www.byond.com/docs/ref/#/mob/var/see_infrared) +- [Reference Entry](https://www.byond.com/docs/ref/#/mob/var/see_infrared) -Infrared vision can be thought of as a hidden copy of standard BYOND darkness. +Infrared vision can be thought of as a hidden copy of standard BYOND darkness. It's not something we actually use, but I think you should know about it, because the whole thing is real confusing without context. ## Invisibility @@ -390,16 +392,16 @@ It's also used to hide some more then ghost invisible things, like some timers a ## Layers - [Table of Contents](#table-of-contents) -- [Reference Entry](https://www.byond.com/docs/ref/#/atom/var/layer) +- [Reference Entry](https://www.byond.com/docs/ref/#/atom/var/layer) -`/atom/var/layer` is the first bit of logic that decides the order in which things on the map render. -Rendering order depends a LOT on the [map format](https://www.byond.com/docs/ref/#/world/var/map_format), -which I will not get into in this document because it is not yet relevant. -All you really need to know is for our current format, -the objects that appear first in something's contents will draw first, and render lowest. -Think of it like stacking little paper cutouts. +`/atom/var/layer` is the first bit of logic that decides the order in which things on the map render. +Rendering order depends a LOT on the [map format](https://www.byond.com/docs/ref/#/world/var/map_format), +which I will not get into in this document because it is not yet relevant. +All you really need to know is for our current format, +the objects that appear first in something's contents will draw first, and render lowest. +Think of it like stacking little paper cutouts. -Layer has a bit more nuance then just being lowest to highest, tho it's not a lot. +Layer has a bit more nuance then just being lowest to highest, tho it's not a lot. There are a few snowflake layers that can be used to accomplish niche goals, alongside floating layers, which are essentially just any layer that is negative. Floating layers will float "up" the chain of things they're being drawn onto, until they find a real layer. They'll then offset off of that. @@ -408,7 +410,7 @@ This allows us to keep relative layer differences while not needing to make all ## Planes - [Table of Contents](#table-of-contents) -- [Reference Entry](https://www.byond.com/docs/ref/#/atom/var/plane) +- [Reference Entry](https://www.byond.com/docs/ref/#/atom/var/plane) Allllright `/atom/var/plane`s. Let's talk about em. @@ -417,16 +419,16 @@ Higher planes will (**normally**) render over lower ones. Very clearcut. Similarly to [layers](#layers), planes also support "floating" with `FLOAT_PLANE`. See above for an explanation of that. -However, they can be used for more complex and... fun things too! +However, they can be used for more complex and... fun things too! If a client has an atom with the `PLANE_MASTER` [appearance flag](#appearance-flags) in their [screen](#client-screen), then rather then being all rendered normally, anything in the client's view is instead first rendered onto the plane master. -This is VERY powerful, because it lets us [hide](https://www.byond.com/docs/ref/#/atom/var/alpha), [color](#color), +This is VERY powerful, because it lets us [hide](https://www.byond.com/docs/ref/#/atom/var/alpha), [color](#color), and [distort](#filters) whole classes of objects, among other things. I cannot emphasize enough how useful this is. It does have some downsides however. Because planes are tied to both grouping and rendering order, there are some effects that require splitting a plane into bits. -It's also possible for some effects, especially things relating to [map format](https://www.byond.com/docs/ref/#/world/var/map_format), +It's also possible for some effects, especially things relating to [map format](https://www.byond.com/docs/ref/#/world/var/map_format), to just be straight up impossible, or conflict with each other. It's dumb, but it's what we've got brother so we're gonna use it like it's a free ticket to the bahamas. @@ -434,15 +436,15 @@ We have a system that allows for arbitrary grouping of plane masters for the pur called `/atom/movable/plane_master_controller`. This is somewhat outmoded by our use of [render relays](#render-targetsource), but it's still valid and occasionally useful. -> Something you should know: Plane masters effect ONLY the map their screen_loc is on. +> Something you should know: Plane masters effect ONLY the map their screen_loc is on. For this reason, we are forced to generate whole copies of the set of plane masters with the proper screen_loc to make subviews look right -> Warning: Planes have some restrictions on valid values. They NEED to be whole integers, and they NEED to have an absolute value of `10000`. +> Warning: Planes have some restrictions on valid values. They NEED to be whole integers, and they NEED to have an absolute value of `10000`. This is to support `FLOAT_PLANE`, which lives out at the very edge of the 32 bit int range. ## Render Target/Source - [Table of Contents](#table-of-contents) -- [Reference Entry](https://www.byond.com/docs/ref/#/atom/var/render_target) +- [Reference Entry](https://www.byond.com/docs/ref/#/atom/var/render_target) Render targets are a way of rendering one thing onto another. Not like vis_contents but in a literal sense ONTO. The target object is given a `/atom/var/render_target` value, and anything that wishes to "take" it sets its `/atom/var/render_source` var to match. @@ -477,8 +479,8 @@ This meant the turf below looked as if it was offset, and everything was good. Except not, for 2 reasons. One more annoying then the other. - 1: It looked like dog doo-doo. This pattern destroyed the old planes of everything vis_contents'd, so effects/lighting/dropshadows broke bad. -- 2: I alluded to this earlier, but it totally breaks the `side_map` [map format](https://www.byond.com/docs/ref/#/world/var/map_format) -which I need for a massive resprite I'm helping with. This is because `side_map` changes how rendering order works, +- 2: I alluded to this earlier, but it totally breaks the `side_map` [map format](https://www.byond.com/docs/ref/#/world/var/map_format) +which I need for a massive resprite I'm helping with. This is because `side_map` changes how rendering order works, going off "distance" from the front of the frame. The issue here is it of course needs a way to group things that are even allowed to overlap, so it uses plane. So when you squish everything down onto one plane, this of course breaks horribly and fucks you. @@ -493,7 +495,7 @@ to the openspace plane master one level up. More then doable. SECOND problem. How do we get everything below to "land" on the right plane? The answer to this is depressing but still true. We manually offset every single object on the map's plane based off its "z layer". -This includes any `overlays` or `vis_contents` with a unique plane value. +This includes any `overlays` or `vis_contents` with a unique plane value. Mostly we require anything that sets the plane var to pass in a source of context, like a turf or something that can be used to derive a turf. There are a few edge cases where we need to work in explicitly offsets, but those are much rarer. @@ -502,18 +504,18 @@ This is stupid, but it's makable, and what we do. ## Mouse Opacity - [Table of Contents](#table-of-contents) -- [Reference Entry](https://www.byond.com/docs/ref/#/atom/var/mouse_opacity) +- [Reference Entry](https://www.byond.com/docs/ref/#/atom/var/mouse_opacity) `/atom/var/mouse_opacity` tells clients how to treat mousing over the atom in question. A value of 0 means it is completely ignored, no matter what. A value of 1 means it is transparent/opaque based off the alpha of the icon at any particular part. -A value of 2 means it will count as opaque across ALL of the icon-state. All 32x32 (or whatever) of it. +A value of 2 means it will count as opaque across ALL of the icon-state. All 32x32 (or whatever) of it. -We will on occasion use mouse opacity to expand hitboxes, but more often this is done with [vis_contents](#visual-contents), +We will on occasion use mouse opacity to expand hitboxes, but more often this is done with [vis_contents](#visual-contents), or just low alpha pixels on the sprite. -> Note: Mouse opacity will only matter if the atom is being rendered on its own. [Overlays](#overlays)(and [images](#images)) +> Note: Mouse opacity will only matter if the atom is being rendered on its own. [Overlays](#overlays)(and [images](#images)) will NOT work as expected with this. However, you can still have totally transparent overlays. If you render them onto a [plane master](#planes) with the desired mouse opacity value it will work as expected. This is because as a step of the rendering pipeline the overlay is rendered ONTO the plane master, and then the plane @@ -521,10 +523,10 @@ master's effects are applied. ## Filters - [Table of Contents](#table-of-contents) -- [Reference Entry](https://www.byond.com/docs/ref/#/{notes}/filters) +- [Reference Entry](https://www.byond.com/docs/ref/#/{notes}/filters) Filters are a general purpose system for applying a limited set of shaders to a render. -These shaders run on the client's machine. This has upsides and downsides. +These shaders run on the client's machine. This has upsides and downsides. Upside: Very cheap for the server. Downside: Potentially quite laggy for the client. Take care with these @@ -546,7 +548,7 @@ It'll let you add and tweak *most* of the filters in BYOND. ## Particles - [Table of Contents](#table-of-contents) -- [Reference Entry](https://www.byond.com/docs/ref/#/{notes}/particles) +- [Reference Entry](https://www.byond.com/docs/ref/#/{notes}/particles) Particles are a system that allows you to attach "generators" to atoms on the world, and have them spit out little visual effects. This is done by creating a subtype of the `/particles` type, and giving it the values you want. @@ -560,7 +562,7 @@ It'll let you add and tweak the particles attached to that atom. ## Pixel Offsets - [Table of Contents](#table-of-contents) -- [Reference Entry](https://www.byond.com/docs/ref/#/atom/var/pixel_x) +- [Reference Entry](https://www.byond.com/docs/ref/#/atom/var/pixel_x) This is a real simple idea and I normally wouldn't mention it, but I have something else I wanna discuss related to it, so I'ma take this chance. @@ -573,7 +575,7 @@ There are two "types" of each direction offset. There's the "real" offset (x/y) Real offsets will change both the visual position (IE: where it renders) and also the positional position (IE: where the renderer thinks they are). Fake offsets only effect visual position. -This doesn't really matter for our current map format, but for anything that takes position into account when layering, like `side_map` or `isometric_map` +This doesn't really matter for our current map format, but for anything that takes position into account when layering, like `side_map` or `isometric_map` it matters a whole ton. It's kinda a hard idea to get across, but I hope you have at least some idea. ## Map Formats @@ -587,10 +589,10 @@ There are 4 types currently. Only 2 that are interesting to us, and one that's n Most of them involve changing how layering works, from the standard [layers](#layers) and [planes](#planes) method. There's a bit more detail here, not gonna go into it, stuff like [underlays](https://www.byond.com/docs/ref/#/atom/var/underlays) drawing under things. See [Understanding The Renderer](https://www.byond.com/docs/ref/#/{notes}/renderer) -> There is very technically more nuance here. +> There is very technically more nuance here. > In default rendering modes, byond will conflict break by using the thing that is highest in the contents list of its location. Or lowest. Don't remember. -### [`TOPDOWN_MAP`](https://www.byond.com/docs/ref/#/{notes}/topdown) +### [`TOPDOWN_MAP`](https://www.byond.com/docs/ref/#/{notes}/topdown) This is the default rendering format. What we used to use. It tells byond to render going off [plane](#planes) first, then [layer](#layers). There's a few edgecases involving big icons, but it's small peanuts. @@ -606,7 +608,7 @@ The idea is the closer to the front of the screen something is, the higher its l `pixel_y` + `y` tell the engine where something "is". `/atom/var/bound_width`, `/atom/var/bound_height` and `/atom/var/bound_x/y` describe how big it is, which lets us in theory control what it tries to layer "against". -I'm not bothering with reference links because they are entirely unrelated. +I'm not bothering with reference links because they are entirely unrelated. An issue that will crop up with this map format is needing to manage the "visual" (how/where it renders) and physical (where it is in game) aspects of position and size. Physical position tells the renderer how to layer things. Visual position and a combination of physical bounds (manually set) and visual bounds (inferred from other aspects of it. Sprite width/height, physical bounds, transforms, filters, etc) tell it what the sprite might be rendering OVER. @@ -647,28 +649,28 @@ One more thing. Big icons are fucked From the byond reference >If you use an icon wider than one tile, the "footprint" of the isometric icon (the actual map tiles it takes up) will always be a square. That is, if your normal tile size is 64 and you want to show a 128x128 icon, the icon is two tiles wide and so it will take up a 2×2-tile area on the map. The height of a big icon is irrelevant--any excess height beyond width/2 is used to show vertical features. To draw this icon properly, other tiles on that same ground will be moved behind it in the drawing order. -> One important warning about using big icons in isometric mode is that you should only do this with dense atoms. If part of a big mob icon covers the same tile as a tall building for instance, the tall building is moved back and it could be partially covered by other turfs that are actually behind it. A mob walking onto a very large non-dense turf icon would experience similar irregularities. +> One important warning about using big icons in isometric mode is that you should only do this with dense atoms. If part of a big mob icon covers the same tile as a tall building for instance, the tall building is moved back and it could be partially covered by other turfs that are actually behind it. A mob walking onto a very large non-dense turf icon would experience similar irregularities. These can cause very annoying flickering. In fact, MUCH of how rendering works causes flickering. This is because we don't decide on a pixel by pixel case, the engine groups sprites up into a sort of rendering stack, unable to split them up. -This combined with us being unable to modify bounds means that if one bit of the view is conflicting. +This combined with us being unable to modify bounds means that if one bit of the view is conflicting. If A wants to be above B and below C, but B wants to be below A and above C, we'll be unable to resolve the rendering properly, leading to flickering depending on other aspects of the layering. This can just sort of spread. Very hard to debug. -### [`ISOMETRIC_MAP`](https://www.byond.com/docs/ref/#/{notes}/isometric) - +### [`ISOMETRIC_MAP`](https://www.byond.com/docs/ref/#/{notes}/isometric) + Isometric mode, renders everything well, isometrically, biased to the north east. This gives the possibility for fake 3d, assuming you get things drawn properly. It will render things in the foreground "last", after things in the background. This is the right way of thinking about it, it's not rendering things above or below, but in a layering order. This is interesting mostly in the context of understanding [side map](#side_map-check-the-main-page-too), but we did actually run an isometric station for april fools once. It was really cursed and flickered like crazy (which causes client lag). Fun as hell though. -The mode essentially overrides the layer/plane layering discussed before, and inserts new rules. -I wish I knew what those rules EXACTLY are, but I'm betting they're similar to [side map's](#side_map-check-the-main-page-too), and lummy's actually told me those. +The mode essentially overrides the layer/plane layering discussed before, and inserts new rules. +I wish I knew what those rules EXACTLY are, but I'm betting they're similar to [side map's](#side_map-check-the-main-page-too), and lummy's actually told me those. Yes this is all rather poorly documented. Similar to sidemap, we take physical position into account when deciding layering. In addition to its height positioning, we also account for width. -So both `pixel_y` and `pixel_x` can effect layering. `pixel_z` handles strictly visual y, and `pixel_w` handles x. +So both `pixel_y` and `pixel_x` can effect layering. `pixel_z` handles strictly visual y, and `pixel_w` handles x. This has similar big icon problems to [sidemap](#side_map-check-the-main-page-too). @@ -679,14 +681,14 @@ it would be automatically broken down into smaller icon states, which you would ## Color - [Table of Contents](#table-of-contents) -- [Reference Entry](https://www.byond.com/docs/ref/#/atom/var/color) +- [Reference Entry](https://www.byond.com/docs/ref/#/atom/var/color) `/atom/var/color` is another one like [pixel offsets](#pixel-offsets) where its most common use is really uninteresting, but it has an interesting edge case I think is fun to discuss/important to know. So let's get the base case out of the way shall we? -At base, you can set an atom's color to some `rrggbbaa` string (see [here](https://www.byond.com/docs/ref/#/{{appendix}}/html-colors)). This will shade every pixel on that atom to said color, and override its [`/atom/var/alpha`](https://www.byond.com/docs/ref/#/atom/var/alpha) value. +At base, you can set an atom's color to some `rrggbbaa` string (see [here](https://www.byond.com/docs/ref/#/{{appendix}}/html-colors)). This will shade every pixel on that atom to said color, and override its [`/atom/var/alpha`](https://www.byond.com/docs/ref/#/atom/var/alpha) value. See [appearance flags](#appearance-flags) for how this effect can carry into overlays and such. That's the boring stuff, now the fun shit. @@ -705,7 +707,7 @@ It'll help visualize this process quite well. Play around with it, it's fun. ## Transform - [Table of Contents](#table-of-contents) -- [Reference Entry](https://www.byond.com/docs/ref/#/atom/var/transform) +- [Reference Entry](https://www.byond.com/docs/ref/#/atom/var/transform) `/atom/var/transform` allows you to shift, contort, rotate and scale atoms visually. This is done using a matrix, similarly to color matrixes. You will likely never need to use it manually however, since there are @@ -732,17 +734,17 @@ and forget to update this file. ## Animate() - [Table of Contents](#table-of-contents) -- [Reference Entry](https://www.byond.com/docs/ref/#/proc/animate) +- [Reference Entry](https://www.byond.com/docs/ref/#/proc/animate) The animate proc allows us to VISUALLY transition between different values on an appearance on clients, while in actuality setting the values instantly on the servers. This is quite powerful, and lets us do many things, like slow fades, shakes, hell even parallax using matrixes. -It doesn't support everything, and it can be quite temperamental especially if you use things like the flag that makes it work in +It doesn't support everything, and it can be quite temperamental especially if you use things like the flag that makes it work in parallel. It's got a lot of nuance to it, but it's real useful. Works on filters and their variables too, which is AGGRESSIVELY useful. -Lets you give radiation glow a warm pulse, that sort of thing. +Lets you give radiation glow a warm pulse, that sort of thing. ## GAGS - [Table of Contents](#table-of-contents) diff --git a/.github/max_required_byond_client.txt b/.github/max_required_byond_client.txt index faf8058076a2a..bd10125cce940 100644 --- a/.github/max_required_byond_client.txt +++ b/.github/max_required_byond_client.txt @@ -5,4 +5,4 @@ # (Requiring clients update to connect to the game server is not something we like to spring on them with no notice, # especially for beta builds where the pager/updater won't let them update without additional configuration.) -514 +515 diff --git a/.github/workflows/ci_suite.yml b/.github/workflows/ci_suite.yml index f514e52b21fdc..412fda467dd7c 100644 --- a/.github/workflows/ci_suite.yml +++ b/.github/workflows/ci_suite.yml @@ -13,14 +13,18 @@ on: merge_group: branches: - master + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + jobs: run_linters: if: ( !contains(github.event.head_commit.message, '[ci skip]') ) name: Run Linters runs-on: ubuntu-22.04 - concurrency: - group: run_linters-${{ github.head_ref || github.run_id }} - cancel-in-progress: true + timeout-minutes: 5 + steps: - uses: actions/checkout@v4 - name: Restore SpacemanDMM cache @@ -130,9 +134,8 @@ jobs: name: Compile Maps needs: [collect_data] runs-on: ubuntu-22.04 - concurrency: - group: compile_all_maps-${{ github.head_ref || github.run_id }} - cancel-in-progress: true + timeout-minutes: 5 + steps: - uses: actions/checkout@v4 - name: Restore BYOND cache @@ -155,13 +158,12 @@ jobs: if: ( !contains(github.event.head_commit.message, '[ci skip]') ) name: Collect data for other tasks runs-on: ubuntu-22.04 + timeout-minutes: 5 outputs: maps: ${{ steps.map_finder.outputs.maps }} alternate_tests: ${{ steps.alternate_test_finder.outputs.alternate_tests }} max_required_byond_client: ${{ steps.max_required_byond_client.outputs.max_required_byond_client }} - concurrency: - group: find_all_maps-${{ github.head_ref || github.run_id }} - cancel-in-progress: true + steps: - uses: actions/checkout@v4 - name: Find Maps @@ -186,13 +188,12 @@ jobs: if: ( !contains(github.event.head_commit.message, '[ci skip]') ) name: Integration Tests needs: [collect_data] + strategy: fail-fast: false matrix: map: ${{ fromJSON(needs.collect_data.outputs.maps).paths }} - concurrency: - group: run_all_tests-${{ github.head_ref || github.run_id }}-${{ matrix.map }} - cancel-in-progress: true + uses: ./.github/workflows/run_integration_tests.yml with: map: ${{ matrix.map }} @@ -206,9 +207,7 @@ jobs: fail-fast: false matrix: setup: ${{ fromJSON(needs.collect_data.outputs.alternate_tests) }} - concurrency: - group: run_all_tests-${{ github.head_ref || github.run_id }}-${{ matrix.setup.major }}.${{ matrix.setup.minor }}-${{ matrix.setup.map }} - cancel-in-progress: true + uses: ./.github/workflows/run_integration_tests.yml with: map: ${{ matrix.setup.map }} @@ -221,6 +220,7 @@ jobs: name: Check Alternate Tests needs: [run_alternate_tests] runs-on: ubuntu-22.04 + timeout-minutes: 5 steps: - run: echo Alternate tests passed. @@ -228,6 +228,7 @@ jobs: if: ( !contains(github.event.head_commit.message, '[ci skip]') && (always() && (!failure() && !cancelled())) ) needs: [run_all_tests, run_alternate_tests] name: Compare Screenshot Tests + timeout-minutes: 15 runs-on: ubuntu-22.04 steps: - uses: actions/checkout@v4 @@ -266,9 +267,8 @@ jobs: name: Windows Build needs: [collect_data] runs-on: windows-latest - concurrency: - group: test_windows-${{ github.head_ref || github.run_id }} - cancel-in-progress: true + timeout-minutes: 5 + steps: - uses: actions/checkout@v4 - name: Restore Yarn cache diff --git a/.github/workflows/codeowner_reviews.yml b/.github/workflows/codeowner_reviews.yml index cffab706d6100..e6cfb98027901 100644 --- a/.github/workflows/codeowner_reviews.yml +++ b/.github/workflows/codeowner_reviews.yml @@ -9,6 +9,7 @@ jobs: assign-users: runs-on: ubuntu-latest + timeout-minutes: 5 steps: # Checks-out your repository under $GITHUB_WORKSPACE, so the job can access it diff --git a/.github/workflows/run_integration_tests.yml b/.github/workflows/run_integration_tests.yml index 42954b571b6cc..7b544fef2a66c 100644 --- a/.github/workflows/run_integration_tests.yml +++ b/.github/workflows/run_integration_tests.yml @@ -16,9 +16,11 @@ on: max_required_byond_client: required: true type: string + jobs: run_integration_tests: runs-on: ubuntu-latest + timeout-minutes: 15 services: mysql: image: mysql:latest @@ -57,7 +59,7 @@ jobs: run: | bash tools/ci/install_byond.sh source $HOME/BYOND/byond/bin/byondsetup - tools/build/build --ci dm -DCIBUILDING -DANSICOLORS -WError -NWTG0001 + tools/build/build --ci dm -DCIBUILDING -DANSICOLORS -Werror -ITG0001 -I"loop_checks" - name: Run Tests run: | source $HOME/BYOND/byond/bin/byondsetup diff --git a/.tgs.yml b/.tgs.yml index 76a53577b505b..dd18c3b8a2577 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: "515.1633" +byond: "515.1637" # Folders to create in "/Configuration/GameStaticFiles/" static_files: # Config directory should be static diff --git a/RUN_SERVER.cmd b/RUN_SERVER.cmd new file mode 100644 index 0000000000000..70e60a5276da3 --- /dev/null +++ b/RUN_SERVER.cmd @@ -0,0 +1,2 @@ +@echo off +call "%~dp0\tools\build\build.bat" --wait-on-error server %* diff --git a/SQL/database_changelog.md b/SQL/database_changelog.md index a71cf673d3dbc..8ae4c7d42647b 100644 --- a/SQL/database_changelog.md +++ b/SQL/database_changelog.md @@ -2,19 +2,32 @@ Any time you make a change to the schema files, remember to increment the databa Make sure to also update `DB_MAJOR_VERSION` and `DB_MINOR_VERSION`, which can be found in `code/__DEFINES/subsystem.dm`. -The latest database version is 5.26; The query to update the schema revision table is: +The latest database version is 5.27; The query to update the schema revision table is: ```sql -INSERT INTO `schema_revision` (`major`, `minor`) VALUES (5, 26); +INSERT INTO `schema_revision` (`major`, `minor`) VALUES (5, 27); ``` or ```sql -INSERT INTO `SS13_schema_revision` (`major`, `minor`) VALUES (5, 26); +INSERT INTO `SS13_schema_revision` (`major`, `minor`) VALUES (5, 27); ``` In any query remember to add a prefix to the table names if you use one. - +----------------------------------------------------- +Version 5.27, 26 April 2024, by zephyrtfa +Add the ip intel whitelist table +```sql +DROP TABLE IF EXISTS `ipintel_whitelist`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `ipintel_whitelist` ( + `ckey` varchar(32) NOT NULL, + `admin_ckey` varchar(32) NOT NULL, + PRIMARY KEY (`ckey`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; +``` ----------------------------------------------------- Version 5.26, 03 December 2023, by distributivgesetz Set the default value of cloneloss to 0, as it's obsolete and it won't be set by blackbox anymore. diff --git a/SQL/tgstation_schema.sql b/SQL/tgstation_schema.sql index 64bbf4259d931..19739a306b5eb 100644 --- a/SQL/tgstation_schema.sql +++ b/SQL/tgstation_schema.sql @@ -215,6 +215,20 @@ CREATE TABLE `ipintel` ( ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; /*!40101 SET character_set_client = @saved_cs_client */; +-- +-- Table structure for table `ipintel_whitelist` +-- + +DROP TABLE IF EXISTS `ipintel_whitelist`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `ipintel_whitelist` ( + `ckey` varchar(32) NOT NULL, + `admin_ckey` varchar(32) NOT NULL, + PRIMARY KEY (`ckey`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + -- -- Table structure for table `legacy_population` -- diff --git a/SQL/tgstation_schema_prefixed.sql b/SQL/tgstation_schema_prefixed.sql index 597281f2c2076..fb9a6cbe10fa4 100644 --- a/SQL/tgstation_schema_prefixed.sql +++ b/SQL/tgstation_schema_prefixed.sql @@ -214,6 +214,19 @@ CREATE TABLE `SS13_ipintel` ( KEY `idx_ipintel` (`ip`,`intel`,`date`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; /*!40101 SET character_set_client = @saved_cs_client */; +-- +-- Table structure for table `ipintel_whitelist` +-- + +DROP TABLE IF EXISTS `SS13_ipintel_whitelist`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `SS13_ipintel_whitelist` ( + `ckey` varchar(32) NOT NULL, + `admin_ckey` varchar(32) NOT NULL, + PRIMARY KEY (`ckey`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; -- -- Table structure for table `SS13_legacy_population` diff --git a/_maps/RandomRuins/AnywhereRuins/golem_ship.dmm b/_maps/RandomRuins/AnywhereRuins/golem_ship.dmm index cddd5a0820659..d910f5d76734c 100644 --- a/_maps/RandomRuins/AnywhereRuins/golem_ship.dmm +++ b/_maps/RandomRuins/AnywhereRuins/golem_ship.dmm @@ -686,7 +686,6 @@ "Ro" = ( /obj/structure/table/wood, /obj/item/bedsheet/rd/royal_cape{ - layer = 3; pixel_x = 5; pixel_y = 9 }, diff --git a/_maps/RandomRuins/IceRuins/icemoon_surface_smoking_room.dmm b/_maps/RandomRuins/IceRuins/icemoon_surface_smoking_room.dmm index faa5cf18ae978..047d4b4c042b1 100644 --- a/_maps/RandomRuins/IceRuins/icemoon_surface_smoking_room.dmm +++ b/_maps/RandomRuins/IceRuins/icemoon_surface_smoking_room.dmm @@ -6,7 +6,7 @@ /obj/item/circuitboard/machine/space_heater, /obj/item/stack/cable_coil/five, /obj/structure/frame/machine, -/obj/item/stock_parts/cell/super, +/obj/item/stock_parts/power_store/cell/super, /turf/open/floor/wood, /area/ruin/smoking_room/house) "d" = ( @@ -175,11 +175,11 @@ /area/ruin/smoking_room/room) "E" = ( /obj/item/trash/shrimp_chips, -/obj/item/clothing/mask/cigarette/rollie/trippy{ +/obj/item/cigarette/rollie/trippy{ pixel_x = 3; pixel_y = -1 }, -/obj/item/clothing/mask/cigarette/rollie/trippy{ +/obj/item/cigarette/rollie/trippy{ pixel_x = 3; pixel_y = 5 }, diff --git a/_maps/RandomRuins/IceRuins/icemoon_underground_abandoned_plasma_facility.dmm b/_maps/RandomRuins/IceRuins/icemoon_underground_abandoned_plasma_facility.dmm index f344652d623b4..96dec4af7207d 100644 --- a/_maps/RandomRuins/IceRuins/icemoon_underground_abandoned_plasma_facility.dmm +++ b/_maps/RandomRuins/IceRuins/icemoon_underground_abandoned_plasma_facility.dmm @@ -89,7 +89,7 @@ }, /obj/effect/decal/cleanable/dirt, /obj/machinery/cell_charger, -/obj/item/stock_parts/cell, +/obj/item/stock_parts/power_store/cell, /turf/open/floor/plating, /area/ruin/plasma_facility/operations) "bv" = ( @@ -166,7 +166,7 @@ pixel_x = -7; pixel_y = 8 }, -/obj/item/stock_parts/cell/high{ +/obj/item/stock_parts/power_store/cell/high{ pixel_x = -18; pixel_y = -3 }, diff --git a/_maps/RandomRuins/IceRuins/icemoon_underground_comms_agent.dmm b/_maps/RandomRuins/IceRuins/icemoon_underground_comms_agent.dmm new file mode 100644 index 0000000000000..ff3417fefce6d --- /dev/null +++ b/_maps/RandomRuins/IceRuins/icemoon_underground_comms_agent.dmm @@ -0,0 +1,4235 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"ag" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/plating, +/area/ruin/comms_agent) +"bk" = ( +/turf/open/floor/iron, +/area/ruin/comms_agent) +"bs" = ( +/obj/structure/table, +/obj/structure/desk_bell{ + pixel_y = -1; + pixel_x = -8 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/carpet, +/area/ruin/comms_agent) +"bt" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/obj/machinery/light/directional/south, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/wood, +/area/ruin/comms_agent) +"ce" = ( +/obj/machinery/modular_computer/preset{ + dir = 1 + }, +/turf/open/floor/wood/tile, +/area/ruin/comms_agent) +"cI" = ( +/obj/structure/water_source/puddle, +/obj/item/reagent_containers/cup/glass/waterbottle/large/empty{ + pixel_x = 5; + pixel_y = -6 + }, +/turf/open/misc/asteroid/snow/standard_air, +/area/ruin/comms_agent) +"di" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/turf/open/lava/plasma/ice_moon, +/area/icemoon/underground/explored) +"do" = ( +/turf/open/floor/iron/white, +/area/ruin/comms_agent) +"ds" = ( +/obj/structure/bed/maint, +/obj/item/bedsheet/syndie, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/wood/tile, +/area/ruin/comms_agent) +"dP" = ( +/obj/structure/closet/crate/secure/freezer/commsagent, +/turf/open/floor/wood, +/area/ruin/comms_agent) +"eE" = ( +/obj/structure/cable, +/turf/open/floor/wood, +/area/ruin/comms_agent) +"eT" = ( +/obj/effect/mob_spawn/ghost_role/human/lavaland_syndicate/comms/icemoon{ + dir = 1 + }, +/turf/open/floor/iron/white, +/area/ruin/comms_agent) +"fk" = ( +/obj/structure/rack, +/obj/structure/cable, +/obj/item/storage/box/lights/mixed{ + pixel_y = 1 + }, +/obj/item/storage/toolbox/electrical{ + pixel_y = -2; + pixel_x = 2 + }, +/obj/item/storage/toolbox/mechanical{ + pixel_y = -7; + pixel_x = -1 + }, +/turf/open/floor/plating, +/area/ruin/comms_agent/maint) +"ge" = ( +/obj/structure/reagent_dispensers/fueltank, +/turf/open/floor/plating, +/area/ruin/comms_agent/maint) +"gt" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/carpet, +/area/ruin/comms_agent) +"gv" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 1 + }, +/turf/open/lava/plasma/ice_moon, +/area/icemoon/underground/explored) +"gY" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/wood/parquet, +/area/ruin/comms_agent) +"he" = ( +/turf/open/misc/asteroid/snow/standard_air, +/area/ruin/comms_agent) +"hl" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/machinery/light/small/directional/west, +/turf/open/floor/iron, +/area/ruin/comms_agent) +"hW" = ( +/obj/effect/turf_decal/siding/wideplating/light{ + dir = 8 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/wood, +/area/ruin/comms_agent) +"ig" = ( +/obj/effect/turf_decal/siding/wood, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/explored) +"ij" = ( +/obj/effect/turf_decal/siding/wideplating/light/corner{ + dir = 8 + }, +/turf/open/floor/wood, +/area/ruin/comms_agent) +"in" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/wood, +/area/ruin/comms_agent) +"iZ" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/explored) +"jc" = ( +/obj/structure/flora/tree/pine/style_random, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/explored) +"jB" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/wood, +/area/ruin/comms_agent) +"ka" = ( +/obj/machinery/seed_extractor, +/turf/open/misc/asteroid/snow/standard_air, +/area/ruin/comms_agent) +"kp" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/wood/tile, +/area/ruin/comms_agent) +"kA" = ( +/obj/effect/turf_decal/siding/wood, +/obj/structure/fluff/fokoff_sign, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/explored) +"kB" = ( +/obj/structure/cable, +/obj/structure/sign/poster/contraband/random/directional/east, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/plating, +/area/ruin/comms_agent/maint) +"kD" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 5 + }, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 8 + }, +/obj/effect/decal/cleanable/cobweb, +/obj/item/storage/bag/trash, +/obj/structure/closet/crate/bin, +/turf/open/floor/wood, +/area/ruin/comms_agent) +"kL" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/wood, +/area/ruin/comms_agent) +"la" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/closed/wall, +/area/ruin/comms_agent) +"lb" = ( +/turf/open/floor/stone, +/area/ruin/comms_agent) +"lj" = ( +/obj/machinery/light_switch/directional/south, +/obj/effect/mapping_helpers/turn_off_lights_with_lightswitch, +/turf/open/floor/iron/white, +/area/ruin/comms_agent) +"ly" = ( +/obj/structure/flora/tree/pine/style_random, +/obj/structure/flora/grass/green/style_random, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/explored) +"mb" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/wood, +/area/ruin/comms_agent) +"mr" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/wood, +/area/ruin/comms_agent) +"mM" = ( +/obj/structure/ore_box, +/turf/open/floor/wood/parquet, +/area/ruin/comms_agent) +"nc" = ( +/obj/machinery/door/airlock/glass, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/wood/tile, +/area/ruin/comms_agent) +"nm" = ( +/obj/machinery/atmospherics/components/unary/passive_vent/layer2{ + dir = 4 + }, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/explored) +"nL" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/shower/directional/south, +/obj/structure/curtain, +/turf/open/floor/iron/white/diagonal, +/area/ruin/comms_agent) +"nP" = ( +/turf/closed/wall/r_wall, +/area/ruin/comms_agent) +"od" = ( +/obj/machinery/oven/range, +/turf/open/floor/iron/white, +/area/ruin/comms_agent) +"oE" = ( +/obj/item/tape/frozen, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/explored) +"pg" = ( +/obj/machinery/atmospherics/components/unary/passive_vent/layer2{ + dir = 8 + }, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/explored) +"pl" = ( +/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, +/obj/machinery/door/airlock/centcom{ + name = "Syndicate Secure Airlock System"; + desc = "Truly, a marvel of modern engineering." + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/wood/tile, +/area/ruin/comms_agent) +"pV" = ( +/obj/machinery/light/small/directional/south, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/wood/tile, +/area/ruin/comms_agent) +"qE" = ( +/obj/item/pickaxe, +/obj/structure/closet/crate, +/obj/item/flashlight, +/obj/item/tank/internals/emergency_oxygen, +/obj/item/tank/internals/emergency_oxygen, +/turf/open/floor/wood/parquet, +/area/ruin/comms_agent) +"rh" = ( +/obj/structure/chair/office/tactical{ + dir = 8 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/wood/tile, +/area/ruin/comms_agent) +"rA" = ( +/obj/machinery/atmospherics/components/tank/air, +/obj/machinery/light/dim/directional/north, +/turf/open/floor/plating, +/area/ruin/comms_agent/maint) +"rW" = ( +/obj/structure/filingcabinet, +/obj/item/paperwork, +/obj/item/paper/monitorkey, +/obj/item/paper/fluff/ruins/listeningstation/briefing{ + pixel_x = -2 + }, +/turf/open/floor/wood/tile, +/area/ruin/comms_agent) +"sc" = ( +/obj/effect/decal/cleanable/blood/splatter/over_window{ + pixel_y = 32 + }, +/obj/structure/sign/poster/official/nanotrasen_logo/directional/north, +/turf/open/floor/wood/parquet, +/area/ruin/comms_agent) +"sB" = ( +/obj/structure/flora/rock/pile/icy/style_random, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/explored) +"sJ" = ( +/obj/structure/sign/poster/contraband/random/directional/west, +/obj/machinery/computer/camera_advanced/syndie{ + dir = 4 + }, +/turf/open/floor/wood/tile, +/area/ruin/comms_agent) +"tb" = ( +/obj/machinery/power/port_gen/pacman, +/obj/structure/cable, +/turf/open/floor/plating, +/area/ruin/comms_agent/maint) +"tl" = ( +/turf/closed/mineral/snowmountain/cavern/icemoon, +/area/icemoon/underground/explored) +"tp" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 4 + }, +/turf/open/lava/plasma/ice_moon, +/area/icemoon/underground/explored) +"tu" = ( +/obj/structure/table, +/obj/item/lighter/skull{ + pixel_x = -4; + pixel_y = -3 + }, +/obj/item/storage/fancy/cigarettes/cigpack_syndicate{ + pixel_x = 6; + pixel_y = 4 + }, +/turf/open/floor/wood, +/area/ruin/comms_agent) +"ud" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light/small/directional/west, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/plating/snowed/standard_air, +/area/ruin/comms_agent) +"uk" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/yellow/visible/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/visible, +/turf/open/floor/plating, +/area/ruin/comms_agent/maint) +"un" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/effect/decal/cleanable/cobweb/cobweb2, +/obj/structure/tank_holder/extinguisher, +/turf/open/floor/wood, +/area/ruin/comms_agent) +"up" = ( +/obj/effect/decal/cleanable/food/flour, +/turf/open/floor/wood, +/area/ruin/comms_agent) +"uY" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/wood/tile, +/area/ruin/comms_agent) +"vB" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/table/reinforced, +/obj/item/pen/survival{ + pixel_x = 8; + pixel_y = 8 + }, +/obj/machinery/button/door{ + id = "syndie_lpost_icemoon_windows"; + name = "Window Shutters"; + req_access = list("syndicate") + }, +/turf/open/floor/wood/tile, +/area/ruin/comms_agent) +"vK" = ( +/obj/effect/turf_decal/siding/wideplating/light, +/obj/machinery/computer/arcade/orion_trail, +/turf/open/floor/wood, +/area/ruin/comms_agent) +"vV" = ( +/obj/structure/toilet{ + dir = 4 + }, +/turf/open/floor/iron/white/diagonal, +/area/ruin/comms_agent) +"wh" = ( +/obj/structure/curtain{ + open = 0; + icon_state = "bathroom-closed" + }, +/obj/item/soap/syndie, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/white/diagonal, +/area/ruin/comms_agent) +"wj" = ( +/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, +/obj/machinery/door/airlock/centcom{ + name = "Nanotrasen Airlock"; + desc = "Truly, a marvel of modern engineering." + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/wood/tile, +/area/ruin/comms_agent) +"xi" = ( +/obj/machinery/hydroponics/soil, +/turf/open/misc/asteroid/snow/standard_air, +/area/ruin/comms_agent) +"xq" = ( +/obj/effect/decal/cleanable/dirt, +/obj/item/radio/intercom{ + pixel_x = 31; + syndie = 1; + freerange = 1; + name = "syndicate radio intercom"; + desc = "A custom-made Syndicate-issue intercom used to transmit on all Nanotrasen frequencies. Particularly expensive." + }, +/obj/structure/table/reinforced, +/obj/machinery/fax{ + syndicate_network = 1; + allow_exotic_faxes = 1; + fax_name = "Listening Post"; + desc = "Bluespace technologies on the application of bureaucracy. This one is send-only"; + pixel_y = 5 + }, +/turf/open/floor/wood/tile, +/area/ruin/comms_agent) +"xs" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/table, +/obj/machinery/microwave, +/turf/open/floor/iron/white, +/area/ruin/comms_agent) +"xz" = ( +/obj/item/chair/stool/bar, +/turf/open/floor/carpet, +/area/ruin/comms_agent) +"xD" = ( +/obj/structure/table, +/obj/structure/sign/poster/contraband/random/directional/west, +/obj/item/food/pizzaslice/moldy, +/obj/structure/closet/mini_fridge/grimy, +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/plating, +/area/ruin/comms_agent) +"yD" = ( +/obj/machinery/door/airlock/external/ruin, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "syndicate_comms_base" + }, +/obj/structure/fans/tiny, +/turf/open/floor/iron, +/area/ruin/comms_agent) +"yG" = ( +/obj/machinery/computer/message_monitor{ + dir = 4 + }, +/turf/open/floor/wood/tile, +/area/ruin/comms_agent) +"yR" = ( +/obj/structure/table, +/obj/item/taperecorder/empty, +/turf/open/floor/carpet, +/area/ruin/comms_agent) +"zi" = ( +/turf/open/floor/plating, +/area/ruin/comms_agent) +"zG" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/wood, +/area/ruin/comms_agent) +"zJ" = ( +/obj/machinery/biogenerator, +/turf/open/misc/asteroid/snow/standard_air, +/area/ruin/comms_agent) +"Ac" = ( +/obj/effect/turf_decal/siding/wideplating/light{ + dir = 8 + }, +/obj/structure/table, +/obj/machinery/coffeemaker/impressa{ + pixel_y = 4 + }, +/turf/open/floor/wood, +/area/ruin/comms_agent) +"Bx" = ( +/obj/effect/baseturf_helper/asteroid/snow, +/turf/closed/wall, +/area/ruin/comms_agent) +"BD" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 8 + }, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/explored) +"BQ" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/chair/office/tactical, +/turf/open/floor/wood/tile, +/area/ruin/comms_agent) +"BZ" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/light/directional/north, +/obj/structure/sign/poster/contraband/random/directional/north, +/obj/item/storage/fancy/egg_box, +/obj/item/reagent_containers/condiment/rice, +/obj/item/reagent_containers/condiment/milk, +/obj/item/reagent_containers/condiment/flour, +/obj/structure/closet/secure_closet/freezer/empty, +/obj/item/storage/box/donkpockets, +/obj/item/coffee_cartridge, +/obj/item/coffee_cartridge/decaf, +/obj/item/coffee_cartridge/fancy, +/turf/open/floor/iron/white, +/area/ruin/comms_agent) +"CL" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/yellow/visible/layer2, +/obj/machinery/power/smes/super/full, +/turf/open/floor/plating, +/area/ruin/comms_agent/maint) +"CS" = ( +/obj/structure/rack, +/obj/item/clothing/head/utility/welding, +/obj/item/flashlight, +/obj/item/weldingtool/largetank, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/effect/mapping_helpers/apc/syndicate_access, +/turf/open/floor/plating, +/area/ruin/comms_agent/maint) +"CW" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/closet/emcloset, +/turf/open/floor/plating, +/area/ruin/comms_agent/maint) +"DH" = ( +/obj/structure/closet/crate/freezer, +/obj/item/food/grown/potato, +/obj/item/food/grown/potato, +/obj/item/food/grown/onion, +/obj/item/food/grown/garlic, +/turf/open/floor/iron/white, +/area/ruin/comms_agent) +"DT" = ( +/obj/item/stack/sheet/mineral/wood{ + pixel_x = -4; + pixel_y = 3; + amount = 30 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/stone, +/area/ruin/comms_agent) +"EL" = ( +/turf/template_noop, +/area/template_noop) +"Fm" = ( +/obj/machinery/telecomms/relay/preset/ruskie{ + use_power = 0 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/wood/tile, +/area/ruin/comms_agent) +"FL" = ( +/obj/structure/table/wood, +/obj/item/multitool, +/obj/machinery/airalarm/directional/west, +/obj/effect/mapping_helpers/airalarm/syndicate_access, +/turf/open/floor/wood/tile, +/area/ruin/comms_agent) +"FZ" = ( +/obj/effect/baseturf_helper/reinforced_plating/ceiling, +/obj/structure/cable, +/turf/open/floor/wood, +/area/ruin/comms_agent) +"Gp" = ( +/obj/structure/fluff/empty_sleeper/syndicate{ + dir = 1; + desc = "An open sleeper. This one seems to be malfunctioning." + }, +/turf/open/floor/iron/white, +/area/ruin/comms_agent) +"Gq" = ( +/obj/effect/turf_decal/siding/wood, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/wood, +/area/ruin/comms_agent) +"GI" = ( +/obj/structure/closet/crate/hydroponics, +/obj/effect/spawner/random/food_or_drink/seed, +/obj/item/seeds/corn, +/obj/item/seeds/tower, +/obj/item/storage/bag/plants/portaseeder, +/obj/item/seeds/coffee/robusta, +/obj/item/seeds/wheat, +/obj/effect/spawner/random/food_or_drink/seed, +/turf/open/misc/asteroid/snow/standard_air, +/area/ruin/comms_agent) +"GQ" = ( +/obj/structure/table, +/obj/item/camera{ + pixel_y = 8; + pixel_x = 5 + }, +/obj/item/paper/pamphlet/centcom/visitor_info{ + pixel_x = -5 + }, +/obj/machinery/light/cold/directional/east, +/turf/open/floor/carpet, +/area/ruin/comms_agent) +"GR" = ( +/obj/machinery/atmospherics/components/trinary/mixer/flipped/layer2{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/ruin/comms_agent/maint) +"GY" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/explored) +"HX" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/wood/tile, +/area/ruin/comms_agent) +"Ie" = ( +/obj/effect/turf_decal/siding/wood/corner, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/explored) +"IJ" = ( +/obj/machinery/griddle, +/turf/open/floor/iron/white, +/area/ruin/comms_agent) +"Jh" = ( +/obj/effect/turf_decal/siding/wood/corner, +/obj/structure/table, +/obj/item/reagent_containers/cup/maunamug{ + pixel_x = 5; + pixel_y = 3 + }, +/obj/item/storage/fancy/coffee_condi_display{ + pixel_x = -13; + pixel_y = 4 + }, +/obj/item/storage/box/coffeepack, +/turf/open/floor/wood, +/area/ruin/comms_agent) +"JD" = ( +/obj/structure/closet/cabinet, +/obj/item/bedsheet/syndie, +/obj/item/clothing/suit/hooded/wintercoat, +/obj/item/clothing/shoes/winterboots/ice_boots/eva{ + pixel_x = -1; + pixel_y = 4 + }, +/obj/item/reagent_containers/cup/maunamug, +/obj/item/toy/plush/nukeplushie, +/obj/item/ammo_box/magazine/m9mm, +/obj/item/ammo_box/magazine/m9mm, +/obj/item/clothing/head/costume/ushanka, +/turf/open/floor/wood/tile, +/area/ruin/comms_agent) +"JY" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/white, +/area/ruin/comms_agent) +"Kv" = ( +/obj/machinery/atmospherics/components/trinary/filter/layer2{ + dir = 8 + }, +/obj/structure/cable, +/obj/machinery/power/terminal{ + dir = 4 + }, +/obj/machinery/portable_atmospherics/canister/oxygen, +/turf/open/floor/plating, +/area/ruin/comms_agent/maint) +"KB" = ( +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/wood/parquet, +/area/ruin/comms_agent) +"KG" = ( +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/stone, +/area/ruin/comms_agent) +"KM" = ( +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/wood/parquet, +/area/ruin/comms_agent) +"KQ" = ( +/turf/open/genturf, +/area/template_noop) +"KR" = ( +/obj/effect/baseturf_helper/asteroid/snow, +/turf/closed/wall, +/area/ruin/comms_agent/maint) +"Lh" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/obj/item/cultivator/rake, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating/snowed/standard_air, +/area/ruin/comms_agent) +"Ll" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/machinery/light/small/directional/east, +/obj/machinery/atmospherics/components/binary/volume_pump/layer2{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/ruin/comms_agent/maint) +"Lr" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/table, +/obj/item/reagent_containers/cup/glass/waterbottle/empty{ + pixel_y = 18; + pixel_x = -8 + }, +/obj/item/reagent_containers/cup/bowl{ + pixel_y = 7; + pixel_x = -7 + }, +/obj/item/reagent_containers/condiment/saltshaker, +/obj/item/reagent_containers/condiment/peppermill{ + pixel_x = -7 + }, +/obj/machinery/reagentgrinder{ + pixel_x = 5; + pixel_y = 13 + }, +/turf/open/floor/iron/white, +/area/ruin/comms_agent) +"Lz" = ( +/turf/open/floor/wood{ + initial_gas_mix = "ICEMOON_ATMOS"; + name = "bridge" + }, +/area/icemoon/underground/explored) +"LI" = ( +/obj/item/fishing_line/reinforced{ + pixel_x = 7; + pixel_y = 4 + }, +/turf/open/misc/asteroid/snow/standard_air, +/area/ruin/comms_agent) +"LP" = ( +/turf/closed/wall/r_wall, +/area/ruin/comms_agent/maint) +"Mj" = ( +/obj/structure/fireplace, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/stone, +/area/ruin/comms_agent) +"Ml" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/spawner/random/trash/mess, +/turf/open/floor/stone, +/area/ruin/comms_agent) +"Mv" = ( +/obj/structure/closet/crate, +/obj/item/stack/sheet/glass{ + amount = 20 + }, +/obj/item/stack/sheet/iron/twenty, +/obj/item/stack/sheet/leather{ + amount = 10 + }, +/obj/item/reagent_containers/condiment/enzyme, +/obj/structure/cable, +/obj/item/stack/sheet/mineral/plasma/thirty, +/obj/item/stack/sheet/mineral/plasma/thirty, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/plating, +/area/ruin/comms_agent/maint) +"Mz" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/wood, +/area/ruin/comms_agent) +"MH" = ( +/turf/closed/mineral/snowmountain/icemoon, +/area/icemoon/underground/explored) +"MM" = ( +/obj/machinery/door/airlock/maintenance, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/plating, +/area/ruin/comms_agent/maint) +"Ng" = ( +/obj/item/chair/wood/wings, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/stone, +/area/ruin/comms_agent) +"Ny" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/washing_machine{ + pixel_x = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/plating/snowed/standard_air, +/area/ruin/comms_agent) +"NJ" = ( +/obj/item/storage/medkit/regular, +/obj/item/reagent_containers/syringe, +/obj/structure/closet/secure_closet/freezer/empty/open, +/turf/open/floor/iron/white, +/area/ruin/comms_agent) +"NL" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/closed/wall/r_wall, +/area/ruin/comms_agent/maint) +"Ok" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 1 + }, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/explored) +"Oy" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/plating/snowed/standard_air, +/area/ruin/comms_agent) +"OB" = ( +/turf/open/lava/plasma/ice_moon, +/area/icemoon/underground/explored) +"OM" = ( +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/explored) +"Pj" = ( +/obj/structure/bed/maint, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/wood/tile, +/area/ruin/comms_agent) +"PC" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 4 + }, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/explored) +"PX" = ( +/obj/item/storage/toolbox/fishing{ + pixel_y = -9; + pixel_x = 11 + }, +/turf/open/misc/asteroid/snow/standard_air, +/area/ruin/comms_agent) +"Qn" = ( +/obj/machinery/power/apc/auto_name/directional/east, +/obj/effect/mapping_helpers/apc/syndicate_access, +/obj/structure/cable, +/turf/open/floor/wood, +/area/ruin/comms_agent) +"Qx" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/visible, +/obj/machinery/atmospherics/pipe/smart/manifold4w/yellow/visible/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/ruin/comms_agent/maint) +"QG" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/structure/cable, +/obj/item/pipe/trinary/flippable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/wood, +/area/ruin/comms_agent) +"QT" = ( +/obj/structure/table, +/obj/item/storage/photo_album/icemoonlisteningstation{ + pixel_x = -5; + pixel_y = 4 + }, +/obj/item/crowbar/red, +/turf/open/floor/wood, +/area/ruin/comms_agent) +"QU" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/closed/wall/r_wall, +/area/ruin/comms_agent) +"QW" = ( +/obj/machinery/atmospherics/pipe/layer_manifold/general/visible, +/turf/open/floor/plating, +/area/ruin/comms_agent/maint) +"Sc" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/plating, +/area/ruin/comms_agent) +"Tn" = ( +/obj/structure/table/reinforced, +/obj/item/paper_bin/carbon{ + pixel_x = -2; + pixel_y = 5 + }, +/obj/machinery/newscaster/directional/south, +/obj/item/pen/edagger, +/obj/machinery/light/small/directional/south, +/turf/open/floor/wood/tile, +/area/ruin/comms_agent) +"Tp" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/plating, +/area/ruin/comms_agent) +"TH" = ( +/obj/structure/flora/tree/dead/style_random, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/explored) +"TV" = ( +/obj/structure/flora/grass/green/style_random, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/explored) +"Uv" = ( +/obj/effect/decal/cleanable/cobweb/cobweb2, +/turf/open/floor/carpet, +/area/ruin/comms_agent) +"Uw" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/carpet, +/area/ruin/comms_agent) +"UI" = ( +/obj/structure/table/reinforced, +/obj/machinery/computer/records/security/laptop/syndie{ + dir = 1 + }, +/obj/item/paper/monitorkey{ + pixel_x = -15; + pixel_y = 7 + }, +/turf/open/floor/wood/tile, +/area/ruin/comms_agent) +"Vo" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/ruin/comms_agent) +"VN" = ( +/turf/open/floor/carpet, +/area/ruin/comms_agent) +"Wl" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/structure/cable, +/obj/machinery/atmospherics/components/trinary/filter/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/ruin/comms_agent/maint) +"Wm" = ( +/obj/machinery/door/airlock/external/ruin, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "syndicate_comms_base" + }, +/turf/open/floor/iron, +/area/ruin/comms_agent) +"WL" = ( +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/white, +/area/ruin/comms_agent) +"WR" = ( +/turf/closed/wall, +/area/ruin/comms_agent) +"WU" = ( +/obj/structure/sign/warning/explosives/alt/directional/north, +/obj/machinery/syndicatebomb/self_destruct{ + anchored = 1 + }, +/obj/machinery/light/small/red/directional/north, +/obj/machinery/door/window/brigdoor/left/directional/south, +/turf/open/floor/circuit/red, +/area/ruin/comms_agent) +"Xk" = ( +/obj/effect/mapping_helpers/airlock/access/any/syndicate, +/obj/machinery/door/airlock/glass, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/plating, +/area/ruin/comms_agent) +"XU" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "syndie_lpost_icemoon_windows" + }, +/turf/open/floor/plating, +/area/ruin/comms_agent) +"Yz" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/wood/tile, +/area/ruin/comms_agent) +"YA" = ( +/turf/open/floor/wood/parquet, +/area/ruin/comms_agent) +"YI" = ( +/turf/closed/wall, +/area/ruin/comms_agent/maint) +"YX" = ( +/turf/closed/wall/ice, +/area/ruin/comms_agent) +"Ze" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/wood, +/area/ruin/comms_agent) +"ZE" = ( +/obj/structure/sink/directional/east, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/mirror/directional/west, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/white/diagonal, +/area/ruin/comms_agent) + +(1,1,1) = {" +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +"} +(2,1,1) = {" +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +"} +(3,1,1) = {" +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +"} +(4,1,1) = {" +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +"} +(5,1,1) = {" +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +"} +(6,1,1) = {" +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +OB +OB +OB +OB +OB +OB +OB +OB +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +"} +(7,1,1) = {" +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +"} +(8,1,1) = {" +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +"} +(9,1,1) = {" +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +"} +(10,1,1) = {" +EL +EL +EL +EL +EL +EL +EL +EL +EL +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +"} +(11,1,1) = {" +EL +EL +EL +EL +EL +EL +EL +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +OM +OM +OB +OB +OM +OM +OM +OM +OM +OM +OM +OM +OB +OB +OB +OB +OB +OB +OB +OB +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +"} +(12,1,1) = {" +EL +EL +EL +EL +EL +EL +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +OM +OM +OM +OM +OM +OM +OM +MH +OM +OM +OM +MH +MH +OM +OM +OB +OB +OB +OB +OB +OB +OB +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +"} +(13,1,1) = {" +EL +EL +EL +EL +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +OM +OM +OM +OM +OM +OM +MH +MH +MH +nm +MH +MH +MH +MH +OM +OM +OM +OB +OB +OB +OB +OB +OB +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +"} +(14,1,1) = {" +EL +EL +EL +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +OM +OM +OM +OM +MH +MH +MH +MH +nP +nP +QU +nP +nP +tl +MH +MH +OM +OM +OB +OB +OB +OB +OB +OB +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +"} +(15,1,1) = {" +EL +EL +EL +OB +OB +OB +OB +OB +OB +EL +EL +EL +OB +OB +OB +OB +OB +OM +OM +OM +OM +MH +MH +tl +tl +nP +nL +ZE +vV +nP +tl +tl +MH +OM +OM +OM +OB +OB +OB +OB +OB +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +"} +(16,1,1) = {" +EL +EL +OB +OB +OB +EL +EL +EL +EL +EL +EL +EL +OB +OB +OB +OB +OB +OM +OM +OM +MH +MH +tl +tl +tl +nP +WR +wh +la +QU +NL +NL +NL +MH +OM +OM +OB +OB +OB +OB +OB +OB +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +"} +(17,1,1) = {" +EL +EL +OB +EL +EL +EL +EL +EL +EL +EL +EL +OB +OB +OB +OB +OB +OB +OM +OM +MH +MH +tl +nP +nP +nP +nP +od +do +NJ +YI +tb +fk +NL +MH +MH +TH +OB +OB +OB +OB +OB +OB +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +"} +(18,1,1) = {" +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +OB +OB +OB +OB +OB +OM +OM +OM +MH +MH +nP +nP +JD +FL +WR +IJ +do +DH +YI +QW +Qx +NL +LP +MH +OM +OM +OB +OB +OB +OB +OB +OB +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +"} +(19,1,1) = {" +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +OB +OB +OB +OB +OB +OB +OM +OM +TV +MH +MH +nP +ds +uY +pV +WR +BZ +WL +eT +YI +rA +uk +Mv +LP +MH +TV +OM +OB +OB +OB +OB +OB +OB +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +"} +(20,1,1) = {" +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +OB +OB +OB +OB +OB +OM +OM +jc +OM +MH +MH +nP +Pj +HX +Fm +WR +Lr +WL +Gp +YI +ge +GR +Kv +LP +MH +OM +OM +OB +OB +OB +OB +OB +OB +OB +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +"} +(21,1,1) = {" +EL +EL +EL +EL +EL +EL +EL +EL +EL +OB +OB +OB +OB +OB +OM +OM +OM +OM +OM +MH +MH +nP +WR +nc +WR +WR +xs +Vo +lj +YI +CS +Wl +CL +LP +MH +MH +OM +sB +OB +OB +OB +OB +OB +OB +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +"} +(22,1,1) = {" +EL +EL +EL +EL +EL +EL +EL +EL +EL +OB +OB +OB +OB +OB +OM +OM +OM +TV +OM +MH +nP +nP +kD +Ze +WR +vK +JY +JY +JY +MM +kB +Ll +CW +NL +GY +MH +TH +OM +OB +OB +OB +OB +OB +OB +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +"} +(23,1,1) = {" +EL +EL +EL +EL +EL +EL +EL +EL +EL +OB +OB +OB +OB +OM +ly +OM +OM +sB +MH +MH +nP +DT +lb +QG +xD +ij +hW +Ac +Bx +KR +YI +YI +LP +LP +pg +OM +OM +OM +OB +OB +OB +OB +OB +OB +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +"} +(24,1,1) = {" +EL +EL +EL +EL +EL +EL +EL +EL +EL +OB +OB +OB +OB +sB +OM +OM +OM +OM +MH +tl +nP +Mj +Ml +mr +QT +jB +Sc +Jh +WR +yG +sJ +Tn +nP +MH +MH +MH +OM +OB +OB +OB +OB +OB +OB +OB +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +"} +(25,1,1) = {" +EL +EL +EL +EL +EL +EL +EL +EL +EL +OB +OB +OB +OB +OM +OM +OM +jc +MH +MH +tl +nP +KG +Ng +mr +kL +Sc +Tp +Gq +pl +HX +rh +UI +XU +MH +MH +MH +OM +OB +OB +OB +OB +OB +OB +OB +OB +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +"} +(26,1,1) = {" +EL +EL +EL +EL +EL +EL +EL +EL +EL +OB +OB +OB +OB +OM +OM +OM +OM +MH +MH +tl +nP +un +zG +mb +FZ +zi +in +bt +WR +xq +Yz +ce +XU +MH +MH +sB +OM +OB +OB +OB +OB +OB +OB +OB +OB +OB +EL +EL +EL +EL +EL +EL +EL +EL +EL +"} +(27,1,1) = {" +EL +EL +EL +EL +EL +EL +EL +EL +EL +OB +OB +OB +OB +OM +sB +OM +MH +MH +tl +nP +nP +nP +Mz +eE +Qn +up +in +ag +WR +WR +BQ +vB +XU +MH +MH +OM +OM +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +EL +EL +EL +EL +EL +EL +EL +EL +"} +(28,1,1) = {" +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +OB +OB +OB +OM +OM +MH +MH +MH +tl +nP +qE +nP +wj +nP +nP +dP +tu +kL +WR +WU +kp +rW +XU +MH +MH +OM +OM +OB +OB +OB +OB +OB +OB +OB +MH +OB +OB +OB +EL +EL +EL +EL +EL +EL +EL +"} +(29,1,1) = {" +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +OB +OB +OB +OM +OM +MH +MH +tl +tl +nP +YA +VN +Uw +KM +nP +nP +nP +Xk +WR +WR +WR +nP +nP +MH +MH +OM +OM +OM +OB +OB +OB +OB +OB +OB +MH +MH +OB +OB +EL +EL +EL +EL +EL +EL +EL +"} +(30,1,1) = {" +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +OB +OB +OB +OM +OM +MH +MH +tl +tl +nP +sc +gt +bs +gY +Wm +hl +nP +Oy +Lh +ud +GI +nP +tl +MH +TV +OM +OM +OM +OB +OB +OB +OB +OB +OM +OM +MH +OB +OB +OB +EL +EL +EL +EL +EL +EL +"} +(31,1,1) = {" +EL +EL +EL +EL +EL +EL +EL +EL +EL +OB +OB +OB +OB +OM +OM +MH +MH +MH +tl +nP +mM +xz +yR +KB +nP +bk +nP +Ny +he +cI +zJ +YX +tl +MH +OM +oE +OM +OM +OB +OB +OB +OB +OB +OM +OM +MH +MH +OB +OB +EL +EL +EL +EL +EL +EL +"} +(32,1,1) = {" +EL +EL +EL +EL +EL +EL +EL +EL +EL +OB +OB +OB +OB +OM +OM +OM +MH +MH +MH +nP +nP +Uv +GQ +YA +nP +bk +nP +xi +LI +PX +ka +YX +tl +MH +OM +OM +OM +OM +OB +OB +OB +OB +sB +OM +OM +MH +MH +OB +OB +EL +EL +EL +EL +EL +EL +"} +(33,1,1) = {" +EL +EL +EL +EL +EL +EL +EL +EL +EL +OB +OB +OB +OB +sB +OM +OM +OM +jc +MH +MH +nP +nP +nP +nP +nP +yD +nP +nP +xi +xi +YX +YX +MH +MH +TV +OM +OM +OM +OB +OB +OB +OB +OM +OM +jc +OM +OB +OB +OB +EL +EL +EL +EL +EL +EL +"} +(34,1,1) = {" +EL +EL +EL +EL +EL +EL +EL +EL +EL +OB +OB +OB +OB +OB +OM +OM +OM +OM +MH +MH +MH +MH +MH +MH +MH +KQ +tl +YX +YX +YX +YX +MH +MH +MH +OM +OM +OM +OB +OB +OB +OB +OB +OB +OM +OM +OB +OB +OB +EL +EL +EL +EL +EL +EL +EL +"} +(35,1,1) = {" +EL +EL +EL +EL +EL +EL +EL +EL +EL +OB +OB +OB +OB +OB +OM +OM +OM +OM +OM +MH +MH +MH +MH +MH +KQ +KQ +tl +tl +MH +MH +MH +MH +OM +sB +OM +OM +OM +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +EL +EL +EL +EL +EL +EL +EL +EL +"} +(36,1,1) = {" +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +OB +OB +OB +OB +OB +OM +OM +OM +OM +OM +MH +MH +MH +MH +KQ +KQ +KQ +tl +tl +MH +jc +OM +OM +OM +OM +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +EL +EL +EL +EL +EL +EL +EL +EL +EL +"} +(37,1,1) = {" +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +OB +OB +OB +OB +OB +OB +OM +OM +OM +Ie +OM +PC +MH +MH +MH +KQ +KQ +tl +MH +MH +OM +sB +OM +OM +OM +OB +OB +OB +OB +OB +OB +OB +OB +OB +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +"} +(38,1,1) = {" +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +OB +OB +OB +OB +OB +OB +OB +OM +OM +ig +Lz +iZ +sB +MH +MH +MH +KQ +MH +MH +OM +OM +OM +OM +OM +OB +OB +OB +OB +OB +OB +OB +OB +OB +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +"} +(39,1,1) = {" +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +OB +OB +OB +OB +OB +OB +OB +OB +OM +kA +Lz +iZ +OM +OM +OM +OM +OM +TV +OM +OM +OM +OM +OM +OB +OB +OB +OB +OB +OB +OB +OB +OB +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +"} +(40,1,1) = {" +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +gv +OM +OM +OM +OM +OM +OM +OM +OM +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +"} +(41,1,1) = {" +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +MH +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +"} +(42,1,1) = {" +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +MH +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +"} +(43,1,1) = {" +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +MH +MH +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +"} +(44,1,1) = {" +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +MH +MH +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +"} +(45,1,1) = {" +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +MH +MH +MH +MH +OB +OB +OB +OB +OB +OB +tp +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +"} +(46,1,1) = {" +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +MH +MH +MH +MH +MH +OB +OB +OB +Lz +di +OB +OB +OB +OB +OB +OB +OB +OB +OB +OB +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +"} +(47,1,1) = {" +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +MH +MH +MH +MH +MH +OB +ig +Lz +iZ +OB +OB +OB +OB +MH +MH +MH +MH +MH +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +"} +(48,1,1) = {" +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +MH +MH +MH +OM +BD +OM +Ok +OB +MH +MH +MH +MH +MH +MH +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +"} +(49,1,1) = {" +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +MH +MH +MH +OM +OM +OM +OM +OM +OM +MH +MH +MH +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +"} +(50,1,1) = {" +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +MH +MH +MH +OM +OM +OM +OM +MH +MH +MH +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +"} +(51,1,1) = {" +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +"} +(52,1,1) = {" +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +"} +(53,1,1) = {" +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +"} +(54,1,1) = {" +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +"} +(55,1,1) = {" +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +EL +"} diff --git a/_maps/RandomRuins/IceRuins/icemoon_underground_hermit.dmm b/_maps/RandomRuins/IceRuins/icemoon_underground_hermit.dmm index df0bf1c088073..d596a823a6a23 100644 --- a/_maps/RandomRuins/IceRuins/icemoon_underground_hermit.dmm +++ b/_maps/RandomRuins/IceRuins/icemoon_underground_hermit.dmm @@ -75,7 +75,7 @@ /turf/open/floor/grass/fairy, /area/ruin/powered/hermit) "wf" = ( -/obj/item/gun/ballistic/rifle/boltaction/pipegun/prime, +/obj/item/gun/energy/laser/musket/prime, /obj/structure/table/wood, /obj/item/flashlight/lantern, /turf/open/floor/wood, diff --git a/_maps/RandomRuins/LavaRuins/lavaland_biodome_beach.dmm b/_maps/RandomRuins/LavaRuins/lavaland_biodome_beach.dmm index 7de6e7d990082..82f4d3677800a 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_biodome_beach.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_biodome_beach.dmm @@ -278,7 +278,7 @@ dir = 4 }, /turf/open/floor/iron{ - icon = 'icons/misc/beach.dmi'; + icon = 'icons/obj/fluff/beach.dmi'; icon_state = "sand" }, /area/ruin/powered/beach) @@ -479,7 +479,7 @@ }, /obj/effect/turf_decal/sand, /turf/open/floor/iron{ - icon = 'icons/misc/beach.dmi'; + icon = 'icons/obj/fluff/beach.dmi'; icon_state = "sand" }, /area/ruin/powered/beach) @@ -549,9 +549,7 @@ /turf/open/misc/beach/sand, /area/ruin/powered/beach) "rU" = ( -/obj/item/reagent_containers/condiment/enzyme{ - layer = 5 - }, +/obj/item/reagent_containers/condiment/enzyme, /obj/item/reagent_containers/cup/beaker{ pixel_x = 5 }, @@ -920,9 +918,7 @@ /area/ruin/powered/beach) "GA" = ( /obj/structure/window/reinforced/spawner/directional/east, -/obj/structure/window/reinforced/spawner/directional/north{ - layer = 2.9 - }, +/obj/structure/window/reinforced/spawner/directional/north, /obj/structure/chair/stool/directional/south, /obj/item/storage/backpack/duffelbag, /obj/item/clothing/under/shorts/red, diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_ash_walker1.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_ash_walker1.dmm index ebb62bff3750a..1ecd393cc7d4d 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_ash_walker1.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_ash_walker1.dmm @@ -1228,7 +1228,7 @@ /area/lavaland/surface/outdoors) "JD" = ( /obj/effect/mapping_helpers/no_lava, -/obj/structure/ore_container/gutlunch_trough, +/obj/structure/ore_container/food_trough/gutlunch_trough, /turf/open/misc/asteroid/basalt/lava_land_surface, /area/lavaland/surface/outdoors) "Kg" = ( diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_elephant_graveyard.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_elephant_graveyard.dmm index 52e9e68ac409c..6156174aaba56 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_elephant_graveyard.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_elephant_graveyard.dmm @@ -496,7 +496,6 @@ /obj/structure/flora/rock/style_random, /obj/structure/cable, /obj/item/pickaxe{ - layer = 2.5; pixel_x = -8; pixel_y = 5 }, diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_gas.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_gas.dmm index ef32d3e8ed9c6..71c7495ae2218 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_gas.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_gas.dmm @@ -1,104 +1,83 @@ //MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE "aK" = ( -/obj/structure/rack, -/obj/effect/spawner/random/entertainment/cigarette_pack, -/obj/effect/spawner/random/entertainment/cigarette_pack, -/obj/effect/spawner/random/entertainment/cigarette_pack, -/obj/effect/spawner/random/entertainment/lighter, -/obj/effect/spawner/random/entertainment/lighter, -/obj/effect/spawner/random/entertainment/lighter, -/obj/machinery/light/directional/south, -/obj/machinery/airalarm/directional/west, -/turf/open/floor/iron, -/area/ruin/lizard_gaslava) -"bT" = ( -/obj/structure/table/reinforced, -/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden, -/turf/open/floor/iron, -/area/ruin/lizard_gaslava) -"ck" = ( -/obj/machinery/duct, -/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden, -/turf/open/floor/iron/smooth, -/area/ruin/lizard_gaslava) -"dm" = ( -/obj/machinery/door/airlock/engineering, -/obj/machinery/duct, -/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden, -/turf/open/floor/iron/smooth, -/area/ruin/lizard_gaslava) -"fy" = ( -/obj/machinery/light/directional/south, /obj/structure/table/reinforced, -/obj/item/stack/sheet/mineral/plasma/thirty, -/obj/item/stack/sheet/mineral/plasma/five, -/obj/item/stack/sheet/mineral/plasma/five, -/obj/item/stack/sheet/mineral/plasma/five, -/obj/item/stack/sheet/mineral/plasma/five, -/obj/machinery/light/directional/north, -/turf/open/misc/ashplanet/rocky, -/area/ruin/lizard_gaslava) -"fF" = ( -/obj/effect/turf_decal/arrows{ - dir = 8 +/obj/structure/window/reinforced/spawner/directional/south, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface }, -/turf/open/misc/ashplanet/rocky, -/area/ruin/lizard_gaslava) -"fH" = ( -/turf/open/misc/ashplanet/rocky, -/area/ruin/lizard_gaslava) -"fX" = ( -/obj/structure/sink/directional/east{ - has_water_reclaimer = 0 +/area/ruin/thelizardsgas_lavaland) +"aW" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden/layer4, +/obj/structure/railing{ + dir = 4 }, -/turf/open/misc/ashplanet/rocky, -/area/ruin/lizard_gaslava) -"go" = ( -/obj/machinery/power/terminal{ +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/pink/hidden, +/obj/effect/turf_decal/stripes/end{ dir = 1 }, -/obj/structure/cable, -/turf/open/floor/iron/smooth, -/area/ruin/lizard_gaslava) -"ia" = ( -/obj/effect/spawner/random/structure/billboard/lizardsgas, -/obj/effect/turf_decal/arrows{ - dir = 4 +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating/lavaland_atmos{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface }, -/turf/open/misc/ashplanet/rocky, -/area/ruin/lizard_gaslava) -"iK" = ( -/obj/structure/cable, -/obj/machinery/power/rtg/advanced, -/obj/effect/turf_decal/bot, -/turf/open/floor/iron/smooth, -/area/ruin/lizard_gaslava) -"jY" = ( +/area/ruin/thelizardsgas_lavaland) +"bT" = ( /obj/structure/window/reinforced/spawner/directional/west, -/obj/structure/window/reinforced/spawner/directional/north, -/obj/structure/rack, -/obj/item/reagent_containers/condiment/yoghurt{ - pixel_x = -3; - pixel_y = 1 +/obj/item/food/popsicle/creamsicle_berry{ + pixel_y = 4; + pixel_x = -1 }, -/obj/item/reagent_containers/condiment/yoghurt{ - pixel_x = 6; - pixel_y = -1 +/obj/item/food/popsicle/creamsicle_berry{ + pixel_y = 1; + pixel_x = 5 }, -/turf/open/floor/iron/freezer, -/area/ruin/lizard_gaslava) -"ks" = ( -/obj/structure/sign/warning/fire/directional/north, +/obj/item/food/popsicle/creamsicle_orange, +/obj/item/food/popsicle/creamsicle_orange{ + pixel_y = 6; + pixel_x = 3 + }, +/obj/structure/closet/crate/freezer, +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden/layer4, +/turf/open/floor/iron/freezer{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) +"cc" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/pink/hidden, +/obj/structure/sign/warning/no_smoking/directional/east, +/turf/open/floor/asphalt/lavaland, +/area/ruin/thelizardsgas_lavaland) +"ck" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden/layer2, +/mob/living/basic/lizard{ + name = "Zarpo"; + desc = "This little guy is a survivor, that's for sure." + }, +/obj/machinery/light/small/directional/west, +/turf/open/floor/iron/smooth{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) +"dm" = ( +/obj/structure/cable, /obj/machinery/duct, -/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden, -/obj/machinery/light/small/dim/directional/north, -/turf/open/floor/iron/smooth, -/area/ruin/lizard_gaslava) -"mn" = ( -/obj/structure/reagent_dispensers/plumbed/fuel, -/turf/open/floor/iron/smooth, -/area/ruin/lizard_gaslava) -"mz" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden/layer2, +/turf/open/floor/iron/smooth{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) +"dC" = ( +/obj/structure/sign/warning/fire/directional/north, +/obj/machinery/atmospherics/components/unary/outlet_injector/monitored/plasma_input{ + dir = 4; + chamber_id = "lizardgaslava" + }, +/turf/open/floor/engine/plasma{ + initial_gas_mix = "plasma=30000;TEMP=293.15" + }, +/area/ruin/thelizardsgas_lavaland) +"dI" = ( /obj/structure/rack, /obj/item/food/candy, /obj/item/food/candy, @@ -110,69 +89,82 @@ /obj/item/food/chocolatebar{ pixel_y = 6 }, -/obj/structure/sign/poster/contraband/hacking_guide/directional/north, -/turf/open/floor/iron, -/area/ruin/lizard_gaslava) -"mG" = ( -/obj/effect/turf_decal/arrows{ - dir = 4 +/obj/structure/sign/poster/contraband/space_cola/directional/north, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface }, -/turf/open/misc/ashplanet/rocky, -/area/ruin/lizard_gaslava) -"mY" = ( -/obj/effect/spawner/random/structure/billboard/lizardsgas, -/obj/effect/turf_decal/arrows{ +/area/ruin/thelizardsgas_lavaland) +"dT" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/pink/hidden, +/obj/structure/railing{ dir = 8 }, -/turf/open/misc/ashplanet/rocky, -/area/ruin/lizard_gaslava) -"nc" = ( +/obj/effect/turf_decal/stripes/end{ + dir = 1 + }, +/turf/open/floor/plating/lavaland_atmos{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) +"fj" = ( +/turf/open/floor/asphalt/lavaland, +/area/ruin/thelizardsgas_lavaland) +"fl" = ( /obj/effect/decal/cleanable/dirt/dust, -/obj/machinery/duct, -/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden, -/turf/open/floor/iron/smooth, -/area/ruin/lizard_gaslava) -"ng" = ( -/obj/machinery/door/airlock/external/ruin, -/turf/open/floor/plating, -/area/ruin/lizard_gaslava) -"om" = ( +/obj/structure/cable, +/obj/structure/sign/poster/contraband/starkist/directional/north, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) +"fy" = ( /obj/effect/turf_decal/arrows{ dir = 1 }, -/turf/open/misc/ashplanet/rocky, -/area/ruin/lizard_gaslava) -"pp" = ( -/obj/structure/sign/poster/contraband/jumbo_bar/directional/east, -/turf/open/floor/iron, -/area/ruin/lizard_gaslava) -"pJ" = ( -/turf/open/floor/iron/smooth, -/area/ruin/lizard_gaslava) -"rM" = ( -/obj/structure/window/reinforced/spawner/directional/north, -/obj/structure/window/reinforced/spawner/directional/east, -/obj/structure/rack, -/obj/item/food/cheese/mozzarella{ - pixel_y = 5; - pixel_x = -5 +/turf/open/floor/asphalt/lavaland, +/area/lavaland/surface/outdoors) +"fF" = ( +/obj/machinery/portable_atmospherics/canister, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"fH" = ( +/obj/machinery/duct, +/turf/open/floor/asphalt/lavaland, +/area/ruin/thelizardsgas_lavaland) +"fO" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored/plasma_output{ + dir = 8; + chamber_id = "lizardgaslava" }, -/obj/item/food/cheese/mozzarella{ - pixel_y = -4; - pixel_x = 1 +/turf/open/floor/engine/plasma{ + initial_gas_mix = "plasma=30000;TEMP=293.15" }, -/obj/item/food/cheese/wheel, -/obj/item/food/cheese/cheese_curds, -/obj/item/food/cheese/curd_cheese, -/turf/open/floor/iron/freezer, -/area/ruin/lizard_gaslava) -"sY" = ( -/obj/machinery/door/airlock/external/ruin, -/obj/machinery/duct, -/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden, -/turf/open/floor/plating, -/area/ruin/lizard_gaslava) -"tD" = ( +/area/ruin/thelizardsgas_lavaland) +"fX" = ( +/obj/structure/sink/gasstation{ + dir = 4; + pixel_x = -14 + }, +/turf/open/floor/asphalt/lavaland, +/area/ruin/thelizardsgas_lavaland) +"fZ" = ( +/obj/structure/cable, +/obj/structure/sign/poster/contraband/robust_softdrinks/directional/east, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) +"go" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2, +/obj/machinery/light/small/directional/east, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/smooth{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) +"ia" = ( /obj/structure/rack, /obj/item/food/chips{ pixel_x = 7 @@ -189,192 +181,252 @@ pixel_y = -4; pixel_x = -5 }, -/turf/open/floor/iron, -/area/ruin/lizard_gaslava) -"ub" = ( -/obj/structure/railing{ - dir = 9 +/obj/machinery/light/directional/north, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface }, -/turf/open/misc/ashplanet/rocky, -/area/ruin/lizard_gaslava) -"uV" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on{ - dir = 8 +/area/ruin/thelizardsgas_lavaland) +"iK" = ( +/obj/structure/cable, +/obj/machinery/power/rtg/advanced, +/obj/effect/turf_decal/bot, +/obj/structure/sign/warning/electric_shock/directional/north, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/smooth{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface }, -/turf/open/floor/iron, -/area/ruin/lizard_gaslava) -"vt" = ( -/obj/machinery/duct, -/obj/machinery/atmospherics/components/tank/oxygen{ - dir = 4 +/area/ruin/thelizardsgas_lavaland) +"iN" = ( +/obj/machinery/airalarm/directional/west, +/obj/machinery/computer/security/telescreen/entertainment/directional/south, +/obj/machinery/computer/atmos_control/noreconnect{ + atmos_chambers = list("lizardgaslava"="Plasma Supply"); + dir = 4; + name = "gas tank monitor"; + desc = "This computer connects to and controls the sensors and equipment in a nearby pressurised gas reservoir." }, -/turf/open/floor/iron/smooth, -/area/ruin/lizard_gaslava) -"vH" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on{ - dir = 1 +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface }, -/obj/machinery/light/small/dim/directional/south, -/turf/open/floor/iron/smooth, -/area/ruin/lizard_gaslava) -"wl" = ( -/obj/structure/sink/directional/west{ - has_water_reclaimer = 0 +/area/ruin/thelizardsgas_lavaland) +"iP" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 8 }, -/turf/open/misc/ashplanet/rocky, -/area/ruin/lizard_gaslava) -"xH" = ( -/obj/machinery/light/directional/south, -/turf/open/misc/ashplanet/rocky, -/area/ruin/lizard_gaslava) -"xW" = ( -/turf/open/floor/iron, -/area/ruin/lizard_gaslava) -"yH" = ( +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) +"iT" = ( /obj/structure/rack, -/obj/item/food/sticko/nutty{ - pixel_y = 5; - pixel_x = -5 +/obj/item/food/cornchips/random, +/obj/item/food/cornchips/random, +/obj/item/food/cornchips/random, +/obj/item/food/cornchips/random, +/obj/item/food/cornchips/random, +/obj/item/food/cornchips/random, +/obj/structure/sign/poster/contraband/eat/directional/north, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface }, -/obj/item/food/sticko{ - pixel_y = 2; - pixel_x = 6 +/area/ruin/thelizardsgas_lavaland) +"jY" = ( +/obj/structure/window/reinforced/spawner/directional/south, +/obj/structure/window/reinforced/spawner/directional/east, +/obj/item/storage/cans/sixbeer, +/obj/item/storage/cans/sixsoda, +/obj/structure/closet/crate/freezer, +/turf/open/floor/iron/freezer{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface }, -/turf/open/floor/iron, -/area/ruin/lizard_gaslava) -"Ag" = ( -/obj/structure/table, -/obj/item/coffee_cartridge, -/obj/item/coffee_cartridge, -/obj/effect/mapping_helpers/apc/cell_10k, -/obj/effect/mapping_helpers/apc/unlocked, -/obj/machinery/power/apc/auto_name/directional/north, -/obj/structure/cable, -/turf/open/floor/iron/smooth, -/area/ruin/lizard_gaslava) -"Ao" = ( -/obj/structure/sign/poster/contraband/tipper_cream_soda/directional/south, -/turf/open/floor/iron, -/area/ruin/lizard_gaslava) -"Bf" = ( -/mob/living/basic/lizard, -/obj/machinery/atmospherics/components/unary/vent_pump/on{ - dir = 4 +/area/ruin/thelizardsgas_lavaland) +"ks" = ( +/obj/structure/sign/warning/fire/directional/north, +/obj/structure/reagent_dispensers/fueltank/large{ + anchored = 1; + can_be_unanchored = 1 }, -/turf/open/floor/iron, -/area/ruin/lizard_gaslava) -"BH" = ( -/obj/structure/table/reinforced, -/obj/item/food/hotdog{ - pixel_y = 4; - pixel_x = -2 +/obj/structure/railing{ + dir = 8 }, -/obj/item/food/hotdog{ - pixel_y = -3; - pixel_x = 1 +/obj/structure/railing{ + dir = 4 + }, +/obj/machinery/light/dim/directional/south, +/turf/open/floor/asphalt/lavaland, +/area/ruin/thelizardsgas_lavaland) +"lI" = ( +/obj/effect/spawner/random/structure/billboard/roadsigns, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"mn" = ( +/obj/structure/sign/poster/official/plasma_effects/directional/east, +/obj/structure/reagent_dispensers/plumbed/storage{ + dir = 8; + reagent_id = /datum/reagent/toxin/plasma; + name = "plasma storage tank"; + tank_volume = 2500 }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden, -/turf/open/floor/iron, -/area/ruin/lizard_gaslava) -"BX" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/machinery/light/directional/south, -/turf/open/floor/iron, -/area/ruin/lizard_gaslava) -"DI" = ( -/turf/template_noop, -/area/template_noop) -"Ef" = ( /obj/effect/decal/cleanable/dirt/dust, -/obj/machinery/atmospherics/components/unary/vent_pump/on{ - dir = 8 +/turf/open/floor/iron/smooth{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface }, -/turf/open/floor/iron, -/area/ruin/lizard_gaslava) -"Eh" = ( +/area/ruin/thelizardsgas_lavaland) +"mz" = ( /obj/structure/table/reinforced, -/obj/item/food/honeybar{ - pixel_y = 5; - pixel_x = -1 +/obj/structure/closet/mini_fridge{ + pixel_y = 5 }, -/obj/item/food/honeybar{ - pixel_x = 2; - pixel_y = 2 +/obj/effect/spawner/random/food_or_drink/refreshing_beverage, +/obj/effect/spawner/random/food_or_drink/refreshing_beverage, +/obj/effect/spawner/random/food_or_drink/refreshing_beverage, +/obj/effect/spawner/random/food_or_drink/booze, +/obj/effect/spawner/random/food_or_drink/booze, +/obj/effect/spawner/random/food_or_drink/booze, +/obj/structure/window/reinforced/spawner/directional/north, +/obj/structure/window/reinforced/spawner/directional/west, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface }, -/obj/item/food/honeybar{ - pixel_y = 8; - pixel_x = -1 +/area/ruin/thelizardsgas_lavaland) +"mG" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden/layer4, +/obj/structure/noticeboard/directional/north, +/turf/open/floor/iron/smooth{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface }, -/obj/item/food/honeybar{ - pixel_x = 2; - pixel_y = 5 +/area/ruin/thelizardsgas_lavaland) +"mJ" = ( +/obj/structure/chair/sofa/left/maroon{ + dir = 4 }, -/obj/item/food/granola_bar{ - pixel_y = 9; - pixel_x = -1 +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/smooth{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface }, -/obj/item/food/granola_bar{ - pixel_y = 6; - pixel_x = 2 +/area/ruin/thelizardsgas_lavaland) +"mY" = ( +/obj/structure/chair/sofa/right/maroon{ + dir = 4 }, +/obj/structure/cable, /obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/iron, -/area/ruin/lizard_gaslava) -"El" = ( -/obj/structure/window/reinforced/spawner/directional/west, -/obj/structure/rack, -/obj/item/food/popsicle/creamsicle_berry{ - pixel_y = 4; - pixel_x = -1 +/turf/open/floor/iron/smooth{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface }, -/obj/item/food/popsicle/creamsicle_berry{ - pixel_y = 1; - pixel_x = 5 +/area/ruin/thelizardsgas_lavaland) +"nc" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden/layer4, +/obj/structure/sign/poster/fluff/lizards_gas_payment/directional/west, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface }, -/obj/item/food/popsicle/creamsicle_orange, -/obj/item/food/popsicle/creamsicle_orange{ - pixel_y = 6; - pixel_x = 3 +/area/ruin/thelizardsgas_lavaland) +"ng" = ( +/obj/structure/cable, +/obj/structure/railing{ + dir = 8 }, -/turf/open/floor/iron/freezer, -/area/ruin/lizard_gaslava) -"Es" = ( -/obj/structure/sign/warning/fire/directional/south, +/obj/effect/turf_decal/stripes/end, +/turf/open/floor/plating/lavaland_atmos{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) +"nX" = ( +/obj/structure/sign/poster/contraband/tipper_cream_soda/directional/south, +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden/layer4, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) +"om" = ( +/turf/open/floor/asphalt/lavaland, +/area/lavaland/surface/outdoors) +"ou" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4, +/turf/open/floor/iron/smooth{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) +"oD" = ( +/obj/effect/spawner/random/trash/crushed_can, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"pp" = ( +/obj/machinery/light/directional/south, +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden/layer4, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) +"pJ" = ( +/turf/open/floor/iron/smooth{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) +"qk" = ( +/obj/structure/cable, +/obj/effect/spawner/random/structure/closet_maintenance, +/obj/structure/sign/poster/fluff/lizards_gas_power/directional/north, /obj/effect/decal/cleanable/dirt/dust, -/obj/machinery/atmospherics/components/unary/vent_pump/on{ - dir = 1 +/turf/open/floor/iron/smooth{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface }, -/turf/open/floor/iron/smooth, -/area/ruin/lizard_gaslava) -"EA" = ( -/obj/structure/window/reinforced/spawner/directional/east, -/obj/structure/rack, -/obj/item/storage/fancy/egg_box, -/obj/item/storage/fancy/egg_box{ - pixel_y = 9 +/area/ruin/thelizardsgas_lavaland) +"qO" = ( +/obj/structure/sign/warning/fire/directional/south, +/obj/structure/reagent_dispensers/fueltank/large{ + anchored = 1; + can_be_unanchored = 1 }, -/obj/item/storage/fancy/pickles_jar, -/turf/open/floor/iron/freezer, -/area/ruin/lizard_gaslava) -"FA" = ( /obj/structure/railing{ dir = 8 }, -/turf/open/misc/ashplanet/rocky, -/area/ruin/lizard_gaslava) -"FC" = ( -/obj/structure/sign/poster/fluff/lizards_gas_power/directional/west, -/turf/open/floor/iron/smooth, -/area/ruin/lizard_gaslava) -"FL" = ( +/obj/structure/railing{ + dir = 4 + }, +/obj/machinery/light/dim/directional/north, +/turf/open/floor/asphalt/lavaland, +/area/ruin/thelizardsgas_lavaland) +"rr" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 1 + }, +/turf/open/floor/iron/smooth{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) +"rv" = ( +/obj/structure/sign/warning/fire/directional/north, +/obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored/plasma_output{ + dir = 8; + chamber_id = "lizardgaslava" + }, +/turf/open/floor/engine/plasma{ + initial_gas_mix = "plasma=30000;TEMP=293.15" + }, +/area/ruin/thelizardsgas_lavaland) +"rM" = ( /obj/effect/decal/cleanable/dirt/dust, -/obj/machinery/light/directional/north, -/turf/open/floor/iron, -/area/ruin/lizard_gaslava) -"Gv" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) +"rW" = ( +/obj/machinery/portable_atmospherics/canister/plasma{ + filled = 0.05 + }, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"sY" = ( /obj/structure/table/reinforced, -/obj/structure/window/reinforced/spawner/directional/north, -/obj/structure/window/reinforced/spawner/directional/east, /obj/item/food/sandwich/blt{ pixel_y = 6; pixel_x = -2 @@ -382,805 +434,813 @@ /obj/item/food/little_shiro_sandwich{ pixel_y = 1 }, -/turf/open/floor/iron, -/area/ruin/lizard_gaslava) -"GK" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden/layer2, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) +"tk" = ( +/obj/structure/chair/stool/bar/directional/east, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) +"tD" = ( +/obj/machinery/duct, +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden/layer2, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden/layer4, +/obj/machinery/door/airlock/grunge, +/turf/open/floor/iron/smooth{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) +"ub" = ( /obj/structure/railing{ - dir = 10 + dir = 9 }, -/turf/open/misc/ashplanet/rocky, -/area/ruin/lizard_gaslava) -"HI" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/pink/hidden, +/obj/structure/girder/reinforced, +/turf/open/floor/asphalt/lavaland, +/area/ruin/thelizardsgas_lavaland) +"uV" = ( /obj/structure/table/reinforced, -/obj/structure/closet/mini_fridge{ +/obj/item/food/honeybar{ + pixel_y = 5; + pixel_x = -1 + }, +/obj/item/food/honeybar{ + pixel_x = 2; + pixel_y = 2 + }, +/obj/item/food/honeybar{ + pixel_y = 8; + pixel_x = -1 + }, +/obj/item/food/honeybar{ + pixel_x = 2; pixel_y = 5 }, -/obj/effect/spawner/random/food_or_drink/refreshing_beverage, -/obj/effect/spawner/random/food_or_drink/refreshing_beverage, -/obj/effect/spawner/random/food_or_drink/refreshing_beverage, -/obj/effect/spawner/random/food_or_drink/booze, -/obj/effect/spawner/random/food_or_drink/booze, -/obj/effect/spawner/random/food_or_drink/booze, -/obj/structure/window/reinforced/spawner/directional/north, -/turf/open/floor/iron, -/area/ruin/lizard_gaslava) -"HL" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/machinery/duct, -/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden, -/turf/open/floor/iron, -/area/ruin/lizard_gaslava) -"HS" = ( -/obj/structure/window/reinforced/spawner/directional/west, -/obj/structure/window/reinforced/spawner/directional/south, -/obj/structure/rack, -/obj/item/food/cornuto{ - pixel_y = 4; - pixel_x = -3 +/obj/item/food/granola_bar{ + pixel_y = 9; + pixel_x = -1 }, -/obj/item/food/cornuto{ - pixel_y = -5; +/obj/item/food/granola_bar{ + pixel_y = 6; pixel_x = 2 }, -/obj/item/food/cornuto{ - pixel_y = 5; - pixel_x = 6 +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/cable, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface }, -/obj/item/food/cornuto{ - pixel_y = -5; - pixel_x = -3 +/area/ruin/thelizardsgas_lavaland) +"vb" = ( +/obj/structure/window/reinforced/spawner/directional/east, +/obj/item/storage/fancy/egg_box, +/obj/item/storage/fancy/egg_box{ + pixel_y = 9 }, -/turf/open/floor/iron/freezer, -/area/ruin/lizard_gaslava) -"HW" = ( -/obj/machinery/door/airlock/external/ruin, -/obj/machinery/duct, -/turf/open/floor/plating, -/area/ruin/lizard_gaslava) -"IU" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/machinery/light/directional/south, -/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden, -/turf/open/floor/iron, -/area/ruin/lizard_gaslava) -"JX" = ( +/obj/item/storage/fancy/pickles_jar, +/obj/structure/closet/crate/freezer, +/turf/open/floor/iron/freezer{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) +"vi" = ( +/obj/structure/cable, /obj/structure/railing, -/turf/open/misc/ashplanet/rocky, -/area/ruin/lizard_gaslava) -"Kl" = ( -/obj/structure/rack, -/obj/item/food/cornchips/random, -/obj/item/food/cornchips/random, -/obj/item/food/cornchips/random, -/obj/item/food/cornchips/random, -/obj/item/food/cornchips/random, -/obj/item/food/cornchips/random, -/obj/machinery/light/directional/north, -/turf/open/floor/iron, -/area/ruin/lizard_gaslava) -"Km" = ( -/obj/structure/table/reinforced, -/turf/open/floor/iron, -/area/ruin/lizard_gaslava) -"KJ" = ( -/obj/structure/railing{ +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ dir = 1 }, -/turf/open/misc/ashplanet/rocky, -/area/ruin/lizard_gaslava) -"Mv" = ( /obj/effect/decal/cleanable/dirt/dust, -/obj/structure/sign/poster/fluff/lizards_gas_payment/directional/west, -/turf/open/floor/iron, -/area/ruin/lizard_gaslava) -"Nr" = ( -/obj/structure/window/plasma/spawner/directional/west, -/obj/structure/window/spawner/directional/east, -/obj/effect/spawner/random/structure/grille, -/turf/open/floor/plating, -/area/ruin/lizard_gaslava) -"Ov" = ( -/obj/structure/table, -/obj/machinery/coffeemaker{ - pixel_y = 5 +/turf/open/floor/plating/lavaland_atmos{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface }, -/turf/open/floor/iron/smooth, -/area/ruin/lizard_gaslava) -"PS" = ( -/obj/effect/turf_decal/bot, +/area/ruin/thelizardsgas_lavaland) +"vt" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden/layer2, /obj/structure/cable, -/obj/machinery/power/rtg/advanced, -/turf/open/floor/iron/smooth, -/area/ruin/lizard_gaslava) -"Qb" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden, -/turf/open/floor/iron, -/area/ruin/lizard_gaslava) -"Qt" = ( -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/iron, -/area/ruin/lizard_gaslava) -"Rq" = ( -/obj/machinery/computer/security/telescreen/bar{ - pixel_y = -32 +/obj/machinery/duct, +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden/layer4, +/turf/open/floor/iron/smooth{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) +"vH" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden/layer4, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) +"wl" = ( +/obj/structure/sink/gasstation{ + dir = 8; + pixel_x = 14 + }, +/turf/open/floor/asphalt/lavaland, +/area/ruin/thelizardsgas_lavaland) +"wY" = ( +/obj/structure/table, +/obj/structure/sign/poster/official/festive/directional/south, +/obj/item/wrench, +/obj/item/universal_scanner{ + pixel_y = 6; + pixel_x = 7 }, /obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/iron, -/area/ruin/lizard_gaslava) -"RA" = ( -/turf/closed/wall, -/area/ruin/lizard_gaslava) -"RK" = ( -/obj/machinery/light/directional/east, -/turf/open/misc/ashplanet/rocky, -/area/ruin/lizard_gaslava) -"SL" = ( -/obj/machinery/duct, -/turf/open/misc/ashplanet/rocky, -/area/ruin/lizard_gaslava) -"SZ" = ( -/obj/machinery/duct, -/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden, -/turf/open/floor/iron, -/area/ruin/lizard_gaslava) -"TA" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on, -/turf/open/floor/iron/smooth, -/area/ruin/lizard_gaslava) -"Uk" = ( +/turf/open/floor/iron/smooth{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) +"xw" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/pink/hidden, +/turf/open/floor/asphalt/lavaland, +/area/ruin/thelizardsgas_lavaland) +"xH" = ( +/obj/machinery/door/window/right/directional/east, +/obj/machinery/door/window/left/directional/west, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) +"xW" = ( +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) +"yH" = ( +/obj/structure/cable, /obj/machinery/duct, -/obj/machinery/light/directional/north, -/turf/open/misc/ashplanet/rocky, -/area/ruin/lizard_gaslava) -"UK" = ( +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) +"zr" = ( +/obj/structure/window/reinforced/spawner/directional/west, +/obj/structure/window/reinforced/spawner/directional/north, +/obj/item/reagent_containers/condiment/yoghurt{ + pixel_x = -3; + pixel_y = 1 + }, +/obj/item/reagent_containers/condiment/yoghurt{ + pixel_x = 6; + pixel_y = -1 + }, +/obj/structure/closet/crate/freezer, +/turf/open/floor/iron/freezer{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) +"Ag" = ( +/obj/structure/table, +/obj/item/coffee_cartridge, +/obj/item/coffee_cartridge, +/obj/effect/mapping_helpers/apc/cell_10k, +/obj/effect/mapping_helpers/apc/unlocked, +/obj/machinery/power/apc/auto_name/directional/north, /obj/structure/cable, -/obj/machinery/power/smes/engineering, -/turf/open/floor/iron/smooth, -/area/ruin/lizard_gaslava) -"VD" = ( -/obj/effect/spawner/random/trash/food_packaging, -/turf/open/floor/iron, -/area/ruin/lizard_gaslava) -"Wa" = ( -/obj/structure/rack, -/obj/item/reagent_containers/condiment/vegetable_oil{ - pixel_y = 5; - pixel_x = -1 +/turf/open/floor/iron/smooth{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface }, -/obj/item/reagent_containers/condiment/vegetable_oil{ - pixel_y = 1; - pixel_x = 3 +/area/ruin/thelizardsgas_lavaland) +"Ao" = ( +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"Bf" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden/layer4, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface }, -/obj/item/reagent_containers/condiment/olive_oil, -/turf/open/floor/iron, -/area/ruin/lizard_gaslava) -"Xe" = ( -/obj/structure/window/reinforced/spawner/directional/south, -/obj/structure/window/reinforced/spawner/directional/east, +/area/ruin/thelizardsgas_lavaland) +"Bp" = ( +/obj/structure/cable, +/obj/effect/spawner/structure/window/reinforced/plasma, +/obj/machinery/duct, +/turf/open/floor/plating/lavaland_baseturf, +/area/ruin/thelizardsgas_lavaland) +"Bz" = ( +/obj/structure/window/reinforced/spawner/directional/north, +/obj/structure/window/reinforced/spawner/directional/east, +/obj/item/food/cheese/mozzarella{ + pixel_y = 5; + pixel_x = -5 + }, +/obj/item/food/cheese/mozzarella{ + pixel_y = -4; + pixel_x = 1 + }, +/obj/item/food/cheese/wheel, +/obj/item/food/cheese/cheese_curds, +/obj/item/food/cheese/curd_cheese, +/obj/structure/closet/crate/freezer, +/turf/open/floor/iron/freezer{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) +"BH" = ( +/obj/structure/railing{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/pink/hidden, +/turf/open/floor/asphalt/lavaland, +/area/ruin/thelizardsgas_lavaland) +"BU" = ( +/obj/machinery/atmospherics/components/unary/outlet_injector/monitored/plasma_input{ + dir = 4; + chamber_id = "lizardgaslava" + }, +/turf/open/floor/engine/plasma{ + initial_gas_mix = "plasma=30000;TEMP=293.15" + }, +/area/ruin/thelizardsgas_lavaland) +"BX" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/light/directional/south, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) +"Cs" = ( +/obj/structure/cable, +/obj/effect/spawner/structure/window/reinforced/plasma, +/turf/open/floor/plating/lavaland_baseturf, +/area/ruin/thelizardsgas_lavaland) +"Cx" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/cable, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) +"CJ" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/pink/hidden, +/obj/structure/railing{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating/lavaland_atmos{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) +"CR" = ( +/obj/structure/cable, +/obj/machinery/duct, +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden/layer2, +/obj/machinery/door/airlock/maintenance_hatch, +/turf/open/floor/iron/smooth{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) +"Dw" = ( +/obj/structure/cable, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) +"DI" = ( +/turf/template_noop, +/area/template_noop) +"Ef" = ( +/obj/effect/spawner/structure/window/reinforced/plasma, +/obj/structure/cable, +/turf/open/floor/plating/lavaland_atmos{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) +"Eh" = ( +/obj/machinery/atmospherics/components/tank/oxygen{ + dir = 8 + }, +/turf/open/floor/iron/smooth{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) +"El" = ( +/obj/structure/sign/poster/official/pda_ad/directional/south, +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden/layer4, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) +"Es" = ( +/obj/machinery/door/airlock/external/ruin, +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden, +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden/layer4, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "lizardgas_lavaland_entrance" + }, +/turf/open/floor/iron/smooth{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) +"EA" = ( +/turf/closed/wall/r_wall, +/area/ruin/thelizardsgas_lavaland) +"FA" = ( +/turf/closed/wall/r_wall{ + baseturfs = /turf/open/floor/plating/lavaland_baseturf + }, +/area/ruin/thelizardsgas_lavaland) +"FC" = ( +/obj/effect/spawner/structure/window/reinforced/plasma, +/obj/structure/cable, +/turf/open/floor/plating, +/area/ruin/thelizardsgas_lavaland) +"FL" = ( +/obj/structure/railing{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/pink/hidden, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating/lavaland_atmos{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) +"Gg" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden/layer4, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) +"Gu" = ( +/obj/effect/spawner/random/structure/billboard/lizardsgas, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"Gv" = ( +/obj/machinery/duct, +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) +"GK" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/pink/hidden, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"Hz" = ( +/obj/structure/cable, +/obj/structure/railing, +/obj/effect/turf_decal/stripes/end{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating/lavaland_atmos{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) +"HB" = ( +/obj/effect/spawner/random/trash/cigbutt, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"HI" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/cable, +/obj/machinery/duct, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) +"HL" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/spawner/random/trash/food_packaging, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) +"HS" = ( /obj/structure/rack, -/obj/item/storage/cans/sixbeer, -/obj/item/storage/cans/sixsoda, -/turf/open/floor/iron/freezer, -/area/ruin/lizard_gaslava) -"Zf" = ( -/obj/machinery/door/airlock/glass, +/obj/item/reagent_containers/condiment/vegetable_oil{ + pixel_y = 5; + pixel_x = -1 + }, +/obj/item/reagent_containers/condiment/vegetable_oil{ + pixel_y = 1; + pixel_x = 3 + }, +/obj/item/reagent_containers/condiment/olive_oil, +/obj/structure/cable, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) +"HW" = ( +/obj/machinery/door/airlock/external/ruin, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "lizardgas_lavaland_entrance" + }, +/turf/open/floor/iron/smooth{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) +"IC" = ( +/obj/structure/cable, +/obj/structure/railing, +/obj/effect/turf_decal/stripes/end{ + dir = 8 + }, +/turf/open/floor/plating/lavaland_atmos{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) +"IU" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 8 + }, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) +"JB" = ( +/obj/machinery/air_sensor{ + chamber_id = "lizardgaslava" + }, +/turf/open/floor/engine/plasma{ + initial_gas_mix = "plasma=30000;TEMP=293.15" + }, +/area/ruin/thelizardsgas_lavaland) +"JK" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored/plasma_output{ + dir = 8; + chamber_id = "lizardgaslava" + }, +/obj/item/toy/plush/lizard_plushie/space/green{ + desc = "A famous lizard, in plushy form."; + name = "Bingo" + }, +/turf/open/floor/engine/plasma{ + initial_gas_mix = "plasma=30000;TEMP=293.15" + }, +/area/ruin/thelizardsgas_lavaland) +"JX" = ( +/obj/machinery/duct, +/obj/machinery/light/directional/north, +/obj/structure/sign/warning/chem_diamond/directional/north, +/turf/open/floor/asphalt/lavaland, +/area/ruin/thelizardsgas_lavaland) +"Kb" = ( +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 8 + }, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"Kc" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 1 + }, +/turf/open/floor/iron/smooth{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) +"Kl" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden/layer4, +/obj/machinery/light_switch/directional/south, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) +"Km" = ( +/obj/structure/table/reinforced, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) +"KJ" = ( +/obj/structure/railing{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/pink/hidden, +/turf/open/floor/asphalt/lavaland, +/area/ruin/thelizardsgas_lavaland) +"Lh" = ( +/obj/structure/cable, +/obj/structure/sign/poster/official/fruit_bowl/directional/east, +/turf/open/floor/iron/smooth{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) +"Mv" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/rack, +/obj/effect/spawner/random/entertainment/cigarette_pack, +/obj/effect/spawner/random/entertainment/cigarette_pack, +/obj/effect/spawner/random/entertainment/cigarette_pack, +/obj/effect/spawner/random/entertainment/lighter, +/obj/effect/spawner/random/entertainment/lighter, +/obj/effect/spawner/random/entertainment/lighter, +/obj/structure/sign/poster/contraband/smoke/directional/west, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) +"MX" = ( +/obj/effect/spawner/structure/window/reinforced/plasma, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden/layer4, /turf/open/floor/iron, -/area/ruin/lizard_gaslava) - -(1,1,1) = {" -DI -DI -DI -fF -fF -mY -DI -DI -DI -DI -DI -DI -DI -DI -DI -DI -DI -DI -DI -DI -ia -mG -mG -DI -DI -"} -(2,1,1) = {" -DI -DI -DI -fH -fH -fH -DI -DI -DI -DI -DI -DI -DI -DI -DI -DI -DI -DI -DI -DI -fH -fH -fH -DI -DI -"} -(3,1,1) = {" -DI -DI -DI -fH -fH -fH -DI -DI -ub -FA -FA -FA -FA -FA -FA -FA -FA -GK -DI -DI -fH -fH -fH -DI -DI -"} -(4,1,1) = {" -DI -DI -DI -fH -fH -fH -DI -DI -KJ -fH -SL -SL -SL -SL -SL -SL -SL -JX -DI -DI -fH -fH -fH -DI -DI -"} -(5,1,1) = {" -DI -DI -DI -fH -fH -fH -om -fH -fH -fH -wl -fH -wl -wl -fH -wl -SL -fH -fH -om -fH -fH -fH -DI -DI -"} -(6,1,1) = {" -DI -DI -DI -fH -fH -fH -om -fH -fH -xH -RA -fy -RA -RA -fy -RA -Uk -fH -fH -om -fH -fH -fH -DI -DI -"} -(7,1,1) = {" -DI -DI -DI -fH -fH -fH -om -fH -fH -fH -fX -fH -fX -fX -fH -fX -SL -fH -fH -om -fH -fH -fH -DI -DI -"} -(8,1,1) = {" -DI -DI -DI -DI -DI -DI -DI -DI -fH -fH -SL -SL -SL -SL -SL -SL -SL -fH -DI -DI -DI -DI -DI -DI -DI -"} -(9,1,1) = {" -DI -DI -DI -DI -DI -DI -DI -DI -RK -fH -fH -fH -fH -fH -fH -SL -fH -RK -DI -DI -DI -DI -DI -DI -DI -"} -(10,1,1) = {" -DI -DI -DI -DI -DI -DI -DI -DI -RA -Nr -Nr -Nr -RA -RA -RA -HW -ng -RA -DI -DI -DI -DI -DI -DI -DI -"} -(11,1,1) = {" -DI -DI -DI -DI -DI -DI -DI -DI -RA -Kl -xW -HI -Mv -aK -RA -ks -Es -RA -DI -DI -DI -DI -DI -DI -DI -"} -(12,1,1) = {" -DI -DI -DI -RA -RA -RA -RA -RA -RA -tD -VD -Gv -Bf -Rq -RA -nc -vH -RA -DI -DI -DI -DI -DI -DI -DI -"} -(13,1,1) = {" -DI -DI -DI -RA -Ov -FC -mn -vt -RA -mz -Qt -Km -bT -Zf -RA -sY -ng -RA -DI -DI -DI -DI -DI -DI -DI -"} -(14,1,1) = {" -DI -DI -DI -RA -Ag -pJ -TA -ck -dm -SZ -SZ -HL -SZ -HL -SZ -SZ -IU -RA -DI -DI -DI -DI -DI -DI -DI -"} -(15,1,1) = {" -DI -DI -DI -RA -UK -go -iK -PS -RA -Qt -Qb -xW -xW -jY -El -HS -uV -RA -DI -DI -DI -DI -DI -DI -DI -"} -(16,1,1) = {" -DI -DI -DI -RA -RA -RA -RA -RA -RA -xW -BH -yH -Qt -xW -VD -Qt -Ao -RA -DI -DI -DI -DI -DI -DI -DI -"} -(17,1,1) = {" -DI -DI -DI -DI -DI -DI -DI -DI -RA -xW -Ef -xW -xW -rM -EA -Xe -xW -RA -DI -DI -DI -DI -DI -DI -DI -"} -(18,1,1) = {" -DI -DI -DI -DI -DI -DI -DI -DI -RA -FL -Wa -Eh -xW -Qt -pp -xW -BX -RA -DI -DI -DI -DI -DI -DI -DI -"} -(19,1,1) = {" -DI -DI -DI -DI -DI -DI -DI -DI -RA -RA -RA -RA -RA -RA -RA -RA -RA -RA -DI -DI -DI -DI -DI -DI -DI -"} -(20,1,1) = {" -DI -DI -DI -DI -DI -DI -DI -DI -DI -DI -DI -DI -DI -DI -DI -DI -DI -DI -DI -DI -DI -DI -DI -DI -DI -"} -(21,1,1) = {" -DI -DI -DI -DI -DI -DI -DI -DI -DI -DI -DI -DI -DI -DI -DI -DI -DI -DI -DI -DI -DI -DI -DI -DI -DI -"} -(22,1,1) = {" -DI -DI -DI -DI -DI -DI -DI -DI -DI -DI -DI -DI -DI -DI -DI -DI -DI -DI -DI -DI -DI -DI -DI -DI -DI -"} -(23,1,1) = {" -DI -DI -DI -DI -DI -DI -DI -DI -DI -DI -DI -DI -DI -DI +/area/ruin/thelizardsgas_lavaland) +"Nr" = ( +/obj/effect/spawner/random/trash/food_packaging, +/obj/structure/cable, +/obj/machinery/duct, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) +"NY" = ( +/obj/structure/closet/crate/preopen, +/obj/effect/spawner/random/trash/deluxe_garbage, +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden/layer4, +/turf/open/floor/iron/smooth{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) +"Om" = ( +/obj/structure/railing{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/pink/hidden, +/obj/structure/girder/reinforced, +/turf/open/floor/asphalt/lavaland, +/area/ruin/thelizardsgas_lavaland) +"Ov" = ( +/obj/structure/table/reinforced, +/obj/structure/window/reinforced/spawner/directional/north, +/obj/structure/window/reinforced/spawner/directional/east, +/obj/item/food/hotdog{ + pixel_y = 4; + pixel_x = -2 + }, +/obj/item/food/hotdog{ + pixel_y = -3; + pixel_x = 1 + }, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) +"PS" = ( +/obj/effect/turf_decal/bot, +/obj/structure/cable, +/obj/structure/bed/dogbed{ + name = "Zarpo's bed"; + desc = "A comfy-looking lizard bed. Looks a lot like a dog bed." + }, +/turf/open/floor/iron/smooth{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) +"Qb" = ( +/obj/structure/cable, +/obj/structure/sign/poster/contraband/moffuchis_pizza/directional/north, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) +"Qt" = ( +/obj/structure/sign/poster/contraband/jumbo_bar/directional/east, +/obj/structure/cable, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) +"Rq" = ( +/obj/machinery/light/directional/south, +/obj/structure/sign/warning/chem_diamond/directional/south, +/obj/machinery/duct, +/turf/open/floor/asphalt/lavaland, +/area/ruin/thelizardsgas_lavaland) +"Ry" = ( +/obj/structure/rack, +/obj/item/food/sticko/nutty{ + pixel_y = 5; + pixel_x = -5 + }, +/obj/item/food/sticko{ + pixel_y = 2; + pixel_x = 6 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden/layer4, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) +"RA" = ( +/turf/closed/wall{ + baseturfs = /turf/open/floor/plating/lavaland_baseturf + }, +/area/ruin/thelizardsgas_lavaland) +"RK" = ( +/obj/structure/railing{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/turf_decal/stripes/end, +/turf/open/floor/plating/lavaland_atmos{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) +"SL" = ( +/obj/structure/cable, +/obj/structure/railing, +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/plating/lavaland_atmos{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) +"SZ" = ( +/obj/structure/cable, +/obj/machinery/light/directional/north, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) +"Ty" = ( +/obj/structure/railing, +/obj/machinery/atmospherics/pipe/smart/manifold4w/pink/hidden, +/turf/open/floor/asphalt/lavaland, +/area/ruin/thelizardsgas_lavaland) +"TA" = ( +/obj/machinery/power/terminal{ + dir = 1 + }, +/obj/structure/cable, +/obj/effect/spawner/random/trash/deluxe_garbage, +/turf/open/floor/iron/smooth{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) +"TI" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/pink/hidden, +/obj/machinery/duct, +/turf/open/floor/asphalt/lavaland, +/area/ruin/thelizardsgas_lavaland) +"Uk" = ( +/obj/machinery/duct, +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 4 + }, +/turf/open/floor/asphalt/lavaland, +/area/ruin/thelizardsgas_lavaland) +"Ux" = ( +/obj/structure/table, +/obj/machinery/coffeemaker{ + pixel_y = 5 + }, +/obj/machinery/computer/security/telescreen/entertainment/directional/north, +/obj/machinery/airalarm/directional/west, +/turf/open/floor/iron/smooth{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) +"UK" = ( +/obj/structure/cable, +/obj/machinery/power/smes/full, +/turf/open/floor/iron/smooth{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) +"UZ" = ( +/obj/structure/sign/warning/fire/directional/north, +/obj/machinery/atmospherics/pipe/smart/manifold4w/pink/hidden, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"VD" = ( +/obj/machinery/duct, +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden/layer2, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden/layer4, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) +"VQ" = ( +/obj/machinery/light/small/dim/directional/north, +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden/layer4, +/turf/open/floor/iron/smooth{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) +"Wa" = ( +/obj/machinery/duct, +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 8 + }, +/turf/open/floor/asphalt/lavaland, +/area/ruin/thelizardsgas_lavaland) +"WY" = ( +/turf/open/floor/engine/plasma{ + initial_gas_mix = "plasma=30000;TEMP=293.15" + }, +/area/ruin/thelizardsgas_lavaland) +"Xe" = ( +/obj/effect/spawner/structure/window/reinforced/plasma, +/obj/structure/cable, +/obj/machinery/atmospherics/components/binary/pump/on/pink/visible{ + dir = 8; + target_pressure = 4100 + }, +/turf/open/floor/plating/lavaland_atmos{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) +"Xo" = ( +/obj/structure/sign/warning/fire/directional/north, +/turf/template_noop, +/area/template_noop) +"XB" = ( +/obj/structure/sign/warning/fire/directional/north, +/obj/machinery/atmospherics/components/unary/passive_vent/layer4{ + dir = 8 + }, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"Yx" = ( +/obj/structure/cable, +/obj/structure/railing{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/pink/hidden, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating/lavaland_atmos{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) +"Zf" = ( +/obj/structure/window/reinforced/spawner/directional/west, +/obj/structure/window/reinforced/spawner/directional/south, +/obj/item/food/cornuto{ + pixel_y = 4; + pixel_x = -3 + }, +/obj/item/food/cornuto{ + pixel_y = -5; + pixel_x = 2 + }, +/obj/item/food/cornuto{ + pixel_y = 5; + pixel_x = 6 + }, +/obj/item/food/cornuto{ + pixel_y = -5; + pixel_x = -3 + }, +/obj/structure/closet/crate/freezer, +/turf/open/floor/iron/freezer{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) + +(1,1,1) = {" DI DI DI DI DI +ub +BH +BH +BH +BH +BH +BH +BH +BH +Om DI DI DI @@ -1188,57 +1248,371 @@ DI DI DI "} -(24,1,1) = {" +(2,1,1) = {" DI DI DI DI DI +KJ +fH +Wa +fH +Wa +Wa +fH +Wa +fH +Ty DI DI DI DI DI DI +"} +(3,1,1) = {" DI DI +om +fy +om +xw +fH +wl +fj +wl +wl +fj +wl +fH +xw +om +fy DI DI DI DI +"} +(4,1,1) = {" DI +om +om +fy +om +xw +Rq +FA +qO +FA +FA +ks +FA +JX +xw +om +fy +om DI DI DI +"} +(5,1,1) = {" DI DI +om +fy +om +xw +fH +fX +fj +fX +fX +fj +fX +fH +xw +om +fy +om +om DI DI "} -(25,1,1) = {" +(6,1,1) = {" DI DI +HB +Gu +Ao +xw +fH +Uk +fH +Uk +Uk +fH +Uk +fH +xw +oD +lI +Ao DI DI DI +"} +(7,1,1) = {" DI DI +Ao +Ao +Ao +xw +xw +TI +xw +xw +xw +cc +xw +xw +xw +GK +Ao +Ao DI DI DI +"} +(8,1,1) = {" DI DI +fF +Ao +HB +FA +Cs +Bp +Cs +FA +FA +FA +HW +HW +FA +UZ +Ao +Ao DI DI DI +"} +(9,1,1) = {" +FA +FA +FC +FC +FA +FA +iT +yH +mz +Mv +iN +RA +VQ +Kc +FA +dT +Yx +Yx +ng +EA +Xo +"} +(10,1,1) = {" +FA +Ux +mJ +mY +wY +RA +ia +Nr +Ov +tk +BX +RA +mG +rr +FA +Xe +Xe +Xe +Ef +IC DI +"} +(11,1,1) = {" +FA +Ag +pJ +ou +NY +RA +dI +HI +Km +aK +xH +RA +Es +HW +FA +rv +JK +fO +Ef +vi DI +"} +(12,1,1) = {" +FA +qk +Lh +go +vt +tD +VD +Gv +Bf +vH +Bf +nc +vH +Kl +FA +WY +JB +WY +Ef +vi DI +"} +(13,1,1) = {" +FA +RA +RA +RA +CR +RA +fl +zr +bT +Zf +xW +sY +Ry +El +FA +WY +WY +WY +Ef +SL DI +"} +(14,1,1) = {" +FA +UK +TA +ck +dm +RA +SZ +iP +IU +HL +xW +rM +IU +pp +FA +dC +BU +BU +Ef +SL DI +"} +(15,1,1) = {" +FA +iK +PS +Eh +mn +RA +Qb +Bz +vb +jY +xW +HS +uV +nX +FA +Xe +Xe +Xe +Ef +Hz DI +"} +(16,1,1) = {" +FA +FA +FA +FA +FA +FA +Cx +Dw +Qt +Dw +Cx +fZ +Dw +Gg +MX +aW +CJ +FL +RK +EA +Xo +"} +(17,1,1) = {" DI DI +Ao +fF +fF +FA +FA +FA +FA +FA +FA +FA +FA +FA +FA +XB +Kb +Ao +rW DI DI "} diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_shuttle_wreckage.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_shuttle_wreckage.dmm new file mode 100644 index 0000000000000..36950aaa0eedc --- /dev/null +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_shuttle_wreckage.dmm @@ -0,0 +1,880 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"bl" = ( +/obj/item/stack/sheet/iron/five, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered) +"bw" = ( +/obj/effect/decal/cleanable/glass, +/turf/open/floor/mineral/titanium{ + initial_gas_mix = "LAVALAND_ATMOS" + }, +/area/ruin/unpowered) +"cB" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/decal/cleanable/rubble, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered) +"dI" = ( +/obj/machinery/door/airlock/public/glass{ + name = "Emergency Shuttle Cockpit" + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/mineral/titanium{ + initial_gas_mix = "LAVALAND_ATMOS" + }, +/area/ruin/unpowered) +"dK" = ( +/obj/effect/mapping_helpers/burnt_floor, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/rubble, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered) +"en" = ( +/obj/effect/mob_spawn/corpse/human/charredskeleton, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered) +"eQ" = ( +/obj/item/shard/titanium, +/obj/effect/decal/cleanable/glass, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered) +"fy" = ( +/obj/structure/door_assembly/door_assembly_shuttle, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered) +"fz" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/decal/cleanable/ash, +/turf/open/floor/mineral/titanium/blue{ + initial_gas_mix = "LAVALAND_ATMOS" + }, +/area/ruin/unpowered) +"gP" = ( +/turf/closed/mineral/titanium/volcanic, +/area/ruin/unpowered) +"hT" = ( +/turf/closed/wall/mineral/titanium{ + initial_gas_mix = "LAVALAND_ATMOS" + }, +/area/ruin/unpowered) +"hY" = ( +/obj/effect/mob_spawn/corpse/human/charredskeleton, +/turf/open/floor/mineral/titanium{ + initial_gas_mix = "LAVALAND_ATMOS" + }, +/area/ruin/unpowered) +"ih" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 4 + }, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered) +"iU" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/decal/cleanable/glass, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered) +"ky" = ( +/obj/structure/chair/comfy/shuttle, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered) +"ld" = ( +/obj/item/stack/sheet/mineral/titanium/fifty{ + amount = 4 + }, +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/mapping_helpers/burnt_floor, +/turf/open/floor/mineral/titanium{ + initial_gas_mix = "LAVALAND_ATMOS" + }, +/area/ruin/unpowered) +"lu" = ( +/turf/open/lava/smooth/lava_land_surface, +/area/ruin/unpowered) +"mS" = ( +/obj/effect/spawner/random/structure/crate, +/turf/open/floor/mineral/plastitanium/red{ + initial_gas_mix = "LAVALAND_ATMOS" + }, +/area/ruin/unpowered) +"oE" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/ash, +/turf/open/floor/mineral/titanium/yellow{ + initial_gas_mix = "LAVALAND_ATMOS" + }, +/area/ruin/unpowered) +"py" = ( +/obj/effect/decal/cleanable/ash, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered) +"rn" = ( +/turf/open/lava/smooth/lava_land_surface, +/area/lavaland/surface) +"rr" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/glass, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered) +"rE" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 8 + }, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered) +"se" = ( +/obj/structure/table, +/obj/effect/decal/cleanable/ash, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered) +"sE" = ( +/obj/item/shard/titanium, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered) +"sZ" = ( +/turf/closed/mineral/random/volcanic, +/area/ruin/unpowered) +"tp" = ( +/obj/item/stack/sheet/iron, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered) +"tx" = ( +/obj/machinery/light/small/directional/east, +/turf/open/lava/smooth/lava_land_surface, +/area/ruin/unpowered) +"tD" = ( +/obj/item/stack/sheet/mineral/titanium/fifty{ + amount = 4 + }, +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/decal/cleanable/ash, +/turf/open/floor/mineral/titanium{ + initial_gas_mix = "LAVALAND_ATMOS" + }, +/area/ruin/unpowered) +"uh" = ( +/turf/closed/mineral/random/volcanic, +/area/lavaland/surface) +"uH" = ( +/obj/effect/spawner/random/structure/crate, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered) +"vf" = ( +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/mineral/titanium/blue{ + initial_gas_mix = "LAVALAND_ATMOS" + }, +/area/ruin/unpowered) +"xz" = ( +/obj/machinery/computer, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered) +"yZ" = ( +/turf/closed/mineral/volcanic/lava_land_surface, +/area/ruin/unpowered) +"zk" = ( +/obj/effect/spawner/random/structure/crate, +/obj/effect/decal/cleanable/glass, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered) +"Bb" = ( +/obj/effect/mapping_helpers/broken_floor, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered) +"BT" = ( +/obj/effect/mob_spawn/corpse/human/charredskeleton, +/turf/open/floor/mineral/plastitanium/red{ + initial_gas_mix = "LAVALAND_ATMOS" + }, +/area/ruin/unpowered) +"Cg" = ( +/obj/effect/decal/cleanable/glass, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered) +"CX" = ( +/obj/item/stack/sheet/mineral/titanium, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/mineral/titanium/yellow{ + initial_gas_mix = "LAVALAND_ATMOS" + }, +/area/ruin/unpowered) +"Dq" = ( +/obj/effect/mapping_helpers/burnt_floor, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered) +"Dy" = ( +/obj/item/shard/titanium, +/obj/machinery/light/small/directional/east, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered) +"DL" = ( +/obj/item/stack/sheet/mineral/titanium/fifty{ + amount = 4 + }, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered) +"DZ" = ( +/obj/effect/mapping_helpers/burnt_floor, +/turf/open/floor/mineral/titanium/yellow{ + initial_gas_mix = "LAVALAND_ATMOS" + }, +/area/ruin/unpowered) +"Ee" = ( +/obj/structure/extinguisher_cabinet/directional/east, +/obj/item/stack/sheet/iron, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered) +"Er" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/ash, +/turf/open/floor/mineral/titanium{ + initial_gas_mix = "LAVALAND_ATMOS" + }, +/area/ruin/unpowered) +"Fq" = ( +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/lavaland/surface) +"FI" = ( +/obj/machinery/power/shuttle_engine/heater, +/turf/open/floor/plating/lavaland_atmos, +/area/ruin/unpowered) +"FL" = ( +/turf/closed/mineral/volcanic/lava_land_surface, +/area/lavaland/surface) +"FR" = ( +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/mineral/titanium/yellow{ + initial_gas_mix = "LAVALAND_ATMOS" + }, +/area/ruin/unpowered) +"FY" = ( +/obj/item/stack/sheet/iron/five, +/obj/item/stack/sheet/mineral/titanium/fifty{ + amount = 4 + }, +/obj/effect/mapping_helpers/burnt_floor, +/turf/open/floor/mineral/titanium{ + initial_gas_mix = "LAVALAND_ATMOS" + }, +/area/ruin/unpowered) +"Ga" = ( +/obj/machinery/power/shuttle_engine/propulsion, +/turf/open/floor/plating/lavaland_atmos, +/area/ruin/unpowered) +"GF" = ( +/obj/structure/window/reinforced/shuttle/unanchored, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered) +"GS" = ( +/obj/item/stack/sheet/iron/five, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered) +"GZ" = ( +/turf/closed/mineral/titanium/volcanic, +/area/lavaland/surface) +"Hy" = ( +/obj/machinery/computer/communications{ + dir = 8 + }, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered) +"HM" = ( +/obj/item/stack/sheet/mineral/titanium, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered) +"JD" = ( +/mob/living/basic/mining/goliath, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered) +"JN" = ( +/obj/item/shard/titanium, +/obj/item/stack/sheet/mineral/titanium, +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/decal/cleanable/glass, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered) +"KN" = ( +/obj/structure/spawner/lavaland/legion, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered) +"Lz" = ( +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered) +"LQ" = ( +/mob/living/basic/mining/goldgrub, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered) +"Ma" = ( +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered) +"NI" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/mineral/titanium/blue{ + initial_gas_mix = "LAVALAND_ATMOS" + }, +/area/ruin/unpowered) +"NS" = ( +/obj/item/stack/sheet/iron, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered) +"Om" = ( +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/mineral/titanium{ + initial_gas_mix = "LAVALAND_ATMOS" + }, +/area/ruin/unpowered) +"On" = ( +/obj/effect/mapping_helpers/burnt_floor, +/obj/effect/decal/cleanable/glass, +/obj/effect/decal/cleanable/ash, +/turf/open/floor/mineral/titanium{ + initial_gas_mix = "LAVALAND_ATMOS" + }, +/area/ruin/unpowered) +"OZ" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 1 + }, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered) +"Pa" = ( +/obj/structure/table, +/obj/item/storage/medkit/regular{ + pixel_x = 2; + pixel_y = 3 + }, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered) +"Qq" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/decal/cleanable/glass, +/turf/open/floor/mineral/plastitanium/red{ + initial_gas_mix = "LAVALAND_ATMOS" + }, +/area/ruin/unpowered) +"Rm" = ( +/obj/item/shard/titanium, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered) +"St" = ( +/obj/structure/window/reinforced/shuttle, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered) +"SV" = ( +/turf/template_noop, +/area/template_noop) +"Tq" = ( +/mob/living/basic/mining/goliath, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/mineral/titanium/blue{ + initial_gas_mix = "LAVALAND_ATMOS" + }, +/area/ruin/unpowered) +"Tt" = ( +/obj/item/stack/sheet/iron, +/obj/effect/decal/cleanable/glass, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered) +"TF" = ( +/obj/effect/decal/cleanable/rubble, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered) +"TQ" = ( +/obj/item/stack/sheet/iron, +/obj/effect/decal/cleanable/glass, +/turf/open/floor/mineral/plastitanium/red{ + initial_gas_mix = "LAVALAND_ATMOS" + }, +/area/ruin/unpowered) +"Vs" = ( +/obj/item/stack/sheet/mineral/titanium, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered) +"VN" = ( +/obj/effect/mapping_helpers/burnt_floor, +/turf/open/floor/mineral/titanium{ + initial_gas_mix = "LAVALAND_ATMOS" + }, +/area/ruin/unpowered) +"XT" = ( +/obj/item/stack/sheet/mineral/titanium, +/obj/effect/decal/cleanable/glass, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered) +"XU" = ( +/obj/item/stack/sheet/mineral/titanium/fifty{ + amount = 4 + }, +/turf/open/floor/mineral/titanium/yellow{ + initial_gas_mix = "LAVALAND_ATMOS" + }, +/area/ruin/unpowered) +"XZ" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 4 + }, +/turf/open/floor/mineral/plastitanium/red{ + initial_gas_mix = "LAVALAND_ATMOS" + }, +/area/ruin/unpowered) +"Zo" = ( +/obj/effect/mob_spawn/corpse/human/legioninfested, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered) +"Zq" = ( +/obj/effect/mapping_helpers/burnt_floor, +/obj/effect/decal/cleanable/ash, +/turf/open/floor/mineral/titanium/blue{ + initial_gas_mix = "LAVALAND_ATMOS" + }, +/area/ruin/unpowered) + +(1,1,1) = {" +SV +SV +SV +SV +SV +SV +SV +GZ +GZ +Fq +Fq +Fq +FL +FL +FL +FL +SV +SV +SV +SV +"} +(2,1,1) = {" +SV +SV +SV +SV +SV +FL +GZ +gP +yZ +fy +iU +fy +yZ +hT +XZ +yZ +FL +SV +SV +SV +"} +(3,1,1) = {" +SV +SV +uh +uh +yZ +hT +hT +hT +yZ +yZ +Rm +Rm +HM +hT +BT +mS +yZ +FL +SV +SV +"} +(4,1,1) = {" +SV +uh +sZ +hT +ky +HM +ih +sE +NI +vf +eQ +tp +lu +lu +lu +TQ +yZ +yZ +FL +SV +"} +(5,1,1) = {" +SV +FL +hT +yZ +yZ +yZ +py +Tq +lu +lu +fz +Zo +lu +hT +Qq +lu +zk +St +FL +FL +"} +(6,1,1) = {" +FL +FL +hT +yZ +yZ +uH +FY +lu +lu +Zq +DL +NS +lu +lu +lu +lu +Cg +St +FL +FL +"} +(7,1,1) = {" +FL +FL +yZ +yZ +ky +VN +lu +tx +lu +Vs +dK +Bb +tp +sE +Lz +eQ +py +St +FL +FL +"} +(8,1,1) = {" +Fq +Fq +yZ +yZ +cB +ld +lu +hT +lu +lu +Ma +KN +Dq +LQ +Lz +sE +CX +St +FL +FL +"} +(9,1,1) = {" +Fq +Fq +Lz +TF +bl +Er +hY +hT +lu +lu +lu +sE +tp +se +FR +HM +yZ +yZ +FL +FL +"} +(10,1,1) = {" +Fq +Fq +Cg +GF +xz +Lz +tD +dI +lu +lu +lu +Ma +HM +Pa +yZ +CX +yZ +yZ +uh +FL +"} +(11,1,1) = {" +Fq +GZ +gP +bw +Tt +JD +TF +hT +lu +lu +GS +TF +Lz +DZ +XU +FI +Ga +uh +uh +FL +"} +(12,1,1) = {" +SV +GZ +gP +gP +VN +Ee +Hy +eQ +rE +rr +Lz +OZ +en +oE +yZ +yZ +FL +uh +uh +SV +"} +(13,1,1) = {" +SV +GZ +gP +Lz +py +hT +hT +St +Rm +HM +Om +py +Om +FI +Ga +FL +FL +SV +SV +SV +"} +(14,1,1) = {" +SV +GZ +Fq +Lz +lu +lu +lu +Rm +JN +Dy +On +Om +GZ +FL +FL +SV +SV +SV +SV +SV +"} +(15,1,1) = {" +SV +FL +FL +Fq +rn +lu +lu +XT +yZ +St +St +gP +GZ +SV +SV +SV +SV +SV +SV +SV +"} +(16,1,1) = {" +SV +FL +FL +FL +FL +Lz +py +St +yZ +FL +GZ +GZ +SV +SV +SV +SV +SV +SV +SV +SV +"} +(17,1,1) = {" +SV +SV +FL +FL +FL +Fq +Fq +FL +FL +FL +SV +SV +SV +SV +SV +SV +SV +SV +SV +SV +"} +(18,1,1) = {" +SV +SV +FL +FL +FL +Fq +Fq +FL +FL +FL +SV +SV +SV +SV +SV +SV +SV +SV +SV +SV +"} +(19,1,1) = {" +SV +SV +SV +FL +FL +uh +uh +uh +FL +FL +SV +SV +SV +SV +SV +SV +SV +SV +SV +SV +"} +(20,1,1) = {" +SV +SV +SV +SV +SV +FL +uh +uh +FL +SV +SV +SV +SV +SV +SV +SV +SV +SV +SV +SV +"} diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1.dmm index fb738781bc752..13a82feee1d21 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1.dmm @@ -1445,23 +1445,6 @@ /obj/machinery/duct, /turf/open/floor/wood, /area/ruin/syndicate_lava_base/dormitories) -"lk" = ( -/obj/structure/table/wood, -/obj/machinery/light/small/directional/east, -/obj/machinery/computer/security/telescreen/entertainment{ - pixel_x = 30 - }, -/obj/structure/window/reinforced/spawner/directional/north{ - pixel_y = 1 - }, -/obj/item/book/manual/chef_recipes{ - pixel_x = 2; - pixel_y = 6 - }, -/obj/item/book/manual/wiki/barman_recipes, -/obj/item/reagent_containers/cup/glass/shaker, -/turf/open/floor/wood, -/area/ruin/syndicate_lava_base/bar) "lm" = ( /obj/structure/closet/secure_closet/medical1{ req_access = list("syndicate") @@ -1745,6 +1728,21 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/orange/visible, /turf/closed/wall/mineral/plastitanium/nodiagonal, /area/ruin/syndicate_lava_base/engineering) +"nI" = ( +/obj/structure/table/wood, +/obj/machinery/light/small/directional/east, +/obj/structure/window/reinforced/spawner/directional/north{ + pixel_y = 1 + }, +/obj/item/book/manual/chef_recipes{ + pixel_x = 2; + pixel_y = 6 + }, +/obj/item/book/manual/wiki/barman_recipes, +/obj/item/reagent_containers/cup/glass/shaker, +/obj/machinery/computer/security/telescreen/entertainment/directional/east, +/turf/open/floor/wood, +/area/ruin/syndicate_lava_base/bar) "nK" = ( /obj/machinery/door/airlock/public/glass{ name = "Bar" @@ -2000,16 +1998,6 @@ dir = 1 }, /area/ruin/syndicate_lava_base/medbay) -"qv" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/structure/table, -/obj/machinery/cell_charger, -/obj/item/stock_parts/cell/high, -/obj/structure/cable, -/turf/open/floor/mineral/plastitanium, -/area/ruin/syndicate_lava_base/cargo) "qA" = ( /obj/structure/reagent_dispensers/beerkeg, /turf/open/floor/iron/dark, @@ -2077,15 +2065,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/ruin/syndicate_lava_base/cargo) -"rI" = ( -/obj/machinery/firealarm/directional/west, -/obj/structure/table, -/obj/machinery/cell_charger, -/obj/item/stock_parts/cell/high, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/engineering) "rO" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/orange/visible, /obj/structure/cable, @@ -3176,6 +3155,15 @@ /obj/structure/table/reinforced, /turf/open/floor/iron/dark, /area/ruin/syndicate_lava_base/bar) +"GI" = ( +/obj/machinery/firealarm/directional/west, +/obj/structure/table, +/obj/machinery/cell_charger, +/obj/item/stock_parts/power_store/cell/high, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/ruin/syndicate_lava_base/engineering) "GV" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/cable, @@ -3824,6 +3812,16 @@ }, /turf/open/floor/iron, /area/ruin/syndicate_lava_base/arrivals) +"QG" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/table, +/obj/machinery/cell_charger, +/obj/item/stock_parts/power_store/cell/high, +/obj/structure/cable, +/turf/open/floor/mineral/plastitanium, +/area/ruin/syndicate_lava_base/cargo) "QN" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -5664,7 +5662,7 @@ jy ka ue kM -lk +nI lC To TN @@ -6316,7 +6314,7 @@ Bu kV lp Dr -rI +GI mF Cj Lp @@ -6496,7 +6494,7 @@ ab dy dy eE -qv +QG dy gd dy diff --git a/_maps/RandomRuins/SpaceRuins/abandonedteleporter.dmm b/_maps/RandomRuins/SpaceRuins/abandonedteleporter.dmm index 0f5ffbcb72c71..51fea0a9517c1 100644 --- a/_maps/RandomRuins/SpaceRuins/abandonedteleporter.dmm +++ b/_maps/RandomRuins/SpaceRuins/abandonedteleporter.dmm @@ -48,7 +48,7 @@ /turf/open/floor/plating/airless, /area/ruin/space/abandoned_tele) "l" = ( -/obj/item/stock_parts/cell, +/obj/item/stock_parts/power_store/cell, /turf/open/floor/plating/airless, /area/ruin/space/abandoned_tele) "m" = ( diff --git a/_maps/RandomRuins/SpaceRuins/allamericandiner.dmm b/_maps/RandomRuins/SpaceRuins/allamericandiner.dmm index f7dc2f52fe328..32329cf4a5cfd 100644 --- a/_maps/RandomRuins/SpaceRuins/allamericandiner.dmm +++ b/_maps/RandomRuins/SpaceRuins/allamericandiner.dmm @@ -513,7 +513,7 @@ "yE" = ( /obj/structure/table, /obj/machinery/cell_charger, -/obj/item/stock_parts/cell/high, +/obj/item/stock_parts/power_store/cell/high, /obj/machinery/power/terminal{ dir = 4 }, diff --git a/_maps/RandomRuins/SpaceRuins/anomaly_research.dmm b/_maps/RandomRuins/SpaceRuins/anomaly_research.dmm index 831e024754193..c396ddb4121e7 100644 --- a/_maps/RandomRuins/SpaceRuins/anomaly_research.dmm +++ b/_maps/RandomRuins/SpaceRuins/anomaly_research.dmm @@ -121,7 +121,7 @@ dir = 6 }, /obj/structure/table/reinforced, -/obj/item/reactive_armour_shell, +/obj/item/reactive_armor_shell, /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/dark, /area/misc/anomaly_research) diff --git a/_maps/RandomRuins/SpaceRuins/bigderelict1.dmm b/_maps/RandomRuins/SpaceRuins/bigderelict1.dmm index 12c40f0b280db..4bdf2af01f19d 100644 --- a/_maps/RandomRuins/SpaceRuins/bigderelict1.dmm +++ b/_maps/RandomRuins/SpaceRuins/bigderelict1.dmm @@ -132,8 +132,8 @@ "aI" = ( /obj/structure/closet/crate/engineering/electrical, /obj/item/storage/toolbox/electrical, -/obj/item/stock_parts/cell/hyper, -/obj/item/stock_parts/cell/high, +/obj/item/stock_parts/power_store/cell/hyper, +/obj/item/stock_parts/power_store/cell/high, /turf/open/floor/mineral/titanium/yellow, /area/ruin/space/has_grav/derelictoutpost/dockedship) "aJ" = ( @@ -207,7 +207,7 @@ "aW" = ( /obj/structure/closet/crate/engineering/electrical, /obj/item/storage/toolbox/electrical, -/obj/item/stock_parts/cell/hyper, +/obj/item/stock_parts/power_store/cell/hyper, /turf/open/floor/mineral/titanium/yellow, /area/ruin/space/has_grav/derelictoutpost/dockedship) "aX" = ( @@ -233,7 +233,7 @@ /area/ruin/space/has_grav/derelictoutpost/powerstorage) "bc" = ( /obj/structure/table, -/obj/item/stock_parts/cell/hyper, +/obj/item/stock_parts/power_store/cell/hyper, /obj/structure/cable, /turf/open/floor/iron, /area/ruin/space/has_grav/derelictoutpost/powerstorage) diff --git a/_maps/RandomRuins/SpaceRuins/bus.dmm b/_maps/RandomRuins/SpaceRuins/bus.dmm index bb0156a4b7e52..a8a4a968d976d 100644 --- a/_maps/RandomRuins/SpaceRuins/bus.dmm +++ b/_maps/RandomRuins/SpaceRuins/bus.dmm @@ -19,7 +19,8 @@ "an" = ( /obj/structure/fluff/bus/passable/seat, /obj/item/toy/plush/pkplush{ - pixel_z = 17 + pixel_z = 17; + anchored = 1 }, /turf/open/floor/iron/dark/airless{ icon_state = "bus" @@ -28,7 +29,6 @@ "ao" = ( /obj/machinery/telecomms/server{ pixel_z = 12; - layer = 2.91; name = "tgsv3"; desc = "It's, uh... pending an upgrade." }, @@ -39,7 +39,8 @@ pixel_y = 15 }, /obj/item/toy/plush/lizard_plushie/green{ - pixel_z = 17 + pixel_z = 17; + anchored = 1 }, /turf/open/floor/iron/dark/airless{ icon_state = "bus" @@ -49,7 +50,8 @@ /obj/structure/fluff/bus/passable/seat, /obj/effect/decal/cleanable/dirt, /obj/item/clothing/head/helmet/knight{ - pixel_z = 16 + pixel_z = 16; + anchored = 1 }, /turf/open/floor/iron/dark/airless{ icon_state = "bus" @@ -60,11 +62,13 @@ /obj/item/grown/novaflower{ offset_at_init = 0; pixel_z = 24; - pixel_y = 1 + pixel_y = 1; + anchored = 1 }, /obj/item/food/grown/watermelon{ offset_at_init = 0; - pixel_z = 17 + pixel_z = 17; + anchored = 1 }, /turf/open/floor/iron/dark/airless{ icon_state = "bus" @@ -75,15 +79,18 @@ /obj/effect/decal/cleanable/dirt, /obj/item/toy/plush/moth{ pixel_z = 26; - pixel_y = 2 + pixel_y = 2; + anchored = 1 }, /obj/item/food/grown/citrus/orange{ offset_at_init = 0; pixel_z = 18; - pixel_y = 1 + pixel_y = 1; + anchored = 1 }, /obj/item/toy/talking/ai{ - pixel_z = 16 + pixel_z = 16; + anchored = 1 }, /turf/open/floor/iron/dark/airless{ icon_state = "bus" @@ -149,10 +156,12 @@ /obj/item/bodypart/arm/right{ pixel_z = 25; pixel_y = 1; - pixel_x = -4 + pixel_x = -4; + anchored = 1 }, /obj/item/food/meat/slab/penguin{ - pixel_z = 13 + pixel_z = 13; + anchored = 1 }, /turf/open/floor/iron/dark/airless{ icon_state = "bus" @@ -188,12 +197,14 @@ /obj/item/food/grown/tomato{ offset_at_init = 0; pixel_z = 23; - pixel_y = 2 + pixel_y = 2; + anchored = 1 }, /obj/item/food/donut/plain{ pixel_z = 15; pixel_y = 1; - pixel_x = 1 + pixel_x = 1; + anchored = 1 }, /obj/effect/decal/cleanable/ants{ pixel_z = 8; @@ -228,8 +239,7 @@ /area/ruin/space) "ud" = ( /obj/structure/fluff/bus/passable{ - icon_state = "bottomdoor"; - layer = 3 + icon_state = "bottomdoor" }, /turf/open/misc/asteroid/airless, /area/ruin/space) @@ -291,11 +301,11 @@ /obj/effect/decal/cleanable/dirt, /obj/item/toy/plush/awakenedplushie{ pixel_z = 26; - pixel_y = 1 + pixel_y = 1; + anchored = 1 }, /obj/machinery/telecomms/server{ pixel_z = 12; - layer = 2.91; name = "tgsv3"; desc = "It's, uh... pending an upgrade." }, @@ -384,11 +394,13 @@ /obj/item/toy/singlecard{ pixel_z = 24; pixel_y = 1; - pixel_x = 0 + pixel_x = 0; + anchored = 1 }, /obj/item/food/grown/potato{ offset_at_init = 0; - pixel_z = 15 + pixel_z = 15; + anchored = 1 }, /turf/open/floor/iron/dark/airless{ icon_state = "bus" diff --git a/_maps/RandomRuins/SpaceRuins/clericden.dmm b/_maps/RandomRuins/SpaceRuins/clericden.dmm index c6e6bebddb0be..f274f7a23f563 100644 --- a/_maps/RandomRuins/SpaceRuins/clericden.dmm +++ b/_maps/RandomRuins/SpaceRuins/clericden.dmm @@ -108,9 +108,7 @@ /turf/open/floor/plating/airless, /area/ruin/space) "A" = ( -/obj/structure/table/wood{ - layer = 3.3 - }, +/obj/structure/table/wood, /turf/open/floor/carpet/royalblack/airless, /area/ruin/space) "B" = ( diff --git a/_maps/RandomRuins/SpaceRuins/crashedship.dmm b/_maps/RandomRuins/SpaceRuins/crashedship.dmm index 803e0afa28cd3..60e8714e865ae 100644 --- a/_maps/RandomRuins/SpaceRuins/crashedship.dmm +++ b/_maps/RandomRuins/SpaceRuins/crashedship.dmm @@ -1316,7 +1316,7 @@ dir = 1 }, /obj/structure/table, -/obj/item/stock_parts/cell/lead, +/obj/item/stock_parts/power_store/cell/lead, /turf/open/floor/iron/airless, /area/ruin/space/has_grav/crashedship/aft) "XW" = ( diff --git a/_maps/RandomRuins/SpaceRuins/cyborg_mothership.dmm b/_maps/RandomRuins/SpaceRuins/cyborg_mothership.dmm index 7e6927290bc23..f72cdd8ecad43 100644 --- a/_maps/RandomRuins/SpaceRuins/cyborg_mothership.dmm +++ b/_maps/RandomRuins/SpaceRuins/cyborg_mothership.dmm @@ -62,7 +62,7 @@ /turf/template_noop, /area/space) "s" = ( -/obj/item/stock_parts/cell/high/empty, +/obj/item/stock_parts/power_store/cell/high/empty, /turf/open/misc/asteroid/airless, /area/space) "u" = ( diff --git a/_maps/RandomRuins/SpaceRuins/dangerous_research.dmm b/_maps/RandomRuins/SpaceRuins/dangerous_research.dmm index 84a3a2658d3e5..a7eac1fe1a8b1 100644 --- a/_maps/RandomRuins/SpaceRuins/dangerous_research.dmm +++ b/_maps/RandomRuins/SpaceRuins/dangerous_research.dmm @@ -1192,7 +1192,7 @@ }, /obj/effect/decal/cleanable/blood/gibs, /obj/item/organ/internal/brain, -/obj/item/skillchip/job/research_director, +/obj/item/skillchip/research_director, /obj/effect/turf_decal/tile/neutral/half{ dir = 4 }, diff --git a/_maps/RandomRuins/SpaceRuins/deepstorage.dmm b/_maps/RandomRuins/SpaceRuins/deepstorage.dmm index 2c23219b7d382..f9235a874b054 100644 --- a/_maps/RandomRuins/SpaceRuins/deepstorage.dmm +++ b/_maps/RandomRuins/SpaceRuins/deepstorage.dmm @@ -42,7 +42,9 @@ /turf/open/floor/plating, /area/ruin/space/has_grav/deepstorage/crusher) "am" = ( -/obj/machinery/recycler/deathtrap, +/obj/machinery/recycler/deathtrap{ + dir = 8 + }, /obj/machinery/conveyor{ dir = 4; id = "bunkerrecycle" @@ -827,12 +829,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/orange/hidden{ dir = 4 }, -/obj/machinery/computer/security/telescreen{ - dir = 1; - name = "Bunker Entrance monitor"; - network = list("bunker1"); - pixel_y = 2 - }, /obj/effect/decal/cleanable/dirt, /obj/machinery/button/door/directional/west{ id = "bunkerexterior"; @@ -851,6 +847,7 @@ pixel_y = 8; req_access = list("away_general") }, +/obj/machinery/computer/security/telescreen/deep_storage/bunker/directional/north, /turf/open/floor/iron, /area/ruin/space/has_grav/deepstorage/airlock) "eL" = ( diff --git a/_maps/RandomRuins/SpaceRuins/forgottenship.dmm b/_maps/RandomRuins/SpaceRuins/forgottenship.dmm index 0853eb15a91a7..7b12e87992c8a 100644 --- a/_maps/RandomRuins/SpaceRuins/forgottenship.dmm +++ b/_maps/RandomRuins/SpaceRuins/forgottenship.dmm @@ -282,6 +282,7 @@ /obj/item/paper, /obj/item/pen, /obj/machinery/light/directional/south, +/obj/machinery/computer/security/telescreen/forgotten_ship/sci/directional/south, /turf/open/floor/carpet/royalblack, /area/ruin/space/has_grav/syndicate_forgotten_ship) "bp" = ( @@ -466,16 +467,6 @@ }, /turf/open/floor/mineral/plastitanium, /area/ruin/space/has_grav/syndicate_forgotten_ship) -"bT" = ( -/obj/structure/table/reinforced, -/obj/machinery/computer/security/telescreen/interrogation{ - name = "Cameras monitor"; - network = list("fsci"); - req_access = list("syndicate"); - screen_loc = "" - }, -/turf/open/floor/mineral/plastitanium, -/area/ruin/space/has_grav/syndicate_forgotten_ship) "bV" = ( /obj/structure/table/reinforced, /turf/open/floor/mineral/plastitanium/red, @@ -2067,7 +2058,7 @@ bZ co bZ VF -bT +ah bg aD cF diff --git a/_maps/RandomRuins/SpaceRuins/garbagetruck1.dmm b/_maps/RandomRuins/SpaceRuins/garbagetruck1.dmm index 8aa85a7e1534d..a81508dbe1f40 100644 --- a/_maps/RandomRuins/SpaceRuins/garbagetruck1.dmm +++ b/_maps/RandomRuins/SpaceRuins/garbagetruck1.dmm @@ -477,7 +477,7 @@ /obj/structure/closet/cardboard, /obj/item/toy/plush/snakeplushie, /obj/item/clothing/glasses/eyepatch, -/obj/item/clothing/mask/cigarette/cigar/havana, +/obj/item/cigarette/cigar/havana, /turf/open/floor/plating/dumpsterair, /area/ruin/space/has_grav/garbagetruck/foodwaste) "wR" = ( @@ -754,7 +754,7 @@ "Fz" = ( /obj/structure/table/reinforced, /obj/machinery/cell_charger, -/obj/item/stock_parts/cell/lead, +/obj/item/stock_parts/power_store/cell/lead, /turf/open/floor/iron/smooth, /area/ruin/space/has_grav/garbagetruck/foodwaste) "FL" = ( @@ -1070,7 +1070,6 @@ }, /obj/machinery/light/warm, /obj/machinery/power/apc{ - cell_type = /obj/item/stock_parts/cell/lead; locked = 0; pixel_y = -25; start_charge = 0 diff --git a/_maps/RandomRuins/SpaceRuins/garbagetruck2.dmm b/_maps/RandomRuins/SpaceRuins/garbagetruck2.dmm index 9813823daeb17..c394d14f977db 100644 --- a/_maps/RandomRuins/SpaceRuins/garbagetruck2.dmm +++ b/_maps/RandomRuins/SpaceRuins/garbagetruck2.dmm @@ -238,7 +238,7 @@ "vf" = ( /obj/structure/table/reinforced, /obj/machinery/cell_charger, -/obj/item/stock_parts/cell/lead, +/obj/item/stock_parts/power_store/cell/lead, /turf/open/floor/iron/smooth, /area/ruin/space/has_grav/garbagetruck/medicalwaste) "vM" = ( @@ -537,7 +537,6 @@ }, /obj/machinery/light/warm, /obj/machinery/power/apc{ - cell_type = /obj/item/stock_parts/cell/lead; locked = 0; pixel_y = -25; start_charge = 0 diff --git a/_maps/RandomRuins/SpaceRuins/garbagetruck3.dmm b/_maps/RandomRuins/SpaceRuins/garbagetruck3.dmm index c2da1e7646cb0..03a9b87ff4edf 100644 --- a/_maps/RandomRuins/SpaceRuins/garbagetruck3.dmm +++ b/_maps/RandomRuins/SpaceRuins/garbagetruck3.dmm @@ -142,7 +142,7 @@ /area/ruin/space/has_grav/garbagetruck/squat) "ih" = ( /obj/item/bedsheet/purple, -/obj/item/clothing/mask/cigarette/space_cigarette, +/obj/item/cigarette/space_cigarette, /obj/structure/bed/maint, /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/fuel_pool, @@ -187,7 +187,7 @@ /area/ruin/space/has_grav/garbagetruck/squat) "kb" = ( /obj/effect/decal/cleanable/fuel_pool, -/obj/item/stock_parts/cell/crap/empty, +/obj/item/stock_parts/power_store/cell/crap/empty, /obj/effect/decal/cleanable/plastic, /obj/effect/spawner/random/maintenance/two, /turf/open/floor/plating/dumpsterair, @@ -373,7 +373,7 @@ /turf/open/floor/iron/smooth, /area/ruin/space/has_grav/garbagetruck/squat) "tu" = ( -/obj/item/clothing/mask/cigarette/robust, +/obj/item/cigarette/robust, /obj/structure/closet/emcloset, /obj/item/clothing/suit/utility/fire/heavy, /obj/item/clothing/head/utility/hardhat/welding/atmos, @@ -447,7 +447,7 @@ /obj/structure/broken_flooring/pile, /obj/item/food/deadmouse/moldy, /obj/item/stock_parts/water_recycler, -/obj/item/stock_parts/cell/lead, +/obj/item/stock_parts/power_store/cell/lead, /turf/open/floor/plating/dumpsterair, /area/ruin/space/has_grav/garbagetruck/squat) "vW" = ( @@ -470,7 +470,6 @@ }, /obj/machinery/light/warm, /obj/machinery/power/apc{ - cell_type = /obj/item/stock_parts/cell/lead; locked = 0; pixel_y = -25; start_charge = 0 @@ -669,7 +668,7 @@ "HN" = ( /obj/structure/table/reinforced, /obj/machinery/cell_charger, -/obj/item/stock_parts/cell/lead, +/obj/item/stock_parts/power_store/cell/lead, /turf/open/floor/iron/smooth, /area/ruin/space/has_grav/garbagetruck/squat) "HZ" = ( @@ -755,11 +754,11 @@ /turf/open/space/basic, /area/ruin/space/has_grav/garbagetruck/squat) "MQ" = ( -/obj/item/stock_parts/cell/crap/empty{ +/obj/item/stock_parts/power_store/cell/crap/empty{ pixel_x = -4; pixel_y = 10 }, -/obj/item/clothing/mask/cigarette/space_cigarette{ +/obj/item/cigarette/space_cigarette{ pixel_x = -5; pixel_y = 7 }, @@ -906,7 +905,7 @@ "Xv" = ( /obj/item/food/deadmouse, /obj/item/clothing/shoes/sneakers/red, -/obj/item/clothing/mask/cigarette/carp, +/obj/item/cigarette/carp, /obj/item/extinguisher/mini, /obj/effect/decal/cleanable/fuel_pool, /turf/open/floor/plating/dumpsterair, diff --git a/_maps/RandomRuins/SpaceRuins/garbagetruck4.dmm b/_maps/RandomRuins/SpaceRuins/garbagetruck4.dmm index 33c5893bcee4c..84ec36e943af9 100644 --- a/_maps/RandomRuins/SpaceRuins/garbagetruck4.dmm +++ b/_maps/RandomRuins/SpaceRuins/garbagetruck4.dmm @@ -653,7 +653,6 @@ }, /obj/machinery/light/warm, /obj/machinery/power/apc{ - cell_type = /obj/item/stock_parts/cell/lead; locked = 0; pixel_y = -25; start_charge = 0 @@ -672,7 +671,7 @@ "Mp" = ( /obj/structure/table/reinforced, /obj/machinery/cell_charger, -/obj/item/stock_parts/cell/lead, +/obj/item/stock_parts/power_store/cell/lead, /turf/open/floor/iron/smooth, /area/ruin/space/has_grav/garbagetruck/toystore) "MK" = ( @@ -758,7 +757,7 @@ /area/ruin/space/has_grav/garbagetruck/toystore) "Rl" = ( /obj/item/paper/crumpled, -/obj/item/stock_parts/cell/hyper, +/obj/item/stock_parts/power_store/cell/hyper, /obj/item/hand_labeler, /obj/item/hand_labeler_refill, /obj/item/hand_labeler_refill, diff --git a/_maps/RandomRuins/SpaceRuins/gondolaasteroid.dmm b/_maps/RandomRuins/SpaceRuins/gondolaasteroid.dmm index 70dfed5d5d649..981b2c1e2b35a 100644 --- a/_maps/RandomRuins/SpaceRuins/gondolaasteroid.dmm +++ b/_maps/RandomRuins/SpaceRuins/gondolaasteroid.dmm @@ -27,7 +27,7 @@ /turf/open/floor/grass, /area/ruin/space/has_grav) "h" = ( -/mob/living/simple_animal/pet/gondola, +/mob/living/basic/pet/gondola, /turf/open/floor/grass, /area/ruin/space/has_grav) "i" = ( diff --git a/_maps/RandomRuins/SpaceRuins/hilbertresearchfacility.dmm b/_maps/RandomRuins/SpaceRuins/hilbertresearchfacility.dmm index bdd59fa786bb9..01ef1895a66b9 100644 --- a/_maps/RandomRuins/SpaceRuins/hilbertresearchfacility.dmm +++ b/_maps/RandomRuins/SpaceRuins/hilbertresearchfacility.dmm @@ -1953,7 +1953,7 @@ /area/ruin/space/has_grav/powered/hilbertresearchfacility) "Sn" = ( /obj/structure/table/wood, -/obj/item/stock_parts/cell/bluespace{ +/obj/item/stock_parts/power_store/cell/bluespace{ pixel_y = 4 }, /obj/machinery/cell_charger{ diff --git a/_maps/RandomRuins/SpaceRuins/infested_frigate.dmm b/_maps/RandomRuins/SpaceRuins/infested_frigate.dmm index 542f64d7abd96..64e7be0705b6b 100644 --- a/_maps/RandomRuins/SpaceRuins/infested_frigate.dmm +++ b/_maps/RandomRuins/SpaceRuins/infested_frigate.dmm @@ -362,8 +362,7 @@ /obj/structure/door_assembly/door_assembly_hatch{ anchored = 1; name = "crew quarters"; - desc = "People lived in this place."; - layer = 2.8 + desc = "People lived in this place." }, /turf/template_noop, /area/ruin/space/has_grav/infested_frigate) @@ -380,9 +379,7 @@ pixel_x = 6; pixel_y = 6 }, -/obj/item/phone{ - layer = 3.1 - }, +/obj/item/phone, /obj/item/paper/crumpled/muddy/fluff/elephant_graveyard/rnd_notes{ default_raw_text = "STERILIZATION ORDERS

Detailed findings:

A biological research lab within the HD-10180 system has suffered from a complete containment failure. The SYN-C Brutus is to deliver a nuclear payload via strike team. Everything inside and outside the facility is to be killed on sight, including any research staff. Nuclear authentication codes have been sent via red phone, as have other detailed orders.

The rest of the documents are maps and mundane information regarding the crew's destination."; name = "STERILIZATION ORDERS"; @@ -638,9 +635,7 @@ /turf/open/floor/mineral/plastitanium/airless, /area/ruin/space/has_grav/infested_frigate) "jx" = ( -/obj/effect/decal/cleanable/glass{ - layer = 3.1 - }, +/obj/effect/decal/cleanable/glass, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden, /turf/open/floor/mineral/plastitanium/red, /area/ruin/space/has_grav/infested_frigate) @@ -653,9 +648,7 @@ desc = "It would have been locked anyway."; name = "syndicate navigation console" }, -/obj/effect/decal/cleanable/glass{ - layer = 3.1 - }, +/obj/effect/decal/cleanable/glass, /turf/open/floor/pod/dark, /area/ruin/space/has_grav/infested_frigate) "kc" = ( @@ -862,9 +855,7 @@ /obj/effect/decal/cleanable/blood{ icon_state = "floor5-old" }, -/obj/item/ammo_casing/spent{ - layer = 3.1 - }, +/obj/item/ammo_casing/spent, /obj/item/gun/ballistic/automatic/plastikov, /obj/effect/mob_spawn/corpse/human/syndicatepilot, /turf/open/floor/mineral/plastitanium/red, @@ -981,8 +972,7 @@ /obj/effect/decal/cleanable/glass, /obj/machinery/button/door/directional/north{ name = "prisoner isolation shutter"; - id = "captivity"; - layer = 3.4 + id = "captivity" }, /turf/open/floor/pod/dark, /area/ruin/space/has_grav/infested_frigate) @@ -1238,12 +1228,9 @@ /area/ruin/space/has_grav/infested_frigate) "vj" = ( /obj/machinery/door/poddoor{ - id = "Brutusexterior"; - closingLayer = 2.65 - }, -/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium{ - layer = 2.9 + id = "Brutusexterior" }, +/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, /turf/open/floor/plating, /area/ruin/space/has_grav/infested_frigate) "vm" = ( @@ -1626,9 +1613,7 @@ /turf/open/floor/mineral/plastitanium, /area/ruin/space/has_grav/infested_frigate) "yZ" = ( -/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium{ - layer = 2.9 - }, +/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, /turf/open/floor/plating, /area/ruin/space/has_grav/infested_frigate) "zg" = ( @@ -1926,9 +1911,7 @@ /obj/effect/decal/cleanable/blood/gibs{ icon_state = "gib1-old" }, -/obj/machinery/door/window/left/directional/east{ - layer = 3.2 - }, +/obj/machinery/door/window/left/directional/east, /obj/machinery/door/poddoor/shutters/window/preopen{ id = "captivity" }, @@ -1980,7 +1963,7 @@ /turf/open/floor/mineral/plastitanium, /area/ruin/space/has_grav/infested_frigate) "Fs" = ( -/mob/living/simple_animal/bot/firebot{ +/mob/living/basic/bot/firebot{ faction = list("syndicate","xenomorph"); name = "Mr. Squirtsky"; desc = "He seems much happier with the new management!" diff --git a/_maps/RandomRuins/SpaceRuins/interdyne.dmm b/_maps/RandomRuins/SpaceRuins/interdyne.dmm index cba624ef05f22..cf8c7f8c0d408 100644 --- a/_maps/RandomRuins/SpaceRuins/interdyne.dmm +++ b/_maps/RandomRuins/SpaceRuins/interdyne.dmm @@ -852,7 +852,7 @@ /turf/open/floor/mineral/plastitanium, /area/ruin/space/has_grav/interdyne) "JM" = ( -/obj/machinery/computer/arcade{ +/obj/effect/spawner/random/entertainment/arcade{ dir = 1 }, /turf/open/floor/mineral/plastitanium/red, diff --git a/_maps/RandomRuins/SpaceRuins/listeningstation.dmm b/_maps/RandomRuins/SpaceRuins/listeningstation.dmm index ad27c03ab9ad9..c1188e9866360 100644 --- a/_maps/RandomRuins/SpaceRuins/listeningstation.dmm +++ b/_maps/RandomRuins/SpaceRuins/listeningstation.dmm @@ -919,7 +919,7 @@ "WD" = ( /obj/structure/table, /obj/machinery/cell_charger, -/obj/item/stock_parts/cell/high, +/obj/item/stock_parts/power_store/cell/high, /obj/item/stack/cable_coil{ pixel_x = 3; pixel_y = 10 @@ -969,7 +969,7 @@ /obj/item/stack/sheet/mineral/plasma{ amount = 30 }, -/obj/item/stock_parts/cell/high, +/obj/item/stock_parts/power_store/cell/high, /obj/machinery/light/small/directional/east, /obj/structure/closet/crate, /obj/effect/turf_decal/delivery, diff --git a/_maps/RandomRuins/SpaceRuins/oldAIsat.dmm b/_maps/RandomRuins/SpaceRuins/oldAIsat.dmm index 4cd81c550dd77..fbdc62bae7a9a 100644 --- a/_maps/RandomRuins/SpaceRuins/oldAIsat.dmm +++ b/_maps/RandomRuins/SpaceRuins/oldAIsat.dmm @@ -49,7 +49,7 @@ /turf/open/floor/plating/airless, /area/ruin/space/tcommsat_oldaisat) "am" = ( -/obj/item/stock_parts/cell, +/obj/item/stock_parts/power_store/cell, /turf/open/floor/plating/airless, /area/ruin/space/tcommsat_oldaisat) "an" = ( diff --git a/_maps/RandomRuins/SpaceRuins/old_infiltrator.dmm b/_maps/RandomRuins/SpaceRuins/old_infiltrator.dmm index afa11afbc9aa3..4b42f668c3377 100644 --- a/_maps/RandomRuins/SpaceRuins/old_infiltrator.dmm +++ b/_maps/RandomRuins/SpaceRuins/old_infiltrator.dmm @@ -676,11 +676,11 @@ "Ux" = ( /obj/structure/extinguisher_cabinet/directional/west, /obj/structure/table, -/obj/item/stock_parts/cell/high/empty{ +/obj/item/stock_parts/power_store/cell/high/empty{ pixel_y = 4; pixel_x = 5 }, -/obj/item/stock_parts/cell/emproof/empty, +/obj/item/stock_parts/power_store/cell/emproof/empty, /turf/open/floor/mineral/plastitanium/red/airless, /area/ruin/space/unpowered) "UN" = ( diff --git a/_maps/RandomRuins/SpaceRuins/oldstation.dmm b/_maps/RandomRuins/SpaceRuins/oldstation.dmm index 60088fb274daf..2597a3a4a9985 100644 --- a/_maps/RandomRuins/SpaceRuins/oldstation.dmm +++ b/_maps/RandomRuins/SpaceRuins/oldstation.dmm @@ -70,6 +70,7 @@ /obj/item/stack/sheet/plasteel{ amount = 30 }, +/obj/item/stack/sheet/mineral/diamond, /turf/open/floor/iron/dark, /area/ruin/space/ancientstation/delta/ai) "as" = ( @@ -226,7 +227,7 @@ /turf/open/floor/iron, /area/ruin/space/ancientstation/charlie/bridge) "bh" = ( -/obj/machinery/computer/old{ +/obj/machinery/modular_computer/preset/research/away{ dir = 4 }, /obj/structure/window/reinforced/spawner/directional/south, @@ -793,6 +794,15 @@ }, /turf/open/floor/iron, /area/ruin/space/ancientstation/charlie/hydro) +"ds" = ( +/obj/structure/window/reinforced/spawner/directional/west, +/obj/structure/window/reinforced/spawner/directional/north, +/obj/structure/window/reinforced/spawner/directional/south, +/obj/structure/table, +/obj/machinery/door/window/brigdoor/right/directional/east, +/obj/item/computer_disk, +/turf/open/floor/iron/dark, +/area/ruin/space/ancientstation/delta/ai) "dt" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, @@ -961,8 +971,11 @@ /area/ruin/space/ancientstation/charlie/bridge) "ek" = ( /obj/effect/decal/cleanable/dirt, -/obj/structure/reagent_dispensers/fueltank, /obj/effect/turf_decal/tile/yellow/half/contrasted, +/obj/structure/closet/crate/bin, +/obj/effect/spawner/random/trash/garbage, +/obj/effect/spawner/random/trash/garbage, +/obj/effect/spawner/random/trash/garbage, /turf/open/floor/iron, /area/ruin/space/ancientstation/charlie/engie) "el" = ( @@ -1088,6 +1101,10 @@ /obj/effect/turf_decal/tile/yellow/half/contrasted{ dir = 8 }, +/obj/item/chair{ + pixel_y = -8; + pixel_x = 13 + }, /turf/open/floor/iron, /area/ruin/space/ancientstation/charlie/engie) "eL" = ( @@ -1527,7 +1544,6 @@ "gM" = ( /obj/machinery/rnd/production/circuit_imprinter/offstation, /obj/effect/decal/cleanable/dirt, -/obj/item/reagent_containers/dropper, /turf/open/floor/iron/white, /area/ruin/space/ancientstation/delta/rnd) "gP" = ( @@ -1598,13 +1614,13 @@ /obj/structure/rack, /obj/effect/decal/cleanable/dirt, /obj/item/crowbar, -/obj/item/stock_parts/cell/high, /obj/machinery/door/window/right/directional/north{ req_access = list("away_general") }, /obj/item/paper/fluff/ruins/oldstation/apc_note, /obj/effect/turf_decal/tile/yellow/anticorner/contrasted, /obj/item/card/id/away/old/equipment, +/obj/item/stock_parts/power_store/battery/high, /turf/open/floor/iron, /area/ruin/space/ancientstation/charlie/engie) "hh" = ( @@ -1911,6 +1927,7 @@ /obj/item/folder/white, /obj/item/reagent_containers/cup/beaker, /obj/effect/decal/cleanable/dirt, +/obj/item/reagent_containers/dropper, /turf/open/floor/iron, /area/ruin/space/ancientstation/delta/rnd) "ip" = ( @@ -2252,9 +2269,8 @@ "jP" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, -/obj/item/storage/backpack/duffelbag, /obj/structure/closet, -/obj/effect/spawner/random/clothing/backpack, +/obj/item/storage/backpack/duffelbag/sec, /turf/open/floor/iron, /area/ruin/space/ancientstation/charlie/dorms) "jU" = ( @@ -2673,13 +2689,10 @@ /area/ruin/space/ancientstation/charlie/kitchen) "lz" = ( /obj/effect/decal/cleanable/dirt, -/obj/structure/closet/crate/bin, /obj/effect/turf_decal/tile/yellow/half/contrasted{ dir = 1 }, -/obj/effect/spawner/random/trash/garbage, -/obj/effect/spawner/random/trash/garbage, -/obj/effect/spawner/random/trash/garbage, +/obj/machinery/computer/apc_control/away, /turf/open/floor/iron, /area/ruin/space/ancientstation/charlie/engie) "lB" = ( @@ -2899,9 +2912,9 @@ "mz" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, -/obj/item/storage/backpack/old, /obj/structure/closet, -/obj/effect/spawner/random/clothing/backpack, +/obj/item/storage/backpack/industrial, +/obj/item/storage/backpack/messenger/eng, /turf/open/floor/iron, /area/ruin/space/ancientstation/charlie/dorms) "mA" = ( @@ -2939,7 +2952,7 @@ /obj/machinery/shower/directional/west{ has_water_reclaimer = 0 }, -/turf/open/floor/vault, +/turf/open/floor/pod/dark, /area/ruin/space/ancientstation/delta/biolab) "mG" = ( /obj/effect/decal/cleanable/dirt, @@ -3116,16 +3129,30 @@ /turf/open/floor/iron, /area/ruin/space/ancientstation/beta/hall) "ng" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/pipedispenser/disposal/transit_tube, /obj/effect/turf_decal/stripes/line{ dir = 1 }, +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 8 + }, +/obj/structure/fluff/broken_canister_frame, +/obj/effect/decal/cleanable/plasma, /turf/open/floor/iron, /area/ruin/space/ancientstation/beta/atmos) "nk" = ( /turf/closed/wall, /area/ruin/space/ancientstation/charlie/dorms) +"nm" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/visible/layer2, +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 8 + }, +/obj/item/tank/internals/oxygen{ + pixel_x = 1 + }, +/turf/open/floor/iron, +/area/ruin/space/ancientstation/beta/atmos) "np" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/light/directional/north, @@ -3193,6 +3220,7 @@ /obj/effect/turf_decal/tile/blue/anticorner/contrasted{ dir = 8 }, +/obj/item/tank/internals/anesthetic/pure, /turf/open/floor/iron/airless, /area/ruin/space/ancientstation/beta/medbay) "nD" = ( @@ -3404,6 +3432,11 @@ /obj/effect/decal/cleanable/xenoblood/xgibs/core, /turf/open/floor/iron/white, /area/ruin/space/ancientstation/delta/rnd) +"oK" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/pipedispenser, +/turf/open/floor/iron/airless, +/area/ruin/space/ancientstation/beta/hall) "oL" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, @@ -3535,9 +3568,7 @@ /turf/open/floor/iron, /area/ruin/space/ancientstation/beta/atmos) "pv" = ( -/obj/structure/window/reinforced/spawner/directional/north{ - layer = 2.9 - }, +/obj/structure/window/reinforced/spawner/directional/north, /turf/open/floor/engine/n2, /area/ruin/space/ancientstation/beta/atmos) "pD" = ( @@ -3624,7 +3655,6 @@ /turf/open/floor/iron, /area/ruin/space/ancientstation/beta/mining) "qk" = ( -/obj/machinery/pipedispenser, /obj/effect/turf_decal/stripes/line{ dir = 4 }, @@ -3866,10 +3896,9 @@ /area/ruin/space/ancientstation/charlie/hall) "se" = ( /obj/effect/decal/cleanable/dirt, -/obj/structure/window/reinforced/spawner/directional/east{ - layer = 2.9 - }, +/obj/structure/window/reinforced/spawner/directional/east, /obj/effect/turf_decal/tile/yellow/half/contrasted, +/obj/structure/reagent_dispensers/fueltank, /turf/open/floor/iron, /area/ruin/space/ancientstation/charlie/engie) "si" = ( @@ -4208,9 +4237,7 @@ /area/ruin/space/ancientstation/beta/hall) "uC" = ( /obj/structure/window/reinforced/spawner/directional/west, -/obj/structure/window/reinforced/spawner/directional/north{ - layer = 2.9 - }, +/obj/structure/window/reinforced/spawner/directional/north, /obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored{ dir = 8; chamber_id = "beta-n2" @@ -4419,7 +4446,7 @@ /obj/structure/closet/crate/secure/weapon{ req_access = list("away_sec") }, -/obj/item/knife/combat, +/obj/item/spess_knife, /obj/item/clothing/suit/armor/vest/old, /obj/item/gun/ballistic/rifle/boltaction, /obj/item/ammo_box/strilka310, @@ -5061,7 +5088,7 @@ pixel_x = -3; pixel_y = 5 }, -/obj/item/stock_parts/cell/high, +/obj/item/stock_parts/power_store/cell/high, /obj/effect/turf_decal/tile/yellow/half/contrasted{ dir = 1 }, @@ -5104,9 +5131,7 @@ "Bq" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/table, -/obj/item/reagent_containers/condiment/enzyme{ - layer = 5 - }, +/obj/item/reagent_containers/condiment/enzyme, /turf/open/floor/iron/cafeteria, /area/ruin/space/ancientstation/charlie/kitchen) "Bs" = ( @@ -5377,6 +5402,14 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating/airless, /area/ruin/space/ancientstation/beta/supermatter) +"DA" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/structure/closet, +/obj/item/storage/backpack/science, +/obj/item/storage/backpack/messenger/science, +/turf/open/floor/iron, +/area/ruin/space/ancientstation/charlie/dorms) "DB" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/cobweb, @@ -5391,6 +5424,7 @@ dir = 1 }, /obj/machinery/light/small/directional/south, +/obj/machinery/atmospherics/components/binary/tank_compressor, /turf/open/floor/iron, /area/ruin/space/ancientstation/beta/atmos) "DI" = ( @@ -5723,9 +5757,9 @@ /area/ruin/space/ancientstation/charlie/hall) "Gb" = ( /obj/effect/decal/cleanable/glass, -/obj/item/stack/rods, /obj/effect/mapping_helpers/broken_floor, /obj/effect/turf_decal/stripes/line, +/obj/structure/tank_dispenser/plasma, /turf/open/floor/iron, /area/ruin/space/ancientstation/beta/atmos) "Gd" = ( @@ -5809,10 +5843,13 @@ /turf/open/floor/iron/cafeteria, /area/ruin/space/ancientstation/charlie/kitchen) "GP" = ( -/obj/machinery/pipedispenser/disposal, /obj/effect/turf_decal/stripes/corner{ dir = 4 }, +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/ruin/space/ancientstation/beta/atmos) "GX" = ( @@ -6079,11 +6116,11 @@ "IU" = ( /obj/structure/closet/crate/engineering, /obj/item/circuitboard/machine/smes, -/obj/item/stock_parts/cell/high/empty, -/obj/item/stock_parts/cell/high/empty, -/obj/item/stock_parts/cell/high/empty, -/obj/item/stock_parts/cell/high/empty, -/obj/item/stock_parts/cell/high/empty, +/obj/item/stock_parts/power_store/cell/high/empty, +/obj/item/stock_parts/power_store/cell/high/empty, +/obj/item/stock_parts/power_store/cell/high/empty, +/obj/item/stock_parts/power_store/cell/high/empty, +/obj/item/stock_parts/power_store/cell/high/empty, /obj/item/stock_parts/capacitor, /obj/effect/decal/cleanable/dirt, /obj/item/circuitboard/machine/thermomachine, @@ -8197,6 +8234,14 @@ dir = 1 }, /obj/effect/decal/cleanable/dirt, +/obj/item/tank/internals/oxygen{ + pixel_y = -8; + pixel_x = 8 + }, +/obj/item/tank/internals/oxygen{ + pixel_x = -4; + pixel_y = 4 + }, /turf/open/floor/iron, /area/ruin/space/ancientstation/beta/atmos) "XD" = ( @@ -9963,7 +10008,7 @@ Uu Yp Gb XB -Ln +nm kK Ln ny @@ -10159,7 +10204,7 @@ gJ Ax Ax kQ -Cj +oK Sf Cj VF @@ -12209,7 +12254,7 @@ wb bR aG nk -mz +DA gZ kN Mt @@ -14227,7 +14272,7 @@ ag aM NS bh -cz +ds cz cz ad diff --git a/_maps/RandomRuins/SpaceRuins/oldteleporter.dmm b/_maps/RandomRuins/SpaceRuins/oldteleporter.dmm index fc856f6858d23..f1b71baa31478 100644 --- a/_maps/RandomRuins/SpaceRuins/oldteleporter.dmm +++ b/_maps/RandomRuins/SpaceRuins/oldteleporter.dmm @@ -44,7 +44,7 @@ /area/ruin/space/oldteleporter) "l" = ( /obj/structure/table, -/obj/item/stock_parts/cell/high, +/obj/item/stock_parts/power_store/cell/high, /turf/open/floor/iron/airless, /area/ruin/space/oldteleporter) "n" = ( diff --git a/_maps/RandomRuins/SpaceRuins/russian_derelict.dmm b/_maps/RandomRuins/SpaceRuins/russian_derelict.dmm index 45eee5cbe8b46..58bad24369050 100644 --- a/_maps/RandomRuins/SpaceRuins/russian_derelict.dmm +++ b/_maps/RandomRuins/SpaceRuins/russian_derelict.dmm @@ -300,7 +300,7 @@ /obj/structure/rack, /obj/item/stack/cable_coil/five, /obj/item/screwdriver, -/obj/item/stock_parts/cell/high, +/obj/item/stock_parts/power_store/cell/high, /turf/open/floor/iron, /area/ruin/space/ks13/engineering/sb_bow_solars_control) "dx" = ( @@ -898,7 +898,7 @@ /area/ruin/space/ks13/service/chapel) "lW" = ( /obj/structure/rack, -/obj/item/stock_parts/cell/lead, +/obj/item/stock_parts/power_store/cell/lead, /obj/effect/mapping_helpers/broken_floor, /obj/machinery/power/apc/auto_name/directional/south, /obj/effect/mapping_helpers/apc/no_charge, @@ -3880,23 +3880,23 @@ /area/ruin/space/ks13/ai/corridor) "DL" = ( /obj/structure/table, -/obj/item/stock_parts/cell/high{ +/obj/item/stock_parts/power_store/cell/high{ pixel_x = 7; pixel_y = 7 }, -/obj/item/stock_parts/cell/high{ +/obj/item/stock_parts/power_store/cell/high{ pixel_x = 7; pixel_y = 4 }, -/obj/item/stock_parts/cell/high{ +/obj/item/stock_parts/power_store/cell/high{ pixel_x = 7; pixel_y = 1 }, -/obj/item/stock_parts/cell/high{ +/obj/item/stock_parts/power_store/cell/high{ pixel_x = -7; pixel_y = 7 }, -/obj/item/stock_parts/cell/high{ +/obj/item/stock_parts/power_store/cell/high{ pixel_x = -7; pixel_y = 4 }, @@ -5546,7 +5546,7 @@ /area/ruin/space/ks13/security/sec) "MM" = ( /obj/structure/table, -/obj/item/stock_parts/cell, +/obj/item/stock_parts/power_store/cell, /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/airless, /area/ruin/space/ks13/dorms) @@ -6410,7 +6410,7 @@ pixel_x = -7; pixel_y = 9 }, -/obj/item/stock_parts/cell/high, +/obj/item/stock_parts/power_store/cell/high, /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/airless, /area/ruin/space/ks13/engineering/tech_storage) @@ -6745,15 +6745,15 @@ /area/ruin/space/ks13/hallway/aft) "SO" = ( /obj/structure/rack, -/obj/item/stock_parts/cell/high{ +/obj/item/stock_parts/power_store/cell/high{ pixel_x = 7; pixel_y = 7 }, -/obj/item/stock_parts/cell/high{ +/obj/item/stock_parts/power_store/cell/high{ pixel_x = 7; pixel_y = 4 }, -/obj/item/stock_parts/cell/high{ +/obj/item/stock_parts/power_store/cell/high{ pixel_x = 7; pixel_y = 1 }, diff --git a/_maps/RandomRuins/SpaceRuins/spacehotel.dmm b/_maps/RandomRuins/SpaceRuins/spacehotel.dmm index 3a2d28ba1ee8f..eec1e5a9671a7 100644 --- a/_maps/RandomRuins/SpaceRuins/spacehotel.dmm +++ b/_maps/RandomRuins/SpaceRuins/spacehotel.dmm @@ -847,9 +847,7 @@ pixel_x = 6; pixel_y = 6 }, -/obj/item/reagent_containers/condiment/enzyme{ - layer = 5 - }, +/obj/item/reagent_containers/condiment/enzyme, /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, diff --git a/_maps/RandomRuins/SpaceRuins/the_faceoff.dmm b/_maps/RandomRuins/SpaceRuins/the_faceoff.dmm index 08175777752e6..b31a11cba31ca 100644 --- a/_maps/RandomRuins/SpaceRuins/the_faceoff.dmm +++ b/_maps/RandomRuins/SpaceRuins/the_faceoff.dmm @@ -347,7 +347,7 @@ /area/ruin/space) "mn" = ( /obj/structure/table/reinforced/plastitaniumglass, -/obj/item/clothing/mask/cigarette/syndicate, +/obj/item/cigarette/syndicate, /obj/item/storage/fancy/cigarettes/cigpack_syndicate{ pixel_y = 7 }, @@ -622,7 +622,7 @@ /area/ruin/space) "yd" = ( /obj/structure/table/reinforced/plastitaniumglass, -/obj/item/clothing/mask/cigarette/syndicate, +/obj/item/cigarette/syndicate, /obj/effect/spawner/random/entertainment/lighter, /turf/open/floor/mineral/plastitanium/airless, /area/ruin/space) @@ -701,7 +701,7 @@ /area/ruin/space) "Cz" = ( /obj/structure/table/reinforced/plastitaniumglass, -/obj/item/clothing/mask/cigarette/syndicate, +/obj/item/cigarette/syndicate, /obj/effect/spawner/random/entertainment/lighter, /turf/open/floor/iron/dark/airless, /area/ruin/space) diff --git a/_maps/RandomRuins/SpaceRuins/the_outlet.dmm b/_maps/RandomRuins/SpaceRuins/the_outlet.dmm index b2b8fd17fbed6..f31929b70a4e2 100644 --- a/_maps/RandomRuins/SpaceRuins/the_outlet.dmm +++ b/_maps/RandomRuins/SpaceRuins/the_outlet.dmm @@ -87,12 +87,9 @@ /area/ruin/space/has_grav/the_outlet/researchrooms) "cL" = ( /obj/effect/rune/apocalypse{ - req_cultists = 999; - layer = 2 - }, -/obj/structure/destructible/cult/pants_altar{ - layer = 3 + req_cultists = 999 }, +/obj/structure/destructible/cult/pants_altar, /turf/open/floor/cult, /area/ruin/space/has_grav/the_outlet/cultinfluence) "cZ" = ( @@ -564,7 +561,7 @@ /obj/item/clothing/shoes/cowboy, /obj/item/clothing/under/costume/dutch, /obj/item/clothing/suit/costume/poncho, -/obj/item/clothing/mask/cigarette/cigar, +/obj/item/cigarette/cigar, /obj/structure/window/reinforced/spawner/directional/south, /obj/structure/window/reinforced/spawner/directional/east, /obj/structure/window/reinforced/spawner/directional/west, diff --git a/_maps/RandomRuins/SpaceRuins/transit_booth.dmm b/_maps/RandomRuins/SpaceRuins/transit_booth.dmm index eaff9f2f073b0..52dbf8149f8e2 100644 --- a/_maps/RandomRuins/SpaceRuins/transit_booth.dmm +++ b/_maps/RandomRuins/SpaceRuins/transit_booth.dmm @@ -16,16 +16,6 @@ /obj/structure/sign/warning/vacuum/external/directional/north, /turf/open/floor/plating, /area/ruin/space/has_grav/transit_booth) -"ad" = ( -/obj/effect/turf_decal/siding/dark{ - dir = 4 - }, -/obj/machinery/light/directional/east, -/obj/effect/turf_decal/siding/dark{ - dir = 8 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/transit_booth) "ae" = ( /obj/machinery/vending/coffee, /turf/open/floor/iron/dark, @@ -93,23 +83,6 @@ /obj/machinery/light/small/directional/west, /turf/open/floor/iron/dark, /area/ruin/space/has_grav/transit_booth) -"an" = ( -/obj/structure/chair/comfy/black{ - dir = 8 - }, -/obj/structure/sign/poster/official/cohiba_robusto_ad/directional/north, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/transit_booth) -"ao" = ( -/obj/effect/turf_decal/siding/dark{ - dir = 8 - }, -/obj/machinery/light/directional/west, -/obj/effect/turf_decal/siding/dark{ - dir = 4 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/transit_booth) "ap" = ( /obj/machinery/door/airlock/external{ name = "Transit Booth Airlock" @@ -262,9 +235,7 @@ /turf/open/floor/iron, /area/ruin/space/has_grav/transit_booth) "aF" = ( -/obj/structure/window/reinforced/spawner/directional/south{ - layer = 2.9 - }, +/obj/structure/window/reinforced/spawner/directional/south, /obj/structure/rack, /obj/item/reagent_containers/cup/glass/bottle/absinthe/premium{ pixel_x = 6 @@ -280,9 +251,7 @@ /turf/open/floor/iron/dark, /area/ruin/space/has_grav/transit_booth) "aG" = ( -/obj/structure/window/reinforced/spawner/directional/south{ - layer = 2.9 - }, +/obj/structure/window/reinforced/spawner/directional/south, /obj/machinery/mass_driver{ dir = 1; id = "north" @@ -325,14 +294,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/ruin/space/has_grav/transit_booth) -"aJ" = ( -/obj/structure/table, -/obj/item/reagent_containers/cup/glass/coffee{ - pixel_x = 6; - pixel_y = 3 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/transit_booth) "aK" = ( /obj/machinery/door/poddoor{ id = "south" @@ -342,17 +303,6 @@ /obj/structure/table/reinforced, /turf/open/floor/plating, /area/ruin/space/has_grav/transit_booth) -"aL" = ( -/obj/structure/table, -/obj/item/storage/fancy/cigarettes/cigars{ - pixel_y = 11; - pixel_x = 3 - }, -/obj/item/lighter{ - pixel_x = -8 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/transit_booth) "aM" = ( /obj/machinery/door/poddoor{ id = "north" @@ -442,9 +392,7 @@ /turf/open/floor/iron, /area/ruin/space/has_grav/transit_booth) "aV" = ( -/obj/structure/window/reinforced/spawner/directional/south{ - layer = 2.9 - }, +/obj/structure/window/reinforced/spawner/directional/south, /obj/structure/rack, /obj/item/book/random{ pixel_x = -5; @@ -461,9 +409,7 @@ /turf/open/floor/iron/dark, /area/ruin/space/has_grav/transit_booth) "aW" = ( -/obj/structure/window/reinforced/spawner/directional/west{ - layer = 2.9 - }, +/obj/structure/window/reinforced/spawner/directional/west, /obj/machinery/mass_driver{ dir = 4; id = "east" @@ -486,13 +432,6 @@ }, /turf/open/floor/iron/dark, /area/ruin/space/has_grav/transit_booth) -"aY" = ( -/obj/structure/chair/comfy/black{ - dir = 4 - }, -/obj/structure/sign/poster/official/high_class_martini/directional/south, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/transit_booth) "aZ" = ( /obj/effect/turf_decal/siding/dark{ dir = 5 diff --git a/_maps/RandomRuins/SpaceRuins/travelers_rest.dmm b/_maps/RandomRuins/SpaceRuins/travelers_rest.dmm index 3837f2453845d..af55da5cb4f37 100644 --- a/_maps/RandomRuins/SpaceRuins/travelers_rest.dmm +++ b/_maps/RandomRuins/SpaceRuins/travelers_rest.dmm @@ -69,9 +69,7 @@ /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 9 }, -/obj/machinery/chem_dispenser{ - layer = 2.7 - }, +/obj/machinery/chem_dispenser, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/ruin/space/has_grav/travelers_rest) @@ -437,7 +435,7 @@ /obj/item/storage/box/lights/tubes, /obj/item/clothing/glasses/night, /obj/item/stock_parts/capacitor/super, -/obj/item/stock_parts/cell/high, +/obj/item/stock_parts/power_store/cell/high, /obj/effect/turf_decal/trimline/brown/filled/line{ dir = 6 }, diff --git a/_maps/RandomRuins/SpaceRuins/turretedoutpost.dmm b/_maps/RandomRuins/SpaceRuins/turretedoutpost.dmm index 4be262c6fd052..dce2db8cffc9f 100644 --- a/_maps/RandomRuins/SpaceRuins/turretedoutpost.dmm +++ b/_maps/RandomRuins/SpaceRuins/turretedoutpost.dmm @@ -15,7 +15,7 @@ /area/ruin/space/has_grav/turretedoutpost) "ae" = ( /obj/structure/table/reinforced, -/obj/item/stock_parts/cell/hyper, +/obj/item/stock_parts/power_store/cell/hyper, /turf/open/floor/iron, /area/ruin/space/has_grav/turretedoutpost) "af" = ( diff --git a/_maps/RandomRuins/SpaceRuins/waystation.dmm b/_maps/RandomRuins/SpaceRuins/waystation.dmm index e5262d324259e..38f8fcbac8cdd 100644 --- a/_maps/RandomRuins/SpaceRuins/waystation.dmm +++ b/_maps/RandomRuins/SpaceRuins/waystation.dmm @@ -1105,13 +1105,11 @@ "rF" = ( /obj/machinery/button/door/directional/east{ id = "Blastdoor_load"; - layer = 4; name = "Loading Doors"; pixel_y = -6 }, /obj/machinery/button/door/directional/east{ id = "Blastdoor_unload"; - layer = 4; name = "Loading Doors"; pixel_y = 6 }, @@ -1505,7 +1503,7 @@ /area/ruin/space/has_grav/waystation/cargobay) "zd" = ( /obj/structure/table, -/obj/item/stock_parts/cell/high, +/obj/item/stock_parts/power_store/cell/high, /obj/machinery/cell_charger, /turf/open/floor/plating, /area/ruin/space/has_grav/waystation/power) @@ -2241,9 +2239,7 @@ /area/ruin/space/has_grav/waystation/securestorage) "NK" = ( /obj/effect/turf_decal/bot, -/obj/machinery/atmospherics/components/tank/air{ - piping_layer = 4 - }, +/obj/machinery/atmospherics/components/tank/air, /turf/open/floor/plating, /area/ruin/space/has_grav/waystation) "NT" = ( diff --git a/_maps/RandomZLevels/SnowCabin.dmm b/_maps/RandomZLevels/SnowCabin.dmm index 7ed902651a526..3b5c32345c0e3 100644 --- a/_maps/RandomZLevels/SnowCabin.dmm +++ b/_maps/RandomZLevels/SnowCabin.dmm @@ -1147,7 +1147,7 @@ /turf/open/indestructible/binary{ density = 1; desc = "No, I am not going through this."; - icon = 'icons/misc/beach.dmi'; + icon = 'icons/obj/fluff/beach.dmi'; icon_state = "water"; name = "dirty water" }, @@ -2052,7 +2052,7 @@ /turf/open/floor/wood/freezing, /area/awaymission/cabin/lumbermill) "jV" = ( -/mob/living/simple_animal/bot/firebot, +/mob/living/basic/bot/firebot, /turf/open/floor/wood/freezing, /area/awaymission/cabin/lumbermill) "jW" = ( @@ -2771,14 +2771,12 @@ /obj/item/claymore/weak/ceremonial{ desc = "Brought to you by the guys in charge of making replica katana toys!"; force = 1; - layer = 3.01; name = "replica claymore"; pixel_x = 5; pixel_y = 8; throwforce = 2 }, /obj/item/shield/roman/fake{ - layer = 3.01; pixel_x = -7 }, /obj/effect/light_emitter{ @@ -3379,7 +3377,6 @@ /obj/item/gun/magic/wand{ desc = "It's just a fancy staff so that holy clerics and priests look cool. What? You didn't think someone would leave a REAL magic artifact with a snowman out in the cold, did you?"; icon_state = "revivewand"; - layer = 3.01; name = "holy staff"; pixel_y = -2 }, @@ -3392,7 +3389,8 @@ /area/awaymission/cabin/caves) "wq" = ( /obj/machinery/recycler/lumbermill{ - desc = "Is better at killing people than cutting logs, for some reason." + desc = "Is better at killing people than cutting logs, for some reason."; + dir = 8 }, /obj/machinery/conveyor{ dir = 4; @@ -4416,9 +4414,7 @@ pixel_x = -1; pixel_y = 13 }, -/obj/item/staff{ - layer = 3.01 - }, +/obj/item/staff, /obj/effect/light_emitter{ set_cap = 3; set_luminosity = 6; diff --git a/_maps/RandomZLevels/TheBeach.dmm b/_maps/RandomZLevels/TheBeach.dmm index 22dab6907a688..c7a097a02ad17 100644 --- a/_maps/RandomZLevels/TheBeach.dmm +++ b/_maps/RandomZLevels/TheBeach.dmm @@ -346,7 +346,7 @@ /area/awaymission/beach) "eT" = ( /obj/structure/table/wood, -/obj/item/clothing/mask/cigarette/cigar{ +/obj/item/cigarette/cigar{ pixel_y = 16; pixel_x = -2 }, @@ -1919,7 +1919,7 @@ pixel_y = 12; pixel_x = 3 }, -/obj/item/stock_parts/cell/emproof{ +/obj/item/stock_parts/power_store/cell/emproof{ pixel_x = -4; pixel_y = 6 }, @@ -2023,7 +2023,6 @@ "Aa" = ( /obj/structure/table/wood, /obj/item/reagent_containers/condiment/enzyme{ - layer = 5; pixel_x = 9; pixel_y = 5 }, @@ -2510,9 +2509,7 @@ /area/awaymission/beach) "Ft" = ( /obj/structure/window/reinforced/spawner/directional/east, -/obj/structure/window/reinforced/spawner/directional/north{ - layer = 2.9 - }, +/obj/structure/window/reinforced/spawner/directional/north, /obj/structure/chair/stool/directional/south, /obj/item/clothing/glasses/sunglasses{ pixel_y = -2; diff --git a/_maps/RandomZLevels/caves.dmm b/_maps/RandomZLevels/caves.dmm index e54d1b87cbaf3..c64aa99d1aab6 100644 --- a/_maps/RandomZLevels/caves.dmm +++ b/_maps/RandomZLevels/caves.dmm @@ -505,7 +505,7 @@ "db" = ( /obj/structure/table, /obj/machinery/cell_charger, -/obj/item/stock_parts/cell/crap, +/obj/item/stock_parts/power_store/cell/crap, /turf/open/floor/iron{ initial_gas_mix = "n2=23;o2=14;TEMP=2.7" }, diff --git a/_maps/RandomZLevels/moonoutpost19.dmm b/_maps/RandomZLevels/moonoutpost19.dmm index 7835def0dc251..3a4e4c8affed6 100644 --- a/_maps/RandomZLevels/moonoutpost19.dmm +++ b/_maps/RandomZLevels/moonoutpost19.dmm @@ -79,6 +79,16 @@ dir = 5 }, /area/awaymission/moonoutpost19/research) +"aq" = ( +/obj/effect/turf_decal/siding/purple, +/obj/effect/turf_decal/tile/dark/opposingcorners{ + dir = 1 + }, +/obj/machinery/computer/security/telescreen/moon_outpost/xenobio/directional/south, +/turf/open/floor/iron/cafeteria{ + dir = 5 + }, +/area/awaymission/moonoutpost19/research) "as" = ( /obj/item/stack/rods, /obj/structure/cable, @@ -102,7 +112,6 @@ "aJ" = ( /obj/machinery/door/poddoor{ id = "AwayRD"; - layer = 2.9; name = "Privacy Shutter" }, /obj/effect/spawner/structure/window/reinforced, @@ -305,6 +314,14 @@ /obj/effect/turf_decal/stripes/red/end, /turf/open/floor/iron/half, /area/awaymission/moonoutpost19/syndicate) +"cp" = ( +/obj/structure/table/reinforced, +/obj/structure/alien/weeds, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/iron, +/area/awaymission/moonoutpost19/research) "cq" = ( /obj/machinery/vending/medical{ req_access = "201" @@ -630,12 +647,16 @@ /obj/machinery/vending/coffee, /turf/open/floor/iron/dark, /area/awaymission/moonoutpost19/research) -"ex" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w{ - dir = 4 +"ez" = ( +/obj/structure/table, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/cell_charger, +/obj/item/stock_parts/power_store/cell/high, +/obj/item/radio/off{ + pixel_x = 8; + pixel_y = 17 }, -/obj/structure/cable, -/turf/open/floor/iron/white, +/turf/open/floor/plating, /area/awaymission/moonoutpost19/research) "eA" = ( /obj/structure/flora/lunar_plant, @@ -907,7 +928,6 @@ /obj/machinery/door/poddoor{ desc = "A heavy duty blast door that opens mechanically. This one has been applied with an acid-proof coating."; id = "Awaybiohazard"; - layer = 2.9; name = "Acid-Proof Biohazard Containment Door" }, /obj/effect/turf_decal/delivery, @@ -2211,7 +2231,6 @@ /obj/machinery/door/poddoor{ desc = "A heavy duty blast door that opens mechanically. This one has been applied with an acid-proof coating."; id = "Awaybiohazard"; - layer = 2.9; name = "Acid-Proof Biohazard Containment Door" }, /obj/effect/spawner/structure/window/reinforced, @@ -2355,9 +2374,7 @@ /area/awaymission/moonoutpost19/syndicate) "pF" = ( /obj/machinery/light/small/directional/north, -/obj/structure/window/reinforced/spawner/directional/east{ - layer = 2.9 - }, +/obj/structure/window/reinforced/spawner/directional/east, /obj/structure/table, /obj/structure/bedsheetbin, /obj/item/clothing/neck/tie/black, @@ -3042,13 +3059,6 @@ initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" }, /area/awaymission/moonoutpost19/mines) -"ty" = ( -/obj/structure/table, -/obj/machinery/cell_charger, -/obj/item/stock_parts/cell/high, -/obj/effect/turf_decal/siding/thinplating_new/light, -/turf/open/floor/iron, -/area/awaymission/moonoutpost19/arrivals) "tA" = ( /obj/structure/urinal/directional/north, /obj/machinery/duct, @@ -3247,6 +3257,13 @@ /obj/item/clothing/under/misc/assistantformal, /turf/open/floor/carpet/red, /area/awaymission/moonoutpost19/arrivals) +"uN" = ( +/obj/structure/table, +/obj/machinery/cell_charger, +/obj/item/stock_parts/power_store/cell/high, +/obj/effect/turf_decal/siding/thinplating_new/light, +/turf/open/floor/iron, +/area/awaymission/moonoutpost19/arrivals) "uR" = ( /obj/structure/table, /obj/item/storage/toolbox/mechanical{ @@ -3433,8 +3450,7 @@ /obj/structure/bed, /obj/item/bedsheet, /obj/effect/decal/remains/human{ - desc = "They look like human remains. The skeleton is laid out on its side and there seems to have been no sign of struggle."; - layer = 4.1 + desc = "They look like human remains. The skeleton is laid out on its side and there seems to have been no sign of struggle." }, /obj/machinery/button/door/directional/west{ id = "awaydorm3"; @@ -3469,6 +3485,13 @@ initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" }, /area/awaymission/moonoutpost19/mines) +"wc" = ( +/obj/structure/table, +/obj/item/stock_parts/power_store/cell/crap/empty{ + pixel_x = -4 + }, +/turf/open/floor/pod/dark, +/area/awaymission/moonoutpost19/tent) "wh" = ( /obj/structure/alien/weeds/node, /obj/structure/alien/resin/wall, @@ -3544,24 +3567,6 @@ /obj/item/stack/spacecash/c50, /turf/open/floor/wood, /area/awaymission/moonoutpost19/syndicate) -"wU" = ( -/obj/structure/table/reinforced, -/obj/structure/window/reinforced/spawner/directional/north, -/obj/machinery/computer/security/telescreen{ - desc = "Used for monitoring the research division and the labs within."; - name = "research monitor"; - network = list("mo19x","mo19r") - }, -/obj/effect/turf_decal/siding/purple/corner{ - dir = 4 - }, -/obj/effect/turf_decal/tile/dark/opposingcorners{ - dir = 1 - }, -/turf/open/floor/iron/cafeteria{ - dir = 5 - }, -/area/awaymission/moonoutpost19/research) "wV" = ( /obj/structure/closet/emcloset, /obj/item/shovel, @@ -3762,7 +3767,6 @@ "yx" = ( /obj/machinery/conveyor_switch/oneway{ id = "awaysyndie"; - layer = 3.1; name = "mining conveyor" }, /obj/effect/turf_decal/stripes/line{ @@ -4061,20 +4065,6 @@ }, /turf/open/floor/iron, /area/awaymission/moonoutpost19/arrivals) -"AI" = ( -/obj/structure/table/reinforced, -/obj/structure/alien/weeds, -/obj/machinery/computer/security/telescreen{ - desc = "Used for watching the contents of the xenobiology containment pen."; - dir = 8; - name = "xenobiology monitor"; - network = list("mo19x") - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/turf/open/floor/iron, -/area/awaymission/moonoutpost19/research) "AO" = ( /obj/structure/alien/weeds, /obj/effect/decal/cleanable/blood/gibs, @@ -4125,7 +4115,6 @@ dir = 1 }, /obj/item/crowbar{ - layer = 2.9; pixel_x = 7; pixel_y = -13 }, @@ -4152,6 +4141,14 @@ /obj/machinery/duct, /turf/open/floor/iron, /area/awaymission/moonoutpost19/arrivals) +"Bg" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/computer/security/telescreen/moon_outpost/xenobio/directional/east, +/turf/open/floor/iron/white, +/area/awaymission/moonoutpost19/research) "Bk" = ( /obj/machinery/door/airlock/maintenance, /obj/machinery/duct, @@ -4746,7 +4743,6 @@ /area/awaymission/moonoutpost19/research) "Fw" = ( /obj/item/pickaxe{ - layer = 2.9; pixel_x = -12; pixel_y = 6 }, @@ -5424,18 +5420,6 @@ /obj/structure/cable, /turf/open/floor/plating, /area/awaymission/moonoutpost19/research) -"JO" = ( -/obj/structure/table, -/obj/machinery/cell_charger, -/obj/machinery/light/small/directional/west, -/obj/item/stock_parts/cell/high, -/obj/item/paper/fluff/awaymissions/moonoutpost19/engineering, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/structure/cable, -/turf/open/floor/plating, -/area/awaymission/moonoutpost19/syndicate) "JQ" = ( /turf/open/floor/iron{ initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" @@ -5459,6 +5443,18 @@ }, /turf/open/floor/iron/white, /area/awaymission/moonoutpost19/research) +"JZ" = ( +/obj/structure/table, +/obj/machinery/cell_charger, +/obj/machinery/light/small/directional/west, +/obj/item/stock_parts/power_store/cell/high, +/obj/item/paper/fluff/awaymissions/moonoutpost19/engineering, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/cable, +/turf/open/floor/plating, +/area/awaymission/moonoutpost19/syndicate) "Kb" = ( /obj/structure/alien/weeds, /obj/structure/bed/nest, @@ -5724,17 +5720,6 @@ dir = 5 }, /area/awaymission/moonoutpost19/arrivals) -"MD" = ( -/obj/structure/table, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/cell_charger, -/obj/item/stock_parts/cell/high, -/obj/item/radio/off{ - pixel_x = 8; - pixel_y = 17 - }, -/turf/open/floor/plating, -/area/awaymission/moonoutpost19/research) "MF" = ( /obj/structure/flora/rock/style_random{ pixel_y = -2 @@ -5773,13 +5758,6 @@ }, /turf/open/floor/iron, /area/awaymission/moonoutpost19/arrivals) -"MW" = ( -/obj/structure/table, -/obj/item/stock_parts/cell/crap/empty{ - pixel_x = -4 - }, -/turf/open/floor/pod/dark, -/area/awaymission/moonoutpost19/tent) "Nf" = ( /obj/effect/spawner/structure/window, /turf/open/floor/plating, @@ -5963,6 +5941,19 @@ initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" }, /area/awaymission/moonoutpost19/syndicate) +"NY" = ( +/obj/structure/table/reinforced, +/obj/structure/window/reinforced/spawner/directional/north, +/obj/effect/turf_decal/siding/purple/corner{ + dir = 4 + }, +/obj/effect/turf_decal/tile/dark/opposingcorners{ + dir = 1 + }, +/turf/open/floor/iron/cafeteria{ + dir = 5 + }, +/area/awaymission/moonoutpost19/research) "Oa" = ( /obj/structure/sink{ dir = 4; @@ -6029,7 +6020,7 @@ /obj/structure/table/wood, /obj/item/lighter, /obj/machinery/newscaster/directional/east, -/obj/item/clothing/mask/cigarette/cigar, +/obj/item/cigarette/cigar, /turf/open/floor/carpet/orange, /area/awaymission/moonoutpost19/arrivals) "Ov" = ( @@ -6523,17 +6514,6 @@ }, /turf/open/floor/iron/dark, /area/awaymission/moonoutpost19/arrivals) -"Ro" = ( -/obj/structure/table, -/obj/item/stock_parts/cell/crap/empty, -/obj/item/stock_parts/cell/crap/empty, -/obj/item/stock_parts/cell/crap/empty{ - pixel_x = -16; - pixel_y = 4 - }, -/obj/machinery/cell_charger, -/turf/open/floor/pod/dark, -/area/awaymission/moonoutpost19/tent) "Rq" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -7205,6 +7185,17 @@ initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" }, /area/awaymission/moonoutpost19/mines) +"VY" = ( +/obj/structure/table, +/obj/item/stock_parts/power_store/cell/crap/empty, +/obj/item/stock_parts/power_store/cell/crap/empty, +/obj/item/stock_parts/power_store/cell/crap/empty{ + pixel_x = -16; + pixel_y = 4 + }, +/obj/machinery/cell_charger, +/turf/open/floor/pod/dark, +/area/awaymission/moonoutpost19/tent) "Wg" = ( /obj/structure/flora/rock/style_random{ pixel_y = -2 @@ -7709,15 +7700,6 @@ initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" }, /area/awaymission/moonoutpost19/mines) -"Zw" = ( -/obj/effect/turf_decal/siding/purple, -/obj/effect/turf_decal/tile/dark/opposingcorners{ - dir = 1 - }, -/turf/open/floor/iron/cafeteria{ - dir = 5 - }, -/area/awaymission/moonoutpost19/research) "Zx" = ( /obj/structure/chair/office, /turf/open/floor/iron, @@ -32905,7 +32887,7 @@ uZ Nj nk nk -MD +ez eJ eI eJ @@ -33942,7 +33924,7 @@ Nt ap aK on -Zw +aq dZ bn lG @@ -34454,7 +34436,7 @@ dZ rH SX Sd -wU +NY ap Ts ea @@ -37487,7 +37469,7 @@ xm Ff My IP -MW +wc ZY CP qY @@ -37744,7 +37726,7 @@ xm Bz My IP -Ro +VY Uw Qx vj @@ -38296,7 +38278,7 @@ My My dZ ei -ex +Bg vU fl fC @@ -38553,7 +38535,7 @@ My My ea ef -AI +cp vx Gh qy @@ -41914,7 +41896,7 @@ hI qx RK bm -ty +uN hJ Gp hI @@ -42817,7 +42799,7 @@ ac ac aU uR -JO +JZ Ew ZT aU diff --git a/_maps/RandomZLevels/museum.dmm b/_maps/RandomZLevels/museum.dmm index cdea9ba141a13..2937250b1f9ba 100644 --- a/_maps/RandomZLevels/museum.dmm +++ b/_maps/RandomZLevels/museum.dmm @@ -4755,7 +4755,7 @@ /obj/structure/lattice/catwalk/mining, /obj/structure/railing, /obj/structure/table, -/obj/item/clothing/mask/cigarette/cigar{ +/obj/item/cigarette/cigar{ icon_state = "cigaron"; lit = 1 }, diff --git a/_maps/RandomZLevels/research.dmm b/_maps/RandomZLevels/research.dmm index 154522d9c253e..1e84014fa0e1b 100644 --- a/_maps/RandomZLevels/research.dmm +++ b/_maps/RandomZLevels/research.dmm @@ -76,8 +76,8 @@ }, /obj/structure/frame/machine, /obj/item/circuitboard/machine/smes, -/obj/item/stock_parts/cell/high, -/obj/item/stock_parts/cell/high/empty, +/obj/item/stock_parts/power_store/cell/high, +/obj/item/stock_parts/power_store/cell/high/empty, /turf/open/floor/plating, /area/awaymission/research/interior/engineering) "aw" = ( @@ -96,12 +96,12 @@ /area/awaymission/research/interior/engineering) "az" = ( /obj/effect/gibspawner/human, -/obj/item/stock_parts/cell/high, +/obj/item/stock_parts/power_store/cell/high, /turf/open/floor/plating, /area/awaymission/research/interior/engineering) "aA" = ( /obj/item/stack/sheet/plasteel, -/obj/item/stock_parts/cell/high, +/obj/item/stock_parts/power_store/cell/high, /turf/open/floor/plating, /area/awaymission/research/interior/engineering) "aB" = ( @@ -125,11 +125,11 @@ "aF" = ( /obj/item/stack/rods, /obj/item/stack/sheet/iron, -/obj/item/stock_parts/cell/high/empty, +/obj/item/stock_parts/power_store/cell/high/empty, /turf/open/floor/plating, /area/awaymission/research/interior/engineering) "aG" = ( -/obj/item/stock_parts/cell/high, +/obj/item/stock_parts/power_store/cell/high, /turf/open/floor/plating, /area/awaymission/research/interior/engineering) "aH" = ( @@ -161,7 +161,7 @@ /turf/open/floor/mineral/plastitanium/red, /area/awaymission/research/interior/engineering) "aM" = ( -/obj/item/stock_parts/cell/high/empty, +/obj/item/stock_parts/power_store/cell/high/empty, /turf/open/floor/plating, /area/awaymission/research/interior/engineering) "aO" = ( @@ -2461,9 +2461,7 @@ /turf/open/floor/wood, /area/awaymission/research/interior/dorm) "lN" = ( -/obj/structure/window/reinforced/spawner/directional/north{ - layer = 2.9 - }, +/obj/structure/window/reinforced/spawner/directional/north, /obj/machinery/airalarm/directional/east, /obj/effect/turf_decal/siding/yellow{ dir = 4 @@ -2707,25 +2705,19 @@ "mK" = ( /obj/structure/flora/bush/flowers_br/style_random, /obj/structure/window/reinforced/spawner/directional/south, -/obj/structure/window/reinforced/spawner/directional/north{ - layer = 2.9 - }, +/obj/structure/window/reinforced/spawner/directional/north, /turf/open/floor/grass, /area/awaymission/research/interior/escapepods) "mL" = ( /obj/structure/flora/bush/ferny/style_random, /obj/structure/window/reinforced/spawner/directional/south, -/obj/structure/window/reinforced/spawner/directional/north{ - layer = 2.9 - }, +/obj/structure/window/reinforced/spawner/directional/north, /turf/open/floor/grass, /area/awaymission/research/interior/escapepods) "mM" = ( /obj/structure/flora/bush/grassy/style_random, /obj/structure/window/reinforced/spawner/directional/south, -/obj/structure/window/reinforced/spawner/directional/north{ - layer = 2.9 - }, +/obj/structure/window/reinforced/spawner/directional/north, /turf/open/floor/grass, /area/awaymission/research/interior/escapepods) "mO" = ( diff --git a/_maps/RandomZLevels/snowdin.dmm b/_maps/RandomZLevels/snowdin.dmm index 7a15d946e0282..ee207f21e86d6 100644 --- a/_maps/RandomZLevels/snowdin.dmm +++ b/_maps/RandomZLevels/snowdin.dmm @@ -445,7 +445,7 @@ }, /obj/structure/table, /obj/machinery/cell_charger, -/obj/item/stock_parts/cell/high, +/obj/item/stock_parts/power_store/cell/high, /obj/item/storage/toolbox/electrical{ pixel_x = 4; pixel_y = 8 @@ -11586,7 +11586,6 @@ /obj/machinery/door_buttons/access_button{ idDoor = "snowdin_turbine_interior"; idSelf = "snowdin_turbine_access"; - layer = 3.1; name = "Turbine Airlock Control"; pixel_x = 8; pixel_y = -24 diff --git a/_maps/RandomZLevels/undergroundoutpost45.dmm b/_maps/RandomZLevels/undergroundoutpost45.dmm index e444510605c3c..5eeed4517657e 100644 --- a/_maps/RandomZLevels/undergroundoutpost45.dmm +++ b/_maps/RandomZLevels/undergroundoutpost45.dmm @@ -555,6 +555,19 @@ }, /turf/open/floor/carpet, /area/awaymission/undergroundoutpost45/central) +"cM" = ( +/obj/structure/table, +/obj/machinery/cell_charger, +/obj/item/stock_parts/power_store/cell/high, +/obj/item/stack/cable_coil{ + pixel_x = 3; + pixel_y = -7 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/awaymission/undergroundoutpost45/gateway) "cS" = ( /obj/machinery/portable_atmospherics/scrubber, /obj/structure/window/spawner/directional/west, @@ -616,9 +629,7 @@ /turf/open/floor/iron, /area/awaymission/undergroundoutpost45/central) "do" = ( -/obj/item/kirbyplants{ - layer = 5 - }, +/obj/item/kirbyplants, /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/tile/green, /turf/open/floor/iron, @@ -1347,9 +1358,7 @@ /turf/open/floor/carpet, /area/awaymission/undergroundoutpost45/central) "fT" = ( -/obj/item/kirbyplants{ - layer = 5 - }, +/obj/item/kirbyplants, /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, @@ -1710,9 +1719,7 @@ "hq" = ( /obj/structure/table, /obj/item/stack/package_wrap, -/obj/item/reagent_containers/condiment/enzyme{ - layer = 5 - }, +/obj/item/reagent_containers/condiment/enzyme, /turf/open/floor/iron/cafeteria{ dir = 5 }, @@ -2158,14 +2165,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/white, /area/awaymission/undergroundoutpost45/gateway) -"iY" = ( -/obj/structure/table, -/obj/machinery/cell_charger, -/obj/item/stock_parts/cell/high, -/obj/item/stock_parts/cell/high, -/obj/machinery/light/small/directional/west, -/turf/open/floor/iron/white, -/area/awaymission/undergroundoutpost45/research) "iZ" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, @@ -2454,9 +2453,7 @@ }, /area/awaymission/undergroundoutpost45/research) "kh" = ( -/obj/item/kirbyplants{ - layer = 5 - }, +/obj/item/kirbyplants, /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/white, /area/awaymission/undergroundoutpost45/research) @@ -2622,6 +2619,13 @@ }, /turf/open/floor/iron/white, /area/awaymission/undergroundoutpost45/gateway) +"kN" = ( +/obj/structure/table, +/obj/machinery/cell_charger, +/obj/item/stock_parts/power_store/cell/high, +/obj/effect/turf_decal/tile/yellow/anticorner/contrasted, +/turf/open/floor/iron, +/area/awaymission/undergroundoutpost45/engineering) "kO" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -2982,6 +2986,15 @@ /obj/effect/turf_decal/tile/bar/opposingcorners, /turf/open/floor/iron, /area/awaymission/undergroundoutpost45/crew_quarters) +"lV" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/obj/machinery/computer/security/telescreen/underground_outpost/research/directional/south, +/turf/open/floor/iron/cafeteria{ + dir = 5 + }, +/area/awaymission/undergroundoutpost45/research) "lW" = ( /obj/machinery/door/firedoor, /obj/structure/disposalpipe/segment, @@ -2991,16 +3004,6 @@ /obj/structure/cable, /turf/open/floor/iron, /area/awaymission/undergroundoutpost45/crew_quarters) -"lX" = ( -/obj/structure/closet/crate, -/obj/item/stack/sheet/mineral/plasma{ - amount = 26 - }, -/obj/item/stock_parts/cell/high, -/obj/item/stock_parts/cell/high, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/awaymission/undergroundoutpost45/engineering) "lY" = ( /obj/machinery/light/small/directional/north, /obj/machinery/camera/directional/north{ @@ -3016,19 +3019,6 @@ }, /turf/open/floor/plating, /area/awaymission/undergroundoutpost45/engineering) -"ma" = ( -/obj/structure/table, -/obj/machinery/cell_charger, -/obj/item/stock_parts/cell/high, -/obj/item/stack/cable_coil{ - pixel_x = 3; - pixel_y = -7 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/awaymission/undergroundoutpost45/gateway) "mb" = ( /turf/open/floor/iron, /area/awaymission/undergroundoutpost45/gateway) @@ -3272,9 +3262,7 @@ /area/awaymission/undergroundoutpost45/research) "mQ" = ( /obj/effect/decal/cleanable/dirt, -/obj/item/kirbyplants{ - layer = 5 - }, +/obj/item/kirbyplants, /turf/open/floor/iron/cafeteria{ dir = 5 }, @@ -3431,36 +3419,12 @@ dir = 5 }, /area/awaymission/undergroundoutpost45/research) -"no" = ( -/obj/machinery/computer/security{ - dir = 4; - network = list("uo45") - }, -/obj/effect/turf_decal/tile/red/half/contrasted{ - dir = 8 - }, -/turf/open/floor/iron, -/area/awaymission/undergroundoutpost45/research) "np" = ( /obj/structure/chair/office{ dir = 1 }, /turf/open/floor/iron, /area/awaymission/undergroundoutpost45/research) -"nq" = ( -/obj/structure/table, -/obj/machinery/computer/security/telescreen{ - desc = "Used for monitoring the research division and the labs within."; - dir = 8; - name = "research monitor"; - network = list("uo45r") - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/red/half/contrasted{ - dir = 4 - }, -/turf/open/floor/iron, -/area/awaymission/undergroundoutpost45/research) "nr" = ( /obj/machinery/light/small/directional/east, /obj/effect/turf_decal/tile/purple{ @@ -3587,18 +3551,6 @@ dir = 5 }, /area/awaymission/undergroundoutpost45/research) -"nR" = ( -/obj/structure/table/reinforced, -/obj/structure/window/reinforced/spawner/directional/north, -/obj/machinery/computer/security/telescreen{ - desc = "Used for monitoring the research division and the labs within."; - name = "research monitor"; - network = list("uo45r") - }, -/turf/open/floor/iron/cafeteria{ - dir = 5 - }, -/area/awaymission/undergroundoutpost45/research) "nS" = ( /obj/machinery/light/small/directional/east, /obj/structure/window/reinforced/spawner/directional/north, @@ -4029,14 +3981,6 @@ dir = 5 }, /area/awaymission/undergroundoutpost45/research) -"pf" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 8 - }, -/turf/open/floor/iron/cafeteria{ - dir = 5 - }, -/area/awaymission/undergroundoutpost45/research) "pg" = ( /obj/structure/secure_safe{ pixel_x = 5; @@ -4065,9 +4009,7 @@ /turf/open/floor/iron, /area/awaymission/undergroundoutpost45/research) "pl" = ( -/obj/item/kirbyplants{ - layer = 5 - }, +/obj/item/kirbyplants, /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ dir = 8 @@ -4278,7 +4220,6 @@ /area/awaymission/undergroundoutpost45/engineering) "qd" = ( /obj/machinery/meter{ - layer = 3.3; name = "Mixed Air Tank Out" }, /obj/machinery/atmospherics/pipe/layer_manifold/supply, @@ -4287,7 +4228,6 @@ /area/awaymission/undergroundoutpost45/engineering) "qe" = ( /obj/machinery/meter{ - layer = 3.3; name = "Mixed Air Tank In" }, /obj/machinery/atmospherics/pipe/smart/manifold4w/general, @@ -4400,9 +4340,7 @@ /turf/open/floor/iron, /area/awaymission/undergroundoutpost45/engineering) "qI" = ( -/obj/structure/window/reinforced/spawner/directional/east{ - layer = 2.9 - }, +/obj/structure/window/reinforced/spawner/directional/east, /obj/structure/closet/secure_closet/engineering_personal{ req_access = list("away_maintenance") }, @@ -4581,9 +4519,7 @@ /turf/open/floor/iron, /area/awaymission/undergroundoutpost45/engineering) "rk" = ( -/obj/item/kirbyplants{ - layer = 5 - }, +/obj/item/kirbyplants, /obj/effect/turf_decal/tile/yellow/anticorner/contrasted{ dir = 4 }, @@ -4899,6 +4835,17 @@ }, /turf/open/floor/iron, /area/awaymission/undergroundoutpost45/engineering) +"sc" = ( +/obj/machinery/computer/security{ + dir = 4; + network = list("uo45") + }, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 8 + }, +/obj/machinery/computer/security/telescreen/underground_outpost/research/directional/west, +/turf/open/floor/iron, +/area/awaymission/undergroundoutpost45/research) "sd" = ( /obj/effect/turf_decal/tile/red/half/contrasted{ dir = 8 @@ -4972,9 +4919,7 @@ /turf/open/floor/iron, /area/awaymission/undergroundoutpost45/engineering) "sq" = ( -/obj/machinery/meter{ - layer = 3.3 - }, +/obj/machinery/meter, /obj/machinery/atmospherics/pipe/smart/manifold4w/general, /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -5143,9 +5088,7 @@ /turf/open/floor/iron, /area/awaymission/undergroundoutpost45/engineering) "td" = ( -/obj/machinery/meter{ - layer = 3.3 - }, +/obj/machinery/meter, /obj/machinery/atmospherics/pipe/layer_manifold/orange{ dir = 4 }, @@ -5232,9 +5175,7 @@ /area/awaymission/undergroundoutpost45/engineering) "tw" = ( /obj/machinery/light/small/directional/south, -/obj/structure/window/reinforced/spawner/directional/east{ - layer = 2.9 - }, +/obj/structure/window/reinforced/spawner/directional/east, /obj/machinery/portable_atmospherics/scrubber, /obj/effect/turf_decal/tile/red{ dir = 4 @@ -5583,17 +5524,13 @@ /turf/closed/wall/r_wall, /area/awaymission/undergroundoutpost45/engineering) "uI" = ( -/obj/machinery/meter{ - layer = 3.3 - }, +/obj/machinery/meter, /obj/machinery/atmospherics/pipe/layer_manifold/orange, /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/awaymission/undergroundoutpost45/engineering) "uJ" = ( -/obj/machinery/meter{ - layer = 3.3 - }, +/obj/machinery/meter, /obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -5954,13 +5891,6 @@ dir = 8 }, /area/awaymission/undergroundoutpost45/engineering) -"vW" = ( -/obj/structure/table, -/obj/machinery/cell_charger, -/obj/item/stock_parts/cell/high, -/obj/effect/turf_decal/tile/yellow/anticorner/contrasted, -/turf/open/floor/iron, -/area/awaymission/undergroundoutpost45/engineering) "vY" = ( /obj/structure/closet/emcloset, /obj/item/clothing/mask/breath, @@ -5991,6 +5921,16 @@ /obj/item/bedsheet, /turf/open/floor/carpet, /area/awaymission/undergroundoutpost45/mining) +"we" = ( +/obj/structure/closet/crate, +/obj/item/stack/sheet/mineral/plasma{ + amount = 26 + }, +/obj/item/stock_parts/power_store/cell/high, +/obj/item/stock_parts/power_store/cell/high, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/awaymission/undergroundoutpost45/engineering) "wf" = ( /obj/effect/mapping_helpers/burnt_floor, /turf/open/floor/iron{ @@ -5999,9 +5939,7 @@ /area/awaymission/undergroundoutpost45/mining) "wg" = ( /obj/machinery/light/small/directional/north, -/obj/item/kirbyplants{ - layer = 5 - }, +/obj/item/kirbyplants, /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, @@ -6136,9 +6074,7 @@ /turf/open/floor/iron, /area/awaymission/undergroundoutpost45/crew_quarters) "xd" = ( -/obj/machinery/meter{ - layer = 3.3 - }, +/obj/machinery/meter, /obj/machinery/atmospherics/pipe/smart/manifold4w/green, /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -6749,6 +6685,14 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, /area/awaymission/undergroundoutpost45/engineering) +"CM" = ( +/obj/structure/table, +/obj/machinery/cell_charger, +/obj/item/stock_parts/power_store/cell/high, +/obj/item/stock_parts/power_store/cell/high, +/obj/machinery/light/small/directional/west, +/turf/open/floor/iron/white, +/area/awaymission/undergroundoutpost45/research) "CT" = ( /obj/structure/disposalpipe/segment{ dir = 10 @@ -6758,6 +6702,14 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/awaymission/undergroundoutpost45/engineering) +"CW" = ( +/obj/structure/table, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 4 + }, +/turf/open/floor/iron, +/area/awaymission/undergroundoutpost45/research) "De" = ( /obj/machinery/computer/monitor{ name = "primary power monitoring console" @@ -6893,6 +6845,13 @@ dir = 5 }, /area/awaymission/undergroundoutpost45/crew_quarters) +"ET" = ( +/obj/structure/table/reinforced, +/obj/structure/window/reinforced/spawner/directional/north, +/turf/open/floor/iron/cafeteria{ + dir = 5 + }, +/area/awaymission/undergroundoutpost45/research) "Fd" = ( /obj/structure/disposalpipe/segment, /obj/machinery/door/airlock/command/glass{ @@ -27483,7 +27442,7 @@ jG gw ky DB -ma +cM mB gK ad @@ -33131,7 +33090,7 @@ gX hB ig ze -iY +CM jr jO mU @@ -34427,7 +34386,7 @@ mP nn nQ oz -pf +lV gy ql qT @@ -34682,7 +34641,7 @@ lL mj mP mP -nR +ET oA pg gy @@ -35452,7 +35411,7 @@ Mg lM hH mR -no +sc RC oC ph @@ -35966,7 +35925,7 @@ kV lM hH mT -nq +CW nV WG lu @@ -48059,7 +48018,7 @@ rr qb RF vy -vW +kN ni ln ni @@ -48813,7 +48772,7 @@ ad ad ad ln -lX +we mz ln nK diff --git a/_maps/_basemap.dm b/_maps/_basemap.dm index 384916caa58e5..20432bbe8dd51 100644 --- a/_maps/_basemap.dm +++ b/_maps/_basemap.dm @@ -13,6 +13,7 @@ #include "map_files\Mining\Lavaland.dmm" #include "map_files\NorthStar\north_star.dmm" #include "map_files\tramstation\tramstation.dmm" + #include "map_files\wawastation\wawastation.dmm" #ifdef CIBUILDING #include "templates.dm" diff --git a/_maps/deathmatch/OSHA_Violator.dmm b/_maps/deathmatch/OSHA_Violator.dmm index fc8291d181449..7d30951a4f0a6 100644 --- a/_maps/deathmatch/OSHA_Violator.dmm +++ b/_maps/deathmatch/OSHA_Violator.dmm @@ -20,11 +20,18 @@ /obj/structure/closet/secure_closet/engineering_welding, /turf/open/indestructible, /area/deathmatch) +"cl" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/obj/structure/cable, +/turf/open/indestructible, +/area/deathmatch) "cA" = ( /turf/open/indestructible, /area/deathmatch) "cR" = ( -/obj/machinery/field/generator/starts_on, +/obj/machinery/field/generator/starts_on/magic, /obj/effect/turf_decal/bot, /obj/structure/cable, /turf/open/indestructible, @@ -36,7 +43,7 @@ "dt" = ( /obj/machinery/light/no_nightlight/directional/north, /obj/effect/turf_decal/stripes/line, -/obj/machinery/field/generator/starts_on, +/obj/machinery/field/generator/starts_on/magic, /obj/structure/cable, /turf/open/indestructible, /area/deathmatch) @@ -252,9 +259,6 @@ /obj/structure/cable, /turf/open/indestructible, /area/deathmatch) -"sa" = ( -/turf/cordon, -/area/template_noop) "sb" = ( /obj/structure/frame/machine/secured, /turf/open/indestructible, @@ -581,7 +585,7 @@ /area/deathmatch) "Bv" = ( /obj/effect/turf_decal/stripes/line, -/obj/machinery/field/generator/starts_on, +/obj/machinery/field/generator/starts_on/magic, /obj/structure/cable, /turf/open/indestructible, /area/deathmatch) @@ -685,6 +689,13 @@ /obj/machinery/light/no_nightlight/directional/west, /turf/open/indestructible, /area/deathmatch) +"Gw" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/obj/structure/cable, +/turf/open/indestructible, +/area/deathmatch) "Gx" = ( /obj/machinery/conveyor/auto, /obj/structure/cable, @@ -849,7 +860,7 @@ /turf/open/indestructible, /area/deathmatch) "Pg" = ( -/obj/machinery/field/generator/starts_on, +/obj/machinery/field/generator, /obj/machinery/light/no_nightlight/directional/north, /turf/open/indestructible, /area/deathmatch) @@ -980,7 +991,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 1 }, -/obj/machinery/field/generator/starts_on, +/obj/machinery/field/generator/starts_on/magic, /obj/structure/cable, /turf/open/indestructible, /area/deathmatch) @@ -1042,8 +1053,11 @@ /turf/open/indestructible, /area/deathmatch) "YA" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, /obj/structure/cable, -/turf/closed/indestructible/fakeglass, +/turf/open/indestructible, /area/deathmatch) "YJ" = ( /obj/structure/cable, @@ -1062,7 +1076,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 1 }, -/obj/machinery/field/generator/starts_on, +/obj/machinery/field/generator/starts_on/magic, /obj/structure/cable, /turf/open/indestructible, /area/deathmatch) @@ -1073,6 +1087,12 @@ }, /turf/open/indestructible, /area/deathmatch) +"Zq" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/turf/open/indestructible, +/area/deathmatch) "Zr" = ( /obj/item/storage/backpack/duffelbag/syndie/med/medicalbundle, /turf/open/space/basic, @@ -1087,34 +1107,6 @@ /area/template_noop) (1,1,1) = {" -sa -sa -sa -sa -sa -sa -sa -sa -sa -sa -sa -sa -sa -sa -sa -sa -sa -sa -sa -sa -sa -sa -sa -sa -sa -"} -(2,1,1) = {" -sa je je je @@ -1138,10 +1130,8 @@ je je je je -sa "} -(3,1,1) = {" -sa +(2,1,1) = {" je ai ai @@ -1165,10 +1155,8 @@ je je je je -sa "} -(4,1,1) = {" -sa +(3,1,1) = {" je ai bW @@ -1192,10 +1180,8 @@ je je je je -sa "} -(5,1,1) = {" -sa +(4,1,1) = {" je ai cA @@ -1219,10 +1205,8 @@ je je je je -sa "} -(6,1,1) = {" -sa +(5,1,1) = {" je aE cA @@ -1246,10 +1230,8 @@ je je je je -sa "} -(7,1,1) = {" -sa +(6,1,1) = {" je aE cA @@ -1273,10 +1255,8 @@ ai ai ai je -sa "} -(8,1,1) = {" -sa +(7,1,1) = {" je ai cA @@ -1300,10 +1280,8 @@ cA cA aE je -sa "} -(9,1,1) = {" -sa +(8,1,1) = {" je ai cA @@ -1327,10 +1305,8 @@ cA cA aE je -sa "} -(10,1,1) = {" -sa +(9,1,1) = {" je ai aE @@ -1354,10 +1330,8 @@ ai aE ai je -sa "} -(11,1,1) = {" -sa +(10,1,1) = {" je ai cR @@ -1381,13 +1355,11 @@ ai cR ai je -sa "} -(12,1,1) = {" -sa +(11,1,1) = {" je ai -YA +cl ai gN cA @@ -1408,10 +1380,8 @@ ai YA ai je -sa "} -(13,1,1) = {" -sa +(12,1,1) = {" je ai Ea @@ -1435,10 +1405,8 @@ Xp yo ai je -sa "} -(14,1,1) = {" -sa +(13,1,1) = {" je ai do @@ -1462,10 +1430,8 @@ gN Px ai je -sa "} -(15,1,1) = {" -sa +(14,1,1) = {" je ai dt @@ -1489,10 +1455,8 @@ gN YY ai je -sa "} -(16,1,1) = {" -sa +(15,1,1) = {" je ai do @@ -1516,10 +1480,8 @@ gN Px ai je -sa "} -(17,1,1) = {" -sa +(16,1,1) = {" je ai do @@ -1543,10 +1505,8 @@ gN Px ai je -sa "} -(18,1,1) = {" -sa +(17,1,1) = {" je ai dy @@ -1570,10 +1530,8 @@ gN Px ai je -sa "} -(19,1,1) = {" -sa +(18,1,1) = {" je bl do @@ -1597,10 +1555,8 @@ gN Px bl je -sa "} -(20,1,1) = {" -sa +(19,1,1) = {" je bl do @@ -1624,10 +1580,8 @@ XU Px bl Zr -sa "} -(21,1,1) = {" -sa +(20,1,1) = {" je bl do @@ -1651,10 +1605,8 @@ Yn Px bl Zz -sa "} -(22,1,1) = {" -sa +(21,1,1) = {" je bl Bv @@ -1678,10 +1630,8 @@ Yn UI bl je -sa "} -(23,1,1) = {" -sa +(22,1,1) = {" je bl do @@ -1705,10 +1655,8 @@ Yz Px bl je -sa "} -(24,1,1) = {" -sa +(23,1,1) = {" je bl do @@ -1732,10 +1680,8 @@ YJ Px bl ZD -sa "} -(25,1,1) = {" -sa +(24,1,1) = {" ac bl do @@ -1759,10 +1705,8 @@ gN Px bl je -sa "} -(26,1,1) = {" -sa +(25,1,1) = {" ae ai do @@ -1786,10 +1730,8 @@ gN Px ai je -sa "} -(27,1,1) = {" -sa +(26,1,1) = {" je ai do @@ -1813,10 +1755,8 @@ gN Zi ai je -sa "} -(28,1,1) = {" -sa +(27,1,1) = {" je ai do @@ -1840,10 +1780,8 @@ gN Px ai je -sa "} -(29,1,1) = {" -sa +(28,1,1) = {" je ai dt @@ -1867,10 +1805,8 @@ gN YY ai je -sa "} -(30,1,1) = {" -sa +(29,1,1) = {" je ai do @@ -1894,10 +1830,8 @@ gN Px ai je -sa "} -(31,1,1) = {" -sa +(30,1,1) = {" je ai do @@ -1921,10 +1855,8 @@ ig Px ai je -sa "} -(32,1,1) = {" -sa +(31,1,1) = {" je ai do @@ -1948,10 +1880,8 @@ ig Px ai je -sa "} -(33,1,1) = {" -sa +(32,1,1) = {" je ai do @@ -1975,10 +1905,8 @@ gN Px ai je -sa "} -(34,1,1) = {" -sa +(33,1,1) = {" je ai do @@ -2002,13 +1930,11 @@ YU Px ai je -sa "} -(35,1,1) = {" -sa +(34,1,1) = {" je ai -bl +Zq ai ai Bf @@ -2026,13 +1952,11 @@ Bf Bf ai ai -bl +Gw ai je -sa "} -(36,1,1) = {" -sa +(35,1,1) = {" je ai cR @@ -2056,10 +1980,8 @@ gC cR ai je -sa "} -(37,1,1) = {" -sa +(36,1,1) = {" je aE cA @@ -2083,10 +2005,8 @@ gN cA aE je -sa "} -(38,1,1) = {" -sa +(37,1,1) = {" je ai fH @@ -2110,10 +2030,8 @@ gN fH ai je -sa "} -(39,1,1) = {" -sa +(38,1,1) = {" je ai ai @@ -2137,32 +2055,4 @@ ai ai ai je -sa -"} -(40,1,1) = {" -sa -sa -sa -sa -sa -sa -sa -sa -sa -sa -sa -sa -sa -sa -sa -sa -sa -sa -sa -sa -sa -sa -sa -sa -sa "} diff --git a/_maps/deathmatch/arena_station.dmm b/_maps/deathmatch/arena_station.dmm index c7654810360e1..50089df45e8a0 100644 --- a/_maps/deathmatch/arena_station.dmm +++ b/_maps/deathmatch/arena_station.dmm @@ -930,7 +930,7 @@ /area/deathmatch) "LY" = ( /obj/structure/closet/secure_closet, -/obj/item/gun/energy/beam_rifle, +/obj/item/gun/energy/xray, /turf/open/indestructible/vault, /area/deathmatch) "Mc" = ( diff --git a/_maps/deathmatch/finaldestination.dmm b/_maps/deathmatch/finaldestination.dmm new file mode 100644 index 0000000000000..7fef94cd57a16 --- /dev/null +++ b/_maps/deathmatch/finaldestination.dmm @@ -0,0 +1,1254 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"ae" = ( +/obj/effect/turf_decal/siding/yellow/end, +/turf/open/indestructible/dark/smooth_large, +/area/deathmatch) +"bF" = ( +/obj/effect/turf_decal/siding/blue/corner{ + dir = 4 + }, +/turf/open/indestructible/dark/smooth_large, +/area/deathmatch) +"bV" = ( +/obj/effect/turf_decal/siding/yellow/corner{ + dir = 1 + }, +/obj/effect/turf_decal/siding/yellow/corner{ + dir = 8 + }, +/turf/open/indestructible/large, +/area/deathmatch) +"cu" = ( +/obj/effect/turf_decal/siding/dark_red{ + dir = 6 + }, +/obj/effect/light_emitter/thunderdome, +/turf/open/indestructible/dark/smooth_large, +/area/deathmatch) +"cW" = ( +/obj/effect/turf_decal/siding/dark_green/corner{ + dir = 1 + }, +/turf/open/indestructible/large, +/area/deathmatch) +"eb" = ( +/obj/effect/turf_decal/siding/dark_green/corner{ + dir = 1 + }, +/turf/open/indestructible/dark/smooth_large, +/area/deathmatch) +"eN" = ( +/obj/effect/turf_decal/siding/blue{ + dir = 8 + }, +/obj/effect/turf_decal/siding/blue{ + dir = 4 + }, +/obj/effect/landmark/deathmatch_player_spawn, +/turf/open/indestructible/dark/smooth_large, +/area/deathmatch) +"fp" = ( +/obj/effect/turf_decal/siding/dark_green/end{ + dir = 8 + }, +/turf/open/indestructible/dark/smooth_large, +/area/deathmatch) +"gs" = ( +/obj/effect/turf_decal/siding/blue/end{ + dir = 1 + }, +/turf/open/indestructible/dark/smooth_large, +/area/deathmatch) +"hk" = ( +/obj/structure/lattice/catwalk/mining, +/obj/structure/railing{ + dir = 1 + }, +/turf/open/chasm, +/area/deathmatch) +"jb" = ( +/obj/effect/turf_decal/siding/blue{ + dir = 4 + }, +/obj/effect/light_emitter/thunderdome, +/turf/open/indestructible/dark/smooth_large, +/area/deathmatch) +"jl" = ( +/obj/effect/turf_decal/siding/blue, +/obj/effect/turf_decal/siding/blue{ + dir = 1 + }, +/turf/open/indestructible/dark/smooth_large, +/area/deathmatch) +"kR" = ( +/turf/open/chasm, +/area/deathmatch) +"kS" = ( +/obj/effect/turf_decal/siding/dark_green{ + dir = 4 + }, +/obj/effect/turf_decal/siding/dark_green{ + dir = 8 + }, +/turf/open/indestructible/dark/smooth_large, +/area/deathmatch) +"lq" = ( +/obj/effect/turf_decal/siding/blue{ + dir = 4 + }, +/turf/open/indestructible/dark/smooth_large, +/area/deathmatch) +"lD" = ( +/obj/effect/turf_decal/siding/dark_red/corner, +/turf/open/indestructible/large, +/area/deathmatch) +"lJ" = ( +/obj/effect/turf_decal/siding/dark_red{ + dir = 8 + }, +/obj/effect/turf_decal/siding/dark_red{ + dir = 4 + }, +/turf/open/indestructible/large, +/area/deathmatch) +"ok" = ( +/obj/effect/turf_decal/siding/dark_red/end{ + dir = 4 + }, +/turf/open/indestructible/dark/smooth_large, +/area/deathmatch) +"os" = ( +/obj/effect/turf_decal/siding/dark_green, +/obj/effect/turf_decal/siding/dark_green{ + dir = 1 + }, +/turf/open/indestructible/dark/smooth_large, +/area/deathmatch) +"ou" = ( +/obj/effect/turf_decal/siding/dark_green/corner{ + dir = 4 + }, +/obj/effect/turf_decal/siding/dark_green/corner{ + dir = 1 + }, +/turf/open/indestructible/large, +/area/deathmatch) +"oE" = ( +/obj/effect/turf_decal/siding/dark_red{ + dir = 1 + }, +/obj/effect/turf_decal/siding/dark_red, +/turf/open/indestructible/large, +/area/deathmatch) +"oX" = ( +/obj/effect/turf_decal/siding/blue{ + dir = 1 + }, +/turf/open/indestructible/dark/smooth_large, +/area/deathmatch) +"pg" = ( +/obj/effect/turf_decal/siding/dark_green{ + dir = 1 + }, +/turf/open/indestructible/large, +/area/deathmatch) +"pE" = ( +/obj/effect/turf_decal/siding/dark_green, +/obj/effect/turf_decal/siding/dark_green{ + dir = 1 + }, +/turf/open/indestructible/large, +/area/deathmatch) +"qg" = ( +/obj/effect/turf_decal/siding/dark_green{ + dir = 8 + }, +/turf/open/indestructible/dark/smooth_large, +/area/deathmatch) +"qm" = ( +/obj/effect/turf_decal/siding/yellow, +/turf/open/indestructible/large, +/area/deathmatch) +"ry" = ( +/obj/effect/turf_decal/siding/blue/corner{ + dir = 4 + }, +/turf/open/indestructible/large, +/area/deathmatch) +"rS" = ( +/obj/effect/turf_decal/siding/dark_red/end, +/turf/open/indestructible/dark/smooth_large, +/area/deathmatch) +"sb" = ( +/obj/effect/turf_decal/siding/yellow/end{ + dir = 8 + }, +/turf/open/indestructible/dark/smooth_large, +/area/deathmatch) +"sL" = ( +/obj/effect/turf_decal/siding/yellow/corner{ + dir = 8 + }, +/obj/effect/turf_decal/siding/yellow{ + dir = 5 + }, +/turf/open/indestructible/dark/smooth_large, +/area/deathmatch) +"tB" = ( +/obj/structure/lattice/catwalk/mining, +/obj/structure/railing{ + dir = 8 + }, +/turf/open/chasm, +/area/deathmatch) +"tF" = ( +/obj/effect/turf_decal/siding/dark_green{ + dir = 4 + }, +/obj/effect/turf_decal/siding/dark_green{ + dir = 8 + }, +/obj/effect/landmark/deathmatch_player_spawn, +/turf/open/indestructible/dark/smooth_large, +/area/deathmatch) +"vn" = ( +/obj/effect/turf_decal/siding/blue{ + dir = 8 + }, +/obj/effect/turf_decal/siding/blue{ + dir = 4 + }, +/turf/open/indestructible/dark/smooth_large, +/area/deathmatch) +"vz" = ( +/obj/effect/turf_decal/siding/blue/corner, +/obj/effect/turf_decal/siding/blue/corner{ + dir = 4 + }, +/turf/open/indestructible/large, +/area/deathmatch) +"vF" = ( +/obj/effect/turf_decal/siding/dark_red, +/turf/open/indestructible/large, +/area/deathmatch) +"vV" = ( +/obj/effect/turf_decal/siding/blue/corner{ + dir = 1 + }, +/obj/effect/turf_decal/siding/blue/corner{ + dir = 4 + }, +/turf/open/indestructible/large, +/area/deathmatch) +"wl" = ( +/obj/effect/turf_decal/siding/blue{ + dir = 1 + }, +/turf/open/indestructible/large, +/area/deathmatch) +"xc" = ( +/obj/structure/lattice/catwalk/mining, +/turf/open/chasm, +/area/deathmatch) +"xq" = ( +/obj/effect/turf_decal/siding/dark_green{ + dir = 8 + }, +/obj/effect/light_emitter/thunderdome, +/turf/open/indestructible/dark/smooth_large, +/area/deathmatch) +"xv" = ( +/obj/effect/turf_decal/siding/dark_red/corner{ + dir = 8 + }, +/obj/effect/turf_decal/siding/dark_red/corner, +/turf/open/indestructible/large, +/area/deathmatch) +"xQ" = ( +/obj/effect/turf_decal/siding/blue{ + dir = 10 + }, +/obj/effect/turf_decal/siding/blue/corner{ + dir = 4 + }, +/turf/open/indestructible/dark/smooth_large, +/area/deathmatch) +"yJ" = ( +/obj/effect/turf_decal/siding/dark_red{ + dir = 4 + }, +/obj/effect/turf_decal/siding/dark_red{ + dir = 8 + }, +/obj/effect/landmark/deathmatch_player_spawn, +/turf/open/indestructible/dark/smooth_large, +/area/deathmatch) +"zB" = ( +/obj/effect/turf_decal/siding/yellow/corner{ + dir = 4 + }, +/obj/effect/turf_decal/siding/yellow{ + dir = 10 + }, +/turf/open/indestructible/large, +/area/deathmatch) +"AS" = ( +/obj/effect/turf_decal/siding/dark_green{ + dir = 8 + }, +/turf/open/indestructible/large, +/area/deathmatch) +"Bz" = ( +/obj/effect/turf_decal/siding/blue/end{ + dir = 4 + }, +/turf/open/indestructible/dark/smooth_large, +/area/deathmatch) +"BM" = ( +/obj/effect/turf_decal/siding/dark_red, +/obj/effect/light_emitter/thunderdome, +/turf/open/indestructible/dark/smooth_large, +/area/deathmatch) +"Cj" = ( +/obj/effect/turf_decal/siding/dark_red{ + dir = 4 + }, +/turf/open/indestructible/dark/smooth_large, +/area/deathmatch) +"Cw" = ( +/obj/effect/turf_decal/siding/dark_red/corner{ + dir = 4 + }, +/obj/effect/turf_decal/siding/dark_red/corner, +/turf/open/indestructible/large, +/area/deathmatch) +"CE" = ( +/obj/effect/turf_decal/siding/dark_red, +/obj/effect/turf_decal/siding/dark_red{ + dir = 1 + }, +/turf/open/indestructible/dark/smooth_large, +/area/deathmatch) +"CS" = ( +/obj/effect/turf_decal/siding/yellow, +/turf/open/indestructible/dark/smooth_large, +/area/deathmatch) +"Dc" = ( +/obj/effect/turf_decal/siding/yellow{ + dir = 1 + }, +/obj/effect/turf_decal/siding/yellow, +/turf/open/indestructible/large, +/area/deathmatch) +"Df" = ( +/obj/effect/turf_decal/siding/yellow{ + dir = 10 + }, +/obj/effect/light_emitter/thunderdome, +/turf/open/indestructible/dark/smooth_large, +/area/deathmatch) +"Ei" = ( +/obj/effect/turf_decal/siding/dark_red/corner, +/turf/open/indestructible/dark/smooth_large, +/area/deathmatch) +"Es" = ( +/obj/effect/turf_decal/siding/dark_green{ + dir = 1 + }, +/obj/effect/light_emitter/thunderdome, +/turf/open/indestructible/dark/smooth_large, +/area/deathmatch) +"Ev" = ( +/obj/effect/turf_decal/siding/yellow/corner{ + dir = 8 + }, +/turf/open/indestructible/large, +/area/deathmatch) +"Fd" = ( +/turf/open/indestructible/light, +/area/deathmatch) +"FB" = ( +/obj/structure/lattice/catwalk/mining, +/obj/structure/railing{ + dir = 4 + }, +/turf/open/chasm, +/area/deathmatch) +"Ge" = ( +/obj/effect/turf_decal/siding/yellow{ + dir = 4 + }, +/obj/effect/turf_decal/siding/yellow{ + dir = 8 + }, +/turf/open/indestructible/large, +/area/deathmatch) +"Hg" = ( +/obj/effect/turf_decal/siding/yellow{ + dir = 8 + }, +/turf/open/indestructible/large, +/area/deathmatch) +"Hm" = ( +/obj/effect/turf_decal/siding/dark_green, +/obj/effect/turf_decal/siding/dark_green{ + dir = 1 + }, +/obj/effect/landmark/deathmatch_player_spawn, +/turf/open/indestructible/dark/smooth_large, +/area/deathmatch) +"HM" = ( +/obj/effect/turf_decal/siding/dark_red{ + dir = 4 + }, +/obj/effect/turf_decal/siding/dark_red{ + dir = 8 + }, +/turf/open/indestructible/dark/smooth_large, +/area/deathmatch) +"Ij" = ( +/obj/effect/turf_decal/siding/dark_green/end{ + dir = 1 + }, +/turf/open/indestructible/dark/smooth_large, +/area/deathmatch) +"IP" = ( +/obj/effect/turf_decal/siding/dark_green/corner, +/obj/effect/turf_decal/siding/dark_green{ + dir = 9 + }, +/turf/open/indestructible/large, +/area/deathmatch) +"Jq" = ( +/obj/effect/turf_decal/siding/blue, +/obj/effect/turf_decal/siding/blue{ + dir = 1 + }, +/turf/open/indestructible/large, +/area/deathmatch) +"Jw" = ( +/obj/effect/turf_decal/siding/yellow, +/obj/effect/turf_decal/siding/yellow{ + dir = 1 + }, +/obj/effect/landmark/deathmatch_player_spawn, +/turf/open/indestructible/dark/smooth_large, +/area/deathmatch) +"JS" = ( +/obj/effect/turf_decal/siding/blue{ + dir = 5 + }, +/obj/effect/light_emitter/thunderdome, +/turf/open/indestructible/dark/smooth_large, +/area/deathmatch) +"Kn" = ( +/obj/effect/turf_decal/siding/blue, +/obj/effect/turf_decal/siding/blue{ + dir = 1 + }, +/obj/effect/landmark/deathmatch_player_spawn, +/turf/open/indestructible/dark/smooth_large, +/area/deathmatch) +"Ks" = ( +/obj/effect/turf_decal/siding/yellow/corner{ + dir = 8 + }, +/turf/open/indestructible/dark/smooth_large, +/area/deathmatch) +"KH" = ( +/obj/effect/turf_decal/siding/dark_red{ + dir = 4 + }, +/obj/effect/light_emitter/thunderdome, +/turf/open/indestructible/dark/smooth_large, +/area/deathmatch) +"KT" = ( +/obj/effect/turf_decal/siding/yellow{ + dir = 8 + }, +/obj/effect/light_emitter/thunderdome, +/turf/open/indestructible/dark/smooth_large, +/area/deathmatch) +"LD" = ( +/obj/structure/lattice/catwalk/mining, +/obj/structure/railing, +/turf/open/chasm, +/area/deathmatch) +"LY" = ( +/obj/effect/turf_decal/siding/blue/corner{ + dir = 8 + }, +/obj/effect/turf_decal/siding/blue{ + dir = 5 + }, +/turf/open/indestructible/large, +/area/deathmatch) +"NE" = ( +/obj/effect/turf_decal/siding/dark_red/corner{ + dir = 1 + }, +/obj/effect/turf_decal/siding/dark_red{ + dir = 6 + }, +/turf/open/indestructible/large, +/area/deathmatch) +"NN" = ( +/obj/effect/turf_decal/siding/dark_red{ + dir = 4 + }, +/turf/open/indestructible/large, +/area/deathmatch) +"Pg" = ( +/obj/effect/turf_decal/siding/dark_green{ + dir = 1 + }, +/turf/open/indestructible/dark/smooth_large, +/area/deathmatch) +"Qn" = ( +/obj/effect/turf_decal/siding/dark_green{ + dir = 4 + }, +/obj/effect/turf_decal/siding/dark_green{ + dir = 8 + }, +/turf/open/indestructible/large, +/area/deathmatch) +"Qy" = ( +/obj/effect/turf_decal/siding/yellow/corner, +/obj/effect/turf_decal/siding/yellow/corner{ + dir = 8 + }, +/turf/open/indestructible/large, +/area/deathmatch) +"QA" = ( +/obj/effect/turf_decal/siding/blue{ + dir = 4 + }, +/turf/open/indestructible/large, +/area/deathmatch) +"QR" = ( +/obj/effect/turf_decal/siding/yellow, +/obj/effect/turf_decal/siding/yellow{ + dir = 1 + }, +/turf/open/indestructible/dark/smooth_large, +/area/deathmatch) +"QS" = ( +/obj/effect/turf_decal/siding/dark_red, +/obj/effect/turf_decal/siding/dark_red{ + dir = 1 + }, +/obj/effect/landmark/deathmatch_player_spawn, +/turf/open/indestructible/dark/smooth_large, +/area/deathmatch) +"TA" = ( +/obj/effect/turf_decal/siding/yellow, +/obj/effect/light_emitter/thunderdome, +/turf/open/indestructible/dark/smooth_large, +/area/deathmatch) +"TB" = ( +/obj/effect/turf_decal/siding/blue{ + dir = 1 + }, +/obj/effect/light_emitter/thunderdome, +/turf/open/indestructible/dark/smooth_large, +/area/deathmatch) +"Uc" = ( +/obj/effect/turf_decal/siding/yellow{ + dir = 8 + }, +/obj/effect/turf_decal/siding/yellow{ + dir = 4 + }, +/obj/effect/landmark/deathmatch_player_spawn, +/turf/open/indestructible/dark/smooth_large, +/area/deathmatch) +"Vh" = ( +/obj/effect/turf_decal/siding/yellow{ + dir = 8 + }, +/turf/open/indestructible/dark/smooth_large, +/area/deathmatch) +"Vn" = ( +/obj/effect/turf_decal/siding/dark_green{ + dir = 6 + }, +/obj/effect/turf_decal/siding/dark_green/corner{ + dir = 1 + }, +/turf/open/indestructible/dark/smooth_large, +/area/deathmatch) +"VH" = ( +/obj/effect/turf_decal/siding/dark_green/corner{ + dir = 8 + }, +/obj/effect/turf_decal/siding/dark_green/corner{ + dir = 1 + }, +/turf/open/indestructible/large, +/area/deathmatch) +"VK" = ( +/obj/effect/turf_decal/siding/dark_red, +/turf/open/indestructible/dark/smooth_large, +/area/deathmatch) +"Wr" = ( +/obj/effect/turf_decal/siding/dark_green{ + dir = 9 + }, +/obj/effect/light_emitter/thunderdome, +/turf/open/indestructible/dark/smooth_large, +/area/deathmatch) +"Wz" = ( +/obj/effect/turf_decal/siding/dark_red/corner, +/obj/effect/turf_decal/siding/dark_red{ + dir = 9 + }, +/turf/open/indestructible/dark/smooth_large, +/area/deathmatch) +"XR" = ( +/obj/effect/turf_decal/siding/blue{ + dir = 8 + }, +/obj/effect/turf_decal/siding/blue{ + dir = 4 + }, +/turf/open/indestructible/large, +/area/deathmatch) +"Yd" = ( +/obj/effect/turf_decal/siding/yellow{ + dir = 8 + }, +/obj/effect/turf_decal/siding/yellow{ + dir = 4 + }, +/turf/open/indestructible/dark/smooth_large, +/area/deathmatch) +"YI" = ( +/obj/structure/lattice, +/turf/open/chasm, +/area/deathmatch) + +(1,1,1) = {" +kR +kR +kR +kR +kR +kR +kR +kR +kR +kR +kR +kR +kR +kR +kR +kR +kR +kR +kR +kR +kR +kR +kR +kR +"} +(2,1,1) = {" +kR +Fd +Fd +Fd +Fd +Fd +Fd +Fd +Fd +Fd +Fd +kR +kR +Fd +Fd +Fd +Fd +Fd +Fd +Fd +Fd +Fd +Fd +kR +"} +(3,1,1) = {" +kR +Fd +Wz +HM +HM +HM +HM +yJ +HM +HM +rS +Fd +Fd +gs +vn +vn +eN +vn +vn +vn +vn +xQ +Fd +kR +"} +(4,1,1) = {" +kR +Fd +CE +lD +NN +NN +NN +NN +NN +NN +Cw +NN +QA +vz +QA +QA +QA +QA +QA +QA +ry +jl +Fd +kR +"} +(5,1,1) = {" +kR +Fd +CE +vF +Fd +FB +FB +xc +FB +Fd +oE +Ei +bF +Jq +Fd +FB +xc +FB +FB +Fd +wl +jl +Fd +kR +"} +(6,1,1) = {" +kR +Fd +CE +vF +LD +kR +kR +YI +kR +hk +oE +VK +oX +Jq +LD +kR +YI +kR +kR +hk +wl +jl +Fd +kR +"} +(7,1,1) = {" +kR +Fd +CE +vF +LD +kR +kR +YI +kR +hk +oE +BM +TB +Jq +LD +kR +YI +kR +kR +hk +wl +jl +Fd +kR +"} +(8,1,1) = {" +kR +Fd +QS +vF +xc +YI +YI +YI +YI +xc +oE +BM +TB +Jq +xc +YI +YI +YI +YI +xc +wl +Kn +Fd +kR +"} +(9,1,1) = {" +kR +Fd +CE +vF +LD +kR +kR +YI +kR +hk +oE +VK +oX +Jq +LD +kR +YI +kR +kR +hk +wl +jl +Fd +kR +"} +(10,1,1) = {" +kR +Fd +CE +vF +Fd +tB +tB +xc +tB +Fd +oE +VK +oX +Jq +Fd +tB +xc +tB +tB +Fd +wl +jl +Fd +kR +"} +(11,1,1) = {" +kR +Fd +ok +xv +lJ +lJ +lJ +lJ +lJ +lJ +NE +VK +oX +LY +XR +XR +XR +XR +XR +XR +vV +Bz +Fd +kR +"} +(12,1,1) = {" +kR +kR +Fd +vF +Ei +Cj +KH +KH +Cj +Cj +Cj +cu +JS +lq +lq +lq +jb +jb +lq +bF +wl +Fd +kR +kR +"} +(13,1,1) = {" +kR +kR +Fd +qm +Ks +Vh +KT +KT +Vh +Vh +Vh +Df +Wr +qg +qg +qg +xq +xq +qg +eb +pg +Fd +kR +kR +"} +(14,1,1) = {" +kR +Fd +sb +Qy +Ge +Ge +Ge +Ge +Ge +Ge +zB +CS +Pg +IP +Qn +Qn +Qn +Qn +Qn +Qn +ou +fp +Fd +kR +"} +(15,1,1) = {" +kR +Fd +QR +qm +Fd +FB +FB +xc +FB +Fd +Dc +CS +Pg +pE +Fd +FB +xc +FB +FB +Fd +pg +os +Fd +kR +"} +(16,1,1) = {" +kR +Fd +QR +qm +LD +kR +kR +YI +kR +hk +Dc +CS +Pg +pE +LD +kR +YI +kR +kR +hk +pg +os +Fd +kR +"} +(17,1,1) = {" +kR +Fd +Jw +qm +xc +YI +YI +YI +YI +xc +Dc +TA +Es +pE +xc +YI +YI +YI +YI +xc +pg +Hm +Fd +kR +"} +(18,1,1) = {" +kR +Fd +QR +qm +LD +kR +kR +YI +kR +hk +Dc +TA +Es +pE +LD +kR +YI +kR +kR +hk +pg +os +Fd +kR +"} +(19,1,1) = {" +kR +Fd +QR +qm +LD +kR +kR +YI +kR +hk +Dc +CS +Pg +pE +LD +kR +YI +kR +kR +hk +pg +os +Fd +kR +"} +(20,1,1) = {" +kR +Fd +QR +qm +Fd +tB +tB +xc +tB +Fd +Dc +Ks +eb +pE +Fd +tB +xc +tB +tB +Fd +pg +os +Fd +kR +"} +(21,1,1) = {" +kR +Fd +QR +Ev +Hg +Hg +Hg +Hg +Hg +Hg +bV +Hg +AS +VH +AS +AS +AS +AS +AS +AS +cW +os +Fd +kR +"} +(22,1,1) = {" +kR +Fd +sL +Yd +Yd +Yd +Yd +Uc +Yd +Yd +ae +Fd +Fd +Ij +kS +kS +tF +kS +kS +kS +kS +Vn +Fd +kR +"} +(23,1,1) = {" +kR +Fd +Fd +Fd +Fd +Fd +Fd +Fd +Fd +Fd +Fd +kR +kR +Fd +Fd +Fd +Fd +Fd +Fd +Fd +Fd +Fd +Fd +kR +"} +(24,1,1) = {" +kR +kR +kR +kR +kR +kR +kR +kR +kR +kR +kR +kR +kR +kR +kR +kR +kR +kR +kR +kR +kR +kR +kR +kR +"} diff --git a/_maps/deathmatch/maint_mania.dmm b/_maps/deathmatch/maint_mania.dmm index 8bb2522bc5dfa..5b23ac38feb8f 100644 --- a/_maps/deathmatch/maint_mania.dmm +++ b/_maps/deathmatch/maint_mania.dmm @@ -193,7 +193,7 @@ /turf/open/indestructible, /area/deathmatch) "zF" = ( -/obj/item/ammo_casing/shotgun/improvised, +/obj/effect/spawner/random/junk_shell, /turf/open/indestructible, /area/deathmatch) "AG" = ( diff --git a/_maps/deathmatch/meta_brig.dmm b/_maps/deathmatch/meta_brig.dmm index 208b2c994737d..60b8d8a471b0a 100644 --- a/_maps/deathmatch/meta_brig.dmm +++ b/_maps/deathmatch/meta_brig.dmm @@ -258,6 +258,16 @@ "du" = ( /turf/closed/indestructible/fakedoor, /area/deathmatch) +"dy" = ( +/obj/structure/chair/stool/directional/east, +/obj/effect/turf_decal/trimline/red/warning{ + dir = 4 + }, +/obj/machinery/flasher/directional/north{ + id = "visitorflash" + }, +/turf/open/floor/iron, +/area/deathmatch) "dA" = ( /obj/effect/turf_decal/tile/blue{ dir = 8 @@ -451,12 +461,7 @@ /area/deathmatch) "hS" = ( /obj/structure/table/wood, -/obj/machinery/computer/security/telescreen{ - desc = "Used for watching Prison Wing holding areas."; - name = "Prison Monitor"; - network = list("prison"); - pixel_y = 30 - }, +/obj/machinery/computer/security/telescreen/prison/directional/north, /obj/item/flashlight/lamp/green{ pixel_x = 1; pixel_y = 5 @@ -1630,8 +1635,13 @@ /turf/open/indestructible/dark, /area/deathmatch) "yN" = ( -/turf/cordon, -/area/template_noop) +/obj/effect/decal/cleanable/dirt, +/obj/structure/chair/stool/directional/east, +/obj/effect/turf_decal/trimline/red/warning{ + dir = 4 + }, +/turf/open/floor/iron, +/area/deathmatch) "yO" = ( /obj/effect/turf_decal/trimline/red/filled/line{ dir = 4 @@ -2880,13 +2890,7 @@ /turf/open/indestructible, /area/deathmatch) "PV" = ( -/obj/machinery/computer/security/telescreen{ - desc = "Used for watching Prison Wing holding areas."; - dir = 1; - name = "Prison Monitor"; - network = list("prison"); - pixel_y = -30 - }, +/obj/machinery/computer/security/telescreen/prison/directional/south, /obj/structure/cable, /obj/effect/turf_decal/tile/red{ dir = 8 @@ -3629,8 +3633,8 @@ IJ Yh Yh Yh -yN -yN +dy +YW yN IJ IJ diff --git a/_maps/deathmatch/ragecage.dmm b/_maps/deathmatch/ragecage.dmm index b5871e89c24f1..a96ab76b53829 100644 --- a/_maps/deathmatch/ragecage.dmm +++ b/_maps/deathmatch/ragecage.dmm @@ -208,31 +208,8 @@ /obj/item/storage/toolbox/mechanical/old, /turf/open/indestructible/plating, /area/deathmatch) -"Z" = ( -/turf/cordon, -/area/deathmatch) (1,1,1) = {" -Z -Z -Z -Z -Z -Z -Z -Z -Z -Z -Z -Z -Z -Z -Z -Z -Z -"} -(2,1,1) = {" -Z G G H @@ -248,10 +225,8 @@ G H G G -Z "} -(3,1,1) = {" -Z +(2,1,1) = {" G p u @@ -267,10 +242,8 @@ U U f G -Z "} -(4,1,1) = {" -Z +(3,1,1) = {" G U B @@ -286,10 +259,8 @@ V V X G -Z "} -(5,1,1) = {" -Z +(4,1,1) = {" G U L @@ -305,10 +276,8 @@ A g U G -Z "} -(6,1,1) = {" -Z +(5,1,1) = {" G U d @@ -324,10 +293,8 @@ U x U G -Z "} -(7,1,1) = {" -Z +(6,1,1) = {" G X d @@ -343,10 +310,8 @@ U x U q -Z "} -(8,1,1) = {" -Z +(7,1,1) = {" G U d @@ -362,10 +327,8 @@ U R U G -Z "} -(9,1,1) = {" -Z +(8,1,1) = {" G U d @@ -381,10 +344,8 @@ U R U o -Z "} -(10,1,1) = {" -Z +(9,1,1) = {" G D d @@ -400,10 +361,8 @@ t R D o -Z "} -(11,1,1) = {" -Z +(10,1,1) = {" G U d @@ -419,10 +378,8 @@ U R U o -Z "} -(12,1,1) = {" -Z +(11,1,1) = {" G I d @@ -438,10 +395,8 @@ U R U G -Z "} -(13,1,1) = {" -Z +(12,1,1) = {" G U d @@ -457,10 +412,8 @@ i R I q -Z "} -(14,1,1) = {" -Z +(13,1,1) = {" G U d @@ -476,10 +429,8 @@ M R U G -Z "} -(15,1,1) = {" -Z +(14,1,1) = {" G U z @@ -495,10 +446,8 @@ P K U G -Z "} -(16,1,1) = {" -Z +(15,1,1) = {" G U m @@ -514,10 +463,8 @@ m m U G -Z "} -(17,1,1) = {" -Z +(16,1,1) = {" G f U @@ -533,10 +480,8 @@ U U f G -Z "} -(18,1,1) = {" -Z +(17,1,1) = {" G G H @@ -552,24 +497,4 @@ G H G G -Z -"} -(19,1,1) = {" -Z -Z -Z -Z -Z -Z -Z -Z -Z -Z -Z -Z -Z -Z -Z -Z -Z "} diff --git a/_maps/deathmatch/ragin_mages.dmm b/_maps/deathmatch/ragin_mages.dmm index 37939643b7275..3dcdb966d1147 100644 --- a/_maps/deathmatch/ragin_mages.dmm +++ b/_maps/deathmatch/ragin_mages.dmm @@ -47,7 +47,7 @@ /area/deathmatch/teleport) "ct" = ( /obj/structure/flora/bush/grassy/style_random, -/mob/living/simple_animal/pet/gondola{ +/mob/living/basic/pet/gondola{ name = "Jommy"; faction = list("gondola", "Wizard") }, @@ -761,11 +761,8 @@ /turf/open/floor/engine/cult, /area/deathmatch/teleport) "Xv" = ( +/obj/structure/railing, /obj/structure/railing{ - layer = 3.1 - }, -/obj/structure/railing{ - layer = 3.1; dir = 1 }, /turf/open/floor/engine/cult, diff --git a/_maps/deathmatch/train.dmm b/_maps/deathmatch/train.dmm new file mode 100644 index 0000000000000..3f0619d1ab4b8 --- /dev/null +++ b/_maps/deathmatch/train.dmm @@ -0,0 +1,2421 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"ai" = ( +/obj/structure/table_frame/wood, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/wood/tile, +/area/deathmatch) +"as" = ( +/obj/effect/particle_effect/ion_trails/flight{ + icon_state = "shieldwall" + }, +/turf/open/chasm/true/no_smooth/fake_motion_sand/fast, +/area/deathmatch) +"at" = ( +/turf/open/floor/wood/tile, +/area/deathmatch) +"be" = ( +/obj/effect/turf_decal/siding/thinplating_new{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/landmark/deathmatch_player_spawn, +/turf/open/indestructible/plating, +/area/deathmatch) +"bR" = ( +/obj/effect/landmark/deathmatch_player_spawn, +/obj/effect/decal/cleanable/blood/old, +/turf/open/floor/iron/kitchen, +/area/deathmatch) +"bY" = ( +/obj/structure/railing{ + dir = 6 + }, +/obj/structure/closet/crate/secure/weapon{ + locked = 0 + }, +/obj/effect/decal/cleanable/fuel_pool/hivis, +/obj/item/ammo_box/c38, +/obj/effect/turf_decal/stripes/asteroid/line{ + dir = 6 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/indestructible/plating, +/area/deathmatch) +"ca" = ( +/obj/effect/decal/cleanable/glass, +/obj/effect/mapping_helpers/broken_floor, +/obj/structure/girder/displaced, +/turf/open/indestructible/plating, +/area/deathmatch) +"ci" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/turf_decal/stripes/asteroid/line{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/indestructible/plating, +/area/deathmatch) +"cr" = ( +/obj/item/chair/wood, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/wood/tile, +/area/deathmatch) +"cv" = ( +/obj/structure/safe, +/obj/item/gun/energy/laser/instakill, +/obj/effect/decal/cleanable/blood/old, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/indestructible/plating, +/area/deathmatch) +"cy" = ( +/obj/effect/spawner/structure/window/hollow/middle{ + dir = 4 + }, +/turf/open/indestructible/plating, +/area/deathmatch) +"cU" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/item/grenade/syndieminibomb/concussion, +/turf/open/indestructible/plating, +/area/deathmatch) +"dB" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/turf_decal/siding/thinplating_new{ + dir = 4 + }, +/turf/open/indestructible/plating, +/area/deathmatch) +"dU" = ( +/obj/structure/grille/broken, +/obj/effect/decal/cleanable/glass, +/turf/open/indestructible/plating, +/area/deathmatch) +"ec" = ( +/obj/item/ammo_casing/shotgun/breacher, +/obj/effect/decal/cleanable/blood/old, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/indestructible/plating, +/area/deathmatch) +"eA" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/structure/girder/displaced, +/turf/open/indestructible/plating, +/area/deathmatch) +"fa" = ( +/obj/structure/chair/wood{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/wood, +/area/deathmatch) +"fJ" = ( +/obj/effect/turf_decal/siding/thinplating_new{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/indestructible/plating, +/area/deathmatch) +"gL" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/turf_decal/siding/thinplating_new{ + dir = 4 + }, +/obj/effect/decal/fakelattice{ + density = 0 + }, +/turf/open/indestructible/plating, +/area/deathmatch) +"gN" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/decal/cleanable/fuel_pool/hivis, +/obj/effect/turf_decal/stripes/asteroid/line{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/indestructible/plating, +/area/deathmatch) +"hR" = ( +/obj/structure/chair/wood, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/wood/tile, +/area/deathmatch) +"hZ" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/wood/tile, +/area/deathmatch) +"ii" = ( +/obj/structure/closet/crate/critter{ + mob_storage_capacity = 33 + }, +/mob/living/basic/mothroach, +/mob/living/basic/mothroach, +/mob/living/basic/mothroach, +/mob/living/basic/mothroach, +/mob/living/basic/mothroach, +/mob/living/basic/mothroach, +/mob/living/basic/mothroach, +/mob/living/basic/mothroach, +/mob/living/basic/mothroach, +/mob/living/basic/mothroach, +/mob/living/basic/mothroach, +/mob/living/basic/mothroach, +/mob/living/basic/mothroach, +/mob/living/basic/mothroach, +/mob/living/basic/mothroach, +/mob/living/basic/mothroach, +/obj/effect/decal/cleanable/dirt, +/turf/open/indestructible/plating, +/area/deathmatch) +"il" = ( +/obj/effect/light_emitter/fake_outdoors, +/obj/effect/particle_effect/ion_trails/flight{ + icon_state = "shieldwall" + }, +/turf/open/chasm/true/no_smooth/fake_motion_sand/fast, +/area/deathmatch) +"jj" = ( +/obj/machinery/power/shuttle_engine/heater, +/obj/structure/window/spawner/directional/north, +/turf/open/indestructible/plating, +/area/deathmatch) +"jq" = ( +/obj/effect/turf_decal/siding/thinplating_new{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/item/storage/toolbox/mechanical, +/turf/open/indestructible/plating, +/area/deathmatch) +"kd" = ( +/obj/structure/closet/crate/bin, +/obj/effect/decal/cleanable/blood/old, +/turf/open/floor/iron/kitchen, +/area/deathmatch) +"ke" = ( +/obj/effect/spawner/structure/window/hollow/middle, +/turf/open/indestructible/plating, +/area/deathmatch) +"kt" = ( +/obj/structure/table/reinforced, +/obj/item/gun/ballistic/automatic/pistol/m1911, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/wood, +/area/deathmatch) +"kR" = ( +/obj/effect/decal/fakelattice{ + density = 0 + }, +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/turf/open/floor/wood, +/area/deathmatch) +"lJ" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/turf_decal/siding/thinplating_new{ + dir = 8 + }, +/turf/open/indestructible/plating, +/area/deathmatch) +"mi" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/machinery/computer/old{ + dir = 8 + }, +/turf/open/floor/wood, +/area/deathmatch) +"mr" = ( +/obj/structure/chair/wood, +/turf/open/floor/wood/tile, +/area/deathmatch) +"mS" = ( +/obj/structure/barricade/wooden, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/indestructible/plating, +/area/deathmatch) +"mW" = ( +/obj/structure/railing{ + dir = 4 + }, +/obj/structure/closet/crate/secure/weapon{ + locked = 0 + }, +/obj/effect/decal/cleanable/fuel_pool/hivis, +/obj/item/ammo_box/c38, +/obj/effect/turf_decal/stripes/asteroid/line{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/indestructible/plating, +/area/deathmatch) +"nj" = ( +/obj/effect/decal/fakelattice{ + density = 0 + }, +/obj/effect/decal/cleanable/glass, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/indestructible/plating, +/area/deathmatch) +"oo" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/wood, +/area/deathmatch) +"pm" = ( +/obj/effect/decal/cleanable/blood/old, +/turf/open/floor/iron/kitchen, +/area/deathmatch) +"pO" = ( +/obj/structure/railing{ + dir = 8 + }, +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/decal/cleanable/fuel_pool/hivis, +/obj/structure/closet/crate, +/obj/effect/turf_decal/stripes/asteroid/line{ + dir = 8 + }, +/obj/item/storage/medkit/brute, +/obj/item/reagent_containers/hypospray/medipen, +/obj/effect/decal/cleanable/dirt, +/turf/open/indestructible/plating, +/area/deathmatch) +"qJ" = ( +/obj/effect/turf_decal/siding/thinplating_new{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/closet/crate, +/obj/item/extinguisher, +/obj/item/extinguisher/anti, +/turf/open/indestructible/plating, +/area/deathmatch) +"qY" = ( +/obj/effect/landmark/deathmatch_player_spawn, +/obj/effect/decal/cleanable/blood/old, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/indestructible/plating, +/area/deathmatch) +"rd" = ( +/obj/structure/chair/comfy/shuttle/tactical{ + dir = 1 + }, +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/decal/cleanable/dirt, +/turf/open/indestructible/plating, +/area/deathmatch) +"ru" = ( +/obj/structure/table/wood, +/obj/item/food/spaghetti/pastatomato, +/obj/item/knife/kitchen, +/turf/open/floor/wood/tile, +/area/deathmatch) +"ry" = ( +/obj/item/stack/rods/ten, +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/turf_decal/stripes/asteroid/line{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/fakelattice{ + density = 0 + }, +/turf/open/indestructible/plating, +/area/deathmatch) +"rM" = ( +/obj/structure/shipping_container/deforest, +/obj/structure/railing{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/asteroid/line{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/indestructible/plating, +/area/deathmatch) +"rZ" = ( +/obj/structure/girder, +/obj/structure/railing{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/asteroid/line{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/indestructible/plating, +/area/deathmatch) +"sp" = ( +/obj/structure/girder/displaced, +/turf/open/indestructible/plating, +/area/deathmatch) +"ty" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/effect/decal/fakelattice{ + density = 0 + }, +/turf/open/floor/wood, +/area/deathmatch) +"tQ" = ( +/obj/machinery/oven/range, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/iron/kitchen, +/area/deathmatch) +"uM" = ( +/obj/structure/railing{ + dir = 4 + }, +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/turf_decal/stripes/asteroid/line{ + dir = 4 + }, +/obj/item/spear, +/obj/effect/decal/cleanable/dirt, +/turf/open/indestructible/plating, +/area/deathmatch) +"vl" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/turf_decal/siding/thinplating_new{ + dir = 8 + }, +/obj/effect/decal/fakelattice{ + density = 0 + }, +/turf/open/indestructible/plating, +/area/deathmatch) +"vV" = ( +/obj/effect/decal/cleanable/fuel_pool/hivis, +/obj/effect/decal/cleanable/dirt, +/obj/item/storage/bag/money, +/turf/open/indestructible/plating, +/area/deathmatch) +"vW" = ( +/obj/structure/lattice/catwalk, +/obj/structure/door_assembly/door_assembly_wood, +/turf/open/chasm/true/no_smooth/fake_motion_sand/fast, +/area/deathmatch) +"wf" = ( +/turf/open/floor/wood, +/area/deathmatch) +"wm" = ( +/obj/structure/door_assembly/door_assembly_wood, +/obj/effect/decal/fakelattice{ + density = 0 + }, +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/turf/open/floor/wood, +/area/deathmatch) +"wv" = ( +/obj/effect/turf_decal/siding/thinplating_new{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/item/reagent_containers/cup/bucket/wooden, +/obj/item/flashlight/flare/torch, +/turf/open/indestructible/plating, +/area/deathmatch) +"wy" = ( +/obj/structure/chair/wood{ + dir = 1 + }, +/obj/effect/decal/cleanable/glass, +/obj/effect/decal/cleanable/blood/old, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/indestructible/plating, +/area/deathmatch) +"wE" = ( +/obj/effect/spawner/structure/window, +/turf/open/indestructible/plating, +/area/deathmatch) +"wR" = ( +/obj/effect/turf_decal/siding/thinplating_new{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/fermenting_barrel/gunpowder, +/obj/item/stack/cannonball/the_big_one, +/turf/open/indestructible/plating, +/area/deathmatch) +"xd" = ( +/obj/machinery/computer/old, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/wood, +/area/deathmatch) +"xn" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/wood, +/area/deathmatch) +"xp" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/decal/fakelattice{ + density = 0 + }, +/turf/open/floor/wood, +/area/deathmatch) +"xN" = ( +/obj/structure/railing, +/obj/effect/decal/cleanable/fuel_pool/hivis, +/obj/structure/reagent_dispensers/fueltank/large, +/obj/effect/turf_decal/stripes/asteroid/line, +/obj/effect/decal/cleanable/dirt, +/turf/open/indestructible/plating, +/area/deathmatch) +"xV" = ( +/obj/effect/decal/cleanable/glass, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/indestructible/plating, +/area/deathmatch) +"yi" = ( +/obj/structure/barricade/wooden/crude, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/indestructible/plating, +/area/deathmatch) +"yr" = ( +/obj/effect/light_emitter/fake_outdoors, +/turf/open/chasm/true/no_smooth/fake_motion_sand/fast, +/area/deathmatch) +"yR" = ( +/obj/effect/turf_decal/stripes/asteroid/line{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/indestructible/plating, +/area/deathmatch) +"ze" = ( +/obj/machinery/door/airlock/wood/glass, +/obj/effect/turf_decal/siding/wood/corner, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 8 + }, +/turf/open/floor/wood, +/area/deathmatch) +"zg" = ( +/obj/machinery/power/shuttle_engine/propulsion, +/turf/open/indestructible/plating, +/area/deathmatch) +"zP" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/decal/cleanable/dirt, +/turf/open/indestructible/plating, +/area/deathmatch) +"An" = ( +/obj/structure/grille/broken, +/obj/item/shard, +/obj/effect/decal/cleanable/glass, +/turf/open/indestructible/plating, +/area/deathmatch) +"AR" = ( +/obj/effect/decal/cleanable/fuel_pool/hivis, +/obj/effect/decal/cleanable/dirt, +/turf/open/indestructible/plating, +/area/deathmatch) +"Bx" = ( +/obj/effect/turf_decal/siding/thinplating_new{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cannon{ + anchorable_cannon = 0; + anchored = 0 + }, +/turf/open/indestructible/plating, +/area/deathmatch) +"BC" = ( +/obj/item/ammo_casing/shotgun/scatterlaser, +/obj/structure/kitchenspike, +/obj/effect/decal/cleanable/blood/old, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/indestructible/plating, +/area/deathmatch) +"BN" = ( +/obj/structure/table_frame/wood, +/turf/open/floor/wood/tile, +/area/deathmatch) +"CN" = ( +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/wood/tile, +/area/deathmatch) +"CO" = ( +/obj/structure/chair/wood{ + dir = 1 + }, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/wood/tile, +/area/deathmatch) +"CX" = ( +/obj/structure/girder, +/obj/structure/railing{ + dir = 8 + }, +/obj/effect/decal/cleanable/fuel_pool/hivis, +/obj/effect/turf_decal/stripes/asteroid/line{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/indestructible/plating, +/area/deathmatch) +"Da" = ( +/obj/structure/reagent_dispensers/fueltank, +/turf/open/floor/wood, +/area/deathmatch) +"Du" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/wood/tile, +/area/deathmatch) +"Dy" = ( +/obj/machinery/door/airlock/wood/glass, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 1 + }, +/turf/open/floor/wood, +/area/deathmatch) +"Ej" = ( +/obj/effect/spawner/structure/window/hollow/reinforced/end, +/turf/open/indestructible/plating, +/area/deathmatch) +"ED" = ( +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/iron/kitchen, +/area/deathmatch) +"EH" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/turf_decal/stripes/asteroid/line{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/obj/item/storage/toolbox/mechanical, +/turf/open/indestructible/plating, +/area/deathmatch) +"EU" = ( +/obj/item/stack/rods/ten, +/obj/effect/decal/cleanable/fuel_pool/hivis, +/obj/effect/decal/cleanable/dirt, +/turf/open/indestructible/plating, +/area/deathmatch) +"EX" = ( +/obj/structure/lattice/catwalk, +/obj/item/ammo_box/c38/match, +/turf/open/chasm/true/no_smooth/fake_motion_sand/fast, +/area/deathmatch) +"Fa" = ( +/obj/structure/girder, +/obj/structure/railing{ + dir = 9 + }, +/obj/effect/turf_decal/stripes/asteroid/line{ + dir = 9 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/indestructible/plating, +/area/deathmatch) +"Fh" = ( +/obj/effect/decal/cleanable/dirt, +/obj/item/storage/bag/money, +/turf/open/indestructible/plating, +/area/deathmatch) +"Fs" = ( +/obj/effect/mapping_helpers/broken_floor, +/turf/open/indestructible/plating, +/area/deathmatch) +"FB" = ( +/obj/effect/spawner/structure/window/hollow/reinforced/end{ + dir = 1 + }, +/turf/open/indestructible/plating, +/area/deathmatch) +"Ge" = ( +/obj/structure/lattice/catwalk, +/obj/item/storage/medkit/ancient, +/turf/open/chasm/true/no_smooth/fake_motion_sand/fast, +/area/deathmatch) +"Gl" = ( +/obj/structure/barricade/wooden/crude, +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/turf_decal/siding/thinplating_new{ + dir = 8 + }, +/turf/open/indestructible/plating, +/area/deathmatch) +"Gx" = ( +/obj/effect/turf_decal/siding/wood, +/obj/machinery/door/airlock/wood/glass, +/turf/open/floor/iron/kitchen, +/area/deathmatch) +"GQ" = ( +/obj/effect/decal/cleanable/blood/old, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/indestructible/plating, +/area/deathmatch) +"Ht" = ( +/obj/structure/girder, +/obj/structure/railing{ + dir = 10 + }, +/obj/effect/decal/cleanable/fuel_pool/hivis, +/obj/effect/turf_decal/stripes/asteroid/line{ + dir = 10 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/indestructible/plating, +/area/deathmatch) +"Hx" = ( +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/wood, +/area/deathmatch) +"HH" = ( +/obj/machinery/door/airlock/wood/glass, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/turf/open/floor/wood, +/area/deathmatch) +"HV" = ( +/obj/item/stack/rods/ten, +/obj/effect/decal/cleanable/dirt, +/turf/open/indestructible/plating, +/area/deathmatch) +"HZ" = ( +/obj/structure/girder, +/obj/structure/railing{ + dir = 5 + }, +/obj/effect/turf_decal/stripes/asteroid/line{ + dir = 5 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/indestructible/plating, +/area/deathmatch) +"ID" = ( +/obj/effect/landmark/deathmatch_player_spawn, +/turf/open/floor/wood, +/area/deathmatch) +"IJ" = ( +/obj/structure/kitchenspike, +/obj/effect/decal/cleanable/blood/old, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/indestructible/plating, +/area/deathmatch) +"IR" = ( +/obj/structure/lattice/catwalk, +/obj/item/shield/improvised, +/turf/open/chasm/true/no_smooth/fake_motion_sand/fast, +/area/deathmatch) +"Je" = ( +/obj/structure/lattice/catwalk, +/turf/open/chasm/true/no_smooth/fake_motion_sand/fast, +/area/deathmatch) +"Js" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/decal/cleanable/fuel_pool/hivis, +/obj/effect/turf_decal/stripes/asteroid/line, +/obj/effect/decal/cleanable/dirt, +/turf/open/indestructible/plating, +/area/deathmatch) +"Kv" = ( +/obj/structure/table/reinforced, +/obj/item/gun/ballistic/shotgun/doublebarrel, +/obj/effect/decal/cleanable/blood/old, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/indestructible/plating, +/area/deathmatch) +"KT" = ( +/turf/closed/wall/r_wall, +/area/deathmatch) +"LX" = ( +/obj/effect/decal/cleanable/glass, +/obj/structure/girder/displaced, +/turf/open/indestructible/plating, +/area/deathmatch) +"Mq" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/decal/cleanable/fuel_pool/hivis, +/obj/effect/decal/cleanable/dirt, +/turf/open/indestructible/plating, +/area/deathmatch) +"Mt" = ( +/turf/open/chasm/true/no_smooth/fake_motion_sand/fast, +/area/deathmatch) +"Mz" = ( +/obj/machinery/door/airlock/wood/glass, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/indestructible/plating, +/area/deathmatch) +"MV" = ( +/obj/effect/decal/fakelattice{ + density = 0 + }, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/indestructible/plating, +/area/deathmatch) +"Ow" = ( +/obj/item/ammo_casing/shotgun/pulverizer, +/obj/structure/kitchenspike, +/obj/effect/decal/cleanable/blood/old, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/indestructible/plating, +/area/deathmatch) +"Pa" = ( +/obj/effect/landmark/deathmatch_player_spawn, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/indestructible/plating, +/area/deathmatch) +"Pc" = ( +/obj/structure/table/reinforced, +/obj/item/storage/fancy/cigarettes/cigars/cohiba, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/wood, +/area/deathmatch) +"PD" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/machinery/vending/dinnerware, +/turf/open/floor/iron/kitchen, +/area/deathmatch) +"QL" = ( +/obj/machinery/computer/old, +/obj/effect/mapping_helpers/broken_machine, +/turf/open/indestructible/plating, +/area/deathmatch) +"Rg" = ( +/obj/item/chair/wood, +/turf/open/floor/wood/tile, +/area/deathmatch) +"Rn" = ( +/obj/effect/decal/cleanable/glass, +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/decal/cleanable/dirt, +/turf/open/indestructible/plating, +/area/deathmatch) +"Se" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/turf/open/floor/wood, +/area/deathmatch) +"Sm" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/indestructible/plating, +/area/deathmatch) +"Sy" = ( +/obj/structure/lattice, +/turf/open/chasm/true/no_smooth/fake_motion_sand/fast, +/area/deathmatch) +"Tg" = ( +/obj/structure/table/reinforced, +/obj/item/food/meat/slab/pig, +/obj/item/food/meat/slab/pig, +/obj/item/food/meat/slab/pig, +/obj/item/food/meat/slab/pig, +/obj/item/food/meat/slab/pig, +/turf/open/floor/iron/kitchen, +/area/deathmatch) +"TA" = ( +/obj/machinery/griddle, +/obj/effect/decal/cleanable/blood/old, +/turf/open/floor/iron/kitchen, +/area/deathmatch) +"Uq" = ( +/obj/structure/lattice/catwalk, +/obj/item/ammo_casing/shotgun/executioner, +/turf/open/chasm/true/no_smooth/fake_motion_sand/fast, +/area/deathmatch) +"Vc" = ( +/obj/effect/decal/cleanable/glass, +/obj/effect/decal/cleanable/blood/old, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/indestructible/plating, +/area/deathmatch) +"Vu" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/structure/girder, +/turf/open/indestructible/plating, +/area/deathmatch) +"VS" = ( +/obj/structure/closet/secure_closet/freezer/kitchen{ + req_access = null + }, +/obj/item/food/grown/potato, +/obj/item/food/grown/potato, +/obj/item/food/grown/potato, +/obj/item/food/grown/potato, +/obj/item/food/grown/potato, +/obj/item/food/grown/potato, +/obj/item/food/grown/potato, +/obj/effect/decal/cleanable/blood/old, +/turf/open/floor/iron/kitchen, +/area/deathmatch) +"VT" = ( +/obj/structure/table/reinforced, +/obj/item/knife/kitchen, +/turf/open/floor/iron/kitchen, +/area/deathmatch) +"Wa" = ( +/turf/closed/wall/mineral/wood/nonmetal, +/area/deathmatch) +"Ww" = ( +/obj/machinery/computer/old, +/obj/effect/decal/cleanable/blood/old, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/indestructible/plating, +/area/deathmatch) +"Xr" = ( +/obj/structure/barricade/wooden/crude, +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/turf_decal/siding/thinplating_new{ + dir = 4 + }, +/turf/open/indestructible/plating, +/area/deathmatch) +"Xw" = ( +/obj/structure/chair/wood, +/obj/effect/landmark/deathmatch_player_spawn, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/wood/tile, +/area/deathmatch) +"XD" = ( +/obj/structure/table/reinforced, +/obj/item/storage/fancy/egg_box, +/turf/open/floor/iron/kitchen, +/area/deathmatch) +"Yg" = ( +/obj/item/stack/rods/ten, +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/turf_decal/stripes/asteroid/line{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/fakelattice{ + density = 0 + }, +/turf/open/indestructible/plating, +/area/deathmatch) +"Yi" = ( +/obj/effect/turf_decal/siding/thinplating_new{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/closet/crate, +/obj/item/clothing/suit/armor/bulletproof, +/turf/open/indestructible/plating, +/area/deathmatch) +"Ys" = ( +/obj/structure/railing{ + dir = 4 + }, +/obj/effect/mapping_helpers/broken_floor, +/obj/structure/closet/crate/secure/weapon{ + locked = 0 + }, +/obj/effect/decal/cleanable/fuel_pool/hivis, +/obj/item/ammo_box/c38, +/obj/effect/turf_decal/stripes/asteroid/line{ + dir = 4 + }, +/obj/item/gun/energy/laser, +/obj/effect/decal/cleanable/dirt, +/turf/open/indestructible/plating, +/area/deathmatch) +"Yt" = ( +/obj/effect/decal/cleanable/fuel_pool/hivis, +/obj/structure/closet/crate/secure/freezer{ + locked = 0 + }, +/obj/item/food/pizza/flatbread/zmorgast, +/obj/item/food/pizza/flatbread/stinging, +/obj/item/food/pizza/flatbread/rustic, +/obj/item/food/pizza/flatbread/nutty, +/obj/item/food/pizza/flatbread/mushroom, +/obj/item/food/pizza/flatbread/italic, +/obj/item/food/pizza/flatbread/imperial, +/obj/item/food/pizza/flatbread/fish, +/obj/effect/decal/cleanable/dirt, +/turf/open/indestructible/plating, +/area/deathmatch) +"YP" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/machinery/door/airlock/wood/glass, +/turf/open/floor/iron/kitchen, +/area/deathmatch) +"YR" = ( +/obj/structure/railing{ + dir = 1 + }, +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/turf_decal/stripes/asteroid/line{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/landmark/deathmatch_player_spawn, +/turf/open/indestructible/plating, +/area/deathmatch) +"Zc" = ( +/obj/structure/lattice/catwalk, +/obj/structure/girder/displaced, +/turf/open/chasm/true/no_smooth/fake_motion_sand/fast, +/area/deathmatch) +"ZR" = ( +/turf/open/floor/iron/kitchen, +/area/deathmatch) + +(1,1,1) = {" +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +"} +(2,1,1) = {" +Mt +Mt +Mt +yr +Mt +Mt +Mt +Mt +yr +Mt +Mt +Mt +Mt +yr +Mt +Mt +Mt +Mt +Mt +yr +Mt +Mt +Mt +Mt +yr +Mt +Mt +Mt +Mt +Mt +yr +Mt +Mt +Mt +Mt +Mt +yr +Mt +Mt +"} +(3,1,1) = {" +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +"} +(4,1,1) = {" +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +"} +(5,1,1) = {" +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +"} +(6,1,1) = {" +Mt +Mt +Mt +yr +Mt +Mt +Mt +Mt +yr +Mt +Mt +Mt +Mt +yr +Mt +Mt +Mt +Mt +Mt +yr +Mt +Mt +Mt +Mt +yr +Mt +Mt +Mt +Mt +Mt +yr +Mt +Mt +Mt +Mt +Mt +yr +Mt +Mt +"} +(7,1,1) = {" +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Je +Je +Je +Ge +Mt +Mt +Mt +Mt +Mt +Je +Je +Je +Je +Je +EX +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +"} +(8,1,1) = {" +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Wa +cy +cy +Wa +HH +HH +Wa +Wa +Sy +Sy +Sy +Wa +Wa +An +Wa +Wa +wE +Wa +Wa +Sy +Sy +Sy +Wa +Wa +zg +as +as +as +as +as +as +as +"} +(9,1,1) = {" +Mt +Mt +Mt +Mt +Mt +Mt +Mt +ke +kt +xn +xn +xn +Hx +Da +Wa +Mt +Mt +Mt +Wa +hR +BN +Rg +mr +ru +CO +Wa +Mt +Mt +Mt +Yi +jj +zg +as +as +as +as +as +as +as +"} +(10,1,1) = {" +Mt +Mt +Mt +yr +Mt +Mt +Mt +ke +xd +fa +Fs +ID +Hx +xn +ze +Se +oo +oo +Dy +at +at +CN +at +Du +hZ +ze +Se +xp +oo +be +jj +zg +as +as +as +as +il +as +as +"} +(11,1,1) = {" +Mt +Mt +Mt +Mt +Mt +Mt +Mt +ke +Pc +Fs +Fs +wf +xn +mi +Wa +Mt +Mt +Mt +Wa +Xw +ai +CN +at +BN +cr +Wa +Mt +Je +Mt +jq +jj +zg +as +as +as +as +as +as +as +"} +(12,1,1) = {" +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Wa +cy +cy +Wa +wm +kR +yi +Wa +Sy +Sy +Sy +Wa +Wa +dB +gL +dB +Xr +Wa +Wa +Sy +Je +Sy +Wa +Wa +zg +as +as +as +as +as +as +as +"} +(13,1,1) = {" +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Je +Je +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Je +Mt +Mt +Mt +Mt +Mt +Je +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +"} +(14,1,1) = {" +Mt +Mt +Mt +yr +Mt +Mt +Mt +Mt +yr +Mt +Mt +Je +Je +yr +Mt +Mt +Mt +Mt +Mt +yr +Mt +Je +Mt +Mt +yr +Mt +Mt +Je +Mt +Mt +yr +Mt +Mt +Mt +Mt +Mt +yr +Mt +Mt +"} +(15,1,1) = {" +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Zc +Je +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Je +Mt +Mt +Mt +Mt +Mt +Je +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +"} +(16,1,1) = {" +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Fs +cU +ca +eA +MV +MV +xV +KT +Sy +Sy +Sy +Fa +rM +EH +ry +gN +pO +CX +Ht +Sy +Je +Sy +KT +KT +zg +as +as +as +as +as +as +as +"} +(17,1,1) = {" +Mt +Mt +Mt +Mt +Mt +Mt +Mt +zP +ca +xV +xV +Fs +LX +Rn +Fs +Se +Se +Se +yR +Sm +HV +Sm +EU +vV +Mq +Js +Se +ty +Se +wR +jj +zg +as +as +as +as +as +as +as +"} +(18,1,1) = {" +Mt +Mt +Mt +yr +Mt +Mt +Mt +Fs +xV +rd +xV +Pa +zP +xV +Vu +Mt +Mt +Mt +YR +Sm +ii +Sm +Mq +Yt +AR +xN +Mt +Je +Mt +wv +jj +zg +as +as +as +as +il +as +as +"} +(19,1,1) = {" +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Fs +QL +Fs +Fs +eA +sp +xV +zP +Se +Se +Se +yR +Fh +zP +Fh +Sm +AR +Mq +Js +Se +ty +Se +Bx +jj +zg +as +as +as +as +as +as +as +"} +(20,1,1) = {" +Mt +Mt +Mt +Mt +Mt +Mt +Mt +eA +Fs +KT +Ej +nj +nj +FB +KT +Sy +Sy +Sy +HZ +rZ +uM +Yg +ci +Ys +mW +bY +Sy +Je +Sy +KT +KT +zg +as +as +as +as +as +as +as +"} +(21,1,1) = {" +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Je +Je +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Je +Mt +Mt +Mt +Mt +Mt +Je +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +"} +(22,1,1) = {" +Mt +Mt +Mt +yr +Mt +Mt +Mt +Mt +yr +Mt +Mt +Je +Je +yr +Mt +Mt +Mt +Mt +Mt +yr +Mt +Je +Mt +Mt +yr +Mt +Mt +Je +Mt +Mt +yr +Mt +Mt +Mt +Mt +Mt +yr +Mt +Mt +"} +(23,1,1) = {" +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Je +vW +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Je +Mt +Mt +Mt +Mt +Mt +Je +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +"} +(24,1,1) = {" +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Wa +cy +dU +mS +MV +MV +Wa +Wa +Sy +Sy +Sy +Wa +Gl +lJ +vl +lJ +lJ +Wa +Wa +Sy +Je +Sy +Wa +Wa +zg +as +as +as +as +as +as +as +"} +(25,1,1) = {" +Mt +Mt +Mt +Mt +Mt +Mt +Mt +ke +cv +Vc +Vc +Vc +ec +Ow +Wa +Mt +Mt +Mt +Wa +tQ +ED +ED +ED +ED +PD +Wa +Mt +Je +Mt +fJ +jj +zg +as +as +as +as +as +as +as +"} +(26,1,1) = {" +Mt +Mt +Mt +Mt +Mt +Mt +Mt +ke +Ww +wy +Vc +qY +GQ +GQ +ze +Se +Se +Se +YP +ZR +ZR +bR +ZR +pm +ZR +Gx +Se +ty +Se +be +jj +zg +as +as +as +as +il +as +as +"} +(27,1,1) = {" +Mt +Mt +Mt +yr +Mt +Mt +Mt +ke +Kv +GQ +BC +GQ +GQ +IJ +Wa +Mt +Mt +Mt +Wa +TA +VT +Tg +XD +VS +kd +Wa +Mt +Mt +Mt +qJ +jj +zg +as +as +as +as +as +as +as +"} +(28,1,1) = {" +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Wa +cy +cy +Wa +Mz +Mz +Wa +Wa +Sy +Sy +Sy +Wa +Wa +wE +Wa +Wa +wE +Wa +Wa +Sy +Sy +Sy +Wa +Wa +zg +as +as +as +as +as +as +as +"} +(29,1,1) = {" +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Je +Je +Je +Uq +Mt +Mt +Mt +Mt +Mt +Je +Je +Je +IR +Je +Je +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +"} +(30,1,1) = {" +Mt +Mt +Mt +yr +Mt +Mt +Mt +Mt +yr +Mt +Mt +Mt +Mt +yr +Mt +Mt +Mt +Mt +Mt +yr +Mt +Mt +Mt +Mt +yr +Mt +Mt +Mt +Mt +Mt +yr +Mt +Mt +Mt +Mt +Mt +yr +Mt +Mt +"} +(31,1,1) = {" +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +"} +(32,1,1) = {" +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +"} +(33,1,1) = {" +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +"} +(34,1,1) = {" +Mt +Mt +Mt +yr +Mt +Mt +Mt +Mt +yr +Mt +Mt +Mt +Mt +yr +Mt +Mt +Mt +Mt +Mt +yr +Mt +Mt +Mt +Mt +yr +Mt +Mt +Mt +Mt +Mt +yr +Mt +Mt +Mt +Mt +Mt +yr +Mt +Mt +"} +(35,1,1) = {" +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +Mt +"} diff --git a/_maps/deathmatch/underground_arena.dmm b/_maps/deathmatch/underground_arena.dmm index d407234f0ab2f..4d776acb0b416 100644 --- a/_maps/deathmatch/underground_arena.dmm +++ b/_maps/deathmatch/underground_arena.dmm @@ -473,9 +473,6 @@ }, /turf/open/indestructible/vault, /area/deathmatch) -"En" = ( -/turf/cordon, -/area/deathmatch) "EA" = ( /obj/effect/landmark/deathmatch_player_spawn, /turf/open/indestructible/dark/smooth_large, @@ -889,41 +886,6 @@ /area/deathmatch) (1,1,1) = {" -En -En -En -En -En -En -En -En -En -En -En -En -En -En -En -En -En -En -En -En -En -En -En -En -En -En -En -En -En -En -En -En -"} -(2,1,1) = {" -En qa qa qa @@ -954,10 +916,8 @@ qa qa qa qa -En "} -(3,1,1) = {" -En +(2,1,1) = {" qa aI aI @@ -988,10 +948,8 @@ aI aI aI qa -En "} -(4,1,1) = {" -En +(3,1,1) = {" qa aI aI @@ -1022,10 +980,8 @@ aI aI aI qa -En "} -(5,1,1) = {" -En +(4,1,1) = {" qa aI aI @@ -1056,10 +1012,8 @@ qa aI aI qa -En "} -(6,1,1) = {" -En +(5,1,1) = {" qa aI aI @@ -1090,10 +1044,8 @@ qa aI aI qa -En "} -(7,1,1) = {" -En +(6,1,1) = {" qa aI aI @@ -1124,10 +1076,8 @@ qa aI aI qa -En "} -(8,1,1) = {" -En +(7,1,1) = {" qa aI aI @@ -1158,10 +1108,8 @@ qa aI aI qa -En "} -(9,1,1) = {" -En +(8,1,1) = {" qa aI aI @@ -1192,10 +1140,8 @@ qa aI aI qa -En "} -(10,1,1) = {" -En +(9,1,1) = {" qa aI aI @@ -1226,10 +1172,8 @@ qa aI aI qa -En "} -(11,1,1) = {" -En +(10,1,1) = {" qa aI aI @@ -1260,10 +1204,8 @@ qa aI aI qa -En "} -(12,1,1) = {" -En +(11,1,1) = {" qa aI aI @@ -1294,10 +1236,8 @@ qa aI aI qa -En "} -(13,1,1) = {" -En +(12,1,1) = {" qa aI aI @@ -1328,10 +1268,8 @@ qa aI aI qa -En "} -(14,1,1) = {" -En +(13,1,1) = {" qa aI aI @@ -1362,10 +1300,8 @@ fX aI aI qa -En "} -(15,1,1) = {" -En +(14,1,1) = {" qa aI aI @@ -1396,10 +1332,8 @@ xK aI aI qa -En "} -(16,1,1) = {" -En +(15,1,1) = {" qa aI aI @@ -1430,10 +1364,8 @@ sd aI aI qa -En "} -(17,1,1) = {" -En +(16,1,1) = {" qa aI aI @@ -1464,10 +1396,8 @@ aI aI aI qa -En "} -(18,1,1) = {" -En +(17,1,1) = {" qa aI aI @@ -1498,10 +1428,8 @@ aI aI aI qa -En "} -(19,1,1) = {" -En +(18,1,1) = {" qa aI aI @@ -1532,10 +1460,8 @@ aI aI aI qa -En "} -(20,1,1) = {" -En +(19,1,1) = {" qa aI aI @@ -1566,10 +1492,8 @@ mz aI aI qa -En "} -(21,1,1) = {" -En +(20,1,1) = {" qa aI aI @@ -1600,10 +1524,8 @@ qa aI aI qa -En "} -(22,1,1) = {" -En +(21,1,1) = {" qa aI aI @@ -1634,10 +1556,8 @@ qa aI aI qa -En "} -(23,1,1) = {" -En +(22,1,1) = {" qa aI aI @@ -1668,10 +1588,8 @@ qa aI aI qa -En "} -(24,1,1) = {" -En +(23,1,1) = {" qa aI aI @@ -1702,10 +1620,8 @@ qa aI aI qa -En "} -(25,1,1) = {" -En +(24,1,1) = {" qa aI aI @@ -1736,10 +1652,8 @@ xG aI aI qa -En "} -(26,1,1) = {" -En +(25,1,1) = {" qa aI aI @@ -1770,10 +1684,8 @@ xG aI aI qa -En "} -(27,1,1) = {" -En +(26,1,1) = {" qa aI aI @@ -1804,10 +1716,8 @@ qa aI aI qa -En "} -(28,1,1) = {" -En +(27,1,1) = {" qa aI aI @@ -1838,10 +1748,8 @@ qa aI aI qa -En "} -(29,1,1) = {" -En +(28,1,1) = {" qa aI aI @@ -1872,10 +1780,8 @@ aI aI aI qa -En "} -(30,1,1) = {" -En +(29,1,1) = {" qa aI aI @@ -1906,10 +1812,8 @@ aI aI aI qa -En "} -(31,1,1) = {" -En +(30,1,1) = {" qa qa qa @@ -1940,39 +1844,4 @@ qa qa qa qa -En -"} -(32,1,1) = {" -En -En -En -En -En -En -En -En -En -En -En -En -En -En -En -En -En -En -En -En -En -En -En -En -En -En -En -En -En -En -En -En "} diff --git a/_maps/gateway_test.json b/_maps/gateway_test.json index 0b3923162f62c..df38ec4c5b866 100644 --- a/_maps/gateway_test.json +++ b/_maps/gateway_test.json @@ -7,6 +7,7 @@ "load_all_away_missions": true, "ignored_unit_tests": [ "/datum/unit_test/antag_moodlets", + "/datum/unit_test/cargo_dep_order_locations", "/datum/unit_test/job_roundstart_spawnpoints", "/datum/unit_test/required_map_items", "/datum/unit_test/space_dragon_expiration", diff --git a/_maps/map_files/Basketball/ass_blast_usa.dmm b/_maps/map_files/Basketball/ass_blast_usa.dmm index 4b3354ba6495d..baeb945de7678 100644 --- a/_maps/map_files/Basketball/ass_blast_usa.dmm +++ b/_maps/map_files/Basketball/ass_blast_usa.dmm @@ -102,9 +102,7 @@ "jj" = ( /obj/structure/table/reinforced, /obj/item/book/manual/wiki/cooking_to_serve_man, -/obj/item/reagent_containers/condiment/enzyme{ - layer = 5 - }, +/obj/item/reagent_containers/condiment/enzyme, /obj/item/food/bun, /obj/item/food/bun, /obj/item/food/bun, diff --git a/_maps/map_files/Basketball/beach_bums.dmm b/_maps/map_files/Basketball/beach_bums.dmm index 517e70f2b630a..d13215d7ca835 100644 --- a/_maps/map_files/Basketball/beach_bums.dmm +++ b/_maps/map_files/Basketball/beach_bums.dmm @@ -459,7 +459,6 @@ pixel_y = 13 }, /obj/item/fishing_line{ - layer = 4; pixel_x = 6; pixel_y = 3 }, diff --git a/_maps/map_files/Birdshot/birdshot.dmm b/_maps/map_files/Birdshot/birdshot.dmm index 836c5a20a51f8..970e1773c9fa9 100644 --- a/_maps/map_files/Birdshot/birdshot.dmm +++ b/_maps/map_files/Birdshot/birdshot.dmm @@ -1,4 +1,23 @@ //MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"aae" = ( +/obj/item/kirbyplants/random, +/obj/machinery/camera/directional/north, +/obj/machinery/light/small/directional/north, +/turf/open/floor/iron, +/area/station/maintenance/port/fore) +"aaf" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/stripes/red/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/red/line{ + dir = 4 + }, +/turf/open/floor/iron/small, +/area/station/hallway/primary/central/aft) "aan" = ( /obj/effect/landmark/carpspawn, /turf/open/space/basic, @@ -16,12 +35,6 @@ }, /turf/open/floor/iron/small, /area/station/security/prison/shower) -"aaw" = ( -/obj/structure/cable, -/obj/effect/turf_decal/tile/purple/opposingcorners, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/cafeteria, -/area/station/science/circuits) "aaA" = ( /obj/structure/table/reinforced, /obj/structure/spider/stickyweb, @@ -37,6 +50,19 @@ /obj/effect/decal/cleanable/cobweb/cobweb2, /turf/open/floor/iron, /area/station/engineering/atmospherics_engine) +"aaH" = ( +/obj/structure/chair/sofa/bench/right{ + dir = 4 + }, +/obj/structure/window/spawner/directional/west, +/turf/open/floor/iron, +/area/station/hallway/secondary/recreation) +"aaZ" = ( +/obj/structure/closet/firecloset, +/obj/effect/turf_decal/tile/blue, +/obj/item/radio/intercom/directional/south, +/turf/open/floor/iron/dark/side, +/area/station/hallway/primary/central/fore) "abh" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -52,6 +78,10 @@ /obj/machinery/power/tracker, /turf/open/space/basic, /area/station/solars/aft) +"abB" = ( +/obj/structure/disposalpipe/segment, +/turf/closed/wall/r_wall, +/area/station/hallway/primary/port) "abJ" = ( /obj/effect/turf_decal/tile/dark_red/opposingcorners, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ @@ -95,14 +125,17 @@ /obj/effect/turf_decal/tile/yellow/opposingcorners, /turf/open/floor/iron/dark, /area/station/medical/pharmacy) -"acY" = ( -/obj/machinery/vending/wardrobe/jani_wardrobe, -/obj/machinery/light/small/directional/east, -/obj/machinery/light_switch/directional/south, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/camera/directional/east, -/turf/open/floor/iron, -/area/station/service/janitor) +"adh" = ( +/obj/machinery/door/airlock{ + name = "Maintenance" + }, +/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, +/obj/structure/disposalpipe/segment, +/obj/structure/cable, +/obj/machinery/duct, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/maintenance/central/lesser) "adl" = ( /obj/effect/turf_decal/siding/white, /obj/machinery/light/small/directional/south, @@ -133,47 +166,33 @@ }, /turf/open/floor/catwalk_floor, /area/station/engineering/hallway) -"aen" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/siding/thinplating/dark{ - dir = 10 +"aef" = ( +/obj/structure/flora/bush/flowers_yw/style_3{ + pixel_x = 5; + pixel_y = -5 }, -/obj/machinery/atmospherics/components/binary/pump/on/layer2{ - dir = 1 +/obj/structure/flora/bush/flowers_br/style_random{ + pixel_y = -5; + pixel_x = 3 }, -/obj/item/radio/intercom/prison/directional/west, -/turf/open/floor/iron/cafeteria, -/area/station/security/prison) -"aeq" = ( -/obj/structure/flora/bush/flowers_yw/style_random, -/obj/structure/flora/bush/flowers_br/style_random, -/obj/structure/flora/bush/leavy/style_random, -/obj/structure/flora/bush/stalky/style_random, -/obj/structure/window/spawner/directional/north, -/obj/structure/window/spawner/directional/south, -/turf/open/floor/grass, -/area/station/hallway/secondary/service) -"aes" = ( -/obj/structure/table/reinforced, -/obj/machinery/door/poddoor/shutters/preopen{ - dir = 4; - id = "kitchenshutters"; - name = "Kitchen Shutters" +/obj/effect/light_emitter/fake_outdoors, +/obj/effect/turf_decal/siding/wood{ + dir = 9 }, -/obj/item/plate, -/obj/item/food/sandwich/peanut_butter_jelly, -/turf/open/floor/iron/cafeteria, -/area/station/service/kitchen) +/turf/open/floor/grass/Airless, +/area/station/hallway/primary/central/aft) "aeu" = ( /obj/structure/grille, /turf/open/floor/plating, /area/station/maintenance/department/engine/atmos) +"aeC" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/wood/tile, +/area/station/command/corporate_showroom) "aeD" = ( /obj/effect/turf_decal/tile/neutral/fourcorners, /obj/machinery/computer/scan_consolenew{ @@ -186,19 +205,6 @@ /obj/machinery/light/small/directional/south, /turf/open/floor/iron/dark, /area/station/science/genetics) -"aeN" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 10 - }, -/obj/effect/turf_decal/tile/red/opposingcorners{ - dir = 1 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 4 - }, -/turf/open/floor/iron/cafeteria, -/area/station/service/cafeteria) "aeX" = ( /obj/structure/window/spawner/directional/east, /obj/item/kirbyplants/random, @@ -208,22 +214,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, /area/station/engineering/lobby) -"afl" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/chair/stool/directional/south, -/obj/effect/turf_decal/siding/red{ - dir = 1 - }, -/obj/item/radio/intercom/directional/south{ - pixel_y = -31 - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/landmark/start/security_officer, -/obj/structure/cable, -/turf/open/floor/iron/small, -/area/station/security/office) "afu" = ( /obj/structure/chair/wood{ dir = 8 @@ -254,6 +244,17 @@ /obj/structure/table, /turf/open/floor/iron, /area/station/maintenance/starboard/aft) +"afJ" = ( +/obj/structure/chair/sofa/bench{ + dir = 4 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/turf/open/floor/iron/white/corner{ + dir = 1 + }, +/area/station/hallway/secondary/entry) "agb" = ( /obj/effect/turf_decal/tile/green{ dir = 8 @@ -274,19 +275,6 @@ /obj/machinery/light/cold/directional/south, /turf/open/floor/plating, /area/station/science/ordnance/storage) -"agC" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/obj/effect/turf_decal/tile/neutral/opposingcorners, -/obj/structure/sign/departments/vault/directional/south, -/turf/open/floor/iron, -/area/station/hallway/secondary/spacebridge) -"agF" = ( -/obj/effect/turf_decal/siding/wood, -/obj/structure/chair/sofa/bamboo/right{ - dir = 1 - }, -/turf/open/floor/wood/large, -/area/station/service/chapel) "agI" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/simple/purple/visible{ @@ -297,6 +285,14 @@ /obj/machinery/firealarm/directional/south, /turf/open/floor/iron/dark, /area/station/science/ordnance) +"agK" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/blue, +/turf/open/floor/iron/white/corner{ + dir = 8 + }, +/area/station/hallway/secondary/dock) "agR" = ( /obj/effect/turf_decal/stripes/white/line{ dir = 6 @@ -305,36 +301,39 @@ /obj/item/radio/intercom/directional/west, /turf/open/floor/iron/dark/small, /area/station/engineering/storage_shared) -"agV" = ( -/obj/structure/cable, -/obj/effect/turf_decal/trimline/white/warning{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/white/warning{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/white/mid_joiner{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/white/mid_joiner{ - dir = 8 +"agY" = ( +/obj/machinery/door/airlock/engineering{ + name = "Main Engineering" }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/light/small/directional/south, -/turf/open/floor/wood, -/area/station/commons/fitness/recreation) -"ahj" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/access/any/engineering/construction, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment, +/turf/open/floor/catwalk_floor, +/area/station/engineering/break_room) +"ahf" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 10 }, -/obj/effect/turf_decal/stripes/line, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark/corner{ - dir = 4 +/obj/structure/flora/bush/flowers_pp/style_random, +/turf/open/floor/grass, +/area/station/service/chapel) +"ahl" = ( +/obj/structure/flora/tree/jungle/style_5, +/turf/open/floor/grass, +/area/station/service/chapel) +"ahr" = ( +/obj/machinery/door/airlock/maintenance{ + name = "Maintenance" }, -/area/station/science/xenobiology) +/obj/effect/mapping_helpers/airlock/access/all/supply/general, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/port/greater) "ahu" = ( /obj/effect/turf_decal/siding/blue{ dir = 1 @@ -374,22 +373,6 @@ /obj/structure/sign/poster/official/random/directional/north, /turf/open/floor/iron/showroomfloor, /area/station/commons/toilet/auxiliary) -"aiE" = ( -/obj/structure/disposalpipe/segment{ - dir = 5 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/starboard) -"aiI" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/easel, -/obj/item/canvas/twentythree_twentythree, -/obj/item/canvas/twentythree_twentythree, -/turf/open/floor/iron, -/area/station/commons/storage/art) "aiK" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/cable, @@ -406,6 +389,24 @@ }, /turf/open/floor/engine/airless, /area/station/engineering/atmos) +"aiQ" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/machinery/light/small/directional/west, +/obj/effect/turf_decal/tile/neutral/opposingcorners{ + dir = 1 + }, +/obj/effect/turf_decal/siding/thinplating_new{ + dir = 8 + }, +/turf/open/floor/iron/small, +/area/station/hallway/secondary/service) +"ajQ" = ( +/obj/effect/spawner/random/maintenance, +/obj/effect/spawner/random/structure/closet_maintenance, +/turf/open/floor/plating, +/area/station/maintenance/central/greater) "ako" = ( /obj/effect/turf_decal/stripes/line{ dir = 9 @@ -417,11 +418,20 @@ /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/plating, /area/station/maintenance/department/electrical) -"akt" = ( -/obj/structure/table/wood, -/obj/item/clothing/mask/gas/owl_mask, -/turf/open/floor/wood, -/area/station/maintenance/fore/greater) +"akq" = ( +/obj/structure/table, +/obj/item/clothing/under/suit/black_really, +/obj/item/clothing/accessory/waistcoat, +/obj/item/clothing/suit/toggle/lawyer/black, +/obj/item/clothing/under/suit/red, +/obj/item/clothing/neck/tie/black, +/obj/item/clothing/under/costume/buttondown/slacks/service, +/obj/effect/turf_decal/tile/blue/opposingcorners{ + dir = 1 + }, +/obj/item/radio/intercom/directional/south, +/turf/open/floor/iron/cafeteria, +/area/station/commons/dorms) "aky" = ( /obj/structure/lattice/catwalk, /obj/structure/railing{ @@ -461,19 +471,6 @@ }, /turf/open/floor/iron/dark, /area/station/engineering/atmos) -"akY" = ( -/obj/machinery/door/airlock{ - name = "Maintenance" - }, -/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/plating/rust, -/area/station/maintenance/fore/greater) -"akZ" = ( -/turf/closed/mineral/random/stationside, -/area/space) "alb" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -487,16 +484,6 @@ /obj/item/pen, /turf/open/floor/carpet/lone, /area/station/service/chapel/office) -"alh" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/neutral, -/obj/machinery/navbeacon{ - codes_txt = "patrol;next_patrol=1.5-PNexus-Vault"; - location = "1.0-Security-PNexus" - }, -/turf/open/floor/iron, -/area/station/hallway/primary/port) "all" = ( /obj/structure/table/greyscale, /obj/item/folder/yellow{ @@ -512,6 +499,10 @@ }, /turf/open/floor/iron/grimy, /area/station/engineering/main) +"als" = ( +/obj/machinery/holopad, +/turf/open/floor/iron/kitchen/small, +/area/station/service/kitchen) "alF" = ( /obj/structure/disposalpipe/segment{ dir = 9 @@ -528,11 +519,18 @@ /obj/structure/cable, /turf/open/floor/iron/small, /area/station/maintenance/solars/starboard/aft) -"alV" = ( +"amh" = ( /obj/structure/cable, -/obj/machinery/power/apc/worn_out/directional/west, +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/trimline/neutral/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/neutral/line{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, -/area/station/maintenance/hallway/abandoned_recreation) +/area/station/hallway/primary/central/fore) "amE" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -557,14 +555,17 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/engineering/atmos/pumproom) -"amI" = ( -/obj/effect/turf_decal/trimline/neutral/line{ +"amK" = ( +/obj/machinery/icecream_vat, +/obj/effect/turf_decal/weather/snow/corner{ dir = 1 }, -/obj/effect/turf_decal/trimline/neutral/line, +/obj/effect/turf_decal/weather/snow, +/obj/machinery/light/small/directional/north, +/obj/machinery/power/apc/auto_name/directional/north, /obj/structure/cable, -/turf/open/floor/iron, -/area/station/hallway/primary/starboard) +/turf/open/floor/iron/freezer, +/area/station/service/kitchen/coldroom) "amV" = ( /obj/structure/lattice/catwalk, /obj/structure/railing, @@ -581,10 +582,11 @@ /turf/open/floor/wood/tile, /area/station/command/bridge) "ani" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/turf/open/floor/iron, -/area/station/hallway/secondary/dock) +/obj/effect/turf_decal/weather/dirt{ + dir = 1 + }, +/turf/open/floor/grass, +/area/station/service/chapel) "anJ" = ( /obj/effect/turf_decal/tile/yellow/half/contrasted{ dir = 8 @@ -593,6 +595,10 @@ /obj/machinery/chem_heater/withbuffer, /turf/open/floor/iron, /area/station/medical/chemistry) +"anX" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/ai_monitored/command/nuke_storage) "aoa" = ( /obj/machinery/telecomms/server/presets/supply, /turf/open/floor/circuit, @@ -619,45 +625,19 @@ /obj/item/storage/lockbox/medal, /turf/open/floor/carpet/executive, /area/station/command/heads_quarters/captain/private) -"aoT" = ( -/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 - }, -/obj/structure/extinguisher_cabinet/directional/east, -/turf/open/floor/iron/white/small, -/area/station/science/ordnance/storage) +"aoL" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plating, +/area/station/maintenance/fore/lesser) "apd" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/yellow/visible, /obj/machinery/meter, +/obj/machinery/atmospherics/pipe/smart/manifold/yellow/visible, /turf/open/floor/iron, /area/station/engineering/atmos) -"api" = ( -/obj/effect/mapping_helpers/broken_floor, -/obj/effect/decal/cleanable/dirt, -/obj/structure/table, -/obj/machinery/airalarm/directional/north, -/obj/item/wrench, -/obj/machinery/camera/autoname/directional/east, -/turf/open/floor/iron/white/small, -/area/station/science/server) -"apj" = ( -/obj/effect/turf_decal/sand/plating, -/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible/layer1{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible/layer5{ - dir = 4 - }, -/turf/open/floor/plating/airless, -/area/space/nearstation) "apk" = ( /obj/structure/disposalpipe/segment, /obj/effect/turf_decal/tile/dark_red{ @@ -668,6 +648,33 @@ /obj/machinery/firealarm/directional/west, /turf/open/floor/iron, /area/station/security) +"apl" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/chair/sofa/bench/left{ + dir = 1 + }, +/obj/effect/landmark/start/hangover, +/turf/open/floor/iron, +/area/station/hallway/secondary/dock) +"apo" = ( +/obj/structure/cable, +/turf/open/floor/iron/kitchen/small, +/area/station/security/prison/mess) +"apq" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 5 + }, +/turf/open/floor/stone, +/area/station/service/chapel) +"apw" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light/small/directional/east, +/turf/open/floor/engine/xenobio, +/area/station/science/xenobiology) "apB" = ( /obj/structure/disposalpipe/junction{ dir = 4 @@ -682,6 +689,15 @@ "apZ" = ( /turf/open/floor/engine/helium, /area/station/ai_monitored/turret_protected/ai) +"aqf" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/hallway/primary/central/aft) "aqn" = ( /obj/effect/turf_decal/siding/dark{ dir = 4 @@ -723,18 +739,16 @@ }, /turf/open/floor/iron/white/smooth_large, /area/station/medical/storage) -"arB" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/window/reinforced/spawner/directional/east, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/binary/pump{ - dir = 1 - }, -/turf/open/floor/iron/white/side{ +"arH" = ( +/obj/effect/turf_decal/siding/thinplating/terracotta{ dir = 8 }, -/area/station/science/xenobiology) +/obj/effect/turf_decal/siding/wideplating/dark/corner, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/commons/dorms) "arK" = ( /obj/structure/sign/warning/secure_area{ desc = "A warning sign which reads 'BOMB RANGE"; @@ -742,6 +756,14 @@ }, /turf/closed/wall, /area/station/science/ordnance/bomb) +"arL" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/tile/yellow/half/contrasted, +/obj/machinery/light/cold/directional/south, +/turf/open/floor/iron, +/area/station/commons/storage/tools) "arN" = ( /obj/structure/frame/machine, /obj/item/circuitboard/machine/pacman, @@ -771,25 +793,11 @@ /obj/machinery/door/firedoor, /turf/open/floor/iron/textured_half, /area/station/security/prison/workout) -"asn" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 4 - }, -/obj/structure/chair/pew/right{ - dir = 4 - }, -/obj/effect/landmark/start/assistant, -/turf/open/floor/wood, -/area/station/service/theater) -"asN" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/door/airlock/multi_tile/public/glass{ - name = "Diner" - }, -/obj/machinery/door/firedoor, -/turf/open/floor/iron/textured_half, -/area/station/service/cafeteria) +"asm" = ( +/obj/effect/turf_decal/siding/blue, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/iron/white, +/area/station/medical/paramedic) "asZ" = ( /obj/structure/disposalpipe/trunk, /obj/structure/disposaloutlet{ @@ -829,6 +837,13 @@ /obj/effect/spawner/random/structure/closet_maintenance, /turf/open/floor/plating, /area/station/maintenance/port/fore) +"atB" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/science/lower) "atE" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating/airless, @@ -850,15 +865,29 @@ }, /turf/open/floor/plating/airless, /area/station/science/ordnance/bomb) -"atM" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/station/maintenance/central/greater) +"atS" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/neutral, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/port) "atW" = ( /turf/open/floor/iron/chapel{ dir = 8 }, /area/station/maintenance/starboard/greater) +"aub" = ( +/obj/structure/sign/departments/botany/alt1/directional/north, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central/aft) "auc" = ( /obj/effect/turf_decal/stripes/white/line{ dir = 5 @@ -870,6 +899,30 @@ }, /turf/open/floor/iron/dark/small, /area/station/maintenance/department/engine) +"auf" = ( +/obj/structure/cable, +/obj/machinery/light/small/dim/directional/south, +/turf/open/floor/iron, +/area/station/maintenance/port/aft) +"aul" = ( +/obj/structure/cable, +/obj/effect/turf_decal/tile/dark_red{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/turf/open/floor/iron, +/area/station/security/brig/entrance) +"aus" = ( +/obj/structure/reagent_dispensers/fueltank, +/obj/effect/turf_decal/bot_white, +/turf/open/floor/iron/smooth, +/area/station/commons/storage/tools) +"auF" = ( +/obj/item/radio/intercom/directional/west, +/turf/open/floor/glass, +/area/station/hallway/primary/central/aft) "auG" = ( /obj/structure/chair{ dir = 1 @@ -881,6 +934,21 @@ /obj/structure/closet/emcloset, /turf/open/floor/iron, /area/station/maintenance/port/aft) +"auO" = ( +/obj/machinery/light/small/directional/east, +/turf/open/floor/iron/smooth, +/area/station/maintenance/solars/starboard/fore) +"auP" = ( +/obj/effect/spawner/random/entertainment/arcade{ + dir = 8 + }, +/obj/effect/turf_decal/siding/thinplating{ + dir = 4 + }, +/obj/structure/sign/poster/official/random/directional/east, +/obj/structure/cable, +/turf/open/floor/eighties/red, +/area/station/hallway/primary/central/fore) "auQ" = ( /obj/machinery/atmospherics/pipe/smart/simple/orange/visible{ dir = 4 @@ -893,9 +961,33 @@ }, /turf/open/floor/iron/smooth, /area/station/engineering/supermatter/room) +"auT" = ( +/obj/structure/cable, +/obj/structure/chair/office{ + dir = 4 + }, +/obj/machinery/power/apc/auto_name/directional/west, +/turf/open/floor/iron/smooth, +/area/station/command/gateway) "ave" = ( /turf/open/space, /area/space) +"avp" = ( +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plating, +/area/station/maintenance/central/greater) +"avr" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/pdapainter/research, +/obj/machinery/computer/security/telescreen/rd/directional/north, +/obj/effect/turf_decal/siding/purple{ + dir = 5 + }, +/turf/open/floor/iron/dark, +/area/station/command/heads_quarters/rd) "avB" = ( /obj/effect/turf_decal/tile/red{ dir = 4 @@ -914,6 +1006,11 @@ }, /turf/open/floor/iron/white, /area/station/science/cytology) +"avR" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/window/spawner/directional/west, +/turf/open/floor/iron/smooth, +/area/station/hallway/secondary/command) "avU" = ( /obj/effect/turf_decal/tile/yellow/half/contrasted{ dir = 8 @@ -922,6 +1019,14 @@ /obj/machinery/airalarm/directional/west, /turf/open/floor/iron/dark, /area/station/medical/pharmacy) +"avY" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/maintenance/port/greater) "awe" = ( /obj/effect/turf_decal/stripes/white/line{ dir = 8 @@ -929,10 +1034,18 @@ /turf/open/floor/tram, /area/station/security/tram) "aws" = ( -/obj/machinery/hydroponics/constructable, -/obj/effect/turf_decal/tile/blue/half, -/turf/open/floor/iron/white/small, -/area/station/service/hydroponics) +/obj/machinery/atmospherics/components/unary/outlet_injector/on{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/engine/xenobio, +/area/station/science/xenobiology) +"aww" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central/aft) "awE" = ( /obj/structure/disposalpipe/sorting/mail/flip{ dir = 8 @@ -954,6 +1067,9 @@ }, /turf/open/floor/plating/airless, /area/station/science/ordnance/bomb) +"awO" = ( +/turf/open/floor/iron, +/area/station/engineering/storage/tech) "awQ" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -973,6 +1089,15 @@ /obj/structure/sign/poster/official/random/directional/north, /turf/open/misc/sandy_dirt, /area/station/hallway/secondary/entry) +"axd" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/structure/sign/directions/vault/directional/south{ + dir = 8 + }, +/turf/closed/wall, +/area/station/hallway/primary/central/aft) "axj" = ( /obj/item/radio/intercom/directional/east, /turf/open/floor/iron, @@ -984,12 +1109,26 @@ /obj/item/bodypart/arm/left, /turf/open/floor/plating/airless, /area/station/science/ordnance/bomb) -"axN" = ( -/obj/machinery/sparker/directional/north{ - id = "Xenobio" +"axw" = ( +/obj/effect/turf_decal/tile/neutral, +/obj/machinery/light/small/directional/south, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/hallway/secondary/recreation) +"axz" = ( +/obj/effect/turf_decal/tile/neutral/full, +/obj/structure/table/glass, +/obj/item/food/taco/fish{ + pixel_y = 9; + pixel_x = 4 }, -/turf/open/floor/engine, -/area/station/science/xenobiology) +/obj/item/food/taco{ + pixel_y = 2; + pixel_x = -2 + }, +/turf/open/floor/iron/dark/smooth_large, +/area/station/maintenance/central/lesser) "axX" = ( /obj/effect/turf_decal/siding/yellow, /obj/effect/turf_decal/tile/yellow/diagonal_centre, @@ -1062,6 +1201,13 @@ /obj/machinery/holopad, /turf/open/floor/iron/cafeteria, /area/station/security/prison/mess) +"ayZ" = ( +/obj/effect/turf_decal/siding/wideplating/dark/corner{ + dir = 1 + }, +/obj/machinery/camera/autoname/directional/east, +/turf/open/floor/iron, +/area/station/commons/dorms) "azh" = ( /obj/structure/chair{ dir = 8 @@ -1082,6 +1228,12 @@ }, /turf/open/floor/iron/diagonal, /area/station/command/heads_quarters/hop) +"azq" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/wood/parquet, +/area/station/service/library) "azv" = ( /obj/machinery/teleport/station, /obj/effect/turf_decal/stripes/line{ @@ -1121,6 +1273,28 @@ /obj/machinery/light/cold/directional/north, /turf/open/floor/iron/dark/herringbone, /area/station/security/courtroom) +"azO" = ( +/obj/structure/extinguisher_cabinet/directional/west, +/turf/open/floor/iron, +/area/station/maintenance/hallway/abandoned_command) +"azV" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/door/airlock/security/glass{ + id_tag = "outerbrig"; + name = "Brig" + }, +/obj/effect/mapping_helpers/airlock/access/all/security/entrance, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "sci-entrance" + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron/textured_half, +/area/station/security/brig/entrance) +"azZ" = ( +/obj/machinery/light/small/directional/south, +/turf/open/floor/iron/white/small, +/area/station/maintenance/port/aft) "aAb" = ( /obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden{ dir = 4 @@ -1130,6 +1304,15 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood, /area/station/engineering/atmos) +"aAj" = ( +/obj/item/storage/backpack/duffelbag/sec{ + pixel_x = -15; + pixel_y = 7 + }, +/obj/structure/sign/poster/official/random/directional/north, +/obj/machinery/light/cold/directional/north, +/turf/open/floor/iron/dark, +/area/station/security/office) "aAD" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/table, @@ -1185,6 +1368,16 @@ }, /turf/open/floor/iron/white, /area/station/medical/treatment_center) +"aBo" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/port) "aBu" = ( /obj/effect/turf_decal/siding/wood{ dir = 5 @@ -1204,16 +1397,14 @@ /obj/structure/cable, /turf/open/floor/iron/small, /area/station/medical/morgue) -"aBy" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +"aBB" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/junction/flip{ - dir = 1 +/obj/effect/turf_decal/tile/neutral{ + dir = 8 }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/station/maintenance/central/greater) +/obj/effect/landmark/start/hangover, +/turf/open/floor/iron, +/area/station/hallway/primary/central/fore) "aBK" = ( /obj/structure/dresser, /obj/effect/turf_decal/siding/wood{ @@ -1221,6 +1412,13 @@ }, /turf/open/floor/iron/small, /area/station/security/prison/shower) +"aBL" = ( +/obj/structure/table/wood, +/obj/item/flashlight/lamp/bananalamp{ + pixel_y = 7 + }, +/turf/open/floor/carpet/blue, +/area/station/commons/dorms) "aBV" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/turf_decal/tile/neutral{ @@ -1238,13 +1436,12 @@ }, /turf/open/floor/iron/dark, /area/station/medical/chemistry) -"aCF" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/engineering/storage/tech) +"aCz" = ( +/obj/effect/turf_decal/weather/dirt, +/obj/machinery/light/small/directional/south, +/obj/machinery/status_display/evac/directional/south, +/turf/open/floor/grass, +/area/station/service/chapel) "aCM" = ( /obj/effect/spawner/random/structure/crate_abandoned, /obj/structure/alien/weeds, @@ -1276,6 +1473,16 @@ }, /turf/open/floor/plating/airless, /area/station/science/ordnance/bomb) +"aDJ" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/structure/sign/directions/vault/directional/west{ + dir = 2 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central/fore) "aEa" = ( /obj/effect/turf_decal/stripes/white/line, /turf/open/floor/tram, @@ -1289,17 +1496,38 @@ /obj/machinery/disposal/bin/tagger, /turf/open/floor/iron/smooth, /area/station/command/bridge) -"aEl" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/stripes/line{ - dir = 1 +"aEd" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 +/obj/machinery/door/firedoor, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "hopqueue"; + name = "HoP Queue Shutters" + }, +/obj/effect/turf_decal/bot, +/obj/effect/turf_decal/tile/blue/half{ + dir = 4 + }, +/obj/effect/turf_decal/tile/blue/half{ + dir = 8 + }, +/turf/open/floor/iron/half{ + dir = 8 }, -/obj/effect/landmark/navigate_destination/teleporter, -/turf/open/floor/iron, /area/station/hallway/primary/central/fore) +"aEo" = ( +/obj/effect/turf_decal/tile/blue/half/contrasted{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/medical/medbay/lobby) "aEq" = ( /obj/effect/turf_decal/stripes/line{ dir = 6 @@ -1340,6 +1568,13 @@ /obj/machinery/shower/directional/west, /turf/open/floor/iron/dark/small, /area/station/maintenance/department/engine) +"aFb" = ( +/obj/structure/flora/grass/jungle/b/style_3{ + pixel_y = -6; + pixel_x = -5 + }, +/turf/open/floor/grass, +/area/station/service/chapel) "aFh" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -1360,6 +1595,13 @@ }, /turf/open/floor/plating/airless, /area/station/science/ordnance/bomb) +"aFu" = ( +/obj/structure/chair/sofa/bench/right{ + dir = 8 + }, +/obj/effect/landmark/start/hangover, +/turf/open/floor/iron/dark/small, +/area/station/commons/dorms) "aFE" = ( /obj/item/target, /obj/structure/window/reinforced/spawner/directional/west, @@ -1392,11 +1634,26 @@ /obj/structure/marker_beacon/fuchsia, /turf/open/space/basic, /area/space/nearstation) +"aGb" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/window/reinforced/spawner/directional/east, +/turf/open/floor/iron/dark/side{ + dir = 4 + }, +/area/station/science/ordnance/testlab) "aGc" = ( /obj/effect/turf_decal/stripes/white/full, /obj/machinery/door/window/right/directional/west, /turf/open/floor/engine, /area/station/engineering/supermatter) +"aGq" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/machinery/camera/autoname/directional/west, +/turf/open/floor/iron, +/area/station/hallway/primary/central/fore) "aGv" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -1417,6 +1674,33 @@ }, /turf/open/misc/sandy_dirt, /area/station/security/tram) +"aGH" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/duct, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/maintenance/central/lesser) +"aGI" = ( +/obj/structure/table, +/obj/effect/decal/cleanable/dirt, +/obj/item/trash/can/food/pine_nuts{ + pixel_x = 16; + pixel_y = 6 + }, +/obj/machinery/cell_charger{ + pixel_x = -1; + pixel_y = 2 + }, +/obj/item/stock_parts/power_store/cell/high{ + pixel_x = -1; + pixel_y = 1 + }, +/turf/open/floor/iron/dark, +/area/station/commons/storage/tools) "aGU" = ( /obj/machinery/light/small/directional/west, /turf/open/floor/iron, @@ -1429,6 +1713,15 @@ }, /turf/open/floor/iron, /area/station/engineering/atmospherics_engine) +"aHl" = ( +/obj/structure/railing/corner, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/commons/dorms) "aHq" = ( /obj/structure/cable, /obj/machinery/power/apc/auto_name/directional/east, @@ -1454,6 +1747,19 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central/fore) +"aIb" = ( +/obj/machinery/door/airlock{ + name = "Maintenance" + }, +/turf/open/floor/plating, +/area/station/maintenance/central/lesser) +"aIi" = ( +/obj/machinery/door/airlock/public/glass{ + name = "Library" + }, +/obj/machinery/door/firedoor, +/turf/open/floor/iron/textured_half, +/area/station/service/library) "aIk" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -1476,15 +1782,17 @@ /obj/effect/landmark/blobstart, /turf/open/floor/iron/dark, /area/station/engineering/atmospherics_engine) -"aIH" = ( -/obj/structure/cable, +"aIO" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/dark_red/opposingcorners, -/obj/effect/decal/cleanable/dirt, -/obj/structure/disposalpipe/segment, -/turf/open/floor/iron, -/area/station/security/processing) +/obj/machinery/door/airlock/public/glass{ + name = "Dormatories" + }, +/obj/machinery/door/firedoor, +/turf/open/floor/iron/textured_half{ + dir = 8 + }, +/area/station/commons/fitness/locker_room) "aIW" = ( /obj/effect/turf_decal/tile/dark_red/half/contrasted{ dir = 1 @@ -1506,10 +1814,14 @@ }, /turf/open/floor/iron/small, /area/station/maintenance/port/lesser) -"aJN" = ( -/obj/structure/window/reinforced/shuttle, -/turf/open/floor/plating, -/area/station/commons/fitness/recreation/entertainment) +"aJV" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/south, +/turf/open/floor/iron/smooth, +/area/station/security/evidence) "aJX" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/door/airlock{ @@ -1560,6 +1872,10 @@ }, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) +"aKS" = ( +/obj/machinery/light/small/directional/west, +/turf/open/floor/iron/dark/small, +/area/station/hallway/secondary/dock) "aKU" = ( /obj/effect/turf_decal/siding/wideplating{ dir = 4 @@ -1568,18 +1884,6 @@ /obj/effect/landmark/start/atmospheric_technician, /turf/open/floor/iron/smooth, /area/station/engineering/atmos/office) -"aLg" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/status_display/ai/directional/north, -/turf/open/floor/iron/cafeteria, -/area/station/science/breakroom) -"aLh" = ( -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/iron, -/area/station/maintenance/aft) "aLk" = ( /obj/structure/cable, /obj/effect/turf_decal/siding/dark_red{ @@ -1597,6 +1901,9 @@ /obj/machinery/light/cold/directional/south, /turf/open/floor/iron/dark/small, /area/station/ai_monitored/security/armory) +"aLm" = ( +/turf/closed/wall/rust, +/area/station/cargo/drone_bay) "aLr" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -1626,6 +1933,23 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/dock) +"aLB" = ( +/obj/structure/window/reinforced/spawner/directional/south, +/obj/machinery/camera/autoname/directional/north, +/obj/effect/turf_decal/tile/neutral/opposingcorners{ + dir = 1 + }, +/obj/effect/turf_decal/siding/thinplating_new{ + dir = 5 + }, +/obj/machinery/airalarm/directional/east, +/turf/open/floor/iron/small, +/area/station/hallway/secondary/service) +"aLS" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment, +/turf/open/floor/carpet/lone, +/area/station/service/chapel/office) "aLU" = ( /obj/structure/chair{ dir = 4 @@ -1653,6 +1977,13 @@ /obj/machinery/atmospherics/pipe/layer_manifold/supply/visible, /turf/open/floor/plating, /area/station/science/ordnance/testlab) +"aMZ" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 9 + }, +/obj/structure/table/wood, +/turf/open/floor/iron/grimy, +/area/station/service/bar) "aNc" = ( /obj/structure/lattice/catwalk, /obj/structure/railing/corner{ @@ -1660,6 +1991,16 @@ }, /turf/open/space/basic, /area/space/nearstation) +"aNj" = ( +/obj/machinery/door/airlock/public{ + name = "Arcade" + }, +/obj/effect/turf_decal/siding/thinplating, +/obj/machinery/door/firedoor, +/obj/structure/disposalpipe/segment, +/obj/structure/cable, +/turf/open/floor/iron/textured_half, +/area/station/hallway/primary/central/fore) "aNk" = ( /obj/machinery/suit_storage_unit/security, /turf/open/floor/iron/small, @@ -1690,10 +2031,6 @@ "aNL" = ( /turf/closed/wall, /area/station/science/ordnance/bomb) -"aNM" = ( -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating, -/area/station/maintenance/hallway/abandoned_command) "aNX" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -1720,12 +2057,30 @@ dir = 4 }, /obj/machinery/light/cold/directional/north, +/obj/machinery/portable_atmospherics/canister, /turf/open/floor/iron/dark, /area/station/engineering/atmos) -"aOx" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/stone, -/area/station/service/bar/backroom) +"aOh" = ( +/obj/machinery/status_display/ai/directional/south, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/item/kirbyplants/random, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/turf/open/floor/iron/white/side, +/area/station/hallway/primary/central/aft) +"aOt" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/light/warm/dim, +/obj/structure/extinguisher_cabinet/directional/south, +/obj/machinery/camera/autoname/directional/south, +/obj/effect/turf_decal/tile/neutral, +/turf/open/floor/iron, +/area/station/hallway/primary/central/aft) "aOz" = ( /obj/structure/cable, /obj/effect/turf_decal/tile/neutral/fourcorners, @@ -1788,6 +2143,13 @@ }, /turf/open/floor/plating/airless, /area/station/science/ordnance/bomb) +"aPK" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/neutral, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/hallway/primary/central/fore) "aPM" = ( /obj/structure/chair/sofa/bench/right, /obj/machinery/firealarm/directional/north, @@ -1795,11 +2157,36 @@ /obj/machinery/incident_display/tram/directional/north, /turf/open/floor/iron, /area/station/security/tram) +"aPV" = ( +/obj/effect/spawner/random/structure/crate_abandoned, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/fore/greater) "aPX" = ( /obj/structure/cable, /obj/machinery/holopad, /turf/open/floor/iron/smooth_large, /area/station/science/robotics/mechbay) +"aQc" = ( +/obj/structure/flora/bush/flowers_br/style_random, +/obj/machinery/status_display/evac/directional/north, +/obj/effect/turf_decal/weather/dirt{ + dir = 5 + }, +/obj/effect/turf_decal/weather/dirt{ + dir = 6 + }, +/turf/open/floor/grass, +/area/station/service/chapel) +"aQf" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/camera/motion/directional/south{ + c_tag = "Captain's Office - Emergency" + }, +/turf/open/floor/plating, +/area/station/maintenance/hallway/abandoned_command) "aQm" = ( /obj/structure/window/reinforced/spawner/directional/west, /turf/open/floor/iron/dark/small, @@ -1831,29 +2218,21 @@ /obj/machinery/light/small/directional/north, /turf/open/floor/iron/cafeteria, /area/station/hallway/secondary/exit/departure_lounge) -"aRn" = ( -/obj/effect/turf_decal/siding/dark_red, -/obj/item/stack/sheet/cardboard{ - pixel_x = -3; - pixel_y = 8 - }, -/obj/item/storage/box/teargas{ - pixel_x = -7; - pixel_y = 14 - }, -/obj/item/gun/grenadelauncher{ - pixel_x = 17; - pixel_y = 10 +"aRo" = ( +/obj/effect/turf_decal/trimline/white/line{ + dir = 4 }, -/obj/machinery/requests_console/directional/north{ - department = "Security"; - name = "Security Requests Console" +/obj/effect/turf_decal/trimline/white/mid_joiner{ + dir = 4 }, -/obj/effect/mapping_helpers/requests_console/supplies, -/obj/effect/mapping_helpers/requests_console/assistance, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark/small, -/area/station/ai_monitored/security/armory) +/turf/open/floor/wood, +/area/station/commons/fitness/recreation) +"aRv" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/camera/autoname/directional/north, +/turf/open/floor/iron, +/area/station/commons/dorms) "aRw" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/chapel{ @@ -1867,11 +2246,6 @@ }, /turf/open/floor/carpet, /area/station/medical/psychology) -"aRD" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/light/small/directional/west, -/turf/open/floor/iron/dark, -/area/station/security/interrogation) "aRI" = ( /obj/effect/turf_decal/tile/dark_red{ dir = 1 @@ -1885,6 +2259,14 @@ /obj/effect/turf_decal/trimline/neutral/end, /turf/open/floor/iron, /area/station/hallway/primary/central/fore) +"aRS" = ( +/obj/effect/turf_decal/stripes/line, +/obj/machinery/computer/security/telescreen/turbine/directional/south, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/iron/smooth, +/area/station/maintenance/disposal/incinerator) "aRT" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/newscaster/directional/west, @@ -1894,6 +2276,11 @@ /obj/structure/reflector/double/anchored, /turf/open/floor/plating/rust, /area/station/engineering/supermatter/room) +"aSt" = ( +/obj/effect/spawner/random/structure/closet_private, +/obj/machinery/light/small/directional/north, +/turf/open/floor/carpet/blue, +/area/station/commons/dorms) "aSy" = ( /turf/closed/wall/r_wall, /area/station/science/xenobiology) @@ -1906,34 +2293,31 @@ /obj/machinery/light/small/directional/east, /turf/open/floor/iron/dark/small, /area/station/hallway/secondary/dock) -"aSQ" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/siding/wood, -/obj/effect/turf_decal/siding/wood{ - dir = 1 - }, -/obj/item/trash/popcorn/caramel{ - pixel_y = 5 - }, -/obj/machinery/light/small/directional/north, -/turf/open/floor/iron/grimy, -/area/station/service/theater) "aSV" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/engineering/supermatter/room) +"aTb" = ( +/obj/structure/toilet{ + dir = 4 + }, +/obj/machinery/light/small/directional/west, +/obj/structure/sign/poster/official/random/directional/west, +/obj/machinery/button/door/directional/north{ + id = "Toilet1"; + specialfunctions = 4; + name = "Lock Control"; + normaldoorcontrol = 1 + }, +/turf/open/floor/iron/white/small, +/area/station/commons/toilet/restrooms) "aTc" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/station/maintenance/department/medical/central) -"aTf" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/camera/directional/east{ - c_tag = "Xenobiology Lab - Test Chamber"; - network = list("ss13","rd","xeno") - }, -/turf/open/floor/engine, -/area/station/science/xenobiology) +"aTg" = ( +/turf/open/floor/iron/kitchen/small, +/area/station/service/kitchen) "aTn" = ( /obj/effect/spawner/random/structure/crate, /obj/effect/spawner/random/maintenance, @@ -1949,12 +2333,6 @@ /obj/item/radio/intercom/directional/south, /turf/open/floor/iron/dark, /area/station/security/office) -"aTr" = ( -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/station/hallway/secondary/spacebridge) "aTx" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -1964,6 +2342,15 @@ }, /turf/open/floor/plating/airless, /area/station/science/ordnance/bomb) +"aTz" = ( +/obj/effect/turf_decal/siding/thinplating_new/light{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/iron/white/small, +/area/station/service/hydroponics) "aTG" = ( /obj/structure/table/reinforced, /obj/machinery/requests_console/directional/east{ @@ -1982,6 +2369,18 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark/smooth_edge, /area/station/maintenance/starboard/greater) +"aUJ" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/siding/dark_red{ + dir = 4 + }, +/turf/open/floor/stone, +/area/station/command/heads_quarters/hos) "aUR" = ( /obj/effect/turf_decal/stripes/corner, /obj/effect/turf_decal/stripes/line{ @@ -1996,6 +2395,36 @@ dir = 1 }, /area/station/engineering/supermatter/room) +"aVA" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/machinery/newscaster/directional/west, +/turf/open/floor/stone, +/area/station/service/bar) +"aVF" = ( +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/power/apc/auto_name/directional/south, +/turf/open/floor/plating, +/area/station/maintenance/department/science/xenobiology) +"aVS" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/door/airlock{ + name = "Library Maintenance" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, +/turf/open/floor/plating, +/area/station/service/library) "aVT" = ( /obj/machinery/door/airlock/research/glass/incinerator/ordmix_interior, /obj/effect/mapping_helpers/airlock/locked, @@ -2029,9 +2458,20 @@ /obj/machinery/camera/autoname/directional/west, /turf/open/floor/iron, /area/station/security/prison/rec) +"aWb" = ( +/obj/structure/reagent_dispensers/watertank, +/turf/open/floor/plating, +/area/station/maintenance/fore/greater) "aWc" = ( /turf/open/floor/iron/small, /area/station/security/tram) +"aWf" = ( +/obj/machinery/camera/autoname/directional/north, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central/aft) "aWi" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -2044,14 +2484,14 @@ /obj/effect/mapping_helpers/airlock/access/all/security/general, /turf/open/floor/iron/textured_half, /area/station/security/execution/transfer) -"aWw" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 8 - }, -/obj/structure/flora/bush/sunny/style_random, -/obj/machinery/light/small/directional/west, -/turf/open/floor/grass, +"aWr" = ( +/obj/structure/flora/tree/jungle/small, +/turf/open/misc/dirt/jungle, /area/station/service/chapel) +"aWt" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/security/prison/garden) "aWx" = ( /obj/effect/spawner/structure/window/reinforced, /obj/effect/turf_decal/stripes/corner{ @@ -2059,6 +2499,13 @@ }, /turf/open/floor/plating, /area/station/maintenance/department/electrical) +"aWz" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/hallway/secondary/dock) "aWA" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -2079,9 +2526,31 @@ }, /turf/open/floor/iron/smooth, /area/station/engineering/atmos/office) +"aXC" = ( +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/turf/closed/wall, +/area/station/hallway/primary/central/fore) "aXI" = ( /turf/closed/wall/r_wall, /area/station/science/lobby) +"aXU" = ( +/obj/structure/easel, +/obj/item/canvas/twentythree_twentythree, +/obj/item/canvas/twentythree_twentythree, +/turf/open/floor/iron, +/area/station/commons/storage/art) +"aYj" = ( +/obj/machinery/door/airlock{ + name = "Kitchen" + }, +/obj/effect/mapping_helpers/airlock/access/all/service/kitchen, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/service/bar/backroom) "aYp" = ( /obj/structure/chair, /obj/effect/turf_decal/stripes/line{ @@ -2099,6 +2568,14 @@ dir = 8 }, /area/station/command/corporate_showroom) +"aYs" = ( +/obj/structure/cable, +/obj/machinery/firealarm/directional/east, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/security/prison/rec) "aYv" = ( /obj/structure/transport/linear/tram, /obj/effect/turf_decal/stripes/white/line{ @@ -2113,6 +2590,11 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/starboard/greater) +"aYU" = ( +/obj/effect/turf_decal/siding/wood, +/obj/structure/table/wood, +/turf/open/floor/iron/grimy, +/area/station/service/bar) "aYY" = ( /obj/structure/flora/bush/flowers_yw/style_random, /turf/open/misc/sandy_dirt, @@ -2127,6 +2609,12 @@ }, /turf/open/floor/plating/rust, /area/station/engineering/supermatter/room) +"aZh" = ( +/obj/machinery/modular_computer/preset/curator{ + dir = 8 + }, +/turf/open/floor/carpet, +/area/station/service/library) "aZu" = ( /obj/machinery/power/emitter{ dir = 4 @@ -2136,11 +2624,6 @@ }, /turf/open/floor/plating/rust, /area/station/engineering/supermatter/room) -"aZw" = ( -/obj/effect/mapping_helpers/broken_floor, -/obj/effect/landmark/navigate_destination/dockescpod, -/turf/open/floor/plating, -/area/station/maintenance/port/lesser) "aZG" = ( /obj/effect/mapping_helpers/broken_floor, /obj/effect/turf_decal/siding/wood{ @@ -2189,6 +2672,22 @@ /obj/structure/alien/weeds, /turf/open/misc/asteroid, /area/station/maintenance/starboard/greater) +"baJ" = ( +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/item/radio/intercom/directional/east, +/turf/open/floor/iron, +/area/station/hallway/primary/central/fore) +"baO" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/effect/spawner/random/entertainment/arcade{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/holodeck/rec_center) "baP" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -2199,6 +2698,15 @@ /obj/machinery/camera/autoname/directional/north, /turf/open/floor/iron/dark, /area/station/medical/medbay/central) +"baW" = ( +/obj/structure/chair/stool/directional/north, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/machinery/camera/autoname/directional/west, +/obj/effect/landmark/start/assistant, +/turf/open/floor/stone, +/area/station/service/bar) "bba" = ( /obj/effect/turf_decal/siding/blue{ dir = 8 @@ -2209,12 +2717,6 @@ }, /turf/open/floor/iron/white/small, /area/station/medical/storage) -"bbh" = ( -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating, -/area/station/maintenance/department/medical/central) "bbp" = ( /obj/structure/spider/stickyweb/sealed, /turf/open/floor/plating, @@ -2236,6 +2738,12 @@ }, /turf/open/floor/wood, /area/station/cargo/miningfoundry) +"bbT" = ( +/obj/structure/chair/sofa/bench/left{ + dir = 8 + }, +/turf/open/floor/iron/dark/small, +/area/station/commons/dorms) "bbU" = ( /obj/effect/landmark/generic_maintenance_landmark, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ @@ -2243,19 +2751,6 @@ }, /turf/open/floor/iron, /area/station/maintenance/port/aft) -"bch" = ( -/obj/effect/mapping_helpers/broken_floor, -/obj/structure/chair/sofa/right{ - dir = 8 - }, -/obj/effect/turf_decal/siding/wood/end{ - dir = 1 - }, -/obj/item/toy/plush/pkplush{ - name = "Bruder" - }, -/turf/open/floor/wood/tile, -/area/station/maintenance/aft) "bcr" = ( /obj/effect/turf_decal/stripes/end, /turf/open/floor/plating/airless, @@ -2267,24 +2762,45 @@ /obj/machinery/door/firedoor, /turf/open/floor/iron/white/small, /area/station/medical/medbay/lobby) -"bcR" = ( -/obj/machinery/atmospherics/components/unary/portables_connector/visible{ - dir = 8 +"bcC" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/neutral, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/station/hallway/primary/port) +"bcK" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 }, -/obj/effect/mapping_helpers/broken_floor, -/obj/machinery/light/cold/directional/north, -/turf/open/floor/iron/dark/side{ - dir = 9 +/obj/effect/turf_decal/tile/purple/opposingcorners, +/turf/open/floor/iron/cafeteria, +/area/station/science/circuits) +"bcN" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/disposalpipe/segment{ + dir = 4 }, -/area/station/science/ordnance/testlab) -"bcY" = ( -/obj/structure/chair/sofa/bench/right{ +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/landmark/event_spawn, +/obj/effect/turf_decal/trimline/neutral/line{ dir = 1 }, -/obj/effect/turf_decal/tile/dark_red/opposingcorners, -/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/trimline/neutral/line, +/obj/structure/cable, /turf/open/floor/iron, -/area/station/security/tram) +/area/station/hallway/primary/central/fore) +"bcO" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/iron/dark/corner{ + dir = 4 + }, +/area/station/science/xenobiology) "bcZ" = ( /obj/effect/turf_decal/stripes/corner{ dir = 4 @@ -2313,6 +2829,10 @@ /obj/machinery/meter, /turf/open/floor/iron, /area/station/engineering/supermatter/room) +"bdN" = ( +/obj/structure/falsewall, +/turf/open/floor/plating, +/area/station/maintenance/fore/greater) "bed" = ( /obj/structure/railing/corner{ dir = 1 @@ -2328,15 +2848,13 @@ "beg" = ( /turf/closed/wall/r_wall, /area/station/engineering/hallway) -"ber" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/sign/warning/radiation/rad_area/directional/east, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/light/small/directional/east, -/turf/open/floor/iron, -/area/station/maintenance/hallway/abandoned_command) +"bej" = ( +/obj/effect/turf_decal/siding/wood, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 4 + }, +/turf/open/floor/stone, +/area/station/service/chapel) "bey" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 4 @@ -2344,33 +2862,41 @@ /obj/machinery/light/small/directional/south, /turf/open/floor/iron, /area/station/hallway/secondary/entry) -"beH" = ( -/obj/machinery/bookbinder, -/obj/structure/extinguisher_cabinet/directional/south, -/turf/open/floor/wood/parquet, -/area/station/service/library) "beK" = ( /turf/open/floor/iron/smooth, /area/station/security/evidence) +"beN" = ( +/obj/effect/landmark/start/hangover, +/obj/effect/turf_decal/trimline/neutral/line, +/obj/effect/turf_decal/trimline/neutral/line{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/port) "bfe" = ( /obj/structure/disposalpipe/segment, /obj/machinery/camera/autoname/directional/west, /obj/machinery/light/warm/directional/west, /turf/open/floor/iron/white, /area/station/science/cytology) -"bfI" = ( -/obj/structure/table/wood, -/obj/effect/turf_decal/tile/brown/full, -/obj/machinery/chem_dispenser/drinks/beer{ +"bfE" = ( +/obj/effect/turf_decal/siding/green/end{ dir = 1 }, -/obj/machinery/requests_console/directional/south{ - department = "Bar"; - name = "Bar Requests Console" - }, -/obj/effect/mapping_helpers/requests_console/supplies, -/turf/open/floor/iron/smooth_large, -/area/station/service/bar) +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/dark/herringbone, +/area/station/service/abandoned_gambling_den/gaming) +"bgg" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/table, +/obj/machinery/airalarm/directional/north, +/obj/item/wrench, +/obj/machinery/camera/autoname/directional/east, +/turf/open/floor/iron/white/small, +/area/station/science/server) "bgn" = ( /obj/machinery/door/airlock/maintenance{ name = "Atmospherics Maintenance" @@ -2394,6 +2920,25 @@ }, /turf/open/floor/iron/dark/small, /area/station/engineering/lobby) +"bgx" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/door/airlock/vault{ + name = "Vault" + }, +/obj/effect/mapping_helpers/airlock/locked, +/obj/effect/mapping_helpers/airlock/access/all/supply/vault, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/door/firedoor, +/turf/open/floor/iron/dark/herringbone, +/area/station/ai_monitored/command/nuke_storage) +"bgy" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/maintenance/hallway/abandoned_command) "bgA" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /turf/open/floor/iron/small, @@ -2415,11 +2960,6 @@ /obj/effect/landmark/start/hangover, /turf/open/floor/iron, /area/station/hallway/primary/fore) -"bgK" = ( -/obj/structure/sink/kitchen/directional/east, -/obj/machinery/light_switch/directional/west, -/turf/open/floor/iron/cafeteria, -/area/station/service/kitchen) "bgQ" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 4 @@ -2452,13 +2992,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/cafeteria, /area/station/security/prison/mess) -"bio" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment, -/obj/effect/mapping_helpers/broken_floor, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/maintenance/hallway/abandoned_recreation) "biB" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /turf/open/floor/iron/dark/smooth_large, @@ -2478,6 +3011,41 @@ /obj/machinery/light/small/directional/east, /turf/open/floor/iron/small, /area/station/engineering/lobby) +"bjc" = ( +/obj/machinery/light/small/directional/east, +/obj/machinery/power/shieldwallgen/xenobiologyaccess, +/obj/structure/cable/multilayer, +/turf/open/floor/plating, +/area/station/science/xenobiology) +"bje" = ( +/obj/structure/chair/sofa/bench{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/turf/open/floor/iron/white/side, +/area/station/hallway/primary/central/aft) +"bjf" = ( +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/spawner/random/trash, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/central/greater) +"bjh" = ( +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/west, +/obj/structure/disposalpipe/segment, +/turf/open/floor/wood, +/area/station/cargo/boutique) +"bji" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/stairs/left, +/area/station/hallway/secondary/recreation) "bjp" = ( /obj/structure/cable, /obj/structure/rack, @@ -2485,11 +3053,6 @@ /obj/machinery/power/apc/auto_name/directional/north, /turf/open/floor/plating, /area/station/maintenance/department/medical/central) -"bjv" = ( -/obj/machinery/status_display/ai/directional/north, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/engineering/storage/tech) "bjL" = ( /obj/effect/turf_decal/tile/neutral/fourcorners, /obj/structure/table, @@ -2504,20 +3067,6 @@ /obj/structure/marker_beacon/burgundy, /turf/open/space/basic, /area/space/nearstation) -"bjV" = ( -/obj/structure/chair/plastic{ - dir = 8 - }, -/obj/effect/landmark/start/hangover, -/obj/machinery/airalarm/directional/north, -/obj/effect/turf_decal/tile/neutral/opposingcorners, -/turf/open/floor/iron, -/area/station/hallway/secondary/spacebridge) -"bjX" = ( -/obj/effect/spawner/random/structure/closet_maintenance, -/obj/effect/spawner/random/maintenance, -/turf/open/floor/plating/rust, -/area/station/maintenance/fore/greater) "bjZ" = ( /turf/open/floor/tram, /area/station/security/tram) @@ -2553,23 +3102,27 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/maintenance/department/medical/central) -"bku" = ( -/obj/structure/disposalpipe/segment{ - dir = 9 +"bkF" = ( +/obj/structure/table, +/obj/machinery/light/small/directional/west, +/obj/item/clothing/head/costume/paper_hat{ + pixel_y = 12; + pixel_x = -4 }, -/obj/effect/turf_decal/siding/red{ - dir = 5 +/obj/item/clothing/head/collectable/petehat{ + pixel_x = 5; + pixel_y = -5 }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/landmark/event_spawn, -/obj/structure/cable, -/turf/open/floor/iron/small, -/area/station/security/office) +/obj/item/cigarette/cigar/cohiba{ + pixel_y = 4 + }, +/turf/open/floor/iron/dark/small, +/area/station/commons/fitness/locker_room) "bkI" = ( +/obj/machinery/status_display/evac/directional/south, /obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ - dir = 5 + dir = 4 }, -/obj/machinery/status_display/evac/directional/south, /turf/open/floor/iron/dark, /area/station/engineering/atmos) "bkO" = ( @@ -2629,33 +3182,39 @@ /obj/effect/spawner/random/engineering/flashlight, /turf/open/floor/iron, /area/station/cargo/miningoffice) -"blq" = ( -/obj/structure/disposalpipe/segment, -/obj/effect/landmark/start/hangover, -/obj/effect/turf_decal/trimline/neutral/line, -/obj/effect/turf_decal/trimline/neutral/line{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/port) "bly" = ( /obj/structure/closet/crate/miningcar, /turf/open/floor/iron, /area/station/hallway/secondary/dock) +"blB" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/siding/wood/end{ + dir = 1 + }, +/turf/open/floor/stone, +/area/station/service/bar) +"blC" = ( +/obj/effect/spawner/random/entertainment/arcade{ + dir = 1 + }, +/obj/effect/turf_decal/siding/thinplating{ + dir = 10 + }, +/obj/structure/sign/poster/official/random/directional/south, +/turf/open/floor/eighties/red, +/area/station/hallway/primary/central/fore) "blJ" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white/small, /area/station/science/ordnance/storage) -"blU" = ( -/obj/effect/mapping_helpers/broken_floor, -/obj/effect/decal/cleanable/dirt, -/obj/item/radio/intercom/directional/west, -/obj/effect/turf_decal/stripes/red/line{ - dir = 8 - }, -/turf/open/floor/iron/smooth_large, -/area/station/science/auxlab/firing_range) +"blP" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/commons/dorms) "blZ" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -2675,6 +3234,13 @@ }, /turf/open/floor/circuit, /area/station/tcommsat/server) +"bmz" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/commons/fitness/locker_room) "bmA" = ( /obj/structure/cable, /obj/effect/decal/cleanable/dirt, @@ -2690,13 +3256,6 @@ /mob/living/basic/bot/medbot/autopatrol, /turf/open/floor/iron/white, /area/station/medical/medbay/lobby) -"bmM" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment, -/obj/effect/decal/cleanable/dirt, -/obj/structure/steam_vent, -/turf/open/floor/plating, -/area/station/maintenance/port/greater) "bmN" = ( /obj/structure/railing{ dir = 4 @@ -2716,14 +3275,27 @@ /obj/effect/spawner/random/maintenance, /turf/open/floor/tram, /area/station/security/tram) -"bnh" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +"bmY" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/newscaster/directional/west, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/trimline/neutral/line, +/obj/effect/turf_decal/trimline/neutral/line{ + dir = 1 + }, /turf/open/floor/iron, -/area/station/commons) +/area/station/hallway/primary/central/aft) +"bnn" = ( +/obj/effect/turf_decal/tile/yellow{ + dir = 1 + }, +/obj/effect/turf_decal/tile/red{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/fore) "bno" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -2757,6 +3329,28 @@ /obj/structure/cable, /turf/open/floor/iron/showroomfloor, /area/station/medical/surgery/theatre) +"bnI" = ( +/obj/machinery/light/small/directional/north, +/obj/machinery/suit_storage_unit/cmo, +/turf/open/floor/wood/parquet, +/area/station/command/heads_quarters/cmo) +"bnQ" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 1 + }, +/obj/structure/flora/rock/pile/jungle/style_3, +/turf/open/floor/grass, +/area/station/service/chapel) +"bnU" = ( +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/stripes/red/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/red/line{ + dir = 8 + }, +/turf/open/floor/iron/small, +/area/station/hallway/primary/central/aft) "bnV" = ( /obj/machinery/airalarm/directional/east, /obj/effect/turf_decal/tile/red/half/contrasted{ @@ -2767,6 +3361,13 @@ }, /turf/open/floor/iron/smooth, /area/station/security/checkpoint/engineering) +"bnX" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/herringbone, +/area/station/commons/dorms) "bob" = ( /obj/structure/cable, /obj/machinery/power/apc/auto_name/directional/south, @@ -2779,16 +3380,30 @@ /obj/structure/reagent_dispensers/water_cooler, /turf/open/floor/iron/grimy, /area/station/science/cubicle) -"bor" = ( -/obj/machinery/firealarm/directional/east, -/obj/machinery/power/apc/auto_name/directional/south, -/obj/structure/cable, -/turf/open/floor/iron/showroomfloor, -/area/station/medical/surgery/theatre) -"boI" = ( -/obj/machinery/mecha_part_fabricator/maint{ - name = "forgotten exosuit fabricator" - }, +"boi" = ( +/obj/structure/closet/crate, +/obj/item/clothing/mask/bandana/blue, +/obj/item/clothing/mask/bandana/blue, +/obj/item/clothing/mask/bandana/gold, +/obj/item/clothing/mask/bandana/gold, +/obj/item/clothing/mask/bandana/red, +/obj/item/clothing/mask/bandana/red, +/obj/item/clothing/mask/bandana/skull, +/obj/item/clothing/mask/bandana/skull, +/obj/item/toy/basketball, +/obj/machinery/firealarm/directional/east, +/turf/open/floor/iron, +/area/station/hallway/secondary/recreation) +"bor" = ( +/obj/machinery/firealarm/directional/east, +/obj/machinery/power/apc/auto_name/directional/south, +/obj/structure/cable, +/turf/open/floor/iron/showroomfloor, +/area/station/medical/surgery/theatre) +"boI" = ( +/obj/machinery/mecha_part_fabricator/maint{ + name = "forgotten exosuit fabricator" + }, /obj/machinery/light/small/broken/directional/west, /turf/open/floor/plating, /area/station/maintenance/port/aft) @@ -2917,6 +3532,10 @@ }, /turf/open/floor/plating, /area/station/maintenance/department/engine) +"bqx" = ( +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/security/office) "bqy" = ( /turf/open/floor/engine{ name = "Holodeck Projector Floor" @@ -2951,15 +3570,21 @@ }, /turf/open/space/basic, /area/space/nearstation) +"brj" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/airalarm/directional/north, +/turf/open/floor/iron/dark/small, +/area/station/service/chapel/storage) "bro" = ( /obj/structure/frame/machine, /turf/open/floor/tram, /area/station/security/tram) "brw" = ( -/obj/effect/decal/cleanable/glass, -/obj/structure/grille, -/turf/open/floor/plating, -/area/station/hallway/primary/port) +/obj/structure/chair{ + pixel_y = -2 + }, +/turf/open/floor/iron/dark/small, +/area/station/maintenance/central/lesser) "bry" = ( /obj/structure/table, /obj/item/storage/toolbox/mechanical{ @@ -2987,13 +3612,7 @@ /area/station/maintenance/starboard/greater) "brC" = ( /obj/effect/spawner/structure/window/reinforced, -/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible/layer5{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible/layer1{ +/obj/machinery/atmospherics/pipe/layer_manifold/yellow/visible{ dir = 4 }, /turf/open/floor/plating, @@ -3014,20 +3633,6 @@ /obj/structure/barricade/wooden/crude, /turf/open/floor/plating, /area/station/maintenance/aft) -"bsh" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/newscaster/directional/east, -/turf/open/floor/iron, -/area/station/hallway/secondary/entry) -"bsl" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/siding/red, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/white/small, -/area/station/security/warden) "bsn" = ( /obj/structure/lattice/catwalk, /obj/structure/railing{ @@ -3088,18 +3693,6 @@ /obj/structure/closet/emcloset, /turf/open/floor/plating, /area/station/maintenance/department/medical/central) -"btf" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/obj/effect/landmark/navigate_destination/dorms, -/turf/open/floor/iron, -/area/station/commons/dorms) -"btv" = ( -/obj/effect/turf_decal/tile/dark_red/opposingcorners, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/security/warden) "btG" = ( /obj/structure/rack, /obj/effect/turf_decal/delivery/white, @@ -3115,18 +3708,39 @@ }, /turf/open/floor/wood, /area/station/engineering/main) -"buk" = ( -/obj/structure/cable, +"btY" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/machinery/holopad, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/turf/open/floor/wood/parquet, +/area/station/service/library) +"bua" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 6 + }, +/obj/machinery/light/small/directional/south, +/turf/open/floor/wood, +/area/station/service/abandoned_gambling_den) +"buc" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/item/storage/box{ - pixel_x = -8; - pixel_y = 15 +/obj/structure/chair/stool/bamboo, +/turf/open/floor/carpet/lone, +/area/station/service/chapel/office) +"buf" = ( +/obj/effect/turf_decal/tile/dark_red/half/contrasted{ + dir = 4 }, -/obj/machinery/light_switch/directional/north, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/stone, -/area/station/service/theater) +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/station/security) "buA" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -3140,14 +3754,22 @@ dir = 8 }, /area/station/science/xenobiology) -"buO" = ( -/obj/machinery/computer/slot_machine{ - pixel_y = 2 +"buJ" = ( +/obj/effect/spawner/random/vending/snackvend, +/obj/machinery/bluespace_vendor/directional/south, +/turf/open/floor/iron, +/area/station/commons/fitness/locker_room) +"buU" = ( +/obj/structure/table, +/obj/item/stack/sheet/iron/five, +/obj/item/stack/cable_coil/five, +/obj/effect/turf_decal/tile/brown/opposingcorners{ + dir = 1 }, -/obj/effect/mapping_helpers/broken_floor, -/obj/machinery/light/small/directional/west, -/turf/open/floor/carpet/orange, -/area/station/service/abandoned_gambling_den) +/obj/item/radio/intercom/directional/east, +/obj/machinery/light_switch/directional/south, +/turf/open/floor/iron, +/area/station/commons/vacant_room/commissary) "buV" = ( /obj/effect/turf_decal/tile/green/half/contrasted{ dir = 4 @@ -3176,18 +3798,19 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/white/small, /area/station/security/warden) +"bvV" = ( +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/obj/machinery/disposal/bin, +/obj/structure/cable, +/turf/open/floor/wood, +/area/station/command/heads_quarters/qm) "bwz" = ( /obj/effect/spawner/random/entertainment/arcade, /obj/machinery/light/cold/directional/north, /turf/open/floor/iron/cafeteria, /area/station/security/prison/mess) -"bwE" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/security/prison/rec) "bwY" = ( /obj/structure/reagent_dispensers/watertank, /turf/open/floor/plating, @@ -3199,6 +3822,17 @@ /obj/machinery/light/small/directional/west, /turf/open/floor/iron, /area/station/hallway/secondary/dock) +"bxl" = ( +/obj/effect/turf_decal/weather/snow/corner{ + dir = 1 + }, +/obj/effect/turf_decal/weather/snow, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron/freezer, +/area/station/service/kitchen/coldroom) "bxs" = ( /obj/structure/railing{ dir = 1 @@ -3221,13 +3855,6 @@ dir = 8 }, /area/station/engineering/main) -"bxA" = ( -/obj/structure/cable, -/obj/effect/turf_decal/trimline/neutral/end{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/port) "bxI" = ( /obj/structure/cable, /obj/structure/disposalpipe/sorting/mail/flip{ @@ -3255,6 +3882,17 @@ /obj/structure/cable, /turf/open/floor/iron/small, /area/station/medical/morgue) +"byv" = ( +/obj/effect/turf_decal/tile/dark_red/half/contrasted{ + dir = 1 + }, +/obj/machinery/camera/autoname/directional/south, +/obj/machinery/firealarm/directional/south, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/security/brig/entrance) "byx" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -3274,6 +3912,12 @@ /obj/effect/turf_decal/stripes/asteroid/end, /turf/open/floor/circuit/green, /area/station/science/robotics/mechbay) +"byN" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/maintenance/hallway/abandoned_command) "byU" = ( /obj/effect/mapping_helpers/broken_floor, /obj/effect/decal/cleanable/dirt, @@ -3282,33 +3926,47 @@ /obj/effect/gibspawner, /turf/open/floor/wood, /area/station/maintenance/starboard/greater) -"bzL" = ( -/obj/machinery/flasher/portable, -/obj/effect/turf_decal/stripes/line{ - dir = 8 +"bzj" = ( +/obj/machinery/rnd/production/techfab/department/service, +/obj/effect/turf_decal/tile/neutral/opposingcorners{ + dir = 1 }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/light/small/directional/south, -/turf/open/floor/plating, -/area/station/security/tram) +/obj/effect/turf_decal/siding/thinplating_new{ + dir = 4 + }, +/obj/effect/turf_decal/delivery, +/turf/open/floor/iron/small, +/area/station/hallway/secondary/service) +"bzJ" = ( +/obj/structure/table/wood, +/obj/machinery/barsign{ + chosen_sign = "thecavern"; + icon_state = "thecavern"; + pixel_y = 32 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 10 + }, +/obj/machinery/chem_dispenser/drinks/beer, +/turf/open/floor/iron/dark/textured, +/area/station/service/bar) "bzZ" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/dark, /area/station/hallway/secondary/construction) -"bAd" = ( -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/light/cold/directional/north, -/turf/open/floor/iron, -/area/station/hallway/secondary/dock) -"bAo" = ( -/obj/machinery/atmospherics/pipe/smart/simple/general/visible{ - dir = 4 +"bAb" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/door/airlock/public/glass{ + name = "Recreation" }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/spawner/random/engineering/tracking_beacon, -/turf/open/floor/engine, -/area/station/science/xenobiology) +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/textured_half, +/area/station/commons/fitness/recreation/entertainment) +"bAr" = ( +/obj/effect/spawner/random/trash, +/turf/open/floor/iron, +/area/station/maintenance/department/medical/central) "bAs" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -3342,6 +4000,14 @@ /obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, /turf/open/floor/catwalk_floor, /area/station/maintenance/disposal/incinerator) +"bBh" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 1 + }, +/obj/structure/flora/bush/flowers_br/style_3, +/obj/machinery/firealarm/directional/north, +/turf/open/floor/grass, +/area/station/service/chapel) "bBk" = ( /obj/effect/turf_decal/tile/dark_red, /obj/structure/cable, @@ -3363,17 +4029,6 @@ /obj/item/radio/intercom/directional/west, /turf/open/floor/iron/white/small, /area/station/science/cubicle) -"bBu" = ( -/obj/effect/turf_decal/siding, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/white/small, -/area/station/science/lab) -"bBw" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/broken_flooring/singular/directional/south, -/obj/machinery/duct, -/turf/open/floor/plating, -/area/station/maintenance/department/medical/central) "bBy" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -3417,6 +4072,11 @@ /obj/structure/extinguisher_cabinet/directional/west, /turf/open/floor/iron/white, /area/station/medical/medbay/central) +"bCo" = ( +/obj/item/kirbyplants/random, +/obj/machinery/light/warm/directional/south, +/turf/open/floor/iron, +/area/station/commons/fitness/locker_room) "bCs" = ( /obj/machinery/light/dim/directional/north, /turf/open/floor/iron/dark/side{ @@ -3434,6 +4094,11 @@ /obj/structure/cable, /turf/open/floor/iron/small, /area/station/security/office) +"bCP" = ( +/obj/effect/turf_decal/siding/wideplating/dark, +/obj/machinery/firealarm/directional/north, +/turf/open/floor/iron, +/area/station/commons/fitness/locker_room) "bCQ" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -3443,12 +4108,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/science/lower) -"bCX" = ( -/obj/effect/turf_decal/siding/thinplating_new/light{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/service/hydroponics) "bCZ" = ( /obj/effect/turf_decal/trimline/yellow/filled/line{ dir = 1 @@ -3514,22 +4173,12 @@ /turf/open/floor/iron, /area/station/cargo/sorting) "bDO" = ( -/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ - dir = 10 +/obj/machinery/atmospherics/components/binary/pump{ + dir = 4; + name = "N2 to Pure" }, /turf/open/floor/iron/dark, /area/station/engineering/atmos) -"bDQ" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/turf_decal/tile/yellow/anticorner/contrasted, -/obj/effect/turf_decal/stripes/corner{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/commons/storage/tools) "bEd" = ( /obj/effect/spawner/random/structure/crate, /obj/effect/mapping_helpers/broken_floor, @@ -3554,18 +4203,6 @@ /obj/structure/extinguisher_cabinet/directional/north, /turf/open/floor/iron, /area/station/science/lower) -"bEC" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/turf/open/floor/iron/dark/corner{ - dir = 1 - }, -/area/station/science/ordnance/testlab) -"bEE" = ( -/obj/effect/turf_decal/tile/dark_red/opposingcorners, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/security/processing) "bEN" = ( /obj/structure/chair/sofa/bench/left{ dir = 4 @@ -3582,26 +4219,43 @@ /obj/effect/spawner/structure/window/reinforced/shuttle, /turf/open/floor/plating, /area/station/maintenance/department/engine/atmos) -"bFg" = ( -/obj/structure/disposalpipe/segment{ +"bFd" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/chair/wood{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/obj/structure/sign/poster/official/random/directional/north, -/turf/open/floor/iron, -/area/station/commons/dorms) +/turf/open/floor/iron/grimy, +/area/station/service/bar) +"bFh" = ( +/obj/structure/rack, +/obj/item/binoculars, +/obj/machinery/camera/directional/south{ + c_tag = "Atmospherics - South" + }, +/turf/open/floor/iron/dark, +/area/station/science/ordnance/testlab) "bFr" = ( /obj/effect/decal/cleanable/cobweb/cobweb2, /obj/item/kirbyplants/random, /obj/structure/sign/poster/official/random/directional/north, /turf/open/floor/iron, /area/station/engineering/atmospherics_engine) +"bFt" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/commons/dorms) "bFw" = ( /obj/machinery/telecomms/server/presets/science, /turf/open/floor/circuit, /area/station/tcommsat/server) +"bFO" = ( +/obj/effect/spawner/random/trash, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plating, +/area/station/maintenance/central/greater) "bFR" = ( /obj/machinery/door/airlock/maintenance{ name = "Maintenance" @@ -3617,6 +4271,16 @@ /obj/effect/spawner/random/techstorage/rnd_all, /turf/open/floor/iron, /area/station/engineering/storage/tech) +"bGe" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/tile/purple/opposingcorners, +/obj/effect/turf_decal/siding/green{ + dir = 4 + }, +/turf/open/floor/iron/cafeteria, +/area/station/science/circuits) "bGi" = ( /obj/structure/table/wood, /obj/item/reagent_containers/cup/glass/mug{ @@ -3647,6 +4311,23 @@ }, /turf/open/floor/plating, /area/station/hallway/secondary/construction) +"bGq" = ( +/obj/machinery/porta_turret/ai, +/obj/machinery/computer/security/telescreen/minisat/directional/east, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/status_display/ai/directional/north, +/turf/open/floor/iron/smooth, +/area/station/ai_monitored/turret_protected/aisat_interior) +"bGD" = ( +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/stripes/red/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/red/line{ + dir = 4 + }, +/turf/open/floor/iron/small, +/area/station/hallway/secondary/recreation) "bGL" = ( /obj/structure/reagent_dispensers/watertank, /turf/open/floor/iron, @@ -3665,29 +4346,39 @@ /obj/machinery/chem_heater/withbuffer, /turf/open/floor/iron/dark, /area/station/medical/pharmacy) +"bHp" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/closet/crate, +/obj/item/stock_parts/power_store/cell/high{ + pixel_x = -11; + pixel_y = 2 + }, +/obj/item/reagent_containers/cup/glass/bottle/vodka, +/obj/item/food/grown/citrus/orange, +/obj/item/food/grown/citrus/orange{ + pixel_x = 4; + pixel_y = 2 + }, +/obj/item/food/grown/grapes/green{ + pixel_y = -4; + pixel_x = -6 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/iron/small, +/area/station/maintenance/department/engine/atmos) "bHs" = ( /obj/structure/rack, /obj/effect/spawner/random/maintenance, /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/iron, /area/station/maintenance/starboard/aft) -"bHA" = ( -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/obj/effect/mapping_helpers/broken_floor, -/obj/machinery/duct, -/turf/open/floor/plating, -/area/station/maintenance/fore/greater) -"bHB" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/blue/full, -/obj/machinery/light/small/directional/north, -/turf/open/floor/iron/white/textured_large, -/area/station/command/heads_quarters/cmo) +"bHy" = ( +/obj/structure/chair/office/light, +/obj/effect/landmark/start/scientist, +/turf/open/floor/iron, +/area/station/science/ordnance/testlab) "bHU" = ( /obj/effect/turf_decal/siding/wood, /obj/machinery/camera/autoname/directional/south, @@ -3715,6 +4406,26 @@ /obj/structure/window/spawner/directional/south, /turf/open/misc/sandy_dirt, /area/station/science/research) +"bIJ" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 4 + }, +/turf/open/floor/grass, +/area/station/service/chapel) +"bIN" = ( +/obj/structure/chair/stool/bar/directional/north, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/effect/landmark/start/assistant, +/obj/effect/turf_decal/siding/wood, +/turf/open/floor/wood, +/area/station/hallway/primary/central/aft) +"bJn" = ( +/obj/machinery/light/small/directional/west, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/maintenance/fore/greater) "bJw" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/broken_flooring/singular/directional/south, @@ -3722,6 +4433,24 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/maintenance/starboard/aft) +"bJx" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 8 + }, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 4 + }, +/turf/open/floor/stone, +/area/station/service/chapel) +"bJA" = ( +/obj/item/kirbyplants/random, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/light_switch/directional/south, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/herringbone, +/area/station/commons/dorms) "bJK" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -3733,12 +4462,18 @@ /obj/effect/decal/cleanable/dirt/dust, /obj/item/radio/intercom/directional/west, /obj/machinery/status_display/evac/directional/south, +/obj/item/kirbyplants/random, /turf/open/floor/iron/dark, /area/station/engineering/atmos) "bJZ" = ( /obj/structure/chair/stool/directional/south, /turf/open/floor/iron, /area/station/security/prison/workout) +"bKa" = ( +/obj/structure/chair/sofa/bench/right, +/obj/machinery/incident_display/tram/directional/north, +/turf/open/floor/iron, +/area/station/maintenance/port/aft) "bKl" = ( /obj/structure/railing/corner{ dir = 8 @@ -3746,6 +4481,11 @@ /obj/effect/turf_decal/siding/wideplating, /turf/open/floor/wood, /area/station/engineering/main) +"bKv" = ( +/obj/structure/flora/tree/jungle/style_4, +/obj/effect/turf_decal/weather/dirt, +/turf/open/floor/grass, +/area/station/service/chapel) "bKz" = ( /obj/structure/disposalpipe/junction{ dir = 4 @@ -3777,21 +4517,9 @@ }, /turf/open/floor/iron/small, /area/station/security/tram) -"bKP" = ( +"bKO" = ( /obj/structure/table/wood, -/obj/effect/turf_decal/tile/neutral/full, -/obj/effect/turf_decal/siding/wood{ - dir = 8 - }, -/obj/item/lighter{ - pixel_x = 2; - pixel_y = 5 - }, -/obj/item/lighter{ - pixel_x = -8; - pixel_y = -2 - }, -/turf/open/floor/iron/smooth_large, +/turf/open/floor/wood/large, /area/station/service/bar) "bKU" = ( /obj/item/toy/crayon/spraycan{ @@ -3809,11 +4537,6 @@ /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/iron/smooth, /area/station/engineering/main) -"bLN" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/landmark/start/scientist, -/turf/open/floor/iron/dark, -/area/station/science/ordnance) "bLT" = ( /obj/structure/cable, /obj/structure/window/reinforced/spawner/directional/south, @@ -3821,6 +4544,12 @@ /obj/effect/turf_decal/stripes/line, /turf/open/floor/iron/dark, /area/station/science/xenobiology) +"bMc" = ( +/obj/structure/table, +/obj/item/rcl/pre_loaded, +/obj/machinery/light/small/directional/south, +/turf/open/floor/iron, +/area/station/commons/storage/art) "bMt" = ( /obj/structure/cable, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ @@ -3828,6 +4557,15 @@ }, /turf/open/floor/iron, /area/station/engineering/storage/tech) +"bMV" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central/aft) "bMW" = ( /obj/machinery/iv_drip, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, @@ -3859,18 +4597,19 @@ "bNq" = ( /turf/closed/wall/r_wall, /area/station/maintenance/department/engine/atmos) -"bNK" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 8 - }, -/turf/open/floor/iron/dark/side{ - dir = 4 - }, -/area/station/science/ordnance/testlab) +"bNu" = ( +/obj/structure/sign/poster/official/random/directional/north, +/turf/open/floor/iron, +/area/station/hallway/secondary/dock) +"bNL" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/light/small/directional/south, +/obj/machinery/status_display/ai/directional/south, +/obj/effect/turf_decal/tile/neutral, +/turf/open/floor/iron, +/area/station/hallway/primary/central/aft) "bNP" = ( /obj/structure/cable, /obj/structure/broken_flooring/pile/directional/east, @@ -3911,27 +4650,19 @@ /obj/machinery/atmospherics/pipe/smart/simple/dark/visible, /turf/open/floor/engine, /area/station/maintenance/disposal/incinerator) -"bOl" = ( -/obj/structure/flora/bush/flowers_br/style_random, -/turf/open/floor/grass, -/area/station/service/chapel) -"bOp" = ( -/obj/effect/spawner/random/vending/snackvend, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ +"bOG" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/landmark/start/cook, +/turf/open/floor/iron/kitchen/small, +/area/station/service/kitchen) +"bON" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/siding/white{ dir = 8 }, -/obj/machinery/airalarm/directional/east, -/turf/open/floor/iron/dark/side{ - dir = 4 - }, -/area/station/hallway/primary/central/fore) -"bOH" = ( -/obj/structure/falsewall, -/turf/open/floor/plating, -/area/station/maintenance/central/lesser) +/turf/open/floor/iron/dark/small, +/area/station/science/xenobiology) "bOR" = ( /obj/machinery/light/small/directional/west, /obj/structure/flora/bush/flowers_yw, @@ -3946,38 +4677,29 @@ }, /turf/open/floor/iron, /area/station/cargo/miningfoundry) -"bPb" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/mapping_helpers/broken_floor, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/machinery/airalarm/directional/north, -/turf/open/floor/iron/white/corner{ - dir = 1 - }, -/area/station/hallway/secondary/dock) "bPU" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/purple/visible, /turf/open/floor/iron, /area/station/engineering/atmos) +"bQc" = ( +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/obj/effect/turf_decal/siding/red{ + dir = 5 + }, +/obj/effect/landmark/event_spawn, +/obj/structure/cable, +/turf/open/floor/iron/small, +/area/station/security/office) +"bQd" = ( +/obj/structure/flora/grass/jungle/b/style_2, +/turf/open/misc/dirt/jungle, +/area/station/service/chapel) "bQi" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/engine, /area/station/engineering/gravity_generator) -"bQk" = ( -/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/holopad, -/turf/open/floor/iron/white/small, -/area/station/science/ordnance/storage) "bQm" = ( /obj/effect/turf_decal/siding/red{ dir = 5 @@ -3986,6 +4708,23 @@ /obj/machinery/computer/records/security, /turf/open/floor/wood/tile, /area/station/command/bridge) +"bQy" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/dark_red/half/contrasted{ + dir = 8 + }, +/obj/machinery/computer/security/telescreen/isolation/directional/east, +/obj/machinery/photobooth/security, +/turf/open/floor/iron, +/area/station/security/execution/transfer) +"bQQ" = ( +/obj/effect/turf_decal/tile/neutral, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/hallway/secondary/recreation) "bRc" = ( /obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible, /obj/machinery/light/small/directional/west, @@ -4030,6 +4769,12 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/smooth, /area/station/security/checkpoint/customs/auxiliary) +"bRK" = ( +/obj/effect/turf_decal/siding/thinplating_new/light{ + dir = 4 + }, +/turf/open/floor/iron/white/small, +/area/station/service/hydroponics) "bRN" = ( /obj/effect/turf_decal/stripes/white/line{ dir = 1 @@ -4082,6 +4827,23 @@ }, /turf/open/space/basic, /area/space/nearstation) +"bTo" = ( +/obj/effect/turf_decal/weather/dirt, +/obj/effect/turf_decal/weather/dirt{ + dir = 1 + }, +/obj/structure/flora/bush/flowers_yw, +/obj/machinery/airalarm/directional/north, +/obj/machinery/camera/directional/north, +/turf/open/floor/grass, +/area/station/service/chapel) +"bTE" = ( +/obj/effect/turf_decal/tile/brown/half, +/obj/effect/turf_decal/tile/brown/half{ + dir = 1 + }, +/turf/open/floor/iron/textured_half, +/area/station/cargo/miningoffice) "bTJ" = ( /obj/structure/lattice/catwalk, /obj/machinery/atmospherics/pipe/smart/simple/brown/visible{ @@ -4089,19 +4851,12 @@ }, /turf/open/space/basic, /area/station/engineering/atmos/space_catwalk) -"bUf" = ( -/obj/structure/disposalpipe/trunk{ - dir = 8 - }, -/obj/machinery/disposal/bin, -/obj/effect/turf_decal/bot, -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/green{ - dir = 4 - }, -/obj/machinery/light/cold/directional/east, +"bTO" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, -/area/station/service/hydroponics) +/area/station/commons/fitness/recreation/entertainment) "bUr" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/turf_decal/tile/blue{ @@ -4110,20 +4865,6 @@ /obj/machinery/light/cold/directional/east, /turf/open/floor/iron/white, /area/station/medical/medbay/central) -"bUt" = ( -/obj/effect/turf_decal/tile/green{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 4 - }, -/turf/open/floor/iron/dark/corner{ - dir = 1 - }, -/area/station/hallway/primary/central/fore) "bUv" = ( /obj/structure/cable, /obj/effect/turf_decal/tile/neutral/fourcorners, @@ -4131,19 +4872,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/medical/medbay/aft) -"bUz" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/glass, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/port) "bUD" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/turf_decal/tile/neutral{ @@ -4171,30 +4899,6 @@ /obj/machinery/light/cold/directional/west, /turf/open/floor/tram, /area/station/security/tram) -"bVk" = ( -/obj/effect/mapping_helpers/broken_floor, -/obj/structure/chair/stool/directional/east, -/turf/open/floor/carpet/orange, -/area/station/service/abandoned_gambling_den) -"bVv" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/neutral/line, -/obj/effect/turf_decal/trimline/neutral/line{ - dir = 1 - }, -/obj/machinery/navbeacon{ - codes_txt = "patrol;next_patrol=1.0-Security-PNexus"; - location = "23.2-Evac-Garden" - }, -/turf/open/floor/iron, -/area/station/hallway/primary/port) -"bVB" = ( -/obj/effect/turf_decal/tile/dark_red/opposingcorners, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/security/tram) "bVD" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -4207,6 +4911,16 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white/small, /area/station/security/execution/education) +"bVJ" = ( +/obj/effect/turf_decal/plaque{ + icon_state = "L13"; + pixel_y = -15 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central/aft) "bVO" = ( /obj/structure/chair/stool/directional/north, /obj/effect/turf_decal/siding/red, @@ -4220,20 +4934,6 @@ }, /turf/open/floor/iron, /area/station/maintenance/starboard/greater) -"bWa" = ( -/obj/effect/turf_decal/siding/white{ - dir = 10 - }, -/obj/effect/mapping_helpers/broken_floor, -/obj/structure/closet{ - anchored = 1; - can_be_unanchored = 1; - name = "Cold protection gear" - }, -/obj/item/clothing/suit/hooded/wintercoat/science, -/obj/item/clothing/suit/hooded/wintercoat/science, -/turf/open/floor/iron/dark/small, -/area/station/science/xenobiology) "bWg" = ( /obj/structure/lattice/catwalk, /obj/structure/railing{ @@ -4297,6 +4997,13 @@ }, /turf/open/space/basic, /area/space/nearstation) +"bWp" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/holodeck/rec_center) "bWs" = ( /obj/effect/turf_decal/stripes/line{ dir = 6 @@ -4304,16 +5011,23 @@ /obj/machinery/chem_heater/withbuffer, /turf/open/floor/iron, /area/station/science/xenobiology) -"bWt" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating, -/area/station/maintenance/starboard/central) "bXb" = ( /obj/effect/turf_decal/sand/plating, /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/plating, /area/station/maintenance/department/electrical) +"bXi" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/door/airlock/maintenance{ + name = "Crematorium" + }, +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/access/all/security/general, +/turf/open/floor/iron/textured_half{ + dir = 8 + }, +/area/station/security/brig/entrance) "bXu" = ( /obj/item/kirbyplants/random, /obj/machinery/firealarm/directional/south, @@ -4342,6 +5056,13 @@ }, /turf/open/floor/iron/white/small, /area/station/medical/storage) +"bXR" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/structure/table/wood, +/turf/open/floor/iron/grimy, +/area/station/service/bar) "bYe" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -4360,6 +5081,10 @@ }, /turf/open/floor/plating, /area/station/construction/mining/aux_base) +"bYh" = ( +/obj/structure/flora/bush/flowers_yw/style_3, +/turf/open/floor/grass, +/area/station/service/chapel) "bYk" = ( /obj/effect/spawner/random/engineering/tracking_beacon, /turf/open/floor/iron/white/small, @@ -4373,13 +5098,18 @@ dir = 1 }, /area/station/engineering/hallway) -"bYS" = ( +"bYE" = ( +/obj/structure/cable, +/obj/item/radio/intercom/directional/east, +/turf/open/floor/wood/parquet, +/area/station/service/library) +"bYK" = ( +/obj/effect/spawner/random/maintenance, /obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/portables_connector/visible/layer2{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/science/ordnance) +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/maintenance/fore/greater) "bYY" = ( /obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ dir = 4 @@ -4393,6 +5123,13 @@ dir = 1 }, /area/station/engineering/atmos/pumproom) +"bZa" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/siding/white{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/medical/medbay/aft) "bZs" = ( /obj/structure/table, /obj/item/reagent_containers/cup/glass/drinkingglass, @@ -4432,6 +5169,15 @@ }, /turf/open/floor/circuit/red, /area/station/ai_monitored/turret_protected/ai) +"bZz" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/wood/parquet, +/area/station/medical/psychology) "bZN" = ( /obj/effect/turf_decal/siding/thinplating_new/light{ dir = 4 @@ -4444,6 +5190,11 @@ }, /turf/open/floor/plating, /area/station/maintenance/department/engine) +"bZY" = ( +/obj/machinery/space_heater, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/central/greater) "cam" = ( /obj/machinery/flasher/directional/east{ id = "AI"; @@ -4465,11 +5216,33 @@ }, /turf/open/floor/plating, /area/station/engineering/supermatter) +"caD" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/turf/open/floor/wood, +/area/station/service/chapel/office) "caI" = ( /obj/structure/cable, /obj/effect/decal/cleanable/glass, /turf/open/floor/eighties, /area/station/service/abandoned_gambling_den/gaming) +"caK" = ( +/obj/structure/closet/secure_closet/personal, +/obj/item/radio/intercom/directional/south, +/turf/open/floor/iron, +/area/station/commons/fitness/locker_room) +"caW" = ( +/obj/structure/sign/warning/no_smoking/circle/directional/north, +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/turf/open/floor/wood/large, +/area/station/service/bar) "cbg" = ( /obj/structure/table/wood, /obj/item/storage/fancy/candle_box, @@ -4532,6 +5305,12 @@ }, /turf/open/floor/iron/dark/smooth_large, /area/station/command/meeting_room) +"cbH" = ( +/obj/structure/cable, +/obj/item/kirbyplants/random, +/obj/machinery/power/apc/auto_name/directional/south, +/turf/open/floor/iron/smooth, +/area/station/maintenance/solars/starboard/fore) "cbJ" = ( /obj/structure/rack, /obj/effect/decal/cleanable/dirt/dust, @@ -4546,21 +5325,6 @@ /obj/effect/turf_decal/bot_white, /turf/open/floor/iron/small, /area/station/medical/storage) -"cbT" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/door/airlock/public/glass{ - name = "Services Corridor" - }, -/obj/machinery/door/firedoor, -/turf/open/floor/iron/textured_half{ - dir = 8 - }, -/area/station/hallway/primary/central/aft) "cbU" = ( /obj/effect/turf_decal/stripes/white/line{ dir = 5 @@ -4597,6 +5361,17 @@ }, /turf/open/space/basic, /area/station/engineering/atmos/space_catwalk) +"ccv" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/stone, +/area/station/service/bar) "ccx" = ( /obj/structure/lattice/catwalk, /obj/structure/railing{ @@ -4640,34 +5415,6 @@ }, /turf/open/floor/plating/rust, /area/station/engineering/supermatter/room) -"ccO" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/cyan/visible, -/obj/structure/table, -/obj/effect/turf_decal/siding/thinplating_new/dark{ - dir = 1 - }, -/obj/effect/turf_decal/siding/thinplating_new/dark, -/obj/item/radio/intercom/directional/south, -/obj/item/c_tube{ - pixel_x = 20 - }, -/obj/item/clothing/head/cone{ - pixel_y = 5; - pixel_x = -6 - }, -/obj/item/clothing/head/cone{ - pixel_y = 7; - pixel_x = -6 - }, -/obj/item/pipe_dispenser{ - pixel_y = 9; - pixel_x = 14 - }, -/obj/item/clothing/mask/cigarette{ - pixel_y = 2 - }, -/turf/open/floor/iron/small, -/area/station/engineering/atmos/pumproom) "cdg" = ( /obj/machinery/light/small/directional/west, /turf/open/floor/grass, @@ -4676,10 +5423,6 @@ /obj/machinery/telecomms/server/presets/medical, /turf/open/floor/circuit, /area/station/tcommsat/server) -"cdq" = ( -/obj/structure/broken_flooring/pile/directional/east, -/turf/open/floor/plating, -/area/station/maintenance/department/medical/central) "cdz" = ( /obj/effect/turf_decal/tile/yellow, /obj/machinery/light/cold/dim/directional/west, @@ -4689,23 +5432,39 @@ /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/iron/smooth, /area/station/engineering/main) +"cdB" = ( +/obj/machinery/camera/directional/south, +/obj/structure/flora/bush/flowers_pp/style_2, +/obj/effect/turf_decal/weather/dirt{ + dir = 6 + }, +/turf/open/floor/grass, +/area/station/service/chapel) "cdW" = ( /obj/structure/cable, /turf/open/floor/catwalk_floor/iron_smooth, /area/station/maintenance/disposal/incinerator) +"cdY" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/commons/fitness/locker_room) "cea" = ( /obj/structure/window/spawner/directional/south, /turf/open/space/basic, /area/space/nearstation) -"cek" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 +"cev" = ( +/obj/effect/turf_decal/tile/yellow/anticorner/contrasted{ + dir = 1 }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) +/obj/machinery/chem_dispenser, +/obj/effect/decal/cleanable/cobweb, +/obj/machinery/light/small/directional/north, +/turf/open/floor/iron/dark, +/area/station/medical/pharmacy) "ceA" = ( /obj/item/kirbyplants/random, /obj/effect/turf_decal/stripes/white/line{ @@ -4715,17 +5474,6 @@ /obj/machinery/light/small/directional/west, /turf/open/floor/iron/dark/small, /area/station/engineering/supermatter/room) -"ceE" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/door/airlock{ - name = "Maintenance" - }, -/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, -/turf/open/floor/plating, -/area/station/maintenance/central/greater) "ceP" = ( /obj/effect/turf_decal/tile/yellow/opposingcorners, /obj/machinery/atmospherics/pipe/smart/simple/cyan/hidden{ @@ -4740,10 +5488,22 @@ }, /turf/open/floor/iron, /area/station/command/heads_quarters/ce) -"ceZ" = ( -/obj/structure/cable, -/turf/open/floor/plating, -/area/station/maintenance/port/aft) +"ceS" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/neutral, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central/fore) +"cfa" = ( +/obj/structure/closet/lasertag/red, +/obj/effect/turf_decal/stripes/red/line{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/turf/open/floor/iron, +/area/station/commons/fitness/recreation/entertainment) "cfc" = ( /obj/machinery/atmospherics/pipe/smart/simple/green/hidden{ dir = 6 @@ -4768,11 +5528,6 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/dock) -"cfT" = ( -/obj/machinery/flasher/portable, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/station/security/tram) "cgh" = ( /obj/structure/lattice/catwalk, /obj/structure/railing{ @@ -4814,24 +5569,24 @@ dir = 1 }, /area/station/engineering/atmospherics_engine) +"cgL" = ( +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 1 + }, +/obj/machinery/duct, +/turf/open/floor/iron/showroomfloor, +/area/station/commons/dorms) "cgM" = ( /turf/open/misc/asteroid, /area/station/maintenance/starboard/greater) -"cgY" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/button/door/directional/east{ - id = "AuxToilet2"; - name = "Lock Control"; - normaldoorcontrol = 1; - specialfunctions = 4 - }, -/obj/structure/toilet, -/obj/machinery/light/small/directional/west, -/obj/effect/spawner/random/trash/soap{ - spawn_scatter_radius = 1 +"cgV" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 9 }, -/turf/open/floor/iron/showroomfloor, -/area/station/commons/toilet/auxiliary) +/obj/structure/flora/bush/flowers_yw/style_3, +/obj/machinery/firealarm/directional/west, +/turf/open/floor/grass, +/area/station/service/chapel) "cgZ" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -4846,7 +5601,7 @@ "chb" = ( /obj/effect/turf_decal/stripes/line, /obj/machinery/atmospherics/pipe/smart/simple/yellow/visible{ - dir = 5 + dir = 8 }, /turf/open/floor/iron, /area/station/engineering/atmos) @@ -4854,6 +5609,17 @@ /obj/effect/decal/cleanable/greenglow, /turf/open/floor/plating, /area/station/engineering/atmospherics_engine) +"chh" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/dark_red/half/contrasted{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wideplating/dark/corner{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/security/brig/entrance) "chj" = ( /obj/structure/grille, /turf/closed/wall/mineral/titanium/nodiagonal, @@ -4880,6 +5646,26 @@ /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/iron/smooth, /area/station/engineering/supermatter/room) +"chC" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/machinery/light/cold/directional/north, +/obj/machinery/firealarm/directional/north, +/obj/machinery/camera/directional/north, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/port) +"chI" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/siding/thinplating{ + dir = 10 + }, +/turf/open/floor/eighties, +/area/station/hallway/primary/central/fore) "chO" = ( /obj/structure/cable, /obj/effect/decal/cleanable/dirt, @@ -4888,11 +5674,6 @@ /obj/effect/landmark/generic_maintenance_landmark, /turf/open/floor/iron/smooth, /area/station/maintenance/solars/port/aft) -"chP" = ( -/obj/machinery/deepfryer, -/obj/machinery/light/small/directional/south, -/turf/open/floor/iron/cafeteria, -/area/station/service/kitchen) "chU" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -4902,6 +5683,30 @@ /obj/machinery/light/small/directional/east, /turf/open/floor/iron, /area/station/security) +"cib" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 1 + }, +/mob/living/basic/deer, +/obj/structure/flora/bush/flowers_pp/style_random, +/turf/open/floor/grass, +/area/station/service/chapel) +"cik" = ( +/obj/structure/bookcase/random, +/obj/item/radio/intercom/directional/west, +/turf/open/floor/wood/parquet, +/area/station/service/library) +"cip" = ( +/obj/structure/cable, +/obj/effect/turf_decal/tile/red/opposingcorners{ + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/obj/effect/landmark/start/depsec/science, +/turf/open/floor/iron, +/area/station/security/checkpoint/science) "cis" = ( /obj/machinery/atmospherics/pipe/smart/simple/general/visible{ dir = 9 @@ -4922,6 +5727,16 @@ /obj/machinery/recharger, /turf/open/floor/iron/white, /area/station/science/auxlab/firing_range) +"ciV" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/station/commons/fitness/locker_room) +"ciW" = ( +/obj/structure/cable, +/obj/effect/turf_decal/tile/purple/opposingcorners, +/turf/open/floor/iron/cafeteria, +/area/station/science/circuits) "cjm" = ( /obj/structure/closet/firecloset, /obj/machinery/status_display/evac/directional/south, @@ -4955,6 +5770,18 @@ /obj/machinery/light/cold/directional/east, /turf/open/floor/iron, /area/station/hallway/primary/fore) +"ckb" = ( +/obj/structure/chair/comfy/beige{ + dir = 4 + }, +/obj/machinery/button/door/directional/north{ + id = "CabinS"; + name = "Bolt Control"; + normaldoorcontrol = 1; + specialfunctions = 4 + }, +/turf/open/floor/carpet/green, +/area/station/commons/dorms) "cks" = ( /obj/structure/hedge, /obj/effect/turf_decal/tile/yellow{ @@ -4969,6 +5796,10 @@ /obj/structure/sign/departments/engineering/directional/north, /turf/open/floor/iron, /area/station/hallway/primary/fore) +"ckt" = ( +/obj/machinery/atmospherics/pipe/smart/simple/purple/visible, +/turf/open/floor/iron/dark, +/area/station/science/ordnance) "cku" = ( /obj/structure/barricade/wooden/crude, /turf/open/floor/noslip, @@ -4992,6 +5823,16 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/security) +"ckP" = ( +/obj/effect/turf_decal/trimline/neutral/line, +/obj/effect/turf_decal/trimline/neutral/line{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/port) "ckV" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -5023,13 +5864,6 @@ /obj/structure/chair/stool/directional/north, /turf/open/floor/iron/kitchen/small, /area/station/maintenance/aft) -"clc" = ( -/obj/effect/turf_decal/siding/wood, -/obj/effect/turf_decal/siding/wood{ - dir = 1 - }, -/turf/open/floor/iron/grimy, -/area/station/service/theater) "clf" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -5038,6 +5872,13 @@ }, /turf/open/floor/plating, /area/station/commons/toilet/auxiliary) +"cll" = ( +/obj/machinery/door/window/right/directional/west{ + name = "Fitness Ring" + }, +/obj/structure/window/spawner/directional/north, +/turf/open/floor/iron/dark, +/area/station/commons/dorms) "clq" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment, @@ -5052,6 +5893,18 @@ /obj/structure/cable, /turf/open/floor/iron/white/small, /area/station/command/heads_quarters/cmo) +"clV" = ( +/obj/structure/table, +/obj/effect/mapping_helpers/broken_floor, +/obj/machinery/cell_charger, +/obj/item/stock_parts/power_store/cell/high, +/obj/item/clothing/mask/breath{ + pixel_x = 15; + pixel_y = 5 + }, +/obj/machinery/light/small/directional/south, +/turf/open/floor/iron/smooth, +/area/station/command/gateway) "clX" = ( /obj/structure/railing/corner, /turf/open/floor/wood, @@ -5072,6 +5925,23 @@ "cmf" = ( /turf/closed/wall/rust, /area/station/maintenance/department/engine/atmos) +"cmn" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/structure/table, +/obj/item/stock_parts/subspace/analyzer, +/obj/item/stock_parts/subspace/analyzer, +/obj/item/stock_parts/subspace/analyzer, +/obj/item/stock_parts/capacitor{ + pixel_x = -7; + pixel_y = 9 + }, +/obj/item/stock_parts/capacitor{ + pixel_x = -7; + pixel_y = 9 + }, +/obj/machinery/camera/autoname/directional/north, +/turf/open/floor/iron/dark, +/area/station/engineering/storage/tcomms) "cmu" = ( /obj/structure/lattice/catwalk, /obj/structure/railing/corner, @@ -5105,15 +5975,29 @@ /obj/structure/barricade/wooden/crude, /turf/open/floor/plating, /area/station/maintenance/department/medical/central) -"cmT" = ( -/obj/effect/turf_decal/tile/dark_red/opposingcorners, -/obj/effect/decal/cleanable/dirt, +"cmB" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 6 + }, +/obj/machinery/light/floor, +/obj/structure/table/wood, +/turf/open/floor/iron/grimy, +/area/station/service/bar) +"cmD" = ( /obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 +/obj/structure/disposalpipe/segment, +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/trash, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"cmO" = ( +/obj/machinery/sparker/directional/north{ + id = "Xenobio" }, -/turf/open/floor/iron, -/area/station/security/brig/entrance) +/turf/open/floor/engine/xenobio, +/area/station/science/xenobiology) "cmX" = ( /obj/effect/turf_decal/tile/dark_red{ dir = 8 @@ -5123,24 +6007,21 @@ /obj/machinery/light/small/directional/north, /turf/open/floor/iron, /area/station/security/tram) +"cnn" = ( +/obj/effect/turf_decal/siding/wideplating/dark{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron/small, +/area/station/service/barber) "cns" = ( /obj/machinery/atmospherics/pipe/smart/simple/dark/visible{ dir = 5 }, /turf/open/floor/iron/dark, /area/station/science/ordnance) -"cnu" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 6 - }, -/obj/structure/table/glass, -/obj/item/book/codex_gigas, -/obj/item/camera{ - pixel_y = 18 - }, -/obj/item/radio/intercom/directional/south, -/turf/open/floor/iron/grimy, -/area/station/service/library) "cnG" = ( /obj/machinery/suit_storage_unit/rd, /turf/open/floor/iron/dark/small, @@ -5156,6 +6037,14 @@ /obj/machinery/atmospherics/pipe/layer_manifold/scrubbers/visible, /turf/open/space/basic, /area/station/engineering/atmos/space_catwalk) +"cob" = ( +/obj/effect/turf_decal/tile/brown/opposingcorners, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/obj/effect/landmark/start/shaft_miner, +/turf/open/floor/iron, +/area/station/cargo/miningoffice) "cop" = ( /obj/machinery/portable_atmospherics/canister/anesthetic_mix, /obj/machinery/atmospherics/components/unary/portables_connector/visible{ @@ -5170,21 +6059,22 @@ "cow" = ( /turf/closed/wall, /area/station/engineering/lobby) +"coC" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central/fore) "coO" = ( /obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden{ dir = 4 }, /turf/open/floor/wood, /area/station/engineering/atmos) -"cpc" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/siding/thinplating_new/light{ - dir = 4 - }, -/obj/structure/extinguisher_cabinet/directional/north, -/turf/open/floor/iron, -/area/station/service/hydroponics) "cpA" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -5274,6 +6164,23 @@ }, /turf/open/floor/plating, /area/station/science/ordnance/storage) +"cqD" = ( +/obj/structure/table/wood, +/obj/item/holosign_creator/robot_seat/bar{ + pixel_x = 2; + pixel_y = 9 + }, +/obj/structure/sign/picture_frame/portrait/bar{ + pixel_y = 32 + }, +/obj/item/roulette_wheel_beacon, +/obj/machinery/light/small/directional/north, +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/turf/open/floor/stone, +/area/station/service/bar/backroom) "cqM" = ( /obj/structure/railing{ dir = 8 @@ -5299,6 +6206,40 @@ }, /turf/open/floor/plating, /area/station/service/janitor) +"cri" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/kitchen/small, +/area/station/service/kitchen) +"crm" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/neutral, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/port) +"cro" = ( +/obj/structure/cable, +/obj/structure/chair/sofa/corp/left{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/wood/large, +/area/station/command/corporate_suite) +"cru" = ( +/obj/structure/cable, +/obj/machinery/light/cold/directional/north, +/turf/open/floor/iron, +/area/station/hallway/secondary/dock) +"crx" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/neutral, +/obj/item/radio/intercom/directional/east, +/turf/open/floor/iron, +/area/station/hallway/primary/central/fore) "crE" = ( /obj/structure/window/spawner/directional/north, /turf/open/space/basic, @@ -5315,13 +6256,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/ai_monitored/turret_protected/aisat/maint) -"csp" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 1 - }, -/obj/structure/flora/bush/flowers_pp/style_random, -/turf/open/floor/grass, -/area/station/service/chapel) "css" = ( /obj/effect/turf_decal/stripes/white/line{ dir = 10 @@ -5330,6 +6264,16 @@ /obj/structure/tram, /turf/open/floor/tram, /area/station/maintenance/port/aft) +"csv" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/red{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/white/corner, +/area/station/hallway/secondary/exit/departure_lounge) "csw" = ( /obj/structure/window/reinforced/spawner/directional/south, /obj/effect/turf_decal/stripes/end, @@ -5377,6 +6321,11 @@ /obj/machinery/power/apc/auto_name/directional/east, /turf/open/floor/iron/smooth, /area/station/ai_monitored/turret_protected/aisat/foyer) +"csZ" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plating, +/area/station/maintenance/central/greater) "ctb" = ( /obj/effect/turf_decal/siding/yellow{ dir = 6 @@ -5388,21 +6337,44 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron/diagonal, /area/station/engineering/lobby) -"ctq" = ( +"ctl" = ( /obj/structure/cable, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/effect/turf_decal/siding/purple{ - dir = 1 +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/airalarm/directional/west, +/turf/open/floor/iron, +/area/station/security/prison/work) +"ctH" = ( +/turf/open/floor/iron/herringbone, +/area/station/commons/dorms) +"ctN" = ( +/obj/structure/closet/secure_closet/freezer/empty, +/obj/item/food/grown/tomato{ + pixel_y = 2; + pixel_x = 2 }, -/obj/effect/turf_decal/siding/purple/corner{ - dir = 8 +/obj/item/food/grown/tomato{ + pixel_y = 2; + pixel_x = 2 }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 +/obj/item/food/grown/eggplant{ + pixel_y = 5; + pixel_x = 5 }, -/turf/open/floor/iron/dark, -/area/station/science/genetics) +/obj/item/food/grown/eggplant{ + pixel_y = 5; + pixel_x = 5 + }, +/obj/item/storage/fancy/egg_box, +/obj/item/storage/fancy/egg_box, +/obj/item/reagent_containers/condiment/milk, +/obj/item/reagent_containers/condiment/milk, +/obj/item/reagent_containers/condiment/soymilk, +/obj/item/reagent_containers/condiment/soymilk, +/obj/item/reagent_containers/condiment/flour, +/obj/item/reagent_containers/condiment/flour, +/turf/open/floor/iron/kitchen/small, +/area/station/service/kitchen) "cua" = ( /obj/effect/spawner/random/maintenance, /obj/effect/spawner/random/structure/crate, @@ -5426,11 +6398,12 @@ /obj/machinery/light/cold/directional/north, /turf/open/floor/iron, /area/station/security/prison/rec) -"cuS" = ( -/obj/effect/mapping_helpers/broken_floor, +"cvk" = ( +/obj/effect/spawner/random/structure/crate, +/obj/effect/spawner/random/maintenance, /obj/effect/decal/cleanable/dirt, -/turf/open/floor/wood/tile, -/area/station/commons/vacant_room/commissary) +/turf/open/floor/iron, +/area/station/maintenance/fore/greater) "cvy" = ( /obj/structure/bed/medical/emergency, /turf/open/floor/iron/dark, @@ -5471,12 +6444,18 @@ dir = 1 }, /area/station/cargo/bitrunning/den) -"cvZ" = ( -/obj/structure/closet/secure_closet/evidence, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/light/dim/directional/north, -/turf/open/floor/iron/smooth, -/area/station/security/evidence) +"cvX" = ( +/obj/structure/sign/poster/official/random/directional/south, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 1 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 6 + }, +/obj/machinery/airalarm/directional/east, +/obj/item/kirbyplants/random, +/turf/open/floor/stone, +/area/station/service/bar) "cwb" = ( /obj/effect/turf_decal/stripes/white/end{ dir = 1 @@ -5487,16 +6466,6 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/engineering/atmos) -"cwp" = ( -/obj/structure/disposalpipe/segment{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/obj/effect/landmark/navigate_destination/lawyer, -/turf/open/floor/iron, -/area/station/hallway/secondary/recreation) "cwt" = ( /obj/structure/table/reinforced, /obj/machinery/door/firedoor, @@ -5556,11 +6525,6 @@ }, /turf/open/floor/catwalk_floor, /area/station/engineering/atmos/office) -"cxT" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/table/wood, -/turf/open/floor/wood, -/area/station/cargo/boutique) "cyf" = ( /obj/structure/disposalpipe/segment{ dir = 9 @@ -5571,22 +6535,6 @@ /obj/structure/extinguisher_cabinet/directional/south, /turf/open/floor/iron, /area/station/hallway/secondary/dock) -"cyh" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 9 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/station/maintenance/central/greater) -"cyj" = ( -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/effect/turf_decal/siding/purple, -/obj/item/kirbyplants/random, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/newscaster/directional/south, -/turf/open/floor/iron/dark, -/area/station/science/genetics) "cyk" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /turf/open/floor/iron/dark, @@ -5603,16 +6551,6 @@ "cyy" = ( /turf/open/floor/catwalk_floor/titanium, /area/station/command/heads_quarters/ce) -"cyB" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/mapping_helpers/broken_floor, -/obj/effect/turf_decal/tile/blue, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/white/corner{ - dir = 8 - }, -/area/station/hallway/secondary/dock) "cyG" = ( /obj/effect/turf_decal/siding/thinplating_new/corner, /obj/machinery/atmospherics/pipe/smart/simple/cyan/hidden{ @@ -5623,6 +6561,17 @@ /obj/structure/cable, /turf/open/floor/iron/dark/small, /area/station/command/heads_quarters/ce) +"cyP" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/firedoor, +/obj/machinery/door/window/right/directional/east{ + req_access = list("hydroponics"); + name = "Hydroponics Service Desk" + }, +/turf/open/floor/iron/textured_half{ + dir = 8 + }, +/area/station/service/hydroponics) "cyU" = ( /obj/effect/spawner/random/structure/table, /obj/effect/spawner/random/maintenance, @@ -5661,29 +6610,18 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/medical/treatment_center) -"czi" = ( +"czq" = ( +/obj/structure/curtain/cloth, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/effect/turf_decal/tile/red/opposingcorners, -/obj/effect/turf_decal/tile/blue/opposingcorners{ +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/iron/textured_half{ dir = 8 }, -/obj/machinery/airalarm/directional/south, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/smooth, -/area/station/service/greenroom) -"czV" = ( -/obj/structure/window/reinforced/spawner/directional/west, -/obj/machinery/status_display/door_timer{ - id = "Cell 3"; - name = "Cell 3"; - pixel_y = -32 - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/camera/autoname/directional/south, -/turf/open/floor/iron/dark/small, -/area/station/security/brig) +/area/station/service/janitor) "cAb" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -5693,16 +6631,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white/side, /area/station/science/lower) -"cAc" = ( -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/button/door/directional/south{ - id = "secbreach"; - name = "Emergency Breach Shutters"; - req_access = list("security") - }, -/turf/open/floor/iron/dark, -/area/station/security/office) "cAd" = ( /obj/structure/filingcabinet/chestdrawer, /obj/item/radio/intercom/directional/south, @@ -5719,6 +6647,18 @@ }, /turf/open/floor/iron/white/small, /area/station/medical/surgery/theatre) +"cAl" = ( +/obj/machinery/camera/autoname/directional/east, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/machinery/light/small/directional/east, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/item/radio/intercom/directional/east, +/turf/open/floor/stone, +/area/station/service/bar) "cAm" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/box/corners{ @@ -5746,6 +6686,14 @@ }, /turf/open/floor/catwalk_floor/iron_smooth, /area/station/science/robotics/mechbay) +"cAZ" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/spawner/random/trash, +/turf/open/floor/plating, +/area/station/maintenance/port/greater) "cBw" = ( /obj/effect/turf_decal/tile/yellow/opposingcorners, /obj/structure/filingcabinet/chestdrawer, @@ -5794,10 +6742,38 @@ /obj/item/storage/bag/xeno, /turf/open/floor/iron/white, /area/station/science/cytology) +"cCd" = ( +/obj/effect/spawner/random/trash, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/central/greater) +"cCe" = ( +/obj/structure/bed/maint, +/obj/effect/spawner/random/trash, +/turf/open/floor/plating, +/area/station/maintenance/central/greater) "cCl" = ( /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/starboard/greater) +"cCv" = ( +/obj/item/radio/intercom/directional/south, +/obj/effect/turf_decal/siding/wideplating_new/terracotta, +/obj/effect/decal/cleanable/dirt, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/wood/tile, +/area/station/maintenance/central/lesser) +"cCx" = ( +/obj/structure/chair{ + pixel_y = -2 + }, +/turf/open/floor/iron, +/area/station/maintenance/hallway/abandoned_command) "cCD" = ( /obj/structure/cable, /obj/machinery/door/airlock/maintenance/external{ @@ -5813,12 +6789,6 @@ }, /turf/open/misc/asteroid/airless, /area/space/nearstation) -"cCP" = ( -/obj/structure/window/spawner/directional/south, -/obj/structure/flora/bush/flowers_pp/style_random, -/obj/machinery/light/small/directional/north, -/turf/open/misc/sandy_dirt, -/area/station/commons) "cCW" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -5829,6 +6799,17 @@ /obj/machinery/firealarm/directional/north, /turf/open/floor/iron/dark/small, /area/station/medical/chemistry) +"cDa" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/window/reinforced/spawner/directional/east, +/obj/machinery/atmospherics/components/binary/pump{ + dir = 1 + }, +/turf/open/floor/iron/white/side{ + dir = 8 + }, +/area/station/science/xenobiology) "cDb" = ( /obj/structure/chair/office{ dir = 4 @@ -5836,6 +6817,10 @@ /obj/effect/landmark/start/head_of_security, /turf/open/floor/carpet/red, /area/station/command/heads_quarters/hos) +"cDf" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/iron, +/area/station/hallway/secondary/dock) "cDt" = ( /obj/structure/chair/comfy/shuttle, /obj/structure/transport/linear/tram, @@ -5901,6 +6886,14 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/station/maintenance/starboard/aft) +"cEo" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/landmark/start/hangover, +/turf/open/floor/iron, +/area/station/hallway/primary/central/aft) "cEs" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/door/window/brigdoor/right/directional/north{ @@ -5908,10 +6901,6 @@ name = "AI Core Chamber Access"; req_access = list("ai_upload") }, -/obj/machinery/door/poddoor/shutters/preopen{ - id = "AI Core shutters"; - name = "AI Core Shutter" - }, /turf/open/floor/circuit/red, /area/station/ai_monitored/turret_protected/ai) "cED" = ( @@ -5922,6 +6911,12 @@ }, /turf/open/floor/iron/small, /area/station/engineering/break_room) +"cEF" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/light_switch/directional/north, +/turf/open/floor/wood/large, +/area/station/command/heads_quarters/captain/private) "cEH" = ( /obj/machinery/atmospherics/pipe/bridge_pipe/scrubbers/visible{ dir = 4 @@ -6019,10 +7014,6 @@ name = "AI Core Chamber Access"; req_access = list("ai_upload") }, -/obj/machinery/door/poddoor/shutters/preopen{ - id = "AI Core shutters"; - name = "AI Core Shutter" - }, /turf/open/floor/circuit/red, /area/station/ai_monitored/turret_protected/ai) "cFR" = ( @@ -6045,25 +7036,25 @@ }, /turf/open/floor/iron/small, /area/station/maintenance/port/lesser) -"cGb" = ( -/obj/item/stack/sheet/iron/fifty, -/obj/item/stack/rods/fifty, -/obj/item/stack/sheet/glass/fifty, -/obj/item/electronics/airlock, -/obj/item/electronics/airlock, -/obj/item/stock_parts/cell/high, -/obj/item/stack/sheet/mineral/plasma{ - amount = 30 - }, -/obj/item/gps, -/obj/structure/closet/crate/engineering, -/obj/machinery/light/cold/directional/east, -/obj/item/clothing/gloves/color/yellow, -/turf/open/floor/iron/dark/small, -/area/station/engineering/storage_shared) "cGj" = ( /turf/closed/wall/r_wall, /area/station/security/execution/education) +"cGG" = ( +/obj/structure/rack, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/item/clothing/gloves/color/fyellow{ + pixel_y = 2 + }, +/obj/item/wrench, +/obj/item/cigarette/xeno{ + pixel_x = -3; + pixel_y = -9 + }, +/obj/item/clothing/head/utility/welding, +/turf/open/floor/iron/small, +/area/station/maintenance/department/engine/atmos) "cGI" = ( /obj/machinery/firealarm/directional/south, /obj/structure/closet/secure_closet/medical3, @@ -6140,6 +7131,15 @@ /mob/living/carbon/human/species/monkey, /turf/open/floor/grass, /area/station/medical/virology) +"cIX" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/structure/chair/wood{ + dir = 8 + }, +/turf/open/floor/iron/grimy, +/area/station/service/bar) "cJb" = ( /obj/structure/lattice/catwalk, /obj/structure/railing{ @@ -6147,6 +7147,22 @@ }, /turf/open/space/basic, /area/station/engineering/atmos/space_catwalk) +"cJv" = ( +/obj/effect/mapping_helpers/airlock/access/any/service/hydroponics, +/obj/machinery/door/airlock/hydroponics/glass{ + name = "Hydroponics" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/textured_half{ + dir = 8 + }, +/area/station/service/hydroponics) "cJz" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -6191,17 +7207,30 @@ /obj/item/clothing/head/utility/welding, /turf/open/floor/iron/smooth, /area/station/commons/storage/tools) +"cKa" = ( +/turf/open/floor/iron/dark/side{ + dir = 4 + }, +/area/station/science/lab) "cKc" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/flasher/directional/west{ - id = "ai" - }, /obj/effect/decal/cleanable/dirt, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "AI Core shutters"; + name = "AI Core Shutter" + }, /turf/open/floor/iron/stairs, /area/station/ai_monitored/turret_protected/ai) "cKk" = ( /turf/closed/mineral/random/stationside, /area/station/ai_monitored/turret_protected/aisat/maint) +"cKt" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/central/greater) "cKv" = ( /obj/machinery/atmospherics/pipe/smart/simple/orange/visible{ dir = 4 @@ -6214,6 +7243,12 @@ dir = 8 }, /area/station/engineering/supermatter/room) +"cKL" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron/dark/small, +/area/station/tcommsat/server) "cKV" = ( /obj/machinery/light/floor, /obj/effect/landmark/event_spawn, @@ -6228,13 +7263,6 @@ /obj/structure/marker_beacon/indigo, /turf/open/space/basic, /area/space/nearstation) -"cLm" = ( -/obj/structure/table, -/obj/effect/mapping_helpers/broken_floor, -/obj/item/rcl/pre_loaded, -/obj/machinery/light/small/directional/south, -/turf/open/floor/iron, -/area/station/commons/storage/art) "cLD" = ( /obj/structure/window/spawner/directional/north, /obj/effect/turf_decal/siding/thinplating_new/dark{ @@ -6244,6 +7272,20 @@ /obj/machinery/firealarm/directional/south, /turf/open/floor/iron, /area/station/security/courtroom) +"cLJ" = ( +/obj/effect/turf_decal/siding/wood/corner, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/wood, +/area/station/service/abandoned_gambling_den) +"cLL" = ( +/obj/structure/flora/rock/pile/jungle/style_5{ + pixel_x = -5; + pixel_y = 5 + }, +/turf/open/floor/grass, +/area/station/service/chapel) "cLS" = ( /obj/effect/turf_decal/siding/white{ dir = 10 @@ -6258,6 +7300,11 @@ }, /turf/open/floor/iron/dark/small, /area/station/science/xenobiology) +"cLW" = ( +/mob/living/basic/mouse/brown/tom, +/obj/item/radio/intercom/prison/directional/south, +/turf/open/floor/plating, +/area/station/security/prison/safe) "cLY" = ( /obj/machinery/computer/security{ dir = 4 @@ -6273,6 +7320,19 @@ /obj/structure/lattice, /turf/open/space/basic, /area/space/nearstation) +"cME" = ( +/obj/structure/extinguisher_cabinet/directional/north, +/obj/machinery/camera/autoname/directional/north, +/obj/machinery/button/door/directional/east{ + id = "kitchenshutters"; + name = "Kitchen Shutter Control" + }, +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/turf/open/floor/iron/kitchen/small, +/area/station/service/kitchen) "cMS" = ( /obj/structure/cable, /obj/structure/chair/stool/directional/north, @@ -6288,6 +7348,11 @@ /obj/effect/spawner/random/trash, /turf/open/floor/plating, /area/station/maintenance/port/lesser) +"cMY" = ( +/obj/structure/rack, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/iron/dark/small, +/area/station/maintenance/aft) "cMZ" = ( /obj/machinery/power/smes/engineering, /obj/machinery/camera/directional/west{ @@ -6296,20 +7361,11 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/engineering/engine_smes) -"cNu" = ( -/obj/structure/disposalpipe/segment{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/neutral, -/obj/machinery/status_display/evac/directional/south, +"cNk" = ( +/obj/structure/sign/departments/restroom/directional/south, +/obj/machinery/camera/autoname/directional/east, /turf/open/floor/iron, -/area/station/hallway/primary/port) -"cNF" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/spawner/random/structure/closet_maintenance, -/turf/open/floor/plating, -/area/station/maintenance/central/greater) +/area/station/commons/fitness/locker_room) "cNR" = ( /obj/structure/chair/office{ dir = 4 @@ -6330,21 +7386,41 @@ }, /turf/open/floor/engine, /area/station/science/xenobiology) -"cOm" = ( -/obj/effect/turf_decal/tile/brown/full, -/turf/open/floor/iron/smooth_large, -/area/station/service/bar) +"cOd" = ( +/obj/structure/flora/bush/flowers_yw/style_random, +/obj/structure/flora/rock/pile/style_2{ + pixel_x = -1; + pixel_y = -3 + }, +/obj/structure/window/spawner/directional/east, +/obj/structure/window/spawner/directional/west, +/turf/open/misc/sandy_dirt, +/area/station/commons/fitness/recreation/entertainment) +"cOC" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/station/science/xenobiology) +"cON" = ( +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/obj/structure/chair{ + pixel_y = -2 + }, +/turf/open/floor/iron, +/area/station/maintenance/department/medical/central) "cOW" = ( /obj/effect/turf_decal/stripes/white/line, /turf/open/floor/plating, /area/station/construction/mining/aux_base) -"cPd" = ( -/obj/effect/turf_decal/siding/wood/corner{ - dir = 4 - }, -/obj/structure/flora/bush/flowers_yw/style_random, -/turf/open/floor/grass, -/area/station/service/chapel) "cPe" = ( /obj/structure/spider/stickyweb, /turf/open/floor/iron/small, @@ -6356,6 +7432,20 @@ /obj/effect/turf_decal/siding/blue/corner, /turf/open/floor/iron/white/small, /area/station/medical/storage) +"cPj" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central/aft) +"cPp" = ( +/obj/structure/urinal/directional/east, +/turf/open/floor/iron/white/small, +/area/station/commons/toilet/restrooms) "cPv" = ( /obj/effect/turf_decal/siding/red{ dir = 10 @@ -6372,12 +7462,6 @@ }, /turf/open/floor/plating/airless, /area/space/nearstation) -"cPK" = ( -/obj/structure/closet/crate, -/obj/item/wirecutters, -/obj/machinery/airalarm/directional/north, -/turf/open/floor/iron/white/small, -/area/station/service/hydroponics/garden) "cPN" = ( /obj/machinery/airalarm/directional/north, /turf/open/floor/iron/showroomfloor, @@ -6405,6 +7489,37 @@ }, /turf/closed/wall/r_wall, /area/station/command/heads_quarters/ce) +"cQo" = ( +/obj/structure/closet/firecloset, +/obj/machinery/light/small/dim/directional/west, +/turf/open/floor/iron/dark/small, +/area/station/maintenance/aft) +"cQG" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/structure/sign/departments/holy/directional/west, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/station/hallway/primary/central/fore) +"cQI" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/item/radio/intercom/directional/south, +/obj/effect/turf_decal/tile/neutral, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/port) +"cQN" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 5 + }, +/obj/structure/table/wood, +/obj/effect/landmark/start/hangover, +/turf/open/floor/iron/grimy, +/area/station/service/bar) "cQP" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -6416,6 +7531,14 @@ }, /turf/open/floor/plating, /area/station/ai_monitored/turret_protected/aisat/maint) +"cRc" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/neutral, +/obj/structure/sign/departments/court/directional/east, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/hallway/primary/central/fore) "cRm" = ( /obj/effect/spawner/random/structure/closet_maintenance, /obj/effect/spawner/random/maintenance, @@ -6470,6 +7593,15 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/dark/textured, /area/station/ai_monitored/turret_protected/ai) +"cRL" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/machinery/firealarm/directional/west, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/station/hallway/primary/central/fore) "cRS" = ( /obj/structure/table, /obj/item/vending_refill/hydroseeds, @@ -6481,6 +7613,13 @@ }, /turf/open/floor/tram, /area/station/security/tram) +"cSb" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 10 + }, +/obj/structure/flora/bush/sparsegrass, +/turf/open/floor/grass, +/area/station/service/chapel) "cSk" = ( /obj/effect/turf_decal/tile/neutral/fourcorners, /obj/structure/closet/l3closet, @@ -6528,13 +7667,22 @@ }, /turf/open/floor/iron, /area/station/engineering/atmospherics_engine) -"cSR" = ( -/obj/structure/chair{ - dir = 1 +"cTn" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 9 }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/station/security/interrogation) +/turf/open/floor/plating, +/area/station/maintenance/central/greater) +"cTp" = ( +/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible{ + dir = 4 + }, +/obj/machinery/holopad, +/turf/open/floor/iron/white/small, +/area/station/science/ordnance/storage) "cTu" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/smooth, @@ -6567,6 +7715,15 @@ /obj/structure/cable, /turf/open/floor/iron/smooth, /area/station/engineering/atmos/office) +"cTX" = ( +/obj/machinery/computer/crew{ + dir = 4 + }, +/obj/effect/turf_decal/siding/blue{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/station/medical/paramedic) "cUa" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -6575,17 +7732,26 @@ /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/iron/dark/small, /area/station/engineering/supermatter/room) -"cUE" = ( -/obj/structure/cable, -/obj/effect/turf_decal/stripes/line{ +"cUf" = ( +/obj/structure/sign/directions/engineering{ + dir = 1; + pixel_y = 8 + }, +/obj/structure/sign/directions/command{ dir = 1 }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ - dir = 4 +/obj/structure/sign/directions/supply{ + dir = 1; + pixel_y = -8 }, -/turf/open/floor/iron/dark, -/area/station/medical/cryo) +/turf/closed/wall, +/area/station/service/library) +"cUB" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/structure/chair/stool/bar/directional/south, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/holodeck/rec_center) "cUH" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 1 @@ -6599,16 +7765,6 @@ }, /turf/open/floor/iron/smooth, /area/station/security/checkpoint/engineering) -"cUK" = ( -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/obj/structure/chair{ - dir = 1; - pixel_y = -2 - }, -/obj/machinery/duct, -/turf/open/floor/plating, -/area/station/maintenance/department/medical/central) "cUU" = ( /obj/structure/chair/sofa/bench/right{ dir = 4 @@ -6624,6 +7780,18 @@ dir = 1 }, /area/station/hallway/primary/aft) +"cUY" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/stone, +/area/station/service/abandoned_gambling_den) +"cVh" = ( +/obj/machinery/button/crematorium{ + id = "cremateme"; + pixel_y = -30 + }, +/turf/open/floor/iron/dark/small, +/area/station/service/chapel/storage) "cVx" = ( /obj/effect/turf_decal/siding/dark_red{ dir = 4 @@ -6686,14 +7854,30 @@ dir = 4 }, /area/station/maintenance/fore/lesser) -"cWo" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 10 +"cWB" = ( +/obj/structure/table/wood, +/obj/item/reagent_containers/cup/rag{ + pixel_x = -6; + pixel_y = 6 }, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating, -/area/station/maintenance/port/lesser) +/obj/item/reagent_containers/cup/glass/drinkingglass{ + pixel_x = 10; + pixel_y = 8 + }, +/obj/item/reagent_containers/cup/glass/drinkingglass{ + pixel_x = 5; + pixel_y = 16 + }, +/obj/item/reagent_containers/cup/glass/drinkingglass{ + pixel_x = 5; + pixel_y = 5 + }, +/obj/item/reagent_containers/cup/glass/shaker{ + pixel_x = -7; + pixel_y = 15 + }, +/turf/open/floor/iron/dark/textured, +/area/station/service/bar) "cWM" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -6712,18 +7896,6 @@ /obj/structure/barricade/wooden, /turf/open/floor/iron, /area/station/engineering/atmospherics_engine) -"cWT" = ( -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/pdapainter/research, -/obj/machinery/computer/security/telescreen/rd{ - pixel_y = 30 - }, -/obj/effect/turf_decal/siding/purple{ - dir = 5 - }, -/turf/open/floor/iron/dark, -/area/station/command/heads_quarters/rd) "cWZ" = ( /obj/machinery/door/airlock/external{ name = "Primary Docking Bay" @@ -6735,18 +7907,35 @@ dir = 1 }, /area/station/hallway/secondary/entry) -"cXm" = ( -/obj/structure/cable, +"cXb" = ( +/obj/machinery/light/small/directional/north, +/turf/open/misc/dirt/jungle, +/area/station/service/chapel) +"cXh" = ( /obj/structure/disposalpipe/segment{ - dir = 5 + dir = 4 }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/station/maintenance/port/greater) +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/hallway/primary/central/fore) "cXu" = ( /obj/effect/landmark/atmospheric_sanity/ignore_area, /turf/open/floor/plating, /area/station/maintenance/department/electrical) +"cXz" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/obj/effect/turf_decal/siding/thinplating_new/light{ + dir = 8 + }, +/turf/open/floor/iron/kitchen/small, +/area/station/security/breakroom) +"cXH" = ( +/obj/effect/landmark/start/cook, +/turf/open/floor/iron/kitchen/small, +/area/station/service/kitchen) "cXJ" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/turf_decal/siding/wood{ @@ -6759,17 +7948,41 @@ /obj/machinery/light/small/directional/east, /turf/open/floor/iron, /area/station/hallway/secondary/dock) -"cYd" = ( +"cYk" = ( /obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/mapping_helpers/broken_floor, +/obj/structure/sign/departments/telecomms/directional/south, /turf/open/floor/iron, -/area/station/maintenance/port/aft) +/area/station/hallway/secondary/dock) +"cYp" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/holodeck/rec_center) "cYt" = ( /obj/structure/cable, /turf/open/floor/plating, /area/station/engineering/supermatter/room) +"cYD" = ( +/obj/structure/table/wood, +/obj/item/hemostat{ + name = "Totally Not Scissors"; + desc = "Ah yes, the Haircutting Device." + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/small, +/area/station/service/barber) "cYE" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -6794,6 +8007,13 @@ }, /turf/open/floor/iron/dark/small, /area/station/maintenance/department/engine) +"cYS" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/obj/effect/landmark/event_spawn, +/turf/open/floor/iron/smooth, +/area/station/cargo/drone_bay) "cYT" = ( /obj/structure/hedge, /obj/structure/sign/poster/contraband/random/directional/east, @@ -6808,12 +8028,47 @@ /obj/effect/spawner/random/structure/steam_vent, /turf/open/floor/plating, /area/station/ai_monitored/turret_protected/aisat/maint) +"cYY" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/obj/structure/disposalpipe/junction/flip{ + dir = 4 + }, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/station/hallway/primary/central/fore) +"cZi" = ( +/obj/structure/extinguisher_cabinet/directional/south, +/obj/machinery/camera/autoname/directional/south, +/obj/item/kirbyplants/random, +/turf/open/floor/iron, +/area/station/hallway/primary/central/fore) +"cZk" = ( +/obj/structure/chair{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/security/interrogation) +"cZl" = ( +/obj/machinery/light/small/directional/east, +/obj/item/kirbyplants/random/dead/research_director, +/turf/open/floor/iron/dark/small, +/area/station/command/heads_quarters/rd) "cZm" = ( /obj/effect/landmark/start/hangover, /turf/open/floor/engine{ name = "Holodeck Projector Floor" }, /area/station/holodeck/rec_center) +"cZx" = ( +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/south, +/turf/open/floor/wood, +/area/station/commons/fitness/recreation) "cZy" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -6909,6 +8164,20 @@ /obj/machinery/holopad/secure, /turf/open/floor/iron/dark/textured, /area/station/ai_monitored/turret_protected/ai) +"dby" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/obj/machinery/washing_machine, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 9 + }, +/turf/open/floor/iron/cafeteria, +/area/station/security/prison) "dbz" = ( /obj/structure/cable/layer3, /obj/structure/chair/office{ @@ -6932,32 +8201,51 @@ /obj/structure/cable, /turf/open/floor/iron/smooth, /area/station/engineering/supermatter/room) -"dbR" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +"dbZ" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/brown/fourcorners, -/obj/effect/decal/cleanable/dirt, -/obj/effect/landmark/navigate_destination/cargo, -/turf/open/floor/iron, -/area/station/hallway/primary/central/fore) -"dbU" = ( -/obj/structure/cable, -/obj/structure/broken_flooring/singular/directional/east, -/turf/open/floor/plating, -/area/station/maintenance/port/aft) -"dbY" = ( -/obj/structure/railing, -/turf/open/space/basic, -/area/space) +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/effect/turf_decal/siding/wood/corner, +/turf/open/floor/stone, +/area/station/service/chapel) "dcc" = ( /obj/item/kirbyplants/random/fullysynthetic, /obj/machinery/holopad, /obj/machinery/firealarm/directional/west, /turf/open/floor/iron/dark, /area/station/security/interrogation) +"dcx" = ( +/obj/effect/turf_decal/siding/white{ + dir = 10 + }, +/obj/structure/closet{ + anchored = 1; + can_be_unanchored = 1; + name = "Cold protection gear" + }, +/obj/item/clothing/suit/hooded/wintercoat/science, +/obj/item/clothing/suit/hooded/wintercoat/science, +/turf/open/floor/iron/dark/small, +/area/station/science/xenobiology) +"dcD" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/red/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/red/line{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/small, +/area/station/hallway/primary/port) "dcH" = ( /obj/structure/cable, /obj/structure/disposalpipe/junction{ @@ -6979,6 +8267,13 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/security/brig/entrance) +"dde" = ( +/obj/structure/chair{ + dir = 1; + pixel_y = -2 + }, +/turf/open/floor/iron, +/area/station/science/lower) "ddl" = ( /obj/effect/turf_decal/tile/yellow/half/contrasted{ dir = 4 @@ -7001,6 +8296,13 @@ /obj/effect/spawner/structure/window, /turf/open/floor/plating, /area/station/maintenance/department/engine) +"ddB" = ( +/obj/structure/closet/secure_closet/personal, +/obj/effect/turf_decal/tile/brown/opposingcorners{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/commons/vacant_room/commissary) "ddE" = ( /obj/structure/cable, /obj/structure/chair/stool/directional/west, @@ -7015,6 +8317,11 @@ /obj/effect/landmark/start/chief_medical_officer, /turf/open/floor/iron/white, /area/station/medical/treatment_center) +"deb" = ( +/obj/effect/turf_decal/tile/neutral, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/hallway/secondary/recreation) "deh" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment, @@ -7046,11 +8353,22 @@ /turf/open/floor/catwalk_floor/iron, /area/station/science/xenobiology) "deR" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment, +/obj/machinery/camera/autoname/directional/west, +/obj/machinery/status_display/evac/directional/west, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central/aft) +"deS" = ( +/obj/structure/table/wood, +/obj/machinery/light/small/directional/south, /obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/station/science/ordnance/testlab) +/obj/effect/turf_decal/siding/wideplating_new/terracotta{ + dir = 10 + }, +/turf/open/floor/wood/tile, +/area/station/maintenance/central/lesser) "dfb" = ( /obj/structure/cable, /obj/structure/table/glass, @@ -7058,6 +8376,20 @@ /obj/machinery/power/apc/auto_name/directional/north, /turf/open/floor/iron/white/small, /area/station/medical/psychology) +"dfc" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 10 + }, +/obj/machinery/restaurant_portal/restaurant, +/turf/open/floor/stone, +/area/station/service/bar) +"dff" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/airalarm/directional/east, +/obj/effect/turf_decal/tile/neutral, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/station/hallway/primary/central/fore) "dfo" = ( /obj/structure/cable, /obj/machinery/status_display/ai/directional/north, @@ -7080,13 +8412,6 @@ /obj/structure/window/spawner/directional/south, /turf/open/floor/grass, /area/station/cargo/storage) -"dfW" = ( -/obj/structure/chair{ - dir = 8 - }, -/obj/machinery/light/small/directional/south, -/turf/open/floor/wood/parquet, -/area/station/service/library) "dgm" = ( /obj/structure/railing/corner{ dir = 1 @@ -7136,6 +8461,16 @@ }, /turf/open/floor/circuit/red, /area/station/ai_monitored/turret_protected/ai) +"dhu" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 10 + }, +/obj/structure/flora/bush/sparsegrass{ + pixel_x = -5; + pixel_y = 9 + }, +/turf/open/floor/grass, +/area/station/service/chapel) "dhy" = ( /obj/structure/cable, /obj/structure/disposalpipe/trunk{ @@ -7164,10 +8499,22 @@ }, /turf/open/floor/plating, /area/station/maintenance/department/engine) +"dhH" = ( +/turf/open/floor/iron/small, +/area/station/commons/fitness/locker_room) "dhK" = ( /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/department/engine) +"dib" = ( +/obj/effect/turf_decal/siding/thinplating{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/eighties/red, +/area/station/hallway/primary/central/fore) "dim" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -7197,6 +8544,38 @@ /obj/effect/turf_decal/delivery/red, /turf/open/floor/iron/dark/small, /area/station/medical/medbay/lobby) +"diF" = ( +/obj/machinery/door/airlock/public/glass{ + name = "Barber" + }, +/obj/machinery/door/firedoor, +/turf/open/floor/iron/textured_half, +/area/station/commons/fitness/locker_room) +"diG" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/machinery/light/small/directional/east, +/obj/structure/chair/stool/bar/directional/south, +/obj/effect/landmark/start/hangover, +/turf/open/floor/iron, +/area/station/holodeck/rec_center) +"diI" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/neutral, +/obj/machinery/camera/autoname/directional/south, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/port) +"diK" = ( +/obj/effect/turf_decal/tile/red/opposingcorners, +/obj/effect/turf_decal/tile/blue/opposingcorners{ + dir = 8 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/obj/effect/landmark/start/mime, +/turf/open/floor/iron/smooth, +/area/station/service/greenroom) "diL" = ( /obj/structure/lattice/catwalk, /obj/structure/railing{ @@ -7209,6 +8588,9 @@ /obj/machinery/atmospherics/pipe/smart/simple/brown/visible, /turf/open/space/basic, /area/station/engineering/atmos/space_catwalk) +"diP" = ( +/turf/open/floor/iron, +/area/station/hallway/primary/central/aft) "diS" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -7216,29 +8598,55 @@ /obj/structure/sink/directional/south, /turf/open/floor/iron/white, /area/station/medical/medbay/central) -"dks" = ( -/obj/structure/table/wood, -/obj/effect/turf_decal/tile/neutral/full, -/obj/item/reagent_containers/cup/glass/drinkingglass{ - pixel_x = -5; - pixel_y = 22 +"diU" = ( +/obj/machinery/airalarm/directional/south, +/obj/machinery/light/floor, +/turf/open/floor/iron/smooth, +/area/station/hallway/secondary/command) +"diZ" = ( +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/science/ordnance) +"djf" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/landmark/start/hangover, +/obj/effect/turf_decal/trimline/neutral/line, +/obj/effect/turf_decal/trimline/neutral/line{ + dir = 1 }, -/obj/item/reagent_containers/cup/glass/drinkingglass{ - pixel_x = -1; - pixel_y = 13 +/turf/open/floor/iron, +/area/station/hallway/primary/central/aft) +"djg" = ( +/obj/structure/bed{ + dir = 4 }, -/obj/item/reagent_containers/cup/glass/drinkingglass{ - pixel_x = -8; - pixel_y = 6 +/obj/effect/turf_decal/siding/red{ + dir = 10 }, -/obj/item/reagent_containers/cup/glass/drinkingglass{ - pixel_x = 5; - pixel_y = 4 +/obj/machinery/light/small/directional/west, +/turf/open/floor/iron/small, +/area/station/security/brig) +"djO" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 }, -/obj/machinery/camera/autoname/directional/south, -/obj/machinery/light/small/directional/south, -/turf/open/floor/iron/smooth_large, -/area/station/service/bar) +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/machinery/bluespace_vendor/directional/north, +/turf/open/floor/iron, +/area/station/hallway/secondary/recreation) +"djY" = ( +/obj/machinery/door/airlock/public/glass{ + name = "Dorms" + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/door/firedoor, +/turf/open/floor/iron/textured_half, +/area/station/commons/dorms) "dkz" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -7266,11 +8674,6 @@ /obj/effect/turf_decal/loading_area, /turf/open/floor/iron/dark/small, /area/station/engineering/supermatter/room) -"dkS" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating, -/area/station/maintenance/starboard/aft) "dkT" = ( /obj/effect/mapping_helpers/broken_floor, /obj/effect/turf_decal/stripes/line{ @@ -7279,30 +8682,6 @@ /obj/effect/spawner/random/structure/crate, /turf/open/floor/plating, /area/station/hallway/secondary/construction) -"dkV" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/blue, -/obj/machinery/navbeacon{ - codes_txt = "patrol;next_patrol=6.2-Arrivals"; - location = "6.1-Arrivals" - }, -/obj/machinery/light/floor, -/turf/open/floor/iron/white/corner{ - dir = 8 - }, -/area/station/hallway/secondary/entry) -"dlc" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/west, -/turf/open/floor/iron, -/area/station/commons/dorms) "dlk" = ( /obj/machinery/atmospherics/pipe/bridge_pipe/yellow/visible, /obj/machinery/atmospherics/pipe/bridge_pipe/scrubbers/visible{ @@ -7327,6 +8706,14 @@ /obj/item/clothing/mask/surgical, /turf/open/floor/iron/small, /area/station/medical/storage) +"dlG" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/siding/white{ + dir = 4 + }, +/turf/open/floor/iron/dark/small, +/area/station/science/xenobiology) "dlJ" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/spawner/random/structure/crate, @@ -7349,6 +8736,16 @@ /obj/effect/landmark/start/depsec/medical, /turf/open/floor/iron/smooth, /area/station/security/checkpoint/customs/auxiliary) +"dml" = ( +/obj/structure/cable, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/medical/cryo) "dmG" = ( /obj/structure/transport/linear/tram, /obj/structure/tram, @@ -7378,16 +8775,47 @@ dir = 1 }, /area/station/security/prison/safe) -"dnJ" = ( +"dng" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 10 + }, +/turf/open/floor/wood/tile, +/area/station/maintenance/aft) +"dnk" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light_switch/directional/south, +/turf/open/floor/stone, +/area/station/service/abandoned_gambling_den) +"dnl" = ( +/obj/machinery/light/small/directional/south, +/turf/open/floor/engine/xenobio, +/area/station/science/xenobiology) +"dnK" = ( +/obj/item/kirbyplants/random, +/obj/item/storage/briefcase{ + pixel_x = -3; + pixel_y = 2 + }, +/obj/machinery/light/small/directional/east, +/turf/open/floor/iron/dark/small, +/area/station/security/detectives_office) +"dnO" = ( /obj/structure/cable, -/obj/structure/disposalpipe/segment{ +/obj/effect/turf_decal/trimline/white/warning{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/iron, -/area/station/maintenance/department/medical/central) +/obj/effect/turf_decal/trimline/white/warning{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/white/mid_joiner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/white/mid_joiner{ + dir = 8 + }, +/obj/machinery/light/small/directional/south, +/turf/open/floor/wood, +/area/station/commons/fitness/recreation) "dnU" = ( /obj/machinery/door/airlock/maintenance{ name = "Maintenance" @@ -7462,11 +8890,6 @@ }, /turf/open/floor/plating, /area/station/ai_monitored/turret_protected/aisat/maint) -"doX" = ( -/obj/structure/girder, -/obj/effect/decal/cleanable/glass/plastitanium, -/turf/open/floor/plating, -/area/station/commons/fitness/recreation/entertainment) "dph" = ( /obj/structure/railing, /turf/open/floor/catwalk_floor, @@ -7487,15 +8910,6 @@ }, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/ai) -"dpt" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating, -/area/station/maintenance/port/lesser) "dpz" = ( /obj/machinery/atmospherics/pipe/smart/simple/purple/visible, /obj/effect/decal/cleanable/dirt, @@ -7503,38 +8917,32 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/iron/dark, /area/station/science/ordnance) -"dpG" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/obj/structure/extinguisher_cabinet/directional/north, -/turf/open/floor/iron/white/corner{ - dir = 1 - }, -/area/station/hallway/secondary/dock) "dpR" = ( /obj/effect/turf_decal/stripes/white/line{ dir = 4 }, /turf/open/floor/tram, /area/station/security/tram) +"dqj" = ( +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/north, +/turf/open/floor/plating, +/area/station/maintenance/aft) +"dqB" = ( +/obj/structure/table, +/obj/item/clothing/head/utility/chefhat, +/turf/open/floor/iron/dark/small, +/area/station/commons/fitness/locker_room) "dqO" = ( /turf/open/floor/iron/dark/small, /area/station/security/checkpoint/customs/auxiliary) "dqV" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 9 +/obj/effect/turf_decal/sand/plating, +/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible/layer4{ + dir = 5 }, -/obj/machinery/portable_atmospherics/canister, -/turf/open/floor/iron, -/area/station/engineering/atmos) +/turf/open/floor/plating/airless, +/area/space/nearstation) "dqX" = ( /obj/structure/reagent_dispensers/wall/peppertank/directional/north, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, @@ -7567,6 +8975,24 @@ /obj/effect/decal/cleanable/cobweb/cobweb2, /turf/open/floor/iron/showroomfloor, /area/station/medical/virology) +"drB" = ( +/obj/machinery/atmospherics/pipe/smart/simple/dark/visible, +/obj/machinery/camera/autoname/directional/east, +/obj/machinery/light/cold/directional/east, +/obj/machinery/power/apc/auto_name/directional/east{ + areastring = "/area/station/science/ordnance/burnchamber" + }, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/science/ordnance) +"drC" = ( +/obj/machinery/vending/cola, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/obj/machinery/light/small/directional/south, +/turf/open/floor/iron/dark/side, +/area/station/hallway/primary/central/fore) "drF" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -7616,12 +9042,24 @@ /obj/effect/spawner/random/maintenance, /turf/open/floor/plating, /area/station/maintenance/department/engine/atmos) +"dsl" = ( +/obj/item/kirbyplants/random, +/obj/effect/turf_decal/siding/wood/corner, +/turf/open/floor/wood/parquet, +/area/station/service/library) "dsp" = ( /obj/effect/turf_decal/sand/plating, /obj/structure/rack, /obj/item/pickaxe, /turf/open/floor/plating, /area/station/maintenance/department/engine) +"dss" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/siding/purple, +/obj/item/kirbyplants/random, +/obj/machinery/newscaster/directional/south, +/turf/open/floor/iron/dark, +/area/station/science/genetics) "dst" = ( /obj/effect/turf_decal/siding/white{ dir = 4 @@ -7637,10 +9075,24 @@ /obj/item/screwdriver, /turf/open/floor/plating, /area/station/maintenance/department/engine) +"dsK" = ( +/obj/effect/turf_decal/tile/red/opposingcorners, +/obj/effect/turf_decal/tile/blue/opposingcorners{ + dir = 8 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron/smooth, +/area/station/service/greenroom) "dsN" = ( /obj/effect/spawner/structure/window, /turf/open/floor/plating, /area/station/security/lockers) +"dsP" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 6 + }, +/turf/open/floor/stone, +/area/station/service/bar/backroom) "dsU" = ( /obj/effect/turf_decal/stripes/white/line{ dir = 6 @@ -7649,31 +9101,22 @@ /obj/structure/tram, /turf/open/floor/tram, /area/station/maintenance/port/aft) -"dtj" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/turf_decal/tile/dark_red/half/contrasted{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/security/brig/entrance) "dtk" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden, /turf/closed/wall, /area/station/science/ordnance/testlab) -"dtq" = ( -/obj/effect/mapping_helpers/broken_floor, -/obj/effect/decal/cleanable/dirt, +"dtm" = ( +/obj/structure/window/spawner/directional/south, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/commons/dorms) +"dtv" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/station/maintenance/starboard/greater) -"dty" = ( -/obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/light/floor, -/turf/open/floor/wood/large, -/area/station/service/chapel) +/turf/open/floor/iron, +/area/station/commons/fitness/locker_room) "dtC" = ( /obj/effect/turf_decal/tile/neutral/fourcorners, /obj/effect/turf_decal/siding/purple{ @@ -7698,6 +9141,16 @@ /obj/structure/cable, /turf/open/floor/iron/dark, /area/station/science/genetics) +"dtO" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/trimline/neutral/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/neutral/line, +/obj/structure/disposalpipe/segment, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/hallway/primary/central/fore) "dua" = ( /obj/machinery/atmospherics/pipe/smart/simple/green/visible{ dir = 4 @@ -7728,19 +9181,41 @@ /obj/machinery/light/small/directional/south, /turf/open/floor/iron, /area/station/security/checkpoint/escape) +"duE" = ( +/obj/effect/landmark/start/assistant, +/obj/effect/turf_decal/trimline/neutral/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/neutral/line, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central/aft) "duI" = ( /obj/machinery/atmospherics/pipe/smart/simple/green/hidden{ dir = 10 }, /turf/closed/wall/rust, /area/station/ai_monitored/turret_protected/ai) -"duS" = ( -/obj/effect/mapping_helpers/broken_floor, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/portables_connector/visible, -/obj/machinery/portable_atmospherics/canister, -/turf/open/floor/iron/dark, -/area/station/science/ordnance) +"duK" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/window/right/directional/south, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "kitchenshutters"; + name = "Kitchen Shutters" + }, +/turf/open/floor/iron/kitchen/small, +/area/station/service/kitchen) +"duT" = ( +/obj/structure/closet/wardrobe/white, +/obj/machinery/light/small/directional/west, +/obj/effect/turf_decal/siding/wideplating/dark{ + dir = 8 + }, +/turf/open/floor/iron/small, +/area/station/commons/fitness/locker_room) "duY" = ( /obj/structure/railing, /obj/effect/decal/cleanable/dirt/dust, @@ -7749,18 +9224,6 @@ }, /turf/open/floor/wood, /area/station/engineering/atmos/office) -"dvl" = ( -/obj/structure/table, -/obj/item/reagent_containers/condiment/enzyme{ - pixel_x = 4; - pixel_y = 6 - }, -/obj/machinery/reagentgrinder{ - pixel_x = -9; - pixel_y = 8 - }, -/turf/open/floor/iron/cafeteria, -/area/station/service/kitchen) "dvo" = ( /obj/machinery/ore_silo, /obj/effect/turf_decal/bot_white, @@ -7771,15 +9234,6 @@ /obj/machinery/light/small/directional/west, /turf/open/floor/iron/dark/herringbone, /area/station/ai_monitored/command/nuke_storage) -"dvs" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass{ - name = "Holodeck Access" - }, -/turf/open/floor/iron, -/area/station/commons/fitness/recreation/entertainment) "dvv" = ( /obj/effect/turf_decal/tile/brown/opposingcorners, /obj/machinery/light/small/directional/east, @@ -7804,18 +9258,22 @@ }, /turf/open/floor/iron/small, /area/station/engineering/supermatter/room) +"dvY" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 10 + }, +/obj/machinery/light/small/directional/south, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/wood/tile, +/area/station/service/lawoffice) "dwa" = ( /obj/structure/cable, /obj/effect/turf_decal/tile/dark_red/half/contrasted, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /turf/open/floor/iron, /area/station/security/tram) -"dwh" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment, -/obj/structure/broken_flooring/corner/directional/south, -/turf/open/floor/plating, -/area/station/maintenance/department/medical/central) "dwr" = ( /obj/structure/flora/bush/lavendergrass/style_random, /obj/structure/flora/rock/pile/jungle/style_random, @@ -7852,16 +9310,6 @@ /obj/effect/landmark/navigate_destination/techstorage, /turf/open/floor/iron, /area/station/hallway/primary/aft) -"dwW" = ( -/obj/structure/closet/wardrobe/mixed, -/obj/effect/turf_decal/siding/thinplating_new/light{ - dir = 9 - }, -/obj/item/radio/intercom/directional/west, -/obj/structure/sign/poster/official/random/directional/north, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/small, -/area/station/commons/fitness/locker_room) "dwX" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -7889,11 +9337,24 @@ }, /turf/open/floor/iron, /area/station/engineering/supermatter/room) -"dxz" = ( +"dxw" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/machinery/light/warm/directional/east, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, /obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/plating, -/area/station/maintenance/fore/greater) +/turf/open/floor/iron, +/area/station/commons/fitness/recreation/entertainment) +"dxG" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/wood, +/area/station/security/detectives_office) "dxO" = ( /obj/effect/turf_decal/stripes/line{ dir = 10 @@ -7905,6 +9366,13 @@ /obj/item/stack/rods/fifty, /turf/open/floor/plating, /area/station/construction/mining/aux_base) +"dxV" = ( +/obj/effect/turf_decal/siding/wood, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/turf/open/floor/stone, +/area/station/service/bar) "dxZ" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment, @@ -7930,6 +9398,12 @@ /obj/machinery/light/small/directional/south, /turf/open/floor/iron, /area/station/hallway/primary/port) +"dyr" = ( +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/obj/structure/broken_flooring/singular/directional/east, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) "dyt" = ( /obj/structure/railing{ dir = 1 @@ -7975,19 +9449,6 @@ /obj/structure/closet/firecloset, /turf/open/floor/iron/small, /area/station/maintenance/port/lesser) -"dzf" = ( -/obj/structure/hoop{ - dir = 8; - pixel_x = 10; - pixel_y = 11 - }, -/obj/effect/turf_decal/trimline/white/end{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/light/small/directional/east, -/turf/open/floor/wood, -/area/station/commons/fitness/recreation) "dzi" = ( /obj/structure/table/wood, /obj/item/book/granter/action/spell/smoke/lesser{ @@ -8024,13 +9485,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) -"dzJ" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/turf/open/floor/iron/dark/small, -/area/station/tcommsat/server) "dAn" = ( /obj/structure/disposalpipe/segment, /turf/open/floor/plating, @@ -8046,6 +9500,14 @@ /obj/effect/turf_decal/tile/neutral, /turf/open/floor/iron, /area/station/hallway/primary/fore) +"dAC" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/shutters{ + id = "meow"; + name = "Commissary" + }, +/turf/open/floor/plating, +/area/station/commons/vacant_room/commissary) "dAF" = ( /obj/effect/turf_decal/siding/thinplating_new{ dir = 4 @@ -8076,6 +9538,12 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/maintenance/department/engine/atmos) +"dAL" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/iron/smooth, +/area/station/security/evidence) "dBh" = ( /obj/effect/turf_decal/siding/wood{ dir = 6 @@ -8083,6 +9551,11 @@ /obj/item/kirbyplants/random, /turf/open/floor/wood/tile, /area/station/science/lower) +"dBj" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/turf/open/floor/iron, +/area/station/commons/fitness/recreation/entertainment) "dBr" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -8090,18 +9563,25 @@ /obj/effect/turf_decal/tile/dark_red/fourcorners, /turf/open/floor/iron, /area/station/security/tram) +"dBt" = ( +/obj/structure/cable, +/obj/effect/turf_decal/siding/blue{ + dir = 5 + }, +/obj/machinery/light_switch/directional/east, +/obj/item/kirbyplants/random, +/obj/item/storage/medkit/regular{ + pixel_x = -3; + pixel_y = -3 + }, +/turf/open/floor/iron/white/small, +/area/station/command/heads_quarters/cmo) "dBy" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/broken_flooring/pile/directional/east, /obj/machinery/duct, /turf/open/floor/plating, /area/station/maintenance/department/medical/central) -"dBA" = ( -/obj/structure/bed, -/obj/effect/spawner/random/bedsheet, -/obj/machinery/light/small/directional/east, -/turf/open/floor/carpet/royalblack, -/area/station/commons/dorms) "dBH" = ( /turf/open/floor/iron/white/corner{ dir = 1 @@ -8122,27 +9602,6 @@ /obj/machinery/atmospherics/components/unary/passive_vent, /turf/open/floor/circuit/red, /area/station/ai_monitored/turret_protected/ai) -"dCm" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/siding/wood{ - dir = 8 - }, -/obj/effect/turf_decal/siding/wood{ - dir = 4 - }, -/obj/machinery/door/airlock/public/glass{ - name = "Study" - }, -/obj/machinery/door/firedoor, -/obj/structure/cable, -/turf/open/floor/iron/smooth_half{ - dir = 1 - }, -/area/station/service/library) "dCs" = ( /obj/effect/turf_decal/stripes/white/line{ dir = 9 @@ -8151,15 +9610,19 @@ /obj/structure/tram, /turf/open/floor/tram, /area/station/maintenance/port/aft) -"dCH" = ( -/obj/structure/table, -/obj/item/storage/box/lights/mixed{ - pixel_x = 6; - pixel_y = 8 +"dCu" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 }, -/obj/item/reagent_containers/spray/cleaner, /turf/open/floor/iron, -/area/station/service/janitor) +/area/station/hallway/primary/central/fore) "dCR" = ( /obj/structure/cable/layer3, /turf/open/floor/circuit/red, @@ -8182,6 +9645,16 @@ }, /turf/open/floor/iron/smooth, /area/station/cargo/drone_bay) +"dDi" = ( +/obj/machinery/door/airlock/maintenance{ + name = "Maintenance" + }, +/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/port/greater) "dDk" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/chapel{ @@ -8191,6 +9664,15 @@ "dDB" = ( /turf/open/space/basic, /area/space) +"dDC" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/landmark/start/janitor, +/turf/open/floor/iron/white/small, +/area/station/service/janitor) "dDF" = ( /obj/effect/spawner/structure/window, /turf/open/floor/plating, @@ -8227,6 +9709,22 @@ /obj/machinery/camera/autoname/directional/south, /turf/open/floor/iron/smooth, /area/station/security/checkpoint/escape) +"dDW" = ( +/obj/machinery/door/airlock/public/glass{ + name = "Recreation" + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/door/firedoor, +/turf/open/floor/iron/textured_half, +/area/station/commons/fitness/recreation/entertainment) +"dEq" = ( +/obj/effect/turf_decal/siding/thinplating_new/light, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/white/small, +/area/station/service/hydroponics) "dEu" = ( /obj/machinery/vending/cigarette, /turf/open/floor/iron/kitchen/small, @@ -8243,17 +9741,38 @@ }, /turf/open/floor/tram, /area/station/security/tram) +"dEL" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/iron/dark/corner{ + dir = 1 + }, +/area/station/science/ordnance/testlab) +"dEQ" = ( +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/maintenance/port/greater) +"dFN" = ( +/obj/structure/window/spawner/directional/east, +/obj/structure/window/spawner/directional/north, +/turf/open/floor/iron/dark, +/area/station/commons/dorms) +"dFQ" = ( +/obj/structure/cable, +/obj/effect/spawner/random/trash, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/turf/open/floor/plating, +/area/station/maintenance/port/lesser) "dGV" = ( /obj/effect/turf_decal/stripes/line{ dir = 9 }, /turf/closed/wall, /area/station/engineering/atmos/storage/gas) -"dHi" = ( -/obj/machinery/door/firedoor, -/obj/effect/landmark/navigate_destination/bar, -/turf/open/floor/catwalk_floor/iron, -/area/station/service/bar) "dHk" = ( /obj/effect/turf_decal/tile/blue/half/contrasted{ dir = 8 @@ -8269,16 +9788,6 @@ }, /turf/open/floor/tram, /area/station/security/tram) -"dHE" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/security/processing) "dHL" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -8301,29 +9810,27 @@ }, /turf/open/space/basic, /area/station/engineering/atmos/space_catwalk) -"dIN" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/neutral/line{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/neutral/line, -/obj/machinery/navbeacon{ - codes_txt = "patrol;next_patrol=16.0-CentralFore-CentralPort"; - location = "15.0-CentralStarboard-CentralFore" +"dIt" = ( +/obj/structure/cable, +/obj/machinery/button/door/directional/east{ + id = "armory"; + name = "Armory Shutters"; + req_access = list("armory") }, -/turf/open/floor/iron, -/area/station/hallway/primary/central/fore) -"dIP" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/siding/white{ - dir = 4 +/obj/effect/turf_decal/siding/dark_red{ + dir = 8 }, -/obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/dark/small, -/area/station/science/xenobiology) +/area/station/ai_monitored/security/armory) +"dIQ" = ( +/obj/effect/turf_decal/weather/dirt, +/obj/structure/flora/bush/flowers_yw/style_3, +/obj/machinery/firealarm/directional/south, +/obj/machinery/light/small/directional/south, +/obj/machinery/camera/directional/south, +/obj/machinery/status_display/evac/directional/south, +/turf/open/floor/grass, +/area/station/service/chapel) "dIZ" = ( /obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ dir = 6 @@ -8351,20 +9858,12 @@ /obj/effect/spawner/random/structure/girder, /turf/open/floor/plating, /area/station/maintenance/fore/lesser) -"dJf" = ( -/obj/structure/cable, -/obj/effect/turf_decal/tile/purple/opposingcorners, -/obj/structure/chair/office{ +"dJv" = ( +/obj/effect/turf_decal/siding/wood{ dir = 8 }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/cafeteria, -/area/station/science/circuits) -"dJz" = ( -/obj/structure/chair/stool/directional/west, -/mob/living/basic/trooper/russian/ranged/lootless, -/turf/open/floor/carpet/orange, -/area/station/service/abandoned_gambling_den) +/turf/open/floor/wood/tile, +/area/station/service/bar) "dJT" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -8396,6 +9895,14 @@ /obj/effect/spawner/random/engineering/material, /turf/open/floor/plating, /area/station/maintenance/department/engine) +"dKm" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/light/cold/directional/east, +/obj/effect/turf_decal/tile/neutral, +/obj/item/radio/intercom/directional/east, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/station/hallway/primary/central/fore) "dKq" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -8444,11 +9951,43 @@ /obj/structure/chair/office, /turf/open/floor/iron/dark/herringbone, /area/station/security/execution/education) +"dLq" = ( +/obj/structure/table, +/obj/item/hand_labeler, +/obj/item/camera, +/obj/machinery/firealarm/directional/north, +/obj/machinery/power/apc/auto_name/directional/east, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/commons/storage/art) +"dLv" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/gulag_item_reclaimer{ + pixel_y = 24 + }, +/turf/open/floor/iron/dark, +/area/station/security/processing) "dLQ" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) +"dLR" = ( +/obj/effect/turf_decal/siding/red{ + dir = 8 + }, +/obj/machinery/light_switch/directional/west, +/turf/open/floor/iron/small, +/area/station/security/office) +"dLW" = ( +/obj/structure/chair/office{ + dir = 8 + }, +/obj/effect/landmark/start/librarian, +/turf/open/floor/carpet, +/area/station/service/library) "dMg" = ( /obj/machinery/atmospherics/components/binary/pump{ dir = 4; @@ -8456,6 +9995,19 @@ }, /turf/open/floor/circuit/red, /area/station/ai_monitored/turret_protected/ai) +"dMi" = ( +/obj/effect/turf_decal/siding/wood, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 1 + }, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 4 + }, +/turf/open/floor/stone, +/area/station/service/bar) "dMm" = ( /obj/effect/spawner/random/structure/crate, /obj/effect/turf_decal/stripes/line{ @@ -8477,27 +10029,20 @@ /obj/item/wrench, /turf/open/floor/iron/dark, /area/station/science/robotics/lab) -"dNi" = ( -/obj/machinery/power/shuttle_engine/heater{ - dir = 1 +"dNj" = ( +/obj/structure/chair{ + dir = 4 }, -/obj/structure/window/spawner/directional/south, -/turf/open/floor/plating, -/area/station/commons/fitness/recreation/entertainment) +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/engineering/gravity_generator) +"dNo" = ( +/obj/item/radio/intercom/directional/south, +/turf/open/floor/iron, +/area/station/engineering/storage/tech) "dNq" = ( /turf/closed/wall/r_wall/rust, /area/station/ai_monitored/aisat/exterior) -"dNw" = ( -/obj/effect/turf_decal/siding/wood, -/obj/effect/turf_decal/siding/wood{ - dir = 1 - }, -/obj/machinery/door/airlock/multi_tile/public/glass{ - name = "Library" - }, -/obj/machinery/door/firedoor, -/turf/open/floor/iron/textured_half, -/area/station/service/library) "dNy" = ( /obj/effect/spawner/random/structure/closet_maintenance, /turf/open/floor/plating, @@ -8512,13 +10057,6 @@ /obj/structure/chair/stool/directional/south, /turf/open/floor/light/colour_cycle/dancefloor_b, /area/station/maintenance/starboard/central) -"dNI" = ( -/obj/structure/chair/sofa/left/maroon, -/obj/machinery/light/small/directional/east, -/obj/structure/sign/poster/official/random/directional/north, -/obj/effect/landmark/start/hangover, -/turf/open/floor/iron/showroomfloor, -/area/station/service/cafeteria) "dNL" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -8555,21 +10093,12 @@ /obj/machinery/airalarm/directional/east, /turf/open/floor/iron/dark, /area/station/security/office) -"dOg" = ( -/obj/effect/turf_decal/tile/dark_red/opposingcorners, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron, -/area/station/security/tram) -"dOv" = ( -/obj/structure/cable, -/obj/effect/turf_decal/tile/green/opposingcorners, -/obj/effect/turf_decal/tile/blue/opposingcorners{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, +"dOf" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/neutral, +/obj/structure/disposalpipe/junction, /turf/open/floor/iron, -/area/station/service/hydroponics) +/area/station/hallway/primary/central/fore) "dOz" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -8628,22 +10157,22 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/security/interrogation) -"dPH" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/sorting/mail/flip{ - dir = 2 +"dPp" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/trimline/neutral/line, +/obj/effect/turf_decal/trimline/neutral/line{ + dir = 1 }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/mapping_helpers/broken_floor, -/obj/effect/mapping_helpers/mail_sorting/medbay/general, -/obj/machinery/duct, -/turf/open/floor/plating, -/area/station/maintenance/department/medical/central) -"dPV" = ( -/obj/structure/cable, -/obj/structure/broken_flooring/singular/directional/south, -/turf/open/floor/plating, -/area/station/maintenance/port/aft) +/turf/open/floor/iron, +/area/station/hallway/primary/central/aft) +"dPx" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/stone, +/area/station/service/chapel) "dQi" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -8652,43 +10181,41 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, /area/station/engineering/lobby) -"dQP" = ( -/obj/effect/spawner/random/vending/colavend, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/camera/autoname/directional/west, -/obj/machinery/light/small/directional/west, +"dQn" = ( +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/turf/open/floor/engine{ + name = "Holodeck Projector Floor" + }, +/area/station/holodeck/rec_center) +"dQE" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, /turf/open/floor/iron, -/area/station/hallway/secondary/recreation) +/area/station/engineering/storage/tech) "dQQ" = ( /obj/effect/turf_decal/stripes/white/line{ dir = 9 }, /turf/open/floor/engine, /area/station/science/cytology) -"dRf" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/door/airlock{ - name = "Maintenance" - }, -/obj/effect/mapping_helpers/airlock/access/any/command/maintenance, -/obj/effect/mapping_helpers/airlock/unres{ - dir = 4 - }, -/turf/open/floor/plating, -/area/station/maintenance/hallway/abandoned_command) -"dRh" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/trimline/neutral/line{ +"dQY" = ( +/obj/machinery/status_display/evac/directional/north, +/obj/effect/turf_decal/tile/neutral{ dir = 4 }, -/obj/effect/turf_decal/trimline/neutral/line{ +/turf/open/floor/iron, +/area/station/hallway/primary/central/aft) +"dRb" = ( +/obj/effect/landmark/start/bartender, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 8 }, -/turf/open/floor/iron, -/area/station/hallway/primary/central/fore) +/obj/effect/turf_decal/siding/wood, +/turf/open/floor/stone, +/area/station/service/bar/backroom) "dRk" = ( /obj/structure/flora/bush/lavendergrass/style_random, /obj/structure/flora/bush/fullgrass/style_random, @@ -8709,6 +10236,12 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/maintenance/port/fore) +"dRT" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/hallway/primary/central/aft) "dSb" = ( /obj/machinery/atmospherics/pipe/smart/simple/general/visible{ dir = 4 @@ -8730,14 +10263,6 @@ }, /turf/open/floor/iron/smooth, /area/station/engineering/break_room) -"dSl" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/navbeacon{ - codes_txt = "patrol;next_patrol=13.0-DormatoryCommons-Dormatories"; - location = "12.0-RecreationHall-DormatoryCommons" - }, -/turf/open/floor/iron, -/area/station/commons) "dSq" = ( /obj/structure/disposalpipe/segment{ dir = 5 @@ -8784,16 +10309,17 @@ /obj/machinery/camera/autoname/directional/north, /turf/open/floor/iron, /area/station/security/execution/transfer) +"dTd" = ( +/turf/open/floor/stone, +/area/station/service/abandoned_gambling_den) "dTg" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/siding, -/obj/effect/decal/cleanable/dirt, -/obj/structure/disposalpipe/segment{ - dir = 5 - }, -/turf/open/floor/iron/white/small, -/area/station/science/lab) +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/light/floor, +/obj/effect/turf_decal/tile/neutral, +/turf/open/floor/iron, +/area/station/hallway/primary/central/aft) "dTB" = ( /obj/structure/broken_flooring/pile/directional/east, /obj/effect/decal/cleanable/dirt, @@ -8804,20 +10330,26 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/starboard/greater) +"dTH" = ( +/obj/effect/landmark/start/hangover, +/obj/effect/turf_decal/trimline/neutral/line, +/obj/effect/turf_decal/trimline/neutral/line{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/port) "dTI" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/station/maintenance/starboard/aft) -"dTS" = ( -/obj/machinery/door/firedoor, -/obj/effect/turf_decal/stripes/red/line{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/red/line{ +"dTW" = ( +/obj/effect/turf_decal/tile/brown/opposingcorners, +/obj/machinery/computer/shuttle/mining{ dir = 4 }, -/turf/open/floor/iron/small, -/area/station/hallway/primary/central/fore) +/obj/machinery/light/cold/directional/west, +/turf/open/floor/iron, +/area/station/cargo/miningoffice) "dUw" = ( /obj/structure/railing{ dir = 4 @@ -8860,6 +10392,13 @@ /obj/machinery/holopad, /turf/open/floor/iron/dark/small, /area/station/science/xenobiology) +"dVQ" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 8 + }, +/obj/structure/flora/bush/sparsegrass, +/turf/open/floor/grass, +/area/station/service/chapel) "dVW" = ( /obj/structure/chair{ dir = 8 @@ -8879,6 +10418,10 @@ /obj/structure/sign/departments/science/directional/north, /turf/open/floor/iron, /area/station/hallway/primary/starboard) +"dWm" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/eighties/red, +/area/station/service/abandoned_gambling_den/gaming) "dWs" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -8889,6 +10432,35 @@ }, /turf/open/floor/iron/dark/corner, /area/station/science/xenobiology) +"dWz" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/chair/sofa/bench/right{ + dir = 4 + }, +/obj/machinery/light/small/directional/south, +/turf/open/floor/iron, +/area/station/maintenance/department/medical/central) +"dWF" = ( +/obj/structure/disposalpipe/junction/flip{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/machinery/status_display/evac/directional/north, +/turf/open/floor/iron, +/area/station/hallway/secondary/recreation) +"dWG" = ( +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/hallway/secondary/recreation) "dWK" = ( /obj/effect/turf_decal/tile/dark_red/opposingcorners, /obj/structure/chair/office{ @@ -8954,19 +10526,6 @@ /obj/machinery/door/firedoor, /turf/open/floor/catwalk_floor/iron, /area/station/science/lower) -"dXo" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/siding/red{ - dir = 6 - }, -/obj/machinery/firealarm/directional/south, -/turf/open/floor/iron/white/small, -/area/station/security/warden) "dXO" = ( /obj/effect/spawner/structure/window/reinforced/tinted, /obj/structure/disposalpipe/segment{ @@ -8984,28 +10543,6 @@ dir = 1 }, /area/station/science/xenobiology) -"dYc" = ( -/obj/structure/table, -/obj/machinery/recharger{ - pixel_x = 6; - pixel_y = 9 - }, -/obj/item/multitool{ - pixel_x = -6; - pixel_y = 3 - }, -/obj/item/clothing/mask/cigarette{ - pixel_x = 5; - pixel_y = 2 - }, -/turf/open/floor/iron/dark, -/area/station/security/lockers) -"dYf" = ( -/obj/effect/spawner/random/entertainment/arcade{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/commons/fitness/recreation/entertainment) "dYj" = ( /obj/structure/table, /obj/effect/turf_decal/tile/dark_red, @@ -9016,16 +10553,6 @@ }, /turf/open/floor/iron/dark, /area/station/security/processing) -"dYo" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/effect/landmark/navigate_destination/gateway, -/turf/open/floor/iron, -/area/station/maintenance/hallway/abandoned_command) "dYp" = ( /obj/structure/table, /obj/item/wrench, @@ -9036,11 +10563,10 @@ /turf/open/floor/plating, /area/station/maintenance/port/aft) "dYu" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/sink/directional/east, -/obj/structure/mirror/directional/west, -/turf/open/floor/iron/showroomfloor, -/area/station/commons/toilet/auxiliary) +/obj/machinery/light/floor, +/obj/effect/landmark/start/cook, +/turf/open/floor/iron/kitchen/small, +/area/station/service/kitchen) "dYw" = ( /obj/effect/turf_decal/tile/brown/opposingcorners, /obj/structure/chair{ @@ -9050,15 +10576,6 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/engineering/hallway) -"dYD" = ( -/obj/machinery/door/window/brigdoor/left/directional/west{ - id = "Cell 1"; - name = "Cell 1"; - req_access = list("security") - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark/small, -/area/station/security/brig) "dYI" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment, @@ -9079,6 +10596,11 @@ /obj/effect/mapping_helpers/airlock/abandoned, /turf/open/floor/plating, /area/station/maintenance/starboard/greater) +"dYW" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron/dark, +/area/station/science/ordnance/testlab) "dYX" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -9088,6 +10610,7 @@ /area/station/medical/medbay/aft) "dYY" = ( /obj/machinery/light/cold/dim/directional/north, +/obj/machinery/portable_atmospherics/canister, /turf/open/floor/iron/dark, /area/station/engineering/atmos) "dZa" = ( @@ -9159,6 +10682,10 @@ /area/station/maintenance/department/medical/central) "dZX" = ( /obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/atmospherics/components/binary/pump/off/general/visible{ + dir = 4; + name = "Air to Pure" + }, /turf/open/floor/iron/dark, /area/station/engineering/atmos) "dZZ" = ( @@ -9181,17 +10708,24 @@ dir = 8 }, /area/station/engineering/main) -"eax" = ( -/obj/item/shovel, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/station/maintenance/department/prison) -"eaT" = ( +"eav" = ( +/obj/machinery/door/airlock/grunge{ + name = "Gambling Den" + }, +/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, -/area/station/security/prison/rec) +/area/station/maintenance/fore/greater) +"ebc" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/obj/effect/decal/cleanable/dirt, +/obj/structure/steam_vent, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "ebe" = ( /obj/structure/hoop{ dir = 4; @@ -9204,6 +10738,31 @@ /obj/machinery/light/small/directional/west, /turf/open/floor/wood, /area/station/commons/fitness/recreation) +"ebk" = ( +/obj/effect/turf_decal/siding/wood, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/machinery/light/floor, +/turf/open/floor/stone, +/area/station/service/bar) +"ebE" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/dark_red/opposingcorners, +/obj/machinery/flasher/directional/west{ + id = "brigentry" + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/station/security/brig/entrance) +"ebK" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/herringbone, +/area/station/commons/dorms) "ebU" = ( /obj/structure/table/reinforced, /obj/structure/reagent_dispensers/servingdish, @@ -9276,6 +10835,19 @@ }, /turf/open/floor/iron, /area/station/maintenance/starboard/aft) +"edG" = ( +/obj/machinery/vending/hydronutrients, +/obj/effect/turf_decal/tile/green/opposingcorners, +/obj/effect/turf_decal/tile/blue/opposingcorners{ + dir = 8 + }, +/obj/effect/turf_decal/delivery/white{ + color = "#52B4E9" + }, +/obj/item/radio/intercom/directional/north, +/obj/machinery/firealarm/directional/east, +/turf/open/floor/iron, +/area/station/service/hydroponics) "edJ" = ( /obj/machinery/teleport/station, /obj/machinery/airalarm/directional/north, @@ -9301,19 +10873,6 @@ /obj/machinery/status_display/ai/directional/north, /turf/open/floor/iron/smooth, /area/station/ai_monitored/turret_protected/aisat/teleporter) -"edU" = ( -/obj/machinery/porta_turret/ai, -/obj/machinery/computer/security/telescreen{ - desc = "Used for watching the RD's goons from the safety of his office."; - dir = 4; - name = "Research Monitor"; - network = list("rd"); - pixel_x = -28 - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/status_display/ai/directional/north, -/turf/open/floor/iron/smooth, -/area/station/ai_monitored/turret_protected/aisat_interior) "eeb" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -9330,31 +10889,12 @@ /obj/structure/broken_flooring/singular/directional/east, /turf/open/floor/iron, /area/station/hallway/secondary/dock) -"eeq" = ( -/obj/structure/railing/corner{ - dir = 8 - }, -/turf/open/space/basic, -/area/space) -"eex" = ( -/obj/effect/decal/cleanable/dirt, -/obj/item/radio/intercom/directional/west, -/turf/open/floor/iron/white/side{ - dir = 4 - }, -/area/station/science/xenobiology) "eeD" = ( /obj/structure/showcase/cyborg/old{ pixel_y = 20 }, /turf/open/floor/iron/smooth, /area/station/ai_monitored/turret_protected/aisat_interior) -"eeF" = ( -/obj/structure/table, -/obj/item/wirecutters, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/iron, -/area/station/engineering/storage/tech) "eeJ" = ( /turf/closed/wall, /area/station/commons/fitness/locker_room) @@ -9364,13 +10904,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/department/engine/atmos) -"efj" = ( -/obj/effect/turf_decal/tile/red/opposingcorners{ - dir = 1 - }, -/obj/structure/sign/poster/official/random/directional/north, -/turf/open/floor/iron/cafeteria, -/area/station/service/cafeteria) "efl" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -9378,11 +10911,13 @@ /obj/machinery/atmospherics/pipe/smart/manifold/yellow/visible, /turf/open/floor/iron, /area/station/engineering/atmos) -"efr" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating, -/area/station/maintenance/port/lesser) +"efm" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/neutral, +/turf/open/floor/iron, +/area/station/hallway/primary/central/aft) "efy" = ( /obj/item/kirbyplants/organic/plant21, /obj/machinery/status_display/ai/directional/west, @@ -9398,10 +10933,6 @@ }, /turf/open/floor/iron/white, /area/station/medical/medbay/lobby) -"efC" = ( -/obj/effect/spawner/structure/window, -/turf/open/floor/plating, -/area/station/service/bar) "efK" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -9413,13 +10944,6 @@ dir = 10 }, /area/station/science/lower) -"efL" = ( -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/green{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/service/hydroponics) "efS" = ( /obj/machinery/computer/security/qm{ dir = 1 @@ -9437,6 +10961,18 @@ /obj/effect/spawner/structure/window, /turf/open/floor/plating, /area/station/security/prison/rec) +"egc" = ( +/obj/effect/turf_decal/tile/green/opposingcorners, +/obj/effect/turf_decal/tile/blue/opposingcorners{ + dir = 8 + }, +/obj/structure/table, +/obj/machinery/reagentgrinder{ + pixel_y = 10; + pixel_x = -5 + }, +/turf/open/floor/iron, +/area/station/service/hydroponics) "egr" = ( /obj/structure/cable, /obj/effect/decal/cleanable/dirt, @@ -9448,6 +10984,14 @@ /obj/effect/turf_decal/siding/blue, /turf/open/floor/iron/white/small, /area/station/medical/storage) +"egJ" = ( +/obj/structure/closet/wardrobe/black, +/obj/machinery/light/small/directional/west, +/obj/effect/turf_decal/siding/wideplating/dark{ + dir = 9 + }, +/turf/open/floor/iron/small, +/area/station/commons/fitness/locker_room) "egN" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -9460,6 +11004,12 @@ }, /turf/open/floor/iron/small, /area/station/engineering/supermatter/room) +"ehf" = ( +/obj/machinery/firealarm/directional/north, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/commons/fitness/locker_room) "ehj" = ( /obj/effect/spawner/structure/window/reinforced/tinted, /turf/open/floor/plating, @@ -9469,6 +11019,16 @@ /obj/structure/sign/poster/official/random/directional/east, /turf/open/floor/iron/smooth, /area/station/engineering/atmos/office) +"ehT" = ( +/obj/machinery/door/airlock{ + id_tag = "commiss2"; + name = "Commissary" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/door/firedoor, +/turf/open/floor/iron/textured_half, +/area/station/commons/vacant_room/commissary) "ehV" = ( /obj/structure/cable, /obj/structure/chair/sofa/right{ @@ -9489,16 +11049,6 @@ /obj/structure/broken_flooring/singular/directional/south, /turf/open/floor/plating, /area/station/maintenance/department/medical/central) -"ein" = ( -/obj/structure/bed{ - dir = 4 - }, -/obj/effect/spawner/random/bedsheet{ - dir = 4 - }, -/obj/machinery/light/small/directional/west, -/turf/open/floor/carpet/purple, -/area/station/commons/dorms) "eip" = ( /obj/machinery/power/port_gen/pacman, /obj/machinery/power/terminal{ @@ -9508,6 +11058,11 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/smooth, /area/station/ai_monitored/turret_protected/aisat/equipment) +"eiy" = ( +/obj/machinery/camera/autoname/directional/south, +/obj/machinery/light/cold/directional/south, +/turf/open/floor/iron/dark, +/area/station/security/office) "eiC" = ( /obj/structure/cable/multilayer/connected, /obj/structure/rack, @@ -9549,16 +11104,6 @@ "eiU" = ( /turf/open/floor/plating/rust, /area/station/maintenance/department/engine/atmos) -"ejc" = ( -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/tile/dark_red/half/contrasted{ - dir = 4 - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/security) "ejn" = ( /obj/item/stack/cable_coil/five, /obj/effect/decal/cleanable/cobweb, @@ -9612,10 +11157,14 @@ }, /turf/open/floor/catwalk_floor, /area/station/engineering/main) -"ejV" = ( -/mob/living/basic/mining/basilisk, -/turf/open/misc/asteroid, -/area/space/nearstation) +"ejX" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/effect/turf_decal/siding/wood, +/obj/machinery/vending/cigarette, +/turf/open/floor/stone, +/area/station/service/bar) "ekf" = ( /obj/structure/lattice/catwalk, /obj/structure/railing{ @@ -9654,12 +11203,6 @@ /obj/effect/spawner/structure/window, /turf/open/floor/plating, /area/station/command/heads_quarters/hop) -"ekF" = ( -/obj/effect/mapping_helpers/broken_floor, -/obj/machinery/holopad, -/obj/structure/cable, -/turf/open/floor/iron/dark/small, -/area/station/command/heads_quarters/captain/private) "ekL" = ( /obj/effect/turf_decal/stripes/white/line{ dir = 9 @@ -9706,6 +11249,13 @@ /obj/machinery/camera/autoname/directional/west, /turf/open/floor/iron/dark, /area/station/science/ordnance) +"eln" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 1 + }, +/obj/structure/flora/tree/jungle/small/style_4, +/turf/open/floor/grass, +/area/station/service/chapel) "elv" = ( /obj/machinery/atmospherics/pipe/smart/simple/cyan/hidden{ dir = 4 @@ -9768,11 +11318,15 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/medical/medbay/lobby) -"elQ" = ( -/obj/effect/mapping_helpers/broken_floor, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/station/maintenance/hallway/abandoned_recreation) +"elN" = ( +/obj/machinery/computer/security/telescreen/entertainment/directional/north, +/obj/effect/landmark/start/hangover, +/obj/machinery/light/small/directional/north, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central/aft) "elR" = ( /obj/structure/table, /obj/structure/window/spawner/directional/south, @@ -9788,16 +11342,22 @@ "emd" = ( /turf/open/floor/iron, /area/station/medical/chemistry) -"emw" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/blue, -/turf/open/floor/iron/white/corner{ +"emn" = ( +/obj/structure/cable, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/siding/purple{ dir = 8 }, -/area/station/hallway/secondary/entry) +/obj/machinery/holopad, +/turf/open/floor/iron/dark, +/area/station/command/heads_quarters/rd) +"emp" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plating, +/area/station/maintenance/central/greater) "emB" = ( /obj/machinery/door/airlock/maintenance{ name = "Maintenance" @@ -9812,15 +11372,6 @@ /obj/effect/turf_decal/stripes/red/end, /turf/open/floor/engine, /area/station/engineering/supermatter) -"emD" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 10 - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating, -/area/station/maintenance/starboard/aft) "ena" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/reagent_dispensers/plumbed{ @@ -9836,22 +11387,15 @@ /obj/effect/landmark/navigate_destination/aiupload, /turf/open/floor/iron/white, /area/station/hallway/primary/starboard) -"enm" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/station/cargo/office) -"enD" = ( -/obj/effect/turf_decal/tile/green{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue/opposingcorners, -/obj/machinery/camera/autoname/directional/west, -/obj/machinery/light_switch/directional/west, +"enq" = ( +/obj/structure/cable, +/obj/structure/table/reinforced, +/obj/machinery/cell_charger, +/obj/item/stock_parts/power_store/cell/high, +/obj/machinery/status_display/ai/directional/north, +/obj/machinery/camera/autoname/directional/north, /turf/open/floor/iron, -/area/station/service/hydroponics) +/area/station/engineering/storage/tech) "enE" = ( /obj/item/cultivator/rake, /obj/structure/cable, @@ -9861,11 +11405,10 @@ "enG" = ( /turf/open/floor/iron/dark, /area/station/science/ordnance) -"enU" = ( -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/computer/robotics, -/turf/open/floor/iron/dark, +"enV" = ( +/obj/structure/closet/secure_closet/research_director, +/obj/item/radio/intercom/directional/north, +/turf/open/floor/iron/dark/small, /area/station/command/heads_quarters/rd) "eoa" = ( /obj/structure/cable, @@ -9877,6 +11420,16 @@ }, /turf/open/floor/iron, /area/station/security/prison) +"eof" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/dark_red/fourcorners, +/obj/effect/turf_decal/siding/wideplating/dark/corner{ + dir = 1 + }, +/obj/machinery/power/apc/auto_name/directional/north, +/turf/open/floor/iron, +/area/station/security/brig/entrance) "eoz" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -9892,6 +11445,10 @@ /obj/structure/broken_flooring/pile/directional/east, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) +"eoM" = ( +/obj/structure/disposalpipe/segment, +/turf/closed/wall, +/area/station/maintenance/central/greater) "eoU" = ( /obj/structure/lattice/catwalk, /obj/structure/railing{ @@ -9936,13 +11493,6 @@ /obj/machinery/holopad, /turf/open/floor/iron, /area/station/security/prison/rec) -"epN" = ( -/obj/machinery/atmospherics/pipe/smart/simple/general/visible{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/engine, -/area/station/science/xenobiology) "eqg" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -9982,10 +11532,24 @@ /obj/machinery/power/energy_accumulator/tesla_coil/anchored, /turf/open/floor/engine, /area/station/engineering/supermatter) +"eqG" = ( +/obj/machinery/light/small/directional/west, +/turf/open/floor/iron/dark/small, +/area/station/maintenance/central/lesser) "eqS" = ( /obj/effect/spawner/structure/window, /turf/open/floor/plating, /area/station/engineering/atmos/storage/gas) +"erf" = ( +/obj/effect/mapping_helpers/airlock/access/any/service/hydroponics, +/obj/machinery/door/airlock/hydroponics/glass{ + name = "Hydroponics" + }, +/obj/machinery/door/firedoor, +/turf/open/floor/iron/textured_half{ + dir = 8 + }, +/area/station/service/hydroponics) "erg" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment, @@ -10027,10 +11591,21 @@ /obj/effect/turf_decal/siding/thinplating_new, /turf/open/floor/iron/dark/herringbone, /area/station/ai_monitored/command/nuke_storage) +"erS" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/engineering/gravity_generator) "erZ" = ( /obj/machinery/computer/records/security, /turf/open/floor/iron/small, /area/station/security/office) +"esr" = ( +/obj/structure/closet/emcloset, +/obj/effect/turf_decal/tile/blue, +/turf/open/floor/iron/dark/side, +/area/station/hallway/primary/central/fore) "ess" = ( /obj/structure/filingcabinet/chestdrawer, /obj/item/radio/intercom/directional/west, @@ -10047,6 +11622,14 @@ }, /turf/open/space/basic, /area/space) +"esz" = ( +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/starboard/central) "esF" = ( /obj/structure/cable, /obj/item/kirbyplants/organic/applebush, @@ -10071,18 +11654,18 @@ /obj/structure/sign/departments/medbay/directional/east, /turf/open/floor/iron, /area/station/hallway/primary/aft) -"esY" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +"ete" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/dark_red/fourcorners, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/security/execution/transfer) -"etf" = ( -/obj/structure/cable, -/obj/structure/broken_flooring/pile/directional/east, /turf/open/floor/plating, -/area/station/maintenance/port/aft) +/area/station/maintenance/port/greater) "etl" = ( /obj/machinery/atmospherics/pipe/smart/simple/cyan/hidden{ dir = 5 @@ -10100,11 +11683,6 @@ /obj/machinery/sparker/directional/north, /turf/open/floor/iron/dark/smooth_large, /area/station/security/execution/education) -"etv" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/spawner/random/trash, -/turf/open/floor/iron, -/area/station/maintenance/department/medical/central) "etx" = ( /obj/effect/spawner/random/maintenance, /turf/open/floor/circuit, @@ -10112,8 +11690,9 @@ "etD" = ( /obj/structure/cable/layer3, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/flasher/directional/east{ - id = "ai" +/obj/machinery/door/poddoor/shutters/preopen{ + id = "AI Core shutters"; + name = "AI Core Shutter" }, /turf/open/floor/iron/stairs, /area/station/ai_monitored/turret_protected/ai) @@ -10133,6 +11712,13 @@ /obj/machinery/seed_extractor, /turf/open/floor/plating, /area/station/maintenance/department/prison) +"eul" = ( +/obj/machinery/firealarm/directional/south, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/commons/fitness/locker_room) "euq" = ( /obj/structure/cable, /obj/item/kirbyplants/random/fullysynthetic, @@ -10151,17 +11737,10 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/security) -"euK" = ( -/obj/structure/disposalpipe/segment{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/obj/effect/landmark/navigate_destination/janitor, -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/commons/dorms) +"euz" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/closed/wall, +/area/station/hallway/primary/central/aft) "euO" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/white/line{ @@ -10212,20 +11791,32 @@ /obj/structure/steam_vent, /turf/open/floor/plating, /area/station/maintenance/department/science/xenobiology) +"evv" = ( +/obj/structure/cable, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/iron/dark/corner{ + dir = 4 + }, +/area/station/science/xenobiology) +"evA" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/machinery/airalarm/directional/west, +/turf/open/floor/iron, +/area/station/commons/fitness/recreation/entertainment) "evM" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/small, /area/station/maintenance/department/engine) -"ewi" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/light/cold/directional/west, -/obj/machinery/duct, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/central/fore) "ewo" = ( /obj/effect/turf_decal/box/corners{ dir = 4 @@ -10238,15 +11829,23 @@ }, /turf/open/floor/engine, /area/station/science/cytology) -"ewz" = ( +"ewt" = ( /obj/structure/cable, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/effect/turf_decal/stripes/corner{ +/obj/machinery/firealarm/directional/south, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron/smooth, +/area/station/maintenance/solars/starboard/fore) +"ewF" = ( +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/obj/machinery/vending/coffee, +/turf/open/floor/iron/white/corner{ dir = 1 }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/station/science/xenobiology) +/area/station/hallway/secondary/dock) "ewW" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -10263,6 +11862,10 @@ /obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible, /obj/structure/cable, /obj/effect/decal/cleanable/dirt/dust, +/obj/item/clothing/head/cone{ + pixel_x = -7; + pixel_y = 9 + }, /turf/open/floor/iron/dark, /area/station/engineering/atmos) "exE" = ( @@ -10275,6 +11878,12 @@ }, /turf/open/floor/iron, /area/station/engineering/atmos) +"exM" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/plating, +/area/station/maintenance/fore/greater) "exQ" = ( /obj/structure/chair/stool/directional/north, /obj/effect/turf_decal/siding/yellow, @@ -10296,11 +11905,6 @@ /obj/structure/sink/directional/east, /turf/open/floor/iron/white, /area/station/medical/virology) -"eyz" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/obj/structure/chair/stool/directional/west, -/turf/open/floor/iron, -/area/station/commons/fitness/recreation/entertainment) "eyB" = ( /obj/structure/cable, /obj/machinery/door/firedoor, @@ -10323,14 +11927,15 @@ /obj/machinery/firealarm/directional/west, /turf/open/floor/iron/white, /area/station/medical/medbay/central) -"ezg" = ( -/obj/effect/mapping_helpers/broken_floor, -/obj/effect/spawner/random/structure/crate, -/obj/effect/turf_decal/stripes/line{ - dir = 8 +"ezd" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/door/window/right/directional/south{ + name = "Upload Console Window"; + req_access = list("ai_upload") }, -/turf/open/floor/plating, -/area/station/construction/mining/aux_base) +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/ai_upload) "ezi" = ( /obj/structure/chair/stool/directional/west, /turf/open/floor/iron/cafeteria, @@ -10403,6 +12008,10 @@ }, /turf/open/floor/iron/smooth, /area/station/ai_monitored/turret_protected/aisat/teleporter) +"ezV" = ( +/obj/machinery/computer/security/telescreen/prison/directional/south, +/turf/open/floor/iron/dark, +/area/station/security/office) "eAc" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -10416,6 +12025,14 @@ /obj/machinery/light/floor, /turf/open/floor/iron, /area/station/cargo/storage) +"eAm" = ( +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/central/greater) "eAn" = ( /obj/machinery/computer/mech_bay_power_console, /obj/effect/turf_decal/siding/thinplating_new/light{ @@ -10462,56 +12079,49 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/smooth, /area/station/ai_monitored/turret_protected/aisat/teleporter) -"eAR" = ( -/obj/structure/chair{ - name = "Defense" - }, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 1 - }, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/iron, -/area/station/security/courtroom) "eAU" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/door/window/right/directional/south{ name = "AI Security Door" }, -/obj/machinery/status_display/evac/directional/west, +/obj/machinery/flasher/directional/west{ + id = "ai" + }, /turf/open/floor/circuit/red, /area/station/ai_monitored/turret_protected/ai) -"eAX" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/dark_red/fourcorners, -/obj/effect/landmark/start/security_officer, -/turf/open/floor/iron, -/area/station/security/brig/entrance) "eAY" = ( /turf/open/floor/grass, /area/station/science/xenobiology) +"eBd" = ( +/obj/effect/turf_decal/siding/wideplating/dark{ + dir = 5 + }, +/obj/item/radio/intercom/directional/north, +/turf/open/floor/iron/small, +/area/station/service/barber) "eBe" = ( /obj/machinery/portable_atmospherics/canister/air, /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) -"eBn" = ( -/obj/effect/mapping_helpers/broken_floor, +"eBy" = ( /obj/structure/cable, -/turf/open/floor/plating, -/area/station/maintenance/department/science/xenobiology) -"eBr" = ( -/obj/effect/turf_decal/tile/blue/anticorner/contrasted{ +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 1 }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/landmark/event_spawn, -/turf/open/floor/iron/white, -/area/station/medical/paramedic) +/turf/open/floor/iron, +/area/station/commons/storage/art) +"eBC" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/item/radio/intercom/directional/south, +/turf/open/floor/iron, +/area/station/hallway/primary/central/fore) "eBH" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -10538,15 +12148,6 @@ }, /turf/open/floor/iron/small, /area/station/medical/morgue) -"eBV" = ( -/obj/structure/table/wood, -/obj/item/storage/crayons{ - pixel_x = 3; - pixel_y = 11 - }, -/obj/effect/spawner/random/maintenance, -/turf/open/floor/carpet/green, -/area/station/maintenance/central/lesser) "eCf" = ( /obj/machinery/porta_turret/ai{ dir = 4 @@ -10582,13 +12183,22 @@ /obj/effect/spawner/structure/window/survival_pod, /turf/open/floor/engine, /area/station/ai_monitored/turret_protected/ai) +"eDi" = ( +/obj/structure/flora/bush/flowers_br, +/obj/structure/flora/bush/flowers_pp, +/obj/structure/flora/bush/flowers_yw, +/obj/structure/flora/bush/pale, +/turf/open/floor/grass, +/area/station/hallway/primary/central/fore) "eDl" = ( /obj/structure/cable/layer3, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/door/window/left/directional/south{ name = "AI Security Door" }, -/obj/machinery/status_display/evac/directional/east, +/obj/machinery/flasher/directional/east{ + id = "ai" + }, /turf/open/floor/circuit/red, /area/station/ai_monitored/turret_protected/ai) "eDo" = ( @@ -10602,6 +12212,20 @@ }, /turf/open/floor/catwalk_floor, /area/station/engineering/break_room) +"eDr" = ( +/obj/structure/table/glass, +/obj/machinery/cell_charger, +/obj/item/stock_parts/power_store/cell, +/obj/machinery/status_display/evac/directional/north, +/obj/structure/sign/directions/supply/directional/west, +/obj/structure/sign/directions/engineering/directional/west{ + pixel_y = 8 + }, +/obj/structure/sign/directions/command/directional/west{ + pixel_y = -8 + }, +/turf/open/floor/iron/white, +/area/station/hallway/primary/starboard) "eDt" = ( /obj/effect/turf_decal/stripes/white/line{ dir = 1 @@ -10802,22 +12426,6 @@ dir = 1 }, /area/station/science/lobby) -"eGl" = ( -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/effect/turf_decal/siding/wood{ - dir = 4 - }, -/obj/machinery/photocopier, -/turf/open/floor/iron/smooth, -/area/station/service/library) -"eGr" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/science/lower) "eGw" = ( /obj/machinery/camera/directional/west{ c_tag = "Engineering - Public Desk" @@ -10856,15 +12464,13 @@ /turf/open/floor/iron/white, /area/station/medical/paramedic) "eGU" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/dark_red/opposingcorners, -/obj/machinery/holopad, -/obj/effect/decal/cleanable/dirt, -/obj/structure/disposalpipe/segment, -/turf/open/floor/iron, -/area/station/security/processing) +/obj/structure/chair/stool/bar/directional/north, +/turf/open/floor/wood/large, +/area/station/service/bar) +"eHa" = ( +/obj/structure/sign/poster/official/random/directional/north, +/turf/open/floor/iron/showroomfloor, +/area/station/service/barber) "eHe" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -10929,6 +12535,13 @@ }, /turf/open/floor/iron/grimy, /area/station/engineering/main) +"eIF" = ( +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/obj/structure/table, +/turf/open/floor/iron, +/area/station/cargo/sorting) "eIM" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/sorting/mail/flip{ @@ -10938,6 +12551,20 @@ /obj/effect/turf_decal/tile/neutral, /turf/open/floor/iron, /area/station/hallway/primary/central/fore) +"eIO" = ( +/obj/structure/chair/sofa/bench/right{ + dir = 1 + }, +/obj/machinery/camera/directional/south{ + c_tag = "Atmospherics - South" + }, +/obj/effect/turf_decal/tile/blue, +/obj/effect/landmark/start/hangover, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 1 + }, +/turf/open/floor/iron/dark/side, +/area/station/hallway/primary/central/fore) "eIT" = ( /obj/machinery/portable_atmospherics/canister/oxygen, /obj/effect/turf_decal/stripes/line{ @@ -10947,6 +12574,13 @@ /obj/structure/sign/poster/official/random/directional/north, /turf/open/floor/plating, /area/station/engineering/atmos/storage/gas) +"eIW" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/structure/sign/poster/official/random/directional/west, +/turf/open/floor/iron/grimy, +/area/station/service/library) "eIX" = ( /obj/machinery/light/cold/directional/south, /obj/effect/turf_decal/stripes/end{ @@ -10991,19 +12625,19 @@ /obj/effect/turf_decal/stripes/asteroid/end, /turf/open/floor/circuit/green, /area/station/science/robotics/mechbay) -"eJY" = ( -/obj/effect/turf_decal/tile/green/diagonal_centre, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/obj/structure/extinguisher_cabinet/directional/north, -/obj/machinery/light/small/directional/north, -/turf/open/floor/iron/diagonal, -/area/station/hallway/primary/central/aft) "eKf" = ( /obj/structure/table, /obj/item/storage/box/donkpockets/donkpocketpizza, /obj/machinery/light/small/directional/north, /turf/open/floor/iron/kitchen/small, /area/station/maintenance/aft) +"eKp" = ( +/obj/machinery/camera/directional/east{ + c_tag = "Xenobiology Lab - Test Chamber"; + network = list("ss13","rd","xeno") + }, +/turf/open/floor/engine/xenobio, +/area/station/science/xenobiology) "eKs" = ( /obj/structure/chair/comfy/brown{ dir = 8 @@ -11013,6 +12647,13 @@ dir = 4 }, /area/station/maintenance/starboard/greater) +"eKD" = ( +/obj/structure/disposalpipe/sorting/mail{ + dir = 1 + }, +/obj/effect/mapping_helpers/mail_sorting/service/library, +/turf/open/floor/wood/parquet, +/area/station/service/library) "eKP" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -11028,11 +12669,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/port/aft) -"eKX" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/iron, -/area/station/commons/fitness/recreation/entertainment) "eLn" = ( /obj/machinery/door/airlock/glass{ name = "Gold Standard Law Firm" @@ -11054,6 +12690,12 @@ dir = 1 }, /area/station/ai_monitored/command/storage/eva) +"eLB" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) "eLZ" = ( /obj/effect/turf_decal/stripes/corner, /obj/machinery/atmospherics/components/binary/pump{ @@ -11067,6 +12709,14 @@ /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/iron/smooth, /area/station/engineering/supermatter/room) +"eMc" = ( +/obj/machinery/flasher/portable, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/light/small/directional/south, +/turf/open/floor/plating, +/area/station/security/tram) "eMl" = ( /obj/effect/turf_decal/tile/blue, /obj/machinery/camera/autoname/directional/west, @@ -11076,10 +12726,17 @@ /obj/effect/turf_decal/tile/blue/anticorner/contrasted, /turf/open/floor/iron/white, /area/station/medical/medbay/lobby) -"eMG" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark/small, -/area/station/command/heads_quarters/rd) +"eMQ" = ( +/obj/machinery/light_switch/directional/east, +/turf/open/floor/iron, +/area/station/commons/fitness/locker_room) +"eMS" = ( +/obj/structure/chair{ + pixel_y = -2 + }, +/obj/effect/landmark/start/hangover, +/turf/open/floor/iron, +/area/station/commons/fitness/locker_room) "eMU" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/circuit/red, @@ -11116,6 +12773,12 @@ /obj/effect/turf_decal/sand/plating, /turf/open/floor/plating, /area/station/maintenance/starboard/greater) +"eNp" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/commons/storage/art) "eNt" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/circuit/red, @@ -11125,6 +12788,15 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark/textured, /area/station/ai_monitored/turret_protected/ai) +"eNM" = ( +/obj/structure/table/wood, +/obj/structure/reagent_dispensers/beerkeg, +/obj/effect/turf_decal/siding/wood/end{ + dir = 8 + }, +/obj/structure/extinguisher_cabinet/directional/west, +/turf/open/floor/stone, +/area/station/service/bar) "eNU" = ( /obj/structure/table/reinforced, /obj/item/phone{ @@ -11143,18 +12815,22 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/iron/small, /area/station/engineering/atmos) +"eOk" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/tile/yellow/anticorner/contrasted, +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/commons/storage/tools) "eOt" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/maintenance/port/aft) -"eOJ" = ( -/obj/effect/spawner/random/structure/crate, -/obj/effect/spawner/random/maintenance, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/iron, -/area/station/maintenance/department/medical/central) "eOP" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -11164,17 +12840,18 @@ /obj/effect/landmark/start/atmospheric_technician, /turf/open/floor/iron/small, /area/station/engineering/atmos) +"eOX" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/item/kirbyplants/random, +/obj/machinery/airalarm/directional/east, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/holodeck/rec_center) "eOZ" = ( /obj/machinery/portable_atmospherics/canister/oxygen, /obj/machinery/airalarm/directional/north, /turf/open/floor/iron/showroomfloor, /area/station/medical/coldroom) -"ePg" = ( -/obj/structure/table, -/obj/machinery/cell_charger, -/obj/item/stock_parts/cell/high, -/turf/open/floor/circuit, -/area/station/maintenance/port/aft) "ePn" = ( /obj/structure/disposalpipe/segment, /obj/machinery/light/small/directional/south, @@ -11184,6 +12861,21 @@ }, /turf/open/floor/iron, /area/station/cargo/miningfoundry) +"ePt" = ( +/obj/structure/flora/grass/jungle/a/style_4, +/turf/open/floor/grass, +/area/station/service/chapel) +"ePP" = ( +/obj/structure/cable, +/obj/effect/turf_decal/siding/dark_red{ + dir = 1 + }, +/obj/structure/secure_safe/hos{ + pixel_x = 15; + pixel_y = 28 + }, +/turf/open/floor/stone, +/area/station/command/heads_quarters/hos) "ePV" = ( /obj/structure/cable, /obj/structure/window/reinforced/spawner/directional/west, @@ -11226,16 +12918,23 @@ /turf/closed/wall, /area/station/command/heads_quarters/rd) "eQv" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/power/apc/auto_name/directional/east, -/turf/open/floor/carpet/lone, -/area/station/service/theater) +/obj/structure/table/wood, +/obj/item/cigarette/cigar/premium{ + pixel_y = 5 + }, +/turf/open/floor/stone, +/area/station/service/abandoned_gambling_den) "eQC" = ( /obj/effect/spawner/random/maintenance, /obj/effect/spawner/random/structure/girder, /turf/open/floor/tram, /area/station/security/tram) +"eQF" = ( +/obj/effect/landmark/start/hangover, +/obj/effect/spawner/random/engineering/tracking_beacon, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/station/commons/dorms) "eQQ" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -11244,10 +12943,6 @@ dir = 1 }, /area/station/maintenance/starboard/greater) -"eQR" = ( -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/iron/smooth, -/area/station/maintenance/solars/port/aft) "eQY" = ( /obj/machinery/door/airlock/maintenance{ name = "Maintenance" @@ -11255,6 +12950,26 @@ /obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, /turf/open/floor/plating, /area/station/maintenance/department/engine) +"eRa" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/tile/neutral/opposingcorners{ + dir = 1 + }, +/obj/effect/turf_decal/siding/thinplating_new{ + dir = 8 + }, +/turf/open/floor/iron/small, +/area/station/hallway/secondary/service) +"eRy" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/spawner/random/structure/steam_vent, +/turf/open/floor/plating, +/area/station/maintenance/port/greater) "eRX" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -11282,12 +12997,6 @@ /obj/structure/bed/maint, /turf/open/floor/iron/small, /area/station/maintenance/starboard/central) -"eSW" = ( -/obj/structure/cable, -/obj/effect/turf_decal/tile/dark_red/opposingcorners, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/security/brig/entrance) "eSZ" = ( /obj/structure/table/wood, /obj/item/folder/blue{ @@ -11308,15 +13017,6 @@ /obj/machinery/firealarm/directional/west, /turf/open/floor/iron/smooth, /area/station/ai_monitored/turret_protected/aisat/teleporter) -"eTh" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/white/side{ - dir = 8 - }, -/area/station/science/lower) "eTi" = ( /obj/effect/turf_decal/siding/thinplating_new/light{ dir = 4 @@ -11339,19 +13039,13 @@ /obj/item/kirbyplants/random/fullysynthetic, /turf/open/floor/iron, /area/station/security/prison) -"eTt" = ( -/obj/structure/disposalpipe/sorting/mail{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/mapping_helpers/mail_sorting/service/hydroponics, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 +"eTJ" = ( +/obj/effect/turf_decal/siding/wood, +/obj/effect/turf_decal/siding/wood{ + dir = 1 }, -/obj/effect/landmark/navigate_destination/hydro, -/turf/open/floor/iron, -/area/station/hallway/primary/port) +/turf/open/floor/stone, +/area/station/service/bar) "eTT" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -11417,10 +13111,6 @@ dir = 1 }, /area/station/engineering/supermatter/room) -"eUW" = ( -/obj/machinery/light/small/directional/south, -/turf/open/floor/wood/parquet, -/area/station/service/library) "eUZ" = ( /obj/effect/turf_decal/tile/dark_red{ dir = 1 @@ -11478,18 +13168,6 @@ dir = 8 }, /area/station/engineering/supermatter/room) -"eVu" = ( -/obj/effect/mapping_helpers/broken_floor, -/obj/structure/chair/sofa/bench{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/turf/open/floor/iron/white/corner{ - dir = 1 - }, -/area/station/hallway/secondary/entry) "eVz" = ( /obj/machinery/camera/directional/west{ c_tag = "AI Sat - Antechamber"; @@ -11500,6 +13178,13 @@ /obj/machinery/airalarm/directional/west, /turf/open/floor/iron/smooth, /area/station/ai_monitored/turret_protected/aisat_interior) +"eVH" = ( +/obj/structure/window/spawner/directional/north, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/commons/dorms) "eVI" = ( /obj/effect/turf_decal/tile/dark_red/half/contrasted, /turf/open/floor/iron/smooth, @@ -11510,6 +13195,20 @@ /obj/machinery/light/small/directional/south, /turf/open/floor/iron, /area/station/hallway/secondary/entry) +"eVX" = ( +/obj/structure/statue/sandstone/venus{ + dir = 8; + pixel_y = -15 + }, +/obj/structure/flora/bush/flowers_pp, +/obj/structure/flora/bush/flowers_br/style_3, +/obj/effect/dummy/lighting_obj, +/obj/effect/light_emitter/fake_outdoors, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/turf/open/floor/grass/Airless, +/area/station/hallway/primary/central/aft) "eVY" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, @@ -11535,6 +13234,15 @@ /obj/machinery/firealarm/directional/west, /turf/open/floor/iron/small, /area/station/engineering/atmos/pumproom) +"eWk" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 8 + }, +/turf/open/floor/stone, +/area/station/service/chapel) "eWB" = ( /obj/effect/turf_decal/tile/dark_red/half/contrasted{ dir = 1 @@ -11550,6 +13258,31 @@ "eWI" = ( /turf/closed/wall/r_wall, /area/station/maintenance/aft) +"eWO" = ( +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/iron/dark/side{ + dir = 8 + }, +/area/station/science/xenobiology) +"eWP" = ( +/obj/effect/turf_decal/siding/wideplating/dark, +/turf/open/floor/iron, +/area/station/commons/fitness/locker_room) +"eWQ" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/machinery/status_display/ai/directional/west, +/obj/structure/disposalpipe/segment, +/obj/machinery/light/cold/directional/west, +/turf/open/floor/iron, +/area/station/hallway/primary/central/fore) "eWY" = ( /obj/effect/turf_decal/tile/blue, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ @@ -11558,13 +13291,6 @@ /obj/machinery/light/cold/directional/west, /turf/open/floor/iron/white, /area/station/medical/medbay/aft) -"eXf" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark/corner{ - dir = 1 - }, -/area/station/science/ordnance/testlab) "eXo" = ( /turf/closed/wall/r_wall, /area/station/tcommsat/server) @@ -11574,6 +13300,16 @@ /obj/item/storage/crayons, /turf/open/floor/iron, /area/station/security/prison/workout) +"eXB" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 9 + }, +/obj/item/storage/fancy/candle_box, +/obj/machinery/light_switch/directional/west, +/obj/structure/rack/skeletal, +/obj/machinery/camera/autoname/directional/west, +/turf/open/floor/iron/grimy, +/area/station/service/library) "eXK" = ( /obj/effect/mapping_helpers/broken_floor, /obj/structure/table/wood, @@ -11603,16 +13339,6 @@ }, /turf/open/floor/iron/smooth, /area/station/ai_monitored/turret_protected/aisat/equipment) -"eYn" = ( -/obj/machinery/computer/monitor{ - dir = 1 - }, -/obj/machinery/computer/security/telescreen/minisat{ - dir = 1; - pixel_y = -29 - }, -/turf/open/floor/iron/smooth, -/area/station/ai_monitored/turret_protected/aisat/equipment) "eYp" = ( /obj/machinery/recharge_station, /obj/machinery/camera/motion/directional/east{ @@ -11621,6 +13347,13 @@ }, /turf/open/floor/iron/smooth, /area/station/ai_monitored/turret_protected/aisat/equipment) +"eYB" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/effect/turf_decal/siding/wood/corner, +/turf/open/floor/stone, +/area/station/service/chapel) "eYD" = ( /obj/structure/railing{ dir = 8 @@ -11638,6 +13371,11 @@ }, /turf/open/floor/iron/smooth, /area/station/security/checkpoint/engineering) +"eYH" = ( +/obj/item/kirbyplants/random, +/obj/machinery/camera/autoname/directional/east, +/turf/open/floor/iron, +/area/station/science/lower) "eYY" = ( /obj/structure/window/spawner/directional/west, /obj/structure/window/spawner/directional/east, @@ -11647,23 +13385,36 @@ }, /turf/open/misc/sandy_dirt, /area/station/maintenance/port/lesser) +"eZi" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/neutral/line, +/obj/effect/turf_decal/trimline/neutral/line{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central/aft) +"eZj" = ( +/obj/structure/window/spawner/directional/east, +/turf/open/floor/iron/dark, +/area/station/commons/dorms) "eZt" = ( /obj/effect/spawner/structure/window/reinforced/plasma, /turf/open/floor/plating, /area/station/engineering/engine_smes) -"eZJ" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral/full, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/turf/open/floor/iron/smooth_large, -/area/station/service/bar) "eZM" = ( /obj/structure/cable/layer3, /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/dark/textured, /area/station/ai_monitored/turret_protected/ai) +"fap" = ( +/obj/effect/spawner/structure/window, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/service/bar) "fav" = ( /obj/item/kirbyplants/random/fullysynthetic, /obj/machinery/computer/security/telescreen/entertainment/directional/west, @@ -11771,28 +13522,6 @@ }, /turf/open/misc/sandy_dirt, /area/station/security/tram) -"fcd" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/sign/poster/official/random/directional/north, -/turf/open/floor/iron, -/area/station/hallway/secondary/entry) -"fcn" = ( -/obj/effect/turf_decal/tile/red/opposingcorners, -/obj/effect/turf_decal/tile/blue/opposingcorners{ - dir = 8 - }, -/obj/effect/turf_decal/siding/wood{ - dir = 8 - }, -/obj/item/kirbyplants/random, -/obj/item/storage/box{ - pixel_x = -8; - pixel_y = 15 - }, -/obj/effect/decal/cleanable/dirt, -/obj/structure/extinguisher_cabinet/directional/west, -/turf/open/floor/iron/smooth, -/area/station/service/greenroom) "fcq" = ( /obj/structure/alien/weeds, /turf/open/misc/asteroid, @@ -11816,6 +13545,19 @@ /obj/structure/sign/warning/vacuum/external/directional/north, /turf/open/floor/iron, /area/station/engineering/atmos/space_catwalk) +"fcU" = ( +/obj/structure/window/spawner/directional/south, +/obj/structure/flora/bush/large/style_random{ + pixel_x = -20; + pixel_y = 3 + }, +/obj/structure/flora/bush/generic, +/turf/open/misc/sandy_dirt, +/area/station/commons/fitness/locker_room) +"fcW" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/fore/greater) "fdi" = ( /obj/structure/cable, /obj/effect/turf_decal/trimline/neutral/line{ @@ -11836,6 +13578,14 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/maintenance/starboard/central) +"fdv" = ( +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/south, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/engineering/storage/tech) "fdy" = ( /obj/structure/railing{ dir = 1 @@ -11879,6 +13629,22 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron/smooth, /area/station/engineering/main) +"feL" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 1 + }, +/obj/structure/flora/bush/flowers_pp, +/obj/structure/cable, +/turf/open/floor/grass, +/area/station/service/chapel) +"feR" = ( +/turf/open/floor/carpet, +/area/station/service/library) +"ffi" = ( +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/north, +/turf/open/floor/iron/dark/small, +/area/station/maintenance/central/lesser) "ffp" = ( /obj/structure/closet/firecloset, /obj/effect/spawner/random/maintenance, @@ -11899,15 +13665,6 @@ /obj/structure/sign/poster/official/random/directional/south, /turf/open/floor/iron/dark, /area/station/engineering/atmos) -"ffX" = ( -/obj/effect/turf_decal/delivery, -/obj/machinery/door/poddoor/shutters/preopen{ - dir = 4; - id = "kihall" - }, -/obj/effect/turf_decal/tile/green/diagonal_centre, -/turf/open/floor/iron/diagonal, -/area/station/hallway/primary/central/aft) "fgk" = ( /obj/structure/window/reinforced/spawner/directional/east, /obj/machinery/status_display/door_timer{ @@ -11948,6 +13705,18 @@ }, /turf/open/floor/iron/diagonal, /area/station/engineering/lobby) +"fgT" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 1 + }, +/obj/structure/flora/bush/flowers_br/style_random, +/obj/structure/flora/bush/flowers_pp, +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/north{ + low_power_nightshift_lights = 1 + }, +/turf/open/floor/grass, +/area/station/service/chapel) "fgW" = ( /obj/effect/turf_decal/tile/neutral/fourcorners, /obj/machinery/vending/drugs, @@ -11976,33 +13745,11 @@ }, /turf/open/floor/iron/small, /area/station/security/office) -"fhs" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/hallway/primary/fore) -"fhw" = ( -/obj/structure/table, -/obj/effect/decal/cleanable/dirt, -/obj/item/paper_bin, -/obj/machinery/light/small/directional/south, -/turf/open/floor/iron, -/area/station/commons/storage/art) -"fhC" = ( -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/tile/red/opposingcorners{ - dir = 1 - }, -/obj/structure/chair{ - dir = 1 - }, -/obj/machinery/light_switch/directional/west, -/turf/open/floor/iron/cafeteria, -/area/station/service/cafeteria) +"fhT" = ( +/obj/structure/sink/directional/east, +/obj/structure/mirror/directional/west, +/turf/open/floor/iron/showroomfloor, +/area/station/commons/toilet/auxiliary) "fhX" = ( /obj/structure/table/greyscale, /obj/item/lightreplacer{ @@ -12014,6 +13761,18 @@ }, /turf/open/floor/iron/grimy, /area/station/engineering/main) +"fhZ" = ( +/obj/structure/chair/sofa/bench/right{ + dir = 4 + }, +/obj/item/radio/intercom/directional/south, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/turf/open/floor/iron/white/corner{ + dir = 1 + }, +/area/station/hallway/secondary/entry) "fib" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -12032,6 +13791,10 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/maintenance/starboard/greater) +"fik" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/eighties, +/area/station/service/abandoned_gambling_den/gaming) "fiq" = ( /obj/machinery/computer/atmos_control/nitrous_tank, /turf/open/floor/iron/smooth, @@ -12052,48 +13815,30 @@ /obj/structure/railing, /turf/open/space/basic, /area/station/engineering/atmos/space_catwalk) -"fiW" = ( -/obj/effect/turf_decal/siding/dark_red/corner{ - dir = 8 - }, -/obj/structure/secure_safe/directional/north{ - name = "armory safe A" +"fiK" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/sorting/mail/flip{ + dir = 2 }, /obj/effect/decal/cleanable/dirt, -/obj/machinery/camera/autoname/directional/north, -/turf/open/floor/iron/dark/small, -/area/station/ai_monitored/security/armory) -"fjh" = ( -/obj/effect/decal/cleanable/dirt, +/obj/effect/mapping_helpers/mail_sorting/medbay/general, +/obj/machinery/duct, /turf/open/floor/iron, -/area/station/hallway/secondary/entry) -"fjn" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 +/area/station/maintenance/department/medical/central) +"fjp" = ( +/obj/machinery/door/airlock{ + id_tag = "Cabin1"; + name = "Cabin 1" }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/carpet/orange, +/area/station/commons/dorms) +"fjq" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/airalarm/directional/north, -/turf/open/floor/iron/white/corner{ - dir = 1 - }, -/area/station/hallway/secondary/dock) -"fju" = ( -/obj/structure/closet/emcloset, -/obj/effect/turf_decal/bot, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/turf_decal/tile/neutral, /turf/open/floor/iron, -/area/station/hallway/primary/port) -"fjF" = ( -/obj/effect/turf_decal/bot_red, -/obj/structure/sign/poster/official/random/directional/north, -/obj/structure/reagent_dispensers/cooking_oil, -/turf/open/floor/iron/freezer, -/area/station/service/kitchen/coldroom) +/area/station/hallway/primary/central/aft) "fjL" = ( /obj/effect/turf_decal/siding/wood{ dir = 9 @@ -12104,12 +13849,10 @@ /obj/machinery/light/cold/directional/north, /turf/open/floor/wood/tile, /area/station/science/lower) -"fjN" = ( -/obj/effect/mapping_helpers/broken_floor, -/obj/structure/window/reinforced/spawner/directional/north, -/obj/machinery/door/window/survival_pod/left/directional/east, -/turf/open/floor/iron, -/area/station/maintenance/fore/greater) +"fjQ" = ( +/obj/structure/chair/stool/directional/east, +/turf/open/floor/carpet/blue, +/area/station/commons/dorms) "fjV" = ( /obj/item/radio/intercom/directional/south{ broadcasting = 1; @@ -12123,6 +13866,12 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/ai) +"fkd" = ( +/obj/structure/chair/stool/directional/south, +/obj/machinery/holopad, +/obj/effect/landmark/start/cargo_technician, +/turf/open/floor/iron, +/area/station/cargo/sorting) "fkj" = ( /obj/machinery/porta_turret/ai{ dir = 4 @@ -12139,18 +13888,49 @@ /obj/item/mod/module/signlang_radio, /turf/open/floor/iron/small, /area/station/medical/storage) -"fky" = ( -/obj/machinery/atmospherics/pipe/smart/simple/purple/visible{ +"fkF" = ( +/obj/structure/table/wood, +/obj/item/pen/red{ + pixel_x = 3; + pixel_y = 12 + }, +/obj/item/pen/blue{ + pixel_x = -6; + pixel_y = 12 + }, +/turf/open/floor/carpet, +/area/station/service/library) +"fkN" = ( +/obj/structure/mannequin/plastic, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/turf/open/floor/plating, +/area/station/cargo/boutique) +"fkS" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/stripes/red/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/red/line, +/obj/structure/disposalpipe/segment{ dir = 5 }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/station/science/ordnance) +/turf/open/floor/iron/small, +/area/station/hallway/primary/central/fore) "fkT" = ( /obj/effect/turf_decal/sand/plating, /obj/structure/alien/weeds, /turf/open/floor/plating, /area/station/maintenance/starboard/greater) +"fla" = ( +/obj/structure/closet/emcloset, +/obj/effect/turf_decal/siding/white{ + dir = 4 + }, +/turf/open/floor/iron/dark/small, +/area/station/maintenance/aft) "flo" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -12164,15 +13944,18 @@ }, /turf/open/floor/iron/dark, /area/station/security/interrogation) -"fls" = ( -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/obj/effect/mapping_helpers/broken_floor, -/obj/effect/decal/cleanable/glass/plastitanium, +"flw" = ( +/obj/effect/turf_decal/weather/dirt, +/obj/structure/flora/bush/flowers_yw/style_3, +/turf/open/floor/grass, +/area/station/service/chapel) +"flD" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/plating, -/area/station/maintenance/fore/greater) +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/turf/open/floor/iron/smooth, +/area/station/command/gateway) "flE" = ( /obj/machinery/camera/directional/west{ c_tag = "Engineering - Canister Storage" @@ -12191,6 +13974,14 @@ /obj/item/flashlight/lantern, /turf/open/floor/plating/rust, /area/station/maintenance/starboard/greater) +"fme" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 1 + }, +/obj/structure/extinguisher_cabinet/directional/north, +/obj/structure/flora/bush/sparsegrass, +/turf/open/floor/grass, +/area/station/service/chapel) "fmf" = ( /obj/effect/turf_decal/tile/blue, /obj/effect/landmark/event_spawn, @@ -12234,10 +14025,6 @@ /obj/effect/landmark/start/depsec/science, /turf/open/floor/iron, /area/station/security/checkpoint/science) -"fnm" = ( -/obj/structure/filingcabinet/chestdrawer, -/turf/open/floor/iron/grimy, -/area/station/engineering/main) "fnw" = ( /obj/structure/chair{ pixel_y = -2 @@ -12296,27 +14083,18 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central/fore) +"fot" = ( +/obj/effect/turf_decal/trimline/white/line, +/obj/effect/turf_decal/trimline/white/mid_joiner, +/obj/item/radio/intercom/directional/south, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/wood, +/area/station/commons/fitness/recreation) "fov" = ( /obj/effect/turf_decal/tile/dark_red/opposingcorners, /obj/machinery/vending/security, /turf/open/floor/iron, /area/station/security/lockers) -"foI" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/window/reinforced/spawner/directional/east, -/obj/machinery/button/door/directional/north{ - id = "Xenolab"; - name = "Test Chamber Blast Doors"; - pixel_x = 26; - pixel_y = -2; - req_access = list("xenobiology") - }, -/obj/machinery/atmospherics/components/binary/pump, -/turf/open/floor/iron/white/side{ - dir = 8 - }, -/area/station/science/xenobiology) "foL" = ( /obj/structure/sign/poster/official/random/directional/north, /obj/structure/lattice, @@ -12337,14 +14115,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/fore) -"fpl" = ( -/obj/structure/cable, -/obj/effect/turf_decal/siding/dark_red{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark/small, -/area/station/ai_monitored/security/armory) "fpq" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -12379,6 +14149,16 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/catwalk_floor, /area/station/maintenance/disposal/incinerator) +"fpN" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/port/greater) "fpO" = ( /turf/closed/wall/r_wall, /area/station/command/heads_quarters/ce) @@ -12397,22 +14177,18 @@ /obj/structure/cable, /turf/open/floor/iron/white/side, /area/station/science/research) -"fqL" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/trimline/neutral/line{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/neutral/line{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/central/fore) "fqQ" = ( /obj/effect/turf_decal/stripes/corner, /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/plating, /area/station/engineering/supermatter/room) +"fqT" = ( +/obj/machinery/computer/slot_machine{ + pixel_y = 2 + }, +/obj/machinery/computer/security/telescreen/entertainment/directional/west, +/turf/open/floor/carpet/lone, +/area/station/service/abandoned_gambling_den) "frf" = ( /obj/structure/table/glass, /obj/item/defibrillator/loaded{ @@ -12421,13 +14197,33 @@ /obj/item/defibrillator/loaded, /turf/open/floor/iron/white, /area/station/medical/treatment_center) -"frg" = ( +"fri" = ( +/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, /obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/obj/effect/mapping_helpers/broken_floor, -/obj/machinery/power/apc/auto_name/directional/south, +/obj/machinery/door/airlock{ + id_tag = "commiss2"; + name = "Commissary" + }, /turf/open/floor/plating, -/area/station/maintenance/department/science/xenobiology) +/area/station/maintenance/central/greater) +"frm" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/stripes/red/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/red/line{ + dir = 8 + }, +/obj/structure/cable, +/turf/open/floor/iron/small, +/area/station/hallway/primary/central/fore) +"frC" = ( +/obj/effect/turf_decal/tile/neutral/full, +/turf/open/floor/iron/dark/smooth_large, +/area/station/maintenance/central/lesser) "frI" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/turf_decal/tile/neutral{ @@ -12441,6 +14237,41 @@ /obj/machinery/door/window/brigdoor/right/directional/north, /turf/open/floor/iron/textured_large, /area/station/security/checkpoint/customs) +"fsk" = ( +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/obj/structure/chair{ + dir = 1; + pixel_y = -2 + }, +/obj/machinery/duct, +/turf/open/floor/iron, +/area/station/maintenance/department/medical/central) +"fsl" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 9 + }, +/turf/open/floor/wood, +/area/station/service/abandoned_gambling_den) +"fsq" = ( +/obj/structure/table/wood, +/obj/machinery/light/small/dim/directional/north, +/obj/item/reagent_containers/cup/glass/bottle/vodka{ + pixel_y = 18; + pixel_x = -8 + }, +/obj/item/reagent_containers/cup/glass/bottle/rum{ + pixel_y = 21; + pixel_x = 3 + }, +/obj/item/reagent_containers/cup/glass/bottle/whiskey{ + pixel_y = 11 + }, +/obj/item/reagent_containers/cup/glass/bottle/gin{ + pixel_x = -6 + }, +/turf/open/floor/stone, +/area/station/service/abandoned_gambling_den) "fst" = ( /obj/effect/turf_decal/tile/yellow/anticorner/contrasted, /obj/effect/mapping_helpers/broken_floor, @@ -12486,19 +14317,6 @@ /obj/structure/sign/poster/official/random/directional/south, /turf/open/floor/iron, /area/station/engineering/atmos) -"ftm" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/siding/dark_red{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/stone, -/area/station/command/heads_quarters/hos) "fts" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -12564,13 +14382,17 @@ /obj/effect/mapping_helpers/airlock/access/all/command/minisat, /turf/open/floor/circuit/red, /area/station/ai_monitored/turret_protected/ai) -"fuz" = ( -/obj/machinery/light/small/directional/east, -/obj/machinery/power/shieldwallgen/xenobiologyaccess, -/obj/effect/mapping_helpers/broken_floor, -/obj/structure/cable/multilayer, -/turf/open/floor/plating, -/area/station/science/xenobiology) +"fuu" = ( +/obj/effect/turf_decal/tile/dark_red/half/contrasted{ + dir = 1 + }, +/obj/machinery/light/cold/directional/south, +/obj/structure/disposalpipe/sorting/mail/flip{ + dir = 4 + }, +/obj/effect/mapping_helpers/mail_sorting/security/detectives_office, +/turf/open/floor/iron, +/area/station/security/brig/entrance) "fuB" = ( /obj/structure/railing{ dir = 4 @@ -12592,6 +14414,12 @@ /obj/machinery/door/poddoor/incinerator_atmos_aux, /turf/open/floor/engine/airless, /area/station/maintenance/disposal/incinerator) +"fuD" = ( +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/turf/open/floor/iron/white/small, +/area/station/service/janitor) "fuL" = ( /obj/docking_port/stationary/escape_pod{ dir = 2 @@ -12608,6 +14436,14 @@ }, /turf/open/floor/iron, /area/station/engineering/supermatter/room) +"fuV" = ( +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 1 + }, +/obj/structure/chair, +/obj/effect/landmark/start/hangover, +/turf/open/floor/iron, +/area/station/commons/storage/tools) "fvh" = ( /obj/effect/turf_decal/tile/neutral/fourcorners, /obj/structure/disposaloutlet{ @@ -12616,6 +14452,15 @@ /obj/structure/disposalpipe/trunk, /turf/open/floor/iron, /area/station/hallway/primary/port) +"fvj" = ( +/obj/structure/window/spawner/directional/south, +/obj/machinery/light/small/directional/north, +/obj/structure/flora/bush/flowers_yw/style_random, +/obj/structure/flora/rock/pile/style_random{ + pixel_x = 32 + }, +/turf/open/misc/sandy_dirt, +/area/station/commons/fitness/locker_room) "fvs" = ( /obj/machinery/atmospherics/pipe/smart/simple/cyan/hidden, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -12635,13 +14480,6 @@ /obj/machinery/newscaster/directional/south, /turf/open/floor/stone, /area/station/command/heads_quarters/hos) -"fvH" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/table, -/obj/item/electropack, -/obj/machinery/light/small/directional/east, -/turf/open/floor/engine, -/area/station/science/xenobiology) "fvL" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, @@ -12663,11 +14501,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/aft) -"fwk" = ( -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/hallway/secondary/dock) "fwF" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment, @@ -12675,13 +14508,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/medical/medbay/lobby) -"fwI" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 10 - }, -/turf/open/floor/plating, -/area/station/maintenance/central/lesser) "fwJ" = ( /obj/effect/turf_decal/tile/blue/fourcorners, /obj/machinery/holopad, @@ -12712,6 +14538,16 @@ /obj/effect/turf_decal/siding/wood, /turf/open/floor/wood, /area/station/hallway/secondary/entry) +"fxa" = ( +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/maintenance/department/medical/central) +"fxi" = ( +/turf/open/floor/iron/dark/small, +/area/station/science/xenobiology) "fxF" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -12723,10 +14559,6 @@ /obj/structure/table, /turf/open/floor/iron/kitchen/small, /area/station/maintenance/aft) -"fxO" = ( -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/maintenance/hallway/abandoned_recreation) "fxV" = ( /obj/machinery/atmospherics/components/binary/pump{ dir = 8; @@ -12735,6 +14567,15 @@ /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/iron/small, /area/station/engineering/atmos) +"fxW" = ( +/obj/item/kirbyplants/random, +/obj/structure/extinguisher_cabinet/directional/south, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/effect/turf_decal/siding/wood, +/turf/open/floor/stone, +/area/station/service/bar) "fyo" = ( /obj/structure/table, /obj/machinery/light/small/directional/east, @@ -12778,6 +14619,32 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/fore/lesser) +"fyL" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/structure/window/reinforced/spawner/directional/south, +/obj/effect/turf_decal/siding/purple{ + dir = 1 + }, +/obj/effect/turf_decal/siding/purple, +/obj/item/storage/box/bodybags{ + pixel_x = -4; + pixel_y = 9 + }, +/obj/machinery/light_switch/directional/north, +/turf/open/floor/iron/dark, +/area/station/science/genetics) +"fyW" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/trimline/neutral/line, +/obj/effect/turf_decal/trimline/neutral/line{ + dir = 1 + }, +/obj/structure/disposalpipe/segment, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/port) "fyZ" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -12793,11 +14660,6 @@ /obj/machinery/power/apc/auto_name/directional/north, /turf/open/floor/plating, /area/station/ai_monitored/turret_protected/aisat/maint) -"fzf" = ( -/obj/machinery/vending/boozeomat, -/obj/machinery/light/cold/directional/east, -/turf/closed/wall, -/area/station/service/bar) "fzq" = ( /obj/structure/closet/crate/trashcart/filled, /turf/open/floor/plating, @@ -12814,6 +14676,12 @@ }, /turf/open/floor/iron/white, /area/station/medical/virology) +"fzw" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 10 + }, +/turf/open/floor/stone, +/area/station/service/bar) "fzx" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -12822,6 +14690,26 @@ /obj/effect/spawner/random/trash, /turf/open/floor/plating/rust, /area/station/ai_monitored/turret_protected/aisat/maint) +"fzI" = ( +/obj/machinery/door/airlock{ + id_tag = "Cabin3"; + name = "Cabin 3" + }, +/turf/open/floor/carpet/blue, +/area/station/commons/dorms) +"fzT" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/plaque{ + icon_state = "L6"; + pixel_y = -15 + }, +/obj/effect/turf_decal/trimline/neutral/line, +/obj/effect/turf_decal/trimline/neutral/line{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central/aft) "fAr" = ( /obj/structure/window/reinforced/spawner/directional/south, /obj/structure/barricade/wooden/crude, @@ -12862,11 +14750,6 @@ /obj/effect/mapping_helpers/mail_sorting/science/experimentor_lab, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) -"fAS" = ( -/obj/structure/chair/stool/directional/south, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/security/prison/workout) "fAY" = ( /obj/structure/table/reinforced, /obj/effect/turf_decal/tile/blue/full, @@ -12901,14 +14784,13 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/maintenance/starboard/greater) -"fBq" = ( -/obj/machinery/atmospherics/components/binary/valve/digital{ - dir = 4 +"fBs" = ( +/obj/effect/turf_decal/siding/wideplating/dark{ + dir = 1 }, /obj/effect/decal/cleanable/dirt, -/obj/effect/landmark/event_spawn, -/turf/open/floor/iron/white/small, -/area/station/science/ordnance/storage) +/turf/open/floor/iron/small, +/area/station/commons/fitness/locker_room) "fBw" = ( /obj/structure/cable, /obj/effect/decal/cleanable/dirt, @@ -12921,6 +14803,26 @@ /obj/effect/spawner/random/maintenance, /turf/open/floor/plating, /area/station/maintenance/department/engine) +"fBB" = ( +/obj/structure/table/wood, +/obj/item/plate, +/obj/item/food/cheesynachos{ + pixel_y = 2 + }, +/turf/open/floor/wood/large, +/area/station/service/bar) +"fBN" = ( +/obj/structure/flora/bush/flowers_yw/style_3{ + pixel_x = 3; + pixel_y = 2 + }, +/obj/machinery/light/floor, +/obj/effect/light_emitter/fake_outdoors, +/obj/effect/turf_decal/siding/wood{ + dir = 10 + }, +/turf/open/floor/grass/Airless, +/area/station/hallway/primary/central/aft) "fBO" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/tank_holder/extinguisher, @@ -12975,12 +14877,6 @@ }, /turf/open/floor/iron/dark, /area/station/medical/chemistry) -"fCy" = ( -/obj/structure/rack, -/obj/effect/spawner/random/techstorage/security_all, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/iron, -/area/station/engineering/storage/tech) "fCS" = ( /obj/structure/window/reinforced/spawner/directional/east, /obj/machinery/airalarm/directional/east, @@ -13021,14 +14917,6 @@ }, /turf/open/floor/plating, /area/station/ai_monitored/turret_protected/aisat/maint) -"fDp" = ( -/obj/effect/turf_decal/stripes/line, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/machinery/light/small/directional/south, -/turf/open/floor/plating, -/area/station/hallway/secondary/service) "fDI" = ( /turf/open/floor/iron, /area/station/hallway/primary/aft) @@ -13138,9 +15026,24 @@ /obj/machinery/power/apc/auto_name/directional/east, /turf/open/floor/iron/smooth, /area/station/maintenance/disposal/incinerator) +"fEw" = ( +/obj/effect/turf_decal/tile/neutral/full, +/obj/structure/rack, +/obj/item/weldingtool/mini, +/obj/item/tank/internals/emergency_oxygen/empty, +/obj/item/cigarette/rollie, +/turf/open/floor/iron/dark/smooth_large, +/area/station/maintenance/central/lesser) "fEC" = ( /turf/closed/wall, /area/station/maintenance/port/lesser) +"fEF" = ( +/obj/effect/turf_decal/siding/thinplating{ + dir = 9 + }, +/obj/structure/cable, +/turf/open/floor/eighties, +/area/station/hallway/primary/central/fore) "fEU" = ( /obj/structure/table, /obj/item/multitool{ @@ -13153,16 +15056,14 @@ }, /turf/open/floor/iron/dark, /area/station/maintenance/department/engine/atmos) -"fEV" = ( -/obj/machinery/porta_turret/ai, -/obj/machinery/computer/security/telescreen/minisat{ - dir = 8; - pixel_x = 28 +"fEX" = ( +/obj/structure/table/wood, +/obj/item/flashlight/lamp/green{ + pixel_x = 1; + pixel_y = 7 }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/status_display/ai/directional/north, -/turf/open/floor/iron/smooth, -/area/station/ai_monitored/turret_protected/aisat_interior) +/turf/open/floor/carpet, +/area/station/service/library) "fFe" = ( /obj/structure/lattice/catwalk, /obj/structure/railing{ @@ -13264,6 +15165,21 @@ }, /turf/open/floor/plating/rust, /area/station/ai_monitored/turret_protected/aisat/maint) +"fGF" = ( +/obj/effect/spawner/random/medical/two_percent_xeno_egg_spawner, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/engine/xenobio, +/area/station/science/xenobiology) +"fGT" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/machinery/vending/cigarette, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/turf/open/floor/iron/white/side, +/area/station/hallway/primary/central/aft) "fGU" = ( /obj/effect/turf_decal/stripes/red/line{ dir = 1 @@ -13274,12 +15190,13 @@ /obj/structure/sign/warning/pods/directional/west, /turf/open/floor/iron/dark, /area/station/engineering/hallway) -"fHb" = ( -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron, -/area/station/hallway/secondary/spacebridge) +"fGW" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 5 + }, +/obj/structure/flora/bush/large/style_random, +/turf/open/floor/grass, +/area/station/service/chapel) "fHf" = ( /obj/structure/bed/maint, /obj/effect/spawner/random/maintenance, @@ -13303,6 +15220,20 @@ /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/iron/smooth_large, /area/station/engineering/storage_shared) +"fHK" = ( +/obj/structure/toilet{ + dir = 4 + }, +/obj/machinery/button/door/directional/north{ + name = "Lock Control"; + id = "Toilet2"; + specialfunctions = 4; + normaldoorcontrol = 1 + }, +/obj/machinery/light/small/directional/west, +/obj/structure/sign/poster/contraband/random/directional/west, +/turf/open/floor/iron/white/small, +/area/station/commons/toilet/restrooms) "fHN" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -13328,6 +15259,25 @@ /obj/machinery/airalarm/directional/west, /turf/open/floor/iron/grimy, /area/station/science/cubicle) +"fIj" = ( +/turf/open/floor/iron/white/side, +/area/station/hallway/primary/central/aft) +"fIl" = ( +/obj/structure/chair/wood{ + dir = 8 + }, +/turf/open/floor/wood/tile, +/area/station/service/bar) +"fIn" = ( +/obj/machinery/atmospherics/pipe/smart/simple/general/visible{ + dir = 4 + }, +/turf/open/floor/engine/xenobio, +/area/station/science/xenobiology) +"fIw" = ( +/obj/effect/landmark/navigate_destination/dockescpod, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) "fJl" = ( /obj/effect/turf_decal/stripes/line{ dir = 9 @@ -13350,8 +15300,9 @@ /turf/open/floor/catwalk_floor/iron_smooth, /area/station/ai_monitored/turret_protected/aisat/teleporter) "fJt" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/yellow/visible{ - dir = 4 +/obj/machinery/atmospherics/components/unary/thermomachine/heater/on{ + dir = 8; + initialize_directions = 8 }, /turf/open/floor/iron, /area/station/engineering/atmos) @@ -13398,12 +15349,22 @@ dir = 1 }, /area/station/hallway/primary/aft) +"fKa" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/hallway/secondary/dock) "fKc" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, /turf/open/floor/iron/smooth, /area/station/ai_monitored/turret_protected/aisat_interior) +"fKd" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/holopad, +/turf/open/floor/iron, +/area/station/science/ordnance/testlab) "fKl" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -13412,6 +15373,19 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/smooth, /area/station/ai_monitored/turret_protected/aisat_interior) +"fKr" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/security/glass{ + id_tag = "outerbrig"; + name = "Brig" + }, +/obj/effect/mapping_helpers/airlock/access/all/security/entrance, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "sci-entrance" + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron/textured_half, +/area/station/security/brig/entrance) "fKx" = ( /obj/structure/transit_tube/horizontal, /obj/structure/lattice/catwalk, @@ -13428,13 +15402,21 @@ }, /turf/open/floor/iron, /area/station/engineering/atmos/pumproom) -"fKO" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/tile/neutral, -/obj/structure/sign/departments/court/directional/east, +"fKN" = ( +/obj/effect/landmark/event_spawn, +/obj/machinery/computer/security/telescreen/test_chamber/directional/west, +/turf/open/floor/iron/white/side{ + dir = 4 + }, +/area/station/science/xenobiology) +"fKP" = ( +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/obj/machinery/disposal/bin, +/obj/effect/turf_decal/bot, /turf/open/floor/iron, -/area/station/hallway/primary/central/fore) +/area/station/science/lower) "fKR" = ( /obj/effect/turf_decal/tile/brown/opposingcorners, /obj/machinery/disposal/bin, @@ -13454,14 +15436,12 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/smooth, /area/station/ai_monitored/turret_protected/aisat_interior) -"fLi" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment, +"fLg" = ( +/obj/structure/table/wood, /obj/effect/decal/cleanable/dirt, -/obj/machinery/duct, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/obj/item/assembly/mousetrap/armed, /turf/open/floor/stone, -/area/station/service/bar/backroom) +/area/station/service/abandoned_gambling_den) "fLj" = ( /obj/item/clothing/head/cone{ pixel_x = -12; @@ -13556,6 +15536,35 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/fore) +"fLF" = ( +/obj/machinery/navbeacon{ + codes_txt = "delivery;dir=8"; + location = "QM #2" + }, +/obj/effect/turf_decal/delivery, +/obj/machinery/camera/autoname/directional/south, +/obj/machinery/light/small/directional/south, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/cargo/storage) +"fLI" = ( +/obj/effect/spawner/random/structure/crate, +/turf/open/floor/iron/dark/small, +/area/station/maintenance/aft) +"fLJ" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/dark_red/fourcorners, +/obj/machinery/holopad, +/obj/effect/landmark/event_spawn, +/turf/open/floor/iron, +/area/station/security/brig/entrance) "fLK" = ( /obj/structure/disposalpipe/segment{ dir = 9 @@ -13568,18 +15577,21 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/security) -"fMj" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/trimline/neutral/line{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/neutral/line{ +"fLL" = ( +/obj/structure/disposalpipe/segment{ dir = 4 }, +/obj/structure/cable, /turf/open/floor/iron, -/area/station/hallway/primary/central/fore) +/area/station/maintenance/hallway/abandoned_command) +"fLR" = ( +/obj/structure/disposalpipe/segment, +/turf/closed/wall, +/area/station/commons/fitness/recreation/entertainment) +"fMg" = ( +/obj/structure/chair/stool/directional/north, +/turf/open/floor/iron/smooth, +/area/station/maintenance/solars/starboard/fore) "fMs" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -13598,11 +15610,6 @@ /obj/effect/mapping_helpers/airlock/access/any/security/maintenance, /turf/open/floor/iron, /area/station/maintenance/port/aft) -"fMx" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/smooth, -/area/station/hallway/secondary/command) "fMA" = ( /obj/machinery/disposal/bin, /obj/machinery/light/cold/dim/directional/north, @@ -13625,9 +15632,6 @@ /obj/effect/turf_decal/stripes/box, /turf/open/floor/mineral/titanium, /area/station/command/heads_quarters/ce) -"fMD" = ( -/turf/open/floor/iron/white/small, -/area/station/service/hydroponics) "fMP" = ( /obj/structure/table/reinforced/titaniumglass, /obj/item/binoculars{ @@ -13654,6 +15658,10 @@ }, /turf/open/floor/iron/cafeteria, /area/station/hallway/secondary/exit/departure_lounge) +"fMX" = ( +/obj/effect/turf_decal/siding/wood/corner, +/turf/open/floor/stone, +/area/station/service/chapel) "fNb" = ( /obj/effect/turf_decal/arrows{ dir = 8 @@ -13681,6 +15689,15 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/starboard/greater) +"fNC" = ( +/obj/structure/chair/sofa/bench/right{ + dir = 8 + }, +/obj/effect/turf_decal/tile/blue, +/turf/open/floor/iron/dark/side{ + dir = 4 + }, +/area/station/hallway/primary/central/fore) "fNF" = ( /obj/machinery/atmospherics/pipe/smart/simple/green/visible{ dir = 4 @@ -13715,6 +15732,32 @@ /obj/effect/turf_decal/bot_white, /turf/open/floor/iron/small, /area/station/medical/storage) +"fNW" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/port) +"fNZ" = ( +/obj/structure/cable, +/obj/machinery/door/airlock{ + name = "Maintenance" + }, +/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/plating, +/area/station/maintenance/central/lesser) "fOg" = ( /obj/effect/spawner/random/maintenance, /obj/effect/turf_decal/sand/plating, @@ -13727,11 +15770,31 @@ }, /turf/open/floor/iron/smooth, /area/station/ai_monitored/turret_protected/aisat_interior) +"fOo" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/central/greater) +"fOJ" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark/herringbone, +/area/station/ai_monitored/command/nuke_storage) "fOQ" = ( /obj/structure/cable, /obj/structure/window/reinforced/spawner/directional/north, /turf/open/floor/iron, /area/station/security/prison/workout) +"fOW" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral, +/turf/open/floor/iron, +/area/station/hallway/primary/central/aft) "fPb" = ( /obj/effect/spawner/structure/window/reinforced/plasma, /turf/open/floor/engine, @@ -13742,14 +15805,6 @@ /obj/structure/cable/layer3, /turf/open/floor/iron/smooth, /area/station/ai_monitored/turret_protected/aisat_interior) -"fPA" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/station/science/genetics) "fPO" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 8 @@ -13765,6 +15820,21 @@ /obj/structure/alien/weeds, /turf/open/floor/plating, /area/station/maintenance/starboard/greater) +"fPV" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/obj/machinery/airalarm/directional/north, +/turf/open/floor/iron/white/corner{ + dir = 1 + }, +/area/station/hallway/secondary/dock) "fPY" = ( /obj/effect/turf_decal/siding/yellow/corner{ dir = 4 @@ -13779,14 +15849,19 @@ /obj/structure/cable, /turf/open/floor/iron/diagonal, /area/station/engineering/lobby) -"fQi" = ( -/obj/structure/chair/sofa/bench/left{ +"fQd" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment, +/obj/structure/window/reinforced/spawner/directional/north, +/obj/effect/turf_decal/tile/neutral/opposingcorners{ dir = 1 }, -/obj/item/radio/intercom/directional/south, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/hallway/secondary/recreation) +/obj/effect/turf_decal/siding/thinplating_new{ + dir = 4 + }, +/turf/open/floor/iron/small, +/area/station/hallway/secondary/service) "fQA" = ( /obj/effect/spawner/random/structure/chair_maintenance{ dir = 8 @@ -13795,13 +15870,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/maintenance/starboard/greater) -"fQG" = ( -/obj/structure/disposalpipe/segment, -/obj/effect/mapping_helpers/broken_floor, -/obj/effect/decal/cleanable/dirt, -/obj/structure/extinguisher_cabinet/directional/east, -/turf/open/floor/iron, -/area/station/hallway/secondary/recreation) "fQL" = ( /obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden{ dir = 8 @@ -13816,6 +15884,14 @@ /obj/machinery/firealarm/directional/east, /turf/open/floor/iron/smooth, /area/station/ai_monitored/turret_protected/aisat_interior) +"fRl" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/siding/purple{ + dir = 8 + }, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/science/genetics) "fRm" = ( /obj/structure/lattice/catwalk, /obj/structure/railing, @@ -13872,12 +15948,27 @@ /obj/machinery/airalarm/directional/west, /turf/open/floor/iron/white, /area/station/medical/medbay/central) -"fRZ" = ( +"fRV" = ( +/obj/structure/disposalpipe/segment, /obj/structure/cable, -/obj/effect/decal/cleanable/dirt, +/obj/machinery/power/apc/auto_name/directional/west, +/turf/open/floor/iron, +/area/station/commons/fitness/locker_room) +"fRX" = ( +/obj/machinery/door/airlock/public/glass{ + name = "Study" + }, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/plating, -/area/station/maintenance/fore/greater) +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/siding/wood/end, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/turf/open/floor/wood/parquet, +/area/station/service/library) "fSe" = ( /turf/closed/wall/rust, /area/station/cargo/miningfoundry) @@ -13886,14 +15977,6 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/security/prison) -"fSq" = ( -/obj/effect/mapping_helpers/broken_floor, -/obj/structure/rack, -/obj/item/scalpel, -/obj/item/wirecutters, -/obj/machinery/light/small/broken/directional/west, -/turf/open/floor/plating, -/area/station/maintenance/central/greater) "fSx" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -13909,15 +15992,6 @@ /obj/effect/spawner/random/maintenance, /turf/open/floor/plating, /area/station/maintenance/aft) -"fSE" = ( -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/siding/dark_red{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/turf/open/floor/stone, -/area/station/command/heads_quarters/hos) "fSG" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -13925,6 +15999,11 @@ /obj/effect/turf_decal/siding/wood, /turf/open/floor/iron/white/small, /area/station/medical/psychology) +"fSU" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/camera/autoname/directional/west, +/turf/open/floor/iron, +/area/station/commons/fitness/locker_room) "fSX" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -13992,12 +16071,6 @@ /obj/effect/spawner/random/structure/girder, /turf/open/floor/plating, /area/station/ai_monitored/turret_protected/aisat/maint) -"fUj" = ( -/obj/structure/sign/poster/official/random/directional/north, -/obj/effect/turf_decal/tile/neutral/opposingcorners, -/obj/machinery/light/small/directional/north, -/turf/open/floor/iron, -/area/station/hallway/secondary/spacebridge) "fUo" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -14012,6 +16085,12 @@ /obj/effect/mapping_helpers/airlock/access/all/science/general, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) +"fUC" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/neutral, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/station/hallway/primary/central/fore) "fUI" = ( /obj/structure/disposalpipe/segment{ dir = 5 @@ -14065,6 +16144,14 @@ }, /turf/open/floor/plating, /area/station/construction/mining/aux_base) +"fVl" = ( +/obj/structure/table/wood, +/obj/item/storage/fancy/cigarettes/cigars/cohiba{ + pixel_x = 2; + pixel_y = 10 + }, +/turf/open/floor/wood/large, +/area/station/service/bar) "fVy" = ( /obj/effect/turf_decal/tile/purple/opposingcorners, /obj/effect/turf_decal/siding/green{ @@ -14078,10 +16165,20 @@ /obj/structure/sign/poster/official/random/directional/west, /turf/open/floor/iron/small, /area/station/security/checkpoint/engineering) +"fVF" = ( +/obj/effect/turf_decal/weather/dirt, +/obj/structure/flora/bush/sparsegrass, +/turf/open/floor/grass, +/area/station/service/chapel) "fVG" = ( /obj/structure/cable, /turf/open/floor/iron/smooth, /area/station/security/checkpoint/customs) +"fVM" = ( +/obj/structure/extinguisher_cabinet/directional/west, +/obj/effect/turf_decal/tile/neutral, +/turf/open/floor/iron, +/area/station/hallway/primary/central/aft) "fVU" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -14089,15 +16186,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/ai_monitored/turret_protected/aisat/maint) -"fVV" = ( -/obj/structure/sink/kitchen/directional/west, -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/green{ - dir = 4 - }, -/obj/machinery/camera/directional/east, -/turf/open/floor/iron, -/area/station/service/hydroponics) "fWe" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -14112,6 +16200,14 @@ dir = 8 }, /area/station/engineering/supermatter/room) +"fWi" = ( +/obj/effect/turf_decal/siding/wideplating/dark/corner{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/commons/fitness/locker_room) "fWr" = ( /obj/structure/closet/crate, /obj/structure/barricade/wooden/crude, @@ -14123,16 +16219,6 @@ /obj/item/kirbyplants/random, /turf/open/floor/catwalk_floor/iron_smooth, /area/station/maintenance/port/aft) -"fWw" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/dark_red/half/contrasted, -/obj/machinery/computer/security/telescreen/interrogation{ - pixel_y = 29 - }, -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/security) "fWJ" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, @@ -14143,13 +16229,6 @@ /obj/machinery/light/small/directional/north, /turf/open/floor/iron, /area/station/engineering/storage/tech) -"fWW" = ( -/obj/effect/mapping_helpers/broken_floor, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron, -/area/station/maintenance/department/medical/central) "fXe" = ( /obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden{ dir = 4 @@ -14241,10 +16320,6 @@ /obj/machinery/atmospherics/components/binary/valve, /turf/open/floor/iron/smooth, /area/station/maintenance/disposal/incinerator) -"fYp" = ( -/obj/effect/landmark/navigate_destination/vault, -/turf/open/floor/glass, -/area/station/hallway/secondary/spacebridge) "fYr" = ( /obj/structure/table, /obj/item/extinguisher/empty, @@ -14252,28 +16327,22 @@ /obj/item/radio/intercom/directional/east, /turf/open/floor/iron/dark, /area/station/maintenance/department/engine/atmos) +"fYH" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/herringbone, +/area/station/commons/dorms) +"fYJ" = ( +/obj/structure/table/wood, +/obj/item/food/lizard_fries, +/turf/open/floor/wood/large, +/area/station/service/bar) "fYU" = ( /obj/effect/spawner/random/structure/crate_loot, /obj/item/pickaxe, /obj/effect/spawner/random/maintenance, /turf/open/misc/asteroid, /area/station/maintenance/department/engine/atmos) -"fYX" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/door/firedoor, -/obj/effect/mapping_helpers/airlock/access/all/security/armory, -/obj/machinery/door/airlock/security{ - name = "Warden's Office" - }, -/turf/open/floor/iron/textured_half{ - dir = 8 - }, -/area/station/security/warden) "fZp" = ( /obj/effect/turf_decal/siding/wood{ dir = 4 @@ -14285,16 +16354,23 @@ /obj/item/radio/intercom/directional/east, /turf/open/floor/iron/grimy, /area/station/tcommsat/server) -"fZu" = ( -/obj/effect/turf_decal/tile/blue, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 +"fZG" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/simple/purple/visible{ + dir = 4 }, -/turf/open/floor/iron/white/corner{ - dir = 8 +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/white/small, +/area/station/science/ordnance/storage) +"fZK" = ( +/obj/structure/table/wood, +/obj/machinery/computer/libraryconsole/bookmanagement{ + dir = 1; + pixel_y = 5 }, -/area/station/hallway/secondary/dock) +/turf/open/floor/carpet, +/area/station/service/library) "fZL" = ( /obj/effect/turf_decal/stripes/line{ dir = 6 @@ -14312,6 +16388,15 @@ }, /turf/open/floor/iron/smooth, /area/station/engineering/supermatter/room) +"fZZ" = ( +/obj/structure/chair/sofa/bench/left{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/turf/open/floor/iron/white/side, +/area/station/hallway/primary/central/aft) "gad" = ( /obj/structure/table/bronze, /obj/item/food/grown/cannabis{ @@ -14344,25 +16429,18 @@ }, /turf/open/floor/iron/grimy, /area/station/command/heads_quarters/hop) -"gal" = ( -/obj/structure/table, -/obj/item/reagent_containers/condiment/saltshaker{ - desc = "Salt. From space oceans, presumably. A staple of modern medicine."; - pixel_x = 8; - pixel_y = 7 - }, -/obj/item/reagent_containers/condiment/peppermill{ - desc = "Often used to flavor food or make people sneeze. Fashionably moved to the left side of the table."; - pixel_x = 8; - pixel_y = 2 +"gaj" = ( +/obj/effect/landmark/event_spawn, +/obj/effect/turf_decal/trimline/neutral/line{ + dir = 1 }, -/obj/item/radio/intercom/directional/east, -/obj/effect/spawner/random/food_or_drink/condiment{ - pixel_x = -8; - pixel_y = 3 +/obj/effect/turf_decal/trimline/neutral/line, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 10 }, -/turf/open/floor/iron/showroomfloor, -/area/station/service/cafeteria) +/turf/open/floor/iron, +/area/station/hallway/primary/central/aft) "gan" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/door/airlock/research{ @@ -14418,6 +16496,10 @@ /obj/effect/mapping_helpers/requests_console/assistance, /turf/open/floor/iron/white/small, /area/station/science/lab) +"gby" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/herringbone, +/area/station/commons/dorms) "gbD" = ( /obj/machinery/hydroponics/soil, /obj/item/food/grown/mushroom/reishi, @@ -14431,6 +16513,15 @@ /obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored/plasma_output, /turf/open/floor/engine/plasma, /area/station/engineering/atmos/space_catwalk) +"gbG" = ( +/obj/machinery/door/airlock{ + name = "Maintenance" + }, +/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/plating, +/area/station/maintenance/fore/greater) "gbH" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -14447,6 +16538,26 @@ /obj/effect/spawner/random/structure/girder, /turf/open/floor/plating, /area/station/ai_monitored/turret_protected/aisat/maint) +"gbP" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/trimline/neutral/corner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/neutral/line{ + dir = 5 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central/aft) +"gcg" = ( +/obj/structure/chair{ + name = "Defense" + }, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/security/courtroom) "gcs" = ( /turf/closed/wall, /area/space/nearstation) @@ -14495,6 +16606,10 @@ "gdr" = ( /turf/closed/wall/rust, /area/station/maintenance/fore/lesser) +"gdx" = ( +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/hallway/secondary/recreation) "gdA" = ( /obj/structure/railing/corner{ dir = 8 @@ -14529,12 +16644,12 @@ }, /turf/open/floor/iron/smooth, /area/station/ai_monitored/turret_protected/aisat/foyer) -"gea" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/cafeteria, -/area/station/security/prison/mess) +"gdF" = ( +/obj/structure/railing/corner{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/commons/dorms) "geb" = ( /obj/structure/table/reinforced/plastitaniumglass, /obj/item/flashlight/lamp/green, @@ -14565,6 +16680,16 @@ /obj/machinery/light/small/directional/west, /turf/open/misc/sandy_dirt, /area/station/hallway/primary/central/fore) +"geH" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/dark_red, +/obj/structure/sign/warning/no_smoking/circle/directional/north, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/turf/open/floor/iron, +/area/station/security) "geJ" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 8 @@ -14597,6 +16722,16 @@ /obj/effect/mapping_helpers/airlock/access/all/command/general, /turf/open/floor/catwalk_floor/iron_smooth, /area/station/ai_monitored/turret_protected/aisat/foyer) +"gfm" = ( +/obj/structure/chair/office{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/turf/open/floor/wood/parquet, +/area/station/service/library) "gfs" = ( /turf/closed/wall/r_wall, /area/station/hallway/secondary/command) @@ -14631,11 +16766,30 @@ /obj/machinery/camera/autoname/directional/south, /turf/open/floor/iron, /area/station/hallway/secondary/dock) +"gfQ" = ( +/obj/machinery/light/small/directional/east, +/obj/effect/turf_decal/stripes/red/line{ + dir = 4 + }, +/turf/open/floor/iron/smooth_large, +/area/station/science/auxlab/firing_range) "gfZ" = ( /obj/structure/window/spawner/directional/west, /obj/effect/turf_decal/sand/plating, /turf/open/floor/plating/airless, /area/space/nearstation) +"ggc" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/door/airlock/public/glass{ + name = "Departure Lounge" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/textured_half{ + dir = 1 + }, +/area/station/hallway/secondary/exit/departure_lounge) "ggh" = ( /obj/effect/turf_decal/stripes/white/line{ dir = 8 @@ -14652,21 +16806,6 @@ /obj/machinery/camera/autoname/directional/west, /turf/open/floor/iron, /area/station/hallway/primary/aft) -"ggl" = ( -/obj/effect/mapping_helpers/broken_floor, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/maintenance/department/medical/central) -"ggv" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/neutral/half/contrasted, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark/side, -/area/station/science/xenobiology) "ggw" = ( /obj/effect/turf_decal/stripes/white/end{ dir = 1 @@ -14703,6 +16842,15 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/maintenance/port/lesser) +"ghj" = ( +/obj/effect/turf_decal/tile/green/opposingcorners, +/obj/effect/turf_decal/tile/blue/opposingcorners{ + dir = 8 + }, +/obj/machinery/hydroponics/constructable, +/obj/machinery/light/small/directional/east, +/turf/open/floor/iron, +/area/station/service/hydroponics) "ghs" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -14755,6 +16903,15 @@ /obj/item/kirbyplants/random, /turf/open/floor/iron, /area/station/science/lower) +"ghL" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/structure/disposalpipe/segment, +/obj/item/radio/intercom/directional/west, +/turf/open/floor/iron, +/area/station/hallway/primary/central/fore) "ghQ" = ( /obj/machinery/nuclearbomb/selfdestruct, /turf/open/floor/circuit/green, @@ -14765,16 +16922,11 @@ }, /turf/open/floor/plating, /area/station/service/janitor) -"gih" = ( -/obj/structure/disposalpipe/segment{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/central/fore) +"ghX" = ( +/obj/structure/spider/stickyweb, +/obj/structure/cable, +/turf/open/floor/stone, +/area/station/service/abandoned_gambling_den) "giq" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -14812,6 +16964,22 @@ /obj/structure/lattice, /turf/open/space/basic, /area/space/nearstation) +"gjg" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/iron/dark/corner, +/area/station/science/xenobiology) +"gjn" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/turf/open/floor/iron, +/area/station/holodeck/rec_center) "gjL" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/heat_exchanging/junction{ @@ -14881,6 +17049,13 @@ /obj/structure/tram, /turf/open/floor/tram, /area/station/maintenance/port/aft) +"gkv" = ( +/obj/machinery/firealarm/directional/south, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/iron/white/small, +/area/station/science/server) "gkw" = ( /obj/structure/cable, /obj/machinery/light_switch/directional/west, @@ -14908,22 +17083,22 @@ dir = 8 }, /area/station/engineering/main) -"glb" = ( -/obj/structure/cable, -/obj/effect/turf_decal/tile/brown/full, -/obj/structure/reagent_dispensers/beerkeg, -/obj/effect/turf_decal/bot_red/left, -/obj/machinery/power/apc/auto_name/directional/north, -/turf/open/floor/iron/smooth_large, -/area/station/service/bar) -"glv" = ( -/obj/structure/reagent_dispensers/beerkeg, -/obj/structure/sign/picture_frame/portrait/bar{ - pixel_y = 32 +"gla" = ( +/turf/open/floor/iron/grimy, +/area/station/commons) +"gls" = ( +/obj/item/radio/intercom/directional/south, +/obj/effect/turf_decal/siding/wood, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/grimy, +/area/station/service/library) +"glA" = ( +/obj/effect/landmark/start/hangover, +/obj/structure/chair/wood{ + dir = 8 }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/stone, -/area/station/service/bar/backroom) +/turf/open/floor/wood/tile, +/area/station/service/bar) "glJ" = ( /obj/effect/turf_decal/tile/brown/opposingcorners, /obj/effect/turf_decal/siding/wideplating, @@ -14955,14 +17130,6 @@ }, /turf/open/floor/iron, /area/station/engineering/hallway) -"glP" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/holopad, -/obj/machinery/light/cold/directional/west, -/turf/open/floor/iron/white/side{ - dir = 4 - }, -/area/station/science/xenobiology) "glY" = ( /obj/effect/turf_decal/tile/neutral/fourcorners, /obj/structure/rack, @@ -14973,6 +17140,9 @@ /obj/item/wrench/medical, /turf/open/floor/iron/dark, /area/station/medical/medbay/aft) +"gmf" = ( +/turf/open/floor/iron/white/small, +/area/station/commons/toilet/restrooms) "gmm" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -14994,15 +17164,13 @@ "gnd" = ( /turf/closed/wall, /area/station/engineering/atmos/office) -"gni" = ( -/obj/item/kirbyplants/random, -/obj/effect/turf_decal/siding/thinplating_new/light{ - dir = 4 - }, -/obj/effect/mapping_helpers/broken_floor, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/small, -/area/station/commons/fitness/locker_room) +"gns" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/hallway/primary/central/aft) "gnA" = ( /obj/structure/cable, /obj/machinery/light/small/directional/north, @@ -15041,23 +17209,22 @@ "gow" = ( /turf/open/floor/tram, /area/station/maintenance/department/medical/central) +"goA" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "goB" = ( /obj/effect/turf_decal/stripes/white/line{ dir = 6 }, /turf/open/floor/tram, /area/station/maintenance/department/medical/central) -"goE" = ( -/obj/structure/disposalpipe/trunk{ - dir = 4 - }, -/obj/effect/turf_decal/siding/dark_red{ - dir = 1 - }, -/obj/machinery/disposal/bin, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/stone, -/area/station/command/heads_quarters/hos) "goJ" = ( /obj/structure/table, /obj/item/stack/cable_coil, @@ -15090,13 +17257,11 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/department/medical/central) -"gpy" = ( +"gpA" = ( +/obj/effect/turf_decal/siding/thinplating/terracotta, /obj/effect/decal/cleanable/dirt, -/obj/item/toy/plush/slimeplushie{ - name = "Nanners" - }, -/turf/open/floor/engine, -/area/station/science/xenobiology) +/turf/open/floor/iron, +/area/station/commons/dorms) "gpI" = ( /turf/closed/wall, /area/station/command/heads_quarters/ce) @@ -15112,6 +17277,28 @@ /obj/machinery/camera/autoname/directional/south, /turf/open/floor/iron/dark/small, /area/station/medical/virology) +"gpP" = ( +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/commons/storage/tools) +"gpT" = ( +/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible{ + dir = 9 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/white/small, +/area/station/science/ordnance/storage) +"gpV" = ( +/obj/structure/chair/stool/directional/north, +/turf/open/floor/carpet/orange, +/area/station/commons/dorms) "gqb" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment, @@ -15126,6 +17313,28 @@ /obj/effect/spawner/random/trash, /turf/open/floor/plating, /area/station/maintenance/port/aft) +"gqh" = ( +/obj/effect/turf_decal/tile/purple/opposingcorners, +/turf/open/floor/iron/cafeteria, +/area/station/science/circuits) +"gqn" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/obj/item/reagent_containers/cup/bowl{ + pixel_y = 3 + }, +/obj/item/reagent_containers/cup/bowl{ + pixel_y = 8; + pixel_x = 3 + }, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "kitchenshutters"; + name = "Kitchen Shutters" + }, +/turf/open/floor/plating, +/area/station/service/kitchen) "gqs" = ( /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 10 @@ -15140,11 +17349,6 @@ /obj/structure/spider/stickyweb, /turf/open/floor/iron/dark, /area/station/maintenance/department/engine/atmos) -"gqK" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/iron, -/area/station/construction/mining/aux_base) "grm" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -15171,17 +17375,29 @@ /obj/item/radio/intercom/directional/south, /turf/open/floor/iron/small, /area/station/medical/storage) -"grD" = ( -/obj/effect/turf_decal/tile/blue/anticorner/contrasted, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/white, -/area/station/medical/paramedic) "grF" = ( /obj/structure/railing, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/catwalk_floor, /area/station/maintenance/department/engine/atmos) +"grH" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/dark_red/half/contrasted, +/obj/machinery/computer/security/telescreen/interrogation/directional/north, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/security) +"grI" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/wood/tile, +/area/station/service/bar) "gsh" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment, @@ -15204,16 +17420,13 @@ "gsY" = ( /turf/open/floor/iron/smooth, /area/station/engineering/break_room) -"gtl" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/neutral/half/contrasted, -/obj/effect/turf_decal/stripes/corner{ - dir = 1 +"gtk" = ( +/obj/structure/hedge, +/obj/effect/turf_decal/siding/wideplating/dark{ + dir = 10 }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark/side, -/area/station/science/xenobiology) +/turf/open/floor/iron/small, +/area/station/commons/fitness/locker_room) "gto" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -15238,6 +17451,11 @@ /obj/effect/landmark/start/depsec/engineering, /turf/open/floor/iron/smooth, /area/station/security/checkpoint/engineering) +"gtH" = ( +/turf/open/floor/iron/stairs/left{ + dir = 4 + }, +/area/station/hallway/secondary/recreation) "gtJ" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -15287,36 +17505,19 @@ /obj/machinery/airalarm/directional/south, /turf/open/floor/iron/white, /area/station/medical/virology) -"guF" = ( -/obj/effect/mapping_helpers/broken_floor, -/obj/machinery/holopad, -/obj/machinery/button/door/directional/north{ - id = "medlock"; - name = "Medbay Lockdown Control"; - req_access = list("medical") +"guK" = ( +/obj/structure/window/reinforced/spawner/directional/west, +/obj/machinery/status_display/door_timer{ + id = "Cell 3"; + name = "Cell 3"; + pixel_y = -32 }, -/turf/open/floor/wood/parquet, -/area/station/command/heads_quarters/cmo) -"guR" = ( -/obj/machinery/modular_computer/preset/curator, -/obj/effect/mapping_helpers/broken_floor, -/obj/machinery/firealarm/directional/north, -/turf/open/floor/wood/parquet, -/area/station/service/library) +/obj/machinery/camera/autoname/directional/south, +/turf/open/floor/iron/dark/small, +/area/station/security/brig) "guY" = ( /turf/closed/wall, /area/station/service/chapel/storage) -"gvn" = ( -/obj/machinery/door/airlock/security/glass{ - id_tag = "outerbrig"; - name = "Brig" - }, -/obj/effect/mapping_helpers/airlock/access/all/security/entrance, -/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ - cycle_id = "sci-entrance" - }, -/turf/open/floor/iron/textured_half, -/area/station/security/brig/entrance) "gvB" = ( /obj/effect/turf_decal/stripes/line{ dir = 10 @@ -15327,14 +17528,6 @@ /obj/machinery/light_switch/directional/south, /turf/open/floor/iron/smooth, /area/station/maintenance/disposal/incinerator) -"gvQ" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/disposalpipe/segment{ - dir = 5 - }, -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/maintenance/department/medical/central) "gvV" = ( /obj/effect/turf_decal/tile/dark_red/opposingcorners, /obj/structure/chair/office{ @@ -15344,9 +17537,13 @@ /obj/machinery/light/small/directional/east, /turf/open/floor/iron, /area/station/security/brig/entrance) -"gvY" = ( -/turf/closed/wall/r_wall, -/area/space) +"gwa" = ( +/obj/structure/chair{ + dir = 1 + }, +/obj/machinery/firealarm/directional/south, +/turf/open/floor/iron/checker, +/area/station/security/breakroom) "gwl" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -15357,16 +17554,31 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/iron/small, /area/station/engineering/atmos/storage/gas) -"gwo" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/purple/visible{ +"gwx" = ( +/obj/structure/disposalpipe/segment{ dir = 4 }, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/white/small, -/area/station/science/ordnance/storage) +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/structure/disposalpipe/segment, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/hallway/primary/central/fore) +"gwL" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/landmark/start/hangover, +/obj/effect/turf_decal/trimline/neutral/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/neutral/line{ + dir = 8 + }, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/hallway/primary/central/fore) "gwQ" = ( /obj/effect/decal/cleanable/dirt, /obj/item/radio/intercom/directional/east, @@ -15407,17 +17619,6 @@ /obj/machinery/status_display/evac/directional/west, /turf/open/floor/iron/showroomfloor, /area/station/medical/surgery/theatre) -"gxc" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/status_display/ai/directional/south, -/turf/open/floor/iron, -/area/station/hallway/secondary/dock) "gxg" = ( /obj/effect/turf_decal/siding/red{ dir = 9 @@ -15437,6 +17638,14 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/smooth, /area/station/hallway/secondary/command) +"gxl" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 9 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/obj/structure/filingcabinet/employment, +/turf/open/floor/wood/tile, +/area/station/service/lawoffice) "gxq" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -15512,20 +17721,12 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/fore) -"gxX" = ( -/obj/structure/chair/stool/directional/east, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/smooth, -/area/station/hallway/secondary/command) -"gxZ" = ( -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/obj/effect/mapping_helpers/broken_floor, -/obj/machinery/power/apc/auto_name/directional/west, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/plating, -/area/station/maintenance/fore/greater) +"gyc" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 8 + }, +/turf/open/floor/grass, +/area/station/service/chapel) "gyd" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/window/spawner/directional/east, @@ -15559,35 +17760,21 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/engineering/supermatter/room) -"gyE" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, +"gyx" = ( +/obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/obj/structure/chair/sofa/bench{ - dir = 1 - }, -/obj/machinery/newscaster/directional/south, -/obj/effect/landmark/start/hangover, +/obj/effect/turf_decal/tile/dark_red/fourcorners, +/obj/machinery/newscaster/directional/north, /turf/open/floor/iron, -/area/station/hallway/secondary/dock) -"gzf" = ( -/obj/structure/chair/stool/directional/east, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ +/area/station/security/brig/entrance) +"gyy" = ( +/obj/effect/turf_decal/siding/wood, +/obj/structure/chair/wood{ dir = 4 }, -/turf/open/floor/iron/smooth, -/area/station/hallway/secondary/command) -"gzj" = ( -/obj/structure/flora/bush/flowers_br/style_random, -/obj/structure/beebox, -/obj/machinery/camera/autoname/directional/north, -/obj/machinery/light/small/directional/north, -/turf/open/floor/grass, -/area/station/service/hydroponics) +/turf/open/floor/iron/grimy, +/area/station/service/bar) "gzs" = ( /obj/effect/turf_decal/stripes/white/line{ dir = 5 @@ -15605,14 +17792,6 @@ /obj/machinery/camera/autoname/directional/south, /turf/open/floor/iron, /area/station/security) -"gzx" = ( -/obj/structure/closet/crate, -/obj/machinery/firealarm/directional/west, -/obj/item/watertank, -/obj/item/shovel/spade, -/obj/item/cultivator/rake, -/turf/open/floor/iron/white/small, -/area/station/service/hydroponics/garden) "gzB" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/window/spawner/directional/west, @@ -15649,6 +17828,11 @@ /obj/structure/lattice, /turf/open/space/basic, /area/space/nearstation) +"gAu" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/extinguisher_cabinet/directional/east, +/turf/open/floor/iron, +/area/station/hallway/secondary/recreation) "gAA" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -15657,6 +17841,14 @@ dir = 5 }, /area/station/science/research) +"gAH" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/turf_decal/siding/wood/corner, +/obj/structure/disposalpipe/segment, +/turf/open/floor/wood/parquet, +/area/station/service/library) "gAJ" = ( /obj/structure/reagent_dispensers/watertank, /turf/open/floor/iron, @@ -15680,6 +17872,13 @@ }, /turf/open/space/basic, /area/space/nearstation) +"gBg" = ( +/obj/effect/turf_decal/tile/blue/half/contrasted{ + dir = 1 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron/white, +/area/station/medical/medbay/lobby) "gBh" = ( /turf/closed/mineral/random/stationside, /area/station/maintenance/department/engine/atmos) @@ -15711,6 +17910,12 @@ "gBu" = ( /turf/closed/wall/r_wall, /area/station/security/prison/mess) +"gBw" = ( +/obj/machinery/ticket_machine/directional/north, +/turf/open/floor/iron/half{ + dir = 8 + }, +/area/station/hallway/primary/central/fore) "gBx" = ( /obj/structure/window/reinforced/spawner/directional/west, /obj/structure/table/glass, @@ -15764,6 +17969,13 @@ /obj/machinery/camera/autoname/directional/east, /turf/open/floor/wood/tile, /area/station/command/bridge) +"gCl" = ( +/obj/machinery/light/floor, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central/aft) "gCo" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -15791,6 +18003,11 @@ }, /turf/open/floor/iron/smooth, /area/station/hallway/secondary/command) +"gCx" = ( +/obj/structure/lattice/catwalk, +/obj/machinery/atmospherics/components/unary/passive_vent, +/turf/open/space/basic, +/area/space/nearstation) "gCA" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -15799,11 +18016,27 @@ /obj/machinery/light/floor, /turf/open/floor/iron/smooth, /area/station/hallway/secondary/command) +"gCI" = ( +/obj/structure/table/wood, +/obj/effect/turf_decal/siding/wood{ + dir = 5 + }, +/obj/effect/mapping_helpers/broken_floor, +/obj/machinery/newscaster/directional/east, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/cobweb/cobweb2, +/obj/machinery/fax{ + fax_name = "Law Office"; + name = "Law Office Fax Machine" + }, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/wood/tile, +/area/station/service/lawoffice) "gCP" = ( /obj/effect/turf_decal/stripes/line{ dir = 10 }, -/obj/item/kirbyplants/random, +/obj/machinery/atmospherics/pipe/smart/manifold/yellow/visible, /turf/open/floor/iron, /area/station/engineering/atmos) "gCR" = ( @@ -15862,6 +18095,9 @@ /obj/structure/window/spawner/directional/south, /turf/open/space/basic, /area/space/nearstation) +"gDB" = ( +/turf/open/floor/iron, +/area/station/science/lower) "gDC" = ( /obj/structure/lattice, /obj/structure/railing{ @@ -15890,6 +18126,15 @@ /obj/machinery/digital_clock/directional/north, /turf/open/floor/iron, /area/station/maintenance/port/aft) +"gEx" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/airalarm/directional/south, +/obj/effect/turf_decal/tile/neutral, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/port) "gEy" = ( /obj/structure/lattice/catwalk, /obj/structure/railing/corner{ @@ -15907,14 +18152,14 @@ }, /turf/open/space/basic, /area/station/engineering/atmos/space_catwalk) +"gEG" = ( +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/south, +/turf/open/floor/iron/dark, +/area/station/security/office) "gEH" = ( /turf/closed/wall/r_wall, /area/station/security/evidence) -"gEI" = ( -/obj/structure/closet/emcloset, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) "gEJ" = ( /obj/effect/turf_decal/tile/brown{ dir = 4 @@ -15925,13 +18170,19 @@ /obj/machinery/airalarm/directional/south, /turf/open/floor/iron, /area/station/cargo/office) -"gEQ" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +"gEM" = ( /obj/structure/chair/sofa/bench/right{ dir = 4 }, +/obj/effect/turf_decal/tile/yellow{ + dir = 1 + }, +/obj/effect/turf_decal/tile/red{ + dir = 8 + }, +/obj/effect/landmark/start/assistant, /turf/open/floor/iron, -/area/station/commons/fitness/recreation/entertainment) +/area/station/hallway/primary/fore) "gFg" = ( /obj/machinery/computer/cargo/request, /obj/effect/turf_decal/tile/neutral/fourcorners, @@ -15940,6 +18191,12 @@ }, /turf/open/floor/iron/smooth, /area/station/command/bridge) +"gFm" = ( +/obj/machinery/light/dim/directional/south, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/hallway/secondary/recreation) "gFs" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment, @@ -15959,11 +18216,6 @@ }, /turf/open/floor/wood/tile, /area/station/command/bridge) -"gFD" = ( -/obj/effect/mapping_helpers/broken_floor, -/obj/effect/spawner/random/trash, -/turf/open/floor/plating, -/area/station/maintenance/port/aft) "gFF" = ( /obj/machinery/computer/apc_control{ dir = 8 @@ -16011,6 +18263,12 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron/textured_half, /area/station/security/processing) +"gGk" = ( +/obj/machinery/status_display/evac/directional/north, +/turf/open/floor/iron/stairs/right{ + dir = 4 + }, +/area/station/hallway/secondary/recreation) "gGl" = ( /obj/structure/bed/double{ dir = 1 @@ -16032,6 +18290,16 @@ /obj/structure/chair, /turf/open/floor/wood, /area/station/cargo/miningfoundry) +"gGx" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 1 + }, +/obj/item/kirbyplants/random, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/turf/open/floor/stone, +/area/station/service/bar) "gGB" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -16062,6 +18330,10 @@ /obj/item/melee/chainofcommand, /turf/open/floor/iron/smooth, /area/station/command/bridge) +"gHg" = ( +/obj/machinery/status_display/ai/directional/east, +/turf/open/floor/glass, +/area/station/hallway/primary/central/aft) "gHl" = ( /obj/structure/cable, /obj/effect/turf_decal/tile/dark_red/half/contrasted{ @@ -16069,12 +18341,11 @@ }, /turf/open/floor/iron/smooth, /area/station/security/checkpoint/customs) -"gHt" = ( -/obj/structure/kitchenspike, -/obj/effect/turf_decal/bot_red, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/iron/freezer, -/area/station/service/kitchen/coldroom) +"gHD" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/dark, +/area/station/commons/dorms) "gHP" = ( /obj/structure/hedge, /obj/effect/mapping_helpers/broken_floor, @@ -16124,6 +18395,17 @@ /obj/effect/spawner/random/trash, /turf/open/floor/plating, /area/station/maintenance/port/fore) +"gIv" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/turf/open/floor/stone, +/area/station/service/bar) "gIx" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -16164,15 +18446,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/fore/lesser) -"gII" = ( -/obj/effect/turf_decal/tile/purple/opposingcorners, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 - }, -/obj/effect/landmark/event_spawn, -/turf/open/floor/iron/cafeteria, -/area/station/science/circuits) "gIM" = ( /obj/machinery/atmospherics/pipe/smart/manifold/green/visible{ dir = 8 @@ -16200,19 +18473,6 @@ /obj/machinery/camera/autoname/directional/south, /turf/open/floor/iron, /area/station/security) -"gJa" = ( -/obj/structure/cable, -/obj/machinery/button/door/directional/east{ - id = "armory"; - name = "Armory Shutters"; - req_access = list("armory") - }, -/obj/effect/turf_decal/siding/dark_red{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark/small, -/area/station/ai_monitored/security/armory) "gJo" = ( /turf/open/floor/iron/stairs{ dir = 8 @@ -16241,13 +18501,6 @@ /obj/machinery/light/small/directional/north, /turf/open/floor/carpet/royalblue, /area/station/command/corporate_suite) -"gJQ" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/table, -/obj/item/stack/spacecash/c1, -/obj/item/clothing/mask/cigarette/cigar/havana, -/turf/open/floor/light/colour_cycle/dancefloor_b, -/area/station/maintenance/starboard/central) "gJS" = ( /obj/machinery/atmospherics/pipe/smart/simple/general/visible, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -16278,12 +18531,6 @@ /obj/machinery/atmospherics/pipe/smart/simple/cyan/visible, /turf/closed/wall/r_wall, /area/station/engineering/hallway) -"gKC" = ( -/obj/effect/turf_decal/tile/dark_red/opposingcorners, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/turf/open/floor/iron/dark, -/area/station/ai_monitored/security/armory) "gKE" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/broken_flooring/pile/directional/east, @@ -16309,31 +18556,48 @@ "gKL" = ( /turf/closed/wall/r_wall, /area/station/engineering/break_room) +"gKQ" = ( +/obj/effect/turf_decal/siding/wideplating/dark{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/iron/small, +/area/station/service/barber) "gKT" = ( /obj/effect/spawner/random/structure/closet_maintenance, /turf/open/floor/plating, /area/station/maintenance/fore/lesser) -"gKU" = ( -/obj/structure/chair/sofa/bench{ - dir = 4 - }, -/obj/effect/turf_decal/tile/yellow{ +"gLb" = ( +/turf/closed/wall, +/area/station/medical/virology) +"gLg" = ( +/obj/effect/turf_decal/siding/wood, +/obj/machinery/camera/autoname/directional/north, +/obj/structure/cable, +/obj/structure/sign/painting/large/library{ dir = 1 }, -/obj/effect/turf_decal/tile/red{ - dir = 8 +/turf/open/floor/wood/parquet, +/area/station/service/library) +"gLo" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 6 }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/newscaster/directional/west, -/obj/effect/landmark/start/hangover, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 4 +/turf/open/floor/plating, +/area/station/maintenance/central/greater) +"gLr" = ( +/obj/structure/disposalpipe/segment{ + dir = 6 }, -/turf/open/floor/iron, -/area/station/hallway/primary/fore) -"gLb" = ( -/turf/closed/wall, -/area/station/medical/virology) +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/herringbone, +/area/station/commons/dorms) "gLs" = ( /obj/effect/turf_decal/siding/thinplating{ dir = 8 @@ -16365,12 +18629,29 @@ /obj/machinery/airalarm/directional/east, /turf/open/floor/iron/smooth, /area/station/command/bridge) -"gLR" = ( +"gLO" = ( +/obj/effect/turf_decal/plaque{ + icon_state = "L11"; + pixel_y = -15 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central/aft) +"gLV" = ( /obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/obj/effect/mapping_helpers/broken_floor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/spawner/random/trash, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/open/floor/plating, -/area/station/maintenance/port/lesser) +/area/station/maintenance/port/greater) "gLY" = ( /obj/effect/spawner/structure/window/reinforced/tinted, /turf/open/floor/plating, @@ -16396,6 +18677,14 @@ }, /turf/open/floor/iron/dark, /area/station/tcommsat/server) +"gMq" = ( +/obj/machinery/vending/clothing, +/obj/effect/turf_decal/siding/wideplating/dark{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/small, +/area/station/commons/fitness/locker_room) "gMs" = ( /obj/structure/cable, /obj/effect/spawner/structure/window, @@ -16408,16 +18697,25 @@ }, /turf/open/floor/plating, /area/station/command/gateway) -"gMK" = ( -/obj/effect/turf_decal/stripes/corner{ - dir = 8 +"gMz" = ( +/obj/structure/chair/sofa/bench/right, +/obj/effect/landmark/start/hangover, +/turf/open/floor/iron, +/area/station/hallway/secondary/recreation) +"gMM" = ( +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/delivery/red, +/obj/machinery/door/airlock/medical/glass{ + id_tag = "MedbayFoyer"; + name = "Medbay Clinic" }, -/obj/effect/mapping_helpers/broken_floor, -/obj/structure/chair{ - pixel_y = -2 +/obj/machinery/door/poddoor/shutters/preopen{ + id = "medlock"; + name = "Lockdown Shutters" }, -/turf/open/floor/plating, -/area/station/maintenance/hallway/abandoned_command) +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron/white/small, +/area/station/medical/medbay/lobby) "gMQ" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/displaycase/labcage, @@ -16439,10 +18737,23 @@ }, /turf/open/floor/catwalk_floor/iron, /area/station/science/xenobiology) +"gMX" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/turf/open/floor/plating, +/area/station/maintenance/port/greater) "gNb" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/maintenance/department/engine/atmos) +"gNs" = ( +/obj/machinery/duct, +/turf/open/floor/iron/showroomfloor, +/area/station/commons/dorms) "gNt" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -16451,6 +18762,21 @@ }, /turf/open/floor/iron/small, /area/station/engineering/break_room) +"gNA" = ( +/obj/structure/table/reinforced, +/obj/structure/desk_bell{ + pixel_x = 4; + pixel_y = 3 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "kitchenshutters"; + name = "Kitchen Shutters" + }, +/turf/open/floor/plating, +/area/station/service/kitchen) "gNC" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -16471,6 +18797,17 @@ /obj/structure/cable, /turf/open/floor/wood, /area/station/engineering/atmos) +"gNP" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/port) "gNS" = ( /obj/effect/turf_decal/tile/brown/opposingcorners, /obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ @@ -16480,40 +18817,32 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/engineering/atmos/space_catwalk) -"gNU" = ( -/obj/structure/cable, +"gNV" = ( /obj/structure/disposalpipe/segment, -/obj/machinery/door/firedoor, -/obj/effect/turf_decal/stripes/red/line, -/obj/effect/turf_decal/stripes/red/line{ +/turf/open/floor/iron/stairs{ dir = 1 }, -/turf/open/floor/iron/small, -/area/station/hallway/primary/central/fore) -"gOf" = ( -/obj/effect/mapping_helpers/broken_floor, -/obj/item/kirbyplants/random, -/turf/open/floor/iron, -/area/station/commons) +/area/station/cargo/office) "gOm" = ( /turf/closed/wall/r_wall, /area/station/ai_monitored/turret_protected/aisat/equipment) -"gOB" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 +"gOt" = ( +/obj/structure/flora/tree/jungle/small/style_2, +/obj/effect/turf_decal/weather/dirt{ + dir = 1 }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/mapping_helpers/broken_floor, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/duct, -/turf/open/floor/plating, -/area/station/maintenance/central/greater) -"gOH" = ( -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/iron/small, -/area/station/maintenance/port/aft) +/turf/open/floor/grass, +/area/station/service/chapel) +"gOw" = ( +/obj/effect/turf_decal/tile/dark_red/opposingcorners, +/obj/structure/chair{ + dir = 8 + }, +/obj/machinery/flasher/directional/east{ + id = "brigisolation" + }, +/turf/open/floor/iron, +/area/station/security/brig/entrance) "gOK" = ( /obj/structure/fermenting_barrel/gunpowder, /obj/structure/barricade/wooden/crude, @@ -16554,13 +18883,13 @@ /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/engine, /area/station/engineering/atmos) -"gPo" = ( -/obj/effect/mapping_helpers/broken_floor, -/obj/effect/decal/cleanable/dirt, -/obj/structure/bed/maint, -/obj/effect/decal/cleanable/vomit/old, -/turf/open/floor/carpet/green, -/area/station/maintenance/central/lesser) +"gPm" = ( +/obj/machinery/computer/monitor{ + dir = 1 + }, +/obj/machinery/computer/security/telescreen/minisat/directional/south, +/turf/open/floor/iron/smooth, +/area/station/ai_monitored/turret_protected/aisat/equipment) "gPN" = ( /obj/structure/fermenting_barrel, /turf/open/floor/plating, @@ -16570,12 +18899,6 @@ /obj/effect/spawner/random/structure/girder, /turf/open/floor/plating, /area/station/maintenance/port/fore) -"gPW" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/smooth, -/area/station/commons/storage/tools) "gPY" = ( /obj/structure/window/reinforced/spawner/directional/west, /obj/effect/turf_decal/stripes/white/line{ @@ -16583,6 +18906,9 @@ }, /turf/open/floor/engine, /area/station/science/xenobiology) +"gPZ" = ( +/turf/open/floor/iron, +/area/station/security/tram) "gQa" = ( /obj/structure/sign/warning/chem_diamond, /turf/closed/wall, @@ -16628,48 +18954,28 @@ /obj/structure/cable, /turf/open/floor/iron/small, /area/station/engineering/supermatter/room) -"gQR" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/duct, -/turf/open/floor/plating, -/area/station/maintenance/department/medical/central) -"gQU" = ( -/obj/effect/turf_decal/tile/yellow/anticorner/contrasted{ - dir = 4 - }, -/obj/item/chair, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/glass, -/obj/machinery/airalarm/directional/north, -/turf/open/floor/iron, -/area/station/commons/storage/tools) -"gRe" = ( -/obj/structure/chair/sofa/bench/right{ - dir = 4 +"gQT" = ( +/obj/item/cigarette, +/obj/item/storage/fancy/cigarettes/cigpack_robust{ + pixel_y = 5; + pixel_x = 6 }, -/obj/effect/turf_decal/tile/yellow{ +/obj/item/lighter, +/obj/structure/sign/poster/official/random/directional/east, +/obj/structure/table, +/obj/effect/turf_decal/tile/neutral/opposingcorners{ dir = 1 }, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/landmark/start/assistant, -/obj/structure/broken_flooring/plating/directional/south, -/turf/open/floor/iron, -/area/station/hallway/primary/fore) -"gRh" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/machinery/light/floor, -/turf/open/floor/iron/white/corner{ - dir = 1 +/obj/effect/turf_decal/siding/thinplating_new{ + dir = 6 }, -/area/station/hallway/secondary/entry) +/turf/open/floor/iron/small, +/area/station/hallway/secondary/service) +"gRm" = ( +/obj/structure/flora/bush/flowers_br, +/obj/structure/flora/bush/flowers_pp/style_random, +/turf/open/floor/grass, +/area/station/service/chapel) "gRp" = ( /obj/effect/mapping_helpers/airlock/access/all/security/general, /obj/machinery/door/airlock/security{ @@ -16679,17 +18985,14 @@ dir = 1 }, /area/station/security/tram) -"gRG" = ( -/obj/structure/toilet{ - dir = 8 - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 8 +"gRH" = ( +/obj/machinery/button/door/directional/north{ + id = "Cabin4"; + name = "Cabin Bolt Control"; + normaldoorcontrol = 1 }, -/obj/machinery/camera/autoname/directional/east, -/obj/machinery/light_switch/directional/east, -/turf/open/floor/iron/freezer, -/area/station/command/heads_quarters/captain/private) +/turf/closed/wall, +/area/station/service/abandoned_gambling_den) "gRL" = ( /obj/structure/disposalpipe/segment{ dir = 6 @@ -16698,11 +19001,6 @@ /obj/effect/turf_decal/stripes/line, /turf/open/floor/iron, /area/station/commons/storage/tools) -"gRO" = ( -/obj/effect/mapping_helpers/broken_floor, -/obj/structure/chair/stool/directional/east, -/turf/open/floor/iron/smooth, -/area/station/maintenance/department/medical/central) "gRX" = ( /obj/machinery/newscaster/directional/south, /obj/structure/broken_flooring/singular/directional/east, @@ -16767,18 +19065,6 @@ }, /turf/open/floor/plating, /area/station/service/chapel/funeral) -"gSQ" = ( -/obj/structure/table/glass, -/obj/item/stock_parts/cell/high{ - pixel_x = 11; - pixel_y = 6 - }, -/obj/item/folder/blue{ - pixel_x = -3; - pixel_y = 2 - }, -/turf/open/floor/carpet/executive, -/area/station/command/meeting_room) "gSX" = ( /obj/machinery/computer/piratepad_control/civilian{ dir = 1 @@ -16838,6 +19124,12 @@ /obj/machinery/airalarm/directional/west, /turf/open/floor/iron/cafeteria, /area/station/science/circuits) +"gTO" = ( +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/iron, +/area/station/security/prison/work) "gTS" = ( /obj/effect/mapping_helpers/broken_floor, /obj/effect/turf_decal/tile/purple/opposingcorners, @@ -16856,15 +19148,6 @@ /obj/machinery/light/small/directional/north, /turf/open/floor/iron/cafeteria, /area/station/science/circuits) -"gTV" = ( -/obj/structure/cable, -/obj/effect/turf_decal/tile/red/opposingcorners{ - dir = 1 - }, -/obj/machinery/power/apc/auto_name/directional/north, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/turf/open/floor/iron/cafeteria, -/area/station/service/cafeteria) "gTW" = ( /obj/machinery/door/airlock/hatch, /turf/open/floor/iron, @@ -16912,24 +19195,6 @@ /obj/item/kirbyplants/random, /turf/open/floor/iron/white, /area/station/medical/medbay/lobby) -"gUo" = ( -/obj/structure/table/greyscale, -/obj/item/clothing/gloves/color/yellow, -/obj/item/wrench, -/obj/item/multitool{ - pixel_x = 4; - pixel_y = 5 - }, -/turf/open/floor/iron/grimy, -/area/station/engineering/main) -"gUx" = ( -/obj/effect/decal/cleanable/dirt, -/obj/item/chair/stool/bamboo{ - dir = 4 - }, -/obj/machinery/light/small/directional/south, -/turf/open/floor/carpet/green, -/area/station/maintenance/central/lesser) "gUC" = ( /obj/structure/disposalpipe/segment{ dir = 6 @@ -16943,6 +19208,11 @@ /obj/effect/turf_decal/tile/blue/half/contrasted, /turf/open/floor/iron/white, /area/station/security/medical) +"gUN" = ( +/obj/effect/turf_decal/weather/dirt, +/obj/structure/flora/tree/jungle/style_5, +/turf/open/floor/grass, +/area/station/service/chapel) "gUV" = ( /obj/structure/cable, /obj/structure/chair/stool/directional/south{ @@ -16971,24 +19241,19 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood/large, /area/station/command/corporate_suite) -"gVq" = ( -/obj/structure/table/wood, -/obj/machinery/firealarm/directional/east, -/obj/item/gun/ballistic/shotgun/doublebarrel, -/obj/item/holosign_creator/robot_seat/bar{ - pixel_x = 2; - pixel_y = 9 - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/camera/autoname/directional/south, -/turf/open/floor/stone, -/area/station/service/bar/backroom) "gVA" = ( /obj/structure/cable, /obj/effect/decal/cleanable/dirt, /obj/effect/spawner/random/structure/grille, /turf/open/floor/iron, /area/station/maintenance/port/aft) +"gVL" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 1 + }, +/obj/structure/flora/bush/sparsegrass, +/turf/open/floor/grass, +/area/station/service/chapel) "gVW" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/light/small/directional/east, @@ -17057,28 +19322,13 @@ /obj/structure/extinguisher_cabinet/directional/east, /turf/open/floor/catwalk_floor/iron_smooth, /area/station/engineering/break_room) -"gXq" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/effect/turf_decal/caution, -/obj/effect/spawner/random/engineering/tracking_beacon, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/smooth, -/area/station/command/gateway) -"gXv" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/stripes/corner{ - dir = 1 +"gXs" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/smooth, -/area/station/command/gateway) -"gXD" = ( -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/machinery/computer/security/telescreen/entertainment/directional/north, -/turf/open/floor/iron, -/area/station/hallway/primary/starboard) +/obj/machinery/status_display/ai/directional/north, +/turf/open/floor/iron/cafeteria, +/area/station/science/breakroom) "gXL" = ( /obj/structure/cable, /obj/machinery/door/airlock{ @@ -17105,44 +19355,16 @@ }, /turf/open/floor/plating, /area/station/hallway/secondary/construction) -"gYg" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/door/airlock/wood{ - name = "Bar Backroom" - }, -/obj/effect/mapping_helpers/airlock/access/all/service/bar, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/duct, -/turf/open/floor/catwalk_floor/iron_smooth, -/area/station/service/bar) "gYq" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/maintenance/starboard/greater) -"gYy" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/smooth, -/area/station/command/gateway) "gYH" = ( /obj/machinery/vending/wardrobe/robo_wardrobe, /turf/open/floor/catwalk_floor/flat_white, /area/station/science/robotics/augments) -"gYK" = ( -/obj/machinery/firealarm/directional/south, -/obj/effect/turf_decal/tile/neutral, -/turf/open/floor/iron, -/area/station/hallway/primary/port) "gZf" = ( /obj/machinery/atmospherics/components/unary/portables_connector/visible{ dir = 4 @@ -17172,6 +19394,21 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/security/checkpoint/escape) +"gZy" = ( +/obj/structure/table, +/obj/machinery/cell_charger{ + pixel_y = 18 + }, +/obj/item/stock_parts/power_store/cell/high{ + pixel_y = 18 + }, +/obj/item/clothing/suit/hazardvest, +/obj/effect/turf_decal/siding/thinplating_new/terracotta{ + dir = 4 + }, +/obj/machinery/firealarm/directional/west, +/turf/open/floor/iron, +/area/station/command/teleporter) "gZM" = ( /obj/item/kirbyplants/random, /obj/machinery/light/cold/directional/east, @@ -17180,6 +19417,11 @@ dir = 4 }, /area/station/hallway/secondary/entry) +"gZS" = ( +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/west, +/turf/open/floor/iron/herringbone, +/area/station/commons/dorms) "gZU" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -17192,6 +19434,18 @@ }, /turf/open/floor/iron, /area/station/security) +"gZW" = ( +/obj/structure/railing{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/commons/dorms) "had" = ( /obj/structure/cable, /obj/structure/disposalpipe/junction/flip{ @@ -17211,15 +19465,14 @@ /obj/machinery/light/cold/directional/south, /turf/open/floor/iron/dark, /area/station/medical/medbay/central) -"hau" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/tile/yellow/anticorner/contrasted{ - dir = 1 +"haH" = ( +/obj/machinery/food_cart, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 9 }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/commons/storage/tools) +/obj/effect/turf_decal/weather/snow, +/turf/open/floor/iron/freezer, +/area/station/service/kitchen/coldroom) "haO" = ( /obj/effect/turf_decal/stripes/white/end, /obj/machinery/door/poddoor/shutters{ @@ -17227,6 +19480,16 @@ }, /turf/open/floor/plating, /area/station/maintenance/port/fore) +"hbc" = ( +/obj/effect/turf_decal/siding/dark_red/corner{ + dir = 8 + }, +/obj/structure/secure_safe/directional/north{ + name = "armory safe A" + }, +/obj/machinery/camera/autoname/directional/north, +/turf/open/floor/iron/dark/small, +/area/station/ai_monitored/security/armory) "hbk" = ( /obj/structure/cable, /obj/effect/turf_decal/siding{ @@ -17255,19 +19518,19 @@ /obj/effect/spawner/random/armory/riot_shield, /turf/open/floor/iron/dark/small, /area/station/ai_monitored/security/armory) -"hbv" = ( -/obj/effect/turf_decal/tile/yellow/half/contrasted{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/commons/storage/tools) "hbw" = ( /obj/effect/turf_decal/tile/yellow/half/contrasted{ dir = 1 }, /turf/open/floor/iron, /area/station/commons/storage/tools) +"hbz" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/cable, +/obj/machinery/duct, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/maintenance/central/lesser) "hbG" = ( /obj/machinery/light_switch/directional/west, /obj/machinery/camera/autoname/directional/north, @@ -17291,13 +19554,6 @@ /obj/effect/mapping_helpers/requests_console/assistance, /turf/open/floor/iron/smooth, /area/station/security/checkpoint/engineering) -"hbI" = ( -/obj/effect/turf_decal/tile/yellow{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/commons/storage/tools) "hbN" = ( /obj/structure/frame/machine, /obj/effect/spawner/random/maintenance, @@ -17316,6 +19572,14 @@ /obj/machinery/power/apc/auto_name/directional/north, /turf/open/floor/iron/white, /area/station/medical/virology) +"hbY" = ( +/obj/structure/chair/plastic{ + dir = 4 + }, +/obj/effect/landmark/start/hangover, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/commons/fitness/locker_room) "hcb" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/white/line, @@ -17359,6 +19623,16 @@ /obj/machinery/light_switch/directional/south, /turf/open/floor/iron/smooth, /area/station/commons/storage/tools) +"hcn" = ( +/obj/structure/table, +/obj/machinery/light/small/directional/south, +/obj/item/clothing/head/utility/hardhat/reindeer{ + pixel_x = -16; + pixel_y = 3 + }, +/obj/item/clothing/shoes/clown_shoes/jester, +/turf/open/floor/iron/dark/small, +/area/station/commons/fitness/locker_room) "hcs" = ( /obj/effect/turf_decal/stripes/line{ dir = 9 @@ -17366,15 +19640,28 @@ /obj/structure/reagent_dispensers/fueltank, /turf/open/floor/plating, /area/station/hallway/secondary/construction) -"hcv" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 +"hcu" = ( +/obj/effect/turf_decal/siding/dark_red, +/obj/item/stack/sheet/cardboard{ + pixel_x = -3; + pixel_y = 8 }, -/obj/effect/decal/cleanable/dirt, -/obj/structure/broken_flooring/singular/directional/east, -/turf/open/floor/plating, -/area/station/maintenance/department/medical/central) +/obj/item/storage/box/teargas{ + pixel_x = -7; + pixel_y = 14 + }, +/obj/item/gun/grenadelauncher{ + pixel_x = 17; + pixel_y = 10 + }, +/obj/machinery/requests_console/directional/north{ + department = "Security"; + name = "Security Requests Console" + }, +/obj/effect/mapping_helpers/requests_console/supplies, +/obj/effect/mapping_helpers/requests_console/assistance, +/turf/open/floor/iron/dark/small, +/area/station/ai_monitored/security/armory) "hcE" = ( /obj/effect/turf_decal/siding/thinplating_new/terracotta{ dir = 1 @@ -17385,6 +19672,14 @@ /obj/effect/turf_decal/siding/yellow, /turf/open/floor/wood/tile, /area/station/command/bridge) +"hcT" = ( +/obj/machinery/computer/slot_machine{ + pixel_y = 2 + }, +/obj/machinery/light/small/dim/directional/south, +/obj/machinery/computer/security/telescreen/entertainment/directional/east, +/turf/open/floor/carpet/lone, +/area/station/service/abandoned_gambling_den) "hcU" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -17427,6 +19722,13 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) +"hdz" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/obj/machinery/firealarm/directional/north, +/turf/open/floor/iron/cafeteria, +/area/station/security/prison/mess) "hdB" = ( /obj/effect/turf_decal/siding/white{ dir = 8 @@ -17449,6 +19751,18 @@ }, /turf/open/floor/catwalk_floor/iron_smooth, /area/station/command/bridge) +"hdI" = ( +/obj/structure/table/wood, +/obj/item/pai_card, +/obj/item/storage/crayons, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/firealarm/directional/north, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/wood/parquet, +/area/station/service/library) "hdQ" = ( /obj/effect/turf_decal/tile/yellow/half/contrasted{ dir = 4 @@ -17465,15 +19779,23 @@ /obj/effect/spawner/structure/window/reinforced/plasma, /turf/open/floor/plating, /area/station/engineering/supermatter/room) -"hee" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 9 +"hdW" = ( +/obj/machinery/power/apc/auto_name/directional/east, +/obj/machinery/camera/autoname/directional/east, +/obj/effect/spawner/random/entertainment/arcade{ + dir = 8 }, -/obj/item/storage/fancy/candle_box, -/obj/machinery/light_switch/directional/west, -/obj/structure/rack/skeletal, -/turf/open/floor/iron/grimy, -/area/station/service/library) +/obj/effect/turf_decal/siding/thinplating{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/eighties/red, +/area/station/hallway/primary/central/fore) +"hdZ" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/central/lesser) "hei" = ( /obj/structure/cable, /obj/effect/spawner/structure/window/reinforced, @@ -17484,46 +19806,9 @@ }, /turf/open/floor/plating, /area/station/command/corporate_suite) -"hej" = ( -/obj/structure/cable, -/obj/structure/chair/sofa/corp/left{ - dir = 4 - }, -/obj/effect/mapping_helpers/broken_floor, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 - }, -/turf/open/floor/wood/large, -/area/station/command/corporate_suite) -"hek" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/structure/closet/secure_closet/personal, -/obj/item/storage/backpack, -/obj/item/storage/backpack/satchel, -/obj/item/clothing/suit/hooded/wintercoat, -/obj/item/clothing/shoes/winterboots, -/obj/effect/landmark/start/hangover/closet, -/obj/effect/mapping_helpers/broken_floor, -/obj/structure/sign/poster/official/random/directional/north, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/light/small/directional/north, -/obj/machinery/camera/directional/west, -/turf/open/floor/iron, -/area/station/commons) "hem" = ( /turf/closed/wall, /area/station/hallway/primary/fore) -"heA" = ( -/obj/structure/cable, -/obj/structure/chair/office{ - dir = 4 - }, -/obj/machinery/power/apc/auto_name/directional/west, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/smooth, -/area/station/command/gateway) "heB" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/box/red/corners, @@ -17564,6 +19849,15 @@ dir = 1 }, /area/station/command/gateway) +"heN" = ( +/obj/effect/turf_decal/siding/wideplating/dark{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/turf/open/floor/iron, +/area/station/commons/fitness/locker_room) "heT" = ( /obj/structure/table, /obj/machinery/airalarm/directional/west, @@ -17592,16 +19886,17 @@ }, /turf/open/floor/iron, /area/station/science/ordnance/testlab) +"heY" = ( +/obj/effect/turf_decal/tile/dark_red/opposingcorners, +/obj/machinery/computer/security, +/obj/machinery/computer/security/telescreen/prison/directional/north, +/turf/open/floor/iron, +/area/station/security/warden) "hfc" = ( /obj/structure/rack, /obj/effect/spawner/random/maintenance/three, /turf/open/floor/plating, /area/station/maintenance/port/fore) -"hff" = ( -/obj/structure/cable, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) "hfC" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -17627,23 +19922,6 @@ dir = 4 }, /area/station/commons/storage/tools) -"hgb" = ( -/obj/structure/table, -/obj/effect/decal/cleanable/dirt, -/obj/item/trash/can/food/pine_nuts{ - pixel_x = 16; - pixel_y = 6 - }, -/obj/machinery/cell_charger{ - pixel_x = -1; - pixel_y = 2 - }, -/obj/item/stock_parts/cell/high{ - pixel_x = -1; - pixel_y = 1 - }, -/turf/open/floor/iron/dark, -/area/station/commons/storage/tools) "hgd" = ( /obj/structure/table, /obj/item/clothing/head/collectable/paper{ @@ -17695,11 +19973,6 @@ /obj/machinery/light/small/directional/east, /turf/open/floor/iron/smooth, /area/station/engineering/main) -"hgE" = ( -/obj/structure/cable, -/obj/effect/turf_decal/tile/neutral, -/turf/open/floor/iron, -/area/station/hallway/primary/port) "hgF" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -17722,10 +19995,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/department/engine/atmos) -"hgX" = ( -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/iron, -/area/station/construction/mining/aux_base) "hgY" = ( /obj/structure/cable, /obj/structure/lattice/catwalk, @@ -17783,21 +20052,11 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/aft) -"hhZ" = ( -/obj/structure/railing{ - dir = 8 - }, -/turf/open/space/basic, -/area/space) -"hia" = ( +"hhT" = ( +/obj/structure/steam_vent, /obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/transport/power_rectifier{ - configured_transport_id = "bird_2" - }, -/turf/open/floor/iron, -/area/station/maintenance/department/medical/central) +/turf/open/floor/plating, +/area/station/maintenance/fore/greater) "hic" = ( /obj/machinery/holopad, /turf/open/floor/wood/large, @@ -17831,22 +20090,31 @@ }, /turf/open/floor/iron/small, /area/station/security/office) +"hiD" = ( +/obj/machinery/door/airlock/multi_tile/public{ + dir = 1 + }, +/obj/machinery/door/firedoor, +/turf/open/floor/iron/textured_half, +/area/station/service/bar) +"hiK" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/neutral, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/port) +"hiU" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/construction/mining/aux_base) "hiV" = ( /obj/structure/cable, /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/engine, /area/station/science/cytology) -"hji" = ( -/obj/structure/window/reinforced/spawner/directional/east, -/obj/machinery/status_display/door_timer{ - id = "Cell 2"; - name = "Cell 2"; - pixel_y = 32 - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/camera/autoname/directional/north, -/turf/open/floor/iron/dark/small, -/area/station/security/brig) "hjj" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/transit_tube/curved, @@ -17924,6 +20192,13 @@ /obj/item/radio/intercom/directional/east, /turf/open/floor/iron/white/corner, /area/station/hallway/secondary/exit/departure_lounge) +"hkA" = ( +/obj/effect/turf_decal/siding/blue{ + dir = 8 + }, +/obj/structure/rack, +/turf/open/floor/iron/white, +/area/station/medical/paramedic) "hkB" = ( /obj/structure/table/glass, /obj/effect/turf_decal/tile/blue/fourcorners, @@ -17982,17 +20257,20 @@ /obj/machinery/status_display/ai/directional/west, /turf/open/floor/iron/dark/herringbone, /area/station/ai_monitored/command/nuke_storage) -"hlg" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/broken_flooring/singular/directional/east, -/turf/open/floor/plating, -/area/station/maintenance/department/medical/central) -"hlo" = ( -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/machinery/camera/autoname/directional/north, -/obj/machinery/light/cold/directional/north, +"hla" = ( +/obj/machinery/door/airlock/public/glass{ + name = "Public Shrine" + }, +/obj/effect/turf_decal/siding/wood/end, +/obj/machinery/door/firedoor, +/turf/open/floor/stone, +/area/station/hallway/primary/port) +"hlE" = ( +/obj/effect/turf_decal/siding/wideplating/dark{ + dir = 4 + }, /turf/open/floor/iron, -/area/station/hallway/primary/starboard) +/area/station/commons/fitness/locker_room) "hlJ" = ( /obj/machinery/atmospherics/pipe/smart/simple/dark/visible{ dir = 4 @@ -18017,6 +20295,12 @@ dir = 8 }, /area/station/engineering/supermatter/room) +"hlX" = ( +/obj/machinery/door/airlock/public/glass{ + name = "Old Command Hallway" + }, +/turf/open/floor/iron/textured_half, +/area/station/maintenance/hallway/abandoned_command) "hmb" = ( /obj/structure/disposalpipe/trunk{ dir = 4 @@ -18034,16 +20318,6 @@ /obj/effect/spawner/random/structure/girder, /turf/open/floor/tram, /area/station/security/tram) -"hmg" = ( -/obj/structure/disposalpipe/segment{ - dir = 9 - }, -/obj/effect/turf_decal/tile/yellow/half/contrasted{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/commons/storage/tools) "hmh" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark/side{ @@ -18061,22 +20335,48 @@ /obj/item/storage/toolbox/emergency/old, /turf/open/floor/iron/dark, /area/station/commons/storage/tools) -"hmy" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/components/binary/valve/digital{ - dir = 4 +"hmk" = ( +/obj/structure/chair/stool/directional/east, +/turf/open/floor/iron/smooth, +/area/station/maintenance/solars/port/aft) +"hmt" = ( +/obj/structure/closet/crate, +/obj/item/stack/license_plates/empty/fifty, +/obj/item/stack/license_plates/empty/fifty, +/obj/item/stack/license_plates/empty/fifty, +/obj/item/stack/license_plates/empty/fifty, +/obj/item/stack/license_plates/empty/fifty, +/obj/item/stack/license_plates/empty/fifty, +/obj/effect/spawner/random/contraband/prison, +/obj/effect/spawner/random/contraband/prison, +/turf/open/floor/iron, +/area/station/security/prison/work) +"hmu" = ( +/obj/effect/spawner/random/entertainment/lighter, +/obj/item/cigarette/rollie/mindbreaker{ + pixel_x = -2; + pixel_y = 6 + }, +/obj/item/cigarette/rollie/trippy{ + pixel_x = 4 }, +/obj/effect/mapping_helpers/burnt_floor, /obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/white/small, -/area/station/science/ordnance/storage) +/turf/open/floor/plating, +/area/station/maintenance/starboard/greater) "hmB" = ( /obj/effect/turf_decal/stripes/line{ dir = 6 }, /turf/open/floor/iron/dark, /area/station/engineering/atmospherics_engine) +"hmC" = ( +/obj/effect/turf_decal/siding/wood/corner, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 1 + }, +/turf/open/floor/stone, +/area/station/service/chapel) "hmQ" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/table, @@ -18098,17 +20398,6 @@ }, /turf/open/floor/iron/dark, /area/station/commons/storage/tools) -"hmW" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark/side{ - dir = 8 - }, -/area/station/commons/storage/tools) "hnf" = ( /obj/item/bikehorn/rubberducky{ pixel_x = -6; @@ -18120,24 +20409,13 @@ }, /turf/open/floor/plating, /area/station/maintenance/starboard/greater) -"hno" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/yellow/half/contrasted{ - dir = 4 +"hnn" = ( +/obj/effect/turf_decal/tile/brown/opposingcorners{ + dir = 1 }, -/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment, /turf/open/floor/iron, -/area/station/commons/storage/tools) -"hnF" = ( -/obj/structure/cable, -/obj/machinery/duct, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/plating, -/area/station/maintenance/fore/greater) +/area/station/commons/vacant_room/commissary) "hnG" = ( /obj/machinery/atmospherics/components/unary/thermomachine/heater/on{ dir = 8; @@ -18189,6 +20467,16 @@ }, /turf/open/floor/plating, /area/station/engineering/gravity_generator) +"hoc" = ( +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/obj/item/radio/intercom/directional/west, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central/aft) "hok" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment, @@ -18268,22 +20556,10 @@ }, /turf/open/floor/grass, /area/station/medical/virology) -"hpq" = ( -/obj/effect/mapping_helpers/broken_floor, -/obj/structure/window/reinforced/spawner/directional/west, -/turf/open/floor/wood/parquet, -/area/station/service/theater) "hpM" = ( /obj/effect/turf_decal/siding, /turf/open/floor/iron/white, /area/station/science/cytology) -"hpP" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 6 - }, -/obj/structure/flora/tree/jungle/small/style_random, -/turf/open/floor/grass, -/area/station/service/chapel) "hpQ" = ( /obj/structure/closet/crate/coffin, /obj/structure/window/spawner/directional/south, @@ -18308,6 +20584,33 @@ dir = 8 }, /area/station/science/lobby) +"hqf" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/structure/table, +/obj/item/storage/box/lights/mixed{ + pixel_x = -20; + pixel_y = -2 + }, +/obj/item/storage/box/lights/mixed{ + pixel_x = 6; + pixel_y = 12 + }, +/obj/item/reagent_containers/spray/cleaner{ + pixel_x = -5; + pixel_y = 3 + }, +/obj/item/grenade/chem_grenade/cleaner{ + pixel_x = 8; + pixel_y = 6 + }, +/obj/item/grenade/chem_grenade/cleaner{ + pixel_x = 5; + pixel_y = 1 + }, +/turf/open/floor/iron/small, +/area/station/commons) "hqm" = ( /obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ dir = 6 @@ -18347,6 +20650,10 @@ }, /turf/open/floor/plating, /area/station/maintenance/hallway/abandoned_command) +"hrc" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/iron, +/area/station/hallway/primary/central/aft) "hrx" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -18431,6 +20738,11 @@ /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/iron/small, /area/station/engineering/break_room) +"hsx" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/light/floor, +/turf/open/floor/stone, +/area/station/service/bar) "hsy" = ( /obj/structure/railing/corner{ dir = 4 @@ -18459,18 +20771,12 @@ /turf/open/floor/plating, /area/station/cargo/miningoffice) "hsL" = ( -/obj/structure/lattice/catwalk, -/obj/structure/railing{ - dir = 8 - }, -/obj/structure/railing{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible/layer4{ +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible/layer5{ dir = 6 }, /turf/open/space/basic, -/area/station/engineering/atmos/space_catwalk) +/area/space/nearstation) "hsO" = ( /obj/structure/cable, /obj/effect/spawner/structure/window, @@ -18486,16 +20792,9 @@ /obj/structure/barricade/wooden, /turf/open/floor/plating, /area/station/security/tram) -"htI" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/door/airlock{ - name = "Backstage Maintenance" - }, -/obj/effect/mapping_helpers/airlock/access/all/service/theatre, -/turf/open/floor/stone, -/area/station/maintenance/central/greater) +"htp" = ( +/turf/closed/wall, +/area/station/service/barber) "htM" = ( /obj/effect/turf_decal/tile/dark_red{ dir = 4 @@ -18516,6 +20815,12 @@ /obj/structure/cable, /turf/open/floor/iron/dark, /area/station/security/processing) +"htN" = ( +/obj/effect/turf_decal/siding/wideplating/dark{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/commons/fitness/locker_room) "htQ" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -18530,19 +20835,6 @@ dir = 8 }, /area/station/engineering/supermatter/room) -"htV" = ( -/obj/structure/disposalpipe/sorting/mail{ - dir = 1 - }, -/obj/effect/turf_decal/tile/dark_red/half/contrasted{ - dir = 4 - }, -/obj/effect/mapping_helpers/mail_sorting/security/general, -/obj/effect/turf_decal/siding/wideplating/dark/corner{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/security) "hua" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/cable, @@ -18561,6 +20853,17 @@ /obj/structure/sign/poster/official/random/directional/west, /turf/open/floor/iron/smooth, /area/station/commons/storage/tools) +"huj" = ( +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/obj/effect/turf_decal/trimline/neutral/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/neutral/line, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/hallway/primary/central/aft) "hur" = ( /obj/structure/table/glass, /obj/item/storage/briefcase/secure, @@ -18570,16 +20873,6 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/hallway/secondary/construction) -"huz" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/turf_decal/tile/yellow/anticorner/contrasted{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/commons/storage/tools) "huE" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/cable, @@ -18599,6 +20892,11 @@ }, /turf/open/floor/iron/dark/small, /area/station/ai_monitored/security/armory) +"huY" = ( +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/west, +/turf/open/floor/iron/smooth, +/area/station/maintenance/solars/port/aft) "hvc" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -18616,15 +20914,6 @@ /obj/effect/mapping_helpers/airlock/access/all/command/general, /turf/open/floor/catwalk_floor/iron_smooth, /area/station/ai_monitored/turret_protected/aisat/maint) -"hvk" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/turf_decal/tile/yellow/half/contrasted, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/light/cold/directional/south, -/turf/open/floor/iron, -/area/station/commons/storage/tools) "hvo" = ( /obj/structure/sign/warning/hot_temp/directional/east, /turf/open/floor/iron/stairs/right{ @@ -18636,28 +20925,6 @@ /obj/machinery/light/small/directional/north, /turf/open/floor/grass, /area/station/medical/virology) -"hvy" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/turf_decal/tile/yellow{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/fore) -"hvM" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/tile/neutral, -/turf/open/floor/iron, -/area/station/hallway/primary/central/fore) "hvT" = ( /obj/structure/railing, /obj/effect/decal/cleanable/dirt/dust, @@ -18683,37 +20950,24 @@ /obj/machinery/light/small/directional/south, /turf/open/floor/iron, /area/station/security/tram) +"hvX" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/iron/dark/small, +/area/station/tcommsat/server) "hvZ" = ( /obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ dir = 5 }, /turf/open/floor/iron/dark, /area/station/engineering/atmos) -"hwe" = ( -/obj/machinery/hydroponics/constructable, -/obj/effect/turf_decal/tile/blue/half, -/obj/structure/sign/poster/official/random/directional/north, -/turf/open/floor/iron/white/small, -/area/station/service/hydroponics) -"hwf" = ( -/obj/effect/turf_decal/siding/thinplating_new/light{ +"hwh" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 4 }, -/obj/effect/turf_decal/siding/thinplating_new/light{ - dir = 8 - }, -/obj/structure/flora/bush/flowers_yw/style_random, -/obj/machinery/light/cold/directional/north, -/turf/open/floor/grass, -/area/station/service/hydroponics/garden) -"hwk" = ( -/obj/effect/turf_decal/tile/purple/opposingcorners, -/obj/effect/turf_decal/siding/green, -/obj/machinery/component_printer, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/camera/autoname/directional/south, -/turf/open/floor/iron/cafeteria, -/area/station/science/circuits) +/turf/open/floor/iron/white/small, +/area/station/science/ordnance/storage) "hwn" = ( /obj/machinery/light_switch/directional/east, /turf/open/floor/iron/showroomfloor, @@ -18767,16 +21021,6 @@ "hwJ" = ( /turf/closed/wall/rust, /area/space/nearstation) -"hwK" = ( -/obj/structure/closet/wardrobe/grey, -/obj/effect/turf_decal/siding/thinplating_new/light{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/camera/autoname/directional/west, -/obj/machinery/light/small/directional/west, -/turf/open/floor/iron/small, -/area/station/commons/fitness/locker_room) "hwZ" = ( /obj/structure/chair/bronze{ dir = 8 @@ -18795,6 +21039,22 @@ }, /turf/open/floor/wood/tile, /area/station/command/corporate_showroom) +"hxp" = ( +/obj/effect/turf_decal/tile/red/opposingcorners, +/obj/effect/turf_decal/tile/blue/opposingcorners{ + dir = 8 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/item/kirbyplants/random, +/obj/item/storage/box{ + pixel_x = -8; + pixel_y = 15 + }, +/obj/structure/extinguisher_cabinet/directional/west, +/turf/open/floor/iron/smooth, +/area/station/service/greenroom) "hxA" = ( /obj/structure/disposalpipe/segment{ dir = 6 @@ -18815,16 +21075,6 @@ dir = 8 }, /area/station/engineering/supermatter/room) -"hxJ" = ( -/obj/structure/disposalpipe/trunk{ - dir = 8 - }, -/obj/effect/mapping_helpers/broken_floor, -/obj/machinery/disposal/bin, -/obj/effect/turf_decal/bot, -/obj/machinery/camera/directional/east, -/turf/open/floor/iron/smooth, -/area/station/hallway/secondary/command) "hxQ" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 4 @@ -18858,35 +21108,6 @@ /obj/machinery/digital_clock/directional/north, /turf/open/floor/iron, /area/station/security/execution/transfer) -"hyj" = ( -/obj/structure/disposalpipe/segment{ - dir = 5 - }, -/obj/structure/cable, -/obj/effect/mapping_helpers/broken_floor, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/plating, -/area/station/maintenance/fore/lesser) -"hyl" = ( -/obj/machinery/door/firedoor, -/obj/effect/turf_decal/stripes/red/line{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/red/line, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/small, -/area/station/hallway/secondary/spacebridge) -"hym" = ( -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/tile/red/opposingcorners{ - dir = 1 - }, -/obj/structure/table, -/obj/item/trash/cnds, -/obj/item/radio/intercom/directional/west, -/turf/open/floor/iron/cafeteria, -/area/station/service/cafeteria) "hyv" = ( /obj/structure/disposalpipe/segment{ dir = 6 @@ -18920,6 +21141,16 @@ /obj/structure/steam_vent, /turf/open/floor/plating, /area/station/maintenance/port/fore) +"hyW" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 10 + }, +/obj/effect/turf_decal/weather/dirt{ + dir = 9 + }, +/obj/structure/flora/bush/flowers_pp/style_random, +/turf/open/floor/grass, +/area/station/service/chapel) "hyX" = ( /obj/structure/window/spawner/directional/north, /obj/machinery/hydroponics/soil, @@ -18927,21 +21158,28 @@ /obj/machinery/camera/autoname/directional/east, /turf/open/floor/grass, /area/station/security/prison/garden) -"hyZ" = ( -/obj/effect/mapping_helpers/broken_floor, -/obj/item/radio/intercom/directional/west, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 +"hzb" = ( +/obj/structure/cable, +/obj/item/radio/intercom/directional/north, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 }, -/turf/open/floor/iron, -/area/station/maintenance/hallway/abandoned_command) -"hzk" = ( -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/wood/parquet, -/area/station/medical/psychology) +/turf/open/floor/iron/dark/herringbone, +/area/station/ai_monitored/command/nuke_storage) "hzm" = ( /turf/closed/wall/rust, /area/station/cargo/miningoffice) +"hzp" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/trimline/neutral/line, +/obj/effect/turf_decal/trimline/neutral/line{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/port) "hzK" = ( /obj/structure/disposalpipe/segment, /turf/open/floor/plating, @@ -18958,28 +21196,6 @@ /obj/effect/mapping_helpers/airlock/access/all/supply/mining, /turf/open/floor/catwalk_floor/iron_smooth, /area/station/cargo/miningoffice) -"hzY" = ( -/obj/structure/cable, -/obj/machinery/light/directional/east, -/obj/item/radio/intercom/directional/east, -/turf/open/floor/wood/parquet, -/area/station/service/library) -"hAd" = ( -/obj/effect/turf_decal/tile/green{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/obj/structure/reagent_dispensers/watertank/high, -/obj/item/reagent_containers/cup/watering_can, -/obj/machinery/light/small/directional/west, -/obj/item/radio/intercom/directional/north, -/turf/open/floor/iron, -/area/station/service/hydroponics) "hAu" = ( /obj/machinery/door/airlock{ name = "Maintenance" @@ -18988,6 +21204,12 @@ /obj/effect/mapping_helpers/airlock/access/any/medical/maintenance, /turf/open/floor/plating, /area/station/maintenance/department/medical/central) +"hAB" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 10 + }, +/turf/open/floor/stone, +/area/station/service/chapel) "hAC" = ( /obj/machinery/light/small/directional/east, /turf/open/floor/iron/dark/small, @@ -19012,18 +21234,12 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/maintenance/department/engine/atmos) -"hAQ" = ( -/obj/structure/table, -/obj/effect/mapping_helpers/broken_floor, -/obj/machinery/cell_charger, -/obj/item/stock_parts/cell/high, -/obj/item/clothing/mask/breath{ - pixel_x = 15; - pixel_y = 5 - }, -/obj/machinery/light/small/directional/south, -/turf/open/floor/iron/smooth, -/area/station/command/gateway) +"hAW" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/dark_red/fourcorners, +/turf/open/floor/iron, +/area/station/security/execution/transfer) "hBq" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -19035,19 +21251,6 @@ /obj/item/radio/intercom/directional/north, /turf/open/floor/plating, /area/station/commons/storage/tools) -"hBr" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/table/reinforced, -/obj/machinery/door/poddoor/shutters/preopen{ - dir = 4; - id = "kitchenshutters"; - name = "Kitchen Shutters" - }, -/obj/item/plate, -/obj/item/food/sandwich/peanut_butter_jelly, -/turf/open/floor/iron/cafeteria, -/area/station/service/kitchen) "hBt" = ( /obj/effect/turf_decal/trimline/neutral/line{ dir = 8 @@ -19067,17 +21270,6 @@ }, /turf/open/floor/plating, /area/station/command/heads_quarters/cmo) -"hBK" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/door/firedoor, -/obj/effect/turf_decal/stripes/red/line{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/red/line{ - dir = 4 - }, -/turf/open/floor/iron/small, -/area/station/hallway/primary/central/fore) "hBR" = ( /obj/effect/turf_decal/tile/yellow/anticorner/contrasted{ dir = 4 @@ -19096,16 +21288,28 @@ /obj/machinery/light/floor, /turf/open/floor/iron/dark/small, /area/station/security/brig) -"hCn" = ( -/obj/structure/cable, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/siding/purple{ +"hBX" = ( +/obj/machinery/airalarm/directional/west, +/turf/open/floor/iron, +/area/station/maintenance/hallway/abandoned_command) +"hCd" = ( +/obj/effect/turf_decal/tile/dark_red/half/contrasted{ + dir = 4 + }, +/mob/living/simple_animal/bot/secbot/beepsky/officer, +/obj/effect/turf_decal/siding/wideplating/dark/corner{ dir = 8 }, -/obj/structure/filingcabinet/chestdrawer, -/turf/open/floor/iron/dark, -/area/station/command/heads_quarters/rd) +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/station/security) +"hCl" = ( +/obj/machinery/firealarm/directional/south, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/security/prison/work) "hCq" = ( /obj/effect/decal/cleanable/glass/titanium, /obj/structure/closet/crate, @@ -19115,19 +21319,25 @@ "hCr" = ( /turf/closed/wall/r_wall, /area/station/ai_monitored/command/storage/eva) -"hCz" = ( +"hCB" = ( +/obj/structure/table, +/obj/item/paper_bin, +/obj/machinery/light/small/directional/south, +/turf/open/floor/iron, +/area/station/commons/storage/art) +"hCH" = ( +/obj/structure/disposalpipe/segment{ + dir = 5 + }, /obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/power/apc/auto_name/directional/west, -/turf/open/floor/iron/smooth, -/area/station/maintenance/solars/port/aft) -"hCE" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/turf/open/floor/iron/smooth, -/area/station/security/evidence) +/turf/open/floor/plating, +/area/station/maintenance/fore/lesser) +"hCN" = ( +/obj/effect/turf_decal/siding/thinplating/terracotta, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/commons/dorms) "hCQ" = ( /obj/structure/lattice/catwalk, /turf/open/space/basic, @@ -19240,6 +21450,22 @@ /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/iron/smooth, /area/station/engineering/engine_smes) +"hEu" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/port/greater) +"hEw" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/machinery/light/small/directional/east, +/obj/structure/chair/stool/bar/directional/north, +/obj/effect/decal/cleanable/dirt, +/obj/effect/landmark/start/hangover, +/turf/open/floor/iron, +/area/station/holodeck/rec_center) "hED" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment, @@ -19247,6 +21473,9 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/smooth, /area/station/hallway/secondary/command) +"hEJ" = ( +/turf/open/floor/iron/smooth, +/area/station/service/library) "hFb" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -19297,11 +21526,6 @@ }, /turf/open/floor/iron/small, /area/station/engineering/atmos) -"hFO" = ( -/obj/structure/broken_flooring/corner/directional/south, -/obj/structure/extinguisher_cabinet/directional/west, -/turf/open/floor/plating, -/area/station/maintenance/hallway/abandoned_command) "hFR" = ( /obj/effect/turf_decal/siding/red{ dir = 9 @@ -19326,6 +21550,10 @@ }, /turf/open/floor/wood, /area/station/engineering/main) +"hGr" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/tcommsat/server) "hGt" = ( /obj/effect/turf_decal/tile/blue{ dir = 1 @@ -19348,6 +21576,12 @@ /obj/structure/sign/departments/telecomms/directional/south, /turf/open/floor/iron, /area/station/science/lobby) +"hHy" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/turf/open/floor/stone, +/area/station/service/chapel) "hHE" = ( /obj/effect/turf_decal/bot_white, /turf/open/floor/engine, @@ -19374,17 +21608,18 @@ }, /turf/open/space/basic, /area/space/nearstation) -"hIe" = ( -/obj/structure/disposalpipe/segment{ +"hIi" = ( +/obj/effect/turf_decal/stripes/line{ dir = 4 }, -/obj/structure/chair/office{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/landmark/start/cargo_technician, -/turf/open/floor/iron/dark, -/area/station/cargo/office) +/turf/open/floor/iron/smooth, +/area/station/command/gateway) +"hIm" = ( +/obj/machinery/libraryscanner, +/obj/machinery/camera/autoname/directional/north, +/obj/machinery/airalarm/directional/north, +/turf/open/floor/wood/parquet, +/area/station/service/library) "hIE" = ( /obj/structure/table/glass, /obj/machinery/light/small/directional/east, @@ -19395,10 +21630,6 @@ /obj/item/hemostat, /turf/open/floor/iron/white, /area/station/science/robotics/augments) -"hIN" = ( -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/iron, -/area/station/security/tram) "hIU" = ( /obj/effect/turf_decal/siding/yellow{ dir = 10 @@ -19406,14 +21637,6 @@ /obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored/nitrous_output, /turf/open/floor/engine/n2o, /area/station/engineering/atmos/space_catwalk) -"hJd" = ( -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/engineering/storage/tech) "hJp" = ( /turf/closed/wall/r_wall/rust, /area/station/ai_monitored/turret_protected/ai) @@ -19502,9 +21725,29 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/ai_monitored/turret_protected/aisat/maint) +"hKT" = ( +/obj/structure/closet/emcloset, +/turf/open/floor/iron, +/area/station/maintenance/fore/greater) +"hKU" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark/small, +/area/station/security/detectives_office) +"hKV" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/landmark/start/hangover, +/turf/open/floor/iron, +/area/station/hallway/primary/central/fore) "hKX" = ( /turf/closed/mineral/random/stationside, /area/station/hallway/primary/fore) +"hKZ" = ( +/obj/structure/flora/bush/jungle/a/style_random, +/turf/open/floor/grass, +/area/station/service/chapel) "hLa" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -19513,6 +21756,10 @@ /obj/machinery/door/firedoor, /turf/open/floor/iron/dark, /area/station/medical/medbay/aft) +"hLb" = ( +/obj/machinery/holopad, +/turf/open/floor/iron/white/small, +/area/station/service/hydroponics) "hLc" = ( /turf/open/floor/plating, /area/station/science/xenobiology) @@ -19589,65 +21836,41 @@ }, /turf/open/floor/wood/tile, /area/station/command/heads_quarters/hop) -"hMn" = ( -/obj/structure/table, -/obj/effect/mapping_helpers/broken_floor, -/obj/item/canvas{ - pixel_x = 13; - pixel_y = 12 - }, -/obj/item/canvas, -/obj/item/canvas{ - pixel_x = 4; - pixel_y = 16 - }, -/obj/item/canvas{ - pixel_y = 15 - }, -/obj/item/canvas{ - pixel_x = 6 - }, -/turf/open/floor/iron, -/area/station/commons/storage/art) "hMr" = ( /obj/effect/turf_decal/tile/dark_red/opposingcorners, /obj/structure/closet/secure_closet/security/sec, /obj/structure/sign/poster/official/random/directional/north, /turf/open/floor/iron, /area/station/security/lockers) -"hMt" = ( -/obj/structure/cable, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/effect/turf_decal/stripes/corner{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/station/science/xenobiology) -"hMz" = ( -/obj/machinery/computer/order_console/cook, -/turf/open/floor/iron/freezer, -/area/station/service/kitchen/coldroom) "hMA" = ( /obj/machinery/status_display/ai/directional/east, /turf/open/floor/iron, /area/station/hallway/secondary/entry) -"hMH" = ( -/obj/effect/turf_decal/tile/brown/opposingcorners, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/cargo/miningoffice) "hMK" = ( /obj/effect/turf_decal/tile/neutral/fourcorners, /obj/item/kirbyplants/organic/applebush, /obj/machinery/light/cold/directional/west, /turf/open/floor/iron/smooth, /area/station/command/bridge) +"hML" = ( +/obj/effect/landmark/start/hangover, +/turf/open/floor/glass, +/area/station/hallway/primary/central/aft) "hNb" = ( /obj/effect/turf_decal/tile/brown/opposingcorners, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /turf/open/floor/iron, /area/station/cargo/miningoffice) +"hNj" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 1 + }, +/obj/effect/turf_decal/tile/dark_red/half/contrasted, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/station/hallway/primary/port) "hNo" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -19678,13 +21901,12 @@ /obj/item/clothing/head/utility/welding, /turf/open/floor/iron, /area/station/medical/chemistry) -"hNT" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 10 +"hNP" = ( +/obj/item/storage/backpack/duffelbag/sec{ + pixel_y = 12 }, -/obj/structure/flora/bush/flowers_br/style_random, -/turf/open/floor/grass, -/area/station/service/chapel) +/turf/open/floor/iron/dark, +/area/station/security/office) "hNU" = ( /obj/structure/table/reinforced, /obj/structure/spider/stickyweb, @@ -19704,24 +21926,11 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/fore) -"hNZ" = ( -/obj/effect/turf_decal/tile/brown/opposingcorners, -/obj/effect/decal/cleanable/dirt, -/obj/structure/closet/secure_closet/miner, -/obj/machinery/camera/autoname/directional/north, -/turf/open/floor/iron, -/area/station/cargo/miningoffice) "hOg" = ( /obj/structure/hedge, /obj/machinery/camera/autoname/directional/south, /turf/open/floor/wood/tile, /area/station/command/corporate_showroom) -"hOk" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/camera/autoname/directional/south, -/obj/machinery/firealarm/directional/south, -/turf/open/floor/iron, -/area/station/hallway/secondary/entry) "hOl" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -19742,19 +21951,35 @@ dir = 1 }, /area/station/security/execution/transfer) -"hOS" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/iron/smooth, -/area/station/maintenance/solars/port/aft) +"hOO" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 9 + }, +/obj/effect/turf_decal/weather/dirt{ + dir = 5 + }, +/obj/structure/flora/bush/large/style_random, +/turf/open/floor/grass, +/area/station/service/chapel) "hOX" = ( /obj/item/chair, /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/iron/dark, /area/station/maintenance/department/engine/atmos) +"hOY" = ( +/obj/structure/chair/stool/bar/directional/west, +/obj/structure/sign/poster/contraband/random/directional/north, +/turf/open/floor/carpet/lone, +/area/station/service/abandoned_gambling_den) +"hPb" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/decal/cleanable/dirt, +/obj/structure/rack, +/obj/effect/spawner/random/maintenance, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/plating, +/area/station/maintenance/central/greater) "hPd" = ( /obj/structure/hedge, /obj/effect/turf_decal/tile/brown{ @@ -19789,16 +22014,19 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/starboard) -"hPq" = ( -/obj/effect/turf_decal/siding/wood, -/mob/living/basic/trooper/russian/ranged/lootless, -/turf/open/floor/wood, -/area/station/service/abandoned_gambling_den) "hPs" = ( /obj/effect/turf_decal/stripes/line, /obj/machinery/airalarm/directional/south, /turf/open/floor/engine, /area/station/engineering/gravity_generator) +"hPU" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/white/side{ + dir = 5 + }, +/area/station/science/xenobiology) "hPW" = ( /obj/structure/cable, /obj/machinery/door/airlock/external{ @@ -19817,14 +22045,16 @@ /obj/machinery/firealarm/directional/north, /turf/open/floor/circuit, /area/station/tcommsat/server) -"hQs" = ( -/obj/structure/chair/sofa/corp/right{ +"hQx" = ( +/obj/effect/turf_decal/siding/wideplating/dark/corner, +/obj/effect/turf_decal/tile/dark_red/half/contrasted{ dir = 1 }, -/obj/effect/mapping_helpers/broken_floor, -/obj/structure/extinguisher_cabinet/directional/south, -/turf/open/floor/wood/tile, -/area/station/command/corporate_showroom) +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/security/brig/entrance) "hQz" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/line, @@ -19851,6 +22081,13 @@ /obj/effect/mapping_helpers/airlock/access/any/security/maintenance, /turf/open/floor/plating, /area/station/maintenance/port/aft) +"hRc" = ( +/obj/effect/turf_decal/tile/red/opposingcorners, +/obj/effect/turf_decal/tile/blue/opposingcorners{ + dir = 8 + }, +/turf/open/floor/iron/smooth, +/area/station/service/greenroom) "hRd" = ( /obj/structure/table/reinforced, /obj/item/binoculars, @@ -19890,6 +22127,34 @@ }, /turf/open/misc/sandy_dirt, /area/station/security/tram) +"hSj" = ( +/obj/machinery/atmospherics/pipe/smart/manifold/cyan/visible, +/obj/structure/table, +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 1 + }, +/obj/effect/turf_decal/siding/thinplating_new/dark, +/obj/item/radio/intercom/directional/south, +/obj/item/c_tube{ + pixel_x = 20 + }, +/obj/item/clothing/head/cone{ + pixel_y = 5; + pixel_x = -6 + }, +/obj/item/clothing/head/cone{ + pixel_y = 7; + pixel_x = -6 + }, +/obj/item/pipe_dispenser{ + pixel_y = 9; + pixel_x = 14 + }, +/obj/item/cigarette{ + pixel_y = 2 + }, +/turf/open/floor/iron/small, +/area/station/engineering/atmos/pumproom) "hSG" = ( /obj/effect/turf_decal/stripes/line{ dir = 9 @@ -19927,6 +22192,20 @@ }, /turf/open/floor/iron/diagonal, /area/station/engineering/lobby) +"hTp" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/trimline/neutral/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/neutral/line{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/hallway/primary/central/fore) "hTr" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/door/airlock/maintenance{ @@ -19980,27 +22259,44 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/grimy, /area/station/engineering/main) -"hUk" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/broken_flooring/plating/directional/south, -/turf/open/floor/iron, -/area/station/maintenance/department/medical/central) "hUq" = ( /obj/structure/table/glass, /turf/open/floor/iron/smooth, /area/station/hallway/secondary/command) +"hUC" = ( +/obj/structure/toilet, +/obj/machinery/light/small/directional/north, +/obj/machinery/button/door/directional/east{ + id = "ShowerToilet1"; + name = "Lock Control"; + normaldoorcontrol = 1; + specialfunctions = 4 + }, +/turf/open/floor/iron/showroomfloor, +/area/station/commons/dorms) +"hUH" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/stripes/corner, +/turf/open/floor/iron/dark, +/area/station/science/xenobiology) "hUI" = ( /obj/structure/table, /obj/item/storage/belt/utility, /obj/item/radio/off, /turf/open/floor/iron/smooth, /area/station/command/gateway) -"hUP" = ( -/obj/structure/sink/directional/east, -/obj/structure/mirror/directional/west, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/showroomfloor, -/area/station/commons/toilet/restrooms) +"hUO" = ( +/obj/machinery/door/airlock/public/glass{ + name = "Lockers" + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/textured_half, +/area/station/commons/fitness/locker_room) "hVb" = ( /obj/machinery/plate_press, /obj/effect/turf_decal/stripes/line, @@ -20014,6 +22310,15 @@ /obj/effect/landmark/start/chief_medical_officer, /turf/open/floor/iron/white, /area/station/medical/medbay/lobby) +"hVk" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 8 + }, +/obj/machinery/power/apc/auto_name/directional/west, +/turf/open/floor/iron, +/area/station/commons/storage/tools) "hVo" = ( /obj/machinery/smartfridge/organ, /obj/effect/turf_decal/trimline/blue/corner{ @@ -20029,20 +22334,10 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/department/engine) -"hVr" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/mapping_helpers/broken_floor, -/obj/effect/decal/cleanable/dirt, -/obj/structure/chair/sofa/bench/right{ - dir = 1 - }, -/obj/structure/broken_flooring/corner/directional/south, -/turf/open/floor/plating, -/area/station/hallway/secondary/dock) +"hVJ" = ( +/obj/effect/spawner/random/maintenance, +/turf/open/floor/iron, +/area/station/maintenance/hallway/abandoned_command) "hVM" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -20057,6 +22352,13 @@ }, /turf/open/floor/plating, /area/station/maintenance/fore/lesser) +"hVO" = ( +/obj/effect/turf_decal/weather/dirt, +/obj/machinery/light/small/directional/south, +/obj/item/radio/intercom/directional/south, +/obj/structure/flora/bush/flowers_yw, +/turf/open/floor/grass, +/area/station/service/chapel) "hVX" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/turf_decal/tile/neutral{ @@ -20076,6 +22378,18 @@ /obj/machinery/light/small/directional/north, /turf/open/floor/iron/dark, /area/station/science/genetics) +"hWk" = ( +/obj/machinery/vending/coffee, +/obj/structure/extinguisher_cabinet/directional/south, +/turf/open/floor/iron, +/area/station/commons/fitness/locker_room) +"hWm" = ( +/obj/effect/turf_decal/tile/neutral, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/port) "hWu" = ( /obj/machinery/door/airlock/medical{ name = "CMO Bedroom" @@ -20083,6 +22397,20 @@ /obj/effect/mapping_helpers/airlock/access/all/medical/cmo, /turf/open/floor/wood/parquet, /area/station/command/heads_quarters/cmo) +"hWE" = ( +/obj/machinery/button/door/directional/east{ + id = "AuxToilet2"; + name = "Lock Control"; + normaldoorcontrol = 1; + specialfunctions = 4 + }, +/obj/structure/toilet, +/obj/machinery/light/small/directional/west, +/obj/effect/spawner/random/trash/soap{ + spawn_scatter_radius = 1 + }, +/turf/open/floor/iron/showroomfloor, +/area/station/commons/toilet/auxiliary) "hWJ" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment, @@ -20092,11 +22420,6 @@ /obj/machinery/camera/autoname/directional/west, /turf/open/floor/iron, /area/station/security) -"hWQ" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/wood/tile, -/area/station/service/bar) "hWU" = ( /obj/machinery/door/airlock{ name = "Maintenance" @@ -20115,15 +22438,6 @@ /obj/effect/mapping_helpers/airlock/access/any/engineering/construction, /turf/open/floor/catwalk_floor/iron, /area/station/commons/storage/tools) -"hXh" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable, -/obj/effect/mapping_helpers/broken_floor, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/station/maintenance/hallway/abandoned_command) "hXl" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment, @@ -20145,14 +22459,6 @@ }, /turf/open/floor/engine/air, /area/station/engineering/atmos/space_catwalk) -"hXP" = ( -/obj/structure/cable, -/obj/machinery/power/terminal{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/engineering/gravity_generator) "hXU" = ( /turf/closed/wall, /area/station/security/execution/education) @@ -20177,13 +22483,13 @@ /obj/effect/landmark/navigate_destination/research, /turf/open/floor/iron/white, /area/station/hallway/primary/starboard) -"hYm" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/light/floor, -/turf/open/floor/iron/large, -/area/station/hallway/secondary/spacebridge) +"hYh" = ( +/obj/structure/flora/bush/jungle/c/style_3, +/obj/effect/turf_decal/weather/dirt{ + dir = 1 + }, +/turf/open/floor/grass, +/area/station/service/chapel) "hYn" = ( /obj/effect/spawner/random/structure/crate, /turf/open/floor/plating, @@ -20274,14 +22580,12 @@ /turf/open/floor/iron, /area/station/cargo/miningfoundry) "hZf" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/layer_manifold/yellow/visible{ +/obj/effect/turf_decal/sand/plating, +/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible/layer5{ dir = 4 }, -/turf/open/floor/iron, -/area/station/engineering/atmos) +/turf/open/floor/plating/airless, +/area/space/nearstation) "hZP" = ( /obj/structure/cable, /obj/structure/sign/poster/official/random/directional/north, @@ -20342,6 +22646,16 @@ }, /turf/open/floor/wood/tile, /area/station/command/meeting_room) +"iaI" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/firedoor, +/obj/machinery/door/window/right/directional/west, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "kitchenshutters"; + name = "Kitchen Shutters" + }, +/turf/open/floor/iron, +/area/station/service/kitchen) "iaJ" = ( /obj/structure/transit_tube/crossing/horizontal, /obj/structure/lattice/catwalk, @@ -20367,16 +22681,6 @@ dir = 8 }, /area/station/maintenance/starboard/greater) -"iaO" = ( -/obj/structure/cable, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/siding/purple{ - dir = 8 - }, -/obj/machinery/holopad, -/turf/open/floor/iron/dark, -/area/station/command/heads_quarters/rd) "iaW" = ( /obj/structure/grille/broken, /obj/effect/decal/cleanable/glass/plasma, @@ -20393,17 +22697,6 @@ /obj/item/bedsheet/centcom, /turf/open/floor/carpet/royalblue, /area/station/command/corporate_suite) -"ibp" = ( -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/structure/chair{ - dir = 8 - }, -/obj/effect/turf_decal/siding/white{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/station/medical/medbay/aft) "ibv" = ( /obj/item/kirbyplants/random, /turf/open/floor/iron, @@ -20425,6 +22718,13 @@ /obj/effect/spawner/random/engineering/atmospherics_portable, /turf/open/floor/plating, /area/station/maintenance/department/medical/central) +"ibF" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/holodeck/rec_center) "ibI" = ( /obj/effect/turf_decal/siding/white/corner{ dir = 8 @@ -20459,6 +22759,18 @@ }, /turf/open/floor/wood, /area/station/hallway/secondary/entry) +"icN" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/trimline/neutral/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/neutral/line{ + dir = 8 + }, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/hallway/primary/central/fore) "icT" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -20477,6 +22789,14 @@ /obj/structure/table/reinforced, /turf/open/floor/iron/dark, /area/station/medical/medbay/central) +"idd" = ( +/obj/structure/cable, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/science/xenobiology) "ide" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -20504,6 +22824,20 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/maintenance/starboard/greater) +"ids" = ( +/obj/effect/turf_decal/tile/brown/opposingcorners{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/button/door/directional/north{ + name = "Door Bolt Control"; + id = "commiss2"; + normaldoorcontrol = 1; + specialfunctions = 4 + }, +/turf/open/floor/iron, +/area/station/commons/vacant_room/commissary) "idt" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -20595,6 +22929,33 @@ /obj/machinery/portable_atmospherics/canister/air, /turf/open/floor/plating, /area/station/ai_monitored/turret_protected/aisat/maint) +"ifg" = ( +/obj/structure/chair/sofa/bench/right, +/obj/machinery/light/dim/directional/north, +/turf/open/floor/iron/white, +/area/station/science/cytology) +"ifl" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/spawner/random/trash, +/turf/open/floor/iron/stairs{ + dir = 8 + }, +/area/station/maintenance/port/greater) +"ifH" = ( +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/stripes/red/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/red/line{ + dir = 4 + }, +/turf/open/floor/iron/small, +/area/station/hallway/primary/central/aft) "ifI" = ( /obj/effect/turf_decal/tile/neutral/fourcorners, /obj/effect/turf_decal/stripes/line{ @@ -20627,31 +22988,24 @@ dir = 1 }, /area/station/science/lobby) -"ign" = ( -/obj/structure/bed{ - dir = 4 - }, -/obj/effect/turf_decal/siding/red{ - dir = 10 - }, -/obj/machinery/light/small/directional/west, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/small, -/area/station/security/brig) -"igo" = ( -/obj/effect/turf_decal/sand/plating, -/obj/effect/decal/cleanable/dirt, -/obj/structure/chair{ - pixel_y = -2 - }, -/turf/open/floor/plating, -/area/station/maintenance/hallway/abandoned_command) "igr" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 8 }, /turf/open/floor/plating, /area/station/maintenance/fore/lesser) +"igs" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/chair/stool/directional/south, +/obj/effect/turf_decal/siding/red{ + dir = 1 + }, +/obj/effect/landmark/start/security_officer, +/obj/structure/cable, +/turf/open/floor/iron/small, +/area/station/security/office) "igD" = ( /obj/effect/turf_decal/stripes/white/line{ dir = 1 @@ -20659,6 +23013,10 @@ /obj/effect/spawner/random/structure/girder, /turf/open/floor/tram, /area/station/maintenance/department/medical/central) +"ihb" = ( +/obj/effect/spawner/random/trash, +/turf/open/floor/plating, +/area/station/maintenance/port/greater) "ihc" = ( /obj/structure/cable, /obj/machinery/door/airlock/command/glass{ @@ -20668,6 +23026,12 @@ /obj/effect/mapping_helpers/airlock/access/all/command/teleporter, /turf/open/floor/iron/dark/textured_half, /area/station/command/teleporter) +"ihd" = ( +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/turf/open/floor/iron/white, +/area/station/medical/medbay/lobby) "ihh" = ( /obj/effect/turf_decal/sand/plating, /obj/effect/decal/cleanable/dirt, @@ -20696,11 +23060,6 @@ /obj/machinery/firealarm/directional/west, /turf/open/floor/carpet/royalblue, /area/station/command/heads_quarters/captain) -"iho" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/closed/wall, -/area/station/hallway/secondary/spacebridge) "ihq" = ( /obj/effect/turf_decal/siding/wood{ dir = 1 @@ -20734,6 +23093,11 @@ "iht" = ( /turf/closed/wall/r_wall, /area/station/command/corporate_dock) +"ihv" = ( +/obj/structure/bed/maint, +/obj/effect/decal/cleanable/cobweb/cobweb2, +/turf/open/floor/eighties/red, +/area/station/service/abandoned_gambling_den/gaming) "ihA" = ( /obj/structure/transit_tube/curved{ dir = 1 @@ -20778,35 +23142,28 @@ }, /turf/open/space/basic, /area/space) -"iiC" = ( -/obj/structure/cable, -/obj/effect/turf_decal/siding/blue{ - dir = 5 - }, -/obj/machinery/light_switch/directional/east, -/obj/effect/mapping_helpers/broken_floor, -/obj/item/kirbyplants/random, -/obj/item/storage/medkit/regular{ - pixel_x = -3; - pixel_y = -3 +"iiI" = ( +/obj/structure/table/reinforced, +/obj/structure/disposalpipe/segment, +/obj/machinery/door/poddoor/shutters{ + id = "meow"; + name = "Commissary" }, -/turf/open/floor/iron/white/small, -/area/station/command/heads_quarters/cmo) +/turf/open/floor/iron, +/area/station/commons/vacant_room/commissary) "iiW" = ( /obj/structure/cable, /turf/open/floor/catwalk_floor/iron_dark, /area/station/science/xenobiology) -"ijm" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/machinery/light/cold/directional/north, +"iiX" = ( +/obj/structure/reagent_dispensers/watertank, /turf/open/floor/iron, -/area/station/hallway/primary/port) +/area/station/maintenance/port/aft) +"ijk" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "ijn" = ( /obj/effect/turf_decal/siding/purple{ dir = 5 @@ -20814,6 +23171,10 @@ /obj/machinery/light/small/directional/east, /turf/open/floor/engine/plasma, /area/station/engineering/atmos/space_catwalk) +"ijz" = ( +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron/white/small, +/area/station/commons/toilet/restrooms) "ijB" = ( /obj/machinery/atmospherics/components/trinary/mixer/flipped{ dir = 8 @@ -20849,8 +23210,8 @@ /obj/effect/turf_decal/stripes/line{ dir = 9 }, -/obj/machinery/atmospherics/pipe/layer_manifold/yellow/visible{ - dir = 4 +/obj/machinery/atmospherics/pipe/smart/manifold/yellow/visible{ + dir = 1 }, /turf/open/floor/iron, /area/station/engineering/atmos) @@ -20881,12 +23242,6 @@ dir = 4 }, /area/station/engineering/atmos) -"ikk" = ( -/obj/structure/disposalpipe/segment, -/obj/effect/mapping_helpers/broken_floor, -/obj/structure/cable, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) "ikl" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/door/firedoor, @@ -20904,16 +23259,6 @@ }, /turf/open/floor/plating, /area/station/cargo/miningoffice) -"ikt" = ( -/obj/structure/chair{ - dir = 1; - pixel_y = -2 - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/firealarm/directional/east, -/obj/machinery/camera/autoname/directional/east, -/turf/open/floor/iron, -/area/station/science/lower) "ikH" = ( /obj/structure/table/bronze, /obj/machinery/computer/security/wooden_tv{ @@ -20938,14 +23283,6 @@ }, /turf/open/floor/iron/dark/small, /area/station/command/heads_quarters/captain/private) -"ikP" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/hallway/secondary/dock) "ikU" = ( /obj/effect/turf_decal/stripes/white/line{ dir = 10 @@ -20962,27 +23299,32 @@ }, /turf/open/space/basic, /area/station/engineering/atmos/space_catwalk) -"ild" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/sorting/mail/flip{ +"ile" = ( +/obj/structure/chair{ dir = 1 }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/dark_red/half/contrasted{ - dir = 4 - }, -/obj/effect/mapping_helpers/mail_sorting/security/hos_office, -/obj/effect/turf_decal/siding/wideplating/dark{ - dir = 8 +/obj/structure/disposalpipe/segment{ + dir = 5 }, -/turf/open/floor/iron, -/area/station/security) +/turf/open/floor/iron/white, +/area/station/medical/medbay/lobby) "ill" = ( /obj/structure/frame/machine, /obj/item/circuitboard/computer/security, /turf/open/floor/plating, /area/station/maintenance/fore/lesser) +"ilo" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/spawner/random/trash, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/maintenance/port/greater) "ilw" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -20990,6 +23332,17 @@ dir = 4 }, /area/station/science/research) +"ilx" = ( +/obj/effect/turf_decal/delivery, +/obj/effect/turf_decal/stripes/end{ + dir = 1 + }, +/obj/structure/window/reinforced/spawner/directional/east, +/obj/effect/turf_decal/siding/thinplating_new{ + dir = 4 + }, +/turf/open/floor/iron/small, +/area/station/hallway/secondary/service) "ilz" = ( /obj/effect/turf_decal/stripes/line, /obj/effect/decal/cleanable/dirt/dust, @@ -21008,6 +23361,28 @@ }, /turf/open/floor/iron/smooth_large, /area/station/science/robotics/mechbay) +"ilE" = ( +/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/obj/structure/extinguisher_cabinet/directional/east, +/turf/open/floor/iron/white/small, +/area/station/science/ordnance/storage) +"ilK" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/trimline/neutral/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/neutral/line{ + dir = 8 + }, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/hallway/primary/central/fore) "ilN" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on, /obj/effect/turf_decal/stripes/white/line{ @@ -21019,6 +23394,14 @@ /obj/effect/spawner/random/engineering/atmospherics_portable, /turf/open/floor/plating, /area/station/maintenance/fore/lesser) +"img" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/central/greater) "imj" = ( /obj/machinery/door/airlock/security/glass{ id_tag = "permaouter"; @@ -21033,21 +23416,25 @@ /obj/effect/landmark/start/security_officer, /turf/open/floor/iron, /area/station/security/tram) -"imE" = ( -/obj/effect/mapping_helpers/broken_floor, -/obj/effect/landmark/atmospheric_sanity/ignore_area, -/turf/open/floor/plating, -/area/station/service/library/abandoned) -"imS" = ( -/obj/effect/turf_decal/tile/brown/opposingcorners, -/obj/effect/decal/cleanable/dirt, -/obj/structure/closet/wardrobe/miner, +"imI" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/item/radio/intercom/directional/south, /turf/open/floor/iron, -/area/station/cargo/miningoffice) +/area/station/hallway/secondary/dock) "ina" = ( /obj/structure/table, /turf/open/floor/plating, /area/station/maintenance/port/greater) +"ind" = ( +/obj/machinery/light/floor, +/obj/structure/flora/bush/flowers_br, +/turf/open/floor/grass, +/area/station/hallway/primary/central/fore) "inh" = ( /obj/structure/disposalpipe/segment, /obj/effect/turf_decal/trimline/neutral/line{ @@ -21072,29 +23459,17 @@ /turf/open/floor/iron, /area/station/cargo/miningoffice) "inU" = ( -/obj/structure/closet/firecloset, -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/yellow{ - dir = 4 - }, -/obj/effect/turf_decal/delivery, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/iron, -/area/station/hallway/primary/fore) -"inW" = ( +/obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/science/ordnance/testlab) +/turf/open/floor/iron/white/side, +/area/station/hallway/primary/central/aft) "ioa" = ( -/obj/effect/mapping_helpers/broken_floor, -/obj/effect/turf_decal/stripes/line{ - dir = 4 +/obj/effect/turf_decal/siding/wood{ + dir = 6 }, -/obj/effect/spawner/random/trash/janitor_supplies, -/turf/open/floor/plating, -/area/station/construction/mining/aux_base) +/turf/open/floor/stone, +/area/station/service/bar) "iob" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -21113,12 +23488,12 @@ /obj/effect/turf_decal/delivery/red, /turf/open/floor/iron/white/small, /area/station/medical/treatment_center) -"ioJ" = ( -/obj/effect/turf_decal/tile/brown/opposingcorners, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/holopad, +"ioz" = ( +/obj/machinery/light/small/directional/north, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, -/area/station/cargo/miningoffice) +/area/station/commons/dorms) "ioN" = ( /obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/visible, /obj/effect/turf_decal/tile/brown{ @@ -21165,6 +23540,17 @@ /obj/effect/landmark/start/shaft_miner, /turf/open/floor/iron, /area/station/cargo/miningoffice) +"ipc" = ( +/obj/structure/cable, +/obj/effect/turf_decal/tile/dark_red/opposingcorners, +/obj/machinery/power/apc/auto_name/directional/south, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/bed/dogbed/mcgriff, +/mob/living/basic/pet/dog/pug/mcgriff, +/turf/open/floor/iron, +/area/station/security/warden) "ipd" = ( /obj/effect/turf_decal/stripes/line, /obj/machinery/button/door/directional/east{ @@ -21187,6 +23573,24 @@ }, /turf/open/floor/iron/dark/smooth_large, /area/station/command/meeting_room) +"ipj" = ( +/obj/structure/cable, +/obj/machinery/airalarm/directional/north, +/obj/machinery/power/apc/auto_name/directional/east, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/ai_upload_foyer) +"ipp" = ( +/obj/effect/spawner/random/engineering/atmospherics_portable, +/turf/open/floor/iron, +/area/station/maintenance/department/medical/central) +"ipr" = ( +/obj/effect/turf_decal/tile/brown/opposingcorners, +/obj/structure/closet/wardrobe/miner, +/turf/open/floor/iron, +/area/station/cargo/miningoffice) "ips" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -21198,10 +23602,6 @@ dir = 8 }, /area/station/command/bridge) -"ipt" = ( -/obj/effect/spawner/random/engineering/atmospherics_portable, -/turf/open/floor/plating, -/area/station/maintenance/central/greater) "ipx" = ( /obj/structure/cable, /obj/effect/turf_decal/tile/neutral/fourcorners, @@ -21214,17 +23614,6 @@ }, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/rd) -"ipB" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/obj/structure/sign/departments/telecomms/directional/south, -/turf/open/floor/iron, -/area/station/hallway/secondary/dock) "ipD" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -21241,6 +23630,12 @@ /obj/machinery/airalarm/directional/south, /turf/open/floor/iron/dark, /area/station/medical/medbay/lobby) +"ipG" = ( +/obj/machinery/deepfryer, +/obj/structure/sign/poster/official/random/directional/north, +/obj/structure/cable, +/turf/open/floor/iron/kitchen/small, +/area/station/service/kitchen) "ipP" = ( /obj/effect/turf_decal/bot_white, /obj/effect/turf_decal/stripes/corner{ @@ -21250,6 +23645,26 @@ /obj/effect/spawner/random/trash/janitor_supplies, /turf/open/floor/iron/smooth_large, /area/station/cargo/warehouse) +"iqi" = ( +/obj/structure/table/wood, +/obj/item/reagent_containers/cup/glass/drinkingglass{ + pixel_x = 6; + pixel_y = 15 + }, +/obj/item/reagent_containers/cup/glass/drinkingglass{ + pixel_x = -5; + pixel_y = 15 + }, +/obj/item/reagent_containers/cup/glass/drinkingglass{ + pixel_x = 2; + pixel_y = 9 + }, +/obj/item/reagent_containers/cup/glass/drinkingglass{ + pixel_x = -7; + pixel_y = 9 + }, +/turf/open/floor/stone, +/area/station/service/abandoned_gambling_den) "iqj" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment, @@ -21308,16 +23723,6 @@ /obj/machinery/airalarm/directional/west, /turf/open/floor/iron/dark, /area/station/security/interrogation) -"iqN" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/machinery/camera/autoname/directional/west, -/obj/machinery/firealarm/directional/west, -/turf/open/floor/iron, -/area/station/hallway/primary/central/fore) "iqY" = ( /obj/machinery/atmospherics/components/binary/pump{ dir = 1; @@ -21340,6 +23745,13 @@ /obj/machinery/light/small/directional/south, /turf/open/floor/iron/small, /area/station/security/tram) +"irc" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) "iri" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -21353,15 +23765,6 @@ dir = 8 }, /area/station/command/heads_quarters/hop) -"irn" = ( -/obj/effect/turf_decal/stripes/corner{ - dir = 4 - }, -/obj/effect/mapping_helpers/broken_floor, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/camera/autoname/directional/west, -/turf/open/floor/iron/smooth, -/area/station/command/gateway) "irp" = ( /obj/machinery/door/airlock/external{ name = "Tram Maintenance" @@ -21428,6 +23831,17 @@ /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/iron, /area/station/engineering/supermatter/room) +"isD" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/obj/machinery/button/door/directional/west{ + id = "custodialshutters"; + pixel_y = 8; + pixel_x = 23 + }, +/turf/open/floor/iron, +/area/station/maintenance/hallway/abandoned_command) "isI" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -21451,6 +23865,19 @@ }, /turf/closed/wall, /area/station/hallway/primary/port) +"isO" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/structure/extinguisher_cabinet/directional/west, +/obj/effect/turf_decal/tile/neutral/opposingcorners{ + dir = 1 + }, +/obj/effect/turf_decal/siding/thinplating_new{ + dir = 8 + }, +/turf/open/floor/iron/small, +/area/station/hallway/secondary/service) "isQ" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -21464,13 +23891,6 @@ dir = 1 }, /area/station/command/gateway) -"isY" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment, -/obj/effect/decal/cleanable/dirt, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating, -/area/station/maintenance/department/medical/central) "itb" = ( /turf/closed/wall/r_wall/rust, /area/station/ai_monitored/turret_protected/aisat/maint) @@ -21529,19 +23949,6 @@ /obj/structure/table/wood, /turf/open/floor/iron/grimy, /area/station/hallway/secondary/entry) -"itY" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 8 - }, -/obj/item/stack/package_wrap{ - pixel_x = 11; - pixel_y = 6 - }, -/obj/item/stack/package_wrap{ - pixel_x = 18 - }, -/turf/open/floor/iron/diagonal, -/area/station/command/heads_quarters/hop) "iuc" = ( /obj/machinery/door/airlock/maintenance_hatch{ name = "AISat Maintenance" @@ -21554,16 +23961,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/security/prison/safe) -"iuo" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/mapping_helpers/broken_floor, -/obj/effect/turf_decal/sand/plating, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/power/apc/worn_out/directional/east, -/turf/open/floor/plating, -/area/station/maintenance/hallway/abandoned_command) "iut" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -21574,24 +23971,18 @@ /obj/effect/mapping_helpers/airlock/access/all/science/research, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) -"iux" = ( -/obj/structure/cable, +"iuF" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/station/commons/fitness/recreation/entertainment) -"iuH" = ( -/obj/machinery/atmospherics/pipe/smart/simple/dark/visible, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/camera/autoname/directional/east, -/obj/machinery/light/cold/directional/east, -/turf/open/floor/iron/dark, -/area/station/science/ordnance) -"iuL" = ( -/obj/machinery/vending/games, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/wood/parquet, -/area/station/service/library) +/obj/machinery/light_switch/directional/north, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/wood, +/area/station/cargo/boutique) +"iuR" = ( +/turf/closed/wall/r_wall, +/area/station/hallway/primary/central/aft) "iuW" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/light/small/directional/west, @@ -21607,6 +23998,17 @@ /obj/item/melee/baseball_bat, /turf/open/floor/wood, /area/station/maintenance/starboard/greater) +"ivh" = ( +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/spawner/random/trash, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/port/greater) "ivk" = ( /obj/machinery/atmospherics/components/tank/air{ dir = 8 @@ -21650,50 +24052,21 @@ /obj/structure/extinguisher_cabinet/directional/east, /turf/open/floor/iron/dark, /area/station/science/robotics/lab) -"ivO" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/girder, -/obj/effect/decal/cleanable/glass/plastitanium, -/turf/open/floor/plating, -/area/station/maintenance/fore/greater) "ivT" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 }, -/obj/machinery/atmospherics/components/unary/thermomachine/heater{ +/obj/machinery/atmospherics/pipe/smart/manifold/yellow/visible{ dir = 4 }, /turf/open/floor/iron, /area/station/engineering/atmos) -"ivX" = ( -/obj/structure/cable, -/obj/effect/mapping_helpers/broken_floor, -/obj/item/radio/intercom/directional/north, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/turf/open/floor/iron/dark/herringbone, -/area/station/ai_monitored/command/nuke_storage) "ivY" = ( /obj/structure/table/reinforced, /obj/effect/spawner/random/techstorage/tcomms_all, /obj/machinery/light/cold/directional/east, /turf/open/floor/iron, /area/station/engineering/storage/tech) -"iwa" = ( -/obj/effect/turf_decal/siding/thinplating_new/light{ - dir = 4 - }, -/obj/effect/turf_decal/siding/thinplating_new/light{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/green{ - dir = 8 - }, -/obj/machinery/light/small/directional/south, -/turf/open/floor/iron, -/area/station/service/hydroponics) "iwi" = ( /obj/structure/lattice/catwalk, /obj/structure/railing{ @@ -21705,35 +24078,24 @@ }, /turf/open/space/basic, /area/station/engineering/atmos/space_catwalk) +"iwt" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 8 + }, +/turf/open/floor/wood/parquet, +/area/station/service/library) "iwz" = ( /obj/structure/disposalpipe/segment, /turf/open/floor/iron/smooth, /area/station/engineering/break_room) -"iwJ" = ( -/obj/structure/table/wood, -/obj/machinery/light/small/directional/south, -/obj/machinery/computer/security/telescreen{ - desc = "Used for monitoring the engine."; - dir = 4; - name = "Engine Monitor"; - network = list("engine"); - pixel_x = -32 - }, -/obj/machinery/status_display/evac/directional/south, -/obj/item/radio/off{ - pixel_x = 1; - pixel_y = 3 - }, -/turf/open/floor/wood, -/area/station/command/heads_quarters/ce) -"iwZ" = ( -/obj/structure/disposalpipe/junction/flip{ - dir = 8 +"iwM" = ( +/obj/machinery/door/poddoor/preopen{ + id = "Xenolab"; + name = "Test Chamber Blast Door" }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/neutral, -/turf/open/floor/iron, -/area/station/hallway/primary/port) +/obj/structure/sign/warning/gas_mask/directional/north, +/turf/open/floor/catwalk_floor/iron, +/area/station/science/xenobiology) "ixl" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -21746,6 +24108,10 @@ /obj/structure/cable, /turf/open/floor/iron/small, /area/station/maintenance/solars/port/aft) +"ixG" = ( +/obj/machinery/airalarm/directional/north, +/turf/open/floor/iron, +/area/station/engineering/storage/tech) "ixM" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -21754,19 +24120,14 @@ /obj/machinery/airalarm/directional/east, /turf/open/floor/iron, /area/station/hallway/secondary/entry) -"ixP" = ( -/obj/structure/table, -/obj/machinery/firealarm/directional/south, -/obj/item/restraints/legcuffs/beartrap, -/obj/item/stack/tile/iron/base{ - pixel_y = 18 - }, -/obj/item/grenade/chem_grenade/cleaner{ - pixel_x = -7; - pixel_y = 12 +"ixT" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/siding/purple{ + dir = 1 }, -/turf/open/floor/iron, -/area/station/service/janitor) +/obj/effect/turf_decal/siding/purple/corner, +/turf/open/floor/iron/dark, +/area/station/science/genetics) "ixU" = ( /obj/effect/turf_decal/tile/neutral/fourcorners, /obj/effect/decal/cleanable/dirt, @@ -21778,10 +24139,6 @@ /obj/item/stamp/head/rd, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/rd) -"ixX" = ( -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating, -/area/station/cargo/miningoffice) "iya" = ( /obj/structure/cable, /obj/effect/spawner/structure/window/reinforced, @@ -21794,6 +24151,17 @@ }, /turf/open/floor/plating, /area/station/security/brig/entrance) +"iyh" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/trimline/neutral/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/neutral/line{ + dir = 8 + }, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/hallway/primary/central/fore) "iyl" = ( /obj/effect/turf_decal/stripes/line{ dir = 5 @@ -21824,6 +24192,25 @@ }, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/ai) +"iyr" = ( +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 8 + }, +/obj/machinery/light/cold/directional/north, +/obj/machinery/newscaster/directional/north, +/turf/open/floor/iron/dark/side{ + dir = 9 + }, +/area/station/science/ordnance/testlab) +"iyt" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/siding, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/turf/open/floor/iron/white/small, +/area/station/science/lab) "iyC" = ( /obj/effect/turf_decal/tile/neutral/fourcorners, /obj/effect/turf_decal/siding/purple{ @@ -21835,19 +24222,39 @@ /obj/item/radio/intercom/directional/east, /turf/open/floor/iron/dark, /area/station/science/genetics) +"iyR" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 9 + }, +/turf/open/floor/grass, +/area/station/service/chapel) +"izh" = ( +/obj/item/shovel, +/turf/open/floor/plating, +/area/station/maintenance/department/prison) +"izk" = ( +/obj/machinery/door/airlock{ + id_tag = "Toilet1"; + name = "Unit 1" + }, +/turf/open/floor/iron/white/small, +/area/station/commons/toilet/restrooms) "izm" = ( /obj/effect/turf_decal/siding/dark{ dir = 9 }, /turf/open/floor/engine/co2, /area/station/engineering/atmos/space_catwalk) -"izB" = ( -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/structure/sign/painting/library{ - pixel_y = 32 +"izo" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/door/airlock/grunge{ + name = "Vacant Comissary" }, -/turf/open/floor/iron/smooth, -/area/station/service/library) +/turf/open/floor/iron/textured_half{ + dir = 1 + }, +/area/station/maintenance/central/lesser) "izD" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -21865,10 +24272,6 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/catwalk_floor, /area/station/engineering/atmos/storage/gas) -"izL" = ( -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating, -/area/station/maintenance/department/bridge) "izT" = ( /obj/effect/turf_decal/stripes/red/line{ dir = 8 @@ -21886,6 +24289,27 @@ /obj/machinery/field/generator, /turf/open/floor/iron/dark/small, /area/station/engineering/storage_shared) +"iAu" = ( +/obj/structure/bed{ + dir = 4 + }, +/obj/effect/spawner/random/bedsheet{ + dir = 4 + }, +/obj/machinery/button/door/directional/west{ + name = "Cabin Bolt Control"; + normaldoorcontrol = 1; + specialfunctions = 4; + id = "Cabin1" + }, +/turf/open/floor/carpet/orange, +/area/station/commons/dorms) +"iAv" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/trash, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/fore/greater) "iAy" = ( /obj/structure/table, /obj/item/clothing/shoes/sneakers/orange{ @@ -21949,6 +24373,14 @@ }, /turf/open/floor/iron/white, /area/station/security/medical) +"iBa" = ( +/obj/effect/turf_decal/siding/wood, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/chair/wood{ + dir = 4 + }, +/turf/open/floor/iron/grimy, +/area/station/service/bar) "iBc" = ( /obj/effect/turf_decal/siding/thinplating_new/terracotta{ dir = 5 @@ -21956,11 +24388,6 @@ /obj/machinery/power/shieldwallgen, /turf/open/floor/iron/smooth_large, /area/station/command/teleporter) -"iBg" = ( -/obj/structure/table, -/obj/item/trash/candle, -/turf/open/floor/iron/showroomfloor, -/area/station/service/cafeteria) "iBj" = ( /obj/structure/table/glass, /obj/item/folder/red{ @@ -21984,6 +24411,10 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron/smooth, /area/station/hallway/secondary/command) +"iBB" = ( +/obj/structure/table, +/turf/open/floor/iron/kitchen/small, +/area/station/service/kitchen) "iBE" = ( /obj/effect/turf_decal/sand/plating, /obj/structure/cable, @@ -22014,6 +24445,29 @@ }, /turf/open/floor/carpet/royalblue, /area/station/command/heads_quarters/captain) +"iCi" = ( +/obj/machinery/computer/security/telescreen/isolation/directional/north{ + name = "reflection room monitor" + }, +/obj/effect/turf_decal/stripes/white/corner{ + dir = 1 + }, +/obj/item/kirbyplants/random, +/obj/machinery/firealarm/directional/east, +/obj/machinery/button/flasher{ + id = "IsolationFlash"; + pixel_x = 28; + pixel_y = 28 + }, +/turf/open/floor/iron/dark/small, +/area/station/security/execution/education) +"iCj" = ( +/obj/effect/turf_decal/stripes/red/line{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/turf/open/floor/iron, +/area/station/commons/fitness/recreation/entertainment) "iCp" = ( /obj/structure/railing{ dir = 1 @@ -22021,6 +24475,15 @@ /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/wood, /area/station/engineering/atmos/office) +"iCq" = ( +/obj/effect/turf_decal/siding/thinplating/terracotta{ + dir = 8 + }, +/obj/effect/turf_decal/siding/wideplating/dark/corner{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/commons/dorms) "iCr" = ( /obj/machinery/light/small/directional/east, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -22080,6 +24543,13 @@ /obj/machinery/light/small/directional/south, /turf/open/floor/iron/white, /area/station/security/medical) +"iDA" = ( +/obj/structure/chair/comfy/black{ + dir = 4 + }, +/obj/effect/landmark/start/detective, +/turf/open/floor/wood, +/area/station/security/detectives_office) "iDH" = ( /obj/effect/turf_decal/siding/wood, /obj/structure/chair/office/light{ @@ -22121,12 +24591,6 @@ dir = 8 }, /area/station/hallway/secondary/construction) -"iEK" = ( -/obj/structure/cable, -/obj/effect/mapping_helpers/broken_floor, -/obj/effect/spawner/random/maintenance, -/turf/open/floor/plating, -/area/station/maintenance/fore/lesser) "iEP" = ( /obj/structure/cable, /obj/machinery/door/airlock{ @@ -22147,39 +24611,35 @@ /obj/machinery/power/apc/auto_name/directional/east, /turf/open/floor/wood/large, /area/station/command/corporate_suite) -"iEX" = ( -/obj/structure/disposalpipe/trunk{ - dir = 1 - }, -/obj/structure/window/spawner/directional/north, -/obj/effect/turf_decal/stripes/end{ - dir = 8 - }, -/obj/structure/disposaloutlet{ - dir = 4; - name = "Cargo Deliveries" - }, -/turf/open/floor/plating, -/area/station/hallway/secondary/service) -"iEZ" = ( -/obj/structure/chair{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/engineering/gravity_generator) "iFb" = ( /obj/effect/turf_decal/tile/blue, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /turf/open/floor/iron/white, /area/station/medical/medbay/aft) -"iFi" = ( -/obj/effect/spawner/random/vending/colavend, -/turf/open/floor/plating/rust, -/area/station/maintenance/fore/greater) +"iFm" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 1 + }, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/station/science/xenobiology) "iFs" = ( /obj/structure/window/spawner/directional/east, /turf/open/misc/sandy_dirt, /area/station/medical/medbay/lobby) +"iFD" = ( +/obj/effect/turf_decal/plaque{ + icon_state = "L5"; + pixel_y = -15 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central/aft) "iFE" = ( /obj/effect/mapping_helpers/broken_floor, /obj/structure/chair/office{ @@ -22199,6 +24659,19 @@ /obj/machinery/light/small/directional/west, /turf/open/floor/iron/smooth_corner, /area/station/engineering/supermatter/room) +"iGd" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/siding/wood/corner, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 8 + }, +/obj/structure/cable, +/turf/open/floor/stone, +/area/station/service/bar/backroom) "iGl" = ( /turf/open/floor/plating, /area/station/maintenance/hallway/abandoned_command) @@ -22213,6 +24686,16 @@ }, /turf/open/floor/catwalk_floor/iron_smooth, /area/station/maintenance/solars/port/aft) +"iGq" = ( +/obj/effect/landmark/start/librarian, +/turf/open/floor/wood/parquet, +/area/station/service/library) +"iGt" = ( +/obj/structure/cable, +/obj/machinery/duct, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/fore/greater) "iGA" = ( /obj/structure/disposalpipe/segment{ dir = 9 @@ -22223,11 +24706,43 @@ /obj/structure/chair/stool/directional/east, /turf/open/floor/iron/cafeteria, /area/station/security/prison/mess) +"iGM" = ( +/obj/effect/turf_decal/bot, +/obj/machinery/light/cold/dim/directional/east, +/obj/machinery/newscaster/directional/east, +/obj/structure/cable, +/obj/structure/table/reinforced, +/obj/item/paper_bin{ + pixel_x = 5; + pixel_y = 19 + }, +/obj/item/pen{ + pixel_x = 5; + pixel_y = 20 + }, +/obj/machinery/cell_charger{ + pixel_x = 2; + pixel_y = 1 + }, +/obj/item/stock_parts/power_store/cell/high{ + pixel_x = 2; + pixel_y = 2 + }, +/turf/open/floor/iron/smooth, +/area/station/engineering/break_room) "iGO" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/broken_flooring/pile/directional/east, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) +"iGS" = ( +/obj/effect/turf_decal/tile/brown/opposingcorners{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/commons/vacant_room/commissary) "iHg" = ( /obj/structure/cable, /obj/machinery/door/airlock/maintenance/external{ @@ -22237,27 +24752,30 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/fore/lesser) -"iHs" = ( -/obj/machinery/portable_atmospherics/canister/air, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating/rust, -/area/station/maintenance/fore/greater) +"iHq" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/dark_red/opposingcorners, +/obj/machinery/camera/autoname/directional/west, +/obj/machinery/light/small/directional/west, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/station/security/brig/entrance) +"iHv" = ( +/obj/structure/table, +/obj/machinery/computer/security/telescreen/ordnance/directional/north, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/station/science/ordnance/testlab) "iHw" = ( /obj/effect/spawner/random/structure/barricade, /turf/open/floor/plating, /area/station/maintenance/department/engine/atmos) -"iHH" = ( -/obj/effect/spawner/random/medical/two_percent_xeno_egg_spawner, -/obj/effect/mapping_helpers/broken_floor, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/engine, -/area/station/science/xenobiology) -"iHL" = ( -/obj/structure/bookcase/random, -/obj/machinery/camera/autoname/directional/south, -/obj/machinery/airalarm/directional/south, -/turf/open/floor/wood/parquet, -/area/station/service/library) +"iHz" = ( +/obj/machinery/airalarm/directional/east, +/turf/open/floor/stone, +/area/station/service/abandoned_gambling_den) "iHM" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -22266,15 +24784,20 @@ dir = 1 }, /area/station/science/lower) -"iIe" = ( -/obj/structure/table/wood, -/turf/open/floor/plating/rust, -/area/station/service/library/abandoned) -"iIq" = ( -/obj/structure/table/wood, -/obj/item/flashlight/lantern, +"iHT" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, -/area/station/service/library/abandoned) +/area/station/maintenance/port/greater) +"iIs" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/machinery/light/small/directional/north, +/turf/open/floor/iron, +/area/station/hallway/secondary/recreation) "iIv" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 8 @@ -22299,6 +24822,22 @@ }, /turf/open/floor/iron/dark/textured_edge, /area/station/command/heads_quarters/hop) +"iIK" = ( +/obj/effect/turf_decal/bot, +/obj/structure/rack, +/obj/item/stack/sheet/plasteel/fifty, +/obj/item/stack/sheet/plastic/five, +/obj/item/stack/sheet/rglass/fifty, +/obj/item/storage/medkit/fire{ + pixel_x = 1; + pixel_y = 4 + }, +/obj/machinery/airalarm/directional/east, +/obj/item/stock_parts/power_store/cell/emproof{ + pixel_y = 9 + }, +/turf/open/floor/iron/small, +/area/station/engineering/break_room) "iIN" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -22315,6 +24854,12 @@ }, /turf/open/floor/iron/smooth, /area/station/security/checkpoint/escape) +"iIU" = ( +/obj/machinery/vending/wardrobe/det_wardrobe, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/computer/security/telescreen/normal/directional/west, +/turf/open/floor/wood, +/area/station/security/detectives_office) "iIW" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -22330,6 +24875,14 @@ }, /turf/open/floor/iron/dark, /area/station/engineering/lobby) +"iIZ" = ( +/obj/machinery/door/airlock/public/glass{ + name = "Dorms" + }, +/obj/machinery/door/firedoor, +/obj/structure/cable, +/turf/open/floor/iron/textured_half, +/area/station/commons/dorms) "iJb" = ( /obj/structure/cable, /obj/structure/table/glass, @@ -22365,6 +24918,15 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood, /area/station/cargo/miningfoundry) +"iJq" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/tile/yellow/anticorner/contrasted{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/commons/storage/tools) "iJt" = ( /obj/machinery/door/airlock{ name = "Maintenance" @@ -22393,14 +24955,6 @@ /obj/structure/sign/poster/official/random/directional/north, /turf/open/floor/iron/white, /area/station/medical/medbay/central) -"iJF" = ( -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/station/tcommsat/server) "iJI" = ( /obj/structure/table/glass, /obj/item/folder/blue, @@ -22476,25 +25030,38 @@ /obj/effect/spawner/random/trash/food_packaging, /turf/open/floor/plating, /area/station/maintenance/starboard/greater) +"iKB" = ( +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/neutral/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/neutral/line, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/hallway/primary/central/fore) "iKK" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/purple/visible, /obj/machinery/meter, /obj/effect/turf_decal/tile/yellow, /turf/open/floor/iron, /area/station/engineering/atmos/pumproom) -"iKN" = ( -/obj/effect/mapping_helpers/broken_floor, -/obj/structure/window/reinforced/spawner/directional/north, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/station/maintenance/fore/greater) -"iLc" = ( -/obj/effect/turf_decal/siding/red{ +"iLe" = ( +/obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/siding/red, /turf/open/floor/iron/white/small, /area/station/security/warden) +"iLh" = ( +/obj/effect/landmark/start/hangover, +/turf/open/floor/iron/smooth, +/area/station/service/library) "iLp" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -22507,12 +25074,19 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/hallway/primary/starboard) -"iLr" = ( -/obj/machinery/computer/slot_machine{ - pixel_y = 2 +"iLA" = ( +/obj/structure/closet/firecloset, +/obj/effect/turf_decal/tile/blue{ + dir = 1 }, -/turf/open/floor/plating, -/area/station/service/abandoned_gambling_den) +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 4 + }, +/obj/item/radio/intercom/directional/west, +/turf/open/floor/iron/dark/side{ + dir = 8 + }, +/area/station/hallway/primary/central/fore) "iLC" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -22532,14 +25106,17 @@ dir = 8 }, /area/station/hallway/primary/central/fore) -"iLK" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 +"iLH" = ( +/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, +/obj/machinery/door/airlock/maintenance{ + name = "Maintenance" }, -/obj/structure/sign/departments/holy/directional/north, -/turf/open/floor/iron, -/area/station/hallway/primary/port) +/obj/structure/cable, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 1 + }, +/turf/open/floor/plating, +/area/station/maintenance/port/greater) "iLN" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -22555,10 +25132,31 @@ /obj/structure/lattice/catwalk, /turf/open/space/basic, /area/station/solars/starboard/aft) +"iLS" = ( +/obj/structure/table, +/obj/item/stock_parts/matter_bin{ + pixel_x = 6; + pixel_y = 15 + }, +/obj/item/stock_parts/matter_bin{ + pixel_y = 5 + }, +/obj/item/multitool, +/obj/item/flatpack{ + board = /obj/item/circuitboard/machine/flatpacker + }, +/turf/open/floor/iron/dark, +/area/station/science/lab) "iLV" = ( /obj/machinery/recharge_station, /turf/open/floor/plating, /area/station/maintenance/department/bridge) +"iLZ" = ( +/obj/structure/table, +/obj/machinery/cell_charger, +/obj/item/stock_parts/power_store/cell/high, +/turf/open/floor/circuit, +/area/station/maintenance/port/aft) "iMg" = ( /obj/structure/closet/crate, /obj/effect/turf_decal/stripes/line{ @@ -22584,9 +25182,6 @@ /obj/effect/mapping_helpers/airlock/access/any/security/maintenance, /turf/open/floor/plating, /area/station/maintenance/port/aft) -"iMy" = ( -/turf/open/misc/asteroid, -/area/space/nearstation) "iMC" = ( /obj/machinery/flasher/portable, /turf/open/floor/plating, @@ -22642,11 +25237,6 @@ /obj/machinery/airalarm/directional/west, /turf/open/floor/iron/smooth, /area/station/hallway/secondary/command) -"iNz" = ( -/obj/structure/sink/kitchen/directional/south, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/iron/kitchen/small, -/area/station/security/prison/mess) "iNA" = ( /obj/machinery/light/cold/directional/east, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ @@ -22655,19 +25245,30 @@ /turf/open/floor/iron, /area/station/hallway/secondary/entry) "iNC" = ( -/obj/effect/mapping_helpers/broken_floor, -/obj/structure/rack, -/obj/item/binoculars, -/obj/machinery/camera/directional/south{ - c_tag = "Atmospherics - South" +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/stripes/red/line{ + dir = 4 }, -/turf/open/floor/iron/dark, -/area/station/science/ordnance/testlab) +/obj/effect/turf_decal/stripes/red/line{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/small, +/area/station/hallway/secondary/exit/departure_lounge) "iNE" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/spawner/random/vending/snackvend, /turf/open/floor/plating, /area/station/maintenance/port/fore) +"iNF" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central/aft) "iNO" = ( /obj/effect/turf_decal/stripes/white/line{ dir = 6 @@ -22675,6 +25276,13 @@ /obj/effect/spawner/random/structure/girder, /turf/open/floor/tram, /area/station/security/tram) +"iNS" = ( +/obj/structure/chair{ + dir = 1 + }, +/obj/machinery/airalarm/directional/south, +/turf/open/floor/iron/showroomfloor, +/area/station/commons/toilet/auxiliary) "iNV" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 4 @@ -22768,19 +25376,26 @@ }, /turf/open/floor/iron/grimy, /area/station/tcommsat/server) -"iOG" = ( -/obj/structure/closet/crate, -/obj/item/stack/license_plates/empty/fifty, -/obj/item/stack/license_plates/empty/fifty, -/obj/item/stack/license_plates/empty/fifty, -/obj/item/stack/license_plates/empty/fifty, -/obj/item/stack/license_plates/empty/fifty, -/obj/item/stack/license_plates/empty/fifty, -/obj/effect/spawner/random/contraband/prison, -/obj/effect/spawner/random/contraband/prison, +"iOL" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/neutral/half/contrasted, +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/turf/open/floor/iron/dark/side, +/area/station/science/xenobiology) +"iOM" = ( +/obj/structure/cable, +/obj/item/storage/bag/trash, /obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/security/prison/work) +/turf/open/floor/plating, +/area/station/security/prison/safe) +"iOY" = ( +/obj/effect/spawner/random/maintenance, +/obj/effect/spawner/random/structure/crate_abandoned, +/turf/open/floor/plating, +/area/station/maintenance/fore/greater) "iPg" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -22797,6 +25412,18 @@ /obj/structure/cable, /turf/open/floor/circuit/green, /area/station/ai_monitored/command/nuke_storage) +"iPn" = ( +/mob/living/simple_animal/bot/secbot/beepsky/armsky, +/obj/effect/turf_decal/tile/dark_red/opposingcorners, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/security/armory) +"iPy" = ( +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/security/prison/garden) "iPF" = ( /obj/structure/cable, /obj/effect/spawner/structure/window/reinforced, @@ -22820,10 +25447,20 @@ /obj/structure/curtain, /turf/open/floor/iron/freezer, /area/station/command/heads_quarters/captain/private) +"iQe" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/turf/open/floor/stone, +/area/station/service/bar) "iQl" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/station/maintenance/hallway/abandoned_command) +"iQp" = ( +/obj/structure/flora/bush/sparsegrass, +/turf/open/floor/grass, +/area/station/service/chapel) "iQr" = ( /obj/effect/turf_decal/tile/brown{ dir = 1 @@ -22836,15 +25473,20 @@ /obj/machinery/light_switch/directional/east, /turf/open/floor/iron/dark/side, /area/station/engineering/hallway) -"iQK" = ( -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/obj/effect/mapping_helpers/broken_floor, -/obj/effect/mapping_helpers/broken_floor, +"iQC" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/plating/rust, -/area/station/maintenance/fore/greater) +/turf/open/floor/plating/elevatorshaft, +/area/station/commons/dorms) +"iQT" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/iron/white/small, +/area/station/service/janitor) "iQU" = ( /obj/structure/closet{ name = "janitorial supplies" @@ -22855,6 +25497,28 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/dark/small, /area/station/service/chapel/storage) +"iQV" = ( +/obj/effect/turf_decal/siding/wideplating/dark{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/iron/small, +/area/station/commons/fitness/locker_room) +"iRl" = ( +/obj/structure/table/wood, +/obj/item/food/grown/citrus/lemon{ + pixel_y = 12; + pixel_x = 4 + }, +/obj/item/food/grown/citrus/orange{ + pixel_y = 6; + pixel_x = -4 + }, +/obj/item/food/grown/citrus/lime{ + pixel_x = 3 + }, +/turf/open/floor/stone, +/area/station/service/abandoned_gambling_den) "iRp" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden{ @@ -22862,15 +25526,6 @@ }, /turf/open/floor/plating, /area/station/engineering/atmos/office) -"iRv" = ( -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/obj/effect/mapping_helpers/broken_floor, -/obj/effect/decal/cleanable/glass/plastitanium, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/plating, -/area/station/maintenance/fore/greater) "iRz" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable, @@ -22913,6 +25568,9 @@ "iSr" = ( /turf/open/floor/iron, /area/station/security/execution/transfer) +"iSD" = ( +/turf/open/misc/dirt/jungle, +/area/station/service/chapel) "iSE" = ( /obj/machinery/atmospherics/pipe/layer_manifold/cyan/visible, /obj/effect/landmark/start/atmospheric_technician, @@ -22926,14 +25584,12 @@ /obj/structure/sign/warning/pods/directional/west, /turf/open/floor/iron/checker, /area/station/security/breakroom) -"iSW" = ( -/obj/structure/rack, -/obj/item/clothing/gloves/boxing/yellow, -/obj/item/clothing/gloves/boxing/green{ - pixel_y = 4 +"iTe" = ( +/obj/effect/turf_decal/siding/red{ + dir = 6 }, -/turf/open/floor/plating, -/area/station/maintenance/fore/greater) +/turf/open/floor/iron/small, +/area/station/security/office) "iTn" = ( /obj/machinery/firealarm/directional/north, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ @@ -22945,6 +25601,16 @@ /obj/item/kirbyplants/random, /turf/open/floor/wood/parquet, /area/station/service/library) +"iTy" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/maintenance/department/medical/central) "iTB" = ( /obj/structure/cable, /obj/structure/window/reinforced/spawner/directional/south, @@ -22956,15 +25622,17 @@ dir = 1 }, /area/station/science/xenobiology) -"iTC" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 +"iTN" = ( +/obj/machinery/door/airlock/public/glass{ + name = "Holodeck Door" }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/hallway/secondary/entry) +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "holodeck" + }, +/turf/open/floor/iron/textured_half{ + dir = 8 + }, +/area/station/commons/fitness/recreation/entertainment) "iTP" = ( /obj/structure/cable, /obj/machinery/door/airlock/external{ @@ -23001,36 +25669,26 @@ /obj/item/crowbar/large/old, /turf/open/floor/plating, /area/station/maintenance/hallway/abandoned_command) -"iUy" = ( -/obj/structure/reagent_dispensers/plumbed, -/turf/open/floor/plating, -/area/station/maintenance/fore/greater) -"iUz" = ( -/obj/structure/falsewall, -/turf/open/floor/iron, -/area/station/service/library/abandoned) -"iUF" = ( -/obj/structure/table/wood, -/obj/effect/mapping_helpers/broken_floor, -/obj/item/reagent_containers/cup/glass/drinkingglass{ - pixel_x = 7; - pixel_y = 12 - }, -/obj/item/reagent_containers/cup/glass/drinkingglass{ - pixel_x = 1; - pixel_y = 5 +"iUh" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 }, -/obj/item/reagent_containers/cup/glass/drinkingglass{ - pixel_x = -4; - pixel_y = 12 +/obj/structure/disposalpipe/segment, +/obj/structure/disposalpipe/segment{ + dir = 4 }, -/obj/item/reagent_containers/cup/glass/drinkingglass{ - pixel_x = -10; - pixel_y = 5 +/turf/open/floor/iron, +/area/station/hallway/primary/port) +"iUH" = ( +/obj/effect/turf_decal/tile/neutral, +/obj/machinery/camera/autoname/directional/south, +/obj/structure/disposalpipe/segment{ + dir = 4 }, -/obj/effect/decal/cleanable/cobweb/cobweb2, -/turf/open/floor/plating, -/area/station/service/abandoned_gambling_den) +/turf/open/floor/iron, +/area/station/hallway/primary/port) "iUK" = ( /obj/effect/turf_decal/stripes/white/line{ dir = 8 @@ -23044,6 +25702,13 @@ /obj/machinery/disposal/bin/tagger, /turf/open/floor/iron, /area/station/cargo/storage) +"iUT" = ( +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 10 + }, +/obj/machinery/duct, +/turf/open/floor/iron/showroomfloor, +/area/station/commons/dorms) "iVq" = ( /obj/effect/turf_decal/stripes/white/line{ dir = 10 @@ -23051,6 +25716,9 @@ /obj/item/stack/sheet/mineral/titanium, /turf/open/floor/tram, /area/station/security/tram) +"iVr" = ( +/turf/closed/mineral/random/stationside, +/area/station/maintenance/fore/greater) "iVu" = ( /obj/structure/transport/linear/tram, /obj/machinery/transport/tram_controller, @@ -23102,6 +25770,23 @@ }, /turf/open/floor/plating, /area/station/cargo/miningoffice) +"iVP" = ( +/obj/structure/rack, +/obj/effect/turf_decal/tile/brown/opposingcorners{ + dir = 1 + }, +/obj/item/storage/toolbox/mechanical{ + pixel_x = 2; + pixel_y = 3 + }, +/obj/item/storage/toolbox/electrical{ + pixel_x = 4; + pixel_y = 6 + }, +/obj/item/clothing/head/utility/welding, +/obj/structure/extinguisher_cabinet/directional/west, +/turf/open/floor/iron, +/area/station/commons/vacant_room/commissary) "iVT" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -23111,6 +25796,39 @@ /obj/item/flashlight, /turf/open/floor/plating, /area/station/hallway/secondary/dock) +"iVW" = ( +/obj/machinery/atmospherics/pipe/smart/simple/general/visible{ + dir = 10 + }, +/obj/structure/table, +/obj/item/cigarette, +/obj/item/toy/toy_dagger, +/obj/item/clothing/head/collectable/paper, +/obj/item/toy/figure/roboticist{ + pixel_x = 6; + pixel_y = 6 + }, +/obj/item/toy/figure/syndie{ + pixel_y = 5; + pixel_x = -6 + }, +/obj/item/toy/figure/md{ + pixel_x = 10 + }, +/obj/item/toy/figure/hop{ + pixel_x = 2; + pixel_y = -2 + }, +/obj/item/toy/figure/ian{ + pixel_x = -5; + pixel_y = -1 + }, +/obj/item/toy/figure/lawyer{ + pixel_x = -10 + }, +/obj/item/toy/figure/detective, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) "iVY" = ( /obj/effect/turf_decal/siding/brown{ dir = 1 @@ -23154,6 +25872,18 @@ /obj/machinery/light/small/directional/north, /turf/open/floor/stone, /area/station/command/heads_quarters/hos) +"iWp" = ( +/obj/machinery/newscaster/directional/north, +/turf/open/floor/iron/dark, +/area/station/security/office) +"iWs" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/dark_red/half/contrasted{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/security/execution/transfer) "iWE" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -23173,25 +25903,6 @@ /obj/effect/landmark/start/chemist, /turf/open/floor/iron/dark, /area/station/medical/pharmacy) -"iWS" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/obj/structure/sign/poster/official/random/directional/north, -/obj/item/radio{ - desc = "An old handheld radio. You could use it, if you really wanted to."; - icon_state = "radio"; - name = "old radio"; - pixel_x = -6; - pixel_y = 10 - }, -/turf/open/floor/iron/dark, -/area/station/cargo/office) -"iWT" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/smooth, -/area/station/maintenance/solars/starboard/fore) "iWV" = ( /obj/structure/sign/poster/official/random/directional/west, /obj/structure/frame/computer{ @@ -23239,15 +25950,11 @@ }, /area/station/engineering/supermatter/room) "iXi" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/camera/motion/directional/south{ - c_tag = "Captain's Office - Emergency" - }, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating, -/area/station/maintenance/hallway/abandoned_command) +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/closed/wall/r_wall, +/area/station/hallway/primary/central/aft) "iXm" = ( /obj/structure/cable, /obj/structure/disposalpipe/sorting/mail/flip{ @@ -23266,6 +25973,13 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/closed/wall/r_wall, /area/station/maintenance/department/electrical) +"iXy" = ( +/obj/effect/turf_decal/siding/wideplating/dark{ + dir = 4 + }, +/obj/machinery/light_switch/directional/east, +/turf/open/floor/iron/small, +/area/station/commons/fitness/locker_room) "iXB" = ( /obj/effect/turf_decal/siding/dark_red{ dir = 4 @@ -23274,6 +25988,41 @@ /obj/effect/spawner/random/armory/e_gun, /turf/open/floor/iron/dark/small, /area/station/ai_monitored/security/armory) +"iXM" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/camera/autoname/directional/east, +/turf/open/floor/iron/dark, +/area/station/science/server) +"iXW" = ( +/obj/structure/sign/poster/official/random/directional/north, +/obj/structure/table/wood, +/obj/item/gun/ballistic/shotgun/doublebarrel, +/obj/structure/reagent_dispensers/beerkeg, +/obj/structure/reagent_dispensers/beerkeg{ + pixel_y = 5 + }, +/obj/machinery/camera/autoname/directional/north, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/turf/open/floor/stone, +/area/station/service/bar/backroom) +"iXZ" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/neutral, +/obj/structure/disposalpipe/junction/flip{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/port) +"iYd" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/grimy, +/area/station/service/library) "iYh" = ( /obj/structure/fluff/broken_canister_frame, /turf/open/floor/plating, @@ -23314,6 +26063,12 @@ /obj/structure/cable, /turf/open/floor/iron/small, /area/station/security/processing) +"iZu" = ( +/obj/effect/turf_decal/tile/neutral/full, +/obj/item/kirbyplants/random, +/obj/machinery/light/small/directional/west, +/turf/open/floor/iron/dark/smooth_large, +/area/station/maintenance/central/lesser) "iZy" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment, @@ -23338,13 +26093,6 @@ }, /turf/open/floor/wood/large, /area/station/command/heads_quarters/captain) -"iZF" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/spawner/random/trash, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/plating, -/area/station/maintenance/port/aft) "iZH" = ( /obj/effect/mapping_helpers/broken_floor, /obj/machinery/hydroponics/soil{ @@ -23353,16 +26101,6 @@ /obj/effect/spawner/random/food_or_drink/seed, /turf/open/misc/sandy_dirt, /area/station/maintenance/starboard/aft) -"iZI" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/table/wood, -/obj/effect/turf_decal/tile/neutral/full, -/obj/effect/turf_decal/siding/wood{ - dir = 8 - }, -/turf/open/floor/iron/smooth_large, -/area/station/service/bar) "iZK" = ( /obj/structure/disposalpipe/segment{ dir = 9 @@ -23380,12 +26118,28 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/fore) +"iZM" = ( +/obj/effect/turf_decal/siding/wood, +/obj/structure/cable, +/turf/open/floor/wood/parquet, +/area/station/service/library) "iZU" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/light/directional/east, /turf/open/floor/wood/large, /area/station/command/heads_quarters/captain) +"iZW" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/obj/effect/turf_decal/trimline/neutral/line, +/obj/effect/turf_decal/trimline/neutral/line{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/port) "jad" = ( /obj/effect/turf_decal/siding/wood{ dir = 1 @@ -23421,15 +26175,6 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /turf/open/floor/iron/small, /area/station/ai_monitored/command/storage/eva) -"jaG" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/chair{ - dir = 1 - }, -/obj/machinery/camera/autoname/directional/south, -/obj/machinery/light/small/directional/south, -/turf/open/floor/iron/showroomfloor, -/area/station/commons/toilet/auxiliary) "jaK" = ( /obj/effect/turf_decal/siding/thinplating_new/terracotta{ dir = 1 @@ -23465,24 +26210,6 @@ "jaQ" = ( /turf/open/floor/catwalk_floor/iron_dark, /area/station/security/processing) -"jbb" = ( -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating, -/area/station/maintenance/aft) -"jbc" = ( -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/structure/table/reinforced, -/obj/machinery/cell_charger, -/obj/item/stock_parts/cell/high{ - pixel_x = 4; - pixel_y = 5 - }, -/obj/item/stock_parts/cell/high, -/turf/open/floor/iron/dark, -/area/station/science/robotics/lab) "jbd" = ( /obj/structure/cable, /obj/effect/spawner/structure/window/reinforced, @@ -23492,20 +26219,19 @@ }, /turf/open/floor/plating, /area/station/command/heads_quarters/rd) -"jbm" = ( -/obj/machinery/firealarm/directional/south, -/obj/effect/decal/cleanable/dirt, -/obj/structure/broken_flooring/corner/directional/north, -/obj/structure/sign/poster/official/random/directional/west, -/obj/effect/spawner/random/vending/snackvend, -/turf/open/floor/plating, -/area/station/commons/fitness/recreation/entertainment) "jbo" = ( /obj/effect/turf_decal/siding/yellow{ dir = 9 }, /turf/open/floor/engine/n2o, /area/station/engineering/atmos/space_catwalk) +"jbp" = ( +/obj/structure/flora/bush/jungle, +/obj/structure/flora/rock/pile/style_3, +/obj/structure/window/spawner/directional/east, +/obj/structure/window/spawner/directional/west, +/turf/open/misc/sandy_dirt, +/area/station/commons/fitness/recreation/entertainment) "jbr" = ( /obj/structure/table/glass, /obj/item/folder/blue{ @@ -23514,12 +26240,44 @@ }, /turf/open/floor/wood/parquet, /area/station/command/heads_quarters/cmo) +"jbs" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/neutral/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/neutral/line, +/obj/machinery/navbeacon{ + codes_txt = "patrol;next_patrol=16.0-CentralFore-CentralPort"; + location = "15.0-CentralStarboard-CentralFore" + }, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/hallway/primary/central/fore) "jbt" = ( /obj/effect/turf_decal/stripes/white/line{ dir = 8 }, /turf/open/floor/tram, /area/station/maintenance/department/medical/central) +"jby" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/door/airlock/maintenance{ + name = "Maintenance" + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/maintenance/port/greater) "jbV" = ( /obj/machinery/photocopier, /turf/open/floor/iron/dark, @@ -23557,13 +26315,6 @@ /obj/machinery/door/window/right/directional/south, /turf/open/floor/plating, /area/station/service/chapel/funeral) -"jcx" = ( -/obj/structure/filingcabinet/chestdrawer, -/obj/item/stock_parts/cell/emproof{ - pixel_y = 9 - }, -/turf/open/floor/iron/grimy, -/area/station/engineering/main) "jcE" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -23571,6 +26322,11 @@ /obj/structure/lattice/catwalk, /turf/open/space/basic, /area/space/nearstation) +"jcG" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/white/small, +/area/station/service/hydroponics) "jcU" = ( /obj/structure/chair/wood/wings{ dir = 1 @@ -23594,6 +26350,10 @@ /obj/effect/landmark/start/captain, /turf/open/floor/iron/freezer, /area/station/command/heads_quarters/captain/private) +"jdx" = ( +/obj/structure/table/wood, +/turf/open/floor/carpet, +/area/station/service/library) "jdU" = ( /obj/effect/turf_decal/stripes/corner{ dir = 1 @@ -23608,29 +26368,16 @@ }, /turf/open/floor/iron/smooth, /area/station/maintenance/disposal/incinerator) -"jeg" = ( -/obj/effect/mapping_helpers/broken_floor, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/maintenance/hallway/abandoned_command) "jeh" = ( /turf/open/floor/noslip, /area/station/security/tram) -"jej" = ( +"jep" = ( /obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating/rust, -/area/station/maintenance/fore/greater) -"jey" = ( -/obj/machinery/vending/clothing, -/turf/open/floor/iron, -/area/station/commons/fitness/recreation/entertainment) -"jez" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/commons/fitness/recreation/entertainment) +/obj/machinery/firealarm/directional/north, +/obj/machinery/light_switch/directional/south, +/turf/open/floor/iron/dark/small, +/area/station/service/chapel/storage) "jeC" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -23646,25 +26393,29 @@ /obj/machinery/light_switch/directional/west, /turf/open/floor/iron/smooth_large, /area/station/science/ordnance/storage) -"jeV" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/turf/open/floor/iron/white/corner, -/area/station/hallway/secondary/exit/departure_lounge) "jeW" = ( /obj/effect/spawner/structure/window, /obj/structure/sign/departments/medbay/alt/directional/west, /turf/open/floor/plating, /area/station/medical/medbay/lobby) -"jeX" = ( -/obj/machinery/light/small/directional/east, -/obj/effect/decal/cleanable/dirt, -/obj/effect/mapping_helpers/broken_floor, -/obj/structure/broken_flooring/singular/directional/west, -/turf/open/floor/plating, +"jfa" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/structure/disposalpipe/segment, +/obj/item/radio/intercom/directional/west, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/landmark/start/hangover, +/turf/open/floor/iron, /area/station/commons/fitness/recreation/entertainment) +"jfk" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 8 + }, +/obj/machinery/portable_atmospherics/pipe_scrubber, +/turf/open/floor/iron, +/area/station/engineering/atmos) "jfs" = ( /obj/effect/turf_decal/tile/yellow/half/contrasted{ dir = 4 @@ -23696,37 +26447,63 @@ }, /turf/open/floor/iron/dark, /area/station/maintenance/department/engine/atmos) -"jfP" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/door/airlock{ - name = "Faded Door" +"jfE" = ( +/obj/structure/closet/secure_closet/evidence, +/obj/machinery/light/dim/directional/north, +/turf/open/floor/iron/smooth, +/area/station/security/evidence) +"jfT" = ( +/obj/structure/closet/secure_closet/hydroponics, +/obj/effect/turf_decal/siding/thinplating_new/light{ + dir = 1 }, -/obj/effect/mapping_helpers/airlock/abandoned, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/plating, -/area/station/maintenance/fore/greater) -"jfZ" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/decal/cleanable/dirt, /obj/structure/sign/poster/official/random/directional/north, -/turf/open/floor/iron/showroomfloor, -/area/station/commons/toilet/auxiliary) -"jgC" = ( -/obj/machinery/door/airlock/sandstone{ - name = "The Rat's Den" +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/iron/white/small, +/area/station/service/hydroponics) +"jgb" = ( +/obj/effect/turf_decal/tile/red/opposingcorners, +/obj/effect/turf_decal/tile/blue/opposingcorners{ + dir = 8 }, -/obj/effect/mapping_helpers/airlock/abandoned, -/turf/open/floor/wood, -/area/station/service/abandoned_gambling_den) -"jgR" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/camera/autoname/directional/west, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/obj/structure/cable, +/turf/open/floor/iron/smooth, +/area/station/service/greenroom) +"jgq" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 8 + }, +/obj/structure/flora/bush/jungle/a/style_3, +/turf/open/misc/dirt/jungle, +/area/station/service/chapel) +"jgx" = ( +/obj/effect/turf_decal/tile/green/opposingcorners, +/obj/effect/turf_decal/tile/blue/opposingcorners{ + dir = 8 + }, +/obj/structure/extinguisher_cabinet/directional/east, +/obj/machinery/hydroponics/constructable, /turf/open/floor/iron, -/area/station/hallway/secondary/recreation) +/area/station/service/hydroponics) +"jgF" = ( +/obj/effect/turf_decal/siding/wideplating/dark{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/commons/fitness/locker_room) +"jgQ" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/security/prison/workout) "jhk" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -23755,11 +26532,6 @@ }, /turf/open/space/basic, /area/station/engineering/atmos/space_catwalk) -"jhA" = ( -/obj/machinery/vending/boozeomat, -/obj/effect/mapping_helpers/broken_floor, -/turf/closed/wall, -/area/station/service/abandoned_gambling_den) "jhC" = ( /obj/effect/turf_decal/stripes/white/line, /turf/open/floor/plating, @@ -23772,11 +26544,6 @@ /obj/structure/cable, /turf/open/floor/iron/smooth, /area/station/engineering/supermatter/room) -"jhU" = ( -/obj/effect/turf_decal/stripes/white/line, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating, -/area/station/cargo/miningoffice) "jhY" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -23805,6 +26572,14 @@ }, /turf/open/space/basic, /area/space/nearstation) +"jie" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/obj/structure/broken_flooring/singular/directional/east, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) "jig" = ( /obj/effect/turf_decal/stripes/white/line{ dir = 9 @@ -23815,6 +26590,15 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/smooth, /area/station/hallway/secondary/command) +"jiq" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/security/processing) "jir" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -23845,19 +26629,6 @@ }, /turf/open/floor/iron/small, /area/station/maintenance/department/engine/atmos) -"jiN" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/door/airlock{ - name = "Maintenance" - }, -/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, -/obj/effect/mapping_helpers/airlock/unres{ - dir = 8 - }, -/turf/open/floor/plating, -/area/station/maintenance/central/greater) "jiR" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on, /turf/open/floor/engine/vacuum, @@ -23892,14 +26663,12 @@ "jjq" = ( /turf/closed/wall, /area/station/cargo/warehouse) -"jjH" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/obj/structure/filingcabinet/chestdrawer, -/turf/open/floor/iron, -/area/station/science/xenobiology) +"jjI" = ( +/obj/machinery/light/small/directional/south, +/obj/effect/turf_decal/siding/thinplating/dark, +/obj/machinery/duct, +/turf/open/floor/iron/showroomfloor, +/area/station/commons/dorms) "jjJ" = ( /obj/structure/bed/dogbed/renault, /mob/living/basic/pet/fox/renault, @@ -23913,24 +26682,13 @@ /obj/machinery/firealarm/directional/south, /turf/open/floor/iron, /area/station/medical/chemistry) -"jjS" = ( -/obj/effect/turf_decal/trimline/neutral/line, -/obj/effect/turf_decal/trimline/neutral/line{ - dir = 1 - }, -/obj/machinery/navbeacon{ - codes_txt = "patrol;next_patrol=23.1-Evac"; - location = "22.0-Porthall-Evac" - }, -/turf/open/floor/iron, -/area/station/hallway/primary/port) "jjZ" = ( /obj/structure/disposalpipe/segment{ - dir = 10 + dir = 4 }, -/obj/effect/mapping_helpers/broken_floor, +/obj/structure/cable, /turf/open/floor/iron, -/area/station/commons) +/area/station/hallway/primary/central/aft) "jkz" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 8 @@ -23939,6 +26697,14 @@ dir = 8 }, /area/station/science/lobby) +"jkC" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/machinery/light/warm/directional/east, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/commons/fitness/recreation/entertainment) "jkE" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -23957,6 +26723,11 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/cargo/storage) +"jkT" = ( +/obj/structure/table/wood, +/obj/machinery/fax/auto_name, +/turf/open/floor/carpet, +/area/station/service/library) "jkV" = ( /obj/machinery/door/airlock/external/glass{ name = "ATMOS PROJECT Airlock" @@ -23985,6 +26756,12 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/cargo/storage) +"jlz" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/power/apc/auto_name/directional/north, +/turf/open/floor/iron/dark/small, +/area/station/service/chapel/storage) "jlL" = ( /obj/structure/closet/secure_closet/engineering_chief, /obj/item/storage/briefcase/secure, @@ -24007,12 +26784,6 @@ }, /turf/open/floor/engine, /area/station/science/xenobiology) -"jlT" = ( -/obj/structure/cable, -/obj/effect/mapping_helpers/broken_floor, -/obj/machinery/power/apc/auto_name/directional/north, -/turf/open/floor/plating, -/area/station/maintenance/aft) "jlV" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -24024,6 +26795,11 @@ /obj/machinery/duct, /turf/open/floor/iron/white/small, /area/station/medical/storage) +"jlW" = ( +/obj/effect/turf_decal/weather/dirt, +/obj/structure/flora/bush/flowers_pp/style_2, +/turf/open/floor/grass, +/area/station/service/chapel) "jlZ" = ( /obj/effect/turf_decal/tile/dark_red/half/contrasted{ dir = 1 @@ -24039,12 +26815,6 @@ /obj/effect/decal/cleanable/cobweb, /turf/open/floor/wood, /area/station/maintenance/starboard/greater) -"jme" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/door/firedoor, -/obj/effect/landmark/navigate_destination, -/turf/open/floor/iron/textured_half, -/area/station/service/theater) "jmi" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, @@ -24057,6 +26827,13 @@ /obj/machinery/light/small/directional/west, /turf/open/floor/plating, /area/station/maintenance/department/medical/central) +"jmF" = ( +/obj/effect/spawner/random/structure/crate, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/plating, +/area/station/construction/mining/aux_base) "jmK" = ( /obj/structure/disposalpipe/segment{ dir = 9 @@ -24114,20 +26891,6 @@ }, /turf/open/floor/iron, /area/station/cargo/sorting) -"jnr" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/wood/tile, -/area/station/command/corporate_showroom) -"jns" = ( -/obj/structure/chair/stool/directional/south, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/holopad, -/obj/effect/landmark/start/cargo_technician, -/turf/open/floor/iron, -/area/station/cargo/sorting) "jnB" = ( /obj/structure/chair/plastic{ dir = 8 @@ -24146,16 +26909,6 @@ /obj/machinery/firealarm/directional/south, /turf/open/floor/iron/smooth, /area/station/security/evidence) -"jnS" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/sign/painting/library{ - pixel_y = 32 - }, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/wood/tile, -/area/station/command/corporate_showroom) "jnZ" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -24167,15 +26920,29 @@ }, /turf/open/floor/plating, /area/station/command/corporate_showroom) -"jon" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/chair/stool/directional/south, -/turf/open/floor/plating, -/area/station/cargo/sorting) -"joy" = ( +"joH" = ( +/obj/structure/table/reinforced, +/obj/item/paper_bin{ + pixel_x = -2; + pixel_y = 4 + }, +/obj/item/pen, +/obj/machinery/door/poddoor/shutters{ + id = "meow"; + name = "Commissary" + }, +/turf/open/floor/iron, +/area/station/commons/vacant_room/commissary) +"joR" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, -/turf/open/floor/wood/parquet, -/area/station/service/library) +/obj/effect/spawner/random/structure/steam_vent, +/turf/open/floor/plating, +/area/station/maintenance/central/greater) "joS" = ( /obj/machinery/light/broken/directional/north, /obj/effect/decal/cleanable/dirt, @@ -24207,6 +26974,10 @@ }, /turf/open/floor/iron/smooth, /area/station/maintenance/port/aft) +"jpp" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/turf/open/floor/iron, +/area/station/commons/fitness/recreation/entertainment) "jpu" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment, @@ -24218,16 +26989,17 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central/fore) -"jpK" = ( -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/tile/blue/anticorner/contrasted{ - dir = 1 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 +"jpE" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/smooth_large, +/area/station/science/auxlab/firing_range) +"jpM" = ( +/obj/structure/closet{ + name = "Evidence Closet 3" }, -/turf/open/floor/iron/white, -/area/station/medical/medbay/lobby) +/turf/open/floor/iron/smooth, +/area/station/security/evidence) "jpR" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -24236,6 +27008,20 @@ /obj/effect/spawner/random/maintenance/three, /turf/open/floor/plating, /area/station/maintenance/port/fore) +"jpW" = ( +/obj/structure/cable, +/obj/structure/table/wood, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/machinery/power/apc/auto_name/directional/east, +/obj/effect/decal/cleanable/dirt, +/obj/item/flashlight/lamp/green{ + pixel_x = 1; + pixel_y = 5 + }, +/turf/open/floor/wood/tile, +/area/station/service/lawoffice) "jqd" = ( /obj/effect/turf_decal/sand/plating, /obj/effect/decal/cleanable/dirt/dust, @@ -24246,6 +27032,11 @@ /obj/item/stack/cable_coil/five, /turf/open/floor/plating, /area/station/engineering/supermatter/room) +"jqq" = ( +/obj/structure/closet/crate/trashcart/filled, +/obj/effect/landmark/start/hangover, +/turf/open/floor/iron, +/area/station/hallway/secondary/recreation) "jqu" = ( /obj/structure/disposalpipe/segment{ dir = 5 @@ -24289,12 +27080,6 @@ /obj/effect/landmark/start/hangover, /turf/open/floor/iron/diagonal, /area/station/engineering/lobby) -"jqQ" = ( -/obj/structure/cable, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/machinery/light/small/directional/west, -/turf/open/floor/iron, -/area/station/hallway/secondary/spacebridge) "jqZ" = ( /obj/structure/cable, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ @@ -24344,6 +27129,17 @@ /obj/structure/closet/firecloset, /turf/open/floor/plating/rust, /area/station/maintenance/fore/lesser) +"jrN" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central/aft) "jrS" = ( /obj/effect/turf_decal/stripes/white/line{ dir = 10 @@ -24370,29 +27166,23 @@ dir = 1 }, /area/station/cargo/office) -"jrZ" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 1 - }, -/obj/structure/flora/tree/jungle/small/style_random, -/turf/open/floor/grass, -/area/station/service/chapel) -"jsc" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/stripes/red/line{ - dir = 8 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ +"jsa" = ( +/obj/item/radio/intercom/directional/west, +/turf/open/floor/iron/white/side{ dir = 4 }, -/obj/machinery/light/small/directional/west, -/turf/open/floor/iron/smooth_large, -/area/station/science/auxlab/firing_range) +/area/station/science/xenobiology) "jsv" = ( /obj/structure/cable, /obj/machinery/holopad, /turf/open/floor/iron, /area/station/security/prison/workout) +"jsE" = ( +/obj/machinery/light/small/directional/east, +/obj/structure/table/wood, +/obj/item/book/manual/wiki/tgc, +/turf/open/floor/carpet/green, +/area/station/commons/dorms) "jsG" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 4 @@ -24405,17 +27195,15 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central/fore) -"jsI" = ( -/obj/structure/table, -/obj/effect/mapping_helpers/broken_floor, -/obj/effect/decal/cleanable/dirt, -/obj/item/hand_labeler, -/obj/item/camera, -/obj/machinery/firealarm/directional/north, -/obj/machinery/power/apc/auto_name/directional/east, -/obj/structure/cable, +"jsJ" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/machinery/status_display/evac/directional/north, +/obj/structure/disposalpipe/segment, /turf/open/floor/iron, -/area/station/commons/storage/art) +/area/station/hallway/primary/port) "jsN" = ( /obj/structure/hedge, /obj/effect/decal/cleanable/cobweb/cobweb2, @@ -24426,6 +27214,11 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/security/brig/entrance) +"jsU" = ( +/obj/structure/hedge, +/obj/effect/turf_decal/siding/thinplating/terracotta, +/turf/open/floor/iron, +/area/station/commons/dorms) "jsX" = ( /obj/structure/steam_vent, /turf/open/floor/plating, @@ -24457,6 +27250,10 @@ /obj/machinery/airalarm/directional/east, /turf/open/floor/iron/diagonal, /area/station/command/heads_quarters/hop) +"jtD" = ( +/obj/structure/closet/emcloset, +/turf/open/floor/iron/showroomfloor, +/area/station/commons/toilet/auxiliary) "jtI" = ( /turf/open/floor/iron/white/side{ dir = 4 @@ -24484,14 +27281,14 @@ /area/station/commons/storage/tools) "jul" = ( /obj/structure/lattice, -/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible/layer1{ +/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible/layer5{ dir = 4 }, /obj/machinery/atmospherics/pipe/smart/simple/yellow/visible{ - dir = 4 + dir = 10 }, -/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible/layer5{ - dir = 4 +/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible/layer1{ + dir = 10 }, /turf/open/space/basic, /area/space/nearstation) @@ -24516,6 +27313,12 @@ /obj/item/storage/box/matches, /turf/open/floor/iron, /area/station/cargo/sorting) +"juP" = ( +/obj/machinery/light/small/directional/south, +/obj/machinery/status_display/evac/directional/south, +/obj/effect/turf_decal/siding/wood, +/turf/open/floor/stone, +/area/station/service/chapel) "juS" = ( /obj/structure/bed, /obj/item/bedsheet/hop, @@ -24523,6 +27326,21 @@ /obj/machinery/firealarm/directional/south, /turf/open/floor/iron/grimy, /area/station/command/heads_quarters/hop) +"jvd" = ( +/obj/effect/turf_decal/siding/thinplating{ + dir = 1 + }, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/turf/open/floor/eighties/red, +/area/station/hallway/primary/central/fore) +"jvl" = ( +/obj/machinery/holopad, +/obj/structure/cable, +/turf/open/floor/iron/dark/small, +/area/station/command/heads_quarters/captain/private) "jvB" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ @@ -24555,6 +27373,14 @@ /obj/effect/landmark/generic_maintenance_landmark, /turf/open/floor/iron, /area/station/hallway/secondary/construction) +"jvQ" = ( +/obj/structure/chair/plastic{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/commons/fitness/locker_room) "jvR" = ( /obj/structure/cable, /obj/effect/turf_decal/tile/brown/opposingcorners, @@ -24575,6 +27401,13 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/iron/small, /area/station/command/teleporter) +"jwf" = ( +/obj/structure/chair{ + pixel_y = -2 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/commons/fitness/locker_room) "jwh" = ( /obj/structure/broken_flooring/pile/directional/east, /obj/effect/spawner/random/trash/graffiti{ @@ -24590,14 +27423,21 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood/tile, /area/station/command/corporate_showroom) -"jwv" = ( +"jwl" = ( /obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 9 +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/dark_red/half/contrasted{ + dir = 4 }, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating, -/area/station/maintenance/starboard/aft) +/obj/effect/turf_decal/siding/wideplating/dark{ + dir = 8 + }, +/obj/structure/disposalpipe/junction/flip{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/security) "jwC" = ( /obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible/layer2{ dir = 5 @@ -24636,13 +27476,6 @@ /obj/structure/frame/machine, /turf/open/floor/tram, /area/station/security/tram) -"jxd" = ( -/obj/machinery/atmospherics/pipe/smart/simple/purple/visible/layer2{ - dir = 9 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/station/science/ordnance) "jxh" = ( /obj/structure/lattice/catwalk, /obj/structure/railing{ @@ -24662,12 +27495,6 @@ "jxp" = ( /turf/closed/wall/r_wall, /area/station/ai_monitored/turret_protected/aisat/foyer) -"jxy" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/landmark/navigate_destination/library, -/turf/open/floor/wood/parquet, -/area/station/service/library) "jxC" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -24720,6 +27547,10 @@ /obj/machinery/light_switch/directional/east, /turf/open/floor/iron/white/small, /area/station/medical/storage) +"jyd" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/showroomfloor, +/area/station/service/barber) "jye" = ( /obj/structure/window/reinforced/spawner/directional/west, /obj/structure/window/reinforced/spawner/directional/north, @@ -24804,12 +27635,6 @@ dir = 4 }, /area/station/command/heads_quarters/captain/private) -"jyS" = ( -/obj/structure/rack, -/obj/effect/spawner/random/maintenance, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/iron, -/area/station/maintenance/port/aft) "jyY" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/door/airlock{ @@ -24818,14 +27643,6 @@ /obj/effect/mapping_helpers/airlock/abandoned, /turf/open/floor/wood, /area/station/maintenance/starboard/greater) -"jza" = ( -/obj/machinery/rnd/production/techfab/department/service, -/obj/effect/turf_decal/delivery, -/obj/effect/turf_decal/siding/wood/corner{ - dir = 4 - }, -/turf/open/floor/iron/kitchen/small, -/area/station/hallway/secondary/service) "jzg" = ( /obj/effect/turf_decal/stripes/white/line{ dir = 1 @@ -24859,6 +27676,14 @@ /obj/structure/broken_flooring/singular/directional/south, /turf/open/floor/iron, /area/station/hallway/secondary/dock) +"jzr" = ( +/obj/machinery/holopad, +/obj/effect/turf_decal/trimline/neutral/line, +/obj/effect/turf_decal/trimline/neutral/line{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/port) "jzJ" = ( /obj/effect/turf_decal/tile/brown/opposingcorners, /obj/structure/closet/firecloset, @@ -24873,12 +27698,12 @@ dir = 1 }, /area/station/engineering/storage/tech) -"jAn" = ( -/obj/effect/mapping_helpers/broken_floor, -/obj/effect/spawner/random/maintenance, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/station/maintenance/hallway/abandoned_command) +"jAf" = ( +/obj/structure/mirror/directional/east, +/obj/structure/chair/stool/bar/directional/east, +/obj/effect/landmark/start/hangover, +/turf/open/floor/iron/showroomfloor, +/area/station/service/barber) "jAp" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/white/diagonal, @@ -24891,48 +27716,17 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/construction) -"jAs" = ( -/obj/structure/cable, -/obj/effect/mapping_helpers/broken_floor, -/obj/effect/spawner/random/structure/closet_maintenance, -/obj/effect/spawner/random/maintenance, -/turf/open/floor/plating, -/area/station/maintenance/fore/greater) "jAz" = ( /obj/effect/turf_decal/stripes/end, /obj/effect/landmark/start/hangover, /obj/machinery/light/small/dim/directional/south, /turf/open/floor/iron/dark, /area/station/engineering/lobby) -"jAF" = ( -/obj/structure/cable, -/obj/effect/mapping_helpers/broken_floor, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/maintenance/hallway/abandoned_recreation) "jAR" = ( /obj/effect/turf_decal/tile/dark_red/opposingcorners, /obj/machinery/airalarm/directional/east, /turf/open/floor/iron, /area/station/security/tram) -"jAV" = ( -/obj/structure/cable, -/obj/effect/mapping_helpers/broken_floor, -/obj/structure/bed/maint, -/turf/open/floor/wood, -/area/station/service/abandoned_gambling_den) -"jBb" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) -"jBc" = ( -/obj/structure/cable, -/obj/structure/chair/stool/bar/directional/east, -/obj/effect/decal/cleanable/blood/gibs/down, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/wood, -/area/station/service/abandoned_gambling_den) "jBo" = ( /obj/effect/turf_decal/siding/thinplating_new{ dir = 6 @@ -24957,12 +27751,6 @@ /obj/machinery/flasher/directional/north, /turf/open/floor/circuit/red, /area/station/ai_monitored/turret_protected/ai) -"jBD" = ( -/obj/structure/table/wood, -/obj/effect/mapping_helpers/broken_floor, -/obj/item/paper/crumpled/bloody, -/turf/open/floor/plating, -/area/station/service/abandoned_gambling_den) "jBQ" = ( /obj/effect/turf_decal/tile/dark_red/fourcorners, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ @@ -24983,19 +27771,14 @@ /obj/effect/mapping_helpers/airlock/access/all/supply/general, /turf/open/floor/plating, /area/station/maintenance/port/fore) +"jCm" = ( +/obj/effect/landmark/start/hangover, +/turf/open/misc/dirt/jungle, +/area/station/service/chapel) "jCo" = ( /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/port/fore) -"jCA" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/table, -/turf/open/floor/plating, -/area/station/maintenance/port/greater) -"jCD" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/station/security/interrogation) "jCP" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -25003,38 +27786,34 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/smooth, /area/station/cargo/warehouse) -"jCY" = ( -/obj/structure/table/greyscale, -/obj/item/screwdriver, -/obj/item/stack/cable_coil/cut{ - pixel_x = 11; - pixel_y = 7 - }, -/obj/machinery/camera/directional/west{ - c_tag = "Engineering - Office" - }, -/obj/item/stock_parts/cell/emproof{ - pixel_x = -6; - pixel_y = 9 +"jCZ" = ( +/obj/machinery/door/window/brigdoor/left/directional/west{ + id = "Cell 1"; + name = "Cell 1"; + req_access = list("security") }, -/turf/open/floor/iron/grimy, -/area/station/engineering/main) +/turf/open/floor/iron/dark/small, +/area/station/security/brig) "jDa" = ( /obj/machinery/holopad, /turf/open/floor/wood/tile, /area/station/command/corporate_showroom) -"jDe" = ( -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/kitchen/small, -/area/station/security/prison/mess) -"jDr" = ( -/obj/effect/mapping_helpers/broken_floor, -/mob/living/carbon/human/species/monkey/punpun, -/obj/effect/decal/cleanable/dirt, -/obj/item/gun/ballistic/rifle/boltaction/pipegun, -/turf/open/floor/plating, -/area/station/service/abandoned_gambling_den) +"jDc" = ( +/obj/effect/turf_decal/siding/red{ + dir = 9 + }, +/turf/open/floor/iron/small, +/area/station/security/brig) +"jDm" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/tile/brown{ + dir = 4 + }, +/obj/effect/turf_decal/tile/brown{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/cargo/office) "jDt" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable, @@ -25048,12 +27827,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/fore/lesser) -"jDv" = ( -/obj/machinery/light/small/directional/east, -/obj/structure/closet/firecloset, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/security/tram) "jDy" = ( /obj/machinery/firealarm/directional/south, /turf/open/floor/iron/stairs{ @@ -25066,40 +27839,20 @@ /obj/machinery/light/small/directional/west, /turf/open/floor/iron/dark, /area/station/command/corporate_dock) -"jDP" = ( -/obj/effect/turf_decal/tile/yellow{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/obj/item/storage/box{ - pixel_x = -8; - pixel_y = 15 - }, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/fore) -"jDQ" = ( -/obj/effect/mapping_helpers/broken_floor, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/turf/open/floor/wood/tile, -/area/station/command/corporate_showroom) +"jDS" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "jEc" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/smooth, /area/station/hallway/secondary/command) -"jEe" = ( -/obj/machinery/newscaster/directional/north, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/station/security/office) "jEi" = ( /obj/structure/chair/sofa/bench/right{ dir = 8 @@ -25137,6 +27890,15 @@ dir = 1 }, /area/station/command/corporate_showroom) +"jEz" = ( +/obj/effect/turf_decal/tile/neutral/full, +/obj/structure/chair{ + dir = 4; + pixel_y = -2 + }, +/obj/structure/sign/poster/contraband/random/directional/south, +/turf/open/floor/iron/dark/smooth_large, +/area/station/maintenance/central/lesser) "jEA" = ( /obj/structure/chair/sofa/bench{ dir = 1 @@ -25181,33 +27943,22 @@ }, /turf/open/floor/iron, /area/station/cargo/office) -"jEU" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 1 +"jEQ" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 }, -/obj/effect/landmark/start/chaplain, -/turf/open/floor/wood/large, -/area/station/service/chapel) +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark/side{ + dir = 8 + }, +/area/station/commons/storage/tools) "jEZ" = ( /obj/structure/hedge, /obj/effect/decal/cleanable/dirt, /obj/structure/sign/poster/official/random/directional/north, /turf/open/floor/iron/smooth, /area/station/hallway/secondary/command) -"jFc" = ( -/obj/effect/decal/cleanable/dirt, -/obj/item/trash/cheesie{ - pixel_x = 7; - pixel_y = 3 - }, -/obj/structure/table, -/turf/open/floor/iron, -/area/station/commons/fitness/recreation/entertainment) -"jFf" = ( -/obj/effect/turf_decal/tile/green/diagonal_centre, -/obj/machinery/status_display/ai/directional/north, -/turf/open/floor/iron/diagonal, -/area/station/hallway/primary/central/aft) "jFh" = ( /obj/item/kirbyplants/random, /turf/open/floor/iron, @@ -25219,17 +27970,14 @@ }, /turf/open/space/basic, /area/space/nearstation) -"jFs" = ( -/obj/machinery/light/small/broken/directional/east, -/turf/open/floor/wood, -/area/station/service/abandoned_gambling_den) -"jFt" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/item/kirbyplants/random, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/status_display/ai/directional/north, -/turf/open/floor/iron/smooth, -/area/station/hallway/secondary/command) +"jFm" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/effect/turf_decal/siding/wood, +/obj/effect/spawner/random/vending/snackvend, +/turf/open/floor/stone, +/area/station/service/bar) "jFw" = ( /obj/item/kirbyplants/random, /obj/effect/turf_decal/tile/yellow{ @@ -25259,24 +28007,13 @@ /obj/machinery/power/apc/auto_name/directional/north, /turf/open/floor/plating, /area/station/maintenance/fore/lesser) -"jFG" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ +"jFK" = ( +/obj/effect/turf_decal/siding/wood{ dir = 1 }, -/turf/open/floor/wood/tile, -/area/station/command/corporate_showroom) -"jFK" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating, -/area/station/maintenance/fore/lesser) -"jFY" = ( -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/machinery/light/floor, -/turf/open/floor/iron/smooth, -/area/station/service/library) +/obj/effect/turf_decal/siding/wood, +/turf/open/floor/stone, +/area/station/service/bar) "jGc" = ( /obj/structure/window/spawner/directional/east, /turf/open/floor/iron/showroomfloor, @@ -25307,6 +28044,13 @@ dir = 1 }, /area/station/hallway/secondary/entry) +"jGK" = ( +/obj/structure/chair/wood, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/small, +/area/station/service/barber) "jGL" = ( /obj/effect/turf_decal/stripes/line{ dir = 5 @@ -25325,6 +28069,19 @@ }, /turf/open/floor/iron/cafeteria, /area/station/hallway/secondary/exit/departure_lounge) +"jGO" = ( +/obj/structure/chair/sofa/corp/right{ + dir = 1 + }, +/obj/structure/extinguisher_cabinet/directional/south, +/turf/open/floor/wood/tile, +/area/station/command/corporate_showroom) +"jGT" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/status_display/evac/directional/north, +/turf/open/floor/iron, +/area/station/commons/dorms) "jGW" = ( /obj/structure/disposalpipe/segment{ dir = 6 @@ -25358,12 +28115,13 @@ /turf/open/floor/iron/white, /area/station/medical/treatment_center) "jHl" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/maintenance/hallway/abandoned_command) +/obj/machinery/smartfridge, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "kitchenshutters"; + name = "Kitchen Shutters" + }, +/turf/open/floor/iron/kitchen/small, +/area/station/service/kitchen) "jHq" = ( /obj/structure/table, /obj/item/storage/box/prisoner{ @@ -25387,14 +28145,15 @@ /mob/living/basic/sloth/citrus, /turf/open/floor/iron, /area/station/cargo/storage) -"jHE" = ( -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/tile/brown/half/contrasted{ +"jHH" = ( +/obj/effect/turf_decal/siding/thinplating_new/light{ + dir = 1 + }, +/obj/effect/turf_decal/siding/thinplating_new/light/corner{ dir = 8 }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/cargo/sorting) +/turf/open/floor/iron/white/small, +/area/station/service/hydroponics) "jHI" = ( /obj/effect/turf_decal/stripes/white/line{ dir = 5 @@ -25425,9 +28184,6 @@ }, /turf/open/floor/catwalk_floor, /area/station/engineering/hallway) -"jIb" = ( -/turf/open/floor/plating/rust, -/area/station/service/library/abandoned) "jIc" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/door/airlock{ @@ -25436,6 +28192,14 @@ /obj/machinery/door/firedoor, /turf/open/floor/iron/textured_half, /area/station/commons/toilet/auxiliary) +"jId" = ( +/obj/effect/turf_decal/tile/purple/opposingcorners, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/obj/effect/landmark/event_spawn, +/turf/open/floor/iron/cafeteria, +/area/station/science/circuits) "jIh" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment, @@ -25462,19 +28226,6 @@ /obj/structure/window/spawner/directional/south, /turf/open/floor/plating, /area/station/maintenance/starboard/greater) -"jIx" = ( -/obj/structure/cable, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark/corner{ - dir = 8 - }, -/area/station/science/xenobiology) "jIy" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -25539,6 +28290,20 @@ }, /turf/open/floor/iron, /area/station/cargo/office) +"jJd" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/obj/effect/turf_decal/tile/neutral/opposingcorners{ + dir = 1 + }, +/obj/effect/turf_decal/siding/thinplating_new{ + dir = 8 + }, +/turf/open/floor/iron/small, +/area/station/hallway/secondary/service) "jJg" = ( /obj/effect/turf_decal/siding/wideplating, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -25548,20 +28313,11 @@ }, /turf/open/floor/wood, /area/station/engineering/main) -"jJl" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/mapping_helpers/broken_floor, -/obj/machinery/light/small/directional/east, -/turf/open/floor/iron/smooth, -/area/station/maintenance/solars/port/aft) "jJu" = ( /obj/structure/chair, /obj/effect/landmark/start/station_engineer, /turf/open/floor/iron/grimy, /area/station/engineering/main) -"jJy" = ( -/turf/open/misc/asteroid, -/area/station/service/library/abandoned) "jJP" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -25570,6 +28326,13 @@ }, /turf/open/floor/iron, /area/station/security/execution/transfer) +"jJT" = ( +/obj/effect/turf_decal/tile/purple/opposingcorners, +/obj/effect/turf_decal/siding/green, +/obj/machinery/component_printer, +/obj/machinery/camera/autoname/directional/south, +/turf/open/floor/iron/cafeteria, +/area/station/science/circuits) "jJW" = ( /obj/effect/decal/cleanable/oil/slippery, /obj/item/stack/sheet/cardboard, @@ -25583,48 +28346,27 @@ }, /turf/open/floor/plating, /area/station/maintenance/department/engine) -"jKf" = ( -/turf/closed/wall/rust, -/area/station/service/library/abandoned) -"jKh" = ( -/obj/machinery/vending/hydroseeds{ - slogan_delay = 700 +"jKg" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 }, -/obj/effect/turf_decal/delivery/white{ - color = "#52B4E9" +/obj/effect/turf_decal/stripes/line{ + dir = 4 }, -/obj/machinery/light/directional/north, -/turf/open/floor/iron/white/small, -/area/station/service/hydroponics) -"jKj" = ( -/obj/structure/disposalpipe/segment{ - dir = 5 +/turf/open/floor/iron/dark/corner{ + dir = 1 }, +/area/station/science/xenobiology) +"jKh" = ( +/obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/brown{ +/obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/effect/turf_decal/tile/brown{ - dir = 8 - }, /obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/cargo/office) -"jKm" = ( -/obj/structure/disposalpipe/segment{ - dir = 9 - }, -/obj/effect/turf_decal/tile/dark_red/half/contrasted{ - dir = 1 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/obj/machinery/light/cold/directional/south, -/obj/machinery/airalarm/directional/south, -/turf/open/floor/iron, -/area/station/security/brig/entrance) +/turf/open/floor/plating, +/area/station/maintenance/central/greater) "jKq" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -25665,6 +28407,20 @@ "jKU" = ( /turf/closed/wall, /area/station/engineering/atmos/storage/gas) +"jKV" = ( +/obj/machinery/processor{ + pixel_y = 6 + }, +/obj/machinery/camera/autoname/directional/west, +/obj/structure/table, +/turf/open/floor/iron/kitchen/small, +/area/station/service/kitchen) +"jLb" = ( +/obj/effect/turf_decal/tile/yellow{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/commons/storage/tools) "jLl" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -25710,6 +28466,18 @@ "jLR" = ( /turf/open/floor/iron/small, /area/station/command/teleporter) +"jLS" = ( +/obj/structure/table/wood, +/obj/item/paper_bin{ + pixel_x = -2; + pixel_y = 4 + }, +/obj/item/pen{ + pixel_x = -2; + pixel_y = 4 + }, +/turf/open/floor/carpet, +/area/station/service/library) "jLV" = ( /obj/effect/turf_decal/tile/blue, /turf/open/floor/iron/white, @@ -25742,13 +28510,10 @@ }, /turf/open/floor/iron/small, /area/station/engineering/atmos/pumproom) -"jMC" = ( -/obj/machinery/atmospherics/components/unary/outlet_injector/on{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/engine, -/area/station/science/xenobiology) +"jMA" = ( +/obj/structure/chair/stool/bar/directional/east, +/turf/open/floor/wood/large, +/area/station/service/bar) "jML" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment, @@ -25761,14 +28526,6 @@ /obj/structure/spider/stickyweb, /turf/open/floor/iron/small, /area/station/maintenance/department/engine/atmos) -"jMQ" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/light/cold/directional/north, -/turf/open/floor/iron/dark, -/area/station/cargo/office) "jMX" = ( /obj/structure/disposalpipe/segment{ dir = 9 @@ -25824,15 +28581,6 @@ }, /turf/open/floor/iron, /area/station/maintenance/starboard/aft) -"jNH" = ( -/obj/structure/closet/boxinggloves, -/obj/effect/turf_decal/siding/thinplating_new/light{ - dir = 8 - }, -/obj/machinery/light_switch/directional/west, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/small, -/area/station/commons/fitness/locker_room) "jNL" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -25858,6 +28606,13 @@ /obj/machinery/status_display/evac/directional/west, /turf/open/misc/sandy_dirt, /area/station/hallway/primary/central/fore) +"jOb" = ( +/obj/machinery/firealarm/directional/east, +/obj/effect/turf_decal/siding/wideplating/dark{ + dir = 5 + }, +/turf/open/floor/iron/small, +/area/station/commons/fitness/locker_room) "jOh" = ( /obj/structure/cable, /obj/machinery/door/firedoor, @@ -25902,11 +28657,6 @@ /obj/machinery/airalarm/directional/north, /turf/open/floor/iron, /area/station/construction/mining/aux_base) -"jOK" = ( -/obj/effect/turf_decal/tile/purple/opposingcorners, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/cafeteria, -/area/station/science/circuits) "jOS" = ( /obj/machinery/vending/cigarette, /obj/machinery/light/small/directional/south, @@ -25916,32 +28666,53 @@ /obj/effect/landmark/start/captain, /turf/open/floor/carpet/executive, /area/station/command/heads_quarters/captain/private) -"jOW" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 4 +"jPa" = ( +/obj/structure/disposalpipe/trunk{ + dir = 8 }, -/obj/machinery/light/small/directional/south, -/turf/open/floor/iron, -/area/station/commons) -"jPg" = ( +/obj/machinery/disposal/bin, +/obj/effect/turf_decal/bot, +/obj/machinery/camera/directional/east, +/turf/open/floor/iron/smooth, +/area/station/hallway/secondary/command) +"jPe" = ( +/obj/structure/steam_vent, +/obj/machinery/duct, /obj/effect/decal/cleanable/dirt, -/obj/structure/broken_flooring/corner/directional/south, /turf/open/floor/plating, -/area/station/maintenance/hallway/abandoned_command) +/area/station/maintenance/fore/greater) +"jPo" = ( +/obj/structure/cable, +/obj/machinery/door/airlock/maintenance{ + name = "Security Maintenance" + }, +/obj/effect/mapping_helpers/airlock/access/all/security/general, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plating, +/area/station/maintenance/port/lesser) "jPq" = ( /obj/structure/disposalpipe/segment, /obj/effect/spawner/structure/window/reinforced/tinted, /turf/open/floor/plating, /area/station/maintenance/fore/greater) -"jPr" = ( +"jPM" = ( +/obj/structure/rack, +/obj/effect/spawner/random/techstorage/security_all, +/turf/open/floor/iron, +/area/station/engineering/storage/tech) +"jQf" = ( /obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/dark_red/half/contrasted, +/obj/item/radio/intercom/directional/north, +/turf/open/floor/iron, +/area/station/security/execution/transfer) +"jQj" = ( /obj/effect/decal/cleanable/dirt, -/obj/effect/mapping_helpers/broken_floor, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/plating, -/area/station/maintenance/fore/greater) +/turf/open/floor/iron, +/area/station/maintenance/starboard/greater) "jQo" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/door/airlock/research/glass{ @@ -25950,26 +28721,23 @@ /obj/effect/mapping_helpers/airlock/access/all/science/research, /turf/open/floor/catwalk_floor/flat_white, /area/station/science/research) -"jQF" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/chair{ - pixel_y = -2 +"jQv" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ +/turf/open/floor/plating, +/area/station/maintenance/port/greater) +"jQB" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 1 }, -/turf/open/floor/wood, -/area/station/maintenance/fore/greater) -"jQL" = ( -/obj/structure/window/reinforced/spawner/directional/west, -/obj/effect/decal/cleanable/dirt, -/obj/effect/landmark/blobstart, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/maintenance/fore/greater) +/obj/effect/landmark/start/hangover, +/turf/open/floor/iron/small, +/area/station/commons/fitness/locker_room) "jQW" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/public/glass{ @@ -25977,16 +28745,6 @@ }, /turf/open/floor/iron/textured_half, /area/station/hallway/primary/central/fore) -"jRb" = ( -/obj/effect/mapping_helpers/broken_floor, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/maintenance/fore/greater) -"jRe" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/light/small/directional/south, -/turf/open/floor/iron/white/small, -/area/station/maintenance/port/aft) "jRk" = ( /obj/effect/turf_decal/siding/white{ dir = 1 @@ -25996,19 +28754,37 @@ }, /turf/open/floor/iron/smooth, /area/station/command/corporate_showroom) +"jRl" = ( +/obj/effect/turf_decal/tile/brown/opposingcorners{ + dir = 1 + }, +/obj/machinery/firealarm/directional/east, +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/obj/machinery/button/door/directional/north{ + id = "meow"; + name = "Comissary Shutters"; + pixel_x = 29 + }, +/turf/open/floor/iron, +/area/station/commons/vacant_room/commissary) +"jRs" = ( +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/station/hallway/secondary/recreation) +"jRv" = ( +/obj/machinery/door/airlock{ + id_tag = "Cabin4"; + name = "Cabin 4" + }, +/turf/open/floor/carpet, +/area/station/commons/dorms) "jRx" = ( /obj/structure/chair/sofa/bench, /turf/open/floor/iron, /area/station/maintenance/port/aft) -"jRz" = ( -/obj/effect/mapping_helpers/broken_floor, -/obj/structure/window/reinforced/spawner/directional/east, -/obj/effect/landmark/generic_maintenance_landmark, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 4 - }, -/turf/open/floor/plating, -/area/station/maintenance/fore/greater) "jRE" = ( /obj/effect/turf_decal/tile/dark_red/half/contrasted{ dir = 1 @@ -26019,13 +28795,16 @@ }, /turf/open/floor/iron, /area/station/security) -"jRN" = ( +"jRJ" = ( /obj/structure/cable, -/obj/effect/mapping_helpers/broken_floor, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/light/small/directional/west, -/turf/open/floor/iron, -/area/station/maintenance/hallway/abandoned_recreation) +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/port/greater) "jRR" = ( /obj/machinery/atmospherics/components/binary/crystallizer{ dir = 4 @@ -26058,10 +28837,19 @@ /obj/structure/railing, /turf/open/floor/catwalk_floor, /area/station/hallway/secondary/entry) -"jSK" = ( -/obj/structure/table/wood, -/turf/open/floor/glass, -/area/station/hallway/secondary/spacebridge) +"jSJ" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 1 + }, +/obj/structure/cable, +/turf/open/floor/grass, +/area/station/service/chapel) +"jSQ" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/item/kirbyplants/random, +/obj/machinery/status_display/ai/directional/north, +/turf/open/floor/iron/smooth, +/area/station/hallway/secondary/command) "jSR" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment, @@ -26085,19 +28873,6 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/construction) -"jSX" = ( -/obj/structure/table/wood, -/obj/item/storage/bag/tray{ - pixel_x = 1; - pixel_y = -1 - }, -/obj/item/reagent_containers/cup/rag{ - pixel_x = 5; - pixel_y = 6 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/wood, -/area/station/service/abandoned_gambling_den) "jTh" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -26118,15 +28893,18 @@ }, /turf/open/floor/iron/cafeteria, /area/station/science/circuits) -"jTx" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/wood, -/area/station/service/abandoned_gambling_den) "jTA" = ( /obj/item/radio/intercom/directional/north, /obj/machinery/camera/autoname/directional/north, /turf/open/floor/iron, /area/station/cargo/storage) +"jTC" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/camera/autoname/directional/east, +/turf/open/floor/iron, +/area/station/holodeck/rec_center) "jTU" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -26176,6 +28954,15 @@ /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/plating, /area/station/maintenance/department/electrical) +"jUU" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/grimy, +/area/station/commons) "jVe" = ( /obj/structure/cable, /turf/open/floor/iron/smooth, @@ -26198,14 +28985,32 @@ }, /turf/open/floor/iron/smooth, /area/station/maintenance/disposal/incinerator) +"jVJ" = ( +/obj/structure/table, +/obj/item/bikehorn/rubberducky{ + pixel_y = 9; + pixel_x = 6; + color = "#a61a11"; + name = "Reggie, the Angry Duckling"; + desc = "Foooo! Ducky is maaaaad. Ducky waaaanna hiiiiiit stuuuuuuf!" + }, +/obj/item/grenade/firecracker{ + pixel_x = 1 + }, +/obj/item/match{ + pixel_x = -8; + pixel_y = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/commons/fitness/locker_room) "jVM" = ( /turf/closed/wall, /area/station/maintenance/central/greater) -"jVO" = ( -/obj/effect/spawner/random/vending/snackvend, +"jVY" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, -/area/station/hallway/secondary/recreation) +/area/station/maintenance/fore/greater) "jWd" = ( /obj/structure/cable, /obj/item/kirbyplants/random/fullysynthetic, @@ -26220,6 +29025,14 @@ }, /turf/open/floor/iron/dark/small, /area/station/maintenance/department/engine/atmos) +"jWj" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 4 + }, +/obj/structure/flora/bush/flowers_pp/style_random, +/obj/structure/flora/bush/large/style_3, +/turf/open/floor/grass, +/area/station/service/chapel) "jWk" = ( /obj/machinery/door/firedoor, /obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, @@ -26237,37 +29050,20 @@ /obj/machinery/firealarm/directional/east, /turf/open/floor/iron, /area/station/hallway/primary/aft) -"jWp" = ( -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/obj/item/radio/intercom/directional/west, -/turf/open/floor/iron/dark/side{ - dir = 4 - }, -/area/station/science/xenobiology) "jWs" = ( /turf/open/floor/iron/dark, /area/station/security/processing) -"jWt" = ( -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/tile/brown{ - dir = 4 - }, -/obj/effect/turf_decal/tile/brown{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/cargo/office) "jWy" = ( /obj/effect/spawner/structure/window, /turf/open/floor/plating, /area/station/security/courtroom) +"jWz" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/light_switch/directional/west, +/turf/open/floor/iron, +/area/station/commons/fitness/recreation/entertainment) "jWA" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -26285,10 +29081,6 @@ dir = 8 }, /area/station/hallway/secondary/dock) -"jWR" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron, -/area/station/commons/fitness/recreation/entertainment) "jWZ" = ( /obj/machinery/mineral/ore_redemption{ dir = 4; @@ -26302,6 +29094,12 @@ /obj/machinery/firealarm/directional/south, /turf/open/floor/iron/textured_large, /area/station/cargo/office) +"jXc" = ( +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/turf/open/floor/plating, +/area/station/maintenance/port/greater) "jXe" = ( /obj/machinery/holopad/secure, /turf/open/floor/iron/smooth, @@ -26315,12 +29113,6 @@ /obj/effect/mapping_helpers/airlock/access/any/security/maintenance, /turf/open/floor/plating, /area/station/maintenance/port/aft) -"jXl" = ( -/obj/effect/decal/cleanable/glass, -/obj/structure/grille, -/obj/item/shard, -/turf/open/floor/plating, -/area/station/hallway/primary/central/fore) "jXr" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -26344,6 +29136,16 @@ /obj/effect/landmark/navigate_destination, /turf/open/floor/iron/white/textured_half, /area/station/engineering/storage/tcomms) +"jXB" = ( +/obj/machinery/door/airlock/public/glass{ + name = "Lockers" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/textured_half{ + dir = 8 + }, +/area/station/commons/fitness/locker_room) "jXC" = ( /obj/effect/turf_decal/tile/dark_red/half/contrasted{ dir = 1 @@ -26351,6 +29153,10 @@ /obj/effect/turf_decal/siding/wideplating/dark/corner, /turf/open/floor/iron, /area/station/security) +"jXJ" = ( +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron/white/side, +/area/station/hallway/primary/central/aft) "jXQ" = ( /obj/structure/flora/bush/large/style_random{ pixel_x = -18; @@ -26390,10 +29196,6 @@ /obj/effect/turf_decal/stripes/box, /turf/open/floor/iron/dark, /area/station/science/robotics/lab) -"jYu" = ( -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating, -/area/station/maintenance/starboard/central) "jYv" = ( /obj/structure/flora/bush/lavendergrass/style_random, /obj/structure/flora/rock/pile/jungle/style_random, @@ -26403,11 +29205,16 @@ }, /turf/open/misc/sandy_dirt, /area/station/security/tram) -"jYD" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/sign/poster/official/random/directional/north, -/turf/open/floor/iron, -/area/station/hallway/secondary/dock) +"jYF" = ( +/obj/effect/turf_decal/delivery, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/iron/white/small, +/area/station/service/janitor) "jYU" = ( /obj/machinery/door/poddoor/shutters/preopen{ id = "hopqueue"; @@ -26446,13 +29253,6 @@ dir = 1 }, /area/station/hallway/primary/central/fore) -"jZI" = ( -/obj/item/storage/backpack/duffelbag/sec{ - pixel_y = 12 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/station/security/office) "jZJ" = ( /obj/effect/spawner/structure/window/reinforced, /obj/effect/turf_decal/stripes/corner{ @@ -26490,19 +29290,6 @@ /obj/effect/turf_decal/stripes/box, /turf/open/floor/plating, /area/station/service/janitor) -"kar" = ( -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/siding/wood{ - dir = 1 - }, -/obj/effect/turf_decal/siding/wood, -/obj/machinery/door/airlock/public/glass{ - name = "Chapel Office" - }, -/obj/machinery/door/firedoor, -/obj/effect/mapping_helpers/airlock/access/all/service/chapel_office, -/turf/open/floor/iron/textured_half, -/area/station/service/chapel/office) "kat" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment, @@ -26522,6 +29309,17 @@ }, /turf/open/floor/iron, /area/station/science/xenobiology) +"kaz" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/commons/storage/tools) "kaD" = ( /turf/open/floor/iron/smooth_large, /area/station/science/auxlab/firing_range) @@ -26544,10 +29342,6 @@ }, /turf/open/misc/sandy_dirt, /area/station/security/tram) -"kaL" = ( -/obj/structure/window/reinforced/spawner/directional/south, -/turf/open/floor/plating, -/area/station/maintenance/fore/greater) "kaP" = ( /obj/structure/lattice, /obj/structure/grille, @@ -26561,13 +29355,6 @@ /obj/effect/turf_decal/tile/dark_red/opposingcorners, /turf/open/floor/iron, /area/station/security/tram) -"kba" = ( -/obj/structure/cable, -/obj/effect/mapping_helpers/broken_floor, -/obj/effect/decal/cleanable/dirt, -/obj/structure/broken_flooring/corner/directional/south, -/turf/open/floor/plating, -/area/station/maintenance/hallway/abandoned_recreation) "kbc" = ( /obj/effect/turf_decal/stripes/white/line{ dir = 1 @@ -26576,19 +29363,24 @@ /obj/structure/thermoplastic/light, /turf/open/floor/tram, /area/station/maintenance/port/aft) -"kbE" = ( -/obj/effect/decal/cleanable/blood/gibs/body, -/obj/machinery/light/small/broken/directional/north, -/turf/open/floor/carpet/orange, -/area/station/service/abandoned_gambling_den) -"kbW" = ( -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/carpet/orange, -/area/station/service/abandoned_gambling_den) -"kbY" = ( -/obj/structure/bookcase/random, -/turf/open/misc/asteroid, -/area/station/service/library/abandoned) +"kbk" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/turf/open/floor/wood, +/area/station/cargo/boutique) +"kbm" = ( +/obj/item/kirbyplants/random, +/obj/machinery/airalarm/directional/south, +/turf/open/floor/iron/smooth, +/area/station/maintenance/solars/starboard/fore) +"kbI" = ( +/obj/structure/table/glass, +/obj/machinery/cell_charger, +/obj/item/stock_parts/power_store/cell, +/turf/open/floor/iron/white, +/area/station/science/auxlab/firing_range) "kci" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -26602,23 +29394,6 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/construction) -"kcs" = ( -/obj/effect/turf_decal/tile/green/diagonal_centre, -/obj/effect/landmark/navigate_destination/kitchen, -/turf/open/floor/iron/diagonal, -/area/station/hallway/primary/central/aft) -"kct" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 10 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/wood, -/area/station/service/abandoned_gambling_den) -"kcy" = ( -/obj/effect/turf_decal/siding/wood, -/obj/effect/decal/cleanable/blood/gibs/old, -/turf/open/floor/plating, -/area/station/service/abandoned_gambling_den) "kcA" = ( /obj/structure/cable, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ @@ -26627,23 +29402,39 @@ /obj/machinery/light/small/directional/south, /turf/open/floor/iron/showroomfloor, /area/station/medical/surgery/theatre) -"kcT" = ( -/obj/effect/mapping_helpers/broken_floor, -/obj/effect/turf_decal/siding/wood, -/turf/open/floor/wood, -/area/station/service/abandoned_gambling_den) +"kcM" = ( +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/west, +/obj/machinery/camera/autoname/directional/west, +/obj/structure/disposalpipe/segment, +/obj/machinery/light/small/directional/west, +/obj/effect/turf_decal/tile/neutral/opposingcorners{ + dir = 1 + }, +/obj/effect/turf_decal/siding/thinplating_new{ + dir = 8 + }, +/turf/open/floor/iron/small, +/area/station/hallway/secondary/service) +"kcQ" = ( +/obj/machinery/atmospherics/pipe/smart/manifold/yellow/visible{ + dir = 1 + }, +/turf/open/floor/iron/white/small, +/area/station/science/ordnance/storage) "kcW" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/power/smes/full, /obj/structure/cable, /turf/open/floor/circuit, /area/station/tcommsat/server) -"kdl" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/obj/effect/turf_decal/tile/neutral/opposingcorners, -/obj/structure/sign/departments/vault/directional/south, -/turf/open/floor/iron, -/area/station/hallway/secondary/spacebridge) +"kdg" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/structure/displaycase/trophy, +/turf/open/floor/wood/parquet, +/area/station/service/library) "kdn" = ( /obj/structure/disposalpipe/segment, /turf/open/floor/plating, @@ -26652,14 +29443,6 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/cargo/storage) -"kdJ" = ( -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/security/prison/workout) "kdN" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/turf_decal/tile/brown/opposingcorners, @@ -26675,12 +29458,6 @@ dir = 9 }, /area/station/science/lower) -"kdP" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/brown/opposingcorners, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/cargo/miningoffice) "kea" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -26688,13 +29465,10 @@ /turf/open/floor/iron/white/small, /area/station/science/server) "keb" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/siding/red{ - dir = 10 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/small, -/area/station/security/office) +/obj/structure/cable, +/obj/effect/spawner/random/structure/girder, +/turf/open/floor/plating, +/area/station/maintenance/central/greater) "kee" = ( /obj/structure/disposalpipe/segment, /obj/effect/turf_decal/stripes/corner{ @@ -26724,9 +29498,25 @@ "ket" = ( /turf/open/floor/iron, /area/station/security/prison/work) -"kev" = ( -/turf/closed/wall, -/area/station/hallway/secondary/spacebridge) +"keL" = ( +/obj/effect/turf_decal/siding/wood, +/turf/open/floor/stone, +/area/station/service/chapel) +"keO" = ( +/obj/effect/spawner/random/trash, +/obj/effect/turf_decal/siding/white{ + dir = 4 + }, +/turf/open/floor/iron/dark/small, +/area/station/maintenance/aft) +"keP" = ( +/obj/item/kirbyplants/random, +/turf/open/floor/iron, +/area/station/science/lower) +"keQ" = ( +/obj/structure/flora/grass/jungle/b/style_3, +/turf/open/floor/grass, +/area/station/service/chapel) "keS" = ( /obj/effect/turf_decal/siding/white{ dir = 5 @@ -26743,17 +29533,6 @@ /obj/machinery/power/energy_accumulator/tesla_coil, /turf/open/floor/plating, /area/station/engineering/supermatter/room) -"keZ" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/dark_red/fourcorners, -/obj/machinery/newscaster/directional/north, -/turf/open/floor/iron, -/area/station/security/brig/entrance) "kft" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -26795,6 +29574,15 @@ /obj/effect/turf_decal/tile/neutral, /turf/open/floor/iron, /area/station/hallway/primary/central/fore) +"kfO" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/structure/chair/wood{ + dir = 4 + }, +/turf/open/floor/iron/grimy, +/area/station/service/bar) "kfW" = ( /obj/effect/turf_decal/siding/yellow{ dir = 1 @@ -26833,21 +29621,15 @@ dir = 1 }, /area/station/hallway/primary/aft) -"kgu" = ( -/obj/structure/lattice/catwalk, -/obj/machinery/atmospherics/components/unary/passive_vent, -/turf/open/space/basic, -/area/space) -"kgz" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/stripes/corner{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 +"kgw" = ( +/obj/machinery/door/airlock{ + name = "Gambling Den" }, -/turf/open/floor/iron, -/area/station/hallway/primary/central/fore) +/obj/effect/mapping_helpers/airlock/access/all/science/research, +/obj/item/assembly/mousetrap/armed, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/service/abandoned_gambling_den) "kgG" = ( /obj/structure/lattice/catwalk, /obj/structure/railing{ @@ -26894,6 +29676,16 @@ /obj/effect/turf_decal/stripes/white/line, /turf/open/floor/tram, /area/station/security/tram) +"kho" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/navbeacon{ + codes_txt = "patrol;next_patrol=6.3-Arrivals"; + location = "6.2-Arrivals" + }, +/turf/open/floor/iron, +/area/station/hallway/secondary/entry) "khp" = ( /obj/effect/turf_decal/stripes/white/line{ dir = 9 @@ -26917,15 +29709,6 @@ /obj/structure/reagent_dispensers/watertank, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) -"khE" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/neutral, -/obj/structure/sign/departments/holy/directional/south, -/turf/open/floor/iron, -/area/station/hallway/primary/port) "khG" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -26935,15 +29718,6 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/construction) -"khJ" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/dark_red/half/contrasted, -/obj/item/radio/intercom/directional/north, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/security/execution/transfer) "khQ" = ( /obj/structure/transport/linear/tram, /obj/structure/fluff/tram_rail/floor, @@ -26963,16 +29737,43 @@ dir = 1 }, /area/station/hallway/primary/central/fore) -"khW" = ( -/obj/structure/curtain/cloth, -/turf/open/floor/carpet/royalblack, -/area/station/commons/dorms) +"khY" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central/fore) +"khZ" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/cargo/office) "kia" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/smooth, /area/station/cargo/warehouse) +"kii" = ( +/obj/structure/flora/bush/flowers_yw/style_3{ + pixel_y = -3 + }, +/obj/structure/flora/bush/flowers_br/style_random{ + pixel_x = -6; + pixel_y = -6 + }, +/obj/structure/flora/bush/flowers_pp{ + pixel_y = -5; + pixel_x = -3 + }, +/obj/machinery/light/floor, +/obj/effect/light_emitter/fake_outdoors, +/obj/effect/turf_decal/siding/wood{ + dir = 5 + }, +/turf/open/floor/grass/Airless, +/area/station/hallway/primary/central/aft) "kit" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -27018,6 +29819,11 @@ /obj/machinery/status_display/ai/directional/north, /turf/open/floor/iron/smooth, /area/station/ai_monitored/turret_protected/aisat/equipment) +"kiR" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/iron, +/area/station/construction/mining/aux_base) "kjg" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -27029,13 +29835,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central/fore) -"kjh" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/stripes/corner, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/iron, -/area/station/maintenance/hallway/abandoned_command) "kjl" = ( /obj/structure/cable, /obj/effect/spawner/random/structure/grille, @@ -27051,29 +29850,13 @@ dir = 8 }, /area/station/hallway/secondary/dock) -"kjJ" = ( -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/trimline/neutral/line{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/neutral/line{ - dir = 8 - }, -/obj/machinery/navbeacon{ - codes_txt = "patrol;next_patrol=15.0-CentralStarboard-CentralFore"; - location = "14.0-Dormatories-CentralStarboard" - }, -/turf/open/floor/iron, -/area/station/hallway/primary/central/fore) -"kjL" = ( -/obj/structure/disposalpipe/segment, -/obj/effect/mapping_helpers/broken_floor, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ +"kjO" = ( +/obj/machinery/portable_atmospherics/canister/air, +/obj/effect/turf_decal/siding/white{ dir = 4 }, -/turf/open/floor/plating, -/area/station/maintenance/hallway/abandoned_command) +/turf/open/floor/iron/dark/small, +/area/station/maintenance/aft) "kjU" = ( /obj/structure/plasticflaps/opaque, /turf/open/floor/plating, @@ -27109,13 +29892,6 @@ /obj/machinery/light/small/dim/directional/east, /turf/open/floor/iron, /area/station/maintenance/starboard/aft) -"kkD" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/light/small/directional/east, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/iron, -/area/station/maintenance/hallway/abandoned_command) "kkK" = ( /obj/effect/spawner/random/structure/closet_maintenance, /obj/effect/spawner/random/maintenance, @@ -27138,54 +29914,40 @@ /obj/item/kirbyplants/random, /turf/open/floor/iron/white/textured_large, /area/station/command/heads_quarters/cmo) -"kkW" = ( -/obj/structure/closet{ - name = "Evidence Closet 2" - }, -/obj/effect/decal/cleanable/dirt, -/obj/structure/secure_safe/directional/north{ - name = "evidence safe" +"kkS" = ( +/obj/structure/railing{ + dir = 8 }, +/turf/open/floor/iron, +/area/station/commons/dorms) +"kkV" = ( +/obj/effect/turf_decal/tile/brown/opposingcorners, +/obj/machinery/computer/order_console/mining, +/obj/machinery/light/small/directional/west, +/turf/open/floor/iron, +/area/station/cargo/miningoffice) +"kkY" = ( +/obj/structure/chair/stool/directional/east, /turf/open/floor/iron/smooth, -/area/station/security/evidence) -"kla" = ( -/obj/structure/closet, -/obj/item/clothing/suit/toggle/owlwings, -/obj/item/clothing/under/costume/owl, -/obj/item/clothing/shoes/combat, -/obj/item/storage/backpack/duffelbag, -/turf/open/floor/plating, -/area/station/maintenance/fore/greater) +/area/station/hallway/secondary/command) "kld" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /turf/open/floor/iron/kitchen/small, /area/station/security/prison/mess) -"klf" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/chair{ - dir = 1 +"klF" = ( +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 4 }, -/turf/open/floor/plating, -/area/station/maintenance/fore/greater) -"klo" = ( -/obj/effect/mob_spawn/corpse/human, -/turf/open/floor/carpet/orange, -/area/station/service/abandoned_gambling_den) -"kls" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/white/corner{ - dir = 1 +/obj/effect/turf_decal/stripes/line{ + dir = 8 }, -/area/station/science/lower) -"klC" = ( -/obj/structure/chair/stool/directional/east, -/turf/open/floor/plating, -/area/station/service/abandoned_gambling_den) +/obj/item/radio/intercom/directional/west, +/turf/open/floor/iron/dark/side{ + dir = 4 + }, +/area/station/science/xenobiology) "klH" = ( /obj/structure/cable, /obj/machinery/power/apc/auto_name/directional/west, @@ -27209,27 +29971,20 @@ /obj/effect/landmark/start/atmospheric_technician, /turf/open/floor/iron/smooth, /area/station/maintenance/disposal/incinerator) -"klR" = ( -/obj/machinery/computer/slot_machine{ - pixel_y = 2 +"klN" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 10 }, -/obj/machinery/light/small/directional/east, -/turf/open/floor/carpet/orange, -/area/station/service/abandoned_gambling_den) +/obj/structure/flora/bush/large/style_random{ + pixel_y = 0 + }, +/turf/open/floor/grass, +/area/station/service/chapel) "klY" = ( /obj/effect/turf_decal/stripes/white/line, /obj/effect/spawner/random/maintenance, /turf/open/floor/tram, /area/station/maintenance/department/medical/central) -"kmb" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/computer/holodeck{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/commons/fitness/recreation/entertainment) "kmd" = ( /obj/structure/cable, /obj/machinery/door/airlock/external{ @@ -27305,12 +30060,18 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/small, /area/station/maintenance/department/engine/atmos) -"kmS" = ( -/obj/machinery/power/shuttle_engine/propulsion{ - dir = 1 +"kmP" = ( +/obj/effect/turf_decal/tile/purple/opposingcorners, +/obj/effect/turf_decal/siding/green{ + dir = 9 }, -/turf/open/floor/plating, -/area/station/commons/fitness/recreation/entertainment) +/obj/structure/table, +/obj/machinery/cell_charger, +/obj/item/stock_parts/power_store/cell/high, +/obj/machinery/power/apc/auto_name/directional/west, +/obj/structure/cable, +/turf/open/floor/iron/cafeteria, +/area/station/science/circuits) "kmT" = ( /obj/structure/closet/firecloset, /turf/open/floor/plating, @@ -27325,17 +30086,16 @@ }, /turf/open/floor/iron, /area/station/cargo/storage) -"knt" = ( -/obj/effect/turf_decal/stripes/corner{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/obj/structure/broken_flooring/pile/directional/east, -/turf/open/floor/plating, -/area/station/maintenance/hallway/abandoned_command) "knv" = ( /turf/closed/wall, /area/station/maintenance/department/engine/atmos) +"knB" = ( +/obj/machinery/door/airlock{ + id_tag = "Toilet2"; + name = "Unit 2" + }, +/turf/open/floor/iron/white/small, +/area/station/commons/toilet/restrooms) "knC" = ( /obj/structure/disposalpipe/segment{ dir = 9 @@ -27352,6 +30112,14 @@ /obj/effect/turf_decal/bot_white, /turf/open/floor/iron/dark, /area/station/cargo/storage) +"knO" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/airalarm/directional/east, +/obj/structure/cable, +/obj/machinery/duct, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/white/small, +/area/station/commons/toilet/restrooms) "knV" = ( /obj/structure/closet/l3closet, /obj/effect/turf_decal/stripes/line{ @@ -27360,14 +30128,19 @@ /obj/machinery/airalarm/directional/west, /turf/open/floor/iron/dark/small, /area/station/medical/virology) -"kon" = ( -/obj/structure/cable, -/obj/structure/chair{ - pixel_y = -2 - }, +"kol" = ( /obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/station/security/interrogation) +/obj/structure/table, +/obj/item/stack/spacecash/c1, +/obj/item/cigarette/cigar/havana, +/turf/open/floor/light/colour_cycle/dancefloor_b, +/area/station/maintenance/starboard/central) +"kop" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/holopad, +/turf/open/floor/iron, +/area/station/engineering/storage/tech) "kov" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -27411,7 +30184,7 @@ dir = 4 }, /obj/machinery/atmospherics/pipe/smart/simple/cyan/visible/layer4{ - dir = 9 + dir = 8 }, /turf/open/space/basic, /area/station/engineering/atmos/space_catwalk) @@ -27456,6 +30229,14 @@ }, /turf/open/floor/iron, /area/station/cargo/sorting) +"kpU" = ( +/obj/effect/turf_decal/tile/blue/anticorner/contrasted, +/turf/open/floor/iron/white, +/area/station/medical/paramedic) +"kpX" = ( +/obj/effect/landmark/start/scientist, +/turf/open/floor/iron/dark, +/area/station/science/ordnance) "kqb" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -27464,11 +30245,11 @@ /obj/machinery/power/apc/auto_name/directional/south, /turf/open/floor/iron/white/side, /area/station/science/research) -"kqo" = ( +"kql" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/closed/wall/r_wall, -/area/station/hallway/secondary/spacebridge) +/obj/effect/turf_decal/tile/dark_red/opposingcorners, +/turf/open/floor/iron, +/area/station/security/brig/entrance) "kqr" = ( /obj/item/radio/intercom/directional/north, /obj/effect/turf_decal/tile/red/anticorner/contrasted{ @@ -27490,6 +30271,11 @@ /obj/machinery/light/small/directional/east, /turf/open/floor/iron/smooth, /area/station/security/checkpoint/engineering) +"kqy" = ( +/obj/structure/cable, +/obj/machinery/duct, +/turf/open/floor/iron/kitchen/small, +/area/station/security/prison/mess) "kqK" = ( /obj/effect/spawner/structure/window, /obj/machinery/door/poddoor/shutters/preopen{ @@ -27544,6 +30330,11 @@ /obj/effect/turf_decal/tile/brown/anticorner/contrasted, /turf/open/floor/iron, /area/station/cargo/sorting) +"kqU" = ( +/obj/effect/decal/cleanable/dirt, +/obj/item/radio/intercom/directional/north, +/turf/open/floor/carpet/lone, +/area/station/service/abandoned_gambling_den) "kqW" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -27564,16 +30355,18 @@ "kqX" = ( /turf/closed/wall, /area/station/ai_monitored/aisat/exterior) -"krc" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 +"kqZ" = ( +/obj/structure/table, +/obj/item/stack/package_wrap, +/obj/item/hand_labeler, +/obj/effect/turf_decal/tile/brown/opposingcorners{ + dir = 1 }, +/obj/machinery/power/apc/auto_name/directional/east, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, +/obj/machinery/light/cold/directional/east, /turf/open/floor/iron, -/area/station/maintenance/port/fore) +/area/station/commons/vacant_room/commissary) "krd" = ( /obj/machinery/rnd/production/circuit_imprinter/department/science, /obj/machinery/newscaster/directional/north, @@ -27589,30 +30382,14 @@ /obj/item/kirbyplants/random/fullysynthetic, /turf/open/floor/iron, /area/station/maintenance/hallway/abandoned_command) -"krp" = ( -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/iron, -/area/station/maintenance/hallway/abandoned_command) -"kru" = ( -/obj/structure/chair/comfy/beige{ - dir = 4 - }, -/obj/machinery/computer/security/telescreen/entertainment/directional/west, -/turf/open/floor/iron, -/area/station/commons/dorms) "krz" = ( /obj/structure/cable, /turf/open/floor/iron/stairs, /area/station/maintenance/department/science/xenobiology) -"krC" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/mapping_helpers/broken_floor, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/maintenance/hallway/abandoned_command) +"krG" = ( +/obj/effect/spawner/random/structure/girder, +/turf/open/floor/plating, +/area/station/maintenance/fore/greater) "krK" = ( /obj/structure/cable, /obj/machinery/door/airlock/external{ @@ -27658,6 +30435,10 @@ /obj/machinery/telecomms/server/presets/common, /turf/open/floor/circuit, /area/station/tcommsat/server) +"ksm" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/stone, +/area/station/service/bar) "kso" = ( /obj/structure/disposalpipe/junction{ dir = 8 @@ -27667,15 +30448,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/maintenance/port/fore) -"kst" = ( -/obj/structure/chair/plastic{ - dir = 4 - }, -/obj/item/radio/intercom/directional/north, -/obj/effect/turf_decal/tile/neutral/opposingcorners, -/obj/machinery/camera/autoname/directional/north, -/turf/open/floor/iron, -/area/station/hallway/secondary/spacebridge) "ksv" = ( /obj/effect/turf_decal/stripes/white/line{ dir = 8 @@ -27721,33 +30493,22 @@ }, /turf/open/floor/catwalk_floor/iron, /area/station/engineering/gravity_generator) -"ksN" = ( -/obj/structure/transit_tube/station/dispenser, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron, -/area/station/maintenance/starboard/greater) -"ksP" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/smooth, -/area/station/hallway/secondary/command) -"ksX" = ( +"ksJ" = ( +/obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/stripes/line{ +/obj/structure/disposalpipe/sorting/mail{ dir = 4 }, +/obj/effect/mapping_helpers/mail_sorting/service/hydroponics, +/turf/open/floor/plating, +/area/station/maintenance/central/greater) +"ksN" = ( +/obj/structure/transit_tube/station/dispenser, /obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/engineering/gravity_generator) -"ktc" = ( -/obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/station/cargo/office) +/turf/open/floor/iron, +/area/station/maintenance/starboard/greater) "kte" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ @@ -27755,6 +30516,20 @@ }, /turf/open/floor/iron/dark/small, /area/station/service/chapel/storage) +"ktl" = ( +/obj/structure/cable, +/obj/structure/table/reinforced, +/obj/item/flashlight{ + pixel_x = 1; + pixel_y = 5 + }, +/obj/item/assembly/flash/handheld, +/obj/item/ai_module/reset{ + pixel_y = 14 + }, +/obj/machinery/camera/autoname/directional/south, +/turf/open/floor/iron, +/area/station/engineering/storage/tech) "ktB" = ( /obj/effect/turf_decal/stripes/line{ dir = 10 @@ -27789,18 +30564,37 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/cargo/office) -"ktN" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/chair/sofa/bench/left{ +"ktQ" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/structure/table, +/obj/item/storage/box/mousetraps{ + pixel_x = -5 + }, +/obj/item/storage/box/mousetraps{ + pixel_x = 11; + pixel_y = 7 + }, +/obj/machinery/light/small/directional/west, +/turf/open/floor/iron/small, +/area/station/commons) +"ktT" = ( +/obj/effect/turf_decal/tile/blue{ dir = 4 }, -/turf/open/floor/iron, -/area/station/commons/fitness/recreation/entertainment) -"ktZ" = ( -/obj/effect/turf_decal/sand/plating, -/obj/structure/bookcase/random, -/turf/open/floor/plating, -/area/station/service/library/abandoned) +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 10 + }, +/obj/machinery/atmospherics/components/binary/pump/on/layer2{ + dir = 1 + }, +/obj/item/radio/intercom/prison/directional/west, +/turf/open/floor/iron/cafeteria, +/area/station/security/prison) "kua" = ( /obj/structure/table, /obj/item/disk/cargo{ @@ -27819,6 +30613,14 @@ }, /turf/open/floor/iron/dark, /area/station/cargo/office) +"kuk" = ( +/obj/machinery/light/warm/dim, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/obj/effect/turf_decal/tile/neutral, +/turf/open/floor/iron, +/area/station/hallway/primary/central/aft) "kuq" = ( /obj/machinery/computer/cargo/request, /turf/open/floor/plating, @@ -27848,13 +30650,26 @@ /obj/effect/turf_decal/trimline/neutral/line, /turf/open/floor/iron, /area/station/hallway/primary/central/fore) +"kuO" = ( +/obj/structure/chair{ + dir = 1; + pixel_y = -2 + }, +/obj/machinery/firealarm/directional/east, +/obj/machinery/camera/autoname/directional/east, +/turf/open/floor/iron, +/area/station/science/lower) +"kuQ" = ( +/obj/effect/turf_decal/tile/yellow/anticorner/contrasted{ + dir = 4 + }, +/obj/machinery/airalarm/directional/north, +/obj/structure/chair, +/turf/open/floor/iron, +/area/station/commons/storage/tools) "kvb" = ( /turf/closed/wall/r_wall/rust, /area/station/engineering/atmos) -"kvf" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/maintenance/hallway/abandoned_recreation) "kvl" = ( /obj/structure/cable, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, @@ -27864,18 +30679,16 @@ /obj/effect/turf_decal/trimline/neutral/line, /turf/open/floor/iron, /area/station/hallway/primary/central/fore) -"kvr" = ( -/obj/structure/cable, -/obj/effect/turf_decal/siding/dark_red{ - dir = 1 +"kvD" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 }, -/obj/structure/secure_safe/hos{ - pixel_x = 15; - pixel_y = 28 +/obj/structure/disposalpipe/segment{ + dir = 6 }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/stone, -/area/station/command/heads_quarters/hos) +/turf/open/floor/iron, +/area/station/hallway/primary/port) "kvI" = ( /obj/docking_port/stationary/random{ dir = 8; @@ -27921,6 +30734,16 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/maintenance/starboard/greater) +"kwy" = ( +/obj/structure/cable, +/obj/effect/mapping_helpers/broken_floor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/port/greater) "kwA" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 1 @@ -27930,7 +30753,7 @@ /area/station/science/robotics/augments) "kwH" = ( /obj/effect/turf_decal/sand/plating, -/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible/layer4{ +/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible{ dir = 4 }, /turf/open/floor/plating/airless, @@ -27979,6 +30802,11 @@ /obj/machinery/firealarm/directional/north, /turf/open/floor/iron/white, /area/station/hallway/primary/starboard) +"kxF" = ( +/obj/effect/spawner/random/maintenance, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/fore/greater) "kxL" = ( /turf/open/floor/iron/dark/small, /area/station/hallway/secondary/entry) @@ -27993,6 +30821,22 @@ /obj/structure/window/spawner/directional/east, /turf/open/floor/plating/rust, /area/station/maintenance/fore/lesser) +"kxY" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/window/left/directional/south{ + name = "Hydroponics Desk" + }, +/obj/machinery/door/firedoor, +/obj/item/paper/guides/jobs/hydroponics, +/obj/item/pen{ + pixel_x = 4 + }, +/obj/machinery/door/window/right/directional/north{ + name = "Hydroponics Desk"; + req_access = list("hydroponics") + }, +/turf/open/floor/plating, +/area/station/service/hydroponics) "kya" = ( /obj/structure/table/greyscale, /obj/item/paper{ @@ -28015,27 +30859,19 @@ /obj/structure/sign/warning/no_smoking/circle/directional/west, /turf/open/floor/iron/smooth, /area/station/engineering/atmos) +"kym" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/wood, +/area/station/cargo/boutique) "kyr" = ( /obj/structure/window/reinforced/spawner/directional/south, /obj/machinery/airalarm/directional/west, /obj/effect/landmark/generic_maintenance_landmark, /turf/open/floor/wood, /area/station/service/chapel/funeral) -"kyG" = ( -/obj/item/radio/intercom/directional/south, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/engineering/storage/tech) -"kyI" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/door/airlock/public/glass{ - name = "Docking Corridor" - }, -/obj/machinery/door/firedoor, -/turf/open/floor/iron/textured_half{ - dir = 8 - }, -/area/station/hallway/secondary/dock) "kyN" = ( /obj/structure/reagent_dispensers/watertank, /turf/open/floor/iron/small, @@ -28051,30 +30887,6 @@ /obj/effect/turf_decal/trimline/neutral/line, /turf/open/floor/iron, /area/station/hallway/primary/central/fore) -"kyZ" = ( -/obj/structure/disposalpipe/segment{ - dir = 6 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/neutral/line{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/neutral/line, -/turf/open/floor/iron, -/area/station/hallway/primary/central/fore) -"kzu" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/obj/effect/turf_decal/trimline/neutral/line{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/neutral/line, -/turf/open/floor/iron, -/area/station/hallway/primary/central/fore) "kzv" = ( /obj/structure/chair/sofa/bench/left{ dir = 8 @@ -28085,19 +30897,21 @@ }, /turf/open/floor/iron/white/corner, /area/station/hallway/secondary/exit/departure_lounge) -"kzx" = ( +"kzz" = ( +/obj/effect/turf_decal/weather/dirt, +/mob/living/basic/deer, +/obj/structure/flora/bush/flowers_yw, +/turf/open/floor/grass, +/area/station/service/chapel) +"kzF" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/door/firedoor, -/obj/effect/turf_decal/stripes/red/line{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/red/line{ - dir = 8 - }, -/turf/open/floor/iron/small, -/area/station/hallway/primary/central/fore) +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/central/greater) "kzI" = ( /obj/effect/turf_decal/bot_white, /obj/effect/spawner/random/structure/closet_empty/crate, @@ -28109,10 +30923,13 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/maintenance/starboard/aft) -"kzX" = ( -/obj/structure/cable, -/turf/open/floor/wood/tile, -/area/station/commons/vacant_room/commissary) +"kzV" = ( +/obj/effect/landmark/start/hangover, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/turf/open/floor/stone, +/area/station/service/chapel) "kAf" = ( /obj/structure/transit_tube/station/dispenser/flipped{ dir = 1 @@ -28120,18 +30937,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/maintenance/starboard/aft) -"kAk" = ( -/obj/structure/cable, -/obj/effect/turf_decal/tile/dark_red/opposingcorners, -/obj/machinery/power/apc/auto_name/directional/south, -/obj/effect/decal/cleanable/dirt, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/bed/dogbed/mcgriff, -/mob/living/basic/pet/dog/pug/mcgriff, -/turf/open/floor/iron, -/area/station/security/warden) "kAn" = ( /obj/effect/spawner/random/structure/crate, /turf/open/floor/plating, @@ -28154,29 +30959,21 @@ }, /turf/open/space/basic, /area/space/nearstation) +"kAJ" = ( +/obj/structure/closet/wardrobe/mixed, +/obj/effect/turf_decal/siding/wideplating/dark, +/obj/item/radio/intercom/directional/south, +/turf/open/floor/iron/small, +/area/station/commons/fitness/locker_room) "kAR" = ( /obj/structure/fireplace, /obj/effect/turf_decal/siding/wood, /turf/open/floor/stone, /area/station/maintenance/aft) -"kBc" = ( -/obj/effect/mapping_helpers/broken_floor, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/structure/extinguisher_cabinet/directional/north, -/turf/open/floor/iron, -/area/station/hallway/secondary/recreation) "kBg" = ( /obj/structure/cable, /turf/open/floor/iron/small, /area/station/command/teleporter) -"kBo" = ( -/obj/structure/disposalpipe/segment, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/iron, -/area/station/maintenance/hallway/abandoned_command) "kBA" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -28204,9 +31001,16 @@ /obj/machinery/atmospherics/pipe/smart/manifold/pink/visible, /turf/closed/wall/mineral/titanium/nodiagonal, /area/station/engineering/supermatter) -"kBH" = ( -/turf/open/floor/iron/white/small, -/area/station/service/janitor) +"kBM" = ( +/obj/effect/turf_decal/siding/thinplating{ + dir = 8 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/obj/machinery/firealarm/directional/west, +/turf/open/floor/eighties/red, +/area/station/hallway/primary/central/fore) "kBZ" = ( /obj/machinery/door/airlock/command{ name = "Chief Engineer's Office" @@ -28219,15 +31023,20 @@ /obj/effect/landmark/start/medical_doctor, /turf/open/floor/iron/white, /area/station/medical/treatment_center) -"kCo" = ( -/obj/structure/closet/emcloset, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/small, -/area/station/maintenance/port/lesser) "kCy" = ( /obj/effect/spawner/structure/window/reinforced/tinted, /turf/open/floor/plating, /area/station/command/heads_quarters/captain) +"kCB" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/holopad, +/obj/effect/landmark/event_spawn, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/wood, +/area/station/cargo/boutique) "kCC" = ( /obj/structure/sink/directional/west, /obj/structure/table/bronze, @@ -28279,20 +31088,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/port/fore) -"kCW" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/engineering/gravity_generator) -"kDg" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/smooth, -/area/station/maintenance/solars/port/aft) "kDj" = ( /obj/effect/turf_decal/stripes/white/line{ dir = 5 @@ -28300,20 +31095,10 @@ /obj/machinery/atmospherics/components/tank, /turf/open/floor/plating, /area/station/engineering/atmos/pumproom) -"kDq" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/station/commons) -"kDV" = ( -/obj/item/kirbyplants/random, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/cobweb/cobweb2, -/obj/machinery/camera/directional/north, -/obj/machinery/light/small/directional/north, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) +"kDs" = ( +/obj/structure/chair/stool/directional/north, +/turf/open/floor/carpet/purple, +/area/station/commons/dorms) "kDY" = ( /obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible, /obj/machinery/door/airlock/public/glass{ @@ -28321,17 +31106,14 @@ }, /turf/open/floor/iron, /area/station/engineering/atmos) -"kEe" = ( -/obj/structure/broken_flooring/singular/directional/south, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/plating, -/area/station/maintenance/port/aft) -"kEo" = ( +"kEd" = ( +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/obj/machinery/camera/autoname/directional/west, /obj/structure/cable, -/obj/effect/mapping_helpers/broken_floor, /turf/open/floor/iron, -/area/station/maintenance/hallway/abandoned_recreation) +/area/station/commons/dorms) "kEs" = ( /obj/machinery/door/airlock/external/glass{ name = "Supply Door Airlock" @@ -28364,28 +31146,10 @@ }, /turf/open/floor/iron, /area/station/cargo/storage) -"kEF" = ( -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/effect/turf_decal/siding/white{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/station/medical/medbay/aft) "kEH" = ( /obj/effect/turf_decal/bot_white, /turf/open/floor/iron/dark, /area/station/cargo/storage) -"kEL" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/turf/open/floor/plating, -/area/station/maintenance/department/prison) -"kEO" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/landmark/start/chaplain, -/turf/open/floor/iron/dark/small, -/area/station/service/chapel/storage) "kFg" = ( /obj/structure/disposalpipe/segment, /obj/effect/turf_decal/siding/wood, @@ -28395,17 +31159,21 @@ /obj/structure/cable, /turf/open/floor/iron/smooth, /area/station/command/heads_quarters/qm) -"kFs" = ( -/obj/effect/turf_decal/tile/dark_red/opposingcorners, -/obj/structure/chair{ +"kFq" = ( +/obj/structure/disposalpipe/trunk{ dir = 8 }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/flasher/directional/east{ - id = "brigisolation" +/obj/machinery/disposal/bin, +/obj/effect/turf_decal/bot, +/turf/open/floor/iron/dark, +/area/station/service/lawoffice) +"kFw" = ( +/obj/machinery/door/airlock{ + id_tag = "Cabin2"; + name = "Cabin 2" }, -/turf/open/floor/iron, -/area/station/security/brig/entrance) +/turf/open/floor/carpet/purple, +/area/station/commons/dorms) "kFy" = ( /obj/effect/turf_decal/tile/blue, /obj/machinery/airalarm/directional/west, @@ -28472,10 +31240,15 @@ }, /turf/open/floor/iron/dark, /area/station/medical/medbay/central) -"kGz" = ( -/obj/structure/girder, -/turf/open/floor/plating, -/area/station/maintenance/fore/greater) +"kGw" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/effect/turf_decal/siding/thinplating{ + dir = 4 + }, +/turf/open/floor/eighties/red, +/area/station/hallway/primary/central/fore) "kGB" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 1 @@ -28494,21 +31267,6 @@ /obj/effect/landmark/start/hangover, /turf/open/floor/wood/parquet, /area/station/service/library) -"kGM" = ( -/obj/structure/disposalpipe/trunk{ - dir = 1 - }, -/obj/machinery/disposal/bin, -/obj/effect/turf_decal/bot, -/obj/effect/turf_decal/siding/thinplating_new/terracotta/corner{ - dir = 1 - }, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/iron/dark/smooth_large, -/area/station/command/meeting_room) -"kGS" = ( -/turf/open/floor/iron/white, -/area/station/maintenance/central/greater) "kGY" = ( /obj/structure/plasticflaps/opaque, /obj/effect/turf_decal/bot, @@ -28550,11 +31308,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/department/science/xenobiology) -"kHH" = ( -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/maintenance/port/fore) "kHI" = ( /obj/structure/lattice/catwalk, /obj/structure/railing{ @@ -28600,23 +31353,17 @@ }, /turf/open/space/basic, /area/station/engineering/atmos/space_catwalk) -"kHT" = ( -/obj/structure/table, -/obj/effect/spawner/random/maintenance, -/obj/machinery/light/small/directional/west, -/obj/machinery/firealarm/directional/west, -/turf/open/floor/iron, -/area/station/commons/dorms) -"kIe" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 +"kHU" = ( +/obj/effect/turf_decal/siding/thinplating_new/light{ + dir = 8 }, -/turf/open/floor/iron/dark, -/area/station/cargo/office) +/obj/effect/landmark/start/botanist, +/turf/open/floor/iron/white/small, +/area/station/service/hydroponics) +"kHX" = ( +/obj/effect/turf_decal/tile/neutral, +/turf/open/floor/iron, +/area/station/hallway/primary/central/aft) "kIj" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment, @@ -28624,6 +31371,13 @@ /obj/structure/window/spawner/directional/east, /turf/open/floor/plating, /area/station/maintenance/fore/lesser) +"kIm" = ( +/obj/machinery/camera/autoname/directional/south, +/obj/machinery/light/small/directional/south, +/turf/open/floor/iron/white/side{ + dir = 1 + }, +/area/station/science/xenobiology) "kIn" = ( /obj/machinery/computer/mech_bay_power_console{ dir = 8 @@ -28648,17 +31402,6 @@ }, /turf/open/floor/iron/white, /area/station/medical/medbay/central) -"kIB" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/white/corner{ - dir = 8 - }, -/area/station/science/xenobiology) -"kIL" = ( -/obj/machinery/vending/cigarette, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/wood, -/area/station/service/abandoned_gambling_den) "kIO" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -28751,12 +31494,6 @@ /obj/effect/spawner/random/trash, /turf/open/floor/plating, /area/station/maintenance/port/lesser) -"kJQ" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/maintenance/department/medical/central) "kJR" = ( /obj/structure/disposalpipe/segment{ dir = 9 @@ -28771,50 +31508,32 @@ /obj/structure/cable, /turf/open/floor/iron/stairs, /area/station/engineering/storage/tech) -"kJX" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/trimline/neutral/line{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/neutral/line{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/central/fore) "kKa" = ( /obj/structure/reagent_dispensers/fueltank, /turf/open/floor/plating, /area/station/maintenance/starboard/greater) -"kKe" = ( +"kKh" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/neutral/half/contrasted, -/obj/effect/turf_decal/stripes/corner{ - dir = 4 +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/security/glass{ + id_tag = "outerbrig"; + name = "Brig" }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark/side, -/area/station/science/xenobiology) -"kKB" = ( -/obj/structure/window/spawner/directional/west, -/obj/structure/window/spawner/directional/south, -/obj/structure/flora/bush/large/style_random{ - pixel_x = -13; - pixel_y = -1 +/obj/effect/mapping_helpers/airlock/access/all/security/entrance, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "sci-entrance" }, -/obj/structure/flora/bush/flowers_br/style_random, -/turf/open/misc/sandy_dirt, -/area/station/commons) +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron/textured_half, +/area/station/security/brig/entrance) "kKD" = ( -/obj/machinery/shower/directional/south, -/obj/effect/turf_decal/box, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/turf/open/floor/iron/showroomfloor, -/area/station/commons/toilet/restrooms) +/obj/structure/chair/comfy/brown, +/obj/structure/sign/painting/library{ + pixel_x = 30 + }, +/turf/open/floor/wood/parquet, +/area/station/service/library) "kKT" = ( /obj/machinery/computer/camera_advanced/xenobio{ dir = 4 @@ -28827,10 +31546,6 @@ }, /turf/open/floor/iron/dark/small, /area/station/science/xenobiology) -"kKV" = ( -/obj/structure/reagent_dispensers/watertank, -/turf/open/floor/plating, -/area/station/maintenance/port/aft) "kLk" = ( /obj/effect/turf_decal/stripes/line, /obj/machinery/atmospherics/pipe/smart/simple/orange/visible{ @@ -28844,14 +31559,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/wood, /area/station/service/chapel/funeral) -"kLu" = ( -/obj/machinery/shower/directional/south, -/obj/effect/turf_decal/box, -/obj/effect/spawner/random/trash/soap{ - spawn_scatter_radius = 1 - }, -/turf/open/floor/iron/showroomfloor, -/area/station/commons/toilet/restrooms) "kLv" = ( /obj/effect/decal/cleanable/oil/slippery, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -28861,14 +31568,6 @@ }, /turf/open/floor/plating, /area/station/engineering/atmospherics_engine) -"kLB" = ( -/obj/machinery/shower/directional/south, -/obj/effect/turf_decal/box, -/obj/effect/mapping_helpers/broken_floor, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/turf/open/floor/iron/showroomfloor, -/area/station/commons/toilet/restrooms) "kLS" = ( /turf/open/floor/iron/stairs{ dir = 1 @@ -28881,18 +31580,16 @@ /obj/machinery/light/small/directional/south, /turf/open/floor/carpet, /area/station/medical/psychology) -"kMo" = ( -/obj/structure/cable, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating, -/area/station/maintenance/hallway/abandoned_recreation) -"kMz" = ( +"kMA" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating, -/area/station/maintenance/starboard/aft) +/obj/machinery/light/warm/dim, +/obj/machinery/camera/autoname/directional/south, +/obj/structure/extinguisher_cabinet/directional/south, +/obj/effect/turf_decal/tile/neutral, +/turf/open/floor/iron, +/area/station/hallway/primary/central/aft) "kMW" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -28963,46 +31660,21 @@ /obj/item/radio/intercom/directional/north, /turf/open/floor/iron, /area/station/hallway/secondary/dock) +"kNX" = ( +/obj/structure/closet/masks, +/obj/structure/extinguisher_cabinet/directional/north, +/turf/open/floor/iron, +/area/station/commons/dorms) "kNZ" = ( /obj/structure/cable, /obj/machinery/light/small/directional/north, /obj/machinery/power/apc/auto_name/directional/north, /turf/open/floor/iron, /area/station/construction/mining/aux_base) -"kOc" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/iron, -/area/station/hallway/secondary/entry) -"kOd" = ( -/obj/effect/turf_decal/siding/blue, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/turf/open/floor/iron/white, -/area/station/medical/paramedic) "kOm" = ( /obj/structure/cable, /turf/closed/wall/r_wall, /area/station/maintenance/solars/port/aft) -"kOq" = ( -/obj/effect/turf_decal/tile/brown/half, -/obj/effect/turf_decal/tile/brown/half{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/textured_half, -/area/station/cargo/miningoffice) -"kOv" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/brown/half, -/obj/effect/turf_decal/tile/brown/half{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/textured_half, -/area/station/cargo/miningoffice) "kOG" = ( /obj/structure/cable, /obj/machinery/door/airlock/external{ @@ -29032,10 +31704,6 @@ /obj/effect/spawner/structure/window, /turf/open/floor/plating, /area/station/construction/mining/aux_base) -"kOW" = ( -/obj/effect/mob_spawn/corpse/human/miner, -/turf/open/misc/asteroid, -/area/space/nearstation) "kPa" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -29053,6 +31721,28 @@ }, /turf/open/floor/iron/dark/side, /area/station/security/execution/transfer) +"kPo" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/plating, +/area/station/maintenance/port/greater) +"kPp" = ( +/obj/structure/closet/secure_closet/bar, +/obj/item/stack/spacecash/c1, +/obj/item/stack/spacecash/c1, +/obj/item/stack/spacecash/c1, +/obj/item/stack/spacecash/c1, +/obj/item/stack/spacecash/c1, +/obj/machinery/airalarm/directional/north, +/obj/effect/turf_decal/siding/wood{ + dir = 5 + }, +/turf/open/floor/stone, +/area/station/service/bar/backroom) "kPv" = ( /obj/structure/table, /obj/item/paper_bin{ @@ -29075,36 +31765,23 @@ dir = 1 }, /area/station/security/prison/shower) -"kPW" = ( -/turf/open/floor/plating, -/area/station/maintenance/port/fore) -"kQb" = ( +"kPL" = ( /obj/structure/disposalpipe/segment, -/obj/effect/decal/cleanable/dirt, -/obj/structure/broken_flooring/pile/directional/east, -/turf/open/floor/plating, -/area/station/maintenance/starboard/aft) -"kQe" = ( -/obj/machinery/button/door/directional/west{ - id = "QMLoaddoor"; - layer = 4; - name = "Loading Doors"; - pixel_y = -8; - req_access = list("cargo") +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 }, -/obj/machinery/button/door/directional/west{ - id = "QMLoaddoor2"; - layer = 4; - name = "Loading Doors"; - pixel_y = 8; - req_access = list("cargo") +/obj/effect/turf_decal/trimline/neutral/line{ + dir = 4 }, -/obj/effect/turf_decal/bot, -/obj/effect/turf_decal/stripes/line{ +/obj/effect/turf_decal/trimline/neutral/line{ dir = 8 }, +/obj/structure/cable, /turf/open/floor/iron, -/area/station/cargo/storage) +/area/station/hallway/primary/central/fore) +"kPW" = ( +/turf/open/floor/plating, +/area/station/maintenance/port/fore) "kQk" = ( /obj/effect/turf_decal/siding/wood{ dir = 5 @@ -29132,22 +31809,31 @@ "kQt" = ( /turf/closed/wall/r_wall, /area/station/maintenance/starboard/aft) -"kQA" = ( -/obj/structure/table, -/obj/machinery/microwave{ - pixel_y = 5 - }, -/obj/machinery/requests_console/directional/south{ - department = "Kitchen"; - name = "Kitchen Requests Console" - }, -/obj/effect/mapping_helpers/requests_console/supplies, -/turf/open/floor/iron/cafeteria, -/area/station/service/kitchen) "kQM" = ( /obj/machinery/holopad, /turf/open/floor/iron, /area/station/cargo/storage) +"kRf" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/door/airlock/wood{ + name = "Bar Backroom" + }, +/obj/effect/mapping_helpers/airlock/access/all/service/bar, +/obj/machinery/door/firedoor, +/turf/open/floor/iron/textured_half{ + dir = 8 + }, +/area/station/service/bar) +"kRs" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/structure/table/wood, +/obj/effect/landmark/start/hangover, +/turf/open/floor/iron/grimy, +/area/station/service/bar) "kRt" = ( /obj/machinery/monkey_recycler, /obj/effect/turf_decal/siding/white{ @@ -29167,6 +31853,17 @@ }, /turf/open/floor/engine/air, /area/station/engineering/atmos/space_catwalk) +"kRA" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/obj/effect/landmark/start/hangover, +/obj/structure/chair/office{ + dir = 8 + }, +/turf/open/floor/wood/parquet, +/area/station/service/library) "kRE" = ( /obj/structure/disposalpipe/segment{ dir = 9 @@ -29193,12 +31890,6 @@ /obj/machinery/light/small/dim/directional/west, /turf/open/floor/plating, /area/station/hallway/secondary/dock) -"kRU" = ( -/obj/effect/turf_decal/tile/dark_red/opposingcorners, -/obj/machinery/holopad, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/station/ai_monitored/security/armory) "kRW" = ( /obj/machinery/computer/atmos_control/nitrogen_tank{ dir = 1 @@ -29259,10 +31950,14 @@ }, /turf/open/floor/plating, /area/station/maintenance/department/science/xenobiology) -"kSN" = ( -/obj/effect/landmark/atmospheric_sanity/ignore_area, -/turf/open/floor/eighties/red, -/area/station/service/abandoned_gambling_den/gaming) +"kSA" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/light/small/directional/east, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/iron, +/area/station/maintenance/hallway/abandoned_command) "kSO" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -29271,26 +31966,14 @@ /obj/machinery/photocopier, /turf/open/floor/wood, /area/station/command/heads_quarters/qm) -"kSS" = ( -/obj/structure/closet/emcloset, -/obj/machinery/light/small/directional/west, -/turf/open/floor/plating, -/area/station/maintenance/hallway/abandoned_command) -"kSV" = ( -/obj/structure/chair/stool/bamboo{ +"kTm" = ( +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/turf/open/floor/iron/textured_half{ dir = 8 }, -/turf/open/floor/plating, -/area/station/maintenance/central/greater) -"kSY" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/iron, -/area/station/maintenance/department/medical/central) -"kTd" = ( -/obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/north, -/turf/open/floor/wood/parquet, /area/station/service/library) "kTp" = ( /obj/structure/disposalpipe/segment, @@ -29327,18 +32010,37 @@ /obj/structure/tank_holder/extinguisher, /turf/open/floor/catwalk_floor, /area/station/science/xenobiology) +"kTF" = ( +/obj/machinery/light/warm/dim, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/item/radio/intercom/directional/south, +/obj/effect/turf_decal/tile/neutral, +/turf/open/floor/iron, +/area/station/hallway/primary/central/aft) +"kTG" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/maintenance/hallway/abandoned_command) "kTH" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/catwalk_floor/iron_smooth, /area/station/hallway/secondary/command) -"kTL" = ( -/obj/structure/disposalpipe/segment, +"kTX" = ( /obj/machinery/door/firedoor, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/hallway/secondary/recreation) +/obj/effect/turf_decal/stripes/red/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/red/line{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/iron/small, +/area/station/hallway/primary/central/fore) "kUf" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -29346,29 +32048,19 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/wood, /area/station/service/chapel/funeral) -"kUt" = ( -/obj/machinery/computer/security/telescreen{ - desc = "Used for watching Prison Wing holding areas."; - dir = 1; - name = "Prison Monitor"; - network = list("prison"); - pixel_y = -30 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/station/security/office) "kUF" = ( /obj/structure/disposalpipe/segment{ dir = 10 }, /turf/open/floor/plating, /area/station/maintenance/department/science/xenobiology) -"kUM" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/wood/large, -/area/station/command/heads_quarters/captain) +"kUL" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral, +/turf/open/floor/iron, +/area/station/hallway/primary/central/aft) "kVb" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -29380,13 +32072,14 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron/smooth, /area/station/hallway/secondary/command) -"kVl" = ( -/obj/effect/mapping_helpers/broken_floor, -/obj/structure/chair{ - dir = 8 +"kVg" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/landmark/start/hangover, +/obj/effect/turf_decal/siding/wood{ + dir = 1 }, -/turf/open/floor/plating, -/area/station/commons/vacant_room/commissary) +/turf/open/floor/stone, +/area/station/service/chapel) "kVn" = ( /obj/structure/disposalpipe/segment, /obj/structure/table/reinforced, @@ -29425,40 +32118,19 @@ /obj/effect/mapping_helpers/airlock/abandoned, /turf/open/floor/wood, /area/station/maintenance/starboard/greater) -"kWg" = ( -/obj/structure/table/greyscale, -/obj/item/pen{ - pixel_x = 13; - pixel_y = 4 - }, -/obj/machinery/light/small/directional/south, -/obj/item/book/manual/wiki/engineering_guide{ - pixel_y = 4 - }, -/turf/open/floor/iron/grimy, -/area/station/engineering/main) "kWk" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/firealarm/directional/west, /turf/open/floor/iron, /area/station/security/prison/workout) -"kWs" = ( -/obj/structure/broken_flooring/corner/directional/south, -/turf/open/floor/plating, -/area/station/maintenance/department/medical/central) -"kWF" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/door/window/right/directional/north{ - name = "Kitchen Delivery Access"; - req_access = list("kitchen") - }, -/obj/effect/turf_decal/delivery/white{ - color = "#52B4E9" +"kWm" = ( +/obj/effect/turf_decal/siding/red{ + dir = 8 }, -/obj/machinery/duct, -/turf/open/floor/iron/freezer, -/area/station/service/kitchen/coldroom) +/obj/machinery/firealarm/directional/west, +/turf/open/floor/iron/small, +/area/station/security/office) "kWJ" = ( /obj/structure/chair/sofa/bench/left{ dir = 1 @@ -29475,33 +32147,24 @@ /obj/machinery/airalarm/directional/west, /turf/open/floor/iron/small, /area/station/engineering/engine_smes) -"kXf" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ - dir = 4 +"kWR" = ( +/obj/machinery/door/airlock/public/glass{ + name = "Docking Corridor" }, +/obj/machinery/door/firedoor, +/turf/open/floor/iron/textured_half{ + dir = 8 + }, +/area/station/hallway/secondary/dock) +"kXf" = ( /obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/visible, /turf/open/floor/iron/dark, /area/station/engineering/atmos) "kXj" = ( /obj/machinery/suit_storage_unit/engine, /turf/open/floor/plating/rust, /area/station/engineering/supermatter/room) -"kXl" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/obj/structure/sign/poster/official/random/directional/north, -/turf/open/floor/iron/white/corner{ - dir = 1 - }, -/area/station/hallway/secondary/dock) "kXn" = ( /turf/closed/wall/r_wall, /area/station/engineering/gravity_generator) @@ -29512,22 +32175,27 @@ }, /turf/open/floor/iron/dark, /area/station/security/interrogation) -"kXJ" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/plating, -/area/station/maintenance/fore/greater) +"kXu" = ( +/obj/structure/cable, +/obj/effect/turf_decal/siding/red{ + dir = 1 + }, +/turf/open/floor/iron/white/small, +/area/station/security/warden) +"kXC" = ( +/obj/structure/sign/clock/directional/north, +/obj/structure/table/wood, +/obj/machinery/reagentgrinder{ + pixel_x = -5; + pixel_y = 10 + }, +/turf/open/floor/iron/dark/textured, +/area/station/service/bar) "kXM" = ( /obj/effect/spawner/random/structure/girder, /obj/structure/barricade/wooden, /turf/open/floor/plating, /area/station/maintenance/department/medical/central) -"kXO" = ( -/obj/effect/mapping_helpers/broken_floor, -/obj/structure/frame/machine, -/obj/item/circuitboard/machine/chem_dispenser, -/obj/item/stack/cable_coil/five, -/turf/open/floor/plating, -/area/station/maintenance/central/greater) "kXQ" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -29544,6 +32212,16 @@ /obj/structure/sign/poster/official/random/directional/north, /turf/open/floor/plating, /area/station/hallway/secondary/dock) +"kYa" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/brown/fourcorners, +/obj/effect/landmark/navigate_destination/cargo, +/turf/open/floor/iron, +/area/station/hallway/primary/central/fore) "kYo" = ( /obj/effect/spawner/structure/window/reinforced/plasma, /obj/machinery/atmospherics/pipe/layer_manifold/yellow/visible, @@ -29602,11 +32280,6 @@ /obj/structure/window/spawner/directional/south, /turf/open/floor/grass, /area/station/cargo/storage) -"kZf" = ( -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/commons/fitness/recreation/entertainment) "kZh" = ( /obj/structure/table/glass, /obj/effect/turf_decal/siding/thinplating_new/light{ @@ -29615,16 +32288,13 @@ /obj/item/modular_computer/laptop, /turf/open/floor/iron/grimy, /area/station/science/cubicle) -"kZo" = ( -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/obj/effect/spawner/random/trash, -/obj/effect/decal/cleanable/dirt, -/obj/effect/mapping_helpers/broken_floor, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/plating, -/area/station/maintenance/fore/greater) +"kZj" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 1 + }, +/obj/structure/flora/grass/jungle/b/style_3, +/turf/open/floor/grass, +/area/station/service/chapel) "kZx" = ( /obj/machinery/button/door/directional/north{ id = "main_surgery"; @@ -29642,6 +32312,13 @@ /obj/machinery/light/cold/directional/north, /turf/open/floor/iron, /area/station/cargo/storage) +"kZC" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/turf/open/floor/plating, +/area/station/maintenance/port/lesser) "kZF" = ( /obj/structure/closet/crate/secure{ desc = "A secure crate containing various materials for building a customised test-site."; @@ -29656,6 +32333,13 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden, /turf/open/floor/plating, /area/station/science/ordnance/testlab) +"kZI" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/turf/open/floor/stone, +/area/station/service/chapel) "lae" = ( /obj/machinery/atmospherics/components/binary/pump/on{ name = "Cold Loop to Gas" @@ -29664,10 +32348,6 @@ dir = 1 }, /area/station/engineering/supermatter/room) -"lao" = ( -/obj/effect/mob_spawn/corpse/human, -/turf/open/floor/wood, -/area/station/service/abandoned_gambling_den) "laD" = ( /turf/open/floor/iron/dark, /area/station/hallway/primary/central/fore) @@ -29686,6 +32366,19 @@ }, /turf/open/floor/iron/dark/small, /area/station/maintenance/department/engine/atmos) +"laK" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central/fore) "laL" = ( /obj/effect/turf_decal/tile/brown/half/contrasted{ dir = 4 @@ -29695,13 +32388,12 @@ dir = 8 }, /area/station/hallway/primary/central/fore) -"laM" = ( -/obj/structure/cable, -/obj/structure/chair/stool/bar/directional/east, -/obj/effect/mapping_helpers/broken_floor, -/obj/machinery/power/apc/auto_name/directional/north, -/turf/open/floor/wood, -/area/station/service/abandoned_gambling_den) +"laU" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/closed/wall, +/area/station/commons/fitness/recreation/entertainment) "laZ" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/cobweb/cobweb2, @@ -29712,26 +32404,6 @@ /obj/machinery/airalarm/directional/west, /turf/open/floor/iron/smooth, /area/station/maintenance/solars/port/aft) -"lbh" = ( -/obj/structure/sign/directions/evac, -/obj/structure/sign/directions/engineering{ - dir = 1; - pixel_y = 8 - }, -/obj/structure/sign/directions/medical{ - dir = 4; - pixel_y = -9 - }, -/turf/closed/wall, -/area/station/hallway/primary/central/fore) -"lbs" = ( -/obj/structure/table/wood, -/obj/item/reagent_containers/cup/glass/shaker{ - pixel_x = 12 - }, -/obj/machinery/light/small/directional/north, -/turf/open/floor/wood, -/area/station/service/abandoned_gambling_den) "lbF" = ( /obj/effect/turf_decal/siding/thinplating_new/dark{ dir = 1 @@ -29763,23 +32435,6 @@ }, /turf/open/floor/iron, /area/station/security/brig/entrance) -"lbW" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 6 - }, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) -"lca" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/door/airlock{ - name = "Maintenance" - }, -/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, -/obj/effect/mapping_helpers/airlock/unres, -/turf/open/floor/plating, -/area/station/maintenance/central/greater) "lce" = ( /obj/machinery/atmospherics/pipe/smart/simple/general/visible{ dir = 9 @@ -29807,16 +32462,6 @@ }, /turf/open/floor/iron/cafeteria, /area/station/hallway/secondary/exit/departure_lounge) -"lcu" = ( -/obj/structure/flora/bush/flowers_yw/style_random, -/obj/structure/flora/bush/flowers_br/style_random, -/obj/structure/flora/bush/leavy/style_random, -/obj/structure/flora/bush/stalky/style_random, -/obj/structure/window/spawner/directional/east, -/obj/structure/window/spawner/directional/south, -/obj/structure/sign/poster/official/random/directional/north, -/turf/open/floor/grass, -/area/station/service/hydroponics/garden) "lcw" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment, @@ -29828,12 +32473,6 @@ /obj/effect/landmark/navigate_destination/chemfactory, /turf/open/floor/iron/dark, /area/station/medical/medbay/central) -"lcx" = ( -/obj/structure/sink/kitchen/directional/south, -/obj/effect/decal/cleanable/dirt, -/obj/effect/landmark/start/hangover, -/turf/open/floor/iron/white/small, -/area/station/service/hydroponics/garden) "lcC" = ( /obj/structure/disposalpipe/trunk{ dir = 1 @@ -29843,25 +32482,30 @@ /obj/machinery/camera/directional/east, /turf/open/floor/iron, /area/station/hallway/secondary/entry) -"lcN" = ( -/obj/structure/flora/bush/flowers_yw/style_random, -/obj/structure/flora/bush/flowers_br/style_random, -/obj/structure/flora/bush/leavy/style_random, -/obj/structure/flora/bush/stalky/style_random, -/obj/structure/window/spawner/directional/west, -/obj/structure/window/spawner/directional/south, -/obj/structure/sign/poster/official/random/directional/north, -/turf/open/floor/grass, -/area/station/service/hydroponics/garden) -"lcW" = ( -/obj/structure/disposalpipe/sorting/mail{ - dir = 1 +"lcD" = ( +/obj/effect/landmark/start/hangover, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 }, -/obj/effect/mapping_helpers/mail_sorting/service/janitor_closet, +/turf/open/floor/iron, +/area/station/hallway/primary/central/aft) +"lcF" = ( +/obj/machinery/status_display/evac/directional/east, +/turf/open/floor/glass, +/area/station/hallway/primary/central/aft) +"lcY" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron/white/small, -/area/station/service/janitor) +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/landmark/navigate_destination/hop, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central/fore) "lda" = ( /obj/effect/turf_decal/tile/brown/opposingcorners, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -29872,35 +32516,10 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/plating, /area/station/maintenance/department/engine) -"lde" = ( -/obj/item/radio/intercom/directional/south, -/obj/structure/disposalpipe/trunk{ - dir = 8 - }, -/obj/structure/disposaloutlet{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/stripes/box, -/turf/open/floor/iron/white/small, -/area/station/service/janitor) "ldo" = ( -/obj/structure/chair/comfy/brown{ - dir = 4 - }, -/obj/machinery/light/small/directional/north, -/obj/effect/mapping_helpers/broken_floor, -/obj/machinery/button/door/directional/west{ - id = "study_a"; - name = "Privacy Bolts"; - normaldoorcontrol = 1; - pixel_x = 7; - pixel_y = 24; - specialfunctions = 4 - }, -/obj/effect/landmark/start/hangover, -/turf/open/floor/wood/tile, -/area/station/commons) +/obj/machinery/griddle, +/turf/open/floor/iron/kitchen/small, +/area/station/service/kitchen) "ldq" = ( /turf/closed/wall, /area/station/maintenance/department/science/xenobiology) @@ -29912,15 +32531,6 @@ }, /turf/open/floor/iron/dark, /area/station/tcommsat/server) -"ldB" = ( -/obj/structure/disposalpipe/segment{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/broken_flooring/pile/directional/east, -/turf/open/floor/plating, -/area/station/commons) "ldF" = ( /obj/machinery/computer/upload/ai{ dir = 8 @@ -29938,46 +32548,34 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron/textured_half, /area/station/security/brig) -"ldU" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/item/trash/pistachios{ - pixel_y = 8 - }, -/obj/item/trash/popcorn/salty{ - pixel_x = 11; - pixel_y = 10 +"lee" = ( +/obj/structure/cable, +/obj/effect/turf_decal/tile/purple/opposingcorners, +/obj/structure/chair/office{ + dir = 8 }, -/obj/effect/decal/cleanable/glass/plastitanium/screws, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/commons) -"ldZ" = ( +/turf/open/floor/iron/cafeteria, +/area/station/science/circuits) +"lei" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/door/firedoor, -/obj/effect/turf_decal/stripes/red/line, -/obj/effect/turf_decal/stripes/red/line{ +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/siding/wood{ dir = 1 }, -/turf/open/floor/iron/small, -/area/station/hallway/primary/central/fore) -"lej" = ( -/obj/structure/kitchenspike, -/obj/effect/turf_decal/bot_red, -/turf/open/floor/iron/freezer, -/area/station/service/kitchen/coldroom) +/obj/effect/turf_decal/siding/wood, +/obj/machinery/door/airlock/public/glass{ + name = "Chapel Office" + }, +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/access/all/service/chapel_office, +/turf/open/floor/iron/textured_half, +/area/station/service/chapel/office) "lek" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white/corner{ dir = 8 }, /area/station/hallway/primary/starboard) -"let" = ( -/obj/structure/window/spawner/directional/west, -/obj/structure/flora/bush/flowers_yw/style_random, -/turf/open/misc/sandy_dirt, -/area/station/commons) "ley" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -29985,73 +32583,11 @@ dir = 1 }, /area/station/medical/treatment_center) -"leB" = ( -/obj/structure/table, -/obj/effect/turf_decal/tile/dark_red, -/obj/effect/decal/cleanable/dirt, -/obj/item/food/gumball{ - pixel_x = 5; - pixel_y = 9 - }, -/obj/item/clothing/mask/cigarette/candy{ - pixel_x = -3; - pixel_y = 10 - }, -/obj/item/food/gumball{ - pixel_x = 2; - pixel_y = 5 - }, -/obj/item/weldingtool/mini{ - pixel_x = 5; - pixel_y = -11 - }, -/obj/item/screwdriver{ - pixel_x = 2; - pixel_y = -3 - }, -/obj/item/storage/box/prisoner{ - pixel_x = 5; - pixel_y = -12 - }, -/obj/structure/disposalpipe/segment{ - dir = 10 - }, -/turf/open/floor/iron/dark, -/area/station/security/processing) "leC" = ( /obj/structure/cable, /obj/effect/turf_decal/tile/dark_red/opposingcorners, /turf/open/floor/iron, /area/station/security/prison) -"leE" = ( -/obj/structure/urinal/directional/west, -/obj/effect/mapping_helpers/broken_floor, -/obj/machinery/airalarm/directional/north, -/turf/open/floor/iron/showroomfloor, -/area/station/commons/toilet/restrooms) -"leH" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/bed/maint, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/duct, -/turf/open/floor/iron/showroomfloor, -/area/station/commons/toilet/restrooms) -"leI" = ( -/obj/effect/turf_decal/tile/brown/opposingcorners, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 4 - }, -/obj/effect/landmark/start/shaft_miner, -/turf/open/floor/iron, -/area/station/cargo/miningoffice) -"leN" = ( -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/obj/structure/broken_flooring/plating/directional/south, -/turf/open/floor/iron, -/area/station/maintenance/hallway/abandoned_recreation) "leP" = ( /turf/open/floor/plating, /area/station/maintenance/starboard/aft) @@ -30067,18 +32603,18 @@ /obj/structure/reagent_dispensers/watertank, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) +"lfc" = ( +/obj/machinery/firealarm/directional/south, +/turf/open/floor/iron/dark/side{ + dir = 4 + }, +/area/station/science/ordnance/testlab) "lfd" = ( /obj/structure/rack, /obj/effect/spawner/random/maintenance, /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) -"lfe" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/iron/cafeteria, -/area/station/security/prison/mess) "lfg" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -30099,6 +32635,20 @@ /obj/machinery/light/small/directional/south, /turf/open/floor/stone, /area/station/command/heads_quarters/hos) +"lfs" = ( +/obj/effect/landmark/start/assistant, +/turf/open/floor/iron/half, +/area/station/hallway/primary/central/fore) +"lft" = ( +/obj/structure/sign/departments/restroom/directional/south, +/obj/effect/turf_decal/siding/wideplating/dark/corner{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/commons/fitness/locker_room) "lfv" = ( /obj/structure/hedge, /obj/effect/turf_decal/tile/neutral/fourcorners, @@ -30216,27 +32766,19 @@ /obj/machinery/light/small/directional/west, /turf/open/floor/iron, /area/station/security/warden) -"lgq" = ( -/obj/structure/chair/comfy/lime{ - dir = 4 - }, -/obj/machinery/light/small/directional/north, -/obj/effect/mapping_helpers/broken_floor, -/obj/machinery/button/door/directional/west{ - id = "study_b"; - name = "Privacy Bolts"; - normaldoorcontrol = 1; - pixel_x = 7; - pixel_y = 24; - specialfunctions = 4 - }, -/obj/effect/landmark/start/hangover, -/turf/open/floor/wood/tile, -/area/station/commons) "lgr" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/small, /area/station/maintenance/department/electrical) +"lgw" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/neutral/half/contrasted, +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/turf/open/floor/iron/dark/side, +/area/station/science/xenobiology) "lgx" = ( /obj/structure/disposalpipe/junction/flip, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -30263,25 +32805,25 @@ dir = 1 }, /area/station/hallway/secondary/exit/departure_lounge) +"lgQ" = ( +/obj/machinery/computer/security/telescreen/cmo/directional/west, +/turf/open/floor/wood/parquet, +/area/station/command/heads_quarters/cmo) "lgV" = ( /obj/structure/table, /obj/item/camera, /turf/open/floor/iron, /area/station/security/prison/workout) -"lhg" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/door/firedoor, -/obj/effect/turf_decal/delivery/red, -/obj/machinery/door/airlock/medical/glass{ - id_tag = "MedbayFoyer"; - name = "Medbay Clinic" - }, -/obj/machinery/door/poddoor/shutters/preopen{ - id = "medlock"; - name = "Lockdown Shutters" +"lhi" = ( +/obj/machinery/airalarm/directional/north, +/obj/machinery/button/door/directional/north{ + id = "vaco"; + name = "Comissary Shutters"; + pixel_x = 29 }, -/turf/open/floor/iron/white/small, -/area/station/medical/medbay/lobby) +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/dark/small, +/area/station/maintenance/central/lesser) "lhl" = ( /obj/effect/spawner/random/trash/graffiti{ pixel_x = 32; @@ -30324,11 +32866,6 @@ /obj/structure/extinguisher_cabinet/directional/west, /turf/open/floor/iron/white/small, /area/station/medical/storage) -"lhI" = ( -/obj/structure/chair/stool/directional/north, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/smooth, -/area/station/maintenance/solars/starboard/fore) "lhP" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/mapping_helpers/broken_floor, @@ -30342,12 +32879,68 @@ /obj/item/pickaxe, /turf/open/misc/asteroid, /area/station/maintenance/starboard/greater) +"lhT" = ( +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/hallway/primary/central/aft) "lhZ" = ( /obj/machinery/suit_storage_unit/engine, /obj/structure/cable, /obj/structure/sign/poster/official/random/directional/north, /turf/open/floor/plating, /area/station/engineering/supermatter/room) +"lik" = ( +/obj/structure/table, +/obj/effect/turf_decal/tile/dark_red, +/obj/effect/decal/cleanable/dirt, +/obj/item/food/gumball{ + pixel_x = 5; + pixel_y = 9 + }, +/obj/item/cigarette/candy{ + pixel_x = -3; + pixel_y = 10 + }, +/obj/item/food/gumball{ + pixel_x = 2; + pixel_y = 5 + }, +/obj/item/weldingtool/mini{ + pixel_x = 5; + pixel_y = -11 + }, +/obj/item/screwdriver{ + pixel_x = 2; + pixel_y = -3 + }, +/obj/item/storage/box/prisoner{ + pixel_x = 5; + pixel_y = -12 + }, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/turf/open/floor/iron/dark, +/area/station/security/processing) +"lir" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/firealarm/directional/south, +/obj/effect/turf_decal/tile/neutral, +/turf/open/floor/iron, +/area/station/hallway/primary/central/aft) +"liw" = ( +/obj/effect/turf_decal/siding/wood/end{ + dir = 8 + }, +/obj/effect/landmark/navigate_destination/kitchen, +/turf/open/floor/wood, +/area/station/hallway/primary/central/aft) "lix" = ( /obj/structure/table/reinforced, /obj/item/grenade/chem_grenade/cleaner{ @@ -30382,6 +32975,17 @@ /obj/machinery/incident_display/tram/directional/north, /turf/open/floor/iron, /area/station/maintenance/department/medical/central) +"liJ" = ( +/obj/effect/landmark/start/chaplain, +/turf/open/floor/iron/dark/small, +/area/station/service/chapel/storage) +"liL" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/power/apc/auto_name/directional/east, +/turf/open/floor/iron/showroomfloor, +/area/station/commons/toilet/auxiliary) "liP" = ( /obj/effect/landmark/event_spawn, /turf/open/floor/iron/dark/small, @@ -30390,11 +32994,22 @@ /obj/structure/lattice, /turf/open/misc/asteroid/airless, /area/space/nearstation) -"liR" = ( -/obj/effect/mapping_helpers/broken_floor, -/obj/structure/window/reinforced/spawner/directional/north, -/obj/structure/window/reinforced/spawner/directional/west, -/turf/open/floor/iron, +"liS" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/sign/poster/contraband/random/directional/west, +/turf/open/floor/plating, +/area/station/maintenance/starboard/central) +"liT" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/door/airlock{ + name = "Maintenance" + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, +/turf/open/floor/plating, /area/station/maintenance/fore/greater) "liX" = ( /obj/structure/cable, @@ -30404,6 +33019,27 @@ /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/plating/rust, /area/station/maintenance/department/engine/atmos) +"ljg" = ( +/obj/structure/kitchenspike, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 5 + }, +/obj/effect/turf_decal/weather/snow, +/obj/machinery/airalarm/directional/north, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron/freezer, +/area/station/service/kitchen/coldroom) +"lji" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 1 + }, +/obj/structure/flora/bush/flowers_yw/style_3, +/obj/structure/extinguisher_cabinet/directional/north, +/obj/machinery/camera/directional/north, +/turf/open/floor/grass, +/area/station/service/chapel) "ljl" = ( /obj/structure/lattice, /obj/structure/railing/corner{ @@ -30464,6 +33100,16 @@ }, /turf/open/floor/iron/white/small, /area/station/command/heads_quarters/cmo) +"ljT" = ( +/obj/structure/window/spawner/directional/east, +/obj/structure/window/spawner/directional/west, +/obj/machinery/light/floor, +/obj/structure/flora/bush/sparsegrass, +/obj/structure/flora/bush/flowers_br, +/obj/structure/flora/bush/flowers_pp, +/obj/structure/flora/bush/flowers_yw, +/turf/open/floor/grass, +/area/station/service/hydroponics) "ljZ" = ( /obj/machinery/modular_computer/preset/civilian{ dir = 1 @@ -30516,16 +33162,6 @@ /obj/item/pen, /turf/open/floor/iron, /area/station/security/prison/rec) -"lkG" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/turf_decal/tile/brown/half/contrasted{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/cargo/sorting) "lkI" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -30535,22 +33171,10 @@ }, /turf/open/floor/iron, /area/station/cargo/storage) -"lkQ" = ( -/obj/effect/turf_decal/bot, -/obj/structure/rack, -/obj/item/stack/sheet/plasteel/fifty, -/obj/item/stack/sheet/plastic/five, -/obj/item/stack/sheet/rglass/fifty, -/obj/item/storage/medkit/fire{ - pixel_x = 1; - pixel_y = 4 - }, -/obj/machinery/airalarm/directional/east, -/obj/item/stock_parts/cell/emproof{ - pixel_y = 9 - }, -/turf/open/floor/iron/small, -/area/station/engineering/break_room) +"lkJ" = ( +/obj/structure/flora/rock/pile/jungle/style_4, +/turf/open/floor/grass, +/area/station/service/chapel) "lkR" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -30559,20 +33183,17 @@ /obj/machinery/camera/autoname/directional/east, /turf/open/floor/iron, /area/station/security/prison) -"lkV" = ( -/turf/closed/wall/r_wall, -/area/station/science/ordnance) -"lkZ" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 +"lkS" = ( +/obj/item/toy/plush/slimeplushie{ + name = "Nanners" }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/neutral{ +/turf/open/floor/iron/white/corner{ dir = 8 }, -/obj/machinery/airalarm/directional/south, -/turf/open/floor/iron, -/area/station/hallway/primary/central/fore) +/area/station/science/xenobiology) +"lkV" = ( +/turf/closed/wall/r_wall, +/area/station/science/ordnance) "llg" = ( /obj/effect/turf_decal/stripes/white/line, /turf/open/floor/iron/dark, @@ -30584,15 +33205,12 @@ }, /turf/open/floor/iron/white, /area/station/medical/treatment_center) -"llD" = ( -/obj/structure/disposalpipe/trunk{ - dir = 1 +"llH" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 }, -/obj/effect/mapping_helpers/broken_floor, -/obj/machinery/disposal/bin, -/obj/structure/cable, -/turf/open/floor/wood, -/area/station/command/heads_quarters/qm) +/turf/open/floor/iron/dark/small, +/area/station/tcommsat/server) "llN" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -30629,6 +33247,15 @@ "llW" = ( /turf/closed/wall, /area/station/ai_monitored/security/armory) +"llY" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/siding/wideplating_new/terracotta{ + dir = 4 + }, +/turf/open/floor/wood/tile, +/area/station/maintenance/central/lesser) "lmb" = ( /obj/structure/cable, /obj/machinery/door/airlock{ @@ -30642,17 +33269,23 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/carpet/donk, /area/station/command/heads_quarters/qm) -"lmo" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/extinguisher_cabinet/directional/west, -/turf/open/floor/iron, -/area/station/hallway/primary/starboard) +"lmm" = ( +/mob/living/basic/frog, +/obj/effect/turf_decal/weather/dirt{ + dir = 5 + }, +/obj/structure/flora/rock/pile/jungle/style_4, +/obj/structure/flora/bush/flowers_pp/style_2, +/turf/open/floor/grass, +/area/station/service/chapel) "lmv" = ( /obj/structure/disposalpipe/segment, /obj/item/kirbyplants/random, /turf/open/floor/iron/grimy, /area/station/command/heads_quarters/qm) +"lmz" = ( +/turf/open/floor/iron, +/area/station/hallway/primary/central/fore) "lmR" = ( /obj/structure/dresser, /obj/structure/sign/poster/contraband/random/directional/east, @@ -30680,11 +33313,51 @@ dir = 4 }, /area/station/hallway/secondary/construction) +"lnD" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 8 + }, +/turf/open/floor/stone, +/area/station/service/bar) "lnI" = ( /obj/effect/turf_decal/sand/plating, /obj/structure/ore_box, /turf/open/floor/plating, /area/station/maintenance/starboard/greater) +"lnN" = ( +/obj/effect/turf_decal/tile/blue/opposingcorners{ + dir = 8 + }, +/obj/effect/turf_decal/tile/green/opposingcorners, +/obj/structure/table, +/obj/item/reagent_containers/cup/bottle/mutagen{ + pixel_x = -5; + pixel_y = 8 + }, +/obj/item/reagent_containers/syringe{ + pixel_x = -3; + pixel_y = -1 + }, +/obj/item/reagent_containers/cup/watering_can{ + pixel_x = 7; + pixel_y = 13 + }, +/obj/item/reagent_containers/spray/plantbgone{ + pixel_x = 6; + pixel_y = 1 + }, +/obj/machinery/light/small/directional/west, +/obj/structure/sign/poster/official/random/directional/north, +/turf/open/floor/iron, +/area/station/service/hydroponics) +"lnW" = ( +/obj/effect/turf_decal/tile/neutral/full, +/obj/structure/chair{ + dir = 8 + }, +/obj/structure/sign/poster/contraband/random/directional/south, +/turf/open/floor/iron/dark/smooth_large, +/area/station/maintenance/central/lesser) "lnZ" = ( /obj/effect/turf_decal/tile/dark_red, /obj/effect/decal/cleanable/dirt, @@ -30733,26 +33406,18 @@ /obj/machinery/light/small/dim/directional/west, /turf/open/floor/iron, /area/station/maintenance/department/engine/atmos) +"lox" = ( +/obj/effect/turf_decal/siding/red{ + dir = 4 + }, +/turf/open/floor/iron/white/small, +/area/station/security/warden) "loL" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/holopad, /turf/open/floor/stone, /area/station/command/heads_quarters/hos) -"loM" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/sign/warning/radiation/rad_area/directional/east, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/maintenance/hallway/abandoned_command) -"lpa" = ( -/obj/structure/sign/poster/official/random/directional/north, -/obj/structure/bookcase/random, -/turf/open/floor/wood/parquet, -/area/station/service/library) "lpC" = ( /turf/open/floor/plating, /area/station/service/chapel/funeral) @@ -30832,11 +33497,14 @@ "lql" = ( /turf/open/floor/wood/parquet, /area/station/service/library) -"lqs" = ( -/obj/machinery/light/cold/directional/south, -/obj/structure/reagent_dispensers/water_cooler, +"lqq" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/landmark/navigate_destination/chapel, /turf/open/floor/iron, -/area/station/commons/fitness/recreation/entertainment) +/area/station/hallway/primary/port) "lqt" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -30846,17 +33514,6 @@ "lqC" = ( /turf/open/floor/iron/smooth, /area/station/maintenance/solars/starboard/aft) -"lqF" = ( -/obj/structure/table, -/obj/item/camera_film{ - pixel_x = -3; - pixel_y = 5 - }, -/obj/item/camera_film{ - pixel_y = 9 - }, -/turf/open/floor/wood/parquet, -/area/station/service/library) "lqL" = ( /obj/effect/landmark/transport/nav_beacon/tram/platform/birdshot/prison_wing, /turf/open/floor/tram, @@ -30915,14 +33572,28 @@ /obj/machinery/photocopier, /turf/open/floor/iron/grimy, /area/station/engineering/main) -"lsJ" = ( -/obj/structure/window/spawner/directional/north, -/obj/effect/turf_decal/stripes/end{ +"lsh" = ( +/obj/effect/turf_decal/siding/wideplating/dark{ + dir = 1 + }, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/small, +/area/station/service/barber) +"lso" = ( +/obj/effect/mapping_helpers/airlock/access/all/service/bar, +/obj/machinery/door/airlock/wood{ + name = "Bar Backroom" + }, +/obj/effect/turf_decal/siding/wood{ dir = 4 }, -/obj/structure/window/reinforced/spawner/directional/east, -/turf/open/floor/plating, -/area/station/hallway/secondary/service) +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/turf/open/floor/stone, +/area/station/service/bar) "lsK" = ( /obj/structure/lattice, /obj/machinery/atmospherics/pipe/smart/simple/brown/visible, @@ -30934,6 +33605,10 @@ dir = 1 }, /area/station/science/lower) +"lsP" = ( +/obj/structure/flora/grass/jungle/b/style_5, +/turf/open/floor/grass, +/area/station/service/chapel) "lsY" = ( /obj/effect/turf_decal/tile/dark_red/opposingcorners, /obj/structure/closet/secure_closet/security/sec, @@ -30941,17 +33616,15 @@ dir = 1 }, /area/station/security/execution/transfer) -"lti" = ( -/obj/machinery/libraryscanner, -/obj/machinery/newscaster/directional/north, -/turf/open/floor/wood/parquet, -/area/station/service/library) -"ltl" = ( -/obj/structure/cable, -/obj/effect/mapping_helpers/broken_floor, -/obj/machinery/light_switch/directional/north, -/turf/open/floor/wood/parquet, -/area/station/service/library) +"lte" = ( +/obj/effect/turf_decal/tile/brown/opposingcorners{ + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/commons/vacant_room/commissary) "lto" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable, @@ -30967,14 +33640,12 @@ /obj/structure/holosign/barrier/atmos/tram, /turf/open/floor/plating, /area/station/security/tram) -"lty" = ( -/obj/structure/cable, -/obj/machinery/door/morgue{ - name = "Secret Corridor"; - req_access = list("library") +"ltr" = ( +/obj/effect/turf_decal/siding/thinplating_new/light{ + dir = 6 }, -/turf/open/floor/catwalk_floor/iron_dark, -/area/station/service/library) +/turf/open/floor/iron/white/small, +/area/station/service/hydroponics) "ltz" = ( /obj/effect/turf_decal/siding/red{ dir = 4 @@ -30982,6 +33653,14 @@ /obj/machinery/light/small/directional/east, /turf/open/floor/engine/n2, /area/station/engineering/atmos/space_catwalk) +"ltE" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/stairs{ + dir = 1 + }, +/area/station/engineering/storage/tech) "ltP" = ( /obj/effect/decal/cleanable/cobweb/cobweb2, /obj/effect/turf_decal/siding/wood{ @@ -30992,28 +33671,19 @@ /obj/machinery/light/small/directional/east, /turf/open/floor/iron/grimy, /area/station/hallway/secondary/entry) -"ltT" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment, -/obj/effect/decal/cleanable/dirt, -/obj/effect/spawner/random/trash, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) -"lub" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, +"ltQ" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, /turf/open/floor/iron, -/area/station/security/prison/workout) -"luh" = ( -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating, -/area/station/service/abandoned_gambling_den) -"lui" = ( -/obj/effect/mapping_helpers/broken_floor, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/wood, -/area/station/service/abandoned_gambling_den) +/area/station/security/prison) +"luc" = ( +/obj/machinery/door/airlock{ + id_tag = "ShowerToilet1"; + name = "Toilet" + }, +/turf/open/floor/iron/showroomfloor, +/area/station/commons/dorms) "lun" = ( /obj/machinery/door/firedoor, /obj/effect/mapping_helpers/airlock/access/all/command/general, @@ -31037,13 +33707,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/engineering/storage/tcomms) -"lus" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/cobweb/cobweb2, -/turf/open/floor/catwalk_floor/iron_dark, -/area/station/service/library) "lut" = ( /obj/structure/table/wood/fancy/red, /obj/structure/sign/painting/large/library{ @@ -31058,6 +33721,21 @@ }, /turf/open/floor/wood/parquet, /area/station/service/greenroom) +"luv" = ( +/obj/machinery/door/airlock/wood{ + name = "Bar Backroom" + }, +/obj/effect/mapping_helpers/airlock/access/all/service/bar, +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/machinery/door/firedoor, +/turf/open/floor/stone, +/area/station/service/bar) "luC" = ( /obj/structure/lattice/catwalk, /obj/structure/railing{ @@ -31065,14 +33743,34 @@ }, /turf/open/space/basic, /area/space/nearstation) -"luU" = ( -/obj/machinery/smartfridge/food, -/obj/machinery/door/firedoor, -/turf/open/floor/iron/cafeteria, -/area/station/service/kitchen) +"luE" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/landmark/event_spawn, +/turf/open/floor/wood/tile, +/area/station/service/bar) +"luG" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/commons/fitness/recreation/entertainment) +"luP" = ( +/obj/effect/landmark/start/hangover, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/wood/tile, +/area/station/service/bar) "lvc" = ( /turf/open/floor/iron/smooth, /area/station/security/checkpoint/escape) +"lve" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/neutral/half/contrasted, +/turf/open/floor/iron/dark/side, +/area/station/science/xenobiology) "lvk" = ( /obj/structure/railing{ dir = 4 @@ -31080,6 +33778,15 @@ /obj/structure/lattice, /turf/open/space/basic, /area/space/nearstation) +"lvr" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/landmark/navigate_destination/bar, +/turf/open/floor/iron, +/area/station/hallway/primary/central/fore) "lvu" = ( /obj/effect/turf_decal/tile/brown{ dir = 4 @@ -31118,6 +33825,10 @@ /obj/machinery/atmospherics/components/trinary/filter/critical, /turf/open/floor/catwalk_floor/iron_smooth, /area/station/engineering/supermatter/room) +"lvJ" = ( +/obj/structure/flora/bush/flowers_br, +/turf/open/floor/grass, +/area/station/service/chapel) "lvK" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/line{ @@ -31137,18 +33848,6 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/maintenance/starboard/greater) -"lwa" = ( -/obj/structure/closet/firecloset, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 4 - }, -/turf/open/floor/iron/dark/side{ - dir = 8 - }, -/area/station/hallway/primary/central/fore) "lwc" = ( /obj/structure/table/optable, /obj/structure/cable, @@ -31180,25 +33879,21 @@ dir = 1 }, /area/station/security/execution/transfer) -"lwr" = ( -/obj/structure/window/spawner/directional/south, -/obj/structure/window/spawner/directional/west, -/obj/structure/flora/bush/large/style_random{ - pixel_x = -17; - pixel_y = 2 +"lwu" = ( +/obj/machinery/atmospherics/pipe/smart/simple/purple/visible{ + dir = 5 }, -/obj/structure/flora/bush/flowers_yw/style_random, -/obj/machinery/light/small/directional/east, -/turf/open/misc/sandy_dirt, -/area/station/commons) -"lwH" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/science/ordnance) +"lwC" = ( /obj/effect/decal/cleanable/dirt, -/obj/machinery/power/apc/auto_name/directional/east, -/turf/open/floor/iron/showroomfloor, -/area/station/commons/toilet/auxiliary) +/obj/effect/landmark/generic_maintenance_landmark, +/obj/structure/table, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/port/greater) "lwI" = ( /obj/effect/turf_decal/tile/brown/opposingcorners, /obj/machinery/computer/security/mining{ @@ -31207,18 +33902,6 @@ /obj/machinery/camera/autoname/directional/west, /turf/open/floor/iron, /area/station/cargo/miningoffice) -"lwJ" = ( -/obj/effect/turf_decal/siding/thinplating_new/light/end, -/obj/structure/flora/bush/flowers_br/style_random, -/obj/item/reagent_containers/cup/watering_can, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/grass, -/area/station/service/hydroponics/garden) -"lwR" = ( -/obj/machinery/hydroponics/constructable, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/white/small, -/area/station/service/hydroponics/garden) "lwW" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/cable, @@ -31234,13 +33917,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/department/science/xenobiology) -"lxd" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/tile/brown/opposingcorners, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/cargo/miningoffice) "lxh" = ( /obj/effect/turf_decal/stripes/white/line, /turf/open/floor/engine, @@ -31253,6 +33929,14 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) +"lxp" = ( +/obj/machinery/door/airlock/public/glass{ + name = "Dorms" + }, +/turf/open/floor/iron/textured_half{ + dir = 1 + }, +/area/station/commons/fitness/locker_room) "lxy" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -31292,13 +33976,6 @@ /obj/effect/spawner/random/structure/girder, /turf/open/floor/plating, /area/station/maintenance/department/engine/atmos) -"lxT" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/light/small/dim/directional/west, -/turf/open/floor/plating, -/area/station/maintenance/port/aft) "lxZ" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/turf_decal/tile/red{ @@ -31326,22 +34003,12 @@ }, /turf/open/floor/iron/white/small, /area/station/medical/psychology) -"lyj" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/mapping_helpers/broken_floor, -/obj/machinery/light/small/directional/east, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/station/maintenance/hallway/abandoned_command) -"lyp" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/curtain/cloth, +"lyq" = ( +/obj/structure/reagent_dispensers/beerkeg, /obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/turf/open/floor/iron/textured_half, -/area/station/service/janitor) +/obj/item/radio/intercom/directional/south, +/turf/open/floor/stone, +/area/station/service/abandoned_gambling_den) "lyt" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, @@ -31405,18 +34072,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/cargo/storage) -"lzv" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/camera/directional/north, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/structure/sign/departments/botany/alt1/directional/north, -/turf/open/floor/iron, -/area/station/hallway/primary/port) "lzA" = ( /obj/structure/disposalpipe/segment{ dir = 6 @@ -31424,14 +34079,25 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/iron, /area/station/cargo/storage) +"lzB" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/central/greater) +"lzG" = ( +/obj/structure/flora/bush/jungle/c/style_3{ + pixel_x = -7; + pixel_y = 10 + }, +/turf/open/floor/grass, +/area/station/service/chapel) "lzM" = ( /turf/closed/wall, /area/station/security/tram) -"lzR" = ( -/obj/machinery/holopad, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/commons) "lzT" = ( /obj/effect/turf_decal/delivery, /obj/machinery/door/airlock/command{ @@ -31451,41 +34117,6 @@ /obj/structure/window/spawner/directional/north, /turf/open/floor/grass, /area/station/cargo/storage) -"lAa" = ( -/obj/structure/disposalpipe/segment{ - dir = 9 - }, -/obj/structure/chair/stool/directional/south, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/cargo/sorting) -"lAb" = ( -/obj/structure/table, -/obj/item/pen/screwdriver{ - pixel_x = -4 - }, -/obj/item/clothing/head/soft/grey{ - pixel_x = -2; - pixel_y = 3 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/commons) -"lAf" = ( -/obj/structure/cable, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/effect/decal/cleanable/dirt, -/obj/structure/chair/office{ - dir = 4 - }, -/obj/effect/turf_decal/siding/purple{ - dir = 8 - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/station/command/heads_quarters/rd) "lAk" = ( /obj/effect/turf_decal/siding/white{ dir = 9 @@ -31506,6 +34137,16 @@ }, /turf/open/floor/iron, /area/station/cargo/office) +"lAt" = ( +/obj/machinery/door/airlock{ + name = "Kitchen" + }, +/obj/effect/mapping_helpers/airlock/access/all/service/kitchen, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/door/firedoor, +/turf/open/floor/iron/kitchen/small, +/area/station/service/kitchen) "lAO" = ( /obj/effect/mapping_helpers/broken_floor, /obj/effect/decal/cleanable/dirt, @@ -31538,6 +34179,16 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/smooth, /area/station/maintenance/solars/starboard/aft) +"lAV" = ( +/obj/structure/table/wood, +/obj/structure/displaycase/forsale/kitchen{ + pixel_y = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/turf/open/floor/wood/large, +/area/station/service/bar) "lBf" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/siding/wood{ @@ -31587,6 +34238,19 @@ }, /turf/open/space/basic, /area/space/nearstation) +"lBq" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/airalarm/directional/west, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/turf/open/floor/iron/small, +/area/station/medical/medbay/lobby) "lBw" = ( /obj/effect/turf_decal/siding/yellow, /obj/effect/turf_decal/siding/yellow{ @@ -31601,13 +34265,24 @@ /obj/structure/lattice, /turf/open/space/basic, /area/space/nearstation) -"lBE" = ( -/obj/structure/disposalpipe/segment, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/stairs{ +"lBz" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/yellow{ dir = 1 }, -/area/station/cargo/office) +/obj/effect/turf_decal/tile/red{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 4 + }, +/obj/effect/landmark/navigate_destination/tools, +/turf/open/floor/iron, +/area/station/hallway/primary/fore) "lBN" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/door/airlock/security{ @@ -31655,10 +34330,13 @@ /obj/effect/turf_decal/tile/neutral, /turf/open/floor/iron, /area/station/engineering/lobby) -"lCD" = ( +"lCK" = ( /obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/camera/directional/east, +/obj/effect/turf_decal/tile/neutral, /turf/open/floor/iron, -/area/station/commons) +/area/station/hallway/primary/central/fore) "lCN" = ( /obj/structure/falsewall, /turf/open/floor/plating, @@ -31674,15 +34352,6 @@ /obj/effect/mapping_helpers/airlock/access/all/medical/coroner, /turf/open/floor/plating, /area/station/medical/morgue) -"lCV" = ( -/obj/structure/urinal/directional/west, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/obj/effect/landmark/start/assistant, -/turf/open/floor/iron/showroomfloor, -/area/station/commons/toilet/restrooms) "lDc" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -31694,28 +34363,26 @@ /obj/machinery/door/firedoor, /turf/open/floor/catwalk_floor/iron_dark, /area/station/tcommsat/server) -"lDl" = ( +"lDp" = ( /obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 6 +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/stripes/line{ + dir = 8 }, +/obj/effect/landmark/navigate_destination/gateway, /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, -/area/station/maintenance/hallway/abandoned_recreation) -"lDx" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 +/area/station/maintenance/hallway/abandoned_command) +"lDr" = ( +/obj/machinery/atmospherics/pipe/smart/simple/purple/visible/layer2{ + dir = 9 }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/spawner/random/trash, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) -"lDH" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/light/small/directional/east, -/turf/open/floor/iron/smooth, -/area/station/maintenance/solars/starboard/fore) +/turf/open/floor/iron/dark, +/area/station/science/ordnance) +"lDw" = ( +/turf/open/floor/iron, +/area/station/science/ordnance/testlab) "lDI" = ( /obj/structure/rack, /obj/item/storage/belt/utility/full, @@ -31739,16 +34406,30 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) -"lEu" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/neutral/half/contrasted, -/obj/effect/turf_decal/stripes/line{ +"lEm" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/chair/office{ dir = 1 }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark/side, -/area/station/science/xenobiology) +/obj/effect/landmark/start/cargo_technician, +/turf/open/floor/iron/dark, +/area/station/cargo/office) +"lEs" = ( +/obj/structure/extinguisher_cabinet/directional/east, +/obj/effect/turf_decal/tile/neutral/opposingcorners{ + dir = 1 + }, +/obj/effect/turf_decal/siding/thinplating_new{ + dir = 4 + }, +/obj/machinery/computer/order_console/cook{ + dir = 8 + }, +/obj/effect/turf_decal/delivery, +/turf/open/floor/iron/small, +/area/station/hallway/secondary/service) "lEJ" = ( /obj/machinery/door/poddoor{ id = "QMLoaddoor"; @@ -31773,21 +34454,41 @@ /obj/machinery/light/small/directional/west, /turf/open/floor/stone, /area/station/command/heads_quarters/captain/private) +"lEN" = ( +/obj/structure/chair/sofa/right{ + dir = 8 + }, +/obj/effect/turf_decal/siding/wood/end{ + dir = 1 + }, +/obj/item/toy/plush/pkplush{ + name = "Bruder" + }, +/turf/open/floor/wood/tile, +/area/station/maintenance/aft) +"lEO" = ( +/obj/structure/cable, +/obj/effect/spawner/random/structure/steam_vent, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/central/greater) "lER" = ( /turf/open/floor/iron/dark, /area/station/maintenance/department/engine/atmos) -"lEZ" = ( -/obj/effect/turf_decal/trimline/white/line, -/obj/effect/turf_decal/trimline/white/mid_joiner, -/obj/item/radio/intercom/directional/south, -/turf/open/floor/wood, -/area/station/commons/fitness/recreation) "lFg" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, /turf/open/floor/plating, /area/station/maintenance/hallway/abandoned_command) +"lFq" = ( +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/east, +/obj/machinery/exodrone_launcher, +/turf/open/floor/iron/smooth, +/area/station/cargo/drone_bay) "lFE" = ( /obj/effect/turf_decal/stripes/line, /obj/effect/turf_decal/stripes/corner{ @@ -31826,6 +34527,11 @@ /obj/machinery/atmospherics/pipe/smart/simple/dark/visible, /turf/open/floor/plating, /area/station/engineering/supermatter/room) +"lGd" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/port/lesser) "lGe" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -31846,10 +34552,10 @@ /turf/open/misc/sandy_dirt, /area/station/hallway/primary/central/fore) "lGq" = ( +/obj/structure/fluff/broken_canister_frame, /obj/machinery/atmospherics/components/unary/portables_connector/visible{ dir = 8 }, -/obj/structure/fluff/broken_canister_frame, /turf/open/floor/iron, /area/station/engineering/atmos) "lGr" = ( @@ -31866,6 +34572,13 @@ /obj/item/radio/intercom/directional/west, /turf/open/floor/iron/smooth, /area/station/command/gateway) +"lGJ" = ( +/obj/structure/filingcabinet/chestdrawer, +/obj/item/book/manual/wiki/engineering_guide{ + pixel_y = 6 + }, +/turf/open/floor/iron/grimy, +/area/station/engineering/main) "lGK" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -31892,6 +34605,11 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/carpet/donk, /area/station/command/heads_quarters/qm) +"lHb" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/computer/robotics, +/turf/open/floor/iron/dark, +/area/station/command/heads_quarters/rd) "lHc" = ( /obj/structure/cable, /obj/effect/decal/cleanable/dirt, @@ -31908,12 +34626,6 @@ /obj/structure/sign/warning/radiation/directional/west, /turf/open/floor/plating, /area/station/maintenance/department/engine) -"lHi" = ( -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/duct, -/turf/open/floor/iron/kitchen/small, -/area/station/security/prison/mess) "lHk" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -31932,12 +34644,22 @@ dir = 1 }, /area/station/science/lower) +"lHp" = ( +/obj/effect/turf_decal/siding/thinplating{ + dir = 9 + }, +/obj/structure/sign/poster/official/tactical_game_cards/directional/west, +/turf/open/floor/eighties/red, +/area/station/hallway/primary/central/fore) "lHt" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/turf_decal/tile/blue/fourcorners, /obj/structure/window/spawner/directional/south, /turf/open/floor/iron/white, /area/station/medical/treatment_center) +"lHz" = ( +/turf/open/floor/iron/smooth, +/area/station/maintenance/solars/port/aft) "lHJ" = ( /obj/effect/turf_decal/tile/yellow/half/contrasted{ dir = 8 @@ -32063,16 +34785,39 @@ dir = 8 }, /area/station/science/xenobiology) -"lJc" = ( -/obj/machinery/door/firedoor, -/obj/effect/landmark/navigate_destination, -/turf/open/floor/iron/textured_half, -/area/station/service/cafeteria) "lJe" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/freezer, /area/station/command/heads_quarters/captain/private) +"lJg" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/medical/medbay/lobby) +"lJm" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/effect/turf_decal/siding/wood, +/obj/effect/spawner/random/vending/colavend, +/turf/open/floor/stone, +/area/station/service/bar) +"lJB" = ( +/obj/item/radio/intercom/directional/north{ + broadcasting = 1; + frequency = 1447; + name = "Private Channel"; + pixel_x = -26 + }, +/obj/machinery/computer/security/telescreen/aiupload/directional/west, +/obj/item/radio/intercom/directional/north, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/ai_upload_foyer) "lJF" = ( /obj/machinery/meter, /obj/machinery/atmospherics/pipe/smart/manifold/cyan/visible{ @@ -32092,49 +34837,16 @@ /obj/machinery/camera/autoname/directional/east, /turf/open/floor/iron/grimy, /area/station/command/heads_quarters/qm) -"lJY" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 6 - }, -/turf/open/floor/plating, -/area/station/maintenance/port/greater) +"lKg" = ( +/obj/machinery/firealarm/directional/east, +/turf/open/floor/wood, +/area/station/command/heads_quarters/qm) "lKh" = ( /obj/effect/turf_decal/stripes/white/line{ dir = 10 }, /turf/open/floor/plating, /area/station/construction/mining/aux_base) -"lKn" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable, -/obj/machinery/door/airlock{ - name = "Maintenance" - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/mapping_helpers/airlock/access/any/command/maintenance, -/turf/open/floor/plating, -/area/station/maintenance/fore/greater) -"lKt" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/mapping_helpers/broken_floor, -/obj/effect/spawner/random/trash, -/turf/open/floor/plating, -/area/station/maintenance/port/greater) -"lKu" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 10 - }, -/obj/structure/reagent_dispensers/fueltank, -/turf/open/floor/plating, -/area/station/maintenance/port/greater) "lKA" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment, @@ -32149,6 +34861,13 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central/fore) +"lKB" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron/white, +/area/station/medical/medbay/lobby) "lKG" = ( /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/iron, @@ -32167,13 +34886,9 @@ /obj/effect/landmark/start/bitrunner, /turf/open/floor/iron/dark/smooth_half, /area/station/cargo/bitrunning/den) -"lKK" = ( -/obj/effect/mapping_helpers/broken_floor, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 4 - }, -/turf/open/floor/wood/parquet, -/area/station/service/library) +"lKV" = ( +/turf/open/floor/iron/smooth, +/area/station/commons/storage/tools) "lLb" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/door/airlock/security/glass{ @@ -32191,6 +34906,17 @@ }, /turf/open/floor/plating, /area/station/maintenance/department/engine/atmos) +"lLi" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/door/airlock/mining{ + name = "Drone Bay" + }, +/obj/effect/mapping_helpers/airlock/access/any/supply/maintenance, +/obj/machinery/door/firedoor, +/turf/open/floor/plating, +/area/station/cargo/drone_bay) "lLq" = ( /obj/machinery/firealarm/directional/east, /obj/effect/decal/cleanable/oil, @@ -32205,9 +34931,6 @@ /obj/machinery/status_display/ai/directional/west, /turf/open/floor/circuit/red, /area/station/ai_monitored/turret_protected/ai_upload) -"lLv" = ( -/turf/open/floor/wood, -/area/station/maintenance/fore/greater) "lLA" = ( /obj/machinery/disposal/bin, /obj/effect/turf_decal/bot, @@ -32220,15 +34943,12 @@ /area/station/hallway/primary/fore) "lLE" = ( /obj/effect/turf_decal/sand/plating, -/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible/layer5{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible{ - dir = 4 - }, /obj/machinery/atmospherics/pipe/smart/simple/yellow/visible/layer1{ dir = 4 }, +/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible/layer4{ + dir = 10 + }, /turf/open/floor/plating/airless, /area/space/nearstation) "lLH" = ( @@ -32239,29 +34959,11 @@ /obj/effect/spawner/random/trash, /turf/open/floor/iron, /area/station/maintenance/department/medical/central) -"lLJ" = ( -/obj/structure/table, -/turf/open/floor/wood/parquet, -/area/station/service/library) "lLL" = ( /turf/open/floor/iron/dark/side{ dir = 9 }, /area/station/hallway/secondary/construction) -"lLP" = ( -/obj/structure/cable, -/obj/effect/mapping_helpers/broken_floor, -/obj/structure/barricade/wooden/crude, -/turf/open/floor/plating, -/area/station/maintenance/hallway/abandoned_recreation) -"lLQ" = ( -/obj/structure/cable, -/obj/structure/chair{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/hallway/secondary/entry) "lLX" = ( /turf/open/floor/iron/showroomfloor, /area/station/medical/surgery/theatre) @@ -32310,30 +35012,6 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/engineering/lobby) -"lMy" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 1 - }, -/obj/structure/table/glass, -/obj/item/storage/photo_album/library, -/turf/open/floor/iron/grimy, -/area/station/service/library) -"lMz" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 1 - }, -/obj/structure/table/glass, -/obj/item/paper_bin{ - pixel_x = -3; - pixel_y = 7 - }, -/obj/item/pen/invisible{ - pixel_x = -2; - pixel_y = 7 - }, -/obj/machinery/newscaster/directional/north, -/turf/open/floor/iron/grimy, -/area/station/service/library) "lMF" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -32360,46 +35038,14 @@ /obj/effect/decal/cleanable/cobweb/cobweb2, /turf/open/floor/iron/grimy, /area/station/service/library) -"lMK" = ( -/obj/structure/barricade/wooden/crude, -/turf/open/floor/plating, -/area/station/maintenance/central/greater) -"lMN" = ( -/obj/effect/mapping_helpers/broken_floor, -/obj/effect/decal/cleanable/dirt, -/obj/structure/rack, -/obj/effect/spawner/random/maintenance, -/turf/open/floor/plating, -/area/station/maintenance/central/greater) -"lMV" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/landmark/event_spawn, -/obj/machinery/computer/security/telescreen{ - dir = 4; - name = "Test Chamber Monitor"; - network = list("xeno"); - pixel_x = -29 - }, -/turf/open/floor/iron/white/side{ - dir = 4 - }, -/area/station/science/xenobiology) -"lNb" = ( -/obj/effect/turf_decal/tile/red/opposingcorners, -/obj/effect/turf_decal/tile/blue/opposingcorners{ - dir = 8 - }, -/obj/effect/turf_decal/siding/wood{ - dir = 1 - }, -/obj/item/pushbroom, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/smooth, -/area/station/service/greenroom) "lNf" = ( /obj/effect/turf_decal/siding/blue, /turf/open/floor/iron/white/small, /area/station/medical/storage) +"lNk" = ( +/obj/machinery/newscaster/directional/east, +/turf/open/floor/iron, +/area/station/hallway/secondary/entry) "lNp" = ( /obj/structure/chair/sofa/bench/right{ dir = 8 @@ -32416,11 +35062,6 @@ dir = 4 }, /area/station/hallway/primary/central/fore) -"lNw" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/turf/open/floor/iron/white/small, -/area/station/service/hydroponics/garden) "lNx" = ( /obj/structure/table/glass, /obj/effect/turf_decal/siding/dark_red, @@ -32454,19 +35095,6 @@ }, /turf/open/floor/iron/small, /area/station/engineering/atmos) -"lNF" = ( -/obj/effect/spawner/random/entertainment/lighter, -/obj/item/clothing/mask/cigarette/rollie/mindbreaker{ - pixel_x = -2; - pixel_y = 6 - }, -/obj/item/clothing/mask/cigarette/rollie/trippy{ - pixel_x = 4 - }, -/obj/effect/mapping_helpers/burnt_floor, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/station/maintenance/starboard/greater) "lNJ" = ( /obj/effect/turf_decal/siding/yellow{ dir = 6 @@ -32476,6 +35104,11 @@ /obj/item/radio/intercom/directional/south, /turf/open/floor/iron/diagonal, /area/station/engineering/lobby) +"lNN" = ( +/obj/structure/table, +/obj/item/toy/foamblade, +/turf/open/floor/iron/dark/small, +/area/station/commons/fitness/locker_room) "lNQ" = ( /obj/effect/turf_decal/bot_white/right, /obj/machinery/firealarm/directional/north, @@ -32490,14 +35123,6 @@ /obj/effect/landmark/navigate_destination/court, /turf/open/floor/iron, /area/station/hallway/primary/starboard) -"lOa" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/mapping_helpers/broken_floor, -/obj/machinery/airalarm/directional/east, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/maintenance/hallway/abandoned_command) "lOi" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -32515,19 +35140,6 @@ /obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible, /turf/open/floor/iron/small, /area/station/engineering/atmos) -"lOt" = ( -/obj/structure/closet/l3closet/janitor, -/obj/effect/mapping_helpers/broken_floor, -/obj/item/radio/intercom/directional/east, -/turf/open/floor/iron, -/area/station/service/janitor) -"lOu" = ( -/obj/structure/disposalpipe/segment{ - dir = 6 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/station/security/office) "lOC" = ( /obj/structure/lattice/catwalk, /obj/structure/cable, @@ -32541,16 +35153,6 @@ }, /turf/open/floor/light/colour_cycle/dancefloor_b, /area/station/maintenance/starboard/central) -"lOH" = ( -/obj/structure/disposalpipe/segment{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/camera/directional/north, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/commons/dorms) "lOM" = ( /obj/structure/table, /obj/item/folder, @@ -32568,15 +35170,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/fore/lesser) -"lPd" = ( -/obj/structure/disposalpipe/segment{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/commons) "lPf" = ( /turf/closed/wall/r_wall, /area/station/engineering/atmos/storage/gas) @@ -32592,12 +35185,24 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central/fore) +"lPq" = ( +/obj/structure/flora/bush/flowers_yw/style_2, +/turf/open/floor/grass, +/area/station/service/chapel) "lPw" = ( /obj/machinery/atmospherics/pipe/smart/simple/cyan/visible/layer2{ dir = 5 }, /turf/open/floor/iron, /area/station/engineering/atmos/pumproom) +"lPB" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/turf/open/floor/stone, +/area/station/service/chapel) "lPC" = ( /obj/structure/bookcase/random, /obj/effect/turf_decal/tile/neutral/fourcorners, @@ -32614,6 +35219,12 @@ /obj/machinery/announcement_system, /turf/open/floor/iron/grimy, /area/station/tcommsat/server) +"lPK" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/mapping_helpers/broken_floor, +/obj/structure/reagent_dispensers/fueltank, +/turf/open/floor/plating, +/area/station/maintenance/port/greater) "lPO" = ( /obj/structure/table, /obj/item/surgery_tray/full{ @@ -32624,13 +35235,6 @@ }, /turf/open/floor/iron/dark/small, /area/station/security/execution/education) -"lPR" = ( -/obj/structure/table, -/obj/effect/spawner/random/maintenance, -/obj/machinery/light/small/directional/east, -/obj/machinery/firealarm/directional/east, -/turf/open/floor/iron, -/area/station/commons/dorms) "lPW" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -32649,11 +35253,10 @@ "lQh" = ( /turf/open/floor/iron/small, /area/station/maintenance/port/aft) -"lQk" = ( -/obj/structure/cable, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating, -/area/station/maintenance/starboard/central) +"lQs" = ( +/obj/structure/closet/emcloset, +/turf/open/floor/iron/small, +/area/station/maintenance/port/lesser) "lQu" = ( /obj/machinery/light/broken/directional/south, /obj/effect/spawner/random/trash/bin, @@ -32713,12 +35316,18 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/secondary/entry) -"lRs" = ( +"lRm" = ( /obj/structure/cable, -/obj/structure/disposalpipe/segment, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating, -/area/station/maintenance/starboard/aft) +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/iron/dark/corner{ + dir = 8 + }, +/area/station/science/xenobiology) "lRz" = ( /obj/machinery/atmospherics/components/binary/pump/on{ name = "Waste to Filter" @@ -32731,19 +35340,20 @@ }, /turf/open/floor/iron, /area/station/engineering/atmos/pumproom) -"lRC" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/light_switch/directional/south, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ +"lRU" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark/herringbone, +/area/station/ai_monitored/command/nuke_storage) +"lRV" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/siding/dark_red{ dir = 4 }, -/obj/machinery/camera/autoname/directional/south, -/turf/open/floor/iron/smooth, -/area/station/maintenance/solars/starboard/fore) -"lRX" = ( -/obj/machinery/portable_atmospherics/canister/air, -/turf/open/floor/iron, -/area/station/maintenance/aft) +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/stone, +/area/station/command/heads_quarters/hos) "lSb" = ( /obj/structure/disposalpipe/segment{ dir = 6 @@ -32753,15 +35363,15 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) -"lSf" = ( -/obj/structure/cable, -/obj/effect/turf_decal/siding/thinplating_new/light{ - dir = 1 +"lSh" = ( +/obj/structure/disposalpipe/segment{ + dir = 10 }, -/obj/machinery/power/apc/auto_name/directional/north, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/small, -/area/station/commons/fitness/locker_room) +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/maintenance/hallway/abandoned_command) "lSu" = ( /obj/structure/disposalpipe/trunk{ dir = 8 @@ -32771,16 +35381,6 @@ /obj/machinery/light/small/directional/south, /turf/open/floor/iron/cafeteria, /area/station/science/breakroom) -"lSw" = ( -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/tile/red/opposingcorners{ - dir = 1 - }, -/obj/structure/chair, -/obj/effect/landmark/start/hangover, -/obj/machinery/light/cold/directional/west, -/turf/open/floor/iron/cafeteria, -/area/station/service/cafeteria) "lSF" = ( /obj/effect/decal/cleanable/generic, /obj/machinery/light/cold/directional/south, @@ -32803,20 +35403,18 @@ /obj/machinery/chem_heater/withbuffer, /turf/open/floor/iron/dark, /area/station/medical/pharmacy) -"lSP" = ( -/obj/effect/mapping_helpers/broken_floor, -/obj/item/kirbyplants/random, -/obj/machinery/airalarm/directional/south, -/turf/open/floor/iron/smooth, -/area/station/maintenance/solars/starboard/fore) -"lTb" = ( -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ +"lTa" = ( +/obj/effect/turf_decal/siding/wideplating/dark/corner{ + dir = 8 + }, +/obj/effect/turf_decal/tile/dark_red/half/contrasted{ dir = 1 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/open/floor/iron, -/area/station/commons/storage/art) +/area/station/security/brig/entrance) "lTg" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/mapping_helpers/broken_floor, @@ -32839,6 +35437,13 @@ }, /turf/open/floor/iron/dark, /area/station/cargo/storage) +"lTy" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 1 + }, +/obj/effect/turf_decal/siding/wood, +/turf/open/floor/stone, +/area/station/service/bar) "lTA" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/siding/wood{ @@ -32859,15 +35464,6 @@ }, /turf/open/space/basic, /area/station/engineering/atmos/space_catwalk) -"lTF" = ( -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/firealarm/directional/south, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 8 - }, -/turf/open/floor/iron/smooth, -/area/station/maintenance/solars/starboard/fore) "lTN" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -32882,6 +35478,19 @@ }, /turf/open/floor/tram, /area/station/maintenance/department/medical/central) +"lUl" = ( +/obj/effect/turf_decal/plaque{ + icon_state = "L1"; + pixel_y = -15 + }, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central/aft) "lUo" = ( /turf/open/floor/iron, /area/station/science/lobby) @@ -32922,14 +35531,6 @@ /obj/effect/spawner/random/engineering/tracking_beacon, /turf/open/floor/iron, /area/station/cargo/storage) -"lUK" = ( -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/obj/effect/mapping_helpers/broken_floor, -/obj/item/kirbyplants/random, -/obj/machinery/power/apc/auto_name/directional/south, -/turf/open/floor/iron/smooth, -/area/station/maintenance/solars/starboard/fore) "lUO" = ( /obj/structure/cable, /turf/open/floor/plating, @@ -32982,45 +35583,12 @@ /obj/effect/spawner/random/structure/grille, /turf/open/floor/plating, /area/station/maintenance/starboard/greater) -"lVC" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/corner{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark/side{ - dir = 1 - }, -/area/station/science/xenobiology) -"lVL" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/central/fore) "lVN" = ( /obj/effect/spawner/random/structure/crate, /obj/effect/spawner/random/maintenance, /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/maintenance/starboard/lesser) -"lVP" = ( -/obj/machinery/computer/security/telescreen/cmo{ - dir = 4; - pixel_x = -30 - }, -/turf/open/floor/wood/parquet, -/area/station/command/heads_quarters/cmo) "lVW" = ( /obj/machinery/power/turbine/core_rotor{ dir = 8; @@ -33029,15 +35597,15 @@ /obj/structure/cable, /turf/open/floor/engine, /area/station/maintenance/disposal/incinerator) -"lWb" = ( -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/structure/sign/warning/no_smoking/circle/directional/north, -/turf/open/floor/iron, -/area/station/hallway/primary/starboard) "lWk" = ( /obj/machinery/light/small/directional/west, /turf/open/floor/iron/large, /area/station/hallway/primary/central/fore) +"lWz" = ( +/obj/effect/turf_decal/tile/dark_red/opposingcorners, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/security/armory) "lWF" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -33050,13 +35618,6 @@ }, /turf/open/floor/iron, /area/station/cargo/storage) -"lWQ" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/ticket_machine/directional/north, -/turf/open/floor/iron/half{ - dir = 8 - }, -/area/station/hallway/primary/central/fore) "lWR" = ( /obj/structure/table/wood, /obj/effect/decal/cleanable/dirt, @@ -33115,6 +35676,16 @@ /obj/machinery/light_switch/directional/south, /turf/open/floor/iron/grimy, /area/station/command/heads_quarters/qm) +"lXw" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/sign/warning/radiation/rad_area/directional/east, +/turf/open/floor/iron/stairs/right{ + dir = 1 + }, +/area/station/maintenance/hallway/abandoned_command) "lXC" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment, @@ -33148,18 +35719,21 @@ }, /turf/open/floor/iron/dark, /area/station/medical/cryo) -"lXV" = ( +"lXU" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/turf_decal/tile/neutral{ dir = 1 }, -/obj/effect/turf_decal/stripes/line{ +/obj/machinery/light/cold/directional/north, +/obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark/corner{ - dir = 1 - }, -/area/station/science/xenobiology) +/turf/open/floor/iron, +/area/station/hallway/primary/central/fore) +"lXX" = ( +/obj/machinery/light/warm/directional/north, +/turf/open/floor/iron, +/area/station/commons/dorms) "lXY" = ( /obj/machinery/airalarm/directional/south, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ @@ -33181,23 +35755,17 @@ "lYj" = ( /turf/closed/wall/r_wall, /area/station/hallway/primary/fore) -"lYt" = ( -/obj/structure/table/wood/fancy/green, -/obj/item/storage/wallet{ - pixel_x = -3; - pixel_y = 10 - }, -/obj/item/clothing/mask/cigarette/cigar{ - pixel_x = -1; - pixel_y = -2 +"lYl" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/status_display/ai/directional/north, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 }, -/obj/item/lighter{ - pixel_x = 11; - pixel_y = -7 +/obj/structure/disposalpipe/segment{ + dir = 4 }, -/obj/machinery/light/directional/south, -/turf/open/floor/iron/grimy, -/area/station/command/heads_quarters/qm) +/turf/open/floor/iron, +/area/station/hallway/primary/central/fore) "lYw" = ( /obj/structure/hedge, /obj/item/radio/intercom/directional/south, @@ -33227,26 +35795,14 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/maintenance/port/greater) -"lYU" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/central/fore) -"lYY" = ( -/obj/structure/disposalpipe/segment{ +"lYV" = ( +/obj/effect/turf_decal/siding/wideplating/dark{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/wood/parquet, -/area/station/service/library) +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/small, +/area/station/commons/fitness/locker_room) "lZa" = ( /obj/effect/turf_decal/siding/wood{ dir = 4 @@ -33260,6 +35816,20 @@ }, /turf/open/floor/iron/grimy, /area/station/tcommsat/server) +"lZf" = ( +/obj/machinery/vending/hydroseeds{ + slogan_delay = 700 + }, +/obj/effect/turf_decal/tile/green/opposingcorners, +/obj/effect/turf_decal/tile/blue/opposingcorners{ + dir = 8 + }, +/obj/effect/turf_decal/delivery/white{ + color = "#52B4E9" + }, +/obj/machinery/camera/autoname/directional/north, +/turf/open/floor/iron, +/area/station/service/hydroponics) "lZt" = ( /obj/machinery/portable_atmospherics/canister/air, /turf/open/floor/plating, @@ -33309,22 +35879,6 @@ /obj/machinery/light/cold/directional/east, /turf/open/floor/iron/dark, /area/station/science/robotics/lab) -"lZD" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/camera/directional/east, -/obj/structure/sign/directions/security/directional/east{ - dir = 2 - }, -/obj/structure/sign/directions/medical/directional/east{ - pixel_y = 8 - }, -/obj/structure/sign/directions/science/directional/east{ - pixel_y = -8 - }, -/obj/effect/turf_decal/tile/neutral, -/turf/open/floor/iron, -/area/station/hallway/primary/central/fore) "lZH" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -33336,31 +35890,37 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/hallway/secondary/dock) -"maa" = ( +"lZP" = ( /obj/structure/table, -/obj/item/tape, -/obj/item/pen/red{ - pixel_x = 3; - pixel_y = 12 +/obj/item/clothing/head/fedora/det_hat/minor{ + pixel_x = 7; + pixel_y = 9 }, -/obj/item/pen/blue{ - pixel_x = -6; - pixel_y = 12 +/obj/item/toy/eightball{ + pixel_x = -4 }, -/turf/open/floor/wood/parquet, -/area/station/service/library) -"mad" = ( -/obj/structure/table, -/obj/item/taperecorder{ - pixel_x = -16; - pixel_y = 3 +/turf/open/floor/iron/dark/small, +/area/station/commons/fitness/locker_room) +"lZR" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/duct, +/turf/open/floor/iron, +/area/station/maintenance/department/medical/central) +"lZT" = ( +/obj/structure/flora/bush/flowers_pp/style_random, +/obj/effect/turf_decal/weather/dirt{ + dir = 4 }, -/obj/item/flashlight/lamp/green{ - pixel_x = 8; - pixel_y = 3 +/turf/open/floor/grass, +/area/station/service/chapel) +"mae" = ( +/obj/structure/table/wood, +/obj/effect/turf_decal/siding/wood{ + dir = 6 }, -/turf/open/floor/wood/parquet, -/area/station/service/library) +/obj/machinery/chem_dispenser/drinks, +/turf/open/floor/iron/dark/textured, +/area/station/service/bar) "maf" = ( /turf/closed/wall/rust, /area/station/hallway/primary/fore) @@ -33376,26 +35936,12 @@ /obj/machinery/keycard_auth/directional/south, /turf/open/floor/wood/large, /area/station/command/heads_quarters/captain) -"mam" = ( -/obj/structure/table, -/obj/machinery/computer/libraryconsole/bookmanagement{ - dir = 1 - }, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/wood/parquet, -/area/station/service/library) "mau" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 8 }, /turf/open/floor/iron/white/small, /area/station/science/cubicle) -"maz" = ( -/obj/structure/chair/office, -/obj/structure/sign/poster/official/random/directional/north, -/obj/effect/landmark/start/hangover, -/turf/open/floor/wood/parquet, -/area/station/service/library) "maE" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -33412,14 +35958,25 @@ }, /turf/open/floor/sepia, /area/station/maintenance/aft) -"mbn" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 8 +"mbf" = ( +/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, +/obj/machinery/door/airlock{ + name = "Maintenance" }, -/obj/machinery/firealarm/directional/north, -/turf/open/floor/iron/cafeteria, -/area/station/security/prison/mess) +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/central/greater) +"mbj" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/cobweb/cobweb2, +/obj/machinery/light/small/directional/east, +/turf/open/floor/engine/xenobio, +/area/station/science/xenobiology) "mbp" = ( /obj/structure/hedge, /obj/machinery/light_switch/directional/east, @@ -33435,12 +35992,6 @@ /obj/structure/fluff/broken_canister_frame, /turf/open/floor/plating, /area/station/maintenance/department/engine/atmos) -"mbK" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 8 - }, -/turf/open/floor/iron/grimy, -/area/station/service/library) "mbV" = ( /obj/effect/spawner/random/entertainment/arcade, /turf/open/floor/eighties/red, @@ -33450,6 +36001,16 @@ /obj/machinery/cell_charger, /turf/open/floor/iron/grimy, /area/station/science/cubicle) +"mce" = ( +/obj/machinery/computer/slot_machine{ + pixel_y = 2 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 5 + }, +/obj/machinery/status_display/evac/directional/north, +/turf/open/floor/stone, +/area/station/service/bar) "mch" = ( /obj/structure/disposalpipe/segment{ dir = 9 @@ -33458,6 +36019,17 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) +"mcj" = ( +/obj/effect/turf_decal/tile/yellow/opposingcorners, +/obj/structure/table/reinforced/titaniumglass, +/obj/item/rcl/pre_loaded, +/obj/item/stock_parts/power_store/cell/high{ + pixel_y = 17 + }, +/obj/machinery/light/small/directional/south, +/obj/structure/secure_safe/directional/east, +/turf/open/floor/iron, +/area/station/command/heads_quarters/ce) "mcl" = ( /obj/structure/alien/weeds, /obj/effect/gibspawner/xeno, @@ -33482,6 +36054,16 @@ /obj/item/phone, /turf/open/floor/iron/smooth, /area/station/maintenance/port/aft) +"mcI" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/port) "mcP" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -33490,6 +36072,14 @@ /obj/effect/landmark/start/medical_doctor, /turf/open/floor/iron/dark, /area/station/medical/medbay/aft) +"mcS" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/neutral, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/light/cold/directional/east, +/turf/open/floor/iron, +/area/station/hallway/primary/central/fore) "mcT" = ( /obj/effect/turf_decal/bot, /obj/effect/decal/cleanable/dirt, @@ -33500,18 +36090,13 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/engineering/supermatter) -"mda" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 5 +"mcV" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 }, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating, -/area/station/maintenance/starboard/aft) -"mdj" = ( -/obj/machinery/portable_atmospherics/scrubber, -/turf/open/floor/plating, -/area/station/maintenance/central/greater) +/obj/effect/landmark/start/hangover, +/turf/open/floor/wood/parquet, +/area/station/service/library) "mdm" = ( /obj/structure/chair/office/light{ dir = 8 @@ -33526,15 +36111,6 @@ "mdt" = ( /turf/closed/wall/r_wall, /area/station/science/robotics/mechbay) -"mdU" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/camera/directional/north, -/obj/structure/sign/poster/official/random/directional/north, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/port) "mdX" = ( /obj/machinery/light/small/directional/north, /obj/machinery/conveyor_switch{ @@ -33549,6 +36125,11 @@ }, /turf/open/floor/catwalk_floor, /area/station/maintenance/department/engine/atmos) +"mei" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/commons/fitness/recreation/entertainment) "meu" = ( /turf/closed/wall, /area/station/command/heads_quarters/captain) @@ -33576,25 +36157,6 @@ dir = 4 }, /area/station/hallway/secondary/entry) -"meP" = ( -/obj/machinery/airalarm/directional/west, -/obj/effect/decal/cleanable/dirt, -/obj/effect/spawner/random/entertainment/arcade{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/commons/fitness/recreation/entertainment) -"mfc" = ( -/obj/effect/turf_decal/tile/red/opposingcorners, -/obj/effect/turf_decal/tile/blue/opposingcorners{ - dir = 8 - }, -/obj/effect/turf_decal/siding/wood{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/smooth, -/area/station/service/greenroom) "mfl" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/firealarm/directional/west, @@ -33610,11 +36172,6 @@ /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/wood, /area/station/command/heads_quarters/ce) -"mfo" = ( -/obj/item/kirbyplants/random, -/obj/machinery/newscaster/directional/west, -/turf/open/floor/iron, -/area/station/hallway/secondary/recreation) "mfp" = ( /obj/structure/disposalpipe/sorting/mail{ dir = 1 @@ -33623,16 +36180,6 @@ /obj/effect/mapping_helpers/mail_sorting/science/ordnance, /turf/open/floor/iron, /area/station/maintenance/starboard/aft) -"mfr" = ( -/obj/effect/turf_decal/tile/red/opposingcorners, -/obj/effect/turf_decal/tile/blue/opposingcorners{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/obj/effect/landmark/start/mime, -/turf/open/floor/iron/smooth, -/area/station/service/greenroom) "mfB" = ( /obj/structure/table/wood, /obj/item/book/bible, @@ -33663,13 +36210,6 @@ /obj/structure/cable, /turf/open/floor/catwalk_floor, /area/station/maintenance/department/electrical) -"mfV" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/machinery/space_heater, -/turf/open/floor/iron, -/area/station/engineering/atmos) "mgt" = ( /obj/machinery/vending/boozeomat, /obj/machinery/firealarm/directional/south, @@ -33683,31 +36223,21 @@ /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/iron, /area/station/engineering/atmospherics_engine) -"mhf" = ( +"mgW" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, -/turf/open/floor/iron/white/small, -/area/station/service/hydroponics/garden) -"mhg" = ( -/obj/structure/cable, -/obj/structure/closet/crate, -/obj/machinery/power/apc/auto_name/directional/east, -/obj/effect/spawner/random/maintenance/two, -/obj/item/reagent_containers/spray/plantbgone{ - pixel_x = 2; - pixel_y = 3 +/obj/structure/disposalpipe/segment{ + dir = 9 }, -/obj/item/reagent_containers/spray/plantbgone{ - pixel_x = 2; - pixel_y = 3 +/obj/effect/turf_decal/tile/neutral/opposingcorners{ + dir = 1 }, -/obj/item/grenade/chem_grenade/antiweed{ - pixel_x = -5; - pixel_y = 3 +/obj/effect/turf_decal/siding/thinplating_new{ + dir = 9 }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/white/small, -/area/station/service/hydroponics/garden) +/turf/open/floor/iron/small, +/area/station/hallway/secondary/service) "mhk" = ( /turf/closed/wall, /area/station/maintenance/port/greater) @@ -33720,18 +36250,6 @@ }, /turf/open/floor/iron/white, /area/station/medical/medbay/central) -"mhr" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/maintenance/hallway/abandoned_command) -"mhu" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/iron, -/area/station/maintenance/hallway/abandoned_command) "mhV" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -33739,23 +36257,22 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/maintenance/department/medical/central) -"mhY" = ( -/obj/structure/disposalpipe/segment, +"mhZ" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/commons/dorms) +/obj/structure/sign/poster/official/random/directional/north, +/turf/open/floor/iron/dark/smooth_large, +/area/station/service/lawoffice) +"mib" = ( +/obj/machinery/door/firedoor, +/turf/open/floor/iron/textured_half{ + dir = 8 + }, +/area/station/service/bar) "mid" = ( /obj/effect/spawner/random/structure/crate_loot, /turf/open/floor/plating, /area/station/maintenance/department/engine/atmos) -"mie" = ( -/obj/effect/mapping_helpers/broken_floor, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/commons/dorms) "mig" = ( /obj/effect/turf_decal/tile/green/half/contrasted, /obj/structure/table/glass, @@ -33770,13 +36287,6 @@ /obj/structure/reagent_dispensers/wall/virusfood/directional/south, /turf/open/floor/iron/white, /area/station/medical/virology) -"mik" = ( -/obj/effect/turf_decal/siding/red{ - dir = 10 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/small, -/area/station/security/brig) "miz" = ( /obj/structure/table/glass, /obj/item/wrench, @@ -33786,25 +36296,9 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/department/medical/central) -"miD" = ( -/obj/machinery/firealarm/directional/south, -/turf/open/floor/iron, -/area/station/commons/dorms) "miF" = ( -/obj/machinery/door/airlock/public/glass{ - name = "Commons" - }, -/obj/machinery/door/firedoor, -/turf/open/floor/iron/textured_half{ - dir = 8 - }, -/area/station/commons/dorms) -"miH" = ( -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/turf/open/floor/iron/small, -/area/station/commons/fitness/locker_room) +/turf/open/floor/stone, +/area/station/service/chapel) "miN" = ( /obj/effect/turf_decal/stripes/white/line{ dir = 4 @@ -33815,6 +36309,20 @@ }, /turf/open/floor/engine, /area/station/engineering/supermatter) +"miP" = ( +/obj/effect/turf_decal/siding/wideplating/dark{ + dir = 10 + }, +/obj/machinery/light/small/directional/south, +/obj/machinery/airalarm/directional/west, +/turf/open/floor/iron/small, +/area/station/service/barber) +"miQ" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 5 + }, +/turf/open/floor/wood, +/area/station/service/abandoned_gambling_den) "miR" = ( /obj/effect/turf_decal/stripes/line{ dir = 5 @@ -33836,21 +36344,32 @@ /obj/item/clothing/under/costume/skeleton, /turf/open/floor/eighties, /area/station/service/abandoned_gambling_den/gaming) -"mjk" = ( -/obj/structure/tank_frame, -/turf/open/floor/plating, -/area/station/maintenance/fore/greater) -"mjB" = ( -/obj/effect/turf_decal/tile/neutral/opposingcorners, -/obj/machinery/light/small/directional/south, -/turf/open/floor/iron, -/area/station/hallway/secondary/spacebridge) +"mjr" = ( +/obj/machinery/vending/dinnerware, +/obj/machinery/requests_console/auto_name/directional/south, +/obj/effect/mapping_helpers/requests_console/supplies, +/turf/open/floor/iron/kitchen/small, +/area/station/service/kitchen) "mjF" = ( /obj/structure/table/glass, /obj/item/clothing/suit/costume/cyborg_suit, /obj/item/clothing/head/costume/tv_head, /turf/open/floor/eighties, /area/station/service/abandoned_gambling_den/gaming) +"mjG" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/neutral/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/neutral/line, +/turf/open/floor/iron, +/area/station/hallway/primary/central/aft) "mjN" = ( /obj/structure/disposalpipe/trunk{ dir = 8 @@ -33886,20 +36405,45 @@ }, /turf/open/floor/iron/smooth, /area/station/security/checkpoint/supply) +"mka" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/landmark/navigate_destination/hydro, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/landmark/start/hangover, +/turf/open/floor/iron, +/area/station/hallway/primary/central/aft) +"mkh" = ( +/obj/structure/chair{ + dir = 8 + }, +/obj/item/radio/intercom/directional/east, +/turf/open/floor/iron/cafeteria, +/area/station/science/breakroom) "mks" = ( /obj/structure/cable, /obj/machinery/airalarm/directional/north, /turf/open/floor/iron/smooth, /area/station/hallway/secondary/command) -"mky" = ( +"mkt" = ( /obj/effect/decal/cleanable/dirt, -/obj/machinery/navbeacon{ - codes_txt = "patrol;next_patrol=14.0-Dormatories-CentralStarboard"; - location = "13.0-DormatoryCommons-Dormatories" - }, -/obj/machinery/light/cold/directional/south, +/obj/effect/spawner/random/trash, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, -/area/station/commons/dorms) +/area/station/maintenance/port/aft) +"mkz" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 8 + }, +/turf/open/floor/stone, +/area/station/service/chapel) "mkA" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -33909,6 +36453,14 @@ /obj/machinery/power/apc/auto_name/directional/north, /turf/open/floor/iron/white/textured_large, /area/station/command/heads_quarters/cmo) +"mkD" = ( +/obj/machinery/vending/boozeomat, +/obj/effect/turf_decal/siding/wood/end{ + dir = 4 + }, +/obj/machinery/status_display/ai/directional/north, +/turf/open/floor/iron/dark/textured, +/area/station/service/bar) "mkF" = ( /obj/structure/disposalpipe/segment, /obj/effect/landmark/start/depsec/supply, @@ -33918,17 +36470,11 @@ }, /turf/open/floor/iron/smooth, /area/station/security/checkpoint/supply) -"mkJ" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, +"mkN" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/mapping_helpers/broken_floor, -/obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, -/area/station/hallway/secondary/dock) +/area/station/maintenance/fore/greater) "mkO" = ( /obj/structure/filingcabinet, /obj/effect/turf_decal/tile/red/half/contrasted{ @@ -33937,15 +36483,6 @@ /obj/machinery/firealarm/directional/east, /turf/open/floor/iron/smooth, /area/station/security/checkpoint/supply) -"mkR" = ( -/obj/structure/chair/stool/bar/directional/east, -/obj/effect/mapping_helpers/broken_floor, -/obj/effect/turf_decal/siding/wood/corner{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/wood, -/area/station/service/abandoned_gambling_den) "mkZ" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/turf_decal/siding/wood{ @@ -33954,11 +36491,27 @@ /obj/machinery/light/floor, /turf/open/floor/iron/grimy, /area/station/tcommsat/server) +"mle" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/tile/blue/full, +/obj/machinery/light/small/directional/north, +/turf/open/floor/iron/white/textured_large, +/area/station/command/heads_quarters/cmo) "mlm" = ( /obj/structure/cable, /obj/structure/alien/weeds, /turf/open/floor/iron, /area/station/maintenance/starboard/greater) +"mlp" = ( +/obj/structure/chair/stool/bar/directional/south, +/obj/effect/turf_decal/siding/wood{ + dir = 10 + }, +/turf/open/floor/wood, +/area/station/service/abandoned_gambling_den) "mlr" = ( /obj/structure/chair/office/light{ dir = 4 @@ -33973,16 +36526,14 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron/smooth, /area/station/engineering/break_room) -"mlx" = ( -/obj/structure/cable, -/obj/machinery/airalarm/directional/south, -/turf/open/floor/wood/tile, -/area/station/command/corporate_showroom) -"mlE" = ( -/obj/effect/mapping_helpers/broken_floor, -/obj/machinery/firealarm/directional/east, -/turf/open/floor/wood, -/area/station/command/heads_quarters/qm) +"mlK" = ( +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/service/lawoffice) "mlN" = ( /obj/structure/cable, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ @@ -33990,30 +36541,6 @@ }, /turf/open/floor/iron/cafeteria, /area/station/security/prison/mess) -"mlR" = ( -/obj/structure/cable, -/obj/effect/mapping_helpers/broken_floor, -/obj/structure/disposalpipe/segment{ - dir = 9 - }, -/turf/open/floor/plating, -/area/station/maintenance/department/science/xenobiology) -"mmi" = ( -/obj/structure/chair/sofa/bench/left{ - dir = 4 - }, -/obj/machinery/light/small/directional/west, -/turf/open/floor/iron, -/area/station/commons) -"mmp" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/light/small/directional/west, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/machinery/status_display/ai/directional/west, -/turf/open/floor/iron, -/area/station/hallway/primary/central/fore) "mms" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/turf_decal/tile/yellow/opposingcorners, @@ -34055,13 +36582,15 @@ }, /turf/open/floor/iron/white, /area/station/medical/treatment_center) -"mmH" = ( -/obj/effect/turf_decal/tile/dark_red/half/contrasted{ +"mmL" = ( +/obj/effect/turf_decal/siding/wood{ dir = 4 }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/security/execution/transfer) +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment, +/turf/open/floor/wood/parquet, +/area/station/service/library) "mmT" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -34106,23 +36635,24 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) -"mnn" = ( -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/effect/turf_decal/siding/wood{ - dir = 8 - }, -/obj/structure/sign/painting/library{ - pixel_y = 32 +"mnl" = ( +/obj/structure/table, +/obj/item/circuitboard/machine/coffeemaker/impressa, +/obj/item/coffee_cartridge/decaf{ + pixel_y = 9 }, -/turf/open/floor/iron/smooth, -/area/station/service/library) -"mnu" = ( -/obj/structure/chair/office{ - dir = 4 +/turf/open/floor/iron/dark/small, +/area/station/maintenance/central/lesser) +"mno" = ( +/obj/machinery/light/small/directional/south, +/obj/machinery/firealarm/directional/south, +/obj/item/kirbyplants/random, +/obj/effect/turf_decal/siding/wood{ + dir = 1 }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/turf/open/floor/wood/parquet, -/area/station/service/library) +/obj/effect/turf_decal/siding/wood, +/turf/open/floor/stone, +/area/station/service/bar) "mnw" = ( /obj/effect/spawner/random/vending/colavend, /obj/machinery/firealarm/directional/east, @@ -34158,13 +36688,19 @@ /obj/machinery/newscaster/directional/south, /turf/open/floor/iron/dark, /area/station/engineering/atmos) -"mnI" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/mapping_helpers/broken_floor, -/obj/structure/sign/poster/contraband/random/directional/west, -/turf/open/floor/plating, -/area/station/maintenance/starboard/central) -"mnN" = ( +"mnC" = ( +/obj/structure/table, +/obj/item/phone{ + pixel_x = 6; + pixel_y = 1 + }, +/obj/item/reagent_containers/cup/glass/mug/britcup{ + pixel_x = -6; + pixel_y = 11 + }, +/turf/open/floor/iron/smooth, +/area/station/cargo/drone_bay) +"mnN" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ dir = 4 @@ -34182,6 +36718,26 @@ }, /turf/open/floor/plating, /area/station/cargo/storage) +"mog" = ( +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/obj/structure/cable, +/turf/open/floor/iron/kitchen/small, +/area/station/service/kitchen) +"moj" = ( +/obj/machinery/door/airlock{ + name = "Maintenance" + }, +/obj/effect/mapping_helpers/airlock/access/any/command/maintenance, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 4 + }, +/obj/structure/disposalpipe/junction{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/hallway/abandoned_command) "mom" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/machinery/atmospherics/components/binary/pump{ @@ -34204,22 +36760,49 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/cargo/storage) +"moG" = ( +/obj/effect/spawner/random/trash, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/central/greater) "mpk" = ( /obj/machinery/airalarm/directional/south, /turf/open/floor/circuit/green, /area/station/ai_monitored/command/nuke_storage) -"mpC" = ( -/obj/structure/table, -/obj/item/paper_bin{ - pixel_x = -2; - pixel_y = 4 +"mpl" = ( +/obj/machinery/computer/slot_machine{ + pixel_y = 2 }, -/obj/item/pen{ - pixel_x = -2; - pixel_y = 4 +/obj/machinery/light/small/directional/south, +/turf/open/floor/carpet/lone, +/area/station/service/abandoned_gambling_den) +"mpx" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/siding/thinplating{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/eighties, +/area/station/hallway/primary/central/fore) +"mpy" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 }, /turf/open/floor/wood/parquet, -/area/station/service/library) +/area/station/medical/psychology) +"mpB" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/effect/turf_decal/siding/wood/corner, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/light/floor, +/turf/open/floor/stone, +/area/station/service/bar) "mpE" = ( /obj/machinery/light/cold/dim/directional/north, /obj/structure/disposalpipe/segment{ @@ -34228,20 +36811,6 @@ /obj/structure/sign/poster/official/moth_piping/directional/north, /turf/open/floor/iron/small, /area/station/engineering/break_room) -"mpG" = ( -/turf/open/floor/plating, -/area/station/commons/storage/tools) -"mpO" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/starboard) "mpQ" = ( /obj/structure/bed{ dir = 4 @@ -34253,16 +36822,29 @@ /obj/machinery/light/small/directional/west, /turf/open/floor/iron/small, /area/station/security/brig) -"mqc" = ( -/obj/structure/table, -/obj/item/pai_card, -/obj/machinery/newscaster/directional/east, -/turf/open/floor/wood/parquet, -/area/station/service/library) -"mqv" = ( -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/iron/smooth, -/area/station/commons/storage/tools) +"mql" = ( +/obj/effect/turf_decal/siding/wideplating/dark{ + dir = 1 + }, +/obj/machinery/light/warm/directional/south, +/obj/item/kirbyplants/random/fullysynthetic, +/turf/open/floor/iron, +/area/station/commons/dorms) +"mqn" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/obj/structure/chair{ + pixel_y = -2 + }, +/turf/open/floor/iron, +/area/station/maintenance/hallway/abandoned_command) +"mqr" = ( +/obj/structure/bed, +/obj/item/bedsheet/purple, +/obj/machinery/light_switch/directional/east, +/turf/open/floor/iron/grimy, +/area/station/commons) "mqz" = ( /obj/effect/turf_decal/siding/wood{ dir = 10 @@ -34283,6 +36865,11 @@ /obj/item/wrench, /turf/open/floor/iron/dark, /area/station/hallway/secondary/construction) +"mrc" = ( +/obj/effect/landmark/atmospheric_sanity/ignore_area, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/eighties/red, +/area/station/service/abandoned_gambling_den/gaming) "mrh" = ( /obj/structure/cable, /obj/effect/mapping_helpers/airlock/access/all/medical/surgery, @@ -34291,22 +36878,37 @@ }, /turf/open/floor/plating, /area/station/maintenance/department/medical/central) +"mrn" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/port/greater) "mrt" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/light/small/directional/north, /turf/open/floor/iron, /area/station/hallway/secondary/dock) -"mrv" = ( +"mru" = ( +/obj/effect/mapping_helpers/requests_console/supplies, +/obj/machinery/power/apc/auto_name/directional/north, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/navbeacon{ - codes_txt = "patrol;next_patrol=6.3-Arrivals"; - location = "6.2-Arrivals" +/obj/effect/turf_decal/siding/wood{ + dir = 1 }, -/turf/open/floor/iron, -/area/station/hallway/secondary/entry) +/obj/effect/turf_decal/siding/wood, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/requests_console/auto_name/directional/south, +/turf/open/floor/stone, +/area/station/service/bar) "mrP" = ( /obj/structure/disposalpipe/segment{ dir = 6 @@ -34339,6 +36941,16 @@ /obj/effect/turf_decal/tile/neutral, /turf/open/floor/iron, /area/station/hallway/primary/fore) +"msk" = ( +/obj/effect/turf_decal/plaque{ + icon_state = "L3"; + pixel_y = -15 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central/aft) "msq" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -34356,23 +36968,15 @@ "msJ" = ( /turf/open/floor/iron, /area/station/hallway/secondary/dock) -"msV" = ( -/obj/structure/disposalpipe/segment{ - dir = 10 - }, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating, -/area/station/maintenance/central/greater) -"mtu" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/red/opposingcorners, -/obj/effect/turf_decal/tile/blue/opposingcorners{ +"mtc" = ( +/obj/structure/table/wood, +/obj/effect/decal/cleanable/dirt, +/obj/item/screwdriver, +/obj/effect/turf_decal/siding/wideplating_new/terracotta{ dir = 8 }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/smooth, -/area/station/service/greenroom) +/turf/open/floor/wood/tile, +/area/station/maintenance/central/lesser) "mtP" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -34381,17 +36985,6 @@ /obj/machinery/power/apc/auto_name/directional/east, /turf/open/floor/iron, /area/station/security/prison) -"mtV" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/door/airlock{ - name = "Theater Greenroom" - }, -/obj/effect/mapping_helpers/airlock/access/all/service/theatre, -/turf/open/floor/iron/textured_half{ - dir = 8 - }, -/area/station/service/greenroom) "mud" = ( /obj/structure/cable, /obj/machinery/door/airlock{ @@ -34459,6 +37052,16 @@ /obj/machinery/status_display/ai/directional/north, /turf/open/floor/wood/tile, /area/station/command/meeting_room) +"mvd" = ( +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/obj/structure/cable, +/obj/machinery/duct, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/plating, +/area/station/maintenance/central/lesser) "mvh" = ( /obj/structure/window/reinforced/spawner/directional/west, /obj/machinery/holopad, @@ -34489,27 +37092,10 @@ }, /turf/open/floor/iron, /area/station/security/brig/entrance) -"mvA" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/door/airlock/public{ - name = "Old Command Hallway" - }, -/obj/machinery/door/firedoor, -/turf/open/floor/iron/textured_half, -/area/station/maintenance/hallway/abandoned_command) "mvC" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood, /area/station/hallway/secondary/entry) -"mvJ" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/door/airlock/public{ - name = "Old Command Hallway" - }, -/obj/machinery/door/firedoor, -/turf/open/floor/iron/textured_half, -/area/station/maintenance/hallway/abandoned_command) "mvP" = ( /obj/machinery/smartfridge/organ, /obj/effect/turf_decal/tile/blue/fourcorners, @@ -34524,6 +37110,15 @@ dir = 1 }, /area/station/hallway/primary/central/fore) +"mvX" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/central/greater) "mwn" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/cable, @@ -34560,27 +37155,6 @@ /obj/effect/turf_decal/trimline/neutral/end, /turf/open/floor/iron, /area/station/hallway/primary/aft) -"mwF" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/line, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark/side{ - dir = 1 - }, -/area/station/science/xenobiology) -"mwJ" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/table, -/obj/item/stack/cable_coil, -/obj/item/multitool, -/obj/effect/decal/cleanable/cobweb/cobweb2, -/obj/machinery/light/small/directional/east, -/turf/open/floor/engine, -/area/station/science/xenobiology) "mwN" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/turf_decal/tile/neutral{ @@ -34589,19 +37163,6 @@ /obj/machinery/firealarm/directional/south, /turf/open/floor/iron, /area/station/hallway/primary/central/fore) -"mwP" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/iron/freezer, -/area/station/service/kitchen/coldroom) -"mwV" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/cable, -/obj/structure/steam_vent, -/turf/open/floor/plating, -/area/station/maintenance/central/lesser) "mxa" = ( /obj/structure/window/reinforced/spawner/directional/east, /turf/open/floor/glass/reinforced, @@ -34633,14 +37194,6 @@ /obj/structure/barricade/wooden/crude, /turf/open/floor/noslip, /area/station/maintenance/port/aft) -"mxN" = ( -/obj/structure/disposalpipe/segment{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/tile/neutral/opposingcorners, -/turf/open/floor/iron, -/area/station/hallway/primary/central/fore) "mxP" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -34650,13 +37203,14 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/aft) -"mxT" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/commons/dorms) +"mxS" = ( +/obj/item/kirbyplants/random, +/obj/machinery/camera/autoname/directional/west, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/turf/open/floor/iron/white, +/area/station/hallway/primary/central/aft) "mxX" = ( /obj/structure/transit_tube/curved/flipped, /obj/structure/lattice, @@ -34672,6 +37226,16 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) +"mye" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 1 + }, +/obj/structure/flora/rock/pile/jungle/style_5{ + pixel_y = -5; + pixel_x = -8 + }, +/turf/open/floor/grass, +/area/station/service/chapel) "myi" = ( /obj/structure/lattice/catwalk, /obj/machinery/atmospherics/pipe/smart/simple/brown/visible{ @@ -34679,6 +37243,13 @@ }, /turf/open/space/basic, /area/station/engineering/atmos/space_catwalk) +"myl" = ( +/obj/machinery/shower/directional/east, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 8 + }, +/turf/open/floor/iron/showroomfloor, +/area/station/commons/dorms) "mys" = ( /obj/structure/lattice, /obj/structure/transit_tube/diagonal, @@ -34689,6 +37260,21 @@ /obj/item/kirbyplants/random/fullysynthetic, /turf/open/floor/iron, /area/station/security/processing) +"myy" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/chair/stool/directional/south, +/obj/effect/turf_decal/siding/red{ + dir = 1 + }, +/obj/item/radio/intercom/directional/south{ + pixel_y = -31 + }, +/obj/effect/landmark/start/security_officer, +/obj/structure/cable, +/turf/open/floor/iron/small, +/area/station/security/office) "myM" = ( /obj/structure/window/spawner/directional/north, /obj/structure/window/spawner/directional/south, @@ -34710,11 +37296,6 @@ /obj/item/clothing/mask/breath, /turf/open/floor/plating, /area/station/command/teleporter) -"myW" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/broken_flooring/pile/directional/east, -/turf/open/floor/plating, -/area/station/maintenance/department/medical/central) "mzb" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -34724,21 +37305,15 @@ /obj/item/paper/fluff/jobs/engineering/frequencies, /turf/open/floor/carpet/executive, /area/station/command/meeting_room) -"mzc" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/line{ +"mze" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/structure/table, -/obj/machinery/door/poddoor/shutters{ - dir = 4; - id = "vaco"; - name = "Comissary Shutters" - }, /turf/open/floor/plating, -/area/station/commons/vacant_room/commissary) +/area/station/maintenance/port/greater) "mzf" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/table, @@ -34772,22 +37347,12 @@ "mzM" = ( /turf/open/floor/iron/stairs, /area/station/hallway/primary/central/fore) -"mAn" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 5 - }, -/turf/open/floor/plating, -/area/station/maintenance/central/greater) -"mAo" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/machinery/firealarm/directional/west, +"mAi" = ( +/obj/structure/closet/crate/trashcart/filled, +/obj/effect/spawner/random/maintenance, +/obj/effect/decal/cleanable/cobweb/cobweb2, /turf/open/floor/iron, -/area/station/hallway/primary/central/fore) +/area/station/maintenance/fore/greater) "mAs" = ( /obj/structure/rack, /obj/item/storage/toolbox/electrical{ @@ -34807,17 +37372,16 @@ /obj/machinery/light/small/directional/east, /turf/open/misc/sandy_dirt, /area/station/hallway/primary/central/fore) +"mAK" = ( +/obj/structure/table/greyscale, +/obj/item/clothing/gloves/color/yellow, +/obj/item/wrench, +/turf/open/floor/iron/grimy, +/area/station/engineering/main) "mAL" = ( /obj/structure/window/reinforced/spawner/directional/north, /turf/open/floor/iron, /area/station/security/checkpoint/escape) -"mAO" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/commons) "mAP" = ( /obj/effect/mapping_helpers/broken_floor, /obj/machinery/door/airlock{ @@ -34826,13 +37390,17 @@ }, /turf/open/floor/iron/showroomfloor, /area/station/commons/toilet/auxiliary) -"mBb" = ( +"mAR" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/light/small/directional/north, -/obj/effect/landmark/event_spawn, -/turf/open/floor/iron/showroomfloor, -/area/station/commons/toilet/restrooms) +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/station/hallway/primary/central/fore) "mBo" = ( /obj/structure/cable, /obj/effect/decal/cleanable/dirt, @@ -34851,26 +37419,6 @@ /obj/structure/sign/poster/official/soft_cap_pop_art/directional/north, /turf/open/floor/iron/grimy, /area/station/commons/vacant_room/office) -"mBQ" = ( -/obj/structure/cable, -/obj/structure/window/reinforced/spawner/directional/south, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/effect/turf_decal/stripes/line, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/station/science/xenobiology) -"mCb" = ( -/obj/machinery/computer/cargo{ - dir = 1 - }, -/obj/machinery/computer/security/telescreen/vault{ - dir = 1; - pixel_y = -30 - }, -/obj/machinery/camera/autoname/directional/south, -/obj/machinery/light/small/directional/south, -/turf/open/floor/wood, -/area/station/command/heads_quarters/qm) "mCf" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/door/airlock/external/glass{ @@ -34879,34 +37427,6 @@ /obj/effect/mapping_helpers/airlock/cyclelink_helper, /turf/open/floor/plating, /area/station/hallway/secondary/dock) -"mCp" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/door/firedoor, -/obj/machinery/door/poddoor/shutters/preopen{ - id = "hopqueue"; - name = "HoP Queue Shutters" - }, -/obj/effect/turf_decal/bot, -/obj/effect/turf_decal/tile/blue/half{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue/half{ - dir = 8 - }, -/turf/open/floor/iron/half{ - dir = 8 - }, -/area/station/hallway/primary/central/fore) -"mCs" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/holopad, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/small, -/area/station/commons/fitness/locker_room) "mCt" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -34923,34 +37443,11 @@ "mCF" = ( /turf/open/floor/iron/dark/side, /area/station/hallway/secondary/construction) -"mCJ" = ( -/obj/structure/mirror/directional/east, -/obj/structure/chair/stool/bar/directional/east, -/obj/effect/turf_decal/siding/thinplating_new/light{ - dir = 4 - }, -/obj/effect/landmark/start/assistant, -/turf/open/floor/iron/small, -/area/station/commons/fitness/locker_room) "mCL" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/department/engine) -"mCW" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating, -/area/station/maintenance/starboard/aft) -"mCX" = ( -/obj/effect/turf_decal/tile/dark_red/fourcorners, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/security/execution/transfer) "mDb" = ( /obj/effect/turf_decal/sand/plating, /obj/structure/cable, @@ -34958,6 +37455,10 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/department/electrical) +"mDf" = ( +/obj/structure/table/wood, +/turf/open/floor/iron/grimy, +/area/station/service/bar) "mDh" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -34974,15 +37475,16 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/maintenance/department/medical/central) -"mDq" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 +"mDA" = ( +/obj/structure/table/wood, +/obj/machinery/computer/libraryconsole{ + dir = 1 }, -/obj/structure/sign/departments/cargo/directional/west, -/turf/open/floor/iron, -/area/station/hallway/primary/central/fore) +/obj/structure/sign/painting/library{ + pixel_x = 30 + }, +/turf/open/floor/wood/parquet, +/area/station/service/library) "mDG" = ( /obj/effect/turf_decal/tile/dark_red/half/contrasted{ dir = 1 @@ -34990,6 +37492,22 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/security) +"mDJ" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/engineering/gravity_generator) +"mDL" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/delivery, +/turf/open/floor/iron/half, +/area/station/hallway/primary/central/fore) "mDW" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -35011,25 +37529,13 @@ /obj/machinery/door/firedoor, /turf/open/floor/catwalk_floor/flat_white, /area/station/science/robotics/lab) -"mEf" = ( -/obj/item/kirbyplants/random, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/structure/closet/crate/trashcart/filled, -/turf/open/floor/iron, -/area/station/hallway/secondary/recreation) -"mEk" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/binary/pump/on{ - dir = 4; - name = "Air" +"mEb" = ( +/obj/structure/flora/bush/jungle/c/style_random, +/obj/effect/turf_decal/weather/dirt{ + dir = 6 }, -/obj/machinery/light/small/red/directional/north, -/obj/item/kirbyplants/random, -/turf/open/floor/iron, -/area/station/maintenance/port/fore) +/turf/open/floor/grass, +/area/station/service/chapel) "mEq" = ( /obj/structure/closet/crate/wooden{ name = "Alms Box" @@ -35048,6 +37554,12 @@ }, /turf/open/floor/plating, /area/station/service/janitor) +"mEA" = ( +/obj/effect/turf_decal/siding/wideplating/dark/corner{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/commons/fitness/locker_room) "mEB" = ( /obj/effect/spawner/structure/window, /turf/open/floor/plating, @@ -35117,14 +37629,7 @@ dir = 6 }, /obj/effect/decal/cleanable/dirt/dust, -/obj/item/clothing/head/cone{ - pixel_x = -7; - pixel_y = 9 - }, -/obj/item/clothing/head/cone{ - pixel_x = -7; - pixel_y = 11 - }, +/obj/structure/tank_holder/extinguisher/advanced, /turf/open/floor/iron, /area/station/engineering/atmos) "mFG" = ( @@ -35132,6 +37637,22 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/circuit, /area/station/tcommsat/server) +"mFH" = ( +/obj/structure/table/greyscale, +/obj/item/screwdriver, +/obj/item/stack/cable_coil/cut{ + pixel_x = 11; + pixel_y = 7 + }, +/obj/machinery/camera/directional/west{ + c_tag = "Engineering - Office" + }, +/obj/item/stock_parts/power_store/cell/emproof{ + pixel_x = -6; + pixel_y = 9 + }, +/turf/open/floor/iron/grimy, +/area/station/engineering/main) "mFL" = ( /obj/structure/table, /obj/effect/turf_decal/siding/thinplating_new/terracotta{ @@ -35173,22 +37694,6 @@ }, /turf/open/floor/carpet, /area/station/medical/psychology) -"mGn" = ( -/obj/structure/rack, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/item/clothing/gloves/color/fyellow{ - pixel_y = 2 - }, -/obj/item/wrench, -/obj/item/clothing/mask/cigarette/xeno{ - pixel_x = -3; - pixel_y = -9 - }, -/obj/item/clothing/head/utility/welding, -/turf/open/floor/iron/small, -/area/station/maintenance/department/engine/atmos) "mGp" = ( /obj/structure/table/glass, /obj/item/gun/ballistic/automatic/c20r/toy/unrestricted, @@ -35208,15 +37713,11 @@ }, /turf/open/floor/iron, /area/station/engineering/lobby) -"mGu" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 10 - }, +"mGM" = ( /obj/effect/decal/cleanable/dirt, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) +/obj/structure/broken_flooring/singular/directional/south, +/turf/open/floor/iron, +/area/station/maintenance/starboard/aft) "mGN" = ( /obj/effect/turf_decal/siding/blue{ dir = 6 @@ -35224,17 +37725,6 @@ /obj/structure/sink/directional/west, /turf/open/floor/iron/white/small, /area/station/medical/storage) -"mGT" = ( -/obj/structure/cable, -/obj/machinery/door/airlock{ - name = "Maintenance" - }, -/obj/effect/mapping_helpers/airlock/unres{ - dir = 4 - }, -/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, -/turf/open/floor/plating, -/area/station/maintenance/fore/greater) "mGY" = ( /obj/effect/turf_decal/stripes/line, /turf/open/floor/iron/smooth, @@ -35254,9 +37744,10 @@ /obj/item/radio/intercom/directional/west, /turf/open/floor/iron/white/small, /area/station/medical/virology) -"mHq" = ( -/turf/closed/wall/r_wall, -/area/station/commons/fitness/recreation/entertainment) +"mHh" = ( +/obj/structure/cable, +/turf/open/floor/iron/dark/small, +/area/station/maintenance/central/lesser) "mHZ" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -35286,6 +37777,14 @@ /obj/effect/landmark/start/lawyer, /turf/open/floor/iron/dark/herringbone, /area/station/security/courtroom) +"mIm" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/white/corner{ + dir = 1 + }, +/area/station/science/lower) "mIA" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -35316,6 +37815,28 @@ /obj/structure/sign/poster/official/random/directional/north, /turf/open/floor/wood/tile, /area/station/command/corporate_showroom) +"mIE" = ( +/obj/machinery/door/airlock/public/glass{ + name = "Public Shrine" + }, +/obj/effect/turf_decal/siding/wood/end{ + dir = 4 + }, +/obj/machinery/door/firedoor, +/turf/open/floor/stone, +/area/station/hallway/primary/port) +"mIP" = ( +/obj/structure/chair{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/wood/tile, +/area/station/maintenance/central/lesser) +"mIR" = ( +/obj/structure/chair/stool/directional/east, +/obj/effect/landmark/start/hangover, +/turf/open/floor/iron/herringbone, +/area/station/commons/dorms) "mIT" = ( /obj/effect/turf_decal/siding/red{ dir = 10 @@ -35335,6 +37856,21 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) +"mJe" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/tile/yellow{ + dir = 1 + }, +/obj/effect/turf_decal/tile/red{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/fore) "mJq" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -35356,6 +37892,10 @@ }, /turf/open/floor/iron/dark, /area/station/science/xenobiology) +"mJB" = ( +/obj/effect/turf_decal/tile/dark_red/opposingcorners, +/turf/open/floor/iron, +/area/station/security/brig/entrance) "mJC" = ( /obj/structure/table/optable{ desc = "A cold, hard place for your final rest."; @@ -35381,16 +37921,6 @@ /obj/effect/spawner/random/food_or_drink/seed, /turf/open/misc/sandy_dirt, /area/station/maintenance/starboard/aft) -"mJW" = ( -/obj/machinery/biogenerator, -/obj/effect/turf_decal/delivery, -/obj/machinery/door/window/left/directional/south{ - name = "Bio-Generator"; - req_access = list("hydroponics") - }, -/obj/machinery/door/firedoor, -/turf/open/floor/iron/textured_large, -/area/station/service/hydroponics) "mJX" = ( /obj/effect/turf_decal/siding/thinplating_new{ dir = 8 @@ -35417,6 +37947,18 @@ dir = 1 }, /area/station/hallway/primary/aft) +"mKm" = ( +/obj/structure/cable, +/obj/effect/turf_decal/trimline/neutral/line, +/obj/effect/turf_decal/trimline/neutral/line{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/station/hallway/primary/port) "mKB" = ( /obj/machinery/navbeacon{ codes_txt = "delivery;dir=8"; @@ -35433,29 +37975,11 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) -"mKH" = ( -/obj/structure/disposalpipe/trunk{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red/opposingcorners{ - dir = 1 - }, -/obj/effect/turf_decal/bot, -/obj/machinery/disposal/bin, -/turf/open/floor/iron/cafeteria, -/area/station/service/cafeteria) "mKK" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible/layer1{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible/layer5{ - dir = 4 +/obj/effect/turf_decal/stripes/line{ + dir = 6 }, -/turf/open/floor/plating, +/turf/open/floor/iron, /area/station/engineering/atmos) "mKV" = ( /obj/effect/turf_decal/siding/blue{ @@ -35480,15 +38004,6 @@ }, /turf/open/floor/iron/smooth, /area/station/security/checkpoint/supply) -"mLi" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/duct, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/structure/sign/departments/botany/alt1/directional/west, -/turf/open/floor/iron, -/area/station/hallway/primary/central/fore) "mLk" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment, @@ -35496,17 +38011,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/smooth, /area/station/security/checkpoint/supply) -"mLm" = ( -/obj/structure/cable, -/obj/structure/window/reinforced/spawner/directional/south, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/effect/turf_decal/stripes/line, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/station/science/xenobiology) "mLp" = ( /obj/effect/turf_decal/tile/dark_red/opposingcorners, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ @@ -35528,11 +38032,6 @@ /obj/structure/cable, /turf/closed/wall/r_wall, /area/station/engineering/engine_smes) -"mLF" = ( -/obj/effect/mapping_helpers/broken_floor, -/obj/structure/broken_flooring/singular/directional/east, -/turf/open/floor/plating, -/area/station/maintenance/hallway/abandoned_recreation) "mLH" = ( /obj/machinery/light/cold/directional/east, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ @@ -35558,6 +38057,24 @@ }, /turf/open/floor/iron, /area/station/science/cytology) +"mLT" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/structure/table/glass, +/obj/item/paper_bin{ + pixel_x = -3; + pixel_y = 7 + }, +/obj/item/pen/invisible{ + pixel_x = -2; + pixel_y = 7 + }, +/obj/machinery/newscaster/directional/north, +/obj/item/storage/photo_album/library, +/obj/item/book/codex_gigas, +/turf/open/floor/iron/grimy, +/area/station/service/library) "mLU" = ( /obj/machinery/vending/autodrobe, /obj/machinery/light/small/directional/west, @@ -35601,14 +38118,6 @@ "mMH" = ( /turf/open/floor/iron/grimy, /area/station/engineering/main) -"mMK" = ( -/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible{ - dir = 9 - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/spawner/random/trash/bin, -/turf/open/floor/iron/white/small, -/area/station/science/ordnance/storage) "mMN" = ( /obj/structure/chair/office{ dir = 8 @@ -35649,26 +38158,6 @@ /obj/effect/mapping_helpers/airlock/access/any/science/maintenance, /turf/open/floor/plating, /area/station/maintenance/aft) -"mNG" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/button/transport/tram/directional/south{ - id = 1; - specific_transport_id = "bird_2" - }, -/turf/open/floor/iron, -/area/station/maintenance/port/aft) -"mNN" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/button/door/directional/east{ - id = "AuxToilet1"; - name = "Lock Control"; - normaldoorcontrol = 1; - specialfunctions = 4 - }, -/obj/structure/toilet, -/obj/machinery/light/small/directional/west, -/turf/open/floor/iron/showroomfloor, -/area/station/commons/toilet/auxiliary) "mNQ" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/turf_decal/tile/neutral{ @@ -35708,6 +38197,22 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, /area/station/hallway/primary/aft) +"mOx" = ( +/obj/item/stack/sheet/iron/fifty, +/obj/item/stack/rods/fifty, +/obj/item/stack/sheet/glass/fifty, +/obj/item/electronics/airlock, +/obj/item/electronics/airlock, +/obj/item/stock_parts/power_store/cell/high, +/obj/item/stack/sheet/mineral/plasma{ + amount = 30 + }, +/obj/item/gps, +/obj/structure/closet/crate/engineering, +/obj/machinery/light/cold/directional/east, +/obj/item/clothing/gloves/color/yellow, +/turf/open/floor/iron/dark/small, +/area/station/engineering/storage_shared) "mOI" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/light/small/directional/south, @@ -35722,11 +38227,15 @@ /obj/effect/landmark/generic_maintenance_landmark, /turf/open/floor/light/colour_cycle/dancefloor_b, /area/station/maintenance/starboard/central) -"mOT" = ( +"mOV" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/structure/extinguisher_cabinet/directional/west, /obj/structure/disposalpipe/segment, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating, -/area/station/maintenance/port/greater) +/turf/open/floor/iron, +/area/station/hallway/primary/central/fore) "mPe" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/layer2{ dir = 4 @@ -35764,10 +38273,6 @@ }, /turf/open/floor/wood/tile, /area/station/command/meeting_room) -"mPG" = ( -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating, -/area/station/maintenance/port/greater) "mPJ" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/turf_decal/tile/neutral/fourcorners, @@ -35790,6 +38295,11 @@ }, /turf/open/floor/iron/smooth, /area/station/command/bridge) +"mQD" = ( +/obj/machinery/power/apc/auto_name/directional/south, +/obj/structure/cable, +/turf/open/floor/iron/white/small, +/area/station/commons/toilet/restrooms) "mQF" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -35806,14 +38316,6 @@ dir = 8 }, /area/station/command/heads_quarters/hos) -"mRp" = ( -/obj/effect/turf_decal/tile/red/opposingcorners{ - dir = 1 - }, -/obj/structure/sign/poster/official/random/directional/north, -/obj/structure/hedge, -/turf/open/floor/iron/cafeteria, -/area/station/service/cafeteria) "mRA" = ( /obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible, /turf/open/floor/iron/stairs/left, @@ -35845,6 +38347,9 @@ /obj/structure/cable, /turf/open/floor/iron/smooth, /area/station/engineering/supermatter/room) +"mSa" = ( +/turf/open/floor/iron, +/area/station/commons/fitness/locker_room) "mSc" = ( /obj/structure/lattice/catwalk, /obj/structure/railing{ @@ -35855,15 +38360,28 @@ }, /turf/open/space/basic, /area/station/engineering/atmos/space_catwalk) -"mSi" = ( -/obj/structure/mannequin/plastic, +"mSA" = ( +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/open/floor/plating, -/area/station/cargo/boutique) +/area/station/maintenance/port/greater) "mSH" = ( /obj/effect/spawner/random/structure/crate, /obj/effect/spawner/random/maintenance, /turf/open/floor/plating, /area/station/maintenance/starboard/central) +"mSQ" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 8 + }, +/obj/structure/extinguisher_cabinet/directional/west, +/turf/open/floor/grass, +/area/station/service/chapel) "mSS" = ( /obj/structure/lattice/catwalk, /obj/structure/railing{ @@ -35881,6 +38399,16 @@ }, /turf/open/space/basic, /area/station/engineering/atmos/space_catwalk) +"mTc" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "mTd" = ( /obj/structure/closet/crate{ name = "Starups Clothing Crate" @@ -35910,21 +38438,6 @@ "mTl" = ( /turf/closed/wall, /area/station/cargo/sorting) -"mTq" = ( -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 1 - }, -/obj/effect/turf_decal/tile/dark_red/half/contrasted, -/turf/open/floor/iron, -/area/station/hallway/primary/port) -"mTr" = ( -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/tile/brown{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark/side, -/area/station/cargo/office) "mTs" = ( /turf/closed/wall/r_wall, /area/station/security/prison/work) @@ -35993,6 +38506,13 @@ }, /turf/open/misc/sandy_dirt, /area/station/security/tram) +"mTT" = ( +/obj/effect/spawner/random/entertainment/arcade{ + dir = 1 + }, +/obj/effect/turf_decal/siding/thinplating, +/turf/open/floor/eighties/red, +/area/station/hallway/primary/central/fore) "mTU" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/transit_tube/horizontal, @@ -36008,6 +38528,16 @@ /obj/effect/landmark/start/paramedic, /turf/open/floor/iron/white, /area/station/medical/medbay/central) +"mUi" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/wood/parquet, +/area/station/service/library) "mUn" = ( /obj/structure/cable, /obj/machinery/door/airlock{ @@ -36025,11 +38555,6 @@ /obj/effect/decal/cleanable/cobweb/cobweb2, /turf/open/floor/iron/grimy, /area/station/cargo/boutique) -"mUC" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/chair/stool/directional/west, -/turf/open/floor/iron, -/area/station/commons/fitness/recreation/entertainment) "mUI" = ( /obj/machinery/atmospherics/pipe/smart/simple/orange/hidden, /obj/effect/turf_decal/tile/yellow, @@ -36051,11 +38576,18 @@ /obj/machinery/firealarm/directional/west, /turf/open/floor/iron, /area/station/hallway/secondary/entry) -"mVa" = ( -/obj/effect/turf_decal/tile/neutral, +"mVc" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/station/hallway/primary/port) +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/stripes/red/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/red/line{ + dir = 8 + }, +/turf/open/floor/iron/small, +/area/station/hallway/primary/central/aft) "mVm" = ( /obj/effect/turf_decal/tile/green/anticorner/contrasted{ dir = 1 @@ -36104,30 +38636,44 @@ dir = 4 }, /area/station/medical/medbay/central) -"mVY" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/closed/wall, -/area/station/hallway/secondary/spacebridge) "mWc" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/science/lower) -"mWk" = ( -/obj/structure/cable, -/obj/item/storage/bag/trash, -/obj/effect/mapping_helpers/broken_floor, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/station/security/prison/safe) "mWs" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/airalarm/directional/west, /turf/open/floor/iron/small, /area/station/maintenance/department/engine) +"mWE" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/heat_exchanging/simple, +/turf/open/floor/iron/dark/small, +/area/station/tcommsat/server) +"mWF" = ( +/obj/machinery/status_display/evac/directional/north, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central/aft) +"mWT" = ( +/obj/effect/turf_decal/siding/thinplating_new/light{ + dir = 8 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/iron/white/small, +/area/station/service/hydroponics) "mWY" = ( /obj/effect/turf_decal/tile/dark_red/opposingcorners, /obj/structure/chair/sofa/bench/left{ @@ -36146,16 +38692,7 @@ /turf/open/floor/plating, /area/station/maintenance/starboard/aft) "mXm" = ( -/obj/machinery/atmospherics/components/binary/pump{ - dir = 4; - name = "N2O to Pure" - }, -/obj/machinery/atmospherics/components/binary/pump/off/general/visible/layer1{ - dir = 4; - name = "Plasma to Pure"; - color = "#BF40BF" - }, -/obj/machinery/atmospherics/components/binary/pump/off/general/visible/layer5{ +/obj/machinery/atmospherics/components/binary/pump/off/general/visible{ dir = 4; name = "CO2 to Pure" }, @@ -36168,13 +38705,11 @@ /turf/open/floor/iron/dark/small, /area/station/medical/storage) "mXx" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible{ - dir = 6 +/obj/machinery/atmospherics/components/binary/pump{ + dir = 4; + name = "N2O to Pure" }, -/turf/open/floor/iron, +/turf/open/floor/iron/dark, /area/station/engineering/atmos) "mXD" = ( /obj/effect/turf_decal/stripes/white/line{ @@ -36191,6 +38726,26 @@ /obj/machinery/firealarm/directional/north, /turf/open/floor/iron/white, /area/station/medical/medbay/central) +"mXZ" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central/fore) +"mYd" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/starboard/central) "mYj" = ( /obj/effect/turf_decal/tile/dark_red/half/contrasted{ dir = 1 @@ -36234,35 +38789,6 @@ /obj/effect/turf_decal/tile/dark_red/opposingcorners, /turf/open/floor/iron/dark, /area/station/ai_monitored/security/armory) -"mYS" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 1 - }, -/obj/structure/flora/bush/flowers_br/style_random, -/obj/machinery/camera/autoname/directional/north, -/obj/machinery/light/small/directional/north, -/turf/open/floor/grass, -/area/station/service/chapel) -"mYT" = ( -/obj/structure/table, -/obj/item/assembly/igniter{ - pixel_x = -5; - pixel_y = 3 - }, -/obj/item/assembly/igniter{ - pixel_x = 5; - pixel_y = -4 - }, -/obj/item/assembly/igniter{ - pixel_x = 2; - pixel_y = 6 - }, -/obj/item/assembly/igniter{ - pixel_x = 2; - pixel_y = -1 - }, -/turf/open/floor/engine, -/area/station/science/xenobiology) "mYW" = ( /obj/machinery/camera{ c_tag = "Xenobiology - Zoo"; @@ -36273,6 +38799,13 @@ /obj/machinery/light/small/directional/east, /turf/open/floor/grass, /area/station/science/xenobiology) +"mZa" = ( +/obj/machinery/button/transport/tram/directional/south{ + id = 1; + specific_transport_id = "bird_2" + }, +/turf/open/floor/iron, +/area/station/maintenance/port/aft) "mZb" = ( /obj/structure/cable, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ @@ -36293,24 +38826,33 @@ dir = 1 }, /area/station/security/execution/education) -"mZg" = ( -/obj/structure/disposalpipe/segment{ +"mZd" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/trimline/neutral/line{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/tile/neutral{ +/obj/effect/turf_decal/trimline/neutral/line{ dir = 8 }, +/obj/structure/cable, /turf/open/floor/iron, /area/station/hallway/primary/central/fore) -"mZh" = ( +"mZg" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/status_display/evac/directional/north, /obj/effect/turf_decal/tile/neutral{ - dir = 1 + dir = 8 }, /turf/open/floor/iron, /area/station/hallway/primary/central/fore) +"mZj" = ( +/obj/machinery/atmospherics/components/unary/portables_connector/visible, +/obj/machinery/portable_atmospherics/canister, +/turf/open/floor/iron/dark, +/area/station/science/ordnance) "mZA" = ( /obj/effect/mapping_helpers/airlock/abandoned, /obj/machinery/door/airlock/public/glass{ @@ -36319,11 +38861,6 @@ /obj/structure/alien/weeds, /turf/open/floor/wood, /area/station/maintenance/starboard/greater) -"mZX" = ( -/obj/item/kirbyplants/random, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/science/lower) "mZZ" = ( /obj/structure/table/glass, /obj/effect/turf_decal/trimline/blue/filled/line{ @@ -36337,12 +38874,19 @@ /obj/machinery/airalarm/directional/north, /turf/open/floor/iron/smooth, /area/station/maintenance/solars/starboard/aft) -"nau" = ( -/obj/structure/disposalpipe/junction, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/neutral, +"nam" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/neutral/line{ + dir = 10 + }, +/obj/effect/turf_decal/trimline/neutral/corner{ + dir = 4 + }, /turf/open/floor/iron, -/area/station/hallway/primary/central/fore) +/area/station/hallway/primary/central/aft) "nay" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/door/airlock/public/glass{ @@ -36363,11 +38907,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/station/maintenance/starboard/greater) -"naE" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment, -/turf/open/floor/iron/stairs, -/area/station/maintenance/port/greater) "naF" = ( /turf/open/floor/iron/dark/smooth_corner{ dir = 1 @@ -36389,13 +38928,6 @@ }, /turf/open/floor/iron/showroomfloor, /area/station/commons/toilet/auxiliary) -"naO" = ( -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/effect/turf_decal/siding/wood{ - dir = 8 - }, -/turf/open/floor/iron/smooth, -/area/station/service/library) "nbj" = ( /obj/structure/railing{ dir = 1 @@ -36406,11 +38938,6 @@ }, /turf/open/floor/iron/small, /area/station/engineering/supermatter/room) -"nbu" = ( -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/machinery/holopad, -/turf/open/floor/iron/smooth, -/area/station/service/library) "nbF" = ( /obj/structure/disposalpipe/segment, /obj/machinery/light/small/directional/west, @@ -36426,13 +38953,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/maintenance/port/lesser) -"nbZ" = ( -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/effect/turf_decal/siding/wood{ - dir = 4 - }, -/turf/open/floor/iron/smooth, -/area/station/service/library) "ncb" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/table/wood, @@ -36470,6 +38990,15 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/checker, /area/station/security/breakroom) +"ncr" = ( +/obj/structure/cable, +/obj/structure/chair/office{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/landmark/start/lawyer, +/turf/open/floor/wood/tile, +/area/station/service/lawoffice) "ncD" = ( /obj/structure/lattice, /obj/structure/disposalpipe/segment{ @@ -36477,6 +39006,11 @@ }, /turf/open/space/basic, /area/space/nearstation) +"ncH" = ( +/obj/structure/table, +/obj/item/wirecutters, +/turf/open/floor/iron, +/area/station/engineering/storage/tech) "ncL" = ( /obj/structure/cable, /obj/effect/turf_decal/trimline/neutral/line{ @@ -36501,35 +39035,17 @@ }, /turf/open/floor/tram, /area/station/maintenance/department/medical/central) -"ndq" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/door/morgue{ - name = "Secret Corridor"; - req_access = list("library") - }, -/turf/open/floor/catwalk_floor/iron_dark, -/area/station/maintenance/central/greater) "ndM" = ( /obj/structure/tank_dispenser/oxygen, /turf/open/floor/iron, /area/station/security/tram) -"ndZ" = ( -/obj/item/radio/intercom/directional/west, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/commons) -"nec" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 9 +"ndY" = ( +/obj/effect/turf_decal/stripes/red/line{ + dir = 8 }, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating, -/area/station/maintenance/central/greater) +/obj/structure/sign/poster/official/random/directional/north, +/turf/open/floor/iron/smooth_large, +/area/station/science/auxlab/firing_range) "neg" = ( /obj/effect/spawner/random/structure/crate_loot, /obj/effect/turf_decal/siding/thinplating_new/terracotta{ @@ -36543,14 +39059,12 @@ }, /turf/open/floor/iron/dark, /area/station/medical/chemistry) -"neq" = ( -/obj/effect/mapping_helpers/broken_floor, -/obj/machinery/light/small/directional/south, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 +"neF" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 9 }, -/turf/open/floor/wood/tile, -/area/station/commons/vacant_room/commissary) +/turf/open/floor/stone, +/area/station/service/chapel) "neL" = ( /obj/structure/closet/crate{ name = "Materials Crate" @@ -36572,23 +39086,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/smooth, /area/station/engineering/atmos) -"neZ" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/firealarm/directional/north, -/turf/open/floor/iron, -/area/station/commons/dorms) -"nfc" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/wood, -/area/station/maintenance/fore/greater) -"nff" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/mapping_helpers/broken_floor, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/commons/dorms) "nfg" = ( /obj/machinery/holopad, /obj/effect/turf_decal/siding/thinplating{ @@ -36602,26 +39099,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/hallway/secondary/construction) -"nfs" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/broken_flooring/pile/directional/east, -/turf/open/floor/plating, -/area/station/commons/dorms) -"nfy" = ( -/obj/structure/chair{ - dir = 1 - }, -/turf/open/floor/plating, -/area/station/maintenance/fore/greater) -"nfD" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/obj/effect/landmark/start/hangover, -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/commons/dorms) "nfG" = ( /obj/effect/turf_decal/tile/dark_red/half/contrasted{ dir = 1 @@ -36631,42 +39108,10 @@ }, /turf/open/floor/iron, /area/station/security) -"nfN" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/mapping_helpers/broken_floor, -/obj/structure/sign/poster/official/random/directional/north, -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/commons/dorms) -"nfS" = ( -/obj/structure/chair/stool/directional/east, -/turf/open/floor/carpet/orange, -/area/station/service/abandoned_gambling_den) -"nfT" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/obj/structure/sign/departments/custodian/directional/north, -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/commons/dorms) -"ngo" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/mapping_helpers/broken_floor, -/obj/machinery/airalarm/directional/north, -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, +"ngd" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners, /turf/open/floor/iron, -/area/station/commons/dorms) +/area/station/holodeck/rec_center) "ngq" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -36675,50 +39120,17 @@ /turf/open/floor/plating, /area/station/maintenance/department/medical/central) "ngv" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/door/airlock/public/glass{ - name = "Commons" - }, -/obj/machinery/door/firedoor, -/turf/open/floor/iron/textured_half{ - dir = 8 - }, -/area/station/commons/dorms) -"ngw" = ( -/obj/structure/disposalpipe/segment{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/commons/dorms) +/obj/structure/window/reinforced/spawner/directional/north, +/obj/structure/window/reinforced/spawner/directional/south, +/obj/structure/grille, +/obj/structure/window/reinforced/spawner/directional/west, +/turf/open/floor/plating, +/area/station/hallway/primary/central/fore) "ngL" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/security/prison) -"nha" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/dark_red/half/contrasted{ - dir = 8 - }, -/obj/machinery/computer/security/telescreen/interrogation{ - dir = 8; - name = "isolation room monitor"; - network = list("isolation"); - pixel_x = 30 - }, -/obj/machinery/photobooth/security, -/turf/open/floor/iron, -/area/station/security/execution/transfer) "nhe" = ( /obj/structure/railing{ dir = 4 @@ -36737,10 +39149,14 @@ /obj/effect/landmark/start/atmospheric_technician, /turf/open/floor/iron/smooth, /area/station/engineering/atmos) -"nhs" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron, -/area/station/commons/dorms) +"nhl" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) "nhu" = ( /obj/structure/table, /obj/effect/spawner/random/engineering/flashlight, @@ -36782,16 +39198,6 @@ }, /turf/open/floor/iron/smooth_edge, /area/station/engineering/supermatter/room) -"nhP" = ( -/obj/item/storage/backpack/duffelbag/sec{ - pixel_x = -15; - pixel_y = 7 - }, -/obj/structure/sign/poster/official/random/directional/north, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/light/cold/directional/north, -/turf/open/floor/iron/dark, -/area/station/security/office) "nhU" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -36844,6 +39250,14 @@ /obj/effect/turf_decal/delivery, /turf/open/floor/iron, /area/station/hallway/primary/fore) +"niF" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/white/side{ + dir = 8 + }, +/area/station/science/lower) "niI" = ( /obj/effect/turf_decal/tile/neutral/fourcorners, /obj/effect/turf_decal/siding/white{ @@ -36870,13 +39284,12 @@ }, /turf/open/floor/plating, /area/station/command/meeting_room) -"niX" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/siding/thinplating_new{ - dir = 8 +"niW" = ( +/obj/effect/turf_decal/siding/wideplating/dark{ + dir = 6 }, -/turf/open/floor/iron/white, -/area/station/commons/dorms) +/turf/open/floor/iron/small, +/area/station/service/barber) "niZ" = ( /obj/structure/cable, /turf/open/floor/iron, @@ -36896,10 +39309,21 @@ }, /turf/open/floor/iron, /area/station/engineering/lobby) -"njm" = ( -/obj/structure/cable, +"njh" = ( +/obj/effect/spawner/random/structure/crate, /obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/department/science/xenobiology) +"njs" = ( +/obj/structure/chair/comfy/black{ + dir = 1 + }, +/obj/effect/landmark/start/chaplain, +/turf/open/floor/carpet/lone, +/area/station/service/chapel/office) +"nju" = ( /obj/machinery/duct, +/obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/maintenance/fore/greater) "njA" = ( @@ -36930,11 +39354,6 @@ /obj/effect/turf_decal/stripes/line, /turf/open/floor/plating, /area/station/hallway/secondary/construction) -"njP" = ( -/obj/machinery/washing_machine, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/white, -/area/station/commons/dorms) "njW" = ( /obj/effect/spawner/structure/window, /turf/open/floor/plating, @@ -36957,14 +39376,6 @@ /obj/machinery/vending/wardrobe/engi_wardrobe, /turf/open/floor/iron, /area/station/engineering/main) -"nkl" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 6 - }, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating, -/area/station/maintenance/starboard/aft) "nkm" = ( /obj/structure/cannon{ dir = 8 @@ -37001,14 +39412,12 @@ /obj/effect/turf_decal/trimline/neutral/line, /turf/open/floor/iron, /area/station/hallway/primary/starboard) -"nkY" = ( -/obj/structure/chair/sofa/bench/right{ - dir = 4 +"nkW" = ( +/obj/effect/turf_decal/tile/blue/anticorner/contrasted{ + dir = 8 }, -/obj/item/radio/intercom/directional/west, -/obj/effect/landmark/start/assistant, -/turf/open/floor/iron, -/area/station/commons) +/turf/open/floor/iron/white, +/area/station/medical/medbay/lobby) "nla" = ( /turf/closed/wall, /area/station/commons/storage/art) @@ -37042,15 +39451,6 @@ /obj/effect/mapping_helpers/airlock/access/any/medical/maintenance, /turf/open/floor/plating, /area/station/maintenance/department/medical/central) -"nlu" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 10 - }, -/obj/effect/mapping_helpers/broken_floor, -/obj/machinery/duct, -/turf/open/floor/plating, -/area/station/maintenance/port/greater) "nlC" = ( /obj/item/kirbyplants/random/fullysynthetic, /turf/open/floor/iron/white/corner{ @@ -37064,9 +39464,12 @@ /turf/open/floor/iron/smooth, /area/station/engineering/atmos) "nlQ" = ( -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/iron, -/area/station/commons) +/obj/effect/turf_decal/siding/thinplating{ + dir = 8 + }, +/obj/machinery/holopad, +/turf/open/floor/eighties, +/area/station/hallway/primary/central/fore) "nlS" = ( /turf/open/floor/iron/white/small, /area/station/medical/virology) @@ -37093,28 +39496,11 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron/small, /area/station/engineering/break_room) -"nmy" = ( -/obj/item/stack/sheet/cardboard{ - pixel_x = -6; - pixel_y = 9 - }, -/obj/item/storage/box{ - pixel_x = -5; - pixel_y = 14 - }, -/turf/open/floor/iron, -/area/station/commons) "nmH" = ( /obj/structure/railing, /obj/effect/turf_decal/siding/wideplating, /turf/open/floor/wood, /area/station/engineering/main) -"nmL" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/station/maintenance/hallway/abandoned_recreation) "nmX" = ( /obj/machinery/power/apc/auto_name/directional/north, /obj/structure/cable, @@ -37130,40 +39516,20 @@ /obj/structure/cable, /turf/open/floor/iron/smooth, /area/station/command/heads_quarters/qm) +"nnd" = ( +/obj/effect/turf_decal/tile/dark_red/half/contrasted{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/security/brig/entrance) "nne" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/turf_decal/tile/dark_red/opposingcorners, /turf/open/floor/iron, /area/station/security/tram) -"nnk" = ( -/obj/machinery/camera/motion/directional/north{ - c_tag = "Vault Exterior"; - id_tag = list("vault") - }, -/turf/open/space/basic, -/area/space) -"nnx" = ( -/obj/effect/turf_decal/siding/green, -/obj/effect/mapping_helpers/broken_floor, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark/herringbone, -/area/station/service/abandoned_gambling_den/gaming) -"nnE" = ( -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating, -/area/station/maintenance/central/lesser) -"nnN" = ( -/obj/effect/turf_decal/siding/green{ - dir = 6 - }, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/iron/dark/herringbone, -/area/station/service/abandoned_gambling_den/gaming) -"nnR" = ( -/obj/effect/landmark/start/hangover, -/obj/effect/turf_decal/tile/neutral/opposingcorners, -/turf/open/floor/iron, -/area/station/hallway/secondary/spacebridge) "noe" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment, @@ -37237,15 +39603,6 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /turf/open/floor/iron/dark, /area/station/security/prison/safe) -"noT" = ( -/mob/living/simple_animal/bot/secbot/beepsky/armsky, -/obj/effect/turf_decal/tile/dark_red/opposingcorners, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/station/ai_monitored/security/armory) "noU" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/delivery, @@ -37255,6 +39612,17 @@ }, /turf/open/floor/plating/rust, /area/station/engineering/main) +"noV" = ( +/obj/effect/turf_decal/delivery, +/obj/machinery/door/poddoor/shutters{ + dir = 8; + id = "custodialshutters"; + name = "Custodial Closet Shutters" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/large, +/area/station/service/janitor) "npp" = ( /obj/structure/cable, /turf/open/floor/plating, @@ -37263,9 +39631,6 @@ /obj/effect/spawner/structure/window, /turf/open/floor/plating, /area/station/cargo/drone_bay) -"npF" = ( -/turf/closed/wall/rust, -/area/station/maintenance/port/greater) "npH" = ( /obj/effect/spawner/random/trash, /turf/open/floor/iron, @@ -37277,27 +39642,12 @@ }, /turf/open/floor/engine, /area/station/engineering/supermatter) -"npS" = ( +"npV" = ( /obj/structure/disposalpipe/segment, -/obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/door/airlock/maintenance{ - name = "Maintenance" - }, -/obj/effect/mapping_helpers/airlock/access/all/supply/general, -/turf/open/floor/plating, -/area/station/maintenance/port/greater) -"npY" = ( -/obj/machinery/door/firedoor, -/obj/effect/turf_decal/stripes/red/line{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/red/line, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron/small, -/area/station/hallway/secondary/spacebridge) +/turf/open/floor/iron/dark, +/area/station/service/lawoffice) "npZ" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/turf_decal/tile/neutral{ @@ -37314,6 +39664,10 @@ /obj/machinery/firealarm/directional/west, /turf/open/floor/iron/white/small, /area/station/medical/virology) +"nqf" = ( +/obj/machinery/light/small/directional/west, +/turf/open/floor/iron/white/small, +/area/station/commons/toilet/restrooms) "nqi" = ( /obj/structure/railing/corner{ dir = 4 @@ -37352,6 +39706,13 @@ }, /turf/open/floor/iron/white, /area/station/medical/virology) +"nqY" = ( +/obj/effect/landmark/event_spawn, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/stone, +/area/station/service/chapel) "nra" = ( /obj/effect/turf_decal/siding/wood, /obj/structure/window/spawner/directional/south, @@ -37359,6 +39720,21 @@ /obj/effect/turf_decal/bot, /turf/open/floor/iron, /area/station/engineering/main) +"nrg" = ( +/obj/structure/closet/secure_closet/hydroponics, +/obj/effect/turf_decal/siding/thinplating_new/light{ + dir = 1 + }, +/turf/open/floor/iron/white/small, +/area/station/service/hydroponics) +"nrp" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/item/flashlight/lantern/on, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/turf/open/floor/stone, +/area/station/service/chapel) "nry" = ( /obj/effect/turf_decal/tile/red/anticorner/contrasted{ dir = 8 @@ -37408,6 +39784,15 @@ "nsy" = ( /turf/closed/wall/r_wall/rust, /area/station/engineering/hallway) +"nsz" = ( +/obj/effect/spawner/random/vending/snackvend, +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/south, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/turf/open/floor/iron/white/side, +/area/station/hallway/primary/central/aft) "nsL" = ( /obj/structure/disposalpipe/segment, /obj/effect/turf_decal/tile/red{ @@ -37430,15 +39815,15 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/port) +"nsW" = ( +/obj/item/kirbyplants/random, +/turf/open/floor/iron, +/area/station/hallway/secondary/dock) "nsX" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /turf/open/floor/wood, /area/station/cargo/miningfoundry) -"nta" = ( -/obj/machinery/photocopier, -/turf/open/floor/plating, -/area/station/maintenance/central/lesser) "nte" = ( /obj/structure/table/glass, /obj/machinery/recharger, @@ -37461,10 +39846,6 @@ dir = 8 }, /area/station/ai_monitored/security/armory) -"nth" = ( -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating, -/area/station/maintenance/port/lesser) "nts" = ( /obj/effect/turf_decal/sand/plating, /obj/effect/decal/cleanable/dirt, @@ -37472,14 +39853,14 @@ /obj/effect/spawner/random/maintenance/two, /turf/open/floor/plating, /area/station/maintenance/fore/lesser) -"ntw" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/door/airlock/public/glass{ - name = "Public Shrine" +"ntu" = ( +/obj/effect/turf_decal/siding/thinplating_new/light{ + dir = 1 }, -/obj/machinery/door/firedoor, -/turf/open/floor/iron/textured_half, -/area/station/hallway/primary/port) +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/white/small, +/area/station/service/hydroponics) "ntF" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/status_display/ai/directional/south, @@ -37501,13 +39882,14 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/cafeteria, /area/station/science/breakroom) -"ntQ" = ( -/obj/effect/mapping_helpers/broken_floor, -/obj/effect/turf_decal/stripes/red/line{ +"ntP" = ( +/obj/structure/displaycase/trophy, +/obj/effect/turf_decal/siding/wood{ dir = 4 }, -/turf/open/floor/iron/smooth_large, -/area/station/science/auxlab/firing_range) +/obj/machinery/camera/autoname/directional/west, +/turf/open/floor/wood/parquet, +/area/station/service/library) "ntW" = ( /obj/machinery/light/small/directional/north, /obj/machinery/vending/wardrobe/coroner_wardrobe, @@ -37516,21 +39898,13 @@ }, /turf/open/floor/iron/small, /area/station/medical/morgue) -"ntX" = ( -/obj/effect/decal/cleanable/cobweb, -/obj/structure/dresser, -/obj/machinery/light/small/directional/north, -/turf/open/floor/wood/parquet, -/area/station/command/heads_quarters/cmo) -"ntY" = ( -/obj/structure/hedge, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/effect/turf_decal/siding/wood{ - dir = 4 +"ntZ" = ( +/obj/machinery/door/airlock/public/glass{ + name = "Recreation" }, -/obj/item/radio/intercom/directional/south, -/turf/open/floor/iron/smooth, -/area/station/service/library) +/obj/machinery/door/firedoor, +/turf/open/floor/iron/textured_half, +/area/station/commons/fitness/recreation/entertainment) "nua" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -37544,6 +39918,17 @@ /obj/effect/turf_decal/sand/plating, /turf/closed/wall, /area/station/maintenance/port/lesser) +"nun" = ( +/obj/structure/flora/bush/flowers_br/style_random{ + pixel_x = -3; + pixel_y = 4 + }, +/obj/effect/light_emitter/fake_outdoors, +/obj/effect/turf_decal/siding/wood{ + dir = 6 + }, +/turf/open/floor/grass/Airless, +/area/station/hallway/primary/central/aft) "nuo" = ( /obj/effect/turf_decal/tile/neutral/fourcorners, /obj/effect/decal/cleanable/dirt, @@ -37569,15 +39954,6 @@ }, /turf/open/floor/iron/small, /area/station/engineering/break_room) -"nuv" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/plating, -/area/station/maintenance/central/greater) "nuC" = ( /obj/effect/turf_decal/siding, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -37609,28 +39985,29 @@ }, /turf/open/floor/iron/smooth, /area/station/maintenance/solars/starboard/aft) -"nuX" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 6 +"nuV" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 }, -/obj/structure/mannequin/plastic, -/obj/machinery/firealarm/directional/south, -/turf/open/floor/carpet/blue, -/area/station/cargo/boutique) +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/structure/chair/sofa/bench/left{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/holodeck/rec_center) "nuY" = ( /obj/structure/broken_flooring/pile/directional/east, /obj/structure/alien/weeds/node, /turf/open/floor/plating, /area/station/maintenance/starboard/greater) -"nvo" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/mapping_helpers/broken_floor, +"nvB" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/neutral, /obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/station/maintenance/central/greater) +/turf/open/floor/iron, +/area/station/hallway/secondary/recreation) "nvE" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/turf_decal/tile/neutral, @@ -37652,24 +40029,6 @@ }, /turf/open/floor/iron/recharge_floor, /area/station/maintenance/port/aft) -"nvP" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/commons/dorms) -"nvS" = ( -/obj/effect/turf_decal/sand/plating, -/turf/open/floor/plating, -/area/station/service/library/abandoned) -"nwe" = ( -/obj/structure/disposalpipe/segment{ - dir = 6 - }, -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/commons/dorms) "nwj" = ( /obj/effect/turf_decal/tile/blue{ dir = 4 @@ -37678,17 +40037,19 @@ dir = 1 }, /area/station/hallway/secondary/dock) +"nwk" = ( +/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible{ + dir = 9 + }, +/obj/effect/spawner/random/trash/bin, +/turf/open/floor/iron/white/small, +/area/station/science/ordnance/storage) "nwN" = ( /obj/effect/turf_decal/tile/neutral{ dir = 1 }, /turf/open/floor/iron, /area/station/hallway/secondary/entry) -"nwS" = ( -/obj/structure/flora/ash/tall_shroom, -/obj/structure/sign/poster/random/directional/north, -/turf/open/floor/grass, -/area/station/service/hydroponics) "nxo" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -37697,16 +40058,6 @@ }, /turf/open/floor/iron/dark, /area/station/cargo/storage) -"nxu" = ( -/obj/effect/turf_decal/tile/dark_red/anticorner/contrasted{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/security/execution/transfer) "nxD" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -37718,6 +40069,16 @@ }, /turf/open/floor/iron/dark/small, /area/station/medical/morgue) +"nxI" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/fore) "nxJ" = ( /obj/effect/mapping_helpers/broken_floor, /obj/machinery/modular_computer/preset/id{ @@ -37726,18 +40087,16 @@ /obj/machinery/keycard_auth/directional/south, /turf/open/floor/wood, /area/station/command/heads_quarters/qm) +"nxK" = ( +/mob/living/basic/deer, +/obj/structure/flora/bush/sparsegrass, +/turf/open/floor/grass, +/area/station/service/chapel) "nxO" = ( /obj/effect/spawner/structure/window, /obj/machinery/atmospherics/pipe/smart/simple/yellow/visible, /turf/open/floor/plating, /area/station/engineering/atmos) -"nxR" = ( -/obj/structure/disposalpipe/segment{ - dir = 10 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/station/cargo/office) "nxX" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -37782,17 +40141,6 @@ }, /turf/open/floor/iron/white, /area/station/medical/virology) -"nys" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/structure/sign/directions/vault/directional/west{ - dir = 2 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/central/fore) "nyx" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -37800,6 +40148,17 @@ /obj/structure/steam_vent, /turf/open/floor/plating, /area/station/maintenance/department/prison) +"nyy" = ( +/obj/effect/turf_decal/tile/red/opposingcorners, +/obj/effect/turf_decal/tile/blue/opposingcorners{ + dir = 8 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/item/pushbroom, +/turf/open/floor/iron/smooth, +/area/station/service/greenroom) "nyB" = ( /obj/structure/sign/departments/xenobio/alt/directional/west, /turf/open/floor/iron/white/corner{ @@ -37858,6 +40217,11 @@ /obj/machinery/light_switch/directional/west, /turf/open/floor/iron/dark, /area/station/medical/pharmacy) +"nzA" = ( +/obj/effect/turf_decal/tile/dark_red/opposingcorners, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/security/tram) "nzK" = ( /obj/structure/cable, /obj/item/ammo_casing/spent{ @@ -37896,23 +40260,6 @@ }, /turf/open/space/basic, /area/space) -"nAe" = ( -/obj/structure/rack, -/obj/effect/spawner/random/maintenance, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/iron, -/area/station/maintenance/aft) -"nAh" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/obj/effect/landmark/start/hangover, -/turf/open/floor/iron, -/area/station/commons/dorms) -"nAi" = ( -/obj/structure/table, -/obj/structure/sign/poster/official/random/directional/north, -/turf/open/floor/wood, -/area/station/service/theater) "nAn" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /turf/open/floor/iron, @@ -37925,10 +40272,12 @@ /obj/machinery/light/small/broken/directional/west, /turf/open/misc/sandy_dirt, /area/station/maintenance/starboard/aft) -"nAx" = ( -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/hallway/primary/central/fore) +"nAq" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/iron/grimy, +/area/station/service/library) "nAy" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -37944,23 +40293,6 @@ /obj/effect/landmark/start/roboticist, /turf/open/floor/iron, /area/station/science/robotics/lab) -"nAM" = ( -/obj/effect/mapping_helpers/broken_floor, -/obj/effect/turf_decal/siding/thinplating_new{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/turf/open/floor/iron/white, -/area/station/commons/dorms) -"nAW" = ( -/obj/machinery/washing_machine, -/obj/machinery/light/small/directional/east, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/white, -/area/station/commons/dorms) "nBd" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -37983,6 +40315,17 @@ }, /turf/open/floor/stone, /area/station/command/corporate_suite) +"nBF" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/item/radio/intercom/directional/north, +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/turf/open/floor/iron/white/corner{ + dir = 1 + }, +/area/station/hallway/secondary/entry) "nBG" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 1 @@ -37992,19 +40335,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/starboard/central) -"nBL" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/landmark/event_spawn, -/obj/effect/turf_decal/trimline/neutral/line{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/neutral/line, -/turf/open/floor/iron, -/area/station/hallway/primary/central/fore) "nBM" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/atmospherics/pipe/smart/simple/yellow/visible{ @@ -38012,6 +40342,13 @@ }, /turf/open/floor/plating, /area/station/engineering/atmos/pumproom) +"nCe" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/white/side{ + dir = 6 + }, +/area/station/science/xenobiology) "nCo" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/chair/office{ @@ -38031,13 +40368,6 @@ "nCH" = ( /turf/closed/wall/r_wall, /area/station/security) -"nCL" = ( -/obj/effect/mapping_helpers/broken_floor, -/obj/machinery/transport/power_rectifier{ - configured_transport_id = "bird_2" - }, -/turf/open/floor/iron, -/area/station/maintenance/port/aft) "nCR" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/line, @@ -38055,6 +40385,13 @@ /obj/machinery/camera/autoname/directional/south, /turf/open/floor/iron/dark, /area/station/medical/medbay/lobby) +"nCX" = ( +/obj/machinery/light/floor, +/obj/structure/flora/bush/flowers_pp, +/obj/structure/flora/bush/flowers_yw, +/obj/structure/flora/bush/fullgrass, +/turf/open/floor/grass, +/area/station/hallway/primary/central/fore) "nCY" = ( /obj/structure/cable, /turf/open/floor/iron/kitchen/small, @@ -38072,53 +40409,17 @@ }, /turf/open/floor/iron, /area/station/security) -"nDx" = ( -/obj/effect/turf_decal/siding/red{ - dir = 5 - }, -/obj/structure/chair/office{ - dir = 4 - }, -/obj/item/radio/intercom/directional/north, -/obj/effect/decal/cleanable/dirt, -/obj/effect/landmark/start/warden, -/turf/open/floor/iron/white/small, -/area/station/security/warden) -"nDF" = ( -/obj/structure/sink/directional/east, -/obj/structure/mirror/directional/west, -/obj/effect/mapping_helpers/broken_floor, -/obj/machinery/firealarm/directional/south, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/showroomfloor, -/area/station/commons/toilet/restrooms) -"nDV" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/disposalpipe/segment{ +"nDQ" = ( +/obj/structure/chair{ dir = 4 }, -/obj/effect/turf_decal/trimline/neutral/line{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/neutral/line, -/turf/open/floor/iron, -/area/station/hallway/primary/central/fore) -"nDZ" = ( -/obj/effect/mapping_helpers/broken_floor, -/obj/structure/table, -/obj/item/screwdriver, -/turf/open/floor/iron, -/area/station/construction/mining/aux_base) +/turf/open/floor/iron/dark, +/area/station/security/interrogation) "nEa" = ( /obj/structure/lattice/catwalk, /obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/visible, /turf/open/space/basic, /area/station/engineering/atmos/space_catwalk) -"nEd" = ( -/obj/effect/mapping_helpers/broken_floor, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/engine, -/area/station/science/xenobiology) "nEh" = ( /obj/structure/falsewall, /turf/open/floor/plating, @@ -38130,24 +40431,19 @@ /obj/effect/turf_decal/bot, /turf/open/floor/iron/dark/textured_large, /area/station/cargo/bitrunning/den) -"nEo" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/iron, -/area/station/maintenance/hallway/abandoned_recreation) -"nEr" = ( -/obj/item/kirbyplants/random, -/obj/structure/extinguisher_cabinet/directional/west, -/obj/machinery/firealarm/directional/south, -/turf/open/floor/iron, -/area/station/commons) -"nEt" = ( -/obj/effect/mapping_helpers/broken_floor, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/turf/open/floor/plating, -/area/station/commons/vacant_room/commissary) +"nEq" = ( +/obj/machinery/door/airlock/public/glass{ + name = "Library" + }, +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/turf/open/floor/iron/textured_half, +/area/station/service/library) "nEx" = ( /obj/structure/disposalpipe/segment{ dir = 9 @@ -38207,13 +40503,10 @@ /obj/effect/mapping_helpers/airlock/access/all/command/general, /turf/open/floor/iron/textured_half, /area/station/engineering/storage/tech) -"nFh" = ( -/obj/effect/mapping_helpers/broken_floor, -/obj/effect/spawner/random/structure/tank_holder, -/obj/machinery/light_switch/directional/east, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/smooth, -/area/station/cargo/drone_bay) +"nFc" = ( +/obj/structure/chair/stool/bar/directional/east, +/turf/open/floor/carpet/lone, +/area/station/service/abandoned_gambling_den) "nFo" = ( /turf/closed/wall, /area/station/cargo/bitrunning/den) @@ -38230,32 +40523,6 @@ /obj/machinery/telecomms/server/presets/command, /turf/open/floor/circuit, /area/station/tcommsat/server) -"nFu" = ( -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/iron, -/area/station/maintenance/port/aft) -"nFy" = ( -/obj/effect/mapping_helpers/broken_floor, -/obj/effect/decal/cleanable/dirt, -/obj/structure/chair/sofa/bench/right{ - dir = 4 - }, -/obj/machinery/light/small/directional/south, -/turf/open/floor/iron, -/area/station/maintenance/department/medical/central) -"nFA" = ( -/obj/structure/window/reinforced/spawner/directional/north, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/conveyor_switch/oneway{ - dir = 4; - id = "garbage"; - name = "trash chute" - }, -/turf/open/floor/iron/white/small, -/area/station/service/janitor) "nFD" = ( /obj/structure/cable, /obj/effect/spawner/structure/window, @@ -38271,29 +40538,14 @@ }, /turf/open/floor/plating/airless, /area/space/nearstation) -"nFJ" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/camera/autoname/directional/south, -/obj/machinery/light/cold/directional/south, -/turf/open/floor/iron/dark, -/area/station/security/office) -"nFM" = ( +"nFU" = ( /obj/machinery/door/airlock{ - id_tag = "study_b"; - name = "Study B" - }, -/turf/open/floor/iron/textured_half{ - dir = 1 - }, -/area/station/commons) -"nFQ" = ( -/obj/machinery/door/airlock/public/glass{ - name = "Commons" + name = "Maintenance" }, -/obj/machinery/door/firedoor, -/obj/effect/landmark/navigate_destination, -/turf/open/floor/iron/textured_half, -/area/station/commons) +/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/fore/greater) "nFW" = ( /turf/closed/wall, /area/station/maintenance/fore/greater) @@ -38308,17 +40560,6 @@ /obj/machinery/portable_atmospherics/pump, /turf/open/floor/plating, /area/station/maintenance/port/greater) -"nGd" = ( -/obj/machinery/vending/wardrobe/det_wardrobe, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/computer/security/telescreen{ - dir = 4; - name = "Station Monitor"; - network = list("ss13"); - pixel_x = -26 - }, -/turf/open/floor/wood, -/area/station/security/detectives_office) "nGe" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -38381,15 +40622,6 @@ }, /turf/open/floor/iron/showroomfloor, /area/station/medical/virology) -"nGJ" = ( -/obj/structure/disposalpipe/segment{ - dir = 10 - }, -/obj/effect/mapping_helpers/broken_floor, -/obj/effect/decal/cleanable/dirt, -/obj/structure/table, -/turf/open/floor/plating, -/area/station/maintenance/port/greater) "nGP" = ( /obj/effect/turf_decal/tile/yellow{ dir = 1 @@ -38406,6 +40638,20 @@ /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/plating, /area/station/maintenance/department/engine/atmos) +"nHp" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/sign/poster/official/random/directional/north, +/obj/item/radio{ + desc = "An old handheld radio. You could use it, if you really wanted to."; + icon_state = "radio"; + name = "old radio"; + pixel_x = -6; + pixel_y = 10 + }, +/turf/open/floor/iron/dark, +/area/station/cargo/office) "nHq" = ( /obj/structure/table/reinforced, /obj/item/folder/yellow{ @@ -38422,26 +40668,10 @@ }, /turf/open/floor/wood, /area/station/engineering/break_room) -"nHt" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating, -/area/station/maintenance/port/greater) "nHu" = ( /obj/effect/spawner/random/structure/closet_maintenance, /turf/open/floor/plating, /area/station/maintenance/port/lesser) -"nHB" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/door/firedoor, -/obj/effect/turf_decal/stripes/red/line{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/red/line, -/turf/open/floor/iron/small, -/area/station/hallway/primary/central/fore) "nHN" = ( /obj/structure/table, /obj/item/stack/pipe_cleaner_coil/random, @@ -38480,12 +40710,6 @@ "nId" = ( /turf/open/floor/circuit/green, /area/station/ai_monitored/command/nuke_storage) -"nIp" = ( -/obj/effect/spawner/random/structure/crate, -/obj/effect/decal/cleanable/dirt, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating, -/area/station/maintenance/department/science/xenobiology) "nIx" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/turf_decal/siding/wood{ @@ -38505,12 +40729,13 @@ /obj/machinery/light/cold/directional/south, /turf/open/floor/iron/dark, /area/station/medical/medbay/lobby) -"nIC" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/white/corner, -/area/station/science/xenobiology) +"nID" = ( +/obj/effect/turf_decal/sand/plating, +/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible/layer1{ + dir = 4 + }, +/turf/open/floor/plating/airless, +/area/space/nearstation) "nIJ" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -38543,14 +40768,6 @@ /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/iron/small, /area/station/engineering/atmos) -"nIS" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/door/airlock{ - name = "Library Maintenance" - }, -/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, -/turf/open/floor/plating, -/area/station/maintenance/central/greater) "nIT" = ( /obj/structure/railing{ dir = 6 @@ -38560,30 +40777,36 @@ "nIY" = ( /turf/closed/mineral/random/stationside, /area/station/maintenance/fore/lesser) -"nJc" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/mapping_helpers/broken_floor, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/turf/open/floor/iron/white/corner{ - dir = 1 - }, -/area/station/hallway/secondary/entry) "nJd" = ( /obj/structure/cable, /turf/open/floor/iron/small, /area/station/maintenance/solars/starboard/fore) -"nJx" = ( +"nJj" = ( +/obj/effect/spawner/random/vending/snackvend, +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 8 + }, +/obj/machinery/airalarm/directional/east, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/turf/open/floor/iron/dark/side{ + dir = 4 + }, +/area/station/hallway/primary/central/fore) +"nJo" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/mapping_helpers/broken_floor, -/obj/machinery/firealarm/directional/east, -/obj/structure/broken_flooring/pile/directional/east, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/spawner/random/structure/steam_vent, /turf/open/floor/plating, -/area/station/maintenance/hallway/abandoned_command) +/area/station/maintenance/port/greater) "nJG" = ( /obj/structure/cable, /obj/effect/spawner/structure/window/reinforced, @@ -38593,15 +40816,6 @@ }, /turf/open/floor/plating, /area/station/command/meeting_room) -"nJH" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/mapping_helpers/broken_floor, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/maintenance/hallway/abandoned_command) "nJU" = ( /obj/machinery/conveyor{ dir = 4; @@ -38631,44 +40845,10 @@ /obj/machinery/light/floor, /turf/open/floor/iron/dark, /area/station/tcommsat/server) -"nKk" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/sorting/mail{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/obj/effect/mapping_helpers/mail_sorting/service/kitchen, -/obj/machinery/duct, -/turf/open/floor/plating, -/area/station/maintenance/central/greater) -"nKm" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/plating, -/area/station/maintenance/central/greater) "nKz" = ( /obj/machinery/light/floor, /turf/open/floor/iron/smooth, /area/station/hallway/secondary/command) -"nKH" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/visible{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/station/science/ordnance) -"nKL" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/spawner/random/trash, -/turf/open/floor/plating, -/area/station/maintenance/central/greater) "nKO" = ( /obj/machinery/atmospherics/components/unary/portables_connector/visible{ dir = 1 @@ -38676,22 +40856,39 @@ /obj/machinery/portable_atmospherics/canister, /turf/open/floor/iron/dark, /area/station/science/ordnance) -"nKX" = ( -/obj/effect/spawner/random/structure/grille, -/turf/open/floor/plating, -/area/station/maintenance/central/greater) "nLH" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/smooth, /area/station/cargo/warehouse) -"nLN" = ( +"nLM" = ( /obj/structure/cable, -/obj/structure/disposalpipe/segment, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/station/maintenance/central/greater) +/obj/structure/table/reinforced, +/obj/item/stack/cable_coil{ + pixel_x = -3; + pixel_y = 3 + }, +/obj/item/stock_parts/power_store/cell/high, +/obj/item/electronics/airlock{ + pixel_y = 13 + }, +/turf/open/floor/iron, +/area/station/engineering/storage/tech) +"nMn" = ( +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/obj/machinery/duct, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/iron/white/small, +/area/station/commons/toilet/restrooms) +"nMq" = ( +/obj/effect/turf_decal/tile/brown/opposingcorners, +/obj/structure/closet/secure_closet/miner, +/obj/machinery/camera/autoname/directional/north, +/turf/open/floor/iron, +/area/station/cargo/miningoffice) "nMA" = ( /obj/machinery/door/airlock{ name = "Construction Maintenance" @@ -38707,6 +40904,13 @@ /obj/structure/sign/poster/official/random/directional/east, /turf/open/floor/iron/smooth, /area/station/engineering/atmos/office) +"nMV" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) "nMW" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/door/firedoor, @@ -38725,16 +40929,6 @@ name = "Holodeck Projector Floor" }, /area/station/holodeck/rec_center) -"nNb" = ( -/obj/structure/disposalpipe/segment{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/dark_red, -/obj/structure/sign/warning/no_smoking/circle/directional/north, -/turf/open/floor/iron, -/area/station/security) "nNe" = ( /obj/structure/window/reinforced/spawner/directional/north, /turf/open/floor/iron/dark/textured_half{ @@ -38745,16 +40939,30 @@ /obj/effect/turf_decal/bot_white/right, /turf/open/floor/engine, /area/station/engineering/gravity_generator) -"nNq" = ( +"nNj" = ( +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/turf/open/floor/plating, +/area/station/maintenance/hallway/abandoned_command) +"nNz" = ( +/obj/structure/disposalpipe/segment, /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/effect/mapping_helpers/broken_floor, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 +/obj/effect/turf_decal/trimline/neutral/line{ + dir = 1 }, -/turf/open/floor/wood/parquet, -/area/station/medical/psychology) +/obj/effect/turf_decal/trimline/neutral/line, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/hallway/primary/central/aft) +"nNA" = ( +/obj/machinery/light/small/broken/directional/west, +/turf/open/floor/iron/dark/small, +/area/station/maintenance/central/lesser) "nNB" = ( /obj/machinery/door/airlock{ name = "Gardening Supplies" @@ -38762,53 +40970,20 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/department/prison) -"nNR" = ( -/obj/effect/mapping_helpers/broken_floor, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 - }, -/turf/open/floor/wood/parquet, -/area/station/medical/psychology) -"nNV" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/door/firedoor, -/obj/effect/turf_decal/stripes/red/line{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/red/line, -/turf/open/floor/iron/small, -/area/station/hallway/primary/central/fore) -"nNW" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/cable, -/obj/machinery/door/airlock{ - name = "Maintenance" - }, -/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, -/obj/effect/mapping_helpers/airlock/unres, -/turf/open/floor/plating, -/area/station/maintenance/central/lesser) "nNZ" = ( /obj/structure/tank_dispenser, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/visible, /turf/open/floor/plating, /area/station/science/ordnance/testlab) -"nOf" = ( +"nOH" = ( +/obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/door/airlock{ - id_tag = "private_b"; - name = "Private Quarters B" +/obj/effect/turf_decal/stripes/line{ + dir = 4 }, -/obj/machinery/door/firedoor, -/turf/open/floor/iron/textured_half, -/area/station/commons/dorms) -"nPc" = ( -/obj/effect/mapping_helpers/broken_floor, -/obj/effect/decal/cleanable/dirt, -/obj/structure/broken_flooring/pile/directional/east, -/turf/open/floor/plating, -/area/station/maintenance/hallway/abandoned_recreation) +/turf/open/floor/iron/smooth, +/area/station/command/gateway) "nPd" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/door/poddoor/shutters/preopen{ @@ -38818,6 +40993,13 @@ }, /turf/open/floor/plating, /area/station/medical/pharmacy) +"nPe" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/dark_red/fourcorners, +/turf/open/floor/iron, +/area/station/security/brig/entrance) "nPt" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -38839,16 +41021,6 @@ }, /turf/open/floor/iron, /area/station/security/warden) -"nPx" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/obj/structure/sign/poster/official/random/directional/north, -/turf/open/floor/iron/white/corner{ - dir = 1 - }, -/area/station/hallway/secondary/dock) "nPF" = ( /obj/effect/turf_decal/tile/yellow{ dir = 1 @@ -38871,18 +41043,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/department/engine) -"nPO" = ( -/obj/effect/turf_decal/siding/thinplating_new{ - dir = 1 - }, -/obj/structure/sink/directional/east, -/obj/structure/mirror/directional/west, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 - }, -/turf/open/floor/iron/white, -/area/station/commons/dorms) "nPX" = ( /obj/structure/cable, /turf/open/floor/iron/smooth_large, @@ -38892,14 +41052,6 @@ /obj/structure/cable, /turf/open/floor/iron/dark, /area/station/security/lockers) -"nQh" = ( -/obj/effect/turf_decal/siding/thinplating_new/corner{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/landmark/start/hangover, -/turf/open/floor/iron/white, -/area/station/commons/dorms) "nQj" = ( /obj/structure/toilet/greyscale{ dir = 8 @@ -38983,6 +41135,16 @@ /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/iron/small, /area/station/engineering/break_room) +"nQH" = ( +/obj/structure/closet{ + name = "Paramedic Supplies" + }, +/obj/effect/turf_decal/siding/blue{ + dir = 5 + }, +/obj/machinery/light_switch/directional/north, +/turf/open/floor/iron/white, +/area/station/medical/paramedic) "nQP" = ( /obj/machinery/computer/security{ dir = 8 @@ -38992,15 +41154,6 @@ dir = 1 }, /area/station/security/execution/transfer) -"nQU" = ( -/obj/structure/cable, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, -/turf/open/floor/iron/dark, -/area/station/medical/cryo) "nQX" = ( /obj/machinery/holopad, /turf/open/floor/iron/smooth, @@ -39014,11 +41167,6 @@ }, /turf/open/floor/plating, /area/station/command/bridge) -"nRo" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/table, -/turf/open/floor/iron, -/area/station/commons/fitness/recreation/entertainment) "nRr" = ( /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, @@ -39036,6 +41184,19 @@ /obj/effect/turf_decal/tile/dark_red/half/contrasted, /turf/open/floor/iron/smooth, /area/station/security/checkpoint/customs) +"nSb" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/neutral/line, +/obj/effect/turf_decal/trimline/neutral/line{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/port) "nSd" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -39047,16 +41208,6 @@ /obj/machinery/igniter/incinerator_atmos, /turf/open/floor/engine, /area/station/maintenance/disposal/incinerator) -"nSu" = ( -/obj/effect/mapping_helpers/broken_floor, -/obj/structure/bed/maint, -/obj/effect/mob_spawn/corpse/human, -/turf/open/floor/carpet/orange, -/area/station/service/abandoned_gambling_den) -"nSy" = ( -/obj/effect/decal/cleanable/blood/gibs/limb, -/turf/open/floor/plating, -/area/station/service/abandoned_gambling_den) "nSA" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/turf_decal/tile/neutral{ @@ -39075,15 +41226,6 @@ }, /turf/open/floor/plating/airless, /area/space/nearstation) -"nSR" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/white/side{ - dir = 5 - }, -/area/station/science/xenobiology) "nSY" = ( /obj/structure/disposalpipe/segment{ dir = 5 @@ -39099,15 +41241,6 @@ }, /turf/open/floor/iron/textured_half, /area/station/hallway/primary/central/fore) -"nTg" = ( -/obj/structure/cable, -/obj/item/kirbyplants/random, -/obj/effect/decal/cleanable/cobweb, -/obj/effect/mapping_helpers/broken_floor, -/obj/structure/sign/poster/official/random/directional/north, -/obj/machinery/firealarm/directional/west, -/turf/open/floor/wood/parquet, -/area/station/service/library) "nTi" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -39124,24 +41257,6 @@ }, /turf/open/floor/iron, /area/station/cargo/storage) -"nTj" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/central/fore) -"nTk" = ( -/obj/structure/table, -/obj/effect/spawner/random/maintenance, -/obj/item/radio/intercom/directional/east, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/white, -/area/station/commons/dorms) "nTt" = ( /obj/effect/mapping_helpers/broken_floor, /obj/machinery/computer/shuttle/mining/common{ @@ -39156,14 +41271,6 @@ }, /turf/open/floor/plating, /area/station/security/tram) -"nTz" = ( -/obj/effect/turf_decal/tile/yellow/anticorner/contrasted, -/obj/machinery/chem_dispenser{ - layer = 2.7 - }, -/obj/machinery/light/small/directional/south, -/turf/open/floor/iron/dark, -/area/station/medical/pharmacy) "nTC" = ( /turf/open/floor/iron/white/small, /area/station/security/prison/safe) @@ -39180,16 +41287,12 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/grimy, /area/station/engineering/main) -"nUi" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/door/airlock/public/glass{ - name = "Commons" +"nUd" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 4 }, -/obj/machinery/door/firedoor, -/turf/open/floor/iron/textured_half, -/area/station/commons) +/turf/open/floor/iron, +/area/station/hallway/primary/central/aft) "nUo" = ( /obj/effect/turf_decal/tile/purple/opposingcorners, /obj/effect/turf_decal/siding/green{ @@ -39204,6 +41307,17 @@ }, /turf/open/floor/iron/cafeteria, /area/station/science/circuits) +"nUq" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/stripes/red/line, +/obj/effect/turf_decal/stripes/red/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/small, +/area/station/hallway/primary/central/fore) "nUx" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ @@ -39232,23 +41346,39 @@ /obj/machinery/atmospherics/pipe/bridge_pipe/brown/visible, /turf/open/space/basic, /area/station/engineering/atmos/space_catwalk) -"nUG" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment, -/obj/effect/mapping_helpers/airlock/abandoned, -/obj/machinery/door/airlock/public{ - name = "Abandoned Domiciles" - }, -/obj/machinery/door/firedoor, +"nUK" = ( +/obj/effect/turf_decal/siding/wood, /obj/structure/barricade/wooden/crude, -/turf/open/floor/iron, -/area/station/maintenance/hallway/abandoned_recreation) +/obj/structure/disposalpipe/segment, +/turf/open/floor/plating, +/area/station/cargo/boutique) "nUQ" = ( /obj/structure/chair{ dir = 8 }, /turf/open/floor/iron/dark/small, /area/station/security/checkpoint/customs) +"nUY" = ( +/obj/effect/turf_decal/siding/wideplating/dark{ + dir = 4 + }, +/obj/effect/turf_decal/siding/thinplating/terracotta{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/commons/dorms) +"nVa" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/mapping_helpers/mail_sorting/service/janitor_closet, +/obj/structure/disposalpipe/sorting/mail/flip{ + dir = 8 + }, +/turf/open/floor/iron/white/small, +/area/station/service/janitor) "nVe" = ( /obj/machinery/door/window/right/directional/north, /obj/effect/turf_decal/stripes/white/full, @@ -39272,6 +41402,18 @@ /obj/item/wirecutters, /turf/open/floor/iron/dark, /area/station/security/office) +"nVw" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/effect/turf_decal/tile/neutral/opposingcorners{ + dir = 1 + }, +/obj/effect/turf_decal/siding/thinplating_new{ + dir = 8 + }, +/turf/open/floor/iron/small, +/area/station/hallway/secondary/service) "nVx" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -39283,63 +41425,48 @@ dir = 1 }, /area/station/science/xenobiology) -"nVD" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, +"nVA" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/item/chair{ - pixel_x = 2; - pixel_y = -5 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, +/obj/machinery/firealarm/directional/east, +/obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, -/area/station/hallway/primary/central/fore) +/area/station/maintenance/hallway/abandoned_command) "nVF" = ( /obj/structure/cable, /obj/effect/spawner/structure/window/reinforced/tinted, /turf/open/floor/plating, /area/station/tcommsat/server) -"nVJ" = ( -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/station/maintenance/port/aft) -"nVN" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/purple/visible/layer2{ +"nWa" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/trimline/neutral/line{ dir = 4 }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/station/science/ordnance) -"nVX" = ( -/obj/effect/turf_decal/delivery, -/obj/machinery/door/poddoor/shutters{ - dir = 8; - id = "custodialshutters"; - name = "Custodial Closet Shutters" - }, -/turf/open/floor/iron/large, -/area/station/service/janitor) -"nVY" = ( -/obj/machinery/door/airlock{ - id_tag = "Toilet2"; - name = "Unit 2" +/obj/effect/turf_decal/trimline/neutral/line{ + dir = 8 }, -/turf/open/floor/iron/showroomfloor, -/area/station/commons/toilet/restrooms) +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/hallway/primary/central/fore) "nWh" = ( /obj/machinery/atmospherics/pipe/smart/simple/dark/visible, /turf/closed/wall/r_wall, /area/station/science/ordnance/burnchamber) +"nWk" = ( +/obj/item/kirbyplants/random/fullysynthetic, +/obj/structure/sign/poster/contraband/random/directional/north, +/obj/effect/decal/cleanable/cobweb/cobweb2, +/obj/machinery/computer/security/telescreen/entertainment/directional/east, +/turf/open/floor/stone, +/area/station/service/abandoned_gambling_den) "nWq" = ( -/obj/structure/chair/sofa/bench/right, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/light/dim/directional/north, -/turf/open/floor/iron/white, -/area/station/science/cytology) +/obj/structure/disposalpipe/segment, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/hallway/primary/central/aft) "nWr" = ( /obj/structure/cable, /obj/structure/hedge, @@ -39364,25 +41491,6 @@ }, /turf/open/space/basic, /area/station/engineering/atmos/space_catwalk) -"nWO" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/mapping_helpers/broken_floor, -/obj/effect/decal/cleanable/dirt, -/obj/structure/chair{ - dir = 4; - pixel_y = -2 - }, -/turf/open/floor/iron/cafeteria, -/area/station/science/breakroom) -"nWQ" = ( -/obj/structure/chair/sofa/bench/left, -/obj/effect/decal/cleanable/dirt, -/obj/effect/landmark/start/hangover, -/obj/machinery/camera/autoname/directional/north, -/turf/open/floor/iron/white, -/area/station/science/cytology) "nXt" = ( /obj/effect/turf_decal/tile/yellow/full, /obj/structure/table/reinforced, @@ -39394,12 +41502,19 @@ /turf/open/floor/iron/white/textured_large, /area/station/medical/pharmacy) "nXx" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/mapping_helpers/broken_floor, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/showroomfloor, -/area/station/commons/toilet/restrooms) +/obj/effect/turf_decal/tile/dark_red/half/contrasted{ + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/obj/machinery/light/cold/directional/south, +/obj/machinery/airalarm/directional/south, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/turf/open/floor/iron, +/area/station/security/brig/entrance) "nXC" = ( /obj/machinery/disposal/bin, /obj/structure/disposalpipe/trunk, @@ -39453,6 +41568,15 @@ /obj/structure/bed/maint, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) +"nYs" = ( +/obj/structure/window/spawner/directional/north, +/obj/machinery/light/small/directional/south, +/obj/structure/flora/bush/jungle, +/obj/structure/flora/rock/pile/style_2{ + pixel_x = -20 + }, +/turf/open/misc/sandy_dirt, +/area/station/commons/fitness/locker_room) "nYD" = ( /obj/structure/lattice/catwalk, /obj/structure/railing{ @@ -39470,6 +41594,10 @@ }, /turf/open/space/basic, /area/station/engineering/atmos/space_catwalk) +"nYH" = ( +/obj/machinery/light/small/directional/east, +/turf/open/floor/iron/smooth, +/area/station/maintenance/solars/port/aft) "nYP" = ( /obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ dir = 9 @@ -39500,6 +41628,12 @@ }, /turf/open/floor/iron/smooth, /area/station/cargo/drone_bay) +"nZk" = ( +/obj/effect/spawner/random/engineering/tracking_beacon, +/turf/open/floor/iron/white/side{ + dir = 4 + }, +/area/station/science/xenobiology) "nZq" = ( /obj/structure/disposalpipe/segment, /obj/effect/decal/cleanable/dirt, @@ -39519,14 +41653,10 @@ /obj/structure/holosign/barrier/atmos/tram, /turf/open/floor/tram, /area/station/maintenance/department/medical/central) -"nZM" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating, -/area/station/maintenance/port/greater) +"nZG" = ( +/obj/machinery/vending/wardrobe/chef_wardrobe, +/turf/open/floor/iron/kitchen/small, +/area/station/service/kitchen) "nZQ" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/white/line{ @@ -39534,13 +41664,6 @@ }, /turf/open/floor/engine, /area/station/science/xenobiology) -"nZR" = ( -/obj/machinery/computer/slot_machine{ - pixel_y = 2 - }, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/carpet/orange, -/area/station/service/abandoned_gambling_den) "nZW" = ( /obj/effect/mapping_helpers/broken_floor, /obj/effect/spawner/random/trash, @@ -39554,6 +41677,10 @@ /obj/effect/mapping_helpers/airlock/access/all/supply/general, /turf/open/floor/plating, /area/station/maintenance/port/greater) +"oae" = ( +/obj/effect/turf_decal/tile/dark_red, +/turf/open/floor/iron, +/area/station/security/prison) "oah" = ( /obj/effect/mapping_helpers/broken_floor, /obj/effect/landmark/start/cyborg, @@ -39585,23 +41712,32 @@ }, /turf/open/floor/engine, /area/station/engineering/supermatter) -"oaV" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/door/airlock/public/glass{ - name = "Cargo Botique" +"oaK" = ( +/obj/structure/window/spawner/directional/south, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/dark, +/area/station/commons/dorms) +"oaY" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/stripes/line{ + dir = 4 }, -/obj/machinery/door/firedoor, -/turf/open/floor/iron/textured_half{ - dir = 1 +/obj/structure/table/reinforced, +/obj/machinery/cell_charger, +/obj/item/stock_parts/power_store/cell/high{ + pixel_x = 4; + pixel_y = 5 }, -/area/station/hallway/primary/central/fore) +/obj/item/stock_parts/power_store/cell/high, +/turf/open/floor/iron/dark, +/area/station/science/robotics/lab) "obd" = ( /obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ dir = 10 }, /obj/structure/cable, /obj/machinery/firealarm/directional/north, +/obj/machinery/space_heater, /turf/open/floor/iron/dark, /area/station/engineering/atmos) "obe" = ( @@ -39611,16 +41747,18 @@ }, /turf/open/floor/iron/smooth, /area/station/engineering/break_room) -"obm" = ( -/obj/structure/disposalpipe/segment, +"obi" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/firealarm/directional/east, -/obj/effect/turf_decal/tile/neutral, -/turf/open/floor/iron, -/area/station/hallway/primary/central/fore) -"obq" = ( /obj/structure/cable, -/obj/structure/lattice/catwalk, +/obj/structure/disposalpipe/junction/flip{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/central/greater) +"obq" = ( +/obj/structure/cable, +/obj/structure/lattice/catwalk, /turf/open/space/basic, /area/station/solars/port) "obs" = ( @@ -39631,27 +41769,22 @@ /obj/machinery/power/apc/auto_name/directional/east, /turf/open/floor/iron/white/small, /area/station/science/ordnance/storage) -"obv" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/plating, -/area/station/maintenance/fore/greater) -"obG" = ( -/obj/structure/cable, +"obH" = ( /obj/structure/disposalpipe/segment{ - dir = 6 + dir = 9 }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/mapping_helpers/broken_floor, +/obj/structure/chair/stool/directional/south, +/turf/open/floor/iron, +/area/station/cargo/sorting) +"obN" = ( +/obj/structure/cable, +/obj/effect/spawner/random/maintenance, /turf/open/floor/plating, -/area/station/maintenance/starboard/fore) +/area/station/maintenance/fore/lesser) "obP" = ( /obj/machinery/door/firedoor, /turf/open/floor/iron/textured_half, /area/station/hallway/secondary/dock) -"obU" = ( -/obj/structure/reagent_dispensers/plumbed, -/turf/open/floor/plating, -/area/station/maintenance/central/greater) "obW" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -39659,14 +41792,18 @@ "ocb" = ( /turf/open/floor/iron/white/small, /area/station/science/cubicle) -"ocs" = ( -/obj/structure/cable, +"ocv" = ( /obj/structure/disposalpipe/segment{ - dir = 10 + dir = 4 }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/landmark/navigate_destination/library, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central/aft) "ocx" = ( /obj/structure/sign/warning/vacuum/external, /turf/closed/wall, @@ -39679,16 +41816,11 @@ /obj/machinery/computer/records/security, /turf/open/floor/iron, /area/station/security/brig/entrance) -"ode" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/mapping_helpers/broken_floor, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/effect/landmark/navigate_destination/disposals, -/turf/open/floor/iron, -/area/station/maintenance/hallway/abandoned_command) +"ocC" = ( +/obj/structure/table/wood, +/obj/item/cigarette/cigar/cohiba, +/turf/open/floor/carpet, +/area/station/commons/dorms) "odh" = ( /obj/effect/landmark/atmospheric_sanity/ignore_area, /turf/open/floor/plating, @@ -39698,15 +41830,16 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /turf/open/floor/iron/grimy, /area/station/commons/vacant_room/office) -"odA" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +"odD" = ( /obj/effect/mapping_helpers/broken_floor, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/station/maintenance/central/greater) +/obj/structure/table/wood, +/obj/machinery/light/small/built/directional/north, +/obj/item/stack/sheet/iron/ten, +/obj/effect/turf_decal/siding/wideplating_new/terracotta{ + dir = 9 + }, +/turf/open/floor/wood/tile, +/area/station/maintenance/central/lesser) "odE" = ( /obj/effect/turf_decal/stripes/line{ dir = 6 @@ -39717,11 +41850,10 @@ /obj/effect/decal/cleanable/leaper_sludge, /turf/open/floor/plating/rust, /area/station/engineering/supermatter/room) -"odK" = ( -/obj/structure/cable, -/obj/structure/steam_vent, -/turf/open/floor/plating/rust, -/area/station/maintenance/fore/greater) +"odH" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/stone, +/area/station/service/chapel) "odP" = ( /obj/machinery/firealarm/directional/west, /turf/open/floor/iron/dark/small, @@ -39760,23 +41892,6 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /turf/open/floor/iron/white/small, /area/station/command/heads_quarters/cmo) -"oeF" = ( -/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, -/obj/machinery/door/airlock{ - name = "Abandoned Treatment Room" - }, -/obj/effect/mapping_helpers/airlock/abandoned, -/obj/structure/barricade/wooden/crude, -/turf/open/floor/plating, -/area/station/maintenance/central/greater) -"oeH" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/station/maintenance/central/lesser) "oeI" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -39788,10 +41903,24 @@ }, /turf/open/floor/plating, /area/station/maintenance/department/medical/central) +"oeS" = ( +/obj/effect/turf_decal/tile/blue/anticorner/contrasted{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/medical/paramedic) "oeW" = ( /obj/effect/spawner/structure/window, /turf/open/floor/plating, /area/station/medical/storage) +"oeZ" = ( +/obj/effect/turf_decal/siding/wood, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/chair/wood{ + dir = 8 + }, +/turf/open/floor/iron/grimy, +/area/station/service/bar) "off" = ( /obj/effect/turf_decal/siding/wood{ dir = 6 @@ -39799,26 +41928,18 @@ /obj/machinery/vending/coffee, /turf/open/floor/iron/grimy, /area/station/hallway/secondary/entry) -"ofk" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/cable, -/turf/open/floor/plating, -/area/station/maintenance/central/greater) -"ofo" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/duct, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/structure/extinguisher_cabinet/directional/west, -/turf/open/floor/iron, -/area/station/hallway/primary/central/fore) "ofu" = ( /obj/effect/turf_decal/stripes/white/end{ dir = 8 }, /turf/open/floor/iron/smooth_large, /area/station/maintenance/department/medical/central) +"ofU" = ( +/obj/structure/chair/wood{ + dir = 8 + }, +/turf/open/floor/iron/grimy, +/area/station/service/bar) "ofZ" = ( /turf/closed/mineral/random/stationside, /area/station/maintenance/port/lesser) @@ -39837,11 +41958,6 @@ }, /turf/open/floor/iron/white, /area/station/medical/medbay/central) -"ogu" = ( -/obj/effect/turf_decal/siding/white, -/obj/structure/railing, -/turf/open/floor/stone, -/area/station/service/theater) "ogv" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -39850,19 +41966,26 @@ }, /turf/open/floor/iron/white/small, /area/station/medical/storage) +"ogE" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/wood, +/area/station/service/abandoned_gambling_den) "ogF" = ( /obj/effect/mapping_helpers/broken_floor, /obj/structure/closet/firecloset, /obj/machinery/light/small/directional/west, /turf/open/floor/iron, /area/station/hallway/secondary/dock) -"ogK" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/mapping_helpers/broken_floor, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/station/maintenance/central/greater) +"ogG" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/obj/machinery/camera/autoname/directional/west, +/turf/open/floor/iron/smooth, +/area/station/command/gateway) "ogR" = ( /obj/effect/turf_decal/siding/green{ dir = 10 @@ -39893,10 +42016,6 @@ dir = 1 }, /area/station/hallway/secondary/entry) -"ogX" = ( -/obj/structure/disposalpipe/segment, -/turf/closed/wall, -/area/station/hallway/primary/port) "ohb" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -39931,6 +42050,11 @@ }, /turf/open/floor/plating, /area/station/maintenance/port/fore) +"ohr" = ( +/obj/structure/window/spawner/directional/south, +/obj/structure/flora/bush/jungle, +/turf/open/misc/sandy_dirt, +/area/station/commons/fitness/locker_room) "ohu" = ( /obj/structure/rack, /obj/item/storage/medkit/regular, @@ -39951,6 +42075,17 @@ /obj/structure/flora/bush/flowers_yw/style_random, /turf/open/floor/grass, /area/station/medical/treatment_center) +"ohy" = ( +/obj/effect/turf_decal/siding/white/corner{ + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/access/all/service/kitchen, +/obj/machinery/door/airlock{ + name = "Kitchen" + }, +/obj/machinery/door/firedoor, +/turf/open/floor/iron/kitchen/small, +/area/station/service/kitchen) "ohz" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/tile/yellow/opposingcorners, @@ -39970,14 +42105,13 @@ }, /turf/open/floor/iron/dark, /area/station/science/robotics/lab) -"ohF" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/mapping_helpers/broken_floor, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/station/maintenance/central/greater) +"ohK" = ( +/obj/structure/chair/stool/directional/north, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/turf/open/floor/stone, +/area/station/service/bar) "ohM" = ( /obj/structure/chair{ dir = 8 @@ -39985,41 +42119,12 @@ /obj/machinery/light/cold/directional/east, /turf/open/floor/iron/dark/small, /area/station/security/checkpoint/customs) -"ohO" = ( -/obj/structure/bed, -/obj/effect/spawner/random/bedsheet, -/obj/machinery/light/small/directional/east, -/turf/open/floor/carpet/red, -/area/station/commons/dorms) -"ohQ" = ( -/obj/structure/curtain/cloth, -/turf/open/floor/carpet/orange, -/area/station/commons/dorms) -"ohR" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/dark_red/half/contrasted{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/security/execution/transfer) -"ohT" = ( -/obj/machinery/button/door/directional/west{ - id = "private_b"; - name = "Privacy Bolts"; - normaldoorcontrol = 1; - pixel_x = 7; - pixel_y = 24; - specialfunctions = 4 - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/commons/dorms) +"ohN" = ( +/obj/item/kirbyplants/random, +/obj/item/radio/intercom/directional/north, +/obj/machinery/firealarm/directional/west, +/turf/open/floor/iron/white, +/area/station/science/cytology) "oig" = ( /obj/effect/spawner/structure/window/reinforced, /obj/effect/turf_decal/stripes/corner{ @@ -40075,14 +42180,6 @@ /obj/machinery/light_switch/directional/south, /turf/open/floor/plating, /area/station/cargo/office) -"oiO" = ( -/obj/structure/chair/comfy/beige{ - dir = 8 - }, -/obj/effect/mapping_helpers/broken_floor, -/obj/item/radio/intercom/directional/east, -/turf/open/floor/iron, -/area/station/commons/dorms) "oiP" = ( /obj/effect/turf_decal/tile/yellow/half/contrasted{ dir = 1 @@ -40107,11 +42204,6 @@ /obj/structure/alien/weeds, /turf/open/floor/wood, /area/station/maintenance/starboard/greater) -"ojw" = ( -/obj/item/kirbyplants/random, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/iron/white, -/area/station/commons/dorms) "ojz" = ( /obj/structure/railing{ dir = 1 @@ -40127,6 +42219,13 @@ }, /turf/open/floor/wood, /area/station/engineering/main) +"ojA" = ( +/obj/structure/flora/bush/jungle/a/style_random, +/obj/effect/turf_decal/weather/dirt{ + dir = 1 + }, +/turf/open/floor/grass, +/area/station/service/chapel) "ojD" = ( /obj/structure/cable, /obj/machinery/light/floor, @@ -40144,13 +42243,14 @@ /obj/structure/cable, /turf/open/space/basic, /area/space/nearstation) -"ojU" = ( -/obj/structure/rack, -/obj/machinery/light/small/directional/south, -/obj/effect/spawner/random/maintenance/two, +"ojO" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, /obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/white, -/area/station/commons/dorms) +/turf/open/floor/plating, +/area/station/maintenance/central/greater) "ojW" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -40181,20 +42281,15 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/dark, /area/station/engineering/atmos) +"okk" = ( +/obj/structure/table, +/obj/item/screwdriver, +/turf/open/floor/iron, +/area/station/construction/mining/aux_base) "okl" = ( /obj/machinery/status_display/ai, /turf/closed/wall, /area/station/hallway/secondary/entry) -"okp" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/siding/wood, -/obj/effect/turf_decal/siding/wood{ - dir = 1 - }, -/obj/machinery/door/firedoor, -/turf/open/floor/iron/textured_half, -/area/station/service/library) "okt" = ( /obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden{ dir = 4 @@ -40207,21 +42302,11 @@ /obj/structure/cable, /turf/open/floor/catwalk_floor, /area/station/engineering/atmos) -"okz" = ( -/obj/structure/table, -/obj/effect/spawner/random/maintenance, -/obj/structure/extinguisher_cabinet/directional/south, -/turf/open/floor/iron/white, -/area/station/commons/dorms) "okB" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/white/line, /turf/open/floor/engine, /area/station/science/xenobiology) -"okN" = ( -/obj/structure/table, -/turf/open/floor/iron/white, -/area/station/commons/dorms) "okW" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -40241,6 +42326,12 @@ }, /turf/open/floor/catwalk_floor/iron_dark, /area/station/science/ordnance) +"okZ" = ( +/obj/structure/closet/secure_closet/personal, +/obj/item/radio/intercom/directional/west, +/obj/machinery/newscaster/directional/north, +/turf/open/floor/iron/herringbone, +/area/station/commons/dorms) "olj" = ( /obj/effect/turf_decal/sand/plating, /obj/structure/cable, @@ -40271,28 +42362,29 @@ }, /turf/open/floor/iron/checker, /area/station/security/breakroom) -"omp" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +"olV" = ( /obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/showroomfloor, -/area/station/commons/toilet/auxiliary) -"omA" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/light/small/dim/directional/west, +/turf/open/floor/iron, +/area/station/maintenance/port/aft) +"omb" = ( +/obj/effect/turf_decal/siding/wood, +/obj/structure/chair/wood{ + dir = 8 }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ +/turf/open/floor/iron/grimy, +/area/station/service/bar) +"omk" = ( +/obj/effect/turf_decal/siding/wood{ dir = 1 }, -/obj/effect/landmark/start/hangover, -/turf/open/floor/wood/parquet, -/area/station/service/library) -"omF" = ( -/obj/item/kirbyplants/random, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/camera/autoname/directional/east, -/turf/open/floor/iron, -/area/station/science/lower) +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/stone, +/area/station/service/bar) "omW" = ( /obj/structure/reagent_dispensers/watertank, /turf/open/floor/iron/white/corner, @@ -40307,20 +42399,20 @@ /obj/structure/lattice, /turf/open/space/basic, /area/space/nearstation) -"ono" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 +"onc" = ( +/obj/machinery/door/morgue{ + name = "Private Study"; + req_access = list("library") }, -/turf/open/floor/iron/cafeteria, -/area/station/service/kitchen) -"ons" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/stripes/corner{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/maintenance/central/greater) +"ong" = ( +/obj/item/radio/intercom/directional/south, +/obj/effect/turf_decal/tile/neutral, /turf/open/floor/iron, -/area/station/maintenance/hallway/abandoned_command) +/area/station/hallway/primary/central/aft) "onv" = ( /obj/effect/turf_decal/tile/brown/opposingcorners, /obj/machinery/atmospherics/pipe/smart/simple/orange/hidden{ @@ -40363,6 +42455,11 @@ /obj/effect/mapping_helpers/airlock/access/all/medical/general, /turf/open/floor/iron/white/small, /area/station/medical/cryo) +"onQ" = ( +/obj/effect/turf_decal/tile/brown/opposingcorners, +/obj/machinery/holopad, +/turf/open/floor/iron, +/area/station/cargo/miningoffice) "onR" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -40376,7 +42473,6 @@ pixel_x = -3; pixel_y = 6 }, -/obj/structure/cable, /turf/open/floor/iron/white/small, /area/station/service/janitor) "onX" = ( @@ -40406,19 +42502,17 @@ }, /turf/open/floor/plating, /area/station/maintenance/department/science/xenobiology) -"oop" = ( -/mob/living/basic/mouse/brown/tom, -/obj/effect/decal/cleanable/dirt, -/obj/item/radio/intercom/prison/directional/south, -/turf/open/floor/plating, -/area/station/security/prison/safe) -"oow" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 +"ooC" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/door/airlock{ + name = "Maintenance" }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/commons) +/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, +/obj/effect/mapping_helpers/airlock/unres, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/central/greater) "ooK" = ( /obj/effect/turf_decal/tile/blue{ dir = 1 @@ -40432,17 +42526,19 @@ }, /turf/open/floor/iron/white, /area/station/medical/treatment_center) -"ooU" = ( -/obj/structure/disposalpipe/sorting/mail/flip{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/mapping_helpers/mail_sorting/service/law_office, -/obj/effect/turf_decal/tile/neutral{ +"ooR" = ( +/mob/living/basic/goat/pete, +/obj/effect/turf_decal/weather/snow, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 4 }, -/turf/open/floor/iron, -/area/station/hallway/secondary/recreation) +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/obj/structure/cable, +/obj/effect/turf_decal/weather/snow/corner, +/turf/open/floor/iron/freezer, +/area/station/service/kitchen/coldroom) "opc" = ( /obj/structure/railing{ dir = 1 @@ -40461,19 +42557,6 @@ /obj/machinery/airalarm/directional/north, /turf/open/floor/iron, /area/station/engineering/atmospherics_engine) -"opq" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/line, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark/side{ - dir = 1 - }, -/area/station/science/xenobiology) "opv" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -40505,13 +42588,31 @@ }, /turf/open/space/basic, /area/space/nearstation) -"oqf" = ( -/obj/structure/cable, +"opN" = ( +/obj/effect/turf_decal/tile/neutral, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/commons/fitness/locker_room) +"opV" = ( +/obj/effect/turf_decal/siding/wood, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/obj/effect/landmark/start/bartender, +/turf/open/floor/stone, +/area/station/service/bar) +"opW" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/power/apc/auto_name/directional/north, -/turf/open/floor/iron/showroomfloor, -/area/station/commons/toilet/restrooms) +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/corner, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/station/science/xenobiology) "oqg" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -40522,47 +42623,34 @@ dir = 1 }, /area/station/hallway/secondary/entry) -"oqo" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/light/small/directional/south, -/obj/effect/mapping_helpers/broken_floor, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/duct, -/turf/open/floor/iron/showroomfloor, -/area/station/commons/toilet/restrooms) -"oqE" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 1 - }, -/obj/structure/flora/bush/flowers_yw/style_random, -/turf/open/floor/grass, -/area/station/service/chapel) -"oqI" = ( -/obj/structure/cable, -/obj/machinery/door/airlock{ - name = "Maintenance" +"oqi" = ( +/obj/machinery/atmospherics/components/trinary/filter{ + dir = 4 }, -/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, -/obj/machinery/duct, -/turf/open/floor/plating, -/area/station/maintenance/fore/greater) +/turf/open/floor/iron/dark, +/area/station/science/ordnance/testlab) "oqK" = ( /obj/effect/decal/cleanable/dirt, /obj/item/kirbyplants/random, /turf/open/floor/iron, /area/station/hallway/secondary/dock) "oqT" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/mapping_helpers/broken_floor, -/obj/effect/decal/cleanable/dirt, +/obj/machinery/camera/autoname/directional/north, +/obj/machinery/firealarm/directional/north, /obj/effect/turf_decal/tile/neutral{ - dir = 4 + dir = 1 }, /turf/open/floor/iron, -/area/station/hallway/secondary/recreation) +/area/station/hallway/primary/central/aft) +"oqU" = ( +/obj/effect/turf_decal/siding/wideplating/dark{ + dir = 9 + }, +/obj/structure/sink/directional/east, +/obj/machinery/light/small/directional/north, +/obj/structure/sign/poster/official/random/directional/north, +/turf/open/floor/iron/small, +/area/station/service/barber) "ora" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -40577,14 +42665,14 @@ /obj/structure/cable, /turf/open/floor/iron/smooth, /area/station/maintenance/solars/starboard/fore) -"orH" = ( +"orW" = ( /obj/structure/cable, -/obj/effect/turf_decal/tile/neutral/full, -/obj/structure/reagent_dispensers/beerkeg, -/obj/effect/turf_decal/bot_red/left, -/obj/structure/sign/clock/directional/north, -/turf/open/floor/iron/smooth_large, -/area/station/service/bar) +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/science/xenobiology) "orY" = ( /obj/structure/lattice/catwalk, /obj/structure/railing{ @@ -40602,37 +42690,24 @@ }, /turf/open/space/basic, /area/space/nearstation) -"osf" = ( +"ose" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, /obj/structure/cable, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/iron/smooth, -/area/station/maintenance/solars/starboard/fore) -"osi" = ( -/obj/effect/mapping_helpers/broken_floor, -/obj/machinery/light/small/broken/directional/east, -/turf/open/floor/plating, -/area/station/maintenance/central/greater) +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central/fore) "osj" = ( /obj/structure/cable, /obj/machinery/power/terminal, /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/smooth, /area/station/maintenance/solars/starboard/fore) -"osq" = ( -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/iron/smooth, -/area/station/maintenance/solars/starboard/fore) -"osr" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/structure/broken_flooring/plating/directional/south, -/obj/structure/sign/departments/restroom/directional/north, -/turf/open/floor/iron, -/area/station/hallway/secondary/recreation) "oss" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -40663,11 +42738,10 @@ /obj/structure/cable, /turf/open/floor/iron/small, /area/station/medical/morgue) -"osC" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating, -/area/station/maintenance/port/aft) +"osP" = ( +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/station/maintenance/hallway/abandoned_command) "osT" = ( /obj/structure/railing, /obj/structure/disposalpipe/segment{ @@ -40683,21 +42757,14 @@ /obj/structure/broken_flooring/corner/directional/south, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) -"otf" = ( +"otB" = ( /obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 +/obj/effect/turf_decal/tile/purple/opposingcorners, +/obj/effect/turf_decal/siding/green/corner{ + dir = 1 }, -/turf/open/floor/iron, -/area/station/hallway/secondary/recreation) -"ott" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/spawner/random/trash, -/turf/open/floor/plating, -/area/station/maintenance/fore/greater) +/turf/open/floor/iron/cafeteria, +/area/station/science/circuits) "otG" = ( /obj/structure/filingcabinet/filingcabinet, /obj/machinery/status_display/supply{ @@ -40705,36 +42772,18 @@ }, /turf/open/floor/iron/dark, /area/station/cargo/office) -"otO" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ +"otJ" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/trimline/neutral/line{ dir = 4 }, -/obj/machinery/light/small/directional/north, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 +/obj/effect/turf_decal/trimline/neutral/line{ + dir = 8 }, -/turf/open/floor/iron, -/area/station/hallway/secondary/recreation) -"otP" = ( /obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 9 - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, -/area/station/hallway/secondary/recreation) -"otQ" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/structure/broken_flooring/pile/directional/east, -/turf/open/floor/plating, -/area/station/hallway/secondary/recreation) +/area/station/hallway/primary/central/fore) "otX" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -40761,27 +42810,30 @@ }, /turf/open/space/basic, /area/space/nearstation) -"ouf" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/door/firedoor, -/obj/effect/turf_decal/stripes/red/line, -/obj/effect/turf_decal/stripes/red/line{ - dir = 1 - }, -/turf/open/floor/iron/small, -/area/station/hallway/primary/starboard) "ouj" = ( /turf/closed/wall, /area/station/engineering/engine_smes) -"oup" = ( -/obj/structure/chair/sofa/right/maroon{ +"oul" = ( +/obj/effect/turf_decal/weather/dirt, +/obj/structure/flora/bush/flowers_yw/style_2, +/obj/structure/flora/tree/jungle/style_5, +/turf/open/floor/grass, +/area/station/service/chapel) +"oun" = ( +/obj/effect/turf_decal/siding/thinplating_new/light{ + dir = 10 + }, +/turf/open/floor/iron/white/small, +/area/station/service/hydroponics) +"ouz" = ( +/turf/open/floor/iron/dark/small, +/area/station/command/heads_quarters/rd) +"ouH" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 1 }, -/obj/machinery/firealarm/directional/south, -/obj/effect/landmark/start/hangover, -/turf/open/floor/iron/showroomfloor, -/area/station/service/cafeteria) +/turf/open/floor/iron, +/area/station/maintenance/department/medical/central) "ouL" = ( /obj/item/clothing/head/cone{ pixel_x = 7 @@ -40802,11 +42854,17 @@ dir = 1 }, /area/station/cargo/storage) -"ouP" = ( -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/smooth, -/area/station/command/gateway) +"ouO" = ( +/obj/effect/turf_decal/weather/snow, +/obj/structure/closet/secure_closet/freezer/fridge, +/obj/effect/turf_decal/weather/snow/corner, +/obj/item/food/meat/bacon, +/obj/item/food/meat/bacon, +/obj/item/food/meat/slab/monkey, +/obj/item/food/meat/slab/monkey, +/obj/item/food/meat/slab/monkey, +/turf/open/floor/iron/freezer, +/area/station/service/kitchen/coldroom) "ouR" = ( /obj/effect/turf_decal/delivery, /obj/effect/turf_decal/stripes/line{ @@ -40820,21 +42878,15 @@ /obj/machinery/airalarm/directional/west, /turf/open/floor/iron/smooth, /area/station/cargo/warehouse) -"ouY" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/turf/open/floor/iron/white, -/area/station/science/cytology) +"ove" = ( +/obj/effect/spawner/structure/window, +/obj/machinery/door/firedoor/border_only, +/turf/open/floor/plating, +/area/station/service/bar) "ovf" = ( /obj/structure/lattice/catwalk, /turf/open/space/basic, /area/station/solars/port) -"ovg" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/iron/white, -/area/station/science/cytology) "ovj" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -40845,11 +42897,6 @@ /obj/machinery/door/firedoor, /turf/open/floor/catwalk_floor/flat_white, /area/station/science/cytology) -"ovk" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment, -/turf/open/floor/plating, -/area/station/maintenance/central/lesser) "ovt" = ( /obj/machinery/door/airlock/maintenance{ name = "Maintenance" @@ -40861,10 +42908,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/department/engine/atmos) -"ovA" = ( -/obj/structure/closet/emcloset, -/turf/open/floor/iron, -/area/station/maintenance/aft) "ovB" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/alien/weeds, @@ -40919,6 +42962,13 @@ }, /turf/open/floor/iron, /area/station/science/cytology) +"owH" = ( +/obj/machinery/atmospherics/components/binary/valve/digital{ + dir = 4 + }, +/obj/effect/landmark/event_spawn, +/turf/open/floor/iron/white/small, +/area/station/science/ordnance/storage) "owJ" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -40968,6 +43018,32 @@ }, /turf/open/floor/wood, /area/station/engineering/break_room) +"oxg" = ( +/obj/machinery/atmospherics/pipe/smart/simple/dark/visible{ + dir = 4 + }, +/turf/open/floor/iron/white/small, +/area/station/science/ordnance/storage) +"oxm" = ( +/obj/effect/turf_decal/bot, +/obj/machinery/door/window/right/directional/south{ + name = "Command Deliveries"; + req_access = list("command") + }, +/turf/open/floor/wood/tile, +/area/station/command/corporate_showroom) +"oxn" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/wood/parquet, +/area/station/service/library) "oxw" = ( /obj/structure/disposalpipe/segment, /obj/effect/turf_decal/stripes/white/line{ @@ -40975,34 +43051,47 @@ }, /turf/open/floor/iron/dark, /area/station/cargo/storage) +"oxy" = ( +/obj/effect/spawner/random/entertainment/arcade{ + dir = 1 + }, +/obj/effect/turf_decal/siding/thinplating, +/obj/structure/sign/poster/official/random/directional/south, +/turf/open/floor/eighties/red, +/area/station/hallway/primary/central/fore) "oxK" = ( /obj/effect/turf_decal/stripes/white/line{ dir = 8 }, /turf/open/floor/engine, /area/station/science/cytology) -"oxS" = ( -/obj/structure/sign/poster/official/random/directional/north, -/obj/effect/turf_decal/tile/neutral/opposingcorners, -/turf/open/floor/iron, -/area/station/hallway/secondary/spacebridge) -"oyA" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 4 +"oyn" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/door/airlock/public/glass{ + name = "Old Command Hallway" }, -/obj/effect/mapping_helpers/broken_floor, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/smooth, -/area/station/command/gateway) -"oyG" = ( -/obj/structure/disposalpipe/segment{ - dir = 5 +/turf/open/floor/iron/textured_half, +/area/station/maintenance/hallway/abandoned_command) +"oyp" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/machinery/firealarm/directional/west, +/turf/open/floor/iron, +/area/station/hallway/primary/central/fore) +"oyq" = ( +/obj/machinery/light/warm/directional/south, +/turf/open/floor/iron, +/area/station/commons/fitness/locker_room) +"oyz" = ( +/obj/structure/flora/grass/jungle/b/style_3, +/obj/effect/turf_decal/weather/dirt{ + dir = 1 }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/mapping_helpers/broken_floor, /obj/structure/cable, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) +/turf/open/floor/grass, +/area/station/service/chapel) "oyQ" = ( /turf/closed/wall, /area/station/science/auxlab/firing_range) @@ -41026,13 +43115,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/grimy, /area/station/command/heads_quarters/qm) -"ozd" = ( -/obj/effect/landmark/event_spawn, -/obj/effect/turf_decal/plaque{ - icon_state = "L8" - }, -/turf/open/floor/glass, -/area/station/hallway/secondary/spacebridge) "ozn" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment, @@ -41040,10 +43122,13 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/port/greater) -"ozo" = ( -/obj/structure/window/spawner/directional/south, -/turf/open/floor/grass, -/area/station/service/hydroponics) +"ozs" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/spawner/random/trash/janitor_supplies, +/turf/open/floor/plating, +/area/station/construction/mining/aux_base) "ozt" = ( /obj/structure/reagent_dispensers/plumbed, /turf/open/floor/plating, @@ -41079,22 +43164,6 @@ dir = 8 }, /area/station/maintenance/starboard/greater) -"oAc" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/station/tcommsat/server) -"oAk" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/neutral, -/turf/open/floor/iron, -/area/station/hallway/primary/central/fore) "oAn" = ( /obj/effect/turf_decal/siding/brown{ dir = 10 @@ -41102,11 +43171,6 @@ /obj/structure/steam_vent, /turf/open/floor/iron/smooth, /area/station/maintenance/port/aft) -"oAp" = ( -/obj/structure/chair/sofa/right/maroon, -/obj/effect/landmark/start/assistant, -/turf/open/floor/iron/showroomfloor, -/area/station/service/cafeteria) "oAr" = ( /obj/effect/turf_decal/tile/dark_red/opposingcorners, /obj/structure/closet/bombcloset/security, @@ -41118,37 +43182,6 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/iron, /area/station/maintenance/starboard/aft) -"oAC" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/iron, -/area/station/maintenance/hallway/abandoned_command) -"oAF" = ( -/obj/effect/spawner/random/vending/colavend, -/obj/effect/turf_decal/delivery, -/turf/open/floor/iron, -/area/station/hallway/primary/central/fore) -"oAQ" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 9 - }, -/obj/effect/mapping_helpers/broken_floor, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/station/maintenance/central/greater) -"oAV" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/mapping_helpers/broken_floor, -/obj/machinery/light/small/directional/east, -/obj/effect/spawner/random/maintenance, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/station/maintenance/hallway/abandoned_command) "oAY" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/security/glass{ @@ -41169,11 +43202,6 @@ /obj/machinery/atmospherics/pipe/smart/simple/cyan/visible/layer4, /turf/open/space/basic, /area/space/nearstation) -"oBm" = ( -/obj/structure/chair/sofa/bench/left, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron, -/area/station/hallway/primary/port) "oBv" = ( /obj/machinery/door/airlock/external{ name = "Labor Camp Shuttle Airlock"; @@ -41198,40 +43226,47 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central/fore) -"oBB" = ( -/obj/machinery/firealarm/directional/south, -/obj/effect/mapping_helpers/broken_floor, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 8 +"oBT" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/access/all/security/armory, +/obj/machinery/door/airlock/security{ + name = "Warden's Office" }, -/turf/open/floor/iron, -/area/station/security/prison/work) -"oBJ" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/effect/turf_decal/tile/purple/opposingcorners, -/obj/effect/turf_decal/siding/green{ - dir = 4 +/turf/open/floor/iron/textured_half{ + dir = 8 }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/cafeteria, -/area/station/science/circuits) -"oBV" = ( -/obj/structure/cable, -/obj/machinery/light/small/directional/south, -/turf/open/floor/catwalk_floor/iron_dark, -/area/station/service/library) -"oCc" = ( +/area/station/security/warden) +"oBX" = ( /obj/structure/cable, -/turf/open/floor/catwalk_floor/iron_dark, -/area/station/service/library) +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/siding/purple{ + dir = 1 + }, +/obj/effect/turf_decal/siding/purple/corner{ + dir = 8 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/science/genetics) "oCg" = ( /obj/structure/rack, /obj/effect/spawner/random/techstorage/medical_all, /turf/open/floor/iron, /area/station/engineering/storage/tech) +"oCi" = ( +/obj/effect/turf_decal/siding/wood, +/obj/machinery/light/small/directional/east, +/obj/structure/disposalpipe/segment, +/turf/open/floor/wood/parquet, +/area/station/service/library) "oCq" = ( /obj/structure/cable, /obj/effect/spawner/structure/window/reinforced, @@ -41243,6 +43278,10 @@ /obj/machinery/camera/autoname/directional/east, /turf/open/floor/iron, /area/station/hallway/primary/central/fore) +"oCB" = ( +/obj/machinery/atmospherics/components/binary/tank_compressor, +/turf/open/floor/iron/dark, +/area/station/science/ordnance/testlab) "oCE" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -41261,34 +43300,23 @@ /obj/structure/broken_flooring/pile/directional/east, /turf/open/floor/iron, /area/station/maintenance/starboard/aft) -"oCP" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/airalarm/directional/south, -/obj/machinery/light/floor, -/turf/open/floor/iron/smooth, -/area/station/hallway/secondary/command) +"oCV" = ( +/obj/effect/turf_decal/trimline/neutral/line, +/obj/effect/turf_decal/trimline/neutral/line{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/station/hallway/primary/central/aft) "oDa" = ( /obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/visible{ dir = 1 }, /turf/open/floor/iron/dark, /area/station/engineering/atmos) -"oDc" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/neutral/half/contrasted, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark/side, -/area/station/science/xenobiology) -"oDs" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/public/glass{ - name = "Fore Primary Hallway" - }, -/turf/open/floor/iron/textured_half, -/area/station/hallway/primary/central/fore) "oDB" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -41302,29 +43330,17 @@ }, /turf/open/space/basic, /area/space/nearstation) -"oDK" = ( -/obj/structure/cable, -/obj/machinery/door/airlock{ - name = "Hydroponics Maintenance" +"oDX" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 }, -/obj/effect/mapping_helpers/airlock/access/any/service/hydroponics, -/turf/open/floor/plating, -/area/station/maintenance/port/greater) -"oDO" = ( -/obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/commons/fitness/recreation/entertainment) -"oDS" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/firealarm/directional/south, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 +/obj/structure/chair/wood{ + dir = 4 }, -/turf/open/floor/iron/white/small, -/area/station/science/server) +/obj/effect/landmark/start/assistant, +/turf/open/floor/iron/grimy, +/area/station/service/bar) "oDY" = ( /obj/effect/turf_decal/stripes/corner, /obj/effect/turf_decal/stripes/corner{ @@ -41346,42 +43362,36 @@ }, /turf/open/floor/plating, /area/station/maintenance/department/engine) -"oEi" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/decal/cleanable/dirt, -/obj/effect/landmark/start/assistant, -/turf/open/floor/iron, -/area/station/commons/dorms) -"oEr" = ( +"oEk" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/status_display/ai/directional/south, /obj/effect/turf_decal/tile/neutral{ - dir = 8 + dir = 4 }, +/obj/machinery/camera/directional/north, +/obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, -/area/station/hallway/primary/starboard) -"oEt" = ( -/obj/structure/railing{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/simple/cyan/hidden{ +/area/station/hallway/secondary/recreation) +"oEn" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ dir = 4 }, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/requests_console/directional/north{ - department = "Chief Engineer's Desk"; - name = "Chief Engineer's Requests Console"; - pixel_y = -32 - }, -/obj/effect/mapping_helpers/requests_console/announcement, -/obj/effect/mapping_helpers/requests_console/information, -/turf/open/floor/iron/stairs/old{ - dir = 4 +/turf/open/floor/plating, +/area/station/maintenance/port/greater) +"oEz" = ( +/obj/machinery/camera/autoname/directional/north, +/obj/effect/turf_decal/siding/thinplating_new/light{ + dir = 1 }, -/area/station/command/heads_quarters/ce) +/obj/machinery/firealarm/directional/north, +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk, +/turf/open/floor/iron/white/small, +/area/station/service/hydroponics) "oEB" = ( /obj/structure/window/reinforced/spawner/directional/east, /obj/effect/turf_decal/box/red/corners{ @@ -41398,18 +43408,6 @@ }, /turf/open/floor/iron/white, /area/station/medical/medbay/central) -"oEI" = ( -/obj/item/kirbyplants/random, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/iron, -/area/station/commons/dorms) -"oEN" = ( -/obj/structure/disposalpipe/segment{ - dir = 9 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/station/maintenance/central/greater) "oFc" = ( /obj/effect/spawner/random/trash, /obj/machinery/light/small/directional/west, @@ -41445,20 +43443,25 @@ "oFu" = ( /turf/closed/wall, /area/station/security/office) -"oFG" = ( -/turf/closed/wall, -/area/station/service/hydroponics/garden) +"oFy" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/door/airlock/public/glass{ + name = "Cargo Botique" + }, +/obj/machinery/door/firedoor, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/textured_half{ + dir = 1 + }, +/area/station/hallway/primary/central/fore) "oFI" = ( /obj/machinery/airalarm/directional/north, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /turf/open/floor/iron, /area/station/engineering/storage/tech) -"oFT" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/cable, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating, -/area/station/maintenance/central/lesser) "oGk" = ( /turf/open/floor/circuit, /area/station/tcommsat/server) @@ -41473,35 +43476,30 @@ /obj/machinery/door/firedoor, /turf/open/floor/iron/smooth_half, /area/station/cargo/storage) -"oGm" = ( -/obj/item/kirbyplants/random, -/turf/open/floor/iron, -/area/station/commons/dorms) "oGn" = ( /obj/effect/spawner/structure/window/reinforced/plasma, /obj/machinery/atmospherics/pipe/layer_manifold/visible, /turf/open/floor/plating, /area/station/engineering/atmos/space_catwalk) -"oGq" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/white/small, -/area/station/service/hydroponics/garden) -"oGu" = ( -/obj/structure/disposalpipe/segment, -/obj/effect/mapping_helpers/broken_floor, -/obj/item/radio/intercom/directional/west, -/turf/open/floor/iron, -/area/station/maintenance/hallway/abandoned_command) -"oGv" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/commons/dorms) -"oGJ" = ( +"oGo" = ( +/obj/structure/table/glass, +/obj/item/stock_parts/power_store/cell/high{ + pixel_x = 11; + pixel_y = 6 + }, +/obj/item/folder/blue{ + pixel_x = -3; + pixel_y = 2 + }, +/turf/open/floor/carpet/executive, +/area/station/command/meeting_room) +"oGt" = ( /obj/effect/turf_decal/trimline/neutral/line{ dir = 1 }, /obj/effect/turf_decal/trimline/neutral/line, +/obj/effect/landmark/start/hangover, +/obj/structure/cable, /turf/open/floor/iron, /area/station/hallway/primary/central/fore) "oGL" = ( @@ -41531,6 +43529,19 @@ /obj/structure/flora/rock/pile/style_2, /turf/open/misc/sandy_dirt, /area/station/science/research) +"oHk" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/stairs, +/area/station/maintenance/port/greater) +"oHw" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/smooth, +/area/station/maintenance/solars/port/aft) "oHy" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -41551,6 +43562,24 @@ dir = 1 }, /area/station/security/execution/transfer) +"oHJ" = ( +/obj/structure/table/greyscale, +/obj/item/pen{ + pixel_x = 13; + pixel_y = 4 + }, +/obj/machinery/light/small/directional/south, +/obj/item/flatpack{ + board = /obj/item/circuitboard/machine/flatpacker; + pixel_x = -6; + pixel_y = 5 + }, +/obj/item/multitool{ + pixel_x = 7; + pixel_y = -2 + }, +/turf/open/floor/iron/grimy, +/area/station/engineering/main) "oHO" = ( /obj/structure/chair/plastic{ dir = 1 @@ -41566,10 +43595,19 @@ /obj/structure/cable, /turf/open/floor/iron/small, /area/station/maintenance/department/electrical) -"oIk" = ( -/obj/structure/table, -/turf/open/floor/iron, -/area/station/commons) +"oIx" = ( +/obj/structure/closet/firecloset, +/turf/open/floor/iron/showroomfloor, +/area/station/commons/toilet/auxiliary) +"oIE" = ( +/obj/effect/turf_decal/stripes/end{ + dir = 1 + }, +/obj/structure/closet/crate/wooden, +/obj/effect/spawner/random/maintenance, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/plating, +/area/station/maintenance/central/lesser) "oIF" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -41585,6 +43623,12 @@ /obj/structure/frame/machine, /turf/open/floor/tram, /area/station/maintenance/department/medical/central) +"oIL" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 8 + }, +/turf/open/floor/stone, +/area/station/service/chapel) "oIP" = ( /obj/effect/turf_decal/siding/wood{ dir = 8 @@ -41600,32 +43644,24 @@ /obj/effect/spawner/structure/window, /turf/open/floor/plating, /area/station/commons/fitness/recreation) +"oIS" = ( +/obj/machinery/light/small/directional/south, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/status_display/evac/directional/south, +/obj/effect/turf_decal/tile/neutral, +/turf/open/floor/iron, +/area/station/hallway/primary/central/aft) "oIT" = ( /obj/structure/frame/machine, /obj/item/circuitboard/machine/biogenerator, /turf/open/floor/iron, /area/station/maintenance/starboard/aft) -"oJi" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/neutral, -/obj/machinery/navbeacon{ - codes_txt = "patrol;next_patrol=12.0-RecreationHall-DormatoryCommons"; - location = "11.0-StarboardHall-RecreationHall" - }, -/turf/open/floor/iron, -/area/station/hallway/secondary/recreation) -"oJl" = ( -/obj/machinery/door/airlock/engineering{ - name = "Main Engineering" - }, +"oIY" = ( +/obj/effect/turf_decal/delivery, /obj/machinery/door/firedoor, -/obj/effect/mapping_helpers/airlock/access/any/engineering/construction, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/disposalpipe/segment, -/turf/open/floor/catwalk_floor, -/area/station/engineering/break_room) +/obj/machinery/smartfridge, +/turf/open/floor/plating, +/area/station/service/hydroponics) "oJn" = ( /obj/structure/cable, /obj/structure/disposalpipe/sorting/mail{ @@ -41646,6 +43682,21 @@ /obj/machinery/firealarm/directional/east, /turf/open/floor/circuit, /area/station/tcommsat/server) +"oJx" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/structure/rack, +/obj/machinery/door/poddoor/shutters{ + dir = 4; + id = "vaco"; + name = "Comissary Shutters" + }, +/turf/open/floor/plating, +/area/station/maintenance/central/lesser) "oJz" = ( /obj/structure/bodycontainer/morgue{ dir = 2 @@ -41660,6 +43711,15 @@ /obj/structure/chair/sofa/bench/tram/solo, /turf/open/floor/tram, /area/station/maintenance/port/aft) +"oJB" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/dark_red/opposingcorners, +/obj/machinery/holopad, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/station/security/processing) "oJE" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -41670,6 +43730,16 @@ /obj/effect/mapping_helpers/airlock/access/all/security/general, /turf/open/floor/iron/dark/textured_half, /area/station/security/execution/education) +"oJL" = ( +/obj/effect/turf_decal/stripes/red/line{ + dir = 8 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/obj/machinery/light/small/directional/west, +/turf/open/floor/iron/smooth_large, +/area/station/science/auxlab/firing_range) "oJP" = ( /obj/structure/cable, /obj/machinery/telecomms/broadcaster/preset_left, @@ -41682,19 +43752,6 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron/dark, /area/station/cargo/office) -"oJW" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/mapping_helpers/broken_floor, -/obj/effect/turf_decal/tile/neutral, -/turf/open/floor/iron, -/area/station/hallway/secondary/recreation) -"oJZ" = ( -/obj/structure/window/spawner/directional/west, -/obj/structure/flora/bush/jungle/a/style_random, -/obj/structure/flora/bush/flowers_pp/style_random, -/turf/open/misc/sandy_dirt, -/area/station/commons) "oKb" = ( /obj/effect/turf_decal/tile/yellow/half/contrasted{ dir = 8 @@ -41702,13 +43759,11 @@ /obj/machinery/light_switch/directional/west, /turf/open/floor/iron, /area/station/medical/chemistry) -"oKp" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/neutral, -/turf/open/floor/iron, -/area/station/hallway/secondary/recreation) +"oKn" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/light/floor, +/turf/open/floor/iron/dark, +/area/station/science/server) "oKr" = ( /obj/structure/toilet/greyscale{ dir = 4 @@ -41716,12 +43771,6 @@ /obj/effect/landmark/start/prisoner, /turf/open/floor/iron/dark, /area/station/security/prison/safe) -"oKy" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/tile/dark_red/opposingcorners, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/security/tram) "oKz" = ( /obj/structure/cable, /obj/machinery/door/airlock/security{ @@ -41737,100 +43786,44 @@ }, /turf/open/floor/iron/dark, /area/station/security/prison/safe) -"oKU" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/neutral, -/obj/machinery/power/apc/auto_name/directional/south, -/turf/open/floor/iron, -/area/station/hallway/secondary/recreation) "oLg" = ( /obj/effect/spawner/random/engineering/atmospherics_portable, /turf/open/floor/plating, /area/station/maintenance/aft) -"oLh" = ( +"oLo" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/mapping_helpers/broken_floor, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/neutral, -/turf/open/floor/iron, -/area/station/hallway/secondary/recreation) -"oLt" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 +/obj/effect/turf_decal/siding/wideplating/dark{ + dir = 1 }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/spawner/random/trash, +/obj/effect/turf_decal/tile/dark_red/half/contrasted, +/obj/structure/disposalpipe/segment, /turf/open/floor/iron, -/area/station/maintenance/hallway/abandoned_recreation) -"oLG" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/turf_decal/tile/purple/opposingcorners, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/turf/open/floor/iron/cafeteria, -/area/station/science/circuits) -"oLM" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/door/airlock{ - name = "Maintenance" +/area/station/security/brig/entrance) +"oLr" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 9 }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/mapping_helpers/airlock/access/any/science/maintenance, -/obj/effect/mapping_helpers/airlock/unres{ - dir = 4 +/obj/effect/mapping_helpers/broken_floor, +/obj/machinery/light/small/directional/north, +/turf/open/floor/wood, +/area/station/service/abandoned_gambling_den) +"oLD" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 }, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) +/turf/open/floor/iron/white/small, +/area/station/commons/toilet/restrooms) "oLN" = ( /obj/effect/turf_decal/stripes/line, /obj/structure/tank_dispenser, /obj/machinery/airalarm/directional/north, /turf/open/floor/plating, /area/station/engineering/atmos/office) -"oLV" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) -"oLX" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/tile/dark_red/half/contrasted{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/security/execution/transfer) -"oMo" = ( -/obj/effect/turf_decal/siding/red{ - dir = 4 - }, -/obj/machinery/holopad, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/small, -/area/station/security/office) "oMy" = ( /obj/structure/lattice/catwalk, /turf/open/space/basic, /area/station/solars/starboard/aft) -"oMC" = ( -/obj/machinery/hydroponics/constructable, -/obj/effect/turf_decal/tile/blue/half, -/obj/machinery/airalarm/directional/south, -/turf/open/floor/iron/white/small, -/area/station/service/hydroponics) "oMF" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/turf_decal/tile/neutral, @@ -41852,6 +43845,11 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/iron/white/small, /area/station/medical/storage) +"oNs" = ( +/turf/open/floor/iron/stairs/left{ + dir = 1 + }, +/area/station/maintenance/hallway/abandoned_command) "oNv" = ( /obj/effect/turf_decal/tile/dark_red/anticorner/contrasted{ dir = 1 @@ -41867,12 +43865,38 @@ }, /turf/open/floor/plating, /area/station/construction/mining/aux_base) +"oNF" = ( +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/obj/machinery/firealarm/directional/east, +/obj/effect/turf_decal/tile/neutral/opposingcorners{ + dir = 1 + }, +/obj/effect/turf_decal/siding/thinplating_new{ + dir = 4 + }, +/obj/effect/turf_decal/siding/thinplating_new{ + dir = 4 + }, +/turf/open/floor/iron/small, +/area/station/hallway/secondary/service) "oNH" = ( /obj/structure/cable, /obj/effect/decal/cleanable/dirt, /obj/structure/alien/weeds, /turf/open/floor/iron, /area/station/maintenance/starboard/greater) +"oNN" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/turf/open/floor/iron/white/side{ + dir = 8 + }, +/area/station/science/research) "oNX" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -41904,13 +43928,6 @@ dir = 1 }, /area/station/science/lobby) -"oOk" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment, -/obj/effect/decal/cleanable/dirt, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) "oOl" = ( /obj/effect/turf_decal/stripes/white/line{ dir = 9 @@ -41943,6 +43960,13 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/port) +"oOC" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 1 + }, +/obj/structure/flora/bush/flowers_br/style_random, +/turf/open/floor/grass, +/area/station/service/chapel) "oOK" = ( /obj/machinery/atmospherics/components/unary/portables_connector/visible{ dir = 1 @@ -41961,6 +43985,12 @@ /obj/structure/tram, /turf/open/floor/tram, /area/station/maintenance/port/aft) +"oOV" = ( +/obj/effect/turf_decal/siding/thinplating_new/light{ + dir = 8 + }, +/turf/open/floor/iron/kitchen/small, +/area/station/security/breakroom) "oPa" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -41979,6 +44009,12 @@ /obj/machinery/air_sensor/mix_tank, /turf/open/floor/engine/airless, /area/station/engineering/atmos) +"oPh" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/light/floor, +/turf/open/floor/iron/kitchen/small, +/area/station/service/kitchen) "oPi" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -42004,16 +44040,13 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/maintenance/port/fore) -"oPF" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/tile/yellow/half/contrasted{ - dir = 8 +"oPy" = ( +/obj/structure/bookcase/random, +/obj/structure/sign/painting/library{ + pixel_x = -30 }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/power/apc/auto_name/directional/west, -/turf/open/floor/iron, -/area/station/commons/storage/tools) +/turf/open/floor/wood/parquet, +/area/station/service/library) "oPG" = ( /obj/machinery/door/airlock/research{ name = "Research Director's Bedroom" @@ -42021,24 +44054,11 @@ /obj/effect/mapping_helpers/airlock/access/all/science/rd, /turf/open/floor/catwalk_floor/iron_dark, /area/station/command/heads_quarters/rd) -"oPJ" = ( -/obj/structure/sink/directional/south, -/obj/structure/mirror/directional/north, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/white/small, -/area/station/maintenance/port/aft) "oPM" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/science/cytology) -"oPO" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/iron/white, -/area/station/science/cytology) "oPQ" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/light/small/directional/west, @@ -42068,6 +44088,19 @@ /obj/structure/flora/bush/flowers_yw/style_random, /turf/open/misc/sandy_dirt, /area/station/science/cytology) +"oQo" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/neutral/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/neutral/line, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/hallway/primary/central/fore) "oQr" = ( /obj/machinery/door/poddoor{ id = "QMLoaddoor"; @@ -42106,13 +44139,6 @@ }, /turf/open/floor/iron, /area/station/science/cytology) -"oQM" = ( -/obj/effect/turf_decal/tile/yellow/anticorner/contrasted{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/commons/storage/tools) "oRj" = ( /obj/effect/turf_decal/siding/yellow{ dir = 8 @@ -42126,6 +44152,22 @@ /obj/effect/landmark/atmospheric_sanity/ignore_area, /turf/closed/mineral/random/stationside, /area/station/ai_monitored/aisat/exterior) +"oRn" = ( +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/hallway/primary/central/fore) +"oRp" = ( +/obj/structure/chair/stool/directional/east, +/turf/open/floor/carpet, +/area/station/commons/dorms) "oRr" = ( /obj/machinery/conveyor{ dir = 8; @@ -42137,12 +44179,41 @@ /obj/effect/turf_decal/stripes/line, /turf/open/floor/iron, /area/station/cargo/storage) -"oRs" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +"oRv" = ( +/obj/effect/turf_decal/tile/red/opposingcorners, +/obj/effect/turf_decal/tile/blue/opposingcorners{ + dir = 8 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/item/kirbyplants/random, +/obj/machinery/light/small/directional/west, +/obj/item/radio/intercom/directional/south, +/turf/open/floor/iron/smooth, +/area/station/service/greenroom) +"oRw" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/iron/smooth_large, -/area/station/science/auxlab/firing_range) +/obj/machinery/airalarm/directional/south, +/obj/effect/turf_decal/tile/neutral, +/turf/open/floor/iron, +/area/station/hallway/primary/port) +"oRy" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/machinery/door/airlock/maintenance{ + name = "Crematorium" + }, +/obj/effect/mapping_helpers/airlock/access/all/service/chapel_office, +/turf/open/floor/iron/textured_half{ + dir = 8 + }, +/area/station/service/chapel/storage) "oRB" = ( /obj/structure/cable, /obj/machinery/power/apc/auto_name/directional/east, @@ -42194,11 +44265,6 @@ }, /turf/open/floor/iron, /area/station/cargo/storage) -"oSh" = ( -/obj/structure/disposalpipe/segment, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/station/maintenance/port/greater) "oSv" = ( /obj/effect/turf_decal/tile/neutral/fourcorners, /obj/machinery/computer/rdconsole{ @@ -42225,39 +44291,21 @@ /obj/structure/reagent_dispensers/watertank/high, /turf/open/floor/plating, /area/station/engineering/supermatter/room) -"oSG" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/closet/secure_closet/research_director, -/obj/item/radio/intercom/directional/north, -/turf/open/floor/iron/dark/small, -/area/station/command/heads_quarters/rd) -"oSP" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 6 +"oTg" = ( +/obj/effect/turf_decal/tile/brown/opposingcorners{ + dir = 1 }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/duct, -/turf/open/floor/plating, -/area/station/maintenance/port/greater) -"oSS" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 9 +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 }, -/turf/open/floor/plating, -/area/station/maintenance/port/greater) +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/commons/vacant_room/commissary) "oTj" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/spawner/random/trash, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) -"oTo" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/door/firedoor, -/turf/open/floor/catwalk_floor/iron, -/area/station/service/bar) "oTH" = ( /obj/effect/spawner/random/structure/closet_maintenance, /obj/effect/decal/cleanable/dirt, @@ -42270,15 +44318,15 @@ /obj/effect/spawner/random/maintenance, /turf/open/floor/tram, /area/station/maintenance/department/medical/central) -"oTL" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating/rust, -/area/station/maintenance/fore/greater) -"oTO" = ( -/obj/structure/dresser, -/obj/machinery/airalarm/directional/south, -/turf/open/floor/wood, -/area/station/cargo/boutique) +"oTJ" = ( +/obj/effect/turf_decal/tile/dark_red/anticorner/contrasted{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/security/execution/transfer) "oTT" = ( /obj/structure/disposalpipe/trunk{ dir = 4 @@ -42292,21 +44340,27 @@ /turf/open/floor/iron/dark, /area/station/science/genetics) "oTY" = ( -/obj/effect/turf_decal/stripes/line, -/obj/structure/tank_holder/extinguisher/advanced, -/turf/open/floor/iron, -/area/station/engineering/atmos) -"oTZ" = ( -/obj/structure/table, -/turf/open/floor/plating, -/area/station/commons/vacant_room/commissary) +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible/layer1{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible{ + dir = 5 + }, +/turf/open/space/basic, +/area/space/nearstation) "oUd" = ( /turf/open/floor/iron/smooth, /area/station/hallway/secondary/command) -"oUo" = ( -/obj/machinery/light/small/directional/east, +"oUi" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment, /turf/open/floor/iron, -/area/station/hallway/secondary/recreation) +/area/station/hallway/primary/central/fore) "oUq" = ( /obj/machinery/meter, /obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/visible, @@ -42318,16 +44372,6 @@ }, /turf/open/floor/iron, /area/station/engineering/atmos/pumproom) -"oUx" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/navbeacon{ - codes_txt = "patrol;next_patrol=23.2-Evac-Garden"; - location = "23.4-Evac" - }, -/turf/open/floor/iron, -/area/station/hallway/secondary/exit/departure_lounge) "oUz" = ( /obj/machinery/power/smes/engineering, /obj/structure/cable, @@ -42366,31 +44410,15 @@ /obj/structure/cable, /turf/open/floor/catwalk_floor/iron_smooth, /area/station/security/evidence) -"oUO" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/iron/stairs{ - dir = 8 - }, -/area/station/maintenance/port/greater) -"oUY" = ( +"oVl" = ( +/obj/machinery/vending/wardrobe/bar_wardrobe, +/obj/machinery/power/apc/auto_name/directional/north, /obj/structure/cable, -/obj/machinery/power/terminal{ - dir = 8 +/obj/effect/turf_decal/siding/wood{ + dir = 9 }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/smooth, -/area/station/maintenance/solars/port/aft) -"oVo" = ( -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/obj/effect/mapping_helpers/broken_floor, -/obj/effect/mapping_helpers/broken_floor, -/obj/structure/broken_flooring/singular/directional/east, -/turf/open/floor/plating, -/area/station/maintenance/port/aft) +/turf/open/floor/stone, +/area/station/service/bar/backroom) "oVt" = ( /obj/machinery/atmospherics/pipe/smart/simple/orange/hidden, /obj/effect/turf_decal/tile/yellow, @@ -42412,6 +44440,13 @@ /obj/machinery/light/cold/directional/north, /turf/open/floor/iron, /area/station/security/execution/transfer) +"oVW" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 5 + }, +/obj/structure/flora/bush/large/style_3, +/turf/open/floor/grass, +/area/station/service/chapel) "oVY" = ( /obj/effect/turf_decal/siding/wood{ dir = 10 @@ -42424,12 +44459,6 @@ /obj/machinery/light_switch/directional/west, /turf/open/floor/carpet/royalblue, /area/station/command/heads_quarters/captain) -"oWb" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/light/cold/directional/east, -/obj/effect/turf_decal/tile/neutral, -/turf/open/floor/iron, -/area/station/hallway/primary/central/fore) "oWg" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -42471,25 +44500,25 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/engineering/supermatter/room) -"oXe" = ( -/obj/effect/mapping_helpers/broken_floor, -/obj/machinery/duct, -/turf/open/floor/plating, -/area/station/maintenance/central/greater) +"oWN" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/trimline/neutral/end, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/hallway/primary/central/fore) +"oXa" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/obj/machinery/power/apc/auto_name/directional/north, +/turf/open/floor/iron/dark, +/area/station/science/ordnance/testlab) "oXs" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/closet/emcloset, /turf/open/floor/iron, /area/station/hallway/secondary/dock) -"oXt" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/red/opposingcorners{ - dir = 1 - }, -/turf/open/floor/iron/cafeteria, -/area/station/service/cafeteria) "oXK" = ( /obj/structure/cable, /obj/machinery/power/apc/auto_name/directional/west, @@ -42503,30 +44532,25 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/entry) -"oXV" = ( -/obj/structure/disposalpipe/segment{ - dir = 10 - }, +"oYi" = ( +/obj/effect/turf_decal/trimline/neutral/line, /obj/effect/turf_decal/trimline/neutral/line{ - dir = 5 + dir = 1 }, -/obj/effect/turf_decal/trimline/neutral/corner{ - dir = 8 +/obj/machinery/navbeacon{ + codes_txt = "patrol;next_patrol=23.1-Evac"; + location = "22.0-Porthall-Evac" }, -/turf/open/floor/iron, -/area/station/hallway/primary/central/fore) -"oXZ" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 +/obj/structure/disposalpipe/segment{ + dir = 4 }, -/obj/machinery/camera/autoname/directional/west, /turf/open/floor/iron, -/area/station/hallway/primary/central/fore) -"oYu" = ( -/obj/machinery/vending/dinnerware, -/turf/open/floor/iron/cafeteria, -/area/station/service/kitchen) +/area/station/hallway/primary/port) +"oYj" = ( +/obj/machinery/light_switch/directional/north, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/iron, +/area/station/commons/fitness/locker_room) "oYv" = ( /obj/effect/turf_decal/siding/wood, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -42535,19 +44559,6 @@ dir = 8 }, /area/station/engineering/main) -"oYy" = ( -/obj/structure/chair/comfy/beige{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/computer/security/telescreen/entertainment/directional/east, -/turf/open/floor/iron, -/area/station/commons/dorms) -"oYB" = ( -/obj/effect/mapping_helpers/broken_floor, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/station/maintenance/central/lesser) "oYL" = ( /obj/structure/disposalpipe/trunk{ dir = 1 @@ -42572,18 +44583,6 @@ /obj/item/radio/intercom/command/directional/east, /turf/open/floor/iron/dark, /area/station/command/corporate_dock) -"oYV" = ( -/obj/structure/chair/sofa/bench/left{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/hallway/secondary/recreation) -"oZb" = ( -/obj/structure/chair/sofa/bench/right{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/hallway/secondary/recreation) "oZi" = ( /obj/effect/turf_decal/siding/wideplating/dark/corner, /obj/effect/turf_decal/tile/dark_red/half/contrasted{ @@ -42591,19 +44590,6 @@ }, /turf/open/floor/iron, /area/station/security/brig/entrance) -"oZk" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/obj/structure/sink/directional/east, -/obj/structure/mirror/directional/west, -/turf/open/floor/iron/showroomfloor, -/area/station/commons/toilet/auxiliary) -"oZr" = ( -/obj/structure/disposalpipe/segment, -/obj/effect/mapping_helpers/broken_floor, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/station/maintenance/central/greater) "oZt" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -42614,6 +44600,16 @@ /obj/effect/mapping_helpers/airlock/access/any/medical/maintenance, /turf/open/floor/plating, /area/station/maintenance/department/medical/central) +"oZy" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/obj/effect/spawner/random/structure/steam_vent, +/turf/open/floor/plating, +/area/station/maintenance/central/greater) "oZz" = ( /obj/machinery/door/airlock/research/glass/incinerator/ordmix_exterior{ name = "Burn Chamber Exterior Airlock" @@ -42622,11 +44618,6 @@ /obj/effect/mapping_helpers/airlock/access/all/science/ordnance, /turf/open/floor/engine, /area/station/science/ordnance/burnchamber) -"oZI" = ( -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/cafeteria, -/area/station/security/prison/mess) "oZL" = ( /obj/structure/table, /obj/item/crowbar/large/heavy, @@ -42634,6 +44625,13 @@ /obj/machinery/light/small/directional/south, /turf/open/floor/iron, /area/station/construction/mining/aux_base) +"oZO" = ( +/obj/structure/railing{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/commons/dorms) "oZQ" = ( /obj/effect/turf_decal/stripes/line, /obj/effect/turf_decal/trimline/yellow/line{ @@ -42669,21 +44667,13 @@ /obj/structure/tram, /turf/open/floor/tram, /area/station/security/tram) -"paL" = ( -/obj/structure/fireplace, -/obj/effect/turf_decal/siding/wood/end, -/obj/machinery/camera/directional/east, -/turf/open/floor/stone, -/area/station/service/bar) -"paV" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 6 +"paJ" = ( +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk{ + dir = 8 }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/spawner/random/trash, -/turf/open/floor/plating, -/area/station/maintenance/central/greater) +/turf/open/floor/wood/parquet, +/area/station/service/library) "paW" = ( /obj/machinery/atmospherics/pipe/smart/manifold/yellow/visible{ dir = 8 @@ -42727,6 +44717,10 @@ dir = 1 }, /area/station/engineering/supermatter/room) +"pbk" = ( +/obj/effect/turf_decal/siding/thinplating/terracotta, +/turf/open/floor/iron, +/area/station/commons/dorms) "pbl" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment, @@ -42741,17 +44735,26 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/fore) -"pbu" = ( -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/station/maintenance/port/greater) +"pbw" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 9 + }, +/obj/structure/flora/bush/flowers_pp/style_random, +/turf/open/floor/grass, +/area/station/service/chapel) "pbD" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/smooth_large, -/area/station/science/auxlab/firing_range) +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/plaque{ + icon_state = "L12"; + pixel_y = -15 + }, +/obj/effect/turf_decal/trimline/neutral/line, +/obj/effect/turf_decal/trimline/neutral/line{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central/aft) "pbE" = ( /obj/machinery/firealarm/directional/west, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ @@ -42770,6 +44773,16 @@ /obj/machinery/light/small/directional/east, /turf/open/floor/iron/smooth, /area/station/service/greenroom) +"pbK" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 1 + }, +/obj/structure/flora/bush/flowers_br/style_random, +/obj/structure/flora/bush/jungle/b/style_2, +/obj/machinery/light/small/directional/north, +/obj/item/radio/intercom/directional/north, +/turf/open/floor/grass, +/area/station/service/chapel) "pbT" = ( /obj/effect/turf_decal/stripes/corner{ dir = 4 @@ -42778,6 +44791,16 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/engineering/atmospherics_engine) +"pca" = ( +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/stripes/red/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/red/line, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron/small, +/area/station/hallway/primary/central/fore) "pcb" = ( /obj/effect/turf_decal/tile/dark_red{ dir = 4 @@ -42785,11 +44808,12 @@ /obj/machinery/firealarm/directional/south, /turf/open/floor/iron, /area/station/security/execution/transfer) -"pcc" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/hallway/secondary/recreation) +"pcm" = ( +/obj/effect/turf_decal/siding/wood, +/obj/machinery/vending/wardrobe/jani_wardrobe, +/obj/machinery/camera/autoname/directional/north, +/turf/open/floor/iron/small, +/area/station/commons) "pcv" = ( /obj/machinery/door/airlock/command{ name = "Head of Security's Bedroom" @@ -42822,12 +44846,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/cafeteria, /area/station/science/circuits) -"pcT" = ( -/obj/item/kirbyplants/random, -/obj/effect/decal/cleanable/dirt, -/obj/structure/broken_flooring/corner/directional/south, -/turf/open/floor/plating, -/area/station/hallway/secondary/recreation) "pdf" = ( /obj/structure/transport/linear/tram, /obj/effect/landmark/transport/transport_id/birdshot/line_2, @@ -42842,6 +44860,16 @@ }, /turf/open/floor/plating, /area/station/engineering/supermatter) +"pdl" = ( +/obj/machinery/light/small/directional/north, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/item/kirbyplants/random/fullysynthetic, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/commons/dorms) "pds" = ( /obj/structure/cable, /obj/machinery/holopad, @@ -42864,29 +44892,10 @@ /obj/structure/flora/bush/flowers_yw/style_random, /turf/open/misc/sandy_dirt, /area/station/science/cytology) -"pdN" = ( -/obj/structure/disposalpipe/segment, -/obj/effect/decal/cleanable/dirt, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating, -/area/station/maintenance/port/lesser) "pdR" = ( /obj/effect/spawner/structure/window, /turf/open/floor/plating, /area/station/maintenance/department/medical/central) -"pdT" = ( -/obj/machinery/airalarm/directional/south, -/obj/item/stack/sheet/cardboard{ - pixel_x = -3; - pixel_y = -1 - }, -/obj/item/storage/box{ - pixel_x = -7; - pixel_y = -1 - }, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/wood/tile, -/area/station/command/corporate_showroom) "pdU" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/turf_decal/stripes/line{ @@ -42902,19 +44911,6 @@ /obj/machinery/portable_atmospherics/canister/bz, /turf/open/floor/iron/diagonal, /area/station/science/auxlab/firing_range) -"peb" = ( -/obj/effect/mapping_helpers/broken_floor, -/obj/structure/table, -/obj/item/phone{ - pixel_x = 6; - pixel_y = 1 - }, -/obj/item/reagent_containers/cup/glass/mug/britcup{ - pixel_x = -6; - pixel_y = 11 - }, -/turf/open/floor/iron/smooth, -/area/station/cargo/drone_bay) "pee" = ( /obj/structure/table, /obj/item/circuitboard/machine/exoscanner{ @@ -42945,20 +44941,6 @@ /obj/effect/mapping_helpers/airlock/access/any/supply/maintenance, /turf/open/floor/plating, /area/station/maintenance/port/fore) -"peu" = ( -/obj/structure/cable, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/iron, -/area/station/maintenance/port/aft) -"pev" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/plating, -/area/station/maintenance/port/greater) "peN" = ( /obj/structure/lattice, /obj/machinery/camera/motion/directional/north{ @@ -42968,10 +44950,11 @@ }, /turf/open/space/basic, /area/space/nearstation) -"peR" = ( -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/iron/small, -/area/station/maintenance/port/lesser) +"peU" = ( +/obj/effect/turf_decal/weather/dirt, +/obj/structure/flora/rock/pile/jungle/style_2, +/turf/open/floor/grass, +/area/station/service/chapel) "peW" = ( /obj/effect/turf_decal/siding/dark{ dir = 5 @@ -42999,6 +44982,11 @@ /obj/effect/gibspawner, /turf/open/floor/wood, /area/station/maintenance/starboard/greater) +"pfo" = ( +/obj/structure/closet/secure_closet/personal, +/obj/machinery/light/warm/directional/north, +/turf/open/floor/iron/herringbone, +/area/station/commons/dorms) "pft" = ( /obj/effect/turf_decal/tile/brown/opposingcorners, /obj/effect/decal/cleanable/dirt/dust, @@ -43076,25 +45064,32 @@ }, /turf/open/floor/iron/smooth, /area/station/engineering/atmos) -"pfO" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/camera/directional/east, -/obj/machinery/status_display/evac/directional/east, -/obj/effect/turf_decal/tile/neutral, -/turf/open/floor/iron, -/area/station/hallway/primary/central/fore) -"pfU" = ( -/obj/machinery/door/airlock{ - name = "Kitchen Cold Room" +"pfT" = ( +/obj/structure/training_machine, +/turf/open/floor/iron/smooth_large, +/area/station/science/auxlab/firing_range) +"pfW" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/station/commons/dorms) +"pgg" = ( +/obj/machinery/flasher/portable, +/obj/effect/turf_decal/stripes/line{ + dir = 8 }, -/obj/effect/mapping_helpers/airlock/abandoned, -/obj/structure/barricade/wooden/crude, -/obj/effect/mapping_helpers/airlock/locked, -/obj/effect/mapping_helpers/airlock/welded, -/turf/open/floor/iron/textured_half{ +/turf/open/floor/plating, +/area/station/security/tram) +"pgl" = ( +/obj/structure/cable, +/turf/open/floor/iron/stairs/right{ dir = 8 }, -/area/station/service/bar/backroom) +/area/station/commons/fitness/locker_room) +"pgm" = ( +/obj/machinery/computer/security/telescreen/prison/directional/north, +/obj/machinery/computer/records/security, +/turf/open/floor/wood, +/area/station/security/detectives_office) "pgq" = ( /obj/structure/chair/stool/directional/north, /obj/effect/turf_decal/siding/wood{ @@ -43112,15 +45107,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark/small, /area/station/engineering/supermatter/room) -"pgw" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating, -/area/station/maintenance/starboard/central) "pgy" = ( /obj/structure/disposalpipe/segment{ dir = 6 @@ -43130,30 +45116,35 @@ /obj/item/kirbyplants/fern, /turf/open/floor/iron/white, /area/station/science/cytology) -"pgE" = ( -/obj/structure/chair/office, -/obj/effect/mapping_helpers/broken_floor, -/obj/machinery/light/directional/north, -/obj/effect/landmark/start/hangover, -/turf/open/floor/wood/parquet, -/area/station/service/library) "pgU" = ( /obj/structure/steam_vent, /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/iron, /area/station/engineering/atmospherics_engine) -"pgW" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/freezer, -/area/station/service/kitchen/coldroom) +"phd" = ( +/obj/effect/turf_decal/siding/red{ + dir = 4 + }, +/obj/machinery/holopad, +/turf/open/floor/iron/small, +/area/station/security/office) "phj" = ( /obj/effect/turf_decal/stripes/line{ dir = 9 }, /turf/open/floor/iron, /area/station/cargo/storage) +"phm" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/station/science/genetics) +"pho" = ( +/obj/structure/cable, +/obj/effect/turf_decal/siding/dark_red{ + dir = 1 + }, +/turf/open/floor/iron/dark/small, +/area/station/ai_monitored/security/armory) "phs" = ( /obj/machinery/duct, /turf/open/floor/iron/white/small, @@ -43177,12 +45168,12 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/fore) -"phE" = ( -/obj/machinery/holopad, -/obj/effect/decal/cleanable/dirt, -/obj/effect/landmark/event_spawn, -/turf/open/floor/iron/white/small, -/area/station/service/hydroponics/garden) +"phG" = ( +/obj/structure/chair/wood{ + dir = 4 + }, +/turf/open/floor/iron/grimy, +/area/station/service/bar) "phY" = ( /obj/structure/railing{ dir = 1 @@ -43221,14 +45212,6 @@ /obj/machinery/light/cold/directional/east, /turf/open/floor/plating, /area/station/cargo/sorting) -"pij" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/decal/cleanable/dirt, -/obj/effect/landmark/start/janitor, -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/service/janitor) "pil" = ( /obj/structure/disposalpipe/segment, /obj/machinery/door/airlock{ @@ -43256,23 +45239,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/fore) -"piM" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/iron, -/area/station/commons/dorms) -"piZ" = ( -/obj/structure/chair/sofa/right/maroon{ - dir = 1 - }, -/obj/effect/landmark/start/hangover, -/obj/structure/extinguisher_cabinet/directional/east, -/turf/open/floor/iron/showroomfloor, -/area/station/service/cafeteria) "pjb" = ( /obj/structure/broken_flooring/singular/directional/south, /turf/open/floor/iron, @@ -43283,6 +45249,9 @@ /obj/machinery/light/small/directional/south, /turf/open/floor/tram, /area/station/maintenance/department/medical/central) +"pjk" = ( +/turf/open/floor/iron, +/area/station/engineering/atmos) "pjn" = ( /obj/effect/turf_decal/tile/neutral/fourcorners, /obj/machinery/dna_scannernew, @@ -43334,12 +45303,6 @@ }, /turf/open/floor/iron, /area/station/cargo/sorting) -"pjM" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/station/commons) "pjT" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -43378,15 +45341,20 @@ /obj/item/weldingtool, /turf/open/floor/iron/dark, /area/station/maintenance/department/engine/atmos) -"pkE" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 9 +"pkR" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 }, -/obj/effect/mapping_helpers/broken_floor, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/obj/structure/filingcabinet/employment, -/turf/open/floor/wood/tile, -/area/station/service/lawoffice) +/obj/effect/turf_decal/tile/blue, +/obj/machinery/navbeacon{ + codes_txt = "patrol;next_patrol=6.2-Arrivals"; + location = "6.1-Arrivals" + }, +/obj/machinery/light/floor, +/turf/open/floor/iron/white/corner{ + dir = 8 + }, +/area/station/hallway/secondary/entry) "pkS" = ( /obj/structure/table/glass, /obj/effect/turf_decal/siding/wood{ @@ -43395,16 +45363,21 @@ /obj/item/book/manual/wiki/security_space_law, /turf/open/floor/wood/tile, /area/station/service/lawoffice) +"pkU" = ( +/obj/effect/mapping_helpers/airlock/access/any/service/general, +/obj/structure/disposalpipe/segment, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/glass{ + name = "Service Hallway" + }, +/turf/open/floor/iron/textured_half, +/area/station/hallway/secondary/service) "plf" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/medical/medbay/central) -"plk" = ( -/obj/effect/spawner/random/structure/closet_maintenance, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) "plr" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/door/firedoor, @@ -43416,15 +45389,6 @@ }, /turf/open/floor/iron/small, /area/station/hallway/primary/starboard) -"plu" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/effect/turf_decal/stripes/corner, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/station/science/xenobiology) "plz" = ( /obj/effect/spawner/structure/window, /turf/open/floor/plating, @@ -43444,21 +45408,6 @@ }, /turf/open/floor/wood/tile, /area/station/service/lawoffice) -"plZ" = ( -/obj/structure/table/wood, -/obj/effect/turf_decal/siding/wood{ - dir = 5 - }, -/obj/effect/mapping_helpers/broken_floor, -/obj/machinery/newscaster/directional/east, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/cobweb/cobweb2, -/obj/machinery/fax{ - fax_name = "Law Office"; - name = "Law Office Fax Machine" - }, -/turf/open/floor/wood/tile, -/area/station/service/lawoffice) "pmg" = ( /obj/structure/table/reinforced/titaniumglass, /obj/effect/turf_decal/bot, @@ -43470,23 +45419,11 @@ }, /turf/open/floor/catwalk_floor/titanium, /area/station/command/heads_quarters/ce) -"pmn" = ( -/obj/structure/chair/comfy/beige{ - dir = 4 - }, -/obj/machinery/light/small/directional/north, -/obj/effect/mapping_helpers/broken_floor, -/obj/machinery/button/door/directional/west{ - id = "study_c"; - name = "Privacy Bolts"; - normaldoorcontrol = 1; - pixel_x = 7; - pixel_y = 24; - specialfunctions = 4 - }, -/obj/effect/landmark/start/hangover, -/turf/open/floor/wood/tile, -/area/station/commons) +"pmq" = ( +/obj/structure/bed/maint, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/eighties/red, +/area/station/service/abandoned_gambling_den/gaming) "pms" = ( /obj/effect/turf_decal/stripes/red/line{ dir = 8 @@ -43527,13 +45464,6 @@ "pnl" = ( /turf/closed/wall/r_wall, /area/station/maintenance/department/electrical) -"pnn" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 9 - }, -/turf/open/floor/plating, -/area/station/maintenance/central/lesser) "pnq" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/door/airlock/public{ @@ -43546,6 +45476,25 @@ /obj/machinery/firealarm/directional/south, /turf/open/floor/plating, /area/station/maintenance/starboard/greater) +"pnF" = ( +/obj/effect/turf_decal/tile/green/opposingcorners, +/obj/effect/turf_decal/tile/blue/opposingcorners{ + dir = 8 + }, +/obj/machinery/hydroponics/constructable, +/obj/machinery/airalarm/directional/west, +/obj/machinery/light/small/directional/west, +/turf/open/floor/iron, +/area/station/service/hydroponics) +"pnK" = ( +/obj/effect/turf_decal/siding/wood, +/obj/effect/turf_decal/weather/dirt{ + dir = 10 + }, +/obj/structure/flora/bush/flowers_yw/style_3, +/obj/structure/flora/bush/jungle/c/style_random, +/turf/open/floor/grass, +/area/station/service/chapel) "pnQ" = ( /obj/effect/turf_decal/stripes/white/line{ dir = 6 @@ -43566,6 +45515,17 @@ }, /turf/open/floor/iron, /area/station/science/cytology) +"pnW" = ( +/obj/machinery/computer/slot_machine{ + pixel_y = 2 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 9 + }, +/obj/structure/extinguisher_cabinet/directional/west, +/obj/machinery/computer/security/telescreen/entertainment/directional/north, +/turf/open/floor/stone, +/area/station/service/bar) "pnZ" = ( /obj/effect/turf_decal/tile/blue/fourcorners, /obj/machinery/firealarm/directional/west, @@ -43580,22 +45540,6 @@ /obj/effect/turf_decal/siding/wood, /turf/open/floor/iron/freezer, /area/station/command/corporate_suite) -"poh" = ( -/obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/north, -/obj/machinery/oven/range, -/turf/open/floor/iron/cafeteria, -/area/station/service/kitchen) -"pok" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/stripes/line{ - dir = 6 - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/light/small/directional/south, -/turf/open/floor/iron, -/area/station/science/xenobiology) "pox" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -43605,13 +45549,6 @@ }, /turf/open/floor/iron/white, /area/station/medical/medbay/central) -"poz" = ( -/obj/structure/chair/sofa/bench/right, -/obj/effect/decal/cleanable/glass, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/effect/landmark/start/assistant, -/turf/open/floor/iron, -/area/station/hallway/primary/port) "poA" = ( /obj/machinery/portable_atmospherics/canister/air, /obj/machinery/light/small/dim/directional/east, @@ -43728,20 +45665,14 @@ /obj/machinery/firealarm/directional/west, /turf/open/floor/iron/white, /area/station/medical/medbay/lobby) -"ppy" = ( -/obj/machinery/hydroponics/constructable, -/turf/open/floor/iron/white/small, -/area/station/service/hydroponics/garden) "ppA" = ( /obj/effect/turf_decal/tile/green/half/contrasted, /turf/open/floor/iron/dark, /area/station/medical/chemistry) -"ppM" = ( -/obj/effect/mapping_helpers/broken_floor, -/obj/effect/turf_decal/stripes/line, -/obj/machinery/chem_master, -/turf/open/floor/iron, -/area/station/science/xenobiology) +"ppL" = ( +/obj/effect/spawner/random/engineering/atmospherics_portable, +/turf/open/floor/plating, +/area/station/maintenance/department/science/xenobiology) "ppQ" = ( /obj/effect/turf_decal/stripes/box, /obj/machinery/portable_atmospherics/canister/carbon_dioxide, @@ -43750,22 +45681,16 @@ }, /turf/open/floor/iron/white, /area/station/science/cytology) -"ppW" = ( -/obj/machinery/atmospherics/pipe/smart/simple/general/visible{ - dir = 4 - }, -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/door/window/brigdoor/left/directional/east{ - name = "Secure Creature Pen"; - req_access = list("research") +"ppT" = ( +/obj/structure/spider/stickyweb, +/turf/open/floor/stone, +/area/station/service/abandoned_gambling_den) +"ppV" = ( +/obj/structure/disposalpipe/segment, +/turf/open/floor/engine{ + name = "Holodeck Projector Floor" }, -/turf/open/floor/iron, -/area/station/science/xenobiology) -"pqa" = ( -/obj/structure/window/reinforced/spawner/directional/east, -/turf/open/space/basic, -/area/space) +/area/station/holodeck/rec_center) "pqm" = ( /turf/closed/wall/r_wall, /area/station/engineering/storage/tcomms) @@ -43788,15 +45713,6 @@ dir = 1 }, /area/station/engineering/supermatter/room) -"pqs" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/door/airlock{ - name = "Unisex Showers" - }, -/turf/open/floor/iron/showroomfloor, -/area/station/commons/toilet/restrooms) "pqv" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment, @@ -43861,17 +45777,24 @@ /obj/effect/landmark/start/prisoner, /turf/open/floor/iron/dark, /area/station/security/prison/safe) -"prI" = ( -/turf/closed/wall, -/area/station/engineering/hallway) -"prQ" = ( +"prA" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/landmark/navigate_destination/teleporter, /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/cafeteria, -/area/station/service/kitchen) +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/hallway/primary/central/fore) +"prI" = ( +/turf/closed/wall, +/area/station/engineering/hallway) "prV" = ( /obj/effect/turf_decal/tile/brown/opposingcorners, /obj/effect/turf_decal/tile/yellow/opposingcorners{ @@ -43888,13 +45811,6 @@ /obj/machinery/camera/autoname/directional/west, /turf/open/floor/iron/smooth_large, /area/station/science/auxlab/firing_range) -"prX" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/holopad, -/turf/open/floor/iron/smooth_large, -/area/station/science/auxlab/firing_range) "psc" = ( /obj/machinery/door/poddoor/shutters{ id = "teleporterhubshutters"; @@ -43902,6 +45818,22 @@ }, /turf/open/floor/catwalk_floor/iron_smooth, /area/station/command/teleporter) +"psk" = ( +/obj/structure/table, +/obj/machinery/recharger{ + pixel_x = 6; + pixel_y = 9 + }, +/obj/item/multitool{ + pixel_x = -6; + pixel_y = 3 + }, +/obj/item/cigarette{ + pixel_x = 5; + pixel_y = 2 + }, +/turf/open/floor/iron/dark, +/area/station/security/lockers) "psn" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -43927,6 +45859,14 @@ /obj/structure/cable, /turf/open/floor/iron/smooth, /area/station/engineering/supermatter/room) +"psz" = ( +/obj/machinery/door/window/left/directional/west{ + name = "Fitness Ring" + }, +/obj/structure/window/spawner/directional/south, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/commons/dorms) "psI" = ( /obj/structure/table, /obj/effect/turf_decal/tile/blue/full, @@ -43948,30 +45888,17 @@ }, /turf/open/floor/iron/white/textured_large, /area/station/medical/medbay/lobby) -"psL" = ( -/obj/effect/turf_decal/bot, -/obj/machinery/light/cold/dim/directional/east, -/obj/machinery/newscaster/directional/east, -/obj/structure/cable, -/obj/structure/table/reinforced, -/obj/item/paper_bin{ - pixel_x = 5; - pixel_y = 19 - }, -/obj/item/pen{ - pixel_x = 5; - pixel_y = 20 - }, -/obj/machinery/cell_charger{ - pixel_x = 2; - pixel_y = 1 +"psK" = ( +/obj/structure/disposalpipe/segment{ + dir = 5 }, -/obj/item/stock_parts/cell/high{ - pixel_x = 2; - pixel_y = 2 +/obj/effect/turf_decal/stripes/line{ + dir = 1 }, -/turf/open/floor/iron/smooth, -/area/station/engineering/break_room) +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/white/small, +/area/station/service/janitor) "psP" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -43988,6 +45915,14 @@ /obj/structure/broken_flooring/corner/directional/south, /turf/open/floor/plating, /area/station/maintenance/port/aft) +"ptf" = ( +/obj/machinery/status_display/ai/directional/west, +/obj/machinery/camera/autoname/directional/north, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central/aft) "ptj" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -43995,11 +45930,10 @@ /obj/machinery/power/apc/auto_name/directional/east, /turf/open/floor/iron/diagonal, /area/station/science/auxlab/firing_range) -"ptk" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/mapping_helpers/broken_floor, +"ptl" = ( +/obj/machinery/duct, /turf/open/floor/plating, -/area/station/maintenance/port/greater) +/area/station/maintenance/central/lesser) "ptt" = ( /obj/structure/chair/wood/wings, /obj/effect/turf_decal/siding/wood{ @@ -44024,6 +45958,13 @@ /obj/machinery/power/apc/auto_name/directional/north, /turf/open/floor/iron, /area/station/engineering/atmos/space_catwalk) +"ptC" = ( +/obj/machinery/shower/directional/west, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 4 + }, +/turf/open/floor/iron/showroomfloor, +/area/station/commons/dorms) "ptN" = ( /obj/structure/table/reinforced/plastitaniumglass, /obj/item/toy/talking/griffin{ @@ -44031,46 +45972,19 @@ }, /turf/open/floor/iron/smooth, /area/station/maintenance/port/aft) -"ptZ" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 5 - }, -/obj/machinery/airalarm/directional/north, -/turf/open/floor/grass, -/area/station/service/chapel) -"pug" = ( +"ptT" = ( +/obj/effect/turf_decal/siding/thinplating_new/light, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, /obj/structure/disposalpipe/segment{ dir = 5 }, -/turf/open/floor/plating, -/area/station/maintenance/port/greater) -"puj" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/disposalpipe/segment, -/obj/machinery/duct, -/turf/open/floor/plating, -/area/station/maintenance/port/greater) -"pum" = ( -/obj/structure/cable, -/obj/effect/turf_decal/arrows{ - dir = 4 - }, -/obj/machinery/door/window/right/directional/north{ - name = "Library Desk Door"; - req_access = list("library") - }, -/turf/open/floor/wood/parquet, -/area/station/service/library) -"pup" = ( -/obj/structure/chair/sofa/right, -/obj/machinery/light/small/directional/west, -/obj/structure/sign/poster/official/random/directional/north, -/turf/open/floor/wood, -/area/station/hallway/secondary/service) +/obj/machinery/light/small/directional/south, +/obj/machinery/requests_console/auto_name/directional/south, +/obj/effect/mapping_helpers/requests_console/supplies, +/turf/open/floor/iron/white/small, +/area/station/service/hydroponics) "pus" = ( /obj/effect/turf_decal/box/red/corners, /obj/effect/turf_decal/stripes/white/line{ @@ -44078,23 +45992,6 @@ }, /turf/open/floor/engine, /area/station/science/xenobiology) -"puv" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/door/airlock/hydroponics{ - name = "Hydroponics Supply Room" - }, -/obj/effect/mapping_helpers/airlock/access/any/service/hydroponics, -/turf/open/floor/iron/textured_half, -/area/station/service/hydroponics) -"puw" = ( -/obj/machinery/door/morgue{ - name = "Private Study"; - req_access = list("library") - }, -/turf/open/floor/catwalk_floor/iron_dark, -/area/station/service/library) "pux" = ( /obj/effect/turf_decal/siding/wood{ dir = 4 @@ -44102,18 +45999,6 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /turf/open/floor/iron/diagonal, /area/station/command/heads_quarters/hop) -"puC" = ( -/obj/machinery/light/small/directional/west, -/obj/effect/decal/cleanable/dirt, -/obj/structure/closet/firecloset, -/turf/open/floor/iron, -/area/station/commons/fitness/recreation/entertainment) -"puD" = ( -/obj/structure/bookcase/random/nonfiction, -/obj/machinery/newscaster/directional/west, -/obj/machinery/digital_clock/directional/north, -/turf/open/floor/wood/tile, -/area/station/service/bar) "puI" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -44129,30 +46014,29 @@ /obj/effect/mapping_helpers/airlock/cyclelink_helper, /turf/open/floor/plating, /area/station/engineering/atmos/space_catwalk) -"puN" = ( -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/iron/grimy, -/area/station/service/library) -"puY" = ( -/obj/structure/disposalpipe/segment{ +"pvi" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/wood, +/area/station/service/chapel/office) +"pvk" = ( +/obj/structure/closet/boxinggloves, +/obj/effect/turf_decal/stripes/red/line{ dir = 4 }, -/obj/effect/turf_decal/tile/dark_red/half/contrasted{ - dir = 1 - }, -/obj/machinery/camera/autoname/directional/south, -/obj/machinery/firealarm/directional/south, +/obj/effect/turf_decal/tile/neutral/opposingcorners, /turf/open/floor/iron, -/area/station/security/brig/entrance) -"pvt" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/white/small, -/area/station/service/hydroponics/garden) -"pvA" = ( -/obj/structure/chair/office, -/turf/open/floor/plating, -/area/station/service/library/abandoned) +/area/station/commons/fitness/recreation/entertainment) +"pvB" = ( +/obj/machinery/camera/autoname/directional/south, +/turf/open/floor/iron/herringbone, +/area/station/commons/dorms) +"pvC" = ( +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/turf/open/floor/wood, +/area/station/service/chapel/office) "pvE" = ( /obj/effect/turf_decal/siding/wideplating{ dir = 4 @@ -44165,14 +46049,6 @@ }, /turf/open/floor/iron/smooth, /area/station/engineering/atmos/office) -"pvF" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/white/side{ - dir = 4 - }, -/area/station/science/research) "pvP" = ( /obj/structure/railing/corner, /obj/effect/turf_decal/siding/thinplating_new/corner, @@ -44184,24 +46060,6 @@ }, /turf/open/floor/iron/smooth, /area/station/engineering/atmos) -"pvR" = ( -/obj/structure/table/wood, -/obj/machinery/light_switch/directional/south, -/turf/open/floor/stone, -/area/station/service/bar/backroom) -"pvS" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/mapping_helpers/broken_floor, -/obj/item/radio/intercom/directional/south, -/obj/machinery/duct, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/obj/effect/landmark/start/cook, -/turf/open/floor/iron/freezer, -/area/station/service/kitchen/coldroom) "pvY" = ( /obj/effect/turf_decal/tile/blue/anticorner/contrasted{ dir = 1 @@ -44210,20 +46068,6 @@ /obj/structure/reagent_dispensers/water_cooler, /turf/open/floor/iron/white, /area/station/medical/medbay/lobby) -"pwf" = ( -/obj/item/kirbyplants/random, -/obj/item/shard{ - pixel_x = 3; - pixel_y = 8 - }, -/obj/effect/decal/cleanable/glass, -/obj/item/shard{ - pixel_x = 5; - pixel_y = -5 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/white/small, -/area/station/service/hydroponics/garden) "pwn" = ( /obj/effect/spawner/random/vending/colavend, /obj/structure/sign/departments/telecomms/directional/south, @@ -44238,21 +46082,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/closed/wall, /area/station/engineering/atmos) -"pww" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/duct, -/obj/effect/landmark/generic_maintenance_landmark, -/turf/open/floor/iron/freezer, -/area/station/service/kitchen/coldroom) -"pwz" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/service/janitor) "pwA" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 1 @@ -44295,21 +46124,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark/herringbone, /area/station/security/execution/education) -"pxl" = ( -/obj/machinery/smartfridge, -/obj/machinery/door/firedoor, -/turf/open/floor/iron, -/area/station/service/hydroponics) -"pxw" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/power/apc/auto_name/directional/north, -/obj/effect/decal/cleanable/dirt, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) "pxx" = ( /obj/effect/turf_decal/tile/yellow/half/contrasted{ dir = 8 @@ -44334,33 +46148,24 @@ dir = 1 }, /area/station/security/prison/safe) -"pxO" = ( -/obj/structure/disposalpipe/segment{ - dir = 9 - }, -/obj/machinery/duct, -/turf/open/floor/iron/freezer, -/area/station/service/kitchen/coldroom) -"pxR" = ( -/obj/structure/table, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/commons) "pxZ" = ( /obj/structure/rack, /obj/effect/spawner/random/maintenance, /turf/open/floor/iron, /area/station/maintenance/starboard/aft) -"pya" = ( -/obj/structure/chair/sofa/right/maroon, -/obj/effect/landmark/start/hangover, -/turf/open/floor/iron/showroomfloor, -/area/station/service/cafeteria) "pyh" = ( /obj/structure/cable, /obj/structure/broken_flooring/singular/directional/east, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) +"pyk" = ( +/obj/structure/closet/crate/trashcart/filled, +/obj/structure/spider/stickyweb, +/obj/effect/spawner/random/maintenance/four, +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/east, +/turf/open/floor/stone, +/area/station/service/abandoned_gambling_den) "pyl" = ( /obj/structure/railing/corner{ dir = 1 @@ -44371,35 +46176,23 @@ /obj/structure/cable, /turf/open/floor/iron/smooth, /area/station/engineering/atmos/office) -"pyp" = ( -/obj/effect/mapping_helpers/broken_floor, -/obj/structure/chair{ - pixel_y = -2 +"pyt" = ( +/obj/machinery/light/floor, +/turf/open/floor/grass, +/area/station/service/chapel) +"pyA" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment{ + dir = 4 }, /turf/open/floor/plating, -/area/station/commons/vacant_room/commissary) -"pys" = ( -/obj/machinery/vending/autodrobe/all_access, -/obj/item/radio/intercom/directional/east, +/area/station/maintenance/port/greater) +"pyF" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/light/small/directional/east, /turf/open/floor/iron, -/area/station/commons) -"pyt" = ( -/turf/open/floor/plating, -/area/station/service/library/abandoned) -"pyS" = ( -/obj/structure/chair/sofa/left/maroon, -/obj/effect/landmark/start/assistant, -/obj/machinery/camera/autoname/directional/east, -/turf/open/floor/iron/showroomfloor, -/area/station/service/cafeteria) -"pyY" = ( -/obj/effect/turf_decal/tile/yellow/half/contrasted{ - dir = 8 - }, -/obj/structure/table, -/obj/item/weldingtool/mini, -/turf/open/floor/iron/white, -/area/station/maintenance/central/greater) +/area/station/maintenance/hallway/abandoned_command) "pzb" = ( /obj/effect/turf_decal/trimline/blue/corner{ dir = 1 @@ -44415,30 +46208,6 @@ /obj/machinery/atmospherics/pipe/layer_manifold/supply/visible, /turf/closed/wall/r_wall, /area/station/engineering/hallway) -"pzn" = ( -/obj/structure/table, -/obj/effect/turf_decal/siding/wood{ - dir = 4 - }, -/obj/item/toy/foamfinger, -/obj/item/toy/eightball{ - pixel_y = 13 - }, -/turf/open/floor/plating, -/area/station/service/theater) -"pzr" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/cable, -/turf/open/floor/plating, -/area/station/maintenance/central/lesser) -"pzs" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/mapping_helpers/broken_floor, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/stone, -/area/station/service/theater) "pzy" = ( /obj/structure/table, /obj/item/storage/box/prisoner{ @@ -44450,13 +46219,11 @@ /obj/structure/extinguisher_cabinet/directional/west, /turf/open/floor/iron, /area/station/security/execution/transfer) -"pzA" = ( -/obj/item/kirbyplants/random/fullysynthetic, -/obj/effect/turf_decal/tile/dark_red/opposingcorners, -/obj/item/radio/intercom/directional/east, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/security/tram) +"pzK" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/siding, +/turf/open/floor/iron/white/small, +/area/station/science/lab) "pzL" = ( /obj/structure/cable, /obj/effect/spawner/structure/window/reinforced, @@ -44469,23 +46236,13 @@ /obj/item/stack/sheet/mineral/titanium, /turf/open/floor/tram, /area/station/maintenance/department/medical/central) -"pzR" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/item/radio/intercom/directional/east, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/showroomfloor, -/area/station/commons/toilet/restrooms) -"pzX" = ( -/obj/structure/railing, -/obj/structure/table, +"pzW" = ( /obj/effect/turf_decal/siding/wood{ - dir = 8 + dir = 9 }, -/obj/effect/turf_decal/siding/white, -/obj/effect/spawner/random/entertainment/toy, -/turf/open/floor/plating, -/area/station/service/theater) +/obj/machinery/light/floor, +/turf/open/floor/stone, +/area/station/service/bar) "pAa" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/spawner/random/structure/barricade, @@ -44501,13 +46258,6 @@ /obj/machinery/light_switch/directional/east, /turf/open/floor/iron/dark/small, /area/station/science/xenobiology) -"pAn" = ( -/obj/effect/turf_decal/siding/green{ - dir = 5 - }, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/iron/dark/herringbone, -/area/station/service/abandoned_gambling_den/gaming) "pAo" = ( /obj/structure/window/spawner/directional/south, /obj/effect/turf_decal/stripes/end{ @@ -44543,21 +46293,6 @@ }, /turf/open/floor/engine, /area/station/science/xenobiology) -"pAB" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/tile/neutral, -/turf/open/floor/iron, -/area/station/hallway/primary/central/fore) -"pAF" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/white/side{ - dir = 4 - }, -/area/station/science/lower) "pAH" = ( /obj/machinery/vending/coffee, /obj/effect/turf_decal/tile/neutral/fourcorners, @@ -44577,24 +46312,25 @@ }, /turf/open/floor/iron/smooth, /area/station/cargo/warehouse) -"pBe" = ( +"pAY" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/door/airlock{ - name = "Maintenance" - }, -/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, -/obj/effect/mapping_helpers/airlock/unres{ +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/blue{ dir = 4 }, -/turf/open/floor/plating, -/area/station/maintenance/central/lesser) -"pBn" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/station/commons/vacant_room/commissary) +/obj/structure/extinguisher_cabinet/directional/north, +/turf/open/floor/iron/white/corner{ + dir = 1 + }, +/area/station/hallway/secondary/dock) +"pBm" = ( +/obj/machinery/light/small/directional/west, +/turf/open/floor/iron/dark, +/area/station/security/interrogation) "pBu" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/turf_decal/tile/neutral{ @@ -44603,34 +46339,20 @@ /obj/structure/extinguisher_cabinet/directional/west, /turf/open/floor/iron, /area/station/hallway/primary/central/fore) -"pBx" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/mapping_helpers/broken_floor, -/obj/structure/broken_flooring/singular/directional/south, -/turf/open/floor/iron, -/area/station/maintenance/starboard/aft) "pBD" = ( /obj/effect/spawner/structure/window, /obj/structure/cable, /turf/open/floor/plating, /area/station/command/heads_quarters/qm) -"pBJ" = ( -/obj/effect/mapping_helpers/broken_floor, -/obj/machinery/airalarm/directional/north, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/button/door/directional/north{ - id = "vaco"; - name = "Comissary Shutters"; - pixel_x = 29 - }, -/turf/open/floor/wood/tile, -/area/station/commons/vacant_room/commissary) "pBN" = ( /obj/machinery/flasher/directional/east{ id = "justiceflash" }, /turf/open/floor/iron/dark/smooth_large, /area/station/security/execution/education) +"pBO" = ( +/turf/open/floor/iron/showroomfloor, +/area/station/service/barber) "pBT" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 4 @@ -44695,6 +46417,18 @@ }, /turf/open/floor/iron/dark/small, /area/station/security/brig) +"pCP" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/neutral/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/neutral/line, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/hallway/primary/central/fore) "pCQ" = ( /obj/machinery/power/smes/engineering, /obj/structure/cable, @@ -44712,15 +46446,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/aft) -"pCV" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/station/science/ordnance) -"pCX" = ( -/obj/structure/chair/stool/directional/west, -/obj/effect/landmark/start/clown, -/turf/open/floor/carpet/lone, -/area/station/service/theater) "pDr" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -44789,6 +46514,10 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/aft) +"pDX" = ( +/obj/structure/chair/stool/directional/east, +/turf/open/floor/iron/herringbone, +/area/station/commons/dorms) "pEa" = ( /obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden{ dir = 4 @@ -44799,16 +46528,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood, /area/station/engineering/atmos) -"pEb" = ( -/obj/structure/cable, -/obj/structure/chair/office{ - dir = 8 - }, -/obj/effect/mapping_helpers/broken_floor, -/obj/effect/decal/cleanable/dirt, -/obj/effect/landmark/start/lawyer, -/turf/open/floor/wood/tile, -/area/station/service/lawoffice) "pEo" = ( /obj/item/radio/intercom/directional/west, /obj/structure/disposalpipe/segment, @@ -44817,6 +46536,15 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/fore) +"pEq" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/junction/flip{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "pEs" = ( /obj/effect/turf_decal/siding/blue, /turf/open/floor/iron/white, @@ -44837,19 +46565,27 @@ }, /turf/open/floor/iron/dark, /area/station/medical/medbay/central) +"pEv" = ( +/obj/structure/railing, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/commons/dorms) "pEy" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 8 }, /turf/open/floor/iron, /area/station/science/robotics/lab) -"pEC" = ( -/obj/structure/disposalpipe/segment{ - dir = 5 - }, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/wood/parquet, -/area/station/service/library) +"pEB" = ( +/obj/effect/turf_decal/tile/dark_red/opposingcorners, +/turf/open/floor/iron, +/area/station/security/prison) +"pED" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden, +/turf/open/floor/iron/white/small, +/area/station/science/server) "pEL" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/turf_decal/tile/blue{ @@ -44857,31 +46593,23 @@ }, /turf/open/floor/iron/white, /area/station/medical/medbay/central) -"pFd" = ( -/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible{ - dir = 4 +"pEO" = ( +/obj/effect/turf_decal/trimline/neutral/line, +/obj/effect/turf_decal/trimline/neutral/line{ + dir = 1 }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/white/small, -/area/station/science/ordnance/storage) +/obj/machinery/navbeacon{ + codes_txt = "patrol;next_patrol=1.0-Security-PNexus"; + location = "23.2-Evac-Garden" + }, +/turf/open/floor/iron, +/area/station/hallway/primary/port) "pFk" = ( /obj/structure/broken_flooring/singular/directional/east, /obj/effect/decal/cleanable/dirt, /obj/structure/alien/weeds, /turf/open/floor/plating, /area/station/maintenance/starboard/greater) -"pFr" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/carpet/lone, -/area/station/service/theater) -"pFE" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/turf_decal/tile/yellow/half/contrasted, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/commons/storage/tools) "pFI" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -44945,6 +46673,16 @@ /obj/machinery/camera/autoname/directional/south, /turf/open/floor/iron, /area/station/hallway/secondary/dock) +"pGr" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/stripes/red/line, +/obj/effect/turf_decal/stripes/red/line{ + dir = 1 + }, +/obj/structure/cable, +/turf/open/floor/iron/small, +/area/station/hallway/primary/central/fore) "pGt" = ( /obj/machinery/atmospherics/components/binary/pump{ dir = 4; @@ -44952,21 +46690,6 @@ }, /turf/open/floor/iron/small, /area/station/engineering/atmos) -"pGu" = ( -/obj/structure/cable, -/obj/structure/table/wood, -/obj/effect/turf_decal/siding/wood{ - dir = 4 - }, -/obj/effect/mapping_helpers/broken_floor, -/obj/machinery/power/apc/auto_name/directional/east, -/obj/effect/decal/cleanable/dirt, -/obj/item/flashlight/lamp/green{ - pixel_x = 1; - pixel_y = 5 - }, -/turf/open/floor/wood/tile, -/area/station/service/lawoffice) "pGD" = ( /obj/structure/cable, /turf/open/floor/iron, @@ -44992,6 +46715,11 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/maintenance/department/prison) +"pGS" = ( +/obj/machinery/status_display/evac/directional/north, +/obj/machinery/camera/directional/north, +/turf/open/misc/dirt/jungle, +/area/station/service/chapel) "pGU" = ( /obj/effect/turf_decal/trimline/white/line{ dir = 5 @@ -45002,12 +46730,11 @@ /obj/machinery/light_switch/directional/north, /turf/open/floor/wood, /area/station/commons/fitness/recreation) -"pGX" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/station/commons) +"pHc" = ( +/obj/structure/window/spawner/directional/south, +/obj/structure/window/spawner/directional/east, +/turf/open/floor/iron/dark, +/area/station/commons/dorms) "pHe" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/door/firedoor, @@ -45023,6 +46750,14 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /turf/open/floor/iron/chapel, /area/station/maintenance/starboard/greater) +"pHl" = ( +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 8 + }, +/obj/machinery/chem_dispenser, +/obj/machinery/camera/autoname/directional/west, +/turf/open/floor/iron, +/area/station/medical/chemistry) "pHn" = ( /obj/structure/cable, /obj/structure/broken_flooring/singular/directional/east, @@ -45034,12 +46769,38 @@ /obj/item/storage/medkit/regular, /turf/open/floor/plating, /area/station/cargo/storage) +"pHq" = ( +/obj/machinery/camera/autoname/directional/south, +/obj/machinery/firealarm/directional/south, +/turf/open/floor/iron, +/area/station/hallway/secondary/entry) +"pHs" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/siding/red{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/turf/open/floor/iron, +/area/station/cargo/storage) "pHw" = ( /obj/structure/table, /obj/effect/decal/cleanable/dirt, /obj/item/airlock_painter, /turf/open/floor/iron, /area/station/commons/storage/art) +"pHA" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 6 + }, +/mob/living/basic/frog, +/obj/structure/flora/bush/flowers_br/style_3, +/obj/structure/flora/tree/jungle/small, +/turf/open/floor/grass, +/area/station/service/chapel) "pHC" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -45074,27 +46835,37 @@ }, /turf/open/floor/wood, /area/station/commons/fitness/recreation) -"pHN" = ( -/obj/effect/turf_decal/siding/wood, -/obj/structure/flora/bush/sunny/style_random, -/obj/machinery/newscaster/directional/south, -/turf/open/floor/grass, -/area/station/service/chapel) -"pHQ" = ( -/obj/machinery/atmospherics/pipe/smart/simple/dark/visible{ - dir = 4 +"pHY" = ( +/obj/effect/turf_decal/tile/red/opposingcorners, +/obj/effect/turf_decal/tile/blue/opposingcorners{ + dir = 8 }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/white/small, -/area/station/science/ordnance/storage) -"pHS" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/turf/open/floor/iron/dark, -/area/station/science/ordnance) +/obj/machinery/disposal/bin, +/obj/machinery/light_switch/directional/south, +/obj/machinery/camera/directional/south{ + c_tag = "Atmospherics - South" + }, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/turf/open/floor/iron/smooth, +/area/station/service/greenroom) "pId" = ( /obj/structure/reagent_dispensers/plumbed, /turf/open/floor/iron/kitchen/small, /area/station/security/prison/mess) +"pIf" = ( +/obj/structure/table, +/obj/machinery/light/small/directional/east, +/obj/item/clothing/head/utility/hardhat/welding{ + pixel_x = 7; + pixel_y = 13 + }, +/obj/item/clothing/shoes/cowboy/lizard{ + pixel_x = -2 + }, +/turf/open/floor/iron/dark/small, +/area/station/commons/fitness/locker_room) "pIi" = ( /obj/effect/mapping_helpers/broken_floor, /obj/structure/rack, @@ -45119,15 +46890,15 @@ }, /turf/open/floor/plating, /area/station/cargo/miningfoundry) -"pIm" = ( -/obj/structure/cable, +"pIn" = ( /obj/structure/disposalpipe/segment{ - dir = 9 + dir = 5 }, -/obj/effect/mapping_helpers/broken_floor, -/obj/structure/broken_flooring/singular/directional/east, -/turf/open/floor/plating, -/area/station/maintenance/starboard/aft) +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/maintenance/hallway/abandoned_command) "pIp" = ( /obj/machinery/light/small/directional/west, /obj/effect/turf_decal/stripes/white/line{ @@ -45145,6 +46916,12 @@ /obj/structure/extinguisher_cabinet/directional/north, /turf/open/floor/iron/dark, /area/station/engineering/atmos) +"pIC" = ( +/obj/effect/turf_decal/siding/thinplating_new/light{ + dir = 8 + }, +/turf/open/floor/iron/white/small, +/area/station/service/hydroponics) "pIS" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/door/poddoor/preopen{ @@ -45153,6 +46930,10 @@ }, /turf/open/floor/plating, /area/station/command/bridge) +"pJc" = ( +/obj/effect/turf_decal/siding/wood, +/turf/open/floor/stone, +/area/station/service/bar) "pJj" = ( /obj/structure/chair/sofa/bench/left{ dir = 1 @@ -45217,8 +46998,9 @@ /area/station/maintenance/port/fore) "pJT" = ( /obj/structure/lattice, -/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible/layer4{ - dir = 4 +/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible/layer5, +/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible{ + dir = 6 }, /turf/open/space/basic, /area/space/nearstation) @@ -45239,14 +47021,6 @@ dir = 8 }, /area/station/security/processing) -"pKj" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/iron, -/area/station/maintenance/hallway/abandoned_command) "pKm" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/delivery/red, @@ -45347,14 +47121,6 @@ }, /turf/open/floor/catwalk_floor/iron_smooth, /area/station/engineering/break_room) -"pLK" = ( -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/obj/effect/mapping_helpers/broken_floor, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/plating, -/area/station/maintenance/fore/greater) "pLZ" = ( /obj/machinery/vending/coffee, /obj/machinery/light/cold/directional/north, @@ -45364,24 +47130,11 @@ /obj/machinery/computer/security/telescreen/entertainment/directional/north, /turf/open/floor/iron/cafeteria, /area/station/hallway/secondary/exit/departure_lounge) -"pMg" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 9 - }, -/turf/open/floor/grass, -/area/station/service/chapel) "pMs" = ( /obj/structure/transit_tube/horizontal, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/maintenance/starboard/aft) -"pMu" = ( -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/siding/wood/corner{ - dir = 1 - }, -/turf/open/floor/grass, -/area/station/service/chapel) "pMA" = ( /obj/machinery/light/small/directional/east, /turf/open/floor/catwalk_floor/iron_dark, @@ -45419,12 +47172,12 @@ }, /turf/open/floor/plating, /area/station/engineering/gravity_generator) -"pNa" = ( +"pNh" = ( +/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/spawner/random/engineering/tracking_beacon, -/turf/open/floor/wood/parquet, -/area/station/service/library) +/turf/open/floor/iron, +/area/station/maintenance/fore/greater) "pNi" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -45438,25 +47191,20 @@ }, /turf/open/floor/wood/tile, /area/station/command/corporate_showroom) -"pNy" = ( -/obj/structure/disposalpipe/segment{ - dir = 9 - }, -/obj/effect/spawner/random/engineering/atmospherics_portable, -/turf/open/floor/plating, -/area/station/maintenance/port/greater) -"pNz" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/security/prison) "pNC" = ( /turf/open/floor/iron/dark/side{ dir = 1 }, /area/station/hallway/secondary/construction) +"pNF" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/structure/table, +/obj/item/stock_parts/subspace/filter, +/obj/item/stock_parts/subspace/filter, +/obj/item/stock_parts/subspace/filter, +/obj/item/stock_parts/subspace/filter, +/turf/open/floor/iron/dark, +/area/station/engineering/storage/tcomms) "pNO" = ( /obj/effect/turf_decal/siding{ dir = 1 @@ -45465,14 +47213,12 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron/white/small, /area/station/science/lab) -"pOb" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 5 +"pNZ" = ( +/obj/structure/sign/directions/dorms{ + dir = 4 }, -/obj/machinery/duct, -/turf/open/floor/plating, -/area/station/maintenance/port/greater) +/turf/closed/wall, +/area/station/commons/fitness/locker_room) "pOg" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -45499,18 +47245,6 @@ }, /turf/open/floor/iron/small, /area/station/engineering/main) -"pOj" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/door/airlock{ - name = "Maintenance" - }, -/obj/effect/mapping_helpers/airlock/access/any/service/general, -/obj/machinery/duct, -/turf/open/floor/plating, -/area/station/maintenance/port/greater) "pOm" = ( /obj/structure/window/reinforced/spawner/directional/west, /obj/effect/turf_decal/tile/blue/half/contrasted{ @@ -45524,14 +47258,6 @@ }, /turf/open/floor/iron/white, /area/station/medical/medbay/lobby) -"pOp" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/turf_decal/tile/purple/opposingcorners, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/cafeteria, -/area/station/science/circuits) "pOw" = ( /obj/effect/turf_decal/stripes/corner{ dir = 1 @@ -45561,24 +47287,34 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/maintenance/department/prison) -"pOK" = ( -/obj/structure/cable, +"pOM" = ( +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/stripes/red/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/red/line{ + dir = 8 + }, /obj/structure/disposalpipe/segment{ - dir = 10 + dir = 4 }, -/obj/machinery/duct, -/turf/open/floor/iron/kitchen/small, -/area/station/hallway/secondary/service) -"pOL" = ( -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/effect/mapping_helpers/broken_floor, -/obj/effect/decal/cleanable/glass/plastitanium, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/plating, -/area/station/maintenance/fore/greater) +/turf/open/floor/iron/small, +/area/station/hallway/primary/port) +"pOQ" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/machinery/camera/autoname/directional/east, +/obj/machinery/firealarm/directional/east, +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/turf/open/floor/wood/parquet, +/area/station/service/library) +"pOT" = ( +/turf/closed/wall, +/area/station/holodeck/rec_center) "pOX" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 1 @@ -45590,6 +47326,12 @@ /obj/effect/landmark/start/coroner, /turf/open/floor/iron/small, /area/station/medical/morgue) +"pPj" = ( +/obj/structure/mirror/directional/east, +/obj/structure/chair/stool/bar/directional/east, +/obj/machinery/light/small/directional/north, +/turf/open/floor/iron/showroomfloor, +/area/station/service/barber) "pPm" = ( /obj/item/kirbyplants/random, /obj/effect/turf_decal/stripes/corner{ @@ -45602,12 +47344,6 @@ /obj/item/airlock_painter, /turf/open/floor/iron/small, /area/station/engineering/atmos/storage/gas) -"pPq" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) "pPH" = ( /obj/machinery/door/airlock/public/glass{ name = "Atmospherics Project Bay" @@ -45619,30 +47355,18 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/smooth, /area/station/hallway/secondary/command) -"pPT" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/duct, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/central/fore) "pPZ" = ( /obj/structure/reagent_dispensers/fueltank, /turf/open/floor/plating, /area/station/maintenance/aft) -"pQe" = ( -/obj/structure/chair/sofa/left{ - dir = 4 - }, -/obj/machinery/airalarm/directional/west, -/turf/open/floor/wood/tile, -/area/station/service/bar) "pQj" = ( /obj/structure/disposalpipe/segment, /turf/open/floor/plating, /area/station/maintenance/department/engine) +"pQn" = ( +/obj/structure/sink/kitchen/directional/south, +/turf/open/floor/iron/kitchen/small, +/area/station/security/prison/mess) "pQr" = ( /obj/effect/turf_decal/siding/thinplating_new/light{ dir = 1 @@ -45673,6 +47397,15 @@ }, /turf/open/floor/iron/dark/side, /area/station/science/xenobiology) +"pRc" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/turf/open/floor/plating, +/area/station/maintenance/port/greater) "pRe" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/table/wood, @@ -45690,12 +47423,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/smooth, /area/station/hallway/secondary/command) -"pRD" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/holopad, -/turf/open/floor/iron, -/area/station/science/ordnance/testlab) "pRF" = ( /obj/structure/cable, /obj/machinery/light/cold/directional/south, @@ -45716,22 +47443,10 @@ /obj/effect/mapping_helpers/airlock/access/any/security/general, /turf/open/floor/iron/textured_half, /area/station/security/checkpoint/customs/auxiliary) -"pRP" = ( -/obj/machinery/icecream_vat, -/obj/effect/mapping_helpers/broken_floor, -/obj/machinery/light_switch/directional/west, -/turf/open/floor/iron/freezer, -/area/station/service/kitchen/coldroom) "pRQ" = ( /obj/effect/turf_decal/tile/blue/half/contrasted, /turf/open/floor/iron/white, /area/station/medical/medbay/lobby) -"pRU" = ( -/obj/machinery/gibber, -/obj/effect/turf_decal/bot_red, -/obj/item/radio/intercom/directional/south, -/turf/open/floor/iron/freezer, -/area/station/service/kitchen/coldroom) "pSc" = ( /obj/item/bikehorn/rubberducky{ pixel_x = 6; @@ -45751,46 +47466,12 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/maintenance/department/prison) -"pSf" = ( -/obj/machinery/power/apc/auto_name/directional/west, -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/commons/fitness/recreation/entertainment) -"pSm" = ( -/obj/effect/mapping_helpers/broken_floor, -/obj/effect/turf_decal/tile/yellow/anticorner/contrasted{ - dir = 8 - }, -/obj/structure/table, -/obj/item/reagent_containers/cup/beaker{ - pixel_x = 5; - pixel_y = 17 - }, -/obj/item/reagent_containers/syringe/epinephrine, -/obj/item/reagent_containers/syringe{ - pixel_x = -4; - pixel_y = 6 - }, -/obj/machinery/light/small/red/directional/west, -/turf/open/floor/iron/white, -/area/station/maintenance/central/greater) "pSq" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/sign/poster/official/random/directional/north, /obj/structure/broken_flooring/pile/directional/east, /turf/open/floor/plating, /area/station/hallway/secondary/dock) -"pSr" = ( -/obj/effect/turf_decal/tile/yellow/anticorner/contrasted, -/obj/structure/table, -/obj/item/reagent_containers/dropper{ - pixel_x = -5; - pixel_y = 5 - }, -/obj/item/crowbar/large/emergency, -/turf/open/floor/iron/white, -/area/station/maintenance/central/greater) "pSs" = ( /obj/structure/railing/corner{ dir = 1 @@ -45810,13 +47491,20 @@ /obj/machinery/light/small/directional/south, /turf/open/floor/iron/grimy, /area/station/service/library) -"pSK" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 6 +"pSN" = ( +/obj/item/radio/intercom/directional/south, +/obj/machinery/holopad, +/turf/open/floor/iron/dark/smooth_large, +/area/station/service/lawoffice) +"pSP" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 9 }, -/obj/structure/bookcase/random/adult, -/turf/open/floor/iron/grimy, -/area/station/service/library) +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/plating, +/area/station/maintenance/port/greater) "pSQ" = ( /obj/structure/cable, /turf/closed/wall, @@ -45830,32 +47518,19 @@ /obj/machinery/camera/autoname/directional/west, /turf/open/floor/iron, /area/station/engineering/storage/tech) -"pTc" = ( +"pTk" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/door/firedoor, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/red/line{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/red/line{ - dir = 8 +/obj/machinery/door/airlock{ + name = "Maintenance" }, -/turf/open/floor/iron/small, -/area/station/hallway/primary/port) -"pTl" = ( +/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/obj/effect/landmark/start/mime, -/obj/machinery/camera/autoname/directional/south, -/turf/open/floor/stone, -/area/station/service/theater) +/turf/open/floor/plating, +/area/station/holodeck/rec_center) "pTp" = ( /obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden{ dir = 4 @@ -45892,53 +47567,19 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark/smooth_large, /area/station/service/lawoffice) -"pTB" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/showroomfloor, -/area/station/commons/toilet/auxiliary) -"pTC" = ( -/obj/structure/disposalpipe/sorting/mail{ - dir = 1 - }, -/obj/effect/mapping_helpers/mail_sorting/service/theater, -/turf/open/floor/plating, -/area/station/maintenance/central/greater) -"pTH" = ( -/obj/item/radio/intercom/directional/south, -/obj/machinery/holopad, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark/smooth_large, -/area/station/service/lawoffice) -"pTM" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 10 - }, -/obj/machinery/light/small/directional/south, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/turf/open/floor/wood/tile, -/area/station/service/lawoffice) -"pTN" = ( -/obj/structure/cable, -/obj/effect/turf_decal/siding/wood, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/wood/tile, -/area/station/service/lawoffice) -"pTY" = ( -/obj/effect/turf_decal/trimline/white/line{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/white/mid_joiner{ - dir = 4 +"pTA" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/effect/spawner/random/entertainment/arcade, +/obj/effect/decal/cleanable/cobweb/cobweb2, +/turf/open/floor/iron, +/area/station/holodeck/rec_center) +"pTZ" = ( +/obj/effect/turf_decal/siding/wideplating/dark{ + dir = 8 }, /obj/effect/decal/cleanable/dirt, -/turf/open/floor/wood, -/area/station/commons/fitness/recreation) +/turf/open/floor/iron, +/area/station/commons/dorms) "pUc" = ( /obj/effect/turf_decal/tile/green, /turf/open/floor/iron/dark, @@ -45950,14 +47591,6 @@ /obj/machinery/light/small/directional/east, /turf/open/floor/engine/o2, /area/station/engineering/atmos/space_catwalk) -"pUl" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/public{ - name = "Public Garden" - }, -/turf/open/floor/iron/textured_half, -/area/station/service/hydroponics/garden) "pUs" = ( /obj/machinery/door/firedoor, /obj/effect/mapping_helpers/airlock/access/any/engineering/construction, @@ -45971,11 +47604,6 @@ }, /turf/open/floor/catwalk_floor, /area/station/engineering/break_room) -"pUt" = ( -/obj/structure/grille, -/obj/effect/decal/cleanable/glass, -/turf/open/floor/plating, -/area/station/service/hydroponics/garden) "pUx" = ( /obj/structure/closet/crate/freezer/blood, /obj/machinery/camera/autoname/directional/east, @@ -46019,15 +47647,6 @@ /obj/machinery/light/small/directional/east, /turf/open/floor/iron/dark, /area/station/command/corporate_dock) -"pUO" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/public{ - name = "Public Garden" - }, -/turf/open/floor/iron/textured_half, -/area/station/service/hydroponics/garden) "pUR" = ( /obj/structure/cable, /turf/open/floor/plating, @@ -46050,11 +47669,14 @@ /obj/machinery/firealarm/directional/west, /turf/open/floor/iron/white, /area/station/science/auxlab/firing_range) -"pVo" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/girder, -/turf/open/floor/plating, -/area/station/maintenance/fore/greater) +"pVj" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/station/hallway/primary/central/fore) "pVq" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/turf_decal/trimline/neutral/line{ @@ -46065,12 +47687,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/fore) -"pVr" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/broken_flooring/pile/directional/east, -/obj/effect/landmark/navigate_destination/dockescpod, -/turf/open/floor/plating, -/area/station/maintenance/department/medical/central) "pVK" = ( /obj/effect/mapping_helpers/broken_floor, /turf/closed/wall, @@ -46104,14 +47720,6 @@ }, /turf/open/floor/iron/dark/side, /area/station/science/xenobiology) -"pWc" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/camera/autoname/directional/south, -/obj/machinery/light/small/directional/south, -/turf/open/floor/iron/white/side{ - dir = 1 - }, -/area/station/science/xenobiology) "pWl" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -46131,6 +47739,12 @@ }, /turf/open/space/basic, /area/space/nearstation) +"pWB" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/turf/open/floor/iron/diagonal, +/area/station/command/heads_quarters/hop) "pWC" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment, @@ -46194,17 +47808,6 @@ }, /turf/open/space/basic, /area/space/nearstation) -"pWX" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/door/firedoor, -/obj/effect/mapping_helpers/airlock/access/any/service/janitor, -/obj/machinery/door/airlock/centcom{ - name = "Custodial Closet" - }, -/obj/structure/cable, -/turf/open/floor/iron/textured_half, -/area/station/service/janitor) "pWZ" = ( /obj/effect/turf_decal/siding/white{ dir = 9 @@ -46232,6 +47835,10 @@ /obj/effect/spawner/random/structure/girder, /turf/open/floor/tram, /area/station/maintenance/department/medical/central) +"pXk" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/wood/tile, +/area/station/maintenance/central/lesser) "pXo" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -46298,33 +47905,28 @@ /obj/structure/broken_flooring/pile/directional/east, /turf/open/floor/plating, /area/station/hallway/secondary/dock) -"pYb" = ( -/obj/effect/turf_decal/trimline/white/line{ - dir = 1 +"pXU" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 10 }, -/obj/effect/turf_decal/trimline/white/mid_joiner{ - dir = 1 +/turf/open/floor/plating, +/area/station/maintenance/central/greater) +"pYi" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 }, -/obj/structure/sign/poster/official/random/directional/north, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/cobweb, -/turf/open/floor/wood, -/area/station/commons/fitness/recreation) +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "pYr" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/turf_decal/tile/blue/half/contrasted, /turf/open/floor/iron/white, /area/station/medical/medbay/lobby) -"pYs" = ( -/obj/structure/cable, -/obj/effect/turf_decal/tile/purple/opposingcorners, -/obj/effect/turf_decal/siding/green/corner{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/cafeteria, -/area/station/science/circuits) "pYu" = ( /obj/machinery/door/airlock/external/glass, /obj/effect/mapping_helpers/broken_floor, @@ -46339,36 +47941,6 @@ }, /turf/open/floor/engine, /area/station/science/explab) -"pYE" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 8 - }, -/obj/structure/flora/bush/flowers_yw/style_random, -/obj/effect/landmark/start/hangover, -/turf/open/floor/grass, -/area/station/service/chapel) -"pYG" = ( -/obj/structure/disposalpipe/segment{ - dir = 5 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark/small, -/area/station/service/chapel/storage) -"pYK" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/door/airlock/public/glass{ - name = "Lavatorie" - }, -/turf/open/floor/iron/showroomfloor, -/area/station/commons/toilet/restrooms) -"pYM" = ( -/obj/effect/turf_decal/siding/green{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark/herringbone, -/area/station/service/abandoned_gambling_den/gaming) "pYP" = ( /obj/machinery/door/poddoor/preopen{ id = "atmos"; @@ -46384,18 +47956,25 @@ /obj/structure/cable, /turf/open/floor/iron/checker, /area/station/security/breakroom) -"pZl" = ( -/obj/structure/chair{ - dir = 8 +"pYZ" = ( +/turf/open/floor/iron/white/side{ + dir = 4 }, -/obj/effect/decal/cleanable/cobweb/cobweb2, -/obj/item/radio/intercom/directional/east, -/turf/open/floor/iron/cafeteria, -/area/station/science/breakroom) +/area/station/science/lower) "pZu" = ( /obj/structure/hedge, /turf/open/floor/plating, /area/station/cargo/storage) +"pZv" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central/fore) "pZz" = ( /obj/structure/rack, /obj/item/clothing/gloves/cargo_gauntlet{ @@ -46408,6 +47987,22 @@ /obj/machinery/airalarm/directional/south, /turf/open/floor/plating, /area/station/cargo/storage) +"pZJ" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/window/reinforced/spawner/directional/east, +/obj/machinery/atmospherics/components/binary/pump, +/obj/machinery/button/door/directional/north{ + id = "Xenolab"; + name = "Test Chamber Blast Doors"; + pixel_x = 26; + pixel_y = -2; + req_access = list("xenobiology") + }, +/turf/open/floor/iron/white/side{ + dir = 8 + }, +/area/station/science/xenobiology) "pZK" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -46419,44 +48014,18 @@ /obj/item/shard/titanium, /turf/open/floor/plating, /area/station/maintenance/department/engine/atmos) -"qaA" = ( -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/siding/wood{ - dir = 1 - }, -/turf/open/floor/wood/large, -/area/station/service/chapel) -"qaH" = ( -/obj/structure/cable, -/obj/effect/turf_decal/siding/dark_red/corner{ - dir = 1 - }, -/obj/structure/rack, -/obj/effect/spawner/random/armory/riot_helmet, -/obj/effect/spawner/random/armory/bulletproof_helmet, -/obj/item/gun/energy/e_gun/dragnet, -/turf/open/floor/iron/dark/small, -/area/station/ai_monitored/security/armory) -"qaO" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment, +"qaF" = ( +/obj/structure/sink/directional/south, +/obj/structure/mirror/directional/north, +/turf/open/floor/iron/white/small, +/area/station/maintenance/port/aft) +"qaV" = ( /obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/tile/dark_red/fourcorners, -/obj/effect/turf_decal/siding/wideplating/dark{ - dir = 1 + dir = 10 }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/security/brig/entrance) -"qbf" = ( -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/light/floor, -/turf/open/floor/iron/dark, -/area/station/science/server) +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/herringbone, +/area/station/commons/dorms) "qbj" = ( /obj/effect/turf_decal/tile/dark_red/opposingcorners, /obj/structure/closet/secure_closet/security/sec, @@ -46483,14 +48052,6 @@ /obj/machinery/airalarm/directional/west, /turf/open/floor/iron/checker, /area/station/security/breakroom) -"qbr" = ( -/obj/structure/flora/bush/flowers_pp/style_random, -/obj/effect/landmark/start/hangover, -/obj/effect/turf_decal/siding/wood{ - dir = 8 - }, -/turf/open/floor/grass, -/area/station/service/chapel) "qbv" = ( /obj/machinery/atmospherics/pipe/smart/simple/yellow/visible, /obj/structure/disposalpipe/segment{ @@ -46498,37 +48059,28 @@ }, /turf/open/floor/iron/small, /area/station/engineering/atmos) -"qbw" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/siding/red{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/cargo/storage) "qby" = ( /obj/structure/cable, /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/security/checkpoint/supply) -"qbC" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ +"qbA" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/white/small, +/area/station/service/hydroponics) +"qbB" = ( +/obj/effect/turf_decal/siding/wood{ dir = 1 }, -/turf/open/floor/iron/kitchen/small, -/area/station/hallway/secondary/service) +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/wood/parquet, +/area/station/service/library) "qbE" = ( /obj/item/stack/tile/catwalk_tile/iron, /turf/open/floor/plating, /area/station/maintenance/department/engine/atmos) -"qbK" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 4 - }, -/turf/open/floor/iron/kitchen/small, -/area/station/hallway/secondary/service) "qbN" = ( /obj/structure/cable, /obj/effect/turf_decal/tile/neutral/fourcorners, @@ -46565,22 +48117,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark/side, /area/station/hallway/secondary/construction) -"qcl" = ( -/obj/item/radio/intercom/directional/south, -/turf/open/floor/wood, -/area/station/hallway/secondary/service) -"qcq" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/simple/general/visible{ - dir = 6 - }, -/turf/open/floor/iron/white/side{ - dir = 9 - }, -/area/station/science/xenobiology) "qcr" = ( /obj/structure/flora/bush/flowers_yw/style_random, /mob/living/carbon/human/species/monkey, @@ -46592,6 +48128,15 @@ /obj/effect/landmark/navigate_destination/dockarrival, /turf/open/floor/iron, /area/station/hallway/secondary/entry) +"qcB" = ( +/obj/structure/sign/nanotrasen, +/turf/closed/wall, +/area/station/maintenance/central/greater) +"qcC" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/station/commons/fitness/recreation/entertainment) "qcF" = ( /obj/effect/spawner/structure/window, /turf/open/floor/plating, @@ -46612,44 +48157,16 @@ }, /turf/open/misc/sandy_dirt, /area/station/security/tram) -"qcY" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/turf/open/floor/iron/small, -/area/station/security/processing) -"qdm" = ( -/turf/open/floor/wood, -/area/station/hallway/secondary/service) -"qdp" = ( -/obj/structure/chair/sofa/right{ - dir = 4 - }, -/obj/effect/landmark/start/assistant, -/turf/open/floor/wood/tile, -/area/station/service/bar) -"qdr" = ( +"qdu" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/stairs{ - dir = 1 - }, -/area/station/engineering/storage/tech) +/turf/open/floor/iron/smooth, +/area/station/cargo/drone_bay) "qdv" = ( /obj/structure/cable, /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/maintenance/department/prison) -"qdC" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/neutral/full, -/obj/machinery/duct, -/turf/open/floor/iron/smooth_large, -/area/station/service/bar) "qdJ" = ( /obj/effect/turf_decal/stripes/line{ dir = 6 @@ -46678,6 +48195,22 @@ dir = 1 }, /area/station/hallway/primary/aft) +"qdN" = ( +/obj/machinery/status_display/ai/directional/north, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/iron, +/area/station/engineering/storage/tech) +"qdR" = ( +/obj/structure/toilet, +/obj/machinery/light/small/directional/west, +/obj/machinery/button/door/directional/east{ + id = "AuxToilet1"; + name = "Lock Control"; + normaldoorcontrol = 1; + specialfunctions = 4 + }, +/turf/open/floor/iron/showroomfloor, +/area/station/commons/toilet/auxiliary) "qdS" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -46692,26 +48225,15 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central/fore) -"qdW" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 5 +"qdZ" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 1 }, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating, -/area/station/maintenance/central/lesser) +/turf/open/floor/iron, +/area/station/maintenance/hallway/abandoned_command) "qei" = ( /turf/closed/wall, /area/station/science/ordnance/storage) -"qej" = ( -/obj/machinery/door/airlock/public/glass{ - name = "Library" - }, -/obj/machinery/door/firedoor, -/turf/open/floor/iron/textured_half{ - dir = 1 - }, -/area/station/service/library) "qen" = ( /obj/structure/table, /obj/item/clothing/gloves/boxing, @@ -46723,30 +48245,6 @@ /obj/structure/fluff/broken_canister_frame, /turf/open/misc/asteroid, /area/station/maintenance/department/engine/atmos) -"qey" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/spawner/random/trash, -/turf/open/floor/plating, -/area/station/maintenance/central/lesser) -"qez" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/white/small, -/area/station/science/ordnance/storage) -"qeO" = ( -/obj/structure/table, -/obj/item/circuitboard/machine/coffeemaker/impressa, -/obj/item/coffee_cartridge/decaf{ - pixel_y = 9 - }, -/turf/open/floor/plating, -/area/station/commons/vacant_room/commissary) "qeP" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -46773,13 +48271,6 @@ }, /turf/open/floor/iron/diagonal, /area/station/engineering/lobby) -"qfb" = ( -/obj/effect/mapping_helpers/broken_floor, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/turf/open/floor/wood/parquet, -/area/station/service/library) "qfn" = ( /obj/effect/turf_decal/siding/purple{ dir = 9 @@ -46822,12 +48313,6 @@ /obj/effect/mapping_helpers/airlock/access/any/service/lawyer, /turf/open/floor/iron/dark/textured_half, /area/station/service/lawoffice) -"qfF" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/wood/parquet, -/area/station/service/library) "qfV" = ( /obj/machinery/vending/tool, /obj/structure/sign/poster/official/random/directional/south, @@ -46854,14 +48339,6 @@ }, /turf/open/floor/iron, /area/station/science/lower) -"qgr" = ( -/obj/structure/disposalpipe/segment{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/wood/parquet, -/area/station/service/library) "qgs" = ( /obj/structure/cable, /obj/item/kirbyplants/random/fullysynthetic, @@ -46889,24 +48366,12 @@ /obj/effect/mapping_helpers/airlock/access/any/service/lawyer, /turf/open/floor/plating, /area/station/maintenance/starboard/lesser) -"qgA" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/landmark/start/hangover, -/turf/open/floor/wood/parquet, -/area/station/service/library) -"qgH" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/turf/open/floor/wood/parquet, -/area/station/service/library) +"qgJ" = ( +/obj/machinery/light/dim/directional/west, +/obj/machinery/duct, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/white/small, +/area/station/commons/toilet/restrooms) "qgK" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -46915,26 +48380,6 @@ /obj/machinery/firealarm/directional/south, /turf/open/floor/iron/smooth, /area/station/commons/storage/tools) -"qgN" = ( -/obj/structure/disposalpipe/segment{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/landmark/event_spawn, -/obj/structure/cable, -/turf/open/floor/wood/parquet, -/area/station/service/library) -"qgR" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/chair/office{ - dir = 4 - }, -/obj/effect/mapping_helpers/broken_floor, -/obj/machinery/holopad, -/turf/open/floor/wood/parquet, -/area/station/service/library) "qhh" = ( /obj/structure/cable, /obj/structure/table/glass, @@ -46953,39 +48398,6 @@ /obj/machinery/power/apc/auto_name/directional/north, /turf/open/floor/iron/white, /area/station/science/cytology) -"qhm" = ( -/obj/structure/table, -/obj/item/storage/crayons, -/turf/open/floor/wood/parquet, -/area/station/service/library) -"qho" = ( -/obj/structure/table, -/obj/item/flashlight/lantern, -/obj/effect/mapping_helpers/broken_floor, -/obj/item/radio/intercom/directional/east, -/turf/open/floor/wood/parquet, -/area/station/service/library) -"qhp" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 10 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/station/maintenance/central/greater) -"qhq" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/structure/closet/secure_closet/personal, -/obj/item/storage/backpack, -/obj/item/storage/backpack/satchel, -/obj/item/clothing/suit/hooded/wintercoat, -/obj/item/clothing/shoes/winterboots, -/obj/effect/landmark/start/hangover/closet, -/obj/structure/sign/poster/official/random/directional/north, -/turf/open/floor/iron, -/area/station/commons) "qhs" = ( /obj/structure/cable, /obj/effect/turf_decal/tile/red/opposingcorners, @@ -47047,6 +48459,18 @@ }, /turf/open/floor/iron, /area/station/engineering/atmos/pumproom) +"qie" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/station/hallway/primary/central/aft) "qin" = ( /obj/docking_port/stationary/escape_pod, /turf/open/space/basic, @@ -47066,10 +48490,6 @@ }, /turf/open/space/basic, /area/space/nearstation) -"qiw" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/commons/storage/art) "qiy" = ( /obj/machinery/door/airlock/research/glass{ name = "Cytology Lab" @@ -47082,6 +48502,26 @@ /obj/effect/spawner/structure/window, /turf/open/floor/plating, /area/station/commons/storage/tools) +"qiC" = ( +/obj/effect/turf_decal/tile/green/opposingcorners, +/obj/effect/turf_decal/tile/blue/opposingcorners{ + dir = 8 + }, +/obj/machinery/hydroponics/constructable, +/turf/open/floor/iron, +/area/station/service/hydroponics) +"qiI" = ( +/obj/structure/cable, +/obj/effect/spawner/random/structure/steam_vent, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/turf/open/floor/plating, +/area/station/maintenance/central/greater) +"qiL" = ( +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/station/maintenance/department/medical/central) "qiM" = ( /obj/structure/table, /turf/open/floor/iron/cafeteria, @@ -47094,29 +48534,10 @@ }, /turf/open/floor/plating, /area/station/tcommsat/server) -"qiO" = ( -/obj/structure/table, -/obj/machinery/cell_charger{ - pixel_y = 5 - }, -/obj/item/stock_parts/cell/high, -/turf/open/floor/engine, -/area/station/science/xenobiology) "qjh" = ( /obj/machinery/light_switch/directional/west, /turf/open/floor/iron/white, /area/station/science/auxlab/firing_range) -"qji" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/door/airlock/public/glass{ - name = "Dormatories" - }, -/obj/machinery/door/firedoor, -/turf/open/floor/iron/textured_half{ - dir = 8 - }, -/area/station/commons/dorms) "qjk" = ( /obj/structure/closet/emcloset, /obj/effect/turf_decal/tile/red/opposingcorners{ @@ -47142,6 +48563,17 @@ /obj/effect/turf_decal/stripes/white/full, /turf/open/floor/engine, /area/station/engineering/supermatter) +"qjt" = ( +/obj/structure/cable, +/obj/effect/turf_decal/trimline/neutral/line, +/obj/effect/turf_decal/trimline/neutral/line{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/port) "qju" = ( /obj/structure/cable, /obj/machinery/door/poddoor/preopen{ @@ -47203,18 +48635,6 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/starboard/greater) -"qkv" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/light/floor, -/turf/open/floor/wood/large, -/area/station/service/chapel) -"qkw" = ( -/obj/machinery/light/floor, -/turf/open/floor/wood/large, -/area/station/service/chapel) -"qkF" = ( -/turf/open/floor/iron, -/area/station/commons) "qkI" = ( /obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ dir = 1 @@ -47253,14 +48673,6 @@ }, /turf/open/space/basic, /area/space/nearstation) -"qll" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 8 - }, -/obj/structure/sign/departments/restroom/directional/east, -/obj/machinery/camera/autoname/directional/east, -/turf/open/floor/iron, -/area/station/commons) "qlr" = ( /obj/machinery/airalarm/directional/east, /turf/open/floor/iron, @@ -47296,27 +48708,12 @@ /obj/machinery/light/cold/directional/north, /turf/open/floor/iron, /area/station/hallway/primary/central/fore) -"qma" = ( -/obj/structure/closet/firecloset, -/obj/machinery/light/small/dim/directional/west, -/turf/open/floor/plating, -/area/station/maintenance/aft) "qmb" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/broken_flooring/corner/directional/south, /turf/open/floor/plating, /area/station/hallway/secondary/dock) -"qme" = ( -/obj/item/kirbyplants/random, -/turf/open/floor/wood/tile, -/area/station/service/bar) -"qmf" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/light/cold/directional/east, -/turf/open/floor/carpet/lone, -/area/station/service/theater) "qmo" = ( /obj/structure/lattice/catwalk, /obj/structure/railing{ @@ -47325,13 +48722,6 @@ /obj/structure/cable, /turf/open/space/basic, /area/space/nearstation) -"qmr" = ( -/obj/effect/turf_decal/siding/red{ - dir = 9 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/small, -/area/station/security/brig) "qmv" = ( /obj/machinery/door/airlock/maintenance{ name = "Atmospherics Maintenance" @@ -47339,43 +48729,16 @@ /obj/effect/mapping_helpers/airlock/access/any/engineering/construction, /turf/open/floor/plating, /area/station/maintenance/department/engine/atmos) -"qmx" = ( -/obj/structure/table/wood, -/obj/effect/turf_decal/tile/neutral/full, -/obj/effect/turf_decal/siding/wood{ - dir = 8 - }, -/obj/item/storage/fancy/cigarettes/cigars/cohiba{ - pixel_x = 2; - pixel_y = 10 - }, -/turf/open/floor/iron/smooth_large, -/area/station/service/bar) "qmz" = ( /obj/structure/table/wood, /turf/open/floor/wood, /area/station/cargo/boutique) -"qmB" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 +"qmM" = ( +/obj/structure/sign/painting/library{ + pixel_y = 32 }, -/obj/machinery/camera/directional/east, -/turf/open/floor/iron/showroomfloor, -/area/station/commons/toilet/restrooms) -"qmI" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/brown/full, -/obj/machinery/duct, -/turf/open/floor/iron/smooth_large, -/area/station/service/bar) -"qmO" = ( -/obj/effect/turf_decal/tile/neutral/full, -/obj/machinery/duct, -/turf/open/floor/iron/smooth_large, -/area/station/service/bar) +/turf/open/floor/iron/smooth, +/area/station/service/library) "qmZ" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -47384,6 +48747,21 @@ }, /turf/open/floor/iron/dark/small, /area/station/medical/chemistry) +"qnb" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/structure/table, +/obj/machinery/door/poddoor/shutters{ + dir = 4; + id = "vaco"; + name = "Comissary Shutters" + }, +/turf/open/floor/plating, +/area/station/maintenance/central/lesser) "qnc" = ( /obj/machinery/door/airlock/external{ name = "Labor Camp Shuttle Airlock"; @@ -47395,26 +48773,6 @@ }, /turf/open/floor/iron/dark/small, /area/station/security/processing) -"qnj" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/mapping_helpers/broken_floor, -/obj/effect/decal/cleanable/dirt, -/obj/effect/landmark/event_spawn, -/turf/open/floor/iron/small, -/area/station/commons/fitness/locker_room) -"qnn" = ( -/obj/item/kirbyplants/random, -/obj/effect/turf_decal/siding/thinplating_new/light{ - dir = 4 - }, -/obj/machinery/light/small/directional/east, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/turf/open/floor/iron/small, -/area/station/commons/fitness/locker_room) "qnt" = ( /obj/structure/cable, /obj/machinery/power/solar{ @@ -47423,60 +48781,24 @@ }, /turf/open/floor/iron/solarpanel/airless, /area/station/solars/starboard/fore) -"qnu" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/siding/wood{ - dir = 1 - }, -/obj/effect/turf_decal/siding/wood, -/obj/machinery/door/airlock/public/glass{ - name = "Chapel Office" - }, -/obj/machinery/door/firedoor, -/obj/effect/mapping_helpers/airlock/access/all/service/chapel_office, -/turf/open/floor/iron/textured_half, -/area/station/service/chapel/office) -"qnx" = ( -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating, -/area/station/maintenance/department/science/xenobiology) -"qnz" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 1 - }, -/obj/effect/turf_decal/tile/dark_red/half/contrasted, -/turf/open/floor/iron, -/area/station/hallway/primary/port) -"qnA" = ( -/obj/structure/table, -/obj/machinery/door/poddoor/shutters/preopen{ - dir = 8; - id = "barki"; - name = "Shutters" - }, -/turf/open/floor/catwalk_floor/iron, -/area/station/service/kitchen) "qnJ" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/airalarm/directional/east, /turf/open/floor/iron/white/small, /area/station/science/ordnance/storage) -"qnL" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/duct, -/turf/open/floor/iron/cafeteria, -/area/station/service/kitchen) +"qnP" = ( +/obj/effect/turf_decal/weather/snow/corner{ + dir = 9 + }, +/obj/effect/turf_decal/weather/snow, +/obj/structure/closet/secure_closet/freezer/meat, +/obj/effect/turf_decal/weather/snow/corner, +/obj/item/food/meat/slab/monkey, +/obj/item/food/meat/slab/monkey, +/obj/item/food/meat/slab/monkey, +/turf/open/floor/iron/freezer, +/area/station/service/kitchen/coldroom) "qoj" = ( /obj/structure/disposalpipe/segment, /obj/machinery/door/window/right/directional/west{ @@ -47493,16 +48815,19 @@ }, /turf/open/floor/engine, /area/station/engineering/atmos) -"qon" = ( -/obj/machinery/vending/wardrobe/chef_wardrobe, -/obj/structure/extinguisher_cabinet/directional/north, -/turf/open/floor/iron/cafeteria, -/area/station/service/kitchen) "qop" = ( /obj/structure/cable, /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/space/nearstation) +"qow" = ( +/obj/machinery/door/airlock{ + name = "Maintenance" + }, +/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/commons/dorms) "qoA" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 1 @@ -47513,12 +48838,18 @@ "qoD" = ( /turf/closed/wall/r_wall, /area/station/command/corporate_showroom) -"qpg" = ( -/obj/effect/turf_decal/plaque{ - icon_state = "L3" +"qpe" = ( +/obj/structure/disposalpipe/trunk{ + dir = 8 }, -/turf/open/floor/glass, -/area/station/hallway/secondary/spacebridge) +/obj/structure/disposaloutlet{ + dir = 1 + }, +/obj/item/radio/intercom/directional/south, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/stripes/box, +/turf/open/floor/iron/white/small, +/area/station/service/janitor) "qpu" = ( /obj/effect/turf_decal/siding/brown{ dir = 9 @@ -47542,13 +48873,6 @@ /obj/item/restraints/handcuffs, /turf/open/floor/iron/smooth, /area/station/security/checkpoint/escape) -"qpX" = ( -/obj/machinery/door/airlock{ - name = "Kitchen" - }, -/obj/effect/mapping_helpers/airlock/access/all/service/kitchen, -/turf/open/floor/catwalk_floor/flat_white, -/area/station/service/kitchen) "qqd" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -47556,50 +48880,13 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/maintenance/department/science/xenobiology) -"qqh" = ( -/obj/structure/cable, -/obj/effect/mapping_helpers/broken_floor, -/obj/machinery/power/apc/auto_name/directional/north, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/obj/structure/table, -/turf/open/floor/iron/freezer, -/area/station/service/kitchen/coldroom) -"qqp" = ( -/obj/effect/turf_decal/tile/blue, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/camera/autoname/directional/south, -/turf/open/floor/iron/white/corner{ - dir = 8 - }, -/area/station/hallway/secondary/dock) -"qqq" = ( -/obj/effect/turf_decal/tile/green/diagonal_centre, -/obj/machinery/light/small/directional/north, -/obj/machinery/status_display/ai/directional/north, -/turf/open/floor/iron/diagonal, -/area/station/hallway/primary/central/aft) "qqr" = ( -/obj/machinery/atmospherics/components/binary/pump/off/general/visible/layer5{ - dir = 4; - name = "Air to Pure" - }, -/obj/machinery/atmospherics/pipe/smart/simple/cyan/hidden, -/obj/machinery/atmospherics/components/binary/pump{ - dir = 4; - name = "N2 to Pure" - }, -/obj/machinery/atmospherics/components/binary/pump/off/general/visible/layer1{ +/obj/machinery/atmospherics/components/binary/pump/off/general/visible{ dir = 4; - name = "O2 to Pure" + name = "O2 to pure" }, /turf/open/floor/iron/dark, /area/station/engineering/atmos) -"qqx" = ( -/obj/structure/bed/maint, -/turf/open/floor/eighties/red, -/area/station/service/abandoned_gambling_den/gaming) "qqC" = ( /obj/structure/chair/comfy/carp{ dir = 1 @@ -47607,6 +48894,16 @@ /obj/machinery/light/floor, /turf/open/floor/glass/reinforced, /area/station/command/bridge) +"qqH" = ( +/obj/effect/spawner/random/entertainment/arcade{ + dir = 4 + }, +/obj/effect/turf_decal/siding/thinplating{ + dir = 8 + }, +/obj/item/radio/intercom/directional/west, +/turf/open/floor/eighties/red, +/area/station/hallway/primary/central/fore) "qqJ" = ( /obj/effect/turf_decal/stripes/line{ dir = 6 @@ -47620,6 +48917,21 @@ dir = 1 }, /area/station/engineering/supermatter/room) +"qqO" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/stripes/red/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/red/line{ + dir = 4 + }, +/turf/open/floor/iron/small, +/area/station/hallway/primary/central/aft) "qrb" = ( /obj/structure/sign/warning/biohazard, /turf/closed/wall/r_wall, @@ -47646,51 +48958,16 @@ }, /turf/open/floor/iron/dark/small, /area/station/command/heads_quarters/captain/private) -"qrh" = ( -/obj/effect/mapping_helpers/broken_floor, -/obj/machinery/light/small/directional/west, -/turf/open/floor/iron/dark/small, -/area/station/hallway/secondary/dock) "qrm" = ( /obj/structure/cable, /obj/machinery/power/apc/auto_name/directional/south, /turf/open/floor/eighties, /area/station/service/abandoned_gambling_den/gaming) -"qrw" = ( -/obj/effect/turf_decal/tile/red/opposingcorners{ - dir = 1 - }, -/obj/item/trash/popcorn{ - pixel_x = 17; - pixel_y = 14 - }, -/turf/open/floor/iron/cafeteria, -/area/station/service/cafeteria) "qrB" = ( /obj/structure/cable, /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/science/xenobiology) -"qrI" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/textured_half{ - dir = 1 - }, -/area/station/service/cafeteria) -"qrN" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/siding/wood{ - dir = 9 - }, -/turf/open/floor/iron/grimy, -/area/station/service/theater) -"qrR" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/neutral, -/turf/open/floor/iron, -/area/station/hallway/secondary/recreation) "qsa" = ( /obj/effect/turf_decal/stripes/line, /obj/machinery/camera/directional/south{ @@ -47717,39 +48994,12 @@ /obj/effect/landmark/blobstart, /turf/open/floor/iron, /area/station/hallway/secondary/construction) -"qsu" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/iron, -/area/station/maintenance/department/medical/central) -"qsA" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/siding/wood, -/obj/effect/turf_decal/siding/wood{ - dir = 1 - }, -/obj/machinery/airalarm/directional/north, -/turf/open/floor/iron/grimy, -/area/station/service/theater) "qsR" = ( /obj/structure/table/reinforced, /obj/effect/mapping_helpers/broken_floor, /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/kitchen/small, /area/station/security/prison/mess) -"qsU" = ( -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/obj/effect/mapping_helpers/broken_floor, -/obj/effect/spawner/random/trash, -/turf/open/floor/plating, -/area/station/maintenance/department/science/xenobiology) "qsV" = ( /obj/machinery/atmospherics/pipe/heat_exchanging/manifold/layer2{ dir = 8 @@ -47759,20 +49009,17 @@ }, /turf/open/floor/engine/vacuum, /area/station/science/ordnance/freezerchamber) +"qsY" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 10 + }, +/obj/machinery/light/floor, +/obj/structure/table/wood, +/turf/open/floor/iron/grimy, +/area/station/service/bar) "qtd" = ( /turf/open/floor/wood/tile, /area/station/command/corporate_showroom) -"qtg" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/hallway/secondary/entry) -"qtl" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/station/hallway/secondary/spacebridge) "qto" = ( /obj/structure/disposalpipe/segment, /obj/effect/turf_decal/tile/brown/half/contrasted{ @@ -47837,22 +49084,6 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/fore/lesser) -"qtW" = ( -/obj/structure/window/reinforced/spawner/directional/south, -/turf/open/floor/iron/stairs{ - dir = 8 - }, -/area/station/service/theater) -"quc" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/commons/dorms) -"qui" = ( -/obj/machinery/camera/autoname/directional/north, -/turf/open/floor/wood/parquet, -/area/station/service/theater) "qul" = ( /obj/machinery/light/small/directional/east, /obj/machinery/light_switch/directional/east, @@ -47865,13 +49096,6 @@ }, /turf/open/floor/iron/smooth, /area/station/cargo/warehouse) -"quo" = ( -/obj/structure/sign/poster/official/random/directional/north, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/turf/open/floor/wood/parquet, -/area/station/service/theater) "quq" = ( /obj/effect/turf_decal/stripes/line, /obj/structure/closet/crate/cardboard, @@ -47894,12 +49118,6 @@ }, /turf/open/floor/iron/dark/small, /area/station/maintenance/aft) -"quJ" = ( -/obj/effect/turf_decal/siding/wood, -/obj/machinery/light/small/directional/south, -/obj/structure/flora/tree/jungle/small/style_random, -/turf/open/floor/grass, -/area/station/service/chapel) "quO" = ( /obj/structure/reagent_dispensers/wall/peppertank/directional/east, /obj/effect/turf_decal/tile/red/half/contrasted{ @@ -47933,17 +49151,16 @@ }, /turf/open/floor/iron/small, /area/station/engineering/atmos) -"quS" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/mapping_helpers/broken_floor, -/obj/machinery/light_switch/directional/east, -/turf/open/floor/wood/parquet, -/area/station/service/theater) "quU" = ( /turf/closed/wall/r_wall, /area/station/command/heads_quarters/captain) +"qva" = ( +/obj/machinery/door/airlock{ + name = "Unit B"; + id_tag = "Toilet3" + }, +/turf/open/floor/iron/white/small, +/area/station/commons/toilet/restrooms) "qvr" = ( /obj/structure/closet/firecloset, /turf/open/floor/plating, @@ -47959,30 +49176,11 @@ /obj/machinery/light/small/directional/east, /turf/open/floor/iron, /area/station/security/courtroom) -"qvD" = ( -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/wood/tile, -/area/station/commons/vacant_room/commissary) "qvL" = ( /obj/effect/turf_decal/siding/wood, /obj/item/kirbyplants/random, /turf/open/floor/iron/grimy, /area/station/hallway/secondary/entry) -"qvM" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/broken_flooring/pile/directional/east, -/turf/open/floor/plating, -/area/station/hallway/secondary/recreation) -"qvQ" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/firealarm/directional/north, -/obj/machinery/light_switch/directional/south, -/turf/open/floor/iron/dark/small, -/area/station/service/chapel/storage) "qwa" = ( /obj/effect/turf_decal/trimline/blue/filled/corner{ dir = 8 @@ -47995,12 +49193,6 @@ /obj/structure/tank_holder/emergency_oxygen, /turf/open/floor/plating/elevatorshaft, /area/station/engineering/atmos) -"qwn" = ( -/obj/structure/cable, -/obj/effect/mapping_helpers/broken_floor, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/plating, -/area/station/maintenance/fore/lesser) "qwo" = ( /obj/structure/lattice, /obj/machinery/camera/directional/north{ @@ -48045,13 +49237,9 @@ /obj/effect/turf_decal/siding/wideplating/dark, /turf/open/floor/iron, /area/station/security) -"qwG" = ( -/obj/item/kirbyplants/random/fullysynthetic, -/obj/effect/decal/cleanable/glass, -/obj/machinery/airalarm/directional/north, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/station/service/lawoffice) +"qwK" = ( +/turf/open/floor/carpet/lone, +/area/station/service/chapel/office) "qwU" = ( /obj/effect/turf_decal/siding/wood, /obj/structure/table/glass, @@ -48065,15 +49253,6 @@ }, /turf/open/floor/iron/solarpanel/airless, /area/station/solars/port) -"qxh" = ( -/obj/structure/disposalpipe/segment{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/station/service/lawoffice) "qxi" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -48082,29 +49261,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/medical/medbay/central) -"qxj" = ( -/obj/structure/disposalpipe/trunk{ - dir = 8 - }, -/obj/machinery/disposal/bin, -/obj/effect/turf_decal/bot, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/iron/dark, -/area/station/service/lawoffice) -"qxk" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/mapping_helpers/broken_floor, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/station/maintenance/central/lesser) -"qxn" = ( -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/security/prison/workout) "qxv" = ( /obj/structure/disposalpipe/segment, /obj/effect/turf_decal/tile/dark_red/half/contrasted{ @@ -48114,11 +49270,6 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/security) -"qxw" = ( -/obj/structure/table/wood, -/obj/item/restraints/handcuffs/fake, -/turf/open/floor/plating, -/area/station/maintenance/fore/greater) "qxz" = ( /obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ @@ -48126,14 +49277,30 @@ }, /turf/open/floor/iron/small, /area/station/engineering/atmos) -"qxF" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +"qxB" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/station/tcommsat/server) +"qxF" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ dir = 4 }, /turf/open/floor/plating/elevatorshaft, /area/station/engineering/break_room) +"qxG" = ( +/obj/structure/table, +/obj/item/storage/bag/tray, +/obj/item/knife/kitchen{ + pixel_y = 2 + }, +/obj/effect/spawner/random/food_or_drink/cake_ingredients, +/obj/item/kitchen/rollingpin, +/turf/open/floor/iron/kitchen/small, +/area/station/service/kitchen) "qxN" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -48223,14 +49390,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/central/lesser) -"qzc" = ( -/obj/structure/cable, -/obj/machinery/door/airlock/sandstone{ - name = "The Rat's Den" - }, -/obj/effect/mapping_helpers/airlock/abandoned, -/turf/open/floor/wood, -/area/station/service/abandoned_gambling_den) "qzi" = ( /obj/structure/cable, /obj/effect/spawner/random/maintenance, @@ -48263,22 +49422,33 @@ /obj/effect/turf_decal/tile/dark_red/half/contrasted, /turf/open/floor/iron, /area/station/security/tram) -"qzw" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 1 +"qzt" = ( +/obj/structure/window/spawner/directional/east, +/obj/structure/window/spawner/directional/west, +/obj/structure/flora/bush/large/style_2, +/obj/structure/flora/bush/sparsegrass, +/obj/structure/flora/bush/flowers_yw, +/turf/open/floor/grass, +/area/station/service/hydroponics) +"qzv" = ( +/obj/structure/table, +/obj/item/canvas{ + pixel_x = 13; + pixel_y = 12 }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark/side{ - dir = 1 +/obj/item/canvas, +/obj/item/canvas{ + pixel_x = 4; + pixel_y = 16 + }, +/obj/item/canvas{ + pixel_y = 15 + }, +/obj/item/canvas{ + pixel_x = 6 }, -/area/station/science/xenobiology) -"qzC" = ( -/obj/effect/mapping_helpers/broken_floor, -/obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, -/area/station/commons) +/area/station/commons/storage/art) "qzD" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -48308,6 +49478,10 @@ /obj/structure/steam_vent, /turf/open/floor/plating, /area/station/maintenance/fore/greater) +"qzP" = ( +/obj/effect/turf_decal/weather/dirt, +/turf/open/floor/grass, +/area/station/service/chapel) "qzT" = ( /obj/item/bikehorn/rubberducky{ pixel_x = -6; @@ -48324,6 +49498,10 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/maintenance/starboard/greater) +"qAj" = ( +/obj/machinery/bluespace_vendor/directional/north, +/turf/open/floor/iron, +/area/station/commons/dorms) "qAn" = ( /obj/structure/disposalpipe/segment{ dir = 6 @@ -48355,16 +49533,26 @@ /obj/effect/turf_decal/stripes/red/line, /turf/open/floor/iron/small, /area/station/hallway/secondary/exit/departure_lounge) -"qAE" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/landmark/generic_maintenance_landmark, -/obj/structure/table, -/turf/open/floor/plating, -/area/station/maintenance/port/greater) +"qAt" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/machinery/firealarm/directional/north, +/turf/open/floor/iron, +/area/station/hallway/secondary/recreation) +"qAJ" = ( +/obj/effect/spawner/random/structure/closet_private, +/obj/machinery/light/small/directional/east, +/turf/open/floor/carpet/purple, +/area/station/commons/dorms) "qAQ" = ( /obj/machinery/light/small/directional/east, /obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored/helium_output{ - dir = 8 + dir = 8; + name = "N2O tank output inlet" }, /turf/open/floor/engine/n2o, /area/station/ai_monitored/turret_protected/ai) @@ -48400,30 +49588,10 @@ /obj/machinery/light/small/directional/north, /turf/open/floor/catwalk_floor/flat_white, /area/station/science/robotics/augments) -"qBg" = ( -/obj/structure/cable, -/obj/structure/table/reinforced, -/obj/item/flashlight{ - pixel_x = 1; - pixel_y = 5 - }, -/obj/item/assembly/flash/handheld, -/obj/item/ai_module/reset{ - pixel_y = 14 - }, -/obj/effect/mapping_helpers/broken_floor, -/obj/machinery/camera/autoname/directional/south, -/turf/open/floor/iron, -/area/station/engineering/storage/tech) "qBi" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/security/tram) -"qBj" = ( -/obj/effect/turf_decal/siding/wood, -/obj/structure/barricade/wooden/crude, -/turf/open/floor/plating, -/area/station/cargo/boutique) "qBl" = ( /obj/machinery/camera/directional/north{ c_tag = "Holodeck - Fore"; @@ -48433,35 +49601,19 @@ name = "Holodeck Projector Floor" }, /area/station/holodeck/rec_center) -"qBy" = ( -/obj/effect/turf_decal/plaque{ - icon_state = "L5" - }, -/obj/effect/turf_decal/tile/neutral{ +"qBn" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ dir = 4 }, /turf/open/floor/iron, -/area/station/hallway/secondary/spacebridge) +/area/station/hallway/primary/central/aft) "qBz" = ( /obj/effect/turf_decal/siding/wood, /obj/structure/mannequin/plastic, /obj/machinery/light/small/directional/east, /turf/open/floor/plating, /area/station/cargo/boutique) -"qBD" = ( -/obj/effect/turf_decal/stripes/line, -/obj/machinery/computer/security/telescreen{ - desc = "Used for watching the turbine vent."; - dir = 1; - name = "turbine vent monitor"; - network = list("turbine"); - pixel_y = -28 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/turf/open/floor/iron/smooth, -/area/station/maintenance/disposal/incinerator) "qBG" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -48503,17 +49655,11 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /turf/open/floor/iron, /area/station/hallway/secondary/dock) -"qCg" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 4 - }, -/obj/structure/flora/bush/flowers_br/style_random, -/turf/open/floor/grass, -/area/station/service/chapel) -"qCi" = ( -/obj/structure/disposalpipe/segment, -/turf/open/floor/wood/large, -/area/station/service/chapel) +"qCj" = ( +/obj/machinery/airalarm/directional/south, +/obj/item/kirbyplants/organic/applebush, +/turf/open/floor/wood/tile, +/area/station/command/corporate_showroom) "qCq" = ( /obj/structure/cable, /obj/structure/window/reinforced/spawner/directional/north, @@ -48543,9 +49689,13 @@ }, /turf/open/floor/iron/large, /area/station/command/heads_quarters/hop) -"qCR" = ( -/turf/open/floor/wood/large, -/area/station/service/chapel) +"qCK" = ( +/obj/effect/turf_decal/siding/thinplating_new/light{ + dir = 5 + }, +/obj/effect/landmark/start/botanist, +/turf/open/floor/iron/white/small, +/area/station/service/hydroponics) "qCT" = ( /obj/effect/turf_decal/siding/wood{ dir = 9 @@ -48580,6 +49730,22 @@ }, /turf/open/floor/wood/tile, /area/station/tcommsat/server) +"qDd" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/door/airlock{ + name = "Theater Greenroom" + }, +/obj/effect/mapping_helpers/airlock/access/all/service/theatre, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/textured_half{ + dir = 8 + }, +/area/station/service/greenroom) "qDi" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -48590,14 +49756,6 @@ /obj/machinery/atmospherics/pipe/smart/simple/dark/hidden, /turf/open/floor/wood/tile, /area/station/tcommsat/server) -"qDp" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/siding/thinplating_new/light{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/service/hydroponics) "qDq" = ( /obj/structure/lattice/catwalk, /obj/structure/railing{ @@ -48642,6 +49800,14 @@ }, /turf/open/floor/catwalk_floor, /area/station/engineering/main) +"qDC" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment, +/turf/open/floor/wood/parquet, +/area/station/service/library) "qDJ" = ( /obj/machinery/door/airlock/maintenance{ name = "Maintenance" @@ -48661,6 +49827,10 @@ /obj/structure/reagent_dispensers/water_cooler, /turf/open/floor/wood/parquet, /area/station/medical/psychology) +"qDL" = ( +/obj/machinery/chem_master/condimaster, +/turf/open/floor/iron/kitchen/small, +/area/station/service/kitchen) "qDN" = ( /obj/effect/turf_decal/tile/blue, /obj/machinery/status_display/evac/directional/west, @@ -48680,15 +49850,6 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/iron, /area/station/cargo/sorting) -"qEa" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment, -/obj/machinery/door/airlock{ - name = "Bar Backroom Maintenence" - }, -/obj/effect/mapping_helpers/airlock/access/all/service/bar, -/turf/open/floor/plating, -/area/station/maintenance/central/greater) "qEe" = ( /turf/open/floor/iron/white/side{ dir = 8 @@ -48701,6 +49862,7 @@ }, /obj/item/pen, /obj/machinery/airalarm/directional/south, +/obj/machinery/status_display/evac/directional/east, /turf/open/floor/circuit/red, /area/station/ai_monitored/turret_protected/ai) "qEm" = ( @@ -48710,23 +49872,6 @@ }, /turf/open/floor/iron, /area/station/command/heads_quarters/ce) -"qEp" = ( -/obj/machinery/chem_master/condimaster{ - desc = "Used to separate out liquids - useful for purifying botanical extracts. Also dispenses condiments."; - name = "BrewMaster 2199" - }, -/obj/effect/turf_decal/delivery, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/effect/turf_decal/tile/green{ - dir = 4 - }, -/obj/effect/turf_decal/siding/thinplating_new/light{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/service/hydroponics) "qEz" = ( /obj/machinery/door/window/brigdoor/left/directional/west{ name = "Holding Cell"; @@ -48738,6 +49883,27 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/science/lower) +"qED" = ( +/obj/machinery/portable_atmospherics/canister/air, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/central/greater) +"qEO" = ( +/obj/machinery/camera/autoname/directional/east, +/obj/machinery/status_display/evac/directional/east, +/obj/structure/disposalpipe/trunk, +/obj/effect/turf_decal/stripes/end, +/obj/structure/window/reinforced/spawner/directional/east, +/obj/structure/disposaloutlet{ + dir = 1 + }, +/obj/structure/window/reinforced/spawner/directional/west, +/obj/effect/turf_decal/tile/green/fourcorners, +/obj/effect/turf_decal/siding/thinplating_new{ + dir = 4 + }, +/turf/open/floor/iron/small, +/area/station/hallway/secondary/service) "qEP" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -48756,6 +49922,19 @@ /obj/machinery/power/apc/auto_name/directional/north, /turf/open/floor/iron/white/side, /area/station/science/lower) +"qFc" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/plaque{ + icon_state = "L10"; + pixel_y = -15 + }, +/obj/effect/turf_decal/trimline/neutral/line, +/obj/effect/turf_decal/trimline/neutral/line{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central/aft) "qFh" = ( /obj/effect/turf_decal/tile/dark_red{ dir = 4 @@ -48783,35 +49962,35 @@ }, /turf/open/floor/plating/elevatorshaft, /area/station/engineering/atmos) -"qFA" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/chair/office/light, -/obj/effect/landmark/start/scientist, -/turf/open/floor/iron, -/area/station/science/ordnance/testlab) -"qFB" = ( -/obj/structure/table, -/obj/effect/turf_decal/tile/blue{ - dir = 1 +"qGc" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/public/glass{ + name = "Fore Primary Hallway" }, -/obj/effect/turf_decal/tile/green{ - dir = 4 +/turf/open/floor/iron/textured_half, +/area/station/hallway/primary/central/fore) +"qGe" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/stripes/red/line, +/obj/effect/turf_decal/stripes/red/line{ + dir = 1 }, -/obj/item/paper/guides/jobs/hydroponics, -/obj/item/pen{ - pixel_x = 11 +/obj/structure/disposalpipe/segment{ + dir = 9 }, -/turf/open/floor/iron, -/area/station/service/hydroponics) -"qFO" = ( -/obj/structure/disposalpipe/trunk{ - dir = 8 +/turf/open/floor/iron/small, +/area/station/hallway/primary/central/fore) +"qGf" = ( +/obj/structure/flora/bush/flowers_pp{ + pixel_y = 3 }, -/obj/machinery/disposal/bin, -/obj/effect/mapping_helpers/broken_floor, -/obj/machinery/camera/autoname/directional/east, -/turf/open/floor/wood/parquet, -/area/station/service/library) +/obj/effect/dummy/lighting_obj, +/obj/effect/light_emitter/fake_outdoors, +/obj/effect/turf_decal/siding/wood, +/turf/open/floor/grass/Airless, +/area/station/hallway/primary/central/aft) "qGk" = ( /obj/structure/chair/stool/directional/east, /turf/open/floor/plating, @@ -48824,10 +50003,6 @@ }, /turf/open/floor/stone, /area/station/command/heads_quarters/hos) -"qGw" = ( -/obj/machinery/holopad, -/turf/open/floor/iron/cafeteria, -/area/station/service/kitchen) "qGB" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -48848,56 +50023,19 @@ /obj/effect/turf_decal/siding/wideplating/dark/corner, /turf/open/floor/iron, /area/station/security) -"qGT" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/security/tram) -"qGU" = ( -/obj/structure/table/wood, -/obj/machinery/computer/libraryconsole{ - dir = 4 - }, -/obj/machinery/newscaster/directional/south, -/turf/open/floor/wood/parquet, -/area/station/service/library) -"qGY" = ( -/obj/effect/landmark/start/cook, -/turf/open/floor/iron/cafeteria, -/area/station/service/kitchen) -"qHb" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 10 - }, -/obj/effect/mapping_helpers/broken_floor, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/station/maintenance/central/greater) -"qHm" = ( -/obj/structure/table/reinforced, -/obj/machinery/door/poddoor/shutters/preopen{ - dir = 4; - id = "kitchenshutters"; - name = "Kitchen Shutters" - }, -/obj/structure/desk_bell{ - pixel_x = 8; - pixel_y = 11 - }, -/obj/effect/spawner/random/food_or_drink/condiment{ - pixel_x = -8; - pixel_y = 3 +"qHr" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 8 }, -/turf/open/floor/iron/cafeteria, -/area/station/service/kitchen) +/obj/machinery/light/small/directional/west, +/obj/machinery/camera/directional/west, +/obj/machinery/status_display/ai/directional/west, +/turf/open/floor/grass, +/area/station/service/chapel) "qHt" = ( /obj/structure/cable, /turf/open/floor/iron, /area/station/maintenance/starboard/greater) -"qHy" = ( -/obj/structure/table/wood, -/turf/open/floor/wood, -/area/station/service/abandoned_gambling_den) "qHH" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/firealarm/directional/south, @@ -48919,30 +50057,21 @@ /obj/machinery/firealarm/directional/north, /turf/open/floor/iron/white/side, /area/station/science/lower) -"qIc" = ( +"qIb" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/obj/effect/turf_decal/trimline/neutral/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/neutral/line, /obj/structure/cable, -/obj/structure/disposalpipe/segment, -/obj/effect/mapping_helpers/broken_floor, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/station/maintenance/central/greater) +/turf/open/floor/iron, +/area/station/hallway/primary/central/fore) "qIf" = ( /turf/closed/wall, /area/station/medical/cryo) -"qIg" = ( -/obj/structure/cable, -/obj/effect/turf_decal/tile/red/opposingcorners, -/obj/effect/turf_decal/tile/blue/opposingcorners{ - dir = 8 - }, -/obj/effect/turf_decal/siding/wood{ - dir = 8 - }, -/obj/item/kirbyplants/random, -/obj/machinery/light/small/directional/west, -/obj/item/radio/intercom/directional/south, -/turf/open/floor/iron/smooth, -/area/station/service/greenroom) "qIk" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden, /turf/open/floor/circuit/telecomms/mainframe, @@ -48952,12 +50081,6 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/security/processing) -"qIv" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/commons/dorms) "qIB" = ( /obj/effect/turf_decal/stripes/white/line{ dir = 1 @@ -48965,6 +50088,12 @@ /obj/effect/turf_decal/stripes/white/line, /turf/open/floor/tram, /area/station/maintenance/department/medical/central) +"qIC" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/sink/directional/east, +/obj/structure/mirror/directional/west, +/turf/open/floor/iron/showroomfloor, +/area/station/commons/toilet/auxiliary) "qID" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -48983,23 +50112,6 @@ }, /turf/open/floor/iron/white, /area/station/science/cytology) -"qIO" = ( -/obj/effect/turf_decal/tile/yellow/half/contrasted{ - dir = 1 - }, -/obj/structure/chair, -/obj/effect/decal/cleanable/dirt, -/obj/effect/landmark/start/hangover, -/turf/open/floor/iron, -/area/station/commons/storage/tools) -"qIP" = ( -/obj/machinery/food_cart, -/obj/machinery/button/door/directional/west{ - id = "barki"; - name = "Shutters Control" - }, -/turf/open/floor/iron/cafeteria, -/area/station/service/kitchen) "qIQ" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -49011,19 +50123,6 @@ /obj/structure/broken_flooring/pile/directional/east, /turf/open/floor/plating, /area/station/hallway/secondary/dock) -"qJa" = ( -/obj/effect/turf_decal/tile/red/opposingcorners{ - dir = 1 - }, -/obj/machinery/restaurant_portal/restaurant, -/turf/open/floor/iron/cafeteria, -/area/station/service/cafeteria) -"qJj" = ( -/obj/machinery/airalarm/directional/south, -/obj/effect/decal/cleanable/dirt, -/obj/structure/broken_flooring/corner/directional/south, -/turf/open/floor/plating, -/area/station/commons) "qJq" = ( /obj/effect/turf_decal/siding/wood{ dir = 8 @@ -49033,11 +50132,11 @@ }, /turf/open/floor/iron/diagonal, /area/station/command/heads_quarters/hop) -"qJr" = ( -/obj/machinery/atmospherics/pipe/smart/simple/purple/visible, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/station/science/ordnance) +"qJH" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/wood, +/area/station/service/abandoned_gambling_den) "qJN" = ( /obj/effect/turf_decal/stripes/line, /obj/structure/table/reinforced/titaniumglass, @@ -49084,24 +50183,20 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/smooth_large, /area/station/engineering/storage_shared) -"qKE" = ( -/obj/effect/spawner/structure/window, -/turf/open/floor/plating, -/area/station/service/cafeteria) +"qKz" = ( +/obj/structure/window/spawner/directional/north, +/turf/open/floor/iron/dark, +/area/station/commons/dorms) +"qKD" = ( +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 6 + }, +/turf/open/floor/iron/showroomfloor, +/area/station/commons/dorms) "qKI" = ( /obj/machinery/portable_atmospherics/pump, /turf/open/floor/iron/small, /area/station/maintenance/port/aft) -"qKN" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 - }, -/turf/open/floor/wood, -/area/station/service/theater) -"qKO" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/showroomfloor, -/area/station/commons/toilet/restrooms) "qKS" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -49113,13 +50208,6 @@ /obj/effect/mapping_helpers/airlock/access/all/medical/cmo, /turf/open/floor/iron/white/small, /area/station/command/heads_quarters/cmo) -"qLc" = ( -/obj/machinery/door/airlock{ - id_tag = "Toilet3"; - name = "Auxillary" - }, -/turf/open/floor/iron/showroomfloor, -/area/station/commons/toilet/restrooms) "qLj" = ( /obj/structure/bed{ dir = 4 @@ -49132,20 +50220,6 @@ }, /turf/open/floor/iron/dark, /area/station/security/prison/safe) -"qLq" = ( -/obj/machinery/recharge_station, -/obj/machinery/button/door/directional/west{ - id = "Toilet3"; - name = "Lock Control"; - normaldoorcontrol = 1; - pixel_x = 0; - pixel_y = 24; - specialfunctions = 4 - }, -/obj/machinery/light/small/directional/east, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/iron/showroomfloor, -/area/station/commons/toilet/restrooms) "qLt" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -49166,12 +50240,6 @@ /obj/effect/landmark/start/assistant, /turf/open/floor/iron/dark/herringbone, /area/station/security/courtroom) -"qLB" = ( -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating, -/area/station/maintenance/starboard/central) "qLD" = ( /obj/structure/chair{ name = "Defense" @@ -49182,6 +50250,28 @@ /obj/machinery/airalarm/directional/north, /turf/open/floor/iron, /area/station/security/courtroom) +"qLU" = ( +/obj/effect/turf_decal/tile/green/opposingcorners, +/obj/effect/turf_decal/tile/blue/opposingcorners{ + dir = 8 + }, +/obj/machinery/camera/autoname/directional/west, +/obj/machinery/hydroponics/constructable, +/obj/item/radio/intercom/directional/west, +/turf/open/floor/iron, +/area/station/service/hydroponics) +"qMa" = ( +/obj/effect/turf_decal/stripes/red/line{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/structure/table, +/obj/item/storage/medkit/regular{ + pixel_x = 3; + pixel_y = -3 + }, +/turf/open/floor/iron, +/area/station/commons/fitness/recreation/entertainment) "qMb" = ( /obj/effect/turf_decal/tile/yellow/opposingcorners, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ @@ -49209,6 +50299,13 @@ /obj/structure/cable, /turf/open/floor/iron/smooth, /area/station/engineering/engine_smes) +"qME" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible/layer1{ + dir = 5 + }, +/turf/open/space/basic, +/area/space/nearstation) "qMG" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/structure/cable, @@ -49222,15 +50319,6 @@ /obj/structure/sign/poster/official/random/directional/north, /turf/open/floor/iron, /area/station/hallway/secondary/dock) -"qMQ" = ( -/obj/machinery/atmospherics/components/unary/portables_connector/visible{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark/side{ - dir = 9 - }, -/area/station/science/ordnance/testlab) "qNj" = ( /turf/open/floor/catwalk_floor/iron, /area/station/maintenance/department/medical/central) @@ -49241,13 +50329,6 @@ /obj/structure/hedge, /turf/open/floor/iron/white, /area/station/medical/medbay/central) -"qNz" = ( -/obj/structure/cable, -/obj/effect/mapping_helpers/broken_floor, -/obj/effect/decal/cleanable/dirt, -/obj/effect/spawner/random/trash, -/turf/open/floor/plating, -/area/station/maintenance/central/lesser) "qNF" = ( /obj/effect/spawner/random/structure/closet_maintenance, /obj/effect/spawner/random/maintenance, @@ -49271,14 +50352,15 @@ "qNO" = ( /turf/open/floor/plating, /area/station/maintenance/starboard/central) -"qOc" = ( -/obj/effect/mapping_helpers/broken_floor, -/obj/effect/turf_decal/stripes/red/line{ - dir = 8 - }, -/obj/structure/sign/poster/official/random/directional/north, -/turf/open/floor/iron/smooth_large, -/area/station/science/auxlab/firing_range) +"qNU" = ( +/obj/effect/spawner/random/structure/crate, +/turf/open/floor/iron, +/area/station/maintenance/department/medical/central) +"qOb" = ( +/obj/structure/flora/bush/sparsegrass, +/obj/structure/flora/bush/flowers_yw, +/turf/open/floor/grass, +/area/station/service/chapel) "qOm" = ( /obj/effect/spawner/structure/window/reinforced, /obj/effect/turf_decal/stripes/corner{ @@ -49286,17 +50368,24 @@ }, /turf/open/floor/plating, /area/station/commons/storage/tools) -"qOp" = ( -/obj/structure/table/wood, -/obj/item/book/bible, -/turf/open/floor/wood/large, -/area/station/service/chapel) -"qOt" = ( -/obj/item/kirbyplants/random, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/machinery/light/cold/directional/north, +"qOG" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/obj/effect/turf_decal/siding/wideplating_new/terracotta{ + dir = 1 + }, +/turf/open/floor/wood/tile, +/area/station/maintenance/central/lesser) +"qOJ" = ( +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/machinery/light/small/directional/north, /turf/open/floor/iron, -/area/station/hallway/primary/port) +/area/station/hallway/secondary/recreation) "qON" = ( /obj/effect/decal/cleanable/cobweb, /obj/structure/table, @@ -49331,6 +50420,10 @@ }, /turf/open/space/basic, /area/station/engineering/atmos/space_catwalk) +"qPJ" = ( +/obj/machinery/status_display/ai/directional/north, +/turf/open/floor/iron, +/area/station/engineering/storage/tech) "qPN" = ( /turf/closed/wall/r_wall, /area/station/security/prison/safe) @@ -49338,20 +50431,9 @@ /obj/machinery/atmospherics/pipe/smart/simple/supply/visible/layer2{ dir = 6 }, -/obj/machinery/meter, +/obj/machinery/meter/layer2, /turf/open/floor/iron, /area/station/engineering/atmos/pumproom) -"qQg" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/obj/item/radio/intercom/directional/south, -/turf/open/floor/iron, -/area/station/hallway/secondary/dock) "qQi" = ( /obj/structure/chair/stool/directional/north, /obj/effect/turf_decal/siding/yellow{ @@ -49416,15 +50498,15 @@ /area/station/maintenance/port/fore) "qQR" = ( /obj/structure/table/wood, -/obj/effect/decal/cleanable/dirt, -/obj/item/screwdriver, -/turf/open/floor/plating, -/area/station/commons/vacant_room/commissary) -"qRc" = ( -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/station/science/genetics) +/obj/machinery/light/small/directional/south, +/obj/machinery/computer/security/telescreen/engine/directional/west, +/obj/machinery/status_display/evac/directional/south, +/obj/item/radio/off{ + pixel_x = 1; + pixel_y = 3 + }, +/turf/open/floor/wood, +/area/station/command/heads_quarters/ce) "qRh" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 4 @@ -49449,6 +50531,11 @@ /obj/effect/turf_decal/siding/wood, /turf/open/floor/iron/small, /area/station/security/prison/shower) +"qRx" = ( +/obj/structure/rack, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/iron, +/area/station/maintenance/department/medical/central) "qRB" = ( /obj/structure/table, /obj/machinery/computer/libraryconsole/bookmanagement{ @@ -49457,21 +50544,13 @@ /obj/effect/decal/cleanable/cobweb, /turf/open/floor/iron, /area/station/security/prison/rec) -"qRG" = ( -/obj/structure/chair/stool/directional/west, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/cafeteria, -/area/station/security/prison/mess) -"qRI" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/wood/tile, -/area/station/commons/vacant_room/commissary) -"qRM" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/kitchen/small, -/area/station/security/prison/mess) +"qRE" = ( +/obj/effect/turf_decal/siding/thinplating_new/light{ + dir = 4 + }, +/obj/effect/landmark/start/botanist, +/turf/open/floor/iron/white/small, +/area/station/service/hydroponics) "qRN" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment, @@ -49501,13 +50580,19 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/maintenance/port/aft) -"qSv" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 10 +"qSa" = ( +/obj/machinery/door/window/right/directional/north{ + name = "Library Desk Door"; + req_access = list("library") }, -/turf/open/floor/plating, -/area/station/maintenance/port/greater) +/obj/machinery/firealarm/directional/east, +/turf/open/floor/carpet, +/area/station/service/library) +"qSh" = ( +/obj/structure/cable, +/obj/machinery/firealarm/directional/east, +/turf/open/floor/iron, +/area/station/hallway/secondary/recreation) "qSC" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/white/line, @@ -49535,15 +50620,6 @@ /obj/machinery/camera/autoname/directional/south, /turf/open/floor/iron/smooth, /area/station/security/checkpoint/supply) -"qSU" = ( -/obj/effect/turf_decal/plaque{ - icon_state = "L9" - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/hallway/secondary/spacebridge) "qSZ" = ( /obj/structure/hedge, /obj/machinery/light/cold/directional/west, @@ -49584,12 +50660,6 @@ /obj/effect/spawner/random/structure/furniture_parts, /turf/open/floor/plating, /area/station/maintenance/department/science/xenobiology) -"qTx" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/station/commons/vacant_room/commissary) "qTz" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, @@ -49604,20 +50674,11 @@ /obj/machinery/light/cold/directional/east, /turf/open/floor/plating, /area/station/command/teleporter) -"qTH" = ( -/obj/effect/mapping_helpers/broken_floor, -/obj/structure/closet/secure_closet/bar, -/obj/item/stack/spacecash/c100, -/obj/item/stack/spacecash/c10, -/obj/item/stack/spacecash/c1, -/obj/item/stack/spacecash/c1, -/obj/item/stack/spacecash/c1, -/obj/machinery/light/small/directional/north, -/obj/structure/sign/poster/official/random/directional/north, -/obj/item/radio/intercom/directional/east, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/stone, -/area/station/service/bar/backroom) +"qTG" = ( +/obj/structure/cable, +/obj/effect/spawner/random/structure/crate, +/turf/open/floor/iron, +/area/station/maintenance/port/aft) "qTJ" = ( /obj/machinery/portable_atmospherics/canister/air, /turf/open/floor/plating, @@ -49626,19 +50687,6 @@ /obj/machinery/firealarm/directional/east, /turf/open/floor/iron/white, /area/station/medical/medbay/lobby) -"qTM" = ( -/turf/open/floor/glass, -/area/station/hallway/secondary/spacebridge) -"qTP" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/door/airlock/grunge{ - name = "Vacant Comissary" - }, -/turf/open/floor/iron/textured_half{ - dir = 1 - }, -/area/station/commons/vacant_room/commissary) "qTR" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /turf/open/floor/wood, @@ -49707,6 +50755,15 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/maintenance/starboard/lesser) +"qUL" = ( +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/obj/structure/cable, +/obj/machinery/duct, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/maintenance/central/lesser) "qUN" = ( /obj/machinery/atmospherics/pipe/smart/simple/yellow/visible, /turf/open/floor/iron/stairs/medium{ @@ -49801,6 +50858,13 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /turf/open/floor/wood, /area/station/cargo/boutique) +"qWg" = ( +/obj/machinery/door/airlock{ + name = "Bathrooms" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/textured_half, +/area/station/commons/toilet/restrooms) "qWh" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -49811,25 +50875,30 @@ }, /turf/open/floor/wood/tile, /area/station/command/corporate_showroom) -"qWm" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment, -/obj/machinery/door/firedoor, -/obj/effect/turf_decal/stripes/red/line{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/red/line, -/turf/open/floor/iron/small, -/area/station/hallway/primary/central/fore) "qWo" = ( /obj/effect/spawner/structure/window/reinforced/tinted, /turf/open/floor/plating, /area/station/medical/psychology) +"qWC" = ( +/obj/structure/railing{ + dir = 4 + }, +/obj/structure/extinguisher_cabinet/directional/west, +/turf/open/floor/iron, +/area/station/commons/dorms) "qWF" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white/corner, /area/station/science/research) +"qWG" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/station/hallway/primary/central/fore) "qWJ" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -49858,16 +50927,17 @@ /obj/effect/mapping_helpers/airlock/access/all/command/general, /turf/open/floor/catwalk_floor/iron_smooth, /area/station/ai_monitored/turret_protected/aisat/maint) -"qWT" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/neutral{ +"qWV" = ( +/obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/neutral{ dir = 4 }, /turf/open/floor/iron, -/area/station/hallway/secondary/recreation) +/area/station/hallway/primary/central/aft) "qXb" = ( /obj/effect/turf_decal/siding/wood{ dir = 5 @@ -49946,6 +51016,10 @@ /obj/effect/mapping_helpers/airlock/access/any/medical/maintenance, /turf/open/floor/plating, /area/station/maintenance/department/medical/central) +"qXr" = ( +/obj/structure/water_source/puddle, +/turf/open/floor/grass, +/area/station/service/chapel) "qXB" = ( /obj/effect/spawner/structure/window, /turf/open/floor/plating, @@ -49968,12 +51042,20 @@ /obj/machinery/camera/autoname/directional/south, /turf/open/floor/iron/cafeteria, /area/station/science/breakroom) -"qYc" = ( -/obj/machinery/photocopier, -/obj/effect/mapping_helpers/broken_floor, -/obj/machinery/airalarm/directional/west, -/turf/open/floor/wood/parquet, -/area/station/service/library) +"qXP" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/plaque{ + icon_state = "L8"; + pixel_y = -15 + }, +/obj/effect/turf_decal/trimline/neutral/line, +/obj/effect/turf_decal/trimline/neutral/line{ + dir = 1 + }, +/obj/effect/landmark/observer_start, +/turf/open/floor/iron, +/area/station/hallway/primary/central/aft) "qYh" = ( /obj/structure/closet/crate/silvercrate, /obj/effect/turf_decal/bot_white/left, @@ -49997,23 +51079,6 @@ }, /turf/open/floor/iron/smooth, /area/station/engineering/atmos) -"qYq" = ( -/obj/structure/table/glass, -/obj/machinery/cell_charger, -/obj/item/stock_parts/cell, -/turf/open/floor/iron/white, -/area/station/science/auxlab/firing_range) -"qYu" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/firealarm/directional/south, -/obj/effect/turf_decal/tile/green/diagonal_centre, -/turf/open/floor/iron/diagonal, -/area/station/hallway/primary/central/aft) "qYv" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment, @@ -50070,18 +51135,21 @@ /obj/effect/landmark/start/scientist, /turf/open/floor/iron/dark/small, /area/station/science/xenobiology) -"qZf" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/junction/flip{ - dir = 2 - }, -/obj/effect/turf_decal/tile/red{ - dir = 4 +"qZj" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/item/ammo_casing/spent{ + pixel_x = 5; + pixel_y = 6 }, -/turf/open/floor/iron/white/corner{ - dir = 1 +/obj/item/ammo_casing/spent, +/obj/item/ammo_casing/spent{ + pixel_x = 4; + pixel_y = -2 }, -/area/station/hallway/secondary/exit/departure_lounge) +/obj/effect/turf_decal/tile/neutral, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/station/hallway/primary/port) "qZm" = ( /obj/structure/lattice/catwalk, /obj/machinery/atmospherics/pipe/heat_exchanging/simple{ @@ -50097,31 +51165,21 @@ /obj/structure/sign/departments/medbay/directional/east, /turf/open/floor/iron, /area/station/hallway/primary/aft) -"qZp" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 5 - }, -/obj/effect/mapping_helpers/broken_floor, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/station/maintenance/central/greater) -"qZq" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/door/airlock{ - id_tag = "private_a"; - name = "Private Quarters A" +"qZw" = ( +/obj/machinery/door/airlock/public/glass{ + name = "Dormatories" }, /obj/machinery/door/firedoor, -/turf/open/floor/iron/textured_half, -/area/station/commons/dorms) -"qZB" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 4 +/obj/structure/cable, +/turf/open/floor/iron/textured_half{ + dir = 8 }, -/turf/open/floor/grass, -/area/station/service/chapel) +/area/station/commons/fitness/locker_room) +"qZy" = ( +/obj/machinery/door/firedoor, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron/white/small, +/area/station/medical/medbay/lobby) "qZE" = ( /obj/machinery/door/airlock/engineering{ name = "Engineering Office" @@ -50158,13 +51216,6 @@ /obj/machinery/firealarm/directional/east, /turf/open/floor/iron, /area/station/security/tram) -"raj" = ( -/obj/effect/turf_decal/tile/yellow/half/contrasted{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/commons/storage/tools) "ral" = ( /obj/effect/turf_decal/stripes/white/line{ dir = 8 @@ -50174,10 +51225,6 @@ }, /turf/open/floor/tram, /area/station/security/tram) -"ram" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/turf/open/floor/wood/large, -/area/station/service/chapel) "rao" = ( /obj/machinery/atmospherics/pipe/smart/simple/yellow/visible{ dir = 9 @@ -50185,21 +51232,12 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/smooth, /area/station/engineering/atmos) -"raz" = ( -/obj/machinery/door/airlock/public/glass{ - name = "Lavatorie" - }, -/obj/machinery/door/firedoor, -/turf/open/floor/iron/showroomfloor, -/area/station/commons/toilet/restrooms) -"raC" = ( -/obj/structure/disposalpipe/segment, -/obj/effect/landmark/start/assistant, -/obj/structure/chair/sofa/bamboo/left{ - dir = 1 +"rax" = ( +/obj/effect/turf_decal/siding/wideplating/dark/corner{ + dir = 8 }, -/turf/open/floor/wood/large, -/area/station/service/chapel) +/turf/open/floor/iron, +/area/station/commons/dorms) "raE" = ( /obj/machinery/duct, /turf/open/floor/iron, @@ -50223,17 +51261,21 @@ /obj/structure/extinguisher_cabinet/directional/east, /turf/open/floor/iron/smooth, /area/station/engineering/atmos/office) -"raX" = ( -/obj/effect/landmark/start/assistant, -/obj/structure/chair/sofa/bamboo/right{ - dir = 1 +"raR" = ( +/obj/structure/chair/stool/bar/directional/south, +/obj/effect/turf_decal/siding/wood{ + dir = 6 }, -/turf/open/floor/wood/large, -/area/station/service/chapel) -"rba" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/turf/open/floor/wood/large, -/area/station/service/chapel) +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/wood, +/area/station/service/abandoned_gambling_den) +"raZ" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/camera/autoname/directional/west, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/hallway/secondary/recreation) "rbc" = ( /obj/structure/transport/linear/tram, /obj/structure/tram, @@ -50245,25 +51287,12 @@ "rbg" = ( /turf/open/floor/iron/smooth, /area/station/engineering/atmos) -"rbh" = ( -/obj/structure/cable, -/obj/effect/turf_decal/siding/wood{ - dir = 4 - }, -/obj/machinery/power/apc/auto_name/directional/east, -/turf/open/floor/grass, -/area/station/service/chapel) "rbl" = ( /obj/structure/filingcabinet/chestdrawer, /obj/machinery/light/cold/dim/directional/east, /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/iron/grimy, /area/station/engineering/main) -"rbo" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/door/firedoor, -/turf/open/floor/iron/white/small, -/area/station/medical/medbay/lobby) "rbp" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/delivery, @@ -50289,20 +51318,26 @@ }, /turf/open/floor/iron/white/small, /area/station/medical/treatment_center) +"rbH" = ( +/obj/item/kirbyplants/random, +/obj/machinery/light_switch/directional/west, +/obj/item/radio/intercom/directional/north, +/turf/open/floor/iron, +/area/station/engineering/storage/tech) "rbO" = ( /obj/effect/turf_decal/trimline/blue/filled/corner{ dir = 1 }, /turf/open/floor/iron/white, /area/station/medical/treatment_center) -"rbU" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/trimline/neutral/line{ - dir = 1 +"rbW" = ( +/obj/machinery/door/airlock{ + name = "Maintenance" }, -/obj/effect/turf_decal/trimline/neutral/line, -/turf/open/floor/iron, -/area/station/hallway/primary/central/fore) +/obj/effect/mapping_helpers/airlock/access/any/security/general, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/central/lesser) "rce" = ( /obj/machinery/camera{ c_tag = "Xenobiology - Cell 3"; @@ -50337,66 +51372,27 @@ /obj/effect/turf_decal/stripes/white/line, /turf/open/floor/engine, /area/station/science/xenobiology) -"rco" = ( -/obj/machinery/shieldgen, -/obj/item/clothing/gloves/color/black{ - pixel_y = -3; - pixel_x = -2 - }, -/obj/item/clothing/mask/cigarette{ - pixel_x = 6; - pixel_y = 4 - }, -/obj/item/clothing/mask/gas{ - pixel_y = 5 - }, -/obj/item/clothing/head/cone{ - pixel_x = 1; - pixel_y = 15 - }, -/turf/open/floor/plating, -/area/station/maintenance/department/engine) -"rcp" = ( +"rcE" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/holopad, -/obj/machinery/atmospherics/pipe/heat_exchanging/simple, -/turf/open/floor/iron/dark/small, -/area/station/tcommsat/server) -"rcr" = ( -/obj/structure/closet/crate/hydroponics, -/obj/item/crowbar/red, -/obj/item/reagent_containers/cup/watering_can, -/obj/item/circuitboard/machine/biogenerator, -/obj/item/wirecutters, -/obj/item/wrench, -/obj/item/shovel/spade, -/obj/effect/turf_decal/bot, -/obj/effect/turf_decal/tile/green/opposingcorners, -/obj/effect/turf_decal/tile/blue/opposingcorners{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/service/hydroponics) -"rcw" = ( -/obj/effect/turf_decal/siding/thinplating_new{ +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/junction{ dir = 1 }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/white, -/area/station/commons/dorms) -"rcN" = ( -/obj/structure/disposalpipe/segment{ - dir = 10 +/turf/open/floor/wood/parquet, +/area/station/service/library) +"rcP" = ( +/obj/machinery/door/airlock/public/glass{ + name = "Public Shrine" }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/mapping_helpers/broken_floor, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/maintenance/hallway/abandoned_command) +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/siding/wood/end{ + dir = 4 + }, +/turf/open/floor/stone, +/area/station/hallway/primary/central/fore) "rcQ" = ( /obj/item/kirbyplants/random, /obj/effect/decal/cleanable/dirt, @@ -50404,48 +51400,29 @@ /obj/machinery/light/small/dim/directional/east, /turf/open/floor/iron, /area/station/maintenance/department/engine/atmos) -"rdb" = ( -/obj/machinery/door/airlock/public{ - name = "Abandoned Domiciles" +"rds" = ( +/obj/machinery/computer/slot_machine{ + pixel_y = 2 }, -/obj/effect/mapping_helpers/airlock/abandoned, -/obj/machinery/door/firedoor, -/obj/structure/barricade/wooden/crude, -/turf/open/floor/plating, -/area/station/maintenance/hallway/abandoned_recreation) -"rdh" = ( -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/duct, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/plating, -/area/station/maintenance/fore/greater) -"rdo" = ( -/obj/structure/window/spawner/directional/west, -/obj/structure/flora/bush/jungle/a/style_random, -/obj/structure/flora/bush/flowers_pp/style_random, -/obj/structure/window/spawner/directional/east, -/turf/open/misc/sandy_dirt, -/area/station/service/hydroponics) +/turf/open/floor/carpet/lone, +/area/station/service/abandoned_gambling_den) "rdw" = ( /turf/open/floor/eighties/red, /area/station/service/abandoned_gambling_den/gaming) -"rdy" = ( -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/obj/effect/mapping_helpers/broken_floor, -/obj/structure/broken_flooring/pile/directional/east, -/turf/open/floor/plating, -/area/station/maintenance/department/medical/central) +"rdA" = ( +/obj/machinery/light/small/directional/south, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/obj/effect/turf_decal/siding/wideplating_new/terracotta{ + dir = 6 + }, +/turf/open/floor/wood/tile, +/area/station/maintenance/central/lesser) "rdH" = ( /obj/machinery/keycard_auth/directional/south, /turf/open/floor/mineral/titanium, /area/station/command/heads_quarters/ce) -"rdK" = ( -/obj/structure/chair/office, -/obj/effect/landmark/start/botanist, -/turf/open/floor/iron, -/area/station/service/hydroponics) "rdM" = ( /obj/effect/turf_decal/stripes/white/line{ dir = 4 @@ -50453,18 +51430,18 @@ /turf/open/floor/engine, /area/station/science/cytology) "rdW" = ( -/obj/effect/mapping_helpers/broken_floor, -/obj/machinery/light/small/broken/directional/west, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/wood/tile, -/area/station/commons/vacant_room/commissary) -"ree" = ( +/obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/holopad, -/obj/effect/landmark/event_spawn, -/turf/open/floor/wood/tile, -/area/station/service/bar) +/obj/effect/turf_decal/siding/red{ + dir = 6 + }, +/obj/machinery/firealarm/directional/south, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/white/small, +/area/station/security/warden) "reg" = ( /obj/structure/cable, /obj/effect/decal/cleanable/dirt, @@ -50480,11 +51457,17 @@ /obj/effect/spawner/random/maintenance, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) -"rer" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/decal/cleanable/dirt, +"rem" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, /turf/open/floor/iron, -/area/station/security/prison/garden) +/area/station/hallway/secondary/recreation) +"rex" = ( +/obj/effect/turf_decal/tile/neutral/full, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/dark/smooth_large, +/area/station/maintenance/central/lesser) "reE" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -50541,38 +51524,13 @@ /obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible, /turf/closed/wall/r_wall, /area/station/science/ordnance/burnchamber) -"reT" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/siding/wideplating/dark, -/obj/effect/turf_decal/tile/dark_red/half/contrasted{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/security/brig/entrance) -"reU" = ( -/obj/effect/mapping_helpers/broken_floor, -/obj/effect/turf_decal/tile/yellow/half/contrasted{ - dir = 8 - }, -/obj/machinery/chem_heater/withbuffer, -/turf/open/floor/iron/white, -/area/station/maintenance/central/greater) -"reW" = ( +"reS" = ( +/obj/effect/spawner/random/trash, +/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/chair/stool/bar/directional/east, -/obj/effect/landmark/start/hangover, -/turf/open/floor/wood/tile, -/area/station/service/bar) -"reX" = ( -/obj/structure/training_machine, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/smooth_large, -/area/station/science/auxlab/firing_range) +/turf/open/floor/plating, +/area/station/maintenance/fore/greater) "reZ" = ( /obj/effect/turf_decal/tile/dark_red{ dir = 4 @@ -50580,11 +51538,6 @@ /obj/machinery/firealarm/directional/west, /turf/open/floor/iron, /area/station/security/execution/transfer) -"rfe" = ( -/obj/structure/cable, -/obj/effect/spawner/random/structure/crate, -/turf/open/floor/plating, -/area/station/maintenance/port/aft) "rfi" = ( /obj/effect/turf_decal/tile/blue{ dir = 1 @@ -50592,28 +51545,26 @@ /obj/machinery/camera/autoname/directional/south, /turf/open/floor/iron/white, /area/station/medical/medbay/central) +"rfo" = ( +/obj/structure/cable, +/obj/item/kirbyplants/organic/applebush, +/obj/machinery/power/apc/auto_name/directional/east, +/turf/open/floor/iron/dark/smooth_large, +/area/station/command/bridge) "rfq" = ( /obj/structure/sink/directional/south, /obj/effect/turf_decal/trimline/blue/end, /turf/open/floor/iron/dark, /area/station/medical/medbay/lobby) -"rfs" = ( -/obj/structure/reagent_dispensers/fueltank, -/obj/effect/turf_decal/bot_white, -/obj/effect/decal/cleanable/cobweb, -/turf/open/floor/iron/smooth, -/area/station/commons/storage/tools) +"rfB" = ( +/obj/item/kirbyplants/random, +/obj/structure/sign/poster/official/random/directional/north, +/turf/open/floor/iron, +/area/station/commons/fitness/locker_room) "rfD" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/cargo/drone_bay) -"rfI" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/neutral/full, -/obj/effect/landmark/start/bartender, -/turf/open/floor/iron/smooth_large, -/area/station/service/bar) "rfJ" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/engine, @@ -50628,38 +51579,16 @@ /obj/structure/cable, /turf/open/floor/iron/grimy, /area/station/commons/vacant_room/office) -"rgc" = ( -/obj/structure/disposalpipe/segment, +"rgg" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/cafeteria, -/area/station/service/kitchen) -"rgf" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/plasticflaps/opaque, -/obj/machinery/duct, -/turf/open/floor/iron, -/area/station/maintenance/central/greater) -"rgo" = ( -/obj/effect/turf_decal/tile/brown/opposingcorners, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/computer/order_console/mining, -/obj/machinery/light/small/directional/west, -/turf/open/floor/iron, -/area/station/cargo/miningoffice) -"rgx" = ( -/obj/structure/table, -/turf/open/floor/iron/cafeteria, -/area/station/service/kitchen) -"rgz" = ( -/obj/effect/turf_decal/tile/dark_red/opposingcorners, -/obj/structure/chair{ +/obj/structure/disposalpipe/sorting/mail{ dir = 4 }, -/obj/machinery/light/small/directional/west, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/security/brig/entrance) +/obj/effect/mapping_helpers/mail_sorting/service/bar, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/central/greater) "rgA" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/mapping_helpers/broken_floor, @@ -50673,6 +51602,10 @@ /obj/item/kirbyplants/random/fullysynthetic, /turf/open/floor/iron/white, /area/station/medical/treatment_center) +"rgM" = ( +/obj/structure/extinguisher_cabinet/directional/west, +/turf/open/floor/glass, +/area/station/hallway/primary/central/aft) "rgS" = ( /obj/structure/railing/corner/end{ dir = 1 @@ -50684,16 +51617,17 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/small, /area/station/maintenance/department/engine/atmos) -"rgT" = ( -/obj/machinery/door/firedoor, -/obj/effect/turf_decal/stripes/red/line{ +"rgY" = ( +/obj/effect/landmark/start/assistant, +/obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/effect/turf_decal/stripes/red/line{ - dir = 8 +/obj/effect/turf_decal/trimline/neutral/line, +/obj/effect/turf_decal/trimline/neutral/line{ + dir = 1 }, -/turf/open/floor/iron/small, -/area/station/hallway/primary/port) +/turf/open/floor/iron, +/area/station/hallway/primary/central/aft) "rhg" = ( /obj/machinery/air_sensor/engine_chamber, /obj/effect/turf_decal/stripes/white/line{ @@ -50708,45 +51642,6 @@ /obj/structure/broken_flooring/corner/directional/south, /turf/open/floor/plating, /area/station/maintenance/port/aft) -"rhm" = ( -/obj/machinery/atmospherics/pipe/smart/simple/general/visible{ - dir = 10 - }, -/obj/structure/table, -/obj/item/clothing/mask/cigarette, -/obj/item/toy/toy_dagger, -/obj/item/clothing/head/collectable/paper, -/obj/item/toy/figure/roboticist{ - pixel_x = 6; - pixel_y = 6 - }, -/obj/item/toy/figure/syndie{ - pixel_y = 5; - pixel_x = -6 - }, -/obj/item/toy/figure/md{ - pixel_x = 10 - }, -/obj/item/toy/figure/hop{ - pixel_x = 2; - pixel_y = -2 - }, -/obj/item/toy/figure/ian{ - pixel_x = -5; - pixel_y = -1 - }, -/obj/item/toy/figure/lawyer{ - pixel_x = -10 - }, -/obj/item/toy/figure/detective, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) -"rho" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/smooth, -/area/station/cargo/drone_bay) "rhu" = ( /obj/effect/turf_decal/siding/yellow{ dir = 5 @@ -50766,12 +51661,10 @@ /obj/structure/thermoplastic, /turf/open/floor/tram, /area/station/security/tram) -"rhD" = ( -/obj/structure/cable, -/obj/structure/rack, -/obj/effect/spawner/random/maintenance, -/turf/open/floor/plating, -/area/station/maintenance/central/greater) +"rhC" = ( +/obj/structure/chair/office, +/turf/open/floor/iron/smooth, +/area/station/cargo/drone_bay) "rhH" = ( /obj/effect/turf_decal/tile/blue, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ @@ -50800,74 +51693,39 @@ /obj/machinery/door/poddoor/massdriver_chapel, /turf/open/floor/plating, /area/station/service/chapel/funeral) -"rij" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/red/opposingcorners{ - dir = 1 +"rik" = ( +/obj/structure/flora/grass/jungle/b/style_random, +/turf/open/misc/dirt/jungle, +/area/station/service/chapel) +"riq" = ( +/obj/machinery/atmospherics/pipe/smart/simple/general/visible{ + dir = 4 }, -/obj/effect/landmark/start/cook, -/obj/effect/landmark/event_spawn, -/turf/open/floor/iron/cafeteria, -/area/station/service/cafeteria) -"ril" = ( -/obj/effect/turf_decal/tile/red/opposingcorners{ - dir = 1 +/obj/structure/cable, +/obj/machinery/door/window/brigdoor/left/directional/east{ + name = "Secure Creature Pen"; + req_access = list("research") }, -/obj/machinery/holopad, -/obj/effect/spawner/random/engineering/tracking_beacon, -/turf/open/floor/iron/cafeteria, -/area/station/service/cafeteria) +/turf/open/floor/iron, +/area/station/science/xenobiology) "rir" = ( /turf/open/floor/iron/grimy, /area/station/commons/vacant_room/office) -"riu" = ( -/obj/machinery/vending/coffee, -/obj/effect/turf_decal/delivery, -/obj/machinery/light/small/directional/east, -/turf/open/floor/iron, -/area/station/hallway/primary/central/fore) -"riM" = ( -/turf/open/floor/iron/textured_half{ +"riS" = ( +/obj/effect/turf_decal/tile/blue/anticorner/contrasted{ dir = 1 }, -/area/station/service/cafeteria) +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/station/medical/medbay/lobby) "riV" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/smooth, /area/station/cargo/drone_bay) -"riZ" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/door/airlock/mining{ - name = "Drone Bay" - }, -/obj/effect/mapping_helpers/airlock/access/any/supply/maintenance, -/obj/machinery/door/firedoor, -/turf/open/floor/plating, -/area/station/maintenance/port/greater) -"rjb" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 8 - }, -/obj/structure/chair/pew{ - dir = 4 - }, -/obj/effect/landmark/start/assistant, -/turf/open/floor/wood, -/area/station/service/theater) -"rje" = ( -/obj/structure/disposalpipe/segment{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/item/radio/intercom/directional/south, -/obj/effect/turf_decal/tile/neutral, -/turf/open/floor/iron, -/area/station/hallway/primary/port) "rji" = ( /obj/structure/disposalpipe/segment{ dir = 6 @@ -50906,55 +51764,39 @@ /turf/open/floor/iron/dark/small, /area/station/hallway/primary/fore) "rjz" = ( -/obj/effect/turf_decal/plaque{ - icon_state = "L11" - }, -/turf/open/floor/glass, -/area/station/hallway/secondary/spacebridge) -"rjE" = ( -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/plating, -/area/station/engineering/supermatter/room) -"rjH" = ( +/obj/structure/cable, /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/status_display/ai/directional/north, -/obj/effect/turf_decal/tile/neutral{ +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/stripes/red/line{ dir = 4 }, -/turf/open/floor/iron, -/area/station/hallway/primary/port) -"rkb" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 4 +/obj/effect/turf_decal/stripes/red/line{ + dir = 8 }, -/obj/structure/chair/pew{ - dir = 4 +/turf/open/floor/iron/small, +/area/station/hallway/primary/central/aft) +"rjE" = ( +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/engineering/supermatter/room) +"rjN" = ( +/obj/structure/cable, +/obj/structure/chair{ + pixel_y = -2 }, -/turf/open/floor/wood, -/area/station/service/theater) +/turf/open/floor/iron/dark, +/area/station/security/interrogation) "rkk" = ( /obj/effect/turf_decal/stripes/line{ dir = 5 }, -/obj/item/kirbyplants/random, /obj/machinery/atmospherics/pipe/smart/simple/yellow/visible{ dir = 10 }, /turf/open/floor/iron, /area/station/engineering/atmos) -"rkr" = ( -/obj/structure/table_frame, -/obj/effect/decal/cleanable/molten_object, -/obj/effect/landmark/event_spawn, -/turf/open/floor/iron/dark, -/area/station/commons/storage/tools) -"rkF" = ( -/obj/effect/spawner/random/structure/musician/piano/random_piano, -/turf/open/floor/carpet/lone, -/area/station/service/theater) "rkI" = ( /obj/structure/disposalpipe/trunk, /obj/structure/disposaloutlet{ @@ -50965,10 +51807,6 @@ /obj/structure/window/reinforced/spawner/directional/east, /turf/open/floor/plating, /area/station/medical/morgue) -"rkR" = ( -/obj/structure/cable, -/turf/open/floor/wood, -/area/station/cargo/boutique) "rkS" = ( /obj/effect/turf_decal/siding/yellow{ dir = 8 @@ -50994,17 +51832,29 @@ /obj/machinery/airalarm/directional/north, /turf/open/floor/iron/grimy, /area/station/commons/vacant_room/office) -"rlh" = ( -/obj/structure/disposalpipe/segment, -/obj/effect/landmark/start/hangover, -/obj/effect/turf_decal/trimline/neutral/line{ +"rli" = ( +/obj/machinery/door/airlock/silver{ + name = "Showers" + }, +/turf/open/floor/iron/textured_half{ + dir = 1 + }, +/area/station/commons/dorms) +"rlj" = ( +/obj/structure/disposalpipe/segment{ dir = 4 }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, /obj/effect/turf_decal/trimline/neutral/line{ - dir = 8 + dir = 6 + }, +/obj/effect/turf_decal/trimline/neutral/corner{ + dir = 1 }, /turf/open/floor/iron, -/area/station/hallway/primary/central/fore) +/area/station/hallway/primary/central/aft) "rlk" = ( /obj/machinery/light/broken/directional/north, /obj/effect/decal/cleanable/dirt/dust, @@ -51013,20 +51863,24 @@ /obj/structure/sign/warning/directional/north, /turf/open/floor/iron, /area/station/engineering/atmospherics_engine) +"rlq" = ( +/obj/structure/bed{ + dir = 4 + }, +/obj/effect/spawner/random/bedsheet{ + dir = 4 + }, +/obj/machinery/button/door/directional/north{ + id = "Cabin3"; + name = "Cabin Bolt Control"; + normaldoorcontrol = 1; + specialfunctions = 4 + }, +/turf/open/floor/carpet/blue, +/area/station/commons/dorms) "rlr" = ( /turf/closed/wall, /area/station/medical/storage) -"rlz" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/wood, -/area/station/cargo/boutique) -"rlB" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/holopad, -/obj/effect/landmark/event_spawn, -/turf/open/floor/wood, -/area/station/cargo/boutique) "rlH" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -51038,11 +51892,16 @@ /obj/machinery/air_sensor/ordnance_burn_chamber, /turf/open/floor/engine/vacuum, /area/station/science/ordnance/burnchamber) -"rlN" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/wood, -/area/station/cargo/boutique) +"rlZ" = ( +/obj/structure/toilet{ + dir = 8 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/obj/machinery/light_switch/directional/east, +/turf/open/floor/iron/freezer, +/area/station/command/heads_quarters/captain/private) "rma" = ( /obj/machinery/atmospherics/pipe/smart/simple/general/visible{ dir = 6 @@ -51050,15 +51909,13 @@ /obj/machinery/camera/autoname/directional/north, /turf/open/floor/iron/dark, /area/station/science/ordnance/testlab) -"rmu" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/landmark/start/assistant, -/obj/machinery/camera/autoname/directional/south, -/turf/open/floor/iron, -/area/station/hallway/secondary/recreation) +"rmk" = ( +/obj/effect/turf_decal/weather/dirt, +/obj/structure/flora/bush/jungle/c/style_3{ + pixel_x = -7 + }, +/turf/open/floor/grass, +/area/station/service/chapel) "rmD" = ( /obj/machinery/door/firedoor, /obj/effect/mapping_helpers/airlock/access/any/engineering/general, @@ -51069,18 +51926,23 @@ /obj/structure/cable, /turf/open/floor/catwalk_floor, /area/station/engineering/engine_smes) -"rmG" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/light_switch/directional/north, -/turf/open/floor/wood, -/area/station/cargo/boutique) "rmM" = ( /obj/effect/turf_decal/siding/wood, /turf/open/floor/iron/edge{ dir = 8 }, /area/station/engineering/main) +"rmV" = ( +/obj/machinery/microwave{ + pixel_y = 5 + }, +/obj/machinery/light_switch/directional/north, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/table, +/turf/open/floor/iron/kitchen/small, +/area/station/service/kitchen) "rmX" = ( /obj/structure/table, /obj/effect/turf_decal/tile/blue/fourcorners, @@ -51097,15 +51959,19 @@ /obj/machinery/firealarm/directional/north, /turf/open/floor/iron/dark/herringbone, /area/station/security/courtroom) -"rnn" = ( -/obj/structure/cable, -/obj/structure/chair/sofa/bench/right{ - dir = 8 +"rnr" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 1 }, -/obj/machinery/power/apc/auto_name/directional/east, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/commons) +/obj/structure/flora/bush/jungle/c/style_3{ + pixel_x = 8 + }, +/turf/open/floor/grass, +/area/station/service/chapel) +"rnD" = ( +/obj/effect/spawner/structure/window, +/turf/open/floor/plating, +/area/station/commons/fitness/recreation/entertainment) "rnE" = ( /obj/effect/spawner/structure/window, /obj/machinery/door/poddoor/shutters/preopen{ @@ -51119,15 +51985,6 @@ /obj/structure/cable, /turf/open/floor/iron/showroomfloor, /area/station/medical/surgery/theatre) -"rnY" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/sorting/mail/flip{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/mapping_helpers/mail_sorting/service/library, -/turf/open/floor/plating, -/area/station/maintenance/central/greater) "rnZ" = ( /obj/structure/transport/linear/tram, /obj/effect/landmark/transport/nav_beacon/tram/nav/birdshot/maint, @@ -51164,22 +52021,10 @@ /obj/effect/turf_decal/sand/plating, /turf/open/floor/wood/tile, /area/station/maintenance/port/lesser) -"row" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/reagent_dispensers/plumbed{ - dir = 4 - }, -/turf/open/floor/plating, -/area/station/maintenance/central/greater) "roz" = ( /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/department/science/xenobiology) -"roB" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/delivery, -/turf/open/floor/iron/white/small, -/area/station/service/janitor) "roC" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -51192,22 +52037,11 @@ /obj/effect/spawner/random/engineering/atmospherics_portable, /turf/open/floor/plating, /area/station/maintenance/central/lesser) -"roE" = ( -/obj/structure/table/wood, -/obj/machinery/light/small/directional/south, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/wood/tile, -/area/station/commons/vacant_room/commissary) "roS" = ( /obj/structure/cable, /obj/structure/chair/stool/directional/west, /turf/open/floor/iron/cafeteria, /area/station/security/prison/mess) -"roV" = ( -/obj/machinery/vending/cigarette, -/obj/machinery/firealarm/directional/north, -/turf/open/floor/wood, -/area/station/hallway/secondary/service) "roZ" = ( /obj/effect/turf_decal/tile/neutral/fourcorners, /obj/machinery/computer/rdconsole{ @@ -51219,12 +52053,6 @@ }, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/rd) -"rpb" = ( -/obj/structure/sign/directions/dorms{ - dir = 4 - }, -/turf/closed/wall, -/area/station/commons/dorms) "rpg" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -51240,44 +52068,46 @@ /turf/open/floor/iron/white, /area/station/science/research) "rpo" = ( -/obj/effect/turf_decal/siding/red{ - dir = 6 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/small, -/area/station/security/brig) +/obj/machinery/light/floor, +/turf/open/floor/iron/kitchen/small, +/area/station/service/kitchen) "rpq" = ( /obj/machinery/camera/autoname/directional/east, /obj/machinery/airalarm/directional/east, /turf/open/floor/iron/smooth, /area/station/security/evidence) "rpv" = ( +/obj/structure/chair/sofa/bench/left{ + dir = 8 + }, +/obj/effect/turf_decal/tile/blue, +/turf/open/floor/iron/dark/side{ + dir = 4 + }, +/area/station/hallway/primary/central/fore) +"rpB" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/table, -/obj/item/storage/crayons{ - pixel_x = 3; - pixel_y = 11 +/obj/effect/turf_decal/tile/neutral{ + dir = 4 }, -/obj/item/toy/crayon/purple, +/obj/structure/sign/departments/holy/directional/north, +/obj/machinery/camera/directional/north, /turf/open/floor/iron, -/area/station/commons) -"rpy" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 5 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/station/maintenance/central/greater) -"rpJ" = ( -/obj/structure/cable, +/area/station/hallway/primary/port) +"rpE" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/landmark/navigate_destination/chapel, /obj/structure/disposalpipe/segment{ dir = 10 }, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating, -/area/station/maintenance/central/greater) +/turf/open/floor/iron, +/area/station/hallway/primary/port) +"rpF" = ( +/obj/structure/flora/tree/jungle/small/style_4, +/obj/effect/turf_decal/weather/dirt, +/turf/open/floor/grass, +/area/station/service/chapel) "rpV" = ( /obj/effect/spawner/random/structure/crate, /obj/effect/spawner/random/maintenance, @@ -51290,50 +52120,41 @@ /obj/item/radio/intercom/directional/west, /turf/open/floor/iron/smooth, /area/station/hallway/secondary/command) -"rqd" = ( -/obj/effect/mapping_helpers/broken_floor, -/obj/item/radio/intercom/directional/south, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/station/commons/vacant_room/commissary) "rqm" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/dark/small, /area/station/tcommsat/server) +"rqp" = ( +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/turf/open/floor/iron/dark, +/area/station/security/office) "rqq" = ( /turf/open/floor/catwalk_floor/iron_dark, /area/station/cargo/office) +"rqt" = ( +/obj/machinery/airalarm/directional/north, +/obj/effect/decal/cleanable/dirt, +/obj/structure/aquarium/lawyer, +/turf/open/floor/iron/dark, +/area/station/service/lawoffice) "rqw" = ( /turf/closed/wall, /area/station/commons/dorms) -"rqA" = ( -/obj/machinery/button/door/directional/west{ - id = "private_a"; - name = "Privacy Bolts"; - normaldoorcontrol = 1; - pixel_x = -7; - pixel_y = 24; - specialfunctions = 4 - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 8 +"rqD" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 4 }, /turf/open/floor/iron, -/area/station/commons/dorms) -"rqJ" = ( -/obj/structure/curtain/cloth, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/carpet/red, -/area/station/commons/dorms) -"rqQ" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/chair{ +/area/station/commons/fitness/locker_room) +"rqF" = ( +/obj/effect/turf_decal/weather/dirt{ dir = 1 }, -/obj/machinery/airalarm/directional/south, -/turf/open/floor/iron/showroomfloor, -/area/station/commons/toilet/auxiliary) +/obj/structure/flora/bush/large/style_3, +/turf/open/floor/grass, +/area/station/service/chapel) "rqR" = ( /obj/machinery/door/airlock/external/glass, /obj/effect/mapping_helpers/airlock/cyclelink_helper, @@ -51341,14 +52162,17 @@ /area/station/maintenance/starboard/fore) "rqV" = ( /obj/structure/lattice, -/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible/layer5{ +/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible/layer1{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible{ - dir = 4 +/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible/layer4{ + dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible/layer1{ - dir = 4 +/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible/layer5{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible{ + dir = 9 }, /turf/open/space/basic, /area/space/nearstation) @@ -51366,6 +52190,13 @@ dir = 4 }, /area/station/engineering/main) +"rrp" = ( +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/commons/fitness/locker_room) "rrq" = ( /obj/structure/closet, /turf/open/floor/plating, @@ -51374,21 +52205,6 @@ /obj/effect/spawner/structure/window/reinforced/tinted, /turf/open/floor/plating, /area/station/science/robotics/augments) -"rrx" = ( -/obj/effect/turf_decal/plaque{ - icon_state = "L13" - }, -/turf/open/floor/glass, -/area/station/hallway/secondary/spacebridge) -"rrC" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/airalarm/directional/west, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/central/fore) "rrG" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -51398,15 +52214,6 @@ dir = 4 }, /area/station/engineering/supermatter/room) -"rrH" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/iron/dark, -/area/station/service/lawoffice) "rrQ" = ( /obj/item/kirbyplants/random/fullysynthetic, /obj/effect/turf_decal/tile/dark_red/half/contrasted, @@ -51420,6 +52227,12 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/service/lawoffice) +"rrX" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 4 + }, +/turf/open/floor/stone, +/area/station/service/bar) "rrZ" = ( /obj/structure/closet/crate/trashcart, /obj/effect/spawner/random/trash/garbage, @@ -51444,17 +52257,19 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/dark, /area/station/service/lawoffice) -"rsp" = ( -/obj/structure/closet{ - name = "Paramedic Supplies" - }, -/obj/effect/turf_decal/siding/blue{ - dir = 5 - }, -/obj/machinery/light_switch/directional/north, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/white, -/area/station/medical/paramedic) +"rsl" = ( +/obj/structure/cable, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/structure/table, +/obj/item/stock_parts/subspace/ansible, +/obj/item/stock_parts/subspace/ansible, +/obj/item/stock_parts/subspace/ansible, +/obj/item/stock_parts/subspace/crystal, +/obj/item/stock_parts/subspace/crystal, +/obj/item/stock_parts/subspace/crystal, +/obj/machinery/power/apc/auto_name/directional/east, +/turf/open/floor/iron/dark, +/area/station/engineering/storage/tcomms) "rsr" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 8 @@ -51474,13 +52289,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/commons/dorms) -"rsy" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/hallway/secondary/recreation) "rsz" = ( /obj/structure/bed/medical{ dir = 4 @@ -51498,33 +52306,11 @@ "rsL" = ( /turf/closed/wall/r_wall, /area/station/maintenance/starboard/fore) -"rsQ" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/landmark/navigate_destination/chapel, -/obj/effect/landmark/transport/nav_beacon/tram/nav/immovable_rod, -/turf/open/floor/iron, -/area/station/hallway/primary/port) -"rsV" = ( -/obj/structure/cable, +"rsZ" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/door/airlock{ - name = "Coldroom Maintenance" - }, -/obj/effect/mapping_helpers/airlock/access/all/service/kitchen, -/turf/open/floor/plating, -/area/station/maintenance/central/greater) -"rtf" = ( /obj/effect/decal/cleanable/dirt, -/obj/structure/chair{ - dir = 8 - }, -/obj/effect/landmark/start/assistant, -/obj/machinery/camera/autoname/directional/east, -/turf/open/floor/iron, -/area/station/hallway/secondary/entry) +/turf/open/floor/iron/small, +/area/station/commons/fitness/locker_room) "rth" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -51538,32 +52324,6 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /turf/open/floor/iron/small, /area/station/ai_monitored/command/storage/eva) -"rtr" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating, -/area/station/maintenance/department/medical/central) -"rts" = ( -/obj/structure/disposalpipe/segment{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/hallway/secondary/recreation) -"rty" = ( -/obj/effect/turf_decal/tile/dark_red/opposingcorners, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/station/ai_monitored/security/armory) -"rtK" = ( -/obj/item/kirbyplants/random, -/turf/open/floor/iron, -/area/station/commons) "rtQ" = ( /turf/closed/wall/r_wall, /area/station/security/tram) @@ -51591,21 +52351,21 @@ dir = 8 }, /area/station/security/prison/garden) +"rud" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/door/window/left/directional/east{ + name = "Mass Driver Door"; + req_access = list("ordnance") + }, +/turf/open/floor/iron/dark/side{ + dir = 4 + }, +/area/station/science/ordnance/testlab) "rui" = ( /obj/structure/cable, /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/maintenance/port/lesser) -"ruo" = ( -/obj/structure/cable, -/obj/structure/chair{ - dir = 1; - pixel_y = -2 - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/firealarm/directional/south, -/turf/open/floor/iron, -/area/station/science/lower) "rup" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/cable, @@ -51623,41 +52383,50 @@ "ruD" = ( /turf/open/floor/plating, /area/station/maintenance/starboard/lesser) -"ruO" = ( +"ruS" = ( /obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark/side{ - dir = 4 - }, -/area/station/science/lab) -"ruV" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/holopad, -/turf/open/floor/iron, -/area/station/hallway/secondary/entry) +/obj/structure/disposalpipe/sorting/mail{ + dir = 4 + }, +/obj/effect/mapping_helpers/mail_sorting/service/kitchen, +/turf/open/floor/plating, +/area/station/maintenance/central/greater) "ruY" = ( /turf/open/floor/plating, /area/station/maintenance/fore/lesser) +"rvf" = ( +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/obj/effect/turf_decal/trimline/neutral/line{ + dir = 5 + }, +/obj/effect/turf_decal/trimline/neutral/corner{ + dir = 8 + }, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/hallway/primary/central/fore) "rvp" = ( /turf/closed/mineral/random/stationside, /area/station/maintenance/hallway/abandoned_command) +"rvr" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/airalarm/directional/west, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/station/hallway/primary/central/fore) "rvs" = ( /obj/effect/turf_decal/stripes/white/line, /obj/item/stack/sheet/mineral/titanium, /obj/machinery/light/small/directional/south, /turf/open/floor/tram, /area/station/maintenance/department/medical/central) -"rvy" = ( -/obj/effect/mapping_helpers/broken_floor, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/neutral, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/hallway/secondary/recreation) "rvz" = ( /obj/machinery/gravity_generator/main, /obj/effect/turf_decal/bot_white, @@ -51673,17 +52442,6 @@ }, /turf/open/floor/iron/smooth, /area/station/security/checkpoint/escape) -"rvE" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/chair/stool/directional/east, -/turf/open/floor/iron/smooth, -/area/station/maintenance/solars/port/aft) -"rvO" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/engineering/storage/tech) "rvX" = ( /obj/structure/table/reinforced, /obj/machinery/door/window/left/directional/south{ @@ -51771,33 +52529,13 @@ /obj/machinery/camera/autoname/directional/east, /turf/open/floor/plating, /area/station/maintenance/department/prison) -"rwR" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/machinery/airalarm/directional/north, -/turf/open/floor/iron, -/area/station/hallway/secondary/recreation) -"rwT" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/firealarm/directional/north, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 +"rxa" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 6 }, -/turf/open/floor/iron, -/area/station/hallway/secondary/recreation) -"rwW" = ( -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/engineering/storage/tech) +/obj/structure/mannequin/plastic, +/turf/open/floor/carpet/blue, +/area/station/cargo/boutique) "rxo" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -51808,10 +52546,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 6 }, -/obj/machinery/atmospherics/components/unary/thermomachine/heater/on{ - dir = 8; - initialize_directions = 8 - }, +/obj/item/kirbyplants/random, /turf/open/floor/iron, /area/station/engineering/atmos) "rxu" = ( @@ -51828,14 +52563,6 @@ /obj/item/razor, /turf/open/floor/iron/dark/small, /area/station/security/execution/education) -"rxM" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/newscaster/directional/north, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/hallway/secondary/recreation) "rxP" = ( /obj/structure/table, /obj/item/assembly/signaler{ @@ -51864,6 +52591,30 @@ /obj/item/modular_computer/laptop, /turf/open/floor/iron/grimy, /area/station/science/cubicle) +"rxX" = ( +/obj/structure/closet{ + name = "Paramedic Supplies" + }, +/obj/effect/turf_decal/siding/blue{ + dir = 4 + }, +/obj/machinery/camera/autoname/directional/east, +/obj/machinery/light/cold/directional/east, +/turf/open/floor/iron/white, +/area/station/medical/paramedic) +"rxY" = ( +/obj/structure/chair/stool/directional/east, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/iron/smooth, +/area/station/hallway/secondary/command) +"rya" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 10 + }, +/turf/open/floor/grass, +/area/station/service/chapel) "ryi" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -51879,22 +52630,6 @@ dir = 1 }, /area/station/science/research) -"rym" = ( -/obj/machinery/door/airlock/public/glass{ - name = "Public Shrine" - }, -/obj/machinery/door/firedoor, -/turf/open/floor/iron/textured_half{ - dir = 1 - }, -/area/station/hallway/secondary/exit/departure_lounge) -"ryp" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/siding/wood{ - dir = 5 - }, -/turf/open/floor/grass, -/area/station/service/chapel) "ryt" = ( /obj/machinery/light/dim/directional/north, /obj/effect/turf_decal/tile/neutral{ @@ -51914,19 +52649,11 @@ /obj/machinery/door/firedoor, /turf/open/floor/iron/dark, /area/station/medical/medbay/aft) -"ryP" = ( -/obj/structure/chair{ - pixel_y = -2 - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/obj/machinery/airalarm/directional/north, -/obj/effect/landmark/start/hangover, +"ryW" = ( +/obj/machinery/camera/autoname/directional/east, +/obj/effect/turf_decal/tile/neutral, /turf/open/floor/iron, -/area/station/hallway/secondary/recreation) +/area/station/hallway/primary/central/aft) "rza" = ( /obj/structure/disposalpipe/junction{ dir = 1 @@ -51935,22 +52662,37 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/cafeteria, /area/station/science/breakroom) -"rzu" = ( +"rzd" = ( +/obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/light/floor, -/turf/open/floor/wood/large, -/area/station/service/chapel) -"rzG" = ( -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/tile/dark_red/half/contrasted{ +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/white/small, +/area/station/science/ordnance/storage) +"rze" = ( +/obj/structure/railing{ dir = 4 }, -/mob/living/simple_animal/bot/secbot/beepsky/officer, -/obj/effect/turf_decal/siding/wideplating/dark/corner{ - dir = 8 +/turf/open/floor/iron, +/area/station/commons/dorms) +"rzy" = ( +/obj/effect/turf_decal/plaque{ + icon_state = "L9"; + pixel_y = -15 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 }, /turf/open/floor/iron, -/area/station/security) +/area/station/hallway/primary/central/aft) +"rzH" = ( +/obj/effect/mapping_helpers/airlock/access/all/service/kitchen, +/obj/machinery/door/airlock/freezer{ + name = "Freezer" + }, +/obj/structure/disposalpipe/segment, +/obj/structure/cable, +/turf/open/floor/iron/freezer, +/area/station/service/kitchen/coldroom) "rzJ" = ( /obj/structure/chair/sofa/bench/left{ dir = 4 @@ -51971,34 +52713,11 @@ /obj/machinery/bouldertech/refinery, /turf/open/floor/iron, /area/station/cargo/miningfoundry) -"rzR" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/holopad, -/turf/open/floor/iron, -/area/station/commons/fitness/recreation/entertainment) -"rAb" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/siding/wood{ - dir = 9 - }, -/turf/open/floor/grass, -/area/station/service/chapel) -"rAg" = ( -/obj/structure/cable, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating, -/area/station/maintenance/starboard/lesser) -"rAn" = ( -/obj/structure/closet/secure_closet/hydroponics, -/obj/effect/turf_decal/bot, -/obj/effect/turf_decal/tile/green/opposingcorners, -/obj/effect/turf_decal/tile/blue/opposingcorners{ - dir = 8 - }, -/obj/machinery/airalarm/directional/west, +"rzZ" = ( +/obj/effect/spawner/random/structure/crate, +/obj/effect/spawner/random/maintenance, /turf/open/floor/iron, -/area/station/service/hydroponics) +/area/station/maintenance/department/medical/central) "rAt" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -52016,12 +52735,6 @@ /obj/effect/turf_decal/tile/blue, /turf/open/floor/iron/white, /area/station/medical/medbay/central) -"rAy" = ( -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/turf/open/floor/stone, -/area/station/command/heads_quarters/hos) "rAA" = ( /obj/structure/flora/bush/flowers_pp/style_random, /mob/living/carbon/human/species/monkey, @@ -52037,18 +52750,6 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/security) -"rAD" = ( -/obj/effect/turf_decal/tile/green/opposingcorners, -/obj/effect/turf_decal/tile/blue/opposingcorners{ - dir = 8 - }, -/obj/machinery/light/small/directional/south, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/service/hydroponics) "rAG" = ( /obj/structure/table, /obj/structure/sign/warning/radiation/rad_area/directional/east, @@ -52072,13 +52773,6 @@ }, /turf/open/floor/plating, /area/station/engineering/supermatter/room) -"rAN" = ( -/obj/structure/cable, -/obj/effect/mapping_helpers/broken_floor, -/obj/machinery/power/apc/auto_name/directional/north, -/obj/machinery/light/small/directional/west, -/turf/open/floor/wood/tile, -/area/station/commons/vacant_room/commissary) "rAR" = ( /obj/structure/cable, /obj/machinery/door/airlock/security/glass{ @@ -52087,17 +52781,6 @@ /obj/effect/mapping_helpers/airlock/access/all/security/general, /turf/open/floor/iron/textured_half, /area/station/security/brig/entrance) -"rBb" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/green/opposingcorners, -/obj/effect/turf_decal/tile/blue/opposingcorners{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/service/hydroponics) "rBe" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -52107,6 +52790,11 @@ /obj/structure/extinguisher_cabinet/directional/east, /turf/open/floor/iron, /area/station/hallway/primary/aft) +"rBg" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/science/ordnance/testlab) "rBh" = ( /obj/effect/turf_decal/tile/brown/fourcorners, /turf/open/floor/iron, @@ -52120,19 +52808,20 @@ /obj/machinery/airalarm/directional/west, /turf/open/floor/iron/smooth, /area/station/security/checkpoint/customs) -"rBx" = ( -/obj/effect/turf_decal/tile/blue{ +"rBr" = ( +/obj/machinery/door/airlock/grunge{ + name = "Janitorial Closet" + }, +/obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/effect/turf_decal/bot, -/obj/effect/turf_decal/tile/green/opposingcorners, -/obj/effect/turf_decal/tile/blue/opposingcorners{ +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/iron/textured_half{ dir = 8 }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/vending/wardrobe/hydro_wardrobe, -/turf/open/floor/iron, -/area/station/service/hydroponics) +/area/station/commons) "rBy" = ( /obj/machinery/camera/autoname/directional/west, /turf/open/floor/iron, @@ -52152,16 +52841,6 @@ /obj/effect/landmark/secequipment, /turf/open/floor/iron, /area/station/security/tram) -"rBG" = ( -/obj/structure/window/spawner/directional/west, -/obj/structure/flora/bush/large/style_random{ - pixel_x = -17; - pixel_y = 2 - }, -/obj/structure/flora/bush/flowers_yw/style_random, -/obj/structure/window/spawner/directional/east, -/turf/open/misc/sandy_dirt, -/area/station/service/hydroponics) "rBI" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/turf_decal/tile/neutral{ @@ -52170,14 +52849,15 @@ /obj/machinery/camera/autoname/directional/north, /turf/open/floor/iron, /area/station/hallway/primary/starboard) -"rBN" = ( -/obj/effect/landmark/start/botanist, -/turf/open/floor/iron/white/small, -/area/station/service/hydroponics) -"rBQ" = ( -/obj/effect/landmark/event_spawn, -/turf/open/floor/iron/white/small, -/area/station/service/hydroponics) +"rBO" = ( +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/obj/machinery/airalarm/directional/east, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/commons/dorms) "rBY" = ( /obj/effect/turf_decal/tile/blue, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ @@ -52185,12 +52865,12 @@ }, /turf/open/floor/iron/white, /area/station/medical/medbay/central) -"rCd" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/airalarm/directional/east, -/obj/effect/turf_decal/tile/neutral, -/turf/open/floor/iron, -/area/station/hallway/primary/central/fore) +"rCa" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark/corner{ + dir = 1 + }, +/area/station/science/ordnance/testlab) "rCj" = ( /obj/structure/cable, /obj/effect/turf_decal/tile/dark_red/opposingcorners, @@ -52206,6 +52886,11 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/hallway/secondary/exit/departure_lounge) +"rCS" = ( +/obj/structure/chair/stool/bar/directional/west, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/carpet/lone, +/area/station/service/abandoned_gambling_den) "rCU" = ( /obj/effect/turf_decal/stripes/white/line{ dir = 10 @@ -52232,13 +52917,6 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/wood, /area/station/engineering/break_room) -"rDf" = ( -/obj/structure/disposalpipe/segment{ - dir = 6 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/turf/open/floor/iron, -/area/station/service/hydroponics) "rDj" = ( /obj/structure/chair/sofa/bench/left{ dir = 8 @@ -52249,27 +52927,28 @@ dir = 4 }, /area/station/hallway/secondary/entry) -"rDl" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/digital_clock/directional/north, +"rDv" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/light/cold/directional/west, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/machinery/firealarm/directional/west, +/obj/structure/disposalpipe/segment, /turf/open/floor/iron, -/area/station/commons/fitness/recreation/entertainment) -"rDx" = ( -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/structure/window/reinforced/spawner/directional/south, -/obj/effect/turf_decal/siding/purple{ +/area/station/hallway/primary/central/fore) +"rDD" = ( +/obj/structure/railing{ dir = 1 }, -/obj/effect/turf_decal/siding/purple, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/station/science/genetics) -"rDy" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/station/service/hydroponics) +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/white/corner, +/area/station/commons/dorms) "rDP" = ( /obj/item/kirbyplants/random/fullysynthetic, /obj/effect/turf_decal/tile/dark_red/opposingcorners, @@ -52292,6 +52971,11 @@ /obj/structure/tram, /turf/open/floor/tram, /area/station/maintenance/port/aft) +"rEa" = ( +/obj/structure/sink/directional/south, +/obj/structure/mirror/directional/north, +/turf/open/floor/iron/white/small, +/area/station/commons/toilet/restrooms) "rEb" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/landmark/generic_maintenance_landmark, @@ -52299,6 +52983,16 @@ /obj/structure/alien/weeds, /turf/open/floor/wood, /area/station/maintenance/starboard/greater) +"rEd" = ( +/turf/open/floor/iron, +/area/station/maintenance/fore/greater) +"rEF" = ( +/obj/machinery/photocopier, +/obj/structure/sign/painting/library{ + pixel_y = 32 + }, +/turf/open/floor/wood/parquet, +/area/station/service/library) "rEH" = ( /obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden{ dir = 4 @@ -52310,13 +53004,14 @@ /obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, /turf/open/floor/catwalk_floor, /area/station/engineering/atmos) -"rEL" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/turf/open/floor/iron/smooth, -/area/station/cargo/drone_bay) +"rEJ" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/camera/directional/east, +/obj/machinery/status_display/evac/directional/east, +/obj/effect/turf_decal/tile/neutral, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/station/hallway/primary/central/fore) "rEY" = ( /obj/effect/turf_decal/tile/blue, /obj/machinery/pdapainter{ @@ -52422,12 +53117,6 @@ /obj/effect/turf_decal/delivery/white, /turf/open/floor/iron, /area/station/cargo/sorting) -"rFQ" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/turf/open/floor/wood/tile, -/area/station/service/bar) "rFV" = ( /obj/effect/turf_decal/trimline/blue/filled/corner, /turf/open/floor/iron/white, @@ -52448,27 +53137,6 @@ /obj/machinery/light/cold/directional/north, /turf/open/floor/iron, /area/station/cargo/sorting) -"rGc" = ( -/obj/machinery/computer/crew{ - dir = 4 - }, -/obj/effect/turf_decal/siding/blue{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/white, -/area/station/medical/paramedic) -"rGm" = ( -/obj/effect/turf_decal/tile/dark_red/opposingcorners, -/obj/machinery/computer/security, -/obj/machinery/computer/security/telescreen{ - desc = "Used for watching Prison Wing holding areas."; - name = "Prison Monitor"; - network = list("prison"); - pixel_y = 30 - }, -/turf/open/floor/iron, -/area/station/security/warden) "rGp" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -52492,11 +53160,6 @@ /obj/effect/turf_decal/delivery/white, /turf/open/floor/iron, /area/station/cargo/sorting) -"rGt" = ( -/obj/machinery/exodrone_launcher, -/obj/effect/landmark/event_spawn, -/turf/open/floor/iron/smooth, -/area/station/cargo/drone_bay) "rGB" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment, @@ -52513,10 +53176,6 @@ }, /turf/open/floor/iron/white, /area/station/medical/virology) -"rGL" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/station/commons/fitness/recreation/entertainment) "rGN" = ( /obj/effect/spawner/random/structure/crate, /turf/open/floor/plating, @@ -52528,11 +53187,6 @@ /obj/item/screwdriver, /turf/open/floor/iron/dark, /area/station/hallway/secondary/construction) -"rHd" = ( -/obj/effect/turf_decal/tile/brown/full, -/obj/effect/landmark/event_spawn, -/turf/open/floor/iron/smooth_large, -/area/station/service/bar) "rHe" = ( /obj/effect/turf_decal/tile/yellow{ dir = 1 @@ -52543,15 +53197,6 @@ /obj/structure/cable, /turf/open/floor/iron/smooth, /area/station/engineering/main) -"rHm" = ( -/obj/effect/turf_decal/tile/brown/full, -/obj/machinery/chem_master/condimaster{ - desc = "Looks like a knock-off chem-master. Perhaps useful for separating liquids when mixing drinks precisely. Also dispenses condiments."; - name = "HoochMaster Deluxe"; - pixel_x = -4 - }, -/turf/open/floor/iron/smooth_large, -/area/station/service/bar) "rHp" = ( /obj/effect/turf_decal/siding/wood, /obj/effect/landmark/event_spawn, @@ -52589,38 +53234,17 @@ /obj/effect/spawner/random/structure/girder, /turf/open/floor/plating, /area/station/maintenance/department/engine/atmos) -"rHL" = ( -/obj/effect/mapping_helpers/broken_floor, -/obj/effect/turf_decal/delivery, -/obj/structure/sign/poster/official/random/directional/north, -/obj/machinery/modular_computer/preset/cargochat/service, -/turf/open/floor/iron/kitchen/small, -/area/station/hallway/secondary/service) -"rHQ" = ( -/obj/machinery/deepfryer, -/turf/open/floor/iron/cafeteria, -/area/station/service/kitchen) -"rHS" = ( -/obj/structure/chair/comfy/black{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/landmark/start/detective, -/turf/open/floor/wood, -/area/station/security/detectives_office) -"rHT" = ( -/obj/structure/closet/secure_closet/brig, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/security/execution/transfer) -"rHV" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/status_display/ai/directional/north, +"rHO" = ( +/obj/structure/closet/emcloset, +/obj/machinery/light/small/directional/west, /turf/open/floor/iron, -/area/station/commons/dorms) +/area/station/maintenance/hallway/abandoned_command) +"rHY" = ( +/obj/effect/turf_decal/siding/wideplating_new/terracotta{ + dir = 1 + }, +/turf/open/floor/wood/tile, +/area/station/maintenance/central/lesser) "rIb" = ( /obj/effect/turf_decal/tile/dark_red/opposingcorners, /obj/structure/closet/secure_closet/security/sec, @@ -52629,10 +53253,6 @@ /obj/structure/reagent_dispensers/wall/peppertank/directional/north, /turf/open/floor/iron, /area/station/security/lockers) -"rIg" = ( -/obj/machinery/griddle, -/turf/open/floor/iron/cafeteria, -/area/station/service/kitchen) "rIn" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/turf_decal/tile/neutral{ @@ -52641,123 +53261,65 @@ /obj/machinery/camera/autoname/directional/east, /turf/open/floor/iron, /area/station/hallway/primary/aft) -"rIH" = ( -/obj/structure/disposalpipe/junction/flip{ - dir = 1 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/dark_red/half/contrasted{ - dir = 4 - }, -/obj/effect/turf_decal/siding/wideplating/dark{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/security) +"rIo" = ( +/obj/effect/turf_decal/siding/green/end, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/dark/herringbone, +/area/station/service/abandoned_gambling_den/gaming) "rIJ" = ( /obj/effect/turf_decal/stripes/line, /turf/open/floor/engine, /area/station/engineering/gravity_generator) -"rIO" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/commons/fitness/recreation/entertainment) -"rIS" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/turf/open/floor/iron/cafeteria, -/area/station/service/kitchen) "rIY" = ( /turf/closed/wall/r_wall, /area/station/construction/mining/aux_base) -"rJh" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/turf/open/floor/iron/cafeteria, -/area/station/service/kitchen) -"rJi" = ( -/obj/structure/cable, -/obj/structure/chair/stool/directional/west, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/cafeteria, -/area/station/security/prison/mess) -"rJl" = ( -/obj/structure/table/reinforced, -/obj/machinery/door/poddoor/shutters/preopen{ - dir = 4; - id = "kitchenshutters"; - name = "Kitchen Shutters" - }, -/turf/open/floor/iron/cafeteria, -/area/station/service/kitchen) "rJo" = ( /obj/effect/turf_decal/siding/wood{ dir = 1 }, /turf/open/floor/carpet/blue, /area/station/cargo/boutique) -"rJp" = ( -/obj/machinery/airalarm/directional/north, -/obj/machinery/door/window/right/directional/west{ - name = "Bar Delivery"; - req_access = list("bar") - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/duct, -/turf/open/floor/stone, -/area/station/service/bar/backroom) "rJs" = ( /obj/machinery/atmospherics/pipe/smart/simple/general/visible, /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/maintenance/department/prison) -"rJv" = ( -/obj/effect/turf_decal/tile/red/opposingcorners{ - dir = 1 - }, -/obj/structure/chair/stool/bar/directional/west, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/turf/open/floor/iron/cafeteria, -/area/station/service/cafeteria) "rJw" = ( /mob/living/carbon/human/species/monkey{ name = "George" }, /turf/open/floor/grass, /area/station/science/xenobiology) -"rJH" = ( -/obj/structure/cable, -/obj/effect/turf_decal/tile/dark_red/opposingcorners, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/security/brig/entrance) -"rJJ" = ( -/obj/structure/cable, -/obj/effect/mapping_helpers/broken_floor, -/obj/machinery/light/small/dim/directional/south, -/turf/open/floor/plating, -/area/station/maintenance/port/aft) -"rJT" = ( -/obj/structure/chair/sofa/left/maroon, -/turf/open/floor/iron/showroomfloor, -/area/station/service/cafeteria) "rJW" = ( /obj/machinery/suit_storage_unit/hos, /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/checker, /area/station/command/heads_quarters/hos) "rJZ" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 8 +/obj/effect/turf_decal/trimline/neutral/line{ + dir = 1 }, -/obj/item/trash/popcorn/salty, -/turf/open/floor/iron/grimy, -/area/station/service/theater) +/obj/effect/turf_decal/trimline/neutral/line, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/hallway/primary/central/fore) +"rKo" = ( +/obj/structure/table/reinforced, +/obj/item/reagent_containers/condiment/peppermill{ + pixel_x = 3 + }, +/obj/item/reagent_containers/condiment/saltshaker{ + pixel_x = -3 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "kitchenshutters"; + name = "Kitchen Shutters" + }, +/turf/open/floor/plating, +/area/station/service/kitchen) "rKv" = ( /obj/structure/broken_flooring/singular/directional/east, /turf/open/floor/iron, @@ -52768,16 +53330,6 @@ }, /turf/open/floor/iron, /area/station/science/cytology) -"rKL" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 8 - }, -/obj/structure/chair/pew{ - dir = 4 - }, -/obj/effect/landmark/start/hangover, -/turf/open/floor/wood, -/area/station/service/theater) "rKR" = ( /obj/effect/turf_decal/tile/yellow{ dir = 1 @@ -52786,15 +53338,6 @@ /obj/structure/cable, /turf/open/floor/iron/smooth, /area/station/engineering/main) -"rKV" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/mapping_helpers/broken_floor, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/station/maintenance/hallway/abandoned_command) "rKZ" = ( /obj/structure/railing, /obj/machinery/light/small/dim/directional/north, @@ -52841,38 +53384,12 @@ /obj/structure/sign/poster/official/random/directional/north, /turf/open/floor/plating, /area/station/maintenance/department/engine) -"rLu" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/closet/crate, -/obj/item/stock_parts/cell/high{ - pixel_x = -11; - pixel_y = 2 - }, -/obj/item/reagent_containers/cup/glass/bottle/vodka, -/obj/item/food/grown/citrus/orange, -/obj/item/food/grown/citrus/orange{ - pixel_x = 4; - pixel_y = 2 - }, -/obj/item/food/grown/grapes/green{ - pixel_y = -4; - pixel_x = -6 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/turf/open/floor/iron/small, -/area/station/maintenance/department/engine/atmos) -"rLw" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 5 - }, +"rLx" = ( +/obj/effect/turf_decal/siding/thinplating/terracotta, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/station/maintenance/central/greater) +/turf/open/floor/iron, +/area/station/commons/dorms) "rLK" = ( /obj/machinery/hydroponics/soil{ pixel_y = 8 @@ -52890,24 +53407,6 @@ }, /turf/open/floor/iron/dark/herringbone, /area/station/ai_monitored/command/nuke_storage) -"rLT" = ( -/obj/effect/turf_decal/siding/wood/corner, -/obj/structure/flora/tree/jungle/small/style_random, -/turf/open/floor/grass, -/area/station/service/chapel) -"rMa" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/obj/structure/chair/sofa/bench/left{ - dir = 1 - }, -/obj/effect/landmark/start/hangover, -/turf/open/floor/iron, -/area/station/hallway/secondary/dock) "rMb" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /obj/effect/landmark/generic_maintenance_landmark, @@ -52987,28 +53486,6 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron/diagonal, /area/station/engineering/lobby) -"rMV" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/station/maintenance/central/greater) -"rMY" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/mapping_helpers/broken_floor, -/obj/effect/decal/cleanable/dirt, -/obj/structure/steam_vent, -/turf/open/floor/plating, -/area/station/maintenance/central/greater) "rNd" = ( /obj/structure/cable, /obj/machinery/door/airlock{ @@ -53027,16 +53504,6 @@ /obj/machinery/digital_clock/directional/north, /turf/open/floor/iron, /area/station/security) -"rNq" = ( -/obj/machinery/door/airlock/multi_tile/public/glass{ - name = "Theatre" - }, -/obj/machinery/door/firedoor, -/turf/open/floor/iron/textured_half, -/area/station/service/theater) -"rNA" = ( -/turf/open/floor/wood, -/area/station/service/theater) "rNB" = ( /obj/machinery/light/small/directional/west, /turf/open/floor/catwalk_floor/iron_smooth, @@ -53054,71 +53521,20 @@ /obj/effect/spawner/random/entertainment/arcade, /turf/open/floor/iron/cafeteria, /area/station/security/prison/mess) -"rNK" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass{ - name = "Holodeck" - }, -/turf/open/floor/iron, -/area/station/commons/fitness/recreation/entertainment) -"rOb" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/station/maintenance/central/greater) -"rOm" = ( +"rNL" = ( /obj/effect/turf_decal/siding/wood{ dir = 4 }, -/obj/structure/chair/pew{ - dir = 4 - }, +/obj/structure/displaycase/trophy, +/turf/open/floor/wood/parquet, +/area/station/service/library) +"rNN" = ( /obj/effect/landmark/start/hangover, -/turf/open/floor/wood, -/area/station/service/theater) -"rOo" = ( -/obj/structure/cable, -/obj/effect/mapping_helpers/broken_floor, -/obj/machinery/airalarm/directional/north, -/obj/machinery/power/apc/auto_name/directional/east, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/station/ai_monitored/turret_protected/ai_upload_foyer) -"rOs" = ( -/obj/structure/chair{ - dir = 1; - pixel_y = -2 +/obj/effect/turf_decal/tile/neutral{ + dir = 1 }, -/obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, -/area/station/science/lower) -"rOx" = ( -/obj/structure/window/reinforced/spawner/directional/west, -/turf/open/floor/wood/parquet, -/area/station/service/theater) -"rOy" = ( -/obj/structure/chair/plastic{ - dir = 8 - }, -/obj/effect/landmark/start/hangover, -/obj/machinery/light/small/directional/east, -/turf/open/floor/glass, -/area/station/hallway/secondary/spacebridge) -"rOD" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral, -/obj/structure/broken_flooring/singular/directional/south, -/turf/open/floor/plating, -/area/station/hallway/secondary/recreation) +/area/station/hallway/primary/central/aft) "rOG" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment, @@ -53140,11 +53556,6 @@ /obj/structure/sign/poster/official/random/directional/north, /turf/open/floor/wood, /area/station/commons/fitness/recreation) -"rON" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/neutral, -/turf/open/floor/iron, -/area/station/hallway/secondary/recreation) "rOW" = ( /obj/structure/cable, /obj/effect/spawner/structure/window/reinforced, @@ -53156,13 +53567,6 @@ "rPf" = ( /turf/closed/wall/rust, /area/station/ai_monitored/turret_protected/aisat/maint) -"rPl" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/neutral, -/turf/open/floor/iron, -/area/station/hallway/secondary/recreation) "rPm" = ( /obj/structure/cable, /obj/effect/turf_decal/siding/thinplating_new/light{ @@ -53197,6 +53601,26 @@ }, /turf/open/floor/iron/white/small, /area/station/medical/psychology) +"rPA" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/stripes/red/line, +/obj/effect/turf_decal/stripes/red/line{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/small, +/area/station/hallway/primary/central/fore) +"rPL" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/turf/open/floor/plating, +/area/station/maintenance/port/lesser) "rPT" = ( /obj/structure/chair/stool/bar/directional/east, /obj/effect/turf_decal/siding/red/corner{ @@ -53207,6 +53631,16 @@ }, /turf/open/floor/iron/white, /area/station/security/medical) +"rPU" = ( +/obj/structure/window/reinforced/spawner/directional/east, +/obj/machinery/status_display/door_timer{ + id = "Cell 2"; + name = "Cell 2"; + pixel_y = 32 + }, +/obj/machinery/camera/autoname/directional/north, +/turf/open/floor/iron/dark/small, +/area/station/security/brig) "rPV" = ( /obj/machinery/vending/tool, /obj/effect/turf_decal/bot, @@ -53216,6 +53650,19 @@ /obj/structure/sign/poster/official/random/directional/west, /turf/open/floor/iron, /area/station/engineering/main) +"rPW" = ( +/obj/effect/turf_decal/weather/dirt, +/obj/structure/flora/bush/flowers_br/style_random, +/turf/open/floor/grass, +/area/station/service/chapel) +"rPX" = ( +/obj/effect/turf_decal/siding/wood, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 4 + }, +/obj/machinery/holopad, +/turf/open/floor/stone, +/area/station/service/bar) "rQi" = ( /turf/closed/wall/r_wall, /area/station/engineering/main) @@ -53223,14 +53670,6 @@ /obj/structure/lattice, /turf/open/space/basic, /area/station/engineering/atmos/space_catwalk) -"rQt" = ( -/obj/effect/landmark/start/mime, -/turf/open/floor/carpet/lone, -/area/station/service/theater) -"rQw" = ( -/obj/machinery/light/small/directional/north, -/turf/open/floor/engine, -/area/station/science/xenobiology) "rQA" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -53285,6 +53724,11 @@ dir = 1 }, /area/station/hallway/secondary/exit/departure_lounge) +"rRa" = ( +/obj/effect/spawner/random/trash, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/fore/greater) "rRf" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -53298,92 +53742,40 @@ dir = 1 }, /area/station/security/courtroom) -"rRn" = ( -/obj/structure/lattice, -/obj/structure/window/reinforced/spawner/directional/west, -/turf/open/space/basic, -/area/space/nearstation) +"rRq" = ( +/obj/structure/cable, +/obj/effect/turf_decal/tile/dark_red/opposingcorners, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/security/brig/entrance) "rRu" = ( /obj/structure/transit_tube/horizontal, /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/maintenance/starboard/greater) -"rRy" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/commons/dorms) "rRz" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/security/courtroom) -"rRF" = ( -/obj/structure/chair/comfy/beige{ - dir = 4 - }, -/obj/item/radio/intercom/directional/west, -/turf/open/floor/iron, -/area/station/commons/dorms) "rRQ" = ( /obj/structure/hedge, /obj/item/radio/intercom/directional/south, /turf/open/floor/wood/large, /area/station/command/heads_quarters/captain) -"rRT" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/white, -/area/station/science/cytology) -"rRU" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/turf/open/floor/iron/white, -/area/station/science/cytology) "rRW" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/security/courtroom) -"rRY" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/hallway/secondary/entry) "rSi" = ( /obj/effect/turf_decal/tile/dark_red{ dir = 8 }, /turf/open/floor/iron/smooth, /area/station/security/checkpoint/escape) -"rSj" = ( -/obj/structure/cable, -/obj/machinery/door/airlock{ - name = "Maintenance" - }, -/obj/effect/mapping_helpers/airlock/access/any/security/general, -/turf/open/floor/plating, -/area/station/maintenance/central/lesser) -"rSm" = ( -/obj/structure/table/glass, -/obj/item/reagent_containers/cup/glass/waterbottle/large{ - pixel_x = -3; - pixel_y = 11 - }, -/obj/effect/mapping_helpers/broken_floor, -/obj/machinery/light/small/directional/south, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/station/service/lawoffice) "rSt" = ( /obj/structure/disposalpipe/segment{ dir = 9 @@ -53399,6 +53791,13 @@ /obj/effect/mapping_helpers/airlock/access/all/medical/coroner, /turf/open/floor/iron/small, /area/station/medical/morgue) +"rSy" = ( +/obj/machinery/door/airlock{ + id_tag = "CabinS"; + name = "Study" + }, +/turf/open/floor/carpet/green, +/area/station/commons/dorms) "rSz" = ( /obj/structure/chair/comfy/brown{ buildstackamount = 0; @@ -53415,6 +53814,12 @@ /obj/structure/railing/corner, /turf/open/space/basic, /area/space/nearstation) +"rSI" = ( +/obj/structure/cable, +/obj/machinery/airalarm/directional/south, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/wood/tile, +/area/station/command/corporate_showroom) "rST" = ( /turf/closed/wall, /area/station/cargo/storage) @@ -53429,16 +53834,6 @@ }, /turf/open/floor/iron/smooth, /area/station/engineering/main) -"rTj" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/light/small/directional/north, -/turf/open/floor/iron, -/area/station/commons/dorms) "rTq" = ( /obj/machinery/photocopier, /obj/effect/decal/cleanable/dirt, @@ -53456,6 +53851,13 @@ }, /turf/open/floor/plating, /area/station/cargo/storage) +"rTC" = ( +/obj/item/kirbyplants/random, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/hallway/secondary/recreation) "rTD" = ( /obj/structure/disposalpipe/segment, /obj/effect/turf_decal/trimline/green/filled/line{ @@ -53507,6 +53909,16 @@ /obj/machinery/light/small/directional/south, /turf/open/floor/iron, /area/station/hallway/secondary/entry) +"rUc" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/structure/chair/office/light{ + dir = 8 + }, +/obj/effect/turf_decal/siding/purple/corner, +/obj/effect/landmark/start/research_director, +/obj/machinery/light/floor, +/turf/open/floor/iron/dark, +/area/station/command/heads_quarters/rd) "rUd" = ( /turf/closed/wall, /area/station/security/prison) @@ -53516,6 +53928,10 @@ }, /turf/open/floor/engine, /area/station/science/cytology) +"rUq" = ( +/obj/item/assembly/mousetrap/armed, +/turf/open/floor/stone, +/area/station/service/abandoned_gambling_den) "rUs" = ( /obj/machinery/camera/directional/west{ c_tag = "Engineering - Decontamination B" @@ -53533,12 +53949,6 @@ }, /turf/open/floor/iron, /area/station/cargo/sorting) -"rUB" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/large, -/area/station/hallway/secondary/spacebridge) "rUD" = ( /obj/structure/lattice/catwalk, /obj/structure/railing{ @@ -53558,10 +53968,6 @@ }, /turf/open/space/basic, /area/station/engineering/atmos/space_catwalk) -"rUE" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark/small, -/area/station/science/xenobiology) "rUI" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -53598,6 +54004,15 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/dark, /area/station/security/prison/safe) +"rVt" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/structure/chair/wood{ + dir = 4 + }, +/turf/open/floor/wood/tile, +/area/station/service/bar) "rVy" = ( /obj/effect/turf_decal/stripes/red/line{ dir = 4 @@ -53611,8 +54026,8 @@ /obj/effect/turf_decal/stripes/line{ dir = 1 }, -/obj/machinery/atmospherics/pipe/smart/simple/purple/visible{ - dir = 4 +/obj/machinery/atmospherics/pipe/smart/manifold/purple/visible{ + dir = 1 }, /turf/open/floor/iron, /area/station/engineering/atmos) @@ -53651,12 +54066,6 @@ }, /turf/open/floor/iron/dark, /area/station/security/processing) -"rVX" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark/side{ - dir = 4 - }, -/area/station/science/lab) "rWm" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -53665,17 +54074,6 @@ dir = 4 }, /area/station/science/lobby) -"rWr" = ( -/obj/structure/table, -/obj/item/stock_parts/matter_bin{ - pixel_x = 6; - pixel_y = 15 - }, -/obj/item/stock_parts/matter_bin{ - pixel_y = 5 - }, -/turf/open/floor/iron/dark, -/area/station/science/lab) "rWs" = ( /obj/effect/turf_decal/siding/brown{ dir = 5 @@ -53749,26 +54147,11 @@ }, /turf/open/floor/plating, /area/station/maintenance/department/engine) -"rWW" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating, -/area/station/maintenance/department/medical/central) -"rXm" = ( -/obj/structure/chair/office, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/smooth, -/area/station/cargo/drone_bay) -"rXr" = ( -/obj/structure/cable, -/obj/effect/mapping_helpers/broken_floor, -/obj/machinery/power/apc/auto_name/directional/east, -/turf/open/floor/iron/smooth, -/area/station/cargo/drone_bay) +"rWU" = ( +/obj/structure/rack, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/iron, +/area/station/maintenance/port/aft) "rXv" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /turf/open/floor/iron, @@ -53777,6 +54160,28 @@ /obj/structure/reagent_dispensers/watertank, /turf/open/floor/plating, /area/station/maintenance/port/greater) +"rXy" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/turf/open/floor/plating, +/area/station/maintenance/central/greater) +"rXM" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/engineering/storage/tech) +"rXO" = ( +/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, +/obj/machinery/door/airlock{ + name = "Maintenance" + }, +/obj/effect/mapping_helpers/airlock/unres, +/turf/open/floor/plating, +/area/station/maintenance/central/greater) "rXW" = ( /obj/structure/flora/bush/flowers_yw, /obj/machinery/door/window/left/directional/west{ @@ -53792,12 +54197,9 @@ /obj/machinery/camera/autoname/directional/north, /turf/open/floor/iron/smooth, /area/station/security/checkpoint/customs) -"rYd" = ( -/obj/structure/chair/sofa/left, -/obj/effect/mapping_helpers/broken_floor, -/obj/machinery/airalarm/directional/north, -/turf/open/floor/wood, -/area/station/hallway/secondary/service) +"rYc" = ( +/turf/open/floor/iron/small, +/area/station/maintenance/port/lesser) "rYm" = ( /obj/effect/turf_decal/tile/neutral/fourcorners, /obj/structure/chair/office/light{ @@ -53813,21 +54215,38 @@ "rYp" = ( /turf/open/floor/iron/dark/small, /area/station/tcommsat/server) -"rYv" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment, -/turf/open/floor/plating, -/area/station/maintenance/port/greater) -"rYD" = ( +"rYs" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 6 + }, +/obj/structure/flora/bush/flowers_yw/style_3, +/turf/open/floor/grass, +/area/station/service/chapel) +"rYt" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/station/science/cytology) +"rYx" = ( +/obj/effect/turf_decal/siding/wideplating/dark, /obj/structure/cable, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating, -/area/station/maintenance/port/greater) +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/small, +/area/station/service/barber) "rYG" = ( /obj/structure/cable, /obj/machinery/door/firedoor, /turf/open/floor/iron, /area/station/security/prison/workout) +"rYJ" = ( +/obj/machinery/skill_station, +/obj/structure/sign/painting/library{ + pixel_x = 30 + }, +/turf/open/floor/wood/parquet, +/area/station/service/library) "rYL" = ( /obj/effect/turf_decal/tile/yellow/opposingcorners, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -53838,6 +54257,12 @@ /obj/structure/extinguisher_cabinet/directional/south, /turf/open/floor/iron, /area/station/command/heads_quarters/ce) +"rZb" = ( +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/turf/open/floor/plating, +/area/station/maintenance/port/greater) "rZc" = ( /obj/machinery/holopad, /obj/effect/turf_decal/box/white{ @@ -53845,6 +54270,10 @@ }, /turf/open/floor/iron, /area/station/medical/chemistry) +"rZe" = ( +/obj/structure/railing/corner/end/flip, +/turf/open/floor/plating, +/area/station/cargo/miningfoundry) "rZi" = ( /obj/structure/cable, /obj/machinery/power/solar{ @@ -53861,15 +54290,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/catwalk_floor/flat_white, /area/station/science/robotics/augments) -"rZn" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/duct, -/turf/open/floor/stone, -/area/station/service/bar/backroom) "rZq" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/status_display/ai/directional/west, @@ -53883,6 +54303,27 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/department/electrical) +"rZw" = ( +/obj/structure/table/glass, +/obj/effect/mapping_helpers/broken_floor, +/obj/machinery/light/small/directional/south, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/service/lawoffice) +"rZz" = ( +/obj/structure/cable, +/obj/effect/turf_decal/trimline/neutral/line, +/obj/effect/turf_decal/trimline/neutral/line{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/port) "rZG" = ( /obj/structure/closet/crate/trashcart, /obj/effect/spawner/random/trash/food_packaging, @@ -53892,35 +54333,20 @@ /obj/structure/alien/weeds, /turf/open/floor/iron, /area/station/maintenance/starboard/greater) -"rZH" = ( -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/effect/turf_decal/siding/purple{ - dir = 1 - }, -/obj/effect/turf_decal/siding/purple/corner, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/station/science/genetics) -"rZK" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/power/apc/auto_name/directional/north, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/station/maintenance/port/greater) -"rZL" = ( -/obj/structure/bed/maint, +"rZM" = ( +/obj/structure/table/wood, +/obj/item/clothing/glasses/eyepatch/medical, /turf/open/floor/carpet/orange, -/area/station/service/abandoned_gambling_den) -"rZN" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 +/area/station/commons/dorms) +"sar" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 }, -/obj/effect/turf_decal/tile/brown/full, -/turf/open/floor/iron/smooth_large, -/area/station/service/bar) +/obj/machinery/camera/autoname/directional/west, +/obj/machinery/firealarm/directional/west, +/turf/open/floor/iron, +/area/station/hallway/primary/central/fore) "sas" = ( /obj/effect/turf_decal/siding/wood, /turf/open/floor/carpet/blue, @@ -53937,25 +54363,23 @@ }, /turf/open/floor/iron, /area/station/engineering/atmos/pumproom) -"say" = ( -/obj/machinery/hydroponics/constructable, -/obj/effect/turf_decal/tile/blue/half, -/obj/machinery/light/small/directional/south, -/turf/open/floor/iron/white/small, -/area/station/service/hydroponics) +"saz" = ( +/obj/machinery/status_display/ai/directional/west, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central/aft) +"saL" = ( +/obj/effect/turf_decal/siding/wood, +/obj/machinery/light/small/directional/west, +/turf/open/floor/wood/parquet, +/area/station/service/library) "saY" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/science/robotics/augments) -"saZ" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/machinery/status_display/evac/directional/north, -/turf/open/floor/iron, -/area/station/hallway/primary/port) "sbf" = ( /obj/structure/railing{ dir = 1 @@ -53968,30 +54392,10 @@ /obj/structure/cable, /turf/open/floor/iron/smooth, /area/station/engineering/atmos) -"sbm" = ( -/obj/structure/plasticflaps/opaque, -/obj/machinery/duct, -/turf/open/floor/iron, -/area/station/maintenance/central/greater) "sbq" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/closed/wall/r_wall, /area/station/science/ordnance/freezerchamber) -"sbr" = ( -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/structure/window/reinforced/spawner/directional/south, -/obj/effect/turf_decal/siding/purple{ - dir = 1 - }, -/obj/effect/turf_decal/siding/purple, -/obj/item/storage/box/bodybags{ - pixel_x = -4; - pixel_y = 9 - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/light_switch/directional/north, -/turf/open/floor/iron/dark, -/area/station/science/genetics) "sbx" = ( /obj/structure/chair/sofa/bench/right{ dir = 8 @@ -54003,12 +54407,6 @@ /obj/machinery/airalarm/directional/east, /turf/open/floor/iron/cafeteria, /area/station/hallway/secondary/exit/departure_lounge) -"sbB" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/heat_exchanging/simple, -/turf/open/floor/iron/dark/small, -/area/station/tcommsat/server) "sbG" = ( /obj/machinery/atmospherics/pipe/smart/simple/green/visible, /obj/machinery/door/firedoor, @@ -54094,45 +54492,26 @@ /obj/machinery/light/small/broken/directional/south, /turf/open/floor/iron, /area/station/maintenance/starboard/aft) -"scz" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/door/airlock/maintenance{ - name = "Maintenance" - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, -/obj/effect/mapping_helpers/airlock/unres{ +"scR" = ( +/obj/effect/turf_decal/siding/wood{ dir = 8 }, -/turf/open/floor/plating, -/area/station/maintenance/port/greater) -"scC" = ( -/obj/machinery/chem_master/condimaster{ - name = "CondiMaster Neo" +/obj/effect/landmark/start/assistant, +/turf/open/floor/wood/tile, +/area/station/service/bar) +"scY" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 4 }, -/obj/machinery/camera/autoname/directional/north, -/obj/machinery/airalarm/directional/north, -/turf/open/floor/iron/cafeteria, -/area/station/service/kitchen) +/turf/open/floor/wood, +/area/station/cargo/boutique) "sdf" = ( /obj/item/kirbyplants/random/fullysynthetic, /obj/machinery/light_switch/directional/east, /turf/open/floor/iron/dark, /area/station/security/interrogation) -"sdg" = ( -/obj/structure/cable, -/obj/effect/turf_decal/siding/wood{ - dir = 4 - }, -/turf/open/floor/grass, -/area/station/service/chapel) -"sdm" = ( -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating, -/area/station/maintenance/department/medical/central) "sdF" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ @@ -54140,20 +54519,6 @@ }, /turf/open/floor/iron, /area/station/engineering/atmospherics_engine) -"sdQ" = ( -/obj/structure/cable, -/obj/machinery/door/airlock/maintenance{ - name = "Maintenance" - }, -/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, -/turf/open/floor/plating, -/area/station/maintenance/port/greater) -"sdT" = ( -/obj/machinery/hydroponics/constructable, -/obj/effect/turf_decal/tile/blue/half, -/obj/machinery/camera/autoname/directional/west, -/turf/open/floor/iron/white/small, -/area/station/service/hydroponics) "sea" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -54168,61 +54533,72 @@ /obj/effect/spawner/random/engineering/tracking_beacon, /turf/open/floor/iron/smooth, /area/station/engineering/supermatter/room) -"sei" = ( -/obj/effect/turf_decal/siding/thinplating_new/light{ - dir = 8 +"sem" = ( +/obj/machinery/door/airlock{ + name = "Kitchen" }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/turf/open/floor/iron, -/area/station/service/hydroponics) -"sel" = ( -/obj/structure/disposalpipe/segment, +/obj/effect/mapping_helpers/airlock/access/all/service/kitchen, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron, -/area/station/service/hydroponics) -"seE" = ( -/obj/structure/curtain/cloth, -/turf/open/floor/carpet/purple, -/area/station/commons/dorms) -"seI" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/landmark/generic_maintenance_landmark, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plating, +/area/station/maintenance/central/greater) +"ser" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 }, -/turf/open/floor/wood, -/area/station/maintenance/fore/greater) +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron/dark/side{ + dir = 4 + }, +/area/station/science/ordnance/testlab) +"ses" = ( +/obj/structure/dresser, +/obj/machinery/light/small/directional/north, +/turf/open/floor/wood/parquet, +/area/station/command/heads_quarters/cmo) "seM" = ( /obj/effect/turf_decal/stripes/red/line{ dir = 4 }, /turf/open/floor/iron/smooth_large, /area/station/science/auxlab/firing_range) +"seN" = ( +/obj/machinery/light/small/directional/east, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/maintenance/fore/greater) "seV" = ( /obj/structure/transit_tube/horizontal, /obj/structure/lattice/catwalk, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/space/basic, /area/space/nearstation) +"sfb" = ( +/obj/structure/window/spawner/directional/west, +/obj/structure/flora/bush/jungle/a/style_random, +/obj/structure/flora/bush/flowers_pp/style_random, +/obj/structure/window/spawner/directional/east, +/obj/machinery/light/floor, +/obj/structure/window/spawner/directional/north, +/turf/open/floor/grass, +/area/station/service/hydroponics) "sfd" = ( /obj/effect/turf_decal/siding/blue{ dir = 10 }, /turf/open/floor/engine/o2, /area/station/engineering/atmos/space_catwalk) -"sfh" = ( -/obj/structure/table/wood, -/obj/effect/turf_decal/tile/brown/full, -/obj/item/reagent_containers/cup/glass/shaker{ - pixel_x = 5; - pixel_y = 10 - }, -/obj/item/reagent_containers/cup/rag{ - pixel_x = 7; - pixel_y = -1 - }, -/turf/open/floor/iron/smooth_large, -/area/station/service/bar) +"sfk" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/tile/neutral, +/turf/open/floor/iron, +/area/station/hallway/secondary/recreation) "sfl" = ( /obj/structure/lattice, /obj/machinery/atmospherics/pipe/smart/simple/cyan/visible/layer2{ @@ -54238,16 +54614,11 @@ dir = 1 }, /area/station/science/research) -"sfv" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/station/maintenance/department/medical/central) +"sfu" = ( +/obj/effect/turf_decal/tile/dark_red/opposingcorners, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/station/security/brig/entrance) "sfF" = ( /obj/machinery/door/airlock/engineering{ name = "Engineering Office" @@ -54269,29 +54640,15 @@ dir = 8 }, /area/station/engineering/main) -"sfK" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/central/fore) -"sfL" = ( -/obj/machinery/door/airlock/maintenance{ - name = "Maintenance" +"sfU" = ( +/obj/machinery/light/small/directional/south, +/obj/machinery/camera/autoname/directional/south, +/obj/effect/turf_decal/siding/wood{ + dir = 1 }, -/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, -/turf/open/floor/plating, -/area/station/maintenance/port/greater) -"sfX" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment, -/obj/effect/mapping_helpers/broken_floor, -/obj/effect/decal/cleanable/dirt, -/obj/structure/steam_vent, -/turf/open/floor/plating, -/area/station/maintenance/central/greater) +/obj/effect/turf_decal/siding/wood, +/turf/open/floor/stone, +/area/station/service/bar) "sge" = ( /obj/structure/reagent_dispensers/beerkeg, /obj/item/clothing/head/costume/festive, @@ -54304,6 +54661,11 @@ /obj/effect/turf_decal/stripes/white/end, /turf/open/floor/iron/dark, /area/station/science/ordnance/testlab) +"sgB" = ( +/obj/item/kirbyplants/random/fullysynthetic, +/obj/machinery/light/small/directional/west, +/turf/open/floor/iron/showroomfloor, +/area/station/commons/toilet/auxiliary) "sgC" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -54313,12 +54675,6 @@ }, /turf/open/floor/iron, /area/station/cargo/storage) -"sgE" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/door/firedoor, -/turf/open/floor/iron, -/area/station/hallway/secondary/recreation) "sgL" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -54346,21 +54702,6 @@ }, /turf/open/floor/iron, /area/station/cargo/sorting) -"sgS" = ( -/obj/structure/table/wood, -/obj/effect/turf_decal/tile/neutral/full, -/obj/machinery/reagentgrinder{ - pixel_x = 3; - pixel_y = 4 - }, -/turf/open/floor/iron/smooth_large, -/area/station/service/bar) -"sgX" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/hallway/secondary/entry) "sgY" = ( /obj/effect/spawner/structure/window, /turf/open/floor/plating, @@ -54369,38 +54710,13 @@ /obj/machinery/vending/coffee, /turf/open/floor/plating, /area/station/hallway/secondary/recreation) -"shv" = ( -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 8 - }, +"shm" = ( /obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark/side{ - dir = 8 + dir = 1 }, +/obj/structure/filingcabinet/chestdrawer, +/turf/open/floor/iron, /area/station/science/xenobiology) -"shw" = ( -/obj/structure/table, -/obj/item/reagent_containers/cup/glass/sillycup{ - pixel_x = 7; - pixel_y = 8 - }, -/obj/item/reagent_containers/cup/glass/sillycup{ - pixel_x = 4; - pixel_y = 4 - }, -/obj/item/reagent_containers/cup/glass/sillycup{ - pixel_x = 7 - }, -/obj/item/reagent_containers/cup/glass/sillycup, -/obj/item/reagent_containers/cup/glass/mug/coco{ - pixel_x = -6; - pixel_y = 9 - }, -/turf/open/floor/iron/cafeteria, -/area/station/service/kitchen) "shD" = ( /turf/closed/wall, /area/station/hallway/secondary/recreation) @@ -54426,53 +54742,19 @@ }, /turf/open/floor/plating, /area/station/maintenance/department/medical/central) -"shU" = ( -/obj/structure/disposalpipe/segment{ - dir = 5 +"shR" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 1 }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/landmark/start/cook, -/turf/open/floor/iron/cafeteria, -/area/station/service/kitchen) +/obj/structure/cable, +/obj/machinery/light/small/directional/north, +/turf/open/floor/grass, +/area/station/service/chapel) "sib" = ( /obj/structure/cable, /obj/machinery/power/apc/auto_name/directional/north, /turf/open/floor/iron/dark, /area/station/hallway/secondary/construction) -"sid" = ( -/obj/structure/closet/crate, -/obj/item/clothing/mask/bandana/blue, -/obj/item/clothing/mask/bandana/blue, -/obj/item/clothing/mask/bandana/gold, -/obj/item/clothing/mask/bandana/gold, -/obj/item/clothing/mask/bandana/red, -/obj/item/clothing/mask/bandana/red, -/obj/item/clothing/mask/bandana/skull, -/obj/item/clothing/mask/bandana/skull, -/obj/effect/mapping_helpers/broken_floor, -/obj/item/toy/basketball, -/obj/machinery/firealarm/directional/east, -/turf/open/floor/iron, -/area/station/hallway/secondary/recreation) -"sih" = ( -/obj/structure/table, -/obj/item/reagent_containers/condiment/saltshaker{ - desc = "Salt. From space oceans, presumably. A staple of modern medicine."; - pixel_x = 8; - pixel_y = 7 - }, -/obj/item/reagent_containers/condiment/peppermill{ - desc = "Often used to flavor food or make people sneeze. Fashionably moved to the left side of the table."; - pixel_x = 8; - pixel_y = 2 - }, -/obj/effect/spawner/random/food_or_drink/condiment{ - pixel_x = -8; - pixel_y = 3 - }, -/turf/open/floor/iron/showroomfloor, -/area/station/service/cafeteria) "sio" = ( /obj/machinery/atmospherics/pipe/bridge_pipe/scrubbers/visible{ dir = 4 @@ -54492,50 +54774,30 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/iron/dark, /area/station/science/robotics/lab) -"sir" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/obj/item/radio/intercom/directional/north, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/turf/open/floor/iron/white/corner{ - dir = 1 - }, -/area/station/hallway/secondary/entry) "sis" = ( /turf/open/floor/grass, /area/station/security/prison/garden) -"siv" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 8 +"siG" = ( +/obj/machinery/atmospherics/pipe/smart/manifold/general/visible{ + dir = 1 }, -/obj/structure/chair/pew/left{ - dir = 4 +/obj/effect/decal/cleanable/ash, +/obj/item/storage/dice{ + pixel_x = -16; + pixel_y = -6 }, -/turf/open/floor/wood, -/area/station/service/theater) -"siz" = ( -/obj/structure/closet/secure_closet/freezer/fridge, -/obj/effect/turf_decal/bot_red, -/obj/machinery/airalarm/directional/north, -/turf/open/floor/iron/freezer, -/area/station/service/kitchen/coldroom) -"siC" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/neutral, /turf/open/floor/iron, -/area/station/hallway/primary/central/fore) +/area/station/maintenance/port/fore) "siN" = ( -/obj/machinery/hydroponics/constructable, -/obj/machinery/camera/directional/west, -/turf/open/floor/iron/white/small, -/area/station/service/hydroponics/garden) -"siP" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/turf/open/floor/wood, -/area/station/service/theater) +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/structure/chair/stool/bar/directional/north, +/turf/open/floor/iron, +/area/station/holodeck/rec_center) +"sjl" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/white/corner, +/area/station/science/xenobiology) "sjp" = ( /obj/structure/cable, /obj/effect/decal/cleanable/dirt, @@ -54546,6 +54808,27 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/plating, /area/station/maintenance/port/fore) +"sjy" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/structure/rack, +/obj/item/storage/toolbox/emergency{ + pixel_x = -2; + pixel_y = -3 + }, +/obj/item/cigarette/cigar, +/obj/effect/mapping_helpers/broken_floor, +/obj/machinery/light_switch/directional/south, +/turf/open/floor/iron/smooth, +/area/station/command/bridge) +"sjL" = ( +/obj/structure/cable, +/obj/effect/turf_decal/trimline/neutral/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/neutral/line, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/station/hallway/primary/central/fore) "sjZ" = ( /obj/effect/turf_decal/delivery, /obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ @@ -54560,12 +54843,11 @@ }, /turf/open/floor/iron/dark/side, /area/station/security/execution/transfer) -"skg" = ( -/obj/effect/mapping_helpers/broken_floor, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +"skd" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/cable, /turf/open/floor/iron, -/area/station/maintenance/port/aft) +/area/station/commons/fitness/locker_room) "skm" = ( /obj/structure/cable, /obj/structure/table, @@ -54583,16 +54865,15 @@ /obj/effect/turf_decal/tile/dark_red/opposingcorners, /turf/open/floor/iron, /area/station/security/prison) -"skp" = ( -/obj/effect/turf_decal/tile/yellow/half/contrasted{ - dir = 8 - }, -/obj/machinery/chem_dispenser{ - layer = 2.7 +"skN" = ( +/obj/structure/table/wood, +/obj/machinery/camera/directional/south{ + c_tag = "Atmospherics - South" }, -/obj/machinery/camera/autoname/directional/west, -/turf/open/floor/iron, -/area/station/medical/chemistry) +/obj/item/stack/cable_coil/five, +/obj/effect/turf_decal/siding/wideplating_new/terracotta, +/turf/open/floor/wood/tile, +/area/station/maintenance/central/lesser) "skP" = ( /obj/effect/spawner/structure/window, /turf/open/floor/plating, @@ -54604,11 +54885,25 @@ }, /turf/open/floor/iron/white/small, /area/station/security/warden) +"skT" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/station/command/heads_quarters/rd) "skU" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/small, /area/station/security/prison/shower) +"skV" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/siding/purple, +/obj/effect/turf_decal/siding/purple/corner{ + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/science/genetics) "skW" = ( /obj/structure/disposalpipe/segment{ dir = 6 @@ -54616,15 +54911,6 @@ /obj/effect/spawner/random/structure/crate, /turf/open/floor/plating, /area/station/maintenance/port/fore) -"skY" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 4 - }, -/obj/structure/chair/pew/left{ - dir = 4 - }, -/turf/open/floor/wood, -/area/station/service/theater) "slp" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -54638,31 +54924,9 @@ /obj/structure/flora/bush/flowers_pp/style_random, /turf/open/floor/grass, /area/station/medical/virology) -"sls" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 4 - }, -/obj/item/trash/popcorn/salty{ - pixel_x = -14 - }, -/turf/open/floor/iron/grimy, -/area/station/service/theater) -"slv" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/landmark/start/hangover, -/turf/open/floor/carpet/lone, -/area/station/service/theater) "slw" = ( /turf/closed/wall, /area/station/cargo/drone_bay) -"slx" = ( -/obj/effect/turf_decal/siding/red{ - dir = 8 - }, -/obj/machinery/firealarm/directional/west, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/small, -/area/station/security/office) "slC" = ( /obj/effect/turf_decal/stripes/corner{ dir = 1 @@ -54762,23 +55026,25 @@ }, /turf/open/floor/iron, /area/station/security/courtroom) -"smV" = ( -/obj/structure/chair{ - dir = 4 +"smJ" = ( +/obj/machinery/button/door/directional/west{ + id = "QMLoaddoor"; + name = "Loading Doors"; + pixel_y = -8; + req_access = list("cargo") }, -/obj/effect/turf_decal/tile/brown/fourcorners, -/obj/effect/decal/cleanable/dirt, -/obj/effect/landmark/start/hangover, -/turf/open/floor/iron, -/area/station/hallway/primary/central/fore) -"snc" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/tile/neutral{ +/obj/machinery/button/door/directional/west{ + id = "QMLoaddoor2"; + name = "Loading Doors"; + pixel_y = 8; + req_access = list("cargo") + }, +/obj/effect/turf_decal/bot, +/obj/effect/turf_decal/stripes/line{ dir = 8 }, /turf/open/floor/iron, -/area/station/hallway/primary/central/fore) +/area/station/cargo/storage) "snj" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/disposalpipe/segment{ @@ -54828,6 +55094,13 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/iron, /area/station/security/courtroom) +"snW" = ( +/obj/structure/chair/sofa/bench/right{ + dir = 1 + }, +/obj/effect/turf_decal/tile/dark_red/opposingcorners, +/turf/open/floor/iron, +/area/station/security/tram) "snX" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -54840,12 +55113,6 @@ "snZ" = ( /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) -"sob" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/mapping_helpers/broken_floor, -/obj/item/fuel_pellet, -/turf/open/floor/iron/smooth, -/area/station/cargo/drone_bay) "sok" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -54894,6 +55161,18 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/maintenance/port/aft) +"sot" = ( +/obj/machinery/door/airlock/multi_tile/public{ + dir = 4 + }, +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/turf/open/floor/iron/textured_half{ + dir = 8 + }, +/area/station/service/library) "sox" = ( /obj/effect/turf_decal/stripes/white/line, /obj/structure/transport/linear/tram, @@ -54921,20 +55200,6 @@ }, /turf/open/floor/iron, /area/station/security/courtroom) -"soN" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/table, -/obj/item/toy/crayon/rainbow{ - pixel_x = -7; - pixel_y = 9 - }, -/obj/item/toy/crayon/spraycan{ - pixel_x = -12 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/commons) "soO" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -54964,6 +55229,25 @@ /obj/machinery/light/small/directional/west, /turf/open/floor/iron/dark/small, /area/station/security/checkpoint/customs/auxiliary) +"spk" = ( +/obj/machinery/camera/directional/east, +/obj/machinery/light/small/directional/east, +/obj/effect/turf_decal/weather/dirt{ + dir = 6 + }, +/obj/effect/turf_decal/weather/dirt{ + dir = 1 + }, +/turf/open/floor/grass, +/area/station/service/chapel) +"spo" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/structure/extinguisher_cabinet/directional/north, +/turf/open/floor/iron, +/area/station/hallway/primary/port) "spx" = ( /obj/machinery/portable_atmospherics/canister/anesthetic_mix, /obj/machinery/atmospherics/components/unary/portables_connector/visible, @@ -54971,10 +55255,6 @@ /obj/machinery/airalarm/directional/north, /turf/open/floor/iron/white/small, /area/station/medical/cryo) -"spH" = ( -/obj/structure/table/wood, -/turf/open/floor/wood, -/area/station/maintenance/fore/greater) "spK" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -54991,17 +55271,6 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /turf/open/floor/iron/smooth, /area/station/security/checkpoint/customs/auxiliary) -"spW" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/mapping_helpers/broken_floor, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/station/maintenance/port/greater) "sqa" = ( /obj/effect/turf_decal/tile/blue, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ @@ -55009,17 +55278,6 @@ }, /turf/open/floor/iron/white, /area/station/medical/medbay/central) -"sqe" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/mapping_helpers/broken_floor, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/station/maintenance/port/greater) "sqg" = ( /obj/machinery/atmospherics/pipe/smart/simple/orange/visible, /turf/closed/wall/r_wall, @@ -55071,8 +55329,9 @@ /area/station/security/checkpoint/customs/auxiliary) "sqB" = ( /obj/effect/turf_decal/stripes/line, -/obj/machinery/atmospherics/pipe/smart/simple/purple/visible{ - dir = 4 +/obj/machinery/atmospherics/components/unary/thermomachine/heater/on{ + dir = 8; + initialize_directions = 8 }, /turf/open/floor/iron, /area/station/engineering/atmos) @@ -55104,6 +55363,16 @@ /obj/structure/disposalpipe/segment, /turf/closed/wall, /area/station/maintenance/port/greater) +"sry" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 1 + }, +/obj/structure/flora/bush/jungle/c/style_3{ + pixel_x = 6; + pixel_y = -6 + }, +/turf/open/floor/grass, +/area/station/service/chapel) "srA" = ( /obj/structure/chair/sofa/bench/left{ dir = 4 @@ -55122,12 +55391,6 @@ /obj/machinery/atmospherics/pipe/smart/simple/dark/hidden, /turf/open/floor/catwalk_floor/iron_dark, /area/station/tcommsat/server) -"srF" = ( -/obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/south, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/station/security/office) "srH" = ( /obj/structure/cable, /obj/effect/spawner/structure/window/reinforced, @@ -55145,14 +55408,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/science/robotics/lab) -"srN" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/mapping_helpers/broken_floor, -/obj/effect/decal/cleanable/dirt, -/obj/structure/broken_flooring/corner/directional/south, -/turf/open/floor/plating, -/area/station/hallway/secondary/recreation) "srT" = ( /obj/structure/cable, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ @@ -55160,14 +55415,6 @@ }, /turf/open/floor/wood/tile, /area/station/command/meeting_room) -"srW" = ( -/obj/structure/reagent_dispensers/watertank, -/turf/open/floor/iron, -/area/station/maintenance/hallway/abandoned_recreation) -"ssb" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/station/maintenance/hallway/abandoned_recreation) "ssj" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 8 @@ -55198,24 +55445,36 @@ "ssz" = ( /turf/closed/wall/r_wall, /area/station/maintenance/department/science/xenobiology) -"ssF" = ( -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/effect/mapping_helpers/broken_floor, -/obj/structure/table, -/obj/item/stock_parts/subspace/filter, -/obj/item/stock_parts/subspace/filter, -/obj/item/stock_parts/subspace/filter, -/obj/item/stock_parts/subspace/filter, -/turf/open/floor/iron/dark, -/area/station/engineering/storage/tcomms) "ssP" = ( /obj/machinery/atmospherics/pipe/layer_manifold/scrubbers/visible, /turf/closed/wall/r_wall, /area/station/engineering/hallway) -"ssY" = ( -/obj/structure/cable, -/turf/open/floor/wood, -/area/station/service/abandoned_gambling_den) +"ssR" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/structure/chair/stool/directional/west, +/turf/open/floor/stone, +/area/station/service/bar) +"sta" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/obj/item/trash/flare{ + pixel_x = 11; + pixel_y = 21 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/dark/corner{ + dir = 4 + }, +/area/station/hallway/primary/central/fore) "stj" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -55231,6 +55490,14 @@ /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/iron/smooth_large, /area/station/engineering/break_room) +"stH" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/brown/half, +/obj/effect/turf_decal/tile/brown/half{ + dir = 1 + }, +/turf/open/floor/iron/textured_half, +/area/station/cargo/miningoffice) "stP" = ( /obj/effect/turf_decal/siding{ dir = 1 @@ -55238,18 +55505,6 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /turf/open/floor/iron/white/small, /area/station/science/lab) -"stU" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/corner, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark/side{ - dir = 1 - }, -/area/station/science/xenobiology) "stV" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -55263,6 +55518,33 @@ /obj/effect/landmark/start/chief_medical_officer, /turf/open/floor/wood/parquet, /area/station/command/heads_quarters/cmo) +"stY" = ( +/obj/structure/table/wood, +/obj/item/flashlight/flare/candle{ + pixel_x = -5; + pixel_y = 7 + }, +/obj/item/flashlight/flare/candle{ + pixel_x = -3; + pixel_y = 5 + }, +/obj/item/flashlight/flare/candle{ + pixel_x = -5; + pixel_y = 4 + }, +/obj/item/lighter{ + pixel_x = 4 + }, +/turf/open/floor/carpet/purple, +/area/station/commons/dorms) +"sue" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/structure/chair/sofa/bench/right{ + dir = 4 + }, +/obj/effect/landmark/start/hangover, +/turf/open/floor/iron, +/area/station/holodeck/rec_center) "sul" = ( /obj/effect/turf_decal/siding{ dir = 1 @@ -55270,31 +55552,20 @@ /obj/machinery/holopad, /turf/open/floor/iron/white/small, /area/station/science/lab) -"suq" = ( -/obj/structure/chair/plastic{ - dir = 4 - }, -/obj/effect/landmark/start/hangover, -/obj/machinery/light/small/directional/west, -/turf/open/floor/glass, -/area/station/hallway/secondary/spacebridge) "suw" = ( /obj/effect/decal/cleanable/dirt, /obj/item/radio/intercom/directional/south, /turf/open/floor/iron/checker, /area/station/command/heads_quarters/hos) -"suF" = ( -/obj/effect/mapping_helpers/broken_floor, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +"suM" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/firealarm/directional/south, +/obj/effect/turf_decal/tile/neutral, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/open/floor/iron, -/area/station/maintenance/starboard/greater) -"suK" = ( -/obj/effect/spawner/random/vending/snackvend, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating, -/area/station/service/abandoned_gambling_den) +/area/station/hallway/primary/port) "svh" = ( /obj/structure/cable, /obj/machinery/door/airlock{ @@ -55364,6 +55635,14 @@ /mob/living/carbon/human/species/monkey, /turf/open/floor/grass, /area/station/science/genetics) +"svE" = ( +/obj/effect/turf_decal/siding/wood, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/stone, +/area/station/service/bar) "svG" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/engine, @@ -55378,29 +55657,11 @@ /obj/machinery/status_display/evac/directional/south, /turf/open/floor/iron/small, /area/station/engineering/break_room) -"svP" = ( -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/structure/chair/office/light{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/landmark/start/geneticist, -/turf/open/floor/iron/dark, -/area/station/science/genetics) "svQ" = ( /obj/structure/table/reinforced, /obj/structure/reagent_dispensers/servingdish, /turf/open/floor/iron/kitchen/small, /area/station/security/prison/mess) -"svS" = ( -/obj/machinery/door/airlock/public/glass{ - name = "Dormatories" - }, -/obj/machinery/door/firedoor, -/turf/open/floor/iron/textured_half{ - dir = 8 - }, -/area/station/commons/dorms) "svU" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -55419,12 +55680,6 @@ }, /turf/open/floor/iron/dark/textured_large, /area/station/medical/pharmacy) -"svZ" = ( -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/camera/autoname/directional/east, -/turf/open/floor/iron/dark, -/area/station/science/server) "swb" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/door/airlock/external{ @@ -55448,16 +55703,18 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/grimy, /area/station/commons/vacant_room/office) -"swt" = ( -/obj/effect/mapping_helpers/broken_floor, -/obj/structure/chair/stool/bamboo, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 +"swk" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 }, -/obj/effect/landmark/start/bartender, -/turf/open/floor/stone, -/area/station/service/bar/backroom) +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/maintenance/department/medical/central) +"swu" = ( +/turf/open/floor/wood, +/area/station/security/detectives_office) "swB" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/stripes/red/line, @@ -55466,10 +55723,15 @@ }, /turf/open/floor/iron/small, /area/station/hallway/primary/starboard) -"swC" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/small, -/area/station/maintenance/starboard/central) +"swF" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/obj/machinery/light/small/directional/south, +/turf/open/floor/iron, +/area/station/science/xenobiology) "swJ" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -55480,13 +55742,15 @@ /obj/structure/steam_vent, /turf/open/floor/plating, /area/station/maintenance/department/medical/central) -"swL" = ( -/obj/structure/closet/secure_closet/freezer/kitchen, -/obj/effect/turf_decal/bot_red, -/obj/effect/mapping_helpers/broken_floor, -/obj/structure/sign/poster/official/random/directional/north, -/turf/open/floor/iron/freezer, -/area/station/service/kitchen/coldroom) +"swM" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 1 + }, +/obj/structure/flora/bush/jungle/a/style_random{ + pixel_y = -5 + }, +/turf/open/floor/grass, +/area/station/service/chapel) "swO" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -55527,23 +55791,20 @@ }, /turf/open/floor/wood, /area/station/command/heads_quarters/qm) -"sxd" = ( -/obj/structure/disposalpipe/trunk{ +"swW" = ( +/obj/effect/turf_decal/siding/wood{ dir = 1 }, -/obj/machinery/disposal/bin, -/obj/effect/turf_decal/bot, -/obj/machinery/button/door/directional/south{ - id = "kihall"; - name = "Hallway Cutoff"; - pixel_x = -7 - }, -/obj/machinery/button/door/directional/south{ - id = "kitchenshutters"; - name = "Kitchen Shutters"; - pixel_x = 7 - }, -/turf/open/floor/iron/cafeteria, +/obj/effect/turf_decal/siding/wood, +/obj/machinery/restaurant_portal/bar, +/turf/open/floor/stone, +/area/station/service/bar) +"sxl" = ( +/obj/machinery/oven/range, +/obj/machinery/airalarm/directional/north, +/obj/machinery/power/apc/auto_name/directional/west, +/obj/structure/cable, +/turf/open/floor/iron/kitchen/small, /area/station/service/kitchen) "sxm" = ( /turf/closed/wall, @@ -55565,14 +55826,6 @@ }, /turf/open/space/basic, /area/space/nearstation) -"sxw" = ( -/obj/structure/cable, -/obj/effect/turf_decal/trimline/neutral/line, -/obj/effect/turf_decal/trimline/neutral/line{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/port) "sxA" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -55598,22 +55851,18 @@ dir = 8 }, /area/station/science/research) -"sxL" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/dark_red/fourcorners, -/turf/open/floor/iron, -/area/station/security/brig/entrance) "sxT" = ( /obj/structure/cable, /obj/structure/lattice/catwalk, /turf/open/space/basic, /area/station/solars/aft) +"sxZ" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/fore) "syb" = ( /obj/docking_port/stationary/random{ dir = 4; @@ -55659,10 +55908,6 @@ "syk" = ( /turf/closed/wall, /area/station/security/warden) -"syv" = ( -/obj/structure/disposalpipe/segment, -/turf/open/floor/grass, -/area/station/service/chapel) "syx" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment, @@ -55672,15 +55917,21 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/maintenance/port/fore) +"syA" = ( +/obj/machinery/door/airlock/public/glass{ + name = "Dorms" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/textured_half{ + dir = 1 + }, +/area/station/commons/fitness/locker_room) "syC" = ( /obj/structure/window/spawner/directional/west, /obj/structure/flora/bush/flowers_yw/style_random, /turf/open/misc/sandy_dirt, /area/station/medical/medbay/lobby) -"syG" = ( -/obj/effect/spawner/xmastree, -/turf/open/floor/grass, -/area/station/service/chapel) "syN" = ( /obj/effect/spawner/random/trash, /turf/open/floor/plating, @@ -55693,86 +55944,6 @@ }, /turf/open/floor/iron/dark/small, /area/station/security/brig) -"sze" = ( -/obj/structure/chair/sofa/left/maroon{ - dir = 1 - }, -/turf/open/floor/iron/showroomfloor, -/area/station/service/cafeteria) -"szh" = ( -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/catwalk_floor/iron, -/area/station/maintenance/department/medical/central) -"szy" = ( -/obj/effect/spawner/random/engineering/tracking_beacon, -/turf/open/floor/grass, -/area/station/service/chapel) -"szz" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/power/apc/auto_name/directional/north, -/turf/open/floor/iron, -/area/station/service/hydroponics) -"szG" = ( -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/green{ - dir = 4 - }, -/obj/structure/chair/office{ - dir = 4 - }, -/obj/machinery/duct, -/obj/effect/landmark/start/botanist, -/turf/open/floor/iron, -/area/station/service/hydroponics) -"szH" = ( -/obj/structure/table/reinforced, -/obj/machinery/door/window/right/directional/west{ - name = "Hydroponics Desk"; - req_access = list("hydroponics") - }, -/obj/machinery/door/firedoor, -/obj/machinery/duct, -/turf/open/floor/iron/textured_large, -/area/station/hallway/primary/central/fore) -"szM" = ( -/obj/machinery/computer/slot_machine{ - pixel_y = 2 - }, -/obj/machinery/newscaster/directional/east, -/turf/open/floor/wood/tile, -/area/station/service/bar) -"szS" = ( -/obj/structure/table/wood, -/obj/effect/turf_decal/tile/neutral/full, -/obj/machinery/chem_dispenser/drinks{ - dir = 1 - }, -/turf/open/floor/iron/smooth_large, -/area/station/service/bar) -"szZ" = ( -/obj/structure/table/wood, -/obj/effect/turf_decal/tile/brown/full, -/obj/item/reagent_containers/cup/glass/waterbottle/large{ - pixel_x = 7; - pixel_y = 17 - }, -/obj/item/reagent_containers/cup/glass/waterbottle/large{ - pixel_x = -6; - pixel_y = 15 - }, -/obj/item/reagent_containers/cup/glass/waterbottle/large{ - pixel_x = 4; - pixel_y = 10 - }, -/obj/item/reagent_containers/cup/glass/waterbottle/large{ - pixel_x = -7; - pixel_y = 8 - }, -/obj/structure/extinguisher_cabinet/directional/south, -/turf/open/floor/iron/smooth_large, -/area/station/service/bar) "sAb" = ( /obj/structure/lattice, /obj/machinery/atmospherics/pipe/smart/simple/yellow/visible/layer1{ @@ -55781,21 +55952,6 @@ /obj/machinery/atmospherics/pipe/smart/simple/cyan/visible/layer2, /turf/open/space/basic, /area/space/nearstation) -"sAA" = ( -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/effect/decal/cleanable/dirt, -/obj/structure/chair/office/light{ - dir = 8 - }, -/obj/effect/turf_decal/siding/purple/corner, -/obj/effect/landmark/start/research_director, -/obj/machinery/light/floor, -/turf/open/floor/iron/dark, -/area/station/command/heads_quarters/rd) -"sAB" = ( -/obj/effect/spawner/structure/window/reinforced/tinted, -/turf/open/floor/plating, -/area/station/maintenance/central/lesser) "sAM" = ( /obj/effect/turf_decal/tile/brown/opposingcorners, /obj/effect/turf_decal/siding/wideplating{ @@ -55827,28 +55983,23 @@ }, /turf/open/space/basic, /area/station/engineering/atmos/space_catwalk) +"sBf" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/spawner/random/structure/steam_vent, +/turf/open/floor/plating, +/area/station/maintenance/port/greater) "sBm" = ( /obj/structure/transport/linear/tram, /obj/structure/fluff/tram_rail/floor, /obj/structure/thermoplastic/light, /turf/open/floor/tram, /area/station/maintenance/port/aft) -"sBp" = ( -/obj/structure/table, -/obj/machinery/processor{ - pixel_y = 6 - }, -/obj/machinery/firealarm/directional/south, -/turf/open/floor/iron/cafeteria, -/area/station/service/kitchen) -"sBz" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 10 - }, -/obj/machinery/light/small/directional/south, -/obj/machinery/camera/autoname/directional/south, -/turf/open/floor/iron/grimy, -/area/station/service/theater) "sBL" = ( /obj/structure/sign/directions/science{ dir = 4; @@ -55863,6 +56014,12 @@ }, /turf/closed/wall, /area/station/commons/storage/art) +"sBP" = ( +/obj/structure/reagent_dispensers/plumbed{ + dir = 1 + }, +/turf/open/floor/plating, +/area/station/maintenance/fore/greater) "sCc" = ( /obj/effect/spawner/structure/window/reinforced/tinted, /turf/open/floor/plating, @@ -55906,6 +56063,14 @@ /obj/effect/mapping_helpers/airlock/access/all/medical/general, /turf/open/floor/iron/dark/small, /area/station/medical/medbay/central) +"sCq" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/dark_red/fourcorners, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/station/security/brig/entrance) "sCu" = ( /obj/machinery/computer/prisoner/management{ dir = 8 @@ -55993,6 +56158,11 @@ /obj/structure/hedge, /turf/open/floor/wood/tile, /area/station/command/corporate_showroom) +"sDs" = ( +/obj/item/kirbyplants/random, +/obj/effect/turf_decal/siding/wideplating/dark, +/turf/open/floor/iron, +/area/station/commons/dorms) "sDA" = ( /obj/effect/turf_decal/stripes/white/line{ dir = 4 @@ -56002,13 +56172,27 @@ }, /turf/open/floor/iron/dark, /area/station/science/ordnance/testlab) -"sDT" = ( -/obj/machinery/firealarm/directional/north, +"sDM" = ( +/obj/structure/cable, +/turf/open/floor/iron/dark/side{ + dir = 4 + }, +/area/station/science/lab) +"sDZ" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/trimline/neutral/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/neutral/line{ + dir = 8 + }, +/obj/machinery/navbeacon{ + codes_txt = "patrol;next_patrol=15.0-CentralStarboard-CentralFore"; + location = "14.0-Dormatories-CentralStarboard" + }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/tile/neutral/opposingcorners, /turf/open/floor/iron, -/area/station/hallway/secondary/spacebridge) +/area/station/hallway/primary/central/fore) "sEj" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, @@ -56035,32 +56219,10 @@ }, /turf/open/floor/engine, /area/station/science/cytology) -"sEz" = ( -/obj/structure/cable, -/obj/effect/mapping_helpers/broken_floor, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/station/maintenance/starboard/lesser) "sEB" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/grimy, /area/station/commons/vacant_room/office) -"sED" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 1 - }, -/obj/effect/turf_decal/siding/wood, -/turf/open/floor/iron/grimy, -/area/station/service/theater) -"sEK" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/siding/wood{ - dir = 1 - }, -/obj/effect/turf_decal/siding/wood, -/obj/item/trash/pistachios, -/turf/open/floor/iron/grimy, -/area/station/service/theater) "sES" = ( /obj/machinery/door/airlock/hatch{ name = "Creature Pen" @@ -56075,49 +56237,21 @@ }, /turf/open/floor/plating, /area/station/maintenance/department/prison) -"sFk" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/mapping_helpers/broken_floor, -/obj/machinery/light_switch/directional/north, -/turf/open/floor/wood/large, -/area/station/command/heads_quarters/captain/private) -"sFz" = ( -/obj/structure/chair/stool/directional/east, -/obj/machinery/camera/autoname/directional/south, -/turf/open/floor/iron/cafeteria, -/area/station/security/prison/mess) -"sFD" = ( -/obj/effect/turf_decal/tile/purple/opposingcorners, -/obj/effect/turf_decal/siding/green{ - dir = 9 - }, -/obj/structure/table, -/obj/machinery/cell_charger, -/obj/item/stock_parts/cell/high, -/obj/machinery/power/apc/auto_name/directional/west, +"sFs" = ( /obj/structure/cable, -/turf/open/floor/iron/cafeteria, -/area/station/science/circuits) -"sFH" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/tile/neutral{ +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 1 }, /turf/open/floor/iron, -/area/station/hallway/primary/starboard) -"sFJ" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 6 - }, -/obj/machinery/light/small/directional/south, -/obj/machinery/firealarm/directional/south, -/turf/open/floor/iron/grimy, -/area/station/service/theater) +/area/station/hallway/primary/central/aft) +"sFz" = ( +/obj/structure/chair/stool/directional/east, +/obj/machinery/camera/autoname/directional/south, +/turf/open/floor/iron/cafeteria, +/area/station/security/prison/mess) "sGh" = ( /obj/structure/window/reinforced/spawner/directional/east, /obj/effect/turf_decal/stripes/white/line{ @@ -56125,6 +56259,11 @@ }, /turf/open/floor/engine, /area/station/science/xenobiology) +"sGk" = ( +/obj/structure/flora/bush/jungle/c/style_random, +/obj/effect/turf_decal/weather/dirt, +/turf/open/floor/grass, +/area/station/service/chapel) "sGp" = ( /obj/structure/flora/rock/pile/style_random, /obj/structure/window/reinforced/spawner/directional/west, @@ -56151,26 +56290,20 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/science/ordnance/storage) -"sGF" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/siding/thinplating_new/light, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/small, -/area/station/commons/fitness/locker_room) -"sGI" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/junction/flip{ +"sGN" = ( +/obj/machinery/modular_computer/preset/cargochat/service{ + dir = 8 + }, +/obj/effect/turf_decal/delivery, +/obj/machinery/requests_console/auto_name/directional/east, +/obj/effect/turf_decal/tile/neutral/opposingcorners{ dir = 1 }, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) -"sGT" = ( -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating, -/area/station/commons/vacant_room/commissary) +/obj/effect/turf_decal/siding/thinplating_new{ + dir = 4 + }, +/turf/open/floor/iron/small, +/area/station/hallway/secondary/service) "sHe" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -56185,15 +56318,6 @@ /obj/effect/spawner/random/maintenance, /turf/open/floor/plating, /area/station/maintenance/department/engine) -"sHs" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating, -/area/station/maintenance/fore/greater) "sHH" = ( /obj/effect/turf_decal/stripes/line, /obj/machinery/portable_atmospherics/canister/plasma, @@ -56230,12 +56354,6 @@ /obj/machinery/camera/autoname/directional/north, /turf/open/floor/engine, /area/station/science/cytology) -"sIh" = ( -/obj/structure/window/reinforced/spawner/directional/north, -/turf/open/floor/iron/stairs{ - dir = 8 - }, -/area/station/service/theater) "sIj" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -56244,12 +56362,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/medical/medbay/lobby) -"sIt" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/mapping_helpers/broken_floor, -/obj/machinery/holopad, -/turf/open/floor/wood/parquet, -/area/station/service/theater) "sIA" = ( /obj/structure/disposalpipe/segment{ dir = 10 @@ -56262,31 +56374,12 @@ /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/iron/dark, /area/station/engineering/atmospherics_engine) -"sIG" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/sign/directions/evac/directional/west, -/obj/structure/sign/directions/science/directional/west{ - dir = 4; - pixel_y = -8 - }, -/obj/structure/sign/directions/security/directional/west{ - pixel_y = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/central/fore) "sIO" = ( /obj/structure/grille/broken, /obj/item/shard/titanium, /obj/effect/decal/cleanable/glass/titanium, /turf/open/floor/plating, /area/station/maintenance/department/engine/atmos) -"sIS" = ( -/obj/structure/cable, -/turf/open/floor/plating/rust, -/area/station/maintenance/fore/greater) "sIZ" = ( /obj/structure/table/wood, /obj/effect/spawner/random/bureaucracy/folder, @@ -56298,6 +56391,23 @@ /obj/effect/landmark/start/depsec/medical, /turf/open/floor/iron/smooth, /area/station/security/checkpoint/customs/auxiliary) +"sJr" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/holopad, +/turf/open/floor/iron/smooth_large, +/area/station/science/auxlab/firing_range) +"sJv" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/neutral, +/obj/machinery/navbeacon{ + codes_txt = "patrol;next_patrol=1.5-PNexus-Vault"; + location = "1.0-Security-PNexus" + }, +/obj/effect/landmark/start/hangover, +/turf/open/floor/iron, +/area/station/hallway/primary/port) "sJw" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -56314,31 +56424,6 @@ }, /turf/open/floor/iron/dark, /area/station/medical/medbay/aft) -"sJF" = ( -/obj/structure/cable, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/effect/mapping_helpers/broken_floor, -/obj/structure/table, -/obj/item/stock_parts/subspace/ansible, -/obj/item/stock_parts/subspace/ansible, -/obj/item/stock_parts/subspace/ansible, -/obj/item/stock_parts/subspace/crystal, -/obj/item/stock_parts/subspace/crystal, -/obj/item/stock_parts/subspace/crystal, -/obj/machinery/power/apc/auto_name/directional/east, -/turf/open/floor/iron/dark, -/area/station/engineering/storage/tcomms) -"sJI" = ( -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/effect/turf_decal/siding/purple, -/obj/effect/turf_decal/siding/purple/corner{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/obj/structure/cable, -/turf/open/floor/iron/dark, -/area/station/science/genetics) "sJN" = ( /obj/effect/turf_decal/siding, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -56348,6 +56433,17 @@ "sJR" = ( /turf/open/floor/plating, /area/station/maintenance/fore/greater) +"sJV" = ( +/obj/effect/turf_decal/tile/green/opposingcorners, +/obj/effect/turf_decal/tile/blue/opposingcorners{ + dir = 8 + }, +/obj/machinery/chem_master/condimaster{ + desc = "Used to separate out liquids - useful for purifying botanical extracts. Also dispenses condiments."; + name = "BrewMaster 2199" + }, +/turf/open/floor/iron, +/area/station/service/hydroponics) "sKk" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -56367,17 +56463,6 @@ /obj/effect/turf_decal/trimline/white/mid_joiner, /turf/open/floor/wood, /area/station/commons/fitness/recreation) -"sKv" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/obj/structure/disposalpipe/segment{ - dir = 10 - }, -/turf/open/floor/iron/white/side{ - dir = 8 - }, -/area/station/science/research) "sKz" = ( /obj/structure/window/reinforced/spawner/directional/east, /obj/structure/water_source/puddle, @@ -56397,16 +56482,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/aft) -"sKD" = ( -/obj/machinery/door/airlock/engineering{ - name = "Engine Airlock" - }, -/obj/machinery/door/firedoor, -/obj/effect/mapping_helpers/airlock/access/any/engineering/construction, -/obj/structure/cable, -/obj/effect/landmark/navigate_destination, -/turf/open/floor/catwalk_floor, -/area/station/engineering/break_room) "sKE" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /turf/open/floor/iron/white/small, @@ -56480,11 +56555,6 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/hallway/secondary/dock) -"sLZ" = ( -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/station/science/server) "sMh" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/door/airlock/research{ @@ -56502,18 +56572,27 @@ dir = 1 }, /area/station/science/research) -"sMi" = ( -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/siding/wood{ - dir = 9 +"sMj" = ( +/obj/machinery/light/floor, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 1 }, -/obj/effect/decal/cleanable/cobweb, -/turf/open/floor/grass, +/obj/effect/turf_decal/siding/wood/corner, +/turf/open/floor/stone, /area/station/service/chapel) "sMq" = ( /obj/machinery/light/warm/directional/west, /turf/open/floor/iron, /area/station/security/prison) +"sMt" = ( +/obj/structure/chair/sofa/bench/right{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/turf/open/floor/iron/white/side, +/area/station/hallway/primary/central/aft) "sMu" = ( /obj/structure/cable, /obj/structure/railing, @@ -56522,13 +56601,6 @@ "sMD" = ( /turf/closed/wall, /area/station/science/server) -"sMG" = ( -/obj/structure/cable, -/obj/effect/mapping_helpers/broken_floor, -/obj/effect/decal/cleanable/dirt, -/obj/structure/steam_vent, -/turf/open/floor/plating, -/area/station/maintenance/port/greater) "sMT" = ( /obj/structure/table, /obj/item/emergency_bed{ @@ -56554,6 +56626,13 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/engineering/storage/tech) +"sNb" = ( +/obj/effect/turf_decal/tile/blue, +/obj/item/radio/intercom/directional/south, +/turf/open/floor/iron/white/corner{ + dir = 8 + }, +/area/station/hallway/secondary/dock) "sNc" = ( /obj/effect/turf_decal/tile/brown/opposingcorners, /obj/effect/turf_decal/siding/wideplating{ @@ -56573,24 +56652,27 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) -"sNv" = ( +"sNr" = ( /obj/structure/cable, -/obj/structure/disposalpipe/segment, -/obj/machinery/door/airlock/maintenance{ - name = "Maintenance" - }, -/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, -/obj/effect/mapping_helpers/airlock/unres{ +/obj/effect/turf_decal/siding/dark_red/corner{ dir = 1 }, -/turf/open/floor/plating, -/area/station/maintenance/port/greater) +/obj/structure/rack, +/obj/effect/spawner/random/armory/riot_helmet, +/obj/effect/spawner/random/armory/bulletproof_helmet, +/obj/effect/spawner/random/armory/dragnet, +/turf/open/floor/iron/dark/small, +/area/station/ai_monitored/security/armory) "sNz" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment, /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/maintenance/port/fore) +"sNA" = ( +/obj/effect/spawner/xmastree, +/turf/open/misc/dirt/jungle, +/area/station/service/chapel) "sNW" = ( /obj/structure/rack, /obj/effect/spawner/random/maintenance, @@ -56611,20 +56693,27 @@ }, /turf/open/space/basic, /area/space/nearstation) -"sOp" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/power/apc/auto_name/directional/west, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/duct, -/turf/open/floor/stone, -/area/station/service/bar/backroom) "sOs" = ( /obj/effect/spawner/structure/window/reinforced/tinted, /turf/open/floor/plating, /area/station/engineering/gravity_generator) +"sOt" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/chair/sofa/bench{ + dir = 1 + }, +/obj/machinery/newscaster/directional/south, +/obj/effect/landmark/start/hangover, +/turf/open/floor/iron, +/area/station/hallway/secondary/dock) +"sOy" = ( +/obj/structure/window/spawner/directional/west, +/turf/open/floor/iron/dark, +/area/station/commons/dorms) "sOF" = ( /obj/item/kirbyplants/random, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ @@ -56642,6 +56731,15 @@ /obj/machinery/camera/autoname/directional/west, /turf/open/floor/iron/showroomfloor, /area/station/medical/virology) +"sOP" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/cargo/office) "sOR" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/door/airlock/public/glass{ @@ -56650,16 +56748,6 @@ /obj/effect/landmark/navigate_destination, /turf/open/floor/iron/textured_half, /area/station/commons/storage/art) -"sOW" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/duct, -/turf/open/floor/iron/freezer, -/area/station/service/kitchen/coldroom) "sPa" = ( /obj/effect/mapping_helpers/airlock/access/any/service/maintenance, /obj/machinery/door/airlock/grunge{ @@ -56669,6 +56757,12 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/maintenance/starboard/greater) +"sPb" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/wood/tile, +/area/station/command/corporate_showroom) "sPk" = ( /obj/structure/railing{ dir = 1 @@ -56680,48 +56774,17 @@ dir = 4 }, /area/station/engineering/main) -"sPt" = ( -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/green{ - dir = 8 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/service/hydroponics) "sPx" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/broken_flooring/pile/directional/east, /turf/open/floor/plating, /area/station/hallway/secondary/dock) -"sPE" = ( -/obj/structure/closet/secure_closet/freezer/meat, -/obj/effect/turf_decal/bot_red, -/obj/machinery/light/cold/directional/north, -/obj/machinery/camera/autoname/directional/north, -/turf/open/floor/iron/freezer, -/area/station/service/kitchen/coldroom) "sPO" = ( /obj/structure/cable, /obj/effect/decal/cleanable/dirt, /obj/effect/spawner/random/trash, /turf/open/floor/plating, /area/station/maintenance/department/science/xenobiology) -"sPS" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/obj/effect/landmark/start/assistant, -/turf/open/floor/iron/white/small, -/area/station/service/hydroponics/garden) -"sPT" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/mob/living/basic/goat/pete, -/obj/machinery/duct, -/turf/open/floor/iron/freezer, -/area/station/service/kitchen/coldroom) "sQa" = ( /obj/structure/lattice/catwalk, /obj/structure/railing{ @@ -56754,11 +56817,6 @@ }, /turf/open/space/basic, /area/space/nearstation) -"sQn" = ( -/obj/effect/mapping_helpers/broken_floor, -/obj/effect/turf_decal/tile/blue/anticorner/contrasted, -/turf/open/floor/iron/white, -/area/station/maintenance/central/greater) "sQt" = ( /obj/structure/lattice/catwalk, /obj/structure/railing{ @@ -56783,12 +56841,6 @@ /obj/structure/alien/weeds, /turf/open/floor/plating, /area/station/maintenance/starboard/greater) -"sQA" = ( -/obj/effect/turf_decal/siding/white, -/obj/structure/bed/maint, -/obj/structure/railing, -/turf/open/floor/stone, -/area/station/service/theater) "sQI" = ( /obj/effect/turf_decal/tile/blue, /obj/machinery/modular_computer/preset/id, @@ -56827,23 +56879,15 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/engine, /area/station/science/explab) -"sQU" = ( -/obj/machinery/vending/hydronutrients, -/obj/effect/turf_decal/delivery/white{ - color = "#52B4E9" +"sQX" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/components/binary/valve/digital{ + dir = 4 }, /turf/open/floor/iron/white/small, -/area/station/service/hydroponics) -"sQY" = ( -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/green{ - dir = 8 - }, -/obj/effect/turf_decal/siding/thinplating_new/light{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/service/hydroponics) +/area/station/science/ordnance/storage) "sRf" = ( /obj/machinery/power/turbine/inlet_compressor{ dir = 8 @@ -56862,15 +56906,14 @@ dir = 8 }, /area/station/science/lobby) -"sRv" = ( -/obj/structure/table/reinforced, -/obj/machinery/door/window/left/directional/west{ - name = "Hydroponics Desk"; - req_access = list("hydroponics") +"sRD" = ( +/obj/machinery/shower/directional/west, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 5 }, -/obj/machinery/door/firedoor, -/turf/open/floor/iron/textured_large, -/area/station/hallway/primary/central/fore) +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/showroomfloor, +/area/station/commons/dorms) "sRL" = ( /turf/closed/wall, /area/station/service/janitor) @@ -56883,41 +56926,36 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/cargo/storage) -"sSl" = ( -/obj/machinery/camera/directional/west, -/obj/machinery/status_display/ai/directional/west, -/obj/effect/decal/cleanable/dirt, +"sRT" = ( +/obj/machinery/disposal/bin, +/obj/effect/turf_decal/siding/thinplating{ + dir = 5 + }, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/turf/open/floor/eighties/red, +/area/station/hallway/primary/central/fore) +"sRV" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/stone, +/area/station/command/heads_quarters/hos) +"sSj" = ( +/obj/structure/disposalpipe/sorting/mail/flip{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, /turf/open/floor/iron, -/area/station/commons/fitness/recreation/entertainment) +/area/station/hallway/secondary/recreation) "sSq" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/turf_decal/tile/blue, /turf/open/floor/iron/white, /area/station/medical/medbay/aft) -"sSr" = ( -/obj/machinery/door/airlock{ - name = "Kitchen" - }, -/obj/machinery/door/firedoor, -/obj/effect/mapping_helpers/airlock/access/all/service/kitchen, -/turf/open/floor/catwalk_floor/flat_white, -/area/station/service/kitchen) -"sSt" = ( -/obj/effect/spawner/structure/window, -/turf/open/floor/plating, -/area/station/service/kitchen) -"sSw" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/turf/open/floor/iron/white/corner{ - dir = 1 - }, -/area/station/hallway/secondary/entry) "sSx" = ( /obj/structure/table, /obj/item/restraints/handcuffs/cable{ @@ -56941,13 +56979,6 @@ "sSB" = ( /turf/open/floor/catwalk_floor, /area/station/engineering/break_room) -"sSK" = ( -/obj/structure/disposalpipe/segment{ - dir = 5 - }, -/obj/structure/table_frame, -/turf/open/floor/iron, -/area/station/cargo/sorting) "sSM" = ( /obj/effect/turf_decal/siding/yellow, /obj/effect/turf_decal/siding/yellow{ @@ -56958,6 +56989,13 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/iron/textured_half, /area/station/engineering/atmos) +"sSN" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 8 + }, +/obj/structure/flora/bush/flowers_pp/style_2, +/turf/open/floor/grass, +/area/station/service/chapel) "sSQ" = ( /turf/closed/wall, /area/station/maintenance/department/medical/central) @@ -56983,12 +57021,6 @@ }, /turf/open/floor/iron, /area/station/cargo/sorting) -"sSV" = ( -/obj/effect/mapping_helpers/broken_floor, -/obj/structure/window/reinforced/spawner/directional/south, -/obj/structure/window/reinforced/spawner/directional/east, -/turf/open/floor/iron, -/area/station/maintenance/fore/greater) "sSW" = ( /obj/structure/disposalpipe/segment{ dir = 10 @@ -56999,14 +57031,19 @@ }, /turf/open/floor/iron/dark, /area/station/science/genetics) -"sTf" = ( -/obj/structure/window/spawner/directional/west, -/obj/structure/chair/sofa/corp/left{ - dir = 4 +"sTb" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/plaque{ + icon_state = "L14"; + pixel_y = -15 }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark/smooth_large, -/area/station/service/lawoffice) +/obj/effect/turf_decal/trimline/neutral/line, +/obj/effect/turf_decal/trimline/neutral/line{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central/aft) "sTi" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -57018,23 +57055,6 @@ /obj/structure/broken_flooring/singular/directional/south, /turf/open/floor/iron, /area/station/hallway/secondary/dock) -"sTk" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/item/stack/sheet/cardboard{ - pixel_x = 6; - pixel_y = 9 - }, -/obj/item/storage/box{ - pixel_x = 7; - pixel_y = 16 - }, -/obj/structure/sign/poster/official/random/directional/north, -/turf/open/floor/iron/dark/smooth_large, -/area/station/service/lawoffice) -"sTp" = ( -/turf/closed/wall, -/area/station/service/cafeteria) "sTq" = ( /obj/structure/railing{ dir = 10 @@ -57055,13 +57075,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white/small, /area/station/medical/coldroom) -"sTT" = ( -/obj/machinery/light_switch/directional/south, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/commons/dorms) "sTW" = ( /obj/machinery/atmospherics/pipe/bridge_pipe/cyan/visible, /obj/machinery/atmospherics/pipe/bridge_pipe/green/visible{ @@ -57112,6 +57125,13 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/checker, /area/station/security/breakroom) +"sUN" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 1 + }, +/obj/structure/flora/bush/flowers_yw, +/turf/open/floor/grass, +/area/station/service/chapel) "sUV" = ( /obj/structure/table, /obj/item/folder/yellow, @@ -57165,25 +57185,22 @@ /obj/effect/spawner/random/vending/colavend, /turf/open/floor/iron, /area/station/hallway/secondary/entry) -"sVL" = ( -/obj/structure/chair/sofa/bench/right, -/obj/effect/mapping_helpers/broken_floor, -/obj/machinery/incident_display/tram/directional/north, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/maintenance/port/aft) "sVN" = ( /turf/closed/wall/r_wall, /area/station/security/prison/workout) +"sWc" = ( +/obj/effect/turf_decal/stripes/line, +/obj/machinery/chem_master, +/turf/open/floor/iron, +/area/station/science/xenobiology) "sWq" = ( -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/effect/turf_decal/siding/purple{ - dir = 8 +/obj/structure/chair/stool/bar/directional/north, +/obj/effect/turf_decal/siding/wood{ + dir = 1 }, -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/turf/open/floor/iron/dark, -/area/station/science/genetics) +/obj/effect/turf_decal/siding/wood, +/turf/open/floor/wood, +/area/station/hallway/primary/central/aft) "sWA" = ( /obj/machinery/door/airlock/glass{ name = "Gold Standard Law Firm" @@ -57199,20 +57216,6 @@ /obj/machinery/light/broken/directional/south, /turf/open/floor/iron/dark, /area/station/engineering/atmos) -"sWJ" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/door/airlock/security/glass{ - id_tag = "outerbrig"; - name = "Brig" - }, -/obj/effect/mapping_helpers/airlock/access/all/security/entrance, -/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ - cycle_id = "sci-entrance" - }, -/turf/open/floor/iron/textured_half, -/area/station/security/brig/entrance) "sWQ" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -57223,10 +57226,6 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron/white, /area/station/science/cytology) -"sXk" = ( -/obj/effect/spawner/structure/window, -/turf/open/floor/plating, -/area/station/service/theater) "sXm" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -57234,26 +57233,25 @@ }, /turf/open/floor/iron, /area/station/maintenance/department/engine/atmos) -"sXo" = ( -/obj/structure/sign/directions/engineering{ - dir = 1; - pixel_y = 8 - }, -/obj/structure/sign/directions/command{ - dir = 1 - }, -/obj/structure/sign/directions/supply{ - dir = 1; - pixel_y = -8 - }, -/turf/closed/wall, -/area/station/service/theater) "sXq" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/turf_decal/siding/thinplating_new, /turf/open/floor/iron/dark/herringbone, /area/station/security/courtroom) +"sXs" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/obj/effect/landmark/event_spawn, +/obj/effect/turf_decal/trimline/neutral/line, +/obj/effect/turf_decal/trimline/neutral/line{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/port) "sXw" = ( /obj/machinery/telecomms/receiver/preset_left, /turf/open/floor/circuit, @@ -57264,6 +57262,23 @@ }, /turf/open/floor/iron/white, /area/station/science/cytology) +"sXB" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/engine/xenobio, +/area/station/science/xenobiology) +"sXD" = ( +/obj/effect/turf_decal/siding/wood, +/obj/machinery/power/apc/auto_name/directional/east, +/obj/structure/cable, +/turf/open/floor/wood/parquet, +/area/station/service/library) +"sXE" = ( +/mob/living/basic/bot/firebot, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/holopad, +/turf/open/floor/iron/smooth_large, +/area/station/engineering/storage_shared) "sXG" = ( /obj/machinery/atmospherics/pipe/smart/simple/general/visible{ dir = 4 @@ -57277,6 +57292,12 @@ /obj/structure/frame/machine, /turf/open/floor/tram, /area/station/maintenance/department/medical/central) +"sXL" = ( +/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible{ + dir = 4 + }, +/turf/open/floor/iron/white/small, +/area/station/science/ordnance/storage) "sXO" = ( /obj/structure/chair{ dir = 4 @@ -57343,6 +57364,12 @@ /obj/effect/mapping_helpers/airlock/access/all/engineering/tech_storage, /turf/open/floor/catwalk_floor/iron, /area/station/engineering/storage/tech) +"sYw" = ( +/obj/structure/chair{ + pixel_y = -2 + }, +/turf/open/floor/iron, +/area/station/security/execution/transfer) "sYx" = ( /obj/machinery/atmospherics/components/unary/thermomachine/freezer, /obj/effect/turf_decal/stripes, @@ -57350,29 +57377,18 @@ /obj/machinery/camera/autoname/directional/north, /turf/open/floor/iron/white/small, /area/station/medical/cryo) -"sYF" = ( -/obj/effect/turf_decal/siding/wood/corner{ +"sZo" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 4 }, -/turf/open/floor/grass, -/area/station/service/chapel) -"sYK" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 5 - }, -/obj/structure/flora/bush/sunny/style_random, -/turf/open/floor/grass, -/area/station/service/chapel) -"sZn" = ( -/obj/structure/table, -/obj/effect/turf_decal/siding/wood{ - dir = 8 +/obj/effect/turf_decal/siding/thinplating_new/light{ + dir = 10 }, -/obj/item/toy/windup_toolbox, -/obj/machinery/light/small/directional/north, -/obj/structure/sign/poster/official/random/directional/north, -/turf/open/floor/plating, -/area/station/service/theater) +/obj/structure/extinguisher_cabinet/directional/west, +/obj/machinery/light/small/directional/south, +/obj/effect/landmark/start/botanist, +/turf/open/floor/iron/white/small, +/area/station/service/hydroponics) "sZx" = ( /obj/structure/cable, /obj/structure/disposalpipe/trunk{ @@ -57406,16 +57422,6 @@ /obj/effect/spawner/structure/window, /turf/open/floor/plating, /area/station/science/robotics/lab) -"sZQ" = ( -/obj/structure/disposalpipe/trunk{ - dir = 8 - }, -/obj/effect/turf_decal/tile/brown/full, -/obj/machinery/disposal/bin, -/obj/effect/turf_decal/bot, -/obj/machinery/airalarm/directional/east, -/turf/open/floor/iron/smooth_large, -/area/station/service/bar) "tab" = ( /obj/structure/rack, /obj/item/restraints/handcuffs, @@ -57451,15 +57457,6 @@ /obj/structure/cable, /turf/open/floor/iron/smooth, /area/station/engineering/break_room) -"tax" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/red/opposingcorners{ - dir = 1 - }, -/obj/structure/chair/stool/bar/directional/west, -/turf/open/floor/iron/cafeteria, -/area/station/service/cafeteria) "taB" = ( /turf/open/floor/iron/white, /area/station/medical/treatment_center) @@ -57525,12 +57522,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/catwalk_floor/iron, /area/station/science/explab) -"tbq" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/duct, -/turf/open/floor/wood, -/area/station/hallway/secondary/service) "tbr" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/effect/mapping_helpers/airlock/abandoned, @@ -57563,10 +57554,32 @@ /obj/machinery/door/firedoor, /turf/open/floor/iron/white/textured_large, /area/station/science/lab) +"tbC" = ( +/obj/structure/sign/directions/evac/directional/west, +/obj/structure/sign/directions/science/directional/west{ + dir = 4; + pixel_y = -8 + }, +/obj/structure/sign/directions/security/directional/west{ + pixel_y = 8 + }, +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/stripes/red/line, +/obj/effect/turf_decal/stripes/red/line{ + dir = 1 + }, +/turf/open/floor/iron/small, +/area/station/hallway/primary/central/fore) "tbD" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/science/lab) +"tbI" = ( +/obj/machinery/atmospherics/components/unary/portables_connector/visible/layer2{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/science/ordnance) "tbK" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -57595,18 +57608,13 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /turf/open/floor/iron/white, /area/station/medical/treatment_center) -"tcB" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/door/airlock/hydroponics/glass{ - name = "Service Breakroom" - }, -/obj/effect/mapping_helpers/airlock/access/any/service/general, -/obj/machinery/duct, -/turf/open/floor/iron/textured_half{ - dir = 8 +"tcA" = ( +/obj/structure/filingcabinet/chestdrawer, +/obj/item/stock_parts/power_store/cell/emproof{ + pixel_y = 9 }, -/area/station/hallway/secondary/service) +/turf/open/floor/iron/grimy, +/area/station/engineering/main) "tcC" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -57615,24 +57623,6 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron/dark, /area/station/security/processing) -"tcP" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/duct, -/obj/effect/turf_decal/tile/green{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 4 - }, -/turf/open/floor/iron/dark/corner{ - dir = 1 - }, -/area/station/hallway/primary/central/fore) "tcZ" = ( /obj/effect/turf_decal/siding/red{ dir = 6 @@ -57644,11 +57634,6 @@ }, /turf/open/floor/engine/n2, /area/station/engineering/atmos/space_catwalk) -"tdg" = ( -/obj/effect/turf_decal/siding/wood, -/obj/structure/flora/bush/flowers_br/style_random, -/turf/open/floor/grass, -/area/station/service/chapel) "tdh" = ( /obj/structure/chair/sofa/corp/right{ dir = 4 @@ -57692,6 +57677,13 @@ /obj/effect/turf_decal/stripes/white/corner, /turf/open/floor/iron/smooth, /area/station/cargo/warehouse) +"tdE" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/turf/open/floor/iron, +/area/station/maintenance/starboard/aft) "tdF" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -57738,6 +57730,18 @@ /obj/structure/steam_vent, /turf/open/floor/plating, /area/station/maintenance/starboard/central) +"tes" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 5 + }, +/obj/machinery/light/floor, +/turf/open/floor/stone, +/area/station/service/bar) +"tev" = ( +/obj/effect/turf_decal/weather/dirt, +/obj/structure/flora/bush/flowers_pp/style_random, +/turf/open/floor/grass, +/area/station/service/chapel) "tey" = ( /obj/effect/turf_decal/tile/dark_red/opposingcorners, /obj/machinery/computer/records/security{ @@ -57778,24 +57782,12 @@ dir = 1 }, /area/station/hallway/secondary/entry) -"teP" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/station/science/server) -"tfa" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/duct, -/turf/open/floor/iron/freezer, -/area/station/service/kitchen/coldroom) -"tfe" = ( +"tfc" = ( +/obj/structure/reagent_dispensers/beerkeg, /obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/smooth_large, -/area/station/science/auxlab/firing_range) +/obj/structure/extinguisher_cabinet/directional/west, +/turf/open/floor/stone, +/area/station/service/abandoned_gambling_den) "tff" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/table, @@ -57827,6 +57819,22 @@ }, /turf/open/floor/iron/cafeteria, /area/station/hallway/secondary/exit/departure_lounge) +"tfB" = ( +/obj/structure/window/spawner/directional/east, +/obj/structure/table/wood, +/obj/machinery/cell_charger{ + pixel_y = 5 + }, +/obj/item/stock_parts/power_store/cell/crap{ + pixel_y = 5 + }, +/obj/item/cigarette/pipe/cobpipe{ + pixel_x = 1; + pixel_y = -2 + }, +/obj/structure/sign/poster/official/random/directional/north, +/turf/open/floor/wood/tile, +/area/station/command/corporate_showroom) "tfE" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/table, @@ -57834,14 +57842,21 @@ /obj/item/clipboard, /turf/open/floor/iron/white/small, /area/station/science/server) -"tgj" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/easel, -/obj/item/canvas/twentythree_twentythree, -/obj/item/canvas/twentythree_twentythree, -/obj/machinery/newscaster/directional/south, +"tfM" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/neutral, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, /turf/open/floor/iron, -/area/station/commons/storage/art) +/area/station/hallway/primary/port) +"tfX" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/tile/brown{ + dir = 4 + }, +/turf/open/floor/iron/dark/side, +/area/station/cargo/office) "tgl" = ( /turf/closed/wall, /area/station/service/greenroom) @@ -57870,6 +57885,14 @@ /obj/structure/sign/poster/official/random/directional/north, /turf/open/floor/wood/tile, /area/station/command/heads_quarters/hop) +"tgx" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/structure/extinguisher_cabinet/directional/south, +/turf/open/floor/iron, +/area/station/hallway/primary/central/fore) "tgD" = ( /obj/effect/turf_decal/stripes/line{ dir = 5 @@ -57885,24 +57908,6 @@ }, /turf/open/floor/iron/small, /area/station/medical/cryo) -"tgR" = ( -/obj/structure/disposalpipe/junction/flip{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/fore) -"tgS" = ( -/obj/structure/table, -/obj/item/trash/cheesie{ - pixel_x = 7; - pixel_y = 8 - }, -/turf/open/floor/iron/showroomfloor, -/area/station/service/cafeteria) "thb" = ( /obj/structure/chair/stool/directional/south, /obj/effect/turf_decal/siding/yellow{ @@ -57920,16 +57925,29 @@ dir = 1 }, /area/station/science/research) -"thv" = ( -/obj/machinery/seed_extractor, -/obj/effect/turf_decal/delivery, -/obj/machinery/door/window/right/directional/south{ - name = "Seed Extractor"; - req_access = list("hydroponics") +"thg" = ( +/obj/machinery/shieldgen, +/obj/item/clothing/gloves/color/black{ + pixel_y = -3; + pixel_x = -2 }, -/obj/machinery/door/firedoor, -/turf/open/floor/iron/textured_large, -/area/station/service/hydroponics) +/obj/item/cigarette{ + pixel_x = 6; + pixel_y = 4 + }, +/obj/item/clothing/mask/gas{ + pixel_y = 5 + }, +/obj/item/clothing/head/cone{ + pixel_x = 1; + pixel_y = 15 + }, +/turf/open/floor/plating, +/area/station/maintenance/department/engine) +"thx" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/commons/fitness/locker_room) "thI" = ( /obj/machinery/atmospherics/pipe/smart/simple/green/visible{ dir = 9 @@ -57984,16 +58002,16 @@ /obj/machinery/portable_atmospherics/canister/air, /turf/open/floor/plating, /area/station/engineering/atmos/storage/gas) -"tiC" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/door/firedoor, -/obj/effect/decal/cleanable/glass, -/obj/effect/turf_decal/stripes/red/line, -/obj/effect/turf_decal/stripes/red/line{ - dir = 1 +"tiv" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 }, -/turf/open/floor/iron/small, -/area/station/hallway/primary/central/fore) +/obj/structure/chair{ + dir = 4; + pixel_y = -2 + }, +/turf/open/floor/iron/cafeteria, +/area/station/science/breakroom) "tiM" = ( /obj/structure/chair/stool/directional/west, /turf/open/floor/carpet/red, @@ -58054,11 +58072,6 @@ /obj/effect/mapping_helpers/airlock/access/all/medical/general, /turf/open/floor/iron/white/small, /area/station/medical/medbay/central) -"tjb" = ( -/obj/structure/sign/poster/official/random/directional/north, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron, -/area/station/hallway/primary/port) "tjd" = ( /obj/machinery/atmospherics/pipe/layer_manifold/scrubbers/hidden, /obj/machinery/door/poddoor/preopen{ @@ -58069,9 +58082,27 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/engineering/lobby) +"tje" = ( +/obj/effect/turf_decal/siding/wideplating/dark{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/commons/fitness/locker_room) "tjj" = ( /turf/closed/wall/r_wall, /area/station/ai_monitored/turret_protected/ai_upload) +"tjs" = ( +/obj/machinery/airalarm/directional/west, +/obj/effect/spawner/random/entertainment/arcade{ + dir = 4 + }, +/obj/effect/turf_decal/siding/thinplating{ + dir = 8 + }, +/obj/machinery/light/small/dim/directional/west, +/turf/open/floor/eighties/red, +/area/station/hallway/primary/central/fore) "tjH" = ( /obj/effect/turf_decal/stripes/line{ dir = 10 @@ -58080,19 +58111,49 @@ /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/iron/small, /area/station/engineering/supermatter/room) -"tkp" = ( -/obj/machinery/door/airlock/public/glass{ - name = "Services Corridor" - }, -/obj/machinery/door/firedoor, -/turf/open/floor/iron/textured_half{ +"tjT" = ( +/obj/structure/sink/kitchen/directional/south, +/obj/effect/turf_decal/siding/wood/corner{ dir = 8 }, -/area/station/hallway/primary/central/aft) +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/machinery/camera/autoname/directional/north, +/obj/machinery/light/floor, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/turf/open/floor/stone, +/area/station/service/bar) +"tjY" = ( +/obj/machinery/atmospherics/components/binary/pump/on{ + dir = 4; + name = "Air" + }, +/obj/machinery/light/small/red/directional/north, +/obj/item/kirbyplants/random, +/turf/open/floor/iron, +/area/station/maintenance/port/fore) +"tkm" = ( +/obj/structure/window/spawner/directional/west, +/obj/structure/flora/bush/large/style_random{ + pixel_x = -17; + pixel_y = 2 + }, +/obj/structure/flora/bush/flowers_yw/style_random, +/obj/structure/window/spawner/directional/east, +/turf/open/floor/grass, +/area/station/service/hydroponics) "tkq" = ( /obj/structure/barricade/wooden/crude, /turf/open/floor/plating, /area/station/maintenance/central/lesser) +"tkE" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/cafeteria, +/area/station/security/prison/mess) "tkN" = ( /obj/structure/closet/crate, /obj/item/camera, @@ -58137,16 +58198,23 @@ }, /turf/open/misc/sandy_dirt, /area/station/security/tram) +"tlJ" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/item/kirbyplants/random, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/power/apc/auto_name/directional/east, +/turf/open/floor/iron, +/area/station/holodeck/rec_center) "tlX" = ( /obj/structure/cable, /obj/effect/turf_decal/tile/blue/fourcorners, /turf/open/floor/iron/white, /area/station/medical/medbay/lobby) -"tmc" = ( -/obj/effect/turf_decal/tile/green/diagonal_centre, -/obj/machinery/camera/autoname/directional/north, -/turf/open/floor/iron/diagonal, -/area/station/hallway/primary/central/aft) +"tmi" = ( +/obj/structure/flora/bush/flowers_br/style_3, +/turf/open/floor/grass, +/area/station/service/chapel) "tmk" = ( /obj/machinery/power/emitter, /obj/effect/turf_decal/stripes/line{ @@ -58158,6 +58226,15 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) +"tmD" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners{ + dir = 1 + }, +/obj/effect/turf_decal/siding/thinplating_new{ + dir = 4 + }, +/turf/open/floor/iron/small, +/area/station/hallway/secondary/service) "tmL" = ( /obj/structure/lattice, /obj/structure/transit_tube/curved/flipped{ @@ -58165,6 +58242,12 @@ }, /turf/open/space/basic, /area/space/nearstation) +"tmM" = ( +/obj/machinery/airalarm/directional/north, +/turf/open/floor/iron/stairs/left{ + dir = 8 + }, +/area/station/commons/fitness/locker_room) "tmQ" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -58187,14 +58270,13 @@ }, /turf/open/floor/iron/small, /area/station/maintenance/port/lesser) -"tmV" = ( -/obj/effect/turf_decal/tile/green/diagonal_centre, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/turf/open/floor/iron/diagonal, -/area/station/hallway/primary/central/aft) "tnb" = ( /turf/open/floor/plating, /area/station/maintenance/central/lesser) +"tnj" = ( +/obj/machinery/door/firedoor, +/turf/open/floor/iron/textured_half, +/area/station/service/bar) "tns" = ( /obj/effect/mapping_helpers/broken_floor, /obj/effect/decal/cleanable/dirt, @@ -58204,15 +58286,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/engine, /area/station/science/explab) -"tnt" = ( -/obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/south, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/engineering/storage/tech) "tnu" = ( /obj/structure/table, /obj/item/folder/yellow, @@ -58240,6 +58313,13 @@ }, /turf/open/floor/tram, /area/station/maintenance/port/aft) +"tnB" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/maintenance/hallway/abandoned_command) "tnF" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -58249,15 +58329,34 @@ /turf/open/floor/iron, /area/station/maintenance/department/engine/atmos) "tnH" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/visible, +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ + dir = 4 + }, +/obj/effect/landmark/start/atmospheric_technician, /turf/open/floor/iron/dark, /area/station/engineering/atmos) -"tnO" = ( -/obj/structure/cable, -/obj/effect/mapping_helpers/broken_floor, -/obj/effect/decal/cleanable/dirt, +"tnK" = ( +/obj/structure/table/reinforced, +/obj/structure/displaycase/forsale/kitchen{ + pixel_y = 5 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "kitchenshutters"; + name = "Kitchen Shutters" + }, /turf/open/floor/plating, -/area/station/maintenance/central/lesser) +/area/station/service/kitchen) +"tnZ" = ( +/obj/structure/bookcase/random, +/obj/structure/sign/poster/official/random/directional/west, +/obj/structure/sign/painting/library{ + pixel_y = 32 + }, +/turf/open/floor/wood/parquet, +/area/station/service/library) "tof" = ( /turf/closed/wall/rust, /area/station/ai_monitored/turret_protected/ai) @@ -58282,9 +58381,13 @@ }, /turf/open/floor/tram, /area/station/maintenance/port/aft) -"toA" = ( -/turf/open/floor/iron, -/area/station/hallway/secondary/recreation) +"tov" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/light/cold/directional/north, +/turf/open/floor/iron/dark, +/area/station/cargo/office) "toC" = ( /obj/effect/turf_decal/tile/yellow/half/contrasted{ dir = 4 @@ -58336,10 +58439,6 @@ }, /turf/open/floor/plating/airless, /area/station/hallway/secondary/dock) -"toI" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/engineering/storage/tech) "toK" = ( /obj/effect/turf_decal/stripes/line, /obj/machinery/suit_storage_unit/atmos, @@ -58361,13 +58460,6 @@ /obj/effect/turf_decal/tile/neutral, /turf/open/floor/iron, /area/station/hallway/primary/fore) -"toY" = ( -/obj/effect/turf_decal/siding/wideplating/dark{ - dir = 1 - }, -/obj/effect/turf_decal/tile/dark_red/half/contrasted, -/turf/open/floor/iron, -/area/station/security/brig/entrance) "tpk" = ( /obj/machinery/vending/wardrobe/law_wardrobe, /obj/effect/turf_decal/siding/wood{ @@ -58384,13 +58476,15 @@ /obj/structure/window/reinforced/spawner/directional/west, /turf/open/floor/noslip, /area/station/security/tram) -"tpE" = ( -/obj/effect/mapping_helpers/broken_floor, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 +"tpG" = ( +/obj/structure/closet/athletic_mixed, +/obj/effect/turf_decal/stripes/red/line{ + dir = 4 }, -/turf/open/floor/wood, -/area/station/commons/fitness/recreation) +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/machinery/firealarm/directional/north, +/turf/open/floor/iron, +/area/station/commons/fitness/recreation/entertainment) "tpK" = ( /obj/effect/turf_decal/trimline/white/warning{ dir = 4 @@ -58420,6 +58514,15 @@ }, /turf/open/floor/wood, /area/station/commons/fitness/recreation) +"tpQ" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/central/greater) "tqh" = ( /obj/effect/turf_decal/trimline/white/line{ dir = 8 @@ -58434,11 +58537,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/maintenance/port/lesser) -"tqq" = ( -/obj/effect/turf_decal/tile/green/diagonal_centre, -/obj/effect/landmark/event_spawn, -/turf/open/floor/iron/diagonal, -/area/station/hallway/primary/central/aft) "tqs" = ( /obj/structure/bodycontainer/morgue{ dir = 1 @@ -58446,44 +58544,17 @@ /obj/machinery/light/small/directional/south, /turf/open/floor/iron/dark/small, /area/station/medical/morgue) -"tqz" = ( -/obj/structure/sign/poster/official/random/directional/north, -/obj/effect/turf_decal/tile/green/diagonal_centre, -/turf/open/floor/iron/diagonal, -/area/station/hallway/primary/central/aft) "tqD" = ( /obj/structure/cable, /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/ai_monitored/turret_protected/ai_upload) -"tqE" = ( -/obj/effect/turf_decal/tile/brown/opposingcorners, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/computer/shuttle/mining{ - dir = 4 - }, -/obj/machinery/light/cold/directional/west, -/turf/open/floor/iron, -/area/station/cargo/miningoffice) "tqF" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/turf_decal/tile/blue/fourcorners, /obj/structure/window/spawner/directional/north, /turf/open/floor/iron/white, /area/station/medical/treatment_center) -"tqK" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/tile/green/diagonal_centre, -/turf/open/floor/iron/diagonal, -/area/station/hallway/primary/central/aft) -"tqT" = ( -/obj/effect/turf_decal/tile/dark_red/opposingcorners, -/obj/structure/chair{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/security/brig/entrance) "tqV" = ( /obj/effect/turf_decal/stripes/red/line{ dir = 5 @@ -58509,15 +58580,6 @@ dir = 1 }, /area/station/hallway/secondary/dock) -"trk" = ( -/obj/effect/turf_decal/bot, -/obj/effect/mapping_helpers/broken_floor, -/obj/machinery/door/window/right/directional/south{ - name = "Command Deliveries"; - req_access = list("command") - }, -/turf/open/floor/wood/tile, -/area/station/command/corporate_showroom) "tro" = ( /obj/effect/turf_decal/stripes/line, /turf/open/floor/iron/smooth, @@ -58544,6 +58606,9 @@ /obj/machinery/firealarm/directional/east, /turf/open/floor/iron/dark/small, /area/station/engineering/supermatter/room) +"trB" = ( +/turf/open/floor/glass, +/area/station/hallway/primary/central/aft) "trI" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -58551,25 +58616,12 @@ /obj/structure/sign/warning/directional/north, /turf/open/floor/plating, /area/station/maintenance/port/aft) -"trS" = ( -/obj/effect/decal/cleanable/glass, -/obj/structure/grille, -/obj/item/shard, -/turf/open/floor/plating, -/area/station/commons/storage/tools) "tsb" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/turf_decal/stripes/line, /obj/structure/sign/departments/aiupload/directional/south, /turf/open/floor/iron/white, /area/station/hallway/primary/starboard) -"tsf" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/dark_red/opposingcorners, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/security/tram) "tsl" = ( /obj/effect/landmark/atmospheric_sanity/ignore_area, /obj/structure/chair/plastic{ @@ -58599,6 +58651,14 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/dark/hidden, /turf/open/floor/iron/grimy, /area/station/tcommsat/server) +"tsB" = ( +/obj/effect/turf_decal/tile/brown/opposingcorners{ + dir = 1 + }, +/obj/machinery/holopad, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/commons/vacant_room/commissary) "tsF" = ( /turf/closed/wall/r_wall, /area/station/hallway/primary/central/fore) @@ -58606,6 +58666,10 @@ /obj/machinery/electrolyzer, /turf/open/floor/catwalk_floor, /area/station/maintenance/disposal/incinerator) +"ttb" = ( +/obj/structure/flora/grass/jungle/b/style_random, +/turf/open/floor/grass, +/area/station/service/chapel) "ttg" = ( /obj/structure/lattice/catwalk, /obj/structure/railing{ @@ -58614,19 +58678,15 @@ /turf/open/space/basic, /area/station/engineering/atmos/space_catwalk) "tts" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/neutral, -/turf/open/floor/iron, -/area/station/hallway/secondary/recreation) -"ttA" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 8 +/obj/machinery/light/floor, +/obj/structure/altar_of_gods, +/obj/item/book/bible, +/obj/effect/landmark/start/hangover, +/obj/item/flashlight/lantern{ + pixel_y = 5 }, -/turf/open/floor/iron/grimy, -/area/station/service/theater) +/turf/open/floor/wood/tile, +/area/station/service/chapel) "ttD" = ( /obj/effect/turf_decal/stripes/red/line{ dir = 9 @@ -58643,13 +58703,6 @@ }, /turf/open/floor/iron/small, /area/station/hallway/secondary/exit/departure_lounge) -"tue" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/yellow/visible{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/white/small, -/area/station/science/ordnance/storage) "tug" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 8 @@ -58701,9 +58754,24 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /turf/open/floor/iron/dark/smooth_large, /area/station/command/bridge) +"tuY" = ( +/obj/effect/spawner/random/structure/closet_private, +/obj/machinery/light/small/directional/west, +/turf/open/floor/carpet/orange, +/area/station/commons/dorms) "tuZ" = ( /turf/closed/wall, /area/station/security/brig/entrance) +"tvx" = ( +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/obj/effect/turf_decal/siding/dark_red{ + dir = 1 + }, +/obj/machinery/disposal/bin, +/turf/open/floor/stone, +/area/station/command/heads_quarters/hos) "tvM" = ( /obj/structure/flora/bush/fullgrass/style_random, /obj/structure/flora/bush/flowers_br/style_random, @@ -58733,13 +58801,16 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/port/lesser) -"twf" = ( -/obj/structure/disposalpipe/trunk, -/obj/machinery/disposal/bin, -/obj/effect/turf_decal/bot, -/obj/effect/turf_decal/tile/neutral/fourcorners, +"twe" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/machinery/status_display/evac/directional/west, +/obj/structure/disposalpipe/segment, +/obj/effect/landmark/start/hangover, /turf/open/floor/iron, -/area/station/hallway/primary/starboard) +/area/station/hallway/primary/central/fore) "twg" = ( /obj/structure/railing{ dir = 5 @@ -58753,23 +58824,12 @@ /obj/structure/steam_vent, /turf/open/floor/plating, /area/station/maintenance/starboard/central) -"twj" = ( -/obj/machinery/vending/coffee, -/obj/structure/sign/poster/official/random/directional/north, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron, -/area/station/hallway/primary/starboard) -"twk" = ( -/obj/effect/mapping_helpers/broken_floor, -/obj/effect/turf_decal/siding/wood{ - dir = 10 +"twm" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 }, -/turf/open/floor/wood/tile, -/area/station/maintenance/aft) -"twl" = ( -/obj/effect/spawner/structure/window, -/turf/open/floor/plating, -/area/station/hallway/primary/starboard) +/turf/closed/wall, +/area/station/maintenance/port/greater) "two" = ( /obj/structure/table/reinforced, /obj/structure/desk_bell{ @@ -58786,16 +58846,6 @@ /obj/structure/window/reinforced/spawner/directional/west, /turf/open/floor/iron/small, /area/station/security/tram) -"twC" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 9 - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/mapping_helpers/broken_floor, -/obj/effect/spawner/random/trash, -/turf/open/floor/plating, -/area/station/maintenance/port/lesser) "twE" = ( /obj/structure/cable, /obj/machinery/door/firedoor, @@ -58834,33 +58884,18 @@ /turf/open/floor/iron/grimy, /area/station/command/heads_quarters/ce) "twN" = ( -/obj/machinery/door/airlock{ - name = "Maintenance" +/obj/effect/turf_decal/weather/dirt{ + dir = 8 }, -/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, -/obj/structure/cable, -/turf/open/floor/plating/rust, -/area/station/maintenance/fore/greater) +/obj/machinery/newscaster/directional/west, +/turf/open/floor/grass, +/area/station/service/chapel) "twQ" = ( /obj/effect/turf_decal/stripes/white/line{ dir = 9 }, /turf/open/floor/tram, /area/station/maintenance/department/medical/central) -"twR" = ( -/obj/structure/table/glass, -/obj/machinery/cell_charger, -/obj/item/stock_parts/cell, -/obj/machinery/status_display/evac/directional/north, -/obj/structure/sign/directions/supply/directional/west, -/obj/structure/sign/directions/engineering/directional/west{ - pixel_y = 8 - }, -/obj/structure/sign/directions/command/directional/west{ - pixel_y = -8 - }, -/turf/open/floor/iron/white, -/area/station/hallway/primary/starboard) "twZ" = ( /obj/structure/chair/sofa/bench/right, /obj/machinery/newscaster/directional/north, @@ -58883,6 +58918,11 @@ /obj/machinery/firealarm/directional/north, /turf/open/floor/iron/white, /area/station/hallway/primary/starboard) +"txC" = ( +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/herringbone, +/area/station/commons/dorms) "txN" = ( /turf/closed/wall, /area/station/security/prison/workout) @@ -58909,6 +58949,12 @@ /obj/machinery/light/small/directional/west, /turf/open/floor/iron/showroomfloor, /area/station/commons/toilet/auxiliary) +"txW" = ( +/obj/structure/window/reinforced/spawner/directional/north, +/obj/structure/window/reinforced/spawner/directional/south, +/obj/structure/grille, +/turf/open/floor/plating, +/area/station/hallway/primary/central/fore) "tyh" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -58955,13 +59001,12 @@ }, /turf/open/floor/iron/dark/small, /area/station/engineering/supermatter/room) -"tyx" = ( -/obj/structure/disposalpipe/segment{ - dir = 6 - }, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating, -/area/station/maintenance/hallway/abandoned_command) +"tyz" = ( +/obj/effect/turf_decal/siding/wood/corner, +/obj/effect/turf_decal/siding/wood, +/obj/effect/landmark/start/hangover, +/turf/open/floor/stone, +/area/station/service/bar) "tyA" = ( /obj/machinery/vending/modularpc, /obj/structure/sign/departments/science/alt/directional/east, @@ -58978,13 +59023,6 @@ /obj/effect/landmark/transport/nav_beacon/tram/nav/birdshot/prison, /turf/open/floor/tram, /area/station/security/tram) -"tyY" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/firealarm/directional/south, -/turf/open/floor/iron/dark/side{ - dir = 4 - }, -/area/station/science/ordnance/testlab) "tzh" = ( /obj/machinery/atmospherics/pipe/smart/manifold/yellow/visible{ dir = 4 @@ -59016,11 +59054,6 @@ /obj/effect/mapping_helpers/airlock/access/any/service/maintenance, /turf/open/floor/plating, /area/station/maintenance/port/greater) -"tzs" = ( -/obj/effect/mapping_helpers/broken_floor, -/obj/effect/spawner/random/engineering/atmospherics_portable, -/turf/open/floor/iron, -/area/station/maintenance/department/medical/central) "tzx" = ( /obj/effect/turf_decal/siding/dark_red/corner, /obj/structure/rack, @@ -59058,10 +59091,18 @@ }, /turf/open/floor/iron/dark, /area/station/science/genetics) -"tzJ" = ( -/obj/structure/flora/bush/flowers_yw/style_random, +"tzN" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 4 + }, +/obj/structure/flora/bush/flowers_yw/style_2, +/obj/structure/flora/bush/large/style_random, /turf/open/floor/grass, /area/station/service/chapel) +"tzZ" = ( +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/commons/fitness/locker_room) "tAm" = ( /obj/effect/turf_decal/tile/brown/opposingcorners, /obj/effect/decal/cleanable/dirt, @@ -59082,6 +59123,16 @@ /obj/effect/spawner/random/maintenance, /turf/open/floor/plating, /area/station/maintenance/department/medical/central) +"tAr" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/decal/cleanable/dirt, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/wood, +/area/station/service/abandoned_gambling_den) "tAs" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -59090,18 +59141,6 @@ }, /turf/open/floor/iron, /area/station/security) -"tAt" = ( -/obj/structure/cable, -/obj/effect/turf_decal/tile/red/opposingcorners{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/obj/effect/landmark/start/depsec/science, -/turf/open/floor/iron, -/area/station/security/checkpoint/science) "tAu" = ( /obj/structure/disposalpipe/trunk{ dir = 1 @@ -59130,6 +59169,19 @@ /obj/effect/spawner/random/engineering/flashlight, /turf/open/floor/catwalk_floor/iron, /area/station/maintenance/department/medical/central) +"tAF" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/effect/turf_decal/siding/wood, +/obj/machinery/door/airlock/public/glass{ + name = "Chapel Office" + }, +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/access/all/service/chapel_office, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron/textured_half, +/area/station/service/chapel/office) "tAH" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/turf_decal/trimline/blue/filled/line{ @@ -59160,26 +59212,12 @@ /obj/effect/turf_decal/siding/wood, /turf/open/floor/iron/grimy, /area/station/tcommsat/server) -"tBe" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/effect/turf_decal/tile/brown/half/contrasted{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/cargo/sorting) -"tBi" = ( -/obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ - dir = 4 +"tBk" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 }, -/obj/effect/decal/cleanable/cobweb/cobweb2, -/turf/open/floor/iron, -/area/station/security/courtroom) +/turf/open/floor/stone, +/area/station/service/chapel) "tBm" = ( /obj/machinery/hydroponics/soil, /turf/open/floor/grass, @@ -59211,31 +59249,6 @@ }, /turf/open/floor/iron, /area/station/security/prison/workout) -"tBG" = ( -/obj/structure/cable, -/obj/structure/table/reinforced, -/obj/machinery/cell_charger, -/obj/item/stock_parts/cell/high, -/obj/machinery/status_display/ai/directional/north, -/obj/effect/mapping_helpers/broken_floor, -/obj/machinery/camera/autoname/directional/north, -/turf/open/floor/iron, -/area/station/engineering/storage/tech) -"tBL" = ( -/obj/machinery/door/airlock{ - id_tag = "study_c"; - name = "Study C" - }, -/turf/open/floor/iron/textured_half{ - dir = 1 - }, -/area/station/commons) -"tBO" = ( -/obj/structure/cable, -/obj/structure/chair/stool/directional/north, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/security/prison/workout) "tCc" = ( /obj/structure/lattice/catwalk, /obj/structure/railing, @@ -59247,13 +59260,12 @@ }, /turf/open/space/basic, /area/space/nearstation) -"tCk" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 5 - }, -/obj/machinery/light/directional/east, -/turf/open/floor/grass, -/area/station/service/chapel) +"tCh" = ( +/obj/structure/chair/stool/directional/north, +/obj/effect/turf_decal/siding/red, +/obj/effect/landmark/start/security_officer, +/turf/open/floor/iron/small, +/area/station/security/office) "tCm" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/turf_decal/tile/red{ @@ -59327,12 +59339,13 @@ "tDn" = ( /turf/closed/wall/r_wall, /area/station/maintenance/department/prison) -"tDq" = ( -/obj/structure/cable, -/obj/effect/mapping_helpers/broken_floor, -/obj/structure/broken_flooring/singular/directional/east, -/turf/open/floor/plating, -/area/station/commons) +"tDz" = ( +/obj/structure/window/spawner/directional/west, +/obj/structure/chair/sofa/corp/left{ + dir = 4 + }, +/turf/open/floor/iron/dark/smooth_large, +/area/station/service/lawoffice) "tDB" = ( /obj/structure/cable, /turf/open/floor/plating, @@ -59346,30 +59359,17 @@ dir = 1 }, /area/station/hallway/secondary/exit/departure_lounge) -"tDJ" = ( -/obj/structure/disposalpipe/segment, +"tDM" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/turf_decal/tile/neutral{ - dir = 4 + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 10 }, /turf/open/floor/iron, -/area/station/hallway/primary/port) -"tDP" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/duct, -/turf/open/floor/iron/kitchen/small, -/area/station/hallway/secondary/service) -"tDT" = ( -/turf/open/floor/iron/kitchen/small, -/area/station/hallway/secondary/service) -"tDZ" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/wood/parquet, -/area/station/service/theater) +/area/station/hallway/primary/central/fore) "tEg" = ( /obj/structure/transport/linear/tram, /obj/effect/turf_decal/stripes/white/line{ @@ -59397,10 +59397,6 @@ /obj/machinery/airalarm/directional/east, /turf/open/floor/iron, /area/station/security/tram) -"tEI" = ( -/mob/living/simple_animal/hostile/retaliate/goose/vomit, -/turf/open/floor/wood/tile, -/area/station/service/bar) "tEL" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -59410,33 +59406,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central/fore) -"tET" = ( -/obj/structure/disposalpipe/segment{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/port) -"tEU" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 4 - }, -/obj/machinery/light/small/directional/east, -/turf/open/floor/grass, -/area/station/service/chapel) -"tEW" = ( -/obj/structure/disposalpipe/segment{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/port) "tFs" = ( /obj/structure/table/glass, /obj/item/storage/medkit/regular{ @@ -59449,11 +59418,6 @@ /obj/structure/extinguisher_cabinet/directional/south, /turf/open/floor/iron/white, /area/station/medical/medbay/central) -"tFA" = ( -/obj/effect/mapping_helpers/broken_floor, -/obj/item/kirbyplants/random, -/turf/open/floor/iron, -/area/station/hallway/secondary/dock) "tFB" = ( /obj/machinery/atmospherics/components/unary/portables_connector/visible{ dir = 4 @@ -59464,24 +59428,12 @@ "tFE" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/white/side{ - dir = 6 - }, -/area/station/science/xenobiology) -"tFG" = ( -/obj/effect/turf_decal/tile/brown/full, -/obj/machinery/door/window/right/directional/west{ - name = "Bar Access"; - req_access = list("bar") - }, -/obj/effect/turf_decal/siding/wood{ - dir = 8 +/obj/effect/turf_decal/trimline/neutral/line{ + dir = 9 }, -/obj/machinery/light/small/directional/north, -/obj/machinery/light_switch/directional/north, -/turf/open/floor/iron/smooth_large, -/area/station/service/bar) +/obj/effect/turf_decal/trimline/neutral/corner, +/turf/open/floor/iron, +/area/station/hallway/primary/central/aft) "tFH" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -59497,21 +59449,13 @@ "tFQ" = ( /turf/closed/wall, /area/station/medical/medbay/central) -"tFY" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 +"tFW" = ( +/obj/effect/turf_decal/tile/yellow/anticorner/contrasted{ + dir = 8 }, +/obj/machinery/chem_master, /turf/open/floor/iron, -/area/station/hallway/primary/port) -"tGp" = ( -/obj/machinery/light/small/directional/south, -/turf/open/floor/engine, -/area/station/science/xenobiology) +/area/station/medical/chemistry) "tGq" = ( /turf/closed/wall, /area/station/service/kitchen/coldroom) @@ -59524,6 +59468,14 @@ /obj/machinery/transport/destination_sign/indicator/directional/north, /turf/open/floor/noslip, /area/station/security/tram) +"tGB" = ( +/obj/machinery/light_switch/directional/south, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/obj/machinery/camera/autoname/directional/south, +/turf/open/floor/iron/smooth, +/area/station/maintenance/solars/starboard/fore) "tGI" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -59554,18 +59506,11 @@ }, /turf/open/floor/iron/smooth_large, /area/station/engineering/storage_shared) -"tHh" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/door/airlock{ - name = "Kitchen Cold Room" - }, -/obj/effect/mapping_helpers/airlock/access/all/service/kitchen, -/obj/machinery/duct, -/turf/open/floor/catwalk_floor/flat_white, -/area/station/service/kitchen/coldroom) +"tHi" = ( +/obj/effect/decal/cleanable/dirt, +/mob/living/carbon/human/species/monkey/punpun, +/turf/open/floor/stone, +/area/station/service/abandoned_gambling_den) "tHp" = ( /obj/effect/turf_decal/tile/dark_red/opposingcorners, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, @@ -59581,11 +59526,6 @@ /obj/machinery/door/firedoor, /turf/open/floor/catwalk_floor, /area/station/hallway/secondary/entry) -"tHS" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/research/anomaly_refinery, -/turf/open/floor/iron/white/small, -/area/station/science/ordnance/storage) "tHY" = ( /obj/machinery/atmospherics/pipe/bridge_pipe/yellow/visible, /obj/machinery/atmospherics/pipe/bridge_pipe/scrubbers/visible{ @@ -59594,17 +59534,14 @@ /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/iron/dark, /area/station/engineering/atmos) -"tIc" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/neutral{ +"tIa" = ( +/obj/effect/turf_decal/tile/dark_red/opposingcorners, +/obj/structure/chair{ dir = 4 }, +/obj/machinery/light/small/directional/west, /turf/open/floor/iron, -/area/station/hallway/primary/port) +/area/station/security/brig/entrance) "tIz" = ( /obj/structure/chair/wood{ dir = 8 @@ -59612,16 +59549,6 @@ /obj/effect/landmark/blobstart, /turf/open/floor/wood, /area/station/service/chapel/funeral) -"tIA" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/airalarm/directional/south, -/obj/effect/turf_decal/tile/green/diagonal_centre, -/turf/open/floor/iron/diagonal, -/area/station/hallway/primary/central/aft) "tIB" = ( /obj/item/clothing/head/cone{ pixel_x = 16; @@ -59634,22 +59561,6 @@ /obj/effect/landmark/blobstart, /turf/open/floor/plating, /area/station/maintenance/department/engine) -"tIE" = ( -/turf/closed/wall/mineral/titanium, -/area/station/commons/fitness/recreation/entertainment) -"tII" = ( -/obj/effect/spawner/random/structure/closet_maintenance, -/turf/open/floor/plating, -/area/station/maintenance/central/greater) -"tIL" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/green/diagonal_centre, -/turf/open/floor/iron/diagonal, -/area/station/hallway/primary/central/aft) "tIN" = ( /obj/structure/table/reinforced, /obj/item/folder/yellow{ @@ -59675,13 +59586,15 @@ }, /turf/open/floor/iron, /area/station/security) -"tJi" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, +"tJo" = ( +/obj/structure/closet/lasertag/blue, +/obj/effect/turf_decal/stripes/red/line{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/machinery/firealarm/directional/south, /turf/open/floor/iron, -/area/station/security/prison) +/area/station/commons/fitness/recreation/entertainment) "tJw" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -59702,46 +59615,6 @@ }, /turf/open/floor/plating, /area/station/security/brig/entrance) -"tJD" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/light/small/directional/south, -/obj/effect/turf_decal/tile/green/diagonal_centre, -/turf/open/floor/iron/diagonal, -/area/station/hallway/primary/central/aft) -"tJF" = ( -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/structure/rack, -/obj/item/storage/toolbox/emergency{ - pixel_x = -2; - pixel_y = -3 - }, -/obj/item/clothing/mask/cigarette/cigar, -/obj/effect/mapping_helpers/broken_floor, -/obj/machinery/light_switch/directional/south, -/turf/open/floor/iron/smooth, -/area/station/command/bridge) -"tJG" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/delivery, -/obj/machinery/door/poddoor/shutters/preopen{ - dir = 4; - id = "kihall" - }, -/obj/effect/turf_decal/tile/green/diagonal_centre, -/turf/open/floor/iron/diagonal, -/area/station/hallway/primary/central/aft) -"tJN" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/station/commons/fitness/recreation/entertainment) "tJX" = ( /turf/open/floor/plating, /area/station/maintenance/aft) @@ -59758,28 +59631,11 @@ /turf/open/floor/plating, /area/station/maintenance/port/greater) "tKl" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/security/prison/work) -"tKm" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/item/radio/intercom/directional/south, -/obj/effect/turf_decal/tile/green/diagonal_centre, -/turf/open/floor/iron/diagonal, -/area/station/hallway/primary/central/aft) -"tKC" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 +/obj/effect/landmark/start/assistant, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/firealarm/directional/south, -/obj/effect/turf_decal/tile/green/diagonal_centre, -/turf/open/floor/iron/diagonal, +/turf/open/floor/iron, /area/station/hallway/primary/central/aft) "tKG" = ( /obj/effect/turf_decal/stripes/line, @@ -59811,6 +59667,15 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/station/engineering/storage/tech) +"tLj" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/light/small/broken/directional/south, +/turf/open/floor/wood, +/area/station/service/abandoned_gambling_den) "tLn" = ( /obj/effect/turf_decal/siding{ dir = 1 @@ -59825,14 +59690,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/maintenance/department/medical/central) -"tLH" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating, -/area/station/maintenance/hallway/abandoned_command) "tMh" = ( /obj/structure/fireaxecabinet/directional/south, /obj/machinery/door/window/brigdoor/left/directional/north{ @@ -59843,29 +59700,6 @@ dir = 1 }, /area/station/command/bridge) -"tMi" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/door/airlock/public/glass{ - name = "Services Corridor" - }, -/obj/machinery/door/firedoor, -/turf/open/floor/iron/textured_half{ - dir = 8 - }, -/area/station/hallway/primary/central/aft) -"tMj" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron, -/area/station/hallway/primary/starboard) "tMm" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -59884,22 +59718,6 @@ }, /turf/open/floor/circuit, /area/station/tcommsat/server) -"tMx" = ( -/obj/structure/rack, -/obj/effect/spawner/random/maintenance, -/turf/open/floor/plating, -/area/station/maintenance/central/lesser) -"tMy" = ( -/obj/structure/disposalpipe/segment{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/starboard) "tMJ" = ( /obj/effect/turf_decal/stripes/line{ dir = 5 @@ -59907,17 +59725,6 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/engineering/supermatter/room) -"tMR" = ( -/obj/structure/disposalpipe/segment{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/starboard) "tMS" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -59928,9 +59735,17 @@ /obj/machinery/light/cold/directional/east, /turf/open/floor/iron, /area/station/security/execution/transfer) -"tNc" = ( -/turf/open/floor/wood/parquet, -/area/station/service/theater) +"tNf" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/station/hallway/primary/central/fore) "tNn" = ( /obj/structure/cable, /obj/machinery/door/airlock{ @@ -59980,12 +59795,16 @@ }, /turf/open/floor/iron/dark, /area/station/medical/medbay/lobby) -"tNE" = ( -/obj/effect/mapping_helpers/broken_floor, -/obj/effect/turf_decal/siding/wood, -/obj/structure/bed/maint, -/turf/open/floor/wood, -/area/station/service/abandoned_gambling_den) +"tNF" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/structure/chair{ + dir = 8 + }, +/obj/effect/turf_decal/siding/white{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/medical/medbay/aft) "tNH" = ( /obj/effect/turf_decal/stripes/line, /obj/structure/table/reinforced/titaniumglass, @@ -60006,21 +59825,12 @@ /obj/machinery/atmospherics/pipe/smart/simple/dark/visible, /turf/open/floor/plating, /area/station/engineering/supermatter/room) -"tNS" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/structure/rack, -/obj/machinery/door/poddoor/shutters{ - dir = 4; - id = "vaco"; - name = "Comissary Shutters" - }, -/turf/open/floor/plating, -/area/station/commons/vacant_room/commissary) +"tNR" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/neutral/half/contrasted, +/turf/open/floor/iron/dark/side, +/area/station/science/xenobiology) "tNT" = ( /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/iron/kitchen/small, @@ -60032,10 +59842,26 @@ /obj/item/airlock_painter, /turf/open/floor/iron/small, /area/station/engineering/break_room) +"tOa" = ( +/obj/structure/chair/sofa/bench/left, +/obj/effect/landmark/start/hangover, +/obj/machinery/camera/autoname/directional/north, +/turf/open/floor/iron/white, +/area/station/science/cytology) "tOc" = ( /obj/structure/reagent_dispensers/fueltank, /turf/open/floor/plating, /area/station/maintenance/department/electrical) +"tOd" = ( +/obj/structure/flora/bush/jungle/a/style_3, +/turf/open/floor/grass, +/area/station/service/chapel) +"tOg" = ( +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/turf/open/floor/iron/white/small, +/area/station/commons/toilet/restrooms) "tOk" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -60053,6 +59879,20 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/starboard) +"tOw" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/tile/yellow/anticorner/contrasted{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/commons/storage/tools) +"tOC" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/white, +/area/station/hallway/primary/central/aft) "tOO" = ( /obj/structure/flora/bush/large/style_random{ pixel_x = -20; @@ -60061,15 +59901,6 @@ /obj/machinery/light/small/directional/west, /turf/open/misc/sandy_dirt, /area/station/service/lawoffice) -"tOX" = ( -/obj/structure/cable, -/obj/machinery/firealarm/directional/east, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/security/prison/rec) "tOZ" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/light/cold/directional/north, @@ -60090,14 +59921,6 @@ }, /turf/open/floor/wood, /area/station/cargo/miningfoundry) -"tPd" = ( -/obj/structure/chair/sofa/left/maroon{ - dir = 1 - }, -/obj/effect/landmark/start/hangover, -/obj/machinery/light/cold/directional/south, -/turf/open/floor/iron/showroomfloor, -/area/station/service/cafeteria) "tPf" = ( /obj/machinery/light/small/directional/east, /turf/open/floor/iron/dark, @@ -60115,22 +59938,72 @@ }, /turf/open/floor/iron/white, /area/station/hallway/primary/starboard) +"tPE" = ( +/obj/structure/table, +/obj/item/soap, +/obj/machinery/camera/autoname/directional/east, +/turf/open/floor/iron/showroomfloor, +/area/station/service/barber) "tPH" = ( /obj/structure/cable, /obj/machinery/airalarm/directional/south, /turf/open/floor/wood, /area/station/commons/fitness/recreation) +"tPM" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/neutral, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/hallway/primary/central/fore) "tPP" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/white, /area/station/hallway/primary/starboard) +"tPW" = ( +/obj/structure/closet/secure_closet/personal, +/obj/machinery/status_display/evac/directional/south, +/turf/open/floor/iron, +/area/station/commons/fitness/locker_room) +"tPX" = ( +/obj/structure/table/wood, +/obj/item/paper_bin{ + pixel_x = -2; + pixel_y = 4 + }, +/obj/item/pen{ + pixel_x = -2; + pixel_y = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/obj/machinery/light/small/directional/north, +/obj/structure/sign/painting/library{ + pixel_y = 32 + }, +/turf/open/floor/wood/parquet, +/area/station/service/library) "tPZ" = ( /obj/machinery/netpod, /obj/machinery/power/apc/auto_name/directional/north, /obj/structure/cable, /turf/open/floor/catwalk_floor/iron_dark, /area/station/cargo/bitrunning/den) +"tQr" = ( +/obj/effect/turf_decal/tile/purple/opposingcorners, +/obj/effect/turf_decal/siding/green{ + dir = 10 + }, +/obj/structure/table, +/turf/open/floor/iron/cafeteria, +/area/station/science/circuits) "tQx" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/reagent_dispensers/fueltank, @@ -60148,12 +60021,14 @@ }, /turf/open/floor/iron/white, /area/station/medical/virology) -"tQI" = ( -/obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/south, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/wood, -/area/station/commons/fitness/recreation) +"tQC" = ( +/obj/machinery/door/firedoor, +/obj/machinery/seed_extractor, +/obj/machinery/door/window/right/directional/east, +/turf/open/floor/iron/textured_half{ + dir = 8 + }, +/area/station/service/hydroponics) "tQQ" = ( /obj/structure/cable, /obj/effect/turf_decal/tile/neutral/fourcorners, @@ -60198,17 +60073,6 @@ /obj/item/clothing/suit/hooded/wintercoat/engineering, /turf/open/floor/catwalk_floor, /area/station/engineering/supermatter/room) -"tRp" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/public/glass{ - name = "Holodeck Door" - }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ - cycle_id = "holodeck" - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/commons/fitness/recreation/entertainment) "tRw" = ( /obj/structure/disposalpipe/trunk{ dir = 8 @@ -60225,43 +60089,23 @@ /obj/effect/turf_decal/tile/dark_red/fourcorners, /turf/open/floor/iron, /area/station/security/tram) -"tRH" = ( -/obj/effect/mapping_helpers/broken_floor, -/obj/effect/turf_decal/tile/blue/half/contrasted{ - dir = 4 - }, -/obj/item/kirbyplants/random/fullysynthetic, -/obj/machinery/light/small/directional/east, -/turf/open/floor/iron/white, -/area/station/maintenance/central/greater) -"tRM" = ( -/obj/effect/mapping_helpers/broken_floor, -/obj/structure/table/wood, -/obj/machinery/camera/directional/south{ - c_tag = "Atmospherics - South" - }, -/obj/item/stack/cable_coil/five, -/turf/open/floor/plating, -/area/station/commons/vacant_room/commissary) -"tSe" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/central/fore) +"tRJ" = ( +/obj/effect/turf_decal/siding/thinplating_new/light, +/turf/open/floor/iron/white/small, +/area/station/service/hydroponics) +"tRR" = ( +/obj/structure/chair/stool/directional/east, +/turf/open/floor/iron/smooth, +/area/station/maintenance/department/medical/central) "tSg" = ( /obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible, /obj/machinery/light_switch/directional/east, +/obj/item/clothing/head/cone{ + pixel_x = -7; + pixel_y = 11 + }, /turf/open/floor/iron/dark, /area/station/engineering/atmos) -"tSh" = ( -/obj/item/kirbyplants/random, -/turf/open/floor/wood, -/area/station/hallway/secondary/service) "tSi" = ( /obj/machinery/light/cold/directional/west, /obj/machinery/disposal/bin, @@ -60271,14 +60115,6 @@ /obj/effect/turf_decal/stripes/box, /turf/open/floor/iron/small, /area/station/engineering/atmos) -"tSn" = ( -/obj/effect/turf_decal/tile/red/opposingcorners, -/obj/effect/turf_decal/tile/blue/opposingcorners{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/smooth, -/area/station/service/greenroom) "tSp" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -60294,13 +60130,6 @@ /obj/machinery/telecomms/processor/preset_three, /turf/open/floor/circuit, /area/station/tcommsat/server) -"tSs" = ( -/obj/structure/disposalpipe/segment, -/obj/effect/mapping_helpers/broken_floor, -/obj/machinery/firealarm/directional/west, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/maintenance/hallway/abandoned_command) "tSu" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/landmark/start/hangover, @@ -60312,6 +60141,14 @@ /obj/machinery/light/small/broken/directional/west, /turf/open/floor/eighties, /area/station/service/abandoned_gambling_den/gaming) +"tSA" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/structure/sign/departments/cargo/directional/west, +/turf/open/floor/iron, +/area/station/hallway/primary/central/fore) "tSB" = ( /obj/structure/cable, /obj/structure/table/reinforced, @@ -60386,21 +60223,17 @@ /obj/machinery/light/very_dim/directional/east, /turf/open/floor/iron/grimy, /area/station/commons/vacant_room/office) -"tTG" = ( -/obj/structure/cable, -/obj/effect/turf_decal/siding/wood{ - dir = 4 - }, -/obj/structure/flora/bush/flowers_pp/style_random, -/obj/machinery/firealarm/directional/east, -/turf/open/floor/grass, -/area/station/service/chapel) "tTK" = ( /obj/effect/turf_decal/stripes/corner{ dir = 8 }, /turf/open/floor/iron/smooth_edge, /area/station/engineering/supermatter/room) +"tTT" = ( +/turf/open/floor/iron/white/corner{ + dir = 1 + }, +/area/station/science/xenobiology) "tTW" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -60456,6 +60289,12 @@ /obj/machinery/light/small/directional/north, /turf/open/floor/iron/dark/smooth_large, /area/station/command/meeting_room) +"tUj" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/central/greater) "tUo" = ( /obj/structure/disposalpipe/segment{ dir = 9 @@ -60477,10 +60316,6 @@ /obj/machinery/disposal/bin, /turf/open/floor/iron/dark, /area/station/medical/pharmacy) -"tUD" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/station/tcommsat/server) "tUH" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable, @@ -60495,26 +60330,13 @@ }, /turf/open/floor/circuit, /area/station/tcommsat/server) -"tUK" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/stripes/corner{ - dir = 1 - }, -/obj/item/storage/box{ - pixel_x = -8; - pixel_y = 15 - }, -/obj/item/trash/flare{ - pixel_x = 11; - pixel_y = 21 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/turf/open/floor/iron/dark/corner{ - dir = 4 +"tUZ" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 9 }, -/area/station/hallway/primary/central/fore) +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) "tVc" = ( /obj/machinery/door/airlock/external{ name = "Escape Pod One"; @@ -60526,6 +60348,12 @@ "tVe" = ( /turf/open/floor/carpet/red, /area/station/command/heads_quarters/hos) +"tVp" = ( +/obj/effect/turf_decal/siding/wood/corner, +/obj/machinery/holopad, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/stone, +/area/station/service/bar) "tVt" = ( /obj/effect/spawner/structure/window/reinforced, /obj/effect/turf_decal/stripes/corner{ @@ -60551,6 +60379,11 @@ }, /turf/open/floor/iron, /area/station/cargo/storage) +"tWm" = ( +/obj/structure/flora/bush/jungle/c/style_3, +/obj/effect/turf_decal/weather/dirt, +/turf/open/floor/grass, +/area/station/service/chapel) "tWo" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment, @@ -60587,15 +60420,6 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /turf/open/floor/iron/cafeteria, /area/station/science/breakroom) -"tWL" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/turf/open/floor/iron/dark/side{ - dir = 1 - }, -/area/station/hallway/primary/central/fore) "tWQ" = ( /obj/machinery/door/airlock/public/glass{ name = "Departure Lounge" @@ -60609,13 +60433,13 @@ /obj/structure/table/bronze, /turf/open/floor/wood/tile, /area/station/maintenance/port/lesser) -"tXw" = ( -/obj/structure/disposalpipe/segment{ - dir = 9 - }, -/obj/structure/broken_flooring/singular/directional/east, -/turf/open/floor/plating, -/area/station/maintenance/department/medical/central) +"tXy" = ( +/obj/structure/flora/tree/jungle/small/style_3, +/obj/effect/turf_decal/weather/dirt, +/obj/machinery/light/small/directional/south, +/obj/machinery/status_display/ai/directional/south, +/turf/open/floor/grass, +/area/station/service/chapel) "tXG" = ( /obj/structure/chair{ dir = 8 @@ -60647,39 +60471,6 @@ /obj/item/clothing/suit/hooded/wintercoat/engineering, /turf/open/floor/catwalk_floor, /area/station/engineering/supermatter/room) -"tXT" = ( -/obj/structure/disposalpipe/segment{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/trimline/neutral/line, -/obj/effect/turf_decal/trimline/neutral/line{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/port) -"tYb" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/obj/effect/landmark/event_spawn, -/obj/effect/turf_decal/trimline/neutral/line, -/obj/effect/turf_decal/trimline/neutral/line{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/port) -"tYd" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/obj/machinery/navbeacon{ - codes_txt = "patrol;next_patrol=2.0-Vault-SNexus"; - location = "1.5-PNexus-Vault" - }, -/turf/open/floor/iron, -/area/station/hallway/primary/port) "tYj" = ( /obj/item/exodrone, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, @@ -60714,23 +60505,6 @@ /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/iron/small, /area/station/engineering/atmos/storage/gas) -"tYH" = ( -/obj/machinery/airalarm/directional/east, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/station/hallway/primary/port) -"tYI" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/general/visible{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/ash, -/obj/item/storage/dice{ - pixel_x = -16; - pixel_y = -6 - }, -/turf/open/floor/iron, -/area/station/maintenance/port/fore) "tYL" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, @@ -60748,19 +60522,6 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/hallway/secondary/dock) -"tYQ" = ( -/obj/structure/disposalpipe/segment{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/turf/open/floor/iron/dark/side{ - dir = 1 - }, -/area/station/hallway/primary/central/fore) "tYT" = ( /turf/open/misc/asteroid/airless, /area/space/nearstation) @@ -60772,14 +60533,6 @@ /obj/structure/sign/poster/contraband/got_wood/directional/north, /turf/open/floor/light/colour_cycle/dancefloor_b, /area/station/maintenance/starboard/central) -"tZl" = ( -/obj/effect/turf_decal/tile/yellow/anticorner/contrasted{ - dir = 8 - }, -/obj/effect/mapping_helpers/broken_floor, -/obj/machinery/chem_master, -/turf/open/floor/iron, -/area/station/medical/chemistry) "tZp" = ( /obj/structure/table, /obj/item/stock_parts/matter_bin{ @@ -60817,15 +60570,6 @@ }, /turf/open/floor/wood, /area/station/maintenance/starboard/greater) -"tZG" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/cable, -/obj/machinery/navbeacon{ - codes_txt = "patrol;next_patrol=3.0-StarboardHall-TechStorage"; - location = "2.5-SNexus-StarboardHall" - }, -/turf/open/floor/iron, -/area/station/hallway/primary/starboard) "tZI" = ( /obj/machinery/power/apc/auto_name/directional/east, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -60848,29 +60592,6 @@ /obj/machinery/light/cold/dim/directional/east, /turf/open/floor/iron, /area/station/engineering/main) -"tZR" = ( -/obj/effect/turf_decal/tile/neutral/full, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 - }, -/turf/open/floor/iron/smooth_large, -/area/station/service/bar) -"tZV" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/neutral/end{ - dir = 8 - }, -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/hallway/primary/starboard) -"uaa" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 6 - }, -/turf/open/floor/grass, -/area/station/service/chapel) "uab" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -60891,13 +60612,6 @@ }, /turf/open/floor/plating, /area/station/engineering/atmospherics_engine) -"uao" = ( -/obj/effect/turf_decal/siding/wood/corner{ - dir = 8 - }, -/obj/structure/flora/tree/stump, -/turf/open/floor/grass, -/area/station/service/chapel) "uax" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -60907,13 +60621,17 @@ }, /turf/open/floor/iron/smooth, /area/station/security/checkpoint/customs) -"uaE" = ( -/obj/effect/turf_decal/siding/wood{ +"uaF" = ( +/obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/structure/flora/tree/jungle/small/style_random, -/turf/open/floor/grass, -/area/station/service/chapel) +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/chair/sofa/bench/right{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/hallway/secondary/dock) "uaK" = ( /obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden{ dir = 4 @@ -60922,16 +60640,6 @@ /obj/structure/cable, /turf/open/floor/wood, /area/station/engineering/atmos) -"uaP" = ( -/obj/structure/mirror/directional/east, -/obj/structure/chair/stool/bar/directional/east, -/obj/effect/turf_decal/siding/thinplating_new/light{ - dir = 5 - }, -/obj/structure/sign/poster/official/random/directional/north, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/small, -/area/station/commons/fitness/locker_room) "uaT" = ( /obj/effect/turf_decal/tile/yellow{ dir = 1 @@ -60973,15 +60681,6 @@ /obj/machinery/light_switch/directional/north, /turf/open/floor/iron/dark, /area/station/medical/medbay/lobby) -"ubf" = ( -/obj/effect/landmark/start/assistant, -/obj/effect/turf_decal/trimline/neutral/line{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/neutral/line, -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/hallway/primary/starboard) "ubh" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -60998,6 +60697,13 @@ /obj/item/pipe, /turf/open/floor/iron/small, /area/station/engineering/atmos) +"ubl" = ( +/obj/structure/easel, +/obj/item/canvas/twentythree_twentythree, +/obj/item/canvas/twentythree_twentythree, +/obj/machinery/newscaster/directional/south, +/turf/open/floor/iron, +/area/station/commons/storage/art) "ubs" = ( /obj/structure/lattice, /obj/machinery/atmospherics/pipe/smart/simple/yellow/visible, @@ -61006,11 +60712,6 @@ "uby" = ( /turf/closed/wall, /area/station/security/prison/garden) -"ubB" = ( -/obj/structure/flora/bush/flowers_pp/style_random, -/obj/structure/sign/poster/random/directional/north, -/turf/open/floor/grass, -/area/station/service/hydroponics) "ubK" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -61050,39 +60751,20 @@ }, /turf/open/floor/engine, /area/station/science/explab) -"ucr" = ( +"ucy" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/landmark/event_spawn, -/obj/effect/turf_decal/trimline/neutral/line{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/neutral/line, -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/hallway/primary/starboard) -"uct" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 +/obj/effect/turf_decal/siding/red{ + dir = 10 }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ +/turf/open/floor/iron/small, +/area/station/security/office) +"ucC" = ( +/obj/effect/turf_decal/siding/wideplating/dark{ dir = 8 }, -/turf/open/floor/iron, -/area/station/commons) -"ucH" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/trimline/neutral/line{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/neutral/line, -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/hallway/primary/starboard) +/obj/structure/chair/wood, +/turf/open/floor/iron/small, +/area/station/service/barber) "ucJ" = ( /obj/machinery/door/window/left/directional/south{ req_access = list("chapel_office") @@ -61100,13 +60782,6 @@ }, /turf/open/floor/iron/showroomfloor, /area/station/security/prison/shower) -"ucV" = ( -/obj/structure/chair/wood{ - dir = 4 - }, -/obj/machinery/light/cold/directional/south, -/turf/open/floor/wood/tile, -/area/station/service/bar) "ucY" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -61127,12 +60802,16 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, /area/station/hallway/primary/aft) -"udt" = ( -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/obj/effect/spawner/random/trash, -/turf/open/floor/plating, -/area/station/maintenance/port/greater) +"udf" = ( +/obj/effect/turf_decal/delivery/white{ + color = "#52B4E9" + }, +/obj/structure/reagent_dispensers/watertank/high, +/obj/effect/turf_decal/siding/thinplating/light/end{ + dir = 8 + }, +/turf/open/floor/iron/white/small, +/area/station/service/hydroponics) "udv" = ( /obj/machinery/telecomms/receiver/preset_right, /turf/open/floor/circuit, @@ -61173,13 +60852,6 @@ }, /turf/open/floor/iron/textured_large, /area/station/security/brig/entrance) -"udI" = ( -/obj/structure/closet{ - name = "Evidence Closet 3" - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/smooth, -/area/station/security/evidence) "udK" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -61204,17 +60876,13 @@ /obj/machinery/airalarm/directional/south, /turf/open/floor/iron, /area/station/engineering/atmos/space_catwalk) -"udZ" = ( -/obj/structure/chair/sofa/bench/left{ +"uek" = ( +/obj/effect/turf_decal/siding/wideplating/dark{ dir = 8 }, -/obj/machinery/airalarm/directional/east, -/obj/effect/decal/cleanable/dirt, +/obj/item/radio/intercom/directional/east, /turf/open/floor/iron, -/area/station/commons) -"uej" = ( -/turf/closed/wall, -/area/station/hallway/secondary/service) +/area/station/commons/dorms) "ueo" = ( /obj/machinery/light/small/broken{ dir = 4 @@ -61245,15 +60913,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/smooth, /area/station/command/bridge) -"ueG" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/iron, -/area/station/maintenance/department/medical/central) "ueH" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -61330,6 +60989,18 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/catwalk_floor, /area/station/engineering/supermatter/room) +"ugb" = ( +/obj/machinery/door/airlock/security/glass{ + id_tag = "outerbrig"; + name = "Brig" + }, +/obj/effect/mapping_helpers/airlock/access/all/security/entrance, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "sci-entrance" + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron/textured_half, +/area/station/security/brig/entrance) "uge" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -61358,6 +61029,13 @@ /obj/machinery/holopad, /turf/open/floor/iron, /area/station/hallway/primary/starboard) +"ugo" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/siding/purple{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/command/heads_quarters/rd) "ugA" = ( /obj/effect/turf_decal/siding/yellow{ dir = 1 @@ -61392,6 +61070,10 @@ }, /turf/open/floor/iron/dark/herringbone, /area/station/security/courtroom) +"ugI" = ( +/obj/structure/flora/tree/jungle/style_3, +/turf/open/floor/grass, +/area/station/service/chapel) "ugJ" = ( /obj/structure/disposalpipe/segment{ dir = 5 @@ -61450,47 +61132,42 @@ /obj/structure/chair/bronze, /turf/open/floor/wood/tile, /area/station/maintenance/port/lesser) -"uhu" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/blue{ +"uhy" = ( +/obj/effect/turf_decal/stripes/red/line{ dir = 4 }, -/obj/effect/turf_decal/tile/blue{ +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/machinery/computer/holodeck{ dir = 8 }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/washing_machine, -/obj/effect/turf_decal/siding/thinplating/dark{ - dir = 9 - }, -/turf/open/floor/iron/cafeteria, -/area/station/security/prison) -"uhz" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/camera/autoname/directional/east, +/turf/open/floor/iron, +/area/station/commons/fitness/recreation/entertainment) +"uhH" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/mapping_helpers/broken_floor, -/obj/effect/decal/cleanable/dirt, -/obj/effect/landmark/start/clown, -/turf/open/floor/stone, -/area/station/service/theater) -"uhN" = ( -/obj/effect/turf_decal/tile/blue, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/turf/open/floor/iron/white/corner{ - dir = 8 +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/transport/power_rectifier{ + configured_transport_id = "bird_2" }, -/area/station/hallway/secondary/dock) -"uhS" = ( -/obj/structure/chair/sofa/bench/right{ +/turf/open/floor/iron, +/area/station/maintenance/department/medical/central) +"uhI" = ( +/obj/effect/turf_decal/stripes/line{ dir = 1 }, -/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/caution, +/obj/effect/spawner/random/engineering/tracking_beacon, +/turf/open/floor/iron/smooth, +/area/station/command/gateway) +"uhM" = ( +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/turf/open/floor/iron/white, +/area/station/hallway/primary/central/aft) +"uhT" = ( /turf/open/floor/iron, -/area/station/hallway/secondary/recreation) +/area/station/maintenance/aft) "uia" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -61530,12 +61207,12 @@ }, /turf/open/floor/plating, /area/station/construction/mining/aux_base) -"uio" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 5 +"uiw" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 }, -/turf/open/floor/iron/grimy, -/area/station/service/theater) +/turf/open/floor/plating, +/area/station/maintenance/port/greater) "uiz" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -61550,9 +61227,6 @@ }, /turf/open/floor/iron/white/small, /area/station/science/lobby) -"uiI" = ( -/turf/open/floor/iron, -/area/station/maintenance/hallway/abandoned_recreation) "uiS" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -61561,14 +61235,6 @@ dir = 1 }, /area/station/science/research) -"uiW" = ( -/obj/structure/cable, -/obj/machinery/door/airlock{ - name = "Maintenance" - }, -/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, -/turf/open/floor/plating, -/area/station/maintenance/central/lesser) "uiY" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -61581,6 +61247,15 @@ /obj/effect/turf_decal/trimline/neutral/line, /turf/open/floor/iron, /area/station/hallway/primary/starboard) +"ujk" = ( +/obj/effect/turf_decal/weather/snow, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/obj/effect/turf_decal/weather/snow/corner, +/turf/open/floor/iron/freezer, +/area/station/service/kitchen/coldroom) "ujq" = ( /obj/structure/disposalpipe/segment, /obj/structure/closet/emcloset, @@ -61595,6 +61270,23 @@ "ujA" = ( /turf/closed/wall/r_wall, /area/station/security/warden) +"ujB" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/status_display/evac/directional/north, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/structure/disposalpipe/junction{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central/fore) +"ujE" = ( +/obj/item/kirbyplants/random/fullysynthetic, +/obj/effect/turf_decal/tile/dark_red/opposingcorners, +/obj/item/radio/intercom/directional/east, +/turf/open/floor/iron, +/area/station/security/tram) "ujH" = ( /obj/structure/sink/directional/south, /obj/item/mop, @@ -61651,6 +61343,16 @@ /obj/machinery/holopad, /turf/open/floor/iron, /area/station/engineering/storage/tech) +"ukE" = ( +/obj/structure/cable, +/obj/structure/window/reinforced/spawner/directional/south, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/science/xenobiology) "ukI" = ( /obj/effect/spawner/structure/window, /turf/open/floor/plating, @@ -61671,16 +61373,6 @@ /obj/machinery/camera/autoname/directional/north, /turf/open/floor/iron/dark, /area/station/security/checkpoint/science) -"ukW" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/disposalpipe/segment{ - dir = 5 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/turf/open/floor/iron/white/small, -/area/station/service/janitor) "ulb" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/door/firedoor, @@ -61691,10 +61383,22 @@ /obj/effect/mapping_helpers/airlock/access/all/medical/general, /turf/open/floor/iron/white/small, /area/station/medical/cryo) +"ulf" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/yellow/visible, +/turf/open/floor/iron, +/area/station/engineering/atmos) "ull" = ( /obj/machinery/light/cold/directional/west, /turf/open/floor/iron, /area/station/hallway/secondary/entry) +"ulp" = ( +/obj/structure/cable, +/obj/structure/chair/stool/directional/north, +/turf/open/floor/iron, +/area/station/security/prison/workout) "ulq" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -61705,6 +61409,16 @@ /obj/machinery/light_switch/directional/north, /turf/open/floor/iron/dark/smooth_large, /area/station/command/meeting_room) +"ulE" = ( +/obj/effect/spawner/random/trash, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/central/greater) "ulK" = ( /obj/structure/cable, /obj/machinery/ntnet_relay, @@ -61730,13 +61444,13 @@ /obj/effect/turf_decal/stripes/line{ dir = 1 }, +/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible{ + dir = 4 + }, /obj/machinery/atmospherics/components/binary/pump{ dir = 1; name = "South Ports to Wastes" }, -/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible{ - dir = 4 - }, /turf/open/floor/iron, /area/station/engineering/atmos) "umr" = ( @@ -61767,11 +61481,6 @@ /obj/effect/spawner/random/maintenance, /turf/open/floor/plating, /area/station/maintenance/port/aft) -"umM" = ( -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/station/maintenance/central/lesser) "unc" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -61787,15 +61496,6 @@ }, /turf/open/floor/iron/smooth, /area/station/security/checkpoint/customs/auxiliary) -"uny" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/duct, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/machinery/firealarm/directional/west, -/turf/open/floor/iron, -/area/station/hallway/primary/central/fore) "unG" = ( /obj/machinery/atmospherics/components/unary/portables_connector/visible{ dir = 4 @@ -61807,58 +61507,48 @@ /obj/structure/reagent_dispensers/fueltank, /turf/open/floor/plating, /area/station/maintenance/fore/greater) -"unM" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/door/airlock/public/glass{ - name = "Departure Lounge" +"unT" = ( +/obj/structure/cable, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/siding/purple{ + dir = 8 }, -/turf/open/floor/iron/textured_half{ - dir = 1 +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 }, -/area/station/hallway/secondary/exit/departure_lounge) -"unO" = ( -/obj/structure/frame, -/turf/open/floor/wood, -/area/station/maintenance/fore/greater) -"unS" = ( -/turf/closed/wall, -/area/station/maintenance/hallway/abandoned_recreation) +/turf/open/floor/iron/dark, +/area/station/command/heads_quarters/rd) "uoh" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/turf_decal/tile/neutral, /obj/machinery/camera/autoname/directional/south, /turf/open/floor/iron, /area/station/hallway/primary/port) -"uoi" = ( -/obj/machinery/flasher/portable, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating, -/area/station/security/tram) "uoB" = ( /turf/closed/wall/r_wall, /area/station/command/heads_quarters/captain/private) -"uoM" = ( +"uoH" = ( /obj/structure/disposalpipe/segment{ - dir = 4 + dir = 5 }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"uoJ" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/airalarm/directional/south, -/obj/effect/turf_decal/tile/neutral, +/obj/structure/sign/warning/radiation/rad_area/directional/east, +/obj/machinery/light/small/directional/east, /turf/open/floor/iron, -/area/station/hallway/primary/port) -"uoW" = ( -/obj/structure/disposalpipe/segment{ - dir = 9 +/area/station/maintenance/hallway/abandoned_command) +"uoR" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 6 }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/airalarm/directional/south, -/obj/effect/turf_decal/tile/neutral, -/turf/open/floor/iron, -/area/station/hallway/primary/port) +/turf/open/floor/grass, +/area/station/service/chapel) "upe" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -61885,20 +61575,6 @@ }, /turf/open/floor/iron/small, /area/station/hallway/primary/port) -"upj" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/item/ammo_casing/spent{ - pixel_x = 5; - pixel_y = 6 - }, -/obj/item/ammo_casing/spent, -/obj/item/ammo_casing/spent{ - pixel_x = 4; - pixel_y = -2 - }, -/obj/effect/turf_decal/tile/neutral, -/turf/open/floor/iron, -/area/station/hallway/primary/port) "upr" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -61907,17 +61583,6 @@ dir = 1 }, /area/station/science/research) -"upv" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 9 - }, -/obj/effect/turf_decal/siding/thinplating_new/light{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/kitchen/small, -/area/station/security/breakroom) "upy" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -61952,6 +61617,12 @@ dir = 5 }, /area/station/science/research) +"upV" = ( +/obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/security/courtroom) "uqc" = ( /obj/structure/cable, /obj/effect/spawner/random/trash, @@ -61972,6 +61643,10 @@ /obj/machinery/light/small/directional/north, /turf/open/floor/iron/white, /area/station/medical/medbay/central) +"uqq" = ( +/obj/structure/table, +/turf/open/floor/iron/dark/small, +/area/station/maintenance/central/lesser) "uqw" = ( /turf/closed/wall/r_wall, /area/station/commons/fitness/recreation) @@ -61988,6 +61663,22 @@ /obj/machinery/light/cold/directional/east, /turf/open/floor/iron, /area/station/engineering/atmos/pumproom) +"uqE" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/cargo/sorting) +"uqF" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/neutral, +/obj/structure/extinguisher_cabinet/directional/east, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/station/hallway/primary/central/fore) "uqG" = ( /obj/machinery/atmospherics/pipe/bridge_pipe/purple/visible{ dir = 4 @@ -62027,12 +61718,31 @@ /obj/structure/alien/weeds, /turf/open/floor/iron, /area/station/maintenance/starboard/greater) +"ura" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/obj/machinery/light/small/directional/east, +/obj/effect/landmark/start/janitor, +/turf/open/floor/iron/grimy, +/area/station/commons) "urd" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/cafeteria, /area/station/science/breakroom) +"urf" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/plaque{ + icon_state = "L2"; + pixel_y = -15 + }, +/obj/effect/turf_decal/trimline/neutral/line, +/obj/effect/turf_decal/trimline/neutral/line{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central/aft) "urg" = ( /obj/machinery/door/airlock/engineering{ name = "Engineering Office" @@ -62053,11 +61763,6 @@ dir = 8 }, /area/station/engineering/main) -"urh" = ( -/obj/structure/closet/firecloset, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron, -/area/station/hallway/primary/port) "urk" = ( /obj/structure/disposalpipe/junction{ dir = 1 @@ -62094,6 +61799,14 @@ /obj/effect/landmark/start/assistant, /turf/open/floor/iron/grimy, /area/station/hallway/secondary/entry) +"urq" = ( +/obj/effect/turf_decal/tile/brown/opposingcorners{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/commons/vacant_room/commissary) "uru" = ( /obj/machinery/door/airlock/maintenance{ name = "Maintenance" @@ -62128,6 +61841,20 @@ /obj/machinery/light/cold/dim/directional/west, /turf/open/floor/iron/grimy, /area/station/engineering/main) +"urF" = ( +/obj/machinery/computer/cargo{ + dir = 1 + }, +/obj/machinery/computer/security/telescreen/vault/directional/south, +/obj/machinery/camera/autoname/directional/south, +/obj/machinery/light/small/directional/south, +/turf/open/floor/wood, +/area/station/command/heads_quarters/qm) +"urK" = ( +/obj/machinery/light/warm/directional/south, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/herringbone, +/area/station/commons/dorms) "urM" = ( /obj/effect/turf_decal/tile/dark_red/fourcorners, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ @@ -62136,14 +61863,14 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/iron, /area/station/security/execution/transfer) -"urO" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/science/lower) "urQ" = ( /obj/effect/spawner/structure/window, /turf/open/floor/plating, /area/station/security/office) +"usd" = ( +/obj/effect/spawner/random/trash, +/turf/open/floor/plating, +/area/station/maintenance/fore/greater) "usg" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -62153,11 +61880,16 @@ /obj/structure/cable, /turf/open/floor/iron/smooth, /area/station/command/heads_quarters/qm) -"usl" = ( -/obj/machinery/status_display/evac/directional/south, -/obj/effect/turf_decal/tile/neutral/opposingcorners, -/turf/open/floor/iron, -/area/station/hallway/secondary/spacebridge) +"usA" = ( +/obj/machinery/door/window/left/directional/south{ + name = "Bio-Generator"; + req_access = list("hydroponics") + }, +/obj/machinery/biogenerator, +/obj/effect/turf_decal/delivery, +/obj/machinery/door/firedoor, +/turf/open/floor/plating, +/area/station/service/hydroponics) "usF" = ( /obj/effect/mapping_helpers/broken_floor, /obj/structure/easel, @@ -62165,9 +61897,23 @@ /obj/item/canvas/twentythree_twentythree, /turf/open/floor/sepia, /area/station/maintenance/aft) +"usG" = ( +/obj/structure/cable, +/obj/machinery/power/terminal{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/engineering/gravity_generator) "usJ" = ( /turf/open/floor/iron/kitchen/small, /area/station/maintenance/aft) +"usP" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/wood, +/area/station/service/abandoned_gambling_den) "utf" = ( /obj/effect/turf_decal/stripes/line{ dir = 5 @@ -62178,12 +61924,6 @@ }, /turf/open/floor/iron, /area/station/engineering/atmos) -"uth" = ( -/obj/effect/turf_decal/plaque{ - icon_state = "L2" - }, -/turf/open/floor/glass, -/area/station/hallway/secondary/spacebridge) "utm" = ( /turf/closed/wall/r_wall, /area/station/science/auxlab/firing_range) @@ -62199,14 +61939,6 @@ /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/plating, /area/station/engineering/atmos/space_catwalk) -"uty" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 4 - }, -/obj/structure/flora/bush/flowers_yw/style_random, -/obj/machinery/light/small/directional/east, -/turf/open/floor/grass, -/area/station/service/chapel) "utD" = ( /obj/machinery/light_switch/directional/west, /obj/effect/turf_decal/stripes/corner{ @@ -62255,36 +61987,14 @@ }, /turf/open/floor/iron/small, /area/station/security/office) -"utW" = ( -/obj/effect/mapping_helpers/broken_floor, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/light/small/directional/east, -/turf/open/floor/iron, -/area/station/maintenance/hallway/abandoned_recreation) +"utQ" = ( +/obj/effect/landmark/navigate_destination/dockescpod, +/turf/open/floor/plating, +/area/station/maintenance/port/lesser) "uub" = ( /obj/structure/cable, /turf/open/floor/iron, /area/station/hallway/secondary/entry) -"uug" = ( -/obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/north, -/obj/effect/decal/cleanable/cobweb, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/turf/open/floor/iron, -/area/station/security/prison/work) -"uuh" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark/smooth_large, -/area/station/service/lawoffice) -"uul" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/iron/dark, -/area/station/service/lawoffice) "uus" = ( /obj/effect/turf_decal/stripes/white/line{ dir = 6 @@ -62295,12 +62005,16 @@ /obj/item/radio/intercom/directional/west, /turf/open/floor/iron/dark/small, /area/station/engineering/supermatter/room) -"uuv" = ( -/obj/effect/turf_decal/plaque{ - icon_state = "L4" +"uuz" = ( +/obj/structure/rack, +/obj/effect/turf_decal/tile/brown/opposingcorners{ + dir = 1 }, -/turf/open/floor/glass, -/area/station/hallway/secondary/spacebridge) +/obj/item/clothing/mask/gas, +/obj/machinery/airalarm/directional/west, +/obj/machinery/camera/directional/west, +/turf/open/floor/iron, +/area/station/commons/vacant_room/commissary) "uuN" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -62327,20 +62041,19 @@ }, /turf/open/floor/iron/white/small, /area/station/medical/storage) -"uvh" = ( +"uvb" = ( +/obj/structure/dresser, +/turf/open/floor/wood, +/area/station/cargo/boutique) +"uvf" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/door/airlock/vault{ - name = "Vault" - }, -/obj/effect/mapping_helpers/airlock/locked, -/obj/effect/mapping_helpers/airlock/access/all/supply/vault, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 1 +/obj/machinery/button/door/directional/south{ + id = "secbreach"; + name = "Emergency Breach Shutters"; + req_access = list("security") }, -/turf/open/floor/catwalk_floor, -/area/station/ai_monitored/command/nuke_storage) +/turf/open/floor/iron/dark, +/area/station/security/office) "uvo" = ( /obj/machinery/atmospherics/components/binary/pump{ dir = 4; @@ -62354,19 +62067,26 @@ }, /turf/open/floor/iron/small, /area/station/engineering/atmos/pumproom) -"uvu" = ( +"uvs" = ( +/obj/effect/turf_decal/siding/thinplating{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/eighties, +/area/station/hallway/primary/central/fore) +"uvx" = ( /obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ - dir = 10 + dir = 9 }, -/obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, -/area/station/maintenance/starboard/aft) -"uvv" = ( +/area/station/maintenance/central/greater) +"uvz" = ( /obj/effect/decal/cleanable/dirt, -/obj/machinery/light/small/dim/directional/east, -/turf/open/floor/wood, -/area/station/maintenance/fore/greater) +/turf/open/floor/carpet/lone, +/area/station/service/abandoned_gambling_den) "uvA" = ( /turf/closed/wall/r_wall, /area/station/command/gateway) @@ -62384,28 +62104,11 @@ /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/iron/smooth, /area/station/engineering/supermatter/room) -"uwl" = ( -/obj/effect/turf_decal/plaque{ - icon_state = "L6" - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/machinery/navbeacon{ - codes_txt = "patrol;next_patrol=2.5-SNexus-StarboardHall"; - location = "2.0-Vault-SNexus" - }, -/turf/open/floor/iron, -/area/station/hallway/secondary/spacebridge) -"uwx" = ( -/obj/effect/turf_decal/plaque{ - icon_state = "L10" - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, +"uvG" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/effect/spawner/random/entertainment/arcade, /turf/open/floor/iron, -/area/station/hallway/secondary/spacebridge) +/area/station/holodeck/rec_center) "uwB" = ( /obj/effect/turf_decal/tile/dark_red/half/contrasted{ dir = 4 @@ -62416,29 +62119,29 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/closed/wall/r_wall, /area/station/command/corporate_dock) -"uwH" = ( -/obj/effect/mapping_helpers/broken_floor, -/obj/structure/window/reinforced/spawner/directional/south, -/obj/machinery/door/window/survival_pod/left/directional/west, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/station/maintenance/fore/greater) "uwI" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/landmark/transport/nav_beacon/tram/nav/immovable_rod, /turf/open/floor/iron, /area/station/hallway/secondary/entry) -"uwU" = ( -/obj/structure/closet/secure_closet/hydroponics, -/obj/effect/turf_decal/bot, -/obj/structure/window/spawner/directional/east, -/obj/effect/turf_decal/tile/green/opposingcorners, -/obj/effect/turf_decal/tile/blue/opposingcorners{ - dir = 8 +"uwX" = ( +/obj/structure/table/wood/fancy/green, +/obj/item/storage/wallet{ + pixel_x = -3; + pixel_y = 10 }, -/turf/open/floor/iron, -/area/station/service/hydroponics) +/obj/item/cigarette/cigar{ + pixel_x = -1; + pixel_y = -2 + }, +/obj/item/lighter{ + pixel_x = 11; + pixel_y = -7 + }, +/obj/machinery/light/directional/south, +/turf/open/floor/iron/grimy, +/area/station/command/heads_quarters/qm) "uxd" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -62448,17 +62151,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/maintenance/port/fore) -"uxi" = ( -/obj/effect/turf_decal/plaque{ - icon_state = "L12" - }, -/turf/open/floor/glass, -/area/station/hallway/secondary/spacebridge) -"uxk" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/light/small/directional/west, -/turf/open/floor/iron, -/area/station/commons) "uxJ" = ( /obj/machinery/smartfridge/chemistry/preloaded, /obj/machinery/door/firedoor, @@ -62479,21 +62171,6 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/engineering/storage/tech) -"uye" = ( -/obj/machinery/door/window/right/directional/south, -/turf/open/floor/grass, -/area/station/service/hydroponics) -"uyg" = ( -/obj/effect/turf_decal/plaque{ - icon_state = "L14" - }, -/turf/open/floor/glass, -/area/station/hallway/secondary/spacebridge) -"uyp" = ( -/obj/structure/closet/emcloset, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron, -/area/station/hallway/primary/starboard) "uyA" = ( /obj/structure/disposalpipe/segment, /obj/effect/decal/cleanable/dirt, @@ -62512,18 +62189,6 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /turf/open/floor/iron/white/small, /area/station/security/warden) -"uyL" = ( -/obj/structure/cable, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/siding/purple{ - dir = 8 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/station/command/heads_quarters/rd) "uyS" = ( /obj/machinery/atmospherics/components/binary/pump{ dir = 1; @@ -62534,29 +62199,20 @@ }, /turf/open/floor/iron, /area/station/engineering/atmos/pumproom) -"uyZ" = ( -/obj/structure/closet{ - name = "Evidence Closet 4" - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/smooth, -/area/station/security/evidence) -"uzd" = ( -/obj/structure/table, -/obj/effect/turf_decal/bot, -/obj/machinery/reagentgrinder{ - pixel_y = 5 +"uyV" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 }, -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/blue{ +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/tile/neutral/opposingcorners{ dir = 1 }, -/obj/effect/turf_decal/tile/green{ - dir = 4 +/obj/effect/turf_decal/siding/thinplating_new{ + dir = 8 }, -/obj/structure/sign/poster/official/random/directional/north, -/turf/open/floor/iron, -/area/station/service/hydroponics) +/turf/open/floor/iron/small, +/area/station/hallway/secondary/service) "uzj" = ( /obj/structure/cable, /obj/effect/spawner/structure/window/reinforced, @@ -62584,6 +62240,15 @@ dir = 1 }, /area/station/science/lower) +"uzY" = ( +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/obj/structure/sign/poster/official/random/directional/north, +/turf/open/floor/iron/white/corner{ + dir = 1 + }, +/area/station/hallway/secondary/dock) "uzZ" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -62595,22 +62260,19 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/aft) -"uAb" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/structure/sign/directions/vault/directional/south{ - dir = 8 - }, -/turf/open/floor/iron/white/corner, -/area/station/hallway/primary/starboard) "uAi" = ( /obj/structure/table/wood, /turf/open/floor/carpet/lone, /area/station/service/chapel/office) +"uAk" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/neutral, +/obj/structure/sign/departments/holy/directional/south, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/port) "uAo" = ( /obj/effect/turf_decal/trimline/neutral/line{ dir = 8 @@ -62620,26 +62282,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central/fore) -"uAw" = ( -/obj/structure/disposalpipe/segment{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/white/side, -/area/station/hallway/primary/starboard) -"uAF" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/obj/effect/spawner/random/engineering/tracking_beacon, -/turf/open/floor/wood/tile, -/area/station/service/bar) -"uAH" = ( -/obj/structure/bed/medical{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue/fourcorners, -/obj/item/bedsheet/medical, -/turf/open/floor/iron/white, -/area/station/maintenance/central/greater) "uAK" = ( /obj/machinery/computer/security, /obj/effect/turf_decal/siding/red{ @@ -62654,18 +62296,6 @@ }, /turf/closed/wall/mineral/titanium/nodiagonal, /area/station/engineering/supermatter) -"uAV" = ( -/obj/structure/cable, -/obj/machinery/duct, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/turf/open/floor/iron/kitchen/small, -/area/station/hallway/secondary/service) -"uAX" = ( -/obj/structure/chair/stool/bar/directional/east, -/turf/open/floor/wood/tile, -/area/station/service/bar) "uAY" = ( /turf/open/floor/plating, /area/station/maintenance/department/bridge) @@ -62690,18 +62320,17 @@ }, /turf/open/floor/iron/dark, /area/station/medical/medbay/aft) -"uBn" = ( -/obj/structure/table/wood, -/obj/effect/turf_decal/tile/brown/full, -/obj/effect/turf_decal/siding/wood{ - dir = 8 +"uBo" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/blue{ + dir = 4 }, -/obj/item/plate, -/obj/item/food/cheesynachos{ - pixel_y = 2 +/obj/machinery/light/floor, +/turf/open/floor/iron/white/corner{ + dir = 1 }, -/turf/open/floor/iron/smooth_large, -/area/station/service/bar) +/area/station/hallway/secondary/entry) "uBu" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -62716,6 +62345,20 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/stairs, /area/station/engineering/storage/tech) +"uBI" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/stripes/red/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/red/line{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/small, +/area/station/hallway/primary/central/fore) "uBM" = ( /obj/machinery/door/poddoor/preopen{ id = "Engineering"; @@ -62725,6 +62368,15 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/engineering/lobby) +"uBN" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/siding/wood{ + dir = 10 + }, +/turf/open/floor/stone, +/area/station/service/bar/backroom) "uBQ" = ( /obj/structure/table/bronze, /obj/machinery/microwave{ @@ -62766,35 +62418,28 @@ /obj/item/mop, /turf/open/floor/plating, /area/station/maintenance/department/medical/central) -"uCh" = ( -/obj/structure/disposalpipe/segment{ - dir = 5 - }, +"uCo" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/neutral/full, -/turf/open/floor/iron/smooth_large, -/area/station/service/bar) -"uCo" = ( -/obj/structure/window/spawner/directional/south, -/obj/structure/flora/bush/jungle/a/style_random, -/obj/structure/sign/poster/official/random/directional/north, -/turf/open/misc/sandy_dirt, -/area/station/commons) +/obj/structure/cable, +/obj/structure/extinguisher_cabinet/directional/north, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/wood/parquet, +/area/station/service/library) "uCp" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/firealarm/directional/south, /turf/open/floor/iron/white/side, /area/station/hallway/primary/starboard) -"uCv" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/red/opposingcorners{ - dir = 1 +"uCB" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 6 }, -/obj/effect/spawner/xmastree, -/turf/open/floor/iron/cafeteria, -/area/station/service/cafeteria) +/obj/structure/flora/bush/sparsegrass, +/turf/open/floor/grass, +/area/station/service/chapel) "uCE" = ( /obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ dir = 5 @@ -62811,16 +62456,6 @@ /obj/structure/sign/poster/official/random/directional/north, /turf/open/floor/plating, /area/station/engineering/atmos/storage/gas) -"uCJ" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 8 - }, -/obj/structure/chair/pew/right{ - dir = 4 - }, -/obj/effect/landmark/start/hangover, -/turf/open/floor/wood, -/area/station/service/theater) "uCL" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -62857,13 +62492,23 @@ /obj/structure/cable, /turf/open/floor/iron/dark, /area/station/security/lockers) -"uDw" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/stripes/red/line{ +"uDz" = ( +/obj/machinery/door/airlock/public/glass{ + name = "Lockers" + }, +/turf/open/floor/iron/textured_half{ dir = 8 }, -/turf/open/floor/iron/smooth_large, -/area/station/science/auxlab/firing_range) +/area/station/commons/fitness/locker_room) +"uDE" = ( +/obj/structure/window/spawner/directional/north, +/obj/structure/flora/bush/flowers_yw/style_random, +/obj/machinery/door/airlock{ + id_tag = "Toilet1"; + name = "Unit 1" + }, +/turf/open/misc/sandy_dirt, +/area/station/commons/fitness/locker_room) "uDF" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -62895,10 +62540,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/port/aft) -"uEg" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/carpet/lone, -/area/station/service/theater) "uEh" = ( /obj/structure/table/glass, /obj/effect/turf_decal/siding/wood, @@ -62986,6 +62627,16 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/starboard) +"uFt" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "uFw" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/door/firedoor, @@ -63018,22 +62669,6 @@ dir = 1 }, /area/station/hallway/primary/starboard) -"uFG" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/neutral/line{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/neutral/line, -/turf/open/floor/iron, -/area/station/hallway/primary/central/fore) -"uFJ" = ( -/obj/structure/disposalpipe/segment, -/obj/effect/mapping_helpers/broken_floor, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/hallway/secondary/recreation) "uFQ" = ( /obj/structure/closet/crate/coffin, /obj/structure/window/spawner/directional/south, @@ -63058,18 +62693,6 @@ /obj/effect/mapping_helpers/requests_console/ore_update, /turf/open/floor/iron/white, /area/station/medical/virology) -"uGk" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating, -/area/station/maintenance/hallway/abandoned_command) -"uGp" = ( -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/structure/sign/warning/no_smoking/circle/directional/north, -/turf/open/floor/iron, -/area/station/hallway/primary/port) "uGy" = ( /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/iron/grimy, @@ -63105,6 +62728,14 @@ }, /turf/open/floor/iron, /area/station/engineering/hallway) +"uGD" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/structure/bookcase/random/adult, +/obj/structure/sign/poster/official/random/directional/north, +/turf/open/floor/iron/grimy, +/area/station/service/library) "uGH" = ( /obj/machinery/rnd/production/circuit_imprinter, /obj/effect/turf_decal/bot, @@ -63197,13 +62828,6 @@ "uHd" = ( /turf/closed/wall, /area/station/science/robotics/lab) -"uHe" = ( -/obj/structure/table_frame, -/obj/item/shard, -/obj/effect/decal/cleanable/glass, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/turf/open/floor/iron/dark, -/area/station/service/lawoffice) "uHf" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -63243,6 +62867,14 @@ /obj/effect/mapping_helpers/airlock/access/all/engineering/general, /turf/open/floor/plating, /area/station/maintenance/department/prison) +"uHH" = ( +/obj/structure/railing{ + dir = 4 + }, +/obj/machinery/light/warm/directional/west, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/commons/dorms) "uHI" = ( /obj/machinery/door/morgue{ name = "Confession Booth" @@ -63257,16 +62889,6 @@ /obj/effect/spawner/random/trash, /turf/open/floor/plating, /area/station/maintenance/starboard/lesser) -"uIe" = ( -/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible{ - dir = 9 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/white/small, -/area/station/science/ordnance/storage) "uIj" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable, @@ -63281,22 +62903,6 @@ /obj/structure/flora/bush/fullgrass/style_random, /turf/open/floor/grass, /area/station/medical/treatment_center) -"uIo" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating, -/area/station/maintenance/department/science/xenobiology) -"uIt" = ( -/obj/structure/disposalpipe/trunk{ - dir = 1 - }, -/obj/machinery/disposal/bin, -/obj/effect/turf_decal/bot, -/turf/open/floor/iron, -/area/station/hallway/primary/port) "uIv" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -63308,17 +62914,35 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central/fore) +"uIy" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/hallway/secondary/recreation) +"uIA" = ( +/obj/effect/turf_decal/siding/thinplating_new/light{ + dir = 9 + }, +/turf/open/floor/iron/white/small, +/area/station/service/hydroponics) +"uIP" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/red/opposingcorners, +/obj/effect/turf_decal/tile/blue/opposingcorners{ + dir = 8 + }, +/obj/machinery/firealarm/directional/north, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/turf/open/floor/iron/smooth, +/area/station/service/greenroom) "uIT" = ( /obj/effect/turf_decal/sand/plating, /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/maintenance/hallway/abandoned_command) -"uIW" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment, -/obj/machinery/duct, -/turf/open/floor/plating, -/area/station/maintenance/port/greater) "uIX" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/machinery/modular_computer/preset/civilian{ @@ -63331,6 +62955,19 @@ /obj/machinery/atmospherics/pipe/smart/manifold/green/visible, /turf/open/floor/iron/smooth, /area/station/engineering/supermatter/room) +"uJi" = ( +/obj/effect/turf_decal/tile/green/opposingcorners, +/obj/effect/turf_decal/tile/blue/opposingcorners{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/service/hydroponics) +"uJq" = ( +/obj/effect/spawner/random/structure/crate_abandoned, +/turf/open/floor/plating, +/area/station/maintenance/fore/greater) "uJC" = ( /obj/effect/spawner/structure/window, /turf/open/floor/plating, @@ -63342,12 +62979,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, /area/station/hallway/primary/port) -"uJG" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/wood, -/area/station/maintenance/fore/greater) "uJH" = ( /obj/effect/turf_decal/stripes/white/line{ dir = 9 @@ -63355,13 +62986,6 @@ /obj/machinery/shieldgen, /turf/open/floor/iron/dark/small, /area/station/engineering/storage_shared) -"uJR" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/turf/open/floor/iron/showroomfloor, -/area/station/commons/toilet/auxiliary) "uJU" = ( /obj/structure/table/reinforced, /obj/item/stack/cable_coil{ @@ -63406,6 +63030,13 @@ /obj/structure/extinguisher_cabinet/directional/south, /turf/open/floor/iron, /area/station/hallway/primary/port) +"uKD" = ( +/obj/structure/table, +/obj/machinery/light/warm/directional/north, +/obj/effect/landmark/start/hangover, +/obj/item/soap, +/turf/open/floor/iron, +/area/station/commons/dorms) "uKH" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -63415,11 +63046,6 @@ dir = 1 }, /area/station/science/research) -"uKM" = ( -/obj/effect/mapping_helpers/broken_floor, -/obj/machinery/duct, -/turf/open/floor/iron, -/area/station/maintenance/department/medical/central) "uKN" = ( /obj/machinery/camera/autoname/directional/east, /turf/open/floor/iron, @@ -63445,40 +63071,20 @@ /obj/item/radio/intercom/directional/west, /turf/open/floor/wood, /area/station/command/heads_quarters/qm) -"uLf" = ( -/obj/effect/mapping_helpers/broken_floor, -/obj/effect/landmark/atmospheric_sanity/ignore_area, -/turf/open/floor/carpet/orange, -/area/station/service/abandoned_gambling_den) -"uLh" = ( -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/firealarm/directional/east, -/turf/open/floor/iron, -/area/station/hallway/secondary/recreation) "uLj" = ( /turf/closed/wall, /area/station/commons/toilet/auxiliary) -"uLn" = ( -/obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/east, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/station/hallway/secondary/spacebridge) -"uLu" = ( -/obj/machinery/status_display/ai/directional/south, -/obj/effect/turf_decal/tile/neutral/opposingcorners, -/turf/open/floor/iron, -/area/station/hallway/secondary/spacebridge) -"uLB" = ( +"uLD" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, +/obj/structure/cable, +/obj/machinery/duct, /obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/delivery, -/turf/open/floor/iron/half, -/area/station/hallway/primary/central/fore) +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/plating, +/area/station/maintenance/central/lesser) "uLO" = ( /obj/item/stack/sheet/cardboard{ amount = 14 @@ -63492,6 +63098,15 @@ /obj/machinery/light/small/directional/north, /turf/open/floor/plating, /area/station/security/prison/work) +"uLT" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/iron/white/side{ + dir = 1 + }, +/area/station/science/xenobiology) "uLW" = ( /obj/structure/lattice, /obj/machinery/atmospherics/pipe/heat_exchanging/simple{ @@ -63499,12 +63114,6 @@ }, /turf/open/space/basic, /area/space/nearstation) -"uMa" = ( -/obj/machinery/computer/slot_machine{ - pixel_y = 2 - }, -/turf/open/floor/carpet/orange, -/area/station/service/abandoned_gambling_den) "uMg" = ( /obj/effect/spawner/structure/window, /turf/open/floor/plating, @@ -63529,20 +63138,6 @@ /obj/effect/turf_decal/tile/dark_red/opposingcorners, /turf/open/floor/iron, /area/station/security/tram) -"uMC" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/plating, -/area/station/hallway/secondary/spacebridge) -"uMD" = ( -/obj/structure/chair/sofa/bench/right{ - dir = 4 - }, -/obj/structure/window/spawner/directional/west, -/obj/structure/broken_flooring/plating/directional/south, -/turf/open/floor/iron, -/area/station/hallway/secondary/recreation) "uME" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/table/greyscale, @@ -63557,15 +63152,6 @@ "uMH" = ( /turf/open/floor/iron/white/side, /area/station/science/research) -"uMI" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment, -/obj/machinery/door/airlock/maintenance{ - name = "Security Maintenance" - }, -/obj/effect/mapping_helpers/airlock/access/all/security/general, -/turf/open/floor/plating, -/area/station/maintenance/port/lesser) "uMN" = ( /obj/effect/turf_decal/tile/neutral/fourcorners, /obj/structure/hedge, @@ -63597,14 +63183,6 @@ }, /turf/open/space/basic, /area/space/nearstation) -"uMW" = ( -/obj/effect/spawner/random/vending/snackvend, -/turf/open/floor/glass, -/area/station/hallway/secondary/spacebridge) -"uMX" = ( -/obj/item/kirbyplants/random, -/turf/open/floor/glass, -/area/station/hallway/secondary/spacebridge) "uNa" = ( /obj/structure/closet/emcloset, /turf/open/floor/plating, @@ -63628,20 +63206,19 @@ /obj/machinery/shower/directional/east, /turf/open/floor/iron/dark/small, /area/station/engineering/break_room) -"uNn" = ( -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron, -/area/station/hallway/secondary/spacebridge) +"uNz" = ( +/obj/structure/cable, +/obj/effect/turf_decal/siding/dark_red{ + dir = 1 + }, +/obj/machinery/airalarm/directional/north, +/turf/open/floor/stone, +/area/station/command/heads_quarters/hos) "uNO" = ( /obj/machinery/power/smes/engineering, /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/disposal/incinerator) -"uNQ" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/broken_flooring/singular/directional/south, -/turf/open/floor/plating, -/area/station/maintenance/department/medical/central) "uNR" = ( /obj/structure/cable, /obj/structure/chair{ @@ -63650,10 +63227,6 @@ }, /turf/open/floor/iron/cafeteria, /area/station/science/breakroom) -"uNW" = ( -/obj/machinery/barsign, -/turf/closed/wall, -/area/station/service/bar) "uNX" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -63666,14 +63239,6 @@ }, /turf/open/floor/iron/white/corner, /area/station/hallway/primary/aft) -"uOh" = ( -/obj/structure/chair{ - dir = 1; - pixel_y = -2 - }, -/obj/effect/landmark/start/hangover, -/turf/open/floor/glass, -/area/station/hallway/secondary/spacebridge) "uOk" = ( /obj/effect/turf_decal/siding/wood, /obj/structure/window/spawner/directional/south, @@ -63684,6 +63249,19 @@ "uOw" = ( /turf/open/floor/iron, /area/station/maintenance/department/medical/central) +"uOx" = ( +/obj/effect/turf_decal/siding/wideplating_new/terracotta{ + dir = 5 + }, +/turf/open/floor/wood/tile, +/area/station/maintenance/central/lesser) +"uOz" = ( +/obj/structure/flora/rock/pile/jungle/style_4, +/obj/effect/turf_decal/weather/dirt{ + dir = 1 + }, +/turf/open/floor/grass, +/area/station/service/chapel) "uOH" = ( /obj/item/kirbyplants/random, /obj/machinery/light_switch/directional/west, @@ -63701,14 +63279,6 @@ /obj/machinery/airalarm/directional/north, /turf/open/floor/wood/tile, /area/station/command/meeting_room) -"uPd" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/station/maintenance/central/greater) "uPf" = ( /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, @@ -63718,18 +63288,6 @@ /obj/effect/turf_decal/bot, /turf/open/floor/iron/dark, /area/station/security/prison/workout) -"uPs" = ( -/obj/machinery/airalarm/directional/west, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron, -/area/station/hallway/secondary/spacebridge) -"uPt" = ( -/obj/machinery/airalarm/directional/west, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/maintenance/hallway/abandoned_command) "uPw" = ( /obj/effect/turf_decal/stripes/white/line{ dir = 4 @@ -63751,15 +63309,21 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/hallway/primary/starboard) +"uPM" = ( +/obj/structure/urinal/directional/east, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/white/small, +/area/station/commons/toilet/restrooms) "uPN" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/closed/wall, /area/station/engineering/supermatter/room) -"uPO" = ( -/obj/effect/turf_decal/tile/neutral/opposingcorners, -/turf/open/floor/iron, -/area/station/hallway/secondary/spacebridge) +"uPW" = ( +/obj/structure/flora/bush/flowers_pp/style_2, +/obj/structure/flora/bush/large/style_3, +/turf/open/floor/grass, +/area/station/service/chapel) "uPX" = ( /obj/structure/railing{ dir = 8 @@ -63802,16 +63366,25 @@ }, /turf/open/floor/iron/dark/small, /area/station/security/brig) -"uQC" = ( -/obj/item/kirbyplants/random, -/obj/machinery/camera/autoname/directional/west, -/turf/open/floor/iron/white, -/area/station/hallway/primary/starboard) -"uQR" = ( -/obj/machinery/exodrone_launcher, -/obj/machinery/firealarm/directional/east, -/turf/open/floor/iron/smooth, -/area/station/cargo/drone_bay) +"uQG" = ( +/obj/machinery/airalarm/directional/east, +/turf/open/floor/iron, +/area/station/commons/fitness/locker_room) +"uQK" = ( +/obj/effect/turf_decal/trimline/neutral/line, +/obj/effect/turf_decal/trimline/neutral/line{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/port) +"uQY" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/science/ordnance) "uRe" = ( /obj/structure/reagent_dispensers/water_cooler, /obj/effect/turf_decal/tile/red{ @@ -63837,11 +63410,12 @@ dir = 1 }, /area/station/hallway/secondary/exit/departure_lounge) -"uRm" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/light/small/directional/east, -/turf/open/floor/iron/smooth, -/area/station/maintenance/solars/port/aft) +"uRv" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/iron/kitchen/small, +/area/station/service/kitchen) "uRF" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -63881,14 +63455,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark/small, /area/station/security/execution/education) -"uRX" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 9 - }, -/obj/structure/flora/tree/jungle/small/style_random, -/obj/structure/flora/bush/flowers_pp/style_random, -/turf/open/floor/grass, -/area/station/service/chapel) "uRY" = ( /obj/effect/spawner/random/structure/table_or_rack, /obj/effect/decal/cleanable/dirt/dust, @@ -63897,6 +63463,19 @@ "uSa" = ( /turf/open/floor/iron, /area/station/maintenance/department/engine/atmos) +"uSb" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/iron/grimy, +/area/station/service/library) +"uSh" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/turf/open/floor/wood/parquet, +/area/station/service/library) "uSi" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -63907,6 +63486,14 @@ "uSj" = ( /turf/closed/wall/r_wall, /area/station/medical/medbay/central) +"uSo" = ( +/obj/structure/railing/corner{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/commons/dorms) "uSt" = ( /obj/effect/turf_decal/siding/wood, /obj/effect/decal/cleanable/dirt, @@ -63924,14 +63511,6 @@ /obj/effect/landmark/navigate_destination/tcomms, /turf/open/floor/iron, /area/station/science/lower) -"uSC" = ( -/obj/effect/landmark/start/assistant, -/obj/effect/landmark/start/assistant, -/obj/structure/chair/sofa/bamboo/left{ - dir = 1 - }, -/turf/open/floor/wood/large, -/area/station/service/chapel) "uSG" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -63943,12 +63522,6 @@ /obj/machinery/light/small/directional/east, /turf/open/floor/wood, /area/station/cargo/boutique) -"uSM" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/station/maintenance/port/greater) "uSN" = ( /obj/effect/spawner/random/vending/snackvend, /obj/effect/turf_decal/tile/neutral/half/contrasted{ @@ -63965,20 +63538,32 @@ }, /turf/open/floor/iron/textured_half, /area/station/commons/storage/art) -"uTh" = ( +"uTb" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/obj/structure/table/glass, +/turf/open/floor/iron/dark, +/area/station/service/lawoffice) +"uTz" = ( /obj/structure/cable, -/obj/effect/turf_decal/tile/green/opposingcorners, -/obj/effect/turf_decal/tile/blue/opposingcorners{ - dir = 8 +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/siding/wideplating/dark, +/obj/effect/turf_decal/tile/dark_red/half/contrasted{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/obj/effect/landmark/start/botanist, /turf/open/floor/iron, -/area/station/service/hydroponics) +/area/station/security/brig/entrance) "uTA" = ( /turf/closed/wall, /area/station/ai_monitored/turret_protected/ai) +"uTE" = ( +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/turf/open/floor/wood/parquet, +/area/station/service/library) "uTK" = ( /obj/structure/table/reinforced, /obj/machinery/door/firedoor, @@ -64044,82 +63629,16 @@ }, /turf/open/floor/iron/small, /area/station/engineering/atmos) -"uUq" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/newscaster/directional/south, -/obj/structure/broken_flooring/corner/directional/south, -/turf/open/floor/plating, -/area/station/commons/dorms) "uUA" = ( /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/plating, /area/station/maintenance/department/engine) -"uUE" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/power/apc/auto_name/directional/south, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/central/fore) "uUG" = ( /obj/effect/turf_decal/stripes/line{ dir = 5 }, /turf/open/floor/iron/small, /area/station/engineering/supermatter/room) -"uUI" = ( -/obj/structure/table, -/obj/effect/turf_decal/bot, -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/green{ - dir = 4 - }, -/obj/item/reagent_containers/cup/watering_can{ - pixel_x = 7; - pixel_y = 13 - }, -/obj/item/reagent_containers/cup/bottle/mutagen{ - pixel_x = -5; - pixel_y = 8 - }, -/obj/item/reagent_containers/syringe{ - pixel_x = -3; - pixel_y = -1 - }, -/obj/item/reagent_containers/spray/plantbgone{ - pixel_x = 6; - pixel_y = 1 - }, -/obj/machinery/newscaster/directional/east, -/turf/open/floor/iron, -/area/station/service/hydroponics) -"uVb" = ( -/obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/west, -/turf/open/floor/wood, -/area/station/cargo/boutique) -"uVg" = ( -/obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/north, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/station/maintenance/central/lesser) -"uVn" = ( -/obj/item/kirbyplants/random, -/obj/item/storage/briefcase{ - pixel_x = -3; - pixel_y = 2 - }, -/obj/machinery/light/small/directional/east, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/cobweb/cobweb2, -/turf/open/floor/iron/dark/small, -/area/station/security/detectives_office) "uVo" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment, @@ -64137,15 +63656,6 @@ /obj/machinery/airalarm/directional/east, /turf/open/floor/iron/dark, /area/station/hallway/secondary/construction) -"uVE" = ( -/obj/structure/table, -/obj/item/storage/bag/tray{ - pixel_x = 1; - pixel_y = -1 - }, -/obj/item/food/cake/apple, -/turf/open/floor/iron/cafeteria, -/area/station/service/kitchen) "uVO" = ( /obj/structure/disposalpipe/segment, /obj/effect/mapping_helpers/broken_floor, @@ -64170,11 +63680,6 @@ }, /turf/closed/wall, /area/station/hallway/primary/starboard) -"uWg" = ( -/obj/effect/mapping_helpers/broken_floor, -/obj/structure/sign/poster/official/random/directional/west, -/turf/open/floor/iron, -/area/station/commons/fitness/recreation/entertainment) "uWl" = ( /obj/structure/disposalpipe/segment{ dir = 10 @@ -64193,6 +63698,14 @@ "uWo" = ( /turf/closed/wall, /area/station/medical/paramedic) +"uWr" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/tile/purple/opposingcorners, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/iron/cafeteria, +/area/station/science/circuits) "uWv" = ( /obj/structure/window/reinforced/spawner/directional/east, /obj/structure/flora/bush/flowers_pp/style_random, @@ -64209,16 +63722,6 @@ dir = 1 }, /area/station/security/prison/safe) -"uWB" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/green{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/service/hydroponics) "uWG" = ( /obj/structure/closet/firecloset, /obj/machinery/status_display/ai/directional/south, @@ -64238,9 +63741,6 @@ /obj/effect/mapping_helpers/airlock/access/any/medical/maintenance, /turf/open/floor/plating, /area/station/maintenance/department/medical/central) -"uXb" = ( -/turf/open/floor/iron/cafeteria, -/area/station/service/kitchen) "uXs" = ( /obj/structure/window/spawner/directional/east, /obj/structure/window/spawner/directional/west, @@ -64249,17 +63749,6 @@ /obj/structure/flora/bush/fullgrass/style_random, /turf/open/floor/grass, /area/station/medical/treatment_center) -"uXw" = ( -/obj/structure/table, -/obj/effect/landmark/event_spawn, -/turf/open/floor/iron/cafeteria, -/area/station/service/kitchen) -"uXB" = ( -/obj/structure/chair{ - dir = 1 - }, -/turf/open/floor/iron/white, -/area/station/medical/medbay/lobby) "uXC" = ( /turf/closed/wall, /area/station/science/lower) @@ -64270,10 +63759,6 @@ }, /turf/open/floor/plating, /area/station/engineering/atmos) -"uXN" = ( -/obj/structure/altar_of_gods, -/turf/open/floor/wood/large, -/area/station/service/chapel) "uXS" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/holopad, @@ -64309,10 +63794,6 @@ /obj/effect/spawner/random/vending/colavend, /turf/open/floor/iron/white, /area/station/hallway/primary/starboard) -"uYp" = ( -/obj/structure/steam_vent, -/turf/open/floor/plating, -/area/station/maintenance/central/lesser) "uYD" = ( /obj/structure/table, /obj/effect/turf_decal/tile/green/fourcorners, @@ -64338,38 +63819,25 @@ /obj/structure/broken_flooring/singular/directional/south, /turf/open/floor/iron, /area/station/hallway/secondary/dock) -"uZb" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/turf_decal/siding/wideplating/dark/corner{ - dir = 8 - }, -/obj/effect/turf_decal/tile/dark_red/half/contrasted{ - dir = 1 +"uYY" = ( +/obj/structure/closet/wardrobe/grey, +/obj/effect/turf_decal/siding/wideplating/dark{ + dir = 6 }, -/turf/open/floor/iron, -/area/station/security/brig/entrance) +/obj/structure/sign/poster/official/random/directional/south, +/turf/open/floor/iron/small, +/area/station/commons/fitness/locker_room) "uZc" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /turf/open/floor/iron, /area/station/security/courtroom) -"uZw" = ( -/obj/structure/disposalpipe/trunk{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red/opposingcorners, -/obj/effect/turf_decal/tile/blue/opposingcorners{ +"uZk" = ( +/obj/effect/turf_decal/tile/dark_red/opposingcorners, +/obj/structure/chair{ dir = 8 }, -/obj/machinery/disposal/bin, -/obj/machinery/light_switch/directional/south, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/camera/directional/south{ - c_tag = "Atmospherics - South" - }, -/turf/open/floor/iron/smooth, -/area/station/service/greenroom) +/turf/open/floor/iron, +/area/station/security/brig/entrance) "uZA" = ( /obj/structure/chair{ dir = 1; @@ -64389,22 +63857,39 @@ dir = 1 }, /area/station/science/lower) -"uZY" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/catwalk_floor/iron_dark, -/area/station/service/library) +"uZK" = ( +/obj/structure/reagent_dispensers/plumbed{ + dir = 1 + }, +/turf/open/floor/plating, +/area/station/maintenance/central/lesser) "vaf" = ( /obj/item/kirbyplants/random/fullysynthetic, /obj/machinery/status_display/ai/directional/south, /turf/open/floor/iron/white, /area/station/hallway/primary/starboard) +"vam" = ( +/obj/structure/flora/bush/large/style_random{ + pixel_x = -20; + pixel_y = -11 + }, +/obj/structure/flora/rock/pile/jungle/style_5, +/obj/structure/window/spawner/directional/east, +/obj/structure/window/spawner/directional/west, +/turf/open/misc/sandy_dirt, +/area/station/commons/fitness/recreation/entertainment) "vav" = ( /obj/structure/lattice, /obj/structure/railing, /turf/open/space/basic, /area/space/nearstation) +"vaw" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/item/radio/intercom/directional/west, +/turf/open/floor/iron, +/area/station/commons/fitness/recreation/entertainment) "vaF" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -64420,18 +63905,6 @@ }, /turf/open/floor/iron, /area/station/medical/chemistry) -"vbf" = ( -/obj/structure/table, -/obj/effect/spawner/random/techstorage/ai_all, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/airalarm/directional/west, -/turf/open/floor/iron, -/area/station/engineering/storage/tech) -"vbm" = ( -/obj/structure/cable, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating, -/area/station/maintenance/aft) "vbp" = ( /obj/structure/reagent_dispensers/fueltank, /turf/open/floor/plating, @@ -64473,6 +63946,9 @@ }, /turf/open/floor/iron/white, /area/station/medical/treatment_center) +"vbP" = ( +/turf/open/floor/wood/parquet, +/area/station/medical/psychology) "vbQ" = ( /obj/machinery/telecomms/server/presets/engineering, /turf/open/floor/circuit, @@ -64482,20 +63958,24 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/secondary/entry) +"vcd" = ( +/obj/structure/chair{ + dir = 8 + }, +/obj/effect/landmark/start/assistant, +/obj/machinery/camera/autoname/directional/east, +/turf/open/floor/iron, +/area/station/hallway/secondary/entry) +"vcl" = ( +/obj/structure/chair{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/security/interrogation) "vcm" = ( /obj/item/pickaxe, /turf/open/misc/asteroid, /area/station/maintenance/department/electrical) -"vct" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/mapping_helpers/broken_floor, -/obj/effect/turf_decal/tile/neutral/half/contrasted, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/turf/open/floor/iron/dark/side, -/area/station/science/xenobiology) "vcB" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -64511,34 +63991,12 @@ }, /turf/open/floor/iron/white/smooth_large, /area/station/medical/treatment_center) -"vcC" = ( -/obj/structure/cable, -/obj/machinery/door/airlock{ - name = "Maintenance" - }, -/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, -/obj/effect/mapping_helpers/airlock/unres{ - dir = 8 - }, -/turf/open/floor/plating, -/area/station/maintenance/fore/greater) -"vcE" = ( -/turf/closed/wall, -/area/station/service/library/abandoned) "vcN" = ( /obj/structure/chair{ dir = 4 }, /turf/open/floor/iron/dark/herringbone, /area/station/security/courtroom) -"vcP" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron, -/area/station/hallway/primary/starboard) "vcR" = ( /turf/open/floor/iron/stairs/medium{ dir = 1 @@ -64618,11 +64076,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/port/fore) -"vdm" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/broken_flooring/pile/directional/east, -/turf/open/floor/plating, -/area/station/maintenance/hallway/abandoned_recreation) "vdt" = ( /obj/item/kirbyplants/random, /obj/effect/turf_decal/stripes/line{ @@ -64662,6 +64115,13 @@ }, /turf/open/floor/iron/white, /area/station/medical/medbay/central) +"vdL" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/spawner/random/structure/steam_vent, +/turf/open/floor/plating, +/area/station/maintenance/port/greater) "vdS" = ( /obj/structure/closet/firecloset, /obj/item/clothing/glasses/meson, @@ -64709,10 +64169,11 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/starboard/lesser) -"vev" = ( -/obj/structure/bookcase/random, -/turf/open/floor/plating/rust, -/area/station/service/library/abandoned) +"vex" = ( +/obj/effect/turf_decal/stripes/end, +/obj/item/kirbyplants/random/fullysynthetic, +/turf/open/floor/plating, +/area/station/maintenance/central/lesser) "vey" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable, @@ -64734,11 +64195,6 @@ /obj/machinery/status_display/ai/directional/north, /turf/open/floor/engine, /area/station/ai_monitored/turret_protected/ai) -"veG" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/closet/firecloset, -/turf/open/floor/iron/showroomfloor, -/area/station/commons/toilet/auxiliary) "veK" = ( /turf/closed/wall, /area/station/science/lab) @@ -64776,6 +64232,16 @@ /obj/structure/cable, /turf/open/floor/iron/dark, /area/station/science/lab) +"vfo" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/tile/neutral/opposingcorners{ + dir = 1 + }, +/obj/effect/turf_decal/siding/thinplating_new{ + dir = 10 + }, +/turf/open/floor/iron/small, +/area/station/hallway/secondary/service) "vfD" = ( /obj/effect/turf_decal/siding/thinplating_new/light, /obj/structure/reagent_dispensers/fueltank, @@ -64799,6 +64265,17 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/aft) +"vfM" = ( +/obj/machinery/door/airlock/multi_tile/public{ + dir = 8 + }, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/textured_half{ + dir = 8 + }, +/area/station/service/bar) "vfN" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -64823,18 +64300,18 @@ /obj/item/toy/crayon/purple, /turf/open/floor/iron/white, /area/station/science/research) -"vgc" = ( -/obj/structure/chair/sofa/right/maroon{ +"vgh" = ( +/obj/structure/cable, +/obj/effect/turf_decal/tile/red{ + dir = 4 + }, +/obj/structure/disposalpipe/junction/flip{ + dir = 2 + }, +/turf/open/floor/iron/white/corner{ dir = 1 }, -/obj/machinery/airalarm/directional/east, -/turf/open/floor/iron/showroomfloor, -/area/station/service/cafeteria) -"vgf" = ( -/obj/effect/mapping_helpers/broken_floor, -/obj/structure/chair/stool/directional/west, -/turf/open/floor/carpet/orange, -/area/station/service/abandoned_gambling_den) +/area/station/hallway/secondary/exit/departure_lounge) "vgp" = ( /obj/machinery/door/airlock/maintenance{ name = "Atmospherics Maintenance" @@ -64871,19 +64348,6 @@ /obj/effect/mapping_helpers/airlock/access/any/science/maintenance, /turf/open/floor/plating, /area/station/maintenance/department/science/xenobiology) -"vgJ" = ( -/obj/structure/table, -/obj/effect/turf_decal/bot, -/obj/machinery/light/small/directional/north, -/obj/item/pen{ - pixel_x = 11 - }, -/obj/item/paper_bin{ - pixel_x = -7; - pixel_y = 6 - }, -/turf/open/floor/iron/kitchen/small, -/area/station/hallway/secondary/service) "vgN" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/tile/yellow/opposingcorners, @@ -64893,10 +64357,31 @@ /obj/structure/barricade/wooden, /turf/open/floor/iron, /area/station/hallway/secondary/construction) +"vgY" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/turf/open/floor/plating, +/area/station/maintenance/department/science/xenobiology) "vhe" = ( /obj/structure/filingcabinet/chestdrawer, /turf/open/floor/iron/smooth, /area/station/cargo/office) +"vhr" = ( +/obj/structure/sink/directional/west, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/obj/machinery/camera/autoname/directional/north, +/obj/machinery/light/cold/directional/north, +/turf/open/floor/iron/dark/small, +/area/station/service/chapel/storage) +"vht" = ( +/obj/effect/turf_decal/tile/dark_red/opposingcorners, +/obj/machinery/holopad, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/security/armory) "vhC" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -64906,13 +64391,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/maintenance/starboard/central) -"vhH" = ( -/obj/machinery/computer/slot_machine{ - pixel_y = 2 - }, -/obj/machinery/light/small/broken/directional/east, -/turf/open/floor/carpet/orange, -/area/station/service/abandoned_gambling_den) "vhI" = ( /obj/effect/turf_decal/tile/dark_red{ dir = 4 @@ -64937,6 +64415,11 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/wood, /area/station/service/chapel/office) +"vip" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/hallway/primary/central/aft) "vir" = ( /turf/open/floor/iron/white/side{ dir = 8 @@ -65027,16 +64510,6 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) -"vjf" = ( -/obj/machinery/portable_atmospherics/scrubber, -/turf/open/floor/plating, -/area/station/maintenance/central/lesser) -"vjm" = ( -/obj/effect/mapping_helpers/broken_floor, -/obj/machinery/vending/wardrobe/bar_wardrobe, -/obj/machinery/light/small/directional/west, -/turf/open/floor/stone, -/area/station/service/bar/backroom) "vjp" = ( /obj/structure/cable, /obj/effect/turf_decal/sand/plating, @@ -65044,21 +64517,13 @@ /obj/structure/alien/weeds, /turf/open/floor/plating, /area/station/maintenance/starboard/greater) -"vjx" = ( -/obj/structure/table, -/obj/machinery/cell_charger{ - pixel_y = 18 - }, -/obj/item/stock_parts/cell/high{ - pixel_y = 18 - }, -/obj/item/clothing/suit/hazardvest, -/obj/effect/turf_decal/siding/thinplating_new/terracotta{ - dir = 4 +"vjI" = ( +/obj/machinery/door/airlock{ + name = "Bathrooms" }, -/obj/machinery/firealarm/directional/west, -/turf/open/floor/iron, -/area/station/command/teleporter) +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron/textured_half, +/area/station/commons/toilet/restrooms) "vjK" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ @@ -65102,6 +64567,13 @@ /obj/effect/mapping_helpers/airlock/access/all/engineering/general, /turf/open/floor/catwalk_floor/iron_smooth, /area/station/maintenance/starboard/fore) +"vks" = ( +/obj/structure/cable, +/obj/structure/chair{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/hallway/secondary/entry) "vkt" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -65109,10 +64581,13 @@ }, /turf/open/floor/iron, /area/station/science/research) -"vkz" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/wood/large, -/area/station/service/chapel) +"vkC" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/firealarm/directional/east, +/obj/effect/turf_decal/tile/neutral, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/station/hallway/primary/central/fore) "vkD" = ( /obj/structure/table, /obj/item/stack/ore/gold{ @@ -65124,12 +64599,10 @@ }, /turf/open/floor/plating, /area/station/maintenance/department/engine) -"vkG" = ( -/obj/effect/turf_decal/siding/wood/corner{ - dir = 1 - }, -/turf/open/floor/grass, -/area/station/service/chapel) +"vkI" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/wood/tile, +/area/station/service/bar) "vkJ" = ( /obj/item/book/manual/wiki/security_space_law{ pixel_x = 9; @@ -65207,13 +64680,6 @@ }, /turf/open/floor/light/colour_cycle/dancefloor_b, /area/station/maintenance/starboard/central) -"vly" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/hallway/secondary/entry) "vlB" = ( /obj/machinery/atmospherics/pipe/smart/simple/general/visible{ dir = 4 @@ -65273,27 +64739,36 @@ /obj/machinery/airalarm/directional/west, /turf/open/floor/iron/dark, /area/station/engineering/storage/tcomms) +"vmp" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/station/science/genetics) +"vmr" = ( +/obj/structure/cable, +/obj/machinery/door/airlock{ + name = "Maintenance" + }, +/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/plating, +/area/station/maintenance/central/lesser) "vmt" = ( /obj/structure/chair/stool/bamboo{ dir = 4 }, /turf/open/floor/iron/terracotta/diagonal, /area/station/service/chapel/office) -"vmz" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment, -/obj/effect/decal/cleanable/dirt, -/obj/effect/spawner/random/trash, -/turf/open/floor/plating, -/area/station/maintenance/port/greater) -"vmA" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 +"vmB" = ( +/obj/item/radio/intercom/directional/west, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 }, -/obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, -/area/station/commons/fitness/recreation/entertainment) +/area/station/maintenance/hallway/abandoned_command) "vmH" = ( /obj/machinery/door/morgue{ name = "Confession Booth (Chaplain)"; @@ -65313,14 +64788,9 @@ /obj/effect/turf_decal/sand/plating, /turf/open/floor/plating/airless, /area/space/nearstation) -"vmR" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/siding/green{ - dir = 4 - }, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/iron/dark/small, -/area/station/medical/chemistry) +"vmN" = ( +/turf/open/floor/iron/small, +/area/station/maintenance/starboard/central) "vmS" = ( /obj/effect/turf_decal/tile/dark_red/opposingcorners, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, @@ -65333,12 +64803,6 @@ /obj/machinery/light/small/directional/north, /turf/open/floor/wood, /area/station/service/chapel/office) -"vnb" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/plating, -/area/station/hallway/secondary/spacebridge) "vne" = ( /turf/open/floor/wood, /area/station/service/chapel/office) @@ -65376,13 +64840,6 @@ /obj/machinery/airalarm/directional/north, /turf/open/floor/iron/dark, /area/station/security/execution/transfer) -"vnn" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/wood, -/area/station/service/chapel/office) "vnp" = ( /obj/machinery/atmospherics/pipe/smart/simple/purple/visible{ dir = 9 @@ -65435,6 +64892,28 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/small, /area/station/engineering/atmos) +"vnC" = ( +/obj/structure/closet{ + name = "Evidence Closet 2" + }, +/obj/structure/secure_safe/directional/north{ + name = "evidence safe" + }, +/turf/open/floor/iron/smooth, +/area/station/security/evidence) +"vnD" = ( +/obj/effect/turf_decal/tile/dark_red/half/contrasted{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wideplating/dark/corner{ + dir = 8 + }, +/obj/structure/disposalpipe/sorting/mail{ + dir = 1 + }, +/obj/effect/mapping_helpers/mail_sorting/security/general, +/turf/open/floor/iron, +/area/station/security) "vnF" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -65456,15 +64935,6 @@ /obj/machinery/medical_kiosk, /turf/open/floor/iron/white, /area/station/medical/medbay/lobby) -"voa" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/door/morgue{ - name = "Secret Corridor"; - req_access = list("library") - }, -/turf/open/floor/catwalk_floor/iron_dark, -/area/station/service/library) "voe" = ( /obj/structure/chair/sofa/bench/right{ dir = 1 @@ -65493,13 +64963,6 @@ /obj/effect/turf_decal/bot_white, /turf/open/floor/iron/smooth, /area/station/commons/storage/tools) -"voF" = ( -/obj/structure/table, -/obj/machinery/chem_dispenser/drinks, -/obj/machinery/light/cold/directional/north, -/obj/structure/sign/poster/official/random/directional/north, -/turf/open/floor/iron/cafeteria, -/area/station/service/kitchen) "voJ" = ( /obj/structure/disposalpipe/segment, /obj/effect/turf_decal/tile/dark_red/half/contrasted{ @@ -65512,10 +64975,10 @@ /obj/machinery/light/small/directional/west, /turf/open/floor/iron, /area/station/security) -"voL" = ( -/obj/item/radio/intercom/directional/north, -/turf/open/floor/iron/cafeteria, -/area/station/service/kitchen) +"voN" = ( +/obj/structure/sign/nanotrasen, +/turf/closed/wall/r_wall, +/area/station/command/teleporter) "voO" = ( /obj/structure/lattice/catwalk, /obj/structure/railing{ @@ -65530,6 +64993,15 @@ /obj/effect/mapping_helpers/airlock/access/all/supply/general, /turf/open/floor/catwalk_floor/iron_dark, /area/station/cargo/office) +"vpg" = ( +/obj/machinery/disposal/bin, +/obj/effect/turf_decal/bot, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/obj/machinery/power/apc/auto_name/directional/south, +/turf/open/floor/iron, +/area/station/hallway/primary/port) "vpk" = ( /obj/structure/cable, /turf/open/floor/iron/smooth, @@ -65539,6 +65011,16 @@ /obj/effect/turf_decal/stripes/end, /turf/open/floor/plating, /area/station/science/ordnance/testlab) +"vpt" = ( +/obj/item/radio/intercom/prison/directional/north, +/turf/open/floor/iron, +/area/station/security/prison/work) +"vpF" = ( +/obj/structure/table, +/obj/item/dyespray, +/obj/machinery/light/small/directional/south, +/turf/open/floor/iron/showroomfloor, +/area/station/service/barber) "vpI" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/turf_decal/tile/neutral{ @@ -65553,10 +65035,11 @@ /obj/machinery/smartfridge/petri/preloaded, /turf/open/floor/iron/white, /area/station/science/cytology) -"vpN" = ( -/obj/machinery/door/firedoor, -/turf/open/floor/catwalk_floor/iron, -/area/station/service/bar) +"vpP" = ( +/obj/effect/spawner/random/structure/closet_private, +/obj/machinery/light/small/directional/south, +/turf/open/floor/carpet, +/area/station/commons/dorms) "vpS" = ( /obj/machinery/atmospherics/pipe/smart/simple/supply/visible/layer2, /obj/machinery/atmospherics/pipe/smart/manifold/supply/visible{ @@ -65582,19 +65065,6 @@ }, /turf/open/floor/iron/dark/side, /area/station/hallway/primary/central/fore) -"vpU" = ( -/obj/structure/table/wood, -/obj/effect/turf_decal/tile/brown/full, -/obj/effect/turf_decal/siding/wood{ - dir = 8 - }, -/obj/item/food/lizard_fries, -/turf/open/floor/iron/smooth_large, -/area/station/service/bar) -"vpY" = ( -/obj/effect/turf_decal/tile/neutral/full, -/turf/open/floor/iron/smooth_large, -/area/station/service/bar) "vpZ" = ( /obj/effect/turf_decal/siding/yellow{ dir = 8 @@ -65619,22 +65089,17 @@ }, /turf/open/floor/plating, /area/station/maintenance/starboard/greater) -"vql" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/broken_flooring/pile/directional/east, -/turf/open/floor/plating, -/area/station/maintenance/department/medical/central) -"vqp" = ( -/turf/open/floor/carpet/lone, -/area/station/service/theater) "vqw" = ( /obj/effect/decal/cleanable/glass/titanium, /obj/item/stack/rods/two, /turf/open/floor/plating, /area/station/maintenance/department/engine/atmos) +"vqF" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 6 + }, +/turf/open/floor/stone, +/area/station/service/chapel) "vqH" = ( /obj/structure/railing{ dir = 8 @@ -65642,6 +65107,13 @@ /obj/structure/lattice, /turf/open/space/basic, /area/space/nearstation) +"vqJ" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/power/apc/worn_out/directional/east, +/turf/open/floor/iron, +/area/station/maintenance/hallway/abandoned_command) "vqU" = ( /obj/machinery/rnd/server/master, /turf/open/floor/circuit, @@ -65656,6 +65128,17 @@ }, /turf/open/floor/catwalk_floor/iron_dark, /area/station/tcommsat/server) +"vqY" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/neutral/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/neutral/line, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/hallway/primary/central/fore) "vrf" = ( /obj/structure/hedge, /obj/machinery/light/small/directional/north, @@ -65678,22 +65161,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central/fore) -"vrt" = ( -/obj/machinery/computer/security/telescreen{ - desc = "Used for watching Prison Wing holding areas."; - name = "Prison Monitor"; - network = list("prison"); - pixel_y = 30 - }, -/obj/machinery/computer/records/security, -/turf/open/floor/wood, -/area/station/security/detectives_office) -"vrv" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/decal/cleanable/dirt, -/obj/structure/extinguisher_cabinet/directional/east, -/turf/open/floor/carpet/lone, -/area/station/service/theater) "vrz" = ( /obj/effect/turf_decal/siding/wood{ dir = 4 @@ -65706,19 +65173,10 @@ }, /turf/open/floor/wood, /area/station/security/detectives_office) -"vrH" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/neutral/line{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/neutral/line{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/central/fore) +"vrB" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/herringbone, +/area/station/commons/dorms) "vrK" = ( /obj/structure/lattice/catwalk, /obj/structure/cable, @@ -65737,6 +65195,14 @@ dir = 1 }, /area/station/security/courtroom) +"vrS" = ( +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 1 + }, +/obj/effect/turf_decal/tile/dark_red/half/contrasted, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/station/hallway/primary/port) "vrT" = ( /obj/structure/lattice, /obj/machinery/atmospherics/pipe/heat_exchanging/simple{ @@ -65761,25 +65227,12 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark/herringbone, /area/station/security/courtroom) -"vrZ" = ( -/obj/effect/mapping_helpers/broken_floor, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/machinery/vending/coffee, -/turf/open/floor/iron/white/corner{ +"vsi" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 1 }, -/area/station/hallway/secondary/dock) -"vsl" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/duct, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/machinery/status_display/ai/directional/west, -/turf/open/floor/iron, -/area/station/hallway/primary/central/fore) +/turf/open/floor/wood, +/area/station/commons/fitness/recreation) "vso" = ( /obj/effect/landmark/start/scientist, /obj/structure/chair{ @@ -65789,14 +65242,6 @@ /obj/structure/extinguisher_cabinet/directional/west, /turf/open/floor/iron/white, /area/station/science/research) -"vsq" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/item/radio/intercom/directional/north, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/stone, -/area/station/service/theater) "vsx" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -65811,15 +65256,6 @@ /obj/machinery/camera/autoname/directional/north, /turf/open/floor/iron/smooth, /area/station/maintenance/solars/starboard/aft) -"vsU" = ( -/obj/machinery/door/airlock{ - id_tag = "study_a"; - name = "Study A" - }, -/turf/open/floor/iron/textured_half{ - dir = 1 - }, -/area/station/commons) "vsW" = ( /obj/structure/window/reinforced/spawner/directional/west, /obj/effect/turf_decal/box/red/corners{ @@ -65830,33 +65266,10 @@ }, /turf/open/floor/engine, /area/station/science/xenobiology) -"vtc" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/security/glass{ - id_tag = "outerbrig"; - name = "Brig" - }, -/obj/effect/mapping_helpers/airlock/access/all/security/entrance, -/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ - cycle_id = "sci-entrance" - }, -/turf/open/floor/iron/textured_half, -/area/station/security/brig/entrance) -"vtm" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/duct, -/turf/open/floor/iron/showroomfloor, -/area/station/commons/toilet/restrooms) -"vtv" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/station/hallway/primary/port) +"vtr" = ( +/obj/machinery/light/floor, +/turf/open/floor/wood/parquet, +/area/station/service/library) "vtw" = ( /obj/effect/turf_decal/stripes/line, /obj/structure/cable, @@ -65876,13 +65289,6 @@ /obj/item/toy/crayon/purple, /turf/open/floor/iron/cafeteria, /area/station/science/breakroom) -"vtB" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/engineering/storage/tech) "vtC" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -65903,6 +65309,16 @@ /obj/machinery/duct, /turf/open/floor/plating, /area/station/maintenance/fore/greater) +"vtX" = ( +/obj/effect/landmark/start/assistant, +/obj/effect/turf_decal/tile/neutral, +/turf/open/floor/iron, +/area/station/hallway/primary/central/aft) +"vuj" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/item/fuel_pellet, +/turf/open/floor/iron/smooth, +/area/station/cargo/drone_bay) "vuk" = ( /obj/structure/lattice/catwalk, /obj/structure/railing{ @@ -65919,9 +65335,6 @@ }, /turf/open/floor/iron/smooth, /area/station/maintenance/solars/starboard/aft) -"vuo" = ( -/turf/closed/wall/r_wall, -/area/station/commons/vacant_room/commissary) "vuq" = ( /obj/effect/turf_decal/tile/yellow{ dir = 1 @@ -65943,11 +65356,6 @@ /obj/machinery/deepfryer, /turf/open/floor/iron/kitchen/small, /area/station/security/prison/mess) -"vuA" = ( -/obj/structure/cable, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating, -/area/station/maintenance/department/science/xenobiology) "vuB" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden, @@ -65964,30 +65372,18 @@ /obj/effect/turf_decal/delivery, /turf/open/floor/iron, /area/station/cargo/miningfoundry) -"vuK" = ( -/obj/structure/cable, -/obj/structure/table/reinforced, -/obj/item/stack/cable_coil{ - pixel_x = -3; - pixel_y = 3 - }, -/obj/item/stock_parts/cell/high, -/obj/item/electronics/airlock{ - pixel_y = 13 - }, -/turf/open/floor/iron, -/area/station/engineering/storage/tech) -"vuL" = ( +"vuJ" = ( /obj/structure/disposalpipe/segment{ - dir = 5 + dir = 4 }, -/obj/effect/turf_decal/trimline/neutral/line{ - dir = 1 +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 4 }, -/obj/effect/turf_decal/trimline/neutral/line, -/obj/structure/cable, /turf/open/floor/iron, -/area/station/hallway/primary/starboard) +/area/station/cargo/sorting) "vuR" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -66019,6 +65415,21 @@ /obj/item/clothing/shoes/cowboy/lizard/masterwork, /turf/open/floor/light/colour_cycle/dancefloor_b, /area/station/maintenance/starboard/central) +"vvd" = ( +/obj/structure/bed{ + dir = 4 + }, +/obj/effect/spawner/random/bedsheet{ + dir = 4 + }, +/obj/machinery/button/door/directional/south{ + id = "Cabin4"; + name = "Cabin Bolt Control"; + normaldoorcontrol = 1; + specialfunctions = 4 + }, +/turf/open/floor/carpet, +/area/station/commons/dorms) "vve" = ( /obj/machinery/door/airlock/public/glass{ name = "Aft Corridor" @@ -66038,11 +65449,6 @@ }, /turf/open/space/basic, /area/station/engineering/atmos/space_catwalk) -"vvl" = ( -/obj/effect/mapping_helpers/broken_floor, -/obj/machinery/light/small/broken/directional/west, -/turf/open/floor/wood, -/area/station/service/abandoned_gambling_den) "vvs" = ( /obj/effect/spawner/random/maintenance, /turf/open/floor/plating, @@ -66055,6 +65461,16 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/construction) +"vvC" = ( +/obj/machinery/door/airlock/engineering{ + name = "Engine Airlock" + }, +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/access/any/engineering/construction, +/obj/structure/cable, +/obj/effect/landmark/navigate_destination, +/turf/open/floor/catwalk_floor, +/area/station/engineering/break_room) "vvK" = ( /obj/structure/table, /obj/effect/turf_decal/tile/green/fourcorners, @@ -66069,6 +65485,18 @@ "vvP" = ( /turf/open/floor/iron/white/small, /area/station/maintenance/port/aft) +"vvW" = ( +/obj/structure/hoop{ + dir = 8; + pixel_x = 10; + pixel_y = 11 + }, +/obj/effect/turf_decal/trimline/white/end{ + dir = 8 + }, +/obj/machinery/light/small/directional/east, +/turf/open/floor/wood, +/area/station/commons/fitness/recreation) "vwc" = ( /obj/structure/chair/comfy/brown{ buildstackamount = 0; @@ -66085,11 +65513,6 @@ /obj/effect/spawner/random/maintenance, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) -"vwg" = ( -/obj/structure/bookcase/random/nonfiction, -/obj/machinery/light/small/directional/north, -/turf/open/floor/wood/tile, -/area/station/service/bar) "vwh" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/door/airlock/public/glass{ @@ -66109,14 +65532,6 @@ }, /turf/open/floor/iron/dark/small, /area/station/tcommsat/server) -"vwD" = ( -/obj/structure/table/wood, -/obj/item/clothing/head/soft/grey{ - pixel_x = -2; - pixel_y = 3 - }, -/turf/open/floor/carpet/green, -/area/station/maintenance/central/lesser) "vwE" = ( /obj/effect/turf_decal/siding/wood{ dir = 5 @@ -66159,13 +65574,23 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/small, /area/station/security/office) -"vxa" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ +"vwZ" = ( +/obj/structure/chair/sofa/bench{ + dir = 4 + }, +/obj/effect/turf_decal/tile/yellow{ dir = 1 }, +/obj/effect/turf_decal/tile/red{ + dir = 8 + }, +/obj/machinery/newscaster/directional/west, +/obj/effect/landmark/start/hangover, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 4 + }, /turf/open/floor/iron, -/area/station/commons/storage/art) +/area/station/hallway/primary/fore) "vxm" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -66213,6 +65638,14 @@ /obj/machinery/atmospherics/pipe/smart/simple/dark/hidden, /turf/open/floor/wood/tile, /area/station/tcommsat/server) +"vym" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/structure/chair/office/light{ + dir = 1 + }, +/obj/effect/landmark/start/geneticist, +/turf/open/floor/iron/dark, +/area/station/science/genetics) "vyF" = ( /obj/effect/turf_decal/tile/neutral/fourcorners, /obj/structure/chair/sofa/bench/left{ @@ -66231,6 +65664,13 @@ /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/iron/dark, /area/station/engineering/atmospherics_engine) +"vyP" = ( +/obj/machinery/vending/wardrobe/hydro_wardrobe, +/obj/effect/turf_decal/siding/thinplating_new/light{ + dir = 5 + }, +/turf/open/floor/iron/white/small, +/area/station/service/hydroponics) "vyR" = ( /turf/open/floor/glass, /area/station/command/corporate_dock) @@ -66255,6 +65695,12 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/starboard/central) +"vzh" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/iron/showroomfloor, +/area/station/commons/toilet/auxiliary) "vzt" = ( /obj/structure/hedge, /obj/machinery/light/cold/directional/east, @@ -66280,30 +65726,25 @@ /obj/structure/cable, /turf/open/floor/iron/cafeteria, /area/station/security/prison/mess) -"vzI" = ( -/obj/machinery/skill_station, -/obj/machinery/light/small/directional/south, -/turf/open/floor/wood/parquet, -/area/station/service/library) +"vzE" = ( +/obj/structure/window/spawner/directional/east, +/obj/structure/window/spawner/directional/west, +/obj/structure/flora/bush/sparsegrass, +/obj/structure/flora/bush/flowers_br, +/obj/structure/flora/bush/flowers_pp, +/obj/structure/flora/bush/large/style_random{ + pixel_y = -1 + }, +/turf/open/floor/grass, +/area/station/service/hydroponics) "vzK" = ( /obj/machinery/light/small/directional/west, /obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored/helium_output{ - dir = 4 + dir = 4; + chamber_id = "helium" }, /turf/open/floor/engine/helium, /area/station/ai_monitored/turret_protected/ai) -"vzM" = ( -/obj/structure/cable, -/obj/effect/turf_decal/tile/brown/full, -/obj/structure/sink/kitchen/directional/south, -/turf/open/floor/iron/smooth_large, -/area/station/service/bar) -"vzP" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 8 - }, -/turf/open/floor/grass, -/area/station/service/chapel) "vzV" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -66312,14 +65753,6 @@ }, /turf/open/floor/iron, /area/station/security/tram) -"vzW" = ( -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/siding/wood, -/obj/structure/chair/sofa/bamboo/left{ - dir = 1 - }, -/turf/open/floor/wood/large, -/area/station/service/chapel) "vzX" = ( /obj/machinery/door/airlock/command{ name = "Centcom Dock" @@ -66354,23 +65787,14 @@ }, /turf/open/floor/iron/dark, /area/station/engineering/atmos) -"vAo" = ( -/obj/item/radio/intercom/directional/north{ - broadcasting = 1; - frequency = 1447; - name = "Private Channel"; - pixel_x = -26 - }, -/obj/machinery/computer/security/telescreen{ - desc = "Used for watching the ai_upload."; - dir = 4; - name = "AI Upload Monitor"; - network = list("aiupload"); - pixel_x = -29 +"vAl" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/table/wood, +/obj/structure/disposalpipe/segment{ + dir = 4 }, -/obj/item/radio/intercom/directional/north, -/turf/open/floor/iron/dark, -/area/station/ai_monitored/turret_protected/ai_upload_foyer) +/turf/open/floor/wood, +/area/station/cargo/boutique) "vAq" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -66392,14 +65816,6 @@ }, /turf/open/floor/iron/small, /area/station/security/tram) -"vAA" = ( -/obj/effect/landmark/start/hangover, -/obj/effect/turf_decal/siding/wood, -/obj/structure/chair/sofa/bamboo/left{ - dir = 1 - }, -/turf/open/floor/wood/large, -/area/station/service/chapel) "vAC" = ( /obj/structure/flora/bush/large/style_random{ pixel_y = -3 @@ -66422,14 +65838,6 @@ /obj/effect/mapping_helpers/airlock/unres, /turf/open/floor/plating, /area/station/maintenance/department/science/xenobiology) -"vAR" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/siding/wood{ - dir = 8 - }, -/turf/open/floor/grass, -/area/station/service/chapel) "vAT" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -66442,13 +65850,6 @@ /obj/machinery/door/firedoor, /turf/open/floor/iron/white/textured_half, /area/station/science/lobby) -"vAU" = ( -/obj/effect/mapping_helpers/broken_floor, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/station/maintenance/port/aft) "vAX" = ( /obj/machinery/door/airlock/public/glass{ name = "Applied Sciences" @@ -66459,16 +65860,6 @@ /obj/machinery/door/firedoor, /turf/open/floor/iron/white/textured_half, /area/station/science/lobby) -"vBe" = ( -/obj/effect/mapping_helpers/broken_floor, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/maintenance/hallway/abandoned_recreation) -"vBm" = ( -/obj/machinery/holopad, -/obj/effect/spawner/random/engineering/tracking_beacon, -/turf/open/floor/iron/white/small, -/area/station/service/hydroponics) "vBG" = ( /obj/structure/table, /obj/machinery/microwave{ @@ -66483,6 +65874,13 @@ }, /turf/open/floor/iron/dark, /area/station/security/office) +"vCc" = ( +/obj/machinery/door/airlock/public/glass{ + name = "Lockers" + }, +/obj/machinery/door/firedoor, +/turf/open/floor/iron/textured_half, +/area/station/commons/fitness/locker_room) "vCe" = ( /obj/structure/cable, /turf/open/floor/iron, @@ -66501,6 +65899,18 @@ /obj/structure/lattice, /turf/open/space/basic, /area/space/nearstation) +"vCq" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/stone, +/area/station/service/abandoned_gambling_den) +"vCs" = ( +/obj/structure/cable, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/science/xenobiology) "vCO" = ( /obj/structure/disposalpipe/segment, /turf/open/floor/iron/white, @@ -66514,6 +65924,20 @@ /obj/machinery/camera/autoname/directional/north, /turf/open/floor/iron/smooth_large, /area/station/science/ordnance/storage) +"vCZ" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/neutral, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/hallway/primary/central/fore) +"vDe" = ( +/obj/effect/turf_decal/tile/dark_red/opposingcorners, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/security/brig/entrance) "vDg" = ( /obj/structure/chair{ dir = 1 @@ -66540,12 +65964,6 @@ /obj/effect/turf_decal/stripes/line, /turf/open/floor/iron/smooth, /area/station/maintenance/disposal/incinerator) -"vDK" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/maintenance/hallway/abandoned_recreation) "vDQ" = ( /obj/effect/turf_decal/tile/dark_red/opposingcorners, /turf/open/floor/iron, @@ -66568,17 +65986,15 @@ /obj/machinery/duct, /turf/open/floor/iron/kitchen/small, /area/station/security/prison/mess) -"vEe" = ( -/obj/effect/mapping_helpers/broken_floor, -/obj/machinery/light/small/directional/north, -/obj/machinery/suit_storage_unit/cmo, -/turf/open/floor/wood/parquet, -/area/station/command/heads_quarters/cmo) -"vEq" = ( -/obj/structure/chair/stool/bar/directional/east, -/obj/effect/landmark/start/assistant, -/turf/open/floor/wood/tile, -/area/station/service/bar) +"vEn" = ( +/obj/effect/turf_decal/tile/blue, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/iron/white/corner{ + dir = 8 + }, +/area/station/hallway/secondary/dock) "vEz" = ( /obj/effect/turf_decal/siding/wood{ dir = 1 @@ -66600,14 +66016,6 @@ /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/plating, /area/station/maintenance/department/engine) -"vEI" = ( -/obj/structure/disposalpipe/segment{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/cafeteria, -/area/station/service/kitchen) "vEP" = ( /turf/closed/wall/r_wall, /area/station/security/brig) @@ -66622,6 +66030,16 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/iron/smooth, /area/station/engineering/engine_smes) +"vET" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central/fore) "vEW" = ( /turf/closed/wall/r_wall, /area/station/security/prison/shower) @@ -66680,15 +66098,6 @@ dir = 6 }, /area/station/hallway/secondary/construction) -"vFv" = ( -/obj/effect/turf_decal/tile/red/opposingcorners{ - dir = 1 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/turf/open/floor/iron/cafeteria, -/area/station/service/cafeteria) "vFy" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment, @@ -66716,27 +66125,12 @@ dir = 1 }, /area/station/hallway/secondary/exit/departure_lounge) -"vFE" = ( -/obj/structure/table, -/obj/item/trash/energybar, -/turf/open/floor/iron/showroomfloor, -/area/station/service/cafeteria) "vFG" = ( /obj/machinery/computer/rdservercontrol{ dir = 8 }, /turf/open/floor/iron/white/small, /area/station/science/server) -"vFQ" = ( -/obj/machinery/navbeacon{ - codes_txt = "delivery;dir=8"; - location = "QM #2" - }, -/obj/effect/turf_decal/delivery, -/obj/machinery/camera/autoname/directional/south, -/obj/machinery/light/small/directional/south, -/turf/open/floor/iron, -/area/station/cargo/storage) "vFR" = ( /obj/structure/bed, /obj/effect/turf_decal/siding/red{ @@ -66805,22 +66199,6 @@ /obj/structure/extinguisher_cabinet/directional/south, /turf/open/floor/iron/dark/small, /area/station/medical/morgue) -"vHj" = ( -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/station/security/office) -"vHk" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/door/window/left/directional/east{ - name = "Mass Driver Door"; - req_access = list("ordnance") - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark/side{ - dir = 4 - }, -/area/station/science/ordnance/testlab) "vHu" = ( /obj/effect/turf_decal/tile/dark_red/opposingcorners, /obj/structure/closet/secure_closet/security/sec, @@ -66843,14 +66221,6 @@ }, /turf/open/floor/iron/dark/herringbone, /area/station/security/courtroom) -"vHL" = ( -/obj/effect/spawner/random/engineering/tracking_beacon, -/obj/effect/turf_decal/plaque{ - icon_state = "L7" - }, -/obj/effect/landmark/observer_start, -/turf/open/floor/glass, -/area/station/hallway/secondary/spacebridge) "vHT" = ( /obj/effect/turf_decal/box/red/corners{ dir = 8 @@ -66873,20 +66243,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white/corner, /area/station/science/lower) -"vIg" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/wood, -/area/station/service/chapel/office) -"vIh" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/turf/open/floor/wood, -/area/station/service/chapel/office) "vIp" = ( /obj/structure/table, /obj/item/folder/yellow{ @@ -66912,6 +66268,15 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/maintenance/starboard/aft) +"vIC" = ( +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/obj/structure/cable, +/obj/machinery/duct, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/maintenance/central/lesser) "vIF" = ( /turf/closed/wall, /area/station/engineering/atmos/pumproom) @@ -66926,12 +66291,6 @@ }, /turf/open/floor/iron/small, /area/station/hallway/primary/central/fore) -"vIN" = ( -/obj/effect/decal/cleanable/dirt, -/obj/item/chair/stool, -/obj/structure/sign/poster/contraband/random/directional/north, -/turf/open/floor/iron, -/area/station/commons/fitness/recreation/entertainment) "vIX" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -66975,6 +66334,18 @@ /obj/machinery/light/small/directional/north, /turf/open/floor/plating, /area/station/service/chapel/office) +"vJB" = ( +/obj/item/radio/intercom/directional/east, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/hallway/secondary/entry) +"vJG" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/brown/opposingcorners, +/turf/open/floor/iron, +/area/station/cargo/miningoffice) "vJH" = ( /turf/open/floor/plating, /area/station/maintenance/port/aft) @@ -67067,16 +66438,6 @@ /obj/structure/cable, /turf/open/floor/iron/dark, /area/station/engineering/atmos) -"vKy" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/turf/open/floor/wood, -/area/station/security/detectives_office) "vKG" = ( /obj/effect/turf_decal/tile/dark_red/opposingcorners, /turf/open/floor/iron, @@ -67131,16 +66492,6 @@ /obj/machinery/light/cold/directional/north, /turf/open/floor/iron/white, /area/station/medical/medbay/central) -"vLf" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/dark_red/opposingcorners, -/obj/machinery/flasher/directional/west{ - id = "brigentry" - }, -/turf/open/floor/iron, -/area/station/security/brig/entrance) "vLi" = ( /obj/effect/turf_decal/tile/purple/opposingcorners, /obj/effect/turf_decal/siding/green{ @@ -67178,25 +66529,6 @@ /obj/item/gavelhammer, /turf/open/floor/plating, /area/station/maintenance/central/lesser) -"vLO" = ( -/obj/structure/table, -/obj/item/reagent_containers/condiment/saltshaker{ - desc = "Salt. From space oceans, presumably. A staple of modern medicine."; - pixel_x = 8; - pixel_y = 7 - }, -/obj/item/reagent_containers/condiment/peppermill{ - desc = "Often used to flavor food or make people sneeze. Fashionably moved to the left side of the table."; - pixel_x = 8; - pixel_y = 2 - }, -/obj/machinery/newscaster/directional/east, -/obj/effect/spawner/random/food_or_drink/condiment{ - pixel_x = -8; - pixel_y = 3 - }, -/turf/open/floor/iron/showroomfloor, -/area/station/service/cafeteria) "vLP" = ( /turf/closed/wall/rust, /area/station/command/heads_quarters/qm) @@ -67268,24 +66600,19 @@ dir = 1 }, /area/station/hallway/primary/aft) -"vML" = ( -/obj/effect/mapping_helpers/broken_floor, -/obj/machinery/portable_atmospherics/canister/air, +"vMP" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, -/area/station/maintenance/central/greater) +/area/station/maintenance/port/greater) "vMT" = ( /obj/machinery/hydroponics/soil, /obj/item/food/grown/mushroom/libertycap, /turf/open/misc/asteroid, /area/station/maintenance/starboard/greater) -"vMV" = ( -/obj/structure/disposalpipe/segment{ - dir = 6 - }, -/obj/effect/mapping_helpers/broken_floor, -/obj/effect/spawner/random/trash, -/turf/open/floor/plating, -/area/station/maintenance/central/greater) "vMX" = ( /obj/effect/turf_decal/stripes/white/line{ dir = 5 @@ -67294,13 +66621,19 @@ /obj/structure/tram, /turf/open/floor/tram, /area/station/security/tram) -"vNo" = ( +"vNn" = ( +/obj/machinery/light/small/directional/east, /obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 4 +/turf/open/floor/iron, +/area/station/hallway/secondary/recreation) +"vNq" = ( +/obj/machinery/washing_machine, +/obj/effect/turf_decal/tile/blue/opposingcorners{ + dir = 1 }, -/turf/open/floor/iron/white/small, -/area/station/science/ordnance/storage) +/obj/machinery/status_display/evac/directional/south, +/turf/open/floor/iron/white/corner, +/area/station/commons/dorms) "vNt" = ( /obj/effect/spawner/random/trash/graffiti{ pixel_x = -32; @@ -67324,20 +66657,20 @@ /obj/machinery/camera/autoname/directional/south, /turf/open/floor/iron/smooth, /area/station/cargo/warehouse) -"vNV" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/showroomfloor, -/area/station/commons/toilet/restrooms) -"vOh" = ( -/obj/machinery/door/firedoor, -/obj/effect/turf_decal/stripes/red/line{ - dir = 1 +"vOf" = ( +/obj/structure/cable, +/obj/structure/chair{ + dir = 1; + pixel_y = -2 }, -/obj/effect/turf_decal/stripes/red/line, -/turf/open/floor/iron/small, -/area/station/hallway/secondary/spacebridge) +/obj/machinery/firealarm/directional/south, +/turf/open/floor/iron, +/area/station/science/lower) +"vOm" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron/smooth, +/area/station/commons/storage/tools) "vOr" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -67358,15 +66691,6 @@ dir = 8 }, /area/station/engineering/main) -"vOP" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/obj/structure/curtain/cloth/fancy/mechanical{ - id = "detpriv"; - name = "Curtains" - }, -/turf/open/floor/iron/dark/small, -/area/station/security/detectives_office) "vPa" = ( /obj/effect/turf_decal/siding{ dir = 5 @@ -67393,31 +66717,34 @@ /obj/structure/sign/departments/medbay/alt/directional/west, /turf/open/floor/iron, /area/station/hallway/primary/aft) -"vPx" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/white/corner{ - dir = 1 +"vPt" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 }, -/area/station/science/xenobiology) -"vPC" = ( -/obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/closed/wall/r_wall, -/area/station/hallway/secondary/spacebridge) -"vPJ" = ( -/obj/structure/broken_flooring/singular/directional/east, -/obj/structure/alien/weeds, -/turf/open/floor/plating, -/area/station/maintenance/starboard/greater) -"vPK" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/decal/cleanable/dirt, /obj/structure/cable, +/turf/open/floor/iron/grimy, +/area/station/commons) +"vPw" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/mapping_helpers/broken_floor, +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/stripes/red/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/red/line{ + dir = 4 + }, +/turf/open/floor/iron/small, +/area/station/hallway/secondary/recreation) +"vPJ" = ( +/obj/structure/broken_flooring/singular/directional/east, +/obj/structure/alien/weeds, /turf/open/floor/plating, -/area/station/maintenance/port/fore) +/area/station/maintenance/starboard/greater) "vPP" = ( /turf/closed/wall, /area/station/command/corporate_suite) @@ -67430,9 +66757,33 @@ /obj/effect/spawner/random/trash, /turf/open/floor/plating, /area/station/maintenance/starboard/central) +"vPW" = ( +/obj/effect/landmark/event_spawn, +/obj/structure/table, +/obj/machinery/reagentgrinder{ + pixel_y = 9; + pixel_x = 4 + }, +/obj/item/reagent_containers/condiment/peppermill{ + pixel_x = 3 + }, +/obj/item/reagent_containers/condiment/saltshaker{ + pixel_x = -3 + }, +/obj/item/reagent_containers/condiment/enzyme{ + pixel_x = -7; + pixel_y = 6 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron/kitchen/small, +/area/station/service/kitchen) "vPY" = ( /obj/effect/turf_decal/stripes/line, -/obj/machinery/atmospherics/pipe/smart/manifold/yellow/visible, +/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible{ + dir = 4 + }, /turf/open/floor/iron, /area/station/engineering/atmos) "vQk" = ( @@ -67461,24 +66812,27 @@ /obj/structure/flora/bush/large/style_random, /turf/open/misc/sandy_dirt, /area/station/medical/medbay/lobby) -"vQA" = ( -/obj/effect/turf_decal/tile/green/diagonal_centre, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/obj/machinery/camera/autoname/directional/north, -/obj/structure/sign/warning/no_smoking/circle/directional/north, -/obj/machinery/light/small/directional/north, -/turf/open/floor/iron/diagonal, -/area/station/hallway/primary/central/aft) +"vQx" = ( +/obj/effect/turf_decal/siding/thinplating{ + dir = 6 + }, +/obj/machinery/light/small/directional/south, +/obj/structure/sign/poster/official/random/directional/east, +/turf/open/floor/eighties/red, +/area/station/hallway/primary/central/fore) "vRd" = ( /obj/structure/table, /obj/effect/turf_decal/tile/dark_red, /obj/item/flashlight/lamp, /turf/open/floor/iron, /area/station/security/tram) -"vRe" = ( -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/wood, -/area/station/service/chapel/office) +"vRg" = ( +/obj/machinery/porta_turret/ai, +/obj/machinery/computer/security/telescreen/research/directional/west, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/status_display/ai/directional/north, +/turf/open/floor/iron/smooth, +/area/station/ai_monitored/turret_protected/aisat_interior) "vRh" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -67486,28 +66840,22 @@ dir = 1 }, /area/station/science/research) +"vRn" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/turf/closed/wall, +/area/station/maintenance/port/greater) "vRt" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/maintenance/port/aft) -"vRx" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/broken_flooring/corner/directional/south, -/turf/open/floor/plating, -/area/station/commons) "vRC" = ( /obj/structure/cable, /obj/machinery/power/apc/auto_name/directional/west, /turf/open/floor/iron/dark, /area/station/security/interrogation) -"vRE" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/brown/full, -/turf/open/floor/iron/smooth_large, -/area/station/service/bar) "vRH" = ( /obj/structure/reagent_dispensers/beerkeg, /turf/open/floor/plating, @@ -67522,6 +66870,14 @@ /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/iron, /area/station/engineering/atmospherics_engine) +"vSi" = ( +/obj/structure/hedge, +/obj/effect/turf_decal/siding/wood/end, +/obj/effect/turf_decal/siding/wood/end{ + dir = 1 + }, +/turf/open/floor/iron/smooth, +/area/station/service/library) "vSj" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/firealarm/directional/west, @@ -67530,14 +66886,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/aft) -"vSu" = ( -/obj/structure/chair{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/cobweb/cobweb2, -/turf/open/floor/iron/dark, -/area/station/security/interrogation) "vSw" = ( /obj/effect/landmark/start/hangover, /turf/open/floor/iron, @@ -67550,12 +66898,6 @@ }, /turf/open/floor/iron/kitchen/small, /area/station/security/prison/mess) -"vSE" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/flora/bush/flowers_yw/style_random, -/turf/open/floor/grass, -/area/station/service/chapel) "vSL" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/turf_decal/tile/neutral{ @@ -67566,20 +66908,10 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/aft) -"vST" = ( -/obj/machinery/hydroponics/constructable, -/obj/effect/turf_decal/tile/blue/half, -/obj/machinery/firealarm/directional/south, -/turf/open/floor/iron/white/small, -/area/station/service/hydroponics) "vSW" = ( /obj/effect/spawner/random/engineering/atmospherics_portable, /turf/open/floor/plating, /area/station/maintenance/port/lesser) -"vSX" = ( -/obj/structure/flora/bush/sunny/style_random, -/turf/open/floor/grass, -/area/station/service/chapel) "vSY" = ( /obj/structure/table, /obj/item/chisel{ @@ -67625,6 +66957,15 @@ /obj/machinery/light/small/directional/south, /turf/open/floor/iron/cafeteria, /area/station/science/breakroom) +"vTn" = ( +/obj/effect/turf_decal/weather/dirt, +/obj/structure/flora/bush/flowers_yw/style_2, +/obj/structure/flora/bush/large/style_random{ + pixel_x = 0; + pixel_y = 2 + }, +/turf/open/floor/grass, +/area/station/service/chapel) "vTo" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -67673,11 +67014,11 @@ }, /turf/open/floor/iron/dark, /area/station/command/corporate_dock) -"vTN" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/white/small, -/area/station/service/hydroponics) +"vTP" = ( +/obj/structure/sink/kitchen/directional/east, +/obj/machinery/firealarm/directional/west, +/turf/open/floor/iron/kitchen/small, +/area/station/service/kitchen) "vTV" = ( /turf/closed/wall/r_wall, /area/station/command/heads_quarters/hos) @@ -67701,23 +67042,16 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/maintenance/port/aft) -"vUg" = ( -/obj/effect/turf_decal/tile/dark_red, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/security/prison) "vUh" = ( -/obj/machinery/atmospherics/components/unary/portables_connector/visible{ - dir = 8 +/obj/machinery/atmospherics/components/binary/pump/off/general/visible/layer1{ + dir = 4; + name = "Plasma to Pure"; + color = "#BF40BF"; + piping_layer = 3; + icon_state = "pump_map-3" }, -/obj/machinery/portable_atmospherics/canister, -/turf/open/floor/iron, +/turf/open/floor/iron/dark, /area/station/engineering/atmos) -"vUq" = ( -/obj/machinery/restaurant_portal/bar, -/obj/machinery/firealarm/directional/west, -/turf/open/floor/wood/tile, -/area/station/service/bar) "vUz" = ( /obj/structure/table_frame, /obj/effect/decal/cleanable/glass, @@ -67728,22 +67062,6 @@ }, /turf/open/floor/eighties, /area/station/service/abandoned_gambling_den/gaming) -"vUG" = ( -/obj/structure/table/reinforced, -/obj/machinery/door/poddoor/shutters/preopen{ - dir = 4; - id = "kitchenshutters"; - name = "Kitchen Shutters" - }, -/obj/structure/displaycase/forsale/kitchen{ - pixel_y = 8 - }, -/turf/open/floor/iron/cafeteria, -/area/station/service/kitchen) -"vUI" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/wood, -/area/station/security/detectives_office) "vUM" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -67761,14 +67079,6 @@ }, /turf/open/floor/plating, /area/station/security/execution/education) -"vUP" = ( -/obj/effect/decal/cleanable/dirt, -/obj/item/radio/intercom/directional/east, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/hallway/secondary/entry) "vUR" = ( /obj/structure/chair{ dir = 8 @@ -67782,20 +67092,6 @@ }, /turf/open/floor/iron/white/small, /area/station/security/prison/safe) -"vUS" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) -"vUZ" = ( -/obj/effect/turf_decal/tile/red/opposingcorners{ - dir = 1 - }, -/obj/item/kirbyplants/random, -/turf/open/floor/iron/cafeteria, -/area/station/service/cafeteria) "vVo" = ( /obj/machinery/light/cold/directional/south, /obj/structure/table/reinforced, @@ -67803,12 +67099,6 @@ /obj/machinery/airalarm/directional/south, /turf/open/floor/iron/smooth, /area/station/security/checkpoint/escape) -"vVw" = ( -/obj/effect/turf_decal/tile/red/opposingcorners{ - dir = 1 - }, -/turf/open/floor/iron/cafeteria, -/area/station/service/cafeteria) "vVx" = ( /obj/machinery/hydroponics/soil, /obj/item/food/grown/mushroom/plumphelmet, @@ -67829,14 +67119,6 @@ }, /turf/open/floor/iron/small, /area/station/security/brig) -"vVD" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 9 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) "vVF" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/turf_decal/tile/neutral{ @@ -67866,6 +67148,12 @@ /obj/effect/spawner/random/trash, /turf/open/floor/plating, /area/station/maintenance/port/lesser) +"vVV" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/commons/fitness/recreation/entertainment) "vVX" = ( /obj/structure/cable, /obj/machinery/telecomms/processor/preset_one, @@ -67902,6 +67190,19 @@ /obj/structure/cable, /turf/open/floor/iron/smooth, /area/station/maintenance/solars/starboard/fore) +"vWw" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/stripes/red/line, +/obj/effect/turf_decal/stripes/red/line{ + dir = 1 + }, +/obj/structure/disposalpipe/segment, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/small, +/area/station/hallway/primary/central/fore) "vWA" = ( /obj/effect/turf_decal/tile/brown/opposingcorners, /obj/machinery/firealarm/directional/south, @@ -67949,6 +67250,11 @@ /obj/item/clothing/gloves/boxing/blue, /turf/open/floor/iron, /area/station/security/prison/workout) +"vXd" = ( +/obj/item/flashlight/lantern/on, +/obj/effect/turf_decal/siding/wood, +/turf/open/floor/stone, +/area/station/service/chapel) "vXi" = ( /obj/structure/table, /obj/item/reagent_containers/cup/bowl, @@ -67958,14 +67264,6 @@ /obj/item/wirecutters, /turf/open/floor/iron/white/diagonal, /area/station/maintenance/department/science/xenobiology) -"vXo" = ( -/obj/effect/turf_decal/siding/wood/corner, -/obj/structure/chair/comfy/brown{ - dir = 4 - }, -/obj/effect/landmark/start/librarian, -/turf/open/floor/iron/grimy, -/area/station/service/library) "vXr" = ( /obj/structure/disposalpipe/segment{ dir = 6 @@ -68003,28 +67301,11 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/security) -"vXW" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/plating, -/area/station/maintenance/central/greater) "vYj" = ( /obj/structure/cable, /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/maintenance/department/medical/central) -"vYt" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/neutral/end, -/turf/open/floor/iron, -/area/station/hallway/primary/central/fore) "vYx" = ( /obj/effect/turf_decal/siding/thinplating_new/light{ dir = 1 @@ -68038,6 +67319,17 @@ /obj/effect/spawner/structure/window/reinforced/tinted, /turf/open/floor/plating, /area/station/security/courtroom) +"vYD" = ( +/obj/effect/turf_decal/siding/red{ + dir = 5 + }, +/obj/structure/chair/office{ + dir = 4 + }, +/obj/item/radio/intercom/directional/north, +/obj/effect/landmark/start/warden, +/turf/open/floor/iron/white/small, +/area/station/security/warden) "vYF" = ( /obj/effect/turf_decal/siding/thinplating_new/light{ dir = 8 @@ -68073,15 +67365,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/checker, /area/station/security/breakroom) -"vYP" = ( -/obj/structure/disposalpipe/segment{ - dir = 9 - }, -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating, -/area/station/maintenance/starboard/central) "vYS" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/decal/cleanable/dirt, @@ -68096,6 +67379,20 @@ /obj/effect/spawner/random/maintenance, /turf/open/misc/asteroid, /area/station/maintenance/hallway/abandoned_command) +"vYU" = ( +/obj/effect/turf_decal/tile/blue/anticorner/contrasted{ + dir = 1 + }, +/obj/effect/landmark/event_spawn, +/turf/open/floor/iron/white, +/area/station/medical/paramedic) +"vYW" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/structure/table/wood, +/turf/open/floor/iron/grimy, +/area/station/service/bar) "vZb" = ( /obj/structure/cable, /obj/structure/table, @@ -68113,6 +67410,19 @@ /obj/effect/turf_decal/tile/red/fourcorners, /turf/open/floor/iron, /area/station/security/courtroom) +"vZK" = ( +/obj/structure/table/wood, +/obj/machinery/light/small/directional/north, +/obj/machinery/reagentgrinder{ + pixel_y = 14; + pixel_x = -13 + }, +/obj/item/reagent_containers/cup/rag{ + pixel_x = 7; + pixel_y = 7 + }, +/turf/open/floor/stone, +/area/station/service/abandoned_gambling_den) "vZM" = ( /obj/item/clothing/head/cone{ pixel_x = -17; @@ -68159,11 +67469,6 @@ }, /turf/open/floor/iron, /area/station/security/courtroom) -"waw" = ( -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/machinery/light/small/directional/east, -/turf/open/floor/iron, -/area/station/hallway/secondary/spacebridge) "way" = ( /obj/effect/turf_decal/tile/yellow{ dir = 1 @@ -68171,6 +67476,13 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /turf/open/floor/iron/smooth, /area/station/engineering/main) +"waD" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/hallway/primary/central/aft) "waH" = ( /obj/machinery/atmospherics/pipe/smart/simple/cyan/hidden{ dir = 5 @@ -68180,6 +67492,10 @@ /obj/structure/sign/poster/official/random/directional/west, /turf/open/floor/iron/smooth, /area/station/engineering/main) +"waI" = ( +/obj/machinery/vending/games, +/turf/open/floor/wood/parquet, +/area/station/service/library) "waN" = ( /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 4 @@ -68191,22 +67507,6 @@ /obj/structure/bookcase/random/religion, /turf/open/floor/wood, /area/station/service/chapel/office) -"waS" = ( -/obj/structure/table, -/obj/effect/turf_decal/siding/wood{ - dir = 4 - }, -/obj/item/toy/foamblade, -/obj/item/toy/dummy, -/obj/machinery/light/small/directional/north, -/obj/structure/sign/poster/official/random/directional/north, -/turf/open/floor/plating, -/area/station/service/theater) -"waT" = ( -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/hallway/secondary/recreation) "waX" = ( /obj/effect/turf_decal/tile/yellow/opposingcorners, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -68214,12 +67514,25 @@ /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/iron, /area/station/command/heads_quarters/ce) -"wbb" = ( -/obj/item/kirbyplants/random, -/obj/effect/mapping_helpers/broken_floor, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/wood, -/area/station/service/chapel/office) +"waY" = ( +/obj/effect/turf_decal/weather/snow, +/obj/machinery/gibber, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 6 + }, +/turf/open/floor/iron/freezer, +/area/station/service/kitchen/coldroom) +"wbd" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/dark_red/fourcorners, +/obj/effect/landmark/start/security_officer, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/turf/open/floor/iron, +/area/station/security/brig/entrance) "wbf" = ( /turf/closed/wall, /area/station/security/prison/safe) @@ -68231,11 +67544,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/fore) -"wbk" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/security/prison/garden) "wbp" = ( /obj/item/kirbyplants/random, /obj/item/radio/intercom/directional/south, @@ -68243,12 +67551,6 @@ dir = 1 }, /area/station/science/lower) -"wbu" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/siding, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/white/small, -/area/station/science/lab) "wby" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/structure/cable, @@ -68308,24 +67610,33 @@ }, /turf/open/floor/iron, /area/station/security/execution/transfer) +"wcz" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/chair/stool/directional/south, +/turf/open/floor/iron, +/area/station/cargo/sorting) "wcG" = ( /obj/effect/turf_decal/tile/red/opposingcorners{ dir = 1 }, /turf/open/floor/iron/cafeteria, /area/station/hallway/secondary/exit/departure_lounge) -"wcI" = ( -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/obj/effect/mapping_helpers/broken_floor, -/obj/machinery/duct, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/plating, -/area/station/maintenance/fore/greater) "wcP" = ( /obj/machinery/modular_computer/preset/cargochat/cargo, /turf/open/floor/iron, /area/station/cargo/sorting) +"wcR" = ( +/obj/structure/chair{ + pixel_y = -2 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/obj/machinery/airalarm/directional/north, +/obj/effect/landmark/start/hangover, +/turf/open/floor/iron, +/area/station/hallway/secondary/recreation) "wcV" = ( /obj/structure/closet/crate, /obj/item/food/breadslice/plain, @@ -68375,12 +67686,6 @@ /obj/machinery/camera/autoname/directional/west, /turf/open/floor/circuit, /area/station/tcommsat/server) -"wdV" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/chair/stool/bamboo, -/turf/open/floor/carpet/lone, -/area/station/service/chapel/office) "wdY" = ( /obj/effect/spawner/random/structure/table, /turf/open/floor/plating, @@ -68394,9 +67699,6 @@ }, /turf/open/floor/iron/smooth_large, /area/station/science/robotics/mechbay) -"weg" = ( -/turf/closed/mineral/random/stationside, -/area/station/service/library/abandoned) "wen" = ( /turf/closed/wall, /area/station/ai_monitored/turret_protected/aisat/maint) @@ -68412,12 +67714,6 @@ /obj/machinery/light/small/directional/south, /turf/open/floor/iron/dark/small, /area/station/engineering/lobby) -"weT" = ( -/obj/structure/cable, -/obj/effect/mapping_helpers/broken_floor, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/turf/open/floor/iron, -/area/station/construction/mining/aux_base) "weU" = ( /obj/machinery/atmospherics/components/binary/pump/on{ dir = 4; @@ -68437,14 +67733,6 @@ }, /turf/open/floor/iron/white, /area/station/medical/medbay/lobby) -"wfb" = ( -/obj/structure/disposalpipe/segment{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/chair/stool/bamboo, -/turf/open/floor/carpet/lone, -/area/station/service/chapel/office) "wfi" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/turf_decal/siding/green{ @@ -68452,13 +67740,6 @@ }, /turf/open/floor/iron/dark/small, /area/station/medical/chemistry) -"wfj" = ( -/obj/effect/turf_decal/tile/blue/anticorner/contrasted{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/white, -/area/station/medical/paramedic) "wfk" = ( /turf/open/floor/plating, /area/station/hallway/secondary/dock) @@ -68483,55 +67764,11 @@ /obj/structure/extinguisher_cabinet/directional/north, /turf/open/floor/iron, /area/station/engineering/atmos) -"wfP" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/security/glass{ - id_tag = "outerbrig"; - name = "Brig" - }, -/obj/effect/mapping_helpers/airlock/access/all/security/entrance, -/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ - cycle_id = "sci-entrance" - }, -/turf/open/floor/iron/textured_half, -/area/station/security/brig/entrance) -"wfS" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/mapping_helpers/broken_floor, -/obj/structure/broken_flooring/pile/directional/east, -/turf/open/floor/plating, -/area/station/maintenance/starboard/aft) -"wfU" = ( -/obj/structure/disposalpipe/segment{ - dir = 5 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/machinery/airalarm/directional/west, -/turf/open/floor/iron/small, -/area/station/medical/medbay/lobby) -"wfV" = ( -/obj/effect/turf_decal/siding/thinplating_new/light{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/kitchen/small, -/area/station/security/breakroom) -"wgj" = ( -/obj/structure/disposalpipe/segment{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/carpet/lone, -/area/station/service/chapel/office) +"wfG" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/firealarm/directional/west, +/turf/open/floor/iron, +/area/station/maintenance/hallway/abandoned_command) "wgl" = ( /obj/structure/lattice/catwalk, /obj/structure/railing{ @@ -68596,6 +67833,14 @@ /obj/item/reagent_containers/cup/glass/bottle/beer, /turf/open/floor/wood, /area/station/maintenance/starboard/greater) +"wgI" = ( +/obj/effect/turf_decal/tile/brown/opposingcorners{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/landmark/start/assistant, +/turf/open/floor/iron, +/area/station/commons/vacant_room/commissary) "wgL" = ( /turf/closed/wall/r_wall, /area/station/maintenance/department/medical/central) @@ -68604,6 +67849,12 @@ /obj/effect/turf_decal/weather, /turf/open/floor/plating, /area/station/service/chapel/office) +"wha" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/turf/open/floor/stone, +/area/station/service/chapel) "whc" = ( /obj/effect/turf_decal/tile/dark_red/anticorner/contrasted{ dir = 1 @@ -68617,14 +67868,6 @@ }, /turf/open/floor/plating, /area/station/engineering/atmos/storage/gas) -"wht" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/station/maintenance/port/greater) "whu" = ( /obj/structure/cable, /obj/machinery/blackbox_recorder, @@ -68644,6 +67887,10 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/dock) +"whD" = ( +/obj/machinery/research/anomaly_refinery, +/turf/open/floor/iron/white/small, +/area/station/science/ordnance/storage) "whF" = ( /obj/effect/spawner/structure/window/reinforced, /obj/effect/turf_decal/stripes/corner{ @@ -68680,23 +67927,6 @@ }, /turf/closed/wall/r_wall, /area/station/security/brig/entrance) -"wix" = ( -/obj/item/kirbyplants/random, -/obj/machinery/newscaster/directional/west, -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 1 - }, -/obj/item/radio/intercom/directional/south, -/turf/open/floor/iron/dark/side, -/area/station/hallway/primary/central/fore) -"wiy" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/smooth, -/area/station/cargo/drone_bay) "wiC" = ( /obj/effect/turf_decal/siding/wood{ dir = 4 @@ -68725,21 +67955,15 @@ /obj/structure/cable, /turf/closed/wall, /area/station/engineering/engine_smes) -"wiT" = ( -/obj/effect/mapping_helpers/broken_floor, -/obj/machinery/newscaster/directional/south, -/turf/open/floor/wood/parquet, -/area/station/command/heads_quarters/cmo) -"wiU" = ( -/obj/structure/chair/office{ - dir = 8 - }, -/obj/effect/landmark/start/librarian, -/turf/open/floor/wood/parquet, -/area/station/service/library) "wja" = ( /turf/closed/wall/r_wall, /area/station/commons/toilet/auxiliary) +"wjq" = ( +/obj/structure/sign/painting/large/library{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/commons/fitness/locker_room) "wjr" = ( /obj/structure/tank_holder/extinguisher, /turf/open/floor/iron/white, @@ -68748,40 +67972,17 @@ /obj/structure/filingcabinet, /turf/open/floor/iron/dark/small, /area/station/security/detectives_office) -"wjK" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 10 - }, -/obj/structure/flora/bush/sunny/style_random, -/turf/open/floor/grass, -/area/station/service/chapel) -"wjM" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/disposalpipe/segment{ - dir = 10 - }, -/obj/effect/turf_decal/stripes/corner{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron/white/small, -/area/station/service/janitor) -"wjY" = ( -/obj/structure/window/spawner/directional/east, -/obj/structure/table/wood, -/obj/machinery/cell_charger{ - pixel_y = 5 - }, -/obj/item/stock_parts/cell/crap{ - pixel_y = 5 +"wjT" = ( +/obj/machinery/barsign{ + chosen_sign = "thecavern"; + icon_state = "thecavern"; + pixel_y = 32 }, -/obj/item/clothing/mask/cigarette/pipe/cobpipe{ - pixel_x = 1; - pixel_y = -2 +/obj/effect/turf_decal/tile/neutral{ + dir = 4 }, -/obj/structure/sign/poster/official/random/directional/north, -/turf/open/floor/wood/tile, -/area/station/command/corporate_showroom) +/turf/open/floor/iron, +/area/station/hallway/primary/central/aft) "wjZ" = ( /obj/structure/cable, /obj/effect/spawner/structure/window/reinforced, @@ -68802,24 +68003,37 @@ }, /turf/open/floor/wood/tile, /area/station/command/bridge) -"wkk" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/red/opposingcorners{ +"wku" = ( +/obj/effect/turf_decal/weather/dirt{ dir = 1 }, -/turf/open/floor/iron/cafeteria, -/area/station/service/cafeteria) -"wkm" = ( -/obj/effect/turf_decal/tile/blue, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/white/corner{ - dir = 8 - }, -/area/station/hallway/secondary/dock) +/obj/machinery/light/floor, +/turf/open/floor/grass, +/area/station/service/chapel) "wkF" = ( /obj/effect/spawner/structure/window/reinforced/tinted, /turf/open/floor/plating, /area/station/hallway/secondary/recreation) +"wkG" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"wkK" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/maintenance/port/greater) "wkU" = ( /obj/structure/lattice/catwalk, /obj/structure/railing{ @@ -68833,54 +68047,17 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/chapel, /area/station/maintenance/starboard/greater) -"wld" = ( -/obj/effect/turf_decal/tile/yellow/opposingcorners, -/obj/structure/table/reinforced/titaniumglass, -/obj/item/rcl/pre_loaded, -/obj/item/stock_parts/cell/high{ - pixel_y = 17 - }, -/obj/machinery/light/small/directional/south, -/obj/structure/secure_safe/directional/east, -/turf/open/floor/iron, -/area/station/command/heads_quarters/ce) -"wlf" = ( -/obj/effect/landmark/start/hangover, -/turf/open/floor/glass, -/area/station/hallway/secondary/spacebridge) "wlk" = ( /obj/effect/turf_decal/stripes/white/line{ dir = 4 }, /turf/open/floor/engine, /area/station/science/xenobiology) -"wlF" = ( -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/siding/wood, -/turf/open/floor/grass, -/area/station/service/chapel) -"wlJ" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/holopad, -/turf/open/floor/iron, -/area/station/engineering/storage/tech) -"wlL" = ( -/obj/machinery/firealarm/directional/north, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/neutral/opposingcorners, -/turf/open/floor/iron, -/area/station/hallway/secondary/spacebridge) -"wlQ" = ( -/obj/effect/turf_decal/siding/wood, -/obj/structure/flora/bush/flowers_pp/style_random, -/turf/open/floor/grass, -/area/station/service/chapel) "wlS" = ( /obj/effect/turf_decal/stripes/line, -/obj/machinery/atmospherics/pipe/smart/manifold/purple/visible, +/obj/machinery/atmospherics/pipe/smart/simple/purple/visible{ + dir = 9 + }, /turf/open/floor/iron, /area/station/engineering/atmos) "wlU" = ( @@ -68909,21 +68086,17 @@ /obj/effect/spawner/random/structure/crate, /turf/open/floor/plating, /area/station/maintenance/aft) -"wms" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/siding/wood{ - dir = 4 +"wmu" = ( +/obj/structure/disposalpipe/trunk{ + dir = 1 }, -/obj/machinery/newscaster/directional/north, -/obj/machinery/duct, -/turf/open/floor/iron/kitchen/small, -/area/station/hallway/secondary/service) -"wmt" = ( -/obj/machinery/light/small/directional/south, -/obj/structure/bed/maint, -/turf/open/floor/iron/showroomfloor, -/area/station/commons/toilet/restrooms) +/obj/machinery/disposal/bin, +/obj/effect/turf_decal/bot, +/obj/effect/turf_decal/siding/thinplating_new/terracotta/corner{ + dir = 1 + }, +/turf/open/floor/iron/dark/smooth_large, +/area/station/command/meeting_room) "wmx" = ( /obj/structure/cable, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ @@ -68975,22 +68148,26 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/port/lesser) -"wmY" = ( -/obj/effect/turf_decal/tile/neutral/opposingcorners, -/obj/machinery/camera/autoname/directional/north, +"wmX" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/plaque{ + icon_state = "L4"; + pixel_y = -15 + }, +/obj/effect/turf_decal/trimline/neutral/line, +/obj/effect/turf_decal/trimline/neutral/line{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, /turf/open/floor/iron, -/area/station/hallway/secondary/spacebridge) +/area/station/hallway/primary/central/aft) "wnd" = ( /obj/effect/spawner/structure/window, /turf/open/floor/plating, /area/station/cargo/office) -"wno" = ( -/obj/machinery/door/airlock{ - id_tag = "Toilet1"; - name = "Unit 1" - }, -/turf/open/floor/iron/showroomfloor, -/area/station/commons/toilet/restrooms) "wnw" = ( /obj/machinery/pdapainter/engineering, /obj/effect/turf_decal/bot, @@ -69012,12 +68189,13 @@ }, /turf/open/floor/mineral/titanium, /area/station/command/heads_quarters/ce) -"wnB" = ( -/obj/effect/turf_decal/plaque{ - icon_state = "L1" +"wny" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 5 }, -/turf/open/floor/glass, -/area/station/hallway/secondary/spacebridge) +/obj/machinery/light/small/broken/directional/north, +/turf/open/floor/wood, +/area/station/service/abandoned_gambling_den) "wnE" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -69025,19 +68203,9 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/station/maintenance/department/medical/central) -"wnK" = ( -/obj/structure/table, -/obj/effect/spawner/random/entertainment/toy, -/obj/item/radio/intercom/directional/north, -/turf/open/floor/wood, -/area/station/service/theater) -"wnO" = ( -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/tile/blue/anticorner/contrasted{ - dir = 8 - }, -/turf/open/floor/iron/white, -/area/station/medical/medbay/lobby) +"wnI" = ( +/turf/open/floor/engine/xenobio, +/area/station/science/xenobiology) "wnR" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -69056,21 +68224,6 @@ /obj/machinery/light/cold/directional/north, /turf/open/floor/iron/dark/small, /area/station/medical/chemistry) -"wob" = ( -/obj/structure/toilet{ - dir = 8 - }, -/obj/machinery/button/door/directional/west{ - id = "Toilet1"; - name = "Lock Control"; - normaldoorcontrol = 1; - pixel_x = 0; - pixel_y = 24; - specialfunctions = 4 - }, -/obj/machinery/light/small/directional/east, -/turf/open/floor/iron/showroomfloor, -/area/station/commons/toilet/restrooms) "woi" = ( /turf/closed/wall/r_wall, /area/station/maintenance/solars/starboard/fore) @@ -69079,22 +68232,13 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/tcommsat/server) -"wow" = ( -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/green{ - dir = 8 - }, -/obj/effect/turf_decal/tile/green{ - dir = 4 +"woz" = ( +/obj/effect/turf_decal/siding/thinplating{ + dir = 5 }, -/turf/open/floor/iron, -/area/station/service/hydroponics) -"woB" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/siding/wood, -/turf/open/floor/grass, -/area/station/service/chapel) +/obj/structure/cable, +/turf/open/floor/eighties, +/area/station/hallway/primary/central/fore) "woD" = ( /obj/effect/turf_decal/siding/wood{ dir = 4 @@ -69133,21 +68277,17 @@ "wpa" = ( /turf/open/floor/plating, /area/station/ai_monitored/turret_protected/aisat/maint) -"wpd" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/science/xenobiology) "wpk" = ( /obj/structure/window/spawner/directional/east, /obj/structure/flora/bush/large/style_random, /obj/structure/flora/bush/flowers_pp/style_random, /turf/open/misc/sandy_dirt, /area/station/medical/medbay/lobby) +"wpr" = ( +/obj/machinery/light/small/directional/east, +/obj/structure/closet/firecloset, +/turf/open/floor/iron, +/area/station/security/tram) "wpw" = ( /obj/structure/cable, /obj/item/kirbyplants/random, @@ -69161,14 +68301,6 @@ "wpO" = ( /turf/closed/wall/r_wall, /area/station/security/processing) -"wpV" = ( -/obj/effect/turf_decal/siding/blue{ - dir = 8 - }, -/obj/structure/rack, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/white, -/area/station/medical/paramedic) "wpY" = ( /obj/structure/lattice/catwalk, /obj/structure/railing{ @@ -69196,20 +68328,25 @@ "wqj" = ( /turf/closed/wall, /area/station/commons/toilet/restrooms) -"wqs" = ( -/obj/effect/spawner/structure/window, -/obj/machinery/door/poddoor/shutters/preopen{ - dir = 8; - id = "barki"; - name = "Shutters" - }, -/turf/open/floor/plating, -/area/station/service/kitchen) "wqD" = ( /obj/structure/reagent_dispensers/water_cooler, /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/station/maintenance/port/aft) +"wqI" = ( +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/brown{ + dir = 4 + }, +/obj/effect/turf_decal/tile/brown{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/cargo/office) "wqM" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable, @@ -69238,18 +68375,31 @@ /obj/machinery/light/small/directional/east, /turf/open/floor/iron/dark, /area/station/security/prison/workout) -"wro" = ( -/obj/effect/mapping_helpers/broken_floor, -/obj/machinery/newscaster/directional/south, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 4 +"wrk" = ( +/obj/effect/turf_decal/siding/wideplating/dark{ + dir = 1 }, -/turf/open/floor/wood/parquet, -/area/station/service/theater) -"wrv" = ( +/obj/effect/turf_decal/tile/dark_red/half/contrasted, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/station/security/brig/entrance) +"wrw" = ( +/obj/machinery/light/small/directional/east, +/obj/structure/disposalpipe/segment, /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, -/area/station/science/ordnance/testlab) +/area/station/hallway/secondary/recreation) +"wrx" = ( +/obj/machinery/button/door/directional/north{ + name = "Lock Control"; + id = "Toilet3"; + specialfunctions = 4; + normaldoorcontrol = 1 + }, +/obj/machinery/recharge_station, +/obj/structure/sign/poster/official/random/directional/east, +/turf/open/floor/iron/white/small, +/area/station/commons/toilet/restrooms) "wrD" = ( /obj/structure/disposalpipe/segment{ dir = 9 @@ -69279,13 +68429,12 @@ }, /turf/open/floor/iron/dark, /area/station/command/corporate_dock) -"wrR" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +"wrS" = ( +/obj/structure/chair/stool/bar/directional/east, +/obj/structure/sign/poster/contraband/random/directional/north, /obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/hallway/secondary/entry) +/turf/open/floor/carpet/lone, +/area/station/service/abandoned_gambling_den) "wrW" = ( /obj/structure/cable, /obj/effect/turf_decal/tile/neutral/fourcorners, @@ -69296,6 +68445,16 @@ /obj/machinery/power/apc/auto_name/directional/east, /turf/open/floor/iron/dark, /area/station/command/corporate_dock) +"wrZ" = ( +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/obj/structure/cable, +/obj/machinery/duct, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/plating, +/area/station/maintenance/central/lesser) "wsa" = ( /obj/structure/window/reinforced/spawner/directional/west, /obj/effect/turf_decal/tile/red/anticorner/contrasted{ @@ -69332,6 +68491,13 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/station/security/prison) +"wsL" = ( +/obj/effect/spawner/random/structure/crate, +/obj/effect/spawner/random/maintenance, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/cobweb/cobweb2, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "wsR" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -69341,11 +68507,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/department/medical/central) -"wta" = ( -/obj/structure/railing/corner/end/flip, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating, -/area/station/cargo/miningfoundry) "wtc" = ( /obj/structure/cable, /obj/structure/window/reinforced/spawner/directional/north, @@ -69402,6 +68563,20 @@ /obj/effect/mapping_helpers/airlock/access/all/command/ai_upload, /turf/open/floor/iron/dark/textured_half, /area/station/ai_monitored/turret_protected/ai_upload) +"wtv" = ( +/obj/effect/turf_decal/tile/red/opposingcorners, +/obj/effect/turf_decal/tile/blue/opposingcorners{ + dir = 8 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/turf/open/floor/iron/smooth, +/area/station/service/greenroom) +"wtw" = ( +/obj/structure/chair/stool/bar/directional/west, +/turf/open/floor/wood/large, +/area/station/service/bar) "wtx" = ( /obj/structure/cannon{ dir = 4 @@ -69430,6 +68605,12 @@ dir = 4 }, /area/station/science/lobby) +"wtV" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/stone, +/area/station/service/chapel) "wtX" = ( /turf/closed/wall/r_wall, /area/station/security/checkpoint/customs/auxiliary) @@ -69478,11 +68659,6 @@ /obj/machinery/light/small/directional/north, /turf/open/floor/plating, /area/station/command/gateway) -"wuw" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/wood/parquet, -/area/station/service/library) "wuH" = ( /obj/structure/broken_flooring/singular/directional/south, /obj/effect/landmark/generic_maintenance_landmark, @@ -69503,18 +68679,26 @@ "wuM" = ( /turf/closed/wall, /area/station/command/heads_quarters/qm) -"wvn" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +"wuY" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/light/small/directional/west, -/turf/open/floor/catwalk_floor/iron_dark, -/area/station/service/library) -"wvo" = ( -/obj/structure/disposalpipe/segment, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/iron/kitchen/small, -/area/station/hallway/secondary/service) +/obj/structure/chair/wood{ + dir = 8 + }, +/turf/open/floor/iron/grimy, +/area/station/service/bar) +"wvk" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/stripes/red/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/red/line, +/obj/structure/extinguisher_cabinet/directional/east, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/turf/open/floor/iron/small, +/area/station/hallway/primary/central/fore) "wvv" = ( /obj/effect/turf_decal/tile/red/opposingcorners, /obj/effect/turf_decal/tile/blue/opposingcorners{ @@ -69539,17 +68723,6 @@ }, /turf/open/floor/iron/dark, /area/station/engineering/atmos) -"wvX" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/white/small, -/area/station/science/server) -"wwb" = ( -/obj/structure/table, -/obj/item/pai_card, -/turf/open/floor/iron, -/area/station/commons) "wwk" = ( /obj/effect/turf_decal/siding/thinplating_new/light{ dir = 8 @@ -69583,6 +68756,16 @@ dir = 1 }, /area/station/science/lower) +"wwJ" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/brown/half/contrasted, +/turf/open/floor/iron, +/area/station/cargo/sorting) "wwQ" = ( /obj/structure/chair/office{ dir = 4 @@ -69681,42 +68864,12 @@ dir = 1 }, /area/station/science/xenobiology) -"wya" = ( -/obj/effect/turf_decal/tile/yellow/anticorner/contrasted{ - dir = 1 - }, -/obj/machinery/chem_dispenser{ - layer = 2.7 - }, -/obj/effect/decal/cleanable/cobweb, -/obj/machinery/light/small/directional/north, -/turf/open/floor/iron/dark, -/area/station/medical/pharmacy) "wyb" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/turf_decal/tile/dark_red, /turf/open/floor/iron, /area/station/security/prison) -"wyg" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/yellow{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 4 - }, -/obj/effect/landmark/navigate_destination/tools, -/turf/open/floor/iron, -/area/station/hallway/primary/fore) "wyj" = ( /obj/effect/turf_decal/sand/plating, /obj/effect/decal/cleanable/dirt, @@ -69768,15 +68921,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/wood, /area/station/service/chapel/office) -"wyO" = ( -/obj/structure/cable, -/obj/effect/turf_decal/siding/dark_red{ - dir = 1 - }, -/obj/machinery/airalarm/directional/north, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/stone, -/area/station/command/heads_quarters/hos) "wyU" = ( /obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ dir = 4 @@ -69785,12 +68929,6 @@ /obj/machinery/meter, /turf/open/floor/iron/dark, /area/station/engineering/atmos) -"wyY" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/table/wood, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/carpet/lone, -/area/station/service/chapel/office) "wyZ" = ( /obj/effect/turf_decal/siding/wideplating{ dir = 4 @@ -69800,24 +68938,9 @@ /obj/machinery/newscaster/directional/north, /turf/open/floor/iron/smooth, /area/station/engineering/atmos/office) -"wzb" = ( -/obj/effect/mapping_helpers/broken_floor, -/obj/effect/turf_decal/tile/purple/opposingcorners, -/obj/effect/turf_decal/siding/green{ - dir = 10 - }, -/obj/structure/table, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/cafeteria, -/area/station/science/circuits) "wzj" = ( /turf/open/floor/plating, /area/station/maintenance/central/greater) -"wzk" = ( -/obj/structure/disposalpipe/segment, -/obj/effect/spawner/structure/window, -/turf/open/floor/plating, -/area/station/hallway/primary/port) "wzo" = ( /obj/machinery/light/small/directional/north, /obj/effect/landmark/start/cargo_technician, @@ -69857,6 +68980,11 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/carpet/lone, /area/station/service/chapel/office) +"wAa" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/wood/tile, +/area/station/service/bar) "wAb" = ( /obj/structure/table, /obj/effect/spawner/random/food_or_drink/donkpockets, @@ -69885,24 +69013,6 @@ }, /turf/open/floor/wood, /area/station/security/detectives_office) -"wAn" = ( -/obj/structure/disposalpipe/segment, -/obj/effect/decal/cleanable/dirt, -/obj/structure/broken_flooring/pile/directional/east, -/turf/open/floor/plating, -/area/station/maintenance/hallway/abandoned_command) -"wAE" = ( -/obj/structure/closet{ - name = "Paramedic Supplies" - }, -/obj/effect/turf_decal/siding/blue{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/camera/autoname/directional/east, -/obj/machinery/light/cold/directional/east, -/turf/open/floor/iron/white, -/area/station/medical/paramedic) "wAM" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/smart/simple/general/visible{ @@ -69920,16 +69030,16 @@ "wAW" = ( /turf/closed/wall, /area/station/hallway/primary/port) -"wAZ" = ( -/obj/machinery/door/airlock/public/glass{ - name = "Public Shrine" - }, -/obj/machinery/door/firedoor, -/turf/open/floor/iron/textured_half, -/area/station/hallway/primary/port) "wBa" = ( /turf/open/floor/iron/dark/smooth_corner, /area/station/maintenance/starboard/greater) +"wBc" = ( +/obj/effect/turf_decal/tile/green/opposingcorners, +/obj/effect/turf_decal/tile/blue/opposingcorners{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/service/hydroponics) "wBf" = ( /obj/effect/spawner/random/structure/closet_maintenance, /turf/open/floor/plating/rust, @@ -69971,14 +69081,6 @@ /obj/structure/bed/maint, /turf/open/floor/plating, /area/station/maintenance/department/science/xenobiology) -"wBO" = ( -/obj/structure/cable, -/obj/machinery/light/small/broken/directional/east, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/duct, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/plating, -/area/station/maintenance/fore/greater) "wCa" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, @@ -70009,11 +69111,6 @@ /obj/machinery/computer/arcade/orion_trail/kobayashi, /turf/open/floor/wood/tile, /area/station/maintenance/port/lesser) -"wCD" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/station/commons/fitness/recreation/entertainment) "wCH" = ( /obj/effect/turf_decal/stripes/white/line{ dir = 9 @@ -70053,6 +69150,18 @@ }, /turf/open/floor/iron/dark, /area/station/medical/pharmacy) +"wCM" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/station/hallway/primary/central/fore) "wCR" = ( /turf/closed/wall, /area/station/cargo/boutique) @@ -70074,13 +69183,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/science/robotics/lab) -"wDC" = ( -/obj/effect/mapping_helpers/broken_floor, -/obj/structure/table/wood, -/obj/machinery/light/small/built/directional/north, -/obj/item/stack/sheet/iron/ten, -/turf/open/floor/wood/tile, -/area/station/commons/vacant_room/commissary) "wDF" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ dir = 8 @@ -70088,23 +69190,6 @@ /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/iron, /area/station/engineering/atmos/pumproom) -"wDG" = ( -/obj/effect/decal/cleanable/dirt, -/obj/item/kirbyplants/random/fullysynthetic, -/obj/machinery/light/small/directional/west, -/turf/open/floor/iron/showroomfloor, -/area/station/commons/toilet/auxiliary) -"wDJ" = ( -/obj/structure/disposalpipe/segment{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/status_display/ai/directional/north, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/port) "wDM" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -70112,19 +69197,6 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/plating, /area/station/maintenance/department/engine/atmos) -"wDV" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment, -/obj/machinery/power/apc/auto_name/directional/east, -/turf/open/floor/iron, -/area/station/hallway/primary/port) -"wDZ" = ( -/obj/item/radio/intercom/directional/south, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/neutral/opposingcorners, -/turf/open/floor/iron, -/area/station/hallway/secondary/spacebridge) "wEc" = ( /obj/effect/turf_decal/stripes/white/line{ dir = 9 @@ -70145,10 +69217,25 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/entry) -"wEp" = ( -/obj/effect/turf_decal/tile/green/diagonal_centre, -/turf/open/floor/iron/diagonal, -/area/station/hallway/primary/central/aft) +"wEs" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/maintenance/hallway/abandoned_command) +"wEv" = ( +/obj/effect/mapping_helpers/airlock/access/any/service/hydroponics, +/obj/machinery/door/airlock/hydroponics/glass{ + name = "Hydroponics" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/door/firedoor, +/turf/open/floor/iron/textured_half, +/area/station/service/hydroponics) "wEC" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable, @@ -70158,16 +69245,16 @@ dir = 1 }, /area/station/science/lower) +"wEF" = ( +/obj/structure/table, +/obj/machinery/light/small/directional/north, +/obj/item/clothing/head/costume/rice_hat, +/turf/open/floor/iron/dark/small, +/area/station/commons/fitness/locker_room) "wEG" = ( /obj/effect/spawner/structure/window/reinforced/tinted, /turf/open/floor/iron/dark, /area/station/service/chapel/office) -"wEI" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/green/diagonal_centre, -/turf/open/floor/iron/diagonal, -/area/station/hallway/primary/central/aft) "wER" = ( /obj/effect/spawner/random/trash, /obj/machinery/duct, @@ -70179,37 +69266,36 @@ }, /turf/open/floor/plating, /area/station/maintenance/department/engine) -"wEV" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/station/security/office) "wEW" = ( /obj/effect/spawner/random/engineering/atmospherics_portable, /obj/structure/barricade/wooden/crude, /turf/open/floor/plating, /area/station/maintenance/port/aft) -"wFj" = ( -/obj/structure/disposalpipe/trunk{ +"wFa" = ( +/obj/structure/cable, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/siding/purple{ dir = 8 }, -/obj/machinery/disposal/bin, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/bot, -/turf/open/floor/iron, -/area/station/science/lower) -"wFl" = ( +/obj/structure/filingcabinet/chestdrawer, +/turf/open/floor/iron/dark, +/area/station/command/heads_quarters/rd) +"wFd" = ( /obj/structure/disposalpipe/segment, -/obj/machinery/door/firedoor, -/obj/effect/turf_decal/stripes/red/line, -/obj/effect/turf_decal/stripes/red/line{ - dir = 1 - }, -/turf/open/floor/iron/small, -/area/station/hallway/primary/starboard) +/turf/open/floor/iron/smooth, +/area/station/service/library) +"wFe" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/stripes/corner, +/obj/machinery/camera/autoname/directional/east, +/turf/open/floor/iron, +/area/station/maintenance/hallway/abandoned_command) +"wFq" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/turf/open/floor/plating/rust, +/area/station/maintenance/fore/greater) "wFz" = ( /obj/effect/turf_decal/sand/plating, /obj/structure/table, @@ -70228,6 +69314,13 @@ /obj/effect/landmark/generic_maintenance_landmark, /turf/open/floor/plating, /area/station/maintenance/department/engine/atmos) +"wFY" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 8 + }, +/obj/structure/flora/bush/jungle/c/style_3, +/turf/open/floor/grass, +/area/station/service/chapel) "wGh" = ( /obj/structure/broken_flooring/corner/directional/south, /turf/open/floor/plating, @@ -70283,17 +69376,16 @@ }, /turf/open/floor/iron/dark, /area/station/security/interrogation) +"wGU" = ( +/obj/structure/table, +/obj/effect/spawner/random/techstorage/ai_all, +/obj/machinery/airalarm/directional/west, +/turf/open/floor/iron, +/area/station/engineering/storage/tech) "wHg" = ( /obj/structure/filingcabinet/filingcabinet, /turf/open/floor/iron/grimy, /area/station/science/cubicle) -"wHE" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/neutral, -/turf/open/floor/iron, -/area/station/hallway/primary/port) "wHH" = ( /obj/structure/lattice/catwalk, /obj/structure/railing/corner/end{ @@ -70330,39 +69422,22 @@ /obj/structure/reagent_dispensers/water_cooler, /turf/open/floor/iron, /area/station/hallway/secondary/dock) -"wHX" = ( -/obj/item/radio/intercom/directional/south, -/obj/effect/landmark/start/hangover, +"wHS" = ( /obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/tile/neutral/opposingcorners, -/turf/open/floor/iron, -/area/station/hallway/secondary/spacebridge) +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "wIc" = ( /obj/structure/window/spawner/directional/west, /obj/structure/flora/rock/pile/jungle/style_random, /turf/open/misc/sandy_dirt, /area/station/medical/medbay/lobby) -"wId" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/dark_red/fourcorners, -/turf/open/floor/iron, -/area/station/security/brig/entrance) -"wIh" = ( -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 - }, -/turf/open/floor/iron/white/side{ - dir = 1 - }, -/area/station/science/xenobiology) "wIm" = ( /obj/machinery/door/airlock/hatch{ name = "Centcom Dock" @@ -70409,22 +69484,6 @@ }, /turf/open/space/basic, /area/space/nearstation) -"wJc" = ( -/obj/structure/cable, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 4 - }, -/turf/open/floor/iron/dark/corner{ - dir = 4 - }, -/area/station/science/xenobiology) "wJd" = ( /turf/closed/wall, /area/station/hallway/secondary/construction) @@ -70459,6 +69518,16 @@ /obj/structure/window/spawner/directional/south, /turf/open/misc/sandy_dirt, /area/station/hallway/secondary/entry) +"wJJ" = ( +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/central/greater) "wJK" = ( /obj/effect/turf_decal/tile/dark_red{ dir = 4 @@ -70474,14 +69543,18 @@ /obj/effect/turf_decal/tile/blue/fourcorners, /turf/open/floor/iron/white, /area/station/medical/medbay/lobby) -"wJV" = ( -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/structure/sign/painting/large/library{ - dir = 1 +"wJT" = ( +/obj/structure/flora/tree/jungle/small/style_4, +/obj/structure/flora/grass/jungle/b/style_random{ + pixel_y = -3; + pixel_x = 3 }, -/obj/effect/landmark/event_spawn, -/turf/open/floor/iron/smooth, -/area/station/service/library) +/turf/open/floor/grass, +/area/station/service/chapel) +"wJX" = ( +/obj/structure/closet/secure_closet/personal, +/turf/open/floor/iron/herringbone, +/area/station/commons/dorms) "wJY" = ( /obj/effect/turf_decal/siding/thinplating_new/light{ dir = 4 @@ -70493,10 +69566,6 @@ /obj/effect/landmark/start/scientist, /turf/open/floor/iron/grimy, /area/station/science/cubicle) -"wJZ" = ( -/obj/structure/barricade/wooden/crude, -/turf/open/floor/plating, -/area/station/maintenance/hallway/abandoned_recreation) "wKa" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -70532,10 +69601,10 @@ }, /turf/open/floor/iron/small, /area/station/medical/morgue) -"wKq" = ( -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/wood/parquet, -/area/station/service/library) +"wKn" = ( +/obj/machinery/camera/autoname/directional/north, +/turf/open/floor/iron, +/area/station/commons/fitness/locker_room) "wKr" = ( /obj/structure/bookcase/random, /turf/open/floor/wood/parquet, @@ -70560,6 +69629,35 @@ /obj/structure/alien/weeds, /turf/open/floor/wood, /area/station/maintenance/starboard/greater) +"wKH" = ( +/obj/structure/cable, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/camera/autoname/directional/east, +/obj/machinery/computer/security/telescreen/entertainment/directional/east, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 1 + }, +/turf/open/floor/stone, +/area/station/service/bar) +"wKO" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/camera/directional/east, +/turf/open/floor/iron/stairs/right, +/area/station/hallway/secondary/recreation) +"wKR" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/wood, +/area/station/service/abandoned_gambling_den) "wKT" = ( /obj/machinery/computer/security/mining, /obj/effect/turf_decal/tile/neutral/fourcorners, @@ -70569,35 +69667,9 @@ /obj/machinery/incident_display/dual/directional/north, /turf/open/floor/iron/smooth, /area/station/command/bridge) -"wKY" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/window/reinforced/spawner/directional/east, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark/side{ - dir = 4 - }, -/area/station/science/ordnance/testlab) -"wLa" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark/corner, -/area/station/science/xenobiology) "wLd" = ( /turf/closed/wall/r_wall, /area/station/maintenance/solars/port/aft) -"wLl" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/engineering/gravity_generator) "wLm" = ( /obj/machinery/door/firedoor, /obj/effect/mapping_helpers/airlock/access/any/security/general, @@ -70607,17 +69679,11 @@ /obj/effect/mapping_helpers/airlock/access/any/security/court, /turf/open/floor/plating, /area/station/security/courtroom) -"wLA" = ( -/obj/machinery/holopad, -/turf/open/floor/wood, -/area/station/service/theater) -"wLJ" = ( +"wLo" = ( /obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 9 - }, -/turf/open/floor/plating, -/area/station/maintenance/central/greater) +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/hallway/primary/central/fore) "wLM" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -70629,6 +69695,13 @@ /obj/machinery/power/apc/auto_name/directional/north, /turf/open/floor/iron/dark, /area/station/medical/medbay/lobby) +"wLU" = ( +/obj/machinery/door/airlock{ + name = "Hydroponics Maintenance" + }, +/obj/effect/mapping_helpers/airlock/access/any/service/hydroponics, +/turf/open/floor/plating, +/area/station/maintenance/central/greater) "wLZ" = ( /obj/machinery/atmospherics/pipe/smart/simple/dark/visible, /obj/effect/decal/cleanable/dirt, @@ -70642,6 +69715,13 @@ /obj/effect/spawner/structure/window, /turf/open/floor/plating, /area/station/service/library) +"wMz" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/structure/bookcase/random, +/turf/open/floor/wood/parquet, +/area/station/service/library) "wMA" = ( /obj/machinery/camera/directional/west, /obj/structure/bookcase/random/religion, @@ -70663,6 +69743,13 @@ }, /turf/open/floor/circuit/red, /area/station/ai_monitored/turret_protected/ai_upload) +"wMG" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/structure/extinguisher_cabinet/directional/north, +/turf/open/floor/iron, +/area/station/hallway/secondary/recreation) "wMH" = ( /turf/closed/wall, /area/station/science/xenobiology) @@ -70671,6 +69758,10 @@ dir = 1 }, /area/station/science/lower) +"wMN" = ( +/obj/effect/turf_decal/siding, +/turf/open/floor/iron/white/small, +/area/station/science/lab) "wMO" = ( /turf/closed/wall/r_wall, /area/station/science/server) @@ -70709,6 +69800,10 @@ dir = 4 }, /area/station/science/lobby) +"wNd" = ( +/obj/effect/spawner/random/engineering/atmospherics_portable, +/turf/open/floor/plating, +/area/station/maintenance/fore/greater) "wNg" = ( /obj/structure/cable, /obj/effect/turf_decal/siding/thinplating_new/light{ @@ -70721,10 +69816,10 @@ dir = 1 }, /obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold/purple/visible{ - dir = 1 - }, /obj/machinery/meter, +/obj/machinery/atmospherics/pipe/smart/simple/general/visible{ + dir = 4 + }, /turf/open/floor/iron, /area/station/engineering/atmos) "wNv" = ( @@ -70749,6 +69844,11 @@ }, /turf/open/floor/iron/dark/small, /area/station/engineering/supermatter/room) +"wND" = ( +/obj/effect/turf_decal/siding/wideplating/dark/corner, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/commons/fitness/locker_room) "wNK" = ( /obj/structure/reagent_dispensers/fueltank, /turf/open/floor/iron, @@ -70760,15 +69860,6 @@ }, /turf/open/space/basic, /area/space) -"wNR" = ( -/obj/structure/disposalpipe/segment{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/neutral, -/turf/open/floor/iron, -/area/station/hallway/primary/port) "wNS" = ( /obj/structure/rack, /obj/structure/transport/linear/tram, @@ -70804,10 +69895,6 @@ /obj/machinery/light/small/dim/directional/north, /turf/open/floor/sepia, /area/station/maintenance/aft) -"wOd" = ( -/obj/structure/broken_flooring/plating/directional/south, -/turf/open/floor/iron, -/area/station/maintenance/port/aft) "wOh" = ( /obj/effect/turf_decal/tile/neutral/fourcorners, /obj/structure/table/glass, @@ -70863,6 +69950,15 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/science/genetics) +"wOt" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/turf/open/floor/stone, +/area/station/service/bar) "wOz" = ( /obj/effect/landmark/generic_maintenance_landmark, /obj/effect/turf_decal/stripes/line{ @@ -70892,6 +69988,21 @@ /obj/effect/spawner/random/trash, /turf/open/floor/plating, /area/station/maintenance/port/fore) +"wOS" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/landmark/navigate_destination/disposals, +/turf/open/floor/iron, +/area/station/maintenance/hallway/abandoned_command) +"wOZ" = ( +/obj/effect/decal/cleanable/molten_object, +/obj/effect/landmark/event_spawn, +/obj/structure/table, +/turf/open/floor/iron/dark, +/area/station/commons/storage/tools) "wPd" = ( /turf/closed/wall/r_wall, /area/station/maintenance/starboard/lesser) @@ -70907,10 +70018,6 @@ }, /turf/open/floor/iron/dark, /area/station/security/interrogation) -"wPf" = ( -/obj/item/clothing/glasses/blindfold, -/turf/open/space/basic, -/area/space) "wPh" = ( /obj/structure/disposalpipe/trunk{ dir = 8 @@ -70979,6 +70086,20 @@ }, /turf/open/floor/iron, /area/station/medical/chemistry) +"wPX" = ( +/obj/structure/cable, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/structure/chair/office{ + dir = 4 + }, +/obj/effect/turf_decal/siding/purple{ + dir = 8 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/command/heads_quarters/rd) "wQa" = ( /obj/effect/turf_decal/stripes/corner{ dir = 8 @@ -70988,6 +70109,11 @@ /obj/structure/sign/warning/directional/north, /turf/open/floor/iron, /area/station/engineering/atmospherics_engine) +"wQc" = ( +/obj/structure/chair/stool/bar/directional/south, +/obj/effect/turf_decal/siding/wood, +/turf/open/floor/wood, +/area/station/service/abandoned_gambling_den) "wQi" = ( /obj/machinery/atmospherics/pipe/smart/simple/cyan/hidden{ dir = 4 @@ -71009,6 +70135,12 @@ }, /turf/open/floor/iron/dark, /area/station/science/genetics) +"wQn" = ( +/obj/structure/closet{ + name = "Evidence Closet 4" + }, +/turf/open/floor/iron/smooth, +/area/station/security/evidence) "wQx" = ( /obj/effect/spawner/random/structure/closet_maintenance, /obj/effect/spawner/random/maintenance, @@ -71088,27 +70220,6 @@ /obj/machinery/atmospherics/components/unary/outlet_injector/monitored/ordnance_freezer_chamber_input, /turf/open/floor/engine/vacuum, /area/station/science/ordnance/freezerchamber) -"wRq" = ( -/obj/machinery/atmospherics/components/trinary/filter{ - dir = 4 - }, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/iron/dark, -/area/station/science/ordnance/testlab) -"wRD" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/red/opposingcorners, -/obj/effect/turf_decal/tile/blue/opposingcorners{ - dir = 8 - }, -/obj/machinery/firealarm/directional/north, -/turf/open/floor/iron/smooth, -/area/station/service/greenroom) -"wRL" = ( -/obj/effect/spawner/structure/window, -/turf/open/floor/plating, -/area/station/service/hydroponics/garden) "wRN" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment, @@ -71119,6 +70230,20 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) +"wRO" = ( +/obj/machinery/door/airlock{ + name = "Maintenance" + }, +/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/central/greater) "wRP" = ( /obj/machinery/camera/directional/south{ c_tag = "Atmospherics - South" @@ -71161,6 +70286,12 @@ }, /turf/open/floor/iron/white/corner, /area/station/hallway/primary/aft) +"wSi" = ( +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/turf/open/floor/iron/dark, +/area/station/cargo/office) "wSF" = ( /obj/effect/turf_decal/tile/blue/anticorner/contrasted{ dir = 8 @@ -71192,17 +70323,6 @@ /obj/effect/spawner/random/techstorage/engineering_all, /turf/open/floor/iron, /area/station/engineering/storage/tech) -"wSM" = ( -/obj/structure/disposalpipe/junction/flip{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/machinery/light/cold/directional/north, -/turf/open/floor/iron, -/area/station/hallway/secondary/recreation) "wSZ" = ( /turf/closed/wall/r_wall, /area/station/maintenance/hallway/abandoned_command) @@ -71229,11 +70349,6 @@ /obj/structure/tank_dispenser, /turf/open/floor/plating, /area/station/hallway/secondary/dock) -"wTu" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/broken_flooring/pile/directional/east, -/turf/open/floor/plating, -/area/station/commons/dorms) "wTH" = ( /obj/effect/turf_decal/tile/blue{ dir = 4 @@ -71337,18 +70452,27 @@ }, /turf/open/floor/iron, /area/station/security) -"wUZ" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ +"wUc" = ( +/obj/machinery/light/small/directional/east, +/obj/structure/sign/poster/official/random/directional/north, +/obj/effect/turf_decal/siding/wood/end{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 +/turf/open/floor/wood, +/area/station/hallway/primary/central/aft) +"wUS" = ( +/obj/structure/window/reinforced/spawner/directional/north, +/obj/effect/turf_decal/stripes/line{ + dir = 1 }, -/turf/open/floor/iron, -/area/station/hallway/secondary/recreation) +/obj/machinery/conveyor_switch/oneway{ + dir = 4; + id = "garbage"; + name = "trash chute" + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/white/small, +/area/station/service/janitor) "wVg" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/landmark/event_spawn, @@ -71365,45 +70489,11 @@ /obj/machinery/light/small/directional/north, /turf/open/floor/iron/small, /area/station/engineering/atmos) -"wVs" = ( -/obj/machinery/computer/security/telescreen/interrogation{ - name = "reflection room monitor"; - network = list("isolation"); - pixel_y = 31 - }, -/obj/effect/turf_decal/stripes/white/corner{ - dir = 1 - }, -/obj/item/kirbyplants/random, -/obj/machinery/firealarm/directional/east, -/obj/machinery/button/flasher{ - id = "IsolationFlash"; - pixel_x = 28; - pixel_y = 28 - }, -/turf/open/floor/iron/dark/small, -/area/station/security/execution/education) "wVI" = ( /obj/machinery/biogenerator, /obj/machinery/light/small/dim/directional/north, /turf/open/floor/plating, /area/station/maintenance/department/prison) -"wVZ" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/structure/extinguisher_cabinet/directional/south, -/turf/open/floor/iron, -/area/station/hallway/primary/central/fore) -"wWa" = ( -/obj/structure/flora/bush/flowers_pp/style_random, -/obj/effect/landmark/event_spawn, -/turf/open/floor/grass, -/area/station/service/chapel) "wWb" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/green/visible, /obj/structure/railing{ @@ -71412,10 +70502,6 @@ /obj/machinery/meter, /turf/open/floor/iron/small, /area/station/engineering/supermatter/room) -"wWc" = ( -/obj/effect/spawner/structure/window, -/turf/open/floor/plating, -/area/station/commons/dorms) "wWs" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -71430,13 +70516,30 @@ dir = 1 }, /area/station/hallway/secondary/construction) +"wWC" = ( +/obj/structure/chair/comfy/brown{ + dir = 4 + }, +/obj/effect/landmark/start/librarian, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/grimy, +/area/station/service/library) +"wWD" = ( +/obj/effect/turf_decal/tile/neutral, +/obj/effect/landmark/start/hangover, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/hallway/primary/central/fore) "wWP" = ( /obj/effect/turf_decal/stripes/line, /obj/machinery/atmospherics/pipe/smart/simple/yellow/visible{ dir = 10 }, /obj/effect/decal/cleanable/dirt/dust, -/obj/effect/landmark/start/atmospheric_technician, /turf/open/floor/iron, /area/station/engineering/atmos) "wWR" = ( @@ -71450,16 +70553,11 @@ "wWS" = ( /turf/open/floor/iron, /area/station/security/prison) -"wWT" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/port) +"wWU" = ( +/obj/structure/cable, +/obj/effect/spawner/random/trash, +/turf/open/floor/plating, +/area/station/maintenance/department/science/xenobiology) "wWX" = ( /obj/effect/turf_decal/tile/red/anticorner/contrasted{ dir = 4 @@ -71480,6 +70578,16 @@ /obj/structure/reagent_dispensers/wall/peppertank/directional/east, /turf/open/floor/iron/smooth, /area/station/security/checkpoint/customs/auxiliary) +"wXe" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/dark_red/fourcorners, +/obj/effect/turf_decal/siding/wideplating/dark{ + dir = 1 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/station/security/brig/entrance) "wXg" = ( /obj/structure/disposalpipe/trunk, /obj/structure/window/reinforced/spawner/directional/east, @@ -71504,26 +70612,12 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/catwalk_floor/iron_dark, /area/station/security/processing) -"wXt" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/commons) "wXC" = ( /obj/effect/turf_decal/siding/red{ dir = 5 }, /turf/open/floor/iron/small, /area/station/security/brig) -"wXO" = ( -/obj/structure/disposalpipe/segment{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/port) "wXV" = ( /obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ dir = 4 @@ -71544,32 +70638,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/engineering/storage/tech) -"wYo" = ( -/obj/structure/table, -/obj/effect/spawner/random/entertainment/dice, -/obj/effect/landmark/event_spawn, -/turf/open/floor/iron, -/area/station/commons) -"wYq" = ( -/obj/structure/table, -/obj/item/food/meat/rawbacon{ - pixel_y = 14 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/commons) -"wYr" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/port) "wYv" = ( /obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ dir = 9 @@ -71583,31 +70651,11 @@ "wYA" = ( /turf/closed/wall/r_wall, /area/station/medical/chemistry) -"wYC" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +"wYH" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/station/commons) -"wYD" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/landmark/navigate_destination/hop, -/turf/open/floor/iron, -/area/station/hallway/primary/central/fore) -"wYF" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/item/grown/bananapeel, -/obj/effect/turf_decal/tile/green/diagonal_centre, -/turf/open/floor/iron/diagonal, -/area/station/hallway/primary/central/aft) +/turf/open/floor/iron/herringbone, +/area/station/commons/dorms) "wYK" = ( /obj/structure/window/reinforced/spawner/directional/east, /obj/effect/turf_decal/siding/wideplating{ @@ -71615,33 +70663,6 @@ }, /turf/open/misc/sandy_dirt, /area/station/security/tram) -"wYM" = ( -/obj/structure/dresser, -/obj/effect/turf_decal/siding/thinplating_new/light{ - dir = 8 - }, -/obj/machinery/airalarm/directional/west, -/turf/open/floor/iron/small, -/area/station/commons/fitness/locker_room) -"wYV" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/power/apc/auto_name/directional/south, -/obj/effect/turf_decal/tile/green/diagonal_centre, -/turf/open/floor/iron/diagonal, -/area/station/hallway/primary/central/aft) -"wYW" = ( -/obj/structure/cable, -/obj/effect/turf_decal/siding/red{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/white/small, -/area/station/security/warden) "wZa" = ( /obj/docking_port/stationary{ dir = 8; @@ -71662,15 +70683,6 @@ }, /turf/open/floor/catwalk_floor/iron_smooth, /area/station/hallway/secondary/exit/departure_lounge) -"wZd" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/dark_red/opposingcorners, -/obj/machinery/camera/autoname/directional/west, -/obj/machinery/light/small/directional/west, -/turf/open/floor/iron, -/area/station/security/brig/entrance) "wZk" = ( /obj/effect/turf_decal/stripes/line{ dir = 10 @@ -71683,16 +70695,6 @@ "wZl" = ( /turf/closed/wall, /area/station/commons) -"wZo" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/green/diagonal_centre, -/turf/open/floor/iron/diagonal, -/area/station/hallway/primary/central/aft) "wZp" = ( /obj/effect/turf_decal/arrows{ dir = 8 @@ -71708,6 +70710,18 @@ }, /turf/open/floor/iron/dark/small, /area/station/maintenance/department/engine/atmos) +"wZx" = ( +/obj/machinery/door/airlock/vault{ + name = "Vault" + }, +/obj/effect/mapping_helpers/airlock/access/all/supply/vault, +/obj/effect/mapping_helpers/airlock/locked, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/door/firedoor, +/turf/open/floor/iron/dark/herringbone, +/area/station/hallway/primary/central/aft) "wZA" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable, @@ -71716,33 +70730,12 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/maintenance/starboard/central) -"wZE" = ( -/obj/structure/disposalpipe/junction, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/starboard) "wZF" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment, /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/maintenance/port/fore) -"wZI" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/chair/sofa/bench/right{ - dir = 4 - }, -/obj/item/radio/intercom/directional/south, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/turf/open/floor/iron/white/corner{ - dir = 1 - }, -/area/station/hallway/secondary/entry) "wZO" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/item/radio/intercom/directional/north, @@ -71751,11 +70744,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/starboard) -"wZP" = ( -/obj/effect/decal/cleanable/glass, -/obj/structure/bed/maint, -/turf/open/floor/eighties/red, -/area/station/service/abandoned_gambling_den/gaming) "wZS" = ( /obj/machinery/status_display/evac/directional/east, /obj/effect/turf_decal/tile/red{ @@ -71763,31 +70751,10 @@ }, /turf/open/floor/iron/white/corner, /area/station/hallway/secondary/exit/departure_lounge) -"wZX" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/chair/stool/directional/south, -/obj/effect/turf_decal/siding/red{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/landmark/start/security_officer, -/obj/structure/cable, -/turf/open/floor/iron/small, -/area/station/security/office) "xae" = ( /obj/structure/grille, /turf/closed/wall/mineral/titanium/nodiagonal, /area/station/engineering/atmos) -"xaj" = ( -/obj/machinery/light/cold/directional/west, -/obj/effect/decal/cleanable/dirt, -/obj/effect/spawner/random/entertainment/arcade{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/commons/fitness/recreation/entertainment) "xam" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -71897,13 +70864,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/maintenance/department/prison) -"xbw" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/turf/open/floor/iron/dark/small, -/area/station/tcommsat/server) "xbC" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/sign/poster/official/random/directional/north, @@ -71912,28 +70872,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/starboard) -"xbO" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/door/airlock/public{ - name = "Locker Room" - }, -/obj/machinery/door/firedoor, -/turf/open/floor/iron/textured_half, -/area/station/commons/fitness/locker_room) -"xbP" = ( -/obj/structure/cable, -/obj/machinery/door/airlock/public/glass{ - name = "Vault Storage" - }, -/obj/effect/mapping_helpers/airlock/access/all/supply/vault, -/obj/effect/mapping_helpers/airlock/cyclelink_helper, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/catwalk_floor, -/area/station/hallway/secondary/spacebridge) "xbR" = ( /obj/effect/turf_decal/tile/neutral/fourcorners, /obj/structure/hedge, @@ -71983,6 +70921,12 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/station/maintenance/starboard/greater) +"xcK" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/closed/wall, +/area/station/hallway/primary/central/aft) "xcS" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -72047,24 +70991,6 @@ }, /turf/open/floor/iron/white/corner, /area/station/hallway/secondary/exit/departure_lounge) -"xdD" = ( -/obj/structure/disposalpipe/segment{ - dir = 10 - }, -/obj/structure/sink/directional/west, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 8 - }, -/obj/machinery/camera/autoname/directional/north, -/obj/machinery/light/cold/directional/north, -/turf/open/floor/iron/dark/small, -/area/station/service/chapel/storage) -"xdE" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/white/side{ - dir = 4 - }, -/area/station/science/research) "xdJ" = ( /obj/machinery/door/airlock/engineering{ name = "Engine Airlock" @@ -72105,13 +71031,6 @@ }, /turf/open/floor/engine, /area/station/engineering/atmos) -"xen" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/plating, -/area/station/maintenance/port/greater) "xeo" = ( /obj/structure/window/spawner/directional/south, /obj/structure/lattice, @@ -72212,6 +71131,17 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/science/research) +"xfe" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central/fore) "xff" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -72222,6 +71152,22 @@ /obj/machinery/door/firedoor, /turf/open/floor/catwalk_floor/flat_white, /area/station/science/server) +"xfm" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/dark_red/half/contrasted{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wideplating/dark{ + dir = 8 + }, +/obj/structure/disposalpipe/sorting/mail/flip{ + dir = 1 + }, +/obj/effect/mapping_helpers/mail_sorting/security/hos_office, +/turf/open/floor/iron, +/area/station/security) "xfu" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/simple/general/visible{ @@ -72247,13 +71193,6 @@ }, /turf/open/floor/iron/smooth, /area/station/engineering/break_room) -"xfB" = ( -/mob/living/simple_animal/bot/firebot, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/holopad, -/turf/open/floor/iron/smooth_large, -/area/station/engineering/storage_shared) "xfH" = ( /obj/machinery/portable_atmospherics/canister/air, /turf/open/floor/iron, @@ -72266,24 +71205,6 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/security) -"xfP" = ( -/obj/structure/disposalpipe/segment{ - dir = 5 - }, -/obj/structure/chair/comfy/black{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/landmark/start/chaplain, -/turf/open/floor/carpet/lone, -/area/station/service/chapel/office) -"xfU" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/carpet/lone, -/area/station/service/chapel/office) "xfV" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -72297,6 +71218,19 @@ }, /turf/open/floor/iron/dark/small, /area/station/medical/chemistry) +"xfX" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/stripes/red/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/red/line, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/small, +/area/station/hallway/primary/central/fore) "xgg" = ( /obj/structure/chair{ pixel_y = -2 @@ -72315,6 +71249,18 @@ /obj/machinery/airalarm/directional/west, /turf/open/floor/iron/white, /area/station/security/medical) +"xgy" = ( +/obj/effect/turf_decal/siding/wideplating/dark{ + dir = 8 + }, +/obj/structure/table/wood, +/obj/item/stack/spacecash/c10{ + pixel_y = 9; + pixel_x = 5 + }, +/obj/machinery/computer/security/telescreen/entertainment/directional/west, +/turf/open/floor/iron/small, +/area/station/service/barber) "xgz" = ( /obj/effect/spawner/random/trash/graffiti{ pixel_x = 32; @@ -72334,85 +71280,38 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/port) -"xgK" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/carpet/lone, -/area/station/service/chapel/office) -"xgN" = ( -/obj/structure/disposalpipe/segment{ - dir = 6 - }, -/obj/machinery/holopad, -/obj/effect/turf_decal/trimline/neutral/line, -/obj/effect/turf_decal/trimline/neutral/line{ - dir = 1 +"xhk" = ( +/obj/machinery/door/airlock/public/glass{ + name = "Public Shrine" }, -/turf/open/floor/iron, -/area/station/hallway/primary/port) -"xhe" = ( -/obj/structure/disposalpipe/segment{ +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/siding/wood/end{ dir = 4 }, -/obj/effect/turf_decal/trimline/neutral/line, -/obj/effect/turf_decal/trimline/neutral/line{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/port) -"xhj" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 +/turf/open/floor/stone, +/area/station/hallway/primary/central/fore) +"xhD" = ( +/obj/structure/table, +/obj/item/clothing/shoes/ducky_shoes{ + pixel_x = 1; + pixel_y = 8 }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/wood, -/area/station/service/chapel/office) -"xhA" = ( +/turf/open/floor/iron/dark/small, +/area/station/commons/fitness/locker_room) +"xhG" = ( /obj/structure/disposalpipe/segment{ - dir = 4 + dir = 5 }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/siding/wood{ - dir = 8 - }, -/obj/effect/turf_decal/siding/wood{ - dir = 4 - }, -/obj/machinery/door/airlock/maintenance{ - name = "Crematorium" - }, -/obj/effect/mapping_helpers/airlock/access/all/service/chapel_office, -/turf/open/floor/iron/textured_half{ - dir = 8 - }, -/area/station/service/chapel/storage) -"xhH" = ( -/obj/structure/disposalpipe/sorting/mail/flip{ - dir = 1 - }, -/obj/effect/mapping_helpers/mail_sorting/service/chapel, -/obj/effect/turf_decal/trimline/neutral/line, -/obj/effect/turf_decal/trimline/neutral/line{ - dir = 1 - }, +/obj/effect/landmark/navigate_destination/lawyer, /turf/open/floor/iron, -/area/station/hallway/primary/port) +/area/station/hallway/secondary/recreation) "xhM" = ( /obj/structure/table, /obj/item/book/manual/wiki/tcomms, /turf/open/floor/circuit, /area/station/tcommsat/server) -"xhQ" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 6 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/station/maintenance/central/greater) "xhU" = ( /obj/structure/flora/bush/large/style_random{ pixel_x = -18; @@ -72457,14 +71356,6 @@ /obj/machinery/airalarm/directional/west, /turf/open/floor/iron/cafeteria, /area/station/security/prison/mess) -"xiA" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/airalarm/directional/north, -/turf/open/floor/iron/dark/small, -/area/station/service/chapel/storage) "xiE" = ( /turf/closed/wall/r_wall, /area/station/medical/virology) @@ -72476,13 +71367,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/port) -"xiL" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/duct, -/turf/open/floor/iron/cafeteria, -/area/station/service/kitchen) "xiN" = ( /obj/machinery/door/window/left/directional/north{ name = "Equipment Storage"; @@ -72505,6 +71389,17 @@ }, /turf/open/floor/iron/large, /area/station/ai_monitored/command/storage/eva) +"xiS" = ( +/obj/effect/turf_decal/trimline/neutral/line, +/obj/effect/turf_decal/trimline/neutral/line{ + dir = 1 + }, +/obj/structure/disposalpipe/segment, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/port) "xiT" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -72532,17 +71427,6 @@ "xjg" = ( /turf/open/floor/iron/dark, /area/station/security/interrogation) -"xjh" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 9 - }, -/obj/effect/turf_decal/trimline/neutral/line, -/obj/effect/turf_decal/trimline/neutral/line{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/port) "xjo" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -72554,18 +71438,19 @@ dir = 8 }, /area/station/science/lower) -"xjq" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/power/apc/auto_name/directional/north, -/turf/open/floor/plating, -/area/station/maintenance/central/greater) "xjz" = ( /turf/closed/wall/r_wall, /area/station/security/prison/garden) +"xjC" = ( +/obj/structure/railing/corner{ + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/obj/effect/landmark/start/hangover, +/turf/open/floor/iron, +/area/station/commons/dorms) "xjE" = ( /obj/effect/turf_decal/stripes/white/line{ dir = 8 @@ -72574,11 +71459,6 @@ /obj/structure/tram, /turf/open/floor/tram, /area/station/security/tram) -"xjG" = ( -/obj/effect/decal/cleanable/dirt, -/obj/item/radio/intercom/prison/directional/north, -/turf/open/floor/iron, -/area/station/security/prison/work) "xjT" = ( /obj/machinery/door/airlock/external{ name = "Construction Zone" @@ -72622,16 +71502,6 @@ /obj/effect/spawner/random/trash, /turf/open/floor/plating, /area/station/maintenance/fore/lesser) -"xkg" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/siding/wideplating/dark{ - dir = 1 - }, -/obj/effect/turf_decal/tile/dark_red/half/contrasted, -/turf/open/floor/iron, -/area/station/security/brig/entrance) "xkn" = ( /obj/structure/steam_vent, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -72641,6 +71511,14 @@ "xkt" = ( /turf/closed/wall/r_wall, /area/station/ai_monitored/security/armory) +"xkv" = ( +/obj/effect/turf_decal/siding/wood, +/obj/structure/closet/l3closet/janitor, +/obj/item/clothing/gloves/color/orange, +/obj/item/clothing/shoes/galoshes, +/obj/structure/sign/poster/official/random/directional/north, +/turf/open/floor/iron/small, +/area/station/commons) "xkK" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -72656,10 +71534,6 @@ /obj/item/kirbyplants/random, /turf/open/floor/iron/white, /area/station/science/cytology) -"xkS" = ( -/obj/structure/disposalpipe/segment, -/turf/open/floor/plating, -/area/station/maintenance/central/greater) "xkU" = ( /obj/effect/turf_decal/siding/thinplating_new/terracotta{ dir = 9 @@ -72667,16 +71541,6 @@ /obj/machinery/power/shieldwallgen, /turf/open/floor/iron/smooth_large, /area/station/command/teleporter) -"xkW" = ( -/obj/effect/turf_decal/tile/red/opposingcorners, -/obj/effect/turf_decal/tile/blue/opposingcorners{ - dir = 8 - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 - }, -/turf/open/floor/iron/smooth, -/area/station/service/greenroom) "xkX" = ( /obj/effect/turf_decal/tile/yellow/diagonal_centre, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -72685,22 +71549,6 @@ /obj/machinery/holopad, /turf/open/floor/iron/diagonal, /area/station/engineering/lobby) -"xla" = ( -/obj/structure/toilet{ - dir = 8 - }, -/obj/machinery/button/door/directional/west{ - id = "Toilet2"; - name = "Lock Control"; - normaldoorcontrol = 1; - pixel_x = 0; - pixel_y = 24; - specialfunctions = 4 - }, -/obj/machinery/light/small/directional/east, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/iron/showroomfloor, -/area/station/commons/toilet/restrooms) "xle" = ( /turf/closed/wall, /area/station/security/detectives_office) @@ -72736,9 +71584,6 @@ /obj/structure/cable/multilayer, /turf/open/floor/plating, /area/station/science/xenobiology) -"xlP" = ( -/turf/open/floor/engine, -/area/station/science/xenobiology) "xlZ" = ( /turf/open/floor/iron, /area/station/maintenance/hallway/abandoned_command) @@ -72763,13 +71608,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/maintenance/starboard/greater) -"xms" = ( -/obj/effect/turf_decal/siding/red{ - dir = 6 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/small, -/area/station/security/office) "xmt" = ( /turf/closed/wall, /area/station/service/kitchen) @@ -72785,20 +71623,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central/fore) -"xmy" = ( -/obj/machinery/light/small/directional/south, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/commons/dorms) -"xmD" = ( -/obj/structure/cable, -/obj/effect/mapping_helpers/broken_floor, -/obj/effect/spawner/random/trash, -/turf/open/floor/plating, -/area/station/maintenance/department/science/xenobiology) "xmI" = ( /obj/structure/closet/firecloset, /turf/open/floor/plating, @@ -72812,18 +71636,18 @@ "xmO" = ( /turf/closed/wall/r_wall, /area/station/maintenance/fore/greater) -"xmX" = ( -/obj/effect/mapping_helpers/broken_floor, -/obj/machinery/light/small/directional/east, -/obj/effect/turf_decal/stripes/red/line{ +"xnb" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/turf_decal/siding/thinplating_new/light{ + dir = 6 + }, +/obj/structure/disposalpipe/segment{ dir = 4 }, -/turf/open/floor/iron/smooth_large, -/area/station/science/auxlab/firing_range) -"xnd" = ( -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/iron/white, -/area/station/maintenance/central/greater) +/turf/open/floor/iron/white/small, +/area/station/service/hydroponics) "xng" = ( /obj/structure/disposalpipe/trunk, /obj/machinery/disposal/delivery_chute{ @@ -72838,6 +71662,19 @@ /obj/effect/turf_decal/delivery/white, /turf/open/floor/iron, /area/station/cargo/sorting) +"xnk" = ( +/obj/structure/cable, +/obj/effect/turf_decal/siding/wood, +/turf/open/floor/wood/tile, +/area/station/service/lawoffice) +"xno" = ( +/obj/effect/turf_decal/tile/red/opposingcorners, +/obj/effect/turf_decal/tile/blue/opposingcorners{ + dir = 8 + }, +/obj/machinery/airalarm/directional/south, +/turf/open/floor/iron/smooth, +/area/station/service/greenroom) "xnA" = ( /obj/effect/spawner/structure/window/reinforced/plasma, /obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible, @@ -72902,15 +71739,6 @@ "xol" = ( /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/ai_upload) -"xoo" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/south, -/turf/open/floor/iron/smooth, -/area/station/security/evidence) "xoz" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/components/unary/portables_connector/visible{ @@ -72918,12 +71746,6 @@ }, /turf/open/floor/iron, /area/station/engineering/atmos) -"xoB" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/white/side{ - dir = 4 - }, -/area/station/science/xenobiology) "xoJ" = ( /obj/effect/turf_decal/tile/neutral/fourcorners, /obj/structure/tank_holder/extinguisher, @@ -72972,16 +71794,6 @@ "xpf" = ( /turf/closed/wall/mineral/titanium/nodiagonal, /area/station/maintenance/disposal/incinerator) -"xpg" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/gulag_item_reclaimer{ - pixel_y = 24 - }, -/turf/open/floor/iron/dark, -/area/station/security/processing) "xpl" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -73014,15 +71826,6 @@ /obj/item/gavelhammer, /turf/open/floor/iron, /area/station/security/courtroom) -"xpE" = ( -/obj/effect/turf_decal/siding/green{ - dir = 10 - }, -/obj/effect/mapping_helpers/broken_floor, -/obj/structure/chair/stool/directional/south, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark/herringbone, -/area/station/service/abandoned_gambling_den/gaming) "xpJ" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -73031,6 +71834,10 @@ /obj/machinery/camera/autoname/directional/east, /turf/open/floor/iron, /area/station/hallway/primary/aft) +"xpL" = ( +/obj/structure/disposalpipe/segment, +/turf/closed/wall, +/area/station/maintenance/hallway/abandoned_command) "xpR" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/simple/purple/visible{ @@ -73041,13 +71848,6 @@ /obj/machinery/power/apc/auto_name/directional/south, /turf/open/floor/iron/dark, /area/station/science/ordnance) -"xpT" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 1 - }, -/obj/structure/flora/bush/flowers_br/style_random, -/turf/open/floor/grass, -/area/station/service/chapel) "xpU" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -73077,13 +71877,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/station/engineering/storage/tech) -"xqa" = ( -/obj/structure/cable, -/obj/item/kirbyplants/organic/applebush, -/obj/machinery/power/apc/auto_name/directional/east, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/iron/dark/smooth_large, -/area/station/command/bridge) "xqd" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/light/small/broken/directional/east, @@ -73145,6 +71938,20 @@ "xqW" = ( /turf/closed/wall/r_wall, /area/station/hallway/primary/starboard) +"xqX" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/commons/fitness/locker_room) +"xrc" = ( +/obj/machinery/door/airlock{ + name = "Maintenance" + }, +/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/central/lesser) "xri" = ( /obj/effect/turf_decal/stripes/corner{ dir = 4 @@ -73157,12 +71964,6 @@ /obj/structure/cable, /turf/open/floor/iron/smooth_edge, /area/station/engineering/supermatter/room) -"xrk" = ( -/obj/effect/turf_decal/tile/dark_red/opposingcorners, -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/security/processing) "xrm" = ( /obj/machinery/atmospherics/pipe/smart/simple/orange/visible, /obj/effect/turf_decal/stripes/line, @@ -73185,14 +71986,6 @@ /obj/machinery/light/small/directional/west, /turf/open/floor/iron/white, /area/station/medical/medbay/lobby) -"xrz" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/stairs{ - dir = 8 - }, -/area/station/service/theater) "xrA" = ( /obj/structure/sign/warning/pods/directional/west, /turf/open/floor/plating, @@ -73205,21 +71998,35 @@ }, /turf/open/floor/iron/white, /area/station/medical/medbay/central) -"xrP" = ( -/obj/effect/mapping_helpers/broken_floor, -/obj/effect/spawner/random/engineering/atmospherics_portable, -/turf/open/floor/plating, -/area/station/maintenance/department/science/xenobiology) -"xrX" = ( +"xrE" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/landmark/navigate_destination/vault, +/obj/effect/turf_decal/tile/neutral, +/turf/open/floor/iron, +/area/station/hallway/primary/central/aft) +"xrN" = ( +/obj/structure/railing{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/simple/cyan/hidden{ + dir = 4 + }, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/door/window/right/directional/south{ - layer = 3.1; - name = "Upload Console Window"; - req_access = list("ai_upload") +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/requests_console/directional/north{ + department = "Chief Engineer's Desk"; + name = "Chief Engineer's Requests Console"; + pixel_y = -32; + pixel_x = 2 }, -/turf/open/floor/iron/dark, -/area/station/ai_monitored/turret_protected/ai_upload) +/obj/effect/mapping_helpers/requests_console/announcement, +/obj/effect/mapping_helpers/requests_console/information, +/turf/open/floor/iron/stairs/old{ + dir = 4 + }, +/area/station/command/heads_quarters/ce) "xrZ" = ( /obj/structure/disposalpipe/segment{ dir = 9 @@ -73268,12 +72075,29 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/smooth, /area/station/maintenance/department/medical/central) -"xsm" = ( +"xso" = ( +/obj/machinery/shower/directional/east, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 9 + }, +/turf/open/floor/iron/showroomfloor, +/area/station/commons/dorms) +"xsC" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/extinguisher_cabinet/directional/west, +/obj/structure/cable, +/turf/open/floor/iron/herringbone, +/area/station/commons/dorms) +"xsD" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/window/spawner/directional/west, /obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/smooth, -/area/station/hallway/secondary/command) +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/port/greater) "xsF" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -73363,14 +72187,15 @@ }, /turf/open/floor/iron/checker, /area/station/security/breakroom) -"xtg" = ( -/obj/effect/turf_decal/siding/red{ +"xtD" = ( +/obj/effect/turf_decal/siding/wood/corner{ dir = 8 }, -/obj/machinery/light_switch/directional/west, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/small, -/area/station/security/office) +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/turf/open/floor/stone, +/area/station/service/bar) "xtI" = ( /turf/closed/wall/r_wall, /area/station/science/breakroom) @@ -73396,15 +72221,6 @@ "xtW" = ( /turf/open/floor/engine/vacuum, /area/station/science/ordnance/burnchamber) -"xtZ" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/starboard) "xug" = ( /obj/machinery/atmospherics/components/unary/thermomachine/freezer, /obj/effect/turf_decal/tile/brown/opposingcorners, @@ -73465,6 +72281,18 @@ /obj/structure/window/reinforced/spawner/directional/west, /turf/open/space/basic, /area/space/nearstation) +"xuJ" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central/aft) +"xuN" = ( +/obj/effect/turf_decal/tile/yellow/anticorner/contrasted, +/obj/machinery/chem_dispenser, +/obj/machinery/light/small/directional/south, +/turf/open/floor/iron/dark, +/area/station/medical/pharmacy) "xuO" = ( /obj/structure/disposalpipe/segment, /obj/structure/disposalpipe/segment{ @@ -73472,10 +72300,14 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/starboard) -"xuU" = ( -/obj/effect/turf_decal/tile/neutral, -/turf/open/floor/iron, -/area/station/hallway/primary/port) +"xuQ" = ( +/obj/machinery/washing_machine, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/obj/machinery/camera/autoname/directional/south, +/turf/open/floor/iron/cafeteria, +/area/station/commons/dorms) "xuW" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -73549,12 +72381,36 @@ }, /turf/closed/wall, /area/station/cargo/miningfoundry) +"xvK" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/red/opposingcorners, +/obj/effect/turf_decal/tile/blue/opposingcorners{ + dir = 8 + }, +/obj/structure/cable, +/turf/open/floor/iron/smooth, +/area/station/service/greenroom) +"xvM" = ( +/obj/effect/turf_decal/tile/neutral, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/hallway/secondary/recreation) "xvT" = ( /turf/closed/wall/r_wall, /area/station/ai_monitored/turret_protected/aisat/maint) -"xvW" = ( -/turf/closed/wall, -/area/station/service/theater) +"xvV" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/trash, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "xwd" = ( /obj/structure/rack, /obj/item/storage/toolbox/emergency, @@ -73610,10 +72466,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/maintenance/starboard/lesser) -"xwy" = ( -/obj/machinery/light/small/directional/west, -/turf/open/floor/plating, -/area/station/maintenance/fore/greater) "xwz" = ( /turf/closed/wall, /area/station/cargo/miningfoundry) @@ -73643,23 +72495,19 @@ /obj/structure/bed/maint, /turf/open/floor/plating, /area/station/maintenance/starboard/central) -"xwT" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/airalarm/directional/west, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/security/prison/work) "xxa" = ( /obj/machinery/atmospherics/components/unary/outlet_injector/monitored/ordnance_burn_chamber_input, /turf/open/floor/engine/vacuum, /area/station/science/ordnance/burnchamber) -"xxn" = ( -/obj/machinery/atmospherics/components/binary/tank_compressor, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/iron/dark, -/area/station/science/ordnance/testlab) +"xxj" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 1 + }, +/obj/structure/flora/bush/jungle/a, +/obj/machinery/light/small/directional/north, +/obj/machinery/status_display/ai/directional/north, +/turf/open/floor/grass, +/area/station/service/chapel) "xxo" = ( /obj/structure/lattice/catwalk, /obj/structure/marker_beacon/yellow, @@ -73681,21 +72529,10 @@ /obj/machinery/light/small/directional/west, /turf/open/floor/iron, /area/station/maintenance/starboard/greater) -"xxE" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/door/airlock/maintenance{ - name = "Crematorium" - }, -/obj/machinery/door/firedoor, -/obj/effect/mapping_helpers/airlock/access/all/security/general, -/turf/open/floor/iron/textured_half{ - dir = 8 - }, -/area/station/security/brig/entrance) +"xxD" = ( +/obj/structure/closet/secure_closet/personal, +/turf/open/floor/iron, +/area/station/commons/fitness/locker_room) "xxL" = ( /obj/effect/turf_decal/tile/dark_red/opposingcorners, /turf/open/floor/iron/checker{ @@ -73707,47 +72544,14 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/command/heads_quarters/hos) -"xxR" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/tile/dark_red/half/contrasted{ - dir = 4 - }, -/obj/effect/turf_decal/siding/wideplating/dark/corner{ - dir = 4 - }, +"xxT" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/security/brig/entrance) -"xxV" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/tile/dark_red/fourcorners, -/obj/effect/turf_decal/siding/wideplating/dark/corner{ - dir = 1 - }, /obj/effect/decal/cleanable/dirt, -/obj/machinery/power/apc/auto_name/directional/north, -/turf/open/floor/iron, -/area/station/security/brig/entrance) -"xye" = ( /obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/dark_red/fourcorners, -/obj/machinery/holopad, -/obj/effect/landmark/event_spawn, -/turf/open/floor/iron, -/area/station/security/brig/entrance) +/turf/open/floor/plating, +/area/station/maintenance/port/greater) "xyh" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -73785,16 +72589,40 @@ }, /turf/open/floor/iron/white/textured_large, /area/station/medical/medbay/lobby) +"xym" = ( +/obj/machinery/door/airlock{ + name = "Maintenance" + }, +/obj/effect/mapping_helpers/airlock/access/any/service/general, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plating, +/area/station/maintenance/central/greater) +"xyt" = ( +/obj/effect/turf_decal/weather/dirt, +/obj/structure/flora/bush/flowers_yw, +/turf/open/floor/grass, +/area/station/service/chapel) "xyx" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 8 }, /turf/open/floor/iron/dark, /area/station/security/interrogation) -"xyJ" = ( -/obj/structure/disposalpipe/segment, +"xyM" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/navbeacon{ + codes_txt = "patrol;next_patrol=23.2-Evac-Garden"; + location = "23.4-Evac" + }, +/obj/structure/disposalpipe/junction/flip{ + dir = 2 + }, /turf/open/floor/iron, -/area/station/hallway/primary/central/fore) +/area/station/hallway/secondary/exit/departure_lounge) "xyQ" = ( /obj/structure/cable, /obj/machinery/light_switch/directional/south, @@ -73808,15 +72636,14 @@ /obj/machinery/door/firedoor, /turf/open/floor/catwalk_floor, /area/station/hallway/secondary/entry) -"xyY" = ( -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/structure/displaycase/trophy, -/turf/open/floor/iron/smooth, -/area/station/service/library) -"xza" = ( -/obj/structure/window/reinforced/spawner/directional/west, -/turf/open/space/basic, -/area/space) +"xyZ" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/broken_flooring/pile/directional/east, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) "xzd" = ( /obj/structure/lattice, /obj/structure/railing/corner, @@ -73828,6 +72655,11 @@ }, /turf/open/floor/iron/small, /area/station/hallway/secondary/exit/departure_lounge) +"xzl" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating/elevatorshaft, +/area/station/commons/dorms) "xzm" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -73842,11 +72674,6 @@ }, /turf/open/floor/catwalk_floor/iron_smooth, /area/station/hallway/secondary/exit/departure_lounge) -"xzp" = ( -/obj/structure/window/reinforced/spawner/directional/west, -/obj/effect/landmark/start/hangover, -/turf/open/floor/wood/parquet, -/area/station/service/theater) "xzE" = ( /obj/structure/table, /obj/effect/turf_decal/tile/dark_red, @@ -73928,16 +72755,6 @@ /obj/structure/cable, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/ai_upload) -"xAP" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron, -/area/station/hallway/primary/port) "xAR" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -73978,6 +72795,16 @@ /obj/effect/mapping_helpers/airlock/cyclelink_helper, /turf/open/floor/plating, /area/station/engineering/atmos/space_catwalk) +"xBd" = ( +/obj/effect/turf_decal/plaque{ + icon_state = "L7"; + pixel_y = -15 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central/aft) "xBe" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, @@ -73986,11 +72813,16 @@ /obj/machinery/holopad, /turf/open/floor/iron/dark/smooth_large, /area/station/ai_monitored/turret_protected/ai_upload) -"xBr" = ( -/obj/structure/disposalpipe/segment, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/wood/parquet, -/area/station/service/library) +"xBp" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/status_display/ai/directional/south, +/turf/open/floor/iron, +/area/station/hallway/secondary/dock) "xBx" = ( /obj/structure/chair/sofa/bench/right{ dir = 4 @@ -74021,34 +72853,10 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/maintenance/department/engine) -"xBK" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/chair/office{ - dir = 1 - }, -/turf/open/floor/wood/parquet, -/area/station/service/library) "xBV" = ( /obj/effect/spawner/random/structure/chair_flipped, /turf/open/floor/plating, /area/station/maintenance/department/engine) -"xBY" = ( -/obj/effect/spawner/random/trash, -/turf/open/floor/plating, -/area/station/maintenance/aft) -"xBZ" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/door/firedoor, -/obj/effect/turf_decal/stripes/red/line{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/red/line{ - dir = 8 - }, -/turf/open/floor/iron/small, -/area/station/hallway/secondary/exit/departure_lounge) "xCc" = ( /obj/machinery/modular_computer/preset/id{ dir = 8 @@ -74065,25 +72873,16 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/stairs, /area/station/hallway/primary/central/fore) -"xCu" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/red/opposingcorners{ - dir = 1 - }, -/turf/open/floor/iron/cafeteria, -/area/station/service/cafeteria) -"xCz" = ( -/obj/effect/spawner/random/structure/crate, -/obj/effect/spawner/random/maintenance, -/turf/open/floor/plating, -/area/station/maintenance/central/greater) "xCH" = ( /obj/structure/railing{ dir = 9 }, /turf/open/space/basic, /area/space/nearstation) +"xCI" = ( +/obj/structure/sign/poster/official/random/directional/north, +/turf/open/floor/iron, +/area/station/hallway/secondary/entry) "xCR" = ( /obj/machinery/door/airlock/maintenance{ name = "Engineering Maintenance" @@ -74148,6 +72947,15 @@ }, /turf/open/floor/iron/small, /area/station/hallway/primary/starboard) +"xDS" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/duct, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/maintenance/central/lesser) "xDW" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -74158,11 +72966,6 @@ /obj/machinery/door/firedoor, /turf/open/floor/catwalk_floor/flat_white, /area/station/science/robotics/mechbay) -"xEc" = ( -/obj/structure/cable, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/iron, -/area/station/maintenance/aft) "xEd" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -74174,6 +72977,11 @@ /obj/machinery/portable_atmospherics/canister/air, /turf/open/floor/plating, /area/station/maintenance/starboard/central) +"xEl" = ( +/obj/item/kirbyplants/random, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/wood, +/area/station/service/chapel/office) "xEm" = ( /obj/effect/turf_decal/tile/brown{ dir = 4 @@ -74211,12 +73019,15 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/starboard/greater) -"xEC" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 +"xEM" = ( +/obj/structure/window/spawner/directional/north, +/obj/structure/flora/bush/large/style_random{ + pixel_x = -20; + pixel_y = -11 }, -/turf/open/floor/iron/white, -/area/station/medical/medbay/lobby) +/obj/structure/flora/bush/flowers_yw/style_random, +/turf/open/misc/sandy_dirt, +/area/station/commons/fitness/locker_room) "xEQ" = ( /obj/machinery/atmospherics/pipe/heat_exchanging/junction/layer2{ dir = 1 @@ -74287,6 +73098,10 @@ "xFA" = ( /turf/closed/wall/r_wall, /area/station/science/research) +"xFD" = ( +/obj/structure/closet/emcloset, +/turf/open/floor/iron, +/area/station/commons/dorms) "xFI" = ( /obj/machinery/atmospherics/pipe/smart/simple/purple/visible, /obj/machinery/door/airlock/research/glass{ @@ -74303,12 +73118,17 @@ dir = 9 }, /area/station/science/ordnance/testlab) -"xFO" = ( +"xFM" = ( +/obj/structure/hedge, +/turf/open/floor/iron/herringbone, +/area/station/commons/dorms) +"xFS" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/neutral, +/obj/machinery/status_display/evac/directional/south, /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/neutral, /turf/open/floor/iron, /area/station/hallway/primary/port) "xFT" = ( @@ -74323,37 +73143,12 @@ }, /turf/open/floor/plating, /area/station/maintenance/department/engine) -"xGc" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/trimline/neutral/line, -/obj/effect/turf_decal/trimline/neutral/line{ +"xGf" = ( +/obj/effect/turf_decal/tile/yellow/anticorner/contrasted{ dir = 1 }, /turf/open/floor/iron, -/area/station/hallway/primary/port) -"xGd" = ( -/obj/structure/disposalpipe/segment{ - dir = 6 - }, -/obj/structure/cable, -/obj/effect/turf_decal/tile/red/opposingcorners, -/obj/effect/turf_decal/tile/blue/opposingcorners{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/smooth, -/area/station/service/greenroom) -"xGe" = ( -/obj/structure/bed{ - dir = 4 - }, -/obj/effect/spawner/random/bedsheet{ - dir = 4 - }, -/obj/machinery/light/small/directional/west, -/turf/open/floor/carpet/orange, -/area/station/commons/dorms) +/area/station/commons/storage/tools) "xGl" = ( /obj/machinery/door/airlock/external{ name = "External Docking Port" @@ -74422,16 +73217,17 @@ }, /turf/open/floor/iron/terracotta/small, /area/station/security/checkpoint/escape) -"xHB" = ( -/obj/effect/mapping_helpers/broken_floor, -/obj/structure/table, -/obj/effect/turf_decal/bot, -/obj/machinery/light_switch/directional/north, -/obj/machinery/camera/autoname/directional/west, -/obj/machinery/power/apc/auto_name/directional/west, -/obj/structure/cable, -/turf/open/floor/iron/kitchen/small, -/area/station/hallway/secondary/service) +"xHi" = ( +/obj/structure/bed, +/obj/effect/spawner/random/bedsheet, +/obj/machinery/button/door/directional/east{ + id = "Cabin2"; + name = "Cabin Bolt Control"; + normaldoorcontrol = 1; + specialfunctions = 4 + }, +/turf/open/floor/carpet/purple, +/area/station/commons/dorms) "xHD" = ( /obj/effect/spawner/structure/window, /turf/open/floor/plating, @@ -74487,14 +73283,6 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/catwalk_floor/iron, /area/station/science/lobby) -"xIl" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/duct, -/turf/open/floor/plating, -/area/station/maintenance/port/greater) "xIr" = ( /obj/effect/turf_decal/tile/brown/opposingcorners, /obj/effect/decal/cleanable/dirt/dust, @@ -74509,21 +73297,6 @@ }, /turf/open/floor/iron/white, /area/station/medical/treatment_center) -"xIw" = ( -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/trimline/neutral/line{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/neutral/line{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/central/fore) -"xIy" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/machinery/camera/autoname/directional/south, -/turf/open/floor/iron, -/area/station/hallway/primary/port) "xIA" = ( /obj/effect/turf_decal/arrows{ dir = 8 @@ -74548,22 +73321,6 @@ /obj/item/radio/intercom/directional/south, /turf/open/floor/plating, /area/station/engineering/gravity_generator) -"xIK" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/white/side, -/area/station/hallway/primary/starboard) -"xIM" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/white/side, -/area/station/hallway/primary/starboard) "xIP" = ( /turf/closed/wall/r_wall, /area/station/hallway/secondary/construction) @@ -74583,11 +73340,6 @@ /obj/machinery/status_display/evac/directional/north, /turf/open/floor/iron, /area/station/hallway/secondary/dock) -"xJv" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/closet/emcloset, -/turf/open/floor/iron/showroomfloor, -/area/station/commons/toilet/auxiliary) "xJw" = ( /obj/structure/cable, /obj/effect/turf_decal/trimline/neutral/line{ @@ -74598,44 +73350,9 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/aft) -"xJx" = ( -/obj/item/radio/intercom/directional/south, -/turf/open/floor/iron, -/area/station/commons/dorms) -"xJz" = ( -/obj/effect/turf_decal/tile/dark_red/opposingcorners, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/security/prison) "xJB" = ( /turf/closed/wall, /area/station/security/courtroom) -"xJG" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/mapping_helpers/broken_floor, -/obj/structure/broken_flooring/pile/directional/east, -/turf/open/floor/plating, -/area/station/maintenance/port/aft) -"xJO" = ( -/obj/structure/flora/bush/large/style_random, -/obj/structure/flora/bush/flowers_br/style_random, -/obj/structure/sign/poster/official/random/directional/north, -/obj/machinery/status_display/evac/directional/east, -/turf/open/misc/sandy_dirt, -/area/station/commons) -"xJR" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/duct, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/central/fore) -"xJX" = ( -/obj/effect/turf_decal/tile/dark_red/opposingcorners, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/security/brig/entrance) "xJZ" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -74649,13 +73366,6 @@ /obj/effect/mapping_helpers/airlock/access/all/medical/general, /turf/open/floor/iron/white/small, /area/station/medical/medbay/central) -"xKa" = ( -/obj/effect/turf_decal/tile/red/opposingcorners{ - dir = 1 - }, -/obj/structure/chair/stool/bar/directional/west, -/turf/open/floor/iron/cafeteria, -/area/station/service/cafeteria) "xKg" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/turf_decal/trimline/blue/filled/line{ @@ -74695,15 +73405,6 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/security/processing) -"xKx" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/power/apc/auto_name/directional/north, -/turf/open/floor/iron/dark/small, -/area/station/service/chapel/storage) "xKz" = ( /obj/effect/turf_decal/tile/brown/opposingcorners, /obj/effect/turf_decal/siding/wideplating, @@ -74742,15 +73443,6 @@ }, /turf/open/floor/plating, /area/station/medical/medbay/lobby) -"xLj" = ( -/obj/structure/closet/athletic_mixed, -/obj/effect/turf_decal/siding/thinplating_new/light{ - dir = 10 - }, -/obj/machinery/firealarm/directional/west, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/small, -/area/station/commons/fitness/locker_room) "xLk" = ( /obj/machinery/camera/directional/north{ c_tag = "Xenobiology - Killroom Chamber"; @@ -74786,15 +73478,6 @@ /obj/machinery/status_display/evac/directional/west, /turf/open/floor/iron/smooth, /area/station/engineering/atmos/office) -"xLu" = ( -/obj/structure/mirror/directional/east, -/obj/structure/chair/stool/bar/directional/east, -/obj/effect/turf_decal/siding/thinplating_new/light{ - dir = 6 - }, -/obj/machinery/airalarm/directional/south, -/turf/open/floor/iron/small, -/area/station/commons/fitness/locker_room) "xLy" = ( /obj/effect/turf_decal/sand/plating, /obj/effect/decal/cleanable/dirt/dust, @@ -74804,10 +73487,6 @@ /obj/structure/barricade/wooden/crude, /turf/open/floor/plating, /area/station/maintenance/port/lesser) -"xLO" = ( -/obj/structure/cable, -/turf/open/floor/plating, -/area/station/maintenance/port/greater) "xLY" = ( /obj/item/reagent_containers/cup/glass/bottle/beer{ pixel_y = 11 @@ -74828,11 +73507,13 @@ /obj/machinery/light/floor, /turf/open/floor/noslip, /area/station/medical/treatment_center) -"xMd" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/bed/maint, -/turf/open/floor/iron, -/area/station/maintenance/hallway/abandoned_recreation) +"xMc" = ( +/obj/machinery/holopad, +/obj/machinery/light/cold/directional/west, +/turf/open/floor/iron/white/side{ + dir = 4 + }, +/area/station/science/xenobiology) "xMg" = ( /obj/structure/cable, /obj/machinery/door/airlock/maintenance{ @@ -74861,6 +73542,16 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/starboard) +"xMu" = ( +/obj/effect/turf_decal/siding/wood, +/turf/closed/wall, +/area/station/service/library) +"xMv" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/newscaster/directional/north, +/turf/open/floor/iron, +/area/station/commons/fitness/locker_room) "xMK" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/simple/purple/visible{ @@ -74890,14 +73581,42 @@ "xMY" = ( /turf/closed/wall/r_wall, /area/station/command/teleporter) +"xNe" = ( +/obj/structure/chair{ + dir = 1 + }, +/obj/machinery/light/small/directional/south, +/turf/open/floor/iron/showroomfloor, +/area/station/commons/toilet/auxiliary) "xNh" = ( /obj/effect/turf_decal/tile/dark_red/opposingcorners, /obj/structure/closet/secure_closet/security/sec, /turf/open/floor/iron, /area/station/security/lockers) +"xNp" = ( +/obj/machinery/light/small/directional/north, +/turf/open/floor/engine/xenobio, +/area/station/science/xenobiology) "xNw" = ( /turf/closed/wall, /area/station/science/breakroom) +"xNA" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/chair/wood{ + dir = 8 + }, +/turf/open/floor/iron/grimy, +/area/station/service/bar) +"xND" = ( +/obj/structure/window/reinforced/spawner/directional/north, +/obj/structure/window/reinforced/spawner/directional/south, +/obj/structure/grille, +/obj/structure/window/reinforced/spawner/directional/east, +/turf/open/floor/plating, +/area/station/hallway/primary/central/fore) "xNE" = ( /obj/structure/steam_vent, /obj/structure/closet/crate, @@ -74910,20 +73629,6 @@ /obj/item/clothing/gloves/color/red/insulated, /turf/open/floor/iron, /area/station/engineering/atmospherics_engine) -"xNI" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 6 - }, -/obj/effect/turf_decal/tile/dark_red{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/security/brig/entrance) -"xNS" = ( -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating, -/area/station/maintenance/central/greater) "xNV" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -74938,16 +73643,6 @@ /obj/machinery/door/firedoor, /turf/open/floor/catwalk_floor/flat_white, /area/station/science/auxlab/firing_range) -"xNZ" = ( -/obj/structure/disposalpipe/sorting/mail/flip{ - dir = 4 - }, -/obj/effect/turf_decal/tile/dark_red/half/contrasted{ - dir = 1 - }, -/obj/machinery/light/cold/directional/south, -/turf/open/floor/iron, -/area/station/security/brig/entrance) "xOm" = ( /obj/effect/turf_decal/delivery, /obj/machinery/door/poddoor/shutters{ @@ -74956,6 +73651,10 @@ }, /turf/open/floor/plating, /area/station/maintenance/port/fore) +"xOq" = ( +/obj/effect/turf_decal/tile/dark_red/opposingcorners, +/turf/open/floor/iron, +/area/station/security/warden) "xOw" = ( /obj/structure/bed{ dir = 4 @@ -74967,12 +73666,6 @@ /obj/effect/landmark/start/research_director, /turf/open/floor/iron/dark/small, /area/station/command/heads_quarters/rd) -"xOB" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 4 - }, -/turf/open/floor/iron/grimy, -/area/station/service/theater) "xOE" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -74992,24 +73685,6 @@ }, /turf/closed/wall/mineral/titanium/nodiagonal, /area/station/engineering/supermatter) -"xOM" = ( -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/effect/mapping_helpers/broken_floor, -/obj/structure/table, -/obj/item/stock_parts/subspace/analyzer, -/obj/item/stock_parts/subspace/analyzer, -/obj/item/stock_parts/subspace/analyzer, -/obj/item/stock_parts/capacitor{ - pixel_x = -7; - pixel_y = 9 - }, -/obj/item/stock_parts/capacitor{ - pixel_x = -7; - pixel_y = 9 - }, -/obj/machinery/camera/autoname/directional/north, -/turf/open/floor/iron/dark, -/area/station/engineering/storage/tcomms) "xOO" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -75020,16 +73695,6 @@ /obj/machinery/airalarm/directional/north, /turf/open/floor/iron/smooth, /area/station/engineering/supermatter/room) -"xOP" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/turf_decal/siding/wideplating/dark/corner, -/obj/effect/turf_decal/tile/dark_red/half/contrasted{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/security/brig/entrance) "xOR" = ( /obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored/mix_output{ dir = 8 @@ -75073,6 +73738,12 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, /area/station/security/prison/rec) +"xPs" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 5 + }, +/turf/open/floor/grass, +/area/station/service/chapel) "xPv" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -75095,10 +73766,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/starboard) -"xPR" = ( -/obj/structure/flora/tree/jungle/small/style_random, -/turf/open/floor/grass, -/area/station/service/chapel) "xPW" = ( /obj/item/kirbyplants/random/fullysynthetic, /turf/open/floor/wood/parquet, @@ -75166,16 +73833,6 @@ }, /turf/open/floor/plating, /area/station/command/heads_quarters/hop) -"xQx" = ( -/obj/structure/table, -/obj/machinery/computer/security/telescreen/ordnance{ - pixel_y = 2 - }, -/obj/machinery/newscaster/directional/north, -/turf/open/floor/iron/dark/side{ - dir = 1 - }, -/area/station/science/ordnance/testlab) "xQy" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment, @@ -75190,6 +73847,14 @@ /obj/structure/cable, /turf/open/floor/stone, /area/station/command/heads_quarters/captain/private) +"xQE" = ( +/obj/effect/turf_decal/siding/wood, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/effect/landmark/start/hangover, +/turf/open/floor/stone, +/area/station/service/bar) "xQG" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -75200,13 +73865,6 @@ "xQJ" = ( /turf/closed/wall, /area/station/service/abandoned_gambling_den/gaming) -"xQN" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 8 - }, -/turf/open/floor/iron/dark/small, -/area/station/tcommsat/server) "xQS" = ( /obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/visible{ dir = 8 @@ -75247,6 +73905,15 @@ }, /turf/open/floor/plating/elevatorshaft, /area/station/engineering/atmos) +"xRd" = ( +/obj/machinery/holopad, +/obj/machinery/button/door/directional/north{ + id = "medlock"; + name = "Medbay Lockdown Control"; + req_access = list("medical") + }, +/turf/open/floor/wood/parquet, +/area/station/command/heads_quarters/cmo) "xRg" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -75337,31 +74004,21 @@ /obj/structure/barricade/wooden/crude, /turf/open/floor/plating, /area/station/service/abandoned_gambling_den/gaming) -"xRX" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/spawner/random/trash/graffiti, +"xSd" = ( +/obj/structure/closet/firecloset, +/obj/effect/turf_decal/tile/red, +/obj/effect/turf_decal/tile/yellow{ + dir = 4 + }, +/obj/effect/turf_decal/delivery, /turf/open/floor/iron, -/area/station/commons/fitness/recreation/entertainment) -"xRZ" = ( -/obj/effect/turf_decal/siding/wood, -/turf/open/floor/grass, -/area/station/service/chapel) +/area/station/hallway/primary/fore) "xSe" = ( /obj/structure/table/glass, /obj/structure/microscope, /obj/machinery/light/small/directional/north, /turf/open/floor/iron/white, /area/station/science/cytology) -"xSg" = ( -/obj/structure/disposalpipe/segment{ - dir = 5 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/maintenance/hallway/abandoned_command) "xSi" = ( /obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/visible{ dir = 4 @@ -75370,13 +74027,6 @@ /obj/structure/cable, /turf/open/floor/iron/smooth, /area/station/engineering/atmos) -"xSp" = ( -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/tile/blue/half/contrasted{ - dir = 1 - }, -/turf/open/floor/iron/white, -/area/station/medical/medbay/lobby) "xSt" = ( /obj/structure/window/reinforced/spawner/directional/west, /obj/effect/turf_decal/stripes/white/line{ @@ -75429,21 +74079,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/hallway/primary/starboard) -"xTb" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment, -/obj/effect/decal/cleanable/dirt, -/obj/structure/steam_vent, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) -"xTd" = ( -/obj/machinery/light_switch/directional/south, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/commons/dorms) "xTf" = ( /obj/structure/disposalpipe/segment{ dir = 10 @@ -75458,13 +74093,6 @@ /obj/structure/window/spawner/directional/north, /turf/open/floor/plating, /area/station/maintenance/starboard/greater) -"xTr" = ( -/obj/item/kirbyplants/random, -/obj/effect/mapping_helpers/broken_floor, -/obj/item/radio/intercom/directional/north, -/obj/machinery/firealarm/directional/west, -/turf/open/floor/iron/white, -/area/station/science/cytology) "xTB" = ( /obj/structure/chair/sofa/left{ dir = 4 @@ -75495,6 +74123,17 @@ }, /turf/open/floor/engine, /area/station/science/cytology) +"xTR" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/simple/general/visible{ + dir = 6 + }, +/turf/open/floor/iron/white/side{ + dir = 9 + }, +/area/station/science/xenobiology) "xTT" = ( /obj/machinery/door/airlock/research/glass{ name = "Cubicle" @@ -75545,6 +74184,11 @@ /obj/structure/window/reinforced/spawner/directional/north, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/ai_upload) +"xUy" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/plating, +/area/station/maintenance/fore/greater) "xUB" = ( /obj/structure/cable, /obj/structure/window/reinforced/spawner/directional/north, @@ -75553,13 +74197,6 @@ }, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/ai_upload) -"xUG" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/obj/structure/sign/poster/official/random/directional/north, -/turf/open/floor/iron/cafeteria, -/area/station/service/kitchen) "xUL" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -75587,19 +74224,26 @@ }, /turf/open/floor/circuit/red, /area/station/ai_monitored/turret_protected/ai_upload) +"xUT" = ( +/obj/effect/turf_decal/siding/thinplating/terracotta/corner{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/commons/dorms) "xUV" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, /turf/open/floor/iron/white/side, /area/station/science/research) -"xUZ" = ( -/obj/structure/chair{ - pixel_y = -2 +"xUX" = ( +/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/visible{ + dir = 4 }, -/obj/effect/decal/cleanable/cobweb, -/turf/open/floor/iron, -/area/station/security/execution/transfer) +/turf/open/floor/iron/dark, +/area/station/science/ordnance) "xVd" = ( /obj/effect/turf_decal/sand/plating, /obj/item/stack/ore/slag, @@ -75628,16 +74272,20 @@ }, /turf/open/floor/iron, /area/station/science/robotics/lab) -"xVo" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/station/service/hydroponics) "xVv" = ( /obj/structure/cable, /turf/open/floor/iron/white/small, /area/station/science/cubicle) +"xVB" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/central/greater) "xVG" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -75652,15 +74300,6 @@ /obj/effect/spawner/structure/window/reinforced/tinted, /turf/open/floor/plating, /area/station/service/janitor) -"xVX" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/siding/white{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark/small, -/area/station/science/xenobiology) "xVY" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -75769,6 +74408,11 @@ /obj/effect/turf_decal/tile/blue, /turf/open/floor/iron/white, /area/station/medical/medbay/aft) +"xXe" = ( +/obj/effect/spawner/random/structure/closet_maintenance, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/plating, +/area/station/maintenance/central/greater) "xXi" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -75780,10 +74424,10 @@ /area/station/maintenance/starboard/aft) "xXl" = ( /obj/structure/table/reinforced, -/obj/structure/showcase/machinery/microwave{ - pixel_y = 7 - }, /obj/effect/turf_decal/bot, +/obj/machinery/microwave{ + pixel_y = 5 + }, /turf/open/floor/iron/small, /area/station/engineering/break_room) "xXr" = ( @@ -75808,6 +74452,13 @@ /obj/machinery/power/apc/auto_name/directional/north, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) +"xXD" = ( +/obj/effect/turf_decal/siding/thinplating_new/light, +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/south, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/white/small, +/area/station/service/hydroponics) "xXG" = ( /obj/structure/bed, /obj/item/bedsheet/cmo, @@ -75833,13 +74484,6 @@ }, /turf/open/floor/iron/cafeteria, /area/station/security/prison) -"xXL" = ( -/obj/structure/chair{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/hallway/secondary/entry) "xXM" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -75873,6 +74517,14 @@ "xXT" = ( /turf/closed/wall, /area/station/maintenance/starboard/fore) +"xYk" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/engineering/gravity_generator) "xYm" = ( /obj/structure/railing{ dir = 1 @@ -75939,6 +74591,13 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/maintenance/port/greater) +"xZe" = ( +/obj/effect/landmark/start/chaplain, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/turf/open/floor/stone, +/area/station/service/chapel) "xZg" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/turf_decal/tile/neutral, @@ -76042,11 +74701,6 @@ }, /turf/open/space/basic, /area/station/engineering/atmos/space_catwalk) -"yat" = ( -/obj/effect/mapping_helpers/broken_floor, -/obj/effect/landmark/start/assistant, -/turf/open/floor/iron/half, -/area/station/hallway/primary/central/fore) "yaB" = ( /obj/structure/cable, /obj/structure/lattice/catwalk, @@ -76060,14 +74714,9 @@ }, /obj/effect/decal/cleanable/dirt, /obj/machinery/light/small/directional/north, +/mob/living/basic/spider/giant/sgt_araneus, /turf/open/floor/stone, /area/station/command/heads_quarters/hos) -"yaG" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 1 - }, -/turf/open/floor/wood/large, -/area/station/service/chapel) "yaI" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment, @@ -76076,14 +74725,6 @@ "yaL" = ( /turf/closed/wall, /area/station/commons/vacant_room/commissary) -"yaS" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/button/crematorium{ - id = "cremateme"; - pixel_y = -30 - }, -/turf/open/floor/iron/dark/small, -/area/station/service/chapel/storage) "yaU" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/dark, @@ -76095,6 +74736,12 @@ }, /turf/open/floor/iron/dark/small, /area/station/service/chapel/storage) +"yba" = ( +/obj/machinery/atmospherics/pipe/smart/manifold/purple/visible/layer2{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/science/ordnance) "ybh" = ( /obj/structure/cable, /obj/effect/spawner/structure/window/reinforced, @@ -76151,18 +74798,6 @@ /obj/effect/mapping_helpers/airlock/access/all/security/entrance, /turf/open/floor/iron/textured_half, /area/station/security/brig) -"ybL" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue/half/contrasted{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/turf/open/floor/iron/white, -/area/station/medical/medbay/lobby) "ybM" = ( /obj/structure/window/spawner/directional/west, /obj/structure/window/spawner/directional/east, @@ -76173,6 +74808,13 @@ "ybO" = ( /turf/closed/wall/r_wall, /area/station/engineering/atmos) +"ycb" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 6 + }, +/obj/structure/flora/grass/jungle, +/turf/open/floor/grass, +/area/station/service/chapel) "ycd" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -76217,27 +74859,17 @@ }, /turf/open/floor/iron/white, /area/station/science/research) -"ycx" = ( -/obj/structure/chair/sofa/bench/right{ - dir = 1 - }, -/obj/machinery/camera/directional/south{ - c_tag = "Atmospherics - South" - }, -/obj/effect/turf_decal/tile/blue, -/obj/effect/landmark/start/hangover, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 1 - }, -/obj/machinery/computer/security/telescreen/entertainment/directional/south, -/turf/open/floor/iron/dark/side, -/area/station/hallway/primary/central/fore) "ycC" = ( /turf/closed/wall/r_wall, /area/station/command/bridge) "ycE" = ( /turf/open/floor/plating, /area/station/construction/mining/aux_base) +"ycQ" = ( +/obj/machinery/newscaster/directional/north, +/obj/structure/chair/sofa/bench/left, +/turf/open/floor/iron, +/area/station/hallway/secondary/recreation) "ycS" = ( /turf/open/floor/wood/tile, /area/station/service/bar) @@ -76245,15 +74877,6 @@ /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/iron/smooth_edge, /area/station/engineering/supermatter/room) -"ycZ" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/white, -/area/station/medical/medbay/lobby) "ydf" = ( /obj/effect/turf_decal/siding/wood{ dir = 4 @@ -76295,25 +74918,11 @@ /obj/item/radio/intercom/directional/north, /turf/open/floor/wood/tile, /area/station/command/bridge) -"ydt" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/public/glass{ - name = "Holodeck Door" - }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ - cycle_id = "holodeck" - }, -/turf/open/floor/iron, -/area/station/commons/fitness/recreation/entertainment) -"ydu" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/sorting/mail{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/mapping_helpers/mail_sorting/service/bar, -/turf/open/floor/plating, -/area/station/maintenance/central/greater) +"ydz" = ( +/obj/machinery/vending/cigarette, +/obj/effect/turf_decal/tile/blue, +/turf/open/floor/iron/dark/side, +/area/station/hallway/primary/central/fore) "ydH" = ( /obj/effect/turf_decal/box/corners, /obj/effect/turf_decal/box/corners{ @@ -76351,18 +74960,6 @@ "yea" = ( /turf/closed/wall, /area/station/service/chapel/office) -"yec" = ( -/obj/structure/girder, -/obj/effect/decal/cleanable/glass/plastitanium, -/turf/open/floor/plating, -/area/station/maintenance/fore/greater) -"yee" = ( -/obj/item/kirbyplants/random, -/obj/machinery/light_switch/directional/west, -/obj/item/radio/intercom/directional/north, -/obj/effect/decal/cleanable/cobweb, -/turf/open/floor/iron, -/area/station/engineering/storage/tech) "yeh" = ( /turf/closed/wall, /area/station/hallway/primary/starboard) @@ -76372,14 +74969,6 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/entry) -"yen" = ( -/obj/effect/turf_decal/tile/blue, -/obj/effect/decal/cleanable/dirt, -/obj/item/radio/intercom/directional/south, -/turf/open/floor/iron/white/corner{ - dir = 8 - }, -/area/station/hallway/secondary/dock) "yep" = ( /obj/structure/rack, /obj/item/storage/box/bodybags{ @@ -76400,22 +74989,6 @@ /obj/structure/sign/warning/test_chamber/directional/east, /turf/open/floor/iron/white, /area/station/science/robotics/augments) -"yeu" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/door/airlock/hydroponics/glass{ - name = "Hydroponics" - }, -/obj/effect/mapping_helpers/airlock/access/any/service/hydroponics, -/obj/machinery/door/firedoor, -/turf/open/floor/iron/textured_half, -/area/station/service/hydroponics) -"yex" = ( -/obj/machinery/airalarm/directional/north, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/engineering/storage/tech) "yeD" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment, @@ -76470,32 +75043,12 @@ "yfa" = ( /turf/open/floor/plating, /area/station/maintenance/department/engine) -"yfd" = ( -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/obj/structure/chair{ - pixel_y = -2 - }, -/turf/open/floor/plating, -/area/station/maintenance/department/medical/central) "yfg" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/dark/smooth_corner{ dir = 8 }, /area/station/maintenance/starboard/greater) -"yfj" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/white, -/area/station/hallway/primary/starboard) -"yfm" = ( -/obj/machinery/status_display/ai/directional/north, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/turf/open/floor/iron, -/area/station/engineering/storage/tech) "yfs" = ( /obj/structure/closet/l3closet/scientist, /obj/item/storage/bag/xeno, @@ -76516,21 +75069,23 @@ "yfD" = ( /turf/closed/wall, /area/station/medical/surgery/theatre) -"yfH" = ( -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/effect/turf_decal/siding/wood{ +"yfF" = ( +/obj/machinery/vending/autodrobe/all_access, +/obj/effect/turf_decal/siding/wideplating/dark{ dir = 8 }, -/obj/structure/displaycase/trophy, -/obj/machinery/firealarm/directional/south, -/turf/open/floor/iron/smooth, -/area/station/service/library) +/turf/open/floor/iron/small, +/area/station/commons/fitness/locker_room) "yfJ" = ( /obj/effect/spawner/random/structure/closet_maintenance, /obj/effect/decal/cleanable/dirt, /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) +"yfL" = ( +/obj/machinery/newscaster/directional/south, +/turf/open/floor/wood/parquet, +/area/station/command/heads_quarters/cmo) "yfN" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -76541,6 +75096,7 @@ /obj/machinery/modular_computer/preset/civilian{ dir = 4 }, +/obj/machinery/status_display/evac/directional/west, /turf/open/floor/circuit/red, /area/station/ai_monitored/turret_protected/ai) "yfQ" = ( @@ -76557,43 +75113,9 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/security) -"yga" = ( -/obj/structure/disposalpipe/segment, -/turf/open/floor/iron/white, -/area/station/hallway/primary/starboard) -"ygb" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating, -/area/station/maintenance/central/greater) -"ygd" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/spawner/random/engineering/atmospherics_portable, -/turf/open/floor/plating, -/area/station/maintenance/central/greater) "ygu" = ( /turf/open/floor/iron/white, /area/station/hallway/primary/starboard) -"ygB" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/door/airlock/bronze{ - name = "Backstage" - }, -/obj/effect/mapping_helpers/airlock/access/all/service/theatre, -/turf/open/floor/wood/parquet, -/area/station/service/theater) -"ygF" = ( -/obj/structure/chair{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/station/security/interrogation) "ygK" = ( /obj/structure/table, /obj/structure/window/reinforced/spawner/directional/west, @@ -76640,10 +75162,6 @@ dir = 10 }, /area/station/hallway/primary/starboard) -"yhv" = ( -/obj/effect/spawner/random/structure/crate, -/turf/open/floor/plating, -/area/station/maintenance/department/medical/central) "yhB" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -76662,10 +75180,27 @@ /obj/machinery/newscaster/directional/south, /turf/open/floor/iron, /area/station/hallway/secondary/entry) +"yhK" = ( +/obj/item/radio/intercom/directional/west, +/obj/effect/turf_decal/stripes/red/line{ + dir = 8 + }, +/turf/open/floor/iron/smooth_large, +/area/station/science/auxlab/firing_range) +"yhQ" = ( +/obj/machinery/transport/power_rectifier{ + configured_transport_id = "bird_2" + }, +/turf/open/floor/iron, +/area/station/maintenance/port/aft) "yhS" = ( /obj/effect/decal/cleanable/insectguts, /turf/open/floor/iron, /area/station/engineering/atmospherics_engine) +"yhW" = ( +/obj/structure/cable, +/turf/open/floor/iron/smooth, +/area/station/command/gateway) "yhY" = ( /obj/effect/turf_decal/siding/blue{ dir = 6 @@ -76721,6 +75256,10 @@ }, /turf/open/floor/catwalk_floor, /area/station/hallway/secondary/entry) +"yio" = ( +/obj/effect/turf_decal/tile/neutral, +/turf/open/floor/iron, +/area/station/hallway/secondary/recreation) "yiq" = ( /obj/structure/chair{ dir = 4 @@ -76748,15 +75287,6 @@ /obj/item/clothing/head/utility/welding, /turf/open/floor/iron, /area/station/science/robotics/lab) -"yiv" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/cable, -/obj/machinery/door/airlock{ - name = "Greenroom Maintenance" - }, -/obj/effect/mapping_helpers/airlock/access/all/service/theatre, -/turf/open/floor/plating, -/area/station/maintenance/central/greater) "yiL" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/turf_decal/tile/neutral/half/contrasted{ @@ -76777,11 +75307,17 @@ }, /turf/open/floor/iron, /area/station/science/robotics/lab) -"yiV" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating, -/area/station/maintenance/department/science/xenobiology) +"yiY" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/structure/sign/departments/holy/directional/north, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/port) "yjc" = ( /obj/machinery/rnd/production/techfab/department/cargo, /obj/effect/turf_decal/delivery/white, @@ -76791,13 +75327,16 @@ "yjd" = ( /turf/open/floor/iron/dark, /area/station/security/lockers) -"yjr" = ( -/obj/structure/chair/stool/directional/north, -/obj/effect/turf_decal/siding/red, -/obj/effect/decal/cleanable/dirt, -/obj/effect/landmark/start/security_officer, -/turf/open/floor/iron/small, -/area/station/security/office) +"yji" = ( +/obj/item/book/manual/chef_recipes, +/obj/item/stack/package_wrap{ + pixel_y = 2 + }, +/obj/item/holosign_creator/robot_seat/restaurant, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/table, +/turf/open/floor/iron/kitchen/small, +/area/station/service/kitchen) "yjt" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -76805,27 +75344,9 @@ /obj/machinery/newscaster/directional/west, /turf/open/floor/iron/white/small, /area/station/science/cubicle) -"yju" = ( -/obj/effect/spawner/random/structure/closet_maintenance, -/obj/effect/spawner/random/maintenance, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating, -/area/station/maintenance/fore/greater) -"yjD" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 1 - }, -/turf/open/floor/grass, -/area/station/service/chapel) "yjE" = ( /turf/closed/wall/r_wall, /area/station/maintenance/department/engine) -"yjK" = ( -/obj/effect/turf_decal/siding/green{ - dir = 9 - }, -/turf/open/floor/iron/dark/herringbone, -/area/station/service/abandoned_gambling_den/gaming) "yjN" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -76839,6 +75360,10 @@ /obj/structure/cable, /turf/open/floor/iron/smooth, /area/station/engineering/supermatter/room) +"yjP" = ( +/obj/structure/flora/tree/jungle/style_2, +/turf/open/floor/grass, +/area/station/service/chapel) "yjQ" = ( /obj/structure/window/reinforced/spawner/directional/south, /obj/machinery/power/apc/auto_name/directional/east, @@ -76864,6 +75389,15 @@ /obj/effect/turf_decal/tile/neutral, /turf/open/floor/iron, /area/station/hallway/primary/central/fore) +"yka" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/structure/window/reinforced/spawner/directional/south, +/obj/effect/turf_decal/siding/purple{ + dir = 1 + }, +/obj/effect/turf_decal/siding/purple, +/turf/open/floor/iron/dark, +/area/station/science/genetics) "ykd" = ( /obj/effect/turf_decal/siding/wood{ dir = 9 @@ -76879,26 +75413,10 @@ /obj/machinery/door/firedoor, /turf/open/floor/iron, /area/station/hallway/secondary/entry) -"ykv" = ( -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/station/command/heads_quarters/rd) "ykz" = ( /obj/effect/spawner/random/structure/closet_maintenance, /turf/open/floor/plating, /area/station/maintenance/port/aft) -"ykC" = ( -/obj/structure/disposalpipe/segment{ - dir = 9 - }, -/obj/effect/mapping_helpers/broken_floor, -/obj/machinery/camera/directional/south{ - c_tag = "Atmospherics - South" - }, -/obj/machinery/status_display/evac/directional/south, -/turf/open/floor/iron, -/area/station/commons/dorms) "ykL" = ( /turf/closed/wall/r_wall, /area/station/ai_monitored/turret_protected/ai_upload_foyer) @@ -76906,32 +75424,10 @@ /obj/structure/extinguisher_cabinet/directional/south, /turf/open/floor/iron, /area/station/hallway/secondary/entry) -"ykU" = ( -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/siding/purple{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/command/heads_quarters/rd) -"ykY" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/light/small/directional/east, -/obj/item/kirbyplants/random/dead/research_director, -/turf/open/floor/iron/dark/small, -/area/station/command/heads_quarters/rd) "ykZ" = ( /obj/structure/disposalpipe/segment, /turf/open/floor/iron/dark/small, /area/station/security/brig) -"yla" = ( -/obj/structure/chair{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/firealarm/directional/south, -/turf/open/floor/iron/checker, -/area/station/security/breakroom) "ylo" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -76940,6 +75436,13 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white/small, /area/station/science/lobby) +"ylp" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/security/office) "ylq" = ( /obj/structure/cable, /obj/structure/disposalpipe/junction/flip{ @@ -76965,10 +75468,6 @@ /obj/machinery/light/cold/directional/west, /turf/open/floor/iron/dark/textured_large, /area/station/cargo/bitrunning/den) -"ylJ" = ( -/obj/effect/spawner/structure/window/reinforced/tinted, -/turf/open/floor/plating, -/area/station/commons/dorms) "ylK" = ( /obj/structure/chair/plastic{ dir = 8 @@ -76993,15 +75492,6 @@ /obj/structure/alien/weeds, /turf/open/floor/wood, /area/station/maintenance/starboard/greater) -"ymd" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 10 - }, -/obj/machinery/power/apc/auto_name/directional/north, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/station/science/ordnance/testlab) "ymh" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -85567,7 +84057,7 @@ dDB dDB dDB jhz -hsL +xQZ kpe dDB dDB @@ -85804,8 +84294,8 @@ tYT dDB dDB jul -blb -blb +oTY +qME dDB dDB tYT @@ -85823,7 +84313,7 @@ tYT tYT dDB dDB -blb +hsL pJT rqV dDB @@ -86060,9 +84550,9 @@ wBo giq wBo vmL -apj -vmL -vmL +hZf +kwH +nID vmL ybO tYT @@ -86080,10 +84570,10 @@ aJq tYT ybO vmL -vmL +hZf kwH lLE -vmL +dqV ybO aJq aJq @@ -86317,9 +84807,9 @@ drw gvB wBo ybO -mKK -cwf -cwf +brC +brC +brC ybO ybO aJq @@ -86337,17 +84827,17 @@ aJq aJq ybO ybO -cwf -pfx brC +brC +brC +pfx ybO -ybO -akZ -akZ -akZ -akZ -akZ -akZ +aJq +aJq +aJq +aJq +aJq +aJq gcs blb blb @@ -86571,12 +85061,12 @@ vmL wBo mnx ylK -qBD +aRS gKs hXt mXm -hXt -hXt +mXx +vUh bJN hYC pwv @@ -86851,9 +85341,9 @@ tSi vnz hYC dYY -dqV -ivT -hZf +ijP +ulf +gCP nkp kvb gBh @@ -87108,7 +85598,7 @@ bSm qxz mRA hvZ -mXx +xHT fJt vPY wPt @@ -87130,7 +85620,7 @@ slY wxW slY ikr -ixX +iVK iVK iVK jhC @@ -87346,7 +85836,7 @@ vtw gKs mFZ exE -tFB +pjk wWP dlk qUN @@ -87389,12 +85879,12 @@ ueX ikr iVK iVK -ixX +iVK jhC lOj bll -rgo -imS +kkV +ipr lOj lOj hzm @@ -87414,7 +85904,7 @@ qON nZh rDS rWM -peb +mnC whL pLl leU @@ -87603,8 +86093,8 @@ ihj gKs pIB wNi -bPU -yii +tFB +mKK tnH vcR fxV @@ -87649,11 +86139,11 @@ iVK iVK hsJ hzX -hMH +hNA hNA inT lOj -tqE +dTW lwI lOj jaN @@ -87668,16 +86158,16 @@ pZu jxJ slw dDd -sob -rEL -rXm +vuj +cYS +rhC pee qyT pLZ pWF fMQ qCb -qZf +vgh yaI qRN erg @@ -87685,7 +86175,7 @@ sNg yaI wRN yaI -oUx +xyM yaI xQy qRN @@ -87713,8 +86203,8 @@ fEC fEC fEC fEC -kCo -peR +lQs +rYc dyW fEC eHN @@ -87860,8 +86350,8 @@ fEr pUK vjK rVA -vUh -oTY +bPU +yii kXf hvo kQr @@ -87908,16 +86398,16 @@ jhC lPi hNb kdN -ioJ -kOq -leI +onQ +bTE +cob vWA lOj mnZ kdH nJU kEA -kQe +smJ ouR oRr kdH @@ -87925,9 +86415,9 @@ pHo pZz slw qtJ -rho +qdu tyD -rXr +lFq sor whL sYs @@ -87942,7 +86432,7 @@ jch wZS tCm onw -jeV +csv gun mKD snZ @@ -88117,7 +86607,7 @@ gKs gKs aOb utf -mfV +jfk mFD mrW hYC @@ -88158,17 +86648,17 @@ slY ohl mEB ikr -ixX iVK iVK -jhU +iVK +jhC lPi hNA -kdP +vJG ipb -kOv +stH +lfU lfU -lxd lPi pJm oRZ @@ -88182,8 +86672,8 @@ pJm pZK npA tYj -wiy -rGt +riV +slw mhk mhk mhk @@ -88199,7 +86689,7 @@ gdn qyT tDb ttX -xBZ +iNC qyT nvK xBe @@ -88223,12 +86713,12 @@ uru fEC xpo vFy -vGU vFy -vGU +vFy +vFy rOG hbm -aZw +utQ vSW fEC iBE @@ -88420,7 +86910,7 @@ iVL iVL jig lOj -hNZ +nMq thM kuy lOj @@ -88437,26 +86927,26 @@ oRr poM uzJ mKB -npA -nFh -riV -uQR -mhk -spW +aLm +slw +lLi +slw +gMX +hEu ozn ozn pXC -tYL mhk +mhk +qyT whL -rym whL -rym whL qyT +qyT tDE tWQ -unM +ggc qyT sbx lgj @@ -88469,8 +86959,8 @@ qNL reM reM qVP -efr -tqo +vej +vej umi ghc vFy @@ -88693,27 +87183,27 @@ owl oSb ppk mjQ -vFQ -npF -mhk -riZ -npF -mhk -pev +fLF +ahr +nFX +nFX +ozn +pSP mhk mhk mhk mhk mhk -uRX -vzP -vzP -vzP -wjK +cgV +qHr +gyc +dVQ +wFY +ahf wBm wXk xKG -qHH +suM yea yea yea @@ -88726,7 +87216,7 @@ qVP qVP jmV fEC -tqo +vej fEC fEC xDj @@ -88931,7 +87421,7 @@ slY gOK slY hfc -jBb +kPW iNE nFo ach @@ -88950,32 +87440,32 @@ lkI oSg lWF mjV -qbw -npS -nFX -nZM -ozn -ozn -sqe +pHs mhk -pMg -pYE -vzP -aWw -vkG +ihb +ozt +dEQ +sqz +mhk +iSD +pbw +twN +mSQ +jWj +bIJ +bIJ xYD -xPR -tzJ -xRZ -wBm +yjP +hVO +wAW wXk oOy -xOS +atS uHI vlY vGp fEC -nth +vej xeM tKa xLm @@ -88998,10 +87488,10 @@ rJW suw qVP nHu -dpt +cpH tvZ hzV -efr +tqo qVP ets eva @@ -89168,7 +87658,7 @@ oUq sav gIM amH -ccO +hSj bNq olj gBh @@ -89188,7 +87678,7 @@ slY gPN gZk iNE -kwY +kPW kPW nFo tPZ @@ -89210,29 +87700,29 @@ qby qby mhk mhk -tYL -udt -rXw -sqz mhk -yjD -xYD -rLT -qCg -qZB -cPd -wWa -xYD -quJ -wAW +xxT +mhk +mhk +pGS +sUN +lsP +pHA +iSD +iSD +iSD +oVW +ePt +jlW +wBm hDT glM -xOS +atS wEG wEG wEG fEC -nth +vej fEC fEC fEC @@ -89248,8 +87738,8 @@ qVP qVP ftv dWK -btv -kAk +xOq +ipc vTV gWb pcv @@ -89444,7 +87934,7 @@ xpl slY gPN slY -hff +jCo kPW hfc nFo @@ -89468,23 +87958,23 @@ mLh nry qRq mhk -xLO -mhk +vdL mhk mhk -csp -qZB -uaa -qCR -ram -ryp -qZB -xYD -xRZ +cXb +sry +uoR +neF +hHy +hAB +jCm +iSD +bnQ +fVF wBm wXk jte -uoh +diI yea vmt dzi @@ -89503,8 +87993,8 @@ blb blb blb xkt -rGm -btv +heY +xOq mxg nPu vTV @@ -89513,7 +88003,7 @@ tVe geW qVP qVP -cWo +kZC rOG sLB qVP @@ -89725,23 +88215,23 @@ mLk nsL kVn srn -uSM -rYv -srn -sMi -pMu -qaA -qkv -qCi -raC -dty -vzW -syv -wlF -wzk -tDJ -blq -cNu +iHT +pRc +mhk +pbw +rpF +neF +hmC +xZe +eWk +hAB +iSD +cib +vTn +wBm +wXk +dTH +xFS yea vmH yea @@ -89956,7 +88446,7 @@ mEB gEc gIx sjq -sNz +sjq hyO roi jCi @@ -89983,31 +88473,31 @@ dVW qSS mhk tKf -rYD +kwy mhk -jrZ -xYD -jEU -uXN -qCR -raX -vkz -agF -syG -pHN +bBh +qzP +tBk +keL +tts +tBk +keL +iSD +rnr +aCz wAW -wXk +spo xiF -uoM +gEx yea -vRe +vne wMA waO von fEC xxA fEC -gLR +rui qVP blb xkt @@ -90020,9 +88510,9 @@ cHp syk bKE uyH -bsl +iLe vTV -wyO +uNz eDX nte lNx @@ -90240,26 +88730,26 @@ mhk mhk mhk xmI -pbu +ivh mhk -mYS +fme +flw +apq +bJx +hHy +sMj +vqF +iyR xYD -yaG -qOp -qCR -uSC -vkz -vAA -szy -xRZ -wAW -iLK +tev +wBm +wXk glM -khE +uAk yea vmX vij -wbb +xEl wyl fEC fEC @@ -90268,18 +88758,18 @@ wmV qVP blb xkt -aRn -rty -kRU +hcu mYR -rty -fpl +vht +mYR +mYR +pho oKz -wYW +kXu pds kPa vTV -kvr +ePP ddE tiM qGu @@ -90291,7 +88781,7 @@ qVP kvO tug hXU -wVs +iCi pxj hAC cVC @@ -90488,7 +88978,7 @@ wuM bKz kFg kRJ -llD +bvV lGk uKP wCI @@ -90497,22 +88987,22 @@ mhk nFY mhk mhk -xLO -mhk -ptZ -sYF -yaG -qkw -qCR -raX -rzu -agF -xYD -wlQ +mze +iLH +oyz +tmi +klN +tBk +miF +keL +lvJ +ahl +gRm +rmk wBm wXk glM -xFO +atS rQC vne vHV @@ -90526,22 +89016,22 @@ qVP blb xkt pXB -rty -gKC +mYR +lWz eJh -noT +iPn aLk syk lCt sKE bWh vTV -goE -rAy +tvx +sRV loL fvF qVP -dpt +cpH fEC fEC qVP @@ -90579,14 +89069,14 @@ qBi qBi qBi ltp -qBi +aFR aOX awe bUO awe awe dEF -qBi +aFR xAG pGR tDn @@ -90725,8 +89215,8 @@ dDB dDB dDB slY -mEk -tYI +tjY +siG nEA slY oPi @@ -90754,48 +89244,48 @@ mhk xYJ xYJ tYL -pbu -mhk +mSA mhk -oqE -qbr -hNT -qCR -rba -rAb -vAR -vSE -woB -ntw +jSJ +tOd +qzP +tBk +miF +keL +xPs +qOb +iQp +xyt +wBm vuR xgA -wNR -qnu -vnn -vIg -wdV -wyY -xfP +hiK +lei +pvi +pvi +buc +uAi +njs uAi fEC rui qVP qop xkt -fiW +hbc mVt -gJa +dIt huN jBr -qaH +sNr syk -nDx -iLc -dXo +vYD +lox +rdW vTV iWj -fSE -ftm +lRV +aUJ lfi qVP nGA @@ -90836,14 +89326,14 @@ qBi qBi qBi ltp -qBi +aFR pCC bjZ bjZ bjZ bjZ khl -qBi +aFR xAG pGR tDn @@ -90852,11 +89342,11 @@ cHR jZJ tDn wVI -kEL +npp nNB -wbk +iPy iWe -rer +aWt sis sis sis @@ -90982,7 +89472,7 @@ dDB dDB dDB slY -rhm +iVW cis slY slY @@ -91006,33 +89496,33 @@ lme lHe lWU tca -mCb +urF mhk xZd mhk sNW -rYD -xLO +mze mhk -sYK -sYF -uao -vzP -vzP -vkG -bOl -xYD -xRZ -wAZ -wXk -xgN -rsQ -kar +shR +ugI +rYs +dPx +nqY +keL +iSD +fGW +bIJ +cdB +wAW +rpB +jzr +rpE +tAF vnr -vIh -wfb +caD +buc alg -xfU +qwK xjU fEC kJJ @@ -91048,7 +89538,7 @@ xkt ujA cDH fFH -fYX +oBT vTV vTV xxO @@ -91060,7 +89550,7 @@ qVP apB sUG olI -yla +gwa xsf skm qXj @@ -91100,7 +89590,7 @@ bjZ lqL bjZ bjZ -qBi +aFR iJt pGR tDn @@ -91109,7 +89599,7 @@ qdv bSH tDn eua -eax +izh xAG jWd lGO @@ -91242,7 +89732,7 @@ ueX mEB slY slY -lbW +nMV dRD xwz xwz @@ -91262,34 +89752,34 @@ kSO gNC lHk lXf -mlE +lKg efS mhk qTJ mhk rGN -xYJ -pbu +mze mhk -mhk -xpT -xYD -xYD -xYD -xPR -xYD -vSX -tdg +feL +peU +iSD +dPx +miF +keL +iSD +iSD +iSD +iSD wBm wXk -bVv +pEO xOS rQC von -vRe -wgj +pvC +aLS +wzS wzS -xgK tAu fEC rui @@ -91299,17 +89789,17 @@ qVP llW llW xkt -nNb -ejc +geH +buf dah urw urw -rzG -rIH +hCd +jwl cFg hWJ -htV -ild +vnD +xfm voJ qxv apk @@ -91350,14 +89840,14 @@ qBi qBi qBi ltp -qBi +aFR pCC bjZ bjZ bjZ bjZ khl -qBi +aFR xAG pSd tdF @@ -91525,31 +90015,31 @@ mhk mhk mhk mhk -sqz -xLO -xLO +mze mhk -tCk -uaE -uty -rbh -tTG -sdg -tEU -hpP -wAW -mdU -xhe +fgT +ycb +aWr +dPx +miF +oIL +hHy +kzV +hHy +eYB +mIE +wXk +glM oMF yea vrf von wgn pRe -xhj +wgn aHq xMg -gLR +rui wmV rui qVP @@ -91614,7 +90104,7 @@ dpR dpR dpR cRW -qBi +aFR xAG pSd tDn @@ -91622,11 +90112,11 @@ qdv rwP uZB tDn -uug -xwT +gTO +ctl wTm eJw -bwE +eJw eJw aVZ tyh @@ -91756,7 +90246,7 @@ dDB blb dDB ueX -xpl +ohl xwz gGw nsX @@ -91767,7 +90257,7 @@ rFa rTD iWb jnn -jHE +bDN bDN qto kpT @@ -91777,40 +90267,40 @@ lmv lIf lXn srn -mOT -jCA +ntJ nGu +xYJ ina mhk +gLV mhk -mhk -sMG -mhk -mhk -mhk -mhk -mhk -mhk -sdQ -mhk -mhk +bTo +sNA +iSD +dPx +miF +miF +miF +miF +miF +juP wAW -wDJ -xhH -rje +lqq +ckP +cQI yea yea vJn wgA guY -xhA +oRy guY fEC fEC fEC rui qVP -kkW +vnC jnN gEH nDe @@ -91829,8 +90319,8 @@ dCU urQ xsf wJD -upv -wfV +cXz +oOV jyi xsf qzs @@ -91879,12 +90369,12 @@ tDn tDn tDn tDn -xjG -oBB +vpt +hCl hqS cuh qQv -tOX +aYs pDu jqZ pDu @@ -91987,7 +90477,7 @@ ojz sLu urE ess -jCY +mFH vfG oSw jyl @@ -91998,7 +90488,7 @@ obW grF ecn kmH -rLu +bHp cPe obW blb @@ -92023,7 +90513,7 @@ xwz rFP rTU sgR -lAa +obH sSx tnu tPg @@ -92035,40 +90525,40 @@ lIn lXY mhk ina -tYL -nGJ -ntJ +pyA +ina +xYJ +xYJ +xsD srn -oSh -ntJ -pug -mhk -lJY -bmM -uSM -uSM -vmz -rYv -pug -mhk -fju -wWT -glM -iwZ -uIt +xxj +cSb +iSD +dPx +miF +fMX +wha +wha +wha +mkz +hla +wXk +uQK +iXZ +vpg yea vJA vKa guY -xiA +brj iQU pIw pIw fEC wmV qVP -cvZ -hCE +jfE +dAL oUN tux jGd @@ -92080,9 +90570,9 @@ xNh xFe dqX bCG -slx -xtg -keb +kWm +dLR +ucy vBK xsf dEu @@ -92124,10 +90614,10 @@ rtQ jHq vKG nne -oKy nne nne -bVB +nne +vKG cwL xAG pSd @@ -92136,8 +90626,8 @@ sEU sEU tDn fmw -tKl -iOG +ket +hmt mTs qBc vWr @@ -92270,62 +90760,62 @@ dDB blb dDB slY -xpl +ohl uuR -wta +rZe jIH bbK ePn uki rFW bCZ -lkG -jns +uqE +fkd sSA wcP qDP -uuN +wwJ yjc vLP oyZ lIq -lYt +uwX mhk xYJ -qAE +lwC tYL mhk mhk -tYL -mhk -xen -lJY -oSS -mhk -mhk -oDK +fpN mhk -mhk -qSv -sNv -wDV -tET -glM -xFO +kZj +kzz +iSD +nrp +miF +keL +iSD +iSD +iyR +rya +wBm +kvD +xiS +crm dyq yea vKa wgM guY -xdD -pYG -kEO +vhr +pwN +liJ pwN pTq -gLR +rui qVP -udI -xoo +jpM +aJV gEH dyO tJe @@ -92335,11 +90825,11 @@ xmL wrO vHu xFe -jZI -wZX +hNP +igs vwQ his -yjr +tCh aTq wuc trp @@ -92379,11 +90869,11 @@ blb blb rtQ tEt -pzA +ujE abJ voj vKG -tsf +uMu vKG jEA xAG @@ -92407,7 +90897,7 @@ tyh ljz egb rNJ -oZI +vzA iGE xiu eGL @@ -92488,7 +90978,7 @@ hyx cDE fCW oPa -xfB +sXE qKx xed rbp @@ -92510,7 +91000,7 @@ lER hRO knv rKZ -mGn +cGG lvK jiC vdw @@ -92537,8 +91027,8 @@ xwz rGq rUt sgR -jon -sSK +wcz +eIF juJ mTe kqL @@ -92549,39 +91039,39 @@ lIw lYw mhk qjn -xYJ +uiw ina mhk ozt -oSP -uIW -puj -pNy -mhk -mhk -uwU -dOv -rAn -mhk -mhk -mhk +mrn +vRn +wku +bKv +jCm +dPx +miF +keL +iSD +iSD +uOz +qzP wAW -wXk -jte -xFO +yiY +nSb +xOS yeF xle xle xle xle xle -xKx +jlz kte -yaS +cVh fEC wmV qVP -uyZ +wQn rpq gEH jlt @@ -92592,15 +91082,15 @@ xGT wrO xNh xFe -nhP -afl +aAj +myy dDQ utP bVO -kUt +ezV wuc -kKV -dPV +iiX +sos trp edK wEW @@ -92642,7 +91132,7 @@ lzM raf uMu vKG -bcY +snW xAG pSd uHF @@ -92650,11 +91140,11 @@ rJs sLD tDn hVb -tKl +ket mTs iAy ora -nxu +oTJ hTZ wjZ jUp @@ -92761,7 +91251,7 @@ euP all eWf eIx -kWg +oHJ bNq wxG uIX @@ -92796,7 +91286,7 @@ pjL llN jqu sSU -tBe +vuJ hEi kqQ uUb @@ -92806,33 +91296,33 @@ lJV cYT mhk mhk -sfL +dDi mhk mhk sNW -wht +jQv mhk -xIl -mhk -mhk -nwS -ozo -dOv -rAD -yfC -hAd -enD -thv -tEW -blq -uoW +oOC +qXr +dhu +kZI +miF +keL +jCm +hOO +lzG +tWm +wBm +fNW +beN +oRw xle xle slZ -nGd +iIU wAj xle -qvQ +jep guY yaW fEC @@ -92849,14 +91339,14 @@ vDQ vDQ fov xFe -jEe -wZX +iWp +igs fho erZ -yjr -nFJ +tCh +eiy wuc -gFD +npH sos jXi lhn @@ -92893,8 +91383,8 @@ rpi qYn aWc irp -qGT -hIN +gPZ +gPZ tYq tYq dJT @@ -92921,8 +91411,8 @@ tyh pDu egb mYP -gea -rJi +bhv +roS roS eGL dDB @@ -93000,7 +91490,7 @@ ufR xYG xYG rDV -cGb +mOx dwC iAk sql @@ -93014,11 +91504,11 @@ sHO drI cRq rbl -jcx +tcA uKO vfG -fnm -gUo +lGJ +mAK bNq hOX fEU @@ -93038,7 +91528,7 @@ dDB dDB mEB gDH -vPK +mFA gKi gPT qQP @@ -93062,39 +91552,39 @@ slY mhk mhk mhk -mPG -xYJ +rZb +jXc xYJ nZW xYJ -wht +jQv mhk -nlu -pOb -mhk -gzj -uye -uTh -rBb -puv -xVo -sPt -mKY -wWT -xiF -xOS +rqF +aFb +fVF +kZI +miF +keL +iSD +iyR +cLL +rPW +wBm +fNW +iZW +uoh xle -vrt -vUI -rHS +pgm +swu +iDA wAS xle -xxE +bXi tuZ fEC fEC -xpo -pdN +rPL +lGd dAn cjR ekZ @@ -93106,15 +91596,15 @@ gLs nfg icc xFe -lOu -bku -oMo +rqp +bQc +phd lyc -xms -srF +iTe +gEG wuc xul -dbU +sos wuc wuc gXL @@ -93151,16 +91641,16 @@ rtQ rtQ rtQ ndM -jDv +wpr tYq -xUZ +sYw kOR iSr kws xAG lQA xAG -rHT +dSu nPH wWR pzy @@ -93174,7 +91664,7 @@ tYq tey lsY wjZ -eaT +tyh pDu egb ezi @@ -93294,7 +91784,7 @@ dDB dDB dDB mEB -gEI +gEc mFA slY slY @@ -93312,45 +91802,45 @@ xZh xZh slY slY -krc +uxd kFU kXR slY rXw lYT mhk -xYJ -mhk +uiw mhk mhk mhk -rZK mhk -sNW -xIl +ete mhk -ubB -ozo -rcr -rBx -yfC -szz -efL -mJW -wWT -glM +ani +wJT +sGk +kZI +miF +keL +iSD +iSD +eln +jlW +wBm +fNW +uQK xOS yeS vrz -vKy +dxG wiC dOT xle -xxR -xNI -uMI +chh +aul +jPo rOG -twC +dFQ fEq rpV qVP @@ -93363,15 +91853,15 @@ tdx ojD uDv eyB -wEV -vHj -vHj -vHj -vHj -cAc +ylp +bqx +bqx +bqx +bqx +uvf wuc -vJH -rfe +xul +qTG wuc wpw ufg @@ -93380,7 +91870,7 @@ ufg fWs wuc lzg -tsf +uMu vFU wuc xAR @@ -93412,16 +91902,16 @@ lzM tYq oVK jJP -mmH uwB uwB -oLX +uwB +iWs +uwB uwB uwB uwB uwB uwB -mmH reZ imj ora @@ -93434,7 +91924,7 @@ wjZ tyh eJw vJL -lfe +tkE bhv vXi bZs @@ -93554,7 +92044,7 @@ slY slY mFA slY -rfs +aus voz sRg hmb @@ -93570,41 +92060,41 @@ jIh csA jhs kso -kHH +kYG kYG pep -lJY -uSM -naE -rYv -rYv -nHt -rYv -rYv -oSS -mhk +nJo +avY +oHk +jRJ +cAZ +iHT +vMP +vMP +eRy mhk -pOj -mhk -yfC -yfC -rdo -rBG -yfC -cpc -iwa -yfC -wWT -jjS +pbK +keQ +qzP +kZI +miF +keL +iyR +sSN +ttb +dIQ +wAW +fNW +oYi xZg lBN -vOP +hKU ixl qyx vXr jTh -qaO -xNZ +wXe +fuu qVP qVP qVP @@ -93616,7 +92106,7 @@ xfN daq xFe lgh -dYc +psk nlf yjd xFe @@ -93627,8 +92117,8 @@ dOd nVs lrP wuc -iVJ -peu +xul +sos wuc ufg qpu @@ -93637,7 +92127,7 @@ oAn ufg wuc vmS -dOg +nzA xHO wuc xAR @@ -93668,14 +92158,14 @@ ohu xgw gMs rrQ -esY +hAW mFq wpy wpy vAq wpy jBQ -mCX +wpy wpy mFq wpy @@ -93691,10 +92181,10 @@ wjZ lka rYG txN -mbn +hdz ayV -qRG -qRG +ezi +ezi eGL dDB dDB @@ -93809,13 +92299,13 @@ blb blb blb ueX -mGu +gIx gKK -gPW -hau -oPF -hmg -huz +vOm +tOw +hVk +gpP +iJq ivm slY kPW @@ -93825,49 +92315,49 @@ skW wOM jpR ueX -kDV +aae uxd xaZ dZm slY -lKt +ilo tYL mhk -mhk +twm mhk mhk oaa mhk oTH mhk -xHB -pOK -wvo -iEX -yfC -aws -fMD -sdT -vTN -aws -yfC -lzv -glM +lji +ttb +qzP +kZI +miF +keL +lmm +lkJ +nxK +fVF +wBm +fNW +uQK qHH xle -uVn +dnK vKV wjG wPh xle -xxV -xOP +eof +hQx hDN dcc vRC iqG -aRD -ygF +pBm +nDQ hDN ylR gIV @@ -93884,7 +92374,7 @@ xur xYu xur wuc -vJH +xul sos wuc mqH @@ -93894,8 +92384,8 @@ bRr ufg wuc iai -uoi -bzL +pgg +eMc wuc gqg trp @@ -93927,11 +92417,11 @@ amE ioW xCS xIj -ohR +xIj eoz eoz tTW -nha +bQy tMS xIj vfN @@ -93951,7 +92441,7 @@ ask vzA bhv vzA -oZI +vzA eGL dDB dDB @@ -94069,10 +92559,10 @@ slY atx ueX gQm -hbv +hbw hfZ hmh -pFE +pGE qfV slY kPW @@ -94087,29 +92577,29 @@ ksx mEB slY ueX -wht +jQv sNW mhk -mSi -qBj -uVb -rkR +fkN +nUK +bjh +kbk mhk mhk mhk -vgJ -uAV -tDT -fDp -yfC -hwe -rBN -aws -vTN -oMC -yfC -pTc -rgT +oOC +lPq +uCB +kZI +miF +keL +jgq +hYh +qXr +oul +wBm +dcD +pOM upg xle xle @@ -94117,11 +92607,11 @@ xle xle xle xle -keZ -reT +gyx +uTz ybj uab -kon +rjN wPe xjg flp @@ -94142,7 +92632,7 @@ jWs lnz wuc xul -rJJ +auf wuc ufg tiW @@ -94151,7 +92641,7 @@ bRr ufg wuc jHa -cfT +iMC iMC wuc xAR @@ -94203,7 +92693,7 @@ sCu nQP wjZ qeP -kdJ +jgQ oPV qHI ect @@ -94326,16 +92816,16 @@ slY slY slY eVc -hbv -rkr +hbw +wOZ hmj -hvk +arL sRg slY slY slY slY -iWS +nHp jrX jIN xEm @@ -94344,43 +92834,43 @@ ksA oJR oiw mhk -wht +jQv sqz mhk mTd qBz qTR -rlz +kym rHD qVR wCR -rHL -tDP -qbC -lsJ -yfC -jKh -fMD -vBm -vTN -sQU -mKY -wWT -glM +ani +gUN +iSD +kVg +miF +keL +bQd +ani +hKZ +fVF +wBm +fNW +uQK xOS kWJ tJz -rgz +tIa mvv jsS ocz -wId -uZb +nPe +lTa hDN xyx -jCD +xjg wGK -cSR +cZk dPl pHe rAC @@ -94391,15 +92881,15 @@ tcC wXr gWB gWB -aIH -aIH -eGU +gWB +gWB +oJB jmi fvL lnZ wuc xul -etf +sos wuc ufg iVY @@ -94417,9 +92907,9 @@ ujr rKv dYp trp -sVL +bKa +xul xul -knJ fAr oOL khQ @@ -94464,7 +92954,7 @@ lrE oPV pId kld -qRM +eHf vSx eGL dDB @@ -94556,7 +93046,7 @@ gKL upG daC jBo -oEt +xrN gpI lhq cBw @@ -94584,7 +93074,7 @@ eEq sRg gQG hbw -hgb +aGI hmQ pGE jug @@ -94595,46 +93085,46 @@ vpb lmS lAk jIY -jWt -mTr -ktc +jDm +tfX +khZ nSY nYQ mhk -oUO +ifl mhk mhk wCR wCR qUs -cxT +vAl qmz -oTO +uvb wCR -uej -wms -qbK -jza -yfC -hwe -fMD -aws -vTN -vST -yfC -ijm -jte +swM +mEb +iSD +kZI +miF +vXd +iSD +gVL +pyt +tXy +wAW +chC +nSb xOS par tJz -eSW -eSW +kql +kql rAR ezM -wId -dtj +nPe +nnd hDN -vSu +vcl tPf xjg kXo @@ -94646,16 +93136,16 @@ xur wJK rVT gCq -xrk -bEE +qIp +vZm vZm vZm qIp jaQ -dHE +jiq bBk wuc -jyS +rWU sos wuc ufg @@ -94672,10 +93162,10 @@ xAR trp etx fwS -ePg +iLZ trp jRx -knJ +xul xul mxM jzg @@ -94696,7 +93186,7 @@ ygU iBj qPN noS -rVn +iui wbf iui lyY @@ -94709,7 +93199,7 @@ wbf noS iui qPN -khJ +jQf whc skc wjZ @@ -94819,7 +93309,7 @@ hpj rYL gpI jlL -iwJ +qQR bNq neg wZr @@ -94836,11 +93326,11 @@ dDB dDB dDB qiz -mpG +lKV mGY hXf -oQM -hbI +xGf +jLb hgd mrP xrZ @@ -94849,47 +93339,47 @@ xat xat xat xat -jMQ +tov jEK jJc pOg kft ktM -kIe +sOP otG mhk -xen -ptk +oEn +lPK mhk mTN wTO qVR -rlz +kym rHH oUJ wCR -pup -tbq -qcl -uej -yfC -aws -rBQ -aws -vTN -say -yfC -rjH -glM +aQc +iSD +iSD +kZI +wtV +keL +iSD +ojA +uPW +rPW +wBm +fNW +uQK xOS uJD tJz -tqT -kFs +uZk +gOw jsS iAM -wId -puY +nPe +byv vEP qVV qVV @@ -94897,7 +93387,7 @@ qVV qVV qVV qVV -fWw +grH qlc xur nGi @@ -94909,7 +93399,7 @@ bCf xur xLl xur -xpg +dLv xzE wuc psX @@ -94932,8 +93422,8 @@ nvL oRP trp xIC -knJ -nFu +xul +xul mxM kbc sBm @@ -94970,15 +93460,15 @@ hyi aRI oQF oQF -brb muS muS -lub +muS +qeP tBA oPV -iNz -lHi -jDe +pQn +kqy +apo tSB eGL dDB @@ -95093,51 +93583,51 @@ dDB dDB dDB qiz -mqv +lKV mGZ qOm -qIO +fuV hbR hgn -hmW +jEQ gRL hcl xat vhe vhe wnd -enm +lmS lBn jJc lvu hPd kua -hIe +lEm oiL mhk -lKu -cXm +kPo +wkK mhk wCR wCR qVZ -rlB +kCB rJo sas wCR -rYd -tbq -qdm -aeq -qEp -bCX -bCX -sei -qDp -sQY -mKY -wWT -glM +cXb +iSD +iSD +lPB +odH +keL +iSD +gOt +bYh +uoR +wBm +fNW +uQK xOS uKA uBc @@ -95145,11 +93635,11 @@ tuZ tuZ uBc xjX -wId -dtj +nPe +nnd vEP gxg -ign +djg qVV mpQ lqd @@ -95164,9 +93654,9 @@ iYY xur xur xur -qcY +iYY xur -leB +lik dYj wuc aTn @@ -95190,7 +93680,7 @@ trp trp gEe bbU -knJ +xul fAr top khQ @@ -95205,20 +93695,20 @@ dDB dDB dDB dDB -dbY -kgu +qyN +gCx wOl -uhu -aen +dby +ktT gGB -pNz +ltQ wyb -xJz +pEB wWS wyb jLB sMq -vUg +oae eFy rBy ngL @@ -95330,7 +93820,7 @@ paX rdH gpI ceP -wld +mcj gpI qCT rWH @@ -95353,19 +93843,19 @@ sRg hBq mIA sRg -gQU -raj +kuQ hgZ -hno -bDQ +hgZ +kaz +eOk qgK xPX wzo hLm bGU -nxR -lBE -jKj +wSi +gNV +wqI gEJ xat wnd @@ -95373,40 +93863,40 @@ kIO wnd mhk mhk -wht +sBf mhk mUt wTO uSI -rlN +scY rJo bHU wCR -roV -tbq -tSh -aeq -qFB -rdK -rDf -sel -rDy -uWB -yeu -eTt -tXT -wHE -qnz -vtc -vLf -wZd -sWJ -xkg -sxL -jKm +rik +hyW +iSD +lPB +miF +keL +mye +lZT +uoR +iSD +wBm +mcI +fyW +bcC +hNj +kKh +ebE +iHq +azV +oLo +sCq +nXx vEP wXC -rpo +crJ qVV wXC crJ @@ -95421,33 +93911,33 @@ iYY xKv blb xKv -qcY +iYY wpO wpO huE wuc xul -nVJ -oVo -ceZ +sos +dyr +sos xPf gVA rhj cYE eOt -cYd eOt -kEe -lxT -iZF +eOt +vUf +olV +mkt vRt vUf -skg +vUf vUf muI vUf -vAU -mNG +vRt +mZa trp lbG oJA @@ -95462,8 +93952,8 @@ dDB dDB dDB dDB -eeq -hhZ +rMm +uPX fSf wRa xXJ @@ -95476,7 +93966,7 @@ wsG wtr skn eoa -tJi +wtr leC lfC rUd @@ -95485,7 +93975,7 @@ qeP kWk qeP qeP -lub +qeP ihZ qeP xru @@ -95579,7 +94069,7 @@ cED nQE rLj gNt -lkQ +iIK gKL fMA gFF @@ -95610,7 +94100,7 @@ sRg dOz dOz sRg -trS +qiz qiz qiz fgt @@ -95630,43 +94120,43 @@ msq laD gSX mhk -wht +jQv mhk wCR wCR wCR -rmG +iuF ozO -nuX +rxa wCR -uMg -tcB -uMg -uej -uzd -uUI -bUf -fVV -szG -wow -pxl -wXO -xjh -alh +iSD +tzN +pnK +dbZ +wha +bej +spk +iSD +iSD +iSD +wAW +wXk +qjt +sJv slM tJz vLC -rJH +rRq jsS ezM -xye +fLJ oZi vEP uQu -dYD +jCZ ePV uES -czV +guK qVV yfY mMY @@ -95683,22 +94173,22 @@ wpO blb blb trp -osC -xJG -vJH -nFu +xul +iVJ +xul +xul npH xul qRW xul iVz -iVJ -knJ -vJH -nFu +xul +xul +xul +xul xul tQx -wOd +xul knJ knJ hWU @@ -95738,10 +94228,10 @@ wtr mtP hXY ihZ -qxn +lrE lrE jsv -qxn +lrE pmN lrE lyQ @@ -95866,20 +94356,20 @@ qtG hem cks hCX -gKU -gRe +vwZ +gEM iCw -jDP -wyg -hvy +bnn +lBz +mJe iDO xRV xRV xRV xRV -smV lCg -dbR +lCg +kYa rBh xRV iLF @@ -95887,36 +94377,36 @@ kJb laL loj mhk -scz +jby mhk mVM aSI xRV -oaV +oFy xZS xZS xRV -bUt -tcP -bUt -xRV +xZS xRV xRV +rcP xRV +xhk xRV -szH -sRv +xZS +xZS xRV -saZ -sxw -upj -mTq -wfP -xJX -xJX -gvn -toY -eAX +aXC +jsJ +mKm +qZj +vrS +fKr +sfu +sfu +ugb +wrk +wbd lbO ybJ fbe @@ -95959,7 +94449,7 @@ trp trp trp trp -nCL +yhQ xqd xul trp @@ -96093,7 +94583,7 @@ sHM iqB fdy hnS -sKD +vvC hxY vpZ oRj @@ -96123,50 +94613,50 @@ wbi hrY wbi wbi -fhs wbi wbi wbi -hnO -tgR wbi -oDs -rrC -iqN -mDq -snc -snc -lVL -snc -nys -snc -nTj -snc -snc -mAo -lYU -mmp -mZg +hnO +nxI +sxZ +qGc +pfw +sar +tSA frI -uQi -sfK frI +uIv frI -pfw +aDJ +hKV +mZg frI -pPT -xJR -ofo -mLi -vsl -ewi -uny -xJR frI -ldZ -wXk -sxw -xOS +oyp +mXZ +eWQ +mAR +qWG +fkS +tDM +qWG +qWG +rvr +qWG +mOV +cQG +oUi +twe +qWG +rDv +qWG +qWG +ghL +vWw +aBo +rZz +tfM nsO uBc tJz @@ -96201,15 +94691,15 @@ trp eKW wuc tKR -hCz +huY chO -hOS +oHw gkw lba tKR wuc pRL -gOH +lQh qKI trp aJq @@ -96350,7 +94840,7 @@ qjx iqB phY jmZ -oJl +agY bDh fPY xkX @@ -96401,39 +94891,39 @@ pWM foe jpu lKA -jpu +amh jpu qdS jpu -qWm +xfX xmu jpu jpu jpu foe -xmu +jpu lKA +amh jpu jpu -fMj fXJ jpu aRJ wRg -gNU -tFY -tYb -xOS +rPA +iUh +sXs +atS ftX udA -xJX -cmT +mJB +vDe vJV qBN iKm eUZ vEP -hji +rPU pCF fCS syR @@ -96454,16 +94944,16 @@ dDB dDB blb trp -oPJ +qaF vvP wuc gTe -uRm -eQR -rvE -kDg -jJl -oUY +nYH +lHz +hmk +lHz +nYH +gTe wuc pRL lQh @@ -96505,16 +94995,16 @@ qPN qPN qPN uDQ -mWk -oop +iOM +cLW wbf -fAS +bJZ yeO muS muS muS fOQ -tBO +ulp sVN blb dDB @@ -96656,31 +95146,31 @@ kfw yeD kJj yjZ +fUC yjZ +lCK yjZ -lZD -yjZ -nau -yjZ -nHB -obm -oAk -oWb -pfO -siC -siC -siC -siC -siC -qio -siC -siC -siC -rCd -tiC -tIc -xGc -xOS +dOf +wWD +wvk +vkC +fUC +dKm +rEJ +fUC +fUC +fUC +fUC +fUC +fUC +fUC +fUC +uqF +dff +qGe +gNP +hzp +atS ftX fnP gvV @@ -96690,11 +95180,11 @@ qYK jMX uYH vEP -qmr +jDc jIl qVV -qmr -mik +jDc +jIl qVV eux gzu @@ -96712,7 +95202,7 @@ dDB blb trp qDx -jRe +azZ wLd hPW kOm @@ -96853,7 +95343,7 @@ rrG gDq qqJ yjE -rco +thg yjE dGV fDO @@ -96895,7 +95385,7 @@ lYj hJP noz niw -inU +xSd ubT lYj mmw @@ -96903,7 +95393,7 @@ eLx hCr tsF xRV -mCp +aEd xZS xZS xZS @@ -96912,32 +95402,32 @@ xRV vIJ kux wGz -lbh -oAF -riu +yaL +dAC +dAC +yaL +fNC +rpv +cXh +jVM +xeO +wMg +xeO +xeO +xeO +xeO +kTm +sot xeO wMg -qej wMg -jVM -jVM -ceE -jVM -jVM -vkh -vkh -efC -efC -vpN -oTo -dHi -vpN -vkh -vkh -brw -bUz -sxw -xIy +wMg +xeO +xeO +cUf +gNP +uQK +iUH isK uBc uBc @@ -97160,43 +95650,43 @@ hwo hDC tsF ijN -uLB -yat +mDL +lfs wCt lEa lWk xRV owR -nAx -tmQ -xeO -xeO -xeO -xeO -mnn -naO -yfH +wLo +xfe +ehT +urq +ddB +yaL +yaL jVM -wzj -nvo -row +wRO jVM -puD -pQe -qdp -qme -ycS -hWQ -ycS -ycS -vUq -uNW -poz -tIc -sxw -xuU +rEF +kGE +waI +xeO +tnZ +oPy +lql +lql +cik +wKr +dsl +wMz +ntP +rNL +xeO +gNP +uQK +hWm fvh -ogX +abB tCF ncD blb @@ -97422,42 +95912,42 @@ xQw uVT jsN jLI -jXl +xZS vrn nzK -lkZ -xeO -lpa -iTv -xeO -izB -jFY -xyY +wQB +yaL +ids +wgI +uuz +iVP jVM -paV -wLJ -oXe +cKt jVM -vwg -ycS -tEI -ycS -uAF -ree -rFQ -ycS -ucV -vkh -oBm -tIc -bxA -gYK -wAW -vtv -kev -qtl -qtl -qtl +hIm +azq +iTv +wMg +wKr +vtr +mcV +iGq +uTE +eKD +oCi +wFd +wFd +wFd +nEq +qie +oCV +kuk +iuR +iuR +dDB +dDB +dDB +dDB dDB dDB dDB @@ -97632,7 +96122,7 @@ gwl pPm jKU qbP -psL +iGM nck tau gKL @@ -97678,43 +96168,43 @@ iri bah uVT uVT -lWQ +gBw xZS vrn ncL -qwz -xeO -wKr -lql -xeO -wJV -nbu -xyY -jVM -uPd -jVM -sbm +wQB +joH +lte +tsB +iGS +oTg +fri +moG jVM -vkh -paL -ycS -uAX -uAX -reW -uAX -vEq -szM -vkh -qOt -wYr -tYd -hgE -jqQ -uNn -vOh -qTM -qTM -qtl +tPX +gfm +rcE +fRX +gAH +mmL +mmL +qDC +btY +mUi +xMu +qmM +vSi +hEJ +wMg +ocv +eZi +kHX +tYX +dDB +dDB +dDB +dDB +dDB dDB dDB dDB @@ -97923,7 +96413,7 @@ sUy muW mOk iap -gSQ +oGo iDk sUy jaK @@ -97937,41 +96427,41 @@ qCJ xQw jLI jYU -vrn -ncL -wQB -wMg -wKr -eUW -xeO -eGl -nbZ -ntY +pZv +sjL +tNf +iiI +hnn +jRl +kqZ +buU jVM -uPd +rpg jVM -rJp -vjm -sON -vkh -tFG -qmx -uBn -iZI -vpU -bKP -vkh -vkh -uGp -wYr -tYH -mVa -uLn -aTr -hyl -wlf -qTM -qtl +hdI +kRA +paJ +wMg +iZM +fEX +fkF +jLS +jkT +oxn +saL +iLh +hEJ +hEJ +aIi +qWV +eZi +kHX +tYX +dDB +dDB +dDB +dDB +dDB dDB dDB dDB @@ -98194,41 +96684,41 @@ eHk xQw gtr xZS -vrn +vET ncL -wQB -dNw -lql -lKK -lql -wKq -qfb -qGU +qwz jVM -ydu -qEa -fLi -rZn -sOp -gYg -qdC -qmI -uCh -vRE -vpY -sfh -dks -vkh -tjb -xAP -wAW -urh -wAW -vtv -iho -wlL -wDZ -iho +jVM +jVM +jVM +jVM +jVM +eAm +jVM +uCo +bYE +rYJ +xeO +gLg +jdx +dLW +feR +fZK +qbB +iwt +uSh +uSh +kdg +xeO +mWF +eZi +kHX +tYX +dDB +dDB +dDB +dDB +dDB dDB dDB dDB @@ -98451,41 +96941,41 @@ iWW uVT uVT uVT -vrn +vET nAy uIv -okp -qfF -wuw -jxy -pNa -qfF -dfW jVM -uPd jVM -glv -swt -pvR -vkh -vzM -qmO -rZN -rfI -rHd -vpY -bfI -vkh -tkp -cbT -xli -urv -yeh -blb -kev -fUj -nnR -iho +rXy +bFO +avp +avp +qiI +jVM +aVS +xeO +xeO +xeO +sXD +qSa +feR +aZh +jdx +pOQ +wKr +wKr +kKD +mDA +wMg +jrN +eZi +kHX +tYX +dDB +dDB +dDB +dDB +dDB dDB dDB dDB @@ -98696,54 +97186,54 @@ xil ljN gTH ipf -kGM +wmu sUy jnh hEm uVT idN -itY +pWB rWE qJq oIP azm xQw -vrn +vET ncL wQB -wMg -lqF -lLJ -maa -wKr -qgr -xBr -nIS -rnY +aaZ jVM -qTH -aOx -gVq -vkh -orH -cOm -eZJ -vRE -tZR -cOm -szS -efC -wEp -qYu +eAm +jVM +jVM +jVM +jVM +jVM +lzB +jVM +udf +yfC +yfC +yfC +qzt +ljT +vzE +yfC +yfC +yfC +yfC +yfC xli -dDB -dDB -dDB -qtl -qTM -qTM -uMC -dDB +qqO +aaf +ifH +iuR +tYX +tYX +iuR +tYX +tYX +iuR dDB dDB dDB @@ -98965,42 +97455,42 @@ iLC jts wzK eAc -wYD +lcY kuE wQB -xeO -guR -wiU -mad -wKr -qgA -beH +esr jVM rpg jVM +eXB +eIW +mqz jVM -pfU -sON -vkh -glb -vpY -sZQ -fzf -rHm -sgS -szZ -vkh -wEp -wZo -tYX -dDB -dDB -dDB -qtl -qTM -qTM -uMC -dDB +xVB +wLU +jHH +sZo +yfC +lnN +egc +qiC +qiC +qiC +qLU +pnF +qiC +mKY +hoc +lhT +rgY +diP +rgM +trB +trB +saz +lcD +gCl +euz dDB dDB dDB @@ -99213,7 +97703,7 @@ ahE plz sDq jwi -pdT +qCj uVT uVT eku @@ -99222,45 +97712,45 @@ eku uVT uVT uVT -lAS +lYl kvl wQB -xeO -lti -kGE -mam -wKr -lYY -iHL +lmz +rXO +rpg jVM -ygb -ipt +uGD +nAq +pSI jVM -qqh -hMz -tGq -tGq -qnA -xmt -xmt -wqs -wqs -wqs -xmt -eJY -wZo +xVB +jVM +nrg +xXD +yfC +sJV +uIA +mWT +kHU +pIC +pIC +oun +wBc +kxY +mka +tFE +rlj +diP +trB +trB +trB +ryW +diP +kHX tYX blb blb blb -qtl -qTM -qTM -uMC -blb -blb -blb -blb blb blb blb @@ -99468,7 +97958,7 @@ xMk xsh hcc xGJ -wjY +tfB jwi qtd hOg @@ -99479,46 +97969,46 @@ ghD gaf xQw mvT -vrn +vET kvT -nVD -xeO -ltl -hzY -pum -joy -qgH -wKr +wQB +cZi jVM -qhp -rLw -rsV -pgW -mwP -pRP -tGq -xUG -bgK -qIP -rHQ -shw -kQA -xmt -tmc -wZo +moG +jVM +mLT +wWC +gls +jVM +lzB +jVM +jfT +dEq +wEv +uJi +ntu +jcG +qbA +qbA +hLb +tRJ +wBc +oIY +bMV +dPp +kMA +iuR +tYX +tYX +tYX +iuR +nUd +ong +iuR tYX dDB dDB -dDB -kev -wmY -uPO -iho -dDB -dDB -dDB -dDB -dDB +blb dDB dDB dDB @@ -99727,7 +98217,7 @@ hcd plz pkh jwi -jFG +aeC qVo uVT dJd @@ -99736,46 +98226,46 @@ hMh juS uVT mvT -vrn +vET kyO -smf -xeO -lty -xeO -xeO -wMg -dCm -wMg +wQB +drC jVM +eAm jVM -rMV +lMH +uSb +iYd +onc +lzB jVM -swL -sOW -tfa -tHh -qnL -xiL -rgc -rgc -shU -dvl -luU -tmV -wZo +oEz +ptT +yfC +lZf +qCK +bRK +bRK +aTz +qRE +ltr +wBc +usA +bMV +dPp +kUL tYX +blb +blb dDB +tYX +trB +trB +trB +tYX dDB dDB -kev -uPO -mjB -iho -dDB -dDB -dDB -dDB -dDB +blb dDB dDB dDB @@ -99983,7 +98473,7 @@ xqv cEX xGJ pie -jnr +jwi jDa fyt uVT @@ -99993,46 +98483,46 @@ cpT xQv xQw mvT -vrn +vET ncL -uUE -xeO -oCc -xeO -nTg -joy -qgN -pEC -qYc +wQB +ydz jVM -rMY +lEO jVM -sPE -pvS -tGq -tGq -poh -ono -rgx -rIg -prQ -uXb -sSr -kcs -wYV -xli -blb -blb -blb -qtl -wlf -qTM -uMC -dDB +jVM +jVM +jVM +jVM +joR +jVM +vyP +xnb +yfC +edG +wBc +qiC +qiC +ghj +wBc +wBc +jgx +mKY +bMV +djf +kUL +tYX dDB +blb dDB +tYX +lcF +trB +trB +tYX dDB dDB +blb dDB dDB dDB @@ -100242,7 +98732,7 @@ plz pkh jwi tBo -hQs +jGO xYO xYO iLN @@ -100250,46 +98740,46 @@ xYO xYO xYO xYO -qlV -oGJ +lXU +rJZ wQB -xeO -oCc -xeO -kTd -mnu -qgR -omA -vzI jVM -vXW jVM -siz -sPT -lej -tGq -voF -qGw -uVE -rgx -prQ -chP -xmt -qqq -tIA -xli -dDB -dDB -kev -kev -oxS -usl -iho -iho -dDB -dDB -dDB +pXU +avp +bFO +avp +csZ +avp +obi +jVM +jVM +cJv +yfC +yfC +erf +sfb +tkm +yfC +cyP +tQC +yfC +yfC +aub +dPp +lir +iuR +blb +blb +blb +iuR +iuR +bnU +bnU +iuR +tYX dDB +blb dDB dDB dDB @@ -100504,54 +98994,54 @@ ifK izD izD oXK -izL +uAY uAY xRU -vrn -oGJ -wVZ -xeO -oBV -xeO -pgE -mpC -qhm -xBK -iuL +vET +rJZ +wQB jVM -vXW jVM -fjF -pww -pRU -tGq -qon -uXb -uXw -rgx -prQ -sBp -xmt -wEp -tIL +jVM +jVM +jVM +jVM +jVM +jVM +ksJ +emp +xym +mgW +isO +aiQ +nVw +jJd +uyV +kcM +eRa +eRa +vfo +pkU +lUl +urf +cPj tYX dDB dDB -qtl -suq -wnB -uth -uMW -uMC -dDB +blb dDB +tYX +iNF +diP +fVM +tYX +blb +blb uXY uXY uXY uXY uXY -blb -dDB dDB dDB blb @@ -100749,68 +99239,68 @@ pIS gCg mxe uFm -xqa +rfo xsh gjS plz sDq jwi qtd -trk +oxm kjU -izL +uAY iLV iYh lZt lZt xYO -hBK -dTS +uBI +kTX sbU -xeO -oCc -xeO -maz -mqc -qho -qFO +xZS +lHp +tjs +qqH +kBM +blC jVM +gLo +cTn +ajQ jVM -nKk -rgf -kWF -pxO -gHt -tGq -scC -qGY -uXb -rIS -prQ -oYu -sSt -tqq -wYF +aLB +ilx +qEO +fQd +oNF +sGN +bzj +tmD +lEs +gQT +uMg +msk +wmX +kUL tYX -dDB -dDB -qtl -jSK -qpg -uuv -uMX -uMC blb blb +blb +blb +tYX +iNF +trB +fOW +tYX +dDB +dDB uXY dvo hkW rLN uXY uXY -dDB -dDB -dDB +blb blb dDB dDB @@ -101021,44 +99511,46 @@ xYO xYO xYO xYO -mZh -rbU -uIv -voa -uZY -xeO -xeO -xeO -jVM -jVM -jVM -obU -gOB -jVM -jVM -jVM +ujB +dtO +gwx +aNj +jvd +fEF +nlQ +chI +mTT jVM +jKh +keb jVM -voL -uXb -uXb -rJh -vEI -sxd +tGq +tGq +xmt +xmt +lAt +xmt +xmt +xmt +iaI +xmt xmt -wEp -tIL xli +iFD +fzT +kUL +tYX +blb +aef +fBN dDB -dDB -kev -bjV -qBy -uwl -kdl -vPC -qtl -qtl +tYX +tKl +trB +oIS +iuR +anX +anX uXY iTn nBw @@ -101066,8 +99558,6 @@ nId mpk uXY dDB -dDB -dDB blb dDB dDB @@ -101276,55 +99766,55 @@ myT iMg iYj sDp -vjx +gZy kke -kgz -oGJ +laK +rJZ wQB -xeO -lus -uZY -wvn -uZY -ndq -nuv -nKm -odA -aBy -mAn -wzj -atM -cNF +xZS +dib +woz +uvs +mpx +oxy +jVM +jKh jVM -qpX -qHm -aes -rJl -hBr -vUG +tGq +qnP +tGq +sxl +aTg +oPh +qDL +jKV +vTP +rpo +mjr xmt -ffX -tJG -xli -blb +ptf +xBd +qXP +kTF +iuR +dDB +eVX +qGf blb -qtl -qTM -vHL -ozd -fYp -xbP -hYm -rUB -uvh +iuR +oqT +trB +xrE +wZx +lRU +fOJ +bgx xcv nBw ghQ nId uXY dDB -dDB -dDB blb blb blb @@ -101526,7 +100016,7 @@ opH oSv xGJ pNi -jDQ +sPb jRk ihc kBg @@ -101535,52 +100025,52 @@ opn jwa opn jYY -aEl -oGJ +prA +rJZ wQB -xeO -xeO -xeO -puw -xeO -jVM -nvo -wzj -jVM -jVM -ceE -jVM -jVM +xZS +sRT +hdW +auP +kGw +vQx jVM +lzB jVM -efj -xKa -xKa -rJv -tax -vUZ -qKE -wEp -tJD -xli -dDB +haH +ouO +tGq +ipG +aTg +cri +bOG +uRv +als +cXH +nZG +xmt +liw +rzy +qFc +cEo +tYX dDB -kev -kst -qSU -uwx -agC -kqo -qtl -qtl +kii +nun +blb +tYX +rNN +trB +bNL +iuR +anX +anX uXY -ivX +hzb erK iPj bob uXY -nnk -dDB dDB blb dDB @@ -101792,53 +100282,53 @@ iYD jLR jLR xMY -tSe -oGJ -wQB -wix -xeO -hee -mbK -mqz +dCu +oGt +eBC +jVM +jVM +jVM jVM -uPd +mbf jVM jVM -mRp -aeN -lSw -hym -fhC -mKH -qrw -xCu -rij -xCu -xCu -xCu -asN -wEI -tIL +ulE +jVM +amK +ooR +rzH +mog +aTg +yji +iBB +iBB +ldo +aTg +aTg +duK +sWq +gLO +pbD +kUL tYX -dDB -dDB -qtl -jSK -rjz -uxi -uMX -vnb blb blb +dDB +dDB +tYX +iNF +trB +fjq +tYX +dDB +dDB uXY cHX qYh qXG uXY uXY -dDB -dDB -dDB +blb blb dDB dDB @@ -102024,7 +100514,7 @@ xvT fAx fVU xvT -gvY +xvT blb blb blb @@ -102039,9 +100529,9 @@ iqF hdg aEc xGJ -jnS +hxj qtd -mlx +rSI xMY iBc iMZ @@ -102049,51 +100539,51 @@ qTD azv jNe psc -tSe -oGJ +dCu +rJZ wQB xAV -xeO -lMy -puN -pSI +ngv +nCX jVM -qHb -qZp +tUj +xXe jVM -gTV -oXt -xCu -xCu -xCu -xCu -xCu -uCv -ril -vVw -vFv -vVw -lJc -wEp -tIL +ruS +sem +bxl +ujk +tGq +rmV +aTg +vPW +qxG +iBB +ldo +aTg +aTg +duK +bIN +bVJ +sTb +kUL tYX dDB -dDB -qtl -rOy -rrx -uyg -uOh -vnb -dDB -dDB +blb +blb +blb +tYX +iNF +hrc +fjq +tYX +blb +blb uXY uXY uXY uXY uXY -blb -dDB dDB dDB blb @@ -102294,7 +100784,7 @@ ycC ycC noq ueC -tJF +sjy qoD jnZ jEx @@ -102305,45 +100795,45 @@ xMY xMY xMY xMY -xMY -tUK -oGJ +voN +sta +rJZ wQB vpT -xeO -lMz -vXo -pSK +txW +eDi jVM +tUj jVM -nKL jVM -oAp -iBg -sze -pya -tgS -sze -wkk -vVw -vVw -oAp -vFE -tPd -sTp -jFf -tKm -xli -dDB -dDB -kev -kev -oxS -uLu -mVY -mVY -dDB +tpQ +jVM +ljg +waY +tGq +cME +aTg +dYu +aTg +aTg +aTg +dYu +ctN +xmt +wUc +nUd +bmY +lir +iuR +blb +blb dDB +iuR +iuR +ifH +ifH +iXi +tYX dDB dDB dDB @@ -102531,7 +101021,7 @@ cRI dbs fkj wct -edU +vRg fKc eVz fTe @@ -102541,8 +101031,8 @@ xvT gfs gwS gxi -gxX -gzf +kkY +rxY qjy nWr hsO @@ -102563,53 +101053,53 @@ hHF lGo jNO geE -tWL -oGJ +wCM +rJZ wQB -ycx -xeO -lMH -cnu +eIO +xND +ind jVM +oZy +img +img +uvx jVM -xCz -ygb -jVM -dNI -vLO -piZ -pyS -gal -vgc -wkk -qJa -vVw -rJT -sih -oup -sTp -wEp -tIA +tGq +tGq +tGq +xmt +ohy +jHl +gqn +gNA +rKo +tnK +xmt +xmt xli +dQY +bmY +kUL +tYX +dDB blb +dDB +tYX +auF +trB +trB +waD +dDB +dDB +dDB +dDB +dDB +dDB blb -blb -qtl -qTM -qTM -vnb -blb -blb -blb -blb -blb -blb -blb -blb -blb -blb -blb -blb +dDB +dDB +dDB blb dDB dDB @@ -102796,12 +101286,12 @@ fUO fXj efy jxp -jFt -fMx +jSQ +pRz gyd gyd pRz -fMx +pRz gCr gHV pRz @@ -102820,50 +101310,50 @@ oUd lun wNv mzM -tWL -kyZ +wCM +iKB kJR +qcB jVM jVM jVM +cCd jVM -jVM -xhQ -qIc -cyh -jVM -jVM -jVM -jVM -jVM -jVM -jVM -qrI -qKE -riM -qKE -qKE -qKE -sTp -vQA -tIL +sON +aYj +vkh +vkh +vkh +pnW +baW +iQe +iQe +ssR +ssR +ssR +ssR +aVA +dfc +vkh +wjT +dPp +kUL tYX dDB +blb dDB -dDB -kev -uPO -mjB -mVY -dDB -dDB -dDB +tYX +trB +trB +trB +waD dDB dDB dDB dDB dDB dDB +blb dDB dDB dDB @@ -102884,21 +101374,21 @@ lLX rnV mrh rTy -rdy -yfd +miA +cON mBo -cUK -bBw +fsk +raE uCe wER -gQR -uKM +lZR +raE raE dBy ena gKE -tzs -eOJ +ipp +rzZ sSQ blb dDB @@ -103058,7 +101548,7 @@ nKz kwZ gDs jXe -oCP +diU gCT mks soO @@ -103077,53 +101567,53 @@ soO gfs ivl mzM -tWL -uFG -vpI +wCM +vqY +tgx jVM -vML -atM -mdj -jVM -uPd -jVM -nKX -jVM -fSq -reU -kXO -pyY -pSm +bZY +qED +wzj +kzF jVM -qrN -ttA -ttA -rJZ -ttA -sBz -xvW -tqz -tIL +oVl +uBN +vkh +eNM +vkh +mce +ohK +rrX +tyz +dJv +rVt +rVt +rVt +scR +sfU +vkh +nUd +dPp +aOt +iuR tYX -dDB -dDB -dDB -kev -wmY -uPO -mVY -dDB -dDB -dDB -dDB -dDB -dDB -dDB -dDB -dDB -dDB -dDB -dDB +tYX +tYX +iuR +iNF +xuJ +iXi +waD +blb +blb +blb +blb +blb +blb +blb +blb +blb +blb blb dDB dDB @@ -103140,21 +101630,21 @@ iaA xin kcA sSQ -tAq +qRx sCl -hUk -hlg -dPH +qiL +twF +fiK +wJk +wJk wJk -tWo -dwh wJk iXm -isY -kJQ +dYI +wJk tWo dYI -gvQ +fxa bsP sSQ blb @@ -103311,10 +101801,10 @@ fXl csS jxp jEu -ksP -xsm +jim +avR gzB -ksP +jim jim gDk gIb @@ -103334,42 +101824,42 @@ xSx jxC ufb xCl -tYQ -kzu +cYY +qIb wiF jVM jVM -lMK -jVM -jVM -xjq jVM -tII -oeF -kGS -xnd -kGS -kSV -pSr jVM -qsA -uCJ -rjb -rKL -siv -sED -rNq -tmV -tIL -tYX -blb -blb -blb -qtl -qTM -qTM -vnb -dDB +rgg +eoM +cqD +iGd +luv +dMi +vkh +caW +jMA +tes +rPX +ycS +aMZ +kRs +qsY +ycS +fxW +vkh +nUd +dPp +aww +xuJ +trB +trB +hML +deR +diP +efm +waD dDB dDB dDB @@ -103398,7 +101888,7 @@ wkg bnz sSQ sSQ -vql +ngq sSQ sSQ wKa @@ -103411,7 +101901,7 @@ wgL wgL wgL wgL -ueG +hgF sSQ sSQ sSQ @@ -103559,7 +102049,7 @@ eND dbz fkj wct -fEV +bGq eBN fQY fTh @@ -103581,7 +102071,7 @@ otX hei hei vPP -hxJ +jPa gIb nsc vzt @@ -103592,44 +102082,44 @@ jye jOs mAv khS -dIN +jbs mwN jVM -vMV -oZr -xkS -pTC -nec -jVM -ygd +bjf +fOo +ojO +mvX jVM -tRH -wzj -kGS -sQn -jVM -jVM -aSQ -qKN -wLA -rNA -siP -sEK -jme -tqK -tIL +iXW +dRb +vkh +tjT +svE +lAV +fYJ +eGU +eTJ +vkI +xNA +wuY +oeZ +luP +jFK +hiD +nUd +dPp +aww +vtX +gHg +trB +trB +kHX +kHX +dTg tYX dDB dDB dDB -qtl -qTM -qTM -vnb -dDB -dDB -dDB -dDB dDB dDB dDB @@ -103655,7 +102145,7 @@ wmE bor sSQ tAq -rWW +tLt sSQ aNl jlV @@ -103665,13 +102155,13 @@ fkq vDV kkO vDV -ntX +ses ijY wgL lLH sSQ sqV -nFy +dWz sSQ goB jbt @@ -103835,7 +102325,7 @@ vPP vPP vPP dKq -hej +cro tdh txh gcz @@ -103849,41 +102339,41 @@ quU quU tsF ubK -uFG -gih -lca -oEN -lMN +oQo +oRn +ooC +wJJ +hPb jVM -msV -mAn +cCe jVM -jVM -jVM -jVM -xNS -osi -uAH -jVM -wnK -clc -asn -rkb -rOm -skY -sED -sXk -wEp -tKC -xli -dDB -dDB -dDB -qtl -qTM -qTM -vnb -dDB +kPp +dsP +vkh +bzJ +lnD +fzw +bKO +eGU +eTJ +luE +kfO +phG +gyy +ycS +jFK +tnj +nUd +dPp +aqf +xcK +iXi +waD +waD +iXi +waD +waD +iuR dDB dDB dDB @@ -103920,14 +102410,14 @@ phs vFm fNR vDV -bHB +mle hWu stX -wiT +yfL wgL tLt sSQ -aTc +uOw dZT sSQ ndp @@ -104106,41 +102596,41 @@ liG rRQ tsF kiB -nBL +bcN wNW jVM jVM jVM jVM jVM -qhp -sfX -nLN -rpy jVM -jVM -jVM -jVM -jVM -nAi -uio -xOB -xOB -xOB -sls -sFJ -xvW -tkp -tMi -xli -urv -yeh -blb -kev -fUj -uPO -mVY -blb +sON +sON +vkh +mae +ksm +opV +fVl +eGU +ebk +vkI +vYW +mDf +aYU +ycS +mno +vkh +nUd +dPp +qBn +nsz +iuR +dDB +dDB +dDB +dDB +dDB +dDB blb qIf qIf @@ -104179,10 +102669,10 @@ grx vDV mkA wCY -vEe +bnI xXG wgL -hcv +ngq sSQ liH uOw @@ -104332,7 +102822,7 @@ xvT itb eip eFk -eYn +gPm xvT fDk gcL @@ -104363,40 +102853,40 @@ jyu ezx tsF vIJ -kzx +frm twJ tgl iSi fLn mLU -jVM -jVM -jVM -jVM -rpJ -mAn -jVM -waS -pzn -xvW -xvW -qtW -rRn -rRn -rRn -rRn -sIh -xvW -gXD -tMj -yeh -uyp -yeh -urv -mVY -sDT -wHX -mVY +tgl +tgl +tgl +vkh +kXC +omk +hsx +pJc +bKO +eGU +xQE +vkI +cIX +ofU +omb +ycS +lJm +vkh +elN +dPp +sFs +fZZ +tYX +dDB +dDB +dDB +dDB +dDB dDB dDB qIf @@ -104442,7 +102932,7 @@ wgL ngq sSQ ewW -aTc +uOw cku ndp gow @@ -104620,40 +103110,40 @@ uff mak tsF qlV -uFG +vqY tmQ tgl lut pbd -mfc -fcn +wtv +hxp qhs -qIg -jVM -jVM -uPd -jVM -vsq -pzs -pTl -xvW -qtW -xzp -hpq -rOx -hpq -sIh -xvW -lWb -mpO -lmo -vcP -uPs -fHb -npY -qTM -qTM -qtl +oRv +vkh +cWB +ccv +tVp +ioa +fBB +eGU +eTJ +wAa +oDX +bFd +iBa +grI +ejX +ove +nUd +dPp +jjZ +bje +tYX +dDB +dDB +dDB +dDB +dDB dDB dDB qIf @@ -104693,7 +103183,7 @@ nFD ljP pKS bkY -lVP +lgQ mbq wgL hgF @@ -104867,55 +103357,55 @@ iEV ptu hpW gcz -qwn +lOY gcz ihs iCf -kUM +rth iZU rth mbp tsF kpF -uFG +vqY wQB tgl lvA -lNb -mfr -mtu -xkW -xGd -yiv -ofk -oAQ -jVM -buk -ogu -xrz -xvW -qui -vqp -rkF -rQt -uEg -tNc -xvW -hlo -tMy -tZG -aiE -waw -uNn -vOh -qTM -qTM -qtl +nyy +diK +xvK +jgb +hRc +vkh +mkD +mpB +dxV +bKO +bKO +eGU +eTJ +wAa +cQN +bXR +cmB +ycS +swW +ove +nUd +gbP +nam +sMt +tYX +dDB +dDB +dDB +dDB +dDB dDB dDB qIf xEW -cUE +dml lXT gnQ kIv @@ -104939,7 +103429,7 @@ mXT mUg kGq sSQ -bbh +vYj sSQ jxU bba @@ -104950,13 +103440,13 @@ vDV ahu clt jbr -guF +xRd kel wgL -rWW +tLt sSQ -hia -ggl +uhH +ouH eBQ ndp gow @@ -105134,45 +103624,45 @@ jyG meu tsF lAS -uFG +vqY wQB tgl wHO pbG wvv -mtu +xvK vGe -czi -jVM -ogK -rOb -htI -uhz -sQA -xrz -xvW -quo -uEg -pCX -vqp -slv -wro -xvW -twf -tMR -tZV -xtZ -yeh -urv -kev -qtl -qtl -qtl +xno +vkh +vkh +mru +vkh +wtw +wtw +pzW +lTy +wAa +fIl +fIl +glA +ycS +jFm +ove +nUd +vip +mjG +fGT +tYX +dDB +dDB +dDB +dDB +dDB dDB dDB qIf tgJ -nQU +aQr bDj onP vsx @@ -105212,7 +103702,7 @@ cAd wgL tLt sSQ -fWW +ewW idW sSQ ndp @@ -105380,7 +103870,7 @@ uIj uIj uIj lto -hyj +hCH lOY gcz lcs @@ -105391,35 +103881,35 @@ lGK mfP tsF lPo -kzu +qIb wQB tgl tgl tgl tgl -wRD -tSn -uZw -jVM -ohF -rhD -jVM -sZn -pzX -tDZ -ygB -quS -eQv -qmf -vrv -pFr -sIt -xvW -twj -mpO -ubf -oEr -yeh +uIP +dsK +pHY +vkh +blB +wKH +lso +wOt +wOt +gGx +xtD +gIv +cAl +wOt +wOt +wOt +cvX +vkh +aWf +vip +duE +aOh +xli blb blb blb @@ -105446,8 +103936,8 @@ llC rbO llP xQa -pqa -pqa +xep +xep tFQ vLc xrC @@ -105461,7 +103951,7 @@ bXO jxZ dlz nFD -iiC +dBt don cSr krY @@ -105648,35 +104138,35 @@ lGK jOS tsF vrn -uFG +vqY smf aCO -lwa +iLA pcK tgl -mtV +qDd xHD xHD -jVM -jiN -jVM -jVM -xvW -xvW -xvW -xvW -xvW -xvW -xvW -xvW -xvW -xvW -sXo -twl -mpO -amI -uAb -yeh +vkh +kRf +vkh +vkh +vkh +fap +vkh +mib +vfM +vkh +fap +fap +fap +vkh +vkh +bnU +mVc +rjz +axd +xli qir qir qir @@ -105899,21 +104389,21 @@ xRH gcz gad ogi -ekF +jvl jcZ lGK mgt tsF kiO -nDV +pCP wNW +coC +pVj +pVj +cRL +ose vpI -vpI -vpI -pwO -sfK -vpI -vpI +aBB nMW tEL rQN @@ -105922,18 +104412,18 @@ rZq vpI pBu vpI -vpI -oXZ -rQN -vpI -pwO -sIG -vpI -xDs -mpO -ucr -xIK -uQC +lvr +aGq +khY +khY +khY +lmz +tbC +diP +vip +gaj +jXJ +mxS jeW pvY xry @@ -105941,7 +104431,7 @@ ppu wSF qir kIS -wfU +lBq csw tlX rVH @@ -105960,8 +104450,8 @@ tCZ gUk rgK geu -xza -xza +xuF +xuF xSO iTR pox @@ -105984,7 +104474,7 @@ wnE oeI qVa mhV -qsu +oiA sSQ ulO ulO @@ -106162,43 +104652,43 @@ iaw uoB tsF kjg -oXV -kJX -xIw -vrH -xIw -xIw -fqL -dRh -kjJ -nNV +rvf +ilK +hTp +kPL +iyh +iyh +icN +mZd +sDZ +pca uVo oBA mut pjA mut -xIw -xIw -xIw -xIw -rlh -vrH -xIw -vYt -xyJ -wFl -sFH -vuL -xIK -ygu -mHb -ona -xEC -ona -uXB +otJ +iyh +nWa +iyh +gwL +kPL +iyh +oWN +pGr +nWq +gns +huj +fIj +uhM +qZy +vCO +lKB +vCO +ile wMZ vnN -ybL +aEo pOm lwk gUn @@ -106418,44 +104908,44 @@ gcz jyM uoB jZn -mxN +baJ rji vAw -nvE +ceS nvE nvE nvE nvE qio -nvE +vCZ uQi nvE oCx -nvE +crx rFn -pAB -hvM +nvE +tPM kfM -fKO -hvM -hvM -hvM -hvM -hvM -hvM -ouf -wZE -ucH -xIM -yfj +cRc +aPK +aPK +aPK +aPK +mcS +nUq +dRT +dRT +nNz +inU +tOC bcv kov viy efB -kov +lJg xyh xRI -ycZ +lJg hVh elM pYr @@ -106487,8 +104977,8 @@ rnE xqN fgW uBl -ibp -kEF +tNF +bZa sJE niI cqc @@ -106676,42 +105166,42 @@ jzo uoB uoB wSZ -dRf -xqC -bOp +moj +xpL +nJj dyF lNp xRA -xRV -qji -svS -rpb -rqw -rqw -rqw +eeJ +aIO +qZw +pNZ +ylX +qUt +qUt qUt -pBe qUt +fNZ qUt qUt xJB vYy vrO vYy -vYy +xJB xJB xJB wZO xpU -uAw -yga -rbo -vCO -wnO -jpK -vCO -lhg -xSp +uBY +ygu +mHb +ona +nkW +riS +ihd +gMM +gBg dUC qTK vnF @@ -106739,8 +105229,8 @@ vTo wYA wPP uer -skp -tZl +pHl +tFW xqN rnE xqN @@ -106762,7 +105252,7 @@ qXl kVb xsj kVb -szh +qNj qNj ofu sSQ @@ -106918,38 +105408,38 @@ uvA xbl xbl rNB -irn -heA +ogG +auT lGE gcz xRH jFF ehj ill -iEK +obN iPU gcz -sFk +cEF gGl qfz wSZ lFg xqC -oFG -oFG -oFG -oFG -oFG -neZ -xIW -ylJ -rRF -kHT -kru +htp +htp +htp +htp +eeJ +ehf +tzZ +mSa +hWk qUt -fwI -ovk -qdW +uZK +ptl +ptl +wrZ +mvd qUt rnc ugH @@ -107013,11 +105503,11 @@ eRX gpM sSQ hrF -oiA -kSY +swk +uOw sSQ hhb -gRO +tRR dxf dxf qNj @@ -107175,9 +105665,9 @@ uvA gIl gKg xbl -gXq -ouP -hAQ +uhI +yhW +clV gcz hyv fyH @@ -107192,22 +105682,22 @@ jjJ wSZ lFg xqC -lcu -siN -ppy -gzx -wRL -qIv -btf -qZq -qIv -oEi -oGv +oqU +xgy +ucC +miP +eeJ +xMv +cdY +mSa +buJ qUt qUt +aIb qUt -oeH -uiW +qUt +uLD +vmr qLt vrY vrY @@ -107271,7 +105761,7 @@ xiE xiE wgL wsR -aTc +uOw sSQ hhb fLt @@ -107432,7 +105922,7 @@ uvA xbl xbl xbl -gXv +flD heH hUI gcz @@ -107447,23 +105937,23 @@ wTd aoz tvP wSZ -uGk +lFg xqC -lcx -oGq -lNw -pvt -pUl -nff -nvP -rqw -rqA -oEI -sTT +lsh +cYD +jGK +rYx +hUO +xqX +tzZ +bCo +eeJ qUt -vjf +iZu +frC +jEz qUt -qey +aGH qUt azN vcN @@ -107527,8 +106017,8 @@ nyp exW lVy wgL -dnJ -myW +swk +ulO wgL wgL wgL @@ -107706,21 +106196,21 @@ wSZ wSZ lFg xqC -hwf -lwJ -phE -pwf -pUt -nfs -xmy -rqw -rqJ -rqw -khW +eBd +gKQ +cnn +niW +ylX +jwf +bmz +mSa +tPW qUt -nnE -tkq -oeH +fEw +rex +axz +qUt +aGH qUt qLA vIZ @@ -107785,7 +106275,7 @@ fLk guC wgL wsR -etv +bAr wgL nah kwW @@ -107951,7 +106441,7 @@ heL hjx gcz gDp -jFK +aoL eDN ilW gcz @@ -107960,24 +106450,24 @@ xRm lJe tyr iGl -aNM -iXi +iGl +aQf xqC -cPK -oGq -sPS -mhf -pUO -rRy -xIW -ylJ -ohO -rqw -dBA -sAB -dWW +eHa +pBO +pBO +jyd +ylX +eMS +tzZ +thx +caK qUt -oeH +rex +rex +lnW +qUt +xDS wua jWy jWy @@ -108203,8 +106693,8 @@ aJq aJq uvA wur -gYy -oyA +nOH +hIi hkm gcz jrJ @@ -108214,29 +106704,29 @@ xRH gcz wSZ jdp -gRG +rlZ wSZ -tyx +nNj ujq nEx xqC -lcN -lwR -ppy -mhg -wRL -rRy -xJx -qUt -qUt -qUt -qUt +pPj +tPE +jAf +vpF +eeJ +wKn +tzZ +eMQ +xxD qUt +oIE +vex qUt qUt -qxk +xDS wua -eAR +gcg vvK rRz smH @@ -108249,8 +106739,8 @@ xMr uSN uWo hkk -wpV -rGc +hkA +cTX xTB ehV uWo @@ -108261,12 +106751,12 @@ nCU xlh aIu dYM -hzk +vbP qDK vEz mGh wfr -wya +cev lHJ vKY lSK @@ -108466,9 +106956,9 @@ uvA gcz xRH xRH -pKj +fLL kro -kSS +rHO wSZ wSZ wSZ @@ -108479,19 +106969,19 @@ xqC xqC xqC xqC -xqC -xqC -xqC -rHV -nwe -nNW -pzr -oFT -pzr -mwV -pzr -pzr -pnn +eeJ +eeJ +eeJ +tmM +pgl +eeJ +eeJ +qUt +qUt +qUt +qUt +qUL +vIC wua qLD uYD @@ -108506,8 +106996,8 @@ xMr yiq uWo kgT -grD -wfj +kpU +oeS pEs xyQ uWo @@ -108519,7 +107009,7 @@ iOm gFs fSG ugJ -nNR +mpy vEz kMm wfr @@ -108556,7 +107046,7 @@ agb uGj wgL oiA -sdm +ulO wgL vum lqC @@ -108716,38 +107206,38 @@ aJq aJq aJq xqC -gMK -dYo -oAC -knt -uPt -hyZ -hFO -hXh -krp -xlZ +mqn +lDp +byN +qdZ +hBX +vmB +azO +fLL iQl -jeg -jAn -jPg +xlZ +xlZ +oNs +hVJ +xlZ jZK -kjL -kBo -tSs +tnB +osP +wfG pwq -oGu -wAn -pwq -mvA -mhY -ykC -qUt -qUt -qUt -qUt +oyn +fSU +fRV +skd +ciV +rrp +wqj +aTb +wqj +fHK qUt -tNs -tnb +roD +xDS wua wua qMp @@ -108764,8 +107254,8 @@ yiL vuT jNq kOT -eBr -kOd +vYU +asm ide mMp ist @@ -108775,7 +107265,7 @@ jjk xlh dfb iDH -nNq +bZz xPW sKq aRC @@ -108800,7 +107290,7 @@ qmZ onG qmZ lpV -vmR +lpV qQp wYA nGI @@ -108813,7 +107303,7 @@ nqV ruC wgL oiA -kWs +ulO wgL guz mos @@ -108972,39 +107462,39 @@ aJq aJq aJq aJq -rvp -igo -iuo -oAV +xqC +cCx +vqJ +kSA oWg -nJx -ber -jHl -rcN -krC -rKV -tLH -loM -xSg -mhu -nJH -kkD -kjh -ode -ons -lyj -lOa -mhr -mvJ -nfD -xcF -ylJ -xGe -rqw -ein -sAB -umM -nnE +nVA +uoJ +oWg +lSh +bgy +bgy +bgy +lXw +pIn +kTG +wEs +pyF +wFe +wOS +isD +hlX +wND +hlE +hlE +hlE +lft +wqj +izk +wqj +knB +qUt +qvr +xDS wua vLF sUg @@ -109019,8 +107509,8 @@ iLp xMr yiQ uWo -rsp -wAE +nQH +rxX tdv eGT sMT @@ -109045,7 +107535,7 @@ toC bGY wCK tDd -nTz +xuN wfr sCp vJR @@ -109229,7 +107719,7 @@ dDB aJq aJq aJq -rvp +xqC xqC xqC xqC @@ -109242,29 +107732,29 @@ ksB sOs sOs xmO -lKn +liT nFW dXO sRL sRL -nVX -sRL -sRL +noV sRL sRL -sRL -nfN -uUq -rqw -ohQ -rqw -seE +bCP +dqB +pIf +lZP +jgF +wqj +rEa +qgJ +mQD qUt -umM qUt +xDS wua wua -tBi +upV qvw tRh soD @@ -109327,7 +107817,7 @@ hpl rAA wgL wsR -aTc +uOw sSQ dDB blb @@ -109494,9 +107984,9 @@ iGl hqW wSZ xoh -hXP -wLl -iEZ +usG +erS +dNj pMS xmO sHe @@ -109504,22 +107994,22 @@ nFW kam boX asZ -ukW +psK cZL sRL -dCH -ixP -sRL -quc -mky -rqw -ohT -oGm -xTd -qUt -umM -qUt -tMx +eWP +hcn +eeJ +wEF +jgF +wqj +rEa +nMn +knO +adh +hbz +vIC +hdZ wua wua wua @@ -109583,7 +108073,7 @@ wgL wgL wgL wgL -dnJ +swk ulO sSQ dDB @@ -109752,35 +108242,35 @@ iGl wSZ hnY hYq -ksX -kCW +xYk +mDJ xID xmO -sHs +sHe pke tzD cqS kCN -wjM -lcW -lyp -pij -pwz -pWX -euK -qIv -nOf -rsv -oGv -nhs +nVa +fuD +xVV +eWP +lNN +bkF +xhD +heN +vjI +ijz +tOg +wqj +qUt qUt -tnO -uYp +qUt +hdZ +qUt +dWW +tnb tnb -gfJ -gfJ -oYB -gfJ gfJ gfJ tnb @@ -109833,15 +108323,15 @@ fDI eQa gdD nyH -kWs uOw -cdq +ulO +ulO aTc jmo gAJ syN oiA -aTc +uOw sSQ dDB blb @@ -110017,26 +108507,26 @@ sHe nFW mEy ncf -nFA -kBH +wUS +dDC onR xVV -lOt -acY -sRL -nfT -xcF -ylJ -oiO -lPR -oYy -qUt -umM +mEA +htN +tje +tje +fWi +qWg +oLD +gmf +qva +nqf qUt +tNs +tNs qUt -qvr uEP -roD +gfJ wua wua iDt @@ -110091,14 +108581,14 @@ xpJ mOq jhZ wnE -sfv +iTy wmD bgB clq bgB clq uqO -uNQ +ulO sSQ sSQ sSQ @@ -110275,25 +108765,25 @@ nFW ghW boX kCP -kBH +iQT wRP sRL -sRL -sRL -sRL -ngo -xIW -rqw -rqw -qUt -qUt -qUt -tNs -tNs +mSa +thx +hbY +mSa +cNk +wqj +uPM +cPp +wqj +wrx qUt +hdZ qUt qUt qUt +gfJ wua spi dqO @@ -110355,7 +108845,7 @@ kXM sSQ sSQ bjp -sQg +uOw pdR kNz bkl @@ -110526,31 +109016,31 @@ hHE nNi hPs xmO -ott +iAv sIA jPq kaF ffD hTW -roB -lde +jYF +qpe sRL -lOH -dlc -mxT -ngw -nAh -nPO -ojw -qUt -nta -qUt -qUt -uVg +rfB +mSa +jVJ +oyq +eeJ +eeJ +eeJ +eeJ +eeJ +eeJ qUt -dWW +hdZ +tnb +tnb +tnb tnb -nnE wua xgg dqO @@ -110562,12 +109052,12 @@ ntF nla nHN vSY -hMn +qzv ldq roz -vuA +roz ssz -yee +rbH wYd mAs yeP @@ -110578,7 +109068,7 @@ blb blb yeP fWT -vtB +wYd uOH ssz kUF @@ -110605,14 +109095,14 @@ gUC twF twF twF -tXw +knC sSQ rch cmz fWr sSQ -yhv -pVr +qNU +fIw tVc jtK shL @@ -110772,39 +109262,39 @@ dDB dDB aJq aJq -pzd -pzd -pzd -pzd -pzd -mHq -mHq -mHq -mHq +iVr +iVr +nFW +nFW +nFW +xmO xmO xmO -oTL -sIS +xmO +xmO +xmO +wFq +nFW nFW sRL sRL xVV -sRL +czq xVV sRL -bFg -mie -wTu -nhs -xIW -rcw -ojU -qUt -gfJ -gfJ -bOH -umM +eeJ +oYj +jvQ +eul +eeJ +egJ +yfF +gMq +duT +gtk qUt +hdZ +tnb qUt tkq qUt @@ -110817,16 +109307,16 @@ xvh xpU xMr sOR -vxa -qiw -fhw +eNp +vxM +hCB ldq -xmD +wWU xQI ssz -yex -vtB -tnt +ixG +wYd +fdv yeP uya uya @@ -110835,11 +109325,11 @@ uya uya yeP oFI -vtB -kyG +wYd +dNo ssz vxp -uIo +xYE ldq rBz liP @@ -110869,7 +109359,7 @@ sSQ sSQ sSQ vvN -rtr +sQg pdR vws bkl @@ -111026,46 +109516,46 @@ dDB dDB dDB dDB -dDB +tYT aJq aJq -pzd -dYf -xaj -meP -uWg -sSl -pSf -jbm -pzd -iFi -jej -jej -jAs +iVr nFW -pmn -wZl -lgq -wZl -ldo +nFW +sJR +usd +fcW +fcW +fcW +nju +jPe +nju +iGt +vtL +sBP wZl -rTj -xIW -wWc -niX -nAM -nQh -okz -qUt -gPo -gUx +pcm +gla +vPt +gla +ktQ +eeJ +wjq +dtv +mSa +diF +fBs +dhH +rsZ +jQB +kAJ qUt -tnO tNs -umM -qNz -umM -rSj +tNs +tNs +tNs +tNs +rbW spP bRt wsb @@ -111076,24 +109566,24 @@ xMr slJ vxs xaC -tgj +ubl ldq roz ssz ssz -yfm +qdN ukB -toI +awO yeP xaW -eeF -vbf +ncH +wGU pST mwu yeP -bjv +qPJ ukB -aCF +dQE ssz ssz xYE @@ -111286,36 +109776,36 @@ dDB aJq aJq aJq -pzd -vIN -eyz -mUC -rIO -rzR -kZf -lqs -pzd +iVr nFW -twN +sJR +sJR +iOY nFW nFW nFW -tBL -wZl -nFM -wZl -vsU +nFU +nFW +wNd +nFW +tDB +unK wZl -piM -miD -rqw -njP -nAW -nTk -okN -qUt -eBV -vwD +xkv +ura +jUU +mqr +hqf +eeJ +mSa +dtv +uQG +vCc +jOb +iQV +lYV +iXy +uYY qUt tNs qUt @@ -111332,25 +109822,25 @@ nkH xMr slJ vxM -qiw -aiI +vxM +aXU ldq qRO ssz bFW -rwW -vtB +pGD +wYd pGD wSH kJW -hJd -rwW +rXM +pGD bMt jAb wSH pGD wYd -rwW +pGD wSL ssz kHo @@ -111539,47 +110029,47 @@ dDB dDB dDB dDB +tYT aJq aJq aJq -aJq -pzd -rDl -ktN -gEQ -rIO -jWR -vmA -rIO -rGL -puC -kZf -jey -pzd -hek -wXt -ndZ -vRx -uxk -qzC -wZl -ngv -miF +iVr +nFW +fcW +nFW rqw rqw +xso +myl +iUT rqw rqw rqw +qow +rqw +wZl +wZl +wZl +rBr +wZl +wZl +eeJ +lxp +syA +eeJ +eeJ +eeJ +rqD +opN +eeJ +eeJ qUt +xrc qUt -qUt -qUt -uiW -qUt -wDC -qQR -roE -vuo +odD +mtc +deS +wua sqA sJi wty @@ -111588,27 +110078,27 @@ xvh uiY uDF uSO -lTb +eBy vxM -cLm +bMc ldq -qnx +qRO ssz oCg -rwW +pGD sMU wYd nFa uBy -rvO -wlJ -rvO -qdr +sMU +kop +sMU +ltE nFa -vtB -rvO -rwW -fCy +wYd +sMU +pGD +jPM ssz fmH ldq @@ -111800,43 +110290,43 @@ blb hwJ aJq aJq -pzd -eKX -jFc -nRo -tJN -wCD -kmb -oDO -rNK -oDO -oDO -jez -dvs -wYC -pGX -wYC -kDq -kDq -ldB -bnh -lPd -qkF -mmi -nkY -nEr -wZl -jVO -dQP -mfo -yaL -rAN -kzX -rdW -sGT -kVl -tRM -vuo +iVr +nFW +rRa +nFW +hUC +luc +cgL +gNs +jjI +rqw +okZ +gZS +txC +xsC +iIZ +kEd +aHl +gZW +rze +uHH +qWC +rze +uSo +vNq +rqw +ohr +rqD +opN +xEM +qUt +eqG +mHh +nNA +rHY +mIP +skN +wua wWX blf unf @@ -111845,7 +110335,7 @@ xbC nkH xMr nla -jsI +dLq vTx pHw ldq @@ -111854,7 +110344,7 @@ ssz ssz xpY tLc -qBg +ktl yeP xaW wuq @@ -111862,12 +110352,12 @@ aZL ciR mwu yeP -tBG +enq ivY -vuK +nLM ssz ssz -uIo +kHo ldq ntW bgA @@ -112054,46 +110544,46 @@ dDB dDB dDB dDB -tIE -aJN -doX -aJN -ydt -rGL -rGL -tRp -rGL -rGL -rGL -rGL -xRX -iux -jeX -pzd -qhq -tDq -rnn -udZ -rtK -uct -lzR -wYC -dSl -wXt -qkF -wXt -nFQ -toA -rvy -fQi -yaL -pBn -cuS -oTZ -nEt -qRI -rqd -vuo +dDB +aJq +aJq +iVr +nFW +fcW +nFW +rqw +rqw +sRD +ptC +qKD +rqw +pfo +ebK +ctH +pvB +rqw +pdl +pEv +iQC +xzl +xzl +xzl +xzl +rDD +akq +rqw +fvj +uDz +jXB +nYs +qUt +ffi +mHh +uqq +qOG +pXk +cCv +wua wtX wtX wtX @@ -112124,7 +110614,7 @@ yeP uya ssz pJr -xYE +kHo ldq vWa hkt @@ -112310,47 +110800,47 @@ dDB dDB dDB dDB -tIE -tIE -bqy -bqy -bqy -bqy -bqy -bqy -bqy -bqy -bqy -bqy -tIE -nFW -akY -nFW -nFW -nFW -mGT +dDB +dDB +aJq +aJq +iVr nFW +fcW +uJq nFW -kKB -ldU -oIk -rpv -pxR -wYo -nlQ -qJj -wZl -rsy -rOD -uhS -yaL -pBJ -pyp -qeO -qvD -qTx -neq -yaL +rqw +rqw +rqw +rli +rqw +wJX +fYH +fYH +gLr +djY +rBO +gdF +kkS +oZO +kkS +kkS +kkS +xjC +xuQ +rqw +fcU +rem +xvM +uDE +qUt +lhi +brw +mnl +uOx +llY +rdA +qUt sqY ata taZ @@ -112566,51 +111056,51 @@ dDB dDB dDB dDB -kmS -dNi -tIE -bqy -bqy -bqy -bqy -bqy -bqy -bqy -bqy -bqy -bqy -tIE -iHs -iQK -tDB -odK -tDB -tDB -unK +dDB +dDB +dDB +aJq +aJq +iVr nFW -cCP -oow -lAb -soN -wwb -wYq -nmy -jOW -wZl -qWT -rON -sgY -yaL -mzc -mzc -tNS -yaL -qTP -yaL -yaL +sJR +usd +nFW +tuY +iAu +rqw +qAj +jsU +xFM +wYH +bnX +bJA +pzd +pzd +rnD +pzd +jbp +vam +cOd +pzd +rnD +pzd +pzd +pzd +iIs +axw +shD +qUt +qnb +qnb +oJx +qUt +izo +qUt +qUt srA lrH -uMD +aaH rtZ xvh ugh @@ -112646,9 +111136,9 @@ ldq lCS ldq ldq -wDG -dYu -oZk +sgB +fhT +qIC pJz jIc bAT @@ -112823,51 +111313,51 @@ dDB dDB dDB dDB -kmS -dNi -tIE -bqy -bqy -bqy -bqy -bqy -bqy -bqy -bqy -bqy -bqy -doX -iHs -pLK -bjX -nFW -nFW -nFW -nFW +dDB +dDB +dDB +tYT +aJq +iVr nFW -uCo -jjZ -lCD -pjM -pjM -mAO -mAO -pjM -nUi -rts -oJi -sgE +krG +sJR +bdN +rZM +gpV +fjp +xcF +gpA +fYH +wYH +ctH +qaV +dDW +bTO +bTO +jfa +qcC +dBj +luG +evA +vVV +vaw +jWz +bAb +dWG +bQQ +bji pjT pCv tOk -tOk +pCv unc -qUa -jgR -sWQ -srN -sWQ sWQ +raZ +qUa +qUa +qUa +qUa iOq nhZ ufF @@ -112900,12 +111390,12 @@ ldq kUF kdn kdn -mlR +vgY qVn fpq -lwH +liL +nBq nBq -pTB tkS uLj clZ @@ -113080,51 +111570,51 @@ dDB dDB dDB dDB -kmS -dNi -tIE -bqy -bqy -cZm -bqy -bqy -bqy -bqy -bqy -bqy -bqy -doX -pVo -iRv +dDB +dDB +dDB +dDB +aJq +iVr nFW nFW -mjk -unO -kla +hhT nFW -xJO -let -oJZ -lwr -pys -wYC -qll -gOf -wZl -ooU -tts -kTL +rqw +rqw +rqw +lXX +rLx +fYH +vrB +ctH +gby +ntZ +jpp +jpp +dxw +jpp +jpp +jpp +jpp +jkC +mei +jpp +ntZ +sSj +sfk +wKO sQd -fQG -oUo +gAu +wrw qfo -qvM -uFJ -cwp -oUo +jRs +jRs +xhG +vNn ssj -waT -uLh +gdx +qSh twE tOs pFI @@ -113134,7 +111624,7 @@ vze vUe kmC wJo -qnx +qRO xzU xzU xzU @@ -113162,7 +111652,7 @@ qVn ldq uLj uLj -jfZ +aid auG uLj dNU @@ -113337,40 +111827,40 @@ dDB dDB dDB dDB -tIE -tIE -tIE -qBl -bqy -bqy -bqy -bqy -bqy -bqy -bqy -bqy -nMX -doX -ivO -iRv +dDB +dDB +dDB +dDB +aJq +iVr +iVr nFW -sJR -obv -seI -nfc +fcW nFW -wqj -wqj -wqj -wqj -wqj -pYK -wqj -wqj -wqj -rwR -rQA -sgY +stY +kDs +kFw +rsv +rLx +ctH +pDX +mIR +urK +pzd +tpG +pvk +pzd +iCj +qMa +uhy +iCj +pzd +cfa +tJo +pzd +vPw +bGD +shD sCi sCi sCi @@ -113417,10 +111907,10 @@ xGw ldq qqd ldq -mNN +qdR naN vOr -jaG +xNe uLj oig oig @@ -113594,47 +112084,47 @@ dDB dDB dDB dDB -kmS -dNi -tIE -bqy -bqy -bqy -bqy -bqy -bqy -bqy -bqy -bqy -bqy -tIE -yju -pOL -jfP -uJG -jQF -spH -klf -akt -wqj -leE -lCV -wmt -wqj -mBb -hUP -nDF -wqj -wSM -rPl +dDB +dDB +dDB +dDB +aJq +iVr +iVr +nFW +fcW +nFW +qAJ +xHi +rqw +aRv +pbk +cll +sOy +sOy +psz +pzd +rnD +rnD +pzd +iTN +rnD +rnD +iTN +pzd +rnD +rnD +pzd +dWF +sfk oYL sCc tOO aYY sCi -qwG -uHe -rrH +rqt +uTb +rrU vwc vDX xww @@ -113677,13 +112167,13 @@ ldq uLj uLj vOr -rqQ +iNS uLj blb blb oig oqg -dkV +pkR vtC blb dDB @@ -113851,9 +112341,26 @@ dDB dDB dDB dDB -kmS -dNi -tIE +dDB +dDB +dDB +dDB +aJq +aJq +iVr +nFW +kxF +nFW +nFW +nFW +nFW +jGT +pbk +qKz +pfW +gHD +dtm +pzd bqy bqy bqy @@ -113861,38 +112368,21 @@ bqy bqy bqy bqy -cZm bqy bqy -tIE -kGz -kZo -nFW -lLv -sJR -spH -uvv -qxw -wqj -oqf -nXx -vNV -pzR -nXx -qmB -qKO -raz -oqT -rQA +bqy +pzd +qAt +yio shf sCc -sTf +tDz pTs sCi cHC qUm rrU -rSm +rZw vDX xww ruD @@ -113903,21 +112393,21 @@ uFo uUj vzy sPO -qnx qRO qRO -qnx +qRO +qRO wFQ qRO roz roz roz -vuA +roz ldq qRO qRO -qnx -qnx +qRO +qRO krz roz xGY @@ -113931,16 +112421,16 @@ qqd qqd qqd ldq -cgY +hWE mAP -omp -uJR +vOr +vzh uLj foL blb oig -nJc -emw +oqg +idp vtC blb dDB @@ -114108,9 +112598,26 @@ dDB dDB dDB dDB -kmS -dNi -tIE +dDB +dDB +dDB +dDB +dDB +aJq +iVr +nFW +sJR +sJR +xUy +xUy +gbG +rsv +hCN +eVH +eQF +pfW +oaK +rnD bqy bqy bqy @@ -114121,37 +112628,20 @@ bqy bqy bqy bqy -doX -yec -fls -nFW -nFW -nFW -nFW -nFW -nFW -wqj -pqs -wqj -wno -wqj -nVY -wqj -qLc -wqj -osr -rQA +rnD +oss +yio ibv sCc -uuh +pTz pTz qfA -qxh -uul +mlK +npV rsg rSz vDX -sEz +xww vDX vDX nay @@ -114172,7 +112662,7 @@ xQI qRO hua hua -yiV +xGw rUR qTv ssz @@ -114184,14 +112674,14 @@ ssz lmb ssz ssz -nIp +njh kgk xQI ldq uLj uLj -omp -xJv +vOr +jtD uLj blb blb @@ -114366,11 +112856,28 @@ dDB dDB dDB dDB -tIE -tIE -bqy +dDB +dDB +dDB +dDB +aJq +aJq +nFW +nFW +nFW +xUy +nFW +nFW +ioz +pbk +dFN +eZj +eZj +pHc +pzd bqy bqy +cZm bqy bqy bqy @@ -114378,39 +112885,22 @@ bqy bqy bqy bqy -tIE -kGz -jPr -gxZ -dxz -kXJ -xwy -sJR -nFW -kKD -vtm -wqj -wob -wqj -xla -wqj -qLq -wqj -rwT -rQA +rnD +oss +gFm shD sCi -sTk -pTH +mhZ +pSN sCi -qxj +kFq vDX vDX vDX vDX xww vDX -twR +eDr xdc xtL xQW @@ -114437,8 +112927,8 @@ mLA dWs lXg cJL -jWp -wJc +klF +evv ktB ssz ssz @@ -114447,13 +112937,13 @@ ssz ssz txV aJX -omp -veG +vOr +oIx uLj foL blb oig -sSw +oqg idp vtC blb @@ -114624,45 +113114,45 @@ dDB dDB dDB dDB -tIE -aJN -aJN -aJN -aJN -aJN -doX -doX -aJN -aJN -aJN -tIE +dDB +dDB +dDB +dDB +aJq +aJq +iVr nFW -iSW -fRZ -liR -jQL -uwH -nfy +exM nFW -kLu -oqo -wqj -wqj -wqj -wqj -wqj -wqj -wqj -oss -qrR +kNX +blP +xUT +arH +nUY +nUY +iCq +rnD +bqy +bqy +bqy +bqy +bqy +bqy +bqy +bqy +bqy +bqy +pzd +djO +deb wkF -pkE +gxl pDD -pTM +dvY vDX vDX vDX -sEz +xww xww xww veq @@ -114690,13 +113180,13 @@ heB nZQ srb yeQ -wLa -plu +gjg +hUH fsL fsL qKt mJy -ahj +bcO yeQ pus nZQ @@ -114710,7 +113200,7 @@ uLj blb blb oig -gRh +uBo idp vtC blb @@ -114885,37 +113375,37 @@ blb blb blb blb -blb hwJ aJq -aJq -vcE -jIb -pyt -nvS +iVr nFW -iUy -hnF -iKN -jRb -kaL -nfy +exM nFW -kLB -leH -wqj -dwW -hwK -wYM -jNH -xLj -ylX +uKD +bFt +xcF +sDs +aFu +bbT +mql +pzd +qBl +bqy +bqy +bqy +bqy +bqy +bqy +bqy +bqy +nMX +rnD oss -qrR +yio wkF pkS pDQ -pTN +xnk qgx xww uHR @@ -114953,7 +113443,7 @@ hAJ gPY vsW aAL -opq +wxZ uXV euO rfJ @@ -114967,7 +113457,7 @@ uLj oig oig tuT -sir +nBF idp vtC blb @@ -115144,41 +113634,41 @@ dDB dDB aJq aJq -aJq -aJq -vcE -jIb -nvS -pyt -vcE -vcE -rdh -fjN -jRz -sSV -nfy -nFW +iVr nFW -oqI +reS nFW -lSf -miH -mCs -qnj -sGF -xbO -wUZ -oJW +xFD +xIW +xcF +rax +uek +pTZ +ayZ +rnD +bqy +bqy +bqy +bqy +bqy +bqy +bqy +bqy +bqy +bqy +pzd +oEk +yio wkF plJ -pEb +ncr bgp vDX qxP vDX wPd wPd -ssF +pNF vmn pqm pqm @@ -115197,20 +113687,20 @@ rMH tjj blb ssz -frg +aVF ldq ssz dmT wlk dDO yeQ -lEu +pVU bLT tEj bqD rcl aAL -mwF +xkK yeQ cNZ wlk @@ -115224,8 +113714,8 @@ uLj vyU sVA okl -sSw -emw +oqg +idp tuT tuT tuT @@ -115401,37 +113891,37 @@ dDB dDB aJq aJq -aJq -aJq -vcE -pyt -kbY -pvA -iIe -vcE -rdh -wBO -wcI -njm -njm -njm -bHA -vtL +iVr nFW -uaP -gni -mCJ -qnn -xLu -eeJ -otf -qrR +exM +nFW +rqw +fzI +rqw +rSy +rqw +jRv +rqw +pzd +bqy +bqy +bqy +bqy +bqy +bqy +bqy +cZm +bqy +bqy +rnD +oss +yio wkF -plZ -pGu +gCI +jpW tpk vDX -sEz +xww lVN wPd bjL @@ -115443,7 +113933,7 @@ tPm fTM bAs ykL -vAo +lJB oah wtt fDQ @@ -115461,7 +113951,7 @@ aSy aSy aSy aSy -lEu +pVU iTB vHT wlk @@ -115475,14 +113965,14 @@ aSy xnE bOR pGK -rRY +gWN jFh tuT -fcd -fjh +xCI +ufn rFi vbR -qtg +oDB rwo eVM tuT @@ -115658,31 +114148,31 @@ dDB aJq aJq aJq -aJq -aJq -weg -jJy -vev -nvS -iIq -vcE -unS -unS -unS -unS -unS +iVr nFW -vcC +xUy nFW -unS -unS -unS -unS -unS -unS -unS -otO -rmu +rlq +fjQ +rqw +ckb +rqw +oRp +vvd +pzd +bqy +bqy +bqy +bqy +bqy +bqy +bqy +bqy +bqy +bqy +rnD +oss +yio vDX vDX vDX @@ -115704,27 +114194,27 @@ xPv uSi wtu wKz -xrX +ezd xBj xUB yha tqD dDB ssz -xrP +ppL roz ssz vLv jLF yeQ fJl -gtl +lgw iTB aSy kkd aSy wtc -lVC +cOC fJK yeQ cdg @@ -115736,15 +114226,15 @@ gWN bey tuT ufn -vly -fjh -sgX -qtg -fjh +qRh +ufn +vbR +oDB +ufn ufn sqh bEN -eVu +afJ jGA vtC cWZ @@ -115759,7 +114249,7 @@ cWZ vtC rzJ vJN -wZI +fhZ tuT tuT dDB @@ -115911,44 +114401,44 @@ dDB dDB dDB dDB -dDB -aJq +tYT aJq aJq aJq -iMy -jJy -nvS -kbY -imE -pyt -iUz -srW -jAF -jRN -kba -alV -kEo -kMo -leN -lDl -bio -vDK -bio -nmL -nEo -nUG -otP -oKp +iVr +nFW +xUy +nFW +aSt +aBL +rqw +jsE +rqw +ocC +vpP +pzd +bqy +bqy +bqy +bqy +dQn +ppV +ppV +ppV +ppV +ppV +fLR +qOJ +yio iOv veq xww -rAg +veq aop xww xww wPd -xOM +cmn vMt tQQ vMt @@ -115957,7 +114447,7 @@ eDz fTM xRB ykL -rOo +ipj jyw wtt kSd @@ -115974,33 +114464,33 @@ ssz vLv qIk yeQ -jjH -oDc +shm +tNR uDg xvF xvF mIg pQY -qzw +iFm kau yeQ fDY xbe pQE sMu -lLQ +vks gWN -wrR +tbK mPu -kOc -wrR -mrv -sgX -iTC +tbK +tbK +kho +vbR +lRj +vbR +dwX +vbR vbR -ruV -sgX -sgX eKP vbR vbR @@ -116172,31 +114662,31 @@ aJq aJq aJq aJq -iMy -iMy -weg -jKf -nvS -jJy -nvS -vcE -ssb -fxO -mLF -kvf -vBe -vBe -vdm -elQ -oLt -nPc -utW -uiI -vBe -xMd -rdb -rsy -oKU +nFW +nFW +gbG +nFW +nFW +nFW +nFW +nFW +nFW +nFW +nFW +pzd +pzd +rnD +pzd +iTN +laU +pzd +iTN +pzd +rnD +pzd +pzd +gGk +gtH vDX vDX vDX @@ -116207,7 +114697,7 @@ xww wPd wPd mzo -sJF +rsl pqm pqm tOZ @@ -116231,37 +114721,37 @@ ssz xLk qIk vuB -wpd -ggv +orW +lve uDg pMA xvF xvF pQY -qzw -ppM +iFm +sWc yeQ rJw eAY pQE jSw -xXL +fEd yel -hOk +pHq tuT tXG -rtf -wrR +vcd +tbK jUc ixM cwS ufn hMA jIj -fjh -vUP +ufn +vJB uKN -bsh +lNk ufn yhF viT @@ -116427,40 +114917,40 @@ dDB dDB aJq aJq -iMy -iMy -iMy aJq -weg -weg -kbY -ktZ -vev -vcE -wJZ -lLP -wOp -wOp -wOp -wOp -wOp -xXT -oLM -xQJ -xQJ -xQJ -xQJ -xQJ -xQJ -otQ -oLh -oYV +aJq +nFW +hKT +mkN +bJn +fcW +aPV +rEd +rEd +fcW +fcW +jVY +cvk +nFW +uvG +siN +ngd +nuV +sue +ngd +cUB +baO +pOT +gMz +rem +rQA +shD xbg -pYb +rOK ebe sKt vDX -sEz +xww ruD wPd vMC @@ -116489,21 +114979,21 @@ vLv nye aSy jGL -kKe +iOL iTB aSy vWI aSy wtc -stU +opW bWs yeQ mYW ahD pQE nIT -xXL -fjh +fEd +ufn vlj tuT kTw @@ -116512,7 +115002,7 @@ aJZ kTw kTw hLU -kyI +kWR svs tGU tGU @@ -116684,37 +115174,37 @@ dDB dDB aJq aJq -iMy -kOW aJq aJq -weg -weg -weg -wOp -wOp -wOp -jgC -qzc -wOp -nZR -buO -uMa -iLr -xXT -oLV -xQJ -ejn -wZP -xqs -xMO -xQJ -rxM -qrR -oZb +nFW +mAi +exM +bYK +mkN +pNh +reS +exM +seN +xUy +rEd +aWb +nFW +pTA +hEw +bWp +gjn +ngd +ibF +diG +baO +pOT +ycQ +rem +nvB +jqq xbg pGU -pTY +aRo qhF svh xww @@ -116740,19 +115230,19 @@ blb blb ssz roz -qsU +sPO ssz aSy aSy aSy aSy -vct +pVU iTB tNw nZQ srb wtc -mwF +xkK aSy aSy aSy @@ -116766,10 +115256,10 @@ tuT jOF wOC rlH -nDZ +okk kTw tqX -wkm +kfy svs vtC vtC @@ -116941,44 +115431,44 @@ dDB dDB aJq aJq -ejV -aJq aJq aJq -aJq -aJq -aJq -wOp -suK -vvl -luh -jAV -wOp -kbE -vgf -dJz -nSu -xXT -cek +nFW +nFW +nFW +nFW +nFW +nFW +nFW +nFW +nFW +eav +eav +nFW +nFW +pOT +pOT +tlJ +cYp +jTC +eOX +pOT +xQJ xQJ -mbV -vJx -rdw -xMO xQJ ryt -qrR -pcc +nvB +uIy pnq pHI -tpE +vsi tPH wPd wPd fpB wPd gsv -bBu +wMN tbB ygu xdc @@ -117004,7 +115494,7 @@ cYG srb yeQ pVU -mLm +ukE tEj rfJ rcl @@ -117021,11 +115511,11 @@ tuT tuT tuT kNZ -weT +kiR rlH oZL kTw -kXl +qXh kfy svs dDB @@ -117206,36 +115696,36 @@ aJq aJq aJq wOp -kIL -lao -lui -ssY -hPq -kbW -nfS -uLf -nfS -xXT -vUS -xQJ -mbV -kSN -rdw -xMo +fqT +mpl +wOp +oLr +tLj +wOp +fsq +iRl +pOT +pOT +pTk +pOT +pOT +pOT +xqs +xMO xQJ -kBc +wMG xPx -pcT +ibv oIR pHM tpK -agV +dnO vMC krd -ruO -rVX +sDM +cKa stP -wbu +pzK tbD ygu xdc @@ -117253,7 +115743,7 @@ ssz ssz ssz xQI -eBn +roz roz ssz iWZ @@ -117261,7 +115751,7 @@ oMI okB nhC oUB -mBQ +bLT oEB sGh uEC @@ -117273,13 +115763,13 @@ bqD mOI rIY hLS -ezg +jmF bYf dxO wOC wOC nyQ -gqK +hiU ktD kTw sok @@ -117463,36 +115953,36 @@ aJq aJq aJq wOp +hOY +rCS +fsl +usP +tAr +mlp +fLg +tHi +tfc wOp -laM -ssY -jBc -mkR -kct -uMa -iLr -uMa -xXT -oLV +mTc xQJ -mbV +ejn vJx -qqx -xMO +pmq +xMo xQJ -ryP +wcR rQA shG sCB sUe tpO -tQI +cZx vMC apF vfk -rWr +iLS tLn -wbu +pzK tbD tyA tTx @@ -117500,10 +115990,10 @@ hYf xSZ vbA vAK +xQI +xQI xGw xGw -yiV -xGw xGw xGw xGw @@ -117518,11 +116008,11 @@ cCb jlS yeQ buA -hMt +idd iiW iiW egr -ewz +vCs nVx yeQ eDF @@ -117531,15 +116021,15 @@ pAs rIY irs oND -ioa +ozs dMm -hgX +wOC aHu rXv nCo uHv rIY -kXl +qXh jWO svs dDB @@ -117719,27 +116209,27 @@ aJq aJq aJq aJq -aJq wOp -lbs -qHy -jBD -qHy -kcy -uMa -uMa -nZR -xXT -cek -xQJ +kqU +uvz +ogE +jhm +qJH +wQc +eQv +rUq +lyq +wOp +mTc xQJ -yjK -xpE +mbV +vJx +mrc xMT xQJ -mEf -qrR -sid +rTC +rQA +boi xbg sUE tqh @@ -117775,12 +116265,12 @@ aSy aSy aSy jKq -jIx -shv -shv -shv -lXV -pok +lRm +eWO +eWO +eWO +jKg +swF eWI eWI eWI @@ -117796,7 +116286,7 @@ kOV kOV rIY rIY -fjn +fPV kjw svs grm @@ -117976,22 +116466,22 @@ aJq aJq aJq aJq -aJq wOp -iUF -jhm -jDr -jSX -kcT -klo -rZL -vgf +wrS +nFc +miQ +wKR +cLJ +raR +iqi +cUY +dnk +wOp +pYi xXT -oLV -plk -xQJ -pYM -nnx +ihv +rdw +dWm xQJ xQJ sgY @@ -117999,8 +116489,8 @@ oNX shD xbg rOK -dzf -lEZ +vvW +fot vMC tiQ iIw @@ -118054,7 +116544,7 @@ iUK cbU rIY byx -wkm +kfy obP iSd aSM @@ -118233,25 +116723,25 @@ aJq aJq aJq aJq -aJq wOp +rds +hcT wOp -jhA -jFs -jTx -tNE -klC -bVk -nSy -xXT -lDx +wny +bua +wOp +vZK +dTd +ghX +kgw +xvV xQJ xQJ -pAn -nnN +bfE +rIo xQJ -xTr -ouY +ohN +oUC oPM sDj uqw @@ -118263,7 +116753,7 @@ eJm noe hYK pNO -dTg +iyt vMC wMP uUf @@ -118311,7 +116801,7 @@ ycE cOW aLr tqX -wkm +kfy svs svs svs @@ -118490,26 +116980,26 @@ aJq aJq aJq aJq -aJq -aJq -aJq wOp +gRH wOp wOp +nWk +iHz +dTd +vCq +ppT +pyk wOp -klR -uMa -vhH -xXT -vUS +mIW xRW tSv -xqS +fik nou xQJ -nWq +ifg xlL -oPO +oPM wBI pnQ pIp @@ -118541,18 +117031,18 @@ ifU eGc cAb xjb -pAF +pYZ nyB gOQ cvH xiT blk -rUE +fxi rrb -rUE +fxi ibI -xVX -bWa +bON +dcx eWI maL usF @@ -118568,7 +117058,7 @@ ycE cOW aLr tqX -wkm +kfy grm blb grm @@ -118745,28 +117235,28 @@ dDB dDB dDB dDB -dDB aJq aJq aJq aJq aJq -aJq -aJq -xXT -xXT -xXT -xXT -xXT -oLV +wOp +wOp +wOp +wOp +wOp +wOp +wOp +wOp +mTc xRW xqS -xqS +fik xqS xQJ -nWQ -rRT -rRT +tOa +oPM +oPM wBI xTO xPj @@ -118798,8 +117288,8 @@ hHf aXI awE kdO -eTh -kls +niF +mIm gMR pAl deh @@ -118808,7 +117298,7 @@ uTR rFF sea wqb -dIP +dlG ois eWI umz @@ -118825,7 +117315,7 @@ ycE cOW aLr tqX -wkm +kfy grm blb grm @@ -119003,8 +117493,8 @@ dDB dDB dDB dDB -dDB -dDB +aJq +aJq aJq aJq aJq @@ -119015,15 +117505,15 @@ wtx xXT kNu lfa -cek +mTc xQJ mjf mFh noB xQJ avN -ovg -rRU +oPM +rYt wBI sEr dQQ @@ -119034,7 +117524,7 @@ vir vir vir vir -sKv +oNN yfA mfl xds @@ -119056,7 +117546,7 @@ reh vnf wML oOw -mZX +keP qrb aSy svz @@ -119082,7 +117572,7 @@ ycE cOW aLr tqX -yen +sNb svs blb svs @@ -119270,9 +117760,9 @@ aJq xXT bsu opA -obG -pPq -vVD +goA +jDS +uFt plB caI mFP @@ -119290,11 +117780,11 @@ uKH qWF wco wco -pvF wco -xdE -xdE -xdE +wco +jtI +jtI +jtI ilw xUV xWD @@ -119322,7 +117812,7 @@ aSy aSy aSy aSy -nIC +sjl nlC eWI tJX @@ -119527,7 +118017,7 @@ aJq xXT nkm xXT -oLV +mTc lfd vwd xQJ @@ -119573,14 +118063,14 @@ rOX gYH sYa yfs -nSR -xoB -lMV -glP +hPU +nZk +fKN +xMc xKX -eex -tFE -pWc +jsa +nCe +kIm eWI dov oLg @@ -119784,7 +118274,7 @@ dDB xXT xXT xXT -pxw +wHS xXT xXT xQJ @@ -119830,14 +118320,14 @@ vey uEw sYa cqn -qcq -foI +xTR +pZJ gJS lIL gJS -arB +cDa mOm -wIh +uLT oWr tJX tJX @@ -120041,7 +118531,7 @@ dDB dDB blb xXT -oLV +mTc xXT oOb xRq @@ -120061,9 +118551,9 @@ vRh uMH xfc rYm -qRc -fPA -qRc +phm +vmp +phm wPK xfc vRh @@ -120086,15 +118576,15 @@ cVQ rOX qBd sYa -kIB +lkS dXU aSy -deQ +iwM tst deQ aSy iMI -vPx +tTT eWI wuf tJX @@ -120109,11 +118599,11 @@ xXP xXP oOl rIY -dpG -wkm +pAY +kfy obP urB -qrh +aKS asb msJ msJ @@ -120298,11 +118788,11 @@ dDB dDB blb ukI -ocs -xTb -oOk -ltT -sGI +wkG +ebc +jDS +cmD +pEq lYf rsL iJb @@ -120317,7 +118807,7 @@ jQo vRh pwA rvX -rZH +ixT svy sSW tbS @@ -120347,14 +118837,14 @@ xlM qrB yeQ yeQ -ppW +riq yeQ yeQ qrB -fuz +bjc eWI dNy -jbb +tJX eWI eWI eWI @@ -120367,7 +118857,7 @@ eWI eWI vlV sok -wkm +kfy svs grm grm @@ -120557,7 +119047,7 @@ blb xXT kNI xXT -oOv +wsL vwd fzq xau @@ -120574,7 +119064,7 @@ vbK upr uMH xfc -rDx +yka vPf rXW tdw @@ -120602,11 +119092,11 @@ ugX sYa sYa sYa -xlP -xlP -epN -xlP -rfJ +wnI +wnI +fIn +wnI +wnI eWI eWI eWI @@ -120616,15 +119106,15 @@ vlV uXU vlV kAR -twk +dng vkZ lCN -wme -qma -nAe +fLI +cQo +cMY vlV -bPb -qqp +fPV +jWO svs dDB dDB @@ -120831,7 +119321,7 @@ vbK xva uMH vbK -sbr +fyL svD sKz uWv @@ -120847,7 +119337,7 @@ wHg mbZ xia jYr -jbc +oaY lZB ivz jYr @@ -120859,29 +119349,29 @@ uWl nbF cVz sYa -rQw -xlP -bAo -xlP -tGp +xNp +wnI +fIn +wnI +dnl eWI asc usJ lCN jsX vlV -jlT +dqj vlV -bch +lEN fsW quw vlV -lRX -ovA -xBY +kjO +fla +keO vlV qXh -uhN +rhH grm blb blb @@ -121072,7 +119562,7 @@ uRF kNJ orC oPQ -lSP +kbm rsL xau rsL @@ -121088,11 +119578,11 @@ vbK upy qWJ rwk -ctq +oBX mzl aOz -sWq -sJI +fRl +skV pMD gto fqG @@ -121116,16 +119606,16 @@ saY qbo hnP sYa -xlP -xlP -jMC -xlP -rfJ +wnI +wnI +aws +wnI +wnI eWI eKf tNT vlV -jbb +tJX tJX gky vlV @@ -121133,11 +119623,11 @@ vlV vlV vlV vlV -tJX -aLh -gky +uhT +uhT +niZ pCU -hJO +tqX kfy svs dDB @@ -121327,9 +119817,9 @@ blb uRF uRF uRF -osf -iWT -lRC +orC +vWM +tGB rsL mIh rsL @@ -121346,10 +119836,10 @@ upP rwg vbK dtC -svP -qRc -qRc -cyj +vym +phm +phm +dss vbK sfq uGX @@ -121373,29 +119863,29 @@ bXG jlN duc sYa -axN -rfJ -iHH -xlP -rfJ +cmO +wnI +fGF +wnI +wnI eWI fxN clb vlV fSB eWI -vbm +gky gky lrh gky -vbm -mNv -xEc gky +mNv +niZ +niZ niZ vlV tqX -fZu +vEn svs grm grm @@ -121630,11 +120120,11 @@ pXQ kwA xaR sYa -qiO -rfJ -gpy -xlP -mYT +wnI +wnI +sXB +wnI +wnI eWI eWI eWI @@ -121652,7 +120142,7 @@ vlV vlV vlV vgy -wkm +kfy svs oOg bly @@ -121841,9 +120331,9 @@ blb uRF uRF uRF -osq vWM -lTF +vWM +ewt rsL mJq rsL @@ -121887,11 +120377,11 @@ bqR ryy boW sYa -mwJ -nEd -aTf -rfJ -fvH +mbj +wnI +eKp +wnI +apw eWI blb blb @@ -121903,13 +120393,13 @@ blb blb eWI tJX -jbb +tJX vlV -tFA +nsW geS -ikP +aWz xsW -cyB +agK qRo wGq hgu @@ -122098,15 +120588,15 @@ dDB blb uRF kPv -lhI -lDH -lUK +fMg +auO +cbH rsL wBs noN vjb vjb -oyG +uoH ikc vwd rsL @@ -122118,7 +120608,7 @@ qWL viA vqU mUO -sLZ +mUO tuE owv rOW @@ -122162,11 +120652,11 @@ eWI pPZ uzo vlV -jYD -mkJ -lwY +bNu +xQj +msJ nwj -wkm +kfy mVD jzp hgu @@ -122364,7 +120854,7 @@ xXT qNF rej wBs -ikk +ijk jSR wxd qYv @@ -122374,9 +120864,9 @@ eXW uNR viA sbN -svZ -qbf -teP +iXM +oKn +tuE owv rOW xvv @@ -122419,10 +120909,10 @@ eWI eWI eWI eWI -ani +cDf xQj svs -nPx +uzY qbn svs kNK @@ -122626,7 +121116,7 @@ rsL rsL xtI xtI -aLg +gXs urd vTm xok @@ -122668,7 +121158,7 @@ blb wos nFs bgQ -xbw +hvX fsT eXo blb @@ -122676,10 +121166,10 @@ blb blb blb sLU -fwk -qQg +tYN +imI svs -vrZ +ewF xJi svs pSq @@ -122875,22 +121365,22 @@ xXT xXT xWd rsL -qOc -uDw +ndY +pms gaL -jsc -blU +oJL +yhK prW pms tCD -nWO +tiv urd qXL xok uGK xok wcq -wvX +pED kea xff ede @@ -122900,17 +121390,17 @@ vCe oJn xer sZx -lAf -hCn -iaO -uyL +wPX +wFa +emn +unT hsC jbd jiT cDy efK wML -wFj +fKP sxm eXo eXo @@ -122924,7 +121414,7 @@ blb blb wos jMa -sbB +mWE gZh oJP eXo @@ -122934,7 +121424,7 @@ eXo eXo eXo qCc -gxc +xBp svs grm grm @@ -123133,11 +121623,11 @@ wyK xfa rsL lRh -reX -tfe -oRs -pbD -prX +pfT +kaD +jpE +jpE +sJr kaD tCD vtA @@ -123148,7 +121638,7 @@ dSq xok mzf wwQ -oDS +gkv wMO gAA jtI @@ -123159,8 +121649,8 @@ xFA fbO ixU ipx -enU -ykv +lHb +skT sCR eQt fjL @@ -123390,20 +121880,20 @@ xXT xfa rsL cgy -ntQ +seM seM rVy seM oGL -xmX +gfQ tCD -pZl +mkh ntK lSu xok tNz xok -api +bgg tfE vFG wMO @@ -123414,10 +121904,10 @@ xok dXb xok wOh -sAA +rUc qbN xZE -ykU +ugo roZ eQt wYa @@ -123432,7 +121922,7 @@ wos sXw vVX sTK -tUD +hGr vbQ iVE ksg @@ -123448,7 +121938,7 @@ jrU qlz nVF msJ -ipB +cYk svs blb blb @@ -123670,7 +122160,7 @@ cyx xok upe xok -cWT +avr nuo eQt eQt @@ -123683,7 +122173,7 @@ qID iHM uSB lDc -oAc +qxB nKj jXr mny @@ -123704,7 +122194,7 @@ srE lom tGI lDc -hgu +fKa pGp svs dDB @@ -123913,7 +122403,7 @@ oyQ pVa qjh qzL -qYq +kbI xok vhC sHV @@ -123923,24 +122413,24 @@ fds xok fni xWw -tAt +cip ujT -pgw +mYd xok xok xok xok -oSG -eMG +enV +ouz xOw xok itF xok qFb wML -urO +gDB ccF -iJF +gMe nRr pJu rqm @@ -123961,7 +122451,7 @@ pJu ldx gMe ccF -lwY +msJ xQj svs svs @@ -124185,17 +122675,17 @@ xok sZH xEq xEq -lQk +xEq xok cnG -ykY +cZl gMQ xok sjp rNd vnf uzK -rOs +dde nVF qsg kcW @@ -124203,7 +122693,7 @@ wos udv tSq mvo -tUD +hGr bFw ulK cdn @@ -124218,7 +122708,7 @@ wos oGk eFV nVF -lwY +msJ xQj grm blb @@ -124448,11 +122938,11 @@ xok xok xok xok -qLB +sjp xaN xjo qQK -ikt +kuO nVF aAD sCk @@ -124696,15 +123186,15 @@ wZA wZA tUH vDC -vYP +esz xaN wQx xEq tec -sjp -qLB +xEq +xEq uqc -lQk +xEq sjp xaN eSd @@ -124723,8 +123213,8 @@ blb blb wos tMs -sbB -rcp +mWE +gZh bmr eXo blb @@ -124732,7 +123222,7 @@ eXo eXo eXo eXo -bAd +cru xaI svs svs @@ -124944,7 +123434,7 @@ dDB dDB xaN eSV -swC +vmN viP xaN mSH @@ -124980,8 +123470,8 @@ ifa blb wos aoa -dzJ -xQN +llH +cKL mTM eXo blb @@ -124990,7 +123480,7 @@ blb blb sLU tYN -rMa +apl svs dDB dDB @@ -125210,7 +123700,7 @@ tZi xWL vkV nBG -mnI +liS xaN eUN xwS @@ -125219,20 +123709,20 @@ xok xok xok xok -bWt +fWJ bNl bCQ qgq -ruo +vOf uXC scj ifa ifa ifa ifa -sFD +kmP vLi -wzb +tQr ifa dDB eXo @@ -125247,7 +123737,7 @@ kQt kQt kQt xJm -gyE +sOt svs dDB dDB @@ -125474,9 +123964,9 @@ xok xok xok vxR -bYS +tbI xok -jYu +qNO xaN lGL jML @@ -125487,8 +123977,8 @@ jTu gTK bDD dhy -pYs -dJf +otB +lee lCh ifa dDB @@ -125504,7 +123994,7 @@ kVx bEd hyE hZP -hVr +uaF svs blb blb @@ -125721,7 +124211,7 @@ blb dDB xaN dNG -gJQ +kol vlq vFn qNO @@ -125730,22 +124220,22 @@ wRd qsV xEQ elh -nVN -jxd +yba +lDr xok geg xok bEB mWc -omF -eGr +eYH +atB vXH jnk -jOK -pOp +gqh +bcK kXQ -gII -aaw +jId +ciW qKe ifa blb @@ -125987,10 +124477,10 @@ wRo vTf xFI gfu -qJr -qJr -qJr -fky +ckt +ckt +ckt +lwu lkV whF okW @@ -125999,11 +124489,11 @@ fUo hyE xKl vkW -oLG +uWr kCI -jOK -aaw -hwk +gqh +ciW +jJT kQt kQt kQt @@ -126246,7 +124736,7 @@ sbq aFj lkV iJL -duS +mZj vTv dpz boY @@ -126256,14 +124746,14 @@ xZX hyE gTS nUo -oBJ +bGe iqD fVy nQo pcL kQt bRk -dkS +oix kVx hyE uHc @@ -126502,14 +124992,14 @@ jiR reN hRA reN -nKH +xUX nKO -bLN +kpX lnu enG xMK kQt -mCW +xZX hyE hyE hyE @@ -126524,7 +125014,7 @@ oix hyE hyE oCM -pBx +mGM hyE leP leP @@ -126759,18 +125249,18 @@ rlM oZz xZJ aVT -pCV enG -pCV -pCV -pHS +diZ +diZ +diZ +uQY xpR kQt -emD +nhl kat dzE oTj -kMz +eLB hyE hKs pYx @@ -127017,7 +125507,7 @@ nWh xEn nWh xnR -iuH +drB wLZ xwn cns @@ -127034,7 +125524,7 @@ snn sQS lxh hyE -dkS +oix hyE rLK wuH @@ -127526,7 +126016,7 @@ dDB blb yeZ rma -xxn +oCB xFL dtk kZF @@ -127534,8 +126024,8 @@ pSB qei qZU jeG -pHQ -gwo +oxg +fZG hQD cqx kQt @@ -127782,17 +126272,17 @@ dDB dDB blb rle -wRq -qMQ -eXf +oqi +xFL +rCa lwn aMy nNZ qei rss hcb -fBq -hmy +owH +sQX idt tKG kQt @@ -128039,8 +126529,8 @@ dDB dDB blb yeZ -bcR -bEC +iyr +dEL wVg nzL nzL @@ -128048,13 +126538,13 @@ nzL qei vCQ qSC -tue -uIe +kcQ +gpT bVD agy kQt -uvu -kQb +tdE +rWA mfp uyA idz @@ -128297,7 +126787,7 @@ dDB blb rle wTJ -wrv +lDw ejx bry heT @@ -128305,14 +126795,14 @@ teE qei xwQ wCH -pFd -qez +sXL +rzd sGE hon kQt lHc pyh -wfS +xyZ pxZ xTf nZq @@ -128553,17 +127043,17 @@ blb blb nzL yeZ -xQx -wrv -pRD -wrv -qFA +iHv +lDw +fKd +lDw +bHy rxP qei -tHS -vNo -bQk -qez +whD +hwh +cTp +rzd uQb ijB kQt @@ -128811,22 +127301,22 @@ dDB nFI yeZ wXg -vHk -wKY +rud +aGb rFp yly -inW +rBg rGp blJ qnJ oiT obs -aoT -mMK +ilE +nwk kQt jeC dLQ -pIm +jie vHx hyE lKG @@ -129071,8 +127561,8 @@ cwb sDA sgw yeZ -bNK -tyY +ser +lfc kQt kQt kQt @@ -129328,16 +127818,16 @@ yeZ yeZ yeZ yeZ -ymd -deR +oXa +dYW dxZ dLQ -lRs dLQ dLQ -mda +dLQ +irc hyE -nkl +jeC xAv hyE dDB @@ -129586,7 +128076,7 @@ blb blb yeZ pUC -iNC +bFh kQt hyE hyE @@ -129594,7 +128084,7 @@ hyE hyE kit dLQ -jwv +tUZ hyE hyE dDB @@ -131407,7 +129897,7 @@ pnt ylD ksN sVk -dtq +jQj xpb ylD lVz @@ -131919,7 +130409,7 @@ sWA kwu ouL aqV -suF +kwu kwu vLs qeT @@ -132701,7 +131191,7 @@ xqq xLY ylD lye -lNF +hmu ylD ylD ylD @@ -136747,7 +135237,7 @@ dDB dDB dDB dDB -wPf +dDB dDB dDB dDB @@ -136811,7 +135301,7 @@ dDB dDB dDB dDB -akZ +aJq aJq aJq tYT diff --git a/_maps/map_files/CTF/downtown.dmm b/_maps/map_files/CTF/downtown.dmm index c61910375820d..fd11025e943c8 100644 --- a/_maps/map_files/CTF/downtown.dmm +++ b/_maps/map_files/CTF/downtown.dmm @@ -1831,7 +1831,6 @@ "Ok" = ( /obj/structure/fluff/bus/passable{ icon_state = "bottomdoor"; - layer = 3; resistance_flags = 64 }, /obj/effect/turf_decal/siding/yellow, diff --git a/_maps/map_files/Deltastation/DeltaStation2.dmm b/_maps/map_files/Deltastation/DeltaStation2.dmm index 514de3bc0d59c..1b962db26c34d 100644 --- a/_maps/map_files/Deltastation/DeltaStation2.dmm +++ b/_maps/map_files/Deltastation/DeltaStation2.dmm @@ -386,22 +386,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/cargo/sorting) -"aeE" = ( -/obj/structure/table/reinforced, -/obj/item/stack/package_wrap, -/obj/item/stack/cable_coil{ - pixel_x = 3; - pixel_y = 3 - }, -/obj/item/stack/cable_coil, -/obj/item/stock_parts/cell/high, -/obj/effect/decal/cleanable/dirt, -/obj/item/radio/intercom/directional/north, -/obj/effect/turf_decal/tile/yellow/anticorner/contrasted{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/construction/mining/aux_base) "aeF" = ( /turf/open/floor/plating, /area/station/construction/mining/aux_base) @@ -882,11 +866,8 @@ pixel_x = 3 }, /obj/structure/window/reinforced/spawner/directional/north, -/obj/item/gun/energy/e_gun/dragnet{ - pixel_y = 4 - }, -/obj/item/gun/energy/e_gun/dragnet, /obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/spawner/random/armory/dragnet, /turf/open/floor/iron/dark, /area/station/ai_monitored/security/armory) "alG" = ( @@ -2089,6 +2070,24 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, /area/station/hallway/primary/port) +"axW" = ( +/obj/effect/turf_decal/box/red, +/obj/machinery/atmospherics/components/unary/outlet_injector/on{ + dir = 1 + }, +/obj/structure/sign/warning/gas_mask/directional/north, +/turf/open/floor/engine/xenobio, +/area/station/science/xenobiology) +"axX" = ( +/obj/effect/turf_decal/siding/purple{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/science/ordnance) "ayh" = ( /turf/open/floor/iron/grimy, /area/station/command/heads_quarters/ce) @@ -2246,6 +2245,18 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, /area/station/command/heads_quarters/qm) +"aBf" = ( +/obj/structure/table/glass, +/obj/item/folder/blue{ + pixel_x = 4; + pixel_y = 4 + }, +/obj/item/folder/white, +/obj/item/pen, +/obj/machinery/computer/security/telescreen/cmo/directional/south, +/obj/effect/turf_decal/tile/blue/opposingcorners, +/turf/open/floor/iron/white, +/area/station/command/heads_quarters/cmo) "aBn" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/cable, @@ -2713,28 +2724,6 @@ /obj/effect/turf_decal/tile/blue, /turf/open/floor/iron, /area/station/service/hydroponics) -"aHq" = ( -/obj/structure/table/wood, -/obj/item/storage/box/matches{ - pixel_x = -2; - pixel_y = 3 - }, -/obj/item/clothing/mask/cigarette/cigar{ - pixel_x = 2; - pixel_y = 2 - }, -/obj/item/clothing/mask/cigarette/cigar/cohiba{ - pixel_x = 3; - pixel_y = 1 - }, -/obj/item/clothing/mask/cigarette/cigar{ - pixel_x = 4 - }, -/obj/effect/turf_decal/tile/blue/half/contrasted{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/command/corporate_showroom) "aHr" = ( /obj/item/kirbyplants/random, /obj/machinery/light/directional/south, @@ -3031,10 +3020,6 @@ /obj/effect/turf_decal/tile/yellow, /turf/open/floor/iron/white, /area/station/medical/chemistry) -"aKU" = ( -/obj/structure/sign/warning/electric_shock/directional/west, -/turf/open/space/basic, -/area/space) "aLv" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -3055,6 +3040,17 @@ dir = 4 }, /area/station/commons/fitness/recreation) +"aLM" = ( +/obj/machinery/computer/security/telescreen/prison/directional/east, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/red{ + dir = 8 + }, +/obj/machinery/light/directional/east, +/turf/open/floor/iron, +/area/station/security/execution/transfer) "aLN" = ( /obj/machinery/atmospherics/pipe/smart/manifold/purple/visible{ dir = 4 @@ -5386,14 +5382,6 @@ /obj/effect/turf_decal/box/red, /turf/open/floor/iron/dark/textured_large, /area/station/science/xenobiology) -"bpL" = ( -/obj/structure/table/reinforced, -/obj/item/stock_parts/cell/high, -/obj/item/stock_parts/cell/high, -/obj/machinery/cell_charger, -/obj/effect/turf_decal/bot, -/turf/open/floor/iron, -/area/station/engineering/main) "bpM" = ( /obj/effect/spawner/random/engineering/tracking_beacon, /obj/effect/landmark/event_spawn, @@ -6190,23 +6178,6 @@ "bAR" = ( /turf/closed/wall/r_wall, /area/station/engineering/break_room) -"bAS" = ( -/obj/structure/table/wood, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/item/clothing/mask/cigarette/cigar/havana{ - pixel_x = 2; - pixel_y = 2 - }, -/obj/item/clothing/mask/cigarette/cigar/cohiba{ - pixel_x = 6; - pixel_y = 2 - }, -/obj/item/clothing/mask/cigarette/cigar{ - pixel_x = -2; - pixel_y = 2 - }, -/turf/open/floor/iron/grimy, -/area/station/command/heads_quarters/hos) "bAU" = ( /obj/structure/window/reinforced/spawner/directional/east, /obj/structure/lattice, @@ -6892,6 +6863,14 @@ /obj/effect/mapping_helpers/airlock/access/any/supply/maintenance, /turf/open/floor/iron, /area/station/maintenance/fore) +"bHr" = ( +/obj/structure/table/reinforced, +/obj/item/stock_parts/power_store/cell/high, +/obj/item/stock_parts/power_store/cell/high, +/obj/machinery/cell_charger, +/obj/effect/turf_decal/bot, +/turf/open/floor/iron, +/area/station/engineering/main) "bHA" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/door/airlock/maintenance_hatch{ @@ -7253,30 +7232,6 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/construction) -"bLy" = ( -/obj/machinery/computer/cargo{ - dir = 8 - }, -/obj/machinery/camera/directional/east{ - c_tag = "Cargo Bay - Starboard"; - name = "cargo camera" - }, -/obj/machinery/light/directional/east, -/obj/effect/turf_decal/bot, -/obj/machinery/button/door/directional/east{ - id = "cargounload"; - layer = 4; - name = "Loading Doors"; - pixel_y = 6 - }, -/obj/machinery/button/door/directional/east{ - id = "cargoload"; - layer = 4; - name = "Loading Doors"; - pixel_y = -6 - }, -/turf/open/floor/iron, -/area/station/cargo/storage) "bLC" = ( /obj/structure/extinguisher_cabinet/directional/west, /obj/effect/turf_decal/tile/blue/opposingcorners{ @@ -7433,6 +7388,14 @@ /obj/effect/turf_decal/tile/yellow/opposingcorners, /turf/open/floor/iron, /area/station/commons/lounge) +"bNO" = ( +/obj/machinery/atmospherics/pipe/smart/simple/purple/visible/layer2{ + dir = 6 + }, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/science/ordnance) "bNT" = ( /obj/effect/turf_decal/trimline/neutral/warning{ dir = 8 @@ -7690,15 +7653,6 @@ /obj/machinery/airalarm/directional/north, /turf/open/floor/plating, /area/station/ai_monitored/turret_protected/aisat_interior) -"bRC" = ( -/obj/machinery/cell_charger, -/obj/structure/table/reinforced, -/obj/item/stock_parts/cell/high, -/obj/effect/turf_decal/stripes/corner{ - dir = 1 - }, -/turf/open/floor/plating, -/area/station/ai_monitored/turret_protected/aisat_interior) "bRD" = ( /obj/structure/sign/nanotrasen, /turf/closed/wall/r_wall, @@ -8044,6 +7998,20 @@ /obj/effect/turf_decal/tile/neutral/full, /turf/open/floor/iron/large, /area/station/security/checkpoint/escape) +"bUN" = ( +/obj/structure/table, +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/east, +/obj/machinery/cell_charger, +/obj/item/screwdriver{ + pixel_y = -1 + }, +/obj/effect/turf_decal/siding/purple{ + dir = 8 + }, +/obj/item/stock_parts/power_store/cell/high, +/turf/open/floor/iron, +/area/station/science/robotics/lab) "bUQ" = ( /obj/structure/chair/stool/directional/west, /turf/open/floor/iron, @@ -8314,15 +8282,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/maintenance/port) -"bYv" = ( -/obj/structure/table/reinforced, -/obj/item/stack/cable_coil, -/obj/item/electronics/airalarm, -/obj/item/electronics/firealarm, -/obj/item/stock_parts/cell/high, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/maintenance/port) "bYG" = ( /obj/item/clipboard, /obj/item/folder/yellow, @@ -8805,6 +8764,33 @@ "cfu" = ( /turf/open/floor/circuit/green, /area/station/ai_monitored/turret_protected/ai_upload) +"cfv" = ( +/obj/structure/table/wood, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/item/cigarette/cigar/havana{ + pixel_x = 2; + pixel_y = 2 + }, +/obj/item/cigarette/cigar/cohiba{ + pixel_x = 6; + pixel_y = 2 + }, +/obj/item/cigarette/cigar{ + pixel_x = -2; + pixel_y = 2 + }, +/turf/open/floor/iron/grimy, +/area/station/command/heads_quarters/hos) +"cfx" = ( +/obj/structure/cable, +/obj/machinery/computer/station_alert{ + dir = 4 + }, +/obj/effect/turf_decal/bot, +/obj/machinery/computer/security/telescreen/ce/directional/west, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/station/command/heads_quarters/ce) "cfy" = ( /obj/effect/turf_decal/stripes/line, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ @@ -9417,6 +9403,11 @@ }, /turf/open/floor/iron, /area/station/engineering/atmos) +"cmy" = ( +/obj/structure/cable, +/obj/machinery/computer/security/telescreen/prison/directional/east, +/turf/open/floor/iron, +/area/station/security/execution/transfer) "cmE" = ( /obj/item/kirbyplants/random, /obj/effect/turf_decal/tile/blue/half/contrasted{ @@ -10109,6 +10100,23 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/hop) +"cwc" = ( +/obj/structure/window/reinforced/spawner/directional/north, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/obj/machinery/disposal/bin, +/obj/effect/turf_decal/bot, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/machinery/door/poddoor/preopen{ + id = "sci_experimentor"; + name = "Experimentor Blast Door" + }, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/station/science/explab) "cwe" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -11476,6 +11484,10 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/wood, /area/station/service/theater) +"cNy" = ( +/obj/effect/decal/remains/xeno, +/turf/open/floor/engine/xenobio, +/area/station/science/xenobiology) "cNH" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -11740,17 +11752,6 @@ }, /turf/open/floor/iron/large, /area/station/science/xenobiology) -"cQT" = ( -/obj/structure/table/reinforced, -/obj/machinery/computer/security/telescreen{ - dir = 4; - network = list("xeno") - }, -/obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/science/xenobiology) "cQZ" = ( /obj/structure/sign/warning/chem_diamond/directional/west, /obj/machinery/chem_dispenser, @@ -11789,6 +11790,13 @@ /obj/structure/flora/bush/lavendergrass/style_random, /turf/open/misc/grass, /area/station/hallway/primary/fore) +"cRE" = ( +/obj/machinery/camera/directional/west{ + c_tag = "Security - Armory External"; + dir = 10 + }, +/turf/open/space/basic, +/area/space/nearstation) "cRJ" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -12534,17 +12542,6 @@ /obj/effect/mapping_helpers/airlock/access/all/engineering/general, /turf/open/floor/iron, /area/station/engineering/atmos) -"dbC" = ( -/obj/structure/table/reinforced, -/obj/item/folder/white, -/obj/item/stock_parts/cell/high, -/obj/item/stack/sheet/glass, -/obj/item/stack/sheet/glass, -/obj/item/stack/sheet/glass, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/machinery/airalarm/directional/east, -/turf/open/floor/iron/dark, -/area/station/engineering/storage/tech) "dbO" = ( /obj/structure/chair/sofa/bench/right{ dir = 8 @@ -13188,10 +13185,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/department/security) -"djY" = ( -/obj/structure/sign/warning/secure_area/directional/east, -/turf/open/space/basic, -/area/space) "dka" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, @@ -13613,19 +13606,6 @@ /obj/effect/turf_decal/bot, /turf/open/floor/iron, /area/station/maintenance/port/aft) -"dqs" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/computer/security/telescreen/interrogation{ - dir = 4; - pixel_x = -32 - }, -/obj/structure/cable, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/security/brig) "dqv" = ( /obj/structure/cable, /obj/effect/decal/cleanable/dirt, @@ -13928,11 +13908,6 @@ /obj/structure/sign/poster/official/random/directional/south, /turf/open/floor/wood, /area/station/commons/vacant_room/office) -"dtk" = ( -/obj/structure/table/wood/poker, -/obj/item/clothing/mask/cigarette/pipe, -/turf/open/floor/carpet/green, -/area/station/commons/lounge) "dtn" = ( /obj/machinery/airalarm/directional/east, /obj/effect/turf_decal/tile/neutral/fourcorners, @@ -14987,6 +14962,17 @@ /obj/machinery/light/cold/directional/south, /turf/open/floor/plating, /area/station/maintenance/port) +"dHU" = ( +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 8 + }, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/science/ordnance) "dHX" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 8 @@ -15123,6 +15109,13 @@ }, /turf/open/floor/iron, /area/station/science/xenobiology) +"dJE" = ( +/obj/effect/turf_decal/bot, +/obj/effect/turf_decal/tile/neutral/full, +/obj/machinery/holopad, +/obj/structure/cable, +/turf/open/floor/iron/dark/smooth_large, +/area/station/science/ordnance) "dJH" = ( /obj/effect/turf_decal/siding/wood{ dir = 4 @@ -15926,6 +15919,13 @@ /obj/item/assembly/flash/handheld, /turf/open/floor/iron/grimy, /area/station/command/bridge) +"dTr" = ( +/obj/machinery/atmospherics/pipe/smart/simple/purple/visible/layer2, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/power/apc/auto_name/directional/east, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/science/ordnance) "dTA" = ( /obj/machinery/duct, /obj/effect/turf_decal/tile/purple/half/contrasted{ @@ -15968,12 +15968,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/port/aft) -"dTS" = ( -/obj/structure/sign/nanotrasen{ - pixel_y = -32 - }, -/turf/open/space/basic, -/area/space) "dUb" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -16313,6 +16307,20 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/aisat_interior) +"dYM" = ( +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/obj/machinery/disposal/delivery_chute{ + dir = 4 + }, +/obj/structure/window/reinforced/spawner/directional/south, +/obj/structure/window/reinforced/spawner/directional/west, +/obj/structure/window/reinforced/spawner/directional/north, +/obj/effect/turf_decal/delivery, +/obj/machinery/door/window/right/directional/east, +/turf/open/floor/iron, +/area/station/maintenance/disposal) "dYQ" = ( /obj/structure/table, /obj/machinery/computer/records/medical/laptop{ @@ -17105,15 +17113,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/white, /area/station/medical/virology) -"ejX" = ( -/obj/machinery/computer/security/telescreen/vault{ - pixel_y = 30 - }, -/obj/effect/turf_decal/tile/brown/half/contrasted{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/command/heads_quarters/qm) "ekF" = ( /obj/structure/sign/poster/official/random/directional/south, /obj/machinery/light/directional/south, @@ -17572,17 +17571,6 @@ /obj/effect/turf_decal/tile/bar/opposingcorners, /turf/open/floor/iron/dark, /area/station/service/bar) -"eqP" = ( -/obj/machinery/camera/directional/west{ - c_tag = "Xenobiology - Secure Cell Interior"; - name = "xenobiology camera"; - network = list("ss13","xeno","rd") - }, -/obj/machinery/status_display/ai/directional/west, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/machinery/light/cold/directional/west, -/turf/open/floor/iron/dark, -/area/station/science/xenobiology) "eqU" = ( /turf/open/space, /area/space) @@ -17633,6 +17621,17 @@ }, /turf/open/floor/iron, /area/station/security/checkpoint/supply) +"erA" = ( +/obj/machinery/portable_atmospherics/pipe_scrubber, +/obj/effect/turf_decal/trimline/neutral, +/obj/structure/window/reinforced/spawner/directional/north, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 1 + }, +/obj/effect/turf_decal/box/white, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/station/science/ordnance) "erM" = ( /obj/machinery/vending/cigarette, /obj/effect/turf_decal/bot, @@ -19124,18 +19123,6 @@ }, /turf/open/floor/iron, /area/station/security/checkpoint/escape) -"eKV" = ( -/obj/machinery/camera/directional/north{ - c_tag = "Primary Restroom"; - name = "restroom camera" - }, -/obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/north, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/commons/toilet/locker) "eKX" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -20424,6 +20411,11 @@ /obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, /turf/open/floor/iron, /area/station/engineering/atmos/hfr_room) +"fbh" = ( +/obj/structure/table/wood/poker, +/obj/item/cigarette/pipe, +/turf/open/floor/carpet/green, +/area/station/commons/lounge) "fbn" = ( /obj/effect/landmark/start/station_engineer, /obj/effect/turf_decal/tile/neutral/fourcorners, @@ -20769,15 +20761,6 @@ }, /turf/open/floor/iron/white, /area/station/science/research) -"fff" = ( -/obj/machinery/power/apc/auto_name/directional/north, -/obj/structure/cable, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/machinery/atmospherics/pipe/layer_manifold/supply/visible{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/science/ordnance) "ffi" = ( /obj/structure/cable, /obj/machinery/power/solar_control{ @@ -21360,6 +21343,15 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/service/abandoned_gambling_den) +"fmw" = ( +/obj/machinery/cell_charger, +/obj/structure/table/reinforced, +/obj/item/stock_parts/power_store/cell/high, +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/turf/open/floor/plating, +/area/station/ai_monitored/turret_protected/aisat_interior) "fmB" = ( /obj/structure/window/reinforced/spawner/directional/west, /obj/structure/window/reinforced/spawner/directional/south, @@ -22367,6 +22359,13 @@ }, /turf/open/floor/iron, /area/station/engineering/lobby) +"fzK" = ( +/obj/structure/table/reinforced, +/obj/machinery/cell_charger, +/obj/item/stock_parts/power_store/cell/high, +/obj/machinery/airalarm/directional/east, +/turf/open/floor/plating, +/area/station/maintenance/department/electrical) "fzV" = ( /obj/structure/disposalpipe/segment{ dir = 10 @@ -22516,6 +22515,9 @@ }, /turf/open/floor/iron, /area/station/maintenance/port) +"fBr" = ( +/turf/open/floor/engine/xenobio, +/area/station/science/xenobiology) "fBG" = ( /obj/machinery/atmospherics/pipe/heat_exchanging/simple{ dir = 5 @@ -22706,6 +22708,10 @@ /obj/effect/turf_decal/tile/yellow/half/contrasted, /turf/open/floor/iron/white, /area/station/medical/chemistry) +"fEw" = ( +/obj/structure/sign/warning/electric_shock/directional/east, +/turf/open/space/basic, +/area/space/nearstation) "fEx" = ( /obj/effect/decal/cleanable/dirt, /obj/item/kirbyplants/random, @@ -23259,6 +23265,17 @@ /obj/machinery/computer/security/telescreen/entertainment/directional/east, /turf/open/floor/iron, /area/station/security/prison) +"fLx" = ( +/obj/machinery/power/apc/auto_name/directional/north{ + areastring = "/area/station/science/ordnance/burnchamber" + }, +/obj/structure/cable, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/atmospherics/pipe/layer_manifold/supply/visible{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/science/ordnance) "fLJ" = ( /obj/structure/disposalpipe/junction{ dir = 1 @@ -25780,12 +25797,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, /area/station/engineering/atmos) -"gqG" = ( -/obj/effect/turf_decal/bot, -/obj/machinery/portable_atmospherics/scrubber, -/obj/structure/sign/poster/official/there_is_no_gas_giant/directional/east, -/turf/open/floor/iron/textured_large, -/area/station/engineering/atmos/project) "gqH" = ( /obj/machinery/atmospherics/components/binary/pump{ dir = 1; @@ -26173,22 +26184,6 @@ }, /turf/open/floor/iron, /area/station/service/lawoffice) -"guI" = ( -/obj/machinery/atmospherics/pipe/smart/simple/cyan/hidden, -/obj/machinery/computer/security/telescreen{ - desc = "Used for watching the Engine."; - dir = 4; - layer = 4; - name = "Engine Monitor"; - network = list("engine"); - pixel_x = -24 - }, -/obj/effect/turf_decal/bot, -/obj/machinery/computer/atmos_control/nocontrol/master{ - dir = 4 - }, -/turf/open/floor/iron/dark/textured_large, -/area/station/engineering/atmos/storage/gas) "guK" = ( /obj/structure/cable, /obj/machinery/power/apc/auto_name/directional/north, @@ -26801,9 +26796,6 @@ /obj/effect/turf_decal/tile/neutral, /turf/open/floor/iron, /area/station/hallway/secondary/exit) -"gCt" = ( -/turf/open/floor/circuit/green, -/area/station/science/xenobiology) "gCB" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -27899,13 +27891,6 @@ }, /turf/open/floor/iron/cafeteria, /area/station/service/cafeteria) -"gQF" = ( -/obj/machinery/atmospherics/pipe/smart/simple/purple/visible/layer2{ - dir = 6 - }, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, -/area/station/science/ordnance) "gQH" = ( /obj/structure/sign/warning/secure_area/directional/west, /obj/effect/turf_decal/tile/neutral/fourcorners, @@ -27991,6 +27976,16 @@ /obj/effect/turf_decal/stripes/line, /turf/open/floor/iron, /area/station/engineering/main) +"gRN" = ( +/obj/structure/cable, +/obj/machinery/computer/security/telescreen/prison/directional/east, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/red{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/security/execution/transfer) "gRU" = ( /obj/structure/table/reinforced, /obj/machinery/button/ignition{ @@ -28180,6 +28175,25 @@ /obj/effect/mapping_helpers/airlock/access/all/supply/general, /turf/open/floor/iron, /area/station/cargo/storage) +"gUt" = ( +/obj/structure/table/reinforced, +/obj/item/stack/cable_coil{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/stack/cable_coil, +/obj/item/electronics/airlock, +/obj/item/electronics/airlock, +/obj/effect/decal/cleanable/dirt, +/obj/item/stock_parts/power_store/cell/emproof{ + pixel_x = -3; + pixel_y = 5 + }, +/obj/effect/turf_decal/bot, +/obj/item/clothing/gloves/color/yellow, +/obj/machinery/newscaster/directional/east, +/turf/open/floor/iron, +/area/station/engineering/storage) "gUy" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/table, @@ -28610,10 +28624,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/station/engineering/supermatter/room) -"haF" = ( -/obj/structure/sign/warning/secure_area/directional/west, -/turf/open/space/basic, -/area/space) "haG" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/trimline/green/filled/line{ @@ -28839,6 +28849,16 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /turf/open/floor/iron/white/smooth_large, /area/station/command/heads_quarters/cmo) +"hdI" = ( +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 8 + }, +/obj/effect/turf_decal/box, +/obj/structure/extinguisher_cabinet/directional/north, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/item/radio/intercom/directional/east, +/turf/open/floor/iron/dark, +/area/station/science/ordnance/testlab) "hdK" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -29988,13 +30008,6 @@ }, /turf/open/floor/iron/white, /area/station/science/robotics/lab) -"hub" = ( -/obj/machinery/vending/coffee, -/obj/effect/turf_decal/tile/blue/half/contrasted{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/station/command/bridge) "hup" = ( /obj/structure/cable, /obj/effect/turf_decal/tile/neutral/fourcorners, @@ -30739,17 +30752,6 @@ }, /turf/open/floor/carpet/blue, /area/station/commons/vacant_room/office) -"hFx" = ( -/obj/structure/table/reinforced, -/obj/machinery/computer/security/telescreen{ - desc = "Used for watching the RD's goons and the AI's satellite from the safety of his office."; - name = "Research Monitor"; - network = list("rd","minisat"); - pixel_y = 2 - }, -/obj/item/radio/intercom/directional/north, -/turf/open/floor/iron/dark, -/area/station/command/bridge) "hFP" = ( /obj/structure/disposalpipe/segment, /obj/effect/turf_decal/siding/white/corner{ @@ -32153,6 +32155,16 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/station/cargo/warehouse) +"hXJ" = ( +/obj/machinery/camera/directional/west{ + c_tag = "Xenobiology - Secure Cell Interior"; + name = "xenobiology camera"; + network = list("ss13","xeno","rd") + }, +/obj/machinery/status_display/ai/directional/west, +/obj/machinery/light/cold/directional/west, +/turf/open/floor/engine/xenobio, +/area/station/science/xenobiology) "hXO" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -32263,11 +32275,6 @@ /obj/effect/turf_decal/tile/yellow/opposingcorners, /turf/open/floor/iron/dark, /area/station/medical/chemistry) -"hZb" = ( -/obj/effect/turf_decal/tile/blue/half/contrasted, -/obj/machinery/digital_clock/directional/south, -/turf/open/floor/iron/dark, -/area/station/command/bridge) "hZl" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/door/morgue{ @@ -32895,6 +32902,10 @@ }, /turf/open/floor/iron, /area/station/maintenance/department/chapel) +"ifA" = ( +/obj/structure/sign/warning/secure_area/directional/south, +/turf/open/space/basic, +/area/space/nearstation) "ifR" = ( /obj/structure/disposalpipe/segment{ dir = 5 @@ -33015,6 +33026,13 @@ }, /turf/open/floor/plating, /area/station/medical/virology) +"iij" = ( +/obj/structure/table, +/obj/machinery/cell_charger, +/obj/item/stock_parts/power_store/cell/high, +/obj/item/radio/intercom/directional/north, +/turf/open/floor/iron, +/area/station/command/teleporter) "iiy" = ( /obj/structure/easel, /turf/open/floor/iron, @@ -33148,6 +33166,25 @@ /obj/effect/turf_decal/tile/neutral/half/contrasted, /turf/open/floor/iron, /area/station/maintenance/department/security) +"ika" = ( +/obj/item/phone{ + desc = "Supposedly a direct line to Nanotrasen Central Command. It's not even plugged in."; + pixel_x = -3; + pixel_y = 3 + }, +/obj/item/cigarette/cigar/cohiba{ + pixel_x = 6 + }, +/obj/item/cigarette/cigar/havana{ + pixel_x = 2 + }, +/obj/item/cigarette/cigar{ + pixel_x = 4.5 + }, +/obj/structure/table/reinforced, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron, +/area/station/command/heads_quarters/ce) "ike" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/orange/visible, /obj/effect/decal/cleanable/dirt, @@ -33348,6 +33385,16 @@ /obj/effect/turf_decal/tile/neutral/anticorner/contrasted, /turf/open/floor/iron, /area/station/science/ordnance/office) +"imj" = ( +/obj/item/reagent_containers/condiment/enzyme, +/obj/item/kitchen/rollingpin, +/obj/structure/table, +/obj/item/reagent_containers/cup/bowl, +/obj/item/reagent_containers/cup/beaker{ + pixel_x = 5 + }, +/turf/open/floor/iron/cafeteria, +/area/station/service/kitchen) "imp" = ( /obj/effect/turf_decal/stripes/line, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -33615,12 +33662,6 @@ }, /turf/open/floor/iron, /area/station/engineering/atmos) -"iqg" = ( -/obj/effect/turf_decal/bot, -/obj/effect/turf_decal/tile/neutral/full, -/obj/machinery/holopad, -/turf/open/floor/iron/dark/smooth_large, -/area/station/science/ordnance) "iqj" = ( /obj/effect/turf_decal/trimline/purple/filled/warning, /turf/open/floor/iron/white, @@ -35065,11 +35106,6 @@ /obj/machinery/duct, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) -"iJw" = ( -/obj/effect/spawner/random/medical/two_percent_xeno_egg_spawner, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, -/area/station/science/xenobiology) "iJE" = ( /obj/structure/table/wood/fancy, /obj/machinery/door/window/left/directional/east, @@ -35541,6 +35577,13 @@ /obj/effect/turf_decal/tile/yellow/opposingcorners, /turf/open/floor/iron, /area/station/engineering/supermatter/room) +"iRd" = ( +/obj/structure/table/reinforced, +/obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/science/xenobiology) "iRf" = ( /obj/machinery/power/turbine/turbine_outlet, /turf/open/floor/engine, @@ -35753,25 +35796,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/medical/coldroom) -"iTM" = ( -/obj/structure/table/reinforced, -/obj/item/stack/sheet/rglass{ - amount = 50; - pixel_x = 2; - pixel_y = -2 - }, -/obj/item/stock_parts/cell/emproof{ - pixel_x = 1; - pixel_y = 3 - }, -/obj/effect/turf_decal/bot, -/obj/machinery/newscaster/directional/east, -/obj/item/mod/module/plasma_stabilizer, -/obj/item/mod/module/thermal_regulator, -/obj/item/mod/module/magboot, -/obj/item/mod/module/signlang_radio, -/turf/open/floor/iron, -/area/station/engineering/storage) "iTW" = ( /obj/structure/closet/emcloset, /obj/effect/decal/cleanable/dirt, @@ -35979,6 +36003,13 @@ /obj/effect/turf_decal/tile/red/fourcorners, /turf/open/floor/iron, /area/station/security/checkpoint/supply) +"iWz" = ( +/obj/structure/table/reinforced, +/obj/machinery/cell_charger, +/obj/item/stock_parts/power_store/cell/high, +/obj/structure/sign/poster/contraband/self_ai_liberation/directional/north, +/turf/open/floor/iron, +/area/station/science/research/abandoned) "iWA" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -36148,14 +36179,6 @@ "iYi" = ( /turf/closed/wall, /area/station/commons/toilet/locker) -"iYp" = ( -/obj/structure/cable, -/obj/machinery/nuclearbomb/selfdestruct{ - layer = 2 - }, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, -/area/station/ai_monitored/command/nuke_storage) "iYq" = ( /obj/machinery/computer/prisoner/management{ dir = 4 @@ -36417,16 +36440,6 @@ /obj/item/pen, /turf/open/floor/iron, /area/station/medical/chemistry) -"jbn" = ( -/obj/structure/cable, -/obj/machinery/computer/security/telescreen{ - dir = 8; - name = "Prisoner Telescreen"; - network = list("prison"); - pixel_x = 27 - }, -/turf/open/floor/iron, -/area/station/security/execution/transfer) "jbr" = ( /obj/structure/curtain/cloth/fancy/mechanical/start_closed{ desc = "A set of curtains serving as a fancy theater backdrop. They can only be opened by a button."; @@ -36518,17 +36531,6 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) -"jce" = ( -/obj/structure/table/wood, -/obj/machinery/light/directional/south, -/obj/item/stack/package_wrap, -/obj/item/hand_labeler, -/obj/machinery/computer/security/telescreen/vault{ - dir = 8; - pixel_x = 26 - }, -/turf/open/floor/wood, -/area/station/command/heads_quarters/hop) "jcg" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/brown/visible, @@ -38006,6 +38008,13 @@ "jtC" = ( /turf/open/floor/plating, /area/station/service/abandoned_gambling_den) +"jtD" = ( +/obj/structure/table/reinforced, +/obj/machinery/cell_charger, +/obj/item/stock_parts/power_store/cell/high, +/obj/effect/turf_decal/bot, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/storage) "jtV" = ( /obj/structure/sign/warning/electric_shock, /turf/closed/wall/r_wall, @@ -38217,6 +38226,14 @@ }, /turf/open/floor/iron/dark, /area/station/security/execution/education) +"jxj" = ( +/obj/structure/table, +/obj/item/stock_parts/power_store/cell/high, +/obj/item/stock_parts/power_store/cell/high, +/obj/machinery/cell_charger, +/obj/structure/extinguisher_cabinet/directional/west, +/turf/open/floor/iron, +/area/station/science/robotics/mechbay) "jxm" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -38531,13 +38548,6 @@ }, /turf/open/floor/iron, /area/station/maintenance/starboard/aft) -"jBs" = ( -/obj/structure/table, -/obj/machinery/cell_charger, -/obj/item/stock_parts/cell/high, -/obj/item/radio/intercom/directional/north, -/turf/open/floor/iron, -/area/station/command/teleporter) "jBt" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -38677,7 +38687,6 @@ /obj/machinery/power/terminal{ dir = 4 }, -/obj/structure/cable, /obj/structure/sign/warning/electric_shock/directional/north, /turf/open/floor/plating, /area/station/maintenance/department/electrical) @@ -38942,6 +38951,12 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, /area/station/maintenance/port/aft) +"jFu" = ( +/obj/structure/cable, +/obj/machinery/nuclearbomb/selfdestruct, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/command/nuke_storage) "jFC" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -40172,10 +40187,6 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/entry) -"jUT" = ( -/obj/structure/lattice, -/turf/open/space/basic, -/area/space) "jUU" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -40387,18 +40398,6 @@ /obj/effect/turf_decal/tile/red/opposingcorners, /turf/open/floor/iron, /area/station/service/theater) -"jYv" = ( -/obj/structure/table/reinforced, -/obj/machinery/cell_charger, -/obj/item/stock_parts/cell/high, -/obj/machinery/firealarm/directional/south, -/obj/machinery/light_switch/directional/east, -/obj/effect/turf_decal/bot, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/station/engineering/break_room) "jYA" = ( /obj/effect/turf_decal/box/red/corners{ dir = 1 @@ -40838,15 +40837,6 @@ }, /turf/open/floor/iron, /area/station/cargo/storage) -"kdL" = ( -/obj/machinery/cell_charger, -/obj/structure/table/reinforced, -/obj/item/stock_parts/cell/high, -/obj/structure/window/reinforced/spawner/directional/south, -/obj/structure/cable, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, -/area/station/ai_monitored/command/storage/eva) "kdM" = ( /obj/structure/sign/poster/official/do_not_question/directional/south, /obj/effect/turf_decal/tile/blue/half/contrasted, @@ -41080,25 +41070,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/service/chapel/funeral) -"kgi" = ( -/obj/structure/table/reinforced, -/obj/item/stack/cable_coil{ - pixel_x = 3; - pixel_y = 3 - }, -/obj/item/stack/cable_coil, -/obj/item/electronics/airlock, -/obj/item/electronics/airlock, -/obj/effect/decal/cleanable/dirt, -/obj/item/stock_parts/cell/emproof{ - pixel_x = -3; - pixel_y = 5 - }, -/obj/effect/turf_decal/bot, -/obj/item/clothing/gloves/color/yellow, -/obj/machinery/newscaster/directional/east, -/turf/open/floor/iron, -/area/station/engineering/storage) "kgm" = ( /obj/structure/table/wood, /obj/item/folder/red, @@ -42455,44 +42426,6 @@ /obj/machinery/duct, /turf/open/floor/iron/white, /area/station/science/research) -"kyI" = ( -/obj/item/stack/cable_coil, -/obj/item/bodypart/arm/right/robot{ - pixel_x = 3 - }, -/obj/item/bodypart/arm/left/robot{ - pixel_x = -3 - }, -/obj/structure/table, -/obj/item/radio/intercom/directional/west, -/obj/item/assembly/prox_sensor{ - pixel_x = 5 - }, -/obj/item/assembly/prox_sensor{ - pixel_x = 5 - }, -/obj/item/assembly/prox_sensor{ - pixel_x = 5 - }, -/obj/item/assembly/flash/handheld, -/obj/item/assembly/flash/handheld, -/obj/item/assembly/flash/handheld, -/obj/item/assembly/flash/handheld, -/obj/item/assembly/flash/handheld, -/obj/item/assembly/flash/handheld, -/obj/item/stock_parts/cell/high{ - pixel_x = 3; - pixel_y = 16 - }, -/obj/item/stock_parts/cell/high{ - pixel_x = -3; - pixel_y = 16 - }, -/obj/item/stock_parts/cell/high{ - pixel_y = 15 - }, -/turf/open/floor/iron, -/area/station/science/robotics/lab) "kyR" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/railing/corner, @@ -43804,14 +43737,6 @@ /obj/effect/turf_decal/stripes/line, /turf/open/floor/iron, /area/station/maintenance/department/eva/abandoned) -"kSn" = ( -/obj/structure/table/reinforced, -/obj/item/stock_parts/cell/high, -/obj/item/stock_parts/cell/high, -/obj/machinery/cell_charger, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, -/area/station/engineering/storage/tech) "kSt" = ( /obj/machinery/atmospherics/pipe/smart/simple/dark/visible, /obj/effect/turf_decal/stripes/line{ @@ -43947,6 +43872,9 @@ pixel_x = 5 }, /obj/machinery/camera/autoname/directional/south, +/obj/item/toy/figure/bitrunner{ + pixel_x = -6 + }, /turf/open/floor/iron/dark/smooth_large, /area/station/cargo/bitrunning/den) "kUn" = ( @@ -44626,11 +44554,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, /area/station/maintenance/disposal/incinerator) -"lcP" = ( -/obj/machinery/atmospherics/pipe/smart/simple/purple/visible/layer2, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, -/area/station/science/ordnance) "lcT" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment, @@ -44971,8 +44894,8 @@ /turf/open/floor/iron, /area/station/hallway/primary/fore) "lhp" = ( -/obj/item/kirbyplants/random, /obj/structure/sign/poster/official/report_crimes/directional/south, +/obj/structure/aquarium/lawyer, /turf/open/floor/wood, /area/station/service/lawoffice) "lhC" = ( @@ -45473,6 +45396,22 @@ /obj/effect/landmark/generic_maintenance_landmark, /turf/open/floor/plating, /area/station/maintenance/department/chapel) +"lnk" = ( +/obj/structure/table/reinforced, +/obj/item/stack/package_wrap, +/obj/item/stack/cable_coil{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/stack/cable_coil, +/obj/item/stock_parts/power_store/cell/high, +/obj/effect/decal/cleanable/dirt, +/obj/item/radio/intercom/directional/north, +/obj/effect/turf_decal/tile/yellow/anticorner/contrasted{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/construction/mining/aux_base) "lnm" = ( /obj/structure/closet/secure_closet/captains, /obj/effect/turf_decal/stripes/line{ @@ -45655,18 +45594,6 @@ }, /turf/open/floor/iron, /area/station/cargo/storage) -"lpC" = ( -/obj/machinery/light_switch/directional/east, -/obj/structure/table, -/obj/item/crowbar, -/obj/item/wrench, -/obj/item/clothing/mask/gas, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 8 - }, -/obj/machinery/light/cold/directional/north, -/turf/open/floor/iron, -/area/station/science/xenobiology) "lpG" = ( /obj/structure/chair/office{ dir = 1 @@ -47692,15 +47619,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central/fore) -"lOw" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/purple/visible/layer2{ - dir = 4 - }, -/obj/machinery/meter/layer2, -/obj/structure/sign/warning/no_smoking/directional/east, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, -/area/station/science/ordnance) "lOA" = ( /obj/machinery/suit_storage_unit/atmos, /obj/effect/turf_decal/box/red/corners{ @@ -47981,17 +47899,6 @@ }, /turf/open/floor/iron, /area/station/cargo/storage) -"lTh" = ( -/obj/structure/table/wood, -/obj/machinery/computer/security/telescreen/interrogation{ - dir = 1 - }, -/obj/item/pen, -/obj/effect/turf_decal/siding/dark_red{ - dir = 4 - }, -/turf/open/floor/iron/checker, -/area/station/security/interrogation) "lTt" = ( /obj/machinery/door/window/brigdoor/right/directional/west{ name = "Shooting Range"; @@ -48701,6 +48608,19 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/port) +"mdG" = ( +/obj/structure/rack, +/obj/item/tank/internals/emergency_oxygen/engi, +/obj/item/tank/internals/emergency_oxygen/engi, +/obj/item/wrench, +/obj/item/stock_parts/power_store/cell/emproof{ + pixel_x = 4; + pixel_y = 2 + }, +/obj/item/lightreplacer, +/obj/effect/turf_decal/bot, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/storage) "mdM" = ( /obj/machinery/computer/records/medical{ dir = 1 @@ -49097,6 +49017,16 @@ /obj/effect/spawner/random/structure/tank_holder, /turf/open/floor/plating, /area/station/maintenance/fore) +"miN" = ( +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/obj/machinery/disposal/delivery_chute{ + dir = 8 + }, +/obj/effect/turf_decal/box/red, +/turf/open/floor/engine/xenobio, +/area/station/science/xenobiology) "mjo" = ( /obj/machinery/recharge_station, /obj/effect/decal/cleanable/dirt, @@ -49368,6 +49298,14 @@ }, /turf/open/floor/iron/dark/corner, /area/station/engineering/atmos/pumproom) +"mnQ" = ( +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/commons/toilet/locker) "mnW" = ( /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, @@ -49675,6 +49613,13 @@ }, /turf/open/floor/wood/tile, /area/station/service/library/artgallery) +"msO" = ( +/obj/structure/table/reinforced, +/obj/item/stock_parts/power_store/cell/high, +/obj/item/stock_parts/power_store/cell/high, +/obj/machinery/cell_charger, +/turf/open/floor/iron, +/area/station/commons/storage/primary) "msR" = ( /obj/effect/turf_decal/tile/red/opposingcorners{ dir = 1 @@ -50473,6 +50418,13 @@ /obj/structure/sign/poster/official/safety_eye_protection/directional/south, /turf/open/floor/plating, /area/station/maintenance/space_hut/observatory) +"mCe" = ( +/obj/structure/table/wood, +/obj/item/paper_bin, +/obj/item/pen, +/obj/machinery/computer/security/telescreen/interrogation/directional/west, +/turf/open/floor/iron/checker, +/area/station/security/interrogation) "mCf" = ( /obj/structure/disposalpipe/trunk{ dir = 1 @@ -50976,18 +50928,6 @@ "mHE" = ( /turf/open/floor/iron/dark, /area/station/service/chapel) -"mHL" = ( -/obj/structure/table/reinforced, -/obj/machinery/cell_charger, -/obj/effect/turf_decal/siding/purple{ - dir = 8 - }, -/obj/effect/turf_decal/siding/purple{ - dir = 4 - }, -/obj/item/stock_parts/cell/high, -/turf/open/floor/iron, -/area/station/science/lab) "mHM" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, @@ -51264,6 +51204,13 @@ }, /turf/open/floor/iron, /area/station/cargo/office) +"mKn" = ( +/obj/machinery/portable_atmospherics/canister, +/obj/machinery/atmospherics/components/unary/portables_connector/visible, +/obj/effect/turf_decal/box, +/obj/machinery/computer/security/telescreen/test_chamber/directional/north, +/turf/open/floor/iron, +/area/station/science/xenobiology) "mKp" = ( /obj/structure/chair/comfy/brown{ dir = 4 @@ -51555,13 +51502,6 @@ }, /turf/open/floor/iron, /area/station/command/teleporter) -"mOS" = ( -/obj/machinery/portable_atmospherics/canister, -/obj/machinery/atmospherics/components/unary/portables_connector/visible, -/obj/effect/turf_decal/box, -/obj/machinery/airalarm/directional/north, -/turf/open/floor/iron, -/area/station/science/xenobiology) "mPg" = ( /obj/machinery/door/airlock/external{ name = "External Docking Port" @@ -52133,18 +52073,6 @@ /obj/effect/turf_decal/siding/wood, /turf/open/floor/wood/large, /area/station/service/library) -"mXr" = ( -/obj/structure/cable, -/obj/structure/table/wood, -/obj/item/clothing/mask/cigarette/cigar/cohiba{ - pixel_x = 3 - }, -/obj/item/clothing/mask/cigarette/cigar/havana{ - pixel_x = -3 - }, -/obj/item/clothing/mask/cigarette/cigar, -/turf/open/floor/iron/grimy, -/area/station/command/heads_quarters/captain) "mXy" = ( /turf/open/floor/iron/grimy, /area/station/command/heads_quarters/hop) @@ -52504,17 +52432,6 @@ /obj/effect/turf_decal/tile/neutral/half/contrasted, /turf/open/floor/iron/dark, /area/station/service/chapel) -"ncT" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/table/reinforced, -/obj/item/storage/box/lights/mixed, -/obj/machinery/airalarm/directional/north, -/obj/item/stock_parts/cell/high/empty, -/obj/effect/turf_decal/tile/brown/half/contrasted{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/cargo/storage) "ncY" = ( /obj/structure/table/wood, /obj/effect/turf_decal/tile/neutral/fourcorners, @@ -53825,6 +53742,10 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/station/engineering/lobby) +"nwd" = ( +/obj/structure/sign/warning/electric_shock/directional/west, +/turf/open/space/basic, +/area/space/nearstation) "nwn" = ( /obj/structure/table/reinforced, /obj/item/hfr_box/body/waste_output, @@ -54249,11 +54170,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/ai_monitored/aisat/exterior) -"nBC" = ( -/obj/item/kirbyplants/random, -/obj/machinery/light/small/directional/north, -/turf/open/floor/iron/dark, -/area/station/security/interrogation) "nBF" = ( /obj/structure/cable, /obj/machinery/computer/rdconsole, @@ -54494,10 +54410,6 @@ /obj/effect/mapping_helpers/burnt_floor, /turf/open/floor/plating, /area/station/maintenance/department/electrical) -"nET" = ( -/obj/structure/sign/warning/electric_shock/directional/east, -/turf/open/space/basic, -/area/space) "nEZ" = ( /turf/closed/wall/r_wall, /area/station/security/mechbay) @@ -54641,17 +54553,6 @@ /obj/effect/turf_decal/tile/neutral/opposingcorners, /turf/open/floor/iron, /area/station/commons/vacant_room/commissary) -"nHc" = ( -/obj/structure/table/wood, -/obj/item/clothing/mask/cigarette/cigar/cohiba{ - pixel_x = 3 - }, -/obj/item/clothing/mask/cigarette/cigar/havana{ - pixel_x = -3 - }, -/obj/item/clothing/mask/cigarette/cigar, -/turf/open/floor/wood, -/area/station/command/meeting_room/council) "nHd" = ( /obj/structure/cable, /obj/machinery/door/airlock/maintenance_hatch{ @@ -54696,13 +54597,6 @@ /obj/effect/turf_decal/tile/neutral, /turf/open/floor/iron, /area/station/hallway/secondary/entry) -"nHx" = ( -/obj/structure/table/wood, -/obj/item/paper_bin, -/obj/item/pen, -/obj/structure/extinguisher_cabinet/directional/west, -/turf/open/floor/iron/checker, -/area/station/security/interrogation) "nHB" = ( /obj/effect/turf_decal/stripes/line{ dir = 5 @@ -54887,6 +54781,14 @@ }, /turf/open/floor/iron/white, /area/station/medical/pharmacy) +"nJu" = ( +/obj/structure/table/wood, +/obj/item/pen, +/obj/effect/turf_decal/siding/dark_red{ + dir = 4 + }, +/turf/open/floor/iron/checker, +/area/station/security/interrogation) "nJx" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 8 @@ -55258,6 +55160,18 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, /area/station/hallway/primary/central/fore) +"nOJ" = ( +/obj/structure/table/reinforced, +/obj/machinery/cell_charger, +/obj/item/stock_parts/power_store/cell/high, +/obj/machinery/firealarm/directional/south, +/obj/machinery/light_switch/directional/east, +/obj/effect/turf_decal/bot, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/break_room) "nOP" = ( /obj/structure/cable, /obj/effect/turf_decal/tile/neutral{ @@ -56906,6 +56820,11 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/station/security/prison/garden) +"okS" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/engine/xenobio, +/area/station/science/xenobiology) "okV" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/reagent_dispensers/plumbed{ @@ -57161,15 +57080,6 @@ }, /turf/open/floor/iron, /area/station/maintenance/department/chapel) -"onq" = ( -/obj/machinery/atmospherics/components/unary/portables_connector/visible{ - dir = 8 - }, -/obj/effect/turf_decal/box, -/obj/structure/extinguisher_cabinet/directional/north, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, -/area/station/science/ordnance/testlab) "onK" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -57244,15 +57154,6 @@ /obj/machinery/airalarm/directional/north, /turf/open/floor/iron, /area/station/command/gateway) -"ooJ" = ( -/obj/structure/table, -/obj/machinery/cell_charger, -/obj/item/stock_parts/cell/high, -/obj/effect/turf_decal/tile/yellow{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/hallway/secondary/construction) "ooP" = ( /obj/machinery/power/apc/auto_name/directional/west, /obj/structure/cable, @@ -57969,11 +57870,6 @@ /obj/structure/cable, /turf/open/floor/wood, /area/station/command/heads_quarters/hop) -"ozA" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/circuit/green, -/area/station/science/xenobiology) "ozE" = ( /obj/effect/turf_decal/stripes/line, /obj/effect/decal/cleanable/dirt, @@ -58188,6 +58084,12 @@ }, /turf/open/floor/iron/dark/textured_half, /area/station/service/janitor) +"oDt" = ( +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ + dir = 10 + }, +/turf/open/space/basic, +/area/space/nearstation) "oDw" = ( /obj/structure/table/glass, /obj/machinery/computer/records/medical/laptop, @@ -58359,12 +58261,6 @@ }, /turf/open/floor/engine, /area/station/science/genetics) -"oFv" = ( -/obj/docking_port/stationary/syndicate/northeast{ - dir = 8 - }, -/turf/open/space, -/area/space/nearstation) "oFC" = ( /obj/machinery/airalarm/directional/west, /obj/structure/tank_dispenser, @@ -58401,22 +58297,6 @@ /obj/effect/turf_decal/siding/wood, /turf/open/floor/wood/large, /area/station/command/corporate_showroom) -"oGq" = ( -/obj/structure/disposalpipe/trunk{ - dir = 1 - }, -/obj/machinery/disposal/delivery_chute{ - dir = 4 - }, -/obj/structure/window/reinforced/spawner/directional/south, -/obj/structure/window/reinforced/spawner/directional/west, -/obj/structure/window/reinforced/spawner/directional/north, -/obj/effect/turf_decal/delivery, -/obj/machinery/door/window/right/directional/east{ - layer = 3 - }, -/turf/open/floor/iron, -/area/station/maintenance/disposal) "oGr" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/reagent_dispensers/fueltank, @@ -58524,6 +58404,19 @@ }, /turf/closed/wall/r_wall, /area/station/science/ordnance/burnchamber) +"oHO" = ( +/obj/machinery/light_switch/directional/east, +/obj/structure/table, +/obj/item/crowbar, +/obj/item/wrench, +/obj/item/clothing/mask/gas, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 8 + }, +/obj/machinery/light/cold/directional/north, +/obj/machinery/airalarm/directional/north, +/turf/open/floor/iron, +/area/station/science/xenobiology) "oHQ" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -58922,13 +58815,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/maintenance/port) -"oNm" = ( -/obj/structure/table/reinforced, -/obj/item/stock_parts/cell/high, -/obj/item/stock_parts/cell/high, -/obj/machinery/cell_charger, -/turf/open/floor/iron, -/area/station/commons/storage/primary) "oNy" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, @@ -59222,6 +59108,15 @@ }, /turf/open/floor/iron/white, /area/station/science/lobby) +"oRA" = ( +/obj/structure/table, +/obj/machinery/cell_charger, +/obj/item/stock_parts/power_store/cell/high, +/obj/effect/turf_decal/tile/yellow{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/hallway/secondary/construction) "oRD" = ( /obj/structure/cable, /obj/item/circuitboard/computer/secure_data, @@ -59279,13 +59174,6 @@ }, /turf/open/floor/iron, /area/station/engineering/main) -"oSo" = ( -/obj/structure/table/reinforced, -/obj/machinery/cell_charger, -/obj/item/stock_parts/cell/high, -/obj/structure/sign/poster/contraband/self_ai_liberation/directional/north, -/turf/open/floor/iron, -/area/station/science/research/abandoned) "oSv" = ( /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, @@ -59624,6 +59512,14 @@ /obj/machinery/newscaster/directional/east, /turf/open/floor/wood, /area/station/hallway/secondary/service) +"oXg" = ( +/obj/machinery/cell_charger, +/obj/item/stock_parts/power_store/cell/high, +/obj/structure/table, +/obj/machinery/newscaster/directional/west, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/station/science/circuits) "oXi" = ( /obj/effect/turf_decal/bot_white/left, /obj/effect/turf_decal/tile/neutral{ @@ -59988,19 +59884,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/science/robotics/mechbay) -"pcS" = ( -/obj/structure/cable, -/obj/machinery/computer/station_alert{ - dir = 4 - }, -/obj/effect/turf_decal/bot, -/obj/machinery/computer/security/telescreen/ce{ - dir = 4; - pixel_x = -30 - }, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, -/area/station/command/heads_quarters/ce) "pdb" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /obj/effect/turf_decal/stripes/line, @@ -60934,6 +60817,8 @@ /obj/structure/table/reinforced, /obj/item/stack/sheet/iron/fifty, /obj/item/stack/sheet/glass/fifty, +/obj/item/circuitboard/machine/crystallizer, +/obj/item/stack/cable_coil/thirty, /turf/open/floor/iron/dark, /area/station/engineering/atmos/hfr_room) "pnV" = ( @@ -61730,6 +61615,16 @@ /obj/structure/cable, /turf/open/floor/iron/smooth, /area/station/maintenance/department/science/xenobiology) +"pzg" = ( +/obj/machinery/atmospherics/pipe/smart/manifold/purple/visible/layer2{ + dir = 4 + }, +/obj/machinery/meter/layer2, +/obj/structure/sign/warning/no_smoking/directional/east, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/science/ordnance) "pzh" = ( /obj/structure/table/reinforced, /obj/machinery/door/window/brigdoor/right/directional/west{ @@ -62130,14 +62025,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/science/xenobiology) -"pDi" = ( -/obj/machinery/cell_charger, -/obj/item/stock_parts/cell/high, -/obj/structure/table, -/obj/machinery/newscaster/directional/west, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, -/area/station/science/circuits) "pDt" = ( /obj/machinery/flasher/portable, /obj/effect/turf_decal/bot, @@ -62467,6 +62354,12 @@ }, /turf/open/floor/iron/dark/corner, /area/station/maintenance/disposal/incinerator) +"pGv" = ( +/obj/item/kirbyplants/random, +/obj/machinery/light/small/directional/north, +/obj/structure/extinguisher_cabinet/directional/north, +/turf/open/floor/iron/dark, +/area/station/security/interrogation) "pGw" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/sign/poster/random/directional/east, @@ -62484,6 +62377,14 @@ /obj/item/knife/kitchen, /turf/open/floor/iron, /area/station/service/kitchen/abandoned) +"pGz" = ( +/obj/machinery/vending/coffee, +/obj/effect/turf_decal/tile/blue/half/contrasted{ + dir = 1 + }, +/obj/machinery/digital_clock/directional/north, +/turf/open/floor/iron/dark, +/area/station/command/bridge) "pGC" = ( /obj/item/kirbyplants/random, /obj/machinery/light_switch/directional/north{ @@ -62647,21 +62548,6 @@ /obj/machinery/atmospherics/components/unary/portables_connector/visible, /turf/open/floor/iron, /area/station/maintenance/port/aft) -"pJo" = ( -/obj/structure/cable, -/obj/machinery/computer/security/telescreen{ - dir = 8; - name = "Prisoner Telescreen"; - network = list("prison"); - pixel_x = 27 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/security/execution/transfer) "pJp" = ( /obj/effect/turf_decal/siding/wood, /obj/machinery/power/apc/auto_name/directional/south, @@ -62691,10 +62577,6 @@ /obj/effect/turf_decal/tile/neutral/full, /turf/open/floor/iron/large, /area/station/science/lab) -"pJz" = ( -/obj/effect/decal/remains/xeno, -/turf/open/floor/circuit/green, -/area/station/science/xenobiology) "pJM" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -63252,17 +63134,6 @@ "pPl" = ( /turf/open/floor/wood/tile, /area/station/service/library/artgallery) -"pPs" = ( -/obj/structure/chair/office/light{ - dir = 8 - }, -/obj/machinery/computer/security/telescreen/ordnance{ - dir = 1; - pixel_y = -32 - }, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, -/area/station/science/ordnance/testlab) "pPv" = ( /obj/machinery/atmospherics/pipe/smart/simple/yellow/visible, /obj/effect/turf_decal/tile/neutral/fourcorners, @@ -63711,6 +63582,14 @@ }, /turf/open/floor/iron/dark/corner, /area/station/engineering/atmos/pumproom) +"pUq" = ( +/obj/structure/table/reinforced, +/obj/item/stock_parts/power_store/cell/high, +/obj/item/stock_parts/power_store/cell/high, +/obj/machinery/cell_charger, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/station/engineering/storage/tech) "pUw" = ( /obj/machinery/holopad, /obj/effect/turf_decal/bot, @@ -64031,22 +63910,6 @@ /obj/machinery/coffeemaker/impressa, /turf/open/floor/wood, /area/station/engineering/break_room) -"pXI" = ( -/obj/machinery/computer/security/telescreen{ - dir = 8; - name = "Prisoner Telescreen"; - network = list("prison"); - pixel_x = 27 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/obj/machinery/light/directional/east, -/turf/open/floor/iron, -/area/station/security/execution/transfer) "pXK" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -64139,13 +64002,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/engineering/atmos) -"pYW" = ( -/obj/machinery/camera/directional/west{ - c_tag = "Security - Armory External"; - dir = 10 - }, -/turf/open/space/basic, -/area/space) "pZc" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -64227,25 +64083,6 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/wood, /area/station/service/abandoned_gambling_den) -"pZM" = ( -/obj/structure/window/reinforced/spawner/directional/north, -/obj/structure/disposalpipe/trunk{ - dir = 8 - }, -/obj/machinery/disposal/bin{ - layer = 3.21 - }, -/obj/effect/turf_decal/bot, -/obj/machinery/door/firedoor/border_only{ - dir = 1 - }, -/obj/machinery/door/poddoor/preopen{ - id = "sci_experimentor"; - name = "Experimentor Blast Door" - }, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, -/area/station/science/explab) "qaq" = ( /obj/structure/table, /obj/item/clothing/gloves/latex, @@ -64842,6 +64679,11 @@ }, /turf/open/floor/iron/large, /area/station/medical/medbay) +"qil" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/science/ordnance) "qin" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -65178,6 +65020,13 @@ }, /turf/open/floor/iron/cafeteria, /area/station/engineering/atmos) +"qnC" = ( +/obj/structure/chair/office/light{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/station/science/ordnance/testlab) "qnG" = ( /obj/machinery/airalarm/directional/south, /obj/structure/extinguisher_cabinet/directional/east, @@ -65379,6 +65228,14 @@ }, /turf/open/floor/iron, /area/station/command/heads_quarters/ce) +"qpI" = ( +/obj/structure/table, +/obj/item/binoculars, +/obj/structure/window/reinforced/spawner/directional/south, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/computer/security/telescreen/ordnance/directional/west, +/turf/open/floor/iron/dark, +/area/station/science/ordnance/testlab) "qpQ" = ( /obj/structure/window/reinforced/spawner/directional/north, /obj/structure/window/reinforced/spawner/directional/west, @@ -65591,6 +65448,10 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/captain) +"qtd" = ( +/obj/structure/sign/warning/secure_area/directional/west, +/turf/open/space/basic, +/area/space/nearstation) "qtm" = ( /obj/structure/chair/pew/right, /turf/open/floor/iron/chapel{ @@ -66068,14 +65929,17 @@ /obj/machinery/duct, /turf/open/floor/iron, /area/station/engineering/main) -"qzK" = ( -/obj/structure/sign/warning/secure_area/directional/south, -/obj/structure/table/reinforced, -/obj/machinery/computer/security/telescreen/minisat{ - dir = 1 +"qzE" = ( +/obj/structure/table/wood, +/obj/item/cigarette/cigar/cohiba{ + pixel_x = 3 }, -/turf/open/floor/iron/dark, -/area/station/engineering/transit_tube) +/obj/item/cigarette/cigar/havana{ + pixel_x = -3 + }, +/obj/item/cigarette/cigar, +/turf/open/floor/wood, +/area/station/command/meeting_room/council) "qzR" = ( /obj/structure/toilet{ dir = 8 @@ -66708,14 +66572,6 @@ /obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, /turf/open/floor/iron, /area/station/engineering/atmos/pumproom) -"qHo" = ( -/obj/structure/table, -/obj/item/stock_parts/cell/high, -/obj/item/stock_parts/cell/high, -/obj/machinery/cell_charger, -/obj/structure/extinguisher_cabinet/directional/west, -/turf/open/floor/iron, -/area/station/science/robotics/mechbay) "qHs" = ( /obj/structure/statue/sandstone/venus{ dir = 1; @@ -67258,6 +67114,18 @@ dir = 4 }, /area/station/medical/medbay/lobby) +"qNh" = ( +/obj/structure/cable, +/obj/structure/table/wood, +/obj/item/cigarette/cigar/cohiba{ + pixel_x = 3 + }, +/obj/item/cigarette/cigar/havana{ + pixel_x = -3 + }, +/obj/item/cigarette/cigar, +/turf/open/floor/iron/grimy, +/area/station/command/heads_quarters/captain) "qNi" = ( /obj/structure/lattice/catwalk, /turf/open/space/basic, @@ -67433,6 +67301,10 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, /area/station/maintenance/department/science/xenobiology) +"qPW" = ( +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/science/ordnance) "qPX" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, @@ -68099,6 +67971,13 @@ /obj/effect/turf_decal/trimline/blue/end, /turf/open/floor/iron/dark/textured, /area/station/engineering/atmos/project) +"raF" = ( +/obj/machinery/computer/security/telescreen/vault/directional/north, +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/command/heads_quarters/qm) "raI" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -68853,6 +68732,21 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/entry) +"rke" = ( +/obj/structure/table, +/obj/effect/decal/cleanable/dirt, +/obj/item/reagent_containers/blood/random{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/reagent_containers/blood/random, +/obj/effect/turf_decal/bot, +/obj/item/reagent_containers/condiment/enzyme{ + pixel_x = -6; + pixel_y = 8 + }, +/turf/open/floor/iron, +/area/station/service/kitchen/abandoned) "rkr" = ( /obj/structure/chair{ dir = 4 @@ -69143,6 +69037,25 @@ /obj/machinery/light/dim/directional/east, /turf/open/floor/iron/dark, /area/station/tcommsat/computer) +"rmz" = ( +/obj/structure/table/reinforced, +/obj/item/stack/sheet/rglass{ + amount = 50; + pixel_x = 2; + pixel_y = -2 + }, +/obj/item/stock_parts/power_store/cell/emproof{ + pixel_x = 1; + pixel_y = 3 + }, +/obj/effect/turf_decal/bot, +/obj/machinery/newscaster/directional/east, +/obj/item/mod/module/plasma_stabilizer, +/obj/item/mod/module/thermal_regulator, +/obj/item/mod/module/magboot, +/obj/item/mod/module/signlang_radio, +/turf/open/floor/iron, +/area/station/engineering/storage) "rmI" = ( /obj/structure/table/reinforced, /obj/item/electronics/apc, @@ -69357,19 +69270,6 @@ }, /turf/open/floor/iron, /area/station/maintenance/starboard/aft) -"rpm" = ( -/obj/structure/rack, -/obj/item/tank/internals/emergency_oxygen/engi, -/obj/item/tank/internals/emergency_oxygen/engi, -/obj/item/wrench, -/obj/item/stock_parts/cell/emproof{ - pixel_x = 4; - pixel_y = 2 - }, -/obj/item/lightreplacer, -/obj/effect/turf_decal/bot, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos/storage) "rpK" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -69712,6 +69612,12 @@ }, /turf/open/floor/plating, /area/station/hallway/secondary/construction) +"rvA" = ( +/obj/structure/sign/nanotrasen{ + pixel_y = -32 + }, +/turf/open/space/basic, +/area/space/nearstation) "rvG" = ( /obj/effect/landmark/start/station_engineer, /obj/effect/turf_decal/tile/yellow/half/contrasted{ @@ -71049,14 +70955,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/engineering/atmos) -"rMQ" = ( -/obj/structure/table, -/obj/item/binoculars, -/obj/structure/window/reinforced/spawner/directional/south, -/obj/item/radio/intercom/directional/west, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, -/area/station/science/ordnance/testlab) "rMR" = ( /obj/structure/chair{ dir = 8 @@ -71162,6 +71060,28 @@ }, /turf/closed/wall/r_wall, /area/station/engineering/atmos/storage/gas) +"rOb" = ( +/obj/machinery/computer/cargo{ + dir = 8 + }, +/obj/machinery/camera/directional/east{ + c_tag = "Cargo Bay - Starboard"; + name = "cargo camera" + }, +/obj/machinery/light/directional/east, +/obj/effect/turf_decal/bot, +/obj/machinery/button/door/directional/east{ + id = "cargounload"; + name = "Loading Doors"; + pixel_y = 6 + }, +/obj/machinery/button/door/directional/east{ + id = "cargoload"; + name = "Loading Doors"; + pixel_y = -6 + }, +/turf/open/floor/iron, +/area/station/cargo/storage) "rOc" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /turf/open/floor/iron/large, @@ -71571,6 +71491,17 @@ }, /turf/open/floor/iron/white/smooth_large, /area/station/medical/medbay) +"rRF" = ( +/obj/structure/table/reinforced, +/obj/item/folder/white, +/obj/item/stock_parts/power_store/cell/high, +/obj/item/stack/sheet/glass, +/obj/item/stack/sheet/glass, +/obj/item/stack/sheet/glass, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/airalarm/directional/east, +/turf/open/floor/iron/dark, +/area/station/engineering/storage/tech) "rRR" = ( /obj/structure/rack, /obj/effect/turf_decal/bot, @@ -72175,6 +72106,12 @@ /obj/effect/turf_decal/tile/neutral/half/contrasted, /turf/open/floor/iron, /area/station/medical/virology) +"rZn" = ( +/obj/effect/turf_decal/bot, +/obj/machinery/portable_atmospherics/pipe_scrubber, +/obj/structure/sign/poster/official/there_is_no_gas_giant/directional/east, +/turf/open/floor/iron/textured_large, +/area/station/engineering/atmos/project) "rZt" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -72698,10 +72635,6 @@ /obj/effect/spawner/random/structure/tank_holder, /turf/open/floor/plating, /area/station/maintenance/port/aft) -"sfE" = ( -/obj/effect/decal/cleanable/xenoblood, -/turf/open/floor/circuit/green, -/area/station/science/xenobiology) "sfH" = ( /obj/effect/landmark/start/hangover, /obj/effect/turf_decal/tile/neutral{ @@ -73891,16 +73824,6 @@ /obj/effect/turf_decal/tile/red/fourcorners, /turf/open/floor/iron/dark/side, /area/station/security/checkpoint/medical/medsci) -"swg" = ( -/obj/machinery/cell_charger, -/obj/structure/table/reinforced, -/obj/machinery/status_display/ai/directional/north, -/obj/item/rcl/pre_loaded, -/obj/effect/turf_decal/bot, -/obj/item/stock_parts/cell/high, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, -/area/station/command/heads_quarters/ce) "swj" = ( /obj/structure/table/wood, /obj/machinery/fax{ @@ -73931,25 +73854,6 @@ /obj/machinery/light/small/directional/north, /turf/open/floor/plating, /area/station/commons/fitness/recreation) -"swR" = ( -/obj/item/phone{ - desc = "Supposedly a direct line to Nanotrasen Central Command. It's not even plugged in."; - pixel_x = -3; - pixel_y = 3 - }, -/obj/item/clothing/mask/cigarette/cigar/cohiba{ - pixel_x = 6 - }, -/obj/item/clothing/mask/cigarette/cigar/havana{ - pixel_x = 2 - }, -/obj/item/clothing/mask/cigarette/cigar{ - pixel_x = 4.5 - }, -/obj/structure/table/reinforced, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron, -/area/station/command/heads_quarters/ce) "swY" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/door/poddoor/shutters/preopen{ @@ -74748,20 +74652,6 @@ "sHt" = ( /turf/open/space/basic, /area/space/nearstation) -"sHv" = ( -/obj/machinery/computer/mecha{ - dir = 8 - }, -/obj/machinery/computer/security/telescreen/rd{ - dir = 8; - pixel_x = 32 - }, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 1 - }, -/obj/effect/turf_decal/tile/purple, -/turf/open/floor/iron, -/area/station/command/heads_quarters/rd) "sHw" = ( /obj/machinery/firealarm/directional/east, /obj/effect/turf_decal/tile/neutral/half/contrasted{ @@ -75897,11 +75787,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/tcommsat/computer) -"sVm" = ( -/obj/structure/lattice, -/obj/structure/sign/warning/electric_shock/directional/east, -/turf/open/space/basic, -/area/space) "sVC" = ( /obj/machinery/atmospherics/components/unary/thermomachine/freezer{ dir = 4 @@ -75987,6 +75872,15 @@ /obj/effect/turf_decal/tile/neutral, /turf/open/floor/iron, /area/station/hallway/primary/central/fore) +"sWJ" = ( +/obj/structure/table/reinforced, +/obj/item/stack/cable_coil, +/obj/item/electronics/airalarm, +/obj/item/electronics/firealarm, +/obj/item/stock_parts/power_store/cell/high, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/maintenance/port) "sWO" = ( /obj/machinery/atmospherics/pipe/smart/manifold/purple/visible{ dir = 8 @@ -76114,19 +76008,6 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/iron/grimy, /area/station/command/meeting_room/council) -"sXV" = ( -/obj/structure/table/reinforced, -/obj/item/stock_parts/matter_bin, -/obj/item/stock_parts/matter_bin{ - pixel_x = 3; - pixel_y = 3 - }, -/obj/item/stock_parts/micro_laser, -/obj/effect/turf_decal/siding/purple{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/science/lab) "sYf" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -77364,24 +77245,6 @@ /obj/structure/cable, /turf/open/floor/iron/grimy, /area/station/service/bar/backroom) -"trf" = ( -/obj/structure/table/wood, -/obj/item/restraints/handcuffs{ - pixel_y = 6 - }, -/obj/item/clothing/mask/cigarette/cigar/cohiba{ - pixel_x = 7; - pixel_y = -7 - }, -/obj/item/clothing/mask/cigarette/cigar/havana{ - pixel_x = -3 - }, -/obj/item/clothing/mask/cigarette/cigar{ - pixel_x = -1; - pixel_y = -7 - }, -/turf/open/floor/carpet, -/area/station/security/detectives_office) "trw" = ( /obj/structure/disposalpipe/segment{ dir = 5 @@ -77394,18 +77257,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/fore) -"trC" = ( -/obj/item/reagent_containers/condiment/enzyme{ - layer = 5 - }, -/obj/item/kitchen/rollingpin, -/obj/structure/table, -/obj/item/reagent_containers/cup/bowl, -/obj/item/reagent_containers/cup/beaker{ - pixel_x = 5 - }, -/turf/open/floor/iron/cafeteria, -/area/station/service/kitchen) "trG" = ( /obj/machinery/door/window/left/directional/north{ name = "Engineering Delivery"; @@ -77768,7 +77619,6 @@ /obj/machinery/power/terminal{ dir = 4 }, -/obj/structure/cable, /obj/structure/sign/warning/electric_shock/directional/south, /turf/open/floor/plating, /area/station/maintenance/department/electrical) @@ -77891,6 +77741,12 @@ /obj/effect/turf_decal/tile/neutral/half/contrasted, /turf/open/floor/iron, /area/station/maintenance/department/crew_quarters/bar) +"twl" = ( +/obj/docking_port/stationary/syndicate/northeast{ + dir = 8 + }, +/turf/open/space, +/area/space) "twE" = ( /obj/machinery/door/firedoor, /obj/machinery/door/poddoor/shutters{ @@ -78020,6 +77876,18 @@ }, /turf/open/floor/plating, /area/station/engineering/atmos/hfr_room) +"tzc" = ( +/obj/structure/table/reinforced, +/obj/machinery/cell_charger, +/obj/effect/turf_decal/siding/purple{ + dir = 8 + }, +/obj/effect/turf_decal/siding/purple{ + dir = 4 + }, +/obj/item/stock_parts/power_store/cell/high, +/turf/open/floor/iron, +/area/station/science/lab) "tzj" = ( /obj/structure/disposalpipe/trunk{ dir = 1 @@ -78576,6 +78444,15 @@ /obj/structure/cable, /obj/machinery/firealarm/directional/east, /obj/effect/decal/cleanable/dirt, +/obj/item/flatpack{ + board = /obj/item/circuitboard/machine/flatpacker; + pixel_x = -6; + pixel_y = 5 + }, +/obj/item/multitool{ + pixel_x = 8 + }, +/obj/structure/table, /turf/open/floor/iron, /area/station/engineering/storage_shared) "tFG" = ( @@ -78906,13 +78783,6 @@ }, /turf/open/floor/iron, /area/station/security/courtroom) -"tJB" = ( -/obj/structure/table/reinforced, -/obj/machinery/cell_charger, -/obj/item/stock_parts/cell/high, -/obj/machinery/airalarm/directional/east, -/turf/open/floor/plating, -/area/station/maintenance/department/electrical) "tJE" = ( /obj/structure/table/wood, /obj/item/folder, @@ -80894,6 +80764,11 @@ /obj/machinery/light/directional/east, /turf/open/floor/iron, /area/station/engineering/main) +"uiH" = ( +/obj/structure/table/reinforced, +/obj/machinery/computer/security/telescreen/research/directional/north, +/turf/open/floor/iron/dark, +/area/station/command/bridge) "uiK" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -80963,6 +80838,13 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, /area/station/ai_monitored/command/storage/eva) +"ujL" = ( +/obj/structure/table/reinforced, +/obj/item/clipboard, +/obj/item/mining_voucher, +/obj/item/radio/intercom/directional/north, +/turf/open/floor/iron/dark, +/area/station/command/bridge) "ujQ" = ( /obj/machinery/status_display/ai/directional/west, /obj/structure/filingcabinet/security, @@ -81052,6 +80934,15 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/medical/medbay) +"ukO" = ( +/obj/machinery/cell_charger, +/obj/structure/table/reinforced, +/obj/item/stock_parts/power_store/cell/high, +/obj/structure/window/reinforced/spawner/directional/south, +/obj/structure/cable, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/command/storage/eva) "ukR" = ( /obj/structure/reagent_dispensers/fueltank, /turf/open/floor/plating, @@ -81665,6 +81556,10 @@ }, /turf/open/floor/iron/grimy, /area/station/service/library) +"usp" = ( +/obj/effect/spawner/random/medical/two_percent_xeno_egg_spawner, +/turf/open/floor/engine/xenobio, +/area/station/science/xenobiology) "usy" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/rack, @@ -82062,6 +81957,15 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron/white/smooth_large, /area/station/medical/psychology) +"uxC" = ( +/obj/machinery/atmospherics/pipe/smart/simple/cyan/hidden, +/obj/machinery/computer/security/telescreen/engine/directional/west, +/obj/effect/turf_decal/bot, +/obj/machinery/computer/atmos_control/nocontrol/master{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/station/engineering/atmos/storage/gas) "uxG" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -83227,6 +83131,11 @@ /obj/machinery/light/small/directional/south, /turf/open/floor/iron, /area/station/maintenance/department/science) +"uLX" = ( +/obj/effect/turf_decal/tile/blue/half/contrasted, +/obj/machinery/computer/security/telescreen/minisat/directional/south, +/turf/open/floor/iron/dark, +/area/station/command/bridge) "uMb" = ( /obj/structure/table, /obj/item/analyzer, @@ -84041,6 +83950,16 @@ /obj/effect/turf_decal/stripes/corner, /turf/open/floor/iron/dark, /area/station/ai_monitored/security/armory) +"uVX" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 4 + }, +/obj/effect/spawner/random/engineering/tracking_beacon, +/turf/open/floor/iron, +/area/station/science/xenobiology) "uVZ" = ( /obj/structure/cable, /obj/machinery/duct, @@ -84143,10 +84062,6 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/maintenance/department/chapel) -"uXF" = ( -/obj/structure/sign/warning/secure_area/directional/south, -/turf/open/space/basic, -/area/space) "uXK" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/security{ @@ -84177,17 +84092,6 @@ /obj/effect/mapping_helpers/airalarm/tlv_no_checks, /turf/open/floor/iron/dark, /area/station/science/ordnance) -"uXU" = ( -/obj/structure/disposaloutlet{ - dir = 8 - }, -/obj/structure/disposalpipe/trunk{ - dir = 4 - }, -/obj/effect/turf_decal/box/red, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, -/area/station/science/xenobiology) "uYg" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/carpet/green, @@ -84340,6 +84244,16 @@ }, /turf/open/floor/iron, /area/station/science/research) +"uZy" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/computer/security/telescreen/interrogation/directional/west, +/obj/structure/cable, +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/security/brig) "uZH" = ( /obj/effect/turf_decal/tile/neutral/half/contrasted{ dir = 1 @@ -86070,6 +85984,17 @@ /obj/effect/turf_decal/tile/neutral/half/contrasted, /turf/open/floor/iron, /area/station/maintenance/starboard/aft) +"vxq" = ( +/obj/structure/cable, +/obj/machinery/computer/security/telescreen/prison/directional/east, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/red{ + dir = 8 + }, +/obj/machinery/light/directional/east, +/turf/open/floor/iron, +/area/station/security/execution/transfer) "vxr" = ( /turf/open/floor/iron, /area/station/security/prison) @@ -87206,6 +87131,24 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, /area/station/maintenance/port/aft) +"vLV" = ( +/obj/structure/table/wood, +/obj/item/restraints/handcuffs{ + pixel_y = 6 + }, +/obj/item/cigarette/cigar/cohiba{ + pixel_x = 7; + pixel_y = -7 + }, +/obj/item/cigarette/cigar/havana{ + pixel_x = -3 + }, +/obj/item/cigarette/cigar{ + pixel_x = -1; + pixel_y = -7 + }, +/turf/open/floor/carpet, +/area/station/security/detectives_office) "vMd" = ( /obj/effect/turf_decal/tile/brown/half/contrasted, /turf/open/floor/iron, @@ -87585,6 +87528,11 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/entry) +"vSi" = ( +/obj/structure/lattice, +/obj/structure/sign/warning/electric_shock/directional/east, +/turf/open/space/basic, +/area/space/nearstation) "vSk" = ( /obj/structure/table/wood, /obj/item/folder/red, @@ -89117,6 +89065,16 @@ /obj/item/pen, /turf/open/floor/iron/white, /area/station/medical/medbay) +"wmo" = ( +/obj/machinery/cell_charger, +/obj/structure/table/reinforced, +/obj/machinery/status_display/ai/directional/north, +/obj/item/rcl/pre_loaded, +/obj/effect/turf_decal/bot, +/obj/item/stock_parts/power_store/cell/high, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/station/command/heads_quarters/ce) "wmp" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 8 @@ -89538,21 +89496,6 @@ }, /turf/open/floor/iron/grimy, /area/station/service/library/abandoned) -"wqz" = ( -/obj/structure/table/glass, -/obj/item/folder/blue{ - pixel_x = 4; - pixel_y = 4 - }, -/obj/item/folder/white, -/obj/item/pen, -/obj/machinery/computer/security/telescreen/cmo{ - dir = 1; - pixel_y = -32 - }, -/obj/effect/turf_decal/tile/blue/opposingcorners, -/turf/open/floor/iron/white, -/area/station/command/heads_quarters/cmo) "wqF" = ( /obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ dir = 4 @@ -90196,12 +90139,6 @@ /obj/machinery/light/small/directional/east, /turf/open/floor/iron, /area/station/command/heads_quarters/rd) -"wyN" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ - dir = 10 - }, -/turf/open/space/basic, -/area/space) "wzb" = ( /obj/effect/turf_decal/tile/brown/half/contrasted{ dir = 4 @@ -90699,12 +90636,6 @@ /obj/machinery/light/small/directional/south, /turf/open/floor/iron, /area/station/maintenance/port) -"wEx" = ( -/obj/structure/table/reinforced, -/obj/item/clipboard, -/obj/item/mining_voucher, -/turf/open/floor/iron/dark, -/area/station/command/bridge) "wEy" = ( /obj/structure/disposalpipe/trunk{ dir = 4 @@ -90934,22 +90865,6 @@ /obj/effect/turf_decal/bot, /turf/open/floor/iron/dark/textured_large, /area/station/engineering/atmos/storage/gas) -"wGQ" = ( -/obj/structure/cable, -/obj/machinery/computer/security/telescreen{ - dir = 8; - name = "Prisoner Telescreen"; - network = list("prison"); - pixel_x = 27 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/obj/machinery/light/directional/east, -/turf/open/floor/iron, -/area/station/security/execution/transfer) "wGS" = ( /obj/structure/chair/sofa/bench/left{ dir = 4 @@ -91265,6 +91180,44 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, /area/station/medical/pharmacy) +"wLA" = ( +/obj/item/stack/cable_coil, +/obj/item/bodypart/arm/right/robot{ + pixel_x = 3 + }, +/obj/item/bodypart/arm/left/robot{ + pixel_x = -3 + }, +/obj/structure/table, +/obj/item/radio/intercom/directional/west, +/obj/item/assembly/prox_sensor{ + pixel_x = 5 + }, +/obj/item/assembly/prox_sensor{ + pixel_x = 5 + }, +/obj/item/assembly/prox_sensor{ + pixel_x = 5 + }, +/obj/item/assembly/flash/handheld, +/obj/item/assembly/flash/handheld, +/obj/item/assembly/flash/handheld, +/obj/item/assembly/flash/handheld, +/obj/item/assembly/flash/handheld, +/obj/item/assembly/flash/handheld, +/obj/item/stock_parts/power_store/cell/high{ + pixel_x = 3; + pixel_y = 16 + }, +/obj/item/stock_parts/power_store/cell/high{ + pixel_x = -3; + pixel_y = 16 + }, +/obj/item/stock_parts/power_store/cell/high{ + pixel_y = 15 + }, +/turf/open/floor/iron, +/area/station/science/robotics/lab) "wLK" = ( /obj/effect/turf_decal/stripes/line, /obj/effect/turf_decal/stripes/line{ @@ -92355,11 +92308,6 @@ /obj/machinery/light/small/directional/east, /turf/open/floor/iron/textured, /area/station/medical/medbay) -"xcR" = ( -/obj/effect/spawner/random/engineering/tracking_beacon, -/obj/effect/landmark/event_spawn, -/turf/open/floor/circuit/green, -/area/station/science/xenobiology) "xcU" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -92377,14 +92325,6 @@ /obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, /turf/open/floor/iron, /area/station/maintenance/fore) -"xdn" = ( -/obj/effect/turf_decal/box/red, -/obj/machinery/atmospherics/components/unary/outlet_injector/on{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, -/area/station/science/xenobiology) "xdA" = ( /obj/effect/spawner/random/decoration/carpet, /obj/effect/spawner/random/structure/furniture_parts, @@ -92593,6 +92533,17 @@ }, /turf/open/space/basic, /area/space/nearstation) +"xfG" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/table/reinforced, +/obj/item/storage/box/lights/mixed, +/obj/machinery/airalarm/directional/north, +/obj/item/stock_parts/power_store/cell/high/empty, +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/cargo/storage) "xfR" = ( /obj/machinery/camera/directional/east{ c_tag = "Security - Interrogation Monitoring" @@ -92680,6 +92631,28 @@ }, /turf/open/floor/iron, /area/station/cargo/storage) +"xhb" = ( +/obj/structure/table/wood, +/obj/item/storage/box/matches{ + pixel_x = -2; + pixel_y = 3 + }, +/obj/item/cigarette/cigar{ + pixel_x = 2; + pixel_y = 2 + }, +/obj/item/cigarette/cigar/cohiba{ + pixel_x = 3; + pixel_y = 1 + }, +/obj/item/cigarette/cigar{ + pixel_x = 4 + }, +/obj/effect/turf_decal/tile/blue/half/contrasted{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/command/corporate_showroom) "xhi" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/button/door/directional/east{ @@ -93016,20 +92989,6 @@ /obj/structure/closet/crate/freezer/blood, /turf/open/floor/iron/freezer, /area/station/medical/coldroom) -"xkV" = ( -/obj/structure/table, -/obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/east, -/obj/machinery/cell_charger, -/obj/item/screwdriver{ - pixel_y = -1 - }, -/obj/effect/turf_decal/siding/purple{ - dir = 8 - }, -/obj/item/stock_parts/cell/high, -/turf/open/floor/iron, -/area/station/science/robotics/lab) "xkW" = ( /obj/structure/window/reinforced/spawner/directional/west, /obj/structure/window/reinforced/spawner/directional/north, @@ -93882,6 +93841,17 @@ }, /turf/open/floor/iron, /area/station/maintenance/disposal) +"xwC" = ( +/obj/machinery/computer/mecha{ + dir = 8 + }, +/obj/machinery/computer/security/telescreen/rd/directional/east, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 1 + }, +/obj/effect/turf_decal/tile/purple, +/turf/open/floor/iron, +/area/station/command/heads_quarters/rd) "xwK" = ( /obj/structure/cable, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ @@ -94432,22 +94402,6 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/entry) -"xCC" = ( -/obj/structure/table, -/obj/effect/decal/cleanable/dirt, -/obj/item/reagent_containers/blood/random{ - pixel_x = 3; - pixel_y = 3 - }, -/obj/item/reagent_containers/blood/random, -/obj/effect/turf_decal/bot, -/obj/item/reagent_containers/condiment/enzyme{ - layer = 5; - pixel_x = -6; - pixel_y = 8 - }, -/turf/open/floor/iron, -/area/station/service/kitchen/abandoned) "xCF" = ( /obj/effect/turf_decal/tile/neutral/half/contrasted{ dir = 1 @@ -95066,6 +95020,10 @@ }, /turf/open/floor/iron/dark/textured_half, /area/station/medical/morgue) +"xJR" = ( +/obj/structure/sign/warning/secure_area/directional/east, +/turf/open/space/basic, +/area/space/nearstation) "xJW" = ( /obj/effect/landmark/generic_maintenance_landmark, /obj/effect/turf_decal/tile/neutral/fourcorners, @@ -95640,6 +95598,10 @@ }, /turf/open/floor/iron/cafeteria, /area/station/engineering/atmos) +"xST" = ( +/obj/effect/decal/cleanable/xenoblood, +/turf/open/floor/engine/xenobio, +/area/station/science/xenobiology) "xTc" = ( /obj/effect/turf_decal/trimline/red/filled/line{ dir = 5 @@ -95659,6 +95621,23 @@ dir = 1 }, /area/station/maintenance/department/electrical) +"xTe" = ( +/obj/structure/table/reinforced, +/obj/item/stock_parts/matter_bin, +/obj/item/stock_parts/matter_bin{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/stock_parts/micro_laser, +/obj/effect/turf_decal/siding/purple{ + dir = 8 + }, +/obj/item/flatpack{ + board = /obj/item/circuitboard/machine/flatpacker + }, +/obj/item/multitool, +/turf/open/floor/iron, +/area/station/science/lab) "xTk" = ( /obj/structure/closet/secure_closet/security/sec, /obj/structure/sign/poster/official/do_not_question/directional/south, @@ -95698,13 +95677,6 @@ /obj/effect/turf_decal/tile/neutral/half/contrasted, /turf/open/floor/iron, /area/station/command/heads_quarters/rd) -"xTC" = ( -/obj/structure/table/reinforced, -/obj/machinery/cell_charger, -/obj/item/stock_parts/cell/high, -/obj/effect/turf_decal/bot, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos/storage) "xTD" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -96031,6 +96003,14 @@ /obj/machinery/light/warm/directional/west, /turf/open/floor/wood, /area/station/service/lawoffice) +"xYf" = ( +/obj/structure/table/wood, +/obj/machinery/light/directional/south, +/obj/item/stack/package_wrap, +/obj/item/hand_labeler, +/obj/machinery/computer/security/telescreen/vault/directional/east, +/turf/open/floor/wood, +/area/station/command/heads_quarters/hop) "xYl" = ( /obj/structure/lattice, /obj/item/toy/figure/ninja, @@ -96838,6 +96818,12 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/iron/white, /area/station/medical/virology) +"yjJ" = ( +/obj/structure/sign/warning/secure_area/directional/south, +/obj/structure/table/reinforced, +/obj/machinery/computer/security/telescreen/minisat/directional/east, +/turf/open/floor/iron/dark, +/area/station/engineering/transit_tube) "yjK" = ( /obj/machinery/holopad, /obj/effect/turf_decal/bot_white, @@ -104075,7 +104061,7 @@ ueB uhL btH bPC -bRC +fmw bTs rPe vvL @@ -114387,7 +114373,7 @@ aaa uHd aaa qYo -nET +fEw qYo aaa qYo @@ -114395,7 +114381,7 @@ qYo aaa qYo aaa -nET +fEw qYo aaa uHd @@ -114642,7 +114628,7 @@ vVc aad aad aad -djY +xJR nCi nCi fqm @@ -114654,7 +114640,7 @@ fqm fqm nCi nCi -djY +xJR aaa qYo aaa @@ -115382,7 +115368,7 @@ wGy vVc vVc vVc -sVm +vSi abj abj lbi @@ -115417,11 +115403,11 @@ fqm djS nCi nCi -sfN -sfN -eqP -sfN -sfN +fBr +fBr +hXJ +fBr +fBr nCi nCi cJd @@ -115673,13 +115659,13 @@ chp fqm vPU nCi -sfN -sfN -sfN -iJw -sfN -sfN -sfN +fBr +fBr +fBr +usp +fBr +fBr +fBr nCi vPU fqm @@ -115930,13 +115916,13 @@ rXu nCi eVp nCi -sfN -ozA -pJz -xcR -sfE -gCt -sfN +fBr +okS +cNy +fBr +xST +fBr +fBr nCi mFq nCi @@ -116157,7 +116143,7 @@ dgk eqg uYy jCY -qzK +yjJ vmt nUT aaa @@ -116187,13 +116173,13 @@ gbe nCi vPU nCi -sfN -sfN -sfN -sfN -sfN -sfN -sfN +fBr +fBr +fBr +fBr +fBr +fBr +fBr nCi vPU cfb @@ -116446,9 +116432,9 @@ uWm nCi rIb rIb -xdn -sfN -uXU +axW +fBr +miN uhb uhb nCi @@ -116702,7 +116688,7 @@ pyZ vBO uhb ebW -kNG +imx imx xsH umb @@ -116959,7 +116945,7 @@ aFU nCi uhb xIa -cQT +iRd gxT kPD rxX @@ -117214,11 +117200,11 @@ nCi cTO uOn uhb -mOS +mKn fPl jqr vxQ -vxQ +uVX vxQ lzc plQ @@ -117643,7 +117629,7 @@ aaa qYo kvq aaa -wyN +oDt mJH pHl rQI @@ -117728,7 +117714,7 @@ nCi fsC nOv uhb -lpC +oHO aqF rqy jKx @@ -119239,7 +119225,7 @@ viB pOz hEL gyR -pcS +cfx vyn eMN gAw @@ -119748,12 +119734,12 @@ jLx dFw mPr bAR -swg +wmo gsV auh tMl apu -swR +ika aHE wCn gAw @@ -120517,7 +120503,7 @@ pQo uCa wkj bqP -jYv +nOJ bAR gHt bAV @@ -122291,10 +122277,10 @@ sID pUW qSm wIf -rpm +mdG lvJ jYA -xTC +jtD eVG wqF npE @@ -122886,7 +122872,7 @@ wEI qNb naL nEc -oSo +iWz kGQ bGz nzb @@ -123110,7 +123096,7 @@ grl iJU pJM pec -bpL +bHr fii fii lBz @@ -123339,7 +123325,7 @@ vnq ftU dCX wdZ -guI +uxC bYK xLZ iXc @@ -124398,11 +124384,11 @@ swD baw fii iqz -kgi +gUt hps hkJ tum -iTM +rmz abO pTC sNd @@ -124607,7 +124593,7 @@ vOI etR xcU nmw -haF +qtd qYo dQS qYo @@ -124616,7 +124602,7 @@ aaa qYo cut qYo -haF +qtd aaa xLZ nNK @@ -124852,7 +124838,7 @@ lCM qlr hwM pqw -gqG +rZn dYE sOi wzD @@ -125468,7 +125454,7 @@ szJ xoR hfe sKR -rMQ +qpI fYU kzc dqo @@ -125724,7 +125710,7 @@ fLf cfL xoR aJy -pPs +qnC dkF fYU kzc @@ -125937,7 +125923,7 @@ rnr lRx gRl iQr -bYv +sWJ pTC qcM vcB @@ -126171,7 +126157,7 @@ aJU keE tbf sdB -kSn +pUq urC aZo jPJ @@ -126749,7 +126735,7 @@ vSX wEI qYo blX -onq +hdI vQu dSo jCf @@ -126998,7 +126984,7 @@ jqt qub uFt elq -pDi +oXg bWH jDd plP @@ -127481,7 +127467,7 @@ pTC pTC unj fKQ -kyI +wLA xGw iCI pTC @@ -127715,7 +127701,7 @@ tlp nLY uyf klO -dbC +rRF iNR bCj tjp @@ -127760,7 +127746,7 @@ vgu tYP hBT ipr -sHv +xwC eIh urt mjW @@ -127949,7 +127935,7 @@ xtp pwA dyb eTy -trC +imj lZa xtp xtp @@ -127985,7 +127971,7 @@ vcB vcB vcB pTC -qHo +jxj ydp uTm nfR @@ -128265,7 +128251,7 @@ pTC lLa fRK txc -pZM +cwc ffb dqP aFp @@ -129063,7 +129049,7 @@ qaA jXy oHM iLH -fff +fLx vss oSA kzc @@ -129321,7 +129307,7 @@ nJK yex iML tgI -uUG +qil djT kzc kzc @@ -129578,7 +129564,7 @@ vqx oHM iLH pKR -iqg +dJE uUG fgy oFC @@ -129835,7 +129821,7 @@ hGI esH owX asW -nSb +dHU nSb jHm ucu @@ -130092,7 +130078,7 @@ hNW hNW hNW hNW -hNW +qPW hNW nLP hNW @@ -130288,7 +130274,7 @@ uQt nia vBY eYN -oNm +msO iyq iCO uED @@ -130349,7 +130335,7 @@ lzo vbO uXN eqB -eyH +axX eyH pwD eyH @@ -130565,7 +130551,7 @@ fHD tCD khb rNZ -xkV +bUN ryp khb gmZ @@ -130606,7 +130592,7 @@ oxo ojG oxo mZK -gQF +bNO vEX xLj ctU @@ -130862,12 +130848,12 @@ qPI ibH cBe ciH -lcP -lOw +dTr +pzg wCh cFB oQq -fYa +erA hqU kzc qBk @@ -132085,7 +132071,7 @@ bog xaF awc xOv -nHc +qzE fxs lAg kPM @@ -132124,7 +132110,7 @@ bgL mfI fvi tpg -mHL +tzc oZz bpM vzA @@ -132180,7 +132166,7 @@ gqm qYo aaa lvw -jUT +qYo qYo aaa aaa @@ -132675,7 +132661,7 @@ kzc aOD qQM qQM -uXF +ifA tgT xPc xPc @@ -133083,7 +133069,7 @@ aWP qrP odI mSA -dtk +fbh uDD msR mDq @@ -133154,7 +133140,7 @@ fvi fvi fvi hMa -sXV +xTe gsG iuU tZi @@ -133703,7 +133689,7 @@ kzc ecm uYH qQM -uXF +ifA tgT riB tgT @@ -133892,7 +133878,7 @@ pRS kNB lAv nAz -jce +xYf lZx pgs lbt @@ -133941,7 +133927,7 @@ dQT deW pMF uZm -wqz +aBf loe gaC lpx @@ -134163,7 +134149,7 @@ bMB drM mlE odw -kdL +ukO eAY fot mpb @@ -134392,7 +134378,7 @@ aaa wyH wyH diL -wEx +ujL drj bog wuV @@ -136221,7 +136207,7 @@ duA cCM oEC nqf -aHq +xhb hTq qFK bPv @@ -137476,10 +137462,10 @@ aaa wyH wyH diL -hFx +uiH drj bog -hZb +uLX gOU gOU vDo @@ -138504,7 +138490,7 @@ aaa aad aaa diL -hub +pGz bsC bog nkU @@ -139038,7 +139024,7 @@ nrd ivA cVy kSu -jBs +iij dsT qBq fQw @@ -139209,7 +139195,7 @@ coH xrr adR abi -aeE +lnk aff afG afY @@ -139282,7 +139268,7 @@ uhH gOU xRO wvg -mXr +qNh icS gOU ivA @@ -140265,7 +140251,7 @@ xGK jdL juz jdL -ncT +xfG hTl tjl kdE @@ -140511,7 +140497,7 @@ sUA vno bxe uWe -xCC +rke vno jYU llB @@ -142357,7 +142343,7 @@ aaa lhY uvJ qKc -iYp +jFu sJr wPT lhY @@ -142584,7 +142570,7 @@ nDk ofN aWN ivt -bLy +rOb ivt ktK egU @@ -142903,7 +142889,7 @@ vBa crR iee iYi -eKV +mnQ npm qVH iYi @@ -143108,7 +143094,7 @@ aad aad aad aJE -ejX +raF aAU uQZ xhJ @@ -143344,7 +143330,7 @@ aad oeX sZt fQL -oGq +dYM xBu rum akS @@ -144421,7 +144407,7 @@ aaa oIU eCA alG -trf +vLV gZz csy oIU @@ -146530,7 +146516,7 @@ feV wZE xvr rmI -tJB +fzK vTn wZE dre @@ -146715,7 +146701,7 @@ jrA qIH vgQ hYa -nHx +mCe nup iSk jLe @@ -146972,7 +146958,7 @@ xzJ hXi vgQ csD -lTh +nJu nup mTT hgS @@ -147465,7 +147451,7 @@ aaa aaa abj aaa -nET +fEw aad aaa aaa @@ -147485,7 +147471,7 @@ xPo krO pUP vgQ -nBC +pGv xfR vgQ eAW @@ -148002,7 +147988,7 @@ ybk jgS aub ivK -dqs +uZy fND ukX stA @@ -148237,19 +148223,19 @@ aaa uHd aaa vXr -jbn +cmy xIl obL -pXI +aLM xIl gjc -pJo +gRN xIl aSW -wGQ +vxq xIl sTq -pJo +gRN ayM fXC iKL @@ -148842,7 +148828,7 @@ iBx nXH qAu kZE -ooJ +oRA mzX xin dJP @@ -151869,7 +151855,7 @@ aaa qYo aaa qYo -aKU +nwd qYo aaa qYo @@ -152134,7 +152120,7 @@ aaa aaa aaa mfO -pYW +cRE aaa mfO aaa @@ -152375,7 +152361,7 @@ gby jfR lPV qcj -bAS +cfv uTM nHJ bRF @@ -152578,7 +152564,7 @@ aaa aaa aaa aaa -oFv +twl aaa aaa aaa @@ -153177,7 +153163,7 @@ qYo uHd qYo aad -dTS +rvA uKw mfC xFk @@ -154684,13 +154670,13 @@ gJk aaa aad aaa -aKU +nwd aad aaa aad aaa aad -aKU +nwd aaa qYo aaa diff --git a/_maps/map_files/IceBoxStation/IceBoxStation.dmm b/_maps/map_files/IceBoxStation/IceBoxStation.dmm index a68b14de564f5..68e8ffbc759eb 100644 --- a/_maps/map_files/IceBoxStation/IceBoxStation.dmm +++ b/_maps/map_files/IceBoxStation/IceBoxStation.dmm @@ -1,11 +1,4 @@ //MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"aak" = ( -/obj/structure/stairs/south, -/obj/structure/railing{ - dir = 4 - }, -/turf/open/floor/wood/parquet, -/area/station/commons/lounge) "aap" = ( /obj/effect/spawner/random/engineering/tracking_beacon, /turf/open/floor/iron, @@ -45,6 +38,7 @@ /area/station/hallway/primary/port) "aaX" = ( /obj/structure/chair/sofa/bench/right, +/obj/effect/mapping_helpers/no_atoms_ontop, /turf/open/misc/asteroid/snow/icemoon, /area/icemoon/surface/outdoors/nospawn) "abb" = ( @@ -56,6 +50,13 @@ "abe" = ( /turf/open/floor/engine, /area/station/science/xenobiology) +"abm" = ( +/obj/structure/table, +/obj/item/trash/can/food/beans, +/obj/effect/decal/cleanable/cobweb, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/maintenance/starboard/fore) "abv" = ( /obj/effect/turf_decal/loading_area{ dir = 1 @@ -105,33 +106,24 @@ /obj/structure/table/wood, /turf/open/floor/wood, /area/station/maintenance/port/aft) -"acr" = ( -/obj/structure/table/wood, -/obj/effect/spawner/random/entertainment/gambling, -/obj/machinery/newscaster/directional/south, -/obj/machinery/status_display/evac/directional/west, -/turf/open/floor/iron/grimy, -/area/station/commons/lounge) -"acw" = ( -/obj/machinery/camera{ - c_tag = "Starboard Primary Hallway Center East" - }, -/turf/open/floor/iron, -/area/station/hallway/primary/starboard) -"acx" = ( -/obj/effect/turf_decal/siding/white{ - dir = 1 - }, -/obj/structure/chair{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red/full, -/turf/open/floor/iron/large, -/area/station/service/kitchen/diner) +"acg" = ( +/obj/effect/mapping_helpers/burnt_floor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/maintenance/fore) +"acm" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "acE" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/maintenance/solars/starboard/fore) +"acG" = ( +/obj/effect/spawner/random/trash/moisture_trap, +/obj/item/reagent_containers/cup/bucket, +/turf/open/floor/plating, +/area/station/maintenance/starboard/lesser) "ade" = ( /obj/structure/table/glass, /obj/structure/extinguisher_cabinet/directional/north, @@ -231,6 +223,15 @@ /obj/item/clothing/mask/gas, /turf/open/floor/iron/smooth, /area/mine/living_quarters) +"aeF" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/obj/machinery/light/directional/west, +/obj/structure/sign/poster/official/random/directional/west, +/turf/open/floor/iron, +/area/station/hallway/primary/central) "aeQ" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -266,15 +267,10 @@ /obj/effect/mapping_helpers/airlock/access/all/supply/mining, /turf/open/floor/iron/large, /area/mine/mechbay) -"afv" = ( -/obj/effect/turf_decal/siding/white{ - dir = 8 - }, -/obj/structure/chair{ - dir = 1 - }, -/turf/open/floor/iron/white/smooth_large, -/area/station/service/kitchen/diner) +"aft" = ( +/obj/machinery/vending/boozeomat, +/turf/open/floor/iron, +/area/station/service/bar) "afz" = ( /obj/effect/spawner/random/structure/crate, /turf/open/floor/plating, @@ -300,15 +296,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/station/maintenance/starboard/upper) -"aga" = ( -/obj/structure/mirror/directional/west, -/obj/item/toy/mecha/honk{ - pixel_y = 12 - }, -/obj/machinery/light/small/directional/west, -/obj/structure/table/wood, -/turf/open/floor/wood/tile, -/area/station/service/theater) "agk" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -331,13 +318,6 @@ }, /turf/open/floor/iron, /area/station/commons/dorms) -"agt" = ( -/obj/machinery/duct, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/turf/open/floor/wood, -/area/station/hallway/secondary/service) "agF" = ( /obj/structure/rack, /obj/item/storage/box/teargas{ @@ -386,6 +366,12 @@ /obj/machinery/door/firedoor/heavy, /turf/open/floor/iron/dark, /area/station/engineering/atmos/project) +"ahh" = ( +/obj/structure/table/wood, +/obj/effect/turf_decal/tile/bar/opposingcorners, +/obj/structure/window/reinforced/spawner/directional/west, +/turf/open/floor/iron, +/area/station/service/bar) "ahm" = ( /obj/machinery/newscaster/directional/west, /obj/machinery/firealarm/directional/south, @@ -404,16 +390,6 @@ /obj/machinery/newscaster/directional/west, /turf/open/floor/iron/smooth, /area/station/security/holding_cell) -"ahI" = ( -/obj/machinery/hydroponics/constructable, -/obj/effect/turf_decal/trimline/green/filled/line{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/blue/filled/warning{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/station/service/hydroponics) "ahK" = ( /obj/effect/landmark/blobstart, /turf/open/floor/plating, @@ -520,6 +496,27 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark/textured, /area/station/security/prison/workout) +"akb" = ( +/obj/structure/closet/crate, +/obj/item/food/canned/beans, +/obj/item/food/canned/beans, +/obj/item/food/canned/beans, +/obj/item/reagent_containers/cup/glass/waterbottle{ + pixel_x = 7; + pixel_y = 6 + }, +/obj/item/reagent_containers/cup/glass/waterbottle{ + pixel_x = 7; + pixel_y = 6 + }, +/obj/item/reagent_containers/cup/glass/waterbottle{ + pixel_x = 7; + pixel_y = 6 + }, +/mob/living/basic/mouse/white, +/obj/effect/decal/cleanable/cobweb/cobweb2, +/turf/open/floor/iron, +/area/station/maintenance/starboard/fore) "akk" = ( /obj/machinery/atmospherics/pipe/heat_exchanging/junction/layer2{ dir = 4 @@ -682,12 +679,10 @@ }, /area/station/engineering/lobby) "amq" = ( -/obj/structure/window/reinforced/spawner/directional/west, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/machinery/vending/wardrobe/coroner_wardrobe, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/station/medical/morgue) +/turf/open/misc/dirt{ + initial_gas_mix = "ICEMOON_ATMOS" + }, +/area/icemoon/underground/explored/graveyard) "amt" = ( /obj/structure/cable, /turf/open/floor/iron/chapel{ @@ -773,6 +768,22 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/solars/starboard/aft) +"any" = ( +/obj/structure/reagent_dispensers/fueltank, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/oil, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"anI" = ( +/obj/effect/spawner/structure/window/hollow/reinforced/middle{ + dir = 1 + }, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 8; + id = "botany_chasm_and_wolf_shutters" + }, +/turf/open/floor/plating, +/area/station/service/hydroponics) "anK" = ( /obj/effect/turf_decal/trimline/green/filled/line{ dir = 4 @@ -806,6 +817,13 @@ /obj/machinery/light/floor, /turf/open/floor/iron, /area/station/command/bridge) +"aoi" = ( +/obj/structure/closet/emcloset, +/obj/machinery/power/apc/auto_name/directional/west, +/obj/structure/cable, +/obj/machinery/light/cold/directional/west, +/turf/open/floor/plating, +/area/station/service/kitchen/coldroom) "aoo" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -834,15 +852,6 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/commons/dorms) -"aoP" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/public/glass{ - name = "Canteen" - }, -/turf/open/floor/iron/textured_half{ - dir = 1 - }, -/area/station/service/kitchen/diner) "apb" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 8 @@ -906,6 +915,12 @@ }, /turf/open/floor/plating, /area/station/maintenance/aft/lesser) +"apC" = ( +/obj/effect/turf_decal/tile/neutral/half/contrasted, +/obj/machinery/light/small/directional/south, +/obj/structure/sign/calendar/directional/south, +/turf/open/floor/iron, +/area/station/commons/dorms) "apD" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/cable, @@ -920,6 +935,14 @@ }, /turf/open/floor/iron, /area/station/command/gateway) +"apL" = ( +/obj/machinery/modular_computer/preset/engineering, +/obj/structure/cable, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/light/small/directional/north, +/obj/machinery/computer/security/telescreen/engine/directional/north, +/turf/open/floor/iron/dark, +/area/station/engineering/engine_smes) "apS" = ( /obj/structure/cable, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, @@ -968,6 +991,16 @@ }, /turf/open/floor/iron/white, /area/station/medical/virology) +"aqq" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/spawner/directional/north, +/obj/structure/window/reinforced/spawner/directional/east, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 8; + id = "botany_chasm_and_wolf_shutters" + }, +/turf/open/floor/plating, +/area/station/service/hydroponics) "aqB" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -1047,22 +1080,23 @@ }, /turf/open/floor/iron/showroomfloor, /area/station/security/processing) +"arW" = ( +/obj/effect/turf_decal/tile/neutral/diagonal_edge, +/obj/effect/landmark/start/cook, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/holopad, +/turf/open/floor/iron/kitchen/diagonal, +/area/station/service/kitchen) +"arZ" = ( +/obj/effect/turf_decal/tile/blue, +/obj/structure/extinguisher_cabinet/directional/south, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) "asa" = ( /obj/structure/table/wood, /obj/item/storage/crayons, /turf/open/floor/iron, /area/station/commons/dorms) -"asb" = ( -/obj/structure/sink/directional/west, -/obj/structure/cable, -/obj/machinery/button/door/directional/east{ - id = "xenobio10"; - layer = 4; - name = "Xenobio Pen 10 Blast DOors"; - req_access = list("xenobiology") - }, -/turf/open/floor/iron/white, -/area/station/science/xenobiology) "asg" = ( /obj/structure/closet, /obj/effect/spawner/random/maintenance/two, @@ -1095,17 +1129,6 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/port/fore) -"asJ" = ( -/obj/effect/turf_decal/trimline/green/filled/line{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/blue/filled/warning{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/duct, -/turf/open/floor/iron, -/area/station/service/hydroponics) "asM" = ( /obj/machinery/light/directional/east, /obj/effect/turf_decal/tile/yellow/opposingcorners, @@ -1178,25 +1201,6 @@ /obj/effect/landmark/start/hangover, /turf/open/floor/iron/freezer, /area/station/commons/toilet) -"atC" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/effect/turf_decal/trimline/red/filled/line{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/red/filled/corner{ - dir = 8 - }, -/obj/machinery/holopad, -/obj/effect/landmark/start/depsec/medical, -/turf/open/floor/iron/dark/smooth_large, -/area/station/security/checkpoint/medical) -"atM" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) "atN" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -1245,23 +1249,6 @@ /obj/structure/cable, /turf/open/floor/iron/white, /area/station/science/xenobiology) -"aut" = ( -/obj/structure/rack, -/obj/item/clothing/suit/utility/fire/firefighter, -/obj/item/tank/internals/oxygen, -/obj/item/clothing/mask/gas, -/obj/item/extinguisher, -/obj/item/clothing/head/utility/hardhat/red, -/obj/item/clothing/glasses/meson, -/obj/effect/turf_decal/stripes/line{ - dir = 10 - }, -/obj/machinery/atmospherics/components/binary/pump/on/general/visible/layer4{ - dir = 4; - name = "Air In" - }, -/turf/open/floor/plating, -/area/station/maintenance/fore) "auw" = ( /obj/machinery/atmospherics/components/binary/pump/on{ dir = 8; @@ -1294,16 +1281,41 @@ /obj/machinery/portable_atmospherics/scrubber, /turf/open/floor/iron/dark, /area/station/science/ordnance/office) -"auN" = ( -/obj/structure/chair/sofa/corp/right{ - dir = 1 - }, -/turf/open/floor/wood, -/area/station/hallway/secondary/service) "avb" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/hallway/primary/starboard) +"avd" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/public/glass{ + name = "Central Access" + }, +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/stripes/white/line, +/obj/effect/turf_decal/stripes/white/line{ + dir = 1 + }, +/turf/open/floor/iron/dark/textured, +/area/station/hallway/primary/central) +"ave" = ( +/obj/effect/turf_decal/siding/white{ + dir = 1 + }, +/obj/effect/turf_decal/tile/green/opposingcorners{ + dir = 1 + }, +/obj/effect/turf_decal/tile/blue/opposingcorners, +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/service/hydroponics) "avh" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/smooth, @@ -1369,6 +1381,11 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/port) +"awF" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/spawner/random/trash/grille_or_waste, +/turf/open/floor/plating, +/area/station/maintenance/starboard/lesser) "awK" = ( /obj/structure/table, /obj/item/hemostat, @@ -1526,17 +1543,6 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/engineering/lobby) -"ayk" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/duct, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/hallway/secondary/service) "ayq" = ( /obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ cycle_id = "atmos-entrance" @@ -1567,6 +1573,21 @@ /obj/machinery/light/small/directional/east, /turf/open/floor/iron/white, /area/station/medical/medbay/aft) +"ayJ" = ( +/obj/effect/spawner/random/lavaland_mob/raptor, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/explored) +"ayK" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/decal/cleanable/dirt, +/obj/structure/table, +/obj/item/cigarette{ + pixel_x = 6; + pixel_y = 12 + }, +/turf/open/floor/iron, +/area/mine/eva) "ayR" = ( /obj/machinery/airalarm/directional/east, /obj/structure/extinguisher_cabinet/directional/north, @@ -1577,6 +1598,12 @@ /obj/effect/turf_decal/tile/blue/fourcorners, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/cmo) +"ayY" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/plating, +/area/station/maintenance/starboard/lesser) "azf" = ( /obj/structure/disposalpipe/segment{ dir = 9 @@ -1591,6 +1618,12 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/green/visible, /turf/open/floor/engine, /area/station/engineering/supermatter/room) +"azt" = ( +/obj/machinery/door/airlock{ + name = "Unit B" + }, +/turf/open/floor/iron/textured, +/area/station/commons/toilet) "azw" = ( /turf/closed/wall, /area/station/medical/pharmacy) @@ -1616,6 +1649,12 @@ /obj/effect/mapping_helpers/airlock/access/all/engineering/engine_equipment, /turf/open/floor/plating, /area/station/maintenance/port/aft) +"azI" = ( +/obj/machinery/vending/autodrobe, +/obj/machinery/airalarm/directional/north, +/obj/machinery/light/small/directional/north, +/turf/open/floor/wood/parquet, +/area/station/service/theater) "azN" = ( /obj/structure/rack, /obj/item/tank/internals/emergency_oxygen{ @@ -1650,16 +1689,6 @@ }, /turf/open/floor/plating, /area/station/science/robotics/lab) -"aAa" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/landmark/event_spawn, -/turf/open/floor/iron, -/area/station/hallway/primary/starboard) "aAf" = ( /obj/machinery/incident_display/delam, /turf/closed/wall/r_wall, @@ -1680,6 +1709,10 @@ }, /turf/open/floor/circuit/red, /area/station/ai_monitored/turret_protected/ai_upload) +"aAk" = ( +/obj/structure/table/wood, +/turf/open/floor/plating, +/area/station/maintenance/starboard/lesser) "aAl" = ( /obj/machinery/computer/mech_bay_power_console{ dir = 1 @@ -1694,6 +1727,28 @@ /obj/effect/turf_decal/tile/blue/half/contrasted, /turf/open/floor/iron, /area/station/command/bridge) +"aAy" = ( +/obj/structure/table/wood/poker, +/obj/effect/spawner/random/entertainment/dice{ + pixel_y = 5; + pixel_x = -4 + }, +/obj/effect/spawner/random/entertainment/money_small, +/turf/open/floor/wood/large, +/area/station/commons/lounge) +"aBb" = ( +/obj/structure/closet/emcloset, +/obj/item/pickaxe, +/obj/machinery/light/small/directional/east, +/obj/effect/turf_decal/siding/white{ + dir = 8 + }, +/obj/effect/turf_decal/tile/green/opposingcorners{ + dir = 1 + }, +/obj/effect/turf_decal/tile/blue/opposingcorners, +/turf/open/floor/iron, +/area/station/service/hydroponics) "aBf" = ( /obj/effect/landmark/start/hangover, /turf/open/floor/engine{ @@ -1714,6 +1769,12 @@ /obj/machinery/light/cold/directional/south, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/cmo) +"aBj" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 9 + }, +/turf/open/floor/wood/large, +/area/station/commons/lounge) "aBR" = ( /turf/open/genturf/blue, /area/icemoon/surface/outdoors/noruins) @@ -1834,6 +1895,15 @@ /obj/effect/turf_decal/delivery, /turf/open/floor/iron, /area/station/command/bridge) +"aEx" = ( +/obj/structure/closet/lasertag/blue, +/obj/effect/landmark/start/hangover/closet, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 1 + }, +/obj/machinery/status_display/ai/directional/north, +/turf/open/floor/iron, +/area/station/commons/fitness) "aEA" = ( /obj/structure/rack, /obj/item/clothing/mask/gas, @@ -1853,16 +1923,6 @@ /obj/structure/extinguisher_cabinet/directional/south, /turf/open/floor/iron/white, /area/station/science/robotics/lab) -"aEK" = ( -/obj/machinery/atmospherics/components/binary/pump/off, -/obj/machinery/airlock_sensor/incinerator_ordmix{ - pixel_x = 24 - }, -/obj/machinery/atmospherics/pipe/layer_manifold/supply/hidden{ - dir = 4 - }, -/turf/open/floor/engine, -/area/station/science/ordnance) "aEM" = ( /obj/structure/sign/departments/cargo, /turf/closed/wall/r_wall, @@ -1884,15 +1944,6 @@ }, /turf/open/floor/circuit, /area/station/ai_monitored/turret_protected/ai_upload) -"aEU" = ( -/obj/effect/turf_decal/tile/neutral/diagonal_edge, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment{ - dir = 6 - }, -/turf/open/floor/iron/kitchen/diagonal, -/area/station/service/kitchen) "aFg" = ( /obj/machinery/button/door/directional/east{ id = "lawyer_blast"; @@ -1962,6 +2013,26 @@ }, /turf/open/floor/iron/white, /area/station/science/xenobiology) +"aGf" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/stone, +/area/station/service/bar/atrium) +"aGk" = ( +/obj/structure/rack, +/obj/item/wrench, +/obj/item/crowbar, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/spawner/random/engineering/flashlight, +/turf/open/floor/iron/smooth, +/area/station/maintenance/starboard/lesser) "aGr" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/camera/directional/east{ @@ -1997,6 +2068,13 @@ /obj/effect/mapping_helpers/airlock/access/all/security/brig, /turf/open/floor/iron, /area/mine/laborcamp) +"aHh" = ( +/obj/machinery/light/small/directional/west, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 5 + }, +/turf/open/floor/plating/snowed/icemoon, +/area/icemoon/surface/outdoors/nospawn) "aHz" = ( /obj/structure/cable, /obj/effect/spawner/structure/window/reinforced, @@ -2050,6 +2128,21 @@ dir = 9 }, /area/station/science/explab) +"aIA" = ( +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 9 + }, +/obj/effect/turf_decal/trimline/green/filled/corner, +/obj/effect/turf_decal/trimline/blue/filled/warning/corner, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/obj/structure/cable, +/obj/machinery/duct, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics) "aIB" = ( /obj/effect/turf_decal/weather/snow/corner{ dir = 4 @@ -2088,10 +2181,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/dark, /area/station/medical/morgue) -"aJh" = ( -/obj/item/kirbyplants/random, -/turf/open/floor/iron, -/area/station/hallway/primary/starboard) "aJm" = ( /obj/structure/cable, /obj/machinery/door/window/left/directional/east{ @@ -2202,10 +2291,6 @@ /obj/structure/cable, /turf/open/floor/iron/white/textured, /area/station/security/medical) -"aKG" = ( -/obj/structure/table, -/turf/open/floor/iron/smooth, -/area/station/maintenance/starboard/fore) "aKI" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ @@ -2214,6 +2299,11 @@ /obj/effect/turf_decal/tile/blue, /turf/open/floor/iron, /area/station/hallway/primary/fore) +"aLh" = ( +/obj/structure/fireplace, +/obj/effect/mapping_helpers/burnt_floor, +/turf/open/floor/plating, +/area/station/maintenance/starboard/lesser) "aLy" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -2328,6 +2418,12 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) +"aMI" = ( +/obj/machinery/oven/range, +/obj/effect/turf_decal/siding/white, +/obj/machinery/computer/security/telescreen/entertainment/directional/north, +/turf/open/floor/iron/white/smooth_large, +/area/station/service/kitchen) "aML" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 8 @@ -2338,12 +2434,6 @@ /obj/effect/turf_decal/tile/yellow, /turf/open/floor/iron/white, /area/station/medical/pharmacy) -"aMX" = ( -/obj/machinery/light/small/directional/south, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron/freezer, -/area/station/commons/toilet) "aNc" = ( /obj/structure/fence{ dir = 4 @@ -2351,6 +2441,14 @@ /obj/structure/sign/nanotrasen, /turf/open/floor/plating/snowed/icemoon, /area/icemoon/underground/explored) +"aNj" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/green/half/contrasted{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/commons/fitness) "aNq" = ( /obj/effect/turf_decal/caution/stand_clear, /obj/effect/turf_decal/siding/dark_blue, @@ -2380,11 +2478,6 @@ /obj/machinery/portable_atmospherics/canister/oxygen, /turf/open/floor/plating, /area/mine/eva/lower) -"aNR" = ( -/obj/machinery/smartfridge, -/obj/machinery/door/firedoor, -/turf/open/floor/iron, -/area/station/service/bar/backroom) "aOa" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -2430,20 +2523,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/white/textured, /area/station/security/medical) -"aOV" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/multiz/scrubbers/visible/layer2{ - color = "#ff0000"; - dir = 8; - name = "Scrubbers multi deck pipe adapter" - }, -/obj/structure/disposalpipe/trunk/multiz/down{ - dir = 8 - }, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) "aOX" = ( /turf/open/floor/engine/co2, /area/station/engineering/atmos) @@ -2476,15 +2555,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/engineering/atmos) -"aPo" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/green, -/turf/open/floor/iron, -/area/station/hallway/primary/central) "aPD" = ( /turf/closed/wall/r_wall, /area/station/engineering/storage_shared) @@ -2504,6 +2574,11 @@ /obj/machinery/light/floor, /turf/open/floor/iron/dark/textured, /area/station/security/warden) +"aPP" = ( +/obj/machinery/door/airlock/external, +/obj/effect/mapping_helpers/airlock/access/any/engineering/external, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "aPV" = ( /obj/effect/spawner/random/trash/mess, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -2529,15 +2604,6 @@ /obj/item/clothing/shoes/jackboots, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) -"aQn" = ( -/obj/machinery/atmospherics/components/unary/portables_connector/visible{ - dir = 1 - }, -/obj/effect/turf_decal/box, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/station/science/ordnance) "aQy" = ( /obj/effect/turf_decal/siding/wood, /obj/item/kirbyplants/random/fullysynthetic{ @@ -2699,6 +2765,17 @@ /obj/effect/turf_decal/siding/yellow, /turf/open/floor/iron, /area/station/engineering/atmos/storage/gas) +"aSw" = ( +/obj/structure/rack, +/obj/item/lighter, +/obj/item/clothing/glasses/meson{ + pixel_y = 4 + }, +/obj/item/stock_parts/power_store/cell/high, +/obj/item/reagent_containers/pill/patch/aiuri, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/station/command/heads_quarters/ce) "aSB" = ( /obj/machinery/atmospherics/components/unary/portables_connector/visible, /obj/effect/turf_decal/box, @@ -2744,14 +2821,22 @@ }, /turf/open/floor/iron, /area/station/engineering/main) -"aTm" = ( -/obj/effect/turf_decal/siding/wood{ +"aTk" = ( +/obj/machinery/door/airlock/hydroponics/glass{ + name = "Apiary" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/duct, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/mapping_helpers/airlock/access/all/service/hydroponics, +/turf/open/floor/iron/dark/textured_half{ dir = 1 }, -/obj/structure/table/wood, -/obj/effect/turf_decal/tile/bar/opposingcorners, -/turf/open/floor/iron, -/area/station/service/bar) +/area/station/service/hydroponics) "aTp" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -2801,16 +2886,6 @@ /obj/effect/turf_decal/tile/yellow/half/contrasted, /turf/open/floor/iron, /area/station/commons/storage/tools) -"aTV" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/machinery/light/directional/west, -/obj/structure/disposalpipe/segment{ - dir = 5 - }, -/turf/open/floor/iron, -/area/station/hallway/secondary/service) "aTZ" = ( /obj/effect/turf_decal/trimline/blue/filled/warning{ dir = 4 @@ -2851,6 +2926,11 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/port/fore) +"aUq" = ( +/obj/structure/flora/bush/fullgrass/style_random, +/obj/structure/flora/bush/generic/style_random, +/turf/open/floor/grass, +/area/station/service/hydroponics) "aUA" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 4 @@ -2895,19 +2975,6 @@ /obj/machinery/atmospherics/pipe/smart/simple/cyan/visible, /turf/closed/wall/r_wall, /area/station/engineering/atmos) -"aUY" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 6 - }, -/obj/structure/chair/sofa/corp/right{ - dir = 4; - pixel_x = -4; - pixel_y = 8 - }, -/obj/machinery/newscaster/directional/west, -/obj/machinery/light/small/directional/west, -/turf/open/floor/iron/grimy, -/area/station/service/bar/atrium) "aVb" = ( /obj/effect/turf_decal/siding/wood{ dir = 1 @@ -2976,6 +3043,13 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/tcommsat/computer) +"aVJ" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/stone, +/area/station/commons/lounge) "aVU" = ( /obj/effect/mapping_helpers/airlock/locked, /obj/machinery/door/airlock/virology{ @@ -3042,10 +3116,6 @@ /obj/machinery/status_display/evac/directional/north, /turf/open/floor/iron/dark, /area/station/tcommsat/computer) -"aWI" = ( -/obj/machinery/light/small/directional/south, -/turf/open/floor/wood/parquet, -/area/station/service/bar/atrium) "aWN" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /obj/effect/turf_decal/siding/thinplating_new/corner{ @@ -3053,11 +3123,6 @@ }, /turf/open/floor/iron/large, /area/station/hallway/secondary/entry) -"aWS" = ( -/obj/structure/table, -/obj/item/storage/box/donkpockets/donkpocketberry, -/turf/open/floor/iron, -/area/station/hallway/secondary/service) "aWV" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 4 @@ -3084,6 +3149,22 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) +"aXu" = ( +/obj/structure/chair/sofa/right/brown, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 1 + }, +/turf/open/floor/wood/large, +/area/station/commons/lounge) +"aXv" = ( +/obj/structure/sign/warning/gas_mask/directional/north, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"aXx" = ( +/obj/item/bedsheet/red, +/mob/living/simple_animal/bot/secbot/beepsky, +/turf/open/floor/plating, +/area/station/maintenance/fore) "aXY" = ( /obj/structure/rack, /obj/item/circuitboard/machine/monkey_recycler, @@ -3114,12 +3195,39 @@ /obj/item/radio/intercom/directional/north, /turf/open/floor/iron, /area/mine/production) +"aYO" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/plating, +/area/station/maintenance/fore) "aYQ" = ( /obj/machinery/shower/directional/south, /obj/item/soap/nanotrasen, /obj/item/bikehorn/rubberducky/plasticducky, /turf/open/floor/iron/freezer, /area/mine/laborcamp) +"aYS" = ( +/obj/effect/turf_decal/bot{ + dir = 1 + }, +/obj/structure/cable, +/obj/structure/table, +/obj/item/storage/box/lights/mixed, +/obj/item/stack/cable_coil, +/obj/item/stack/cable_coil, +/obj/item/stock_parts/power_store/cell/emproof, +/obj/item/stock_parts/power_store/cell/emproof{ + pixel_x = 6; + pixel_y = -2 + }, +/obj/machinery/light_switch/directional/south{ + pixel_x = 10 + }, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/station/engineering/engine_smes) "aZd" = ( /turf/open/floor/plating, /area/station/medical/virology) @@ -3230,18 +3338,6 @@ /obj/effect/turf_decal/tile/blue, /turf/open/floor/iron, /area/station/hallway/primary/starboard) -"baj" = ( -/obj/machinery/door/airlock/external{ - glass = 1; - name = "Chapel Maintenance External Airlock"; - opacity = 0 - }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 4 - }, -/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, -/turf/open/floor/plating, -/area/station/maintenance/department/chapel) "bam" = ( /turf/open/floor/carpet/red, /area/station/commons/vacant_room/office) @@ -3252,14 +3348,13 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/orange/visible, /turf/open/floor/engine, /area/station/engineering/supermatter/room) -"baq" = ( -/obj/machinery/modular_computer/preset/civilian{ - dir = 1 +"bao" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 4 }, -/obj/effect/decal/cleanable/dirt, -/obj/structure/sign/poster/contraband/random/directional/south, +/obj/structure/closet/emcloset, /turf/open/floor/iron, -/area/station/maintenance/starboard/fore) +/area/station/hallway/primary/starboard) "bar" = ( /obj/effect/turf_decal/tile/blue/opposingcorners{ dir = 1 @@ -3358,6 +3453,12 @@ /obj/effect/turf_decal/tile/red, /turf/open/floor/iron/textured, /area/station/security/brig) +"bcf" = ( +/obj/effect/spawner/random/entertainment/arcade, +/obj/structure/sign/poster/contraband/random/directional/east, +/obj/item/radio/intercom/directional/north, +/turf/open/floor/eighties, +/area/station/commons/lounge) "bcm" = ( /obj/machinery/camera/directional/east{ c_tag = "Security - Lower Brig Cells"; @@ -3370,6 +3471,14 @@ /obj/effect/turf_decal/tile/red, /turf/open/floor/iron/textured, /area/station/security/brig) +"bcu" = ( +/obj/effect/turf_decal/siding/wideplating/dark{ + dir = 1 + }, +/obj/item/seeds/watermelon, +/obj/machinery/hydroponics/soil, +/turf/open/floor/grass, +/area/station/maintenance/starboard/fore) "bcx" = ( /obj/machinery/door/airlock/maintenance{ name = "Quartermaster Office Maintenance" @@ -3484,6 +3593,14 @@ /obj/machinery/status_display/evac/directional/west, /turf/open/floor/wood, /area/station/service/library) +"bdX" = ( +/obj/item/toy/snowball{ + pixel_y = 3; + pixel_x = 3 + }, +/obj/item/toy/snowball, +/turf/open/misc/asteroid/snow/coldroom, +/area/icemoon/underground/explored) "bea" = ( /obj/effect/spawner/structure/window/reinforced/plasma, /turf/open/floor/plating/icemoon, @@ -3501,6 +3618,14 @@ /obj/effect/landmark/start/hangover, /turf/open/floor/iron, /area/station/hallway/primary/central) +"beF" = ( +/obj/machinery/door/airlock{ + name = "Unisex Showers" + }, +/obj/structure/cable, +/obj/machinery/duct, +/turf/open/floor/iron/textured, +/area/station/commons/toilet) "beO" = ( /obj/structure/reagent_dispensers/fueltank, /turf/open/floor/plating, @@ -3513,11 +3638,6 @@ /obj/structure/sign/painting/large, /turf/open/floor/wood, /area/station/security/prison/rec) -"beT" = ( -/obj/structure/table/glass, -/obj/item/cultivator, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) "beZ" = ( /turf/closed/indestructible/riveted{ desc = "A wall impregnated with Fixium, able to withstand massive explosions with ease"; @@ -3543,6 +3663,11 @@ /obj/effect/spawner/structure/window/hollow/reinforced/end, /turf/open/floor/plating, /area/mine/eva/lower) +"bfy" = ( +/obj/effect/spawner/random/trash/bin, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "bfL" = ( /obj/effect/turf_decal/stripes/line{ dir = 5 @@ -3582,20 +3707,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden, /turf/open/floor/iron, /area/station/engineering/atmos/storage/gas) -"bfZ" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/red/half{ - dir = 4 - }, -/obj/machinery/light/small/directional/south, -/turf/open/floor/iron/half{ - dir = 1 - }, -/area/station/hallway/secondary/service) -"bgd" = ( -/obj/structure/reagent_dispensers/plumbed, -/turf/open/floor/plating, -/area/station/maintenance/department/medical/morgue) "bgs" = ( /obj/structure/sign/poster/random/directional/east, /obj/structure/cable, @@ -3640,10 +3751,6 @@ }, /turf/open/floor/iron/large, /area/station/command/gateway) -"bgG" = ( -/obj/effect/decal/cleanable/cobweb, -/turf/open/floor/iron, -/area/station/maintenance/starboard/fore) "bgK" = ( /obj/structure/table, /obj/item/toner, @@ -3714,6 +3821,18 @@ }, /turf/open/floor/iron, /area/station/commons/vacant_room/commissary) +"bid" = ( +/obj/effect/turf_decal/siding/wood, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/machinery/door/firedoor, +/obj/effect/landmark/navigate_destination/bar, +/obj/machinery/door/airlock/multi_tile/public/glass{ + name = "Atrium" + }, +/turf/open/floor/iron/dark/textured_half, +/area/station/service/bar/atrium) "bie" = ( /obj/effect/spawner/structure/window/hollow/reinforced/middle{ dir = 4 @@ -3729,6 +3848,10 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/engineering/atmos/hfr_room) +"bil" = ( +/obj/structure/railing/wooden_fence, +/turf/open/misc/hay/icemoon, +/area/icemoon/underground/explored) "bin" = ( /obj/effect/turf_decal/stripes/asteroid/line{ dir = 4 @@ -3752,14 +3875,6 @@ /obj/item/clothing/head/beanie/orange, /turf/open/floor/iron, /area/station/cargo/storage) -"biI" = ( -/obj/machinery/camera/directional/west{ - c_tag = "Xenobiology Test Chamber"; - network = list("ss13","test","rd","xeno") - }, -/obj/machinery/light/directional/west, -/turf/open/floor/engine, -/area/station/science/xenobiology) "biR" = ( /obj/structure/table/glass, /obj/item/storage/box/beakers{ @@ -3806,19 +3921,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, /turf/open/floor/engine, /area/station/engineering/supermatter/room) -"bjm" = ( -/obj/structure/table/reinforced, -/obj/machinery/computer/security/telescreen{ - desc = "Used for monitoring medbay to ensure patient safety."; - dir = 8; - name = "Medbay Monitor"; - network = list("medbay"); - pixel_y = 4 - }, -/obj/structure/reagent_dispensers/wall/peppertank/directional/east, -/obj/effect/turf_decal/tile/red/full, -/turf/open/floor/iron/dark/smooth_large, -/area/station/security/checkpoint/medical) "bjn" = ( /obj/machinery/door/window/left/directional/east{ name = "Containment Pen 11"; @@ -3869,14 +3971,6 @@ }, /turf/open/floor/iron/white, /area/station/medical/chemistry) -"bjZ" = ( -/obj/structure/sink/kitchen/directional/south, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/turf_decal/tile/bar/opposingcorners, -/turf/open/floor/iron, -/area/station/service/bar) "bkg" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/light/small/directional/north, @@ -3914,6 +4008,10 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/station/science/explab) +"bkM" = ( +/obj/structure/sign/warning/gas_mask/directional/north, +/turf/open/floor/plating, +/area/station/maintenance/fore) "bkS" = ( /obj/machinery/bci_implanter, /turf/open/floor/iron/white/side{ @@ -4023,13 +4121,10 @@ /obj/effect/landmark/start/hangover, /turf/open/floor/wood, /area/station/service/library) -"bmf" = ( -/obj/effect/turf_decal/tile/blue/diagonal_edge, -/obj/machinery/computer/order_console/cook{ - dir = 1 - }, -/turf/open/floor/iron/kitchen/diagonal, -/area/station/service/kitchen) +"blX" = ( +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/fore) "bml" = ( /obj/structure/table, /obj/item/storage/medkit/regular, @@ -4042,21 +4137,6 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/hallway/primary/central) -"bmw" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 4 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/turf/open/floor/wood, -/area/station/hallway/secondary/service) -"bmz" = ( -/obj/machinery/door/firedoor, -/obj/structure/sign/warning/electric_shock/directional/south, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/central) "bmM" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, @@ -4166,16 +4246,42 @@ "bol" = ( /turf/open/floor/iron/dark/textured, /area/station/security/prison) +"bon" = ( +/obj/effect/turf_decal/trimline/green/filled/corner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/blue/corner{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics) +"bor" = ( +/obj/structure/minecart_rail{ + dir = 4 + }, +/obj/structure/cable, +/obj/structure/holosign/barrier/atmos/sturdy, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/door/poddoor/shutters{ + dir = 4; + id = "minecraft_shutter"; + name = "Cart Shutters" + }, +/turf/open/floor/iron/textured, +/area/station/service/hydroponics) "bos" = ( /obj/machinery/atmospherics/pipe/smart/simple/green/visible{ dir = 5 }, /turf/open/floor/iron/dark, /area/station/engineering/atmos/project) -"boK" = ( -/obj/structure/closet/firecloset, -/turf/open/floor/plating, -/area/station/service/kitchen/coldroom) "boO" = ( /obj/structure/chair/sofa/left/brown{ dir = 8 @@ -4200,16 +4306,23 @@ }, /turf/open/floor/plating, /area/station/maintenance/disposal) -"boV" = ( -/obj/machinery/hydroponics/constructable, -/obj/effect/turf_decal/trimline/green/filled/line{ - dir = 10 +"bpa" = ( +/obj/structure/minecart_rail{ + dir = 4 }, -/obj/effect/turf_decal/trimline/blue/filled/warning{ - dir = 10 +/obj/structure/cable, +/obj/effect/turf_decal/weather/snow/corner, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 1 }, -/turf/open/floor/iron/dark, -/area/station/service/hydroponics) +/obj/machinery/light/small/red/directional/north, +/turf/open/floor/plating/snowed/coldroom, +/area/icemoon/underground/explored) +"bpc" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/grimy, +/area/station/service/theater) "bpd" = ( /obj/machinery/power/smes/engineering, /obj/effect/turf_decal/delivery, @@ -4244,6 +4357,16 @@ }, /turf/open/floor/iron/dark, /area/station/ai_monitored/command/storage/eva) +"bpv" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/stone, +/area/station/service/bar/atrium) "bpD" = ( /obj/machinery/newscaster/directional/south, /obj/structure/closet/firecloset, @@ -4251,11 +4374,6 @@ dir = 8 }, /area/station/science/research) -"bpG" = ( -/obj/effect/turf_decal/tile/blue/diagonal_edge, -/obj/machinery/chem_master/condimaster, -/turf/open/floor/iron/kitchen/diagonal, -/area/station/service/kitchen) "bpK" = ( /obj/machinery/door/airlock/maintenance, /obj/effect/mapping_helpers/airlock/unres, @@ -4334,22 +4452,6 @@ /obj/effect/turf_decal/tile/red/half/contrasted, /turf/open/floor/iron, /area/station/security/brig/upper) -"bqH" = ( -/obj/effect/turf_decal/trimline/green/filled/corner{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/blue/corner{ - dir = 8 - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/station/service/hydroponics) -"bqX" = ( -/obj/machinery/air_sensor/ordnance_burn_chamber, -/turf/open/floor/engine/vacuum, -/area/station/science/ordnance) "bqY" = ( /obj/structure/closet, /obj/effect/spawner/random/maintenance/two, @@ -4390,6 +4492,15 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/security/checkpoint/engineering) +"brC" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/spawner/random/structure/chair_flipped{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "brJ" = ( /obj/structure/chair/stool/directional/south, /obj/effect/landmark/event_spawn, @@ -4432,6 +4543,15 @@ }, /turf/open/floor/plating, /area/mine/eva/lower) +"bsc" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/obj/structure/table, +/obj/machinery/cell_charger, +/obj/item/stock_parts/power_store/cell/high, +/obj/item/stock_parts/power_store/cell/high, +/turf/open/floor/iron, +/area/station/maintenance/department/electrical) "bsd" = ( /obj/structure/chair/stool/directional/south, /obj/structure/sign/poster/official/obey/directional/north, @@ -4461,6 +4581,14 @@ }, /turf/open/floor/iron/white, /area/station/medical/break_room) +"bsn" = ( +/obj/machinery/door/airlock{ + name = "Unisex Restrooms" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/textured, +/area/station/commons/toilet) "bst" = ( /obj/effect/turf_decal/trimline/neutral/filled/line{ dir = 6 @@ -4530,19 +4658,6 @@ dir = 4 }, /area/station/hallway/secondary/entry) -"btp" = ( -/obj/effect/turf_decal/siding/white{ - dir = 1 - }, -/obj/structure/chair{ - dir = 4 - }, -/obj/machinery/camera/directional/north{ - c_tag = "Service Diner North" - }, -/obj/machinery/light/directional/north, -/turf/open/floor/iron/white/smooth_large, -/area/station/service/kitchen/diner) "bts" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, @@ -4627,6 +4742,16 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/department/electrical) +"bvc" = ( +/obj/structure/minecart_rail{ + dir = 1 + }, +/obj/item/radio/intercom/directional/west{ + frequency = 1453; + name = "Kitchen Intercom" + }, +/turf/open/floor/plating/snowed/coldroom, +/area/station/service/kitchen/coldroom) "bvd" = ( /obj/machinery/power/terminal, /obj/machinery/light/small/directional/east, @@ -4672,6 +4797,11 @@ /obj/machinery/autolathe, /turf/open/floor/iron, /area/station/cargo/office) +"bvu" = ( +/obj/machinery/light/directional/north, +/obj/structure/extinguisher_cabinet/directional/north, +/turf/open/floor/iron, +/area/station/hallway/primary/central) "bvE" = ( /obj/machinery/computer/monitor{ name = "bridge power monitoring console" @@ -4729,6 +4859,12 @@ /obj/effect/turf_decal/tile/green/full, /turf/open/floor/iron/white/smooth_large, /area/station/medical/virology) +"bwh" = ( +/obj/effect/turf_decal/siding/white/corner{ + dir = 8 + }, +/turf/closed/wall, +/area/station/service/hydroponics) "bwi" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -4753,15 +4889,6 @@ dir = 8 }, /area/station/hallway/secondary/entry) -"bwr" = ( -/obj/machinery/light_switch/directional/east, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron/freezer, -/area/station/commons/toilet) -"bws" = ( -/obj/machinery/light/small/directional/north, -/turf/open/floor/iron, -/area/station/hallway/primary/starboard) "bwt" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/turf_decal/tile/yellow, @@ -4771,11 +4898,6 @@ /obj/structure/bookcase/random/religion, /turf/open/floor/wood, /area/station/service/library) -"bwL" = ( -/obj/structure/rack, -/obj/effect/spawner/random/maintenance/two, -/turf/open/floor/plating, -/area/station/maintenance/department/crew_quarters/bar) "bwM" = ( /obj/structure/disposalpipe/segment{ dir = 6 @@ -4800,10 +4922,6 @@ "bxe" = ( /turf/closed/wall/r_wall, /area/station/maintenance/solars/starboard/fore) -"bxv" = ( -/obj/effect/landmark/blobstart, -/turf/open/floor/wood, -/area/station/hallway/secondary/service) "bxJ" = ( /obj/structure/closet/crate, /turf/open/floor/plating, @@ -4852,15 +4970,6 @@ }, /turf/open/floor/iron/dark, /area/station/security/checkpoint/customs/auxiliary) -"byk" = ( -/obj/structure/sign/painting/library{ - pixel_y = 32 - }, -/obj/structure/table, -/obj/machinery/microwave, -/obj/structure/sign/poster/official/random/directional/east, -/turf/open/floor/iron, -/area/station/hallway/secondary/service) "byl" = ( /obj/machinery/conveyor{ dir = 4; @@ -4911,6 +5020,11 @@ }, /turf/open/floor/carpet, /area/station/command/heads_quarters/captain) +"byy" = ( +/obj/machinery/newscaster/directional/east, +/obj/machinery/duct, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics) "byB" = ( /obj/effect/spawner/random/engineering/tracking_beacon, /turf/open/floor/plating/icemoon, @@ -4930,6 +5044,14 @@ /obj/effect/mapping_helpers/mail_sorting/science/robotics, /turf/open/floor/iron, /area/station/hallway/primary/starboard) +"byO" = ( +/obj/effect/turf_decal/siding/wood/end{ + dir = 1 + }, +/mob/living/carbon/human/species/monkey/punpun, +/obj/item/kirbyplants/organic/plant11, +/turf/open/floor/stone, +/area/station/service/bar/atrium) "byP" = ( /obj/structure/girder, /turf/open/floor/plating, @@ -4947,22 +5069,6 @@ dir = 4 }, /area/station/hallway/secondary/entry) -"bzn" = ( -/obj/machinery/door/airlock{ - name = "Kitchen Access" - }, -/obj/effect/mapping_helpers/airlock/access/all/service/kitchen, -/obj/machinery/door/poddoor/shutters/preopen{ - dir = 1; - id = "kitchencounter"; - name = "Kitchen Shutters" - }, -/obj/machinery/duct, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/neutral/diagonal_edge, -/turf/open/floor/iron/kitchen/diagonal, -/area/station/service/kitchen) "bzA" = ( /obj/machinery/vending/coffee, /obj/effect/turf_decal/siding/wood/corner{ @@ -4991,6 +5097,14 @@ }, /turf/open/floor/iron, /area/station/engineering/atmos/storage) +"bzF" = ( +/obj/machinery/status_display/ai/directional/north, +/obj/item/aquarium_kit, +/obj/structure/rack, +/obj/effect/turf_decal/bot, +/obj/effect/turf_decal/siding/dark, +/turf/open/floor/iron/checker, +/area/station/hallway/secondary/service) "bzI" = ( /obj/machinery/bluespace_vendor/directional/west, /obj/effect/turf_decal/tile/blue{ @@ -5019,6 +5133,15 @@ "bzW" = ( /turf/open/floor/engine/plasma, /area/station/engineering/atmos) +"bzX" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/turf/open/floor/plating, +/area/station/maintenance/starboard/lesser) "bAa" = ( /obj/structure/disposalpipe/segment{ dir = 10 @@ -5087,6 +5210,18 @@ /obj/effect/turf_decal/stripes/line, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) +"bBa" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 9 + }, +/obj/effect/turf_decal/trimline/blue/filled/warning{ + dir = 9 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/service/hydroponics) "bBb" = ( /obj/structure/railing{ dir = 4 @@ -5102,6 +5237,24 @@ /obj/machinery/light/floor, /turf/open/floor/iron, /area/station/engineering/lobby) +"bBn" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/multiz/supply/visible/layer4{ + color = "#0000ff"; + dir = 8; + name = "Supply multi deck pipe adapter" + }, +/obj/machinery/atmospherics/pipe/multiz/scrubbers/visible/layer2{ + color = "#ff0000"; + dir = 8; + name = "Scrubbers multi deck pipe adapter" + }, +/obj/structure/cable/multilayer/multiz, +/obj/machinery/airalarm/directional/east, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "bBw" = ( /obj/item/trash/sosjerky, /turf/open/floor/plating, @@ -5217,6 +5370,10 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/port/greater) +"bCR" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/visible, +/turf/open/floor/engine/xenobio, +/area/station/science/xenobiology) "bCT" = ( /obj/effect/turf_decal/trimline/dark_red/arrow_ccw{ dir = 1 @@ -5368,25 +5525,6 @@ /obj/machinery/light/small/directional/north, /turf/open/floor/iron/white, /area/station/maintenance/aft/greater) -"bEp" = ( -/obj/machinery/camera/directional/north{ - c_tag = "Service Hallway - Lower East" - }, -/obj/machinery/firealarm/directional/north, -/obj/machinery/photocopier, -/turf/open/floor/iron, -/area/station/hallway/secondary/service) -"bEq" = ( -/obj/machinery/door/window/right/directional/north{ - name = "Terrarium"; - req_access = list("hydroponics") - }, -/obj/structure/flora/bush/flowers_yw/style_random, -/obj/machinery/door/firedoor/border_only{ - dir = 1 - }, -/turf/open/floor/grass, -/area/station/service/hydroponics) "bEz" = ( /obj/machinery/door/airlock/command/glass{ name = "Secure EVA Storage" @@ -5462,17 +5600,6 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) -"bFw" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/structure/table, -/obj/item/pen{ - pixel_x = -5 - }, -/obj/item/paper_bin, -/turf/open/floor/plating, -/area/station/hallway/secondary/service) "bFS" = ( /obj/item/crowbar/red, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -5519,6 +5646,12 @@ /obj/structure/sign/departments/xenobio/directional/south, /turf/open/floor/plating, /area/station/science/xenobiology) +"bGD" = ( +/obj/structure/table/reinforced, +/obj/structure/reagent_dispensers/wall/peppertank/directional/east, +/obj/effect/turf_decal/tile/red/full, +/turf/open/floor/iron/dark/smooth_large, +/area/station/security/checkpoint/medical) "bGP" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /obj/effect/turf_decal/tile/brown/half/contrasted{ @@ -5556,17 +5689,6 @@ /obj/structure/reagent_dispensers/fueltank, /turf/open/floor/plating, /area/station/maintenance/department/medical/morgue) -"bHG" = ( -/obj/structure/railing{ - dir = 4 - }, -/obj/machinery/door/firedoor/border_only{ - dir = 4 - }, -/obj/machinery/airalarm/directional/north, -/obj/machinery/light/small/directional/north, -/turf/open/floor/wood/parquet, -/area/station/service/bar/atrium) "bHI" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/door/poddoor/shutters/preopen{ @@ -5584,10 +5706,6 @@ /obj/effect/turf_decal/tile/yellow/half/contrasted, /turf/open/floor/iron/white, /area/station/medical/pharmacy) -"bHS" = ( -/obj/structure/chair/stool/directional/north, -/turf/open/floor/plating, -/area/station/maintenance/solars/starboard/fore) "bHZ" = ( /obj/effect/spawner/random/trash/mess, /obj/effect/mapping_helpers/burnt_floor, @@ -5616,17 +5734,6 @@ dir = 4 }, /area/station/ai_monitored/command/storage/eva) -"bId" = ( -/obj/machinery/atmospherics/pipe/smart/simple/dark/visible{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/machinery/door/firedoor/heavy, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/dark, -/area/station/science/ordnance) "bIl" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ @@ -5647,6 +5754,15 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/disposal) +"bIq" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/disposalpipe/trunk/multiz/down{ + dir = 8 + }, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "bIt" = ( /obj/structure/rack, /obj/effect/decal/cleanable/cobweb/cobweb2, @@ -5656,17 +5772,6 @@ "bID" = ( /turf/closed/wall/r_wall, /area/station/engineering/lobby) -"bIH" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 1 - }, -/obj/structure/chair/sofa/right/brown{ - dir = 1 - }, -/obj/machinery/computer/security/telescreen/entertainment/directional/south, -/obj/machinery/airalarm/directional/east, -/turf/open/floor/iron/grimy, -/area/station/commons/lounge) "bIL" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -5709,11 +5814,6 @@ /obj/machinery/light/small/red/directional/north, /turf/open/floor/iron/dark, /area/station/engineering/atmos/hfr_room) -"bIW" = ( -/obj/machinery/holopad, -/obj/effect/turf_decal/tile/bar/opposingcorners, -/turf/open/floor/iron, -/area/station/service/bar) "bJa" = ( /obj/structure/railing{ dir = 4 @@ -5795,17 +5895,6 @@ /obj/item/paper/fluff/ids_for_dummies, /turf/open/floor/iron, /area/station/command/heads_quarters/hop) -"bJA" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 1 - }, -/obj/effect/turf_decal/siding/wood, -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/multi_tile/public/glass{ - name = "The Girly Boar" - }, -/turf/open/floor/iron/dark/textured_half, -/area/station/service/bar/atrium) "bJD" = ( /obj/machinery/atmospherics/components/trinary/filter/atmos/n2{ dir = 4 @@ -5889,6 +5978,19 @@ dir = 5 }, /area/station/maintenance/port/aft) +"bLa" = ( +/obj/structure/bed, +/obj/machinery/airalarm/directional/north, +/obj/effect/spawner/random/bedsheet, +/obj/machinery/button/door/directional/east{ + id = "Dorm1"; + name = "Dorm Bolt Control"; + normaldoorcontrol = 1; + specialfunctions = 4 + }, +/obj/item/pillow/random, +/turf/open/floor/carpet, +/area/station/commons/dorms) "bLc" = ( /turf/open/floor/iron/dark/textured_edge{ dir = 1 @@ -5899,6 +6001,12 @@ /obj/machinery/power/apc/auto_name/directional/west, /turf/open/floor/iron/dark/textured, /area/station/security/interrogation) +"bLf" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating/snowed/coldroom, +/area/station/service/kitchen/coldroom) "bLn" = ( /obj/machinery/light/directional/west, /obj/item/radio/intercom/directional/west, @@ -5978,17 +6086,6 @@ }, /turf/open/floor/iron/dark, /area/station/service/chapel) -"bMu" = ( -/obj/machinery/door/airlock{ - name = "Service Hall" - }, -/obj/effect/mapping_helpers/airlock/access/all/service/general, -/obj/effect/mapping_helpers/airlock/unres{ - dir = 1 - }, -/obj/machinery/door/firedoor, -/turf/open/floor/iron/dark/textured_half, -/area/station/hallway/secondary/service) "bMz" = ( /obj/docking_port/stationary{ dir = 8; @@ -6001,16 +6098,6 @@ }, /turf/open/misc/asteroid/snow/icemoon, /area/icemoon/surface/outdoors/nospawn) -"bMC" = ( -/obj/machinery/cell_charger, -/obj/item/stock_parts/cell/high, -/obj/item/radio/intercom/directional/north, -/obj/structure/table/reinforced, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/station/ai_monitored/command/storage/eva) "bMF" = ( /obj/machinery/door/airlock/maintenance, /obj/effect/mapping_helpers/airlock/abandoned, @@ -6082,6 +6169,12 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/showroomfloor, /area/station/security/processing) +"bOh" = ( +/obj/machinery/airalarm/directional/north, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) "bOj" = ( /obj/machinery/door/airlock/maintenance, /obj/structure/disposalpipe/segment, @@ -6095,6 +6188,15 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/construction) +"bOn" = ( +/obj/machinery/camera/directional/east{ + c_tag = "Service - Gambling Lounge" + }, +/obj/machinery/computer/slot_machine{ + name = "two-armed bandit" + }, +/turf/open/floor/wood/large, +/area/station/commons/lounge) "bOo" = ( /obj/effect/turf_decal/arrows/white{ dir = 4 @@ -6104,17 +6206,6 @@ }, /turf/open/floor/engine, /area/station/engineering/atmos/hfr_room) -"bOy" = ( -/obj/structure/window/reinforced/spawner/directional/north{ - layer = 2.9 - }, -/obj/effect/spawner/random/vending/snackvend, -/obj/machinery/camera/directional/east{ - c_tag = "Engineering Lobby" - }, -/obj/structure/extinguisher_cabinet/directional/east, -/turf/open/floor/iron/dark, -/area/station/engineering/lobby) "bOz" = ( /obj/effect/spawner/structure/window/hollow/reinforced/middle{ dir = 1 @@ -6130,12 +6221,6 @@ }, /turf/open/floor/iron/white, /area/station/medical/chemistry) -"bOT" = ( -/obj/machinery/atmospherics/components/unary/outlet_injector/on{ - dir = 4 - }, -/turf/open/floor/engine, -/area/station/science/xenobiology) "bOX" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -6146,21 +6231,27 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/catwalk_floor/iron_smooth, /area/station/maintenance/port/fore) +"bOY" = ( +/turf/open/floor/engine/xenobio, +/area/station/science/xenobiology) +"bOZ" = ( +/obj/effect/spawner/random/structure/musician/piano/random_piano, +/obj/machinery/button/curtain{ + id = "cantena_curtains"; + pixel_x = -30 + }, +/turf/open/floor/wood, +/area/station/commons/lounge) "bPc" = ( /obj/structure/reagent_dispensers/watertank, /turf/open/floor/plating, /area/station/ai_monitored/turret_protected/aisat/maint) -"bPg" = ( -/obj/effect/turf_decal/trimline/green/filled/line{ - dir = 10 - }, -/obj/effect/turf_decal/trimline/blue/filled/warning{ - dir = 10 +"bPk" = ( +/obj/structure/reagent_dispensers/plumbed{ + dir = 4 }, -/obj/machinery/firealarm/directional/west, -/obj/structure/sink/directional/east, -/turf/open/floor/iron, -/area/station/service/hydroponics) +/turf/open/floor/plating, +/area/station/maintenance/department/medical/morgue) "bPn" = ( /obj/structure/girder, /turf/open/floor/plating, @@ -6224,6 +6315,12 @@ /obj/effect/turf_decal/tile/green/full, /turf/open/floor/iron/dark/smooth_large, /area/station/medical/virology) +"bPR" = ( +/obj/structure/railing/wooden_fence{ + dir = 1 + }, +/turf/open/misc/hay/icemoon, +/area/icemoon/underground/explored) "bPV" = ( /obj/item/kirbyplants/random/dead, /turf/open/floor/plating/snowed/icemoon, @@ -6254,16 +6351,6 @@ dir = 1 }, /area/station/hallway/primary/starboard) -"bQr" = ( -/obj/structure/disposalpipe/segment{ - dir = 5 - }, -/obj/machinery/duct, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) "bQA" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, @@ -6274,16 +6361,6 @@ }, /turf/open/floor/plating, /area/mine/eva/lower) -"bQP" = ( -/obj/effect/turf_decal/siding/white{ - dir = 4 - }, -/obj/machinery/duct, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/tile/red/full, -/obj/machinery/light/small/directional/east, -/turf/open/floor/iron/large, -/area/station/service/kitchen/diner) "bQS" = ( /obj/machinery/power/apc/auto_name/directional/south, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -6332,6 +6409,19 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/maintenance/department/cargo) +"bRx" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/spawner/random/engineering/tracking_beacon, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/landmark/generic_maintenance_landmark, +/obj/effect/landmark/blobstart, +/turf/open/floor/plating, +/area/station/maintenance/starboard/lesser) "bRz" = ( /obj/machinery/hydroponics/soil{ pixel_y = 8 @@ -6364,6 +6454,18 @@ /obj/machinery/light/small/directional/north, /turf/open/floor/plating, /area/station/maintenance/department/medical/central) +"bRO" = ( +/obj/item/reagent_containers/cup/soda_cans/beer{ + pixel_x = -7; + pixel_y = 2 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"bSi" = ( +/obj/structure/sign/warning/cold_temp/directional/south, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "bSk" = ( /obj/machinery/door/poddoor/preopen{ id = "Prison Gate"; @@ -6391,6 +6493,15 @@ }, /turf/open/misc/asteroid/snow/icemoon, /area/icemoon/surface/outdoors/nospawn) +"bSC" = ( +/obj/machinery/camera{ + c_tag = "Starboard Primary Hallway Center" + }, +/obj/structure/cable, +/obj/effect/landmark/start/hangover, +/obj/effect/turf_decal/tile/purple, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) "bSG" = ( /obj/effect/turf_decal/stripes/red/line{ dir = 8 @@ -6407,20 +6518,6 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) -"bSU" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/turf_decal/tile/green/half/contrasted{ - dir = 1 - }, -/turf/open/floor/iron/dark/side{ - dir = 1 - }, -/area/station/service/hydroponics) "bSX" = ( /obj/structure/window/reinforced/spawner/directional/west, /obj/structure/chair/sofa/right/brown, @@ -6636,6 +6733,13 @@ /obj/structure/cable, /turf/open/floor/iron/dark, /area/station/service/chapel) +"bXb" = ( +/obj/effect/decal/cleanable/greenglow, +/obj/effect/decal/cleanable/plastic, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/confetti, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "bXf" = ( /obj/structure/closet/emcloset, /turf/open/floor/plating, @@ -6652,17 +6756,6 @@ }, /turf/open/floor/plating/elevatorshaft, /area/mine/storage) -"bXj" = ( -/obj/machinery/airalarm/directional/west, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/commons/fitness) "bXl" = ( /obj/machinery/air_sensor/nitrous_tank, /turf/open/floor/engine/n2o, @@ -6742,6 +6835,10 @@ dir = 8 }, /area/station/service/chapel) +"bYr" = ( +/obj/structure/fence, +/turf/open/floor/plating/snowed/smoothed/icemoon, +/area/icemoon/surface/outdoors/nospawn) "bYu" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/cable, @@ -6755,6 +6852,12 @@ }, /turf/open/floor/engine, /area/station/engineering/supermatter) +"bYx" = ( +/obj/structure/fence/post{ + dir = 1 + }, +/turf/open/floor/plating/snowed/smoothed/icemoon, +/area/icemoon/surface/outdoors/nospawn) "bYz" = ( /obj/machinery/conveyor{ dir = 8; @@ -6887,11 +6990,34 @@ "bZQ" = ( /turf/closed/wall/r_wall, /area/station/hallway/primary/starboard) +"bZU" = ( +/obj/structure/disposalpipe/sorting/mail/flip{ + dir = 2 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/power/apc/auto_name/directional/west, +/obj/effect/mapping_helpers/mail_sorting/service/dormitories, +/obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ + dir = 1 + }, +/obj/machinery/duct, +/turf/open/floor/iron, +/area/station/commons/fitness) "bZV" = ( /obj/machinery/power/apc/auto_name/directional/west, /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/port/fore) +"cag" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/wood/parquet, +/area/station/service/theater) "caC" = ( /obj/machinery/door/window/right/directional/west{ name = "Monkey Pen"; @@ -6972,25 +7098,6 @@ }, /turf/open/floor/iron, /area/station/science/lab) -"cbP" = ( -/obj/machinery/button/door/directional/east{ - id = "xenobio9"; - layer = 4; - name = "Xenobio Pen 9 Blast DOors"; - req_access = list("xenobiology") - }, -/obj/machinery/light/floor, -/turf/open/floor/iron/white, -/area/station/science/xenobiology) -"cbS" = ( -/obj/structure/rack, -/obj/item/wrench, -/obj/item/crowbar, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/iron/smooth, -/area/station/maintenance/starboard/lesser) "ccg" = ( /obj/machinery/light/directional/west, /obj/effect/turf_decal/tile/yellow/opposingcorners, @@ -7131,16 +7238,28 @@ }, /turf/open/floor/iron/white, /area/station/science/xenobiology) -"cdM" = ( -/obj/structure/disposalpipe/segment, +"cdO" = ( +/obj/structure/disposalpipe/sorting/mail/flip{ + dir = 4 + }, +/obj/effect/mapping_helpers/mail_sorting/service/theater, /obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/mapping_helpers/burnt_floor, +/turf/open/floor/plating, +/area/station/maintenance/starboard/lesser) +"cdX" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 8 +/obj/machinery/duct, +/obj/structure/disposalpipe/segment{ + dir = 5 }, -/turf/open/floor/iron, -/area/station/commons/fitness) +/obj/effect/turf_decal/siding/white, +/turf/open/floor/iron/white/smooth_large, +/area/station/service/kitchen) "cef" = ( /obj/machinery/biogenerator, /obj/effect/turf_decal/trimline/green/filled/line{ @@ -7152,6 +7271,10 @@ /obj/structure/grille, /turf/open/misc/asteroid/snow/icemoon, /area/icemoon/underground/explored) +"cem" = ( +/obj/structure/flora/rock/pile/icy/style_random, +/turf/open/misc/asteroid/snow/coldroom, +/area/icemoon/underground/explored) "ceo" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -7200,6 +7323,21 @@ /obj/effect/turf_decal/siding/white, /turf/open/floor/iron/smooth, /area/mine/mechbay) +"ceU" = ( +/obj/machinery/door/airlock/maintenance{ + name = "Fitness Maintenance" + }, +/obj/structure/disposalpipe/segment, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/mapping_helpers/airlock/access/any/security/maintenance, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 1 + }, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/fore) "ceY" = ( /obj/machinery/door/poddoor/preopen{ id = "Disposal Exit"; @@ -7306,13 +7444,17 @@ }, /turf/open/floor/iron, /area/station/security/prison/mess) -"cge" = ( -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/effect/decal/cleanable/dirt, -/obj/structure/chair/office/tactical{ - dir = 1 +"cgd" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/disposalpipe/segment{ + dir = 4 }, -/obj/effect/landmark/start/coroner, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/freezer, +/area/station/service/kitchen/coldroom) +"cge" = ( +/obj/machinery/light/dim/directional/west, /turf/open/floor/iron/dark, /area/station/medical/morgue) "cgs" = ( @@ -7332,13 +7474,6 @@ }, /turf/open/floor/iron/dark, /area/station/service/hydroponics/garden) -"cgz" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/wood/parquet, -/area/station/commons/lounge) "cgC" = ( /obj/structure/cable, /turf/open/floor/iron, @@ -7368,22 +7503,11 @@ /obj/structure/fence/door, /turf/open/misc/asteroid/snow/icemoon, /area/icemoon/underground/explored) -"chj" = ( -/obj/effect/landmark/event_spawn, -/turf/open/floor/iron/white/smooth_large, -/area/station/service/kitchen/diner) "cht" = ( /obj/machinery/vending/engivend, /obj/machinery/light/small/directional/north, /turf/open/floor/iron/dark, /area/station/engineering/storage_shared) -"chB" = ( -/obj/machinery/door/airlock{ - id_tag = "Toilet1"; - name = "Unit 1" - }, -/turf/open/floor/iron/freezer, -/area/station/commons/toilet) "chC" = ( /obj/machinery/door/airlock/external{ glass = 1; @@ -7507,20 +7631,15 @@ /obj/effect/spawner/random/trash/cigbutt, /turf/open/floor/iron/dark, /area/station/science/breakroom) -"cjj" = ( -/obj/machinery/holopad, -/turf/open/floor/wood/parquet, -/area/station/commons/lounge) -"cjl" = ( +"cjh" = ( +/obj/structure/cable, /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/machinery/door/firedoor, -/turf/open/floor/iron, -/area/station/hallway/primary/starboard) +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "cjz" = ( /obj/structure/window/reinforced/spawner/directional/east, /obj/structure/rack, @@ -7546,13 +7665,6 @@ /obj/structure/cable, /turf/open/floor/iron/white, /area/station/medical/chemistry) -"cjK" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/structure/disposalpipe/segment, -/turf/open/floor/plating, -/area/station/maintenance/department/crew_quarters/bar) "cjL" = ( /obj/structure/chair/office{ dir = 1 @@ -7584,6 +7696,11 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/port) +"cki" = ( +/obj/effect/turf_decal/tile/neutral/diagonal_edge, +/obj/structure/cable, +/turf/open/floor/iron/kitchen/diagonal, +/area/station/service/kitchen) "cks" = ( /obj/item/wrench, /obj/effect/turf_decal/delivery, @@ -7591,11 +7708,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/engineering/supermatter/room) -"cku" = ( -/obj/effect/landmark/event_spawn, -/obj/effect/spawner/random/engineering/tracking_beacon, -/turf/open/floor/engine, -/area/station/science/xenobiology) "ckN" = ( /obj/structure/cable, /obj/machinery/newscaster/directional/south, @@ -7712,6 +7824,14 @@ /obj/structure/closet/firecloset, /turf/open/floor/plating, /area/station/maintenance/aft/lesser) +"cmg" = ( +/obj/effect/turf_decal/tile/green/opposingcorners{ + dir = 1 + }, +/obj/effect/turf_decal/tile/blue/opposingcorners, +/obj/structure/sink/kitchen/directional/south, +/turf/open/floor/iron, +/area/station/service/hydroponics) "cmq" = ( /obj/machinery/door/airlock/external{ name = "External Access" @@ -7769,6 +7889,17 @@ }, /turf/open/floor/iron, /area/station/engineering/atmos) +"cmK" = ( +/obj/structure/table/wood, +/obj/machinery/newscaster/directional/west, +/obj/item/stack/package_wrap, +/obj/item/stack/package_wrap{ + pixel_y = 3 + }, +/obj/item/storage/photo_album/bar, +/obj/item/toy/figure/bartender, +/turf/open/floor/iron/grimy, +/area/station/service/bar/backroom) "cmL" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -7828,6 +7959,14 @@ }, /turf/open/floor/plating/snowed/smoothed/icemoon, /area/icemoon/underground/explored) +"cnm" = ( +/obj/machinery/button/door/directional/west{ + id = "xenobio3"; + name = "Xenobio Pen 3 Blast Door"; + req_access = list("xenobiology") + }, +/turf/open/floor/iron/white, +/area/station/science/xenobiology) "cno" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/smooth, @@ -7837,11 +7976,6 @@ /obj/machinery/atmospherics/pipe/smart/simple/cyan/visible, /turf/open/floor/plating, /area/station/engineering/atmos) -"cnr" = ( -/obj/machinery/vending/autodrobe, -/obj/structure/sign/poster/contraband/random/directional/west, -/turf/open/floor/wood/tile, -/area/station/service/theater) "cnx" = ( /obj/machinery/power/tracker, /obj/structure/cable, @@ -7867,24 +8001,15 @@ }, /turf/open/floor/iron, /area/station/cargo/office) -"cnU" = ( -/obj/machinery/modular_computer/preset/id, -/obj/machinery/computer/security/telescreen/vault{ - pixel_y = 30 - }, -/obj/effect/turf_decal/tile/brown/half/contrasted{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/command/heads_quarters/qm) -"coL" = ( -/obj/structure/reagent_dispensers/water_cooler, -/obj/structure/cable, -/obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ - dir = 8 +"cnS" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 10 }, -/turf/open/floor/iron, -/area/station/commons/fitness) +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/chair/stool/directional/east, +/obj/machinery/light/small/directional/south, +/turf/open/floor/plating, +/area/station/maintenance/fore) "coT" = ( /obj/structure/table, /obj/item/storage/wallet, @@ -7969,6 +8094,10 @@ }, /turf/open/floor/plating, /area/station/engineering/engine_smes) +"cpO" = ( +/obj/effect/spawner/random/structure/steam_vent, +/turf/open/floor/plating, +/area/station/maintenance/starboard/lesser) "cpT" = ( /obj/item/kirbyplants/random, /obj/machinery/status_display/evac/directional/south, @@ -7992,6 +8121,13 @@ }, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) +"cql" = ( +/obj/effect/turf_decal/tile/bar{ + dir = 4 + }, +/obj/structure/chair/stool/directional/north, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) "cqo" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -8002,6 +8138,13 @@ }, /turf/open/floor/iron, /area/station/engineering/main) +"cqs" = ( +/obj/item/toy/snowball{ + pixel_y = -7; + pixel_x = 5 + }, +/turf/open/misc/asteroid/snow/coldroom, +/area/station/service/kitchen/coldroom) "cqv" = ( /obj/effect/landmark/blobstart, /obj/machinery/camera{ @@ -8057,17 +8200,13 @@ /obj/item/radio/intercom/directional/east, /turf/open/floor/iron/white, /area/station/science/genetics) -"crH" = ( -/obj/effect/turf_decal/tile/blue/half/contrasted{ - dir = 8 +"crO" = ( +/obj/effect/turf_decal/siding/wood, +/obj/structure/railing/corner/end/flip{ + dir = 1 }, -/obj/machinery/light/small/directional/west, -/obj/machinery/requests_console/directional/west, -/obj/effect/mapping_helpers/requests_console/assistance, -/obj/effect/mapping_helpers/requests_console/announcement, -/obj/effect/mapping_helpers/requests_console/information, -/turf/open/floor/iron, -/area/station/command/heads_quarters/hop) +/turf/open/floor/stone, +/area/station/service/bar/atrium) "crS" = ( /obj/machinery/vending/wardrobe/law_wardrobe, /turf/open/floor/wood, @@ -8093,13 +8232,6 @@ /obj/effect/spawner/random/clothing/bowler_or_that, /turf/open/floor/iron/white, /area/station/maintenance/port/fore) -"csg" = ( -/obj/structure/table/wood/poker, -/obj/item/toy/cards/deck{ - pixel_y = 4 - }, -/turf/open/floor/wood/parquet, -/area/station/commons/lounge) "csm" = ( /obj/machinery/door/airlock/external{ name = "External Access" @@ -8108,6 +8240,13 @@ /obj/effect/mapping_helpers/airlock/access/all/engineering/external, /turf/open/floor/plating, /area/station/maintenance/port/fore) +"css" = ( +/obj/structure/table/wood, +/obj/structure/reagent_dispensers/beerkeg, +/obj/machinery/power/apc/auto_name/directional/west, +/obj/structure/cable, +/turf/open/floor/iron/grimy, +/area/station/service/bar/backroom) "csB" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment, @@ -8118,25 +8257,23 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/wood, /area/station/maintenance/port/aft) -"csR" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/duct, -/turf/open/floor/iron, -/area/station/service/hydroponics) "csT" = ( /turf/open/floor/circuit/telecomms/mainframe, /area/station/tcommsat/server) "csV" = ( -/obj/machinery/requests_console/auto_name/directional/south, -/obj/structure/window/reinforced/spawner/directional/west, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/structure/bodycontainer/morgue/beeper_off{ - dir = 1 +/turf/open/floor/plating/snowed/smoothed/icemoon, +/area/icemoon/underground/explored/graveyard) +"csZ" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 }, -/turf/open/floor/iron/dark, -/area/station/medical/morgue) +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/machinery/light/small/directional/north, +/obj/structure/extinguisher_cabinet/directional/north, +/turf/open/floor/iron/grimy, +/area/station/service/bar/backroom) "ctk" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -8240,10 +8377,6 @@ /obj/machinery/light/small/directional/west, /turf/open/floor/wood, /area/station/commons/vacant_room/office) -"cuB" = ( -/obj/machinery/atmospherics/components/unary/outlet_injector/monitored/ordnance_burn_chamber_input, -/turf/open/floor/engine/vacuum, -/area/station/science/ordnance) "cuJ" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 4 @@ -8297,14 +8430,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/primary/starboard) -"cvz" = ( -/obj/machinery/duct, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/effect/landmark/event_spawn, -/turf/open/floor/wood, -/area/station/hallway/secondary/service) "cvB" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/firealarm/directional/west, @@ -8350,12 +8475,6 @@ "cvS" = ( /turf/closed/wall, /area/station/maintenance/department/medical/central) -"cwd" = ( -/obj/machinery/disposal/bin, -/obj/machinery/light/small/directional/west, -/obj/structure/disposalpipe/trunk, -/turf/open/floor/iron, -/area/station/service/theater) "cwe" = ( /obj/effect/turf_decal/tile/yellow, /turf/open/floor/iron, @@ -8455,6 +8574,17 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/white, /area/station/medical/medbay/central) +"cxD" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/stone, +/area/station/service/bar/atrium) "cxO" = ( /turf/open/floor/iron/dark/textured, /area/station/ai_monitored/security/armory) @@ -8479,6 +8609,12 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply, /turf/open/floor/iron/white, /area/station/medical/virology) +"cxT" = ( +/obj/structure/table/wood, +/obj/item/plate, +/obj/effect/spawner/random/trash/bacteria, +/turf/open/floor/wood/parquet, +/area/station/service/bar/atrium) "cyh" = ( /obj/structure/cable, /obj/effect/spawner/structure/window/reinforced, @@ -8582,15 +8718,16 @@ /obj/machinery/modular_computer/preset/cargochat/engineering, /turf/open/floor/iron/dark, /area/station/engineering/lobby) -"czm" = ( -/obj/structure/cable, +"czo" = ( +/obj/structure/reagent_dispensers/water_cooler, +/obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ + dir = 8 + }, +/obj/structure/sign/poster/official/help_others/directional/south, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment{ - dir = 5 - }, -/turf/open/floor/plating/snowed/coldroom, -/area/station/service/kitchen/coldroom) +/turf/open/floor/iron, +/area/station/commons/fitness) "czq" = ( /obj/effect/mapping_helpers/airlock/cyclelink_helper{ dir = 8 @@ -8800,21 +8937,11 @@ /obj/machinery/status_display/evac/directional/north, /turf/open/floor/iron/dark, /area/station/medical/chemistry) -"cBj" = ( -/obj/structure/closet/emcloset, -/obj/item/clothing/head/costume/festive, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) "cBn" = ( /obj/structure/sign/poster/random/directional/north, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/aft/greater) -"cBC" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/turf/open/floor/plating, -/area/station/maintenance/fore) "cBD" = ( /obj/effect/turf_decal/siding/wood/corner{ dir = 4 @@ -8831,15 +8958,10 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/iron, /area/station/security/prison/workout) -"cBL" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 4 - }, -/obj/machinery/vending/coffee, -/obj/machinery/computer/security/telescreen/entertainment/directional/south, -/obj/machinery/status_display/evac/directional/west, -/turf/open/floor/stone, -/area/station/commons/lounge) +"cBJ" = ( +/obj/effect/spawner/random/trash/mess, +/turf/open/floor/plating, +/area/station/maintenance/starboard/lesser) "cBP" = ( /obj/structure/table/wood, /obj/item/flashlight/lamp{ @@ -8871,6 +8993,14 @@ /obj/structure/flora/tree/pine/style_random, /turf/open/misc/asteroid/snow/icemoon, /area/icemoon/underground/explored) +"cCe" = ( +/obj/structure/window/reinforced/spawner/directional/east, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/siding/white{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/commons/fitness) "cCt" = ( /obj/structure/rack, /obj/effect/spawner/random/techstorage/rnd_all, @@ -8883,14 +9013,6 @@ /obj/machinery/newscaster/directional/east, /turf/open/floor/iron/white/smooth_large, /area/station/science/genetics) -"cCC" = ( -/obj/structure/table, -/obj/machinery/cell_charger, -/obj/item/stock_parts/cell/potato{ - name = "\improper Beepsky's emergency battery" - }, -/turf/open/floor/plating, -/area/station/maintenance/fore) "cCD" = ( /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 1 @@ -8910,6 +9032,22 @@ }, /turf/open/floor/iron/dark, /area/mine/laborcamp) +"cCR" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"cCT" = ( +/obj/effect/turf_decal/trimline/green/filled/corner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/blue/filled/warning/corner{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics) "cCW" = ( /obj/machinery/conveyor/inverted{ dir = 6; @@ -9131,6 +9269,22 @@ "cGA" = ( /turf/open/floor/plating, /area/station/maintenance/department/medical/central) +"cGI" = ( +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/access/all/service/kitchen, +/obj/machinery/door/airlock{ + name = "Kitchen" + }, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_half{ + dir = 1 + }, +/area/station/service/kitchen) "cGQ" = ( /obj/structure/sign/poster/official/random/directional/west, /obj/effect/turf_decal/tile/green/anticorner/contrasted{ @@ -9138,11 +9292,6 @@ }, /turf/open/floor/iron, /area/station/security/prison/garden) -"cGZ" = ( -/obj/machinery/airalarm/directional/north, -/obj/machinery/light/small/directional/east, -/turf/open/floor/iron, -/area/station/hallway/primary/starboard) "cHb" = ( /obj/structure/cable, /turf/open/floor/iron, @@ -9176,17 +9325,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/port/greater) -"cHy" = ( -/obj/structure/cable, -/obj/structure/railing, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/disposalpipe/segment{ - dir = 9 - }, -/obj/effect/mapping_helpers/burnt_floor, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) "cHB" = ( /obj/machinery/vending/autodrobe, /turf/open/floor/plating, @@ -9207,20 +9345,6 @@ }, /turf/open/floor/iron/white, /area/station/science/robotics/lab) -"cHR" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/multiz/scrubbers/visible/layer2{ - color = "#ff0000"; - dir = 8; - name = "Scrubbers multi deck pipe adapter" - }, -/obj/structure/disposalpipe/trunk/multiz{ - dir = 8 - }, -/turf/open/floor/plating, -/area/station/maintenance/starboard/lesser) "cHY" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/cable, @@ -9240,15 +9364,6 @@ "cIc" = ( /turf/closed/wall, /area/station/security/prison/work) -"cId" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 8 - }, -/obj/structure/sign/painting/library{ - pixel_y = 32 - }, -/turf/open/floor/wood, -/area/station/hallway/secondary/service) "cIq" = ( /obj/machinery/computer/slot_machine{ balance = 15; @@ -9286,11 +9401,8 @@ /turf/open/floor/iron/smooth, /area/station/security/brig/upper) "cJa" = ( -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/machinery/computer/operating{ - dir = 8 - }, -/obj/effect/decal/cleanable/cobweb/cobweb2, +/obj/structure/filingcabinet/chestdrawer, +/obj/machinery/airalarm/directional/north, /turf/open/floor/iron/dark, /area/station/medical/morgue) "cJb" = ( @@ -9350,11 +9462,14 @@ dir = 6 }, /area/station/science/research) -"cKn" = ( -/obj/effect/mapping_helpers/broken_floor, -/mob/living/simple_animal/bot/secbot/beepsky, -/turf/open/floor/plating, -/area/station/maintenance/fore) +"cKp" = ( +/obj/effect/turf_decal/siding/wood, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/machinery/door/firedoor, +/turf/open/floor/iron/dark/textured_half, +/area/station/service/bar/atrium) "cKq" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -9396,11 +9511,24 @@ /obj/structure/bookcase/random/reference, /turf/open/floor/carpet/blue, /area/station/medical/psychology) +"cKJ" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/duct, +/obj/effect/turf_decal/siding/dark{ + dir = 9 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/checker, +/area/station/hallway/secondary/service) "cLf" = ( -/obj/effect/decal/cleanable/blood/bubblegum, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/structure/bed/medical/emergency, -/obj/machinery/iv_drip, +/obj/structure/rack, +/obj/item/shovel, +/obj/item/clothing/mask/gas/plaguedoctor, +/obj/item/tank/internals/emergency_oxygen, /turf/open/floor/iron/dark, /area/station/medical/morgue) "cLo" = ( @@ -9503,16 +9631,6 @@ "cMk" = ( /turf/closed/wall/r_wall, /area/mine/production) -"cMs" = ( -/obj/effect/turf_decal/tile/blue/diagonal_edge, -/obj/structure/window/reinforced/spawner/directional/east, -/obj/machinery/light/directional/south, -/obj/structure/disposalpipe/trunk{ - dir = 1 - }, -/obj/machinery/disposal/bin, -/turf/open/floor/iron/kitchen/diagonal, -/area/station/service/kitchen) "cMv" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/public/glass{ @@ -9523,20 +9641,6 @@ }, /turf/open/floor/iron/white/corner, /area/station/hallway/secondary/exit/departure_lounge) -"cMy" = ( -/obj/structure/table, -/obj/item/folder/white, -/obj/item/folder/white, -/obj/item/pen, -/obj/item/taperecorder, -/obj/item/paper_bin{ - pixel_y = 6 - }, -/obj/machinery/power/apc/auto_name/directional/east, -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/turf/open/floor/iron/dark, -/area/station/science/explab) "cMA" = ( /obj/machinery/door/airlock/security/glass{ name = "Brig Control" @@ -9583,16 +9687,6 @@ /obj/effect/spawner/structure/window/hollow/reinforced/middle, /turf/open/floor/plating, /area/station/maintenance/fore/lesser) -"cNd" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/public/glass{ - name = "Central Access" - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/central) "cNh" = ( /obj/structure/fence/corner{ dir = 10 @@ -9614,15 +9708,6 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/wood, /area/station/service/lawoffice) -"cND" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 6 - }, -/turf/open/floor/plating, -/area/station/maintenance/starboard/lesser) "cNI" = ( /obj/machinery/door/poddoor/preopen{ id = "xenobio7"; @@ -9635,6 +9720,26 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/engine, /area/station/science/xenobiology) +"cNL" = ( +/obj/machinery/airalarm/directional/south, +/obj/effect/turf_decal/siding/thinplating/dark/corner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 6 + }, +/obj/effect/turf_decal/trimline/blue/filled/warning{ + dir = 6 + }, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/obj/structure/cable, +/obj/machinery/duct, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics) "cNS" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/public/glass{ @@ -9686,6 +9791,17 @@ }, /turf/open/floor/iron, /area/station/command/bridge) +"cOQ" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/door/airlock/engineering{ + name = "Utilities Room" + }, +/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, +/obj/effect/mapping_helpers/airlock/unres, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "cPd" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -9773,6 +9889,13 @@ }, /turf/open/floor/plating, /area/station/maintenance/disposal) +"cQp" = ( +/obj/machinery/status_display/evac/directional/north, +/obj/machinery/rnd/production/techfab/department/service, +/obj/effect/turf_decal/bot, +/obj/effect/turf_decal/siding/dark, +/turf/open/floor/iron/checker, +/area/station/hallway/secondary/service) "cQs" = ( /obj/structure/table, /obj/item/computer_disk{ @@ -9784,11 +9907,6 @@ }, /turf/open/floor/iron/dark, /area/station/science/ordnance/office) -"cQv" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/tile/red/full, -/turf/open/floor/iron/large, -/area/station/service/kitchen/diner) "cQw" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/tile/brown{ @@ -9821,6 +9939,13 @@ dir = 8 }, /area/station/ai_monitored/command/storage/eva) +"cQE" = ( +/obj/structure/fence, +/obj/structure/sign/nanotrasen{ + pixel_y = -32 + }, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/surface/outdoors/nospawn) "cQH" = ( /obj/structure/sign/warning/no_smoking/directional/south, /turf/open/floor/circuit/telecomms/mainframe, @@ -9832,6 +9957,16 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/aisat/atmos) +"cQV" = ( +/obj/structure/barricade/wooden/snowed, +/obj/machinery/light/small/red/directional/north, +/obj/machinery/door/poddoor/shutters{ + dir = 4; + id = "minecraft_shutter"; + name = "Cart Shutters" + }, +/turf/open/floor/plating/snowed/coldroom, +/area/icemoon/underground/explored) "cRg" = ( /obj/structure/cable, /turf/open/floor/iron/dark/textured, @@ -9870,6 +10005,13 @@ dir = 8 }, /area/station/command/heads_quarters/rd) +"cRN" = ( +/obj/structure/chair/office/tactical{ + dir = 1 + }, +/obj/effect/landmark/start/coroner, +/turf/open/floor/iron/dark, +/area/station/medical/morgue) "cRO" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden, /turf/closed/wall, @@ -9878,22 +10020,6 @@ /obj/machinery/processor, /turf/open/floor/plating, /area/station/maintenance/port/aft) -"cSc" = ( -/obj/structure/flora/bush/flowers_pp/style_random, -/obj/structure/closet/crate{ - name = "Le Caisee D'abeille" - }, -/obj/item/honey_frame, -/obj/item/honey_frame, -/obj/item/honey_frame, -/obj/item/clothing/suit/utility/beekeeper_suit, -/obj/item/clothing/suit/hooded/bee_costume, -/obj/item/clothing/head/utility/beekeeper_head, -/obj/item/clothing/head/hooded/bee_hood, -/obj/item/melee/flyswatter, -/obj/item/queen_bee/bought, -/turf/open/floor/grass, -/area/station/service/hydroponics) "cSe" = ( /obj/structure/table, /obj/item/flashlight{ @@ -9911,13 +10037,6 @@ initial_gas_mix = "ICEMOON_ATMOS" }, /area/icemoon/underground/explored) -"cSu" = ( -/obj/structure/disposalpipe/segment{ - dir = 10 - }, -/obj/effect/landmark/start/hangover, -/turf/open/floor/carpet, -/area/station/service/theater) "cSw" = ( /obj/structure/cable, /turf/open/floor/iron, @@ -9940,6 +10059,13 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, /turf/open/floor/engine, /area/station/engineering/supermatter/room) +"cSO" = ( +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/starboard/lesser) "cSP" = ( /obj/machinery/camera/directional/east{ c_tag = "Aft Primary Hallway South"; @@ -9949,13 +10075,6 @@ /obj/machinery/light/small/directional/east, /turf/open/floor/iron, /area/station/hallway/primary/aft) -"cSQ" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) "cTh" = ( /obj/structure/table/wood, /obj/item/paper_bin, @@ -10021,18 +10140,6 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/port/greater) -"cUt" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable, -/obj/machinery/door/airlock/maintenance, -/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, -/obj/effect/mapping_helpers/airlock/unres{ - dir = 8 - }, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) "cUF" = ( /obj/machinery/camera/directional/west{ c_tag = "Aft Primary Hallway North" @@ -10043,6 +10150,11 @@ /obj/machinery/light/directional/west, /turf/open/floor/iron, /area/station/hallway/primary/aft) +"cUH" = ( +/obj/structure/cable, +/obj/machinery/duct, +/turf/open/floor/iron, +/area/station/commons/dorms) "cVa" = ( /obj/machinery/camera/directional/north{ c_tag = "Fitness Room North" @@ -10083,6 +10195,14 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/mine/laborcamp) +"cVW" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/light_switch/directional/south{ + pixel_x = 5 + }, +/turf/open/floor/wood/parquet, +/area/station/service/theater) "cWq" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /obj/effect/turf_decal/tile/green/half/contrasted{ @@ -10090,6 +10210,15 @@ }, /turf/open/floor/iron, /area/station/security/prison/garden) +"cWz" = ( +/obj/structure/window/reinforced/spawner/directional/east, +/obj/structure/window/reinforced/spawner/directional/north, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/obj/effect/turf_decal/siding/white{ + dir = 5 + }, +/turf/open/floor/iron/dark, +/area/station/commons/fitness) "cWG" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -10156,15 +10285,6 @@ dir = 1 }, /area/station/security/prison/garden) -"cXN" = ( -/obj/machinery/camera/directional/south{ - c_tag = "Fitness Room South" - }, -/obj/effect/turf_decal/tile/green/half/contrasted{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/commons/fitness) "cXV" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/trimline/dark_red/filled/line{ @@ -10192,6 +10312,13 @@ /obj/machinery/newscaster/directional/north, /turf/open/floor/iron/grimy, /area/station/security/detectives_office) +"cYe" = ( +/obj/effect/turf_decal/tile/blue, +/obj/effect/turf_decal/tile/green{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/service/hydroponics) "cYf" = ( /obj/machinery/shower/directional/west, /obj/effect/turf_decal/stripes/red/line{ @@ -10396,6 +10523,13 @@ /obj/effect/spawner/random/maintenance, /turf/open/floor/plating, /area/station/maintenance/port/greater) +"day" = ( +/obj/structure/window/reinforced/spawner/directional/west, +/obj/effect/turf_decal/siding/white{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/commons/fitness) "daE" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/cafeteria, @@ -10433,12 +10567,9 @@ /area/station/service/chapel) "daZ" = ( /obj/structure/marker_beacon/jade, +/obj/effect/mapping_helpers/no_atoms_ontop, /turf/open/misc/asteroid/snow/icemoon, /area/icemoon/underground/explored) -"dbb" = ( -/obj/structure/reagent_dispensers/cooking_oil, -/turf/open/floor/plating/snowed/coldroom, -/area/station/service/kitchen/coldroom) "dbi" = ( /obj/structure/table, /obj/item/flashlight, @@ -10475,10 +10606,6 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/science/robotics/mechbay) -"dby" = ( -/obj/item/radio/intercom/directional/east, -/turf/open/floor/iron, -/area/station/hallway/primary/central) "dbH" = ( /turf/closed/wall/r_wall, /area/station/security/prison/mess) @@ -10644,6 +10771,13 @@ }, /turf/open/floor/iron/white, /area/station/medical/treatment_center) +"ddv" = ( +/obj/machinery/light/small/directional/east, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 10 + }, +/turf/open/floor/plating/snowed/icemoon, +/area/icemoon/underground/explored) "ddz" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -10656,6 +10790,25 @@ }, /turf/open/floor/plating, /area/station/maintenance/aft/greater) +"ddJ" = ( +/obj/structure/reagent_dispensers/plumbed{ + name = "service reservoir" + }, +/obj/effect/decal/cleanable/cobweb/cobweb2, +/obj/effect/turf_decal/delivery/white{ + color = "#307db9" + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/textured, +/area/station/maintenance/starboard/fore) +"ddR" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "ddZ" = ( /obj/structure/cable, /obj/effect/turf_decal/siding/green{ @@ -10767,6 +10920,12 @@ }, /turf/open/floor/plating/snowed/smoothed/icemoon, /area/icemoon/underground/explored) +"dge" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/railing/corner/end/flip, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "dgl" = ( /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 8 @@ -10861,6 +11020,11 @@ }, /turf/open/floor/iron, /area/station/cargo/miningdock) +"dig" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "dip" = ( /obj/machinery/holopad, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -10901,20 +11065,21 @@ "diC" = ( /turf/open/floor/iron/dark/textured, /area/station/ai_monitored/security/armory/upper) -"diH" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/plating, -/area/station/maintenance/starboard/lesser) "diI" = ( /obj/machinery/mech_bay_recharge_port, /obj/item/radio/intercom/directional/south, /turf/open/floor/iron/textured, /area/mine/mechbay) +"diK" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/spawner/random/structure/steam_vent, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "diL" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -10934,6 +11099,12 @@ dir = 1 }, /area/mine/living_quarters) +"djl" = ( +/obj/structure/chair/sofa/left/brown{ + dir = 1 + }, +/turf/open/floor/wood/large, +/area/station/commons/lounge) "djr" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -11025,27 +11196,11 @@ /obj/effect/turf_decal/stripes/line, /turf/open/floor/iron, /area/station/science/robotics/lab) -"dkB" = ( -/obj/structure/rack, -/obj/structure/window/reinforced/spawner/directional/north{ - layer = 2.9 - }, -/obj/effect/turf_decal/tile/red/anticorner/contrasted{ - dir = 4 - }, -/obj/effect/spawner/random/armory/shotgun, -/turf/open/floor/iron/dark/textured, -/area/station/ai_monitored/security/armory) "dkK" = ( /obj/structure/railing/corner, /obj/effect/turf_decal/stripes/line, /turf/open/floor/iron/white, /area/station/science/xenobiology) -"dkO" = ( -/obj/effect/landmark/start/hangover, -/obj/structure/chair/stool/directional/north, -/turf/open/floor/wood/parquet, -/area/station/commons/lounge) "dkT" = ( /obj/effect/spawner/structure/window/hollow/reinforced/middle{ dir = 1 @@ -11065,6 +11220,19 @@ dir = 8 }, /area/station/security/brig/entrance) +"dla" = ( +/obj/machinery/door/airlock/external{ + glass = 1; + name = "Service External Airlock"; + opacity = 0 + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 8 + }, +/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/engineering/external, +/turf/open/floor/plating, +/area/station/maintenance/starboard/lesser) "dlt" = ( /obj/effect/turf_decal/weather/snow/corner{ dir = 8 @@ -11072,6 +11240,9 @@ /obj/structure/marker_beacon/burgundy, /turf/open/floor/plating/snowed/icemoon, /area/icemoon/surface/outdoors/nospawn) +"dlu" = ( +/turf/closed/wall/mineral/wood/nonmetal, +/area/icemoon/underground/explored) "dlB" = ( /obj/structure/table/wood, /obj/item/storage/photo_album/chapel, @@ -11096,17 +11267,6 @@ }, /turf/open/floor/plating, /area/station/construction) -"dmj" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/general/visible, -/obj/machinery/button/door/directional/east{ - id = "xenobio11"; - layer = 4; - name = "Xenobio Pen 11 Blast DOors"; - req_access = list("xenobiology") - }, -/obj/structure/cable, -/turf/open/floor/iron/white, -/area/station/science/xenobiology) "dmk" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/railing{ @@ -11131,12 +11291,6 @@ /obj/structure/ladder, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) -"dmD" = ( -/obj/structure/closet/secure_closet/bar, -/obj/machinery/firealarm/directional/north, -/obj/effect/turf_decal/tile/bar/opposingcorners, -/turf/open/floor/iron, -/area/station/service/bar/backroom) "dmG" = ( /obj/structure/table/wood, /obj/item/camera, @@ -11148,9 +11302,8 @@ /turf/open/floor/iron/white/smooth_large, /area/station/medical/pharmacy) "dmL" = ( -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, /obj/machinery/light_switch/directional/south, +/obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/station/maintenance/department/electrical) "dmR" = ( @@ -11204,18 +11357,6 @@ /obj/effect/turf_decal/tile/red/half/contrasted, /turf/open/floor/iron, /area/station/security/checkpoint/supply) -"dnU" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/machinery/light/directional/west, -/obj/item/kirbyplants/random/dead/research_director, -/obj/machinery/computer/security/telescreen/rd{ - dir = 4; - pixel_x = -26 - }, -/turf/open/floor/iron/smooth_half, -/area/station/command/heads_quarters/rd) "dnX" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/cable, @@ -11259,18 +11400,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/aisat_interior) -"doJ" = ( -/turf/open/floor/wood/parquet, -/area/station/commons/lounge) -"doK" = ( -/obj/machinery/button/door/directional/east{ - id = "xenobio8"; - layer = 4; - name = "Xenobio Pen 8 Blast DOors"; - req_access = list("xenobiology") - }, -/turf/open/floor/iron/white, -/area/station/science/xenobiology) "doM" = ( /obj/structure/table, /obj/item/paper{ @@ -11291,6 +11420,23 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/port) +"dpa" = ( +/obj/structure/table, +/obj/effect/turf_decal/siding/white{ + dir = 5 + }, +/obj/item/reagent_containers/condiment/enzyme{ + pixel_x = -7; + pixel_y = 6 + }, +/obj/item/reagent_containers/condiment/saltshaker{ + pixel_x = -3 + }, +/obj/item/reagent_containers/condiment/peppermill{ + pixel_x = 3 + }, +/turf/open/floor/iron/white/smooth_large, +/area/station/service/kitchen) "dpc" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/command/glass{ @@ -11304,10 +11450,23 @@ /obj/structure/cable, /turf/open/floor/iron/dark/textured, /area/station/ai_monitored/command/storage/eva) +"dpj" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/machinery/duct, +/turf/open/floor/wood, +/area/station/hallway/secondary/service) "dpq" = ( /obj/structure/tank_holder/extinguisher, /turf/open/floor/plating, /area/station/maintenance/department/medical/morgue) +"dpw" = ( +/obj/structure/table/wood, +/obj/effect/spawner/random/food_or_drink/snack, +/obj/effect/spawner/random/trash/food_packaging, +/turf/open/floor/wood/parquet, +/area/station/service/bar/atrium) "dpx" = ( /obj/effect/spawner/random/maintenance, /obj/structure/disposalpipe/segment, @@ -11356,18 +11515,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/port/greater) -"dqd" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/red/half{ - dir = 4 - }, -/turf/open/floor/iron/half{ - dir = 1 - }, -/area/station/hallway/secondary/service) "dqg" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/sign/warning/secure_area/directional/south, @@ -11379,10 +11526,6 @@ /obj/machinery/door/firedoor, /turf/open/floor/iron, /area/station/hallway/primary/central) -"dqv" = ( -/obj/item/bedsheet/red, -/turf/open/floor/plating, -/area/station/maintenance/fore) "dqw" = ( /obj/machinery/holopad, /turf/open/floor/iron, @@ -11391,6 +11534,12 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/mine/laborcamp) +"dqA" = ( +/obj/structure/fence/corner{ + dir = 5 + }, +/turf/open/floor/plating/snowed/smoothed/icemoon, +/area/icemoon/surface/outdoors/nospawn) "dqL" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, @@ -11440,11 +11589,6 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/cargo/lobby) -"dre" = ( -/obj/structure/closet, -/obj/effect/spawner/random/maintenance/two, -/turf/open/floor/plating, -/area/station/maintenance/department/crew_quarters/bar) "drh" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 1 @@ -11470,6 +11614,9 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/commons/dorms) +"drw" = ( +/turf/closed/wall/ice, +/area/station/service/kitchen/coldroom) "dry" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -11559,18 +11706,6 @@ /obj/machinery/firealarm/directional/south, /turf/open/floor/carpet/red, /area/station/security/prison/work) -"dsk" = ( -/obj/machinery/computer/station_alert{ - dir = 4 - }, -/obj/machinery/computer/security/telescreen/ce{ - dir = 4; - pixel_x = -24; - pixel_y = -1 - }, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, -/area/station/command/heads_quarters/ce) "dsl" = ( /obj/machinery/computer/rdservercontrol{ dir = 1 @@ -11590,12 +11725,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/engine, /area/station/engineering/supermatter/room) -"dsO" = ( -/obj/structure/railing/corner{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/hallway/secondary/service) "dsR" = ( /obj/machinery/conveyor/inverted{ dir = 10; @@ -11648,6 +11777,11 @@ /obj/structure/bookcase/random/reference, /turf/open/floor/wood, /area/station/service/library) +"dtc" = ( +/obj/structure/table/wood/poker, +/obj/item/storage/dice, +/turf/open/floor/wood/large, +/area/station/commons/lounge) "dth" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/engineering/glass{ @@ -11658,6 +11792,16 @@ /obj/effect/mapping_helpers/airlock/access/all/engineering/engine_equipment, /turf/open/floor/iron, /area/station/engineering/engine_smes) +"dtq" = ( +/obj/structure/table/wood, +/obj/machinery/computer/security/telescreen/prison/directional/north, +/obj/effect/decal/cleanable/cobweb/cobweb2, +/obj/machinery/fax{ + fax_name = "Law Office"; + name = "Law Office Fax Machine" + }, +/turf/open/floor/wood, +/area/station/service/lawoffice) "dtr" = ( /obj/machinery/computer/records/medical, /obj/effect/turf_decal/tile/green/anticorner/contrasted, @@ -11688,14 +11832,6 @@ "duh" = ( /turf/closed/wall/r_wall, /area/station/engineering/transit_tube) -"duq" = ( -/obj/structure/chair/sofa/bench/left{ - dir = 4 - }, -/obj/structure/sign/warning/electric_shock/directional/west, -/obj/machinery/light/small/directional/north, -/turf/open/floor/iron/dark, -/area/station/hallway/primary/fore) "duE" = ( /obj/machinery/atmospherics/components/binary/tank_compressor{ dir = 4 @@ -11725,15 +11861,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/mine/laborcamp) -"duV" = ( -/obj/effect/turf_decal/trimline/green/filled/line{ - dir = 9 - }, -/obj/effect/turf_decal/trimline/blue/filled/warning{ - dir = 9 - }, -/turf/open/floor/iron, -/area/station/service/hydroponics) "duZ" = ( /obj/machinery/door/airlock/engineering{ name = "Utilities Closet" @@ -11804,6 +11931,22 @@ /obj/structure/flora/tree/dead/style_random, /turf/open/misc/asteroid/snow/icemoon, /area/icemoon/surface/outdoors/nospawn) +"dvZ" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, +/obj/machinery/door/airlock/maintenance{ + name = "Bar Maintenance" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/commons/lounge) "dwb" = ( /obj/effect/turf_decal/tile/blue{ dir = 1 @@ -11819,6 +11962,12 @@ /obj/effect/decal/cleanable/cobweb, /turf/open/openspace/icemoon/keep_below, /area/station/maintenance/port/lesser) +"dwq" = ( +/obj/structure/grille/broken, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/spawner/random/structure/girder, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "dww" = ( /obj/structure/disposalpipe/segment{ dir = 9 @@ -11928,19 +12077,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/catwalk_floor/iron_smooth, /area/station/maintenance/port/lesser) -"dxJ" = ( -/obj/structure/table, -/obj/item/crowbar/red, -/obj/item/stock_parts/cell/high{ - pixel_x = 6; - pixel_y = -3 - }, -/obj/structure/sign/poster/random/directional/west, -/obj/effect/turf_decal/tile/yellow/anticorner/contrasted{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/aft) "dxK" = ( /turf/closed/wall/r_wall, /area/station/command/meeting_room) @@ -11959,15 +12095,11 @@ /obj/structure/cable, /turf/open/floor/iron/dark, /area/station/security/courtroom) -"dyw" = ( +"dym" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment{ - dir = 6 - }, +/obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/plating, -/area/station/maintenance/department/crew_quarters/bar) +/area/station/maintenance/fore) "dyE" = ( /obj/structure/chair/pew/right{ dir = 1 @@ -12015,10 +12147,12 @@ /turf/open/floor/plating, /area/station/maintenance/port/greater) "dzr" = ( -/obj/item/radio/intercom/directional/north, -/obj/machinery/smartfridge/organ, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, +/obj/machinery/door/airlock/external, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "graveyard" + }, +/obj/effect/mapping_helpers/airlock/access/all/medical/coroner, +/turf/open/floor/plating, /area/station/medical/morgue) "dzt" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ @@ -12031,16 +12165,21 @@ }, /turf/open/floor/iron/smooth, /area/station/security/execution/transfer) -"dzx" = ( -/obj/structure/closet/emcloset, -/turf/open/floor/plating, -/area/station/maintenance/fore) "dzy" = ( /obj/effect/turf_decal/tile/neutral{ dir = 4 }, /turf/open/floor/iron/dark, /area/station/service/chapel) +"dzD" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 1 + }, +/turf/open/floor/stone, +/area/station/service/bar/atrium) "dzJ" = ( /obj/effect/turf_decal/stripes/line{ dir = 6 @@ -12154,6 +12293,26 @@ }, /turf/open/floor/plating/snowed/icemoon, /area/mine/laborcamp/security) +"dBA" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/public/glass{ + name = "Central Access" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/stripes/white/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/white/line{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured, +/area/station/hallway/primary/starboard) "dBB" = ( /obj/machinery/portable_atmospherics/canister/air, /obj/effect/turf_decal/bot_white, @@ -12196,19 +12355,6 @@ "dBZ" = ( /turf/open/floor/iron, /area/station/cargo/sorting) -"dCk" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/duct, -/turf/open/floor/wood, -/area/station/hallway/secondary/service) "dCs" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -12222,19 +12368,17 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/engineering/supermatter/room) -"dCA" = ( -/obj/structure/closet/crate, -/obj/effect/spawner/random/maintenance/two, -/obj/structure/disposalpipe/segment{ - dir = 6 - }, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) "dCF" = ( /obj/effect/landmark/start/hangover, /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/commons/fitness) +"dCV" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/wood/parquet, +/area/station/service/bar/backroom) "dDm" = ( /obj/machinery/atmospherics/components/unary/outlet_injector/on{ dir = 1 @@ -12256,8 +12400,11 @@ /turf/open/floor/plating, /area/station/hallway/secondary/entry) "dDq" = ( -/obj/effect/decal/cleanable/blood/bubblegum, -/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/decal/cleanable/blood/tracks{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/medical/morgue) "dDt" = ( @@ -12286,22 +12433,22 @@ }, /turf/open/floor/plating, /area/station/maintenance/department/medical/central) -"dDQ" = ( -/obj/structure/table, -/obj/machinery/cell_charger{ - pixel_y = 3 - }, -/obj/item/stock_parts/cell/high{ - pixel_y = 3 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/obj/machinery/airalarm/directional/north, -/turf/open/floor/iron/textured, -/area/mine/mechbay) "dDV" = ( /obj/effect/spawner/random/structure/girder, /turf/open/floor/plating, /area/station/maintenance/port/fore) +"dEc" = ( +/obj/structure/table/wood, +/obj/item/soap/nanotrasen, +/obj/item/clothing/head/costume/sombrero/green, +/obj/machinery/camera{ + c_tag = "Service - Theater"; + dir = 9 + }, +/obj/machinery/status_display/ai/directional/north, +/obj/effect/turf_decal/siding/wood, +/turf/open/floor/iron/grimy, +/area/station/commons/lounge) "dEf" = ( /obj/effect/turf_decal/trimline/blue/corner{ dir = 1 @@ -12326,6 +12473,10 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/white, /area/station/medical/medbay/lobby) +"dEi" = ( +/obj/effect/spawner/random/medical/two_percent_xeno_egg_spawner, +/turf/open/floor/engine/xenobio, +/area/station/science/xenobiology) "dEv" = ( /obj/machinery/airalarm/directional/south, /turf/open/floor/wood, @@ -12336,15 +12487,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/carpet, /area/station/security/prison/rec) -"dEB" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/plating, -/area/station/maintenance/department/crew_quarters/bar) "dEC" = ( /obj/machinery/door/firedoor/heavy, /obj/machinery/door/poddoor/shutters/preopen{ @@ -12422,27 +12564,6 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/engineering/atmos/pumproom) -"dFr" = ( -/obj/structure/table, -/obj/machinery/computer/security/telescreen/interrogation{ - dir = 1; - name = "isolation room monitor"; - network = list("isolation"); - pixel_y = -32 - }, -/obj/item/clothing/suit/jacket/straight_jacket, -/obj/item/clothing/suit/jacket/straight_jacket{ - pixel_x = 6 - }, -/obj/machinery/camera/directional/east{ - c_tag = "Security - Permabrig Prep"; - network = list("ss13","prison"); - view_range = 5 - }, -/obj/structure/cable, -/obj/machinery/light/small/directional/east, -/turf/open/floor/iron/smooth, -/area/station/security/execution/transfer) "dFt" = ( /turf/closed/wall, /area/station/hallway/secondary/exit/departure_lounge) @@ -12479,10 +12600,6 @@ /obj/machinery/light/directional/north, /turf/open/floor/iron, /area/station/hallway/primary/starboard) -"dFP" = ( -/obj/structure/sink/directional/east, -/turf/open/floor/iron/freezer, -/area/station/commons/toilet) "dFW" = ( /turf/open/floor/iron/white/side, /area/station/science/research) @@ -12504,6 +12621,30 @@ /obj/effect/decal/cleanable/food/egg_smudge, /turf/open/floor/plating, /area/station/maintenance/port/fore) +"dGG" = ( +/obj/machinery/camera/directional/west{ + c_tag = "Cargo Bay Receiving Dock" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/computer/cargo{ + dir = 4 + }, +/obj/machinery/button/door/directional/west{ + id = "QMLoaddoor"; + name = "Loading Doors"; + pixel_y = -8; + req_access = list("cargo") + }, +/obj/machinery/button/door/directional/west{ + id = "QMLoaddoor2"; + name = "Loading Doors"; + pixel_y = 8; + req_access = list("cargo") + }, +/turf/open/floor/iron, +/area/station/cargo/storage) "dGK" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -12526,6 +12667,19 @@ /obj/effect/mapping_helpers/airlock/access/all/command/captain, /turf/open/floor/plating, /area/station/maintenance/central/lesser) +"dGZ" = ( +/obj/machinery/door/airlock/external{ + glass = 1; + name = "Chapel Maintenance External Airlock"; + opacity = 0 + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/engineering/external, +/turf/open/floor/plating, +/area/station/maintenance/department/chapel) "dHa" = ( /obj/effect/turf_decal/trimline/neutral/filled/line{ dir = 8 @@ -12579,30 +12733,6 @@ /obj/effect/turf_decal/stripes/line, /turf/open/floor/plating, /area/station/maintenance/department/chapel) -"dIc" = ( -/obj/effect/turf_decal/trimline/green/filled/line{ - dir = 10 - }, -/obj/effect/turf_decal/trimline/blue/filled/warning{ - dir = 10 - }, -/obj/machinery/hydroponics/constructable, -/obj/machinery/light/directional/south, -/turf/open/floor/iron/dark, -/area/station/service/hydroponics) -"dIe" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/door/airlock{ - name = "Service Hall" - }, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/effect/mapping_helpers/airlock/access/all/service/general, -/obj/effect/mapping_helpers/airlock/unres, -/turf/open/floor/plastic, -/area/station/hallway/secondary/service) "dIl" = ( /obj/machinery/atmospherics/components/unary/portables_connector/visible{ dir = 4 @@ -12610,14 +12740,6 @@ /obj/effect/turf_decal/bot_red, /turf/open/floor/iron/dark, /area/station/engineering/atmos/project) -"dIn" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/obj/structure/disposalpipe/segment, -/turf/open/floor/iron, -/area/station/hallway/secondary/service) "dIx" = ( /obj/effect/spawner/random/structure/grille, /turf/open/floor/plating, @@ -12674,6 +12796,18 @@ /obj/machinery/air_sensor/ordnance_freezer_chamber, /turf/open/floor/iron/dark/airless, /area/station/science/ordnance/freezerchamber) +"dJF" = ( +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/obj/structure/cable, +/obj/machinery/duct, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics) "dJY" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -12700,6 +12834,16 @@ /obj/machinery/light/small/directional/north, /turf/open/floor/plating, /area/station/cargo/sorting) +"dKf" = ( +/obj/machinery/camera/directional/south{ + c_tag = "Starboard Primary Hallway Center West" + }, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/obj/item/radio/intercom/directional/south, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) "dKh" = ( /obj/machinery/light_switch/directional/east, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ @@ -12708,17 +12852,22 @@ /obj/effect/turf_decal/tile/yellow, /turf/open/floor/iron, /area/station/tcommsat/computer) -"dKt" = ( -/obj/machinery/door/airlock/external, -/obj/effect/turf_decal/weather/snow/corner{ - dir = 8 +"dKr" = ( +/obj/structure/table, +/obj/machinery/computer/security/telescreen/isolation/directional/south, +/obj/item/clothing/suit/jacket/straight_jacket, +/obj/item/clothing/suit/jacket/straight_jacket{ + pixel_x = 6 }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ - cycle_id = "chem-morgue-airlock" +/obj/machinery/camera/directional/east{ + c_tag = "Security - Permabrig Prep"; + network = list("ss13","prison"); + view_range = 5 }, -/obj/effect/mapping_helpers/airlock/access/any/medical/maintenance, -/turf/open/floor/plating, -/area/station/medical/morgue) +/obj/structure/cable, +/obj/machinery/light/small/directional/east, +/turf/open/floor/iron/smooth, +/area/station/security/execution/transfer) "dKy" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/door/poddoor/preopen{ @@ -12830,13 +12979,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/white, /area/station/medical/medbay/aft) -"dMq" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) "dMv" = ( /obj/item/clothing/gloves/color/rainbow, /obj/item/clothing/head/soft/rainbow, @@ -12844,20 +12986,6 @@ /obj/item/clothing/under/color/rainbow, /turf/open/floor/plating, /area/station/maintenance/port/greater) -"dMB" = ( -/obj/vehicle/ridden/wheelchair{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/blue/filled/end{ - dir = 1 - }, -/obj/structure/window/reinforced/spawner/directional/north{ - layer = 2.9 - }, -/obj/item/radio/intercom/directional/west, -/obj/structure/disposalpipe/segment, -/turf/open/floor/iron/large, -/area/station/medical/medbay/aft) "dMH" = ( /obj/machinery/light/directional/north, /obj/machinery/status_display/evac/directional/north, @@ -12873,9 +13001,6 @@ /obj/effect/decal/cleanable/cobweb, /turf/open/floor/plating, /area/station/maintenance/port/aft) -"dMS" = ( -/turf/closed/wall, -/area/station/maintenance/department/crew_quarters/bar) "dMX" = ( /obj/structure/chair{ dir = 1; @@ -12883,6 +13008,10 @@ }, /turf/open/floor/iron, /area/station/command/bridge) +"dNk" = ( +/obj/effect/landmark/event_spawn, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics) "dNl" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/turf_decal/siding/thinplating{ @@ -12948,22 +13077,6 @@ }, /turf/open/floor/plating/snowed/icemoon, /area/icemoon/underground/explored) -"dNZ" = ( -/obj/structure/training_machine, -/obj/item/target, -/obj/effect/turf_decal/tile/red/half/contrasted{ - dir = 4 - }, -/obj/machinery/light/directional/south, -/turf/open/floor/iron, -/area/station/commons/fitness) -"dOc" = ( -/obj/machinery/door/airlock/external, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 8 - }, -/turf/open/floor/plating, -/area/station/maintenance/fore) "dOq" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -12990,15 +13103,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) -"dOQ" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 8 - }, -/obj/structure/table/wood, -/obj/effect/turf_decal/tile/bar/opposingcorners, -/mob/living/carbon/human/species/monkey/punpun, -/turf/open/floor/iron, -/area/station/service/bar) "dOY" = ( /obj/effect/spawner/random/vending/snackvend, /obj/effect/turf_decal/tile/red/half, @@ -13063,6 +13167,13 @@ }, /turf/open/floor/iron/white, /area/station/medical/pharmacy) +"dQp" = ( +/obj/structure/table/wood, +/obj/item/food/pie/cream, +/obj/item/bikehorn, +/obj/machinery/status_display/evac/directional/west, +/turf/open/floor/iron/grimy, +/area/station/service/theater) "dQI" = ( /obj/effect/landmark/start/assistant, /obj/effect/turf_decal/tile/neutral/half/contrasted{ @@ -13153,6 +13264,14 @@ }, /turf/open/floor/iron/white, /area/station/security/prison/safe) +"dSs" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/structure/chair/stool/bar/directional/east, +/obj/structure/disposalpipe/segment, +/turf/open/floor/stone, +/area/station/service/bar/atrium) "dSJ" = ( /obj/machinery/flasher/directional/north{ id = "visitorflash" @@ -13177,6 +13296,14 @@ /obj/effect/spawner/random/structure/crate, /turf/open/floor/plating, /area/station/maintenance/aft/lesser) +"dSY" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/freezer, +/area/station/service/kitchen/coldroom) "dTm" = ( /obj/effect/decal/cleanable/blood/splatter, /obj/effect/mob_spawn/corpse/human/skeleton, @@ -13197,21 +13324,13 @@ "dTs" = ( /turf/open/floor/iron/smooth, /area/mine/eva) -"dTv" = ( -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 8 - }, -/obj/machinery/door/airlock/external{ - glass = 1; - name = "Chapel External Airlock"; - opacity = 0 - }, -/obj/structure/sign/warning/cold_temp/directional/north, -/obj/structure/sign/warning/gas_mask/directional/south{ - desc = "A sign that warns of dangerous gasses in the air, instructing you to wear internals." +"dTx" = ( +/obj/machinery/status_display/ai/directional/south, +/obj/structure/chair/sofa/right/brown{ + dir = 4 }, -/turf/open/floor/iron, -/area/station/service/chapel) +/turf/open/floor/wood/large, +/area/station/commons/lounge) "dTD" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, @@ -13319,6 +13438,16 @@ }, /turf/open/floor/iron/white, /area/station/medical/medbay/aft) +"dVj" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 10 + }, +/obj/effect/turf_decal/trimline/blue/filled/warning{ + dir = 10 + }, +/obj/machinery/hydroponics/constructable, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics) "dVq" = ( /obj/machinery/space_heater, /obj/structure/sign/poster/random/directional/east, @@ -13439,14 +13568,6 @@ /obj/machinery/light/directional/north, /turf/open/floor/iron/dark, /area/station/command/gateway) -"dXA" = ( -/obj/effect/turf_decal/tile/blue/half/contrasted{ - dir = 1 - }, -/turf/open/floor/iron/dark/side{ - dir = 1 - }, -/area/station/service/hydroponics) "dXF" = ( /obj/structure/disposalpipe/segment{ dir = 10 @@ -13463,6 +13584,13 @@ /obj/item/radio/intercom/directional/east, /turf/open/floor/iron/dark, /area/station/engineering/atmos/hfr_room) +"dXR" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/duct, +/turf/open/floor/wood, +/area/station/hallway/secondary/service) "dXU" = ( /obj/effect/decal/cleanable/generic, /obj/machinery/light/small/directional/south, @@ -13511,10 +13639,6 @@ }, /turf/open/floor/iron, /area/station/engineering/atmos/storage) -"dYO" = ( -/obj/structure/rack, -/turf/open/floor/plating, -/area/station/maintenance/department/crew_quarters/bar) "dYP" = ( /obj/item/toy/snowball{ pixel_x = -11; @@ -13526,6 +13650,7 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 8 }, +/obj/effect/landmark/event_spawn, /turf/open/floor/iron/dark, /area/station/medical/morgue) "dZc" = ( @@ -13544,17 +13669,36 @@ dir = 8 }, /area/mine/eva) -"dZB" = ( +"dZC" = ( +/obj/structure/disposalpipe/segment{ + dir = 9 + }, /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron, -/area/station/commons/fitness) +/turf/open/floor/plating, +/area/station/maintenance/starboard/lesser) "dZJ" = ( /obj/machinery/seed_extractor, /obj/machinery/status_display/evac/directional/north, /turf/open/floor/iron/dark, /area/station/service/hydroponics/garden) +"dZL" = ( +/obj/item/radio/intercom/directional/south, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/green/filled/line, +/obj/effect/turf_decal/trimline/blue/filled/warning, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/duct, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics) "dZN" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 4 @@ -13636,6 +13780,20 @@ /obj/structure/cable, /turf/open/floor/carpet/red, /area/station/security/prison/work) +"eav" = ( +/obj/machinery/door/airlock/hydroponics/glass{ + name = "Hydroponics" + }, +/obj/effect/mapping_helpers/airlock/access/all/service/hydroponics, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/effect/turf_decal/siding/wood, +/turf/open/floor/iron/dark/textured_half, +/area/station/service/hydroponics) "eaw" = ( /obj/effect/spawner/random/contraband/prison, /obj/structure/closet/crate, @@ -13646,15 +13804,9 @@ /obj/structure/window/reinforced/spawner/directional/south, /turf/open/floor/iron/dark/smooth_half, /area/station/security/prison/work) -"eaB" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/hallway/secondary/service) +"eaM" = ( +/turf/open/misc/asteroid/snow/coldroom, +/area/station/service/kitchen/coldroom) "ebb" = ( /obj/structure/extinguisher_cabinet/directional/north, /turf/open/floor/iron, @@ -13663,11 +13815,6 @@ /obj/structure/flora/rock/pile/icy/style_random, /turf/open/misc/asteroid/snow/icemoon, /area/icemoon/underground/explored) -"ebq" = ( -/obj/effect/landmark/start/clown, -/obj/structure/disposalpipe/segment, -/turf/open/floor/carpet, -/area/station/service/theater) "ebr" = ( /turf/open/openspace, /area/station/engineering/atmos/storage) @@ -13703,15 +13850,6 @@ }, /turf/open/misc/asteroid/snow/icemoon, /area/icemoon/underground/explored) -"ece" = ( -/obj/machinery/airalarm/directional/east, -/obj/effect/turf_decal/tile/blue/half/contrasted{ - dir = 1 - }, -/turf/open/floor/iron/dark/side{ - dir = 1 - }, -/area/station/service/hydroponics) "ecs" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -13747,11 +13885,6 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/hallway/secondary/entry) -"ecZ" = ( -/obj/effect/turf_decal/tile/neutral/diagonal_edge, -/obj/structure/closet/secure_closet/freezer/kitchen, -/turf/open/floor/iron/kitchen/diagonal, -/area/station/service/kitchen) "edd" = ( /obj/machinery/door/airlock/maintenance, /obj/structure/cable, @@ -13785,25 +13918,41 @@ }, /turf/open/floor/iron, /area/station/science/robotics/mechbay) -"edD" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 4 +"edt" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/visible/layer4, +/obj/effect/turf_decal/stripes/line{ + dir = 5 }, -/obj/machinery/vending/cigarette, -/obj/machinery/camera{ - c_tag = "Service Bar South"; - dir = 9 +/obj/structure/rack, +/obj/item/tank/internals/oxygen, +/obj/item/extinguisher, +/obj/item/clothing/suit/utility/fire/firefighter, +/obj/item/clothing/head/utility/hardhat/red, +/obj/item/clothing/mask/gas, +/obj/item/clothing/glasses/meson, +/obj/machinery/light/small/directional/north, +/turf/open/floor/plating, +/area/station/maintenance/fore) +"edM" = ( +/obj/item/toy/snowball{ + pixel_x = -6; + pixel_y = -4 }, -/obj/machinery/computer/security/telescreen/entertainment/directional/north, -/obj/machinery/light/directional/west, -/turf/open/floor/iron/grimy, -/area/station/commons/lounge) +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/explored) "edN" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/maintenance/port/greater) +"edO" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/airalarm/directional/west, +/turf/open/floor/wood/large, +/area/station/service/bar) "edT" = ( /obj/structure/grille/broken, /turf/open/floor/plating, @@ -13829,6 +13978,10 @@ }, /turf/open/floor/iron, /area/station/command/teleporter) +"eet" = ( +/obj/effect/spawner/random/trash/bin, +/turf/open/floor/plating, +/area/station/maintenance/starboard/lesser) "eeD" = ( /obj/machinery/light/directional/west, /turf/open/floor/iron/dark/textured, @@ -13848,18 +14001,27 @@ /obj/effect/mapping_helpers/mail_sorting/engineering/atmospherics, /turf/open/floor/iron, /area/station/engineering/lobby) -"efh" = ( -/obj/structure/window/reinforced/spawner/directional/north, -/obj/machinery/computer/slot_machine{ - pixel_y = -6 +"eeY" = ( +/obj/structure/railing{ + dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/siding/white{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/wood/parquet, +/obj/structure/curtain/cloth/fancy/mechanical/start_closed{ + id = "cantena_curtains" + }, +/turf/open/floor/wood, /area/station/commons/lounge) "efi" = ( /obj/structure/bed/dogbed, /obj/effect/decal/cleanable/blood/gibs/body, +/obj/effect/mapping_helpers/no_atoms_ontop, /turf/open/floor/plating/snowed/smoothed/icemoon, /area/icemoon/underground/explored) "efk" = ( @@ -13869,6 +14031,7 @@ "efo" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/iv_drip, +/obj/machinery/firealarm/directional/west, /turf/open/floor/iron/dark, /area/station/medical/morgue) "efv" = ( @@ -13929,6 +14092,41 @@ initial_gas_mix = "ICEMOON_ATMOS" }, /area/icemoon/underground/explored) +"efN" = ( +/obj/machinery/door/airlock/external{ + glass = 1; + name = "Chapel External Airlock"; + opacity = 0 + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/access/any/service/chapel_office, +/obj/effect/mapping_helpers/airlock/access/any/engineering/external, +/turf/open/floor/plating, +/area/station/service/chapel) +"efS" = ( +/obj/item/kirbyplants/random, +/obj/effect/turf_decal/siding/wood{ + dir = 9 + }, +/obj/machinery/power/apc/auto_name/directional/east, +/obj/structure/cable, +/obj/machinery/light/warm/directional/east, +/turf/open/floor/wood/large, +/area/station/commons/lounge) +"efU" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 8 + }, +/obj/machinery/duct, +/obj/structure/sign/flag/nanotrasen/directional/west, +/turf/open/floor/iron, +/area/station/commons/fitness) "efV" = ( /obj/effect/turf_decal/delivery, /obj/structure/cable, @@ -14037,12 +14235,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/white, /area/station/science/xenobiology) -"ehm" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron/freezer, -/area/station/commons/toilet) "ehp" = ( /obj/item/kirbyplants/random, /obj/effect/turf_decal/tile/neutral/fourcorners, @@ -14055,14 +14247,6 @@ }, /turf/open/floor/iron/dark/smooth_large, /area/station/command/heads_quarters/hos) -"ehA" = ( -/obj/machinery/door/airlock/public/glass{ - name = "Canteen" - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/door/firedoor, -/turf/open/floor/iron/textured_half, -/area/station/hallway/primary/starboard) "ehD" = ( /obj/effect/turf_decal/stripes/line{ dir = 6 @@ -14168,14 +14352,6 @@ /obj/structure/cable, /turf/open/floor/iron/white, /area/station/medical/medbay/central) -"ejg" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/visible/layer4, -/obj/machinery/meter/layer4, -/turf/open/floor/plating, -/area/station/maintenance/fore) "ejn" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -14197,11 +14373,6 @@ }, /turf/open/floor/iron/dark, /area/station/commons/storage/primary) -"ejD" = ( -/obj/machinery/portable_atmospherics/scrubber, -/obj/machinery/light/directional/east, -/turf/open/floor/iron/dark, -/area/station/science/ordnance/office) "ejL" = ( /obj/effect/turf_decal/trimline/green/filled/line{ dir = 9 @@ -14221,15 +14392,22 @@ "ejX" = ( /turf/open/floor/plating, /area/station/security/prison/safe) -"eke" = ( -/obj/effect/turf_decal/tile/neutral/diagonal_edge, -/obj/structure/closet/mini_fridge{ - name = "mini-fridge" +"ejY" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/decal/cleanable/oil, +/turf/open/floor/plating, +/area/station/maintenance/fore) +"ekc" = ( +/obj/effect/landmark/event_spawn, +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 }, -/obj/item/reagent_containers/condiment/milk, -/obj/structure/table, -/turf/open/floor/iron/kitchen/diagonal, -/area/station/service/kitchen) +/turf/open/floor/iron/dark, +/area/station/service/hydroponics) "ekh" = ( /obj/machinery/camera/directional/west{ c_tag = "Atmospherics - Central" @@ -14330,6 +14508,30 @@ dir = 1 }, /area/station/hallway/primary/starboard) +"emw" = ( +/obj/item/radio/intercom/directional/west, +/turf/open/floor/wood, +/area/station/commons/lounge) +"emx" = ( +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"emF" = ( +/obj/structure/reagent_dispensers/plumbed{ + name = "service reservoir" + }, +/obj/machinery/light/small/dim/directional/north, +/obj/effect/turf_decal/delivery/white{ + color = "#307db9" + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/textured, +/area/station/maintenance/starboard/fore) "emK" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white/side{ @@ -14364,14 +14566,6 @@ /obj/effect/turf_decal/stripes/box, /turf/open/floor/plating, /area/station/engineering/lobby) -"enG" = ( -/obj/effect/turf_decal/tile/neutral/diagonal_edge, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/iron/kitchen/diagonal, -/area/station/service/kitchen) "enI" = ( /obj/machinery/door/airlock/maintenance{ name = "Tool Storage Maintenance" @@ -14400,16 +14594,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/service/chapel) -"eoq" = ( -/obj/structure/stairs/south{ - dir = 1 - }, -/obj/structure/railing{ - dir = 4 - }, -/obj/machinery/firealarm/directional/east, -/turf/open/floor/iron/dark, -/area/station/service/hydroponics) "eos" = ( /obj/effect/spawner/structure/window, /turf/open/floor/plating, @@ -14463,6 +14647,18 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/iron/dark, /area/station/engineering/atmos/hfr_room) +"eoV" = ( +/obj/item/trash/popcorn, +/obj/structure/reagent_dispensers/plumbed{ + name = "dormitory reservoir" + }, +/obj/machinery/light/small/dim/directional/north, +/obj/effect/turf_decal/delivery/white{ + color = "#307db9" + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/textured, +/area/station/maintenance/fore) "eoY" = ( /obj/structure/cable, /obj/effect/turf_decal/tile/neutral/fourcorners, @@ -14472,15 +14668,18 @@ }, /turf/open/floor/iron, /area/station/commons/locker) -"epd" = ( -/obj/effect/decal/cleanable/dirt, +"eph" = ( /obj/structure/cable, -/obj/structure/table, -/obj/machinery/cell_charger, -/obj/item/stock_parts/cell/high, -/obj/item/stock_parts/cell/high, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/open/floor/iron, -/area/station/maintenance/department/electrical) +/area/station/hallway/primary/central) "epB" = ( /obj/structure/chair/pew/left{ dir = 1 @@ -14512,6 +14711,15 @@ dir = 8 }, /area/station/science/ordnance/office) +"eqk" = ( +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/plating, +/area/station/maintenance/starboard/lesser) "eqn" = ( /obj/structure/sign/warning/docking/directional/east, /turf/open/misc/asteroid/snow/icemoon, @@ -14627,6 +14835,13 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/science/genetics) +"erq" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "erw" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/decal/cleanable/dirt/dust, @@ -14639,6 +14854,12 @@ /obj/machinery/light_switch/directional/east, /turf/open/floor/iron, /area/station/construction) +"erE" = ( +/obj/machinery/requests_console/auto_name/directional/east, +/obj/machinery/duct, +/obj/effect/mapping_helpers/requests_console/supplies, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics) "erH" = ( /obj/structure/disposalpipe/trunk{ dir = 8 @@ -14697,23 +14918,14 @@ }, /turf/open/floor/iron/dark, /area/station/cargo/miningdock) -"esn" = ( -/obj/effect/landmark/start/bartender, -/turf/open/floor/wood, -/area/station/hallway/secondary/service) +"ese" = ( +/obj/structure/fence/cut/medium, +/turf/open/floor/plating/snowed/smoothed/icemoon, +/area/icemoon/underground/explored/graveyard) "eso" = ( /obj/machinery/telecomms/receiver/preset_left, /turf/open/floor/iron/dark/telecomms, /area/station/tcommsat/server) -"esu" = ( -/obj/effect/turf_decal/tile/green{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/service/hydroponics) "esv" = ( /obj/structure/cable, /obj/effect/turf_decal/siding/green{ @@ -14761,19 +14973,19 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central) +"etr" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics) "etw" = ( /obj/effect/turf_decal/stripes/white/line, /obj/effect/decal/cleanable/dirt, /obj/machinery/airalarm/directional/west, /turf/open/floor/iron, /area/station/security/prison/workout) -"etA" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/structure/disposalpipe/segment, -/turf/open/floor/iron, -/area/station/hallway/secondary/service) "etB" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/smart/simple/brown/visible{ @@ -14801,18 +15013,6 @@ /obj/effect/mapping_helpers/airlock/access/any/engineering/general, /turf/open/floor/iron/dark, /area/station/engineering/main) -"etV" = ( -/obj/machinery/door/airlock{ - name = "Service Hall" - }, -/obj/machinery/door/firedoor, -/obj/effect/mapping_helpers/airlock/access/all/service/general, -/obj/effect/mapping_helpers/airlock/unres{ - dir = 1 - }, -/obj/effect/turf_decal/tile/bar/opposingcorners, -/turf/open/floor/iron, -/area/station/hallway/secondary/service) "etY" = ( /obj/machinery/light_switch/directional/north, /turf/open/floor/iron, @@ -14915,10 +15115,6 @@ "evb" = ( /turf/open/floor/iron, /area/station/service/janitor) -"evc" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on, -/turf/open/floor/engine/vacuum, -/area/station/science/ordnance) "evk" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -14942,11 +15138,6 @@ "evT" = ( /turf/open/floor/plating/icemoon, /area/station/science/ordnance/bomb) -"ewd" = ( -/obj/machinery/airalarm/directional/north, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/turf/open/floor/iron/freezer, -/area/station/commons/toilet) "ewi" = ( /obj/machinery/navbeacon{ codes_txt = "delivery;dir=8"; @@ -14956,12 +15147,6 @@ /obj/effect/turf_decal/bot, /turf/open/floor/iron, /area/station/maintenance/department/medical/central) -"ewz" = ( -/obj/structure/window/reinforced/spawner/directional/east, -/obj/structure/window/reinforced/spawner/directional/north, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/turf/open/floor/iron/dark, -/area/station/commons/fitness) "ewC" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, @@ -15042,12 +15227,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/security/prison/work) -"exY" = ( -/obj/effect/turf_decal/siding/white, -/obj/effect/spawner/random/vending/colavend, -/obj/effect/turf_decal/tile/bar/opposingcorners, -/turf/open/floor/iron, -/area/station/hallway/secondary/service) "eyb" = ( /turf/closed/wall, /area/station/security/processing) @@ -15101,6 +15280,16 @@ /obj/machinery/light/small/red/directional/south, /turf/open/floor/iron/dark/smooth_half, /area/station/service/chapel) +"ezd" = ( +/obj/structure/table/wood, +/obj/effect/decal/cleanable/dirt/dust, +/obj/item/storage/wallet{ + pixel_y = 5; + pixel_x = 3 + }, +/obj/item/newspaper, +/turf/open/floor/plating, +/area/station/maintenance/starboard/lesser) "ezf" = ( /obj/machinery/door/airlock{ name = "Private Restroom" @@ -15108,6 +15297,13 @@ /obj/effect/mapping_helpers/airlock/access/all/medical/general, /turf/open/floor/iron/freezer, /area/station/medical/break_room) +"ezk" = ( +/obj/effect/turf_decal/siding/wood/end{ + dir = 1 + }, +/obj/item/kirbyplants/organic/plant11, +/turf/open/floor/stone, +/area/station/service/bar/atrium) "ezl" = ( /obj/effect/turf_decal/siding/wood, /obj/effect/decal/cleanable/dirt, @@ -15208,22 +15404,6 @@ /obj/machinery/firealarm/directional/south, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/ai) -"eAS" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/door/airlock/engineering{ - name = "Utilities Room" - }, -/obj/structure/disposalpipe/segment, -/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, -/obj/effect/mapping_helpers/airlock/unres, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) -"eBa" = ( -/obj/effect/turf_decal/siding/white, -/turf/open/floor/iron/white/smooth_large, -/area/station/service/kitchen/diner) "eBd" = ( /obj/effect/turf_decal/delivery, /turf/open/floor/iron/dark, @@ -15241,25 +15421,6 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) -"eBi" = ( -/obj/machinery/door/airlock{ - name = "Hydroponics Backroom" - }, -/obj/machinery/door/firedoor, -/obj/effect/mapping_helpers/airlock/access/all/service/hydroponics, -/turf/open/floor/iron/textured_half, -/area/station/service/hydroponics) -"eBk" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/light/directional/south, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/neutral/half/contrasted, -/turf/open/floor/iron, -/area/station/commons/fitness) "eBz" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -15386,12 +15547,6 @@ }, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/aisat_interior) -"eDi" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 - }, -/turf/open/floor/wood/parquet, -/area/station/commons/lounge) "eDj" = ( /obj/machinery/atmospherics/components/unary/portables_connector/visible{ dir = 8 @@ -15404,13 +15559,6 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/security/prison/visit) -"eDx" = ( -/obj/effect/turf_decal/tile/neutral/diagonal_edge, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/landmark/start/cook, -/turf/open/floor/iron/kitchen/diagonal, -/area/station/service/kitchen) "eDy" = ( /obj/structure/closet/boxinggloves, /obj/machinery/light/directional/north, @@ -15427,6 +15575,12 @@ }, /turf/open/floor/engine, /area/station/engineering/supermatter/room) +"eDD" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/disposalpipe/segment, +/obj/structure/railing/corner/end, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "eDH" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -15451,13 +15605,6 @@ /obj/machinery/door/firedoor, /turf/open/floor/iron/smooth_large, /area/station/command/heads_quarters/hos) -"eDP" = ( -/obj/effect/turf_decal/siding/wood/end{ - dir = 1 - }, -/obj/structure/bookcase/random/fiction, -/turf/open/floor/iron/dark, -/area/station/commons/lounge) "eEh" = ( /obj/structure/table/reinforced, /obj/item/storage/toolbox/mechanical, @@ -15469,10 +15616,24 @@ /obj/item/flashlight, /turf/open/floor/engine, /area/station/engineering/supermatter/room) -"eEz" = ( -/obj/effect/spawner/structure/window/reinforced, +"eEm" = ( +/obj/structure/closet/crate, +/obj/item/stack/sheet/iron/fifty, +/obj/item/stack/rods/fifty, +/obj/item/stack/sheet/glass/fifty, +/obj/item/electronics/airlock, +/obj/item/electronics/airlock, +/obj/item/stock_parts/power_store/cell/high, +/obj/item/stack/sheet/mineral/plasma{ + amount = 30 + }, /turf/open/floor/plating, -/area/station/service/bar/atrium) +/area/station/engineering/engine_smes) +"eEr" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/sign/warning/directional/south, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "eEC" = ( /obj/structure/table/wood, /obj/machinery/fax{ @@ -15515,6 +15676,14 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden, /turf/open/floor/plating, /area/station/engineering/atmos/storage/gas) +"eFf" = ( +/obj/structure/fireplace{ + pixel_x = 0 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/stone, +/area/station/commons/lounge) "eFh" = ( /obj/structure/table, /obj/effect/spawner/random/entertainment/cigarette_pack, @@ -15573,6 +15742,11 @@ /obj/structure/chair/stool/directional/south, /turf/open/floor/wood, /area/station/commons/dorms) +"eGg" = ( +/obj/machinery/icecream_vat, +/obj/structure/sign/clock/directional/north, +/turf/open/floor/iron/freezer, +/area/station/service/kitchen/coldroom) "eGl" = ( /obj/effect/turf_decal/tile/neutral/fourcorners, /obj/effect/landmark/event_spawn, @@ -15659,16 +15833,16 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/port/fore) -"eHW" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +"eHX" = ( /obj/structure/disposalpipe/segment{ - dir = 4 + dir = 6 }, -/obj/structure/sign/warning/gas_mask/directional/south, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/duct, /turf/open/floor/plating, -/area/station/maintenance/department/crew_quarters/bar) +/area/station/maintenance/fore) "eHZ" = ( /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 4 @@ -15676,13 +15850,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/white, /area/station/medical/treatment_center) -"eIa" = ( -/obj/effect/turf_decal/siding/wood/corner{ - dir = 1 - }, -/obj/machinery/restaurant_portal/bar, -/turf/open/floor/stone, -/area/station/commons/lounge) "eId" = ( /obj/structure/railing/corner{ dir = 8 @@ -15721,16 +15888,6 @@ }, /turf/open/floor/iron, /area/station/cargo/storage) -"eIY" = ( -/obj/effect/turf_decal/trimline/green/filled/line{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/blue/filled/warning{ - dir = 4 - }, -/obj/machinery/light/floor, -/turf/open/floor/iron/dark, -/area/station/service/hydroponics) "eJe" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -15744,18 +15901,6 @@ /obj/structure/lattice, /turf/open/openspace/icemoon/keep_below, /area/icemoon/underground/explored) -"eJq" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/hydroponics/glass{ - name = "Hydroponics" - }, -/obj/effect/mapping_helpers/airlock/access/all/service/hydroponics, -/turf/open/floor/iron/textured_half{ - dir = 1 - }, -/area/station/service/hydroponics) "eJx" = ( /obj/machinery/newscaster/directional/east, /obj/effect/turf_decal/trimline/yellow/filled/line{ @@ -15829,10 +15974,6 @@ dir = 8 }, /area/station/maintenance/port/fore) -"eLb" = ( -/obj/machinery/iv_drip, -/turf/open/floor/engine, -/area/station/science/xenobiology) "eLl" = ( /obj/structure/disposalpipe/segment{ dir = 5 @@ -15851,15 +15992,19 @@ dir = 5 }, /area/station/science/research) -"eLx" = ( -/obj/effect/landmark/start/bartender, -/obj/machinery/duct, -/obj/structure/disposalpipe/segment{ - dir = 9 +"eLv" = ( +/obj/machinery/light_switch/directional/east, +/obj/effect/turf_decal/siding/white{ + dir = 8 }, -/obj/effect/turf_decal/tile/bar/opposingcorners, -/turf/open/floor/iron, -/area/station/service/bar) +/obj/structure/closet/secure_closet/freezer/kitchen, +/obj/item/food/grown/tomato, +/obj/item/food/grown/tomato{ + pixel_y = 2; + pixel_x = 2 + }, +/turf/open/floor/iron/white/smooth_large, +/area/station/service/kitchen) "eLS" = ( /obj/structure/window/reinforced/spawner/directional/north, /obj/structure/window/reinforced/spawner/directional/east, @@ -15914,6 +16059,10 @@ /obj/item/radio/intercom/directional/west, /turf/open/floor/plating, /area/station/ai_monitored/turret_protected/aisat/service) +"eML" = ( +/obj/machinery/vending/wardrobe/coroner_wardrobe, +/turf/open/floor/iron/dark, +/area/station/medical/morgue) "eMO" = ( /obj/machinery/door/firedoor/border_only{ dir = 8 @@ -15960,20 +16109,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/department/medical/morgue) -"eNz" = ( -/obj/machinery/door/airlock/maintenance{ - name = "Fitness Maintenance" - }, -/obj/structure/disposalpipe/segment, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/mapping_helpers/airlock/access/any/security/maintenance, -/obj/effect/mapping_helpers/airlock/unres{ - dir = 1 - }, -/turf/open/floor/plating, -/area/station/maintenance/fore) "eNC" = ( /obj/machinery/status_display/evac/directional/west, /obj/item/kirbyplants/random, @@ -16059,10 +16194,11 @@ dir = 4 }, /area/station/ai_monitored/command/storage/eva) -"eOS" = ( -/obj/structure/table, -/turf/open/floor/engine, -/area/station/science/xenobiology) +"ePd" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/grille/broken, +/turf/open/floor/plating, +/area/station/maintenance/fore) "ePi" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/turf_decal/trimline/blue/filled/corner{ @@ -16073,17 +16209,6 @@ }, /turf/open/floor/iron/white, /area/station/medical/storage) -"ePl" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/obj/machinery/duct, -/obj/effect/turf_decal/tile/green{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/service/hydroponics) "ePm" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -16117,6 +16242,16 @@ /obj/item/kirbyplants/random, /turf/open/floor/iron, /area/station/hallway/primary/starboard) +"ePZ" = ( +/obj/structure/chair/stool/directional/west, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/stone, +/area/station/commons/lounge) "eQz" = ( /obj/structure/grille, /turf/open/floor/plating, @@ -16131,15 +16266,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/mine/laborcamp) -"eQN" = ( -/obj/machinery/door/airlock{ - name = "Unisex Showers" - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron/freezer, -/area/station/commons/toilet) "eQQ" = ( /obj/structure/sign/warning/biohazard, /turf/closed/wall, @@ -16208,6 +16334,15 @@ dir = 4 }, /area/station/cargo/bitrunning/den) +"eSm" = ( +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/obj/structure/sign/warning/electric_shock/directional/west, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/fore) "eSn" = ( /obj/structure/chair/office, /obj/effect/landmark/start/assistant, @@ -16235,13 +16370,6 @@ }, /turf/open/floor/iron/cafeteria, /area/station/security/prison/work) -"eSF" = ( -/obj/machinery/light/small/directional/east, -/obj/structure/dresser, -/obj/machinery/firealarm/directional/east, -/obj/structure/sign/poster/contraband/random/directional/north, -/turf/open/floor/iron, -/area/station/service/theater) "eSJ" = ( /obj/effect/turf_decal/stripes/corner{ dir = 8 @@ -16310,6 +16438,15 @@ /obj/structure/cable, /turf/open/floor/catwalk_floor/iron_smooth, /area/station/maintenance/starboard/fore) +"eTT" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners, +/obj/machinery/requests_console/auto_name/directional/north, +/obj/effect/turf_decal/siding/wood, +/obj/machinery/duct, +/obj/machinery/light/small/directional/north, +/obj/effect/mapping_helpers/requests_console/supplies, +/turf/open/floor/iron, +/area/station/service/bar) "eUe" = ( /obj/effect/turf_decal/trimline/yellow/filled/corner, /turf/open/floor/iron/white, @@ -16332,15 +16469,6 @@ /obj/item/seeds/tower, /turf/open/floor/iron/dark, /area/station/service/hydroponics/garden) -"eUw" = ( -/obj/effect/turf_decal/tile/neutral/diagonal_edge, -/obj/structure/table, -/obj/item/storage/bag/tray, -/obj/item/knife/kitchen{ - pixel_y = 2 - }, -/turf/open/floor/iron/kitchen/diagonal, -/area/station/service/kitchen) "eUA" = ( /obj/structure/cable, /obj/effect/turf_decal/siding/green/corner{ @@ -16373,6 +16501,17 @@ /obj/machinery/light/small/directional/north, /turf/open/floor/iron/dark, /area/station/security/execution/education) +"eUC" = ( +/obj/machinery/firealarm/directional/west{ + pixel_y = -4 + }, +/obj/machinery/light_switch/directional/west{ + pixel_y = 5 + }, +/obj/machinery/photocopier, +/obj/machinery/airalarm/directional/north, +/turf/open/floor/wood, +/area/station/hallway/secondary/service) "eUI" = ( /obj/machinery/space_heater, /turf/open/floor/plating, @@ -16438,6 +16577,11 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/mine/eva/lower) +"eVi" = ( +/obj/effect/turf_decal/siding/wood/corner, +/obj/machinery/newscaster/directional/south, +/turf/open/floor/stone, +/area/station/service/bar/atrium) "eVl" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/mining/glass{ @@ -16549,19 +16693,6 @@ /obj/machinery/light/small/directional/south, /turf/open/floor/plating, /area/station/hallway/secondary/entry) -"eWI" = ( -/obj/machinery/door/airlock{ - name = "Hydroponics Maintenance" - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/mapping_helpers/airlock/access/all/service/hydroponics, -/turf/open/floor/plating, -/area/station/maintenance/department/crew_quarters/bar) "eWP" = ( /obj/machinery/computer/security/mining, /obj/effect/turf_decal/tile/brown/anticorner/contrasted, @@ -16587,21 +16718,15 @@ "eXH" = ( /turf/closed/wall/r_wall, /area/station/medical/chemistry) -"eXU" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/closed/wall, -/area/station/maintenance/starboard/lesser) -"eXY" = ( +"eXZ" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, /obj/structure/disposalpipe/segment{ dir = 6 }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/plating, -/area/station/maintenance/fore) +/turf/open/floor/iron, +/area/station/hallway/primary/central) "eYe" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -16630,10 +16755,6 @@ /obj/structure/cable, /turf/open/floor/circuit, /area/station/ai_monitored/turret_protected/ai) -"eYL" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/closed/wall, -/area/station/maintenance/fore) "eYP" = ( /obj/structure/cable, /obj/machinery/door/firedoor, @@ -16685,17 +16806,6 @@ /obj/machinery/drone_dispenser, /turf/open/floor/plating, /area/station/maintenance/aft/greater) -"eZj" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/trimline/green/filled/line{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/blue/filled/warning{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/service/hydroponics) "eZp" = ( /obj/machinery/space_heater, /obj/effect/decal/cleanable/dirt, @@ -16781,6 +16891,26 @@ /obj/structure/tank_holder/extinguisher, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) +"far" = ( +/obj/structure/railing/corner/end{ + dir = 4 + }, +/turf/open/floor/iron/stairs/old{ + dir = 4 + }, +/area/station/hallway/primary/starboard) +"fat" = ( +/obj/effect/turf_decal/trimline/green/filled/corner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/blue/corner{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics) "faG" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 8 @@ -16797,6 +16927,25 @@ }, /turf/open/floor/iron, /area/station/command/heads_quarters/rd) +"fbg" = ( +/obj/machinery/door/airlock/wood{ + name = "Backstage" + }, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/mapping_helpers/airlock/access/all/service/theatre, +/obj/effect/landmark/navigate_destination, +/turf/open/floor/iron/dark/textured_half{ + dir = 1 + }, +/area/station/service/theater) "fbh" = ( /obj/machinery/power/tracker, /obj/structure/cable, @@ -16805,20 +16954,6 @@ "fbl" = ( /turf/open/floor/iron/dark, /area/station/science/breakroom) -"fbm" = ( -/obj/effect/turf_decal/siding/white{ - dir = 5 - }, -/obj/machinery/duct, -/obj/machinery/power/apc/auto_name/directional/east, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron/white/smooth_large, -/area/station/service/kitchen/diner) -"fbt" = ( -/obj/effect/turf_decal/tile/green, -/turf/open/floor/iron, -/area/station/hallway/primary/central) "fbw" = ( /obj/machinery/camera/directional/north{ c_tag = "Bridge Conference Room" @@ -16826,6 +16961,14 @@ /obj/machinery/newscaster/directional/north, /turf/open/floor/wood, /area/station/command/meeting_room) +"fbW" = ( +/obj/machinery/newscaster/directional/west, +/obj/machinery/vending/cigarette, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/commons/lounge) "fbY" = ( /obj/effect/spawner/random/trash/hobo_squat, /turf/open/floor/plating, @@ -16836,6 +16979,14 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/iron/dark, /area/station/security/checkpoint/science) +"fce" = ( +/obj/structure/table/glass, +/obj/structure/sign/poster/contraband/little_fruits/directional/east, +/obj/item/storage/bag/plants/portaseeder, +/obj/item/plant_analyzer, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "fcg" = ( /obj/effect/spawner/random/engineering/tracking_beacon, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -16848,11 +16999,13 @@ }, /turf/open/floor/iron, /area/station/engineering/main) -"fcj" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +"fco" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, /turf/open/floor/iron, -/area/station/science/ordnance) +/area/station/service/bar) "fcu" = ( /obj/machinery/power/apc/auto_name/directional/east, /obj/structure/chair, @@ -16937,6 +17090,7 @@ "fdP" = ( /obj/structure/bonfire, /obj/item/melee/roastingstick, +/obj/effect/mapping_helpers/no_atoms_ontop, /turf/open/floor/plating/snowed/smoothed/icemoon, /area/icemoon/underground/explored) "fdX" = ( @@ -16987,6 +17141,11 @@ }, /turf/open/floor/iron/white, /area/station/medical/pharmacy) +"feV" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/spawner/structure/window/reinforced/tinted, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "ffe" = ( /turf/closed/wall/r_wall, /area/station/maintenance/aft/lesser) @@ -16997,6 +17156,16 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/service/chapel) +"ffr" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/railing{ + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/service/hydroponics) "ffz" = ( /obj/machinery/processor/slime, /turf/open/floor/iron, @@ -17038,16 +17207,12 @@ }, /turf/open/floor/iron, /area/station/science/ordnance) -"fgE" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 +"fgz" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 }, -/obj/machinery/duct, -/turf/open/floor/wood, -/area/station/hallway/secondary/service) +/turf/open/floor/plating, +/area/station/maintenance/fore) "fgJ" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/cable, @@ -17095,8 +17260,17 @@ /area/station/maintenance/fore) "fhB" = ( /obj/structure/chair/sofa/bench/left, +/obj/effect/mapping_helpers/no_atoms_ontop, /turf/open/misc/asteroid/snow/icemoon, /area/icemoon/surface/outdoors/nospawn) +"fhS" = ( +/obj/effect/turf_decal/siding/white{ + dir = 8 + }, +/obj/structure/sink/kitchen/directional/west, +/obj/machinery/newscaster/directional/east, +/turf/open/floor/iron/white/smooth_large, +/area/station/service/kitchen) "fhU" = ( /obj/structure/cable, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ @@ -17226,10 +17400,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/engineering/atmos/hfr_room) -"fjm" = ( -/obj/machinery/firealarm/directional/north, -/turf/open/floor/iron, -/area/station/hallway/secondary/service) "fjt" = ( /obj/machinery/door/window/left/directional/east{ name = "Containment Pen 9"; @@ -17242,15 +17412,21 @@ /obj/structure/cable, /turf/open/floor/engine, /area/station/science/xenobiology) +"fju" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/blue/filled/warning{ + dir = 1 + }, +/obj/machinery/duct, +/turf/open/floor/iron, +/area/station/service/hydroponics) "fjz" = ( /obj/effect/decal/cleanable/generic, /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/maintenance/department/chapel) -"fjC" = ( -/obj/structure/disposalpipe/segment, -/turf/open/floor/wood/parquet, -/area/station/commons/lounge) "fjD" = ( /obj/effect/spawner/random/engineering/tracking_beacon, /obj/effect/turf_decal/bot, @@ -17272,6 +17448,13 @@ }, /turf/open/floor/iron/grimy, /area/station/service/chapel/office) +"fjO" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/components/binary/valve/digital/on/layer4, +/turf/open/floor/plating, +/area/station/maintenance/fore) "fjQ" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /turf/open/floor/iron/white, @@ -17280,10 +17463,17 @@ /obj/machinery/power/terminal{ dir = 8 }, -/obj/structure/cable, /obj/structure/sign/poster/contraband/missing_gloves/directional/east, /turf/open/floor/plating, /area/station/maintenance/department/electrical) +"fkd" = ( +/obj/machinery/vending/coffee, +/obj/effect/turf_decal/siding/wood{ + dir = 5 + }, +/obj/machinery/airalarm/directional/west, +/turf/open/floor/iron/dark, +/area/station/commons/lounge) "fkj" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -17299,6 +17489,15 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/kitchen/diagonal, /area/station/service/kitchen) +"fkq" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "fkt" = ( /obj/structure/disposalpipe/segment, /turf/open/floor/plating/icemoon, @@ -17307,12 +17506,6 @@ /obj/item/weldingtool, /turf/open/floor/plating/snowed/icemoon, /area/icemoon/surface/outdoors/nospawn) -"fkJ" = ( -/obj/machinery/computer/slot_machine{ - pixel_y = 2 - }, -/turf/open/floor/plating, -/area/station/maintenance/department/crew_quarters/bar) "fkN" = ( /obj/machinery/portable_atmospherics/canister/nitrogen, /turf/open/floor/iron/dark, @@ -17465,9 +17658,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/engineering/atmos/mix) -"fmD" = ( -/turf/open/floor/wood/parquet, -/area/station/service/bar/atrium) "fmU" = ( /obj/structure/railing/corner{ dir = 4 @@ -17478,6 +17668,7 @@ /obj/structure/chair/wood{ dir = 4 }, +/obj/effect/mapping_helpers/no_atoms_ontop, /turf/open/misc/asteroid/snow/icemoon, /area/icemoon/underground/explored) "fng" = ( @@ -17556,9 +17747,15 @@ /obj/effect/turf_decal/tile/neutral/anticorner/contrasted, /turf/open/floor/iron, /area/station/commons/dorms) -"fpb" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/plating/snowed/coldroom, +"fpm" = ( +/obj/structure/railing/corner/end{ + dir = 1 + }, +/obj/structure/cable, +/obj/effect/turf_decal/siding/white{ + dir = 4 + }, +/turf/open/floor/plating, /area/station/service/kitchen/coldroom) "fpp" = ( /obj/effect/turf_decal/trimline/green/filled/line{ @@ -17582,6 +17779,11 @@ dir = 9 }, /area/station/security/prison/safe) +"fpt" = ( +/obj/structure/kitchenspike, +/obj/machinery/status_display/evac/directional/west, +/turf/open/floor/plating/snowed/coldroom, +/area/station/service/kitchen/coldroom) "fpA" = ( /obj/machinery/hydroponics/soil, /obj/effect/turf_decal/siding/wideplating/dark{ @@ -17603,28 +17805,16 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/engine, /area/station/engineering/supermatter/room) +"fpF" = ( +/obj/machinery/space_heater, +/obj/effect/decal/cleanable/cobweb/cobweb2, +/turf/open/floor/plating, +/area/station/maintenance/fore) "fpJ" = ( /obj/structure/fireaxecabinet/directional/west, /obj/machinery/suit_storage_unit/atmos, /turf/open/floor/iron/dark/textured, /area/station/engineering/atmos) -"fpP" = ( -/obj/machinery/camera/directional/north{ - c_tag = "Central Hallway North-East" - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/turf/open/floor/iron, -/area/station/hallway/primary/central) -"fpW" = ( -/obj/structure/sign/poster/official/random/directional/north, -/turf/open/floor/wood, -/area/station/hallway/secondary/service) -"fqc" = ( -/obj/structure/table, -/obj/item/clothing/mask/cigarette/cigar, -/obj/effect/turf_decal/tile/red/full, -/turf/open/floor/iron/large, -/area/station/service/kitchen/diner) "fqv" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -17653,14 +17843,6 @@ /obj/effect/turf_decal/trimline/white/filled/warning, /turf/open/genturf, /area/icemoon/underground/unexplored/rivers/deep) -"fqK" = ( -/obj/structure/window/reinforced/spawner/directional/south, -/obj/structure/window/reinforced/spawner/directional/west, -/obj/effect/turf_decal/siding/thinplating/dark{ - dir = 10 - }, -/turf/open/floor/carpet, -/area/station/service/theater) "fqQ" = ( /obj/effect/turf_decal/stripes/corner{ dir = 1 @@ -17689,6 +17871,11 @@ dir = 8 }, /area/station/medical/chem_storage) +"fqX" = ( +/obj/structure/chair/stool/directional/north, +/obj/effect/landmark/event_spawn, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) "frd" = ( /obj/structure/railing/corner{ dir = 1 @@ -17775,11 +17962,6 @@ }, /turf/open/floor/iron/dark/textured, /area/station/security/range) -"fsr" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/plating, -/area/station/maintenance/department/crew_quarters/bar) "fsv" = ( /turf/open/floor/iron, /area/station/hallway/secondary/entry) @@ -17795,6 +17977,14 @@ }, /turf/open/floor/plating, /area/station/security/execution/education) +"fsO" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/landmark/start/hangover, +/obj/effect/turf_decal/tile/neutral/half/contrasted, +/obj/machinery/firealarm/directional/south, +/turf/open/floor/iron, +/area/station/commons/fitness) "fsQ" = ( /obj/machinery/atmospherics/pipe/smart/simple/cyan/visible, /obj/effect/turf_decal/tile/blue{ @@ -17821,6 +18011,15 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/port/fore) +"fte" = ( +/obj/effect/turf_decal/tile/green/opposingcorners{ + dir = 1 + }, +/obj/effect/turf_decal/tile/blue/opposingcorners, +/obj/structure/closet/secure_closet/hydroponics, +/obj/structure/sign/clock/directional/east, +/turf/open/floor/iron, +/area/station/service/hydroponics) "ftt" = ( /obj/structure/sign/warning/secure_area/directional/south{ desc = "A warning sign which reads 'SERVER ROOM'."; @@ -17848,16 +18047,6 @@ }, /turf/open/floor/plating, /area/station/science/genetics) -"ftM" = ( -/obj/machinery/button/door/directional/north{ - id = "kitchencounter"; - name = "Kitchen Lockdown"; - pixel_x = -25; - req_access = list("kitchen") - }, -/obj/effect/turf_decal/tile/neutral/diagonal_edge, -/turf/open/floor/iron/kitchen/diagonal, -/area/station/service/kitchen) "ftN" = ( /obj/machinery/light_switch/directional/west, /obj/machinery/rnd/destructive_analyzer, @@ -17929,15 +18118,16 @@ "fvk" = ( /turf/open/floor/glass/reinforced, /area/station/science/xenobiology) -"fvs" = ( -/obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/north, +"fvm" = ( +/obj/machinery/door/airlock/maintenance, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/disposalpipe/segment{ +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/mapping_helpers/airlock/unres{ dir = 4 }, -/turf/open/floor/plating/snowed/coldroom, -/area/station/service/kitchen/coldroom) +/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "fvx" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -17980,14 +18170,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/closed/wall/r_wall, /area/station/maintenance/aft/greater) -"fwf" = ( -/obj/machinery/door/airlock/maintenance, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/effect/mapping_helpers/airlock/access/all/service/general, -/turf/open/floor/plating, -/area/station/maintenance/starboard/lesser) "fwh" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -17998,6 +18180,13 @@ }, /turf/open/floor/iron, /area/station/security/brig/upper) +"fwi" = ( +/obj/effect/turf_decal/siding/wood/corner, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 8 + }, +/turf/open/floor/stone, +/area/station/service/bar/atrium) "fwm" = ( /obj/effect/turf_decal/plaque{ icon_state = "L14" @@ -18133,14 +18322,6 @@ /obj/structure/cable, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/ai) -"fyh" = ( -/obj/effect/turf_decal/tile/neutral/diagonal_edge, -/obj/machinery/airalarm/directional/east, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/light/directional/east, -/turf/open/floor/iron/kitchen/diagonal, -/area/station/service/kitchen) "fyr" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/command/glass{ @@ -18160,6 +18341,14 @@ /obj/machinery/telecomms/server/presets/service, /turf/open/floor/iron/dark/telecomms, /area/station/tcommsat/server) +"fyL" = ( +/obj/structure/table, +/obj/item/storage/medkit/regular, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/commons/fitness) "fyQ" = ( /obj/effect/turf_decal/stripes/line, /obj/machinery/meter, @@ -18173,6 +18362,18 @@ }, /turf/open/floor/iron/dark, /area/station/engineering/supermatter/room) +"fyT" = ( +/obj/structure/table, +/obj/machinery/cell_charger{ + pixel_y = 3 + }, +/obj/item/stock_parts/power_store/cell/high{ + pixel_y = 3 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/obj/machinery/airalarm/directional/north, +/turf/open/floor/iron/textured, +/area/mine/mechbay) "fyZ" = ( /obj/machinery/status_display/evac/directional/north, /turf/open/floor/iron, @@ -18316,6 +18517,15 @@ /obj/effect/turf_decal/tile/blue, /turf/open/floor/iron, /area/station/hallway/primary/fore) +"fBJ" = ( +/obj/structure/closet/secure_closet/hydroponics, +/obj/effect/turf_decal/tile/blue/opposingcorners, +/obj/effect/turf_decal/tile/green/opposingcorners{ + dir = 1 + }, +/obj/machinery/light/small/directional/east, +/turf/open/floor/iron, +/area/station/service/hydroponics) "fBM" = ( /obj/structure/chair{ dir = 4 @@ -18326,6 +18536,7 @@ /area/station/service/chapel) "fBN" = ( /obj/structure/marker_beacon/burgundy, +/obj/effect/mapping_helpers/no_atoms_ontop, /turf/open/misc/asteroid/snow/icemoon, /area/icemoon/surface/outdoors/nospawn) "fBQ" = ( @@ -18382,19 +18593,10 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/medical/medbay/lobby) -"fCS" = ( -/obj/machinery/door/poddoor/incinerator_ordmix, -/turf/open/floor/engine/vacuum, -/area/station/science/ordnance) "fCW" = ( /obj/structure/extinguisher_cabinet/directional/east, /turf/open/floor/iron/dark/textured, /area/station/security/processing) -"fCY" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/sink/directional/south, -/turf/open/floor/iron, -/area/station/hallway/secondary/service) "fDc" = ( /obj/structure/chair/office, /obj/effect/landmark/start/warden, @@ -18419,23 +18621,9 @@ /turf/open/floor/plating, /area/station/engineering/supermatter/room) "fDp" = ( -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/structure/table/reinforced, -/obj/machinery/computer/records/medical/laptop{ - dir = 8; - pixel_y = 1 - }, /obj/machinery/light/small/directional/east, -/turf/open/floor/iron/dark, -/area/station/medical/morgue) -"fDt" = ( -/obj/structure/table/wood, -/obj/effect/turf_decal/siding/wood{ - dir = 10 - }, -/obj/effect/turf_decal/tile/bar/opposingcorners, -/turf/open/floor/iron, -/area/station/service/bar) +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/explored/graveyard) "fDI" = ( /obj/structure/table/wood, /obj/machinery/computer/records/medical/laptop{ @@ -18453,6 +18641,15 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/service/janitor) +"fDM" = ( +/obj/machinery/camera/directional/east{ + c_tag = "Security Post - Engineering" + }, +/obj/structure/cable, +/obj/effect/turf_decal/tile/red, +/obj/machinery/computer/security/telescreen/engine/directional/east, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/engineering) "fDP" = ( /obj/structure/cable, /obj/item/radio/intercom/prison/directional/north, @@ -18472,17 +18669,6 @@ }, /turf/open/floor/iron, /area/station/maintenance/port/fore) -"fEj" = ( -/obj/machinery/door/airlock/maintenance, -/obj/effect/mapping_helpers/airlock/abandoned, -/obj/structure/cable, -/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, -/obj/effect/mapping_helpers/airlock/unres{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/plating, -/area/station/maintenance/department/crew_quarters/bar) "fEA" = ( /obj/structure/cable, /obj/machinery/door/airlock/maintenance{ @@ -18538,6 +18724,11 @@ }, /turf/open/floor/iron, /area/mine/laborcamp/security) +"fEY" = ( +/obj/item/stack/rods/two, +/obj/item/stack/sheet/iron, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "fEZ" = ( /obj/effect/spawner/structure/window, /turf/open/floor/plating, @@ -18622,6 +18813,13 @@ }, /turf/open/floor/iron/smooth, /area/station/security/holding_cell) +"fGr" = ( +/obj/structure/chair/sofa/bench{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/fore) "fGI" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, @@ -18825,16 +19023,6 @@ }, /turf/open/floor/engine/n2, /area/station/engineering/atmos) -"fKd" = ( -/obj/structure/window/reinforced/spawner/directional/west, -/obj/effect/turf_decal/siding/thinplating/dark{ - dir = 8 - }, -/obj/item/food/grown/pumpkin{ - pixel_y = 5 - }, -/turf/open/floor/grass, -/area/station/service/hydroponics) "fKe" = ( /obj/machinery/camera/directional/west{ c_tag = "Engineering West" @@ -18861,6 +19049,11 @@ /obj/machinery/iv_drip, /turf/open/floor/iron/white, /area/station/medical/medbay/central) +"fKk" = ( +/obj/item/kirbyplants/fern, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "fKr" = ( /obj/machinery/airalarm/directional/north, /obj/effect/turf_decal/tile/yellow/opposingcorners, @@ -18873,26 +19066,6 @@ /obj/structure/fluff/tram_rail, /turf/open/openspace/icemoon/keep_below, /area/icemoon/underground/explored) -"fKw" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/obj/effect/turf_decal/trimline/green/filled/corner{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/blue/corner{ - dir = 1 - }, -/obj/effect/landmark/start/botanist, -/turf/open/floor/iron, -/area/station/service/hydroponics) -"fKy" = ( -/obj/effect/turf_decal/trimline/green/filled/corner{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/blue/corner{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/station/service/hydroponics) "fKF" = ( /obj/effect/turf_decal/plaque{ icon_state = "L7" @@ -18932,7 +19105,7 @@ /turf/open/floor/iron/dark/textured_edge, /area/station/security/prison) "fLa" = ( -/obj/machinery/gibber, +/obj/effect/turf_decal/weather/snow/corner, /turf/open/floor/plating/snowed/coldroom, /area/station/service/kitchen/coldroom) "fLb" = ( @@ -18972,6 +19145,25 @@ /obj/machinery/newscaster/directional/east, /turf/open/floor/wood/large, /area/mine/eva/lower) +"fLG" = ( +/obj/structure/railing/corner/end/flip{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/duct, +/turf/open/floor/iron, +/area/station/service/hydroponics) +"fLH" = ( +/obj/machinery/computer/station_alert{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/computer/security/telescreen/ce/directional/west, +/turf/open/floor/iron/dark, +/area/station/command/heads_quarters/ce) "fLK" = ( /obj/structure/railing/corner{ dir = 8 @@ -19072,13 +19264,11 @@ /obj/effect/turf_decal/stripes/line, /turf/open/floor/plating, /area/station/maintenance/starboard/upper) -"fMP" = ( -/obj/effect/turf_decal/tile/neutral/diagonal_edge, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment, -/turf/open/floor/iron/kitchen/diagonal, -/area/station/service/kitchen) +"fMu" = ( +/obj/structure/table/wood, +/obj/effect/spawner/random/trash/crushed_can, +/turf/open/floor/plating, +/area/station/maintenance/starboard/lesser) "fNa" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/closet/emcloset, @@ -19123,6 +19313,12 @@ }, /turf/open/floor/iron/textured, /area/station/hallway/secondary/entry) +"fNz" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/spawner/random/structure/crate, +/obj/effect/spawner/random/maintenance/two, +/turf/open/floor/plating, +/area/station/maintenance/fore) "fNA" = ( /turf/open/openspace, /area/station/medical/medbay/central) @@ -19141,6 +19337,13 @@ /obj/structure/cable, /turf/open/floor/engine, /area/station/engineering/supermatter) +"fOg" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "fOl" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -19184,6 +19387,13 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/smooth_large, /area/station/cargo/warehouse) +"fPO" = ( +/obj/machinery/light/small/directional/north, +/obj/machinery/computer/security/telescreen/test_chamber/directional/north, +/turf/open/floor/iron/white/side{ + dir = 1 + }, +/area/station/command/heads_quarters/rd) "fPP" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -19219,17 +19429,37 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/ai_monitored/turret_protected/aisat/maint) +"fQa" = ( +/obj/structure/railing/wooden_fence{ + dir = 6 + }, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/explored) "fQc" = ( /obj/machinery/atmospherics/pipe/smart/simple/yellow/visible{ dir = 1 }, /turf/open/floor/iron, /area/station/engineering/atmos) +"fQi" = ( +/obj/structure/window/reinforced/spawner/directional/north, +/obj/structure/filingcabinet/filingcabinet, +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 1 + }, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/cargo/sorting) "fQk" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/chair/stool/directional/east, /turf/open/floor/iron, /area/station/maintenance/starboard/fore) +"fQs" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/freezer, +/area/station/service/kitchen/coldroom) "fQu" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -19252,6 +19482,12 @@ dir = 1 }, /area/station/security/prison) +"fQU" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/turf/open/floor/iron, +/area/station/engineering/engine_smes) "fRb" = ( /obj/machinery/door/airlock/maintenance, /obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, @@ -19275,32 +19511,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply, /turf/open/floor/iron/dark, /area/station/medical/virology) -"fRG" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/structure/disposalpipe/segment, -/turf/open/floor/plating, -/area/station/maintenance/starboard/lesser) -"fRJ" = ( -/obj/effect/turf_decal/siding/white{ - dir = 1 - }, -/obj/structure/table, -/obj/item/clothing/head/fedora, -/obj/machinery/airalarm/directional/north, -/turf/open/floor/iron/white/smooth_large, -/area/station/service/kitchen/diner) -"fRP" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment{ - dir = 5 - }, -/obj/machinery/camera/directional/south{ - c_tag = "Service - Electrical Maintenace Upper" - }, -/turf/open/floor/catwalk_floor/iron_smooth, -/area/station/maintenance/starboard/fore) "fSd" = ( /obj/structure/railing/corner{ dir = 4 @@ -19348,6 +19558,11 @@ }, /turf/open/floor/iron, /area/station/security/prison/mess) +"fTn" = ( +/obj/effect/spawner/random/structure/grille, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "fTo" = ( /obj/item/reagent_containers/condiment/saltshaker{ pixel_x = -3 @@ -19441,20 +19656,6 @@ /obj/structure/bed/medical/emergency, /turf/open/floor/iron/white/textured, /area/station/security/medical) -"fUn" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/rack, -/obj/item/pickaxe, -/obj/item/toy/figure/chef, -/obj/machinery/camera/directional/north{ - c_tag = "Service Kitchen - Cold Room" - }, -/turf/open/floor/plating/snowed/coldroom, -/area/station/service/kitchen/coldroom) "fUr" = ( /obj/machinery/airalarm/directional/south, /obj/structure/closet/emcloset, @@ -19490,6 +19691,11 @@ "fUR" = ( /turf/closed/wall, /area/station/hallway/secondary/entry) +"fVh" = ( +/obj/structure/table/wood, +/obj/effect/spawner/random/trash/food_packaging, +/turf/open/floor/wood/parquet, +/area/station/service/bar/atrium) "fVm" = ( /obj/machinery/door/airlock/maintenance{ name = "Chemical Storage" @@ -19508,6 +19714,16 @@ }, /turf/open/floor/iron/white, /area/station/medical/medbay/lobby) +"fVC" = ( +/obj/structure/table, +/obj/machinery/cell_charger, +/obj/item/stock_parts/power_store/cell/high, +/obj/machinery/ecto_sniffer{ + pixel_x = 6; + pixel_y = 6 + }, +/turf/open/floor/iron, +/area/station/science/robotics/lab) "fVD" = ( /obj/structure/disposalpipe/segment, /obj/machinery/door/airlock/engineering{ @@ -19564,6 +19780,20 @@ }, /turf/open/floor/wood, /area/station/security/prison/rec) +"fWd" = ( +/obj/machinery/door/airlock/maintenance{ + name = "Hydroponics Maintenance" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/duct, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/mapping_helpers/airlock/access/all/service/hydroponics, +/turf/open/floor/plating, +/area/station/service/hydroponics) "fWe" = ( /obj/machinery/hydroponics/soil, /obj/item/plant_analyzer, @@ -19600,6 +19830,16 @@ /obj/structure/railing/corner, /turf/open/misc/asteroid/snow/icemoon, /area/icemoon/underground/explored) +"fWE" = ( +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/plating, +/area/station/maintenance/starboard/lesser) "fWL" = ( /obj/structure/table, /obj/item/paper_bin{ @@ -19626,6 +19866,13 @@ /obj/structure/barricade/wooden/crude/snow, /turf/open/floor/wood, /area/station/maintenance/space_hut/cabin) +"fWW" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/chair/wood{ + dir = 1 + }, +/turf/open/floor/wood/parquet, +/area/station/service/bar/atrium) "fWX" = ( /obj/structure/cable/multilayer/multiz, /turf/open/floor/plating/snowed/icemoon, @@ -19665,6 +19912,11 @@ /obj/effect/turf_decal/tile/red/opposingcorners, /turf/open/floor/iron, /area/mine/laborcamp/security) +"fXF" = ( +/obj/structure/table/wood, +/obj/item/pai_card, +/turf/open/floor/wood/parquet, +/area/station/service/bar/atrium) "fXO" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 4 @@ -19681,35 +19933,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/mine/laborcamp) -"fYe" = ( -/obj/structure/closet/crate, -/obj/item/reagent_containers/cup/glass/waterbottle{ - pixel_x = 7; - pixel_y = 6 - }, -/obj/item/reagent_containers/cup/glass/waterbottle{ - pixel_x = 7; - pixel_y = 6 - }, -/obj/item/reagent_containers/cup/glass/waterbottle{ - pixel_x = 7; - pixel_y = 6 - }, -/obj/item/food/canned/beans, -/obj/item/food/canned/beans, -/obj/item/food/canned/beans, -/obj/effect/decal/cleanable/dirt, -/mob/living/basic/mouse/white, -/turf/open/floor/iron, -/area/station/maintenance/starboard/fore) -"fYh" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/turf_decal/tile/bar/opposingcorners, -/turf/open/floor/iron, -/area/station/service/bar) "fYi" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -19747,6 +19970,13 @@ }, /turf/open/floor/iron/large, /area/station/hallway/secondary/entry) +"fYX" = ( +/obj/structure/chair/stool/directional/north, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/commons/fitness) "fZb" = ( /obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ cycle_id = "miner-passthrough" @@ -19766,19 +19996,15 @@ }, /turf/open/floor/plating, /area/station/command/teleporter) -"fZo" = ( -/obj/structure/railing/corner{ - dir = 4 - }, -/obj/machinery/door/firedoor/border_only{ - dir = 1 - }, -/turf/open/floor/wood/parquet, -/area/station/service/bar/atrium) "fZq" = ( /obj/structure/curtain/cloth, /turf/open/floor/iron/showroomfloor, /area/station/security/prison/toilet) +"fZO" = ( +/obj/effect/spawner/random/vending/snackvend, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) "fZT" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 4 @@ -19937,6 +20163,11 @@ /obj/structure/sign/warning/secure_area/directional/west, /turf/open/floor/plating/snowed/smoothed/icemoon, /area/icemoon/underground/explored) +"gbC" = ( +/obj/machinery/vending/dinnerware, +/obj/effect/turf_decal/siding/white, +/turf/open/floor/iron/white/smooth_large, +/area/station/service/kitchen) "gbJ" = ( /obj/machinery/door/airlock/security/glass{ name = "Armory" @@ -19961,6 +20192,10 @@ /obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance/departmental, /turf/open/floor/plating, /area/station/maintenance/aft/lesser) +"gbM" = ( +/obj/effect/spawner/structure/window/hollow/reinforced/middle, +/turf/open/floor/plating, +/area/station/maintenance/fore) "gbP" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 1 @@ -19968,14 +20203,17 @@ /obj/structure/cable, /turf/open/floor/iron/white, /area/station/medical/storage) -"gca" = ( +"gcf" = ( /obj/structure/table, -/obj/machinery/cell_charger, -/obj/effect/turf_decal/tile/blue/half/contrasted{ - dir = 1 +/obj/item/storage/bag/tray, +/obj/item/knife/kitchen{ + pixel_y = 2 }, -/turf/open/floor/iron/white, -/area/station/medical/medbay/lobby) +/obj/effect/turf_decal/siding/white{ + dir = 10 + }, +/turf/open/floor/iron/white/smooth_large, +/area/station/service/kitchen) "gck" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -19986,26 +20224,18 @@ /obj/effect/mapping_helpers/airlock/access/all/security/general, /turf/open/floor/plating, /area/station/security/processing) -"gcm" = ( -/obj/structure/flora/bush/flowers_yw/style_random, -/obj/machinery/light/small/directional/east, -/turf/open/floor/grass, -/area/station/service/hydroponics) "gcu" = ( /obj/effect/mapping_helpers/burnt_floor, /obj/structure/cable, /obj/machinery/power/apc/auto_name/directional/south, /turf/open/floor/plating, /area/station/maintenance/port/lesser) -"gcy" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 +"gcB" = ( +/obj/item/pickaxe/improvised{ + pixel_x = 7 }, -/obj/machinery/door/firedoor/heavy, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/dark, -/area/station/science/ordnance) +/turf/open/misc/asteroid/snow/coldroom, +/area/icemoon/underground/explored) "gcV" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ dir = 8 @@ -20058,6 +20288,13 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central/fore) +"gdK" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "gdN" = ( /obj/structure/railing/corner{ dir = 1 @@ -20067,6 +20304,13 @@ }, /turf/open/floor/iron, /area/station/cargo/storage) +"gdO" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/machinery/vending/cigarette, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) "gdP" = ( /obj/structure/cable, /turf/open/floor/plating, @@ -20185,18 +20429,6 @@ /obj/structure/light_construct/directional/south, /turf/open/floor/plating, /area/station/maintenance/port/aft) -"gfE" = ( -/obj/machinery/light/small/directional/west, -/obj/structure/chair/stool/directional/south, -/obj/effect/turf_decal/stripes/line{ - dir = 9 - }, -/obj/machinery/atmospherics/components/binary/pump/on/general/visible/layer4{ - dir = 8; - name = "Air Out" - }, -/turf/open/floor/plating, -/area/station/maintenance/fore) "gfF" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -20237,13 +20469,6 @@ /obj/machinery/shower/directional/north, /turf/open/floor/iron/smooth, /area/mine/eva) -"ggD" = ( -/obj/structure/chair{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red/full, -/turf/open/floor/iron/large, -/area/station/service/kitchen/diner) "ggG" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, @@ -20288,6 +20513,12 @@ /obj/structure/closet/crate, /turf/open/floor/plating, /area/station/maintenance/department/medical/central) +"ghA" = ( +/obj/structure/railing/wooden_fence{ + dir = 5 + }, +/turf/open/misc/hay/icemoon, +/area/icemoon/underground/explored) "ghE" = ( /obj/structure/disposalpipe/segment, /obj/machinery/camera/directional/west{ @@ -20318,6 +20549,18 @@ /obj/effect/turf_decal/tile/brown/half/contrasted, /turf/open/floor/iron/dark/side, /area/mine/eva) +"ghT" = ( +/obj/machinery/newscaster/directional/north, +/obj/structure/table/wood, +/obj/machinery/light/small/directional/north, +/obj/item/toy/figure/mime{ + pixel_x = -6 + }, +/obj/item/toy/figure/clown{ + pixel_x = 4 + }, +/turf/open/floor/iron/grimy, +/area/station/service/theater) "ghY" = ( /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/aisat/atmos) @@ -20329,14 +20572,15 @@ /obj/structure/sign/warning/directional/north, /turf/open/floor/plating, /area/station/maintenance/port/lesser) -"giD" = ( -/obj/machinery/hydroponics/constructable, -/obj/effect/turf_decal/siding/wideplating/dark{ - dir = 1 +"giH" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners, +/obj/machinery/barsign/all_access/directional/north, +/obj/effect/turf_decal/siding/wood, +/obj/structure/disposalpipe/segment{ + dir = 4 }, -/obj/item/seeds/watermelon, -/turf/open/floor/grass, -/area/station/maintenance/starboard/fore) +/turf/open/floor/iron, +/area/station/service/bar) "giN" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/turf_decal/trimline/yellow/line, @@ -20442,6 +20686,13 @@ /obj/machinery/newscaster/directional/east, /turf/open/floor/wood, /area/station/security/courtroom) +"gjT" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/duct, +/turf/open/floor/iron/freezer, +/area/station/commons/toilet) "gjW" = ( /obj/structure/chair, /turf/open/floor/iron/cafeteria, @@ -20478,6 +20729,12 @@ /obj/effect/spawner/random/engineering/tracking_beacon, /turf/open/floor/iron, /area/station/science/robotics/mechbay) +"gkH" = ( +/obj/structure/table/wood, +/obj/effect/spawner/random/entertainment/cigarette, +/obj/effect/spawner/random/entertainment/lighter, +/turf/open/floor/wood/parquet, +/area/station/service/bar/atrium) "gkK" = ( /obj/machinery/atmospherics/pipe/multiz/supply/visible/layer4{ color = "#0000ff"; @@ -20594,11 +20851,6 @@ }, /turf/open/floor/iron/dark, /area/station/ai_monitored/command/storage/eva) -"glQ" = ( -/obj/machinery/door/firedoor, -/obj/machinery/smartfridge, -/turf/open/floor/iron, -/area/station/service/hydroponics) "glS" = ( /obj/machinery/camera/directional/south{ c_tag = "MiniSat Pod Access"; @@ -20635,18 +20887,11 @@ /obj/structure/extinguisher_cabinet/directional/south, /turf/open/floor/iron/white, /area/station/medical/virology) -"gmB" = ( -/obj/structure/stairs/south{ - dir = 1 - }, -/obj/structure/railing{ - dir = 8 - }, -/obj/effect/turf_decal/siding/white{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/station/service/hydroponics) +"gmt" = ( +/obj/structure/extinguisher_cabinet/directional/north, +/obj/machinery/food_cart, +/turf/open/floor/iron/freezer, +/area/station/service/kitchen/coldroom) "gmJ" = ( /obj/machinery/atmospherics/components/binary/pump{ name = "Port to Infiltrate/Filter" @@ -20719,6 +20964,10 @@ /obj/machinery/atmospherics/pipe/smart/manifold/yellow/visible, /turf/open/floor/iron, /area/station/engineering/atmos) +"gnE" = ( +/obj/machinery/hydroponics/constructable, +/turf/open/floor/grass, +/area/station/service/hydroponics) "gnL" = ( /obj/structure/closet/bombcloset/security, /turf/open/floor/iron/smooth, @@ -20733,7 +20982,7 @@ /area/station/command/meeting_room) "gnR" = ( /obj/structure/toilet/greyscale{ - cistern = 1; + cistern_open = 1; dir = 1 }, /obj/machinery/light/small/directional/south, @@ -20741,6 +20990,7 @@ /area/station/security/prison/toilet) "gnZ" = ( /obj/structure/marker_beacon/burgundy, +/obj/effect/mapping_helpers/no_atoms_ontop, /turf/open/floor/plating/snowed/smoothed/icemoon, /area/icemoon/surface/outdoors/nospawn) "gob" = ( @@ -20749,9 +20999,8 @@ /turf/open/floor/plating, /area/station/maintenance/port/aft) "goc" = ( -/obj/structure/window/reinforced/spawner/directional/west, -/obj/effect/turf_decal/tile/neutral/fourcorners, /obj/effect/decal/cleanable/dirt, +/obj/machinery/smartfridge/organ, /turf/open/floor/iron/dark, /area/station/medical/morgue) "goq" = ( @@ -20908,6 +21157,21 @@ }, /turf/open/floor/iron/textured, /area/station/security/brig) +"grg" = ( +/obj/item/toy/snowball{ + pixel_x = 6; + pixel_y = 5 + }, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/explored) +"gri" = ( +/obj/structure/window/reinforced/spawner/directional/north, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "riot"; + name = "Security Shutters" + }, +/turf/open/floor/glass/reinforced, +/area/station/hallway/primary/fore) "grk" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 1 @@ -20968,6 +21232,16 @@ }, /turf/open/floor/iron, /area/station/cargo/lobby) +"grO" = ( +/obj/effect/turf_decal/trimline/green/filled/corner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/blue/corner{ + dir = 8 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics) "grT" = ( /obj/effect/turf_decal/trimline/blue/filled/warning{ dir = 1 @@ -20994,14 +21268,6 @@ "gst" = ( /turf/closed/wall, /area/station/commons/vacant_room/commissary) -"gsD" = ( -/obj/effect/turf_decal/siding/white{ - dir = 1 - }, -/obj/item/radio/intercom/directional/north, -/obj/item/kirbyplants/random, -/turf/open/floor/iron/white/smooth_large, -/area/station/service/kitchen/diner) "gsF" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 1 @@ -21035,18 +21301,6 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron/white, /area/station/medical/medbay/aft) -"gsW" = ( -/obj/effect/mapping_helpers/airlock/access/all/service/kitchen, -/obj/machinery/door/airlock/freezer{ - desc = "The freezer where the chef keeps all the stuff that needs to be kept cold. Ice cold."; - name = "The Ice Box" - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment, -/turf/open/floor/plating, -/area/station/service/kitchen/coldroom) "gta" = ( /obj/effect/turf_decal/tile/neutral/fourcorners, /obj/structure/table, @@ -21054,16 +21308,6 @@ /obj/item/pen, /turf/open/floor/iron, /area/station/commons/locker) -"gtc" = ( -/obj/effect/turf_decal/siding/white{ - dir = 1 - }, -/obj/machinery/duct, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/white/smooth_large, -/area/station/service/kitchen/diner) "gtg" = ( /obj/machinery/atmospherics/pipe/smart/simple/dark/visible/layer1{ dir = 8 @@ -21073,11 +21317,6 @@ "gti" = ( /turf/open/openspace, /area/station/maintenance/starboard/aft) -"gtj" = ( -/obj/structure/closet, -/obj/effect/spawner/random/maintenance/three, -/turf/open/floor/plating, -/area/station/maintenance/starboard/lesser) "gtw" = ( /obj/effect/turf_decal/tile/neutral/diagonal_edge, /turf/open/floor/iron/kitchen/diagonal, @@ -21094,6 +21333,17 @@ /obj/effect/spawner/random/vending/colavend, /turf/open/floor/iron, /area/station/commons/locker) +"gua" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/obj/machinery/duct, +/turf/open/floor/iron, +/area/station/service/bar) "guS" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -21151,6 +21401,10 @@ /obj/structure/window/reinforced/spawner/directional/south, /turf/open/floor/iron, /area/station/science/xenobiology) +"gwb" = ( +/obj/machinery/airalarm/directional/east, +/turf/open/floor/plating, +/area/station/maintenance/starboard/lesser) "gwm" = ( /obj/machinery/door/firedoor/heavy, /turf/open/floor/iron/white/side{ @@ -21236,6 +21490,10 @@ /obj/item/radio/intercom/prison/directional/south, /turf/open/floor/iron/dark, /area/station/security/prison/rec) +"gxz" = ( +/obj/structure/closet/secure_closet/freezer/meat, +/turf/open/misc/asteroid/snow/coldroom, +/area/station/service/kitchen/coldroom) "gxO" = ( /obj/structure/table/reinforced, /obj/item/hand_labeler{ @@ -21268,6 +21526,22 @@ /obj/machinery/light/small/directional/west, /turf/open/floor/plating/snowed/smoothed/icemoon, /area/mine/eva) +"gxT" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/public/glass{ + name = "Fitness" + }, +/obj/structure/cable, +/obj/machinery/duct, +/obj/effect/turf_decal/stripes/white/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/white/line{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark/textured, +/area/station/commons/fitness) "gxU" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -21275,19 +21549,6 @@ /obj/effect/turf_decal/tile/blue, /turf/open/floor/iron, /area/station/command/bridge) -"gxY" = ( -/obj/structure/disposalpipe/segment{ - dir = 5 - }, -/obj/structure/cable, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) -"gxZ" = ( -/obj/structure/sign/painting/library{ - pixel_y = 32 - }, -/turf/open/floor/iron, -/area/station/hallway/secondary/service) "gya" = ( /obj/structure/table/wood, /obj/item/storage/medkit/regular, @@ -21302,24 +21563,6 @@ }, /turf/open/floor/iron/dark, /area/station/service/chapel) -"gyr" = ( -/obj/effect/turf_decal/siding/white{ - dir = 4 - }, -/obj/structure/chair/stool/bar/directional/east, -/obj/effect/turf_decal/tile/red/full, -/turf/open/floor/iron/large, -/area/station/service/kitchen/diner) -"gyw" = ( -/obj/machinery/door/window/right/directional/west{ - name = "Apiary"; - req_access = list("hydroponics") - }, -/obj/effect/turf_decal/siding/thinplating/dark{ - dir = 8 - }, -/turf/open/floor/grass, -/area/station/service/hydroponics) "gyH" = ( /obj/machinery/light/directional/north, /obj/machinery/vending/coffee, @@ -21327,6 +21570,14 @@ /obj/machinery/newscaster/directional/north, /turf/open/floor/iron/dark, /area/station/hallway/secondary/entry) +"gyP" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/landmark/event_spawn, +/obj/machinery/holopad, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/wood/parquet, +/area/station/service/bar/backroom) "gyR" = ( /turf/closed/wall/r_wall, /area/station/engineering/main) @@ -21335,9 +21586,6 @@ /obj/effect/turf_decal/tile/green/full, /turf/open/floor/iron/dark/smooth_large, /area/station/medical/virology) -"gzw" = ( -/turf/open/openspace, -/area/station/hallway/secondary/service) "gzz" = ( /obj/machinery/computer/security/telescreen/entertainment/directional/west, /obj/machinery/computer/monitor{ @@ -21391,9 +21639,23 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/security/prison/visit) -"gAy" = ( +"gAw" = ( +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 5 + }, +/obj/effect/turf_decal/trimline/green/filled/corner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/blue/filled/warning/corner{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/obj/structure/cable, +/obj/machinery/duct, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/service/hydroponics) "gAB" = ( @@ -21408,31 +21670,10 @@ }, /turf/open/floor/iron/grimy, /area/station/service/chapel/office) -"gAM" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/machinery/door/airlock/engineering{ - name = "Utilities Room" - }, -/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, -/obj/effect/mapping_helpers/airlock/unres, -/turf/open/floor/plating, -/area/station/maintenance/starboard/lesser) -"gAN" = ( -/obj/structure/reagent_dispensers/watertank/high, -/obj/effect/turf_decal/stripes/line, -/obj/item/reagent_containers/cup/watering_can, -/obj/effect/turf_decal/tile/blue/half{ - dir = 4 - }, -/obj/effect/turf_decal/tile/green/half{ - dir = 8 - }, -/turf/open/floor/iron/half{ - dir = 1 - }, -/area/station/service/hydroponics) +"gAG" = ( +/obj/machinery/modular_computer/preset/civilian, +/turf/open/floor/iron, +/area/station/maintenance/starboard/fore) "gAR" = ( /obj/structure/falsewall, /turf/open/floor/plating, @@ -21468,13 +21709,10 @@ /obj/structure/sign/warning/electric_shock, /turf/closed/wall/r_wall, /area/icemoon/underground/explored) -"gBq" = ( -/obj/machinery/door/firedoor, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/starboard) +"gBs" = ( +/obj/structure/falsewall, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "gBv" = ( /obj/machinery/door/window/left/directional/south{ name = "Engineering Delivery"; @@ -21492,6 +21730,12 @@ }, /turf/open/floor/iron, /area/station/engineering/atmos) +"gBF" = ( +/obj/machinery/atmospherics/components/binary/dp_vent_pump/high_volume/incinerator_ordmix{ + dir = 8 + }, +/turf/open/floor/engine, +/area/station/science/ordnance/burnchamber) "gBI" = ( /obj/machinery/light/small/directional/south, /turf/open/floor/plating, @@ -21550,9 +21794,8 @@ /turf/open/floor/plating, /area/station/maintenance/aft/greater) "gCG" = ( -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/structure/table/optable, -/obj/machinery/newscaster/directional/north, +/obj/structure/sign/warning/cold_temp/directional/north, +/obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/dark, /area/station/medical/morgue) "gCK" = ( @@ -21585,6 +21828,13 @@ /obj/structure/cable, /turf/open/floor/wood, /area/station/security/courtroom) +"gDh" = ( +/obj/structure/flora/grass/brown/style_random, +/obj/structure/sign/nanotrasen{ + pixel_y = -32 + }, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/surface/outdoors/nospawn) "gDp" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -21608,6 +21858,22 @@ /obj/effect/mapping_helpers/burnt_floor, /turf/open/floor/plating, /area/station/maintenance/fore) +"gDB" = ( +/obj/machinery/oven/range, +/obj/effect/turf_decal/siding/white/corner, +/obj/machinery/light/directional/north, +/turf/open/floor/iron/white/smooth_large, +/area/station/service/kitchen) +"gDL" = ( +/obj/structure/chair/wood{ + dir = 4 + }, +/obj/item/toy/plush/moth{ + name = "Theseus" + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "gDN" = ( /obj/effect/turf_decal/tile/brown/half/contrasted{ dir = 1 @@ -21626,6 +21892,15 @@ /obj/effect/turf_decal/tile/yellow, /turf/open/floor/iron, /area/station/hallway/primary/aft) +"gDY" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/structure/railing{ + dir = 8 + }, +/turf/open/floor/stone, +/area/station/service/bar/atrium) "gDZ" = ( /turf/open/floor/wood, /area/station/maintenance/port/fore) @@ -21652,21 +21927,25 @@ }, /turf/open/misc/asteroid/snow/icemoon, /area/icemoon/surface/outdoors/nospawn) +"gEe" = ( +/obj/structure/table, +/obj/item/binoculars, +/obj/machinery/computer/security/telescreen/ordnance/directional/north, +/turf/open/floor/iron, +/area/station/science/ordnance/testlab) +"gEl" = ( +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "gEn" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/science/server) -"gEo" = ( -/obj/structure/table, -/obj/item/stock_parts/cell/high, -/obj/machinery/cell_charger{ - pixel_y = 5 - }, -/turf/open/floor/iron/white/corner{ - dir = 4 - }, -/area/station/science/explab) "gEq" = ( /obj/structure/chair/office{ dir = 4 @@ -21685,28 +21964,14 @@ /obj/effect/mapping_helpers/airlock/access/any/engineering/general, /turf/open/floor/plating, /area/station/engineering/storage_shared) -"gEz" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/space_heater, +"gEt" = ( +/obj/machinery/power/apc/auto_name/directional/east, +/obj/structure/cable, /turf/open/floor/plating, -/area/station/maintenance/department/crew_quarters/bar) +/area/station/maintenance/starboard/lesser) "gEE" = ( /turf/open/openspace, /area/station/service/chapel) -"gEL" = ( -/obj/structure/table/glass, -/obj/effect/turf_decal/trimline/green/filled/line{ - dir = 6 - }, -/obj/effect/turf_decal/trimline/blue/filled/warning{ - dir = 6 - }, -/obj/machinery/camera/directional/east{ - c_tag = "Service Botany - Upper North" - }, -/obj/item/hand_labeler, -/turf/open/floor/iron, -/area/station/service/hydroponics) "gER" = ( /turf/open/floor/iron, /area/station/command/bridge) @@ -21726,11 +21991,17 @@ /turf/open/floor/iron/cafeteria, /area/station/hallway/secondary/exit/departure_lounge) "gEX" = ( -/obj/effect/decal/cleanable/blood/old, /obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/light/small/dim/directional/east, /turf/open/floor/iron/dark, /area/station/medical/morgue) +"gEZ" = ( +/obj/structure/railing, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "gFj" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 4 @@ -21738,6 +22009,10 @@ /obj/structure/cable, /turf/open/floor/carpet, /area/station/security/detectives_office) +"gFt" = ( +/obj/effect/spawner/random/engineering/canister, +/turf/open/floor/plating, +/area/station/maintenance/starboard/lesser) "gFx" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/sign/warning/gas_mask, @@ -21766,6 +22041,13 @@ /obj/item/clothing/glasses/meson, /turf/open/floor/engine, /area/station/engineering/supermatter/room) +"gFW" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/machinery/computer/security/telescreen/entertainment/directional/north, +/turf/open/floor/wood/large, +/area/station/service/bar) "gFX" = ( /turf/closed/wall, /area/icemoon/underground/explored) @@ -21853,6 +22135,14 @@ }, /turf/open/floor/iron/white, /area/station/medical/chemistry) +"gGS" = ( +/obj/structure/railing, +/obj/effect/turf_decal/siding/white, +/obj/structure/curtain/cloth/fancy/mechanical/start_closed{ + id = "cantena_curtains" + }, +/turf/open/floor/wood, +/area/station/commons/lounge) "gGZ" = ( /obj/machinery/computer/bank_machine, /obj/effect/turf_decal/bot_white, @@ -21882,14 +22172,6 @@ /obj/effect/turf_decal/tile/yellow/anticorner/contrasted, /turf/open/floor/iron, /area/station/engineering/atmos) -"gHm" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/disposalpipe/segment, -/obj/effect/spawner/random/structure/steam_vent, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) "gHq" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -21920,6 +22202,9 @@ /obj/effect/turf_decal/trimline/red/line, /turf/open/floor/iron/dark/textured, /area/station/security/range) +"gHL" = ( +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/maintenance/starboard/fore) "gHN" = ( /obj/effect/turf_decal/trimline/green/filled/corner{ dir = 1 @@ -21934,27 +22219,41 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/maintenance/department/medical/morgue) -"gHR" = ( -/obj/effect/turf_decal/siding/white{ - dir = 1 - }, -/obj/structure/table, -/obj/effect/spawner/random/food_or_drink/donkpockets{ - pixel_y = 8 - }, -/obj/structure/sign/poster/random/directional/north, -/turf/open/floor/iron/white/smooth_large, -/area/station/service/kitchen/diner) "gHS" = ( /obj/structure/chair/stool/directional/north, /obj/effect/turf_decal/tile/neutral/half/contrasted, /turf/open/floor/iron/dark, /area/station/commons/storage/primary) +"gHW" = ( +/obj/machinery/door/airlock/research/glass/incinerator/ordmix_interior{ + name = "Burn Chamber Interior Airlock" + }, +/obj/effect/mapping_helpers/airlock/locked, +/obj/machinery/airlock_controller/incinerator_ordmix{ + pixel_x = 24 + }, +/obj/effect/mapping_helpers/airlock/access/all/science/ordnance, +/turf/open/floor/engine, +/area/station/science/ordnance/burnchamber) "gHY" = ( /obj/effect/landmark/start/scientist, /obj/structure/chair/stool/directional/west, /turf/open/floor/iron/checker, /area/station/science/lab) +"gIf" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/public/glass{ + name = "Central Access" + }, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/stripes/white/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/white/line{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured, +/area/station/hallway/primary/starboard) "gIl" = ( /obj/structure/fence/corner{ dir = 6 @@ -21995,6 +22294,34 @@ "gIY" = ( /turf/closed/wall, /area/station/medical/medbay/central) +"gJi" = ( +/obj/structure/table, +/obj/item/assembly/prox_sensor{ + pixel_x = -8; + pixel_y = 4 + }, +/obj/item/assembly/prox_sensor{ + pixel_x = -8; + pixel_y = 4 + }, +/obj/item/assembly/prox_sensor{ + pixel_x = -8; + pixel_y = 4 + }, +/obj/item/assembly/prox_sensor{ + pixel_x = -8; + pixel_y = 4 + }, +/obj/item/stock_parts/power_store/cell/high, +/obj/item/stock_parts/power_store/cell/high, +/obj/item/crowbar, +/obj/item/radio/headset/headset_sci{ + pixel_x = -3 + }, +/obj/machinery/newscaster/directional/east, +/obj/machinery/light/directional/east, +/turf/open/floor/iron, +/area/station/science/robotics/lab) "gJs" = ( /obj/machinery/portable_atmospherics/canister, /obj/structure/disposalpipe/segment, @@ -22083,10 +22410,6 @@ /obj/structure/extinguisher_cabinet/directional/south, /turf/open/floor/iron, /area/station/hallway/primary/central) -"gLo" = ( -/obj/structure/disposalpipe/segment, -/turf/open/floor/wood/tile, -/area/station/service/theater) "gLu" = ( /obj/effect/turf_decal/delivery, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -22120,10 +22443,17 @@ /obj/item/flashlight/lamp, /turf/open/floor/wood, /area/station/maintenance/port/fore) -"gMp" = ( -/obj/structure/window/reinforced/spawner/directional/north, -/turf/open/floor/iron/dark, -/area/station/commons/fitness) +"gMi" = ( +/obj/structure/table, +/obj/item/paper_bin, +/obj/item/pen{ + pixel_x = -5 + }, +/obj/item/hand_labeler{ + pixel_y = -3 + }, +/turf/open/floor/wood, +/area/station/hallway/secondary/service) "gMt" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/decal/cleanable/dirt/dust, @@ -22142,6 +22472,17 @@ /obj/machinery/light/small/directional/west, /turf/open/floor/iron/smooth, /area/mine/eva) +"gMx" = ( +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/stripes/white/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/white/line{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured, +/area/station/hallway/primary/central) "gMK" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -22185,6 +22526,13 @@ }, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) +"gNc" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/service/bar) "gNg" = ( /obj/machinery/camera/directional/north{ c_tag = "MiniSat External South"; @@ -22210,6 +22558,21 @@ /obj/item/reagent_containers/dropper, /turf/open/floor/iron/cafeteria, /area/station/science/lab) +"gNu" = ( +/obj/effect/spawner/structure/window/hollow/reinforced/middle{ + dir = 4 + }, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 8; + id = "botany_chasm_and_wolf_shutters" + }, +/turf/open/floor/plating, +/area/station/service/hydroponics) +"gNw" = ( +/obj/structure/flora/bush/grassy/style_random, +/obj/structure/flora/bush/flowers_br/style_random, +/turf/open/floor/grass, +/area/station/service/hydroponics) "gNH" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 8 @@ -22247,6 +22610,15 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/command/heads_quarters/cmo) +"gOd" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/turf/open/floor/catwalk_floor/iron_smooth, +/area/station/maintenance/starboard/lesser) "gOg" = ( /obj/machinery/light/small/directional/west, /obj/machinery/camera/directional/west{ @@ -22343,6 +22715,13 @@ /obj/machinery/door/firedoor, /turf/open/floor/iron, /area/station/ai_monitored/security/armory/upper) +"gPo" = ( +/obj/effect/spawner/random/structure/chair_flipped{ + dir = 8 + }, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "gPp" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 1 @@ -22350,6 +22729,11 @@ /obj/machinery/light_switch/directional/south, /turf/open/floor/iron/showroomfloor, /area/station/security/warden) +"gPB" = ( +/obj/structure/table/wood/poker, +/obj/effect/spawner/random/food_or_drink/refreshing_beverage, +/turf/open/floor/wood/large, +/area/station/commons/lounge) "gPE" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -22382,17 +22766,6 @@ }, /turf/open/floor/plating/snowed/smoothed/icemoon, /area/icemoon/underground/explored) -"gQj" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 6 - }, -/obj/machinery/disposal/bin, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/trunk{ - dir = 1 - }, -/turf/open/floor/stone, -/area/station/service/bar) "gQp" = ( /obj/machinery/door/airlock/external{ name = "External Access" @@ -22448,19 +22821,6 @@ /obj/effect/mapping_helpers/airlock/access/all/service/chapel_office, /turf/open/floor/iron/dark, /area/station/service/chapel/office) -"gQZ" = ( -/obj/machinery/light/directional/north, -/turf/open/floor/iron, -/area/station/hallway/primary/central) -"gRl" = ( -/obj/effect/landmark/start/hangover, -/obj/structure/chair/wood{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/light/small/directional/north, -/turf/open/floor/wood/parquet, -/area/station/commons/lounge) "gRm" = ( /obj/structure/grille/broken, /obj/effect/decal/cleanable/dirt, @@ -22489,11 +22849,30 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/port) +"gRE" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/spawner/directional/south, +/obj/structure/window/reinforced/spawner/directional/east, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 8; + id = "botany_chasm_and_wolf_shutters" + }, +/turf/open/floor/plating, +/area/station/service/hydroponics) "gRI" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/visible, /turf/open/floor/iron, /area/station/maintenance/disposal/incinerator) +"gRL" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/spawner/random/structure/steam_vent, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "gRZ" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 4 @@ -22554,6 +22933,30 @@ /obj/effect/turf_decal/tile/brown/half/contrasted, /turf/open/floor/iron/dark/side, /area/mine/eva/lower) +"gSQ" = ( +/obj/structure/table, +/obj/item/crowbar/red, +/obj/item/stock_parts/power_store/cell/high{ + pixel_x = 6; + pixel_y = -3 + }, +/obj/structure/sign/poster/random/directional/west, +/obj/effect/turf_decal/tile/yellow/anticorner/contrasted{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/aft) +"gSU" = ( +/obj/item/popsicle_stick{ + pixel_y = 1; + pixel_x = -9 + }, +/obj/item/popsicle_stick{ + pixel_y = 3; + pixel_x = -2 + }, +/turf/open/misc/asteroid/snow/coldroom, +/area/icemoon/underground/explored) "gSV" = ( /obj/machinery/light/directional/south, /obj/structure/bodycontainer/morgue{ @@ -22587,7 +22990,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 1 }, -/obj/effect/mapping_helpers/airlock/access/all/medical/chemistry, +/obj/effect/mapping_helpers/airlock/access/all/medical/general, /obj/effect/turf_decal/tile/yellow/full, /turf/open/floor/iron/large, /area/station/medical/treatment_center) @@ -22642,21 +23045,18 @@ dir = 1 }, /area/station/security/processing) +"gUw" = ( +/obj/machinery/light/small/directional/south, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/duct, +/turf/open/floor/iron/freezer, +/area/station/commons/toilet) "gUx" = ( /obj/effect/turf_decal/bot, /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/mine/laborcamp) -"gUB" = ( -/obj/structure/chair/stool/directional/south, -/turf/open/floor/wood/parquet, -/area/station/commons/lounge) -"gUF" = ( -/obj/effect/turf_decal/siding/thinplating/corner{ - dir = 4 - }, -/turf/open/misc/asteroid/snow/icemoon, -/area/icemoon/underground/explored) "gUQ" = ( /obj/structure/fence/door{ dir = 4 @@ -22670,6 +23070,15 @@ /obj/structure/sign/poster/contraband/random/directional/east, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) +"gUX" = ( +/obj/effect/turf_decal/trimline/purple/filled/warning{ + dir = 8 + }, +/obj/machinery/computer/security/telescreen/test_chamber/directional/east{ + name = "Xenobio Monitor" + }, +/turf/open/floor/iron/white, +/area/station/science/xenobiology) "gUY" = ( /obj/machinery/power/apc/auto_name/directional/north, /obj/structure/cable, @@ -22681,6 +23090,10 @@ /obj/item/radio/intercom/directional/east, /turf/open/floor/iron/dark, /area/station/science/breakroom) +"gVh" = ( +/obj/structure/chair/stool/directional/north, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) "gVm" = ( /obj/item/coin/silver{ pixel_x = -5; @@ -22693,12 +23106,12 @@ }, /turf/open/floor/plating, /area/station/commons/dorms/laundry) -"gVn" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/hallway/secondary/service) +"gVs" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/spawner/random/trash/hobo_squat, +/obj/structure/sign/poster/contraband/random/directional/west, +/turf/open/floor/plating, +/area/station/maintenance/starboard/lesser) "gVt" = ( /obj/item/radio/intercom/directional/west, /obj/effect/turf_decal/tile/red{ @@ -22759,6 +23172,13 @@ /obj/machinery/firealarm/directional/north, /turf/open/floor/iron/dark, /area/station/security/courtroom) +"gVX" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 5 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/stone, +/area/station/service/bar/atrium) "gWf" = ( /obj/item/storage/box/lights/mixed, /obj/structure/table, @@ -22767,6 +23187,28 @@ /obj/machinery/airalarm/directional/north, /turf/open/floor/iron/dark, /area/station/maintenance/department/medical/morgue) +"gWl" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 10 + }, +/obj/effect/turf_decal/trimline/blue/filled/warning{ + dir = 10 + }, +/obj/structure/table/glass, +/obj/machinery/reagentgrinder{ + pixel_y = 8; + pixel_x = 6 + }, +/obj/item/storage/box/syringes{ + pixel_y = 8; + pixel_x = -5 + }, +/obj/item/storage/box/beakers{ + pixel_y = 5; + pixel_x = -9 + }, +/turf/open/floor/iron, +/area/station/service/hydroponics) "gWr" = ( /obj/structure/tank_dispenser, /turf/open/floor/iron/dark, @@ -22783,13 +23225,6 @@ /obj/structure/cable, /turf/open/floor/iron/dark, /area/station/security/interrogation) -"gXe" = ( -/obj/effect/turf_decal/siding/white{ - dir = 4 - }, -/obj/structure/disposalpipe/segment, -/turf/open/floor/iron/dark, -/area/station/service/hydroponics) "gXh" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -22875,6 +23310,14 @@ /obj/effect/spawner/structure/window/hollow/reinforced, /turf/open/floor/plating, /area/mine/living_quarters) +"gYk" = ( +/obj/machinery/computer/security/telescreen/entertainment/directional/east, +/obj/machinery/status_display/evac/directional/south, +/obj/structure/chair/sofa/left/brown{ + dir = 8 + }, +/turf/open/floor/wood/large, +/area/station/commons/lounge) "gYp" = ( /obj/effect/turf_decal/tile/red{ dir = 8 @@ -22915,6 +23358,12 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/maintenance/port/fore) +"gYN" = ( +/obj/effect/turf_decal/loading_area/white{ + dir = 8 + }, +/turf/open/floor/wood/large, +/area/station/service/bar/atrium) "gZa" = ( /obj/structure/sign/nanotrasen{ pixel_x = -32 @@ -22941,27 +23390,6 @@ /obj/structure/sign/poster/random/directional/north, /turf/open/floor/plating, /area/station/construction) -"gZl" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/space_heater, -/obj/structure/disposalpipe/segment{ - dir = 9 - }, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) -"gZq" = ( -/obj/machinery/firealarm/directional/south, -/obj/structure/table, -/obj/item/paper_bin{ - pixel_x = -3; - pixel_y = 7 - }, -/obj/item/pen, -/obj/effect/turf_decal/tile/blue/anticorner/contrasted, -/turf/open/floor/iron, -/area/station/command/bridge) "gZt" = ( /obj/effect/turf_decal/weather/snow/corner{ dir = 6 @@ -22989,6 +23417,10 @@ dir = 1 }, /area/station/security/prison) +"gZR" = ( +/obj/machinery/power/smes/engineering, +/turf/open/floor/plating, +/area/station/maintenance/department/electrical) "gZT" = ( /obj/structure/cable, /obj/effect/turf_decal/trimline/yellow/filled/line{ @@ -23000,6 +23432,11 @@ /obj/machinery/power/apc/auto_name/directional/north, /turf/open/floor/iron/dark, /area/station/engineering/atmos/hfr_room) +"gZV" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/spawner/random/trash/grille_or_waste, +/turf/open/floor/plating, +/area/station/maintenance/fore) "hac" = ( /obj/machinery/atmospherics/pipe/heat_exchanging/simple/layer2{ dir = 9 @@ -23017,11 +23454,13 @@ /turf/open/floor/engine, /area/station/engineering/supermatter/room) "hai" = ( -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/structure/window/reinforced/spawner/directional/west, -/obj/effect/decal/cleanable/blood/bubblegum, -/turf/open/floor/iron/dark, -/area/station/medical/morgue) +/obj/effect/turf_decal/weather/snow/corner{ + dir = 6 + }, +/turf/open/misc/dirt{ + initial_gas_mix = "ICEMOON_ATMOS" + }, +/area/icemoon/underground/explored/graveyard) "han" = ( /obj/structure/table, /obj/item/plate, @@ -23030,13 +23469,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/mine/laborcamp) -"hao" = ( -/obj/structure/frame/computer{ - dir = 1 - }, -/obj/item/radio/intercom/directional/south, -/turf/open/floor/iron/smooth, -/area/station/maintenance/starboard/fore) "hap" = ( /turf/open/floor/vault, /area/station/security/prison/rec) @@ -23069,15 +23501,6 @@ /obj/effect/landmark/start/bitrunner, /turf/open/floor/iron, /area/station/cargo/storage) -"haN" = ( -/obj/machinery/deepfryer, -/obj/effect/turf_decal/tile/neutral/diagonal_edge, -/obj/structure/sign/poster/contraband/moffuchis_pizza/directional/east, -/obj/machinery/camera/directional/east{ - c_tag = "Service Kitchen" - }, -/turf/open/floor/iron/kitchen/diagonal, -/area/station/service/kitchen) "haQ" = ( /obj/effect/turf_decal/tile/purple/half/contrasted{ dir = 8 @@ -23109,6 +23532,10 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/maintenance/starboard/fore) +"hbL" = ( +/obj/machinery/light/small/directional/east, +/turf/open/openspace, +/area/station/service/hydroponics) "hbR" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -23119,15 +23546,6 @@ /obj/machinery/holopad, /turf/open/floor/iron/grimy, /area/station/service/chapel/office) -"hbT" = ( -/obj/machinery/vending/hydronutrients, -/obj/effect/turf_decal/tile/green/half/contrasted{ - dir = 1 - }, -/turf/open/floor/iron/dark/side{ - dir = 1 - }, -/area/station/service/hydroponics) "hbY" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -23151,13 +23569,15 @@ /obj/effect/mapping_helpers/airlock/access/all/engineering/general, /turf/open/floor/engine, /area/station/engineering/supermatter/room) -"hcv" = ( -/obj/machinery/newscaster/directional/north, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 +"hcj" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 4 }, -/turf/open/floor/iron, -/area/station/hallway/primary/central) +/obj/effect/turf_decal/trimline/blue/filled/warning{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics) "hcw" = ( /obj/docking_port/stationary/random/icemoon{ dir = 8; @@ -23258,21 +23678,6 @@ /obj/effect/spawner/random/engineering/canister, /turf/open/floor/plating, /area/station/maintenance/port/fore) -"hek" = ( -/obj/structure/table, -/obj/item/stack/sheet/glass, -/obj/item/stack/sheet/glass, -/obj/item/stack/sheet/glass, -/obj/item/stock_parts/matter_bin, -/obj/item/stock_parts/matter_bin, -/obj/item/stock_parts/scanning_module, -/obj/item/stock_parts/scanning_module, -/obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/east, -/turf/open/floor/iron/white/side{ - dir = 10 - }, -/area/station/science/lab) "het" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/sign/warning/gas_mask, @@ -23339,16 +23744,6 @@ /obj/effect/landmark/start/hangover, /turf/open/floor/wood, /area/station/service/library) -"hfh" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment{ - dir = 10 - }, -/obj/machinery/duct, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) "hfm" = ( /obj/item/kirbyplants/random, /obj/effect/turf_decal/tile/neutral/fourcorners, @@ -23370,6 +23765,14 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/smooth, /area/station/security/holding_cell) +"hfG" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "hfI" = ( /obj/machinery/light/directional/north, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -23380,6 +23783,26 @@ /obj/structure/closet/l3closet/scientist, /turf/open/floor/iron, /area/station/science/xenobiology) +"hfY" = ( +/obj/effect/turf_decal/siding/thinplating/dark/corner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 6 + }, +/obj/effect/turf_decal/trimline/blue/filled/warning{ + dir = 6 + }, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/obj/structure/cable, +/obj/machinery/duct, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/sign/poster/official/the_owl/directional/south, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics) "hgc" = ( /obj/structure/table, /turf/open/floor/plating, @@ -23480,17 +23903,6 @@ /obj/effect/landmark/start/chemist, /turf/open/floor/iron/textured, /area/station/medical/chem_storage) -"hid" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red/half{ - dir = 4 - }, -/turf/open/floor/iron/half{ - dir = 1 - }, -/area/station/hallway/secondary/service) "hil" = ( /obj/structure/reagent_dispensers/fueltank, /turf/open/floor/plating, @@ -23521,6 +23933,16 @@ /obj/effect/spawner/structure/window, /turf/open/floor/plating, /area/station/service/hydroponics/garden) +"hjw" = ( +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/obj/structure/cable, +/obj/machinery/duct, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics) "hjE" = ( /turf/closed/wall/r_wall, /area/station/science/explab) @@ -23540,6 +23962,14 @@ "hjM" = ( /turf/closed/wall/r_wall, /area/station/maintenance/department/medical/morgue) +"hjO" = ( +/obj/machinery/power/apc/auto_name/directional/south, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/duct, +/turf/open/floor/wood/large, +/area/station/service/bar) "hjQ" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 4 @@ -23584,23 +24014,9 @@ }, /area/station/security/office) "hkd" = ( -/obj/structure/cable, /obj/machinery/light/small/directional/west, /turf/open/floor/plating, /area/station/maintenance/department/electrical) -"hkl" = ( -/obj/structure/table/wood, -/obj/effect/turf_decal/siding/wood/corner{ - dir = 8 - }, -/obj/structure/desk_bell{ - desc = "Why, I'm always here! I should get absolute service. Pronto, garcon!"; - name = "The Regular's Bell"; - pixel_x = -6 - }, -/obj/effect/turf_decal/tile/bar/opposingcorners, -/turf/open/floor/iron, -/area/station/service/bar) "hkp" = ( /obj/effect/turf_decal/trimline/dark_blue/line{ dir = 8 @@ -23618,6 +24034,21 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/aft/greater) +"hkO" = ( +/obj/machinery/atmospherics/pipe/smart/simple/dark/visible{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/door/firedoor/heavy, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/power/apc/auto_name/directional/north{ + areastring = "/area/station/science/ordnance/burnchamber" + }, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/science/ordnance) "hkU" = ( /obj/effect/landmark/start/cargo_technician, /obj/structure/chair/office{ @@ -23645,6 +24076,12 @@ }, /turf/open/floor/plating, /area/station/maintenance/department/medical/central) +"hlt" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/sign/poster/contraband/random/directional/south, +/obj/structure/reagent_dispensers/water_cooler, +/turf/open/floor/iron, +/area/station/maintenance/starboard/fore) "hlv" = ( /obj/machinery/airalarm/directional/south, /obj/machinery/shower/directional/west, @@ -23658,16 +24095,17 @@ /obj/machinery/light/small/directional/west, /turf/open/floor/iron, /area/mine/laborcamp) -"hlP" = ( -/obj/machinery/hydroponics/constructable, -/obj/effect/turf_decal/trimline/green/filled/line{ - dir = 9 +"hlQ" = ( +/obj/machinery/door/airlock/external, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 8 }, -/obj/effect/turf_decal/trimline/blue/filled/warning{ - dir = 9 +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "graveyard" }, -/turf/open/floor/iron/dark, -/area/station/service/hydroponics) +/obj/effect/mapping_helpers/airlock/access/all/medical/coroner, +/turf/open/floor/plating, +/area/station/medical/morgue) "hlS" = ( /obj/structure/table, /obj/item/clothing/under/misc/burial, @@ -23698,15 +24136,6 @@ dir = 6 }, /area/station/security/prison) -"hml" = ( -/obj/effect/turf_decal/trimline/green/filled/corner{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/blue/corner{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/service/hydroponics) "hmt" = ( /obj/machinery/door/firedoor, /obj/structure/table/reinforced, @@ -23737,12 +24166,6 @@ /obj/effect/mapping_helpers/burnt_floor, /turf/open/floor/plating, /area/station/maintenance/department/medical/central) -"hnf" = ( -/obj/effect/turf_decal/siding/white{ - dir = 8 - }, -/turf/open/floor/iron/white/smooth_large, -/area/station/service/kitchen/diner) "hno" = ( /obj/structure/sign/painting/library{ pixel_y = 32 @@ -23756,11 +24179,6 @@ }, /turf/open/floor/iron/dark/textured, /area/station/security/prison) -"hnB" = ( -/obj/structure/closet/secure_closet/hydroponics, -/obj/effect/turf_decal/siding/thinplating/dark, -/turf/open/floor/plating, -/area/station/service/hydroponics) "hnC" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -23769,6 +24187,14 @@ }, /turf/open/floor/iron, /area/station/cargo/lobby) +"hnK" = ( +/obj/structure/table/wood, +/obj/item/wallframe/camera{ + pixel_y = -2; + pixel_x = 1 + }, +/turf/open/floor/plating, +/area/station/maintenance/starboard/lesser) "hnN" = ( /obj/machinery/camera/directional/west{ c_tag = "Xenobiology Pens Observation - Port Aft"; @@ -23800,6 +24226,16 @@ /obj/structure/extinguisher_cabinet/directional/north, /turf/open/floor/iron/white, /area/station/medical/pharmacy) +"hog" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/blue/filled/warning{ + dir = 8 + }, +/obj/machinery/hydroponics/constructable, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics) "hos" = ( /obj/structure/disposalpipe/trunk/multiz/down{ dir = 1 @@ -23934,6 +24370,25 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/engineering/atmos) +"hpK" = ( +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/blue/filled/warning{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/obj/structure/cable, +/obj/machinery/duct, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics) "hpM" = ( /obj/machinery/door/airlock/external{ glass = 1; @@ -23995,6 +24450,16 @@ dir = 1 }, /area/station/commons/storage/art) +"hqv" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/atmospherics/components/binary/pump/off/supply/visible/layer4{ + dir = 1; + name = "Can In" + }, +/turf/open/floor/plating, +/area/station/maintenance/fore) "hqx" = ( /obj/effect/landmark/start/assistant, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -24023,6 +24488,14 @@ /obj/structure/sign/warning/radiation/rad_area, /turf/closed/wall/r_wall, /area/station/engineering/main) +"hrd" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/visible/layer4, +/obj/machinery/meter/layer4, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/plating, +/area/station/maintenance/fore) "hrh" = ( /obj/structure/chair/comfy/beige{ dir = 1 @@ -24038,9 +24511,14 @@ /obj/effect/turf_decal/tile/red/anticorner/contrasted, /turf/open/floor/iron/dark, /area/station/security/checkpoint/engineering) -"hrt" = ( -/obj/structure/table/glass, -/obj/item/shovel/spade, +"hrA" = ( +/obj/machinery/space_heater, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/obj/structure/railing{ + dir = 6 + }, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) "hrJ" = ( @@ -24133,13 +24611,6 @@ /obj/structure/tank_holder/oxygen, /turf/open/floor/plating, /area/station/maintenance/port/greater) -"htc" = ( -/obj/structure/table/reinforced, -/obj/machinery/cell_charger, -/obj/item/stock_parts/cell/high, -/obj/item/rcl/pre_loaded, -/turf/open/floor/iron, -/area/station/command/heads_quarters/ce) "htd" = ( /obj/structure/sign/warning/docking/directional/north, /turf/open/misc/asteroid/snow/icemoon, @@ -24218,13 +24689,13 @@ /obj/machinery/vending/autodrobe/all_access, /turf/open/floor/iron, /area/station/commons/locker) -"hun" = ( -/obj/structure/disposalpipe/trunk{ - dir = 1 - }, -/obj/machinery/disposal/bin, -/turf/open/floor/plating/snowed/coldroom, -/area/station/service/kitchen/coldroom) +"hut" = ( +/obj/structure/table/reinforced, +/obj/machinery/cell_charger, +/obj/item/stock_parts/power_store/cell/high, +/obj/item/rcl/pre_loaded, +/turf/open/floor/iron, +/area/station/command/heads_quarters/ce) "huB" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -24312,34 +24783,23 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/fore) -"hvl" = ( -/obj/effect/turf_decal/siding/white, -/obj/effect/spawner/random/entertainment/arcade, -/obj/structure/sign/poster/random/directional/north, -/obj/effect/turf_decal/siding/white{ - dir = 6 - }, -/turf/open/floor/iron, -/area/station/hallway/secondary/service) +"hvi" = ( +/obj/structure/closet/crate/freezer/food{ + name = "cooler" + }, +/obj/item/reagent_containers/cup/glass/ice, +/obj/item/reagent_containers/cup/glass/ice, +/obj/item/reagent_containers/cup/glass/ice, +/obj/item/reagent_containers/cup/glass/ice, +/obj/effect/mapping_helpers/no_atoms_ontop, +/turf/open/misc/asteroid/snow/coldroom, +/area/icemoon/underground/explored) "hvm" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/white, /area/station/science/xenobiology) -"hvr" = ( -/obj/machinery/door/airlock{ - name = "Hydroponics Backroom" - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/door/firedoor, -/obj/machinery/duct, -/obj/effect/mapping_helpers/airlock/access/all/service/hydroponics, -/turf/open/floor/iron/textured_half{ - dir = 1 - }, -/area/station/service/hydroponics) "hvS" = ( /obj/effect/landmark/start/depsec/engineering, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -24398,21 +24858,6 @@ }, /turf/open/floor/iron, /area/station/cargo/office) -"hwM" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 4 - }, -/obj/structure/chair/sofa/corp/left{ - dir = 4; - pixel_x = -4; - pixel_y = 8 - }, -/obj/effect/landmark/start/hangover, -/obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/north, -/obj/structure/sign/poster/random/directional/west, -/turf/open/floor/iron/grimy, -/area/station/service/bar/atrium) "hwR" = ( /obj/machinery/camera/directional/west{ c_tag = "Security - Equipment Room" @@ -24442,6 +24887,13 @@ /obj/effect/turf_decal/tile/blue/full, /turf/open/floor/iron/large, /area/station/medical/treatment_center) +"hxB" = ( +/obj/machinery/door/airlock{ + id_tag = "Toilet2"; + name = "Unit 2" + }, +/turf/open/floor/iron/textured, +/area/station/commons/toilet) "hxE" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -24453,6 +24905,12 @@ dir = 5 }, /area/station/service/chapel) +"hxY" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/duct, +/turf/open/floor/iron, +/area/station/service/kitchen/coldroom) "hyd" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 8 @@ -24468,22 +24926,6 @@ }, /turf/open/floor/plating/snowed/icemoon, /area/station/maintenance/disposal) -"hyt" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/door/airlock/maintenance{ - name = "Bar Maintenance" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, -/obj/effect/mapping_helpers/airlock/unres{ - dir = 8 - }, -/turf/open/floor/plating, -/area/station/maintenance/department/crew_quarters/bar) "hyC" = ( /obj/effect/spawner/structure/window/hollow/reinforced/middle, /obj/structure/cable, @@ -24495,6 +24937,16 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/wood, /area/station/maintenance/aft/greater) +"hyQ" = ( +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/obj/effect/turf_decal/tile/green{ + dir = 4 + }, +/obj/effect/landmark/navigate_destination/hydro, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) "hyV" = ( /turf/closed/wall/r_wall, /area/station/science/ordnance/testlab) @@ -24508,6 +24960,12 @@ /obj/structure/stairs/north, /turf/open/floor/iron, /area/station/service/chapel) +"hzw" = ( +/obj/structure/fence/cut/large{ + dir = 1 + }, +/turf/open/floor/plating/snowed/smoothed/icemoon, +/area/icemoon/surface/outdoors/nospawn) "hzz" = ( /obj/structure/table/glass, /obj/item/clothing/gloves/latex, @@ -24559,13 +25017,6 @@ }, /turf/open/openspace, /area/station/ai_monitored/security/armory/upper) -"hzQ" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 8 - }, -/obj/structure/chair/stool/bar/directional/east, -/turf/open/floor/stone, -/area/station/commons/lounge) "hzY" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/door/poddoor/shutters/preopen{ @@ -24597,6 +25048,12 @@ }, /turf/open/floor/iron/large, /area/station/hallway/secondary/entry) +"hAK" = ( +/obj/machinery/holopad, +/obj/effect/spawner/random/engineering/tracking_beacon, +/obj/effect/turf_decal/bot, +/turf/open/floor/iron/dark/smooth_half, +/area/station/service/hydroponics) "hAO" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -24616,6 +25073,10 @@ }, /turf/open/floor/iron, /area/station/security/brig/upper) +"hAS" = ( +/obj/machinery/light/cold/directional/east, +/turf/open/floor/plating/snowed/coldroom, +/area/station/service/kitchen/coldroom) "hAT" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -24627,17 +25088,10 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/science/genetics) -"hBc" = ( -/obj/effect/turf_decal/siding/white{ - dir = 1 - }, -/obj/structure/chair{ - dir = 8 - }, -/obj/structure/sign/poster/random/directional/north, -/obj/effect/turf_decal/tile/red/full, -/turf/open/floor/iron/large, -/area/station/service/kitchen/diner) +"hAW" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "hBd" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, @@ -24686,17 +25140,6 @@ }, /turf/open/floor/iron, /area/station/service/hydroponics/garden) -"hBR" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/duct, -/obj/effect/landmark/event_spawn, -/turf/open/floor/wood, -/area/station/hallway/secondary/service) "hBZ" = ( /obj/structure/table/wood, /obj/item/radio/intercom/command, @@ -24729,14 +25172,6 @@ /obj/structure/cable, /turf/open/floor/iron/cafeteria, /area/station/security/prison/mess) -"hCx" = ( -/obj/structure/table, -/obj/item/binoculars, -/obj/machinery/computer/security/telescreen/ordnance{ - pixel_y = 32 - }, -/turf/open/floor/iron, -/area/station/science/ordnance/testlab) "hCC" = ( /obj/effect/turf_decal/trimline/yellow/filled/line{ dir = 1 @@ -24744,15 +25179,6 @@ /obj/machinery/newscaster/directional/north, /turf/open/floor/iron/white, /area/station/medical/chemistry) -"hCN" = ( -/obj/structure/chair/sofa/right/brown{ - desc = "Hey, did you know you can get a pineapple on your burger here?"; - dir = 1; - name = "The Regular's Sofa" - }, -/obj/effect/landmark/start/hangover, -/turf/open/floor/stone, -/area/station/commons/lounge) "hCV" = ( /obj/structure/table/wood, /obj/item/hand_tele{ @@ -24801,6 +25227,20 @@ "hDp" = ( /turf/open/floor/engine, /area/station/science/genetics) +"hDu" = ( +/obj/effect/turf_decal/siding/white{ + dir = 8 + }, +/obj/machinery/power/apc/auto_name/directional/east, +/obj/structure/cable, +/obj/item/stack/package_wrap{ + pixel_y = 2 + }, +/obj/item/book/manual/chef_recipes, +/obj/item/holosign_creator/robot_seat/restaurant, +/obj/structure/rack, +/turf/open/floor/iron/white/smooth_large, +/area/station/service/kitchen) "hDA" = ( /obj/effect/turf_decal/stripes/line, /turf/open/floor/plating/icemoon, @@ -24840,10 +25280,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/fore) -"hEl" = ( -/obj/machinery/portable_atmospherics/canister/air, -/turf/open/floor/plating, -/area/station/maintenance/department/crew_quarters/bar) "hEm" = ( /obj/structure/closet/emcloset, /turf/open/floor/iron/dark, @@ -24863,6 +25299,12 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/maintenance/port/fore) +"hEV" = ( +/obj/structure/table/wood/poker, +/obj/effect/spawner/random/bureaucracy/briefcase, +/obj/item/taperecorder/empty, +/turf/open/floor/wood/large, +/area/station/commons/lounge) "hEW" = ( /obj/machinery/disposal/bin, /obj/structure/disposalpipe/trunk{ @@ -24890,6 +25332,14 @@ /obj/structure/frame/machine, /turf/open/floor/plating, /area/station/construction) +"hFj" = ( +/obj/machinery/computer/security/telescreen/entertainment/directional/south, +/obj/machinery/status_display/evac/directional/east, +/obj/structure/chair/sofa/right/brown{ + dir = 1 + }, +/turf/open/floor/wood/large, +/area/station/commons/lounge) "hFr" = ( /obj/structure/flora/grass/both/style_2, /turf/open/misc/asteroid/snow/icemoon, @@ -24916,6 +25366,10 @@ }, /turf/open/floor/plating, /area/station/maintenance/department/cargo) +"hFN" = ( +/obj/machinery/light/small/directional/south, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/explored/graveyard) "hFU" = ( /obj/effect/mapping_helpers/airlock/cyclelink_helper{ dir = 8 @@ -24930,17 +25384,22 @@ /obj/machinery/vending/wardrobe/det_wardrobe, /turf/open/floor/iron/grimy, /area/station/security/detectives_office) -"hGf" = ( -/obj/item/clothing/suit/hooded/wintercoat, -/obj/effect/decal/remains/human, -/obj/item/clothing/head/beanie/orange{ - pixel_y = 8 +"hFX" = ( +/obj/structure/disposalpipe/segment{ + dir = 6 }, -/obj/item/clothing/shoes/wheelys/skishoes{ - pixel_y = -8 +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics) +"hGg" = ( +/obj/structure/sign/warning/directional/west{ + desc = "A sign warning to watch for moving minecarts beyond this point." }, -/turf/open/misc/asteroid/snow/icemoon, -/area/icemoon/surface/outdoors/nospawn) +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/light/small/directional/west, +/turf/open/floor/plating, +/area/station/maintenance/starboard/lesser) "hGh" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -24956,15 +25415,17 @@ }, /turf/open/openspace, /area/station/engineering/atmos/storage) +"hGF" = ( +/obj/machinery/button/door/directional/east{ + id = "xenobio7"; + name = "Xenobio Pen 7 Blast DOors"; + req_access = list("xenobiology") + }, +/turf/open/floor/iron/white, +/area/station/science/xenobiology) "hGH" = ( /turf/closed/wall, /area/station/security/lockers) -"hGI" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/duct, -/turf/open/floor/iron, -/area/station/service/hydroponics) "hGZ" = ( /obj/structure/table, /obj/item/analyzer, @@ -25033,9 +25494,6 @@ "hHN" = ( /turf/open/floor/iron, /area/station/engineering/atmos) -"hHU" = ( -/turf/open/floor/plating, -/area/station/maintenance/department/crew_quarters/bar) "hHV" = ( /obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored/nitrogen_output{ dir = 1 @@ -25061,6 +25519,15 @@ }, /turf/open/floor/plating, /area/station/engineering/atmos/pumproom) +"hIE" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/camera/directional/south{ + c_tag = "Service - Electrical Maintenace Lower" + }, +/turf/open/floor/catwalk_floor/iron_smooth, +/area/station/maintenance/starboard/lesser) "hIH" = ( /obj/machinery/door/airlock/maintenance, /obj/structure/cable, @@ -25103,12 +25570,6 @@ /obj/structure/cable, /turf/open/floor/engine, /area/station/science/xenobiology) -"hJm" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 8 - }, -/turf/open/floor/wood/tile, -/area/station/service/theater) "hJp" = ( /obj/effect/turf_decal/tile/brown/half/contrasted{ dir = 1 @@ -25140,6 +25601,11 @@ /obj/machinery/light/directional/west, /turf/open/floor/iron, /area/station/hallway/primary/central) +"hJF" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/sign/warning/directional/south, +/turf/open/floor/plating, +/area/station/maintenance/fore) "hJG" = ( /obj/effect/turf_decal/tile/neutral/fourcorners, /obj/effect/decal/cleanable/dirt, @@ -25148,11 +25614,33 @@ }, /turf/open/floor/iron, /area/station/commons/locker) +"hJS" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/obj/machinery/duct, +/obj/effect/turf_decal/siding/dark{ + dir = 10 + }, +/turf/open/floor/iron/checker, +/area/station/hallway/secondary/service) "hJY" = ( /obj/structure/closet/l3closet/janitor, /obj/machinery/airalarm/directional/north, /turf/open/floor/iron, /area/station/service/janitor) +"hKn" = ( +/obj/machinery/biogenerator, +/obj/machinery/door/window/left/directional/south{ + name = "Biogenerator Access"; + req_access = list("hydroponics") + }, +/obj/effect/turf_decal/tile/green/opposingcorners{ + dir = 1 + }, +/obj/effect/turf_decal/tile/blue/opposingcorners, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics) "hKr" = ( /obj/structure/table/glass, /obj/item/book/manual/wiki/infections{ @@ -25189,6 +25677,12 @@ /obj/machinery/light/small/directional/south, /turf/open/floor/iron, /area/station/tcommsat/computer) +"hKL" = ( +/obj/effect/turf_decal/tile/bar{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) "hKT" = ( /obj/machinery/light/floor, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -25207,6 +25701,12 @@ /obj/effect/turf_decal/tile/red/half/contrasted, /turf/open/floor/iron, /area/station/security/brig/upper) +"hLh" = ( +/obj/structure/closet/crate/grave/filled, +/turf/open/misc/dirt{ + initial_gas_mix = "ICEMOON_ATMOS" + }, +/area/icemoon/underground/explored/graveyard) "hLk" = ( /obj/structure/table, /obj/item/paper, @@ -25221,11 +25721,17 @@ }, /turf/open/floor/iron, /area/mine/laborcamp) -"hLw" = ( -/obj/item/radio/intercom/directional/north, -/obj/structure/table/wood, -/turf/open/floor/wood/parquet, -/area/station/commons/lounge) +"hLy" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/stone, +/area/station/service/bar/atrium) "hLO" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -25270,16 +25776,18 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/primary/port) -"hMk" = ( -/obj/machinery/light/directional/west, -/turf/open/floor/iron, -/area/station/service/hydroponics) "hMr" = ( /obj/effect/landmark/start/chaplain, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/carpet, /area/station/service/chapel) +"hMs" = ( +/obj/effect/landmark/start/hangover, +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/tile/purple, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) "hMw" = ( /obj/structure/bookcase/random/fiction, /turf/open/floor/plating, @@ -25323,6 +25831,24 @@ }, /turf/open/floor/iron/smooth, /area/mine/laborcamp/security) +"hMM" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured_half{ + dir = 1 + }, +/area/station/hallway/secondary/service) "hMS" = ( /obj/machinery/light/small/directional/south, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ @@ -25345,13 +25871,6 @@ /obj/item/radio/intercom/directional/south, /turf/open/floor/wood, /area/station/service/lawoffice) -"hNi" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/machinery/duct, -/turf/open/floor/iron, -/area/station/hallway/secondary/service) "hNx" = ( /obj/machinery/camera/directional/south{ c_tag = "Holodeck - South"; @@ -25381,6 +25900,11 @@ }, /turf/open/floor/iron/dark, /area/station/engineering/supermatter/room) +"hNK" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/spawner/random/trash/mess, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "hNM" = ( /obj/structure/sign/warning/no_smoking/directional/north, /obj/structure/cable, @@ -25494,6 +26018,19 @@ /obj/effect/turf_decal/trimline/yellow/filled/line, /turf/open/floor/iron/dark, /area/station/engineering/atmos/hfr_room) +"hPS" = ( +/obj/effect/landmark/start/botanist, +/obj/effect/turf_decal/tile/green/opposingcorners{ + dir = 1 + }, +/obj/effect/turf_decal/tile/blue/opposingcorners, +/obj/structure/sign/calendar/directional/north, +/obj/machinery/camera{ + c_tag = "Service - Botany Equipment"; + dir = 9 + }, +/turf/open/floor/iron, +/area/station/service/hydroponics) "hPT" = ( /obj/effect/turf_decal/stripes/line{ dir = 6 @@ -25657,14 +26194,6 @@ /obj/effect/decal/cleanable/generic, /turf/open/floor/plating, /area/station/maintenance/department/medical/morgue) -"hSb" = ( -/obj/effect/turf_decal/siding/thinplating/dark{ - dir = 8 - }, -/obj/effect/spawner/random/structure/musician/piano/random_piano, -/obj/structure/sign/poster/random/directional/north, -/turf/open/floor/carpet, -/area/station/service/theater) "hSl" = ( /obj/effect/turf_decal/trimline/neutral/mid_joiner{ dir = 8 @@ -25763,6 +26292,27 @@ /obj/machinery/status_display/evac/directional/south, /turf/open/floor/wood, /area/station/service/library) +"hUf" = ( +/obj/structure/table/glass, +/obj/item/assembly/signaler{ + pixel_x = 6; + pixel_y = 5 + }, +/obj/item/reagent_containers/dropper{ + pixel_x = -4; + pixel_y = 4 + }, +/obj/item/stock_parts/power_store/cell/high, +/obj/item/stack/cable_coil, +/obj/item/pen{ + pixel_x = -5; + pixel_y = 3 + }, +/obj/machinery/newscaster/directional/west, +/turf/open/floor/iron/cafeteria{ + dir = 8 + }, +/area/station/science/research) "hUi" = ( /obj/effect/turf_decal/stripes/line{ dir = 6 @@ -25889,20 +26439,17 @@ /obj/effect/turf_decal/tile/yellow/opposingcorners, /turf/open/floor/iron/white, /area/station/maintenance/port/fore) -"hWh" = ( -/obj/structure/sink/directional/west, -/obj/effect/turf_decal/tile/green{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/service/hydroponics) "hWi" = ( /obj/machinery/teleport/hub, /turf/open/floor/plating, /area/station/ai_monitored/turret_protected/aisat_interior) +"hWv" = ( +/obj/effect/spawner/structure/window/hollow/reinforced/middle, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "botany_chasm_and_wolf_shutters" + }, +/turf/open/floor/plating, +/area/station/service/hydroponics) "hWI" = ( /obj/effect/turf_decal/box, /obj/effect/spawner/random/structure/closet_empty/crate/with_loot, @@ -25910,19 +26457,6 @@ /obj/structure/sign/poster/official/wtf_is_co2/directional/north, /turf/open/floor/iron/dark, /area/station/maintenance/starboard/aft) -"hWP" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/public/glass{ - name = "Central Access" - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/starboard) "hWV" = ( /obj/machinery/light/small/directional/north, /obj/machinery/space_heater, @@ -25938,11 +26472,25 @@ /turf/open/floor/plating/snowed/icemoon, /area/icemoon/surface/outdoors/nospawn) "hWX" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/window/reinforced/spawner/directional/west, -/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/mapping_helpers/airlock/access/all/medical/coroner, +/obj/machinery/door/airlock/medical/glass, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/door/firedoor, /turf/open/floor/iron/dark, /area/station/medical/morgue) +"hXm" = ( +/obj/effect/spawner/random/vending/colavend, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"hXt" = ( +/obj/machinery/camera{ + c_tag = "Starboard Primary Hallway Center East" + }, +/obj/effect/turf_decal/tile/purple, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) "hXC" = ( /obj/structure/chair{ dir = 8 @@ -25954,6 +26502,15 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/starboard) +"hXD" = ( +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/obj/effect/turf_decal/bot_red, +/obj/effect/turf_decal/siding/white, +/turf/open/floor/iron/white/smooth_large, +/area/station/service/kitchen) "hXU" = ( /obj/machinery/newscaster/directional/east, /obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, @@ -25973,19 +26530,12 @@ /obj/effect/landmark/navigate_destination/disposals, /turf/open/floor/plating, /area/station/maintenance/port/lesser) -"hYs" = ( -/obj/machinery/chem_master/condimaster{ - desc = "Looks like a knock-off chem-master. Perhaps useful for separating liquids when mixing drinks precisely. Also dispenses condiments."; - name = "HoochMaster Deluxe" - }, -/obj/effect/turf_decal/siding/white/end{ - dir = 4 +"hYt" = ( +/obj/structure/disposalpipe/segment{ + dir = 9 }, -/obj/effect/turf_decal/tile/bar/opposingcorners, -/obj/machinery/power/apc/auto_name/directional/east, -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/service/bar) +/turf/open/floor/plating, +/area/station/maintenance/starboard/lesser) "hYy" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 4 @@ -25994,14 +26544,6 @@ /obj/item/kirbyplants/random, /turf/open/floor/wood, /area/station/security/prison/rec) -"hYC" = ( -/obj/structure/closet/athletic_mixed, -/obj/effect/landmark/start/hangover/closet, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/commons/fitness) "hYP" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -26109,13 +26651,6 @@ }, /turf/open/floor/iron/white, /area/station/science/ordnance/office) -"ibi" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/machinery/duct, -/turf/open/floor/wood/tile, -/area/station/service/theater) "ibj" = ( /obj/structure/closet/firecloset, /turf/open/floor/plating, @@ -26179,13 +26714,6 @@ }, /turf/open/floor/wood, /area/station/security/prison/rec) -"ibI" = ( -/obj/structure/chair/stool/directional/south, -/obj/machinery/camera/directional/north{ - c_tag = "Starboard Primary Hallway West" - }, -/turf/open/floor/iron, -/area/station/hallway/primary/starboard) "ibM" = ( /obj/effect/spawner/structure/window/hollow/reinforced/middle{ dir = 4 @@ -26324,6 +26852,16 @@ /obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, /turf/open/floor/plating, /area/station/service/hydroponics/garden) +"icZ" = ( +/obj/structure/sink/directional/east, +/obj/machinery/button/door/directional/west{ + id = "xenobio2"; + name = "Xenobio Pen 2 Blast Door"; + req_access = list("xenobiology") + }, +/obj/machinery/light/floor, +/turf/open/floor/iron/white, +/area/station/science/xenobiology) "ida" = ( /obj/effect/turf_decal/trimline/yellow/filled/line{ dir = 1 @@ -26346,6 +26884,19 @@ /obj/effect/landmark/start/depsec/science, /turf/open/floor/iron/dark, /area/station/security/checkpoint/science) +"idp" = ( +/obj/machinery/button/door/directional/east{ + id = "cmoprivacy"; + name = "CMO Shutter Control"; + pixel_y = 23; + req_access = list("cmo") + }, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 4 + }, +/obj/machinery/computer/security/telescreen/cmo/directional/east, +/turf/open/floor/iron/dark, +/area/station/command/heads_quarters/cmo) "idr" = ( /obj/structure/stairs/north, /obj/structure/railing{ @@ -26368,22 +26919,12 @@ }, /turf/open/floor/iron/smooth, /area/station/security/holding_cell) -"idw" = ( -/obj/structure/table/glass, -/obj/item/clothing/accessory/armband/hydro, -/obj/effect/turf_decal/trimline/green/filled/line{ - dir = 9 - }, -/obj/effect/turf_decal/trimline/blue/filled/warning{ - dir = 9 +"idH" = ( +/obj/structure/railing/wooden_fence{ + dir = 6 }, -/obj/item/paper/guides/jobs/hydroponics, -/turf/open/floor/iron, -/area/station/service/hydroponics) -"idE" = ( -/obj/effect/turf_decal/tile/bar/opposingcorners, -/turf/open/floor/iron, -/area/station/service/bar/backroom) +/turf/open/misc/hay/icemoon, +/area/icemoon/underground/explored) "idN" = ( /obj/structure/window/reinforced/spawner/directional/north, /obj/machinery/door/window/brigdoor/left/directional/south{ @@ -26401,17 +26942,10 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/hallway/primary/port) -"ieq" = ( -/obj/effect/turf_decal/siding/white{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/disposalpipe/segment{ - dir = 5 - }, -/turf/open/floor/iron/dark, -/area/station/service/hydroponics) +"iew" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners, +/turf/open/floor/iron, +/area/station/service/bar) "ieG" = ( /obj/effect/turf_decal/stripes/corner{ dir = 4 @@ -26426,32 +26960,20 @@ /obj/effect/turf_decal/tile/red/half/contrasted, /turf/open/floor/iron, /area/mine/laborcamp/security) +"ifd" = ( +/obj/item/radio/intercom/directional/north, +/obj/machinery/light/directional/north, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central) "ife" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/aisat/atmos) -"ifg" = ( -/obj/effect/turf_decal/siding/white, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/turf/open/floor/iron/white/smooth_large, -/area/station/service/kitchen/diner) -"ifw" = ( -/obj/structure/table/reinforced, -/obj/machinery/door/poddoor/shutters/preopen{ - dir = 8; - id = "kitchencounter"; - name = "Kitchen Counter Shutters" - }, -/obj/machinery/door/firedoor, -/obj/structure/desk_bell{ - pixel_x = 7 - }, -/turf/open/floor/iron/kitchen/diagonal, -/area/station/service/kitchen) "ifA" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/sign/warning/cold_temp, @@ -26475,14 +26997,6 @@ /obj/item/soap/nanotrasen, /turf/open/floor/iron/showroomfloor, /area/station/security/prison/toilet) -"igi" = ( -/obj/item/kirbyplants/organic/plant10, -/obj/machinery/camera/directional/west{ - c_tag = "Service Bar Staircase" - }, -/obj/item/radio/intercom/directional/west, -/turf/open/floor/wood/parquet, -/area/station/service/bar/atrium) "igm" = ( /turf/closed/wall/ice, /area/mine/living_quarters) @@ -26495,6 +27009,10 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/mine/eva/lower) +"igu" = ( +/obj/effect/spawner/random/engineering/atmospherics_portable, +/turf/open/floor/plating, +/area/station/maintenance/starboard/lesser) "igx" = ( /obj/machinery/atmospherics/pipe/smart/simple/purple/visible{ dir = 5 @@ -26505,6 +27023,15 @@ /obj/machinery/firealarm/directional/west, /turf/open/floor/glass, /area/station/security/lockers) +"igH" = ( +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/obj/effect/decal/cleanable/cobweb, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "igL" = ( /obj/structure/cable/multilayer/multiz, /obj/effect/turf_decal/stripes/box, @@ -26539,14 +27066,6 @@ /obj/effect/spawner/random/trash/mess, /turf/open/floor/wood/large, /area/station/commons/vacant_room/office) -"ihf" = ( -/obj/effect/turf_decal/siding/white{ - dir = 10 - }, -/obj/machinery/firealarm/directional/west, -/obj/effect/turf_decal/tile/red/full, -/turf/open/floor/iron/large, -/area/station/service/kitchen/diner) "ihk" = ( /obj/structure/cable, /obj/effect/turf_decal/tile/neutral/fourcorners, @@ -26571,21 +27090,17 @@ /obj/structure/cable, /turf/open/floor/iron/dark/textured, /area/station/security/execution/transfer) -"ihG" = ( -/obj/structure/chair/sofa/corp/left{ +"iif" = ( +/obj/effect/turf_decal/tile/blue/opposingcorners, +/obj/effect/turf_decal/tile/green/opposingcorners{ dir = 1 }, -/turf/open/floor/wood, -/area/station/hallway/secondary/service) -"ihN" = ( -/obj/machinery/button/door/directional/west{ - id = "xenobio4"; - layer = 4; - name = "Xenobio Pen 4 Blast Door"; - req_access = list("xenobiology") +/obj/effect/turf_decal/siding/white{ + dir = 8 }, -/turf/open/floor/iron/white, -/area/station/science/xenobiology) +/obj/machinery/biogenerator, +/turf/open/floor/iron, +/area/station/service/hydroponics) "iih" = ( /obj/effect/spawner/xmastree, /obj/effect/turf_decal/tile/neutral{ @@ -26612,6 +27127,17 @@ }, /turf/open/floor/iron, /area/station/cargo/lobby) +"iiB" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/blue/filled/warning{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/service/hydroponics) "iiH" = ( /obj/machinery/door/airlock/security/glass{ id_tag = "innerbrig"; @@ -26641,28 +27167,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/station/maintenance/starboard/fore) -"iji" = ( -/obj/structure/table, -/obj/item/multitool/circuit{ - pixel_x = -8 - }, -/obj/item/multitool/circuit{ - pixel_x = -4 - }, -/obj/item/multitool/circuit, -/obj/item/stock_parts/cell/high{ - pixel_x = 8; - pixel_y = 9 - }, -/obj/item/stock_parts/cell/high{ - pixel_x = 8; - pixel_y = -2 - }, -/obj/item/radio/intercom/directional/west, -/turf/open/floor/iron/white/side{ - dir = 4 - }, -/area/station/science/explab) "ijj" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -26690,6 +27194,14 @@ }, /turf/open/floor/iron/dark, /area/station/engineering/atmos/hfr_room) +"ijw" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/confetti, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "ijC" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -26716,6 +27228,11 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/iron, /area/station/security/brig/upper) +"ijW" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/visible, +/obj/structure/sign/warning/secure_area/directional/north, +/turf/open/floor/iron/dark, +/area/station/science/explab) "ijY" = ( /obj/structure/flora/rock/icy/style_random, /turf/open/misc/asteroid/snow/icemoon, @@ -26739,6 +27256,10 @@ /obj/effect/turf_decal/tile/brown/opposingcorners, /turf/open/floor/iron, /area/station/cargo/storage) +"ike" = ( +/obj/structure/fence/cut/medium, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/surface/outdoors/nospawn) "ikk" = ( /obj/structure/disposalpipe/sorting/mail/flip{ dir = 4 @@ -26765,10 +27286,6 @@ /obj/machinery/computer/security/telescreen/entertainment/directional/north, /turf/open/floor/wood, /area/station/service/library) -"iko" = ( -/obj/machinery/airalarm/directional/north, -/turf/open/floor/iron, -/area/station/hallway/primary/starboard) "iku" = ( /obj/item/kirbyplants/random, /obj/effect/turf_decal/tile/neutral/fourcorners, @@ -26794,14 +27311,6 @@ /obj/machinery/light/directional/east, /turf/open/floor/iron, /area/station/hallway/primary/central) -"ikH" = ( -/obj/machinery/camera{ - c_tag = "Starboard Primary Hallway Center" - }, -/obj/structure/cable, -/obj/effect/landmark/start/hangover, -/turf/open/floor/iron, -/area/station/hallway/primary/starboard) "ikI" = ( /obj/item/gun/energy/laser/carbine/practice{ pixel_y = 5 @@ -26822,17 +27331,6 @@ }, /turf/open/floor/plating, /area/station/command/heads_quarters/qm) -"ikT" = ( -/obj/machinery/duct, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/sorting/mail{ - dir = 4 - }, -/obj/effect/mapping_helpers/mail_sorting/service/bar, -/obj/effect/turf_decal/tile/bar/opposingcorners, -/turf/open/floor/iron, -/area/station/service/bar) "ikW" = ( /obj/structure/railing/corner{ dir = 8 @@ -26890,6 +27388,14 @@ /obj/effect/spawner/random/structure/steam_vent, /turf/open/floor/plating, /area/station/maintenance/department/medical/morgue) +"imk" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment, +/obj/item/rack_parts, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "imy" = ( /obj/machinery/airalarm/directional/east, /turf/open/floor/iron/dark, @@ -26901,6 +27407,15 @@ /obj/item/clothing/mask/breath, /turf/open/floor/plating, /area/station/maintenance/department/medical/morgue) +"imI" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 9 + }, +/obj/item/kirbyplants/random, +/obj/machinery/light/warm/directional/south, +/obj/machinery/digital_clock/directional/south, +/turf/open/floor/wood/large, +/area/station/commons/lounge) "imO" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 8 @@ -26930,6 +27445,14 @@ /obj/structure/falsewall, /turf/open/floor/plating, /area/station/maintenance/port/lesser) +"int" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/cable, +/obj/structure/sign/departments/botany/directional/west, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/maintenance/starboard/lesser) "inE" = ( /turf/open/floor/iron/corner, /area/station/engineering/lobby) @@ -26941,6 +27464,37 @@ /obj/machinery/light/directional/north, /turf/open/floor/iron, /area/station/hallway/primary/central) +"inN" = ( +/obj/effect/turf_decal/tile/green/opposingcorners{ + dir = 1 + }, +/obj/effect/turf_decal/tile/blue/opposingcorners, +/obj/effect/turf_decal/siding/white{ + dir = 1 + }, +/obj/structure/cable, +/obj/machinery/button/door/directional/south{ + id = "minecraft_shutter"; + req_one_access = list("hydroponics", "kitchen"); + name = "Cart Access"; + desc = "Opens the railway leading into the Kitchen Coldroom." + }, +/obj/structure/minecart_rail/railbreak{ + dir = 4 + }, +/obj/structure/closet/crate/miningcar{ + name = "delivery cart"; + desc = "Used for quick transit of fresh produce to the kitchen. Just give it a shove." + }, +/obj/item/storage/bag/plants, +/turf/open/floor/iron, +/area/station/service/hydroponics) +"inP" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/medical/morgue) "inQ" = ( /obj/structure/table/wood, /obj/item/paper_bin/carbon{ @@ -26970,9 +27524,9 @@ }, /area/station/hallway/secondary/entry) "ioi" = ( -/obj/structure/bed/dogbed/lia, /obj/structure/cable, -/mob/living/basic/carp/pet/lia, +/mob/living/basic/bear/snow/misha, +/obj/structure/bed/dogbed/misha, /turf/open/floor/carpet/royalblue, /area/station/command/heads_quarters/hos) "iol" = ( @@ -26989,6 +27543,10 @@ }, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/aisat_interior) +"ion" = ( +/obj/effect/spawner/random/trash/mess, +/turf/open/floor/stone, +/area/station/service/bar/atrium) "ior" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -27059,6 +27617,18 @@ "ipf" = ( /turf/open/genturf, /area/icemoon/underground/unexplored/rivers/deep/shoreline) +"ipg" = ( +/obj/structure/railing{ + dir = 4 + }, +/obj/effect/turf_decal/siding/white{ + dir = 4 + }, +/obj/structure/curtain/cloth/fancy/mechanical/start_closed{ + id = "cantena_curtains" + }, +/turf/open/floor/wood, +/area/station/commons/lounge) "ipw" = ( /obj/structure/rack, /obj/effect/spawner/random/maintenance/two, @@ -27143,18 +27713,15 @@ /obj/structure/lattice/catwalk, /turf/open/openspace, /area/station/science/ordnance/office) +"iqA" = ( +/obj/effect/spawner/random/structure/steam_vent, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "iqC" = ( /obj/structure/table, /obj/item/flashlight/lamp, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) -"iqL" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red/full, -/turf/open/floor/iron/large, -/area/station/service/kitchen/diner) "irp" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -27173,22 +27740,6 @@ /obj/structure/grille, /turf/open/floor/plating, /area/station/maintenance/aft/lesser) -"irz" = ( -/obj/machinery/door/airlock/external{ - glass = 1; - name = "Service External Airlock"; - opacity = 0 - }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 4 - }, -/obj/structure/sign/warning/cold_temp/directional/north, -/obj/structure/sign/warning/gas_mask/directional/south{ - desc = "A sign that warns of dangerous gasses in the air, instructing you to wear internals." - }, -/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, -/turf/open/floor/plating, -/area/station/maintenance/starboard/lesser) "irA" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /turf/open/floor/iron/white, @@ -27284,6 +27835,10 @@ /obj/machinery/airalarm/directional/north, /turf/open/floor/iron, /area/station/hallway/primary/central) +"isj" = ( +/obj/effect/decal/cleanable/oil, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "isl" = ( /obj/structure/fence/door{ name = "graveyard" @@ -27411,6 +27966,10 @@ /obj/effect/turf_decal/trimline/blue/filled/warning{ dir = 8 }, +/obj/machinery/chem_master/condimaster{ + desc = "Used to separate out liquids - useful for purifying botanical extracts. Also dispenses condiments."; + name = "SapMaster XP" + }, /turf/open/floor/iron, /area/station/service/hydroponics) "iuH" = ( @@ -27439,6 +27998,11 @@ /obj/effect/landmark/start/hangover, /turf/open/floor/iron, /area/station/hallway/primary/central) +"ivp" = ( +/obj/structure/flora/bush/flowers_yw/style_random, +/obj/structure/flora/bush/sparsegrass/style_random, +/turf/open/floor/grass, +/area/station/service/hydroponics) "ivq" = ( /obj/structure/cable, /obj/effect/turf_decal/tile/red{ @@ -27446,13 +28010,22 @@ }, /turf/open/floor/iron, /area/mine/laborcamp/security) -"ivr" = ( -/turf/open/floor/grass, -/area/station/service/hydroponics) "ivB" = ( /obj/structure/closet/emcloset, /turf/open/floor/iron, /area/station/hallway/primary/starboard) +"ivC" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/blue/filled/warning{ + dir = 4 + }, +/obj/structure/railing{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/service/hydroponics) "ivF" = ( /turf/closed/wall, /area/station/maintenance/disposal) @@ -27467,6 +28040,11 @@ }, /turf/open/floor/wood, /area/station/service/library) +"ivJ" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/obj/structure/sign/poster/official/random/directional/north, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) "iwf" = ( /turf/closed/wall/r_wall, /area/mine/mechbay) @@ -27477,9 +28055,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/maintenance/port/fore) -"iwq" = ( -/turf/open/floor/engine/vacuum, -/area/station/science/ordnance) "iwx" = ( /obj/machinery/door/airlock/maintenance{ name = "Xenobiology Maintenance" @@ -27530,6 +28105,21 @@ }, /turf/open/floor/iron/grimy, /area/station/commons/vacant_room/office) +"ixp" = ( +/obj/machinery/door/airlock/wood{ + name = "Bar Backroom" + }, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/effect/turf_decal/siding/wood, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/access/all/service/bar, +/turf/open/floor/iron/dark/textured_half, +/area/station/service/bar/backroom) "ixu" = ( /obj/machinery/camera/directional/north{ c_tag = "Teleporter" @@ -27562,15 +28152,6 @@ /obj/machinery/light/small/directional/east, /turf/open/floor/iron/dark, /area/station/engineering/engine_smes) -"ixH" = ( -/obj/structure/railing/corner{ - dir = 1 - }, -/obj/machinery/door/firedoor/border_only{ - dir = 1 - }, -/turf/open/floor/wood/parquet, -/area/station/service/bar/atrium) "ixZ" = ( /obj/machinery/door/airlock/command/glass{ name = "Chief Engineer" @@ -27584,13 +28165,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/ce) -"iyb" = ( -/obj/structure/chair/wood{ - dir = 4 - }, -/obj/machinery/barsign/all_access/directional/north, -/turf/open/floor/wood/parquet, -/area/station/commons/lounge) "iyd" = ( /obj/effect/turf_decal/trimline/neutral/filled/line{ dir = 9 @@ -27619,6 +28193,7 @@ "iyF" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/landmark/blobstart, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/medical/morgue) "iyK" = ( @@ -27687,26 +28262,6 @@ "izC" = ( /turf/closed/wall, /area/station/service/bar/atrium) -"izF" = ( -/obj/effect/turf_decal/bot{ - dir = 1 - }, -/obj/structure/cable, -/obj/structure/table, -/obj/item/storage/box/lights/mixed, -/obj/item/stack/cable_coil, -/obj/item/stack/cable_coil, -/obj/item/stock_parts/cell/emproof, -/obj/item/stock_parts/cell/emproof{ - pixel_x = 6; - pixel_y = -2 - }, -/obj/machinery/light_switch/directional/south{ - pixel_x = 10 - }, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, -/area/station/engineering/engine_smes) "izI" = ( /obj/machinery/door/airlock/maintenance, /obj/structure/disposalpipe/segment, @@ -27727,16 +28282,18 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/medical/chemistry) +"izU" = ( +/obj/structure/table/wood, +/obj/item/instrument/saxophone, +/obj/item/instrument/piano_synth, +/obj/effect/turf_decal/siding/wood, +/turf/open/floor/iron/grimy, +/area/station/commons/lounge) "izY" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/security/prison/visit) -"iAa" = ( -/obj/effect/turf_decal/caution/stand_clear, -/obj/effect/turf_decal/stripes/line, -/turf/open/floor/iron/dark/textured, -/area/station/hallway/secondary/service) "iAf" = ( /turf/closed/wall/mineral/wood, /area/station/maintenance/space_hut/cabin) @@ -27781,20 +28338,6 @@ }, /turf/open/floor/iron/dark, /area/mine/laborcamp) -"iAJ" = ( -/obj/effect/turf_decal/siding/white{ - dir = 8 - }, -/obj/structure/table, -/obj/item/reagent_containers/condiment/saltshaker{ - pixel_x = -3 - }, -/obj/item/reagent_containers/condiment/peppermill{ - pixel_x = 3 - }, -/obj/effect/turf_decal/tile/red/full, -/turf/open/floor/iron/large, -/area/station/service/kitchen/diner) "iAO" = ( /obj/effect/turf_decal/trimline/blue/filled/corner{ dir = 1 @@ -27878,6 +28421,10 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/cargo/sorting) +"iBM" = ( +/obj/structure/chair/wood, +/turf/open/floor/wood/parquet, +/area/station/service/bar/atrium) "iBO" = ( /obj/machinery/modular_computer/preset/civilian{ dir = 4 @@ -27886,10 +28433,6 @@ dir = 4 }, /area/station/science/explab) -"iCe" = ( -/obj/machinery/atmospherics/pipe/smart/simple/dark/visible, -/turf/closed/wall/r_wall, -/area/station/science/ordnance) "iCg" = ( /obj/effect/turf_decal/stripes/corner{ dir = 1 @@ -27929,15 +28472,6 @@ }, /turf/open/floor/plating, /area/station/science/robotics/lab) -"iCC" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) "iCD" = ( /obj/machinery/door/airlock/external{ name = "External Access" @@ -27956,13 +28490,16 @@ }, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) -"iCQ" = ( -/obj/structure/closet/lasertag/red, -/obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ +"iCS" = ( +/obj/effect/turf_decal/siding/wood{ dir = 4 }, -/turf/open/floor/iron, -/area/station/commons/fitness) +/obj/structure/chair/stool/bar/directional/east, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/turf/open/floor/stone, +/area/station/service/bar/atrium) "iCX" = ( /obj/machinery/power/solar_control{ dir = 4; @@ -27972,11 +28509,6 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/solars/port/aft) -"iDg" = ( -/obj/machinery/duct, -/obj/effect/turf_decal/tile/bar/opposingcorners, -/turf/open/floor/iron, -/area/station/service/bar) "iDp" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/closed/wall, @@ -27996,6 +28528,25 @@ /obj/item/kirbyplants/random, /turf/open/floor/wood, /area/station/security/prison/rec) +"iDv" = ( +/obj/effect/turf_decal/siding/white{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics) +"iDx" = ( +/obj/structure/railing/wooden_fence{ + dir = 4 + }, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/explored) +"iDB" = ( +/obj/structure/table/wood, +/obj/item/circuitboard/machine/fax, +/obj/structure/frame/machine, +/obj/item/stack/cable_coil/five, +/turf/open/floor/plating, +/area/station/maintenance/starboard/lesser) "iDG" = ( /obj/machinery/door/window/left/directional/east{ name = "Containment Pen 3"; @@ -28007,6 +28558,16 @@ /obj/effect/turf_decal/delivery, /turf/open/floor/iron, /area/station/science/xenobiology) +"iDK" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/wood, +/area/station/commons/lounge) "iDQ" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/smart/simple/dark/visible, @@ -28065,14 +28626,11 @@ dir = 4 }, /area/station/hallway/secondary/entry) -"iFc" = ( -/obj/effect/turf_decal/tile/red/half{ - dir = 4 - }, -/turf/open/floor/iron/half{ - dir = 1 - }, -/area/station/hallway/secondary/service) +"iEY" = ( +/obj/machinery/restaurant_portal/bar, +/obj/effect/turf_decal/delivery/red, +/turf/open/floor/wood/parquet, +/area/station/service/bar/atrium) "iFe" = ( /obj/structure/cable, /turf/open/floor/iron/dark/smooth_half, @@ -28105,11 +28663,29 @@ }, /turf/open/floor/iron, /area/station/command/bridge) +"iFz" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/duct, +/obj/machinery/holopad, +/turf/open/floor/wood, +/area/station/hallway/secondary/service) "iFL" = ( /obj/structure/bed/dogbed/renault, /mob/living/basic/pet/fox/renault, /turf/open/floor/wood, /area/station/command/heads_quarters/captain) +"iFQ" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/blue/filled/warning{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics) "iFX" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -28144,6 +28720,14 @@ }, /turf/open/floor/iron, /area/station/command/bridge) +"iGU" = ( +/obj/machinery/camera/directional/west{ + c_tag = "Xenobiology Test Chamber"; + network = list("ss13","test","rd","xeno") + }, +/obj/machinery/light/directional/west, +/turf/open/floor/engine/xenobio, +/area/station/science/xenobiology) "iHc" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 8 @@ -28163,19 +28747,6 @@ "iHp" = ( /turf/closed/wall/r_wall, /area/station/ai_monitored/turret_protected/ai) -"iHy" = ( -/obj/structure/chair/wood{ - dir = 4 - }, -/obj/effect/landmark/start/bartender, -/obj/effect/turf_decal/tile/bar/opposingcorners, -/turf/open/floor/iron, -/area/station/service/bar/backroom) -"iHz" = ( -/obj/machinery/power/apc/auto_name/directional/north, -/obj/structure/cable, -/turf/open/floor/plating, -/area/station/maintenance/fore) "iHV" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, @@ -28201,22 +28772,29 @@ /obj/machinery/light/cold/directional/west, /turf/open/floor/iron/dark/smooth_large, /area/station/medical/storage) -"iIa" = ( -/obj/structure/cable, -/obj/structure/railing, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) "iIe" = ( /obj/machinery/power/apc/auto_name/directional/west, /obj/structure/disposalpipe/segment, /obj/structure/cable, /turf/open/floor/iron/white, /area/station/science/robotics/lab) +"iIk" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/stripes/white/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/white/line{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark/textured, +/area/station/hallway/primary/starboard) "iIs" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/smart/simple/dark/visible, @@ -28225,6 +28803,15 @@ }, /turf/open/floor/iron, /area/station/maintenance/disposal/incinerator) +"iIv" = ( +/obj/effect/decal/cleanable/dirt, +/obj/item/reagent_containers/cup/bucket{ + pixel_y = 10; + pixel_x = -4 + }, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "iIA" = ( /obj/effect/turf_decal/bot, /turf/open/floor/iron, @@ -28237,12 +28824,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central) -"iIW" = ( -/obj/structure/table, -/obj/item/plant_analyzer, -/obj/item/stock_parts/cell/high, -/turf/open/floor/plating, -/area/station/engineering/storage/tech) "iJl" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/effect/turf_decal/siding/wood{ @@ -28444,29 +29025,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/engineering/atmos/mix) -"iMg" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/machinery/light/small/directional/east, -/obj/machinery/duct, -/turf/open/floor/wood/tile, -/area/station/service/theater) -"iMj" = ( -/obj/structure/closet/lasertag/blue, -/obj/effect/landmark/start/hangover/closet, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/commons/fitness) -"iMo" = ( -/obj/structure/cable, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/central) "iMp" = ( /obj/machinery/status_display/ai/directional/east, /turf/open/floor/circuit, @@ -28530,19 +29088,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/science/genetics) -"iNt" = ( -/obj/machinery/vending/hydroseeds{ - slogan_delay = 700 - }, -/obj/effect/turf_decal/trimline/green/filled/line, -/obj/effect/turf_decal/trimline/blue/filled/warning, -/obj/effect/turf_decal/tile/green/half/contrasted{ - dir = 1 - }, -/turf/open/floor/iron/dark/side{ - dir = 1 - }, -/area/station/service/hydroponics) "iNy" = ( /obj/structure/chair{ dir = 4 @@ -28655,6 +29200,17 @@ }, /turf/open/floor/iron/dark, /area/station/commons/storage/mining) +"iPP" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners, +/obj/effect/landmark/start/bartender, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/landmark/event_spawn, +/obj/machinery/duct, +/turf/open/floor/iron, +/area/station/service/bar) "iPR" = ( /obj/structure/closet/emcloset, /turf/open/floor/plating, @@ -28665,20 +29221,6 @@ dir = 4 }, /area/station/security/brig/entrance) -"iQf" = ( -/obj/machinery/door/airlock/external{ - name = "Service Hall Exit" - }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ - cycle_id = "service-hall-external" - }, -/obj/structure/sign/warning/cold_temp/directional/north, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/effect/mapping_helpers/airlock/access/all/service/general, -/turf/open/floor/iron/dark/textured, -/area/station/hallway/secondary/service) "iQj" = ( /obj/item/radio/intercom/directional/north, /obj/structure/table/glass, @@ -28752,6 +29294,9 @@ }, /turf/open/floor/iron/white/corner, /area/station/hallway/secondary/entry) +"iRa" = ( +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/maintenance/fore) "iRc" = ( /obj/structure/table, /obj/item/stack/cable_coil{ @@ -28831,6 +29376,20 @@ /obj/structure/sign/warning/radiation/directional/west, /turf/open/floor/iron/dark, /area/station/engineering/atmos/hfr_room) +"iRS" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/starboard/lesser) "iRV" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -28843,12 +29402,6 @@ /obj/structure/cable, /turf/open/floor/plating, /area/mine/laborcamp/security) -"iSi" = ( -/obj/effect/landmark/generic_maintenance_landmark, -/obj/structure/cable, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/turf/open/floor/plating, -/area/station/maintenance/department/crew_quarters/bar) "iSk" = ( /obj/structure/lattice/catwalk, /obj/structure/railing{ @@ -28936,6 +29489,21 @@ /obj/effect/spawner/random/maintenance, /turf/open/floor/plating, /area/station/maintenance/department/medical/morgue) +"iTE" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/red/filled/corner{ + dir = 8 + }, +/obj/machinery/holopad, +/obj/effect/landmark/start/depsec/medical, +/obj/machinery/computer/security/telescreen/cmo/directional/east, +/turf/open/floor/iron/dark/smooth_large, +/area/station/security/checkpoint/medical) "iTJ" = ( /obj/structure/table, /obj/item/paper_bin{ @@ -28963,6 +29531,13 @@ /obj/machinery/light/small/directional/east, /turf/open/floor/engine/plasma, /area/station/engineering/atmos) +"iUi" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/machinery/duct, +/turf/open/floor/wood/large, +/area/station/service/bar) "iUm" = ( /obj/effect/mapping_helpers/burnt_floor, /turf/open/floor/plating, @@ -29022,10 +29597,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/engineering/supermatter) -"iUO" = ( -/obj/structure/flora/bush/flowers_pp/style_random, -/turf/open/floor/grass, -/area/station/service/hydroponics) "iUT" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -29064,6 +29635,13 @@ }, /turf/open/floor/iron, /area/mine/eva/lower) +"iVu" = ( +/obj/effect/turf_decal/tile/red{ + dir = 4 + }, +/obj/machinery/airalarm/directional/north, +/turf/open/floor/iron/textured, +/area/station/security/brig) "iVA" = ( /obj/effect/landmark/start/shaft_miner, /turf/open/floor/iron, @@ -29100,38 +29678,35 @@ /obj/machinery/light/small/dim/directional/south, /turf/open/floor/plating, /area/station/maintenance/department/chapel) -"iWr" = ( -/turf/closed/wall, -/area/station/service/kitchen/diner) "iWI" = ( /obj/structure/lattice/catwalk, /obj/structure/window/reinforced/spawner/directional/south, /obj/structure/reagent_dispensers/watertank, /turf/open/openspace, /area/station/science/xenobiology) +"iWK" = ( +/obj/vehicle/ridden/wheelchair{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/blue/filled/end{ + dir = 1 + }, +/obj/structure/window/reinforced/spawner/directional/north, +/obj/item/radio/intercom/directional/west, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron/large, +/area/station/medical/medbay/aft) "iWM" = ( /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/aft/lesser) "iWN" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/light/dim/directional/north, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/newscaster/directional/north, +/obj/item/surgery_tray/full/morgue, +/obj/structure/table/reinforced, /turf/open/floor/iron/dark, /area/station/medical/morgue) -"iWO" = ( -/obj/structure/table, -/obj/machinery/cell_charger, -/obj/item/stock_parts/cell/high, -/obj/machinery/requests_console/auto_name/directional/north, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/station/commons/storage/primary) "iWP" = ( /obj/effect/turf_decal/trimline/blue/filled/warning{ dir = 1 @@ -29189,6 +29764,13 @@ }, /turf/open/floor/iron/white, /area/station/science/xenobiology) +"iXB" = ( +/obj/effect/turf_decal/siding/wideplating/dark{ + dir = 1 + }, +/obj/machinery/hydroponics/soil, +/turf/open/floor/grass, +/area/station/maintenance/starboard/fore) "iXC" = ( /obj/machinery/power/apc/auto_name/directional/north, /obj/structure/cable, @@ -29199,20 +29781,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/department/chapel) -"iXF" = ( -/obj/structure/window/reinforced/spawner/directional/south, -/obj/structure/window/reinforced/spawner/directional/east, -/obj/effect/turf_decal/siding/thinplating/dark{ - dir = 6 - }, -/turf/open/floor/carpet, -/area/station/service/theater) -"iXH" = ( -/obj/effect/turf_decal/siding/white, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/red/full, -/turf/open/floor/iron/large, -/area/station/service/kitchen/diner) "iXP" = ( /obj/machinery/holopad, /obj/effect/turf_decal/box/white{ @@ -29223,16 +29791,6 @@ "iYb" = ( /turf/closed/wall, /area/station/maintenance/central/greater) -"iYi" = ( -/obj/structure/table/reinforced, -/obj/machinery/door/poddoor/shutters/preopen{ - dir = 8; - id = "kitchencounter"; - name = "Kitchen Counter Shutters" - }, -/obj/machinery/door/firedoor, -/turf/open/floor/iron/kitchen/diagonal, -/area/station/service/kitchen) "iYs" = ( /obj/structure/disposalpipe/segment, /obj/effect/turf_decal/trimline/blue/filled/line{ @@ -29275,6 +29833,12 @@ }, /turf/open/floor/iron/textured, /area/station/security/brig) +"iYY" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/sink/directional/south, +/obj/structure/mirror/directional/north, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "iZl" = ( /obj/effect/spawner/structure/window, /obj/machinery/door/poddoor/shutters/preopen{ @@ -29286,6 +29850,7 @@ /area/station/science/research) "iZm" = ( /obj/structure/chair/wood, +/obj/effect/mapping_helpers/no_atoms_ontop, /turf/open/misc/asteroid/snow/icemoon, /area/icemoon/underground/explored) "iZn" = ( @@ -29296,16 +29861,6 @@ /obj/effect/turf_decal/trimline/yellow/line, /turf/open/floor/iron/dark/side, /area/station/security/prison/workout) -"iZp" = ( -/obj/structure/chair/sofa/right/brown{ - dir = 4 - }, -/obj/effect/turf_decal/siding/white{ - dir = 4 - }, -/obj/effect/turf_decal/tile/bar/opposingcorners, -/turf/open/floor/iron, -/area/station/hallway/secondary/service) "iZq" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -29324,16 +29879,16 @@ /obj/machinery/airalarm/directional/south, /turf/open/floor/iron/white, /area/station/medical/cryo) -"iZy" = ( -/obj/effect/turf_decal/siding/wideplating/dark{ - dir = 1 - }, -/obj/machinery/hydroponics/constructable, -/turf/open/floor/grass, -/area/station/maintenance/starboard/fore) "iZz" = ( /turf/open/misc/asteroid/snow/icemoon, /area/icemoon/surface/outdoors/labor_camp) +"iZD" = ( +/obj/effect/turf_decal/siding/white{ + dir = 1 + }, +/obj/machinery/griddle, +/turf/open/floor/iron/white/smooth_large, +/area/station/service/kitchen) "iZO" = ( /obj/machinery/status_display/ai/directional/west, /obj/effect/turf_decal/tile/yellow/opposingcorners, @@ -29369,6 +29924,12 @@ }, /turf/open/floor/iron/freezer, /area/station/commons/toilet/locker) +"jae" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) "jag" = ( /obj/machinery/ai_slipper{ uses = 10 @@ -29388,6 +29949,10 @@ /obj/effect/landmark/start/head_of_personnel, /turf/open/floor/iron, /area/station/command/heads_quarters/hop) +"jas" = ( +/obj/structure/fence, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/surface/outdoors/nospawn) "jaw" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -29477,6 +30042,23 @@ /obj/effect/turf_decal/tile/blue/full, /turf/open/floor/iron/white/smooth_large, /area/station/medical/storage) +"jbB" = ( +/obj/structure/beebox, +/obj/machinery/status_display/ai/directional/north, +/obj/effect/turf_decal/siding/thinplating/dark/corner, +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 9 + }, +/obj/effect/turf_decal/trimline/blue/filled/warning{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/camera{ + c_tag = "Service - Botany Apiary"; + dir = 9 + }, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics) "jbC" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/stripes/line{ @@ -29532,6 +30114,17 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/engineering/atmos/pumproom) +"jcy" = ( +/obj/machinery/camera/directional/north{ + c_tag = "Central Hallway North-East" + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/obj/structure/sign/poster/official/random/directional/north, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central) "jcC" = ( /obj/machinery/requests_console/directional/north{ department = "Ordnance"; @@ -29594,6 +30187,22 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/entry) +"jed" = ( +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/stripes/white/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/white/line{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark/textured, +/area/station/hallway/primary/starboard) +"jee" = ( +/obj/structure/girder, +/obj/effect/spawner/random/structure/grille, +/turf/open/floor/plating, +/area/station/maintenance/fore) "jeh" = ( /obj/machinery/atmospherics/components/unary/outlet_injector/monitored/oxygen_input{ dir = 1 @@ -29655,35 +30264,19 @@ "jfc" = ( /turf/closed/wall, /area/station/command/heads_quarters/hop) -"jfN" = ( -/obj/structure/stairs/south, -/obj/structure/railing{ - dir = 8 - }, -/turf/open/floor/wood/parquet, -/area/station/commons/lounge) "jfR" = ( /obj/effect/turf_decal/stripes/line, /turf/open/floor/iron, /area/station/command/gateway) -"jfZ" = ( -/obj/effect/turf_decal/siding/white{ - dir = 4 - }, -/turf/open/floor/iron/white/smooth_large, -/area/station/service/kitchen/diner) -"jgh" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/public/glass{ - name = "Canteen" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 +"jgd" = ( +/obj/machinery/camera/directional/north{ + c_tag = "Starboard Primary Hallway West" }, -/turf/open/floor/iron/textured_half{ - dir = 1 +/obj/structure/sign/nanotrasen{ + pixel_y = 32 }, -/area/station/service/kitchen/diner) +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) "jgl" = ( /obj/effect/turf_decal/trimline/dark_blue/corner{ dir = 1 @@ -29727,6 +30320,12 @@ /obj/effect/turf_decal/tile/yellow/opposingcorners, /turf/open/floor/iron/white, /area/station/maintenance/port/fore) +"jhu" = ( +/obj/effect/spawner/random/maintenance/three, +/obj/structure/closet/crate/wooden, +/obj/effect/spawner/random/clothing/twentyfive_percent_cyborg_mask, +/turf/open/floor/plating, +/area/station/maintenance/starboard/lesser) "jhy" = ( /obj/effect/turf_decal/tile/brown, /turf/open/floor/iron, @@ -29771,6 +30370,54 @@ /obj/effect/landmark/blobstart, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) +"jik" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 6 + }, +/obj/effect/turf_decal/trimline/blue/filled/warning{ + dir = 6 + }, +/obj/structure/table/glass, +/obj/machinery/light/small/directional/east, +/obj/machinery/firealarm/directional/east, +/obj/item/food/grown/poppy{ + pixel_y = -1; + pixel_x = 3 + }, +/obj/item/food/grown/poppy/geranium{ + pixel_y = 5; + pixel_x = 2 + }, +/obj/item/food/grown/poppy/lily{ + pixel_x = -2 + }, +/turf/open/floor/iron, +/area/station/service/hydroponics) +"jiD" = ( +/obj/effect/turf_decal/tile/green/opposingcorners{ + dir = 1 + }, +/obj/effect/turf_decal/tile/blue/opposingcorners, +/obj/structure/table/glass, +/obj/item/book/manual/hydroponics_pod_people, +/obj/structure/extinguisher_cabinet/directional/west, +/obj/structure/sign/poster/contraband/kudzu/directional/north, +/obj/machinery/light/small/directional/west, +/obj/item/plant_analyzer, +/obj/item/watertank{ + pixel_y = -3; + pixel_x = -5 + }, +/turf/open/floor/iron, +/area/station/service/hydroponics) +"jiU" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/turf/open/floor/iron, +/area/station/commons/fitness) "jjk" = ( /obj/structure/lattice/catwalk, /obj/structure/railing{ @@ -29811,14 +30458,6 @@ /obj/structure/cable, /turf/open/floor/iron/white, /area/station/medical/chemistry) -"jjG" = ( -/obj/item/instrument/harmonica, -/obj/item/instrument/guitar, -/obj/machinery/airalarm/directional/north, -/obj/machinery/firealarm/directional/west, -/obj/structure/table/wood, -/turf/open/floor/wood/tile, -/area/station/service/theater) "jjJ" = ( /obj/machinery/camera/directional/west{ c_tag = "Labor Camp External West"; @@ -29833,12 +30472,6 @@ /obj/structure/mirror/directional/east, /turf/open/floor/iron/freezer, /area/station/commons/toilet/locker) -"jjW" = ( -/obj/machinery/vending/wardrobe/bar_wardrobe, -/obj/item/radio/intercom/directional/east, -/obj/effect/turf_decal/tile/bar/opposingcorners, -/turf/open/floor/iron, -/area/station/service/bar/backroom) "jkn" = ( /obj/effect/turf_decal/tile/dark/fourcorners, /turf/open/floor/iron, @@ -29846,34 +30479,30 @@ "jko" = ( /obj/structure/railing, /obj/structure/rack, -/obj/item/gun/energy/e_gun/dragnet{ - pixel_y = 4 - }, -/obj/item/gun/energy/e_gun/dragnet, /obj/structure/cable, /obj/machinery/door/firedoor/border_only, /obj/effect/turf_decal/tile/red/half/contrasted{ dir = 1 }, +/obj/effect/spawner/random/armory/dragnet, /turf/open/floor/iron/dark/textured, /area/station/ai_monitored/security/armory/upper) -"jkx" = ( -/obj/machinery/computer/security/telescreen/engine{ - dir = 8; - pixel_x = 24 - }, -/obj/machinery/camera/directional/east{ - c_tag = "Security Post - Engineering" - }, -/obj/structure/cable, -/obj/effect/turf_decal/tile/red, -/turf/open/floor/iron/dark, -/area/station/security/checkpoint/engineering) "jkH" = ( /obj/structure/training_machine, /obj/effect/landmark/blobstart, /turf/open/floor/engine, /area/station/science/explab) +"jkK" = ( +/obj/structure/railing/wooden_fence{ + dir = 9 + }, +/turf/open/misc/hay/icemoon, +/area/icemoon/underground/explored) +"jkN" = ( +/obj/effect/spawner/random/entertainment/arcade, +/obj/machinery/status_display/ai/directional/north, +/turf/open/floor/eighties, +/area/station/commons/lounge) "jkS" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible, @@ -29917,6 +30546,13 @@ /obj/structure/railing/corner, /turf/open/lava/plasma/ice_moon, /area/icemoon/underground/explored) +"jlv" = ( +/obj/structure/table/wood, +/obj/effect/turf_decal/siding/wood, +/obj/effect/spawner/random/entertainment/musical_instrument, +/obj/item/instrument/harmonica, +/turf/open/floor/iron/grimy, +/area/station/commons/lounge) "jly" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 1 @@ -29948,6 +30584,17 @@ /obj/machinery/light/small/directional/east, /turf/open/floor/iron/freezer, /area/station/commons/toilet) +"jlT" = ( +/obj/structure/chair{ + desc = "Aw geez, I wonder what the chef's cooking up in there!"; + dir = 1; + name = "The Peanut's Gallery" + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) "jlV" = ( /obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ dir = 4 @@ -29969,6 +30616,13 @@ }, /turf/open/floor/iron/cafeteria, /area/mine/laborcamp) +"jmo" = ( +/obj/effect/turf_decal/weather/snow/corner{ + dir = 9 + }, +/obj/machinery/light/small/directional/east, +/turf/open/floor/plating/snowed/icemoon, +/area/icemoon/underground/explored) "jms" = ( /obj/structure/cable, /obj/machinery/power/apc/auto_name/directional/west, @@ -29991,6 +30645,18 @@ "jmI" = ( /turf/closed/wall/r_wall, /area/station/security/prison/workout) +"jmJ" = ( +/obj/machinery/door/airlock/external, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 8 + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "chem-morgue-airlock" + }, +/obj/effect/mapping_helpers/airlock/access/any/medical/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/engineering/external, +/turf/open/floor/plating, +/area/station/medical/morgue) "jmR" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -30000,6 +30666,16 @@ }, /turf/open/floor/iron/grimy, /area/station/service/chapel/office) +"jnh" = ( +/obj/machinery/door/airlock{ + name = "Unisex Showers" + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/duct, +/turf/open/floor/iron/textured, +/area/station/commons/toilet) "jnR" = ( /obj/effect/spawner/structure/window/hollow/reinforced/middle{ dir = 4 @@ -30019,6 +30695,14 @@ }, /turf/open/floor/iron/white, /area/station/medical/storage) +"jnU" = ( +/obj/structure/sign/departments/botany/directional/east, +/obj/effect/turf_decal/tile/blue, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central) "jnV" = ( /obj/structure/closet/firecloset, /turf/open/floor/plating, @@ -30074,13 +30758,16 @@ /obj/machinery/power/apc/auto_name/directional/south, /turf/open/floor/plating, /area/station/maintenance/department/medical/morgue) -"joG" = ( -/obj/effect/landmark/event_spawn, -/obj/effect/turf_decal/siding/wideplating/dark{ - dir = 1 +"joW" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 10 }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, +/obj/effect/turf_decal/trimline/blue/filled/warning{ + dir = 10 + }, +/obj/structure/reagent_dispensers/watertank/high, +/obj/item/reagent_containers/cup/watering_can, +/turf/open/floor/iron/dark, /area/station/service/hydroponics) "jpd" = ( /obj/machinery/vending/coffee, @@ -30202,32 +30889,14 @@ }, /turf/open/floor/iron/white, /area/station/medical/pharmacy) -"jqJ" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/landmark/start/botanist, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/turf_decal/tile/green/half/contrasted{ - dir = 1 - }, -/turf/open/floor/iron/dark/side{ - dir = 1 - }, -/area/station/service/hydroponics) "jqT" = ( /turf/closed/wall/r_wall, /area/station/engineering/storage/tech) -"jrc" = ( -/obj/machinery/button/door/directional/east{ - id = "xenobio6"; - layer = 4; - name = "Xenobio Pen 6 Blast DOors"; - req_access = list("xenobiology") - }, -/turf/open/floor/iron/white, -/area/station/science/xenobiology) +"jqZ" = ( +/obj/effect/landmark/start/hangover, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) "jre" = ( /turf/closed/wall, /area/station/maintenance/starboard/lesser) @@ -30236,6 +30905,22 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/maintenance/aft/lesser) +"jrv" = ( +/obj/item/book/manual/wiki/barman_recipes{ + pixel_x = 5; + pixel_y = 6 + }, +/obj/item/reagent_containers/cup/rag, +/obj/structure/table/wood, +/obj/item/holosign_creator/robot_seat/bar{ + pixel_y = 6 + }, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/box/white/corners{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/service/bar) "jrI" = ( /obj/structure/transit_tube/curved/flipped, /obj/structure/cable, @@ -30317,34 +31002,23 @@ dir = 1 }, /area/station/hallway/primary/port) -"jth" = ( -/obj/structure/table, -/obj/item/assembly/prox_sensor{ - pixel_x = -8; - pixel_y = 4 - }, -/obj/item/assembly/prox_sensor{ - pixel_x = -8; - pixel_y = 4 +"jsR" = ( +/obj/machinery/door/airlock{ + name = "Bar" }, -/obj/item/assembly/prox_sensor{ - pixel_x = -8; - pixel_y = 4 +/obj/effect/turf_decal/siding/wood{ + dir = 8 }, -/obj/item/assembly/prox_sensor{ - pixel_x = -8; - pixel_y = 4 +/obj/effect/turf_decal/siding/wood{ + dir = 4 }, -/obj/item/stock_parts/cell/high, -/obj/item/stock_parts/cell/high, -/obj/item/crowbar, -/obj/item/radio/headset/headset_sci{ - pixel_x = -3 +/obj/machinery/duct, +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/access/all/service/bar, +/turf/open/floor/iron/dark/textured_half{ + dir = 1 }, -/obj/machinery/newscaster/directional/east, -/obj/machinery/light/directional/east, -/turf/open/floor/iron, -/area/station/science/robotics/lab) +/area/station/service/bar) "jtm" = ( /obj/machinery/porta_turret/ai{ dir = 4; @@ -30596,6 +31270,12 @@ /obj/machinery/atmospherics/pipe/smart/simple/purple/visible, /turf/open/floor/iron, /area/station/engineering/atmos) +"jwf" = ( +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/turf/open/floor/plating, +/area/station/maintenance/starboard/lesser) "jwj" = ( /obj/machinery/atmospherics/components/binary/pump{ dir = 8 @@ -30627,14 +31307,6 @@ /obj/effect/landmark/start/hangover, /turf/open/floor/iron, /area/station/hallway/primary/central) -"jwv" = ( -/obj/effect/turf_decal/tile/neutral/diagonal_edge, -/obj/structure/table, -/obj/machinery/processor{ - pixel_y = 6 - }, -/turf/open/floor/iron/kitchen/diagonal, -/area/station/service/kitchen) "jwx" = ( /obj/effect/turf_decal/tile/red/half/contrasted{ dir = 8 @@ -30662,6 +31334,10 @@ /obj/structure/cable, /turf/open/floor/carpet/red, /area/station/security/prison/work) +"jwQ" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/closed/wall/r_wall, +/area/station/science/ordnance/burnchamber) "jxb" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -30689,20 +31365,16 @@ /obj/structure/cable, /turf/open/floor/circuit, /area/station/ai_monitored/command/nuke_storage) +"jxr" = ( +/obj/machinery/restaurant_portal/restaurant, +/obj/effect/turf_decal/delivery/red, +/turf/open/floor/wood/parquet, +/area/station/service/bar/atrium) "jxv" = ( /obj/effect/landmark/start/paramedic, /obj/structure/cable, /turf/open/floor/iron/white, /area/station/medical/storage) -"jyh" = ( -/obj/structure/table/wood, -/obj/effect/turf_decal/siding/wood{ - dir = 8 - }, -/obj/effect/turf_decal/tile/bar/opposingcorners, -/obj/machinery/digital_clock/directional/south, -/turf/open/floor/iron, -/area/station/service/bar) "jyl" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -30733,6 +31405,14 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/iron/white, /area/station/medical/virology) +"jyE" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/fore) "jyL" = ( /obj/structure/cable, /obj/machinery/power/terminal{ @@ -30743,6 +31423,11 @@ /obj/machinery/light/small/directional/south, /turf/open/floor/iron/smooth, /area/mine/laborcamp/security) +"jyN" = ( +/obj/effect/spawner/random/structure/crate, +/obj/effect/spawner/random/maintenance/three, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "jyR" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/cable, @@ -30775,6 +31460,16 @@ /obj/effect/mapping_helpers/airlock/access/all/security/entrance, /turf/open/floor/iron, /area/station/security/brig/upper) +"jzR" = ( +/obj/structure/table/glass, +/obj/item/shovel/spade, +/obj/item/cultivator{ + pixel_x = 1; + pixel_y = 6 + }, +/obj/machinery/airalarm/directional/east, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "jzY" = ( /obj/machinery/airalarm/directional/west, /obj/effect/turf_decal/trimline/blue/filled/corner{ @@ -30834,13 +31529,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/space_hut/cabin) -"jBb" = ( -/obj/structure/chair/wood{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/wood/parquet, -/area/station/commons/lounge) "jBc" = ( /obj/machinery/dna_infuser, /obj/item/infuser_book, @@ -30876,11 +31564,6 @@ }, /turf/open/misc/asteroid/snow/icemoon, /area/icemoon/underground/explored) -"jBq" = ( -/obj/structure/flora/tree/jungle/style_random, -/obj/structure/flora/bush/jungle/a/style_random, -/turf/open/floor/grass, -/area/station/service/hydroponics) "jBB" = ( /obj/structure/kitchenspike, /turf/open/floor/plating/snowed/coldroom, @@ -30902,15 +31585,6 @@ /obj/effect/turf_decal/delivery, /turf/open/floor/iron, /area/station/engineering/atmos) -"jBU" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/wood/parquet, -/area/station/commons/lounge) "jCl" = ( /turf/open/floor/plating, /area/station/maintenance/starboard/aft) @@ -30954,17 +31628,6 @@ /obj/machinery/smartfridge/petri/preloaded, /turf/open/openspace, /area/station/science/xenobiology) -"jCF" = ( -/obj/effect/turf_decal/siding/wood, -/obj/structure/chair/wood{ - dir = 4 - }, -/obj/item/radio/intercom/directional/west{ - pixel_y = -9 - }, -/obj/effect/decal/cleanable/ash, -/turf/open/floor/stone, -/area/station/commons/lounge) "jCL" = ( /obj/structure/disposalpipe/trunk{ dir = 4 @@ -30973,6 +31636,12 @@ /obj/machinery/computer/security/telescreen/entertainment/directional/west, /turf/open/floor/iron/grimy, /area/station/service/chapel/office) +"jCM" = ( +/obj/structure/rack, +/obj/item/bouquet, +/obj/item/binoculars, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/explored) "jDc" = ( /obj/effect/spawner/random/vending/snackvend, /obj/structure/sign/departments/restroom/directional/south, @@ -31075,16 +31744,6 @@ /obj/machinery/light/small/directional/north, /turf/open/floor/iron/dark, /area/station/medical/virology) -"jEr" = ( -/obj/structure/table/wood, -/obj/item/camera, -/obj/item/taperecorder, -/obj/item/radio/intercom/directional/east, -/obj/structure/sign/painting/library_private{ - pixel_y = 32 - }, -/turf/open/floor/engine/cult, -/area/station/service/library) "jEs" = ( /obj/machinery/conveyor_switch/oneway{ id = "gulag"; @@ -31092,6 +31751,12 @@ }, /turf/open/floor/iron, /area/mine/laborcamp) +"jEA" = ( +/obj/machinery/light/small/directional/east, +/obj/item/pickaxe, +/obj/structure/closet/emcloset, +/turf/open/floor/plating, +/area/station/medical/morgue) "jEB" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/newscaster/directional/north, @@ -31112,22 +31777,18 @@ /obj/structure/rack, /turf/open/floor/iron, /area/station/command/gateway) -"jFA" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/structure/disposalpipe/segment, -/obj/machinery/firealarm/directional/east, -/obj/machinery/door/airlock{ - name = "Service Hall" - }, -/obj/effect/mapping_helpers/airlock/access/all/service/general, -/obj/effect/mapping_helpers/airlock/unres{ +"jFu" = ( +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk{ dir = 1 }, -/obj/machinery/door/firedoor, -/turf/open/floor/iron/dark/textured_half, -/area/station/hallway/secondary/service) +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/station/service/bar) +"jFA" = ( +/obj/effect/decal/cleanable/blood/bubblegum, +/turf/open/floor/iron/dark, +/area/station/medical/morgue) "jFJ" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ @@ -31157,6 +31818,11 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/engine, /area/station/engineering/supermatter/room) +"jFY" = ( +/obj/effect/spawner/random/entertainment/arcade, +/obj/machinery/digital_clock/directional/north, +/turf/open/floor/eighties, +/area/station/commons/lounge) "jFZ" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -31216,12 +31882,6 @@ /obj/item/clothing/suit/hazardvest, /turf/open/floor/plating, /area/station/maintenance/aft/greater) -"jHE" = ( -/obj/effect/turf_decal/siding/white/corner, -/obj/machinery/firealarm/directional/south, -/obj/effect/turf_decal/tile/bar/opposingcorners, -/turf/open/floor/iron, -/area/station/service/bar) "jHF" = ( /obj/item/trash/boritos/red, /obj/structure/cable, @@ -31233,17 +31893,13 @@ /obj/machinery/light/directional/north, /turf/open/floor/iron/freezer, /area/station/commons/toilet) -"jHK" = ( -/obj/machinery/seed_extractor, -/obj/effect/turf_decal/siding/white{ - dir = 9 - }, -/obj/effect/turf_decal/tile/green/opposingcorners{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue/opposingcorners, -/turf/open/floor/iron, -/area/station/service/hydroponics) +"jHL" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/plating, +/area/station/maintenance/starboard/lesser) "jHQ" = ( /obj/machinery/atmospherics/components/trinary/filter/atmos/co2{ dir = 1 @@ -31354,6 +32010,12 @@ }, /turf/open/floor/iron, /area/station/cargo/drone_bay) +"jIY" = ( +/obj/effect/turf_decal/tile/green{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central) "jIZ" = ( /obj/machinery/power/terminal{ dir = 1 @@ -31383,17 +32045,18 @@ }, /turf/open/floor/plating, /area/station/cargo/sorting) -"jJf" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/machinery/duct, -/obj/machinery/holopad, -/obj/structure/disposalpipe/junction{ +"jJr" = ( +/obj/machinery/door/firedoor, +/obj/structure/sign/warning/electric_shock/directional/south, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/stripes/white/line{ dir = 4 }, -/turf/open/floor/iron, -/area/station/hallway/secondary/service) +/obj/effect/turf_decal/stripes/white/line{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured, +/area/station/hallway/primary/central) "jJF" = ( /obj/structure/window/reinforced/spawner/directional/east, /obj/effect/turf_decal/stripes/line{ @@ -31411,6 +32074,17 @@ "jJM" = ( /turf/open/floor/glass, /area/station/security/lockers) +"jJR" = ( +/obj/machinery/firealarm/directional/south, +/obj/structure/table, +/obj/item/paper_bin{ + pixel_x = -3; + pixel_y = 7 + }, +/obj/item/pen, +/obj/effect/turf_decal/tile/blue/anticorner/contrasted, +/turf/open/floor/iron, +/area/station/command/bridge) "jJV" = ( /obj/structure/disposalpipe/segment{ dir = 5 @@ -31489,6 +32163,23 @@ /obj/effect/turf_decal/tile/green, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/ai_upload) +"jKL" = ( +/obj/structure/cable, +/obj/structure/holosign/barrier/atmos/sturdy, +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/door/poddoor/shutters{ + dir = 1; + id = "minecraft_shutter"; + name = "Cart Shutters" + }, +/obj/structure/minecart_rail{ + dir = 1 + }, +/turf/open/floor/iron/textured, +/area/station/service/kitchen/coldroom) "jKN" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -31504,19 +32195,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/port/greater) -"jKV" = ( -/obj/item/training_toolbox{ - pixel_y = 5 - }, -/obj/structure/table, -/obj/item/training_toolbox{ - pixel_y = -2 - }, -/obj/effect/turf_decal/tile/red/half/contrasted{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/commons/fitness) "jKY" = ( /turf/closed/mineral/random/snow/high_chance, /area/icemoon/underground/unexplored/rivers/deep/shoreline) @@ -31545,10 +32223,6 @@ }, /turf/open/floor/iron/dark/corner, /area/station/engineering/atmos/storage/gas) -"jLn" = ( -/obj/machinery/firealarm/directional/west, -/turf/open/floor/iron, -/area/station/service/hydroponics) "jLo" = ( /obj/structure/table, /obj/effect/decal/cleanable/dirt, @@ -31645,6 +32319,16 @@ }, /turf/open/floor/plating, /area/station/hallway/secondary/entry) +"jMD" = ( +/obj/effect/turf_decal/siding/white/corner{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics) +"jMJ" = ( +/obj/machinery/duct, +/turf/open/floor/wood, +/area/station/hallway/secondary/service) "jMY" = ( /obj/structure/cable, /obj/effect/turf_decal/trimline/dark_blue/line{ @@ -31654,6 +32338,10 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/engineering/atmos/mix) +"jNe" = ( +/obj/effect/spawner/structure/window/reinforced/tinted, +/turf/open/floor/plating, +/area/station/maintenance/starboard/lesser) "jNf" = ( /turf/closed/wall, /area/station/security/prison/garden) @@ -31684,22 +32372,6 @@ }, /turf/open/floor/plating/snowed/icemoon, /area/icemoon/surface/outdoors/nospawn) -"jOc" = ( -/obj/structure/sink/kitchen/directional/west, -/obj/effect/turf_decal/trimline/green/filled/line{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/blue/filled/warning{ - dir = 8 - }, -/obj/item/radio/intercom/directional/east{ - pixel_x = 31 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/station/service/hydroponics) "jOi" = ( /obj/effect/mapping_helpers/airlock/cyclelink_helper{ dir = 4 @@ -31766,21 +32438,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark/textured, /area/station/security/office) -"jOY" = ( -/obj/effect/turf_decal/stripes/line, -/obj/structure/reagent_dispensers/plumbed{ - dir = 8 - }, -/turf/open/floor/plating, -/area/station/hallway/secondary/service) -"jPa" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/structure/table, -/obj/item/aquarium_kit, -/turf/open/floor/plating, -/area/station/hallway/secondary/service) "jPc" = ( /obj/machinery/conveyor_switch/oneway{ id = "QMLoad2" @@ -31867,25 +32524,6 @@ /obj/machinery/space_heater, /turf/open/floor/plating, /area/station/maintenance/aft/lesser) -"jQo" = ( -/obj/effect/turf_decal/siding/white{ - dir = 10 - }, -/obj/effect/spawner/random/entertainment/arcade, -/turf/open/floor/iron, -/area/station/hallway/secondary/service) -"jQt" = ( -/obj/machinery/navbeacon{ - codes_txt = "delivery;dir=1"; - location = "Medbay" - }, -/obj/effect/turf_decal/bot, -/obj/structure/window/reinforced/spawner/directional/east{ - layer = 2.9 - }, -/obj/structure/plasticflaps/opaque, -/turf/open/floor/iron/dark, -/area/station/maintenance/department/medical/central) "jQz" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -31938,6 +32576,12 @@ /obj/item/gps/mining, /turf/open/floor/iron, /area/station/commons/storage/mining) +"jQM" = ( +/obj/machinery/power/apc/auto_name/directional/north, +/obj/structure/cable, +/obj/machinery/light/warm/directional/north, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics) "jQS" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, @@ -31969,11 +32613,13 @@ /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/ai_upload) "jRm" = ( -/obj/machinery/light/small/directional/east, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/effect/decal/cleanable/dirt, +/obj/structure/mannequin/skeleton, /turf/open/floor/iron/dark, /area/station/medical/morgue) +"jRt" = ( +/obj/effect/spawner/random/structure/grille, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "jRu" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -32042,14 +32688,16 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/engineering/storage/tech) -"jSm" = ( -/obj/effect/turf_decal/tile/neutral/diagonal_edge, +"jSp" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/decal/cleanable/dirt/dust, /obj/structure/disposalpipe/segment{ - dir = 6 + dir = 5 }, -/turf/open/floor/iron/kitchen/diagonal, -/area/station/service/kitchen) +/turf/open/floor/plating, +/area/station/maintenance/starboard/lesser) "jSt" = ( /obj/machinery/door/airlock/external{ name = "Security Yard"; @@ -32076,16 +32724,20 @@ /obj/structure/stairs/east, /turf/open/floor/plating, /area/station/hallway/primary/central/fore) -"jSM" = ( -/obj/effect/turf_decal/siding/thinplating/corner{ - dir = 1 - }, -/turf/open/misc/asteroid/snow/icemoon, -/area/icemoon/underground/explored) "jSQ" = ( /obj/structure/sign/poster/official/here_for_your_safety/directional/east, /turf/open/misc/asteroid/snow/icemoon, /area/icemoon/underground/explored) +"jSR" = ( +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 1 + }, +/obj/effect/turf_decal/box, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/science/ordnance) "jST" = ( /obj/machinery/door/window/right/directional/north{ name = "Bridge Delivery"; @@ -32137,13 +32789,6 @@ dir = 1 }, /area/station/engineering/atmos) -"jTV" = ( -/obj/structure/disposalpipe/segment{ - dir = 5 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/station/maintenance/department/crew_quarters/bar) "jTZ" = ( /obj/machinery/door/airlock/command/glass{ name = "Server Room" @@ -32168,6 +32813,14 @@ /obj/item/radio/intercom/directional/north, /turf/open/floor/iron/showroomfloor, /area/station/security/warden) +"jUv" = ( +/obj/machinery/hydroponics/constructable, +/obj/effect/turf_decal/tile/green/opposingcorners{ + dir = 1 + }, +/obj/effect/turf_decal/tile/blue/opposingcorners, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics) "jUB" = ( /turf/closed/wall, /area/station/medical/virology) @@ -32216,15 +32869,12 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/wood, /area/station/maintenance/fore) -"jVq" = ( -/obj/structure/railing/corner, -/obj/machinery/door/firedoor/border_only, -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/green{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/service/hydroponics) +"jVm" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/light/small/directional/west, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "jVx" = ( /obj/machinery/light/small/directional/south, /obj/structure/sign/warning/cold_temp/directional/south, @@ -32260,15 +32910,6 @@ /obj/effect/mapping_helpers/airlock/access/all/engineering/general, /turf/open/floor/plating, /area/station/maintenance/solars/port/aft) -"jWp" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment{ - dir = 9 - }, -/turf/open/floor/plating, -/area/station/maintenance/department/crew_quarters/bar) "jWt" = ( /obj/structure/cable, /obj/structure/closet/radiation, @@ -32281,13 +32922,6 @@ /obj/structure/sign/warning/gas_mask/directional/west, /turf/open/floor/plating, /area/station/engineering/main) -"jWO" = ( -/obj/item/soap/nanotrasen, -/obj/item/clothing/head/costume/sombrero/green, -/obj/structure/table/wood, -/obj/structure/sign/poster/random/directional/north, -/turf/open/floor/wood/tile, -/area/station/service/theater) "jWP" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 4 @@ -32332,10 +32966,6 @@ /obj/machinery/light/small/directional/west, /turf/open/floor/plating, /area/station/maintenance/port/greater) -"jXD" = ( -/obj/machinery/light/directional/north, -/turf/open/floor/iron, -/area/station/hallway/secondary/service) "jXH" = ( /obj/machinery/conveyor{ dir = 8; @@ -32406,6 +33036,12 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/engineering/atmos) +"jYI" = ( +/obj/effect/spawner/random/trash/mess, +/obj/structure/disposalpipe/segment, +/obj/structure/railing/corner/end, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "jYL" = ( /obj/structure/light_construct/directional/south, /obj/structure/sign/poster/contraband/random/directional/south, @@ -32426,6 +33062,10 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/ai_monitored/command/nuke_storage) +"jZc" = ( +/obj/machinery/light/small/dim/directional/east, +/turf/open/floor/stone, +/area/station/commons/lounge) "jZe" = ( /obj/structure/disposalpipe/segment{ dir = 6 @@ -32448,14 +33088,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/mine/eva) -"jZt" = ( -/obj/effect/turf_decal/tile/neutral/diagonal_edge, -/obj/structure/table, -/obj/machinery/reagentgrinder{ - pixel_y = 9 - }, -/turf/open/floor/iron/kitchen/diagonal, -/area/station/service/kitchen) "jZB" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/public/glass{ @@ -32478,6 +33110,14 @@ dir = 10 }, /area/station/security/prison) +"jZJ" = ( +/obj/machinery/vending/wardrobe/bar_wardrobe, +/obj/machinery/camera/directional/north{ + c_tag = "Service - Backroom" + }, +/obj/machinery/status_display/ai/directional/north, +/turf/open/floor/wood/parquet, +/area/station/service/bar/backroom) "jZM" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -32486,6 +33126,7 @@ /obj/structure/marker_beacon/burgundy{ name = "landing marker" }, +/obj/effect/mapping_helpers/no_atoms_ontop, /turf/open/misc/asteroid/snow/icemoon, /area/icemoon/underground/explored) "jZU" = ( @@ -32500,6 +33141,14 @@ /obj/machinery/light/small/directional/east, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) +"kav" = ( +/obj/effect/spawner/random/trash/moisture_trap, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "kaw" = ( /obj/machinery/photocopier, /obj/item/radio/intercom/directional/north, @@ -32516,6 +33165,11 @@ /obj/machinery/light/small/directional/east, /turf/open/floor/iron/white, /area/station/medical/virology) +"kaI" = ( +/obj/effect/spawner/random/maintenance/two, +/obj/structure/closet/crate, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "kaK" = ( /obj/effect/landmark/generic_maintenance_landmark, /turf/open/floor/iron, @@ -32546,6 +33200,7 @@ "kbp" = ( /obj/structure/marker_beacon/burgundy, /obj/structure/fluff/fokoff_sign, +/obj/effect/mapping_helpers/no_atoms_ontop, /turf/open/misc/asteroid/snow/icemoon, /area/icemoon/surface/outdoors/nospawn) "kbq" = ( @@ -32564,6 +33219,12 @@ }, /turf/open/floor/plating, /area/station/maintenance/port/aft) +"kbu" = ( +/obj/structure/reagent_dispensers/plumbed{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "kbx" = ( /obj/structure/table, /obj/effect/decal/cleanable/dirt, @@ -32597,20 +33258,6 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/wood, /area/station/maintenance/fore) -"kbU" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/door/airlock, -/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, -/obj/effect/mapping_helpers/airlock/unres{ - dir = 4 - }, -/turf/open/floor/plating, -/area/station/maintenance/department/crew_quarters/bar) "kcc" = ( /obj/machinery/camera/directional/west{ c_tag = "Security - Infirmary" @@ -32647,6 +33294,16 @@ /obj/machinery/light/directional/west, /turf/open/floor/iron, /area/station/engineering/storage/tech) +"kcs" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/neutral/half/contrasted, +/turf/open/floor/iron, +/area/station/commons/fitness) +"kcw" = ( +/obj/structure/flora/bush/fullgrass/style_random, +/turf/open/floor/grass, +/area/station/service/hydroponics) "kcC" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, @@ -32681,6 +33338,12 @@ /obj/structure/sign/warning/directional/south, /turf/open/genturf/blue, /area/icemoon/underground/unexplored/rivers/deep/shoreline) +"kda" = ( +/obj/structure/closet/crate, +/obj/effect/spawner/random/maintenance/two, +/obj/item/sign, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "kdc" = ( /obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/visible{ dir = 8 @@ -32694,6 +33357,12 @@ /obj/structure/sign/warning/test_chamber/directional/south, /turf/open/floor/iron, /area/station/science/ordnance/testlab) +"kdw" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/catwalk_floor/iron_smooth, +/area/station/maintenance/starboard/fore) "kdy" = ( /obj/machinery/door/poddoor/shutters{ id = "secmechbay"; @@ -32704,13 +33373,6 @@ /obj/effect/turf_decal/box, /turf/open/floor/iron/dark, /area/station/security/mechbay) -"kdD" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/machinery/light/small/directional/south, -/turf/open/floor/iron, -/area/station/hallway/secondary/service) "kdF" = ( /obj/effect/spawner/random/vending/snackvend, /turf/open/floor/iron, @@ -32741,27 +33403,24 @@ }, /turf/open/floor/engine/vacuum, /area/station/engineering/atmos) +"kea" = ( +/obj/structure/table/wood, +/obj/effect/turf_decal/tile/bar/opposingcorners, +/obj/structure/desk_bell{ + pixel_x = -3 + }, +/turf/open/floor/iron, +/area/station/service/bar) "kei" = ( /obj/docking_port/stationary/escape_pod, /turf/open/floor/plating/snowed/icemoon, /area/icemoon/surface/outdoors/nospawn) -"keq" = ( -/obj/effect/turf_decal/trimline/green/filled/line{ - dir = 5 - }, -/obj/effect/turf_decal/trimline/blue/filled/warning{ - dir = 5 - }, -/obj/item/radio/intercom/directional/east, -/obj/machinery/duct, -/obj/machinery/light/directional/east, -/turf/open/floor/iron, -/area/station/service/hydroponics) "keu" = ( /obj/structure/lattice/catwalk, /obj/structure/marker_beacon/burgundy{ name = "landing marker" }, +/obj/effect/mapping_helpers/no_atoms_ontop, /turf/open/openspace/icemoon/keep_below, /area/icemoon/underground/explored) "kex" = ( @@ -32787,6 +33446,13 @@ /obj/effect/turf_decal/tile/neutral/half/contrasted, /turf/open/floor/iron, /area/station/commons/dorms) +"keM" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment, +/turf/open/floor/stone, +/area/station/commons/lounge) "keP" = ( /turf/closed/wall, /area/station/engineering/atmos/storage/gas) @@ -32817,16 +33483,6 @@ dir = 4 }, /area/station/maintenance/port/fore) -"keX" = ( -/obj/structure/table, -/obj/item/stack/cable_coil{ - pixel_x = -3; - pixel_y = 3 - }, -/obj/item/stack/cable_coil, -/obj/item/stock_parts/cell/high, -/turf/open/floor/plating, -/area/station/engineering/storage/tech) "keZ" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -32855,6 +33511,13 @@ /obj/item/trash/energybar, /turf/open/floor/plating, /area/station/maintenance/port/greater) +"kfk" = ( +/obj/structure/table/wood, +/obj/item/paper, +/obj/item/pen, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/starboard/lesser) "kfl" = ( /obj/structure/table/wood, /obj/item/radio/intercom/directional/south, @@ -32904,22 +33567,6 @@ /obj/structure/sign/poster/random/directional/west, /turf/open/floor/iron, /area/station/engineering/atmos) -"kfX" = ( -/obj/structure/table/wood, -/obj/item/toy/cards/deck{ - pixel_y = 4 - }, -/obj/item/radio/intercom/directional/west, -/turf/open/floor/carpet, -/area/station/service/theater) -"kfY" = ( -/obj/effect/turf_decal/siding/white{ - dir = 1 - }, -/obj/structure/chair, -/obj/structure/extinguisher_cabinet/directional/north, -/turf/open/floor/iron/white/smooth_large, -/area/station/service/kitchen/diner) "kfZ" = ( /obj/machinery/door/firedoor/heavy, /obj/structure/sign/warning/test_chamber/directional/east, @@ -32961,10 +33608,6 @@ }, /turf/open/floor/iron/dark, /area/station/science/ordnance/office) -"kgs" = ( -/obj/machinery/airalarm/directional/north, -/turf/open/floor/iron, -/area/station/hallway/secondary/service) "kgy" = ( /obj/structure/cable, /obj/effect/spawner/random/structure/steam_vent, @@ -33058,13 +33701,9 @@ /area/station/ai_monitored/turret_protected/aisat/atmos) "khz" = ( /obj/structure/marker_beacon/cerulean, +/obj/effect/mapping_helpers/no_atoms_ontop, /turf/open/genturf, /area/icemoon/surface/outdoors/unexplored/rivers/no_monsters) -"khA" = ( -/obj/machinery/firealarm/directional/west, -/obj/item/kirbyplants/random, -/turf/open/floor/iron, -/area/station/hallway/primary/starboard) "khF" = ( /obj/machinery/light/small/directional/north, /obj/structure/sign/warning/gas_mask/directional/north{ @@ -33133,21 +33772,17 @@ /obj/effect/mapping_helpers/airlock/access/all/supply/mining_station, /turf/open/floor/iron/dark/textured_half, /area/station/cargo/storage) -"kiB" = ( -/obj/machinery/door/firedoor/border_only{ - dir = 1 - }, -/obj/structure/railing{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/hallway/secondary/service) "kiE" = ( /obj/structure/cable, /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/line, /turf/open/floor/iron, /area/station/maintenance/disposal/incinerator) +"kiI" = ( +/obj/machinery/light/small/directional/east, +/obj/effect/spawner/random/engineering/atmospherics_portable, +/turf/open/floor/plating, +/area/station/maintenance/fore) "kiL" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/carpet, @@ -33173,13 +33808,6 @@ /obj/effect/spawner/random/armory/bulletproof_helmet, /turf/open/floor/iron/dark/textured, /area/station/ai_monitored/security/armory) -"kjh" = ( -/obj/machinery/modular_computer/preset/engineering, -/obj/structure/cable, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/machinery/light/small/directional/north, -/turf/open/floor/iron/dark, -/area/station/engineering/engine_smes) "kjo" = ( /obj/effect/mapping_helpers/airlock/access/any/supply/maintenance, /obj/machinery/door/airlock/engineering{ @@ -33257,6 +33885,18 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/ai_monitored/command/storage/eva) +"kkb" = ( +/obj/machinery/door/window/left/directional/east{ + name = "Fitness Ring" + }, +/obj/structure/window/reinforced/spawner/directional/south, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/siding/white{ + dir = 6 + }, +/turf/open/floor/iron/dark, +/area/station/commons/fitness) "kke" = ( /obj/machinery/door/airlock/maintenance, /obj/structure/cable, @@ -33279,6 +33919,21 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/solars/port/aft) +"kkr" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/public/glass{ + name = "Central Access" + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/stripes/white/line, +/obj/effect/turf_decal/stripes/white/line{ + dir = 1 + }, +/turf/open/floor/iron/dark/textured, +/area/station/hallway/primary/central) "kkA" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/newscaster/directional/west, @@ -33360,10 +34015,37 @@ /obj/effect/spawner/random/contraband/prison, /turf/open/floor/carpet/blue, /area/station/security/prison/work) +"klE" = ( +/obj/structure/tank_dispenser{ + pixel_x = -1 + }, +/obj/machinery/camera/directional/north{ + c_tag = "Atmospherics Monitoring" + }, +/obj/structure/window/reinforced/spawner/directional/east, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/item/radio/intercom/directional/north, +/turf/open/floor/iron, +/area/station/engineering/atmos/storage/gas) +"klJ" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/turf/open/floor/wood/large, +/area/station/commons/lounge) "klP" = ( /obj/structure/dresser, /turf/open/floor/carpet, /area/station/command/heads_quarters/captain) +"klS" = ( +/obj/effect/decal/cleanable/blood/tracks{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/medical/morgue) "klX" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/door/airlock/public/glass{ @@ -33375,19 +34057,6 @@ /obj/structure/cable, /turf/open/floor/iron, /area/mine/laborcamp) -"klY" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/turf/open/floor/plating/snowed/coldroom, -/area/station/service/kitchen/coldroom) -"kme" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/medical/morgue) "kmf" = ( /obj/machinery/status_display/evac/directional/west, /turf/open/openspace, @@ -33451,27 +34120,6 @@ /obj/structure/sign/poster/official/random/directional/north, /turf/open/floor/iron/textured, /area/mine/mechbay) -"kmQ" = ( -/obj/structure/railing/corner{ - dir = 8 - }, -/obj/machinery/door/firedoor/border_only, -/obj/machinery/camera{ - c_tag = "Service Botany - Upper South"; - dir = 10 - }, -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/green{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/service/hydroponics) -"kmW" = ( -/obj/structure/disposalpipe/segment{ - dir = 9 - }, -/turf/open/floor/plating, -/area/station/maintenance/department/crew_quarters/bar) "knd" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, @@ -33498,13 +34146,6 @@ /obj/machinery/light/directional/east, /turf/open/floor/wood, /area/station/command/meeting_room) -"knW" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 6 - }, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) "knX" = ( /obj/machinery/status_display/evac/directional/east, /obj/effect/turf_decal/tile/yellow/opposingcorners, @@ -33521,6 +34162,11 @@ dir = 8 }, /area/station/hallway/secondary/entry) +"koj" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/light/small/directional/north, +/turf/open/floor/plating, +/area/station/maintenance/fore) "koH" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 4 @@ -33550,11 +34196,6 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/ai_monitored/turret_protected/aisat/maint) -"kpf" = ( -/obj/effect/turf_decal/tile/neutral/diagonal_edge, -/obj/machinery/oven/range, -/turf/open/floor/iron/kitchen/diagonal, -/area/station/service/kitchen) "kpj" = ( /obj/structure/window/reinforced/spawner/directional/north{ pixel_y = 2 @@ -33639,6 +34280,16 @@ }, /turf/open/floor/iron/dark/textured_edge, /area/station/security/prison) +"kqo" = ( +/obj/structure/table/wood, +/obj/machinery/duct, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/box/white/corners, +/obj/item/storage/fancy/cigarettes/cigars{ + pixel_y = 4 + }, +/turf/open/floor/iron/dark, +/area/station/service/bar) "kqq" = ( /obj/machinery/atmospherics/components/binary/pump/on{ dir = 1; @@ -33671,12 +34322,6 @@ dir = 4 }, /area/station/command/gateway) -"kqA" = ( -/obj/effect/turf_decal/tile/neutral/diagonal_edge, -/obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/east, -/turf/open/floor/iron/kitchen/diagonal, -/area/station/service/kitchen) "kqG" = ( /obj/structure/table/reinforced, /obj/machinery/light/small/directional/east, @@ -33703,6 +34348,14 @@ /obj/structure/disposalpipe/trunk/multiz/down, /turf/open/floor/iron/white, /area/station/medical/medbay/aft) +"kqP" = ( +/obj/effect/turf_decal/siding/white/corner{ + dir = 4 + }, +/obj/machinery/light/directional/south, +/obj/machinery/firealarm/directional/south, +/turf/open/floor/iron/white/smooth_large, +/area/station/service/kitchen) "kqR" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -33775,6 +34428,22 @@ }, /turf/open/floor/plating, /area/mine/laborcamp/security) +"krE" = ( +/obj/structure/table, +/obj/item/flashlight/flare/candle{ + pixel_y = 1; + pixel_x = -16 + }, +/obj/item/paper/crumpled{ + pixel_y = 3; + pixel_x = 1; + name = "used napkin" + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) "krN" = ( /obj/structure/sign/poster/official/random/directional/south, /obj/structure/window/reinforced/spawner/directional/west, @@ -33858,30 +34527,13 @@ /obj/machinery/airalarm/directional/north, /turf/open/floor/iron/white, /area/station/medical/virology) -"ksK" = ( -/turf/closed/wall, -/area/station/service/kitchen/coldroom) -"ksL" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 8 - }, -/obj/machinery/duct, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/structure/sign/poster/official/random/directional/south, -/turf/open/floor/wood, -/area/station/hallway/secondary/service) -"ksO" = ( -/obj/machinery/hydroponics/constructable, -/obj/effect/turf_decal/trimline/green/filled/line{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/blue/filled/warning{ - dir = 1 +"ksR" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 }, -/turf/open/floor/iron/dark, -/area/station/service/hydroponics) +/obj/effect/decal/cleanable/confetti, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "ksU" = ( /obj/machinery/power/apc/auto_name/directional/west, /obj/structure/cable, @@ -33916,6 +34568,27 @@ }, /turf/open/floor/iron, /area/station/commons/dorms/laundry) +"ktq" = ( +/obj/effect/turf_decal/siding/thinplating/dark/corner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 10 + }, +/obj/effect/turf_decal/trimline/blue/filled/warning{ + dir = 10 + }, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/obj/structure/cable, +/obj/machinery/duct, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/light/warm/directional/south, +/obj/structure/sign/poster/contraband/lizard/directional/south, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics) "ktt" = ( /obj/structure/sign/warning/electric_shock, /turf/closed/wall/r_wall, @@ -33965,6 +34638,20 @@ }, /turf/open/floor/iron/white, /area/station/medical/medbay/aft) +"ktJ" = ( +/obj/structure/chair/stool/directional/north, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/solars/starboard/fore) +"ktK" = ( +/obj/structure/chair/sofa/bench/left{ + dir = 4 + }, +/obj/structure/sign/warning/electric_shock/directional/west, +/obj/machinery/light/small/directional/north, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/fore) "ktU" = ( /turf/open/floor/carpet, /area/station/command/meeting_room) @@ -33977,16 +34664,16 @@ /obj/machinery/disposal/bin, /turf/open/floor/iron/dark, /area/station/hallway/secondary/entry) +"ktY" = ( +/obj/item/radio/intercom/directional/east, +/obj/structure/table, +/obj/machinery/fax/auto_name, +/turf/open/floor/wood, +/area/station/hallway/secondary/service) "kub" = ( /obj/machinery/newscaster/directional/east, /turf/open/floor/iron/dark, /area/station/service/chapel) -"kum" = ( -/obj/structure/table, -/obj/item/trash/can/food/beans, -/obj/item/reagent_containers/cup/glass/waterbottle/empty, -/turf/open/floor/iron, -/area/station/maintenance/starboard/fore) "kuy" = ( /obj/machinery/computer/pod/old/mass_driver_controller/ordnancedriver{ pixel_x = 28 @@ -34045,18 +34732,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/general/visible, /turf/open/floor/iron/dark, /area/station/engineering/supermatter/room) -"kvs" = ( -/obj/machinery/door/firedoor, -/obj/structure/table/reinforced, -/obj/machinery/door/window/left/directional/west{ - name = "Hydroponics Desk"; - req_access = list("hydroponics") - }, -/obj/structure/desk_bell{ - pixel_x = 7 - }, -/turf/open/floor/iron, -/area/station/service/hydroponics) "kvu" = ( /obj/machinery/door/airlock/security{ id_tag = "IsolationCell"; @@ -34096,6 +34771,15 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/iron/white, /area/station/science/ordnance/office) +"kvT" = ( +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/plating, +/area/station/maintenance/starboard/lesser) "kvX" = ( /turf/open/floor/iron/dark/smooth_edge{ dir = 4 @@ -34118,13 +34802,6 @@ /obj/item/wrench, /turf/open/floor/iron, /area/station/engineering/atmos) -"kwu" = ( -/obj/structure/window/reinforced/spawner/directional/north, -/obj/machinery/computer/slot_machine{ - pixel_y = -6 - }, -/turf/open/floor/wood/parquet, -/area/station/commons/lounge) "kwz" = ( /obj/structure/table/wood, /obj/item/folder/blue, @@ -34192,14 +34869,6 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/solars/starboard/fore) -"kxN" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron/freezer, -/area/station/commons/toilet) "kxY" = ( /obj/effect/turf_decal/stripes/corner, /turf/open/floor/iron, @@ -34261,6 +34930,14 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central) +"kyR" = ( +/obj/machinery/button/door/directional/east{ + id = "xenobio6"; + name = "Xenobio Pen 6 Blast DOors"; + req_access = list("xenobiology") + }, +/turf/open/floor/iron/white, +/area/station/science/xenobiology) "kyU" = ( /obj/machinery/modular_computer/preset/id, /obj/machinery/light/directional/north, @@ -34280,13 +34957,14 @@ /obj/effect/turf_decal/tile/red/full, /turf/open/floor/iron/dark/smooth_large, /area/station/security/checkpoint/medical) -"kyZ" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 +"kzo" = ( +/obj/machinery/button/door/directional/west{ + id = "xenobio4"; + name = "Xenobio Pen 4 Blast Door"; + req_access = list("xenobiology") }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/hallway/secondary/service) +/turf/open/floor/iron/white, +/area/station/science/xenobiology) "kzv" = ( /obj/structure/bed, /obj/effect/spawner/random/bedsheet/any, @@ -34351,15 +35029,17 @@ /obj/item/multitool, /turf/open/floor/plating, /area/station/engineering/storage/tech) -"kzW" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 +"kzU" = ( +/obj/structure/dresser, +/obj/structure/mirror/directional/north, +/obj/effect/turf_decal/siding/wood{ + dir = 8 }, -/obj/machinery/duct, -/turf/open/floor/wood/tile, +/obj/machinery/camera{ + c_tag = "Service - Backstage"; + dir = 9 + }, +/turf/open/floor/wood/parquet, /area/station/service/theater) "kzZ" = ( /obj/effect/mapping_helpers/airlock/cyclelink_helper{ @@ -34383,12 +35063,6 @@ /obj/effect/decal/cleanable/cobweb/cobweb2, /turf/open/floor/plating, /area/station/maintenance/aft/greater) -"kAD" = ( -/obj/effect/turf_decal/stripes/white/line{ - dir = 1 - }, -/turf/open/floor/plating, -/area/station/service/kitchen/coldroom) "kAG" = ( /obj/structure/table, /obj/item/cigbutt, @@ -34451,6 +35125,14 @@ /obj/structure/sink/directional/south, /turf/open/floor/iron/white, /area/station/medical/medbay/central) +"kBO" = ( +/obj/structure/window/reinforced/spawner/directional/south, +/obj/effect/turf_decal/siding/white{ + dir = 4 + }, +/obj/effect/turf_decal/siding/white, +/turf/open/floor/plating, +/area/station/service/kitchen/coldroom) "kBU" = ( /obj/structure/table/wood, /obj/item/flashlight/lamp/green{ @@ -34653,26 +35335,6 @@ dir = 4 }, /area/mine/eva) -"kDJ" = ( -/obj/item/wrench, -/obj/item/clothing/glasses/monocle, -/obj/structure/table/wood, -/obj/structure/sign/poster/contraband/random/directional/north, -/turf/open/floor/iron, -/area/station/service/theater) -"kDP" = ( -/obj/effect/turf_decal/siding/wideplating/dark{ - dir = 1 - }, -/obj/machinery/firealarm/directional/west, -/turf/open/floor/iron, -/area/station/service/hydroponics) -"kDU" = ( -/obj/effect/turf_decal/siding/thinplating{ - dir = 1 - }, -/turf/open/misc/asteroid/snow/icemoon, -/area/icemoon/underground/explored) "kEj" = ( /obj/machinery/computer/libraryconsole/bookmanagement, /obj/structure/table, @@ -34693,10 +35355,30 @@ /obj/effect/spawner/random/structure/crate, /turf/open/floor/plating, /area/station/maintenance/port/fore) +"kEr" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/starboard/lesser) "kEs" = ( /obj/structure/tank_holder/extinguisher, /turf/open/floor/plating, /area/station/maintenance/port/greater) +"kEA" = ( +/obj/structure/cable, +/obj/machinery/button/door/directional/west{ + id = "xenobio1"; + name = "Xenobio Pen 1 Blast Door"; + req_access = list("xenobiology") + }, +/obj/machinery/light/floor, +/turf/open/floor/iron, +/area/station/science/xenobiology) "kEB" = ( /obj/effect/decal/cleanable/generic, /obj/effect/decal/cleanable/robot_debris/down, @@ -34737,6 +35419,15 @@ /obj/machinery/firealarm/directional/south, /turf/open/floor/iron/cafeteria, /area/station/security/prison/mess) +"kFF" = ( +/obj/machinery/door/airlock/maintenance{ + name = "Cart Maintenance" + }, +/obj/effect/mapping_helpers/airlock/access/any/service/kitchen, +/obj/effect/mapping_helpers/airlock/access/any/service/hydroponics, +/obj/structure/barricade/wooden/snowed, +/turf/open/floor/plating, +/area/station/maintenance/starboard/lesser) "kFH" = ( /obj/machinery/atmospherics/pipe/smart/simple/green/visible{ dir = 10 @@ -34779,6 +35470,13 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/cargo/lobby) +"kGD" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/tile/bar{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) "kGF" = ( /obj/structure/table, /obj/item/camera_film, @@ -34824,12 +35522,6 @@ /obj/structure/sign/poster/official/random/directional/west, /turf/open/floor/stone, /area/mine/eva/lower) -"kHk" = ( -/obj/effect/turf_decal/siding/thinplating/dark{ - dir = 8 - }, -/turf/open/floor/carpet, -/area/station/service/theater) "kHl" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/turf_decal/stripes/line{ @@ -34905,10 +35597,6 @@ }, /turf/open/floor/plating, /area/station/ai_monitored/turret_protected/aisat/service) -"kHV" = ( -/obj/structure/flora/bush/jungle/a/style_random, -/turf/open/floor/grass, -/area/station/service/hydroponics) "kIh" = ( /obj/effect/turf_decal/tile/blue{ dir = 4 @@ -34963,6 +35651,11 @@ /obj/machinery/space_heater, /turf/open/floor/iron/smooth_large, /area/station/cargo/warehouse) +"kIK" = ( +/obj/effect/turf_decal/tile/blue, +/obj/item/radio/intercom/directional/south, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) "kIU" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/corner, @@ -35012,6 +35705,22 @@ /obj/structure/sign/poster/official/random/directional/north, /turf/open/floor/iron/smooth, /area/mine/laborcamp/security) +"kJx" = ( +/obj/structure/railing/wooden_fence, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/explored) +"kJG" = ( +/obj/structure/curtain/cloth/fancy/mechanical/start_closed{ + id = "cantena_curtains" + }, +/obj/structure/railing{ + dir = 4 + }, +/obj/effect/turf_decal/siding/white{ + dir = 4 + }, +/turf/open/floor/wood, +/area/station/commons/lounge) "kJI" = ( /obj/structure/transit_tube/station/reverse, /turf/open/floor/plating, @@ -35052,17 +35761,20 @@ /turf/open/floor/iron/dark, /area/station/tcommsat/computer) "kKa" = ( -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/structure/bodycontainer/morgue/beeper_off{ - dir = 1 - }, +/obj/item/clothing/under/costume/skeleton, +/obj/item/clothing/head/helmet/skull, +/turf/open/floor/plating, +/area/station/medical/morgue) +"kKk" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/medical/morgue) -"kKl" = ( -/obj/structure/table/glass, -/obj/item/plant_analyzer, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) +"kKn" = ( +/obj/machinery/light/cold/directional/east, +/obj/machinery/status_display/ai/directional/east, +/turf/open/openspace, +/area/station/service/kitchen/coldroom) "kKv" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/sorting/mail{ @@ -35168,14 +35880,6 @@ }, /turf/open/floor/iron/dark, /area/station/engineering/atmos/hfr_room) -"kMD" = ( -/obj/machinery/door/airlock{ - name = "Unisex Restrooms" - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron/freezer, -/area/station/commons/toilet) "kMN" = ( /obj/machinery/space_heater, /turf/open/floor/plating, @@ -35276,23 +35980,6 @@ }, /turf/open/floor/iron, /area/station/security/brig/upper) -"kOB" = ( -/obj/structure/disposalpipe/segment{ - dir = 5 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/neutral/half/contrasted, -/obj/machinery/firealarm/directional/south, -/turf/open/floor/iron, -/area/station/commons/fitness) -"kOF" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/door/firedoor, -/obj/effect/turf_decal/tile/blue, -/turf/open/floor/iron, -/area/station/hallway/primary/fore) "kON" = ( /obj/structure/rack, /obj/effect/decal/cleanable/dirt, @@ -35353,6 +36040,11 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/iron, /area/station/hallway/primary/aft) +"kPh" = ( +/obj/structure/flora/bush/sunny/style_random, +/obj/structure/flora/bush/fullgrass/style_random, +/turf/open/floor/grass, +/area/station/service/hydroponics) "kPo" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -35384,6 +36076,9 @@ }, /turf/open/floor/iron, /area/station/service/hydroponics/garden) +"kPz" = ( +/turf/closed/mineral/random/snow, +/area/icemoon/underground/unexplored/rivers/deep/shoreline) "kPL" = ( /obj/machinery/power/apc/auto_name/directional/south, /obj/structure/cable, @@ -35401,8 +36096,22 @@ "kPS" = ( /obj/structure/railing, /obj/structure/marker_beacon/cerulean, +/obj/effect/mapping_helpers/no_atoms_ontop, /turf/open/misc/asteroid/snow/icemoon, /area/icemoon/surface/outdoors/nospawn) +"kPY" = ( +/obj/effect/turf_decal/siding/white{ + dir = 1 + }, +/obj/effect/turf_decal/tile/green/opposingcorners{ + dir = 1 + }, +/obj/effect/turf_decal/tile/blue/opposingcorners, +/obj/machinery/vending/hydroseeds{ + slogan_delay = 700 + }, +/turf/open/floor/iron, +/area/station/service/hydroponics) "kQc" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -35433,6 +36142,14 @@ }, /turf/open/floor/engine, /area/station/engineering/supermatter/room) +"kQx" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners, +/obj/item/radio/intercom/directional/north, +/obj/machinery/holopad, +/obj/machinery/light/warm/directional/north, +/obj/effect/turf_decal/bot, +/turf/open/floor/iron, +/area/station/service/bar) "kQz" = ( /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -35451,6 +36168,14 @@ /obj/structure/reagent_dispensers/watertank, /turf/open/floor/plating, /area/station/maintenance/fore) +"kQH" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/spawner/random/structure/steam_vent, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "kQJ" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 1 @@ -35480,32 +36205,6 @@ /obj/machinery/light/small/directional/west, /turf/open/floor/plating, /area/station/maintenance/port/greater) -"kQW" = ( -/obj/structure/closet/crate/hydroponics, -/obj/item/shovel/spade, -/obj/item/wrench, -/obj/item/reagent_containers/cup/watering_can, -/obj/item/wirecutters, -/obj/effect/turf_decal/stripes/line{ - dir = 6 - }, -/obj/machinery/camera{ - c_tag = "Service Botany - Lower North"; - dir = 9 - }, -/obj/machinery/newscaster/directional/north, -/turf/open/floor/plating, -/area/station/service/hydroponics) -"kQX" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/duct, -/turf/open/floor/iron, -/area/station/hallway/secondary/service) "kQY" = ( /obj/effect/turf_decal/arrows/red{ dir = 4; @@ -35527,14 +36226,12 @@ /obj/structure/bookcase, /turf/open/floor/iron, /area/mine/laborcamp) -"kRw" = ( -/obj/machinery/portable_atmospherics/scrubber, -/obj/effect/turf_decal/stripes/line{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden, -/turf/open/floor/iron/showroomfloor, -/area/station/engineering/atmos) +"kRj" = ( +/obj/structure/table/wood, +/obj/item/c_tube, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/plating, +/area/station/maintenance/starboard/lesser) "kRy" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -35542,6 +36239,15 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/hallway/primary/central/fore) +"kRD" = ( +/obj/machinery/door/airlock/hydroponics/glass{ + name = "Garden" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/mapping_helpers/airlock/access/all/service/hydroponics, +/obj/effect/mapping_helpers/airlock/cyclelink_helper, +/turf/open/floor/iron/textured, +/area/station/service/hydroponics) "kRE" = ( /obj/machinery/computer/mech_bay_power_console{ dir = 8 @@ -35553,6 +36259,7 @@ /obj/structure/chair/wood{ dir = 8 }, +/obj/effect/mapping_helpers/no_atoms_ontop, /turf/open/misc/asteroid/snow/icemoon, /area/icemoon/underground/explored) "kRH" = ( @@ -35603,21 +36310,19 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/station/cargo/office) +"kSj" = ( +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/obj/structure/cable, +/turf/open/floor/wood/parquet, +/area/station/service/theater) "kSn" = ( /obj/structure/cable/multilayer/multiz, /obj/effect/turf_decal/stripes/line, /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/maintenance/department/medical/central) -"kSo" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 6 - }, -/turf/open/floor/plating, -/area/station/maintenance/department/crew_quarters/bar) "kSv" = ( /obj/effect/turf_decal/tile/red/half/contrasted, /turf/open/floor/iron, @@ -35677,14 +36382,6 @@ /obj/effect/spawner/random/structure/steam_vent, /turf/open/floor/plating, /area/mine/eva/lower) -"kTO" = ( -/obj/machinery/hydroponics/constructable, -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/green{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/service/hydroponics) "kTQ" = ( /obj/effect/turf_decal/siding/yellow{ dir = 6 @@ -35764,11 +36461,55 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/iron/smooth, /area/station/maintenance/port/lesser) +"kUW" = ( +/obj/machinery/door/airlock/external{ + glass = 1; + name = "Service External Airlock"; + opacity = 0 + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 4 + }, +/obj/structure/sign/warning/cold_temp/directional/north, +/obj/structure/sign/warning/gas_mask/directional/south{ + desc = "A sign that warns of dangerous gasses in the air, instructing you to wear internals." + }, +/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/engineering/external, +/turf/open/floor/plating, +/area/station/maintenance/starboard/lesser) +"kVj" = ( +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central) "kVl" = ( /obj/effect/landmark/event_spawn, /obj/machinery/light/floor, /turf/open/floor/iron, /area/station/cargo/storage) +"kVo" = ( +/obj/structure/table/wood, +/obj/machinery/reagentgrinder{ + pixel_x = 6; + pixel_y = 6 + }, +/obj/item/reagent_containers/cup/glass/shaker{ + pixel_x = -6 + }, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/box/white/corners{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/service/bar) +"kVq" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners, +/obj/machinery/light/warm/directional/north, +/obj/machinery/digital_clock/directional/north, +/turf/open/floor/iron, +/area/station/service/bar) "kVx" = ( /obj/structure/cable/multilayer/multiz, /obj/effect/turf_decal/stripes/line, @@ -35809,10 +36550,6 @@ }, /turf/open/floor/iron/white, /area/station/medical/medbay/aft) -"kWa" = ( -/obj/structure/fireplace, -/turf/open/floor/plating, -/area/station/maintenance/starboard/lesser) "kWh" = ( /obj/machinery/holopad/secure, /turf/open/floor/iron/dark/smooth_large, @@ -35831,21 +36568,6 @@ /obj/effect/turf_decal/tile/yellow/opposingcorners, /turf/open/floor/iron/white, /area/station/maintenance/port/fore) -"kWs" = ( -/obj/effect/turf_decal/siding/wood, -/obj/effect/turf_decal/siding/wood{ - dir = 1 - }, -/obj/machinery/door/airlock{ - name = "Bar" - }, -/obj/machinery/duct, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/machinery/door/firedoor, -/obj/effect/mapping_helpers/airlock/access/all/service/bar, -/turf/open/floor/iron/dark/textured_half, -/area/station/service/bar/backroom) "kWw" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 4 @@ -35855,6 +36577,16 @@ }, /turf/open/floor/iron, /area/station/tcommsat/computer) +"kWG" = ( +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/obj/structure/cable, +/obj/machinery/duct, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/maintenance/starboard/lesser) "kWH" = ( /obj/structure/rack, /obj/item/hand_labeler, @@ -35862,13 +36594,6 @@ /obj/effect/turf_decal/tile/red, /turf/open/floor/iron/textured, /area/station/security/brig) -"kWK" = ( -/obj/machinery/door/firedoor, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/fore) "kWL" = ( /obj/structure/rack, /obj/item/reagent_containers/cup/bottle/nitrogen{ @@ -35894,12 +36619,6 @@ /obj/effect/mapping_helpers/mail_sorting/service/janitor_closet, /turf/open/floor/iron, /area/station/hallway/primary/central) -"kWR" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/holopad, -/turf/open/floor/iron/dark, -/area/station/service/hydroponics) "kWW" = ( /obj/machinery/door/airlock/atmos, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -35936,14 +36655,6 @@ /obj/effect/turf_decal/bot, /turf/open/floor/iron, /area/station/cargo/storage) -"kXu" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/tile/red/half/contrasted{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/commons/fitness) "kXx" = ( /obj/structure/table, /obj/item/food/spaghetti/meatballspaghetti{ @@ -35978,15 +36689,6 @@ }, /turf/open/floor/iron/large, /area/station/hallway/secondary/entry) -"kXE" = ( -/obj/machinery/door/firedoor, -/obj/structure/disposalpipe/segment, -/obj/machinery/status_display/evac/directional/west, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/central) "kXI" = ( /obj/effect/turf_decal/weather/snow/corner{ dir = 1 @@ -36007,6 +36709,22 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/showroomfloor, /area/station/security/prison/toilet) +"kXS" = ( +/obj/machinery/door/airlock/hydroponics/glass{ + name = "Hydroponics" + }, +/obj/effect/mapping_helpers/airlock/access/all/service/hydroponics, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/machinery/door/firedoor, +/turf/open/floor/iron/dark/textured_half{ + dir = 1 + }, +/area/station/service/hydroponics) "kXY" = ( /turf/open/floor/iron/dark, /area/station/security/prison/rec) @@ -36023,6 +36741,9 @@ }, /turf/open/floor/iron, /area/station/engineering/atmos) +"kYo" = ( +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/unexplored/rivers/deep/shoreline) "kYq" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/cable, @@ -36037,11 +36758,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/mine/laborcamp) -"kYz" = ( -/obj/effect/landmark/start/hangover, -/obj/structure/disposalpipe/segment, -/turf/open/floor/iron, -/area/station/hallway/primary/starboard) "kYF" = ( /obj/structure/light_construct/directional/west, /mob/living/simple_animal/hostile/retaliate/goose/vomit, @@ -36057,6 +36773,11 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/iron/large, /area/station/engineering/engine_smes) +"kYN" = ( +/obj/structure/table/wood, +/obj/item/flashlight/lantern/on, +/turf/open/misc/hay/icemoon, +/area/icemoon/underground/explored) "kZa" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -36076,11 +36797,6 @@ }, /turf/open/floor/iron/white, /area/station/medical/pharmacy) -"kZc" = ( -/obj/machinery/holopad, -/obj/effect/landmark/start/clown, -/turf/open/floor/wood/tile, -/area/station/service/theater) "kZh" = ( /obj/structure/cable, /obj/structure/sign/poster/contraband/random/directional/west, @@ -36090,6 +36806,16 @@ /obj/machinery/space_heater, /turf/open/floor/iron/dark/textured, /area/station/security/prison) +"kZm" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/obj/effect/turf_decal/tile/blue, +/obj/effect/turf_decal/tile/green{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central) "kZn" = ( /obj/structure/cable, /obj/machinery/light/floor, @@ -36177,13 +36903,6 @@ }, /turf/open/floor/iron, /area/station/service/janitor) -"laP" = ( -/obj/machinery/door/airlock/public/glass{ - name = "Canteen" - }, -/obj/machinery/door/firedoor, -/turf/open/floor/iron/textured_half, -/area/station/hallway/primary/starboard) "laV" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ dir = 8 @@ -36250,6 +36969,15 @@ /obj/machinery/gateway/centerstation, /turf/open/floor/iron/dark/smooth_large, /area/station/command/gateway) +"lcm" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/spawner/random/trash/cigbutt, +/obj/effect/spawner/random/trash/cigbutt, +/obj/effect/decal/cleanable/ash, +/obj/item/rack_parts, +/obj/effect/mapping_helpers/burnt_floor, +/turf/open/floor/plating, +/area/station/maintenance/starboard/lesser) "lcu" = ( /turf/open/floor/iron/white, /area/station/science/explab) @@ -36279,7 +37007,6 @@ pixel_x = -8; pixel_y = 4 }, -/obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/department/electrical) "ldn" = ( @@ -36354,6 +37081,16 @@ /obj/machinery/shower/directional/south, /turf/open/floor/iron, /area/station/science/xenobiology) +"leg" = ( +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/obj/machinery/duct, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics) "lei" = ( /obj/effect/turf_decal/trimline/blue/filled/line, /obj/structure/bed/medical/emergency, @@ -36373,13 +37110,6 @@ }, /turf/open/floor/iron, /area/station/cargo/sorting) -"let" = ( -/obj/machinery/duct, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/hallway/secondary/service) "leE" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable, @@ -36397,6 +37127,12 @@ }, /turf/open/floor/glass/reinforced, /area/station/hallway/primary/starboard) +"leP" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/spawner/random/structure/steam_vent, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "leW" = ( /obj/machinery/power/apc/auto_name/directional/north, /obj/structure/cable, @@ -36446,13 +37182,11 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/medical/storage) -"lfR" = ( -/obj/machinery/light/small/directional/north, -/obj/effect/turf_decal/siding/thinplating{ - dir = 8 - }, -/turf/open/floor/plating/snowed/smoothed/icemoon, -/area/icemoon/underground/explored) +"lgb" = ( +/obj/effect/landmark/start/botanist, +/obj/structure/chair/office/light, +/turf/open/floor/glass, +/area/station/service/hydroponics) "lgg" = ( /obj/machinery/air_sensor/engine_chamber, /turf/open/floor/engine, @@ -36470,17 +37204,6 @@ /obj/effect/turf_decal/tile/red/full, /turf/open/floor/iron/dark/textured_large, /area/station/security/brig/entrance) -"lgA" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/trimline/green/filled/line{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/blue/filled/warning{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/station/service/hydroponics) "lgD" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -36492,6 +37215,7 @@ "lgH" = ( /obj/structure/flora/tree/pine/style_random, /obj/structure/marker_beacon/cerulean, +/obj/effect/mapping_helpers/no_atoms_ontop, /turf/open/misc/asteroid/snow/icemoon, /area/icemoon/surface/outdoors/nospawn) "lgK" = ( @@ -36504,15 +37228,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/catwalk_floor/iron_smooth, /area/station/maintenance/port/fore) -"lgP" = ( -/obj/machinery/atmospherics/components/binary/pump/on{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/layer_manifold/scrubbers/hidden{ - dir = 8 - }, -/turf/open/floor/engine, -/area/station/science/ordnance) "lgW" = ( /obj/machinery/meter/monitored/distro_loop, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/visible, @@ -36584,6 +37299,19 @@ }, /turf/open/floor/iron, /area/station/command/heads_quarters/qm) +"liv" = ( +/obj/structure/cable, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 8 + }, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 4 + }, +/obj/structure/minecart_rail{ + dir = 1 + }, +/turf/open/floor/plating/snowed/coldroom, +/area/station/service/kitchen/coldroom) "lix" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable, @@ -36688,6 +37416,15 @@ }, /turf/open/floor/iron/white, /area/station/science/lab) +"ljG" = ( +/obj/structure/table/wood, +/obj/item/cigarette/cigar{ + pixel_x = 7; + pixel_y = 10 + }, +/obj/item/storage/box/matches, +/turf/open/floor/carpet, +/area/station/command/heads_quarters/captain) "ljK" = ( /obj/structure/disposalpipe/trunk/multiz/down{ dir = 4 @@ -36799,6 +37536,19 @@ "lli" = ( /turf/open/floor/plating, /area/station/maintenance/starboard/fore) +"llm" = ( +/obj/structure/window/reinforced/spawner/directional/west, +/obj/item/gun/ballistic/shotgun/doublebarrel, +/obj/structure/rack, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/box/red, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/turf/open/floor/iron/grimy, +/area/station/service/bar/backroom) "llw" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -36813,17 +37563,6 @@ }, /turf/open/floor/iron/white, /area/station/medical/psychology) -"llG" = ( -/obj/effect/turf_decal/siding/white{ - dir = 6 - }, -/obj/machinery/duct, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/landmark/start/hangover, -/obj/machinery/firealarm/directional/east, -/turf/open/floor/iron/white/smooth_large, -/area/station/service/kitchen/diner) "llT" = ( /obj/effect/turf_decal/weather/snow/corner{ dir = 1 @@ -36856,15 +37595,6 @@ /obj/machinery/airalarm/directional/north, /turf/open/floor/iron/dark/textured, /area/station/security/range) -"lmm" = ( -/obj/effect/turf_decal/trimline/green/filled/corner{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/blue/corner{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/station/service/hydroponics) "lms" = ( /obj/structure/reagent_dispensers/watertank, /turf/open/floor/plating, @@ -36897,10 +37627,6 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/iron/dark, /area/station/engineering/atmos/storage) -"lmB" = ( -/obj/machinery/light/small/directional/west, -/turf/open/floor/iron/smooth, -/area/station/maintenance/starboard/lesser) "lmK" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -36945,16 +37671,6 @@ /obj/machinery/firealarm/directional/west, /turf/open/floor/iron/grimy, /area/station/hallway/secondary/entry) -"lnq" = ( -/obj/effect/turf_decal/siding/white{ - dir = 8 - }, -/obj/structure/disposalpipe/segment{ - dir = 9 - }, -/obj/effect/turf_decal/tile/red/full, -/turf/open/floor/iron/large, -/area/station/service/kitchen/diner) "lnr" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/decal/cleanable/dirt, @@ -37149,13 +37865,6 @@ }, /turf/open/floor/iron, /area/station/security/prison/mess) -"lqh" = ( -/obj/structure/disposalpipe/segment{ - dir = 6 - }, -/obj/structure/cable, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) "lqj" = ( /obj/structure/chair/pew/right{ dir = 1 @@ -37164,15 +37873,6 @@ /obj/effect/landmark/start/hangover, /turf/open/floor/iron/dark, /area/station/service/chapel) -"lqs" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/plating, -/area/station/maintenance/starboard/lesser) "lqz" = ( /obj/structure/cable, /turf/closed/wall, @@ -37184,19 +37884,6 @@ }, /turf/open/floor/iron/textured, /area/mine/mechbay) -"lqB" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/duct, -/turf/open/floor/wood, -/area/station/hallway/secondary/service) "lqE" = ( /obj/machinery/atmospherics/pipe/heat_exchanging/simple{ dir = 10 @@ -37255,12 +37942,14 @@ /obj/structure/curtain, /turf/open/floor/iron/freezer, /area/station/command/heads_quarters/captain) -"lrN" = ( +"lrE" = ( +/obj/effect/landmark/generic_maintenance_landmark, +/obj/item/bikehorn/rubberducky, +/obj/structure/cable, /obj/effect/landmark/start/hangover, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/obj/structure/chair/stool/directional/north, -/turf/open/floor/wood/parquet, -/area/station/commons/lounge) +/obj/machinery/duct, +/turf/open/floor/iron/freezer, +/area/station/commons/toilet) "lsa" = ( /obj/machinery/door/poddoor/shutters/preopen{ dir = 4; @@ -37270,6 +37959,11 @@ /obj/effect/spawner/structure/window, /turf/open/floor/plating, /area/station/science/robotics/lab) +"lsh" = ( +/obj/structure/closet/emcloset, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/fore) "lsi" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -37282,6 +37976,23 @@ "lso" = ( /turf/open/floor/iron, /area/station/hallway/primary/starboard) +"lsH" = ( +/obj/machinery/door/firedoor, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/stripes/white/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/white/line{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured, +/area/station/hallway/primary/central) "lsN" = ( /obj/effect/turf_decal/trimline/red/filled/corner{ dir = 8 @@ -37357,17 +38068,17 @@ }, /turf/open/floor/iron/white/side, /area/station/science/ordnance/office) +"luR" = ( +/obj/item/toy/snowball{ + pixel_x = 9; + pixel_y = 1 + }, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/explored) "lva" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/science/xenobiology) -"lvc" = ( -/obj/item/clothing/mask/fakemoustache, -/obj/item/clothing/mask/cigarette/pipe, -/obj/structure/table/wood, -/obj/structure/sign/poster/contraband/random/directional/south, -/turf/open/floor/wood/tile, -/area/station/service/theater) "lvh" = ( /obj/structure/window/reinforced/spawner/directional/south, /turf/open/floor/iron, @@ -37391,21 +38102,15 @@ "lvt" = ( /turf/open/openspace/icemoon, /area/icemoon/underground/explored) -"lvu" = ( -/obj/machinery/door/airlock/highsecurity{ - name = "Service Hall Exit" - }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ - cycle_id = "service-hall-external" - }, -/obj/effect/turf_decal/stripes/line{ - dir = 6 - }, -/obj/effect/mapping_helpers/airlock/access/all/service/general, -/turf/open/floor/iron/textured_half{ - dir = 1 - }, -/area/station/hallway/secondary/service) +"lvv" = ( +/obj/machinery/newscaster/directional/east, +/turf/open/floor/stone, +/area/station/commons/lounge) +"lvy" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/duct, +/turf/open/floor/iron, +/area/station/service/hydroponics) "lvB" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -37427,13 +38132,6 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/maintenance/department/medical/central) -"lvO" = ( -/obj/item/clothing/mask/animal/pig, -/obj/item/bikehorn, -/obj/structure/table/wood, -/obj/structure/sign/poster/contraband/random/directional/west, -/turf/open/floor/wood/tile, -/area/station/service/theater) "lvQ" = ( /obj/machinery/light/small/directional/east, /obj/effect/decal/cleanable/dirt, @@ -37532,17 +38230,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/commons/storage/tools) -"lxf" = ( -/obj/structure/table, -/obj/item/reagent_containers/condiment/saltshaker{ - pixel_x = -3 - }, -/obj/item/reagent_containers/condiment/peppermill{ - pixel_x = 3 - }, -/obj/effect/turf_decal/tile/red/full, -/turf/open/floor/iron/large, -/area/station/service/kitchen/diner) "lxn" = ( /obj/machinery/biogenerator, /obj/structure/window/reinforced/spawner/directional/north, @@ -37584,6 +38271,14 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/ai_monitored/command/nuke_storage) +"lyf" = ( +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/obj/structure/extinguisher_cabinet/directional/south, +/turf/open/floor/wood/parquet, +/area/station/service/theater) "lyg" = ( /turf/closed/wall/r_wall, /area/station/security/brig) @@ -37595,6 +38290,9 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/open/floor/iron, /area/station/hallway/primary/central) "lyl" = ( @@ -37620,6 +38318,13 @@ /obj/machinery/airalarm/directional/south, /turf/open/floor/stone, /area/mine/eva/lower) +"lyv" = ( +/obj/structure/table/wood/poker, +/obj/item/trash/candle{ + pixel_y = 3 + }, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "lyG" = ( /turf/open/floor/glass/reinforced, /area/station/ai_monitored/security/armory/upper) @@ -37628,11 +38333,26 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/brown/visible/layer2, /turf/closed/wall/r_wall, /area/station/maintenance/disposal/incinerator) -"lyW" = ( -/obj/structure/chair/sofa/corp/left, -/obj/item/radio/intercom/directional/north, -/turf/open/floor/wood, -/area/station/hallway/secondary/service) +"lyP" = ( +/obj/effect/turf_decal/siding/white{ + dir = 8 + }, +/obj/machinery/airalarm/directional/north, +/obj/machinery/camera{ + c_tag = "Service - Botany Lower Entrance"; + dir = 9 + }, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics) +"lyU" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/wood/large, +/area/station/commons/lounge) "lyX" = ( /obj/structure/chair{ dir = 4 @@ -37640,6 +38360,10 @@ /obj/structure/sign/poster/contraband/random/directional/north, /turf/open/floor/plating, /area/station/maintenance/department/medical/morgue) +"lzc" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/plating, +/area/station/maintenance/fore) "lzq" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -37733,12 +38457,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/department/medical/morgue) -"lAB" = ( -/obj/structure/rack, -/obj/item/crowbar, -/obj/item/pickaxe, -/turf/open/floor/plating, -/area/station/maintenance/starboard/lesser) "lAC" = ( /obj/effect/mapping_helpers/airlock/cyclelink_helper, /obj/machinery/door/airlock/external{ @@ -37747,15 +38465,6 @@ }, /turf/open/floor/plating, /area/station/hallway/secondary/entry) -"lAG" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) "lAL" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -37765,15 +38474,6 @@ }, /turf/open/floor/iron/showroomfloor, /area/station/security/warden) -"lBb" = ( -/obj/structure/disposalpipe/segment{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) "lBo" = ( /obj/effect/spawner/random/engineering/tracking_beacon, /turf/open/floor/carpet, @@ -37785,11 +38485,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/fore) -"lBy" = ( -/obj/effect/turf_decal/siding/white, -/obj/machinery/digital_clock/directional/south, -/turf/open/floor/iron/white/smooth_large, -/area/station/service/kitchen/diner) "lBD" = ( /obj/structure/flora/grass/green/style_random, /turf/open/misc/asteroid/snow/icemoon, @@ -37830,6 +38525,11 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /turf/open/floor/iron, /area/station/hallway/primary/starboard) +"lCv" = ( +/obj/machinery/firealarm/directional/west, +/obj/structure/closet/crate/wooden/toy, +/turf/open/floor/wood/parquet, +/area/station/service/theater) "lCz" = ( /obj/effect/turf_decal/stripes/line, /obj/effect/turf_decal/bot, @@ -37864,6 +38564,16 @@ dir = 1 }, /area/station/engineering/lobby) +"lCM" = ( +/obj/structure/closet/crate, +/obj/effect/mapping_helpers/no_atoms_ontop, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/explored) +"lCO" = ( +/obj/machinery/duct, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "lCV" = ( /obj/machinery/door/airlock/maintenance, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -37885,11 +38595,6 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/iron, /area/station/hallway/primary/aft) -"lDg" = ( -/obj/structure/window/reinforced/spawner/directional/east, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron/dark, -/area/station/commons/fitness) "lDh" = ( /obj/structure/table, /obj/effect/turf_decal/stripes/red/line{ @@ -37916,12 +38621,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central) -"lDp" = ( -/obj/machinery/duct, -/obj/effect/turf_decal/tile/bar/opposingcorners, -/obj/machinery/light/small/directional/west, -/turf/open/floor/iron, -/area/station/service/bar/backroom) "lDq" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 8 @@ -37987,6 +38686,25 @@ /obj/structure/cable, /turf/open/floor/carpet/blue, /area/station/security/prison/work) +"lEb" = ( +/obj/machinery/door/airlock/multi_tile/public/glass{ + dir = 4; + name = "Service Hall" + }, +/obj/effect/turf_decal/siding/dark/corner, +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/access/all/service/general, +/obj/effect/landmark/navigate_destination, +/turf/open/floor/iron/dark/textured_half{ + dir = 1 + }, +/area/station/hallway/secondary/service) "lEg" = ( /obj/machinery/door/window/left/directional/north{ name = "AI Core Door"; @@ -37998,6 +38716,17 @@ "lEj" = ( /turf/open/floor/iron/dark/textured, /area/station/security/processing) +"lEn" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/table, +/obj/item/stack/sheet/mineral/coal{ + pixel_x = 6; + pixel_y = 3 + }, +/turf/open/floor/plating/snowed/coldroom, +/area/station/service/kitchen/coldroom) "lEo" = ( /obj/effect/turf_decal/trimline/blue/filled/line, /obj/structure/disposalpipe/segment{ @@ -38044,27 +38773,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/hallway/primary/port) -"lEH" = ( -/obj/structure/table/glass, -/obj/item/grenade/chem_grenade/antiweed, -/obj/item/reagent_containers/spray/plantbgone{ - pixel_y = 3 - }, -/obj/item/reagent_containers/spray/plantbgone{ - pixel_x = 8; - pixel_y = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/siding/white{ - dir = 6 - }, -/obj/effect/turf_decal/tile/green/opposingcorners{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue/opposingcorners, -/turf/open/floor/iron, -/area/station/service/hydroponics) "lEK" = ( /obj/machinery/door/firedoor, /obj/structure/cable, @@ -38216,11 +38924,29 @@ dir = 1 }, /area/station/hallway/secondary/entry) -"lGY" = ( -/obj/structure/chair/stool/directional/south, -/obj/effect/landmark/start/hangover, -/turf/open/floor/wood/parquet, -/area/station/commons/lounge) +"lHi" = ( +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/obj/effect/turf_decal/tile/green{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) +"lHm" = ( +/obj/machinery/atmospherics/components/binary/pump{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/computer/security/telescreen/test_chamber/directional/north, +/turf/open/floor/iron, +/area/station/science/explab) +"lHr" = ( +/obj/structure/stairs/north, +/turf/open/floor/iron/freezer, +/area/station/service/kitchen/coldroom) "lHu" = ( /obj/structure/closet/secure_closet/brig, /obj/structure/cable, @@ -38260,6 +38986,17 @@ }, /turf/open/floor/iron/dark/corner, /area/station/engineering/atmos/storage/gas) +"lHI" = ( +/obj/effect/turf_decal/tile/green/opposingcorners{ + dir = 1 + }, +/obj/effect/turf_decal/tile/blue/opposingcorners, +/obj/effect/turf_decal/siding/white/corner{ + dir = 8 + }, +/obj/structure/window/reinforced/spawner/directional/west, +/turf/open/floor/iron, +/area/station/service/hydroponics) "lHL" = ( /obj/structure/cable, /obj/effect/turf_decal/stripes/corner{ @@ -38376,6 +39113,12 @@ "lIW" = ( /turf/open/floor/plating, /area/station/ai_monitored/turret_protected/aisat_interior) +"lJc" = ( +/obj/item/food/chococoin, +/obj/structure/closet/secure_closet/freezer/fridge, +/obj/effect/turf_decal/weather/snow/corner, +/turf/open/floor/plating/snowed/coldroom, +/area/station/service/kitchen/coldroom) "lJO" = ( /turf/closed/wall, /area/station/maintenance/port/fore) @@ -38386,6 +39129,18 @@ }, /turf/open/floor/iron/dark/textured, /area/station/security/prison) +"lJW" = ( +/obj/machinery/smartfridge, +/obj/machinery/door/window/right/directional/south{ + name = "Produce Access"; + req_access = list("hydroponics") + }, +/obj/effect/turf_decal/tile/green/opposingcorners{ + dir = 1 + }, +/obj/effect/turf_decal/tile/blue/opposingcorners, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics) "lKc" = ( /obj/effect/turf_decal/stripes/corner{ dir = 4 @@ -38468,6 +39223,16 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/mine/laborcamp) +"lLR" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 9 + }, +/obj/effect/turf_decal/trimline/blue/filled/warning{ + dir = 9 + }, +/obj/machinery/hydroponics/constructable, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics) "lLY" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/recharge_floor, @@ -38482,6 +39247,10 @@ /obj/item/food/cheesiehonkers, /turf/open/floor/iron, /area/station/cargo/office) +"lMe" = ( +/obj/effect/spawner/structure/window, +/turf/open/floor/plating, +/area/station/service/kitchen) "lMg" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -38494,18 +39263,6 @@ /obj/machinery/light/small/directional/south, /turf/open/floor/engine/o2, /area/station/engineering/atmos) -"lMi" = ( -/obj/structure/table/wood, -/obj/machinery/computer/security/telescreen/prison{ - pixel_y = 32 - }, -/obj/effect/decal/cleanable/cobweb/cobweb2, -/obj/machinery/fax{ - fax_name = "Law Office"; - name = "Law Office Fax Machine" - }, -/turf/open/floor/wood, -/area/station/service/lawoffice) "lMu" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -38624,12 +39381,6 @@ /obj/machinery/light/small/dim/directional/east, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) -"lOt" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/door/window/left/directional/east, -/obj/structure/sign/warning/gas_mask/directional/north, -/turf/open/floor/plating/snowed/coldroom, -/area/station/service/kitchen/coldroom) "lOz" = ( /obj/machinery/door/airlock{ id_tag = "Dorm2"; @@ -38687,13 +39438,6 @@ }, /turf/open/floor/iron/sepia, /area/station/service/library) -"lPm" = ( -/obj/structure/disposalpipe/segment{ - dir = 6 - }, -/obj/effect/turf_decal/tile/bar/opposingcorners, -/turf/open/floor/iron, -/area/station/service/bar) "lPr" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -38743,15 +39487,12 @@ }, /turf/open/floor/iron/dark/textured_large, /area/station/cargo/bitrunning/den) -"lPN" = ( -/obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/south, -/obj/effect/turf_decal/siding/white{ - dir = 1 +"lPQ" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 }, -/obj/effect/turf_decal/tile/bar/opposingcorners, /turf/open/floor/iron, -/area/station/hallway/secondary/service) +/area/station/commons/fitness) "lQc" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/cable, @@ -38825,13 +39566,6 @@ /obj/structure/mineral_door/wood, /turf/open/floor/wood, /area/station/maintenance/space_hut/cabin) -"lQV" = ( -/obj/effect/turf_decal/tile/red/half/contrasted{ - dir = 4 - }, -/obj/machinery/light/small/directional/east, -/turf/open/floor/iron, -/area/station/commons/fitness) "lRc" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/cable, @@ -38943,33 +39677,9 @@ }, /turf/open/floor/iron, /area/station/commons/storage/tools) -"lSl" = ( -/obj/structure/chair/stool/bar/directional/south, -/obj/effect/turf_decal/siding/wood{ - dir = 1 - }, -/obj/machinery/light/directional/east, -/turf/open/floor/stone, -/area/station/commons/lounge) "lSu" = ( /turf/open/floor/plating/snowed/smoothed/icemoon, /area/icemoon/surface/outdoors/nospawn) -"lSw" = ( -/obj/structure/tank_dispenser{ - pixel_x = -1 - }, -/obj/machinery/camera/directional/north{ - c_tag = "Atmospherics Monitoring" - }, -/obj/structure/window/reinforced/spawner/directional/east{ - layer = 2.9 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/item/radio/intercom/directional/north, -/turf/open/floor/iron, -/area/station/engineering/atmos/storage/gas) "lSF" = ( /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -39009,13 +39719,6 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/wood, /area/station/maintenance/space_hut/cabin) -"lTJ" = ( -/obj/structure/railing, -/obj/structure/disposalpipe/segment{ - dir = 5 - }, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) "lUa" = ( /obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ dir = 1 @@ -39051,12 +39754,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/security/brig/upper) -"lUy" = ( -/obj/item/food/pie/cream, -/obj/machinery/newscaster/directional/north, -/obj/structure/table/wood, -/turf/open/floor/iron, -/area/station/service/theater) "lUC" = ( /turf/closed/wall, /area/station/maintenance/department/electrical) @@ -39105,11 +39802,6 @@ dir = 4 }, /area/station/engineering/storage_shared) -"lVs" = ( -/obj/structure/table, -/obj/item/clothing/mask/surgical, -/turf/open/floor/engine, -/area/station/science/xenobiology) "lVt" = ( /obj/machinery/firealarm/directional/west, /obj/machinery/light/floor, @@ -39142,6 +39834,23 @@ }, /turf/open/floor/wood, /area/station/service/library) +"lVN" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/disposalpipe/trunk/multiz/down{ + dir = 1 + }, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"lVQ" = ( +/obj/machinery/button/door/directional/west{ + id = "xenobio5"; + name = "Xenobio Pen 5 Blast Door"; + req_access = list("xenobiology") + }, +/turf/open/floor/iron/white, +/area/station/science/xenobiology) "lVY" = ( /obj/effect/turf_decal/siding/thinplating_new/corner{ dir = 4 @@ -39218,11 +39927,12 @@ }, /turf/open/floor/iron/smooth, /area/station/maintenance/port/fore) -"lXo" = ( -/obj/structure/table/wood/poker, -/obj/item/storage/dice, -/turf/open/floor/wood/parquet, -/area/station/commons/lounge) +"lXC" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/solars/starboard/fore) "lXJ" = ( /obj/structure/railing{ dir = 1 @@ -39241,29 +39951,12 @@ dir = 10 }, /area/station/science/research) -"lYz" = ( -/obj/machinery/computer/records/security, -/obj/machinery/light_switch/directional/north, -/turf/open/floor/iron/dark/textured_edge{ - dir = 8 - }, -/area/station/security/brig/entrance) "lYR" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 8 }, /turf/open/floor/grass, /area/station/medical/virology) -"lYY" = ( -/obj/item/clothing/suit/hooded/wintercoat, -/obj/item/clothing/suit/hooded/wintercoat, -/obj/item/clothing/suit/hooded/wintercoat, -/obj/effect/turf_decal/stripes/white/corner{ - dir = 1 - }, -/obj/structure/closet/chefcloset, -/turf/open/floor/plating, -/area/station/service/kitchen/coldroom) "lZe" = ( /obj/effect/turf_decal/tile/blue/opposingcorners{ dir = 1 @@ -39275,22 +39968,11 @@ /obj/structure/railing, /turf/open/floor/iron, /area/station/hallway/primary/starboard) -"lZv" = ( -/obj/structure/table/glass, -/obj/item/seeds/bamboo, +"lZP" = ( +/obj/effect/turf_decal/stripes/line, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/visible/layer4, /turf/open/floor/plating, -/area/station/maintenance/starboard/fore) -"lZG" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 8 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/table/wood, -/obj/effect/turf_decal/tile/bar/opposingcorners, -/turf/open/floor/iron, -/area/station/service/bar) +/area/station/maintenance/fore) "lZQ" = ( /obj/machinery/airalarm/directional/west, /obj/machinery/computer/cargo{ @@ -39323,11 +40005,26 @@ }, /turf/open/floor/plating, /area/station/medical/pharmacy) +"maw" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "maB" = ( /obj/structure/chair/stool/directional/north, /obj/effect/turf_decal/tile/neutral, /turf/open/floor/iron, /area/station/commons/dorms) +"maM" = ( +/obj/item/paper/fluff/jobs/security/beepsky_mom, +/obj/machinery/light/small/dim/directional/east, +/obj/effect/decal/cleanable/cobweb/cobweb2, +/turf/open/floor/plating, +/area/station/maintenance/fore) "maO" = ( /obj/machinery/disposal/bin, /obj/structure/window/reinforced/spawner/directional/south, @@ -39356,6 +40053,18 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/cargo/storage) +"maX" = ( +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/stripes/white/line, +/obj/effect/turf_decal/stripes/white/line{ + dir = 1 + }, +/turf/open/floor/iron/dark/textured, +/area/station/hallway/primary/central) "maY" = ( /obj/item/wrench, /obj/item/weldingtool, @@ -39366,17 +40075,6 @@ /obj/structure/rack, /turf/open/floor/iron/dark, /area/station/engineering/supermatter/room) -"mbb" = ( -/obj/structure/cable, -/obj/machinery/button/door/directional/west{ - id = "xenobio1"; - layer = 4; - name = "Xenobio Pen 1 Blast Door"; - req_access = list("xenobiology") - }, -/obj/machinery/light/floor, -/turf/open/floor/iron, -/area/station/science/xenobiology) "mbk" = ( /obj/effect/landmark/start/hangover, /obj/effect/turf_decal/tile/blue{ @@ -39497,6 +40195,23 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/smooth_large, /area/station/command/heads_quarters/hos) +"mcQ" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners, +/obj/machinery/status_display/evac/directional/north, +/obj/effect/turf_decal/siding/wood/corner, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/service/bar) +"mcT" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/duct, +/turf/open/floor/iron, +/area/station/commons/fitness) "mcW" = ( /turf/open/floor/iron/white, /area/station/medical/medbay/central) @@ -39513,15 +40228,6 @@ /obj/effect/landmark/start/prisoner, /turf/open/floor/iron, /area/station/security/prison/work) -"mdy" = ( -/obj/structure/railing/corner{ - dir = 4 - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 8 - }, -/turf/open/floor/wood/parquet, -/area/station/service/bar/atrium) "mdE" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -39579,22 +40285,10 @@ "mdZ" = ( /turf/closed/wall, /area/station/hallway/secondary/service) -"men" = ( -/obj/machinery/duct, -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/tile/bar/opposingcorners, -/turf/open/floor/iron, -/area/station/service/bar) "mep" = ( /obj/effect/spawner/structure/window/hollow/reinforced/middle, /turf/open/floor/plating, /area/station/maintenance/department/medical/morgue) -"meB" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/turf/open/floor/wood/parquet, -/area/station/service/bar/atrium) "meG" = ( /obj/item/kirbyplants/random, /obj/structure/cable, @@ -39632,6 +40326,12 @@ }, /turf/open/floor/iron, /area/station/engineering/atmos) +"meW" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/medical/morgue) "mfc" = ( /obj/effect/turf_decal/bot, /obj/effect/decal/cleanable/dirt, @@ -39640,12 +40340,6 @@ /obj/machinery/power/apc/auto_name/directional/east, /turf/open/floor/iron/dark, /area/mine/eva/lower) -"mfz" = ( -/obj/machinery/door/airlock{ - name = "Unit B" - }, -/turf/open/floor/iron/freezer, -/area/station/commons/toilet) "mfD" = ( /turf/closed/wall/r_wall, /area/station/ai_monitored/turret_protected/aisat/atmos) @@ -39686,56 +40380,15 @@ /obj/effect/turf_decal/tile/blue, /turf/open/floor/iron, /area/station/hallway/primary/central) -"mgu" = ( -/obj/structure/table, -/obj/machinery/cell_charger, -/obj/item/stock_parts/cell/high, -/obj/machinery/ecto_sniffer{ - pixel_x = 6; - pixel_y = 6 - }, -/turf/open/floor/iron, -/area/station/science/robotics/lab) -"mgw" = ( -/obj/structure/cable, -/obj/effect/mapping_helpers/broken_floor, -/obj/effect/landmark/generic_maintenance_landmark, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/plating, -/area/station/maintenance/fore) +"mgy" = ( +/obj/effect/turf_decal/stripes/line, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/textured, +/area/station/service/hydroponics) "mgD" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden, /turf/open/floor/engine, /area/station/maintenance/disposal/incinerator) -"mgN" = ( -/obj/machinery/door/airlock{ - name = "Kitchen" - }, -/obj/effect/mapping_helpers/airlock/access/all/service/kitchen, -/obj/machinery/door/poddoor/shutters/preopen{ - dir = 4; - id = "kitchencounter"; - name = "Kitchen Shutters" - }, -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) -"mgR" = ( -/obj/effect/turf_decal/siding/wood, -/obj/machinery/reagentgrinder{ - pixel_x = 6; - pixel_y = 6 - }, -/obj/item/reagent_containers/cup/glass/shaker{ - pixel_x = -6 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/table/wood, -/turf/open/floor/stone, -/area/station/service/bar) "mgU" = ( /turf/closed/wall/r_wall, /area/station/command/heads_quarters/hos) @@ -39764,6 +40417,12 @@ }, /turf/open/floor/iron, /area/station/ai_monitored/command/storage/eva) +"mhj" = ( +/obj/structure/railing/wooden_fence{ + dir = 10 + }, +/turf/open/misc/hay/icemoon, +/area/icemoon/underground/explored) "mhq" = ( /obj/structure/closet, /obj/effect/spawner/random/maintenance, @@ -39791,19 +40450,6 @@ }, /turf/open/floor/iron, /area/station/engineering/lobby) -"miR" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 10 - }, -/obj/item/book/manual/wiki/barman_recipes{ - pixel_x = 5; - pixel_y = 6 - }, -/obj/item/reagent_containers/cup/rag, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/table/wood, -/turf/open/floor/stone, -/area/station/service/bar) "miS" = ( /obj/structure/table, /obj/item/stack/cable_coil{ @@ -39883,16 +40529,16 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/dark, /area/station/maintenance/disposal/incinerator) -"mko" = ( -/obj/machinery/atmospherics/components/binary/pump{ - dir = 4 - }, -/obj/structure/sign/warning/secure_area/directional/north, -/obj/effect/turf_decal/stripes/line{ - dir = 4 +"mkr" = ( +/obj/structure/closet/secure_closet/hydroponics, +/obj/effect/turf_decal/tile/green/opposingcorners{ + dir = 1 }, +/obj/effect/turf_decal/tile/blue/opposingcorners, +/obj/machinery/newscaster/directional/south, +/obj/machinery/light/small/directional/east, /turf/open/floor/iron, -/area/station/science/explab) +/area/station/service/hydroponics) "mku" = ( /obj/effect/spawner/random/structure/grille, /obj/effect/decal/cleanable/glass, @@ -39911,6 +40557,22 @@ }, /turf/open/floor/plating/snowed/icemoon, /area/icemoon/surface/outdoors/nospawn) +"mkM" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/spawner/random/structure/steam_vent, +/turf/open/floor/plating, +/area/station/maintenance/fore) +"mkN" = ( +/obj/machinery/computer/records/medical/laptop{ + pixel_y = 1 + }, +/obj/structure/table/reinforced, +/obj/machinery/camera/directional/north, +/turf/open/floor/iron/dark, +/area/station/medical/morgue) "mld" = ( /obj/effect/turf_decal/tile/yellow{ dir = 1 @@ -39943,6 +40605,18 @@ /obj/structure/cable/layer3, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/ai) +"mlN" = ( +/obj/structure/railing{ + dir = 6 + }, +/obj/effect/turf_decal/siding/white{ + dir = 6 + }, +/obj/structure/curtain/cloth/fancy/mechanical/start_closed{ + id = "cantena_curtains" + }, +/turf/open/floor/wood, +/area/station/commons/lounge) "mlO" = ( /obj/structure/disposalpipe/segment, /obj/machinery/airalarm/directional/east, @@ -39971,6 +40645,15 @@ }, /turf/open/floor/plating/snowed/icemoon, /area/icemoon/surface/outdoors/nospawn) +"mmf" = ( +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/obj/structure/railing{ + dir = 10 + }, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "mmh" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 1 @@ -40042,18 +40725,12 @@ }, /turf/open/floor/iron/white, /area/station/medical/medbay/aft) -"mnj" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/tile/red/half{ - dir = 4 - }, -/turf/open/floor/iron/half{ - dir = 1 - }, -/area/station/hallway/secondary/service) +"mnn" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/visible/layer4, +/obj/effect/turf_decal/stripes/line, +/obj/structure/chair/stool/directional/west, +/turf/open/floor/plating, +/area/station/maintenance/fore) "mnu" = ( /obj/effect/mapping_helpers/airlock/cyclelink_helper{ dir = 4 @@ -40074,13 +40751,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/department/medical/central) -"mnE" = ( -/obj/item/vending_refill/cigarette, -/obj/structure/table/wood, -/obj/machinery/airalarm/directional/east, -/obj/effect/turf_decal/tile/bar/opposingcorners, -/turf/open/floor/iron, -/area/station/service/bar/backroom) "mnF" = ( /obj/structure/cable, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ @@ -40110,13 +40780,6 @@ /obj/machinery/firealarm/directional/east, /turf/open/floor/iron, /area/station/cargo/storage) -"mow" = ( -/obj/effect/turf_decal/siding/white{ - dir = 4 - }, -/obj/effect/landmark/event_spawn, -/turf/open/floor/iron/dark, -/area/station/service/hydroponics) "moB" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment, @@ -40235,10 +40898,6 @@ /obj/effect/spawner/structure/window, /turf/open/floor/plating, /area/station/service/hydroponics) -"mpZ" = ( -/obj/machinery/light/directional/south, -/turf/open/floor/iron, -/area/station/hallway/primary/starboard) "mqe" = ( /obj/machinery/disposal/bin, /obj/structure/disposalpipe/trunk{ @@ -40254,12 +40913,6 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/hallway/primary/starboard) -"mqr" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 8 - }, -/turf/open/floor/wood/parquet, -/area/station/commons/lounge) "mqs" = ( /obj/effect/turf_decal/bot, /obj/structure/sign/warning/cold_temp/directional/north, @@ -40317,15 +40970,6 @@ /obj/effect/turf_decal/tile/yellow/opposingcorners, /turf/open/floor/iron/white, /area/station/maintenance/port/fore) -"mru" = ( -/obj/structure/sign/warning/directional/north, -/obj/machinery/light/small/directional/north, -/obj/effect/turf_decal/caution/stand_clear, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/turf/open/floor/iron/dark/textured, -/area/station/hallway/secondary/service) "mrw" = ( /obj/effect/turf_decal/tile/purple/half/contrasted{ dir = 4 @@ -40368,15 +41012,6 @@ }, /turf/open/floor/iron/white, /area/station/medical/surgery/aft) -"mrF" = ( -/obj/effect/landmark/start/hangover, -/obj/effect/turf_decal/tile/red/half{ - dir = 4 - }, -/turf/open/floor/iron/half{ - dir = 1 - }, -/area/station/hallway/secondary/service) "mrI" = ( /obj/structure/railing{ dir = 1 @@ -40394,13 +41029,6 @@ }, /turf/open/floor/iron/white, /area/station/medical/virology) -"mrX" = ( -/obj/effect/turf_decal/stripes/white/line{ - dir = 8 - }, -/obj/structure/closet/emcloset, -/turf/open/floor/plating, -/area/station/service/kitchen/coldroom) "msb" = ( /obj/effect/spawner/random/maintenance, /turf/open/floor/plating, @@ -40494,16 +41122,8 @@ /turf/open/floor/iron, /area/mine/laborcamp) "mtt" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/blood/splatter, -/obj/structure/extinguisher_cabinet/directional/north, -/turf/open/floor/iron/dark, -/area/station/medical/morgue) +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/explored/graveyard) "mtI" = ( /turf/closed/wall, /area/station/science/robotics/lab) @@ -40543,12 +41163,6 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/engineering/atmos/storage) -"mui" = ( -/obj/structure/chair/wood{ - dir = 4 - }, -/turf/open/floor/wood/parquet, -/area/station/commons/lounge) "mut" = ( /obj/machinery/hydroponics/soil, /obj/machinery/light/directional/east, @@ -40588,22 +41202,6 @@ }, /turf/open/floor/iron, /area/station/engineering/atmos) -"mvU" = ( -/obj/machinery/button/door/directional/east{ - id = "cmoprivacy"; - name = "CMO Shutter Control"; - pixel_y = 23; - req_access = list("cmo") - }, -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 4 - }, -/obj/machinery/computer/security/telescreen/cmo{ - dir = 8; - pixel_x = 27 - }, -/turf/open/floor/iron/dark, -/area/station/command/heads_quarters/cmo) "mwh" = ( /obj/structure/table, /obj/item/storage/fancy/donut_box, @@ -40650,12 +41248,6 @@ }, /turf/open/floor/plating, /area/station/medical/pharmacy) -"mwH" = ( -/obj/item/trash/popcorn, -/obj/effect/landmark/generic_maintenance_landmark, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/turf/open/floor/plating, -/area/station/maintenance/fore) "mwQ" = ( /obj/structure/tank_holder/extinguisher, /turf/open/floor/plating, @@ -40669,6 +41261,10 @@ }, /turf/open/floor/iron, /area/station/science/ordnance) +"mxh" = ( +/obj/structure/cable, +/turf/open/floor/stone, +/area/station/commons/lounge) "mxj" = ( /obj/machinery/atmospherics/components/binary/pump{ name = "Port Mix to East Ports" @@ -40708,6 +41304,13 @@ /obj/machinery/computer/security/telescreen/entertainment/directional/east, /turf/open/floor/iron/grimy, /area/station/hallway/secondary/entry) +"mxY" = ( +/obj/structure/minecart_rail{ + dir = 9 + }, +/obj/structure/cable, +/turf/open/floor/plating/snowed/coldroom, +/area/icemoon/underground/explored) "mye" = ( /obj/machinery/door/airlock/maintenance, /obj/structure/disposalpipe/segment, @@ -40764,27 +41367,22 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/department/cargo) -"myU" = ( -/obj/structure/table/glass, -/obj/item/assembly/signaler{ - pixel_x = 6; - pixel_y = 5 +"myS" = ( +/obj/effect/turf_decal/tile/green/opposingcorners{ + dir = 1 }, -/obj/item/reagent_containers/dropper{ - pixel_x = -4; - pixel_y = 4 +/obj/effect/turf_decal/tile/blue/opposingcorners, +/obj/machinery/camera/directional/south{ + c_tag = "Service - Botany Garden Access" }, -/obj/item/stock_parts/cell/high, -/obj/item/stack/cable_coil, -/obj/item/pen{ - pixel_x = -5; - pixel_y = 3 +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 }, -/obj/machinery/newscaster/directional/west, -/turf/open/floor/iron/cafeteria{ +/obj/effect/turf_decal/siding/white{ dir = 8 }, -/area/station/science/research) +/turf/open/floor/iron, +/area/station/service/hydroponics) "myX" = ( /obj/machinery/light/directional/north, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -40806,6 +41404,11 @@ /obj/structure/lattice/catwalk, /turf/open/openspace/icemoon/keep_below, /area/icemoon/underground/explored) +"mza" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/plating, +/area/station/maintenance/starboard/lesser) "mzb" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /turf/open/floor/iron, @@ -40817,15 +41420,6 @@ }, /turf/open/floor/iron/dark, /area/station/cargo/drone_bay) -"mzs" = ( -/obj/effect/turf_decal/tile/neutral/diagonal_edge, -/obj/machinery/light_switch/directional/east, -/obj/structure/sink/kitchen/directional/west, -/obj/structure/table, -/obj/item/book/manual/chef_recipes, -/obj/item/holosign_creator/robot_seat/restaurant, -/turf/open/floor/iron/kitchen/diagonal, -/area/station/service/kitchen) "mzu" = ( /obj/effect/turf_decal/tile/brown/half/contrasted{ dir = 8 @@ -40886,15 +41480,6 @@ "mAe" = ( /turf/open/floor/glass/reinforced, /area/station/security/lockers) -"mAz" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/public/glass{ - name = "Fitness" - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron, -/area/station/commons/fitness) "mAM" = ( /obj/structure/ladder, /obj/machinery/light/small/red/directional/west, @@ -40989,15 +41574,6 @@ }, /turf/open/floor/wood, /area/station/command/heads_quarters/captain) -"mCb" = ( -/mob/living/basic/goat/pete{ - desc = "Not known for their pleasant disposition. This one seems a bit more hardy to the cold."; - habitable_atmos = list("min_oxy"=1,"max_oxy"=0,"min_plas"=0,"max_plas"=1,"min_co2"=0,"max_co2"=5,"min_n2"=0,"max_n2"=0); - minimum_survivable_temperature = 150; - name = "Snowy Pete" - }, -/turf/open/misc/asteroid/snow/coldroom, -/area/station/service/kitchen/coldroom) "mCw" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/hatch{ @@ -41021,13 +41597,6 @@ /obj/machinery/hydroponics/soil, /turf/open/floor/grass, /area/station/service/hydroponics/garden) -"mCX" = ( -/obj/machinery/duct, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/hallway/secondary/service) "mDf" = ( /obj/machinery/telecomms/server/presets/common, /turf/open/floor/iron/dark/telecomms, @@ -41141,18 +41710,6 @@ }, /turf/open/floor/iron, /area/station/science/ordnance/testlab) -"mEZ" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 9 - }, -/obj/machinery/camera/directional/south{ - c_tag = "Service Hallway - Upper West" - }, -/obj/machinery/modular_computer/preset/cargochat/service{ - dir = 1 - }, -/turf/open/floor/plating, -/area/station/hallway/secondary/service) "mFj" = ( /obj/effect/spawner/random/structure/crate, /turf/open/floor/plating, @@ -41248,6 +41805,13 @@ /obj/structure/lattice/catwalk, /turf/open/openspace/icemoon, /area/station/science/server) +"mGF" = ( +/obj/effect/decal/cleanable/confetti, +/obj/structure/closet/crate/cardboard, +/obj/item/storage/cans/sixbeer, +/obj/effect/spawner/random/food_or_drink/cups, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "mGJ" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -41321,10 +41885,6 @@ }, /turf/open/floor/plating, /area/station/medical/pharmacy) -"mIB" = ( -/obj/structure/cable, -/turf/open/floor/wood/parquet, -/area/station/service/bar/atrium) "mIE" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/cable, @@ -41343,17 +41903,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) -"mIT" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/decal/cleanable/dirt, -/obj/structure/table, -/obj/item/clothing/mask/cigarette{ - pixel_x = 6; - pixel_y = 12 - }, -/turf/open/floor/iron, -/area/mine/eva) "mJa" = ( /obj/machinery/light/directional/east, /obj/effect/turf_decal/tile/yellow, @@ -41371,24 +41920,12 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/maintenance/solars/starboard/aft) -"mJr" = ( -/obj/effect/spawner/random/trash/mess, -/obj/structure/disposalpipe/segment, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) "mJu" = ( /obj/structure/table/glass, /turf/open/floor/iron/chapel{ dir = 4 }, /area/station/service/chapel) -"mJD" = ( -/obj/structure/cable, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/central) "mJM" = ( /obj/effect/turf_decal/tile/blue/half/contrasted{ dir = 1 @@ -41427,20 +41964,6 @@ dir = 8 }, /area/station/hallway/secondary/entry) -"mKh" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/door/airlock/maintenance{ - name = "Service Hall Maintenance" - }, -/obj/effect/mapping_helpers/airlock/access/all/service/general, -/obj/machinery/duct, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) "mKq" = ( /obj/structure/closet/secure_closet/evidence, /obj/machinery/light/small/directional/north, @@ -41504,6 +42027,12 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) +"mMi" = ( +/obj/effect/turf_decal/tile/neutral/diagonal_edge, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/duct, +/turf/open/floor/iron/kitchen/diagonal, +/area/station/service/kitchen) "mMk" = ( /obj/machinery/telecomms/message_server/preset, /turf/open/floor/iron/dark/telecomms, @@ -41523,6 +42052,10 @@ /obj/machinery/firealarm/directional/west, /turf/open/floor/carpet, /area/station/service/library) +"mMI" = ( +/obj/structure/secure_safe/directional/north, +/turf/open/floor/plating, +/area/station/maintenance/starboard/lesser) "mMM" = ( /turf/closed/wall/r_wall, /area/station/security/prison) @@ -41551,16 +42084,13 @@ }, /turf/open/floor/plating/icemoon, /area/station/science/ordnance/bomb) -"mNj" = ( -/obj/machinery/computer/security{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/computer/security/telescreen/prison{ - pixel_y = 32 +"mMZ" = ( +/obj/structure/cable, +/obj/effect/turf_decal/box/red/corners{ + dir = 1 }, -/turf/open/floor/iron/showroomfloor, -/area/station/security/warden) +/turf/open/floor/wood/parquet, +/area/station/service/bar/atrium) "mNy" = ( /obj/effect/turf_decal/tile/green{ dir = 8 @@ -41621,6 +42151,16 @@ }, /turf/open/floor/iron, /area/station/cargo/office) +"mOH" = ( +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/item/kirbyplants/random, +/turf/open/floor/iron, +/area/station/commons/fitness) "mOL" = ( /obj/machinery/airalarm/directional/south, /obj/structure/disposalpipe/segment{ @@ -41695,6 +42235,11 @@ /obj/structure/sign/warning/radiation/rad_area/directional/south, /turf/open/floor/plating, /area/station/maintenance/department/medical/morgue) +"mPQ" = ( +/obj/structure/table/wood, +/obj/effect/spawner/random/decoration/ornament, +/turf/open/floor/plating, +/area/station/maintenance/starboard/lesser) "mQb" = ( /obj/structure/flora/grass/both/style_random, /turf/open/misc/asteroid/snow/icemoon, @@ -41747,24 +42292,17 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron/white, /area/station/science/xenobiology) -"mRa" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/landmark/start/mime, -/turf/open/floor/wood/tile, -/area/station/service/theater) "mRr" = ( /obj/structure/cable, /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/station/maintenance/disposal/incinerator) -"mRs" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 9 - }, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) +"mRv" = ( +/obj/structure/chair/stool/directional/west, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/stone, +/area/station/commons/lounge) "mRG" = ( /obj/structure/table, /obj/item/book/manual/wiki/atmospherics, @@ -41786,6 +42324,15 @@ /obj/structure/cable/layer3, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/aisat/hallway) +"mRN" = ( +/obj/structure/railing, +/obj/structure/closet, +/obj/effect/spawner/random/maintenance/four, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "mRU" = ( /obj/effect/decal/cleanable/insectguts, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, @@ -41793,6 +42340,10 @@ /obj/effect/landmark/generic_maintenance_landmark, /turf/open/floor/plating, /area/station/maintenance/port/aft) +"mSh" = ( +/obj/machinery/atmospherics/components/unary/outlet_injector/monitored/ordnance_burn_chamber_input, +/turf/open/floor/engine/vacuum, +/area/station/science/ordnance/burnchamber) "mSv" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -41853,6 +42404,15 @@ }, /turf/open/floor/engine/air, /area/station/engineering/atmos) +"mTA" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/duct, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/turf/open/floor/iron, +/area/station/service/kitchen/coldroom) "mTI" = ( /obj/structure/sink/kitchen/directional/south{ desc = "A sink used for washing one's hands and face. It looks rusty and home-made"; @@ -41861,6 +42421,19 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /turf/open/floor/iron/freezer, /area/mine/laborcamp) +"mTL" = ( +/obj/structure/closet/secure_closet/bar, +/obj/machinery/firealarm/directional/north{ + pixel_x = 4 + }, +/obj/machinery/light/small/directional/north, +/obj/machinery/light_switch/directional/north{ + pixel_x = -5; + pixel_y = 28 + }, +/obj/item/vending_refill/cigarette, +/turf/open/floor/wood/parquet, +/area/station/service/bar/backroom) "mTS" = ( /obj/effect/turf_decal/tile/blue/half/contrasted{ dir = 4 @@ -41876,6 +42449,7 @@ /obj/structure/marker_beacon/burgundy{ name = "landing marker" }, +/obj/effect/mapping_helpers/no_atoms_ontop, /turf/open/openspace/icemoon/keep_below, /area/icemoon/underground/explored) "mTX" = ( @@ -41917,30 +42491,16 @@ /obj/effect/landmark/generic_maintenance_landmark, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) -"mUR" = ( -/obj/machinery/firealarm/directional/north{ - pixel_x = -26 - }, -/obj/structure/chair, -/obj/effect/turf_decal/tile/blue/half/contrasted{ - dir = 1 - }, -/turf/open/floor/iron/white, -/area/station/medical/medbay/lobby) -"mUU" = ( -/obj/effect/landmark/event_spawn, -/turf/open/floor/wood/parquet, -/area/station/commons/lounge) +"mUW" = ( +/obj/effect/spawner/random/structure/crate, +/obj/effect/spawner/random/trash/botanical_waste, +/obj/effect/spawner/random/food_or_drink/donkpockets, +/turf/open/floor/plating, +/area/station/maintenance/starboard/lesser) "mVe" = ( /obj/machinery/button/ignition/incinerator/atmos, /turf/closed/wall/r_wall, /area/station/maintenance/disposal/incinerator) -"mVh" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/hallway/primary/starboard) "mVm" = ( /obj/structure/grille/broken, /turf/open/misc/asteroid/snow/icemoon, @@ -41984,13 +42544,20 @@ /obj/effect/mapping_helpers/burnt_floor, /turf/open/floor/plating, /area/station/maintenance/port/aft) -"mVY" = ( -/obj/effect/turf_decal/tile/neutral/diagonal_edge, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 +"mVW" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/public/glass{ + name = "Dormitory" }, -/turf/open/floor/iron/kitchen/diagonal, -/area/station/service/kitchen) +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/stripes/white/line, +/obj/effect/turf_decal/stripes/white/line{ + dir = 1 + }, +/turf/open/floor/iron/dark/textured, +/area/station/commons/dorms) "mWf" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -42013,16 +42580,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/smooth, /area/station/engineering/lobby) -"mWp" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/hydroponics/glass{ - name = "Hydroponics" - }, -/obj/effect/mapping_helpers/airlock/access/all/service/hydroponics, -/turf/open/floor/iron/textured_half{ - dir = 1 - }, -/area/station/service/hydroponics) "mWs" = ( /obj/structure/table, /obj/item/storage/toolbox/emergency, @@ -42130,14 +42687,6 @@ }, /turf/open/floor/iron, /area/mine/laborcamp) -"mXt" = ( -/obj/item/radio/intercom/directional/east, -/obj/effect/turf_decal/siding/white{ - dir = 6 - }, -/obj/effect/turf_decal/tile/bar/opposingcorners, -/turf/open/floor/iron, -/area/station/service/bar) "mXA" = ( /obj/effect/landmark/blobstart, /obj/effect/mapping_helpers/burnt_floor, @@ -42176,6 +42725,11 @@ }, /turf/open/floor/plating, /area/station/hallway/secondary/entry) +"mXW" = ( +/obj/structure/flora/bush/flowers_pp/style_random, +/obj/structure/flora/bush/flowers_br/style_random, +/turf/open/floor/grass, +/area/station/service/hydroponics) "mYh" = ( /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/ai) @@ -42190,6 +42744,10 @@ }, /turf/open/floor/iron/white, /area/mine/laborcamp) +"mYn" = ( +/obj/machinery/duct, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics) "mYq" = ( /obj/machinery/requests_console/directional/north{ department = "Research Director's Desk"; @@ -42202,16 +42760,6 @@ /obj/machinery/pdapainter/research, /turf/open/floor/iron/white, /area/station/command/heads_quarters/rd) -"mYr" = ( -/obj/structure/table/wood, -/obj/effect/spawner/random/entertainment/gambling{ - pixel_y = 9 - }, -/obj/item/storage/fancy/donut_box{ - pixel_x = -6 - }, -/turf/open/floor/wood, -/area/station/hallway/secondary/service) "mYs" = ( /obj/machinery/computer/records/security{ dir = 8 @@ -42228,16 +42776,6 @@ }, /turf/open/floor/iron, /area/station/security/checkpoint/supply) -"mYG" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 4 - }, -/obj/effect/landmark/start/mime, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/wood/tile, -/area/station/service/theater) "mYJ" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -42397,6 +42935,13 @@ /obj/effect/mapping_helpers/airlock/access/all/engineering/external, /turf/open/floor/plating, /area/station/maintenance/port/fore) +"nbl" = ( +/obj/structure/minecart_rail{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/plating/snowed/coldroom, +/area/icemoon/underground/explored) "nbm" = ( /obj/effect/turf_decal/trimline/red/filled/line{ dir = 6 @@ -42450,6 +42995,13 @@ /obj/machinery/door/firedoor, /turf/open/floor/plating, /area/station/medical/treatment_center) +"nbI" = ( +/obj/structure/cable, +/obj/effect/turf_decal/siding/white{ + dir = 8 + }, +/turf/open/floor/iron/white/smooth_large, +/area/station/service/kitchen) "nbJ" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -42464,14 +43016,33 @@ /obj/effect/mapping_helpers/airlock/access/all/supply/mining, /turf/open/floor/iron/smooth, /area/mine/eva/lower) +"nbL" = ( +/obj/structure/table/wood, +/obj/item/camera, +/obj/item/taperecorder, +/obj/item/radio/intercom/directional/east, +/obj/structure/sign/painting/library_private{ + pixel_y = 32 + }, +/obj/item/storage/photo_album/library, +/turf/open/floor/engine/cult, +/area/station/service/library) "nbM" = ( /obj/machinery/atmospherics/pipe/heat_exchanging/simple/layer2{ dir = 5 }, /turf/open/floor/iron/dark/airless, /area/station/science/ordnance/freezerchamber) +"nbO" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/duct, +/turf/open/floor/iron, +/area/station/service/kitchen/coldroom) "nbP" = ( /obj/structure/bonfire/prelit, +/obj/effect/mapping_helpers/no_atoms_ontop, /turf/open/misc/asteroid/snow/icemoon, /area/icemoon/underground/explored) "nbT" = ( @@ -42518,6 +43089,29 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central) +"ncc" = ( +/obj/effect/turf_decal/tile/bar{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/table, +/obj/item/paper{ + pixel_y = 4 + }, +/obj/item/pen{ + pixel_x = -5 + }, +/turf/open/floor/iron, +/area/station/service/kitchen/coldroom) +"ncd" = ( +/obj/effect/turf_decal/siding/white, +/obj/effect/turf_decal/tile/blue/opposingcorners, +/obj/effect/turf_decal/tile/green/opposingcorners{ + dir = 1 + }, +/obj/machinery/duct, +/turf/open/floor/iron, +/area/station/service/hydroponics) "nci" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -42537,6 +43131,17 @@ /obj/item/kirbyplants/random, /turf/open/floor/iron, /area/station/commons/locker) +"ncx" = ( +/obj/structure/table/wood, +/obj/item/soap/deluxe{ + pixel_y = 11 + }, +/obj/item/soap/deluxe{ + pixel_y = 6 + }, +/obj/item/soap/deluxe, +/turf/open/misc/hay/icemoon, +/area/icemoon/underground/explored) "ncB" = ( /obj/machinery/door/airlock/security/glass{ name = "Brig Walkway" @@ -42577,6 +43182,10 @@ }, /turf/open/floor/iron, /area/station/science/ordnance) +"ndd" = ( +/obj/effect/spawner/random/engineering/tracking_beacon, +/turf/open/floor/iron/white, +/area/station/science/xenobiology) "ndl" = ( /obj/effect/turf_decal/tile/brown/half/contrasted{ dir = 1 @@ -42675,14 +43284,6 @@ }, /turf/open/floor/iron/smooth, /area/station/security/brig) -"nep" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/obj/machinery/door/window/right/directional/east, -/obj/structure/sign/warning/cold_temp/directional/south, -/turf/open/floor/plating/snowed/coldroom, -/area/station/service/kitchen/coldroom) "neq" = ( /obj/structure/cable, /obj/effect/turf_decal/tile/blue/half/contrasted, @@ -42731,13 +43332,49 @@ /area/station/engineering/engine_smes) "neM" = ( /obj/machinery/hydroponics/soil, +/obj/effect/mapping_helpers/no_atoms_ontop, /turf/open/misc/asteroid/snow/icemoon, /area/icemoon/underground/explored) +"neQ" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "neR" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/orange/visible, /obj/machinery/meter, /turf/open/floor/engine, /area/station/engineering/supermatter/room) +"neV" = ( +/obj/effect/turf_decal/bot{ + dir = 1 + }, +/obj/structure/table, +/obj/item/clothing/gloves/color/yellow, +/obj/item/clothing/gloves/color/yellow, +/obj/item/clothing/gloves/color/yellow, +/obj/item/clothing/gloves/color/yellow, +/obj/item/clothing/gloves/color/yellow, +/obj/structure/cable, +/obj/item/mod/module/plasma_stabilizer, +/obj/item/stock_parts/power_store/cell/emproof{ + pixel_x = -4; + pixel_y = -1 + }, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/item/mod/module/signlang_radio, +/obj/item/mod/module/thermal_regulator, +/turf/open/floor/iron/dark, +/area/station/engineering/engine_smes) "nfd" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/firealarm/directional/west, @@ -42786,8 +43423,17 @@ /obj/structure/marker_beacon/burgundy{ name = "landing marker" }, +/obj/effect/mapping_helpers/no_atoms_ontop, /turf/open/floor/plating/snowed/smoothed/icemoon, /area/icemoon/underground/explored) +"nfK" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/light/floor, +/turf/open/floor/wood, +/area/station/commons/lounge) "nfU" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -42810,6 +43456,12 @@ /obj/machinery/light/directional/south, /turf/open/floor/iron, /area/station/command/heads_quarters/rd) +"ngh" = ( +/obj/structure/fence{ + dir = 4 + }, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/surface/outdoors/nospawn) "ngj" = ( /obj/effect/turf_decal/stripes/asteroid/line{ dir = 9 @@ -42828,17 +43480,6 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/iron, /area/mine/production) -"ngH" = ( -/obj/machinery/portable_atmospherics/canister/air, -/obj/effect/turf_decal/stripes/line{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/visible/layer4, -/obj/machinery/atmospherics/components/unary/portables_connector/visible{ - dir = 1 - }, -/turf/open/floor/plating, -/area/station/maintenance/fore) "ngM" = ( /obj/structure/lattice/catwalk, /obj/structure/fence/door{ @@ -42876,6 +43517,16 @@ /obj/structure/mirror/directional/west, /turf/open/floor/iron/showroomfloor, /area/station/security/prison/toilet) +"nhv" = ( +/obj/effect/spawner/random/structure/closet_maintenance, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/obj/structure/railing{ + dir = 10 + }, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "nhw" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -42996,20 +43647,12 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/engineering/transit_tube) -"njn" = ( -/obj/machinery/holopad, -/obj/machinery/duct, -/turf/open/floor/iron, -/area/station/service/hydroponics) -"njx" = ( -/obj/machinery/door/window/left/directional/east{ - name = "Fitness Ring" - }, -/obj/structure/window/reinforced/spawner/directional/south, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +"njz" = ( +/obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron/dark, -/area/station/commons/fitness) +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/freezer, +/area/station/service/kitchen/coldroom) "njA" = ( /obj/structure/cable, /obj/effect/decal/cleanable/dirt, @@ -43018,6 +43661,14 @@ "njJ" = ( /turf/closed/wall, /area/mine/laborcamp) +"njM" = ( +/obj/item/radio/intercom/directional/east, +/obj/effect/turf_decal/tile/blue, +/obj/effect/turf_decal/tile/green{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central) "njO" = ( /obj/effect/spawner/random/trash/mess, /turf/open/floor/plating, @@ -43057,6 +43708,25 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/station/security/prison/workout) +"nkG" = ( +/obj/structure/window/reinforced/spawner/directional/north, +/obj/structure/table/reinforced, +/obj/item/stack/wrapping_paper{ + pixel_x = 3; + pixel_y = 4 + }, +/obj/item/stack/package_wrap{ + pixel_x = -1; + pixel_y = -1 + }, +/obj/item/dest_tagger, +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 1 + }, +/obj/machinery/power/apc/auto_name/directional/east, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/cargo/sorting) "nkI" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -43066,12 +43736,9 @@ /turf/open/floor/plating, /area/station/maintenance/port/aft) "nkM" = ( -/obj/machinery/door/airlock{ - name = "Unisex Showers" - }, -/obj/structure/cable, -/turf/open/floor/iron/freezer, -/area/station/commons/toilet) +/obj/effect/decal/cleanable/blood/old, +/turf/open/floor/engine/xenobio, +/area/station/science/xenobiology) "nkO" = ( /obj/structure/table, /obj/item/storage/box/matches, @@ -43084,10 +43751,10 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/vault, /area/station/security/prison/rec) -"nkQ" = ( -/obj/structure/cable, -/turf/open/floor/iron/freezer, -/area/station/commons/toilet) +"nla" = ( +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/starboard/lesser) "nll" = ( /obj/structure/table, /obj/item/stack/sheet/iron/fifty{ @@ -43115,11 +43782,17 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/station/construction) -"nlI" = ( -/obj/effect/landmark/start/hangover, -/obj/effect/turf_decal/tile/neutral/half/contrasted, -/turf/open/floor/iron, -/area/station/commons/dorms) +"nlA" = ( +/obj/item/clothing/head/beanie/orange{ + pixel_y = 8 + }, +/obj/item/clothing/suit/hooded/wintercoat, +/obj/item/clothing/shoes/wheelys/skishoes{ + pixel_y = -8 + }, +/obj/effect/decal/remains/human, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/explored) "nlJ" = ( /obj/structure/railing{ dir = 5 @@ -43177,18 +43850,16 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/hallway/primary/central) -"nmg" = ( -/obj/machinery/door/airlock/external{ - glass = 1; - name = "Service External Airlock"; - opacity = 0 - }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 8 - }, -/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, +"nmi" = ( +/obj/structure/closet/chefcloset, +/obj/item/clothing/suit/hooded/wintercoat, +/obj/item/clothing/suit/hooded/wintercoat, +/obj/item/clothing/suit/hooded/wintercoat, +/obj/machinery/airalarm/directional/north, +/obj/effect/mapping_helpers/airalarm/tlv_cold_room, +/obj/structure/sign/poster/official/cleanliness/directional/west, /turf/open/floor/plating, -/area/station/maintenance/starboard/lesser) +/area/station/service/kitchen/coldroom) "nmj" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -43298,14 +43969,15 @@ /obj/effect/landmark/navigate_destination/library, /turf/open/floor/wood, /area/station/service/library) -"nmS" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 +"nmO" = ( +/obj/structure/marker_beacon/burgundy{ + name = "landing marker" }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/bar/opposingcorners, -/turf/open/floor/iron, -/area/station/service/bar) +/obj/structure/railing/wooden_fence{ + dir = 8 + }, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/explored) "nnl" = ( /obj/machinery/atmospherics/pipe/layer_manifold/scrubbers/hidden, /obj/effect/spawner/structure/window/reinforced/plasma, @@ -43337,22 +44009,20 @@ /obj/machinery/vending/assist, /turf/open/floor/plating, /area/station/engineering/storage/tech) +"nnM" = ( +/obj/structure/table, +/obj/item/stack/cable_coil{ + pixel_x = -3; + pixel_y = 3 + }, +/obj/item/stack/cable_coil, +/obj/item/stock_parts/power_store/cell/high, +/turf/open/floor/plating, +/area/station/engineering/storage/tech) "nnR" = ( /obj/machinery/holopad, /turf/open/floor/carpet, /area/station/command/heads_quarters/hop) -"nnW" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/red/half{ - dir = 4 - }, -/turf/open/floor/iron/half{ - dir = 1 - }, -/area/station/hallway/secondary/service) "noi" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/airalarm/directional/east, @@ -43543,6 +44213,10 @@ }, /turf/open/floor/iron/white, /area/station/science/explab) +"npZ" = ( +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/fore) "nqb" = ( /obj/machinery/atmospherics/pipe/smart/simple/cyan/visible, /turf/open/floor/plating/snowed/icemoon, @@ -43588,12 +44262,13 @@ dir = 4 }, /area/station/hallway/secondary/entry) -"nqL" = ( -/obj/machinery/food_cart, -/obj/effect/turf_decal/tile/brown/diagonal_edge, -/obj/structure/window/reinforced/spawner/directional/east, -/turf/open/floor/iron/kitchen/diagonal, -/area/station/service/kitchen) +"nqI" = ( +/obj/effect/landmark/event_spawn, +/obj/machinery/requests_console/auto_name/directional/south, +/obj/machinery/holopad, +/obj/effect/turf_decal/bot_white, +/turf/open/floor/iron/grimy, +/area/station/service/theater) "nqP" = ( /obj/machinery/camera/directional/north{ c_tag = "Research Division West"; @@ -43620,39 +44295,23 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/engineering/atmos/mix) +"nrh" = ( +/obj/effect/turf_decal/weather/snow/corner{ + dir = 10 + }, +/turf/open/floor/plating/snowed/icemoon, +/area/icemoon/underground/explored) "nrm" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/turf_decal/tile/brown/anticorner/contrasted, /turf/open/floor/iron/dark, /area/station/cargo/miningdock) -"nro" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 8 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/chair/stool/bar/directional/east, -/obj/effect/landmark/start/hangover, -/turf/open/floor/stone, -/area/station/commons/lounge) "nrq" = ( /obj/effect/turf_decal/tile/red, /obj/structure/extinguisher_cabinet/directional/south, /turf/open/floor/iron/textured, /area/station/security/brig) -"nrt" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/obj/structure/disposalpipe/sorting/mail/flip{ - dir = 4 - }, -/obj/effect/mapping_helpers/mail_sorting/service/theater, -/turf/open/floor/wood/parquet, -/area/station/commons/lounge) "nrA" = ( /obj/machinery/atmospherics/pipe/smart/simple/yellow/visible{ dir = 4 @@ -43702,31 +44361,10 @@ }, /turf/open/floor/iron/dark, /area/station/engineering/supermatter/room) -"nsf" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 8 - }, -/obj/structure/railing/corner{ - dir = 1 - }, -/obj/structure/sign/poster/official/random/directional/north, -/turf/open/floor/wood, -/area/station/hallway/secondary/service) "nsp" = ( /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/maintenance/aft/lesser) -"nsq" = ( -/obj/structure/window/reinforced/spawner/directional/north{ - layer = 2.9 - }, -/obj/structure/filingcabinet/filingcabinet, -/obj/effect/turf_decal/tile/brown/half/contrasted{ - dir = 1 - }, -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/cargo/sorting) "nsr" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -43743,12 +44381,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/engine, /area/station/engineering/supermatter/room) -"nsz" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/light/small/directional/south, -/obj/structure/rack, -/turf/open/floor/iron/smooth, -/area/station/maintenance/department/chapel) "nsK" = ( /obj/effect/turf_decal/stripes/line, /obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, @@ -43891,6 +44523,20 @@ /obj/structure/flora/bush/snow/style_random, /turf/open/misc/asteroid/snow/icemoon, /area/icemoon/surface/outdoors/nospawn) +"nvc" = ( +/obj/machinery/smartfridge, +/turf/open/floor/iron/dark, +/area/station/service/kitchen) +"nvh" = ( +/obj/machinery/vending/wardrobe/chef_wardrobe, +/obj/effect/turf_decal/siding/white/corner{ + dir = 8 + }, +/obj/machinery/light/directional/north, +/obj/structure/sign/poster/contraband/moffuchis_pizza/directional/east, +/obj/machinery/status_display/evac/directional/north, +/turf/open/floor/iron/white/smooth_large, +/area/station/service/kitchen) "nvr" = ( /obj/effect/turf_decal/weather/snow/corner, /obj/machinery/light/small/directional/north, @@ -43902,10 +44548,12 @@ }, /turf/open/floor/iron, /area/station/command/heads_quarters/hop) -"nvt" = ( -/obj/item/kirbyplants/organic/plant10, -/turf/open/floor/wood/parquet, -/area/station/commons/lounge) +"nvw" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/wood, +/area/station/hallway/secondary/service) "nvx" = ( /obj/machinery/airalarm/directional/east, /obj/effect/landmark/event_spawn, @@ -43960,6 +44608,12 @@ }, /turf/open/floor/iron/white, /area/station/science/genetics) +"nwq" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/science/ordnance) "nwr" = ( /obj/effect/turf_decal/tile/red/half/contrasted{ dir = 8 @@ -43969,17 +44623,23 @@ /obj/structure/cable, /turf/open/floor/iron/dark, /area/station/security/checkpoint/customs/auxiliary) +"nwC" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/blue/filled/warning{ + dir = 1 + }, +/obj/machinery/hydroponics/constructable, +/obj/machinery/status_display/evac/directional/north, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics) "nwF" = ( /obj/structure/chair/sofa/bench{ dir = 4 }, /turf/open/floor/iron, /area/station/security/prison/mess) -"nwI" = ( -/obj/item/reagent_containers/cup/bucket, -/obj/structure/sink/directional/east, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) "nwT" = ( /turf/closed/wall, /area/station/commons/vacant_room/office) @@ -43991,15 +44651,37 @@ dir = 9 }, /area/station/science/research) +"nxc" = ( +/turf/open/floor/glass, +/area/station/service/hydroponics) "nxe" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/pink, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /turf/open/floor/plating, /area/station/maintenance/port/fore) +"nxj" = ( +/obj/structure/railing{ + dir = 8 + }, +/obj/effect/turf_decal/loading_area/white, +/turf/open/floor/wood/large, +/area/station/service/bar/atrium) "nxm" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/maintenance/solars/port/aft) +"nxw" = ( +/obj/machinery/door/morgue{ + req_access = list("bar") + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/turf/open/floor/iron/grimy, +/area/station/service/bar/backroom) "nxD" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -44035,16 +44717,25 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central) -"nxY" = ( -/obj/structure/chair/stool/directional/north, -/turf/open/floor/iron, -/area/station/commons/fitness) "nyg" = ( /obj/structure/cable, /obj/effect/decal/cleanable/dirt, /obj/structure/sign/poster/random/directional/south, /turf/open/floor/plating, /area/station/construction) +"nyj" = ( +/obj/machinery/door/airlock/hydroponics/glass{ + name = "Hydroponics" + }, +/obj/effect/mapping_helpers/airlock/access/all/service/hydroponics, +/obj/machinery/duct, +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/effect/turf_decal/siding/wood, +/turf/open/floor/iron/dark/textured_half, +/area/station/service/hydroponics) "nyl" = ( /obj/machinery/door/morgue{ name = "Private Study"; @@ -44169,6 +44860,12 @@ /obj/effect/turf_decal/tile/blue/full, /turf/open/floor/iron/large, /area/station/medical/treatment_center) +"nzt" = ( +/obj/effect/turf_decal/tile/bar{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) "nzy" = ( /obj/machinery/computer/atmos_control/mix_tank{ dir = 8 @@ -44265,17 +44962,25 @@ "nAH" = ( /turf/open/openspace/icemoon/keep_below, /area/station/hallway/secondary/entry) -"nAM" = ( -/obj/structure/railing/corner{ - dir = 8 +"nAI" = ( +/obj/structure/table, +/obj/item/stack/sheet/glass, +/obj/item/stack/sheet/glass, +/obj/item/stack/sheet/glass, +/obj/item/stock_parts/matter_bin, +/obj/item/stock_parts/matter_bin, +/obj/item/stock_parts/scanning_module, +/obj/item/stock_parts/scanning_module, +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/east, +/obj/item/multitool, +/obj/item/flatpack{ + board = /obj/item/circuitboard/machine/flatpacker }, -/obj/effect/landmark/start/botanist, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/green{ - dir = 8 +/turf/open/floor/iron/white/side{ + dir = 10 }, -/turf/open/floor/iron, -/area/station/service/hydroponics) +/area/station/science/lab) "nAN" = ( /obj/effect/landmark/start/paramedic, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -44364,6 +45069,14 @@ /obj/effect/turf_decal/delivery, /turf/open/floor/iron/dark, /area/station/maintenance/starboard/aft) +"nBO" = ( +/obj/structure/disposalpipe/sorting/mail, +/obj/effect/mapping_helpers/mail_sorting/service/bar, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "nBQ" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/components/tank/air{ @@ -44371,6 +45084,10 @@ }, /turf/open/floor/plating, /area/station/maintenance/aft/greater) +"nBZ" = ( +/obj/structure/stairs/south, +/turf/open/floor/stone, +/area/station/commons/lounge) "nCa" = ( /obj/structure/rack, /obj/item/pickaxe, @@ -44425,6 +45142,14 @@ }, /turf/open/floor/iron, /area/station/commons/fitness) +"nCz" = ( +/obj/structure/extinguisher_cabinet/directional/south, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/obj/machinery/light/directional/south, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) "nCD" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -44436,15 +45161,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/engineering/atmos/hfr_room) -"nCJ" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/plating, -/area/station/maintenance/department/crew_quarters/bar) "nCP" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 4 @@ -44466,6 +45182,12 @@ }, /turf/open/floor/iron/white, /area/station/medical/treatment_center) +"nCW" = ( +/obj/structure/table, +/turf/open/floor/iron/dark/textured_edge{ + dir = 8 + }, +/area/station/security/brig/entrance) "nDd" = ( /obj/machinery/status_display/evac/directional/west, /obj/effect/turf_decal/stripes/corner, @@ -44487,6 +45209,11 @@ /obj/effect/turf_decal/tile/dark/half/contrasted, /turf/open/floor/iron/white, /area/station/medical/medbay/lobby) +"nDm" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/spawner/random/structure/crate, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "nDp" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -44545,6 +45272,10 @@ "nDE" = ( /turf/closed/wall/r_wall, /area/station/security/prison/garden) +"nDF" = ( +/obj/machinery/air_sensor/ordnance_burn_chamber, +/turf/open/floor/engine/vacuum, +/area/station/science/ordnance/burnchamber) "nDJ" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -44610,6 +45341,10 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/hallway/secondary/entry) +"nEI" = ( +/obj/item/flashlight/lantern/on, +/turf/open/misc/hay/icemoon, +/area/icemoon/underground/explored) "nEV" = ( /obj/machinery/vending/wardrobe/sec_wardrobe, /obj/structure/cable, @@ -44644,15 +45379,6 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/iron/grimy, /area/station/ai_monitored/turret_protected/aisat_interior) -"nFm" = ( -/obj/machinery/camera/directional/south{ - c_tag = "Starboard Primary Hallway Center West" - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/starboard) "nFn" = ( /obj/effect/turf_decal/tile/red{ dir = 1 @@ -44694,6 +45420,14 @@ /obj/structure/cable, /turf/open/floor/plating/snowed/icemoon, /area/icemoon/surface/outdoors/nospawn) +"nFQ" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/chair/wood{ + dir = 1 + }, +/turf/open/floor/wood/parquet, +/area/station/service/bar/atrium) "nFU" = ( /obj/structure/chair/stool/directional/west, /obj/item/trash/energybar, @@ -44701,22 +45435,12 @@ /obj/structure/sign/poster/official/work_for_a_future/directional/south, /turf/open/floor/iron, /area/station/security/prison/work) -"nGb" = ( -/obj/effect/spawner/random/engineering/tracking_beacon, -/obj/effect/turf_decal/tile/red/full, -/turf/open/floor/iron/large, -/area/station/service/kitchen/diner) "nGk" = ( /obj/effect/decal/cleanable/cobweb/cobweb2, /obj/structure/rack, /obj/effect/spawner/random/maintenance, /turf/open/floor/plating, /area/station/maintenance/aft/greater) -"nGz" = ( -/obj/effect/landmark/start/hangover, -/obj/structure/extinguisher_cabinet/directional/east, -/turf/open/floor/wood/parquet, -/area/station/service/bar/atrium) "nGA" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 1 @@ -44764,16 +45488,6 @@ dir = 1 }, /area/station/security/lockers) -"nHa" = ( -/obj/effect/turf_decal/siding/white{ - dir = 4 - }, -/obj/effect/turf_decal/tile/green/opposingcorners{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue/opposingcorners, -/turf/open/floor/iron, -/area/station/hallway/secondary/service) "nHc" = ( /obj/structure/bodycontainer/morgue, /turf/open/floor/iron/dark, @@ -44834,6 +45548,13 @@ /obj/structure/barricade/wooden, /turf/open/floor/eighties/red, /area/station/security/prison/safe) +"nIe" = ( +/obj/item/stack/cable_coil, +/obj/structure/fence/corner{ + dir = 1 + }, +/turf/open/floor/plating/snowed/smoothed/icemoon, +/area/icemoon/surface/outdoors/nospawn) "nIl" = ( /obj/structure/chair/stool/directional/north, /obj/effect/turf_decal/tile/red/half/contrasted{ @@ -44841,10 +45562,6 @@ }, /turf/open/floor/iron/white, /area/station/science/robotics/lab) -"nIr" = ( -/obj/structure/sign/poster/official/random/directional/east, -/turf/open/floor/iron, -/area/station/hallway/secondary/service) "nIt" = ( /obj/structure/stairs/west, /turf/open/floor/iron/white, @@ -44852,19 +45569,17 @@ "nIx" = ( /turf/closed/wall/r_wall, /area/station/maintenance/solars/starboard/aft) -"nIL" = ( -/obj/machinery/camera{ - c_tag = "Service Hallway - Lower West"; - dir = 9 - }, -/turf/open/floor/iron, -/area/station/hallway/secondary/service) +"nIY" = ( +/obj/effect/spawner/random/structure/girder, +/turf/open/floor/plating, +/area/station/maintenance/starboard/lesser) "nJd" = ( /obj/structure/grille, /turf/open/floor/plating, /area/station/maintenance/department/medical/morgue) "nJm" = ( /obj/structure/fluff/fokoff_sign, +/obj/effect/mapping_helpers/no_atoms_ontop, /turf/open/misc/asteroid/snow/icemoon, /area/icemoon/underground/explored) "nJo" = ( @@ -44892,6 +45607,15 @@ /obj/effect/mapping_helpers/airlock/access/all/engineering/engine_equipment, /turf/open/floor/iron, /area/station/engineering/storage) +"nJq" = ( +/obj/structure/closet/athletic_mixed, +/obj/effect/landmark/start/hangover/closet, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 1 + }, +/obj/machinery/status_display/evac/directional/north, +/turf/open/floor/iron, +/area/station/commons/fitness) "nJy" = ( /obj/structure/chair/pew{ dir = 1 @@ -44900,10 +45624,6 @@ dir = 8 }, /area/station/service/chapel) -"nJC" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/wood/parquet, -/area/station/commons/lounge) "nJI" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/green/visible, /obj/effect/turf_decal/siding/wideplating/corner{ @@ -44965,15 +45685,6 @@ /obj/effect/landmark/start/hangover, /turf/open/floor/iron, /area/station/cargo/lobby) -"nKG" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/public/glass{ - name = "Central Access" - }, -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/tile/blue, -/turf/open/floor/iron, -/area/station/hallway/primary/central) "nKK" = ( /obj/effect/turf_decal/trimline/green/filled/line{ dir = 10 @@ -45031,23 +45742,41 @@ /obj/structure/mirror/broken/directional/north, /turf/open/floor/iron, /area/station/maintenance/port/fore) +"nLa" = ( +/obj/structure/flora/bush/lavendergrass/style_random, +/obj/structure/flora/bush/style_random, +/turf/open/floor/grass, +/area/station/service/hydroponics) "nLb" = ( /obj/machinery/blackbox_recorder, /turf/open/floor/iron/dark/telecomms, /area/station/tcommsat/server) +"nLd" = ( +/obj/effect/turf_decal/siding/thinplating/dark, +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/blue/filled/warning{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics) "nLe" = ( /obj/effect/turf_decal/tile/dark/half/contrasted, /obj/machinery/light/floor, /turf/open/floor/iron/white, /area/station/medical/virology) -"nLg" = ( -/obj/item/wrench, -/obj/effect/turf_decal/stripes/line{ - dir = 4 +"nLs" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 10 }, -/obj/machinery/atmospherics/pipe/layer_manifold/supply/visible, -/turf/open/floor/plating, -/area/station/maintenance/fore) +/obj/structure/sign/poster/official/random/directional/north, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) "nLH" = ( /obj/effect/turf_decal/stripes/line, /turf/open/floor/iron, @@ -45107,6 +45836,28 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/science/research) +"nMC" = ( +/obj/structure/railing{ + dir = 4 + }, +/obj/item/radio/intercom/directional/north, +/obj/structure/rack, +/obj/item/pickaxe, +/obj/item/toy/figure/chef, +/obj/machinery/camera/directional/north{ + c_tag = "Service - Coldroom" + }, +/obj/effect/turf_decal/siding/white{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/service/kitchen/coldroom) +"nMD" = ( +/obj/structure/fence/door{ + dir = 4 + }, +/turf/open/floor/plating/snowed/smoothed/icemoon, +/area/icemoon/surface/outdoors/nospawn) "nME" = ( /obj/item/clothing/head/utility/hardhat, /turf/open/floor/plating/snowed/icemoon, @@ -45170,13 +45921,6 @@ /obj/item/clothing/glasses/meson/engine, /turf/open/floor/iron/dark, /area/station/engineering/storage) -"nNv" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/disposalpipe/segment, -/turf/open/floor/catwalk_floor/iron_smooth, -/area/station/maintenance/starboard/fore) "nNy" = ( /obj/structure/sign/warning/xeno_mining{ pixel_x = 29 @@ -45195,6 +45939,15 @@ /obj/structure/chair/stool/directional/east, /turf/open/floor/iron/dark, /area/station/medical/virology) +"nNI" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "nNM" = ( /obj/machinery/door/airlock/maintenance, /obj/effect/mapping_helpers/airlock/abandoned, @@ -45203,11 +45956,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) -"nNQ" = ( -/obj/machinery/duct, -/obj/effect/turf_decal/tile/bar/opposingcorners, -/turf/open/floor/iron, -/area/station/service/bar/backroom) "nNU" = ( /obj/machinery/chem_dispenser, /obj/structure/window/reinforced/spawner/directional/west, @@ -45264,6 +46012,17 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/command/bridge) +"nOI" = ( +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 4 + }, +/obj/effect/landmark/start/assistant, +/obj/structure/chair/office{ + dir = 8 + }, +/obj/machinery/status_display/ai/directional/east, +/turf/open/floor/iron, +/area/station/commons/fitness) "nOQ" = ( /obj/machinery/suit_storage_unit/security, /obj/machinery/camera/directional/north{ @@ -45288,6 +46047,13 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/aft/lesser) +"nPS" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/power/apc/auto_name/directional/west, +/obj/structure/cable, +/turf/open/floor/wood, +/area/station/hallway/secondary/service) "nQd" = ( /obj/effect/turf_decal/trimline/green/filled/corner, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -45307,6 +46073,30 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/engineering/storage/tech) +"nQm" = ( +/obj/machinery/newscaster/directional/east, +/obj/machinery/light/directional/east, +/obj/machinery/camera/directional/east{ + c_tag = "Service - Hall" + }, +/obj/machinery/disposal/bin/tagger, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/turf/open/floor/wood, +/area/station/hallway/secondary/service) +"nQq" = ( +/obj/machinery/cell_charger{ + pixel_y = 5 + }, +/obj/item/stock_parts/power_store/cell/high{ + pixel_y = 6 + }, +/obj/structure/table/glass, +/turf/open/floor/iron/white/side{ + dir = 9 + }, +/area/station/science/lab) "nQu" = ( /obj/machinery/holopad, /obj/effect/turf_decal/bot, @@ -45430,6 +46220,15 @@ /obj/structure/sign/poster/official/nanotrasen_logo/directional/east, /turf/open/floor/iron, /area/station/commons/dorms/laundry) +"nRy" = ( +/mob/living/basic/goat/pete{ + desc = "Not known for their pleasant disposition. This one seems a bit more hardy to the cold."; + habitable_atmos = list("min_oxy"=1,"max_oxy"=0,"min_plas"=0,"max_plas"=1,"min_co2"=0,"max_co2"=5,"min_n2"=0,"max_n2"=0); + minimum_survivable_temperature = 150; + name = "Snowy Pete" + }, +/turf/open/misc/ice/coldroom, +/area/station/service/kitchen/coldroom) "nRO" = ( /obj/structure/cable/multilayer/multiz, /obj/structure/sign/poster/contraband/random/directional/north, @@ -45504,6 +46303,12 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/aisat_interior) +"nSG" = ( +/obj/machinery/atmospherics/components/unary/outlet_injector/on{ + dir = 4 + }, +/turf/open/floor/engine/xenobio, +/area/station/science/xenobiology) "nSH" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -45523,6 +46328,14 @@ /obj/machinery/atmospherics/pipe/smart/simple/orange/visible, /turf/open/floor/plating/snowed/icemoon, /area/icemoon/surface/outdoors/nospawn) +"nSX" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/light/small/broken/directional/north, +/turf/open/floor/plating, +/area/station/maintenance/fore) "nTp" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -45534,12 +46347,12 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/decal/cleanable/cobweb, -/obj/item/radio/intercom/directional/north, /obj/structure/cable, /obj/machinery/power/apc/auto_name/directional/west, /obj/structure/disposalpipe/segment{ dir = 6 }, +/obj/machinery/light/small/dim/directional/north, /turf/open/floor/iron/dark, /area/station/medical/morgue) "nTK" = ( @@ -45577,6 +46390,14 @@ "nTO" = ( /turf/closed/wall/r_wall, /area/mine/laborcamp/security) +"nTP" = ( +/obj/item/food/grown/potato{ + pixel_y = 4 + }, +/obj/structure/rack, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "nTV" = ( /obj/structure/table/reinforced, /obj/item/screwdriver{ @@ -45612,6 +46433,16 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark/smooth_half, /area/station/ai_monitored/command/storage/eva) +"nUI" = ( +/obj/machinery/computer/records/security, +/obj/machinery/light_switch/directional/north{ + pixel_x = -16 + }, +/obj/machinery/computer/security/telescreen/normal/directional/north, +/turf/open/floor/iron/dark/textured_edge{ + dir = 8 + }, +/area/station/security/brig/entrance) "nUJ" = ( /obj/machinery/flasher/directional/east{ id = "brigentry" @@ -45651,16 +46482,6 @@ }, /turf/open/floor/carpet, /area/station/service/library) -"nVz" = ( -/obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/east, -/obj/effect/turf_decal/tile/blue/half/contrasted{ - dir = 1 - }, -/turf/open/floor/iron/dark/side{ - dir = 1 - }, -/area/station/service/hydroponics) "nVB" = ( /obj/effect/turf_decal/trimline/dark/warning{ dir = 4 @@ -45671,18 +46492,19 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/iron/white, /area/station/science/robotics/lab) +"nVO" = ( +/obj/structure/table, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/turf/open/floor/iron/smooth, +/area/station/maintenance/starboard/fore) "nVR" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/cafeteria{ dir = 5 }, /area/station/maintenance/port/aft) -"nVX" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/wood/parquet, -/area/station/commons/lounge) "nVZ" = ( /obj/machinery/door/airlock/command{ name = "Captain's Office" @@ -45711,13 +46533,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/port/lesser) -"nWw" = ( -/obj/structure/chair/wood{ - dir = 4 - }, -/obj/machinery/newscaster/directional/north, -/turf/open/floor/wood/parquet, -/area/station/commons/lounge) "nWH" = ( /turf/closed/wall, /area/station/maintenance/department/cargo) @@ -45748,17 +46563,20 @@ }, /turf/open/floor/iron/dark, /area/station/engineering/supermatter/room) -"nXn" = ( -/obj/structure/table, -/obj/item/storage/medkit/regular, -/turf/open/floor/iron, -/area/station/commons/fitness) "nXp" = ( /obj/structure/window/reinforced/spawner/directional/east, /obj/structure/table/glass, /obj/item/storage/box/monkeycubes, /turf/open/floor/iron, /area/station/science/xenobiology) +"nXs" = ( +/obj/effect/mapping_helpers/airlock/access/all/service/kitchen, +/obj/structure/cable, +/obj/machinery/door/airlock/maintenance{ + name = "Kitchen Maintenance" + }, +/turf/open/floor/plating, +/area/station/service/kitchen) "nXH" = ( /obj/structure/bodycontainer/crematorium{ id = "crematoriumChapel" @@ -45796,13 +46614,25 @@ }, /turf/open/floor/iron, /area/station/command/bridge) -"nYQ" = ( -/obj/machinery/rnd/production/techfab/department/service, -/obj/effect/turf_decal/stripes/line{ - dir = 1 +"nYN" = ( +/turf/open/floor/wood, +/area/station/commons/lounge) +"nYR" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 9 }, -/turf/open/floor/plating, -/area/station/hallway/secondary/service) +/obj/effect/turf_decal/trimline/blue/filled/warning{ + dir = 9 + }, +/obj/structure/reagent_dispensers/watertank/high, +/obj/item/reagent_containers/cup/watering_can, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics) +"nYY" = ( +/obj/machinery/light/directional/south, +/obj/effect/turf_decal/tile/purple, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) "nYZ" = ( /obj/item/storage/bag/trash, /turf/open/floor/plating, @@ -45875,14 +46705,38 @@ }, /turf/open/floor/iron/freezer, /area/station/commons/toilet/locker) -"oaa" = ( +"oac" = ( +/obj/effect/turf_decal/siding/thinplating/dark/corner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 5 + }, +/obj/effect/turf_decal/trimline/blue/filled/warning{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/button/door/directional/north{ + id = "botany_apiary"; + name = "Bee Protection Shutters" + }, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics) +"oas" = ( +/obj/machinery/door/firedoor, /obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 10 +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/stripes/white/line{ + dir = 4 }, -/obj/structure/sign/poster/official/random/directional/north, -/turf/open/floor/iron, -/area/station/hallway/primary/starboard) +/obj/effect/turf_decal/stripes/white/line{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured, +/area/station/hallway/primary/central) "oaG" = ( /obj/effect/turf_decal/stripes/asteroid/line{ dir = 9 @@ -45901,6 +46755,18 @@ }, /turf/open/floor/iron/white/corner, /area/mine/living_quarters) +"oaJ" = ( +/obj/effect/turf_decal/siding/white{ + dir = 8 + }, +/obj/machinery/requests_console/auto_name/directional/east, +/obj/structure/table, +/obj/machinery/microwave{ + pixel_y = 5 + }, +/obj/effect/mapping_helpers/requests_console/supplies, +/turf/open/floor/iron/white/smooth_large, +/area/station/service/kitchen) "oaP" = ( /obj/machinery/door/airlock/research{ name = "Crater Observation Room" @@ -45933,6 +46799,9 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/port/aft) +"obq" = ( +/turf/open/floor/engine/vacuum, +/area/station/science/ordnance/burnchamber) "obr" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/door/poddoor/preopen{ @@ -45977,6 +46846,15 @@ dir = 1 }, /area/station/engineering/atmos/storage/gas) +"obT" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/duct, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics) "obZ" = ( /obj/machinery/camera/directional/east{ c_tag = "Xenobiology Test Chamber Access"; @@ -45984,29 +46862,12 @@ }, /turf/open/floor/iron/white, /area/station/science/xenobiology) -"ocd" = ( -/obj/machinery/igniter/incinerator_ordmix, -/turf/open/floor/engine/vacuum, -/area/station/science/ordnance) -"ocf" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 1 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +"ocp" = ( +/obj/effect/landmark/start/hangover, +/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/wood/parquet, -/area/station/commons/lounge) -"ocj" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/public/glass{ - name = "Central Access" - }, -/turf/open/floor/iron, -/area/station/hallway/primary/starboard) +/turf/open/floor/iron/dark, +/area/station/medical/morgue) "ocu" = ( /obj/effect/turf_decal/bot_white, /obj/structure/cable, @@ -46091,6 +46952,11 @@ }, /turf/open/floor/plating/snowed/icemoon, /area/icemoon/underground/explored) +"odZ" = ( +/obj/machinery/door/airlock/hatch, +/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "oed" = ( /obj/machinery/door/window/right/directional/east{ name = "Robotics Surgery"; @@ -46197,15 +47063,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/department/medical/morgue) -"ofT" = ( -/obj/structure/closet/secure_closet/hydroponics, -/obj/effect/turf_decal/siding/thinplating/dark, -/obj/machinery/camera{ - c_tag = "Service Botany - Backroom"; - dir = 9 - }, -/turf/open/floor/plating, -/area/station/service/hydroponics) "ogd" = ( /obj/structure/chair/office{ dir = 8 @@ -46219,6 +47076,9 @@ /obj/effect/landmark/start/scientist, /turf/open/floor/iron, /area/station/science/xenobiology) +"ogu" = ( +/turf/open/floor/iron/dark/smooth_half, +/area/station/service/hydroponics) "ogy" = ( /obj/machinery/door/airlock/maintenance{ name = "EVA Maintenance" @@ -46254,6 +47114,11 @@ }, /turf/open/floor/plating, /area/station/maintenance/department/cargo) +"ohk" = ( +/obj/machinery/light/small/directional/west, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/starboard/lesser) "ohp" = ( /turf/open/floor/glass, /area/station/maintenance/department/medical/central) @@ -46273,6 +47138,15 @@ }, /turf/open/floor/plating/snowed/icemoon, /area/icemoon/surface/outdoors/nospawn) +"ohP" = ( +/obj/structure/table/wood, +/obj/machinery/duct, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/box/white/corners{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/service/bar) "ohS" = ( /obj/structure/railing{ dir = 8 @@ -46349,7 +47223,7 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/mapping_helpers/airlock/access/all/medical/chemistry, +/obj/effect/mapping_helpers/airlock/access/all/medical/general, /turf/open/floor/iron/smooth, /area/station/maintenance/department/medical/central) "oiD" = ( @@ -46447,13 +47321,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/ce) -"ojD" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/obj/machinery/duct, -/turf/open/floor/iron, -/area/station/service/hydroponics) "ojF" = ( /obj/machinery/rnd/production/protolathe/department/science, /turf/open/floor/iron/checker, @@ -46465,13 +47332,6 @@ dir = 4 }, /area/station/science/research) -"ojV" = ( -/obj/item/flashlight, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/maintenance/starboard/fore) "ojW" = ( /obj/machinery/light/small/directional/east, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, @@ -46509,11 +47369,6 @@ /obj/structure/sign/poster/official/random/directional/north, /turf/open/floor/iron, /area/mine/laborcamp/security) -"oko" = ( -/obj/effect/turf_decal/siding/wood/end, -/obj/structure/bookcase/random/fiction, -/turf/open/floor/iron/dark, -/area/station/commons/lounge) "okx" = ( /obj/structure/table/reinforced, /obj/machinery/door/window/brigdoor/left/directional/south{ @@ -46558,6 +47413,13 @@ "olf" = ( /turf/open/floor/carpet, /area/station/commons/dorms) +"olt" = ( +/obj/structure/chair/sofa/bench/right{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/fore) "olH" = ( /obj/machinery/door/airlock/command{ name = "Captain's Quarters" @@ -46581,11 +47443,9 @@ /turf/open/floor/iron/large, /area/station/medical/treatment_center) "olO" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/blood/footprints, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/station/medical/morgue) +/obj/structure/fence, +/turf/open/floor/plating/snowed/smoothed/icemoon, +/area/icemoon/underground/explored/graveyard) "olQ" = ( /obj/structure/sign/nanotrasen{ pixel_y = 32 @@ -46632,13 +47492,6 @@ "omk" = ( /turf/open/floor/glass/reinforced, /area/station/security/office) -"omt" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 5 - }, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) "omG" = ( /obj/structure/table, /obj/item/flashlight/lamp, @@ -46668,6 +47521,15 @@ }, /turf/open/floor/plating, /area/station/security/prison/safe) +"omS" = ( +/obj/machinery/door/airlock/maintenance{ + name = "Kitchen Maintenance" + }, +/obj/machinery/duct, +/obj/effect/mapping_helpers/airlock/access/all/service/kitchen, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plating, +/area/station/service/kitchen/coldroom) "ond" = ( /obj/effect/landmark/event_spawn, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -46743,16 +47605,6 @@ /obj/machinery/processor/slime, /turf/open/floor/iron, /area/station/science/xenobiology) -"oop" = ( -/obj/machinery/door/airlock/external{ - name = "External Access" - }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 1 - }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/external, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) "oor" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/tile/neutral/fourcorners, @@ -46827,21 +47679,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/station/maintenance/starboard/upper) -"ops" = ( -/obj/structure/table/glass, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/siding/white{ - dir = 5 - }, -/obj/item/cultivator, -/obj/item/plant_analyzer, -/obj/effect/turf_decal/tile/green/opposingcorners{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue/opposingcorners, -/turf/open/floor/iron, -/area/station/service/hydroponics) "opu" = ( /obj/structure/extinguisher_cabinet/directional/south, /obj/structure/disposalpipe/segment{ @@ -46875,6 +47712,20 @@ /obj/machinery/door/firedoor/border_only, /turf/open/floor/iron/white, /area/station/science/ordnance) +"opH" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/stripes/white/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/white/line{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark/textured, +/area/station/hallway/primary/starboard) "opI" = ( /obj/machinery/microwave{ pixel_y = 7 @@ -46948,6 +47799,13 @@ /obj/effect/turf_decal/tile/dark_green, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/ai_upload) +"oqB" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/box/red/corners{ + dir = 1 + }, +/turf/open/floor/wood/parquet, +/area/station/service/bar/atrium) "oqC" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -46985,15 +47843,6 @@ /obj/effect/turf_decal/tile/brown/anticorner/contrasted, /turf/open/floor/iron/white, /area/station/medical/break_room) -"orf" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) "ork" = ( /obj/structure/fence/door{ dir = 4 @@ -47026,6 +47875,12 @@ /obj/machinery/recharge_station, /turf/open/floor/iron/freezer, /area/station/commons/toilet/locker) +"oru" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/turf/open/floor/wood/large, +/area/station/commons/lounge) "orv" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -47074,6 +47929,16 @@ /obj/effect/landmark/start/hangover/closet, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) +"orZ" = ( +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk, +/obj/item/radio/intercom/directional/east, +/obj/machinery/camera/directional/north{ + c_tag = "Service - Atrium" + }, +/obj/effect/turf_decal/bot_white, +/turf/open/floor/wood/large, +/area/station/service/bar/atrium) "osd" = ( /obj/structure/chair/comfy/black{ dir = 8 @@ -47118,6 +47983,10 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/maintenance/port/aft) +"osN" = ( +/obj/effect/spawner/structure/window/reinforced/tinted, +/turf/open/floor/plating, +/area/station/maintenance/fore) "osO" = ( /obj/effect/turf_decal/tile/blue{ dir = 4 @@ -47134,16 +48003,6 @@ }, /turf/open/floor/plating, /area/station/ai_monitored/turret_protected/aisat_interior) -"otj" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/spawner/random/structure/steam_vent, -/turf/open/floor/plating, -/area/station/maintenance/department/crew_quarters/bar) "ots" = ( /obj/structure/cable, /obj/effect/spawner/structure/window/hollow/reinforced/middle, @@ -47168,10 +48027,6 @@ /obj/item/healthanalyzer, /turf/open/floor/iron/white/textured, /area/station/security/medical) -"otC" = ( -/obj/structure/railing, -/turf/open/genturf, -/area/icemoon/surface/outdoors/unexplored/rivers/no_monsters) "otG" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/turf_decal/tile/blue{ @@ -47186,10 +48041,6 @@ /obj/machinery/light/directional/west, /turf/open/floor/iron/white, /area/station/science/robotics/lab) -"otQ" = ( -/obj/structure/sign/poster/official/random/directional/east, -/turf/open/floor/iron, -/area/station/hallway/primary/central) "oua" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -47228,16 +48079,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/fore) -"ouE" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 6 - }, -/obj/machinery/computer/security/telescreen/engine{ - dir = 8; - pixel_x = 24 - }, -/turf/open/floor/iron, -/area/station/engineering/engine_smes) "ouP" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/general/visible, @@ -47287,6 +48128,11 @@ /obj/structure/cable, /turf/open/floor/iron/smooth, /area/station/security/lockers) +"ovZ" = ( +/obj/structure/table/wood, +/obj/item/paper/crumpled, +/turf/open/floor/plating, +/area/station/maintenance/starboard/lesser) "owf" = ( /obj/effect/turf_decal/stripes/white/line, /obj/effect/decal/cleanable/dirt, @@ -47323,10 +48169,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/maintenance/department/medical/morgue) -"owU" = ( -/obj/structure/window/reinforced/spawner/directional/west, -/turf/open/floor/iron/dark, -/area/station/commons/fitness) "oxe" = ( /obj/machinery/computer/cargo/request, /obj/effect/turf_decal/tile/brown/half/contrasted, @@ -47472,16 +48314,6 @@ }, /turf/open/floor/iron/dark, /area/station/security/mechbay) -"oyV" = ( -/obj/effect/turf_decal/tile/neutral/diagonal_edge, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/landmark/start/cook, -/obj/structure/disposalpipe/segment{ - dir = 9 - }, -/turf/open/floor/iron/kitchen/diagonal, -/area/station/service/kitchen) "oyW" = ( /turf/open/floor/circuit, /area/station/ai_monitored/turret_protected/aisat/hallway) @@ -47508,6 +48340,23 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/port) +"ozx" = ( +/obj/effect/turf_decal/tile/green/opposingcorners{ + dir = 1 + }, +/obj/effect/turf_decal/tile/blue/opposingcorners, +/obj/effect/turf_decal/siding/white{ + dir = 1 + }, +/obj/structure/minecart_rail{ + dir = 4 + }, +/obj/item/radio/intercom/directional/south{ + frequency = 1453; + name = "Kitchen Intercom" + }, +/turf/open/floor/iron, +/area/station/service/hydroponics) "ozA" = ( /obj/structure/closet/secure_closet/research_director, /obj/effect/turf_decal/stripes/line{ @@ -47559,6 +48408,12 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/maintenance/department/chapel) +"ozW" = ( +/obj/structure/railing/wooden_fence{ + dir = 10 + }, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/explored) "ozX" = ( /obj/machinery/hydroponics/soil, /turf/open/floor/grass, @@ -47656,17 +48511,6 @@ /obj/item/book/bible, /turf/open/floor/iron/dark, /area/station/service/chapel/office) -"oBl" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue/half/contrasted{ - dir = 1 - }, -/turf/open/floor/iron/dark/side{ - dir = 1 - }, -/area/station/service/hydroponics) "oBm" = ( /obj/structure/chair/comfy/beige{ dir = 1; @@ -47701,11 +48545,16 @@ /obj/machinery/light/floor, /turf/open/floor/carpet, /area/station/service/library) -"oBP" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/commons/fitness) +"oBJ" = ( +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/obj/effect/mapping_helpers/burnt_floor, +/obj/structure/railing{ + dir = 6 + }, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "oBQ" = ( /obj/machinery/power/apc/auto_name/directional/west, /obj/structure/cable, @@ -47739,6 +48588,10 @@ /obj/item/stack/cable_coil/five, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) +"oCw" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/plating, +/area/station/maintenance/fore) "oCA" = ( /obj/structure/closet/secure_closet/cytology, /obj/machinery/button/door/directional/north{ @@ -47813,11 +48666,6 @@ /obj/structure/grille/broken, /turf/open/floor/plating, /area/station/maintenance/department/medical/central) -"oDm" = ( -/obj/effect/turf_decal/siding/white, -/obj/effect/turf_decal/tile/red/full, -/turf/open/floor/iron/large, -/area/station/service/kitchen/diner) "oDn" = ( /obj/machinery/door/airlock/atmos/glass, /obj/structure/cable, @@ -47854,13 +48702,6 @@ dir = 8 }, /area/station/maintenance/port/fore) -"oDJ" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) "oDQ" = ( /obj/effect/turf_decal/stripes/corner{ dir = 8 @@ -47878,13 +48719,12 @@ }, /turf/open/floor/iron/cafeteria, /area/station/commons/dorms/laundry) -"oEh" = ( -/obj/effect/turf_decal/tile/neutral/diagonal_edge, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 4 - }, -/turf/open/floor/iron/kitchen/diagonal, -/area/station/service/kitchen) +"oEe" = ( +/obj/machinery/duct, +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "oEj" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable, @@ -47909,11 +48749,20 @@ /obj/machinery/airalarm/directional/south, /turf/open/floor/iron, /area/station/engineering/main) +"oEC" = ( +/obj/machinery/light/small/directional/north, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/maintenance/starboard/fore) "oEF" = ( /obj/structure/cable/multilayer/multiz, /obj/effect/turf_decal/stripes/end, /turf/open/floor/iron/dark/textured, /area/station/medical/medbay/aft) +"oEH" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/medical/morgue) "oEX" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -47942,6 +48791,17 @@ /obj/machinery/holopad/secure, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/ai) +"oFB" = ( +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/stripes/white/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/white/line{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark/textured, +/area/station/hallway/primary/starboard) "oFI" = ( /obj/effect/turf_decal/weather/snow/corner{ dir = 6 @@ -47996,21 +48856,6 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/solars/starboard/aft) -"oGn" = ( -/obj/structure/reagent_dispensers/watertank/high, -/obj/effect/turf_decal/stripes/line, -/obj/item/reagent_containers/cup/watering_can, -/obj/effect/turf_decal/tile/blue/half{ - dir = 4 - }, -/obj/effect/turf_decal/tile/green/half{ - dir = 8 - }, -/obj/machinery/light/directional/north, -/turf/open/floor/iron/half{ - dir = 1 - }, -/area/station/service/hydroponics) "oGs" = ( /obj/structure/disposalpipe/segment, /obj/effect/turf_decal/trimline/blue/filled/corner{ @@ -48092,6 +48937,15 @@ }, /turf/open/floor/plating, /area/station/engineering/storage_shared) +"oHs" = ( +/obj/structure/rack, +/obj/structure/window/reinforced/spawner/directional/north, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 8 + }, +/obj/effect/spawner/random/armory/rubbershot, +/turf/open/floor/iron/dark/textured, +/area/station/ai_monitored/security/armory) "oHH" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -48163,6 +49017,17 @@ }, /turf/open/floor/engine, /area/station/engineering/atmos/hfr_room) +"oIQ" = ( +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/obj/machinery/duct, +/obj/machinery/newscaster/directional/east, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics) "oIR" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/spawner/random/maintenance/four, @@ -48178,6 +49043,9 @@ /obj/structure/flora/bush/snow/style_random, /turf/open/misc/asteroid/snow/icemoon, /area/icemoon/surface/outdoors/nospawn) +"oJD" = ( +/turf/open/floor/plating/snowed/smoothed/icemoon, +/area/icemoon/underground/unexplored/rivers/deep/shoreline) "oJH" = ( /obj/structure/marker_beacon/burgundy, /obj/effect/turf_decal/weather/snow/corner{ @@ -48185,6 +49053,16 @@ }, /turf/open/floor/plating/snowed/icemoon, /area/icemoon/surface/outdoors/nospawn) +"oJK" = ( +/obj/machinery/navbeacon{ + codes_txt = "delivery;dir=1"; + location = "Medbay" + }, +/obj/effect/turf_decal/bot, +/obj/structure/window/reinforced/spawner/directional/east, +/obj/structure/plasticflaps/opaque, +/turf/open/floor/iron/dark, +/area/station/maintenance/department/medical/central) "oJP" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/turf_decal/tile/dark_green, @@ -48200,15 +49078,6 @@ dir = 1 }, /area/station/command/gateway) -"oKb" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/machinery/door/poddoor/shutters/preopen{ - dir = 1; - id = "pharmacy_shutters3"; - name = "Pharmacy Shutters" - }, -/turf/open/floor/plating, -/area/station/service/kitchen) "oKu" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -48345,26 +49214,6 @@ /obj/structure/sign/warning/gas_mask, /turf/open/floor/plating, /area/station/maintenance/solars/port/fore) -"oLV" = ( -/obj/machinery/vending/wardrobe/chef_wardrobe{ - pixel_x = -2 - }, -/turf/open/floor/plating/snowed/coldroom, -/area/station/service/kitchen/coldroom) -"oLW" = ( -/obj/machinery/computer/security/telescreen{ - desc = "Used to access the various cameras on the station."; - dir = 1; - layer = 3.1; - name = "Security Camera Monitor"; - network = list("ss13"); - pixel_y = 2 - }, -/obj/structure/table, -/turf/open/floor/iron/dark/textured_edge{ - dir = 8 - }, -/area/station/security/brig/entrance) "oMa" = ( /obj/structure/marker_beacon/burgundy, /obj/effect/turf_decal/weather/snow/corner{ @@ -48400,17 +49249,6 @@ /obj/effect/spawner/random/trash/mess, /turf/open/floor/iron/grimy, /area/station/maintenance/aft/greater) -"oMG" = ( -/obj/effect/turf_decal/trimline/green/filled/line, -/obj/effect/turf_decal/trimline/blue/filled/warning, -/obj/effect/turf_decal/siding/white{ - dir = 4 - }, -/obj/machinery/camera/directional/south{ - c_tag = "Service Botany - Lower South" - }, -/turf/open/floor/iron/dark, -/area/station/service/hydroponics) "oMO" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable, @@ -48443,6 +49281,14 @@ "oMT" = ( /turf/open/floor/iron, /area/station/command/heads_quarters/rd) +"oNy" = ( +/obj/effect/spawner/random/structure/crate_abandoned, +/obj/machinery/light/small/directional/south, +/obj/machinery/camera/directional/south{ + c_tag = "Chapel Electrical Maintenace Upper" + }, +/turf/open/floor/iron/smooth, +/area/station/maintenance/starboard/fore) "oNA" = ( /obj/effect/turf_decal/bot, /turf/open/floor/plating/snowed/smoothed/icemoon, @@ -48462,6 +49308,19 @@ /obj/structure/sign/poster/official/random/directional/south, /turf/open/floor/iron, /area/station/science/explab) +"oNN" = ( +/obj/effect/turf_decal/siding/wood, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/multi_tile/public/glass{ + name = "Atrium" + }, +/obj/structure/disposalpipe/segment, +/obj/effect/landmark/navigate_destination/kitchen, +/turf/open/floor/iron/dark/textured_half, +/area/station/service/bar/atrium) "oNO" = ( /obj/effect/turf_decal/stripes/line, /obj/machinery/meter, @@ -48491,6 +49350,15 @@ /obj/machinery/status_display/evac/directional/west, /turf/open/floor/iron/white, /area/station/science/research) +"oOt" = ( +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/stripes/white/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/white/line, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark/textured, +/area/station/hallway/primary/fore) "oOx" = ( /obj/machinery/door/airlock/public/glass/incinerator/atmos_interior, /obj/effect/mapping_helpers/airlock/cyclelink_helper, @@ -48533,6 +49401,18 @@ /obj/structure/sign/warning/secure_area, /turf/closed/wall/r_wall, /area/station/security/prison/work) +"oPd" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/duct, +/turf/open/floor/iron, +/area/station/service/bar) "oPl" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -48545,18 +49425,13 @@ /obj/item/soap/nanotrasen, /turf/open/floor/iron/dark, /area/station/security/execution/education) -"oPq" = ( -/obj/machinery/cell_charger{ - pixel_y = 5 - }, -/obj/item/stock_parts/cell/high{ - pixel_y = 6 - }, -/obj/structure/table/glass, -/turf/open/floor/iron/white/side{ - dir = 9 +"oPr" = ( +/obj/effect/landmark/start/bartender, +/obj/effect/turf_decal/siding/wood{ + dir = 4 }, -/area/station/science/lab) +/turf/open/floor/iron/grimy, +/area/station/service/bar/backroom) "oPv" = ( /obj/machinery/turretid{ control_area = "/area/station/ai_monitored/turret_protected/aisat/service"; @@ -48569,6 +49444,13 @@ }, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/aisat_interior) +"oPw" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "oPI" = ( /turf/open/floor/circuit, /area/station/ai_monitored/command/nuke_storage) @@ -48645,6 +49527,10 @@ "oQY" = ( /turf/open/floor/iron/white, /area/station/medical/virology) +"oRf" = ( +/obj/structure/flora/rock/pile/icy/style_random, +/turf/open/misc/asteroid/snow/coldroom, +/area/station/service/kitchen/coldroom) "oRk" = ( /obj/structure/disposalpipe/segment{ dir = 9 @@ -48662,17 +49548,6 @@ /obj/machinery/light/cold/directional/east, /turf/open/floor/iron/white, /area/station/medical/cryo) -"oRw" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 4 - }, -/obj/machinery/duct, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/structure/sign/poster/official/random/directional/south, -/turf/open/floor/wood, -/area/station/hallway/secondary/service) "oRy" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -48681,6 +49556,14 @@ }, /turf/open/floor/iron, /area/station/cargo/office) +"oRB" = ( +/obj/machinery/portable_atmospherics/pipe_scrubber, +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden, +/turf/open/floor/iron/showroomfloor, +/area/station/engineering/atmos) "oRE" = ( /obj/machinery/conveyor{ dir = 10; @@ -48708,14 +49591,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/mine/laborcamp) -"oSk" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/public/glass{ - name = "Fitness" - }, -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/commons/fitness) "oSm" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -48742,10 +49617,6 @@ /obj/structure/stairs/south, /turf/open/floor/iron/dark/textured, /area/station/security/prison) -"oSI" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/wood, -/area/station/hallway/secondary/service) "oSQ" = ( /obj/machinery/camera{ c_tag = "Medbay Stasis Center North"; @@ -48833,7 +49704,7 @@ /area/station/hallway/primary/central) "oTh" = ( /obj/machinery/door/airlock{ - id_tag = "Dorm2"; + id_tag = "Dorm1"; name = "Dorm 1" }, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -48849,17 +49720,6 @@ "oTA" = ( /turf/open/floor/iron/dark, /area/station/service/chapel) -"oTB" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/multiz/supply/visible/layer4{ - color = "#0000ff"; - dir = 8; - name = "Supply multi deck pipe adapter" - }, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) "oTM" = ( /obj/item/flashlight/lantern, /obj/structure/table/wood, @@ -48880,22 +49740,14 @@ }, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/aisat_interior) -"oUG" = ( -/obj/machinery/door/airlock{ - id_tag = "Toilet2"; - name = "Unit 2" - }, -/turf/open/floor/iron/freezer, -/area/station/commons/toilet) -"oUK" = ( -/obj/effect/turf_decal/trimline/green/filled/line{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/blue/filled/warning{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/service/hydroponics) +"oUv" = ( +/obj/structure/table/wood, +/obj/item/clothing/mask/fakemoustache, +/obj/item/cigarette/pipe, +/obj/item/clothing/glasses/monocle, +/obj/item/radio/intercom/directional/north, +/turf/open/floor/iron/grimy, +/area/station/service/theater) "oUL" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -48924,6 +49776,20 @@ /obj/machinery/light/small/directional/east, /turf/open/floor/iron/freezer, /area/station/commons/toilet) +"oVn" = ( +/obj/effect/turf_decal/box/red/corners{ + dir = 4 + }, +/turf/open/floor/wood/parquet, +/area/station/service/bar/atrium) +"oVr" = ( +/obj/structure/table/wood/poker, +/obj/effect/spawner/random/entertainment/coin{ + pixel_x = -7 + }, +/obj/effect/spawner/random/clothing/bowler_or_that, +/turf/open/floor/wood/large, +/area/station/commons/lounge) "oVt" = ( /obj/machinery/power/apc/auto_name/directional/south, /obj/structure/cable, @@ -49017,6 +49883,10 @@ /obj/item/stack/sheet/iron/fifty, /turf/open/floor/iron/dark, /area/station/engineering/supermatter/room) +"oWV" = ( +/obj/structure/sign/warning/cold_temp/directional/south, +/turf/open/floor/plating, +/area/station/maintenance/fore) "oXc" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/tile/yellow/half/contrasted{ @@ -49035,16 +49905,6 @@ }, /turf/open/floor/iron/dark/textured, /area/station/security/range) -"oXe" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 9 - }, -/obj/item/holosign_creator/robot_seat/bar, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/duct, -/obj/structure/table/wood, -/turf/open/floor/stone, -/area/station/service/bar) "oXf" = ( /obj/structure/closet/secure_closet/medical1, /obj/effect/turf_decal/trimline/blue/filled/line{ @@ -49064,9 +49924,6 @@ }, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/ai_upload) -"oXk" = ( -/turf/open/floor/carpet, -/area/station/service/theater) "oXm" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/mapping_helpers/burnt_floor, @@ -49121,10 +49978,6 @@ dir = 1 }, /area/station/hallway/primary/starboard) -"oXS" = ( -/obj/structure/chair/stool/directional/north, -/turf/open/floor/wood/parquet, -/area/station/commons/lounge) "oXT" = ( /obj/structure/table/glass, /obj/item/storage/box/beakers{ @@ -49156,15 +50009,6 @@ /obj/machinery/status_display/evac/directional/south, /turf/open/floor/iron, /area/station/commons/locker) -"oYc" = ( -/obj/structure/chair/wood/wings{ - dir = 8 - }, -/obj/structure/disposalpipe/segment{ - dir = 5 - }, -/turf/open/floor/wood/tile, -/area/station/service/theater) "oYi" = ( /obj/machinery/firealarm/directional/south, /obj/structure/table, @@ -49186,11 +50030,24 @@ }, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/ai_upload) -"oYH" = ( -/obj/effect/turf_decal/siding/wideplating/dark, -/obj/effect/landmark/start/botanist, +"oYw" = ( +/obj/effect/turf_decal/siding/white{ + dir = 1 + }, +/obj/effect/turf_decal/tile/green/opposingcorners{ + dir = 1 + }, +/obj/effect/turf_decal/tile/blue/opposingcorners, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/stripes/line, /turf/open/floor/iron, /area/station/service/hydroponics) +"oYC" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/maintenance/starboard/lesser) "oYI" = ( /obj/effect/spawner/random/vending/colavend, /turf/open/floor/wood, @@ -49201,6 +50058,16 @@ }, /turf/open/misc/asteroid/snow/icemoon, /area/icemoon/underground/explored) +"oZk" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/spawner/directional/south, +/obj/structure/window/reinforced/spawner/directional/west, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 8; + id = "botany_chasm_and_wolf_shutters" + }, +/turf/open/floor/plating, +/area/station/service/hydroponics) "oZn" = ( /obj/structure/cable, /obj/effect/turf_decal/stripes/line{ @@ -49219,6 +50086,13 @@ dir = 4 }, /area/station/security/prison) +"oZD" = ( +/obj/machinery/door/window/left/directional/west{ + req_access = list("hydroponics"); + name = "Hydroponics Equipment" + }, +/turf/open/floor/iron/half, +/area/station/service/hydroponics) "oZL" = ( /obj/machinery/atmospherics/components/binary/pump{ dir = 4; @@ -49282,6 +50156,9 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, /area/station/commons/locker) +"pba" = ( +/turf/open/floor/stone, +/area/station/service/bar/atrium) "pbk" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -49311,19 +50188,20 @@ }, /turf/open/floor/iron, /area/station/security/prison/garden) -"pbD" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 6 - }, -/obj/machinery/duct, -/obj/machinery/light/small/directional/west, -/turf/open/floor/plating, -/area/station/hallway/secondary/service) "pbE" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/landmark/event_spawn, /turf/open/floor/iron, /area/station/construction) +"pbF" = ( +/obj/effect/turf_decal/siding/wideplating/dark{ + dir = 1 + }, +/obj/item/seeds/berry, +/obj/machinery/light/small/dim/directional/south, +/obj/machinery/hydroponics/soil, +/turf/open/floor/grass, +/area/station/maintenance/starboard/fore) "pbH" = ( /obj/item/radio/intercom/directional/north, /turf/open/floor/iron, @@ -49384,6 +50262,13 @@ /obj/effect/mapping_helpers/airlock/access/all/supply/general, /turf/open/floor/iron, /area/station/cargo/drone_bay) +"pco" = ( +/obj/effect/decal/cleanable/blood/tracks, +/obj/structure/fence/cut/large{ + dir = 8 + }, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/explored) "pcr" = ( /obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored/nitrous_output{ dir = 8 @@ -49451,6 +50336,15 @@ /obj/machinery/firealarm/directional/east, /turf/open/floor/iron/dark/textured, /area/station/security/execution/transfer) +"pdC" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/effect/turf_decal/tile/bar{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) "pdK" = ( /obj/effect/turf_decal/tile/red/anticorner/contrasted, /turf/open/floor/iron/dark/textured, @@ -49459,32 +50353,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/general/visible, /turf/open/floor/engine, /area/station/science/explab) -"pdR" = ( -/obj/machinery/camera/directional/west{ - c_tag = "Cargo Bay Receiving Dock" - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/machinery/computer/cargo{ - dir = 4 - }, -/obj/machinery/button/door/directional/west{ - id = "QMLoaddoor"; - layer = 4; - name = "Loading Doors"; - pixel_y = -8; - req_access = list("cargo") - }, -/obj/machinery/button/door/directional/west{ - id = "QMLoaddoor2"; - layer = 4; - name = "Loading Doors"; - pixel_y = 8; - req_access = list("cargo") - }, -/turf/open/floor/iron, -/area/station/cargo/storage) "pdT" = ( /obj/structure/chair/sofa/corp/right{ dir = 8 @@ -49559,6 +50427,16 @@ /obj/structure/grille/broken, /turf/open/openspace/icemoon/keep_below, /area/icemoon/underground/explored) +"pfm" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/door/firedoor/heavy, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/science/ordnance) "pfn" = ( /obj/structure/sign/poster/official/work_for_a_future/directional/north, /obj/machinery/airalarm/directional/east, @@ -49571,29 +50449,21 @@ /obj/structure/flora/grass/green/style_random, /turf/open/misc/asteroid/snow/icemoon, /area/icemoon/underground/explored) -"pfB" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/machinery/door/firedoor, -/turf/open/floor/iron, -/area/station/hallway/primary/starboard) +"pfy" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/components/binary/pump/off/supply/visible/layer4{ + dir = 8; + name = "Air Out" + }, +/turf/open/floor/plating, +/area/station/maintenance/fore) "pfD" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/light/small/directional/east, /turf/open/floor/plating, /area/station/engineering/storage/tech) -"pfJ" = ( -/obj/structure/sink/directional/east, -/obj/machinery/button/door/directional/west{ - id = "xenobio2"; - layer = 4; - name = "Xenobio Pen 2 Blast Door"; - req_access = list("xenobiology") - }, -/obj/machinery/light/floor, -/turf/open/floor/iron/white, -/area/station/science/xenobiology) "pfO" = ( /obj/structure/chair/stool/directional/west, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -49621,6 +50491,11 @@ /obj/effect/turf_decal/box, /turf/open/floor/iron/dark/smooth_large, /area/station/cargo/bitrunning/den) +"pgv" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners, +/obj/machinery/duct, +/turf/open/floor/iron, +/area/station/service/bar) "pgw" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/requests_console/directional/south{ @@ -49682,6 +50557,28 @@ }, /turf/open/floor/iron/white, /area/station/medical/break_room) +"phl" = ( +/obj/structure/minecart_rail{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/turf_decal/weather/snow/corner, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 1 + }, +/turf/open/floor/plating/snowed/coldroom, +/area/icemoon/underground/explored) +"phr" = ( +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/mapping_helpers/airlock/access/all/service/hydroponics, +/obj/machinery/door/airlock/hydroponics/glass{ + name = "Apiary" + }, +/turf/open/floor/iron/dark/textured_half{ + dir = 1 + }, +/area/station/service/hydroponics) "phu" = ( /obj/structure/chair/sofa/bench/left{ dir = 1 @@ -49720,14 +50617,6 @@ }, /turf/open/floor/iron/dark, /area/station/engineering/atmos/hfr_room) -"phU" = ( -/obj/effect/turf_decal/siding/thinplating/dark, -/obj/machinery/door/window/right/directional/south{ - name = "Theater Stage" - }, -/obj/structure/disposalpipe/segment, -/turf/open/floor/carpet, -/area/station/service/theater) "pib" = ( /obj/machinery/camera/motion/directional/south{ c_tag = "Vault"; @@ -49767,12 +50656,6 @@ /obj/effect/spawner/random/engineering/tracking_beacon, /turf/open/floor/iron, /area/station/security/brig/upper) -"pix" = ( -/obj/effect/turf_decal/trimline/green/filled/line, -/obj/effect/turf_decal/trimline/blue/filled/warning, -/obj/machinery/duct, -/turf/open/floor/iron, -/area/station/service/hydroponics) "piB" = ( /obj/structure/sign/warning/electric_shock/directional/north, /obj/effect/turf_decal/stripes/corner{ @@ -49875,17 +50758,6 @@ /obj/effect/mapping_helpers/airlock/access/all/science/ordnance, /turf/open/floor/iron/dark, /area/station/science/ordnance/freezerchamber) -"pjg" = ( -/obj/item/instrument/saxophone, -/obj/machinery/computer/security/telescreen/entertainment/directional/north, -/obj/item/instrument/piano_synth, -/obj/structure/table/wood, -/obj/machinery/camera{ - c_tag = "Service Theater"; - dir = 9 - }, -/turf/open/floor/wood/tile, -/area/station/service/theater) "pji" = ( /obj/structure/cable, /obj/machinery/camera/directional/east{ @@ -49899,6 +50771,16 @@ /obj/structure/chair, /turf/open/floor/plating/snowed/icemoon, /area/icemoon/underground/explored) +"pjk" = ( +/obj/structure/disposalpipe/sorting/mail/flip{ + dir = 1 + }, +/obj/effect/mapping_helpers/mail_sorting/service/hydroponics, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/maintenance/starboard/lesser) "pjl" = ( /obj/structure/rack, /obj/effect/spawner/random/techstorage/engineering_all, @@ -49947,6 +50829,13 @@ /obj/effect/decal/cleanable/cobweb, /turf/open/floor/plating, /area/station/maintenance/department/medical/central) +"pjM" = ( +/obj/structure/closet, +/obj/effect/spawner/random/clothing/costume, +/obj/structure/sign/poster/contraband/random/directional/east, +/obj/effect/spawner/random/clothing/gloves, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "pjZ" = ( /obj/structure/closet/crate/freezer/blood, /turf/open/floor/iron/white, @@ -49993,6 +50882,11 @@ /obj/effect/turf_decal/delivery, /turf/open/floor/iron/dark, /area/station/maintenance/port/greater) +"ply" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/spawner/random/trash/caution_sign, +/turf/open/floor/plating, +/area/station/maintenance/starboard/lesser) "plN" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /obj/effect/turf_decal/tile/neutral/opposingcorners, @@ -50023,13 +50917,6 @@ /obj/machinery/door/firedoor/heavy, /turf/open/floor/iron/dark, /area/station/science/ordnance) -"pmg" = ( -/obj/effect/turf_decal/siding/white{ - dir = 1 - }, -/obj/effect/turf_decal/tile/bar/opposingcorners, -/turf/open/floor/iron, -/area/station/hallway/secondary/service) "pmn" = ( /obj/effect/spawner/random/trash/caution_sign, /turf/open/floor/plating, @@ -50075,6 +50962,16 @@ /obj/structure/flora/grass/brown/style_random, /turf/open/misc/asteroid/snow/standard_air, /area/station/science/research) +"pns" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/item/flashlight{ + pixel_y = 3; + pixel_x = -4 + }, +/turf/open/floor/iron, +/area/station/maintenance/starboard/fore) "pnz" = ( /obj/item/radio/intercom/directional/west, /turf/open/floor/iron, @@ -50169,16 +51066,15 @@ /obj/machinery/airalarm/directional/east, /turf/open/floor/iron, /area/station/commons/locker) +"poV" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/duct, +/turf/open/floor/iron, +/area/station/service/bar) "poY" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 8 - }, -/obj/effect/landmark/event_spawn, -/obj/machinery/door/window/brigdoor/left/directional/west{ - name = "Coroner's Office"; - req_access = list("morgue_secure") - }, -/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/spawner/structure/window, /turf/open/floor/iron/dark, /area/station/medical/morgue) "ppc" = ( @@ -50293,28 +51189,20 @@ /obj/effect/turf_decal/tile/purple/fourcorners, /turf/open/floor/iron, /area/mine/living_quarters) -"pqx" = ( -/obj/effect/turf_decal/trimline/green/filled/line{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/blue/filled/warning{ - dir = 4 - }, -/obj/effect/spawner/random/engineering/tracking_beacon, -/turf/open/floor/iron/dark, -/area/station/service/hydroponics) "pqK" = ( /obj/structure/sign/warning/secure_area/directional/east, /turf/open/floor/plating, /area/station/maintenance/aft/greater) +"pqZ" = ( +/obj/structure/table/wood, +/obj/effect/turf_decal/tile/bar/opposingcorners, +/obj/item/storage/box/matches, +/obj/effect/spawner/random/entertainment/cigar, +/turf/open/floor/iron, +/area/station/service/bar) "pra" = ( /turf/open/floor/iron/dark, /area/station/science/robotics/lab) -"prf" = ( -/obj/structure/closet/crate, -/obj/effect/spawner/random/maintenance/two, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) "prg" = ( /turf/open/floor/wood, /area/station/service/library) @@ -50438,30 +51326,10 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/hallway/primary/port) -"ptp" = ( -/obj/effect/turf_decal/siding/white{ - dir = 1 - }, -/obj/structure/chair{ - dir = 4 - }, -/obj/machinery/newscaster/directional/north, -/obj/effect/landmark/start/hangover, -/turf/open/floor/iron/white/smooth_large, -/area/station/service/kitchen/diner) -"ptx" = ( -/obj/structure/closet/crate, -/obj/item/stack/sheet/iron/fifty, -/obj/item/stack/rods/fifty, -/obj/item/stack/sheet/glass/fifty, -/obj/item/electronics/airlock, -/obj/item/electronics/airlock, -/obj/item/stock_parts/cell/high, -/obj/item/stack/sheet/mineral/plasma{ - amount = 30 - }, -/turf/open/floor/plating, -/area/station/engineering/engine_smes) +"ptv" = ( +/obj/effect/turf_decal/siding/wood, +/turf/open/floor/stone, +/area/station/service/bar/atrium) "ptB" = ( /obj/machinery/modular_computer/preset/id{ dir = 8 @@ -50488,13 +51356,6 @@ /obj/machinery/light/directional/south, /turf/open/floor/iron, /area/station/hallway/primary/central) -"pub" = ( -/obj/effect/spawner/random/maintenance, -/obj/structure/disposalpipe/segment{ - dir = 10 - }, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) "puc" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, @@ -50541,27 +51402,6 @@ /obj/effect/mapping_helpers/airlock/access/all/medical/cmo, /turf/open/floor/plating, /area/station/maintenance/aft/greater) -"puI" = ( -/obj/effect/turf_decal/bot{ - dir = 1 - }, -/obj/structure/table, -/obj/item/clothing/gloves/color/yellow, -/obj/item/clothing/gloves/color/yellow, -/obj/item/clothing/gloves/color/yellow, -/obj/item/clothing/gloves/color/yellow, -/obj/item/clothing/gloves/color/yellow, -/obj/structure/cable, -/obj/item/mod/module/plasma_stabilizer, -/obj/item/stock_parts/cell/emproof{ - pixel_x = -4; - pixel_y = -1 - }, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/item/mod/module/signlang_radio, -/obj/item/mod/module/thermal_regulator, -/turf/open/floor/iron/dark, -/area/station/engineering/engine_smes) "puN" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -50705,21 +51545,11 @@ /obj/effect/turf_decal/stripes/line, /turf/open/floor/plating, /area/station/maintenance/department/chapel) -"pwx" = ( -/obj/machinery/portable_atmospherics/canister/nitrous_oxide, -/obj/effect/mapping_helpers/broken_floor, +"pwz" = ( +/obj/machinery/duct, +/obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/plating, -/area/station/maintenance/fore) -"pwB" = ( -/obj/structure/stairs/west, -/obj/effect/turf_decal/siding/white{ - dir = 1 - }, -/obj/structure/railing{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/hallway/secondary/service) +/area/station/maintenance/starboard/fore) "pwC" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -50781,32 +51611,10 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/starboard) -"pxs" = ( -/obj/effect/turf_decal/siding/white{ - dir = 8 - }, -/obj/structure/chair, -/obj/machinery/airalarm/directional/west, -/obj/machinery/camera/directional/west{ - c_tag = "Service Diner South" - }, -/turf/open/floor/iron/white/smooth_large, -/area/station/service/kitchen/diner) "pxu" = ( /obj/structure/sign/warning/secure_area/directional/east, /turf/open/floor/engine, /area/station/science/explab) -"pxF" = ( -/obj/structure/table/reinforced, -/obj/machinery/door/firedoor, -/obj/machinery/door/poddoor/shutters/preopen{ - dir = 8; - id = "kitchencounter"; - name = "Kitchen Counter Shutters" - }, -/obj/structure/displaycase/forsale/kitchen, -/turf/open/floor/iron/kitchen/diagonal, -/area/station/service/kitchen) "pxL" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -50848,13 +51656,6 @@ /obj/item/radio/intercom/directional/south, /turf/open/floor/iron, /area/station/security/checkpoint/supply) -"pyj" = ( -/obj/effect/turf_decal/siding/white{ - dir = 8 - }, -/obj/structure/disposalpipe/segment, -/turf/open/floor/iron/white/smooth_large, -/area/station/service/kitchen/diner) "pyr" = ( /obj/machinery/griddle, /turf/open/floor/iron/cafeteria, @@ -50913,12 +51714,6 @@ /obj/effect/landmark/start/station_engineer, /turf/open/floor/iron, /area/station/engineering/storage_shared) -"pyW" = ( -/obj/structure/chair/sofa/bench{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/hallway/primary/fore) "pyY" = ( /obj/machinery/status_display/evac/directional/south, /turf/open/openspace, @@ -51022,16 +51817,16 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/science/ordnance) -"pAp" = ( -/obj/machinery/deepfryer, -/obj/effect/turf_decal/tile/neutral/diagonal_edge, -/obj/machinery/firealarm/directional/east, -/turf/open/floor/iron/kitchen/diagonal, +"pAn" = ( +/obj/effect/turf_decal/siding/white/corner{ + dir = 1 + }, +/obj/machinery/light/directional/south, +/obj/machinery/status_display/ai/directional/south, +/obj/structure/extinguisher_cabinet/directional/east, +/obj/machinery/chem_master/condimaster, +/turf/open/floor/iron/white/smooth_large, /area/station/service/kitchen) -"pAM" = ( -/obj/structure/disposalpipe/segment, -/turf/open/floor/plating/snowed/coldroom, -/area/station/service/kitchen/coldroom) "pAN" = ( /obj/structure/ladder, /obj/effect/decal/cleanable/dirt, @@ -51046,6 +51841,16 @@ dir = 4 }, /area/mine/production) +"pAW" = ( +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/railing/corner/end{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "pAZ" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -51059,21 +51864,6 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/hallway/primary/port) -"pBr" = ( -/obj/structure/window/reinforced/spawner/directional/east, -/obj/effect/turf_decal/trimline/green/filled/line{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/blue/filled/warning{ - dir = 1 - }, -/obj/machinery/chem_master/condimaster{ - desc = "Used to separate out liquids - useful for purifying botanical extracts. Also dispenses condiments."; - name = "SapMaster XP" - }, -/obj/machinery/requests_console/auto_name/directional/north, -/turf/open/floor/iron, -/area/station/service/hydroponics) "pBA" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -51103,6 +51893,14 @@ /obj/structure/flora/tree/jungle/small/style_random, /turf/open/floor/grass, /area/station/security/warden) +"pBS" = ( +/obj/structure/window/reinforced/spawner/directional/east, +/obj/effect/turf_decal/siding/white{ + dir = 1 + }, +/obj/item/kirbyplants/organic/applebush, +/turf/open/floor/iron/white/smooth_large, +/area/station/service/kitchen) "pBV" = ( /obj/structure/chair/office/light, /turf/open/floor/iron/dark, @@ -51172,7 +51970,7 @@ name = "Permabrig Visitation" }, /obj/effect/mapping_helpers/airlock/access/any/security/brig, -/turf/open/floor/plating, +/turf/open/floor/iron, /area/station/security/prison/visit) "pDt" = ( /obj/effect/landmark/start/hangover, @@ -51307,6 +52105,12 @@ }, /turf/open/floor/iron, /area/station/security/prison/mess) +"pEY" = ( +/obj/structure/table, +/obj/item/plant_analyzer, +/obj/item/stock_parts/power_store/cell/high, +/turf/open/floor/plating, +/area/station/engineering/storage/tech) "pFg" = ( /obj/structure/chair{ dir = 8 @@ -51358,6 +52162,12 @@ }, /turf/open/floor/iron, /area/station/engineering/atmos) +"pGg" = ( +/obj/structure/chair{ + dir = 8 + }, +/turf/open/floor/plating, +/area/station/maintenance/starboard/lesser) "pGo" = ( /obj/structure/cable, /obj/effect/turf_decal/stripes/line{ @@ -51512,17 +52322,6 @@ /obj/machinery/vending/wardrobe/curator_wardrobe, /turf/open/floor/engine/cult, /area/station/service/library) -"pIF" = ( -/obj/structure/rack, -/obj/item/lighter, -/obj/item/clothing/glasses/meson{ - pixel_y = 4 - }, -/obj/item/stock_parts/cell/high, -/obj/item/reagent_containers/pill/patch/aiuri, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, -/area/station/command/heads_quarters/ce) "pJb" = ( /obj/structure/sign/nanotrasen{ pixel_x = -32 @@ -51543,6 +52342,12 @@ dir = 4 }, /area/station/science/explab) +"pJq" = ( +/obj/structure/statue/snow/snowman{ + name = "Steve" + }, +/turf/open/misc/asteroid/snow/coldroom, +/area/icemoon/underground/explored) "pJu" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/cable, @@ -51611,11 +52416,16 @@ }, /turf/open/floor/iron/white, /area/station/medical/medbay/lobby) -"pKe" = ( -/obj/machinery/light/cold/directional/west, -/obj/item/radio/intercom/directional/west, -/turf/open/floor/plating/snowed/coldroom, -/area/station/service/kitchen/coldroom) +"pKo" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/item/radio/intercom/directional/south, +/turf/open/floor/wood/parquet, +/area/station/service/bar/backroom) "pKu" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 1 @@ -51683,6 +52493,17 @@ dir = 8 }, /area/station/hallway/secondary/entry) +"pLo" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 8; + id = "kitchencounter"; + name = "Kitchen Counter Shutters" + }, +/obj/machinery/door/firedoor, +/obj/structure/window/reinforced/spawner/directional/south, +/turf/open/floor/iron/white/smooth_large, +/area/station/service/kitchen) "pLr" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 1 @@ -51700,6 +52521,18 @@ /obj/item/radio/intercom/directional/north, /turf/open/floor/iron/white, /area/station/medical/medbay/central) +"pLu" = ( +/obj/structure/sink/kitchen/directional/south, +/obj/effect/turf_decal/siding/thinplating/dark/corner, +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/blue/filled/warning{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics) "pLv" = ( /obj/structure/chair/stool/directional/south, /turf/open/floor/iron, @@ -51721,6 +52554,14 @@ }, /turf/open/floor/iron/freezer, /area/station/commons/toilet/locker) +"pLx" = ( +/obj/machinery/computer/security{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/computer/security/telescreen/prison/directional/north, +/turf/open/floor/iron/showroomfloor, +/area/station/security/warden) "pLZ" = ( /obj/structure/cable, /obj/effect/decal/cleanable/dirt, @@ -51741,6 +52582,11 @@ /obj/effect/mapping_helpers/airlock/access/all/security/brig, /turf/open/floor/iron/dark/smooth_large, /area/station/security/processing) +"pMh" = ( +/obj/structure/table/wood/poker, +/obj/item/storage/wallet/random, +/turf/open/floor/wood/large, +/area/station/commons/lounge) "pMq" = ( /obj/machinery/camera/directional/south{ c_tag = "Atmospherics Storage Room - South" @@ -51778,6 +52624,10 @@ /obj/item/radio/intercom/directional/east, /turf/open/floor/iron/dark, /area/station/engineering/supermatter/room) +"pME" = ( +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible, +/turf/closed/wall/r_wall, +/area/station/science/ordnance/burnchamber) "pMF" = ( /turf/open/floor/iron/white, /area/station/science/xenobiology) @@ -51785,19 +52635,15 @@ /obj/effect/spawner/structure/window, /turf/open/floor/plating, /area/station/science/xenobiology) +"pNi" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/stone, +/area/station/service/bar/atrium) "pNm" = ( /turf/closed/wall/r_wall, /area/station/security/execution/education) -"pNp" = ( -/obj/item/stack/package_wrap{ - pixel_x = -4; - pixel_y = 6 - }, -/obj/machinery/duct, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/obj/effect/turf_decal/tile/bar/opposingcorners, -/turf/open/floor/iron, -/area/station/service/bar/backroom) "pNq" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, @@ -51808,12 +52654,6 @@ }, /turf/open/floor/carpet, /area/station/command/meeting_room) -"pNx" = ( -/obj/effect/turf_decal/tile/blue, -/obj/machinery/light/directional/south, -/obj/structure/extinguisher_cabinet/directional/south, -/turf/open/floor/iron, -/area/station/hallway/primary/starboard) "pNy" = ( /obj/effect/turf_decal/trimline/green/filled/line{ dir = 4 @@ -51893,6 +52733,12 @@ /obj/structure/cable, /turf/closed/wall/r_wall, /area/station/security/prison/safe) +"pOl" = ( +/obj/structure/flora/tree/pine/style_random{ + pixel_x = -15 + }, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/explored) "pOo" = ( /obj/machinery/airalarm/directional/north, /obj/structure/closet/secure_closet/personal/cabinet, @@ -51909,17 +52755,26 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/engineering/atmos/storage) -"pOJ" = ( -/obj/structure/displaycase/forsale/kitchen{ - pixel_y = 8 +"pOC" = ( +/obj/machinery/computer/order_console/cook{ + dir = 4 }, -/obj/effect/turf_decal/siding/wood/corner{ +/obj/item/radio/intercom/directional/north, +/obj/effect/turf_decal/tile/bar{ dir = 1 }, -/obj/structure/table/wood, -/obj/effect/turf_decal/tile/bar/opposingcorners, +/obj/machinery/newscaster/directional/west, /turf/open/floor/iron, -/area/station/service/bar) +/area/station/service/kitchen/coldroom) +"pOK" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/duct, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark/smooth_half, +/area/station/service/hydroponics) "pOL" = ( /turf/open/floor/iron/white, /area/station/science/ordnance) @@ -51968,6 +52823,14 @@ }, /turf/open/floor/iron/white, /area/station/medical/virology) +"pPE" = ( +/obj/machinery/modular_computer/preset/id, +/obj/machinery/computer/security/telescreen/vault/directional/north, +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/command/heads_quarters/qm) "pPK" = ( /obj/structure/stairs/east, /turf/open/floor/iron/dark/textured, @@ -52169,16 +53032,48 @@ "pSz" = ( /turf/open/openspace, /area/station/maintenance/starboard/upper) -"pSQ" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ +"pSP" = ( +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ dir = 8 }, +/obj/machinery/door/airlock/external{ + glass = 1; + name = "Chapel External Airlock"; + opacity = 0 + }, +/obj/structure/sign/warning/cold_temp/directional/north, +/obj/structure/sign/warning/gas_mask/directional/south{ + desc = "A sign that warns of dangerous gasses in the air, instructing you to wear internals." + }, +/obj/effect/mapping_helpers/airlock/access/any/service/chapel_office, +/obj/effect/mapping_helpers/airlock/access/any/engineering/external, /turf/open/floor/iron, -/area/station/commons/fitness) +/area/station/service/chapel) +"pSX" = ( +/obj/structure/closet/crate{ + name = "Le Caisee D'abeille" + }, +/obj/item/honey_frame, +/obj/item/honey_frame, +/obj/item/honey_frame, +/obj/item/queen_bee/bought, +/obj/item/clothing/suit/hooded/bee_costume, +/obj/machinery/status_display/evac/directional/north, +/obj/effect/turf_decal/siding/thinplating/dark/corner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 5 + }, +/obj/effect/turf_decal/trimline/blue/filled/warning{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/light/warm/directional/north, +/obj/item/seeds/sunflower, +/obj/effect/spawner/random/food_or_drink/seed, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics) "pTd" = ( /obj/structure/table/reinforced, /obj/machinery/door/poddoor/shutters/preopen{ @@ -52200,12 +53095,6 @@ }, /turf/open/floor/iron/dark, /area/station/security/brig/entrance) -"pTf" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/plating, -/area/station/maintenance/fore) "pTB" = ( /obj/effect/turf_decal/tile/brown{ dir = 8 @@ -52354,7 +53243,11 @@ /turf/open/genturf, /area/icemoon/surface/outdoors/unexplored/rivers/no_monsters) "pWG" = ( -/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/obj/machinery/light/small/dim/directional/east, /turf/open/floor/iron/dark, /area/station/medical/morgue) "pWY" = ( @@ -52403,11 +53296,12 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/port/aft) -"pXz" = ( -/obj/structure/window/reinforced/spawner/directional/north, -/obj/machinery/hydroponics/soil, -/turf/open/floor/grass, -/area/station/service/hydroponics) +"pXy" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron/grimy, +/area/station/service/theater) "pXB" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 8 @@ -52472,19 +53366,18 @@ /obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, /turf/open/floor/plating, /area/station/maintenance/central/greater) +"pYD" = ( +/obj/machinery/light/directional/south, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/neutral/half/contrasted, +/turf/open/floor/iron, +/area/station/commons/fitness) "pYF" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/service/janitor) -"pYI" = ( -/obj/effect/turf_decal/tile/neutral/diagonal_edge, -/obj/structure/table, -/obj/machinery/microwave{ - pixel_y = 5 - }, -/turf/open/floor/iron/kitchen/diagonal, -/area/station/service/kitchen) "pYT" = ( /obj/machinery/light/small/directional/east, /turf/open/floor/iron, @@ -52506,6 +53399,15 @@ }, /turf/open/floor/iron, /area/station/engineering/lobby) +"pZA" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/light/directional/west, +/obj/item/kirbyplants/random/dead/research_director, +/obj/machinery/computer/security/telescreen/rd/directional/west, +/turf/open/floor/iron/smooth_half, +/area/station/command/heads_quarters/rd) "pZD" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -52520,6 +53422,15 @@ /obj/structure/extinguisher_cabinet/directional/west, /turf/open/floor/iron, /area/station/engineering/storage) +"pZO" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/spawner/random/structure/steam_vent, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/starboard/lesser) "pZY" = ( /mob/living/simple_animal/hostile/asteroid/polarbear{ move_force = 999; @@ -52533,14 +53444,26 @@ }, /turf/open/floor/engine/plasma, /area/station/engineering/atmos) -"qaf" = ( -/obj/machinery/light/directional/south, -/turf/open/floor/iron, -/area/station/hallway/secondary/service) +"qad" = ( +/obj/machinery/requests_console/auto_name/directional/south, +/obj/structure/bodycontainer/morgue/beeper_off{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/medical/morgue) "qai" = ( /obj/structure/window/reinforced/spawner/directional/north, /turf/open/floor/plating/snowed/icemoon, /area/station/maintenance/port/aft) +"qal" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/spawner/random/engineering/tracking_beacon, +/obj/effect/landmark/event_spawn, +/obj/machinery/holopad, +/obj/effect/turf_decal/bot_white, +/turf/open/floor/stone, +/area/station/commons/lounge) "qam" = ( /obj/structure/cable/multilayer/multiz, /obj/effect/turf_decal/stripes/box, @@ -52644,6 +53567,16 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/science/xenobiology) +"qbv" = ( +/obj/structure/sink/directional/west, +/obj/structure/cable, +/obj/machinery/button/door/directional/east{ + id = "xenobio10"; + name = "Xenobio Pen 10 Blast DOors"; + req_access = list("xenobiology") + }, +/turf/open/floor/iron/white, +/area/station/science/xenobiology) "qbA" = ( /obj/structure/cable, /obj/machinery/airalarm/directional/east, @@ -52659,6 +53592,25 @@ /obj/effect/landmark/start/hangover, /turf/open/floor/wood, /area/station/commons/dorms) +"qbG" = ( +/obj/machinery/door/airlock/external, +/obj/structure/sign/warning/gas_mask/directional/south{ + desc = "A sign that warns of dangerous gasses in the air, instructing you to wear internals." + }, +/obj/structure/sign/warning/cold_temp/directional/north, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "chem-morgue-airlock" + }, +/obj/effect/mapping_helpers/airlock/access/any/medical/maintenance, +/obj/effect/mapping_helpers/broken_floor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/mapping_helpers/airlock/access/any/engineering/external, +/turf/open/floor/plating, +/area/station/medical/morgue) +"qbM" = ( +/obj/structure/ore_container/food_trough/raptor_trough, +/turf/open/misc/hay/icemoon, +/area/icemoon/underground/explored) "qbO" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -52675,6 +53627,19 @@ /obj/machinery/light/small/directional/south, /turf/open/floor/plating, /area/station/maintenance/starboard/upper) +"qbY" = ( +/obj/item/clothing/accessory/pocketprotector, +/obj/structure/closet/secure_closet/personal/cabinet, +/obj/item/camera{ + pixel_y = 4; + pixel_x = -3 + }, +/obj/effect/spawner/random/clothing/mafia_outfit, +/obj/effect/spawner/random/clothing/mafia_outfit, +/obj/effect/spawner/random/clothing/backpack, +/obj/machinery/light/small/directional/west, +/turf/open/floor/plating, +/area/station/maintenance/starboard/lesser) "qca" = ( /obj/structure/chair/office{ dir = 8 @@ -52705,12 +53670,6 @@ /obj/machinery/plumbing/sender, /turf/open/floor/plating, /area/station/medical/chemistry) -"qde" = ( -/obj/structure/table, -/obj/machinery/cell_charger, -/obj/item/stock_parts/cell/high/empty, -/turf/open/floor/iron/dark, -/area/station/engineering/storage) "qdl" = ( /obj/machinery/light/small/directional/east, /obj/effect/decal/cleanable/dirt, @@ -52845,21 +53804,17 @@ dir = 8 }, /area/station/service/chapel) -"qfe" = ( -/obj/effect/turf_decal/tile/neutral/diagonal_edge, -/obj/structure/table, -/obj/item/reagent_containers/condiment/enzyme{ - pixel_x = -7; - pixel_y = 6 - }, -/obj/item/reagent_containers/condiment/saltshaker{ - pixel_x = -3 - }, -/obj/item/reagent_containers/condiment/peppermill{ - pixel_x = 3 +"qeW" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 4 }, -/turf/open/floor/iron/kitchen/diagonal, -/area/station/service/kitchen) +/obj/effect/turf_decal/siding/wood, +/obj/structure/chair/stool/bar/directional/north, +/obj/structure/cable, +/turf/open/floor/eighties, +/area/station/commons/lounge) "qfh" = ( /turf/open/floor/iron/recharge_floor, /area/station/science/robotics/mechbay) @@ -52880,19 +53835,17 @@ }, /turf/open/floor/iron/dark, /area/station/service/chapel) +"qfr" = ( +/obj/structure/table/wood/poker, +/obj/effect/spawner/random/entertainment/cigarette_pack, +/obj/effect/spawner/random/entertainment/lighter, +/turf/open/floor/wood/large, +/area/station/commons/lounge) "qfs" = ( /obj/machinery/portable_atmospherics/canister/air, /obj/structure/cable, /turf/open/floor/plating, /area/station/security/prison/safe) -"qfu" = ( -/obj/structure/closet/crate/wooden/toy, -/obj/machinery/camera/directional/south{ - c_tag = "Service Theater - Backstage" - }, -/obj/item/staff/broom, -/turf/open/floor/wood/tile, -/area/station/service/theater) "qfE" = ( /obj/effect/turf_decal/trimline/yellow/filled/warning{ dir = 4 @@ -52902,6 +53855,31 @@ }, /turf/open/floor/iron/white, /area/station/medical/treatment_center) +"qfI" = ( +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 6 + }, +/obj/effect/turf_decal/trimline/green/filled/corner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/blue/filled/warning/corner{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics) +"qfJ" = ( +/obj/machinery/airalarm/directional/west, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 8 + }, +/obj/machinery/duct, +/turf/open/floor/iron, +/area/station/commons/fitness) "qgm" = ( /obj/machinery/meter/monitored/waste_loop, /obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/visible{ @@ -52935,6 +53913,16 @@ /obj/structure/cable, /turf/open/floor/iron/dark, /area/station/security/processing) +"qgQ" = ( +/obj/structure/railing/wooden_fence{ + dir = 8 + }, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/explored) +"qgT" = ( +/obj/effect/spawner/random/structure/closet_private, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "qhd" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 1 @@ -52951,6 +53939,19 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/department/medical/morgue) +"qhF" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/public/glass{ + name = "Dormitory" + }, +/obj/effect/landmark/navigate_destination, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/stripes/white/line, +/obj/effect/turf_decal/stripes/white/line{ + dir = 1 + }, +/turf/open/floor/iron/dark/textured, +/area/station/commons/dorms) "qhL" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, @@ -52973,6 +53974,11 @@ /obj/machinery/light/floor, /turf/open/floor/iron/dark/side, /area/station/security/processing) +"qhQ" = ( +/obj/structure/table/wood, +/obj/effect/turf_decal/tile/bar/opposingcorners, +/turf/open/floor/iron, +/area/station/service/bar) "qhS" = ( /obj/machinery/door/firedoor, /obj/structure/cable, @@ -52980,6 +53986,12 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/catwalk_floor/iron_dark, /area/station/security/prison) +"qhV" = ( +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/turf/open/floor/plating, +/area/station/maintenance/starboard/lesser) "qig" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -52988,16 +54000,39 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) -"qis" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/wood/parquet, -/area/station/commons/lounge) +"qit" = ( +/obj/structure/table, +/obj/machinery/cell_charger, +/obj/effect/turf_decal/tile/blue/half/contrasted{ + dir = 1 + }, +/obj/machinery/firealarm/directional/north, +/turf/open/floor/iron/white, +/area/station/medical/medbay/lobby) +"qiA" = ( +/obj/machinery/chem_master/condimaster{ + desc = "Looks like a knock-off chem-master. Perhaps useful for separating liquids when mixing drinks precisely. Also dispenses condiments."; + name = "HoochMaster Deluxe" + }, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/station/service/bar) "qiF" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/tile/brown/half/contrasted, /turf/open/floor/iron/dark/side, /area/mine/eva/lower) +"qiG" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/commons/fitness) "qiJ" = ( /obj/structure/closet/secure_closet/freezer/kitchen/maintenance, /obj/effect/spawner/random/contraband/prison, @@ -53011,6 +54046,11 @@ /obj/machinery/airalarm/directional/east, /turf/open/floor/iron, /area/station/command/heads_quarters/qm) +"qiL" = ( +/obj/machinery/door/airlock/hatch, +/obj/effect/mapping_helpers/airlock/access/any/security/maintenance, +/turf/open/floor/plating, +/area/station/maintenance/fore) "qiN" = ( /obj/machinery/portable_atmospherics/canister/carbon_dioxide, /turf/open/floor/iron/dark, @@ -53040,6 +54080,9 @@ /obj/machinery/power/apc/auto_name/directional/north, /turf/open/floor/iron, /area/station/engineering/atmos/pumproom) +"qjd" = ( +/turf/open/misc/ice/coldroom, +/area/station/service/kitchen/coldroom) "qjg" = ( /obj/effect/landmark/observer_start, /obj/effect/turf_decal/plaque{ @@ -53070,6 +54113,10 @@ /obj/effect/turf_decal/tile/blue/half/contrasted, /turf/open/floor/iron, /area/station/hallway/primary/central) +"qjn" = ( +/obj/machinery/light/small/directional/north, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/maintenance/fore) "qjp" = ( /obj/effect/turf_decal/tile/neutral/fourcorners, /obj/effect/turf_decal/siding/thinplating_new, @@ -53101,11 +54148,6 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron/white, /area/station/medical/medbay/aft) -"qjK" = ( -/obj/effect/turf_decal/siding/white, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron/white/smooth_large, -/area/station/service/kitchen/diner) "qjO" = ( /obj/effect/turf_decal/stripes/line{ dir = 10 @@ -53210,6 +54252,16 @@ }, /turf/open/floor/iron/showroomfloor, /area/station/security/warden) +"qlB" = ( +/obj/machinery/atmospherics/components/binary/pump/off, +/obj/machinery/airlock_sensor/incinerator_ordmix{ + pixel_x = 24 + }, +/obj/machinery/atmospherics/pipe/layer_manifold/supply/hidden{ + dir = 4 + }, +/turf/open/floor/engine, +/area/station/science/ordnance/burnchamber) "qlG" = ( /obj/structure/table, /obj/item/stack/sheet/glass/fifty{ @@ -53238,10 +54290,21 @@ /obj/structure/cable, /turf/open/floor/iron/textured, /area/station/hallway/secondary/entry) +"qlS" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/chair/wood{ + dir = 1 + }, +/turf/open/floor/wood/parquet, +/area/station/service/bar/atrium) "qlU" = ( /obj/structure/closet/crate, /turf/open/floor/plating/snowed/icemoon, /area/icemoon/underground/explored) +"qlW" = ( +/turf/closed/wall/r_wall, +/area/station/science/ordnance/burnchamber) "qmi" = ( /turf/open/floor/iron, /area/station/cargo/lobby) @@ -53263,14 +54326,6 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/department/medical/morgue) -"qmN" = ( -/obj/item/radio/intercom/directional/north, -/obj/structure/reagent_dispensers/plumbed, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/turf/open/floor/plating, -/area/station/hallway/secondary/service) "qmT" = ( /obj/structure/bed{ dir = 4 @@ -53308,13 +54363,6 @@ }, /turf/open/floor/carpet, /area/station/security/prison/rec) -"qnf" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/green, -/turf/open/floor/iron, -/area/station/hallway/primary/central) "qnj" = ( /turf/closed/wall, /area/station/commons/locker) @@ -53348,10 +54396,11 @@ /turf/open/floor/iron/dark, /area/station/medical/virology) "qnv" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/dark, -/area/station/medical/morgue) +/obj/structure/closet/crate/grave, +/turf/open/misc/dirt{ + initial_gas_mix = "ICEMOON_ATMOS" + }, +/area/icemoon/underground/explored/graveyard) "qnC" = ( /turf/closed/wall/r_wall, /area/station/command/heads_quarters/ce) @@ -53364,13 +54413,6 @@ }, /turf/open/floor/iron, /area/station/engineering/atmos) -"qnU" = ( -/obj/structure/extinguisher_cabinet/directional/south, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/starboard) "qnV" = ( /obj/structure/table/reinforced, /obj/item/storage/toolbox/emergency{ @@ -53394,6 +54436,20 @@ /obj/effect/spawner/random/maintenance, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) +"qod" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 8; + id = "kitchencounter"; + name = "Kitchen Counter Shutters" + }, +/obj/machinery/door/firedoor, +/obj/structure/desk_bell{ + pixel_x = -4; + pixel_y = 3 + }, +/turf/open/floor/iron/white/smooth_large, +/area/station/service/kitchen) "qoi" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -53405,16 +54461,26 @@ /obj/effect/turf_decal/stripes/box, /turf/open/floor/wood/parquet, /area/station/service/library) -"qoz" = ( -/obj/machinery/door/airlock/maintenance, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, -/obj/effect/mapping_helpers/airlock/unres{ +"qon" = ( +/obj/machinery/door/airlock/wood{ + name = "Backstage" + }, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/effect/turf_decal/siding/wood{ dir = 4 }, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/access/all/service/theatre, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/iron/dark/textured_half{ + dir = 1 + }, +/area/station/commons/lounge) "qoK" = ( /obj/structure/flora/rock/style_random, /obj/structure/window/reinforced/spawner/directional/south, @@ -53546,6 +54612,15 @@ /obj/effect/landmark/start/assistant, /turf/open/floor/wood, /area/station/service/library) +"qpQ" = ( +/obj/machinery/camera/directional/south{ + c_tag = "Service - Electrical Maintenace Upper" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/catwalk_floor/iron_smooth, +/area/station/maintenance/starboard/fore) "qpR" = ( /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/wood, @@ -53555,6 +54630,19 @@ /obj/machinery/recharge_station, /turf/open/floor/wood, /area/station/command/meeting_room) +"qpU" = ( +/obj/machinery/power/apc/auto_name/directional/north, +/obj/structure/cable, +/obj/structure/reagent_dispensers/plumbed{ + name = "dormitory reservoir" + }, +/obj/effect/decal/cleanable/cobweb, +/obj/effect/turf_decal/delivery/white{ + color = "#307db9" + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/textured, +/area/station/maintenance/fore) "qpZ" = ( /obj/structure/table, /obj/item/folder/blue{ @@ -53593,13 +54681,6 @@ /obj/item/storage/toolbox/emergency, /turf/open/floor/plating, /area/station/maintenance/department/medical/morgue) -"qqx" = ( -/obj/structure/sign/painting/library{ - pixel_y = 32 - }, -/obj/item/kirbyplants/organic/applebush, -/turf/open/floor/wood, -/area/station/hallway/secondary/service) "qqB" = ( /obj/machinery/button/door/directional/north{ id = "maint3"; @@ -53624,6 +54705,15 @@ dir = 1 }, /area/station/security/office) +"qre" = ( +/obj/effect/turf_decal/tile/green/opposingcorners{ + dir = 1 + }, +/obj/effect/turf_decal/tile/blue/opposingcorners, +/obj/structure/window/reinforced/spawner/directional/west, +/obj/machinery/vending/wardrobe/hydro_wardrobe, +/turf/open/floor/iron, +/area/station/service/hydroponics) "qrg" = ( /obj/item/bodypart/head, /obj/effect/decal/cleanable/blood, @@ -53658,18 +54748,36 @@ /area/station/engineering/storage_shared) "qrq" = ( /obj/structure/toilet/greyscale{ - cistern = 1; + cistern_open = 1; dir = 1 }, /obj/effect/spawner/random/entertainment/cigar, /obj/machinery/light/small/directional/south, /turf/open/floor/iron/showroomfloor, /area/station/security/prison/toilet) +"qrF" = ( +/obj/machinery/duct, +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/obj/effect/turf_decal/tile/green{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/service/hydroponics) "qrJ" = ( /obj/machinery/ticket_machine/directional/east, /obj/effect/turf_decal/tile/blue, /turf/open/floor/iron, /area/station/hallway/primary/central) +"qrM" = ( +/obj/structure/window/reinforced/spawner/directional/north, +/obj/effect/landmark/start/hangover, +/obj/effect/turf_decal/siding/white{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/commons/fitness) "qrQ" = ( /obj/structure/railing{ dir = 8 @@ -53691,6 +54799,16 @@ /obj/item/radio/intercom/directional/north, /turf/open/floor/iron/dark, /area/station/service/chapel) +"qsd" = ( +/obj/structure/disposaloutlet{ + dir = 8 + }, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/obj/structure/sign/warning/gas_mask/directional/north, +/turf/open/floor/engine/xenobio, +/area/station/science/xenobiology) "qsh" = ( /obj/structure/plaque/static_plaque/golden/commission/icebox, /obj/effect/landmark/navigate_destination/dockarrival, @@ -53731,6 +54849,12 @@ /obj/item/clothing/gloves/latex, /turf/open/floor/plating, /area/station/security/prison/safe) +"qsY" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central) "qtj" = ( /turf/closed/wall, /area/station/engineering/storage) @@ -53754,6 +54878,22 @@ /obj/machinery/door/firedoor, /turf/open/floor/iron/dark, /area/station/security/prison/garden) +"qtG" = ( +/obj/machinery/camera/directional/south{ + c_tag = "Fitness Room South" + }, +/obj/effect/turf_decal/tile/green/half/contrasted{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/machinery/light_switch/directional/south{ + pixel_x = -7 + }, +/obj/item/kirbyplants/random, +/turf/open/floor/iron, +/area/station/commons/fitness) "qtH" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ @@ -53794,6 +54934,33 @@ /obj/machinery/light/directional/south, /turf/open/floor/iron/dark, /area/station/service/chapel) +"quw" = ( +/obj/effect/turf_decal/tile/green/opposingcorners{ + dir = 1 + }, +/obj/effect/turf_decal/tile/blue/opposingcorners, +/obj/structure/closet/crate/hydroponics, +/obj/item/wrench, +/obj/item/wrench, +/obj/item/grenade/chem_grenade/antiweed{ + pixel_x = 3; + pixel_y = 1 + }, +/obj/item/grenade/chem_grenade/antiweed, +/obj/item/shovel/spade, +/obj/item/reagent_containers/spray/plantbgone{ + pixel_x = 8; + pixel_y = 8 + }, +/obj/item/reagent_containers/spray/plantbgone{ + pixel_y = 3 + }, +/obj/item/cultivator, +/obj/item/shovel/spade, +/obj/item/reagent_containers/cup/watering_can, +/obj/machinery/airalarm/directional/north, +/turf/open/floor/iron, +/area/station/service/hydroponics) "quB" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ @@ -53804,6 +54971,9 @@ }, /turf/open/floor/iron/grimy, /area/station/service/chapel/office) +"quJ" = ( +/turf/open/floor/stone, +/area/station/commons/lounge) "quK" = ( /obj/effect/mapping_helpers/airlock/cyclelink_helper{ dir = 4 @@ -53980,14 +55150,6 @@ /obj/structure/reagent_dispensers/watertank, /turf/open/floor/plating, /area/station/maintenance/aft/greater) -"qwP" = ( -/obj/structure/disposalpipe/segment{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron, -/area/station/commons/fitness) "qwX" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /obj/effect/decal/cleanable/dirt, @@ -54124,6 +55286,19 @@ }, /turf/open/floor/iron/dark, /area/station/cargo/miningdock) +"qyZ" = ( +/obj/structure/table, +/obj/machinery/light/small/dim/directional/west, +/obj/item/camera{ + pixel_y = 9; + pixel_x = -2 + }, +/obj/item/reagent_containers/cup/glass/waterbottle/empty{ + pixel_y = 5; + pixel_x = 4 + }, +/turf/open/floor/iron, +/area/station/maintenance/starboard/fore) "qzq" = ( /obj/structure/sign/departments/cargo, /turf/closed/wall/r_wall, @@ -54159,17 +55334,23 @@ }, /turf/open/floor/wood, /area/station/maintenance/port/aft) -"qzN" = ( -/obj/structure/closet, -/obj/effect/spawner/random/clothing/costume, -/obj/effect/decal/cleanable/cobweb, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) "qzT" = ( /obj/structure/closet/firecloset, /obj/effect/mapping_helpers/burnt_floor, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) +"qzU" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/public/glass{ + name = "Central Access" + }, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/stripes/white/line, +/obj/effect/turf_decal/stripes/white/line{ + dir = 1 + }, +/turf/open/floor/iron/dark/textured, +/area/station/hallway/primary/central) "qzV" = ( /obj/effect/spawner/structure/window/hollow/reinforced/middle{ dir = 4 @@ -54265,20 +55446,6 @@ /obj/machinery/portable_atmospherics/canister/air, /turf/open/floor/engine/air, /area/station/engineering/atmos) -"qCz" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 5 - }, -/obj/machinery/chem_dispenser/drinks/beer{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/duct, -/obj/structure/table/wood, -/obj/structure/disposalpipe/segment, -/turf/open/floor/stone, -/area/station/service/bar) "qCA" = ( /obj/structure/table/wood, /turf/open/floor/wood, @@ -54352,6 +55519,11 @@ }, /turf/open/floor/engine, /area/station/engineering/supermatter) +"qDk" = ( +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "qDD" = ( /obj/machinery/washing_machine, /obj/effect/decal/cleanable/dirt, @@ -54373,18 +55545,15 @@ /obj/effect/spawner/structure/window, /turf/open/floor/plating, /area/station/maintenance/port/fore) -"qDZ" = ( -/obj/effect/turf_decal/tile/neutral/diagonal_edge, -/obj/structure/table, -/obj/item/plate, -/obj/item/food/piedough, -/obj/effect/spawner/random/food_or_drink/cake_ingredients, -/turf/open/floor/iron/kitchen/diagonal, -/area/station/service/kitchen) "qEa" = ( /obj/structure/cable/layer3, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/ai) +"qEh" = ( +/obj/structure/girder, +/obj/structure/grille, +/turf/open/floor/plating/snowed/coldroom, +/area/icemoon/underground/explored) "qEj" = ( /obj/structure/table/glass, /obj/item/assembly/igniter, @@ -54499,17 +55668,6 @@ /obj/item/crowbar/red, /turf/open/floor/glass/reinforced, /area/station/science/xenobiology) -"qFq" = ( -/obj/machinery/computer/security/telescreen/interrogation{ - pixel_y = 30 - }, -/obj/effect/turf_decal/tile/red/anticorner/contrasted{ - dir = 4 - }, -/turf/open/floor/iron/dark/corner{ - dir = 8 - }, -/area/station/security/processing) "qFs" = ( /obj/effect/spawner/random/vending/snackvend, /obj/effect/turf_decal/tile/neutral/fourcorners, @@ -54528,17 +55686,13 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/aisat_interior) -"qFC" = ( -/obj/machinery/hydroponics/constructable, -/obj/effect/turf_decal/siding/wideplating/dark{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/green{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/service/hydroponics) +"qFD" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/maintenance/starboard/lesser) "qFJ" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/holopad, @@ -54568,14 +55722,6 @@ /obj/effect/mapping_helpers/airlock/access/all/service/janitor, /turf/open/floor/iron, /area/station/service/janitor) -"qGe" = ( -/obj/structure/table, -/obj/item/scalpel{ - pixel_x = 2; - pixel_y = 6 - }, -/turf/open/floor/engine, -/area/station/science/xenobiology) "qGg" = ( /obj/structure/rack, /obj/item/pickaxe, @@ -54585,18 +55731,17 @@ /obj/item/gps/mining, /turf/open/floor/iron/smooth, /area/mine/eva) -"qGi" = ( -/obj/effect/turf_decal/trimline/purple/filled/warning{ - dir = 8 +"qGh" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 }, -/obj/machinery/computer/security/telescreen{ - dir = 8; - name = "Xenobio Monitor"; - network = list("xeno"); - pixel_x = 26 +/obj/effect/turf_decal/siding/wood{ + dir = 4 }, -/turf/open/floor/iron/white, -/area/station/science/xenobiology) +/obj/machinery/light/small/directional/south, +/obj/structure/cable, +/turf/open/floor/iron/grimy, +/area/station/service/bar/backroom) "qGJ" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -54669,6 +55814,11 @@ /obj/machinery/light/small/directional/south, /turf/open/floor/iron/dark, /area/station/science/breakroom) +"qHs" = ( +/obj/structure/flora/bush/flowers_yw/style_random, +/obj/structure/flora/bush/fullgrass/style_random, +/turf/open/floor/grass, +/area/station/service/hydroponics) "qHz" = ( /obj/machinery/light_switch/directional/west, /obj/machinery/disposal/bin{ @@ -54726,12 +55876,6 @@ }, /turf/open/floor/iron, /area/station/security/prison/garden) -"qIv" = ( -/obj/machinery/icecream_vat, -/obj/effect/turf_decal/tile/brown/diagonal_edge, -/obj/structure/window/reinforced/spawner/directional/west, -/turf/open/floor/iron/kitchen/diagonal, -/area/station/service/kitchen) "qIB" = ( /obj/effect/turf_decal/caution/stand_clear, /obj/machinery/door/poddoor/shutters/window{ @@ -54760,15 +55904,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/engineering/atmos/hfr_room) -"qIP" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red/half/contrasted{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/commons/fitness) "qIU" = ( /turf/open/floor/iron, /area/station/commons/dorms) @@ -54787,6 +55922,15 @@ /obj/item/cigbutt, /turf/open/floor/wood/large, /area/mine/eva/lower) +"qJy" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/duct, +/turf/open/floor/iron, +/area/station/service/bar) "qJT" = ( /obj/machinery/light/small/directional/south, /turf/open/floor/plating/snowed/icemoon, @@ -54852,6 +55996,21 @@ /obj/machinery/atmospherics/components/tank, /turf/open/floor/iron/dark, /area/station/science/ordnance) +"qKw" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/table, +/obj/item/grown/log/tree, +/obj/item/grown/log/tree{ + pixel_y = 5; + pixel_x = 7 + }, +/obj/item/grown/log/tree{ + pixel_x = 7 + }, +/turf/open/floor/plating/snowed/coldroom, +/area/station/service/kitchen/coldroom) "qKx" = ( /obj/machinery/portable_atmospherics/canister/oxygen, /obj/effect/turf_decal/bot, @@ -54898,13 +56057,6 @@ /obj/structure/cable, /turf/open/floor/iron/smooth, /area/station/security/brig) -"qKX" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/obj/effect/landmark/start/hangover, -/turf/open/floor/iron/freezer, -/area/station/commons/toilet) "qLf" = ( /obj/structure/sign/painting/library{ pixel_y = 32 @@ -54989,25 +56141,13 @@ "qLY" = ( /turf/closed/wall/r_wall, /area/station/science/xenobiology) -"qMe" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 4 - }, -/obj/effect/turf_decal/siding/wood{ - dir = 8 - }, -/obj/machinery/door/airlock{ - name = "Theater Stage" - }, -/obj/machinery/door/firedoor, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/mapping_helpers/airlock/access/all/service/theatre, -/turf/open/floor/iron/dark/textured_half{ +"qMf" = ( +/obj/effect/turf_decal/tile/blue{ dir = 1 }, -/area/station/service/theater) +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/station/hallway/primary/central) "qMm" = ( /obj/structure/bookcase/random/adult, /turf/open/floor/wood, @@ -55022,10 +56162,26 @@ /obj/effect/turf_decal/trimline/yellow/filled/line, /turf/open/floor/iron/white, /area/station/medical/chemistry) +"qMD" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/spawner/structure/window/reinforced/tinted, +/turf/open/floor/plating, +/area/station/maintenance/fore) "qMH" = ( /obj/structure/reagent_dispensers/fueltank, /turf/open/floor/plating, /area/station/ai_monitored/turret_protected/aisat/maint) +"qMI" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 1 + }, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 4 + }, +/obj/effect/spawner/random/trash/cigbutt, +/obj/effect/spawner/random/trash/cigbutt, +/turf/open/floor/stone, +/area/station/service/bar/atrium) "qMN" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/line{ @@ -55038,6 +56194,26 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/engineering/supermatter) +"qMO" = ( +/obj/effect/turf_decal/trimline/green/filled/corner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/blue/corner{ + dir = 8 + }, +/obj/effect/landmark/start/botanist, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics) +"qMS" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/chair/wood{ + dir = 1 + }, +/turf/open/floor/wood/parquet, +/area/station/service/bar/atrium) "qMT" = ( /turf/closed/wall, /area/station/commons/lounge) @@ -55052,21 +56228,6 @@ /obj/effect/mapping_helpers/airlock/access/all/engineering/general, /turf/open/floor/plating, /area/station/engineering/storage_shared) -"qNc" = ( -/obj/machinery/door/airlock/highsecurity{ - name = "Service Hall Exit" - }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ - cycle_id = "service-hall-external" - }, -/obj/effect/turf_decal/stripes/line{ - dir = 5 - }, -/obj/effect/mapping_helpers/airlock/access/all/service/general, -/turf/open/floor/iron/textured_half{ - dir = 1 - }, -/area/station/hallway/secondary/service) "qNl" = ( /obj/structure/plasticflaps/opaque, /obj/effect/turf_decal/delivery, @@ -55151,6 +56312,10 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/aisat/service) +"qOB" = ( +/obj/machinery/status_display/ai/directional/east, +/turf/open/floor/plating/snowed/coldroom, +/area/station/service/kitchen/coldroom) "qOD" = ( /obj/effect/turf_decal/caution/stand_clear, /obj/effect/turf_decal/siding/dark_blue, @@ -55240,10 +56405,15 @@ }, /turf/open/floor/wood, /area/station/maintenance/port/aft) -"qPE" = ( -/obj/structure/closet/secure_closet/freezer/meat, -/turf/open/misc/asteroid/snow/coldroom, -/area/station/service/kitchen/coldroom) +"qPD" = ( +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/stripes/white/line, +/obj/effect/turf_decal/stripes/white/line{ + dir = 1 + }, +/turf/open/floor/iron/dark/textured, +/area/station/hallway/primary/central) "qPI" = ( /obj/effect/turf_decal/trimline/blue/filled/corner{ dir = 4 @@ -55260,6 +56430,13 @@ "qPL" = ( /turf/closed/wall/r_wall, /area/station/hallway/secondary/exit/departure_lounge) +"qPQ" = ( +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/obj/effect/spawner/random/structure/crate, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "qPX" = ( /obj/structure/sink/directional/west, /obj/structure/mirror/directional/east, @@ -55326,6 +56503,12 @@ /obj/effect/turf_decal/tile/red, /turf/open/floor/iron, /area/station/hallway/primary/central/fore) +"qQV" = ( +/obj/structure/cable, +/obj/effect/mapping_helpers/broken_floor, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/fore) "qRk" = ( /obj/item/chair/wood, /turf/open/floor/carpet, @@ -55356,6 +56539,12 @@ /obj/structure/flora/tree/pine/style_random, /turf/open/misc/asteroid/snow/icemoon, /area/icemoon/surface/outdoors/nospawn) +"qRF" = ( +/obj/structure/table/wood, +/obj/machinery/chem_dispenser/drinks/beer, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/station/service/bar) "qRO" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -55388,6 +56577,11 @@ /obj/effect/landmark/start/assistant, /turf/open/floor/iron/freezer, /area/station/commons/toilet) +"qSi" = ( +/obj/structure/railing/wooden_fence, +/obj/item/flashlight/lantern/on, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/explored) "qSj" = ( /obj/structure/table/wood, /obj/item/folder/blue, @@ -55438,14 +56632,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/sepia, /area/station/security/prison/rec) -"qSB" = ( -/obj/effect/mapping_helpers/airlock/cyclelink_helper, -/obj/machinery/door/airlock/external{ - name = "External Access" - }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/external, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) "qSC" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/line{ @@ -55476,6 +56662,11 @@ /obj/machinery/firealarm/directional/north, /turf/open/floor/iron/white, /area/station/medical/virology) +"qSP" = ( +/obj/item/kirbyplants/random, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/fore) "qST" = ( /obj/structure/table/reinforced, /obj/item/pipe_dispenser, @@ -55483,6 +56674,15 @@ /obj/machinery/light/directional/west, /turf/open/floor/iron/dark, /area/station/engineering/atmos/hfr_room) +"qSU" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/box/red/corners{ + dir = 4 + }, +/turf/open/floor/wood/parquet, +/area/station/service/bar/atrium) "qSY" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -55550,6 +56750,12 @@ }, /turf/open/floor/iron/dark, /area/station/engineering/atmos/hfr_room) +"qUo" = ( +/obj/effect/decal/cleanable/cobweb/cobweb2, +/obj/structure/closet, +/obj/effect/spawner/random/maintenance/two, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "qUr" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -55645,6 +56851,13 @@ }, /turf/open/floor/iron/smooth, /area/station/maintenance/port/lesser) +"qVG" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/tile/neutral/half/contrasted, +/turf/open/floor/iron, +/area/station/commons/fitness) "qVJ" = ( /obj/machinery/disposal/bin, /obj/machinery/light_switch/directional/south, @@ -55659,6 +56872,14 @@ /obj/effect/spawner/random/food_or_drink/booze, /turf/open/floor/plating, /area/station/maintenance/port/fore) +"qWf" = ( +/obj/structure/window/reinforced/spawner/directional/west, +/obj/effect/turf_decal/siding/white{ + dir = 1 + }, +/obj/machinery/deepfryer, +/turf/open/floor/iron/white/smooth_large, +/area/station/service/kitchen) "qWh" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -55762,13 +56983,6 @@ }, /turf/open/floor/iron/white, /area/station/science/research) -"qXz" = ( -/obj/effect/turf_decal/stripes/corner{ - dir = 1 - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/turf/open/floor/iron/dark, -/area/station/service/hydroponics) "qXF" = ( /obj/machinery/computer/station_alert, /obj/effect/turf_decal/tile/yellow/half/contrasted, @@ -55796,11 +57010,6 @@ }, /turf/open/floor/iron/chapel, /area/station/service/chapel) -"qYo" = ( -/obj/effect/turf_decal/siding/white/corner, -/obj/effect/turf_decal/tile/bar/opposingcorners, -/turf/open/floor/iron, -/area/station/service/bar) "qYw" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -55828,19 +57037,18 @@ }, /turf/open/floor/iron/dark, /area/station/security/checkpoint/customs/auxiliary) -"qYD" = ( -/obj/effect/turf_decal/trimline/green/filled/line{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/blue/filled/warning{ - dir = 4 +"qYC" = ( +/obj/machinery/door/window/right/directional/south{ + req_access = list("kitchen"); + name = "The Ice Box" }, -/obj/machinery/duct, -/obj/structure/chair/office{ - dir = 4 +/obj/structure/sign/warning/cold_temp/directional/east, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 }, -/turf/open/floor/iron, -/area/station/service/hydroponics) +/obj/effect/turf_decal/siding/white, +/turf/open/floor/iron/freezer, +/area/station/service/kitchen/coldroom) "qYP" = ( /obj/effect/mapping_helpers/airlock/cyclelink_helper, /obj/machinery/door/airlock/external{ @@ -55892,16 +57100,6 @@ }, /turf/open/floor/iron/dark, /area/station/medical/treatment_center) -"qZB" = ( -/obj/structure/table/reinforced, -/obj/machinery/door/poddoor/shutters/preopen{ - dir = 1; - id = "kitchencounter"; - name = "Kitchen Counter Shutters" - }, -/obj/machinery/door/firedoor, -/turf/open/floor/iron/kitchen/diagonal, -/area/station/service/kitchen) "qZN" = ( /turf/closed/wall/r_wall, /area/station/science/ordnance/freezerchamber) @@ -55954,6 +57152,10 @@ /obj/machinery/newscaster/directional/north, /turf/open/floor/iron/showroomfloor, /area/station/security/warden) +"raq" = ( +/obj/structure/fence/corner, +/turf/open/floor/plating/snowed/smoothed/icemoon, +/area/icemoon/surface/outdoors/nospawn) "ras" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/engineering/glass{ @@ -55988,10 +57190,6 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) -"raL" = ( -/obj/item/kirbyplants/random, -/turf/open/floor/iron/dark, -/area/station/hallway/primary/fore) "raN" = ( /obj/machinery/firealarm/directional/north, /obj/machinery/light/directional/north, @@ -56023,6 +57221,13 @@ /obj/structure/closet, /turf/open/floor/plating, /area/station/maintenance/aft/lesser) +"rbh" = ( +/obj/effect/turf_decal/tile/blue, +/obj/effect/turf_decal/tile/green{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central) "rbm" = ( /obj/machinery/camera/directional/east{ c_tag = "MiniSat External NorthWest"; @@ -56031,6 +57236,10 @@ }, /turf/open/misc/asteroid/snow/icemoon, /area/icemoon/surface/outdoors/nospawn) +"rbp" = ( +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "rbs" = ( /obj/effect/turf_decal/tile/yellow, /obj/machinery/light/directional/east, @@ -56039,11 +57248,24 @@ "rbC" = ( /turf/closed/wall, /area/station/command/heads_quarters/qm) +"rbE" = ( +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) "rbT" = ( /obj/structure/ore_box, /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/mine/laborcamp) +"rbU" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 1; + id = "botany_apiary"; + name = "Apiary Shutters" + }, +/turf/open/floor/plating, +/area/station/service/hydroponics) "rbY" = ( /obj/structure/table/reinforced, /obj/item/pipe_dispenser, @@ -56110,8 +57332,8 @@ /turf/open/floor/iron/dark, /area/station/command/gateway) "rcU" = ( -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/structure/mannequin/skeleton, +/obj/structure/table/optable, +/obj/effect/decal/cleanable/xenoblood, /turf/open/floor/iron/dark, /area/station/medical/morgue) "rcY" = ( @@ -56120,15 +57342,6 @@ }, /turf/open/misc/asteroid/snow/icemoon, /area/icemoon/underground/explored) -"rdd" = ( -/obj/effect/turf_decal/trimline/green/filled/line{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/blue/filled/warning{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/station/service/hydroponics) "rdl" = ( /obj/machinery/button/door/directional/east{ id = "misclab"; @@ -56148,34 +57361,38 @@ /obj/item/radio/intercom/directional/north, /turf/open/floor/iron, /area/station/hallway/primary/port) +"rdq" = ( +/obj/machinery/light/small/directional/east, +/obj/effect/spawner/random/trash/mopbucket, +/turf/open/floor/plating, +/area/station/maintenance/starboard/lesser) +"rdv" = ( +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 10 + }, +/obj/effect/turf_decal/trimline/green/filled/corner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/blue/filled/warning/corner{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics) "rdw" = ( /obj/structure/bookcase, /obj/machinery/light/small/directional/north, /turf/open/floor/carpet, /area/station/security/processing) -"rdB" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 4 - }, -/obj/structure/chair/sofa/corp/right{ - dir = 4; - pixel_x = -4 - }, -/obj/machinery/firealarm/directional/west, -/turf/open/floor/iron/grimy, -/area/station/service/bar/atrium) "rdG" = ( /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 8 }, /turf/open/floor/iron/white, /area/station/medical/storage) -"rdR" = ( -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/turf/open/floor/iron/textured, -/area/station/security/brig) "rea" = ( /obj/structure/table, /obj/effect/turf_decal/tile/brown/half/contrasted{ @@ -56193,9 +57410,6 @@ }, /turf/open/floor/iron/white, /area/station/medical/medbay/aft) -"reh" = ( -/turf/open/floor/iron/textured_half, -/area/station/service/hydroponics) "rej" = ( /obj/machinery/oven/range, /turf/open/floor/plating, @@ -56208,6 +57422,12 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/hallway/primary/starboard) +"reu" = ( +/obj/structure/fence/corner{ + dir = 8 + }, +/turf/open/floor/plating/snowed/smoothed/icemoon, +/area/icemoon/surface/outdoors/nospawn) "rex" = ( /obj/effect/turf_decal/stripes/asteroid/corner{ dir = 8 @@ -56222,16 +57442,6 @@ dir = 5 }, /area/mine/living_quarters) -"reA" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 1 - }, -/obj/structure/chair/sofa/left/brown{ - dir = 1 - }, -/obj/effect/landmark/start/hangover, -/turf/open/floor/iron/grimy, -/area/station/commons/lounge) "reJ" = ( /obj/machinery/navbeacon{ codes_txt = "delivery;dir=8"; @@ -56244,11 +57454,6 @@ }, /turf/open/floor/iron, /area/station/commons/storage/primary) -"reM" = ( -/obj/structure/table, -/obj/item/flashlight/flare/candle, -/turf/open/floor/iron, -/area/station/hallway/primary/starboard) "reT" = ( /obj/machinery/door/window/left/directional/east{ name = "Containment Pen 8"; @@ -56261,6 +57466,13 @@ /obj/structure/cable, /turf/open/floor/engine, /area/station/science/xenobiology) +"reX" = ( +/obj/structure/cable, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) "rfh" = ( /obj/structure/cable, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ @@ -56270,6 +57482,16 @@ /obj/structure/cable/layer3, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/aisat/hallway) +"rfj" = ( +/obj/structure/frame/computer{ + dir = 1 + }, +/obj/item/radio/intercom/directional/south, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/smooth, +/area/station/maintenance/starboard/fore) "rfo" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -56297,19 +57519,12 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/maintenance/disposal/incinerator) -"rga" = ( -/obj/effect/turf_decal/siding/white{ - dir = 8 - }, -/obj/structure/table, -/obj/item/reagent_containers/condiment/saltshaker{ - pixel_x = -3 - }, -/obj/item/reagent_containers/condiment/peppermill{ - pixel_x = 3 - }, -/turf/open/floor/iron/white/smooth_large, -/area/station/service/kitchen/diner) +"rfW" = ( +/obj/structure/cable, +/obj/effect/turf_decal/tile/neutral/anticorner/contrasted, +/obj/machinery/duct, +/turf/open/floor/iron, +/area/station/commons/dorms) "rgi" = ( /obj/structure/sign/poster/contraband/random/directional/west, /turf/open/floor/plating, @@ -56372,6 +57587,12 @@ "rgE" = ( /turf/closed/wall/r_wall, /area/station/engineering/atmos/hfr_room) +"rgM" = ( +/obj/effect/landmark/start/hangover, +/obj/effect/turf_decal/tile/neutral/half/contrasted, +/obj/machinery/computer/security/telescreen/entertainment/directional/south, +/turf/open/floor/iron, +/area/station/commons/dorms) "rhf" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/door/poddoor/preopen{ @@ -56381,17 +57602,6 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/command/heads_quarters/hos) -"rhh" = ( -/obj/machinery/biogenerator, -/obj/effect/turf_decal/siding/white{ - dir = 10 - }, -/obj/effect/turf_decal/tile/green/opposingcorners{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue/opposingcorners, -/turf/open/floor/iron, -/area/station/service/hydroponics) "rhi" = ( /obj/machinery/door/firedoor/heavy, /obj/machinery/door/airlock/research{ @@ -56422,13 +57632,14 @@ }, /turf/open/floor/iron/smooth, /area/station/security/brig) -"rhR" = ( +"rhS" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/trimline/green/filled/line, -/obj/effect/turf_decal/trimline/blue/filled/warning, -/turf/open/floor/iron/dark, -/area/station/service/hydroponics) +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/starboard/lesser) "rhY" = ( /obj/machinery/atmospherics/components/unary/portables_connector/visible, /obj/effect/turf_decal/box/red, @@ -56467,10 +57678,36 @@ /obj/effect/mapping_helpers/mail_sorting/security/general, /turf/open/floor/iron, /area/station/security/brig/upper) +"riB" = ( +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/access/all/service/bar, +/obj/machinery/door/airlock{ + name = "Bar" + }, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/effect/turf_decal/siding/wood, +/turf/open/floor/iron/dark/textured_half{ + dir = 1 + }, +/area/station/service/bar) "riL" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/mine/living_quarters) +"riM" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/table, +/obj/item/food/grown/carrot, +/obj/item/food/grown/carrot{ + pixel_y = 4; + pixel_x = -2 + }, +/turf/open/floor/plating/snowed/coldroom, +/area/station/service/kitchen/coldroom) "riT" = ( /obj/machinery/atmospherics/components/unary/outlet_injector/on, /turf/open/floor/plating/snowed/icemoon, @@ -56485,24 +57722,20 @@ /obj/structure/closet/firecloset, /turf/open/floor/iron/dark, /area/station/engineering/main) -"rjr" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply, -/turf/open/floor/plating, -/area/station/medical/virology) -"rjs" = ( -/obj/structure/disposalpipe/sorting/mail/flip{ - dir = 2 +"rji" = ( +/obj/structure/disposalpipe/segment{ + dir = 6 }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/power/apc/auto_name/directional/west, -/obj/effect/mapping_helpers/mail_sorting/service/dormitories, -/obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ +/obj/structure/chair/wood{ dir = 1 }, -/turf/open/floor/iron, -/area/station/commons/fitness) +/turf/open/floor/wood/parquet, +/area/station/service/bar/atrium) +"rjr" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply, +/turf/open/floor/plating, +/area/station/medical/virology) "rjt" = ( /obj/structure/table/glass, /obj/item/computer_disk/medical, @@ -56558,15 +57791,6 @@ /obj/structure/sign/poster/official/random/directional/north, /turf/open/floor/iron, /area/station/hallway/primary/starboard) -"rjT" = ( -/obj/machinery/button/door/directional/west{ - id = "xenobio3"; - layer = 4; - name = "Xenobio Pen 3 Blast Door"; - req_access = list("xenobiology") - }, -/turf/open/floor/iron/white, -/area/station/science/xenobiology) "rkc" = ( /obj/effect/turf_decal/siding/yellow, /obj/effect/turf_decal/siding/yellow{ @@ -56584,16 +57808,6 @@ }, /turf/open/floor/iron/checker, /area/station/maintenance/port/fore) -"rki" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/public/glass{ - name = "Central Access" - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/station/hallway/primary/central) "rkl" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/cable, @@ -56603,6 +57817,10 @@ }, /turf/open/floor/plating, /area/station/maintenance/aft/lesser) +"rkm" = ( +/obj/structure/chair/stool, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "rkt" = ( /obj/structure/cable, /obj/machinery/light/directional/east, @@ -56648,6 +57866,35 @@ /obj/effect/mapping_helpers/burnt_floor, /turf/open/floor/plating, /area/station/maintenance/port/aft) +"rlA" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/medical/morgue) +"rlE" = ( +/obj/item/radio/intercom/directional/east, +/obj/machinery/computer/slot_machine{ + name = "two-armed bandit" + }, +/turf/open/floor/wood/large, +/area/station/commons/lounge) +"rlH" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"rlL" = ( +/obj/machinery/light_switch/directional/north{ + pixel_x = -7 + }, +/obj/structure/table, +/obj/item/stock_parts/power_store/cell/high/empty, +/obj/machinery/cell_charger, +/obj/effect/turf_decal/tile/brown/fourcorners, +/turf/open/floor/iron/dark, +/area/station/engineering/lobby) "rlS" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -56682,6 +57929,17 @@ /obj/machinery/firealarm/directional/north, /turf/open/floor/iron/white, /area/station/science/ordnance) +"rms" = ( +/obj/structure/table, +/obj/effect/decal/cleanable/dirt, +/obj/item/paper_bin{ + pixel_y = 6 + }, +/obj/item/taperecorder{ + pixel_x = 9 + }, +/turf/open/floor/iron/dark, +/area/station/science/explab) "rmv" = ( /obj/structure/rack, /obj/item/wrench, @@ -56706,14 +57964,6 @@ /obj/effect/mapping_helpers/airlock/access/all/supply/mining, /turf/open/floor/iron/dark/textured_half, /area/mine/mechbay) -"rmG" = ( -/obj/machinery/door/airlock/research/glass/incinerator/ordmix_exterior{ - name = "Burn Chamber Exterior Airlock" - }, -/obj/effect/mapping_helpers/airlock/locked, -/obj/effect/mapping_helpers/airlock/access/all/science/ordnance, -/turf/open/floor/engine/vacuum, -/area/station/science/ordnance) "rmM" = ( /obj/machinery/disposal/bin, /obj/structure/disposalpipe/trunk{ @@ -56721,6 +57971,11 @@ }, /turf/open/floor/wood, /area/station/command/meeting_room) +"rmR" = ( +/obj/effect/spawner/random/trash/mess, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "rmU" = ( /obj/effect/spawner/random/trash/graffiti, /obj/structure/sign/poster/contraband/free_drone/directional/east, @@ -56735,6 +57990,10 @@ /obj/effect/turf_decal/tile/red, /turf/open/floor/iron/textured, /area/station/security/brig) +"rng" = ( +/obj/machinery/light/cold/directional/west, +/turf/open/floor/plating/snowed/coldroom, +/area/station/service/kitchen/coldroom) "rnh" = ( /obj/machinery/door/airlock{ name = "Observatory Access" @@ -56857,10 +58116,6 @@ /obj/machinery/newscaster/directional/south, /turf/open/floor/iron, /area/station/science/explab) -"roW" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/closed/wall/r_wall, -/area/station/science/ordnance) "roX" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/cable, @@ -56870,6 +58125,9 @@ /obj/structure/closet/athletic_mixed, /turf/open/floor/plating, /area/station/maintenance/aft/lesser) +"rpi" = ( +/turf/closed/wall/ice, +/area/icemoon/underground/explored/graveyard) "rpu" = ( /obj/machinery/disposal/bin, /obj/structure/disposalpipe/trunk{ @@ -56907,6 +58165,15 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/hallway/primary/central) +"rpJ" = ( +/obj/structure/minecart_rail{ + dir = 10 + }, +/obj/structure/cable, +/obj/structure/sign/warning/directional/south, +/obj/effect/decal/cleanable/blood/old, +/turf/open/floor/plating/snowed/coldroom, +/area/icemoon/underground/explored) "rpK" = ( /obj/structure/chair/pew/left{ dir = 1 @@ -56975,6 +58242,15 @@ }, /turf/open/floor/iron/dark, /area/station/security/checkpoint/customs/auxiliary) +"rqn" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light/small/directional/south, +/obj/structure/rack, +/obj/machinery/camera/directional/south{ + c_tag = "Chapel Electrical Maintenace Lower" + }, +/turf/open/floor/iron/smooth, +/area/station/maintenance/department/chapel) "rqD" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 8 @@ -56988,6 +58264,13 @@ }, /turf/open/floor/plating, /area/station/engineering/engine_smes) +"rqG" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/wood, +/area/station/commons/lounge) "rqH" = ( /obj/structure/closet/crate, /obj/item/stack/sheet/leather, @@ -57007,10 +58290,20 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/cargo/lobby) -"rqT" = ( -/obj/machinery/door/firedoor, -/turf/open/floor/iron, -/area/station/hallway/primary/starboard) +"rqQ" = ( +/obj/machinery/camera/directional/east{ + c_tag = "Service - Kitchen" + }, +/obj/effect/turf_decal/siding/white{ + dir = 8 + }, +/obj/machinery/airalarm/directional/east, +/obj/structure/table, +/obj/machinery/processor{ + pixel_y = 6 + }, +/turf/open/floor/iron/white/smooth_large, +/area/station/service/kitchen) "rqY" = ( /obj/effect/turf_decal/trimline/green/filled/line{ dir = 9 @@ -57018,10 +58311,22 @@ /obj/machinery/light_switch/directional/west, /turf/open/floor/iron/dark, /area/station/medical/virology) +"rra" = ( +/obj/machinery/modular_computer/preset/cargochat/service, +/obj/machinery/requests_console/auto_name/directional/north, +/obj/effect/turf_decal/bot, +/obj/effect/turf_decal/siding/dark, +/turf/open/floor/iron/checker, +/area/station/hallway/secondary/service) "rrf" = ( /obj/structure/table/wood, /turf/open/floor/iron/dark, /area/station/service/chapel/office) +"rrl" = ( +/obj/item/stack/sheet/mineral/wood, +/obj/effect/decal/cleanable/generic, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/explored) "rrn" = ( /obj/structure/closet/emcloset, /obj/structure/sign/poster/contraband/random/directional/north, @@ -57036,29 +58341,19 @@ }, /turf/open/floor/glass/reinforced, /area/station/hallway/primary/starboard) -"rrx" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/machinery/duct, -/obj/structure/disposalpipe/segment{ +"rrL" = ( +/obj/effect/turf_decal/siding/wood{ dir = 4 }, -/turf/open/floor/iron, -/area/station/hallway/secondary/service) +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/duct, +/turf/open/floor/wood/large, +/area/station/service/bar) "rrV" = ( /obj/effect/spawner/structure/window/hollow/reinforced/end, /turf/open/floor/plating, /area/mine/eva) -"rrX" = ( -/obj/effect/turf_decal/siding/wood, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/machinery/airalarm/directional/east, -/obj/machinery/duct, -/turf/open/floor/iron, -/area/station/service/theater) "rsw" = ( /obj/effect/turf_decal/stripes/corner{ dir = 8 @@ -57103,17 +58398,6 @@ "rsY" = ( /turf/closed/wall/r_wall, /area/mine/eva) -"rtc" = ( -/obj/machinery/duct, -/turf/open/floor/iron, -/area/station/hallway/secondary/service) -"rth" = ( -/obj/effect/turf_decal/siding/white, -/obj/effect/turf_decal/siding/white, -/obj/effect/spawner/random/entertainment/arcade, -/obj/structure/sign/poster/random/directional/north, -/turf/open/floor/iron, -/area/station/hallway/secondary/service) "rtn" = ( /obj/structure/chair/comfy/black, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -57214,6 +58498,23 @@ }, /turf/open/floor/iron, /area/station/engineering/main) +"ruQ" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/wood/large, +/area/station/commons/lounge) +"ruX" = ( +/obj/structure/closet/lasertag/red, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 1 + }, +/obj/machinery/newscaster/directional/north, +/turf/open/floor/iron, +/area/station/commons/fitness) "ruZ" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable/layer3, @@ -57238,6 +58539,13 @@ /obj/machinery/light/directional/east, /turf/open/floor/iron/white, /area/station/medical/medbay/aft) +"rvO" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/item/kirbyplants/organic/plant2, +/turf/open/floor/stone, +/area/station/service/bar/atrium) "rvS" = ( /obj/structure/rack, /obj/item/poster/random_contraband, @@ -57345,14 +58653,6 @@ /obj/structure/girder, /turf/open/floor/plating/snowed/icemoon, /area/icemoon/underground/explored) -"rxA" = ( -/obj/machinery/disposal/bin, -/obj/structure/disposalpipe/trunk{ - dir = 4 - }, -/obj/structure/sign/warning/electric_shock/directional/west, -/turf/open/floor/iron/dark, -/area/station/hallway/primary/fore) "rxG" = ( /obj/structure/ore_vent/starter_resources{ icon_state = "ore_vent_ice_active"; @@ -57360,11 +58660,6 @@ }, /turf/open/misc/asteroid/snow/icemoon, /area/icemoon/underground/explored) -"rxK" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/landmark/start/hangover, -/turf/open/floor/iron/white/smooth_large, -/area/station/service/kitchen/diner) "rxM" = ( /obj/machinery/door/poddoor/preopen{ id = "xenobio8"; @@ -57378,6 +58673,11 @@ /obj/structure/sign/warning/electric_shock, /turf/open/floor/plating, /area/station/science/xenobiology) +"rxV" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics) "rxW" = ( /turf/closed/mineral/random/snow, /area/icemoon/underground/unexplored/rivers) @@ -57433,23 +58733,6 @@ /obj/effect/turf_decal/delivery/red, /turf/open/floor/iron/textured, /area/station/hallway/secondary/entry) -"ryO" = ( -/obj/item/kirbyplants/random, -/turf/open/floor/wood, -/area/station/hallway/secondary/service) -"ryX" = ( -/obj/machinery/atmospherics/components/binary/dp_vent_pump/high_volume/incinerator_ordmix{ - dir = 8 - }, -/turf/open/floor/engine, -/area/station/science/ordnance) -"rza" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/commons/fitness) "rzj" = ( /obj/structure/table, /obj/item/stack/sheet/iron/fifty{ @@ -57459,22 +58742,25 @@ /obj/item/stack/sheet/iron/fifty, /turf/open/floor/iron/dark, /area/station/engineering/atmos) -"rzk" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/public/glass{ - name = "Dormitory" - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/commons/dorms) "rzm" = ( /obj/structure/sign/departments/cargo, /turf/closed/wall, /area/station/cargo/lobby) +"rzq" = ( +/obj/machinery/firealarm/directional/south, +/obj/effect/turf_decal/siding/thinplating/dark/corner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/green/filled/line, +/obj/effect/turf_decal/trimline/blue/filled/warning, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/obj/structure/cable, +/obj/machinery/duct, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics) "rzz" = ( /obj/machinery/door/airlock/command{ name = "Server Room" @@ -57486,20 +58772,6 @@ /obj/effect/mapping_helpers/airlock/access/all/science/rd, /turf/open/floor/iron/dark, /area/station/science/server) -"rzA" = ( -/obj/machinery/door/airlock{ - name = "Theater Backstage" - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/machinery/door/firedoor, -/obj/machinery/duct, -/obj/effect/mapping_helpers/airlock/access/all/service/theatre, -/turf/open/floor/iron/textured_half{ - dir = 1 - }, -/area/station/service/theater) "rzD" = ( /obj/machinery/atmospherics/pipe/heat_exchanging/manifold/layer2{ dir = 1 @@ -57535,6 +58807,17 @@ /obj/machinery/digital_clock/directional/south, /turf/open/openspace, /area/station/medical/medbay/lobby) +"rzY" = ( +/obj/structure/table/wood, +/obj/item/raptor_dex{ + pixel_y = 13 + }, +/obj/item/raptor_dex{ + pixel_y = 7 + }, +/obj/item/raptor_dex, +/turf/open/misc/hay/icemoon, +/area/icemoon/underground/explored) "rAr" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -57548,6 +58831,23 @@ }, /turf/open/floor/iron, /area/mine/laborcamp/security) +"rAx" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/railing{ + dir = 4 + }, +/obj/effect/turf_decal/siding/white{ + dir = 4 + }, +/obj/machinery/duct, +/obj/effect/turf_decal/tile/bar{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/station/service/kitchen/coldroom) "rAA" = ( /obj/machinery/pdapainter, /turf/open/floor/iron, @@ -57596,10 +58896,6 @@ /obj/effect/turf_decal/stripes/line, /turf/open/floor/iron/dark/smooth_large, /area/station/ai_monitored/command/storage/eva) -"rBn" = ( -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/commons/dorms) "rBo" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/atmospherics/pipe/smart/simple/dark/visible/layer1{ @@ -57611,6 +58907,12 @@ }, /turf/open/floor/plating, /area/station/engineering/atmos) +"rBp" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/closed/wall, +/area/station/service/library) "rBv" = ( /obj/structure/chair/stool/directional/north, /obj/item/storage/toolbox/artistic{ @@ -57657,16 +58959,6 @@ "rCf" = ( /turf/open/floor/iron, /area/station/maintenance/starboard/fore) -"rCh" = ( -/obj/machinery/door/airlock/medical/glass{ - name = "Icemoon Exterior Garden" - }, -/obj/effect/mapping_helpers/airlock/access/all/service/hydroponics, -/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ - cycle_id = "hydroponics-external" - }, -/turf/open/floor/iron/textured_half, -/area/station/service/hydroponics) "rCj" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -57829,9 +59121,6 @@ /obj/structure/sign/poster/official/safety_internals/directional/east, /turf/open/floor/iron/dark, /area/station/ai_monitored/command/storage/eva) -"rDF" = ( -/turf/open/floor/iron/white/smooth_large, -/area/station/service/kitchen/diner) "rDH" = ( /obj/structure/flora/grass/green/style_random, /mob/living/basic/pet/penguin/emperor{ @@ -57839,6 +59128,16 @@ }, /turf/open/misc/asteroid/snow/standard_air, /area/station/science/research) +"rDI" = ( +/obj/item/toy/plush/lizard_plushie{ + name = "Wines-And-Dines"; + pixel_x = 4 + }, +/obj/item/reagent_containers/cup/glass/bottle{ + pixel_x = -9 + }, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "rDJ" = ( /obj/structure/ladder{ name = "upper dispenser access" @@ -57846,6 +59145,10 @@ /obj/effect/turf_decal/stripes/box, /turf/open/floor/iron/dark/textured_large, /area/station/medical/treatment_center) +"rDN" = ( +/obj/structure/no_effect_signpost, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/explored) "rDO" = ( /obj/structure/table, /obj/item/storage/box/lights/mixed, @@ -57893,11 +59196,12 @@ }, /turf/open/floor/iron/dark, /area/station/science/ordnance) -"rEj" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron, -/area/station/science/ordnance) +"rEn" = ( +/obj/structure/railing/wooden_fence{ + dir = 4 + }, +/turf/open/misc/hay/icemoon, +/area/icemoon/underground/explored) "rEp" = ( /obj/structure/table, /obj/item/hand_labeler, @@ -57907,6 +59211,17 @@ }, /turf/open/floor/iron/white, /area/station/medical/pharmacy) +"rEt" = ( +/obj/machinery/seed_extractor, +/obj/effect/turf_decal/tile/blue/opposingcorners, +/obj/effect/turf_decal/tile/green/opposingcorners{ + dir = 1 + }, +/obj/effect/turf_decal/siding/white{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/service/hydroponics) "rEx" = ( /obj/effect/turf_decal/bot_white, /turf/open/floor/iron/dark, @@ -57918,6 +59233,14 @@ }, /turf/open/floor/iron/white, /area/station/medical/treatment_center) +"rEH" = ( +/obj/item/chair/stool/bar{ + pixel_y = -2 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "rEP" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /obj/effect/turf_decal/tile/red/half/contrasted{ @@ -57929,6 +59252,17 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) +"rEY" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/firedoor, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 8; + id = "kitchencounter"; + name = "Kitchen Counter Shutters" + }, +/obj/structure/displaycase/forsale/kitchen, +/turf/open/floor/iron/white/smooth_large, +/area/station/service/kitchen) "rFb" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 1 @@ -57941,13 +59275,6 @@ }, /turf/open/floor/iron/dark, /area/station/commons/storage/mining) -"rFr" = ( -/obj/effect/turf_decal/siding/wideplating/dark{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/service/hydroponics) "rFD" = ( /obj/machinery/firealarm/directional/east, /turf/open/floor/iron, @@ -58087,6 +59414,23 @@ }, /turf/open/floor/iron/dark, /area/station/tcommsat/computer) +"rHR" = ( +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 8 + }, +/obj/machinery/door/airlock/external{ + glass = 1; + name = "Chapel Maintenance External Airlock"; + opacity = 0 + }, +/obj/structure/sign/warning/cold_temp/directional/north, +/obj/structure/sign/warning/gas_mask/directional/south{ + desc = "A sign that warns of dangerous gasses in the air, instructing you to wear internals." + }, +/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/engineering/external, +/turf/open/floor/plating, +/area/station/maintenance/department/chapel) "rHZ" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ @@ -58123,6 +59467,10 @@ /obj/machinery/light/directional/north, /turf/open/floor/iron/showroomfloor, /area/station/engineering/atmos) +"rIS" = ( +/obj/structure/flora/rock/icy/style_random, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/unexplored/rivers/deep/shoreline) "rIU" = ( /turf/open/floor/iron/white, /area/station/science/robotics/lab) @@ -58168,33 +59516,10 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/smooth, /area/station/maintenance/fore/lesser) -"rJL" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/wood/parquet, -/area/station/commons/lounge) -"rKd" = ( -/obj/effect/landmark/start/hangover, -/obj/effect/spawner/random/entertainment/gambling, -/obj/structure/table/wood, -/obj/machinery/camera{ - c_tag = "Service Bar North"; - dir = 9 - }, -/turf/open/floor/wood/parquet, -/area/station/commons/lounge) -"rKe" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/public/glass{ - name = "Dormitory" - }, -/obj/effect/landmark/navigate_destination, -/obj/structure/cable, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/commons/dorms) +"rJX" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/textured, +/area/station/service/hydroponics) "rKs" = ( /obj/structure/chair/stool/directional/south, /obj/structure/sign/poster/official/work_for_a_future/directional/north, @@ -58219,12 +59544,6 @@ }, /turf/open/floor/wood, /area/station/maintenance/port/aft) -"rKS" = ( -/obj/machinery/camera/directional/south{ - c_tag = "Dormitory Toilets" - }, -/turf/open/floor/iron/freezer, -/area/station/commons/toilet) "rKX" = ( /obj/machinery/camera{ c_tag = "Surgery B"; @@ -58263,13 +59582,6 @@ /obj/effect/turf_decal/bot, /turf/open/floor/iron, /area/station/cargo/office) -"rLV" = ( -/obj/structure/window/reinforced/spawner/directional/east, -/obj/effect/turf_decal/siding/thinplating/dark{ - dir = 4 - }, -/turf/open/floor/carpet, -/area/station/service/theater) "rLX" = ( /obj/item/target, /obj/item/target/syndicate, @@ -58283,11 +59595,10 @@ }, /turf/open/floor/iron/dark/textured, /area/station/security/range) -"rMa" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/structure/sign/warning/cold_temp, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) +"rMm" = ( +/obj/machinery/airalarm/directional/west, +/turf/open/openspace, +/area/station/service/bar/atrium) "rMr" = ( /obj/structure/chair{ dir = 8 @@ -58397,6 +59708,16 @@ /obj/effect/landmark/start/hangover, /turf/open/floor/iron, /area/station/hallway/primary/starboard) +"rNV" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/disposalpipe/segment, +/obj/structure/railing/corner/end/flip, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"rNX" = ( +/obj/machinery/door/poddoor/incinerator_ordmix, +/turf/open/floor/engine/vacuum, +/area/station/science/ordnance/burnchamber) "rOb" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -58463,11 +59784,6 @@ /obj/structure/closet/toolcloset, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) -"rPf" = ( -/obj/structure/table/wood/poker, -/obj/item/clothing/mask/cigarette/pipe, -/turf/open/floor/wood/parquet, -/area/station/commons/lounge) "rPn" = ( /obj/machinery/atmospherics/pipe/smart/simple/cyan/visible, /obj/machinery/camera{ @@ -58484,13 +59800,9 @@ dir = 4 }, /obj/structure/fake_stairs/wood/directional/north, +/obj/effect/mapping_helpers/no_atoms_ontop, /turf/open/misc/asteroid/snow/icemoon, /area/icemoon/surface/outdoors/nospawn) -"rPu" = ( -/obj/machinery/power/smes, -/obj/structure/cable, -/turf/open/floor/plating, -/area/station/maintenance/department/electrical) "rPL" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/rack, @@ -58515,10 +59827,6 @@ /obj/effect/landmark/start/hangover, /turf/open/floor/iron, /area/station/hallway/primary/central) -"rQt" = ( -/obj/machinery/airalarm/directional/west, -/turf/open/floor/iron, -/area/station/hallway/secondary/service) "rQw" = ( /obj/effect/turf_decal/trimline/green/filled/line{ dir = 8 @@ -58599,15 +59907,29 @@ }, /turf/open/floor/iron, /area/station/science/ordnance) -"rRy" = ( -/obj/structure/railing{ +"rRs" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ dir = 4 }, -/obj/machinery/door/firedoor/border_only{ +/obj/effect/turf_decal/trimline/blue/filled/warning{ dir = 4 }, -/turf/open/floor/wood/parquet, -/area/station/service/bar/atrium) +/obj/machinery/camera/directional/east{ + c_tag = "Service - Botany Upper Entrance" + }, +/obj/structure/table/glass, +/obj/machinery/fax/auto_name, +/turf/open/floor/iron, +/area/station/service/hydroponics) +"rRu" = ( +/obj/structure/table/wood, +/obj/item/toy/mecha/honk{ + pixel_y = 12 + }, +/obj/structure/sign/poster/contraband/random/directional/west, +/obj/machinery/light/small/directional/west, +/turf/open/floor/iron/grimy, +/area/station/service/theater) "rRM" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -58615,6 +59937,14 @@ /obj/machinery/light/floor, /turf/open/floor/iron/smooth, /area/station/security/brig/upper) +"rRZ" = ( +/obj/machinery/door/airlock/research/glass/incinerator/ordmix_exterior{ + name = "Burn Chamber Exterior Airlock" + }, +/obj/effect/mapping_helpers/airlock/locked, +/obj/effect/mapping_helpers/airlock/access/all/science/ordnance, +/turf/open/floor/engine/vacuum, +/area/station/science/ordnance/burnchamber) "rSe" = ( /obj/structure/rack, /obj/effect/spawner/random/clothing/costume, @@ -58652,12 +59982,6 @@ "rSC" = ( /turf/open/floor/glass/reinforced, /area/station/engineering/lobby) -"rSK" = ( -/obj/effect/turf_decal/siding/white/corner, -/obj/machinery/holopad, -/obj/effect/turf_decal/tile/red/full, -/turf/open/floor/iron/large, -/area/station/service/kitchen/diner) "rSN" = ( /obj/machinery/computer/upload/borg{ dir = 1 @@ -58680,8 +60004,16 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/ce) +"rSQ" = ( +/obj/item/toy/snowball{ + pixel_x = -11; + pixel_y = -2 + }, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/explored) "rST" = ( /obj/structure/marker_beacon/cerulean, +/obj/effect/mapping_helpers/no_atoms_ontop, /turf/open/misc/asteroid/snow/icemoon, /area/icemoon/surface/outdoors/nospawn) "rSW" = ( @@ -58879,15 +60211,6 @@ /obj/item/storage/backpack, /turf/open/floor/plastic, /area/station/commons/dorms/laundry) -"rVO" = ( -/obj/structure/reagent_dispensers/beerkeg, -/obj/item/stack/package_wrap{ - pixel_x = 2; - pixel_y = 3 - }, -/obj/effect/turf_decal/tile/bar/opposingcorners, -/turf/open/floor/iron, -/area/station/service/bar/backroom) "rVV" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ @@ -58902,6 +60225,14 @@ /obj/structure/cable, /turf/open/floor/iron, /area/mine/laborcamp) +"rWh" = ( +/obj/effect/turf_decal/weather/snow/corner{ + dir = 10 + }, +/turf/open/misc/dirt{ + initial_gas_mix = "ICEMOON_ATMOS" + }, +/area/icemoon/underground/explored/graveyard) "rWn" = ( /obj/effect/turf_decal/tile/yellow, /turf/open/floor/iron, @@ -58912,6 +60243,22 @@ }, /turf/open/floor/engine/plasma, /area/station/engineering/atmos) +"rWq" = ( +/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/science/ordnance) +"rWA" = ( +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 4 + }, +/obj/machinery/door/airlock/external, +/obj/effect/mapping_helpers/airlock/access/any/security/general, +/obj/effect/mapping_helpers/airlock/access/any/engineering/external, +/turf/open/floor/plating, +/area/station/maintenance/fore) "rWO" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, @@ -59006,15 +60353,14 @@ }, /turf/open/floor/iron/large, /area/station/commons/storage/primary) -"rXD" = ( -/obj/machinery/button/door/directional/east{ - id = "xenobio7"; - layer = 4; - name = "Xenobio Pen 7 Blast DOors"; - req_access = list("xenobiology") +"rXB" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 }, -/turf/open/floor/iron/white, -/area/station/science/xenobiology) +/obj/structure/cable, +/obj/structure/minecart_rail/railbreak, +/turf/open/floor/plating/snowed/coldroom, +/area/station/service/kitchen/coldroom) "rXN" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/command{ @@ -59037,6 +60383,11 @@ }, /turf/open/floor/iron/dark/smooth_large, /area/station/security/processing) +"rXY" = ( +/obj/item/kirbyplants/random/dead, +/obj/machinery/light/small/broken/directional/east, +/turf/open/floor/plating, +/area/station/maintenance/starboard/lesser) "rYq" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -59110,42 +60461,16 @@ }, /turf/open/floor/iron/dark, /area/station/engineering/atmos/project) -"rZK" = ( -/obj/structure/flora/bush/snow/style_random, -/obj/effect/mapping_helpers/airalarm/tlv_cold_room, -/obj/machinery/airalarm/directional/west, -/turf/open/misc/asteroid/snow/coldroom, -/area/station/service/kitchen/coldroom) -"rZN" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +"rZP" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 10 - }, -/turf/open/floor/plating, -/area/station/maintenance/department/crew_quarters/bar) +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/stone, +/area/station/commons/lounge) "rZR" = ( /obj/effect/turf_decal/trimline/blue/filled/line, /obj/effect/landmark/start/chief_medical_officer, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/cmo) -"rZT" = ( -/obj/structure/fireplace{ - dir = 4; - pixel_y = -15 - }, -/obj/effect/turf_decal/siding/wood{ - dir = 1 - }, -/turf/open/floor/stone, -/area/station/commons/lounge) -"rZX" = ( -/obj/machinery/light/small/directional/east, -/obj/structure/rack, -/obj/item/pickaxe, -/turf/open/floor/plating, -/area/station/medical/morgue) "rZZ" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/turf_decal/trimline/blue/filled/warning{ @@ -59246,14 +60571,6 @@ /obj/effect/turf_decal/tile/green/anticorner/contrasted, /turf/open/floor/iron/dark, /area/mine/laborcamp) -"sbT" = ( -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/machinery/light/directional/west, -/turf/open/floor/iron, -/area/station/hallway/primary/central) "sbU" = ( /obj/machinery/vending/cigarette, /turf/open/floor/iron/dark, @@ -59296,6 +60613,14 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron/white, /area/station/medical/medbay/central) +"scr" = ( +/obj/machinery/hydroponics/constructable, +/obj/effect/turf_decal/trimline/green/filled/line, +/obj/effect/turf_decal/trimline/blue/filled/warning, +/obj/structure/sign/warning/gas_mask/directional/south, +/obj/machinery/light/warm/directional/south, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics) "scu" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 8 @@ -59316,6 +60641,14 @@ /obj/machinery/airalarm/directional/south, /turf/open/floor/iron, /area/station/tcommsat/computer) +"scG" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/sink/directional/south, +/obj/structure/mirror/directional/north, +/obj/structure/cable, +/turf/open/floor/wood, +/area/station/hallway/secondary/service) "scQ" = ( /obj/structure/tank_holder/oxygen, /obj/effect/decal/cleanable/wrapping, @@ -59385,6 +60718,10 @@ /obj/effect/turf_decal/tile/neutral/half/contrasted, /turf/open/floor/iron/dark, /area/station/ai_monitored/command/storage/eva) +"sed" = ( +/obj/structure/flora/rock/icy/style_random, +/turf/open/floor/plating/snowed/smoothed/icemoon, +/area/icemoon/underground/explored) "sen" = ( /obj/structure/cable, /turf/open/floor/iron, @@ -59394,6 +60731,17 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/security/courtroom) +"seB" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 8 + }, +/obj/machinery/duct, +/turf/open/floor/iron, +/area/station/commons/fitness) "seH" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -59438,6 +60786,12 @@ /obj/effect/turf_decal/bot, /turf/open/floor/iron/large, /area/station/hallway/secondary/entry) +"sft" = ( +/obj/machinery/holopad, +/obj/effect/spawner/random/engineering/tracking_beacon, +/obj/effect/turf_decal/bot_white, +/turf/open/floor/stone, +/area/station/service/bar/atrium) "sfv" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/general/visible, @@ -59474,17 +60828,12 @@ }, /turf/open/floor/iron/dark, /area/station/ai_monitored/command/storage/eva) -"sfA" = ( -/obj/structure/disposalpipe/segment{ - dir = 10 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/landmark/start/hangover, -/obj/effect/turf_decal/tile/neutral/half/contrasted, -/turf/open/floor/iron, -/area/station/commons/fitness) +"sfD" = ( +/obj/machinery/airalarm/directional/north, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/obj/machinery/duct, +/turf/open/floor/iron/freezer, +/area/station/commons/toilet) "sfY" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -59496,6 +60845,12 @@ dir = 5 }, /area/station/science/research) +"sgz" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 1 + }, +/turf/open/floor/wood/large, +/area/station/commons/lounge) "sgA" = ( /obj/effect/turf_decal/box, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -59583,12 +60938,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, /turf/open/floor/engine, /area/station/engineering/supermatter/room) -"shD" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 1 - }, -/turf/open/floor/stone, -/area/station/commons/lounge) "shG" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable, @@ -59610,17 +60959,6 @@ dir = 8 }, /area/station/hallway/secondary/entry) -"sib" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/multiz/supply/visible/layer4{ - color = "#0000ff"; - dir = 8; - name = "Supply multi deck pipe adapter" - }, -/turf/open/floor/plating, -/area/station/maintenance/starboard/lesser) "sil" = ( /obj/machinery/door/airlock/public/glass{ name = "Art Gallery" @@ -59700,13 +61038,6 @@ /obj/machinery/airalarm/directional/north, /turf/open/floor/iron/smooth_large, /area/station/cargo/drone_bay) -"sjL" = ( -/obj/effect/landmark/generic_maintenance_landmark, -/obj/item/bikehorn/rubberducky, -/obj/structure/cable, -/obj/effect/landmark/start/hangover, -/turf/open/floor/iron/freezer, -/area/station/commons/toilet) "sjU" = ( /obj/structure/sign/warning/docking/directional/east, /turf/open/floor/plating/snowed/smoothed/icemoon, @@ -59732,12 +61063,6 @@ /obj/effect/mapping_helpers/airlock/cyclelink_helper, /turf/open/floor/plating, /area/station/hallway/secondary/entry) -"skf" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 4 - }, -/turf/open/floor/wood, -/area/station/hallway/secondary/service) "skj" = ( /obj/structure/table, /obj/machinery/light/directional/east, @@ -59761,16 +61086,6 @@ }, /turf/open/floor/iron/dark/corner, /area/station/engineering/atmos/storage/gas) -"skp" = ( -/obj/machinery/smartfridge/food, -/obj/machinery/door/poddoor/shutters/preopen{ - dir = 1; - id = "kitchencounter"; - name = "Kitchen Counter Shutters" - }, -/obj/machinery/door/firedoor, -/turf/open/floor/iron/kitchen/diagonal, -/area/station/service/kitchen) "skw" = ( /obj/machinery/computer/security/qm, /obj/machinery/requests_console/directional/west{ @@ -59792,11 +61107,32 @@ /obj/machinery/atmospherics/pipe/bridge_pipe/yellow/visible, /turf/open/floor/iron, /area/station/engineering/atmos) +"skH" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/siding/white/corner{ + dir = 4 + }, +/obj/machinery/duct, +/obj/effect/mapping_helpers/airlock/access/all/service/kitchen, +/obj/machinery/door/airlock{ + name = "Kitchen" + }, +/obj/machinery/door/firedoor, +/turf/open/floor/iron/white/textured_half, +/area/station/service/kitchen) "skJ" = ( /obj/structure/grille/broken, /obj/effect/mapping_helpers/burnt_floor, /turf/open/floor/plating, /area/station/maintenance/department/medical/morgue) +"skQ" = ( +/obj/structure/window/reinforced/spawner/directional/south, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/siding/white, +/turf/open/floor/iron/dark, +/area/station/commons/fitness) "skU" = ( /obj/structure/disposalpipe/segment{ dir = 6 @@ -59807,13 +61143,6 @@ }, /turf/open/floor/iron/white, /area/station/medical/virology) -"skV" = ( -/obj/structure/chair/stool/bar/directional/south, -/obj/effect/turf_decal/siding/wood{ - dir = 1 - }, -/turf/open/floor/stone, -/area/station/commons/lounge) "skW" = ( /obj/machinery/door/airlock/maintenance, /obj/effect/mapping_helpers/airlock/abandoned, @@ -60000,16 +61329,6 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/department/cargo) -"snv" = ( -/obj/structure/window/reinforced/spawner/directional/north{ - layer = 2.9 - }, -/obj/machinery/door/poddoor/shutters/preopen{ - id = "riot"; - name = "Security Shutters" - }, -/turf/open/floor/glass/reinforced, -/area/station/hallway/primary/fore) "snw" = ( /obj/structure/table, /obj/machinery/microwave, @@ -60045,6 +61364,15 @@ }, /turf/open/floor/engine, /area/station/engineering/supermatter/room) +"snR" = ( +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "snW" = ( /obj/machinery/computer/atmos_control/oxygen_tank{ dir = 1 @@ -60062,11 +61390,6 @@ /obj/effect/mapping_helpers/airlock/access/all/security/general, /turf/open/floor/iron/dark, /area/station/security/checkpoint/engineering) -"son" = ( -/obj/effect/turf_decal/siding/white, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/white/smooth_large, -/area/station/service/kitchen/diner) "sou" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -60149,6 +61472,14 @@ }, /turf/open/floor/iron/dark, /area/station/science/genetics) +"spj" = ( +/obj/effect/turf_decal/tile/neutral/diagonal_edge, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/obj/effect/landmark/start/cook, +/turf/open/floor/iron/kitchen/diagonal, +/area/station/service/kitchen) "spv" = ( /obj/structure/window/reinforced/plasma/spawner/directional/east, /obj/structure/cable, @@ -60226,17 +61557,6 @@ dir = 8 }, /area/station/service/chapel) -"sqH" = ( -/obj/machinery/door/airlock/research/glass/incinerator/ordmix_interior{ - name = "Burn Chamber Interior Airlock" - }, -/obj/effect/mapping_helpers/airlock/locked, -/obj/machinery/airlock_controller/incinerator_ordmix{ - pixel_x = 24 - }, -/obj/effect/mapping_helpers/airlock/access/all/science/ordnance, -/turf/open/floor/engine, -/area/station/science/ordnance) "sqN" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -60314,11 +61634,13 @@ /turf/open/floor/iron/dark/textured_large, /area/station/cargo/bitrunning/den) "srG" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/blood/tracks{ +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/blood/splatter, /turf/open/floor/iron/dark, /area/station/medical/morgue) "srM" = ( @@ -60331,6 +61653,15 @@ "srP" = ( /turf/closed/wall, /area/station/science/breakroom) +"srU" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/junction{ + dir = 2 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "srW" = ( /obj/structure/table, /obj/item/assembly/prox_sensor{ @@ -60380,6 +61711,13 @@ }, /turf/open/floor/iron, /area/station/engineering/atmos) +"ssm" = ( +/obj/structure/window/reinforced/spawner/directional/south, +/obj/structure/closet/firecloset, +/obj/structure/sign/warning/gas_mask/directional/west, +/obj/effect/turf_decal/siding/white, +/turf/open/floor/plating, +/area/station/service/kitchen/coldroom) "ssq" = ( /obj/structure/table/wood, /obj/item/camera_film, @@ -60451,12 +61789,6 @@ }, /turf/open/floor/iron, /area/station/commons/vacant_room/commissary) -"stp" = ( -/obj/structure/chair/sofa/bench/right{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/hallway/primary/fore) "stt" = ( /obj/structure/cable, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ @@ -60466,15 +61798,6 @@ dir = 1 }, /area/station/security/lockers) -"stw" = ( -/obj/effect/turf_decal/siding/white{ - dir = 4 - }, -/obj/structure/window/reinforced/spawner/directional/east, -/obj/machinery/disposal/bin, -/obj/structure/disposalpipe/trunk, -/turf/open/floor/iron/dark, -/area/station/service/hydroponics) "stA" = ( /obj/structure/lattice/catwalk, /obj/structure/railing{ @@ -60482,6 +61805,16 @@ }, /turf/open/lava/plasma/ice_moon, /area/icemoon/underground/explored) +"stB" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/stripes/white/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/white/line, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark/textured, +/area/station/hallway/primary/fore) "stD" = ( /obj/machinery/door/poddoor/preopen{ id = "atmos"; @@ -60555,6 +61888,17 @@ /obj/structure/sign/warning/gas_mask, /turf/open/floor/plating, /area/station/maintenance/port/aft) +"sus" = ( +/obj/structure/table, +/obj/effect/spawner/random/maintenance/two, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron/smooth, +/area/station/maintenance/starboard/fore) +"suv" = ( +/obj/machinery/portable_atmospherics/pipe_scrubber, +/obj/machinery/light/directional/east, +/turf/open/floor/iron/dark, +/area/station/science/ordnance/office) "suA" = ( /obj/structure/closet/crate/coffin, /obj/effect/decal/cleanable/dirt, @@ -60562,11 +61906,6 @@ /obj/machinery/light/small/dim/directional/north, /turf/open/floor/plating, /area/station/maintenance/department/chapel) -"suE" = ( -/obj/structure/window/reinforced/spawner/directional/north, -/obj/effect/landmark/start/hangover, -/turf/open/floor/iron/dark, -/area/station/commons/fitness) "suL" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -60623,6 +61962,13 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/smooth_large, /area/station/cargo/warehouse) +"svz" = ( +/obj/machinery/light/small/directional/east, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 9 + }, +/turf/open/floor/plating/snowed/icemoon, +/area/icemoon/underground/explored) "svF" = ( /turf/open/floor/iron/smooth, /area/station/security/execution/transfer) @@ -60798,15 +62144,6 @@ /obj/structure/cable, /turf/open/floor/wood, /area/station/security/prison/rec) -"sxW" = ( -/obj/structure/chair/wood{ - dir = 8 - }, -/obj/machinery/light/small/directional/east, -/obj/machinery/computer/security/telescreen/entertainment/directional/north, -/obj/structure/sign/poster/random/directional/east, -/turf/open/floor/wood/parquet, -/area/station/commons/lounge) "sxY" = ( /obj/structure/cable/multilayer/multiz, /obj/structure/window/reinforced/spawner/directional/south, @@ -60820,6 +62157,14 @@ /obj/machinery/firealarm/directional/west, /turf/open/floor/iron/white, /area/station/science/research) +"syd" = ( +/obj/machinery/duct, +/obj/machinery/firealarm/directional/south, +/obj/effect/turf_decal/tile/bar{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/service/kitchen/coldroom) "syh" = ( /obj/structure/chair/pew/right{ dir = 1 @@ -60886,6 +62231,14 @@ /obj/effect/spawner/structure/window/hollow/reinforced/end, /turf/open/floor/plating, /area/station/medical/morgue) +"szj" = ( +/obj/structure/railing/corner/end/flip{ + dir = 8 + }, +/turf/open/floor/iron/stairs/old{ + dir = 8 + }, +/area/station/hallway/primary/starboard) "szo" = ( /obj/machinery/door/firedoor, /obj/structure/cable, @@ -60895,6 +62248,13 @@ /obj/effect/mapping_helpers/airlock/access/all/engineering/general, /turf/open/floor/engine, /area/station/engineering/supermatter/room) +"szt" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/neutral/half/contrasted, +/obj/structure/sign/clock/directional/south, +/turf/open/floor/iron, +/area/station/commons/fitness) "szu" = ( /obj/structure/sign/poster/official/obey/directional/north, /obj/effect/decal/cleanable/dirt, @@ -60919,6 +62279,14 @@ /obj/structure/sign/warning/cold_temp/directional/north, /turf/open/floor/iron/smooth, /area/station/cargo/warehouse) +"szK" = ( +/obj/machinery/power/apc/auto_name/directional/east, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/duct, +/turf/open/floor/iron/freezer, +/area/station/commons/toilet) "szR" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -60943,15 +62311,6 @@ }, /turf/open/floor/iron, /area/mine/eva/lower) -"sAc" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 5 - }, -/turf/open/floor/plating, -/area/station/maintenance/department/crew_quarters/bar) "sAj" = ( /obj/machinery/photocopier, /obj/effect/turf_decal/tile/red/half/contrasted{ @@ -61046,6 +62405,14 @@ }, /turf/open/floor/iron/white/corner, /area/station/hallway/secondary/exit/departure_lounge) +"sBY" = ( +/obj/structure/table/wood, +/obj/effect/turf_decal/tile/bar/opposingcorners, +/obj/effect/spawner/random/trash/crushed_can{ + pixel_y = 10 + }, +/turf/open/floor/iron, +/area/station/service/bar) "sCa" = ( /obj/effect/turf_decal/siding/wideplating/dark{ dir = 5 @@ -61104,6 +62471,11 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/engineering/atmos/hfr_room) +"sCX" = ( +/obj/effect/turf_decal/siding/wood/corner, +/obj/machinery/newscaster/directional/west, +/turf/open/floor/stone, +/area/station/service/bar/atrium) "sCZ" = ( /turf/open/floor/iron/dark, /area/station/service/hydroponics) @@ -61128,13 +62500,14 @@ /obj/machinery/light/small/dim/directional/north, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) -"sDs" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 +"sDM" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 }, -/obj/structure/cable/multilayer/multiz, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/spawner/random/trash/grille_or_waste, /turf/open/floor/plating, -/area/station/maintenance/starboard/lesser) +/area/station/maintenance/starboard/fore) "sDQ" = ( /obj/item/radio/intercom/prison/directional/north, /obj/effect/turf_decal/tile/red/half/contrasted{ @@ -61174,19 +62547,16 @@ }, /turf/open/floor/wood, /area/station/command/meeting_room) -"sEp" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment, -/turf/open/floor/plating, -/area/station/maintenance/department/crew_quarters/bar) "sEq" = ( /obj/effect/spawner/structure/window/hollow/reinforced/end{ dir = 8 }, /turf/open/floor/plating, /area/mine/living_quarters) +"sEv" = ( +/obj/item/flashlight/lantern/on, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/explored) "sEz" = ( /obj/structure/disposalpipe/segment{ dir = 5 @@ -61216,13 +62586,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/starboard/upper) -"sEE" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/junction{ - dir = 2 - }, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) "sEF" = ( /obj/machinery/computer/atmos_control/plasma_tank{ dir = 8 @@ -61235,6 +62598,11 @@ }, /turf/open/floor/iron, /area/station/engineering/atmos) +"sEI" = ( +/obj/machinery/light/small/dim/directional/north, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/medical/morgue) "sEK" = ( /obj/structure/table/glass, /obj/item/stack/medical/gauze{ @@ -61344,17 +62712,25 @@ }, /turf/open/floor/iron/dark, /area/station/medical/morgue) -"sGi" = ( -/obj/structure/window/reinforced/spawner/directional/east, -/obj/structure/table/wood, -/obj/item/food/pie/cream, -/turf/open/floor/carpet, -/area/station/service/theater) "sGk" = ( /obj/effect/turf_decal/trimline/yellow/filled/line, /obj/structure/sign/poster/random/directional/south, /turf/open/floor/iron/white, /area/station/medical/chemistry) +"sGn" = ( +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/blue/filled/warning{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics) "sGp" = ( /obj/effect/turf_decal/tile/red{ dir = 4 @@ -61444,15 +62820,34 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/carpet, /area/station/service/chapel) +"sHi" = ( +/obj/effect/turf_decal/siding/dark{ + dir = 6 + }, +/turf/open/floor/iron/checker, +/area/station/hallway/secondary/service) "sHl" = ( /obj/machinery/vending/coffee, /obj/item/radio/intercom/directional/south, /turf/open/floor/stone, /area/mine/eva/lower) -"sHB" = ( -/obj/effect/turf_decal/tile/red/full, -/turf/open/floor/iron/large, -/area/station/service/kitchen/diner) +"sHs" = ( +/obj/effect/turf_decal/tile/neutral/diagonal_edge, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/duct, +/turf/open/floor/iron/kitchen/diagonal, +/area/station/service/kitchen) +"sHy" = ( +/obj/structure/table, +/obj/machinery/cell_charger, +/obj/item/stock_parts/power_store/cell/high, +/obj/machinery/requests_console/auto_name/directional/north, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/commons/storage/primary) "sHC" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -61505,18 +62900,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central) -"sIh" = ( -/obj/structure/window/reinforced/spawner/directional/west, -/obj/effect/turf_decal/siding/thinplating/dark{ - dir = 8 - }, -/obj/structure/flora/bush/flowers_yw/style_random, -/turf/open/floor/grass, -/area/station/service/hydroponics) -"sIm" = ( -/obj/machinery/hydroponics/soil, -/turf/open/floor/grass, -/area/station/service/hydroponics) "sIp" = ( /obj/structure/closet/radiation, /obj/effect/turf_decal/tile/yellow/half/contrasted{ @@ -61566,26 +62949,31 @@ /obj/structure/cable, /turf/open/floor/plating, /area/mine/storage) +"sIX" = ( +/obj/effect/mapping_helpers/airlock/access/all/service/hydroponics, +/obj/machinery/door/airlock/hydroponics/glass{ + name = "Garden" + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 1 + }, +/turf/open/floor/iron/textured, +/area/station/service/hydroponics) "sJe" = ( /obj/machinery/deepfryer, /obj/machinery/light/warm/directional/north, /turf/open/floor/iron/cafeteria, /area/station/security/prison/mess) +"sJg" = ( +/obj/effect/turf_decal/siding/white{ + dir = 4 + }, +/turf/open/floor/iron/white/smooth_large, +/area/station/service/kitchen) "sJi" = ( /obj/machinery/vending/donksofttoyvendor, /turf/open/floor/iron/dark/textured, /area/station/security/prison/safe) -"sJk" = ( -/obj/structure/cable, -/obj/machinery/camera/directional/west{ - c_tag = "Dormitory South" - }, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 8 - }, -/obj/machinery/light/directional/west, -/turf/open/floor/iron, -/area/station/commons/dorms) "sJn" = ( /obj/structure/closet/emcloset, /obj/structure/sign/warning/gas_mask/directional/west, @@ -61619,6 +63007,21 @@ }, /turf/open/floor/plating/icemoon, /area/station/security/execution/education) +"sJu" = ( +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/spawner/random/trash/cigbutt, +/obj/effect/spawner/random/trash/graffiti{ + pixel_y = 32 + }, +/obj/effect/mapping_helpers/burnt_floor, +/obj/machinery/light/small/dim/directional/north, +/turf/open/floor/plating, +/area/station/maintenance/starboard/lesser) "sJA" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -61688,17 +63091,6 @@ /obj/machinery/airalarm/directional/west, /turf/open/floor/wood, /area/station/command/meeting_room) -"sKV" = ( -/obj/machinery/computer/security/telescreen{ - name = "Test Chamber Monitor"; - network = list("xeno"); - pixel_y = 26 - }, -/obj/machinery/light/small/directional/north, -/turf/open/floor/iron/white/side{ - dir = 1 - }, -/area/station/command/heads_quarters/rd) "sKW" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 4 @@ -61725,6 +63117,25 @@ }, /turf/open/floor/iron/dark/corner, /area/station/security/processing) +"sLm" = ( +/obj/structure/chair/sofa/left/brown{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 1 + }, +/turf/open/floor/wood/large, +/area/station/commons/lounge) +"sLy" = ( +/obj/structure/table, +/obj/item/reagent_containers/cup/bowl{ + pixel_y = 5 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) "sLD" = ( /obj/structure/table/reinforced, /obj/item/stack/sheet/iron/fifty, @@ -61903,6 +63314,11 @@ }, /turf/open/floor/iron, /area/station/cargo/office) +"sON" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "sOO" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, @@ -61913,6 +63329,12 @@ /obj/item/kitchen/fork/plastic, /turf/open/floor/iron, /area/station/security/prison/mess) +"sOX" = ( +/obj/machinery/light/small/directional/west, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/power/port_gen/pacman, +/turf/open/floor/iron/smooth, +/area/station/maintenance/starboard/lesser) "sOY" = ( /obj/structure/table/glass, /obj/item/hemostat, @@ -61951,6 +63373,13 @@ }, /turf/open/floor/iron/showroomfloor, /area/station/security/warden) +"sPS" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/machinery/firealarm/directional/west, +/turf/open/floor/stone, +/area/station/service/bar/atrium) "sPV" = ( /obj/machinery/door/airlock/atmos/glass, /obj/machinery/door/firedoor/heavy, @@ -61999,6 +63428,25 @@ /obj/item/radio/intercom/directional/west, /turf/open/floor/iron, /area/station/hallway/primary/starboard) +"sRc" = ( +/obj/structure/window/reinforced/spawner/directional/south, +/obj/structure/window/reinforced/spawner/directional/west, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/obj/effect/turf_decal/siding/white{ + dir = 10 + }, +/turf/open/floor/iron/dark, +/area/station/commons/fitness) +"sRf" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/machinery/power/apc/auto_name/directional/south, +/obj/structure/cable, +/turf/open/floor/wood/parquet, +/area/station/service/theater) "sRp" = ( /obj/structure/fence, /obj/effect/turf_decal/weather/snow/corner{ @@ -62030,14 +63478,6 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/hallway/primary/central) -"sSh" = ( -/obj/effect/turf_decal/siding/white{ - dir = 6 - }, -/obj/item/kirbyplants/random, -/obj/effect/turf_decal/tile/red/full, -/turf/open/floor/iron/large, -/area/station/service/kitchen/diner) "sSj" = ( /obj/machinery/light/small/directional/south, /obj/structure/chair/sofa/left/brown{ @@ -62217,13 +63657,6 @@ /obj/structure/cable, /turf/open/floor/plating/snowed/icemoon, /area/icemoon/surface/outdoors/nospawn) -"sUO" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/structure/disposalpipe/junction/flip, -/turf/open/floor/iron, -/area/station/hallway/secondary/service) "sUS" = ( /obj/structure/table/wood, /obj/effect/mapping_helpers/broken_floor, @@ -62312,13 +63745,15 @@ /obj/effect/mapping_helpers/airlock/access/all/supply/mining_station, /turf/open/floor/iron/textured_half, /area/mine/production) -"sWC" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +"sWS" = ( +/obj/structure/railing, +/obj/effect/turf_decal/siding/white, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/machinery/duct, -/turf/open/floor/iron, -/area/station/service/theater) +/obj/structure/curtain/cloth/fancy/mechanical/start_closed{ + id = "cantena_curtains" + }, +/turf/open/floor/wood, +/area/station/commons/lounge) "sWU" = ( /obj/structure/chair/stool/directional/south, /turf/open/floor/iron, @@ -62344,27 +63779,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/fore/lesser) -"sXf" = ( -/obj/structure/window/reinforced/spawner/directional/north{ - layer = 2.9 - }, -/obj/structure/table/reinforced, -/obj/item/stack/wrapping_paper{ - pixel_x = 3; - pixel_y = 4 - }, -/obj/item/stack/package_wrap{ - pixel_x = -1; - pixel_y = -1 - }, -/obj/item/dest_tagger, -/obj/effect/turf_decal/tile/brown/half/contrasted{ - dir = 1 - }, -/obj/machinery/power/apc/auto_name/directional/east, -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/cargo/sorting) "sXk" = ( /obj/effect/mapping_helpers/broken_floor, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, @@ -62411,11 +63825,15 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/engineering/atmos/mix) -"sYb" = ( -/obj/structure/cable, -/obj/effect/turf_decal/tile/neutral/anticorner/contrasted, -/turf/open/floor/iron, -/area/station/commons/dorms) +"sXU" = ( +/obj/structure/table/wood/poker, +/obj/item/toy/cards/deck{ + pixel_y = 13; + pixel_x = 6 + }, +/obj/effect/spawner/random/entertainment/cigarette, +/turf/open/floor/wood/large, +/area/station/commons/lounge) "sYe" = ( /obj/structure/table/wood, /obj/item/clothing/under/suit/red, @@ -62575,16 +63993,35 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/engineering/atmos/pumproom) +"tbd" = ( +/obj/item/radio/intercom/directional/south, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/duct, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark/smooth_half, +/area/station/service/hydroponics) "tbh" = ( /turf/open/floor/iron/half{ dir = 1 }, /area/station/engineering/atmos) -"tbv" = ( -/obj/structure/window/reinforced/spawner/directional/north, -/obj/structure/flora/bush/sunny/style_random, -/turf/open/floor/grass, -/area/station/service/hydroponics) +"tbE" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners, +/obj/effect/landmark/start/bartender, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/duct, +/turf/open/floor/iron, +/area/station/service/bar) +"tbK" = ( +/obj/effect/spawner/random/trash/grille_or_waste, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "tbN" = ( /obj/effect/mapping_helpers/airlock/access/any/supply/maintenance, /obj/machinery/door/airlock/engineering{ @@ -62699,6 +64136,15 @@ /obj/structure/cable, /turf/open/floor/iron/dark, /area/station/service/chapel) +"tec" = ( +/obj/effect/spawner/structure/window, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 8; + id = "botany_apiary"; + name = "Apiary Shutters" + }, +/turf/open/floor/plating, +/area/station/service/hydroponics) "ted" = ( /obj/machinery/holopad, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -62708,10 +64154,6 @@ }, /turf/open/floor/iron/white, /area/station/medical/medbay/central) -"tef" = ( -/obj/machinery/space_heater, -/turf/open/floor/plating, -/area/station/maintenance/fore) "tei" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /turf/open/floor/carpet/red, @@ -62720,6 +64162,13 @@ /obj/structure/fence, /turf/open/floor/plating/snowed/smoothed/icemoon, /area/icemoon/underground/explored) +"tes" = ( +/obj/effect/spawner/random/trash/graffiti{ + pixel_y = -30 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/starboard/lesser) "teE" = ( /obj/effect/spawner/structure/window, /obj/machinery/door/poddoor/shutters{ @@ -62740,12 +64189,6 @@ dir = 4 }, /area/station/security/brig/entrance) -"teR" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/service/theater) "teZ" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -62916,6 +64359,20 @@ dir = 10 }, /area/station/science/lab) +"tie" = ( +/obj/structure/rack, +/obj/item/clothing/suit/utility/beekeeper_suit, +/obj/item/clothing/head/utility/beekeeper_head, +/obj/item/melee/flyswatter, +/obj/effect/turf_decal/trimline/green/filled/corner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/blue/filled/warning/corner{ + dir = 4 + }, +/obj/machinery/firealarm/directional/north, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics) "til" = ( /obj/item/radio/intercom/directional/west, /obj/effect/decal/cleanable/dirt, @@ -62926,6 +64383,22 @@ dir = 8 }, /area/mine/eva) +"tip" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/public/glass{ + name = "Fitness" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/stripes/white/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/white/line{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark/textured, +/area/station/commons/fitness) "tis" = ( /obj/structure/window/reinforced/fulltile, /obj/structure/transit_tube/horizontal, @@ -62935,22 +64408,12 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/department/chapel) -"tiF" = ( -/obj/structure/chair/stool/directional/west, -/turf/open/floor/carpet, -/area/station/service/theater) "tiV" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 }, /turf/open/floor/iron, /area/station/service/chapel) -"tiX" = ( -/obj/effect/turf_decal/siding/wood, -/obj/structure/cable, -/obj/effect/landmark/event_spawn, -/turf/open/floor/iron, -/area/station/service/theater) "tiY" = ( /obj/machinery/light/small/directional/west, /obj/effect/turf_decal/weather/snow/corner{ @@ -62990,6 +64453,10 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/starboard/lesser) +"tjA" = ( +/obj/machinery/smartfridge, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics) "tjC" = ( /obj/machinery/airalarm/directional/south, /obj/effect/turf_decal/tile/red/half/contrasted, @@ -63033,10 +64500,6 @@ }, /turf/open/floor/iron/white, /area/station/medical/treatment_center) -"tki" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/hallway/secondary/service) "tku" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/tile/neutral/fourcorners, @@ -63067,14 +64530,16 @@ "tkU" = ( /turf/open/lava/plasma/ice_moon, /area/icemoon/surface/outdoors/nospawn) -"tkV" = ( -/obj/structure/window/reinforced/spawner/directional/south, -/obj/structure/window/reinforced/spawner/directional/west, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ +"tkY" = ( +/obj/structure/cable, +/obj/effect/turf_decal/weather/snow/corner{ dir = 4 }, -/turf/open/floor/iron/dark, -/area/station/commons/fitness) +/obj/structure/minecart_rail{ + dir = 1 + }, +/turf/open/floor/plating/snowed/coldroom, +/area/station/service/kitchen/coldroom) "tlh" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -63097,12 +64562,6 @@ }, /turf/open/floor/iron/dark/smooth_large, /area/station/ai_monitored/command/storage/eva) -"tlr" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/turf/open/floor/plating, -/area/station/maintenance/starboard/lesser) "tlA" = ( /obj/machinery/light/small/directional/south, /obj/item/radio/intercom/directional/south, @@ -63112,15 +64571,6 @@ "tlE" = ( /turf/open/floor/glass/reinforced/icemoon, /area/icemoon/surface/outdoors/nospawn) -"tlF" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 9 - }, -/turf/open/floor/plating, -/area/station/maintenance/starboard/lesser) "tlH" = ( /turf/open/openspace/icemoon, /area/icemoon/surface/outdoors/nospawn) @@ -63164,6 +64614,10 @@ }, /turf/open/floor/iron/dark/textured, /area/station/hallway/secondary/entry) +"tmb" = ( +/obj/structure/stairs/west, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics) "tml" = ( /obj/structure/grille, /turf/open/floor/plating, @@ -63244,17 +64698,17 @@ /obj/effect/turf_decal/tile/blue, /turf/open/floor/iron, /area/station/hallway/primary/fore) -"tnB" = ( -/obj/machinery/door/airlock{ - name = "Theater Backstage" +"tnz" = ( +/obj/structure/table, +/obj/item/plate, +/obj/item/food/piedough, +/obj/effect/spawner/random/food_or_drink/cake_ingredients, +/obj/effect/turf_decal/siding/white{ + dir = 9 }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/machinery/duct, -/obj/effect/mapping_helpers/airlock/access/all/service/theatre, -/turf/open/floor/plating, -/area/station/maintenance/department/crew_quarters/bar) +/obj/item/kitchen/rollingpin, +/turf/open/floor/iron/white/smooth_large, +/area/station/service/kitchen) "tnI" = ( /obj/effect/turf_decal/trimline/dark_blue/line{ dir = 10 @@ -63262,6 +64716,14 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/engineering/atmos/mix) +"tnJ" = ( +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 4 + }, +/obj/machinery/duct, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics) "tnO" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, @@ -63297,21 +64759,17 @@ /obj/machinery/shower/directional/west, /turf/open/floor/iron/white, /area/station/medical/virology) -"toH" = ( -/obj/structure/railing{ - dir = 8 - }, -/obj/machinery/door/firedoor/border_only{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue{ +"toT" = ( +/obj/machinery/door/firedoor, +/obj/structure/disposalpipe/segment, +/obj/machinery/status_display/evac/directional/west, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/stripes/white/line, +/obj/effect/turf_decal/stripes/white/line{ dir = 1 }, -/obj/effect/turf_decal/tile/green{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/service/hydroponics) +/turf/open/floor/iron/dark/textured, +/area/station/hallway/primary/central) "toV" = ( /obj/structure/table, /obj/item/stock_parts/subspace/ansible, @@ -63378,6 +64836,14 @@ /obj/structure/window/reinforced/spawner/directional/south, /turf/open/floor/iron/white/textured, /area/station/security/medical) +"tpZ" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/sign/poster/contraband/random/directional/north, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "tqk" = ( /obj/structure/table, /obj/item/paper_bin{ @@ -63388,6 +64854,22 @@ /obj/item/key/janitor, /turf/open/floor/iron, /area/station/service/janitor) +"tqn" = ( +/obj/machinery/atmospherics/components/binary/pump/on{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/layer_manifold/scrubbers/hidden{ + dir = 8 + }, +/turf/open/floor/engine, +/area/station/science/ordnance/burnchamber) +"tqr" = ( +/obj/effect/turf_decal/trimline/green/filled/line, +/obj/effect/turf_decal/trimline/blue/filled/warning, +/obj/machinery/hydroponics/constructable, +/obj/machinery/status_display/ai/directional/south, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics) "tqQ" = ( /obj/effect/turf_decal/stripes/corner{ dir = 1 @@ -63400,21 +64882,6 @@ }, /turf/open/floor/plating/snowed/icemoon, /area/icemoon/surface/outdoors/nospawn) -"tqZ" = ( -/obj/machinery/door/firedoor, -/obj/machinery/biogenerator, -/turf/open/floor/iron, -/area/station/service/hydroponics) -"trb" = ( -/obj/structure/table, -/obj/machinery/computer/security/telescreen{ - dir = 8; - name = "Test Chamber Monitor"; - network = list("test") - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/station/science/explab) "trc" = ( /obj/machinery/conveyor{ dir = 4; @@ -63423,13 +64890,19 @@ /obj/effect/turf_decal/stripes/line, /turf/open/floor/plating, /area/station/maintenance/disposal) -"trl" = ( -/obj/effect/landmark/start/hangover, -/turf/open/floor/iron/white/smooth_large, -/area/station/service/kitchen/diner) "trm" = ( /turf/open/floor/plating, /area/station/science/ordnance/testlab) +"trn" = ( +/obj/structure/table, +/obj/item/stock_parts/power_store/cell/high, +/obj/machinery/cell_charger{ + pixel_y = 5 + }, +/turf/open/floor/iron/white/corner{ + dir = 4 + }, +/area/station/science/explab) "tru" = ( /obj/structure/chair/pew/left{ dir = 1 @@ -63480,6 +64953,16 @@ /obj/machinery/rnd/server/master, /turf/open/openspace/icemoon, /area/station/science/server) +"tsu" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/machinery/light/floor, +/turf/open/floor/stone, +/area/station/service/bar/atrium) "tsH" = ( /obj/machinery/door/airlock/security/glass{ name = "Interrogation" @@ -63516,7 +64999,6 @@ /turf/open/floor/iron/dark, /area/station/commons/storage/mining) "tsR" = ( -/obj/structure/cable, /obj/structure/chair/stool/directional/south, /obj/effect/decal/cleanable/oil/slippery, /turf/open/floor/plating, @@ -63532,6 +65014,14 @@ /obj/machinery/door/airlock/freezer, /turf/open/floor/iron/showroomfloor, /area/station/security/prison/mess) +"tts" = ( +/obj/item/chair/wood, +/obj/item/toy/plush/moth{ + name = "Ariadne" + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "ttv" = ( /obj/structure/sign/painting/library{ pixel_y = 32 @@ -63610,13 +65100,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/port/aft) -"tux" = ( -/obj/structure/railing/corner, -/obj/machinery/door/firedoor/border_only{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/hallway/secondary/service) "tuz" = ( /obj/structure/cable, /obj/structure/table, @@ -63691,11 +65174,6 @@ dir = 1 }, /area/station/engineering/engine_smes) -"tvI" = ( -/obj/structure/chair/sofa/corp/right, -/obj/machinery/light/directional/north, -/turf/open/floor/wood, -/area/station/hallway/secondary/service) "tvJ" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -63774,6 +65252,17 @@ /obj/structure/cable, /turf/open/floor/iron/showroomfloor, /area/station/security/warden) +"twS" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/door/airlock/freezer{ + desc = "The freezer where the chef keeps all the stuff that needs to be kept cold. Ice cold."; + name = "The Ice Box" + }, +/obj/effect/mapping_helpers/airlock/access/all/service/kitchen, +/turf/open/floor/plating, +/area/station/service/kitchen/coldroom) "twU" = ( /obj/effect/landmark/start/hangover, /turf/open/floor/iron/freezer, @@ -63785,16 +65274,6 @@ }, /turf/open/floor/iron/dark, /area/mine/laborcamp) -"twX" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/sorting/mail/flip{ - dir = 8 - }, -/obj/effect/mapping_helpers/mail_sorting/service/kitchen, -/turf/open/floor/plating, -/area/station/maintenance/department/crew_quarters/bar) "twZ" = ( /obj/structure/table, /obj/effect/spawner/random/maintenance, @@ -63842,6 +65321,17 @@ /obj/machinery/firealarm/directional/south, /turf/open/floor/plating, /area/station/medical/treatment_center) +"txv" = ( +/obj/effect/turf_decal/siding/white{ + dir = 1 + }, +/obj/effect/turf_decal/tile/green/opposingcorners{ + dir = 1 + }, +/obj/effect/turf_decal/tile/blue/opposingcorners, +/obj/machinery/vending/hydronutrients, +/turf/open/floor/iron, +/area/station/service/hydroponics) "txE" = ( /obj/item/cigbutt, /obj/effect/decal/cleanable/dirt, @@ -63873,18 +65363,6 @@ /obj/machinery/light/floor, /turf/open/floor/carpet, /area/station/service/chapel) -"tyj" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 8 - }, -/obj/structure/chair/sofa/left/brown{ - desc = "Hey, did you know you can get a pineapple on your burger here?"; - dir = 1; - name = "The Regular's Sofa" - }, -/obj/machinery/barsign/all_access/directional/south, -/turf/open/floor/stone, -/area/station/commons/lounge) "tyl" = ( /obj/structure/ladder, /obj/machinery/light/small/directional/north, @@ -63912,10 +65390,6 @@ }, /turf/open/floor/glass/reinforced, /area/station/engineering/atmos/pumproom) -"tza" = ( -/obj/structure/sink/directional/east, -/turf/open/floor/iron, -/area/station/hallway/secondary/service) "tzf" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -63950,18 +65424,6 @@ /obj/machinery/light/small/directional/west, /turf/open/floor/wood, /area/station/commons/vacant_room/office) -"tAe" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 1 - }, -/obj/machinery/chem_dispenser/drinks{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/duct, -/obj/structure/table/wood, -/turf/open/floor/stone, -/area/station/service/bar) "tAg" = ( /obj/effect/turf_decal/trimline/green/filled/corner{ dir = 1 @@ -63978,6 +65440,11 @@ /obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, /turf/open/floor/plating, /area/station/commons/storage/mining) +"tAt" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/fore) "tAx" = ( /obj/effect/turf_decal/trimline/blue/filled/warning, /obj/structure/disposalpipe/segment, @@ -63990,6 +65457,15 @@ dir = 4 }, /area/station/service/chapel) +"tAK" = ( +/obj/machinery/computer/security/telescreen/interrogation/directional/north, +/obj/effect/turf_decal/tile/red/anticorner/contrasted{ + dir = 4 + }, +/turf/open/floor/iron/dark/corner{ + dir = 8 + }, +/area/station/security/processing) "tAL" = ( /obj/structure/table, /obj/machinery/light/small/directional/south, @@ -64023,11 +65499,6 @@ /obj/effect/turf_decal/tile/red/half/contrasted, /turf/open/floor/iron, /area/station/engineering/atmos) -"tBN" = ( -/obj/structure/table, -/obj/machinery/light/small/directional/west, -/turf/open/floor/iron/smooth, -/area/station/maintenance/starboard/fore) "tBP" = ( /obj/machinery/light/small/directional/west, /obj/structure/sign/warning/secure_area/directional/west, @@ -64073,12 +65544,6 @@ /obj/structure/grille, /turf/open/misc/asteroid/snow/icemoon, /area/icemoon/surface/outdoors/nospawn) -"tCs" = ( -/obj/structure/table, -/obj/item/book/manual/hydroponics_pod_people, -/obj/item/watertank, -/turf/open/floor/iron, -/area/station/service/hydroponics) "tCu" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/decal/cleanable/dirt, @@ -64107,6 +65572,13 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/engineering/atmos/mix) +"tCG" = ( +/obj/effect/turf_decal/loading_area{ + dir = 1 + }, +/obj/effect/turf_decal/tile/purple, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) "tCL" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -64127,14 +65599,6 @@ }, /turf/open/floor/plating, /area/station/security/interrogation) -"tCT" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 9 - }, -/obj/structure/table/wood, -/obj/effect/turf_decal/tile/bar/opposingcorners, -/turf/open/floor/iron, -/area/station/service/bar) "tCV" = ( /obj/machinery/camera/directional/west{ c_tag = "Security - Permabrig Observation Prep"; @@ -64182,13 +65646,6 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/security/brig/upper) -"tDv" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 4 - }, -/obj/structure/sign/poster/official/random/directional/north, -/turf/open/floor/wood, -/area/station/hallway/secondary/service) "tDw" = ( /obj/machinery/suit_storage_unit/hos, /obj/structure/reagent_dispensers/wall/peppertank/directional/west, @@ -64246,16 +65703,6 @@ /obj/effect/turf_decal/tile/blue/half/contrasted, /turf/open/floor/iron, /area/station/hallway/primary/central) -"tEf" = ( -/obj/effect/turf_decal/siding/thinplating/dark{ - dir = 8 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/landmark/event_spawn, -/turf/open/floor/carpet, -/area/station/service/theater) "tEi" = ( /obj/structure/sink/directional/south, /turf/open/floor/iron, @@ -64270,6 +65717,32 @@ }, /turf/open/floor/plating, /area/station/cargo/storage) +"tEn" = ( +/obj/machinery/cell_charger, +/obj/item/stock_parts/power_store/cell/high, +/obj/item/radio/intercom/directional/north, +/obj/structure/table/reinforced, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/command/storage/eva) +"tEs" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/public/glass{ + name = "Holodeck Door" + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "holodeck" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/iron/textured, +/area/station/commons/fitness) "tEu" = ( /obj/structure/table, /obj/item/hand_labeler, @@ -64331,13 +65804,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/ai) -"tFf" = ( -/obj/structure/chair/plastic{ - dir = 0 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/maintenance/starboard/fore) "tFs" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, @@ -64356,6 +65822,10 @@ /obj/machinery/firealarm/directional/north, /turf/open/floor/iron, /area/station/hallway/primary/central) +"tFx" = ( +/obj/machinery/igniter/incinerator_ordmix, +/turf/open/floor/engine/vacuum, +/area/station/science/ordnance/burnchamber) "tFF" = ( /obj/structure/disposalpipe/sorting/mail{ dir = 8 @@ -64433,9 +65903,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/mine/laborcamp) -"tGZ" = ( -/turf/open/floor/iron, -/area/station/hallway/secondary/service) "tHe" = ( /obj/structure/bodycontainer/morgue{ dir = 8 @@ -64474,6 +65941,13 @@ dir = 8 }, /area/station/hallway/secondary/entry) +"tHF" = ( +/obj/structure/sign/nanotrasen, +/obj/structure/fence/post{ + dir = 8 + }, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/explored) "tHK" = ( /obj/structure/window/reinforced/spawner/directional/west, /obj/structure/railing{ @@ -64564,6 +66038,13 @@ /obj/machinery/status_display/evac/directional/south, /turf/open/floor/iron/dark, /area/station/service/chapel) +"tIL" = ( +/obj/structure/table, +/obj/machinery/light/small/directional/west, +/obj/structure/disposalpipe/segment, +/obj/effect/spawner/random/engineering/material_cheap, +/turf/open/floor/iron/smooth, +/area/station/maintenance/starboard/fore) "tIS" = ( /obj/effect/turf_decal/trimline/red/filled/line{ dir = 6 @@ -64581,13 +66062,6 @@ /obj/effect/spawner/random/structure/steam_vent, /turf/open/floor/plating, /area/station/maintenance/starboard/upper) -"tJb" = ( -/obj/effect/turf_decal/siding/thinplating{ - dir = 4 - }, -/obj/machinery/light/small/directional/north, -/turf/open/floor/plating/snowed/smoothed/icemoon, -/area/icemoon/underground/explored) "tJi" = ( /obj/structure/bookcase{ name = "Holy Bookcase" @@ -64655,11 +66129,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark/smooth_half, /area/station/security/office) -"tJP" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/plating, -/area/station/maintenance/solars/starboard/fore) "tJR" = ( /obj/structure/rack, /obj/item/tank/internals/oxygen, @@ -64678,6 +66147,19 @@ dir = 4 }, /area/station/medical/chem_storage) +"tJZ" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/effect/landmark/event_spawn, +/obj/effect/turf_decal/stripes/white/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/white/line, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark/textured, +/area/station/hallway/primary/fore) "tKf" = ( /obj/structure/closet, /obj/machinery/light/small/directional/north, @@ -64859,6 +66341,15 @@ /obj/effect/spawner/random/maintenance, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) +"tNb" = ( +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/obj/structure/railing/corner/end/flip{ + dir = 8 + }, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "tNd" = ( /obj/effect/spawner/random/engineering/tracking_beacon, /obj/effect/turf_decal/siding/green{ @@ -64891,22 +66382,6 @@ /obj/machinery/light/floor, /turf/open/floor/engine, /area/station/engineering/supermatter/room) -"tNA" = ( -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 8 - }, -/obj/machinery/door/airlock/external{ - glass = 1; - name = "Chapel Maintenance External Airlock"; - opacity = 0 - }, -/obj/structure/sign/warning/cold_temp/directional/north, -/obj/structure/sign/warning/gas_mask/directional/south{ - desc = "A sign that warns of dangerous gasses in the air, instructing you to wear internals." - }, -/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, -/turf/open/floor/plating, -/area/station/maintenance/department/chapel) "tND" = ( /obj/effect/turf_decal/stripes/asteroid/corner{ dir = 4 @@ -64918,15 +66393,32 @@ dir = 10 }, /area/mine/living_quarters) +"tNH" = ( +/obj/structure/railing, +/obj/effect/turf_decal/siding/thinplating_new/light{ + dir = 6 + }, +/turf/open/floor/wood/large, +/area/station/hallway/primary/starboard) "tNJ" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/aft/lesser) +"tNN" = ( +/obj/structure/flora/tree/pine/style_random, +/obj/structure/marker_beacon/cerulean, +/obj/effect/mapping_helpers/no_atoms_ontop, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/surface/outdoors/unexplored/rivers/no_monsters) "tNY" = ( /obj/machinery/door/firedoor, /turf/open/floor/iron, /area/station/cargo/lobby) +"tOe" = ( +/obj/effect/spawner/random/structure/closet_maintenance, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "tOf" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/cable, @@ -64965,6 +66457,11 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/engineering/atmos/mix) +"tOC" = ( +/obj/effect/spawner/random/trash/hobo_squat, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/starboard/lesser) "tOF" = ( /obj/structure/chair/comfy/black{ dir = 8 @@ -64995,6 +66492,28 @@ /obj/item/trash/energybar, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) +"tPx" = ( +/obj/structure/table, +/obj/item/multitool/circuit{ + pixel_x = -8 + }, +/obj/item/multitool/circuit{ + pixel_x = -4 + }, +/obj/item/multitool/circuit, +/obj/item/stock_parts/power_store/cell/high{ + pixel_x = 8; + pixel_y = 9 + }, +/obj/item/stock_parts/power_store/cell/high{ + pixel_x = 8; + pixel_y = -2 + }, +/obj/item/radio/intercom/directional/west, +/turf/open/floor/iron/white/side{ + dir = 4 + }, +/area/station/science/explab) "tPz" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/white/side{ @@ -65083,19 +66602,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/aft/lesser) -"tRA" = ( -/obj/machinery/door/airlock{ - name = "Bar" - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/mapping_helpers/airlock/access/all/service/bar, -/obj/structure/cable, -/turf/open/floor/plating, -/area/station/maintenance/starboard/lesser) "tRX" = ( /obj/machinery/atmospherics/components/unary/portables_connector/visible{ dir = 8 @@ -65109,6 +66615,15 @@ /obj/effect/turf_decal/siding/yellow, /turf/open/floor/iron, /area/station/engineering/atmos/storage/gas) +"tSd" = ( +/obj/machinery/door/airlock/external, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 8 + }, +/obj/effect/mapping_helpers/airlock/access/any/security/general, +/obj/effect/mapping_helpers/airlock/access/any/engineering/external, +/turf/open/floor/plating, +/area/station/maintenance/fore) "tSi" = ( /obj/machinery/suit_storage_unit/security, /turf/open/floor/iron/smooth, @@ -65141,6 +66656,13 @@ /obj/structure/sign/warning/no_smoking/directional/west, /turf/open/floor/iron/white, /area/station/medical/pharmacy) +"tSO" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/spawner/structure/window/reinforced/tinted, +/turf/open/floor/plating, +/area/station/maintenance/starboard/lesser) "tTc" = ( /obj/item/storage/bag/plants/portaseeder, /obj/structure/table/glass, @@ -65182,6 +66704,24 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/wood, /area/station/maintenance/space_hut/cabin) +"tUm" = ( +/obj/machinery/door/window/left/directional/west{ + req_one_access = list("bar", "kitchen"); + name = "Deliveries" + }, +/obj/effect/turf_decal/loading_area{ + dir = 8 + }, +/obj/effect/turf_decal/siding/white{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/textured, +/area/station/service/kitchen/coldroom) "tUn" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 8 @@ -65252,27 +66792,6 @@ /obj/effect/mapping_helpers/airlock/access/all/command/general, /turf/open/floor/iron, /area/station/command/bridge) -"tUS" = ( -/obj/structure/ladder{ - name = "Cold Room Access" - }, -/obj/machinery/door/window/left/directional/north{ - desc = "Get down to the Ice Box using this."; - name = "Freezer Access"; - req_access = list("kitchen") - }, -/obj/structure/window/reinforced/spawner/directional/west, -/obj/effect/turf_decal/stripes{ - dir = 1 - }, -/obj/effect/turf_decal/tile/dark_blue/diagonal_edge, -/obj/effect/turf_decal/stripes/white/line{ - dir = 1 - }, -/obj/structure/sign/warning/cold_temp/directional/south, -/obj/structure/sign/warning/gas_mask/directional/east, -/turf/open/floor/iron/kitchen/diagonal, -/area/station/service/kitchen) "tUV" = ( /obj/structure/railing{ dir = 8 @@ -65359,15 +66878,6 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/iron/dark, /area/mine/mechbay) -"tWD" = ( -/obj/machinery/microwave{ - desc = "Turn it on and you'll immediately get warmer! Warranty void if left in weather conditions."; - name = "Emergency Heating Appliance"; - pixel_y = 5 - }, -/obj/structure/table, -/turf/open/floor/plating/snowed/coldroom, -/area/station/service/kitchen/coldroom) "tWK" = ( /obj/structure/cable, /turf/open/floor/plating/snowed/icemoon, @@ -65383,6 +66893,16 @@ /obj/machinery/firealarm/directional/south, /turf/open/floor/iron, /area/station/security/prison/work) +"tWY" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/mapping_helpers/airlock/access/all/service/kitchen, +/obj/machinery/door/airlock/maintenance{ + name = "Kitchen Maintenance" + }, +/turf/open/floor/plating, +/area/station/service/kitchen/coldroom) "tWZ" = ( /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 1 @@ -65406,6 +66926,11 @@ }, /turf/open/floor/iron, /area/station/security/prison/garden) +"tXg" = ( +/obj/machinery/airalarm/directional/north, +/obj/machinery/light/directional/north, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) "tXh" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable, @@ -65511,6 +67036,16 @@ /obj/effect/turf_decal/trimline/blue/filled/line, /turf/open/floor/iron/white, /area/station/medical/medbay/central) +"tZo" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/stone, +/area/station/service/bar/atrium) "tZp" = ( /obj/structure/ladder, /turf/open/floor/plating/snowed/icemoon, @@ -65557,16 +67092,6 @@ /obj/effect/mapping_helpers/airlock/access/all/command/ai_upload, /turf/open/floor/iron/dark/textured_large, /area/station/ai_monitored/turret_protected/ai_upload) -"uac" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 5 - }, -/obj/machinery/disposal/bin, -/obj/structure/disposalpipe/trunk{ - dir = 1 - }, -/turf/open/floor/stone, -/area/station/commons/lounge) "uah" = ( /obj/machinery/light_switch/directional/west, /obj/structure/cable, @@ -65630,9 +67155,8 @@ }, /turf/open/floor/iron/dark, /area/station/security/checkpoint/science) -"ubd" = ( -/obj/machinery/light/small/directional/east, -/turf/open/floor/plating/snowed/smoothed/icemoon, +"ubi" = ( +/turf/open/misc/asteroid/snow/coldroom, /area/icemoon/underground/explored) "ubk" = ( /obj/structure/cable, @@ -65656,6 +67180,10 @@ }, /turf/open/floor/iron/textured, /area/station/security/brig) +"ubp" = ( +/obj/effect/spawner/random/structure/grille, +/turf/open/floor/plating, +/area/station/maintenance/starboard/lesser) "ubq" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /turf/open/floor/iron/white, @@ -65696,6 +67224,15 @@ /obj/effect/turf_decal/stripes/box, /turf/open/floor/iron/dark/textured_large, /area/station/medical/chemistry) +"ubK" = ( +/obj/machinery/computer/holodeck{ + dir = 4 + }, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/commons/fitness) "ubY" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -65740,6 +67277,28 @@ /obj/structure/sign/warning/electric_shock, /turf/closed/wall/r_wall, /area/station/engineering/supermatter) +"ucW" = ( +/obj/machinery/button/door/directional/east{ + id = "xenobio8"; + name = "Xenobio Pen 8 Blast DOors"; + req_access = list("xenobiology") + }, +/turf/open/floor/iron/white, +/area/station/science/xenobiology) +"udf" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/starboard/lesser) "udj" = ( /obj/effect/turf_decal/stripes/asteroid/line, /obj/structure/cable, @@ -65756,6 +67315,16 @@ /obj/effect/landmark/start/hangover/closet, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) +"udA" = ( +/obj/structure/training_machine, +/obj/item/target, +/obj/machinery/light/directional/south, +/obj/effect/turf_decal/tile/green/half/contrasted{ + dir = 4 + }, +/obj/item/radio/intercom/directional/south, +/turf/open/floor/iron, +/area/station/commons/fitness) "udK" = ( /obj/effect/turf_decal/trimline/yellow/filled/line{ dir = 1 @@ -65785,6 +67354,13 @@ dir = 1 }, /area/station/command/heads_quarters/rd) +"udR" = ( +/obj/structure/cable, +/obj/structure/minecart_rail{ + dir = 1 + }, +/turf/open/floor/plating/snowed/coldroom, +/area/station/service/kitchen/coldroom) "uee" = ( /obj/structure/cable, /turf/open/floor/iron, @@ -65797,6 +67373,14 @@ /obj/structure/cable, /turf/open/floor/plating/snowed/icemoon, /area/icemoon/surface/outdoors/nospawn) +"uek" = ( +/obj/structure/table, +/obj/machinery/cell_charger, +/obj/item/stock_parts/power_store/cell/potato{ + name = "\improper Beepsky's emergency battery" + }, +/turf/open/floor/plating, +/area/station/maintenance/fore) "uep" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -65965,10 +67549,6 @@ /obj/structure/cable, /turf/open/floor/iron/dark, /area/station/maintenance/disposal) -"uhk" = ( -/obj/structure/beebox, -/turf/open/floor/grass, -/area/station/service/hydroponics) "uhs" = ( /obj/structure/railing/corner, /obj/machinery/camera/directional/south{ @@ -66047,6 +67627,20 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/station/cargo/drone_bay) +"uil" = ( +/obj/effect/landmark/event_spawn, +/obj/machinery/duct, +/obj/effect/turf_decal/siding/dark{ + dir = 5 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/checker, +/area/station/hallway/secondary/service) "uin" = ( /obj/structure/sign/warning/fire/directional/south, /obj/effect/turf_decal/stripes/corner{ @@ -66058,6 +67652,12 @@ }, /turf/open/floor/iron, /area/station/engineering/atmos/storage) +"uiq" = ( +/obj/structure/table/wood, +/obj/machinery/chem_dispenser/drinks, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/station/service/bar) "uiv" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -66065,11 +67665,6 @@ /obj/machinery/light/small/directional/south, /turf/open/floor/plating, /area/station/maintenance/starboard/lesser) -"uiw" = ( -/obj/machinery/vending/wardrobe/hydro_wardrobe, -/obj/effect/turf_decal/siding/thinplating/dark, -/turf/open/floor/plating, -/area/station/service/hydroponics) "uiF" = ( /obj/structure/cable, /obj/effect/turf_decal/trimline/blue/filled/line{ @@ -66091,6 +67686,15 @@ /obj/structure/sign/warning/secure_area, /turf/closed/wall/r_wall, /area/station/ai_monitored/command/nuke_storage) +"uiV" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/wood/parquet, +/area/station/service/bar/backroom) "uja" = ( /turf/closed/wall, /area/station/commons/toilet) @@ -66100,10 +67704,6 @@ }, /turf/open/floor/wood, /area/station/maintenance/port/aft) -"ujp" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/general/visible, -/turf/open/floor/engine, -/area/station/science/xenobiology) "ujs" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -66132,10 +67732,6 @@ /obj/effect/decal/cleanable/plastic, /turf/open/floor/plating, /area/station/maintenance/port/lesser) -"ukf" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/general/visible, -/turf/open/floor/iron/dark, -/area/station/science/explab) "uko" = ( /obj/structure/chair/pew/left{ dir = 1 @@ -66155,6 +67751,13 @@ /obj/machinery/door/firedoor, /turf/open/floor/wood, /area/station/command/meeting_room) +"ukt" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/plating, +/area/station/maintenance/starboard/lesser) "ukv" = ( /obj/machinery/computer/exoscanner_control{ dir = 1 @@ -66165,19 +67768,6 @@ }, /turf/open/floor/iron/dark, /area/station/cargo/drone_bay) -"ukw" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/turf_decal/siding/white{ - dir = 4 - }, -/obj/structure/cable, -/obj/effect/turf_decal/tile/bar/opposingcorners, -/turf/open/floor/iron, -/area/station/service/bar) "ukz" = ( /obj/machinery/duct, /obj/structure/disposalpipe/segment{ @@ -66274,6 +67864,13 @@ /obj/structure/sign/warning/docking/directional/south, /turf/open/misc/asteroid/snow/icemoon, /area/icemoon/surface/outdoors/nospawn) +"umc" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/stone, +/area/station/service/bar/atrium) "uml" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -66287,15 +67884,6 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron/white, /area/station/medical/medbay/aft) -"umv" = ( -/obj/effect/turf_decal/siding/white{ - dir = 9 - }, -/obj/machinery/disposal/bin, -/obj/structure/disposalpipe/trunk, -/obj/effect/turf_decal/tile/red/full, -/turf/open/floor/iron/large, -/area/station/service/kitchen/diner) "umz" = ( /obj/effect/turf_decal/siding/yellow{ dir = 1 @@ -66327,17 +67915,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/cargo/lobby) -"umS" = ( -/obj/structure/extinguisher_cabinet/directional/east, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/siding/white{ - dir = 4 - }, -/obj/structure/cable, -/obj/effect/turf_decal/tile/bar/opposingcorners, -/obj/machinery/light/small/directional/east, -/turf/open/floor/iron, -/area/station/service/bar) "una" = ( /obj/machinery/door/window/left/directional/west, /obj/structure/cable, @@ -66444,13 +68021,6 @@ }, /turf/open/floor/iron/textured, /area/station/engineering/atmos) -"uoz" = ( -/obj/machinery/door/airlock/multi_tile/public/glass{ - name = "Hydroponics" - }, -/obj/effect/mapping_helpers/airlock/access/all/service/hydroponics, -/turf/open/floor/iron/textured_half, -/area/station/service/hydroponics) "uoB" = ( /obj/structure/disposalpipe/junction/yjunction{ dir = 1 @@ -66545,6 +68115,12 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/security/prison) +"upx" = ( +/obj/machinery/light_switch/directional/east, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/duct, +/turf/open/floor/iron/freezer, +/area/station/commons/toilet) "upH" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -66593,13 +68169,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/mine/eva/lower) -"uqB" = ( -/obj/effect/turf_decal/tile/neutral/diagonal_edge, -/obj/effect/turf_decal/tile/blue/diagonal_edge, -/obj/item/radio/intercom/directional/west, -/obj/machinery/vending/dinnerware, -/turf/open/floor/iron/kitchen/diagonal, -/area/station/service/kitchen) "uqG" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -66694,11 +68263,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central) -"usI" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/red/full, -/turf/open/floor/iron/large, -/area/station/service/kitchen/diner) "usP" = ( /turf/open/misc/asteroid/snow/standard_air, /area/station/science/research) @@ -66716,6 +68280,37 @@ dir = 10 }, /area/station/security/prison/safe) +"utn" = ( +/obj/effect/turf_decal/tile/blue/opposingcorners, +/obj/effect/turf_decal/tile/green/opposingcorners{ + dir = 1 + }, +/obj/structure/table/glass, +/obj/item/seeds/tower, +/obj/item/seeds/chanter{ + pixel_y = 3; + pixel_x = 3 + }, +/obj/item/seeds/watermelon{ + pixel_y = -6; + pixel_x = 3 + }, +/obj/item/seeds/apple{ + pixel_y = 4; + pixel_x = 2 + }, +/obj/item/seeds/banana, +/obj/item/seeds/rose{ + pixel_y = -3; + pixel_x = -4 + }, +/obj/structure/noticeboard/directional/west, +/obj/item/paper/guides/jobs/hydroponics{ + pixel_y = 3; + pixel_x = -27 + }, +/turf/open/floor/iron, +/area/station/service/hydroponics) "utr" = ( /obj/structure/table, /obj/item/storage/toolbox/mechanical{ @@ -66739,12 +68334,27 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, /turf/open/floor/engine, /area/station/engineering/supermatter/room) +"utG" = ( +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/wood/parquet, +/area/station/service/bar/backroom) "utR" = ( /obj/effect/turf_decal/tile/blue{ dir = 8 }, /turf/open/floor/iron, /area/station/hallway/primary/central) +"utW" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/plating, +/area/station/maintenance/fore) "uub" = ( /obj/machinery/atmospherics/components/binary/pump{ name = "Port to Fuel Pipe" @@ -66756,6 +68366,10 @@ /obj/effect/spawner/random/techstorage/tcomms_all, /turf/open/floor/plating, /area/station/engineering/storage/tech) +"uuh" = ( +/obj/structure/noticeboard/directional/north, +/turf/open/floor/iron, +/area/station/hallway/primary/central) "uum" = ( /obj/machinery/door/airlock/public/glass{ name = "Chapel" @@ -66842,6 +68456,14 @@ /obj/structure/cable, /turf/open/floor/circuit, /area/station/ai_monitored/turret_protected/aisat/hallway) +"uwd" = ( +/obj/effect/turf_decal/weather/snow/corner{ + dir = 8 + }, +/turf/open/misc/dirt{ + initial_gas_mix = "ICEMOON_ATMOS" + }, +/area/icemoon/underground/explored/graveyard) "uwj" = ( /obj/machinery/duct, /obj/structure/disposalpipe/segment, @@ -66942,6 +68564,10 @@ /obj/machinery/light/small/directional/east, /turf/open/floor/engine/vacuum, /area/station/engineering/atmos) +"uxU" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/plating, +/area/station/maintenance/starboard/lesser) "uxZ" = ( /obj/machinery/atmospherics/pipe/multiz/scrubbers/visible/layer2, /obj/machinery/atmospherics/pipe/multiz/supply/visible/layer4, @@ -66950,6 +68576,10 @@ }, /turf/open/floor/plating, /area/station/maintenance/fore/lesser) +"uye" = ( +/obj/item/kirbyplants/random/dead, +/turf/open/floor/plating, +/area/station/maintenance/starboard/lesser) "uyq" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -67000,11 +68630,6 @@ }, /turf/open/floor/iron, /area/station/commons/dorms/laundry) -"uzc" = ( -/obj/effect/decal/cleanable/food/flour, -/obj/effect/turf_decal/tile/bar/opposingcorners, -/turf/open/floor/iron, -/area/station/service/bar/backroom) "uzd" = ( /obj/structure/rack, /obj/item/mecha_parts/mecha_equipment/hydraulic_clamp{ @@ -67101,31 +68726,12 @@ "uBi" = ( /turf/closed/wall, /area/station/ai_monitored/turret_protected/ai) -"uBn" = ( -/obj/effect/landmark/blobstart, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/turf/open/floor/plating, -/area/station/maintenance/fore) "uBs" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, /turf/open/floor/iron/dark/textured, /area/station/ai_monitored/security/armory) -"uBt" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/commons/fitness) "uBy" = ( /obj/structure/flora/grass/brown/style_random, /obj/structure/railing{ @@ -67136,6 +68742,17 @@ "uBA" = ( /turf/closed/wall, /area/station/engineering/atmos/project) +"uBD" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/spawner/random/trash/food_packaging, +/obj/effect/spawner/random/trash/cigbutt, +/turf/open/floor/plating, +/area/station/maintenance/starboard/lesser) "uBL" = ( /obj/effect/turf_decal/tile/blue{ dir = 4 @@ -67340,13 +68957,6 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on, /turf/open/floor/iron/white, /area/station/medical/virology) -"uDV" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/duct, -/obj/effect/landmark/event_spawn, -/turf/open/floor/iron, -/area/station/service/hydroponics) "uDW" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -67376,12 +68986,6 @@ /obj/structure/closet/crate, /turf/open/misc/asteroid/snow/icemoon, /area/icemoon/underground/explored) -"uEE" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/turf/open/floor/wood/parquet, -/area/station/commons/lounge) "uEI" = ( /obj/structure/railing/corner{ dir = 4 @@ -67410,9 +69014,7 @@ /turf/open/floor/plating, /area/station/security/processing) "uFg" = ( -/obj/structure/railing, -/obj/structure/marker_beacon/cerulean, -/turf/open/genturf, +/turf/open/misc/asteroid/snow/icemoon, /area/icemoon/surface/outdoors/unexplored/rivers/no_monsters) "uFh" = ( /turf/open/floor/plating, @@ -67438,27 +69040,17 @@ /obj/machinery/holopad, /turf/open/floor/iron/dark, /area/station/engineering/atmos/storage) -"uFW" = ( -/obj/item/stack/package_wrap{ - pixel_x = 10; - pixel_y = -6 - }, -/obj/machinery/duct, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 - }, -/obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/west, +"uGe" = ( +/obj/structure/table/wood, /obj/effect/turf_decal/tile/bar/opposingcorners, -/turf/open/floor/iron, -/area/station/service/bar/backroom) -"uGa" = ( -/obj/structure/cable, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 8 +/obj/structure/sign/picture_frame/portrait/bar{ + pixel_x = 32 + }, +/obj/structure/displaycase/forsale/kitchen{ + pixel_y = 8 }, /turf/open/floor/iron, -/area/station/commons/dorms) +/area/station/service/bar) "uGl" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -67503,13 +69095,10 @@ }, /turf/open/floor/iron/dark/smooth_large, /area/station/engineering/main) -"uHa" = ( -/obj/effect/turf_decal/siding/wood, -/obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/west, -/obj/structure/disposalpipe/segment, -/turf/open/floor/iron, -/area/station/service/theater) +"uGY" = ( +/obj/structure/bookcase, +/turf/open/floor/plating, +/area/station/maintenance/starboard/lesser) "uHc" = ( /obj/effect/turf_decal/trimline/purple/filled/corner{ dir = 8 @@ -67528,15 +69117,6 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/fore) -"uHS" = ( -/obj/structure/disposaloutlet{ - dir = 8 - }, -/obj/structure/disposalpipe/trunk{ - dir = 4 - }, -/turf/open/floor/engine, -/area/station/science/xenobiology) "uHV" = ( /obj/structure/disposalpipe/trunk/multiz{ dir = 1 @@ -67603,6 +69183,10 @@ /obj/effect/decal/cleanable/glass, /turf/open/floor/plating, /area/station/maintenance/department/medical/central) +"uIS" = ( +/obj/effect/turf_decal/tile/purple, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) "uIV" = ( /obj/machinery/meter, /obj/effect/turf_decal/delivery, @@ -67654,11 +69238,6 @@ /obj/structure/extinguisher_cabinet/directional/east, /turf/open/floor/iron/white, /area/station/medical/cryo) -"uKr" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/cable, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) "uKx" = ( /obj/structure/closet, /obj/item/clothing/suit/hooded/wintercoat{ @@ -67747,15 +69326,24 @@ }, /turf/open/floor/engine, /area/station/engineering/supermatter/room) -"uLU" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/obj/structure/disposalpipe/junction{ +"uLJ" = ( +/obj/machinery/power/apc/auto_name/directional/east, +/obj/structure/cable, +/obj/effect/turf_decal/tile/bar{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral{ dir = 4 }, -/turf/open/floor/wood/parquet, -/area/station/commons/lounge) +/obj/item/kirbyplants/organic/plant10, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) +"uLR" = ( +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central) "uLX" = ( /obj/machinery/door/airlock{ name = "Port Emergency Storage" @@ -67766,6 +69354,21 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark/textured, /area/station/commons/storage/emergency/port) +"uLZ" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/light/small/dim/directional/north, +/obj/effect/decal/cleanable/vomit/old, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"uMj" = ( +/obj/effect/decal/cleanable/dirt, +/obj/item/kirbyplants/random/dead, +/turf/open/floor/iron, +/area/station/maintenance/starboard/fore) "uMm" = ( /turf/open/floor/iron/white/corner{ dir = 4 @@ -67781,10 +69384,6 @@ }, /turf/open/floor/iron/dark, /area/mine/storage) -"uMu" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/station/hallway/primary/starboard) "uMx" = ( /obj/machinery/disposal/bin, /obj/structure/disposalpipe/trunk, @@ -67830,6 +69429,15 @@ "uMN" = ( /turf/open/openspace, /area/station/commons/storage/mining) +"uNp" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/duct, +/turf/open/floor/iron/freezer, +/area/station/commons/toilet) "uNq" = ( /obj/effect/turf_decal/trimline/yellow/filled/line{ dir = 1 @@ -67853,21 +69461,18 @@ /obj/item/trash/raisins, /turf/open/floor/plating, /area/station/maintenance/aft/greater) -"uNA" = ( -/obj/structure/chair/office{ - dir = 1 - }, -/obj/effect/landmark/start/assistant, -/obj/effect/turf_decal/tile/red/half/contrasted{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/commons/fitness) "uNE" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/circuit, /area/station/ai_monitored/turret_protected/aisat/hallway) +"uNG" = ( +/obj/machinery/light/small/directional/west, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 5 + }, +/turf/open/floor/plating/snowed/icemoon, +/area/icemoon/underground/explored) "uNV" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/turf_decal/siding/wideplating/dark{ @@ -67889,6 +69494,16 @@ "uOb" = ( /turf/closed/wall/r_wall, /area/station/security/prison/toilet) +"uOe" = ( +/obj/machinery/door/window/left/directional/west{ + name = "Fitness Ring" + }, +/obj/structure/window/reinforced/spawner/directional/north, +/obj/effect/turf_decal/siding/white{ + dir = 9 + }, +/turf/open/floor/iron/dark, +/area/station/commons/fitness) "uOf" = ( /obj/machinery/door/airlock{ id_tag = "miningdorm_A"; @@ -67944,20 +69559,26 @@ /obj/effect/landmark/start/hangover, /turf/open/floor/iron/white, /area/station/medical/virology) +"uOy" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/obj/effect/landmark/start/hangover, +/obj/machinery/duct, +/turf/open/floor/iron/freezer, +/area/station/commons/toilet) +"uOz" = ( +/obj/structure/marker_beacon/yellow, +/turf/open/misc/dirt{ + initial_gas_mix = "ICEMOON_ATMOS" + }, +/area/icemoon/underground/explored/graveyard) "uOE" = ( /obj/machinery/atmospherics/pipe/heat_exchanging/simple{ dir = 5 }, /turf/open/misc/asteroid/snow/icemoon, /area/icemoon/surface/outdoors/nospawn) -"uOH" = ( -/obj/effect/turf_decal/siding/white{ - dir = 1 - }, -/obj/machinery/restaurant_portal/restaurant, -/obj/effect/turf_decal/tile/red/full, -/turf/open/floor/iron/large, -/area/station/service/kitchen/diner) "uOL" = ( /obj/effect/turf_decal/tile/yellow{ dir = 4 @@ -67969,16 +69590,6 @@ /obj/effect/turf_decal/bot, /turf/open/floor/iron, /area/station/commons/vacant_room/commissary) -"uOS" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/power/apc/auto_name/directional/north, -/turf/open/floor/plating, -/area/station/maintenance/starboard/lesser) "uOW" = ( /obj/effect/turf_decal/trimline/blue/filled/line, /obj/effect/landmark/start/paramedic, @@ -68087,10 +69698,6 @@ }, /turf/open/floor/plating, /area/station/engineering/storage/tech) -"uQY" = ( -/obj/structure/window/reinforced/spawner/directional/east, -/turf/open/floor/carpet, -/area/station/service/theater) "uRi" = ( /obj/structure/cable, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ @@ -68132,14 +69739,6 @@ dir = 4 }, /area/station/hallway/secondary/entry) -"uRz" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 1 - }, -/obj/effect/landmark/start/hangover, -/obj/machinery/light/small/directional/east, -/turf/open/floor/stone, -/area/station/commons/lounge) "uRL" = ( /obj/machinery/airalarm/directional/north, /obj/machinery/light/directional/north, @@ -68189,20 +69788,37 @@ /obj/machinery/meter, /turf/open/floor/iron/dark, /area/station/science/ordnance) +"uSE" = ( +/obj/structure/table/glass, +/obj/machinery/door/window/right/directional/north{ + name = "Hydroponics Desk"; + req_access = list("hydroponics") + }, +/obj/structure/window/reinforced/spawner/directional/east, +/obj/structure/desk_bell{ + pixel_x = 1; + pixel_y = 3 + }, +/obj/effect/turf_decal/tile/green/opposingcorners{ + dir = 1 + }, +/obj/effect/turf_decal/tile/blue/opposingcorners, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics) "uSS" = ( /obj/machinery/recharge_station, /obj/effect/turf_decal/stripes/box, /obj/effect/turf_decal/tile/yellow/fourcorners, /turf/open/floor/iron/white, /area/station/medical/medbay/aft) -"uTc" = ( -/obj/machinery/chem_heater/withbuffer, -/obj/structure/window/reinforced/spawner/directional/north{ - layer = 2.9 +"uTf" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 }, -/obj/effect/turf_decal/tile/yellow/full, -/turf/open/floor/iron/white/smooth_large, -/area/station/medical/pharmacy) +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/medical/morgue) "uTk" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -68256,11 +69872,6 @@ /obj/structure/sign/poster/official/random/directional/south, /turf/open/floor/iron/white, /area/station/science/robotics/lab) -"uTN" = ( -/obj/structure/window/reinforced/spawner/directional/north, -/obj/structure/flora/bush/jungle/a/style_random, -/turf/open/floor/grass, -/area/station/service/hydroponics) "uTX" = ( /obj/structure/window/reinforced/spawner/directional/west, /obj/item/kirbyplants/random, @@ -68268,11 +69879,10 @@ dir = 4 }, /area/station/service/chapel) -"uUn" = ( -/obj/structure/table/optable, -/obj/effect/decal/cleanable/blood/old, -/turf/open/floor/engine, -/area/station/science/xenobiology) +"uUq" = ( +/obj/effect/spawner/structure/window/hollow/reinforced/middle, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "uUu" = ( /obj/structure/sign/nanotrasen{ pixel_x = -32 @@ -68284,6 +69894,12 @@ dir = 1 }, /area/station/hallway/secondary/entry) +"uUw" = ( +/obj/structure/table/wood, +/obj/machinery/airalarm/directional/west, +/obj/machinery/fax/auto_name, +/turf/open/floor/iron/grimy, +/area/station/service/bar/backroom) "uUH" = ( /obj/machinery/atmospherics/pipe/smart/simple/dark/visible/layer1{ dir = 10 @@ -68293,12 +69909,6 @@ "uUT" = ( /turf/closed/wall, /area/mine/mechbay) -"uUV" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 4 - }, -/turf/open/floor/wood/parquet, -/area/station/service/bar/atrium) "uVj" = ( /obj/effect/turf_decal/arrows/white, /obj/effect/turf_decal/stripes/line{ @@ -68306,20 +69916,6 @@ }, /turf/open/floor/engine, /area/station/engineering/atmos/hfr_room) -"uVn" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 5 - }, -/obj/effect/turf_decal/tile/red/half{ - dir = 4 - }, -/turf/open/floor/iron/half{ - dir = 1 - }, -/area/station/hallway/secondary/service) "uVp" = ( /obj/machinery/door/airlock/maintenance_hatch{ name = "MiniSat Maintenance" @@ -68348,17 +69944,20 @@ dir = 1 }, /area/station/security/lockers) +"uWf" = ( +/obj/structure/railing/corner/end{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "uWp" = ( /obj/structure/sign/warning/secure_area, /turf/closed/wall, /area/station/maintenance/aft/greater) -"uWv" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/machinery/duct, -/turf/open/floor/iron, -/area/station/hallway/secondary/service) "uWw" = ( /obj/structure/railing/corner{ dir = 1 @@ -68389,19 +69988,10 @@ initial_gas_mix = "ICEMOON_ATMOS" }, /area/icemoon/underground/explored) -"uXm" = ( -/obj/structure/chair{ - desc = "Aw geez, I wonder what the chef's cooking up in there!"; - dir = 1; - name = "The Peanut's Gallery" - }, -/turf/open/floor/iron, -/area/station/hallway/primary/starboard) "uXu" = ( /obj/machinery/power/terminal{ dir = 4 }, -/obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/department/electrical) "uXy" = ( @@ -68515,11 +70105,6 @@ /obj/machinery/airalarm/directional/north, /turf/open/floor/plating, /area/station/ai_monitored/turret_protected/aisat/service) -"uZL" = ( -/obj/structure/table, -/obj/effect/spawner/random/maintenance/two, -/turf/open/floor/iron/smooth, -/area/station/maintenance/starboard/fore) "uZT" = ( /obj/effect/turf_decal/tile/blue{ dir = 4 @@ -68633,17 +70218,6 @@ dir = 1 }, /area/station/medical/chemistry) -"vbb" = ( -/obj/effect/turf_decal/siding/white{ - dir = 8 - }, -/obj/structure/chair{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red/full, -/obj/machinery/light/directional/west, -/turf/open/floor/iron/large, -/area/station/service/kitchen/diner) "vbd" = ( /obj/effect/turf_decal/stripes/line, /obj/effect/turf_decal/arrows/white{ @@ -68666,15 +70240,6 @@ /obj/structure/cable, /turf/open/floor/circuit/telecomms/mainframe, /area/station/tcommsat/server) -"vbz" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment{ - dir = 9 - }, -/turf/open/floor/plating, -/area/station/maintenance/starboard/lesser) "vbC" = ( /obj/structure/chair{ dir = 4 @@ -68703,6 +70268,13 @@ /obj/structure/railing, /turf/open/misc/asteroid/snow/icemoon, /area/icemoon/surface/outdoors/nospawn) +"vbI" = ( +/obj/effect/turf_decal/tile/bar{ + dir = 1 + }, +/obj/structure/chair/stool/directional/north, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) "vbO" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden, /obj/item/kirbyplants/random, @@ -68735,13 +70307,6 @@ "vcj" = ( /turf/closed/wall/r_wall, /area/mine/storage) -"vco" = ( -/obj/machinery/door/window/left/directional/west{ - name = "Fitness Ring" - }, -/obj/structure/window/reinforced/spawner/directional/north, -/turf/open/floor/iron/dark, -/area/station/commons/fitness) "vcH" = ( /obj/machinery/atmospherics/pipe/smart/simple/dark/visible{ dir = 9 @@ -68817,16 +70382,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/aisat/service) -"vdI" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/wood/parquet, -/area/station/commons/lounge) "vdM" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -68841,6 +70396,13 @@ /obj/effect/mapping_helpers/airlock/access/all/science/ordnance, /turf/open/floor/iron/white, /area/station/science/ordnance/office) +"vdO" = ( +/obj/machinery/newscaster/directional/north, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central) "vdW" = ( /obj/structure/window/reinforced/spawner/directional/east, /obj/effect/decal/cleanable/dirt, @@ -68865,6 +70427,11 @@ "vep" = ( /turf/closed/wall, /area/station/maintenance/disposal/incinerator) +"veq" = ( +/obj/structure/cable, +/obj/effect/turf_decal/tile/purple, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) "ver" = ( /obj/structure/lattice/catwalk, /obj/structure/marker_beacon/burgundy{ @@ -68883,12 +70450,6 @@ "veK" = ( /turf/open/floor/iron/white, /area/mine/living_quarters) -"veL" = ( -/obj/structure/sign/painting/library{ - pixel_y = 32 - }, -/turf/open/floor/wood, -/area/station/hallway/secondary/service) "veN" = ( /obj/machinery/vending/modularpc, /obj/effect/turf_decal/bot, @@ -68951,6 +70512,27 @@ }, /turf/open/floor/iron, /area/station/science/xenobiology) +"vfw" = ( +/obj/structure/railing/corner/end/flip, +/obj/effect/turf_decal/siding/white{ + dir = 4 + }, +/obj/structure/sink/kitchen/directional/south, +/obj/structure/mirror/directional/north, +/obj/machinery/camera/directional/north{ + c_tag = "Service - Coldroom Access" + }, +/obj/effect/turf_decal/tile/bar{ + dir = 4 + }, +/obj/structure/disposalpipe/sorting/mail{ + dir = 4 + }, +/obj/effect/mapping_helpers/mail_sorting/service/kitchen, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/service/kitchen/coldroom) "vfI" = ( /obj/machinery/door/window/right/directional/south{ name = "Ordnance Freezer Chamber Access"; @@ -69027,11 +70609,26 @@ /obj/effect/mapping_helpers/airlock/abandoned, /turf/open/floor/plating, /area/station/maintenance/port/greater) +"vgU" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/catwalk_floor/iron_smooth, +/area/station/maintenance/starboard/fore) "vhm" = ( /obj/structure/sign/poster/random/directional/west, /obj/machinery/firealarm/directional/north, /turf/open/floor/iron/dark, /area/station/service/chapel) +"vhA" = ( +/obj/effect/turf_decal/trimline/green/filled/corner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/blue/filled/warning/corner{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics) "vhB" = ( /obj/structure/chair/plastic, /obj/effect/turf_decal/bot_red, @@ -69083,10 +70680,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood, /area/station/command/heads_quarters/captain) -"viR" = ( -/obj/effect/spawner/random/medical/two_percent_xeno_egg_spawner, -/turf/open/floor/engine, -/area/station/science/xenobiology) "viV" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/window/reinforced/spawner/directional/south, @@ -69140,12 +70733,6 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/maintenance/aft/greater) -"vkg" = ( -/obj/machinery/hydroponics/constructable, -/obj/effect/turf_decal/trimline/green/filled/line, -/obj/effect/turf_decal/trimline/blue/filled/warning, -/turf/open/floor/iron/dark, -/area/station/service/hydroponics) "vkz" = ( /obj/machinery/suit_storage_unit/ce, /obj/effect/turf_decal/stripes/line{ @@ -69189,6 +70776,15 @@ /obj/machinery/airalarm/directional/north, /turf/open/floor/plating, /area/station/construction) +"vkO" = ( +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/maintenance/starboard/lesser) "vkW" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 4 @@ -69220,26 +70816,9 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central) -"vlq" = ( -/obj/effect/turf_decal/siding/white{ - dir = 8 - }, -/obj/structure/chair, -/obj/effect/turf_decal/tile/red/full, -/obj/structure/sign/poster/random/directional/west, -/turf/open/floor/iron/large, -/area/station/service/kitchen/diner) -"vlI" = ( -/obj/effect/turf_decal/siding/white{ - dir = 4 - }, -/obj/effect/turf_decal/tile/green/opposingcorners{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue/opposingcorners, -/obj/machinery/light/small/directional/north, -/turf/open/floor/iron, -/area/station/hallway/secondary/service) +"vlz" = ( +/turf/open/openspace, +/area/station/service/kitchen/coldroom) "vlL" = ( /obj/machinery/computer/cargo/request, /turf/open/floor/iron, @@ -69248,12 +70827,6 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/cargo/storage) -"vlP" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/wood/tile, -/area/station/service/theater) "vlS" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/door/airlock/external{ @@ -69270,6 +70843,17 @@ /obj/effect/mapping_helpers/airlock/access/all/supply/mining, /turf/open/floor/iron/smooth, /area/mine/mechbay) +"vlU" = ( +/obj/structure/table, +/obj/effect/turf_decal/siding/white{ + dir = 6 + }, +/obj/machinery/reagentgrinder{ + pixel_y = 9; + pixel_x = 4 + }, +/turf/open/floor/iron/white/smooth_large, +/area/station/service/kitchen) "vlZ" = ( /obj/effect/turf_decal/trimline/neutral/filled/line{ dir = 8 @@ -69278,6 +70862,11 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/mine/storage) +"vme" = ( +/obj/structure/cable, +/obj/machinery/duct, +/turf/open/floor/iron/freezer, +/area/station/commons/toilet) "vmj" = ( /obj/structure/chair{ dir = 1; @@ -69413,6 +71002,20 @@ }, /turf/open/floor/iron/dark, /area/station/engineering/atmos/storage/gas) +"vnK" = ( +/obj/effect/turf_decal/siding/white, +/obj/effect/turf_decal/tile/blue/opposingcorners, +/obj/effect/turf_decal/tile/green/opposingcorners{ + dir = 1 + }, +/obj/structure/table/glass, +/obj/machinery/light/small/directional/west, +/obj/item/stack/package_wrap{ + pixel_y = 3 + }, +/obj/item/hand_labeler, +/turf/open/floor/iron, +/area/station/service/hydroponics) "vnN" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/turf_decal/trimline/yellow/filled/line{ @@ -69423,6 +71026,12 @@ }, /turf/open/floor/iron/textured, /area/station/medical/chem_storage) +"vnS" = ( +/obj/structure/fence/cut/large{ + dir = 8 + }, +/turf/open/floor/plating/snowed/smoothed/icemoon, +/area/icemoon/surface/outdoors/nospawn) "vnY" = ( /obj/structure/closet/crate/critter, /turf/open/floor/plating, @@ -69472,14 +71081,6 @@ "voK" = ( /turf/closed/wall/r_wall, /area/station/tcommsat/computer) -"voM" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/structure/disposalpipe/segment, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/hallway/secondary/service) "voY" = ( /obj/structure/cable, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ @@ -69534,6 +71135,18 @@ /obj/structure/cable, /turf/open/floor/iron/recharge_floor, /area/station/security/mechbay) +"vpJ" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/machinery/door/airlock/engineering{ + name = "Utilities Room" + }, +/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, +/obj/effect/mapping_helpers/airlock/unres, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plating, +/area/station/maintenance/starboard/lesser) "vpR" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/dark, @@ -69573,15 +71186,6 @@ /obj/effect/turf_decal/stripes/line, /turf/open/floor/iron, /area/station/science/ordnance) -"vqD" = ( -/obj/machinery/door/airlock{ - name = "Hydroponics Backroom" - }, -/obj/machinery/door/firedoor, -/obj/machinery/duct, -/obj/effect/mapping_helpers/airlock/access/all/service/hydroponics, -/turf/open/floor/iron/textured_half, -/area/station/service/hydroponics) "vqH" = ( /obj/effect/turf_decal/trimline/green/filled/line{ dir = 6 @@ -69625,6 +71229,21 @@ /obj/item/kirbyplants/random, /turf/open/floor/iron, /area/station/security/courtroom) +"vrr" = ( +/obj/machinery/computer/operating{ + dir = 8 + }, +/obj/effect/decal/cleanable/cobweb/cobweb2, +/turf/open/floor/iron/dark, +/area/station/medical/morgue) +"vrw" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "pharmacy_shutters3"; + name = "Pharmacy Shutters" + }, +/turf/open/floor/plating, +/area/station/service/kitchen) "vrC" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -69715,6 +71334,19 @@ /obj/machinery/air_sensor/carbon_tank, /turf/open/floor/engine/co2, /area/station/engineering/atmos) +"vto" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners, +/obj/machinery/newscaster/directional/north, +/obj/effect/turf_decal/siding/wood, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/light/small/directional/north, +/obj/machinery/camera/directional/north{ + c_tag = "Service - Bar" + }, +/turf/open/floor/iron, +/area/station/service/bar) "vtr" = ( /obj/effect/decal/cleanable/cobweb/cobweb2, /obj/item/kirbyplants/random, @@ -69741,6 +71373,11 @@ dir = 10 }, /area/station/science/research) +"vtW" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/machinery/space_heater, +/turf/open/floor/plating, +/area/station/medical/morgue) "vtZ" = ( /obj/structure/table/wood, /obj/item/reagent_containers/cup/glass/bottle/vodka/badminka{ @@ -69805,10 +71442,6 @@ /obj/structure/sign/warning/fire, /turf/closed/wall/r_wall, /area/station/engineering/supermatter) -"vuN" = ( -/obj/machinery/light/small/directional/west, -/turf/open/floor/wood/tile, -/area/station/service/theater) "vuR" = ( /obj/structure/extinguisher_cabinet/directional/south, /obj/effect/turf_decal/trimline/yellow/filled/warning{ @@ -69844,6 +71477,17 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/command/heads_quarters/hop) +"vvn" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/obj/item/radio/intercom/directional/west, +/obj/machinery/camera/directional/west{ + c_tag = "Service - Atrium Entrance" + }, +/turf/open/floor/stone, +/area/station/service/bar/atrium) "vvu" = ( /obj/structure/railing, /obj/effect/turf_decal/trimline/neutral/warning{ @@ -69936,6 +71580,10 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/smooth, /area/station/security/holding_cell) +"vww" = ( +/obj/structure/sign/warning/directional/west, +/turf/open/openspace/icemoon, +/area/icemoon/surface/outdoors/nospawn) "vwC" = ( /obj/effect/turf_decal/weather/snow/corner{ dir = 9 @@ -70026,19 +71674,6 @@ /obj/effect/turf_decal/tile/yellow/opposingcorners, /turf/open/floor/iron/white, /area/station/maintenance/port/fore) -"vxx" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/structure/sign/directions/engineering{ - desc = "A sign that shows there are doors here. There are doors everywhere!"; - icon_state = "doors"; - name = "WARNING: EXTERNAL AIRLOCK"; - pixel_y = 32 - }, -/turf/open/floor/iron, -/area/station/hallway/secondary/service) "vxO" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/effect/turf_decal/siding/wood, @@ -70055,6 +71690,14 @@ /obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible, /turf/open/floor/iron/large, /area/station/engineering/atmos) +"vxY" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/structure/cable, +/obj/effect/landmark/start/mime, +/turf/open/floor/wood/parquet, +/area/station/service/theater) "vyb" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -70078,16 +71721,6 @@ }, /turf/open/floor/iron/showroomfloor, /area/station/security/processing) -"vyj" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/camera/directional/south{ - c_tag = "Service - Electrical Maintenace Lower" - }, -/turf/open/floor/catwalk_floor/iron_smooth, -/area/station/maintenance/starboard/lesser) "vym" = ( /turf/closed/wall, /area/station/construction) @@ -70105,6 +71738,10 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/engine, /area/station/science/explab) +"vyy" = ( +/obj/structure/reagent_dispensers/cooking_oil, +/turf/open/misc/asteroid/snow/coldroom, +/area/station/service/kitchen/coldroom) "vyI" = ( /obj/structure/railing{ dir = 1 @@ -70113,6 +71750,12 @@ /obj/machinery/light/small/dim/directional/east, /turf/open/floor/plating, /area/station/maintenance/department/medical/morgue) +"vyN" = ( +/obj/structure/closet/crate/miningcar, +/obj/effect/spawner/random/exotic/snow_gear, +/obj/effect/spawner/random/exotic/snow_gear, +/turf/open/floor/plating, +/area/station/maintenance/starboard/lesser) "vyO" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -70261,8 +71904,9 @@ /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/aisat_interior) "vAO" = ( -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/structure/filingcabinet/chestdrawer, +/obj/structure/bodycontainer/morgue/beeper_off{ + dir = 1 + }, /turf/open/floor/iron/dark, /area/station/medical/morgue) "vAP" = ( @@ -70289,6 +71933,15 @@ }, /turf/open/floor/plating, /area/station/ai_monitored/turret_protected/aisat/service) +"vAW" = ( +/obj/effect/turf_decal/tile/neutral/diagonal_edge, +/obj/effect/landmark/start/cook, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/obj/structure/cable, +/turf/open/floor/iron/kitchen/diagonal, +/area/station/service/kitchen) "vAY" = ( /obj/effect/turf_decal/stripes/corner{ dir = 1 @@ -70336,6 +71989,18 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/engineering/supermatter/room) +"vBt" = ( +/obj/machinery/door/airlock/freezer{ + desc = "The freezer where the chef keeps all the stuff that needs to be kept cold. Ice cold."; + name = "The Ice Box" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/access/all/service/kitchen, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/service/kitchen/coldroom) "vBu" = ( /obj/machinery/space_heater, /obj/machinery/camera/directional/south{ @@ -70464,16 +72129,16 @@ }, /turf/open/floor/iron, /area/mine/laborcamp) -"vEi" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/public/glass{ - name = "Holodeck Door" - }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ - cycle_id = "holodeck" - }, -/turf/open/floor/iron, -/area/station/commons/fitness) +"vDQ" = ( +/obj/effect/spawner/random/decoration/flower, +/obj/structure/flora/rock/pile/icy/style_random, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/explored) +"vEh" = ( +/obj/structure/frame/machine, +/obj/item/stack/cable_coil/five, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "vEw" = ( /obj/machinery/camera/directional/west{ c_tag = "Atmospherics Access" @@ -70490,6 +72155,17 @@ /obj/machinery/status_display/evac/directional/east, /turf/open/floor/engine, /area/station/engineering/supermatter/room) +"vEC" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/siding/wood, +/obj/structure/chair/stool/bar/directional/north, +/turf/open/floor/eighties, +/area/station/commons/lounge) "vEJ" = ( /obj/effect/turf_decal/tile/green{ dir = 8 @@ -70528,15 +72204,6 @@ /obj/effect/mapping_helpers/airlock/access/all/supply/general, /turf/open/floor/iron/smooth, /area/station/cargo/drone_bay) -"vFb" = ( -/obj/structure/table/wood, -/obj/item/clothing/mask/cigarette/cigar{ - pixel_x = 7; - pixel_y = 10 - }, -/obj/item/storage/box/matches, -/turf/open/floor/carpet, -/area/station/command/heads_quarters/captain) "vFg" = ( /obj/structure/falsewall, /turf/open/floor/plating, @@ -70622,6 +72289,14 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/tcommsat/computer) +"vHe" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/spawner/random/trash/botanical_waste, +/turf/open/floor/plating, +/area/station/maintenance/starboard/lesser) "vHf" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 4 @@ -70662,23 +72337,19 @@ }, /turf/open/floor/iron, /area/station/cargo/sorting) -"vHM" = ( -/obj/structure/rack, -/obj/structure/window/reinforced/spawner/directional/north{ - layer = 2.9 - }, -/obj/effect/turf_decal/tile/red/half/contrasted{ - dir = 8 - }, -/obj/effect/spawner/random/armory/rubbershot, -/turf/open/floor/iron/dark/textured, -/area/station/ai_monitored/security/armory) "vHR" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 4 }, /turf/open/floor/iron/white/smooth_large, /area/station/medical/chemistry) +"vHT" = ( +/obj/structure/fence/post{ + dir = 8 + }, +/obj/structure/sign/nanotrasen, +/turf/open/floor/plating/snowed/smoothed/icemoon, +/area/icemoon/surface/outdoors/nospawn) "vHU" = ( /obj/item/radio/intercom/prison/directional/south, /obj/effect/turf_decal/tile/red/half/contrasted, @@ -70721,6 +72392,13 @@ /obj/item/radio/intercom/directional/north, /turf/open/floor/iron/dark/textured_edge, /area/station/security/evidence) +"vIL" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "vIZ" = ( /obj/machinery/duct, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -70750,11 +72428,6 @@ }, /turf/open/floor/plating, /area/station/engineering/storage/tech) -"vJL" = ( -/obj/machinery/power/apc/auto_name/directional/north, -/obj/structure/cable, -/turf/open/floor/plating, -/area/station/maintenance/department/crew_quarters/bar) "vJS" = ( /obj/structure/chair/sofa/corp/right{ dir = 4; @@ -70783,53 +72456,19 @@ /obj/machinery/vending/security, /turf/open/floor/iron/smooth_edge, /area/station/security/lockers) -"vKn" = ( -/obj/item/radio/intercom/directional/north, -/obj/structure/table/wood, -/obj/machinery/fax{ - fax_name = "Service Hallway"; - name = "Service Fax Machine" - }, -/turf/open/floor/iron, -/area/station/hallway/secondary/service) "vKq" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, /turf/open/floor/iron, /area/station/commons/locker) -"vKC" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 8 - }, -/obj/effect/turf_decal/siding/wood{ - dir = 4 - }, -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/wood{ - name = "Bar" - }, -/obj/effect/mapping_helpers/airlock/access/all/service/bar, -/turf/open/floor/iron/dark/textured_half{ - dir = 1 - }, -/area/station/service/bar/backroom) -"vKE" = ( -/obj/machinery/computer/holodeck, -/obj/effect/turf_decal/tile/red/half/contrasted{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/commons/fitness) -"vKG" = ( -/obj/machinery/camera/directional/east{ - c_tag = "Holodeck Control" - }, -/obj/effect/turf_decal/tile/red/half/contrasted{ +"vKT" = ( +/obj/structure/disposalpipe/segment{ dir = 4 }, -/turf/open/floor/iron, -/area/station/commons/fitness) +/obj/structure/cable, +/turf/open/floor/plating/snowed/coldroom, +/area/station/service/kitchen/coldroom) "vLj" = ( /obj/machinery/suit_storage_unit/rd, /obj/effect/turf_decal/stripes/line{ @@ -70838,29 +72477,11 @@ /obj/machinery/light/directional/north, /turf/open/floor/iron/smooth_half, /area/station/command/heads_quarters/rd) -"vLk" = ( -/obj/structure/sign/warning/gas_mask, -/turf/closed/wall, -/area/station/maintenance/starboard/fore) -"vLn" = ( -/obj/machinery/camera/directional/south{ - c_tag = "Service Hallway - Upper East" - }, -/turf/open/floor/iron, -/area/station/hallway/secondary/service) "vLo" = ( /obj/effect/landmark/generic_maintenance_landmark, /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/maintenance/aft/greater) -"vLx" = ( -/obj/effect/landmark/event_spawn, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/turf_decal/tile/bar/opposingcorners, -/turf/open/floor/iron, -/area/station/service/bar) "vMa" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/airalarm/directional/south, @@ -70910,11 +72531,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/service/chapel/office) -"vMq" = ( -/obj/effect/turf_decal/tile/neutral/diagonal_edge, -/obj/machinery/holopad, -/turf/open/floor/iron/kitchen/diagonal, -/area/station/service/kitchen) "vMA" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -70929,11 +72545,6 @@ }, /turf/open/floor/wood, /area/station/maintenance/aft/greater) -"vMR" = ( -/obj/structure/table/glass, -/obj/item/seeds/glowshroom, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) "vMY" = ( /obj/structure/disposalpipe/segment{ dir = 6 @@ -70982,8 +72593,19 @@ /obj/machinery/atmospherics/components/unary/passive_vent{ dir = 1 }, +/obj/effect/mapping_helpers/no_atoms_ontop, /turf/open/floor/plating/snowed/smoothed/icemoon, /area/icemoon/underground/explored) +"vOd" = ( +/obj/item/wrench, +/obj/machinery/atmospherics/components/binary/pump/off/supply/visible/layer4{ + dir = 1; + name = "Air In" + }, +/obj/effect/landmark/generic_maintenance_landmark, +/obj/effect/landmark/blobstart, +/turf/open/floor/plating, +/area/station/maintenance/fore) "vOw" = ( /obj/item/kirbyplants/random, /obj/effect/turf_decal/tile/red{ @@ -71075,20 +72697,19 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /turf/open/floor/iron, /area/mine/production) +"vQz" = ( +/obj/effect/turf_decal/weather/snow/corner{ + dir = 10 + }, +/obj/machinery/light/small/directional/east, +/turf/open/floor/plating/snowed/icemoon, +/area/icemoon/underground/explored) "vQG" = ( /obj/effect/turf_decal/trimline/neutral/filled/line{ dir = 10 }, /turf/open/floor/iron/dark, /area/station/commons/storage/mining) -"vQN" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 - }, -/obj/machinery/firealarm/directional/south, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/hallway/secondary/service) "vQO" = ( /obj/machinery/camera/directional/east{ c_tag = "Locker Room Toilets" @@ -71125,12 +72746,6 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/iron, /area/station/maintenance/disposal/incinerator) -"vRE" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/service/hydroponics) "vRN" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -71188,20 +72803,19 @@ "vSi" = ( /turf/closed/wall, /area/mine/eva) -"vSr" = ( -/obj/machinery/door/airlock/maintenance{ - name = "Service Hall Maintenance" +"vSu" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 }, -/obj/effect/mapping_helpers/airlock/access/all/service/general, -/obj/machinery/duct, -/obj/effect/mapping_helpers/airlock/unres{ - dir = 1 +/obj/machinery/firealarm/directional/north{ + pixel_x = -4 }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) +/obj/machinery/light_switch/directional/north{ + pixel_x = 5; + pixel_y = 28 + }, +/turf/open/floor/wood/large, +/area/station/service/bar) "vSw" = ( /obj/structure/table, /obj/machinery/firealarm/directional/north, @@ -71300,11 +72914,6 @@ /obj/structure/closet/firecloset, /turf/open/floor/plating, /area/station/maintenance/starboard/lesser) -"vTA" = ( -/obj/effect/turf_decal/tile/neutral/half/contrasted, -/obj/machinery/light/small/directional/south, -/turf/open/floor/iron, -/area/station/commons/dorms) "vTJ" = ( /obj/structure/table, /obj/item/toy/plush/slimeplushie{ @@ -71332,14 +72941,24 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/port) -"vUi" = ( -/obj/structure/sign/picture_frame/portrait/bar{ - pixel_y = -32 +"vUn" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 }, -/obj/effect/turf_decal/siding/white, -/obj/effect/turf_decal/tile/bar/opposingcorners, -/turf/open/floor/iron, -/area/station/service/bar) +/obj/machinery/atmospherics/pipe/multiz/supply/visible/layer4{ + color = "#0000ff"; + dir = 8; + name = "Supply multi deck pipe adapter" + }, +/obj/machinery/atmospherics/pipe/multiz/scrubbers/visible/layer2{ + color = "#ff0000"; + dir = 8; + name = "Scrubbers multi deck pipe adapter" + }, +/obj/structure/cable/multilayer/multiz, +/obj/machinery/airalarm/directional/east, +/turf/open/floor/plating, +/area/station/maintenance/starboard/lesser) "vUr" = ( /obj/machinery/atmospherics/pipe/smart/simple/green/visible{ dir = 4 @@ -71372,15 +72991,6 @@ }, /turf/open/floor/iron, /area/station/science/ordnance) -"vVh" = ( -/obj/effect/turf_decal/siding/white/corner{ - dir = 4 - }, -/obj/effect/turf_decal/siding/white/corner, -/obj/structure/cable, -/obj/effect/turf_decal/tile/bar/opposingcorners, -/turf/open/floor/iron, -/area/station/service/bar) "vVj" = ( /obj/effect/turf_decal/bot_white/left, /obj/effect/turf_decal/tile/neutral/fourcorners, @@ -71392,6 +73002,12 @@ /obj/effect/landmark/start/hangover, /turf/open/floor/iron/freezer, /area/station/commons/toilet) +"vVA" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 6 + }, +/turf/open/floor/stone, +/area/station/service/bar/atrium) "vVH" = ( /turf/closed/wall, /area/station/security/prison/safe) @@ -71459,10 +73075,6 @@ "vWz" = ( /turf/closed/wall, /area/mine/storage) -"vWB" = ( -/obj/effect/spawner/random/vending/colavend, -/turf/open/floor/iron/dark, -/area/station/hallway/primary/central) "vWL" = ( /obj/structure/chair{ dir = 1; @@ -71505,12 +73117,21 @@ /obj/effect/mapping_helpers/airlock/access/any/science/maintenance, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) +"vXe" = ( +/obj/structure/aquarium/lawyer, +/turf/open/floor/wood, +/area/station/service/lawoffice) "vXh" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, /turf/open/floor/iron, /area/station/hallway/primary/central) +"vXm" = ( +/obj/structure/grille/broken, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "vXn" = ( /obj/structure/table, /obj/item/food/pie/cream, @@ -71551,6 +73172,12 @@ /obj/structure/cable, /turf/open/floor/iron/white, /area/mine/living_quarters) +"vXM" = ( +/obj/structure/chair/sofa/right/brown{ + dir = 8 + }, +/turf/open/floor/wood/large, +/area/station/commons/lounge) "vXO" = ( /obj/structure/fluff/tram_rail, /obj/structure/lattice/catwalk, @@ -71560,22 +73187,26 @@ /obj/structure/marker_beacon/burgundy{ name = "landing marker" }, -/obj/structure/marker_beacon/burgundy{ - name = "landing marker" - }, /turf/open/lava/plasma/ice_moon, /area/icemoon/underground/explored) "vXU" = ( /obj/item/toy/snowball, /turf/open/misc/asteroid/snow/icemoon, /area/icemoon/surface/outdoors/nospawn) -"vXY" = ( -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 4 +"vXV" = ( +/obj/effect/turf_decal/tile/blue/half/contrasted{ + dir = 8 }, -/obj/machinery/door/airlock/external, -/turf/open/floor/plating, -/area/station/maintenance/fore) +/obj/machinery/light/small/directional/west, +/obj/machinery/requests_console/directional/west{ + department = "Head of Personnel's Desk"; + name = "Head of Personnel's Requests Console" + }, +/obj/effect/mapping_helpers/requests_console/assistance, +/obj/effect/mapping_helpers/requests_console/announcement, +/obj/effect/mapping_helpers/requests_console/information, +/turf/open/floor/iron, +/area/station/command/heads_quarters/hop) "vYa" = ( /obj/structure/reagent_dispensers/fueltank, /obj/effect/turf_decal/delivery, @@ -71615,6 +73246,10 @@ }, /turf/open/floor/iron, /area/station/command/heads_quarters/hop) +"vYp" = ( +/obj/structure/table/wood, +/turf/open/floor/wood/parquet, +/area/station/service/bar/atrium) "vYq" = ( /obj/structure/barricade/wooden/snowed, /turf/open/misc/asteroid/snow/icemoon, @@ -71660,8 +73295,20 @@ /area/station/engineering/lobby) "vYN" = ( /obj/effect/spawner/random/structure/crate, +/obj/effect/mapping_helpers/no_atoms_ontop, /turf/open/misc/asteroid/snow/icemoon, /area/icemoon/underground/explored) +"vYY" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/disposalpipe/sorting/mail{ + dir = 4 + }, +/obj/effect/mapping_helpers/mail_sorting/service/hydroponics, +/obj/effect/mapping_helpers/mail_sorting/service/theater, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "vZa" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, @@ -71726,10 +73373,6 @@ }, /turf/open/floor/plating/snowed/icemoon, /area/station/maintenance/port/aft) -"vZY" = ( -/obj/machinery/light/directional/south, -/turf/open/floor/wood/parquet, -/area/station/commons/lounge) "wab" = ( /obj/structure/cable, /obj/machinery/holopad, @@ -71868,13 +73511,6 @@ }, /turf/open/floor/iron/freezer, /area/station/commons/toilet/locker) -"wbZ" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/structure/cable/multilayer/multiz, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) "wck" = ( /obj/structure/chair{ dir = 8 @@ -71885,6 +73521,12 @@ /obj/machinery/bluespace_vendor/directional/east, /turf/open/floor/iron, /area/station/hallway/primary/starboard) +"wco" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "wcx" = ( /obj/machinery/holopad, /obj/effect/turf_decal/bot, @@ -72000,16 +73642,6 @@ }, /turf/open/misc/asteroid/snow/icemoon, /area/icemoon/surface/outdoors/nospawn) -"weY" = ( -/obj/structure/window/reinforced/spawner/directional/west, -/obj/structure/table/glass, -/obj/effect/turf_decal/trimline/green/filled/line, -/obj/effect/turf_decal/trimline/blue/filled/warning, -/obj/machinery/reagentgrinder{ - pixel_y = 4 - }, -/turf/open/floor/iron, -/area/station/service/hydroponics) "wfc" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/catwalk_floor/iron_dark, @@ -72185,6 +73817,12 @@ /obj/machinery/atmospherics/pipe/smart/manifold/purple/visible, /turf/open/floor/glass/reinforced, /area/station/engineering/atmos/pumproom) +"whg" = ( +/obj/effect/turf_decal/tile/blue, +/obj/machinery/light/directional/south, +/obj/machinery/firealarm/directional/south, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) "whh" = ( /obj/effect/turf_decal/trimline/yellow/filled/line, /obj/effect/turf_decal/trimline/yellow/filled/warning{ @@ -72201,35 +73839,11 @@ /obj/effect/turf_decal/stripes/corner, /turf/open/floor/iron/white, /area/station/medical/treatment_center) -"whl" = ( -/obj/machinery/door/airlock/external, -/obj/structure/sign/warning/gas_mask/directional/south{ - desc = "A sign that warns of dangerous gasses in the air, instructing you to wear internals." - }, -/obj/structure/sign/warning/cold_temp/directional/north, -/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ - cycle_id = "chem-morgue-airlock" - }, -/obj/effect/mapping_helpers/airlock/access/any/medical/maintenance, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating, -/area/station/medical/morgue) "whr" = ( /obj/machinery/hydroponics/soil, /obj/item/cultivator, /turf/open/floor/grass, /area/station/security/prison/garden) -"whu" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 10 - }, -/obj/machinery/duct, -/obj/structure/disposalpipe/trunk{ - dir = 8 - }, -/obj/machinery/disposal/bin, -/turf/open/floor/plating, -/area/station/hallway/secondary/service) "whz" = ( /obj/machinery/hydroponics/constructable, /obj/effect/decal/cleanable/dirt, @@ -72286,6 +73900,15 @@ /obj/structure/cable, /turf/open/floor/iron/dark, /area/station/medical/chemistry) +"wiy" = ( +/obj/structure/window/reinforced/spawner/directional/north, +/obj/effect/spawner/random/vending/snackvend, +/obj/machinery/camera/directional/east{ + c_tag = "Engineering Lobby" + }, +/obj/structure/extinguisher_cabinet/directional/east, +/turf/open/floor/iron/dark, +/area/station/engineering/lobby) "wiz" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -72303,6 +73926,13 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/engineering/engine_smes) +"wiO" = ( +/obj/structure/chair, +/obj/effect/turf_decal/tile/blue/half/contrasted{ + dir = 1 + }, +/turf/open/floor/iron/white, +/area/station/medical/medbay/lobby) "wjv" = ( /obj/machinery/computer/cargo{ dir = 4 @@ -72338,6 +73968,17 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron/white, /area/station/medical/medbay/central) +"wjR" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/item/chair, +/obj/effect/decal/cleanable/glass, +/turf/open/floor/plating, +/area/station/maintenance/starboard/lesser) "wjS" = ( /obj/effect/landmark/start/assistant, /obj/structure/chair/pew{ @@ -72359,11 +74000,6 @@ }, /turf/open/floor/iron/dark/telecomms, /area/station/tcommsat/server) -"wkq" = ( -/obj/machinery/airalarm/directional/east, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/wood/parquet, -/area/station/commons/lounge) "wkr" = ( /turf/open/floor/iron/showroomfloor, /area/station/security/warden) @@ -72431,6 +74067,18 @@ }, /turf/open/floor/iron, /area/station/maintenance/disposal/incinerator) +"wla" = ( +/obj/effect/decal/cleanable/garbage, +/obj/item/reagent_containers/spray/chemsprayer/party{ + pixel_x = 1 + }, +/obj/item/clothing/head/costume/festive{ + pixel_y = -3; + pixel_x = -5 + }, +/obj/effect/decal/cleanable/generic, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "wlr" = ( /obj/structure/table, /obj/item/stack/spacecash/c10, @@ -72463,6 +74111,15 @@ /mob/living/carbon/human/species/monkey, /turf/open/floor/grass, /area/station/medical/virology) +"wlQ" = ( +/obj/structure/rack, +/obj/structure/window/reinforced/spawner/directional/north, +/obj/effect/turf_decal/tile/red/anticorner/contrasted{ + dir = 4 + }, +/obj/effect/spawner/random/armory/shotgun, +/turf/open/floor/iron/dark/textured, +/area/station/ai_monitored/security/armory) "wlR" = ( /obj/structure/closet/boxinggloves, /turf/open/floor/iron, @@ -72566,11 +74223,6 @@ /mob/living/basic/pet/penguin/baby/permanent, /turf/open/misc/asteroid/snow/standard_air, /area/station/science/research) -"wnq" = ( -/obj/item/paper/fluff/jobs/security/beepsky_mom, -/obj/machinery/light/small/dim/directional/east, -/turf/open/floor/plating, -/area/station/maintenance/fore) "wnv" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 8 @@ -72685,6 +74337,15 @@ }, /turf/open/floor/plating, /area/station/hallway/secondary/exit/departure_lounge) +"woX" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/junction{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) "wpc" = ( /obj/machinery/door/airlock{ name = "Unisex Restrooms" @@ -72694,6 +74355,12 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/freezer, /area/station/commons/toilet/locker) +"wph" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/obj/effect/landmark/generic_maintenance_landmark, +/turf/open/floor/plating, +/area/station/maintenance/fore) "wpi" = ( /obj/structure/table, /obj/item/holosign_creator/atmos{ @@ -72705,6 +74372,17 @@ }, /turf/open/floor/iron/dark, /area/station/science/ordnance/office) +"wpm" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/door/airlock/maintenance{ + name = "Fitness Maintenance" + }, +/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, +/obj/effect/mapping_helpers/airlock/unres, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "wpp" = ( /obj/machinery/airalarm/directional/north, /obj/machinery/pipedispenser/disposal, @@ -72755,17 +74433,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, /area/station/commons/locker) -"wpV" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/light_switch/directional/south, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/neutral/half/contrasted, -/turf/open/floor/iron, -/area/station/commons/fitness) "wpY" = ( /obj/effect/mapping_helpers/airlock/abandoned, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -72816,6 +74483,17 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/commons/storage/mining) +"wqt" = ( +/obj/effect/turf_decal/tile/bar{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/machinery/airalarm/directional/west, +/obj/item/kirbyplants/organic/plant10, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) "wqx" = ( /turf/closed/wall/r_wall, /area/station/hallway/primary/fore) @@ -72978,13 +74656,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/department/chapel) -"wtb" = ( -/obj/machinery/door/firedoor, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/station/hallway/primary/central) "wtg" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /obj/structure/cable, @@ -73032,21 +74703,28 @@ /obj/structure/sign/warning/cold_temp, /turf/open/floor/plating, /area/station/maintenance/solars/starboard/fore) +"wuc" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 8; + id = "kitchencounter"; + name = "Kitchen Counter Shutters" + }, +/obj/machinery/door/firedoor, +/obj/item/reagent_containers/condiment/peppermill{ + pixel_x = 3 + }, +/obj/item/reagent_containers/condiment/saltshaker{ + pixel_x = -3 + }, +/turf/open/floor/iron/white/smooth_large, +/area/station/service/kitchen) "wug" = ( /obj/machinery/gulag_item_reclaimer{ pixel_y = 24 }, /turf/open/floor/carpet, /area/station/security/processing) -"wun" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 9 - }, -/obj/item/pai_card, -/obj/structure/table/wood, -/obj/effect/turf_decal/tile/bar/opposingcorners, -/turf/open/floor/iron, -/area/station/service/bar) "wuo" = ( /turf/closed/wall/r_wall, /area/station/engineering/supermatter) @@ -73091,30 +74769,15 @@ /obj/effect/turf_decal/siding/yellow/corner, /obj/machinery/status_display/evac/directional/south, /obj/structure/table, -/obj/effect/spawner/random/trash/food_packaging, -/obj/effect/spawner/random/trash/cigbutt, -/turf/open/floor/iron, -/area/station/engineering/lobby) -"wvb" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 1 +/obj/item/flatpack{ + board = /obj/item/circuitboard/machine/flatpacker; + pixel_x = -5 }, -/obj/effect/turf_decal/siding/wood, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/turf/open/floor/iron/dark/textured_half, -/area/station/service/bar/atrium) -"wvc" = ( -/obj/machinery/hydroponics/constructable, -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/green{ - dir = 4 +/obj/item/multitool{ + pixel_x = 8 }, -/obj/machinery/light/directional/east, /turf/open/floor/iron, -/area/station/service/hydroponics) +/area/station/engineering/lobby) "wve" = ( /obj/effect/turf_decal/stripes/line, /turf/open/floor/iron/white, @@ -73123,6 +74786,9 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/carpet, /area/station/service/chapel) +"wvu" = ( +/turf/open/misc/hay/icemoon, +/area/icemoon/underground/explored) "wvv" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -73165,6 +74831,10 @@ "wvI" = ( /turf/closed/wall/r_wall, /area/station/maintenance/disposal/incinerator) +"wvJ" = ( +/obj/effect/spawner/random/engineering/atmospherics_portable, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "wvK" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -73175,14 +74845,11 @@ /turf/open/floor/iron, /area/station/commons/storage/tools) "wvL" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment{ - dir = 4 +/obj/effect/turf_decal/weather/snow/corner, +/turf/open/misc/dirt{ + initial_gas_mix = "ICEMOON_ATMOS" }, -/obj/machinery/firealarm/directional/north, -/turf/open/floor/iron/dark, -/area/station/medical/morgue) +/area/icemoon/underground/explored/graveyard) "wvV" = ( /turf/closed/wall/r_wall, /area/station/engineering/atmos/pumproom) @@ -73193,6 +74860,22 @@ /mob/living/basic/pet/cat/runtime, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/cmo) +"wwg" = ( +/obj/machinery/camera{ + c_tag = "Service - Botany"; + dir = 9 + }, +/obj/machinery/hydroponics/constructable, +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/blue/filled/warning{ + dir = 1 + }, +/obj/item/radio/intercom/directional/north, +/obj/machinery/light/warm/directional/north, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics) "wwn" = ( /obj/structure/table/reinforced, /obj/machinery/door/window/left/directional/west{ @@ -73275,14 +74958,6 @@ /obj/machinery/door/firedoor, /turf/open/floor/iron, /area/station/cargo/warehouse) -"wxr" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/machinery/door/firedoor, -/obj/effect/landmark/event_spawn, -/turf/open/floor/iron, -/area/station/hallway/primary/fore) "wxw" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -73369,17 +75044,6 @@ }, /turf/open/floor/iron/cafeteria, /area/station/security/prison/mess) -"wyQ" = ( -/obj/effect/turf_decal/siding/wood, -/obj/effect/turf_decal/siding/wood{ - dir = 1 - }, -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/multi_tile/public/glass{ - name = "The Girly Boar" - }, -/turf/open/floor/iron/dark/textured_half, -/area/station/service/bar/atrium) "wzc" = ( /obj/machinery/power/apc/auto_name/directional/north, /obj/structure/cable, @@ -73492,6 +75156,13 @@ }, /turf/open/floor/plating, /area/station/maintenance/fore) +"wBa" = ( +/obj/structure/railing, +/obj/effect/turf_decal/siding/thinplating_new/light{ + dir = 10 + }, +/turf/open/floor/wood/large, +/area/station/hallway/primary/starboard) "wBb" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -73529,6 +75200,15 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/security/prison/workout) +"wBr" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/west, +/obj/item/kirbyplants/organic/plant2, +/turf/open/floor/stone, +/area/station/service/bar/atrium) "wBy" = ( /obj/machinery/netpod, /obj/item/radio/intercom/directional/south, @@ -73546,12 +75226,6 @@ }, /turf/closed/wall, /area/station/cargo/sorting) -"wBR" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 8 - }, -/turf/open/floor/wood, -/area/station/hallway/secondary/service) "wBT" = ( /obj/machinery/camera/directional/south{ c_tag = "Port Hallway Center" @@ -73689,11 +75363,6 @@ }, /turf/open/floor/iron/dark, /area/mine/laborcamp) -"wDB" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/catwalk_floor/iron_smooth, -/area/station/maintenance/starboard/lesser) "wDG" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -73724,17 +75393,20 @@ /obj/structure/disposalpipe/trunk, /turf/open/floor/iron, /area/station/command/heads_quarters/rd) -"wEa" = ( -/obj/structure/sign/painting/library{ - pixel_y = 32 - }, -/obj/structure/table, -/turf/open/floor/iron, -/area/station/hallway/secondary/service) "wEh" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/cargo/sorting) +"wEq" = ( +/obj/structure/chair/office{ + dir = 8 + }, +/obj/machinery/newscaster/directional/north, +/obj/machinery/light/small/directional/north, +/obj/effect/decal/remains/human, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/plating, +/area/station/maintenance/starboard/lesser) "wEG" = ( /obj/structure/extinguisher_cabinet/directional/south{ pixel_x = 4 @@ -73832,6 +75504,13 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/engine, /area/station/science/explab) +"wGm" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/structure/chair/stool/bar/directional/north, +/turf/open/floor/stone, +/area/station/service/bar/atrium) "wGv" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, @@ -73882,6 +75561,10 @@ }, /turf/open/floor/iron/dark/diagonal, /area/station/engineering/atmos/storage) +"wGQ" = ( +/obj/machinery/light/small/dim/directional/west, +/turf/open/floor/stone, +/area/station/commons/lounge) "wGW" = ( /obj/structure/table, /obj/item/book/manual/wiki/security_space_law, @@ -73932,6 +75615,12 @@ }, /turf/open/floor/iron, /area/station/engineering/lobby) +"wHr" = ( +/obj/structure/fence/post{ + dir = 8 + }, +/turf/open/floor/plating/snowed/smoothed/icemoon, +/area/icemoon/surface/outdoors/nospawn) "wHH" = ( /obj/structure/cable, /obj/effect/turf_decal/tile/red{ @@ -73939,6 +75628,17 @@ }, /turf/open/floor/iron, /area/mine/laborcamp/security) +"wHK" = ( +/obj/machinery/portable_atmospherics/canister/air, +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/obj/machinery/atmospherics/components/unary/portables_connector/visible/layer4{ + dir = 1 + }, +/obj/machinery/light/small/directional/south, +/turf/open/floor/plating, +/area/station/maintenance/fore) "wIg" = ( /obj/machinery/mech_bay_recharge_port{ dir = 2 @@ -73951,18 +75651,28 @@ /obj/effect/turf_decal/tile/blue/half/contrasted, /turf/open/floor/iron, /area/station/hallway/primary/central) +"wIx" = ( +/obj/machinery/newscaster/directional/south, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/green/filled/line, +/obj/effect/turf_decal/trimline/blue/filled/warning, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/duct, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics) "wIz" = ( /obj/machinery/light/small/directional/west, /obj/structure/table/wood, /obj/effect/landmark/start/hangover, /turf/open/floor/carpet, /area/station/commons/dorms) -"wIF" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/chair/stool/directional/west, -/turf/open/floor/wood/parquet, -/area/station/commons/lounge) "wIR" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 8 @@ -73978,18 +75688,6 @@ /obj/effect/decal/remains/plasma, /turf/open/misc/asteroid/snow/icemoon, /area/icemoon/underground/explored) -"wJe" = ( -/obj/effect/turf_decal/siding/thinplating/dark{ - dir = 4 - }, -/obj/structure/window/reinforced/spawner/directional/east, -/turf/open/floor/carpet, -/area/station/service/theater) -"wJf" = ( -/obj/structure/table/wood, -/obj/item/flashlight/lamp, -/turf/open/floor/wood, -/area/station/hallway/secondary/service) "wJi" = ( /obj/structure/railing{ dir = 4 @@ -74040,18 +75738,10 @@ /obj/effect/landmark/start/depsec/medical, /turf/open/floor/iron/dark/smooth_large, /area/station/security/checkpoint/medical) -"wKh" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible, +"wKn" = ( +/obj/machinery/atmospherics/pipe/smart/simple/dark/visible, /turf/closed/wall/r_wall, -/area/station/science/ordnance) -"wKm" = ( -/obj/effect/turf_decal/tile/neutral/diagonal_edge, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable, -/turf/open/floor/iron/kitchen/diagonal, -/area/station/service/kitchen) +/area/station/science/ordnance/burnchamber) "wKv" = ( /obj/structure/table, /obj/item/radio/off, @@ -74212,11 +75902,19 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/commons/storage/mining) -"wMP" = ( -/obj/item/food/chococoin, -/obj/structure/closet/secure_closet/freezer/fridge, -/turf/open/misc/ice/coldroom, -/area/station/service/kitchen/coldroom) +"wME" = ( +/obj/machinery/light_switch/directional/north{ + pixel_x = 6; + pixel_y = 28 + }, +/obj/machinery/button/door/directional/north{ + id = "botany_chasm_and_wolf_shutters"; + name = "Exterior Shutters"; + pixel_y = 28; + pixel_x = -4 + }, +/turf/open/floor/iron/dark/smooth_half, +/area/station/service/hydroponics) "wMT" = ( /obj/structure/sign/poster/random/directional/south, /turf/open/floor/iron, @@ -74256,17 +75954,6 @@ "wNO" = ( /turf/open/genturf, /area/icemoon/surface/outdoors/unexplored/rivers/no_monsters) -"wNQ" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 1 - }, -/obj/structure/table/wood, -/obj/structure/desk_bell{ - pixel_y = 10 - }, -/obj/effect/turf_decal/tile/bar/opposingcorners, -/turf/open/floor/iron, -/area/station/service/bar) "wNR" = ( /obj/structure/disposalpipe/segment{ dir = 9 @@ -74289,16 +75976,6 @@ /obj/structure/cable, /turf/open/floor/iron/dark/textured, /area/station/security/processing) -"wOh" = ( -/obj/effect/turf_decal/trimline/green/filled/line{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/blue/filled/warning{ - dir = 8 - }, -/obj/machinery/light/floor, -/turf/open/floor/iron/dark, -/area/station/service/hydroponics) "wOn" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -74313,6 +75990,12 @@ /obj/structure/reagent_dispensers/watertank, /turf/open/floor/plating, /area/station/maintenance/port/aft) +"wOC" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/plating, +/area/station/maintenance/starboard/lesser) "wOF" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/sign/poster/official/random/directional/north, @@ -74349,6 +76032,26 @@ /obj/structure/cable, /turf/open/floor/iron/white, /area/station/science/xenobiology) +"wPe" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/duct, +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/access/all/service/bar, +/obj/machinery/door/airlock{ + name = "Bar" + }, +/turf/open/floor/iron/dark/textured_half{ + dir = 1 + }, +/area/station/service/bar) "wPf" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -74403,6 +76106,16 @@ }, /turf/open/floor/plating/snowed/icemoon, /area/icemoon/surface/outdoors/nospawn) +"wPR" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/duct, +/obj/structure/sign/warning/cold_temp/directional/south, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics) "wPX" = ( /obj/structure/table, /obj/item/storage/belt/medical{ @@ -74420,12 +76133,6 @@ /obj/item/radio/intercom/directional/south, /turf/open/floor/iron/white, /area/station/medical/storage) -"wPZ" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/disposalpipe/segment, -/turf/open/floor/catwalk_floor/iron_smooth, -/area/station/maintenance/starboard/fore) "wQh" = ( /obj/structure/railing{ dir = 4 @@ -74454,6 +76161,14 @@ /obj/item/assembly/flash, /turf/open/floor/plating/icemoon, /area/station/security/execution/education) +"wQx" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/spawner/random/structure/steam_vent, +/turf/open/floor/plating, +/area/station/maintenance/starboard/lesser) "wQC" = ( /obj/item/flashlight/lantern, /obj/structure/table/wood, @@ -74467,11 +76182,12 @@ }, /turf/open/floor/iron, /area/station/engineering/atmos) -"wQI" = ( -/obj/structure/closet, -/obj/effect/spawner/random/maintenance/four, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) +"wQN" = ( +/obj/structure/fence/cut/large{ + dir = 1 + }, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/surface/outdoors/nospawn) "wQR" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 8 @@ -74490,6 +76206,12 @@ "wRa" = ( /turf/open/openspace, /area/station/security/prison) +"wRc" = ( +/obj/structure/table, +/obj/machinery/cell_charger, +/obj/item/stock_parts/power_store/cell/high/empty, +/turf/open/floor/iron/dark, +/area/station/engineering/storage) "wRd" = ( /turf/open/floor/iron, /area/station/engineering/main) @@ -74564,6 +76286,10 @@ /obj/effect/spawner/structure/window/hollow/reinforced/middle, /turf/open/floor/plating, /area/station/medical/chemistry) +"wSc" = ( +/obj/machinery/power/port_gen/pacman, +/turf/open/floor/plating, +/area/station/maintenance/fore) "wSd" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -74610,6 +76336,15 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/security/prison/work) +"wSL" = ( +/obj/effect/landmark/start/botanist, +/obj/effect/turf_decal/tile/green/opposingcorners{ + dir = 1 + }, +/obj/effect/turf_decal/tile/blue/opposingcorners, +/obj/item/radio/intercom/directional/south, +/turf/open/floor/iron, +/area/station/service/hydroponics) "wSM" = ( /obj/machinery/conveyor{ dir = 4; @@ -74643,6 +76378,11 @@ "wTg" = ( /turf/closed/wall, /area/station/engineering/main) +"wTl" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/obj/effect/landmark/start/mime, +/turf/open/floor/wood, +/area/station/commons/lounge) "wTw" = ( /obj/effect/turf_decal/trimline/neutral/warning{ dir = 10 @@ -74676,6 +76416,15 @@ /obj/effect/turf_decal/tile/red/opposingcorners, /turf/open/floor/iron/dark, /area/station/security/checkpoint/engineering) +"wTE" = ( +/obj/machinery/button/door/directional/east{ + id = "xenobio9"; + name = "Xenobio Pen 9 Blast DOors"; + req_access = list("xenobiology") + }, +/obj/machinery/light/floor, +/turf/open/floor/iron/white, +/area/station/science/xenobiology) "wTX" = ( /obj/structure/table, /obj/machinery/cell_charger, @@ -74734,18 +76483,9 @@ /area/station/maintenance/aft/greater) "wUD" = ( /obj/structure/fake_stairs/wood/directional/north, +/obj/effect/mapping_helpers/no_atoms_ontop, /turf/open/misc/asteroid/snow/icemoon, /area/icemoon/surface/outdoors/nospawn) -"wUE" = ( -/obj/machinery/light_switch/directional/north{ - pixel_x = -7 - }, -/obj/structure/table, -/obj/item/stock_parts/cell/high/empty, -/obj/machinery/cell_charger, -/obj/effect/turf_decal/tile/brown/fourcorners, -/turf/open/floor/iron/dark, -/area/station/engineering/lobby) "wUJ" = ( /obj/machinery/computer/atmos_alert, /obj/effect/turf_decal/tile/yellow/anticorner/contrasted{ @@ -74804,16 +76544,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/maintenance/central/greater) -"wUY" = ( -/obj/structure/chair/sofa/left/brown{ - dir = 4 - }, -/obj/effect/turf_decal/siding/white{ - dir = 4 - }, -/obj/effect/turf_decal/tile/bar/opposingcorners, -/turf/open/floor/iron, -/area/station/hallway/secondary/service) "wVe" = ( /obj/effect/spawner/structure/window, /turf/open/floor/plating, @@ -74865,10 +76595,19 @@ }, /turf/open/floor/iron, /area/station/cargo/sorting) -"wVR" = ( +"wVI" = ( /obj/structure/disposalpipe/segment{ - dir = 10 + dir = 6 }, +/obj/effect/turf_decal/siding/wood, +/obj/structure/chair/stool/bar/directional/north, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/eighties, +/area/station/commons/lounge) +"wVR" = ( +/obj/structure/disposalpipe/junction, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, @@ -74886,6 +76625,13 @@ /obj/effect/spawner/random/structure/tank_holder, /turf/open/floor/plating, /area/station/maintenance/port/fore) +"wWB" = ( +/obj/structure/chair/plastic{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/maintenance/starboard/fore) "wWM" = ( /obj/machinery/atmospherics/pipe/smart/simple/orange/visible{ dir = 4 @@ -74955,12 +76701,6 @@ /obj/effect/turf_decal/delivery, /turf/open/floor/iron, /area/station/science/xenobiology) -"wYf" = ( -/obj/effect/turf_decal/loading_area{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/starboard) "wYh" = ( /obj/structure/disposalpipe/segment, /obj/machinery/firealarm/directional/west, @@ -74985,9 +76725,6 @@ }, /turf/open/floor/vault, /area/station/security/prison/rec) -"wYs" = ( -/turf/open/floor/plating, -/area/station/service/kitchen/coldroom) "wYw" = ( /obj/effect/turf_decal/stripes/asteroid/line{ dir = 8 @@ -75052,17 +76789,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/ai_monitored/command/storage/eva) -"wZq" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/power/apc/auto_name/directional/south, -/obj/effect/decal/cleanable/dirt, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/wood/parquet, -/area/station/commons/lounge) "wZr" = ( /obj/effect/turf_decal/trimline/yellow/filled/line{ dir = 8 @@ -75094,39 +76820,16 @@ /obj/structure/cable, /turf/open/floor/iron/showroomfloor, /area/station/security/warden) -"wZK" = ( -/obj/structure/chair/stool/bar/directional/south, -/obj/effect/turf_decal/siding/wood{ - dir = 1 - }, -/obj/effect/landmark/start/hangover, -/turf/open/floor/stone, -/area/station/commons/lounge) "wZV" = ( /obj/structure/window/reinforced/spawner/directional/east, /obj/machinery/portable_atmospherics/canister/oxygen, /turf/open/floor/iron/dark, /area/station/science/ordnance) -"wZZ" = ( -/obj/structure/tank_holder/oxygen/red, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) "xad" = ( /obj/effect/spawner/structure/window/hollow/reinforced/middle, /obj/structure/cable, /turf/open/floor/plating, /area/station/security/range) -"xak" = ( -/obj/machinery/door/airlock/external{ - glass = 1; - name = "Chapel External Airlock"; - opacity = 0 - }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 4 - }, -/turf/open/floor/plating, -/area/station/service/chapel) "xal" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable, @@ -75215,33 +76918,6 @@ /obj/item/kirbyplants/random, /turf/open/floor/iron/white, /area/mine/living_quarters) -"xbc" = ( -/obj/structure/window/reinforced/spawner/directional/south, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/dark, -/area/station/commons/fitness) -"xbf" = ( -/obj/machinery/hydroponics/constructable, -/obj/effect/turf_decal/siding/wideplating/dark{ - dir = 1 - }, -/obj/item/seeds/berry, -/obj/machinery/light/small/dim/directional/south, -/turf/open/floor/grass, -/area/station/maintenance/starboard/fore) -"xbj" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 5 - }, -/obj/structure/chair/sofa/corp/left{ - dir = 4; - pixel_x = -4 - }, -/obj/effect/landmark/start/hangover, -/obj/machinery/computer/security/telescreen/entertainment/directional/west, -/obj/machinery/light/small/directional/west, -/turf/open/floor/iron/grimy, -/area/station/service/bar/atrium) "xbn" = ( /obj/effect/turf_decal/tile/neutral/diagonal_edge, /obj/effect/landmark/event_spawn, @@ -75276,6 +76952,10 @@ }, /turf/open/floor/iron/freezer, /area/mine/eva/lower) +"xbB" = ( +/obj/machinery/gibber, +/turf/open/misc/asteroid/snow/coldroom, +/area/station/service/kitchen/coldroom) "xbC" = ( /obj/effect/turf_decal/trimline/dark_green/arrow_ccw, /obj/machinery/meter, @@ -75325,6 +77005,16 @@ }, /turf/open/lava/plasma/ice_moon, /area/icemoon/underground/explored) +"xcO" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners, +/obj/machinery/status_display/ai/directional/north, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 8 + }, +/obj/structure/sink/kitchen/directional/west, +/obj/structure/extinguisher_cabinet/directional/east, +/turf/open/floor/iron, +/area/station/service/bar) "xcW" = ( /obj/machinery/atmospherics/pipe/multiz/scrubbers/visible/layer2{ dir = 1 @@ -75348,21 +77038,10 @@ /obj/effect/mapping_helpers/airlock/access/any/command/ai_upload, /turf/open/floor/plating, /area/station/ai_monitored/turret_protected/aisat_interior) -"xdf" = ( -/obj/structure/sign/poster/official/random/directional/north, -/turf/open/floor/iron, -/area/station/hallway/secondary/service) "xdl" = ( /obj/structure/cable, /turf/open/floor/iron/white, /area/station/medical/storage) -"xdA" = ( -/obj/effect/turf_decal/siding/white{ - dir = 4 - }, -/obj/structure/chair/stool/bar/directional/east, -/turf/open/floor/iron/white/smooth_large, -/area/station/service/kitchen/diner) "xdH" = ( /obj/effect/turf_decal/stripes/line, /obj/structure/chair{ @@ -75400,28 +77079,15 @@ }, /turf/open/floor/iron/dark/textured, /area/station/security/prison/rec) +"xea" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/light/small/directional/north, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "xeg" = ( /obj/effect/turf_decal/weather/snow/corner, /turf/open/misc/asteroid/snow/icemoon, /area/icemoon/surface/outdoors/nospawn) -"xei" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/disposalpipe/segment{ - dir = 10 - }, -/obj/machinery/light/cold/directional/north, -/obj/structure/table, -/obj/item/food/grown/carrot{ - pixel_x = 6; - pixel_y = 7 - }, -/obj/item/food/grown/carrot{ - pixel_x = -6; - pixel_y = 10 - }, -/obj/item/food/meat/slab/synthmeat, -/turf/open/floor/plating/snowed/coldroom, -/area/station/service/kitchen/coldroom) "xem" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/power/apc/auto_name/directional/west, @@ -75710,13 +77376,6 @@ /obj/structure/extinguisher_cabinet/directional/south, /turf/open/floor/iron, /area/station/hallway/primary/port) -"xhz" = ( -/obj/structure/ladder{ - name = "Kitchen Access" - }, -/obj/effect/turf_decal/tile/dark_blue/diagonal_edge, -/turf/open/floor/iron/kitchen/diagonal, -/area/station/service/kitchen/coldroom) "xhD" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -75790,15 +77449,6 @@ /obj/structure/sign/departments/medbay/alt, /turf/closed/wall, /area/station/medical/medbay/lobby) -"xjj" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable, -/turf/open/floor/plating, -/area/station/maintenance/starboard/lesser) "xjm" = ( /obj/machinery/light_switch/directional/north, /obj/machinery/camera/directional/north{ @@ -75874,6 +77524,12 @@ /obj/item/kirbyplants/random, /turf/open/floor/plastic, /area/station/commons/dorms/laundry) +"xkT" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/item/radio/intercom/directional/north, +/turf/open/floor/iron/dark, +/area/station/medical/morgue) "xkZ" = ( /obj/machinery/teleport/station, /obj/machinery/light/small/directional/east, @@ -75888,17 +77544,18 @@ /obj/effect/turf_decal/tile/yellow/full, /turf/open/floor/iron/large, /area/station/medical/storage) +"xlp" = ( +/obj/structure/sign/nanotrasen, +/obj/structure/fence/post{ + dir = 8 + }, +/turf/open/floor/plating/snowed/smoothed/icemoon, +/area/icemoon/underground/explored) "xlq" = ( /obj/structure/lattice/catwalk, /obj/structure/railing, /turf/open/lava/plasma/ice_moon, /area/icemoon/underground/explored) -"xlv" = ( -/obj/structure/chair{ - dir = 8 - }, -/turf/open/floor/iron/white/smooth_large, -/area/station/service/kitchen/diner) "xlx" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -76035,6 +77692,20 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) +"xnc" = ( +/obj/effect/turf_decal/siding/white/end{ + dir = 4 + }, +/obj/structure/table, +/obj/effect/spawner/random/food_or_drink/donkpockets{ + pixel_y = 6 + }, +/turf/open/floor/iron/white/smooth_large, +/area/station/service/kitchen) +"xnf" = ( +/obj/item/kirbyplants/fern, +/turf/open/floor/plating, +/area/station/maintenance/starboard/lesser) "xni" = ( /obj/effect/turf_decal/tile/yellow/half/contrasted{ dir = 1 @@ -76086,35 +77757,18 @@ }, /turf/open/lava/plasma/ice_moon, /area/icemoon/underground/explored) -"xoq" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/airalarm/directional/south, -/obj/effect/turf_decal/siding/white, -/obj/machinery/camera/directional/south{ - c_tag = "Service Bar" +"xog" = ( +/obj/structure/fence{ + dir = 1 }, -/obj/effect/turf_decal/tile/bar/opposingcorners, -/turf/open/floor/iron, -/area/station/service/bar) +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/surface/outdoors/nospawn) "xow" = ( /obj/machinery/portable_atmospherics/canister/air, /obj/machinery/firealarm/directional/west, /obj/effect/turf_decal/stripes/corner, /turf/open/floor/plating, /area/station/ai_monitored/turret_protected/aisat/atmos) -"xpo" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/neutral/anticorner/contrasted, -/turf/open/floor/iron, -/area/station/commons/fitness) -"xpp" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/machinery/duct, -/turf/open/floor/plating, -/area/station/maintenance/department/crew_quarters/bar) "xpw" = ( /obj/machinery/power/apc/auto_name/directional/south, /obj/structure/cable, @@ -76151,6 +77805,16 @@ /obj/machinery/camera/autoname/directional/east, /turf/open/floor/iron, /area/station/command/heads_quarters/hop) +"xpO" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/spawner/directional/west, +/obj/structure/window/reinforced/spawner/directional/north, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 8; + id = "botany_chasm_and_wolf_shutters" + }, +/turf/open/floor/plating, +/area/station/service/hydroponics) "xpP" = ( /obj/effect/turf_decal/stripes/line, /turf/open/floor/plating, @@ -76159,6 +77823,20 @@ /obj/effect/spawner/random/trash/mess, /turf/open/floor/plating, /area/station/maintenance/aft/greater) +"xqa" = ( +/obj/structure/railing{ + dir = 4 + }, +/obj/effect/turf_decal/siding/white{ + dir = 4 + }, +/obj/machinery/duct, +/obj/effect/turf_decal/tile/bar{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/station/service/kitchen/coldroom) "xqj" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -76177,31 +77855,19 @@ /obj/structure/cable, /turf/open/floor/engine, /area/station/science/xenobiology) -"xqv" = ( -/obj/effect/spawner/random/entertainment/gambling, -/obj/structure/table/wood, -/turf/open/floor/wood/parquet, -/area/station/commons/lounge) "xqy" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/cargo/office) -"xqA" = ( -/obj/machinery/door/airlock/external{ - name = "Service Hall Exit" - }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ - cycle_id = "service-hall-external" - }, -/obj/structure/sign/warning/gas_mask/directional/south{ - desc = "A sign that warns of dangerous gasses in the air, instructing you to wear internals." +"xqP" = ( +/obj/structure/window/reinforced/spawner/directional/north, +/obj/effect/turf_decal/siding/white{ + dir = 1 }, -/obj/effect/turf_decal/stripes/line, -/obj/effect/mapping_helpers/airlock/access/all/service/general, -/turf/open/floor/iron/dark/textured, -/area/station/hallway/secondary/service) +/turf/open/floor/iron/dark, +/area/station/commons/fitness) "xqX" = ( /obj/structure/sign/poster/contraband/random/directional/north, /obj/structure/cable, @@ -76219,6 +77885,25 @@ }, /turf/open/floor/iron/white, /area/station/medical/medbay/aft) +"xre" = ( +/obj/structure/table/glass, +/obj/machinery/door/window/left/directional/north{ + name = "Hydroponics Desk"; + req_access = list("hydroponics") + }, +/obj/structure/window/reinforced/spawner/directional/west, +/obj/effect/turf_decal/tile/green/opposingcorners{ + dir = 1 + }, +/obj/effect/turf_decal/tile/blue/opposingcorners, +/obj/item/paper_bin{ + pixel_y = 4 + }, +/obj/item/pen{ + pixel_x = -5 + }, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics) "xrf" = ( /obj/structure/railing, /obj/structure/cable, @@ -76283,6 +77968,12 @@ /obj/machinery/light/blacklight/directional/east, /turf/open/floor/wood, /area/station/service/library) +"xsm" = ( +/obj/structure/cable, +/obj/machinery/duct, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/fore) "xss" = ( /obj/machinery/light/directional/south, /obj/effect/turf_decal/tile/yellow/half/contrasted, @@ -76299,6 +77990,13 @@ /obj/effect/mapping_helpers/airlock/access/all/engineering/tech_storage, /turf/open/floor/plating, /area/station/engineering/storage/tech) +"xsy" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/stone, +/area/station/service/bar/atrium) "xsA" = ( /obj/structure/rack, /obj/machinery/light/small/dim/directional/north, @@ -76308,6 +78006,16 @@ /obj/item/food/grown/carrot, /turf/open/misc/asteroid/snow/standard_air, /area/station/science/research) +"xsP" = ( +/obj/structure/table, +/obj/item/folder/white, +/obj/item/folder/white, +/obj/item/pen, +/obj/machinery/power/apc/auto_name/directional/east, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/science/explab) "xtc" = ( /obj/effect/turf_decal/trimline/blue/filled/warning{ dir = 1 @@ -76340,6 +78048,12 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/security/prison/workout) +"xtH" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 8 + }, +/turf/open/floor/stone, +/area/station/service/bar/atrium) "xtQ" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -76359,6 +78073,16 @@ /obj/machinery/light/directional/north, /turf/open/floor/iron/white, /area/station/medical/virology) +"xtV" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/visible, +/obj/machinery/button/door/directional/east{ + id = "xenobio11"; + name = "Xenobio Pen 11 Blast DOors"; + req_access = list("xenobiology") + }, +/obj/structure/cable, +/turf/open/floor/iron/white, +/area/station/science/xenobiology) "xtX" = ( /obj/structure/sign/warning/secure_area/directional/east, /obj/structure/cable, @@ -76583,6 +78307,12 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/general/visible, /turf/open/floor/engine, /area/station/engineering/supermatter/room) +"xwL" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/cable, +/obj/machinery/duct, +/turf/open/floor/iron, +/area/station/commons/fitness) "xwM" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -76593,6 +78323,10 @@ /obj/structure/cable, /turf/open/floor/iron/white, /area/station/medical/medbay/lobby) +"xxo" = ( +/obj/effect/turf_decal/weather/snow/corner, +/turf/open/floor/plating/snowed/coldroom, +/area/icemoon/underground/explored) "xxs" = ( /obj/effect/turf_decal/bot_white, /obj/structure/reagent_dispensers/plumbed, @@ -76628,6 +78362,12 @@ }, /turf/open/floor/iron/dark, /area/station/engineering/atmos/hfr_room) +"xxH" = ( +/obj/structure/railing/wooden_fence{ + dir = 8 + }, +/turf/open/misc/hay/icemoon, +/area/icemoon/underground/explored) "xxI" = ( /obj/machinery/airalarm/directional/north, /obj/item/kirbyplants/random, @@ -76810,11 +78550,6 @@ }, /turf/open/floor/circuit/red, /area/station/ai_monitored/turret_protected/ai_upload) -"xAb" = ( -/obj/structure/reagent_dispensers/watertank, -/obj/structure/sign/poster/contraband/random/directional/east, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) "xAk" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /obj/effect/turf_decal/stripes/line{ @@ -76893,6 +78628,13 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/general/visible, /turf/closed/wall/r_wall, /area/station/engineering/supermatter) +"xBs" = ( +/obj/machinery/status_display/ai/directional/west, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/turf/open/floor/wood/parquet, +/area/station/service/theater) "xBt" = ( /obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ dir = 4 @@ -76920,6 +78662,24 @@ /obj/effect/turf_decal/bot, /turf/open/floor/iron/dark/textured, /area/station/engineering/atmos/storage/gas) +"xBS" = ( +/obj/item/training_toolbox{ + pixel_y = 5 + }, +/obj/structure/table, +/obj/item/training_toolbox{ + pixel_y = -2 + }, +/obj/machinery/camera/directional/east{ + c_tag = "Holodeck Control" + }, +/obj/effect/turf_decal/tile/green/half/contrasted{ + dir = 4 + }, +/obj/machinery/status_display/evac/directional/east, +/obj/machinery/newscaster/directional/south, +/turf/open/floor/iron, +/area/station/commons/fitness) "xBU" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -76942,15 +78702,6 @@ /obj/structure/cable, /turf/open/floor/wood, /area/station/security/courtroom) -"xCh" = ( -/obj/machinery/button/door/directional/west{ - id = "xenobio5"; - layer = 4; - name = "Xenobio Pen 5 Blast Door"; - req_access = list("xenobiology") - }, -/turf/open/floor/iron/white, -/area/station/science/xenobiology) "xCj" = ( /obj/structure/sign/departments/holy, /turf/closed/wall, @@ -77029,12 +78780,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, /area/station/commons/locker) -"xDr" = ( -/obj/effect/turf_decal/siding/white, -/obj/effect/spawner/random/vending/snackvend, -/obj/effect/turf_decal/tile/bar/opposingcorners, -/turf/open/floor/iron, -/area/station/hallway/secondary/service) "xDw" = ( /obj/structure/grille/broken, /obj/effect/decal/cleanable/dirt, @@ -77058,6 +78803,7 @@ dir = 8 }, /obj/structure/fake_stairs/wood/directional/north, +/obj/effect/mapping_helpers/no_atoms_ontop, /turf/open/misc/asteroid/snow/icemoon, /area/icemoon/surface/outdoors/nospawn) "xDU" = ( @@ -77100,16 +78846,6 @@ /obj/structure/closet/bombcloset, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) -"xEx" = ( -/obj/item/gun/ballistic/shotgun/doublebarrel, -/obj/structure/table/wood, -/obj/machinery/camera/directional/east{ - c_tag = "Service Bar - Backroom" - }, -/obj/machinery/requests_console/auto_name/directional/east, -/obj/effect/turf_decal/tile/bar/opposingcorners, -/turf/open/floor/iron, -/area/station/service/bar/backroom) "xEE" = ( /obj/machinery/firealarm/directional/south, /turf/open/floor/iron, @@ -77152,33 +78888,25 @@ /obj/structure/disposalpipe/trunk, /turf/open/floor/iron/dark, /area/station/maintenance/disposal/incinerator) -"xEQ" = ( -/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/station/science/ordnance) +"xEP" = ( +/obj/structure/reagent_dispensers/plumbed{ + dir = 1; + name = "hydroponics reservoir" + }, +/obj/effect/turf_decal/delivery/white{ + color = "#307db9" + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/light/small/dim/directional/south, +/turf/open/floor/iron/dark/textured, +/area/station/maintenance/starboard/lesser) "xEW" = ( /obj/structure/closet/firecloset, /obj/effect/turf_decal/tile/purple/fourcorners, /obj/machinery/light/small/directional/south, /turf/open/floor/iron, /area/mine/living_quarters) -"xFi" = ( -/obj/structure/sign/warning/cold_temp/directional/south, -/obj/structure/sign/warning/gas_mask/directional/north, -/turf/open/floor/plating, -/area/station/maintenance/fore) -"xFj" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 9 - }, -/obj/structure/cable, -/obj/structure/disposalpipe/trunk/multiz/down{ - dir = 1 - }, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) "xFm" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -77200,22 +78928,14 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/entry) -"xFv" = ( -/obj/effect/turf_decal/siding/white{ - dir = 6 - }, +"xFz" = ( /obj/effect/turf_decal/tile/bar/opposingcorners, -/obj/structure/extinguisher_cabinet/directional/south, +/obj/effect/turf_decal/siding/wood, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, /turf/open/floor/iron, /area/station/service/bar) -"xFA" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/structure/disposalpipe/segment, -/obj/machinery/duct, -/turf/open/floor/iron, -/area/station/hallway/secondary/service) "xFB" = ( /obj/structure/table, /obj/item/tank/internals/emergency_oxygen/engi, @@ -77232,15 +78952,33 @@ /turf/open/floor/iron/dark, /area/station/engineering/storage) "xFG" = ( -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/structure/table/reinforced, -/obj/item/surgery_tray/full/morgue, +/obj/effect/decal/cleanable/blood/tracks{ + dir = 4 + }, /turf/open/floor/iron/dark, /area/station/medical/morgue) "xFM" = ( /obj/machinery/incident_display/delam, /turf/closed/wall/r_wall, /area/station/engineering/supermatter/room) +"xFT" = ( +/obj/effect/turf_decal/trimline/green/filled/corner, +/obj/effect/turf_decal/trimline/blue/filled/warning/corner, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/obj/machinery/duct, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/rack, +/obj/item/clothing/accessory/armband/hydro{ + pixel_y = 4; + pixel_x = 2 + }, +/obj/item/clothing/accessory/armband/hydro, +/obj/item/toy/figure/botanist, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics) "xFU" = ( /obj/structure/barricade/wooden, /obj/structure/sign/warning/gas_mask/directional/south{ @@ -77264,6 +79002,16 @@ }, /turf/open/floor/iron/white, /area/station/medical/medbay/lobby) +"xGi" = ( +/obj/structure/table/glass, +/obj/item/seeds/glowshroom, +/obj/item/seeds/bamboo{ + pixel_y = 3; + pixel_x = 4 + }, +/obj/machinery/newscaster/directional/east, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "xGp" = ( /obj/structure/table/reinforced, /obj/machinery/door/window/left/directional/east{ @@ -77328,10 +79076,6 @@ /obj/structure/cable, /turf/open/floor/iron/textured, /area/station/security/courtroom) -"xGZ" = ( -/obj/machinery/vending/boozeomat, -/turf/closed/wall, -/area/station/service/bar) "xHe" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -77345,11 +79089,6 @@ /obj/machinery/status_display/evac/directional/south, /turf/open/floor/engine, /area/station/engineering/supermatter/room) -"xHi" = ( -/obj/effect/turf_decal/tile/neutral/diagonal_edge, -/obj/machinery/griddle, -/turf/open/floor/iron/kitchen/diagonal, -/area/station/service/kitchen) "xHq" = ( /obj/machinery/door/airlock/security/glass{ name = "Brig Entrance" @@ -77363,6 +79102,11 @@ /obj/effect/mapping_helpers/airlock/access/all/security/entrance, /turf/open/floor/iron, /area/station/security/brig/upper) +"xHv" = ( +/obj/structure/table/wood, +/obj/effect/spawner/random/trash/janitor_supplies, +/turf/open/floor/plating, +/area/station/maintenance/starboard/lesser) "xHE" = ( /obj/structure/stairs/east, /turf/open/floor/plating, @@ -77374,6 +79118,10 @@ }, /turf/open/floor/plating, /area/station/ai_monitored/turret_protected/aisat/maint) +"xIh" = ( +/obj/effect/spawner/random/structure/tank_holder, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "xIk" = ( /obj/structure/chair/comfy{ dir = 4 @@ -77444,10 +79192,6 @@ /obj/effect/turf_decal/tile/yellow/opposingcorners, /turf/open/floor/iron/white, /area/station/maintenance/port/fore) -"xJF" = ( -/obj/structure/flora/bush/flowers_yw/style_random, -/turf/open/floor/grass, -/area/station/service/hydroponics) "xJG" = ( /obj/machinery/light/directional/east, /turf/open/openspace, @@ -77478,6 +79222,9 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/engineering/supermatter/room) +"xJW" = ( +/turf/open/floor/iron/half, +/area/station/service/hydroponics) "xKb" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/window/reinforced/spawner/directional/south, @@ -77512,9 +79259,26 @@ /obj/effect/mapping_helpers/airlock/access/all/engineering/external, /turf/open/floor/plating, /area/station/maintenance/starboard/upper) +"xKq" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/effect/landmark/event_spawn, +/turf/open/floor/stone, +/area/station/service/bar/atrium) "xKJ" = ( /turf/closed/wall, /area/station/command/meeting_room) +"xKT" = ( +/obj/machinery/camera/directional/west{ + c_tag = "Dormitory South" + }, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 8 + }, +/obj/machinery/light/directional/west, +/turf/open/floor/iron, +/area/station/commons/dorms) "xKX" = ( /obj/effect/turf_decal/trimline/dark_green/arrow_ccw{ dir = 6 @@ -77648,14 +79412,6 @@ /obj/structure/cable, /turf/open/floor/iron/dark/smooth_half, /area/station/ai_monitored/command/storage/eva) -"xNa" = ( -/obj/effect/landmark/blobstart, -/turf/open/floor/engine, -/area/station/science/xenobiology) -"xNk" = ( -/obj/effect/mapping_helpers/burnt_floor, -/turf/open/floor/plating, -/area/station/maintenance/fore) "xNn" = ( /obj/effect/turf_decal/stripes/line{ dir = 5 @@ -77693,12 +79449,65 @@ }, /turf/open/floor/iron/dark, /area/mine/mechbay) +"xOd" = ( +/obj/structure/minecart_rail{ + dir = 6 + }, +/obj/structure/cable, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 10 + }, +/obj/structure/sign/warning/directional/west, +/turf/open/floor/plating/snowed/coldroom, +/area/icemoon/underground/explored) +"xOi" = ( +/obj/machinery/door/window/left/directional/south{ + req_access = list("kitchen"); + name = "The Ice Box" + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/obj/effect/turf_decal/siding/white, +/turf/open/floor/iron/freezer, +/area/station/service/kitchen/coldroom) "xOl" = ( /obj/effect/decal/cleanable/cobweb/cobweb2, /obj/machinery/portable_atmospherics/canister/oxygen, /obj/machinery/atmospherics/components/unary/portables_connector/visible, /turf/open/floor/plating, /area/station/maintenance/port/aft) +"xOE" = ( +/obj/machinery/navbeacon{ + codes_txt = "delivery;dir=8"; + location = "Bar and Kitchen" + }, +/obj/structure/plasticflaps/opaque, +/obj/effect/turf_decal/delivery, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/textured, +/area/station/maintenance/starboard/fore) +"xOV" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/blue/filled/warning{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics) +"xPf" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "xPu" = ( /obj/machinery/light/directional/east, /turf/open/misc/asteroid/snow/icemoon, @@ -77817,6 +79626,27 @@ /obj/structure/railing, /turf/open/floor/iron, /area/mine/production) +"xQS" = ( +/obj/effect/turf_decal/siding/white/end{ + dir = 8 + }, +/obj/structure/table, +/obj/item/reagent_containers/cup/bowl{ + pixel_y = 3 + }, +/obj/item/reagent_containers/cup/bowl{ + pixel_y = 8; + pixel_x = 3 + }, +/obj/item/food/grown/eggplant{ + pixel_y = 5; + pixel_x = 5 + }, +/obj/item/food/grown/mushroom/chanterelle{ + pixel_y = 3 + }, +/turf/open/floor/iron/white/smooth_large, +/area/station/service/kitchen) "xQT" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply, @@ -77853,28 +79683,11 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/eighties/red, /area/station/security/prison/safe) -"xRV" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/sorting/mail{ - dir = 4 - }, -/obj/effect/mapping_helpers/mail_sorting/service/theater, -/obj/effect/mapping_helpers/mail_sorting/service/bar, -/obj/effect/mapping_helpers/mail_sorting/service/hydroponics, -/obj/effect/mapping_helpers/mail_sorting/service/kitchen, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) "xRZ" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/light/small/directional/east, /turf/open/floor/iron/dark, /area/station/engineering/supermatter/room) -"xSj" = ( -/obj/machinery/light/directional/west, -/turf/open/floor/carpet, -/area/station/service/theater) "xSl" = ( /obj/effect/turf_decal/siding/wood{ dir = 1 @@ -77892,11 +79705,6 @@ /obj/structure/cable, /turf/open/floor/iron/smooth, /area/station/security/brig) -"xSt" = ( -/obj/effect/spawner/random/structure/crate, -/obj/machinery/light/small/dim/directional/east, -/turf/open/floor/plating, -/area/station/maintenance/fore) "xSu" = ( /obj/structure/table/glass, /obj/machinery/reagentgrinder, @@ -77926,6 +79734,15 @@ }, /turf/open/floor/iron/large, /area/station/hallway/primary/port) +"xSZ" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on, +/turf/open/floor/engine/vacuum, +/area/station/science/ordnance/burnchamber) +"xTi" = ( +/obj/effect/landmark/start/clown, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/grimy, +/area/station/service/theater) "xTp" = ( /obj/machinery/camera/directional/south{ c_tag = "Solar Maintenance - North East" @@ -77947,6 +79764,16 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/maintenance/starboard/upper) +"xTI" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/obj/effect/turf_decal/tile/green/half/contrasted{ + dir = 4 + }, +/obj/machinery/firealarm/directional/south, +/turf/open/floor/iron, +/area/station/commons/fitness) "xTQ" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -77973,20 +79800,6 @@ }, /turf/open/floor/iron/dark, /area/station/science/ordnance/office) -"xTX" = ( -/obj/effect/turf_decal/siding/wood, -/obj/effect/turf_decal/siding/wood{ - dir = 1 - }, -/obj/machinery/door/airlock{ - name = "Bar" - }, -/obj/machinery/duct, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/door/firedoor, -/obj/effect/mapping_helpers/airlock/access/all/service/bar, -/turf/open/floor/iron/dark/textured_half, -/area/station/service/bar/backroom) "xUb" = ( /obj/effect/turf_decal/stripes/line{ dir = 10 @@ -78011,13 +79824,10 @@ }, /turf/open/openspace, /area/station/science/ordnance/office) -"xUm" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/wood/tile, -/area/station/service/theater) +"xUt" = ( +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "xUw" = ( /obj/structure/sign/departments/maint/directional/west, /turf/open/floor/plating/snowed/smoothed/icemoon, @@ -78084,6 +79894,13 @@ /obj/machinery/light/directional/west, /turf/open/floor/iron, /area/station/engineering/atmos) +"xVc" = ( +/obj/machinery/door/airlock{ + id_tag = "Toilet1"; + name = "Unit 1" + }, +/turf/open/floor/iron/textured, +/area/station/commons/toilet) "xVf" = ( /obj/structure/cable, /turf/open/floor/plating, @@ -78135,14 +79952,6 @@ }, /turf/open/floor/iron/white, /area/station/medical/virology) -"xWa" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/machinery/holopad, -/obj/effect/landmark/event_spawn, -/turf/open/floor/wood/parquet, -/area/station/service/bar/atrium) "xWb" = ( /obj/structure/window/reinforced/spawner/directional/east, /obj/structure/cable, @@ -78162,6 +79971,16 @@ /obj/machinery/light/small/directional/south, /turf/open/floor/iron/freezer, /area/station/commons/toilet) +"xWI" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 8; + id = "kitchencounter"; + name = "Kitchen Counter Shutters" + }, +/obj/machinery/door/firedoor, +/turf/open/floor/iron/white/smooth_large, +/area/station/service/kitchen) "xWM" = ( /obj/structure/disposalpipe/segment{ dir = 9 @@ -78458,13 +80277,6 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /turf/open/floor/iron/showroomfloor, /area/station/security/prison/mess) -"yba" = ( -/obj/machinery/power/apc/auto_name/directional/east, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron/freezer, -/area/station/commons/toilet) "ybf" = ( /obj/machinery/portable_atmospherics/pump, /turf/open/floor/iron/dark, @@ -78572,25 +80384,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/white, /area/station/medical/chemistry) -"ycw" = ( -/obj/machinery/door/firedoor, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/central) -"ycz" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/wood/tile, -/area/station/service/theater) "ycA" = ( /obj/effect/turf_decal/stripes/corner, /obj/effect/turf_decal/tile/blue{ @@ -78602,6 +80395,18 @@ /obj/effect/spawner/structure/window, /turf/open/floor/plating, /area/station/engineering/storage) +"ycE" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/blue/filled/warning{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/sink/directional/east, +/turf/open/floor/iron, +/area/station/service/hydroponics) "ycQ" = ( /obj/structure/closet/crate, /obj/effect/spawner/random/maintenance, @@ -78661,6 +80466,12 @@ dir = 1 }, /area/mine/eva/lower) +"ydv" = ( +/obj/structure/chair/stool/directional/north, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/stone, +/area/station/commons/lounge) "ydA" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/landmark/event_spawn, @@ -78670,11 +80481,11 @@ }, /turf/open/floor/plating, /area/station/maintenance/department/chapel) -"ydD" = ( -/obj/effect/spawner/random/structure/crate_abandoned, -/obj/machinery/light/small/directional/south, -/turf/open/floor/iron/smooth, -/area/station/maintenance/starboard/fore) +"ydG" = ( +/obj/machinery/status_display/ai/directional/east, +/obj/structure/chair/sofa/left/brown, +/turf/open/floor/wood/large, +/area/station/commons/lounge) "ydH" = ( /obj/structure/disposalpipe/segment, /obj/effect/decal/cleanable/glass, @@ -78696,12 +80507,6 @@ /obj/effect/turf_decal/bot, /turf/open/floor/iron, /area/station/hallway/primary/central) -"ydZ" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/chair/stool/directional/north, -/turf/open/floor/wood/parquet, -/area/station/commons/lounge) "yef" = ( /obj/machinery/airalarm/directional/north, /obj/machinery/suit_storage_unit/industrial/loader, @@ -78718,15 +80523,6 @@ /obj/machinery/door/firedoor, /turf/open/floor/iron, /area/station/cargo/miningdock) -"yej" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/disposalpipe/segment{ - dir = 6 - }, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) "yel" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -78743,11 +80539,6 @@ /obj/machinery/airalarm/directional/east, /turf/open/floor/iron, /area/station/commons/storage/mining) -"yey" = ( -/obj/effect/landmark/start/hangover, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/station/medical/morgue) "yeB" = ( /obj/effect/turf_decal/stripes/corner{ dir = 1 @@ -78772,10 +80563,6 @@ /obj/machinery/light/small/directional/west, /turf/open/floor/wood, /area/station/service/library) -"yfp" = ( -/obj/machinery/firealarm/directional/north, -/turf/open/floor/wood/parquet, -/area/station/commons/lounge) "yfz" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 8 @@ -78821,16 +80608,10 @@ /obj/effect/spawner/random/engineering/tracking_beacon, /turf/open/floor/iron, /area/station/command/gateway) -"ygw" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/structure/disposalpipe/sorting/mail/flip{ - dir = 1 - }, -/obj/effect/mapping_helpers/mail_sorting/service/hydroponics, -/turf/open/floor/plating, -/area/station/maintenance/department/crew_quarters/bar) +"ygy" = ( +/obj/effect/landmark/start/clown, +/turf/open/floor/wood, +/area/station/commons/lounge) "ygB" = ( /turf/closed/wall, /area/station/commons/dorms) @@ -78850,6 +80631,16 @@ }, /turf/open/floor/iron/smooth_half, /area/station/security/brig/upper) +"ygP" = ( +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 1 + }, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "yhe" = ( /obj/structure/cable, /obj/machinery/light/directional/south, @@ -78865,10 +80656,25 @@ /obj/structure/sign/warning/cold_temp/directional/east, /turf/open/floor/plating, /area/station/engineering/main) +"yhL" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/machinery/portable_atmospherics/canister, +/turf/open/floor/plating, +/area/station/maintenance/fore) "yhU" = ( /obj/structure/chair/stool/directional/north, /turf/open/floor/iron, /area/station/security/prison/work) +"yhV" = ( +/obj/machinery/door/airlock/maintenance{ + name = "Bar Maintenance" + }, +/obj/structure/disposalpipe/segment, +/obj/effect/mapping_helpers/airlock/access/all/service/bar, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/plating, +/area/station/service/bar/backroom) "yia" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -78917,6 +80723,19 @@ }, /turf/open/floor/plating, /area/station/maintenance/port/greater) +"yjo" = ( +/obj/structure/sign/warning/directional/south, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/surface/outdoors/nospawn) +"yjr" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/wood, +/area/station/hallway/secondary/service) "yju" = ( /obj/structure/table, /obj/effect/spawner/random/maintenance/two, @@ -78931,24 +80750,17 @@ }, /turf/open/floor/plating, /area/station/science/xenobiology) -"yjP" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 9 - }, -/turf/open/floor/stone, -/area/station/commons/lounge) +"yjF" = ( +/obj/structure/sink/directional/east, +/obj/structure/mirror/directional/west, +/turf/open/floor/iron/freezer, +/area/station/commons/toilet) "yjV" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 }, /turf/open/floor/engine, /area/station/engineering/supermatter/room) -"yjX" = ( -/obj/machinery/power/apc/auto_name/directional/east, -/obj/structure/cable, -/obj/structure/chair/stool/directional/south, -/turf/open/floor/iron, -/area/station/hallway/primary/starboard) "ykb" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/turf_decal/tile/blue{ @@ -78988,22 +80800,12 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/hallway/primary/central/fore) -"ykZ" = ( -/obj/effect/turf_decal/siding/wideplating/dark, -/obj/item/radio/intercom/directional/east, -/obj/machinery/duct, -/turf/open/floor/iron, -/area/station/service/hydroponics) -"ylk" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/sign/warning/cold_temp/directional/south, -/turf/open/floor/plating, -/area/station/maintenance/department/crew_quarters/bar) +"ylm" = ( +/obj/machinery/chem_heater/withbuffer, +/obj/structure/window/reinforced/spawner/directional/north, +/obj/effect/turf_decal/tile/yellow/full, +/turf/open/floor/iron/white/smooth_large, +/area/station/medical/pharmacy) "ylt" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/pink/visible, /obj/structure/sign/poster/official/safety_internals/directional/east, @@ -113299,7 +115101,7 @@ iDt iDt iDt iDt -uEA +lCM vjh aYQ bLL @@ -163527,7 +165329,7 @@ jzy pve xjZ bGP -mIT +ayK gsF vSi kZu @@ -166802,7 +168604,7 @@ gjq gjq gjq gjq -gjq +wUj wUj dKC dKC @@ -167060,9 +168862,9 @@ gjq iDt gjq wUj -wUj qLB jpy +vXe ssY wUj gjq @@ -167385,7 +169187,7 @@ hdb avh qGg uUT -dDQ +fyT lQh diI uUT @@ -168088,7 +169890,7 @@ iDt ijY pfw wUj -lMi +dtq jeJ aFg vwl @@ -168385,21 +170187,21 @@ thA thA thA thA -thA -thA -thA -thA -xMq -ebd -iDt +dlu +dlu +dlu +dlu +dlu +dlu +dlu +dlu +qgQ +qgQ +rrl +nmO +ozW iDt iDt -scw -iDt -nfG -thA -thA -thA iDt iDt iDt @@ -168642,22 +170444,22 @@ thA thA thA thA -thA -thA -thA -thA -xMq -xMq +dlu +qbM +wvu +wvu +bPR +qbM +wvu +bil +ijY iDt iDt -ijY -xMq -thA -thA -thA -thA -thA -nfG +iDt +kJx +iDt +iDt +jZN iDt iDt iDt @@ -168899,22 +170701,22 @@ thA thA thA thA -thA -thA -thA -thA -thA -xMq -xMq -scw -xMq -xMq -thA -thA -thA -thA -thA -xMq +dlu +nEI +wvu +wvu +bPR +nEI +wvu +bil +iDt +iDt +iDt +iDt +kJx +iDt +iDt +iDt iDt scw cCb @@ -169156,23 +170958,23 @@ thA thA thA thA -thA -thA -thA -thA -thA -thA -thA -thA -thA -thA -thA -thA -thA -thA -thA -thA -thA +dlu +wvu +wvu +wvu +bPR +wvu +wvu +bil +iDt +iDt +ayJ +iDt +kJx +iDt +iDt +iDt +iDt iDt iDt iDt @@ -169413,23 +171215,23 @@ tjo thA thA thA -thA -thA -thA -thA -thA -thA -thA -thA -thA -thA -thA -thA -thA -thA -thA -xMq -xMq +dlu +rEn +rEn +wvu +ghA +rEn +wvu +idH +iDt +iDt +iDt +iDt +kJx +iDt +iDt +iDt +iDt ijY iDt iDt @@ -169667,34 +171469,34 @@ tjo tjo tjo tjo -tjo -tjo -tjo -tjo -thA -thA -thA -thA -thA -thA -thA thA thA thA -thA -thA -thA -xMq -xMq -xMq -xMq +dlu +wvu +wvu +wvu +wvu +wvu +wvu +wvu iDt iDt -scw iDt iDt +qSi +scw +iDt +scw +scw +scw iDt +scw +scw iDt +rDN +sEv +scw scw iDt iDt @@ -169924,34 +171726,34 @@ tjo tjo tjo tjo -tjo -tjo -tjo -tjo -thA -thA -thA -thA -thA thA thA thA -thA -thA -thA -thA -thA -thA -thA -psb -scw -psb +dlu +ncx +kYN +wvu +wvu +rzY +kYN +wvu +ayJ iDt -thA -thA -xMq -ijY -jZN +iDt +iDt +iDt +scw +scw +scw +scw +scw +scw +scw +oJD +oJD +scw +sed +nfG scw iDt iDt @@ -170181,34 +171983,34 @@ tjo tjo tjo tjo -tjo -tjo -tjo -tjo -tjo -tjo -tjo -tjo -thA -thA -thA -thA -thA -thA -thA thA thA thA +dlu +wvu +wvu +wvu +wvu +wvu +wvu +wvu +iDt iDt -scw iDt +iDt +qSi +scw +scw scw iDt -thA -thA -thA -xMq -xMq +scw +scw +scw +kYo +oJD +oJD +scw +scw aRt aRt xMq @@ -170438,34 +172240,34 @@ tjo tjo tjo tjo -tjo -tjo -tjo -tjo -tjo -tjo -tjo -tjo -tjo -tjo -thA -thA -thA -thA thA thA thA +dlu +xxH +xxH +wvu +jkK +xxH +wvu +mhj iDt iDt -psb -scw -psb iDt -thA -thA -thA -thA -thA +iDt +kJx +iDt +iDt +iDt +iDt +iDt +iDt +iDt +kYo +rIS +kYo +kYo +kYo iDt scw thA @@ -170695,33 +172497,33 @@ tjo tjo tjo tjo -tjo -tjo -tjo -tjo -tjo -tjo -tjo -tjo -tjo -tjo -thA -thA -thA thA thA thA +dlu +wvu +wvu +wvu +bPR +wvu +wvu +bil +iDt +iDt +ayJ +iDt +kJx iDt iDt iDt daZ iDt iDt -thA -thA -thA -thA -thA +kPz +kYo +kYo +kYo +kYo iDt iDt iDt @@ -170952,28 +172754,28 @@ tjo tjo tjo tjo -tjo -tjo -tjo -tjo -tjo -tjo -tjo -tjo -tjo -tjo -thA thA thA thA +dlu +nEI +wvu +wvu +bPR +nEI +wvu +bil iDt iDt iDt iDt +kJx iDt iDt iDt -thA +iDt +iDt +kPz thA thA thA @@ -171166,7 +172968,7 @@ yiL vDx cxO xuA -dkB +wlQ bYg yiL qLD @@ -171209,23 +173011,23 @@ tjo tjo tjo tjo -tjo -tjo -tjo -tjo -tjo -tjo -tjo -thA -thA -thA -thA thA thA thA +dlu +qbM +wvu +wvu +bPR +qbM +wvu +bil +iDt iDt iDt iDt +kJx +iDt iDt iDt iDt @@ -171426,7 +173228,7 @@ pgL lab cbz yiL -rdR +iVu rnb hgM kyu @@ -171466,22 +173268,22 @@ tjo tjo tjo tjo -tjo -tjo -tjo -tjo -tjo -tjo -tjo thA thA thA -thA -thA -thA -iDt -iDt -iDt +dlu +dlu +dlu +dlu +dlu +dlu +dlu +dlu +iDx +rrl +iDx +iDx +fQa iDt daZ iDt @@ -171680,7 +173482,7 @@ yiL agF tgP rGh -vHM +oHs wyF yiL szz @@ -171723,18 +173525,18 @@ tjo tjo tjo tjo -tjo -tjo -tjo -tjo -tjo -tjo -tjo thA thA thA thA thA +thA +thA +thA +thA +iDt +iDt +iDt iDt xPu iDt @@ -171981,16 +173783,16 @@ tjo tjo tjo tjo -tjo -tjo -tjo -tjo -tjo -tjo thA thA thA thA +thA +thA +thA +thA +iDt +iDt iDt iDt aaD @@ -172166,87 +173968,87 @@ tjo tjo tjo tjo -thA -thA -thA -xMq -xMq -gjq -gjq -gjq -gjq -gjq -gjq -gjq -gjq -gjq -gjq -gjq -gjq -xhK -oyH -swf -vVH -uVC -oVY -rwu -tVf -wRa -gAn -hgH -nmI -kZi -uME -uME -uME -uME -bYB -hBg -hgM -xhK -xhK -xhK -xhK -gjq -gjq -gjq -gjq -gjq -thA -thA -thA -thA -thA -thA -thA -thA -thA -thA -thA -tjo -tjo -tjo -tjo -tjo -tjo -tjo -tjo -tjo -tjo -tjo -tjo -tjo -tjo -tjo -tjo -tjo -tjo -tjo -tjo +thA +thA +thA +xMq +xMq +gjq +gjq +gjq +gjq +gjq +gjq +gjq +gjq +gjq +gjq +gjq +gjq +xhK +oyH +swf +vVH +uVC +oVY +rwu +tVf +wRa +gAn +hgH +nmI +kZi +uME +uME +uME +uME +bYB +hBg +hgM +xhK +xhK +xhK +xhK +gjq +gjq +gjq +gjq +gjq +thA +thA +thA +thA +thA +thA +thA +thA +thA +thA +thA +tjo +tjo +tjo +tjo +tjo +tjo +tjo +tjo tjo +tjo +tjo +tjo +tjo +tjo +tjo +thA +thA thA thA thA +thA +thA +thA +iDt iDt iDt iDt @@ -172973,7 +174775,7 @@ ihB ddp hBg nzj -dFr +dKr pOk par rsM @@ -175833,7 +177635,7 @@ rcY iDt iDt xMq -iDt +ebd iDt iDt iDt @@ -176347,12 +178149,12 @@ chg iDt scw scw -hmb -hmb -hmb -hmb -hmb -hmb +xpO +gNu +gNu +gNu +gNu +oZk gjq gjq gjq @@ -176603,14 +178405,14 @@ iDt rcY scw scw -hmb -hmb -hlP -ahI -ahI -boV -hmb -hmb +xpO +gRE +nYR +hog +hog +joW +aqq +oZk gjq gjq gjq @@ -176860,14 +178662,14 @@ iDt rcY scw xMq -hmb -hlP +anI +lLR eYX sCZ sCZ -lmm -boV -hmb +qMO +dVj +anI gjq gjq gjq @@ -177116,19 +178918,19 @@ iDt iDt xMq xMq +xMq exw -exw -ksO +nwC syE -eIY -pqx -hml -vkg -hmb -hmb +hcj +hcj +fat +tqr +exw +vDQ gjq gjq -ebX +wkV kNC jTf jTf @@ -177371,22 +179173,22 @@ thA iDt iDt iDt -xMq exw exw -kQW -fKy +exw +exw +wwg bdr -jHK -rhh -rdd -lmm -boV -hmb -hmb -iDt -qau -iDt +jUv +jUv +xOV +scr +exw +exw +gNu +gNu +exw +mPq iDt neM qau @@ -177628,23 +179430,23 @@ thA iDt iDt xMq -xMq -exw -oGn -qXz -gAy -rhR -ops -lEH -lgA -gAy -bqH -dIc -exw -hmb exw -tJb -gUF +jiD +utn +vnK +cCT +bdr +jUv +jUv +xOV +vhA +oYw +kRD +rJX +mgy +sIX +nrh +iDt neM qau xMq @@ -177885,23 +179687,23 @@ thA xMq xMq xMq -xMq exw -gAN -sCZ -sCZ -lmm -jOc -wOh -fKy -kWR -sCZ -bdr -rCh -reh -rCh -xuo -kDU +cmg +qrF +ncd +dNk +grO +iFQ +iFQ +bon +hFX +ave +exw +aBb +myS +exw +dNN +iDt iDt qau iDt @@ -178140,27 +179942,27 @@ xMq xMq xMq xMq -sBy -sBy -sBy -sBy +xMq +xMq exw -fKd -gyw -sIh +quw +xJW +ncd +erE +mYn +mYn +byy +mYn +wPR exw -stw -gXe -ieq -mow -oMG exw -hmb exw -lfR -jSM +exw +exw +mPq iDt -nqv +iDt +xlp scw fna iDt @@ -178392,26 +180194,26 @@ thA thA thA thA -thA xMq +xMq +sBy sBy sBy sBy sBy -cnr -aga -lvO exw -iUO -uhk -ivr -hmb -gmB -dXA -jqJ -oBl -hbT -hmb +qre +oZD +lHI +exw +rEt +iif +exw +ogu +pOK +kPY +hWv +urG neM iDt scw @@ -178649,26 +180451,26 @@ thA thA thA thA -thA xMq sBy -kDJ -cwd -uHa -gLo -oYc -lvc +sBy +dQp +rRu +xBs +lCv exw -ivr -gcm -cSc -hmb -eoq -ece -bSU -nVz -iNt -hmb +hPS +cYe +wSL +exw +mpU +mpU +tjA +hAK +pOK +txv +hWv +urG neM iDt iDt @@ -178905,28 +180707,28 @@ thA thA thA thA -thA xMq xMq sBy -lUy -teR -tiX -kZc -mYG -qfu -dMS -dMS -dMS -dMS -dMS -dMS -dMS -eWI -dMS -dMS -dMS -xMq +oUv +xTi +bpc +cag +cVW +exw +fBJ +fte +mkr +exw +tmb +tmb +exw +wME +tbd +exw +exw +gFX +psb iDt scw scw @@ -179160,30 +180962,30 @@ thA thA thA thA +thA +thA xMq xMq -xMq -xMq -xMq sBy -eSF -sWC -rrX -ibi -kzW -iMg -tnB -xpp -kSo -cjK -cjK -cjK -cjK -ygw -jTV -hEl -dMS +ghT +pXy +nqI +sBy +fbg +sBy +sBy +exw +exw +bwh +lyP +iDv +jMD +sCZ +obT +ozx +exw xMq +psb jTf jTf ork @@ -179417,30 +181219,30 @@ thA thA thA thA +thA +thA +xMq xMq -mdZ -mdZ -mdZ -mdZ -sBy -sBy -rzA -sBy sBy -qMe +kzU +vxY +sRf sBy -dMS -dMS -hyt -dMS -dMS -dMS -dMS -kSo -kmW -gEz -dMS +rZP +fkd +fbW +exw +exw +exw +jQM +etr +ekc +leg +oIQ +inN +exw xMq +psb xMq scw iDt @@ -179674,30 +181476,30 @@ thA thA thA thA +thA +xMq +xMq xMq -mdZ -wUY -iZp -mdZ -qmN -pbD -let sBy -jjG -vlP -vuN -qMT -edD -ocf -rZT -jCF -acr -dMS -nCJ -dMS -dMS -dMS -dMS +azI +kSj +lyf +sBy +eFf +quJ +quJ +wGQ +nBZ +exw +tie +rxV +hjw +xFT +exw +bor +exw +psb +psb xMq iDt iDt @@ -179706,7 +181508,7 @@ scw btU xUf syW -dKt +jmJ hVX xUf eXH @@ -179931,37 +181733,37 @@ thA thA thA thA +thA xMq -mdZ -kgs -tGZ -tza -tGZ -tGZ -let -sBy -jWO -xUm -mRa -efh -ydZ -jBU -mqr -mqr -reA -dMS -rZN -cjK -cjK -sAc -dMS xMq +qMT +qMT +qMT +qon +qMT +qMT +rZP +quJ +quJ +jZc +nBZ +exw +tec +phr +aTk +tec +exw +mxY +xOd +ubi +psb xMq iDt iDt iDt +iDt ioK -jvw +vtW bja jvw jvw @@ -180180,47 +181982,47 @@ tjo tjo tjo tjo -tjo +iDt tjo thA thA thA thA thA +thA +thA xMq xMq -mdZ -nIL -uWv -let -let -let -let -sBy -pjg -ycz -hJm -kwu -lrN -jBU -eDi -doJ -bIH -dMS -dre -dMS -hHU -nCJ -dMS -xMq -xMq +qMT +jlv +emw +rqG +bOZ +gGS +rZP +quJ +imI +qMT +exw +exw +pLu +tnJ +dJF +rzq +exw +exw +bpa +psb +psb +iDt iDt iDt +scw iDt ioK -rZX -bja +jEA bja +rlA jvw bja kRH @@ -180437,47 +182239,47 @@ tjo tjo tjo tjo -tjo +iDt tjo thA thA thA thA thA +thA xMq xMq -mdZ -gxZ -hNi -mdZ -mdZ -sBy -sBy -sBy -hSb -tEf -kHk -fqK -cjj -vdI -eDP -oko -dMS -dMS -dMS -dMS -dMS -nCJ -dMS -xMq -xMq -nfG -xMq xMq +qMT +dEc +ygy +nfK +wTl +sWS +ydv +aBj +sLm +dTx +exw +jbB +qfI +kcw +mXW +gAw +ktq +exw +phl +ubi +psb +iDt +iDt +iDt +iDt +scw btU btU btU -whl +qbG ako hjM hjM @@ -180687,14 +182489,14 @@ tjo tjo tjo tjo +iDt tjo tjo tjo tjo tjo -tjo -tjo -tjo +luR +iDt tjo thA thA @@ -180703,38 +182505,38 @@ thA thA thA xMq -mdZ -jXD -mCX -pwB -mdZ -kfX -xSj -oXk -tiF -cSu -ebq -phU -fjC -nrt -shD -jfN -dMS -bwL -dYO -bwL -dMS -otj -dMS -xMq -xMq -xMq xMq xMq +qMT +izU +nYN +iDK +nYN +gGS +ydv +oru +dtc +sXU +rbU +nLd +nLa +gnE +gnE +qHs +wIx +exw +phl +cem +psb +iDt +iDt +nfG +iDt +scw btU kCR btU -yey +ocp dYr nxM dTm @@ -180944,14 +182746,14 @@ tjo tjo tjo tjo +iDt +iDt tjo tjo tjo tjo -tjo -tjo -tjo -tjo +nlA +iDt tjo thA thA @@ -180960,38 +182762,38 @@ thA thA thA xMq -mdZ -xdf -mCX -lPN -mdZ -sGi -uQY -uQY -rLV -wJe -rLV -iXF -doJ -vdI -uRz -aak -dMS -vJL -iSi -fsr -fEj -nCJ -dMS -fuH -fuH -fuH +qMT +qMT +qMT +qMT +kJG +eeY +ipg +mlN +rZP +lyU +pMh +aAy +rbU +nLd +ivp +gnE +gnE +kPh +dZL +exw +phl fuH +psb +iDt +iDt +iDt +iDt btU btU sGf lca -kme +uTf dYr nxM nxM @@ -181201,14 +183003,14 @@ tjo tjo tjo tjo +iDt +iDt +iDt +iDt tjo tjo -tjo -tjo -tjo -tjo -tjo -tjo +iDt +iDt tjo thA thA @@ -181217,33 +183019,33 @@ thA thA thA xMq -mdZ -fjm -mCX -pmg -etV -doJ -lGY -rPf -csg -oXS -gUB -xqv -doJ -wZq qMT -qMT -dMS -fkJ -hHU -hHU -dMS -nCJ -dMS -fuH -fuH -fuH +jFY +wVI +aVJ +keM +ePZ +mRv +rZP +qal +oru +vXM +gYk +exw +pSX +rdv +gNw +aUq +aIA +hfY +exw +phl fuH +psb +iDt +iDt +iDt +jCM btU idr qSe @@ -181458,13 +183260,13 @@ tjo tjo tjo tjo +iDt +iDt +iDt +iDt tjo -tjo -tjo -tjo -tjo -tjo -tjo +iDt +iDt tjo tjo thA @@ -181472,35 +183274,35 @@ thA thA thA thA +thA xMq -xMq -mdZ -cId -ksL -mdZ -mdZ -yfp -gUB -csg -lXo -dkO -qis -wIF -qis -uLU -uac -cBL -dMS -dMS -dMS -dMS -dMS -nCJ -dMS -fuH -fuH -fuH -fuH +qMT +jkN +qeW +quJ +mxh +aBj +klJ +ruQ +klJ +sgz +rlE +jre +jre +jre +oac +sGn +hpK +cNL +exw +exw +bpa +psb +psb +olO +olO +olO +rpi btU oYm kht @@ -181530,7 +183332,7 @@ scw ilN vIZ nxM -bgd +bPk kmM sYU iio @@ -181714,14 +183516,14 @@ tjo tjo tjo tjo -tjo -tjo -tjo -tjo -tjo -tjo -tjo -tjo +iDt +iDt +iDt +iDt +iDt +iDt +iDt +pOl tjo tjo tjo @@ -181729,35 +183531,35 @@ thA thA thA thA +thA xMq -xMq -mdZ -shh -agt -ryO -mdZ -iyb -doJ -qis -qis -qis -qis -doJ -nJC -cgz -doJ -vZY -dMS -dyw -sEp -sEp -sEp -jWp -dMS -dMS -fwB -fwB -btU +qMT +bcf +vEC +lvv +efS +aXu +gPB +hEV +djl +bOn +jre +jre +igu +jre +jre +jre +fWd +jre +jre +fuH +phl +ubi +psb +csV +mtt +mtt +mtt btU btU btU @@ -181970,15 +183772,15 @@ tjo tjo tjo tjo +iDt +iDt +iDt tjo -tjo -tjo -tjo -tjo -tjo -tjo -tjo -tjo +iDt +iDt +pOl +iDt +edM tjo tjo tjo @@ -181986,37 +183788,37 @@ thA thA thA thA +thA xMq -mdZ -mdZ -fpW -agt -wJf -mdZ -rKd -rJL -nVX -uEE -nvt -yjP -hzQ -hzQ -nro -hzQ -tyj -dMS -dEB -dMS -dMS -dMS -dMS -dMS -fwB -fwB -fwB +jre +jre +dvZ +jre +jre +ydG +qfr +oVr +hFj +jre +jre +nla +qhV +rhS +rhS +int +kWG +xEP +jre +pJq +phl +bdX +psb +uwd +rWh +mtt +hFN btU nTA -kJm nyQ meL efo @@ -182227,15 +184029,15 @@ tjo tjo tjo tjo +pOl +iDt tjo tjo -tjo -tjo -tjo -tjo -tjo -tjo -tjo +iDt +iDt +iDt +ijY +iDt tjo tjo tjo @@ -182243,37 +184045,37 @@ thA thA thA thA +thA xMq -mdZ -exY -shh -cvz -ihG -mdZ -gRl -nJC -mui -doJ -yjP -eIa -wun -dOQ -lZG -fDt -hCN -dMS -dEB -dMS -jBB -pKe -rZK -qPE -fwB -fwB -fwB -btU -wvL -jnY +xMq +jre +uBD +lcm +jre +jre +jNe +jNe +jre +jre +nla +vkO +pjk +eqk +nla +ukt +acG +jre +jre +gSU +phl +hvi +psb +hLh +amq +rWh +mtt +ioK +waH cWJ dYX pps @@ -182428,71 +184230,71 @@ tjo tjo tjo tjo -ovP -ovP -ovP -ovP -ovP -ovP -ovP -ovP -ovP -ovP -ovP -ovP -ovP -ovP -ovP -ovP -ovP -ovP -ovP -xMq -gjq -gjq -gjq -gjq -gjq -gjq -gjq -xMq -thA -thA -thA -ovP -ovP -ovP -ovP -ovP -tjo -tjo -tjo -tjo -tjo -tjo -tjo -tjo -tjo -tjo -tjo -tjo -tjo -tjo -tjo -tjo -tjo -tjo -tjo -tjo -tjo -tjo +ovP +ovP +ovP +ovP +ovP +ovP +ovP +ovP +ovP +ovP +ovP +ovP +ovP +ovP +ovP +ovP +ovP +ovP +ovP +xMq +gjq +gjq +gjq +gjq +gjq +gjq +gjq +xMq +thA +thA +thA +ovP +ovP +ovP +ovP +ovP +tjo +tjo +tjo +tjo +tjo +tjo +tjo +tjo +tjo +tjo +tjo +tjo +tjo tjo tjo tjo tjo tjo tjo +iDt +iDt +tjo +tjo tjo +iDt +iDt +iDt +iDt +iDt tjo tjo tjo @@ -182500,37 +184302,37 @@ thA thA thA thA +thA xMq -mdZ -xDr -esn -agt -auN -mdZ -nWw -mUU -csg -doJ -skV -tCT -pOJ -bIW -vLx -hkl -jyh -dMS -dEB -dMS -jBB -mQk -mCb -wMP -fwB -fwB -fwB -btU +xMq +jre +sJu +fWE +tjs +qFD +qFD +rhS +rhS +wQx +vHe +dZC +jre +vBt +jre +jre +jre +jre +drw +drw +bpa +psb +psb +uOz +amq +hai mtt -tHe +ioK +srG aCl tHe tHe @@ -182740,16 +184542,16 @@ tjo tjo tjo tjo +iDt tjo tjo tjo tjo -tjo -tjo -tjo -tjo -tjo -tjo +iDt +iDt +iDt +iDt +pOl tjo tjo tjo @@ -182758,36 +184560,36 @@ thA thA thA xMq -mdZ -mdZ -shh -agt -mYr -mdZ -hLw -nJC -jBb -nJC -wZK -wNQ -lPm -men -eLx -iDg -jHE -dMS -ylk -dMS -tWD -klY -mQk -fwB -fwB +xMq +xMq +jre +nIY +jwf +cdO +ply +gEt +gwb +tOC +ubp +mUW +jre +jre +vKT +rng +qjd +vyy +oRf fwB -btU -btU -iWN -ofm +drw +nbl +psb +qnv +amq +wvL +mtt +mtt +ioK +waH nHc nHc ofm @@ -183003,10 +184805,10 @@ tjo tjo tjo tjo -tjo -tjo -tjo -tjo +iDt +iDt +iDt +iDt tjo tjo tjo @@ -183016,35 +184818,35 @@ thA thA xMq xMq -mdZ -veL -agt -ryO -mdZ -sxW -doJ -wkq -doJ -lSl -aTm -fYh -oXe -miR -nmS -vUi -dMS -twX -gsW -czm -fpb -fLa -fwB -fwB -fwB -fwB -btU +jre +jre +jre +jre +iRS +jre +jre +jre +jre +jre +jre +jre +bvc +rXB +udR +tkY +liv +liv +tkY +jKL +rpJ +psb +uOz +amq +wvL +fDp +csV +ioK waH -qnv iyF xyG jnY @@ -183064,7 +184866,7 @@ ffQ xDb clI iDt -pDR +pco iDt xMq xMq @@ -183260,49 +185062,49 @@ tjo tjo tjo tjo +iDt +iDt +iDt +iDt tjo tjo tjo -tjo -tjo -tjo -tjo -thA thA thA thA xMq xMq -mdZ -bmw -oRw -mdZ -mdZ -rxY -rxY -rxY -vKC -rxY -fzK -bjZ -tAe -mgR -qYo -xFv -dMS -eHW -dMS -fUn +jre +jre +uye +ohk +aAk +nNe +xHv +qbY +jre +nmi +aoi +ssm +fpt +mQk +qKw mQk -oLV fwB fwB fwB fwB +drw +qEh +psb +qnv +amq +wvL +btU +hlQ btU gfy -olO -dYr +inP xMv wav pWi @@ -183518,51 +185320,51 @@ tjo tjo tjo tjo -tjo -tjo -tjo -tjo -tjo +iDt +iDt +iDt +iDt +iDt tjo thA thA thA -thA xMq xMq -mdZ -jXD -mCX -let -let -kWs -uFW -lDp -nNQ -pNp -xTX -ikT -qCz -gQj -xoq -dMS -dMS -kbU -dMS -fvs +jre +iDB +mPQ +wSs +kfk +wjR +fMu +nla +jre +nMC +fpm +kBO +jBB +mQk +lEn +mQk mQk -dbb -fwB fwB +nRy fwB +drw +cQV +psb +psb +uOz +wvL btU +sEI btU -amq poY hWX goc -hai -csV +btU +btU ako goJ jeI @@ -183776,49 +185578,49 @@ tjo tjo tjo tjo -tjo -tjo -tjo -tjo -tjo -thA +iDt +iDt +ebd +iDt +iDt thA thA thA xMq xMq -mdZ -bEp -tGZ -tGZ -gVn -aNR -idE -uzc -iHy -rVO -xGZ -ukw -umS -vVh -mXt jre -tjs -vbz +wEq +ezd +nla +uxU +bRx +ayY +nla jre -xei -pAM -hun -fwB -fwB +lHr +fQs +xOi +mQk +mQk +riM +mQk +fLa +eaM +cqs fwB +drw +xxo +gcB +psb +hLh +hai btU dzr -rcU -srG -gEX +btU +xkT +kKk pWG -jRm +btU kKa ako wlF @@ -184034,41 +185836,41 @@ tjo tjo tjo tjo -tjo -tjo -tjo -tjo -thA -thA +iDt +pOl +iDt +iDt thA thA thA xMq -mdZ -vKn -tGZ -tGZ -gVn -rxY -dmD -mnE -xEx -jjW -jre -tRA -jre -hYs -jre +xMq jre +mMI +cBJ +nla +kRj nNe +ovZ +pGg jre -jre -lOt -nep -ksK -fwB -fwB +lHr +njz +qYC +qOB +mQk +bLf +hAS +lJc +xbB +gxz fwB +drw +xxo +cem +psb +hai +csV btU gCG cge @@ -184293,43 +186095,43 @@ tjo tjo tjo tjo -tjo -tjo -thA -thA +iDt +iDt thA thA thA xMq -mdZ -mdZ -kgs -tGZ -kdD +xMq jre jre +xnf +rdq +aAk +nNe +hnK +rXY jre jre +tWY jre jre -xjj jre +twS jre jre -lAB -lqs jre -xhz -kAD -wYs -ksK -ksK -fwB -fwB +jre +drw +drw +xxo +fuH +psb +olO +ese btU cJa -fDp -xFG +oEH +klS vAO jUB oXs @@ -184551,43 +186353,43 @@ tjo tjo tjo tjo -tjo -thA -thA +iDt +iDt thA thA thA xMq xMq -mdZ -mdZ -vxx -eaB -fwf -tlr -tlr -cND -fRG -fRG -tlF -cND -fRG -fRG -fRG -tlF jre -mrX -lYY -boK -ksK -fuH +jre +jre +jre +udf +jre +jre +jre +wOC +oYC +wSs +nla +cSO +hYt +nla +wSs +tes +jre +jre +jre +kFF +jre +jre fuH fuH btU -btU -btU -btU -btU +mkN +meW +xFG +qad jUB srM skU @@ -184808,43 +186610,43 @@ tjo tjo tjo tjo -tjo -thA -thA -thA +iDt +iDt +iDt thA thA thA xMq xMq -mdZ -iQf -xqA -jre -jre -jre -diH +xMq jre +igu +kvT +pZO +jHL +jHL +jSp jre +jNe jre -eXU +tSO jre +dQN jre +cpO jre +gVs +hGg wSs +vTp jre -jre -jre -jre -jre -fuH -fuH -fuH fuH fuH -xMq -xMq -xMq +btU +iWN +cRN +jFA +jRm jUB ksH yaJ @@ -185064,44 +186866,44 @@ tjo tjo tjo tjo -tjo -thA -thA -thA -thA +iDt +iDt +iDt +iDt +iDt thA thA thA xMq xMq -mdZ -mru -iAa -mdZ -xMq jre -diH jre -rYT -lmB -cbS +kUW jre -gtj +eet dQN +kEr +jre +rYT +sOX +aGk +jre +jhu +jre +mza +awF wSs wSs wSs -wSs -wSs +xwx jre fuH fuH -fuH -fuH -xMq -xMq -thA -xMq +btU +vrr +rcU +gEX +eML xDb jUB aVU @@ -185320,45 +187122,45 @@ tjo tjo tjo tjo -tjo -tjo -thA -thA -thA -thA -thA +iDt +iDt +iDt +iDt +iDt +iDt thA thA thA xMq -mdZ -qNc -lvu -mdZ xMq +xMq +jre +uiv jre -uOS -gAM +jre +jre +bzX +vpJ +gOd oTx -wDB -vyj +hIE jre vFg -vFg -vFg -xwx -vTp jre -irz +jre +jre +vyN +jre +kUW +jre jre fuH fuH -fuH -xMq -xMq -thA -thA -xMq +btU +btU +btU +btU +btU iYH qsG aqp @@ -185576,33 +187378,33 @@ tjo tjo tjo tjo -tjo -tjo +iDt +iDt tjo thA -thA -thA -thA -thA +iDt +iDt +iDt +iDt thA thA thA xMq -tiY -aIB -aIB -tiY xMq jre -lvF +dla jre -sDs -sib -cHR +xMq jre -kWa -djH +gFt jre +lvF +vUn +lvF +jre +aLh +djH +uGY jre jre jre @@ -185833,22 +187635,22 @@ tjo tjo tjo tjo +iDt tjo tjo -tjo -thA -thA -thA -thA thA thA +iDt +iDt +iDt thA thA +iDt rcY scw -scw -scw -iDt +uNG +aIB +tiY xMq jre jre @@ -185863,7 +187665,7 @@ hMw jre xMq jre -nmg +dla jre iDt thA @@ -186095,14 +187897,14 @@ tjo tjo thA thA -thA -thA -thA -thA -thA -thA -rcY iDt +iDt +iDt +iDt +iDt +iDt +rcY +luR scw scw iDt @@ -186121,8 +187923,8 @@ jre xMq tiY aIB -tiY -iDt +dhH +grg iDt thA thA @@ -186353,12 +188155,12 @@ tjo thA thA thA -thA -thA -thA -thA -thA -mJZ +iDt +iDt +iDt +iDt +iDt +tHF scw iDt scw @@ -186543,78 +188345,78 @@ tjo tjo tjo tjo -ovP -ovP -ovP -ovP -ovP -ovP -ovP -ovP -ovP -ovP -thA -thA -thA -thA -thA -gjq -gjq -gjq -gjq -gjq -gjq -thA -thA -thA -thA -thA -tjo -tjo -tjo -tjo -tjo -tjo -tjo -tjo -tjo -tjo -tjo -tjo -tjo -tjo -tjo -tjo -tjo -tjo -tjo -tjo -tjo -tjo -tjo -tjo -tjo -tjo -tjo -tjo -tjo -tjo -tjo -tjo -tjo -tjo -tjo -tjo -tjo -tjo +ovP +ovP +ovP +ovP +ovP +ovP +ovP +ovP +ovP +ovP +thA thA thA thA thA +gjq +gjq +gjq +gjq +gjq +gjq +thA +thA +thA +thA +thA +tjo +tjo +tjo +tjo +tjo +tjo +tjo +tjo +tjo +tjo +tjo +tjo +tjo +tjo +tjo +tjo +tjo +tjo +tjo +tjo +tjo +tjo +tjo +tjo +tjo +tjo +tjo +tjo +tjo +tjo +tjo +tjo +tjo +tjo +tjo +tjo +tjo +tjo thA thA thA thA +iDt +iDt +iDt +iDt rcY tSs iDt @@ -186868,10 +188670,10 @@ thA thA thA thA -thA -thA -thA -thA +iDt +iDt +iDt +iDt xMq iDt scw @@ -187126,7 +188928,7 @@ thA thA thA thA -thA +iDt iDt iDt rcY @@ -187138,7 +188940,7 @@ iDt iDt iDt iDt -cCb +pOl iDt iDt iDt @@ -187173,12 +188975,12 @@ xMq alM oxO ffe -lVs -abe -abe -biI -abe -eOS +bOY +bOY +bOY +iGU +bOY +bOY qLY eGN lZX @@ -187430,12 +189232,12 @@ xMq alM oxO ffe -qGe -abe -cku -uUn -xNa -eOS +bOY +bOY +bOY +nkM +bOY +bOY qLY vfe tsa @@ -187647,9 +189449,9 @@ rcY iDt scw iDt -scw -scw -scw +jmo +keA +vQz iDt iDt scw @@ -187687,12 +189489,12 @@ xMq alM oxO ffe -viR -abe -abe -bOT -abe -eLb +dEi +bOY +bOY +nSG +bOY +bOY qLY tkP fPv @@ -187905,7 +189707,7 @@ iDt iDt iDt tBs -baj +dGZ tBs iDt iDt @@ -187945,10 +189747,10 @@ alM nsp ffe qLY -ctF -uHS -ujp -abe +qLY +qsd +bCR +bOY ctF qLY qLY @@ -188419,7 +190221,7 @@ tBs tBs tBs tBs -tNA +rHR tBs tBs tBs @@ -188466,24 +190268,24 @@ euM pMF sfv xyn -dmj +xtV wPd lVt -asb +qbv pMF -xCh -cbP +lVQ +wTE pMF -ihN -doK +kzo +ucW mBP -rjT -rXD +cnm +hGF pMF -pfJ -jrc +icZ +kyR pMF -mbb +kEA rkl nPI oxO @@ -188671,7 +190473,7 @@ xMq tBs pwv sAu -nsz +rqn tBs nHQ oik @@ -188688,7 +190490,7 @@ ebB efM pgo rcY -iDt +rSQ scw iDt iDt @@ -189204,9 +191006,9 @@ awy rcY iDt iDt -ubd -scw -ubd +svz +keA +ddv iDt iDt iDt @@ -189232,7 +191034,7 @@ ffe oqd vHq aZk -pMF +ndd pMF rdl iQM @@ -189462,7 +191264,7 @@ qau iDt xMq wrX -xak +efN xCj xMq thA @@ -189976,7 +191778,7 @@ wrX wrX wrX wrX -dTv +pSP wrX wrX xMq @@ -191806,7 +193608,7 @@ kAH mHu jlj tUo -aQn +jSR hFb vqv wQi @@ -192063,7 +193865,7 @@ uIf laa qKt tUo -aQn +jSR hFb vqv qiN @@ -192320,7 +194122,7 @@ inh mWj aNu tPG -xEQ +rWq qaL vqv brt @@ -192577,7 +194379,7 @@ opD mxc hFb hFb -fcj +qRO mEL vqv fkN @@ -192834,7 +194636,7 @@ opD jGR hFb mzb -rEj +nwq rRl vqv wZV @@ -193091,7 +194893,7 @@ opD jGR hFb hFb -fcj +qRO rRl vfI vUY @@ -193346,9 +195148,9 @@ odm odm nqy jGR -fcj -fcj -fcj +qRO +qRO +qRO rRl ndb bnZ @@ -193596,14 +195398,14 @@ thA thA rcY iDt -uIf -uIf -uIf -uIf -roW -roW -bId -gcy +qlW +qlW +qlW +qlW +jwQ +jwQ +hkO +pfm jJG jJG plX @@ -193853,12 +195655,12 @@ thA thA rcY iDt -fCS -iwq -cuB -iCe -lgP -iCe +rNX +obq +mSh +wKn +tqn +wKn vcH gnq xEF @@ -194110,12 +195912,12 @@ thA thA rcY iDt -fCS -ocd -bqX -rmG -ryX -sqH +rNX +tFx +nDF +rRZ +gBF +gHW qSk sbd rEh @@ -194367,12 +196169,12 @@ thA thA rcY iDt -fCS -iwq -evc -wKh -aEK -wKh +rNX +obq +xSZ +pME +qlB +pME odf sbd jaY @@ -210172,7 +211974,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -210429,7 +212231,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -210686,7 +212488,7 @@ wNO wNO wNO wNO -wNO +bln hHG hHG hHG @@ -210943,7 +212745,7 @@ wNO wNO wNO wNO -wNO +bln hHG hHG hHG @@ -211200,7 +213002,7 @@ wNO wNO wNO wNO -wNO +bln hHG hHG hHG @@ -211457,7 +213259,7 @@ wNO wNO wNO wNO -wNO +bln hHG hHG hHG @@ -211714,7 +213516,7 @@ wNO wNO wNO wNO -wNO +bln hHG hHG hHG @@ -211971,7 +213773,7 @@ wNO wNO wNO wNO -wNO +bln hHG hHG hHG @@ -212228,7 +214030,7 @@ wNO wNO wNO wNO -wNO +bln hHG hHG hHG @@ -212485,7 +214287,7 @@ wNO wNO wNO wNO -wNO +bln hHG hHG hHG @@ -212742,7 +214544,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -212999,7 +214801,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -213256,7 +215058,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -213513,7 +215315,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -213770,7 +215572,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -214027,7 +215829,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -214284,7 +216086,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -214541,7 +216343,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -214798,7 +216600,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -215055,7 +216857,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -215312,7 +217114,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -215569,7 +217371,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -215826,7 +217628,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -216083,7 +217885,7 @@ wNO wNO wNO uer -otC +vbG hHG hHG hHG @@ -216340,7 +218142,7 @@ wNO wNO wNO aaX -otC +vbG hHG hHG hHG @@ -216597,7 +218399,7 @@ wNO wNO wNO fhB -otC +vbG hHG hHG hHG @@ -217368,7 +219170,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -217625,7 +219427,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -217882,7 +219684,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -218139,7 +219941,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -218396,7 +220198,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -218653,7 +220455,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -218910,7 +220712,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -219167,7 +220969,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -219424,7 +221226,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -219681,7 +221483,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -219938,7 +221740,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -220195,7 +221997,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -220452,7 +222254,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -220709,7 +222511,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -220966,7 +222768,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -221223,7 +223025,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -221480,7 +223282,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -221737,7 +223539,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -221994,7 +223796,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -222251,7 +224053,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -222508,7 +224310,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -222765,7 +224567,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -223022,7 +224824,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -223279,7 +225081,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -223536,7 +225338,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -223793,7 +225595,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -224050,7 +225852,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -224307,7 +226109,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -224564,7 +226366,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -224821,7 +226623,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -225078,7 +226880,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -225335,7 +227137,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -225592,7 +227394,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -225849,7 +227651,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -226106,7 +227908,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -226363,7 +228165,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -226620,7 +228422,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -226877,7 +228679,7 @@ wNO wNO wNO wNO -wNO +bln hHG hHG hHG @@ -227134,7 +228936,7 @@ wNO wNO wNO wNO -wNO +bln hHG hHG hHG @@ -227391,7 +229193,7 @@ wNO wNO wNO wNO -wNO +bln hHG hHG hHG @@ -227648,7 +229450,7 @@ wNO wNO wNO wNO -wNO +bln hHG hHG hHG @@ -227905,7 +229707,7 @@ wNO wNO wNO wNO -wNO +bln hHG hHG hHG @@ -228162,7 +229964,7 @@ wNO wNO wNO wNO -wNO +bln hHG hHG hHG @@ -228419,7 +230221,7 @@ wNO wNO wNO wNO -wNO +bln hHG hHG hHG @@ -228540,7 +230342,7 @@ kLZ jPc xKj hyY -pdR +dGG huI gbv maT @@ -228676,7 +230478,7 @@ wNO wNO wNO wNO -wNO +bln hHG hHG hHG @@ -228765,7 +230567,7 @@ lJO qzs jnV lJO -iWO +sHy gHS iMT hqx @@ -228933,7 +230735,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -229190,7 +230992,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -229447,7 +231249,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -229704,7 +231506,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -229961,7 +231763,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -230218,7 +232020,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -230475,7 +232277,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -230732,7 +232534,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -230989,7 +232791,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -231246,7 +233048,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -231323,7 +233125,7 @@ nWf prE gDS aXY -cBj +iPR lJO hEI hEI @@ -231352,7 +233154,7 @@ pdf pdf wBb tKI -cnU +pPE alT dcs kin @@ -231503,7 +233305,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -231760,7 +233562,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -232017,7 +233819,7 @@ wNO wNO wNO wNO -wNO +bln hHG hHG hHG @@ -232274,7 +234076,7 @@ wNO wNO wNO wNO -wNO +bln hHG hHG hHG @@ -232531,7 +234333,7 @@ wNO wNO wNO wNO -wNO +bln hHG hHG hHG @@ -232788,7 +234590,7 @@ wNO wNO wNO wNO -wNO +bln hHG hHG hHG @@ -233045,7 +234847,7 @@ wNO wNO wNO wNO -wNO +bln hHG hHG hHG @@ -233302,7 +235104,7 @@ wNO wNO wNO wNO -wNO +bln hHG hHG hHG @@ -233559,7 +235361,7 @@ wNO wNO wNO wNO -wNO +bln hHG hHG hHG @@ -233816,7 +235618,7 @@ wNO wNO wNO wNO -wNO +bln hHG hHG hHG @@ -233928,7 +235730,7 @@ ozH bZg gst tZR -nsq +fQi dOw dOw yhe @@ -234073,7 +235875,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -234185,7 +235987,7 @@ gst oiK bLW xjP -sXf +nkG gxO dKK xmN @@ -234330,7 +236132,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -234587,7 +236389,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -234844,7 +236646,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -235101,7 +236903,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -235358,7 +237160,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -235615,7 +237417,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -235697,7 +237499,7 @@ bZx bZx bZx bZx -snv +gri kQi oWk bWn @@ -235773,7 +237575,7 @@ mNY kCn mNY dUn -ptx +eEm cpH kbJ kbJ @@ -235784,7 +237586,7 @@ epY vWe kIt kMY -qde +wRc lha kAK iLY @@ -235872,7 +237674,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -235954,7 +237756,7 @@ bZx bZx bZx bZx -snv +gri krQ skZ bWn @@ -236129,7 +237931,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -236211,7 +238013,7 @@ bZx bZx bZx bZx -snv +gri krQ gYp bWn @@ -236247,7 +238049,7 @@ dkb kmi iYb xaA -crH +vXV wjv pec fJl @@ -236386,7 +238188,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -236468,7 +238270,7 @@ bZx bZx bZx bZx -snv +gri krQ thI bWn @@ -236643,7 +238445,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -236725,7 +238527,7 @@ bZx bZx bZx bZx -snv +gri krQ gYp bWn @@ -236803,7 +238605,7 @@ mNY akL tvF tvF -izF +aYS gTK ruO fKe @@ -236900,7 +238702,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -236982,7 +238784,7 @@ bZx bZx bZx bZx -snv +gri gMK huT bWn @@ -237030,7 +238832,7 @@ ylU bep paM xxQ -keX +nnM kzO gdP ykL @@ -237157,7 +238959,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -237239,7 +239041,7 @@ bZx bZx bZx bZx -snv +gri lwO vTg bWn @@ -237414,7 +239216,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -237479,7 +239281,7 @@ feJ uGr uGr iDq -mNj +pLx lAL gPp iDq @@ -237500,7 +239302,7 @@ wqx gEb gYp bWn -bMC +tEn cGt wRI qdE @@ -237510,9 +239312,9 @@ ntK mQb bln jII -mpy -ycw -bmz +gMx +lsH +jJr qWZ qWZ qWZ @@ -237671,7 +239473,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -237776,7 +239578,7 @@ grA fwQ nOH gxU -gZq +jJR ybv ybv ybv @@ -237928,7 +239730,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -238057,7 +239859,7 @@ dnq vrX pua paM -iIW +pEY vJI uud gdP @@ -238088,7 +239890,7 @@ mNY ixG aPf dzJ -puI +neV twt mEw sSJ @@ -238185,7 +239987,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -238263,9 +240065,9 @@ sDl sDl sDl psN -lYz +nUI dkY -oLW +nCW hzY bRn fng @@ -238332,7 +240134,7 @@ dPT pRj pMu gVD -dxJ +gSQ ajF qwe uJH @@ -238442,7 +240244,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -238528,11 +240330,11 @@ pfe aeQ mdX pfe -duq -pyW -stp -raL -rxA +ktK +fGr +olt +qSP +eSm pfe pfe jII @@ -238699,7 +240501,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -238784,7 +240586,7 @@ fEC gMK fng rHc -kWK +oOt uog vVY uog @@ -238792,7 +240594,7 @@ uog nfU bzI uog -cNd +qzU mny dnq wmK @@ -238856,7 +240658,7 @@ kKH pRj eAj sro -kjh +apL qkT kzA whW @@ -238956,7 +240758,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -239041,7 +240843,7 @@ vDb vvh vPC pvm -wxr +tJZ cvC kQc iYG @@ -239049,7 +240851,7 @@ kQc kOV kQc kQc -rki +kkr gOy gOy fKF @@ -239115,7 +240917,7 @@ fFy mNY bTq xUP -ouE +fQU rpF twt fcg @@ -239213,7 +241015,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -239298,7 +241100,7 @@ eEZ nUJ qbA csB -kOF +stB tny dLo fBF @@ -239306,7 +241108,7 @@ xUU wYZ aKI xUU -nKG +avd qJV vBh fiE @@ -239470,7 +241272,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -239629,7 +241431,7 @@ vkz uoF pcg deD -dsk +fLH qnC isX eBI @@ -239727,7 +241529,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -239874,7 +241676,7 @@ vvv tTV jtA bID -wUE +rlL miw gCK cMd @@ -239984,7 +241786,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -240139,7 +241941,7 @@ dcC jGB akz sCA -pIF +aSw ojv bAT eri @@ -240241,7 +242043,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -240384,7 +242186,7 @@ oyj gwK nEV bry -jkx +fDM fLq hro tKi @@ -240398,7 +242200,7 @@ wHj mBB juH ojv -htc +hut mDw jDT qKQ @@ -240498,7 +242300,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -240594,9 +242396,9 @@ vXU drZ yfF jII -mpy -wtb -bmz +gMx +oas +jJr qWZ qWZ qWZ @@ -240755,7 +242557,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -240844,14 +242646,14 @@ ygB mJO oCF ygB -mJO +bLa oCF ygB lBD jII jII jII -fzy +ifd xwC utR pAZ @@ -241012,7 +242814,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -241106,9 +242908,9 @@ oTh ygB fEZ ygB -vWB -cDQ -kyL +hXm +fZO +uLR sNI bUH pAZ @@ -241148,7 +242950,7 @@ uwO rSx kRP kRP -lSw +klE cAR kNk tmA @@ -241269,7 +243071,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -241360,12 +243162,12 @@ rMN alO alO qCI -sJk -uGa -rKe -iMo -iMo -mJD +xKT +alO +qhF +kVj +kVj +qsY xwC kKX pAZ @@ -241387,7 +243189,7 @@ xLF lpM oGQ wKw -vFb +ljG mhQ hUV aks @@ -241526,7 +243328,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -241619,7 +243421,7 @@ iPm iPm iPm iPm -rzk +mVW hay cfr dct @@ -241667,7 +243469,7 @@ kQf hDh vnt keP -kRw +oRB ctr avk gxP @@ -241678,7 +243480,7 @@ nKj fwW uxp afK -bOy +wiy vfU pdV hqV @@ -241783,7 +243585,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -241874,12 +243676,12 @@ wVD uja uja uja -kMD +bsn uja uja uja uja -hcv +vdO vrX utR pAZ @@ -242040,7 +243842,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -242130,13 +243932,13 @@ qIU keL uja jHG -dFP +yjF vVw -dFP +yjF qSh -rKS +hsB uja -fpP +jcy iuv utR pAZ @@ -242297,7 +244099,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -242386,14 +244188,14 @@ asa kCu gHj uja -ewd -ehm -yba -bwr -qKX +sfD +gjT +szK +upx +uOy hsB uja -dnq +ise iuv utR pAZ @@ -242554,7 +244356,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -242644,7 +244446,7 @@ urd xTU uja aty -ehm +gjT uja uja uja @@ -242811,7 +244613,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -242883,13 +244685,13 @@ lbk sDl sDl skl -pwx +yhL deY skl gDz xlH kbN -jOQ +dym skl ygB ygB @@ -242901,25 +244703,25 @@ maB fpa uja oiz -ehm +gjT uja kDz -chB +xVc twU uja -gQZ -iuv -dnq -mny -mny -mny -mny -mny +bvu +eXZ +vBh +qMf +qMf +qMf +qMf +qMf wVR mfW -kXE +toT mfW -sbT +aeF eta brp mfW @@ -243130,7 +244932,7 @@ ihb bnM iRM kkl -qFq +tAK gUs ykw lbk @@ -243154,17 +244956,17 @@ ygB ybE eKJ ulk -nlI +rgM uja uja uja -eQN +jnh uja uja uja hsB uja -ise +uuh lyh iuv vrX @@ -243174,7 +244976,7 @@ iuv iuv iuv vrX -rpG +maX iuv xNF ylU @@ -243411,28 +245213,28 @@ ipx seH lvY mmA -vTA +apC uja vmp vmp -kxN +uNp uja oUO -oUG +hxB xWG uja -fbt -aPo -qnf -xzh -otQ -dnq -apb -dby -otQ -dnq -mpy -dnq +kyL +eph +kyL +kyL +jnU +rbh +kZm +njM +rbh +rbh +qPD +jIY dKW ylU lDo @@ -243654,12 +245456,12 @@ bln bln fsm bUx -cCC -cBC -mgw +uek +wph fnS skl -iHz +qpU +xsm jOQ skl pOo @@ -243667,32 +245469,32 @@ piC ygB fXo aos -rBn -sYb -nkM -nkQ -sjL -aMX +cUH +rfW +beF +vme +lrE +gUw uja uja uja hsB uja -hmb -eJq -mWp -exw -exw +mdZ +hMM +lEb +mdZ exw hmb -exw +hmb exw hmb hmb exw -ocj -hWP -ocj +tLF +gIf +dBA +gIf azw azw mao @@ -243911,20 +245713,20 @@ bUx bUx bUx bUx -wnq -dqv -cKn +maM +aXx fnS skl -mwH -fnS +eoV +npZ +qQV skl gmW gmW gmW ltV -mAz -oSk +tip +gxT ltV uja mqy @@ -243932,21 +245734,21 @@ mqy tUn uja jlP -mfz +azt twU uja -idw -eZj +eUC +yjr +nvw +nPS +eav +bBa +iiB +ycE iuE -bPg -uoz -kDP -kmQ -xgy -xgy -uTN -jBq -hmb +gWl +hKn +lHi lso dEV bai @@ -244162,26 +245964,26 @@ fhu bLI ykw skl +blX deY -rab -skl -dzx -tef skl +kQE +rab skl skl skl hDV skl byP -eXY -eNz -rjs -cdM -bXj -pSQ -rza -oBP +blX +eHX +ceU +bZU +efU +qfJ +seB +mcT +xwL bVI uja uja @@ -244192,18 +245994,18 @@ uja uja uja uja -pBr -csR -njn -pix -reh -joG -jVq -xgy -xgy -tbv -xJF -hmb +scG +cKJ +hJS +jMJ +nyj +fju +lvy +fLG +nxc +lgb +xre +lHi lso dEV bai @@ -244419,18 +246221,18 @@ ekW vRN fEA uHF -eqq -eqq +jyE +jyE qdK eqq +ejY eqq eqq eqq eqq +mkM eqq -eqq -eqq -pTf +fjO qvh skl erH @@ -244438,29 +246240,29 @@ ffZ vfW vfW mZK -dZB -uBt -coL -gmW -hnB -esu -hMk -jLn -oYH -eBi -duV -fKw -csR -vRE -weY -mpU -rFr -nAM -toH -toH -bEq -kHV -hmb +lvk +qiG +czo +kKL +rDI +kKL +uUw +cmK +css +rxY +cQp +dpj +uil +sHi +shh +tjA +xgy +xgy +ffr +nxc +lgb +uSE +hyQ lso dEV kHI @@ -244675,49 +246477,49 @@ aML iLv hSJ ykw -deY -deY -deY -deY -kQE -deY +fNz +wSc +blX +jee +blX +oCw fhz -deY +blX fhz -xNk +acg byP mOf -fhz -jPv +aYO +mOf skl -hYC +nJq eOl -vco -owU -owU -tkV -qwP -kOB -gmW -ofT -ePl -uDV -ojD -ykZ -vqD -keq -asJ -qYD -oUK -gEL +uOe +day +day +sRc +lPQ +szt +kKL +kKL +kKL +csZ +oPr +qGh +rxY +rra +iFz +nQm +ktY +gMi mpU -qFC -kTO -wvc -kTO -pXz -sIm -hmb +hbL +xgy +ivC +rRs +jik +lJW +lHi lso dEV bai @@ -244936,53 +246738,53 @@ rFP rFP rFP skl -rFP -rFP -rFP skl -xSt -deY +utW +kiI +skl +blX +tAt skl -eYL +qMD cQx -eYL +qMD skl eDy vfW -suE +qrM nUj mpH -xbc -nXn -wpV -gmW -uiw -hWh -hGI -tCs -exw -exw -exw -tqZ -kvs -glQ -exw -exw -exw +skQ +fyL +kcs +kKL +igH +yhV +dCV +gyP +utG +rxY +bzF +dXR +mdZ +mdZ +mdZ exw exw exw +kXS exw exw exw +tLF cwh dEV -pNx +whg azw eub eyc qPt -uTc +ylm biR dmI tdE @@ -245187,51 +246989,51 @@ bln uFf bJE uFf -wNO -wNO -wNO -bln -bln bln +lBD bln bln +lBD bln skl +rWA skl -vXY skl -gfE -uBn -aut +gZV +ePd +skl +nSX +fgz +cnS skl cVa vfW -gMp +xqP iay dCF -xbc -nxY -eBk -gmW -exw -exw -hvr -exw -exw -jPa -mdZ -vlI -nHa -nHa -izC -hwM -aUY -igi -xbj -rdB +skQ +fYX +pYD +kKL +ddR +kKL +kKL +jZJ +pKo +rxY +fzK +wPe +fzK +jRA +rMm +sCX +sPS +vvn +xsy +wBr lEO -khA -lso +wqt +jae lso kjK bai @@ -245444,50 +247246,50 @@ bln uFf rXX uFf -wNO -wNO -wNO -bln -bln -bln -bln bln bln +mQb +ntK +mQb bln skl -xFi +bkM +oWV skl -ejg -nLg -ngH +lzc +jPv +osN +pfy +lzc +lZP skl -iMj -vfW -ewz -lDg -lDg -njx +aEx vfW -sfA -dIe -sUO -dIn -xFA -aTV -rQt -tGZ -bMu -iFc -mrF -iFc -bJA -mIB -uUV -fmD -fmD -fmD -wyQ -lso +cWz +cCe +cCe +kkb +lPQ +fsO +kKL +uLZ +jyN +kKL +mTL +uiV +ixp +edO +hjO +fzK +jRA +jRA +ptv +iBM +vYp +fWW +mMZ +bid +nzt lso lCi dEV @@ -245693,7 +247495,6 @@ wNO wNO wNO wNO -wNO bln bln bln @@ -245703,52 +247504,53 @@ bln bln bln bln -wNO -wNO -wNO -wNO bln bln bln bln +gDh skl -dOc -skl -skl +tSd skl skl +koj +deY +osN +hrd +vOd +mnn skl -iCQ +ruX vfW eOl vfW vfW lvk -lvk -xpo -gmW -whu -rtc -rtc -jJf -voM -etA -jFA -mnj -uVn -nnW -wvb -meB -meB -xWa -meB -meB +jiU +qVG +wpm +nBO +qPQ +kKL +kKL +llm +rxY +gFW +rrL +riB +nxj +gDY +crO +iBM +fVh +qlS +qSU hSq -mVh -mVh +pdC +pdC vwO hHg -bai +jyp azw uMx uTk @@ -245949,9 +247751,6 @@ wNO wNO wNO wNO -wNO -wNO -bln bln bln bln @@ -245960,51 +247759,54 @@ bln bln bln bln -wNO -wNO -wNO -wNO bln bln bln bln -sEB -sEB -sEB bln bln bln -gmW -uRo +aHh +ooL +skl +lsh +deY +deY +skl +edt +hqv +wHK +skl +mOH uRo uRo uRo nCu cZt cZt -cXN -gmW -jOY -tux -dsO -kQX -tGZ -mEZ -mdZ -jQo -dqd -bfZ -izC -bHG -rRy -rRy -mdy -fmD +qtG +kKL +lli +uar +gAt +kKL +nxw +fzK +kQx +poV +ahh +ezk +dzD +fwi +tsu +bpv +hLy +tsu lEO -aJh -lso -lso -aAa +far +cql +gVh +dEV bai azw nNU @@ -246206,9 +248008,6 @@ wNO wNO wNO wNO -wNO -wNO -bln bln bln bln @@ -246217,10 +248016,6 @@ bln bln bln bln -wNO -wNO -wNO -wNO bln bln bln @@ -246230,39 +248025,46 @@ bln bln bln bln +skl +fpF +deY +hJF +skl +skl +skl gmW gmW dGO dGO -vEi +tEs dGO dGO -vEi +tEs dGO dGO gmW -mdZ -gzw -kiB -kQX -kyZ -bFw -mdZ -rth -hid -mrF -ptO -jRA -jRA -jRA -ixH -aWI +gmW +tpZ +mGF +kKL +mcQ +gNc +gNc +oPd +qhQ +qhQ +wGm +ptv +iBM +cxT +nFQ +iEY ptO -ibI -lso -lso +wBa +cql +fqX dEV -bai +kIK azw pxV oQD @@ -246463,10 +248265,6 @@ wNO wNO wNO wNO -wNO -wNO -bln -bln bln bln bln @@ -246474,19 +248272,23 @@ bln bln bln bln -wNO -wNO -wNO -wNO -bln -bln bln bln bln bln bln bln +fsm bln +uer +yjo +skl +skl +qiL +qiL +skl +fsm +tlH gmW knl knl @@ -246498,28 +248300,28 @@ knl knl knl knl -mdZ -gzw -kiB -kQX -tGZ -nYQ -mdZ -hvl -hid -iFc -izC -jRA -jRA -jRA -fZo -nGz +gmW +ijw +bRO +kKL +vto +kVo +jrv +qJy +iew +pqZ +wGm +ptv +iBM +fXF +nFQ +jxr izC -yjX -mqq -mqq +tNH +vbI +gVh kjK -bai +arZ azw mwF sbc @@ -246720,21 +248522,14 @@ wNO wNO wNO wNO -wNO -wNO bln bln bln bln bln -bMz -bln bln bln -wNO -wNO -wNO -wNO +bMz bln bln bln @@ -246742,9 +248537,16 @@ bln bln bln bln +stJ bln bln -gmW +skl +qjn +iRa +skl +tlH +tlH +dGO knl knl aBf @@ -246755,28 +248557,28 @@ knl knl knl knl -mdZ -mdZ -nsf -dCk -wBR -mdZ -iWr -iWr -jgh -aoP -izC -eEz -izC -izC -eEz -izC -izC -tLF -lso -qGV +dGO +ksR +rEH +kKL +giH +qiA +uiq +iPP +iew +qhQ +wGm +fwi +tsu +tZo +cxD +tsu +lEO +szj +vbI +gVh dEV -jyp +bai hgh czS fVo @@ -246978,21 +248780,6 @@ wNO wNO wNO wNO -wNO -wNO -wNO -wNO -wNO -wNO -wNO -wNO -wNO -wNO -wNO -wNO -wNO -wNO -wNO bln bln bln @@ -247001,7 +248788,22 @@ bln bln bln bln -gmW +bln +bln +bln +bln +bln +bln +bln +bln +bln +gbM +iRa +iRa +gbM +tlH +tlH +dGO knl knl knl @@ -247012,30 +248814,30 @@ aBf knl knl knl -mdZ -qqx -shh -fgE -oSI -mdZ -umv -pyj -lnq -hnf -vlq -rga -vbb -pxs -iAJ -afv -ihf -uMu -lso -lso -dEV -bai +dGO +uar +bXb +kKL +xFz +jFu +qRF +tbE +iew +kea +wGm +ptv +iBM +gkH +rji +oqB +oNN +kGD +kGD +rbE +woX +jyp hgh -gca +qit xxg nDl uau @@ -247236,20 +249038,6 @@ wNO wNO wNO wNO -wNO -wNO -wNO -wNO -wNO -wNO -wNO -wNO -wNO -wNO -wNO -wNO -wNO -wNO bln bln bln @@ -247258,7 +249046,21 @@ bln bln bln bln -gmW +bln +bln +bln +bln +bln +bln +tlH +tlH +gbM +iRa +iRa +gbM +tlH +tlH +dGO knl knl knl @@ -247269,30 +249071,30 @@ knl knl knl knl -mdZ -tvI -shh -hBR -bxv -mdZ -kfY -fqc -rDF -sHB -rDF -sHB -chj -iqL -rDF -sHB -eBa -laP +dGO +uar +wla +kKL +eTT +ohP +kqo +qJy +iew +sBY +wGm +ptv +iBM +dpw +qMS +oVn +cKp +hKL lso -rvZ +jqZ dEV bai xjg -mUR +wiO mnF lKZ xGh @@ -247493,28 +249295,28 @@ wNO wNO wNO wNO +bln +bln +bln +bln wNO wNO wNO wNO wNO wNO -wNO -wNO -wNO -wNO -wNO -wNO -wNO -wNO -bln -bln -bln -bln -bln bln bln bln +tlH +tlH +tlH +uUq +gHL +iRa +gbM +tlH +tlH gmW xPW knl @@ -247526,26 +249328,26 @@ knl knl knl hNx -mdZ -lyW -shh -fgE -shh -mdZ -gsD -sHB -trl -nGb -rDF -sHB -rDF -cQv -rxK -cQv -qjK -ehA -avb -avb +gmW +sDM +gAt +kKL +xcO +fco +fco +gua +qhQ +qhQ +wGm +xtH +xKq +umc +aGf +rvO +lEO +uLJ +reX +mqq vSa fuY clK @@ -247751,6 +249553,8 @@ wNO wNO wNO wNO +bln +bln wNO wNO wNO @@ -247759,20 +249563,18 @@ wNO wNO wNO wNO -wNO -wNO -wNO -wNO -wNO -bln -bln -bln bln bln -bln -bln -bln -gmW +tlH +tlH +tlH +uUq +gHL +gHL +uUq +tlH +tlH +dGO knl knl knl @@ -247783,26 +249585,26 @@ knl aBf knl knl -mdZ -qqx -shh -fgE -shh -mdZ -uOH -rDF -rSK -jfZ -gyr -xdA -gyr -xdA -gyr -xdA -sSh -uMu -lso -lso +dGO +gdK +qgT +kKL +kKL +kKL +kVq +pgv +uGe +byO +qMI +pba +ion +sft +pNi +eVi +izC +izC +tLF +jgd qEM lso dCs @@ -248008,6 +249810,8 @@ wNO wNO wNO wNO +bln +bln wNO wNO wNO @@ -248016,20 +249820,18 @@ wNO wNO wNO wNO -wNO -wNO -wNO -wNO -wNO -bln -bln -ozo -bln bln bln bln +tlH bln -gmW +uUq +gHL +gHL +uUq +tlH +tlH +dGO knl knl knl @@ -248040,25 +249842,25 @@ knl knl knl knl -mdZ -mdZ -tDv -lqB -skf -mdZ -btp -ggD -lBy -cpY -pxF -iYi -iYi -iYi -iYi -ifw -cpY -cpY -rjP +dGO +uar +lli +dwq +any +kKL +vSu +iUi +fzK +orZ +gVX +dSs +dSs +dSs +iCS +vVA +gYN +izC +gdO lso vwO lso @@ -248265,6 +250067,8 @@ wNO wNO wNO wNO +bln +bln wNO wNO wNO @@ -248273,20 +250077,18 @@ wNO wNO wNO wNO -wNO -wNO -wNO -wNO -wNO -bln -bln -bln bln bln bln bln bln -gmW +kKL +oEC +gHL +kKL +tlH +tlH +dGO knl knl knl @@ -248297,26 +250099,26 @@ knl knl knl knl -mdZ -wEa -tki -kQX -vLn -mdZ -gHR -lxf -eBa -qZB -ftM -gtw -gtw -gtw -gtw -gtw -uqB +dGO +xPf +lRs +tml +kKL +kKL +aft +jsR cpY -cGZ -lCi +cpY +rEY +xWI +wuc +qod +xWI +pLo +cGI +cpY +tLF +ivJ vwO pxn xjg @@ -248522,11 +250324,8 @@ wNO wNO wNO wNO -wNO -wNO -wNO -wNO -wNO +bln +bln wNO wNO wNO @@ -248537,12 +250336,15 @@ wNO wNO bln bln -bln -bln -bln -bln -bln -bln +fsm +yjo +kKL +kKL +odZ +odZ +kKL +tlH +tlH gmW knl knl @@ -248554,28 +250356,28 @@ knl knl knl knl -mdZ -aWS -tGZ -ayk -vQN -mdZ -acx -xlv -oDm -qZB -gtw -xHi -aHZ -jwv -pYI -mVY -bmf +gmW +uar +hNK +bfy +kKL +pOC +ncc +syd cpY -tLF -cwO +gDB +sJg +sJg +sJg +sJg +sJg +sJg +kqP +cpY +lkr +lso vwO -qnU +nCz nKa dqO icA @@ -248607,7 +250409,7 @@ vQP rdG jzY xlh -jQt +oJK uep uep uep @@ -248778,61 +250580,61 @@ wNO wNO wNO wNO +bln +bln +bln +bln wNO wNO wNO wNO wNO wNO -wNO -wNO -wNO -wNO -wNO -wNO -wNO -wNO -bln -bln -bln -bln bln bln bln +efv bln +kKL +xIh +lli +eEr +kKL +kKL +kKL gmW gmW gmW gmW -vEi +tEs dGO dGO -vEi +tEs gmW gmW gmW -mdZ -mdZ -fCY -kQX -qaf -mdZ -ptp -ggD -ifg -qZB -gtw -xHi -vMq -eUw -jZt -jSm -cMs +gmW +kav +lCO +oEe +omS +mTA +nbO +hxY cpY -lkr +aMI +arW +fkk +fkk +fkk +fkk +spj +pBS +vrw +jlT lso vwO -nFm +dKf nKa kyW wKe @@ -248848,7 +250650,7 @@ rDa mrB jQD slc -dMB +iWK rjC qjF pPO @@ -249035,21 +250837,8 @@ wNO wNO wNO wNO -wNO -wNO -wNO -wNO -wNO -wNO -wNO -wNO -wNO -wNO -wNO -wNO -wNO -wNO bln +lSu bln bln bln @@ -249059,41 +250848,54 @@ bln bln bln bln +stJ bln +gsK +kKU +kKL +cvF +xUt +lli +kKL +gDL +iyY +tlH +vww +tlH dGO iyg hHq -kXu -qIP +aNj +xTI gmW -hGf -bln -bln -mdZ -byk -rrx -nIr -mdZ -fRJ -lxf -son -qZB -gtw -kpf +abm +qyZ +kKL +emF +pwz +kKL +kKL +vfw +xqa +rAx +skH +cdX +sHs +xQS xbn -qDZ -eke -enG -bpG -oKb -uXm +tnz +gcf +gtw +iZD +vrw +sLy lso qEM -mbk +pJC nKa dhk cDT -atC +iTE cAI cMN uYm @@ -249235,7 +251037,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -249290,67 +251092,67 @@ wNO wNO wNO wNO -wNO -tCr -mVm -tCr -tCr -tCr -tCr -tCr -tCr -tCr -tCr -tCr -tCr -tCr -tCr -tCr -bln -bln -bln -bln -bln -bln -bln -bln -bln -bln -bln -dGO -vKE -uNA -kXu -dNZ -gmW -bln -kKL +reu +jas +jas +bYx +hzw +ike +jas +bYx +jas +jas +jas +bYx +jas +jas +cQE kKL +aPP kKL kKL -mKh +xea +isj +gBs +lyv +iyY +tlH +tlH +tlH +dGO +ubK +uRo +aNj +udA +gmW +gAG +wWB kKL +ddJ +rbp kKL -hBc -xlv -iXH -qZB -oEh -kpf +eGg +dSY +vlz +vlz +nvc +hXD +mMi +xnc +gtw +dpa +vlU gtw -qfe -ecZ -enG -qIv -oKb -reM +iZD +vrw +krE lso cbs nGA nKa nTV jPl -bjm +bGD kXM nKa xXV @@ -249492,7 +251294,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -249547,9 +251349,7 @@ wNO wNO wNO wNO -wNO -tCr -bln +ngh bln bln bln @@ -249562,45 +251362,47 @@ bln bln bln bln -tCr -bln -bln -bln -bln -bln -bln -bln -bln -bln bln bln +kKL +aXv +bSi +kKL +acm +tDy +kKL +tts +iyY +tlH +tlH +tlH dGO -lQV -vKG -kXu -jKV +nOI +uRo +aNj +xBS gmW -bln +akb +xQU kKL -bgG -kum kKL -hfh -bQr -vSr -gtc -usI -son -skp -eDx -fkk -aEU -fMP -fMP -oyV -nqL -oKb -uXm +qDk +kKL +gmt +cgd +kKn +vlz +lMe +gbC +vAW +cki +cki +gtw +gtw +aHZ +qWf +vrw +jlT lso qEM xwz @@ -249749,7 +251551,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -249804,8 +251606,7 @@ wNO wNO wNO wNO -wNO -tCr +ngh bln uei tmR @@ -249819,48 +251620,49 @@ uei tmR uei bln -tCr -bln -bln -bln -bln bln -bln -sEB +kKL +aPP +kKL +kKL +jRt +fTn +kKL +kKL +kKL +mMb mMb -rMa mMb kKL kKL +iyY +fvm kKL kKL -qoz kKL +rCf +hlt kKL +iqA kKL kKL -tFf -baq +tUm kKL -lli -iCC kKL -fbm -bQP -llG -bzn -fyh -mzs -wKm -pAp -haN -kqA -tUS cpY -ivB +nvh +hDu +eLv +nbI +oaJ +rqQ +fhS +pAn +cpY +bao lso brj -pJC +mbk vBG dkg tLp @@ -250006,7 +251808,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -250061,8 +251863,7 @@ wNO wNO wNO wNO -wNO -tCr +vHT bln uei tmR @@ -250077,47 +251878,48 @@ tmR uei bln bln -bln -bln -bln -bln -bln -bln -sEB -qSB -lli -oop -lli -lli -lli -lli +mMb +hAW +jVm +sON +sON lRZ -lli -lli -lli +lRZ +ygP +lRZ +wco +lRZ +lRZ +wco +leP +lRZ +lRZ +rmR +vXm bMF -ojV -fYe +pns +uMj kKL -lli -lAG +xUt +fKk kKL +xOE kKL kKL kKL kKL kKL kKL -mgN +nXs kKL kKL kKL kKL kKL kKL -rqT -pfB -gBq +oFB +opH +oFB vBG rMS pKw @@ -250263,7 +252065,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -250318,8 +252120,7 @@ wNO wNO wNO wNO -wNO -tCr +ngh bln uei tmR @@ -250334,50 +252135,51 @@ tmR uei bln bln -bln -bln -bln -bln -bln -bln -sEB -mMb -vLk kKL +kKL +tOe +rkm +fEY +nDm +kda +kKL +xUt +xUt +lli +xUt lli -xAb -cvF -gGF -ssM kKL -gAt +tbK +ssM lli +jRt kKL kKL kKL kKL lli -xRV -oDJ -pCi -kKL -uZL -tBN -aKG +xUt +lli +vYY +imk +feV +sus +tIL +nVO kKL -cSQ +tvZ kKL -kKl -beT -nwI -giD +vEh +nTP +kbu +bcu kKL -bws +lso vwO pxn vBG mQr -mvU +idp rZZ opc qPI @@ -250520,7 +252322,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -250575,8 +252377,7 @@ wNO wNO wNO wNO -wNO -bln +ngh bln uei tmR @@ -250590,44 +252391,45 @@ uei tmR uei bln -bln -bln -bln -bln -bln -bln -bln -bln +lBD bln kKL -qzN -gGF kKL kKL -tml +mMb +kKL +kKL +kKL +qUo +pjM +nLY +lli +gAt +kKL +lIC lRZ -tml -prf +pQa +eDD +nhv lli +pAW +jYI +mmf lli -pQa -mJr -lTJ -lBb -gZl -kKL -orf +uWf +xWM +brC kKL nqn lHA -hao +rfj kKL -cSQ +tvZ kKL -lli -lli -lli -xbf +iYY +iIv +dig +pbF kKL rjP qEM @@ -250777,7 +252579,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -250829,11 +252631,10 @@ wNO wNO wNO wNO -wNO -tCr -tCr -tCr -bln +reu +xog +xog +raq bln uei tmR @@ -250847,7 +252648,8 @@ uei tmR uei bln -bln +fsm +lBD bln bln bln @@ -250857,34 +252659,34 @@ bxe bxe bxe mHB -lli -lli -lIC +kKL +gEl +kKL kKL aIE lRZ -lIC -kKL -tml +cCR lli -iIa -bcC -iIa -vYv -kKL -kKL -iOc -eAS -nNv -wPZ -fRP +mRN +xUt +gEZ +xUt +gEZ +lli +gEZ +xUt +unu +cOQ +vgU +kdw +qpQ kKL -cSQ +tvZ cDw lli lli lli -iZy +iXB kKL cwO vwO @@ -251034,8 +252836,8 @@ wNO wNO wNO wNO -wNO -otC +bln +vbG hHG hHG hHG @@ -251086,8 +252888,7 @@ wNO wNO wNO wNO -wNO -tCr +ngh bln bln bln @@ -251106,44 +252907,45 @@ bln bln bln bln +bln vsI acE acE wtX eqJ -bHS +ktJ oBQ mHB gUY -lli +rmR lli kKL kKL lRZ -yej -gHm -uDW -uDW -cHy -lli -pub -xWM +hfG +xUt +tNb +dge +oBJ +xUt +tNb +rNV +hrA +fkq +vIL +feV +lVN +bBn +bIq kKL -knW -xFj -kKL -wbZ -oTB -aOV -kKL -cSQ +tvZ kKL -vMR -lZv -hrt +xGi +fce +jzR fpA kKL -iko +tXg qEM lso bGT @@ -251292,7 +253094,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -251343,8 +253145,7 @@ wNO wNO wNO wNO -wNO -tCr +wHr bln cnx tmR @@ -251364,36 +253165,37 @@ tmR tmR tmR tmR +tmR rUR kxv fIs kxv jju -tJP +lXC lFG -gxh +rlH gxh gxh gxh kKL gAt -orf +hfG gAt -lli -wQI +xUt +gPo kKL kKL mMb mMb kKL -cSQ +cjh kKL kKL kKL kKL kKL kKL -cSQ +tvZ kKL kKL kKL @@ -251549,7 +253351,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -251600,8 +253402,7 @@ wNO wNO wNO wNO -wNO -tCr +ngh bln bln bln @@ -251620,6 +253421,7 @@ bln bln bln bln +bln sEB acE acE @@ -251631,10 +253433,10 @@ pDQ xBL wJM wJM -gxh +rlH kKL dnL -orf +hfG kKL pVl kKL @@ -251643,23 +253445,23 @@ kbp tlH tlH kKL -cSQ +diK kKL tlH tlH bln kKL -lqh -sEE -uKr -uKr -gxY +emx +vIL +fOg +kQH +snR asg kKL kdF qGV hUx -ikH +bSC sZF sZF sZF @@ -251806,7 +253608,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -251857,11 +253659,10 @@ wNO wNO wNO wNO -wNO -tCr -mVm -tCr -muK +dqA +jas +jas +nIe bln uei tmR @@ -251875,8 +253676,9 @@ uei tmR uei bln +lBD bln -bln +lBD bln bln bln @@ -251891,7 +253693,7 @@ bqe gxh kKL hOu -orf +hfG hJx lli fAF @@ -251900,23 +253702,23 @@ kKL mMb mMb kKL -cSQ +cjh kKL mMb mMb mMb kKL -dMq +vYv lli lli kKL -dMq +gkP hFg kKL xcy rvZ hUx -mqq +veq aLX vng gNT @@ -252063,7 +253865,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -252117,8 +253919,7 @@ wNO wNO wNO wNO -wNO -bln +ngh bln uei tmR @@ -252133,9 +253934,10 @@ tmR uei bln bln +lBD +uer bln -bln -bln +fsm bln bln bln @@ -252145,35 +253947,35 @@ cvF lli kKL mwu -gxh +rlH kKL kKL -lAG +gRL kKL jhS tOX kKL -wZZ -lli -iin +kaI +xIh +wvJ kKL -cSQ -lqh -uKr -uKr -uKr -uKr -mRs +cjh +emx +fOg +fOg +fOg +fOg +maw igX igX kKL -cUt +neQ kKL kKL kKL fyZ hUx -mqq +veq sZF eFS sZF @@ -252320,7 +254122,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -252374,8 +254176,7 @@ wNO wNO wNO wNO -wNO -tCr +ngh bln uei tmR @@ -252390,12 +254191,13 @@ tmR uei bln bln -ozo bln bln +mQb bln bln bln +ntK bln kKL oCv @@ -252405,16 +254207,16 @@ qqB gxh kKL weF -orf +hfG kKL moF cjI kKL -dCA -atM -atM -uKr -sEE +pQa +erq +erq +oPw +srU xWM kKL kKL @@ -252424,13 +254226,13 @@ kKL kKL kKL kKL -oaa +nLs aJG sQE hwE hwE cMe -mqq +veq uvt tlP wIg @@ -252577,7 +254379,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -252630,9 +254432,8 @@ wNO wNO wNO wNO -wNO -wNO -tCr +bln +vHT bln uei tmR @@ -252648,8 +254449,9 @@ uei bln bln bln +mQb bln -bln +mQb bln bln bln @@ -252662,13 +254464,13 @@ hJx qFW kKL hOu -orf +hfG hJx mzM hUi kKL uar -tvZ +unu kKL kKL kKL @@ -252681,13 +254483,13 @@ jSC bdS dtb hUD -iko +bOh rvZ lso lso rCu cYE -wYf +tCG idi cZU kBl @@ -252834,7 +254636,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -252887,9 +254689,8 @@ wNO wNO wNO wNO -wNO -wNO -tCr +bln +vnS bln uei tmR @@ -252903,12 +254704,13 @@ uei tmR uei bln -tCr +stJ bln bln bln bln bln +uer bln bln kKL @@ -252919,13 +254721,13 @@ lli gxh kKL kKL -orf +hfG kKL kKL kKL kKL kIl -omt +nNI kKL eIk xry @@ -252944,7 +254746,7 @@ rek rek hUx rNQ -wYf +tCG idi aID gky @@ -252963,7 +254765,7 @@ jIP qOH veX wHc -sKV +fPO pTU itt ily @@ -253091,7 +254893,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -253144,9 +254946,8 @@ wNO wNO wNO wNO -wNO -wNO -tCr +bln +ngh bln bln bln @@ -253160,9 +254961,10 @@ bln bln hty bln -tCr bln bln +lSu +lSu bln bln bln @@ -253197,11 +254999,11 @@ qMm hUD pyJ lPh -hUD +rBp hUD ebb cYE -wYf +tCG idi aID ddk @@ -253348,7 +255150,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -253402,28 +255204,28 @@ wNO wNO wNO wNO -wNO -tCr -tCr -tCr -tCr -tCr -tCr -tCr -tCr -tCr -tCr -tCr -tCr -mVm -tCr -tCr -bln -bln -bln -bln -bln -bln +dqA +jas +jas +bYx +jas +jas +jas +bYx +jas +jas +wQN +bYx +jas +jas +jas +bYx +jas +nMD +bYr +bYx +jas +ike kKL hTB sRI @@ -253458,7 +255260,7 @@ bzA hUD lso byK -kYz +hMs bRd fqQ wIg @@ -253605,7 +255407,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -253668,15 +255470,15 @@ wNO wNO wNO wNO +bln +ozo +bln wNO wNO wNO -wNO -wNO -wNO -bln bln bln +lSu bln bln bln @@ -253715,7 +255517,7 @@ vfo hUD lso cYE -mpZ +nYY ult bsG wGF @@ -253740,7 +255542,7 @@ mfV xpA uHc cpg -qGi +gUX cpg cdl pMF @@ -253862,7 +255664,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -253972,7 +255774,7 @@ cLJ iQQ lso cYE -lso +uIS ult wjz tXh @@ -254119,7 +255921,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -254189,9 +255991,9 @@ wNO wNO wNO bln +uer bln -bln -bln +stJ bln bln bln @@ -254207,7 +256009,7 @@ tml kKL kLb qpd -ydD +oNy kKL gkP kKL @@ -254229,7 +256031,7 @@ bwl hUD uff cYE -acw +hXt ult hpC rIU @@ -254252,7 +256054,7 @@ mYq nyH lFW rEd -dnU +pZA gSN jbU wnX @@ -254376,7 +256178,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -254450,7 +256252,7 @@ bln bln bln bln -bln +uer bln kKL kKL @@ -254486,7 +256288,7 @@ wND iQQ rvZ cYE -lso +uIS ult vuq tfM @@ -254633,7 +256435,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -254703,11 +256505,11 @@ wNO wNO wNO bln +mQb bln bln bln -bln -bln +lBD bln mMb lIC @@ -254741,9 +256543,9 @@ sEi sEi naP hUD -rqT -cjl -rqT +jed +iIk +jed ult ult wBk @@ -254890,7 +256692,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -254962,7 +256764,7 @@ wNO bln bln bln -bln +uer bln bln bln @@ -255147,7 +256949,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -255218,7 +257020,7 @@ wNO wNO bln bln -bln +lBD bln bln bln @@ -255404,7 +257206,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -255477,7 +257279,7 @@ bln bln bln bln -bln +lBD bln kKL pGJ @@ -255501,7 +257303,7 @@ poy poy lNk hUD -jEr +nbL rGd whC hUD @@ -255521,8 +257323,8 @@ gqK nxU gjg dxg -jth -mgu +gJi +fVC dkr cHQ jDm @@ -255661,7 +257463,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -255803,7 +257605,7 @@ kLy bGA lKq bNu -myU +hUf bKm xMT hjE @@ -255811,8 +257613,8 @@ sJP bkS pJc iBO -iji -gEo +tPx +trn bgx buv jhC @@ -255918,7 +257720,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -256175,7 +257977,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -256432,7 +258234,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -256519,7 +258321,7 @@ qAS fUc jaX glI -rPu +gZR kKL kKL mbG @@ -256689,7 +258491,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -256946,7 +258748,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -257203,7 +259005,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -257287,7 +259089,7 @@ fLb oHh kKL bpQ -epd +bsc oih dmL lUC @@ -257460,7 +259262,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -257547,7 +259349,7 @@ dvS pwd glI tsR -rPu +gZR lUC tXV kvX @@ -257717,7 +259519,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -257974,7 +259776,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -258119,7 +259921,7 @@ xUk aSB tHT nsZ -mko +lHm oZn sFj rck @@ -258231,7 +260033,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -258308,7 +260110,7 @@ wNO bln bln bln -bln +ozo bln bln sEB @@ -258349,12 +260151,12 @@ mrw kuV cAi qWn -oPq +nQq fOR tFF tia qNn -hek +nAI gNi krY clo @@ -258376,9 +260178,9 @@ xUk sqt duE nsZ -ukf -cMy -trb +ijW +xsP +rms sXC rDZ rDZ @@ -258488,7 +260290,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -258565,7 +260367,7 @@ wNO bln bln bln -ozo +bln bln bln sEB @@ -258745,7 +260547,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -259002,7 +260804,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -259259,7 +261061,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -259516,7 +261318,7 @@ wNO wNO khz wNO -otC +vbG hHG hHG hHG @@ -259773,7 +261575,7 @@ wNO wNO wNO wNO -uFg +kPS hHG hHG hHG @@ -259912,7 +261714,7 @@ rjK nlP xTV imy -ejD +suv auK vaa xLq @@ -260801,7 +262603,7 @@ wNO wNO wNO uer -otC +vbG hHG hHG hHG @@ -260932,7 +262734,7 @@ xnt egR pSz elw -hCx +gEe mEU enq kuy @@ -261058,7 +262860,7 @@ wNO khz wNO aaX -otC +vbG hHG hHG hHG @@ -261315,7 +263117,7 @@ wNO wNO wNO fhB -otC +vbG hHG hHG hHG @@ -261572,7 +263374,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -261829,7 +263631,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -262086,7 +263888,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -262343,7 +264145,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -262600,7 +264402,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -262857,7 +264659,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -263114,7 +264916,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -263371,7 +265173,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -263628,7 +265430,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -263885,7 +265687,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -264142,7 +265944,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -264399,7 +266201,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -264656,7 +266458,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -264913,7 +266715,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -265157,7 +266959,7 @@ wNO wNO wNO wNO -lgH +tNN kDs kDs kDs @@ -265170,7 +266972,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -265427,7 +267229,7 @@ tkU wNO wNO wNO -otC +vbG hHG hHG hHG @@ -265672,7 +267474,7 @@ wNO wNO wNO wNO -wNO +bln hHG hHG hHG @@ -265684,7 +267486,7 @@ tkU wNO wNO wNO -otC +vbG hHG hHG hHG @@ -265941,7 +267743,7 @@ tkU wNO wNO wNO -otC +vbG hHG hHG hHG @@ -266186,7 +267988,7 @@ wNO tkU tkU tkU -wNO +bln hHG hHG hHG @@ -266198,7 +268000,7 @@ tkU wNO wNO wNO -otC +vbG hHG hHG hHG @@ -266443,7 +268245,7 @@ wNO tkU tkU tkU -wNO +bln hHG hHG hHG @@ -266455,7 +268257,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -266700,7 +268502,7 @@ wNO tkU tkU tkU -wNO +uFg hHG hHG hHG @@ -266712,7 +268514,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -266969,7 +268771,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -267214,7 +269016,7 @@ wNO wNO tkU tkU -wNO +bln hHG hHG hHG @@ -267226,7 +269028,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -267471,7 +269273,7 @@ wNO wNO tkU tkU -wNO +bln hHG hHG hHG @@ -267483,7 +269285,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -267728,7 +269530,7 @@ wNO wNO tkU tkU -wNO +bln hHG hHG hHG @@ -267740,7 +269542,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -267985,7 +269787,7 @@ wNO wNO tkU tkU -wNO +bln hHG hHG hHG @@ -267997,7 +269799,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -268242,7 +270044,7 @@ wNO wNO tkU tkU -wNO +bln hHG hHG hHG @@ -268254,7 +270056,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -268511,7 +270313,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -268756,7 +270558,7 @@ wNO wNO tkU tkU -wNO +bln hHG hHG hHG @@ -268768,7 +270570,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -269013,7 +270815,7 @@ wNO wNO wNO tkU -wNO +bln hHG hHG hHG @@ -269025,7 +270827,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -269270,7 +271072,7 @@ wNO wNO wNO tkU -wNO +bln hHG hHG hHG @@ -269282,7 +271084,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -269527,7 +271329,7 @@ wNO wNO wNO tkU -wNO +bln hHG hHG hHG @@ -269539,7 +271341,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -269784,7 +271586,7 @@ wNO wNO wNO tkU -wNO +bln hHG hHG hHG @@ -269796,7 +271598,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -270053,7 +271855,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -270298,7 +272100,7 @@ wNO lgH wNO wNO -wNO +bln hHG hHG hHG @@ -270310,7 +272112,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -270555,7 +272357,7 @@ wNO aaX wNO wNO -wNO +bln hHG hHG hHG @@ -270567,7 +272369,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -270812,7 +272614,7 @@ wNO fhB wNO wNO -wNO +bln hHG hHG hHG @@ -270824,7 +272626,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -271081,7 +272883,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -271326,7 +273128,7 @@ wNO wNO wNO wNO -wNO +bln hHG hHG hHG @@ -271338,7 +273140,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -271583,7 +273385,7 @@ wNO wNO wNO wNO -wNO +bln hHG hHG hHG @@ -271595,7 +273397,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -271840,7 +273642,7 @@ wNO wNO wNO wNO -wNO +bln hHG hHG hHG @@ -271852,7 +273654,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -272097,7 +273899,7 @@ wNO wNO wNO wNO -wNO +bln hHG hHG hHG @@ -272109,7 +273911,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -272366,7 +274168,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -272611,7 +274413,7 @@ wNO wNO wNO wNO -wNO +bln hHG hHG hHG @@ -272623,7 +274425,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -272868,7 +274670,7 @@ wNO wNO wNO wNO -wNO +bln hHG hHG hHG @@ -272880,7 +274682,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -273382,7 +275184,7 @@ wNO wNO wNO wNO -wNO +bln hHG hHG hHG @@ -273639,7 +275441,7 @@ wNO wNO wNO wNO -wNO +bln hHG hHG hHG @@ -273896,7 +275698,7 @@ wNO wNO wNO wNO -wNO +bln hHG hHG hHG @@ -273908,7 +275710,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -274165,7 +275967,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -274410,7 +276212,7 @@ wNO wNO wNO wNO -wNO +bln hHG hHG hHG @@ -274422,7 +276224,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -274667,7 +276469,7 @@ wNO wNO wNO wNO -wNO +bln hHG hHG hHG @@ -274679,7 +276481,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -274936,7 +276738,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -275181,7 +276983,7 @@ wNO wNO wNO wNO -wNO +bln hHG hHG hHG @@ -275193,7 +276995,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG @@ -275438,7 +277240,7 @@ wNO wNO wNO wNO -wNO +bln hHG hHG hHG @@ -275450,7 +277252,7 @@ wNO wNO wNO wNO -otC +vbG hHG hHG hHG diff --git a/_maps/map_files/MetaStation/MetaStation.dmm b/_maps/map_files/MetaStation/MetaStation.dmm index a646c19a1defb..d399a2c5b353f 100644 --- a/_maps/map_files/MetaStation/MetaStation.dmm +++ b/_maps/map_files/MetaStation/MetaStation.dmm @@ -216,13 +216,6 @@ }, /turf/open/floor/iron, /area/station/engineering/main) -"aev" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/disposalpipe/segment, -/obj/item/stock_parts/cell/high, -/turf/open/floor/plating, -/area/station/maintenance/starboard/greater) "aez" = ( /obj/effect/turf_decal/stripes/line{ dir = 10 @@ -256,14 +249,6 @@ /obj/structure/window/spawner/directional/south, /turf/open/floor/iron, /area/station/engineering/atmos) -"afz" = ( -/obj/machinery/portable_atmospherics/scrubber, -/obj/machinery/atmospherics/components/unary/portables_connector/visible{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red/fourcorners, -/turf/open/floor/iron, -/area/station/engineering/atmos) "afD" = ( /turf/open/floor/engine{ name = "Holodeck Projector Floor" @@ -276,6 +261,13 @@ /obj/machinery/light/small/directional/south, /turf/open/floor/carpet, /area/station/commons/dorms) +"afM" = ( +/obj/structure/table, +/obj/machinery/cell_charger, +/obj/item/stock_parts/power_store/cell/high, +/obj/effect/turf_decal/delivery, +/turf/open/floor/iron, +/area/station/engineering/main) "afZ" = ( /obj/machinery/vending/coffee, /obj/structure/disposalpipe/segment, @@ -286,6 +278,15 @@ /mob/living/simple_animal/bot/secbot/beepsky/armsky, /turf/open/floor/iron/dark, /area/station/ai_monitored/security/armory) +"agi" = ( +/obj/effect/spawner/random/maintenance, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) "ago" = ( /obj/machinery/atmospherics/pipe/smart/simple/purple/visible, /turf/open/floor/iron, @@ -326,22 +327,6 @@ }, /turf/open/floor/iron/white, /area/station/science/cytology) -"agQ" = ( -/obj/structure/table/reinforced, -/obj/machinery/door/window/left/directional/south{ - name = "Cargo Desk"; - req_access = list("shipping") - }, -/obj/item/paper_bin{ - pixel_x = -7; - pixel_y = 6 - }, -/obj/item/paper/crumpled{ - pixel_x = 7 - }, -/obj/machinery/door/firedoor, -/turf/open/floor/iron, -/area/station/cargo/sorting) "agR" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -469,6 +454,16 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/security/office) +"ajq" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/obj/effect/turf_decal/tile/brown, +/turf/open/floor/iron, +/area/station/cargo/lobby) "ajI" = ( /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 1 @@ -572,6 +567,34 @@ }, /turf/open/floor/carpet, /area/station/command/heads_quarters/captain/private) +"alu" = ( +/obj/effect/turf_decal/bot, +/obj/effect/spawner/random/structure/crate, +/obj/effect/turf_decal/arrows{ + dir = 8 + }, +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/cargo/lobby) +"alw" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/tile/brown{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"alA" = ( +/obj/effect/mapping_helpers/mail_sorting/supply/cargo_bay, +/obj/structure/disposalpipe/sorting/mail{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) "alE" = ( /turf/open/floor/iron, /area/station/security/courtroom) @@ -632,6 +655,12 @@ /obj/effect/turf_decal/tile/green/anticorner/contrasted, /turf/open/floor/iron, /area/station/security/courtroom) +"amp" = ( +/obj/machinery/atmospherics/components/unary/outlet_injector/monitored/ordnance_burn_chamber_input{ + dir = 1 + }, +/turf/open/floor/engine/vacuum, +/area/station/science/ordnance/burnchamber) "amy" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/public/glass{ @@ -716,14 +745,20 @@ /obj/structure/lattice, /turf/open/space/basic, /area/space/nearstation) -"anW" = ( -/obj/effect/turf_decal/trimline/brown/filled/corner{ +"anX" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/door/firedoor, +/obj/machinery/status_display/evac/directional/west, +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/tile/brown{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral{ dir = 1 }, -/obj/structure/cable, -/obj/machinery/firealarm/directional/west, /turf/open/floor/iron, -/area/station/construction/storage_wing) +/area/station/hallway/primary/central) "aok" = ( /turf/open/floor/iron, /area/station/cargo/storage) @@ -738,15 +773,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/engineering/atmos) -"aps" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/junction/flip{ - dir = 4 - }, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) "apt" = ( /obj/machinery/icecream_vat, /obj/machinery/atmospherics/pipe/heat_exchanging/simple{ @@ -764,6 +790,10 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central) +"apC" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/cargo/miningoffice) "apJ" = ( /obj/structure/cable, /turf/open/floor/iron/dark, @@ -773,6 +803,14 @@ /obj/machinery/power/apc/auto_name/directional/south, /turf/open/floor/iron/dark, /area/station/ai_monitored/security/armory) +"apO" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/obj/machinery/light/cold/directional/west, +/turf/open/floor/iron/dark, +/area/station/engineering/transit_tube) "apS" = ( /obj/structure/sink/directional/east, /obj/effect/turf_decal/stripes/line{ @@ -792,18 +830,6 @@ /obj/effect/mapping_helpers/airlock/access/all/engineering/general, /turf/open/floor/plating, /area/station/maintenance/solars/starboard/aft) -"apZ" = ( -/obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/north, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/wood, -/area/station/command/heads_quarters/qm) "aqa" = ( /obj/machinery/portable_atmospherics/pump, /obj/machinery/firealarm/directional/north, @@ -943,6 +969,13 @@ /obj/machinery/airalarm/directional/west, /turf/open/floor/wood, /area/station/command/heads_quarters/hos) +"asT" = ( +/obj/effect/spawner/structure/window, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/cargo/lobby) "atf" = ( /obj/structure/table/glass, /obj/machinery/power/apc/auto_name/directional/north, @@ -971,13 +1004,6 @@ }, /turf/open/floor/iron, /area/station/security/office) -"atS" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) "aub" = ( /obj/effect/spawner/random/structure/grille, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -1025,12 +1051,6 @@ }, /turf/open/floor/plating, /area/station/hallway/secondary/entry) -"auO" = ( -/obj/machinery/light_switch/directional/east, -/obj/structure/cable, -/obj/machinery/light/small/directional/east, -/turf/open/floor/iron, -/area/station/cargo/storage) "ava" = ( /obj/effect/spawner/random/structure/closet_maintenance, /obj/item/storage/box/lights/mixed, @@ -1091,14 +1111,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood, /area/station/command/corporate_showroom) -"avJ" = ( -/obj/structure/table, -/obj/machinery/cell_charger, -/obj/item/stock_parts/cell/high, -/obj/item/stock_parts/cell/high, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/station/ai_monitored/command/storage/eva) "avK" = ( /turf/closed/wall, /area/station/maintenance/fore/lesser) @@ -1210,6 +1222,14 @@ "ayr" = ( /turf/open/floor/iron, /area/station/engineering/break_room) +"ayz" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/tile/brown/opposingcorners, +/obj/effect/decal/cleanable/wrapping, +/turf/open/floor/iron, +/area/station/cargo/sorting) "ayH" = ( /obj/effect/spawner/random/engineering/atmospherics_portable, /turf/open/floor/plating, @@ -1249,6 +1269,19 @@ /obj/structure/cable/layer3, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/ai) +"azz" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/newscaster/directional/north, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/machinery/light/directional/north, +/turf/open/floor/iron, +/area/station/hallway/primary/port) "azE" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, @@ -1704,17 +1737,6 @@ /obj/structure/window/reinforced/spawner/directional/north, /turf/open/floor/iron/dark, /area/station/ai_monitored/aisat/exterior) -"aHH" = ( -/obj/machinery/atmospherics/pipe/smart/simple/dark/visible, -/obj/effect/turf_decal/siding/purple{ - dir = 4 - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 - }, -/obj/machinery/firealarm/directional/east, -/turf/open/floor/iron/dark, -/area/station/science/ordnance) "aHM" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -1768,16 +1790,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) -"aIE" = ( -/obj/effect/turf_decal/trimline/brown/filled/corner{ - dir = 8 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/construction/storage_wing) "aIO" = ( /obj/machinery/dna_scannernew, /obj/effect/turf_decal/siding/purple{ @@ -1849,20 +1861,6 @@ /obj/structure/sign/warning/fire, /turf/closed/wall/r_wall, /area/station/engineering/supermatter) -"aJz" = ( -/obj/structure/table/glass, -/obj/item/tank/internals/emergency_oxygen{ - pixel_x = -8 - }, -/obj/item/clothing/mask/breath{ - pixel_x = 4 - }, -/obj/machinery/atmospherics/pipe/layer_manifold/supply/hidden, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/station/engineering/transit_tube) "aJI" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/cable, @@ -1955,6 +1953,17 @@ }, /turf/open/floor/iron, /area/station/security/checkpoint/engineering) +"aKN" = ( +/obj/structure/chair/office, +/obj/machinery/requests_console/directional/north{ + department = "Quartermaster's Desk"; + name = "Security Requests Console" + }, +/obj/effect/mapping_helpers/requests_console/supplies, +/obj/effect/mapping_helpers/requests_console/assistance, +/obj/effect/landmark/start/depsec/supply, +/turf/open/floor/iron, +/area/station/security/checkpoint/supply) "aKO" = ( /obj/effect/landmark/event_spawn, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -1965,6 +1974,14 @@ /obj/effect/turf_decal/tile/bar/opposingcorners, /turf/open/floor/iron, /area/station/service/bar) +"aLq" = ( +/obj/machinery/camera/motion/directional/south{ + active_power_usage = 0; + c_tag = "Armory - External"; + use_power = 0 + }, +/turf/open/space/basic, +/area/space/nearstation) "aLr" = ( /obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored/nitrous_output{ dir = 1 @@ -2014,6 +2031,44 @@ /obj/effect/turf_decal/tile/purple/half/contrasted, /turf/open/floor/iron/white, /area/station/science/lobby) +"aLW" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/structure/table/wood, +/obj/item/stamp/head/qm{ + pixel_x = 1; + pixel_y = 12 + }, +/obj/item/stamp/granted{ + pixel_x = -7; + pixel_y = 12 + }, +/obj/item/stamp/denied{ + pixel_x = -7; + pixel_y = 5 + }, +/obj/item/stamp/void{ + pixel_x = 1; + pixel_y = 5 + }, +/obj/effect/spawner/random/entertainment/money_medium{ + pixel_y = -6; + pixel_x = -3 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/item/clipboard{ + pixel_x = 10; + pixel_y = 8 + }, +/obj/item/coin/gold{ + pixel_y = -5; + pixel_x = 10 + }, +/turf/open/floor/wood/large, +/area/station/command/heads_quarters/qm) "aMb" = ( /obj/structure/table, /obj/item/cultivator, @@ -2044,13 +2099,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central) -"aMA" = ( -/obj/effect/turf_decal/trimline/brown/filled/line{ - dir = 8 - }, -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/construction/storage_wing) "aMB" = ( /obj/effect/turf_decal/tile/blue/half/contrasted, /turf/open/floor/iron/dark, @@ -2144,10 +2192,6 @@ /obj/machinery/holopad/secure, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/ai_upload) -"aOg" = ( -/obj/machinery/holopad, -/turf/open/floor/iron, -/area/station/cargo/sorting) "aOo" = ( /obj/structure/sink/kitchen/directional/south{ desc = "A sink used for washing one's hands and face. It looks rusty and home-made"; @@ -2166,6 +2210,17 @@ /obj/effect/turf_decal/trimline/brown/warning, /turf/open/floor/iron/white, /area/station/science/lobby) +"aOA" = ( +/obj/effect/landmark/blobstart, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/port/greater) "aOC" = ( /obj/effect/turf_decal/trimline/red/filled/corner, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -2264,32 +2319,6 @@ /obj/structure/window/reinforced/spawner/directional/north, /turf/open/floor/iron/dark, /area/station/ai_monitored/aisat/exterior) -"aQE" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/south, -/turf/open/floor/plating, -/area/station/maintenance/disposal) -"aQP" = ( -/obj/effect/turf_decal/siding/thinplating_new/dark, -/obj/effect/turf_decal/trimline/brown/line, -/obj/effect/turf_decal/trimline/brown/line{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt/dust, -/obj/structure/cable, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/obj/machinery/power/apc/auto_name/directional/west, -/obj/effect/landmark/start/bitrunner, -/turf/open/floor/iron/dark/textured_half, -/area/station/cargo/bitrunning/den) "aQR" = ( /obj/structure/lattice/catwalk, /obj/structure/cable, @@ -2334,36 +2363,12 @@ "aRI" = ( /turf/open/floor/circuit/green, /area/station/science/robotics/mechbay) -"aRS" = ( -/obj/machinery/computer/security/telescreen/ce{ - dir = 1; - pixel_y = -30 - }, -/obj/machinery/pdapainter/engineering, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, -/area/station/command/heads_quarters/ce) "aRV" = ( /obj/machinery/porta_turret/ai{ dir = 1 }, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/ai_upload) -"aSd" = ( -/obj/effect/turf_decal/trimline/brown/filled/corner{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/central) "aSe" = ( /obj/machinery/duct, /obj/effect/turf_decal/trimline/blue/filled/line, @@ -2388,6 +2393,20 @@ /obj/effect/turf_decal/stripes/line, /turf/open/floor/plating, /area/station/hallway/secondary/entry) +"aSv" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/structure/reagent_dispensers/beerkeg, +/obj/item/toy/figure/qm{ + pixel_x = 3; + pixel_y = 12 + }, +/turf/open/floor/wood/large, +/area/station/command/heads_quarters/qm) "aSQ" = ( /obj/structure/table/reinforced, /obj/item/book/manual/wiki/security_space_law{ @@ -2442,35 +2461,6 @@ "aTV" = ( /turf/closed/wall/r_wall, /area/station/ai_monitored/turret_protected/ai) -"aUj" = ( -/obj/structure/closet/crate/preopen, -/obj/item/stack/package_wrap, -/obj/item/stack/package_wrap{ - pixel_y = 2 - }, -/obj/item/stack/package_wrap{ - pixel_y = 5 - }, -/obj/structure/sign/map/left{ - desc = "A framed picture of the station. Clockwise from security at the top (red), you see engineering (yellow), science (purple), escape (red and white), medbay (green), arrivals (blue and white), and finally cargo (brown)."; - icon_state = "map-left-MS"; - pixel_y = 32 - }, -/obj/effect/turf_decal/trimline/brown/filled/line{ - dir = 8 - }, -/obj/effect/spawner/random/bureaucracy/birthday_wrap, -/turf/open/floor/iron, -/area/station/cargo/lobby) -"aUk" = ( -/obj/effect/turf_decal/delivery, -/obj/structure/sign/map/right{ - desc = "A framed picture of the station. Clockwise from security at the top (red), you see engineering (yellow), science (purple), escape (red and white), medbay (green), arrivals (blue and white), and finally cargo (brown)."; - icon_state = "map-right-MS"; - pixel_y = 32 - }, -/turf/open/floor/iron, -/area/station/cargo/lobby) "aUm" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /turf/open/floor/iron, @@ -2643,10 +2633,6 @@ "aXa" = ( /turf/closed/wall, /area/station/security/prison/mess) -"aXq" = ( -/obj/effect/turf_decal/trimline/brown/filled/line, -/turf/open/floor/iron, -/area/station/cargo/lobby) "aXE" = ( /obj/machinery/door/airlock/maintenance{ name = "Service Maintenance" @@ -2730,31 +2716,6 @@ }, /turf/open/floor/iron, /area/station/engineering/break_room) -"aYl" = ( -/obj/structure/table, -/obj/item/assembly/igniter{ - pixel_x = -5; - pixel_y = 3 - }, -/obj/item/assembly/igniter{ - pixel_x = 5; - pixel_y = -4 - }, -/obj/item/assembly/igniter{ - pixel_x = 2; - pixel_y = 6 - }, -/obj/item/assembly/igniter{ - pixel_x = 2; - pixel_y = -1 - }, -/obj/machinery/camera/directional/east{ - c_tag = "Xenobiology Lab - Test Chamber"; - network = list("ss13","rd","xeno") - }, -/obj/machinery/light/cold/directional/east, -/turf/open/floor/engine, -/area/station/science/xenobiology) "aYw" = ( /obj/machinery/door/airlock/external{ name = "Escape Pod Three"; @@ -2937,6 +2898,12 @@ /obj/effect/mapping_helpers/burnt_floor, /turf/open/floor/plating, /area/station/maintenance/starboard/greater) +"baG" = ( +/obj/structure/table, +/obj/machinery/cell_charger, +/obj/item/stock_parts/power_store/cell/high, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) "baM" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -2953,13 +2920,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/starboard) -"baW" = ( -/obj/effect/turf_decal/trimline/brown/filled/line{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/brown/filled/corner, -/turf/open/floor/iron, -/area/station/cargo/lobby) "bbd" = ( /obj/machinery/duct, /obj/effect/turf_decal/trimline/blue/filled/line{ @@ -3480,6 +3440,12 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/maintenance/port/fore) +"bkJ" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) "bkM" = ( /obj/machinery/light/small/directional/south, /turf/open/floor/engine, @@ -3508,6 +3474,25 @@ /obj/effect/spawner/random/vending/snackvend, /turf/open/floor/wood, /area/station/service/library) +"blc" = ( +/obj/machinery/recharger{ + pixel_y = 4 + }, +/obj/machinery/camera/directional/north{ + c_tag = "Security Post - Medbay"; + network = list("ss13","medbay") + }, +/obj/effect/turf_decal/tile/red/fourcorners, +/obj/machinery/light/small/directional/north, +/obj/structure/table/reinforced, +/obj/machinery/requests_console/directional/north{ + department = "Security"; + name = "Security Requests Console" + }, +/obj/effect/mapping_helpers/requests_console/assistance, +/obj/effect/mapping_helpers/requests_console/supplies, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/medical) "blu" = ( /obj/structure/table/wood, /obj/machinery/light/small/directional/west, @@ -3605,26 +3590,6 @@ /obj/effect/turf_decal/tile/red/opposingcorners, /turf/open/floor/iron/white, /area/station/security/prison/mess) -"bnv" = ( -/obj/structure/table, -/obj/item/folder/yellow{ - pixel_x = 3; - pixel_y = 1 - }, -/obj/item/folder/yellow{ - pixel_x = 3; - pixel_y = 3 - }, -/obj/item/folder/yellow{ - pixel_x = 3; - pixel_y = 6 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/brown/anticorner/contrasted{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/cargo/sorting) "bnw" = ( /obj/structure/closet/firecloset, /obj/effect/turf_decal/bot, @@ -3808,16 +3773,6 @@ /obj/effect/turf_decal/tile/purple, /turf/open/floor/iron, /area/station/hallway/primary/central) -"bpY" = ( -/obj/machinery/light/small/directional/west, -/obj/item/clothing/mask/animal/horsehead, -/obj/structure/table/wood, -/obj/machinery/airalarm/directional/south, -/obj/item/clothing/mask/cigarette/pipe, -/obj/item/clothing/mask/fakemoustache, -/obj/structure/sign/poster/contraband/random/directional/west, -/turf/open/floor/wood, -/area/station/service/theater) "bqg" = ( /obj/structure/cable, /obj/structure/sign/poster/official/random/directional/east, @@ -3834,11 +3789,6 @@ /obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, /turf/open/floor/iron/dark, /area/station/engineering/atmospherics_engine) -"bqC" = ( -/obj/structure/table/wood, -/obj/item/clothing/mask/cigarette/pipe, -/turf/open/floor/wood, -/area/station/commons/lounge) "bqJ" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -3982,13 +3932,6 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/plating, /area/station/maintenance/aft/greater) -"bte" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/landmark/event_spawn, -/turf/open/floor/iron, -/area/station/cargo/storage) "btn" = ( /obj/effect/decal/cleanable/dirt, /obj/item/storage/box/drinkingglasses, @@ -4009,25 +3952,12 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/service) -"btt" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/obj/structure/disposalpipe/segment, -/turf/open/floor/iron, -/area/station/cargo/miningoffice) "btx" = ( /obj/effect/turf_decal/stripes/line{ dir = 10 }, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) -"btB" = ( -/obj/machinery/power/terminal, -/obj/machinery/light/small/directional/east, -/obj/item/radio/intercom/directional/east, -/obj/structure/cable, -/turf/open/floor/plating, -/area/station/maintenance/solars/port/fore) "btG" = ( /obj/structure/window/spawner/directional/west, /obj/structure/table, @@ -4050,16 +3980,6 @@ }, /turf/open/floor/iron/white, /area/station/science/ordnance/storage) -"btP" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/sorting/mail{ - dir = 4 - }, -/obj/effect/mapping_helpers/mail_sorting/supply/cargo_bay, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) "bug" = ( /obj/structure/lattice, /obj/item/tank/internals/oxygen/empty, @@ -4170,6 +4090,28 @@ }, /turf/open/floor/iron, /area/station/commons/locker) +"bvl" = ( +/obj/machinery/newscaster/directional/east, +/obj/structure/table, +/obj/item/stack/package_wrap{ + pixel_x = 2; + pixel_y = -3 + }, +/obj/item/stack/package_wrap{ + pixel_x = -2; + pixel_y = 4 + }, +/obj/item/pen{ + pixel_x = -7; + pixel_y = 10 + }, +/obj/item/reagent_containers/cup/glass/waterbottle{ + pixel_y = 16 + }, +/obj/machinery/digital_clock/directional/north, +/obj/effect/turf_decal/tile/brown/opposingcorners, +/turf/open/floor/iron, +/area/station/cargo/sorting) "bvJ" = ( /obj/effect/spawner/structure/window, /turf/open/floor/plating, @@ -4260,10 +4202,6 @@ /obj/effect/turf_decal/stripes/line, /turf/open/floor/iron/white, /area/station/medical/medbay/central) -"bxr" = ( -/obj/structure/sign/warning/electric_shock/directional/east, -/turf/open/space/basic, -/area/space) "bxE" = ( /obj/machinery/camera/directional/south{ c_tag = "Chemistry South"; @@ -4327,6 +4265,31 @@ /obj/effect/landmark/start/assistant, /turf/open/floor/iron, /area/station/commons/fitness/recreation) +"byE" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 1 + }, +/obj/machinery/button/door/directional/north{ + id = "rdrnd"; + name = "Research and Development Containment Control"; + pixel_x = -6; + req_access = list("rd") + }, +/obj/machinery/button/door/directional/north{ + id = "rdordnance"; + name = "Ordnance Containment Control"; + pixel_x = 6; + req_access = list("rd") + }, +/obj/machinery/button/door/directional/north{ + id = "rdoffice"; + name = "Privacy Control"; + pixel_y = 34; + req_access = list("rd") + }, +/obj/machinery/light/small/directional/north, +/turf/open/floor/iron/white, +/area/station/command/heads_quarters/rd) "byQ" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -4416,20 +4379,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/primary/central) -"bBa" = ( -/obj/effect/turf_decal/trimline/brown/filled/line{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/door/firedoor, -/obj/machinery/status_display/evac/directional/west, -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/central) "bBo" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/turf_decal/siding/purple, @@ -4539,6 +4488,15 @@ /obj/structure/window/reinforced/spawner/directional/east, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/rd) +"bDn" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 6 + }, +/obj/effect/turf_decal/siding/thinplating_new{ + dir = 6 + }, +/turf/open/floor/iron, +/area/station/cargo/storage) "bDp" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -4582,22 +4540,6 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/security/office) -"bEh" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/structure/cable, -/obj/machinery/light/floor, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) -"bEv" = ( -/obj/machinery/door/airlock/research/glass/incinerator/ordmix_exterior{ - name = "Burn Chamber Exterior Airlock" - }, -/obj/effect/mapping_helpers/airlock/locked, -/obj/effect/mapping_helpers/airlock/access/all/science/ordnance, -/turf/open/floor/engine/vacuum, -/area/station/science/ordnance) "bEA" = ( /obj/structure/cable, /obj/machinery/camera/directional/south{ @@ -4625,6 +4567,16 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/science/genetics) +"bEK" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 1 + }, +/turf/open/floor/wood/large, +/area/station/command/heads_quarters/qm) "bER" = ( /obj/structure/cable, /obj/machinery/power/apc/auto_name/directional/south, @@ -4646,6 +4598,10 @@ /obj/item/radio/intercom/directional/north, /turf/open/floor/iron, /area/station/security/checkpoint/customs) +"bFa" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/closed/wall/r_wall, +/area/station/science/ordnance/burnchamber) "bFr" = ( /obj/item/paper_bin{ pixel_x = -2; @@ -4672,19 +4628,6 @@ /obj/machinery/newscaster/directional/east, /turf/open/floor/iron, /area/station/science/robotics/lab) -"bFN" = ( -/obj/machinery/chem_dispenser{ - layer = 2.7 - }, -/obj/machinery/button/door/directional/north{ - id = "pharmacy_shutters"; - name = "pharmacy shutters control"; - pixel_x = 24; - req_access = list("medical") - }, -/obj/effect/turf_decal/tile/yellow/fourcorners, -/turf/open/floor/iron/white, -/area/station/medical/pharmacy) "bGo" = ( /obj/effect/turf_decal/stripes/corner{ dir = 1 @@ -4692,10 +4635,11 @@ /obj/effect/spawner/random/structure/crate_loot, /turf/open/floor/plating, /area/station/maintenance/aft/lesser) -"bGt" = ( -/obj/machinery/newscaster/directional/east, +"bGu" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/spawner/random/structure/crate, /turf/open/floor/iron, -/area/station/cargo/sorting) +/area/station/cargo/warehouse) "bGC" = ( /turf/closed/wall, /area/station/hallway/primary/central) @@ -4734,6 +4678,12 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/science/ordnance/testlab) +"bHv" = ( +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/turf/closed/wall, +/area/station/cargo/warehouse) "bHD" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/disposalpipe/segment, @@ -4880,6 +4830,10 @@ }, /turf/open/floor/iron/white, /area/station/command/heads_quarters/cmo) +"bJH" = ( +/obj/structure/sign/warning/electric_shock/directional/south, +/turf/open/space/basic, +/area/space/nearstation) "bJQ" = ( /obj/machinery/vending/coffee, /obj/effect/turf_decal/bot, @@ -4975,16 +4929,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/carpet/green, /area/station/maintenance/port/aft) -"bLC" = ( -/obj/machinery/conveyor{ - dir = 1; - id = "packageExternal" - }, -/obj/structure/window/spawner/directional/west, -/obj/structure/plasticflaps/opaque, -/obj/structure/window/spawner/directional/east, -/turf/open/floor/plating, -/area/station/cargo/sorting) "bLQ" = ( /turf/closed/wall, /area/station/medical/coldroom) @@ -4992,6 +4936,19 @@ /obj/structure/window/reinforced/spawner/directional/west, /turf/open/floor/plating/airless, /area/space/nearstation) +"bLY" = ( +/obj/effect/turf_decal/trimline/red/filled/corner{ + dir = 1 + }, +/obj/structure/extinguisher_cabinet/directional/north, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/siding/thinplating_new{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/cargo/storage) "bMa" = ( /obj/structure/disposaloutlet{ dir = 4; @@ -5105,6 +5062,13 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/engineering/supermatter/room) +"bNN" = ( +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/obj/structure/railing, +/turf/open/floor/iron, +/area/station/cargo/lobby) "bNP" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/cable, @@ -5119,12 +5083,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/port) -"bNU" = ( -/obj/effect/spawner/random/maintenance, -/obj/structure/closet/crate/internals, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/cargo/warehouse) "bOk" = ( /obj/machinery/light/directional/west, /obj/item/radio/intercom/directional/west, @@ -5149,13 +5107,12 @@ /obj/effect/turf_decal/bot, /turf/open/floor/iron, /area/station/maintenance/port/aft) -"bPa" = ( -/obj/machinery/computer/security/qm{ - dir = 4 +"bPc" = ( +/obj/effect/turf_decal/trimline/brown/filled/shrink_ccw{ + dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/wood, -/area/station/command/heads_quarters/qm) +/turf/open/floor/iron, +/area/station/cargo/storage) "bPi" = ( /obj/structure/chair/office{ dir = 8 @@ -5175,16 +5132,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/security/brig) -"bPu" = ( -/obj/structure/table, -/obj/machinery/cell_charger{ - pixel_y = 5 - }, -/obj/item/stack/cable_coil, -/obj/item/multitool, -/obj/item/stock_parts/cell/high, -/turf/open/floor/engine, -/area/station/science/xenobiology) "bPB" = ( /obj/structure/sign/warning/biohazard, /turf/closed/wall, @@ -5204,6 +5151,18 @@ /obj/item/bodypart/arm/left, /turf/open/floor/plating/airless, /area/station/science/ordnance/bomb) +"bQl" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/tile/brown/opposingcorners, +/obj/structure/table, +/obj/machinery/fax{ + fax_name = "Cargo Office"; + name = "Cargo Office Fax Machine" + }, +/turf/open/floor/iron, +/area/station/cargo/sorting) "bQN" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /obj/machinery/computer/security/telescreen/entertainment/directional/north, @@ -5319,14 +5278,6 @@ }, /turf/open/floor/wood, /area/station/command/heads_quarters/hop) -"bSm" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) "bSr" = ( /obj/structure/reagent_dispensers/water_cooler, /obj/machinery/airalarm/directional/west, @@ -5642,6 +5593,18 @@ }, /turf/open/floor/iron, /area/station/science/lab) +"bXg" = ( +/obj/effect/turf_decal/trimline/purple/filled/warning{ + dir = 1 + }, +/obj/structure/table, +/obj/machinery/cell_charger, +/obj/item/stock_parts/power_store/cell/high, +/obj/effect/turf_decal/siding/purple{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/science/explab) "bXk" = ( /obj/machinery/telecomms/server/presets/command, /turf/open/floor/circuit/telecomms/mainframe, @@ -5720,22 +5683,14 @@ /turf/open/floor/circuit, /area/station/maintenance/port/aft) "bYN" = ( -/obj/effect/turf_decal/tile/neutral/anticorner/contrasted, -/turf/open/floor/iron, -/area/station/service/hydroponics/garden) -"bZb" = ( -/obj/structure/table, -/obj/machinery/button/door{ - id = "xenobio6"; - layer = 3.3; - name = "Xenobio Pen 6 Blast Doors"; - pixel_y = 1; - req_access = list("xenobiology") +/obj/effect/turf_decal/siding/wideplating_new{ + dir = 4 + }, +/obj/effect/turf_decal/tile/green/half/contrasted{ + dir = 4 }, -/obj/structure/window/reinforced/spawner/directional/east, -/obj/structure/window/reinforced/spawner/directional/north, /turf/open/floor/iron, -/area/station/science/xenobiology) +/area/station/service/hydroponics/garden) "bZq" = ( /obj/machinery/seed_extractor, /obj/effect/turf_decal/stripes/line{ @@ -5796,6 +5751,11 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden, /turf/open/floor/iron, /area/station/maintenance/disposal/incinerator) +"caV" = ( +/obj/machinery/airalarm/directional/east, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/cargo/warehouse) "cbg" = ( /obj/effect/turf_decal/tile/purple{ dir = 1 @@ -5812,6 +5772,17 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/aft) +"cbp" = ( +/obj/structure/chair/office{ + dir = 8 + }, +/obj/machinery/computer/security/telescreen/normal/directional/north, +/obj/effect/turf_decal/tile/red/anticorner/contrasted{ + dir = 1 + }, +/obj/machinery/light/small/directional/north, +/turf/open/floor/iron, +/area/station/hallway/secondary/exit/departure_lounge) "cbz" = ( /turf/closed/wall, /area/station/cargo/storage) @@ -5867,17 +5838,14 @@ }, /turf/open/floor/iron/dark, /area/station/command/bridge) +"cdS" = ( +/obj/structure/table, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/station/science/ordnance/testlab) "cdX" = ( /turf/closed/wall, /area/station/engineering/storage/tech) -"cdY" = ( -/obj/item/radio/intercom/directional/east, -/obj/machinery/autolathe, -/obj/effect/turf_decal/tile/brown/half/contrasted{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/cargo/storage) "cem" = ( /obj/structure/cable, /turf/open/floor/iron, @@ -5967,12 +5935,6 @@ /obj/machinery/holopad, /turf/open/floor/iron, /area/station/commons/dorms) -"cfv" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/closet/crate/preopen, -/obj/structure/disposalpipe/segment, -/turf/open/floor/iron, -/area/station/cargo/warehouse) "cfy" = ( /obj/effect/spawner/structure/window, /turf/open/floor/plating, @@ -5981,18 +5943,19 @@ /obj/machinery/oven/range, /turf/open/floor/iron/cafeteria, /area/station/service/kitchen) +"cfH" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/bot_white, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/iron, +/area/station/cargo/storage) "cgi" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /turf/open/floor/iron/dark/side{ dir = 1 }, /area/station/security/prison) -"cgk" = ( -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt/dust, -/obj/effect/turf_decal/stripes/line, -/turf/open/floor/iron, -/area/station/cargo/miningoffice) "cgl" = ( /obj/structure/chair/stool/bar/directional/south, /obj/effect/turf_decal/siding/wood{ @@ -6019,10 +5982,11 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) -"cgP" = ( -/obj/machinery/air_sensor/ordnance_burn_chamber, -/turf/open/floor/engine/vacuum, -/area/station/science/ordnance) +"cgZ" = ( +/obj/machinery/light_switch/directional/east, +/obj/structure/cable, +/turf/open/floor/catwalk_floor/iron, +/area/station/cargo/storage) "cha" = ( /obj/machinery/door/airlock/research/glass{ name = "Ordnance Lab" @@ -6077,6 +6041,15 @@ /obj/structure/lattice/catwalk, /turf/open/space, /area/space/nearstation) +"ciE" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) "ciG" = ( /obj/structure/table/wood, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -6127,9 +6100,6 @@ /obj/machinery/airalarm/directional/north, /turf/open/floor/iron/white, /area/station/science/explab) -"cjJ" = ( -/turf/open/floor/carpet/red, -/area/station/command/heads_quarters/qm) "cky" = ( /obj/machinery/power/shieldwallgen, /obj/machinery/light/cold/directional/east, @@ -6144,6 +6114,14 @@ }, /turf/open/floor/plating, /area/station/maintenance/solars/port/aft) +"ckB" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/landmark/event_spawn, +/obj/effect/turf_decal/bot_white, +/turf/open/floor/iron, +/area/station/cargo/storage) "ckE" = ( /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 4 @@ -6176,10 +6154,6 @@ "clq" = ( /turf/open/floor/carpet, /area/station/security/detectives_office) -"clA" = ( -/obj/structure/sign/departments/cargo, -/turf/closed/wall, -/area/station/cargo/warehouse) "clE" = ( /obj/structure/cable, /turf/open/floor/iron, @@ -6230,18 +6204,37 @@ /obj/item/bodypart/leg/left, /turf/open/floor/plating/airless, /area/station/science/ordnance/bomb) +"cmX" = ( +/obj/machinery/conveyor_switch/oneway{ + dir = 8; + id = "QMLoad"; + name = "Loading Conveyor"; + pixel_x = -13; + pixel_y = -5 + }, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/cargo/storage) +"cna" = ( +/obj/structure/table, +/obj/item/storage/box/lights/mixed{ + pixel_y = 9; + pixel_x = 8 + }, +/obj/item/storage/box/lights/mixed{ + pixel_y = 5; + pixel_x = -6 + }, +/turf/open/floor/iron, +/area/station/cargo/warehouse) "cnc" = ( /obj/structure/chair/comfy/brown{ dir = 8 }, /turf/open/floor/carpet, /area/station/medical/psychology) -"cnd" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/spawner/structure/window, -/turf/open/floor/plating, -/area/station/cargo/sorting) "cnk" = ( /obj/effect/turf_decal/trimline/green/filled/line{ dir = 6 @@ -6318,6 +6311,19 @@ }, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/aisat/foyer) +"com" = ( +/obj/structure/cable, +/obj/machinery/netpod, +/obj/machinery/light/directional/west, +/obj/machinery/airalarm/directional/south, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/cargo/bitrunning/den) +"coz" = ( +/obj/effect/turf_decal/trimline/brown/filled/corner{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/cargo/storage) "coJ" = ( /obj/structure/chair/stool/directional/north, /obj/effect/decal/cleanable/blood/old, @@ -6444,6 +6450,14 @@ /obj/effect/spawner/random/engineering/atmospherics_portable, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) +"cqy" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/cargo/storage) "cqD" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 8 @@ -6690,6 +6704,17 @@ }, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) +"cvv" = ( +/obj/machinery/conveyor/inverted{ + dir = 10; + id = "QMLoad2" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/obj/structure/railing, +/turf/open/floor/plating, +/area/station/cargo/storage) "cvw" = ( /obj/machinery/recharge_station, /turf/open/floor/iron/dark, @@ -6853,6 +6878,19 @@ /obj/effect/turf_decal/tile/blue/half/contrasted, /turf/open/floor/iron/dark, /area/station/command/bridge) +"cwY" = ( +/obj/machinery/conveyor{ + dir = 1; + id = "packageExternal" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/window/spawner/directional/west, +/obj/structure/disposalpipe/segment, +/obj/effect/landmark/start/hangover, +/turf/open/floor/plating, +/area/station/cargo/sorting) "cxi" = ( /obj/item/solar_assembly, /obj/item/solar_assembly, @@ -6947,15 +6985,6 @@ }, /turf/open/floor/wood, /area/station/service/library) -"cyp" = ( -/obj/machinery/power/apc/auto_name/directional/east, -/obj/machinery/portable_atmospherics/scrubber, -/obj/effect/turf_decal/siding/purple{ - dir = 6 - }, -/obj/structure/cable, -/turf/open/floor/iron/dark, -/area/station/science/ordnance/storage) "cyG" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/public/glass{ @@ -6968,14 +6997,6 @@ dir = 4 }, /area/station/science/lobby) -"cyR" = ( -/obj/effect/turf_decal/trimline/brown/filled/line{ - dir = 1 - }, -/obj/item/chair, -/obj/machinery/firealarm/directional/north, -/turf/open/floor/iron, -/area/station/cargo/lobby) "cyS" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -7014,6 +7035,13 @@ /obj/machinery/light/small/directional/north, /turf/open/floor/iron/dark, /area/station/security/lockers) +"czD" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/neutral/half/contrasted, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/command/nuke_storage) "czG" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -7041,6 +7069,13 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/maintenance/port/aft) +"cAf" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/spawner/random/structure/crate, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) "cAm" = ( /obj/machinery/meter, /obj/machinery/atmospherics/pipe/smart/manifold4w/green/visible, @@ -7106,25 +7141,6 @@ /obj/structure/railing, /turf/open/floor/iron, /area/station/cargo/miningoffice) -"cCM" = ( -/obj/structure/lattice/catwalk, -/obj/item/reagent_containers/cup/glass/bottle/rum{ - pixel_x = -7; - pixel_y = 2 - }, -/obj/item/reagent_containers/cup/glass/colocup{ - pixel_x = 3; - pixel_y = 3 - }, -/obj/item/reagent_containers/cup/glass/colocup{ - pixel_x = 6; - pixel_y = -4 - }, -/obj/item/clothing/mask/cigarette/rollie/cannabis{ - pixel_y = -3 - }, -/turf/open/space/basic, -/area/space/nearstation) "cCN" = ( /obj/item/stack/sheet/iron/fifty, /obj/item/stack/sheet/iron/fifty, @@ -7180,6 +7196,17 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/science/genetics) +"cDO" = ( +/obj/structure/table, +/obj/item/stack/cable_coil{ + pixel_x = -3; + pixel_y = 3 + }, +/obj/item/stack/cable_coil, +/obj/item/stock_parts/power_store/cell/high, +/obj/structure/extinguisher_cabinet/directional/east, +/turf/open/floor/iron/dark, +/area/station/engineering/storage/tech) "cDP" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -7197,6 +7224,11 @@ }, /turf/open/floor/iron, /area/station/engineering/main) +"cDV" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) "cDX" = ( /obj/structure/chair/stool/bar/directional/south, /obj/effect/turf_decal/tile/bar/opposingcorners, @@ -7221,6 +7253,11 @@ /obj/structure/dresser, /turf/open/floor/wood, /area/station/service/theater) +"cEY" = ( +/obj/structure/cable, +/obj/effect/turf_decal/tile/brown/opposingcorners, +/turf/open/floor/iron, +/area/station/cargo/storage) "cFa" = ( /obj/machinery/atmospherics/pipe/smart/simple/dark/visible{ dir = 4 @@ -7260,6 +7297,14 @@ }, /turf/open/floor/iron, /area/station/command/gateway) +"cGq" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/construction/storage_wing) "cGu" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -7301,12 +7346,19 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/hallway/primary/fore) -"cHN" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/landmark/start/depsec/supply, +"cHG" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/obj/structure/railing{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 9 + }, /turf/open/floor/iron, -/area/station/security/checkpoint/supply) +/area/station/cargo/storage) "cHQ" = ( /obj/machinery/computer/security/mining{ dir = 1 @@ -7316,6 +7368,11 @@ }, /turf/open/floor/iron, /area/station/cargo/miningoffice) +"cHR" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) "cId" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/door/poddoor/shutters/preopen{ @@ -7351,12 +7408,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/aft/greater) -"cIS" = ( -/obj/structure/table, -/obj/machinery/cell_charger, -/obj/item/stock_parts/cell/high, -/turf/open/floor/plating, -/area/station/maintenance/port/aft) "cIU" = ( /obj/machinery/vending/coffee, /turf/open/floor/wood, @@ -7378,6 +7429,16 @@ }, /turf/open/floor/iron/white, /area/station/command/heads_quarters/cmo) +"cJt" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/effect/turf_decal/siding/wood, +/obj/machinery/computer/cargo{ + dir = 1 + }, +/turf/open/floor/wood/large, +/area/station/command/heads_quarters/qm) "cJv" = ( /obj/effect/turf_decal/tile/yellow/fourcorners, /obj/machinery/chem_heater/withbuffer, @@ -7394,16 +7455,28 @@ /obj/structure/sign/directions/evac, /turf/closed/wall/r_wall, /area/station/medical/chemistry) -"cJQ" = ( -/obj/machinery/door/airlock/maintenance{ - name = "Quartermaster Maintenance" - }, +"cJS" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment, /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/effect/mapping_helpers/airlock/access/all/supply/qm, -/turf/open/floor/plating, -/area/station/maintenance/port/greater) +/obj/effect/turf_decal/tile/brown{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/port) +"cJT" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/rack, +/obj/effect/spawner/random/maintenance, +/obj/machinery/light/small/directional/south, +/turf/open/floor/iron, +/area/station/cargo/warehouse) "cKd" = ( /obj/effect/turf_decal/trimline/blue/filled/warning{ dir = 4 @@ -7463,13 +7536,6 @@ dir = 1 }, /area/station/commons/fitness) -"cLc" = ( -/obj/structure/chair/office, -/obj/effect/landmark/start/quartermaster, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/wood, -/area/station/command/heads_quarters/qm) "cLj" = ( /obj/structure/cable, /turf/open/floor/iron, @@ -7557,6 +7623,23 @@ /obj/effect/landmark/navigate_destination, /turf/open/floor/iron/white, /area/station/medical/psychology) +"cNb" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wood, +/obj/machinery/computer/security/qm{ + dir = 1 + }, +/turf/open/floor/wood/large, +/area/station/command/heads_quarters/qm) +"cNg" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/south, +/turf/open/floor/iron, +/area/station/construction/storage_wing) "cNk" = ( /obj/effect/turf_decal/tile/blue/half/contrasted{ dir = 4 @@ -7603,30 +7686,6 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/engineering/main) -"cOB" = ( -/obj/structure/table, -/obj/item/paper_bin/bundlenatural{ - pixel_x = -19; - pixel_y = 5 - }, -/obj/item/paper_bin/bundlenatural{ - pixel_x = -7; - pixel_y = 5 - }, -/obj/item/paper_bin/bundlenatural{ - pixel_x = -19; - pixel_y = 9 - }, -/obj/item/paperplane{ - pixel_x = 9 - }, -/obj/item/paperplane{ - pixel_x = 7; - pixel_y = 7 - }, -/obj/effect/turf_decal/tile/brown/anticorner/contrasted, -/turf/open/floor/iron, -/area/station/cargo/sorting) "cON" = ( /obj/structure/table, /obj/item/pai_card, @@ -7644,12 +7703,6 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/command/heads_quarters/cmo) -"cOT" = ( -/obj/machinery/atmospherics/components/unary/outlet_injector/monitored/ordnance_burn_chamber_input{ - dir = 1 - }, -/turf/open/floor/engine/vacuum, -/area/station/science/ordnance) "cOX" = ( /obj/structure/sign/warning/radiation/rad_area/directional/north, /obj/effect/turf_decal/stripes/line{ @@ -7680,27 +7733,6 @@ /obj/machinery/power/apc/auto_name/directional/east, /turf/open/floor/wood, /area/station/command/corporate_showroom) -"cQc" = ( -/obj/machinery/door/airlock/public/glass{ - name = "Space Bridge Access" - }, -/obj/machinery/button/door/directional/north{ - id = "supplybridge"; - name = "Shuttle Bay Space Bridge Control" - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/structure/cable, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 4 - }, -/obj/effect/mapping_helpers/airlock/unres{ - dir = 8 - }, -/obj/effect/mapping_helpers/airlock/access/any/supply/maintenance, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) "cQn" = ( /obj/effect/turf_decal/stripes/corner{ dir = 4 @@ -7783,19 +7815,6 @@ /obj/machinery/light/small/directional/east, /turf/open/floor/wood, /area/station/command/heads_quarters/captain/private) -"cSb" = ( -/obj/structure/plasticflaps, -/obj/machinery/disposal/delivery_chute, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/structure/disposalpipe/trunk{ - dir = 1 - }, -/obj/structure/window/spawner/directional/east, -/obj/structure/window/spawner/directional/west, -/turf/open/floor/plating, -/area/station/cargo/sorting) "cSg" = ( /obj/structure/chair/comfy/brown{ dir = 4 @@ -7821,14 +7840,9 @@ }, /turf/open/floor/iron/white, /area/station/medical/virology) -"cSq" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/computer/mech_bay_power_console{ - dir = 4 - }, -/obj/machinery/light/small/directional/west, +"cSu" = ( /turf/open/floor/iron, -/area/station/cargo/warehouse) +/area/station/hallway/primary/central) "cSv" = ( /obj/effect/turf_decal/delivery, /obj/effect/mapping_helpers/airlock/cyclelink_helper{ @@ -7840,18 +7854,6 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) -"cSF" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/newscaster/directional/north, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/port) "cSN" = ( /obj/effect/turf_decal/trimline/purple/line, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -7880,14 +7882,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) -"cTk" = ( -/obj/machinery/camera/motion/directional/south{ - active_power_usage = 0; - c_tag = "Armory - External"; - use_power = 0 - }, -/turf/open/space/basic, -/area/space) "cTl" = ( /obj/structure/table/glass, /obj/item/reagent_containers/syringe, @@ -7930,22 +7924,6 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/entry) -"cTQ" = ( -/obj/machinery/door/airlock/maintenance{ - name = "Disposal Conveyor Access" - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, -/obj/effect/mapping_helpers/airlock/access/any/supply/maintenance, -/turf/open/floor/plating, -/area/station/maintenance/disposal) -"cTU" = ( -/obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/north, -/turf/open/floor/circuit/green{ - luminosity = 2 - }, -/area/station/ai_monitored/command/nuke_storage) "cUd" = ( /obj/machinery/door/firedoor, /obj/structure/cable, @@ -7980,12 +7958,6 @@ /obj/machinery/light/small/directional/south, /turf/open/floor/wood, /area/station/commons/dorms) -"cUD" = ( -/obj/machinery/door/airlock/maintenance, -/obj/structure/disposalpipe/segment, -/obj/effect/mapping_helpers/airlock/access/all/supply/general, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) "cUH" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/turf_decal/tile/neutral/fourcorners, @@ -8032,6 +8004,17 @@ }, /turf/open/floor/iron/white, /area/station/science/research) +"cVC" = ( +/obj/structure/cable, +/obj/machinery/mineral/stacking_unit_console{ + pixel_x = 32 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/light/small/directional/east, +/turf/open/floor/plating, +/area/station/maintenance/disposal) "cVJ" = ( /obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ dir = 4 @@ -8071,6 +8054,22 @@ dir = 1 }, /area/station/engineering/atmos/pumproom) +"cWz" = ( +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/obj/machinery/disposal/delivery_chute{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/structure/window/spawner/directional/south, +/obj/structure/window/spawner/directional/north, +/obj/structure/window/spawner/directional/west, +/obj/machinery/door/window/right/directional/east, +/turf/open/floor/plating, +/area/station/maintenance/disposal) "cWD" = ( /obj/effect/landmark/generic_maintenance_landmark, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ @@ -8127,6 +8126,15 @@ }, /turf/open/floor/iron/white, /area/station/medical/office) +"cXE" = ( +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/trimline/brown/filled/line, +/turf/open/floor/iron, +/area/station/cargo/sorting) "cXH" = ( /obj/effect/turf_decal/tile/yellow/half/contrasted{ dir = 4 @@ -8159,12 +8167,10 @@ }, /turf/open/floor/iron, /area/station/command/heads_quarters/ce) -"cYg" = ( -/obj/effect/turf_decal/bot_white, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/station/cargo/storage) +"cYj" = ( +/obj/machinery/igniter/incinerator_ordmix, +/turf/open/floor/engine/vacuum, +/area/station/science/ordnance/burnchamber) "cYx" = ( /obj/effect/turf_decal/tile/yellow/half/contrasted{ dir = 4 @@ -8241,12 +8247,6 @@ /obj/effect/turf_decal/tile/blue, /turf/open/floor/iron, /area/station/service/hydroponics) -"cZu" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/cargo/storage) "cZw" = ( /obj/structure/cable, /turf/open/floor/iron/dark/corner{ @@ -8299,6 +8299,17 @@ /obj/machinery/atmospherics/pipe/smart/simple/yellow/visible, /turf/open/floor/iron, /area/station/engineering/atmos) +"dbe" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/closet/crate, +/obj/effect/spawner/random/maintenance, +/obj/effect/spawner/random/maintenance, +/obj/effect/spawner/random/maintenance, +/obj/effect/turf_decal/stripes/corner, +/obj/item/reagent_containers/cup/soda_cans/pwr_game, +/obj/structure/sign/poster/contraband/random/directional/south, +/turf/open/floor/iron, +/area/station/cargo/warehouse) "dbh" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -8414,13 +8425,6 @@ }, /turf/open/floor/iron/dark/telecomms, /area/station/tcommsat/server) -"ddr" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/neutral/half/contrasted, -/turf/open/floor/iron/dark, -/area/station/ai_monitored/command/nuke_storage) "ddu" = ( /obj/structure/reagent_dispensers/fueltank, /turf/open/floor/plating, @@ -8569,6 +8573,15 @@ "dfC" = ( /turf/open/floor/iron/grimy, /area/station/tcommsat/computer) +"dfK" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/chair/office{ + dir = 1 + }, +/obj/effect/landmark/start/cargo_technician, +/obj/effect/turf_decal/tile/brown/opposingcorners, +/turf/open/floor/iron, +/area/station/cargo/sorting) "dfO" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -8736,13 +8749,14 @@ }, /turf/open/floor/iron, /area/station/engineering/atmos) -"dhy" = ( -/obj/structure/chair, -/obj/effect/turf_decal/trimline/brown/filled/line{ - dir = 1 +"dhz" = ( +/obj/effect/turf_decal/bot_white/left, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 }, -/turf/open/floor/iron, -/area/station/cargo/lobby) +/turf/open/floor/iron/dark, +/area/station/ai_monitored/command/nuke_storage) "dhN" = ( /obj/effect/turf_decal/stripes/line{ dir = 5 @@ -8809,6 +8823,18 @@ }, /turf/open/floor/iron, /area/station/science/xenobiology) +"dit" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/siding/thinplating_new{ + dir = 4 + }, +/obj/structure/railing/corner/end/flip{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/cargo/storage) "diC" = ( /obj/machinery/door/airlock/maintenance{ name = "Atmospherics Maintenance" @@ -8841,19 +8867,19 @@ /obj/structure/sign/warning/electric_shock/directional/south, /turf/open/space/basic, /area/space/nearstation) -"djG" = ( +"djn" = ( /obj/structure/disposalpipe/segment{ - dir = 6 - }, -/turf/open/floor/iron, -/area/station/cargo/sorting) -"dka" = ( -/obj/effect/turf_decal/arrows/red{ dir = 4 }, -/obj/effect/turf_decal/bot_white, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/structure/sign/poster/official/random/directional/north, /turf/open/floor/iron, -/area/station/cargo/storage) +/area/station/hallway/primary/port) "dkx" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, @@ -8883,6 +8909,12 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/hallway/primary/central) +"dkX" = ( +/obj/structure/cable, +/obj/machinery/light/cold/directional/north, +/obj/machinery/computer/security/telescreen/isolation/directional/north, +/turf/open/floor/iron, +/area/station/security/execution/transfer) "dla" = ( /obj/structure/chair/stool/directional/west, /obj/effect/turf_decal/trimline/red/warning{ @@ -8925,6 +8957,19 @@ /obj/structure/closet/emcloset/anchored, /turf/open/floor/plating, /area/station/maintenance/port) +"dme" = ( +/obj/effect/turf_decal/arrows{ + dir = 1 + }, +/obj/structure/disposaloutlet{ + dir = 1 + }, +/obj/structure/disposalpipe/trunk, +/obj/structure/window/spawner/directional/west, +/obj/structure/window/spawner/directional/south, +/obj/structure/window/spawner/directional/east, +/turf/open/floor/plating, +/area/station/cargo/storage) "dmJ" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/security/glass{ @@ -9129,6 +9174,13 @@ /obj/structure/closet/emcloset, /turf/open/floor/plating, /area/station/hallway/secondary/entry) +"dqy" = ( +/obj/machinery/status_display/evac/directional/north, +/obj/machinery/porta_turret/ai, +/obj/machinery/computer/security/telescreen/minisat/directional/east, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/aisat_interior) "dqE" = ( /obj/structure/closet/toolcloset, /obj/effect/turf_decal/bot, @@ -9136,6 +9188,9 @@ dir = 4 }, /obj/machinery/light/small/directional/north, +/obj/item/lightreplacer{ + pixel_y = 7 + }, /turf/open/floor/iron/dark/corner{ dir = 1 }, @@ -9283,6 +9338,29 @@ }, /turf/open/floor/iron, /area/station/engineering/atmos) +"dtE" = ( +/obj/structure/table/reinforced, +/obj/item/stamp/denied{ + pixel_x = 4; + pixel_y = -2 + }, +/obj/item/stamp{ + pixel_x = -3; + pixel_y = 3 + }, +/obj/item/pen/red{ + pixel_y = 10 + }, +/obj/item/dest_tagger{ + pixel_x = 9; + pixel_y = 10 + }, +/obj/item/pen/screwdriver{ + pixel_x = -7; + pixel_y = 7 + }, +/turf/open/floor/iron, +/area/station/cargo/sorting) "dtY" = ( /obj/machinery/meter/monitored/waste_loop, /obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/visible{ @@ -9297,11 +9375,7 @@ dir = 1 }, /area/station/engineering/atmos/pumproom) -"duk" = ( -/obj/machinery/light/small/dim/directional/west, -/turf/open/floor/iron, -/area/station/maintenance/port/aft) -"dup" = ( +"duc" = ( /obj/effect/turf_decal/siding/thinplating_new/dark/corner{ dir = 8 }, @@ -9313,11 +9387,15 @@ /obj/effect/turf_decal/stripes/line{ dir = 1 }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, /turf/open/floor/iron/dark/textured_half, /area/station/cargo/bitrunning/den) +"duk" = ( +/obj/machinery/light/small/dim/directional/west, +/turf/open/floor/iron, +/area/station/maintenance/port/aft) "duu" = ( /obj/effect/spawner/structure/window, /turf/open/floor/plating, @@ -9336,9 +9414,34 @@ /obj/item/kirbyplants/random, /turf/open/floor/iron, /area/station/security/brig) +"duG" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) "duI" = ( /turf/closed/wall, /area/station/command/bridge) +"duW" = ( +/obj/machinery/computer/security, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 1 + }, +/obj/machinery/requests_console/directional/north{ + department = "Quartermaster's Desk"; + name = "Security Requests Console" + }, +/turf/open/floor/iron, +/area/station/security/checkpoint/customs) +"dve" = ( +/obj/structure/cable, +/obj/effect/spawner/random/maintenance, +/obj/machinery/recharge_station, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) "dvn" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 4 @@ -9420,6 +9523,12 @@ }, /turf/open/floor/iron/cafeteria, /area/station/engineering/atmos) +"dwH" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) "dwJ" = ( /obj/structure/lattice, /obj/effect/spawner/random/structure/grille, @@ -9446,11 +9555,6 @@ /obj/machinery/portable_atmospherics/canister/oxygen, /turf/open/floor/plating, /area/station/maintenance/starboard/greater) -"dxl" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/landmark/event_spawn, -/turf/open/floor/iron, -/area/station/cargo/drone_bay) "dxo" = ( /obj/structure/railing{ dir = 6 @@ -9520,11 +9624,27 @@ }, /turf/open/floor/plating, /area/station/science/lab) +"dzs" = ( +/obj/machinery/portable_atmospherics/pipe_scrubber, +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 4 + }, +/obj/effect/turf_decal/tile/red/fourcorners, +/turf/open/floor/iron, +/area/station/engineering/atmos) "dzw" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/cable, /turf/open/floor/iron, /area/station/science/robotics/mechbay) +"dzX" = ( +/obj/structure/table, +/obj/machinery/cell_charger, +/obj/item/stock_parts/power_store/cell/high, +/obj/machinery/light_switch/directional/north, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/station/command/teleporter) "dzY" = ( /obj/machinery/light/small/directional/south, /turf/open/floor/engine/n2o, @@ -9556,17 +9676,12 @@ /obj/structure/window/reinforced/spawner/directional/north, /turf/open/floor/iron, /area/station/science/research) -"dBv" = ( -/obj/machinery/airalarm/directional/east, -/obj/structure/disposalpipe/trunk{ - dir = 1 - }, -/obj/effect/turf_decal/tile/brown/half/contrasted{ - dir = 8 +"dBE" = ( +/obj/machinery/door/airlock/maintenance{ + name = "Cargo Bay Maintenance" }, -/obj/machinery/light/small/directional/east, -/obj/machinery/disposal/bin/tagger, -/turf/open/floor/iron, +/obj/effect/mapping_helpers/airlock/access/all/supply/general, +/turf/open/floor/plating, /area/station/cargo/storage) "dBV" = ( /obj/docking_port/stationary/escape_pod{ @@ -9699,6 +9814,12 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/iron, /area/station/science/robotics/mechbay) +"dEr" = ( +/obj/machinery/light/small/dim/directional/west, +/obj/effect/decal/cleanable/dirt, +/obj/structure/sign/poster/contraband/random/directional/west, +/turf/open/floor/iron, +/area/station/cargo/warehouse) "dEx" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -9709,14 +9830,6 @@ }, /turf/open/floor/iron, /area/station/engineering/gravity_generator) -"dEF" = ( -/obj/machinery/atmospherics/components/binary/pump/on, -/obj/machinery/light/small/directional/east, -/obj/machinery/atmospherics/pipe/layer_manifold/supply/hidden{ - dir = 4 - }, -/turf/open/floor/engine, -/area/station/science/ordnance) "dEH" = ( /obj/effect/landmark/generic_maintenance_landmark, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ @@ -9741,6 +9854,10 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood, /area/station/service/library) +"dFg" = ( +/obj/structure/cable, +/turf/open/floor/carpet/orange, +/area/station/command/heads_quarters/qm) "dFi" = ( /obj/structure/closet/l3closet/virology, /obj/effect/turf_decal/tile/green/half/contrasted{ @@ -9816,6 +9933,14 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron/white, /area/station/medical/surgery/theatre) +"dGC" = ( +/obj/structure/reagent_dispensers/water_cooler, +/obj/effect/turf_decal/trimline/brown/filled/end{ + dir = 1 + }, +/obj/effect/decal/cleanable/cobweb, +/turf/open/floor/iron, +/area/station/cargo/sorting) "dGD" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -9840,6 +9965,28 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/engineering/main) +"dHi" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/door/airlock/mining{ + name = "Cargo Bay" + }, +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/access/all/supply/general, +/obj/effect/landmark/navigate_destination, +/obj/effect/turf_decal/tile/brown/fourcorners, +/turf/open/floor/iron, +/area/station/cargo/lobby) +"dHz" = ( +/obj/effect/turf_decal/trimline/brown/corner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/brown/line{ + dir = 6 + }, +/turf/open/floor/iron, +/area/station/cargo/lobby) "dHG" = ( /obj/machinery/atmospherics/components/binary/crystallizer{ dir = 4 @@ -9987,6 +10134,10 @@ /obj/effect/turf_decal/trimline/blue/filled/line, /turf/open/floor/iron/white, /area/station/medical/storage) +"dKx" = ( +/obj/machinery/atmospherics/pipe/smart/simple/dark/visible, +/turf/closed/wall/r_wall, +/area/station/science/ordnance/burnchamber) "dKC" = ( /turf/closed/wall, /area/station/maintenance/aft/lesser) @@ -10028,6 +10179,16 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/engineering/gravity_generator) +"dLh" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 1 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 6 + }, +/obj/structure/dresser, +/turf/open/floor/wood/large, +/area/station/command/heads_quarters/qm) "dLl" = ( /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -10038,12 +10199,6 @@ /obj/structure/cable, /turf/open/floor/iron/dark, /area/station/engineering/atmospherics_engine) -"dLm" = ( -/obj/machinery/sparker/directional/north{ - id = "Xenobio" - }, -/turf/open/floor/engine, -/area/station/science/xenobiology) "dLn" = ( /obj/structure/rack, /obj/item/wrench/medical, @@ -10198,17 +10353,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/fore) -"dOe" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/disposalpipe/segment{ - dir = 5 - }, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) "dOg" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, @@ -10377,6 +10521,20 @@ }, /turf/open/floor/circuit/green/telecomms/mainframe, /area/station/tcommsat/server) +"dQL" = ( +/obj/machinery/light_switch/directional/west{ + pixel_x = -20 + }, +/obj/machinery/computer/records/medical{ + dir = 4 + }, +/obj/effect/turf_decal/tile/red/fourcorners, +/obj/machinery/light/small/directional/west, +/obj/machinery/computer/security/telescreen/cmo/directional/west{ + name = "Medbay Monitor" + }, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/medical) "dQO" = ( /obj/effect/landmark/start/atmospheric_technician, /obj/effect/decal/cleanable/dirt, @@ -10503,6 +10661,32 @@ /obj/effect/turf_decal/tile/brown/anticorner/contrasted, /turf/open/floor/iron, /area/station/cargo/miningoffice) +"dSH" = ( +/obj/structure/table/reinforced, +/obj/item/storage/box/shipping{ + pixel_x = -6; + pixel_y = 15 + }, +/obj/item/multitool{ + pixel_x = -3; + pixel_y = -4 + }, +/obj/item/storage/box/lights/mixed{ + pixel_x = 8; + pixel_y = 11 + }, +/obj/item/flashlight/lamp{ + pixel_x = -7; + pixel_y = 5 + }, +/obj/item/storage/box/shipping{ + pixel_x = 8 + }, +/obj/effect/turf_decal/trimline/brown/filled/corner{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/cargo/sorting) "dSJ" = ( /obj/effect/turf_decal/siding/wood, /obj/structure/sign/poster/random/directional/north, @@ -10559,10 +10743,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/commons/locker) -"dTN" = ( -/obj/machinery/atmospherics/pipe/smart/simple/dark/visible, -/turf/closed/wall/r_wall, -/area/station/science/ordnance) "dTQ" = ( /obj/effect/turf_decal/trimline/green/filled/corner{ dir = 4 @@ -10594,6 +10774,10 @@ /obj/effect/landmark/start/chemist, /turf/open/floor/iron/white, /area/station/medical/chemistry) +"dUd" = ( +/obj/structure/noticeboard/qm, +/turf/closed/wall, +/area/station/command/heads_quarters/qm) "dUj" = ( /obj/structure/chair/office{ dir = 1 @@ -10614,6 +10798,17 @@ /obj/item/radio/intercom/directional/south, /turf/open/floor/iron, /area/station/hallway/secondary/entry) +"dUG" = ( +/obj/structure/table, +/obj/item/reagent_containers/condiment/enzyme{ + pixel_x = -7; + pixel_y = 13 + }, +/obj/item/reagent_containers/condiment/flour{ + pixel_x = 1 + }, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) "dVb" = ( /obj/structure/disposalpipe/segment, /turf/open/floor/plating, @@ -10779,11 +10974,6 @@ /obj/effect/turf_decal/delivery, /turf/open/floor/plating, /area/station/security/prison) -"dXp" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/mapping_helpers/turn_off_lights_with_lightswitch, -/turf/open/floor/iron, -/area/station/cargo/warehouse) "dXs" = ( /obj/structure/secure_safe/directional/north{ name = "armory safe A" @@ -10822,9 +11012,6 @@ }, /turf/open/floor/iron/dark, /area/station/security/execution/education) -"dXU" = ( -/turf/open/floor/engine/vacuum, -/area/station/science/ordnance) "dYa" = ( /obj/effect/turf_decal/tile/blue/fourcorners, /turf/open/floor/iron, @@ -10964,6 +11151,16 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /turf/open/floor/iron/dark, /area/station/ai_monitored/security/armory) +"eaA" = ( +/obj/structure/cable, +/obj/effect/turf_decal/siding/thinplating_new{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/cargo/storage) "eaF" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -10994,6 +11191,27 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/security/brig) +"eaQ" = ( +/obj/structure/cable, +/obj/machinery/firealarm/directional/west, +/turf/open/floor/iron, +/area/station/construction/storage_wing) +"ebd" = ( +/obj/effect/turf_decal/trimline/brown/warning{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/cargo/sorting) +"ebg" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/brown/opposingcorners, +/turf/open/floor/iron, +/area/station/cargo/storage) +"ebq" = ( +/obj/effect/spawner/random/engineering/tracking_beacon, +/turf/open/floor/iron/white, +/area/station/science/xenobiology) "ebr" = ( /obj/machinery/navbeacon{ codes_txt = "patrol;next_patrol=0-SecurityDesk"; @@ -11067,6 +11285,24 @@ /obj/structure/cable, /turf/open/floor/iron/kitchen_coldroom/freezerfloor, /area/station/service/kitchen/coldroom) +"ecm" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/navbeacon{ + codes_txt = "delivery;dir=1"; + location = "Disposals" + }, +/obj/structure/plasticflaps, +/obj/machinery/door/window/right/directional/south{ + name = "Delivery Door"; + req_access = list("cargo") + }, +/obj/machinery/conveyor{ + dir = 1; + id = "garbage" + }, +/obj/structure/plasticflaps, +/turf/open/floor/plating, +/area/station/maintenance/disposal) "ecp" = ( /obj/machinery/portable_atmospherics/canister/nitrogen, /obj/effect/turf_decal/bot, @@ -11140,13 +11376,6 @@ "edu" = ( /turf/closed/wall/r_wall, /area/station/maintenance/solars/starboard/aft) -"edA" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 6 - }, -/turf/open/floor/iron, -/area/station/cargo/storage) "edC" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -11487,12 +11716,6 @@ /obj/structure/chair/stool/directional/north, /turf/open/floor/iron, /area/station/commons/dorms) -"ejo" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/cargo/storage) "ejp" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/stripes/line, @@ -11571,6 +11794,13 @@ }, /turf/open/floor/wood, /area/station/service/lawoffice) +"ekb" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/cargo/sorting) "ekh" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -11715,6 +11945,19 @@ }, /turf/open/floor/iron, /area/station/engineering/break_room) +"elz" = ( +/obj/structure/rack, +/obj/item/circuitboard/machine/exoscanner{ + pixel_y = 3 + }, +/obj/item/circuitboard/machine/exoscanner, +/obj/item/circuitboard/machine/exoscanner{ + pixel_y = -3 + }, +/obj/machinery/power/apc/auto_name/directional/east, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/cargo/drone_bay) "elJ" = ( /turf/closed/wall/r_wall, /area/station/science/server) @@ -11753,6 +11996,15 @@ }, /turf/open/floor/iron/white, /area/station/science/research) +"eml" = ( +/obj/machinery/light/directional/south, +/obj/structure/chair{ + dir = 1 + }, +/obj/effect/landmark/start/assistant, +/obj/effect/turf_decal/tile/brown/anticorner/contrasted, +/turf/open/floor/iron, +/area/station/cargo/lobby) "emN" = ( /obj/machinery/door/airlock/external, /obj/effect/mapping_helpers/airlock/cyclelink_helper{ @@ -11762,6 +12014,11 @@ /obj/effect/mapping_helpers/airlock/access/all/engineering/external, /turf/open/floor/plating, /area/station/maintenance/port) +"emU" = ( +/obj/structure/cable, +/obj/machinery/netpod, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/cargo/bitrunning/den) "emY" = ( /obj/structure/chair/comfy/black{ dir = 8 @@ -11873,29 +12130,6 @@ }, /turf/open/floor/iron/white, /area/station/science/cytology) -"epv" = ( -/obj/structure/table, -/obj/item/hand_labeler{ - pixel_y = 11 - }, -/obj/item/stack/package_wrap{ - pixel_x = 2; - pixel_y = -3 - }, -/obj/item/stack/package_wrap{ - pixel_x = 2; - pixel_y = -3 - }, -/obj/item/hand_labeler_refill{ - pixel_x = -8; - pixel_y = 3 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/brown/anticorner/contrasted{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/cargo/sorting) "epF" = ( /obj/machinery/chem_master/condimaster{ desc = "Used to separate out liquids - useful for purifying botanical extracts. Also dispenses condiments."; @@ -12008,27 +12242,6 @@ /obj/effect/mapping_helpers/airlock/access/all/medical/general, /turf/open/floor/iron/white, /area/station/medical/medbay/central) -"erM" = ( -/obj/structure/table/wood, -/obj/effect/mapping_helpers/broken_floor, -/obj/item/clipboard{ - pixel_x = -6; - pixel_y = 4 - }, -/obj/item/stamp{ - pixel_x = 7; - pixel_y = 9 - }, -/obj/item/stamp/denied{ - pixel_x = 7; - pixel_y = 4 - }, -/obj/item/stamp/head/qm{ - pixel_x = 7; - pixel_y = -2 - }, -/turf/open/floor/wood, -/area/station/command/heads_quarters/qm) "erP" = ( /obj/structure/transit_tube/curved{ dir = 1 @@ -12234,6 +12447,25 @@ "eut" = ( /turf/closed/wall, /area/station/science/robotics/lab) +"euw" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/obj/structure/table/reinforced, +/obj/machinery/cell_charger, +/obj/item/stock_parts/power_store/cell/high, +/obj/machinery/firealarm/directional/west, +/obj/machinery/camera/directional/north{ + c_tag = "Science Mechbay"; + network = list("ss13","rd") + }, +/obj/machinery/button/door/directional/north{ + id = "mechbay"; + name = "Mech Bay Shutters Control"; + req_access = list("robotics") + }, +/turf/open/floor/iron, +/area/station/science/robotics/mechbay) "euQ" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -12294,6 +12526,22 @@ /obj/effect/landmark/start/depsec/medical, /turf/open/floor/iron/dark, /area/station/security/checkpoint/medical) +"ewc" = ( +/obj/machinery/power/apc/auto_name/directional/north, +/obj/structure/cable, +/obj/effect/turf_decal/siding/wood, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/machinery/light/small/directional/north, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/obj/machinery/disposal/bin{ + name = "Jim Norton's Quebecois Coffee disposal unit" + }, +/turf/open/floor/wood/large, +/area/station/command/heads_quarters/qm) "ewf" = ( /obj/effect/turf_decal/tile/neutral, /turf/open/floor/iron, @@ -12322,6 +12570,25 @@ }, /turf/open/floor/iron, /area/station/commons/fitness/recreation) +"ewr" = ( +/obj/machinery/computer/cargo{ + dir = 4 + }, +/obj/effect/turf_decal/bot, +/obj/machinery/button/door/directional/west{ + id = "QMLoaddoor"; + name = "Loading Doors"; + pixel_y = -8; + req_access = list("cargo") + }, +/obj/machinery/button/door/directional/west{ + id = "QMLoaddoor2"; + name = "Loading Doors"; + pixel_y = 8; + req_access = list("cargo") + }, +/turf/open/floor/iron, +/area/station/cargo/storage) "ewB" = ( /obj/effect/turf_decal/stripes/corner{ dir = 1 @@ -12390,15 +12657,6 @@ /obj/structure/cable, /turf/open/floor/iron/freezer, /area/station/security/prison/shower) -"exr" = ( -/obj/structure/table/wood, -/obj/item/paper_bin{ - pixel_x = -3; - pixel_y = 7 - }, -/obj/item/pen, -/turf/open/floor/wood, -/area/station/service/lawoffice) "exC" = ( /obj/effect/turf_decal/plaque{ icon_state = "L3" @@ -12413,6 +12671,16 @@ }, /turf/open/floor/iron, /area/station/command/teleporter) +"exQ" = ( +/obj/structure/extinguisher_cabinet/directional/south, +/obj/effect/turf_decal/trimline/brown/warning{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/turf/open/floor/iron, +/area/station/cargo/storage) "eyd" = ( /obj/effect/turf_decal/trimline/red/filled/line{ dir = 4 @@ -12449,22 +12717,6 @@ }, /turf/open/floor/iron, /area/station/security/brig) -"ezP" = ( -/obj/structure/chair/office{ - dir = 8 - }, -/obj/machinery/computer/security/telescreen{ - desc = "Used for watching output from station security cameras."; - name = "Security Camera Monitor"; - network = list("ss13"); - pixel_y = 30 - }, -/obj/effect/turf_decal/tile/red/anticorner/contrasted{ - dir = 1 - }, -/obj/machinery/light/small/directional/north, -/turf/open/floor/iron, -/area/station/hallway/secondary/exit/departure_lounge) "ezT" = ( /obj/machinery/door/airlock/research{ name = "Research Division Access" @@ -12648,6 +12900,12 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /turf/open/floor/iron, /area/station/engineering/atmos/storage/gas) +"eED" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/spawner/random/structure/crate, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/cargo/warehouse) "eEG" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -12807,6 +13065,26 @@ }, /turf/open/floor/iron, /area/station/commons/lounge) +"eIc" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light/small/dim/directional/south, +/obj/machinery/mech_bay_recharge_port{ + dir = 8 + }, +/obj/structure/sign/warning/directional/south, +/turf/open/floor/iron, +/area/station/cargo/warehouse) +"eIf" = ( +/obj/machinery/light/directional/south, +/obj/machinery/firealarm/directional/south, +/obj/structure/rack, +/obj/item/storage/briefcase/secure, +/obj/item/cigarette/cigar, +/obj/effect/turf_decal/tile/blue/half/contrasted{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/command/bridge) "eIy" = ( /obj/structure/cable, /obj/machinery/photocopier, @@ -12826,6 +13104,16 @@ /obj/machinery/light/small/directional/west, /turf/open/floor/iron/white, /area/station/science/research) +"eJd" = ( +/obj/structure/table/wood, +/obj/machinery/computer/security/telescreen/prison/directional/north, +/obj/item/flashlight/lamp/green{ + pixel_x = 1; + pixel_y = 5 + }, +/obj/item/book/manual/wiki/security_space_law, +/turf/open/floor/wood, +/area/station/service/lawoffice) "eJh" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -12886,12 +13174,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) -"eKk" = ( -/obj/machinery/computer/cargo{ - dir = 1 - }, -/turf/open/floor/wood, -/area/station/command/heads_quarters/qm) "eKv" = ( /obj/machinery/portable_atmospherics/canister, /obj/structure/cable, @@ -12923,6 +13205,16 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/service/hydroponics) +"eKG" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/tile/brown{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/construction/storage_wing) "eKP" = ( /turf/closed/wall/r_wall, /area/station/science/ordnance/freezerchamber) @@ -12935,13 +13227,6 @@ }, /turf/open/floor/carpet, /area/station/command/corporate_showroom) -"eLb" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/cargo/storage) "eLh" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -13038,6 +13323,17 @@ }, /turf/closed/wall/r_wall, /area/station/hallway/secondary/command) +"eMf" = ( +/obj/structure/disposaloutlet{ + dir = 1 + }, +/obj/structure/disposalpipe/trunk, +/obj/structure/window/spawner/directional/west, +/obj/machinery/light/small/directional/south, +/obj/structure/window/spawner/directional/east, +/obj/structure/plasticflaps, +/turf/open/floor/plating, +/area/station/cargo/sorting) "eMG" = ( /obj/structure/closet/lasertag/blue, /obj/effect/landmark/start/hangover/closet, @@ -13069,6 +13365,11 @@ /obj/structure/window/spawner/directional/west, /turf/open/floor/grass, /area/station/science/research) +"eMY" = ( +/obj/machinery/power/apc/auto_name/directional/east, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) "eNb" = ( /obj/effect/turf_decal/stripes/line{ dir = 6 @@ -13098,19 +13399,29 @@ "eNR" = ( /turf/closed/wall, /area/station/ai_monitored/aisat/exterior) -"eNU" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/structure/cable, -/obj/machinery/airalarm/directional/east, -/turf/open/floor/plating, -/area/station/maintenance/disposal) "eNV" = ( /obj/effect/turf_decal/delivery, /obj/effect/spawner/random/structure/crate, /turf/open/floor/iron, /area/station/maintenance/port/aft) +"eOb" = ( +/obj/machinery/vending/wardrobe/cargo_wardrobe, +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 8 + }, +/obj/machinery/light/small/directional/west, +/turf/open/floor/iron, +/area/station/cargo/storage) +"eOl" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/mapping_helpers/airlock/access/all/supply/general, +/obj/machinery/door/airlock/maintenance{ + name = "Quartermaster Maintenance" + }, +/turf/open/floor/plating, +/area/station/cargo/storage) "eOm" = ( /obj/effect/turf_decal/stripes/corner{ dir = 8 @@ -13176,6 +13487,11 @@ /obj/machinery/newscaster/directional/west, /turf/open/floor/iron/white, /area/station/medical/medbay/central) +"ePj" = ( +/obj/effect/decal/cleanable/cobweb, +/obj/machinery/suit_storage_unit/industrial/loader, +/turf/open/floor/iron, +/area/station/cargo/warehouse) "ePu" = ( /obj/effect/spawner/structure/window/reinforced/tinted, /turf/open/floor/plating, @@ -13293,10 +13609,20 @@ /obj/effect/turf_decal/trimline/blue/filled/line, /turf/open/floor/iron/white, /area/station/medical/cryo) -"eRn" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/closed/wall/r_wall, -/area/station/science/ordnance) +"eRd" = ( +/obj/machinery/light/directional/north, +/obj/structure/disposalpipe/trunk, +/obj/machinery/disposal/delivery_chute{ + dir = 4; + name = "Crate Returns" + }, +/obj/effect/turf_decal/delivery, +/obj/structure/window/spawner/directional/south, +/obj/effect/turf_decal/tile/brown/anticorner/contrasted{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/cargo/lobby) "eRR" = ( /obj/structure/table, /obj/item/screwdriver{ @@ -13374,11 +13700,6 @@ }, /turf/open/floor/iron, /area/station/commons/fitness/recreation) -"eTv" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron, -/area/station/hallway/secondary/exit/departure_lounge) "eTI" = ( /obj/effect/turf_decal/stripes/line{ dir = 10 @@ -13451,16 +13772,6 @@ }, /turf/open/floor/iron/showroomfloor, /area/station/security/warden) -"eVh" = ( -/obj/machinery/conveyor{ - dir = 1; - id = "packageExternal" - }, -/obj/structure/plasticflaps/opaque, -/obj/structure/window/spawner/directional/west, -/obj/structure/window/spawner/directional/east, -/turf/open/floor/plating, -/area/station/cargo/sorting) "eVi" = ( /obj/structure/closet/firecloset, /turf/open/floor/iron/dark, @@ -13663,21 +13974,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/medical/virology) -"eYL" = ( -/obj/structure/table/reinforced, -/obj/item/multitool{ - pixel_x = -3; - pixel_y = -4 - }, -/obj/item/storage/box/lights/mixed{ - pixel_x = 11; - pixel_y = 11 - }, -/obj/effect/turf_decal/tile/brown/half/contrasted{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/cargo/sorting) "eYT" = ( /obj/structure/table, /obj/machinery/recharger{ @@ -13703,6 +13999,14 @@ /obj/machinery/light_switch/directional/south, /turf/open/floor/wood, /area/station/service/library) +"eZo" = ( +/obj/structure/cable, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/airalarm/directional/east, +/turf/open/floor/plating, +/area/station/maintenance/disposal) "eZz" = ( /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -13907,10 +14211,6 @@ }, /turf/open/floor/iron, /area/station/engineering/atmos/pumproom) -"fdI" = ( -/obj/effect/turf_decal/tile/neutral, -/turf/open/floor/iron/dark, -/area/station/ai_monitored/command/nuke_storage) "fdQ" = ( /obj/structure/rack, /obj/effect/turf_decal/tile/blue/half/contrasted{ @@ -13939,6 +14239,13 @@ }, /turf/open/floor/iron/white, /area/station/science/xenobiology) +"fea" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/reagent_dispensers/wall/peppertank/directional/east, +/obj/effect/landmark/start/depsec/supply, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/security/checkpoint/supply) "fec" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/green/visible, /turf/closed/wall/r_wall, @@ -14181,6 +14488,15 @@ }, /turf/open/floor/wood/large, /area/station/commons/lounge) +"fhU" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/obj/machinery/light/small/directional/east, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/computer/security/telescreen/ordnance/directional/east, +/turf/open/floor/iron/dark, +/area/station/science/ordnance/testlab) "fia" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/hatch{ @@ -14221,15 +14537,6 @@ "fiA" = ( /turf/open/floor/iron, /area/station/security/prison/garden) -"fiC" = ( -/obj/effect/turf_decal/trimline/brown/filled/line{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment, -/turf/open/floor/iron, -/area/station/cargo/storage) "fiE" = ( /obj/machinery/atmospherics/components/binary/pump{ dir = 8; @@ -14257,6 +14564,14 @@ /obj/effect/turf_decal/siding/purple, /turf/open/floor/iron/dark, /area/station/science/ordnance) +"fiX" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/light/floor, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) "fjb" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -14295,6 +14610,22 @@ /obj/machinery/light/directional/east, /turf/open/floor/engine, /area/station/engineering/supermatter/room) +"fjw" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/disposalpipe/segment, +/obj/structure/sign/poster/official/random/directional/west, +/obj/machinery/conveyor{ + dir = 1; + id = "packageExternal" + }, +/obj/machinery/door/window/left/directional/north{ + req_access = list("shipping") + }, +/obj/structure/window/spawner/directional/west, +/turf/open/floor/plating, +/area/station/cargo/sorting) "fjD" = ( /turf/closed/wall, /area/station/commons/toilet/auxiliary) @@ -14348,37 +14679,6 @@ }, /turf/open/floor/iron, /area/station/security/courtroom) -"fkC" = ( -/obj/structure/table, -/obj/item/paper_bin{ - pixel_x = 8; - pixel_y = 1 - }, -/obj/item/paper_bin{ - pixel_x = 8; - pixel_y = 6 - }, -/obj/item/paper_bin{ - pixel_x = 8; - pixel_y = 11 - }, -/obj/item/folder/yellow{ - pixel_x = -6; - pixel_y = 8 - }, -/obj/item/folder/yellow{ - pixel_x = -9; - pixel_y = 1 - }, -/obj/item/paper{ - pixel_x = -5 - }, -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/tile/brown/half/contrasted{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/cargo/storage) "fkD" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -14476,6 +14776,18 @@ /obj/machinery/light/small/directional/west, /turf/open/floor/iron, /area/station/hallway/primary/starboard) +"flG" = ( +/obj/structure/window/spawner/directional/west, +/obj/structure/window/spawner/directional/east, +/obj/structure/disposaloutlet{ + dir = 1 + }, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/obj/structure/plasticflaps, +/turf/open/floor/plating, +/area/station/cargo/sorting) "flN" = ( /obj/machinery/power/port_gen/pacman/pre_loaded, /turf/open/floor/plating, @@ -14551,6 +14863,17 @@ /obj/structure/table/wood, /turf/open/floor/carpet, /area/station/service/chapel/funeral) +"fmG" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/door/airlock/maintenance{ + name = "Mining Dock Maintenance" + }, +/obj/effect/mapping_helpers/airlock/access/any/supply/bit_den, +/obj/effect/mapping_helpers/airlock/access/any/supply/mining, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) "fmJ" = ( /obj/structure/rack, /obj/item/circuitboard/machine/telecomms/bus, @@ -14701,6 +15024,14 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/security/prison/safe) +"fpn" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) "fpy" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/public/glass{ @@ -14724,17 +15055,25 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/security/prison/safe) -"fpH" = ( -/obj/structure/disposalpipe/segment{ +"fpV" = ( +/obj/structure/cable, +/obj/effect/turf_decal/siding/wood{ dir = 4 }, -/obj/effect/turf_decal/stripes/corner{ +/obj/effect/turf_decal/siding/wood{ dir = 8 }, -/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/plating, -/area/station/maintenance/disposal) +/turf/open/floor/wood/large, +/area/station/command/heads_quarters/qm) +"fqe" = ( +/obj/machinery/door/poddoor/shutters{ + name = "Warehouse Shutters"; + id = "warehouse" + }, +/turf/open/floor/catwalk_floor, +/area/station/cargo/warehouse) "fqB" = ( /obj/effect/turf_decal/tile/neutral/fourcorners, /obj/structure/cable, @@ -14895,6 +15234,15 @@ /obj/structure/sign/warning/pods, /turf/closed/wall, /area/station/commons/locker) +"ftQ" = ( +/obj/effect/turf_decal/siding/white{ + dir = 4 + }, +/obj/structure/railing{ + dir = 4 + }, +/turf/open/water, +/area/station/service/hydroponics/garden) "fuc" = ( /obj/structure/frame/machine{ anchored = 1 @@ -14902,6 +15250,9 @@ /obj/machinery/light/small/directional/west, /turf/open/floor/circuit/green/off, /area/station/science/research) +"fur" = ( +/turf/open/floor/plating, +/area/station/maintenance/port/greater) "fuu" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -14935,6 +15286,18 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/science/ordnance/testlab) +"fwb" = ( +/obj/effect/turf_decal/tile/brown/opposingcorners, +/turf/open/floor/iron, +/area/station/cargo/storage) +"fwd" = ( +/obj/machinery/power/apc/auto_name/directional/east, +/obj/structure/cable, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/cargo/storage) "fwz" = ( /obj/machinery/portable_atmospherics/canister/nitrogen, /turf/open/floor/iron/dark, @@ -14957,14 +15320,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) -"fwZ" = ( -/obj/machinery/light/directional/west, -/obj/machinery/computer/piratepad_control/civilian{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/brown/filled/line, -/turf/open/floor/iron, -/area/station/hallway/primary/central) "fxa" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -15118,6 +15473,15 @@ /obj/effect/turf_decal/tile/red/fourcorners, /turf/open/floor/iron, /area/station/security/checkpoint/engineering) +"fAk" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/structure/crate, +/obj/effect/turf_decal/bot_white, +/obj/effect/turf_decal/arrows/red{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/cargo/warehouse) "fAt" = ( /obj/machinery/disposal/bin, /obj/structure/disposalpipe/trunk{ @@ -15126,6 +15490,13 @@ /obj/machinery/light/small/directional/south, /turf/open/floor/iron/grimy, /area/station/service/chapel/office) +"fAA" = ( +/obj/structure/table, +/obj/machinery/cell_charger, +/obj/machinery/airalarm/directional/east, +/obj/item/stock_parts/power_store/cell/high, +/turf/open/floor/iron/dark, +/area/station/engineering/storage/tech) "fAE" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -15208,11 +15579,6 @@ /obj/effect/turf_decal/tile/green/fourcorners, /turf/open/floor/iron, /area/station/hallway/primary/central) -"fCO" = ( -/obj/structure/cable, -/obj/machinery/light/directional/west, -/turf/open/floor/iron, -/area/station/construction/storage_wing) "fDc" = ( /obj/machinery/door/firedoor, /obj/structure/disposalpipe/segment{ @@ -15228,11 +15594,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central) -"fDo" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/spawner/random/structure/crate, -/turf/open/floor/iron, -/area/station/cargo/warehouse) "fDC" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 8 @@ -15529,13 +15890,6 @@ }, /turf/open/floor/wood, /area/station/commons/vacant_room/office) -"fHX" = ( -/obj/machinery/holopad, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/wood, -/area/station/command/heads_quarters/qm) "fIo" = ( /obj/effect/turf_decal/bot_white, /obj/effect/turf_decal/tile/neutral/fourcorners, @@ -15545,10 +15899,6 @@ /obj/machinery/telecomms/server/presets/supply, /turf/open/floor/circuit/telecomms/mainframe, /area/station/tcommsat/server) -"fIR" = ( -/obj/structure/sign/warning/secure_area/directional/north, -/turf/open/space/basic, -/area/space) "fIS" = ( /obj/machinery/airalarm/directional/south, /obj/structure/disposalpipe/segment{ @@ -15757,11 +16107,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/primary/central) -"fMr" = ( -/obj/effect/spawner/random/maintenance, -/obj/machinery/recharge_station, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) "fMy" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, @@ -15855,6 +16200,21 @@ }, /turf/open/floor/iron/dark, /area/station/security/range) +"fOB" = ( +/obj/effect/mapping_helpers/airlock/unres{ + dir = 1 + }, +/obj/effect/mapping_helpers/airlock/access/any/security/maintenance, +/obj/machinery/door/airlock/maintenance{ + name = "Brig Maintenance" + }, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) "fOS" = ( /obj/structure/flora/bush/sparsegrass/style_random, /obj/structure/flora/bush/flowers_yw/style_random, @@ -15975,27 +16335,11 @@ /obj/effect/spawner/random/structure/grille, /turf/open/floor/plating, /area/station/maintenance/fore) -"fRZ" = ( -/obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/west, -/obj/machinery/light_switch/directional/south, -/obj/effect/mapping_helpers/burnt_floor, -/turf/open/floor/plating, -/area/station/maintenance/solars/port/fore) "fSd" = ( /obj/structure/chair/stool/directional/west, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood, /area/station/commons/lounge) -"fSw" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/computer/security/telescreen/vault{ - pixel_y = 30 - }, -/turf/open/floor/wood, -/area/station/command/heads_quarters/qm) "fSz" = ( /obj/effect/turf_decal/delivery, /obj/structure/disposalpipe/segment{ @@ -16171,6 +16515,14 @@ /obj/effect/turf_decal/tile/red/fourcorners, /turf/open/floor/iron/white, /area/station/security/prison/safe) +"fWn" = ( +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/obj/effect/turf_decal/tile/brown/opposingcorners, +/obj/structure/closet/crate, +/turf/open/floor/iron, +/area/station/cargo/sorting) "fWw" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -16197,13 +16549,6 @@ }, /turf/open/floor/iron, /area/station/maintenance/starboard/lesser) -"fWU" = ( -/obj/structure/chair/office{ - dir = 1 - }, -/obj/effect/landmark/start/cargo_technician, -/turf/open/floor/iron, -/area/station/cargo/sorting) "fWW" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 8 @@ -16254,6 +16599,12 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/white, /area/station/security/prison) +"fXZ" = ( +/obj/effect/turf_decal/delivery, +/obj/effect/decal/cleanable/oil/streak, +/obj/effect/turf_decal/trimline/brown/filled/arrow_cw, +/turf/open/floor/iron, +/area/station/cargo/storage) "fYb" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 8 @@ -16333,6 +16684,12 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/wood, /area/station/service/library) +"fZt" = ( +/obj/structure/sign/nanotrasen{ + pixel_x = 32 + }, +/turf/open/space/basic, +/area/space/nearstation) "fZw" = ( /obj/structure/table, /obj/item/clothing/gloves/latex, @@ -16428,6 +16785,25 @@ }, /turf/open/floor/iron/white, /area/station/medical/storage) +"gbn" = ( +/obj/machinery/computer/crew{ + dir = 4 + }, +/obj/machinery/keycard_auth/directional/south{ + pixel_x = 6 + }, +/obj/machinery/button/door/directional/south{ + id = "cmoprivacy"; + name = "CMO Privacy Shutters"; + pixel_x = -8; + req_access = list("cmo") + }, +/obj/effect/turf_decal/tile/blue/anticorner/contrasted{ + dir = 8 + }, +/obj/machinery/computer/security/telescreen/cmo/directional/west, +/turf/open/floor/iron/white, +/area/station/command/heads_quarters/cmo) "gbG" = ( /obj/effect/spawner/random/structure/closet_maintenance, /obj/item/storage/box/lights/mixed, @@ -16497,12 +16873,6 @@ }, /turf/open/floor/grass, /area/station/science/research) -"gda" = ( -/obj/structure/sign/nanotrasen{ - pixel_x = 32 - }, -/turf/open/space/basic, -/area/space) "gdb" = ( /turf/closed/wall/r_wall, /area/station/security/range) @@ -16554,20 +16924,6 @@ /obj/effect/spawner/random/engineering/flashlight, /turf/open/floor/iron/dark, /area/station/security/office) -"gen" = ( -/obj/structure/table/glass, -/obj/item/folder/blue{ - pixel_y = 3 - }, -/obj/item/pen, -/obj/machinery/computer/security/telescreen/minisat{ - dir = 1; - pixel_y = -28 - }, -/obj/effect/turf_decal/tile/blue, -/obj/structure/window/reinforced/spawner/directional/east, -/turf/open/floor/iron/dark, -/area/station/engineering/transit_tube) "gev" = ( /obj/effect/turf_decal/delivery, /turf/open/floor/iron, @@ -16592,6 +16948,22 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/grass, /area/station/medical/virology) +"geR" = ( +/obj/structure/table, +/obj/item/papercutter{ + pixel_x = 9; + pixel_y = 4 + }, +/obj/item/stamp/denied{ + pixel_x = -7; + pixel_y = 7 + }, +/obj/item/stamp/granted{ + pixel_x = -7 + }, +/obj/effect/turf_decal/tile/brown/opposingcorners, +/turf/open/floor/iron, +/area/station/cargo/sorting) "geV" = ( /obj/structure/sink/directional/east, /obj/machinery/light_switch/directional/west, @@ -16600,6 +16972,15 @@ }, /turf/open/floor/iron, /area/station/service/hydroponics/garden) +"gfa" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) "gfe" = ( /obj/effect/decal/cleanable/cobweb/cobweb2, /obj/structure/table, @@ -16659,17 +17040,6 @@ /obj/machinery/firealarm/directional/west, /turf/open/floor/iron, /area/station/hallway/primary/central) -"ggw" = ( -/obj/structure/filingcabinet, -/obj/machinery/computer/security/telescreen/minisat{ - dir = 8; - pixel_x = 26 - }, -/obj/effect/turf_decal/tile/red/half/contrasted{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/security/checkpoint/engineering) "ggH" = ( /obj/effect/spawner/random/structure/chair_maintenance, /turf/open/floor/iron/checker, @@ -16694,6 +17064,13 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central) +"ggZ" = ( +/obj/effect/turf_decal/stripes/line, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/disposal) "ghc" = ( /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 4 @@ -16732,44 +17109,6 @@ "ghL" = ( /turf/closed/wall/r_wall, /area/space/nearstation) -"gib" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) -"gil" = ( -/obj/machinery/atmospherics/components/binary/pump{ - dir = 1 - }, -/obj/machinery/airlock_sensor/incinerator_ordmix{ - pixel_x = -24 - }, -/obj/machinery/atmospherics/pipe/layer_manifold/scrubbers/hidden{ - dir = 4 - }, -/turf/open/floor/engine, -/area/station/science/ordnance) -"gip" = ( -/obj/structure/table/wood, -/obj/machinery/fax{ - fax_name = "Quartermaster's Office"; - name = "Quartermaster's Fax Machine" - }, -/obj/machinery/light/directional/west, -/turf/open/floor/wood, -/area/station/command/heads_quarters/qm) -"giz" = ( -/obj/machinery/conveyor/inverted{ - dir = 10; - id = "QMLoad2" - }, -/obj/effect/turf_decal/stripes/line{ - dir = 6 - }, -/turf/open/floor/plating, -/area/station/cargo/storage) "giA" = ( /turf/closed/wall/r_wall, /area/station/tcommsat/computer) @@ -16778,15 +17117,6 @@ /obj/effect/turf_decal/delivery, /turf/open/floor/iron, /area/station/engineering/main) -"giR" = ( -/obj/machinery/computer/security/telescreen/minisat{ - dir = 1; - pixel_y = -29 - }, -/obj/structure/bed/dogbed/renault, -/mob/living/basic/pet/fox/renault, -/turf/open/floor/carpet, -/area/station/command/heads_quarters/captain/private) "giT" = ( /obj/effect/spawner/random/structure/closet_maintenance, /obj/effect/spawner/random/maintenance/two, @@ -16804,15 +17134,6 @@ }, /turf/open/floor/iron, /area/station/commons/vacant_room/commissary) -"gji" = ( -/obj/effect/turf_decal/trimline/brown/filled/line{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment, -/turf/open/floor/iron, -/area/station/hallway/primary/central) "gjk" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable, @@ -16860,19 +17181,6 @@ /obj/effect/turf_decal/bot, /turf/open/floor/iron, /area/station/service/hydroponics) -"gkC" = ( -/obj/structure/table, -/obj/machinery/button/door{ - id = "xenobio7"; - layer = 3.3; - name = "Xenobio Pen 7 Blast Doors"; - pixel_y = 4; - req_access = list("xenobiology") - }, -/obj/structure/window/reinforced/spawner/directional/south, -/obj/structure/window/reinforced/spawner/directional/west, -/turf/open/floor/iron, -/area/station/science/xenobiology) "gkD" = ( /obj/machinery/recharger{ pixel_y = 3 @@ -16898,16 +17206,6 @@ /obj/machinery/light/directional/west, /turf/open/floor/iron, /area/station/commons/fitness/recreation) -"gkS" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) "gkU" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/closet/emcloset, @@ -17075,6 +17373,12 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/starboard) +"gnW" = ( +/obj/machinery/atmospherics/components/binary/dp_vent_pump/high_volume/incinerator_ordmix{ + dir = 8 + }, +/turf/open/floor/engine, +/area/station/science/ordnance/burnchamber) "gog" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/cable, @@ -17092,18 +17396,6 @@ }, /turf/open/floor/iron, /area/station/engineering/main) -"goG" = ( -/obj/item/radio/intercom/directional/north, -/obj/machinery/camera/directional/north{ - c_tag = "Cargo Bay - Fore" - }, -/obj/machinery/light/directional/north, -/obj/effect/turf_decal/box/red, -/obj/effect/turf_decal/trimline/brown/filled/corner{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/cargo/storage) "goW" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/closet, @@ -17135,14 +17427,15 @@ /area/station/service/theater) "gpk" = ( /obj/structure/table, -/obj/item/hatchet, -/obj/item/cultivator, -/obj/item/crowbar, -/obj/item/reagent_containers/cup/watering_can, -/obj/item/plant_analyzer, /obj/effect/turf_decal/stripes/line{ dir = 1 }, +/obj/item/storage/bag/plants/portaseeder, +/obj/item/crowbar, +/obj/item/reagent_containers/cup/watering_can, +/obj/item/cultivator, +/obj/item/hatchet, +/obj/item/plant_analyzer, /turf/open/floor/iron, /area/station/service/hydroponics/garden) "gpv" = ( @@ -17292,28 +17585,6 @@ }, /turf/open/floor/plating/airless, /area/station/science/ordnance/bomb) -"grI" = ( -/obj/machinery/door/airlock/external{ - name = "Solar Maintenance" - }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper, -/obj/structure/cable, -/obj/effect/mapping_helpers/airlock/access/all/engineering/general, -/turf/open/floor/plating, -/area/station/maintenance/solars/port/fore) -"grR" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/camera/directional/east{ - c_tag = "Outer Vault"; - name = "storage wing camera"; - network = list("ss13","vault") - }, -/obj/structure/reagent_dispensers/watertank, -/obj/effect/turf_decal/trimline/brown/filled/corner, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/window/spawner/directional/south, -/turf/open/floor/iron, -/area/station/construction/storage_wing) "grZ" = ( /obj/structure/chair, /obj/machinery/camera/directional/north{ @@ -17536,6 +17807,12 @@ /obj/effect/landmark/start/hangover, /turf/open/floor/wood, /area/station/commons/lounge) +"gvA" = ( +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/cargo/storage) "gvC" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -17616,6 +17893,23 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/engineering/atmos) +"gxu" = ( +/obj/machinery/button/door/directional/south{ + id = "warehouse"; + name = "Warehouse Shutters Control" + }, +/obj/effect/turf_decal/trimline/red/filled/warning/corner{ + dir = 8 + }, +/obj/machinery/camera/directional/south{ + c_tag = "Cargo Bay - Aft"; + pixel_x = 14 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/cargo/storage) "gxx" = ( /obj/machinery/door/airlock/atmos/glass{ name = "Atmospherics Monitoring" @@ -17628,6 +17922,32 @@ }, /turf/open/floor/iron/checker, /area/station/engineering/atmos/storage/gas) +"gxM" = ( +/obj/effect/turf_decal/tile/brown/opposingcorners, +/obj/structure/table, +/obj/item/stack/package_wrap{ + pixel_x = 2; + pixel_y = -3 + }, +/obj/item/stack/package_wrap{ + pixel_x = 1; + pixel_y = 6 + }, +/obj/item/stack/package_wrap{ + pixel_x = -4; + pixel_y = 8 + }, +/obj/item/dest_tagger{ + pixel_x = -9; + pixel_y = 12 + }, +/obj/item/hand_labeler_refill{ + pixel_x = -11; + pixel_y = -3 + }, +/obj/item/stack/wrapping_paper, +/turf/open/floor/iron, +/area/station/cargo/sorting) "gya" = ( /obj/structure/table, /obj/item/storage/box/hug{ @@ -17640,6 +17960,23 @@ }, /turf/open/floor/iron, /area/station/security/execution/transfer) +"gyc" = ( +/obj/machinery/door/airlock/research/glass/incinerator/ordmix_interior, +/obj/effect/mapping_helpers/airlock/locked, +/obj/machinery/airlock_controller/incinerator_ordmix{ + pixel_x = -24 + }, +/obj/machinery/button/ignition/incinerator/ordmix{ + pixel_x = 24; + pixel_y = -6 + }, +/obj/machinery/button/door/incinerator_vent_ordmix{ + pixel_x = 24; + pixel_y = 8 + }, +/obj/effect/mapping_helpers/airlock/access/all/science/ordnance, +/turf/open/floor/engine, +/area/station/science/ordnance/burnchamber) "gyg" = ( /obj/machinery/atmospherics/pipe/smart/simple/dark/visible{ dir = 9 @@ -17687,10 +18024,6 @@ /obj/machinery/light/no_nightlight/directional/west, /turf/open/floor/iron, /area/station/engineering/atmos) -"gyK" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/general/visible, -/turf/open/floor/engine, -/area/station/science/xenobiology) "gyO" = ( /obj/structure/cable, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ @@ -17718,15 +18051,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/port/aft) -"gzO" = ( -/obj/machinery/firealarm/directional/west, -/obj/machinery/camera/directional/west{ - c_tag = "Restrooms" - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/duct, -/turf/open/floor/iron/freezer, -/area/station/commons/toilet/restrooms) "gzW" = ( /obj/structure/chair/office{ dir = 8 @@ -17832,26 +18156,11 @@ "gBD" = ( /turf/closed/wall/r_wall, /area/station/command/teleporter) -"gBN" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/cargo/sorting) "gBY" = ( /obj/structure/closet/emcloset, /obj/machinery/light/small/directional/west, /turf/open/floor/plating, /area/station/commons/fitness/recreation) -"gCn" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/port) "gCy" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/window/reinforced/spawner/directional/east, @@ -17978,6 +18287,11 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/ai_monitored/command/storage/satellite) +"gEx" = ( +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/cargo/warehouse) "gEF" = ( /obj/structure/rack, /obj/item/clothing/gloves/color/fyellow, @@ -18027,12 +18341,6 @@ /obj/structure/table/wood, /turf/open/floor/carpet, /area/station/service/chapel/funeral) -"gFb" = ( -/obj/structure/railing{ - dir = 1 - }, -/turf/open/space/basic, -/area/space) "gFd" = ( /obj/machinery/power/terminal, /obj/machinery/light/small/directional/east, @@ -18288,6 +18596,11 @@ /obj/machinery/light/small/directional/north, /turf/open/floor/iron/dark, /area/station/medical/morgue) +"gJM" = ( +/obj/structure/cable, +/obj/machinery/power/smes, +/turf/open/floor/plating, +/area/station/maintenance/solars/port/fore) "gJV" = ( /obj/machinery/light/small/directional/south, /obj/effect/turf_decal/tile/purple, @@ -18421,19 +18734,6 @@ }, /turf/open/floor/iron, /area/station/engineering/main) -"gLU" = ( -/obj/structure/table, -/obj/effect/turf_decal/siding{ - dir = 9 - }, -/obj/item/stock_parts/matter_bin{ - pixel_x = 3; - pixel_y = 3 - }, -/obj/item/stock_parts/matter_bin, -/obj/item/stock_parts/micro_laser, -/turf/open/floor/iron, -/area/station/science/lab) "gLY" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/rack, @@ -18558,10 +18858,6 @@ /obj/structure/sign/poster/random/directional/east, /turf/open/floor/iron, /area/station/service/hydroponics) -"gOb" = ( -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/cargo/sorting) "gOp" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -18643,6 +18939,17 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/carpet, /area/station/command/heads_quarters/captain/private) +"gPN" = ( +/obj/effect/turf_decal/trimline/brown/filled/corner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/brown/warning{ + dir = 8 + }, +/obj/structure/extinguisher_cabinet/directional/north, +/obj/machinery/light/small/directional/north, +/turf/open/floor/iron, +/area/station/cargo/sorting) "gPY" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -18654,6 +18961,17 @@ }, /turf/open/floor/plating, /area/station/maintenance/port/aft) +"gQa" = ( +/obj/effect/turf_decal/siding/thinplating_new/corner, +/obj/effect/turf_decal/trimline/brown/filled/corner, +/obj/effect/turf_decal/trimline/brown/filled/corner{ + dir = 4 + }, +/obj/effect/turf_decal/siding/thinplating_new/corner{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/cargo/storage) "gQf" = ( /obj/structure/lattice, /obj/machinery/atmospherics/pipe/smart/simple/yellow/visible, @@ -18664,6 +18982,9 @@ /obj/effect/spawner/random/trash/janitor_supplies, /turf/open/floor/plating, /area/station/maintenance/port/fore) +"gQv" = ( +/turf/open/floor/engine/xenobio, +/area/station/science/xenobiology) "gQw" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/white/line, @@ -18749,6 +19070,13 @@ "gTt" = ( /turf/open/floor/carpet, /area/station/command/heads_quarters/hos) +"gTx" = ( +/obj/machinery/chem_dispenser, +/obj/effect/turf_decal/tile/yellow/anticorner/contrasted{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/station/medical/chemistry) "gTC" = ( /obj/machinery/atmospherics/pipe/smart/simple/purple/visible{ dir = 4 @@ -18806,6 +19134,16 @@ /obj/structure/sign/warning/electric_shock/directional/north, /turf/open/floor/iron, /area/station/hallway/primary/fore) +"gUH" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 1 + }, +/obj/structure/fake_stairs/directional/north, +/turf/open/floor/iron, +/area/station/cargo/storage) "gUP" = ( /obj/structure/chair{ dir = 1 @@ -18818,13 +19156,6 @@ "gUS" = ( /turf/closed/wall, /area/station/science/xenobiology/hallway) -"gUX" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/bot, -/obj/effect/spawner/random/maintenance, -/obj/item/stock_parts/cell, -/turf/open/floor/iron, -/area/station/cargo/warehouse) "gUY" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/cable, @@ -18862,6 +19193,19 @@ /obj/effect/mapping_helpers/burnt_floor, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) +"gVE" = ( +/obj/structure/table/glass, +/obj/machinery/cell_charger, +/obj/item/stack/cable_coil, +/obj/item/assembly/igniter, +/obj/item/stock_parts/power_store/cell, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/structure/cable, +/obj/effect/turf_decal/tile/purple/anticorner/contrasted{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/science/lobby) "gVO" = ( /obj/effect/turf_decal/trimline/purple/corner{ dir = 1 @@ -18903,6 +19247,15 @@ /obj/machinery/atmospherics/components/trinary/filter/flipped/critical, /turf/open/floor/engine, /area/station/engineering/supermatter/room) +"gWz" = ( +/mob/living/simple_animal/bot/mulebot, +/obj/structure/cable, +/obj/machinery/navbeacon{ + codes_txt = "delivery;dir=1"; + location = "QM #2" + }, +/turf/open/floor/catwalk_floor, +/area/station/cargo/storage) "gWH" = ( /obj/effect/spawner/random/maintenance, /obj/structure/disposalpipe/segment, @@ -18941,21 +19294,6 @@ /obj/structure/table, /turf/open/floor/plating, /area/station/maintenance/port) -"gXg" = ( -/obj/structure/table/wood, -/obj/machinery/computer/security/telescreen{ - desc = "Used for watching Prison Wing holding areas."; - name = "Prison Monitor"; - network = list("prison"); - pixel_y = 30 - }, -/obj/item/flashlight/lamp/green{ - pixel_x = 1; - pixel_y = 5 - }, -/obj/item/restraints/handcuffs, -/turf/open/floor/carpet, -/area/station/security/detectives_office) "gXl" = ( /obj/structure/flora/rock/pile/jungle/style_random, /turf/open/floor/grass, @@ -19116,23 +19454,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/engineering/main) -"hac" = ( -/obj/machinery/status_display/ai/directional/north, -/obj/machinery/porta_turret/ai, -/obj/machinery/computer/security/telescreen{ - desc = "Used for watching the RD's goons from the safety of his office."; - dir = 4; - name = "Research Monitor"; - network = list("rd"); - pixel_x = -28 - }, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, -/area/station/ai_monitored/turret_protected/aisat_interior) -"haq" = ( -/obj/item/kirbyplants/random, -/turf/open/floor/iron, -/area/station/cargo/sorting) "hav" = ( /obj/machinery/door/airlock/maintenance, /obj/structure/cable, @@ -19221,6 +19542,10 @@ /obj/machinery/light/directional/north, /turf/open/floor/iron, /area/station/engineering/main) +"hcj" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/visible, +/turf/open/floor/engine/xenobio, +/area/station/science/xenobiology) "hcl" = ( /obj/item/target, /obj/effect/turf_decal/stripes/line{ @@ -19247,6 +19572,7 @@ /obj/effect/turf_decal/tile/bar{ dir = 1 }, +/obj/structure/window/spawner/directional/south, /turf/open/floor/iron, /area/station/hallway/secondary/service) "hcv" = ( @@ -19257,11 +19583,6 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/hallway/primary/central) -"hcx" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/mapping_helpers/burnt_floor, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) "hcP" = ( /obj/structure/reagent_dispensers/watertank, /turf/open/floor/plating, @@ -19352,12 +19673,6 @@ /obj/item/stack/package_wrap, /turf/open/floor/iron, /area/station/security/prison/work) -"hen" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/station/cargo/warehouse) "hep" = ( /obj/effect/landmark/blobstart, /obj/effect/mapping_helpers/burnt_floor, @@ -19385,6 +19700,10 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/engineering/break_room) +"heR" = ( +/obj/structure/cable, +/turf/closed/wall, +/area/station/command/heads_quarters/qm) "heS" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/mop_bucket/janitorialcart, @@ -19480,16 +19799,6 @@ dir = 8 }, /area/station/engineering/atmos) -"hgH" = ( -/obj/effect/landmark/blobstart, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/plating, -/area/station/maintenance/port/greater) "hhl" = ( /obj/machinery/power/apc/auto_name/directional/north, /obj/structure/table, @@ -19520,6 +19829,12 @@ /obj/effect/turf_decal/tile/bar/opposingcorners, /turf/open/floor/iron, /area/station/commons/lounge) +"hhR" = ( +/obj/effect/turf_decal/trimline/brown/filled/corner{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/cargo/storage) "hif" = ( /obj/structure/mannequin/skeleton, /obj/machinery/status_display/evac/directional/north, @@ -19587,6 +19902,10 @@ /obj/effect/spawner/random/maintenance, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) +"hjt" = ( +/obj/effect/spawner/random/structure/crate, +/turf/open/floor/iron, +/area/station/cargo/warehouse) "hjw" = ( /obj/structure/table/glass, /obj/item/book/manual/wiki/cytology{ @@ -19692,13 +20011,6 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/security/prison) -"hlb" = ( -/obj/machinery/photocopier, -/obj/effect/turf_decal/tile/brown/anticorner/contrasted{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/cargo/sorting) "hld" = ( /obj/machinery/disposal/delivery_chute{ dir = 1; @@ -19873,11 +20185,25 @@ }, /turf/open/floor/plating, /area/station/engineering/main) -"hod" = ( -/obj/structure/cable, +"hnV" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, +/obj/item/radio/intercom/directional/east, +/obj/effect/turf_decal/trimline/brown/filled/line, /turf/open/floor/iron, -/area/station/cargo/storage) +/area/station/cargo/miningoffice) +"hor" = ( +/obj/machinery/door/airlock/maintenance{ + name = "Warehouse Maintenance" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/mapping_helpers/airlock/access/all/supply/general, +/turf/open/floor/plating, +/area/station/cargo/warehouse) "hoE" = ( /obj/structure/sign/map/left{ desc = "A framed picture of the station. Clockwise from security at the top (red), you see engineering (yellow), science (purple), escape (red and white), medbay (green), arrivals (blue and white), and finally cargo (brown)."; @@ -19921,6 +20247,10 @@ }, /turf/open/floor/iron/grimy, /area/station/tcommsat/computer) +"hph" = ( +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible, +/turf/closed/wall/r_wall, +/area/station/science/ordnance/burnchamber) "hpi" = ( /obj/effect/turf_decal/plaque{ icon_state = "L2" @@ -19928,6 +20258,15 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/hallway/primary/central) +"hpj" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/generic, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/cargo/warehouse) "hpv" = ( /obj/item/storage/bag/plants/portaseeder, /obj/item/plant_analyzer, @@ -19954,6 +20293,19 @@ }, /turf/closed/wall/r_wall, /area/station/engineering/atmos/pumproom) +"hqD" = ( +/obj/machinery/door/airlock/mining{ + name = "Quartermaster's Office" + }, +/obj/effect/mapping_helpers/airlock/access/all/supply/qm, +/obj/structure/cable, +/obj/effect/turf_decal/tile/yellow/diagonal_edge, +/obj/effect/turf_decal/tile/brown/diagonal_centre, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/door/firedoor, +/turf/open/floor/iron/diagonal, +/area/station/command/heads_quarters/qm) "hqE" = ( /obj/machinery/telecomms/bus/preset_four, /turf/open/floor/circuit/telecomms/mainframe, @@ -19991,6 +20343,11 @@ /obj/machinery/atmospherics/pipe/heat_exchanging/simple/layer2, /turf/open/floor/iron/dark/airless, /area/station/science/ordnance/freezerchamber) +"hrC" = ( +/obj/structure/cable, +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/security/checkpoint/supply) "hrG" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -20022,13 +20379,17 @@ dir = 8 }, /area/station/service/chapel/office) -"hsp" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 +"hsx" = ( +/obj/machinery/door/airlock/mining{ + name = "Drone Bay" }, +/obj/effect/mapping_helpers/airlock/access/any/supply/maintenance, +/obj/effect/landmark/navigate_destination, /obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, -/area/station/maintenance/solars/port/fore) +/area/station/cargo/drone_bay) "hsF" = ( /obj/machinery/door/airlock{ id_tag = "AuxToilet3"; @@ -20200,6 +20561,23 @@ /obj/structure/window/reinforced/spawner/directional/north, /turf/open/floor/plating, /area/station/security/checkpoint/customs) +"hvk" = ( +/obj/effect/spawner/random/bureaucracy/birthday_wrap, +/obj/item/stack/package_wrap{ + pixel_y = 5 + }, +/obj/item/stack/package_wrap{ + pixel_y = 2 + }, +/obj/item/stack/package_wrap, +/obj/machinery/light/directional/south, +/obj/machinery/firealarm/directional/south, +/obj/structure/table, +/obj/effect/turf_decal/tile/brown/anticorner/contrasted{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/cargo/lobby) "hvo" = ( /obj/structure/filingcabinet, /obj/effect/turf_decal/tile/red/anticorner/contrasted{ @@ -20229,6 +20607,12 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/aft) +"hvz" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/closed/wall, +/area/station/maintenance/port/fore) "hvB" = ( /obj/effect/turf_decal/trimline/green/filled/line, /obj/effect/turf_decal/trimline/brown/filled/warning, @@ -20316,6 +20700,18 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/security/prison) +"hxd" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/railing/corner/end/flip{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/brown/end{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/cargo/lobby) "hxe" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -20429,10 +20825,6 @@ }, /turf/open/floor/iron/white, /area/station/science/cytology) -"hyd" = ( -/obj/effect/turf_decal/bot_white, -/turf/open/floor/iron, -/area/station/cargo/storage) "hye" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -20541,6 +20933,10 @@ /obj/structure/cable, /turf/open/floor/iron/white, /area/station/science/cytology) +"hAd" = ( +/obj/effect/spawner/random/medical/two_percent_xeno_egg_spawner, +/turf/open/floor/engine/xenobio, +/area/station/science/xenobiology) "hAk" = ( /obj/structure/cable, /obj/effect/landmark/start/hangover, @@ -20599,6 +20995,15 @@ /obj/structure/window/reinforced/spawner/directional/south, /turf/open/floor/iron/dark, /area/station/ai_monitored/aisat/exterior) +"hBo" = ( +/mob/living/simple_animal/bot/mulebot, +/obj/structure/cable, +/obj/machinery/navbeacon{ + codes_txt = "delivery;dir=2"; + location = "QM #1" + }, +/turf/open/floor/catwalk_floor, +/area/station/cargo/storage) "hBr" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -20734,18 +21139,6 @@ /obj/machinery/portable_atmospherics/canister/plasma, /turf/open/floor/engine/plasma, /area/station/engineering/atmos) -"hDj" = ( -/obj/effect/turf_decal/trimline/brown/filled/line{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/central) "hDp" = ( /obj/structure/cable, /obj/effect/turf_decal/trimline/blue/filled/warning{ @@ -20875,14 +21268,6 @@ /obj/effect/turf_decal/tile/blue/fourcorners, /turf/open/floor/iron/white, /area/station/command/heads_quarters/cmo) -"hGv" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/rack, -/obj/effect/spawner/random/maintenance, -/obj/structure/cable, -/obj/effect/spawner/random/maintenance, -/turf/open/floor/iron, -/area/station/cargo/warehouse) "hGF" = ( /obj/machinery/disposal/bin, /obj/structure/disposalpipe/trunk, @@ -20943,6 +21328,20 @@ /obj/machinery/door/firedoor, /turf/open/floor/iron/white, /area/station/science/ordnance/office) +"hIp" = ( +/obj/structure/fake_stairs/directional/south, +/turf/open/floor/iron, +/area/station/cargo/storage) +"hIu" = ( +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/tile/brown{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/cargo/lobby) "hIx" = ( /obj/machinery/holopad, /obj/effect/turf_decal/box/white{ @@ -20953,11 +21352,6 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/iron/white/smooth_large, /area/station/medical/surgery/aft) -"hIE" = ( -/obj/structure/cable, -/obj/machinery/status_display/evac/directional/west, -/turf/open/floor/iron, -/area/station/construction/storage_wing) "hIJ" = ( /obj/structure/cable, /obj/machinery/chem_heater/withbuffer, @@ -21028,6 +21422,14 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/tcommsat/server) +"hJO" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) "hKg" = ( /turf/closed/wall, /area/station/cargo/miningoffice) @@ -21045,48 +21447,12 @@ /obj/effect/spawner/random/maintenance, /turf/open/floor/plating, /area/station/maintenance/port) -"hKq" = ( -/obj/structure/table/wood/fancy/orange, -/obj/machinery/requests_console/directional/east{ - department = "Quartermaster's Desk"; - name = "Quartermaster's Requests Console" - }, -/obj/effect/mapping_helpers/requests_console/announcement, -/obj/effect/mapping_helpers/requests_console/supplies, -/obj/item/reagent_containers/cup/glass/bottle/whiskey{ - pixel_x = -5; - pixel_y = 4 - }, -/obj/item/reagent_containers/cup/glass/drinkingglass/shotglass{ - pixel_x = 2; - pixel_y = -4 - }, -/obj/item/reagent_containers/cup/glass/drinkingglass/shotglass{ - pixel_x = -9; - pixel_y = -4 - }, -/turf/open/floor/carpet/red, -/area/station/command/heads_quarters/qm) "hKv" = ( /obj/structure/chair/pew/left, /turf/open/floor/iron/chapel{ dir = 1 }, /area/station/service/chapel) -"hKw" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/brown/filled/line{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/port) "hKB" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/turf_decal/tile/dark_blue/half/contrasted{ @@ -21102,6 +21468,15 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/department/medical/central) +"hKQ" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/bot_white, +/obj/effect/turf_decal/arrows/red{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/cargo/storage) "hKV" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -21321,6 +21696,29 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/hallway/primary/central) +"hQc" = ( +/obj/effect/turf_decal/siding/wood, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/structure/table/wood, +/obj/machinery/fax{ + fax_name = "Quartermaster"; + name = "Quartermaster's Fax Machine" + }, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/obj/machinery/requests_console/directional/north{ + department = "Quartermaster's Desk"; + name = "Quartermaster's Requests Console" + }, +/obj/effect/mapping_helpers/requests_console/announcement, +/obj/effect/mapping_helpers/requests_console/assistance, +/obj/effect/mapping_helpers/requests_console/information, +/obj/effect/mapping_helpers/requests_console/ore_update, +/turf/open/floor/wood/large, +/area/station/command/heads_quarters/qm) "hQu" = ( /obj/effect/turf_decal/delivery, /turf/open/floor/iron, @@ -21339,6 +21737,15 @@ }, /turf/open/floor/iron/dark, /area/station/command/bridge) +"hQy" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/door/airlock/engineering{ + name = "Port Bow Solar Access" + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/solars/port/fore) "hQB" = ( /obj/effect/turf_decal/bot{ dir = 1 @@ -21399,13 +21806,6 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/security/brig) -"hRD" = ( -/obj/structure/chair/office{ - dir = 4 - }, -/obj/effect/landmark/start/cargo_technician, -/turf/open/floor/iron, -/area/station/cargo/sorting) "hRQ" = ( /obj/machinery/disposal/bin{ pixel_x = -2; @@ -21461,6 +21861,20 @@ }, /turf/open/floor/wood, /area/station/service/cafeteria) +"hSi" = ( +/obj/item/stack/sheet/iron/fifty, +/obj/item/stack/rods/fifty, +/obj/item/stack/sheet/glass/fifty, +/obj/item/electronics/airlock, +/obj/item/electronics/airlock, +/obj/item/stock_parts/power_store/cell/high, +/obj/item/stack/sheet/mineral/plasma{ + amount = 30 + }, +/obj/item/gps, +/obj/structure/closet/crate/engineering, +/turf/open/floor/plating, +/area/station/engineering/main) "hSl" = ( /obj/machinery/atmospherics/pipe/smart/simple/purple/visible{ dir = 4 @@ -21504,11 +21918,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, /turf/open/floor/engine, /area/station/engineering/supermatter/room) -"hSP" = ( -/obj/machinery/space_heater, -/obj/structure/sign/warning/vacuum/external/directional/north, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) "hSQ" = ( /obj/structure/bodycontainer/morgue/beeper_off{ dir = 8 @@ -21524,35 +21933,10 @@ /obj/effect/landmark/navigate_destination, /turf/open/floor/iron, /area/station/command/gateway) -"hTn" = ( -/obj/structure/disposalpipe/segment{ - dir = 6 - }, -/obj/effect/turf_decal/stripes/line, -/obj/machinery/button/door/directional/west{ - id = "Disposal Exit"; - name = "Disposal Vent Control"; - req_access = list("maint_tunnels") - }, -/turf/open/floor/plating, -/area/station/maintenance/disposal) "hTq" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/yellow/visible, /turf/open/floor/iron, /area/station/engineering/atmos) -"hTt" = ( -/obj/machinery/computer/station_alert{ - dir = 1 - }, -/obj/machinery/light/directional/south, -/obj/machinery/computer/security/telescreen/minisat{ - dir = 1; - pixel_y = -29 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/dark, -/area/station/ai_monitored/command/storage/satellite) "hTE" = ( /obj/structure/chair{ dir = 4 @@ -21563,6 +21947,20 @@ /obj/machinery/bluespace_vendor/directional/west, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) +"hTG" = ( +/obj/structure/cable, +/obj/machinery/power/terminal, +/obj/machinery/light/small/directional/east, +/obj/item/radio/intercom/directional/east, +/turf/open/floor/plating, +/area/station/maintenance/solars/port/fore) +"hTM" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/construction/storage_wing) "hTV" = ( /obj/structure/disposalpipe/segment, /obj/machinery/door/airlock/highsecurity{ @@ -21711,6 +22109,14 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/command/teleporter) +"hWC" = ( +/obj/structure/cable, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 1 + }, +/obj/structure/fake_stairs/directional/north, +/turf/open/floor/iron, +/area/station/cargo/storage) "hWD" = ( /obj/structure/sign/poster/contraband/random/directional/east, /obj/effect/mapping_helpers/broken_floor, @@ -21721,21 +22127,13 @@ /obj/effect/turf_decal/tile/neutral, /turf/open/floor/iron, /area/station/commons/locker) -"hWS" = ( +"hWK" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/obj/effect/landmark/start/depsec/supply, +/obj/machinery/power/apc/auto_name/directional/east, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 8 - }, -/obj/machinery/door/airlock/maintenance_hatch{ - name = "Cargo Bay Bridge Access" - }, -/obj/effect/mapping_helpers/airlock/unres{ - dir = 8 - }, -/obj/effect/mapping_helpers/airlock/access/any/supply/maintenance, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) +/turf/open/floor/iron, +/area/station/security/checkpoint/supply) "hWW" = ( /obj/structure/bookcase/random, /turf/open/floor/iron, @@ -21800,6 +22198,14 @@ /obj/machinery/light/small/directional/west, /turf/open/floor/iron/dark, /area/station/security/office) +"hYl" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/sink{ + dir = 8; + pixel_x = 14 + }, +/turf/open/floor/iron, +/area/station/cargo/warehouse) "hYr" = ( /obj/machinery/holopad, /obj/structure/cable, @@ -21879,6 +22285,34 @@ }, /turf/open/floor/iron, /area/station/command/heads_quarters/ce) +"hYG" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"hZg" = ( +/obj/structure/closet/crate, +/obj/machinery/power/apc/auto_name/directional/west, +/obj/item/stack/cable_coil{ + pixel_x = 3; + pixel_y = -7 + }, +/obj/item/stock_parts/power_store/cell/high, +/obj/machinery/light_switch/directional/north, +/obj/effect/spawner/random/engineering/flashlight, +/obj/effect/spawner/random/engineering/flashlight, +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/cargo/miningoffice) "hZn" = ( /obj/structure/cable, /obj/effect/turf_decal/siding/wood{ @@ -22222,19 +22656,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/station/maintenance/space_hut) -"igr" = ( -/obj/structure/table/glass, -/obj/machinery/cell_charger, -/obj/item/stack/cable_coil, -/obj/item/assembly/igniter, -/obj/item/stock_parts/cell, -/obj/machinery/power/apc/auto_name/directional/north, -/obj/structure/cable, -/obj/effect/turf_decal/tile/purple/anticorner/contrasted{ - dir = 4 - }, -/turf/open/floor/iron/white, -/area/station/science/lobby) "igy" = ( /obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible, /obj/machinery/requests_console/directional/east{ @@ -22320,25 +22741,15 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/engineering/storage/tech) -"ihF" = ( -/obj/effect/turf_decal/stripes/corner{ - dir = 4 - }, -/obj/structure/table/reinforced, -/obj/machinery/cell_charger, -/obj/item/stock_parts/cell/high, -/obj/machinery/firealarm/directional/west, -/obj/machinery/camera/directional/north{ - c_tag = "Science Mechbay"; - network = list("ss13","rd") - }, -/obj/machinery/button/door/directional/north{ - id = "mechbay"; - name = "Mech Bay Shutters Control"; - req_access = list("robotics") +"ihN" = ( +/obj/machinery/computer/security/telescreen/prison/directional/south, +/obj/structure/cable, +/obj/effect/turf_decal/tile/red{ + dir = 8 }, +/obj/effect/landmark/event_spawn, /turf/open/floor/iron, -/area/station/science/robotics/mechbay) +/area/station/security/office) "ihW" = ( /obj/structure/lattice/catwalk, /obj/structure/disposalpipe/trunk{ @@ -22368,6 +22779,21 @@ /obj/effect/landmark/navigate_destination, /turf/open/floor/iron, /area/station/command/heads_quarters/rd) +"iit" = ( +/obj/machinery/camera/directional/west{ + c_tag = "Central Primary Hallway - Fore - Port Corner" + }, +/obj/machinery/computer/piratepad_control/civilian{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/brown{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central) "iix" = ( /obj/item/flashlight/lamp, /obj/machinery/newscaster/directional/west, @@ -22481,13 +22907,6 @@ /obj/effect/mapping_helpers/airlock/access/all/command/minisat, /turf/open/floor/iron/dark, /area/station/ai_monitored/command/storage/satellite) -"ikJ" = ( -/obj/machinery/vending/cigarette, -/obj/effect/turf_decal/trimline/brown/filled/line{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/port) "ikL" = ( /obj/structure/cable, /turf/open/floor/iron, @@ -22630,16 +23049,6 @@ /obj/effect/turf_decal/tile/yellow/fourcorners, /turf/open/floor/iron, /area/station/engineering/storage_shared) -"ilY" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/rack, -/obj/item/clothing/shoes/wheelys/rollerskates{ - pixel_y = 5 - }, -/obj/item/clothing/shoes/wheelys/rollerskates, -/obj/structure/extinguisher_cabinet/directional/west, -/turf/open/floor/iron, -/area/station/cargo/warehouse) "imt" = ( /obj/effect/turf_decal/trimline/neutral/warning{ dir = 9 @@ -22759,10 +23168,6 @@ /obj/machinery/duct, /turf/open/floor/plating, /area/station/maintenance/department/engine) -"ioz" = ( -/obj/structure/disposalpipe/segment, -/turf/open/floor/iron, -/area/station/cargo/sorting) "ioZ" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -22825,6 +23230,10 @@ }, /turf/open/floor/plating, /area/station/engineering/supermatter/room) +"iqo" = ( +/obj/effect/landmark/start/quartermaster, +/turf/open/floor/carpet/orange, +/area/station/command/heads_quarters/qm) "iqq" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -22944,6 +23353,26 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/science/robotics/lab) +"isi" = ( +/obj/structure/table, +/obj/item/reagent_containers/condiment/saltshaker{ + pixel_x = -2; + pixel_y = 2 + }, +/obj/item/reagent_containers/condiment/peppermill{ + desc = "Often used to flavor food or make people sneeze. Fashionably moved to the left side of the table."; + pixel_x = -8; + pixel_y = 2 + }, +/obj/item/reagent_containers/condiment/enzyme{ + pixel_x = 9; + pixel_y = 3 + }, +/obj/item/book/manual/chef_recipes, +/obj/effect/turf_decal/tile/red/opposingcorners, +/obj/structure/window/spawner/directional/south, +/turf/open/floor/iron/white, +/area/station/security/prison/mess) "isk" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -22980,6 +23409,12 @@ /obj/effect/spawner/random/engineering/tracking_beacon, /turf/open/floor/iron/white, /area/station/medical/treatment_center) +"isA" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/construction/storage_wing) "isI" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -23048,19 +23483,6 @@ }, /turf/open/floor/carpet, /area/station/command/bridge) -"itB" = ( -/obj/machinery/computer/security/telescreen{ - dir = 8; - name = "Telecomms Camera Monitor"; - network = list("tcomms"); - pixel_x = 26 - }, -/obj/machinery/computer/telecomms/monitor{ - dir = 8; - network = "tcommsat" - }, -/turf/open/floor/iron/grimy, -/area/station/tcommsat/computer) "itC" = ( /obj/effect/turf_decal/siding/purple{ dir = 1 @@ -23125,9 +23547,19 @@ /turf/open/floor/plating, /area/station/maintenance/port/greater) "ivb" = ( -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 4 +/obj/machinery/disposal/bin, +/obj/machinery/camera/directional/east{ + c_tag = "Garden" }, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/east, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/siding/wideplating_new, +/obj/structure/railing, +/obj/effect/turf_decal/tile/green/half/contrasted, /turf/open/floor/iron, /area/station/service/hydroponics/garden) "ivc" = ( @@ -23186,19 +23618,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/starboard/lesser) -"ivX" = ( -/obj/effect/turf_decal/trimline/red/filled/line{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/button/door/directional/east{ - id = "qm_warehouse"; - name = "Warehouse Door Control"; - req_access = list("cargo") - }, -/turf/open/floor/iron, -/area/station/cargo/storage) "iwj" = ( /obj/structure/table/glass, /obj/effect/turf_decal/tile/blue/fourcorners, @@ -23328,16 +23747,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/starboard/lesser) -"iyv" = ( -/obj/structure/table, -/obj/machinery/fax{ - fax_name = "Cargo Office"; - name = "Cargo Office Fax Machine" - }, -/obj/effect/turf_decal/tile/brown/half/contrasted, -/obj/machinery/light/small/directional/east, -/turf/open/floor/iron, -/area/station/cargo/sorting) "iyy" = ( /obj/structure/table, /obj/item/folder/white{ @@ -23386,6 +23795,10 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central) +"izb" = ( +/obj/machinery/air_sensor/ordnance_burn_chamber, +/turf/open/floor/engine/vacuum, +/area/station/science/ordnance/burnchamber) "izd" = ( /obj/machinery/door/airlock/maintenance, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -23457,6 +23870,16 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) +"izI" = ( +/obj/machinery/newscaster/directional/south, +/obj/structure/closet/secure_closet/quartermaster, +/obj/effect/turf_decal/siding/wood{ + dir = 10 + }, +/obj/machinery/camera/directional/south, +/obj/item/radio/intercom/directional/west, +/turf/open/floor/wood/large, +/area/station/command/heads_quarters/qm) "izZ" = ( /obj/machinery/atmospherics/pipe/heat_exchanging/simple{ dir = 4 @@ -23598,20 +24021,6 @@ /obj/effect/spawner/random/armory/bulletproof_helmet, /turf/open/floor/iron/dark, /area/station/ai_monitored/security/armory) -"iCz" = ( -/obj/effect/mapping_helpers/airlock/locked, -/obj/machinery/door/airlock/vault{ - name = "Vault" - }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper, -/obj/structure/cable, -/obj/effect/landmark/navigate_destination, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/mapping_helpers/airlock/access/all/supply/vault, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, -/area/station/ai_monitored/command/nuke_storage) "iCJ" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ @@ -23844,6 +24253,16 @@ /obj/structure/window/reinforced/spawner/directional/south, /turf/open/floor/engine, /area/station/science/xenobiology) +"iHS" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/door/airlock/security/glass{ + name = "Security Post - Cargo" + }, +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/access/all/security/general, +/turf/open/floor/iron, +/area/station/security/checkpoint/supply) "iId" = ( /obj/machinery/conveyor{ id = "mining" @@ -23871,6 +24290,14 @@ dir = 8 }, /area/station/service/chapel) +"iIE" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/junction/flip{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) "iIP" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -23885,19 +24312,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/ai_upload) -"iJd" = ( -/obj/structure/table/wood, -/obj/item/flashlight/lamp/green{ - pixel_x = 1; - pixel_y = 5 - }, -/obj/machinery/requests_console/directional/north{ - department = "Law Office"; - name = "Lawyer Requests Console" - }, -/obj/machinery/newscaster/directional/west, -/turf/open/floor/wood, -/area/station/service/lawoffice) "iJj" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/carpet, @@ -23907,17 +24321,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/hallway/secondary/command) -"iJm" = ( -/obj/machinery/door/airlock/external{ - name = "Solar Maintenance" - }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 1 - }, -/obj/structure/cable, -/obj/effect/mapping_helpers/airlock/access/all/engineering/general, -/turf/open/floor/plating, -/area/station/maintenance/solars/port/fore) "iJC" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -24040,30 +24443,21 @@ }, /turf/open/floor/iron, /area/station/security/brig) -"iLV" = ( -/obj/structure/table/wood/fancy/orange, -/obj/item/clothing/mask/cigarette/cigar{ - pixel_x = -4; - pixel_y = 1 - }, -/obj/item/clothing/mask/cigarette/cigar{ - pixel_x = -6; - pixel_y = 6 - }, -/obj/item/clothing/mask/cigarette/cigar{ - pixel_x = -1; - pixel_y = -2 - }, -/obj/item/lighter{ - pixel_x = 11; - pixel_y = -7 +"iLT" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark, +/obj/effect/turf_decal/trimline/brown/line, +/obj/effect/turf_decal/trimline/brown/line{ + dir = 1 }, -/obj/item/coin/gold{ - pixel_x = 9; - pixel_y = 9 +/obj/effect/turf_decal/stripes/line{ + dir = 1 }, -/turf/open/floor/carpet/red, -/area/station/command/heads_quarters/qm) +/obj/effect/landmark/start/bitrunner, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark/textured_half, +/area/station/cargo/bitrunning/den) "iMd" = ( /obj/structure/bed/medical/emergency{ dir = 4 @@ -24183,28 +24577,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating/airless, /area/space/nearstation) -"iNk" = ( -/obj/structure/table/wood/fancy/orange, -/obj/item/gps{ - gpstag = "QM0"; - pixel_x = 10; - pixel_y = 12 - }, -/obj/machinery/status_display/supply{ - pixel_x = 32 - }, -/obj/item/storage/wallet{ - pixel_x = -3; - pixel_y = 10 - }, -/obj/item/ammo_casing/rocket{ - desc = "Your grandpappy brought this home after the war. You're pretty sure it's a dud."; - name = "Dud Rocket"; - pixel_x = -4; - pixel_y = -7 - }, -/turf/open/floor/carpet/red, -/area/station/command/heads_quarters/qm) "iNo" = ( /obj/structure/filingcabinet/filingcabinet, /obj/machinery/camera/directional/south{ @@ -24226,19 +24598,11 @@ }, /turf/open/floor/iron/white, /area/station/medical/storage) -"iNK" = ( -/obj/structure/table, -/obj/machinery/button/door{ - id = "xenobio2"; - layer = 3.3; - name = "Xenobio Pen 2 Blast Doors"; - pixel_y = 1; - req_access = list("xenobiology") - }, -/obj/structure/window/reinforced/spawner/directional/north, -/obj/structure/window/reinforced/spawner/directional/west, -/turf/open/floor/iron, -/area/station/science/xenobiology) +"iNH" = ( +/obj/structure/lattice/catwalk, +/obj/item/banner/cargo, +/turf/open/space/basic, +/area/space/nearstation) "iNQ" = ( /obj/structure/cable, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, @@ -24509,13 +24873,6 @@ /obj/machinery/firealarm/directional/north, /turf/open/floor/iron/dark, /area/station/medical/storage) -"iRR" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/door/firedoor, -/turf/open/floor/iron, -/area/station/cargo/lobby) "iRW" = ( /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 8 @@ -24586,6 +24943,16 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/engineering/main) +"iSU" = ( +/obj/structure/table/reinforced, +/obj/machinery/cell_charger, +/obj/item/stock_parts/power_store/cell/high, +/obj/item/rcl/pre_loaded, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/command/heads_quarters/ce) "iTc" = ( /obj/machinery/atmospherics/pipe/smart/manifold/purple/visible{ dir = 4 @@ -24619,19 +24986,6 @@ /obj/effect/turf_decal/tile/red/opposingcorners, /turf/open/floor/iron, /area/station/security/checkpoint/science) -"iTQ" = ( -/obj/structure/table, -/obj/machinery/button/door{ - id = "xenobio1"; - layer = 3.3; - name = "Xenobio Pen 1 Blast Doors"; - pixel_y = 1; - req_access = list("xenobiology") - }, -/obj/structure/window/reinforced/spawner/directional/west, -/obj/structure/window/reinforced/spawner/directional/north, -/turf/open/floor/iron, -/area/station/science/xenobiology) "iTX" = ( /obj/machinery/meter, /obj/machinery/atmospherics/pipe/smart/manifold/cyan/visible{ @@ -24642,19 +24996,6 @@ "iTZ" = ( /turf/closed/wall/r_wall, /area/station/security/lockers) -"iUb" = ( -/obj/structure/table/wood, -/obj/item/book/manual/wiki/security_space_law, -/obj/item/book/manual/wiki/security_space_law, -/obj/item/pen/red, -/obj/machinery/computer/security/telescreen{ - desc = "Used for watching Prison Wing holding areas."; - name = "Prison Monitor"; - network = list("prison"); - pixel_y = 30 - }, -/turf/open/floor/wood, -/area/station/service/lawoffice) "iUe" = ( /obj/structure/table/wood, /obj/item/lipstick{ @@ -24688,16 +25029,6 @@ "iUv" = ( /turf/closed/wall/r_wall, /area/station/security/prison) -"iUw" = ( -/obj/machinery/conveyor_switch/oneway{ - dir = 8; - id = "QMLoad"; - name = "Loading Conveyor"; - pixel_x = -13; - pixel_y = -5 - }, -/turf/open/floor/iron, -/area/station/cargo/storage) "iUE" = ( /obj/effect/spawner/random/maintenance, /obj/structure/cable, @@ -24835,6 +25166,10 @@ "iWU" = ( /turf/closed/wall/r_wall, /area/station/engineering/break_room) +"iWZ" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/cargo/warehouse) "iXb" = ( /obj/structure/disposalpipe/segment{ dir = 10 @@ -24854,22 +25189,6 @@ /obj/machinery/power/apc/auto_name/directional/west, /turf/open/floor/iron/white, /area/station/science/ordnance/office) -"iXq" = ( -/obj/effect/turf_decal/trimline/brown/corner{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/brown/corner{ - dir = 8 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/door/airlock/mining{ - name = "Bitrunning Den" - }, -/obj/effect/mapping_helpers/airlock/access/any/supply/bit_den, -/turf/open/floor/iron/dark/textured_half, -/area/station/cargo/bitrunning/den) "iXt" = ( /obj/structure/disposalpipe/segment, /obj/effect/turf_decal/tile/purple, @@ -25178,26 +25497,12 @@ /obj/structure/window/fulltile, /turf/open/floor/grass, /area/station/hallway/secondary/exit/departure_lounge) -"jdn" = ( -/obj/effect/turf_decal/trimline/brown/filled/line, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/cargo/lobby) "jdv" = ( /obj/machinery/airalarm/directional/east, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/light/small/directional/east, /turf/open/floor/carpet, /area/station/command/heads_quarters/captain/private) -"jdB" = ( -/obj/structure/table, -/obj/machinery/cell_charger, -/obj/item/stock_parts/cell/high, -/obj/effect/turf_decal/delivery, -/turf/open/floor/iron, -/area/station/engineering/main) "jdH" = ( /obj/structure/closet/crate/freezer/blood, /obj/effect/turf_decal/siding/white, @@ -25289,6 +25594,14 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/security/brig) +"jfg" = ( +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/construction/storage_wing) "jfn" = ( /obj/machinery/door/airlock/medical/glass{ name = "Primary Treatment Centre" @@ -25414,22 +25727,6 @@ }, /turf/open/floor/iron, /area/station/service/hydroponics) -"jgQ" = ( -/obj/structure/table, -/obj/item/stack/wrapping_paper, -/obj/item/stack/wrapping_paper{ - pixel_x = -3; - pixel_y = 5 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/spawner/random/bureaucracy/birthday_wrap, -/obj/effect/turf_decal/tile/brown/anticorner/contrasted{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/cargo/sorting) "jgT" = ( /obj/machinery/holopad, /obj/effect/turf_decal/box/white{ @@ -25657,10 +25954,34 @@ /obj/item/soap, /turf/open/floor/iron/white, /area/station/science/xenobiology/hallway) -"jld" = ( -/obj/structure/chair/stool/directional/west, -/turf/open/floor/iron, -/area/station/cargo/sorting) +"jle" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/structure/table/wood, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/item/folder/yellow{ + pixel_x = 8; + pixel_y = -1 + }, +/obj/item/ammo_casing/rocket{ + pixel_x = -2; + pixel_y = 19; + name = "Dud Rocket"; + desc = "An 84mm High Explosive rocket. This one's a dud. Pretty sure." + }, +/obj/item/computer_disk/quartermaster{ + pixel_x = 9; + pixel_y = 13 + }, +/obj/effect/spawner/random/entertainment/lighter{ + pixel_x = -7; + pixel_y = -4 + }, +/turf/open/floor/wood/large, +/area/station/command/heads_quarters/qm) "jln" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/circuit/red, @@ -25752,17 +26073,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/port) -"jmN" = ( -/obj/machinery/camera/directional/north{ - c_tag = "Port Primary Hallway - Middle" - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/port) "jmR" = ( /obj/structure/closet/secure_closet/security/cargo, /obj/machinery/airalarm/directional/north, @@ -25777,6 +26087,15 @@ /obj/machinery/light/directional/west, /turf/open/floor/iron, /area/station/hallway/primary/central) +"jmU" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/cargo/miningoffice) "jmY" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/public/glass{ @@ -25839,12 +26158,6 @@ /obj/machinery/door/firedoor/heavy, /turf/open/floor/iron/dark/textured, /area/station/engineering/atmos) -"jnR" = ( -/obj/structure/disposalpipe/segment{ - dir = 10 - }, -/turf/open/floor/iron, -/area/station/cargo/sorting) "joj" = ( /obj/item/radio/intercom/directional/east, /obj/effect/turf_decal/tile/yellow/half/contrasted{ @@ -25869,6 +26182,17 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/aft) +"jox" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/disposal) "joP" = ( /obj/structure/cable, /obj/effect/turf_decal/siding/wood{ @@ -25985,17 +26309,6 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/hallway/secondary/command) -"jrx" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/spawner/random/maintenance, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/bot, -/obj/structure/disposalpipe/segment, -/obj/effect/spawner/random/structure/closet_empty/crate, -/obj/effect/spawner/random/maintenance, -/turf/open/floor/iron, -/area/station/cargo/warehouse) "jrL" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -26007,20 +26320,6 @@ }, /turf/open/floor/iron, /area/station/commons/locker) -"jrR" = ( -/obj/structure/table/reinforced, -/obj/item/stock_parts/cell/high{ - pixel_x = 4; - pixel_y = 5 - }, -/obj/item/stock_parts/cell/high{ - pixel_x = -8; - pixel_y = 9 - }, -/obj/item/stock_parts/cell/high, -/obj/machinery/cell_charger, -/turf/open/floor/iron, -/area/station/science/robotics/lab) "jrY" = ( /obj/machinery/door/airlock/external{ name = "Transport Airlock" @@ -26223,14 +26522,6 @@ }, /turf/open/floor/engine/vacuum, /area/station/maintenance/disposal/incinerator) -"jvo" = ( -/obj/machinery/atmospherics/pipe/smart/simple/dark/visible, -/obj/effect/turf_decal/siding/purple{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/dark, -/area/station/science/ordnance) "jvr" = ( /obj/structure/table/glass, /obj/item/folder/blue, @@ -26567,6 +26858,12 @@ /obj/machinery/holopad/secure, /turf/open/floor/iron/dark, /area/station/security/office) +"jzE" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/construction/storage_wing) "jzN" = ( /turf/closed/wall/r_wall, /area/station/command/corporate_showroom) @@ -26657,6 +26954,33 @@ }, /turf/open/floor/iron, /area/station/cargo/miningoffice) +"jBu" = ( +/obj/effect/landmark/start/cargo_technician, +/obj/effect/turf_decal/bot_white, +/turf/open/floor/iron, +/area/station/cargo/storage) +"jBy" = ( +/obj/machinery/light_switch/directional/south, +/obj/machinery/conveyor_switch/oneway{ + id = "packageSort2"; + name = "Sort and Deliver"; + pixel_x = -2; + pixel_y = 12 + }, +/obj/machinery/conveyor_switch/oneway{ + dir = 8; + id = "packageExternal"; + name = "Crate Returns"; + pixel_x = -5; + pixel_y = -3 + }, +/obj/effect/turf_decal/trimline/brown/warning{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/brown/filled/corner, +/obj/effect/turf_decal/trimline/white/corner, +/turf/open/floor/iron, +/area/station/cargo/sorting) "jBC" = ( /obj/structure/table, /obj/item/clothing/head/soft/grey{ @@ -26746,11 +27070,6 @@ }, /turf/open/floor/iron/white, /area/station/science/xenobiology) -"jDb" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/landmark/blobstart, -/turf/open/floor/iron, -/area/station/cargo/warehouse) "jDf" = ( /obj/structure/table, /obj/structure/extinguisher_cabinet/directional/west, @@ -26772,6 +27091,15 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/station/security/prison/work) +"jEa" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) "jEc" = ( /obj/structure/disposalpipe/segment{ dir = 5 @@ -26783,16 +27111,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/fore) -"jEh" = ( -/obj/structure/table/reinforced, -/obj/machinery/cell_charger, -/obj/item/stock_parts/cell/high, -/obj/item/rcl/pre_loaded, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/command/heads_quarters/ce) "jEr" = ( /obj/machinery/holopad/secure, /obj/machinery/flasher/directional/west{ @@ -26826,20 +27144,6 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/service) -"jFi" = ( -/obj/machinery/door/firedoor, -/obj/structure/cable, -/obj/effect/turf_decal/trimline/brown/filled/corner{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/power/apc/auto_name/directional/north, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/port) "jFr" = ( /obj/structure/sign/poster/party_game, /turf/closed/wall, @@ -26887,6 +27191,15 @@ /obj/machinery/firealarm/directional/west, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/ai) +"jGb" = ( +/obj/machinery/holopad, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/obj/effect/landmark/event_spawn, +/turf/open/floor/iron, +/area/station/cargo/miningoffice) "jGl" = ( /obj/effect/landmark/secequipment, /obj/effect/turf_decal/bot, @@ -26930,11 +27243,6 @@ /obj/structure/table/wood/poker, /turf/open/floor/wood, /area/station/commons/lounge) -"jGE" = ( -/obj/structure/window/spawner/directional/west, -/obj/structure/window/spawner/directional/north, -/turf/open/floor/grass, -/area/station/service/hydroponics/garden) "jGG" = ( /obj/machinery/holopad, /obj/effect/turf_decal/box/white{ @@ -26942,6 +27250,16 @@ }, /turf/open/floor/iron/white/smooth_large, /area/station/medical/treatment_center) +"jGN" = ( +/obj/machinery/computer/station_alert{ + dir = 1 + }, +/obj/machinery/light/directional/south, +/obj/machinery/computer/security/telescreen/minisat/directional/south, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/command/storage/satellite) "jGO" = ( /obj/machinery/hydroponics/soil, /obj/item/cultivator, @@ -26982,21 +27300,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/circuit, /area/station/ai_monitored/turret_protected/ai_upload) -"jHN" = ( -/obj/machinery/computer/security/telescreen{ - desc = "Used for watching Prison Wing holding areas."; - dir = 1; - name = "Prison Monitor"; - network = list("prison"); - pixel_y = -30 - }, -/obj/structure/cable, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/obj/effect/landmark/event_spawn, -/turf/open/floor/iron, -/area/station/security/office) "jHQ" = ( /obj/structure/chair/sofa/corp/left{ dir = 1 @@ -27036,6 +27339,17 @@ /obj/structure/cable, /turf/open/floor/wood, /area/station/commons/lounge) +"jIl" = ( +/obj/structure/cable, +/obj/machinery/door/airlock/mining{ + name = "Mining Office" + }, +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/access/any/supply/bit_den, +/obj/effect/mapping_helpers/airlock/access/any/supply/mining, +/obj/effect/turf_decal/tile/brown/opposingcorners, +/turf/open/floor/iron, +/area/station/cargo/miningoffice) "jIz" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, @@ -27112,15 +27426,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/security/execution/transfer) -"jJu" = ( -/obj/structure/cable, -/obj/effect/mapping_helpers/airlock/access/any/supply/bit_den, -/obj/machinery/door/airlock/maintenance{ - name = "Mining Dock Maintenance" - }, -/obj/effect/mapping_helpers/airlock/access/any/supply/mining, -/turf/open/floor/plating, -/area/station/cargo/miningoffice) "jJC" = ( /obj/structure/disposalpipe/segment, /obj/structure/lattice/catwalk, @@ -27158,6 +27463,12 @@ /obj/effect/turf_decal/tile/purple/fourcorners, /turf/open/floor/iron/white, /area/station/science/lab) +"jKc" = ( +/obj/effect/turf_decal/trimline/brown/filled/shrink_cw{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/cargo/storage) "jKi" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/public/glass{ @@ -27206,18 +27517,6 @@ }, /turf/open/floor/iron, /area/station/security/brig) -"jLb" = ( -/obj/structure/cable, -/obj/effect/turf_decal/tile/brown/half/contrasted{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/cargo/storage) -"jLf" = ( -/obj/effect/turf_decal/delivery, -/obj/machinery/firealarm/directional/north, -/turf/open/floor/iron, -/area/station/cargo/storage) "jLg" = ( /obj/structure/cable, /obj/machinery/navbeacon{ @@ -27277,6 +27576,22 @@ }, /turf/open/floor/iron, /area/station/command/heads_quarters/hop) +"jMb" = ( +/obj/structure/railing{ + dir = 10 + }, +/obj/machinery/light/directional/north, +/obj/structure/statue/gold/qm, +/obj/machinery/status_display/supply{ + pixel_y = 32 + }, +/obj/effect/turf_decal/tile/brown/diagonal_centre, +/obj/effect/turf_decal/tile/yellow/diagonal_edge, +/obj/effect/turf_decal/siding/yellow{ + dir = 10 + }, +/turf/open/floor/iron/diagonal, +/area/station/cargo/storage) "jMo" = ( /obj/structure/chair/stool/directional/north, /turf/open/floor/iron, @@ -27396,6 +27711,14 @@ /obj/effect/turf_decal/tile/purple, /turf/open/floor/iron, /area/station/hallway/primary/aft) +"jNR" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/landmark/start/cargo_technician, +/obj/effect/turf_decal/bot_white, +/turf/open/floor/iron, +/area/station/cargo/storage) "jNZ" = ( /obj/machinery/camera/directional/west{ c_tag = "Telecomms - Server Room - Aft-Port"; @@ -27469,14 +27792,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/starboard) -"jPi" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 8 - }, -/obj/machinery/light/small/directional/east, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, -/area/station/science/ordnance/testlab) "jPm" = ( /obj/machinery/atmospherics/components/tank/air, /obj/effect/turf_decal/tile/green/half/contrasted{ @@ -27485,17 +27800,6 @@ /obj/machinery/light/directional/north, /turf/open/floor/iron/white, /area/station/medical/virology) -"jPp" = ( -/obj/effect/landmark/generic_maintenance_landmark, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 4 - }, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) "jPE" = ( /obj/structure/sign/map/left{ desc = "A framed picture of the station. Clockwise from security at the top (red), you see engineering (yellow), science (purple), escape (red and white), medbay (green), arrivals (blue and white), and finally cargo (brown)."; @@ -27557,13 +27861,6 @@ /obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, /turf/open/floor/plating, /area/station/maintenance/port/greater) -"jQz" = ( -/obj/machinery/atmospherics/components/unary/outlet_injector/on{ - dir = 8 - }, -/obj/effect/spawner/random/engineering/tracking_beacon, -/turf/open/floor/engine, -/area/station/science/xenobiology) "jQM" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/command{ @@ -27593,6 +27890,28 @@ "jRg" = ( /turf/open/floor/engine/co2, /area/station/engineering/atmos) +"jRo" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/tile/brown/opposingcorners, +/obj/structure/table, +/obj/item/hand_labeler_refill{ + pixel_x = 12; + pixel_y = -3 + }, +/obj/effect/spawner/random/bureaucracy/birthday_wrap{ + pixel_x = -2; + pixel_y = 8 + }, +/obj/item/stack/package_wrap{ + pixel_x = -6; + pixel_y = 18 + }, +/obj/item/hand_labeler, +/obj/item/stack/package_wrap, +/turf/open/floor/iron, +/area/station/cargo/sorting) "jRz" = ( /obj/effect/spawner/random/structure/closet_maintenance, /obj/effect/spawner/random/maintenance, @@ -27605,11 +27924,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central) -"jRM" = ( -/obj/effect/spawner/random/maintenance, -/obj/effect/turf_decal/bot_white, -/turf/open/floor/iron, -/area/station/cargo/storage) "jRO" = ( /obj/structure/table, /obj/item/paper_bin, @@ -27659,13 +27973,6 @@ "jSk" = ( /turf/open/floor/engine, /area/station/science/explab) -"jSm" = ( -/obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/south, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/station/construction/storage_wing) "jSq" = ( /obj/machinery/door/firedoor, /obj/structure/disposalpipe/segment{ @@ -27694,6 +28001,19 @@ /obj/machinery/light/small/directional/west, /turf/open/floor/grass, /area/station/security/prison/garden) +"jTl" = ( +/obj/structure/disposaloutlet{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/light/small/directional/west, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/disposal) "jTs" = ( /obj/item/kirbyplants/potty, /turf/open/floor/wood/large, @@ -27801,6 +28121,22 @@ }, /turf/open/floor/plating/airless, /area/station/science/ordnance/bomb) +"jUs" = ( +/obj/machinery/power/apc/auto_name/directional/south, +/obj/effect/turf_decal/tile/brown{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/cargo/lobby) "jUu" = ( /obj/structure/disposalpipe/segment{ dir = 6 @@ -27868,6 +28204,13 @@ /obj/effect/mapping_helpers/burnt_floor, /turf/open/floor/plating, /area/station/maintenance/port) +"jVe" = ( +/obj/machinery/chem_dispenser, +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/medical/pharmacy) "jVl" = ( /obj/structure/disposalpipe/segment, /obj/effect/turf_decal/stripes/line{ @@ -28028,11 +28371,10 @@ /turf/open/floor/iron/dark, /area/station/command/gateway) "jYu" = ( -/mob/living/basic/cow{ - name = "Betsy"; - real_name = "Betsy" +/obj/effect/turf_decal/siding/white{ + dir = 9 }, -/turf/open/floor/grass, +/turf/open/water, /area/station/service/hydroponics/garden) "jYv" = ( /obj/machinery/meter, @@ -28045,16 +28387,6 @@ }, /turf/open/floor/iron/white, /area/station/medical/chemistry) -"jYB" = ( -/obj/machinery/conveyor/inverted{ - dir = 6; - id = "QMLoad" - }, -/obj/effect/turf_decal/stripes/line{ - dir = 5 - }, -/turf/open/floor/plating, -/area/station/cargo/storage) "jYD" = ( /obj/structure/chair{ dir = 4 @@ -28115,11 +28447,6 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /turf/open/floor/iron/dark, /area/station/command/bridge) -"kaf" = ( -/obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/east, -/turf/open/floor/iron, -/area/station/cargo/storage) "kag" = ( /obj/machinery/airalarm/directional/south, /obj/machinery/disposal/bin, @@ -28161,16 +28488,6 @@ }, /turf/open/floor/iron/dark/corner, /area/station/engineering/atmos) -"kaU" = ( -/obj/structure/closet{ - name = "evidence closet 3" - }, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/effect/turf_decal/tile/red/half/contrasted{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/security/evidence) "kbo" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -28259,14 +28576,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/command/bridge) -"kcu" = ( -/obj/structure/table, -/obj/item/stack/sheet/iron{ - amount = 10 - }, -/obj/item/electropack, -/turf/open/floor/engine, -/area/station/science/xenobiology) "kcF" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -28321,22 +28630,6 @@ }, /turf/open/floor/iron, /area/station/security/mechbay) -"kdA" = ( -/obj/machinery/door/airlock/mining{ - name = "Warehouse" - }, -/obj/machinery/door/firedoor, -/obj/effect/mapping_helpers/airlock/access/all/supply/general, -/turf/open/floor/iron, -/area/station/cargo/warehouse) -"kdC" = ( -/obj/machinery/holopad, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/disposalpipe/segment, -/obj/effect/landmark/event_spawn, -/turf/open/floor/iron, -/area/station/cargo/miningoffice) "kdL" = ( /obj/structure/cable, /obj/machinery/light/floor, @@ -28363,6 +28656,17 @@ /obj/effect/landmark/start/hangover, /turf/open/floor/iron/freezer, /area/station/commons/toilet/restrooms) +"ken" = ( +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 8 + }, +/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) "keK" = ( /obj/effect/turf_decal/tile/yellow/anticorner/contrasted{ dir = 4 @@ -28460,10 +28764,6 @@ /obj/effect/turf_decal/tile/green/half/contrasted, /turf/open/floor/iron/white, /area/station/medical/virology) -"kgC" = ( -/obj/machinery/door/poddoor/incinerator_ordmix, -/turf/open/floor/engine/vacuum, -/area/station/science/ordnance) "kgV" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -28613,6 +28913,24 @@ /obj/machinery/atmospherics/pipe/smart/simple/supply/hidden, /turf/open/floor/iron/dark, /area/station/engineering/atmos/storage/gas) +"kkB" = ( +/obj/machinery/mineral/ore_redemption{ + dir = 4; + input_dir = 8; + output_dir = 4 + }, +/obj/effect/turf_decal/delivery, +/obj/machinery/door/firedoor, +/obj/machinery/door/window/left/directional/east{ + name = "Ore Redemption Window" + }, +/obj/machinery/door/window/left/directional/west{ + req_access = list("cargo"); + name = "Cargo Security Window" + }, +/obj/effect/turf_decal/tile/brown/fourcorners, +/turf/open/floor/iron, +/area/station/cargo/lobby) "kkU" = ( /obj/structure/disposalpipe/segment, /obj/machinery/camera/directional/west{ @@ -28823,16 +29141,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/port/fore) -"knT" = ( -/obj/machinery/door/airlock/security/glass{ - name = "Security Post - Cargo" - }, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/mapping_helpers/airlock/access/all/security/general, -/turf/open/floor/iron, -/area/station/security/checkpoint/supply) "knY" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 8 @@ -28871,10 +29179,6 @@ }, /turf/open/floor/iron, /area/station/security/prison/work) -"kod" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/cargo/warehouse) "koj" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -28959,6 +29263,25 @@ /obj/machinery/newscaster/directional/west, /turf/open/floor/iron/white, /area/station/medical/surgery/theatre) +"kqh" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark, +/obj/effect/turf_decal/trimline/brown/line, +/obj/effect/turf_decal/trimline/brown/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/obj/machinery/power/apc/auto_name/directional/west, +/obj/effect/landmark/start/bitrunner, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark/textured_half, +/area/station/cargo/bitrunning/den) "kqm" = ( /obj/structure/cable, /obj/effect/turf_decal/trimline/blue/filled/warning{ @@ -29001,13 +29324,21 @@ /turf/open/floor/iron/white, /area/station/security/prison) "krt" = ( -/obj/item/storage/bag/plants/portaseeder, -/obj/structure/table, -/obj/item/plant_analyzer, /obj/effect/turf_decal/stripes/line{ dir = 1 }, /obj/machinery/light/directional/south, +/obj/structure/table/wood, +/obj/effect/turf_decal/siding/wideplating_new{ + dir = 4 + }, +/obj/item/storage/toolbox/fishing, +/obj/item/storage/toolbox/fishing, +/obj/item/fishing_rod, +/obj/item/fishing_rod, +/obj/effect/turf_decal/tile/green/half/contrasted{ + dir = 4 + }, /turf/open/floor/iron, /area/station/service/hydroponics/garden) "krL" = ( @@ -29048,6 +29379,15 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/command/gateway) +"ksM" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 5 + }, +/turf/open/floor/iron, +/area/station/cargo/storage) "ksT" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -29058,25 +29398,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/maintenance/starboard/greater) -"ksZ" = ( -/obj/machinery/recharger{ - pixel_y = 4 - }, -/obj/machinery/camera/directional/north{ - c_tag = "Security Post - Medbay"; - network = list("ss13","medbay") - }, -/obj/effect/turf_decal/tile/red/fourcorners, -/obj/machinery/light/small/directional/north, -/obj/structure/table/reinforced, -/obj/machinery/requests_console/directional/north{ - department = "Security"; - name = "Security Requests Console" - }, -/obj/effect/mapping_helpers/requests_console/assistance, -/obj/effect/mapping_helpers/requests_console/supplies, -/turf/open/floor/iron/dark, -/area/station/security/checkpoint/medical) "ktl" = ( /obj/structure/sink/directional/east, /obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ @@ -29084,40 +29405,6 @@ }, /turf/open/floor/iron, /area/station/service/hydroponics/garden) -"ktt" = ( -/obj/machinery/turretid{ - control_area = "/area/station/ai_monitored/turret_protected/ai_upload"; - icon_state = "control_stun"; - name = "AI Upload Turret Control"; - pixel_y = 28 - }, -/obj/item/radio/intercom/directional/north{ - broadcasting = 1; - frequency = 1447; - name = "Private Channel"; - pixel_x = -26 - }, -/obj/effect/landmark/start/cyborg, -/obj/machinery/light/small/directional/west, -/obj/machinery/computer/security/telescreen{ - desc = "Used for watching the ai_upload."; - dir = 4; - name = "AI Upload Monitor"; - network = list("aiupload"); - pixel_x = -29 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/obj/machinery/power/apc/auto_name/directional/south, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, -/area/station/ai_monitored/turret_protected/ai_upload_foyer) -"ktw" = ( -/obj/structure/sign/warning/electric_shock/directional/north, -/turf/open/space/basic, -/area/space) "ktz" = ( /obj/effect/turf_decal/stripes/corner{ dir = 1 @@ -29180,6 +29467,13 @@ /obj/structure/cable, /turf/open/floor/plating/airless, /area/station/solars/port/fore) +"kuS" = ( +/obj/item/kirbyplants/random, +/obj/effect/turf_decal/tile/brown/anticorner{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/cargo/storage) "kuW" = ( /obj/effect/turf_decal/stripes/line, /turf/open/floor/plating, @@ -29242,6 +29536,14 @@ /obj/machinery/light/small/directional/east, /turf/open/floor/iron/dark, /area/station/engineering/atmos) +"kwh" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/tile/brown/opposingcorners, +/turf/open/floor/iron, +/area/station/cargo/storage) "kwp" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/delivery, @@ -29298,16 +29600,6 @@ /obj/effect/turf_decal/tile/yellow/anticorner/contrasted, /turf/open/floor/iron/white, /area/station/medical/pharmacy) -"kxq" = ( -/obj/machinery/status_display/evac/directional/north, -/obj/machinery/porta_turret/ai, -/obj/machinery/computer/security/telescreen/minisat{ - dir = 8; - pixel_x = 28 - }, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, -/area/station/ai_monitored/turret_protected/aisat_interior) "kxw" = ( /obj/structure/cable, /obj/machinery/power/apc/auto_name/directional/east, @@ -29331,6 +29623,32 @@ /obj/effect/turf_decal/tile/red/half/contrasted, /turf/open/floor/iron, /area/station/security/office) +"kxC" = ( +/obj/structure/table, +/obj/item/paper_bin{ + pixel_x = -1; + pixel_y = 5 + }, +/obj/item/pen, +/obj/machinery/button/door/directional/east{ + id = "Engineering"; + name = "Engineering Lockdown"; + pixel_y = 16; + req_access = list("engineering") + }, +/obj/machinery/button/door/directional/east{ + id = "atmos"; + name = "Atmospherics Lockdown"; + pixel_y = 24; + req_access = list("atmospherics") + }, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 4 + }, +/obj/machinery/light/small/directional/east, +/obj/machinery/computer/security/telescreen/engine/directional/east, +/turf/open/floor/iron, +/area/station/security/checkpoint/engineering) "kxH" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -29377,6 +29695,11 @@ /obj/item/kirbyplants/random, /turf/open/floor/iron/dark, /area/station/medical/morgue) +"kyu" = ( +/obj/structure/lattice/catwalk, +/obj/item/toy/figure/cargotech, +/turf/open/space/basic, +/area/space/nearstation) "kyQ" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -29682,6 +30005,32 @@ }, /turf/open/floor/iron, /area/station/engineering/atmos) +"kEk" = ( +/obj/structure/cable, +/obj/structure/table/wood/fancy/black, +/obj/item/storage/fancy/cigarettes/cigars/cohiba{ + pixel_x = 3; + pixel_y = 14 + }, +/obj/item/reagent_containers/cup/glass/bottle/champagne{ + pixel_x = -7; + pixel_y = 8 + }, +/obj/item/cigarette/cigar{ + pixel_x = 4; + pixel_y = 3 + }, +/obj/item/cigarette/cigar{ + pixel_x = 8 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 9 + }, +/obj/machinery/keycard_auth/directional/north{ + pixel_x = -5 + }, +/turf/open/floor/wood/large, +/area/station/command/heads_quarters/qm) "kEm" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -29718,6 +30067,15 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/engineering/main) +"kFa" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/landmark/start/cargo_technician, +/obj/structure/chair/office{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/cargo/sorting) "kFg" = ( /obj/effect/turf_decal/tile/yellow/half/contrasted{ dir = 1 @@ -29805,6 +30163,24 @@ /obj/machinery/light/small/directional/north, /turf/open/floor/iron/white, /area/station/science/lab) +"kGR" = ( +/obj/machinery/button/ignition{ + id = "Xenobio"; + pixel_x = -4; + pixel_y = -3 + }, +/obj/machinery/button/door/directional/north{ + id = "Xenolab"; + name = "Test Chamber Blast Doors"; + pixel_x = 6; + pixel_y = -2; + req_access = list("xenobiology") + }, +/obj/structure/table/reinforced/plastitaniumglass, +/obj/structure/window/reinforced/spawner/directional/west, +/obj/machinery/computer/security/telescreen/test_chamber/directional/north, +/turf/open/floor/iron, +/area/station/science/xenobiology) "kHg" = ( /obj/structure/cable, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ @@ -29842,12 +30218,31 @@ /obj/structure/window/reinforced/spawner/directional/west, /turf/open/floor/engine, /area/station/science/explab) +"kHO" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/light/floor, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"kHV" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/closed/wall, +/area/station/maintenance/port/fore) "kIG" = ( /obj/structure/rack, /obj/effect/spawner/random/maintenance/two, /obj/structure/sign/poster/contraband/random/directional/north, /turf/open/floor/plating, /area/station/maintenance/port) +"kIJ" = ( +/obj/effect/spawner/random/maintenance, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) "kIR" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable, @@ -29950,9 +30345,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/engineering/atmos) -"kKr" = ( -/turf/open/floor/iron, -/area/station/hallway/primary/port) "kKv" = ( /obj/structure/lattice, /obj/machinery/atmospherics/components/unary/passive_vent, @@ -29970,6 +30362,11 @@ /obj/machinery/power/apc/auto_name/directional/west, /turf/open/floor/iron/white, /area/station/security/prison) +"kKO" = ( +/obj/structure/fake_stairs/directional/east, +/obj/structure/cable, +/turf/open/floor/catwalk_floor/iron, +/area/station/cargo/storage) "kKT" = ( /obj/item/reagent_containers/cup/bottle/multiver{ pixel_x = 7; @@ -30190,14 +30587,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/port) -"kOX" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/obj/effect/landmark/start/depsec/supply, -/turf/open/floor/iron, -/area/station/security/checkpoint/supply) "kOY" = ( /obj/machinery/disposal/bin, /obj/machinery/light_switch/directional/south, @@ -30253,12 +30642,6 @@ /obj/machinery/light/small/directional/south, /turf/open/floor/engine/o2, /area/station/engineering/atmos) -"kPX" = ( -/obj/effect/turf_decal/loading_area/white{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/central) "kPZ" = ( /obj/structure/rack, /obj/effect/spawner/random/maintenance/two, @@ -30283,6 +30666,16 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central) +"kQv" = ( +/obj/machinery/light/directional/east, +/obj/structure/cable, +/turf/open/floor/catwalk_floor/iron, +/area/station/cargo/storage) +"kQO" = ( +/obj/effect/turf_decal/tile/brown/opposingcorners, +/mob/living/basic/sloth/citrus, +/turf/open/floor/iron, +/area/station/cargo/storage) "kQP" = ( /turf/closed/wall, /area/station/command/heads_quarters/qm) @@ -30300,30 +30693,6 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/commons/locker) -"kRc" = ( -/obj/structure/table, -/obj/item/multitool{ - pixel_x = 4; - pixel_y = 12 - }, -/obj/item/multitool{ - pixel_x = -4; - pixel_y = 8 - }, -/obj/item/stock_parts/cell/high{ - pixel_y = -4 - }, -/obj/item/stock_parts/cell/high{ - pixel_x = -4; - pixel_y = -6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible/layer5, -/obj/machinery/atmospherics/pipe/smart/simple/purple/visible, -/obj/item/multitool{ - pixel_y = 10 - }, -/turf/open/floor/iron/dark/textured, -/area/station/engineering/atmos) "kRe" = ( /turf/open/floor/iron, /area/station/cargo/miningoffice) @@ -30390,11 +30759,6 @@ /obj/machinery/airalarm/directional/south, /turf/open/floor/iron, /area/station/security/holding_cell) -"kSp" = ( -/obj/effect/spawner/random/structure/crate, -/obj/structure/disposalpipe/segment, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) "kSs" = ( /obj/structure/table, /obj/item/radio/intercom/directional/north, @@ -30510,6 +30874,16 @@ /obj/structure/cable/layer3, /turf/open/floor/circuit, /area/station/ai_monitored/turret_protected/ai) +"kUG" = ( +/obj/effect/turf_decal/bot, +/obj/effect/turf_decal/loading_area{ + dir = 8 + }, +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/cargo/lobby) "kUJ" = ( /obj/effect/turf_decal/box/white{ color = "#52B4E9" @@ -30848,6 +31222,15 @@ }, /turf/open/floor/iron, /area/station/security/office) +"kZI" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/spawner/random/structure/crate, +/obj/effect/turf_decal/bot_white, +/obj/structure/closet/crate, +/turf/open/floor/iron, +/area/station/cargo/warehouse) "laa" = ( /obj/machinery/light/directional/east, /turf/open/floor/iron/chapel{ @@ -30872,6 +31255,14 @@ /obj/effect/spawner/random/trash/janitor_supplies, /turf/open/floor/plating, /area/station/maintenance/aft/greater) +"lak" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/cargo/sorting) "lav" = ( /obj/structure/girder, /obj/effect/spawner/random/structure/grille, @@ -30882,6 +31273,17 @@ /obj/effect/turf_decal/stripes/line, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) +"lay" = ( +/obj/structure/cable, +/obj/effect/landmark/start/hangover, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/brown{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/construction/storage_wing) "laE" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/visible/layer4, /turf/closed/wall/r_wall, @@ -30933,6 +31335,7 @@ name = "Featherbottom"; real_name = "Featherbottom" }, +/obj/structure/flora/bush/fullgrass, /turf/open/floor/grass, /area/station/service/hydroponics/garden) "lbL" = ( @@ -30957,26 +31360,6 @@ /obj/effect/spawner/random/structure/musician/piano/random_piano, /turf/open/floor/wood/large, /area/station/service/theater) -"lbZ" = ( -/obj/machinery/door/airlock/maintenance{ - name = "Disposal Access" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/mapping_helpers/airlock/unres{ - dir = 8 - }, -/obj/effect/mapping_helpers/airlock/access/any/supply/maintenance, -/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, -/obj/effect/mapping_helpers/airlock/unres{ - dir = 8 - }, -/obj/effect/mapping_helpers/airlock/access/any/supply/maintenance, -/turf/open/floor/plating, -/area/station/maintenance/disposal) "lcG" = ( /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, @@ -31000,10 +31383,12 @@ }, /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ +/obj/effect/landmark/event_spawn, +/obj/effect/turf_decal/siding/wideplating_new/corner, +/obj/effect/turf_decal/tile/green, +/obj/effect/turf_decal/tile/neutral{ dir = 4 }, -/obj/effect/landmark/event_spawn, /turf/open/floor/iron, /area/station/service/hydroponics/garden) "lds" = ( @@ -31014,14 +31399,6 @@ /obj/effect/turf_decal/tile/red/opposingcorners, /turf/open/floor/iron/white, /area/station/security/prison/mess) -"ldC" = ( -/obj/machinery/door/firedoor, -/obj/machinery/computer/cargo/request{ - dir = 1 - }, -/obj/structure/window/spawner/directional/south, -/turf/open/floor/iron, -/area/station/cargo/sorting) "ldJ" = ( /obj/machinery/light/directional/north, /obj/structure/sign/map/right{ @@ -31065,6 +31442,11 @@ /obj/machinery/light/directional/south, /turf/open/floor/iron, /area/station/engineering/gravity_generator) +"leO" = ( +/obj/structure/table, +/obj/item/cigarette/pipe, +/turf/open/floor/plating, +/area/station/maintenance/port) "leP" = ( /obj/machinery/atmospherics/pipe/heat_exchanging/junction{ dir = 4 @@ -31111,12 +31493,6 @@ }, /turf/open/floor/iron/white, /area/station/science/research) -"lfY" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/station/cargo/drone_bay) "lge" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -31276,6 +31652,53 @@ /obj/machinery/duct, /turf/open/floor/iron, /area/station/commons/fitness/recreation) +"liU" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/item/pen/red{ + pixel_x = 8; + pixel_y = 8 + }, +/obj/item/pen/fountain{ + pixel_x = 10 + }, +/obj/item/pen/blue{ + pixel_x = 4; + pixel_y = -3 + }, +/obj/item/storage/medkit/regular{ + pixel_x = -3; + pixel_y = 10 + }, +/obj/structure/table, +/obj/item/stamp{ + pixel_x = -9; + pixel_y = -1 + }, +/obj/item/stamp/denied{ + pixel_y = -1 + }, +/obj/structure/cable, +/turf/open/floor/catwalk_floor/iron, +/area/station/cargo/storage) +"liX" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/door/firedoor, +/turf/open/floor/iron, +/area/station/cargo/lobby) +"liZ" = ( +/obj/machinery/light/small/directional/west, +/obj/item/clothing/mask/animal/horsehead, +/obj/structure/table/wood, +/obj/machinery/airalarm/directional/south, +/obj/item/cigarette/pipe, +/obj/item/clothing/mask/fakemoustache, +/obj/structure/sign/poster/contraband/random/directional/west, +/turf/open/floor/wood, +/area/station/service/theater) "lje" = ( /obj/machinery/camera/directional/south{ c_tag = "Starboard Primary Hallway - Auxiliary Tool Storage" @@ -31325,6 +31748,11 @@ /obj/machinery/light/small/directional/south, /turf/open/floor/engine, /area/station/science/xenobiology) +"ljH" = ( +/obj/effect/decal/cleanable/generic, +/obj/vehicle/sealed/mecha/ripley/cargo, +/turf/open/floor/iron/recharge_floor, +/area/station/cargo/warehouse) "ljL" = ( /obj/structure/chair/comfy/black, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -31464,29 +31892,6 @@ }, /turf/open/floor/iron, /area/station/science/lab) -"lnv" = ( -/obj/structure/cable, -/obj/machinery/door/airlock/maintenance{ - name = "Cargo Bay Maintenance" - }, -/obj/effect/mapping_helpers/airlock/access/all/supply/general, -/turf/open/floor/plating, -/area/station/maintenance/port/greater) -"lnG" = ( -/obj/structure/table/wood, -/obj/item/paper_bin/carbon{ - pixel_x = -10; - pixel_y = 4 - }, -/obj/item/paper_bin/carbon{ - pixel_x = -10; - pixel_y = 9 - }, -/obj/item/computer_disk/quartermaster, -/obj/item/computer_disk/quartermaster, -/obj/item/computer_disk/quartermaster, -/turf/open/floor/wood, -/area/station/command/heads_quarters/qm) "lnH" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -31536,14 +31941,12 @@ }, /turf/open/floor/iron, /area/station/engineering/main) -"loQ" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/spawner/random/maintenance, +"loR" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) +/turf/open/floor/iron, +/area/station/construction/storage_wing) "loW" = ( /obj/machinery/door/airlock/maintenance{ name = "Storage Room" @@ -31558,12 +31961,11 @@ /area/station/maintenance/fore) "loY" = ( /obj/structure/rack, -/obj/item/gun/energy/e_gun/dragnet, -/obj/item/gun/energy/e_gun/dragnet, /obj/effect/turf_decal/tile/blue/half/contrasted{ dir = 4 }, /obj/machinery/light/small/directional/west, +/obj/effect/spawner/random/armory/dragnet, /turf/open/floor/iron/dark, /area/station/ai_monitored/security/armory) "lpo" = ( @@ -31733,15 +32135,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central) -"lsu" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/closet/crate/freezer, -/obj/structure/sink/kitchen/directional/south{ - desc = "A sink used for washing one's hands and face. It looks rusty and home-made"; - name = "old sink" - }, -/turf/open/floor/iron, -/area/station/cargo/warehouse) "lsJ" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -31757,6 +32150,27 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/security/brig) +"lsU" = ( +/obj/effect/turf_decal/tile/brown/opposingcorners, +/obj/structure/table, +/obj/item/stack/package_wrap{ + pixel_x = -2; + pixel_y = 1 + }, +/obj/effect/spawner/random/bureaucracy/birthday_wrap{ + pixel_x = -2; + pixel_y = 8 + }, +/obj/item/dest_tagger{ + pixel_x = 7; + pixel_y = 1 + }, +/obj/item/stack/wrapping_paper{ + pixel_x = -4; + pixel_y = -7 + }, +/turf/open/floor/iron, +/area/station/cargo/sorting) "lsV" = ( /obj/effect/turf_decal/siding/purple{ dir = 10 @@ -31841,22 +32255,15 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/service/hydroponics) -"luc" = ( -/obj/machinery/conveyor_switch/oneway{ - id = "QMLoad2"; - name = "Unloading Conveyor"; - pixel_x = -13; - pixel_y = -4 +"lug" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 4 }, +/obj/item/kirbyplants/random, /turf/open/floor/iron, -/area/station/cargo/storage) -"lud" = ( -/obj/machinery/firealarm/directional/east, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 8 - }, -/turf/open/floor/wood, -/area/station/command/heads_quarters/qm) +/area/station/construction/storage_wing) "lup" = ( /obj/machinery/ai_slipper{ uses = 10 @@ -31900,6 +32307,17 @@ }, /turf/open/floor/iron, /area/station/security/range) +"lvh" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/trimline/red/filled/warning, +/obj/effect/turf_decal/caution/stand_clear/red, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/cargo/storage) "lvs" = ( /obj/machinery/door/airlock/maintenance, /obj/structure/disposalpipe/segment, @@ -31955,19 +32373,6 @@ /obj/machinery/duct, /turf/open/floor/iron, /area/station/engineering/break_room) -"lwn" = ( -/obj/structure/table/reinforced, -/obj/machinery/door/window/right/directional/south{ - name = "Cargo Desk"; - req_access = list("shipping") - }, -/obj/machinery/door/firedoor, -/obj/structure/disposalpipe/segment, -/obj/structure/desk_bell{ - pixel_x = 7 - }, -/turf/open/floor/iron, -/area/station/cargo/sorting) "lwt" = ( /obj/structure/table/wood, /obj/item/book/manual/wiki/security_space_law{ @@ -32096,6 +32501,11 @@ /obj/item/pen/red, /turf/open/floor/iron/white, /area/station/medical/virology) +"lAa" = ( +/obj/machinery/light/small/directional/north, +/obj/effect/turf_decal/caution, +/turf/open/floor/plating, +/area/station/cargo/storage) "lAe" = ( /obj/machinery/light/small/directional/south, /turf/open/floor/engine, @@ -32145,6 +32555,20 @@ /obj/machinery/light/small/directional/east, /turf/open/floor/iron/dark, /area/station/security/evidence) +"lBg" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/mapping_helpers/airlock/locked, +/obj/machinery/door/airlock/vault{ + name = "Vault" + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper, +/obj/effect/landmark/navigate_destination, +/obj/effect/mapping_helpers/airlock/access/all/supply/vault, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/command/nuke_storage) "lBm" = ( /obj/machinery/conveyor{ dir = 4; @@ -32155,18 +32579,17 @@ }, /turf/open/floor/plating, /area/station/maintenance/disposal) -"lBz" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/door/airlock/mining{ - name = "Deliveries" - }, -/obj/machinery/door/firedoor, -/obj/effect/mapping_helpers/airlock/access/all/supply/general, -/turf/open/floor/iron, -/area/station/cargo/sorting) "lBA" = ( /turf/open/floor/wood/large, /area/station/commons/lounge) +"lBN" = ( +/obj/machinery/computer/security/telescreen/tcomms/directional/east, +/obj/machinery/computer/telecomms/monitor{ + dir = 8; + network = "tcommsat" + }, +/turf/open/floor/iron/grimy, +/area/station/tcommsat/computer) "lCb" = ( /obj/structure/cable, /obj/structure/sign/poster/ripped/directional/south, @@ -32271,6 +32694,14 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood, /area/station/commons/vacant_room/office) +"lFF" = ( +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) "lFZ" = ( /obj/structure/chair/pew/right, /turf/open/floor/iron/chapel{ @@ -32327,6 +32758,12 @@ /obj/effect/spawner/random/maintenance, /turf/open/floor/plating, /area/station/maintenance/port) +"lHu" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 1 + }, +/turf/open/floor/engine/vacuum, +/area/station/science/ordnance/burnchamber) "lHx" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -32361,29 +32798,10 @@ }, /turf/open/floor/iron, /area/station/service/bar) -"lIM" = ( -/obj/structure/table, -/obj/item/stack/package_wrap{ - pixel_x = -8; - pixel_y = -3 - }, -/obj/item/paper/paperslip{ - pixel_x = -5; - pixel_y = 10 - }, -/obj/structure/disposalpipe/segment{ - dir = 9 - }, -/obj/effect/turf_decal/tile/brown/half/contrasted, -/turf/open/floor/iron, -/area/station/cargo/sorting) "lIX" = ( /obj/structure/chair/comfy/brown, /turf/open/floor/engine/cult, /area/station/service/library) -"lJa" = ( -/turf/open/floor/grass, -/area/station/service/hydroponics/garden) "lJh" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -32433,17 +32851,6 @@ }, /turf/open/floor/iron, /area/station/commons/fitness/recreation) -"lJR" = ( -/obj/machinery/door/airlock/maintenance, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/mapping_helpers/airlock/unres{ - dir = 8 - }, -/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) "lKu" = ( /obj/effect/landmark/carpspawn, /turf/open/space/basic, @@ -32741,6 +33148,15 @@ /obj/effect/turf_decal/tile/red/half/contrasted, /turf/open/floor/iron, /area/station/security/office) +"lPn" = ( +/obj/machinery/light/small/dim/directional/north, +/obj/structure/rack, +/obj/item/pushbroom, +/obj/effect/decal/cleanable/dirt, +/obj/item/mecha_parts/mecha_equipment/hydraulic_clamp, +/obj/machinery/light_switch/directional/north, +/turf/open/floor/iron, +/area/station/cargo/warehouse) "lPt" = ( /obj/machinery/door/window/left/directional/west{ name = "Jetpack Storage"; @@ -32809,23 +33225,6 @@ /obj/machinery/airalarm/directional/north, /turf/open/floor/iron, /area/station/security/prison) -"lPS" = ( -/obj/structure/table, -/obj/machinery/button/door{ - id = "xenobio8"; - layer = 3.3; - name = "Xenobio Pen 8 Blast Doors"; - pixel_y = 4; - req_access = list("xenobiology") - }, -/obj/item/reagent_containers/spray/cleaner{ - pixel_x = 10; - pixel_y = -1 - }, -/obj/structure/window/reinforced/spawner/directional/west, -/obj/structure/window/reinforced/spawner/directional/north, -/turf/open/floor/iron, -/area/station/science/xenobiology) "lPZ" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/door/poddoor/preopen{ @@ -32835,6 +33234,15 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/command/bridge) +"lQf" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/cargo/storage) "lQm" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/cable, @@ -32877,6 +33285,26 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/port) +"lRs" = ( +/obj/structure/table, +/obj/machinery/button/door{ + id = "xenobio3"; + name = "Xenobio Pen 3 Blast Doors"; + pixel_y = 4; + req_access = list("xenobiology") + }, +/obj/structure/window/reinforced/spawner/directional/east, +/obj/structure/window/reinforced/spawner/directional/south, +/turf/open/floor/iron, +/area/station/science/xenobiology) +"lRA" = ( +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) "lRS" = ( /obj/machinery/atmospherics/pipe/smart/simple/green/visible, /obj/effect/spawner/structure/window/reinforced, @@ -32973,11 +33401,6 @@ /obj/effect/turf_decal/tile/blue/fourcorners, /turf/open/floor/iron/white/side, /area/station/medical/treatment_center) -"lTZ" = ( -/obj/effect/decal/cleanable/dirt, -/obj/vehicle/sealed/mecha/ripley/cargo, -/turf/open/floor/plating, -/area/station/cargo/warehouse) "lUj" = ( /obj/structure/table, /obj/item/book/manual/wiki/security_space_law{ @@ -32996,15 +33419,6 @@ /obj/machinery/airalarm/directional/east, /turf/open/floor/iron/dark, /area/station/security/courtroom) -"lUo" = ( -/obj/machinery/cell_charger{ - pixel_y = 4 - }, -/obj/structure/table/glass, -/obj/item/stock_parts/cell/high, -/obj/structure/window/reinforced/spawner/directional/west, -/turf/open/floor/iron/dark, -/area/station/command/bridge) "lUp" = ( /obj/structure/sink/kitchen/directional/south{ desc = "A sink used for washing one's hands and face. It looks rusty and home-made"; @@ -33013,6 +33427,13 @@ /obj/effect/spawner/random/trash/mess, /turf/open/floor/iron/showroomfloor, /area/station/maintenance/starboard/lesser) +"lUx" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/bot_white, +/turf/open/floor/iron, +/area/station/cargo/storage) "lUz" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /obj/effect/turf_decal/tile/yellow{ @@ -33027,14 +33448,6 @@ /obj/effect/spawner/random/structure/chair_flipped, /turf/open/floor/iron/checker, /area/station/maintenance/aft/lesser) -"lUI" = ( -/obj/effect/turf_decal/arrows/red{ - dir = 4 - }, -/obj/effect/spawner/random/maintenance, -/obj/effect/turf_decal/bot_white, -/turf/open/floor/iron, -/area/station/cargo/storage) "lUK" = ( /obj/machinery/camera/directional/west{ c_tag = "Dormitories - Aft" @@ -33075,6 +33488,9 @@ }, /turf/open/floor/iron, /area/station/command/gateway) +"lVp" = ( +/turf/closed/wall, +/area/station/cargo/lobby) "lVB" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -33150,6 +33566,14 @@ /obj/effect/turf_decal/tile/blue/half/contrasted, /turf/open/floor/iron/white, /area/station/medical/medbay/lobby) +"lWL" = ( +/obj/effect/turf_decal/stripes/line, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/maintenance/disposal) "lWM" = ( /obj/machinery/camera/directional/east{ c_tag = "Xenobiology Lab - Pen #6"; @@ -33163,12 +33587,6 @@ /obj/structure/sign/warning/vacuum/directional/east, /turf/open/floor/plating, /area/station/maintenance/aft/lesser) -"lWS" = ( -/obj/machinery/atmospherics/components/unary/portables_connector/visible, -/obj/effect/turf_decal/box, -/obj/machinery/portable_atmospherics/canister, -/turf/open/floor/iron, -/area/station/science/xenobiology) "lXl" = ( /obj/machinery/hydroponics/constructable, /obj/effect/turf_decal/bot, @@ -33275,22 +33693,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central) -"lYM" = ( -/obj/machinery/computer/security/telescreen{ - desc = "Used for watching the turbine vent."; - dir = 8; - name = "turbine vent monitor"; - network = list("turbine"); - pixel_x = 29 - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/dark/visible, -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/maintenance/disposal/incinerator) "lYP" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 8 @@ -33471,21 +33873,6 @@ /obj/effect/turf_decal/box, /turf/open/floor/iron/dark, /area/station/security/mechbay) -"mcF" = ( -/obj/structure/table, -/obj/machinery/button/door{ - id = "xenobio4"; - layer = 3.3; - name = "Xenobio Pen 4 Blast Doors"; - pixel_y = 4; - req_access = list("xenobiology"); - sync_doors = 4 - }, -/obj/structure/window/reinforced/spawner/directional/south, -/obj/structure/window/reinforced/spawner/directional/east, -/obj/structure/window/reinforced/spawner/directional/north, -/turf/open/floor/iron, -/area/station/science/xenobiology) "mcP" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/public/glass{ @@ -33596,35 +33983,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood, /area/station/service/library) -"mgb" = ( -/obj/machinery/conveyor{ - dir = 8; - id = "packageExternal" - }, -/obj/effect/turf_decal/stripes/line{ - dir = 9 - }, -/obj/machinery/camera/directional/south{ - c_tag = "Cargo Bay - Aft"; - pixel_x = 14 - }, -/obj/machinery/light/directional/south, -/obj/machinery/disposal/delivery_chute{ - dir = 4 - }, -/obj/structure/disposalpipe/trunk{ - dir = 8 - }, -/obj/machinery/door/window/right/directional/east{ - name = "Crate to Shuttle"; - req_access = list("shipping") - }, -/obj/structure/plasticflaps/opaque{ - name = "Service Deliveries" - }, -/obj/structure/window/spawner/directional/west, -/turf/open/floor/iron, -/area/station/cargo/storage) "mgc" = ( /obj/effect/turf_decal/trimline/red/filled/corner{ dir = 1 @@ -33671,16 +34029,6 @@ /obj/machinery/shower/directional/east, /turf/open/floor/iron/freezer, /area/station/commons/toilet/restrooms) -"mgJ" = ( -/obj/effect/turf_decal/trimline/brown/filled/line, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/cargo/lobby) "mgK" = ( /obj/item/target, /obj/effect/turf_decal/stripes/line{ @@ -33725,6 +34073,22 @@ }, /turf/open/floor/iron/dark, /area/station/science/ordnance) +"mhM" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/table/reinforced, +/obj/machinery/door/firedoor, +/obj/structure/desk_bell{ + pixel_x = 7 + }, +/obj/machinery/door/window/right/directional/south{ + name = "Cargo Desk"; + req_access = list("shipping") + }, +/obj/item/newspaper{ + pixel_x = -5 + }, +/turf/open/floor/plating, +/area/station/cargo/sorting) "mhR" = ( /obj/machinery/light/small/directional/south, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ @@ -33744,7 +34108,7 @@ /turf/open/floor/plating, /area/station/maintenance/department/engine) "mie" = ( -/obj/structure/window/spawner/directional/south, +/obj/structure/flora/bush/flowers_yw, /turf/open/floor/grass, /area/station/service/hydroponics/garden) "mig" = ( @@ -33833,10 +34197,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/port) -"mji" = ( -/obj/effect/spawner/random/structure/grille, -/turf/open/space, -/area/space/nearstation) "mjr" = ( /turf/open/floor/wood, /area/station/service/library) @@ -33857,32 +34217,6 @@ /obj/structure/cable/layer3, /turf/open/floor/iron/dark, /area/station/ai_monitored/aisat/exterior) -"mkb" = ( -/obj/machinery/conveyor_switch/oneway{ - dir = 8; - id = "packageExternal"; - name = "Crate Returns"; - pixel_x = -5; - pixel_y = 23 - }, -/obj/effect/turf_decal/trimline/brown/filled/corner{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/junction{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/port) -"mkd" = ( -/obj/effect/turf_decal/stripes/line, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) "mkr" = ( /obj/machinery/atmospherics/components/binary/pump{ dir = 4; @@ -33949,6 +34283,11 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/service/janitor) +"mml" = ( +/obj/machinery/holopad, +/obj/effect/turf_decal/bot_white, +/turf/open/floor/iron, +/area/station/cargo/storage) "mmm" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -34100,6 +34439,20 @@ /obj/effect/turf_decal/stripes/line, /turf/open/floor/plating, /area/station/maintenance/aft/greater) +"mnP" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/brown{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/port) "mnU" = ( /obj/machinery/firealarm/directional/north, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -34137,10 +34490,6 @@ /obj/structure/window/reinforced/spawner/directional/south, /turf/open/space, /area/space/nearstation) -"moQ" = ( -/obj/effect/turf_decal/trimline/brown/filled/line, -/turf/open/floor/iron, -/area/station/hallway/primary/central) "moV" = ( /obj/effect/spawner/structure/window/reinforced/tinted, /turf/open/floor/plating, @@ -34191,6 +34540,18 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/chapel, /area/station/service/chapel) +"mqn" = ( +/obj/effect/turf_decal/stripes/line, +/obj/machinery/button/door/directional/west{ + id = "Disposal Exit"; + name = "Disposal Vent Control"; + req_access = list("maint_tunnels") + }, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/turf/open/floor/plating, +/area/station/maintenance/disposal) "mqu" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/landmark/start/hangover, @@ -34353,6 +34714,23 @@ dir = 1 }, /area/station/medical/treatment_center) +"mtk" = ( +/obj/effect/decal/cleanable/cobweb/cobweb2, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 8 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 5 + }, +/obj/item/kirbyplants/random{ + pixel_x = -7 + }, +/obj/machinery/camera/directional/north, +/obj/machinery/digital_clock/directional/east, +/obj/structure/extinguisher_cabinet/directional/north, +/obj/item/poster/traitor, +/turf/open/floor/wood/large, +/area/station/command/heads_quarters/qm) "mtu" = ( /turf/open/floor/engine, /area/station/science/xenobiology) @@ -34374,16 +34752,6 @@ /obj/structure/sign/warning/pods, /turf/closed/wall, /area/station/hallway/secondary/entry) -"mtM" = ( -/obj/machinery/light/directional/south, -/obj/effect/turf_decal/delivery, -/obj/structure/table, -/obj/machinery/computer/security/telescreen/ordnance{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, -/area/station/science/ordnance/testlab) "mtO" = ( /obj/effect/landmark/event_spawn, /turf/open/floor/iron, @@ -34436,6 +34804,12 @@ }, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) +"muq" = ( +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/turf/open/floor/iron, +/area/station/cargo/storage) "mur" = ( /obj/machinery/light/directional/north, /obj/machinery/status_display/evac/directional/north, @@ -34554,6 +34928,14 @@ }, /turf/open/floor/plating, /area/station/maintenance/aft/greater) +"mwo" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) "mww" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -34562,26 +34944,14 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/engineering/main) -"mwN" = ( -/obj/structure/table, -/obj/item/stack/package_wrap{ - pixel_x = -9; - pixel_y = -9 - }, -/obj/item/paper_bin{ - pixel_x = 1; - pixel_y = 9 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/tile/brown/half/contrasted{ - dir = 1 - }, -/obj/item/papercutter{ - pixel_x = 17 +"mwP" = ( +/obj/structure/cable, +/obj/structure/extinguisher_cabinet/directional/east, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 6 }, /turf/open/floor/iron, -/area/station/cargo/sorting) +/area/station/cargo/storage) "mwY" = ( /obj/effect/spawner/random/trash/garbage, /obj/effect/landmark/generic_maintenance_landmark, @@ -34596,12 +34966,6 @@ /obj/machinery/airalarm/directional/north, /turf/open/floor/iron/freezer, /area/station/security/prison/shower) -"mxh" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/bot, -/obj/effect/spawner/random/maintenance, -/turf/open/floor/iron, -/area/station/cargo/warehouse) "mxn" = ( /turf/closed/wall/r_wall, /area/station/command/heads_quarters/hos) @@ -34622,18 +34986,19 @@ /obj/structure/window/spawner/directional/south, /turf/open/floor/iron, /area/station/engineering/atmos) +"mxx" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/spawner/structure/window, +/turf/open/floor/plating, +/area/station/cargo/sorting) "mxI" = ( /obj/structure/disposalpipe/junction/flip, /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/starboard/lesser) -"mxO" = ( -/obj/structure/closet/secure_closet/quartermaster, -/obj/machinery/airalarm/directional/north, -/obj/machinery/camera/directional/north, -/turf/open/floor/wood, -/area/station/command/heads_quarters/qm) "mxQ" = ( /obj/effect/spawner/random/structure/grille, /obj/structure/lattice, @@ -34706,27 +35071,16 @@ /obj/effect/turf_decal/tile/red/opposingcorners, /turf/open/floor/iron, /area/station/security/checkpoint/science) -"mzm" = ( -/obj/structure/table, -/obj/item/reagent_containers/condiment/saltshaker{ - layer = 3.1; - pixel_x = -2; - pixel_y = 2 - }, -/obj/item/reagent_containers/condiment/peppermill{ - desc = "Often used to flavor food or make people sneeze. Fashionably moved to the left side of the table."; - pixel_x = -8; - pixel_y = 2 - }, -/obj/item/reagent_containers/condiment/enzyme{ - pixel_x = 9; - pixel_y = 3 +"mzj" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 1 }, -/obj/item/book/manual/chef_recipes, -/obj/effect/turf_decal/tile/red/opposingcorners, -/obj/structure/window/spawner/directional/south, -/turf/open/floor/iron/white, -/area/station/security/prison/mess) +/obj/machinery/light/directional/north, +/turf/open/floor/iron, +/area/station/cargo/sorting) "mzu" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -34871,14 +35225,6 @@ }, /turf/open/floor/iron/dark, /area/station/service/chapel) -"mCi" = ( -/obj/effect/turf_decal/bot_white/left, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, -/area/station/ai_monitored/command/nuke_storage) "mCj" = ( /obj/machinery/camera{ c_tag = "Xenobiology Lab - Pen #7"; @@ -34973,20 +35319,6 @@ }, /turf/open/floor/iron, /area/station/engineering/atmos) -"mDC" = ( -/obj/structure/table, -/obj/machinery/button/door{ - id = "xenobio5"; - layer = 3.3; - name = "Xenobio Pen 5 Blast Doors"; - pixel_y = 4; - req_access = list("xenobiology") - }, -/obj/structure/window/reinforced/spawner/directional/north, -/obj/structure/window/reinforced/spawner/directional/east, -/obj/structure/window/reinforced/spawner/directional/south, -/turf/open/floor/iron, -/area/station/science/xenobiology) "mDL" = ( /obj/machinery/portable_atmospherics/pump, /obj/effect/turf_decal/delivery, @@ -35054,19 +35386,6 @@ /obj/machinery/light/directional/north, /turf/open/floor/iron, /area/station/hallway/primary/starboard) -"mES" = ( -/obj/structure/rack, -/obj/item/aicard, -/obj/item/radio/off, -/obj/machinery/computer/security/telescreen/minisat{ - dir = 1; - pixel_y = -29 - }, -/obj/effect/turf_decal/tile/blue/half/contrasted{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/station/command/bridge) "mET" = ( /obj/item/wrench, /obj/effect/decal/cleanable/dirt, @@ -35179,6 +35498,10 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) +"mGE" = ( +/obj/structure/sign/warning/secure_area/directional/north, +/turf/open/space/basic, +/area/space/nearstation) "mGI" = ( /obj/effect/spawner/random/engineering/atmospherics_portable, /turf/open/floor/plating, @@ -35262,15 +35585,6 @@ "mHT" = ( /turf/closed/wall, /area/station/engineering/atmos) -"mIg" = ( -/obj/machinery/door/airlock/engineering{ - name = "Port Bow Solar Access" - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/mapping_helpers/airlock/access/all/engineering/general, -/turf/open/floor/plating, -/area/station/maintenance/solars/port/fore) "mIi" = ( /obj/machinery/navbeacon{ codes_txt = "patrol;next_patrol=9.2-Escape-2"; @@ -35311,19 +35625,6 @@ /obj/machinery/holopad, /turf/open/floor/iron/cafeteria, /area/station/service/kitchen) -"mJo" = ( -/obj/machinery/mineral/ore_redemption{ - dir = 4; - input_dir = 8; - output_dir = 4 - }, -/obj/effect/turf_decal/delivery, -/obj/machinery/door/firedoor, -/obj/machinery/door/window/left/directional/east{ - name = "Ore Redemtion Window" - }, -/turf/open/floor/iron, -/area/station/cargo/lobby) "mJE" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -35397,6 +35698,14 @@ /obj/machinery/light/small/directional/west, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) +"mKr" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) "mKu" = ( /obj/machinery/light_switch/directional/west, /obj/structure/cable, @@ -35425,6 +35734,18 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/engineering/main) +"mLp" = ( +/obj/effect/landmark/start/quartermaster, +/obj/structure/cable, +/obj/effect/turf_decal/tile/brown/diagonal_centre, +/obj/effect/turf_decal/tile/yellow/diagonal_edge, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/siding/yellow{ + dir = 8 + }, +/turf/open/floor/iron/diagonal, +/area/station/cargo/storage) "mLu" = ( /obj/machinery/camera/directional/south{ c_tag = "Science Hallway - RD Office"; @@ -35578,30 +35899,11 @@ /obj/machinery/camera/directional/north, /turf/open/floor/iron, /area/station/commons/storage/tools) -"mNx" = ( -/obj/structure/filingcabinet/filingcabinet, -/obj/effect/turf_decal/tile/brown/half/contrasted, -/obj/machinery/light/small/directional/west, -/turf/open/floor/iron, -/area/station/cargo/sorting) "mNO" = ( /obj/effect/turf_decal/stripes/line, /obj/structure/light_construct/directional/west, /turf/open/floor/iron, /area/station/maintenance/port/aft) -"mNQ" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/rack, -/obj/effect/spawner/random/maintenance, -/obj/item/airlock_painter/decal, -/obj/machinery/power/apc/auto_name/directional/east, -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/cargo/warehouse) -"mNZ" = ( -/obj/machinery/holopad, -/turf/open/floor/iron, -/area/station/cargo/storage) "mOl" = ( /obj/structure/closet/boxinggloves, /obj/effect/landmark/start/hangover/closet, @@ -35699,6 +36001,18 @@ }, /turf/open/floor/iron/cafeteria, /area/station/service/kitchen) +"mQa" = ( +/obj/machinery/camera/directional/north{ + c_tag = "Port Primary Hallway - Middle" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/structure/sign/poster/official/random/directional/north, +/turf/open/floor/iron, +/area/station/hallway/primary/port) "mQe" = ( /obj/structure/reagent_dispensers/watertank, /turf/open/floor/plating, @@ -35736,10 +36050,18 @@ dir = 1 }, /area/station/security/prison) -"mQR" = ( -/obj/machinery/pdapainter/supply, -/turf/open/floor/carpet/red, -/area/station/command/heads_quarters/qm) +"mRc" = ( +/obj/structure/table, +/obj/machinery/button/door{ + id = "xenobio1"; + name = "Xenobio Pen 1 Blast Doors"; + pixel_y = 1; + req_access = list("xenobiology") + }, +/obj/structure/window/reinforced/spawner/directional/west, +/obj/structure/window/reinforced/spawner/directional/north, +/turf/open/floor/iron, +/area/station/science/xenobiology) "mRg" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -35852,6 +36174,30 @@ /obj/effect/mapping_helpers/burnt_floor, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) +"mSI" = ( +/obj/machinery/turretid{ + control_area = "/area/station/ai_monitored/turret_protected/ai_upload"; + icon_state = "control_stun"; + name = "AI Upload Turret Control"; + pixel_y = 28 + }, +/obj/item/radio/intercom/directional/north{ + broadcasting = 1; + frequency = 1447; + name = "Private Channel"; + pixel_x = -26 + }, +/obj/effect/landmark/start/cyborg, +/obj/machinery/light/small/directional/west, +/obj/machinery/computer/security/telescreen/aiupload/directional/west, +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/obj/machinery/power/apc/auto_name/directional/south, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/ai_upload_foyer) "mSM" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -36026,12 +36372,6 @@ /obj/structure/cable, /turf/open/floor/wood, /area/station/service/bar/backroom) -"mWd" = ( -/obj/structure/railing{ - dir = 4 - }, -/turf/open/space/basic, -/area/space) "mWA" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -36067,15 +36407,6 @@ /obj/structure/window/spawner/directional/west, /turf/open/floor/iron/dark, /area/station/medical/storage) -"mWE" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment, -/obj/effect/spawner/random/structure/steam_vent, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) "mWU" = ( /turf/open/floor/iron, /area/station/maintenance/space_hut) @@ -36162,25 +36493,19 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/port/fore) -"mXX" = ( -/obj/structure/table/reinforced, -/obj/item/paper_bin{ - pixel_x = 1; - pixel_y = 9 - }, -/obj/item/pen{ - pixel_x = 1; - pixel_y = 9 - }, -/obj/item/book/manual/wiki/security_space_law, -/obj/machinery/camera/directional/south{ - c_tag = "Security Post - Cargo" - }, -/obj/effect/turf_decal/tile/red/anticorner/contrasted{ - dir = 4 +"mXO" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/obj/machinery/door/poddoor/preopen{ + id = "qmroom" }, -/turf/open/floor/iron, -/area/station/security/checkpoint/supply) +/turf/open/floor/plating, +/area/station/command/heads_quarters/qm) +"mYb" = ( +/obj/structure/chair, +/obj/machinery/computer/security/telescreen/interrogation/directional/west, +/turf/open/floor/iron/grimy, +/area/station/security/interrogation) "mYq" = ( /obj/effect/turf_decal/plaque{ icon_state = "L8" @@ -36253,16 +36578,6 @@ /obj/machinery/light/small/directional/east, /turf/open/floor/wood/large, /area/station/service/theater) -"mZy" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) "mZz" = ( /obj/machinery/light/directional/west, /obj/structure/table, @@ -36358,6 +36673,18 @@ }, /turf/open/floor/plating, /area/station/maintenance/central) +"naD" = ( +/obj/structure/table, +/obj/machinery/button/door{ + id = "xenobio6"; + name = "Xenobio Pen 6 Blast Doors"; + pixel_y = 1; + req_access = list("xenobiology") + }, +/obj/structure/window/reinforced/spawner/directional/east, +/obj/structure/window/reinforced/spawner/directional/north, +/turf/open/floor/iron, +/area/station/science/xenobiology) "naN" = ( /obj/machinery/button/door/directional/west{ id = "transitlockdown"; @@ -36374,6 +36701,12 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/ce) +"nbd" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/cargo/warehouse) "nbJ" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -36670,30 +37003,6 @@ /obj/structure/cable, /turf/open/floor/iron/white, /area/station/security/prison) -"ngY" = ( -/obj/structure/table, -/obj/item/stack/sheet/iron/fifty, -/obj/item/stack/sheet/iron/fifty, -/obj/item/stack/sheet/iron/fifty, -/obj/item/stack/sheet/glass/fifty, -/obj/item/stack/sheet/glass/fifty, -/obj/item/stack/sheet/glass/fifty, -/obj/item/crowbar, -/obj/item/grenade/chem_grenade/smart_metal_foam, -/obj/item/grenade/chem_grenade/smart_metal_foam, -/obj/effect/turf_decal/bot{ - dir = 1 - }, -/obj/item/stock_parts/cell/emproof{ - pixel_x = -6; - pixel_y = 2 - }, -/obj/item/stock_parts/cell/emproof{ - pixel_x = 4; - pixel_y = 6 - }, -/turf/open/floor/iron, -/area/station/engineering/main) "nhh" = ( /obj/structure/table/wood, /obj/item/gavelblock, @@ -36712,17 +37021,6 @@ }, /turf/open/floor/iron/white, /area/station/command/heads_quarters/rd) -"nht" = ( -/obj/machinery/disposal/bin, -/obj/machinery/firealarm/directional/west, -/obj/structure/disposalpipe/trunk{ - dir = 4 - }, -/obj/effect/turf_decal/tile/brown/anticorner/contrasted{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/cargo/sorting) "nhP" = ( /turf/open/floor/circuit/green, /area/station/ai_monitored/turret_protected/ai_upload) @@ -36731,6 +37029,13 @@ /obj/structure/sign/poster/official/random/directional/east, /turf/open/floor/plating, /area/station/commons/toilet/auxiliary) +"nhU" = ( +/obj/machinery/status_display/ai/directional/north, +/obj/machinery/porta_turret/ai, +/obj/machinery/computer/security/telescreen/research/directional/west, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/aisat_interior) "nib" = ( /obj/effect/turf_decal/trimline/red/filled/line{ dir = 4 @@ -37000,17 +37305,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/closed/wall/r_wall, /area/station/maintenance/disposal/incinerator) -"nnh" = ( -/obj/machinery/light_switch/directional/south, -/obj/structure/table/wood, -/obj/item/razor{ - pixel_x = -4; - pixel_y = 2 - }, -/obj/item/clothing/mask/cigarette/cigar, -/obj/item/reagent_containers/cup/glass/flask/gold, -/turf/open/floor/carpet, -/area/station/command/heads_quarters/captain/private) "nnl" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /obj/structure/disposalpipe/segment{ @@ -37246,11 +37540,6 @@ }, /turf/open/floor/iron/dark, /area/station/service/chapel) -"nre" = ( -/obj/structure/disposalpipe/segment, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/wood, -/area/station/command/heads_quarters/qm) "nrm" = ( /obj/effect/turf_decal/stripes/white/line{ dir = 1 @@ -37270,6 +37559,23 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/engine, /area/station/engineering/supermatter/room) +"nrB" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/obj/item/kirbyplants/random, +/obj/structure/railing{ + dir = 9 + }, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 9 + }, +/turf/open/floor/iron, +/area/station/cargo/storage) +"nrM" = ( +/obj/effect/turf_decal/siding/wood, +/obj/structure/cable, +/turf/open/floor/wood, +/area/station/service/cafeteria) "nrV" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden, /turf/open/floor/iron/dark, @@ -37304,6 +37610,11 @@ }, /turf/open/floor/iron, /area/station/command/gateway) +"nsh" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/cable, +/turf/open/floor/catwalk_floor/iron, +/area/station/cargo/storage) "nsk" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -37374,6 +37685,16 @@ }, /turf/open/floor/iron, /area/station/security/execution/transfer) +"nsT" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) "nsZ" = ( /obj/structure/disposalpipe/segment{ dir = 5 @@ -37417,6 +37738,26 @@ /obj/machinery/duct, /turf/open/floor/iron/white, /area/station/medical/storage) +"ntm" = ( +/obj/machinery/door/airlock/maintenance{ + name = "Disposal Access" + }, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 8 + }, +/obj/effect/mapping_helpers/airlock/access/any/supply/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 8 + }, +/obj/effect/mapping_helpers/airlock/access/any/supply/maintenance, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/disposal) "ntA" = ( /obj/machinery/door/airlock/external, /obj/effect/mapping_helpers/airlock/cyclelink_helper{ @@ -37493,6 +37834,24 @@ }, /turf/open/floor/iron/white, /area/station/medical/office) +"nut" = ( +/obj/structure/cable, +/obj/effect/turf_decal/bot_white, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/iron, +/area/station/cargo/storage) +"nux" = ( +/obj/structure/table, +/obj/machinery/button/door{ + id = "xenobio7"; + name = "Xenobio Pen 7 Blast Doors"; + pixel_y = 4; + req_access = list("xenobiology") + }, +/obj/structure/window/reinforced/spawner/directional/south, +/obj/structure/window/reinforced/spawner/directional/west, +/turf/open/floor/iron, +/area/station/science/xenobiology) "nuB" = ( /obj/structure/secure_safe/directional/south, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ @@ -37526,13 +37885,6 @@ /obj/structure/cable, /turf/open/floor/wood, /area/station/command/corporate_showroom) -"nvg" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/landmark/start/cargo_technician, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/station/cargo/warehouse) "nvn" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -37569,11 +37921,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/commons/dorms) -"nwi" = ( -/obj/machinery/space_heater, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) "nwl" = ( /obj/machinery/door/window/right/directional/north{ name = "Medical Deliveries"; @@ -37585,6 +37932,17 @@ /obj/structure/window/spawner/directional/east, /turf/open/floor/iron/dark, /area/station/medical/storage) +"nwm" = ( +/obj/structure/chair/comfy/brown{ + dir = 8 + }, +/obj/effect/landmark/start/quartermaster, +/obj/item/binoculars, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/turf/open/floor/wood/large, +/area/station/command/heads_quarters/qm) "nwq" = ( /obj/structure/table, /obj/machinery/firealarm/directional/south, @@ -37603,18 +37961,6 @@ /obj/machinery/atmospherics/pipe/smart/simple/cyan/visible/layer5, /turf/closed/wall, /area/station/engineering/atmos/pumproom) -"nwL" = ( -/obj/machinery/computer/upload/ai, -/obj/machinery/door/window/right/directional/south{ - name = "Upload Console Window"; - req_access = list("ai_upload"); - layer = 3.1 - }, -/obj/structure/window/reinforced/spawner/directional/west, -/obj/structure/window/reinforced/spawner/directional/east, -/obj/structure/window/reinforced/spawner/directional/north, -/turf/open/floor/iron/dark, -/area/station/ai_monitored/turret_protected/ai_upload) "nwT" = ( /obj/structure/disposalpipe/sorting/mail/flip{ dir = 8 @@ -37679,6 +38025,12 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/port) +"nxG" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/cargo/storage) "nxH" = ( /obj/machinery/door/airlock{ name = "Bar" @@ -37706,6 +38058,18 @@ }, /turf/open/floor/iron/dark, /area/station/security/prison/safe) +"nyb" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/brown{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central) "nyf" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -37713,31 +38077,6 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/security/prison/work) -"nyk" = ( -/obj/structure/table, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/item/pen/red{ - pixel_x = 8; - pixel_y = 8 - }, -/obj/item/pen/fountain{ - pixel_x = 6 - }, -/obj/item/pen/blue{ - pixel_x = -5; - pixel_y = -3 - }, -/obj/item/storage/medkit/regular{ - pixel_x = -9; - pixel_y = 10 - }, -/obj/effect/turf_decal/tile/brown/half/contrasted{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/cargo/storage) "nyy" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -37774,17 +38113,6 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/hallway/primary/central) -"nzg" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/door/airlock/mining{ - name = "Drone Bay" - }, -/obj/structure/cable, -/obj/effect/mapping_helpers/airlock/access/any/supply/maintenance, -/obj/effect/landmark/navigate_destination, -/turf/open/floor/plating, -/area/station/cargo/drone_bay) "nzo" = ( /obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ dir = 4 @@ -37940,14 +38268,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden, /turf/open/floor/iron/white, /area/station/medical/virology) -"nBI" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/spawner/random/structure/closet_empty/crate, -/obj/effect/turf_decal/bot, -/obj/item/electronics/apc, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron, -/area/station/cargo/warehouse) "nCa" = ( /obj/machinery/meter/layer2, /obj/machinery/atmospherics/pipe/smart/manifold/purple/visible/layer2{ @@ -38060,6 +38380,23 @@ }, /turf/open/floor/iron/dark, /area/station/science/ordnance/storage) +"nDD" = ( +/obj/structure/table, +/obj/machinery/button/door{ + id = "xenobio5"; + name = "Xenobio Pen 5 Blast Doors"; + pixel_y = 4; + req_access = list("xenobiology") + }, +/obj/structure/window/reinforced/spawner/directional/north, +/obj/structure/window/reinforced/spawner/directional/east, +/obj/structure/window/reinforced/spawner/directional/south, +/turf/open/floor/iron, +/area/station/science/xenobiology) +"nDG" = ( +/obj/item/radio/intercom/directional/south, +/turf/closed/wall, +/area/station/cargo/lobby) "nDO" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -38074,11 +38411,6 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/entry) -"nDS" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/wood, -/area/station/command/heads_quarters/qm) "nDT" = ( /obj/structure/disposalpipe/segment, /obj/effect/turf_decal/stripes/line{ @@ -38273,6 +38605,17 @@ /obj/effect/turf_decal/siding/purple/corner, /turf/open/floor/iron/white, /area/station/science/cytology) +"nIa" = ( +/obj/machinery/computer/upload/ai, +/obj/machinery/door/window/right/directional/south{ + name = "Upload Console Window"; + req_access = list("ai_upload") + }, +/obj/structure/window/reinforced/spawner/directional/west, +/obj/structure/window/reinforced/spawner/directional/east, +/obj/structure/window/reinforced/spawner/directional/north, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/ai_upload) "nIj" = ( /obj/structure/easel, /turf/open/floor/plating, @@ -38297,15 +38640,6 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/command) -"nJn" = ( -/obj/machinery/chem_dispenser{ - layer = 2.7 - }, -/obj/effect/turf_decal/tile/yellow/half/contrasted{ - dir = 4 - }, -/turf/open/floor/iron/white, -/area/station/medical/pharmacy) "nJo" = ( /obj/machinery/smartfridge/organ, /obj/machinery/door/poddoor/shutters/preopen{ @@ -38316,10 +38650,6 @@ /obj/machinery/door/firedoor, /turf/open/floor/iron/dark, /area/station/medical/treatment_center) -"nJr" = ( -/obj/effect/spawner/random/medical/two_percent_xeno_egg_spawner, -/turf/open/floor/engine, -/area/station/science/xenobiology) "nJu" = ( /obj/structure/closet/secure_closet/security/sec, /obj/effect/turf_decal/tile/red/half/contrasted{ @@ -38327,23 +38657,6 @@ }, /turf/open/floor/iron/dark, /area/station/security/lockers) -"nJA" = ( -/obj/machinery/door/airlock/research/glass/incinerator/ordmix_interior, -/obj/effect/mapping_helpers/airlock/locked, -/obj/machinery/airlock_controller/incinerator_ordmix{ - pixel_x = -24 - }, -/obj/machinery/button/ignition/incinerator/ordmix{ - pixel_x = 24; - pixel_y = -6 - }, -/obj/machinery/button/door/incinerator_vent_ordmix{ - pixel_x = 24; - pixel_y = 8 - }, -/obj/effect/mapping_helpers/airlock/access/all/science/ordnance, -/turf/open/floor/engine, -/area/station/science/ordnance) "nJG" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -38355,6 +38668,19 @@ /obj/effect/turf_decal/loading_area/white, /turf/open/floor/iron/white, /area/station/science/robotics/lab) +"nJJ" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/structure/sign/poster/official/random/directional/north, +/turf/open/floor/iron, +/area/station/hallway/primary/port) "nJL" = ( /obj/effect/turf_decal/tile/neutral/half/contrasted, /obj/machinery/atmospherics/components/tank/air, @@ -38396,6 +38722,20 @@ }, /turf/open/space/basic, /area/space) +"nKu" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/obj/item/reagent_containers/cup/glass/waterbottle{ + pixel_y = 48; + pixel_x = 9 + }, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/cargo/sorting) "nKE" = ( /obj/effect/turf_decal/trimline/blue/filled/line, /turf/open/floor/iron/white, @@ -38449,6 +38789,13 @@ /obj/machinery/airalarm/directional/south, /turf/open/floor/wood, /area/station/service/library) +"nLx" = ( +/obj/structure/cable, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/cargo/sorting) "nLz" = ( /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, @@ -38460,10 +38807,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/port) -"nLZ" = ( -/obj/item/toy/beach_ball/branded, -/turf/open/space/basic, -/area/space) "nMf" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -38525,16 +38868,6 @@ /obj/structure/flora/bush/stalky/style_random, /turf/open/floor/grass, /area/station/science/research) -"nNk" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/tile/brown{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/station/cargo/miningoffice) "nNo" = ( /obj/machinery/biogenerator, /obj/effect/decal/cleanable/dirt, @@ -38552,6 +38885,13 @@ /obj/effect/turf_decal/tile/neutral, /turf/open/floor/iron, /area/station/hallway/secondary/command) +"nNB" = ( +/obj/effect/turf_decal/bot_white, +/obj/effect/turf_decal/arrows/red{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/cargo/warehouse) "nNH" = ( /obj/structure/chair/comfy/black{ dir = 4 @@ -38692,17 +39032,13 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/security/prison/garden) -"nQw" = ( -/obj/effect/turf_decal/trimline/brown/filled/line{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment{ - dir = 4 +"nPN" = ( +/obj/effect/turf_decal/tile/brown{ + dir = 8 }, +/obj/effect/turf_decal/tile/neutral, /turf/open/floor/iron, -/area/station/hallway/primary/port) +/area/station/hallway/primary/central) "nQz" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/spawner/random/trash/janitor_supplies, @@ -38740,6 +39076,21 @@ /obj/machinery/light/no_nightlight/directional/east, /turf/open/floor/iron/dark/corner, /area/station/engineering/atmos/pumproom) +"nQR" = ( +/obj/machinery/conveyor{ + dir = 1; + id = "packageSort2" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/landmark/start/assistant, +/obj/machinery/door/window/right/directional/east{ + name = "Crate Security Door"; + req_access = list("shipping") + }, +/turf/open/floor/plating, +/area/station/cargo/sorting) "nQX" = ( /turf/open/floor/iron/white, /area/station/science/robotics/lab) @@ -38787,6 +39138,14 @@ /obj/structure/window/reinforced/spawner/directional/west, /turf/open/floor/wood, /area/station/command/heads_quarters/captain/private) +"nRQ" = ( +/obj/machinery/light/directional/south, +/obj/effect/turf_decal/delivery, +/obj/structure/table, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/computer/security/telescreen/ordnance/directional/south, +/turf/open/floor/iron/dark, +/area/station/science/ordnance/testlab) "nRU" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -38804,6 +39163,11 @@ "nSe" = ( /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) +"nSn" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/neutral, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/command/nuke_storage) "nSs" = ( /obj/structure/showcase/cyborg/old{ pixel_y = 20 @@ -38860,19 +39224,6 @@ /obj/effect/turf_decal/trimline/dark_red/filled/line, /turf/open/floor/iron, /area/station/security/warden) -"nTP" = ( -/obj/machinery/door/airlock/maintenance{ - name = "Brig Maintenance" - }, -/obj/structure/disposalpipe/segment, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/mapping_helpers/airlock/unres{ - dir = 1 - }, -/obj/effect/mapping_helpers/airlock/access/any/security/maintenance, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) "nUp" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /turf/open/floor/iron, @@ -38974,16 +39325,17 @@ /obj/effect/turf_decal/trimline/blue/filled/warning, /turf/open/floor/iron/white, /area/station/medical/medbay/central) -"nWF" = ( -/obj/structure/railing{ - dir = 8 - }, -/turf/open/space/basic, -/area/space) "nWS" = ( /obj/structure/window/reinforced/spawner/directional/west, /turf/open/space, /area/space/nearstation) +"nXb" = ( +/obj/machinery/light/small/directional/west, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/obj/structure/sign/poster/official/random/directional/west, +/turf/open/floor/iron, +/area/station/commons/toilet/auxiliary) "nXm" = ( /obj/structure/cable, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ @@ -39133,24 +39485,10 @@ /obj/machinery/bookbinder, /turf/open/floor/wood, /area/station/service/library) -"nZL" = ( -/obj/machinery/atmospherics/components/binary/dp_vent_pump/high_volume/incinerator_ordmix{ - dir = 8 - }, -/turf/open/floor/engine, -/area/station/science/ordnance) -"nZQ" = ( -/obj/machinery/airalarm/directional/north, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/computer/cargo{ - dir = 8 - }, -/obj/effect/turf_decal/tile/brown/half/contrasted{ - dir = 8 - }, +"oac" = ( +/obj/structure/cable, /turf/open/floor/iron, -/area/station/cargo/sorting) +/area/station/cargo/lobby) "oae" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /turf/open/floor/iron, @@ -39243,32 +39581,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/science/research) -"oaC" = ( -/obj/item/stack/sheet/iron/fifty, -/obj/item/stack/rods/fifty, -/obj/item/stack/sheet/glass/fifty, -/obj/item/electronics/airlock, -/obj/item/electronics/airlock, -/obj/item/stock_parts/cell/high, -/obj/item/stack/sheet/mineral/plasma{ - amount = 30 - }, -/obj/item/gps, -/obj/structure/closet/crate/engineering, -/turf/open/floor/plating, -/area/station/engineering/main) -"obb" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/port) "obk" = ( /obj/item/target/alien, /turf/open/floor/plating, @@ -39343,14 +39655,6 @@ /obj/structure/window/reinforced/spawner/directional/east, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/rd) -"obV" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron, -/area/station/hallway/secondary/exit/departure_lounge) "ocg" = ( /obj/structure/extinguisher_cabinet/directional/south, /obj/structure/cable, @@ -39369,12 +39673,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/security/office) -"ocn" = ( -/obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/north, -/obj/machinery/light/directional/north, -/turf/open/floor/iron, -/area/station/cargo/sorting) "ocB" = ( /obj/structure/table/wood, /obj/machinery/microwave{ @@ -39440,6 +39738,17 @@ /obj/effect/turf_decal/tile/yellow/half/contrasted, /turf/open/floor/iron/white, /area/station/medical/pharmacy) +"ocS" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/siding/thinplating_new{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/cargo/storage) "odh" = ( /obj/effect/turf_decal/trimline/red/filled/line{ dir = 4 @@ -39477,12 +39786,6 @@ /obj/effect/mapping_helpers/airlock/access/all/service/hydroponics, /turf/open/floor/iron, /area/station/service/hydroponics) -"oet" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ - dir = 1 - }, -/turf/open/floor/engine/vacuum, -/area/station/science/ordnance) "oew" = ( /turf/open/floor/iron, /area/station/commons/fitness/recreation) @@ -39685,6 +39988,46 @@ }, /turf/open/floor/engine/plasma, /area/station/engineering/atmos) +"ojz" = ( +/obj/machinery/door/airlock/public/glass{ + name = "Space Bridge Access" + }, +/obj/machinery/button/door/directional/north{ + id = "supplybridge"; + name = "Shuttle Bay Space Bridge Control" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 8 + }, +/obj/effect/mapping_helpers/airlock/access/any/supply/maintenance, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"ojW" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/bot_white, +/obj/effect/turf_decal/arrows/red{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/cargo/warehouse) +"okj" = ( +/obj/structure/cable, +/obj/machinery/camera/motion/directional/south{ + c_tag = "Vault"; + network = list("vault") + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/command/nuke_storage) "okP" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -39775,12 +40118,26 @@ /obj/structure/sign/poster/random/directional/south, /turf/open/floor/plating, /area/station/hallway/secondary/service) +"omd" = ( +/obj/structure/table, +/obj/machinery/cell_charger, +/obj/item/stock_parts/power_store/cell/high, +/obj/item/stock_parts/power_store/cell/high, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/ai_monitored/command/storage/eva) "ome" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/ai_upload) +"omf" = ( +/obj/structure/railing{ + dir = 4 + }, +/turf/open/space/basic, +/area/space/nearstation) "omm" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -39802,6 +40159,11 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/aisat/foyer) +"omV" = ( +/obj/effect/spawner/random/structure/grille, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) "onf" = ( /obj/structure/cable, /obj/machinery/power/apc/auto_name/directional/south, @@ -39899,6 +40261,11 @@ /obj/structure/table, /turf/open/floor/iron/dark, /area/station/security/office) +"ooM" = ( +/obj/structure/table/wood, +/obj/item/cigarette/pipe, +/turf/open/floor/wood, +/area/station/commons/lounge) "ooP" = ( /obj/structure/closet/emcloset, /obj/effect/turf_decal/tile/neutral/fourcorners, @@ -39996,22 +40363,6 @@ /obj/machinery/atmospherics/pipe/smart/simple/green/visible, /turf/open/floor/plating, /area/station/engineering/atmos) -"orh" = ( -/obj/structure/table, -/obj/item/stack/package_wrap{ - pixel_x = 2; - pixel_y = -3 - }, -/obj/item/stack/package_wrap{ - pixel_x = -3; - pixel_y = 5 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/turf_decal/tile/brown/half/contrasted, -/turf/open/floor/iron, -/area/station/cargo/sorting) "orp" = ( /obj/effect/turf_decal/tile/neutral, /obj/machinery/light/small/directional/east, @@ -40169,8 +40520,13 @@ /area/station/science/lab) "otG" = ( /obj/item/radio/intercom/directional/east, -/obj/structure/window/spawner/directional/north, -/turf/open/floor/grass, +/obj/effect/turf_decal/siding/white{ + dir = 5 + }, +/obj/structure/railing{ + dir = 4 + }, +/turf/open/water, /area/station/service/hydroponics/garden) "otI" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -40189,23 +40545,17 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/security/prison/work) -"ouc" = ( -/obj/structure/closet/crate, -/obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/west, -/obj/item/stack/cable_coil{ - pixel_x = 3; - pixel_y = -7 +"otQ" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 }, -/obj/item/stock_parts/cell/high, -/obj/machinery/light_switch/directional/north, -/obj/effect/spawner/random/engineering/flashlight, -/obj/effect/spawner/random/engineering/flashlight, -/obj/effect/turf_decal/tile/brown/half/contrasted{ +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ dir = 4 }, -/turf/open/floor/iron, -/area/station/cargo/miningoffice) +/turf/open/floor/plating, +/area/station/maintenance/port/fore) "oue" = ( /obj/effect/turf_decal/stripes/line{ dir = 9 @@ -40249,6 +40599,21 @@ /obj/item/reagent_containers/cup/glass/bottle/goldschlager, /turf/open/space/basic, /area/space/nearstation) +"ouu" = ( +/obj/item/radio/intercom/directional/north, +/obj/machinery/camera/directional/north{ + c_tag = "Cargo Bay - Fore" + }, +/obj/machinery/light/directional/north, +/obj/effect/turf_decal/box/red, +/obj/effect/turf_decal/trimline/brown/filled/corner{ + dir = 4 + }, +/obj/structure/railing{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/cargo/storage) "ouM" = ( /obj/structure/sign/painting/library{ pixel_y = -32 @@ -40268,37 +40633,6 @@ }, /turf/open/floor/iron, /area/station/maintenance/starboard/greater) -"ouU" = ( -/obj/machinery/light/directional/east, -/obj/structure/table, -/obj/machinery/recharger{ - pixel_x = 6; - pixel_y = 4 - }, -/obj/item/paper_bin{ - pixel_x = -11; - pixel_y = 7 - }, -/obj/item/pen{ - pixel_x = -11; - pixel_y = 7 - }, -/obj/item/hand_labeler{ - pixel_x = -10; - pixel_y = -6 - }, -/obj/effect/turf_decal/trimline/dark_red/filled/line{ - dir = 4 - }, -/obj/machinery/computer/security/telescreen{ - desc = "Used for watching Prison Wing holding areas."; - dir = 8; - name = "Prison Monitor"; - network = list("prison"); - pixel_x = 30 - }, -/turf/open/floor/iron, -/area/station/security/warden) "ouX" = ( /obj/effect/turf_decal/box, /obj/machinery/atmospherics/components/unary/portables_connector/visible{ @@ -40461,6 +40795,16 @@ /obj/machinery/duct, /turf/open/floor/plating, /area/station/maintenance/port/aft) +"oxX" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/effect/turf_decal/siding/wood, +/obj/machinery/modular_computer/preset/id{ + dir = 1 + }, +/turf/open/floor/wood/large, +/area/station/command/heads_quarters/qm) "oyj" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, @@ -40641,6 +40985,7 @@ name = "Kentucky"; real_name = "Kentucky" }, +/obj/structure/flora/grass/jungle/b/style_random, /turf/open/floor/grass, /area/station/service/hydroponics/garden) "oCR" = ( @@ -40671,10 +41016,30 @@ /obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, /turf/open/floor/plating, /area/station/maintenance/starboard/greater) -"oDp" = ( -/obj/machinery/light/small/directional/south, -/turf/open/floor/plating, -/area/station/cargo/storage) +"oDH" = ( +/obj/structure/table, +/obj/item/stack/sheet/iron/fifty, +/obj/item/stack/sheet/iron/fifty, +/obj/item/stack/sheet/iron/fifty, +/obj/item/stack/sheet/glass/fifty, +/obj/item/stack/sheet/glass/fifty, +/obj/item/stack/sheet/glass/fifty, +/obj/item/crowbar, +/obj/item/grenade/chem_grenade/smart_metal_foam, +/obj/item/grenade/chem_grenade/smart_metal_foam, +/obj/effect/turf_decal/bot{ + dir = 1 + }, +/obj/item/stock_parts/power_store/cell/emproof{ + pixel_x = -6; + pixel_y = 2 + }, +/obj/item/stock_parts/power_store/cell/emproof{ + pixel_x = 4; + pixel_y = 6 + }, +/turf/open/floor/iron, +/area/station/engineering/main) "oDJ" = ( /obj/structure/sign/warning/vacuum/external, /turf/closed/wall, @@ -40900,6 +41265,31 @@ /obj/machinery/atmospherics/pipe/smart/simple/orange/visible, /turf/open/space/basic, /area/space/nearstation) +"oGH" = ( +/obj/machinery/light/directional/east, +/obj/structure/table, +/obj/machinery/recharger{ + pixel_x = 6; + pixel_y = 4 + }, +/obj/item/paper_bin{ + pixel_x = -11; + pixel_y = 7 + }, +/obj/item/pen{ + pixel_x = -11; + pixel_y = 7 + }, +/obj/item/hand_labeler{ + pixel_x = -10; + pixel_y = -6 + }, +/obj/effect/turf_decal/trimline/dark_red/filled/line{ + dir = 4 + }, +/obj/machinery/computer/security/telescreen/prison/directional/east, +/turf/open/floor/iron, +/area/station/security/warden) "oGK" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -41022,15 +41412,6 @@ }, /turf/open/floor/iron/dark, /area/station/engineering/atmos) -"oIO" = ( -/obj/machinery/computer/security/telescreen/interrogation{ - dir = 8; - pixel_x = 30 - }, -/obj/effect/turf_decal/trimline/red/filled/corner, -/obj/machinery/light/directional/east, -/turf/open/floor/iron, -/area/station/security/brig) "oIW" = ( /obj/structure/sign/warning/vacuum/directional/east, /obj/effect/turf_decal/delivery, @@ -41076,6 +41457,16 @@ /obj/structure/window/reinforced/spawner/directional/west, /turf/open/floor/plating, /area/station/maintenance/department/engine) +"oJK" = ( +/obj/machinery/atmospherics/pipe/smart/simple/dark/visible, +/obj/effect/turf_decal/siding/purple{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/firealarm/directional/east, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/science/ordnance) "oJL" = ( /obj/machinery/computer/atmos_control/nitrogen_tank{ dir = 1 @@ -41115,20 +41506,6 @@ }, /turf/open/floor/iron, /area/station/engineering/main) -"oKy" = ( -/obj/effect/turf_decal/trimline/brown/filled/line{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/port) "oKA" = ( /obj/machinery/door/airlock/hatch{ name = "Telecomms Control Room" @@ -41209,6 +41586,23 @@ }, /turf/open/floor/plating, /area/station/command/heads_quarters/hos) +"oMh" = ( +/obj/structure/filingcabinet, +/obj/machinery/computer/security/telescreen/minisat/directional/east, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/security/checkpoint/engineering) +"oMx" = ( +/obj/effect/mapping_helpers/airlock/access/any/supply/bit_den, +/obj/machinery/door/airlock/maintenance{ + name = "Mining Dock Maintenance" + }, +/obj/effect/mapping_helpers/airlock/access/any/supply/mining, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/cargo/miningoffice) "oMA" = ( /turf/closed/wall/r_wall, /area/station/science/cytology) @@ -41380,21 +41774,6 @@ /obj/structure/grille, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) -"oQc" = ( -/obj/machinery/computer/security/telescreen{ - desc = "Used for the Auxiliary Mining Base."; - dir = 1; - name = "Auxiliary Base Monitor"; - network = list("auxbase"); - pixel_y = -28 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/obj/effect/turf_decal/tile/yellow/half/contrasted, -/turf/open/floor/iron, -/area/station/construction/mining/aux_base) "oQg" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -41407,11 +41786,6 @@ /obj/machinery/light/small/directional/east, /turf/open/floor/iron/dark/textured_large, /area/station/science/cytology) -"oQx" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/suit_storage_unit/industrial/loader, -/turf/open/floor/iron, -/area/station/cargo/warehouse) "oQJ" = ( /obj/structure/table, /obj/item/storage/box/gloves{ @@ -41426,12 +41800,6 @@ /obj/structure/window/reinforced/spawner/directional/east, /turf/open/floor/iron, /area/station/science/xenobiology) -"oQS" = ( -/obj/machinery/cell_charger, -/obj/item/stock_parts/cell/crap, -/obj/structure/table/wood, -/turf/open/floor/carpet, -/area/station/command/corporate_showroom) "oQZ" = ( /obj/machinery/navbeacon{ codes_txt = "patrol;next_patrol=1.5-Fore-Central"; @@ -41468,6 +41836,26 @@ }, /turf/open/floor/iron/white, /area/station/science/ordnance/storage) +"oRO" = ( +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/obj/effect/turf_decal/tile/brown/opposingcorners, +/turf/open/floor/iron, +/area/station/cargo/storage) +"oRR" = ( +/obj/machinery/camera/directional/east{ + c_tag = "Outer Vault"; + name = "storage wing camera"; + network = list("ss13","vault") + }, +/obj/structure/reagent_dispensers/watertank, +/obj/effect/turf_decal/trimline/brown/filled/corner, +/obj/structure/window/spawner/directional/south, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/construction/storage_wing) "oRV" = ( /obj/structure/table, /obj/machinery/newscaster/directional/east, @@ -41531,6 +41919,16 @@ }, /turf/open/floor/iron, /area/station/engineering/atmos) +"oTw" = ( +/obj/machinery/door/airlock/mining{ + name = "Deliveries" + }, +/obj/machinery/door/firedoor, +/obj/structure/cable, +/obj/effect/mapping_helpers/airlock/access/any/supply/shipping, +/obj/effect/turf_decal/tile/brown/opposingcorners, +/turf/open/floor/iron, +/area/station/cargo/sorting) "oTD" = ( /obj/structure/frame/computer, /turf/open/floor/plating/airless, @@ -41567,13 +41965,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/science/server) -"oUx" = ( -/obj/structure/reagent_dispensers/wall/peppertank/directional/east, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/landmark/start/depsec/supply, -/turf/open/floor/iron, -/area/station/security/checkpoint/supply) "oUy" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/stripes/line, @@ -41669,6 +42060,14 @@ "oWk" = ( /turf/closed/wall/r_wall, /area/station/maintenance/starboard/aft) +"oWm" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/computer/security/telescreen/engine/directional/east, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/station/command/heads_quarters/ce) "oWF" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, @@ -41810,15 +42209,6 @@ /obj/item/pillow/random, /turf/open/floor/carpet, /area/station/commons/dorms) -"oYz" = ( -/obj/machinery/camera/directional/south{ - c_tag = "Cargo Bay - Mailroom" - }, -/obj/effect/turf_decal/trimline/brown/filled/shrink_ccw, -/obj/effect/turf_decal/trimline/white/filled/warning, -/obj/machinery/light/directional/south, -/turf/open/floor/iron, -/area/station/cargo/sorting) "oYM" = ( /obj/structure/reagent_dispensers/fueltank, /obj/effect/turf_decal/tile/yellow/half/contrasted{ @@ -41905,6 +42295,28 @@ "paD" = ( /turf/closed/wall, /area/station/cargo/bitrunning/den) +"paQ" = ( +/obj/structure/window/spawner/directional/south, +/obj/machinery/computer/cargo/request{ + dir = 1 + }, +/obj/effect/turf_decal/tile/brown/fourcorners, +/obj/machinery/door/firedoor, +/turf/open/floor/iron, +/area/station/cargo/sorting) +"paU" = ( +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/access/any/supply/maintenance, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) "pbb" = ( /obj/structure/table, /obj/machinery/microwave, @@ -42301,6 +42713,15 @@ /obj/structure/cable/layer3, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/aisat_interior) +"piy" = ( +/obj/machinery/camera/directional/west{ + active_power_usage = 0; + c_tag = "Turbine Vent"; + network = list("turbine"); + use_power = 0 + }, +/turf/open/space/basic, +/area/space/nearstation) "piz" = ( /obj/structure/cable, /obj/effect/landmark/start/hangover, @@ -42312,9 +42733,6 @@ /obj/item/clothing/under/misc/assistantformal, /turf/open/floor/wood, /area/station/commons/dorms) -"piB" = ( -/turf/open/floor/iron, -/area/station/cargo/sorting) "piJ" = ( /obj/machinery/suit_storage_unit/medical, /obj/effect/turf_decal/bot_red, @@ -42391,6 +42809,13 @@ }, /turf/open/floor/iron/white, /area/station/command/heads_quarters/rd) +"pkF" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/photocopier, +/turf/open/floor/iron, +/area/station/cargo/sorting) "pkH" = ( /obj/structure/rack, /obj/item/restraints/handcuffs, @@ -42415,6 +42840,14 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/service) +"pkM" = ( +/obj/effect/turf_decal/bot_white, +/obj/effect/spawner/random/maintenance, +/obj/effect/turf_decal/arrows/red{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/cargo/storage) "pkP" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -42432,6 +42865,13 @@ /obj/effect/mapping_helpers/airlock/access/all/security/general, /turf/open/floor/plating, /area/station/security/execution/transfer) +"pkT" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) "plp" = ( /obj/machinery/camera/directional/west{ c_tag = "Xenobiology Lab - Pen #1"; @@ -42446,15 +42886,6 @@ }, /turf/open/floor/iron, /area/station/engineering/atmos) -"plJ" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/disposalpipe/sorting/mail/flip{ - dir = 1 - }, -/obj/effect/mapping_helpers/mail_sorting/supply/disposals, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) "pma" = ( /turf/closed/wall/r_wall, /area/station/maintenance/solars/port/fore) @@ -42641,16 +43072,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/science/genetics) -"ppm" = ( -/obj/structure/cable, -/obj/machinery/computer/security/telescreen/interrogation{ - name = "isolation room monitor"; - network = list("isolation"); - pixel_y = 31 - }, -/obj/machinery/light/cold/directional/north, -/turf/open/floor/iron, -/area/station/security/execution/transfer) "ppB" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/carpet, @@ -42760,16 +43181,6 @@ /obj/item/fish_feed, /turf/open/space/basic, /area/space/nearstation) -"pqJ" = ( -/obj/machinery/door/airlock/mining{ - name = "Mining Office" - }, -/obj/structure/cable, -/obj/machinery/door/firedoor, -/obj/effect/mapping_helpers/airlock/access/any/supply/bit_den, -/obj/effect/mapping_helpers/airlock/access/any/supply/mining, -/turf/open/floor/iron, -/area/station/cargo/miningoffice) "prc" = ( /obj/machinery/firealarm/directional/north, /obj/machinery/camera/directional/north{ @@ -42989,12 +43400,6 @@ /obj/effect/spawner/random/entertainment/gambling, /turf/open/floor/wood, /area/station/commons/lounge) -"puD" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/rack, -/obj/effect/spawner/random/trash/janitor_supplies, -/turf/open/floor/iron, -/area/station/cargo/warehouse) "puG" = ( /obj/machinery/status_display/ai/directional/north, /obj/effect/turf_decal/stripes/line{ @@ -43038,6 +43443,10 @@ /obj/effect/turf_decal/delivery, /turf/open/floor/iron, /area/station/security/brig) +"puW" = ( +/obj/machinery/vending/cigarette, +/turf/open/floor/iron, +/area/station/hallway/primary/port) "puZ" = ( /obj/structure/cable, /obj/effect/turf_decal/tile/neutral{ @@ -43059,28 +43468,6 @@ /obj/structure/reagent_dispensers/watertank, /turf/open/floor/iron, /area/station/commons/storage/tools) -"pvL" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/public/glass{ - name = "Port Primary Hallway" - }, -/obj/effect/turf_decal/trimline/brown/filled/line{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/port) -"pvP" = ( -/obj/effect/landmark/start/cargo_technician, -/turf/open/floor/iron, -/area/station/cargo/storage) "pvY" = ( /obj/machinery/camera/directional/north{ c_tag = "Holodeck - Fore"; @@ -43211,6 +43598,13 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/ai_monitored/aisat/exterior) +"pyR" = ( +/obj/machinery/power/apc/auto_name/directional/west, +/obj/machinery/light_switch/directional/south, +/obj/effect/mapping_helpers/burnt_floor, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/solars/port/fore) "pyU" = ( /obj/structure/table/glass, /obj/effect/turf_decal/tile/blue/fourcorners, @@ -43230,16 +43624,6 @@ }, /turf/open/floor/iron, /area/station/security/office) -"pyZ" = ( -/obj/machinery/conveyor/inverted{ - dir = 6; - id = "packageExternal" - }, -/obj/effect/turf_decal/stripes/line{ - dir = 5 - }, -/turf/open/floor/iron, -/area/station/cargo/storage) "pzu" = ( /obj/structure/chair/comfy/black{ dir = 4 @@ -43405,6 +43789,19 @@ /obj/machinery/newscaster/directional/north, /turf/open/floor/iron/dark, /area/station/medical/break_room) +"pCs" = ( +/obj/machinery/camera/directional/south{ + c_tag = "Cargo Bay - Mailroom" + }, +/obj/machinery/light/directional/south, +/obj/effect/turf_decal/trimline/brown/filled/corner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/white/corner{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/cargo/sorting) "pCt" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -43441,6 +43838,15 @@ /obj/machinery/light/directional/north, /turf/open/floor/iron/dark, /area/station/command/bridge) +"pCR" = ( +/obj/machinery/power/apc/auto_name/directional/east, +/obj/machinery/portable_atmospherics/pipe_scrubber, +/obj/effect/turf_decal/siding/purple{ + dir = 6 + }, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/science/ordnance/storage) "pDe" = ( /obj/machinery/computer/telecomms/server{ dir = 8; @@ -43494,16 +43900,6 @@ }, /turf/open/floor/iron/white, /area/station/medical/medbay/central) -"pDX" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/sign/departments/vault/directional/north{ - pixel_x = 32 - }, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, -/area/station/construction/storage_wing) "pEk" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/public/glass{ @@ -43535,16 +43931,6 @@ }, /turf/open/floor/iron/white, /area/station/science/research) -"pEA" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/spawner/random/structure/closet_empty/crate, -/obj/effect/turf_decal/bot, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment{ - dir = 9 - }, -/turf/open/floor/iron, -/area/station/cargo/warehouse) "pEB" = ( /obj/effect/landmark/start/botanist, /turf/open/floor/iron, @@ -43629,12 +44015,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/medical/medbay/central) -"pFU" = ( -/obj/machinery/netpod, -/obj/machinery/light/directional/west, -/obj/machinery/airalarm/directional/south, -/turf/open/floor/catwalk_floor/iron_dark, -/area/station/cargo/bitrunning/den) "pGn" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, @@ -43744,6 +44124,11 @@ }, /turf/open/floor/wood/large, /area/station/commons/lounge) +"pHK" = ( +/obj/structure/sign/warning/vacuum/external/directional/north, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) "pHS" = ( /obj/structure/light_construct/directional/east, /turf/open/floor/wood, @@ -43806,6 +44191,17 @@ }, /turf/open/floor/iron/white, /area/station/medical/virology) +"pJc" = ( +/obj/machinery/chem_dispenser, +/obj/machinery/button/door/directional/north{ + id = "pharmacy_shutters"; + name = "pharmacy shutters control"; + pixel_x = 24; + req_access = list("medical") + }, +/obj/effect/turf_decal/tile/yellow/fourcorners, +/turf/open/floor/iron/white, +/area/station/medical/pharmacy) "pJf" = ( /obj/effect/turf_decal/stripes/corner{ dir = 4 @@ -44036,6 +44432,18 @@ /obj/effect/mapping_helpers/airlock/access/all/service/hydroponics, /turf/open/floor/plating, /area/station/maintenance/starboard/greater) +"pNk" = ( +/obj/structure/extinguisher_cabinet/directional/north, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/port) "pNp" = ( /obj/machinery/light/small/broken/directional/west, /obj/structure/table, @@ -44043,6 +44451,11 @@ /obj/item/clothing/mask/gas/cyborg, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) +"pNC" = ( +/obj/structure/cable, +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/construction/storage_wing) "pNR" = ( /obj/machinery/airalarm/directional/east, /turf/open/floor/iron/dark, @@ -44060,20 +44473,6 @@ "pOa" = ( /turf/closed/wall, /area/station/maintenance/port) -"pOb" = ( -/obj/machinery/conveyor{ - dir = 1; - id = "packageExternal" - }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/machinery/door/window/left/directional/south{ - name = "Crate Security Door"; - req_access = list("shipping") - }, -/turf/open/floor/iron, -/area/station/cargo/storage) "pOi" = ( /obj/effect/spawner/random/trash/garbage{ spawn_scatter_radius = 1 @@ -44197,6 +44596,15 @@ /obj/effect/mapping_helpers/airlock/access/all/security/brig, /turf/open/floor/iron, /area/station/security/prison/safe) +"pQh" = ( +/obj/structure/cable, +/obj/machinery/door/airlock/external{ + name = "Solar Maintenance" + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper, +/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/turf/open/floor/plating, +/area/station/solars/port/fore) "pQj" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -44243,24 +44651,12 @@ /obj/structure/cable, /turf/open/floor/wood, /area/station/service/bar/backroom) -"pQD" = ( -/obj/effect/turf_decal/delivery, -/obj/machinery/light/directional/north, -/turf/open/floor/iron, -/area/station/cargo/lobby) "pQG" = ( /obj/machinery/porta_turret/ai{ dir = 4 }, /turf/open/floor/circuit, /area/station/ai_monitored/turret_protected/ai_upload) -"pQI" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/cargo/warehouse) "pQK" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -44326,17 +44722,12 @@ /turf/open/floor/iron, /area/station/security/execution/transfer) "pRM" = ( -/obj/machinery/disposal/bin, -/obj/machinery/camera/directional/east{ - c_tag = "Garden" - }, -/obj/structure/disposalpipe/trunk{ - dir = 8 +/obj/structure/window/spawner/directional/south, +/mob/living/basic/cow{ + name = "Betsy"; + real_name = "Betsy" }, -/obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/east, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron, +/turf/open/floor/grass, /area/station/service/hydroponics/garden) "pSa" = ( /obj/effect/turf_decal/trimline/red/filled/corner{ @@ -44371,6 +44762,13 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/space, /area/space/nearstation) +"pSY" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/power/apc/auto_name/directional/south, +/obj/structure/tank_holder/extinguisher, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/cargo/warehouse) "pTf" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -44378,6 +44776,10 @@ }, /turf/open/floor/iron/goonplaque, /area/station/hallway/primary/port) +"pTl" = ( +/obj/structure/sign/warning/electric_shock/directional/north, +/turf/open/space/basic, +/area/space/nearstation) "pTm" = ( /obj/structure/cable, /obj/effect/turf_decal/tile/red/half/contrasted{ @@ -44413,17 +44815,6 @@ "pTS" = ( /turf/closed/wall, /area/station/service/bar) -"pTT" = ( -/obj/machinery/door/airlock/maintenance{ - name = "Mining Dock Maintenance" - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/disposalpipe/segment, -/obj/effect/mapping_helpers/airlock/access/any/supply/bit_den, -/obj/effect/mapping_helpers/airlock/access/any/supply/mining, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) "pTW" = ( /obj/machinery/atmospherics/pipe/smart/simple/yellow/visible{ dir = 6 @@ -44446,6 +44837,15 @@ /obj/effect/turf_decal/bot, /turf/open/floor/iron, /area/station/maintenance/central) +"pUk" = ( +/obj/machinery/camera/directional/north, +/obj/machinery/airalarm/directional/north, +/obj/effect/spawner/random/vending/colavend, +/obj/effect/turf_decal/tile/brown/anticorner/contrasted{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/cargo/lobby) "pUl" = ( /obj/machinery/shower/directional/east, /obj/effect/decal/cleanable/dirt, @@ -44499,12 +44899,6 @@ /obj/item/radio/intercom/directional/east, /turf/open/floor/iron/grimy, /area/station/security/interrogation) -"pVi" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/light_switch/directional/north, -/obj/structure/closet/crate/preopen, -/turf/open/floor/iron, -/area/station/cargo/warehouse) "pVM" = ( /obj/machinery/light/small/directional/south, /obj/machinery/camera/directional/south{ @@ -44534,6 +44928,19 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) +"pWb" = ( +/obj/machinery/light/directional/west, +/obj/machinery/piratepad/civilian, +/obj/effect/turf_decal/bot_white, +/obj/effect/turf_decal/tile/brown{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral, +/turf/open/floor/iron, +/area/station/hallway/primary/central) "pWA" = ( /obj/machinery/navbeacon{ codes_txt = "patrol;next_patrol=2.1-Leaving-Storage"; @@ -44603,12 +45010,6 @@ }, /turf/open/floor/iron/white, /area/station/medical/virology) -"pWY" = ( -/obj/structure/disposalpipe/segment{ - dir = 5 - }, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) "pXh" = ( /obj/item/radio/intercom/directional/south, /turf/open/floor/iron/dark, @@ -44688,6 +45089,10 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/starboard) +"pYM" = ( +/obj/machinery/status_display/supply, +/turf/closed/wall, +/area/station/cargo/storage) "pZc" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -44841,6 +45246,16 @@ }, /turf/open/floor/iron/dark, /area/station/security/courtroom) +"qcD" = ( +/obj/structure/rack, +/obj/item/aicard, +/obj/item/radio/off, +/obj/effect/turf_decal/tile/blue/half/contrasted{ + dir = 1 + }, +/obj/machinery/computer/security/telescreen/minisat/directional/south, +/turf/open/floor/iron/dark, +/area/station/command/bridge) "qcP" = ( /obj/effect/landmark/blobstart, /obj/effect/mapping_helpers/burnt_floor, @@ -45049,6 +45464,15 @@ /obj/machinery/power/supermatter_crystal/engine, /turf/open/floor/engine, /area/station/engineering/supermatter) +"qgl" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/spawner/random/structure/steam_vent, +/obj/effect/mapping_helpers/broken_floor, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) "qgn" = ( /obj/structure/cable, /obj/machinery/power/apc/auto_name/directional/west, @@ -45061,17 +45485,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/department/science/xenobiology) -"qgr" = ( -/obj/machinery/door/poddoor/shutters{ - dir = 8; - id = "qm_warehouse"; - name = "Warehouse Shutters" - }, -/obj/effect/turf_decal/caution/stand_clear, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/station/cargo/warehouse) "qgu" = ( /obj/effect/mapping_helpers/burnt_floor, /turf/open/floor/plating, @@ -45282,6 +45695,18 @@ /obj/effect/mapping_helpers/airlock/access/any/command/minisat, /turf/open/floor/plating, /area/station/ai_monitored/aisat/exterior) +"qjH" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central) "qkl" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, @@ -45311,14 +45736,6 @@ }, /turf/open/floor/iron/dark, /area/station/command/bridge) -"qkD" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/wood, -/area/station/command/heads_quarters/qm) "qkJ" = ( /obj/structure/chair/office/light, /obj/structure/cable, @@ -45339,6 +45756,11 @@ }, /turf/open/floor/iron/dark, /area/station/command/bridge) +"qlz" = ( +/obj/effect/spawner/random/vending/colavend, +/obj/machinery/light/directional/north, +/turf/open/floor/iron, +/area/station/hallway/primary/port) "qlG" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 1 @@ -45358,6 +45780,12 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/ai_upload) +"qlW" = ( +/obj/structure/cable, +/obj/machinery/status_display/evac/directional/west, +/obj/machinery/light/directional/west, +/turf/open/floor/iron, +/area/station/construction/storage_wing) "qmf" = ( /obj/machinery/power/apc/auto_name/directional/east, /obj/structure/table/wood, @@ -45390,6 +45818,14 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/service) +"qmE" = ( +/obj/structure/cable, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/power/apc/auto_name/directional/south, +/turf/open/floor/plating, +/area/station/maintenance/disposal) "qmO" = ( /obj/machinery/portable_atmospherics/canister/nitrous_oxide, /turf/open/floor/iron/dark, @@ -45402,6 +45838,13 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/ai_monitored/aisat/exterior) +"qnj" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/brown/opposingcorners, +/turf/open/floor/iron, +/area/station/cargo/storage) "qno" = ( /obj/structure/table, /obj/machinery/microwave{ @@ -45444,30 +45887,6 @@ /obj/machinery/duct, /turf/open/floor/plating, /area/station/maintenance/fore) -"qnX" = ( -/obj/structure/disposalpipe/segment{ - dir = 6 - }, -/obj/effect/turf_decal/stripes/line, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) -"qoq" = ( -/obj/effect/turf_decal/siding/thinplating_new/dark, -/obj/effect/turf_decal/trimline/brown/line, -/obj/effect/turf_decal/trimline/brown/line{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/landmark/start/bitrunner, -/obj/machinery/holopad, -/turf/open/floor/iron/dark/textured_half, -/area/station/cargo/bitrunning/den) "qos" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -45511,6 +45930,13 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central) +"qoY" = ( +/obj/effect/spawner/random/maintenance, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/cargo/warehouse) "qph" = ( /obj/effect/decal/cleanable/blood/old, /obj/effect/spawner/random/medical/patient_stretcher, @@ -45542,20 +45968,36 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/carpet, /area/station/service/library) -"qqp" = ( -/obj/structure/closet/crate, -/obj/item/stock_parts/cell/high, -/obj/item/stack/cable_coil{ - pixel_x = 3; - pixel_y = -7 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 9 - }, -/obj/effect/spawner/random/engineering/flashlight, -/obj/effect/spawner/random/engineering/flashlight, +"qqr" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/stripes/line, +/obj/structure/cable, /turf/open/floor/iron, /area/station/cargo/miningoffice) +"qqs" = ( +/obj/structure/table, +/obj/item/multitool{ + pixel_x = 4; + pixel_y = 12 + }, +/obj/item/multitool{ + pixel_x = -4; + pixel_y = 8 + }, +/obj/item/stock_parts/power_store/cell/high{ + pixel_y = -4 + }, +/obj/item/stock_parts/power_store/cell/high{ + pixel_x = -4; + pixel_y = -6 + }, +/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible/layer5, +/obj/machinery/atmospherics/pipe/smart/simple/purple/visible, +/obj/item/multitool{ + pixel_y = 10 + }, +/turf/open/floor/iron/dark/textured, +/area/station/engineering/atmos) "qrg" = ( /obj/machinery/light_switch/directional/north, /turf/open/floor/circuit/green{ @@ -45586,6 +46028,12 @@ }, /turf/open/floor/engine/co2, /area/station/engineering/atmos) +"qrw" = ( +/obj/structure/bed/dogbed/renault, +/mob/living/basic/pet/fox/renault, +/obj/machinery/computer/security/telescreen/minisat/directional/south, +/turf/open/floor/carpet, +/area/station/command/heads_quarters/captain/private) "qrF" = ( /obj/machinery/computer/exodrone_control_console{ dir = 1 @@ -45722,6 +46170,12 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/ce) +"qtq" = ( +/obj/machinery/cell_charger, +/obj/item/stock_parts/power_store/cell/crap, +/obj/structure/table/wood, +/turf/open/floor/carpet, +/area/station/command/corporate_showroom) "qua" = ( /obj/machinery/atmospherics/pipe/smart/manifold/yellow/visible{ dir = 1 @@ -45755,15 +46209,11 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/security/holding_cell) -"qvl" = ( -/obj/effect/spawner/random/maintenance, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/disposalpipe/segment{ - dir = 5 - }, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) +"quT" = ( +/obj/effect/turf_decal/trimline/brown/filled/line, +/obj/machinery/light/directional/south, +/turf/open/floor/iron, +/area/station/cargo/storage) "qvJ" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -45784,6 +46234,11 @@ }, /turf/open/floor/engine, /area/station/science/xenobiology) +"qvV" = ( +/obj/effect/turf_decal/trimline/brown/filled/line, +/obj/effect/turf_decal/siding/thinplating_new, +/turf/open/floor/iron, +/area/station/cargo/storage) "qvY" = ( /obj/structure/closet/secure_closet/miner, /obj/effect/turf_decal/tile/brown/half/contrasted, @@ -45820,11 +46275,6 @@ /obj/structure/chair/stool/directional/west, /turf/open/floor/iron, /area/station/commons/dorms) -"qwM" = ( -/obj/machinery/power/smes, -/obj/structure/cable, -/turf/open/floor/plating, -/area/station/maintenance/solars/port/fore) "qwR" = ( /obj/structure/sign/directions/evac, /obj/structure/sign/directions/medical{ @@ -45892,21 +46342,6 @@ /obj/structure/window/reinforced/spawner/directional/north, /turf/open/space, /area/space/nearstation) -"qyo" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/public/glass{ - name = "Vault Storage" - }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 1 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/mapping_helpers/airlock/access/all/supply/vault, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, -/area/station/construction/storage_wing) "qyr" = ( /obj/item/kirbyplants, /obj/effect/turf_decal/trimline/blue/filled/corner{ @@ -46108,16 +46543,6 @@ }, /turf/open/floor/engine, /area/station/science/explab) -"qCa" = ( -/obj/structure/rack, -/obj/item/storage/box/shipping, -/obj/item/pushbroom, -/obj/machinery/light_switch/directional/south, -/obj/effect/turf_decal/tile/brown/anticorner/contrasted{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/cargo/sorting) "qCh" = ( /obj/effect/turf_decal/plaque{ icon_state = "L10" @@ -46137,10 +46562,21 @@ /obj/structure/window/reinforced/spawner/directional/north, /turf/open/floor/iron, /area/station/science/xenobiology) +"qCm" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) "qCv" = ( /obj/machinery/telecomms/processor/preset_two, /turf/open/floor/circuit/telecomms/mainframe, /area/station/tcommsat/server) +"qCx" = ( +/obj/effect/decal/cleanable/wrapping, +/turf/open/floor/iron, +/area/station/cargo/sorting) "qCC" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -46164,6 +46600,17 @@ /obj/effect/turf_decal/tile/blue/fourcorners, /turf/open/floor/iron/white, /area/station/medical/cryo) +"qCM" = ( +/obj/structure/cable, +/obj/machinery/door/airlock/external{ + name = "Solar Maintenance" + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 1 + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/turf/open/floor/plating, +/area/station/maintenance/solars/port/fore) "qCP" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable, @@ -46172,6 +46619,15 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/commons/locker) +"qCS" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/cargo/storage) "qCY" = ( /obj/structure/sign/directions/evac, /turf/closed/wall, @@ -46234,6 +46690,15 @@ }, /turf/open/floor/iron, /area/station/security/prison/garden) +"qDW" = ( +/obj/effect/turf_decal/siding/thinplating_new{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/cargo/storage) "qEb" = ( /obj/structure/chair/pew/right, /turf/open/floor/iron/chapel, @@ -46279,19 +46744,6 @@ /obj/effect/turf_decal/tile/bar/opposingcorners, /turf/open/floor/iron, /area/station/commons/lounge) -"qFv" = ( -/obj/machinery/door/poddoor/shutters{ - dir = 8; - id = "qm_warehouse"; - name = "Warehouse Shutters" - }, -/obj/structure/cable, -/obj/effect/turf_decal/caution/stand_clear, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/cargo/warehouse) "qFF" = ( /obj/effect/turf_decal/trimline/brown/warning{ dir = 5 @@ -46325,15 +46777,6 @@ }, /turf/open/floor/iron/dark, /area/station/security/courtroom) -"qGc" = ( -/obj/structure/table, -/obj/machinery/cell_charger, -/obj/item/stock_parts/cell/high, -/obj/effect/turf_decal/bot{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/command/gateway) "qGn" = ( /obj/structure/table, /obj/item/hfr_box/body/waste_output, @@ -46394,12 +46837,24 @@ /obj/effect/turf_decal/tile/neutral/half/contrasted, /turf/open/floor/iron, /area/station/hallway/primary/port) +"qHa" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/cargo/drone_bay) "qHh" = ( /obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ dir = 9 }, /turf/open/floor/iron, /area/station/engineering/atmos) +"qHm" = ( +/obj/machinery/pdapainter/engineering, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/computer/security/telescreen/ce/directional/south, +/turf/open/floor/iron/dark, +/area/station/command/heads_quarters/ce) "qHs" = ( /obj/structure/sign/warning/docking, /turf/closed/wall, @@ -46471,14 +46926,6 @@ /obj/effect/spawner/random/maintenance, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) -"qIK" = ( -/obj/effect/spawner/structure/window, -/obj/machinery/door/poddoor/preopen{ - id = "qmprivacy"; - name = "Privacy Shutters" - }, -/turf/open/floor/plating, -/area/station/command/heads_quarters/qm) "qIL" = ( /obj/machinery/light/small/directional/east, /obj/machinery/camera/directional/east{ @@ -46574,23 +47021,6 @@ /obj/effect/mapping_helpers/burnt_floor, /turf/open/floor/plating, /area/station/maintenance/port/aft) -"qKy" = ( -/obj/machinery/navbeacon{ - codes_txt = "delivery;dir=1"; - location = "Disposals" - }, -/obj/structure/plasticflaps, -/obj/machinery/door/window/right/directional/south{ - name = "Delivery Door"; - req_access = list("cargo") - }, -/obj/structure/disposalpipe/segment, -/obj/machinery/conveyor{ - dir = 1; - id = "garbage" - }, -/turf/open/floor/plating, -/area/station/maintenance/disposal) "qKD" = ( /obj/structure/sign/poster/random/directional/east, /obj/effect/turf_decal/tile/bar, @@ -46750,15 +47180,6 @@ }, /turf/open/floor/carpet, /area/station/command/bridge) -"qMi" = ( -/obj/structure/disposalpipe/segment{ - dir = 6 - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/cargo/sorting) "qMm" = ( /obj/machinery/atmospherics/pipe/smart/simple/yellow/visible{ dir = 4 @@ -46766,24 +47187,6 @@ /obj/machinery/light/floor, /turf/open/floor/iron, /area/station/engineering/atmos) -"qMA" = ( -/obj/machinery/computer/cargo{ - dir = 4 - }, -/obj/effect/turf_decal/tile/brown/anticorner/contrasted, -/turf/open/floor/iron, -/area/station/cargo/sorting) -"qMD" = ( -/obj/structure/disposalpipe/segment{ - dir = 10 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) "qMP" = ( /obj/structure/cable, /obj/effect/turf_decal/trimline/green/filled/line{ @@ -46875,6 +47278,17 @@ }, /turf/open/floor/iron, /area/station/security/prison) +"qNO" = ( +/obj/structure/table/glass, +/obj/item/folder/blue{ + pixel_y = 3 + }, +/obj/item/pen, +/obj/machinery/computer/security/telescreen/minisat/directional/south, +/obj/effect/turf_decal/tile/blue, +/obj/structure/window/reinforced/spawner/directional/east, +/turf/open/floor/iron/dark, +/area/station/engineering/transit_tube) "qNV" = ( /obj/machinery/holopad, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -47111,6 +47525,21 @@ }, /turf/open/floor/iron, /area/station/commons/locker) +"qRq" = ( +/obj/structure/table/glass, +/obj/item/tank/internals/emergency_oxygen{ + pixel_x = -8 + }, +/obj/item/clothing/mask/breath{ + pixel_x = 4 + }, +/obj/machinery/atmospherics/pipe/layer_manifold/supply/hidden, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/obj/machinery/firealarm/directional/south, +/turf/open/floor/iron/dark, +/area/station/engineering/transit_tube) "qRz" = ( /obj/machinery/atmospherics/components/unary/portables_connector/visible, /obj/effect/spawner/random/trash/janitor_supplies, @@ -47150,6 +47579,20 @@ /obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden, /turf/open/floor/iron, /area/station/engineering/atmos/storage/gas) +"qRR" = ( +/obj/item/emptysandbag, +/obj/item/emptysandbag, +/obj/item/emptysandbag, +/obj/item/emptysandbag{ + pixel_x = 8 + }, +/obj/item/emptysandbag{ + pixel_x = -9 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/sign/poster/contraband/random/directional/south, +/turf/open/floor/iron, +/area/station/cargo/warehouse) "qRS" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -47239,12 +47682,6 @@ }, /turf/open/floor/iron, /area/station/cargo/miningoffice) -"qTx" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/wood, -/area/station/command/heads_quarters/qm) "qTz" = ( /obj/structure/cable, /obj/machinery/light_switch/directional/west, @@ -47304,6 +47741,21 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) +"qTL" = ( +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 8 + }, +/obj/machinery/door/airlock/maintenance_hatch{ + name = "Cargo Bay Bridge Access" + }, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 8 + }, +/obj/effect/mapping_helpers/airlock/access/any/supply/maintenance, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) "qTR" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/turf_decal/tile/blue/anticorner/contrasted{ @@ -47376,20 +47828,6 @@ /obj/effect/turf_decal/tile/neutral/half/contrasted, /turf/open/floor/iron, /area/station/service/hydroponics/garden) -"qVD" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/computer/security/telescreen{ - desc = "Used for monitoring the engine."; - dir = 8; - name = "Engine Monitor"; - network = list("engine"); - pixel_x = 32 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, -/area/station/command/heads_quarters/ce) "qWg" = ( /obj/structure/lattice, /obj/structure/sign/warning/secure_area/directional/east, @@ -47577,6 +48015,11 @@ /obj/structure/cable, /turf/open/floor/iron/white, /area/station/science/research) +"qYC" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/ai_monitored/command/nuke_storage) "qZa" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -47694,11 +48137,6 @@ /obj/structure/cable, /turf/open/floor/plating/airless, /area/station/solars/port/fore) -"raC" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/station/cargo/sorting) "raJ" = ( /obj/structure/secure_safe/caps_spare, /obj/structure/table/glass, @@ -47779,13 +48217,6 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/port) -"rbL" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 5 - }, -/turf/open/floor/iron, -/area/station/cargo/storage) "rcq" = ( /obj/machinery/atmospherics/pipe/layer_manifold/purple/visible, /obj/machinery/atmospherics/pipe/smart/simple/cyan/visible/layer5{ @@ -47805,6 +48236,10 @@ }, /turf/open/floor/wood, /area/station/service/library) +"rcR" = ( +/obj/structure/sign/departments/cargo, +/turf/closed/wall, +/area/station/cargo/lobby) "rcW" = ( /obj/structure/closet/emcloset, /obj/effect/turf_decal/tile/neutral/fourcorners, @@ -47975,13 +48410,6 @@ }, /turf/open/floor/iron, /area/station/cargo/drone_bay) -"rgN" = ( -/obj/structure/cable, -/obj/effect/turf_decal/trimline/brown/filled/line{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/cargo/storage) "rgS" = ( /obj/machinery/modular_computer/preset/civilian{ dir = 1 @@ -48071,6 +48499,11 @@ /obj/effect/mapping_helpers/burnt_floor, /turf/open/floor/plating/airless, /area/station/solars/port/fore) +"riU" = ( +/obj/machinery/light/small/directional/south, +/obj/effect/turf_decal/caution, +/turf/open/floor/plating, +/area/station/cargo/storage) "riW" = ( /obj/structure/plasticflaps/opaque, /obj/machinery/door/window/left/directional/north{ @@ -48147,6 +48580,32 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/hallway/primary/aft) +"rkx" = ( +/obj/structure/table, +/obj/item/stack/cable_coil{ + pixel_x = 3; + pixel_y = -7 + }, +/obj/item/stack/cable_coil, +/obj/item/electronics/airlock, +/obj/item/electronics/airlock, +/obj/item/clothing/ears/earmuffs{ + pixel_x = -3; + pixel_y = -2 + }, +/obj/item/clothing/ears/earmuffs{ + pixel_x = -5; + pixel_y = 6 + }, +/obj/effect/turf_decal/bot{ + dir = 1 + }, +/obj/item/stock_parts/power_store/cell/emproof{ + pixel_x = -4; + pixel_y = 6 + }, +/turf/open/floor/iron, +/area/station/engineering/main) "rkA" = ( /obj/structure/table, /obj/item/cultivator, @@ -48211,6 +48670,14 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/starboard) +"rlr" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/bot_white, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/iron, +/area/station/cargo/storage) "rlu" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -48243,6 +48710,13 @@ /obj/effect/mapping_helpers/airlock/access/all/service/lawyer, /turf/open/floor/plating, /area/station/maintenance/fore) +"rmL" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/decal/cleanable/wrapping, +/obj/effect/turf_decal/tile/brown/opposingcorners, +/obj/effect/landmark/start/cargo_technician, +/turf/open/floor/iron, +/area/station/cargo/sorting) "rmO" = ( /obj/structure/chair/comfy/black{ dir = 8 @@ -48254,6 +48728,18 @@ dir = 4 }, /area/station/service/chapel) +"rmS" = ( +/obj/machinery/conveyor{ + dir = 1; + id = "QMLoad" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/obj/machinery/light/directional/west, +/obj/structure/disposalpipe/trunk, +/turf/open/floor/iron, +/area/station/cargo/storage) "rnb" = ( /obj/effect/mapping_helpers/burnt_floor, /obj/effect/spawner/random/trash/garbage{ @@ -48289,6 +48775,17 @@ /obj/effect/turf_decal/tile/blue/fourcorners, /turf/open/floor/iron/white, /area/station/medical/office) +"rnf" = ( +/obj/effect/landmark/generic_maintenance_landmark, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) "rng" = ( /obj/structure/cable, /obj/effect/landmark/start/hangover, @@ -48328,6 +48825,14 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/ai_monitored/command/storage/eva) +"rod" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/trimline/brown/arrow_cw{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/brown/arrow_ccw, +/turf/open/floor/iron, +/area/station/cargo/lobby) "roe" = ( /obj/machinery/atmospherics/pipe/smart/simple/supply/hidden{ dir = 10 @@ -48346,6 +48851,9 @@ /obj/effect/spawner/random/trash/caution_sign, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) +"rok" = ( +/turf/closed/wall/r_wall, +/area/station/science/ordnance/burnchamber) "roF" = ( /obj/structure/cable, /obj/machinery/power/apc/auto_name/directional/south, @@ -48354,6 +48862,16 @@ /obj/machinery/light/floor, /turf/open/floor/iron, /area/station/construction/mining/aux_base) +"roG" = ( +/obj/machinery/firealarm/directional/west, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/obj/machinery/disposal/bin/tagger, +/obj/structure/sign/poster/official/random/directional/south, +/obj/effect/turf_decal/trimline/brown/filled/corner, +/turf/open/floor/iron, +/area/station/cargo/sorting) "rps" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 4 @@ -48413,24 +48931,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/port/fore) -"rqc" = ( -/obj/machinery/computer/security/telescreen{ - desc = "Used for monitoring medbay to ensure patient safety."; - dir = 4; - name = "Medbay Monitor"; - network = list("medbay"); - pixel_x = -32 - }, -/obj/machinery/light_switch/directional/west{ - pixel_x = -20 - }, -/obj/machinery/computer/records/medical{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red/fourcorners, -/obj/machinery/light/small/directional/west, -/turf/open/floor/iron/dark, -/area/station/security/checkpoint/medical) "rqs" = ( /obj/effect/turf_decal/stripes/line{ dir = 10 @@ -48471,6 +48971,14 @@ /obj/machinery/digital_clock/directional/south, /turf/open/floor/iron, /area/station/service/bar) +"rrJ" = ( +/obj/structure/filingcabinet, +/obj/item/folder/documents, +/obj/effect/turf_decal/bot_white, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/item/poster/traitor, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/command/nuke_storage) "rrL" = ( /obj/effect/turf_decal/delivery, /obj/machinery/door/poddoor/preopen{ @@ -48575,10 +49083,20 @@ }, /turf/open/floor/iron, /area/station/ai_monitored/command/storage/eva) -"rtj" = ( -/obj/machinery/igniter/incinerator_ordmix, -/turf/open/floor/engine/vacuum, -/area/station/science/ordnance) +"rtz" = ( +/obj/effect/turf_decal/siding/wood/corner, +/obj/effect/turf_decal/siding/wood{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/airalarm/directional/west, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/obj/machinery/pdapainter/supply, +/turf/open/floor/wood/large, +/area/station/command/heads_quarters/qm) "rtD" = ( /obj/effect/turf_decal/tile/purple, /obj/machinery/light/directional/east, @@ -48625,6 +49143,22 @@ /obj/structure/bed/medical/emergency, /turf/open/floor/iron/white, /area/station/medical/medbay/central) +"rud" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark, +/obj/effect/turf_decal/trimline/brown/line, +/obj/effect/turf_decal/trimline/brown/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/landmark/start/bitrunner, +/obj/machinery/holopad, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark/textured_half, +/area/station/cargo/bitrunning/den) "rul" = ( /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -48796,6 +49330,17 @@ /obj/machinery/light_switch/directional/south, /turf/open/floor/iron/dark, /area/station/engineering/storage/tech) +"rwq" = ( +/obj/machinery/light_switch/directional/south, +/obj/structure/table/wood, +/obj/item/razor{ + pixel_x = -4; + pixel_y = 2 + }, +/obj/item/cigarette/cigar, +/obj/item/reagent_containers/cup/glass/flask/gold, +/turf/open/floor/carpet, +/area/station/command/heads_quarters/captain/private) "rwx" = ( /obj/effect/turf_decal/delivery, /obj/effect/turf_decal/stripes/line{ @@ -48872,18 +49417,6 @@ /obj/structure/cable, /turf/open/floor/plating/airless, /area/station/solars/starboard/aft) -"rxP" = ( -/obj/machinery/computer/security, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/red/half/contrasted{ - dir = 1 - }, -/obj/machinery/requests_console/directional/north{ - department = "Security"; - name = "Security Requests Console" - }, -/turf/open/floor/iron, -/area/station/security/checkpoint/customs) "rxY" = ( /obj/effect/turf_decal/stripes/line, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ @@ -48927,13 +49460,6 @@ }, /turf/open/floor/iron, /area/station/medical/medbay/lobby) -"ryp" = ( -/obj/structure/table, -/obj/machinery/cell_charger, -/obj/machinery/airalarm/directional/east, -/obj/item/stock_parts/cell/high, -/turf/open/floor/iron/dark, -/area/station/engineering/storage/tech) "ryA" = ( /obj/item/cigbutt, /obj/structure/table/reinforced, @@ -48964,6 +49490,15 @@ /obj/structure/cable, /turf/open/floor/iron/white, /area/station/security/prison/visit) +"ryV" = ( +/obj/effect/turf_decal/trimline/brown/corner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/brown/line{ + dir = 10 + }, +/turf/open/floor/iron, +/area/station/cargo/lobby) "rza" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -48982,6 +49517,11 @@ /mob/living/basic/goat/pete, /turf/open/floor/iron/kitchen_coldroom/freezerfloor, /area/station/service/kitchen/coldroom) +"rzo" = ( +/obj/structure/cable, +/obj/effect/landmark/start/cargo_technician, +/turf/open/floor/iron, +/area/station/cargo/storage) "rzq" = ( /obj/structure/cable, /obj/effect/turf_decal/stripes/corner, @@ -49088,32 +49628,6 @@ "rAW" = ( /turf/closed/wall, /area/station/security/prison/work) -"rBe" = ( -/obj/structure/table, -/obj/item/stack/cable_coil{ - pixel_x = 3; - pixel_y = -7 - }, -/obj/item/stack/cable_coil, -/obj/item/electronics/airlock, -/obj/item/electronics/airlock, -/obj/item/clothing/ears/earmuffs{ - pixel_x = -3; - pixel_y = -2 - }, -/obj/item/clothing/ears/earmuffs{ - pixel_x = -5; - pixel_y = 6 - }, -/obj/effect/turf_decal/bot{ - dir = 1 - }, -/obj/item/stock_parts/cell/emproof{ - pixel_x = -4; - pixel_y = 6 - }, -/turf/open/floor/iron, -/area/station/engineering/main) "rBi" = ( /obj/machinery/airalarm/directional/west, /obj/effect/turf_decal/stripes/line{ @@ -49132,6 +49646,11 @@ }, /turf/open/floor/iron/white/corner, /area/station/hallway/secondary/entry) +"rBY" = ( +/obj/effect/mapping_helpers/burnt_floor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) "rCn" = ( /obj/item/mmi, /obj/structure/rack, @@ -49565,10 +50084,6 @@ }, /turf/open/floor/iron, /area/station/service/hydroponics) -"rKe" = ( -/obj/machinery/netpod, -/turf/open/floor/catwalk_floor/iron_dark, -/area/station/cargo/bitrunning/den) "rKf" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -49676,19 +50191,6 @@ /obj/machinery/light/small/directional/south, /turf/open/floor/plating, /area/station/maintenance/department/engine) -"rMe" = ( -/obj/structure/table, -/obj/machinery/button/door{ - id = "xenobio3"; - layer = 3.3; - name = "Xenobio Pen 3 Blast Doors"; - pixel_y = 4; - req_access = list("xenobiology") - }, -/obj/structure/window/reinforced/spawner/directional/east, -/obj/structure/window/reinforced/spawner/directional/south, -/turf/open/floor/iron, -/area/station/science/xenobiology) "rMl" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -49701,11 +50203,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/port) -"rMp" = ( -/obj/machinery/power/apc/auto_name/directional/east, -/obj/structure/cable, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) "rMr" = ( /obj/structure/table/glass, /obj/item/experi_scanner{ @@ -49860,6 +50357,12 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/ai_upload_foyer) +"rPp" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/caution, +/turf/open/floor/iron, +/area/station/cargo/warehouse) "rPA" = ( /obj/structure/flora/bush/flowers_pp/style_random, /obj/structure/flora/bush/flowers_yw/style_random, @@ -49921,11 +50424,12 @@ "rQw" = ( /turf/open/floor/plating/airless, /area/station/solars/starboard/fore) -"rQK" = ( -/obj/machinery/netpod, -/obj/effect/decal/cleanable/robot_debris, -/turf/open/floor/catwalk_floor/iron_dark, -/area/station/cargo/bitrunning/den) +"rQD" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/siding/thinplating_new, +/obj/effect/turf_decal/trimline/brown/filled/line, +/turf/open/floor/iron, +/area/station/cargo/storage) "rQS" = ( /obj/structure/table, /obj/item/storage/box/evidence{ @@ -49966,29 +50470,6 @@ /obj/effect/spawner/random/entertainment/cigarette, /turf/open/floor/wood, /area/station/commons/lounge) -"rRo" = ( -/obj/machinery/button/ignition{ - id = "Xenobio"; - pixel_x = -4; - pixel_y = -3 - }, -/obj/machinery/button/door/directional/north{ - id = "Xenolab"; - name = "Test Chamber Blast Doors"; - pixel_x = 6; - pixel_y = -2; - req_access = list("xenobiology") - }, -/obj/structure/table/reinforced/plastitaniumglass, -/obj/machinery/computer/security/telescreen{ - name = "Test Chamber Monitor"; - network = list("xeno"); - pixel_y = 9 - }, -/obj/item/radio/intercom/directional/north, -/obj/structure/window/reinforced/spawner/directional/west, -/turf/open/floor/iron, -/area/station/science/xenobiology) "rRB" = ( /obj/machinery/door/airlock/external{ name = "Solar Maintenance" @@ -50115,6 +50596,11 @@ }, /turf/open/floor/iron, /area/station/commons/locker) +"rUd" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/cargo/sorting) "rUo" = ( /obj/structure/bed, /obj/effect/spawner/random/bedsheet, @@ -50224,15 +50710,6 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/service) -"rVK" = ( -/obj/effect/turf_decal/trimline/brown/filled/line{ - dir = 8 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/station/cargo/lobby) "rVT" = ( /obj/structure/table, /obj/item/folder/white{ @@ -50506,18 +50983,6 @@ /obj/effect/turf_decal/tile/purple/fourcorners, /turf/open/floor/iron/dark, /area/station/science/server) -"sai" = ( -/obj/machinery/door/airlock/mining{ - name = "Cargo Bay" - }, -/obj/structure/cable, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/mapping_helpers/airlock/access/all/supply/general, -/obj/effect/landmark/navigate_destination, -/turf/open/floor/iron, -/area/station/cargo/lobby) "sal" = ( /obj/machinery/door/poddoor/shutters{ dir = 4; @@ -50528,6 +50993,23 @@ }, /turf/open/floor/plating, /area/station/maintenance/port/aft) +"sat" = ( +/obj/structure/table, +/obj/effect/turf_decal/siding{ + dir = 9 + }, +/obj/item/stock_parts/matter_bin{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/stock_parts/matter_bin, +/obj/item/stock_parts/micro_laser, +/obj/item/flatpack{ + board = /obj/item/circuitboard/machine/flatpacker + }, +/obj/item/multitool, +/turf/open/floor/iron, +/area/station/science/lab) "saB" = ( /obj/machinery/button/door/directional/west{ id = "atmoshfr"; @@ -50562,6 +51044,25 @@ /obj/structure/window/spawner/directional/west, /turf/open/floor/iron/dark, /area/station/service/cafeteria) +"saK" = ( +/obj/structure/lattice/catwalk, +/obj/item/reagent_containers/cup/glass/bottle/rum{ + pixel_x = -7; + pixel_y = 2 + }, +/obj/item/reagent_containers/cup/glass/colocup{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/reagent_containers/cup/glass/colocup{ + pixel_x = 6; + pixel_y = -4 + }, +/obj/item/cigarette/rollie/cannabis{ + pixel_y = -3 + }, +/turf/open/space/basic, +/area/space/nearstation) "saN" = ( /obj/structure/bookcase/random/religion, /turf/open/floor/wood, @@ -50601,6 +51102,19 @@ /mob/living/basic/parrot/poly, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/ce) +"sbF" = ( +/obj/machinery/conveyor{ + dir = 1; + id = "packageExternal" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/window/spawner/directional/west, +/obj/structure/disposalpipe/segment, +/obj/structure/sign/warning/directional/west, +/turf/open/floor/plating, +/area/station/cargo/sorting) "sbG" = ( /obj/structure/window/reinforced/spawner/directional/west, /obj/structure/window/reinforced/spawner/directional/east, @@ -50624,6 +51138,14 @@ /obj/machinery/light/directional/east, /turf/open/floor/iron/cafeteria, /area/station/service/kitchen) +"sbP" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/tile/brown/opposingcorners, +/obj/effect/landmark/start/cargo_technician, +/turf/open/floor/iron, +/area/station/cargo/storage) "sbX" = ( /obj/machinery/hydroponics/soil, /obj/effect/decal/cleanable/dirt, @@ -50725,6 +51247,10 @@ }, /turf/open/floor/iron, /area/station/engineering/atmos) +"sdS" = ( +/obj/item/toy/beach_ball/branded, +/turf/open/space/basic, +/area/space/nearstation) "sdW" = ( /obj/structure/sign/warning/radiation/rad_area/directional/north, /obj/effect/turf_decal/bot_white, @@ -50839,21 +51365,6 @@ /obj/effect/turf_decal/tile/purple/opposingcorners, /turf/open/floor/iron, /area/station/science/research) -"sgJ" = ( -/obj/effect/turf_decal/siding/thinplating_new/dark, -/obj/effect/turf_decal/trimline/brown/line, -/obj/effect/turf_decal/trimline/brown/line{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/landmark/start/bitrunner, -/turf/open/floor/iron/dark/textured_half, -/area/station/cargo/bitrunning/den) "sgX" = ( /obj/machinery/atmospherics/pipe/smart/simple/green/visible{ dir = 4 @@ -50891,14 +51402,6 @@ /obj/effect/landmark/start/head_of_security, /turf/open/floor/wood, /area/station/command/heads_quarters/hos) -"shx" = ( -/obj/item/radio/intercom/directional/east, -/obj/effect/turf_decal/trimline/brown/filled/line, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment, -/turf/open/floor/iron, -/area/station/cargo/miningoffice) "shK" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, @@ -50919,6 +51422,15 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron/white, /area/station/science/xenobiology) +"sik" = ( +/obj/structure/railing/corner/end{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/brown/end{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/cargo/lobby) "sip" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -51084,6 +51596,12 @@ /obj/effect/turf_decal/tile/red/fourcorners, /turf/open/floor/iron/white, /area/station/security/prison/safe) +"slZ" = ( +/obj/structure/rack, +/obj/effect/spawner/random/maintenance, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/iron, +/area/station/cargo/warehouse) "smg" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/dark/visible, /obj/effect/mapping_helpers/airlock/locked, @@ -51094,6 +51612,16 @@ /obj/machinery/door/airlock/public/glass/incinerator/atmos_exterior, /turf/open/floor/engine/vacuum, /area/station/maintenance/disposal/incinerator) +"sml" = ( +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/obj/effect/turf_decal/tile/brown/opposingcorners, +/turf/open/floor/iron, +/area/station/cargo/sorting) "smt" = ( /obj/machinery/atmospherics/pipe/bridge_pipe/yellow/visible{ dir = 4 @@ -51101,6 +51629,17 @@ /obj/machinery/atmospherics/pipe/bridge_pipe/cyan/visible, /turf/open/floor/iron, /area/station/engineering/atmos) +"smB" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/autolathe, +/obj/structure/railing{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/cargo/storage) "smG" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -51161,6 +51700,18 @@ }, /turf/open/floor/plating, /area/station/maintenance/port/greater) +"snZ" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment, +/obj/structure/railing{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/cargo/storage) "soa" = ( /obj/machinery/light/small/directional/south, /obj/structure/sign/poster/official/random/directional/south, @@ -51220,6 +51771,12 @@ }, /turf/open/floor/iron, /area/station/commons/locker) +"spf" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/circuit/green{ + luminosity = 2 + }, +/area/station/ai_monitored/command/nuke_storage) "sph" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -51289,27 +51846,12 @@ /obj/structure/sign/warning/electric_shock, /turf/closed/wall/r_wall, /area/station/maintenance/port/fore) -"srl" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/landmark/event_spawn, -/turf/open/floor/iron, -/area/station/cargo/warehouse) "srp" = ( /obj/effect/turf_decal/stripes/line, /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/central) -"srK" = ( -/obj/effect/turf_decal/trimline/brown/filled/corner{ - dir = 8 - }, -/obj/machinery/door/firedoor, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/cargo/lobby) "srP" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -51370,12 +51912,22 @@ }, /turf/open/floor/engine, /area/station/engineering/supermatter/room) -"stw" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/reagent_dispensers/watertank, -/obj/machinery/light/small/directional/north, +"stt" = ( +/obj/structure/table, +/obj/machinery/button/door{ + id = "xenobio8"; + name = "Xenobio Pen 8 Blast Doors"; + pixel_y = 4; + req_access = list("xenobiology") + }, +/obj/item/reagent_containers/spray/cleaner{ + pixel_x = 10; + pixel_y = -1 + }, +/obj/structure/window/reinforced/spawner/directional/west, +/obj/structure/window/reinforced/spawner/directional/north, /turf/open/floor/iron, -/area/station/cargo/warehouse) +/area/station/science/xenobiology) "stC" = ( /obj/effect/turf_decal/tile/neutral, /turf/open/floor/iron, @@ -51428,16 +51980,50 @@ }, /turf/open/floor/engine, /area/station/engineering/supermatter/room) +"sul" = ( +/obj/structure/table, +/obj/item/paper_bin{ + pixel_x = 8; + pixel_y = 1 + }, +/obj/item/paper_bin{ + pixel_x = 8; + pixel_y = 6 + }, +/obj/item/paper_bin{ + pixel_x = 8; + pixel_y = 11 + }, +/obj/item/folder/yellow{ + pixel_x = -6; + pixel_y = 8 + }, +/obj/item/folder/yellow{ + pixel_x = -9; + pixel_y = 1 + }, +/obj/item/paper{ + pixel_x = -5 + }, +/turf/open/floor/iron, +/area/station/cargo/sorting) +"sus" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/junction{ + dir = 1 + }, +/obj/structure/sign/poster/official/random/directional/north, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/port) "suD" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/cable, /turf/open/floor/plating, /area/station/security/prison) -"suE" = ( -/obj/structure/cable, -/obj/machinery/door/firedoor, -/turf/open/floor/iron, -/area/station/construction/storage_wing) "suP" = ( /obj/structure/lattice, /obj/machinery/atmospherics/components/unary/passive_vent/layer2{ @@ -51509,22 +52095,6 @@ /obj/structure/sign/warning/fire/directional/east, /turf/open/floor/iron, /area/station/maintenance/disposal/incinerator) -"svP" = ( -/obj/machinery/conveyor{ - dir = 1; - id = "QMLoad" - }, -/obj/effect/turf_decal/stripes/line{ - dir = 6 - }, -/obj/machinery/light/directional/west, -/obj/structure/disposaloutlet{ - dir = 1 - }, -/obj/structure/disposalpipe/trunk, -/obj/structure/window/spawner/directional/south, -/turf/open/floor/iron, -/area/station/cargo/storage) "svQ" = ( /obj/machinery/door/firedoor, /obj/effect/mapping_helpers/airlock/unres{ @@ -51578,6 +52148,10 @@ }, /turf/open/floor/iron/dark, /area/station/engineering/atmos) +"swB" = ( +/obj/machinery/door/poddoor/incinerator_ordmix, +/turf/open/floor/engine/vacuum, +/area/station/science/ordnance/burnchamber) "swP" = ( /obj/structure/cable, /obj/effect/mapping_helpers/broken_floor, @@ -51612,6 +52186,11 @@ /obj/machinery/door/firedoor, /turf/open/floor/iron/white/side, /area/station/science/lobby) +"sxk" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/spawner/structure/window, +/turf/open/floor/plating, +/area/station/cargo/sorting) "sxn" = ( /obj/machinery/power/port_gen/pacman/pre_loaded, /turf/open/floor/plating, @@ -51756,16 +52335,6 @@ "szp" = ( /turf/closed/wall, /area/station/commons/fitness/recreation) -"szu" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/delivery, -/obj/machinery/navbeacon{ - codes_txt = "delivery;dir=8"; - location = "QM #2" - }, -/obj/machinery/firealarm/directional/east, -/turf/open/floor/iron, -/area/station/cargo/warehouse) "szJ" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/landmark/start/janitor, @@ -51854,6 +52423,26 @@ }, /turf/open/floor/iron, /area/station/engineering/atmos) +"sCc" = ( +/obj/structure/table, +/obj/item/clothing/gloves/cargo_gauntlet{ + pixel_y = 2 + }, +/obj/item/clothing/gloves/cargo_gauntlet{ + pixel_y = 5 + }, +/obj/item/clothing/gloves/cargo_gauntlet{ + pixel_y = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/obj/structure/cable, +/obj/item/reagent_containers/cup/soda_cans/random{ + pixel_x = -9 + }, +/turf/open/floor/catwalk_floor/iron, +/area/station/cargo/storage) "sCh" = ( /obj/structure/table/glass, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -51882,6 +52471,18 @@ /obj/structure/sign/warning/radiation, /turf/closed/wall/r_wall, /area/station/engineering/atmospherics_engine) +"sCs" = ( +/obj/machinery/conveyor_switch/oneway{ + id = "QMLoad2"; + name = "Unloading Conveyor"; + pixel_x = -13; + pixel_y = -4 + }, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/cargo/storage) "sCv" = ( /obj/effect/turf_decal/delivery, /obj/machinery/door/poddoor/preopen{ @@ -52003,15 +52604,6 @@ /obj/machinery/light/small/directional/south, /turf/open/floor/iron/dark, /area/station/security/lockers) -"sDP" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/effect/turf_decal/tile/brown/half/contrasted{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/cargo/miningoffice) "sDQ" = ( /obj/structure/cable, /obj/machinery/power/apc/auto_name/directional/north, @@ -52118,6 +52710,16 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/science/ordnance/testlab) +"sFi" = ( +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/obj/structure/fake_stairs/directional/south, +/obj/structure/railing{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/cargo/storage) "sFo" = ( /obj/machinery/button/crematorium{ id = "crematoriumChapel"; @@ -52128,19 +52730,6 @@ "sFw" = ( /turf/open/floor/iron/chapel, /area/station/service/chapel) -"sFz" = ( -/obj/structure/disposalpipe/trunk{ - dir = 4 - }, -/obj/structure/disposaloutlet{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/machinery/light/small/directional/west, -/turf/open/floor/plating, -/area/station/maintenance/disposal) "sFB" = ( /obj/machinery/door/firedoor, /obj/effect/decal/cleanable/dirt, @@ -52237,6 +52826,14 @@ "sHu" = ( /turf/open/floor/plating, /area/station/maintenance/port/fore) +"sHJ" = ( +/obj/machinery/atmospherics/components/binary/pump/on, +/obj/machinery/light/small/directional/east, +/obj/machinery/atmospherics/pipe/layer_manifold/supply/hidden{ + dir = 4 + }, +/turf/open/floor/engine, +/area/station/science/ordnance/burnchamber) "sHM" = ( /obj/effect/turf_decal/bot/right, /turf/open/floor/engine, @@ -52251,20 +52848,11 @@ /obj/effect/turf_decal/stripes/line, /turf/open/floor/iron, /area/station/engineering/main) -"sIb" = ( -/obj/structure/table/reinforced, -/obj/machinery/recharger{ - pixel_y = 4 - }, -/obj/item/radio/off{ - pixel_x = -11; - pixel_y = -3 - }, -/obj/effect/turf_decal/tile/red/half/contrasted{ - dir = 1 - }, +"sHX" = ( +/obj/effect/turf_decal/tile/brown/opposingcorners, +/obj/effect/decal/cleanable/oil/slippery, /turf/open/floor/iron, -/area/station/security/checkpoint/supply) +/area/station/cargo/sorting) "sIe" = ( /turf/closed/wall/r_wall, /area/station/security/execution/transfer) @@ -52291,15 +52879,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/service/chapel) -"sIQ" = ( -/obj/item/radio/intercom/directional/west, -/obj/machinery/piratepad/civilian, -/obj/effect/turf_decal/bot_white, -/obj/machinery/camera/directional/west{ - c_tag = "Central Primary Hallway - Fore - Port Corner" - }, -/turf/open/floor/iron, -/area/station/hallway/primary/central) "sIW" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -52317,27 +52896,6 @@ }, /turf/open/floor/iron/dark, /area/station/science/ordnance) -"sJg" = ( -/obj/machinery/computer/cargo{ - dir = 4 - }, -/obj/effect/turf_decal/bot, -/obj/machinery/button/door/directional/west{ - id = "QMLoaddoor"; - layer = 4; - name = "Loading Doors"; - pixel_y = -8; - req_access = list("cargo") - }, -/obj/machinery/button/door/directional/west{ - id = "QMLoaddoor2"; - layer = 4; - name = "Loading Doors"; - pixel_y = 8; - req_access = list("cargo") - }, -/turf/open/floor/iron, -/area/station/cargo/storage) "sJL" = ( /obj/item/crowbar, /obj/structure/cable, @@ -52348,6 +52906,23 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/engineering/supermatter) +"sKb" = ( +/obj/item/storage/box/matches{ + pixel_x = -2; + pixel_y = 3 + }, +/obj/item/cigarette/cigar{ + pixel_x = 4; + pixel_y = 1 + }, +/obj/item/cigarette/cigar{ + pixel_x = -4; + pixel_y = 1 + }, +/obj/item/cigarette/cigar/cohiba, +/obj/structure/table/wood, +/turf/open/floor/carpet, +/area/station/command/corporate_showroom) "sKs" = ( /obj/structure/closet/bombcloset/security, /obj/effect/turf_decal/tile/red/half/contrasted{ @@ -52387,6 +52962,18 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/command/bridge) +"sLf" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/door/airlock/maintenance{ + name = "Storage Room" + }, +/obj/effect/mapping_helpers/airlock/abandoned, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 1 + }, +/obj/effect/mapping_helpers/airlock/access/any/supply/maintenance, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) "sLp" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, @@ -52599,6 +53186,18 @@ }, /turf/open/floor/iron/white, /area/station/medical/medbay/central) +"sOp" = ( +/obj/machinery/atmospherics/components/binary/pump{ + dir = 1 + }, +/obj/machinery/airlock_sensor/incinerator_ordmix{ + pixel_x = -24 + }, +/obj/machinery/atmospherics/pipe/layer_manifold/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/engine, +/area/station/science/ordnance/burnchamber) "sOF" = ( /obj/structure/light_construct/directional/east, /turf/open/floor/wood, @@ -52683,6 +53282,12 @@ /obj/machinery/light_switch/directional/north, /turf/open/floor/iron/white, /area/station/science/explab) +"sPO" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) "sPV" = ( /obj/structure/closet/secure_closet/captains, /obj/structure/window/reinforced/spawner/directional/north, @@ -52793,11 +53398,6 @@ /obj/structure/window/spawner/directional/east, /turf/open/floor/iron, /area/station/engineering/atmos) -"sRD" = ( -/obj/machinery/disposal/bin, -/obj/structure/disposalpipe/trunk, -/turf/open/floor/wood, -/area/station/command/heads_quarters/qm) "sRJ" = ( /obj/structure/extinguisher_cabinet/directional/east, /obj/item/kirbyplants/organic/plant16, @@ -52955,6 +53555,13 @@ /obj/effect/turf_decal/tile/blue/half/contrasted, /turf/open/floor/iron/white, /area/station/medical/medbay/lobby) +"sTU" = ( +/obj/effect/decal/cleanable/oil, +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/maintenance, +/obj/effect/turf_decal/bot_white, +/turf/open/floor/iron, +/area/station/cargo/warehouse) "sTW" = ( /obj/effect/turf_decal/tile/yellow, /obj/structure/disposalpipe/segment{ @@ -52971,11 +53578,19 @@ /obj/effect/mapping_helpers/airlock/access/all/engineering/general, /turf/open/floor/plating, /area/station/engineering/supermatter/room) -"sUm" = ( -/obj/structure/cable, -/obj/effect/landmark/start/hangover, -/turf/open/floor/iron, -/area/station/construction/storage_wing) +"sUc" = ( +/obj/machinery/conveyor/inverted{ + dir = 6; + id = "QMLoad" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/obj/structure/railing{ + dir = 1 + }, +/turf/open/floor/plating, +/area/station/cargo/storage) "sUo" = ( /turf/open/floor/engine/air, /area/station/engineering/atmos) @@ -53018,6 +53633,12 @@ }, /turf/open/floor/iron, /area/station/security/brig) +"sUD" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/cargo/miningoffice) "sUJ" = ( /obj/effect/spawner/random/structure/closet_maintenance, /obj/effect/spawner/random/maintenance/two, @@ -53061,16 +53682,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/security/brig) -"sVp" = ( -/obj/machinery/conveyor{ - dir = 1; - id = "packageExternal" - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/turf/open/floor/plating, -/area/station/cargo/sorting) "sVx" = ( /obj/machinery/power/smes/full, /obj/structure/cable, @@ -53180,6 +53791,11 @@ /obj/machinery/duct, /turf/open/floor/plating, /area/station/maintenance/port/aft) +"sWU" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/cargo/miningoffice) "sWV" = ( /turf/closed/wall/r_wall, /area/station/security/detectives_office) @@ -53212,30 +53828,6 @@ /obj/machinery/light/small/directional/north, /turf/open/floor/iron, /area/station/security/prison/garden) -"sXr" = ( -/obj/effect/turf_decal/trimline/brown/filled/line{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/port) -"sXz" = ( -/obj/structure/cable, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/mapping_helpers/airlock/access/all/supply/qm, -/obj/machinery/door/airlock/command{ - name = "Quartermaster's Office" - }, -/obj/effect/landmark/navigate_destination, -/turf/open/floor/iron, -/area/station/command/heads_quarters/qm) "sXF" = ( /obj/effect/turf_decal/trimline/purple/line{ dir = 1 @@ -53449,6 +54041,18 @@ /obj/structure/bookcase/random/nonfiction, /turf/open/floor/wood, /area/station/service/library) +"tcc" = ( +/obj/structure/table, +/obj/machinery/button/door{ + id = "xenobio2"; + name = "Xenobio Pen 2 Blast Doors"; + pixel_y = 1; + req_access = list("xenobiology") + }, +/obj/structure/window/reinforced/spawner/directional/north, +/obj/structure/window/reinforced/spawner/directional/west, +/turf/open/floor/iron, +/area/station/science/xenobiology) "tck" = ( /obj/structure/extinguisher_cabinet/directional/north, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -53553,14 +54157,6 @@ "tdW" = ( /turf/closed/wall/r_wall, /area/station/security/execution/education) -"teg" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/line, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/plating, -/area/station/maintenance/disposal) "tep" = ( /obj/effect/turf_decal/stripes/line, /obj/structure/cable, @@ -53641,19 +54237,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/fore/lesser) -"tfR" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/door/airlock/maintenance, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/mapping_helpers/airlock/unres{ - dir = 4 - }, -/obj/effect/mapping_helpers/airlock/access/any/supply/maintenance, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) "tfV" = ( /obj/structure/chair/office/light, /obj/effect/turf_decal/tile/neutral/fourcorners, @@ -53744,13 +54327,6 @@ dir = 8 }, /area/station/medical/morgue) -"thQ" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 10 - }, -/turf/open/floor/iron, -/area/station/cargo/storage) "thT" = ( /obj/structure/cable, /obj/machinery/camera/directional/east{ @@ -53781,6 +54357,14 @@ }, /turf/open/floor/iron, /area/station/cargo/miningoffice) +"tik" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/rnd/production/techfab/department/cargo, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/cargo/storage) "tit" = ( /obj/structure/sink/directional/east, /obj/structure/sign/poster/contraband/random/directional/west, @@ -53799,16 +54383,20 @@ /obj/item/kirbyplants/random, /turf/open/floor/iron, /area/station/hallway/primary/port) -"tiK" = ( -/obj/structure/rack, -/obj/effect/decal/cleanable/cobweb/cobweb2, -/obj/item/storage/toolbox/emergency, -/obj/effect/spawner/random/maintenance, -/obj/structure/disposalpipe/segment{ - dir = 10 +"tjc" = ( +/obj/structure/table/reinforced, +/obj/item/stock_parts/power_store/cell/high{ + pixel_x = 4; + pixel_y = 5 }, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) +/obj/item/stock_parts/power_store/cell/high{ + pixel_x = -8; + pixel_y = 9 + }, +/obj/item/stock_parts/power_store/cell/high, +/obj/machinery/cell_charger, +/turf/open/floor/iron, +/area/station/science/robotics/lab) "tjf" = ( /obj/machinery/hydroponics/soil{ pixel_y = 8 @@ -53871,24 +54459,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) -"tjN" = ( -/obj/structure/table/reinforced, -/obj/machinery/door/window/left/directional/west{ - name = "Cargo Desk"; - req_access = list("shipping") - }, -/obj/item/paper_bin{ - pixel_x = -3; - pixel_y = 9 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/door/firedoor, -/obj/item/newspaper, -/obj/effect/spawner/random/maintenance, -/turf/open/floor/iron, -/area/station/cargo/sorting) "tkf" = ( /obj/structure/extinguisher_cabinet/directional/east, /obj/machinery/conveyor{ @@ -53939,6 +54509,10 @@ /obj/item/radio/intercom/prison/directional/north, /turf/open/floor/iron, /area/station/security/prison) +"tlg" = ( +/obj/structure/sign/warning/electric_shock/directional/east, +/turf/open/space/basic, +/area/space/nearstation) "tlh" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -53992,12 +54566,6 @@ }, /turf/open/floor/iron/white, /area/station/science/cytology) -"tmm" = ( -/obj/structure/disposalpipe/segment{ - dir = 5 - }, -/turf/open/floor/iron, -/area/station/cargo/storage) "tmq" = ( /obj/machinery/atmospherics/components/unary/thermomachine/freezer{ dir = 1 @@ -54077,6 +54645,12 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark/telecomms, /area/station/tcommsat/server) +"tnk" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/structure/crate_abandoned, +/obj/effect/turf_decal/bot_white, +/turf/open/floor/iron, +/area/station/cargo/warehouse) "tnm" = ( /obj/structure/chair{ dir = 1 @@ -54167,6 +54741,15 @@ /obj/structure/window/reinforced/spawner/directional/south, /turf/open/floor/iron/dark, /area/station/ai_monitored/aisat/exterior) +"tpA" = ( +/obj/machinery/cell_charger{ + pixel_y = 4 + }, +/obj/structure/table/glass, +/obj/item/stock_parts/power_store/cell/high, +/obj/structure/window/reinforced/spawner/directional/west, +/turf/open/floor/iron/dark, +/area/station/command/bridge) "tpD" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/cable, @@ -54211,6 +54794,12 @@ /obj/effect/spawner/random/clothing/costume, /turf/open/floor/plating, /area/station/maintenance/port) +"tqo" = ( +/obj/structure/cable, +/obj/effect/turf_decal/tile/brown/opposingcorners, +/obj/effect/landmark/start/cargo_technician, +/turf/open/floor/iron, +/area/station/cargo/storage) "tqx" = ( /obj/machinery/door/window/left/directional/north{ name = "Mass Driver Control Door"; @@ -54280,6 +54869,12 @@ "tsd" = ( /turf/closed/wall, /area/station/maintenance/space_hut) +"tsi" = ( +/obj/structure/sign/warning/vacuum/external/directional/east, +/obj/effect/mapping_helpers/broken_floor, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/solars/port/fore) "tst" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -54443,6 +55038,12 @@ }, /turf/open/floor/plating, /area/station/maintenance/aft/lesser) +"tvv" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 8 + }, +/turf/closed/wall, +/area/station/command/heads_quarters/qm) "tvE" = ( /turf/closed/wall/r_wall, /area/station/command/gateway) @@ -54635,15 +55236,6 @@ /obj/structure/statue/snow/snowman, /turf/open/floor/fake_snow, /area/station/maintenance/port/aft) -"tzy" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/mapping_helpers/broken_floor, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) "tzD" = ( /obj/machinery/door/airlock{ id_tag = "Toilet3"; @@ -54809,23 +55401,20 @@ /obj/machinery/door/firedoor/heavy, /turf/open/floor/iron/dark/textured, /area/station/engineering/atmos) -"tBU" = ( -/obj/structure/chair/office, -/obj/machinery/requests_console/directional/north{ - department = "Security"; - name = "Security Requests Console" - }, -/obj/effect/mapping_helpers/requests_console/supplies, -/obj/effect/mapping_helpers/requests_console/assistance, -/obj/effect/landmark/start/depsec/supply, -/turf/open/floor/iron, -/area/station/security/checkpoint/supply) "tCC" = ( /obj/effect/turf_decal/trimline/green/filled/line{ dir = 8 }, /turf/open/floor/iron, /area/station/security/prison/garden) +"tCF" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) "tCG" = ( /obj/effect/landmark/navigate_destination, /turf/open/floor/iron, @@ -54976,6 +55565,21 @@ }, /turf/open/floor/engine, /area/station/science/xenobiology) +"tGU" = ( +/obj/structure/sign/poster/random/directional/east, +/obj/effect/decal/cleanable/dirt, +/obj/structure/table, +/obj/effect/spawner/random/food_or_drink/donkpockets{ + pixel_x = -4; + pixel_y = 4 + }, +/obj/effect/spawner/random/food_or_drink/donkpockets{ + pixel_x = 5; + pixel_y = 7 + }, +/obj/machinery/light/small/broken/directional/east, +/turf/open/floor/iron, +/area/station/cargo/warehouse) "tGX" = ( /obj/structure/cable, /turf/open/floor/iron, @@ -55127,6 +55731,17 @@ /obj/structure/cable, /turf/open/floor/iron/white, /area/station/medical/surgery/theatre) +"tJB" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) "tJE" = ( /obj/effect/turf_decal/trimline/red/filled/corner, /turf/open/floor/iron/dark, @@ -55213,10 +55828,6 @@ }, /turf/open/floor/iron/white, /area/station/science/research) -"tLb" = ( -/obj/structure/sign/warning/electric_shock/directional/south, -/turf/open/space/basic, -/area/space) "tLc" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -55324,6 +55935,11 @@ /obj/effect/landmark/generic_maintenance_landmark, /turf/open/floor/plating, /area/station/maintenance/fore) +"tMn" = ( +/obj/structure/cable, +/obj/structure/railing/corner/end, +/turf/open/floor/catwalk_floor/iron, +/area/station/cargo/storage) "tMA" = ( /obj/machinery/navbeacon{ codes_txt = "patrol;next_patrol=10-Aft-To-Central"; @@ -55375,6 +55991,22 @@ /obj/structure/sign/poster/contraband/random/directional/east, /turf/open/floor/plating, /area/station/maintenance/port/aft) +"tMY" = ( +/obj/structure/cable, +/obj/structure/table/reinforced, +/obj/machinery/recharger{ + pixel_y = 4 + }, +/obj/item/radio/off{ + pixel_x = -11; + pixel_y = -3 + }, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 1 + }, +/obj/item/binoculars, +/turf/open/floor/iron, +/area/station/security/checkpoint/supply) "tNg" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -55558,6 +56190,19 @@ /obj/machinery/digital_clock/directional/south, /turf/open/floor/wood, /area/station/service/library) +"tPt" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment, +/obj/machinery/door/airlock/mining{ + name = "Mining Office" + }, +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/access/any/supply/mining, +/obj/effect/mapping_helpers/airlock/access/any/supply/bit_den, +/obj/effect/turf_decal/tile/brown/opposingcorners, +/turf/open/floor/iron, +/area/station/cargo/miningoffice) "tPw" = ( /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, @@ -55593,6 +56238,40 @@ /obj/item/clothing/mask/surgical, /turf/open/floor/iron/showroomfloor, /area/station/maintenance/starboard/lesser) +"tPW" = ( +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/obj/effect/turf_decal/tile/brown/opposingcorners, +/obj/structure/filingcabinet/filingcabinet, +/turf/open/floor/iron, +/area/station/cargo/sorting) +"tQp" = ( +/obj/structure/cable, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/machinery/light/directional/west, +/obj/machinery/button/door/directional/west{ + id = "qmroom"; + name = "Privacy Blast Doors Control"; + pixel_y = -7 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/obj/machinery/light_switch/directional/west{ + pixel_x = -22; + pixel_y = 5 + }, +/turf/open/floor/wood/large, +/area/station/command/heads_quarters/qm) "tQC" = ( /obj/machinery/atmospherics/components/unary/thermomachine/freezer/on/coldroom, /obj/effect/turf_decal/delivery, @@ -55611,13 +56290,6 @@ /obj/effect/mapping_helpers/airlock/access/all/medical/virology, /turf/open/floor/iron/white, /area/station/medical/virology) -"tRt" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/spawner/random/engineering/tracking_beacon, -/turf/open/floor/iron, -/area/station/cargo/storage) "tRE" = ( /obj/structure/chair{ dir = 1 @@ -55673,17 +56345,6 @@ /obj/structure/window/reinforced/spawner/directional/west, /turf/open/floor/iron, /area/station/maintenance/disposal/incinerator) -"tTa" = ( -/obj/item/emptysandbag, -/obj/item/emptysandbag, -/obj/item/emptysandbag, -/obj/item/emptysandbag, -/obj/item/emptysandbag, -/obj/effect/turf_decal/tile/brown/half/contrasted{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/cargo/storage) "tTB" = ( /obj/machinery/atmospherics/components/unary/outlet_injector/on/layer2, /obj/structure/window/reinforced/spawner/directional/south, @@ -55834,17 +56495,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/security/execution/education) -"tVk" = ( -/obj/machinery/light/directional/south, -/obj/machinery/firealarm/directional/south, -/obj/structure/rack, -/obj/item/storage/briefcase/secure, -/obj/item/clothing/mask/cigarette/cigar, -/obj/effect/turf_decal/tile/blue/half/contrasted{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/station/command/bridge) "tVm" = ( /obj/structure/closet/secure_closet/brig, /obj/effect/turf_decal/trimline/red/filled/line{ @@ -55861,24 +56511,6 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /turf/open/floor/iron, /area/station/security/prison/garden) -"tVr" = ( -/obj/machinery/disposal/delivery_chute{ - dir = 4 - }, -/obj/structure/disposalpipe/trunk{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/structure/window/spawner/directional/south, -/obj/structure/window/spawner/directional/north, -/obj/structure/window/spawner/directional/west, -/obj/machinery/door/window/right/directional/east{ - layer = 3 - }, -/turf/open/floor/plating, -/area/station/maintenance/disposal) "tVt" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -55967,6 +56599,16 @@ /obj/effect/spawner/random/maintenance, /turf/open/floor/plating, /area/station/maintenance/aft/lesser) +"tWU" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/sign/departments/vault/directional/north{ + pixel_x = 32 + }, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/command/nuke_storage) "tWV" = ( /obj/machinery/holopad, /obj/structure/cable, @@ -55985,17 +56627,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/maintenance/starboard/greater) -"tXl" = ( -/obj/structure/table, -/obj/item/stack/cable_coil{ - pixel_x = -3; - pixel_y = 3 - }, -/obj/item/stack/cable_coil, -/obj/item/stock_parts/cell/high, -/obj/structure/extinguisher_cabinet/directional/east, -/turf/open/floor/iron/dark, -/area/station/engineering/storage/tech) "tXx" = ( /obj/effect/turf_decal/trimline/green/filled/corner{ dir = 8 @@ -56018,6 +56649,15 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/engineering/storage/tech) +"tXO" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/mapping_helpers/broken_floor, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) "tXU" = ( /obj/machinery/door/airlock/maintenance, /obj/structure/cable, @@ -56093,6 +56733,13 @@ /obj/effect/mapping_helpers/airlock/access/all/security/general, /turf/open/floor/plating, /area/station/security/execution/transfer) +"tYU" = ( +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/obj/effect/turf_decal/tile/brown/opposingcorners, +/turf/open/floor/iron, +/area/station/cargo/storage) "tYW" = ( /obj/machinery/light/directional/south, /obj/structure/cable, @@ -56268,6 +56915,16 @@ /obj/structure/sign/directions/evac, /turf/closed/wall/r_wall, /area/station/ai_monitored/command/storage/eva) +"ubj" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/door/poddoor/shutters{ + name = "Warehouse Shutters"; + id = "warehouse" + }, +/turf/open/floor/catwalk_floor, +/area/station/cargo/warehouse) "ubl" = ( /obj/machinery/telecomms/broadcaster/preset_left, /turf/open/floor/circuit/telecomms/mainframe, @@ -56404,18 +57061,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/department/science/xenobiology) -"udC" = ( -/obj/machinery/door/airlock/maintenance{ - name = "Storage Room" - }, -/obj/effect/mapping_helpers/airlock/abandoned, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/mapping_helpers/airlock/unres{ - dir = 1 - }, -/obj/effect/mapping_helpers/airlock/access/any/supply/maintenance, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) "udD" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -56430,28 +57075,6 @@ dir = 1 }, /area/station/engineering/atmos) -"udI" = ( -/obj/structure/table/reinforced, -/obj/item/stamp/denied{ - pixel_x = 4; - pixel_y = -2 - }, -/obj/item/stamp{ - pixel_x = -3; - pixel_y = 3 - }, -/obj/item/pen/red{ - pixel_y = 10 - }, -/obj/item/dest_tagger{ - pixel_x = 9; - pixel_y = 10 - }, -/obj/effect/turf_decal/tile/brown/anticorner/contrasted{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/cargo/sorting) "udM" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -56468,6 +57091,13 @@ /obj/effect/turf_decal/tile/purple, /turf/open/floor/iron, /area/station/hallway/primary/central) +"udU" = ( +/obj/structure/cable, +/obj/effect/turf_decal/tile/brown{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/construction/storage_wing) "ued" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -56533,14 +57163,6 @@ /obj/effect/mapping_helpers/requests_console/assistance, /turf/open/floor/iron/grimy, /area/station/tcommsat/computer) -"ufv" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) "uga" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, @@ -56581,6 +57203,14 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/hallway/secondary/entry) +"uha" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/obj/effect/landmark/start/depsec/supply, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/security/checkpoint/supply) "uhq" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -56645,22 +57275,6 @@ }, /turf/open/floor/carpet, /area/station/service/theater) -"uid" = ( -/obj/structure/table, -/obj/item/stack/package_wrap{ - pixel_x = -7; - pixel_y = 9 - }, -/obj/item/dest_tagger{ - pixel_x = 4; - pixel_y = -2 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/brown/half/contrasted{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/cargo/sorting) "uiw" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 4 @@ -56752,6 +57366,20 @@ /obj/effect/turf_decal/stripes/line, /turf/open/floor/iron, /area/station/ai_monitored/command/storage/eva) +"ukm" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/machinery/firealarm/directional/east, +/obj/machinery/light/small/directional/east, +/obj/structure/bed, +/obj/item/bedsheet/qm, +/obj/effect/landmark/start/quartermaster, +/turf/open/floor/wood/large, +/area/station/command/heads_quarters/qm) "ukq" = ( /obj/machinery/atmospherics/components/binary/pump{ dir = 1 @@ -56827,18 +57455,16 @@ /obj/effect/turf_decal/tile/red/fourcorners, /turf/open/floor/iron/dark, /area/station/security/checkpoint/medical) -"unj" = ( -/obj/effect/turf_decal/trimline/brown/filled/corner{ - dir = 4 - }, -/obj/structure/extinguisher_cabinet/directional/north, +"unc" = ( +/obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment{ - dir = 4 +/obj/effect/turf_decal/tile/brown{ + dir = 1 }, /turf/open/floor/iron, -/area/station/hallway/primary/port) +/area/station/cargo/miningoffice) "unk" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -56867,6 +57493,16 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/commons/fitness/recreation) +"unK" = ( +/obj/structure/table/wood, +/obj/machinery/computer/security/telescreen/prison/directional/north, +/obj/item/flashlight/lamp/green{ + pixel_x = 1; + pixel_y = 5 + }, +/obj/item/restraints/handcuffs, +/turf/open/floor/carpet, +/area/station/security/detectives_office) "unL" = ( /turf/closed/wall, /area/station/maintenance/starboard/greater) @@ -56959,6 +57595,23 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/security/interrogation) +"upM" = ( +/obj/machinery/door/firedoor, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/port) +"upN" = ( +/obj/effect/turf_decal/tile/brown{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/cargo/lobby) "upR" = ( /obj/structure/table, /obj/machinery/recharger{ @@ -57178,6 +57831,15 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) +"usJ" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 1 + }, +/obj/machinery/light/directional/north, +/turf/open/floor/iron, +/area/station/cargo/sorting) "usK" = ( /obj/structure/table, /obj/item/storage/toolbox/emergency, @@ -57229,6 +57891,14 @@ }, /turf/open/floor/wood, /area/station/security/office) +"uth" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/cargo/drone_bay) "utk" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -57238,16 +57908,6 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/maintenance/aft/greater) -"utp" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/brown/filled/line, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/station/cargo/storage) "utt" = ( /obj/structure/chair/office{ dir = 8 @@ -57295,15 +57955,17 @@ dir = 8 }, /area/station/service/chapel) -"uur" = ( -/obj/effect/spawner/random/maintenance, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +"uud" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment{ +/obj/effect/turf_decal/trimline/brown/filled/corner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/brown/filled/corner{ dir = 4 }, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) +/obj/effect/decal/cleanable/wrapping, +/turf/open/floor/iron, +/area/station/cargo/sorting) "uuv" = ( /obj/machinery/holopad, /obj/effect/turf_decal/stripes/line{ @@ -57348,13 +58010,6 @@ }, /turf/open/floor/iron, /area/station/security/brig) -"uvH" = ( -/obj/effect/turf_decal/trimline/brown/filled/line, -/obj/structure/disposalpipe/segment{ - dir = 6 - }, -/turf/open/floor/iron, -/area/station/cargo/lobby) "uvP" = ( /obj/structure/cable, /obj/machinery/door/airlock/virology/glass{ @@ -57385,6 +58040,26 @@ /obj/machinery/duct, /turf/open/floor/iron, /area/station/engineering/main) +"uwf" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/table/reinforced, +/obj/item/paper_bin{ + pixel_x = 1; + pixel_y = 9 + }, +/obj/item/pen{ + pixel_x = 1; + pixel_y = 9 + }, +/obj/item/book/manual/wiki/security_space_law, +/obj/machinery/camera/directional/south{ + c_tag = "Security Post - Cargo" + }, +/obj/effect/turf_decal/tile/red/anticorner/contrasted{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/security/checkpoint/supply) "uwh" = ( /obj/structure/chair/comfy{ dir = 1 @@ -57393,12 +58068,6 @@ /obj/item/clothing/head/fedora, /turf/open/floor/plating, /area/station/maintenance/port/aft) -"uwx" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/station/construction/storage_wing) "uwy" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -57418,9 +58087,21 @@ /obj/effect/landmark/start/roboticist, /turf/open/floor/iron, /area/station/science/robotics/lab) +"uwM" = ( +/obj/effect/landmark/start/depsec/supply, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/security/checkpoint/supply) "uwQ" = ( /turf/closed/wall/r_wall, /area/station/engineering/atmos) +"uwT" = ( +/obj/machinery/firealarm/directional/west, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/duct, +/turf/open/floor/iron/freezer, +/area/station/commons/toilet/restrooms) "uxa" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -57437,22 +58118,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/fore) -"uxf" = ( -/obj/machinery/conveyor_switch/oneway{ - id = "packageSort2"; - name = "Sort and Deliver"; - pixel_x = -2; - pixel_y = 12 - }, -/obj/machinery/conveyor_switch/oneway{ - dir = 8; - id = "packageExternal"; - name = "Crate Returns"; - pixel_x = -5; - pixel_y = -3 - }, -/turf/open/floor/iron, -/area/station/cargo/sorting) "uxm" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -57476,12 +58141,35 @@ "uxS" = ( /turf/open/floor/wood, /area/station/maintenance/port/aft) +"uya" = ( +/obj/machinery/disposal/delivery_chute, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/obj/structure/window/spawner/directional/west, +/obj/structure/window/spawner/directional/east, +/obj/structure/plasticflaps, +/turf/open/floor/plating, +/area/station/cargo/sorting) "uyd" = ( /obj/structure/sign/warning/pods/directional/east, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/security/brig) +"uyf" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/trimline/brown/filled/line, +/turf/open/floor/iron, +/area/station/cargo/storage) +"uyh" = ( +/obj/effect/turf_decal/tile/brown/opposingcorners, +/obj/machinery/holopad, +/turf/open/floor/iron, +/area/station/cargo/sorting) "uyi" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -57550,15 +58238,6 @@ /obj/effect/turf_decal/tile/neutral, /turf/open/floor/iron, /area/station/hallway/primary/aft) -"uzl" = ( -/obj/machinery/camera/directional/west{ - active_power_usage = 0; - c_tag = "Turbine Vent"; - network = list("turbine"); - use_power = 0 - }, -/turf/open/space/basic, -/area/space) "uzJ" = ( /obj/effect/turf_decal/trimline/blue/filled/warning{ dir = 4 @@ -57576,10 +58255,6 @@ /obj/effect/turf_decal/tile/neutral, /turf/open/floor/iron, /area/station/hallway/primary/starboard) -"uAp" = ( -/obj/effect/spawner/structure/window, -/turf/open/floor/plating, -/area/station/cargo/warehouse) "uAu" = ( /obj/machinery/conveyor{ dir = 1; @@ -57614,6 +58289,15 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/port) +"uBj" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/siding/thinplating_new{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/cargo/storage) "uBp" = ( /obj/machinery/atmospherics/pipe/smart/manifold/cyan/visible{ dir = 8 @@ -57728,13 +58412,6 @@ /obj/structure/sign/departments/aiupload/directional/north, /turf/open/floor/iron, /area/station/hallway/primary/central) -"uDw" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/circuit/green{ - luminosity = 2 - }, -/area/station/ai_monitored/command/nuke_storage) "uDH" = ( /obj/machinery/atmospherics/pipe/smart/manifold/cyan/visible{ dir = 1 @@ -57769,6 +58446,13 @@ /obj/machinery/portable_atmospherics/canister, /turf/open/floor/iron/dark, /area/station/science/ordnance) +"uEs" = ( +/obj/structure/cable, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/plating, +/area/station/maintenance/solars/port/fore) "uEw" = ( /obj/structure/cable, /obj/effect/mapping_helpers/burnt_floor, @@ -57789,6 +58473,17 @@ }, /turf/open/floor/iron/white, /area/station/medical/medbay/central) +"uEA" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) "uEC" = ( /obj/machinery/conveyor{ dir = 4; @@ -57803,6 +58498,13 @@ /obj/structure/reagent_dispensers/fueltank, /turf/open/floor/plating, /area/station/maintenance/port) +"uEP" = ( +/obj/effect/turf_decal/bot_white, +/obj/effect/turf_decal/arrows/red{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/cargo/storage) "uET" = ( /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 4 @@ -57840,12 +58542,6 @@ /obj/effect/turf_decal/tile/red/half/contrasted, /turf/open/floor/iron, /area/station/security/checkpoint/customs) -"uFk" = ( -/obj/structure/cable, -/obj/structure/railing/corner/end/flip, -/obj/effect/turf_decal/stripes/corner, -/turf/open/floor/iron, -/area/station/cargo/miningoffice) "uFq" = ( /obj/machinery/door/window/left/directional/west{ name = "Mass Driver Door"; @@ -57892,22 +58588,6 @@ /obj/structure/window/reinforced/spawner/directional/south, /turf/open/floor/wood, /area/station/command/heads_quarters/hop) -"uFZ" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/table, -/obj/machinery/microwave{ - pixel_y = 6 - }, -/obj/machinery/light_switch/directional/west{ - pixel_y = -8 - }, -/obj/machinery/button/door/directional/west{ - id = "qm_warehouse"; - name = "Warehouse Door Control"; - req_access = list("cargo") - }, -/turf/open/floor/iron, -/area/station/cargo/warehouse) "uGf" = ( /obj/machinery/atmospherics/pipe/smart/simple/dark/visible{ dir = 5 @@ -57997,6 +58677,24 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/hallway/primary/aft) +"uGU" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/public/glass{ + name = "Port Primary Hallway" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/brown{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/port) "uGX" = ( /obj/effect/spawner/random/structure/crate, /turf/open/floor/plating, @@ -58028,17 +58726,6 @@ /obj/effect/turf_decal/tile/blue/opposingcorners, /turf/open/floor/iron, /area/station/service/hydroponics) -"uHp" = ( -/obj/structure/disposalpipe/segment{ - dir = 9 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) "uHt" = ( /obj/structure/cable, /obj/machinery/duct, @@ -58136,13 +58823,17 @@ "uJz" = ( /obj/effect/turf_decal/bot, /obj/structure/rack, -/obj/item/lightreplacer{ - pixel_y = 7 - }, /obj/machinery/status_display/evac/directional/east, /obj/effect/turf_decal/tile/yellow{ dir = 4 }, +/obj/item/flatpack{ + board = /obj/item/circuitboard/machine/flatpacker; + pixel_x = -5 + }, +/obj/item/multitool{ + pixel_x = 8 + }, /turf/open/floor/iron/checker, /area/station/engineering/storage_shared) "uJB" = ( @@ -58165,12 +58856,6 @@ /obj/structure/chair, /turf/open/floor/iron/dark, /area/station/ai_monitored/aisat/exterior) -"uKm" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/cargo/storage) "uKv" = ( /obj/machinery/seed_extractor, /obj/machinery/airalarm/directional/north, @@ -58228,18 +58913,6 @@ }, /turf/open/floor/iron, /area/station/science/xenobiology) -"uKZ" = ( -/obj/machinery/door/airlock/mining{ - name = "Mining Office" - }, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/mapping_helpers/airlock/access/any/supply/mining, -/obj/effect/mapping_helpers/airlock/access/any/supply/bit_den, -/obj/structure/disposalpipe/segment, -/turf/open/floor/iron, -/area/station/cargo/miningoffice) "uLa" = ( /obj/effect/spawner/random/structure/table_or_rack, /obj/effect/spawner/random/maintenance/two, @@ -58281,7 +58954,6 @@ /turf/open/floor/iron/dark, /area/station/ai_monitored/aisat/exterior) "uLE" = ( -/obj/structure/cable, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -58326,6 +58998,13 @@ dir = 4 }, /area/station/medical/chem_storage) +"uMj" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/iron, +/area/station/cargo/miningoffice) "uMR" = ( /obj/machinery/holopad, /turf/open/floor/iron/white/side{ @@ -58411,6 +59090,14 @@ /obj/effect/spawner/random/trash/box, /turf/open/floor/plating, /area/station/maintenance/starboard/greater) +"uNZ" = ( +/obj/structure/lattice/catwalk, +/obj/structure/closet/crate, +/obj/item/toy/plush/lizard_plushie/green{ + name = "Loads-The-Crates" + }, +/turf/open/space/basic, +/area/space/nearstation) "uOd" = ( /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/wood, @@ -58556,6 +59243,17 @@ }, /turf/open/floor/iron/dark, /area/station/security/evidence) +"uQL" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) "uRa" = ( /obj/machinery/door/airlock/external{ name = "Solar Maintenance" @@ -58574,13 +59272,6 @@ /obj/machinery/telecomms/server/presets/common, /turf/open/floor/circuit/telecomms/mainframe, /area/station/tcommsat/server) -"uRu" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/station/cargo/sorting) "uRw" = ( /obj/structure/closet/toolcloset, /obj/effect/turf_decal/delivery, @@ -58620,13 +59311,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/station/security/prison) -"uSm" = ( -/obj/item/kirbyplants/random, -/obj/structure/disposalpipe/segment{ - dir = 10 - }, -/turf/open/floor/iron, -/area/station/cargo/storage) "uSz" = ( /obj/structure/table, /obj/item/phone{ @@ -58636,17 +59320,6 @@ /obj/machinery/newscaster/directional/east, /turf/open/floor/plating, /area/station/maintenance/port/aft) -"uSL" = ( -/obj/machinery/camera/motion/directional/south{ - c_tag = "Vault"; - network = list("vault") - }, -/obj/structure/cable, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/station/ai_monitored/command/nuke_storage) "uSM" = ( /obj/machinery/atmospherics/components/unary/portables_connector/visible/layer4{ dir = 1 @@ -58654,6 +59327,15 @@ /obj/machinery/light/small/dim/directional/west, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) +"uSO" = ( +/obj/effect/spawner/random/structure/crate, +/obj/effect/turf_decal/bot_white, +/obj/structure/cable, +/obj/effect/turf_decal/arrows/red{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/cargo/warehouse) "uTj" = ( /obj/effect/landmark/start/medical_doctor, /turf/open/floor/iron/dark, @@ -58681,10 +59363,6 @@ }, /turf/open/floor/iron, /area/station/engineering/break_room) -"uTI" = ( -/obj/machinery/door/firedoor, -/turf/open/floor/iron, -/area/station/cargo/lobby) "uTN" = ( /obj/effect/turf_decal/siding/wood{ dir = 10 @@ -58793,7 +59471,6 @@ /turf/open/floor/iron/dark/textured, /area/station/engineering/atmos) "uVm" = ( -/obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, @@ -58912,38 +59589,6 @@ /obj/structure/cable, /turf/open/floor/circuit, /area/station/maintenance/port/aft) -"uWN" = ( -/obj/structure/table, -/obj/item/paper_bin{ - pixel_x = -1; - pixel_y = 5 - }, -/obj/item/pen, -/obj/machinery/computer/security/telescreen{ - desc = "Used for monitoring the engine."; - dir = 8; - name = "Engine Monitor"; - network = list("engine"); - pixel_x = 26 - }, -/obj/machinery/button/door/directional/east{ - id = "Engineering"; - name = "Engineering Lockdown"; - pixel_y = 16; - req_access = list("engineering") - }, -/obj/machinery/button/door/directional/east{ - id = "atmos"; - name = "Atmospherics Lockdown"; - pixel_y = 24; - req_access = list("atmospherics") - }, -/obj/effect/turf_decal/tile/red/half/contrasted{ - dir = 4 - }, -/obj/machinery/light/small/directional/east, -/turf/open/floor/iron, -/area/station/security/checkpoint/engineering) "uWS" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -58987,14 +59632,6 @@ /obj/structure/extinguisher_cabinet/directional/north, /turf/open/floor/iron, /area/station/service/hydroponics) -"uXZ" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/disposalpipe/segment{ - dir = 9 - }, -/turf/open/floor/wood, -/area/station/command/heads_quarters/qm) "uYi" = ( /turf/open/floor/plating/airless, /area/station/solars/starboard/aft) @@ -59016,6 +59653,15 @@ "uYp" = ( /turf/closed/wall, /area/station/medical/break_room) +"uYB" = ( +/obj/structure/cable, +/obj/effect/turf_decal/bot_white, +/obj/effect/spawner/random/maintenance, +/obj/effect/turf_decal/arrows/red{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/cargo/storage) "uYD" = ( /obj/structure/disposalpipe/segment, /obj/effect/turf_decal/stripes/line, @@ -59120,14 +59766,15 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/entry) -"uZM" = ( -/obj/structure/table, -/obj/machinery/computer/security/telescreen/ordnance{ - dir = 1 +"uZL" = ( +/obj/machinery/requests_console/directional/north{ + department = "Law Office"; + name = "Lawyer Requests Console" }, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, -/area/station/science/ordnance/testlab) +/obj/machinery/newscaster/directional/west, +/obj/structure/aquarium/lawyer, +/turf/open/floor/wood, +/area/station/service/lawoffice) "uZP" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -59147,6 +59794,27 @@ /obj/effect/turf_decal/tile/red/fourcorners, /turf/open/floor/iron/white, /area/station/security/prison/safe) +"vag" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment, +/obj/item/stock_parts/power_store/cell/high, +/turf/open/floor/plating, +/area/station/maintenance/starboard/greater) +"vap" = ( +/obj/structure/table, +/obj/machinery/button/door{ + id = "xenobio4"; + name = "Xenobio Pen 4 Blast Doors"; + pixel_y = 4; + req_access = list("xenobiology"); + sync_doors = 4 + }, +/obj/structure/window/reinforced/spawner/directional/south, +/obj/structure/window/reinforced/spawner/directional/east, +/obj/structure/window/reinforced/spawner/directional/north, +/turf/open/floor/iron, +/area/station/science/xenobiology) "vaB" = ( /obj/structure/cable, /obj/effect/spawner/structure/window/reinforced, @@ -59176,6 +59844,14 @@ /obj/machinery/light/directional/east, /turf/open/floor/iron, /area/station/engineering/main) +"vbi" = ( +/obj/machinery/door/airlock/research/glass/incinerator/ordmix_exterior{ + name = "Burn Chamber Exterior Airlock" + }, +/obj/effect/mapping_helpers/airlock/locked, +/obj/effect/mapping_helpers/airlock/access/all/science/ordnance, +/turf/open/floor/engine/vacuum, +/area/station/science/ordnance/burnchamber) "vbq" = ( /obj/structure/sign/map/right{ desc = "A framed picture of the station. Clockwise from security at the top (red), you see engineering (yellow), science (purple), escape (red and white), medbay (green), arrivals (blue and white), and finally cargo (brown)."; @@ -59215,6 +59891,13 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) +"vbF" = ( +/obj/machinery/power/apc/auto_name/directional/north, +/obj/structure/cable, +/turf/open/floor/circuit/green{ + luminosity = 2 + }, +/area/station/ai_monitored/command/nuke_storage) "vbL" = ( /obj/machinery/door/airlock/research{ name = "Ordnance Lab" @@ -59262,6 +59945,25 @@ }, /turf/open/floor/plating, /area/station/service/chapel/funeral) +"vde" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/button/door/directional/north{ + id = "warehouse"; + name = "Warehouse Shutters Control" + }, +/obj/effect/decal/cleanable/cobweb/cobweb2, +/obj/effect/mapping_helpers/turn_off_lights_with_lightswitch, +/obj/structure/table, +/obj/machinery/microwave, +/turf/open/floor/iron, +/area/station/cargo/warehouse) +"vdg" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/netpod, +/obj/effect/decal/cleanable/robot_debris, +/obj/structure/cable, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/cargo/bitrunning/den) "vdi" = ( /obj/machinery/camera/directional/west{ c_tag = "Security - Office - Port" @@ -59283,6 +59985,16 @@ }, /turf/open/floor/engine, /area/station/science/xenobiology) +"vdW" = ( +/obj/structure/cable, +/obj/structure/closet/crate, +/obj/effect/turf_decal/bot/left, +/obj/structure/window/spawner/directional/east, +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/cargo/lobby) "veo" = ( /obj/structure/weightmachine/weightlifter{ color = "#f5a183"; @@ -59412,15 +60124,6 @@ }, /turf/open/floor/iron/white, /area/station/command/heads_quarters/cmo) -"vhb" = ( -/obj/machinery/chem_dispenser{ - layer = 2.7 - }, -/obj/effect/turf_decal/tile/yellow/anticorner/contrasted{ - dir = 8 - }, -/turf/open/floor/iron/white, -/area/station/medical/chemistry) "vhj" = ( /obj/structure/chair{ name = "Judge" @@ -59467,17 +60170,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/security/evidence) -"vhU" = ( -/obj/machinery/mineral/stacking_unit_console{ - pixel_x = 32 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/structure/cable, -/obj/machinery/light/small/directional/east, -/turf/open/floor/plating, -/area/station/maintenance/disposal) "via" = ( /obj/machinery/door/airlock/medical{ name = "Medical Cold Room" @@ -59496,25 +60188,6 @@ /mob/living/carbon/human/species/monkey, /turf/open/floor/grass, /area/station/medical/virology) -"vis" = ( -/obj/structure/filingcabinet, -/obj/item/folder/documents, -/obj/effect/turf_decal/bot_white, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, -/area/station/ai_monitored/command/nuke_storage) -"viF" = ( -/obj/machinery/computer/upload/borg, -/obj/machinery/door/window/left/directional/south{ - layer = 3.1; - name = "Cyborg Upload Console Window"; - req_access = list("ai_upload") - }, -/obj/structure/window/reinforced/spawner/directional/west, -/obj/structure/window/reinforced/spawner/directional/east, -/obj/structure/window/reinforced/spawner/directional/north, -/turf/open/floor/iron/dark, -/area/station/ai_monitored/turret_protected/ai_upload) "viH" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/spawner/structure/window/reinforced, @@ -59541,6 +60214,21 @@ /obj/effect/landmark/start/atmospheric_technician, /turf/open/floor/iron, /area/station/engineering/atmos/pumproom) +"vjg" = ( +/obj/structure/railing/corner/end/flip{ + dir = 8 + }, +/obj/effect/decal/cleanable/cobweb/cobweb2, +/obj/effect/turf_decal/tile/brown/diagonal_centre, +/obj/effect/turf_decal/tile/yellow/diagonal_edge, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/siding/yellow/corner{ + dir = 8 + }, +/turf/open/floor/iron/diagonal, +/area/station/cargo/storage) "vjk" = ( /obj/effect/turf_decal/siding/purple{ dir = 10 @@ -59706,17 +60394,18 @@ }, /turf/open/floor/iron/white, /area/station/security/medical) -"vkR" = ( -/obj/machinery/modular_computer/preset/id{ - dir = 1 - }, -/turf/open/floor/wood, -/area/station/command/heads_quarters/qm) "vlh" = ( /obj/structure/rack, /obj/effect/spawner/random/techstorage/rnd_secure_all, /turf/open/floor/iron/dark, /area/station/engineering/storage/tech) +"vlk" = ( +/obj/effect/turf_decal/trimline/red/filled/warning, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/cargo/storage) "vlq" = ( /obj/effect/landmark/start/atmospheric_technician, /turf/open/floor/iron, @@ -59735,6 +60424,15 @@ /obj/effect/turf_decal/stripes/line, /turf/open/floor/plating, /area/station/maintenance/port/aft) +"vlP" = ( +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/obj/effect/turf_decal/tile/brown{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/cargo/lobby) "vlY" = ( /obj/structure/table/reinforced, /obj/machinery/camera/directional/north{ @@ -59775,29 +60473,6 @@ /obj/machinery/status_display/ai/directional/west, /turf/open/floor/circuit, /area/station/ai_monitored/turret_protected/ai) -"vmm" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/table, -/obj/item/reagent_containers/cup/glass/waterbottle/large{ - pixel_x = 5; - pixel_y = 20 - }, -/obj/item/reagent_containers/cup/glass/waterbottle{ - pixel_x = 7; - pixel_y = 6 - }, -/obj/item/plate{ - pixel_x = -9 - }, -/obj/item/reagent_containers/cup/glass/waterbottle{ - pixel_x = 7 - }, -/obj/effect/spawner/random/food_or_drink/donkpockets{ - pixel_x = -9; - pixel_y = 3 - }, -/turf/open/floor/iron, -/area/station/cargo/warehouse) "vmp" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -59819,6 +60494,12 @@ /obj/structure/cable, /turf/open/floor/iron/dark, /area/station/engineering/atmospherics_engine) +"vmU" = ( +/obj/effect/turf_decal/siding/white{ + dir = 8 + }, +/turf/open/water, +/area/station/service/hydroponics/garden) "vmX" = ( /obj/machinery/light/directional/west, /obj/structure/disposalpipe/segment, @@ -59925,15 +60606,6 @@ /obj/effect/turf_decal/delivery, /turf/open/floor/iron, /area/station/engineering/main) -"voS" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/navbeacon{ - codes_txt = "delivery;dir=8"; - location = "QM #1" - }, -/obj/effect/turf_decal/delivery, -/turf/open/floor/iron, -/area/station/cargo/warehouse) "vpg" = ( /obj/machinery/door/poddoor/preopen{ id = "bridge blast"; @@ -60009,13 +60681,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/primary/central) -"vpX" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/construction/storage_wing) "vqj" = ( /obj/machinery/computer/atmos_alert{ dir = 1 @@ -60054,6 +60719,9 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/service) +"vqC" = ( +/turf/open/floor/engine/vacuum, +/area/station/science/ordnance/burnchamber) "vqU" = ( /obj/structure/cable, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ @@ -60084,6 +60752,20 @@ /obj/structure/sink/directional/west, /turf/open/floor/iron/white, /area/station/science/research) +"vrp" = ( +/obj/machinery/atmospherics/pipe/smart/simple/dark/visible, +/obj/effect/turf_decal/siding/purple{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/obj/machinery/power/apc/auto_name/directional/east{ + areastring = "/area/station/science/ordnance/burnchamber" + }, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/science/ordnance) "vru" = ( /obj/machinery/chem_master, /obj/effect/turf_decal/tile/yellow/half/contrasted, @@ -60299,6 +60981,20 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/fore) +"vuz" = ( +/obj/structure/closet/crate, +/obj/item/stock_parts/power_store/cell/high, +/obj/item/stack/cable_coil{ + pixel_x = 3; + pixel_y = -7 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/obj/effect/spawner/random/engineering/flashlight, +/obj/effect/spawner/random/engineering/flashlight, +/turf/open/floor/iron, +/area/station/cargo/miningoffice) "vuJ" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/engineering/glass{ @@ -60380,11 +61076,6 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/hallway/secondary/entry) -"vwi" = ( -/obj/structure/table, -/obj/item/clothing/mask/cigarette/pipe, -/turf/open/floor/plating, -/area/station/maintenance/port) "vwn" = ( /obj/item/kirbyplants/organic/plant10, /turf/open/floor/wood/large, @@ -60463,6 +61154,17 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/engineering/supermatter/room) +"vxO" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) "vxT" = ( /obj/structure/chair/comfy{ dir = 4 @@ -60581,14 +61283,6 @@ /mob/living/carbon/human/species/monkey, /turf/open/floor/grass, /area/station/medical/virology) -"vzR" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/cargo/warehouse) "vzS" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -60636,6 +61330,19 @@ }, /turf/open/floor/iron/white, /area/station/science/ordnance/storage) +"vAT" = ( +/obj/machinery/light/directional/south, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/obj/effect/turf_decal/siding/thinplating_new{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/cargo/storage) "vAX" = ( /obj/structure/chair/sofa/left/brown, /obj/structure/sign/poster/official/get_your_legs/directional/north, @@ -60706,16 +61413,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/engineering/gravity_generator) -"vCu" = ( -/obj/machinery/light/small/directional/west, -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/obj/machinery/camera/directional/west{ - c_tag = "Auxilary Restrooms" - }, -/obj/structure/sign/poster/official/random/directional/west, -/turf/open/floor/iron, -/area/station/commons/toilet/auxiliary) "vCC" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -60737,18 +61434,6 @@ }, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/rd) -"vCR" = ( -/obj/effect/turf_decal/trimline/purple/filled/warning{ - dir = 1 - }, -/obj/structure/table, -/obj/machinery/cell_charger, -/obj/item/stock_parts/cell/high, -/obj/effect/turf_decal/siding/purple{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/science/explab) "vDc" = ( /obj/effect/spawner/structure/window, /turf/open/floor/plating, @@ -60818,15 +61503,6 @@ /obj/structure/window/reinforced/spawner/directional/west, /turf/open/floor/iron, /area/station/hallway/secondary/service) -"vEk" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) "vEl" = ( /obj/machinery/atmospherics/components/unary/outlet_injector/monitored/air_input{ dir = 1 @@ -60856,6 +61532,23 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/port) +"vEv" = ( +/obj/machinery/computer/mecha{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 5 + }, +/obj/machinery/requests_console/directional/east{ + department = "Research Director's Desk"; + name = "Research Director's Requests Console" + }, +/obj/effect/mapping_helpers/requests_console/announcement, +/obj/effect/mapping_helpers/requests_console/information, +/obj/effect/mapping_helpers/requests_console/assistance, +/obj/machinery/computer/security/telescreen/rd/directional/north, +/turf/open/floor/iron/white, +/area/station/command/heads_quarters/rd) "vEw" = ( /obj/structure/chair/stool/directional/south, /obj/item/radio/intercom/prison/directional/north, @@ -61039,6 +61732,10 @@ /obj/effect/turf_decal/tile/neutral, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) +"vHa" = ( +/obj/effect/decal/cleanable/oil/slippery, +/turf/open/floor/iron, +/area/station/cargo/warehouse) "vHs" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/engineering/glass{ @@ -61050,20 +61747,6 @@ /obj/effect/mapping_helpers/airlock/access/all/engineering/general, /turf/open/floor/iron, /area/station/engineering/main) -"vHG" = ( -/obj/structure/table/wood, -/obj/machinery/keycard_auth/directional/south{ - pixel_x = -6 - }, -/obj/machinery/button/door/directional/south{ - id = "qmprivacy"; - name = "Privacy Shutters Control"; - pixel_x = 8; - pixel_y = -26; - req_access = list("qm") - }, -/turf/open/floor/wood, -/area/station/command/heads_quarters/qm) "vHM" = ( /obj/effect/turf_decal/trimline/red/filled/line, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -61101,16 +61784,6 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/iron/white, /area/station/medical/office) -"vIt" = ( -/obj/structure/disposaloutlet{ - dir = 1 - }, -/obj/structure/disposalpipe/trunk, -/obj/structure/window/spawner/directional/east, -/obj/structure/window/spawner/directional/west, -/obj/machinery/light/small/directional/south, -/turf/open/floor/plating, -/area/station/cargo/sorting) "vIz" = ( /obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/visible{ dir = 8 @@ -61231,6 +61904,11 @@ /obj/item/clothing/suit/hazardvest, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) +"vKn" = ( +/obj/effect/turf_decal/bot_white, +/obj/effect/spawner/random/structure/crate_loot, +/turf/open/floor/iron, +/area/station/cargo/warehouse) "vKt" = ( /obj/structure/table/wood/fancy/royalblue, /obj/structure/sign/painting/library_secure{ @@ -61241,6 +61919,12 @@ }, /turf/open/floor/carpet/royalblue, /area/station/service/library) +"vKC" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/cargo/storage) "vKL" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 1 @@ -61321,12 +62005,6 @@ /obj/machinery/portable_atmospherics/canister/water_vapor, /turf/open/floor/iron, /area/station/service/janitor) -"vMd" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) "vMw" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -61377,6 +62055,12 @@ }, /turf/open/floor/iron, /area/station/command/gateway) +"vNp" = ( +/obj/effect/turf_decal/tile/brown{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/cargo/lobby) "vNv" = ( /obj/structure/extinguisher_cabinet/directional/west, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -61486,28 +62170,6 @@ }, /turf/open/floor/iron/dark/textured, /area/station/engineering/atmos) -"vPO" = ( -/obj/machinery/computer/crew{ - dir = 4 - }, -/obj/machinery/computer/security/telescreen/cmo{ - dir = 4; - pixel_x = -30 - }, -/obj/machinery/keycard_auth/directional/south{ - pixel_x = 6 - }, -/obj/machinery/button/door/directional/south{ - id = "cmoprivacy"; - name = "CMO Privacy Shutters"; - pixel_x = -8; - req_access = list("cmo") - }, -/obj/effect/turf_decal/tile/blue/anticorner/contrasted{ - dir = 8 - }, -/turf/open/floor/iron/white, -/area/station/command/heads_quarters/cmo) "vPV" = ( /obj/structure/rack, /obj/effect/turf_decal/bot, @@ -61592,6 +62254,14 @@ /obj/effect/mapping_helpers/burnt_floor, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) +"vQT" = ( +/obj/structure/railing{ + dir = 1 + }, +/obj/machinery/airalarm/directional/east, +/obj/structure/cable, +/turf/open/floor/catwalk_floor/iron, +/area/station/cargo/storage) "vQV" = ( /obj/effect/turf_decal/stripes/corner{ dir = 1 @@ -61653,6 +62323,22 @@ /obj/structure/disposalpipe/junction/flip, /turf/open/floor/plating, /area/station/maintenance/starboard/greater) +"vRr" = ( +/obj/effect/turf_decal/trimline/brown/corner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/brown/corner{ + dir = 8 + }, +/obj/machinery/door/airlock/mining{ + name = "Bitrunning Den" + }, +/obj/effect/mapping_helpers/airlock/access/any/supply/bit_den, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark/textured_half, +/area/station/cargo/bitrunning/den) "vRN" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 8 @@ -61807,14 +62493,6 @@ /obj/item/stack/cable_coil/five, /turf/open/floor/iron/dark, /area/station/security/mechbay) -"vUx" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/cargo/drone_bay) "vUC" = ( /obj/structure/bed/medical/anchored{ dir = 4 @@ -61986,6 +62664,13 @@ dir = 1 }, /area/station/engineering/atmos) +"vWD" = ( +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/obj/structure/cable, +/turf/open/floor/catwalk_floor/iron, +/area/station/cargo/storage) "vWF" = ( /obj/structure/cable, /obj/machinery/holopad, @@ -62192,6 +62877,16 @@ }, /turf/open/floor/plating, /area/station/maintenance/starboard/greater) +"waf" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/dark/visible, +/obj/structure/cable, +/obj/machinery/computer/security/telescreen/turbine/directional/east, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) "wag" = ( /obj/machinery/computer/records/medical, /obj/structure/cable, @@ -62275,6 +62970,14 @@ /obj/effect/turf_decal/tile/blue/fourcorners, /turf/open/floor/iron/white, /area/station/medical/storage) +"wbp" = ( +/obj/machinery/firealarm/directional/south, +/obj/effect/turf_decal/trimline/red/filled/warning/corner, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/cargo/storage) "wbv" = ( /obj/structure/sign/warning/vacuum/external/directional/north, /obj/effect/turf_decal/stripes/line{ @@ -62294,6 +62997,13 @@ /obj/effect/spawner/random/trash/bin, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) +"wbW" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/tile/brown/opposingcorners, +/turf/open/floor/iron, +/area/station/cargo/sorting) "wcf" = ( /obj/structure/closet/crate/coffin, /obj/structure/window/spawner/directional/east, @@ -62322,6 +63032,13 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) +"wcy" = ( +/obj/effect/turf_decal/delivery, +/obj/effect/turf_decal/trimline/brown/filled/arrow_cw{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/cargo/storage) "wcL" = ( /obj/machinery/door/window/left/directional/west{ name = "Library Desk Door"; @@ -62390,6 +63107,14 @@ /obj/effect/spawner/structure/window, /turf/open/floor/plating, /area/station/cargo/lobby) +"wea" = ( +/obj/machinery/camera/directional/east{ + c_tag = "Xenobiology Lab - Test Chamber"; + network = list("ss13","rd","xeno") + }, +/obj/machinery/light/cold/directional/east, +/turf/open/floor/engine/xenobio, +/area/station/science/xenobiology) "wem" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 8 @@ -62430,15 +63155,6 @@ /obj/item/storage/box, /turf/open/floor/plating, /area/station/maintenance/port) -"wew" = ( -/obj/machinery/modular_computer/preset/cargochat/cargo{ - dir = 8 - }, -/obj/effect/turf_decal/tile/brown/anticorner/contrasted{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/cargo/sorting) "wez" = ( /obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible, /turf/open/floor/iron/dark, @@ -62520,16 +63236,6 @@ /obj/structure/table/glass, /turf/open/floor/iron/dark, /area/station/command/bridge) -"wfU" = ( -/obj/machinery/computer/records/security{ - dir = 4 - }, -/obj/structure/cable, -/obj/effect/turf_decal/tile/red/half/contrasted{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/security/checkpoint/supply) "wfZ" = ( /obj/machinery/airalarm/directional/east, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -62571,6 +63277,15 @@ /obj/structure/sign/poster/contraband/random/directional/east, /turf/open/floor/plating, /area/station/maintenance/port/aft) +"wgm" = ( +/obj/structure/sign/poster/contraband/random/directional/north, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) "wgs" = ( /obj/machinery/door/airlock{ id_tag = "Cabin4"; @@ -62590,6 +63305,15 @@ /obj/structure/sign/map/right, /turf/closed/wall, /area/station/commons/storage/tools) +"wgQ" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/sorting/mail/flip{ + dir = 1 + }, +/obj/effect/mapping_helpers/mail_sorting/supply/disposals, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) "wha" = ( /obj/effect/spawner/random/structure/closet_maintenance, /obj/item/stock_parts/matter_bin, @@ -62605,6 +63329,17 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/command) +"whs" = ( +/obj/structure/rack, +/obj/effect/decal/cleanable/cobweb/cobweb2, +/obj/item/storage/toolbox/emergency, +/obj/effect/spawner/random/maintenance, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) "whx" = ( /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -62855,14 +63590,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/science/ordnance) -"wne" = ( -/obj/structure/chair, -/obj/machinery/computer/security/telescreen/interrogation{ - dir = 4; - pixel_x = -30 - }, -/turf/open/floor/iron/grimy, -/area/station/security/interrogation) "wnQ" = ( /obj/structure/sign/map/left{ desc = "A framed picture of the station. Clockwise from security at the top (red), you see engineering (yellow), science (purple), escape (red and white), medbay (green), arrivals (blue and white), and finally cargo (brown)."; @@ -62974,23 +63701,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/aft/lesser) -"wpo" = ( -/obj/item/storage/box/matches{ - pixel_x = -2; - pixel_y = 3 - }, -/obj/item/clothing/mask/cigarette/cigar{ - pixel_x = 4; - pixel_y = 1 - }, -/obj/item/clothing/mask/cigarette/cigar{ - pixel_x = -4; - pixel_y = 1 - }, -/obj/item/clothing/mask/cigarette/cigar/cohiba, -/obj/structure/table/wood, -/turf/open/floor/carpet, -/area/station/command/corporate_showroom) "wpr" = ( /obj/machinery/firealarm/directional/east, /obj/effect/turf_decal/stripes/line{ @@ -63019,6 +63729,14 @@ /obj/effect/mapping_helpers/airlock/access/all/command/ai_upload, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/ai_upload) +"wpO" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/tile/brown/opposingcorners, +/obj/effect/spawner/random/structure/crate, +/turf/open/floor/iron, +/area/station/cargo/sorting) "wqh" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ @@ -63071,19 +63789,6 @@ "wrn" = ( /turf/open/floor/plating, /area/station/maintenance/starboard/fore) -"wrG" = ( -/obj/structure/rack, -/obj/item/circuitboard/machine/exoscanner{ - pixel_y = 3 - }, -/obj/item/circuitboard/machine/exoscanner, -/obj/item/circuitboard/machine/exoscanner{ - pixel_y = -3 - }, -/obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/east, -/turf/open/floor/iron, -/area/station/cargo/drone_bay) "wrJ" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 8 @@ -63098,6 +63803,12 @@ }, /turf/open/floor/carpet, /area/station/service/theater) +"wsk" = ( +/obj/structure/railing/corner/end/flip, +/obj/effect/turf_decal/stripes/corner, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/cargo/miningoffice) "wsq" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/security{ @@ -63274,13 +63985,6 @@ }, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/rd) -"wtQ" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/airalarm/directional/north, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/obj/structure/reagent_dispensers/fueltank, -/turf/open/floor/iron, -/area/station/cargo/warehouse) "wtX" = ( /obj/structure/table/wood, /obj/item/folder/yellow, @@ -63303,6 +64007,14 @@ }, /turf/open/floor/iron, /area/station/security/holding_cell) +"wuo" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/cargo/sorting) "wuM" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, @@ -63419,18 +64131,6 @@ }, /turf/open/floor/iron/dark, /area/station/engineering/atmos) -"wxg" = ( -/obj/effect/turf_decal/trimline/brown/filled/line{ - dir = 8 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment, -/turf/open/floor/iron, -/area/station/hallway/primary/central) "wxh" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 4 @@ -63538,6 +64238,17 @@ /obj/machinery/bouldertech/refinery/smelter, /turf/open/floor/iron, /area/station/cargo/miningoffice) +"wyS" = ( +/obj/machinery/computer/cargo{ + dir = 4 + }, +/obj/structure/window/spawner/directional/west, +/obj/effect/turf_decal/tile/brown/opposingcorners, +/turf/open/floor/iron, +/area/station/cargo/sorting) +"wyV" = ( +/turf/open/floor/carpet/orange, +/area/station/command/heads_quarters/qm) "wzd" = ( /obj/item/radio/intercom/directional/west, /obj/structure/table, @@ -63731,6 +64442,14 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/science/server) +"wCE" = ( +/obj/machinery/atmospherics/components/unary/portables_connector/visible, +/obj/effect/turf_decal/box, +/obj/machinery/portable_atmospherics/canister, +/obj/item/radio/intercom/directional/north, +/obj/structure/sign/warning/gas_mask/directional/east, +/turf/open/floor/iron, +/area/station/science/xenobiology) "wCL" = ( /obj/structure/chair/stool/directional/south, /obj/effect/turf_decal/siding/wood{ @@ -63753,11 +64472,6 @@ }, /turf/open/floor/engine, /area/station/engineering/atmospherics_engine) -"wCT" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/station/cargo/sorting) "wDh" = ( /obj/machinery/vending/wardrobe/chef_wardrobe, /obj/effect/turf_decal/trimline/brown/warning{ @@ -64153,17 +64867,6 @@ /obj/item/pillow/random, /turf/open/floor/carpet, /area/station/commons/dorms) -"wND" = ( -/obj/effect/turf_decal/arrows/red{ - dir = 4 - }, -/obj/effect/spawner/random/maintenance, -/obj/structure/cable, -/obj/effect/turf_decal/bot_white, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/station/cargo/storage) "wNH" = ( /obj/effect/turf_decal/bot_white/left, /obj/effect/turf_decal/tile/neutral/fourcorners, @@ -64184,16 +64887,6 @@ }, /turf/open/floor/iron/white, /area/station/science/cytology) -"wOf" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) "wOl" = ( /obj/effect/turf_decal/tile/yellow/opposingcorners{ dir = 1 @@ -64266,13 +64959,6 @@ /obj/effect/mapping_helpers/airlock/access/all/science/robotics, /turf/open/floor/plating, /area/station/science/robotics/lab) -"wOX" = ( -/obj/machinery/vending/wardrobe/cargo_wardrobe, -/obj/effect/turf_decal/tile/brown/half/contrasted{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/cargo/storage) "wPo" = ( /obj/item/radio/intercom/directional/west{ freerange = 1; @@ -64426,23 +65112,6 @@ /obj/machinery/door/poddoor/incinerator_atmos_aux, /turf/open/floor/engine, /area/station/maintenance/disposal/incinerator) -"wRj" = ( -/obj/structure/table, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/item/clothing/gloves/cargo_gauntlet{ - pixel_y = -3 - }, -/obj/item/clothing/gloves/cargo_gauntlet, -/obj/item/clothing/gloves/cargo_gauntlet{ - pixel_y = 3 - }, -/obj/effect/turf_decal/tile/brown/anticorner/contrasted{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/cargo/storage) "wRm" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, @@ -64474,6 +65143,7 @@ /area/station/science/robotics/lab) "wRF" = ( /obj/structure/window/spawner/directional/west, +/obj/structure/flora/rock/pile, /turf/open/floor/grass, /area/station/service/hydroponics/garden) "wRL" = ( @@ -64486,15 +65156,6 @@ }, /turf/open/floor/iron/dark/textured_large, /area/station/science/cytology) -"wRP" = ( -/obj/effect/turf_decal/trimline/brown/filled/corner{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment, -/turf/open/floor/iron, -/area/station/hallway/primary/central) "wRT" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -64551,17 +65212,6 @@ /obj/effect/turf_decal/tile/green/fourcorners, /turf/open/floor/iron, /area/station/service/hydroponics) -"wSP" = ( -/obj/effect/turf_decal/trimline/red/filled/corner{ - dir = 4 - }, -/obj/machinery/firealarm/directional/north, -/obj/machinery/light/directional/north, -/obj/structure/disposalpipe/segment{ - dir = 10 - }, -/turf/open/floor/iron, -/area/station/cargo/storage) "wTp" = ( /obj/structure/table/reinforced, /obj/machinery/door/window/brigdoor/left/directional/north{ @@ -64585,11 +65235,17 @@ /obj/structure/reagent_dispensers/fueltank/large, /turf/open/floor/iron, /area/station/engineering/atmos) -"wTu" = ( -/obj/structure/cable, -/obj/effect/spawner/random/structure/crate, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) +"wTv" = ( +/obj/machinery/airalarm/directional/north, +/obj/machinery/modular_computer/preset/cargochat/cargo{ + dir = 8 + }, +/obj/effect/decal/cleanable/cobweb/cobweb2, +/obj/effect/turf_decal/trimline/brown/filled/corner{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/cargo/sorting) "wTF" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -64614,16 +65270,6 @@ /obj/effect/spawner/random/engineering/atmospherics_portable, /turf/open/floor/plating, /area/station/maintenance/port/greater) -"wUC" = ( -/obj/structure/disposalpipe/segment{ - dir = 10 - }, -/obj/machinery/rnd/production/techfab/department/cargo, -/obj/effect/turf_decal/tile/brown/anticorner/contrasted{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/cargo/storage) "wUG" = ( /obj/machinery/firealarm/directional/west, /obj/effect/turf_decal/trimline/blue/filled/warning, @@ -64740,6 +65386,21 @@ /obj/effect/turf_decal/tile/neutral, /turf/open/floor/iron, /area/station/commons/fitness/recreation) +"wWe" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/public/glass{ + name = "Vault Storage" + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 1 + }, +/obj/effect/mapping_helpers/airlock/access/all/supply/vault, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/station/construction/storage_wing) "wWk" = ( /obj/machinery/light/directional/west, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -64798,9 +65459,24 @@ /obj/machinery/duct, /turf/open/floor/iron/cafeteria, /area/station/service/kitchen) +"wXv" = ( +/obj/machinery/door/airlock/maintenance{ + name = "Disposal Conveyor Access" + }, +/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/supply/maintenance, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/maintenance/disposal) "wXF" = ( /turf/closed/wall/r_wall, /area/station/maintenance/starboard/lesser) +"wXO" = ( +/obj/machinery/atmospherics/components/unary/outlet_injector/on{ + dir = 8 + }, +/turf/open/floor/engine/xenobio, +/area/station/science/xenobiology) "wXP" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -64870,14 +65546,6 @@ "wYB" = ( /turf/closed/wall, /area/station/hallway/secondary/service) -"wZb" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/structure/cable, -/obj/machinery/light/floor, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) "wZe" = ( /obj/machinery/door/airlock/public/glass{ name = "Chapel Office" @@ -64946,15 +65614,6 @@ }, /turf/open/floor/iron, /area/station/security/warden) -"xac" = ( -/obj/machinery/firealarm/directional/west, -/obj/item/banner/cargo/mundane, -/obj/structure/disposalpipe/segment{ - dir = 5 - }, -/obj/effect/turf_decal/trimline/brown/filled/corner, -/turf/open/floor/iron, -/area/station/cargo/storage) "xaj" = ( /obj/structure/table/reinforced, /obj/item/storage/box/gloves{ @@ -64969,14 +65628,6 @@ dir = 4 }, /area/station/medical/chem_storage) -"xap" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/landmark/start/depsec/supply, -/obj/machinery/power/apc/auto_name/directional/east, -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/security/checkpoint/supply) "xar" = ( /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 8 @@ -65015,15 +65666,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/engineering/main) -"xbb" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/firealarm/directional/west, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/machinery/light/cold/directional/west, -/turf/open/floor/iron/dark, -/area/station/engineering/transit_tube) "xbd" = ( /obj/structure/extinguisher_cabinet/directional/south, /obj/structure/disposalpipe/segment{ @@ -65034,6 +65676,15 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/port) +"xbg" = ( +/obj/structure/table, +/obj/machinery/cell_charger, +/obj/item/stock_parts/power_store/cell/high, +/obj/effect/turf_decal/bot{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/command/gateway) "xbT" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -65052,6 +65703,13 @@ /obj/structure/cable, /turf/open/floor/iron/white/smooth_large, /area/station/command/heads_quarters/cmo) +"xbZ" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/cargo/warehouse) "xcv" = ( /obj/effect/turf_decal/stripes/line, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -65241,6 +65899,14 @@ /obj/effect/mapping_helpers/airlock/access/all/medical/cmo, /turf/open/floor/plating, /area/station/maintenance/department/medical/central) +"xgb" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/obj/effect/turf_decal/bot_white, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/iron, +/area/station/cargo/storage) "xgi" = ( /obj/structure/table/reinforced, /obj/effect/turf_decal/bot, @@ -65298,6 +65964,14 @@ dir = 4 }, /area/station/medical/treatment_center) +"xgx" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/trimline/brown/filled/corner{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/cargo/storage) "xgB" = ( /obj/structure/cable, /turf/open/floor/plating, @@ -65474,6 +66148,15 @@ }, /turf/open/floor/wood/parquet, /area/station/medical/psychology) +"xkj" = ( +/obj/effect/spawner/random/maintenance, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) "xko" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ @@ -65527,14 +66210,6 @@ /obj/machinery/atmospherics/pipe/smart/simple/purple/visible, /turf/open/floor/iron, /area/station/engineering/atmos) -"xkX" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/disposalpipe/segment{ - dir = 10 - }, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) "xkY" = ( /obj/structure/table, /obj/item/instrument/harmonica, @@ -65556,13 +66231,16 @@ /obj/machinery/light/small/directional/west, /turf/open/floor/iron, /area/station/engineering/atmos) -"xlt" = ( -/obj/effect/turf_decal/tile/brown/half/contrasted{ - dir = 8 +"xlf" = ( +/obj/structure/table/wood, +/obj/item/paper_bin{ + pixel_x = -3; + pixel_y = 7 }, -/obj/machinery/light/small/directional/west, -/turf/open/floor/iron, -/area/station/cargo/storage) +/obj/item/pen, +/obj/item/pen/red, +/turf/open/floor/wood, +/area/station/service/lawoffice) "xlv" = ( /obj/machinery/airalarm/directional/south, /obj/machinery/computer/mech_bay_power_console{ @@ -65693,6 +66371,23 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/science/genetics) +"xoj" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment, +/obj/effect/spawner/random/structure/crate, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"xop" = ( +/obj/structure/railing/corner/end/flip{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/cargo/storage) "xor" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, @@ -65762,10 +66457,6 @@ /obj/machinery/status_display/evac/directional/east, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/cmo) -"xpX" = ( -/obj/effect/turf_decal/delivery, -/turf/open/floor/iron, -/area/station/cargo/storage) "xpY" = ( /obj/machinery/atmospherics/components/unary/outlet_injector/monitored/incinerator_input{ dir = 1 @@ -65842,6 +66533,14 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/maintenance/disposal/incinerator) +"xrv" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/obj/effect/turf_decal/bot_white, +/obj/effect/spawner/random/engineering/tracking_beacon, +/turf/open/floor/iron, +/area/station/cargo/storage) "xrG" = ( /obj/structure/fireaxecabinet/directional/west, /obj/machinery/camera/directional/west{ @@ -65928,13 +66627,6 @@ }, /turf/open/floor/iron, /area/station/service/kitchen) -"xte" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) "xtp" = ( /obj/effect/turf_decal/stripes/line{ dir = 6 @@ -65972,10 +66664,6 @@ /obj/effect/turf_decal/tile/blue/fourcorners, /turf/open/floor/iron/white, /area/station/medical/treatment_center) -"xtw" = ( -/obj/item/stack/rods, -/turf/open/space/basic, -/area/space) "xtz" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -65984,6 +66672,20 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/aft/greater) +"xtH" = ( +/obj/effect/turf_decal/siding/thinplating_new/corner, +/obj/effect/turf_decal/trimline/brown/filled/corner, +/turf/open/floor/iron, +/area/station/cargo/storage) +"xtY" = ( +/obj/machinery/computer/security/telescreen/auxbase/directional/south, +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/obj/effect/turf_decal/tile/yellow/half/contrasted, +/turf/open/floor/iron, +/area/station/construction/mining/aux_base) "xtZ" = ( /obj/structure/lattice, /obj/machinery/atmospherics/pipe/smart/simple/green/visible, @@ -66068,10 +66770,6 @@ /obj/effect/turf_decal/tile/neutral, /turf/open/floor/iron, /area/station/commons/fitness/recreation) -"xvv" = ( -/obj/machinery/light/small/directional/north, -/turf/open/floor/plating, -/area/station/cargo/storage) "xvI" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -66093,6 +66791,17 @@ /obj/structure/extinguisher_cabinet/directional/east, /turf/open/floor/iron/freezer, /area/station/commons/toilet/restrooms) +"xwa" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/disposal/delivery_chute, +/obj/structure/window/spawner/directional/east, +/obj/structure/window/spawner/directional/west, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/obj/structure/plasticflaps, +/turf/open/floor/plating, +/area/station/cargo/sorting) "xwf" = ( /obj/structure/weightmachine/weightlifter, /turf/open/floor/iron/dark/side{ @@ -66110,6 +66819,15 @@ "xww" = ( /turf/closed/wall/r_wall, /area/station/engineering/storage/tech) +"xwB" = ( +/obj/effect/turf_decal/siding/white{ + dir = 6 + }, +/obj/structure/railing{ + dir = 4 + }, +/turf/open/water, +/area/station/service/hydroponics/garden) "xwD" = ( /obj/effect/turf_decal/trimline/yellow/filled/corner, /turf/open/floor/iron/white, @@ -66154,48 +66872,11 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/port) -"xxh" = ( -/obj/effect/turf_decal/trimline/purple/filled/line{ - dir = 1 - }, -/obj/machinery/button/door/directional/north{ - id = "rdrnd"; - name = "Research and Development Containment Control"; - pixel_x = -6; - req_access = list("rd") - }, -/obj/machinery/button/door/directional/north{ - id = "rdordnance"; - name = "Ordnance Containment Control"; - pixel_x = 6; - req_access = list("rd") - }, -/obj/machinery/button/door/directional/north{ - id = "rdoffice"; - name = "Privacy Control"; - pixel_y = 34; - req_access = list("rd") - }, -/obj/machinery/computer/security/telescreen/rd{ - pixel_x = 31; - pixel_y = 30 - }, -/obj/machinery/light/small/directional/north, -/turf/open/floor/iron/white, -/area/station/command/heads_quarters/rd) "xxk" = ( /obj/machinery/disposal/bin, /obj/structure/disposalpipe/trunk, /turf/open/floor/iron/dark, /area/station/hallway/primary/central) -"xxn" = ( -/obj/structure/table, -/obj/machinery/cell_charger, -/obj/item/stock_parts/cell/high, -/obj/machinery/light_switch/directional/north, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, -/area/station/command/teleporter) "xxF" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -66273,6 +66954,7 @@ /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/cargo/miningoffice) "xyA" = ( @@ -66293,10 +66975,14 @@ /turf/open/floor/iron/white, /area/station/medical/chemistry) "xyI" = ( -/obj/machinery/door/window/left/directional/west{ - name = "Animal Pen B" +/obj/effect/turf_decal/siding/white{ + dir = 10 }, -/turf/open/floor/grass, +/obj/structure/railing{ + dir = 8 + }, +/obj/structure/sign/clock/directional/south, +/turf/open/water, /area/station/service/hydroponics/garden) "xyM" = ( /obj/structure/cable, @@ -66354,6 +67040,10 @@ /obj/effect/turf_decal/tile/blue/fourcorners, /turf/open/floor/iron/white, /area/station/medical/treatment_center) +"xzx" = ( +/obj/structure/cable, +/turf/open/floor/catwalk_floor/iron, +/area/station/cargo/storage) "xAb" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -66430,15 +67120,17 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/engineering/main) -"xAZ" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/trimline/brown/filled/line{ - dir = 4 +"xBp" = ( +/obj/machinery/sparker/directional/north{ + id = "Xenobio" }, +/turf/open/floor/engine/xenobio, +/area/station/science/xenobiology) +"xBq" = ( +/obj/effect/landmark/event_spawn, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/item/kirbyplants/random, /turf/open/floor/iron, -/area/station/construction/storage_wing) +/area/station/cargo/drone_bay) "xBw" = ( /obj/machinery/door/airlock/engineering{ name = "Starboard Quarter Solar Access" @@ -66507,13 +67199,6 @@ }, /turf/open/floor/iron/dark, /area/station/ai_monitored/security/armory) -"xCt" = ( -/obj/structure/cable, -/obj/effect/turf_decal/bot_white, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/station/cargo/storage) "xCx" = ( /obj/item/stack/package_wrap, /obj/item/stack/package_wrap, @@ -66629,14 +67314,6 @@ }, /turf/open/floor/engine, /area/station/science/cytology) -"xDQ" = ( -/obj/structure/chair/office{ - dir = 4 - }, -/obj/structure/disposalpipe/segment, -/mob/living/basic/sloth/citrus, -/turf/open/floor/iron, -/area/station/cargo/storage) "xEe" = ( /obj/item/storage/box/syringes, /obj/item/storage/box/beakers{ @@ -66751,6 +67428,17 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/secondary/entry) +"xFZ" = ( +/obj/machinery/computer/upload/borg, +/obj/machinery/door/window/left/directional/south{ + name = "Cyborg Upload Console Window"; + req_access = list("ai_upload") + }, +/obj/structure/window/reinforced/spawner/directional/west, +/obj/structure/window/reinforced/spawner/directional/east, +/obj/structure/window/reinforced/spawner/directional/north, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/ai_upload) "xGa" = ( /obj/structure/rack, /obj/item/storage/box, @@ -66767,13 +67455,6 @@ }, /turf/open/floor/iron/dark, /area/station/security/courtroom) -"xGm" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/line, -/turf/open/floor/plating, -/area/station/maintenance/disposal) "xGr" = ( /obj/structure/table/reinforced, /obj/item/tank/internals/emergency_oxygen/engi, @@ -66797,6 +67478,10 @@ /obj/structure/cable, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/ai) +"xGT" = ( +/obj/structure/disposalpipe/segment, +/turf/closed/wall, +/area/station/cargo/warehouse) "xGX" = ( /obj/effect/spawner/random/maintenance, /obj/structure/cable, @@ -66809,6 +67494,14 @@ }, /turf/open/floor/plating, /area/station/maintenance/aft/greater) +"xHC" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/obj/effect/turf_decal/bot_white, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/iron, +/area/station/cargo/storage) "xIp" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/landmark/event_spawn, @@ -66851,18 +67544,6 @@ /obj/machinery/newscaster/directional/north, /turf/open/floor/iron, /area/station/service/hydroponics) -"xIK" = ( -/obj/structure/table, -/obj/item/reagent_containers/condiment/enzyme{ - layer = 5; - pixel_x = -7; - pixel_y = 13 - }, -/obj/item/reagent_containers/condiment/flour{ - pixel_x = 1 - }, -/turf/open/floor/plating, -/area/station/maintenance/port/aft) "xIM" = ( /obj/machinery/computer/operating{ dir = 8 @@ -66872,11 +67553,6 @@ }, /turf/open/floor/iron/white, /area/station/science/robotics/lab) -"xIZ" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/landmark/start/cargo_technician, -/turf/open/floor/iron, -/area/station/cargo/warehouse) "xJa" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -66963,6 +67639,15 @@ }, /turf/open/floor/wood, /area/station/commons/vacant_room/office) +"xLA" = ( +/obj/machinery/computer/records/security{ + dir = 4 + }, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/security/checkpoint/supply) "xLR" = ( /obj/structure/table, /obj/item/stack/sheet/iron/fifty, @@ -67092,15 +67777,6 @@ "xNU" = ( /turf/closed/wall, /area/station/service/lawoffice) -"xOj" = ( -/obj/machinery/conveyor{ - dir = 1; - id = "packageExternal" - }, -/obj/structure/window/spawner/directional/west, -/obj/structure/window/spawner/directional/east, -/turf/open/floor/plating, -/area/station/cargo/sorting) "xOw" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -67289,6 +67965,10 @@ "xRZ" = ( /turf/open/floor/iron, /area/station/engineering/atmos/pumproom) +"xSq" = ( +/obj/item/stack/rods, +/turf/open/space/basic, +/area/space/nearstation) "xSO" = ( /obj/effect/turf_decal/siding/wood{ dir = 1 @@ -67309,6 +67989,14 @@ /obj/machinery/light/directional/west, /turf/open/floor/iron/white, /area/station/medical/medbay/central) +"xTe" = ( +/obj/structure/cable, +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/preopen{ + id = "qmroom" + }, +/turf/open/floor/plating, +/area/station/command/heads_quarters/qm) "xTg" = ( /obj/structure/chair/comfy{ dir = 4 @@ -67321,6 +68009,17 @@ /obj/effect/turf_decal/tile/purple/opposingcorners, /turf/open/floor/iron, /area/station/science/research) +"xTr" = ( +/obj/structure/closet{ + name = "evidence closet 3" + }, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 4 + }, +/obj/item/poster/traitor, +/turf/open/floor/iron/dark, +/area/station/security/evidence) "xTw" = ( /turf/closed/wall/r_wall, /area/station/medical/medbay/central) @@ -67394,11 +68093,11 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, /obj/structure/cable, /obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/siding/wideplating_new, +/obj/structure/railing, +/obj/effect/turf_decal/tile/green/half/contrasted, /turf/open/floor/iron, /area/station/service/hydroponics/garden) "xUH" = ( @@ -67427,15 +68126,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/engineering/main) -"xVc" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/structure/sign/poster/contraband/random/directional/north, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) "xVq" = ( /obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/visible{ dir = 8 @@ -67496,6 +68186,12 @@ }, /turf/open/floor/engine/vacuum, /area/station/engineering/atmos) +"xWr" = ( +/obj/effect/turf_decal/trimline/red/filled/corner, +/obj/machinery/light/directional/east, +/obj/machinery/computer/security/telescreen/interrogation/directional/east, +/turf/open/floor/iron, +/area/station/security/brig) "xWE" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/turf_decal/tile/yellow/half/contrasted{ @@ -67516,13 +68212,6 @@ /obj/machinery/drone_dispenser, /turf/open/floor/plating, /area/station/maintenance/department/science/central) -"xWV" = ( -/obj/effect/spawner/random/vending/colavend, -/obj/effect/turf_decal/trimline/brown/filled/line{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/port) "xWY" = ( /obj/item/radio/intercom/directional/south, /obj/effect/turf_decal/tile/bar, @@ -67540,15 +68229,6 @@ }, /turf/open/floor/iron/cafeteria, /area/station/service/kitchen) -"xXf" = ( -/obj/machinery/door/airlock/mining{ - name = "Deliveries" - }, -/obj/structure/cable, -/obj/machinery/door/firedoor, -/obj/effect/mapping_helpers/airlock/access/all/supply/general, -/turf/open/floor/iron, -/area/station/cargo/sorting) "xXh" = ( /obj/machinery/photocopier{ pixel_y = 3 @@ -67631,17 +68311,22 @@ /obj/effect/landmark/navigate_destination, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/captain/private) +"xXR" = ( +/obj/effect/decal/cleanable/oil, +/obj/structure/railing/corner/end{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/cargo/storage) "xXW" = ( /obj/effect/turf_decal/siding/wood{ dir = 8 }, /turf/closed/wall, /area/station/service/theater) -"xYl" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron, -/area/station/cargo/miningoffice) "xYq" = ( /obj/structure/rack, /obj/item/stack/sheet/cardboard, @@ -67689,6 +68374,21 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden, /turf/open/floor/plating, /area/station/maintenance/disposal/incinerator) +"xYT" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/brown{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central) "xYV" = ( /obj/structure/table/glass, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ @@ -67705,10 +68405,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/fore/lesser) -"xYZ" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible, -/turf/closed/wall/r_wall, -/area/station/science/ordnance) "xZb" = ( /obj/effect/spawner/random/structure/grille, /turf/open/floor/plating, @@ -67738,12 +68434,6 @@ /obj/machinery/space_heater, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) -"xZy" = ( -/obj/structure/sign/warning/vacuum/external/directional/east, -/obj/structure/cable, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating, -/area/station/maintenance/solars/port/fore) "xZB" = ( /obj/structure/cable, /obj/effect/turf_decal/tile/yellow/half/contrasted{ @@ -67814,17 +68504,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/carpet, /area/station/service/theater) -"ybi" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) "ybl" = ( /obj/structure/closet/secure_closet/engineering_personal, /obj/effect/turf_decal/delivery, @@ -67866,6 +68545,16 @@ /obj/effect/spawner/random/structure/crate, /turf/open/floor/plating, /area/station/maintenance/starboard/greater) +"ycf" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/cargo/miningoffice) "ych" = ( /obj/machinery/camera/directional/east{ c_tag = "Xenobiology Lab - Pen #5"; @@ -67915,9 +68604,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/port/fore) -"ycv" = ( -/turf/open/floor/iron/white, -/area/station/science/xenobiology) "ycw" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -67962,6 +68648,13 @@ }, /turf/open/floor/iron, /area/station/maintenance/disposal/incinerator) +"ydp" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/machinery/holopad, +/turf/open/floor/wood/large, +/area/station/command/heads_quarters/qm) "ydq" = ( /obj/structure/closet/firecloset, /turf/open/floor/plating, @@ -68049,22 +68742,6 @@ /obj/structure/cable, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/hos) -"yfa" = ( -/obj/machinery/computer/mecha{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/purple/filled/line{ - dir = 5 - }, -/obj/machinery/requests_console/directional/east{ - department = "Research Director's Desk"; - name = "Research Director's Requests Console" - }, -/obj/effect/mapping_helpers/requests_console/announcement, -/obj/effect/mapping_helpers/requests_console/information, -/obj/effect/mapping_helpers/requests_console/assistance, -/turf/open/floor/iron/white, -/area/station/command/heads_quarters/rd) "yfg" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/door/poddoor/shutters/preopen{ @@ -68260,11 +68937,6 @@ /obj/structure/sign/clock/directional/west, /turf/open/floor/iron/dark, /area/station/medical/office) -"yis" = ( -/obj/machinery/mech_bay_recharge_port, -/obj/structure/sign/poster/official/safety_report/directional/south, -/turf/open/floor/plating, -/area/station/cargo/warehouse) "yiJ" = ( /obj/structure/chair/sofa/right/brown, /obj/item/toy/plush/moth{ @@ -68272,14 +68944,6 @@ }, /turf/open/floor/carpet, /area/station/medical/psychology) -"yiN" = ( -/obj/effect/spawner/random/maintenance, -/obj/structure/cable, -/obj/effect/turf_decal/bot_white, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/station/cargo/storage) "yjc" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -68305,6 +68969,18 @@ /obj/effect/spawner/random/bureaucracy/stamp, /turf/open/floor/wood, /area/station/commons/vacant_room/office) +"ykb" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/mining{ + name = "Deliveries" + }, +/obj/effect/mapping_helpers/airlock/access/any/supply/shipping, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/tile/brown/fourcorners, +/turf/open/floor/iron, +/area/station/cargo/sorting) "ykn" = ( /obj/effect/mapping_helpers/airlock/cyclelink_helper, /obj/machinery/door/airlock/external{ @@ -68405,6 +69081,14 @@ /obj/machinery/light/directional/east, /turf/open/floor/iron, /area/station/commons/dorms) +"ylO" = ( +/obj/machinery/firealarm/directional/north, +/obj/machinery/light/directional/north, +/obj/effect/turf_decal/trimline/red/filled/corner{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/cargo/storage) "ylQ" = ( /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -78808,10 +79492,10 @@ lMJ aaa aaa aaa -mWd +omf aaa aaa -mWd +omf aaa aaa aaa @@ -80618,7 +81302,7 @@ aDa aDa iYU oSc -oQc +xtY aDb rew lGL @@ -80685,7 +81369,7 @@ aaa aaa aaa aaa -nLZ +sdS aaa aaa aaa @@ -81173,7 +81857,7 @@ aaa aaa aaa aaa -mWd +omf aaa aaa aaa @@ -81881,7 +82565,7 @@ lMJ lMJ lMJ jXu -hSP +pHK mXz oFR ycr @@ -81967,7 +82651,7 @@ aaa aaa aaa aaa -bxr +tlg aaa aaa lZV @@ -82138,8 +82822,8 @@ aaa lMJ aaa nmg -nwi -wOf +cHR +jEa jXu jXu jXu @@ -82395,9 +83079,9 @@ aaa aox aox jXu -jXu xtr jXu +jXu lMJ jXu jXu @@ -82650,10 +83334,9 @@ aaa aaa aaa aaa -aaa lMJ qGV -bEh +kHO tvR aaa aaa @@ -82678,6 +83361,7 @@ aaa aaa aaa aaa +aaa fcq nJG fcq @@ -82907,7 +83591,6 @@ aaa aaa aaa aaa -aaa lMJ tmz xgB @@ -82935,6 +83618,7 @@ aaa aaa aaa aaa +aaa fcq fxQ fcq @@ -83003,7 +83687,7 @@ qPC rKQ xjH xjH -fIR +mGE aaa aaa lMJ @@ -83164,7 +83848,6 @@ aaa aaa aaa aaa -aaa lMJ tmz xgB @@ -83192,10 +83875,11 @@ aaa aaa aaa aaa +aaa fcq uEw fcq -rxP +duW uhI vrP hve @@ -83421,7 +84105,6 @@ aaa aaa aaa aaa -aaa lMJ tmz xgB @@ -83449,6 +84132,7 @@ aaa aaa aaa aaa +aaa kzI fxQ fcq @@ -83678,7 +84362,6 @@ aaa aaa aaa aaa -aaa lMJ tmz xgB @@ -83706,6 +84389,7 @@ aaa aaa aaa aaa +aaa kzI nsK fcq @@ -83935,7 +84619,6 @@ aaa aaa aaa aaa -aaa lMJ tmz xgB @@ -83963,6 +84646,7 @@ aaa aaa aaa aaa +aaa kzI fxQ fcq @@ -84031,7 +84715,7 @@ rKQ rKQ xjH xjH -ktw +pTl aaa aaa lMJ @@ -84173,7 +84857,7 @@ aaa aaa aaa aaa -xtw +xSq aaa fcJ aaa @@ -84192,10 +84876,9 @@ aaa aaa aaa aaa -aaa lMJ rqa -wZb +fiX iQd aaa aaa @@ -84220,6 +84903,7 @@ aaa aaa aaa aaa +aaa fcq oMY fcq @@ -84447,18 +85131,17 @@ aaa aaa aaa aaa -aaa aox aox jXu jXu -cQc +ojz jXu lMJ lMJ lMJ pnI -qqp +vuz xDu pcS pnI @@ -84470,14 +85153,15 @@ aaa aaa aaa aaa -pdX aaa +pdX aaa aaa aaa aaa aaa fcq +fcq pck lku uEw @@ -84701,15 +85385,14 @@ aaa aaa aaa aaa -aaa -mWd +omf aaa aaa lMJ lMJ nmg vEV -jPp +rnf jXu paD paD @@ -84722,7 +85405,8 @@ pnI lMJ lMJ lMJ -lMJ +aox +uNZ hxo aSZ lXG @@ -84730,15 +85414,15 @@ hxo lXG deU hxo -lMJ -lMJ -lMJ +iNH +kyu lMJ fcq -fxQ +fur +fur wEz aaq -hgH +aOA wUt fcq jPE @@ -84763,7 +85447,7 @@ pOa pOa uOH jUb -xIK +dUG bar nBp dqN @@ -84956,7 +85640,6 @@ xuK xuK lMJ lMJ -lMJ jfG kmW jfG @@ -84966,11 +85649,11 @@ jfG jfG jXu kXA -ufv +mwo jXu qRU -aQP -pFU +kqh +com hKg hKg fQW @@ -84980,24 +85663,25 @@ pnI hKg aaa aaa +aaa hxo bnA -oDp +riU oDJ -xvv +lAa fyz hxo aaa aaa cbz cbz -fcq -lnv -fcq -fcq -cJQ -fcq -fcq +dBE +vQs +vQs +vQs +hor +vQs +vQs iSk nzD uxa @@ -85015,7 +85699,7 @@ lMY pOa mrN gXe -vwi +leO tql pOa aDl @@ -85059,7 +85743,7 @@ rKQ rKQ xjH xjH -fIR +mGE aaa aaa aaa @@ -85213,21 +85897,20 @@ aYN aYN aaa aaa -aaa jfG lVe dqo eXy wCf wVa -sFz +jTl jXu jXu -hWS +qTL jXu pJp -qoq -rKe +rud +emU bZz qvY kRe @@ -85238,6 +85921,7 @@ hKg hxo hxo hxo +hxo uor waB cbz @@ -85246,15 +85930,15 @@ dZB hxo hxo hxo -cbz -wOX -xlt -jLb -tTa -kQP -fSw -gip -kQP +pYM +eOb +gvA +vQs +ePj +dEr +dKY +qRR +vQs dHc dHc bZY @@ -85470,7 +86154,6 @@ xuK xuK aaa aaa -aaa qvJ qvJ jfG @@ -85478,13 +86161,13 @@ jfG jfG gYE lBm -qKy +ecm ybN -dOe +tJB jXu qrL -sgJ -rQK +iLT +vdg bZz pPh aFd @@ -85495,32 +86178,33 @@ hKg uvw yeq yeq -giz -xpX -sJg -xpX -jYB +yeq +cvv +wcy +ewr +fXZ +sUc vsO vsO uAu -svP -rbL -mmR -mmR -kQP -kQP -apZ -lnG -qIK -ikJ -kKr +rmS +dme +exQ +vQs +cna +hjt +gEx +bGu +slZ +vQs +puW hyW pTf iOc qwG fjD rEj -vCu +nXb cwc kXa fjD @@ -85568,7 +86252,7 @@ aaa aaa lMJ lMJ -cCM +saK cDD lMJ lMJ @@ -85727,20 +86411,19 @@ aaa aaa aaa aaa -aaa qvJ nxi bWw -hTn -tVr +mqn +cWz iPE vfv -cTQ -xte -tzy +wXv +qCm +tXO jXu iGB -dup +duc paD paD jpG @@ -85749,28 +86432,29 @@ nVG qOZ hKg hKg -goG -aok -luc -aok -aok -aok -aok +ouu +jKc +sCs +nxG +xop +hhR aok -iUw +coz +xXR +cmX +nxG +nxG +bPc aok -aok -aok -eLb -cbz -kQP -kQP -mxO -qkD -erM -qIK -xWV -kKr +wbp +vQs +lPn +tnk +eED +sTU +cJT +vQs +qlz hyW xOw iOc @@ -85984,49 +86668,49 @@ aaa aaa aaa aaa -aaa qvJ nIj gYC -xGm +ggZ isO gYE uEC wgw twr -bSm +fpn jXu bZz -iXq +vRr paD -ouc +hZg dSG -cLj -xYl -cLj +apC +sUD +sWU mUz -pqJ -rgN -mmR -mmR -mmR -hyd -ejo -jRM -uKm -hyd -ejo -jRM -uKm -thQ -xac -qIK -sRD -nre -uXZ -vHG -kQP -kQP +jIl +hWC +cEY +tqo +cEY +cEY +aok +xrv +aok +xHC +aok +xgb +aok +xHC +aok +vlk +fqe +iWZ +ojW +hpj +uSO +pSY +vQs tiD hyW xOw @@ -86088,7 +86772,7 @@ gAf tSw tSw aaa -gda +fZt aaa aaa sGL @@ -86241,50 +86925,50 @@ aaa aaa aaa aaa -aaa qvJ kVR jCM -teg +lWL wvR pQu vEH jXu vVp -plJ -pTT -sDP -jBl +wgQ +fmG +jmU jBl -nNk +ycf +unc xyz -kdC -btt +jGb +uMj poj -shx -uKZ -fiC +hnV +tPt +gUH +dAk dAk rhn +qnj iqt -xCt -tRt -xCt +lUx iqt -yiN +jNR iqt -xCt -bte +rlr iqt -utp -sXz -qTx -qTx -fHX -nDS -bPa -kQP -kQP +ckB +iqt +lvh +ubj +xbZ +kZI +nbd +vKn +dbe +vQs +vQs hyW xOw xbd @@ -86498,17 +87182,16 @@ aaa aaa aaa aaa -aaa qvJ adD eks -fpH -vhU -eNU -aQE +jox +cVC +eZo +qmE jXu -tiK -qvl +whs +xkj jXu beo sLU @@ -86521,28 +87204,29 @@ qTf oor oor hDX -hDX -uSm -tmm -cYg -mmR -jRM -mNZ -hyd -aok -jRM +hrC +kuS +muq +oRO bgx +uYB +aok +mml +aok +uEP +aok +cfH mmR -wRj -qIK -cjJ -cjJ -cjJ -cjJ -cLc -vkR -kQP -jmN +vlk +fqe +vHa +nNB +qoY +fAk +rPp +ljH +vQs +mQa xOw mux pOa @@ -86753,23 +87437,22 @@ raz aaa aaa aaa -aaa tOm pma pma pma hZQ -lbZ +ntm +kHV jXu jXu jXu jXu +tCF jXu -bSm jXu jXu jXu -hKg hzb cLj kRe @@ -86777,28 +87460,29 @@ cBZ wyP oor jqr -wfU -hDX -hDX -eLb -wND +xLA +hrC +hrC mmR -dka +kwh +iqt +nut aok -lUI -pvP -dka -bgx +pkM +aok +jBu +aok +hKQ mmR -nyk -qIK -hKq -iNk -iLV -mQR -lud -eKk -kQP +gxu +vQs +vde +tGU +hYl +caV +rPp +eIc +vQs hyW qzC kOQ @@ -86866,7 +87550,7 @@ gnL ckz dWA ecz -fIR +mGE aaa lMJ aaa @@ -87008,55 +87692,55 @@ iOr aaa raz aaa -aaa tOm tOm tOm ntM pgJ -fRZ +pyR hZQ -ybi +uQL twr gQg pCk twr -sHu -xkX -pWY -twr +xgB +hJO +duG +omV fhn -hKg +jXu jBp -uFk +wsk qHt dxo hlE -jXu -tBU -kOX -sIb +oor +aKN +uha +tMY hDX -cZu -bgx -mmR -aok -aok aok +sbP +bgx aok aok -bgx -mmR -mgb -kQP -kQP -kQP -qIK -qIK -kQP -kQP -kQP -jFi +xtH +qDW +qDW +qDW +ocS +eaA +vAT +xGT +xGT +bHv +vQs +vQs +vQs +vQs +vQs +upM pqc rkM pOa @@ -87265,55 +87949,55 @@ iOr aaa raz raz -raz -grI -hsp -iJm -hsp +pQh +uEs +qCM +uEs aFZ ktG -mIg -qMD -vMd -fUr +hQy +hYG +dwH fUr fUr fUr fUr -aps -wTu -fMr -hKg +bkJ +iIE +cAf +dve +jXu pVV -cgk +qqr iId tkf wZo -jXu +oor hvo -cHN -mXX +uwM +uwf oor -wSP +ylO +tYU hLL -hod dfk dfk -xDQ -tmm -aok -bgx -mmR -pyZ -pOb -xOj -sVp -sVp -sVp -sVp -bLC -eVh -hKw +rQD +nsh +vWD +sCc +liU +nrB +smB +tik +sxk +xwa +fjw +cwY +sbF +flG +bzH +hyW xOw wAk pOa @@ -87340,7 +88024,7 @@ kRA jUb xYq dqN -cIS +baG jUb rvI jUb @@ -87522,55 +88206,55 @@ iOr iOr aaa aaa -aaa tOm tOm tOm -xZy -btB -qwM +tsi +hTG +gJM srk qGP sHu -gib +pkT sHu -rMp +eMY cVL jXu -uur -xgB +kIJ +sPO twr +jXu hKg -hKg -jJu +oMx hKg hKg hKg -jXu +oor jmR -xap -oUx -knT -ivX -bgx -edA -fkC -dBv -cdY -wUC -dfk -hLL -hod -dfk +hWK +fea +iHS +cqy +ebg +ebg +fwb +kQO +qvV +tMn +sFi +cHG +snZ +xgx dfk +uyf edN -cSb -hYx +uya yhL +nQR hYx -vIt +eMf iev -mkb +sus sly nxF sVY @@ -87777,8 +88461,7 @@ dTQ rOP jGO iOr -aUn -aUn +mxQ rrt rrt rrt @@ -87789,42 +88472,43 @@ pma hZQ jXu jXu -nzg +hsx jXu jXu jXu jXu -btP +alA lpS lpS -ykL lpS +ykL lpS lpS -kSp +xoj lls jXu jXu jXu jXu -jXu -vQs -qgr -qFv -vQs -vQs -vQs -vQs -jLf +cbz +bLY +gQa +dit +uBj +uBj +bDn +xzx +hIp +qCS iqt mmR -kaf -auO -xXf -gOb -jld -uxf -qCa +rzo +quT +bzH +gPN +ebd +ebd +jBy bzH bzH bBy @@ -88035,8 +88719,7 @@ jjM ilg cmB aaa -mji -aaa +aUn aaa aaa aaa @@ -88046,45 +88729,46 @@ tdg hkj sQp cLN -lfY +qHa ujT dYi iDG jXu -bSm -sHu +fpn +knQ bPM sHu mkz jXu -atS +bPM rNP mgv -mWE +qgl lpS lpS bkF -jXu -uFZ -hen -vzR -ilY -cSq -yis -vQs -wdM -sai -mJo -bzH -bzH -bzH -ocn -aOg -piB +cbz +jMb +kKO +vQT +hBo +gWz +kQv +cgZ +hIp +ksM +lQf +vKC +fwd +mwP +oTw +nLx +sHX +uyh hvB sqt iev -obb +djn iVs fLd fpy @@ -88298,18 +88982,17 @@ aaa aaa aaa aaa -aaa tdg hkj hkj kuW -vUx -dxl +uth +xBq mUF obF jXu -oyO -jXu +fpn +hvz jXu jXu jXu @@ -88320,28 +89003,29 @@ jXu jXu jXu kAI -vEk -jXu -vmm -hen -vzR -jDb -kod -lTZ -vQs -aUj -rVK -baW +gfa +eOl +vjg +mLp +tvv +xTe +xTe +tvv +kQP +wdM +asT +dHi +kkB +lVp bzH -mNx -gOb -wCT -qMi -ioz +bzH +mzj +sml +rmL hOh lAi bzH -cSF +azz uxa mmm vjv @@ -88555,7 +89239,6 @@ sjP sjP lMJ lMJ -lMJ tdg hkj xQO @@ -88565,8 +89248,8 @@ qST xMx qrF jXu -wfn -jXu +vxO +hvz aaa aaa aaf @@ -88577,24 +89260,25 @@ aaa aaa jXu twr -gkS -jXu -lsu -nvg -vzR -dKY -hGv -mNQ -vQs -aUk +nsT +heR +kQP +hqD +kQP +kEk +nwm +izI +kQP +eRd +vlP qxJ -aXq -ldC -qMA -piB -epv -jgQ -djG +vNp +hvk +bzH +dGC +uud +wbW +fWn jHW vjU bzH @@ -88794,7 +89478,7 @@ tGX aXa aKl lds -mzm +isi hXQ bVF fGP @@ -88812,18 +89496,17 @@ dMH sjP aaa aaa -aaa tdg tdg tdg fru -wrG +elz uzb phP rgL jXu -tfR -jXu +paU +hvz aaf rlU rlU @@ -88834,24 +89517,25 @@ rlU aaf jXu sxn -mgv -cUD -cfv -jrx -pEA -pQI -puD -vQs -vQs -pQD +ciE +dUd +rtz +fpV +tQp +bEK +ydp +cNb +mXO +kUG +rVn qxJ -aXq -agQ -fWU -piB -uid -orh -gBN +sik +ryV +paQ +wyS +ekb +wpO +wbW ubn hld iev @@ -89069,7 +89753,6 @@ egg sjP aaa aaa -aaa lMJ aaa aaa @@ -89079,8 +89762,8 @@ jXu jXu jXu jXu -ybi -jXu +otQ +hvz aaa rlU dfl @@ -89091,28 +89774,29 @@ rlU aaa jXu jXu -lJR -jXu -wtQ -nBI -fDo -xIZ -bNU -vQs -dhy +ken +kQP +hQc +dFg +wyV +iqo +wyV +cJt +mXO +alu aUm jvv -uvH -lwn -ioz -ioz -mwN -lIM -gBN +bNN +rod +mhM +dfK +wuo +tPW +ayz bLj rnh iev -gCn +nJJ nqo qsX sVY @@ -89326,7 +90010,6 @@ dSB sjP sjP aaa -aaa lMJ aaa aaa @@ -89336,40 +90019,41 @@ sOP twr fnJ jXu -xVc -fsQ +wgm +mKr aaa rlU qrg cpi cpi -fdI +nSn qpD -aEH -aEH +qYC +pNC uqX -uwx -vQs -stw -mxh -gUX -srl -oQx -uAp -dhy -rVn +loR +kQP +ewc +dFg +wyV +wyV +wyV +oxX +mXO +vdW +oac fhB -jdn +hxd +dHz aqG -hlb -piB -bnv -cOB -gBN -oYz +geR +ekb +lsU +bQl +pCs bzH bzH -unj +pNk ivB qaw sVY @@ -89586,47 +90270,47 @@ sjP sjP sjP aaa -aaa jXu uUu dEH pOi bMu jXu -loQ -fsQ +agi +mKr aaa rlU trx uWn -uDw -ddr -iCz -pDX -qyo +spf +czD +lBg +tWU +wWe aTU -jSm -vQs -pVi -kod -dXp -szu -voS -vQs -cyR -rVn +jzE +kQP +mtk +aSv +aLW +jle +ukm +dLh +kQP +pUk +upN qxJ -mgJ -aqG -iyv -bGt -uRu -piB -gBN -haq -nht -aqG -nQw +ajq +eml +bzH +bvl +nKu +gxM +jRo +qCx +roG +bzH +mnP tEr iOc sVY @@ -89843,47 +90527,47 @@ gEl tMJ sjP aaa -aaa nmg hwo -hcx +rBY knQ -mkd -udC -mZy -fsQ +cDV +sLf +uEA +mKr aaa rlU -cTU +vbF wHW wHW -uSL +okj rlU -aEH -aEH +qYC +pNC lpt -uwx -vQs -kdA -kdA -vQs -vQs -vQs -vQs -clA -uTI -iRR -srK -bzH +cNg +kQP +kQP +mXO +mXO +kQP +kQP +kQP +kQP +rcR +hIu +liX +jUs +nDG bzH bzH -raC -hRD -gBN -piB -jnR -lBz -sXr +usJ +kFa +lak +rUd +cXE +ykb +cJS ybn fLp sVY @@ -90100,47 +90784,47 @@ fpj nxU sjP aaa -aaa jXu uUu wQj jXu jXu jXu -oyO -fsQ +fOB +jXu aaa rlU -vis -mCi +rrJ +dhz ixT oXK rlU aaa aEH aHt -uwx -aIE -aMA -aMA -anW -fCO -hIE -suE -sUm +loR +hTM +aHt +aHt aHt -uwx -vpX -sIQ -fwZ +eaQ +aHt +qlW +jfg +lay +udU +isA +eKG +iit +pWb bzH -nZQ -wew -gBN -udI -eYL +wTv +sul +pkF +dtE +dSH aqG -oKy +mnP xOw iOc sVY @@ -90357,14 +91041,13 @@ wZz wZz sjP lMJ -lMJ jXu jXu jXu jXu -qnX -nTP -uHp +sHu +lRA +lFF jXu aaf rlU @@ -90376,8 +91059,9 @@ rlU lMJ aEH rhW -grR -xAZ +oRR +lug +cGq wcs hMn ygR @@ -90388,16 +91072,16 @@ lgg kWP lgg uLE -kPX -moQ +cSu +nPN bzH -cnd aqG -tjN +aqG +mxx aqG aqG aqG -pvL +uGU mFo npY qwR @@ -90622,7 +91306,6 @@ knQ siY jXu jXu -jXu aaa aaa aaa @@ -90632,6 +91315,7 @@ aaa aaa aaa guX +guX xUK guX cFp @@ -90646,15 +91330,15 @@ hSg uTN uVm sSV -wRP -bBa -gji -gji -wxg -gji -hDj -hDj -aSd +alw +anX +nyb +nyb +xYT +nyb +nyb +nyb +qjH vhB guR lsf @@ -90872,7 +91556,7 @@ eWA sjP aaa aaa -bxr +tlg jXu rOz sHu @@ -90900,7 +91584,7 @@ jfX aUC iFC iBt -gWL +nrM yaE tmK htd @@ -91978,7 +92662,7 @@ rQd cJm jGw bJG -vPO +gbn bqX ulR qXL @@ -91991,7 +92675,7 @@ qXL oqk xZB hIJ -vhb +gTx lrZ kiz nmQ @@ -92212,7 +92896,7 @@ jIg dTr rIL bwN -avJ +omd ukk rGm gqX @@ -92222,7 +92906,7 @@ qPJ luN wde jJd -rqc +dQL umS qPJ bgS @@ -92476,7 +93160,7 @@ gqX htd oGK qPJ -ksZ +blc waH vbV ixr @@ -93168,7 +93852,7 @@ sjP sjP sjP sjP -ppm +dkX yey jTZ aBL @@ -93464,12 +94148,12 @@ aaa aJS oOl rxx -viF +xFZ aPv oWF eQg aJS -ktt +mSI aUx qhF htd @@ -93492,7 +94176,7 @@ ndS urA pFG gBD -xxn +dzX fRu hVE xXw @@ -93978,7 +94662,7 @@ aaa aJS bpu wzH -nwL +nIa aPv iIQ aRV @@ -94210,7 +94894,7 @@ lAM aaa aaa rJB -kaU +xTr nqD sfK rTw @@ -94450,7 +95134,7 @@ aaa aaa aaa aaa -nWF +sKY aaa sIe gkn @@ -94767,7 +95451,7 @@ nxO qXF qXF aMB -tVk +eIf duI jnt cdC @@ -94800,7 +95484,7 @@ keK lXA mVE hxq -nJn +jVe nqB kxa eIO @@ -95024,7 +95708,7 @@ dUj gGy hmq fUj -mES +qcD duI duI lwt @@ -95052,7 +95736,7 @@ nxy nxy aYJ hEc -bFN +pJc qJn hYA jsh @@ -95281,7 +95965,7 @@ gGy qVc dMY jYL -lUo +tpA aAt duI pCO @@ -95493,7 +96177,7 @@ aaa jLw aaa aaa -cTk +aLq aeq dXs tJE @@ -95553,7 +96237,7 @@ haP jzN fEC eQe -oQS +qtq iAA oSo cgF @@ -95857,7 +96541,7 @@ qFP tAx mZC hdZ -eTv +bDp mIi bfl bfl @@ -96022,7 +96706,7 @@ ewj bkl wZU pMy -ouU +oGH orx eeq sDS @@ -96068,7 +96752,7 @@ jzN wyp gzi cyU -wpo +sKb oSo iXb kdx @@ -96114,7 +96798,7 @@ dXQ kSD vGN wpr -obV +tDU mGA xMC izG @@ -96260,7 +96944,7 @@ aaa aaa aaa aaa -tLb +bJH iTZ ahj ahj @@ -96594,7 +97278,7 @@ rgZ suW hJF cZK -ihF +euw cXg nyy gVl @@ -96630,7 +97314,7 @@ jjs dKC xLu dKC -ezP +cbp ctL oPD iUm @@ -97629,7 +98313,7 @@ cBV xlv eut bUo -jrR +tjc jtS bFH mMl @@ -98124,7 +98808,7 @@ nse bmb lwg aAK -qGc +xbg tvE qJU hPM @@ -98617,7 +99301,7 @@ kGq syo oOz tLi -nnh +rwq tyY vFx tyY @@ -98645,7 +99329,7 @@ kON ylQ bGC wHu -igr +gVE ibw ibw nIP @@ -98843,7 +99527,7 @@ wVt jzD wxj kZG -jHN +ihN kYg kYg ylZ @@ -98884,7 +99568,7 @@ jxv sqJ gPA lZM -giR +qrw syo lSz vQe @@ -99114,7 +99798,7 @@ xNo woV bkZ xNU -iJd +uZL nVy tGI daC @@ -99371,8 +100055,8 @@ jAP fEn xXC xNU -iUb -exr +eJd +xlf lWg byw glv @@ -99596,7 +100280,7 @@ aaa aaa aaa aaa -tLb +bJH gdb ikZ gdb @@ -99680,7 +100364,7 @@ otB bdv jXK sQB -gLU +sat buT oOB kZx @@ -99710,12 +100394,12 @@ fhi fhi uEo fiS -gyQ -eRn -gyQ -gyQ -gyQ -gyQ +rok +bFa +rok +rok +rok +rok lMJ uGg nFa @@ -99874,11 +100558,11 @@ pyY sNB xWm mLL -oIO +xWr vkb cLl sWV -gXg +unK mOt clq aKa @@ -99967,12 +100651,12 @@ huj fhi xEU iqx -xYZ -gil -xYZ -oet -dXU -kgC +hph +sOp +hph +lHu +vqC +swB lMJ uGg nFa @@ -100224,12 +100908,12 @@ fhi fhi fhi twy -nJA -nZL -bEv -cgP -rtj -kgC +gyc +gnW +vbi +izb +cYj +swB lMJ uGg nFa @@ -100473,20 +101157,20 @@ jVy jTN vAH kIY -cyp +pCR gyQ rbD jwj ujk -jvo -aHH +oJK +vrp iYE -dTN -dEF -dTN -cOT -dXU -kgC +dKx +sHJ +dKx +amp +vqC +swB lMJ uGg wpn @@ -100643,7 +101327,7 @@ gMZ cju gMZ mFf -wne +mYb sHt qrn qRg @@ -101222,7 +101906,7 @@ ftj wXF doM tZo -vCR +bXg oFT gvS oYZ @@ -101681,7 +102365,7 @@ fRW qnS uxb hAk -gzO +uwT eqn jSb kAF @@ -102536,7 +103220,7 @@ guG iAs coe tfV -mtM +nRQ oLS lMJ aaa @@ -102768,7 +103452,7 @@ sIW bRb cKm tAg -xxh +byE poq vYE lAH @@ -103025,7 +103709,7 @@ sIW jSk rkT tAg -yfa +vEv pkx hBB wnY @@ -104078,8 +104762,8 @@ qBF nCG tqx bOm -jPi -uZM +fhU +cdS kYD aaa aaa @@ -105046,7 +105730,7 @@ aSk tlZ lje klZ -bqC +ooM fqD wSs pur @@ -105544,7 +106228,7 @@ fzr iCJ qgy ldg -ivb +bYN bYN krt qXB @@ -105801,9 +106485,9 @@ wRF jzC oCO xUE -jGE +jYu +vmU xyI -wRF qXB kbo qXB @@ -106055,12 +106739,12 @@ cUP mil lqQ lbH -lJa mie pRM +ivb otG -jYu -lJa +ftQ +xwB qXB psZ qXB @@ -106087,7 +106771,7 @@ rHz aFW dqX qLp -bpY +liZ obG izZ tNQ @@ -106836,10 +107520,10 @@ psZ psZ qXB gAU -tXl +cDO oUK eRR -ryp +fAA cdX sDE hjS @@ -106850,7 +107534,7 @@ ggM ggM dLq lzL -aev +vag lzL lzL scG @@ -107140,7 +107824,7 @@ lMJ lMJ lMJ lMJ -uzl +piy aaa aaa aaa @@ -107593,7 +108277,7 @@ rpx dPy loA poc -ngY +oDH uXd tfg tfg @@ -107850,12 +108534,12 @@ oKx gLK joo sHT -rBe +rkx uXd dVc bYp gXu -oaC +hSi uXd gMG dWG @@ -107867,7 +108551,7 @@ nLz fEL rSi pCt -aRS +qHm sqE mEO gnS @@ -108378,7 +109062,7 @@ woL jLo nwC nLz -jEh +iSU hYE rEd sby @@ -108626,7 +109310,7 @@ cnK jPe dPy poc -jdB +afM cnK giH aJj @@ -108636,7 +109320,7 @@ fbf nie qtm fyJ -qVD +oWm cuc adz tUw @@ -108673,7 +109357,7 @@ svK yec xhb uQk -lYM +waf vzc gUY pnH @@ -109688,7 +110372,7 @@ dkC dwz dwz frE -afz +dzs uwQ siy lgL @@ -111215,8 +111899,8 @@ dRA wCe khu hUu -uWN -ggw +kxC +oMh mEG nRp dtY @@ -111729,9 +112413,9 @@ wsI fia sRW hKi -xbb +apO lLB -aJz +qRq rzT cWy xRZ @@ -112500,7 +113184,7 @@ rLZ fJy ygp tyE -gen +qNO bDq rRR laE @@ -112544,7 +113228,7 @@ kWc xiL bus hMv -iTQ +mRc vGq avx vBf @@ -112554,7 +113238,7 @@ qQJ vGq bjs gyI -lPS +stt xiL kvO bPB @@ -112769,7 +113453,7 @@ efd nwK fFC uVf -kRc +qqs gDq ich jnQ @@ -114085,7 +114769,7 @@ oyj xiL mtu lHh -iNK +tcc faD iWc cXP @@ -114095,7 +114779,7 @@ vvD cXP lVB iWc -gkC +nux xlH mtu xiL @@ -114855,19 +115539,19 @@ hbK hbK oyj xiL -rMe +lRs rwx vFh dac evD pJf -ycv +ebq tIe min min wFy ohD -bZb +naD xiL lmn hbK @@ -115115,13 +115799,13 @@ xiL hWa imw iHH -mcF +vap rrL rSW min ckI sCv -mDC +nDD toM eOP hWa @@ -115329,7 +116013,7 @@ twf lMJ lMJ blx -gFb +hHO aaa aaa fuu @@ -116144,7 +116828,7 @@ goW msN xiL jlU -rRo +kGR lyL mao mCu @@ -116401,7 +117085,7 @@ rDf uhs fjd jlU -lWS +wCE sZN msR xkv @@ -116614,7 +117298,7 @@ oAQ lMJ lMJ blx -gFb +hHO aaa aaa fuu @@ -116658,7 +117342,7 @@ rDf eUe eSb nnc -hdy +nnc nnc rvK nnc @@ -116915,11 +117599,11 @@ hbK mgS hbK jlU -mtu -mtu -gyK -mtu -mtu +gQv +gQv +hcj +gQv +gQv jlU hbK mTg @@ -117172,11 +117856,11 @@ tmU fGy wyo jlU -dLm -mtu -gyK -mtu -mtu +xBp +gQv +hcj +gQv +gQv jlU qgn mCV @@ -117429,11 +118113,11 @@ pWT rDf uLa jlU -mtu -mtu -jQz -nJr -mtu +gQv +gQv +wXO +hAd +gQv jlU lUS pHt @@ -117642,7 +118326,7 @@ oAQ lMJ lMJ blx -gFb +hHO aaa aaa aaa @@ -117686,11 +118370,11 @@ hbK wrc wrc jlU -mtu -mtu -mtu -mtu -mtu +gQv +gQv +gQv +gQv +gQv jlU wrc wrc @@ -117944,9 +118628,9 @@ aaa lMJ jlU jlU -bPu -aYl -kcu +gQv +wea +gQv jlU jlU lMJ @@ -122776,7 +123460,7 @@ uUX azv dKG bjQ -hac +nhU pQv tSP qiH @@ -123804,7 +124488,7 @@ iCV mCL pIE bjQ -kxq +dqy rNs tSP mZW @@ -124067,7 +124751,7 @@ txh bjQ giA hSe -itB +lBN pDe ueE jGr @@ -124578,7 +125262,7 @@ ldP xgE uFw tXz -hTt +jGN gfU gfU gfU diff --git a/_maps/map_files/Mining/Lavaland.dmm b/_maps/map_files/Mining/Lavaland.dmm index 11fdfaa697ca0..5bc3a711a1b03 100644 --- a/_maps/map_files/Mining/Lavaland.dmm +++ b/_maps/map_files/Mining/Lavaland.dmm @@ -343,6 +343,12 @@ /obj/structure/cable, /turf/open/floor/plating, /area/mine/maintenance/service) +"ct" = ( +/obj/structure/railing/wooden_fence{ + dir = 6 + }, +/turf/open/misc/hay/lavaland, +/area/lavaland/surface) "cw" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -639,6 +645,15 @@ }, /turf/open/misc/asteroid/basalt/lava_land_surface, /area/lavaland/surface/outdoors) +"ey" = ( +/obj/structure/lattice/catwalk/mining, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/item/toy/plush/shark{ + desc = "A plushie depicting a somewhat cartoonish shark. The tag calls it a 'hákarl', noting that it was made by an obscure furniture manufacturer in old Scandinavia. This one seems to have some cable wiring sticking out of its mouth." + }, +/turf/open/lava/smooth/lava_land_surface, +/area/lavaland/surface/outdoors) "ez" = ( /obj/structure/chair/comfy/teal{ dir = 4 @@ -991,15 +1006,15 @@ /obj/structure/cable, /obj/effect/decal/cleanable/dirt, /obj/structure/rack, -/obj/item/stock_parts/cell/high{ +/obj/item/stock_parts/power_store/cell/high{ pixel_x = 6; pixel_y = 7 }, -/obj/item/stock_parts/cell/high{ +/obj/item/stock_parts/power_store/cell/high{ pixel_x = -3; pixel_y = 5 }, -/obj/item/stock_parts/cell/high{ +/obj/item/stock_parts/power_store/cell/high{ pixel_x = 3 }, /turf/open/floor/plating, @@ -1299,6 +1314,9 @@ /obj/structure/stone_tile, /turf/open/misc/asteroid/basalt/lava_land_surface, /area/lavaland/surface/outdoors) +"hM" = ( +/turf/closed/wall/mineral/wood/nonmetal, +/area/lavaland/surface) "hR" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -1397,6 +1415,10 @@ /obj/item/clothing/glasses/meson, /turf/open/floor/iron/dark, /area/mine/storage/public) +"il" = ( +/obj/item/flashlight/lantern/on, +/turf/open/misc/hay/lavaland, +/area/lavaland/surface) "io" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -1669,6 +1691,12 @@ dir = 8 }, /area/mine/production) +"jX" = ( +/obj/structure/railing/wooden_fence{ + dir = 1 + }, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) "ka" = ( /obj/structure/table, /obj/machinery/newscaster/directional/north, @@ -1930,6 +1958,12 @@ }, /turf/open/lava/smooth/lava_land_surface, /area/lavaland/surface/outdoors) +"lt" = ( +/obj/structure/railing/wooden_fence{ + dir = 5 + }, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) "lv" = ( /obj/structure/stone_tile/block/cracked{ dir = 8 @@ -2027,10 +2061,11 @@ dir = 1 }, /obj/effect/mapping_helpers/airlock/unres, -/obj/effect/mapping_helpers/airlock/access/any/supply/mining_station, /obj/machinery/door/airlock/external/glass{ name = "Mining Shuttle Airlock" }, +/obj/effect/mapping_helpers/airlock/access/any/supply/mining, +/obj/effect/mapping_helpers/airlock/access/any/supply/mining, /turf/open/floor/iron/dark/textured_large, /area/mine/production) "lN" = ( @@ -2155,6 +2190,17 @@ }, /turf/open/misc/asteroid/basalt/lava_land_surface, /area/lavaland/surface/outdoors) +"mk" = ( +/obj/structure/table/wood, +/obj/item/raptor_dex{ + pixel_y = 13 + }, +/obj/item/raptor_dex{ + pixel_y = 7 + }, +/obj/item/raptor_dex, +/turf/open/misc/hay/lavaland, +/area/lavaland/surface) "ml" = ( /obj/structure/stone_tile/block/cracked{ dir = 8 @@ -3005,6 +3051,12 @@ dir = 4 }, /area/mine/laborcamp/quarters) +"qi" = ( +/obj/structure/railing/wooden_fence{ + dir = 4 + }, +/turf/open/misc/hay/lavaland, +/area/lavaland/surface) "qo" = ( /obj/machinery/door/airlock/glass{ name = "Equipment Storage" @@ -3145,17 +3197,6 @@ }, /turf/open/floor/iron/smooth, /area/mine/laborcamp) -"rr" = ( -/obj/structure/cable, -/obj/machinery/door/airlock/external{ - name = "Mining External Airlock" - }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ - cycle_id = "lavaland_services_north" - }, -/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance/departmental, -/turf/open/floor/plating, -/area/mine/maintenance/service) "rv" = ( /obj/effect/turf_decal/trimline/brown/filled/line, /turf/open/floor/iron/dark/smooth_edge{ @@ -3254,6 +3295,11 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/mine/maintenance/service) +"sa" = ( +/obj/structure/table/wood, +/obj/item/flashlight/lantern/on, +/turf/open/misc/hay/lavaland, +/area/lavaland/surface) "se" = ( /turf/open/floor/iron/dark/textured_large, /area/mine/eva) @@ -3350,6 +3396,10 @@ "sO" = ( /turf/open/floor/plating, /area/mine/maintenance/service) +"sQ" = ( +/obj/structure/ore_container/food_trough/raptor_trough, +/turf/open/misc/hay/lavaland, +/area/lavaland/surface) "sR" = ( /obj/machinery/light/small/directional/west, /obj/effect/decal/cleanable/dirt, @@ -3429,7 +3479,7 @@ name = "Mining Station Maintenance" }, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance/departmental, +/obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, /turf/open/floor/plating, /area/mine/maintenance/service) "ti" = ( @@ -3601,6 +3651,10 @@ }, /turf/open/floor/iron/white/smooth_edge, /area/mine/cafeteria) +"uw" = ( +/obj/effect/spawner/random/lavaland_mob/raptor, +/turf/open/misc/hay/lavaland, +/area/lavaland/surface) "ux" = ( /obj/machinery/door/airlock{ id_tag = "miningdorm1"; @@ -3682,7 +3736,7 @@ name = "Mining Station Maintenance" }, /obj/structure/cable, -/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance/departmental, +/obj/effect/mapping_helpers/airlock/access/all/engineering/general, /turf/open/floor/plating, /area/mine/maintenance/service) "vd" = ( @@ -4121,7 +4175,7 @@ name = "Mining Station Maintenance" }, /obj/structure/cable, -/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance/departmental, +/obj/effect/mapping_helpers/airlock/access/all/engineering/tcoms, /turf/open/floor/plating, /area/mine/maintenance/service/comms) "xJ" = ( @@ -4171,10 +4225,6 @@ dir = 1 }, /area/mine/storage/public) -"xX" = ( -/obj/structure/gulag_vent, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/lavaland/surface/outdoors) "yc" = ( /obj/docking_port/stationary{ dir = 2; @@ -4340,7 +4390,7 @@ /area/mine/maintenance/public/south) "zd" = ( /obj/effect/decal/cleanable/dirt, -/obj/item/stock_parts/cell/crap{ +/obj/item/stock_parts/power_store/cell/crap{ desc = "A legendary infinite-capacity power cell. This one looks like a poor quality AA battery with a coat of flaking gold paint."; icon_state = "icell"; name = "infinite-capacity power cell" @@ -4348,6 +4398,10 @@ /obj/structure/rack, /turf/open/floor/plating, /area/mine/maintenance/service) +"ze" = ( +/obj/effect/spawner/random/lavaland_mob/raptor, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) "zf" = ( /obj/machinery/door/airlock{ name = "Restroom" @@ -4404,6 +4458,10 @@ /obj/item/cigbutt, /turf/open/floor/iron/smooth, /area/mine/laborcamp) +"zs" = ( +/obj/structure/railing/wooden_fence, +/turf/open/misc/hay/lavaland, +/area/lavaland/surface) "zw" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -4502,7 +4560,7 @@ /turf/open/misc/asteroid/basalt/lava_land_surface, /area/lavaland/surface/outdoors) "Af" = ( -/obj/machinery/mineral/processing_unit/gulag{ +/obj/machinery/mineral/processing_unit{ dir = 1; input_dir = 8; output_dir = 4 @@ -4739,6 +4797,12 @@ }, /turf/open/floor/iron/checker, /area/mine/cafeteria) +"Cv" = ( +/obj/structure/railing/wooden_fence{ + dir = 5 + }, +/turf/open/misc/hay/lavaland, +/area/lavaland/surface) "Cz" = ( /obj/machinery/door/airlock/medical/glass{ name = "Infirmary" @@ -4913,6 +4977,12 @@ "Dz" = ( /turf/closed/wall, /area/mine/medical) +"DB" = ( +/obj/structure/railing/wooden_fence{ + dir = 8 + }, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) "DF" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -5317,6 +5387,12 @@ dir = 8 }, /area/mine/production) +"GG" = ( +/obj/structure/railing/wooden_fence{ + dir = 9 + }, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) "GH" = ( /obj/machinery/door/airlock/glass{ name = "Arrival Lounge" @@ -5413,7 +5489,7 @@ /area/mine/lounge) "Hz" = ( /obj/effect/decal/cleanable/dirt, -/obj/structure/toilet/secret{ +/obj/structure/toilet{ dir = 4 }, /obj/effect/mob_spawn/corpse/human/skeleton, @@ -6550,6 +6626,12 @@ /obj/machinery/computer/order_console/mining, /turf/open/floor/iron/dark, /area/mine/production) +"NK" = ( +/obj/structure/railing/wooden_fence{ + dir = 1 + }, +/turf/open/misc/hay/lavaland, +/area/lavaland/surface) "NL" = ( /obj/structure/railing, /obj/structure/lattice/catwalk/mining, @@ -6568,6 +6650,9 @@ dir = 1 }, /area/mine/laborcamp/production) +"NS" = ( +/turf/open/misc/hay/lavaland, +/area/lavaland/surface) "NT" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -6643,8 +6728,8 @@ /obj/machinery/cell_charger{ pixel_y = 3 }, -/obj/item/stock_parts/cell/high, -/obj/item/stock_parts/cell/high{ +/obj/item/stock_parts/power_store/cell/high, +/obj/item/stock_parts/power_store/cell/high{ pixel_y = 3 }, /obj/effect/turf_decal/trimline/purple/filled/line{ @@ -6729,6 +6814,17 @@ /obj/structure/cable, /turf/open/floor/iron/white/textured_large, /area/mine/cafeteria) +"OW" = ( +/obj/structure/table/wood, +/obj/item/soap/deluxe{ + pixel_y = 11 + }, +/obj/item/soap/deluxe{ + pixel_y = 6 + }, +/obj/item/soap/deluxe, +/turf/open/misc/hay/lavaland, +/area/lavaland/surface) "OZ" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -7136,17 +7232,6 @@ /obj/structure/closet/toolcloset, /turf/open/floor/plating, /area/mine/maintenance/service) -"Rx" = ( -/obj/machinery/door/airlock/external{ - name = "Mining External Airlock" - }, -/obj/structure/disposalpipe/segment, -/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ - cycle_id = "lavaland_services_north" - }, -/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance/departmental, -/turf/open/floor/plating, -/area/mine/maintenance/service) "RB" = ( /obj/structure/railing/corner{ dir = 1 @@ -7197,7 +7282,6 @@ "RW" = ( /obj/effect/mapping_helpers/airlock/cyclelink_helper, /obj/effect/mapping_helpers/airlock/unres, -/obj/effect/mapping_helpers/airlock/access/any/supply/mining_station, /obj/effect/turf_decal/trimline/brown/filled/line{ dir = 1 }, @@ -7207,6 +7291,7 @@ /obj/machinery/door/airlock/external/glass{ name = "Mining Shuttle Airlock" }, +/obj/effect/mapping_helpers/airlock/access/any/supply/mining, /turf/open/floor/iron/dark/textured_large, /area/mine/production) "RY" = ( @@ -7223,7 +7308,7 @@ }, /area/mine/laborcamp) "Sc" = ( -/obj/item/clothing/mask/cigarette/robust{ +/obj/item/cigarette/robust{ pixel_x = 3; pixel_y = -10 }, @@ -7431,6 +7516,12 @@ dir = 4 }, /area/mine/production) +"Tt" = ( +/obj/structure/railing/wooden_fence{ + dir = 10 + }, +/turf/open/misc/hay/lavaland, +/area/lavaland/surface) "Tu" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -7502,7 +7593,7 @@ /obj/machinery/door/airlock/maintenance{ name = "Mining Station Maintenance" }, -/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance/departmental, +/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, /turf/open/floor/plating, /area/mine/maintenance/service) "TW" = ( @@ -7517,7 +7608,7 @@ /turf/open/floor/plating, /area/mine/laborcamp/security/maintenance) "TX" = ( -/obj/item/clothing/mask/cigarette/robust{ +/obj/item/cigarette/robust{ pixel_x = 8; pixel_y = 8 }, @@ -7621,6 +7712,12 @@ }, /turf/open/floor/iron/freezer, /area/mine/living_quarters) +"UI" = ( +/obj/structure/railing/wooden_fence{ + dir = 4 + }, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) "UK" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/siding/wideplating_new{ @@ -7698,6 +7795,12 @@ }, /turf/open/misc/asteroid/basalt/lava_land_surface, /area/lavaland/surface/outdoors) +"Vd" = ( +/obj/structure/railing/wooden_fence{ + dir = 9 + }, +/turf/open/misc/hay/lavaland, +/area/lavaland/surface) "Ve" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/dark/textured_large, @@ -7841,6 +7944,12 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/mine/maintenance/labor) +"VP" = ( +/obj/structure/railing/wooden_fence{ + dir = 8 + }, +/turf/open/misc/hay/lavaland, +/area/lavaland/surface) "VS" = ( /obj/machinery/hydroponics/constructable, /obj/effect/decal/cleanable/dirt, @@ -8005,15 +8114,6 @@ /obj/effect/mapping_helpers/airlock/access/any/supply/mining_station, /turf/open/floor/plating, /area/mine/storage) -"Xb" = ( -/obj/structure/lattice/catwalk/mining, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/item/toy/plush/shark{ - desc = "A plushie depicting a somewhat cartoonish shark. The tag calls it a 'hákarl', noting that it was made by an obscure furniture manufacturer in old Scandinavia. This one seems to have some cable wiring sticking out of its mouth." - }, -/turf/open/lava/smooth/lava_land_surface, -/area/lavaland/surface/outdoors) "Xd" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 1 @@ -22604,7 +22704,7 @@ uU uU uU pU -xX +pU pU ff Gf @@ -29810,7 +29910,7 @@ Xw aj aj aj -Xb +ey aj aj aj @@ -39029,7 +39129,7 @@ pU Dx cm FL -Rx +cm Ao Ao aW @@ -39286,7 +39386,7 @@ pU aD cV fi -rr +cV Jh cr JS @@ -47816,7 +47916,7 @@ aj aj aj pU -aj +pU aj aj aj @@ -49095,15 +49195,15 @@ aj aj aj aj -aj -aj -aj pU pU -aj -aj -aj -aj +pU +pU +pU +pU +pU +pU +pU aj aj "} @@ -49351,18 +49451,18 @@ aj aj aj aj -aj -aj -aj -aj -aj -aj -aj -aj -aj -aj -aj -aj +GG +DB +DB +hM +hM +hM +hM +hM +hM +hM +hM +hM "} (160,1,1) = {" aa @@ -49607,19 +49707,19 @@ aj aj aj aj -aj -aj -aj -aj pU -aj -aj -aj -aj -aj -aj -aj -aj +jX +pU +pU +NK +sQ +NS +zs +NS +NS +sQ +NS +hM "} (161,1,1) = {" aa @@ -49864,19 +49964,19 @@ aj aj aj aj -aj -aj -aj pU -aj -aj -aj -aj -aj -aj -aj -aj -aj +jX +pU +pU +NK +il +NS +zs +NS +NS +il +NS +hM "} (162,1,1) = {" aa @@ -50121,19 +50221,19 @@ aj aj aj aj -aj -aj pU +jX pU -aj -aj -aj -aj -aj -aj -aj -aj -aj +pU +NK +NS +NS +zs +NS +NS +NS +NS +hM "} (163,1,1) = {" aa @@ -50376,21 +50476,21 @@ aj aj pU aj -aj -aj -aj -aj -aj -aj -aj -aj -aj -aj -aj -aj -aj -aj -aj +pU +pU +pU +jX +pU +pU +Cv +qi +NS +ct +NS +NS +qi +qi +hM "} (164,1,1) = {" aa @@ -50633,21 +50733,21 @@ aj aj pU pU -aj -aj -aj -aj -aj -aj pU pU -aj -aj -aj -aj -aj -aj -aj +pU +pU +ze +pU +NS +NS +NS +NS +NS +uw +NS +NS +hM "} (165,1,1) = {" aa @@ -50892,19 +50992,19 @@ pU pU pU pU -aj -aj pU -aj -aj -aj -aj -aj -aj -aj -aj -aj -aj +pU +pU +pU +NS +mk +sa +NS +NS +NS +OW +sa +hM "} (166,1,1) = {" aa @@ -51151,17 +51251,17 @@ pU pU pU pU -aj -aj -aj -aj -aj -aj -aj -aj -aj -aj -aj +pU +pU +NS +NS +uw +NS +NS +NS +NS +NS +hM "} (167,1,1) = {" aa @@ -51407,18 +51507,18 @@ pU pU pU pU +jX pU -aj -aj -aj -aj -aj -aj -aj -aj -aj -aj -aj +pU +Vd +VP +NS +Tt +NS +NS +VP +VP +hM "} (168,1,1) = {" aa @@ -51664,18 +51764,18 @@ pU pU pU pU -aj -aj -aj -aj -aj -aj -aj -aj -aj -aj -aj -aj +jX +pU +pU +NK +NS +NS +zs +NS +NS +NS +NS +hM "} (169,1,1) = {" aa @@ -51920,19 +52020,19 @@ pU pU pU pU -aj -aj -aj -aj -aj -aj -aj -aj -aj -aj -aj -aj -aj +pU +jX +pU +pU +NK +il +NS +zs +NS +NS +il +NS +hM "} (170,1,1) = {" aa @@ -52177,19 +52277,19 @@ pU pU pU pU -aj -aj -aj -aj -aj -aj -aj -aj -aj -aj -aj -aj -aj +pU +jX +pU +pU +NK +sQ +NS +zs +NS +NS +sQ +NS +hM "} (171,1,1) = {" aa @@ -52434,19 +52534,19 @@ pU pU pU pU -aj -aj -aj -aj -aj -aj pU -aj -aj -aj -aj -aj -aj +lt +UI +UI +hM +hM +hM +hM +hM +hM +hM +hM +hM "} (172,1,1) = {" aa @@ -52692,10 +52792,10 @@ pU pU pU pU -aj -aj -aj -aj +pU +pU +pU +pU aj aj aj @@ -52949,16 +53049,16 @@ pU pU pU pU -pU -pU aj aj aj aj aj -pU aj aj +pU +aj +pU aj aj "} diff --git a/_maps/map_files/NorthStar/north_star.dmm b/_maps/map_files/NorthStar/north_star.dmm index db9126fef7fd0..098382a356265 100644 --- a/_maps/map_files/NorthStar/north_star.dmm +++ b/_maps/map_files/NorthStar/north_star.dmm @@ -91,14 +91,6 @@ /turf/open/floor/iron/smooth, /area/station/cargo/sorting) "aaU" = ( -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/trimline/blue/filled/corner{ - dir = 8 - }, /turf/open/floor/iron/white, /area/station/medical/treatment_center) "aaV" = ( @@ -210,12 +202,6 @@ /obj/effect/landmark/navigate_destination/dockarrival, /turf/open/floor/iron/textured_large, /area/station/hallway/secondary/entry) -"acl" = ( -/obj/structure/railing{ - dir = 8 - }, -/turf/open/space/openspace, -/area/space) "acp" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, @@ -290,15 +276,6 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/pod/light, /area/station/maintenance/floor3/starboard/fore) -"acL" = ( -/obj/structure/table/wood, -/obj/item/clothing/mask/cigarette/cigar/cohiba, -/obj/effect/turf_decal/trimline/blue/line{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/blue/line, -/turf/open/floor/carpet/blue, -/area/station/command/meeting_room) "adq" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -360,15 +337,6 @@ }, /turf/open/floor/iron/dark/smooth_large, /area/station/service/bar) -"ael" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 8 - }, -/turf/open/floor/iron/white, -/area/station/medical/medbay/lobby) "aeu" = ( /obj/machinery/power/terminal{ dir = 1 @@ -992,7 +960,12 @@ /turf/open/floor/plating, /area/station/construction/mining/aux_base) "amM" = ( -/obj/machinery/light/floor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/effect/turf_decal/siding/blue, +/obj/machinery/medical_kiosk, +/obj/effect/turf_decal/delivery, /turf/open/floor/iron/white, /area/station/medical/medbay/lobby) "anb" = ( @@ -1428,10 +1401,18 @@ /turf/open/floor/catwalk_floor, /area/station/maintenance/floor1/port) "ask" = ( -/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, -/turf/open/floor/plating, -/area/station/medical/medbay/lobby) +/obj/machinery/camera/directional/north{ + c_tag = "Medbay - Treatment Center"; + name = "medbay camera"; + network = list("ss13","medbay") + }, +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/machinery/light/directional/north, +/turf/open/floor/iron/white/textured, +/area/station/medical/treatment_center) "asl" = ( /obj/machinery/door/window/left/directional/west{ name = "Cargo Conveyor Access"; @@ -2449,17 +2430,17 @@ /area/station/command/meeting_room) "aGr" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/structure/railing{ - dir = 1 +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/structure/table/reinforced/rglass, +/obj/item/clothing/glasses/hud/health, +/obj/item/clothing/glasses/hud/health{ + pixel_y = 3 }, -/obj/structure/chair/sofa/bench/solo, -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 1 +/obj/item/clothing/glasses/hud/health{ + pixel_y = 6 }, -/turf/open/floor/iron/white, -/area/station/medical/medbay/lobby) +/turf/open/floor/iron/white/textured, +/area/station/medical/treatment_center) "aGw" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -2578,11 +2559,9 @@ /turf/open/floor/plating, /area/station/security/prison/work) "aHK" = ( -/obj/effect/turf_decal/tile/blue/fourcorners, -/obj/structure/table/glass, -/obj/item/bonesetter, -/obj/item/stack/medical/bone_gel, -/turf/open/floor/iron/white/textured, +/obj/machinery/light/directional/east, +/obj/structure/closet/secure_closet/medical2, +/turf/open/floor/iron/white, /area/station/medical/treatment_center) "aHM" = ( /obj/effect/turf_decal/bot, @@ -2715,28 +2694,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/textured_large, /area/station/cargo/storage) -"aJO" = ( -/obj/structure/window/reinforced/plasma/spawner/directional/east, -/obj/structure/table/reinforced/plasmarglass, -/obj/item/stock_parts/cell/lead{ - pixel_x = -5; - pixel_y = 8 - }, -/obj/item/usb_cable{ - name = "jumper cable"; - pixel_x = -10; - pixel_y = 12 - }, -/obj/item/lead_pipe{ - pixel_x = -5 - }, -/obj/item/reagent_containers/spray/cleaner{ - pixel_x = 6; - pixel_y = 7 - }, -/obj/item/reagent_containers/syringe, -/turf/open/floor/pod/dark, -/area/station/service/kitchen/abandoned) "aJT" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -3001,6 +2958,13 @@ dir = 1 }, /area/station/hallway/floor2/aft) +"aOq" = ( +/obj/item/fishing_rod, +/obj/structure/closet, +/obj/effect/spawner/random/maintenance/three, +/obj/item/cigarette/pipe, +/turf/open/floor/pod/light, +/area/station/maintenance/floor2/starboard/fore) "aOt" = ( /obj/structure/railing{ dir = 1 @@ -3247,25 +3211,12 @@ }, /turf/open/floor/engine/xenobio, /area/station/science/xenobiology) -"aRl" = ( -/obj/machinery/door/airlock/highsecurity{ - name = "AI Upload" - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/effect/mapping_helpers/airlock/access/any/command/ai_upload, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/ai_monitored/turret_protected/ai_upload_foyer) "aRz" = ( -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 8 +/obj/effect/turf_decal/trimline/blue/filled/corner{ + dir = 1 }, -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 4 +/obj/effect/turf_decal/bot_white{ + color = "#74b2d3" }, /turf/open/floor/iron/white, /area/station/medical/treatment_center) @@ -3276,20 +3227,6 @@ /obj/machinery/newscaster/directional/north, /turf/open/floor/iron/dark, /area/station/maintenance/disposal/incinerator) -"aRG" = ( -/obj/structure/table, -/obj/machinery/cell_charger, -/obj/item/stock_parts/cell/high, -/obj/effect/turf_decal/stripes/white/line{ - dir = 4 - }, -/obj/item/folder/white{ - pixel_y = 13 - }, -/obj/machinery/power/apc/auto_name/directional/west, -/obj/structure/cable, -/turf/open/floor/iron/dark, -/area/station/science/lab) "aRI" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -3423,18 +3360,29 @@ /turf/closed/wall/r_wall, /area/station/science/ordnance/burnchamber) "aTc" = ( -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 4 - }, +/obj/effect/turf_decal/siding/white, +/obj/machinery/power/apc/auto_name/directional/north, /obj/structure/cable, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 8 +/turf/open/floor/iron/dark/textured, +/area/station/medical/paramedic) +"aTe" = ( +/obj/machinery/computer/upload/ai, +/obj/structure/window/reinforced/spawner/directional/north, +/obj/structure/window/reinforced/spawner/directional/east, +/obj/structure/window/reinforced/spawner/directional/west, +/obj/effect/turf_decal/tile/blue/half/contrasted{ + dir = 1 }, -/obj/structure/disposalpipe/segment{ - dir = 4 +/obj/machinery/camera/directional/north{ + c_tag = "AI Upload Chamber - Fore"; + network = list("aiupload") }, -/turf/open/floor/iron/white, -/area/station/medical/treatment_center) +/obj/machinery/door/window/right/directional/south{ + name = "Upload Console Window"; + req_access = list("ai_upload") + }, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/ai_upload) "aTh" = ( /obj/structure/chair/office{ dir = 8 @@ -3478,12 +3426,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/science/robotics/lab) -"aTO" = ( -/obj/machinery/power/shuttle_engine/propulsion/burst{ - dir = 4 - }, -/turf/open/floor/plating/airless, -/area/space) "aTU" = ( /obj/effect/turf_decal/trimline/purple/line, /obj/effect/turf_decal/trimline/purple/line{ @@ -3947,6 +3889,7 @@ "aYB" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, /obj/machinery/light/small/directional/north, +/obj/machinery/firealarm/directional/north, /turf/open/floor/iron/dark/textured, /area/station/medical/cryo) "aYJ" = ( @@ -4068,6 +4011,9 @@ }, /turf/open/space/openspace, /area/space/nearstation) +"aZW" = ( +/turf/closed/wall, +/area/station/medical/treatment_center) "aZX" = ( /obj/machinery/light/directional/north, /turf/open/floor/iron/dark/side{ @@ -4192,11 +4138,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/pod/light, /area/station/maintenance/floor2/port/aft) -"bbN" = ( -/obj/machinery/pdapainter/engineering, -/obj/machinery/camera/autoname/directional/west, -/turf/open/floor/iron/dark/textured, -/area/station/command/heads_quarters/ce) "bcb" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -4240,6 +4181,14 @@ /obj/structure/cable, /turf/open/floor/wood, /area/station/command/meeting_room) +"bcE" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/stripes{ + dir = 1 + }, +/obj/structure/cable, +/turf/open/floor/iron/white, +/area/station/science/ordnance/testlab) "bcH" = ( /obj/effect/turf_decal/tile/purple/half/contrasted{ dir = 4 @@ -4374,18 +4323,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/commons/toilet) -"bez" = ( -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 4 - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 8 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/iron/white, -/area/station/medical/medbay/lobby) "beB" = ( /obj/structure/lattice, /obj/machinery/atmospherics/pipe/smart/simple/yellow/visible{ @@ -4406,6 +4343,11 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/pod/light, /area/station/maintenance/floor1/starboard/fore) +"beK" = ( +/obj/machinery/netpod, +/obj/structure/railing, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/cargo/bitrunning/den) "beM" = ( /obj/machinery/vending/drugs, /obj/effect/turf_decal/tile/blue/fourcorners, @@ -4489,14 +4431,6 @@ }, /turf/open/floor/pod/light, /area/station/maintenance/floor4/starboard/fore) -"bfA" = ( -/obj/effect/turf_decal/bot, -/obj/structure/table/reinforced, -/obj/item/stock_parts/cell/high, -/obj/machinery/cell_charger, -/obj/structure/window/reinforced/spawner/directional/south, -/turf/open/floor/iron/dark/smooth_large, -/area/station/science/robotics/mechbay) "bfC" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 1 @@ -5125,10 +5059,8 @@ /turf/open/floor/wood/tile, /area/station/service/library) "blH" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, /obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/siding/blue, /turf/open/floor/iron/white, /area/station/medical/medbay/lobby) "blI" = ( @@ -5301,20 +5233,12 @@ /turf/open/floor/iron, /area/station/hallway/floor1/aft) "bnC" = ( -/obj/machinery/camera/autoname/directional/east, -/obj/effect/turf_decal/tile/blue/full, -/obj/structure/table/glass, -/obj/item/storage/belt/medical, -/obj/item/clothing/glasses/hud/health, -/turf/open/floor/iron/white/textured, +/obj/structure/bed/medical/anchored{ + dir = 1 + }, +/obj/item/radio/intercom/directional/east, +/turf/open/floor/iron/white, /area/station/medical/treatment_center) -"bnI" = ( -/obj/structure/table/reinforced, -/obj/machinery/cell_charger, -/obj/item/stock_parts/cell/high, -/obj/item/radio/intercom/directional/west, -/turf/open/floor/iron/dark/smooth_large, -/area/station/science/robotics/lab) "bnL" = ( /obj/effect/turf_decal/siding/wood/corner{ dir = 1 @@ -5466,14 +5390,6 @@ /obj/item/crowbar/mechremoval, /turf/open/floor/iron/large, /area/station/science/robotics/lab) -"bpD" = ( -/obj/effect/turf_decal/siding/white, -/obj/structure/railing, -/obj/machinery/cell_charger, -/obj/item/stock_parts/cell/high, -/obj/structure/table/reinforced/rglass, -/turf/open/floor/iron/large, -/area/station/science/robotics/lab) "bpE" = ( /obj/effect/spawner/random/trash/mess, /obj/effect/decal/cleanable/dirt, @@ -5934,16 +5850,12 @@ /turf/open/floor/iron/dark, /area/station/engineering/atmos/pumproom) "buR" = ( -/obj/structure/railing, -/obj/structure/chair/sofa/bench/solo{ +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/structure/chair{ dir = 1 }, -/obj/effect/turf_decal/trimline/blue/filled/line, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/iron/white, -/area/station/medical/medbay/lobby) +/turf/open/floor/iron/white/textured, +/area/station/medical/treatment_center) "bvc" = ( /obj/effect/turf_decal/trimline/brown/filled/line{ dir = 8 @@ -6120,10 +6032,10 @@ /turf/open/floor/pod/dark, /area/station/maintenance/floor4/starboard) "bwE" = ( +/obj/structure/sign/poster/official/random/directional/east, /obj/machinery/cryo_cell{ dir = 8 }, -/obj/structure/sign/poster/official/random/directional/east, /turf/open/floor/iron/dark/textured, /area/station/medical/cryo) "bwF" = ( @@ -6528,11 +6440,32 @@ /turf/open/floor/iron, /area/station/cargo/miningdock) "bCd" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment{ - dir = 4 +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/structure/table/reinforced/rglass, +/obj/item/reagent_containers/chem_pack{ + pixel_x = -4; + pixel_y = 2 }, -/turf/open/floor/iron/white, +/obj/item/reagent_containers/chem_pack{ + pixel_x = 3; + pixel_y = 2 + }, +/obj/item/reagent_containers/chem_pack{ + pixel_y = 3 + }, +/obj/item/clothing/neck/stethoscope{ + pixel_y = 4 + }, +/obj/item/reagent_containers/cup/bottle{ + pixel_x = -2 + }, +/obj/item/reagent_containers/cup/bottle{ + pixel_x = 2 + }, +/obj/effect/turf_decal/bot_white{ + color = "#74b2d3" + }, +/turf/open/floor/iron/white/textured, /area/station/medical/treatment_center) "bCk" = ( /obj/structure/rack, @@ -6958,13 +6891,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/medical/abandoned) -"bJA" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible/layer4{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/station/science/ordnance/testlab) "bJQ" = ( /obj/structure/railing/corner{ dir = 1 @@ -7169,14 +7095,6 @@ /obj/machinery/light/floor, /turf/open/floor/wood/tile, /area/station/service/library) -"bMu" = ( -/obj/effect/turf_decal/tile/purple/opposingcorners, -/obj/machinery/computer/security/telescreen/rd{ - pixel_x = -30 - }, -/obj/machinery/pdapainter/research, -/turf/open/floor/iron/white, -/area/station/command/heads_quarters/rd) "bMz" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/girder, @@ -7252,14 +7170,6 @@ /obj/machinery/power/apc/auto_name/directional/west, /turf/open/floor/iron/smooth, /area/station/construction) -"bND" = ( -/obj/effect/turf_decal/trimline/blue/filled/line, -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 1 - }, -/obj/machinery/light/small/directional/east, -/turf/open/floor/iron/white, -/area/station/medical/treatment_center) "bNL" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -7299,12 +7209,6 @@ }, /turf/open/floor/engine/hull, /area/space/nearstation) -"bOk" = ( -/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ - dir = 4 - }, -/turf/open/space/basic, -/area/space) "bOq" = ( /obj/machinery/door/airlock/maintenance/external, /obj/effect/turf_decal/stripes/line{ @@ -7425,6 +7329,15 @@ }, /turf/open/floor/wood, /area/station/command/heads_quarters/hop) +"bQj" = ( +/obj/structure/table/wood, +/obj/item/cigarette/cigar/cohiba, +/obj/effect/turf_decal/trimline/blue/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/blue/line, +/turf/open/floor/carpet/blue, +/area/station/command/meeting_room) "bQn" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -8022,11 +7935,10 @@ /turf/open/floor/engine, /area/station/maintenance/disposal/incinerator) "bYb" = ( -/obj/effect/turf_decal/tile/blue/full, /obj/structure/table/glass, -/obj/item/storage/box/hug/medical, -/obj/item/radio/intercom/directional/east, -/turf/open/floor/iron/white/textured, +/obj/item/stack/medical/gauze, +/obj/machinery/defibrillator_mount/directional/east, +/turf/open/floor/iron/white, /area/station/medical/treatment_center) "bYg" = ( /obj/effect/turf_decal/trimline/blue, @@ -8524,6 +8436,12 @@ /obj/structure/closet/firecloset, /turf/open/floor/pod/dark, /area/station/maintenance/floor2/port/aft) +"cep" = ( +/obj/effect/turf_decal/tile/blue/opposingcorners, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/obj/machinery/computer/security/telescreen/minisat/directional/west, +/turf/open/floor/iron/dark, +/area/station/command/teleporter) "cev" = ( /obj/structure/cable, /obj/machinery/door/airlock/hatch{ @@ -8543,12 +8461,12 @@ /area/station/hallway/secondary/entry) "ceF" = ( /obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, /obj/machinery/door/poddoor/shutters/preopen{ + name = "CMO Privacy Shutters"; dir = 4; - id = "cmo_privacy"; - name = "CMO Privacy Shutters" + id = "cmoshutter" }, -/obj/structure/cable, /turf/open/floor/plating, /area/station/medical/storage) "ceH" = ( @@ -8875,7 +8793,8 @@ }, /area/station/command/teleporter) "cix" = ( -/obj/machinery/restaurant_portal/restaurant, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood, /area/station/service/kitchen/diner) "ciz" = ( @@ -9365,12 +9284,8 @@ /turf/open/floor/wood, /area/station/command/heads_quarters/ce) "coZ" = ( -/obj/effect/turf_decal/tile/blue/fourcorners, -/obj/machinery/defibrillator_mount/directional/south, -/obj/structure/bed/medical{ - dir = 8 - }, -/turf/open/floor/iron/white/textured, +/obj/item/kirbyplants/random, +/turf/open/floor/iron/white, /area/station/medical/treatment_center) "cpa" = ( /obj/structure/table/wood, @@ -9670,12 +9585,19 @@ /turf/open/floor/wood, /area/station/service/bar) "csR" = ( -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 4 +/obj/effect/turf_decal/siding/blue{ + dir = 4; + pixel_x = -15 }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 8 +/obj/effect/turf_decal/tile/blue/anticorner/contrasted, +/obj/machinery/camera/directional/north{ + c_tag = "Medbay - Treatment Center"; + name = "medbay camera"; + network = list("ss13","medbay"); + dir = 2 }, +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/south, /turf/open/floor/iron/white, /area/station/medical/medbay/lobby) "csT" = ( @@ -10009,18 +9931,15 @@ /turf/open/floor/catwalk_floor, /area/station/maintenance/floor2/starboard/fore) "cwz" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 8 - }, /obj/structure/disposalpipe/segment{ - dir = 4 + dir = 9 }, /obj/machinery/duct, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 4 + }, /turf/open/floor/iron/white, -/area/station/medical/medbay/lobby) +/area/station/medical/treatment_center) "cwD" = ( /obj/machinery/newscaster/directional/south, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -10756,6 +10675,20 @@ /obj/structure/lattice, /turf/open/space/basic, /area/space/nearstation) +"cIc" = ( +/obj/machinery/door/airlock/highsecurity{ + name = "AI Upload" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/effect/mapping_helpers/airlock/access/any/command/ai_upload, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 4 + }, +/obj/structure/sign/departments/aiupload/directional/south, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/ai_upload_foyer) "cId" = ( /obj/effect/turf_decal/tile/blue/anticorner/contrasted{ dir = 8 @@ -11502,20 +11435,6 @@ }, /turf/open/floor/engine, /area/station/maintenance/disposal/incinerator) -"cSb" = ( -/obj/structure/table, -/obj/item/stock_parts/micro_laser, -/obj/item/stock_parts/servo{ - pixel_x = 15; - pixel_y = 4 - }, -/obj/item/reagent_containers/dropper{ - pixel_x = -2; - pixel_y = 9 - }, -/obj/effect/turf_decal/tile/purple/fourcorners, -/turf/open/floor/iron/white, -/area/station/science/lab) "cSc" = ( /obj/item/food/cornchips/green{ pixel_x = -8; @@ -12100,22 +12019,12 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark/side, /area/station/hallway/secondary/exit/escape_pod) -"cZm" = ( -/obj/effect/turf_decal/tile/blue/fourcorners, -/obj/effect/mapping_helpers/airlock/access/any/medical/general, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/door/firedoor, -/obj/effect/mapping_helpers/airlock/unres{ - dir = 4 - }, -/obj/machinery/duct, -/obj/machinery/door/airlock/medical/glass{ - name = "Treatment Center" +"cZk" = ( +/obj/structure/railing/corner{ + dir = 1 }, -/obj/structure/cable, -/turf/open/floor/iron/white, -/area/station/medical/treatment_center) +/turf/open/space/openspace, +/area/space/nearstation) "cZA" = ( /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 6 @@ -12142,14 +12051,6 @@ /obj/machinery/duct, /turf/open/floor/iron/white, /area/station/command/heads_quarters/cmo) -"cZI" = ( -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 1 - }, -/obj/machinery/firealarm/directional/west, -/obj/structure/sink/directional/east, -/turf/open/floor/iron/white, -/area/station/medical/treatment_center) "cZK" = ( /obj/structure/chair/sofa/bench/left{ dir = 1 @@ -12583,9 +12484,16 @@ /turf/open/floor/catwalk_floor, /area/station/maintenance/floor3/starboard) "dfB" = ( -/obj/effect/turf_decal/trimline/blue/filled/line, -/obj/item/kirbyplants/random, -/turf/open/floor/iron/white, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/shutters/window/preopen{ + dir = 1; + name = "Medbay Lockdown Shutters"; + id = "med_lockdown" + }, +/turf/open/floor/plating, /area/station/medical/medbay/lobby) "dfP" = ( /obj/structure/chair{ @@ -12620,13 +12528,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/station/maintenance/floor2/starboard/aft) -"dgm" = ( -/obj/structure/cable, -/obj/effect/turf_decal/trimline/blue/filled/corner{ - dir = 4 - }, -/turf/open/floor/iron/white, -/area/station/medical/treatment_center) "dgp" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -12778,12 +12679,6 @@ }, /turf/open/floor/pod/dark, /area/station/maintenance/floor2/port/aft) -"djc" = ( -/obj/structure/railing{ - dir = 4 - }, -/turf/open/space/openspace, -/area/space) "djd" = ( /obj/structure/cable, /turf/open/floor/iron/dark, @@ -12885,12 +12780,6 @@ /obj/machinery/atmospherics/pipe/smart/simple/supply/visible, /turf/open/floor/iron, /area/station/engineering/atmos) -"dkn" = ( -/obj/structure/railing/corner{ - dir = 4 - }, -/turf/open/space/openspace, -/area/space) "dks" = ( /obj/structure/girder, /obj/item/stack/sheet/iron, @@ -12937,6 +12826,17 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/security/prison/safe) +"dlR" = ( +/obj/item/radio/intercom/directional/north{ + broadcasting = 1; + frequency = 1447; + listening = 0; + name = "Private Channel" + }, +/obj/machinery/recharge_station, +/obj/machinery/computer/security/telescreen/minisat/directional/east, +/turf/open/floor/circuit, +/area/station/ai_monitored/turret_protected/aisat/service) "dlW" = ( /turf/closed/wall, /area/station/maintenance/floor4/starboard/aft) @@ -13802,21 +13702,13 @@ /turf/open/misc/dirt/jungle, /area/station/science/cytology) "dyG" = ( -/obj/effect/turf_decal/trimline/blue/filled/line, -/obj/structure/disposalpipe/segment, -/turf/open/floor/iron/white, -/area/station/medical/medbay/lobby) -"dyP" = ( -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 10 +/obj/structure/disposalpipe/segment{ + dir = 4 }, -/obj/structure/table/glass, -/obj/item/reagent_containers/hypospray/medipen, -/obj/item/reagent_containers/hypospray/medipen, -/obj/item/reagent_containers/hypospray/medipen, -/obj/item/reagent_containers/hypospray/medipen, -/turf/open/floor/iron/white, -/area/station/medical/medbay/lobby) +/obj/effect/turf_decal/trimline/blue/filled/line, +/obj/structure/sign/departments/medbay/alt/directional/south, +/turf/open/floor/iron/dark/side, +/area/station/hallway/floor2/aft) "dyQ" = ( /obj/structure/railing/corner{ dir = 8 @@ -13912,12 +13804,8 @@ /turf/open/floor/iron/grimy, /area/station/security/detectives_office) "dzM" = ( -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 1 - }, -/obj/structure/disposalpipe/segment, -/obj/machinery/duct, -/turf/open/floor/iron/white, +/obj/effect/turf_decal/tile/blue/fourcorners, +/turf/open/floor/iron/white/textured, /area/station/medical/treatment_center) "dzQ" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ @@ -14550,10 +14438,6 @@ /obj/structure/cable, /turf/open/floor/pod/light, /area/station/maintenance/floor1/starboard/fore) -"dIJ" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/white, -/area/station/science/ordnance/testlab) "dIO" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -14836,6 +14720,16 @@ }, /turf/open/floor/iron/dark/textured_large, /area/station/hallway/secondary/exit/departure_lounge) +"dMt" = ( +/obj/machinery/computer/security/telescreen/minisat/directional/east, +/obj/machinery/camera/directional/south{ + c_tag = "MiniSat Exterior Access"; + network = list("minisat") + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/firealarm/directional/south, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/aisat) "dMA" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -15406,11 +15300,13 @@ /obj/effect/turf_decal/siding/white{ dir = 4 }, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/obj/machinery/disposal/bin, /obj/machinery/button/door/directional/south{ - id = "med_doors"; - name = "Medbay Door Control"; - normaldoorcontrol = 1; - req_access = list("medical") + name = "Medbay Lockdown Shutters"; + id = "med_lockdown" }, /turf/open/floor/iron/dark/textured, /area/station/medical/paramedic) @@ -15699,15 +15595,6 @@ }, /turf/open/floor/iron/white, /area/station/medical/virology) -"dWZ" = ( -/obj/effect/turf_decal/trimline/blue/filled/corner{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 4 - }, -/turf/open/floor/iron/white, -/area/station/medical/treatment_center) "dXc" = ( /obj/machinery/air_sensor/ordnance_burn_chamber, /turf/open/floor/engine/vacuum, @@ -15731,12 +15618,6 @@ /obj/structure/closet/firecloset, /turf/open/floor/pod/light, /area/station/maintenance/floor1/port/fore) -"dXy" = ( -/obj/effect/turf_decal/tile/blue/full, -/obj/structure/closet/secure_closet/medical1, -/obj/structure/sign/poster/official/random/directional/east, -/turf/open/floor/iron/white/textured, -/area/station/medical/treatment_center) "dXz" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/spawner/random/trash/graffiti{ @@ -15815,9 +15696,16 @@ }, /area/station/hallway/secondary/exit/escape_pod) "dYM" = ( -/obj/effect/turf_decal/trimline/blue/filled/line, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron/white, +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/structure/table/reinforced/rglass, +/obj/item/storage/belt/medical, +/obj/item/storage/belt/medical{ + pixel_y = 6 + }, +/obj/item/storage/belt/medical{ + pixel_y = 12 + }, +/turf/open/floor/iron/white/textured, /area/station/medical/treatment_center) "dYX" = ( /obj/structure/reagent_dispensers/fueltank, @@ -16041,14 +15929,6 @@ }, /turf/open/floor/plating/airless, /area/space/nearstation) -"ecK" = ( -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 8 - }, -/obj/machinery/iv_drip, -/obj/machinery/light/cold/directional/south, -/turf/open/floor/iron/white, -/area/station/medical/treatment_center) "ecN" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -16452,7 +16332,6 @@ /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 1 }, -/obj/machinery/duct, /turf/open/floor/iron/white, /area/station/medical/medbay/aft) "ehQ" = ( @@ -17238,6 +17117,21 @@ }, /turf/open/floor/plating, /area/station/engineering/supermatter) +"etb" = ( +/obj/effect/turf_decal/tile/yellow{ + dir = 1 + }, +/obj/effect/turf_decal/tile/brown{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/airalarm/directional/north, +/obj/structure/rack, +/obj/item/stock_parts/power_store/cell/lead, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/cargo/storage) "etj" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 1 @@ -18066,21 +17960,17 @@ /turf/open/floor/iron/dark/corner, /area/station/service/lawoffice) "eEZ" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/railing/corner{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/blue/filled/corner{ - dir = 8 - }, -/obj/structure/cable, -/obj/structure/disposalpipe/segment, -/obj/structure/disposalpipe/segment{ +/obj/effect/decal/cleanable/cobweb, +/obj/effect/turf_decal/trimline/blue/filled/line{ dir = 4 }, +/obj/machinery/button/door/directional/west{ + id = "med_lockdown"; + name = "Medbay Lockdown Shutters"; + req_access = list("medical") + }, /turf/open/floor/iron/white, -/area/station/medical/medbay/lobby) +/area/station/medical/treatment_center) "eFc" = ( /obj/effect/turf_decal/stripes{ dir = 1 @@ -18114,6 +18004,14 @@ /obj/machinery/light/dim/directional/east, /turf/open/floor/carpet/red, /area/station/service/theater) +"eFt" = ( +/obj/structure/table, +/obj/item/reagent_containers/cup/beaker{ + pixel_x = 5 + }, +/obj/item/reagent_containers/condiment/enzyme, +/turf/open/floor/iron/kitchen, +/area/station/service/kitchen) "eFz" = ( /obj/structure/chair/wood, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ @@ -18300,6 +18198,21 @@ dir = 4 }, /area/station/command/bridge) +"eIg" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 9 + }, +/obj/effect/turf_decal/trimline/blue/filled/corner, +/obj/machinery/turretid{ + control_area = "/area/station/ai_monitored/turret_protected/ai_upload"; + icon_state = "control_stun"; + name = "AI Upload turret control"; + pixel_y = 28 + }, +/obj/machinery/computer/security/telescreen/aiupload/directional/west, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/ai_upload_foyer) "eIq" = ( /obj/structure/chair/stool/directional/west, /obj/effect/turf_decal/trimline/red/warning{ @@ -18920,10 +18833,10 @@ /area/station/service/kitchen) "eSq" = ( /obj/structure/railing/corner, -/obj/machinery/atmospherics/pipe/smart/simple/purple, /obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible/layer4{ dir = 8 }, +/obj/machinery/atmospherics/pipe/smart/simple/purple/visible, /turf/open/floor/iron/dark, /area/station/science/ordnance/testlab) "eSw" = ( @@ -19508,12 +19421,12 @@ /turf/open/openspace, /area/station/science/xenobiology/hallway) "fbl" = ( -/obj/machinery/power/smes, /obj/effect/turf_decal/stripes/line{ dir = 4 }, /obj/structure/cable, /obj/machinery/light/small/directional/west, +/obj/machinery/power/smes/full, /turf/open/floor/plating, /area/station/engineering/gravity_generator) "fbo" = ( @@ -19698,6 +19611,13 @@ "ffe" = ( /turf/closed/wall/r_wall, /area/station/security/holding_cell) +"ffh" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/station/medical/medbay/lobby) "ffi" = ( /obj/effect/turf_decal/trimline/purple/line{ dir = 4 @@ -20573,10 +20493,15 @@ /turf/open/floor/catwalk_floor, /area/station/maintenance/floor1/port/fore) "fqn" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/trimline/blue/filled/line, +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/obj/effect/turf_decal/bot_white{ + color = "#74b2d3" }, -/obj/machinery/duct, /turf/open/floor/iron/white, /area/station/medical/treatment_center) "fqo" = ( @@ -20809,17 +20734,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/hallway/floor3/aft) -"ftD" = ( -/obj/structure/table/reinforced/rglass, -/obj/effect/turf_decal/tile/blue/fourcorners, -/obj/machinery/door/firedoor, -/obj/structure/desk_bell{ - pixel_x = 7 - }, -/obj/structure/window/reinforced/spawner/directional/east, -/obj/machinery/airalarm/directional/south, -/turf/open/floor/iron/dark/textured, -/area/station/medical/medbay/lobby) "ftJ" = ( /obj/structure/chair{ dir = 4 @@ -21181,6 +21095,14 @@ }, /turf/open/floor/iron/dark, /area/station/hallway/secondary/exit/escape_pod) +"fAw" = ( +/obj/machinery/door/firedoor/border_only, +/obj/structure/railing, +/obj/machinery/atmospherics/components/unary/thermomachine/freezer{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/science/ordnance/testlab) "fAy" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -21326,9 +21248,6 @@ /obj/structure/stairs/north, /turf/open/floor/iron/white/small, /area/station/medical/chemistry) -"fCp" = ( -/turf/open/floor/plating/airless, -/area/space) "fCq" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/landmark/generic_maintenance_landmark, @@ -21457,15 +21376,6 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron/dark, /area/station/security/range) -"fDL" = ( -/obj/effect/turf_decal/trimline/blue/filled/corner{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/blue/filled/line, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron/white, -/area/station/medical/treatment_center) "fDM" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/rack, @@ -21514,14 +21424,10 @@ /turf/open/floor/iron/white/textured, /area/station/medical/break_room) "fEj" = ( -/obj/effect/turf_decal/trimline/blue/filled/corner{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/blue/filled/line, -/obj/effect/turf_decal/trimline/blue/filled/corner{ - dir = 4 +/obj/effect/turf_decal/stripes/corner{ + dir = 8 }, -/turf/open/floor/iron/white, +/turf/closed/wall, /area/station/medical/treatment_center) "fEn" = ( /obj/machinery/light/small/directional/south, @@ -23367,11 +23273,6 @@ /obj/machinery/door/firedoor, /turf/open/floor/iron, /area/station/cargo/warehouse) -"gcm" = ( -/obj/structure/cable, -/obj/effect/turf_decal/trimline/blue/filled/corner, -/turf/open/floor/iron/white, -/area/station/medical/treatment_center) "gcs" = ( /obj/machinery/power/apc/auto_name/directional/south, /obj/effect/turf_decal/tile/green/half, @@ -23638,15 +23539,16 @@ /turf/open/floor/iron/checker, /area/station/service/bar/atrium) "ggp" = ( -/obj/structure/table/reinforced, -/obj/structure/barricade/wooden{ - name = "wooden barricade (KEEP OUT)" +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 8 }, -/obj/structure/window/reinforced/tinted/spawner/directional/south, -/obj/structure/window/reinforced/tinted/spawner/directional/north, -/obj/machinery/door/firedoor, -/turf/open/floor/plating, -/area/station/medical/chemistry) +/obj/effect/turf_decal/siding/yellow{ + dir = 8; + pixel_x = 15 + }, +/obj/structure/chair, +/turf/open/floor/iron/white, +/area/station/medical/medbay/lobby) "ggD" = ( /obj/effect/turf_decal/tile/neutral/opposingcorners{ dir = 8 @@ -24408,12 +24310,6 @@ /obj/effect/landmark/start/roboticist, /turf/open/floor/iron, /area/station/science/robotics/lab) -"grm" = ( -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 9 - }, -/turf/open/floor/iron/white, -/area/station/medical/medbay/lobby) "grv" = ( /obj/item/radio/intercom/directional/east, /turf/open/floor/iron/dark/side{ @@ -24698,12 +24594,13 @@ /turf/open/floor/catwalk_floor/iron_white, /area/station/medical/abandoned) "gvp" = ( -/obj/machinery/door/firedoor, /obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/tile/blue/fourcorners, /obj/machinery/door/airlock/public/glass{ - name = "Medbay Lobby" + name = "Medbay" }, -/turf/open/floor/iron/dark/textured, +/obj/machinery/door/firedoor, +/turf/open/floor/iron/white/textured, /area/station/medical/medbay/lobby) "gvx" = ( /obj/effect/turf_decal/trimline/blue/filled/corner, @@ -24760,12 +24657,6 @@ /obj/structure/window/reinforced/tinted/spawner/directional/west, /turf/open/floor/carpet, /area/station/commons/vacant_room/office) -"gwe" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/turf/open/floor/iron/white, -/area/station/science/ordnance/testlab) "gwl" = ( /obj/effect/turf_decal/trimline/brown/filled/line{ dir = 4 @@ -24859,7 +24750,6 @@ /turf/open/floor/iron/dark, /area/station/maintenance/floor2/starboard/aft) "gxi" = ( -/obj/machinery/power/apc/auto_name/directional/north, /obj/structure/cable, /obj/effect/turf_decal/tile/blue/fourcorners, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -24924,10 +24814,13 @@ /turf/open/floor/pod/light, /area/station/maintenance/floor1/port/fore) "gxX" = ( -/obj/structure/flora/bush/flowers_br/style_random, -/obj/machinery/light/floor, -/turf/open/floor/grass, -/area/station/medical/medbay/lobby) +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/structure/chair, +/turf/open/floor/iron/white/textured, +/area/station/medical/treatment_center) "gyd" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/trimline/brown/filled/line{ @@ -25210,13 +25103,18 @@ }, /area/station/hallway/floor4/fore) "gBV" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/camera/directional/north{ + c_tag = "Medbay - Treatment Center"; + name = "medbay camera"; + network = list("ss13","medbay"); + dir = 2 + }, /obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 6 + dir = 9 }, -/obj/machinery/firealarm/directional/south, -/obj/machinery/camera/autoname/directional/east, /turf/open/floor/iron/white, -/area/station/medical/medbay/lobby) +/area/station/medical/treatment_center) "gBX" = ( /obj/effect/turf_decal/trimline/blue/corner, /obj/structure/window/spawner/directional/east, @@ -25228,13 +25126,6 @@ dir = 8 }, /area/station/engineering/lobby) -"gBZ" = ( -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 10 - }, -/obj/structure/extinguisher_cabinet/directional/west, -/turf/open/floor/iron/white, -/area/station/medical/medbay/lobby) "gCv" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -25399,14 +25290,6 @@ }, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/cmo) -"gEo" = ( -/obj/structure/table/reinforced, -/obj/item/stock_parts/cell/high, -/obj/machinery/cell_charger, -/obj/effect/turf_decal/tile/blue/fourcorners, -/obj/machinery/airalarm/directional/east, -/turf/open/floor/iron/dark, -/area/station/command/bridge) "gEv" = ( /obj/machinery/camera/directional/south{ c_tag = "Genetics Lab" @@ -25581,6 +25464,10 @@ }, /turf/open/floor/iron/dark, /area/station/security/checkpoint/third) +"gHe" = ( +/obj/machinery/light/cold/no_nightlight/directional/east, +/turf/open/floor/engine/xenobio, +/area/station/science/xenobiology) "gHi" = ( /obj/structure/table/wood, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -25647,9 +25534,11 @@ /turf/open/floor/iron/dark, /area/station/hallway/floor4/aft) "gHO" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/newscaster/directional/west, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 1 + }, /turf/open/floor/iron/white, /area/station/medical/treatment_center) "gHU" = ( @@ -25772,6 +25661,10 @@ /obj/effect/landmark/start/captain, /turf/open/floor/wood/tile, /area/station/command/heads_quarters/captain/private) +"gJl" = ( +/obj/machinery/computer/security/telescreen/engine_waste/directional/north, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "gJm" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 8 @@ -26297,15 +26190,6 @@ /obj/effect/spawner/random/engineering/atmospherics_portable, /turf/open/floor/pod/dark, /area/station/maintenance/floor2/starboard) -"gQE" = ( -/obj/effect/turf_decal/tile/blue/full, -/obj/structure/table/glass, -/obj/item/storage/medkit/emergency, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/iron/white/textured, -/area/station/medical/treatment_center) "gQI" = ( /obj/effect/turf_decal/siding/white{ dir = 8 @@ -26388,12 +26272,6 @@ }, /turf/open/floor/pod/dark, /area/station/service/kitchen/abandoned) -"gRW" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron/white, -/area/station/medical/treatment_center) "gSd" = ( /obj/effect/baseturf_helper/reinforced_plating/ceiling, /turf/open/floor/engine, @@ -26420,16 +26298,6 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /turf/open/floor/pod/light, /area/station/maintenance/floor1/starboard) -"gSr" = ( -/obj/structure/table/reinforced/plastitaniumglass, -/obj/structure/window/reinforced/spawner/directional/west, -/obj/structure/cable, -/obj/machinery/computer/security/telescreen/engine{ - name = "Engineering and atmospherics monitor" - }, -/mob/living/basic/parrot/poly, -/turf/open/floor/catwalk_floor/iron_dark, -/area/station/command/heads_quarters/ce) "gSs" = ( /obj/effect/turf_decal/trimline/neutral/warning{ dir = 1 @@ -26540,6 +26408,14 @@ /obj/machinery/light/small/directional/south, /turf/open/floor/engine, /area/station/maintenance/disposal/incinerator) +"gTZ" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/computer/security/telescreen/engine_waste/directional/east, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron/dark/textured_large, +/area/station/engineering/atmos/pumproom) "gUc" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/light_switch/directional/south, @@ -26776,12 +26652,15 @@ /turf/open/floor/iron/dark, /area/station/security/lockers) "gYa" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/effect/turf_decal/trimline/blue/filled/line{ +/obj/effect/turf_decal/tile/blue/half/contrasted{ dir = 4 }, +/obj/effect/turf_decal/siding/blue{ + dir = 4; + pixel_x = -15 + }, +/obj/effect/landmark/start/assistant, +/obj/structure/chair, /turf/open/floor/iron/white, /area/station/medical/medbay/lobby) "gYb" = ( @@ -26830,21 +26709,6 @@ dir = 4 }, /area/station/engineering/storage/tech) -"gYy" = ( -/obj/effect/turf_decal/tile/yellow{ - dir = 1 - }, -/obj/effect/turf_decal/tile/brown{ - dir = 4 - }, -/obj/structure/cable, -/obj/machinery/airalarm/directional/north, -/obj/structure/rack, -/obj/item/stock_parts/cell/lead, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/station/cargo/storage) "gYI" = ( /obj/structure/fluff/shower_drain, /obj/machinery/duct, @@ -26934,6 +26798,16 @@ /obj/effect/landmark/start/atmospheric_technician, /turf/open/floor/iron, /area/station/engineering/atmos) +"hab" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 1; + id = "cmoshutter"; + name = "CMO Privacy Shutters" + }, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/command/heads_quarters/cmo) "hah" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/white/smooth_corner{ @@ -27121,17 +26995,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/security/courtroom) -"hbW" = ( -/obj/structure/railing{ - layer = 3.1 - }, -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 6 - }, -/obj/structure/closet/firecloset, -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/hallway/floor4/fore) "hbX" = ( /obj/structure/cable, /obj/machinery/power/apc/auto_name/directional/north, @@ -28281,6 +28144,11 @@ /obj/structure/sign/poster/contraband/syndicate_pistol, /turf/closed/wall, /area/station/maintenance/floor3/port/aft) +"hrG" = ( +/obj/machinery/holopad, +/obj/structure/cable, +/turf/open/floor/iron/white, +/area/station/science/ordnance/testlab) "hrL" = ( /obj/structure/window/reinforced/spawner/directional/south, /obj/structure/window/reinforced/spawner/directional/west, @@ -28332,11 +28200,6 @@ }, /turf/open/floor/pod/dark, /area/station/maintenance/floor2/starboard/aft) -"hsA" = ( -/obj/structure/extinguisher_cabinet/directional/east, -/obj/machinery/camera/autoname/directional/east, -/turf/open/floor/iron, -/area/station/commons/toilet) "hsG" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/green/visible, /turf/open/floor/engine, @@ -28688,20 +28551,10 @@ /turf/open/floor/iron/white, /area/station/medical/virology) "hwV" = ( -/obj/effect/mapping_helpers/airlock/unres, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/door/airlock/medical/glass{ - id_tag = "med_doors"; - name = "Medbay" - }, -/obj/machinery/door/firedoor, -/obj/effect/turf_decal/tile/blue/fourcorners, -/obj/effect/mapping_helpers/airlock/access/any/medical/general, -/obj/structure/cable, /obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/tile/blue/fourcorners, /turf/open/floor/iron/white/textured, -/area/station/medical/medbay/lobby) +/area/station/medical/treatment_center) "hxl" = ( /obj/structure/toilet{ dir = 4 @@ -28872,14 +28725,6 @@ /obj/structure/extinguisher_cabinet/directional/west, /turf/open/floor/glass/reinforced, /area/station/service/library) -"hzF" = ( -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/blue/filled/corner, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron/white, -/area/station/medical/treatment_center) "hzI" = ( /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/aisat/service) @@ -28963,7 +28808,7 @@ /obj/machinery/atmospherics/pipe/smart/simple/dark/visible{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/simple/purple, +/obj/machinery/atmospherics/pipe/smart/simple/purple/visible, /turf/open/floor/iron/dark, /area/station/science/ordnance/testlab) "hAI" = ( @@ -29037,9 +28882,10 @@ /turf/open/floor/iron/dark, /area/station/command/heads_quarters/hop) "hBe" = ( -/obj/effect/turf_decal/trimline/blue/filled/line, -/turf/open/floor/iron/white, -/area/station/medical/medbay/lobby) +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/machinery/light/directional/south, +/turf/open/floor/iron/white/textured, +/area/station/medical/treatment_center) "hBw" = ( /obj/effect/turf_decal/delivery, /turf/open/floor/iron/textured_large, @@ -29054,12 +28900,6 @@ /obj/machinery/duct, /turf/open/floor/iron/white, /area/station/command/heads_quarters/captain/private) -"hBF" = ( -/obj/structure/table, -/obj/machinery/cell_charger, -/obj/item/stock_parts/cell/high, -/turf/open/floor/catwalk_floor/iron_dark, -/area/station/ai_monitored/command/storage/eva) "hBG" = ( /obj/structure/railing{ dir = 1 @@ -29427,6 +29267,24 @@ /obj/machinery/atmospherics/pipe/smart/simple/purple, /turf/open/floor/engine/vacuum, /area/station/science/ordnance/freezerchamber) +"hGG" = ( +/obj/structure/rack, +/obj/item/stock_parts/micro_laser{ + pixel_y = 7 + }, +/obj/item/stock_parts/power_store/cell/high{ + pixel_x = -4; + pixel_y = -6 + }, +/obj/item/vending_refill/wardrobe/science_wardrobe{ + pixel_y = 18 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/obj/item/radio/intercom/directional/east, +/turf/open/floor/iron/white, +/area/station/science/lower) "hGL" = ( /obj/machinery/light/small/directional/north, /obj/effect/decal/cleanable/dirt, @@ -29467,18 +29325,22 @@ /turf/open/floor/iron, /area/station/commons/vacant_room/commissary) "hHe" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, /obj/structure/table/reinforced/rglass, -/obj/effect/turf_decal/tile/blue/fourcorners, -/obj/machinery/door/firedoor, -/obj/machinery/door/window/left/directional/east{ - name = "Paramedic's Desk"; +/obj/machinery/door/window/right/directional/east{ + name = "First Aid Supplies"; req_access = list("medical") }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/item/stack/medical/suture, -/obj/item/stack/medical/mesh, +/obj/structure/desk_bell{ + pixel_y = 1; + pixel_x = -5 + }, +/obj/machinery/door/firedoor, /turf/open/floor/iron/dark/textured, /area/station/medical/medbay/lobby) "hHi" = ( @@ -30002,6 +29864,10 @@ }, /turf/open/floor/iron, /area/station/cargo/storage) +"hNN" = ( +/obj/structure/railing, +/turf/open/space/openspace, +/area/space/nearstation) "hNO" = ( /obj/machinery/door/window/brigdoor/security/cell/left/directional/west{ id = "cell-3"; @@ -30065,11 +29931,12 @@ /turf/open/floor/catwalk_floor, /area/station/maintenance/floor1/port/fore) "hOX" = ( -/obj/effect/turf_decal/trimline/blue/filled/line{ +/obj/effect/turf_decal/tile/yellow/half/contrasted{ dir = 8 }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 4 +/obj/effect/turf_decal/siding/yellow{ + dir = 8; + pixel_x = 15 }, /turf/open/floor/iron/white, /area/station/medical/medbay/lobby) @@ -30286,16 +30153,6 @@ }, /turf/open/floor/wood, /area/station/commons/dorms/apartment2) -"hSs" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 1 - }, -/obj/structure/cable, -/obj/structure/disposalpipe/segment, -/turf/open/floor/iron/white, -/area/station/medical/medbay/lobby) "hSt" = ( /obj/machinery/status_display/ai/directional/north, /obj/effect/decal/cleanable/blood/old, @@ -30769,12 +30626,13 @@ /turf/open/floor/carpet/red, /area/station/service/theater) "hYk" = ( -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 1 - }, /obj/structure/disposalpipe/segment, -/turf/open/floor/iron/white, -/area/station/medical/medbay/lobby) +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/obj/effect/turf_decal/tile/blue/fourcorners, +/turf/open/floor/iron/white/textured, +/area/station/medical/treatment_center) "hYm" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/trimline/brown/filled/line, @@ -31412,20 +31270,6 @@ /obj/machinery/vending/drugs, /turf/open/floor/iron/white, /area/station/medical/pharmacy) -"iht" = ( -/obj/item/stack/sheet/iron/fifty, -/obj/item/stack/rods/fifty, -/obj/item/stack/sheet/glass/fifty, -/obj/item/electronics/airlock, -/obj/item/electronics/airlock, -/obj/item/stock_parts/cell/high, -/obj/item/stack/sheet/mineral/plasma{ - amount = 30 - }, -/obj/item/gps, -/obj/structure/closet/crate/engineering, -/turf/open/floor/plating, -/area/station/engineering/lobby) "ihC" = ( /obj/item/stack/sheet/iron, /turf/open/floor/plating, @@ -31438,11 +31282,18 @@ /turf/open/floor/iron, /area/station/maintenance/disposal/incinerator) "ihL" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/trimline/blue/filled/line, -/obj/structure/cable, /obj/structure/disposalpipe/segment, +/obj/machinery/door/airlock/medical/glass{ + name = "Medbay Hall" + }, +/obj/effect/mapping_helpers/airlock/access/any/medical/general, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 1; + id = "med_lockdown"; + name = "Medbay Lockdown Shutters" + }, +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/unres, /turf/open/floor/iron/white, /area/station/medical/medbay/lobby) "ihQ" = ( @@ -31540,12 +31391,13 @@ /turf/open/floor/pod/light, /area/station/maintenance/floor4/port/fore) "ijd" = ( -/obj/effect/turf_decal/tile/blue/full, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/table/glass, -/obj/machinery/cell_charger, -/obj/item/stock_parts/cell/high, -/turf/open/floor/iron/white/textured, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 9 + }, +/turf/open/floor/iron/white, /area/station/medical/treatment_center) "ijs" = ( /obj/structure/closet/emcloset, @@ -31591,6 +31443,12 @@ dir = 1 }, /area/station/security/office) +"ijV" = ( +/obj/effect/turf_decal/tile/purple/opposingcorners, +/obj/machinery/computer/security/telescreen/rd/directional/west, +/obj/machinery/pdapainter/research, +/turf/open/floor/iron/white, +/area/station/command/heads_quarters/rd) "ijX" = ( /obj/structure/cable, /obj/effect/spawner/structure/window/hollow/directional, @@ -31738,12 +31596,13 @@ /turf/open/floor/carpet/black, /area/station/hallway/secondary/service) "ilI" = ( -/obj/effect/turf_decal/tile/blue/fourcorners, -/obj/machinery/defibrillator_mount/directional/south, -/obj/structure/bed/medical{ - dir = 4 +/obj/machinery/camera/directional/north{ + c_tag = "Medbay - Treatment Center"; + name = "medbay camera"; + network = list("ss13","medbay"); + dir = 2 }, -/turf/open/floor/iron/white/textured, +/turf/open/floor/iron/white, /area/station/medical/treatment_center) "ilK" = ( /obj/structure/railing/corner{ @@ -31909,19 +31768,14 @@ /turf/open/floor/iron/dark, /area/station/hallway/floor1/aft) "iog" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/structure/railing/corner{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/blue/filled/corner{ - dir = 4 - }, /obj/structure/disposalpipe/segment, /obj/machinery/duct, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/white, -/area/station/medical/medbay/lobby) +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/obj/effect/turf_decal/tile/blue/fourcorners, +/turf/open/floor/iron/white/textured, +/area/station/medical/treatment_center) "iom" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -32259,14 +32113,6 @@ /obj/structure/railing/corner, /turf/open/floor/catwalk_floor, /area/station/maintenance/floor2/starboard/aft) -"isp" = ( -/obj/machinery/computer/security/telescreen{ - name = "\improper Engine Waste Monitor"; - network = list("waste"); - pixel_y = 26 - }, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) "isq" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/landmark/navigate_destination/dockaux, @@ -32869,6 +32715,16 @@ }, /turf/closed/wall, /area/station/maintenance/floor1/starboard/aft) +"iAQ" = ( +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/obj/effect/turf_decal/bot_white{ + color = "#74b2d3" + }, +/turf/open/floor/iron/white/textured, +/area/station/medical/treatment_center) "iAS" = ( /obj/structure/cable, /obj/machinery/power/smes/engineering, @@ -33122,11 +32978,12 @@ /turf/open/floor/pod/light, /area/station/maintenance/solars/port/aft) "iDr" = ( -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 1 +/obj/structure/table/glass, +/obj/machinery/defibrillator_mount/directional/east, +/obj/item/storage/medkit/emergency{ + pixel_y = 4 }, -/obj/effect/turf_decal/trimline/blue/filled/line, -/obj/machinery/light/small/directional/east, +/obj/item/stack/medical/suture, /turf/open/floor/iron/white, /area/station/medical/treatment_center) "iDw" = ( @@ -33350,6 +33207,13 @@ }, /turf/open/floor/engine, /area/station/engineering/supermatter) +"iGR" = ( +/obj/structure/table, +/obj/effect/turf_decal/tile/purple/opposingcorners, +/obj/machinery/cell_charger, +/obj/item/stock_parts/power_store/cell/high, +/turf/open/floor/iron/white, +/area/station/science/circuits) "iGY" = ( /obj/machinery/door/airlock/medical{ name = "Medical Break Room" @@ -33389,6 +33253,15 @@ /obj/machinery/light/directional/west, /turf/open/floor/iron/kitchen, /area/station/service/kitchen) +"iHC" = ( +/obj/structure/table/glass, +/obj/machinery/defibrillator_mount/directional/east, +/obj/item/storage/box/syringes{ + pixel_y = 6 + }, +/obj/item/stack/medical/mesh, +/turf/open/floor/iron/white, +/area/station/medical/treatment_center) "iHG" = ( /obj/machinery/atmospherics/components/unary/thermomachine/freezer/on{ dir = 8 @@ -33404,6 +33277,12 @@ name = "lab floor" }, /area/station/science/robotics/lab) +"iHL" = ( +/obj/machinery/pdapainter/engineering, +/obj/machinery/camera/autoname/directional/west, +/obj/machinery/computer/security/telescreen/engine/directional/south, +/turf/open/floor/iron/dark/textured, +/area/station/command/heads_quarters/ce) "iHM" = ( /obj/machinery/vending/wallmed/directional/west, /obj/effect/turf_decal/tile/blue/opposingcorners, @@ -33425,20 +33304,6 @@ /obj/item/weldingtool/largetank, /turf/open/floor/iron, /area/station/cargo/warehouse) -"iIb" = ( -/obj/item/kirbyplants/random, -/obj/machinery/airalarm/directional/west, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/machinery/computer/security/telescreen/interrogation{ - pixel_y = 30 - }, -/turf/open/floor/iron/dark, -/area/station/security/interrogation) "iIm" = ( /obj/machinery/door/airlock/hatch{ name = "Maintenance Hatch" @@ -33760,16 +33625,6 @@ dir = 1 }, /area/station/hallway/floor2/fore) -"iNA" = ( -/obj/machinery/computer/security/telescreen/vault{ - dir = 8; - pixel_x = 26 - }, -/obj/machinery/computer/security{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/station/command/heads_quarters/hop) "iNB" = ( /obj/machinery/light/directional/north, /obj/machinery/camera/autoname/directional/east, @@ -33891,25 +33746,6 @@ "iOA" = ( /turf/closed/wall/r_wall, /area/station/maintenance/floor2/starboard) -"iOD" = ( -/obj/machinery/computer/upload/ai, -/obj/structure/window/reinforced/spawner/directional/north, -/obj/structure/window/reinforced/spawner/directional/east, -/obj/structure/window/reinforced/spawner/directional/west, -/obj/effect/turf_decal/tile/blue/half/contrasted{ - dir = 1 - }, -/obj/machinery/camera/directional/north{ - c_tag = "AI Upload Chamber - Fore"; - network = list("aiupload") - }, -/obj/machinery/door/window/right/directional/south{ - name = "Upload Console Window"; - req_access = list("ai_upload"); - layer = 3 - }, -/turf/open/floor/iron/dark, -/area/station/ai_monitored/turret_protected/ai_upload) "iOL" = ( /obj/structure/bookcase/random, /obj/effect/turf_decal/trimline/blue/filled/line, @@ -34735,16 +34571,6 @@ dir = 1 }, /area/station/hallway/secondary/exit/escape_pod) -"iZO" = ( -/obj/effect/turf_decal/tile/blue/fourcorners, -/obj/machinery/door/airlock/medical{ - name = "Cryogenics" - }, -/obj/effect/mapping_helpers/airlock/access/any/medical/general, -/obj/machinery/door/firedoor, -/obj/machinery/duct, -/turf/open/floor/iron/white/textured, -/area/station/medical/treatment_center) "iZP" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, /turf/open/floor/engine, @@ -34862,6 +34688,17 @@ /obj/machinery/atmospherics/pipe/layer_manifold/pink/visible, /turf/open/floor/iron/dark, /area/station/engineering/atmos/pumproom) +"jaS" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/simple/dark/visible{ + dir = 4 + }, +/obj/machinery/power/apc/auto_name/directional/north{ + areastring = "/area/station/science/ordnance/burnchamber" + }, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/science/ordnance/testlab) "jbc" = ( /obj/structure/reagent_dispensers/watertank, /turf/open/floor/pod/light, @@ -35401,13 +35238,6 @@ }, /turf/open/floor/iron/dark, /area/station/commons/storage/tools) -"jjj" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/stripes{ - dir = 1 - }, -/turf/open/floor/iron/white, -/area/station/science/ordnance/testlab) "jjo" = ( /obj/machinery/holopad, /turf/open/floor/iron/white/textured_large, @@ -35489,6 +35319,17 @@ }, /turf/open/floor/mineral/silver, /area/station/service/chapel) +"jkD" = ( +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/east{ + cell_type = /obj/item/stock_parts/power_store/battery/hyper + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/obj/machinery/light/small/directional/north, +/turf/open/floor/iron/smooth_large, +/area/station/tcommsat/server) "jkH" = ( /obj/machinery/holopad, /turf/open/floor/iron/white, @@ -36714,15 +36555,6 @@ /obj/effect/turf_decal/trimline/green/filled/line, /turf/open/floor/iron, /area/station/service/hydroponics) -"jAe" = ( -/obj/effect/turf_decal/tile/blue/opposingcorners, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/obj/machinery/computer/security/telescreen/minisat{ - dir = 4; - pixel_x = -32 - }, -/turf/open/floor/iron/dark, -/area/station/command/teleporter) "jAl" = ( /obj/structure/table/wood/fancy/red, /obj/effect/turf_decal/siding/wood{ @@ -37310,20 +37142,32 @@ /turf/open/floor/iron/dark, /area/station/hallway/floor1/aft) "jIi" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/trimline/blue/filled/line{ +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/obj/effect/turf_decal/tile/blue/half/contrasted{ dir = 4 }, +/obj/effect/turf_decal/siding/blue{ + dir = 4; + pixel_x = -15 + }, /turf/open/floor/iron/white, /area/station/medical/medbay/lobby) "jIs" = ( -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 1 +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/structure/table/reinforced/rglass, +/obj/item/storage/box/rxglasses{ + pixel_y = 5 }, -/turf/open/floor/iron/white, -/area/station/medical/medbay/lobby) +/turf/open/floor/iron/white/textured, +/area/station/medical/treatment_center) "jIy" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /obj/structure/cable, @@ -37445,7 +37289,7 @@ /area/station/maintenance/floor4/starboard) "jJM" = ( /obj/machinery/atmospherics/pipe/smart/manifold/purple/visible/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/purple, +/obj/machinery/atmospherics/pipe/smart/simple/purple/visible, /turf/open/floor/iron/dark, /area/station/science/ordnance/testlab) "jJP" = ( @@ -37883,10 +37727,9 @@ /area/station/maintenance/floor2/starboard/aft) "jQb" = ( /obj/machinery/door/airlock/medical{ - name = "Ph-rm--y" + name = "Chemical Storage" }, /obj/effect/mapping_helpers/airlock/access/all/medical/chemistry, -/obj/effect/mapping_helpers/airlock/locked, /turf/open/floor/iron/dark/textured_edge{ dir = 8 }, @@ -38122,11 +37965,12 @@ /turf/open/floor/pod/light, /area/station/maintenance/floor2/port) "jTK" = ( -/obj/effect/turf_decal/trimline/blue/filled/corner{ - dir = 4 +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 10 }, -/obj/structure/cable, -/obj/effect/turf_decal/trimline/blue/filled/line, /turf/open/floor/iron/white, /area/station/medical/treatment_center) "jTM" = ( @@ -38256,6 +38100,9 @@ /obj/structure/cable, /turf/open/floor/iron/dark, /area/station/hallway/floor3/fore) +"jVQ" = ( +/turf/open/space/openspace, +/area/space/nearstation) "jVS" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/delivery, @@ -39140,6 +38987,12 @@ /obj/machinery/light/broken/directional/north, /turf/open/floor/iron/kitchen, /area/station/service/kitchen/abandoned) +"kfS" = ( +/obj/structure/railing{ + dir = 8 + }, +/turf/open/space/openspace, +/area/space/nearstation) "kga" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -41006,21 +40859,6 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/cargo/miningdock) -"kFk" = ( -/obj/machinery/atmospherics/pipe/smart/simple/purple/hidden/layer1{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/computer/security/telescreen{ - dir = 1; - name = "\improper Engine Waste Monitor"; - network = list("waste"); - pixel_y = -26 - }, -/turf/open/floor/catwalk_floor/iron, -/area/station/engineering/atmos/pumproom) "kFp" = ( /obj/effect/turf_decal/trimline/blue/warning{ dir = 10 @@ -41352,19 +41190,6 @@ }, /turf/open/floor/iron, /area/station/hallway/floor2/fore) -"kIT" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/computer/security/telescreen{ - dir = 8; - name = "\improper Engine Waste Monitor"; - network = list("waste"); - pixel_x = 26 - }, -/obj/structure/disposalpipe/segment, -/turf/open/floor/iron/dark/textured_large, -/area/station/engineering/atmos/pumproom) "kJg" = ( /obj/effect/turf_decal/trimline/purple/line{ dir = 1 @@ -41420,6 +41245,10 @@ }, /turf/open/floor/iron/white, /area/station/science/lobby) +"kKb" = ( +/obj/machinery/camera/autoname/directional/east, +/turf/open/space/openspace, +/area/space/nearstation) "kKd" = ( /obj/structure/railing{ dir = 10 @@ -41502,6 +41331,20 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/security/courtroom) +"kKR" = ( +/obj/machinery/computer/upload/borg, +/obj/structure/window/reinforced/spawner/directional/north, +/obj/structure/window/reinforced/spawner/directional/east, +/obj/structure/window/reinforced/spawner/directional/west, +/obj/machinery/door/window/left/directional/south{ + name = "Cyborg Upload Console Window"; + req_access = list("ai_upload") + }, +/obj/effect/turf_decal/tile/blue/half/contrasted{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/ai_upload) "kKU" = ( /obj/structure/railing{ dir = 1 @@ -41611,31 +41454,12 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/pod/dark, /area/station/maintenance/floor2/starboard) -"kMl" = ( -/obj/structure/table, -/obj/item/ai_module/reset/purge, -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 10 - }, -/obj/effect/turf_decal/trimline/blue/filled/corner{ - dir = 4 - }, -/obj/structure/window/reinforced/spawner/directional/north, -/obj/effect/spawner/random/aimodule/neutral{ - pixel_x = 15 - }, -/obj/machinery/computer/security/telescreen{ - desc = "Used for watching the AI Upload."; - dir = 4; - name = "AI Upload Monitor"; - network = list("aiupload"); - pixel_x = -29 - }, -/turf/open/floor/iron/dark, -/area/station/ai_monitored/turret_protected/ai_upload_foyer) "kMv" = ( /obj/machinery/plumbing/receiver, /obj/effect/turf_decal/tile/yellow/opposingcorners, +/obj/structure/railing{ + dir = 4 + }, /turf/open/floor/iron/white, /area/station/medical/pharmacy) "kMC" = ( @@ -41913,6 +41737,24 @@ /obj/machinery/camera/autoname/directional/north, /turf/open/floor/iron, /area/station/commons/vacant_room/commissary) +"kQG" = ( +/obj/structure/table, +/obj/item/reagent_containers/condiment/saltshaker{ + pixel_x = -2; + pixel_y = 2 + }, +/obj/item/reagent_containers/condiment/peppermill{ + desc = "Often used to flavor food or make people sneeze. Fashionably moved to the left side of the table."; + pixel_x = -8; + pixel_y = 2 + }, +/obj/item/reagent_containers/condiment/enzyme{ + pixel_x = 9; + pixel_y = 3 + }, +/obj/item/book/manual/chef_recipes, +/turf/open/floor/iron, +/area/station/security/prison) "kQI" = ( /obj/effect/decal/cleanable/dirt, /obj/item/storage/bag/trash, @@ -42022,12 +41864,10 @@ /turf/open/floor/iron/white, /area/station/hallway/floor2/fore) "kRM" = ( -/obj/structure/cable, -/obj/effect/turf_decal/trimline/blue/filled/line, -/obj/effect/turf_decal/trimline/blue/filled/corner{ - dir = 1 +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 6 }, -/obj/machinery/duct, /turf/open/floor/iron/white, /area/station/medical/treatment_center) "kRN" = ( @@ -42214,15 +42054,6 @@ }, /turf/open/floor/catwalk_floor, /area/station/maintenance/floor1/port/aft) -"kUf" = ( -/obj/effect/turf_decal/tile/blue/full, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/item/storage/box/syringes{ - pixel_y = 4 - }, -/obj/structure/table/glass, -/turf/open/floor/iron/white/textured, -/area/station/medical/treatment_center) "kUh" = ( /obj/item/paper_bin, /obj/structure/table/reinforced/rglass, @@ -42241,10 +42072,9 @@ /turf/open/floor/iron/white, /area/station/science/lab) "kUl" = ( -/obj/structure/cable, -/obj/effect/turf_decal/trimline/blue/filled/line, -/obj/machinery/duct, -/turf/open/floor/iron/white, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/blue/fourcorners, +/turf/open/floor/iron/white/textured, /area/station/medical/treatment_center) "kUo" = ( /obj/effect/spawner/structure/window/reinforced, @@ -42310,19 +42140,6 @@ "kVp" = ( /turf/open/floor/engine/hull, /area/space/nearstation) -"kVs" = ( -/obj/machinery/computer/security/telescreen/minisat{ - dir = 8; - pixel_x = 28 - }, -/obj/machinery/camera/directional/south{ - c_tag = "MiniSat Exterior Access"; - network = list("minisat") - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/firealarm/directional/south, -/turf/open/floor/iron/dark, -/area/station/ai_monitored/turret_protected/aisat) "kVu" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, @@ -42601,6 +42418,13 @@ /obj/structure/extinguisher_cabinet/directional/west, /turf/open/floor/iron, /area/station/cargo/storage) +"kYS" = ( +/obj/effect/turf_decal/box/corners{ + dir = 4 + }, +/obj/structure/sign/warning/gas_mask/directional/east, +/turf/open/floor/engine/xenobio, +/area/station/science/xenobiology) "kYV" = ( /obj/effect/spawner/structure/window/hollow/reinforced/middle, /turf/open/floor/plating, @@ -42646,6 +42470,20 @@ /obj/machinery/light/directional/north, /turf/open/floor/eighties, /area/station/commons/dorms/room2) +"kZr" = ( +/obj/item/stack/sheet/iron/fifty, +/obj/item/stack/rods/fifty, +/obj/item/stack/sheet/glass/fifty, +/obj/item/electronics/airlock, +/obj/item/electronics/airlock, +/obj/item/stock_parts/power_store/cell/high, +/obj/item/stack/sheet/mineral/plasma{ + amount = 30 + }, +/obj/item/gps, +/obj/structure/closet/crate/engineering, +/turf/open/floor/plating, +/area/station/engineering/lobby) "kZv" = ( /obj/machinery/power/apc/auto_name/directional/east, /obj/structure/cable, @@ -42788,10 +42626,13 @@ /turf/open/floor/pod/dark, /area/station/maintenance/floor2/starboard) "lbi" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, /obj/structure/disposalpipe/segment, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, /turf/open/floor/iron/white, /area/station/medical/medbay/lobby) "lbm" = ( @@ -42888,6 +42729,11 @@ }, /turf/open/floor/iron/white, /area/station/medical/psychology) +"lbW" = ( +/obj/effect/turf_decal/bot, +/obj/machinery/portable_atmospherics/pipe_scrubber, +/turf/open/floor/iron, +/area/station/engineering/atmos) "lcg" = ( /obj/effect/decal/cleanable/oil, /obj/item/mop, @@ -42900,6 +42746,12 @@ }, /turf/open/openspace, /area/station/maintenance/floor2/starboard) +"lcj" = ( +/obj/structure/railing{ + dir = 4 + }, +/turf/open/space/openspace, +/area/space/nearstation) "lcr" = ( /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 10 @@ -43233,15 +43085,11 @@ /turf/open/floor/plating/airless, /area/station/solars/starboard/aft) "lfW" = ( -/obj/effect/turf_decal/tile/blue/fourcorners, -/obj/structure/table/glass, -/obj/item/storage/box/masks, -/obj/item/storage/box/bodybags{ - pixel_x = 4; - pixel_y = 4 +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk{ + dir = 1 }, -/obj/structure/sign/departments/medbay/alt/directional/west, -/turf/open/floor/iron/white/textured, +/turf/open/floor/iron/white, /area/station/medical/treatment_center) "lfZ" = ( /obj/structure/sign/poster/official/random/directional/south, @@ -44251,20 +44099,6 @@ dir = 9 }, /area/station/security/prison) -"luo" = ( -/obj/effect/turf_decal/siding/thinplating_new/dark{ - dir = 4 - }, -/obj/effect/turf_decal/arrows{ - dir = 4 - }, -/obj/structure/railing{ - layer = 3.1 - }, -/obj/effect/decal/cleanable/robot_debris, -/obj/effect/landmark/start/bitrunner, -/turf/open/floor/iron/dark/textured_large, -/area/station/cargo/bitrunning/den) "luv" = ( /obj/machinery/power/apc/auto_name/directional/north, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -44329,6 +44163,15 @@ /obj/machinery/light/floor, /turf/open/floor/carpet/red, /area/station/service/library/artgallery) +"luU" = ( +/obj/structure/railing, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 6 + }, +/obj/structure/closet/firecloset, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/hallway/floor4/fore) "luZ" = ( /obj/effect/turf_decal/stripes/line, /obj/effect/decal/cleanable/dirt, @@ -44687,6 +44530,13 @@ /obj/machinery/duct, /turf/open/floor/iron/dark/side, /area/station/security/office) +"lAn" = ( +/obj/structure/table, +/obj/item/cigarette/candy{ + pixel_x = 4 + }, +/turf/open/floor/iron/dark/smooth_large, +/area/station/hallway/floor1/aft) "lAD" = ( /obj/effect/turf_decal/trimline/green/filled/arrow_cw{ dir = 10 @@ -45786,6 +45636,11 @@ /obj/machinery/light/cold/directional/south, /turf/open/floor/iron/white/herringbone, /area/station/medical/patients_rooms) +"lOy" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/iron/white, +/area/station/science/ordnance/testlab) "lOz" = ( /obj/structure/closet/secure_closet/personal/patient, /turf/open/floor/iron/white, @@ -46130,21 +45985,6 @@ /obj/effect/decal/cleanable/plastic, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/aisat) -"lSI" = ( -/obj/machinery/computer/upload/borg, -/obj/structure/window/reinforced/spawner/directional/north, -/obj/structure/window/reinforced/spawner/directional/east, -/obj/structure/window/reinforced/spawner/directional/west, -/obj/machinery/door/window/left/directional/south{ - layer = 3.1; - name = "Cyborg Upload Console Window"; - req_access = list("ai_upload") - }, -/obj/effect/turf_decal/tile/blue/half/contrasted{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/station/ai_monitored/turret_protected/ai_upload) "lSJ" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/cable, @@ -46237,12 +46077,12 @@ /area/station/maintenance/floor2/port) "lTO" = ( /obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, /obj/machinery/door/poddoor/shutters/preopen{ dir = 1; - id = "cmo_privacy"; + id = "cmoshutter"; name = "CMO Privacy Shutters" }, -/obj/structure/cable, /turf/open/floor/plating, /area/station/command/heads_quarters/cmo) "lTV" = ( @@ -46429,6 +46269,13 @@ /obj/structure/cable, /turf/open/floor/catwalk_floor, /area/station/maintenance/floor1/port) +"lWV" = ( +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/structure/table/reinforced/rglass, +/obj/item/pai_card, +/obj/item/reagent_containers/spray/cleaner, +/turf/open/floor/iron/white/textured, +/area/station/medical/treatment_center) "lWY" = ( /obj/machinery/light/small/directional/south, /obj/structure/disposalpipe/trunk{ @@ -46857,6 +46704,10 @@ dir = 4 }, /area/station/hallway/secondary/service) +"mbP" = ( +/obj/structure/railing/corner, +/turf/open/space/openspace, +/area/space/nearstation) "mbS" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/visible/layer2, /obj/effect/spawner/structure/window/hollow/reinforced/plasma/middle, @@ -47505,7 +47356,6 @@ }, /obj/machinery/door/firedoor/border_only, /obj/effect/turf_decal/siding/white, -/obj/machinery/duct, /turf/open/floor/iron/dark/textured, /area/station/medical/cryo) "mjr" = ( @@ -47570,6 +47420,22 @@ /obj/machinery/duct, /turf/open/floor/iron/dark/textured, /area/station/commons/fitness) +"mko" = ( +/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible{ + dir = 4 + }, +/obj/machinery/computer/security/telescreen/ordnance/directional/north, +/obj/machinery/computer/pod/old/mass_driver_controller/ordnancedriver, +/obj/structure/table, +/obj/item/binoculars{ + pixel_x = 6; + pixel_y = 6 + }, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 5 + }, +/turf/open/floor/iron/white, +/area/station/science/ordnance/storage) "mkE" = ( /obj/effect/turf_decal/tile/blue/opposingcorners, /obj/item/wrench, @@ -47632,22 +47498,6 @@ dir = 4 }, /area/station/hallway/secondary/exit) -"mlC" = ( -/obj/structure/table, -/obj/item/storage/toolbox/emergency{ - pixel_y = 12 - }, -/obj/item/stack/cable_coil/cut{ - pixel_y = 7 - }, -/obj/item/stock_parts/cell/lead{ - pixel_x = 5; - pixel_y = 4 - }, -/obj/item/wirecutters, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/pod/light, -/area/station/maintenance/floor1/starboard/fore) "mlH" = ( /obj/structure/sign/departments/court{ pixel_y = 32 @@ -47684,6 +47534,12 @@ /obj/structure/lattice/catwalk, /turf/open/space/openspace, /area/station/solars/starboard/aft) +"mlU" = ( +/obj/machinery/power/shuttle_engine/huge{ + dir = 4 + }, +/turf/open/floor/plating/airless, +/area/space/nearstation) "mlX" = ( /obj/structure/chair/comfy/brown, /obj/effect/landmark/start/assistant, @@ -48284,13 +48140,9 @@ /turf/open/floor/iron/dark, /area/station/maintenance/floor1/port) "mtI" = ( -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 4 - }, -/obj/machinery/airalarm/directional/south, -/obj/machinery/iv_drip, -/turf/open/floor/iron/white, -/area/station/medical/treatment_center) +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/medical/medbay/lobby) "mtL" = ( /obj/effect/turf_decal/trimline/purple/warning{ dir = 4 @@ -48388,9 +48240,12 @@ /turf/open/floor/iron/dark, /area/station/security/checkpoint/third) "mve" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, /turf/open/floor/iron/white, /area/station/medical/medbay/lobby) "mvg" = ( @@ -48619,6 +48474,10 @@ "myr" = ( /turf/open/floor/iron/textured_large, /area/station/hallway/secondary/entry) +"myw" = ( +/obj/structure/extinguisher_cabinet/directional/east, +/turf/open/floor/iron, +/area/station/commons/toilet) "myO" = ( /turf/closed/wall, /area/station/hallway/secondary/exit/escape_pod) @@ -48705,7 +48564,7 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /obj/machinery/button/door/directional/west{ - id = "surg_a_privacy"; + id = "med_lockdown"; name = "Surgery Privacy Shutters"; req_access = list("medical") }, @@ -49162,14 +49021,15 @@ /turf/open/floor/plating, /area/station/maintenance/floor2/port/aft) "mFz" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/effect/turf_decal/tile/blue/fourcorners, /obj/machinery/door/airlock/public/glass{ - name = "Medbay Lobby" + name = "Medbay" }, -/turf/open/floor/iron/dark/textured, +/obj/machinery/door/firedoor, +/turf/open/floor/iron/white/textured, /area/station/medical/medbay/lobby) "mFB" = ( /obj/structure/window/reinforced/spawner/directional/north, @@ -49223,6 +49083,12 @@ dir = 1 }, /area/station/hallway/secondary/exit) +"mFQ" = ( +/obj/structure/table, +/obj/machinery/cell_charger, +/obj/item/stock_parts/power_store/cell/high, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/ai_monitored/command/storage/eva) "mFV" = ( /obj/structure/bodycontainer/morgue, /obj/machinery/light/small/directional/west, @@ -49345,12 +49211,6 @@ }, /turf/open/floor/iron/dark, /area/station/security/execution/education) -"mHo" = ( -/obj/structure/rack, -/obj/item/mod/core/standard, -/obj/item/stock_parts/cell/high, -/turf/open/floor/pod/light, -/area/station/maintenance/floor3/port/aft) "mHu" = ( /obj/effect/turf_decal/trimline/green/filled/line{ dir = 10 @@ -49453,21 +49313,6 @@ }, /turf/open/floor/wood/tile, /area/station/command/heads_quarters/captain) -"mIV" = ( -/obj/machinery/computer/security/telescreen{ - desc = "Used for the Auxiliary Mining Base."; - dir = 1; - name = "Auxiliary Base Monitor"; - network = list("auxbase"); - pixel_y = -28 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/obj/effect/turf_decal/tile/yellow/half/contrasted, -/turf/open/floor/iron, -/area/station/construction/mining/aux_base) "mIX" = ( /obj/machinery/ai_slipper{ uses = 10 @@ -49523,6 +49368,12 @@ /obj/structure/cable, /turf/open/floor/iron/dark/side, /area/station/hallway/floor2/aft) +"mJN" = ( +/obj/effect/turf_decal/tile/neutral/full, +/obj/machinery/portable_atmospherics/pipe_scrubber, +/obj/effect/turf_decal/bot, +/turf/open/floor/iron, +/area/station/science/ordnance/testlab) "mKf" = ( /obj/item/radio/intercom/directional/west, /obj/structure/chair/sofa/corner/maroon{ @@ -49874,6 +49725,12 @@ /obj/effect/turf_decal/tile/green/full, /turf/open/floor/iron/dark, /area/station/service/hydroponics) +"mOi" = ( +/obj/structure/railing/corner{ + dir = 8 + }, +/turf/open/space/openspace, +/area/space/nearstation) "mOj" = ( /obj/structure/railing{ dir = 5 @@ -50739,7 +50596,7 @@ /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 9 }, -/obj/machinery/disposal/bin/tagger, +/obj/machinery/disposal/bin, /turf/open/floor/iron/white, /area/station/medical/medbay/central) "mZT" = ( @@ -50984,16 +50841,6 @@ }, /turf/open/floor/iron/dark, /area/station/hallway/floor1/aft) -"ndG" = ( -/obj/structure/table, -/obj/machinery/cell_charger, -/obj/item/stock_parts/cell/high, -/obj/effect/turf_decal/stripes/white/line{ - dir = 8 - }, -/obj/machinery/status_display/ai/directional/east, -/turf/open/floor/iron/dark, -/area/station/science/auxlab) "ndL" = ( /obj/effect/turf_decal/trimline/green/warning{ dir = 1 @@ -51219,6 +51066,16 @@ /obj/structure/cable/layer3, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/aisat) +"nge" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 8; + id = "cmoshutter"; + name = "CMO Privacy Shutters" + }, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/command/heads_quarters/cmo) "ngf" = ( /obj/structure/railing, /obj/effect/decal/cleanable/dirt, @@ -51617,6 +51474,13 @@ }, /turf/open/floor/iron/dark/side, /area/station/hallway/floor3/aft) +"njL" = ( +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible/layer4{ + dir = 8 + }, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/science/ordnance/testlab) "njQ" = ( /obj/structure/railing{ dir = 1 @@ -52132,6 +51996,28 @@ }, /turf/open/floor/iron/dark/textured, /area/station/medical/cryo) +"nqP" = ( +/obj/structure/window/reinforced/plasma/spawner/directional/east, +/obj/structure/table/reinforced/plasmarglass, +/obj/item/stock_parts/power_store/cell/lead{ + pixel_x = -5; + pixel_y = 8 + }, +/obj/item/usb_cable{ + name = "jumper cable"; + pixel_x = -10; + pixel_y = 12 + }, +/obj/item/lead_pipe{ + pixel_x = -5 + }, +/obj/item/reagent_containers/spray/cleaner{ + pixel_x = 6; + pixel_y = 7 + }, +/obj/item/reagent_containers/syringe, +/turf/open/floor/pod/dark, +/area/station/service/kitchen/abandoned) "nqU" = ( /obj/effect/turf_decal/stripes/line{ dir = 9 @@ -52176,6 +52062,12 @@ "nrm" = ( /turf/closed/wall, /area/station/medical/medbay/central) +"nrr" = ( +/obj/machinery/camera/motion/directional/west{ + c_tag = "Minisat - Aft" + }, +/turf/open/space/openspace, +/area/space/nearstation) "nrt" = ( /obj/machinery/conveyor{ dir = 6; @@ -52470,9 +52362,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/station/maintenance/floor2/port/aft) -"nvy" = ( -/turf/open/floor/iron/white, -/area/station/medical/treatment_center) "nvE" = ( /obj/machinery/autolathe, /obj/effect/turf_decal/siding/thinplating_new{ @@ -53081,7 +52970,19 @@ /obj/effect/turf_decal/trimline/yellow/corner{ dir = 4 }, -/obj/item/storage/toolbox/mechanical, +/obj/item/storage/toolbox/mechanical{ + pixel_x = 8; + pixel_y = -4 + }, +/obj/item/flatpack{ + board = /obj/item/circuitboard/machine/flatpacker; + pixel_x = -6; + pixel_y = 5 + }, +/obj/item/multitool{ + pixel_x = 7; + pixel_y = 10 + }, /turf/open/floor/iron/corner{ dir = 4 }, @@ -53142,13 +53043,6 @@ "nEI" = ( /turf/open/floor/circuit, /area/station/ai_monitored/turret_protected/aisat_interior) -"nEM" = ( -/obj/item/fishing_rod, -/obj/structure/closet, -/obj/effect/spawner/random/maintenance/three, -/obj/item/clothing/mask/cigarette/pipe, -/turf/open/floor/pod/light, -/area/station/maintenance/floor2/starboard/fore) "nEO" = ( /obj/structure/table, /obj/item/screwdriver, @@ -53674,7 +53568,6 @@ dir = 1 }, /obj/effect/turf_decal/siding/white, -/obj/machinery/duct, /turf/open/floor/iron/white/textured, /area/station/medical/cryo) "nLc" = ( @@ -54413,10 +54306,6 @@ }, /turf/open/floor/iron/smooth_large, /area/station/hallway/secondary/entry) -"nVp" = ( -/obj/effect/turf_decal/trimline/blue/filled/line, -/turf/open/floor/iron/white, -/area/station/medical/treatment_center) "nVq" = ( /turf/open/openspace, /area/station/maintenance/floor3/starboard/fore) @@ -55350,19 +55239,6 @@ /obj/effect/landmark/blobstart, /turf/open/floor/plating, /area/station/maintenance/floor2/port/aft) -"oio" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/structure/railing/corner{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/blue/filled/corner{ - dir = 1 - }, -/obj/structure/disposalpipe/segment, -/turf/open/floor/iron/white, -/area/station/medical/medbay/lobby) "oiu" = ( /obj/machinery/computer/security/hos{ dir = 1 @@ -55438,14 +55314,6 @@ /obj/structure/cable, /turf/open/floor/wood/tile, /area/station/service/library) -"ojg" = ( -/obj/structure/table/reinforced/rglass, -/obj/effect/turf_decal/tile/blue/fourcorners, -/obj/machinery/door/firedoor, -/obj/structure/window/reinforced/spawner/directional/east, -/obj/item/stack/medical/gauze, -/turf/open/floor/iron/dark/textured, -/area/station/medical/medbay/lobby) "ojl" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -55695,6 +55563,13 @@ /obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, /turf/open/floor/catwalk_floor, /area/station/maintenance/floor2/port/aft) +"omq" = ( +/obj/machinery/computer/security/telescreen/vault/directional/east, +/obj/machinery/computer/security{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/command/heads_quarters/hop) "omr" = ( /turf/open/floor/iron/stairs{ dir = 8 @@ -55884,6 +55759,20 @@ /obj/machinery/light/warm/directional/north, /turf/open/floor/carpet/orange, /area/station/service/chapel/funeral) +"ooT" = ( +/obj/structure/table, +/obj/machinery/cell_charger, +/obj/item/stock_parts/power_store/cell/high, +/obj/effect/turf_decal/stripes/white/line{ + dir = 4 + }, +/obj/item/folder/white{ + pixel_y = 13 + }, +/obj/machinery/power/apc/auto_name/directional/west, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/science/lab) "ooV" = ( /obj/effect/decal/cleanable/dirt, /obj/item/ammo_casing/c38{ @@ -55933,13 +55822,13 @@ /turf/open/floor/eighties, /area/station/commons/dorms/room2) "opE" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, -/obj/effect/turf_decal/trimline/blue/filled/line, /obj/structure/disposalpipe/segment, -/turf/open/floor/iron/white, -/area/station/medical/medbay/lobby) +/obj/effect/turf_decal/tile/blue/fourcorners, +/turf/open/floor/iron/white/textured, +/area/station/medical/treatment_center) "opN" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, @@ -56178,11 +56067,9 @@ /turf/open/floor/plating, /area/station/maintenance/floor4/starboard) "osX" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 1 - }, -/obj/structure/hedge, -/turf/open/floor/carpet/green, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/restaurant_portal/bar, +/turf/open/floor/wood, /area/station/service/kitchen/diner) "ote" = ( /obj/effect/spawner/structure/window/reinforced, @@ -56272,6 +56159,16 @@ /obj/structure/chair, /turf/open/floor/iron/kitchen/herringbone, /area/station/service/kitchen/diner) +"ouy" = ( +/obj/machinery/atmospherics/pipe/smart/simple/purple/hidden/layer1{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/computer/security/telescreen/engine_waste/directional/south, +/turf/open/floor/catwalk_floor/iron, +/area/station/engineering/atmos/pumproom) "ouD" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -56283,6 +56180,9 @@ /obj/effect/turf_decal/siding/white{ dir = 4 }, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, /turf/open/floor/iron/dark/textured, /area/station/medical/paramedic) "ouF" = ( @@ -56821,16 +56721,6 @@ }, /turf/open/floor/pod/dark, /area/station/maintenance/floor1/port) -"oCb" = ( -/obj/effect/turf_decal/trimline/neutral/warning{ - dir = 8 - }, -/obj/machinery/airalarm/directional/east, -/obj/machinery/cell_charger, -/obj/item/stock_parts/cell/high, -/obj/structure/table/reinforced, -/turf/open/floor/iron/dark, -/area/station/command/gateway) "oCc" = ( /obj/effect/turf_decal/tile/red/anticorner/contrasted, /obj/machinery/flasher/directional/east{ @@ -57371,12 +57261,12 @@ /area/station/science/xenobiology) "oJs" = ( /obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, /obj/machinery/door/poddoor/shutters/preopen{ dir = 8; - id = "cmo_privacy"; + id = "cmoshutter"; name = "CMO Privacy Shutters" }, -/obj/structure/cable, /turf/open/floor/plating, /area/station/command/heads_quarters/cmo) "oJO" = ( @@ -57502,6 +57392,16 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/service) +"oLE" = ( +/obj/effect/turf_decal/trimline/neutral/warning{ + dir = 8 + }, +/obj/machinery/airalarm/directional/east, +/obj/machinery/cell_charger, +/obj/item/stock_parts/power_store/cell/high, +/obj/structure/table/reinforced, +/turf/open/floor/iron/dark, +/area/station/command/gateway) "oLG" = ( /obj/structure/beebox, /turf/open/floor/grass, @@ -57740,7 +57640,7 @@ /area/station/science/lower) "oOW" = ( /obj/structure/rack, -/obj/item/gun/energy/e_gun/dragnet, +/obj/effect/spawner/random/armory/dragnet, /turf/open/floor/iron/dark, /area/station/ai_monitored/security/armory) "oOY" = ( @@ -58510,6 +58410,15 @@ /obj/item/tank/internals/emergency_oxygen, /turf/open/floor/iron/smooth, /area/station/tcommsat/computer) +"oZd" = ( +/obj/machinery/computer/security/telescreen/auxbase/directional/south, +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/obj/effect/turf_decal/tile/yellow/half/contrasted, +/turf/open/floor/iron, +/area/station/construction/mining/aux_base) "oZj" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -58548,12 +58457,6 @@ /obj/structure/sign/poster/official/random/directional/west, /turf/open/floor/iron/dark, /area/station/security/checkpoint/second) -"oZB" = ( -/obj/structure/sign/departments/aiupload/directional/east, -/turf/open/floor/iron/dark/side{ - dir = 4 - }, -/area/station/hallway/floor2/aft) "oZE" = ( /obj/machinery/door/airlock/hatch{ name = "Maintenance Hatch" @@ -58866,13 +58769,6 @@ /obj/machinery/atmospherics/pipe/smart/simple/green/visible, /turf/open/floor/plating, /area/station/engineering/atmos) -"peN" = ( -/obj/structure/table, -/obj/effect/turf_decal/tile/purple/opposingcorners, -/obj/machinery/cell_charger, -/obj/item/stock_parts/cell/high, -/turf/open/floor/iron/white, -/area/station/science/circuits) "pfd" = ( /obj/structure/cable, /obj/effect/decal/cleanable/blood/old, @@ -59687,13 +59583,6 @@ dir = 8 }, /area/station/hallway/floor3/fore) -"pqH" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/dark/visible{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/science/ordnance/testlab) "pqO" = ( /obj/effect/decal/cleanable/glass, /obj/item/shard, @@ -59972,11 +59861,12 @@ /turf/open/floor/iron/white, /area/station/science/lower) "puH" = ( -/obj/effect/turf_decal/trimline/blue/filled/line{ +/obj/structure/disposalpipe/segment{ dir = 4 }, -/turf/open/floor/iron/white, -/area/station/medical/medbay/lobby) +/obj/effect/turf_decal/tile/blue/fourcorners, +/turf/open/floor/iron/white/textured, +/area/station/medical/treatment_center) "puI" = ( /obj/machinery/vending/cigarette, /turf/open/floor/iron, @@ -60447,6 +60337,9 @@ }, /turf/open/floor/iron/dark/side, /area/station/hallway/floor4/fore) +"pAl" = ( +/turf/open/space/basic, +/area/space/nearstation) "pAn" = ( /obj/effect/mapping_helpers/airlock/access/any/medical/general, /obj/machinery/door/airlock/medical{ @@ -60803,6 +60696,14 @@ /obj/structure/closet/firecloset, /turf/open/floor/pod/dark, /area/station/maintenance/floor3/starboard/aft) +"pEY" = ( +/obj/structure/table, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/cell_charger, +/obj/item/stock_parts/power_store/cell/high/empty, +/obj/structure/sign/poster/contraband/random/directional/east, +/turf/open/floor/iron/dark, +/area/station/commons/vacant_room/commissary) "pEZ" = ( /obj/structure/closet/radiation, /obj/effect/turf_decal/box, @@ -61463,12 +61364,6 @@ /obj/item/radio/intercom/directional/east, /turf/open/floor/iron/dark, /area/station/security/evidence) -"pNV" = ( -/obj/machinery/power/shuttle_engine/large{ - dir = 4 - }, -/turf/open/floor/plating/airless, -/area/space) "pNW" = ( /obj/effect/turf_decal/tile/blue/half/contrasted{ dir = 1 @@ -62444,6 +62339,7 @@ /area/station/science/auxlab) "qaY" = ( /obj/effect/spawner/random/engineering/tracking_beacon, +/obj/structure/cable, /turf/open/floor/wood, /area/station/service/kitchen/diner) "qbh" = ( @@ -62519,8 +62415,8 @@ /turf/open/floor/catwalk_floor, /area/station/maintenance/floor2/port/aft) "qcr" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, -/obj/machinery/firealarm/directional/north, +/obj/structure/fake_stairs/directional/south, +/obj/machinery/door/firedoor, /turf/open/floor/iron/dark/textured, /area/station/medical/cryo) "qct" = ( @@ -62870,6 +62766,24 @@ /obj/machinery/light_switch/directional/south, /turf/open/floor/wood/parquet, /area/station/medical/psychology) +"qga" = ( +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/structure/table/reinforced/rglass, +/obj/machinery/cell_charger{ + pixel_y = 10 + }, +/obj/machinery/cell_charger{ + pixel_y = 1 + }, +/obj/item/stock_parts/power_store/cell/high{ + pixel_y = 9; + pixel_x = -1 + }, +/obj/item/stock_parts/power_store/cell/high{ + pixel_x = -1 + }, +/turf/open/floor/iron/white/textured, +/area/station/medical/treatment_center) "qgb" = ( /obj/structure/table/wood, /obj/item/folder/red, @@ -63338,6 +63252,12 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/maintenance/floor2/starboard/fore) +"qnL" = ( +/obj/machinery/power/shuttle_engine/propulsion/burst{ + dir = 4 + }, +/turf/open/floor/plating/airless, +/area/space/nearstation) "qnN" = ( /obj/machinery/chem_heater/withbuffer, /turf/open/floor/circuit, @@ -63365,7 +63285,12 @@ /turf/open/floor/wood, /area/station/service/kitchen/diner) "qob" = ( -/obj/effect/turf_decal/trimline/blue/filled/line{ +/obj/machinery/airalarm/directional/south, +/obj/effect/turf_decal/siding/yellow{ + dir = 8; + pixel_x = 15 + }, +/obj/effect/turf_decal/tile/yellow/anticorner/contrasted{ dir = 8 }, /turf/open/floor/iron/white, @@ -63654,22 +63579,12 @@ /turf/open/floor/pod, /area/station/hallway/secondary/entry) "qsj" = ( -/obj/effect/turf_decal/tile/blue/fourcorners, -/obj/structure/table/glass, -/obj/item/reagent_containers/cup/bottle/salglu_solution{ - pixel_x = -6 - }, -/obj/item/reagent_containers/chem_pack{ - pixel_x = 6 - }, -/obj/item/reagent_containers/chem_pack{ - pixel_x = 6 - }, -/obj/item/reagent_containers/chem_pack{ - pixel_x = 6 +/obj/structure/bed/medical/anchored{ + dir = 1 }, -/obj/structure/sign/departments/medbay/alt/directional/north, -/turf/open/floor/iron/white/textured, +/obj/effect/decal/cleanable/cobweb/cobweb2, +/obj/machinery/light/directional/east, +/turf/open/floor/iron/white, /area/station/medical/treatment_center) "qsy" = ( /obj/machinery/airalarm/directional/south, @@ -63816,8 +63731,9 @@ /turf/open/floor/iron/white, /area/station/command/heads_quarters/captain/private) "qtM" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/junction{ + dir = 1 + }, /turf/open/floor/iron/white, /area/station/medical/medbay/lobby) "qtO" = ( @@ -64667,15 +64583,6 @@ dir = 9 }, /area/station/hallway/floor4/aft) -"qCI" = ( -/obj/effect/turf_decal/tile/blue/full, -/obj/machinery/medical_kiosk, -/obj/structure/disposalpipe/segment{ - dir = 10 - }, -/obj/machinery/duct, -/turf/open/floor/iron/white/textured, -/area/station/medical/treatment_center) "qCO" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /obj/effect/turf_decal/tile/red/opposingcorners{ @@ -65549,10 +65456,8 @@ /turf/open/floor/iron/dark/small, /area/station/service/chapel/office) "qPu" = ( -/obj/effect/turf_decal/tile/blue/fourcorners, -/obj/machinery/stasis, -/obj/machinery/defibrillator_mount/directional/north, -/turf/open/floor/iron/white/textured, +/obj/machinery/firealarm/directional/north, +/turf/open/floor/iron/white, /area/station/medical/treatment_center) "qPv" = ( /obj/item/kirbyplants/random, @@ -65750,12 +65655,6 @@ }, /turf/open/floor/engine, /area/station/science/ordnance/burnchamber) -"qRS" = ( -/obj/structure/railing/corner{ - dir = 8 - }, -/turf/open/space/openspace, -/area/space) "qRW" = ( /obj/structure/disposalpipe/junction{ dir = 8 @@ -65795,7 +65694,7 @@ /turf/open/floor/iron/white, /area/station/science/lobby) "qSD" = ( -/obj/item/kirbyplants/organic/plant21, +/obj/structure/aquarium/lawyer, /turf/open/floor/wood/parquet, /area/station/service/lawoffice) "qSJ" = ( @@ -66203,13 +66102,12 @@ /turf/open/floor/iron/dark, /area/station/security/brig) "qXX" = ( -/obj/structure/railing/corner, -/obj/effect/turf_decal/trimline/blue/filled/corner, -/obj/structure/disposalpipe/junction{ +/obj/structure/disposalpipe/junction/flip{ dir = 1 }, -/turf/open/floor/iron/white, -/area/station/medical/medbay/lobby) +/obj/effect/turf_decal/tile/blue/fourcorners, +/turf/open/floor/iron/white/textured, +/area/station/medical/treatment_center) "qYb" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -66644,6 +66542,12 @@ }, /turf/open/floor/glass/reinforced, /area/station/service/library) +"rdv" = ( +/obj/structure/rack, +/obj/item/mod/core/standard, +/obj/item/stock_parts/power_store/cell/high, +/turf/open/floor/pod/light, +/area/station/maintenance/floor3/port/aft) "rdx" = ( /obj/machinery/atmospherics/pipe/layer_manifold/scrubbers/visible{ dir = 4 @@ -66913,6 +66817,16 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/catwalk_floor/iron, /area/station/engineering/atmos) +"rgx" = ( +/obj/structure/table, +/obj/machinery/cell_charger, +/obj/item/stock_parts/power_store/cell/high, +/obj/effect/turf_decal/stripes/white/line{ + dir = 8 + }, +/obj/machinery/status_display/ai/directional/east, +/turf/open/floor/iron/dark, +/area/station/science/auxlab) "rgy" = ( /obj/effect/turf_decal/tile/purple/opposingcorners, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ @@ -67032,6 +66946,18 @@ /obj/machinery/light/small/blacklight/directional/east, /turf/open/floor/pod/light, /area/station/maintenance/floor4/starboard) +"rhO" = ( +/obj/item/kirbyplants/random, +/obj/machinery/airalarm/directional/west, +/obj/effect/turf_decal/tile/red{ + dir = 8 + }, +/obj/effect/turf_decal/tile/red{ + dir = 4 + }, +/obj/machinery/computer/security/telescreen/interrogation/directional/north, +/turf/open/floor/iron/dark, +/area/station/security/interrogation) "rhR" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -67139,11 +67065,6 @@ /obj/structure/railing/corner/end, /turf/open/floor/iron/dark, /area/station/hallway/floor1/aft) -"rjB" = ( -/obj/structure/sign/warning/biohazard/directional/east, -/obj/machinery/light/cold/no_nightlight/directional/east, -/turf/open/floor/engine/xenobio, -/area/station/science/xenobiology) "rjD" = ( /turf/closed/wall, /area/station/hallway/floor1/aft) @@ -67302,6 +67223,9 @@ "rmD" = ( /obj/effect/turf_decal/tile/yellow/opposingcorners, /obj/structure/closet/secure_closet/chemical, +/obj/structure/railing{ + dir = 8 + }, /turf/open/floor/iron/white, /area/station/medical/pharmacy) "rmF" = ( @@ -67604,11 +67528,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/construction/mining/aux_base) -"rqA" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, -/obj/machinery/duct, -/turf/open/floor/iron/dark/textured, -/area/station/medical/cryo) "rqK" = ( /obj/effect/turf_decal/stripes/full, /obj/structure/window/reinforced/spawner/directional/west, @@ -67936,12 +67855,9 @@ /turf/open/floor/glass/reinforced, /area/station/service/library) "rwv" = ( -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 1 - }, /obj/structure/cable, -/obj/effect/turf_decal/trimline/blue/filled/corner, -/obj/machinery/duct, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/trimline/blue/filled/line, /turf/open/floor/iron/white, /area/station/medical/treatment_center) "rwG" = ( @@ -68012,20 +67928,6 @@ }, /turf/open/floor/iron/dark/side, /area/station/hallway/secondary/entry) -"rxu" = ( -/obj/item/radio/intercom/directional/north{ - broadcasting = 1; - frequency = 1447; - listening = 0; - name = "Private Channel" - }, -/obj/machinery/recharge_station, -/obj/machinery/computer/security/telescreen/minisat{ - dir = 8; - pixel_x = 28 - }, -/turf/open/floor/circuit, -/area/station/ai_monitored/turret_protected/aisat/service) "rxz" = ( /obj/structure/window/reinforced/spawner/directional/east, /obj/effect/turf_decal/trimline/blue/filled/line{ @@ -68058,7 +67960,7 @@ /area/station/maintenance/floor1/starboard/fore) "rxZ" = ( /obj/item/storage/toolbox/maint_kit, -/obj/item/ammo_casing/shotgun/improvised, +/obj/effect/spawner/random/junk_shell, /turf/open/floor/pod/light, /area/station/maintenance/floor4/port) "ryh" = ( @@ -68694,13 +68596,6 @@ /obj/effect/spawner/random/engineering/tracking_beacon, /turf/open/floor/iron, /area/station/maintenance/floor2/port/aft) -"rHI" = ( -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 9 - }, -/obj/machinery/airalarm/directional/north, -/turf/open/floor/iron/white, -/area/station/medical/medbay/lobby) "rHP" = ( /obj/structure/railing/corner{ dir = 1 @@ -69135,15 +69030,6 @@ /obj/item/pen, /turf/open/floor/iron/dark, /area/station/security/interrogation) -"rOb" = ( -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/duct, -/turf/open/floor/iron/white, -/area/station/medical/treatment_center) "rOj" = ( /obj/effect/turf_decal/tile/blue/anticorner, /turf/open/floor/iron/dark/side{ @@ -69737,6 +69623,18 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/hallway/secondary/service) +"rWv" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 4 + }, +/obj/effect/turf_decal/arrows{ + dir = 4 + }, +/obj/structure/railing, +/obj/effect/decal/cleanable/robot_debris, +/obj/effect/landmark/start/bitrunner, +/turf/open/floor/iron/dark/textured_large, +/area/station/cargo/bitrunning/den) "rWx" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -69989,11 +69887,11 @@ /turf/open/floor/iron/kitchen, /area/station/service/kitchen) "sar" = ( -/obj/effect/turf_decal/trimline/blue/filled/line, /obj/structure/disposalpipe/segment, /obj/machinery/duct, -/turf/open/floor/iron/white, -/area/station/medical/medbay/lobby) +/obj/effect/turf_decal/tile/blue/fourcorners, +/turf/open/floor/iron/white/textured, +/area/station/medical/treatment_center) "sat" = ( /obj/structure/railing/corner{ dir = 1 @@ -70003,10 +69901,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/catwalk_floor, /area/station/maintenance/floor1/port) -"sav" = ( -/obj/effect/turf_decal/box/corners, -/turf/open/floor/engine/xenobio, -/area/station/science/xenobiology) "saA" = ( /obj/effect/turf_decal/siding/thinplating_new{ dir = 1 @@ -70129,12 +70023,24 @@ "scv" = ( /turf/closed/wall/r_wall, /area/station/maintenance/disposal) +"scx" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/blue/fourcorners, +/turf/open/floor/iron/white/textured, +/area/station/medical/treatment_center) "scD" = ( /obj/effect/turf_decal/tile/blue/fourcorners, /obj/machinery/suit_storage_unit/medical, /obj/structure/sign/poster/official/cleanliness/directional/east, /turf/open/floor/iron/white/textured, /area/station/medical/storage) +"scE" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/obj/structure/cable, +/turf/open/floor/iron/white, +/area/station/science/ordnance/testlab) "scG" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 1 @@ -70745,6 +70651,13 @@ /obj/structure/bookcase/random/fiction, /turf/open/floor/wood/tile, /area/station/service/library) +"slC" = ( +/obj/structure/table/reinforced/plastitaniumglass, +/obj/structure/window/reinforced/spawner/directional/west, +/obj/structure/cable, +/mob/living/basic/parrot/poly, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/command/heads_quarters/ce) "slI" = ( /obj/item/radio/intercom/directional/west, /obj/structure/window/reinforced/spawner/directional/south, @@ -70755,8 +70668,14 @@ /turf/open/floor/iron/dark, /area/station/medical/morgue) "slP" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/turf/open/floor/iron/white/textured, /area/station/medical/treatment_center) "slQ" = ( /obj/machinery/navbeacon{ @@ -70839,6 +70758,20 @@ /obj/structure/sign/poster/random/directional/north, /turf/open/floor/iron/kitchen, /area/station/service/kitchen) +"sno" = ( +/obj/structure/table/reinforced/rglass, +/obj/structure/window/reinforced/spawner/directional/east, +/obj/item/stack/medical/suture/emergency{ + pixel_y = 5; + pixel_x = -5 + }, +/obj/item/stack/medical/ointment{ + pixel_y = -5; + pixel_x = 5 + }, +/obj/machinery/door/firedoor, +/turf/open/floor/iron/dark/textured, +/area/station/medical/medbay/lobby) "snp" = ( /turf/open/floor/iron/dark/side{ dir = 8 @@ -71319,12 +71252,9 @@ /turf/open/floor/circuit, /area/station/science/xenobiology) "suB" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 1 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, /turf/open/floor/iron/white, /area/station/medical/medbay/lobby) "suD" = ( @@ -71677,13 +71607,6 @@ /obj/machinery/light/small/directional/west, /turf/open/floor/iron/dark, /area/station/security/brig) -"szp" = ( -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron/white, -/area/station/medical/treatment_center) "szt" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -72042,13 +71965,12 @@ /turf/open/floor/iron/dark, /area/station/security/brig) "sEl" = ( -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 1 - }, /obj/effect/turf_decal/trimline/blue/filled/corner{ dir = 8 }, -/obj/effect/turf_decal/trimline/blue/filled/corner, +/obj/effect/turf_decal/bot_white{ + color = "#74b2d3" + }, /turf/open/floor/iron/white, /area/station/medical/treatment_center) "sEt" = ( @@ -72058,20 +71980,6 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron/stairs/old, /area/station/service/theater) -"sEw" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 9 - }, -/obj/effect/turf_decal/trimline/blue/filled/corner, -/obj/machinery/turretid{ - control_area = "/area/station/ai_monitored/turret_protected/ai_upload"; - icon_state = "control_stun"; - name = "AI Upload turret control"; - pixel_y = 28 - }, -/turf/open/floor/iron/dark, -/area/station/ai_monitored/turret_protected/ai_upload_foyer) "sEA" = ( /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 8 @@ -72634,12 +72542,6 @@ /obj/structure/cable, /turf/open/floor/pod/light, /area/station/maintenance/solars/port/aft) -"sKZ" = ( -/obj/machinery/camera/motion/directional/west{ - c_tag = "Minisat - Aft" - }, -/turf/open/space/openspace, -/area/space) "sLe" = ( /obj/effect/turf_decal/stripes/line, /obj/effect/decal/cleanable/dirt, @@ -72860,6 +72762,12 @@ /obj/machinery/light/floor, /turf/open/floor/iron/textured_large, /area/station/hallway/secondary/entry) +"sOb" = ( +/obj/structure/railing/corner{ + dir = 4 + }, +/turf/open/space/openspace, +/area/space/nearstation) "sOj" = ( /obj/effect/spawner/random/structure/girder, /turf/open/floor/pod/light, @@ -72916,10 +72824,12 @@ /turf/open/floor/wood, /area/station/hallway/floor3/fore) "sOT" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, -/obj/machinery/camera/autoname/directional/north, -/turf/open/floor/iron/dark/textured, -/area/station/medical/cryo) +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 5 + }, +/turf/open/floor/iron/white, +/area/station/medical/treatment_center) "sOU" = ( /turf/open/openspace, /area/station/maintenance/floor4/port/aft) @@ -73577,6 +73487,11 @@ }, /turf/open/floor/wood, /area/station/commons/dorms/apartment2) +"sXk" = ( +/obj/effect/turf_decal/box/corners, +/obj/structure/sign/warning/biohazard/directional/east, +/turf/open/floor/engine/xenobio, +/area/station/science/xenobiology) "sXp" = ( /obj/structure/rack, /obj/item/radio/off{ @@ -74185,24 +74100,6 @@ /obj/effect/spawner/random/maintenance, /turf/open/floor/plating, /area/station/maintenance/floor2/starboard) -"tdM" = ( -/obj/structure/rack, -/obj/item/stock_parts/micro_laser{ - pixel_y = 7 - }, -/obj/item/stock_parts/cell/high{ - pixel_x = -4; - pixel_y = -6 - }, -/obj/item/vending_refill/wardrobe/science_wardrobe{ - pixel_y = 18 - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 8 - }, -/obj/item/radio/intercom/directional/east, -/turf/open/floor/iron/white, -/area/station/science/lower) "tdN" = ( /obj/machinery/door/airlock/hatch{ name = "Maintenance Bulkhead" @@ -74435,11 +74332,8 @@ /turf/open/floor/iron/dark, /area/station/security/courtroom) "thd" = ( -/obj/effect/turf_decal/tile/blue/full, -/obj/structure/sign/poster/official/random/directional/east, -/obj/structure/table/glass, -/obj/item/storage/box/bodybags, -/turf/open/floor/iron/white/textured, +/obj/machinery/stasis, +/turf/open/floor/iron/white, /area/station/medical/treatment_center) "thi" = ( /obj/structure/window/reinforced/spawner/directional/east, @@ -74495,12 +74389,14 @@ /turf/open/floor/pod/light, /area/station/maintenance/floor4/starboard/aft) "tia" = ( +/obj/structure/disposalpipe/segment{ + dir = 6 + }, /obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 8 + dir = 4 }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /turf/open/floor/iron/white, -/area/station/medical/medbay/lobby) +/area/station/medical/treatment_center) "tic" = ( /turf/open/floor/wood, /area/station/commons/dorms/apartment2) @@ -74702,17 +74598,6 @@ name = "lab floor" }, /area/station/science/genetics) -"tlq" = ( -/obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/east{ - cell_type = /obj/item/stock_parts/cell/hyper - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/obj/machinery/light/small/directional/north, -/turf/open/floor/iron/smooth_large, -/area/station/tcommsat/server) "tlr" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -74721,10 +74606,6 @@ "tlt" = ( /turf/open/floor/catwalk_floor, /area/station/maintenance/floor2/port/fore) -"tlJ" = ( -/obj/machinery/camera/autoname/directional/east, -/turf/open/space/openspace, -/area/space) "tlK" = ( /obj/machinery/disposal/bin, /obj/structure/disposalpipe/trunk{ @@ -74886,6 +74767,16 @@ /obj/effect/spawner/random/contraband/prison, /turf/open/floor/iron/dark, /area/station/maintenance/floor2/starboard/aft) +"tnM" = ( +/obj/structure/table, +/obj/machinery/cell_charger{ + pixel_y = 5 + }, +/obj/item/stack/cable_coil, +/obj/item/multitool, +/obj/item/stock_parts/power_store/cell/high, +/turf/open/floor/pod, +/area/station/maintenance/floor4/port/fore) "tnN" = ( /obj/structure/railing{ dir = 8 @@ -75288,6 +75179,14 @@ dir = 8 }, /area/station/hallway/floor2/aft) +"tsB" = ( +/obj/effect/turf_decal/siding/white, +/obj/structure/railing, +/obj/machinery/cell_charger, +/obj/item/stock_parts/power_store/cell/high, +/obj/structure/table/reinforced/rglass, +/turf/open/floor/iron/large, +/area/station/science/robotics/lab) "tsN" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -75639,6 +75538,12 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/pod/dark, /area/station/maintenance/floor3/port) +"twY" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/medical/treatment_center) "twZ" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -75654,11 +75559,11 @@ /turf/open/floor/pod/light, /area/station/maintenance/floor2/port/aft) "txp" = ( -/obj/effect/turf_decal/tile/blue/full, -/obj/structure/table/glass, -/obj/item/pai_card, -/obj/item/reagent_containers/spray/cleaner, -/turf/open/floor/iron/white/textured, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 1 + }, +/turf/open/floor/iron/white, /area/station/medical/treatment_center) "txu" = ( /turf/open/floor/iron/dark, @@ -76137,11 +76042,14 @@ /turf/open/floor/iron/dark, /area/station/science/lab) "tDX" = ( +/obj/structure/noticeboard/directional/north, +/obj/item/paper{ + name = "IMPORTANT NOTICE"; + default_raw_text = "Nanotrasen Mark II IV Drip Stands are to be used in the correct Nanotrasen Mark II IV Drip Stand Installation Location. Failure to do so can result in a 100 credit fine. Glory to Nanotrasen." + }, /obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 8 + dir = 4 }, -/obj/machinery/iv_drip, -/obj/machinery/light/cold/directional/north, /turf/open/floor/iron/white, /area/station/medical/treatment_center) "tEc" = ( @@ -76965,12 +76873,13 @@ /turf/open/floor/circuit, /area/station/ai_monitored/turret_protected/aisat/service) "tOW" = ( -/obj/effect/turf_decal/tile/blue/fourcorners, -/obj/machinery/stasis{ - dir = 4 +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/machinery/light_switch/directional/north{ + pixel_y = 27; + pixel_x = 12 }, -/obj/machinery/defibrillator_mount/directional/north, -/turf/open/floor/iron/white/textured, +/turf/open/floor/iron/white, /area/station/medical/treatment_center) "tPj" = ( /obj/effect/turf_decal/tile/purple/opposingcorners, @@ -77736,10 +77645,13 @@ /turf/open/floor/pod/light, /area/station/maintenance/floor3/starboard) "tZZ" = ( -/obj/effect/turf_decal/trimline/blue/filled/line, -/obj/machinery/holopad, -/obj/structure/disposalpipe/segment, -/obj/machinery/duct, +/obj/machinery/airalarm/directional/south, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/window/reinforced/spawner/directional/west, +/obj/structure/bed/medical/anchored, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 1 + }, /turf/open/floor/iron/white, /area/station/medical/treatment_center) "uae" = ( @@ -78431,10 +78343,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/textured, /area/station/cargo/storage) -"ujI" = ( -/obj/structure/railing, -/turf/open/space/openspace, -/area/space) "ujQ" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 8 @@ -78919,21 +78827,13 @@ /turf/open/floor/iron/dark, /area/station/science/ordnance/testlab) "usf" = ( -/obj/structure/railing{ - dir = 4 - }, -/obj/structure/chair/sofa/bench/solo{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 4 - }, -/obj/structure/disposalpipe/junction/flip{ +/obj/structure/disposalpipe/junction{ dir = 1 }, /obj/machinery/duct, -/turf/open/floor/iron/white, -/area/station/medical/medbay/lobby) +/obj/effect/turf_decal/tile/blue/fourcorners, +/turf/open/floor/iron/white/textured, +/area/station/medical/treatment_center) "usj" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/door/airlock/hatch{ @@ -81029,6 +80929,14 @@ }, /turf/open/floor/iron/checker, /area/station/cargo/miningdock) +"uSL" = ( +/obj/effect/turf_decal/bot, +/obj/structure/table/reinforced, +/obj/item/stock_parts/power_store/cell/high, +/obj/machinery/cell_charger, +/obj/structure/window/reinforced/spawner/directional/south, +/turf/open/floor/iron/dark/smooth_large, +/area/station/science/robotics/mechbay) "uSN" = ( /obj/structure/railing, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -81896,11 +81804,19 @@ /turf/open/floor/pod/light, /area/station/maintenance/floor4/port/fore) "ved" = ( -/obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, /turf/open/floor/wood, /area/station/service/kitchen/diner) +"vex" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible/layer4{ + dir = 8 + }, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/science/ordnance/testlab) "veA" = ( /obj/structure/railing{ dir = 8 @@ -81996,15 +81912,6 @@ /obj/structure/rack, /turf/open/floor/iron/textured_large, /area/station/medical/chemistry) -"vfW" = ( -/obj/machinery/medical_kiosk, -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 6 - }, -/obj/machinery/camera/autoname/directional/south, -/obj/machinery/firealarm/directional/south, -/turf/open/floor/iron/white, -/area/station/medical/medbay/lobby) "vfY" = ( /obj/structure/table/reinforced, /obj/item/plate{ @@ -82684,16 +82591,6 @@ "voT" = ( /turf/closed/wall, /area/station/maintenance/floor4/port/fore) -"voX" = ( -/obj/machinery/door/firedoor/border_only, -/obj/structure/railing{ - layer = 3.1 - }, -/obj/machinery/atmospherics/components/unary/thermomachine/freezer{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/station/science/ordnance/testlab) "vpa" = ( /obj/item/kirbyplants/random, /turf/open/floor/iron/dark, @@ -82873,24 +82770,6 @@ /obj/structure/marker_beacon/burgundy, /turf/open/floor/pod/light, /area/station/maintenance/floor4/starboard/aft) -"vqW" = ( -/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible{ - dir = 4 - }, -/obj/machinery/computer/security/telescreen/ordnance{ - pixel_y = 32 - }, -/obj/machinery/computer/pod/old/mass_driver_controller/ordnancedriver, -/obj/structure/table, -/obj/item/binoculars{ - pixel_x = 6; - pixel_y = 6 - }, -/obj/effect/turf_decal/siding/thinplating/dark{ - dir = 5 - }, -/turf/open/floor/iron/white, -/area/station/science/ordnance/storage) "vrh" = ( /obj/effect/turf_decal/stripes/white/line{ dir = 4 @@ -83583,13 +83462,6 @@ /obj/effect/turf_decal/trimline/brown/arrow_ccw, /turf/open/floor/iron/dark/side, /area/station/cargo/lobby) -"vzo" = ( -/obj/machinery/netpod, -/obj/structure/railing{ - layer = 3.1 - }, -/turf/open/floor/catwalk_floor/iron_dark, -/area/station/cargo/bitrunning/den) "vzu" = ( /obj/effect/landmark/start/psychologist, /obj/structure/sign/poster/official/random/directional/south, @@ -84584,8 +84456,11 @@ /turf/open/floor/iron/dark/side, /area/station/security/prison/garden) "vNV" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/white, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/obj/effect/turf_decal/tile/blue/fourcorners, +/turf/open/floor/iron/white/textured, /area/station/medical/treatment_center) "vNY" = ( /obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, @@ -84631,12 +84506,6 @@ /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 8 }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 4 - }, /turf/open/floor/iron/white, /area/station/medical/treatment_center) "vOs" = ( @@ -84798,6 +84667,21 @@ /obj/structure/window/reinforced/spawner/directional/north, /turf/open/floor/iron/cafeteria, /area/station/engineering/atmos) +"vQf" = ( +/obj/structure/table, +/obj/item/ai_module/reset/purge, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 10 + }, +/obj/effect/turf_decal/trimline/blue/filled/corner{ + dir = 4 + }, +/obj/structure/window/reinforced/spawner/directional/north, +/obj/effect/spawner/random/aimodule/neutral{ + pixel_x = 15 + }, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/ai_upload_foyer) "vQg" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -84931,15 +84815,6 @@ }, /turf/open/floor/iron/checker, /area/station/commons/vacant_room/commissary) -"vRW" = ( -/obj/effect/turf_decal/tile/blue/full, -/obj/machinery/disposal/bin, -/obj/structure/disposalpipe/trunk{ - dir = 1 - }, -/obj/machinery/duct, -/turf/open/floor/iron/white/textured, -/area/station/medical/treatment_center) "vSa" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /turf/open/floor/iron/dark/side{ @@ -84953,15 +84828,8 @@ /turf/open/floor/iron, /area/station/cargo/lobby) "vSA" = ( -/obj/effect/turf_decal/tile/blue/fourcorners, -/obj/structure/table/glass, -/obj/item/reagent_containers/cup/bottle/epinephrine, -/obj/item/reagent_containers/cup/bottle/multiver{ - pixel_x = 6 - }, -/obj/item/reagent_containers/syringe, -/obj/structure/sign/poster/official/random/directional/west, -/turf/open/floor/iron/white/textured, +/obj/machinery/digital_clock/directional/north, +/turf/open/floor/iron/white, /area/station/medical/treatment_center) "vSB" = ( /obj/structure/cable, @@ -85074,12 +84942,6 @@ /obj/machinery/power/apc/auto_name/directional/south, /turf/open/floor/pod/dark, /area/station/maintenance/floor2/port) -"vTV" = ( -/obj/effect/turf_decal/box/corners{ - dir = 4 - }, -/turf/open/floor/engine/xenobio, -/area/station/science/xenobiology) "vTY" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -85202,6 +85064,18 @@ }, /turf/open/floor/plating, /area/station/maintenance/floor2/port/fore) +"vVR" = ( +/obj/structure/table/reinforced/rglass, +/obj/structure/window/reinforced/spawner/directional/east, +/obj/machinery/airalarm/directional/north, +/obj/item/food/pizzaslice/mothic_five_cheese, +/obj/item/reagent_containers/cup/glass/coffee{ + pixel_y = 7; + pixel_x = 6 + }, +/obj/machinery/door/firedoor, +/turf/open/floor/iron/dark/textured, +/area/station/medical/medbay/lobby) "vVT" = ( /obj/effect/spawner/structure/window/hollow/reinforced/directional{ dir = 1 @@ -85303,6 +85177,13 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/textured_large, /area/station/hallway/secondary/entry) +"vWP" = ( +/obj/structure/table/reinforced, +/obj/machinery/cell_charger, +/obj/item/stock_parts/power_store/cell/high, +/obj/item/radio/intercom/directional/west, +/turf/open/floor/iron/dark/smooth_large, +/area/station/science/robotics/lab) "vWQ" = ( /obj/effect/turf_decal/siding/wood{ dir = 8 @@ -85379,6 +85260,13 @@ /obj/structure/railing/corner, /turf/open/floor/pod/light, /area/station/maintenance/floor3/port/aft) +"vXx" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, +/obj/machinery/light/small/directional/north, +/obj/machinery/airalarm/directional/north, +/obj/machinery/camera/autoname/directional/north, +/turf/open/floor/iron/dark/textured, +/area/station/medical/cryo) "vXH" = ( /obj/machinery/airalarm/directional/south, /obj/effect/decal/cleanable/blood/drip, @@ -85722,12 +85610,6 @@ }, /turf/open/floor/iron/white, /area/station/science/lower) -"wbT" = ( -/obj/structure/railing{ - dir = 1 - }, -/turf/open/space/openspace, -/area/space) "wci" = ( /obj/effect/turf_decal/siding/wood/corner{ dir = 4 @@ -85887,7 +85769,9 @@ /turf/open/floor/iron, /area/station/hallway/floor3/fore) "wdd" = ( -/turf/closed/wall, +/obj/structure/window/reinforced/spawner/directional/west, +/obj/structure/bed/medical/anchored, +/turf/open/floor/iron/white, /area/station/medical/treatment_center) "wdj" = ( /obj/effect/turf_decal/trimline/green/filled/corner{ @@ -86255,18 +86139,10 @@ /area/station/maintenance/floor4/starboard/aft) "wis" = ( /obj/effect/turf_decal/tile/blue/fourcorners, -/obj/effect/mapping_helpers/airlock/access/any/medical/general, -/obj/machinery/door/firedoor, -/obj/effect/mapping_helpers/airlock/unres{ - dir = 4 - }, -/obj/machinery/door/airlock/medical/glass{ - name = "Treatment Center" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 +/obj/machinery/door/firedoor/border_only{ + dir = 8 }, -/turf/open/floor/iron/white, +/turf/open/floor/iron/white/textured, /area/station/medical/treatment_center) "wit" = ( /obj/structure/cable, @@ -86468,25 +86344,6 @@ }, /turf/open/floor/plating, /area/station/hallway/secondary/exit/escape_pod) -"wkP" = ( -/obj/structure/table, -/obj/item/reagent_containers/condiment/saltshaker{ - layer = 3.1; - pixel_x = -2; - pixel_y = 2 - }, -/obj/item/reagent_containers/condiment/peppermill{ - desc = "Often used to flavor food or make people sneeze. Fashionably moved to the left side of the table."; - pixel_x = -8; - pixel_y = 2 - }, -/obj/item/reagent_containers/condiment/enzyme{ - pixel_x = 9; - pixel_y = 3 - }, -/obj/item/book/manual/chef_recipes, -/turf/open/floor/iron, -/area/station/security/prison) "wkX" = ( /turf/open/floor/catwalk_floor, /area/station/hallway/floor2/fore) @@ -87698,18 +87555,6 @@ /obj/structure/closet/crate/trashcart/filled, /turf/open/floor/pod/light, /area/station/maintenance/floor1/port/aft) -"wzI" = ( -/obj/effect/mapping_helpers/airlock/unres, -/obj/machinery/door/airlock/medical/glass{ - id_tag = "med_doors"; - name = "Medbay" - }, -/obj/machinery/door/firedoor, -/obj/effect/turf_decal/tile/blue/fourcorners, -/obj/effect/mapping_helpers/airlock/access/any/medical/general, -/obj/structure/disposalpipe/segment, -/turf/open/floor/iron/white/textured, -/area/station/medical/medbay/lobby) "wzJ" = ( /obj/effect/turf_decal/siding/wood, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -88232,16 +88077,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/textured_large, /area/station/engineering/lobby) -"wHe" = ( -/obj/structure/table, -/obj/machinery/cell_charger{ - pixel_y = 5 - }, -/obj/item/stack/cable_coil, -/obj/item/multitool, -/obj/item/stock_parts/cell/high, -/turf/open/floor/pod, -/area/station/maintenance/floor4/port/fore) "wHj" = ( /obj/structure/table, /obj/item/hfr_box/body/waste_output, @@ -88442,6 +88277,22 @@ }, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/hos) +"wIX" = ( +/obj/structure/table, +/obj/item/storage/toolbox/emergency{ + pixel_y = 12 + }, +/obj/item/stack/cable_coil/cut{ + pixel_y = 7 + }, +/obj/item/stock_parts/power_store/cell/lead{ + pixel_x = 5; + pixel_y = 4 + }, +/obj/item/wirecutters, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/pod/light, +/area/station/maintenance/floor1/starboard/fore) "wJf" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 1 @@ -88704,10 +88555,12 @@ /turf/open/floor/iron, /area/station/science/auxlab) "wLC" = ( -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 1 +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/effect/turf_decal/bot_white{ + color = "#74b2d3" }, -/turf/open/floor/iron/white, +/obj/machinery/holopad, +/turf/open/floor/iron/white/textured, /area/station/medical/treatment_center) "wLD" = ( /obj/item/radio/intercom/directional/south, @@ -88908,6 +88761,12 @@ dir = 1 }, /area/station/hallway/floor1/fore) +"wOo" = ( +/obj/machinery/power/shuttle_engine/large{ + dir = 4 + }, +/turf/open/floor/plating/airless, +/area/space/nearstation) "wOt" = ( /obj/machinery/door/morgue{ name = "Confession Booth" @@ -89620,6 +89479,24 @@ /obj/structure/cable, /turf/open/floor/iron/smooth_large, /area/station/maintenance/disposal) +"wYb" = ( +/obj/structure/table, +/obj/item/stock_parts/micro_laser, +/obj/item/stock_parts/servo{ + pixel_x = 15; + pixel_y = 4 + }, +/obj/item/reagent_containers/dropper{ + pixel_x = -2; + pixel_y = 9 + }, +/obj/effect/turf_decal/tile/purple/fourcorners, +/obj/item/flatpack{ + board = /obj/item/circuitboard/machine/flatpacker + }, +/obj/item/multitool, +/turf/open/floor/iron/white, +/area/station/science/lab) "wYd" = ( /obj/effect/turf_decal/tile/blue/anticorner{ dir = 1 @@ -90499,13 +90376,6 @@ }, /turf/open/floor/engine/airless, /area/station/engineering/supermatter/waste) -"xkh" = ( -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 4 - }, -/obj/effect/decal/cleanable/blood/old, -/turf/open/floor/iron/white, -/area/station/medical/treatment_center) "xko" = ( /obj/structure/cable, /obj/effect/decal/cleanable/dirt, @@ -90592,18 +90462,14 @@ /obj/machinery/door/firedoor, /turf/open/floor/iron/white, /area/station/medical/pharmacy) -"xln" = ( -/obj/machinery/power/shuttle_engine/huge{ - dir = 4 - }, -/turf/open/floor/plating/airless, -/area/space) "xlu" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 5 + dir = 10 }, /turf/open/floor/iron/white, -/area/station/medical/medbay/lobby) +/area/station/medical/treatment_center) "xlD" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 8 @@ -90936,14 +90802,14 @@ /turf/open/floor/iron/dark, /area/station/security/lockers) "xqZ" = ( -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 4 +/obj/machinery/camera/directional/north{ + c_tag = "Medbay - Treatment Center"; + name = "medbay camera"; + network = list("ss13","medbay") }, -/obj/machinery/power/apc/auto_name/directional/north, -/obj/structure/cable, -/obj/machinery/iv_drip, -/obj/effect/decal/cleanable/blood/old, -/turf/open/floor/iron/white, +/obj/machinery/shower/directional/south, +/obj/structure/fluff/shower_drain, +/turf/open/floor/catwalk_floor/flat_white, /area/station/medical/treatment_center) "xrh" = ( /obj/effect/turf_decal/tile/blue{ @@ -91271,16 +91137,6 @@ }, /turf/open/floor/iron/dark, /area/station/science/ordnance/storage) -"xvN" = ( -/obj/structure/table, -/obj/item/reagent_containers/cup/beaker{ - pixel_x = 5 - }, -/obj/item/reagent_containers/condiment/enzyme{ - layer = 5 - }, -/turf/open/floor/iron/kitchen, -/area/station/service/kitchen) "xvO" = ( /obj/effect/decal/cleanable/oil, /obj/effect/decal/cleanable/dirt, @@ -91377,11 +91233,11 @@ /turf/open/floor/bamboo/tatami/black, /area/station/commons/storage/art) "xwZ" = ( -/obj/effect/turf_decal/trimline/blue/filled/corner{ - dir = 1 - }, /obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 4 + dir = 8 + }, +/obj/effect/turf_decal/bot_white{ + color = "#74b2d3" }, /turf/open/floor/iron/white, /area/station/medical/treatment_center) @@ -91419,10 +91275,6 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/commons/vacant_room/office) -"xxA" = ( -/obj/machinery/holopad, -/turf/open/floor/iron/white, -/area/station/science/ordnance/testlab) "xxC" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, @@ -91778,6 +91630,7 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 4 }, +/obj/structure/cable, /turf/open/floor/wood, /area/station/service/kitchen/diner) "xCR" = ( @@ -92003,11 +91856,11 @@ pixel_x = 9 }, /obj/machinery/button/door/directional/north{ - id = "cmo_privacy"; - name = "Robotics Privacy Control"; - pixel_x = -6; + name = "CMO Privacy Shutters"; + id = "cmoshutter"; + req_access = list("cmo"); pixel_y = 25; - req_access = list("cmo") + pixel_x = -5 }, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/cmo) @@ -92453,13 +92306,6 @@ }, /turf/open/floor/catwalk_floor, /area/station/maintenance/floor3/port) -"xJX" = ( -/obj/structure/table, -/obj/item/clothing/mask/cigarette/candy{ - pixel_x = 4 - }, -/turf/open/floor/iron/dark/smooth_large, -/area/station/hallway/floor1/aft) "xKa" = ( /obj/effect/turf_decal/stripes/white/corner, /turf/open/floor/iron/dark/corner, @@ -92490,16 +92336,18 @@ /obj/structure/cable, /turf/open/floor/iron/dark, /area/station/security/evidence) -"xKt" = ( -/obj/structure/railing/corner, -/turf/open/space/openspace, -/area/space) "xKy" = ( /obj/machinery/modular_computer/preset/id{ dir = 8 }, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/cmo) +"xKW" = ( +/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ + dir = 4 + }, +/turf/open/space/basic, +/area/space/nearstation) "xKZ" = ( /obj/machinery/light_switch/directional/north, /obj/machinery/shower/directional/west, @@ -92630,12 +92478,12 @@ /turf/open/floor/iron/dark, /area/station/command/teleporter) "xMH" = ( -/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, /obj/machinery/door/airlock/hatch{ name = "Maintenance Access" }, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/mapping_helpers/airlock/unres, +/obj/effect/mapping_helpers/airlock/access/any/medical/maintenance, /turf/open/floor/plating, /area/station/maintenance/floor1/port) "xMJ" = ( @@ -92646,6 +92494,14 @@ dir = 8 }, /area/station/hallway/floor3/aft) +"xMV" = ( +/obj/structure/table/reinforced, +/obj/item/stock_parts/power_store/cell/high, +/obj/machinery/cell_charger, +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/machinery/airalarm/directional/east, +/turf/open/floor/iron/dark, +/area/station/command/bridge) "xMW" = ( /obj/structure/cable, /obj/structure/disposalpipe/junction{ @@ -92666,6 +92522,14 @@ /obj/effect/spawner/random/structure/crate, /turf/open/floor/pod/light, /area/station/maintenance/floor1/port/aft) +"xNd" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/siding/blue, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/medical/medbay/lobby) "xNf" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/landmark/start/hangover, @@ -92707,21 +92571,16 @@ /turf/open/floor/pod/dark, /area/station/maintenance/floor2/starboard/aft) "xNH" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/railing{ - dir = 8 - }, -/obj/structure/chair/sofa/bench/solo{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 8 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, /obj/structure/disposalpipe/segment, -/turf/open/floor/iron/white, -/area/station/medical/medbay/lobby) +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/tile/blue/fourcorners, +/turf/open/floor/iron/white/textured, +/area/station/medical/treatment_center) "xNK" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/closet/crate, @@ -93162,12 +93021,6 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/maintenance/disposal/incinerator) -"xUk" = ( -/obj/structure/railing/corner{ - dir = 1 - }, -/turf/open/space/openspace, -/area/space) "xUB" = ( /obj/machinery/light/floor, /turf/open/floor/iron/dark/side{ @@ -93678,10 +93531,7 @@ /turf/open/misc/beach/sand, /area/station/hallway/floor2/fore) "yba" = ( -/obj/effect/turf_decal/trimline/blue/filled/line, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/sign/poster/official/random/directional/west, +/obj/structure/disposalpipe/segment, /turf/open/floor/iron/white, /area/station/medical/treatment_center) "ybe" = ( @@ -94211,13 +94061,11 @@ /turf/open/floor/iron/smooth, /area/station/cargo/warehouse) "yjm" = ( -/obj/structure/table, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/cell_charger, -/obj/item/stock_parts/cell/high/empty, -/obj/structure/sign/poster/contraband/random/directional/east, -/turf/open/floor/iron/dark, -/area/station/commons/vacant_room/commissary) +/obj/structure/railing{ + dir = 1 + }, +/turf/open/space/openspace, +/area/space/nearstation) "yjJ" = ( /obj/effect/turf_decal/siding/wideplating_new/dark/corner, /turf/open/floor/engine/co2, @@ -94434,6 +94282,10 @@ /obj/machinery/holopad, /turf/open/floor/iron/white/herringbone, /area/station/medical/patients_rooms) +"ymh" = ( +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/science/ordnance/testlab) (1,1,1) = {" owI @@ -110765,7 +110617,7 @@ wUH hyN wBR pTR -mIV +oZd wBR wBR wBR @@ -116382,7 +116234,7 @@ owI owI oic oic -mlC +wIX laR oic jdc @@ -117669,7 +117521,7 @@ tXe tXe cOT sxb -luo +rWv hTP lNW qZU @@ -117926,7 +117778,7 @@ tXe tXe pjw scn -vzo +beK dqM bED qZU @@ -118707,7 +118559,7 @@ eaW lSJ mxC jUP -gYy +etb myW kga uTH @@ -127736,9 +127588,9 @@ jsP fQQ lkE kzE -xgH -xgH -xgH +kzE +kzE +kzE rSc tCB twx @@ -127992,11 +127844,11 @@ hLX hLX hLX lkE -ggp +wCn opB wCR -xgH -xgH +kzE +kzE ulh eVk wVn @@ -128253,7 +128105,7 @@ jQb hzV vLM lBB -xgH +kzE pLe lJk wVn @@ -128510,7 +128362,7 @@ wCn fKC ssi tkz -xgH +kzE dxS twx wVn @@ -128767,7 +128619,7 @@ kzE wAe mYo kzr -xgH +kzE wVn wVn wVn @@ -129024,7 +128876,7 @@ xMH trP dpC qHH -xgH +kzE oBQ xgH xgH @@ -129277,11 +129129,11 @@ dJO tIG vag vag -xgH -xgH -xgH -xgH -xgH +kzE +kzE +kzE +kzE +kzE dJO nJI xgH @@ -132092,7 +131944,7 @@ nor rcc sHG uxT -tlq +jkD qkL snO jRp @@ -135153,7 +135005,7 @@ oIJ hRR qXk hHB -hHB +lbW gmw hOy lHR @@ -135426,7 +135278,7 @@ eIr oyH xnr fvO -xJX +lAn oaa uYB tLa @@ -136723,7 +136575,7 @@ sQD lOI sjs oFr -bbN +iHL kzE fmb xgH @@ -136978,7 +136830,7 @@ nPb rCO cjc aRI -gSr +slC bgs hZt kzE @@ -138755,7 +138607,7 @@ kDg vsL kDg rBP -iht +kZr ykU mMO tCC @@ -140555,7 +140407,7 @@ oIy irk nDr kBz -kIT +gTZ bwl wlA kGK @@ -141581,13 +141433,13 @@ hQy vmr vmr skj -kFk +ouy sAH hhb gGt qEw sAH -isp +gJl jSD ppd uyD @@ -143388,7 +143240,7 @@ mjv tZD oIy owI -bOk +xKW owI cHX owI @@ -143398,7 +143250,7 @@ biH owI cHX owI -bOk +xKW owI dEc xMY @@ -143903,7 +143755,7 @@ gxT fmg owI jkM -bOk +xKW jkM owI caC @@ -143911,7 +143763,7 @@ wqD mdr owI jkM -bOk +xKW jkM owI oyh @@ -144160,7 +144012,7 @@ teq teq owI jkM -bOk +xKW jkM owI caC @@ -144168,7 +144020,7 @@ wqD mdr owI jkM -bOk +xKW jkM owI oyh @@ -144931,7 +144783,7 @@ sKt teq owI jkM -bOk +xKW jkM owI caC @@ -144939,7 +144791,7 @@ wqD mdr owI jkM -bOk +xKW jkM owI oyh @@ -145188,7 +145040,7 @@ xqr gIz owI jkM -bOk +xKW jkM owI caC @@ -145196,7 +145048,7 @@ wqD mdr owI jkM -bOk +xKW jkM owI oyh @@ -147218,17 +147070,17 @@ owI owI owI owI -aTO -fCp -pNV -aTO -fCp -fCp -xln -aTO -fCp -fCp -xln +qnL +rcO +wOo +qnL +rcO +rcO +mlU +qnL +rcO +rcO +mlU teq teq teq @@ -147268,17 +147120,17 @@ iSU iSU iSU iSU -fCp -fCp -xln -aTO -fCp -fCp -xln -aTO -fCp -pNV -aTO +rcO +rcO +mlU +qnL +rcO +rcO +mlU +qnL +rcO +wOo +qnL owI owI owI @@ -147476,16 +147328,16 @@ owI owI owI owI -fCp -fCp +rcO +rcO owI -fCp -fCp -fCp +rcO +rcO +rcO owI -fCp -fCp -fCp +rcO +rcO +rcO owI owI owI @@ -147525,16 +147377,16 @@ owI owI owI owI -fCp -fCp -fCp +rcO +rcO +rcO owI -fCp -fCp -fCp +rcO +rcO +rcO owI -fCp -fCp +rcO +rcO owI owI owI @@ -147736,7 +147588,13 @@ owI owI owI owI +pAl +pAl +pAl owI +pAl +pAl +pAl owI owI owI @@ -147776,19 +147634,13 @@ owI owI owI owI +pAl +pAl +pAl owI -owI -owI -owI -owI -owI -owI -owI -owI -owI -owI -owI -owI +pAl +pAl +pAl owI owI owI @@ -174772,7 +174624,7 @@ oyh oyh oyh oyh -ucA +jVQ ucA ucA ucA @@ -175029,7 +174881,7 @@ oyh oyh oyh oyh -ucA +jVQ ucA ucA ucA @@ -175286,7 +175138,7 @@ oyh oyh oyh oyh -ucA +jVQ ucA ucA ucA @@ -175543,7 +175395,7 @@ oyh oyh oyh oyh -ucA +jVQ ucA ucA ucA @@ -175800,7 +175652,7 @@ oyh oyh oyh oyh -ucA +jVQ ucA ucA ucA @@ -176057,7 +175909,7 @@ oyh oyh oyh oyh -ucA +jVQ ucA ucA ucA @@ -180898,7 +180750,7 @@ wwu wwu wwu wwu -nEM +aOq qdW sbw wwu @@ -181708,7 +181560,7 @@ lQI lQI ozr jJu -aJO +nqP qiR rkZ kms @@ -182187,7 +182039,7 @@ mKZ sxl naI lNN -peN +iGR xuv jBm xuv @@ -182966,7 +182818,7 @@ oFY mBZ ijS obj -ndG +rgx sEL biW xWe @@ -184766,7 +184618,7 @@ kJg kmR lcB kGf -aRG +ooT wXC ePa rNg @@ -185279,7 +185131,7 @@ mhT jFr sif lvS -cSb +wYb mUJ jnV sif @@ -188094,7 +187946,7 @@ hge hge hge oiO -bMu +ijV pKO aiN jDc @@ -189134,7 +188986,7 @@ kXZ wbS eGF dpL -tdM +hGG bvx btp dpL @@ -190438,7 +190290,7 @@ syV wPX xKq nCG -oJs +nge goX oJs nCG @@ -190951,7 +190803,7 @@ jRO eCO wyE xKq -lTO +hab dZz bPP xhJ @@ -195053,17 +194905,17 @@ vsx xYM jLQ yka -ilR -grm +mtI +ggp hOX qob -dyP aHk -rHI +eEZ +twY tia cwz -ael -gBZ +twY +twY oxn oUE eIw @@ -195311,11 +195163,11 @@ xYM jLQ tDb gvp -hYk -qtM gVI -dyG -wzI +qtM +xNd +ihL +hwV hYk qXX usf @@ -195825,15 +195677,15 @@ cdm jLQ aYU gvp -hYk +ffh lbi blH ihL hwV -hSs -eEZ +opE +opE xNH -oio +opE opE dAF wPS @@ -196080,17 +195932,17 @@ eUq ttb wQu jLQ -yka -ilR -xlu +dyG +mtI +gYa jIi csR -vfW aHk +vOo xlu -bez +dzM puH -gYa +dzM gBV oxn fES @@ -196339,19 +196191,19 @@ xYM jLQ usK ilR -ojg +vVR hHe -ftD +sno aHk wdd -wdd +fqn wis slP -cZm -wdd -wdd -wdd -wdd +iAQ +tZZ +aZW +aZW +aZW iSP iSP iSP @@ -196601,14 +196453,14 @@ ouD dUj sRR vSA -cZI -bCd +rwv +dzM vNV -gRW +hwV gHO yba lfW -wdd +aZW pOK nqM qQM @@ -196859,13 +196711,13 @@ dhZ sRR tOW rwv -aTc -dgm -gcm -xkh -fDL +bCd +dzM +lWV +txp +aaU coZ -wdd +aZW aYB xcY gEZ @@ -197116,14 +196968,14 @@ loQ sRR tDX kRM -gQE +dzM wLC -nVp -txp -aaU -ecK -wdd +dzM +sOT +twY +twY qcr +xcY otX gEZ dHR @@ -197367,20 +197219,20 @@ jEk jLQ aje grN -sRR +aTc gxi woE biz -nvy +dzM kUl -qCI +qga dzM -tZZ -vRW -rOb -fqn -iZO -rqA +dYM +scx +dzM +dzM +qcr +xcY nKY mjg ehO @@ -197630,14 +197482,14 @@ gBz sRR xqZ jTK -kUf -szp -dYM +dzM +dzM +dzM ijd -hzF -mtI -wdd -sOT +vOo +vOo +qcr +xcY rEp gEZ dHR @@ -197889,12 +197741,12 @@ qPu sEl vOo xwZ -dWZ +vOo aRz -fEj +aaU ilI -wdd -aYB +aZW +vXx xcY gEZ wcH @@ -198147,10 +197999,10 @@ iDr thd bYb bnC -dXy -bND +iHC +thd aHK -wdd +aZW bwE wat ydn @@ -198403,11 +198255,11 @@ qvN qvN qvN qvN -wdd -wdd -wdd -wdd -wdd +aZW +fEj +aZW +aZW +aZW ylR ylR ylR @@ -200975,7 +200827,7 @@ bet iAb bif fSi -bnI +vWP aal aAK ybG @@ -203015,7 +202867,7 @@ xDM ddA pZW wCG -oZB +jZS caF dKS bsv @@ -203273,7 +203125,7 @@ lkA pZW nyE nyE -aRl +cIc nyE nyE kuB @@ -203284,7 +203136,7 @@ igE hcr jbR cqR -bfA +uSL aFs jeF blv @@ -203529,9 +203381,9 @@ sBb ybB rkY nyE -sEw +eIg eiD -kMl +vQf nyE sgJ kzK @@ -204316,7 +204168,7 @@ bgz bid grk bmL -bpD +tsB mOH jhU btW @@ -204812,7 +204664,7 @@ mPw uZF svu uZF -lSI +kKR biR vLx vpA @@ -205069,7 +204921,7 @@ mPw uZF svu uZF -iOD +aTe biR nqb xAu @@ -247226,11 +247078,11 @@ fjo mso dFd awt -cix gjf gjf -qoa gjf +qoa +jDe jDe qoW tTc @@ -247484,7 +247336,6 @@ mso dFd awt gjf -gjf ulB ulB ulB @@ -247493,6 +247344,7 @@ bMs kpa jzE gjf +gjf ddx rBC rBC @@ -247741,7 +247593,6 @@ mso laJ jWT tRT -gjf nXq xEL oAm @@ -247750,6 +247601,7 @@ dId jAl jHT gjf +gjf ddx rBC rBC @@ -247998,7 +247850,6 @@ gWg iOh awt gjf -gjf mQg rBC pzK @@ -248007,6 +247858,7 @@ gjf wtg gjf gjf +gjf uCW kHc xAq @@ -248255,7 +248107,6 @@ qcd ccF awt gjf -xCM mQg rBC pzK @@ -248264,6 +248115,7 @@ gjf vXY vRj ldV +osX jHJ hVt hVt @@ -248512,7 +248364,6 @@ qcd nsn rSS xDS -xDS sln jAl pWr @@ -248520,6 +248371,7 @@ jDe bMs kpa jzE +gjf vRj vWQ vWQ @@ -248768,17 +248620,17 @@ fjo qcd ceh dMj -gjf -xDS +cix ulB ulB ulB -jDe +xCM dId jAl jHT +gjf +xDS xDS -xna xna xna xna @@ -249025,9 +248877,8 @@ fjo qcd fOu awt -gjf -xDS -xDS +cix +cix xDS xDS ved @@ -249035,7 +248886,8 @@ xDS xDS xDS xDS -osX +xDS +gjf vZg dIx dIx @@ -249284,10 +249136,10 @@ dFd awt gjf gjf -gjf +vXY xDS qaY -jDe +gjf gjf wtg gjf @@ -249543,11 +249395,11 @@ rZS nla mQF xDS -gjf jDe bMs kpa jzE +gjf tFS nNJ ycW @@ -249800,12 +249652,12 @@ ubR mhE rwh xDS -gjf jDe dId jAl jHT gjf +gjf nNJ dxv ssj @@ -250058,7 +249910,7 @@ ubR nYE xDS jDe -jDe +gjf iwU psq eEr @@ -251352,7 +251204,7 @@ sFt oEU oSA sFt -xvN +eFt fWl bQG vZF @@ -256968,9 +256820,9 @@ umb nqi fXR yhT -vTV -rjB -sav +kYS +gHe +sXk iHm sSB ccV @@ -261859,7 +261711,7 @@ isU cdj eAi spT -hsA +myw fmK plX bex @@ -262142,7 +261994,7 @@ oNV eLw cmh kSU -yjm +pEY piR piR roj @@ -267804,7 +267656,7 @@ hLo piR xRs bKR -mHo +rdv piR mom hcT @@ -276264,11 +276116,11 @@ ucA ucA ucA ucA -xKt -djc -djc -djc -dkn +mbP +lcj +lcj +lcj +sOb ucA ucA ucA @@ -276521,11 +276373,11 @@ ucA ucA ucA ucA -ujI +hNN edA pRs pRs -wbT +yjm ucA ucA ucA @@ -276778,11 +276630,11 @@ ucA ucA ucA ucA -ujI +hNN pRs pRs pRs -wbT +yjm ucA ucA ucA @@ -277035,11 +276887,11 @@ ucA ucA ucA ucA -qRS -acl +mOi +kfS pRs -acl -xUk +kfS +cZk ucA ucA ucA @@ -307357,7 +307209,7 @@ ucA ucA ucA ucA -tlJ +kKb ucA gMe gMe @@ -307367,7 +307219,7 @@ gMe gMe gMe ucA -tlJ +kKb ucA ucA ucA @@ -309670,7 +309522,7 @@ bfx eGK onE aNs -gEo +xMV wFT gaJ qOq @@ -309682,7 +309534,7 @@ qNY iTN qGF uIx -wHe +tnM lvm vSG mpK @@ -311992,7 +311844,7 @@ lgD ykw hIb fKZ -hbW +luU dbZ hKg raq @@ -313284,7 +313136,7 @@ fUm oTx uqc nYe -jAe +cep fwj lOe uIx @@ -313534,7 +313386,7 @@ rti vuU wgO rZb -acL +bQj jKF fXa sFa @@ -315564,14 +315416,14 @@ mSG mSG aSX aSX -pqH -bJA +jaS +vex mKu hHi fMc gOF ddH -ddH +mJN nPE pDq vfi @@ -315822,10 +315674,10 @@ dWz lYx unQ wMU -oUW -rDL -jjj -dIJ +njL +ymh +bcE +lOy oTq jjT hmM @@ -316082,7 +315934,7 @@ hAH eSq tHk bDn -gwe +scE eoI nPE nPE @@ -316339,7 +316191,7 @@ wMU aqm kFy xTG -xxA +hrG xdE nPE uZr @@ -316350,7 +316202,7 @@ fkN fQx nTJ iXS -hBF +mFQ hNh hNh hNh @@ -316593,7 +316445,7 @@ oOA tyR tyR xqB -voX +fAw kFy eTV auO @@ -317893,7 +317745,7 @@ xvr hIB nTo hns -oCb +oLE jbr iXS eHr @@ -318901,7 +318753,7 @@ ucA xuh lln lln -vqW +mko eNX bNP nQj @@ -320204,7 +320056,7 @@ nPE qPv iQe wqP -iNA +omq obK kpI dJC @@ -326654,7 +326506,7 @@ bJm oZo gXi gDx -iIb +rhO ftZ tBk sCO @@ -330766,7 +330618,7 @@ yeU jVK vWn mRa -wkP +kQG uTc nOa vVW @@ -333577,7 +333429,7 @@ oyh nbP tIl fEv -kVs +dMt nbP oyh oyh @@ -337705,7 +337557,7 @@ oyh oyh fMl sWs -wbT +yjm ucA ucA ucA @@ -337938,7 +337790,7 @@ oyh aFj aFj aFj -rxu +dlR cRs uEb uEb @@ -337960,9 +337812,9 @@ oyh oyh oyh oyh -acl -acl -xUk +kfS +kfS +cZk ucA ucA ucA @@ -338711,7 +338563,7 @@ ucA ucA ucA ucA -sKZ +nrr ucA ucA ucA @@ -338722,7 +338574,7 @@ ucA ucA ucA ucA -sKZ +nrr ucA ucA ucA @@ -341800,11 +341652,11 @@ ucA ucA ucA ucA -xKt -djc -djc -djc -dkn +mbP +lcj +lcj +lcj +sOb ucA ucA ucA @@ -342057,11 +341909,11 @@ ucA ucA ucA ucA -ujI +hNN edA pRs pRs -wbT +yjm ucA ucA ucA @@ -342314,7 +342166,7 @@ ucA ucA ucA ucA -ujI +hNN pRs pRs ucA diff --git a/_maps/map_files/debug/runtimestation.dmm b/_maps/map_files/debug/runtimestation.dmm index 1c5a88860bea5..7d949fb043d0c 100644 --- a/_maps/map_files/debug/runtimestation.dmm +++ b/_maps/map_files/debug/runtimestation.dmm @@ -162,7 +162,7 @@ pixel_y = 5 }, /obj/item/storage/toolbox/syndicate, -/obj/item/stock_parts/cell/infinite, +/obj/item/stock_parts/power_store/cell/infinite, /turf/open/floor/iron, /area/station/engineering/main) "aT" = ( @@ -683,6 +683,10 @@ /obj/effect/turf_decal/tile/blue{ dir = 8 }, +/obj/item/disk/data/debug{ + pixel_y = 9; + pixel_x = 7 + }, /turf/open/floor/iron/white/corner, /area/station/medical/medbay) "cL" = ( @@ -1269,13 +1273,11 @@ /obj/effect/turf_decal/bot, /obj/machinery/button/door/directional/east{ id = "cargounload"; - layer = 4; name = "Loading Doors"; pixel_y = 8 }, /obj/machinery/button/door/directional/east{ id = "cargoload"; - layer = 4; name = "Loading Doors"; pixel_y = -8 }, @@ -2334,9 +2336,9 @@ "Ov" = ( /obj/structure/table, /obj/machinery/cell_charger, -/obj/item/stock_parts/cell/bluespace, -/obj/item/stock_parts/cell/bluespace, -/obj/item/stock_parts/cell/bluespace, +/obj/item/stock_parts/power_store/cell/bluespace, +/obj/item/stock_parts/power_store/cell/bluespace, +/obj/item/stock_parts/power_store/cell/bluespace, /turf/open/floor/iron/dark, /area/station/science/explab) "OU" = ( diff --git a/_maps/map_files/generic/CentCom.dmm b/_maps/map_files/generic/CentCom.dmm index 0a8c38681990b..2346e028c49e9 100644 --- a/_maps/map_files/generic/CentCom.dmm +++ b/_maps/map_files/generic/CentCom.dmm @@ -914,8 +914,7 @@ /area/centcom/central_command_areas/control) "ec" = ( /obj/structure/railing{ - dir = 4; - layer = 4.1 + dir = 4 }, /obj/effect/turf_decal/tile/neutral/fourcorners, /obj/effect/turf_decal/siding/dark{ @@ -2091,14 +2090,12 @@ "jy" = ( /obj/machinery/button/door/indestructible{ id = "XCCQMLoaddoor"; - layer = 4; name = "Loading Doors"; pixel_x = -27; pixel_y = -5 }, /obj/machinery/button/door/indestructible{ id = "XCCQMLoaddoor2"; - layer = 4; name = "Loading Doors"; pixel_x = -27; pixel_y = 5 @@ -2798,7 +2795,6 @@ /obj/machinery/recharger, /obj/machinery/button/door/indestructible{ id = "XCCsecdepartment"; - layer = 3; name = "CC Security Checkpoint Control"; pixel_x = 24; pixel_y = 24 @@ -3259,6 +3255,7 @@ pixel_x = 32 }, /obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/computer/security/telescreen/research/directional/south, /turf/open/floor/iron/dark, /area/centcom/central_command_areas/admin) "oW" = ( @@ -4043,8 +4040,7 @@ /area/centcom/central_command_areas/ferry) "sw" = ( /obj/structure/railing{ - dir = 8; - layer = 4.1 + dir = 8 }, /obj/effect/turf_decal/tile/neutral/fourcorners, /obj/effect/turf_decal/siding/dark{ @@ -4909,14 +4905,12 @@ }, /obj/machinery/button/door/indestructible{ id = "XCCcustoms1"; - layer = 3.5; name = "CC Customs 1 Control"; pixel_x = 8; pixel_y = -24 }, /obj/machinery/button/door/indestructible{ id = "XCCcustoms2"; - layer = 3.5; name = "CC Customs 2 Control"; pixel_x = -8; pixel_y = -24 @@ -6449,8 +6443,7 @@ "CT" = ( /obj/structure/table/reinforced, /obj/structure/railing{ - dir = 8; - layer = 4.1 + dir = 8 }, /obj/effect/turf_decal/tile/neutral/fourcorners, /obj/effect/turf_decal/siding/dark{ @@ -7318,8 +7311,7 @@ /area/centcom/central_command_areas/control) "HZ" = ( /obj/structure/railing{ - dir = 6; - layer = 3.1 + dir = 6 }, /obj/effect/turf_decal/tile/neutral/fourcorners, /obj/effect/turf_decal/siding/dark{ @@ -7496,12 +7488,6 @@ /area/centcom/tdome/administration) "JO" = ( /obj/machinery/modular_computer/preset/id/centcom, -/obj/machinery/computer/security/telescreen{ - desc = "Used for watching the RD's goons and the AI's satellite from the safety of his office."; - name = "Research Monitor"; - network = list("rd","minisat"); - pixel_y = 28 - }, /turf/open/floor/iron/grimy, /area/centcom/central_command_areas/admin) "JU" = ( @@ -7803,8 +7789,7 @@ /area/centcom/central_command_areas/evacuation) "Lz" = ( /obj/structure/railing{ - dir = 10; - layer = 3.1 + dir = 10 }, /obj/effect/turf_decal/tile/neutral/fourcorners, /obj/effect/turf_decal/siding/dark{ @@ -8583,13 +8568,13 @@ pixel_x = -3; pixel_y = 3 }, -/obj/item/clothing/mask/cigarette/cigar/cohiba{ +/obj/item/cigarette/cigar/cohiba{ pixel_x = 6 }, -/obj/item/clothing/mask/cigarette/cigar/havana{ +/obj/item/cigarette/cigar/havana{ pixel_x = 2 }, -/obj/item/clothing/mask/cigarette/cigar{ +/obj/item/cigarette/cigar{ pixel_x = 4.5 }, /obj/machinery/status_display/evac/directional/north, @@ -8770,13 +8755,13 @@ pixel_x = -3; pixel_y = 3 }, -/obj/item/clothing/mask/cigarette/cigar/cohiba{ +/obj/item/cigarette/cigar/cohiba{ pixel_x = 6 }, -/obj/item/clothing/mask/cigarette/cigar/havana{ +/obj/item/cigarette/cigar/havana{ pixel_x = 2 }, -/obj/item/clothing/mask/cigarette/cigar{ +/obj/item/cigarette/cigar{ pixel_x = 4.5 }, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden{ @@ -8936,8 +8921,7 @@ "QB" = ( /obj/structure/table/reinforced, /obj/structure/railing{ - dir = 4; - layer = 4.1 + dir = 4 }, /obj/effect/turf_decal/tile/neutral/fourcorners, /obj/effect/turf_decal/siding/dark{ @@ -9001,13 +8985,13 @@ pixel_x = -3; pixel_y = 3 }, -/obj/item/clothing/mask/cigarette/cigar/cohiba{ +/obj/item/cigarette/cigar/cohiba{ pixel_x = 6 }, -/obj/item/clothing/mask/cigarette/cigar/havana{ +/obj/item/cigarette/cigar/havana{ pixel_x = 2 }, -/obj/item/clothing/mask/cigarette/cigar{ +/obj/item/cigarette/cigar{ pixel_x = 4.5 }, /obj/machinery/airalarm/directional/south, @@ -9480,7 +9464,7 @@ pixel_y = 19; pixel_x = 7 }, -/obj/item/clothing/mask/cigarette/cigar/havana{ +/obj/item/cigarette/cigar/havana{ pixel_x = -6; pixel_y = 5 }, @@ -10095,7 +10079,6 @@ }, /obj/machinery/button/door/indestructible{ id = "XCCcustoms1"; - layer = 3; name = "CC Emergency Docks Control"; pixel_x = 24; pixel_y = 24 @@ -10247,13 +10230,13 @@ pixel_x = -3; pixel_y = 3 }, -/obj/item/clothing/mask/cigarette/cigar/cohiba{ +/obj/item/cigarette/cigar/cohiba{ pixel_x = 6 }, -/obj/item/clothing/mask/cigarette/cigar/havana{ +/obj/item/cigarette/cigar/havana{ pixel_x = 2 }, -/obj/item/clothing/mask/cigarette/cigar{ +/obj/item/cigarette/cigar{ pixel_x = 4.5 }, /obj/machinery/newscaster/directional/north, diff --git a/_maps/map_files/tramstation/maintenance_modules/atmoscilower_attachment_a_3.dmm b/_maps/map_files/tramstation/maintenance_modules/atmoscilower_attachment_a_3.dmm index 45f4b361a61c8..670386ca82910 100644 --- a/_maps/map_files/tramstation/maintenance_modules/atmoscilower_attachment_a_3.dmm +++ b/_maps/map_files/tramstation/maintenance_modules/atmoscilower_attachment_a_3.dmm @@ -177,7 +177,7 @@ "Q" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/oil, -/obj/item/stock_parts/cell/empty, +/obj/item/stock_parts/power_store/cell/empty, /obj/item/screwdriver{ pixel_y = -10; pixel_x = 7 diff --git a/_maps/map_files/tramstation/maintenance_modules/cargoscilower_3.dmm b/_maps/map_files/tramstation/maintenance_modules/cargoscilower_3.dmm index 12b320b284492..53d727123ce66 100644 --- a/_maps/map_files/tramstation/maintenance_modules/cargoscilower_3.dmm +++ b/_maps/map_files/tramstation/maintenance_modules/cargoscilower_3.dmm @@ -179,7 +179,7 @@ dir = 8 }, /obj/machinery/cell_charger, -/obj/item/stock_parts/cell/high/empty, +/obj/item/stock_parts/power_store/cell/high/empty, /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/station/maintenance/starboard/central) diff --git a/_maps/map_files/tramstation/maintenance_modules/cargoscilower_attachment_a_3.dmm b/_maps/map_files/tramstation/maintenance_modules/cargoscilower_attachment_a_3.dmm index c37683fdf40c9..b11609c9d357c 100644 --- a/_maps/map_files/tramstation/maintenance_modules/cargoscilower_attachment_a_3.dmm +++ b/_maps/map_files/tramstation/maintenance_modules/cargoscilower_attachment_a_3.dmm @@ -21,7 +21,7 @@ /obj/effect/decal/cleanable/dirt, /obj/structure/table, /obj/machinery/cell_charger, -/obj/item/stock_parts/cell/high/empty, +/obj/item/stock_parts/power_store/cell/high/empty, /turf/open/floor/iron/smooth, /area/station/maintenance/starboard/central) "n" = ( @@ -86,14 +86,14 @@ "Y" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/table, -/obj/item/stock_parts/cell/empty{ +/obj/item/stock_parts/power_store/cell/empty{ pixel_x = -5 }, -/obj/item/stock_parts/cell/empty{ +/obj/item/stock_parts/power_store/cell/empty{ pixel_x = 2; pixel_y = 8 }, -/obj/item/stock_parts/cell/empty{ +/obj/item/stock_parts/power_store/cell/empty{ pixel_x = 7 }, /turf/open/floor/iron/smooth, diff --git a/_maps/map_files/tramstation/maintenance_modules/dormenginelower_2.dmm b/_maps/map_files/tramstation/maintenance_modules/dormenginelower_2.dmm index 6f30c2bb7be2e..e7c0c22ad0575 100644 --- a/_maps/map_files/tramstation/maintenance_modules/dormenginelower_2.dmm +++ b/_maps/map_files/tramstation/maintenance_modules/dormenginelower_2.dmm @@ -321,7 +321,7 @@ /obj/structure/closet/crate, /obj/item/wallframe/apc, /obj/item/electronics/apc, -/obj/item/stock_parts/cell/empty, +/obj/item/stock_parts/power_store/cell/empty, /obj/item/stack/cable_coil/five, /obj/item/wallframe/apc, /obj/item/electronics/apc, diff --git a/_maps/map_files/tramstation/maintenance_modules/dormenginelower_attachment_b_1.dmm b/_maps/map_files/tramstation/maintenance_modules/dormenginelower_attachment_b_1.dmm index 0be86766e3f21..bfe095561311a 100644 --- a/_maps/map_files/tramstation/maintenance_modules/dormenginelower_attachment_b_1.dmm +++ b/_maps/map_files/tramstation/maintenance_modules/dormenginelower_attachment_b_1.dmm @@ -91,7 +91,7 @@ /obj/effect/decal/cleanable/dirt, /obj/structure/table, /obj/machinery/cell_charger, -/obj/item/stock_parts/cell/high/empty, +/obj/item/stock_parts/power_store/cell/high/empty, /obj/effect/turf_decal/trimline/yellow/filled/line{ dir = 4 }, diff --git a/_maps/map_files/tramstation/maintenance_modules/medsciupper_attachment_a_1.dmm b/_maps/map_files/tramstation/maintenance_modules/medsciupper_attachment_a_1.dmm index 32d140f88c93a..f58d6cd2a20e0 100644 --- a/_maps/map_files/tramstation/maintenance_modules/medsciupper_attachment_a_1.dmm +++ b/_maps/map_files/tramstation/maintenance_modules/medsciupper_attachment_a_1.dmm @@ -122,7 +122,7 @@ }, /obj/structure/table, /obj/machinery/cell_charger, -/obj/item/stock_parts/cell/high/empty, +/obj/item/stock_parts/power_store/cell/high/empty, /turf/open/floor/iron, /area/station/maintenance/department/science) "V" = ( diff --git a/_maps/map_files/tramstation/tramstation.dmm b/_maps/map_files/tramstation/tramstation.dmm index efa4dcbec80c9..41d9c412d4d95 100644 --- a/_maps/map_files/tramstation/tramstation.dmm +++ b/_maps/map_files/tramstation/tramstation.dmm @@ -1960,11 +1960,6 @@ }, /turf/open/floor/iron/dark/herringbone, /area/station/commons/vacant_room) -"agG" = ( -/obj/structure/dresser, -/obj/item/clothing/mask/cigarette/cigar/havana, -/turf/open/floor/iron/grimy, -/area/station/commons/vacant_room) "agH" = ( /obj/machinery/power/apc/auto_name/directional/west, /obj/structure/reagent_dispensers/beerkeg, @@ -2346,6 +2341,7 @@ /obj/machinery/door/poddoor/massdriver_trash{ id = "fortnitedoor" }, +/obj/structure/fans/tiny, /turf/open/floor/plating, /area/station/maintenance/disposal) "ajc" = ( @@ -2954,15 +2950,6 @@ }, /turf/open/floor/iron, /area/station/security/checkpoint/engineering) -"aoN" = ( -/obj/machinery/elevator_control_panel{ - layer = 3.1; - pixel_y = 2; - linked_elevator_id = "tram_xeno_lift"; - preset_destination_names = list("2"="Lower Deck", "3"="Upper Deck") - }, -/turf/closed/wall, -/area/station/science/xenobiology) "aoV" = ( /obj/effect/turf_decal/trimline/neutral/filled/line, /turf/open/floor/iron/dark, @@ -3170,20 +3157,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/station/engineering/atmospherics_engine) -"arT" = ( -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 10 - }, -/obj/structure/closet/radiation, -/obj/effect/turf_decal/bot{ - dir = 1 - }, -/obj/machinery/computer/security/telescreen/engine{ - dir = 1; - pixel_y = -32 - }, -/turf/open/floor/iron, -/area/station/engineering/main) "arV" = ( /obj/effect/turf_decal/trimline/yellow/filled/line, /obj/effect/turf_decal/box, @@ -3276,6 +3249,17 @@ }, /turf/open/floor/iron, /area/station/security/office) +"asI" = ( +/obj/structure/table, +/obj/machinery/requests_console/directional/east{ + name = "EVA Requests Console"; + department = "EVA" + }, +/obj/effect/mapping_helpers/requests_console/assistance, +/obj/machinery/cell_charger, +/obj/item/stock_parts/power_store/cell/high, +/turf/open/floor/iron, +/area/station/ai_monitored/command/storage/eva) "asQ" = ( /obj/structure/sign/warning/no_smoking, /turf/closed/wall, @@ -3331,6 +3315,7 @@ /obj/machinery/computer/turbine_computer{ mapping_id = "main_turbine" }, +/obj/structure/cable, /turf/open/floor/iron, /area/station/maintenance/disposal/incinerator) "auc" = ( @@ -3376,6 +3361,7 @@ "aum" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/line, +/obj/structure/cable, /turf/open/floor/iron, /area/station/maintenance/disposal/incinerator) "auo" = ( @@ -3389,6 +3375,7 @@ dir = 4; mapping_id = "main_turbine" }, +/obj/structure/cable, /turf/open/floor/engine, /area/station/maintenance/disposal/incinerator) "auq" = ( @@ -3732,23 +3719,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/secondary/service) -"axh" = ( -/obj/structure/rack, -/obj/item/clothing/glasses/meson{ - pixel_y = 4 - }, -/obj/item/lighter, -/obj/item/reagent_containers/pill/patch/aiuri, -/obj/item/stock_parts/cell/high, -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 1 - }, -/obj/structure/window/reinforced/spawner/directional/west, -/obj/item/computer_disk/engineering, -/obj/item/computer_disk/engineering, -/obj/item/computer_disk/engineering, -/turf/open/floor/iron, -/area/station/command/heads_quarters/ce) "axp" = ( /obj/effect/turf_decal/trimline/red/filled/line{ dir = 8 @@ -3878,6 +3848,12 @@ /obj/machinery/airalarm/directional/east, /turf/open/floor/iron/checker, /area/station/commons/lounge) +"ayE" = ( +/obj/effect/spawner/random/medical/two_percent_xeno_egg_spawner, +/obj/machinery/atmospherics/pipe/smart/manifold4w/dark/visible, +/obj/machinery/light/directional/north, +/turf/open/floor/engine/xenobio, +/area/station/science/xenobiology) "ayG" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/bot, @@ -4113,16 +4089,6 @@ "aBY" = ( /turf/open/floor/iron, /area/station/hallway/secondary/command) -"aBZ" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 8 - }, -/obj/machinery/computer/security/telescreen/minisat{ - dir = 1; - pixel_y = -29 - }, -/turf/open/floor/carpet, -/area/station/command/heads_quarters/captain) "aCa" = ( /obj/machinery/power/apc/auto_name/directional/west, /obj/structure/cable, @@ -4196,11 +4162,6 @@ }, /turf/open/floor/iron, /area/station/command/bridge) -"aCE" = ( -/obj/structure/filingcabinet, -/obj/machinery/firealarm/directional/north, -/turf/open/floor/iron/grimy, -/area/station/security/detectives_office) "aCJ" = ( /obj/effect/turf_decal/loading_area, /obj/effect/turf_decal/trimline/brown/filled/corner{ @@ -4600,9 +4561,8 @@ dir = 10 }, /obj/structure/table/wood, -/obj/structure/window/reinforced/spawner/directional/north, -/obj/structure/window/reinforced/spawner/directional/east, -/obj/effect/spawner/random/decoration/ornament, +/obj/item/folder/yellow, +/obj/item/stamp/law, /turf/open/floor/iron/grimy, /area/station/service/lawoffice) "aGq" = ( @@ -6486,12 +6446,6 @@ /obj/machinery/light/directional/north, /turf/open/floor/iron, /area/station/engineering/atmospherics_engine) -"bhf" = ( -/obj/effect/spawner/random/engineering/tracking_beacon, -/obj/effect/landmark/event_spawn, -/obj/machinery/atmospherics/pipe/smart/manifold4w/dark/visible, -/turf/open/floor/engine, -/area/station/science/xenobiology) "bhr" = ( /turf/closed/wall/rock/porous, /area/station/security/prison/workout) @@ -6752,7 +6706,11 @@ /area/station/engineering/atmos/pumproom) "bnh" = ( /obj/item/radio/intercom/directional/north, -/obj/machinery/photocopier, +/obj/machinery/fax{ + name = "Law Office Fax Machine"; + fax_name = "Law Office" + }, +/obj/structure/table/wood, /turf/open/floor/wood, /area/station/service/lawoffice) "bnY" = ( @@ -6761,7 +6719,10 @@ dir = 8 }, /obj/item/radio/intercom/directional/west, -/obj/item/paper/fluff/jobs/engineering/frequencies, +/obj/item/toy/plush/lizard_plushie/green{ + name = "Runs-The-Rails"; + desc = "An adorable, hard working lizard that runs in circles to keep the tram operating safely." + }, /turf/open/floor/iron, /area/station/tcommsat/computer) "boc" = ( @@ -6815,29 +6776,6 @@ /obj/effect/turf_decal/tile/blue, /turf/open/floor/iron/dark, /area/station/command/bridge) -"bpa" = ( -/obj/structure/table/reinforced, -/obj/item/stock_parts/cell/high{ - pixel_x = -5; - pixel_y = 8 - }, -/obj/item/stock_parts/cell/high{ - pixel_x = 7; - pixel_y = 8 - }, -/obj/item/stock_parts/cell/high, -/obj/machinery/cell_charger, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, -/area/station/science/robotics/lab) -"bpl" = ( -/obj/effect/turf_decal/bot, -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 1 - }, -/obj/machinery/portable_atmospherics/scrubber, -/turf/open/floor/iron, -/area/station/engineering/atmos) "bpn" = ( /mob/living/carbon/human/species/monkey, /turf/open/misc/grass/jungle, @@ -7423,7 +7361,6 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 8 }, -/obj/structure/cable, /turf/open/floor/iron, /area/station/engineering/gravity_generator) "bAj" = ( @@ -7609,10 +7546,11 @@ /area/station/maintenance/tram/left) "bFc" = ( /obj/structure/extinguisher_cabinet/directional/north, -/obj/machinery/vending/wardrobe/law_wardrobe, /obj/machinery/camera/directional/north{ c_tag = "Civilian - Lawyer's Office" }, +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk, /turf/open/floor/wood, /area/station/service/lawoffice) "bFl" = ( @@ -7722,6 +7660,16 @@ "bGJ" = ( /turf/open/floor/wood, /area/station/service/theater) +"bGP" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/computer/security/telescreen/ordnance/directional/south, +/turf/open/floor/iron, +/area/station/science/ordnance/testlab) "bGV" = ( /obj/effect/turf_decal/trimline/green/filled/line{ dir = 5 @@ -8489,6 +8437,16 @@ /obj/effect/turf_decal/siding/thinplating, /turf/open/floor/iron, /area/station/cargo/storage) +"bTI" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 6 + }, +/obj/machinery/computer/security/telescreen/prison/directional/east, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/turf/open/floor/iron, +/area/station/security/office) "bTN" = ( /obj/effect/turf_decal/trimline/neutral/filled/corner, /obj/structure/disposalpipe/segment{ @@ -8964,6 +8922,10 @@ }, /turf/open/floor/iron/dark, /area/station/medical/morgue) +"bZJ" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/dark/visible, +/turf/open/floor/engine/xenobio, +/area/station/science/xenobiology) "bZN" = ( /obj/effect/turf_decal/trimline/neutral/filled/line{ dir = 4 @@ -9089,6 +9051,15 @@ /obj/effect/turf_decal/trimline/brown/filled/line, /turf/open/floor/iron, /area/station/cargo/office) +"cco" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/siding/thinplating, +/obj/effect/landmark/event_spawn, +/obj/effect/spawner/random/engineering/tracking_beacon, +/turf/open/floor/iron/dark, +/area/station/science/xenobiology) "ccx" = ( /obj/structure/rack, /obj/item/storage/toolbox/electrical{ @@ -9755,6 +9726,13 @@ }, /turf/open/floor/wood, /area/station/service/library) +"coV" = ( +/obj/structure/table, +/obj/machinery/cell_charger, +/obj/item/stock_parts/power_store/cell/high, +/obj/effect/turf_decal/trimline/neutral/filled/line, +/turf/open/floor/iron, +/area/station/commons/storage/primary) "cpl" = ( /obj/effect/turf_decal/trimline/blue/filled/line, /turf/open/floor/iron/white, @@ -10514,12 +10492,6 @@ /obj/machinery/computer/security/telescreen/entertainment/directional/east, /turf/open/floor/wood/large, /area/station/service/barber) -"cAK" = ( -/obj/effect/spawner/random/medical/two_percent_xeno_egg_spawner, -/obj/machinery/atmospherics/pipe/smart/manifold4w/dark/visible, -/obj/machinery/light/directional/north, -/turf/open/floor/engine, -/area/station/science/xenobiology) "cBo" = ( /obj/effect/mapping_helpers/airlock/cyclelink_helper{ dir = 4 @@ -10724,31 +10696,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/commons/fitness/recreation) -"cFH" = ( -/obj/structure/table/wood, -/obj/structure/sign/picture_frame/showroom/two{ - pixel_x = 8; - pixel_y = 32 - }, -/obj/structure/sign/picture_frame/showroom/one{ - pixel_x = -8; - pixel_y = 32 - }, -/obj/item/storage/box/matches{ - pixel_x = -2; - pixel_y = 3 - }, -/obj/item/clothing/mask/cigarette/cigar{ - pixel_x = -4; - pixel_y = 1 - }, -/obj/item/clothing/mask/cigarette/cigar{ - pixel_x = 4; - pixel_y = 1 - }, -/obj/item/clothing/mask/cigarette/cigar/cohiba, -/turf/open/floor/wood, -/area/station/command/meeting_room) "cFP" = ( /obj/effect/turf_decal/trimline/yellow/filled/line{ dir = 10 @@ -11801,6 +11748,12 @@ /obj/machinery/igniter/incinerator_ordmix, /turf/open/floor/engine/vacuum, /area/station/science/ordnance/burnchamber) +"cXC" = ( +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 5 + }, +/turf/open/floor/iron/airless, +/area/space/nearstation) "cXL" = ( /turf/open/floor/iron/dark/telecomms, /area/station/tcommsat/server) @@ -13925,6 +13878,23 @@ /obj/structure/reagent_dispensers/fueltank, /turf/open/floor/iron, /area/station/engineering/main) +"dLz" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 8 + }, +/obj/structure/table/reinforced, +/obj/item/stock_parts/matter_bin{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/stock_parts/matter_bin, +/obj/item/stock_parts/micro_laser, +/obj/item/multitool, +/obj/item/flatpack{ + board = /obj/item/circuitboard/machine/flatpacker + }, +/turf/open/floor/iron/white, +/area/station/science/lab) "dLD" = ( /obj/effect/turf_decal/bot, /obj/item/mop, @@ -14258,6 +14228,31 @@ }, /turf/open/floor/iron/dark, /area/station/ai_monitored/command/storage/eva) +"dQD" = ( +/obj/structure/table/wood, +/obj/structure/sign/picture_frame/showroom/two{ + pixel_x = 8; + pixel_y = 32 + }, +/obj/structure/sign/picture_frame/showroom/one{ + pixel_x = -8; + pixel_y = 32 + }, +/obj/item/storage/box/matches{ + pixel_x = -2; + pixel_y = 3 + }, +/obj/item/cigarette/cigar{ + pixel_x = -4; + pixel_y = 1 + }, +/obj/item/cigarette/cigar{ + pixel_x = 4; + pixel_y = 1 + }, +/obj/item/cigarette/cigar/cohiba, +/turf/open/floor/wood, +/area/station/command/meeting_room) "dQI" = ( /obj/machinery/disposal/bin, /obj/machinery/airalarm/directional/south, @@ -15025,6 +15020,21 @@ /obj/effect/turf_decal/stripes/white/line, /turf/open/floor/plating, /area/station/maintenance/tram/left) +"egx" = ( +/obj/structure/table/reinforced, +/obj/item/stock_parts/power_store/cell/high{ + pixel_x = -5; + pixel_y = 8 + }, +/obj/item/stock_parts/power_store/cell/high{ + pixel_x = 7; + pixel_y = 8 + }, +/obj/item/stock_parts/power_store/cell/high, +/obj/machinery/cell_charger, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/station/science/robotics/lab) "egD" = ( /obj/machinery/door/airlock/highsecurity{ name = "Prison Maintenance Access"; @@ -15100,6 +15110,11 @@ /obj/machinery/status_display/ai/directional/south, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/aisat_interior) +"eiy" = ( +/obj/structure/table/reinforced, +/obj/machinery/atmospherics/pipe/smart/manifold4w/dark/visible, +/turf/open/floor/iron/dark, +/area/station/science/xenobiology) "eiR" = ( /obj/structure/disposalpipe/segment{ dir = 10 @@ -15802,13 +15817,6 @@ }, /turf/open/floor/iron, /area/station/engineering/atmos) -"exq" = ( -/obj/structure/table, -/obj/structure/extinguisher_cabinet/directional/north, -/obj/machinery/cell_charger, -/obj/item/stock_parts/cell/high, -/turf/open/floor/iron, -/area/station/ai_monitored/command/storage/eva) "exr" = ( /obj/machinery/computer/mech_bay_power_console, /obj/effect/turf_decal/siding/thinplating/corner{ @@ -15860,6 +15868,18 @@ }, /turf/open/floor/iron/white, /area/station/science/xenobiology) +"exQ" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/atmospherics/components/binary/pump{ + name = "Mix to Gas"; + dir = 8 + }, +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "exT" = ( /obj/structure/table, /obj/item/radio{ @@ -15925,6 +15945,13 @@ /obj/structure/cable, /turf/open/floor/iron/freezer, /area/station/medical/coldroom) +"eyh" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/machinery/computer/security/telescreen/minisat/directional/south, +/turf/open/floor/carpet, +/area/station/command/heads_quarters/captain) "eyy" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 4 @@ -16238,6 +16265,15 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/engineering/atmos/pumproom) +"eEp" = ( +/obj/machinery/atmospherics/components/unary/thermomachine/freezer{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "eEx" = ( /obj/structure/cable, /obj/structure/extinguisher_cabinet/directional/north, @@ -17887,6 +17923,13 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/security/prison/workout) +"flO" = ( +/obj/structure/railing{ + dir = 4 + }, +/obj/machinery/netpod, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/cargo/bitrunning/den) "flP" = ( /obj/machinery/hydroponics/constructable, /obj/effect/turf_decal/trimline/green/line{ @@ -18733,6 +18776,14 @@ /obj/machinery/newscaster/directional/east, /turf/open/floor/iron, /area/station/commons/storage/tools) +"fDz" = ( +/obj/machinery/elevator_control_panel{ + pixel_y = 2; + linked_elevator_id = "tram_xeno_lift"; + preset_destination_names = list("2"="Lower Deck", "3"="Upper Deck") + }, +/turf/closed/wall, +/area/station/science/xenobiology) "fDS" = ( /obj/machinery/door/airlock/engineering/glass{ name = "Laser Room" @@ -18806,11 +18857,10 @@ /turf/open/floor/iron/dark/herringbone, /area/station/commons/vacant_room) "fEZ" = ( -/obj/machinery/power/apc/auto_name/directional/west, -/obj/machinery/disposal/bin, -/obj/structure/cable, -/obj/structure/disposalpipe/trunk, /obj/structure/noticeboard/directional/north, +/obj/structure/aquarium/lawyer, +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/west, /turf/open/floor/wood, /area/station/service/lawoffice) "fFa" = ( @@ -19558,20 +19608,6 @@ /obj/item/radio/intercom/directional/west, /turf/open/floor/iron, /area/station/cargo/office) -"fSY" = ( -/obj/structure/table/reinforced, -/obj/machinery/computer/security/telescreen{ - name = "Cargo Camera Monitor"; - dir = 4; - network = list("ss13","cargo") - }, -/obj/item/radio/intercom/directional/west, -/obj/effect/turf_decal/trimline/red/filled/line{ - dir = 9 - }, -/obj/machinery/firealarm/directional/north, -/turf/open/floor/iron, -/area/station/security/checkpoint/supply) "fSZ" = ( /obj/machinery/atmospherics/pipe/smart/simple/dark/visible, /turf/open/floor/iron, @@ -19601,17 +19637,6 @@ }, /turf/open/floor/iron/dark/herringbone, /area/station/commons/vacant_room) -"fTM" = ( -/obj/structure/table, -/obj/machinery/requests_console/directional/east{ - name = "EVA Requests Console"; - department = "EVA" - }, -/obj/effect/mapping_helpers/requests_console/assistance, -/obj/machinery/cell_charger, -/obj/item/stock_parts/cell/high, -/turf/open/floor/iron, -/area/station/ai_monitored/command/storage/eva) "fUh" = ( /obj/structure/chair, /obj/structure/sign/poster/official/random/directional/north, @@ -19750,7 +19775,8 @@ /area/station/command/teleporter) "fWn" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/visible, -/turf/closed/wall/r_wall, +/obj/effect/spawner/structure/window/reinforced/plasma, +/turf/open/floor/plating, /area/station/engineering/supermatter/room) "fWA" = ( /turf/open/floor/plating, @@ -19858,6 +19884,16 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/security/checkpoint/engineering) +"fXX" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 8 + }, +/obj/structure/table, +/obj/machinery/cell_charger, +/obj/item/stock_parts/power_store/cell/high, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/station/engineering/main) "fXY" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/cable, @@ -20222,6 +20258,7 @@ "gfV" = ( /obj/structure/table/wood/fancy/green, /obj/effect/spawner/round_default_module, +/obj/machinery/camera/motion/directional/east, /turf/open/floor/circuit/green, /area/station/ai_monitored/turret_protected/ai_upload) "gfX" = ( @@ -22203,6 +22240,9 @@ /obj/item/radio/intercom/directional/west, /turf/open/floor/iron/dark, /area/station/science/ordnance/storage) +"gQc" = ( +/turf/open/floor/plating/airless, +/area/space/nearstation) "gQk" = ( /obj/effect/turf_decal/trimline/red/filled/corner{ dir = 4 @@ -22254,22 +22294,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/hallway/secondary/service) -"gRO" = ( -/obj/effect/turf_decal/trimline/red/filled/line{ - dir = 6 - }, -/obj/machinery/computer/security/telescreen{ - name = "Prison Monitor"; - desc = "Used for watching Prison Wing holding areas."; - dir = 8; - pixel_x = 30; - network = list("prison") - }, -/obj/structure/disposalpipe/segment{ - dir = 9 - }, -/turf/open/floor/iron, -/area/station/security/office) "gRQ" = ( /obj/effect/turf_decal/trimline/yellow/filled/line{ dir = 8 @@ -23119,6 +23143,7 @@ }, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/item/circuitboard/machine/crystallizer, /turf/open/floor/iron/dark, /area/station/engineering/atmospherics_engine) "hiZ" = ( @@ -23190,6 +23215,18 @@ }, /turf/open/floor/iron/white, /area/station/science/xenobiology) +"hks" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 1 + }, +/obj/structure/table, +/obj/machinery/cell_charger, +/obj/item/stock_parts/power_store/cell/potato{ + pixel_x = 6; + pixel_y = 10 + }, +/turf/open/floor/iron/white, +/area/station/science/lobby) "hkt" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/trimline/yellow/corner{ @@ -23513,24 +23550,6 @@ /obj/machinery/computer/security/telescreen/entertainment/directional/east, /turf/open/floor/wood/large, /area/station/service/barber) -"hqx" = ( -/obj/effect/turf_decal/trimline/purple/filled/line{ - dir = 8 - }, -/obj/machinery/computer/security/telescreen{ - name = "AI Upload Monitor"; - desc = "Used for watching the ai_upload."; - dir = 4; - pixel_x = -28; - network = list("aiupload") - }, -/obj/item/kirbyplants/photosynthetic, -/obj/machinery/camera/directional/west{ - network = list("ss13","rd"); - c_tag = "Science - AI Access Hallway" - }, -/turf/open/floor/iron/dark, -/area/station/science/lower) "hqN" = ( /obj/structure/weightmachine/weightlifter, /obj/effect/turf_decal/tile/neutral/fourcorners, @@ -23851,6 +23870,13 @@ "hzN" = ( /turf/closed/wall/r_wall, /area/station/ai_monitored/command/storage/eva) +"hzQ" = ( +/obj/structure/closet/firecloset, +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "hzR" = ( /obj/effect/turf_decal/trimline/neutral/line{ dir = 4 @@ -23963,17 +23989,6 @@ }, /turf/open/floor/iron, /area/station/commons/fitness) -"hBY" = ( -/obj/machinery/computer/security/telescreen{ - name = "turbine vent monitor"; - desc = "Used for watching the turbine vent."; - dir = 8; - pixel_x = 29; - network = list("turbine") - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/maintenance/disposal/incinerator) "hCp" = ( /obj/structure/chair/stool/bar/directional/north, /obj/effect/turf_decal/siding/thinplating/dark{ @@ -24034,6 +24049,19 @@ /obj/structure/cable/layer1, /turf/open/floor/plating/airless, /area/station/solars/starboard/fore) +"hDF" = ( +/obj/machinery/computer/apc_control{ + dir = 1 + }, +/obj/machinery/requests_console/directional/south{ + name = "Chief Engineer's Request Console"; + department = "Chief Engineer's Desk" + }, +/obj/effect/mapping_helpers/requests_console/announcement, +/obj/effect/mapping_helpers/requests_console/supplies, +/obj/machinery/computer/security/telescreen/engine/directional/west, +/turf/open/floor/iron/dark, +/area/station/command/heads_quarters/ce) "hDI" = ( /turf/closed/wall/r_wall, /area/station/engineering/supermatter) @@ -24182,6 +24210,18 @@ }, /turf/open/floor/iron, /area/station/cargo/storage) +"hGd" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 8 + }, +/obj/machinery/computer/security/telescreen/aiupload/directional/west, +/obj/item/kirbyplants/photosynthetic, +/obj/machinery/camera/directional/west{ + network = list("ss13","rd"); + c_tag = "Science - AI Access Hallway" + }, +/turf/open/floor/iron/dark, +/area/station/science/lower) "hGt" = ( /obj/structure/table, /obj/item/stack/sheet/glass/fifty, @@ -24478,17 +24518,6 @@ }, /turf/open/floor/iron/dark, /area/station/ai_monitored/command/nuke_storage) -"hMU" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/trimline/neutral/filled/line{ - dir = 4 - }, -/obj/effect/turf_decal/bot, -/obj/structure/closet/crate/preopen, -/obj/item/stock_parts/cell/empty, -/obj/effect/spawner/random/engineering/flashlight, -/turf/open/floor/iron, -/area/station/cargo/warehouse) "hNe" = ( /obj/effect/turf_decal/trimline/neutral/filled/line{ dir = 4 @@ -24639,8 +24668,8 @@ /obj/structure/chair/office{ dir = 1 }, -/obj/machinery/newscaster/directional/west, /obj/effect/landmark/start/lawyer, +/obj/machinery/newscaster/directional/west, /turf/open/floor/wood, /area/station/service/lawoffice) "hPB" = ( @@ -25608,16 +25637,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/service/hydroponics) -"iih" = ( -/obj/structure/table, -/obj/machinery/cell_charger, -/obj/item/storage/toolbox/electrical{ - pixel_x = 4; - pixel_y = 9 - }, -/obj/item/stock_parts/cell/high, -/turf/open/floor/iron/dark, -/area/station/science/explab) "iij" = ( /obj/machinery/door/airlock/command{ name = "Research Director's Office" @@ -25978,29 +25997,6 @@ /obj/machinery/transport/crossing_signal/northwest, /turf/open/floor/iron, /area/station/hallway/primary/tram/right) -"ipP" = ( -/obj/structure/table, -/obj/item/multitool/circuit{ - pixel_x = -8 - }, -/obj/item/multitool/circuit{ - pixel_x = -4 - }, -/obj/item/multitool/circuit, -/obj/item/stock_parts/cell/high{ - pixel_x = 8; - pixel_y = 9 - }, -/obj/item/stock_parts/cell/high{ - pixel_x = 8; - pixel_y = -2 - }, -/obj/machinery/camera/directional/south{ - network = list("ss13","rd"); - c_tag = "Science - Testing Lab" - }, -/turf/open/floor/iron, -/area/station/science/explab) "iqg" = ( /obj/machinery/airalarm/directional/west, /turf/open/floor/iron/freezer, @@ -26159,6 +26155,14 @@ }, /turf/open/floor/iron/stairs/medium, /area/station/commons/dorms) +"itq" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/siding/thinplating/corner, +/obj/machinery/computer/security/telescreen/test_chamber/directional/north, +/turf/open/floor/iron/dark, +/area/station/science/xenobiology) "itE" = ( /obj/modular_map_root/tramstation{ name = "atmoscilower"; @@ -26410,17 +26414,6 @@ /obj/machinery/status_display/evac/directional/east, /turf/open/floor/circuit/green, /area/station/ai_monitored/turret_protected/ai_upload) -"ixH" = ( -/obj/structure/lattice/catwalk, -/obj/structure/cable, -/obj/structure/railing{ - dir = 4 - }, -/obj/structure/railing{ - dir = 8 - }, -/turf/open/space/openspace, -/area/space) "ixO" = ( /obj/structure/chair/comfy/brown{ dir = 8; @@ -26496,6 +26489,9 @@ }, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, /turf/open/floor/iron/grimy, /area/station/service/lawoffice) "izO" = ( @@ -26537,6 +26533,13 @@ }, /turf/open/floor/plating, /area/station/hallway/secondary/exit) +"iAr" = ( +/obj/effect/turf_decal/bot, +/obj/effect/spawner/random/structure/closet_empty/crate, +/obj/effect/spawner/random/maintenance/two, +/obj/item/stock_parts/power_store/cell/high/empty, +/turf/open/floor/iron, +/area/station/cargo/storage) "iAt" = ( /obj/structure/lattice/catwalk, /turf/open/openspace/airless, @@ -26680,6 +26683,7 @@ }, /obj/item/folder/blue, /obj/item/pen/blue, +/obj/item/paper/fluff/jobs/engineering/frequencies, /turf/open/floor/iron, /area/station/tcommsat/computer) "iDQ" = ( @@ -27397,6 +27401,10 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/engineering/atmos) +"iRb" = ( +/obj/machinery/portable_atmospherics/pipe_scrubber, +/turf/open/floor/iron/dark, +/area/station/science/ordnance/storage) "iRe" = ( /obj/effect/turf_decal/stripes/line, /obj/structure/reagent_dispensers/foamtank, @@ -27543,19 +27551,6 @@ /obj/item/kirbyplants/photosynthetic, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/aisat_interior) -"iTL" = ( -/obj/structure/closet/crate, -/obj/item/stack/sheet/iron/fifty, -/obj/item/stack/rods/fifty, -/obj/item/stack/sheet/glass/fifty, -/obj/item/electronics/airlock, -/obj/item/electronics/airlock, -/obj/item/stock_parts/cell/high, -/obj/item/stack/sheet/mineral/plasma{ - amount = 30 - }, -/turf/open/floor/plating, -/area/station/engineering/engine_smes) "iTQ" = ( /obj/effect/turf_decal/trimline/neutral/filled/line{ dir = 8 @@ -27801,20 +27796,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/tram/right) -"iYa" = ( -/obj/structure/railing/corner{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/red/filled/line, -/obj/effect/turf_decal/trimline/red/corner{ - dir = 4 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 4 - }, -/obj/machinery/light/small/directional/south, -/turf/open/floor/iron, -/area/station/security/checkpoint/supply) "iYd" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/disposalpipe/segment{ @@ -28228,17 +28209,11 @@ /area/station/service/bar/backroom) "jeC" = ( /obj/machinery/airalarm/directional/north, -/obj/structure/rack, -/obj/item/clipboard, -/obj/item/chair/plastic, -/obj/item/chair/plastic{ - pixel_y = 5 - }, -/obj/effect/spawner/random/bureaucracy/briefcase, /obj/machinery/light_switch/directional/east{ pixel_x = 23; pixel_y = -8 }, +/obj/machinery/photocopier, /turf/open/floor/wood, /area/station/service/lawoffice) "jeO" = ( @@ -28292,6 +28267,10 @@ /obj/structure/cable, /turf/closed/wall/r_wall, /area/station/ai_monitored/turret_protected/aisat/hallway) +"jfD" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/yellow/visible, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "jfH" = ( /obj/effect/turf_decal/trimline/red/filled/corner{ dir = 1 @@ -28654,10 +28633,9 @@ /area/station/cargo/storage) "jlQ" = ( /obj/structure/rack, -/obj/item/gun/energy/e_gun/dragnet, -/obj/item/gun/energy/e_gun/dragnet, /obj/item/radio/intercom/directional/north, /obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/spawner/random/armory/dragnet, /turf/open/floor/iron/dark, /area/station/ai_monitored/security/armory) "jlX" = ( @@ -28808,9 +28786,14 @@ /obj/effect/turf_decal/trimline/neutral/filled/line{ dir = 6 }, -/obj/structure/table, /obj/machinery/firealarm/directional/east, /obj/machinery/light/directional/east, +/obj/structure/table, +/obj/item/book/manual/wiki/engineering_guide{ + pixel_x = -2 + }, +/obj/item/radio/off, +/obj/item/radio/intercom/directional/south, /turf/open/floor/iron, /area/station/engineering/gravity_generator) "jos" = ( @@ -29165,7 +29148,6 @@ /turf/open/floor/iron, /area/station/hallway/secondary/command) "jux" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, /obj/structure/cable/layer1, /obj/effect/turf_decal/trimline/yellow/arrow_ccw{ dir = 6 @@ -29173,6 +29155,7 @@ /obj/effect/turf_decal/trimline/yellow/corner{ dir = 1 }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, /turf/open/floor/engine, /area/station/engineering/supermatter/room) "juT" = ( @@ -29268,6 +29251,21 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/white, /area/station/medical/virology) +"jvW" = ( +/obj/structure/railing/corner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/red/filled/line, +/obj/effect/turf_decal/trimline/red/corner{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/obj/machinery/light/small/directional/south, +/obj/item/radio/intercom/directional/south, +/turf/open/floor/iron, +/area/station/security/checkpoint/supply) "jwa" = ( /obj/effect/turf_decal/trimline/brown/filled/line{ dir = 8 @@ -29667,18 +29665,6 @@ /obj/machinery/power/apc/auto_name/directional/north, /turf/open/floor/iron, /area/station/maintenance/tram/mid) -"jCw" = ( -/obj/effect/turf_decal/trimline/purple/filled/line{ - dir = 1 - }, -/obj/structure/table, -/obj/machinery/cell_charger, -/obj/item/stock_parts/cell/potato{ - pixel_x = 6; - pixel_y = 10 - }, -/turf/open/floor/iron/white, -/area/station/science/lobby) "jCH" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /obj/effect/turf_decal/tile/bar/opposingcorners, @@ -30788,10 +30774,9 @@ dir = 9 }, /obj/structure/cable, -/obj/structure/disposalpipe/segment{ +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/grimy, /area/station/service/lawoffice) "jYb" = ( @@ -31402,6 +31387,15 @@ }, /turf/open/floor/wood/large, /area/station/service/library) +"kgg" = ( +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "kgr" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -31771,19 +31765,6 @@ }, /turf/open/floor/iron/dark, /area/station/engineering/storage/tech) -"klY" = ( -/obj/structure/table, -/obj/item/stack/cable_coil{ - pixel_x = -3; - pixel_y = 3 - }, -/obj/item/stack/cable_coil, -/obj/item/stock_parts/cell/high, -/obj/effect/turf_decal/trimline/white/filled/corner{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/engineering/storage/tech) "kmb" = ( /obj/machinery/door/airlock/engineering/glass{ name = "Tram Mechanical Room" @@ -32146,14 +32127,6 @@ }, /turf/open/floor/iron, /area/station/engineering/atmos) -"ksk" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/effect/turf_decal/siding/thinplating, -/obj/effect/landmark/event_spawn, -/turf/open/floor/iron/dark, -/area/station/science/xenobiology) "ksm" = ( /obj/machinery/door/airlock/atmos{ name = "Turbine Access" @@ -32501,6 +32474,15 @@ /obj/structure/cable, /turf/open/floor/iron/showroomfloor, /area/station/security/lockers) +"kzq" = ( +/obj/structure/table/reinforced, +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 9 + }, +/obj/machinery/firealarm/directional/north, +/obj/machinery/computer/security/telescreen/cargo_sec/directional/west, +/turf/open/floor/iron, +/area/station/security/checkpoint/supply) "kzw" = ( /obj/effect/spawner/random/vending/snackvend, /obj/effect/turf_decal/stripes/line{ @@ -32553,6 +32535,11 @@ /obj/effect/turf_decal/tile/blue/opposingcorners, /turf/open/floor/iron/freezer, /area/station/medical/coldroom) +"kAF" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "kAO" = ( /obj/effect/turf_decal/trimline/neutral/filled/line{ dir = 8 @@ -32746,6 +32733,13 @@ }, /turf/open/floor/iron/dark, /area/station/security/courtroom) +"kEm" = ( +/obj/machinery/camera/motion/directional/south{ + network = list("ss13","minisat"); + c_tag = "Secure - AI Lower External North" + }, +/turf/open/space/basic, +/area/space/nearstation) "kEN" = ( /obj/structure/stairs/north, /turf/open/floor/iron/stairs/right, @@ -32881,13 +32875,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/security/execution/education) -"kGv" = ( -/obj/structure/disposaloutlet{ - dir = 1 - }, -/obj/structure/disposalpipe/trunk, -/turf/open/floor/engine, -/area/station/science/xenobiology) "kGA" = ( /obj/structure/railing, /obj/machinery/door/firedoor/border_only, @@ -33528,6 +33515,13 @@ }, /turf/open/floor/iron/white, /area/station/science/xenobiology) +"kQP" = ( +/obj/structure/table, +/obj/structure/extinguisher_cabinet/directional/north, +/obj/machinery/cell_charger, +/obj/item/stock_parts/power_store/cell/high, +/turf/open/floor/iron, +/area/station/ai_monitored/command/storage/eva) "kQR" = ( /obj/structure/flora/bush/lavendergrass/style_random, /obj/item/food/grown/banana/bunch{ @@ -33886,7 +33880,10 @@ /area/station/security/brig) "kWp" = ( /obj/effect/turf_decal/trimline/neutral/filled/line, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/power/terminal{ + dir = 8 + }, +/obj/structure/cable, /turf/open/floor/iron, /area/station/engineering/gravity_generator) "kWq" = ( @@ -34019,28 +34016,6 @@ }, /turf/open/floor/catwalk_floor, /area/station/hallway/primary/tram/right) -"kYl" = ( -/obj/structure/rack, -/obj/structure/table, -/obj/machinery/computer/security/telescreen{ - name = "Test Chamber Monitor"; - pixel_y = 28; - network = list("test") - }, -/obj/item/storage/box/beakers{ - pixel_x = 5; - pixel_y = 3 - }, -/obj/item/grenade/chem_grenade{ - pixel_x = -7; - pixel_y = 7 - }, -/obj/item/grenade/chem_grenade{ - pixel_x = -7; - pixel_y = 1 - }, -/turf/open/floor/iron/dark, -/area/station/science/explab) "kYL" = ( /obj/effect/spawner/random/structure/closet_private, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ @@ -35377,6 +35352,16 @@ }, /turf/open/floor/engine/plasma, /area/station/engineering/atmos) +"lxd" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/obj/machinery/computer/security/telescreen/aiupload, +/turf/open/floor/iron/white, +/area/station/science/xenobiology) "lxi" = ( /obj/structure/window/reinforced/spawner/directional/north, /obj/structure/cable, @@ -35426,6 +35411,16 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/medical/treatment_center) +"lxO" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 10 + }, +/obj/structure/window/reinforced/spawner/directional/east, +/obj/structure/window/reinforced/spawner/directional/north, +/obj/structure/table/wood, +/obj/effect/spawner/random/decoration/ornament, +/turf/open/floor/iron/grimy, +/area/station/service/lawoffice) "lxW" = ( /obj/effect/turf_decal/trimline/purple/filled/line, /obj/machinery/firealarm/directional/south, @@ -35994,6 +35989,11 @@ /obj/machinery/newscaster/directional/east, /turf/open/floor/iron, /area/station/commons/dorms) +"lHJ" = ( +/obj/machinery/pdapainter/research, +/obj/machinery/computer/security/telescreen/rd/directional/south, +/turf/open/floor/iron/cafeteria, +/area/station/command/heads_quarters/rd) "lHU" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ @@ -36627,11 +36627,12 @@ /turf/open/floor/circuit, /area/station/ai_monitored/turret_protected/ai) "lSI" = ( -/obj/structure/chair/office{ - dir = 1 - }, /obj/machinery/newscaster/directional/east, -/obj/effect/landmark/start/lawyer, +/obj/machinery/conveyor_switch/oneway{ + name = "Shipment Delivery Chute Activator"; + pixel_x = 10; + id = "lawyerdropoff" + }, /turf/open/floor/wood, /area/station/service/lawoffice) "lSM" = ( @@ -37172,13 +37173,6 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/command) -"mbe" = ( -/obj/machinery/camera/motion/directional/south{ - network = list("ss13","minisat"); - c_tag = "Secure - AI Lower External North" - }, -/turf/open/space/basic, -/area/space) "mbk" = ( /obj/effect/turf_decal/sand, /obj/effect/turf_decal/trimline/red/filled/line{ @@ -37606,6 +37600,16 @@ /obj/effect/mapping_helpers/airlock/locked, /turf/open/floor/plating, /area/station/hallway/primary/tram/center) +"mhJ" = ( +/obj/effect/turf_decal/trimline/brown/filled/corner{ + dir = 1 + }, +/obj/machinery/computer/security/telescreen/vault/directional/north, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/command/heads_quarters/qm) "min" = ( /obj/effect/turf_decal/trimline/green/filled/line{ dir = 4 @@ -37653,6 +37657,12 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/carpet, /area/station/command/heads_quarters/captain) +"mjl" = ( +/obj/machinery/computer/security/telescreen/turbine/directional/east, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) "mjp" = ( /obj/structure/transport/linear/tram/corner/southeast, /obj/structure/tram/spoiler{ @@ -38024,12 +38034,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/station/cargo/miningfoundry) -"mrb" = ( -/obj/structure/table/wood, -/obj/item/folder/yellow, -/obj/item/stamp/law, -/turf/open/floor/wood, -/area/station/service/lawoffice) "mrf" = ( /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 1 @@ -38293,6 +38297,17 @@ /obj/structure/cable, /turf/open/floor/circuit, /area/station/ai_monitored/turret_protected/aisat_interior) +"mwP" = ( +/obj/structure/lattice/catwalk, +/obj/structure/cable, +/obj/structure/railing{ + dir = 4 + }, +/obj/structure/railing{ + dir = 8 + }, +/turf/open/space/openspace, +/area/space/nearstation) "mxf" = ( /obj/effect/turf_decal/trimline/purple/filled/line{ dir = 10 @@ -38367,13 +38382,6 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/iron, /area/station/science/explab) -"myN" = ( -/obj/structure/table, -/obj/machinery/cell_charger, -/obj/item/stock_parts/cell/high, -/obj/effect/turf_decal/trimline/neutral/filled/line, -/turf/open/floor/iron, -/area/station/commons/storage/primary) "mzb" = ( /obj/effect/turf_decal/siding/thinplating/dark{ dir = 5 @@ -38398,6 +38406,23 @@ /obj/machinery/light/dim/directional/east, /turf/open/floor/iron, /area/station/maintenance/port/central) +"mzi" = ( +/obj/structure/rack, +/obj/item/clothing/glasses/meson{ + pixel_y = 4 + }, +/obj/item/lighter, +/obj/item/reagent_containers/pill/patch/aiuri, +/obj/item/stock_parts/power_store/cell/high, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 + }, +/obj/structure/window/reinforced/spawner/directional/west, +/obj/item/computer_disk/engineering, +/obj/item/computer_disk/engineering, +/obj/item/computer_disk/engineering, +/turf/open/floor/iron, +/area/station/command/heads_quarters/ce) "mzs" = ( /obj/effect/turf_decal/trimline/neutral/filled/line{ dir = 8 @@ -38721,12 +38746,6 @@ }, /turf/open/floor/wood/large, /area/station/service/theater) -"mFh" = ( -/obj/machinery/sparker/directional/west{ - id = "Xenobio" - }, -/turf/open/floor/engine, -/area/station/science/xenobiology) "mFo" = ( /obj/effect/turf_decal/trimline/red/filled/line{ dir = 4 @@ -38771,6 +38790,10 @@ "mGw" = ( /turf/closed/wall, /area/station/service/barber) +"mGB" = ( +/obj/structure/filingcabinet, +/turf/open/floor/iron/grimy, +/area/station/security/detectives_office) "mGN" = ( /obj/effect/turf_decal/siding/thinplating/end, /obj/machinery/button/door{ @@ -40524,6 +40547,13 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/engineering/atmos) +"nmN" = ( +/obj/structure/closet/radiation, +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "nmP" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -41031,14 +41061,6 @@ /obj/effect/turf_decal/sand/plating, /turf/open/misc/asteroid, /area/station/medical/chemistry) -"nwE" = ( -/obj/machinery/pdapainter/research, -/obj/machinery/computer/security/telescreen/rd{ - dir = 1; - pixel_y = -32 - }, -/turf/open/floor/iron/cafeteria, -/area/station/command/heads_quarters/rd) "nwI" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 1 @@ -41427,19 +41449,6 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron/white, /area/station/science/xenobiology) -"nDR" = ( -/obj/effect/turf_decal/trimline/purple/filled/line{ - dir = 8 - }, -/obj/structure/table/reinforced, -/obj/item/stock_parts/matter_bin{ - pixel_x = 3; - pixel_y = 3 - }, -/obj/item/stock_parts/matter_bin, -/obj/item/stock_parts/micro_laser, -/turf/open/floor/iron/white, -/area/station/science/lab) "nDX" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -41905,20 +41914,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/smooth, /area/station/maintenance/central/greater) -"nMw" = ( -/obj/structure/window/reinforced/spawner/directional/north, -/obj/structure/chair/office/light{ - dir = 4 - }, -/obj/machinery/computer/security/telescreen/ordnance{ - dir = 8; - pixel_x = 30 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/station/science/ordnance/testlab) "nMB" = ( /turf/open/floor/iron, /area/station/science/ordnance/testlab) @@ -42407,18 +42402,6 @@ /obj/machinery/atmospherics/pipe/smart/simple/green/visible, /turf/open/floor/plating, /area/station/engineering/atmos/pumproom) -"nVd" = ( -/obj/machinery/power/apc/auto_name/directional/west, -/obj/effect/turf_decal/trimline/red/filled/line{ - dir = 10 - }, -/obj/structure/cable, -/obj/machinery/light_switch/directional/south{ - pixel_x = 10; - pixel_y = -24 - }, -/turf/open/floor/iron, -/area/station/security/checkpoint/supply) "nVg" = ( /obj/machinery/door/airlock/hatch{ name = "Radstorm Shelter" @@ -42606,6 +42589,7 @@ /obj/effect/decal/cleanable/dirt, /obj/machinery/airalarm/directional/east, /obj/effect/mapping_helpers/airalarm/all_access, +/obj/structure/cable, /turf/open/floor/iron, /area/station/maintenance/disposal/incinerator) "nYq" = ( @@ -44108,6 +44092,11 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/tram/left) +"oDq" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/yellow/visible, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "oDs" = ( /obj/structure/cable, /obj/item/radio/intercom/directional/west, @@ -44730,6 +44719,25 @@ /obj/machinery/light/warm/directional/south, /turf/open/floor/wood, /area/station/service/theater) +"oSi" = ( +/obj/structure/table, +/obj/item/clothing/gloves/color/yellow, +/obj/item/clothing/gloves/color/yellow, +/obj/item/clothing/gloves/color/yellow, +/obj/item/clothing/gloves/color/yellow, +/obj/item/clothing/gloves/color/yellow, +/obj/item/storage/box/lights/mixed, +/obj/item/stack/cable_coil, +/obj/item/stock_parts/power_store/cell/emproof, +/obj/item/stock_parts/power_store/cell/emproof, +/obj/machinery/camera/emp_proof{ + dir = 10; + network = list("ss13","engineering"); + c_tag = "Engineering - SMES Misc" + }, +/obj/machinery/light/small/directional/west, +/turf/open/floor/iron/dark, +/area/station/engineering/engine_smes) "oSl" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -44755,23 +44763,6 @@ }, /turf/open/floor/iron, /area/station/security/office) -"oSB" = ( -/obj/machinery/camera/directional/west{ - network = list("ss13","Security","cargo"); - c_tag = "Cargo - Security Outpost" - }, -/obj/effect/turf_decal/trimline/red/filled/line{ - dir = 8 - }, -/obj/machinery/button/door/directional/west{ - name = "Cargo Cell Control"; - id = "crgdoor"; - req_access = list("brig_entrance"); - normaldoorcontrol = 1 - }, -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/security/checkpoint/supply) "oTa" = ( /obj/structure/railing{ dir = 9 @@ -45343,6 +45334,13 @@ }, /turf/open/floor/iron/dark, /area/station/command/bridge) +"pdX" = ( +/obj/machinery/computer/security/telescreen/cmo/directional/north, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/command/heads_quarters/cmo) "pdZ" = ( /obj/machinery/door/airlock/research/glass{ name = "Robotics Lab" @@ -46427,6 +46425,12 @@ /obj/structure/closet/toolcloset, /turf/open/floor/iron, /area/station/engineering/main) +"pxd" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/visible/layer2, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) "pxf" = ( /obj/structure/closet/secure_closet/hos, /obj/structure/secure_safe/hos{ @@ -46458,7 +46462,6 @@ }, /area/station/service/chapel) "pxs" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /turf/open/floor/wood, /area/station/service/lawoffice) "pxC" = ( @@ -46612,6 +46615,19 @@ /obj/effect/turf_decal/tile/bar/opposingcorners, /turf/open/floor/iron, /area/station/cargo/miningdock/cafeteria) +"pzq" = ( +/obj/structure/table, +/obj/item/stack/cable_coil{ + pixel_x = -3; + pixel_y = 3 + }, +/obj/item/stack/cable_coil, +/obj/item/stock_parts/power_store/cell/high, +/obj/effect/turf_decal/trimline/white/filled/corner{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/storage/tech) "pzv" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 8 @@ -46831,6 +46847,14 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /turf/open/floor/iron, /area/station/cargo/lobby) +"pDn" = ( +/obj/machinery/elevator_control_panel{ + pixel_y = 2; + linked_elevator_id = "tram_xeno_lift"; + preset_destination_names = list("2"="Lower Deck", "3"="Upper Deck") + }, +/turf/closed/wall/r_wall, +/area/station/science/xenobiology) "pDu" = ( /obj/machinery/duct, /obj/structure/cable, @@ -46962,6 +46986,13 @@ /obj/structure/transit_tube_pod, /turf/open/floor/plating, /area/station/science/lower) +"pFO" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/yellow/visible, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "pFU" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, @@ -47125,6 +47156,7 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/visible/layer2, /obj/machinery/light/small/directional/west, +/obj/structure/cable, /turf/open/floor/iron, /area/station/maintenance/disposal/incinerator) "pIF" = ( @@ -47533,6 +47565,16 @@ dir = 10 }, /area/station/service/chapel) +"pPk" = ( +/obj/structure/window/reinforced/spawner/directional/north, +/obj/structure/chair/office/light{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/science/ordnance/testlab) "pPn" = ( /obj/effect/turf_decal/trimline/purple/filled/corner{ dir = 8 @@ -47577,9 +47619,40 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/security/brig) +"pQa" = ( +/obj/effect/turf_decal/bot, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 + }, +/obj/machinery/portable_atmospherics/pipe_scrubber, +/turf/open/floor/iron, +/area/station/engineering/atmos) "pQx" = ( /turf/open/misc/asteroid/dug, /area/station/science/explab) +"pQy" = ( +/obj/structure/table, +/obj/item/multitool/circuit{ + pixel_x = -8 + }, +/obj/item/multitool/circuit{ + pixel_x = -4 + }, +/obj/item/multitool/circuit, +/obj/item/stock_parts/power_store/cell/high{ + pixel_x = 8; + pixel_y = 9 + }, +/obj/item/stock_parts/power_store/cell/high{ + pixel_x = 8; + pixel_y = -2 + }, +/obj/machinery/camera/directional/south{ + network = list("ss13","rd"); + c_tag = "Science - Testing Lab" + }, +/turf/open/floor/iron, +/area/station/science/explab) "pQF" = ( /obj/structure/table, /obj/machinery/reagentgrinder, @@ -47587,6 +47660,18 @@ /obj/effect/turf_decal/tile/green/fourcorners, /turf/open/floor/iron/dark, /area/station/service/hydroponics) +"pQL" = ( +/obj/machinery/camera{ + dir = 9; + network = list("ss13","Security"); + c_tag = "Security - Detective's Office" + }, +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/obj/machinery/light/warm/directional/north, +/obj/machinery/firealarm/directional/north, +/turf/open/floor/iron/grimy, +/area/station/security/detectives_office) "pQO" = ( /obj/machinery/atmospherics/components/binary/pump/on{ name = "Gas to Cooling Loop"; @@ -47676,13 +47761,6 @@ }, /turf/open/floor/tram, /area/station/hallway/primary/tram/right) -"pTP" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/effect/turf_decal/siding/thinplating/corner, -/turf/open/floor/iron/dark, -/area/station/science/xenobiology) "pTW" = ( /obj/effect/turf_decal/trimline/neutral/filled/line{ dir = 4 @@ -47959,6 +48037,7 @@ pixel_x = 3; pixel_y = 3 }, +/obj/effect/spawner/random/bureaucracy/briefcase, /turf/open/floor/wood, /area/station/service/lawoffice) "pYH" = ( @@ -47976,22 +48055,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/tram/right) -"pYU" = ( -/obj/machinery/computer/apc_control{ - dir = 1 - }, -/obj/machinery/requests_console/directional/south{ - name = "Chief Engineer's Request Console"; - department = "Chief Engineer's Desk" - }, -/obj/effect/mapping_helpers/requests_console/announcement, -/obj/effect/mapping_helpers/requests_console/supplies, -/obj/machinery/computer/security/telescreen/engine{ - dir = 4; - pixel_x = -24 - }, -/turf/open/floor/iron/dark, -/area/station/command/heads_quarters/ce) "pYZ" = ( /obj/effect/turf_decal/stripes/corner{ dir = 1 @@ -48095,6 +48158,24 @@ "qas" = ( /turf/closed/wall/rust, /area/station/hallway/primary/tram/center) +"qaH" = ( +/obj/machinery/power/apc/auto_name/directional/west, +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 10 + }, +/obj/structure/cable, +/obj/machinery/light_switch/directional/south{ + pixel_x = 10; + pixel_y = -24 + }, +/obj/machinery/button/door/directional/south{ + id = "crgdoor"; + req_access = list("brig_entrance"); + name = "Cargo Cell Control"; + normaldoorcontrol = 1 + }, +/turf/open/floor/iron, +/area/station/security/checkpoint/supply) "qaM" = ( /obj/machinery/holopad, /obj/effect/turf_decal/bot, @@ -48183,12 +48264,6 @@ /obj/structure/sign/calendar/directional/east, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/ce) -"qcE" = ( -/obj/machinery/camera/directional/north{ - c_tag = "Civilian - Restroom North" - }, -/turf/open/floor/iron/freezer, -/area/station/commons/toilet) "qcG" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/iron/smooth, @@ -48285,13 +48360,6 @@ }, /turf/open/floor/engine, /area/station/science/ordnance/burnchamber) -"qel" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 5 - }, -/turf/open/floor/wood, -/area/station/service/lawoffice) "qeo" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/white/line{ @@ -48305,10 +48373,9 @@ /obj/effect/turf_decal/trimline/neutral/filled/line{ dir = 10 }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 4 - }, /obj/machinery/light/directional/west, +/obj/machinery/power/smes/engineering, +/obj/structure/cable, /turf/open/floor/iron, /area/station/engineering/gravity_generator) "qes" = ( @@ -48457,14 +48524,6 @@ "qgt" = ( /turf/closed/wall/rock/porous, /area/station/medical/chemistry) -"qgy" = ( -/obj/structure/table/reinforced, -/obj/machinery/cell_charger{ - pixel_y = 4 - }, -/obj/item/stock_parts/cell/high, -/turf/open/floor/iron, -/area/station/command/bridge) "qgB" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/visible, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -48775,6 +48834,17 @@ }, /turf/open/floor/iron/white, /area/station/science/xenobiology) +"qlK" = ( +/obj/machinery/camera/directional/west{ + network = list("ss13","Security","cargo"); + c_tag = "Cargo - Security Outpost" + }, +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 8 + }, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/security/checkpoint/supply) "qmc" = ( /obj/effect/turf_decal/trimline/yellow/filled/line{ dir = 5 @@ -48841,6 +48911,10 @@ dir = 8 }, /area/station/medical/medbay/central) +"qnk" = ( +/obj/structure/cable, +/turf/open/floor/wood, +/area/station/service/lawoffice) "qnm" = ( /obj/effect/turf_decal/trimline/red/filled/line, /obj/structure/table, @@ -48944,6 +49018,14 @@ /obj/effect/landmark/start/prisoner, /turf/open/floor/iron, /area/station/security/prison) +"qpr" = ( +/obj/structure/table/reinforced, +/obj/machinery/cell_charger{ + pixel_y = 4 + }, +/obj/item/stock_parts/power_store/cell/high, +/turf/open/floor/iron, +/area/station/command/bridge) "qpu" = ( /obj/effect/turf_decal/trimline/red/filled/corner{ dir = 8 @@ -49098,13 +49180,6 @@ /obj/structure/sign/poster/official/safety_report/directional/south, /turf/open/floor/iron, /area/station/security/checkpoint/science) -"qsI" = ( -/obj/structure/table/wood, -/obj/structure/sign/flag/nanotrasen/directional/north, -/obj/machinery/cell_charger, -/obj/item/stock_parts/cell/crap, -/turf/open/floor/wood, -/area/station/command/meeting_room) "qsJ" = ( /obj/structure/window/reinforced/spawner/directional/north, /obj/structure/table, @@ -49156,6 +49231,9 @@ }, /turf/open/floor/wood, /area/station/command/meeting_room) +"qtq" = ( +/turf/open/floor/engine/xenobio, +/area/station/science/xenobiology) "qtB" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/door/poddoor/preopen{ @@ -49295,6 +49373,13 @@ }, /obj/structure/cable, /obj/structure/table, +/obj/item/multitool{ + pixel_x = 8 + }, +/obj/item/flatpack{ + board = /obj/item/circuitboard/machine/flatpacker; + pixel_x = -5 + }, /turf/open/floor/iron, /area/station/engineering/break_room) "qwq" = ( @@ -50113,6 +50198,18 @@ /obj/structure/cable, /turf/open/floor/iron/dark, /area/station/science/server) +"qKW" = ( +/obj/structure/table/reinforced, +/obj/machinery/keycard_auth/directional/south, +/obj/item/rcl/pre_loaded, +/obj/machinery/computer/security/telescreen/ce/directional/west, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 + }, +/obj/item/clipboard, +/obj/item/paper/monitorkey, +/turf/open/floor/iron/dark, +/area/station/command/heads_quarters/ce) "qLD" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -50350,6 +50447,17 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/commons/dorms) +"qPQ" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 10 + }, +/obj/structure/closet/radiation, +/obj/effect/turf_decal/bot{ + dir = 1 + }, +/obj/machinery/computer/security/telescreen/engine/directional/south, +/turf/open/floor/iron, +/area/station/engineering/main) "qPV" = ( /obj/machinery/power/apc/auto_name/directional/south, /obj/structure/cable, @@ -50651,26 +50759,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/hallway/primary/tram/left) -"qVL" = ( -/obj/structure/table, -/obj/item/assembly/igniter{ - pixel_x = -5; - pixel_y = 3 - }, -/obj/item/assembly/igniter{ - pixel_x = 5; - pixel_y = -4 - }, -/obj/item/assembly/igniter{ - pixel_x = 2; - pixel_y = 6 - }, -/obj/item/assembly/igniter{ - pixel_x = 2; - pixel_y = -1 - }, -/turf/open/floor/engine, -/area/station/science/xenobiology) "qVN" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -50792,15 +50880,6 @@ }, /turf/open/floor/iron, /area/station/maintenance/tram/mid) -"qXs" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 5 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/turf/open/floor/iron/white, -/area/station/science/xenobiology) "qXv" = ( /obj/effect/turf_decal/trimline/neutral/filled/line, /obj/machinery/light/directional/south, @@ -50811,27 +50890,6 @@ /obj/machinery/atmospherics/pipe/smart/simple/cyan/visible, /turf/open/floor/iron, /area/station/engineering/atmos) -"qXK" = ( -/obj/structure/table, -/obj/effect/decal/cleanable/dirt, -/obj/item/stock_parts/cell/crap/empty{ - pixel_x = 6; - pixel_y = 10 - }, -/obj/item/stock_parts/cell/crap/empty{ - pixel_x = 6; - pixel_y = 2 - }, -/obj/item/stock_parts/cell/crap/empty{ - pixel_x = -7; - pixel_y = 7 - }, -/obj/item/stock_parts/cell/crap/empty{ - pixel_x = -2; - pixel_y = -2 - }, -/turf/open/floor/iron/smooth, -/area/station/security/mechbay) "qXS" = ( /obj/structure/disposalpipe/segment{ dir = 5 @@ -51802,6 +51860,7 @@ "rnA" = ( /obj/structure/extinguisher_cabinet/directional/east, /obj/effect/decal/cleanable/dirt, +/obj/structure/cable, /turf/open/floor/iron, /area/station/maintenance/disposal/incinerator) "rnK" = ( @@ -51922,6 +51981,13 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/engineering/atmos) +"rpm" = ( +/obj/structure/disposaloutlet{ + dir = 1 + }, +/obj/structure/disposalpipe/trunk, +/turf/open/floor/engine/xenobio, +/area/station/science/xenobiology) "rpp" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, @@ -51929,6 +51995,8 @@ name = "Tunnel Access Hatch" }, /obj/effect/mapping_helpers/airlock/unres, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/catwalk_floor, /area/station/maintenance/starboard/central) "rpq" = ( @@ -52308,15 +52376,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/medical/storage) -"ryI" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/science/ordnance/testlab) "ryJ" = ( /obj/effect/turf_decal/trimline/yellow/filled/corner{ dir = 1 @@ -52416,16 +52475,6 @@ /obj/machinery/disposal/bin, /turf/open/floor/iron, /area/station/command/bridge) -"rAB" = ( -/obj/structure/table, -/obj/machinery/cell_charger{ - pixel_y = 5 - }, -/obj/item/stack/cable_coil, -/obj/item/multitool, -/obj/item/stock_parts/cell/high, -/turf/open/floor/engine, -/area/station/science/xenobiology) "rAS" = ( /turf/closed/wall, /area/station/service/library/lounge) @@ -52834,6 +52883,16 @@ /obj/structure/sign/clock/directional/north, /turf/open/floor/iron, /area/station/security/prison) +"rKD" = ( +/obj/structure/table, +/obj/machinery/cell_charger, +/obj/item/storage/toolbox/electrical{ + pixel_x = 4; + pixel_y = 9 + }, +/obj/item/stock_parts/power_store/cell/high, +/turf/open/floor/iron/dark, +/area/station/science/explab) "rKL" = ( /obj/machinery/newscaster/directional/east, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -53882,15 +53941,6 @@ }, /turf/open/floor/iron, /area/station/maintenance/port/central) -"scn" = ( -/obj/structure/table, -/obj/machinery/cell_charger, -/obj/item/stock_parts/cell/high, -/obj/effect/turf_decal/trimline/white/filled/line{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/station/engineering/storage/tech) "sct" = ( /obj/structure/table/reinforced, /obj/structure/window/spawner/directional/north, @@ -54210,12 +54260,6 @@ /obj/structure/cable, /turf/open/floor/iron/white, /area/station/science/lower) -"siX" = ( -/obj/effect/turf_decal/trimline/neutral/filled/line{ - dir = 5 - }, -/turf/open/space/basic, -/area/space) "siZ" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -54872,6 +54916,13 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/entry) +"stg" = ( +/obj/structure/table/wood, +/obj/structure/sign/flag/nanotrasen/directional/north, +/obj/machinery/cell_charger, +/obj/item/stock_parts/power_store/cell/crap, +/turf/open/floor/wood, +/area/station/command/meeting_room) "stk" = ( /turf/open/floor/iron/smooth, /area/station/maintenance/department/science) @@ -56713,16 +56764,6 @@ "tby" = ( /turf/open/floor/iron/white, /area/station/science/research) -"tbC" = ( -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 8 - }, -/obj/structure/table, -/obj/machinery/cell_charger, -/obj/item/stock_parts/cell/high, -/obj/structure/disposalpipe/segment, -/turf/open/floor/iron, -/area/station/engineering/main) "tbK" = ( /obj/structure/table, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -56972,15 +57013,6 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /turf/open/floor/iron, /area/station/commons/dorms) -"tgw" = ( -/obj/machinery/computer/security/telescreen/cmo{ - pixel_y = 32 - }, -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/command/heads_quarters/cmo) "tgB" = ( /obj/structure/toilet{ pixel_y = 13 @@ -57702,10 +57734,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood, /area/station/command/heads_quarters/captain/private) -"ttj" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/dark/visible, -/turf/open/floor/engine, -/area/station/science/xenobiology) "tto" = ( /obj/machinery/hydroponics/constructable, /obj/effect/turf_decal/trimline/green/line{ @@ -57740,6 +57768,17 @@ }, /turf/open/floor/iron, /area/station/cargo/miningdock) +"ttS" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/bot, +/obj/structure/closet/crate/preopen, +/obj/item/stock_parts/power_store/cell/empty, +/obj/effect/spawner/random/engineering/flashlight, +/turf/open/floor/iron, +/area/station/cargo/warehouse) "tuf" = ( /obj/structure/window/reinforced/spawner/directional/east, /obj/structure/table, @@ -58154,14 +58193,6 @@ /obj/machinery/disposal/bin, /turf/open/floor/iron/white, /area/station/science/xenobiology) -"tBo" = ( -/obj/structure/table, -/obj/item/stack/sheet/iron{ - amount = 10 - }, -/obj/item/electropack, -/turf/open/floor/engine, -/area/station/science/xenobiology) "tBu" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/door/airlock/external{ @@ -58225,9 +58256,6 @@ }, /turf/open/floor/iron, /area/station/cargo/storage) -"tCf" = ( -/turf/open/misc/asteroid/airless, -/area/space) "tCi" = ( /turf/open/floor/iron/dark, /area/station/service/chapel/monastery) @@ -58299,6 +58327,8 @@ /obj/effect/landmark/event_spawn, /obj/structure/cable, /obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) "tEl" = ( @@ -58318,16 +58348,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/service/chapel/office) -"tEx" = ( -/obj/machinery/camera/directional/north{ - network = list("ss13","rd","xeno"); - c_tag = "Science - Xenobiology Lower Containment Chamber" - }, -/obj/machinery/atmospherics/components/unary/outlet_injector/on{ - dir = 4 - }, -/turf/open/floor/engine, -/area/station/science/xenobiology) "tED" = ( /obj/effect/turf_decal/tile/neutral/tram, /obj/effect/turf_decal/stripes/white/line, @@ -59432,21 +59452,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/tram/right) -"tYe" = ( -/obj/structure/table/reinforced, -/obj/machinery/keycard_auth/directional/south, -/obj/item/rcl/pre_loaded, -/obj/machinery/computer/security/telescreen/ce{ - dir = 4; - pixel_x = -24 - }, -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 1 - }, -/obj/item/clipboard, -/obj/item/paper/monitorkey, -/turf/open/floor/iron/dark, -/area/station/command/heads_quarters/ce) "tYp" = ( /turf/closed/wall/r_wall, /area/station/command/heads_quarters/rd) @@ -59815,6 +59820,15 @@ "ufO" = ( /turf/open/floor/iron, /area/station/commons/fitness/recreation) +"ugd" = ( +/obj/structure/table, +/obj/machinery/cell_charger, +/obj/item/stock_parts/power_store/cell/high, +/obj/effect/turf_decal/trimline/white/filled/line{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/storage/tech) "ugf" = ( /obj/structure/bed{ dir = 8 @@ -61433,25 +61447,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/carpet, /area/station/cargo/miningdock) -"uEx" = ( -/obj/structure/table, -/obj/item/clothing/gloves/color/yellow, -/obj/item/clothing/gloves/color/yellow, -/obj/item/clothing/gloves/color/yellow, -/obj/item/clothing/gloves/color/yellow, -/obj/item/clothing/gloves/color/yellow, -/obj/item/storage/box/lights/mixed, -/obj/item/stack/cable_coil, -/obj/item/stock_parts/cell/emproof, -/obj/item/stock_parts/cell/emproof, -/obj/machinery/camera/emp_proof{ - dir = 10; - network = list("ss13","engineering"); - c_tag = "Engineering - SMES Misc" - }, -/obj/machinery/light/small/directional/west, -/turf/open/floor/iron/dark, -/area/station/engineering/engine_smes) "uEB" = ( /obj/structure/closet/secure_closet/freezer/fridge, /obj/effect/turf_decal/bot_white, @@ -61609,16 +61604,6 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/engineering/engine_smes) -"uGJ" = ( -/obj/structure/table/reinforced, -/obj/machinery/atmospherics/pipe/smart/manifold4w/dark/visible, -/obj/machinery/computer/security/telescreen{ - name = "Test Chamber Monitor"; - pixel_y = 2; - network = list("xeno") - }, -/turf/open/floor/iron/dark, -/area/station/science/xenobiology) "uGL" = ( /obj/structure/bed/medical/emergency, /obj/effect/turf_decal/bot, @@ -61639,6 +61624,10 @@ "uGW" = ( /turf/closed/wall, /area/station/cargo/miningdock) +"uGX" = ( +/obj/machinery/transport/tram_controller/tcomms, +/turf/open/floor/iron/dark/telecomms, +/area/station/tcommsat/server) "uHb" = ( /obj/machinery/airalarm/directional/north, /obj/machinery/photocopier, @@ -62200,7 +62189,6 @@ "uPi" = ( /obj/effect/turf_decal/trimline/neutral/filled/line, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, /turf/open/floor/iron, /area/station/engineering/gravity_generator) "uPo" = ( @@ -62876,6 +62864,8 @@ dir = 1 }, /obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/catwalk_floor, /area/station/maintenance/starboard/central) "vcs" = ( @@ -64118,11 +64108,11 @@ /turf/open/floor/iron/white, /area/station/science/lobby) "vyD" = ( -/obj/machinery/power/smes{ - charge = 5e+06 - }, /obj/machinery/airalarm/directional/east, -/obj/structure/cable, +/obj/structure/table, +/obj/item/storage/toolbox/electrical{ + pixel_y = 5 + }, /turf/open/floor/iron, /area/station/engineering/gravity_generator) "vyG" = ( @@ -64594,10 +64584,9 @@ /area/station/medical/surgery/fore) "vGd" = ( /obj/machinery/firealarm/directional/south, -/obj/machinery/conveyor_switch/oneway{ - name = "Shipment Delivery Chute Activator"; - pixel_x = 10; - id = "lawyerdropoff" +/obj/effect/landmark/start/lawyer, +/obj/structure/chair/office{ + dir = 1 }, /turf/open/floor/wood, /area/station/service/lawoffice) @@ -65310,35 +65299,12 @@ }, /turf/open/floor/plating, /area/station/ai_monitored/turret_protected/ai) -"vTE" = ( -/obj/machinery/camera{ - dir = 9; - network = list("ss13","Security"); - c_tag = "Security - Detective's Office" - }, -/obj/structure/cable, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/obj/machinery/light/warm/directional/north, -/turf/open/floor/iron/grimy, -/area/station/security/detectives_office) "vTF" = ( /obj/structure/tank_dispenser{ pixel_x = -1 }, /turf/open/floor/iron, /area/station/engineering/atmos) -"vTH" = ( -/obj/effect/turf_decal/trimline/brown/filled/corner{ - dir = 1 - }, -/obj/machinery/computer/security/telescreen/vault{ - pixel_y = 30 - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/command/heads_quarters/qm) "vTZ" = ( /obj/effect/turf_decal/trimline/brown/filled/corner{ dir = 8 @@ -66301,6 +66267,19 @@ }, /turf/open/floor/iron/dark, /area/station/service/chapel/monastery) +"wnM" = ( +/obj/structure/closet/crate, +/obj/item/stack/sheet/iron/fifty, +/obj/item/stack/rods/fifty, +/obj/item/stack/sheet/glass/fifty, +/obj/item/electronics/airlock, +/obj/item/electronics/airlock, +/obj/item/stock_parts/power_store/cell/high, +/obj/item/stack/sheet/mineral/plasma{ + amount = 30 + }, +/turf/open/floor/plating, +/area/station/engineering/engine_smes) "wnP" = ( /obj/machinery/door/airlock/hatch{ name = "Emergency Exit" @@ -66469,14 +66448,24 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/service) -"wrJ" = ( -/obj/structure/railing{ - dir = 4; - layer = 3.1 +"wrz" = ( +/obj/structure/rack, +/obj/structure/table, +/obj/machinery/computer/security/telescreen/test_chamber/directional/north, +/obj/item/storage/box/beakers{ + pixel_x = 5; + pixel_y = 3 }, -/obj/machinery/netpod, -/turf/open/floor/catwalk_floor/iron_dark, -/area/station/cargo/bitrunning/den) +/obj/item/grenade/chem_grenade{ + pixel_x = -7; + pixel_y = 7 + }, +/obj/item/grenade/chem_grenade{ + pixel_x = -7; + pixel_y = 1 + }, +/turf/open/floor/iron/dark, +/area/station/science/explab) "wrT" = ( /obj/structure/table/glass, /obj/item/grenade/chem_grenade, @@ -66505,6 +66494,16 @@ }, /turf/open/floor/iron/dark, /area/station/engineering/storage/tech) +"wso" = ( +/obj/machinery/camera/directional/north{ + network = list("ss13","rd","xeno"); + c_tag = "Science - Xenobiology Lower Containment Chamber" + }, +/obj/machinery/atmospherics/components/unary/outlet_injector/on{ + dir = 4 + }, +/turf/open/floor/engine/xenobio, +/area/station/science/xenobiology) "wsq" = ( /obj/effect/turf_decal/trimline/green/filled/line{ dir = 1 @@ -66590,10 +66589,9 @@ /turf/open/misc/grass/jungle, /area/station/science/explab) "wtS" = ( -/obj/machinery/power/terminal{ +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 4 }, -/obj/structure/cable, /turf/open/floor/iron, /area/station/engineering/gravity_generator) "wuc" = ( @@ -66658,6 +66656,12 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/security/brig) +"wvL" = ( +/obj/machinery/sparker/directional/west{ + id = "Xenobio" + }, +/turf/open/floor/engine/xenobio, +/area/station/science/xenobiology) "wvQ" = ( /obj/effect/turf_decal/trimline/green/filled/corner{ dir = 4 @@ -66998,6 +67002,27 @@ /obj/structure/reagent_dispensers/foamtank, /turf/open/floor/iron, /area/station/engineering/atmos) +"wAH" = ( +/obj/structure/table, +/obj/effect/decal/cleanable/dirt, +/obj/item/stock_parts/power_store/cell/crap/empty{ + pixel_x = 6; + pixel_y = 10 + }, +/obj/item/stock_parts/power_store/cell/crap/empty{ + pixel_x = 6; + pixel_y = 2 + }, +/obj/item/stock_parts/power_store/cell/crap/empty{ + pixel_x = -7; + pixel_y = 7 + }, +/obj/item/stock_parts/power_store/cell/crap/empty{ + pixel_x = -2; + pixel_y = -2 + }, +/turf/open/floor/iron/smooth, +/area/station/security/mechbay) "wAI" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -67404,10 +67429,6 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/iron/cafeteria, /area/station/security/prison/mess) -"wIP" = ( -/obj/structure/lattice, -/turf/open/space/openspace, -/area/space) "wIT" = ( /obj/structure/chair/wood, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -67545,10 +67566,10 @@ dir = 1 }, /obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ - dir = 4 + dir = 5 }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/grimy, /area/station/service/lawoffice) "wLR" = ( @@ -67738,7 +67759,10 @@ /turf/open/floor/iron, /area/station/security/checkpoint/escape) "wPj" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, +/obj/machinery/atmospherics/components/binary/pump{ + dir = 1; + name = "Mix Bypass" + }, /turf/open/floor/engine, /area/station/engineering/supermatter/room) "wPD" = ( @@ -67938,11 +67962,7 @@ /area/station/hallway/primary/tram/center) "wUL" = ( /obj/machinery/status_display/evac/directional/north, -/obj/machinery/fax{ - name = "Law Office Fax Machine"; - fax_name = "Law Office" - }, -/obj/structure/table/wood, +/obj/machinery/vending/wardrobe/law_wardrobe, /turf/open/floor/wood, /area/station/service/lawoffice) "wVV" = ( @@ -68135,6 +68155,16 @@ }, /turf/open/floor/iron, /area/station/engineering/break_room) +"wYS" = ( +/obj/effect/turf_decal/stripes/corner, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/atmospherics/components/binary/pump{ + name = "Gas to Mix"; + dir = 4 + }, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "wYX" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, @@ -68328,10 +68358,11 @@ /obj/structure/railing, /turf/open/floor/iron, /area/station/cargo/miningfoundry) -"xdw" = ( -/obj/machinery/portable_atmospherics/scrubber, -/turf/open/floor/iron/dark, -/area/station/science/ordnance/storage) +"xdc" = ( +/obj/structure/dresser, +/obj/item/cigarette/cigar/havana, +/turf/open/floor/iron/grimy, +/area/station/commons/vacant_room) "xdx" = ( /obj/effect/turf_decal/stripes/line{ dir = 6 @@ -68863,6 +68894,16 @@ "xnI" = ( /turf/open/floor/iron, /area/station/maintenance/tram/left) +"xnL" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/obj/machinery/door/poddoor/preopen{ + name = "Test Chamber Blast Door"; + id = "Xenolab" + }, +/obj/structure/sign/warning/gas_mask/directional/north, +/turf/open/floor/plating, +/area/station/science/xenobiology) "xnS" = ( /obj/machinery/door/airlock/highsecurity{ name = "AI Upload Access" @@ -69187,6 +69228,11 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/circuit/green, /area/station/ai_monitored/command/nuke_storage) +"xuk" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/yellow/visible, +/obj/machinery/meter, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "xum" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 1 @@ -69202,12 +69248,6 @@ }, /turf/open/floor/iron/white, /area/station/medical/medbay/central) -"xut" = ( -/obj/machinery/camera/directional/south{ - c_tag = "Civilian - Restroom South" - }, -/turf/open/floor/iron/freezer, -/area/station/commons/toilet) "xuA" = ( /obj/structure/closet/secure_closet/medical2, /obj/effect/turf_decal/trimline/blue/filled/line{ @@ -69533,15 +69573,6 @@ }, /turf/open/floor/iron, /area/station/cargo/storage) -"xAM" = ( -/obj/machinery/elevator_control_panel{ - layer = 3.1; - pixel_y = 2; - linked_elevator_id = "tram_xeno_lift"; - preset_destination_names = list("2"="Lower Deck", "3"="Upper Deck") - }, -/turf/closed/wall/r_wall, -/area/station/science/xenobiology) "xAR" = ( /obj/machinery/door/airlock/security{ name = "Prison Workshop" @@ -71281,13 +71312,6 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/exit) -"yiX" = ( -/obj/effect/turf_decal/bot, -/obj/effect/spawner/random/structure/closet_empty/crate, -/obj/effect/spawner/random/maintenance/two, -/obj/item/stock_parts/cell/high/empty, -/turf/open/floor/iron, -/area/station/cargo/storage) "yjf" = ( /obj/structure/window/reinforced/spawner/directional/east, /obj/structure/window/reinforced/spawner/directional/north, @@ -84988,12 +85012,12 @@ apC apC veV veV -qcE +hAD hAD veV pdr kMD -xut +hAD veV veV apC @@ -98111,7 +98135,7 @@ dwR ngp dwR dwR -cXL +ney ney sMr sMr @@ -98369,7 +98393,7 @@ gga rBW ffN sMr -sMr +uGX drH ney tms @@ -98625,7 +98649,7 @@ ocK ngp dwR dwR -cXL +sMr sMr sMr sMr @@ -99126,7 +99150,7 @@ jIG jHb tPW tPW -uEx +oSi jIG abM abM @@ -99849,8 +99873,8 @@ vBa vrG iTz fEZ -qel -mrb +qnk +aGk hPA hFr abM @@ -99889,7 +99913,7 @@ mOW iwV nav fEK -scn +ugd pkp jYz kSp @@ -100107,7 +100131,7 @@ dVC kKB pxs jXY -aGk +lxO xmH hFr abM @@ -100405,7 +100429,7 @@ bUj kdb yih pkp -iTL +wnM ifX iRe wJt @@ -100914,7 +100938,7 @@ abM jnq jIy tsa -klY +pzq hJa kdb msU @@ -101450,10 +101474,10 @@ lku oxs sna gRQ -tbC +fXX cuQ arO -arT +qPQ qHs asA bWN @@ -102991,7 +103015,7 @@ kHR tga rnf xBD -tYe +qKW sHH sHH sHH @@ -103226,7 +103250,7 @@ pcO iKr ofZ uKK -ajF +wtS kWp fal akK @@ -103250,7 +103274,7 @@ pTl ozd eOP wGk -pYU +hDF sHH ydk qHs @@ -103516,11 +103540,11 @@ sHh yeg sHh sHh -sHh -sHh -sHh -sHh -sHh +exQ +kAF +kAF +kAF +wYS sHh sHh poT @@ -103758,7 +103782,7 @@ dor fSp vKv roB -axh +mzi iHK bAK jsW @@ -103773,11 +103797,11 @@ qHs sHj qHs qHs -qHs -qHs -qHs -qHs -qHs +pFO +jfD +xuk +jfD +oDq qHs qHs fWn @@ -103997,7 +104021,7 @@ bKu bVW swg uKK -wtS +ajF bzP fal aks @@ -104025,18 +104049,18 @@ sHH sHH hZr hZr -bpl +pQa mRs jaW mAx -hZr -aaa -aaa -aaa -aaa -aaa -aaa -aaa +qHs +nmN +eEp +kgg +eEp +hzQ +qHs +pHM aeV aeV prq @@ -104282,17 +104306,17 @@ rvh jUz ivk hZr -bpl +pQa mRs woR mAx -hZr -hZr -hZr -hZr -aaa -aaa -aaa +qHs +qHs +qHs +qHs +qHs +qHs +qHs aaa aac aaa @@ -106015,7 +106039,7 @@ pCM kzx oSl kzx -myN +coV alg aes khE @@ -110972,7 +110996,7 @@ vde atC gqV atP -atP +pxd pIA aum aup @@ -111228,7 +111252,7 @@ pts gEs nXQ rnA -hBY +mjl atX wAQ qWU @@ -117137,7 +117161,7 @@ hDT keT iEF fof -aoN +fDz knb hQk aHT @@ -118160,7 +118184,7 @@ qVr qVr kkx cJP -qXs +lxd mLE dGs dGs @@ -118910,7 +118934,7 @@ cJS nhj cVU oRz -ipP +pQy sQZ nhj prI @@ -119164,7 +119188,7 @@ owO owO owO cJS -iih +rKD cVU cFW cFW @@ -119421,7 +119445,7 @@ sQZ sQZ sQZ sQZ -kYl +wrz hIY tVK vIF @@ -119733,7 +119757,7 @@ vXM vXM vXM vXM -mbe +kEm xvl fLB xly @@ -120219,7 +120243,7 @@ lxW iix qQa vtd -hqx +hGd iGF xkg tXA @@ -122772,7 +122796,7 @@ aaa aaa aaa dfz -xdw +iRb ure bKT bqU @@ -124062,7 +124086,7 @@ kNE nMB qAl nMB -ryI +bGP frV wco lwt @@ -124574,7 +124598,7 @@ ign olR vvF vjA -nMw +pPk dWM ign ign @@ -130793,8 +130817,8 @@ vXM vXM vXM vXM -vXM -vXM +pHM +gQc vXM vXM vXM @@ -131049,9 +131073,9 @@ vXM vXM vXM vXM -vXM -vXM -vXM +pHM +gQc +gQc vXM vXM vXM @@ -131306,9 +131330,9 @@ vXM vXM vXM vXM -vXM -siX -vXM +pHM +cXC +pHM vXM vXM vXM @@ -131564,7 +131588,7 @@ vXM vXM vXM vXM -vXM +pHM vXM vXM vXM @@ -143649,7 +143673,7 @@ aaa aaa gcp agw -agG +xdc gcp aaa aaa @@ -150728,7 +150752,7 @@ fLY tFk kcV xNL -qXK +wAH tFk aaa aaa @@ -150996,8 +151020,8 @@ hzN hzN hzN hzN -exq -fTM +kQP +asI rcx hzN xQv @@ -154592,7 +154616,7 @@ mwg ceF avX qyZ -qsI +stg joF kSZ bvq @@ -156391,7 +156415,7 @@ blo fxK lpg qyZ -cFH +dQD xcH oho bPp @@ -156406,7 +156430,7 @@ aQO rup wzm rAh -qgy +qpr eUy mgq nhV @@ -158176,7 +158200,7 @@ wbH wbH qPI cQM -gRO +bTI ppr gki cGg @@ -158460,9 +158484,9 @@ kOr cvf iUw moq -aBZ +eyh xEo -aCE +mGB aCS pIl gdF @@ -158719,7 +158743,7 @@ aBt crE tEl xEo -vTE +pQL kyq pIl dUl @@ -159559,7 +159583,7 @@ opb oOJ oOJ stK -ixH +mwP sOg oOJ uXM @@ -161362,7 +161386,7 @@ pMW pMW pMW sdb -wIP +avE pMW pMW pMW @@ -166468,7 +166492,7 @@ gnM apC abM mBq -tgw +pdX kHy fxM qUL @@ -174414,7 +174438,7 @@ afy age afy afy -agm +abW aaa abM abM @@ -179793,7 +179817,7 @@ abM abM abM usY -fSY +kzq tJR usY abM @@ -180051,7 +180075,7 @@ abM abM usY kiT -iYa +jvW usY usY usY @@ -180077,7 +180101,7 @@ ixu eeE muZ gSF -bpa +egx uje dLO dLO @@ -180290,7 +180314,7 @@ aaa aaa eSQ eSQ -wrJ +flO dRY cTU cTU @@ -180309,8 +180333,8 @@ lZW usY mgh uYZ -oSB -nVd +qlK +qaH vUE bMb kdz @@ -180814,7 +180838,7 @@ uax uax mur qza -vTH +mhJ aAJ riJ aAJ @@ -181095,7 +181119,7 @@ mEd kuq aHq lfQ -jCw +hks aHQ tFB vnu @@ -181875,7 +181899,7 @@ oxL fJQ mlM bxG -nDR +dLz fFR tPZ pqV @@ -181893,9 +181917,9 @@ uvU umu qVr qVr -mFh -bfH -bfH +wvL +qtq +qtq qVr gYw cHY @@ -182149,14 +182173,14 @@ pbH mAL nKU qVr -tEx -bfH -bfH -bfH +wso +qtq +qtq +qtq qVr -pNa -uGJ -pTP +xnL +eiy +itq qyQ qyQ gun @@ -182346,7 +182370,7 @@ cdy iWz hFV gDr -yiX +iAr uax axG bTx @@ -182406,11 +182430,11 @@ pbH bmz pIx qVr -ttj -bfH -bfH -bfH -bfH +bZJ +qtq +qtq +qtq +qtq pNa qNk xmY @@ -182419,7 +182443,7 @@ eJQ bNx aSt aSt -xAM +pDn aaa aaa aaa @@ -182663,14 +182687,14 @@ qKE chE pHX qVr -cAK -ttj -bhf -ttj -ttj +ayE +bZJ +bZJ +bZJ +bZJ nzg cwj -ksk +cco bsh rQr aMh @@ -182920,11 +182944,11 @@ pbH kBo kJA qVr -bfH -bfH -bfH -bfH -kGv +qtq +qtq +qtq +qtq +rpm qSS cFQ xmY @@ -183172,15 +183196,15 @@ kye tes kye kye -nwE +lHJ pbH mAL nKU qVr -bfH -bfH -bfH -bfH +qtq +qtq +qtq +qtq qVr jqK ijR @@ -183435,9 +183459,9 @@ vSa cJR qVr qVr -rAB -qVL -tBo +qtq +qtq +qtq qVr gYw vav @@ -185177,7 +185201,7 @@ udQ udQ aWL tft -hMU +ttS qyg utY fHV @@ -190880,7 +190904,7 @@ pMW pMW pMW iLP -tCf +aac iLP pMW pMW diff --git a/_maps/map_files/wawastation/wawastation.dmm b/_maps/map_files/wawastation/wawastation.dmm new file mode 100644 index 0000000000000..b19afd0ba14af --- /dev/null +++ b/_maps/map_files/wawastation/wawastation.dmm @@ -0,0 +1,199767 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"aas" = ( +/obj/structure/chair/office/tactical{ + dir = 4 + }, +/obj/effect/landmark/start/lawyer, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/station/security/office) +"aaB" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/exit/departure_lounge) +"aaR" = ( +/obj/effect/turf_decal/stripes/white/line{ + dir = 5 + }, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/station/science/ordnance/testlab) +"aaV" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/turf/open/floor/iron/large, +/area/station/service/hydroponics/garden) +"aaY" = ( +/obj/effect/turf_decal/tile/yellow{ + dir = 4 + }, +/turf/open/floor/iron/dark/corner, +/area/station/engineering/atmos/upper) +"abb" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/port/greater) +"abc" = ( +/obj/structure/window/spawner/directional/east, +/obj/structure/window/spawner/directional/north, +/turf/open/floor/iron/dark, +/area/station/commons/fitness/recreation) +"abh" = ( +/obj/machinery/atmospherics/pipe/smart/simple/purple/visible{ + dir = 6 + }, +/obj/machinery/firealarm/directional/west, +/obj/structure/disposalpipe/sorting/mail/flip, +/obj/effect/mapping_helpers/mail_sorting/science/ordnance, +/turf/open/floor/iron/dark, +/area/station/science/ordnance) +"abi" = ( +/obj/machinery/light/floor, +/turf/open/floor/iron, +/area/station/ai_monitored/command/storage/eva) +"abm" = ( +/obj/structure/railing{ + dir = 1 + }, +/obj/structure/railing, +/obj/structure/lattice/catwalk, +/turf/open/openspace, +/area/station/science/xenobiology) +"abn" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/obj/machinery/navbeacon{ + codes_txt = "patrol;next_patrol=P11.5-Central-Primary"; + location = "P11-Central-Primary" + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"abo" = ( +/obj/machinery/duct, +/obj/effect/landmark/start/botanist, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/service/hydroponics) +"abw" = ( +/obj/machinery/door/airlock/maintenance_hatch, +/obj/effect/mapping_helpers/airlock/access/all/security/entrance, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/security/medical) +"abx" = ( +/obj/structure/railing/corner{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/catwalk_floor/iron_dark/telecomms, +/area/station/ai_monitored/turret_protected/ai) +"aby" = ( +/obj/machinery/door/airlock/maintenance_hatch, +/obj/effect/mapping_helpers/airlock/access/all/command/minisat, +/obj/structure/cable/layer3, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/ai_monitored/command/storage/satellite) +"abC" = ( +/obj/effect/turf_decal/trimline/blue/filled/line, +/obj/machinery/duct, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/turf/open/floor/iron/white, +/area/station/medical/surgery/theatre) +"abF" = ( +/obj/machinery/power/smes/engineering, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 10 + }, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/engineering/main) +"abK" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/command/gateway) +"abX" = ( +/obj/machinery/door/airlock/public/glass{ + name = "Library" + }, +/obj/effect/landmark/navigate_destination/library, +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/siding/wood, +/turf/open/floor/wood/tile, +/area/station/service/library) +"acc" = ( +/turf/closed/wall, +/area/station/maintenance/central/lesser) +"aco" = ( +/obj/structure/rack, +/obj/item/clothing/suit/hooded/ablative, +/obj/item/gun/energy/temperature/security, +/obj/item/gun/energy/ionrifle, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 1 + }, +/obj/machinery/power/apc/auto_name/directional/south, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/security/armory) +"acA" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/wood/tile, +/area/station/service/bar) +"acB" = ( +/obj/effect/spawner/random/trash/hobo_squat, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/central/lesser) +"acG" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/orange/visible, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"acY" = ( +/obj/structure/cable, +/obj/structure/railing/corner{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/white, +/area/station/science/research) +"adc" = ( +/obj/machinery/power/emitter/welded{ + dir = 1 + }, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/engineering/supermatter/room) +"adg" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/structure/table/wood/fancy/orange, +/obj/item/stamp{ + pixel_x = 7; + pixel_y = 9 + }, +/obj/item/stamp/denied{ + pixel_x = 7; + pixel_y = 4 + }, +/obj/item/stamp/head/qm{ + pixel_x = 7; + pixel_y = -2 + }, +/obj/item/clipboard{ + pixel_x = -6; + pixel_y = 4 + }, +/obj/machinery/firealarm/directional/east, +/obj/item/computer_disk/quartermaster{ + pixel_y = 4; + pixel_x = -6 + }, +/turf/open/floor/wood, +/area/station/command/heads_quarters/qm) +"adK" = ( +/obj/structure/lattice/catwalk, +/obj/structure/railing{ + dir = 8 + }, +/turf/open/openspace, +/area/station/maintenance/port/greater) +"adP" = ( +/obj/machinery/door/airlock/atmos{ + name = "Atmospherics Overlook" + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/tile/yellow/opposingcorners{ + dir = 1 + }, +/turf/open/floor/iron/checker, +/area/station/engineering/atmos/upper) +"adV" = ( +/obj/effect/turf_decal/tile/yellow, +/obj/machinery/light/dim/directional/east, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) +"adW" = ( +/obj/structure/closet/secure_closet{ + req_access = list("brig") + }, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 4 + }, +/obj/machinery/light/small/directional/east, +/turf/open/floor/iron, +/area/station/security/brig) +"aem" = ( +/obj/structure/table, +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/item/storage/box/syringes{ + pixel_y = 4 + }, +/obj/item/storage/box/syringes, +/obj/item/gun/syringe{ + pixel_y = 3 + }, +/obj/item/gun/syringe, +/obj/structure/window/spawner/directional/east, +/turf/open/floor/iron/white, +/area/station/medical/storage) +"aep" = ( +/obj/machinery/door/airlock/external{ + name = "Solar Maintenance" + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/obj/effect/mapping_helpers/airlock/unres, +/obj/effect/mapping_helpers/airlock/cyclelink_helper, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/solars/starboard/fore) +"aeq" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 1 + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plating, +/area/station/maintenance/port/lesser) +"aer" = ( +/obj/machinery/camera/autoname/directional/west, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/engineering/main) +"aex" = ( +/mob/living/basic/sloth/citrus, +/turf/open/floor/iron, +/area/station/cargo/storage) +"aez" = ( +/obj/structure/cable, +/turf/open/floor/engine, +/area/station/engineering/supermatter) +"aeC" = ( +/obj/effect/turf_decal/trimline/yellow/corner{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron, +/area/station/maintenance/department/medical/central) +"aeD" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/freezer, +/area/station/security/prison/shower) +"aeI" = ( +/obj/machinery/door/window/brigdoor/left/directional/west{ + req_access = list("security"); + name = "Security Post Desk" + }, +/obj/structure/table/reinforced, +/obj/structure/desk_bell{ + pixel_x = -3; + pixel_y = 2 + }, +/obj/machinery/door/firedoor, +/obj/machinery/door/poddoor/preopen{ + id = "medsecprivacy"; + name = "Privacy Shutter" + }, +/turf/open/floor/iron/white, +/area/station/security/checkpoint/medical) +"aeJ" = ( +/obj/structure/table/reinforced, +/obj/item/phone, +/obj/structure/cable, +/obj/effect/turf_decal/tile/dark_blue/half/contrasted{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/command/bridge) +"afe" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/machinery/firealarm/directional/west, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"afp" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/turf/open/floor/iron, +/area/station/command/heads_quarters/ce) +"afz" = ( +/obj/effect/landmark/generic_maintenance_landmark, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/plating, +/area/station/maintenance/solars/port/aft) +"afA" = ( +/obj/structure/table, +/obj/item/stack/arcadeticket, +/obj/item/stack/arcadeticket, +/obj/machinery/camera/autoname/directional/north, +/turf/open/floor/iron, +/area/station/commons/fitness/recreation) +"afC" = ( +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/mapping_helpers/broken_floor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/maintenance/solars/starboard/fore) +"afF" = ( +/obj/effect/spawner/random/structure/chair_flipped, +/obj/effect/turf_decal/siding/white/corner, +/obj/effect/decal/cleanable/blood/old, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/white/small, +/area/station/science/lobby) +"afJ" = ( +/obj/machinery/power/apc/auto_name/directional/north, +/obj/structure/cable, +/turf/open/floor/iron/white, +/area/station/science/explab) +"afR" = ( +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 1 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/turf/open/floor/iron, +/area/station/security) +"afV" = ( +/obj/effect/spawner/random/structure/closet_empty/crate/with_loot, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"afW" = ( +/obj/structure/closet/firecloset/full, +/obj/machinery/light/small/dim/directional/west, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/textured_large, +/area/station/hallway/primary/central) +"agq" = ( +/obj/effect/turf_decal/stripes{ + dir = 1 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/portable_atmospherics/pump, +/obj/machinery/light/directional/north, +/turf/open/floor/iron/dark, +/area/station/engineering/atmospherics_engine) +"agr" = ( +/obj/structure/table, +/obj/effect/spawner/random/engineering/toolbox, +/obj/effect/spawner/random/engineering/toolbox, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/commons/storage/primary) +"agu" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/large, +/area/station/service/hydroponics/garden) +"agw" = ( +/obj/structure/table, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 8 + }, +/obj/item/paper_bin/carbon, +/obj/item/pen, +/obj/machinery/firealarm/directional/west, +/turf/open/floor/iron/dark, +/area/station/command/heads_quarters/hop) +"agA" = ( +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plating, +/area/station/science/xenobiology) +"agM" = ( +/obj/machinery/door/poddoor/shutters/window/preopen{ + name = "Security Shutters"; + id = "xbprotect"; + dir = 8 + }, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/machinery/firealarm/directional/north, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/catwalk_floor/flat_white, +/area/station/science/xenobiology) +"agO" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/broken_flooring/pile/directional/east, +/obj/structure/reagent_dispensers/fueltank, +/turf/open/floor/plating, +/area/station/maintenance/department/science) +"agP" = ( +/obj/structure/lattice/catwalk, +/obj/structure/disposaloutlet, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/turf/open/space/openspace, +/area/space/nearstation) +"ahb" = ( +/obj/machinery/light_switch/directional/east, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/command/corporate_dock) +"ahl" = ( +/turf/open/floor/iron/stairs/right{ + dir = 4 + }, +/area/station/engineering/main) +"ahp" = ( +/obj/structure/table/reinforced, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/item/paper_bin, +/obj/machinery/door/firedoor, +/obj/machinery/camera/autoname/directional/south, +/turf/open/floor/wood/large, +/area/station/cargo/boutique) +"ahq" = ( +/turf/closed/wall/r_wall, +/area/station/medical/psychology) +"ahv" = ( +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/turf/open/floor/iron, +/area/station/cargo/lobby) +"ahw" = ( +/obj/effect/turf_decal/tile/dark_blue/half/contrasted, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/hallway/secondary/command) +"ahE" = ( +/turf/closed/wall, +/area/station/commons/toilet/restrooms) +"ahI" = ( +/obj/machinery/computer/warrant{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/turf/open/floor/iron/dark, +/area/station/security/courtroom) +"ahV" = ( +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 1 + }, +/obj/item/radio/intercom/directional/north, +/turf/open/floor/iron, +/area/station/cargo/storage) +"aic" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/structure/sign/poster/contraband/random/directional/north, +/obj/structure/chair/sofa/bench/left, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"aie" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/yellow/opposingcorners, +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/maintenance/disposal) +"aih" = ( +/obj/structure/chair/stool/directional/north, +/obj/effect/turf_decal/sand/plating, +/turf/open/floor/plating, +/area/station/maintenance/central/greater) +"aip" = ( +/obj/machinery/light/small/directional/north, +/turf/open/floor/plating, +/area/station/cargo/storage) +"aiE" = ( +/obj/effect/mapping_helpers/burnt_floor, +/turf/open/floor/plating, +/area/station/maintenance/central/greater) +"aiS" = ( +/obj/machinery/photocopier, +/obj/machinery/light_switch/directional/east, +/obj/structure/cable, +/turf/open/floor/carpet/black, +/area/station/command/heads_quarters/hos) +"aiZ" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"ajh" = ( +/obj/machinery/vending/wardrobe/chem_wardrobe, +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/turf/open/floor/iron/textured_large, +/area/station/medical/treatment_center) +"ajs" = ( +/obj/machinery/door/poddoor/shutters/window{ + id = "ordauxgarage"; + dir = 1 + }, +/obj/effect/turf_decal/caution/stand_clear, +/obj/effect/turf_decal/sand/plating, +/obj/effect/turf_decal/stripes/asteroid/line, +/obj/effect/turf_decal/stripes/asteroid/line{ + dir = 1 + }, +/turf/open/floor/plating, +/area/station/science/ordnance) +"ajK" = ( +/obj/machinery/door/firedoor, +/obj/effect/landmark/navigate_destination/bar, +/obj/machinery/door/airlock/multi_tile/public/glass{ + name = "Bar" + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment, +/turf/open/floor/wood, +/area/station/commons/lounge) +"ajL" = ( +/obj/machinery/door/airlock{ + name = "Unit 5"; + id_tag = "u5" + }, +/turf/open/floor/iron/freezer, +/area/station/commons/toilet/restrooms) +"ajQ" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/turf/open/floor/plating, +/area/station/maintenance/port/lesser) +"ajS" = ( +/turf/open/floor/plating, +/area/station/construction/mining/aux_base) +"ajU" = ( +/obj/machinery/telecomms/server/presets/engineering, +/turf/open/floor/circuit/green/telecomms/mainframe, +/area/station/tcommsat/server) +"akl" = ( +/obj/machinery/duct, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/commons/locker) +"aks" = ( +/obj/machinery/light/directional/north, +/obj/structure/stairs/east, +/obj/structure/railing, +/turf/open/floor/iron/dark, +/area/station/science/ordnance) +"aku" = ( +/turf/open/misc/asteroid, +/area/station/maintenance/department/science) +"akB" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners{ + dir = 1 + }, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/command/heads_quarters/rd) +"akU" = ( +/turf/open/floor/iron/dark/side, +/area/station/command/corporate_dock) +"alc" = ( +/obj/effect/mapping_helpers/airlock/access/all/command/general, +/obj/machinery/door/airlock/command{ + name = "Bridge" + }, +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "bridgec" + }, +/turf/open/floor/iron, +/area/station/command/bridge) +"alf" = ( +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/light/directional/east, +/turf/open/floor/iron, +/area/station/construction/mining/aux_base) +"alg" = ( +/obj/machinery/door/airlock/command{ + name = "Bridge"; + security_level = 6 + }, +/obj/effect/mapping_helpers/airlock/access/all/command/general, +/obj/effect/turf_decal/tile/dark_blue/fourcorners, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/door/firedoor, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/command/bridge) +"alu" = ( +/obj/machinery/atmospherics/components/unary/thermomachine/heater, +/turf/open/misc/asteroid, +/area/station/maintenance/disposal/incinerator) +"alv" = ( +/obj/structure/railing/corner, +/turf/open/floor/iron, +/area/station/engineering/main) +"alx" = ( +/obj/item/flashlight/flare{ + icon_state = "flare-on"; + start_on = 1 + }, +/turf/open/misc/asteroid, +/area/station/asteroid) +"aly" = ( +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"alA" = ( +/obj/machinery/disposal/bin, +/obj/machinery/button/door/directional/north{ + id = "rndlab2"; + name = "Shutter Control" + }, +/obj/structure/disposalpipe/trunk, +/turf/open/floor/iron/white, +/area/station/science/lab) +"alI" = ( +/obj/machinery/holopad, +/obj/effect/landmark/event_spawn, +/obj/effect/turf_decal/delivery, +/turf/open/floor/iron, +/area/station/ai_monitored/command/storage/eva) +"alP" = ( +/obj/machinery/newscaster/directional/north, +/obj/item/radio/intercom/directional/south, +/obj/machinery/duct, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/kitchen, +/area/station/service/kitchen) +"alW" = ( +/obj/machinery/camera/autoname/directional/west{ + network = list("ss13","medbay") + }, +/obj/effect/decal/cleanable/glass, +/obj/structure/broken_flooring/pile, +/obj/structure/rack, +/obj/effect/turf_decal/tile/green/anticorner/contrasted{ + dir = 1 + }, +/obj/item/storage/box/masks{ + pixel_y = 4 + }, +/obj/item/storage/box/bodybags, +/turf/open/floor/iron/white/textured, +/area/station/maintenance/department/medical/central) +"alX" = ( +/obj/effect/turf_decal/stripes{ + dir = 1 + }, +/obj/structure/cable, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"amh" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 4 + }, +/turf/open/floor/wood, +/area/station/service/theater) +"amn" = ( +/obj/machinery/disposal/bin, +/obj/machinery/button/door/directional/east{ + name = "Genetics Shutters"; + id = "geneshut" + }, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/obj/machinery/firealarm/directional/south, +/turf/open/floor/iron/white/textured, +/area/station/science/genetics) +"amJ" = ( +/obj/machinery/iv_drip, +/obj/effect/turf_decal/tile/blue/fourcorners, +/turf/open/floor/iron/white, +/area/station/medical/treatment_center) +"amK" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 5 + }, +/obj/machinery/disposal/delivery_chute{ + dir = 8 + }, +/obj/machinery/door/window/left/directional/west{ + name = "Corpse Chute"; + req_access = list("morgue") + }, +/obj/structure/window/reinforced/spawner/directional/south, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/station/medical/treatment_center) +"amZ" = ( +/obj/effect/spawner/random/engineering/tracking_beacon, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/exit/departure_lounge) +"anb" = ( +/obj/effect/turf_decal/tile/blue/half/contrasted{ + dir = 8 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron/white, +/area/station/medical/medbay/lobby) +"and" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/siding/purple{ + dir = 5 + }, +/obj/machinery/camera/autoname/directional/east, +/mob/living/simple_animal/bot/secbot/pingsky, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/white, +/area/station/ai_monitored/turret_protected/ai_upload_foyer) +"anf" = ( +/obj/machinery/light/small/directional/south, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/blood/old{ + icon_state = "gib3-old" + }, +/mob/living/simple_animal/hostile/mimic, +/turf/open/floor/iron/white, +/area/station/maintenance/aft/upper) +"anu" = ( +/obj/machinery/atmospherics/pipe/heat_exchanging/junction, +/turf/closed/wall/r_wall, +/area/station/engineering/supermatter/room) +"anx" = ( +/obj/effect/turf_decal/stripes/asteroid/line, +/turf/open/misc/asteroid/airless, +/area/station/asteroid) +"any" = ( +/obj/effect/turf_decal/sand/plating, +/obj/structure/grille/broken, +/turf/open/floor/plating/reinforced/airless, +/area/station/asteroid) +"anJ" = ( +/obj/effect/landmark/event_spawn, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/iron/showroomfloor, +/area/station/engineering/main) +"anN" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/engineering/atmos/upper) +"anT" = ( +/obj/machinery/light/directional/east, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"anX" = ( +/mob/living/basic/parrot/poly, +/obj/structure/filingcabinet/chestdrawer, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 9 + }, +/obj/item/paper/monitorkey, +/obj/machinery/camera/autoname/directional/west, +/turf/open/floor/iron, +/area/station/command/heads_quarters/ce) +"anZ" = ( +/obj/effect/landmark/start/hangover, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/wood, +/area/station/service/library) +"aod" = ( +/turf/open/floor/iron/herringbone, +/area/station/hallway/primary/central) +"aor" = ( +/obj/structure/frame/machine, +/obj/item/stack/cable_coil/five, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/port/lesser) +"aou" = ( +/obj/machinery/conveyor{ + dir = 8; + id = "execution" + }, +/obj/machinery/flasher/directional/north{ + id = "executionflash" + }, +/turf/open/floor/iron/dark, +/area/station/security/execution/education) +"aoy" = ( +/obj/structure/lattice, +/turf/open/openspace, +/area/station/hallway/primary/starboard) +"aoz" = ( +/obj/structure/stairs/east, +/obj/structure/railing{ + dir = 1 + }, +/turf/open/floor/iron/white/smooth_large, +/area/station/science/research) +"aoA" = ( +/obj/effect/spawner/random/structure/girder, +/turf/open/floor/plating, +/area/station/maintenance/port/lesser) +"aoL" = ( +/obj/machinery/door/airlock/external/glass{ + name = "Supply Door Airlock" + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/access/all/supply/general, +/turf/open/floor/plating, +/area/station/cargo/storage) +"apb" = ( +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/mapping_helpers/broken_floor, +/obj/machinery/airalarm/directional/west, +/turf/open/floor/wood, +/area/station/security/detectives_office/private_investigators_office) +"ape" = ( +/obj/structure/closet/secure_closet/engineering_welding, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 6 + }, +/obj/structure/extinguisher_cabinet/directional/east, +/obj/machinery/requests_console/auto_name/directional/south, +/obj/effect/mapping_helpers/requests_console/assistance, +/turf/open/floor/iron, +/area/station/engineering/main) +"apk" = ( +/obj/machinery/power/apc/auto_name/directional/north, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured, +/area/station/medical/morgue) +"apx" = ( +/obj/structure/table/reinforced, +/obj/structure/desk_bell, +/obj/machinery/door/window/left/directional/west{ + req_access = list("shipping") + }, +/obj/machinery/door/firedoor, +/turf/open/floor/iron, +/area/station/cargo/storage) +"apA" = ( +/obj/machinery/atmospherics/components/binary/pump{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/layer_manifold/supply/hidden{ + dir = 1 + }, +/obj/machinery/camera/autoname/directional/west{ + network = list("ss13","rd") + }, +/turf/open/floor/engine, +/area/station/science/ordnance/burnchamber) +"apH" = ( +/obj/structure/chair/comfy/beige{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/turf/open/floor/iron/white, +/area/station/medical/exam_room) +"apK" = ( +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/blood/tracks, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/plating, +/area/station/maintenance/department/engine) +"apQ" = ( +/turf/closed/wall, +/area/station/service/library) +"apW" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/spawner/random/structure/closet_empty/crate, +/obj/item/stock_parts/power_store/cell, +/obj/structure/broken_flooring, +/obj/machinery/airalarm/directional/north, +/turf/open/floor/plating, +/area/station/cargo/warehouse) +"aqa" = ( +/obj/structure/railing, +/obj/machinery/door/firedoor/border_only, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/iron/white, +/area/station/science/research) +"aqh" = ( +/obj/machinery/shower/directional/west, +/obj/effect/turf_decal{ + icon = 'icons/obj/mining_zones/survival_pod.dmi'; + icon_state = "fan_tiny" + }, +/turf/open/floor/iron/white/textured_large, +/area/station/medical/treatment_center) +"aqr" = ( +/obj/machinery/door/airlock/research/glass{ + name = "Robotics Lab" + }, +/obj/effect/mapping_helpers/airlock/access/all/science/robotics, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/turf/open/floor/iron, +/area/station/science/robotics/lab) +"aqu" = ( +/obj/machinery/light/directional/east, +/obj/structure/railing/corner{ + dir = 1 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/engineering/lobby) +"aqw" = ( +/obj/structure/table/wood/fancy/orange, +/obj/effect/spawner/random/contraband/qm_rocket{ + pixel_x = -7 + }, +/obj/item/storage/fancy/cigarettes/cigars/cohiba{ + pixel_y = 7; + pixel_x = 12 + }, +/obj/item/lighter, +/turf/open/floor/carpet/red, +/area/station/command/heads_quarters/qm) +"aqG" = ( +/obj/structure/cable, +/obj/effect/turf_decal/siding/purple/corner, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/catwalk_floor/flat_white, +/area/station/science/xenobiology) +"aqM" = ( +/obj/effect/turf_decal/tile/purple/opposingcorners, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/science/auxlab/firing_range) +"aqR" = ( +/obj/structure/chair/stool/directional/east, +/obj/effect/landmark/start/assistant, +/turf/open/floor/wood, +/area/station/commons/lounge) +"aqT" = ( +/obj/structure/table/reinforced, +/obj/item/storage/toolbox/emergency, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/ai_monitored/turret_protected/aisat/foyer) +"arl" = ( +/obj/machinery/atmospherics/pipe/multiz/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/multiz/scrubbers/visible/layer2, +/turf/open/floor/plating, +/area/station/maintenance/port/lesser) +"arr" = ( +/turf/open/floor/iron/dark, +/area/station/engineering/gravity_generator) +"arB" = ( +/obj/machinery/atmospherics/components/binary/pump{ + dir = 8; + name = "Port To Distro Staging" + }, +/obj/effect/turf_decal/tile/yellow{ + dir = 8 + }, +/turf/open/floor/iron/dark/corner{ + dir = 1 + }, +/area/station/engineering/atmos) +"arS" = ( +/obj/structure/lattice/catwalk, +/obj/structure/railing{ + dir = 1 + }, +/obj/item/radio/intercom/directional/west, +/turf/open/openspace, +/area/station/science/xenobiology) +"asb" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/spawner/random/structure/closet_empty/crate, +/obj/effect/spawner/random/maintenance, +/obj/structure/sign/poster/random/directional/south, +/turf/open/floor/iron, +/area/station/cargo/warehouse) +"asl" = ( +/obj/structure/window/reinforced/spawner/directional/south, +/turf/open/floor/engine, +/area/station/science/xenobiology) +"asn" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/dark/visible, +/turf/open/floor/iron/dark/smooth_edge{ + dir = 1 + }, +/area/station/science/xenobiology) +"aso" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/exit/departure_lounge) +"asp" = ( +/obj/machinery/atmospherics/components/unary/outlet_injector/monitored/incinerator_input{ + dir = 8 + }, +/turf/open/floor/engine/airless, +/area/station/maintenance/disposal/incinerator) +"asr" = ( +/obj/machinery/medical_kiosk{ + pixel_x = -2 + }, +/obj/effect/turf_decal/tile/blue/fourcorners, +/turf/open/floor/iron/white, +/area/station/medical/treatment_center) +"asz" = ( +/obj/effect/turf_decal/trimline/blue/filled/line, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) +"asZ" = ( +/turf/open/floor/glass/airless, +/area/space/nearstation) +"ata" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 1 + }, +/obj/structure/closet/firecloset, +/turf/open/floor/iron/white, +/area/station/hallway/secondary/entry) +"atb" = ( +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 1 + }, +/obj/effect/turf_decal/box/red, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/science/ordnance) +"ath" = ( +/obj/machinery/door/window/left/directional/west, +/turf/open/floor/grass, +/area/station/service/hydroponics/garden) +"atl" = ( +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/iron/freezer, +/area/station/maintenance/department/medical/central) +"atw" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/turf/open/floor/plating, +/area/station/maintenance/department/medical) +"atB" = ( +/obj/structure/rack, +/obj/effect/spawner/random/maintenance/two, +/turf/open/misc/asteroid, +/area/station/asteroid) +"atK" = ( +/obj/machinery/light/small/directional/south, +/turf/open/floor/plating, +/area/station/maintenance/aft/upper) +"atX" = ( +/obj/effect/spawner/random/structure/closet_maintenance, +/turf/open/floor/plating, +/area/station/maintenance/central/lesser) +"aub" = ( +/obj/structure/fans/tiny, +/obj/machinery/door/poddoor/massdriver_ordnance, +/turf/open/floor/engine, +/area/station/science/ordnance/testlab) +"auj" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"aum" = ( +/obj/effect/turf_decal/tile/red/half/contrasted, +/obj/item/radio/intercom/directional/south, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/security/armory) +"auo" = ( +/obj/structure/table, +/obj/item/cultivator, +/obj/item/hatchet, +/obj/item/paper/guides/jobs/hydroponics, +/obj/effect/spawner/random/entertainment/coin{ + spawn_random_offset = 4; + spawn_loot_count = 2 + }, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/iron/textured_large, +/area/station/service/hydroponics/garden) +"auA" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/simple/green/hidden{ + dir = 5 + }, +/turf/open/floor/iron/dark, +/area/station/science/ordnance) +"auB" = ( +/turf/open/floor/engine, +/area/station/medical/chemistry) +"auD" = ( +/obj/machinery/atmospherics/pipe/heat_exchanging/simple, +/turf/open/space/basic, +/area/space/nearstation) +"auE" = ( +/obj/item/stack/sheet/cardboard, +/obj/effect/decal/cleanable/cobweb, +/obj/effect/spawner/random/maintenance, +/obj/effect/spawner/random/engineering/flashlight, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron, +/area/station/maintenance/department/medical/central) +"auM" = ( +/obj/machinery/flasher/directional/west{ + id = "hopflash" + }, +/obj/effect/turf_decal/tile/dark_blue/anticorner/contrasted{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/hallway/secondary/command) +"auW" = ( +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/security/prison) +"ava" = ( +/obj/structure/table/reinforced, +/obj/structure/window/reinforced/spawner/directional/east, +/obj/machinery/button/door{ + normaldoorcontrol = 1; + specialfunctions = 4; + id = "secentrylock2"; + req_access = list("security"); + name = "Security Exit Lock"; + pixel_x = -7 + }, +/obj/machinery/button/door{ + normaldoorcontrol = 1; + specialfunctions = 4; + id = "secentrylock"; + pixel_y = 7; + req_access = list("security"); + name = "Security Entrance Lock"; + pixel_x = -7 + }, +/obj/machinery/button/flasher{ + pixel_x = 2; + id = "secentry" + }, +/obj/machinery/button/door{ + pixel_x = 2; + pixel_y = 7; + name = "Security Entrance Doors"; + id = "secentrylock"; + normaldoorcontrol = 1 + }, +/turf/open/floor/iron, +/area/station/security/brig/entrance) +"avu" = ( +/obj/effect/turf_decal/siding/white/corner{ + dir = 8 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/iron/herringbone, +/area/station/hallway/primary/central) +"avx" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, +/obj/effect/turf_decal/stripes{ + dir = 4 + }, +/obj/machinery/light/directional/east, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"avA" = ( +/obj/structure/chair/office, +/turf/open/floor/iron/white/textured_large, +/area/station/science/xenobiology) +"avC" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/medical/morgue) +"avL" = ( +/obj/machinery/light/small/dim/directional/north, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"avQ" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/components/unary/passive_vent/layer2{ + dir = 8 + }, +/turf/open/openspace/airless, +/area/station/asteroid) +"avU" = ( +/obj/effect/turf_decal/trimline/blue/arrow_ccw{ + dir = 9 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/white, +/area/station/medical/medbay/lobby) +"avW" = ( +/obj/machinery/duct, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/obj/machinery/light/directional/west, +/turf/open/floor/iron/freezer, +/area/station/commons/toilet/restrooms) +"awb" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron/white/herringbone, +/area/station/science/breakroom) +"awd" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/security/prison) +"awi" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"awj" = ( +/obj/effect/landmark/start/medical_doctor, +/turf/open/floor/iron/white, +/area/station/medical/treatment_center) +"awq" = ( +/obj/structure/sign/chalkboard_menu, +/turf/closed/wall, +/area/station/service/cafeteria) +"awB" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/structure/table, +/obj/effect/spawner/random/engineering/toolbox, +/obj/machinery/newscaster/directional/west, +/obj/structure/sign/poster/official/random/directional/north, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/command/storage/satellite) +"awC" = ( +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/plating, +/area/station/science/xenobiology) +"awF" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/obj/machinery/navbeacon{ + codes_txt = "patrol;next_patrol=P4-Central-Primary"; + location = "P3-Central-Primary" + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"awM" = ( +/obj/machinery/power/smes, +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light_switch/directional/west, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) +"awW" = ( +/obj/effect/decal/cleanable/glass, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/commons/vacant_room/commissary) +"axa" = ( +/turf/open/floor/iron/stairs/left{ + dir = 8 + }, +/area/station/service/theater) +"axi" = ( +/obj/effect/turf_decal/tile/neutral, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/extinguisher_cabinet/directional/south, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"axk" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/window/brigdoor/left/directional/north{ + name = "Warden Requisition Desk"; + req_access = list("armory") + }, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 1 + }, +/obj/machinery/door/window/right/directional/south, +/turf/open/floor/iron, +/area/station/security/warden) +"axt" = ( +/obj/structure/lattice/catwalk, +/obj/item/clothing/glasses/nightmare_vision, +/turf/open/space/basic, +/area/space/nearstation) +"axv" = ( +/obj/structure/lattice/catwalk, +/obj/structure/railing/corner, +/obj/structure/cable/layer3, +/turf/open/openspace, +/area/station/engineering/atmos) +"axB" = ( +/obj/machinery/door/window/brigdoor/right/directional/east{ + req_access = list("xenobiology") + }, +/obj/machinery/door/window/brigdoor/right/directional/west{ + req_access = list("xenobiology") + }, +/obj/effect/turf_decal/caution/stand_clear{ + dir = 4 + }, +/turf/open/floor/engine, +/area/station/science/xenobiology) +"axD" = ( +/turf/closed/wall/r_wall, +/area/station/command/heads_quarters/captain/private) +"axI" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/item/radio/intercom/directional/east, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"axQ" = ( +/obj/effect/turf_decal/stripes, +/obj/machinery/atmospherics/components/binary/valve/digital/on{ + dir = 4; + name = "Mix Bypass" + }, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"axV" = ( +/obj/structure/rack, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/department/science) +"ayf" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/visible, +/turf/open/floor/iron, +/area/station/engineering/atmos) +"ayw" = ( +/obj/structure/table/wood/poker, +/obj/effect/spawner/random/entertainment/deck, +/turf/open/misc/asteroid, +/area/station/maintenance/central/greater) +"ayx" = ( +/obj/effect/turf_decal/tile/neutral/diagonal_centre, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/service/chapel/funeral) +"ayy" = ( +/obj/structure/chair/office{ + dir = 1 + }, +/obj/item/radio/intercom/directional/west, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/engineering/gravity_generator) +"ayA" = ( +/obj/structure/filingcabinet, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/bot_white, +/obj/item/folder/documents, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/command/nuke_storage) +"ayC" = ( +/obj/machinery/light/directional/west, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/freezer, +/area/station/security/prison/shower) +"ayE" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/machinery/door/airlock/public/glass{ + name = "Service" + }, +/obj/machinery/door/firedoor, +/turf/open/floor/wood, +/area/station/service/bar) +"ayG" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/cargo/storage) +"aza" = ( +/obj/effect/spawner/random/trash/janitor_supplies, +/turf/open/misc/asteroid/airless, +/area/station/asteroid) +"azb" = ( +/obj/effect/turf_decal/tile/red/half/contrasted, +/obj/machinery/camera/autoname/directional/south, +/turf/open/floor/iron, +/area/station/security) +"aze" = ( +/obj/machinery/disposal/delivery_chute{ + dir = 4; + name = "mail chute" + }, +/obj/structure/window/spawner/directional/south, +/obj/machinery/conveyor{ + dir = 8; + id = "sorter" + }, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/turf/open/floor/iron/textured_large, +/area/station/cargo/sorting) +"azg" = ( +/turf/closed/wall, +/area/station/service/chapel/funeral) +"azk" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/misc/asteroid, +/area/station/asteroid) +"azs" = ( +/obj/effect/turf_decal/tile/yellow{ + dir = 8 + }, +/obj/effect/turf_decal/tile/yellow{ + dir = 4 + }, +/obj/machinery/light_switch/directional/south, +/turf/open/floor/iron/dark/corner, +/area/station/engineering/atmos) +"azt" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/turf/open/floor/engine, +/area/station/command/corporate_dock) +"azu" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/closet/crate, +/obj/item/wrench, +/turf/open/floor/plating, +/area/station/maintenance/department/engine) +"azv" = ( +/turf/closed/wall/r_wall, +/area/station/science/robotics/lab) +"azx" = ( +/obj/machinery/portable_atmospherics/canister/air, +/turf/open/floor/engine/air, +/area/station/engineering/atmos) +"azB" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/item/radio/intercom/directional/north, +/turf/open/floor/iron, +/area/station/service/cafeteria) +"azK" = ( +/obj/machinery/light/directional/north, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/engineering/gravity_generator) +"azQ" = ( +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/turf/open/floor/iron, +/area/station/engineering/storage) +"azV" = ( +/obj/machinery/door/airlock/maintenance_hatch, +/obj/structure/cable, +/obj/effect/mapping_helpers/airlock/access/all/service/hydroponics, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/service/hydroponics) +"aAg" = ( +/obj/effect/landmark/event_spawn, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/iron/kitchen_coldroom/freezerfloor, +/area/station/service/kitchen) +"aAk" = ( +/obj/machinery/holopad, +/obj/effect/turf_decal/box, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/aisat/foyer) +"aAl" = ( +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 1 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/obj/machinery/light/directional/north, +/turf/open/floor/iron, +/area/station/cargo/storage) +"aAn" = ( +/obj/structure/railing/corner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/blue/filled/corner{ + dir = 1 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) +"aBb" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 1 + }, +/obj/machinery/light/cold/directional/north, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/obj/effect/turf_decal/trimline/blue/filled/mid_joiner{ + dir = 1 + }, +/turf/open/floor/iron/white/smooth_large, +/area/station/medical/medbay/central) +"aBy" = ( +/obj/effect/turf_decal/tile/dark_blue/half/contrasted{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/hallway/secondary/command) +"aBU" = ( +/obj/item/radio/intercom/directional/east, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark/side{ + dir = 4 + }, +/area/station/command/emergency_closet) +"aBY" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/junction/flip{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"aCb" = ( +/obj/structure/lattice/catwalk, +/obj/structure/railing{ + dir = 4 + }, +/turf/open/openspace, +/area/station/security/prison/shower) +"aCp" = ( +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 1 + }, +/obj/machinery/light/directional/north, +/obj/machinery/computer/security, +/turf/open/floor/iron, +/area/station/security/office) +"aCr" = ( +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/medical/maintenance, +/obj/effect/turf_decal/siding/wideplating{ + dir = 1 + }, +/obj/effect/mapping_helpers/airlock/abandoned, +/turf/open/floor/iron/freezer, +/area/station/maintenance/department/medical/central) +"aCs" = ( +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/cargo/lobby) +"aCv" = ( +/turf/closed/wall/r_wall, +/area/station/science/breakroom) +"aCx" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/sand/plating, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"aCB" = ( +/obj/structure/closet/wardrobe/orange, +/obj/effect/turf_decal/tile/red/anticorner/contrasted{ + dir = 1 + }, +/obj/machinery/camera/autoname/directional/west, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/security/brig) +"aCL" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/maintenance/port/greater) +"aCP" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/machinery/power/apc/auto_name/directional/west, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/turf/open/floor/wood, +/area/station/service/library) +"aDd" = ( +/obj/structure/stairs/north, +/obj/structure/railing{ + dir = 8 + }, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"aDk" = ( +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/wood, +/area/station/command/heads_quarters/qm) +"aDm" = ( +/obj/machinery/computer/mech_bay_power_console{ + dir = 1 + }, +/turf/open/floor/circuit/green, +/area/station/science/robotics/mechbay) +"aDE" = ( +/obj/structure/sign/departments/holy/directional/east, +/obj/effect/turf_decal/tile/neutral, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"aDF" = ( +/obj/structure/broken_flooring/singular/directional/east, +/turf/open/space/openspace, +/area/space/nearstation) +"aDI" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/camera/autoname/directional/west{ + network = list("ss13","medbay") + }, +/turf/open/floor/iron/dark, +/area/station/medical/chemistry/minisat) +"aDJ" = ( +/obj/machinery/shower/directional/south{ + name = "emergency shower" + }, +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/trimline/dark_blue/end, +/turf/open/floor/iron/textured, +/area/station/engineering/atmos) +"aDW" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/plastic, +/obj/effect/spawner/random/structure/closet_empty/crate, +/turf/open/floor/iron, +/area/station/cargo/warehouse/upper) +"aEh" = ( +/obj/structure/table/wood, +/obj/item/paper_bin{ + pixel_x = -3; + pixel_y = 7 + }, +/obj/effect/spawner/random/bureaucracy/pen, +/obj/structure/window/spawner/directional/south, +/turf/open/floor/wood/parquet, +/area/station/service/library) +"aEj" = ( +/obj/machinery/door/poddoor/shutters/window/preopen{ + name = "Security Shutters"; + id = "xbprotect3"; + dir = 8 + }, +/obj/effect/turf_decal/caution/stand_clear{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/turf/open/floor/iron/dark/textured_large, +/area/station/science/xenobiology) +"aEr" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/obj/effect/turf_decal/tile/yellow/half/contrasted, +/turf/open/floor/iron, +/area/station/construction/mining/aux_base) +"aED" = ( +/obj/effect/turf_decal/stripes{ + dir = 1 + }, +/obj/machinery/computer/quantum_console{ + dir = 1 + }, +/turf/open/floor/circuit, +/area/station/cargo/bitrunning/den) +"aEP" = ( +/obj/effect/mapping_helpers/airlock/access/all/command/captain, +/obj/machinery/door/airlock/command{ + name = "Captain's Quarters" + }, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/carpet/royalblue, +/area/station/command/heads_quarters/captain/private) +"aEY" = ( +/obj/structure/cable, +/obj/effect/turf_decal/siding/wood, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/wood/tile, +/area/station/service/bar) +"aFp" = ( +/obj/machinery/light/directional/south, +/obj/structure/dresser, +/obj/item/food/pie/cream{ + pixel_y = 12 + }, +/turf/open/floor/carpet/orange, +/area/station/service/theater) +"aFw" = ( +/obj/effect/turf_decal/tile/blue/opposingcorners{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/door/firedoor, +/turf/open/floor/iron/cafeteria, +/area/station/commons/locker) +"aFz" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/public/glass{ + name = "Holodeck Door" + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "holodeck" + }, +/turf/open/floor/iron, +/area/station/commons/fitness/recreation) +"aFD" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 8 + }, +/obj/effect/landmark/start/station_engineer, +/obj/structure/chair/office{ + dir = 8 + }, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/engineering/lobby) +"aFJ" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/machinery/firealarm/directional/north, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"aFL" = ( +/obj/structure/lattice, +/obj/machinery/camera/autoname/directional/west, +/turf/open/openspace, +/area/station/hallway/secondary/exit/departure_lounge) +"aGa" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/sorting/mail/flip{ + dir = 2 + }, +/obj/effect/mapping_helpers/mail_sorting/service/law_office, +/turf/open/floor/iron, +/area/station/hallway/primary/fore) +"aGm" = ( +/obj/structure/railing/corner{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/security/prison) +"aGu" = ( +/obj/machinery/door/poddoor/massdriver_trash, +/obj/effect/turf_decal/tile/yellow/opposingcorners, +/obj/effect/turf_decal/stripes/end{ + dir = 4 + }, +/turf/open/floor/engine, +/area/station/maintenance/disposal) +"aGz" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/obj/effect/turf_decal/stripes/corner, +/obj/machinery/light/small/dim/directional/west, +/turf/open/floor/engine, +/area/station/command/heads_quarters/captain/private) +"aGA" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/wood, +/area/station/commons/lounge) +"aGC" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/engineering/supermatter/room) +"aGL" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/siding/white{ + dir = 8 + }, +/turf/open/floor/iron/herringbone, +/area/station/commons/fitness/recreation) +"aGQ" = ( +/obj/machinery/disposal/bin, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 + }, +/obj/machinery/camera/autoname/directional/east, +/obj/structure/disposalpipe/trunk, +/turf/open/floor/iron, +/area/station/engineering/lobby) +"aHc" = ( +/obj/machinery/door/poddoor/lift{ + transport_linked_id = "cargo" + }, +/obj/effect/turf_decal/stripes{ + dir = 8 + }, +/obj/effect/turf_decal/stripes{ + dir = 4 + }, +/obj/machinery/door/firedoor, +/turf/open/floor/iron/dark/textured_half{ + dir = 1 + }, +/area/station/cargo/storage) +"aHe" = ( +/obj/structure/closet/crate/science, +/obj/effect/spawner/random/maintenance/four, +/turf/open/misc/asteroid, +/area/station/asteroid) +"aHh" = ( +/turf/open/floor/iron, +/area/station/cargo/lobby) +"aHl" = ( +/obj/effect/turf_decal/tile/blue/half/contrasted{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/security/courtroom) +"aHp" = ( +/obj/machinery/light/directional/west, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"aHs" = ( +/obj/structure/window/reinforced/spawner/directional/north, +/obj/effect/spawner/random/vending/snackvend, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/dark, +/area/station/command/bridge) +"aHt" = ( +/obj/effect/turf_decal/siding/purple, +/turf/open/floor/iron/white/herringbone, +/area/station/science/breakroom) +"aHx" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/maintenance/department/bridge) +"aHM" = ( +/obj/structure/railing/corner, +/turf/open/floor/iron, +/area/station/security/prison) +"aIc" = ( +/obj/structure/table, +/obj/effect/spawner/random/bureaucracy/paper, +/obj/effect/spawner/random/bureaucracy/stamp, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 1 + }, +/obj/machinery/newscaster/directional/north, +/turf/open/floor/iron/white, +/area/station/medical/exam_room) +"aIo" = ( +/obj/docking_port/stationary{ + dir = 2; + dwidth = 11; + height = 24; + name = "SS13: Auxiliary Dock, Station-Port"; + shuttle_id = "whiteship_home"; + width = 35 + }, +/turf/open/space/openspace, +/area/space) +"aIz" = ( +/obj/structure/closet/crate/coffin, +/obj/machinery/light/small/dim/directional/west, +/turf/open/floor/plating, +/area/station/service/chapel/funeral) +"aIB" = ( +/obj/structure/chair/stool/directional/west, +/turf/open/misc/asteroid, +/area/station/maintenance/central/greater) +"aIR" = ( +/obj/effect/spawner/structure/electrified_grille, +/turf/open/floor/plating, +/area/station/security/execution/education) +"aIU" = ( +/obj/effect/turf_decal/tile/brown{ + dir = 8 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/junction/flip{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/cargo/storage) +"aIX" = ( +/obj/structure/chair/office/light{ + dir = 1 + }, +/obj/effect/landmark/start/scientist, +/turf/open/floor/iron/dark/small, +/area/station/science/cytology) +"aJa" = ( +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/turf/open/floor/iron/dark, +/area/station/security/lockers) +"aJr" = ( +/obj/structure/bed/medical/emergency, +/obj/machinery/iv_drip, +/obj/effect/turf_decal/tile/blue/half/contrasted, +/obj/effect/decal/cleanable/blood/old, +/obj/structure/cable, +/obj/structure/disposalpipe/sorting/mail/flip{ + dir = 4 + }, +/obj/effect/mapping_helpers/mail_sorting/security/hos_office, +/turf/open/floor/iron/white, +/area/station/security/medical) +"aJv" = ( +/obj/structure/reagent_dispensers/cooking_oil, +/obj/machinery/camera/autoname/directional/south, +/turf/open/floor/iron/kitchen_coldroom/freezerfloor, +/area/station/service/kitchen) +"aJz" = ( +/obj/structure/railing, +/obj/structure/table, +/obj/item/plate, +/obj/item/food/spaghetti/mac_n_cheese{ + pixel_y = 3 + }, +/obj/item/flashlight/flare/candle{ + start_on = 1; + icon_state = "candle1_lit"; + pixel_x = 12 + }, +/turf/open/floor/plating, +/area/station/engineering/main) +"aJA" = ( +/obj/machinery/door/window/brigdoor/right/directional/east{ + req_access = list("xenobiology") + }, +/mob/living/basic/slime, +/turf/open/floor/engine, +/area/station/science/xenobiology) +"aJL" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/commons/fitness/recreation) +"aJM" = ( +/obj/machinery/light/small/directional/north, +/obj/item/surgery_tray/full/morgue{ + is_portable = 0 + }, +/turf/open/floor/iron/dark/textured, +/area/station/medical/morgue) +"aJP" = ( +/obj/machinery/door/airlock/external/glass{ + name = "Mining Dock Airlock" + }, +/obj/effect/turf_decal/stripes/end{ + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 8 + }, +/obj/effect/mapping_helpers/airlock/access/all/supply/mining, +/turf/open/floor/iron, +/area/station/cargo/miningoffice) +"aJX" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/machinery/vending/cigarette, +/turf/open/floor/iron, +/area/station/commons/fitness/recreation) +"aKd" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/wood/parquet, +/area/station/cargo/boutique) +"aKg" = ( +/obj/effect/turf_decal/tile/neutral, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/command/heads_quarters/hop) +"aKi" = ( +/obj/machinery/door/airlock/engineering{ + name = "Relay Access" + }, +/obj/structure/cable, +/obj/effect/mapping_helpers/airlock/access/all/command/minisat, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/ai_monitored/turret_protected/aisat/uppersouth) +"aKj" = ( +/obj/machinery/computer/station_alert{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/yellow/filled/line, +/turf/open/floor/iron, +/area/station/command/heads_quarters/ce) +"aKl" = ( +/obj/structure/chair, +/obj/machinery/airalarm/directional/north, +/turf/open/floor/iron/dark/side{ + dir = 5 + }, +/area/station/maintenance/radshelter/medical) +"aKA" = ( +/obj/structure/stairs/south, +/obj/structure/railing{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/engineering/atmos) +"aKB" = ( +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"aKJ" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/structure/sign/directions/engineering/directional/east{ + pixel_y = -8 + }, +/obj/structure/sign/directions/security/directional/east{ + pixel_y = 8; + dir = 1 + }, +/obj/structure/sign/directions/supply/directional/east{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"aKP" = ( +/obj/structure/cable, +/turf/open/floor/iron/half, +/area/station/service/hydroponics/garden) +"aKS" = ( +/obj/machinery/light/small/dim/directional/north, +/obj/item/storage/box, +/obj/structure/rack, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"aLe" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/door/firedoor/border_only, +/turf/open/floor/iron/white/textured, +/area/station/science/genetics) +"aLE" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/item/radio/intercom/directional/south, +/turf/open/floor/iron, +/area/station/cargo/warehouse/upper) +"aLH" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/turf/open/floor/plating, +/area/station/maintenance/port/lesser) +"aLK" = ( +/obj/structure/railing{ + dir = 5 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/turf/open/floor/glass, +/area/station/command/meeting_room) +"aLN" = ( +/turf/open/floor/plating, +/area/station/hallway/secondary/entry) +"aMa" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/machinery/airalarm/directional/north, +/turf/open/floor/iron/dark, +/area/station/security/prison/safe) +"aMx" = ( +/obj/structure/cable, +/obj/machinery/camera/autoname/motion/directional/south{ + network = list("minisat") + }, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/structure/cable/layer3, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/rack, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/spawner/random/maintenance/no_decals/three, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/command/storage/satellite) +"aME" = ( +/obj/structure/cable/multilayer/multiz, +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"aMF" = ( +/obj/structure/stairs/north, +/obj/structure/railing{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/command/corporate_showroom) +"aMG" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/science/ordnance) +"aMH" = ( +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 1 + }, +/obj/machinery/newscaster/directional/north, +/turf/open/floor/iron, +/area/station/cargo/storage) +"aML" = ( +/obj/structure/bookcase/random/adult, +/turf/open/floor/wood, +/area/station/service/library) +"aMR" = ( +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/wood, +/area/station/commons/lounge) +"aMS" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/dark, +/area/station/science/ordnance) +"aMU" = ( +/obj/structure/window/reinforced/spawner/directional/west, +/obj/structure/flora/bush/fullgrass/style_random, +/turf/open/floor/grass, +/area/station/science/research) +"aNe" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron/white, +/area/station/medical/storage) +"aNv" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/siding/purple{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/white, +/area/station/science/research) +"aNF" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/catwalk_floor/flat_white, +/area/station/science/lab) +"aNH" = ( +/obj/machinery/door/airlock/security/glass{ + name = "Security Entry"; + id_tag = "secentrylock2" + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "brig-entrance" + }, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 1 + }, +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/access/all/security/entrance, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/security/brig/entrance) +"aNR" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/white, +/area/station/medical/storage) +"aNV" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/status_display/evac/directional/west, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"aOb" = ( +/obj/machinery/light/directional/south, +/obj/structure/cable, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 6 + }, +/turf/open/floor/iron, +/area/station/engineering/lobby) +"aOi" = ( +/obj/machinery/light/small/directional/south, +/turf/open/floor/plating, +/area/station/cargo/storage) +"aOm" = ( +/turf/closed/wall/r_wall, +/area/station/medical/morgue) +"aOp" = ( +/obj/structure/lattice/catwalk, +/obj/structure/railing{ + dir = 6 + }, +/turf/open/openspace, +/area/station/security/prison) +"aOJ" = ( +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/cargo/lobby) +"aOK" = ( +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 1 + }, +/obj/machinery/light/directional/north, +/obj/effect/turf_decal/delivery, +/turf/open/floor/iron, +/area/station/security/brig/entrance) +"aOQ" = ( +/turf/closed/wall/r_wall/rust, +/area/station/ai_monitored/turret_protected/ai_upload_foyer) +"aOY" = ( +/obj/structure/chair/stool/bar/directional/north, +/obj/effect/turf_decal/siding/wood, +/obj/effect/turf_decal/tile/bar/opposingcorners, +/obj/structure/disposalpipe/sorting/mail{ + dir = 8 + }, +/obj/effect/mapping_helpers/mail_sorting/service/kitchen, +/turf/open/floor/iron, +/area/station/commons/lounge) +"aPt" = ( +/obj/machinery/camera/directional/south{ + c_tag = "Atmospherics Tank - Oxygen" + }, +/turf/open/floor/engine/o2, +/area/station/engineering/atmos) +"aPw" = ( +/obj/structure/railing/corner, +/obj/machinery/light/directional/east, +/turf/open/floor/iron, +/area/station/hallway/secondary/exit/departure_lounge) +"aPz" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/door/airlock/hatch{ + name = "MiniSat Access" + }, +/obj/effect/mapping_helpers/airlock/access/all/command/minisat, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/aisat/foyer) +"aPC" = ( +/obj/effect/spawner/structure/window/plasma, +/turf/open/floor/engine, +/area/station/medical/chemistry) +"aPG" = ( +/obj/machinery/door/poddoor/shutters/window/preopen{ + id = "ordstorage" + }, +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/caution/stand_clear/red, +/obj/structure/cable, +/turf/open/floor/iron/white, +/area/station/science/ordnance/storage) +"aPI" = ( +/obj/machinery/meter, +/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible{ + dir = 8 + }, +/turf/closed/wall/r_wall, +/area/station/engineering/atmos) +"aPJ" = ( +/obj/machinery/door_buttons/access_button{ + idDoor = "xeno_airlock_interior"; + idSelf = "xeno_airlock_control"; + name = "Access Button"; + pixel_x = 29; + pixel_y = -8; + req_access = list("xenobiology") + }, +/obj/structure/cable, +/obj/machinery/shower/directional/south, +/obj/effect/turf_decal{ + icon = 'icons/obj/mining_zones/survival_pod.dmi'; + icon_state = "fan_tiny" + }, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/iron/white/textured_large, +/area/station/science/xenobiology) +"aPM" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, +/obj/effect/mapping_helpers/airlock/abandoned, +/obj/effect/decal/cleanable/blood/old, +/turf/open/floor/plating, +/area/station/maintenance/central/greater) +"aPO" = ( +/obj/machinery/door/poddoor/shutters/window{ + id = "maintbridge" + }, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"aPR" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 1 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/medical/treatment_center) +"aQm" = ( +/obj/machinery/light/small/directional/south, +/turf/open/floor/plating, +/area/station/maintenance/department/science) +"aQo" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/engineering/supermatter/room) +"aQD" = ( +/obj/item/toy/plush/lizard_plushie/green{ + name = "ashwalker" + }, +/turf/open/floor/fakebasalt, +/area/station/maintenance/department/medical) +"aQL" = ( +/turf/open/floor/engine{ + name = "Holodeck Projector Floor" + }, +/area/station/holodeck/rec_center) +"aQS" = ( +/obj/effect/turf_decal/tile/neutral, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"aRf" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/maintenance/port/lesser) +"aRn" = ( +/obj/effect/turf_decal/sand/plating, +/obj/structure/girder, +/turf/open/floor/plating, +/area/station/asteroid) +"aRs" = ( +/obj/machinery/camera/autoname/directional/south, +/turf/open/floor/iron/dark, +/area/station/engineering/gravity_generator) +"aRt" = ( +/obj/structure/chair/pew/left{ + dir = 4 + }, +/turf/open/floor/iron/chapel{ + dir = 4 + }, +/area/station/service/chapel) +"aRE" = ( +/obj/structure/cable, +/turf/open/floor/iron/white, +/area/station/medical/treatment_center) +"aRM" = ( +/obj/structure/closet/secure_closet/detective, +/obj/machinery/button/door/directional/north{ + id = "detective_shutters"; + name = "detective's office shutters control"; + req_access = list("detective") + }, +/obj/item/book/manual/wiki/security_space_law, +/obj/item/storage/briefcase, +/obj/item/flashlight/seclite, +/obj/machinery/light_switch/directional/east, +/turf/open/floor/carpet, +/area/station/security/detectives_office) +"aRN" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/medical/virology) +"aRW" = ( +/obj/structure/cable, +/obj/effect/turf_decal/tile/neutral, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"aRZ" = ( +/obj/effect/turf_decal/stripes/red/line, +/obj/machinery/airalarm/directional/south, +/turf/open/floor/iron/dark, +/area/station/medical/morgue) +"aSd" = ( +/obj/machinery/light/warm/directional/east, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/wood/parquet, +/area/station/service/theater) +"aSn" = ( +/obj/machinery/atmospherics/components/trinary/filter/atmos/flipped/co2, +/obj/effect/turf_decal/tile/blue/fourcorners, +/turf/open/floor/catwalk_floor/flat_white, +/area/station/medical/treatment_center) +"aSE" = ( +/obj/structure/bodycontainer/morgue{ + dir = 2 + }, +/obj/machinery/airalarm/directional/west, +/turf/open/floor/iron/dark, +/area/station/service/chapel/office) +"aSG" = ( +/obj/machinery/computer/records/medical{ + dir = 1 + }, +/obj/effect/turf_decal/siding/wood, +/obj/machinery/camera/autoname/directional/east, +/turf/open/floor/carpet, +/area/station/security/detectives_office) +"aSK" = ( +/obj/effect/turf_decal/tile/red/half/contrasted, +/obj/structure/disposalpipe/sorting/mail/flip{ + dir = 1 + }, +/obj/effect/mapping_helpers/mail_sorting/security/general, +/turf/open/floor/iron, +/area/station/security/office) +"aSM" = ( +/obj/machinery/porta_turret/ai{ + dir = 4 + }, +/obj/machinery/camera/autoname/directional/east, +/turf/open/floor/circuit, +/area/station/ai_monitored/turret_protected/ai_upload) +"aSS" = ( +/obj/machinery/airalarm/directional/south, +/obj/effect/turf_decal/tile/dark_green/opposingcorners, +/obj/effect/landmark/event_spawn, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/hallway/secondary/service) +"aSZ" = ( +/turf/closed/wall, +/area/station/hallway/primary/fore) +"aTd" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/reagent_dispensers/watertank, +/obj/machinery/camera/autoname/directional/south, +/turf/open/floor/iron, +/area/station/cargo/warehouse) +"aTi" = ( +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 1 + }, +/obj/effect/spawner/random/vending/snackvend, +/obj/structure/extinguisher_cabinet/directional/north, +/turf/open/floor/iron, +/area/station/security/office) +"aTr" = ( +/obj/effect/turf_decal/trimline/blue/filled/line, +/obj/structure/sign/departments/morgue/directional/south, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) +"aTv" = ( +/obj/machinery/door/poddoor{ + id = "Secure Storage"; + name = "Secure Storage" + }, +/obj/effect/turf_decal/delivery, +/turf/open/floor/plating, +/area/station/engineering/storage) +"aTE" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/table, +/obj/machinery/reagentgrinder, +/obj/structure/sign/poster/random/directional/west, +/turf/open/floor/iron/dark, +/area/station/medical/chemistry/minisat) +"aTJ" = ( +/obj/effect/mapping_helpers/burnt_floor, +/obj/effect/decal/cleanable/blood/old, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"aTM" = ( +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 8 + }, +/obj/structure/closet/emcloset, +/turf/open/floor/iron, +/area/station/cargo/storage) +"aTU" = ( +/obj/machinery/light/small/directional/north, +/obj/effect/turf_decal/siding, +/obj/item/kirbyplants/random, +/obj/machinery/light_switch/directional/east, +/turf/open/floor/iron/textured, +/area/station/science/lobby) +"aUf" = ( +/turf/closed/wall/r_wall/rust, +/area/station/medical/chemistry/minisat) +"aUl" = ( +/obj/structure/rack, +/obj/effect/spawner/random/decoration/paint, +/turf/open/floor/wood/parquet, +/area/station/cargo/boutique) +"aUo" = ( +/obj/structure/chair/sofa/bench/right{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/turf/open/floor/iron/dark, +/area/station/security/courtroom) +"aUx" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/components/unary/passive_vent{ + dir = 8 + }, +/turf/open/space/basic, +/area/space/nearstation) +"aUy" = ( +/obj/structure/railing{ + dir = 8 + }, +/turf/open/floor/iron/stairs/left, +/area/station/hallway/primary/central) +"aUB" = ( +/obj/structure/closet/wardrobe/black, +/obj/effect/landmark/start/hangover/closet, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/delivery, +/turf/open/floor/iron/dark, +/area/station/commons/locker) +"aUM" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/service/cafeteria) +"aVm" = ( +/obj/machinery/door/airlock/maintenance_hatch, +/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/port/lesser) +"aVp" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/chair/office{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/command/gateway) +"aVq" = ( +/obj/machinery/computer/scan_consolenew, +/obj/machinery/light_switch/directional/north, +/obj/effect/turf_decal/siding/purple, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/white/textured, +/area/station/science/genetics) +"aVY" = ( +/obj/item/flashlight/flare{ + icon_state = "flare-on"; + start_on = 1 + }, +/turf/open/misc/asteroid, +/area/station/maintenance/department/cargo) +"aVZ" = ( +/obj/machinery/computer/atmos_control/nitrogen_tank{ + dir = 8 + }, +/obj/effect/turf_decal/tile/yellow{ + dir = 4 + }, +/turf/open/floor/iron/dark/corner, +/area/station/engineering/atmos) +"aWi" = ( +/obj/structure/cable, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/engine, +/area/station/science/xenobiology) +"aWD" = ( +/turf/closed/wall/r_wall, +/area/station/engineering/main) +"aWF" = ( +/obj/structure/rack, +/turf/open/floor/plating, +/area/station/engineering/main) +"aWJ" = ( +/turf/open/misc/asteroid, +/area/station/maintenance/central/greater) +"aWM" = ( +/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/visible{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/science/ordnance) +"aXc" = ( +/obj/machinery/power/apc/auto_name/directional/south, +/obj/structure/cable, +/obj/effect/mapping_helpers/apc/cell_5k, +/obj/effect/mapping_helpers/apc/full_charge, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/catwalk_floor/flat_white, +/area/station/science/xenobiology) +"aXg" = ( +/obj/structure/railing{ + dir = 10 + }, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"aXl" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/science/server) +"aXt" = ( +/turf/open/floor/engine/n2o, +/area/station/engineering/atmos) +"aXz" = ( +/obj/structure/chair/sofa/bench/left, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + color = "#000000" + }, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/exit/departure_lounge) +"aXA" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/commons/vacant_room/commissary) +"aXD" = ( +/obj/machinery/door/airlock/maintenance/external, +/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, +/turf/open/misc/asteroid, +/area/station/maintenance/department/medical/central) +"aXH" = ( +/obj/machinery/light/small/directional/north, +/turf/open/misc/asteroid, +/area/station/asteroid) +"aYf" = ( +/turf/open/floor/plating, +/area/station/engineering/storage) +"aYj" = ( +/obj/structure/lattice/catwalk, +/obj/structure/railing{ + dir = 4 + }, +/turf/open/openspace, +/area/station/security/prison) +"aYu" = ( +/obj/structure/chair{ + dir = 1 + }, +/turf/open/floor/glass/reinforced, +/area/station/security/checkpoint/science) +"aYx" = ( +/obj/effect/spawner/random/structure/crate, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/iron, +/area/station/maintenance/department/medical/central) +"aYD" = ( +/obj/item/radio/intercom/directional/north, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/station/maintenance/radshelter/medical) +"aYQ" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/north, +/turf/open/floor/iron/dark, +/area/station/command/gateway) +"aYS" = ( +/obj/machinery/computer/scan_consolenew, +/obj/item/toy/figure/geneticist{ + pixel_y = 18 + }, +/turf/open/floor/iron/white/textured, +/area/station/science/genetics) +"aZg" = ( +/obj/effect/turf_decal/sand/plating, +/obj/effect/turf_decal/stripes/asteroid/line{ + dir = 8 + }, +/turf/open/floor/plating/airless, +/area/space/nearstation) +"aZk" = ( +/obj/structure/cable, +/obj/effect/turf_decal/tile/dark_green/opposingcorners, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/hallway/secondary/service) +"aZn" = ( +/obj/machinery/atmospherics/components/unary/outlet_injector/monitored/nitrous_input, +/turf/open/floor/engine/n2o, +/area/station/engineering/atmos) +"aZs" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/junction{ + dir = 2 + }, +/turf/open/floor/iron/white, +/area/station/science/research) +"aZt" = ( +/obj/structure/transport/linear/public{ + icon = 'icons/obj/smooth_structures/catwalk.dmi'; + base_icon_state = "catwalk"; + icon_state = "catwalk-6" + }, +/turf/open/floor/plating/elevatorshaft, +/area/station/cargo/storage) +"aZK" = ( +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/obj/effect/turf_decal/tile/green{ + dir = 4 + }, +/obj/machinery/duct, +/obj/machinery/light/directional/north, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/service/hydroponics) +"aZR" = ( +/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible, +/obj/effect/turf_decal/tile/yellow{ + dir = 8 + }, +/turf/open/floor/iron/dark/corner{ + dir = 1 + }, +/area/station/engineering/atmos) +"bag" = ( +/obj/effect/turf_decal/tile/yellow/half/contrasted, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/camera/autoname/directional/south, +/turf/open/floor/iron/textured, +/area/station/construction/mining/aux_base) +"ban" = ( +/obj/machinery/vending/hydroseeds{ + slogan_delay = 700 + }, +/turf/open/floor/iron, +/area/station/service/hydroponics) +"bay" = ( +/obj/effect/spawner/random/vending/colavend, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 9 + }, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/turf/open/floor/iron/white, +/area/station/medical/treatment_center) +"baH" = ( +/turf/closed/wall/r_wall, +/area/station/security/prison/safe) +"baO" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron/white, +/area/station/security/medical) +"baP" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark/textured_large, +/area/station/science/xenobiology) +"baW" = ( +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 8 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/security/office) +"baY" = ( +/obj/machinery/atmospherics/pipe/bridge_pipe/cyan/visible{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/simple/green/visible{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/engineering/atmos) +"bbe" = ( +/obj/machinery/airalarm/directional/west, +/turf/open/floor/engine, +/area/station/science/auxlab/firing_range) +"bbf" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 4; + id = "hopdesk" + }, +/obj/effect/landmark/navigate_destination/hop, +/obj/machinery/door/firedoor, +/obj/item/paper_bin, +/obj/item/pen, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/door/window/brigdoor/left/directional/west{ + req_access = list("hop") + }, +/obj/machinery/door/window/left/directional/east, +/turf/open/floor/iron, +/area/station/command/heads_quarters/hop) +"bbh" = ( +/obj/structure/extinguisher_cabinet/directional/west, +/obj/machinery/disposal/bin, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/commons/locker) +"bbq" = ( +/obj/docking_port/stationary/escape_pod{ + dir = 2 + }, +/turf/open/space/basic, +/area/space) +"bbx" = ( +/obj/structure/closet/secure_closet/security/engine, +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/engineering) +"bca" = ( +/obj/effect/turf_decal/tile/dark_red/opposingcorners, +/obj/effect/landmark/start/bartender, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/service/bar) +"bcg" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/white, +/area/station/medical/chemistry/minisat) +"bcj" = ( +/obj/structure/window/reinforced/spawner/directional/west, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + color = "#000000" + }, +/obj/effect/turf_decal/box, +/obj/machinery/byteforge, +/turf/open/floor/iron/dark/textured, +/area/station/cargo/bitrunning/den) +"bco" = ( +/turf/closed/wall/r_wall, +/area/station/maintenance/solars/port) +"bcr" = ( +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) +"bcu" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/maintenance/central/lesser) +"bcA" = ( +/obj/structure/plasticflaps/opaque, +/obj/machinery/navbeacon{ + codes_txt = "delivery;dir=4"; + location = "Engineering" + }, +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/maintenance/department/engine) +"bcX" = ( +/obj/machinery/duct, +/obj/structure/cable, +/obj/effect/turf_decal/tile/dark_green/opposingcorners, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/hallway/secondary/service) +"bdk" = ( +/obj/structure/table, +/obj/structure/bedsheetbin, +/obj/effect/turf_decal/tile/blue/opposingcorners{ + dir = 1 + }, +/turf/open/floor/iron/cafeteria, +/area/station/commons/locker) +"bdu" = ( +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"bdv" = ( +/obj/effect/turf_decal/trimline/blue/filled/corner, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/medical/treatment_center) +"bdz" = ( +/obj/structure/railing{ + dir = 4 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/science/research) +"bdC" = ( +/obj/machinery/door/airlock/highsecurity{ + name = "Secure Tech Storage" + }, +/obj/structure/cable, +/obj/effect/mapping_helpers/airlock/access/all/command/general, +/obj/effect/mapping_helpers/airlock/access/all/engineering/tech_storage, +/turf/open/floor/iron/dark/textured_half, +/area/station/engineering/storage/tech) +"bdG" = ( +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/obj/machinery/newscaster/directional/east, +/turf/open/floor/iron, +/area/station/hallway/primary/fore) +"bdR" = ( +/obj/structure/rack, +/obj/effect/spawner/random/techstorage/rnd_secure_all, +/turf/open/floor/circuit, +/area/station/engineering/storage/tech) +"bef" = ( +/obj/structure/railing/corner{ + dir = 8 + }, +/obj/item/trash/shrimp_chips, +/turf/open/floor/iron, +/area/station/hallway/secondary/exit/departure_lounge) +"bej" = ( +/obj/machinery/light/floor, +/turf/open/floor/iron/textured, +/area/station/command/heads_quarters/qm) +"beE" = ( +/obj/machinery/atmospherics/components/unary/portables_connector/visible, +/turf/open/floor/iron/dark/textured_large, +/area/station/science/xenobiology) +"beK" = ( +/obj/machinery/power/shieldwallgen, +/obj/structure/window/spawner/directional/east, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light/dim/directional/north, +/turf/open/floor/iron/dark/side{ + dir = 5 + }, +/area/station/command/emergency_closet) +"beN" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/delivery, +/obj/machinery/navbeacon{ + codes_txt = "delivery;dir=8"; + location = "QM #2" + }, +/mob/living/simple_animal/bot/mulebot, +/turf/open/floor/iron, +/area/station/cargo/warehouse) +"beO" = ( +/obj/machinery/light/small/broken/directional/south, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/obj/effect/landmark/generic_maintenance_landmark, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/iron, +/area/station/maintenance/department/medical/central) +"beR" = ( +/obj/machinery/door/airlock/grunge{ + name = "Morgue Office" + }, +/obj/effect/turf_decal/stripes/red/end{ + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/access/all/medical/morgue, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/mapping_helpers/airlock_note_placer{ + note_path = /obj/item/paper/guides/jobs/medical/morgue + }, +/turf/open/floor/iron/dark, +/area/station/medical/morgue) +"beS" = ( +/obj/machinery/button/elevator/directional/east{ + id = "cargo" + }, +/obj/machinery/lift_indicator/directional/east{ + linked_elevator_id = "cargo" + }, +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 4 + }, +/obj/machinery/rnd/production/techfab/department/cargo, +/turf/open/floor/iron, +/area/station/cargo/storage) +"beW" = ( +/turf/open/floor/engine/o2, +/area/station/engineering/atmos) +"bfc" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/maintenance/department/medical/central) +"bfe" = ( +/obj/machinery/vending/autodrobe, +/obj/machinery/firealarm/directional/east, +/turf/open/floor/wood/parquet, +/area/station/service/theater) +"bfl" = ( +/obj/structure/lattice/catwalk, +/obj/structure/marker_beacon/burgundy, +/turf/open/space/basic, +/area/station/solars/port/aft) +"bfp" = ( +/obj/effect/decal/cleanable/rubble, +/obj/effect/decal/cleanable/blood/tracks{ + dir = 4 + }, +/turf/open/misc/asteroid, +/area/station/maintenance/department/science) +"bfD" = ( +/obj/effect/landmark/event_spawn, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/iron/chapel{ + dir = 1 + }, +/area/station/service/chapel) +"bfN" = ( +/turf/open/floor/iron/dark, +/area/station/maintenance/radshelter/civil) +"bga" = ( +/obj/structure/chair/wood{ + dir = 4 + }, +/obj/machinery/light/small/directional/north, +/turf/open/floor/carpet, +/area/station/commons/dorms) +"bgm" = ( +/obj/effect/turf_decal/siding/purple{ + dir = 6 + }, +/obj/structure/table, +/turf/open/floor/iron/white/textured_large, +/area/station/science/research) +"bgp" = ( +/obj/structure/cable, +/turf/open/floor/plating/airless, +/area/station/solars/starboard/fore) +"bgv" = ( +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 8 + }, +/obj/machinery/conveyor/inverted{ + dir = 10; + id = "QMLoad2" + }, +/turf/open/floor/iron, +/area/station/cargo/storage) +"bgx" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/spawner/random/structure/steam_vent, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"bgU" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/turf/open/floor/iron, +/area/station/commons/locker) +"bgY" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/misc/asteroid, +/area/station/asteroid) +"bhk" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"bhv" = ( +/obj/structure/window/reinforced/plasma/spawner/directional/south, +/obj/machinery/power/energy_accumulator/tesla_coil/anchored, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, +/turf/open/floor/engine, +/area/station/engineering/supermatter) +"bhB" = ( +/obj/structure/cable, +/obj/machinery/door/airlock/engineering{ + name = "Aft Solar Access" + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/obj/effect/mapping_helpers/airlock/unres, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/maintenance/solars/port) +"bhD" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/preopen{ + id = "bridgespace" + }, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/command/bridge) +"bhL" = ( +/obj/effect/turf_decal/siding/dark, +/obj/machinery/door/firedoor/border_only, +/turf/open/floor/iron/dark/side{ + dir = 8 + }, +/area/station/command/corporate_showroom) +"bhS" = ( +/obj/structure/cable, +/obj/machinery/light/dim/directional/west, +/obj/effect/turf_decal/siding/purple/corner{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/science/robotics/mechbay) +"bhU" = ( +/obj/structure/cable, +/obj/machinery/holopad, +/turf/open/floor/iron/kitchen, +/area/station/service/kitchen) +"bhV" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment, +/obj/effect/spawner/random/structure/steam_vent, +/turf/open/floor/plating, +/area/station/maintenance/department/medical) +"bhY" = ( +/obj/machinery/computer/shuttle/labor{ + dir = 4 + }, +/obj/effect/turf_decal/tile/dark_blue/anticorner/contrasted{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/command/bridge) +"bhZ" = ( +/obj/effect/turf_decal/trimline/red/filled/end{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/obj/effect/landmark/start/depsec/medical, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/medical) +"biC" = ( +/obj/machinery/telecomms/broadcaster/preset_left, +/turf/open/floor/circuit/green/telecomms/mainframe, +/area/station/tcommsat/server) +"biG" = ( +/obj/effect/turf_decal/stripes{ + dir = 1 + }, +/obj/item/radio/intercom/directional/north, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"biS" = ( +/turf/closed/wall/r_wall/rust, +/area/station/ai_monitored/turret_protected/ai_upload) +"bjb" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/item/kirbyplants/random/dead, +/turf/open/floor/iron/white/small, +/area/station/science/lobby) +"bjc" = ( +/obj/machinery/power/turbine/inlet_compressor{ + dir = 4 + }, +/turf/open/floor/engine/airless, +/area/station/maintenance/disposal/incinerator) +"bjl" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/dark_blue{ + dir = 1 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/station/hallway/secondary/command) +"bjn" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating/reinforced, +/area/station/command/emergency_closet) +"bjo" = ( +/obj/structure/closet/secure_closet/medical2, +/obj/effect/mapping_helpers/burnt_floor, +/obj/structure/broken_flooring/pile{ + dir = 1 + }, +/turf/open/floor/plating, +/area/station/maintenance/department/medical) +"bjp" = ( +/obj/machinery/door/window/left/directional/south{ + req_access = list("science"); + name = "Research Testing Chamber" + }, +/turf/open/floor/engine, +/area/station/science/explab) +"bjv" = ( +/obj/machinery/photocopier, +/obj/machinery/light_switch/directional/east, +/turf/open/floor/carpet, +/area/station/service/lawoffice) +"bjy" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/spawner/random/structure/steam_vent, +/turf/open/floor/plating, +/area/station/maintenance/port/greater) +"bjM" = ( +/obj/effect/turf_decal/tile/brown/opposingcorners{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/airalarm/directional/south, +/obj/machinery/light_switch/directional/east, +/turf/open/floor/iron, +/area/station/commons/vacant_room/commissary) +"bka" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/trimline/blue/filled/line, +/turf/open/floor/iron/white, +/area/station/medical/treatment_center) +"bkb" = ( +/obj/structure/closet/crate/preopen, +/obj/effect/turf_decal/tile/dark_blue/anticorner/contrasted{ + dir = 8 + }, +/obj/effect/spawner/random/trash/garbage, +/obj/effect/decal/cleanable/dirt/dust, +/obj/item/storage/box/coffeepack, +/turf/open/floor/iron/dark, +/area/station/command/bridge) +"bkk" = ( +/turf/closed/wall/r_wall, +/area/station/maintenance/port/greater) +"bky" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/light/warm/dim/directional/east, +/obj/structure/table/reinforced, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/iron/white, +/area/station/medical/chemistry/minisat) +"blh" = ( +/obj/structure/reagent_dispensers/watertank, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/command/corporate_dock) +"blz" = ( +/obj/machinery/conveyor{ + id = "garbage"; + dir = 8 + }, +/obj/structure/window/spawner/directional/north, +/obj/machinery/light/small/directional/south, +/turf/open/floor/plating, +/area/station/maintenance/disposal) +"blE" = ( +/obj/vehicle/sealed/mecha/ripley/paddy/preset, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/light/small/directional/west, +/turf/open/floor/iron/recharge_floor, +/area/station/security/mechbay) +"blM" = ( +/obj/machinery/atmospherics/pipe/multiz/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/multiz/scrubbers/visible/layer2, +/obj/effect/turf_decal/sand/plating, +/turf/open/floor/plating, +/area/station/asteroid) +"bme" = ( +/obj/structure/sign/warning, +/turf/closed/wall/r_wall, +/area/station/ai_monitored/security/armory) +"bmf" = ( +/obj/effect/turf_decal/siding/white{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/herringbone, +/area/station/commons/fitness/recreation) +"bmj" = ( +/obj/structure/table/wood, +/obj/item/flashlight/lamp/bananalamp{ + pixel_x = 4; + pixel_y = 18 + }, +/obj/item/toy/figure/clown, +/obj/effect/turf_decal/tile/blue/opposingcorners, +/obj/effect/turf_decal/tile/red/opposingcorners{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/service/theater) +"bmp" = ( +/turf/closed/wall, +/area/station/service/theater) +"bmu" = ( +/obj/effect/turf_decal/sand/plating, +/obj/effect/spawner/random/structure/crate, +/turf/open/floor/plating, +/area/station/asteroid) +"bmy" = ( +/obj/machinery/door/airlock/public/glass{ + name = "Fore Primary Hallway" + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment, +/obj/machinery/door/firedoor, +/turf/open/floor/iron, +/area/station/hallway/primary/fore) +"bmz" = ( +/obj/machinery/vending/wardrobe/law_wardrobe, +/turf/open/floor/wood, +/area/station/service/lawoffice) +"bmL" = ( +/obj/effect/spawner/random/engineering/tracking_beacon, +/turf/open/floor/carpet, +/area/station/service/theater) +"bnb" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/binary/valve{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/department/science) +"bnn" = ( +/obj/effect/turf_decal/tile/purple/full, +/turf/open/floor/iron/dark/smooth_large, +/area/station/science/xenobiology) +"bnr" = ( +/obj/structure/table, +/obj/item/key/security, +/turf/open/floor/iron, +/area/station/security/warden) +"bnv" = ( +/obj/machinery/disposal/delivery_chute{ + dir = 1 + }, +/obj/structure/window/spawner/directional/west, +/obj/structure/window/spawner/directional/east, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/obj/structure/window/spawner/directional/south, +/turf/open/floor/plating, +/area/station/maintenance/disposal) +"bnG" = ( +/obj/structure/railing{ + dir = 9 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/turf/open/floor/iron/dark/side{ + dir = 9 + }, +/area/station/command/meeting_room) +"bnK" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 + }, +/obj/item/radio/intercom/directional/north, +/turf/open/floor/iron, +/area/station/engineering/lobby) +"bnP" = ( +/obj/effect/landmark/start/cargo_technician, +/obj/structure/chair/office{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/cargo/storage) +"bon" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/spawner/random/trash/grime, +/turf/open/floor/plating, +/area/station/maintenance/department/engine) +"bos" = ( +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/maintenance/department/engine) +"boy" = ( +/obj/machinery/power/apc/auto_name/directional/west, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/science/ordnance) +"boQ" = ( +/obj/machinery/power/solar_control{ + id = "foreport"; + name = "Port Bow Solar Control"; + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/airalarm/directional/north, +/turf/open/floor/plating, +/area/station/maintenance/solars/port/fore) +"boT" = ( +/obj/machinery/atmospherics/components/unary/thermomachine, +/obj/effect/turf_decal/delivery, +/turf/open/floor/iron/dark, +/area/station/engineering/supermatter/room) +"bpy" = ( +/obj/effect/spawner/random/trash/mess, +/obj/effect/spawner/random/maintenance, +/obj/effect/spawner/random/structure/table_or_rack, +/turf/open/floor/plating, +/area/station/maintenance/port/lesser) +"bpW" = ( +/obj/effect/turf_decal/stripes/white/line, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/science/ordnance/testlab) +"bqr" = ( +/obj/effect/turf_decal/tile/red/anticorner/contrasted{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/turf/open/floor/iron, +/area/station/security/interrogation) +"bqz" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/unary/portables_connector/visible/layer2, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) +"bqA" = ( +/obj/effect/turf_decal/trimline/blue/arrow_ccw{ + dir = 9 + }, +/turf/open/floor/iron/white, +/area/station/medical/medbay/lobby) +"bqE" = ( +/obj/machinery/computer/mech_bay_power_console, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/light/broken/directional/north, +/obj/structure/cable, +/turf/open/floor/circuit, +/area/station/hallway/primary/central) +"bqR" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/station/medical/paramedic) +"bqT" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/turf/open/floor/plating, +/area/station/maintenance/port/lesser) +"bqV" = ( +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/security/lockers) +"bqX" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/obj/machinery/door/poddoor/preopen{ + id = "bridgespace" + }, +/turf/open/floor/plating, +/area/station/command/bridge) +"brc" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/grimy, +/area/station/maintenance/central/greater) +"brw" = ( +/obj/effect/turf_decal/tile/blue, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/aisat/foyer) +"brx" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 8 + }, +/obj/machinery/light/directional/west, +/turf/open/floor/iron, +/area/station/engineering/lobby) +"brN" = ( +/obj/effect/turf_decal/tile/brown/anticorner/contrasted{ + dir = 1 + }, +/obj/machinery/conveyor{ + dir = 5; + id = "QMLoad2" + }, +/obj/machinery/airalarm/directional/north, +/obj/machinery/camera/autoname/directional/west, +/turf/open/floor/iron, +/area/station/cargo/storage) +"brP" = ( +/obj/structure/plasticflaps, +/obj/machinery/conveyor/auto{ + id = "bridgedeliver"; + dir = 8 + }, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/command/bridge) +"brQ" = ( +/obj/effect/turf_decal/trimline/blue/arrow_ccw{ + dir = 8 + }, +/obj/machinery/vending/wallmed/directional/west, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/iron/white/smooth_large, +/area/station/medical/medbay/lobby) +"brS" = ( +/obj/effect/turf_decal/tile/dark_red/opposingcorners, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/service/bar) +"brV" = ( +/turf/open/floor/engine, +/area/station/command/corporate_dock) +"bsw" = ( +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/station/science/lobby) +"bsG" = ( +/obj/machinery/door/window/right/directional/west{ + req_access = list("library") + }, +/turf/open/floor/carpet/royalblue, +/area/station/service/library) +"bsM" = ( +/obj/effect/landmark/event_spawn, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/iron/white/smooth_large, +/area/station/command/heads_quarters/cmo) +"bsX" = ( +/obj/structure/rack, +/obj/item/electronics/airalarm, +/obj/item/electronics/airlock, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/ai_monitored/turret_protected/aisat/uppersouth) +"bsZ" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/structure/table/reinforced, +/obj/item/pai_card, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/aisat/foyer) +"btj" = ( +/obj/machinery/door/airlock/atmos{ + name = "Incinerator" + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) +"btl" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/engineering/main) +"btw" = ( +/obj/effect/turf_decal/tile/dark_blue, +/obj/structure/disposalpipe/segment{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/hallway/secondary/command) +"btJ" = ( +/obj/structure/railing/corner{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"btM" = ( +/obj/structure/cable, +/obj/machinery/camera/autoname/directional/south, +/turf/open/floor/iron/chapel{ + dir = 8 + }, +/area/station/service/chapel) +"btU" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/public/glass, +/obj/effect/turf_decal/siding/white/end{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/turf/open/floor/iron/herringbone, +/area/station/hallway/primary/central) +"btZ" = ( +/obj/machinery/computer/atmos_control/nocontrol/master, +/turf/open/floor/iron, +/area/station/engineering/atmos/upper) +"bue" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/security/lockers) +"bui" = ( +/obj/machinery/door/poddoor/lift/preopen{ + transport_linked_id = "medbay1" + }, +/turf/open/floor/plating/elevatorshaft, +/area/station/medical/treatment_center) +"buk" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/command/heads_quarters/ce) +"bup" = ( +/obj/effect/turf_decal/stripes{ + dir = 8 + }, +/obj/structure/cable, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"buu" = ( +/obj/structure/cable, +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/obj/machinery/firealarm/directional/south, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/security/armory) +"buw" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/freezer, +/area/station/commons/toilet/restrooms) +"buH" = ( +/obj/effect/turf_decal/stripes, +/obj/effect/spawner/random/entertainment/arcade, +/turf/open/floor/iron/dark/textured, +/area/station/hallway/secondary/exit/departure_lounge) +"buI" = ( +/obj/machinery/light/small/directional/west, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/exit/departure_lounge) +"buK" = ( +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/machinery/stasis{ + dir = 4 + }, +/obj/machinery/defibrillator_mount/directional/south, +/turf/open/floor/iron/white, +/area/station/medical/treatment_center) +"bvl" = ( +/obj/machinery/meter, +/obj/machinery/atmospherics/pipe/smart/simple/green/visible{ + dir = 4 + }, +/turf/closed/wall/r_wall, +/area/station/engineering/atmos) +"bvm" = ( +/obj/machinery/door/airlock/public/glass, +/obj/effect/turf_decal/siding/white/end{ + dir = 8 + }, +/obj/machinery/door/firedoor, +/turf/open/floor/iron/herringbone, +/area/station/hallway/primary/central) +"bvt" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/structure/tank_dispenser/oxygen{ + pixel_x = -1; + pixel_y = 2 + }, +/obj/machinery/vending/wallmed/directional/south, +/obj/structure/extinguisher_cabinet/directional/east, +/turf/open/floor/iron, +/area/station/command/gateway) +"bvD" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/iron/white, +/area/station/medical/treatment_center) +"bvJ" = ( +/obj/effect/decal/cleanable/oil, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/spawner/random/entertainment/arcade{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/aisat/uppernorth) +"bvP" = ( +/obj/effect/decal/cleanable/blood/tracks, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"bvT" = ( +/obj/machinery/atmospherics/pipe/multiz/supply/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/multiz/scrubbers/visible/layer2{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/aft/upper) +"bvX" = ( +/obj/structure/cable, +/turf/open/floor/iron/dark/textured_edge{ + dir = 1 + }, +/area/station/science/xenobiology) +"bwf" = ( +/obj/effect/turf_decal/siding/purple{ + dir = 1 + }, +/obj/machinery/light/dim/directional/west, +/turf/open/floor/iron/white, +/area/station/science/ordnance/testlab) +"bwj" = ( +/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/science/ordnance) +"bwt" = ( +/obj/effect/mapping_helpers/burnt_floor, +/obj/structure/table/wood, +/obj/item/camera/detective, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/wood, +/area/station/security/detectives_office/private_investigators_office) +"bwC" = ( +/obj/structure/lattice, +/turf/open/space/basic, +/area/space/nearstation) +"bwQ" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/mapping_helpers/mail_sorting/science/robotics, +/obj/structure/disposalpipe/sorting/mail, +/turf/open/floor/plating, +/area/station/maintenance/port/lesser) +"bxi" = ( +/obj/structure/disposalpipe/trunk, +/obj/machinery/disposal/bin, +/obj/effect/turf_decal/tile/blue/anticorner/contrasted{ + dir = 1 + }, +/turf/open/floor/iron/white, +/area/station/medical/medbay/lobby) +"bxn" = ( +/obj/machinery/door/airlock/hatch{ + name = "Telecomms Server Room" + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/tcoms, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "antesat" + }, +/obj/structure/cable/layer3, +/turf/open/floor/iron/dark/telecomms, +/area/station/tcommsat/server) +"bxs" = ( +/obj/effect/turf_decal/tile/red/opposingcorners, +/obj/effect/landmark/start/prisoner, +/turf/open/floor/iron/white, +/area/station/security/prison/mess) +"bxx" = ( +/obj/effect/turf_decal/siding/white, +/obj/structure/chair/sofa/bench{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/herringbone, +/area/station/hallway/primary/central) +"bxC" = ( +/obj/machinery/door/airlock/medical/glass{ + name = "Medbay" + }, +/obj/machinery/door/firedoor, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/white, +/area/station/medical/medbay/lobby) +"bxG" = ( +/obj/structure/railing/corner{ + dir = 1 + }, +/obj/structure/cable, +/turf/open/floor/iron/dark/corner{ + dir = 1 + }, +/area/station/command/meeting_room) +"bxH" = ( +/obj/effect/spawner/structure/window/hollow/end{ + dir = 1 + }, +/turf/open/floor/plating, +/area/station/security/courtroom) +"bxN" = ( +/obj/effect/turf_decal/tile/dark_blue/half/contrasted, +/obj/machinery/camera/autoname/directional/south, +/turf/open/floor/iron, +/area/station/command/bridge) +"bxQ" = ( +/obj/machinery/newscaster/directional/north, +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/obj/effect/turf_decal/tile/green{ + dir = 4 + }, +/obj/machinery/duct, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/service/hydroponics) +"byb" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/iron/kitchen_coldroom/freezerfloor, +/area/station/service/kitchen) +"byf" = ( +/obj/structure/closet/emcloset/anchored, +/turf/open/floor/plating, +/area/station/maintenance/department/engine) +"byj" = ( +/obj/effect/landmark/blobstart, +/turf/open/floor/iron/textured_large, +/area/station/engineering/storage/tech) +"byk" = ( +/obj/effect/turf_decal/tile/red/opposingcorners, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/white, +/area/station/security/prison/mess) +"byB" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/plating, +/area/station/maintenance/department/bridge) +"byC" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/firedoor, +/obj/structure/sign/warning/biohazard, +/obj/structure/cable, +/obj/machinery/door/poddoor/preopen{ + id = "Xenolab"; + name = "Test Chamber Blast Door" + }, +/turf/open/floor/plating, +/area/station/science/xenobiology) +"byT" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/window/right/directional/north, +/obj/machinery/door/firedoor, +/obj/machinery/door/window/brigdoor/left/directional/south{ + req_access = list("armory"); + name = "Warden Requisition Desk" + }, +/turf/open/floor/iron/dark, +/area/station/security/warden) +"bzj" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/light/small/broken/directional/north, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/iron/textured_edge, +/area/station/maintenance/department/medical/central) +"bzo" = ( +/obj/structure/cable, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden, +/turf/open/floor/iron/white, +/area/station/medical/treatment_center) +"bzu" = ( +/obj/item/pickaxe/improvised, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/misc/asteroid, +/area/station/asteroid) +"bzx" = ( +/obj/structure/table, +/obj/effect/turf_decal/tile/brown/anticorner/contrasted{ + dir = 8 + }, +/obj/effect/spawner/random/entertainment/cigarette_pack, +/obj/item/cigarette/rollie/mindbreaker, +/obj/machinery/airalarm/directional/east, +/turf/open/floor/iron, +/area/station/cargo/miningoffice) +"bzB" = ( +/obj/effect/turf_decal/tile/purple/opposingcorners, +/obj/machinery/recharger, +/obj/structure/table, +/turf/open/floor/iron/white, +/area/station/science/auxlab/firing_range) +"bzC" = ( +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/engineering/atmos) +"bzE" = ( +/obj/structure/cable, +/obj/effect/turf_decal/tile/dark_blue{ + dir = 1 + }, +/obj/effect/turf_decal/tile/dark_blue, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/spawner/random/engineering/tracking_beacon, +/obj/effect/landmark/event_spawn, +/turf/open/floor/iron, +/area/station/hallway/secondary/command) +"bzH" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/security/courtroom) +"bzI" = ( +/obj/structure/table, +/obj/effect/turf_decal/tile/red/anticorner/contrasted{ + dir = 8 + }, +/obj/machinery/syndicatebomb/training, +/obj/machinery/camera/autoname/directional/west, +/turf/open/floor/iron/dark, +/area/station/security/lockers) +"bzN" = ( +/obj/machinery/restaurant_portal/bar, +/turf/open/floor/wood, +/area/station/commons/lounge) +"bzQ" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/station/engineering/main) +"bzX" = ( +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/port/greater) +"bAe" = ( +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"bAn" = ( +/obj/effect/spawner/random/engineering/vending_restock, +/obj/effect/spawner/random/structure/closet_empty/crate, +/obj/effect/spawner/random/maintenance/four, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"bAr" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"bAw" = ( +/turf/closed/wall/r_wall, +/area/station/command/gateway) +"bAE" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/commons/vacant_room/commissary) +"bAF" = ( +/obj/machinery/door/morgue{ + name = "Private Study"; + req_access = list("library") + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/engine/cult, +/area/station/service/library) +"bAJ" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/stairs{ + icon = 'icons/obj/stairs.dmi'; + icon_state = "stairs_wood" + }, +/area/station/service/chapel) +"bAP" = ( +/obj/effect/turf_decal/siding/wood/end{ + dir = 4 + }, +/obj/machinery/vending/coffee, +/turf/open/floor/wood, +/area/station/service/library) +"bAS" = ( +/obj/structure/table/wood, +/obj/machinery/coffeemaker/impressa, +/turf/open/floor/carpet, +/area/station/command/corporate_showroom) +"bAV" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/iron/white/smooth_large, +/area/station/medical/medbay/central) +"bAW" = ( +/obj/structure/table, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 8 + }, +/obj/item/grenade/flashbang, +/obj/item/coin/iron, +/turf/open/floor/iron/dark, +/area/station/security/lockers) +"bBb" = ( +/obj/machinery/door/window/left/directional/east{ + req_access = list("library"); + name = "Library Desk Door" + }, +/obj/effect/turf_decal/siding/wood/end{ + dir = 4 + }, +/obj/machinery/light/directional/north, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/wood, +/area/station/service/library) +"bBm" = ( +/obj/structure/cable, +/obj/structure/lattice, +/turf/open/openspace, +/area/station/command/meeting_room) +"bBo" = ( +/turf/closed/mineral/random/stationside/asteroid/porus{ + mineralChance = 20 + }, +/area/station/cargo/miningoffice) +"bBr" = ( +/obj/effect/spawner/structure/window/reinforced/plasma, +/turf/open/floor/plating, +/area/station/engineering/atmospherics_engine) +"bBs" = ( +/obj/structure/closet/secure_closet/brig/genpop, +/obj/machinery/airalarm/directional/east, +/turf/open/floor/iron/dark/textured, +/area/station/security/execution/transfer) +"bBH" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/engineering/gravity_generator) +"bBI" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/window/right/directional/west{ + name = "Outer Window" + }, +/obj/machinery/door/window/brigdoor/left/directional/east{ + name = "Security Desk"; + req_access = list("security") + }, +/obj/item/folder/red, +/obj/item/pen, +/obj/machinery/door/firedoor, +/turf/open/floor/iron, +/area/station/hallway/secondary/exit/departure_lounge) +"bBJ" = ( +/obj/machinery/processor/slime, +/obj/effect/turf_decal/bot_red, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/iron/white/textured_corner{ + dir = 4 + }, +/area/station/science/xenobiology) +"bBX" = ( +/obj/structure/window/spawner/directional/north, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/commons/fitness/recreation) +"bCg" = ( +/obj/structure/reagent_dispensers/plumbed/storage{ + reagent_id = /datum/reagent/clf3; + dir = 8 + }, +/obj/structure/sign/warning/fire/directional/south, +/obj/effect/turf_decal/sand/plating, +/turf/open/floor/plating, +/area/station/asteroid) +"bCm" = ( +/obj/structure/girder/displaced, +/turf/open/misc/asteroid, +/area/station/maintenance/central/greater) +"bCr" = ( +/obj/machinery/computer/security/mining{ + dir = 8 + }, +/obj/machinery/keycard_auth/directional/east, +/obj/effect/turf_decal/tile/dark_blue/half/contrasted{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/command/bridge) +"bCv" = ( +/obj/effect/decal/cleanable/blood/old, +/obj/item/restraints/handcuffs, +/turf/open/floor/iron/white/herringbone, +/area/station/maintenance/department/medical/central) +"bCD" = ( +/obj/machinery/light/directional/west, +/turf/open/floor/wood/parquet, +/area/station/medical/psychology) +"bCJ" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/obj/effect/turf_decal/plaque{ + icon_state = "L1" + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"bDk" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) +"bDq" = ( +/obj/structure/punching_bag, +/obj/effect/turf_decal/bot, +/turf/open/floor/iron, +/area/station/security/prison) +"bDs" = ( +/obj/machinery/door/airlock/security/glass{ + name = "Security E.V.A. Storage" + }, +/obj/effect/mapping_helpers/airlock/access/all/security/armory, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/security/lockers) +"bDy" = ( +/obj/structure/chair/sofa/bench{ + dir = 4 + }, +/obj/effect/turf_decal/tile/purple/half/contrasted{ + dir = 8 + }, +/obj/machinery/camera/autoname/directional/west, +/turf/open/floor/iron/white, +/area/station/science/lobby) +"bDA" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/structure/table/wood/fancy/orange, +/obj/item/plate, +/obj/item/food/spaghetti/pastatomato{ + pixel_y = 5 + }, +/obj/item/kitchen/fork, +/turf/open/floor/wood, +/area/station/command/heads_quarters/qm) +"bDK" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/spawner/random/trash/garbage{ + spawn_scatter_radius = 1 + }, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"bDN" = ( +/obj/item/stack/tile/iron/white, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron/white/smooth_large, +/area/station/medical/chemistry/minisat) +"bDX" = ( +/obj/structure/rack, +/obj/structure/window/spawner/directional/north, +/obj/structure/window/spawner/directional/south, +/obj/machinery/door/window/right/directional/west{ + req_access = list("eva"); + name = "Jetpack Storage" + }, +/obj/machinery/door/window/left/directional/east{ + req_access = list("eva"); + name = "Jetpack Storage" + }, +/obj/item/tank/jetpack/carbondioxide{ + pixel_y = 2 + }, +/obj/item/tank/jetpack/carbondioxide{ + pixel_y = -2 + }, +/obj/item/tank/jetpack/carbondioxide{ + pixel_y = 4 + }, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/command/storage/eva) +"bEd" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/stripes/white/line{ + dir = 9 + }, +/obj/machinery/airalarm/directional/east, +/turf/open/floor/iron, +/area/station/security/prison) +"bEn" = ( +/turf/open/floor/iron/showroomfloor, +/area/station/command/heads_quarters/hos) +"bEo" = ( +/obj/structure/frame/computer{ + anchored = 1; + dir = 4 + }, +/obj/item/circuitboard/computer/operating, +/obj/effect/decal/cleanable/glass, +/obj/structure/broken_flooring/side/directional/east, +/turf/open/floor/plating, +/area/station/maintenance/department/medical) +"bEq" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/tile/yellow, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) +"bEu" = ( +/obj/effect/turf_decal/tile/neutral, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"bEW" = ( +/obj/structure/table/wood, +/obj/effect/spawner/random/decoration/microwave{ + dir = 1; + pixel_y = 2 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 10 + }, +/obj/machinery/light/warm/directional/south, +/turf/open/floor/wood/tile, +/area/station/command/corporate_showroom) +"bEY" = ( +/obj/structure/window/reinforced/spawner/directional/north, +/obj/structure/window/reinforced/spawner/directional/east, +/turf/open/floor/engine, +/area/station/science/xenobiology) +"bFa" = ( +/obj/machinery/duct, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/obj/machinery/light/small/directional/east, +/turf/open/floor/iron/freezer, +/area/station/commons/toilet/restrooms) +"bFe" = ( +/obj/machinery/suit_storage_unit/hos, +/obj/machinery/keycard_auth/directional/east{ + pixel_y = -12 + }, +/turf/open/floor/iron/dark, +/area/station/command/heads_quarters/hos) +"bFw" = ( +/obj/machinery/door/window/right/directional/east{ + name = "Delivery Door"; + req_access = list("cargo") + }, +/obj/structure/plasticflaps, +/obj/machinery/navbeacon{ + codes_txt = "delivery;dir=4"; + location = "Disposals" + }, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/turf/open/floor/plating, +/area/station/maintenance/disposal) +"bFI" = ( +/obj/machinery/button/door/directional/west{ + id = "commissaryshutter"; + name = "Commissary Shutter Control" + }, +/obj/structure/table, +/obj/effect/decal/cleanable/dirt, +/obj/item/clothing/neck/tie/black, +/turf/open/floor/plating, +/area/station/commons/vacant_room/commissary) +"bFP" = ( +/obj/structure/chair{ + dir = 4 + }, +/obj/item/ammo_casing/a357/spent, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/white/small, +/area/station/science/lobby) +"bFS" = ( +/turf/open/openspace, +/area/station/ai_monitored/turret_protected/aisat/foyer) +"bGc" = ( +/obj/structure/table, +/obj/item/stack/package_wrap, +/obj/item/stack/package_wrap{ + pixel_y = 3 + }, +/obj/item/stack/package_wrap{ + pixel_y = 6 + }, +/obj/effect/spawner/random/bureaucracy/birthday_wrap{ + pixel_y = 9 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/station/cargo/sorting) +"bGe" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/cargo/storage) +"bGg" = ( +/obj/structure/rack, +/obj/item/electronics/firealarm, +/obj/item/electronics/firelock, +/obj/machinery/light/cold/dim/directional/south, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/ai_monitored/turret_protected/aisat/uppersouth) +"bGk" = ( +/turf/closed/wall/r_wall, +/area/station/medical/chemistry) +"bGl" = ( +/obj/structure/chair/sofa/corp/left{ + desc = "Looks like someone threw it out. Covered in donut crumbs."; + name = "couch" + }, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 5 + }, +/obj/machinery/newscaster/directional/east, +/turf/open/floor/iron/white, +/area/station/medical/paramedic) +"bGq" = ( +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 4 + }, +/obj/machinery/autolathe, +/obj/machinery/light_switch/directional/east, +/turf/open/floor/iron, +/area/station/cargo/storage) +"bGD" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/status_display/ai/directional/west, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"bGL" = ( +/obj/machinery/button/door/directional/north{ + id = "Xenolab"; + name = "Test Chamber Blast Doors"; + pixel_x = 6; + pixel_y = -2; + req_access = list("xenobiology") + }, +/obj/machinery/button/ignition{ + id = "Xenobio"; + pixel_x = -6 + }, +/obj/structure/table/reinforced/plastitaniumglass, +/turf/open/floor/iron/white/smooth_corner{ + dir = 8 + }, +/area/station/science/xenobiology) +"bGW" = ( +/obj/structure/cable, +/obj/effect/spawner/random/engineering/tracking_beacon, +/turf/open/floor/iron, +/area/station/command/bridge) +"bGX" = ( +/obj/structure/chair/sofa/bench/right, +/obj/structure/extinguisher_cabinet/directional/west, +/obj/item/radio/intercom/directional/north, +/turf/open/floor/iron/white, +/area/station/medical/exam_room) +"bGZ" = ( +/obj/structure/chair/office{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/carpet/purple, +/area/station/service/library) +"bHa" = ( +/obj/machinery/air_sensor/air_tank, +/turf/open/floor/engine/air, +/area/station/engineering/atmos) +"bHb" = ( +/obj/machinery/door/window/left/directional/east{ + req_access = list("hydroponics"); + name = "Hydroponics Desk" + }, +/obj/structure/table/reinforced, +/obj/item/paper, +/obj/item/pen, +/obj/effect/turf_decal/stripes/box, +/turf/open/floor/iron, +/area/station/service/hydroponics) +"bHc" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/wood/parquet, +/area/station/medical/psychology) +"bHg" = ( +/obj/structure/railing/corner{ + dir = 8 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/carpet/red, +/area/station/command/heads_quarters/qm) +"bHh" = ( +/obj/structure/cable, +/obj/machinery/door/airlock/hatch{ + name = "MiniSat Access" + }, +/obj/effect/mapping_helpers/airlock/access/all/command/minisat, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/command/storage/satellite) +"bHj" = ( +/obj/structure/chair/sofa/bench/left{ + dir = 1 + }, +/obj/machinery/light/cold/directional/south, +/turf/open/floor/iron/white, +/area/station/medical/exam_room) +"bHH" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"bHI" = ( +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"bIe" = ( +/obj/structure/table, +/obj/item/stamp{ + pixel_x = -3; + pixel_y = 3 + }, +/obj/item/stamp/denied{ + pixel_x = 4; + pixel_y = -2 + }, +/obj/item/dest_tagger{ + pixel_x = 9; + pixel_y = 10 + }, +/obj/item/pen/red{ + pixel_y = 10 + }, +/obj/machinery/computer/security/telescreen/entertainment/directional/south, +/turf/open/floor/iron/textured_large, +/area/station/cargo/sorting) +"bIi" = ( +/obj/structure/cable, +/obj/item/storage/toolbox/electrical, +/turf/open/floor/catwalk_floor, +/area/station/maintenance/central/lesser) +"bIE" = ( +/obj/machinery/atmospherics/components/trinary/filter/atmos/co2{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/engineering/atmos) +"bII" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron/white/smooth_half, +/area/station/medical/pharmacy) +"bIJ" = ( +/obj/machinery/duct, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/commons/locker) +"bIN" = ( +/obj/machinery/door/window/right/directional/west, +/turf/open/floor/grass, +/area/station/service/hydroponics/garden) +"bJc" = ( +/obj/structure/railing/corner, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/catwalk_floor/iron_white, +/area/station/science/lobby) +"bJo" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/kitchen, +/area/station/service/kitchen) +"bJr" = ( +/obj/structure/rack, +/obj/item/storage/box, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"bJQ" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/obj/structure/cable, +/turf/open/floor/iron/chapel{ + dir = 1 + }, +/area/station/service/chapel) +"bJX" = ( +/turf/open/floor/plating/airless, +/area/station/science/ordnance/bomb) +"bKK" = ( +/obj/machinery/light/directional/north, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"bKL" = ( +/obj/item/flashlight/glowstick/cyan{ + start_on = 1; + pixel_y = 7 + }, +/turf/open/misc/asteroid, +/area/station/asteroid) +"bKQ" = ( +/obj/structure/cable, +/turf/open/floor/iron/dark/textured_large, +/area/station/science/xenobiology) +"bKV" = ( +/obj/structure/table, +/obj/effect/spawner/random/entertainment/dice, +/turf/open/floor/iron, +/area/station/security/prison) +"bKX" = ( +/obj/machinery/computer/telecomms/server{ + dir = 1; + network = "tcommsat" + }, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark/telecomms, +/area/station/tcommsat/server) +"bLa" = ( +/obj/structure/chair/sofa/bench/left{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/turf/open/floor/iron/dark, +/area/station/security/courtroom) +"bLI" = ( +/obj/machinery/processor/slime, +/obj/effect/turf_decal/bot_red, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/iron/white/textured_large, +/area/station/science/xenobiology) +"bLS" = ( +/obj/effect/turf_decal/stripes/box, +/obj/structure/cable/multilayer/multiz, +/obj/item/assembly/mousetrap/armed, +/obj/machinery/camera/autoname/directional/south, +/turf/open/floor/plating, +/area/station/engineering/lobby) +"bMb" = ( +/obj/structure/lattice/catwalk, +/obj/structure/ladder, +/obj/machinery/light/directional/north, +/turf/open/openspace, +/area/station/engineering/supermatter/room) +"bMl" = ( +/obj/effect/turf_decal/sand/plating, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/obj/effect/landmark/generic_maintenance_landmark, +/turf/open/floor/plating, +/area/station/asteroid) +"bMm" = ( +/obj/machinery/navbeacon{ + codes_txt = "delivery;dir=2"; + location = "Medical" + }, +/obj/machinery/door/window/left/directional/north{ + req_access = list("shipping"); + name = "MuleBot Access" + }, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"bMx" = ( +/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ + dir = 9 + }, +/obj/structure/broken_flooring/corner, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"bMG" = ( +/obj/effect/turf_decal/tile/yellow{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/simple/green/visible, +/obj/machinery/meter, +/obj/machinery/firealarm/directional/west, +/turf/open/floor/iron/dark/corner{ + dir = 1 + }, +/area/station/engineering/atmos/upper) +"bMP" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/effect/turf_decal/tile/neutral/half{ + dir = 4 + }, +/turf/open/floor/iron/edge{ + dir = 4 + }, +/area/station/hallway/secondary/exit/departure_lounge) +"bNp" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/turf/open/floor/iron/white, +/area/station/science/research) +"bNu" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/aisat/teleporter) +"bNz" = ( +/obj/structure/rack, +/obj/effect/turf_decal/tile/yellow/anticorner/contrasted{ + dir = 8 + }, +/obj/effect/spawner/random/maintenance, +/obj/item/clothing/suit/hazardvest, +/obj/item/multitool, +/obj/item/clothing/gloves/color/fyellow, +/turf/open/floor/iron, +/area/station/commons/storage/tools) +"bNA" = ( +/obj/machinery/door/airlock/security{ + name = "Auxilliary Brig" + }, +/obj/effect/turf_decal/tile/red/fourcorners, +/obj/machinery/door/firedoor, +/obj/structure/cable, +/obj/effect/mapping_helpers/airlock/access/all/security/brig, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/security/brig) +"bND" = ( +/turf/open/floor/iron, +/area/station/engineering/atmos) +"bNI" = ( +/obj/structure/showcase/cyborg/old{ + dir = 8; + pixel_x = 9; + pixel_y = 2 + }, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/ai_monitored/turret_protected/aisat/foyer) +"bNL" = ( +/turf/closed/wall, +/area/station/cargo/bitrunning/den) +"bNS" = ( +/obj/effect/landmark/start/cargo_technician, +/obj/effect/turf_decal/bot_white, +/turf/open/floor/iron, +/area/station/cargo/storage) +"bOg" = ( +/obj/effect/spawner/random/maintenance/three, +/obj/structure/closet/crate/freezer, +/obj/item/reagent_containers/blood/ethereal, +/turf/open/floor/iron/freezer, +/area/station/maintenance/department/medical/central) +"bOi" = ( +/obj/effect/mapping_helpers/burnt_floor, +/obj/structure/chair/sofa/bench/right{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/hallway/secondary/exit/departure_lounge) +"bOl" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/aisat/foyer) +"bOr" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 1 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/light/directional/north, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/white, +/area/station/hallway/secondary/entry) +"bOO" = ( +/obj/structure/cable, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/effect/landmark/event_spawn, +/turf/open/floor/wood/tile, +/area/station/command/corporate_showroom) +"bOT" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 1; + id = "pharmacy_shutters"; + name = "Pharmacy Shutters" + }, +/turf/open/floor/plating, +/area/station/medical/pharmacy) +"bPc" = ( +/obj/effect/turf_decal/box/corners{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/science/ordnance) +"bPu" = ( +/obj/effect/decal/cleanable/rubble, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/sand/plating, +/turf/open/floor/plating, +/area/station/cargo/miningoffice) +"bPx" = ( +/obj/structure/ladder, +/obj/structure/window/reinforced/spawner/directional/east{ + pixel_x = 3 + }, +/obj/machinery/door/window/brigdoor/left/directional/south{ + pixel_y = -3; + name = "Monkey Pen"; + req_one_access = list("genetics") + }, +/obj/machinery/camera/autoname/directional/west{ + network = list("ss13","rd") + }, +/obj/effect/turf_decal/siding/purple/corner, +/obj/structure/sign/poster/random/directional/north, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/white/textured, +/area/station/science/genetics) +"bPH" = ( +/obj/structure/cable, +/obj/effect/turf_decal/tile/yellow{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/obj/machinery/light_switch/directional/south, +/turf/open/floor/iron/dark/corner{ + dir = 8 + }, +/area/station/engineering/atmos/upper) +"bPP" = ( +/obj/machinery/conveyor_switch/oneway{ + dir = 8; + id = "garbage"; + name = "disposal conveyor" + }, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/disposal) +"bPS" = ( +/obj/structure/stairs/east, +/obj/structure/railing{ + dir = 1 + }, +/turf/open/floor/iron/dark/textured_large, +/area/station/science/xenobiology) +"bPY" = ( +/obj/structure/table/reinforced/rglass, +/obj/effect/landmark/event_spawn, +/turf/open/floor/iron/dark, +/area/station/security/office) +"bPZ" = ( +/obj/structure/table, +/obj/machinery/light/directional/south, +/obj/item/cigbutt/cigarbutt, +/turf/open/floor/iron, +/area/station/hallway/primary/fore) +"bQc" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/stairs/left{ + dir = 1 + }, +/area/station/command/bridge) +"bQf" = ( +/obj/machinery/door/poddoor/shutters{ + id = "aux_base_shutters"; + name = "Auxiliary Base Shutters" + }, +/obj/effect/turf_decal/delivery, +/turf/open/floor/iron, +/area/station/construction/mining/aux_base) +"bQl" = ( +/obj/effect/turf_decal/stripes/red/line{ + dir = 10 + }, +/turf/open/floor/iron/dark, +/area/station/medical/morgue) +"bQT" = ( +/obj/machinery/power/apc/auto_name/directional/south, +/obj/effect/turf_decal/trimline/blue/filled/line, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/station/medical/exam_room) +"bRl" = ( +/obj/machinery/suit_storage_unit/captain{ + req_access = list("captain") + }, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/machinery/airalarm/directional/north, +/obj/machinery/computer/security/telescreen/minisat/directional/west, +/turf/open/floor/carpet/royalblue, +/area/station/command/heads_quarters/captain/private) +"bRD" = ( +/obj/structure/table, +/turf/open/floor/iron/white, +/area/station/science/ordnance/testlab) +"bRI" = ( +/obj/machinery/rnd/production/techfab/department/medical, +/obj/effect/turf_decal/tile/blue/fourcorners, +/turf/open/floor/iron/white, +/area/station/medical/storage) +"bRN" = ( +/obj/effect/turf_decal/tile/dark_blue{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/command/bridge) +"bRU" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/plating, +/area/station/maintenance/port/greater) +"bSr" = ( +/obj/effect/turf_decal/siding/purple{ + dir = 4 + }, +/turf/open/floor/iron/white/smooth_edge{ + dir = 8 + }, +/area/station/science/research) +"bSz" = ( +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/cargo/storage) +"bSC" = ( +/obj/effect/turf_decal/stripes/line, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/command/gateway) +"bSE" = ( +/obj/machinery/porta_turret/ai{ + dir = 4 + }, +/obj/machinery/camera/autoname/directional/east, +/turf/open/floor/circuit/red, +/area/station/ai_monitored/turret_protected/ai_upload) +"bSI" = ( +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 1 + }, +/obj/machinery/recharge_station, +/turf/open/floor/iron/dark, +/area/station/security/lockers) +"bSX" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/broken_flooring/pile{ + dir = 1 + }, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"bTm" = ( +/obj/effect/spawner/structure/window, +/obj/structure/curtain/cloth/fancy/mechanical{ + id = "chapelc" + }, +/turf/open/floor/plating, +/area/station/service/chapel) +"bTt" = ( +/obj/structure/cable, +/obj/structure/plasticflaps/opaque, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/door/window/right/directional/south{ + req_access = list("shipping"); + name = "MuleBot Access" + }, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/maintenance/department/engine) +"bTB" = ( +/obj/machinery/mineral/stacking_machine{ + input_dir = 8; + output_dir = 2 + }, +/obj/machinery/conveyor{ + id = "garbage" + }, +/obj/structure/window/spawner/directional/east, +/turf/open/floor/plating, +/area/station/maintenance/disposal) +"bTI" = ( +/obj/structure/table/wood, +/obj/effect/decal/cleanable/dirt, +/obj/item/toy/crayon/spraycan/mimecan, +/obj/item/food/baguette, +/obj/machinery/camera/autoname/directional/south, +/turf/open/floor/plating, +/area/station/service/theater) +"bTJ" = ( +/obj/effect/landmark/event_spawn, +/turf/open/floor/iron, +/area/station/security/prison) +"bTN" = ( +/obj/structure/cable, +/obj/effect/spawner/random/trash/garbage{ + spawn_scatter_radius = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"bTO" = ( +/obj/machinery/door/airlock/maintenance_hatch, +/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, +/obj/effect/mapping_helpers/airlock/unres, +/obj/effect/turf_decal/sand/plating, +/turf/open/floor/plating, +/area/station/hallway/secondary/entry) +"bTP" = ( +/obj/machinery/door/airlock/security{ + name = "Upper Security" + }, +/obj/effect/mapping_helpers/airlock/access/all/security, +/obj/effect/turf_decal/tile/red/opposingcorners, +/turf/open/floor/iron, +/area/station/security) +"bTY" = ( +/obj/effect/turf_decal/siding/green{ + dir = 10 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/commons/storage/art) +"bUh" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"bUj" = ( +/obj/machinery/vending/cart{ + req_access = list("hop") + }, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 8 + }, +/obj/machinery/camera/autoname/directional/west, +/turf/open/floor/iron/dark, +/area/station/command/heads_quarters/hop) +"bUl" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/iron/white/smooth_half{ + dir = 8 + }, +/area/station/science/xenobiology) +"bUu" = ( +/obj/structure/table, +/obj/machinery/cell_charger, +/obj/item/stock_parts/power_store/cell, +/obj/effect/turf_decal/tile/purple/half/contrasted{ + dir = 1 + }, +/obj/machinery/airalarm/directional/north, +/turf/open/floor/iron/white, +/area/station/science/lobby) +"bUx" = ( +/obj/effect/landmark/event_spawn, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/holopad, +/obj/effect/turf_decal/bot, +/turf/open/floor/iron, +/area/station/cargo/lobby) +"bUA" = ( +/obj/machinery/atmospherics/components/binary/pump{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"bUJ" = ( +/obj/effect/landmark/start/shaft_miner, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/cargo/miningoffice) +"bUM" = ( +/obj/effect/mapping_helpers/ianbirthday, +/obj/effect/turf_decal/siding/dark_blue{ + dir = 9 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/obj/effect/landmark/event_spawn, +/turf/open/floor/iron/dark, +/area/station/command/heads_quarters/hop) +"bUU" = ( +/obj/structure/railing, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/decal/cleanable/blood/tracks, +/obj/machinery/door/firedoor/border_only, +/turf/open/floor/catwalk_floor/iron_white, +/area/station/science/lobby) +"bUZ" = ( +/obj/machinery/light/small/directional/west, +/obj/structure/flora/tree/palm/style_random, +/turf/open/floor/grass, +/area/station/medical/chemistry) +"bVg" = ( +/obj/structure/chair/comfy/brown, +/obj/effect/landmark/start/clown, +/turf/open/floor/carpet, +/area/station/service/theater) +"bVl" = ( +/obj/structure/window/spawner/directional/west, +/turf/open/floor/grass, +/area/station/service/hydroponics/garden) +"bVs" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"bVA" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/structure/sign/directions/evac/directional/east{ + dir = 8 + }, +/obj/structure/sign/directions/science/directional/east{ + pixel_y = -8; + dir = 1 + }, +/obj/structure/sign/directions/medical/directional/east{ + pixel_y = 8; + dir = 8 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"bVY" = ( +/obj/machinery/holopad{ + pixel_x = 1 + }, +/obj/effect/turf_decal/box/white{ + color = "#52B4E9" + }, +/turf/open/floor/wood/parquet, +/area/station/medical/psychology) +"bWi" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/white, +/area/station/science/research) +"bWl" = ( +/obj/structure/cable, +/obj/effect/landmark/event_spawn, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/engineering/main) +"bWn" = ( +/obj/structure/barricade/wooden, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/all/supply/general, +/obj/effect/mapping_helpers/airlock/locked, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"bWp" = ( +/obj/structure/table, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 8 + }, +/obj/item/taperecorder{ + pixel_x = -3 + }, +/obj/item/reagent_containers/spray/pepper{ + pixel_x = 6 + }, +/turf/open/floor/iron/dark, +/area/station/security/execution/education) +"bWv" = ( +/obj/structure/lattice/catwalk, +/obj/structure/railing{ + dir = 4 + }, +/turf/open/openspace, +/area/station/engineering/supermatter/room) +"bWI" = ( +/obj/structure/broken_flooring/singular, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"bWJ" = ( +/obj/effect/turf_decal/tile/red/anticorner/contrasted, +/obj/structure/cable, +/obj/machinery/firealarm/directional/south, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/security) +"bWO" = ( +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 8 + }, +/obj/machinery/camera/autoname/directional/west, +/turf/open/floor/iron, +/area/station/cargo/storage) +"bWW" = ( +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"bXx" = ( +/obj/machinery/camera/autoname/directional/south, +/obj/machinery/airalarm/directional/south, +/obj/machinery/computer/slot_machine{ + pixel_y = 2 + }, +/turf/open/floor/wood, +/area/station/commons/lounge) +"bXD" = ( +/obj/structure/filingcabinet/security, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/grimy, +/area/station/security/detectives_office/private_investigators_office) +"bXJ" = ( +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 8 + }, +/obj/structure/cable, +/obj/machinery/camera/autoname/directional/west, +/turf/open/floor/iron, +/area/station/security/office) +"bXK" = ( +/obj/machinery/atmospherics/pipe/smart/manifold/yellow/visible{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/engineering/atmos) +"bYa" = ( +/obj/structure/filingcabinet/employment, +/turf/open/floor/carpet, +/area/station/service/lawoffice) +"bYc" = ( +/obj/machinery/duct, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/kitchen, +/area/station/service/kitchen) +"bYl" = ( +/obj/structure/table, +/obj/item/storage/lockbox/loyalty{ + pixel_y = 7 + }, +/obj/effect/turf_decal/tile/blue/half/contrasted{ + dir = 4 + }, +/obj/item/vending_refill/security, +/obj/machinery/firealarm/directional/west, +/turf/open/floor/iron/dark, +/area/station/security/lockers) +"bYo" = ( +/obj/machinery/mecha_part_fabricator{ + dir = 1 + }, +/obj/effect/turf_decal/delivery, +/obj/structure/sign/poster/contraband/borg_fancy_1/directional/south, +/turf/open/floor/iron/dark/textured, +/area/station/science/robotics/lab) +"bYy" = ( +/obj/structure/ladder, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/science/xenobiology) +"bYF" = ( +/obj/effect/turf_decal/arrows, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/hallway/secondary/exit/departure_lounge) +"bYP" = ( +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 4 + }, +/obj/structure/chair{ + dir = 8 + }, +/obj/item/radio/intercom/directional/east, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/station/security/brig/entrance) +"bZa" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/turf/open/floor/iron/dark, +/area/station/security/courtroom) +"bZf" = ( +/obj/machinery/vending/wardrobe/sec_wardrobe, +/obj/effect/turf_decal/tile/red/half/contrasted, +/obj/machinery/camera/autoname/directional/south, +/turf/open/floor/iron/dark, +/area/station/security/lockers) +"bZi" = ( +/obj/structure/closet/crate/hydroponics, +/obj/item/shovel/spade, +/obj/item/wrench, +/obj/item/reagent_containers/cup/watering_can, +/obj/item/cultivator, +/obj/item/wirecutters, +/obj/machinery/airalarm/directional/south, +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/turf/open/floor/iron, +/area/station/service/hydroponics) +"bZj" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 5 + }, +/obj/item/radio/intercom/directional/north, +/turf/open/floor/wood/tile, +/area/station/security/courtroom) +"bZq" = ( +/obj/structure/railing/corner{ + dir = 1 + }, +/turf/open/floor/carpet, +/area/station/service/theater) +"bZr" = ( +/turf/closed/wall/rock, +/area/space/nearstation) +"bZH" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/wood, +/area/station/service/lawoffice) +"bZI" = ( +/obj/effect/turf_decal/bot, +/mob/living/simple_animal/bot/secbot/beepsky/armsky, +/obj/effect/landmark/event_spawn, +/turf/open/floor/iron/dark/textured_large, +/area/station/ai_monitored/security/armory) +"cas" = ( +/obj/effect/turf_decal/tile/dark_blue/half/contrasted, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/hallway/secondary/command) +"cax" = ( +/turf/closed/wall/rock/porous, +/area/station/maintenance/department/cargo) +"caz" = ( +/obj/effect/turf_decal/tile/brown/anticorner/contrasted{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/cargo/sorting) +"caB" = ( +/obj/machinery/light/directional/west, +/obj/structure/table/glass, +/obj/item/pai_card, +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/tile/purple/half/contrasted{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/station/science/lobby) +"caH" = ( +/obj/effect/turf_decal/sand/plating, +/obj/structure/sign/warning/directional/west, +/turf/closed/wall/rust, +/area/station/medical/chemistry/minisat) +"caP" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/hallway/secondary/exit/departure_lounge) +"caW" = ( +/obj/item/book/granter/action/spell/blind/wgw, +/obj/effect/turf_decal/stripes{ + dir = 4 + }, +/obj/effect/turf_decal/tile/dark_blue/half/contrasted, +/obj/structure/closet/crate/secure{ + name = "HoPs top secret reading stash" + }, +/obj/item/book/random, +/obj/item/book/random, +/obj/item/book/random, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/camera/autoname/directional/east, +/turf/open/floor/iron/dark, +/area/station/command/bridge) +"cbc" = ( +/obj/machinery/door/airlock/highsecurity{ + name = "AI Upload" + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "aiupload" + }, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/access/all/command/ai_upload, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/ai_monitored/turret_protected/aisat_interior) +"cbn" = ( +/obj/machinery/conveyor{ + dir = 4; + id = "brm" + }, +/obj/effect/turf_decal/sand/plating, +/obj/machinery/light/small/directional/north, +/turf/open/floor/plating, +/area/station/cargo/miningoffice) +"cbr" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 4 + }, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) +"cbv" = ( +/obj/effect/turf_decal/siding/wood/corner, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/wood/tile, +/area/station/service/chapel) +"cbJ" = ( +/turf/closed/wall, +/area/station/engineering/atmos/pumproom) +"cbO" = ( +/obj/machinery/power/apc/auto_name/directional/west, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/ai_monitored/turret_protected/aisat_interior) +"cca" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/plating, +/area/station/maintenance/port/greater) +"ccc" = ( +/obj/structure/chair/office/tactical{ + dir = 8 + }, +/obj/effect/landmark/start/warden, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/security/office) +"cct" = ( +/obj/effect/turf_decal/siding/purple/corner, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/iron/white/smooth_edge{ + dir = 8 + }, +/area/station/science/research) +"ccI" = ( +/obj/effect/turf_decal/tile/red/opposingcorners, +/obj/effect/turf_decal/tile/blue/opposingcorners{ + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/security/armory) +"ccT" = ( +/obj/machinery/light/directional/west, +/turf/open/floor/wood/large, +/area/station/cargo/boutique) +"ccZ" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/service/chapel) +"cdi" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 6 + }, +/obj/effect/turf_decal/trimline/yellow/filled/warning{ + dir = 6 + }, +/obj/structure/table, +/obj/item/reagent_containers/cup/soda_cans/cola{ + pixel_x = -6; + pixel_y = 12 + }, +/obj/item/screwdriver, +/turf/open/floor/iron, +/area/station/engineering/lobby) +"cdk" = ( +/turf/open/floor/iron/kitchen, +/area/station/service/kitchen) +"cdl" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/science/cytology) +"cdo" = ( +/obj/machinery/elevator_control_panel/directional/south{ + linked_elevator_id = "aisat"; + pixel_x = 8; + pixel_y = -34 + }, +/obj/machinery/lift_indicator/directional/south{ + pixel_x = -6; + pixel_y = -40; + linked_elevator_id = "aisat" + }, +/obj/machinery/light/small/dim/directional/north, +/obj/structure/cable/layer3, +/turf/open/floor/iron/dark/telecomms, +/area/station/tcommsat/server) +"cdI" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/engineering/gravity_generator) +"cdQ" = ( +/obj/structure/cable, +/obj/effect/landmark/blobstart, +/obj/effect/mapping_helpers/burnt_floor, +/obj/effect/decal/cleanable/blood/old, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"cdV" = ( +/obj/structure/stairs/east, +/turf/open/floor/iron/stairs/medium{ + dir = 8 + }, +/area/station/medical/storage) +"cdW" = ( +/obj/structure/table/wood, +/obj/machinery/fax/auto_name, +/turf/open/floor/wood/parquet, +/area/station/service/library) +"cdX" = ( +/obj/machinery/computer/accounting{ + dir = 8 + }, +/obj/effect/turf_decal/siding/dark_blue{ + dir = 8 + }, +/obj/structure/cable, +/obj/machinery/light/warm/dim/directional/east, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/command/heads_quarters/hop) +"cef" = ( +/obj/machinery/door/airlock/external, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 1 + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/external, +/turf/open/floor/plating, +/area/station/maintenance/department/bridge) +"ceg" = ( +/obj/effect/landmark/start/roboticist, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark/textured, +/area/station/science/robotics/lab) +"cem" = ( +/turf/closed/wall, +/area/station/security/prison/safe) +"ceu" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, +/obj/effect/turf_decal/stripes{ + dir = 8 + }, +/obj/machinery/light/directional/west, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"ceB" = ( +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/structure/table/glass, +/obj/machinery/light/cold/dim/directional/south, +/turf/open/floor/iron/white, +/area/station/medical/treatment_center) +"ceD" = ( +/obj/structure/bookcase/random/nonfiction, +/turf/open/floor/wood, +/area/station/service/library) +"ceF" = ( +/obj/structure/table, +/obj/item/paper_bin/carbon, +/obj/machinery/light_switch/directional/east, +/turf/open/floor/iron/dark, +/area/station/medical/morgue) +"ceN" = ( +/obj/item/wallframe/apc, +/turf/open/misc/asteroid, +/area/station/asteroid) +"ceZ" = ( +/obj/effect/spawner/random/structure/closet_maintenance, +/obj/effect/spawner/random/maintenance, +/obj/effect/decal/cleanable/dirt, +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"cfv" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/obj/effect/landmark/start/hangover, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"cfG" = ( +/obj/structure/cable, +/obj/machinery/power/terminal, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/camera/autoname/directional/east, +/turf/open/floor/plating, +/area/station/maintenance/solars/starboard/fore) +"cfJ" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 4 + }, +/obj/machinery/airalarm/directional/east, +/turf/open/floor/iron, +/area/station/engineering/main) +"cfM" = ( +/obj/machinery/door/airlock/grunge{ + name = "Cell 3" + }, +/turf/open/floor/iron/dark, +/area/station/security/prison/safe) +"cfO" = ( +/obj/machinery/power/smes{ + charge = 5e+006 + }, +/obj/structure/cable, +/obj/machinery/light/directional/north, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/engineering/gravity_generator) +"cgj" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/yellow/filled/line, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/landmark/event_spawn, +/turf/open/floor/iron/textured, +/area/station/medical/pharmacy) +"cgo" = ( +/obj/effect/mapping_helpers/airlock/access/all/command/general, +/obj/machinery/door/airlock/command{ + name = "Bridge" + }, +/obj/structure/cable, +/obj/effect/landmark/navigate_destination/bridge, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "bridgec" + }, +/turf/open/floor/iron, +/area/station/command/bridge) +"cgr" = ( +/obj/effect/turf_decal/siding/white{ + dir = 8 + }, +/turf/open/floor/iron/herringbone, +/area/station/commons/fitness/recreation) +"cgu" = ( +/obj/machinery/duct, +/turf/open/misc/asteroid, +/area/station/asteroid) +"cgw" = ( +/obj/machinery/disposal/bin{ + desc = "A pneumatic waste disposal unit. This one leads into space!"; + name = "deathsposal unit" + }, +/obj/effect/turf_decal/tile/green/half/contrasted{ + dir = 4 + }, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/station/medical/virology) +"cgB" = ( +/obj/structure/closet/l3closet, +/obj/effect/turf_decal/tile/green/anticorner/contrasted{ + dir = 4 + }, +/obj/machinery/camera/autoname/directional/east{ + network = list("ss13","medbay") + }, +/turf/open/floor/iron/white, +/area/station/medical/virology) +"chm" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/white/smooth_large, +/area/station/science/robotics/lab) +"cho" = ( +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 8 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/turf/open/floor/iron, +/area/station/cargo/lobby) +"chF" = ( +/obj/machinery/newscaster/directional/east, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment, +/turf/open/floor/wood/large, +/area/station/cargo/boutique) +"chU" = ( +/obj/effect/turf_decal/tile/red/diagonal_edge, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/security/warden) +"chV" = ( +/obj/structure/stairs/west, +/turf/open/floor/iron/stairs/right{ + dir = 4 + }, +/area/station/engineering/main) +"chW" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 8 + }, +/obj/machinery/light/directional/west, +/turf/open/floor/iron/white, +/area/station/hallway/secondary/entry) +"cie" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/port/greater) +"cik" = ( +/obj/effect/turf_decal/tile/dark_green/opposingcorners, +/obj/machinery/light_switch/directional/south, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/hallway/secondary/service) +"cis" = ( +/turf/open/floor/iron/textured_large, +/area/station/cargo/lobby) +"ciw" = ( +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 4 + }, +/obj/machinery/light/small/directional/east, +/obj/effect/landmark/start/depsec/supply, +/turf/open/floor/iron, +/area/station/security/checkpoint/supply) +"ciy" = ( +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 4 + }, +/obj/machinery/airalarm/directional/east, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/security/warden) +"ciA" = ( +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 1 + }, +/obj/machinery/digital_clock/directional/north, +/turf/open/floor/iron, +/area/station/security) +"ciE" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/station/engineering/main) +"ciF" = ( +/obj/machinery/shower/directional/south{ + name = "emergency shower" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/obj/effect/turf_decal/trimline/dark_blue/end, +/turf/open/floor/iron/textured, +/area/station/engineering/atmos) +"ciR" = ( +/obj/structure/transport/linear/public{ + icon = 'icons/obj/smooth_structures/catwalk.dmi'; + base_icon_state = "catwalk"; + icon_state = "catwalk-8" + }, +/turf/open/openspace, +/area/station/ai_monitored/turret_protected/aisat_interior) +"ciV" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/turf/open/floor/iron/white/textured_corner{ + dir = 4 + }, +/area/station/science/xenobiology) +"ciY" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"cjp" = ( +/obj/effect/spawner/random/structure/grille, +/turf/open/floor/plating, +/area/station/maintenance/central/greater) +"cjV" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, +/obj/effect/turf_decal/delivery, +/turf/open/floor/iron/dark, +/area/station/engineering/supermatter/room) +"ckc" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/grass, +/area/station/security/prison/garden) +"ckn" = ( +/obj/machinery/light/warm/directional/north, +/turf/open/floor/grass, +/area/station/service/hydroponics/garden) +"cku" = ( +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/plating, +/area/station/science/xenobiology) +"ckH" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 4 + }, +/obj/structure/tank_holder/extinguisher, +/turf/open/floor/iron/white, +/area/station/medical/treatment_center) +"ckK" = ( +/obj/effect/landmark/start/depsec/engineering, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/landmark/event_spawn, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/engineering) +"ckZ" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"clb" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/item/radio/intercom/directional/west, +/obj/machinery/camera/autoname/directional/east, +/turf/open/floor/engine, +/area/station/command/heads_quarters/captain/private) +"clG" = ( +/obj/machinery/duct, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/door/airlock/multi_tile/public/glass{ + name = "Restrooms" + }, +/obj/machinery/door/firedoor, +/turf/open/floor/iron/freezer, +/area/station/commons/toilet/restrooms) +"clM" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/table, +/obj/item/storage/box/hug/medical, +/turf/open/floor/iron, +/area/station/hallway/secondary/exit/departure_lounge) +"clQ" = ( +/obj/effect/spawner/structure/window/reinforced/plasma, +/obj/machinery/door/poddoor/preopen{ + id = "rdoffice"; + name = "Research Director's Shutters" + }, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/command/heads_quarters/rd) +"clX" = ( +/obj/machinery/seed_extractor, +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/turf/open/floor/iron/textured_large, +/area/station/service/hydroponics/garden) +"clY" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"cmf" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/structure/railing/corner/end, +/obj/effect/turf_decal/trimline/purple/arrow_cw{ + dir = 5 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"cmn" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/station/science/ordnance) +"cmw" = ( +/obj/machinery/fax{ + fax_name = "Service Hallway"; + name = "Service Fax Machine" + }, +/obj/effect/turf_decal/tile/dark_green/opposingcorners, +/obj/structure/table, +/turf/open/floor/iron, +/area/station/hallway/secondary/service) +"cmZ" = ( +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/maintenance/department/engine) +"cnm" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/wood, +/area/station/service/theater) +"cno" = ( +/obj/effect/turf_decal/tile/yellow{ + dir = 1 + }, +/obj/machinery/firealarm/directional/west, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) +"cnt" = ( +/obj/machinery/requests_console/directional/east{ + department = "Xenobiology"; + name = "Xenobiology Requests Console" + }, +/obj/effect/mapping_helpers/requests_console/ore_update, +/turf/open/floor/iron/dark, +/area/station/science/xenobiology) +"cnS" = ( +/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/engineering/atmos) +"cnZ" = ( +/obj/machinery/airalarm/directional/east, +/turf/open/floor/iron/dark/side{ + dir = 6 + }, +/area/station/command/corporate_dock) +"com" = ( +/obj/machinery/atmospherics/components/trinary/filter/atmos/n2o{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/engineering/atmos) +"cor" = ( +/obj/machinery/door/poddoor{ + id = "QMLoaddoor"; + name = "Supply Dock Loading Door" + }, +/obj/machinery/conveyor{ + dir = 8; + id = "QMLoad" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/turf/open/floor/plating, +/area/station/cargo/storage) +"cou" = ( +/obj/machinery/door/airlock/highsecurity{ + name = "Blast Chamber" + }, +/obj/effect/mapping_helpers/airlock/access/all/medical/chemistry, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/door/firedoor, +/turf/open/floor/engine, +/area/station/medical/chemistry) +"coQ" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/commons/locker) +"cpw" = ( +/obj/structure/cable, +/turf/open/floor/iron/white, +/area/station/science/research) +"cpB" = ( +/turf/closed/wall/r_wall, +/area/station/security/medical) +"cpF" = ( +/obj/effect/spawner/random/structure/closet_maintenance, +/obj/effect/spawner/random/maintenance, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/department/engine) +"cpG" = ( +/turf/closed/wall/r_wall, +/area/station/engineering/storage) +"cpJ" = ( +/obj/machinery/air_sensor/ordnance_freezer_chamber, +/obj/machinery/atmospherics/pipe/heat_exchanging/simple/layer2{ + dir = 8 + }, +/turf/open/floor/iron/dark/airless, +/area/station/science/ordnance) +"cpO" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/security/office) +"cpZ" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/hallway/secondary/exit/departure_lounge) +"cqd" = ( +/obj/structure/sign/departments/holy/directional/east, +/obj/effect/turf_decal/tile/neutral/half{ + dir = 4 + }, +/turf/open/floor/iron/edge{ + dir = 4 + }, +/area/station/hallway/secondary/exit/departure_lounge) +"cqf" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/dark, +/area/station/science/ordnance) +"cqm" = ( +/obj/structure/cable, +/obj/machinery/camera/autoname/directional/south{ + network = list("minisat") + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/aisat/foyer) +"cqt" = ( +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 8 + }, +/obj/effect/turf_decal/bot, +/obj/machinery/button/door/directional/east{ + name = "shutter control"; + id = "ordauxgarage" + }, +/turf/open/floor/plating, +/area/station/science/ordnance) +"cqH" = ( +/obj/structure/transit_tube, +/obj/structure/lattice, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/space/basic, +/area/space/nearstation) +"cqJ" = ( +/obj/structure/table, +/obj/item/healthanalyzer, +/obj/item/reagent_containers/hypospray/medipen, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/turf/open/floor/iron/white/smooth_corner, +/area/station/medical/exam_room) +"cqQ" = ( +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"cqU" = ( +/obj/effect/landmark/navigate_destination/disposals, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/turf/open/floor/plating, +/area/station/maintenance/disposal) +"crb" = ( +/obj/machinery/door/poddoor/shutters/window{ + id = "armory"; + name = "Armory Shutters" + }, +/obj/effect/turf_decal/tile/red/opposingcorners, +/obj/effect/turf_decal/tile/blue/opposingcorners{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/security/armory) +"crg" = ( +/obj/effect/turf_decal/trimline/blue/corner{ + dir = 1 + }, +/turf/open/floor/iron/white, +/area/station/medical/medbay/lobby) +"cro" = ( +/obj/structure/girder/reinforced, +/obj/structure/grille, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"crq" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/window/left/directional/north{ + req_access = list("pharmacy") + }, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 1; + id = "pharmacy_shutters"; + name = "Pharmacy Shutters" + }, +/obj/structure/desk_bell{ + pixel_x = -8 + }, +/obj/item/folder/white{ + pixel_x = 4; + pixel_y = -3 + }, +/obj/machinery/door/firedoor, +/turf/open/floor/iron/white, +/area/station/medical/pharmacy) +"crr" = ( +/obj/effect/turf_decal/siding/white{ + dir = 6 + }, +/obj/effect/spawner/random/structure/table, +/obj/item/paper_bin{ + pixel_x = -2; + pixel_y = 8 + }, +/obj/item/pen, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/herringbone, +/area/station/hallway/primary/central) +"crz" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 5 + }, +/turf/open/floor/iron/white, +/area/station/medical/treatment_center) +"crD" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/obj/machinery/navbeacon{ + codes_txt = "patrol;next_patrol=P6-Central-Primary"; + location = "P5-Central-Primary" + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"crU" = ( +/turf/closed/wall, +/area/station/maintenance/port/lesser) +"csf" = ( +/obj/machinery/chem_master, +/obj/effect/turf_decal/bot_red, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/iron/white/textured_half, +/area/station/science/xenobiology) +"csj" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light/small/directional/north, +/turf/open/floor/iron/dark, +/area/station/maintenance/department/engine) +"csl" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/sand/plating, +/obj/effect/turf_decal/stripes/asteroid/line{ + dir = 8 + }, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"csq" = ( +/obj/structure/chair/sofa/bench, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"csr" = ( +/obj/structure/cable, +/obj/effect/mapping_helpers/burnt_floor, +/obj/machinery/light_switch/directional/west, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/wood, +/area/station/security/detectives_office/private_investigators_office) +"csu" = ( +/obj/structure/cable, +/obj/structure/closet/l3closet/scientist, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/item/radio/intercom/directional/south, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/white/textured_large, +/area/station/science/xenobiology) +"csB" = ( +/obj/structure/cable, +/obj/effect/landmark/start/station_engineer, +/obj/effect/landmark/event_spawn, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/engineering/break_room) +"csH" = ( +/obj/structure/railing/corner{ + dir = 1 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/engineering/atmos/upper) +"csW" = ( +/turf/open/floor/carpet/executive, +/area/station/command/heads_quarters/captain/private) +"ctf" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/rack, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/iron/white, +/area/station/maintenance/department/medical) +"cti" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/obj/machinery/space_heater, +/obj/structure/window/reinforced/spawner/directional/west, +/obj/item/radio/intercom/directional/south, +/turf/open/floor/iron/large, +/area/station/engineering/atmos/upper) +"cts" = ( +/turf/closed/wall/rock/porous, +/area/station/medical/chemistry/minisat) +"ctv" = ( +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 8 + }, +/obj/structure/table, +/obj/item/stack/sheet/glass/fifty, +/obj/item/stack/sheet/iron/fifty, +/obj/item/stack/sheet/iron/fifty, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/construction/mining/aux_base) +"ctE" = ( +/obj/machinery/door/airlock/research{ + name = "Research Division Access" + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "sci-entrance" + }, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 4 + }, +/obj/machinery/door/firedoor, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/access/all/science/general, +/turf/open/floor/iron/white, +/area/station/science/research) +"ctL" = ( +/obj/structure/window/reinforced/spawner/directional/west, +/obj/structure/cable, +/turf/open/floor/glass/reinforced, +/area/station/security/prison) +"ctP" = ( +/obj/machinery/computer/slot_machine, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/grimy, +/area/station/maintenance/central/lesser) +"cuj" = ( +/obj/item/trash/shrimp_chips, +/turf/open/floor/plating, +/area/station/maintenance/department/engine) +"cuq" = ( +/obj/effect/turf_decal/tile/dark_red/opposingcorners, +/obj/structure/closet/secure_closet/bar, +/obj/item/storage/photo_album/bar, +/obj/machinery/camera/autoname/directional/north, +/obj/machinery/airalarm/directional/west, +/turf/open/floor/iron/dark, +/area/station/service/bar/backroom) +"cut" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/structure/chair/office, +/turf/open/floor/iron/dark, +/area/station/science/ordnance) +"cuz" = ( +/obj/machinery/power/terminal{ + dir = 8 + }, +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) +"cuA" = ( +/obj/machinery/portable_atmospherics/canister, +/turf/open/floor/iron/white/smooth_large, +/area/station/science/ordnance/storage) +"cuE" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/chair/plastic{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 9 + }, +/turf/open/floor/iron/white, +/area/station/medical/chemistry/minisat) +"cuH" = ( +/mob/living/basic/mouse/brown/tom, +/obj/structure/cable, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/security/prison/safe) +"cvn" = ( +/obj/structure/closet/emcloset, +/obj/machinery/light/small/dim/directional/east, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"cvL" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/green/visible, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"cvT" = ( +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/plating, +/area/station/maintenance/aft/upper) +"cvX" = ( +/obj/machinery/airalarm/directional/north, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/engineering/atmos/upper) +"cvZ" = ( +/obj/machinery/door/firedoor, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"cwb" = ( +/obj/structure/table/wood, +/obj/effect/turf_decal/siding/dark{ + dir = 8 + }, +/turf/open/floor/wood/tile, +/area/station/service/chapel) +"cwc" = ( +/obj/effect/turf_decal/tile/red/opposingcorners, +/obj/machinery/firealarm/directional/east, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/white, +/area/station/security/prison/mess) +"cwk" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/turf/open/floor/plating, +/area/station/maintenance/port/lesser) +"cwq" = ( +/turf/open/floor/iron/dark, +/area/station/command/corporate_showroom) +"cwt" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 6 + }, +/turf/open/floor/wood, +/area/station/service/theater) +"cwB" = ( +/obj/machinery/computer/order_console/mining, +/obj/effect/turf_decal/tile/brown/anticorner/contrasted{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/cargo/miningoffice) +"cwD" = ( +/obj/effect/spawner/random/maintenance, +/obj/structure/rack, +/turf/open/floor/plating, +/area/station/maintenance/central/lesser) +"cxr" = ( +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/east, +/turf/open/floor/iron/dark/textured_large, +/area/station/security/interrogation) +"cxz" = ( +/obj/machinery/door/poddoor/incinerator_atmos_main, +/turf/open/floor/engine, +/area/station/maintenance/disposal/incinerator) +"cxD" = ( +/mob/living/basic/cow{ + name = "Betsy"; + real_name = "Betsy" + }, +/turf/open/floor/grass, +/area/station/service/hydroponics/garden) +"cxH" = ( +/obj/machinery/door/poddoor/shutters/window/preopen{ + name = "Security Shutters"; + id = "xbprotect3"; + dir = 8 + }, +/obj/machinery/button/door/directional/north{ + id = "xbprotect3"; + name = "shutter control" + }, +/obj/effect/turf_decal/caution/stand_clear{ + dir = 4 + }, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark/textured_large, +/area/station/science/xenobiology) +"cxN" = ( +/obj/machinery/camera/directional/west{ + c_tag = "Atmospherics Tank - Mixing" + }, +/turf/open/floor/engine/vacuum, +/area/station/engineering/atmos) +"cya" = ( +/obj/machinery/computer/operating{ + dir = 4 + }, +/obj/machinery/camera/autoname/directional/west{ + network = list("ss13","rd") + }, +/turf/open/floor/iron/white/smooth_large, +/area/station/science/robotics/lab) +"cye" = ( +/obj/effect/turf_decal/tile/brown{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/station/cargo/lobby) +"cyw" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/iron/white/smooth_large, +/area/station/medical/medbay/central) +"cyF" = ( +/obj/machinery/camera/autoname/directional/east, +/obj/effect/turf_decal/tile/neutral, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"cyS" = ( +/obj/effect/turf_decal/tile/red/fourcorners, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/security/brig) +"cyT" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/structure/table, +/obj/effect/spawner/random/decoration/ornament, +/obj/machinery/newscaster/directional/west, +/turf/open/floor/iron, +/area/station/hallway/secondary/exit/departure_lounge) +"czh" = ( +/obj/machinery/atmospherics/pipe/smart/manifold/purple/visible{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/science/ordnance) +"czD" = ( +/obj/item/stack/tile/iron/white, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/medical/chemistry/minisat) +"czO" = ( +/obj/effect/turf_decal/siding/white{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/herringbone, +/area/station/hallway/primary/central) +"czT" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/item/radio/intercom/directional/west, +/turf/open/floor/iron/dark, +/area/station/medical/chemistry/minisat) +"czW" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/hallway/secondary/exit/departure_lounge) +"czY" = ( +/obj/machinery/light/directional/west, +/turf/open/floor/engine, +/area/station/science/xenobiology) +"cAa" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 5 + }, +/turf/open/floor/wood, +/area/station/service/theater) +"cAg" = ( +/obj/machinery/duct, +/obj/effect/landmark/start/botanist, +/turf/open/floor/iron, +/area/station/service/hydroponics) +"cAr" = ( +/obj/structure/cable, +/obj/machinery/button/door/directional/north{ + id = "chimpcon1"; + name = "anti-chimp protection control" + }, +/turf/open/floor/iron/white/smooth_edge, +/area/station/science/research) +"cAv" = ( +/obj/machinery/door/airlock/maintenance_hatch, +/obj/effect/mapping_helpers/airlock/access/all/supply/general, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/plating, +/area/station/cargo/storage) +"cAy" = ( +/obj/structure/table/glass, +/obj/item/flatpack{ + board = /obj/item/circuitboard/machine/flatpacker; + pixel_x = -5 + }, +/obj/item/multitool{ + pixel_x = 8 + }, +/turf/open/floor/iron, +/area/station/engineering/lobby) +"cAC" = ( +/obj/effect/turf_decal/stripes/end{ + dir = 4 + }, +/turf/open/floor/plating/airless, +/area/station/science/ordnance/bomb) +"cAQ" = ( +/obj/vehicle/sealed/mecha/ripley/cargo, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/siding/brown{ + dir = 10 + }, +/turf/open/floor/iron/recharge_floor, +/area/station/cargo/storage) +"cBb" = ( +/turf/closed/wall, +/area/station/medical/paramedic) +"cBh" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/dark_blue/half/contrasted{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/command/bridge) +"cBj" = ( +/obj/structure/disposalpipe/segment, +/turf/open/floor/wood, +/area/station/commons/lounge) +"cBr" = ( +/obj/effect/turf_decal/tile/neutral, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"cBt" = ( +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/maintenance/department/engine) +"cBz" = ( +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/cargo/storage) +"cBB" = ( +/obj/machinery/airalarm/directional/east, +/obj/structure/table/reinforced, +/obj/item/storage/toolbox/mechanical, +/obj/item/clothing/head/utility/welding, +/obj/effect/turf_decal/siding/purple{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/science/robotics/mechbay) +"cBD" = ( +/obj/machinery/door/airlock/grunge{ + name = "Prison Forestry" + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/security/prison/garden) +"cCb" = ( +/obj/structure/lattice/catwalk, +/turf/open/openspace, +/area/station/science/genetics) +"cCj" = ( +/obj/machinery/shower/directional/north, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 6 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/main) +"cCo" = ( +/obj/effect/turf_decal/stripes/line, +/obj/machinery/power/apc/auto_name/directional/south, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark/small, +/area/station/engineering/transit_tube) +"cCv" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/siding/white{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/herringbone, +/area/station/commons/fitness/recreation) +"cCI" = ( +/obj/structure/reagent_dispensers/watertank, +/obj/item/extinguisher, +/obj/effect/turf_decal/bot, +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/obj/item/radio/intercom/directional/north, +/turf/open/floor/iron/dark/textured_large, +/area/station/science/xenobiology) +"cCP" = ( +/obj/effect/turf_decal/trimline/blue/filled/corner{ + dir = 1 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) +"cCQ" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/space_heater, +/obj/machinery/camera/autoname/directional/south, +/turf/open/floor/iron/large, +/area/station/engineering/atmos/upper) +"cDl" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 1 + }, +/obj/item/radio/intercom/directional/north, +/turf/open/floor/iron/white, +/area/station/hallway/secondary/entry) +"cDD" = ( +/turf/closed/wall, +/area/station/medical/psychology) +"cDM" = ( +/obj/structure/table, +/obj/item/clothing/gloves/latex, +/obj/item/clothing/mask/surgical, +/obj/effect/turf_decal/tile/blue/anticorner/contrasted{ + dir = 1 + }, +/obj/structure/extinguisher_cabinet/directional/north, +/turf/open/floor/iron/white, +/area/station/security/medical) +"cDQ" = ( +/obj/effect/turf_decal/siding/purple{ + dir = 1 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron/white/smooth_large, +/area/station/science/research) +"cDV" = ( +/obj/structure/window/reinforced/spawner/directional/north, +/obj/effect/turf_decal/stripes/red/line{ + dir = 6 + }, +/turf/open/floor/iron/dark, +/area/station/medical/morgue) +"cEc" = ( +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) +"cEf" = ( +/obj/structure/cable, +/obj/effect/turf_decal/tile/dark_blue/half/contrasted, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/station/hallway/secondary/command) +"cEh" = ( +/obj/effect/turf_decal/stripes, +/turf/open/floor/engine, +/area/station/engineering/atmospherics_engine) +"cEr" = ( +/obj/structure/chair/sofa/bench/right{ + dir = 1 + }, +/obj/effect/landmark/start/prisoner, +/turf/open/floor/iron, +/area/station/security/prison) +"cEt" = ( +/obj/effect/mapping_helpers/burnt_floor, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"cEy" = ( +/obj/structure/cable, +/obj/effect/landmark/event_spawn, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/white, +/area/station/medical/paramedic) +"cEG" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/maintenance/aft/upper) +"cES" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/structure/table/reinforced, +/obj/item/book/manual/wiki/robotics_cyborgs, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/aisat/foyer) +"cEV" = ( +/obj/machinery/light_switch/directional/north, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/carpet/blue, +/area/station/command/heads_quarters/cmo) +"cFc" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/engineering/lobby) +"cFq" = ( +/obj/effect/turf_decal/box/white{ + color = "#EFB341" + }, +/turf/open/floor/engine, +/area/station/engineering/atmospherics_engine) +"cFH" = ( +/obj/effect/turf_decal/tile/blue/half/contrasted, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/white, +/area/station/medical/medbay/lobby) +"cFK" = ( +/obj/machinery/door/airlock/security, +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/all/security/armory, +/turf/open/floor/iron, +/area/station/security/warden) +"cGl" = ( +/obj/effect/decal/cleanable/blood/gibs/old, +/turf/open/misc/asteroid, +/area/station/asteroid) +"cGr" = ( +/obj/structure/chair/office, +/obj/effect/landmark/start/chemist, +/turf/open/floor/iron/white/smooth_corner{ + dir = 1 + }, +/area/station/medical/pharmacy) +"cGs" = ( +/obj/effect/turf_decal/sand/plating, +/obj/machinery/light/small/directional/north, +/turf/open/floor/plating, +/area/station/cargo/storage) +"cGP" = ( +/obj/structure/closet/secure_closet/medical1, +/obj/effect/turf_decal/bot{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/command/gateway) +"cHe" = ( +/obj/effect/turf_decal/stripes{ + dir = 8 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable/layer1, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"cHh" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/engine, +/area/station/command/corporate_dock) +"cHn" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners{ + dir = 1 + }, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/command/heads_quarters/rd) +"cHp" = ( +/obj/machinery/door/airlock/command{ + name = "Quartermaster's Office" + }, +/obj/effect/mapping_helpers/airlock/access/all/supply/qm, +/obj/machinery/door/firedoor, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/carpet/red, +/area/station/command/heads_quarters/qm) +"cHs" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, +/obj/machinery/door/airlock/maintenance_hatch, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 8 + }, +/obj/effect/turf_decal/sand/plating, +/turf/open/floor/plating, +/area/station/hallway/secondary/entry) +"cHt" = ( +/obj/effect/turf_decal/stripes{ + dir = 4 + }, +/turf/open/floor/engine, +/area/station/engineering/atmospherics_engine) +"cHu" = ( +/obj/item/reagent_containers/spray/plantbgone, +/obj/item/reagent_containers/spray/pestspray{ + pixel_x = 3; + pixel_y = 4 + }, +/obj/item/reagent_containers/cup/bottle/nutrient/ez, +/obj/item/reagent_containers/cup/bottle/nutrient/rh{ + pixel_x = 2; + pixel_y = 1 + }, +/obj/structure/table, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/light/small/directional/west, +/turf/open/floor/iron/textured_large, +/area/station/service/hydroponics/garden) +"cHx" = ( +/obj/structure/railing, +/obj/machinery/door/firedoor/border_only, +/obj/effect/turf_decal/tile/brown/anticorner/contrasted{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/cargo/storage) +"cHP" = ( +/turf/open/floor/circuit/green/telecomms/mainframe, +/area/station/tcommsat/server) +"cHV" = ( +/obj/effect/mapping_helpers/burnt_floor, +/obj/structure/broken_flooring/side/directional/north, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/hallway/primary/central) +"cIa" = ( +/obj/machinery/power/apc/auto_name/directional/north, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/department/bridge) +"cIh" = ( +/obj/structure/cable, +/obj/effect/mapping_helpers/broken_floor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"cIi" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/plating, +/area/station/maintenance/department/medical) +"cIx" = ( +/obj/machinery/atmospherics/components/unary/outlet_injector/monitored/mix_input{ + dir = 4 + }, +/turf/open/floor/engine/vacuum, +/area/station/engineering/atmos) +"cIE" = ( +/obj/effect/turf_decal/siding/purple{ + dir = 6 + }, +/obj/item/kirbyplants/random, +/turf/open/floor/iron/white/smooth_large, +/area/station/science/research) +"cIN" = ( +/obj/structure/barricade/wooden/crude, +/turf/open/misc/asteroid, +/area/station/maintenance/port/greater) +"cIV" = ( +/obj/machinery/computer/security/labor{ + dir = 8 + }, +/obj/effect/turf_decal/tile/red/anticorner/contrasted, +/obj/item/radio/intercom/directional/east, +/obj/machinery/light_switch/directional/south, +/turf/open/floor/iron/textured, +/area/station/security/processing) +"cJh" = ( +/obj/effect/turf_decal/trimline/blue/filled/line, +/obj/structure/cable, +/obj/effect/landmark/event_spawn, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/item/radio/intercom/directional/south, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/station/medical/paramedic) +"cJx" = ( +/obj/structure/closet/crate/preopen, +/obj/effect/spawner/random/engineering/flashlight, +/obj/effect/spawner/random/engineering/flashlight, +/obj/item/storage/toolbox/emergency, +/obj/item/stack/medical/bruise_pack, +/obj/item/storage/belt/utility, +/obj/effect/turf_decal/bot{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/command/gateway) +"cJC" = ( +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 4 + }, +/obj/structure/railing{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/cargo/lobby) +"cJL" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/landmark/event_spawn, +/turf/open/floor/iron/white, +/area/station/medical/chemistry) +"cJO" = ( +/obj/structure/cable, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"cJT" = ( +/obj/structure/closet/firecloset, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"cJZ" = ( +/obj/structure/railing, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 1 + }, +/turf/open/floor/iron/textured, +/area/station/security) +"cKc" = ( +/turf/closed/wall, +/area/station/maintenance/aft/upper) +"cKn" = ( +/turf/closed/wall, +/area/station/security/prison/garden) +"cKo" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/visible, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/engineering/atmos) +"cLd" = ( +/obj/machinery/oven/range, +/obj/machinery/light/directional/north, +/turf/open/floor/iron/kitchen, +/area/station/service/kitchen) +"cLf" = ( +/turf/open/space/basic, +/area/space) +"cLm" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/spawner/random/trash/mess, +/obj/effect/spawner/random/engineering/tracking_beacon, +/turf/open/floor/plating, +/area/station/maintenance/disposal) +"cLs" = ( +/obj/machinery/atmospherics/components/binary/pump{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/engineering/atmos) +"cLx" = ( +/obj/machinery/door/airlock/security{ + aiControlDisabled = 1; + id_tag = "prisonereducation"; + name = "Prisoner Education Chamber" + }, +/obj/effect/mapping_helpers/airlock/access/all/security/armory, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/security/execution/education) +"cLA" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/turf/open/floor/carpet/orange, +/area/station/service/theater) +"cLD" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/white, +/area/station/command/heads_quarters/cmo) +"cLI" = ( +/obj/effect/mapping_helpers/burnt_floor, +/obj/effect/spawner/random/structure/closet_empty/crate/with_loot, +/turf/open/floor/plating, +/area/station/maintenance/central/greater) +"cLS" = ( +/obj/item/stack/cable_coil/five, +/turf/open/floor/plating/airless, +/area/station/solars/starboard/fore) +"cLW" = ( +/obj/machinery/door/airlock/external, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 1 + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/external, +/obj/effect/turf_decal/stripes/end, +/turf/open/floor/plating, +/area/station/maintenance/department/engine) +"cMI" = ( +/obj/machinery/atmospherics/components/binary/pump/on{ + dir = 8; + name = "N2 to Airmix" + }, +/obj/effect/turf_decal/tile/yellow{ + dir = 4 + }, +/turf/open/floor/iron/dark/corner, +/area/station/engineering/atmos) +"cMJ" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/sand/plating, +/turf/open/floor/plating, +/area/station/maintenance/port/greater) +"cMK" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/department/medical) +"cMR" = ( +/obj/structure/safe/floor, +/obj/item/stack/spacecash/c1000, +/obj/item/stack/spacecash/c1000, +/obj/effect/decal/cleanable/blood/old, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/iron, +/area/station/maintenance/department/cargo) +"cMW" = ( +/obj/effect/turf_decal/tile/yellow{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 8 + }, +/obj/effect/turf_decal/bot{ + dir = 1 + }, +/turf/open/floor/iron/checker{ + dir = 4 + }, +/area/station/engineering/atmos/upper) +"cMZ" = ( +/turf/closed/wall/r_wall, +/area/station/science/auxlab/firing_range) +"cNc" = ( +/obj/machinery/atmospherics/components/unary/passive_vent{ + dir = 4 + }, +/obj/structure/lattice, +/turf/open/space/basic, +/area/space/nearstation) +"cNh" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/white/smooth_corner{ + dir = 4 + }, +/area/station/science/xenobiology) +"cNk" = ( +/obj/structure/cable, +/obj/effect/turf_decal/tile/green/half/contrasted{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/door_buttons/airlock_controller{ + idExterior = "virology_airlock_exterior"; + idInterior = "virology_airlock_interior"; + idSelf = "virology_airlock_control"; + name = "Virology Access Console"; + pixel_x = -26; + pixel_y = 28; + req_access = list("virology") + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron/white, +/area/station/medical/virology) +"cNr" = ( +/obj/structure/sink/directional/south, +/obj/structure/mirror/directional/north{ + pixel_y = 35 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/showroomfloor, +/area/station/command/heads_quarters/qm) +"cNG" = ( +/obj/effect/turf_decal/stripes/red/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/medical/morgue) +"cNM" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/engineering/main) +"cNQ" = ( +/obj/machinery/computer/crew, +/obj/effect/turf_decal/tile/green/half/contrasted, +/obj/structure/cable, +/obj/machinery/light/directional/north, +/turf/open/floor/iron/dark, +/area/station/command/bridge) +"cNX" = ( +/obj/structure/table/reinforced, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/structure/desk_bell, +/obj/machinery/door/firedoor, +/turf/open/floor/wood/large, +/area/station/cargo/boutique) +"cOb" = ( +/obj/item/food/grown/banana, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/grass, +/area/station/medical/chemistry) +"cOf" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/effect/mapping_helpers/damaged_window{ + integrity_damage_max = 0.5 + }, +/turf/open/floor/plating, +/area/station/cargo/storage) +"cOp" = ( +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/commons/locker) +"cOC" = ( +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/turf/open/floor/iron/large, +/area/station/service/hydroponics/garden) +"cOD" = ( +/obj/effect/spawner/random/structure/closet_empty/crate, +/obj/effect/spawner/random/maintenance/five, +/turf/open/misc/asteroid, +/area/station/asteroid) +"cOG" = ( +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 8 + }, +/obj/item/radio/intercom/directional/west, +/turf/open/floor/iron, +/area/station/cargo/lobby) +"cOR" = ( +/obj/effect/turf_decal/stripes/line, +/obj/structure/window/reinforced/survival_pod/spawner/directional/south, +/obj/structure/rack, +/obj/item/radio, +/obj/item/radio{ + pixel_x = 2 + }, +/obj/item/radio{ + pixel_x = 5 + }, +/obj/effect/turf_decal/bot{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/command/gateway) +"cOT" = ( +/obj/machinery/light/warm/directional/south, +/turf/open/floor/iron/chapel{ + dir = 8 + }, +/area/station/service/chapel) +"cPc" = ( +/obj/structure/window/reinforced/spawner/directional/south, +/obj/structure/window/reinforced/spawner/directional/north, +/obj/machinery/door/window/brigdoor/right/directional/west{ + req_access = list("command") + }, +/turf/open/floor/iron/recharge_floor, +/area/station/command/bridge) +"cPl" = ( +/obj/docking_port/stationary/escape_pod{ + dir = 4 + }, +/turf/open/space/basic, +/area/space) +"cPo" = ( +/obj/effect/spawner/random/engineering/tracking_beacon, +/turf/open/floor/iron/white/smooth_edge{ + dir = 4 + }, +/area/station/science/research) +"cPt" = ( +/turf/closed/wall/r_wall, +/area/station/science/lab) +"cPx" = ( +/obj/structure/table, +/obj/item/hfr_box/corner, +/obj/item/hfr_box/corner, +/obj/item/hfr_box/corner, +/obj/item/hfr_box/corner, +/obj/item/hfr_box/core, +/obj/machinery/light_switch/directional/south, +/turf/open/floor/iron/dark, +/area/station/engineering/atmospherics_engine) +"cPE" = ( +/obj/machinery/light/small/directional/west, +/turf/open/misc/asteroid, +/area/station/asteroid) +"cPG" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"cPP" = ( +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/security/armory) +"cPQ" = ( +/obj/machinery/atmospherics/pipe/smart/simple/purple/visible{ + dir = 8 + }, +/obj/effect/turf_decal/tile/yellow{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark/corner, +/area/station/engineering/atmos/pumproom) +"cPR" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/spawner/random/trash/janitor_supplies, +/obj/structure/rack, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"cPZ" = ( +/obj/item/radio/intercom/directional/west, +/turf/open/floor/engine, +/area/station/medical/chemistry) +"cQa" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/sorting/mail/flip{ + dir = 1 + }, +/obj/structure/cable, +/obj/effect/mapping_helpers/mail_sorting/supply/qm_office, +/turf/open/floor/iron, +/area/station/cargo/storage) +"cQg" = ( +/obj/structure/easel, +/obj/effect/decal/cleanable/cobweb/cobweb2, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"cQm" = ( +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/wood/parquet, +/area/station/cargo/boutique) +"cQK" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) +"cQP" = ( +/obj/machinery/computer/records/medical, +/obj/effect/turf_decal/tile/green/anticorner/contrasted, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/command/bridge) +"cQT" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/half{ + dir = 8 + }, +/area/station/service/hydroponics/garden) +"cQU" = ( +/obj/effect/turf_decal/trimline/yellow/filled/warning{ + dir = 8 + }, +/obj/structure/railing{ + dir = 8 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/hallway/secondary/exit/departure_lounge) +"cQX" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/obj/structure/cable, +/turf/open/floor/iron/white, +/area/station/science/ordnance/storage) +"cRa" = ( +/obj/structure/window/reinforced/spawner/directional/south, +/obj/structure/chair/office{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/cable, +/obj/effect/turf_decal/tile/yellow/half/contrasted, +/turf/open/floor/iron, +/area/station/construction/mining/aux_base) +"cRg" = ( +/obj/machinery/atmospherics/components/unary/portables_connector/visible/layer2{ + dir = 4 + }, +/obj/machinery/portable_atmospherics/scrubber, +/obj/effect/turf_decal/delivery, +/obj/effect/turf_decal/tile/neutral/opposingcorners{ + dir = 1 + }, +/obj/machinery/airalarm/directional/west, +/obj/item/wrench{ + pixel_y = 5 + }, +/turf/open/floor/iron, +/area/station/commons/locker) +"cRM" = ( +/obj/machinery/button/curtain{ + id = "chapelc"; + pixel_y = 26 + }, +/turf/open/floor/iron/chapel{ + dir = 1 + }, +/area/station/service/chapel) +"cRT" = ( +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/maintenance/aft/upper) +"cRV" = ( +/obj/structure/table/glass, +/obj/item/assembly/flash/handheld, +/obj/item/assembly/signaler, +/obj/item/electronics/airlock{ + pixel_x = -14 + }, +/obj/effect/turf_decal/tile/purple{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/turf/open/floor/iron/white, +/area/station/science/lobby) +"cSa" = ( +/obj/machinery/power/smes/full, +/obj/machinery/power/apc/auto_name/directional/west, +/obj/structure/cable, +/turf/open/floor/circuit/green/telecomms/mainframe, +/area/station/tcommsat/server) +"cSb" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/catwalk_floor/iron, +/area/station/hallway/secondary/exit/departure_lounge) +"cSd" = ( +/obj/structure/cable, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/engineering/main) +"cSp" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/turf/open/floor/wood, +/area/station/service/theater) +"cSC" = ( +/obj/machinery/pdapainter/engineering, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/command/heads_quarters/ce) +"cSI" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/obj/machinery/portable_atmospherics/scrubber, +/turf/open/floor/iron/dark/smooth_large, +/area/station/science/ordnance) +"cSJ" = ( +/obj/structure/table, +/obj/effect/spawner/random/food_or_drink/snack, +/turf/open/floor/iron, +/area/station/hallway/primary/fore) +"cTa" = ( +/obj/machinery/door/airlock/external, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 1 + }, +/obj/effect/mapping_helpers/airlock/access/any/engineering/external, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"cTb" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/kitchen, +/area/station/service/kitchen) +"cTc" = ( +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 4; + id = "hopdesk" + }, +/obj/machinery/door/firedoor, +/obj/effect/spawner/structure/window/hollow/reinforced/end{ + dir = 1 + }, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/command/heads_quarters/hop) +"cTm" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating/airless, +/area/station/maintenance/department/medical/central) +"cTH" = ( +/obj/structure/table/wood, +/obj/item/storage/box/evidence, +/obj/item/taperecorder, +/obj/machinery/light/small/dim/directional/east, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/wood, +/area/station/security/detectives_office/private_investigators_office) +"cTI" = ( +/obj/structure/bookcase/random/fiction, +/obj/machinery/light/dim/directional/south, +/turf/open/floor/wood, +/area/station/service/library) +"cUe" = ( +/obj/machinery/rnd/production/protolathe/department/science, +/turf/open/floor/iron/white, +/area/station/science/lab) +"cUk" = ( +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron/white, +/area/station/science/lobby) +"cUm" = ( +/obj/effect/turf_decal/stripes/red/corner, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/iron/dark/smooth_large, +/area/station/medical/morgue) +"cUn" = ( +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/machinery/modular_computer/preset/cargochat/medical{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/station/medical/storage) +"cUv" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 4 + }, +/obj/machinery/light/directional/east, +/turf/open/floor/iron/white, +/area/station/hallway/secondary/entry) +"cUD" = ( +/obj/effect/turf_decal/stripes{ + dir = 1 + }, +/obj/structure/sign/warning/engine_safety/directional/north, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"cUN" = ( +/obj/machinery/computer/libraryconsole/bookmanagement{ + dir = 1 + }, +/obj/structure/table/wood, +/obj/structure/window/spawner/directional/south, +/turf/open/floor/wood/parquet, +/area/station/service/library) +"cUP" = ( +/obj/structure/closet/wardrobe/orange, +/obj/effect/turf_decal/tile/red/anticorner/contrasted{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/security) +"cVb" = ( +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + color = "#000000" + }, +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/iron/dark/textured, +/area/station/cargo/bitrunning/den) +"cVh" = ( +/obj/effect/turf_decal/siding/white, +/obj/structure/chair/sofa/bench/left{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/herringbone, +/area/station/hallway/primary/central) +"cVi" = ( +/obj/structure/window/reinforced/spawner/directional/north, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/blood/old, +/obj/effect/spawner/random/structure/chair_flipped, +/turf/open/floor/iron, +/area/station/maintenance/department/cargo) +"cVn" = ( +/obj/structure/cable, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 8 + }, +/obj/machinery/firealarm/directional/west, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/station/engineering/main) +"cVL" = ( +/obj/structure/closet/firecloset, +/turf/open/floor/iron/textured, +/area/station/hallway/primary/starboard) +"cVN" = ( +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/obj/structure/sign/poster/random/directional/south, +/turf/open/floor/plating, +/area/station/maintenance/central/lesser) +"cVW" = ( +/obj/structure/railing/corner, +/obj/structure/ladder, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/asteroid) +"cVX" = ( +/obj/machinery/light/directional/east, +/obj/effect/turf_decal/tile/neutral, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"cWb" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/iron, +/area/station/commons/fitness/recreation) +"cWc" = ( +/obj/structure/sign/poster/official/random/directional/east, +/turf/open/floor/iron/white/smooth_half{ + dir = 8 + }, +/area/station/science/xenobiology) +"cWi" = ( +/obj/structure/toiletbong, +/obj/effect/decal/cleanable/glass, +/obj/item/shard, +/obj/effect/turf_decal/tile/yellow/fourcorners, +/turf/open/floor/iron/white, +/area/station/medical/chemistry/minisat) +"cWr" = ( +/obj/machinery/holopad/secure{ + pixel_x = 1 + }, +/obj/effect/turf_decal/bot, +/obj/effect/landmark/event_spawn, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/ai_upload) +"cWv" = ( +/obj/structure/girder, +/turf/open/floor/plating, +/area/station/maintenance/department/engine) +"cWz" = ( +/obj/machinery/disposal/bin, +/obj/effect/turf_decal/stripes, +/obj/structure/disposalpipe/trunk, +/turf/open/floor/iron/dark/textured, +/area/station/hallway/secondary/exit/departure_lounge) +"cWD" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/machinery/newscaster/directional/north, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/commons/locker) +"cWL" = ( +/turf/open/floor/iron/white/textured_corner{ + dir = 1 + }, +/area/station/science/xenobiology) +"cWX" = ( +/obj/effect/turf_decal/arrows, +/obj/machinery/firealarm/directional/west, +/turf/open/floor/iron, +/area/station/hallway/secondary/exit/departure_lounge) +"cXd" = ( +/obj/effect/turf_decal/trimline/blue/filled/corner{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) +"cXe" = ( +/obj/effect/turf_decal/tile/dark_red/opposingcorners, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/service/bar) +"cXh" = ( +/obj/effect/spawner/random/trash/caution_sign, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/iron/dark, +/area/station/maintenance/department/engine) +"cXn" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/engineering/main) +"cXo" = ( +/obj/structure/barricade/wooden/crude, +/obj/structure/holosign/barrier/atmos, +/turf/open/misc/asteroid, +/area/station/hallway/primary/starboard) +"cXr" = ( +/obj/effect/turf_decal/tile/neutral/diagonal_centre, +/obj/machinery/computer/pod/old/mass_driver_controller/chapelgun{ + pixel_x = 24; + pixel_y = -32 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/service/chapel/funeral) +"cXy" = ( +/obj/effect/turf_decal/stripes{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/light/directional/east, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable/layer1, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"cXL" = ( +/obj/machinery/duct, +/obj/structure/cable, +/obj/machinery/airalarm/directional/south, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/kitchen, +/area/station/service/kitchen) +"cXP" = ( +/obj/machinery/door/airlock/external, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 1 + }, +/obj/effect/decal/cleanable/blood/tracks, +/turf/open/floor/plating/airless, +/area/station/maintenance/department/medical/central) +"cYa" = ( +/obj/effect/landmark/navigate_destination, +/obj/effect/landmark/event_spawn, +/turf/open/floor/iron, +/area/station/engineering/atmos) +"cYs" = ( +/obj/effect/spawner/random/structure/crate, +/obj/effect/spawner/random/maintenance, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/iron, +/area/station/maintenance/department/science) +"cYw" = ( +/obj/machinery/light/directional/south, +/turf/open/openspace, +/area/station/engineering/main) +"cYB" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/turf/open/floor/iron, +/area/station/engineering/main) +"cYC" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 1 + }, +/obj/machinery/light/directional/north, +/turf/open/floor/iron/white, +/area/station/hallway/secondary/entry) +"cYG" = ( +/obj/structure/bed{ + dir = 4 + }, +/obj/item/bedsheet/brown{ + dir = 1 + }, +/obj/machinery/airalarm/directional/north, +/turf/open/floor/carpet/red, +/area/station/security/warden) +"cYH" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/mob/living/basic/goat/pete, +/turf/open/floor/iron/kitchen_coldroom/freezerfloor, +/area/station/service/kitchen) +"cYP" = ( +/obj/effect/landmark/event_spawn, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark/textured, +/area/station/security/interrogation) +"cYS" = ( +/obj/structure/cable, +/obj/machinery/holopad, +/obj/effect/turf_decal/bot, +/turf/open/floor/iron, +/area/station/security/warden) +"cZb" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/command{ + name = "Teleport Access" + }, +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/delivery, +/obj/structure/cable, +/obj/effect/landmark/navigate_destination, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/mapping_helpers/airlock/access/any/command/teleporter, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/station/command/teleporter) +"cZf" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/layer_manifold/dark/visible{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) +"cZi" = ( +/obj/structure/flora/bush/flowers_br/style_random, +/obj/structure/window/spawner/directional/east, +/obj/structure/window/spawner/directional/north, +/turf/open/misc/grass, +/area/station/ai_monitored/turret_protected/aisat/foyer) +"cZp" = ( +/obj/effect/turf_decal/sand/plating, +/turf/open/floor/plating/reinforced/airless, +/area/space/nearstation) +"cZE" = ( +/turf/open/openspace, +/area/station/command/meeting_room) +"dai" = ( +/obj/machinery/power/port_gen/pacman, +/turf/open/floor/plating, +/area/station/maintenance/department/engine) +"daz" = ( +/obj/structure/table, +/obj/item/ai_module/core/full/paladin_devotion, +/obj/structure/cable, +/obj/machinery/flasher/directional/south, +/turf/open/floor/circuit, +/area/station/ai_monitored/turret_protected/ai_upload) +"daK" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/engine, +/area/station/command/corporate_dock) +"daN" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/science/robotics/lab) +"dba" = ( +/obj/structure/cable, +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/security/lockers) +"dbl" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/yellow/filled/corner, +/turf/open/floor/iron, +/area/station/engineering/lobby) +"dbn" = ( +/obj/structure/cable, +/obj/effect/spawner/random/trash/grime, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/maintenance/department/engine) +"dbw" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/wood, +/area/station/commons/lounge) +"dby" = ( +/obj/structure/chair/comfy/brown{ + dir = 8; + name = "Head Of Personnel" + }, +/turf/open/floor/carpet/executive, +/area/station/command/meeting_room) +"dbJ" = ( +/obj/machinery/door/airlock/command/glass{ + name = "Bridge" + }, +/obj/effect/mapping_helpers/airlock/access/any/command/general, +/obj/machinery/door/firedoor, +/obj/structure/cable, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "bridgec" + }, +/obj/effect/mapping_helpers/airlock/access/any/admin/general, +/turf/open/floor/iron, +/area/station/hallway/secondary/command) +"dbN" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/landmark/start/hangover, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"dca" = ( +/obj/structure/railing{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/spawner/random/trash/mess, +/turf/open/floor/iron, +/area/station/maintenance/department/medical/central) +"dcf" = ( +/obj/structure/table/wood, +/obj/structure/railing{ + dir = 9 + }, +/obj/item/radio/intercom{ + broadcasting = 1; + dir = 8; + listening = 0; + name = "Station Intercom (Court)" + }, +/obj/effect/turf_decal/siding/wood{ + dir = 9 + }, +/turf/open/floor/wood/tile, +/area/station/security/courtroom) +"dcg" = ( +/obj/machinery/conveyor_switch/oneway{ + id = "brm" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/sand/plating, +/obj/structure/railing/corner{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/cargo/miningoffice) +"dci" = ( +/obj/effect/turf_decal/tile/blue/fourcorners, +/turf/open/floor/catwalk_floor/flat_white, +/area/station/medical/treatment_center) +"dck" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/iron/white/smooth_half{ + dir = 8 + }, +/area/station/science/xenobiology) +"dcl" = ( +/obj/effect/turf_decal/sand/plating, +/obj/item/pickaxe, +/turf/open/floor/plating/airless, +/area/station/asteroid) +"dcm" = ( +/obj/structure/cable/layer3, +/obj/effect/turf_decal/tile/blue, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/aisat/foyer) +"dco" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"dct" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/yellow{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) +"dcv" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/wood, +/area/station/maintenance/central/lesser) +"dcw" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark/smooth_edge{ + dir = 1 + }, +/area/station/science/xenobiology) +"dcx" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/duct, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/turf/open/floor/iron/white, +/area/station/medical/treatment_center) +"dcH" = ( +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/construction/mining/aux_base) +"dcO" = ( +/obj/machinery/vending/wardrobe/science_wardrobe, +/obj/effect/turf_decal/delivery, +/obj/effect/turf_decal/siding/purple{ + dir = 10 + }, +/obj/structure/sign/poster/random/directional/north, +/turf/open/floor/iron/white/textured_large, +/area/station/science/research) +"dcS" = ( +/obj/effect/turf_decal/tile/red/anticorner/contrasted, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/station/security/brig/entrance) +"dcU" = ( +/obj/effect/turf_decal/tile/neutral, +/obj/machinery/power/apc/auto_name/directional/east, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/commons/fitness/recreation) +"dda" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/plating, +/area/station/commons/vacant_room/commissary) +"ddb" = ( +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/turf/open/floor/plating, +/area/station/commons/vacant_room/commissary) +"ddF" = ( +/obj/machinery/power/apc/auto_name/directional/north, +/obj/structure/cable, +/obj/effect/turf_decal/sand/plating, +/turf/open/floor/plating, +/area/station/maintenance/solars/port/fore) +"ddO" = ( +/obj/effect/turf_decal/stripes{ + dir = 4 + }, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"ddZ" = ( +/obj/machinery/door/window/right/directional/south{ + name = "Research Test Chamber"; + req_access = list("science") + }, +/turf/open/floor/engine, +/area/station/science/explab) +"des" = ( +/obj/structure/closet/lasertag/blue, +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/effect/landmark/start/hangover/closet, +/turf/open/floor/iron, +/area/station/commons/fitness/recreation) +"deV" = ( +/obj/machinery/atmospherics/components/binary/dp_vent_pump/high_volume/incinerator_ordmix, +/turf/open/floor/engine, +/area/station/science/ordnance/burnchamber) +"deX" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 4 + }, +/obj/machinery/door/window/brigdoor/left/directional/east, +/turf/open/floor/engine/airless, +/area/station/engineering/atmos) +"deY" = ( +/obj/effect/turf_decal/tile/neutral, +/obj/machinery/firealarm/directional/east, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"dfd" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/ai_monitored/turret_protected/aisat_interior) +"dfk" = ( +/turf/open/floor/engine, +/area/station/command/heads_quarters/rd) +"dfr" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/iron/white, +/area/station/science/lab) +"dfM" = ( +/turf/open/floor/iron/white, +/area/station/science/research) +"dfW" = ( +/obj/structure/sign/warning/electric_shock/directional/west, +/obj/effect/spawner/random/maintenance, +/obj/effect/turf_decal/stripes/asteroid/corner{ + dir = 1 + }, +/turf/open/misc/asteroid, +/area/station/maintenance/department/cargo) +"dfY" = ( +/obj/effect/turf_decal/tile/red/anticorner/contrasted, +/obj/machinery/airalarm/directional/east, +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/obj/machinery/light_switch/directional/south{ + pixel_x = 26 + }, +/turf/open/floor/iron, +/area/station/security/brig/entrance) +"dga" = ( +/obj/structure/toilet{ + dir = 4 + }, +/obj/machinery/light/small/directional/north, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/service/theater) +"dge" = ( +/obj/effect/turf_decal/tile/neutral/diagonal_centre, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/service/chapel/funeral) +"dgm" = ( +/obj/machinery/atmospherics/components/binary/pump/on{ + dir = 8; + name = "O2 to Airmix" + }, +/obj/effect/turf_decal/tile/yellow{ + dir = 4 + }, +/turf/open/floor/iron/dark/corner, +/area/station/engineering/atmos) +"dgp" = ( +/turf/closed/wall, +/area/station/medical/exam_room) +"dgw" = ( +/obj/effect/turf_decal/tile/red/opposingcorners, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/security/prison/mess) +"dgy" = ( +/obj/structure/plasticflaps/opaque, +/obj/machinery/door/window/right/directional/south{ + req_access = list("medical"); + name = "Medical Deliveries" + }, +/turf/open/floor/plating, +/area/station/medical/storage) +"dgR" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/duct, +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden, +/turf/open/floor/catwalk_floor/flat_white, +/area/station/medical/treatment_center) +"dgS" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/green/half/contrasted, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron/white, +/area/station/medical/virology) +"dgX" = ( +/obj/structure/disposalpipe/junction/flip{ + dir = 8 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) +"dgY" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 4 + }, +/obj/machinery/camera/autoname/directional/east, +/turf/open/floor/iron/white, +/area/station/hallway/secondary/entry) +"dhb" = ( +/obj/effect/spawner/random/vending/snackvend, +/obj/effect/turf_decal/siding/purple, +/obj/machinery/light_switch/directional/south, +/turf/open/floor/iron/white/herringbone, +/area/station/science/breakroom) +"dhg" = ( +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"dhj" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/white, +/area/station/medical/chemistry) +"dhl" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/hallway/secondary/command) +"dhn" = ( +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 8 + }, +/obj/machinery/portable_atmospherics/canister/nitrogen, +/obj/effect/turf_decal/bot{ + dir = 1 + }, +/obj/machinery/light/directional/east, +/turf/open/floor/iron/dark, +/area/station/engineering/supermatter/room) +"dho" = ( +/obj/structure/table/wood, +/obj/item/storage/crayons, +/obj/item/toy/crayon/spraycan{ + pixel_x = -4 + }, +/obj/item/toy/crayon/spraycan{ + pixel_x = -4 + }, +/turf/open/floor/carpet/purple, +/area/station/service/library) +"dht" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/maintenance/port/lesser) +"dhv" = ( +/obj/effect/landmark/start/shaft_miner, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/cargo/miningoffice) +"dhH" = ( +/obj/effect/turf_decal/siding/thinplating_new{ + dir = 1 + }, +/obj/machinery/airalarm/directional/north, +/turf/open/floor/glass/reinforced, +/area/station/engineering/atmos/upper) +"dhN" = ( +/obj/structure/rack, +/obj/item/circuitboard/machine/exoscanner{ + pixel_y = 3 + }, +/obj/item/circuitboard/machine/exoscanner, +/obj/item/circuitboard/machine/exoscanner{ + pixel_y = -3 + }, +/obj/effect/turf_decal/tile/brown/half/contrasted, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/cargo/drone_bay) +"dhO" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/hallway/secondary/exit/departure_lounge) +"dhR" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/rack, +/obj/item/wrench, +/obj/item/knife/kitchen{ + pixel_x = 6; + pixel_y = 2 + }, +/obj/item/soap{ + pixel_y = -2 + }, +/obj/machinery/firealarm/directional/east, +/obj/machinery/light/small/directional/east, +/turf/open/floor/iron/dark/small, +/area/station/science/cytology) +"dic" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/commons/fitness/recreation) +"dij" = ( +/obj/machinery/light/small/dim/directional/west, +/turf/open/misc/asteroid, +/area/station/hallway/secondary/entry) +"dir" = ( +/obj/machinery/door/airlock/research/glass{ + name = "Chemistry Lab" + }, +/obj/effect/mapping_helpers/airlock/access/all/medical/chemistry, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/yellow/filled/line, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/station/medical/chemistry/minisat) +"diz" = ( +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/department/medical) +"diD" = ( +/obj/structure/rack, +/obj/effect/decal/cleanable/dirt/dust, +/obj/item/reagent_containers/blood/random, +/obj/item/reagent_containers/blood{ + pixel_x = -3; + pixel_y = -3 + }, +/turf/open/floor/iron/showroomfloor, +/area/station/maintenance/department/engine) +"diI" = ( +/obj/machinery/light/small/directional/north, +/obj/machinery/computer/security, +/turf/open/floor/carpet, +/area/station/security/detectives_office) +"diM" = ( +/obj/structure/sign/poster/official/random/directional/south, +/obj/effect/turf_decal/tile/yellow{ + dir = 8 + }, +/turf/open/floor/iron/dark/corner, +/area/station/engineering/atmos) +"diZ" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/dark/visible, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/visible/layer2, +/obj/machinery/meter/layer2, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) +"djc" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/vending/wallmed/directional/west, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron/white, +/area/station/medical/treatment_center) +"dje" = ( +/obj/structure/chair/sofa/bench/right{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ + dir = 1 + }, +/obj/machinery/airalarm/directional/east, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/exit/departure_lounge) +"djo" = ( +/obj/item/dice/d2, +/turf/open/floor/plating, +/area/station/maintenance/port/lesser) +"djU" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, +/obj/effect/turf_decal/stripes{ + dir = 9 + }, +/obj/structure/cable, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"djW" = ( +/obj/structure/chair/office{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/engineering/atmos/upper) +"dkj" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/white, +/area/station/medical/treatment_center) +"dkm" = ( +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/hallway/secondary/exit/departure_lounge) +"dko" = ( +/obj/effect/turf_decal/tile/purple/opposingcorners, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/white, +/area/station/science/lobby) +"dkq" = ( +/obj/structure/table/reinforced/rglass, +/obj/machinery/button/door{ + normaldoorcontrol = 1; + specialfunctions = 4; + id = "secentrylock2"; + req_access = list("security"); + name = "Security Exit Lock"; + pixel_x = -4; + pixel_y = -1 + }, +/obj/machinery/button/door{ + normaldoorcontrol = 1; + specialfunctions = 4; + id = "secentrylock"; + pixel_y = 6; + req_access = list("security"); + name = "Security Entrance Lock"; + pixel_x = -4 + }, +/obj/machinery/button/flasher{ + pixel_x = 5; + id = "secentry"; + pixel_y = -1; + name = "entrance flasher button" + }, +/obj/machinery/button/door{ + pixel_x = 5; + pixel_y = 6; + name = "Security Entrance Doors"; + id = "secentrylock"; + normaldoorcontrol = 1 + }, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 4 + }, +/turf/open/floor/iron/textured, +/area/station/security/warden) +"dkr" = ( +/obj/machinery/portable_atmospherics/canister/nitrogen, +/obj/machinery/light/directional/north, +/turf/open/floor/iron/white/smooth_large, +/area/station/science/ordnance/storage) +"dkt" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/turf/open/floor/iron, +/area/station/engineering/main) +"dkv" = ( +/obj/machinery/power/apc/auto_name/directional/north, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 1 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) +"dkC" = ( +/obj/effect/mapping_helpers/airlock/access/all/service/theatre, +/obj/machinery/door/airlock{ + name = "Clown's Backstage Room" + }, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/wood/parquet, +/area/station/service/theater) +"dkN" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/machinery/computer/cargo, +/turf/open/floor/wood, +/area/station/command/heads_quarters/qm) +"dkZ" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 9 + }, +/obj/item/storage/toolbox/emergency, +/obj/structure/table, +/obj/machinery/light_switch/directional/west, +/turf/open/floor/iron/white, +/area/station/medical/paramedic) +"dla" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/stairs/right{ + dir = 1 + }, +/area/station/command/bridge) +"dlp" = ( +/obj/structure/cable, +/obj/effect/turf_decal/tile/green/full, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/obj/machinery/light_switch/directional/north, +/turf/open/floor/iron/white/smooth_large, +/area/station/medical/virology) +"dlE" = ( +/obj/effect/turf_decal/stripes/white/line, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/station/science/ordnance/testlab) +"dlQ" = ( +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/turf/open/floor/iron/stairs/right{ + dir = 8 + }, +/area/station/medical/storage) +"dlY" = ( +/obj/structure/falsewall, +/turf/open/floor/plating, +/area/station/cargo/miningoffice) +"dlZ" = ( +/obj/structure/table/wood, +/obj/effect/spawner/random/entertainment/gambling, +/turf/open/floor/wood, +/area/station/commons/lounge) +"dmj" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 1 + }, +/obj/machinery/light/directional/north, +/obj/machinery/computer/records/security, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/engineering) +"dmo" = ( +/obj/effect/landmark/start/hangover, +/turf/open/floor/iron/white, +/area/station/commons/fitness/recreation) +"dmp" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 9 + }, +/turf/open/floor/iron, +/area/station/engineering/lobby) +"dmx" = ( +/obj/effect/turf_decal/tile/neutral, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"dmE" = ( +/obj/machinery/door/airlock/research{ + name = "Research Division Access" + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "sci-entrance" + }, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 4 + }, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/access/all/science/general, +/turf/open/floor/iron/white, +/area/station/science/research) +"dmH" = ( +/obj/effect/turf_decal/siding/white{ + dir = 4 + }, +/turf/open/floor/iron/herringbone, +/area/station/commons/fitness/recreation) +"dmM" = ( +/obj/machinery/firealarm/directional/north, +/obj/effect/turf_decal/siding/purple{ + dir = 9 + }, +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/turf/open/floor/iron/white/herringbone, +/area/station/science/breakroom) +"dmT" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/white, +/area/station/medical/storage) +"dmW" = ( +/obj/machinery/holopad, +/turf/open/floor/iron, +/area/station/engineering/atmos/storage/gas) +"dni" = ( +/obj/machinery/door/airlock/external, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 1 + }, +/obj/effect/mapping_helpers/airlock/access/all/medical/chemistry, +/turf/open/floor/plating, +/area/station/medical/chemistry/minisat) +"dnt" = ( +/obj/effect/turf_decal/trimline/dark_red/end{ + dir = 4 + }, +/obj/machinery/button/crematorium{ + id = "crematoriumChapel"; + pixel_x = 26 + }, +/turf/open/floor/iron/dark, +/area/station/service/chapel/office) +"dnw" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/structure/girder, +/turf/open/floor/plating, +/area/station/maintenance/central/greater) +"dnB" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/station/command/corporate_dock) +"dnO" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"dnP" = ( +/obj/structure/filingcabinet/medical, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 9 + }, +/obj/machinery/light/cold/directional/west, +/turf/open/floor/iron/white, +/area/station/medical/exam_room) +"dnW" = ( +/obj/structure/table, +/obj/item/paper_bin{ + pixel_x = -2; + pixel_y = 6 + }, +/obj/item/pen, +/obj/effect/turf_decal/tile/purple/half/contrasted{ + dir = 1 + }, +/obj/machinery/firealarm/directional/north, +/turf/open/floor/iron/white, +/area/station/science/lobby) +"dog" = ( +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/plating, +/area/station/medical/surgery/theatre) +"doh" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/wood/tile, +/area/station/service/bar) +"dor" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/plating, +/area/station/maintenance/port/greater) +"dow" = ( +/obj/machinery/atmospherics/components/binary/pump{ + name = "Port To Filter" + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/engineering/atmos) +"doH" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/light_switch/directional/east, +/turf/open/floor/wood/parquet, +/area/station/service/theater) +"doO" = ( +/obj/item/stack/tile/iron/white, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/medical/chemistry/minisat) +"doZ" = ( +/obj/item/pickaxe/improvised, +/turf/open/misc/asteroid, +/area/station/asteroid) +"dpc" = ( +/obj/structure/table/wood, +/obj/structure/railing{ + dir = 10 + }, +/obj/item/gavelblock, +/obj/item/gavelhammer, +/obj/effect/turf_decal/siding/wood{ + dir = 10 + }, +/turf/open/floor/wood/tile, +/area/station/security/courtroom) +"dpe" = ( +/obj/effect/mapping_helpers/airlock/access/all/medical/virology, +/obj/machinery/door/airlock/virology, +/obj/structure/cable, +/obj/effect/turf_decal/tile/green/fourcorners, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/medical/virology) +"dpf" = ( +/obj/structure/transport/linear/public, +/obj/machinery/light/floor/transport, +/turf/open/floor/plating/elevatorshaft, +/area/station/medical/treatment_center) +"dpj" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/medical/morgue) +"dpo" = ( +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/junction, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/security) +"dpp" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/science/auxlab/firing_range) +"dpu" = ( +/obj/structure/grille, +/turf/open/floor/plating, +/area/station/maintenance/department/science) +"dpz" = ( +/obj/machinery/light/directional/west, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 8 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/turf/open/floor/iron, +/area/station/security/interrogation) +"dpH" = ( +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + color = "#000000" + }, +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/obj/machinery/airalarm/directional/east, +/turf/open/floor/iron/dark/textured, +/area/station/cargo/bitrunning/den) +"dpT" = ( +/obj/machinery/disposal/bin, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 6 + }, +/obj/machinery/camera/autoname/directional/east{ + network = list("ss13","medbay") + }, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/station/medical/chemistry) +"dpU" = ( +/turf/closed/wall/r_wall, +/area/station/engineering/atmos/pumproom) +"dqr" = ( +/obj/structure/table, +/obj/effect/spawner/random/entertainment/dice, +/obj/effect/turf_decal/siding, +/turf/open/floor/iron/large, +/area/station/commons/locker) +"dqA" = ( +/obj/machinery/camera/autoname/motion/directional/north{ + network = list("minisat") + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/ai_monitored/turret_protected/aisat_interior) +"dqK" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/heat_exchanging/manifold4w, +/turf/open/space/basic, +/area/space/nearstation) +"dqW" = ( +/obj/effect/turf_decal/sand/plating, +/obj/effect/turf_decal/stripes/asteroid/line{ + dir = 1 + }, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"drb" = ( +/obj/machinery/newscaster/directional/west, +/obj/machinery/vending/wardrobe/curator_wardrobe, +/turf/open/floor/engine/cult, +/area/station/service/library) +"drj" = ( +/turf/closed/wall/rock, +/area/station/engineering/supermatter/room) +"drl" = ( +/obj/structure/chair/sofa/corp/right{ + desc = "Looks like someone threw it out. Covered in donut crumbs."; + name = "couch"; + dir = 1 + }, +/obj/structure/sign/poster/contraband/blood_geometer/directional/east, +/obj/machinery/power/apc/auto_name/directional/south, +/obj/structure/cable, +/obj/effect/turf_decal/tile/red/anticorner/contrasted, +/turf/open/floor/iron/half, +/area/station/security/breakroom) +"dro" = ( +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 1 + }, +/obj/machinery/light/directional/north, +/turf/open/floor/iron, +/area/station/cargo/storage) +"drx" = ( +/obj/machinery/door_buttons/airlock_controller{ + idExterior = "xeno_airlock_exterior"; + idInterior = "xeno_airlock_interior"; + idSelf = "xeno_airlock_control"; + name = "Access Console"; + pixel_x = -25; + pixel_y = -25; + req_access = list("xenobiology") + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/catwalk_floor/flat_white, +/area/station/science/xenobiology) +"drz" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk, +/obj/machinery/airalarm/directional/north, +/turf/open/floor/iron/white, +/area/station/medical/chemistry/minisat) +"drJ" = ( +/obj/machinery/duct, +/obj/structure/cable, +/obj/machinery/light/small/directional/north, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/kitchen, +/area/station/service/kitchen) +"drK" = ( +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/multiz/dark/visible/layer5{ + name = "Port To Turbine" + }, +/obj/effect/turf_decal/delivery, +/obj/machinery/camera/autoname/directional/west, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) +"drO" = ( +/obj/item/retractor, +/obj/item/hemostat{ + pixel_x = -10 + }, +/obj/structure/table, +/obj/structure/window/spawner/directional/east, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/iron/white/smooth_half{ + dir = 8 + }, +/area/station/science/robotics/lab) +"dsa" = ( +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/security/office) +"dse" = ( +/obj/effect/turf_decal/sand/plating, +/obj/structure/barricade/wooden, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/maintenance/central/greater) +"dsi" = ( +/obj/structure/cable, +/obj/effect/landmark/event_spawn, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron/white, +/area/station/science/research) +"dss" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/blue/filled/corner, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron/white, +/area/station/medical/storage) +"dsy" = ( +/turf/open/floor/iron/dark/textured_large, +/area/station/security/interrogation) +"dsF" = ( +/obj/item/flashlight/lantern, +/turf/open/misc/asteroid, +/area/station/asteroid) +"dsG" = ( +/obj/effect/turf_decal/sand/plating, +/turf/open/floor/plating/reinforced/airless, +/area/station/asteroid) +"dsJ" = ( +/obj/effect/spawner/random/engineering/tank, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/maintenance/aft/upper) +"dsL" = ( +/obj/effect/spawner/random/maintenance/three, +/turf/open/floor/plating, +/area/station/maintenance/port/lesser) +"dsP" = ( +/turf/closed/wall/rock, +/area/station/maintenance/disposal/incinerator) +"dsR" = ( +/obj/vehicle/ridden/janicart, +/obj/item/key/janitor, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/service/janitor) +"dsY" = ( +/obj/effect/turf_decal/trimline/yellow/filled/corner, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/engineering/gravity_generator) +"dtc" = ( +/obj/structure/table/reinforced/rglass, +/obj/item/assembly/flash/handheld{ + pixel_x = 6; + pixel_y = 13 + }, +/obj/item/clothing/mask/gas/sechailer{ + pixel_x = -6; + pixel_y = 4 + }, +/obj/item/clothing/mask/gas/sechailer{ + pixel_x = 3; + pixel_y = -3 + }, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/security/office) +"dtm" = ( +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron, +/area/station/construction/mining/aux_base) +"dtp" = ( +/obj/effect/turf_decal/tile/blue/half/contrasted{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/station/medical/medbay/lobby) +"dtt" = ( +/turf/open/misc/asteroid, +/area/station/hallway/secondary/entry) +"dtx" = ( +/obj/structure/mannequin/plastic{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/wood/parquet, +/area/station/cargo/boutique) +"dtQ" = ( +/obj/structure/cable, +/turf/open/misc/asteroid, +/area/station/asteroid) +"dtY" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/purple/visible, +/obj/structure/cable, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"dum" = ( +/obj/structure/table/wood, +/obj/item/clothing/head/helmet/toggleable/justice/escape{ + name = "justice helmet" + }, +/obj/item/clothing/suit/costume/justice, +/obj/effect/decal/cleanable/blood/old, +/turf/open/floor/plating, +/area/station/maintenance/central/greater) +"duo" = ( +/turf/open/floor/iron, +/area/station/engineering/atmos/pumproom) +"dus" = ( +/obj/effect/spawner/random/entertainment/arcade, +/obj/item/radio/intercom/directional/north, +/obj/effect/turf_decal/siding/purple{ + dir = 1 + }, +/turf/open/floor/iron/white/herringbone, +/area/station/science/breakroom) +"duy" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/fore) +"duB" = ( +/obj/structure/cable, +/obj/structure/window/reinforced/spawner/directional/west, +/obj/machinery/firealarm/directional/east, +/turf/open/floor/iron/dark, +/area/station/security/prison) +"duS" = ( +/obj/machinery/duct, +/obj/structure/cable, +/obj/machinery/camera/autoname/directional/north, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/kitchen, +/area/station/service/kitchen) +"duU" = ( +/obj/structure/cable, +/obj/effect/turf_decal/sand/plating, +/turf/open/floor/plating, +/area/station/asteroid) +"dvz" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/structure/sign/directions/medical/directional/east{ + pixel_y = 8; + dir = 8 + }, +/obj/structure/sign/directions/evac/directional/east{ + pixel_y = -8 + }, +/obj/structure/sign/directions/engineering/directional/east, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"dvC" = ( +/obj/effect/turf_decal/sand/plating, +/obj/structure/grille, +/turf/open/floor/plating/airless, +/area/station/asteroid) +"dvO" = ( +/obj/structure/grille, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"dvX" = ( +/obj/machinery/light/directional/west, +/turf/open/floor/iron/dark, +/area/station/engineering/supermatter/room) +"dwv" = ( +/obj/item/kirbyplants/random, +/obj/effect/turf_decal/siding/dark_blue{ + dir = 4 + }, +/obj/machinery/light_switch/directional/north, +/turf/open/floor/iron/dark, +/area/station/command/corporate_showroom) +"dwz" = ( +/obj/structure/table/wood, +/obj/item/toy/beach_ball/branded{ + pixel_y = 7 + }, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/structure/cable, +/obj/effect/turf_decal/siding/wood{ + dir = 5 + }, +/turf/open/floor/wood/tile, +/area/station/command/corporate_showroom) +"dwF" = ( +/obj/structure/lattice, +/obj/structure/cable, +/obj/structure/transit_tube/crossing/horizontal, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/space/basic, +/area/space/nearstation) +"dwH" = ( +/obj/effect/turf_decal/bot_white/right, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/station/engineering/gravity_generator) +"dwI" = ( +/turf/open/openspace, +/area/station/maintenance/department/medical/central) +"dwV" = ( +/obj/structure/lattice/catwalk, +/obj/structure/railing, +/obj/effect/spawner/random/structure/chair_flipped, +/turf/open/openspace, +/area/station/science/genetics) +"dxx" = ( +/obj/structure/extinguisher_cabinet/directional/south, +/obj/item/kirbyplants/potty, +/turf/open/floor/wood, +/area/station/commons/lounge) +"dxA" = ( +/obj/machinery/telecomms/receiver/preset_left, +/turf/open/floor/circuit/green/telecomms/mainframe, +/area/station/tcommsat/server) +"dxD" = ( +/obj/effect/turf_decal/sand/plating, +/obj/effect/decal/cleanable/rubble, +/obj/effect/spawner/random/maintenance/no_decals/two, +/turf/open/floor/plating, +/area/station/asteroid) +"dxH" = ( +/obj/structure/table/wood, +/obj/item/flashlight/lamp/green{ + pixel_x = 1; + pixel_y = 5 + }, +/turf/open/floor/carpet/purple, +/area/station/service/library) +"dxT" = ( +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"dyb" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/iron/dark/textured, +/area/station/science/robotics/lab) +"dyd" = ( +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ + dir = 6 + }, +/turf/open/floor/iron/dark, +/area/station/science/ordnance) +"dyA" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron/dark, +/area/station/service/chapel) +"dyB" = ( +/obj/machinery/ore_silo, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/bot_white, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/command/nuke_storage) +"dyD" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/commons/locker) +"dyV" = ( +/obj/structure/railing{ + dir = 1 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/structure/cable, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/wood/tile, +/area/station/service/bar) +"dyX" = ( +/obj/structure/reagent_dispensers/plumbed{ + dir = 4 + }, +/obj/item/radio/intercom/directional/west, +/obj/effect/turf_decal/tile/dark_green/opposingcorners, +/turf/open/floor/iron, +/area/station/hallway/secondary/service) +"dzb" = ( +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/security/interrogation) +"dzm" = ( +/obj/machinery/door/airlock/multi_tile/public/glass{ + dir = 4 + }, +/obj/effect/landmark/navigate_destination/chapel, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/chapel{ + dir = 8 + }, +/area/station/service/chapel) +"dzq" = ( +/obj/machinery/duct, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/white, +/area/station/medical/surgery/theatre) +"dzr" = ( +/obj/machinery/conveyor{ + id = "garbage" + }, +/obj/machinery/door/window/left/directional/east{ + req_access = list("maint_tunnels"); + name = "Danger: Conveyor Access" + }, +/turf/open/floor/plating, +/area/station/maintenance/disposal) +"dzu" = ( +/obj/structure/cable, +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/white, +/area/station/hallway/secondary/entry) +"dzv" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/aft/upper) +"dzA" = ( +/obj/structure/chair/sofa/left/maroon{ + dir = 8 + }, +/obj/effect/landmark/start/psychologist, +/turf/open/floor/carpet, +/area/station/medical/psychology) +"dzC" = ( +/obj/effect/turf_decal/siding/purple{ + dir = 4 + }, +/obj/structure/chair/sofa/bench/left{ + dir = 4 + }, +/turf/open/floor/iron/white/textured_large, +/area/station/science/research) +"dzF" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/structure/cable, +/obj/machinery/navbeacon{ + codes_txt = "patrol;next_patrol=P13-Central-Primary"; + location = "P12-Central-Primary" + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"dzN" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/newscaster/directional/west, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"dzQ" = ( +/obj/structure/bed, +/obj/effect/spawner/random/bedsheet/any, +/obj/machinery/light/small/directional/north, +/turf/open/floor/engine/cult, +/area/station/service/library) +"dzU" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/hallway/secondary/exit/departure_lounge) +"dzX" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/sign/warning/biohazard, +/turf/open/floor/engine, +/area/station/science/xenobiology) +"dzY" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/wood, +/area/station/service/library) +"dAa" = ( +/obj/machinery/hydroponics/constructable, +/obj/item/radio/intercom/directional/north, +/turf/open/floor/iron/large, +/area/station/service/hydroponics/garden) +"dAe" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/engineering/main) +"dAn" = ( +/obj/structure/broken_flooring/pile/directional/east, +/turf/open/space/openspace, +/area/space/nearstation) +"dAo" = ( +/obj/structure/table, +/obj/item/electronics/airalarm{ + pixel_x = -5; + pixel_y = -5 + }, +/obj/item/electronics/airalarm{ + pixel_x = -5; + pixel_y = -5 + }, +/obj/item/electronics/airalarm{ + pixel_x = -5; + pixel_y = -5 + }, +/obj/item/electronics/firealarm{ + pixel_x = 5; + pixel_y = -5 + }, +/obj/item/electronics/firealarm{ + pixel_x = 5; + pixel_y = -5 + }, +/obj/item/electronics/firealarm{ + pixel_x = 5; + pixel_y = -5 + }, +/obj/item/storage/toolbox/electrical{ + pixel_y = 12; + pixel_x = -5 + }, +/obj/item/multitool{ + pixel_y = 10; + pixel_x = 11 + }, +/obj/item/multitool{ + pixel_y = 10; + pixel_x = 11 + }, +/obj/item/multitool{ + pixel_y = 10; + pixel_x = 11 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/obj/machinery/camera/autoname/directional/south, +/turf/open/floor/iron/large, +/area/station/engineering/atmos) +"dAq" = ( +/obj/machinery/door/airlock/security/glass{ + name = "Permabrig" + }, +/turf/open/floor/plating, +/area/station/security/prison/shower) +"dAr" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 1 + }, +/obj/structure/closet/secure_closet/personal, +/turf/open/floor/iron/white, +/area/station/medical/paramedic) +"dAu" = ( +/obj/structure/chair/sofa/bench/left{ + dir = 8 + }, +/obj/effect/turf_decal/siding, +/obj/effect/landmark/start/assistant, +/turf/open/floor/iron/large, +/area/station/commons/locker) +"dAv" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/turf/open/floor/engine, +/area/station/command/corporate_dock) +"dAC" = ( +/obj/machinery/door/airlock/mining{ + name = "Bitrunning Den" + }, +/obj/effect/mapping_helpers/airlock/access/any/supply/bit_den, +/obj/machinery/door/firedoor, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/cargo/bitrunning/den) +"dAG" = ( +/obj/structure/grille/broken, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/plating, +/area/station/security/prison/safe) +"dAS" = ( +/obj/effect/turf_decal/tile/blue, +/obj/effect/turf_decal/tile/green{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/service/hydroponics) +"dBj" = ( +/obj/structure/cable/multilayer/multiz, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/science/xenobiology) +"dBp" = ( +/obj/machinery/button/door/directional/west{ + req_access = list("atmospherics"); + name = "Atmospherics Lockdown"; + id = "atmos" + }, +/obj/structure/cable, +/obj/effect/turf_decal/tile/yellow{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment, +/obj/machinery/vending/wardrobe/atmos_wardrobe, +/turf/open/floor/iron/dark/corner{ + dir = 8 + }, +/area/station/engineering/atmos/upper) +"dBu" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/holofloor/dark, +/area/station/command/heads_quarters/cmo) +"dBF" = ( +/obj/machinery/door/poddoor/shutters/window/preopen{ + id = "zaza" + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/door/window/right, +/turf/open/floor/iron/white, +/area/station/maintenance/aft/upper) +"dBK" = ( +/turf/open/floor/fakebasalt, +/area/station/maintenance/department/medical) +"dBM" = ( +/obj/structure/closet/crate/freezer/surplus_limbs, +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/machinery/light/cold/directional/west, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/white/textured, +/area/station/medical/surgery/theatre) +"dBS" = ( +/obj/structure/table/wood, +/obj/effect/turf_decal/tile/green/anticorner/contrasted, +/obj/item/book/manual/wiki/security_space_law, +/turf/open/floor/iron, +/area/station/security/courtroom) +"dBU" = ( +/obj/machinery/chem_master/condimaster{ + desc = "Used to separate out liquids - useful for purifying botanical extracts. Also dispenses condiments."; + name = "SapMaster XP" + }, +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/obj/effect/turf_decal/tile/blue, +/obj/effect/turf_decal/tile/green{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/service/hydroponics) +"dBX" = ( +/obj/structure/railing, +/obj/machinery/camera/autoname/directional/west, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 10 + }, +/obj/item/kirbyplants/random, +/turf/open/floor/iron, +/area/station/engineering/main) +"dCh" = ( +/obj/machinery/gibber, +/turf/open/floor/iron/kitchen_coldroom/freezerfloor, +/area/station/service/kitchen) +"dCi" = ( +/obj/structure/table/reinforced/rglass, +/obj/item/storage/backpack/duffelbag/sec, +/obj/item/storage/backpack/duffelbag/sec{ + pixel_y = 7 + }, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/security/office) +"dCo" = ( +/obj/effect/turf_decal/siding/wood/end{ + dir = 4 + }, +/obj/machinery/door/airlock/grunge{ + name = "Chapel Office" + }, +/obj/machinery/door/firedoor, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/access/all/service/chapel_office, +/turf/open/floor/wood/tile, +/area/station/service/chapel) +"dCu" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/structure/table, +/obj/item/stack/sheet/iron/fifty, +/obj/item/stack/sheet/iron/fifty, +/obj/item/stack/sheet/plasteel{ + amount = 10 + }, +/obj/item/storage/toolbox/mechanical{ + pixel_y = 14 + }, +/obj/machinery/requests_console/directional/east{ + department = "EVA"; + name = "EVA Requests Console" + }, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/command/storage/eva) +"dCG" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 1 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/trunk/multiz{ + dir = 1 + }, +/turf/open/floor/iron/white, +/area/station/medical/paramedic) +"dCI" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/siding/purple/corner{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/white, +/area/station/science/research) +"dCM" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/engineering/main) +"dDc" = ( +/obj/structure/cable/multilayer/connected, +/turf/open/floor/iron, +/area/station/engineering/main) +"dDm" = ( +/obj/machinery/power/apc/auto_name/directional/north, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/closet/crate/bin, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/cargo/warehouse/upper) +"dDG" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/plating, +/area/station/maintenance/port/greater) +"dDI" = ( +/obj/structure/lattice/catwalk, +/obj/structure/railing{ + dir = 10 + }, +/turf/open/openspace, +/area/station/science/genetics) +"dDK" = ( +/obj/structure/cable/multilayer/multiz, +/turf/open/floor/plating, +/area/station/maintenance/aft/upper) +"dDZ" = ( +/obj/structure/fluff/minepost, +/turf/open/misc/asteroid, +/area/station/maintenance/department/cargo) +"dEn" = ( +/obj/machinery/portable_atmospherics/canister/plasma, +/obj/structure/window/reinforced/spawner/directional/east, +/obj/structure/sign/warning/fire/directional/north, +/turf/open/floor/iron/white/smooth_large, +/area/station/science/ordnance/storage) +"dEG" = ( +/turf/open/floor/grass, +/area/station/security/prison/garden) +"dES" = ( +/obj/machinery/dna_scannernew, +/obj/machinery/firealarm/directional/north, +/obj/effect/turf_decal/siding/purple, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/white/textured, +/area/station/science/genetics) +"dFb" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/wood, +/area/station/service/library) +"dFc" = ( +/obj/effect/turf_decal/trimline/green/filled/line, +/obj/machinery/light/directional/south, +/obj/structure/railing/corner, +/turf/open/floor/iron/white, +/area/station/hallway/secondary/entry) +"dFi" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/door/airlock/maintenance_hatch, +/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 1 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plating, +/area/station/maintenance/port/lesser) +"dFk" = ( +/obj/item/tank/internals/oxygen, +/obj/item/clothing/mask/breath, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"dFm" = ( +/obj/machinery/firealarm/directional/north, +/turf/open/floor/iron/white, +/area/station/medical/storage) +"dFB" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/airalarm/directional/west, +/turf/open/floor/iron/showroomfloor, +/area/station/engineering/main) +"dFM" = ( +/obj/structure/reagent_dispensers/fueltank, +/turf/open/floor/plating, +/area/station/maintenance/department/bridge) +"dFY" = ( +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"dGc" = ( +/obj/structure/cable, +/obj/machinery/door/airlock/engineering{ + name = "Floor Electrical Relay" + }, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 1 + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/catwalk_floor, +/area/station/maintenance/central/lesser) +"dGf" = ( +/obj/effect/landmark/event_spawn, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/turf/open/floor/iron/corner{ + dir = 4 + }, +/area/station/service/hydroponics/garden) +"dGh" = ( +/obj/structure/cable, +/turf/open/floor/carpet/executive, +/area/station/command/heads_quarters/captain/private) +"dGq" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/carpet/orange, +/area/station/service/theater) +"dGs" = ( +/obj/structure/table/reinforced, +/obj/item/storage/pill_bottle/epinephrine, +/obj/item/stack/sheet/mineral/plasma{ + pixel_y = 12 + }, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/yellow/filled/mid_joiner{ + dir = 4 + }, +/turf/open/floor/iron/white/smooth_edge{ + dir = 4 + }, +/area/station/medical/pharmacy) +"dGt" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 8 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron/white, +/area/station/medical/storage) +"dGw" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/maintenance/department/cargo) +"dGB" = ( +/obj/machinery/disposal/delivery_chute{ + dir = 1 + }, +/obj/effect/turf_decal/bot_red, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/turf/open/floor/iron/textured_large, +/area/station/cargo/sorting) +"dGG" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 10 + }, +/obj/structure/cable, +/turf/open/floor/iron/white, +/area/station/medical/surgery/theatre) +"dGR" = ( +/obj/structure/fluff/minepost, +/obj/machinery/light/small/dim/directional/north, +/turf/open/misc/asteroid, +/area/station/maintenance/department/cargo) +"dGX" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/simple/green/visible{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/department/science) +"dHa" = ( +/obj/effect/turf_decal/tile/purple/opposingcorners, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/iron/white, +/area/station/science/auxlab/firing_range) +"dHk" = ( +/obj/structure/cable, +/obj/effect/landmark/start/paramedic, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/medical/paramedic) +"dHy" = ( +/obj/machinery/light/small/directional/north, +/obj/machinery/cell_charger, +/obj/structure/table/reinforced, +/obj/item/stock_parts/power_store/cell/high, +/obj/machinery/camera/autoname/directional/east{ + network = list("ss13","rd") + }, +/obj/effect/turf_decal/siding/purple/corner{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/science/robotics/mechbay) +"dHL" = ( +/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/visible, +/obj/effect/turf_decal/tile/yellow{ + dir = 8 + }, +/turf/open/floor/iron/dark/corner, +/area/station/engineering/atmos/pumproom) +"dHS" = ( +/obj/structure/chair/office{ + dir = 8 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/obj/effect/turf_decal/tile/green{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/service/hydroponics) +"dHU" = ( +/obj/machinery/airalarm/directional/west, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/iron/showroomfloor, +/area/station/medical/coldroom) +"dHW" = ( +/obj/effect/turf_decal/tile/brown/anticorner/contrasted, +/obj/structure/extinguisher_cabinet/directional/south, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/junction/flip{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/cargo/storage) +"dIc" = ( +/obj/machinery/hydroponics/constructable, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/machinery/light_switch/directional/north{ + pixel_x = 12 + }, +/obj/structure/cable, +/turf/open/floor/iron/large, +/area/station/service/hydroponics/garden) +"dIe" = ( +/obj/structure/table/wood, +/obj/effect/turf_decal/siding/dark{ + dir = 1 + }, +/turf/open/floor/wood/tile, +/area/station/service/chapel) +"dIi" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/large, +/area/station/service/hydroponics/garden) +"dIo" = ( +/obj/machinery/door/poddoor/massdriver_trash, +/obj/structure/fans/tiny, +/obj/effect/turf_decal/tile/yellow/opposingcorners, +/obj/effect/turf_decal/stripes/end{ + dir = 8 + }, +/turf/open/floor/engine, +/area/station/maintenance/disposal) +"dIr" = ( +/obj/effect/mapping_helpers/mail_sorting/science/research, +/obj/structure/disposalpipe/sorting/mail/flip, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/white, +/area/station/science/research) +"dIv" = ( +/obj/structure/broken_flooring/pile/directional/north, +/obj/effect/mapping_helpers/burnt_floor, +/obj/structure/table_frame, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/hallway/secondary/exit/departure_lounge) +"dIR" = ( +/obj/machinery/power/apc/auto_name/directional/north, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/yellow{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) +"dIT" = ( +/obj/effect/landmark/event_spawn, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/wood, +/area/station/service/lawoffice) +"dIW" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/junction{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/blue/filled/corner{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/medical/treatment_center) +"dIZ" = ( +/obj/machinery/door/poddoor/shutters{ + id = "abrobo" + }, +/obj/effect/turf_decal/caution/stand_clear, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"dJa" = ( +/obj/structure/closet/mini_fridge/grimy, +/obj/structure/table, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light/small/directional/north, +/turf/open/floor/wood, +/area/station/maintenance/central/lesser) +"dJg" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/commons/locker) +"dJJ" = ( +/obj/structure/plasticflaps, +/obj/machinery/navbeacon{ + codes_txt = "delivery;dir=1"; + location = "Bridge" + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/blood/tracks, +/turf/open/floor/plating, +/area/station/maintenance/department/science) +"dJK" = ( +/obj/machinery/conveyor{ + dir = 8; + id = "execution" + }, +/turf/open/floor/iron/dark, +/area/station/security/execution/education) +"dKp" = ( +/obj/structure/lattice/catwalk, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/turf/open/space/openspace, +/area/space/nearstation) +"dKw" = ( +/turf/closed/wall, +/area/station/medical/treatment_center) +"dKA" = ( +/obj/structure/table, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/plating, +/area/station/maintenance/central/greater) +"dKH" = ( +/obj/structure/railing, +/obj/effect/decal/cleanable/dirt, +/obj/structure/sign/warning/vacuum/external/directional/east, +/turf/open/floor/plating, +/area/station/maintenance/disposal) +"dKI" = ( +/obj/effect/turf_decal/box, +/turf/open/floor/iron/textured, +/area/station/engineering/atmos/upper) +"dLd" = ( +/obj/machinery/sparker/directional/north{ + id = "Xenobio" + }, +/turf/open/floor/engine/xenobio, +/area/station/science/xenobiology) +"dLf" = ( +/obj/machinery/camera/directional/west{ + c_tag = "Atmospherics Tank - Plasma" + }, +/turf/open/floor/engine/plasma, +/area/station/engineering/atmos) +"dLi" = ( +/obj/machinery/telecomms/server/presets/common, +/turf/open/floor/circuit/green/telecomms/mainframe, +/area/station/tcommsat/server) +"dLx" = ( +/obj/machinery/power/apc/auto_name/directional/south, +/obj/structure/cable, +/obj/effect/turf_decal/tile/dark_blue/anticorner/contrasted, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/hallway/secondary/command) +"dLI" = ( +/obj/effect/landmark/event_spawn, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/command/emergency_closet) +"dLR" = ( +/turf/closed/wall/r_wall, +/area/station/cargo/storage) +"dLW" = ( +/obj/machinery/computer/atmos_alert{ + dir = 4 + }, +/obj/machinery/camera/autoname/directional/south, +/turf/open/floor/iron, +/area/station/engineering/atmos/upper) +"dMa" = ( +/obj/structure/chair/office, +/obj/effect/turf_decal/tile/brown/fourcorners, +/obj/effect/landmark/start/cargo_technician, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/station/cargo/sorting) +"dMC" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/effect/turf_decal/tile/bar/opposingcorners, +/obj/structure/disposalpipe/trunk/multiz/down{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/service/bar) +"dMD" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/sign/warning/electric_shock/directional/south, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"dMF" = ( +/obj/item/stack/license_plates/empty/fifty, +/obj/item/stack/license_plates/empty/fifty, +/obj/item/stack/license_plates/empty/fifty, +/obj/item/stack/license_plates/empty/fifty, +/obj/item/stack/license_plates/empty/fifty, +/obj/item/stack/license_plates/empty/fifty, +/obj/structure/closet/crate, +/obj/effect/spawner/random/contraband/prison, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/camera/autoname/directional/north, +/obj/machinery/airalarm/directional/north, +/turf/open/floor/plating, +/area/station/security/prison/work) +"dMU" = ( +/obj/structure/chair/sofa/bench/right{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral/half{ + dir = 8 + }, +/obj/machinery/bluespace_vendor/directional/west, +/turf/open/floor/iron/edge{ + dir = 8 + }, +/area/station/hallway/secondary/exit/departure_lounge) +"dNh" = ( +/obj/structure/window/spawner/directional/east, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/commons/locker) +"dNn" = ( +/obj/structure/chair{ + dir = 8 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark/textured, +/area/station/security/interrogation) +"dNp" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"dNr" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/purple/visible, +/turf/open/floor/iron, +/area/station/engineering/atmos) +"dNu" = ( +/obj/effect/spawner/random/engineering/atmospherics_portable, +/turf/open/floor/plating, +/area/station/maintenance/port/lesser) +"dNW" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/effect/mapping_helpers/broken_floor, +/obj/machinery/requests_console/auto_name/directional/west, +/obj/effect/mapping_helpers/requests_console/supplies, +/obj/effect/mapping_helpers/requests_console/information, +/obj/effect/mapping_helpers/requests_console/assistance, +/obj/effect/mapping_helpers/requests_console/announcement, +/obj/structure/table/wood/fancy/orange, +/obj/effect/spawner/random/entertainment/coin, +/turf/open/floor/wood, +/area/station/command/heads_quarters/qm) +"dOg" = ( +/obj/structure/table, +/obj/item/petri_dish{ + pixel_x = -5; + pixel_y = 2 + }, +/obj/item/food/pizzaslice/moldy/bacteria{ + pixel_y = 15; + pixel_x = 3 + }, +/turf/open/floor/iron/dark/small, +/area/station/science/cytology) +"dOt" = ( +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/engine/vacuum, +/area/station/science/ordnance/burnchamber) +"dOv" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/structure/chair/sofa/bench, +/obj/effect/spawner/random/trash/cigbutt{ + spawn_random_offset = 4; + spawn_scatter_radius = 1 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"dOC" = ( +/obj/effect/turf_decal/siding/purple/corner, +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/obj/machinery/button/door/directional/north{ + id = "mechbay"; + name = "Mech Bay Shutters Control"; + req_access = list("robotics") + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light/dim/directional/west, +/turf/open/floor/iron, +/area/station/science/robotics/mechbay) +"dOD" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/plaque{ + icon_state = "L11" + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"dOG" = ( +/turf/closed/wall/r_wall, +/area/station/command/heads_quarters/hos) +"dOJ" = ( +/obj/structure/broken_flooring/side/directional/west, +/obj/effect/mapping_helpers/broken_floor, +/obj/item/stack/sheet/iron, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/hallway/primary/starboard) +"dPf" = ( +/turf/open/floor/circuit/telecomms/mainframe, +/area/station/tcommsat/server) +"dPg" = ( +/obj/machinery/computer/crew{ + dir = 1 + }, +/obj/machinery/button/door/directional/west{ + id = "medsecprivacy"; + name = "Privacy Control"; + normaldoorcontrol = 1; + pixel_y = -9 + }, +/obj/structure/cable, +/obj/effect/turf_decal/tile/red/fourcorners, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/medical) +"dPh" = ( +/obj/machinery/atmospherics/components/unary/thermomachine/freezer{ + dir = 1; + piping_layer = 2 + }, +/obj/effect/turf_decal/box/red, +/obj/machinery/light/directional/south, +/obj/machinery/camera/autoname/directional/west{ + network = list("ss13","rd") + }, +/turf/open/floor/iron/dark, +/area/station/science/ordnance) +"dPk" = ( +/obj/machinery/button/elevator/directional/east{ + id = "cargo" + }, +/obj/machinery/lift_indicator/directional/east{ + linked_elevator_id = "cargo" + }, +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/cargo/storage) +"dPq" = ( +/obj/machinery/camera/autoname/directional/east, +/turf/open/floor/grass, +/area/station/service/hydroponics/garden) +"dPt" = ( +/obj/effect/landmark/start/medical_doctor, +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/iron/white/textured_large, +/area/station/medical/exam_room) +"dPv" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/security/breakroom) +"dPw" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/station/service/chapel) +"dPG" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/yellow/filled/line, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/white, +/area/station/medical/chemistry/minisat) +"dPH" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable/layer1, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"dPN" = ( +/obj/structure/chair, +/turf/open/floor/glass/reinforced, +/area/station/security/checkpoint/science) +"dPO" = ( +/obj/structure/barricade/wooden, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"dPY" = ( +/obj/machinery/door/airlock/hatch{ + name = "MiniSat Antechamber" + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "antesat" + }, +/obj/structure/cable, +/obj/effect/mapping_helpers/airlock/access/all/command/minisat, +/obj/machinery/door/firedoor, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/ai_monitored/turret_protected/aisat_interior) +"dQr" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/iron/dark/textured, +/area/station/security/interrogation) +"dQv" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"dQJ" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/obj/machinery/door/poddoor/preopen{ + id = "Xenolab"; + name = "Test Chamber Blast Door" + }, +/obj/structure/sign/warning/gas_mask/directional/north, +/turf/open/floor/engine, +/area/station/science/xenobiology) +"dQQ" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/plating, +/area/station/maintenance/port/lesser) +"dRb" = ( +/obj/effect/spawner/structure/window, +/obj/structure/curtain/cloth/fancy/mechanical{ + id = "law" + }, +/turf/open/floor/plating, +/area/station/service/lawoffice) +"dRh" = ( +/obj/structure/closet/secure_closet/cytology, +/turf/open/floor/iron/dark/small, +/area/station/science/cytology) +"dRi" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 8; + id = "detective_shutters"; + name = "Detective's Office Shutters" + }, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/security/detectives_office) +"dRq" = ( +/obj/item/paper/pamphlet/radstorm, +/obj/item/paper/pamphlet/radstorm, +/obj/structure/rack, +/obj/item/radio/intercom/directional/north, +/turf/open/floor/iron/dark, +/area/station/maintenance/radshelter/civil) +"dRr" = ( +/obj/effect/mapping_helpers/burnt_floor, +/obj/effect/decal/cleanable/blood/old, +/obj/effect/spawner/random/trash/garbage{ + spawn_scatter_radius = 1 + }, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"dRs" = ( +/obj/machinery/light/directional/north, +/turf/open/openspace, +/area/station/engineering/lobby) +"dRu" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/yellow/filled/mid_joiner{ + dir = 8 + }, +/turf/open/floor/iron/white/smooth_edge{ + dir = 8 + }, +/area/station/medical/pharmacy) +"dRy" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"dRM" = ( +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 1 + }, +/obj/effect/spawner/random/vending/colavend, +/obj/machinery/light_switch/directional/north, +/turf/open/floor/iron, +/area/station/security/office) +"dRZ" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/medical/chemistry/minisat) +"dSl" = ( +/obj/machinery/door/airlock/maintenance_hatch, +/obj/structure/cable, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 8 + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/maintenance/central/greater) +"dSp" = ( +/obj/machinery/light/small/directional/north, +/obj/effect/landmark/start/assistant, +/turf/open/floor/iron/white/textured_large, +/area/station/commons/fitness/recreation) +"dSB" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/engineering/atmos) +"dSG" = ( +/obj/item/radio/intercom/directional/east, +/obj/structure/cable, +/turf/open/floor/iron/dark/side{ + dir = 5 + }, +/area/station/command/corporate_showroom) +"dSN" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/engineering/tracking_beacon, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) +"dSQ" = ( +/obj/effect/turf_decal/siding/wood, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/machinery/button/door/directional/west{ + id = "Cabin2"; + name = "Cabin Bolt Control"; + normaldoorcontrol = 1; + specialfunctions = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/wood/tile, +/area/station/commons/dorms) +"dSV" = ( +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/iron, +/area/station/cargo/sorting) +"dTb" = ( +/obj/effect/turf_decal/stripes, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"dTd" = ( +/obj/structure/table/wood, +/obj/item/book/manual/wiki/security_space_law{ + name = "space law"; + pixel_y = 2 + }, +/obj/item/clothing/head/collectable/hos{ + name = "novelty HoS hat" + }, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/structure/cable, +/turf/open/floor/wood/tile, +/area/station/command/corporate_showroom) +"dTe" = ( +/obj/effect/turf_decal/sand/plating, +/turf/open/floor/plating, +/area/station/maintenance/central/greater) +"dTh" = ( +/obj/structure/cable, +/obj/effect/turf_decal/trimline/yellow/filled/line, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/mapping_helpers/mail_sorting/medbay/chemistry, +/obj/structure/disposalpipe/sorting/mail/flip, +/turf/open/floor/iron/white, +/area/station/medical/chemistry) +"dTy" = ( +/obj/structure/table, +/obj/item/reagent_containers/cup/beaker/large, +/turf/open/floor/iron/grimy, +/area/station/maintenance/central/greater) +"dTz" = ( +/obj/structure/window/reinforced/spawner/directional/east, +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/obj/structure/reagent_dispensers/watertank, +/turf/open/floor/iron/large, +/area/station/engineering/atmos/upper) +"dTA" = ( +/obj/item/wrench, +/obj/effect/turf_decal/tile/purple/full, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/iron/dark/smooth_large, +/area/station/science/xenobiology) +"dTE" = ( +/obj/structure/railing/corner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/red/filled/arrow_cw, +/turf/open/floor/iron/textured_large, +/area/station/security) +"dTJ" = ( +/obj/machinery/disposal/bin, +/obj/machinery/light_switch/directional/north, +/obj/structure/disposalpipe/trunk, +/turf/open/floor/iron/kitchen, +/area/station/service/kitchen) +"dTM" = ( +/obj/machinery/door/airlock/highsecurity{ + name = "AI Upload" + }, +/obj/effect/mapping_helpers/airlock/access/all/command/ai_upload, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "aiupload" + }, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/ai_upload) +"dTU" = ( +/obj/effect/turf_decal/tile/neutral, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/computer/security/telescreen/entertainment/directional/east, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"dUb" = ( +/obj/machinery/airalarm/directional/west, +/obj/item/kirbyplants/random, +/obj/effect/turf_decal/tile/red/diagonal_edge, +/obj/machinery/firealarm/directional/south, +/turf/open/floor/iron/dark, +/area/station/security/warden) +"dUi" = ( +/turf/closed/wall/r_wall, +/area/station/engineering/lobby) +"dUl" = ( +/obj/effect/landmark/event_spawn, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/ai_monitored/turret_protected/aisat/uppersouth) +"dUD" = ( +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/cargo/sorting) +"dUS" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/sorting/mail{ + dir = 4 + }, +/obj/effect/mapping_helpers/mail_sorting/supply/cargo_bay, +/turf/open/floor/iron, +/area/station/cargo/storage) +"dVi" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/half{ + dir = 1 + }, +/area/station/service/hydroponics/garden) +"dVl" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/blue/filled/corner{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/white, +/area/station/medical/storage) +"dVp" = ( +/turf/closed/wall, +/area/station/science/cytology) +"dVs" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/security/prison) +"dVt" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/science/cytology) +"dVu" = ( +/obj/structure/railing{ + dir = 8 + }, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/ai_monitored/turret_protected/aisat/foyer) +"dVx" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 5 + }, +/obj/item/radio/intercom/directional/east, +/obj/structure/table, +/obj/item/reagent_containers/cup/glass/coffee, +/turf/open/floor/iron/white, +/area/station/medical/exam_room) +"dVE" = ( +/obj/structure/transit_tube/curved, +/obj/structure/lattice, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/space/basic, +/area/space/nearstation) +"dVW" = ( +/obj/machinery/light/small/dim/directional/east, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/engineering/atmospherics_engine) +"dVX" = ( +/obj/structure/table, +/obj/item/storage/box/mousetraps{ + pixel_x = -3; + pixel_y = 8 + }, +/obj/item/clothing/gloves/color/orange{ + pixel_x = 4; + pixel_y = -2 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/camera/autoname/directional/west, +/turf/open/floor/iron, +/area/station/service/janitor) +"dWb" = ( +/obj/structure/window/reinforced/spawner/directional/west, +/mob/living/simple_animal/bot/floorbot, +/obj/effect/turf_decal/stripes{ + dir = 6 + }, +/obj/machinery/firealarm/directional/north, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/aisat/foyer) +"dWl" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/effect/turf_decal/siding/wideplating/dark, +/obj/effect/turf_decal/siding/wideplating/dark{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/cargo/storage) +"dWB" = ( +/obj/machinery/atmospherics/components/binary/pump/off/orange/visible{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/simple/dark/visible/layer5{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/engineering/atmos) +"dWI" = ( +/obj/machinery/door/airlock/command{ + name = "Quartermaster's Office" + }, +/obj/effect/mapping_helpers/airlock/access/all/supply/qm, +/obj/effect/turf_decal/siding/wood/end{ + dir = 4 + }, +/obj/machinery/door/firedoor, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/turf/open/floor/wood, +/area/station/command/heads_quarters/qm) +"dWT" = ( +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/textured, +/area/station/construction/mining/aux_base) +"dWW" = ( +/obj/machinery/disposal/bin, +/obj/effect/turf_decal/tile/red/half/contrasted, +/obj/machinery/airalarm/directional/south, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/security/lockers) +"dXN" = ( +/obj/machinery/door/airlock/research{ + name = "Robotics Lab Storage" + }, +/obj/structure/barricade/wooden/crude, +/obj/effect/mapping_helpers/airlock/abandoned, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/science/robotics/storage) +"dXU" = ( +/turf/open/floor/plating/airless, +/area/space/nearstation) +"dXW" = ( +/obj/structure/disposaloutlet{ + dir = 8 + }, +/obj/structure/window/spawner/directional/north, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/turf/open/floor/plating, +/area/station/maintenance/disposal) +"dYp" = ( +/obj/structure/sign/warning/fire, +/turf/closed/wall/r_wall, +/area/station/engineering/supermatter) +"dYr" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 4 + }, +/obj/structure/cable, +/obj/structure/extinguisher_cabinet/directional/east, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) +"dYx" = ( +/obj/machinery/power/apc/auto_name/directional/south, +/obj/structure/cable, +/obj/effect/turf_decal/tile/yellow{ + dir = 8 + }, +/turf/open/floor/iron/dark/corner, +/area/station/engineering/atmos) +"dYD" = ( +/obj/structure/table/glass, +/obj/item/experi_scanner{ + pixel_y = 6 + }, +/obj/item/experi_scanner{ + pixel_x = 4 + }, +/obj/item/experi_scanner{ + pixel_x = -4 + }, +/turf/open/floor/iron/white/smooth_large, +/area/station/science/research) +"dYR" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/decal/cleanable/blood/old, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) +"dYS" = ( +/obj/machinery/computer/records/security{ + dir = 1 + }, +/obj/effect/turf_decal/tile/red/opposingcorners, +/obj/structure/reagent_dispensers/wall/peppertank/directional/south, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/science) +"dYZ" = ( +/obj/effect/spawner/random/maintenance/two, +/obj/effect/spawner/random/clothing/twentyfive_percent_cyborg_mask, +/turf/open/floor/plating, +/area/station/maintenance/aft/upper) +"dZd" = ( +/obj/structure/table/reinforced, +/obj/effect/turf_decal/bot, +/obj/item/bodypart/arm/right/robot{ + pixel_x = 3 + }, +/obj/item/bodypart/arm/left/robot{ + pixel_x = -3 + }, +/obj/structure/extinguisher_cabinet/directional/north, +/obj/machinery/firealarm/directional/west, +/obj/item/assembly/flash/handheld{ + pixel_x = 6; + pixel_y = 13 + }, +/obj/item/assembly/flash/handheld{ + pixel_x = 6; + pixel_y = 13 + }, +/obj/item/assembly/flash/handheld{ + pixel_x = 6; + pixel_y = 13 + }, +/obj/item/assembly/flash/handheld{ + pixel_x = 6; + pixel_y = 13 + }, +/obj/item/assembly/flash/handheld{ + pixel_x = 6; + pixel_y = 13 + }, +/obj/machinery/ecto_sniffer{ + pixel_x = -6; + pixel_y = 6 + }, +/turf/open/floor/iron/dark/textured, +/area/station/science/robotics/lab) +"dZy" = ( +/turf/closed/wall/r_wall, +/area/station/ai_monitored/command/storage/satellite) +"dZA" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/iron/dark/corner{ + dir = 1 + }, +/area/station/command/meeting_room) +"eam" = ( +/obj/structure/chair{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/turf/open/floor/plating/airless, +/area/station/science/ordnance/bomb) +"eau" = ( +/obj/structure/railing/corner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/blue/filled/corner{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) +"eaD" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/wood, +/area/station/command/heads_quarters/qm) +"eaL" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden, +/turf/open/floor/catwalk_floor/flat_white, +/area/station/medical/treatment_center) +"eaS" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 6 + }, +/obj/machinery/bookbinder, +/obj/item/radio/intercom/directional/south, +/obj/machinery/light/directional/east, +/turf/open/floor/wood, +/area/station/service/library) +"eaT" = ( +/obj/machinery/door/firedoor, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"eaW" = ( +/obj/machinery/turretid{ + control_area = "/area/station/ai_monitored/turret_protected/aisat_interior"; + name = "AI Antechamber turret control"; + pixel_y = -27 + }, +/obj/effect/decal/cleanable/oil, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/blood/old, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/aisat/uppernorth) +"eaX" = ( +/obj/machinery/power/apc/auto_name/directional/west, +/obj/structure/cable, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/engineering/main) +"ebi" = ( +/obj/structure/curtain/cloth/fancy/mechanical/start_closed{ + desc = "A set of curtains serving as a fancy theater backdrop. They can only be opened by a button."; + id = "theater_curtains"; + name = "Theater Curtains" + }, +/obj/machinery/button/curtain{ + id = "theater_curtains"; + name = "curtain control"; + pixel_y = 32; + req_access = list("theatre") + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/wood, +/area/station/service/theater) +"ebk" = ( +/obj/machinery/chem_master, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 5 + }, +/obj/structure/sign/warning/explosives/directional/north, +/obj/effect/turf_decal/trimline/yellow/filled/warning, +/obj/machinery/requests_console/auto_name/directional/east, +/obj/effect/mapping_helpers/requests_console/assistance, +/obj/effect/mapping_helpers/requests_console/supplies, +/turf/open/floor/iron/white, +/area/station/medical/chemistry) +"ebo" = ( +/obj/effect/landmark/start/paramedic, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/white, +/area/station/medical/paramedic) +"ebs" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/landmark/event_spawn, +/turf/open/floor/circuit/green, +/area/station/ai_monitored/turret_protected/ai_upload) +"ebz" = ( +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/textured, +/area/station/construction/mining/aux_base) +"ebB" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/junction{ + dir = 4 + }, +/obj/machinery/navbeacon{ + codes_txt = "patrol;next_patrol=P11-Central-Primary"; + location = "P10-Central-Primary" + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"ebD" = ( +/obj/machinery/camera/autoname/directional/south{ + network = list("ss13","medbay") + }, +/obj/structure/bed/medical{ + dir = 4 + }, +/obj/effect/turf_decal/tile/blue/fourcorners, +/turf/open/floor/iron/white, +/area/station/medical/treatment_center) +"ebP" = ( +/obj/machinery/power/apc/auto_name/directional/west, +/obj/effect/mapping_helpers/apc/cell_5k, +/obj/effect/mapping_helpers/apc/full_charge, +/obj/structure/cable, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"ece" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/turf/open/floor/iron, +/area/station/engineering/gravity_generator) +"ecj" = ( +/obj/structure/railing{ + dir = 8 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/sorting/mail/flip{ + dir = 2 + }, +/obj/effect/mapping_helpers/mail_sorting/medbay/cmo_office, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) +"ecy" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/turf/open/floor/iron/white, +/area/station/medical/treatment_center) +"ecz" = ( +/obj/structure/cable, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/station/command/corporate_showroom) +"ecC" = ( +/turf/closed/wall, +/area/station/security/office) +"ecF" = ( +/obj/machinery/airalarm/directional/west, +/obj/machinery/atmospherics/pipe/multiz/dark/visible/layer5{ + name = "Port To Turbine" + }, +/turf/open/floor/iron, +/area/station/engineering/atmos) +"edv" = ( +/obj/machinery/computer/order_console/cook, +/turf/open/floor/iron, +/area/station/hallway/secondary/service) +"edH" = ( +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 8 + }, +/obj/structure/extinguisher_cabinet/directional/west, +/turf/open/floor/iron, +/area/station/security/warden) +"edL" = ( +/obj/effect/turf_decal/stripes, +/obj/effect/turf_decal/arrows/red{ + pixel_y = 10 + }, +/turf/open/floor/engine, +/area/station/engineering/atmospherics_engine) +"eeo" = ( +/obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, +/obj/machinery/door/airlock/atmos{ + name = "Hypertorus Fusion Reactor" + }, +/obj/machinery/door/firedoor, +/turf/open/floor/iron/dark, +/area/station/engineering/atmospherics_engine) +"eeu" = ( +/obj/machinery/door/poddoor/preopen{ + id = "Disposal Exit"; + name = "Disposal Exit Vent" + }, +/obj/machinery/conveyor{ + dir = 1; + id = "garbage" + }, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/plating, +/area/station/maintenance/disposal) +"eeB" = ( +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/port/greater) +"eeL" = ( +/obj/machinery/light/dim/directional/west, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/structure/table, +/obj/effect/spawner/random/entertainment/dice, +/obj/effect/landmark/start/hangover, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"eeQ" = ( +/obj/machinery/chem_dispenser, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/yellow/filled/warning, +/turf/open/floor/iron/white, +/area/station/medical/chemistry) +"efb" = ( +/obj/effect/turf_decal/tile/blue/anticorner/contrasted, +/obj/machinery/modular_computer/preset/id, +/obj/structure/window/reinforced/spawner/directional/north, +/obj/structure/window/reinforced/spawner/directional/east, +/turf/open/floor/iron, +/area/station/command/bridge) +"efc" = ( +/obj/structure/table/wood/poker, +/obj/item/storage/dice, +/turf/open/floor/wood, +/area/station/commons/lounge) +"efm" = ( +/obj/machinery/conveyor{ + dir = 4; + id = "brm" + }, +/obj/effect/turf_decal/sand/plating, +/turf/open/floor/plating, +/area/station/cargo/miningoffice) +"efx" = ( +/obj/structure/closet/secure_closet/freezer/kitchen, +/obj/machinery/light_switch/directional/west, +/turf/open/floor/iron/kitchen, +/area/station/service/kitchen) +"efJ" = ( +/obj/machinery/atmospherics/pipe/smart/manifold/purple/visible/layer2{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/science/ordnance) +"efQ" = ( +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) +"efY" = ( +/obj/machinery/vending/coffee, +/obj/effect/turf_decal/stripes, +/obj/machinery/firealarm/directional/west, +/turf/open/floor/iron/dark/textured, +/area/station/hallway/secondary/exit/departure_lounge) +"egj" = ( +/obj/machinery/atmospherics/pipe/smart/simple/dark/visible{ + dir = 4 + }, +/turf/closed/wall/r_wall, +/area/station/science/ordnance/burnchamber) +"ego" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/security/courtroom) +"egv" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/turf/open/floor/wood/parquet, +/area/station/medical/psychology) +"egz" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/dark, +/area/station/medical/chemistry/minisat) +"egH" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/maintenance/department/bridge) +"egN" = ( +/obj/structure/table, +/obj/effect/spawner/random/engineering/flashlight, +/obj/machinery/light_switch/directional/east, +/turf/open/floor/iron, +/area/station/command/gateway) +"egY" = ( +/obj/machinery/light_switch/directional/west, +/turf/open/openspace, +/area/station/security) +"ehb" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/white, +/area/station/science/explab) +"ehn" = ( +/obj/machinery/power/apc/auto_name/directional/north, +/obj/effect/turf_decal/tile/red/anticorner/contrasted{ + dir = 4 + }, +/obj/structure/cable, +/obj/structure/filingcabinet/chestdrawer, +/turf/open/floor/iron, +/area/station/security/brig/entrance) +"ehs" = ( +/obj/structure/table, +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/item/defibrillator/loaded{ + pixel_y = 6 + }, +/obj/item/defibrillator/loaded{ + pixel_y = 3 + }, +/obj/item/defibrillator/loaded, +/obj/structure/window/spawner/directional/east, +/turf/open/floor/iron/white, +/area/station/medical/storage) +"eht" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/maintenance/central/greater) +"ehN" = ( +/obj/effect/decal/cleanable/blood/old{ + icon_state = "gib5-old" + }, +/turf/open/floor/engine/xenobio, +/area/station/science/xenobiology) +"ehO" = ( +/obj/effect/landmark/start/hangover, +/turf/open/floor/iron, +/area/station/hallway/primary/fore) +"ehP" = ( +/obj/effect/turf_decal/tile/brown{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/cargo/storage) +"ehY" = ( +/obj/structure/cable, +/obj/effect/turf_decal/trimline/purple/filled/arrow_ccw, +/obj/effect/turf_decal/trimline/purple/filled/arrow_ccw{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/camera/autoname/directional/north{ + network = list("ss13","rd","xeno") + }, +/turf/open/floor/iron/white/smooth_large, +/area/station/science/xenobiology/hallway) +"ein" = ( +/obj/effect/turf_decal/tile/red/half/contrasted, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/light_switch/directional/south, +/turf/open/floor/iron, +/area/station/security) +"eio" = ( +/turf/closed/mineral/random/stationside/asteroid/porus{ + mineralChance = 20 + }, +/area/station/maintenance/department/cargo) +"eip" = ( +/obj/structure/cable, +/obj/machinery/door/airlock/external{ + name = "Solar Maintenance" + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 1 + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 1 + }, +/turf/open/floor/plating, +/area/station/maintenance/solars/port/aft) +"eiI" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/circuit/green, +/area/station/ai_monitored/command/nuke_storage) +"eiJ" = ( +/obj/effect/turf_decal/trimline/blue/filled/corner{ + dir = 1 + }, +/obj/effect/landmark/start/medical_doctor, +/turf/open/floor/iron/white, +/area/station/medical/treatment_center) +"eiT" = ( +/obj/machinery/door/airlock{ + id_tag = "Cabin7"; + name = "Cabin 1" + }, +/obj/effect/turf_decal/siding/wood/end, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/wood/tile, +/area/station/commons/dorms) +"eiZ" = ( +/obj/structure/cable, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/abandoned, +/obj/effect/mapping_helpers/airlock/access/any/security/maintenance, +/obj/effect/turf_decal/siding/wood{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/wood, +/area/station/security/detectives_office/private_investigators_office) +"ejb" = ( +/turf/open/floor/carpet/green, +/area/station/command/heads_quarters/hop) +"eje" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"ejh" = ( +/obj/effect/turf_decal/tile/brown/anticorner/contrasted{ + dir = 1 + }, +/obj/machinery/status_display/supply{ + pixel_y = 32 + }, +/turf/open/floor/iron, +/area/station/cargo/lobby) +"ejl" = ( +/obj/machinery/holopad/secure, +/turf/open/floor/carpet/red, +/area/station/command/heads_quarters/qm) +"eju" = ( +/obj/machinery/light/directional/south, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/visible/layer2, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) +"ejx" = ( +/obj/structure/table, +/obj/item/storage/toolbox/mechanical, +/obj/item/geiger_counter{ + pixel_x = 7; + pixel_y = 3 + }, +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 9 + }, +/obj/machinery/airalarm/directional/west, +/obj/machinery/camera/autoname/directional/north, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/engineering) +"ejH" = ( +/obj/machinery/shower/directional/north{ + has_water_reclaimer = 0; + reagent_id = /datum/reagent/clf3; + reagent_capacity = 100; + name = "smoking hot shower" + }, +/obj/effect/turf_decal/sand/plating, +/turf/open/floor/plating, +/area/station/asteroid) +"ejS" = ( +/obj/structure/window/reinforced/spawner/directional/west, +/obj/structure/window/reinforced/spawner/directional/north, +/obj/structure/flora/bush/fullgrass/style_random, +/turf/open/floor/grass, +/area/station/science/research) +"eki" = ( +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/obj/effect/turf_decal/siding/purple{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/white, +/area/station/science/research) +"ekl" = ( +/obj/structure/closet/crate, +/obj/item/poster/random_contraband, +/obj/item/poster/random_contraband, +/obj/item/poster/random_contraband, +/obj/item/poster/random_contraband, +/obj/item/poster/random_contraband, +/obj/effect/spawner/random/maintenance/two, +/obj/structure/window/reinforced/spawner/directional/south, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"ekp" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden, +/turf/open/floor/circuit/telecomms, +/area/station/science/xenobiology) +"eky" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/structure/cable, +/obj/structure/disposalpipe/sorting/mail{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/mapping_helpers/mail_sorting/service/library, +/turf/open/floor/wood, +/area/station/service/library) +"ekz" = ( +/obj/machinery/firealarm/directional/north, +/turf/open/floor/iron/chapel{ + dir = 4 + }, +/area/station/service/chapel) +"ekL" = ( +/obj/effect/turf_decal/tile/neutral, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/item/radio/intercom/directional/south, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"ekR" = ( +/obj/machinery/computer/rdservercontrol{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/light/small/directional/west{ + bulb_power = 0.8 + }, +/turf/open/floor/iron/dark, +/area/station/science/server) +"ekY" = ( +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 8 + }, +/obj/machinery/power/apc/auto_name/directional/west, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/cargo/lobby) +"ely" = ( +/obj/machinery/door/airlock/maintenance_hatch, +/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 1 + }, +/obj/effect/turf_decal/sand/plating, +/turf/open/floor/plating, +/area/station/maintenance/central/greater) +"elz" = ( +/obj/structure/window/spawner, +/turf/open/floor/plating, +/area/station/engineering/main) +"elE" = ( +/obj/structure/door_assembly, +/turf/open/misc/asteroid, +/area/station/asteroid) +"elG" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/atmospherics/pipe/smart/simple/green/hidden, +/turf/open/floor/iron/dark, +/area/station/science/ordnance) +"elT" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners{ + dir = 1 + }, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/command/heads_quarters/rd) +"elX" = ( +/obj/machinery/igniter/incinerator_atmos, +/turf/open/floor/engine/airless, +/area/station/maintenance/disposal/incinerator) +"emf" = ( +/obj/structure/window/spawner/directional/south, +/obj/structure/window/spawner/directional/north, +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/turf/open/floor/iron/textured_large, +/area/station/service/hydroponics/garden) +"emn" = ( +/obj/machinery/telecomms/bus/preset_three, +/turf/open/floor/circuit/green/telecomms/mainframe, +/area/station/tcommsat/server) +"emy" = ( +/obj/machinery/door/airlock/public/glass{ + name = "Starboard Primary Hallway" + }, +/obj/machinery/door/firedoor, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) +"eng" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/sand/plating, +/turf/open/floor/plating, +/area/station/maintenance/port/greater) +"enn" = ( +/obj/machinery/air_sensor/mix_tank, +/turf/open/floor/engine/vacuum, +/area/station/engineering/atmos) +"ent" = ( +/obj/item/pickaxe, +/turf/open/misc/asteroid, +/area/station/asteroid) +"enu" = ( +/turf/closed/wall, +/area/station/service/kitchen) +"enz" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/atmospherics_engine) +"enL" = ( +/obj/structure/cable, +/obj/effect/turf_decal/trimline/yellow/filled/corner, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/turf/open/floor/iron, +/area/station/engineering/lobby) +"enT" = ( +/obj/structure/stairs/north, +/turf/open/floor/iron, +/area/station/command/corporate_showroom) +"enX" = ( +/obj/effect/turf_decal/caution/stand_clear/red, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/door/poddoor/shutters/window/preopen{ + id = "ordstorage" + }, +/obj/structure/cable, +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/turf/open/floor/iron/white, +/area/station/science/ordnance/storage) +"eon" = ( +/obj/effect/spawner/random/structure/chair_comfy{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/command/bridge) +"eoo" = ( +/obj/structure/table/wood, +/obj/structure/cable, +/obj/item/clipboard{ + pixel_y = 6 + }, +/obj/item/pen{ + pixel_y = 6 + }, +/obj/item/storage/cans/sixbeer{ + pixel_y = -12 + }, +/turf/open/floor/carpet/green, +/area/station/command/heads_quarters/hop) +"eoy" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/light/small/directional/south, +/turf/open/floor/iron/grimy, +/area/station/service/chapel/office) +"eoC" = ( +/obj/effect/mapping_helpers/burnt_floor, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/plating, +/area/station/maintenance/solars/port) +"eoL" = ( +/obj/structure/cable, +/obj/machinery/door/airlock/external{ + name = "Solar Maintenance" + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/obj/effect/mapping_helpers/airlock/unres, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 1 + }, +/turf/open/floor/plating, +/area/station/maintenance/solars/starboard/fore) +"eoO" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 8 + }, +/obj/machinery/vending/wardrobe/engi_wardrobe, +/obj/machinery/camera/autoname/directional/west, +/turf/open/floor/iron, +/area/station/engineering/main) +"eoQ" = ( +/obj/machinery/atmospherics/components/binary/pump{ + name = "Air to Distro Staging"; + dir = 4 + }, +/turf/open/floor/iron, +/area/station/engineering/atmos/pumproom) +"eph" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/security/prison/safe) +"epi" = ( +/obj/machinery/conveyor/auto{ + id = "bridgedeliver"; + dir = 1 + }, +/turf/open/floor/plating/airless, +/area/station/maintenance/department/science) +"epl" = ( +/obj/machinery/door/airlock/medical{ + name = "Medical Breakroom and Paramedic Dispatch" + }, +/obj/effect/mapping_helpers/airlock/access/any/medical/general, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/medical/exam_room) +"epx" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/dark_blue{ + dir = 1 + }, +/obj/effect/turf_decal/tile/dark_blue, +/obj/effect/landmark/start/hangover, +/obj/machinery/holopad, +/obj/effect/turf_decal/bot, +/turf/open/floor/iron, +/area/station/hallway/secondary/command) +"epy" = ( +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/effect/decal/cleanable/blood/drip, +/obj/effect/decal/cleanable/blood/footprints{ + dir = 8 + }, +/turf/open/floor/engine/xenobio, +/area/station/science/xenobiology) +"epA" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/obj/effect/turf_decal/trimline/blue/filled/corner{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/station/medical/treatment_center) +"epE" = ( +/obj/structure/closet/toolcloset, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 + }, +/obj/machinery/light/small/directional/north, +/turf/open/floor/iron/dark, +/area/station/engineering/main) +"epK" = ( +/turf/closed/wall/r_wall, +/area/station/cargo/warehouse/upper) +"epT" = ( +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/obj/effect/decal/cleanable/glass, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/maintenance/department/engine) +"eqp" = ( +/obj/effect/spawner/random/vending/snackvend, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 6 + }, +/turf/open/floor/iron, +/area/station/engineering/lobby) +"equ" = ( +/obj/effect/landmark/start/hangover, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/engineering/main) +"eqv" = ( +/obj/machinery/newscaster/directional/east, +/turf/open/floor/carpet/red, +/area/station/command/heads_quarters/qm) +"eqC" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/obj/effect/landmark/generic_maintenance_landmark, +/obj/effect/spawner/random/structure/chair_flipped, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/wood, +/area/station/maintenance/port/greater) +"eqD" = ( +/obj/structure/sign/departments/chemistry/directional/north, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 1 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) +"eqQ" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark/textured, +/area/station/science/robotics/lab) +"eqX" = ( +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light/directional/west, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) +"era" = ( +/obj/structure/cable, +/obj/machinery/door/firedoor, +/turf/open/floor/iron, +/area/station/commons/locker) +"erd" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 4 + }, +/obj/machinery/duct, +/obj/structure/cable, +/turf/open/floor/iron/white, +/area/station/medical/treatment_center) +"eri" = ( +/obj/effect/landmark/start/roboticist, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured, +/area/station/science/robotics/lab) +"ers" = ( +/obj/effect/spawner/random/trash/mess, +/turf/open/floor/plating, +/area/station/maintenance/port/lesser) +"erE" = ( +/obj/effect/turf_decal/siding/wood, +/obj/structure/cable, +/turf/open/floor/wood/tile, +/area/station/service/chapel) +"erR" = ( +/obj/structure/lattice/catwalk, +/obj/structure/railing{ + dir = 8 + }, +/obj/machinery/light/directional/north, +/turf/open/openspace, +/area/station/science/xenobiology) +"erX" = ( +/obj/structure/railing, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/disposal) +"erY" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/circuit/green, +/area/station/ai_monitored/turret_protected/ai_upload) +"ese" = ( +/obj/machinery/door/airlock/security{ + name = "Detective's Office" + }, +/obj/effect/turf_decal/siding/wood, +/obj/effect/mapping_helpers/airlock/access/all/security/detective, +/obj/machinery/door/firedoor, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron/grimy, +/area/station/security/detectives_office) +"esg" = ( +/obj/machinery/smartfridge/organ, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 4; + id = "main_surgery" + }, +/obj/effect/turf_decal/tile/blue/fourcorners, +/turf/open/floor/holofloor/dark, +/area/station/medical/surgery/theatre) +"esl" = ( +/obj/machinery/airalarm/directional/north, +/turf/open/misc/asteroid, +/area/station/maintenance/department/cargo) +"esx" = ( +/obj/effect/turf_decal/trimline/blue/filled/corner{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/medical/treatment_center) +"esN" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/cargo/storage) +"esP" = ( +/obj/effect/turf_decal/siding/red, +/obj/effect/turf_decal/tile/dark_red/opposingcorners, +/turf/open/floor/iron/dark, +/area/station/science/robotics/lab) +"esQ" = ( +/obj/structure/sign/warning/vacuum/directional/north, +/obj/structure/rack, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/plating, +/area/station/maintenance/central/greater) +"esX" = ( +/obj/structure/table/reinforced, +/obj/item/stock_parts/power_store/cell/high{ + pixel_x = 4; + pixel_y = 5 + }, +/obj/item/stock_parts/power_store/cell/high{ + pixel_x = -8; + pixel_y = 9 + }, +/obj/item/stock_parts/power_store/cell/high, +/obj/machinery/cell_charger, +/obj/item/borg/upgrade/rename{ + pixel_x = 3; + pixel_y = 18 + }, +/turf/open/floor/iron/dark/textured, +/area/station/science/robotics/lab) +"etg" = ( +/obj/machinery/shower/directional/north, +/obj/effect/turf_decal/tile/green/anticorner/contrasted{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/station/medical/virology) +"etr" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 8 + }, +/obj/structure/extinguisher_cabinet/directional/west, +/obj/structure/table, +/obj/item/book/manual/wiki/engineering_hacking{ + pixel_x = 6 + }, +/obj/item/multitool{ + pixel_x = -5 + }, +/turf/open/floor/iron, +/area/station/engineering/main) +"etu" = ( +/obj/structure/railing/corner{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/turf/open/floor/wood/tile, +/area/station/service/bar) +"etB" = ( +/obj/machinery/door/window/left/directional/east{ + pixel_x = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 2 + }, +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/service/hydroponics) +"etI" = ( +/obj/structure/table, +/obj/effect/spawner/random/food_or_drink/snack, +/obj/machinery/power/apc/auto_name/directional/east, +/obj/structure/cable, +/turf/open/floor/iron/white, +/area/station/medical/patients_rooms/room_b) +"etV" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/cargo/storage) +"etW" = ( +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/station/maintenance/department/science) +"eua" = ( +/obj/structure/cable, +/obj/structure/railing/corner{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/white, +/area/station/science/research) +"euj" = ( +/obj/machinery/airalarm/directional/west, +/turf/open/floor/plating, +/area/station/maintenance/solars/port/aft) +"eus" = ( +/obj/structure/stairs/east, +/obj/structure/railing{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/engineering/atmos/storage/gas) +"euF" = ( +/obj/structure/closet/wardrobe/white, +/obj/effect/landmark/start/hangover/closet, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/delivery, +/turf/open/floor/iron/dark, +/area/station/commons/locker) +"euR" = ( +/obj/structure/table/wood, +/obj/item/reagent_containers/cup/glass/coffee, +/obj/item/reagent_containers/cup/glass/coffee/no_lid{ + pixel_y = 6; + pixel_x = 12 + }, +/turf/open/floor/carpet, +/area/station/command/corporate_showroom) +"euX" = ( +/obj/machinery/door/airlock/external{ + name = "Escape Pod Four"; + space_dir = 2 + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 1 + }, +/turf/open/floor/plating, +/area/station/maintenance/department/engine) +"evg" = ( +/obj/machinery/modular_computer/preset/id{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark_blue/filled/line{ + dir = 6 + }, +/obj/machinery/keycard_auth/directional/east, +/obj/machinery/button/door/directional/east{ + pixel_y = 12; + name = "privacy shutter control"; + id = "cmoprivacy" + }, +/turf/open/floor/holofloor/dark, +/area/station/command/heads_quarters/cmo) +"evr" = ( +/obj/machinery/door/airlock/external, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "warneverchanges" + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/external, +/turf/open/floor/plating, +/area/station/maintenance/department/science) +"evA" = ( +/obj/machinery/atmospherics/components/unary/thermomachine/freezer/on{ + dir = 4; + name = "euthanization chamber freezer" + }, +/obj/structure/window/reinforced/spawner/directional/east, +/obj/effect/turf_decal/tile/blue/fourcorners, +/turf/open/floor/iron, +/area/station/science/xenobiology) +"evN" = ( +/obj/machinery/rnd/server/master, +/obj/effect/turf_decal/siding/blue{ + dir = 8 + }, +/turf/open/floor/circuit/telecomms/server, +/area/station/science/server) +"evO" = ( +/obj/effect/turf_decal/delivery, +/obj/effect/decal/cleanable/dirt, +/obj/structure/closet/secure_closet/atmospherics, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) +"evQ" = ( +/turf/open/openspace, +/area/station/medical/medbay/central) +"evT" = ( +/obj/structure/railing{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron, +/area/station/maintenance/department/medical/central) +"ewa" = ( +/obj/effect/turf_decal/tile/yellow/fourcorners, +/obj/structure/table, +/obj/item/stock_parts/power_store/cell/emproof{ + pixel_y = 6 + }, +/obj/item/stock_parts/power_store/cell/emproof{ + pixel_y = 3 + }, +/obj/item/stock_parts/power_store/cell/emproof, +/turf/open/floor/iron, +/area/station/engineering/main) +"ewr" = ( +/obj/effect/spawner/random/trash/botanical_waste, +/obj/effect/mapping_helpers/burnt_floor, +/turf/open/floor/plating, +/area/station/maintenance/central/greater) +"ewJ" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/central/lesser) +"ewL" = ( +/obj/machinery/door/airlock/engineering/glass/critical{ + heat_proof = 1; + name = "Supermatter Chamber" + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 8 + }, +/turf/open/floor/engine, +/area/station/engineering/supermatter) +"ewM" = ( +/obj/effect/spawner/structure/window, +/turf/open/floor/plating, +/area/station/engineering/atmos/upper) +"ewX" = ( +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/exit/departure_lounge) +"exg" = ( +/obj/machinery/netpod, +/obj/structure/window/reinforced/spawner/directional/west, +/obj/structure/cable, +/obj/structure/sign/poster/contraband/lusty_xenomorph/directional/north, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/cargo/bitrunning/den) +"exk" = ( +/obj/structure/table, +/obj/item/surgical_drapes, +/obj/item/cautery, +/obj/item/reagent_containers/spray/cleaner{ + pixel_x = -10; + pixel_y = -1 + }, +/obj/item/radio/intercom/directional/north, +/turf/open/floor/iron/white/smooth_large, +/area/station/science/robotics/lab) +"exz" = ( +/obj/structure/chair/sofa/bench/left{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/machinery/light/warm/dim/directional/north, +/turf/open/floor/iron/dark, +/area/station/security/courtroom) +"exF" = ( +/obj/effect/turf_decal/tile/red/half/contrasted, +/turf/open/floor/iron, +/area/station/security/office) +"exQ" = ( +/obj/structure/rack, +/obj/effect/turf_decal/bot, +/obj/item/book/manual/wiki/robotics_cyborgs, +/obj/item/storage/toolbox/mechanical{ + pixel_x = -3; + pixel_y = 3 + }, +/obj/item/storage/toolbox/electrical, +/obj/item/multitool, +/obj/item/clothing/head/utility/welding, +/obj/item/clothing/glasses/welding, +/obj/machinery/airalarm/directional/south, +/turf/open/floor/iron/dark/textured, +/area/station/science/robotics/lab) +"exR" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/structure/table/wood, +/obj/structure/cable, +/obj/item/clothing/head/costume/sombrero/green, +/obj/structure/disposalpipe/segment, +/turf/open/floor/wood, +/area/station/service/library) +"exS" = ( +/obj/structure/cable, +/obj/effect/turf_decal/sand/plating, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plating, +/area/station/asteroid) +"exT" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"eyf" = ( +/obj/effect/spawner/random/entertainment/arcade{ + dir = 4 + }, +/turf/open/misc/asteroid, +/area/station/maintenance/central/greater) +"eyg" = ( +/turf/closed/wall/r_wall, +/area/station/engineering/break_room) +"eyn" = ( +/obj/machinery/vending/clothing, +/turf/open/floor/wood/parquet, +/area/station/service/theater) +"eyp" = ( +/obj/machinery/light/directional/west, +/turf/open/openspace, +/area/station/engineering/supermatter/room) +"eyq" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"eyv" = ( +/obj/machinery/plate_press, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/security/prison/work) +"eyN" = ( +/obj/structure/table, +/obj/item/grenade/chem_grenade/smart_metal_foam{ + pixel_x = -4; + pixel_y = 6 + }, +/obj/item/grenade/chem_grenade/smart_metal_foam{ + pixel_x = 4; + pixel_y = 2 + }, +/obj/item/grenade/chem_grenade/smart_metal_foam{ + pixel_x = 8 + }, +/obj/item/grenade/chem_grenade/smart_metal_foam{ + pixel_y = 4 + }, +/obj/machinery/status_display/evac/directional/west, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/item/radio/off{ + pixel_y = -9; + pixel_x = -5 + }, +/obj/item/multitool{ + pixel_x = 5; + pixel_y = -12 + }, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/command/storage/eva) +"ezg" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/preopen{ + id = "xeno_blastdoor"; + name = "Biohazard Containment Door" + }, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plating, +/area/station/science/xenobiology) +"ezj" = ( +/obj/structure/bookcase/random, +/obj/machinery/camera/autoname/directional/north, +/turf/open/floor/iron, +/area/station/security/prison) +"ezk" = ( +/obj/effect/spawner/structure/window, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"ezF" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/iron/white/smooth_large, +/area/station/command/heads_quarters/cmo) +"ezL" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/turf/open/floor/wood, +/area/station/commons/lounge) +"ezM" = ( +/obj/structure/bodycontainer/morgue, +/obj/machinery/camera/autoname/directional/west{ + network = list("ss13","medbay") + }, +/turf/open/floor/iron/dark/textured, +/area/station/medical/morgue) +"ezP" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/cargo/storage) +"ezZ" = ( +/obj/structure/closet/crate/goldcrate, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/bot_white, +/obj/machinery/camera/motion/directional/south{ + c_tag = "Vault"; + network = list("vault") + }, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/command/nuke_storage) +"eAg" = ( +/obj/effect/turf_decal/siding/wood/corner, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/turf/open/floor/wood, +/area/station/service/library) +"eAk" = ( +/obj/effect/decal/cleanable/rubble, +/obj/machinery/light/small/dim/directional/north, +/obj/machinery/space_heater, +/turf/open/misc/asteroid, +/area/station/maintenance/port/greater) +"eAq" = ( +/obj/structure/chair{ + dir = 4 + }, +/mob/living/basic/mouse, +/obj/effect/mapping_helpers/mob_buckler, +/turf/open/floor/iron/checker, +/area/station/maintenance/department/medical) +"eAx" = ( +/obj/machinery/disposal/bin, +/obj/effect/turf_decal/bot, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/obj/machinery/computer/security/telescreen/entertainment/directional/south, +/turf/open/floor/wood, +/area/station/commons/lounge) +"eAJ" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/white/smooth_edge{ + dir = 8 + }, +/area/station/medical/exam_room) +"eAP" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/item/stack/sheet/iron, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/spawner/random/trash/mess, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) +"eAW" = ( +/obj/structure/cable, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/ai_monitored/turret_protected/aisat_interior) +"eAZ" = ( +/obj/structure/railing, +/obj/machinery/door/firedoor/border_only, +/obj/effect/turf_decal/trimline/blue/filled/line, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/blue/filled/mid_joiner, +/turf/open/floor/iron/white/smooth_large, +/area/station/medical/medbay/central) +"eBa" = ( +/obj/effect/landmark/event_spawn, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/carpet/red, +/area/station/command/heads_quarters/hos) +"eBb" = ( +/obj/machinery/duct, +/obj/structure/cable, +/obj/effect/turf_decal/tile/dark_green/opposingcorners, +/obj/machinery/camera/autoname/directional/south, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/hallway/secondary/service) +"eBd" = ( +/obj/machinery/door/airlock/external{ + name = "Escape Pod One"; + space_dir = 1 + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper, +/obj/effect/mapping_helpers/burnt_floor, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"eBh" = ( +/obj/effect/turf_decal/tile/red/fourcorners, +/obj/machinery/airalarm/directional/north, +/turf/open/floor/iron/white, +/area/station/security/prison/safe) +"eBD" = ( +/obj/item/kirbyplants/random, +/obj/structure/railing/corner{ + dir = 8 + }, +/obj/machinery/firealarm/directional/west, +/obj/item/radio/intercom/directional/north, +/turf/open/floor/iron/white, +/area/station/science/research) +"eBE" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"eBH" = ( +/obj/machinery/portable_atmospherics/canister/nitrous_oxide, +/turf/open/floor/iron/white/smooth_large, +/area/station/science/ordnance/storage) +"eBK" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/dark_blue/half/contrasted{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/command/bridge) +"eBY" = ( +/obj/machinery/destructive_scanner, +/obj/effect/turf_decal/tile/purple/half/contrasted{ + dir = 1 + }, +/turf/open/floor/iron/white, +/area/station/science/lobby) +"eBZ" = ( +/obj/effect/turf_decal/bot{ + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/portables_connector/visible, +/obj/machinery/camera/autoname/directional/north{ + network = list("ss13","engine") + }, +/turf/open/floor/iron/dark, +/area/station/engineering/supermatter/room) +"eCb" = ( +/obj/machinery/vending/hydronutrients, +/turf/open/floor/iron, +/area/station/service/hydroponics) +"eCd" = ( +/obj/effect/turf_decal/siding/white{ + dir = 6 + }, +/obj/machinery/portable_atmospherics/canister/anesthetic_mix, +/obj/machinery/power/apc/auto_name/directional/west, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/medical/coldroom) +"eCp" = ( +/obj/machinery/power/terminal{ + dir = 1 + }, +/obj/structure/cable, +/obj/machinery/light/small/directional/east, +/turf/open/floor/plating, +/area/station/maintenance/solars/port/aft) +"eCt" = ( +/obj/machinery/door/airlock/mining{ + name = "Cargo Mail Outlet" + }, +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/access/all/supply/general, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/cargo/sorting) +"eCz" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/obj/structure/cable, +/obj/machinery/duct, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/station/medical/treatment_center) +"eCC" = ( +/obj/effect/spawner/random/structure/closet_maintenance, +/obj/item/extinguisher, +/obj/effect/spawner/random/maintenance/two, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/department/engine) +"eCF" = ( +/obj/structure/lattice, +/obj/structure/marker_beacon/yellow, +/turf/open/space/openspace, +/area/space/nearstation) +"eCO" = ( +/obj/machinery/shower/directional/west, +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 4; + icon_state = "siding_thinplating_new_end" + }, +/obj/effect/turf_decal{ + icon = 'icons/obj/mining_zones/survival_pod.dmi'; + icon_state = "fan_tiny" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/checker, +/area/station/science/research) +"eCR" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/turf/open/floor/iron/white, +/area/station/command/heads_quarters/cmo) +"eCW" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) +"eDa" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/cargo/storage) +"eDb" = ( +/obj/structure/reagent_dispensers/water_cooler, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"eDq" = ( +/obj/effect/turf_decal/tile/brown/half/contrasted, +/obj/structure/table, +/obj/item/clothing/gloves/cargo_gauntlet{ + pixel_y = -3 + }, +/obj/item/clothing/gloves/cargo_gauntlet, +/obj/item/clothing/gloves/cargo_gauntlet{ + pixel_y = 3 + }, +/obj/machinery/firealarm/directional/south, +/turf/open/floor/iron, +/area/station/cargo/storage) +"eDu" = ( +/obj/effect/landmark/start/cargo_technician, +/obj/effect/turf_decal/bot_white, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/cargo/storage) +"eDG" = ( +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 1 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/iron, +/area/station/security) +"eDV" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/wood, +/area/station/commons/lounge) +"eEa" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"eEm" = ( +/obj/effect/turf_decal/stripes/corner, +/obj/effect/turf_decal/tile/neutral, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"eEx" = ( +/obj/structure/stairs/east, +/obj/structure/railing, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/aisat/foyer) +"eEC" = ( +/obj/machinery/barsign/directional/south, +/obj/machinery/vending/cigarette, +/obj/effect/turf_decal/siding/brown{ + dir = 1 + }, +/obj/effect/turf_decal/tile/bar/opposingcorners, +/turf/open/floor/iron, +/area/station/commons/lounge) +"eEE" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/structure/closet/emcloset, +/obj/structure/window/spawner/directional/east, +/obj/effect/landmark/start/hangover/closet, +/turf/open/floor/iron, +/area/station/commons/fitness/recreation) +"eEG" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/closet/crate/science, +/obj/item/reagent_containers/cup/bucket, +/turf/open/floor/plating, +/area/station/science/robotics/storage) +"eES" = ( +/turf/open/openspace, +/area/station/engineering/atmospherics_engine) +"eEV" = ( +/obj/machinery/camera/autoname/directional/north{ + network = list("ss13","rd","xeno") + }, +/turf/open/floor/engine, +/area/station/science/xenobiology) +"eEX" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/plating/airless, +/area/space/nearstation) +"eFj" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"eFl" = ( +/obj/machinery/door/airlock/public/glass{ + name = "Garden" + }, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/turf/open/floor/iron, +/area/station/service/hydroponics/garden) +"eFu" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/firealarm/directional/east, +/obj/item/kirbyplants/random, +/turf/open/floor/iron, +/area/station/cargo/miningoffice) +"eFx" = ( +/mob/living/carbon/human/species/monkey, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/grass, +/area/station/science/genetics) +"eFy" = ( +/obj/machinery/power/apc/auto_name/directional/south, +/obj/effect/turf_decal/tile/red/half/contrasted, +/obj/structure/cable, +/obj/item/storage/box/prisoner, +/obj/structure/table, +/turf/open/floor/iron/textured, +/area/station/security/processing) +"eFK" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/security/prison) +"eFM" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 + }, +/obj/machinery/light/directional/north, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/turf/open/floor/iron, +/area/station/engineering/main) +"eFP" = ( +/obj/machinery/atmospherics/components/unary/portables_connector/visible/layer4, +/obj/machinery/portable_atmospherics/canister/air, +/turf/open/floor/plating, +/area/station/maintenance/central/lesser) +"eGn" = ( +/obj/effect/turf_decal/arrows{ + dir = 4; + pixel_x = -7 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 8 + }, +/obj/machinery/door/firedoor, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/exit/departure_lounge) +"eGz" = ( +/obj/structure/window/reinforced/spawner/directional/east, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk, +/obj/structure/sign/directions/security/directional/north{ + pixel_y = 40 + }, +/obj/structure/sign/directions/medical/directional/north{ + dir = 2 + }, +/obj/structure/sign/directions/evac/directional/north{ + pixel_y = 24; + dir = 2 + }, +/turf/open/floor/wood, +/area/station/service/cafeteria) +"eGJ" = ( +/obj/effect/turf_decal/siding/green, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/commons/storage/art) +"eGN" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/obj/effect/turf_decal/plaque{ + icon_state = "L3" + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"eHa" = ( +/obj/effect/turf_decal/tile/dark_blue/half/contrasted{ + dir = 4 + }, +/obj/structure/sign/poster/official/random/directional/east, +/turf/open/floor/iron, +/area/station/command/bridge) +"eHc" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"eHA" = ( +/obj/structure/railing/corner{ + dir = 1 + }, +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 1 + }, +/obj/machinery/status_display/supply{ + pixel_y = 32 + }, +/turf/open/floor/iron, +/area/station/cargo/storage) +"eHU" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/mapping_helpers/burnt_floor, +/turf/open/floor/plating, +/area/station/maintenance/central/greater) +"eIk" = ( +/obj/effect/turf_decal/sand/plating, +/obj/machinery/light/small/directional/south, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/plating, +/area/station/engineering/supermatter/room) +"eIy" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/port/lesser) +"eIO" = ( +/obj/effect/landmark/atmospheric_sanity/ignore_area, +/turf/closed/wall, +/area/station/science/xenobiology/hallway) +"eIP" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron/white, +/area/station/medical/treatment_center) +"eIV" = ( +/obj/structure/cable/multilayer/multiz, +/obj/effect/turf_decal/stripes/line, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/department/science) +"eIY" = ( +/obj/effect/landmark/event_spawn, +/turf/open/floor/iron/white, +/area/station/medical/storage) +"eJi" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/visible/layer2, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) +"eJr" = ( +/obj/item/flashlight/flare/candle{ + start_on = 1; + icon_state = "candle1_lit"; + pixel_y = 12 + }, +/obj/structure/broken_flooring/side/directional/west, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/department/science) +"eJB" = ( +/obj/structure/reagent_dispensers/watertank/high, +/obj/item/reagent_containers/cup/watering_can, +/turf/open/floor/iron, +/area/station/service/hydroponics) +"eJE" = ( +/obj/machinery/camera/autoname/directional/south, +/turf/open/floor/carpet/executive, +/area/station/command/corporate_showroom) +"eJQ" = ( +/obj/structure/flora/bush/flowers_pp/style_random, +/obj/structure/window/spawner/directional/south, +/turf/open/misc/grass, +/area/station/ai_monitored/turret_protected/aisat/foyer) +"eJT" = ( +/obj/machinery/door/window/brigdoor/right/directional/north{ + req_access = list("armory") + }, +/obj/structure/railing{ + dir = 1 + }, +/turf/open/floor/glass/reinforced, +/area/station/security/prison) +"eKq" = ( +/obj/effect/turf_decal/tile/dark_red/opposingcorners, +/obj/structure/sign/picture_frame/portrait/bar{ + pixel_y = -28 + }, +/obj/structure/reagent_dispensers/beerkeg, +/obj/machinery/firealarm/directional/east, +/turf/open/floor/iron/dark, +/area/station/service/bar/backroom) +"eKw" = ( +/obj/machinery/light/small/dim/directional/north, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/iron/dark/small, +/area/station/engineering/transit_tube) +"eKD" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"eKR" = ( +/turf/closed/wall/r_wall, +/area/station/command/bridge) +"eLe" = ( +/obj/machinery/power/apc/auto_name/directional/east, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/security/warden) +"eLg" = ( +/obj/structure/table, +/obj/item/toy/plush/pkplush, +/obj/effect/turf_decal/tile/red/diagonal_edge, +/turf/open/floor/iron/dark, +/area/station/security/warden) +"eLk" = ( +/obj/effect/spawner/random/trash/hobo_squat, +/turf/open/floor/iron/dark, +/area/station/maintenance/department/engine) +"eLm" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/maintenance/department/engine) +"eLu" = ( +/obj/effect/mapping_helpers/mail_sorting/science/rd_office, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/sorting/mail/flip{ + dir = 2 + }, +/turf/open/floor/iron/white/smooth_large, +/area/station/science/research) +"eLU" = ( +/obj/structure/lattice/catwalk, +/obj/structure/cable, +/obj/machinery/power/tracker, +/turf/open/space/openspace, +/area/station/solars/port) +"eLV" = ( +/obj/effect/spawner/structure/window, +/obj/machinery/atmospherics/pipe/smart/simple/purple/visible{ + dir = 8 + }, +/turf/open/floor/plating, +/area/station/engineering/atmos/pumproom) +"eMj" = ( +/obj/machinery/door/airlock/hatch{ + name = "MiniSat Access" + }, +/obj/effect/mapping_helpers/airlock/access/all/command/minisat, +/obj/machinery/door/firedoor, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/ai_monitored/turret_protected/aisat/uppersouth) +"eMk" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/green/visible, +/obj/effect/turf_decal/stripes{ + dir = 4 + }, +/obj/machinery/light/directional/east, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"eMq" = ( +/obj/structure/sign/poster/contraband/random/directional/east, +/turf/open/openspace, +/area/station/maintenance/department/medical/central) +"eMr" = ( +/obj/effect/turf_decal/tile/red/half/contrasted, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/station/security) +"eMD" = ( +/turf/open/floor/iron/dark, +/area/station/ai_monitored/command/storage/satellite) +"eMG" = ( +/obj/structure/closet/firecloset, +/turf/open/floor/iron/textured, +/area/station/hallway/primary/central) +"eNj" = ( +/obj/effect/spawner/costume/sexyclown, +/turf/open/floor/plating, +/area/station/maintenance/aft/upper) +"eNk" = ( +/obj/item/stack/cable_coil, +/turf/open/space/openspace, +/area/space/nearstation) +"eNr" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/turf/open/floor/iron/grimy, +/area/station/security/detectives_office) +"eNS" = ( +/obj/effect/turf_decal/tile/red/half/contrasted, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/security) +"eNU" = ( +/obj/machinery/door/window/brigdoor/right/directional/north{ + req_access = list("xenobiology") + }, +/obj/machinery/door/window/brigdoor/left/directional/south{ + req_access = list("xenobiology") + }, +/obj/machinery/door/poddoor/preopen{ + id = "xenobio8"; + name = "Xenobio Pen 8 Blast Door" + }, +/turf/open/floor/engine, +/area/station/science/xenobiology) +"eOn" = ( +/obj/effect/landmark/atmospheric_sanity/ignore_area, +/turf/closed/wall/r_wall, +/area/station/ai_monitored/turret_protected/aisat/foyer) +"eOx" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/asteroid) +"eOD" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/white, +/area/station/science/research) +"eOI" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/command/heads_quarters/cmo) +"eOY" = ( +/obj/effect/spawner/structure/window, +/turf/open/floor/plating, +/area/station/service/hydroponics) +"eOZ" = ( +/obj/effect/turf_decal/siding/white{ + dir = 10 + }, +/obj/machinery/portable_atmospherics/canister/anesthetic_mix, +/obj/machinery/light_switch/directional/east, +/turf/open/floor/iron, +/area/station/medical/coldroom) +"ePC" = ( +/obj/machinery/power/apc/auto_name/directional/west, +/obj/effect/mapping_helpers/burnt_floor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/solars/port) +"ePT" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/engineering/main) +"eQf" = ( +/obj/machinery/airalarm/directional/north, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/science/research) +"eQi" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/turf/open/floor/wood, +/area/station/commons/lounge) +"eQF" = ( +/obj/effect/turf_decal/tile/red/anticorner/contrasted{ + dir = 8 + }, +/obj/machinery/light/small/dim/directional/west, +/obj/machinery/firealarm/directional/south, +/obj/item/storage/cans/sixbeer, +/obj/structure/table, +/turf/open/floor/iron, +/area/station/security/warden) +"eQI" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/structure/sign/poster/random/directional/west, +/turf/open/floor/plating, +/area/station/maintenance/department/medical) +"eQJ" = ( +/obj/structure/rack, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 1 + }, +/obj/item/radio/intercom/directional/south, +/obj/effect/spawner/random/armory/dragnet, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/security/armory) +"eQQ" = ( +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/cargo/storage) +"eQY" = ( +/obj/structure/cable, +/turf/open/floor/iron/freezer, +/area/station/security/prison/shower) +"eRf" = ( +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/hallway/secondary/exit/departure_lounge) +"eRh" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"eRq" = ( +/obj/structure/plasticflaps/opaque, +/obj/machinery/door/window/left/directional/north{ + req_access = list("science") + }, +/turf/open/floor/plating, +/area/station/maintenance/port/lesser) +"eRu" = ( +/obj/effect/spawner/random/structure/closet_empty/crate/with_loot, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/department/science) +"eRA" = ( +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 8 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/security/brig) +"eRD" = ( +/obj/machinery/power/emitter, +/turf/open/floor/plating, +/area/station/engineering/storage) +"eSc" = ( +/obj/effect/landmark/event_spawn, +/turf/open/floor/iron/corner{ + dir = 8 + }, +/area/station/service/hydroponics/garden) +"eSe" = ( +/obj/structure/chair/sofa/bench, +/obj/effect/spawner/random/trash/mess, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"eSs" = ( +/obj/machinery/door/airlock/research/glass{ + name = "Chemistry Minisat" + }, +/obj/effect/mapping_helpers/airlock/access/all/medical/chemistry, +/obj/effect/turf_decal/trimline/yellow/filled/corner{ + dir = 4 + }, +/obj/machinery/door/firedoor, +/turf/open/floor/iron/white, +/area/station/medical/chemistry/minisat) +"eSE" = ( +/obj/structure/chair/sofa/corp/left{ + desc = "Looks like someone threw it out. Covered in donut crumbs."; + name = "couch"; + dir = 1 + }, +/obj/machinery/light/directional/south, +/obj/effect/turf_decal/tile/red/half/contrasted, +/turf/open/floor/iron/half, +/area/station/security/breakroom) +"eSH" = ( +/obj/structure/table/glass, +/obj/effect/turf_decal/tile/green/half/contrasted, +/obj/item/reagent_containers/cup/beaker/large{ + pixel_x = -12 + }, +/obj/item/reagent_containers/cup/beaker/large{ + pixel_x = 4 + }, +/obj/item/reagent_containers/dropper{ + pixel_y = 12 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment, +/obj/machinery/light/dim/directional/south, +/turf/open/floor/iron/white, +/area/station/medical/virology) +"eSL" = ( +/obj/effect/turf_decal/sand/plating, +/obj/machinery/door/airlock/maintenance_hatch, +/obj/effect/mapping_helpers/airlock/access/all/medical/general, +/turf/open/floor/plating, +/area/station/medical/medbay/central) +"eSR" = ( +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/turf/open/floor/iron, +/area/station/cargo/lobby) +"eSS" = ( +/turf/closed/wall/r_wall, +/area/station/maintenance/department/cargo) +"eTd" = ( +/obj/structure/lattice/catwalk, +/obj/structure/cable, +/obj/structure/railing/corner{ + dir = 8 + }, +/turf/open/openspace, +/area/station/security/prison/garden) +"eTg" = ( +/obj/effect/turf_decal/stripes{ + dir = 9 + }, +/obj/structure/sign/warning/radiation/rad_area/directional/north, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/engineering/atmospherics_engine) +"eTi" = ( +/obj/structure/closet/crate/critter, +/mob/living/basic/mothroach, +/obj/item/stack/spacecash/c100, +/turf/open/space/basic, +/area/space/nearstation) +"eTn" = ( +/obj/machinery/light/small/directional/north, +/turf/open/floor/iron/dark, +/area/station/security/lockers) +"eTu" = ( +/obj/effect/turf_decal/tile/neutral, +/obj/structure/table, +/obj/item/trash/waffles, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"eTZ" = ( +/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ + dir = 8 + }, +/obj/structure/lattice, +/turf/open/space/basic, +/area/space/nearstation) +"eUj" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/portable_atmospherics/canister, +/turf/open/floor/plating, +/area/station/maintenance/department/science) +"eUB" = ( +/turf/open/floor/catwalk_floor/flat_white, +/area/station/medical/treatment_center) +"eUD" = ( +/obj/effect/turf_decal/plaque{ + icon_state = "L12" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"eUW" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/station/engineering/main) +"eVq" = ( +/obj/structure/cable, +/obj/machinery/power/terminal{ + dir = 1 + }, +/obj/machinery/light/small/directional/east, +/turf/open/floor/plating, +/area/station/maintenance/solars/port) +"eVv" = ( +/obj/structure/filingcabinet/chestdrawer, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 1 + }, +/obj/machinery/button/door/directional/north{ + normaldoorcontrol = 1; + id = "triage"; + name = "triage button"; + pixel_x = -26 + }, +/obj/machinery/button/ticket_machine{ + pixel_y = 36; + pixel_x = -26 + }, +/turf/open/floor/iron/white, +/area/station/medical/exam_room) +"eVA" = ( +/turf/open/floor/iron, +/area/station/command/heads_quarters/ce) +"eVE" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/structure/table/reinforced, +/obj/item/paperplane, +/obj/item/paperplane{ + pixel_x = 15; + pixel_y = 4 + }, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/aisat/foyer) +"eVG" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/spawner/random/trash/hobo_squat, +/turf/open/floor/iron/showroomfloor, +/area/station/maintenance/department/engine) +"eVR" = ( +/obj/effect/turf_decal/stripes/corner, +/obj/machinery/button/door/directional/south{ + id = "mechbay"; + name = "Mech Bay Shutters Control"; + req_access = list("robotics") + }, +/obj/effect/turf_decal/tile/purple/half/contrasted, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/white, +/area/station/science/lobby) +"eWB" = ( +/obj/machinery/computer/prisoner/management{ + dir = 4 + }, +/obj/effect/turf_decal/tile/red/anticorner/contrasted{ + dir = 1 + }, +/turf/open/floor/iron/textured, +/area/station/security/warden) +"eWC" = ( +/obj/structure/tank_dispenser/oxygen, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/station/security/lockers) +"eWD" = ( +/obj/structure/cable/layer3, +/turf/open/floor/catwalk_floor/iron_dark/telecomms, +/area/station/ai_monitored/turret_protected/ai) +"eWJ" = ( +/obj/item/radio/intercom/directional/south, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/carpet/red, +/area/station/command/heads_quarters/hos) +"eWO" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/circuit/green, +/area/station/ai_monitored/turret_protected/ai_upload) +"eXi" = ( +/obj/structure/railing{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/hallway/secondary/exit/departure_lounge) +"eXu" = ( +/obj/structure/lattice/catwalk, +/obj/structure/railing{ + dir = 5 + }, +/turf/open/openspace, +/area/station/security/prison/shower) +"eXy" = ( +/obj/structure/chair/office/light, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark/telecomms, +/area/station/tcommsat/server) +"eXM" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/command/heads_quarters/hop) +"eXU" = ( +/obj/machinery/door/airlock/public/glass, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/turf/open/floor/iron, +/area/station/commons/locker) +"eYd" = ( +/obj/effect/turf_decal/tile/brown/anticorner/contrasted, +/obj/machinery/button/door/directional/south{ + id = "secwarehouse"; + req_access = list("shipping") + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/cargo/storage) +"eYe" = ( +/obj/structure/window/reinforced/spawner/directional/east, +/obj/effect/turf_decal/siding/wood{ + dir = 5 + }, +/obj/machinery/power/apc/auto_name/directional/south, +/obj/structure/cable, +/turf/open/floor/carpet, +/area/station/service/chapel/funeral) +"eYj" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/obj/structure/cable, +/obj/effect/landmark/event_spawn, +/turf/open/floor/iron/dark, +/area/station/security/lockers) +"eYo" = ( +/obj/structure/lattice/catwalk, +/obj/structure/cable, +/turf/open/space/basic, +/area/station/solars/starboard/fore) +"eYv" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/white, +/area/station/medical/exam_room) +"eYF" = ( +/obj/structure/railing/corner{ + dir = 8 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/iron/dark/smooth_large, +/area/station/command/meeting_room) +"eYI" = ( +/obj/structure/closet/secure_closet/personal/cabinet, +/obj/item/clothing/suit/jacket/det_suit, +/obj/item/clothing/gloves/color/black, +/obj/item/clothing/head/fedora/det_hat/minor, +/obj/effect/decal/cleanable/dirt/dust, +/obj/item/book/manual/wiki/security_space_law, +/turf/open/floor/wood, +/area/station/security/detectives_office/private_investigators_office) +"eYM" = ( +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/engineering/atmos) +"eYO" = ( +/obj/effect/turf_decal/tile/dark_blue/half/contrasted{ + dir = 8 + }, +/obj/machinery/camera/autoname/directional/west, +/obj/structure/secure_safe/caps_spare, +/obj/structure/table/reinforced, +/turf/open/floor/iron/dark, +/area/station/command/bridge) +"eYP" = ( +/turf/closed/wall/rust, +/area/station/medical/chemistry/minisat) +"eYT" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/item/radio/intercom/prison/directional/north, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/plating, +/area/station/security/prison/work) +"eZc" = ( +/obj/machinery/newscaster/directional/north, +/obj/structure/extinguisher_cabinet/directional/west, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/carpet/purple, +/area/station/service/library) +"eZg" = ( +/obj/effect/turf_decal/trimline/neutral/filled/warning{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/mannequin/skeleton, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/medical/morgue) +"eZn" = ( +/obj/structure/cable, +/obj/machinery/door/airlock/public/glass{ + name = "Starboard Primary Hallway" + }, +/obj/machinery/door/firedoor, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) +"eZo" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/white, +/area/station/medical/chemistry/minisat) +"eZr" = ( +/obj/item/paper/guides/jobs/engi/gravity_gen, +/obj/effect/spawner/random/bureaucracy/pen, +/obj/structure/table, +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/west, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 9 + }, +/turf/open/floor/iron, +/area/station/engineering/gravity_generator) +"eZu" = ( +/obj/effect/turf_decal/trimline/yellow/filled/corner{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/medical/chemistry/minisat) +"eZN" = ( +/obj/machinery/power/apc/auto_name/directional/south, +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/department/science) +"eZQ" = ( +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/obj/structure/cable, +/obj/effect/spawner/random/trash/mess, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"fad" = ( +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/cargo/lobby) +"fae" = ( +/obj/machinery/plate_press, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/light/small/dim/directional/north, +/turf/open/floor/plating, +/area/station/security/prison/work) +"faf" = ( +/obj/machinery/door/firedoor, +/obj/machinery/firealarm/directional/west, +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/medical/treatment_center) +"fai" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden, +/turf/open/floor/iron/white, +/area/station/medical/treatment_center) +"fao" = ( +/obj/structure/cable, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/wood/tile, +/area/station/service/bar) +"faz" = ( +/obj/structure/chair/office, +/obj/effect/landmark/start/chemist, +/obj/effect/turf_decal/trimline/yellow/filled/line, +/obj/effect/turf_decal/trimline/yellow/filled/mid_joiner, +/turf/open/floor/iron/white/smooth_edge, +/area/station/medical/pharmacy) +"faK" = ( +/turf/open/floor/glass/reinforced, +/area/station/ai_monitored/turret_protected/ai_upload_foyer) +"faP" = ( +/obj/effect/turf_decal/siding/wood, +/obj/machinery/holopad, +/obj/effect/turf_decal/bot, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/wood, +/area/station/service/cafeteria) +"fba" = ( +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/turf/open/floor/iron/dark, +/area/station/security/lockers) +"fbC" = ( +/obj/item/kirbyplants/random, +/obj/effect/turf_decal/bot, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/camera/autoname/directional/west, +/turf/open/floor/iron, +/area/station/hallway/secondary/command) +"fbM" = ( +/obj/machinery/incident_display/delam/directional/north, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/yellow{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) +"fbN" = ( +/obj/machinery/light/small/directional/south, +/obj/effect/spawner/random/structure/closet_empty/crate/with_loot, +/obj/item/coin/plasma, +/turf/open/misc/asteroid, +/area/station/maintenance/department/science) +"fcC" = ( +/mob/living/basic/mining/basilisk, +/turf/open/misc/asteroid/airless, +/area/space/nearstation) +"fcH" = ( +/obj/structure/frame/computer{ + anchored = 1; + dir = 8 + }, +/obj/item/circuitboard/computer/secure_data, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/grimy, +/area/station/security/detectives_office/private_investigators_office) +"fcK" = ( +/obj/machinery/door/airlock/maintenance_hatch, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/engineering/atmos/upper) +"fcM" = ( +/obj/effect/turf_decal/trimline/blue/arrow_ccw{ + dir = 1 + }, +/obj/effect/turf_decal/tile/blue/half/contrasted{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/station/medical/medbay/lobby) +"fde" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/turf/open/floor/engine, +/area/station/command/corporate_dock) +"fdj" = ( +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/station/engineering/gravity_generator) +"fdm" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/table, +/obj/item/plate/large, +/obj/effect/spawner/random/food_or_drink/donkpockets, +/turf/open/floor/iron, +/area/station/cargo/warehouse) +"fdy" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 8 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/hallway/secondary/entry) +"fdC" = ( +/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ + dir = 5 + }, +/obj/effect/turf_decal/tile/yellow{ + dir = 4 + }, +/turf/open/floor/iron/checker, +/area/station/engineering/atmos) +"fdJ" = ( +/obj/machinery/atmospherics/components/unary/outlet_injector/monitored/nitrogen_input{ + dir = 8 + }, +/turf/open/floor/engine/n2, +/area/station/engineering/atmos) +"fdN" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark/small, +/area/station/science/cytology) +"fdQ" = ( +/obj/structure/table, +/obj/effect/spawner/random/entertainment/cigarette, +/obj/effect/spawner/random/entertainment/lighter, +/obj/machinery/light/small/dim/directional/north, +/turf/open/floor/iron/grimy, +/area/station/maintenance/central/greater) +"fee" = ( +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 8 + }, +/turf/open/floor/iron/textured, +/area/station/security/processing) +"feu" = ( +/obj/effect/landmark/start/janitor, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/service/janitor) +"feA" = ( +/obj/structure/chair/sofa/bench/solo{ + dir = 1 + }, +/obj/machinery/camera/autoname/directional/south, +/turf/open/floor/iron/textured, +/area/station/hallway/primary/central) +"feN" = ( +/obj/effect/turf_decal/tile/red, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/security) +"feQ" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/visible/layer2, +/turf/open/floor/plating, +/area/station/maintenance/disposal/incinerator) +"feR" = ( +/obj/machinery/computer/security/telescreen/ordnance/directional/south, +/turf/open/floor/iron/white, +/area/station/science/ordnance/testlab) +"feU" = ( +/obj/structure/cable, +/obj/machinery/door/airlock/maintenance/external, +/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/port/greater) +"feV" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/ai_monitored/turret_protected/aisat_interior) +"ffk" = ( +/obj/structure/chair/stool/directional/west, +/turf/open/floor/wood, +/area/station/commons/lounge) +"ffp" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/commons/vacant_room/commissary) +"fft" = ( +/obj/effect/turf_decal/siding/white, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/white/small, +/area/station/science/lobby) +"ffA" = ( +/obj/structure/railing/corner, +/obj/structure/cable, +/obj/effect/turf_decal/siding/wood/corner, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/turf/open/floor/wood/tile, +/area/station/service/bar) +"ffF" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"ffJ" = ( +/obj/machinery/atmospherics/pipe/layer_manifold/supply/hidden{ + dir = 4 + }, +/turf/closed/wall/r_wall, +/area/station/engineering/atmos/pumproom) +"ffK" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/simple/green/hidden{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/science/ordnance) +"ffT" = ( +/obj/structure/rack, +/obj/effect/spawner/random/maintenance/no_decals/two, +/obj/machinery/camera/autoname/motion/directional/east{ + network = list("minisat") + }, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/ai_monitored/turret_protected/aisat/uppersouth) +"fgi" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"fgq" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/food_or_drink/booze, +/obj/effect/spawner/random/trash/food_packaging, +/obj/structure/closet/crate, +/turf/open/floor/iron/dark, +/area/station/maintenance/department/engine) +"fgt" = ( +/obj/machinery/elevator_control_panel/directional/east{ + desc = "A small control panel used to move the kitchen dumbwaiter up and down."; + linked_elevator_id = "dumbwaiter_lift"; + name = "Dumbwaiter Control Panel"; + preset_destination_names = list("2"="Kitchen","3"="Hydroponics") + }, +/obj/effect/turf_decal/tile/blue, +/obj/effect/turf_decal/tile/green{ + dir = 4 + }, +/obj/structure/window/spawner/directional/south, +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/green/filled/corner{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/service/hydroponics) +"fgP" = ( +/obj/machinery/door/airlock/engineering{ + name = "Port Bow Solar Access" + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 8 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/sand/plating, +/turf/open/floor/plating, +/area/station/maintenance/solars/port/fore) +"fhs" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 8 + }, +/obj/machinery/coffeemaker, +/obj/item/coffee_cartridge, +/obj/item/food/chocolatebar{ + pixel_x = 3; + pixel_y = -12 + }, +/obj/structure/table, +/obj/machinery/requests_console/auto_name/directional/west, +/turf/open/floor/iron/white, +/area/station/medical/paramedic) +"fhu" = ( +/turf/open/floor/engine/n2, +/area/station/engineering/atmos) +"fhG" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/structure/table, +/obj/item/stack/sheet/mineral/plasma/five, +/obj/item/stack/sheet/mineral/plasma/five, +/obj/structure/sign/poster/official/random/directional/north, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/command/storage/satellite) +"fhH" = ( +/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/obj/machinery/door/airlock/engineering/glass{ + name = "Emitter Room" + }, +/obj/machinery/door/firedoor, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/engineering/supermatter/room) +"fhL" = ( +/obj/structure/rack, +/obj/effect/decal/cleanable/dirt/dust, +/obj/item/storage/fancy/cigarettes{ + rigged_omen = 1; + name = "\proper marlboro" + }, +/turf/open/floor/plating, +/area/station/commons/storage/art) +"fhN" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, +/turf/open/floor/plating, +/area/station/maintenance/department/science) +"fib" = ( +/obj/machinery/conveyor/auto{ + id = "hoptroll" + }, +/obj/structure/musician/piano/unanchored, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating/reinforced, +/area/station/command/emergency_closet) +"fid" = ( +/obj/structure/chair/sofa/bench, +/obj/machinery/firealarm/directional/north, +/turf/open/floor/iron/white, +/area/station/medical/exam_room) +"fin" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/dark/hidden, +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/science/xenobiology) +"fir" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/machinery/requests_console/directional/east{ + department = "Head of Security's Desk"; + name = "Head of Security's Request Console" + }, +/obj/effect/mapping_helpers/requests_console/information, +/obj/effect/mapping_helpers/requests_console/assistance, +/obj/effect/mapping_helpers/requests_console/announcement, +/turf/open/floor/wood, +/area/station/command/heads_quarters/hos) +"fiB" = ( +/obj/structure/bed{ + dir = 1 + }, +/obj/item/bedsheet{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light/small/directional/west, +/turf/open/floor/iron, +/area/station/security/brig) +"fiI" = ( +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/textured, +/area/station/construction/mining/aux_base) +"fjg" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"fjn" = ( +/obj/machinery/atmospherics/pipe/smart/manifold/yellow/visible, +/turf/open/floor/iron, +/area/station/engineering/atmos) +"fjp" = ( +/obj/effect/turf_decal/tile/red/anticorner/contrasted{ + dir = 1 + }, +/obj/machinery/airalarm/directional/west, +/obj/structure/table, +/obj/item/paper_bin{ + pixel_y = 3 + }, +/obj/item/pen{ + pixel_y = 3 + }, +/turf/open/floor/iron, +/area/station/security/brig/entrance) +"fjt" = ( +/obj/structure/cable, +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plating, +/area/station/engineering/main) +"fjC" = ( +/obj/machinery/door/airlock/maintenance_hatch, +/obj/effect/mapping_helpers/airlock/access/all/medical/general, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"fjF" = ( +/obj/effect/turf_decal/trimline/yellow/filled/corner{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/iron/white/smooth_large, +/area/station/medical/chemistry/minisat) +"fkh" = ( +/obj/effect/spawner/random/structure/grille{ + loot = list(/obj/structure/grille = 4, /obj/structure/grille/broken = 1) + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/department/bridge) +"fkn" = ( +/obj/structure/railing{ + dir = 1 + }, +/obj/structure/table/wood, +/turf/open/floor/carpet, +/area/station/service/theater) +"fkF" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/airalarm/directional/north, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/obj/effect/turf_decal/trimline/yellow/filled/mid_joiner{ + dir = 1 + }, +/turf/open/floor/iron/white/smooth_large, +/area/station/medical/chemistry/minisat) +"fkG" = ( +/obj/structure/railing, +/obj/structure/dresser, +/obj/machinery/light_switch/directional/west, +/turf/open/floor/carpet/red, +/area/station/command/heads_quarters/qm) +"flc" = ( +/obj/structure/window/spawner/directional/south, +/obj/machinery/door/window/right/directional/east{ + name = "Fitness Ring" + }, +/turf/open/floor/iron/dark, +/area/station/commons/fitness/recreation) +"fld" = ( +/obj/effect/spawner/random/food_or_drink/seed, +/obj/effect/spawner/random/food_or_drink/seed, +/obj/effect/spawner/random/trash/box, +/turf/open/floor/plating, +/area/station/maintenance/central/greater) +"flm" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark/side{ + dir = 8 + }, +/area/station/command/corporate_dock) +"fls" = ( +/obj/structure/broken_flooring/pile{ + dir = 1 + }, +/obj/effect/decal/cleanable/glass, +/obj/structure/table_frame, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"flH" = ( +/obj/structure/closet/boxinggloves, +/obj/effect/landmark/start/hangover/closet, +/turf/open/floor/iron/white/textured_large, +/area/station/commons/fitness/recreation) +"flN" = ( +/obj/effect/turf_decal/tile/brown/opposingcorners{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/commons/vacant_room/commissary) +"flQ" = ( +/obj/machinery/atmospherics/pipe/layer_manifold/dark/visible{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/engineering/atmos) +"flZ" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/sorting/mail/flip{ + dir = 2 + }, +/obj/effect/mapping_helpers/mail_sorting/security/detectives_office, +/turf/open/floor/iron, +/area/station/hallway/primary/fore) +"fma" = ( +/turf/closed/wall, +/area/station/medical/coldroom) +"fmr" = ( +/obj/structure/grille, +/obj/structure/lattice, +/turf/open/space/basic, +/area/space/nearstation) +"fmw" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/security/office) +"fmB" = ( +/obj/structure/secure_safe/directional/east, +/obj/structure/closet/secure_closet/evidence, +/obj/effect/decal/cleanable/dirt/dust, +/obj/item/radio/intercom/directional/north, +/turf/open/floor/iron, +/area/station/security/evidence) +"fmK" = ( +/obj/structure/cable, +/turf/open/floor/iron/white, +/area/station/science/explab) +"fmR" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/computer/cargo/request, +/obj/structure/window/reinforced/spawner/directional/north, +/obj/machinery/door/firedoor, +/turf/open/floor/iron/textured_large, +/area/station/cargo/sorting) +"fmY" = ( +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/station/maintenance/department/engine) +"fnc" = ( +/obj/machinery/light/warm/directional/north, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/wood, +/area/station/commons/lounge) +"fne" = ( +/obj/effect/turf_decal/sand/plating, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/plating, +/area/station/maintenance/central/greater) +"fnh" = ( +/turf/closed/wall, +/area/station/maintenance/department/medical) +"fno" = ( +/obj/effect/turf_decal/siding/white{ + dir = 10 + }, +/obj/effect/spawner/random/vending/snackvend, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/herringbone, +/area/station/hallway/primary/central) +"fnG" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/spawner/random/trash/mess, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"fnI" = ( +/obj/machinery/atmospherics/pipe/heat_exchanging/manifold{ + dir = 1 + }, +/turf/open/space/basic, +/area/space/nearstation) +"fnO" = ( +/obj/structure/transport/linear/public{ + icon = 'icons/obj/smooth_structures/catwalk.dmi'; + base_icon_state = "catwalk"; + icon_state = "catwalk-13" + }, +/turf/open/openspace, +/area/station/ai_monitored/turret_protected/aisat_interior) +"fnU" = ( +/obj/machinery/door/airlock/virology/glass{ + name = "Virology Lab" + }, +/obj/effect/mapping_helpers/airlock/access/all/medical/virology, +/turf/open/floor/grass, +/area/station/medical/virology) +"fod" = ( +/obj/machinery/suit_storage_unit/security, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/camera/autoname/directional/east, +/turf/open/floor/iron/dark, +/area/station/security/lockers) +"foq" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/turf/open/floor/iron/dark/textured, +/area/station/medical/morgue) +"fow" = ( +/obj/effect/turf_decal/trimline/blue/filled/corner, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) +"foL" = ( +/obj/effect/spawner/structure/window/hollow/reinforced/middle, +/turf/open/floor/plating, +/area/station/medical/chemistry/minisat) +"foX" = ( +/obj/structure/grille, +/turf/open/misc/asteroid, +/area/station/maintenance/department/science) +"fpg" = ( +/obj/effect/turf_decal/stripes{ + dir = 6 + }, +/obj/structure/extinguisher_cabinet/directional/east, +/obj/structure/ladder{ + icon_state = "ladder10" + }, +/turf/open/floor/iron/dark, +/area/station/engineering/atmospherics_engine) +"fpi" = ( +/obj/structure/railing{ + dir = 1 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 1 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) +"fpm" = ( +/obj/structure/cable, +/obj/effect/turf_decal/tile/dark_blue, +/obj/effect/turf_decal/tile/dark_blue{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/hallway/secondary/command) +"fpo" = ( +/obj/structure/cable/multilayer/multiz, +/obj/item/assembly/mousetrap/armed, +/turf/open/floor/plating, +/area/station/maintenance/department/engine) +"fpx" = ( +/obj/item/radio/intercom/directional/west, +/obj/structure/table/wood, +/obj/item/binoculars, +/turf/open/floor/carpet/red, +/area/station/command/heads_quarters/qm) +"fpG" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/department/engine) +"fpH" = ( +/obj/machinery/door/airlock/public/glass{ + name = "Courtroom" + }, +/obj/effect/mapping_helpers/airlock/access/any/security/general, +/obj/effect/turf_decal/siding/dark{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/security/courtroom) +"fpK" = ( +/obj/effect/spawner/random/structure/grille, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"fpY" = ( +/turf/open/openspace, +/area/station/science/ordnance) +"fqg" = ( +/obj/effect/turf_decal/stripes/line, +/obj/structure/closet/secure_closet/hydroponics, +/obj/structure/extinguisher_cabinet/directional/north, +/turf/open/floor/iron, +/area/station/service/hydroponics) +"fqi" = ( +/obj/machinery/door/airlock/hatch{ + name = "MiniSat Antechamber" + }, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/mapping_helpers/airlock/access/all/command/minisat, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/ai_monitored/turret_protected/aisat_interior) +"fqs" = ( +/obj/structure/cable, +/obj/structure/railing{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/engineering/lobby) +"fqt" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line, +/turf/open/floor/iron/white, +/area/station/medical/chemistry) +"fqD" = ( +/obj/structure/flora/rock/style_random, +/obj/effect/turf_decal/stripes/asteroid/corner{ + dir = 1 + }, +/turf/open/misc/asteroid/airless, +/area/station/asteroid) +"fqF" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/white, +/area/station/medical/exam_room) +"frd" = ( +/obj/machinery/vending/wardrobe/hydro_wardrobe, +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/obj/structure/sign/poster/official/random/directional/east, +/turf/open/floor/iron, +/area/station/service/hydroponics) +"frh" = ( +/obj/effect/spawner/random/trash/grille_or_waste, +/turf/open/floor/plating, +/area/station/maintenance/department/medical) +"fri" = ( +/turf/closed/wall, +/area/station/maintenance/department/bridge) +"frs" = ( +/obj/machinery/reagentgrinder{ + pixel_y = 4 + }, +/obj/structure/table/glass, +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/obj/effect/turf_decal/tile/green{ + dir = 4 + }, +/obj/effect/turf_decal/tile/green{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/service/hydroponics) +"frt" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "geneshut"; + dir = 1 + }, +/turf/open/floor/plating, +/area/station/science/genetics) +"fry" = ( +/turf/open/floor/circuit, +/area/station/ai_monitored/turret_protected/ai_upload) +"frG" = ( +/obj/structure/railing{ + dir = 4 + }, +/obj/structure/table/glass, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/science/research) +"frR" = ( +/obj/effect/turf_decal/tile/red/anticorner/contrasted{ + dir = 8 + }, +/obj/structure/table/reinforced, +/obj/machinery/recharger{ + pixel_y = 4 + }, +/obj/machinery/firealarm/directional/west, +/turf/open/floor/iron, +/area/station/security/checkpoint/supply) +"fsc" = ( +/obj/effect/turf_decal/tile/neutral, +/obj/machinery/firealarm/directional/south, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"fsd" = ( +/obj/effect/landmark/start/warden, +/obj/structure/cable, +/obj/effect/landmark/event_spawn, +/obj/structure/chair/office{ + dir = 1 + }, +/turf/open/floor/iron/textured, +/area/station/security/warden) +"fsk" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/landmark/start/hangover, +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/engineering/tracking_beacon, +/obj/machinery/holopad, +/turf/open/floor/iron/dark, +/area/station/commons/fitness/recreation) +"fsn" = ( +/obj/machinery/disposal/bin, +/obj/effect/turf_decal/tile/neutral/full, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/turf/open/floor/iron/dark/smooth_large, +/area/station/hallway/primary/central) +"fst" = ( +/obj/machinery/light/dim/directional/west, +/obj/structure/cable, +/obj/machinery/cell_charger, +/obj/item/stock_parts/power_store/cell/high, +/obj/effect/turf_decal/tile/yellow{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment, +/obj/item/holosign_creator/atmos{ + pixel_y = 5 + }, +/obj/structure/table, +/obj/item/holosign_creator/atmos{ + pixel_y = 7 + }, +/turf/open/floor/iron/dark/corner{ + dir = 8 + }, +/area/station/engineering/atmos/upper) +"fsu" = ( +/obj/structure/railing{ + dir = 1 + }, +/obj/effect/turf_decal/tile/yellow{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/turf/open/floor/iron/dark/corner{ + dir = 4 + }, +/area/station/engineering/atmos/upper) +"fsx" = ( +/obj/machinery/door/airlock/security/glass, +/obj/effect/turf_decal/tile/red/fourcorners, +/obj/machinery/door/firedoor, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/security/breakroom) +"fsB" = ( +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 1 + }, +/obj/machinery/firealarm/directional/north, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron, +/area/station/construction/mining/aux_base) +"fsI" = ( +/obj/effect/turf_decal/siding/wideplating_new/dark, +/obj/effect/turf_decal/siding/wideplating_new/dark{ + dir = 1 + }, +/turf/open/floor/circuit/airless, +/area/station/cargo/storage) +"fsQ" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/iron/dark, +/area/station/engineering/supermatter/room) +"fsS" = ( +/obj/machinery/power/terminal{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/camera/autoname/directional/south, +/turf/open/floor/plating, +/area/station/maintenance/solars/port/fore) +"fsU" = ( +/obj/structure/chair{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/turf/open/floor/plating/airless, +/area/station/science/ordnance/bomb) +"fsZ" = ( +/obj/machinery/door/window/brigdoor/left/directional/south{ + name = "Research Director Observation"; + req_access = list("rd") + }, +/obj/structure/window/reinforced/spawner/directional/west, +/turf/open/floor/engine, +/area/station/command/heads_quarters/rd) +"fta" = ( +/obj/effect/turf_decal/siding/purple{ + dir = 5 + }, +/obj/effect/spawner/random/vending/colavend, +/turf/open/floor/iron/white/smooth_large, +/area/station/science/research) +"ftz" = ( +/obj/effect/turf_decal/tile/blue/half/contrasted{ + dir = 8 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron/white, +/area/station/medical/medbay/lobby) +"ftF" = ( +/obj/effect/turf_decal/tile/neutral, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"ftK" = ( +/obj/machinery/vending/autodrobe/all_access, +/obj/effect/turf_decal/tile/red/half/contrasted, +/obj/machinery/firealarm/directional/south, +/turf/open/floor/iron/dark, +/area/station/security/lockers) +"ftR" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/obj/effect/turf_decal/tile/dark_blue{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/command/bridge) +"ftW" = ( +/obj/structure/girder, +/turf/open/misc/asteroid/airless, +/area/space/nearstation) +"ftX" = ( +/obj/effect/turf_decal/sand/plating, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/asteroid) +"fuc" = ( +/obj/structure/railing{ + dir = 1 + }, +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 1 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/cargo/storage) +"fuk" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/mapping_helpers/burnt_floor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/plating, +/area/station/maintenance/central/greater) +"fun" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/dark_blue/half/contrasted{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/command/bridge) +"fuo" = ( +/obj/effect/landmark/start/geneticist, +/obj/structure/chair/office{ + dir = 1 + }, +/turf/open/floor/glass/reinforced, +/area/station/science/genetics) +"fus" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/holopad, +/turf/open/floor/iron, +/area/station/hallway/secondary/exit/departure_lounge) +"fux" = ( +/obj/structure/stairs/north, +/obj/structure/railing{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"fuF" = ( +/obj/effect/turf_decal/stripes/line, +/obj/machinery/door/poddoor/shutters/window/preopen{ + id = "ordstorage" + }, +/obj/effect/turf_decal/caution/stand_clear/red, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/white, +/area/station/science/ordnance/storage) +"fvd" = ( +/obj/machinery/duct, +/obj/effect/turf_decal/tile/dark_green/opposingcorners, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/hallway/secondary/service) +"fvf" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/wood/parquet, +/area/station/service/library) +"fvg" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/service/hydroponics/garden) +"fvk" = ( +/obj/structure/sign/poster/random/directional/west, +/obj/machinery/camera/autoname/directional/west, +/turf/open/floor/wood, +/area/station/commons/lounge) +"fvo" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/preopen{ + id = "medsecprivacy"; + name = "Privacy Shutter" + }, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/security/checkpoint/medical) +"fvq" = ( +/obj/machinery/airlock_controller/incinerator_atmos{ + pixel_x = 32 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) +"fvF" = ( +/obj/effect/spawner/random/structure/grille, +/obj/structure/cable, +/obj/effect/turf_decal/sand/plating, +/turf/open/floor/plating, +/area/station/asteroid) +"fvW" = ( +/obj/structure/cable, +/obj/machinery/light/directional/south, +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ + dir = 4 + }, +/obj/effect/turf_decal/tile/yellow{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark/corner, +/area/station/engineering/atmos) +"fwz" = ( +/obj/effect/turf_decal/plaque{ + icon_state = "L14" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"fwA" = ( +/obj/machinery/light/cold/dim/directional/south, +/obj/item/mod/core/standard{ + pixel_x = -4 + }, +/obj/item/mod/core/standard{ + pixel_x = 4 + }, +/obj/item/mod/core/standard{ + pixel_y = 4 + }, +/obj/structure/closet/crate/science{ + name = "MOD core crate" + }, +/turf/open/floor/iron/dark/textured, +/area/station/science/robotics/lab) +"fwJ" = ( +/obj/structure/bed/pod, +/turf/open/floor/engine, +/area/station/medical/chemistry) +"fwM" = ( +/obj/effect/landmark/event_spawn, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/white, +/area/station/science/explab) +"fwT" = ( +/obj/structure/cable, +/obj/machinery/light/cold/dim/directional/east, +/turf/open/floor/iron/dark/textured, +/area/station/science/robotics/lab) +"fwU" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/camera/autoname/directional/south{ + network = list("ss13","medbay") + }, +/turf/open/floor/carpet/blue, +/area/station/command/heads_quarters/cmo) +"fwV" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/engineering/atmos/upper) +"fxg" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/white, +/area/station/medical/chemistry/minisat) +"fxo" = ( +/obj/structure/tank_holder/extinguisher, +/obj/machinery/light/small/dim/directional/north, +/obj/effect/turf_decal/stripes, +/turf/open/floor/iron/dark/textured_large, +/area/station/ai_monitored/turret_protected/aisat/foyer) +"fxp" = ( +/turf/closed/indestructible/riveted{ + desc = "A wall impregnated with Fixium, able to withstand massive explosions with ease"; + name = "hyper-reinforced wall" + }, +/area/station/science/ordnance/bomb) +"fxr" = ( +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/turf/open/floor/plating, +/area/station/maintenance/disposal) +"fxF" = ( +/turf/open/openspace, +/area/station/command/heads_quarters/qm) +"fxG" = ( +/obj/structure/transport/linear/public{ + icon = 'icons/obj/smooth_structures/catwalk.dmi'; + base_icon_state = "catwalk"; + icon_state = "catwalk-137" + }, +/turf/open/floor/plating/elevatorshaft, +/area/station/cargo/storage) +"fye" = ( +/obj/structure/rack, +/obj/item/storage/box/flashes{ + pixel_x = 7; + pixel_y = 6 + }, +/obj/item/gun/grenadelauncher{ + pixel_y = 6 + }, +/obj/item/clothing/glasses/hud/security/sunglasses{ + pixel_x = -3; + pixel_y = 2 + }, +/obj/item/clothing/glasses/hud/security/sunglasses{ + pixel_x = -3; + pixel_y = -2 + }, +/obj/effect/turf_decal/tile/red/half/contrasted, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/security/armory) +"fyn" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/cargo/warehouse) +"fys" = ( +/obj/machinery/door/airlock/medical{ + name = "Surgery" + }, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 8 + }, +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/access/any/medical/surgery, +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/iron/white/smooth_large, +/area/station/medical/surgery) +"fyA" = ( +/obj/effect/turf_decal/tile/red/half/contrasted, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/security) +"fyC" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/ai_monitored/command/storage/eva) +"fyJ" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden, +/obj/machinery/door/airlock/command/glass{ + name = "Server Access" + }, +/obj/effect/mapping_helpers/airlock/access/all/science/rd, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/science/server) +"fyS" = ( +/obj/structure/cable, +/turf/open/floor/iron/dark/textured_corner{ + dir = 4 + }, +/area/station/science/xenobiology) +"fze" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/engineering/atmos/upper) +"fzg" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/cargo/bitrunning/den) +"fzh" = ( +/obj/structure/table/wood, +/obj/item/reagent_containers/cup/glass/shaker{ + pixel_x = -2; + pixel_y = 12 + }, +/obj/item/reagent_containers/cup/glass/bottle/juice/cream{ + pixel_x = 20; + pixel_y = 8 + }, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 1 + }, +/obj/item/reagent_containers/cup/glass/mug{ + pixel_x = 9; + pixel_y = 12 + }, +/obj/item/reagent_containers/cup/glass/mug{ + pixel_x = 9; + pixel_y = 6 + }, +/obj/item/reagent_containers/cup/glass/mug{ + pixel_x = 9 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/service/cafeteria) +"fzx" = ( +/obj/structure/table/reinforced, +/obj/machinery/recharger, +/obj/item/stamp/head/captain{ + pixel_x = -12 + }, +/obj/item/hand_tele{ + pixel_x = 8 + }, +/turf/open/floor/carpet/executive, +/area/station/command/heads_quarters/captain/private) +"fzK" = ( +/obj/machinery/door/airlock/maintenance_hatch, +/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 8 + }, +/turf/open/floor/plating, +/area/station/commons/fitness/recreation) +"fzL" = ( +/obj/structure/table/wood, +/obj/item/book/granter/action/spell/smoke/lesser{ + name = "mysterious old book of cloud-chasing" + }, +/obj/item/reagent_containers/cup/glass/bottle/holywater{ + pixel_x = -2; + pixel_y = 2 + }, +/obj/item/nullrod{ + pixel_x = 4 + }, +/obj/item/organ/internal/heart, +/obj/item/soulstone/anybody/chaplain, +/turf/open/floor/cult, +/area/station/service/chapel/office) +"fzM" = ( +/obj/machinery/air_sensor/carbon_tank, +/turf/open/floor/engine/co2, +/area/station/engineering/atmos) +"fzW" = ( +/obj/structure/table/glass, +/obj/machinery/cell_charger, +/obj/item/stock_parts/power_store/cell/high, +/turf/open/floor/iron, +/area/station/engineering/lobby) +"fzY" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/yellow, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) +"fzZ" = ( +/obj/machinery/door/poddoor/shutters/preopen{ + id = "r2p"; + dir = 8 + }, +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/medical/patients_rooms/room_b) +"fAg" = ( +/obj/machinery/door/airlock/maintenance_hatch, +/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/port/lesser) +"fAE" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/spawner/random/entertainment/arcade{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/maintenance/department/cargo) +"fAJ" = ( +/obj/machinery/space_heater, +/turf/open/misc/asteroid, +/area/station/maintenance/central/greater) +"fAR" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/obj/effect/turf_decal/tile/red, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/security/lockers) +"fAT" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 10 + }, +/obj/structure/sign/plaques/kiddie/library{ + pixel_y = -32 + }, +/turf/open/floor/wood, +/area/station/service/library) +"fAU" = ( +/obj/machinery/power/apc/auto_name/directional/east, +/obj/structure/cable, +/obj/item/radio/intercom/directional/north, +/obj/item/kirbyplants/random, +/obj/effect/turf_decal/tile/purple/opposingcorners, +/turf/open/floor/iron/white, +/area/station/science/auxlab/firing_range) +"fAV" = ( +/obj/item/kirbyplants/random/dead, +/turf/open/misc/asteroid, +/area/station/maintenance/central/greater) +"fBc" = ( +/obj/effect/landmark/atmospheric_sanity/ignore_area, +/turf/closed/wall/r_wall, +/area/station/tcommsat/server) +"fBm" = ( +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/cargo/miningoffice) +"fBw" = ( +/obj/structure/window/reinforced/spawner/directional/east, +/obj/structure/chair{ + dir = 1 + }, +/turf/open/floor/glass/reinforced, +/area/station/security/checkpoint/science) +"fBz" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"fBD" = ( +/obj/effect/spawner/random/structure/grille, +/turf/open/floor/plating, +/area/station/maintenance/department/bridge) +"fBF" = ( +/turf/closed/wall/r_wall, +/area/station/security/breakroom) +"fBK" = ( +/obj/effect/turf_decal/tile/blue/anticorner/contrasted{ + dir = 8 + }, +/obj/item/radio/intercom/directional/south, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/security/medical) +"fBN" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/decal/cleanable/blood/old, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/spawner/random/trash/graffiti, +/turf/open/floor/plating, +/area/station/hallway/primary/starboard) +"fBO" = ( +/obj/structure/sign/poster/random/directional/east, +/turf/open/floor/iron/white, +/area/station/science/explab) +"fBS" = ( +/obj/effect/turf_decal/siding/purple{ + dir = 1 + }, +/obj/structure/chair/office{ + dir = 4 + }, +/turf/open/floor/iron/white/herringbone, +/area/station/science/breakroom) +"fCj" = ( +/obj/item/kirbyplants/random, +/obj/effect/turf_decal/siding/wood{ + dir = 10 + }, +/obj/machinery/status_display/evac/directional/south, +/turf/open/floor/wood/tile, +/area/station/service/bar) +"fCy" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/item/radio/intercom/directional/north, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"fCG" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/engineering/atmos) +"fCR" = ( +/obj/effect/turf_decal/tile/red/anticorner/contrasted{ + dir = 1 + }, +/obj/item/kirbyplants/random, +/obj/structure/disposalpipe/trunk/multiz, +/turf/open/floor/iron, +/area/station/security) +"fCY" = ( +/obj/effect/turf_decal/tile/dark_blue/anticorner/contrasted{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/command/bridge) +"fDa" = ( +/turf/closed/wall, +/area/station/commons/dorms) +"fDb" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/door/firedoor, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"fDf" = ( +/obj/structure/musician/piano/unanchored, +/obj/effect/mapping_helpers/trapdoor_placer, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/glass/reinforced, +/area/station/command/emergency_closet) +"fDi" = ( +/obj/structure/cable, +/obj/machinery/airalarm/directional/east, +/obj/structure/window/reinforced/spawner/directional/west, +/turf/open/floor/glass/reinforced, +/area/station/security/prison) +"fDj" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/science/ordnance/testlab) +"fDt" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 10 + }, +/obj/machinery/light_switch/directional/west, +/turf/open/floor/wood, +/area/station/command/heads_quarters/qm) +"fDz" = ( +/turf/open/floor/iron/dark, +/area/station/science/ordnance) +"fDI" = ( +/obj/machinery/door/airlock/research/glass/incinerator/ordmix_exterior{ + name = "Burn Chamber Exterior Airlock" + }, +/obj/effect/mapping_helpers/airlock/locked, +/obj/effect/mapping_helpers/airlock/access/all/science/ordnance, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/engine/vacuum, +/area/station/science/ordnance/burnchamber) +"fDK" = ( +/obj/machinery/door/morgue{ + name = "Relic Closet"; + req_access = list("chapel_office") + }, +/turf/open/floor/cult, +/area/station/service/chapel/office) +"fDN" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/maintenance/central/lesser) +"fDO" = ( +/obj/machinery/atmospherics/pipe/smart/simple/green/visible{ + dir = 8 + }, +/obj/effect/turf_decal/tile/yellow{ + dir = 4 + }, +/turf/open/floor/iron/dark/corner, +/area/station/engineering/atmos) +"fDR" = ( +/obj/effect/turf_decal/sand/plating, +/obj/effect/decal/cleanable/rubble, +/turf/open/floor/plating, +/area/station/maintenance/port/greater) +"fDU" = ( +/obj/machinery/air_sensor/oxygen_tank, +/turf/open/floor/engine/o2, +/area/station/engineering/atmos) +"fDV" = ( +/obj/machinery/light/small/directional/west, +/obj/structure/chair/office, +/turf/open/floor/carpet/red, +/area/station/security/warden) +"fEa" = ( +/obj/structure/railing/corner, +/obj/structure/cable, +/turf/open/floor/iron/dark/corner, +/area/station/command/meeting_room) +"fEe" = ( +/obj/machinery/light/cold/directional/east, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/siding/purple{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/ai_monitored/turret_protected/ai_upload_foyer) +"fEi" = ( +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 4 + }, +/obj/structure/sign/poster/random/directional/east, +/turf/open/floor/iron, +/area/station/cargo/storage) +"fEm" = ( +/obj/machinery/atmospherics/components/binary/pump/on{ + dir = 1; + name = "Cooling Loop to Gas" + }, +/obj/effect/turf_decal/stripes, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"fEu" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/obj/machinery/requests_console/auto_name/directional/east, +/obj/effect/mapping_helpers/requests_console/supplies, +/obj/effect/mapping_helpers/requests_console/ore_update, +/obj/effect/mapping_helpers/requests_console/assistance, +/turf/open/floor/iron, +/area/station/engineering/lobby) +"fEI" = ( +/obj/machinery/rnd/production/techfab/department/service, +/obj/machinery/firealarm/directional/west, +/obj/machinery/light/directional/south, +/obj/effect/turf_decal/tile/dark_green/opposingcorners, +/turf/open/floor/iron, +/area/station/hallway/secondary/service) +"fEL" = ( +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/structure/table, +/obj/machinery/fax{ + fax_name = "Public Fax Machine" + }, +/obj/machinery/status_display/evac/directional/south, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"fEQ" = ( +/obj/structure/table/wood, +/obj/effect/spawner/random/maintenance/three, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/wood, +/area/station/maintenance/port/greater) +"fET" = ( +/obj/effect/spawner/random/engineering/vending_restock, +/obj/structure/closet, +/obj/effect/spawner/random/trash/janitor_supplies, +/turf/open/floor/plating, +/area/station/maintenance/central/greater) +"fEU" = ( +/obj/effect/landmark/event_spawn, +/turf/open/floor/iron, +/area/station/command/corporate_showroom) +"fFb" = ( +/obj/structure/railing{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 5 + }, +/obj/machinery/newscaster/directional/east, +/turf/open/floor/iron, +/area/station/engineering/main) +"fFg" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark/small, +/area/station/science/cytology) +"fFj" = ( +/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible, +/obj/effect/turf_decal/tile/yellow{ + dir = 8 + }, +/obj/machinery/light_switch/directional/west, +/turf/open/floor/iron/dark/corner{ + dir = 1 + }, +/area/station/engineering/atmos) +"fFm" = ( +/obj/machinery/door/window/brigdoor/right/directional/north{ + req_access = list("xenobiology") + }, +/obj/machinery/door/window/brigdoor/left/directional/south{ + req_access = list("xenobiology") + }, +/obj/machinery/door/poddoor/preopen{ + id = "xenobio5"; + name = "Xenobio Pen 5 Blast Door" + }, +/turf/open/floor/engine, +/area/station/science/xenobiology) +"fFp" = ( +/obj/machinery/light/directional/north, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"fFq" = ( +/obj/effect/turf_decal/tile/purple/opposingcorners, +/obj/structure/table, +/obj/item/gun/energy/laser/practice{ + pixel_x = 2; + pixel_y = 5 + }, +/obj/item/gun/energy/laser/practice{ + pixel_x = 2; + pixel_y = 1 + }, +/obj/item/gun/energy/laser/practice{ + pixel_x = 2; + pixel_y = -2 + }, +/turf/open/floor/iron/white, +/area/station/science/auxlab/firing_range) +"fFt" = ( +/obj/machinery/photocopier, +/obj/item/newspaper, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/wood, +/area/station/security/detectives_office/private_investigators_office) +"fFy" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/duct, +/obj/structure/cable, +/turf/open/floor/iron/white, +/area/station/medical/treatment_center) +"fFz" = ( +/obj/effect/turf_decal/bot_white, +/obj/effect/spawner/random/maintenance, +/obj/effect/spawner/random/structure/closet_empty/crate, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/cargo/storage) +"fFE" = ( +/obj/effect/decal/cleanable/rubble, +/turf/open/misc/asteroid, +/area/station/cargo/miningoffice) +"fFQ" = ( +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/large, +/area/station/service/hydroponics/garden) +"fFT" = ( +/obj/structure/reagent_dispensers/fueltank, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/dark, +/area/station/maintenance/department/engine) +"fGc" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/trunk/multiz/down, +/turf/open/floor/iron/white, +/area/station/medical/chemistry) +"fGm" = ( +/obj/effect/landmark/event_spawn, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/aisat/uppernorth) +"fGo" = ( +/obj/effect/turf_decal/bot{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 9 + }, +/obj/machinery/suit_storage_unit/engine, +/turf/open/floor/iron, +/area/station/engineering/storage) +"fGr" = ( +/obj/machinery/airalarm/directional/east, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/disposal) +"fGu" = ( +/obj/effect/turf_decal/tile/neutral, +/obj/structure/railing{ + dir = 8 + }, +/obj/effect/turf_decal/arrows{ + dir = 4; + pixel_x = -7 + }, +/obj/effect/turf_decal/trimline/purple/arrow_cw{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"fGE" = ( +/obj/machinery/power/apc/auto_name/directional/south, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/turf/open/floor/wood, +/area/station/service/theater) +"fGG" = ( +/obj/structure/closet/secure_closet/research_director, +/obj/item/taperecorder, +/obj/effect/turf_decal/tile/neutral/opposingcorners{ + dir = 1 + }, +/obj/item/computer_disk/ordnance, +/obj/machinery/light/warm/directional/south, +/obj/item/coffee_cartridge/fancy, +/turf/open/floor/iron/dark, +/area/station/command/heads_quarters/rd) +"fGL" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/security/checkpoint/supply) +"fGR" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/iron, +/area/station/command/gateway) +"fGT" = ( +/obj/structure/table, +/obj/effect/spawner/random/entertainment/plushie, +/turf/open/floor/iron/white, +/area/station/medical/exam_room) +"fGZ" = ( +/obj/machinery/atmospherics/components/unary/outlet_injector/monitored/air_input{ + dir = 8 + }, +/turf/open/floor/engine/air, +/area/station/engineering/atmos) +"fHk" = ( +/obj/structure/transport/linear/public{ + icon = 'icons/obj/smooth_structures/catwalk.dmi'; + base_icon_state = "catwalk"; + icon_state = "catwalk-74" + }, +/turf/open/floor/plating/elevatorshaft, +/area/station/cargo/storage) +"fHJ" = ( +/obj/effect/turf_decal/siding/white{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/turf/open/floor/iron/herringbone, +/area/station/hallway/primary/central) +"fHU" = ( +/obj/machinery/computer/holodeck{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/commons/fitness/recreation) +"fHW" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/preopen{ + id = "xenobio5"; + name = "Xenobio Pen 5 Blast Door" + }, +/turf/open/floor/plating, +/area/station/science/xenobiology) +"fHX" = ( +/obj/structure/table/wood, +/obj/item/paper_bin{ + pixel_x = -16 + }, +/obj/item/pen{ + pixel_x = -16 + }, +/obj/item/book/manual/wiki/research_and_development, +/turf/open/floor/carpet/executive, +/area/station/command/meeting_room) +"fIl" = ( +/obj/machinery/atmospherics/components/unary/passive_vent{ + name = "killroom vent" + }, +/turf/open/floor/circuit/telecomms, +/area/station/science/xenobiology) +"fIm" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/spawner/random/structure/closet_empty/crate, +/turf/open/floor/iron, +/area/station/cargo/warehouse/upper) +"fIr" = ( +/obj/structure/cable, +/obj/machinery/door/firedoor, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"fIv" = ( +/turf/closed/wall/r_wall, +/area/station/command/meeting_room) +"fID" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/stairs/medium{ + dir = 1 + }, +/area/station/command/bridge) +"fIG" = ( +/obj/effect/turf_decal/tile/yellow{ + dir = 4 + }, +/obj/machinery/camera/autoname/directional/north, +/turf/open/floor/iron/dark/corner{ + dir = 1 + }, +/area/station/engineering/atmos/storage/gas) +"fIW" = ( +/obj/structure/cable, +/obj/item/radio/intercom/directional/west, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/turf/open/floor/iron, +/area/station/engineering/gravity_generator) +"fIX" = ( +/obj/structure/table/wood/poker, +/obj/effect/spawner/random/entertainment/cigar, +/turf/open/floor/wood, +/area/station/commons/lounge) +"fIY" = ( +/obj/structure/chair/stool/bar/directional/north, +/obj/effect/turf_decal/siding/wood, +/obj/effect/turf_decal/tile/bar/opposingcorners, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/commons/lounge) +"fIZ" = ( +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/engineering/atmos) +"fJi" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark/textured_corner, +/area/station/science/xenobiology) +"fJn" = ( +/obj/machinery/power/port_gen/pacman, +/obj/machinery/camera/autoname/directional/west, +/turf/open/floor/plating, +/area/station/engineering/storage) +"fJz" = ( +/obj/item/reagent_containers/condiment/vegetable_oil, +/obj/machinery/grill, +/turf/open/misc/asteroid, +/area/station/asteroid) +"fJT" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark/textured_large, +/area/station/security/interrogation) +"fJV" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/closet/secure_closet/chemical, +/obj/machinery/camera/autoname/directional/north{ + network = list("ss13","medbay") + }, +/turf/open/floor/iron/white, +/area/station/medical/chemistry/minisat) +"fKb" = ( +/obj/structure/chair, +/turf/open/floor/iron/white, +/area/station/science/ordnance/testlab) +"fKo" = ( +/obj/structure/chair/office{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 2 + }, +/turf/open/floor/carpet/purple, +/area/station/service/library) +"fKs" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/security/prison) +"fKK" = ( +/obj/effect/turf_decal/trimline/blue/filled/corner{ + dir = 4 + }, +/obj/effect/landmark/start/medical_doctor, +/turf/open/floor/iron/white, +/area/station/medical/treatment_center) +"fKT" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/engineering/gravity_generator) +"fLe" = ( +/turf/open/floor/catwalk_floor, +/area/station/cargo/storage) +"fLi" = ( +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 8 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/turf/open/floor/iron, +/area/station/security) +"fLv" = ( +/obj/machinery/computer/security/wooden_tv, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/half, +/area/station/security/breakroom) +"fLM" = ( +/obj/structure/transport/linear/public, +/obj/machinery/light/floor/transport, +/turf/open/floor/plating/elevatorshaft, +/area/station/cargo/storage) +"fLU" = ( +/obj/effect/spawner/random/trash/mess, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"fMz" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/item/pai_card, +/obj/effect/spawner/random/maintenance/three, +/turf/open/floor/plating, +/area/station/maintenance/department/science) +"fMF" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/delivery, +/obj/machinery/navbeacon{ + codes_txt = "delivery;dir=8"; + location = "QM #1" + }, +/mob/living/simple_animal/bot/mulebot, +/obj/machinery/light/small/directional/east, +/turf/open/floor/iron, +/area/station/cargo/warehouse) +"fMS" = ( +/obj/machinery/computer/atmos_control/carbon_tank, +/obj/effect/turf_decal/tile/yellow{ + dir = 4 + }, +/turf/open/floor/iron/dark/corner{ + dir = 1 + }, +/area/station/engineering/atmos) +"fMT" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "r1p"; + dir = 8 + }, +/turf/open/floor/plating, +/area/station/medical/patients_rooms/room_a) +"fMW" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 4 + }, +/obj/item/radio/intercom/directional/east, +/turf/open/floor/iron, +/area/station/engineering/main) +"fMY" = ( +/obj/machinery/smartfridge/chemistry/virology/preloaded, +/obj/effect/turf_decal/tile/green/half/contrasted{ + dir = 4 + }, +/obj/machinery/newscaster/directional/east, +/turf/open/floor/iron/white, +/area/station/medical/virology) +"fMZ" = ( +/obj/structure/table, +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 4 + }, +/obj/item/storage/box/lights/mixed, +/obj/item/stack/rods/fifty, +/obj/item/wallframe/digital_clock{ + pixel_y = 18 + }, +/obj/machinery/light/dim/directional/east, +/turf/open/floor/iron, +/area/station/commons/storage/tools) +"fNk" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/aisat/uppernorth) +"fNn" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/department/engine) +"fNp" = ( +/obj/structure/window/reinforced/spawner/directional/east, +/obj/structure/table/reinforced, +/obj/machinery/door/window/left/directional/west{ + req_one_access = list("service","maint_tunnels"); + name = "Baked Goods" + }, +/obj/item/food/muffin/berry{ + pixel_y = 8 + }, +/obj/item/food/poppypretzel, +/obj/item/food/cherrycupcake{ + pixel_y = 19 + }, +/obj/effect/turf_decal/siding/red{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/fore) +"fNv" = ( +/obj/structure/cable, +/obj/machinery/door/airlock/maintenance/external, +/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, +/turf/open/misc/asteroid, +/area/station/asteroid) +"fNw" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/white, +/area/station/medical/chemistry) +"fNy" = ( +/obj/structure/closet/secure_closet/freezer/meat, +/turf/open/floor/iron/kitchen_coldroom/freezerfloor, +/area/station/service/kitchen) +"fNB" = ( +/obj/effect/turf_decal/tile/red/anticorner/contrasted{ + dir = 1 + }, +/obj/machinery/digital_clock/directional/north, +/obj/item/kirbyplants/random, +/obj/machinery/camera/autoname/directional/west, +/turf/open/floor/iron, +/area/station/security/brig/entrance) +"fNW" = ( +/obj/effect/landmark/carpspawn, +/turf/open/space/openspace, +/area/space) +"fOi" = ( +/obj/effect/turf_decal/stripes{ + dir = 8 + }, +/obj/structure/cable, +/obj/machinery/camera/autoname/directional/west{ + network = list("ss13","engine") + }, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"fOs" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/machinery/door/airlock/public/glass{ + name = "Service" + }, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/wood, +/area/station/service/bar) +"fOu" = ( +/obj/machinery/camera/directional/east{ + c_tag = "Xenobiology Lab - Secure Pen"; + network = list("ss13","rd","xeno") + }, +/obj/structure/sign/warning/biohazard/directional/east, +/turf/open/floor/engine/xenobio, +/area/station/science/xenobiology) +"fOv" = ( +/obj/effect/turf_decal/sand/plating, +/obj/structure/girder, +/turf/open/floor/plating, +/area/station/maintenance/port/greater) +"fOM" = ( +/obj/machinery/telecomms/processor/preset_two, +/turf/open/floor/circuit/green/telecomms/mainframe, +/area/station/tcommsat/server) +"fON" = ( +/obj/structure/table, +/obj/item/storage/toolbox/emergency, +/turf/open/floor/iron, +/area/station/cargo/miningoffice) +"fOP" = ( +/obj/machinery/door/poddoor/shutters/window/preopen{ + id = "zaza" + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/structure/window/hollow/reinforced/end{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/aft/upper) +"fOR" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/wood, +/area/station/command/heads_quarters/qm) +"fPe" = ( +/obj/machinery/vending/engivend, +/obj/effect/turf_decal/stripes/corner, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 5 + }, +/turf/open/floor/iron, +/area/station/engineering/storage) +"fPi" = ( +/obj/machinery/holopad, +/obj/effect/turf_decal/box/white{ + color = "#9FED58" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/turf/open/floor/iron/white/smooth_large, +/area/station/medical/virology) +"fPk" = ( +/obj/effect/mapping_helpers/mail_sorting/service/theater, +/obj/structure/disposalpipe/sorting/mail{ + dir = 1 + }, +/turf/open/floor/carpet, +/area/station/service/theater) +"fPp" = ( +/obj/item/storage/toolbox/emergency, +/obj/structure/rack, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"fPs" = ( +/obj/effect/turf_decal/tile/blue/half/contrasted{ + dir = 1 + }, +/obj/structure/table, +/obj/item/stack/medical/gauze, +/obj/item/stack/medical/suture, +/obj/item/stack/medical/mesh, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/structure/cable, +/obj/effect/spawner/random/medical/minor_healing, +/turf/open/floor/iron/white, +/area/station/medical/medbay/lobby) +"fPv" = ( +/obj/machinery/light_switch/directional/east, +/turf/open/floor/glass/reinforced/plasma, +/area/station/command/heads_quarters/rd) +"fPx" = ( +/obj/structure/table, +/obj/item/mmi, +/obj/item/mmi, +/obj/item/mmi, +/obj/structure/window/spawner/directional/east, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/iron/white/smooth_half{ + dir = 8 + }, +/area/station/science/robotics/lab) +"fPB" = ( +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 4 + }, +/obj/structure/table, +/obj/machinery/camera/autoname/directional/east, +/obj/item/paper_bin{ + pixel_x = 3; + pixel_y = 7 + }, +/obj/item/pen{ + pixel_x = 3; + pixel_y = 8 + }, +/turf/open/floor/iron, +/area/station/security/warden) +"fPV" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/cargo/bitrunning/den) +"fPX" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 1 + }, +/obj/item/storage/belt/medical{ + pixel_y = 6 + }, +/obj/item/storage/belt/medical{ + pixel_y = 4 + }, +/obj/item/storage/belt/medical{ + pixel_y = 2 + }, +/obj/item/reagent_containers/spray/cleaner, +/obj/structure/table/reinforced/rglass, +/obj/machinery/firealarm/directional/east, +/obj/machinery/duct, +/obj/structure/cable, +/turf/open/floor/iron/white, +/area/station/medical/treatment_center) +"fQf" = ( +/obj/machinery/shower/directional/west, +/obj/effect/spawner/random/trash/soap{ + spawn_scatter_radius = 1 + }, +/obj/effect/landmark/start/prisoner, +/turf/open/floor/iron/freezer, +/area/station/security/prison/shower) +"fQp" = ( +/obj/machinery/disposal/bin, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 9 + }, +/obj/structure/disposalpipe/trunk, +/turf/open/floor/iron, +/area/station/engineering/lobby) +"fQr" = ( +/obj/machinery/atmospherics/components/binary/pump{ + dir = 8 + }, +/obj/machinery/airalarm/directional/south, +/obj/effect/mapping_helpers/airalarm/mixingchamber_access, +/obj/effect/mapping_helpers/airalarm/link{ + chamber_id = "ordnancefreezer" + }, +/obj/effect/mapping_helpers/airalarm/tlv_no_checks, +/turf/open/floor/iron/dark, +/area/station/science/ordnance) +"fQE" = ( +/obj/structure/sign/warning/biohazard/directional/east, +/turf/open/floor/engine/xenobio, +/area/station/science/xenobiology) +"fQG" = ( +/obj/machinery/door/airlock/virology/glass{ + name = "Virology Lab"; + id_tag = "virology_airlock_exterior" + }, +/obj/effect/mapping_helpers/airlock/access/all/medical/virology, +/obj/structure/cable, +/obj/effect/turf_decal/tile/green/fourcorners, +/obj/machinery/door_buttons/access_button{ + dir = 1; + idDoor = "virology_airlock_exterior"; + idSelf = "virology_airlock_control"; + name = "Virology Access Button"; + pixel_y = -24; + req_access = list("virology") + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/medical/virology) +"fQO" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 4 + }, +/obj/machinery/airalarm/directional/east, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/engineering/lobby) +"fRv" = ( +/obj/machinery/door/window/right/directional/east, +/turf/open/floor/grass, +/area/station/service/hydroponics/garden) +"fRw" = ( +/obj/machinery/computer/crew{ + dir = 8 + }, +/obj/item/toy/figure/md{ + pixel_y = 7; + pixel_x = 5 + }, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 1 + }, +/turf/open/floor/iron/white, +/area/station/medical/exam_room) +"fRB" = ( +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/engineering/atmos/upper) +"fRC" = ( +/obj/effect/turf_decal/tile/brown/opposingcorners{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light_switch/directional/west, +/turf/open/floor/iron, +/area/station/commons/vacant_room/commissary) +"fRF" = ( +/obj/machinery/power/apc/auto_name/directional/north, +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/aft/upper) +"fSb" = ( +/obj/structure/tank_dispenser/oxygen, +/obj/machinery/light/directional/north, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/command/storage/eva) +"fSi" = ( +/obj/machinery/light/directional/north, +/obj/structure/table, +/obj/item/pen{ + pixel_x = 9; + pixel_y = 4 + }, +/obj/item/hand_labeler{ + pixel_y = 10; + pixel_x = -13 + }, +/turf/open/floor/glass/reinforced, +/area/station/science/xenobiology) +"fSk" = ( +/obj/structure/chair/office{ + dir = 1 + }, +/obj/machinery/light/small/directional/west, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/iron, +/area/station/maintenance/solars/starboard/fore) +"fSp" = ( +/obj/item/stack/spacecash/c100, +/turf/open/floor/fakebasalt, +/area/station/maintenance/department/medical) +"fSq" = ( +/obj/machinery/door/poddoor/shutters{ + name = "Secure Warehouse Shutters"; + id = "secwarehouse" + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/blood/tracks, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/cargo/warehouse/upper) +"fSB" = ( +/obj/machinery/door/airlock/security{ + name = "Cargo Security Post" + }, +/obj/effect/mapping_helpers/airlock/access/all/security/general, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 8 + }, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/security/checkpoint/supply) +"fSD" = ( +/obj/machinery/atmospherics/components/binary/valve/digital{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/science/ordnance) +"fSK" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/white, +/area/station/medical/storage) +"fSP" = ( +/obj/structure/window/reinforced/spawner/directional/east, +/obj/structure/window/reinforced/spawner/directional/west, +/turf/open/floor/iron/dark/textured_half, +/area/station/engineering/storage/tech) +"fSR" = ( +/obj/effect/turf_decal/tile/dark_blue/anticorner/contrasted{ + dir = 8 + }, +/obj/structure/cable, +/obj/machinery/camera/autoname/directional/south, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/hallway/secondary/command) +"fSS" = ( +/obj/effect/turf_decal/tile/red/anticorner/contrasted{ + dir = 4 + }, +/obj/machinery/camera/autoname/directional/east, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/station/security/brig/entrance) +"fTj" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/door/airlock/hatch{ + name = "Cyborg Entertainment Closet"; + req_access = list("something only silicons open") + }, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/locked, +/obj/effect/decal/cleanable/blood/old, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/aisat/uppernorth) +"fTl" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron/kitchen, +/area/station/service/kitchen) +"fTD" = ( +/obj/structure/chair/stool/bar/directional/west, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/effect/turf_decal/tile/bar/opposingcorners, +/obj/structure/disposalpipe/sorting/mail, +/obj/effect/mapping_helpers/mail_sorting/service/bar, +/turf/open/floor/iron, +/area/station/commons/lounge) +"fTN" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/turf/open/floor/iron/white, +/area/station/science/research) +"fTX" = ( +/turf/closed/wall/r_wall, +/area/station/engineering/atmos) +"fUj" = ( +/obj/structure/sign/warning/vacuum/external/directional/east, +/obj/effect/turf_decal/stripes/end, +/turf/open/floor/iron/dark, +/area/station/service/chapel/funeral) +"fUn" = ( +/turf/open/floor/wood/parquet, +/area/station/service/library) +"fUp" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/sign/warning/cold_temp, +/turf/open/floor/plating, +/area/station/science/xenobiology) +"fUv" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/rack, +/obj/item/reagent_containers/cup/bucket{ + list_reagents = list(/datum/reagent/water = 70) + }, +/obj/item/mop, +/turf/open/floor/iron/dark, +/area/station/medical/chemistry/minisat) +"fUx" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/blood/tracks, +/turf/open/floor/iron/white, +/area/station/medical/chemistry/minisat) +"fUz" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/spawner/random/structure/closet_empty/crate, +/obj/item/electronics/apc, +/obj/structure/sign/poster/random/directional/south, +/turf/open/floor/iron, +/area/station/cargo/warehouse) +"fUH" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/turf/open/floor/wood/parquet, +/area/station/service/theater) +"fUL" = ( +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/dark/visible, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/visible/layer2, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) +"fUN" = ( +/obj/effect/turf_decal/stripes{ + dir = 1 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/camera/autoname/directional/north, +/turf/open/floor/iron/dark, +/area/station/engineering/atmospherics_engine) +"fUR" = ( +/obj/effect/turf_decal/tile/dark_blue/half/contrasted, +/obj/effect/landmark/event_spawn, +/turf/open/floor/iron/dark, +/area/station/command/bridge) +"fVf" = ( +/obj/effect/mob_spawn/corpse/human/clown, +/obj/effect/decal/cleanable/blood/old, +/turf/open/misc/asteroid, +/area/station/asteroid) +"fVs" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/carpet, +/area/station/commons/dorms) +"fVI" = ( +/obj/machinery/door/airlock/maintenance_hatch, +/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/port/greater) +"fVU" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"fVZ" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating/airless, +/area/station/cargo/storage) +"fWp" = ( +/obj/effect/turf_decal/siding/white{ + dir = 10 + }, +/turf/open/floor/iron/herringbone, +/area/station/hallway/primary/central) +"fWD" = ( +/obj/structure/railing{ + dir = 4 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/turf/open/floor/glass, +/area/station/command/meeting_room) +"fWJ" = ( +/obj/item/sticker/clown, +/turf/open/misc/asteroid, +/area/station/asteroid) +"fWZ" = ( +/obj/structure/girder, +/obj/structure/lattice/catwalk, +/turf/open/space/basic, +/area/space/nearstation) +"fXc" = ( +/obj/effect/turf_decal/delivery, +/obj/machinery/atmospherics/pipe/smart/manifold4w/purple/visible, +/turf/open/floor/iron/dark, +/area/station/engineering/supermatter/room) +"fXf" = ( +/obj/effect/spawner/random/maintenance, +/turf/open/misc/asteroid, +/area/station/asteroid) +"fXn" = ( +/turf/open/floor/wood/parquet, +/area/station/cargo/boutique) +"fXt" = ( +/obj/effect/spawner/structure/window/reinforced/plasma, +/turf/open/floor/engine, +/area/station/engineering/supermatter) +"fXC" = ( +/obj/machinery/door/airlock/maintenance_hatch, +/obj/effect/mapping_helpers/airlock/access/any/service/general, +/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/service/cafeteria) +"fXD" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/plating, +/area/station/maintenance/department/science) +"fXH" = ( +/obj/machinery/duct, +/obj/effect/landmark/start/botanist, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/service/hydroponics) +"fXR" = ( +/obj/machinery/washing_machine, +/obj/effect/turf_decal/tile/blue/opposingcorners{ + dir = 1 + }, +/turf/open/floor/iron/cafeteria, +/area/station/commons/locker) +"fXU" = ( +/obj/structure/cable, +/obj/effect/spawner/xmastree, +/turf/open/floor/wood, +/area/station/commons/lounge) +"fXV" = ( +/obj/item/radio/intercom/directional/north, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/yellow/filled/corner, +/turf/open/floor/iron, +/area/station/engineering/lobby) +"fXW" = ( +/obj/structure/chair/office/light{ + dir = 1 + }, +/turf/open/floor/glass/reinforced, +/area/station/science/xenobiology) +"fXZ" = ( +/obj/effect/turf_decal/tile/brown, +/turf/open/floor/iron, +/area/station/cargo/storage) +"fYc" = ( +/obj/structure/railing{ + dir = 6 + }, +/turf/open/floor/iron/dark/side{ + dir = 6 + }, +/area/station/command/meeting_room) +"fYe" = ( +/turf/open/misc/asteroid/airless, +/area/station/asteroid) +"fYj" = ( +/obj/effect/turf_decal/tile/blue/opposingcorners, +/obj/machinery/holopad, +/obj/effect/turf_decal/bot, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/security/courtroom) +"fYQ" = ( +/obj/effect/turf_decal/tile/yellow{ + dir = 1 + }, +/obj/structure/table, +/obj/effect/spawner/random/food_or_drink/snack, +/obj/machinery/camera/autoname/directional/west, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) +"fYX" = ( +/obj/machinery/power/solar{ + id = "foreport"; + name = "Fore-Port Solar Array" + }, +/turf/open/floor/iron/solarpanel/airless, +/area/station/solars/port/fore) +"fYZ" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/white, +/area/station/medical/paramedic) +"fZc" = ( +/obj/structure/cable, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/plating, +/area/station/maintenance/port/lesser) +"fZe" = ( +/turf/closed/wall, +/area/station/security/detectives_office) +"fZl" = ( +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/machinery/recharge_station, +/obj/effect/turf_decal/box/white{ + color = "#52B4E9" + }, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/structure/cable, +/turf/open/floor/iron/white, +/area/station/medical/storage) +"fZp" = ( +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 8 + }, +/obj/item/radio/intercom/directional/west, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/cargo/storage) +"fZr" = ( +/obj/effect/mapping_helpers/iannewyear, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/carpet/green, +/area/station/command/heads_quarters/hop) +"fZv" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/wood/tile, +/area/station/service/bar) +"fZz" = ( +/obj/structure/cable, +/obj/effect/mapping_helpers/burnt_floor, +/turf/open/floor/plating, +/area/station/maintenance/solars/port) +"fZF" = ( +/turf/open/floor/engine/hull/reinforced, +/area/space/nearstation) +"fZT" = ( +/obj/structure/chair/sofa/bench/right{ + dir = 8 + }, +/obj/effect/landmark/start/assistant, +/turf/open/floor/iron/large, +/area/station/commons/locker) +"gag" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/structure/sign/poster/official/random/directional/east, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"gaj" = ( +/obj/machinery/firealarm/directional/west, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/carpet, +/area/station/service/chapel) +"gak" = ( +/obj/structure/railing/corner, +/turf/open/floor/iron/white, +/area/station/science/research) +"gas" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/purple/visible, +/obj/effect/turf_decal/stripes{ + dir = 1 + }, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"gaE" = ( +/obj/structure/toilet{ + dir = 4 + }, +/obj/effect/mapping_helpers/broken_floor, +/obj/structure/sign/poster/contraband/busty_backdoor_xeno_babes_6/directional/west, +/turf/open/floor/iron, +/area/station/maintenance/department/medical/central) +"gaI" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/effect/turf_decal/tile/yellow/fourcorners, +/turf/open/floor/iron, +/area/station/engineering/main) +"gaK" = ( +/obj/structure/chair/pew{ + dir = 4 + }, +/turf/open/floor/iron/chapel, +/area/station/service/chapel) +"gaN" = ( +/obj/effect/landmark/event_spawn, +/turf/open/floor/iron, +/area/station/engineering/main) +"gbv" = ( +/obj/effect/turf_decal/sand/plating, +/obj/effect/spawner/structure/window/reinforced/tinted, +/turf/open/floor/plating/reinforced/airless, +/area/station/asteroid) +"gbF" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 9 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/junction{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) +"gbM" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/command/bridge) +"gbP" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/effect/mapping_helpers/damaged_window, +/turf/open/floor/plating, +/area/station/science/xenobiology/hallway) +"gbQ" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 1; + id = "kitchen_counter"; + name = "Kitchen Counter Shutters" + }, +/obj/machinery/door/firedoor, +/obj/item/reagent_containers/condiment/saltshaker{ + pixel_x = -3 + }, +/obj/item/reagent_containers/condiment/peppermill{ + pixel_x = 3 + }, +/turf/open/floor/iron/kitchen, +/area/station/service/kitchen) +"gbS" = ( +/obj/effect/landmark/start/botanist, +/turf/open/floor/glass/reinforced, +/area/station/service/hydroponics) +"gbV" = ( +/obj/machinery/portable_atmospherics/canister/carbon_dioxide, +/obj/machinery/light/directional/north, +/turf/open/floor/iron/white/smooth_large, +/area/station/science/ordnance/storage) +"gcb" = ( +/obj/structure/table, +/obj/item/storage/box/firingpins{ + pixel_x = 6; + pixel_y = 6 + }, +/obj/item/storage/box/firingpins{ + pixel_x = -6; + pixel_y = 6 + }, +/obj/effect/turf_decal/tile/blue/half/contrasted{ + dir = 4 + }, +/obj/item/radio/intercom/directional/north, +/turf/open/floor/iron/dark, +/area/station/security/lockers) +"gck" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 + }, +/obj/machinery/camera/autoname/directional/north{ + network = list("ss13","medbay") + }, +/turf/open/floor/iron/white, +/area/station/medical/chemistry/minisat) +"gcs" = ( +/obj/machinery/atmospherics/pipe/smart/manifold/purple/visible, +/turf/open/floor/iron, +/area/station/engineering/atmos) +"gcy" = ( +/turf/closed/wall, +/area/station/medical/virology) +"gcA" = ( +/obj/machinery/door/poddoor/shutters/window{ + name = "Incinerator Storage Shutters"; + id = "incstorage" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/maintenance/disposal/incinerator) +"gcD" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/robot_debris/limb, +/obj/item/flashlight/lamp, +/turf/open/floor/iron, +/area/station/cargo/warehouse/upper) +"gcN" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/turf/open/floor/wood/tile, +/area/station/service/bar) +"gcQ" = ( +/obj/machinery/light/small/directional/west, +/turf/open/floor/iron/showroomfloor, +/area/station/command/heads_quarters/hos) +"gcU" = ( +/obj/structure/railing, +/obj/machinery/door/firedoor/border_only, +/obj/effect/turf_decal/tile/brown/half/contrasted, +/obj/structure/table/reinforced, +/obj/item/food/chips, +/turf/open/floor/iron, +/area/station/cargo/storage) +"gcV" = ( +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/iron, +/area/station/hallway/secondary/exit/departure_lounge) +"gcZ" = ( +/obj/structure/closet/emcloset, +/obj/effect/turf_decal/tile/neutral/full, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/landmark/start/hangover/closet, +/turf/open/floor/iron/dark/smooth_large, +/area/station/hallway/primary/central) +"gdf" = ( +/obj/machinery/door/firedoor, +/obj/structure/cable, +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/duct, +/turf/open/floor/iron/dark, +/area/station/medical/treatment_center) +"gdj" = ( +/obj/structure/chair{ + name = "Defense" + }, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/security/courtroom) +"gdA" = ( +/obj/structure/chair/sofa/bench/right, +/turf/open/floor/iron/white, +/area/station/medical/exam_room) +"gdL" = ( +/obj/effect/landmark/event_spawn, +/turf/open/floor/glass/reinforced, +/area/station/science/research) +"gdM" = ( +/obj/structure/cable, +/obj/effect/turf_decal/siding/purple{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/catwalk_floor/flat_white, +/area/station/science/xenobiology) +"gdP" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/smart/simple/green/visible{ + dir = 8 + }, +/turf/open/space/basic, +/area/space/nearstation) +"gdZ" = ( +/obj/effect/turf_decal/tile/yellow/half/contrasted, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/textured, +/area/station/construction/mining/aux_base) +"gea" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/components/binary/pump{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"geh" = ( +/obj/machinery/door/window/brigdoor/right/directional/north{ + req_access = list("armory"); + name = "Justice Chamber" + }, +/obj/machinery/conveyor_switch/oneway{ + pixel_x = 10; + id = "execution" + }, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/security/execution/education) +"gei" = ( +/obj/machinery/disposal/bin, +/obj/effect/turf_decal/bot_red, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured, +/area/station/medical/morgue) +"geo" = ( +/obj/effect/landmark/event_spawn, +/obj/structure/disposalpipe/segment, +/turf/open/floor/carpet, +/area/station/service/theater) +"gep" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 6 + }, +/obj/structure/cable, +/turf/open/floor/wood/tile, +/area/station/service/chapel) +"ger" = ( +/obj/structure/table/reinforced, +/obj/item/geiger_counter, +/obj/item/storage/medkit/fire, +/obj/effect/turf_decal/trimline/yellow/filled/line, +/obj/machinery/light/directional/south, +/turf/open/floor/iron, +/area/station/engineering/lobby) +"gey" = ( +/obj/machinery/disposal/bin, +/obj/machinery/light_switch/directional/east, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/turf/open/floor/wood/parquet, +/area/station/medical/psychology) +"geB" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/plating, +/area/station/science/xenobiology) +"geO" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/light_switch/directional/north, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/junction/flip{ + dir = 8 + }, +/turf/open/floor/wood/large, +/area/station/cargo/boutique) +"geZ" = ( +/obj/structure/table/optable{ + dir = 4 + }, +/turf/open/floor/iron/white/smooth_large, +/area/station/science/robotics/lab) +"gfe" = ( +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/machinery/iv_drip, +/obj/machinery/power/apc/auto_name/directional/south, +/obj/structure/cable, +/turf/open/floor/iron/white, +/area/station/medical/treatment_center) +"gft" = ( +/obj/structure/transport/linear/public, +/obj/effect/landmark/transport/transport_id{ + specific_transport_id = "medbay1" + }, +/obj/machinery/elevator_control_panel/directional/south{ + linked_elevator_id = "medbay1" + }, +/turf/open/floor/plating/elevatorshaft, +/area/station/medical/treatment_center) +"gfF" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/white/smooth_edge{ + dir = 1 + }, +/area/station/science/research) +"ggl" = ( +/obj/machinery/camera/autoname/directional/west, +/turf/open/floor/grass, +/area/station/service/hydroponics/garden) +"ggu" = ( +/obj/machinery/door/airlock/public/glass{ + name = "Library" + }, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/siding/wood, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/wood/tile, +/area/station/service/library) +"ggz" = ( +/obj/effect/spawner/random/structure/closet_maintenance, +/obj/effect/spawner/random/maintenance, +/obj/effect/decal/cleanable/dirt, +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/maintenance/department/medical/central) +"ggP" = ( +/obj/structure/cable, +/obj/effect/turf_decal/trimline/yellow/filled/corner{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/engineering/main) +"ggQ" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/engineering/main) +"ggY" = ( +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/obj/effect/turf_decal/sand/plating, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"gho" = ( +/obj/structure/table/wood, +/obj/item/food/grown/harebell{ + pixel_x = -4 + }, +/obj/item/food/grown/harebell, +/obj/item/food/grown/harebell{ + pixel_x = 4; + pixel_y = 6 + }, +/obj/item/food/grown/harebell{ + pixel_x = 6 + }, +/obj/item/food/grown/harebell, +/obj/item/food/grown/harebell, +/turf/open/floor/iron/chapel{ + dir = 1 + }, +/area/station/service/chapel) +"ghp" = ( +/turf/open/floor/glass/reinforced, +/area/station/service/library) +"ghs" = ( +/obj/structure/closet/l3closet/security, +/obj/effect/turf_decal/tile/red/half/contrasted, +/obj/item/radio/intercom/directional/south, +/turf/open/floor/iron/dark, +/area/station/security/lockers) +"ghK" = ( +/obj/structure/table/reinforced, +/obj/effect/turf_decal/stripes/line, +/obj/item/storage/belt/utility/full, +/turf/open/floor/iron, +/area/station/science/robotics/lab) +"ghM" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/carpet, +/area/station/commons/dorms) +"ghQ" = ( +/obj/effect/turf_decal/tile/dark_red/opposingcorners, +/obj/machinery/chem_master/condimaster{ + desc = "Looks like a knock-off chem-master. Perhaps useful for separating liquids when mixing drinks precisely. Also dispenses condiments."; + name = "HoochMaster Deluxe" + }, +/turf/open/floor/iron/dark, +/area/station/service/bar) +"ghU" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/cargo/storage) +"ghW" = ( +/obj/effect/turf_decal/tile/red/half/contrasted, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/fore) +"gii" = ( +/obj/structure/cable, +/obj/machinery/navbeacon{ + codes_txt = "patrol;next_patrol=P8-Central-Primary"; + location = "P7-Central-Primary" + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"gij" = ( +/obj/structure/cable, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 9 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/station/engineering/main) +"gim" = ( +/obj/machinery/door/airlock/external, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "maintext3" + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/external, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"giv" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/iron/dark, +/area/station/command/corporate_showroom) +"giy" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/security/courtroom) +"giD" = ( +/obj/machinery/door/airlock/atmos/glass{ + name = "Distribution Loop" + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/engineering/atmos/pumproom) +"giK" = ( +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/cargo/drone_bay) +"gjo" = ( +/obj/structure/cable, +/obj/machinery/button/door/directional/east{ + name = "shutter control"; + id = "xbprotect" + }, +/obj/structure/window/reinforced/spawner/directional/south, +/obj/item/kirbyplants/random, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/catwalk_floor/flat_white, +/area/station/science/xenobiology) +"gjt" = ( +/obj/machinery/pdapainter/medbay, +/obj/effect/turf_decal/trimline/dark_blue/filled/line{ + dir = 5 + }, +/turf/open/floor/holofloor/dark, +/area/station/command/heads_quarters/cmo) +"gjw" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/iron/white/textured_large, +/area/station/medical/treatment_center) +"gjy" = ( +/obj/structure/mannequin/plastic{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/wood/parquet, +/area/station/cargo/boutique) +"gjA" = ( +/obj/machinery/computer/atmos_control/mix_tank{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold/cyan/visible{ + dir = 8 + }, +/obj/effect/turf_decal/tile/yellow{ + dir = 8 + }, +/turf/open/floor/iron/dark/corner{ + dir = 1 + }, +/area/station/engineering/atmos) +"gjB" = ( +/obj/machinery/vending/wardrobe/coroner_wardrobe, +/obj/machinery/light_switch/directional/east, +/turf/open/floor/iron/dark/textured, +/area/station/medical/morgue) +"gjD" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/layer_manifold/yellow/visible, +/turf/open/floor/plating, +/area/station/engineering/atmos) +"gjG" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/security/execution/transfer) +"gjI" = ( +/obj/machinery/door/airlock{ + id_tag = "Toilet_Research"; + name = "Bathroom" + }, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/plating, +/area/station/service/theater) +"gjN" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/simple/green/visible{ + dir = 1 + }, +/turf/open/floor/plating, +/area/station/engineering/atmos) +"gjZ" = ( +/obj/structure/lattice/catwalk, +/obj/machinery/atmospherics/pipe/heat_exchanging/manifold{ + dir = 8 + }, +/turf/open/space/basic, +/area/space/nearstation) +"gkj" = ( +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/machinery/camera/autoname/directional/north{ + network = list("ss13","medbay") + }, +/obj/machinery/iv_drip, +/turf/open/floor/iron/white, +/area/station/medical/treatment_center) +"gkt" = ( +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 1 + }, +/obj/structure/chair, +/turf/open/floor/iron, +/area/station/security) +"gkx" = ( +/obj/machinery/meter, +/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible, +/turf/closed/wall/r_wall, +/area/station/engineering/atmos) +"gkQ" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/dark_blue/opposingcorners, +/turf/open/floor/iron, +/area/station/command/bridge) +"gli" = ( +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/cargo/storage) +"glk" = ( +/obj/structure/toilet/greyscale{ + dir = 4 + }, +/obj/machinery/camera/autoname/directional/west, +/turf/open/floor/iron/dark, +/area/station/security/prison/safe) +"glq" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/ai_slipper{ + uses = 10 + }, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/command/storage/satellite) +"gls" = ( +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/red{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"glA" = ( +/obj/effect/turf_decal/tile/dark_blue/half/contrasted, +/turf/open/floor/iron, +/area/station/command/meeting_room) +"glC" = ( +/obj/machinery/atmospherics/components/binary/pump{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/engineering/atmos/upper) +"glH" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/sign/directions/dorms/directional/west, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"glL" = ( +/obj/effect/spawner/random/vending/snackvend, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 5 + }, +/obj/machinery/digital_clock/directional/north, +/turf/open/floor/iron/white, +/area/station/medical/treatment_center) +"gmb" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/catwalk_floor/flat_white, +/area/station/science/xenobiology) +"gmd" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "chapel_shutters_parlour"; + name = "Chapel Shutters"; + dir = 8 + }, +/turf/open/floor/plating, +/area/station/service/chapel/funeral) +"gme" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/dark, +/area/station/security/mechbay) +"gms" = ( +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ + dir = 4 + }, +/obj/effect/turf_decal/tile/yellow{ + dir = 8 + }, +/obj/machinery/light_switch/directional/south, +/turf/open/floor/iron/dark/corner, +/area/station/engineering/atmos) +"gmC" = ( +/obj/machinery/igniter/incinerator_ordmix, +/turf/open/floor/engine/vacuum, +/area/station/science/ordnance/burnchamber) +"gmH" = ( +/obj/structure/window/reinforced/spawner/directional/south, +/turf/open/floor/engine, +/area/station/command/heads_quarters/rd) +"gnh" = ( +/obj/item/knife/kitchen, +/turf/open/misc/asteroid, +/area/station/asteroid) +"gni" = ( +/obj/machinery/power/turbine/core_rotor{ + dir = 4; + mapping_id = "main_turbine" + }, +/obj/structure/cable, +/turf/open/floor/engine, +/area/station/maintenance/disposal/incinerator) +"gnx" = ( +/obj/effect/turf_decal/sand/plating, +/obj/structure/reagent_dispensers/beerkeg, +/obj/structure/table/wood, +/turf/open/floor/plating, +/area/station/maintenance/central/greater) +"gnE" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/blood/old{ + icon_state = "splatter3" + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/cargo/warehouse/upper) +"gnO" = ( +/obj/machinery/door/airlock/medical{ + name = "Treatment Centre" + }, +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/access/any/medical/general, +/obj/effect/mapping_helpers/airlock/unres, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron/white, +/area/station/medical/exam_room) +"gok" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/spawner/random/structure/furniture_parts, +/obj/effect/spawner/random/structure/furniture_parts, +/obj/effect/spawner/random/structure/crate, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"gop" = ( +/obj/effect/landmark/blobstart, +/obj/structure/closet/crate/science{ + opened = 1; + icon_state = "scicrateopen" + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/iron/dark/smooth_large, +/area/station/science/ordnance) +"goB" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/blood/tracks, +/turf/open/floor/plating, +/area/station/maintenance/department/science) +"goI" = ( +/obj/effect/turf_decal/tile/blue/half/contrasted{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/medical/medbay/lobby) +"goL" = ( +/obj/effect/turf_decal/siding/dark_blue, +/turf/open/floor/iron/textured_large, +/area/station/command/bridge) +"goX" = ( +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 8 + }, +/obj/machinery/conveyor/inverted{ + dir = 6; + id = "QMLoad" + }, +/turf/open/floor/iron, +/area/station/cargo/storage) +"gpg" = ( +/obj/effect/turf_decal/tile/brown/half/contrasted, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/cargo/sorting) +"gpy" = ( +/obj/structure/chair/pew/right{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/turf/open/floor/carpet, +/area/station/service/chapel/funeral) +"gpF" = ( +/obj/structure/cable, +/turf/open/floor/iron/white, +/area/station/medical/medbay/lobby) +"gpJ" = ( +/obj/machinery/shower/directional/north, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 10 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/main) +"gpR" = ( +/obj/machinery/light/dim/directional/south, +/obj/structure/closet/emcloset, +/obj/effect/landmark/start/hangover/closet, +/turf/open/floor/iron/textured, +/area/station/hallway/primary/central) +"gpV" = ( +/obj/structure/cable, +/obj/effect/turf_decal/tile/red/opposingcorners, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/security) +"gqd" = ( +/obj/machinery/vending/coffee, +/obj/effect/turf_decal/tile/green/half/contrasted{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/fore) +"gql" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/turf/open/floor/iron/dark, +/area/station/science/ordnance) +"gqm" = ( +/turf/closed/wall/material/meat, +/area/station/asteroid) +"gqz" = ( +/obj/effect/decal/cleanable/wrapping/pinata/syndie, +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/hallway/primary/starboard) +"gqA" = ( +/obj/machinery/navbeacon{ + codes_txt = "delivery;dir=1"; + location = "Science" + }, +/obj/machinery/door/window/right/directional/south{ + req_access = list("shipping"); + name = "MuleBot Access" + }, +/turf/open/floor/plating, +/area/station/maintenance/port/lesser) +"gqN" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, +/turf/closed/wall/r_wall, +/area/station/engineering/supermatter) +"gqO" = ( +/obj/item/radio/intercom/directional/west, +/turf/open/floor/glass/reinforced, +/area/station/security/checkpoint/science) +"gqV" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/computer/atmos_control/ordnancemix{ + dir = 1 + }, +/obj/machinery/light_switch/directional/south, +/turf/open/floor/iron/dark/smooth_large, +/area/station/science/ordnance) +"gqX" = ( +/obj/machinery/chem_dispenser/drinks{ + dir = 4 + }, +/obj/structure/table, +/obj/effect/turf_decal/tile/dark_red/opposingcorners, +/obj/machinery/camera/autoname/directional/west, +/turf/open/floor/iron/dark, +/area/station/service/bar) +"grb" = ( +/obj/effect/turf_decal/siding/thinplating_new, +/turf/open/floor/glass/reinforced, +/area/station/engineering/atmos/upper) +"grl" = ( +/obj/structure/cable, +/turf/open/floor/iron/white, +/area/station/science/lobby) +"grm" = ( +/obj/machinery/door/poddoor/shutters/window{ + dir = 4; + id = "ordauxgarage" + }, +/obj/effect/turf_decal/stripes/asteroid/end, +/obj/effect/turf_decal/sand/plating, +/turf/open/floor/plating, +/area/station/science/ordnance) +"grv" = ( +/obj/structure/table/glass, +/obj/item/clothing/head/cone{ + pixel_x = -3 + }, +/obj/item/clothing/head/cone{ + pixel_x = 9; + pixel_y = 11 + }, +/obj/item/clothing/head/cone{ + pixel_x = -14; + pixel_y = 10 + }, +/turf/open/floor/iron, +/area/station/engineering/lobby) +"grw" = ( +/obj/machinery/door/airlock/engineering{ + name = "Engineering Restrooms" + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/showroomfloor, +/area/station/engineering/main) +"grK" = ( +/obj/effect/turf_decal/tile/neutral, +/obj/machinery/newscaster/directional/east, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"grO" = ( +/obj/effect/turf_decal/trimline/yellow/filled/end, +/obj/machinery/airalarm/directional/west, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/turf/open/floor/iron/textured, +/area/station/medical/pharmacy) +"gsb" = ( +/obj/effect/turf_decal/tile/neutral, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"gsg" = ( +/obj/structure/lattice/catwalk, +/obj/structure/railing{ + dir = 8 + }, +/turf/open/openspace, +/area/station/engineering/supermatter/room) +"gsm" = ( +/obj/machinery/hydroponics/constructable, +/obj/machinery/firealarm/directional/north, +/turf/open/floor/iron/large, +/area/station/service/hydroponics/garden) +"gsn" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/cargo/miningoffice) +"gsw" = ( +/obj/machinery/door/poddoor/shutters/window/preopen{ + id = "ordstorage" + }, +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/caution/stand_clear/red, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/white, +/area/station/science/ordnance/storage) +"gsM" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 8 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/engineering/lobby) +"gsW" = ( +/turf/closed/wall/rock/porous, +/area/station/science/ordnance) +"gtj" = ( +/obj/effect/turf_decal/tile/brown/anticorner/contrasted{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/cargo/storage) +"gtn" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment, +/turf/open/floor/carpet, +/area/station/service/theater) +"gts" = ( +/obj/structure/railing/corner, +/obj/structure/cable/layer3, +/turf/open/floor/catwalk_floor/iron_dark/telecomms, +/area/station/ai_monitored/turret_protected/ai) +"gty" = ( +/obj/effect/landmark/carpspawn, +/turf/open/floor/plating/airless, +/area/station/science/ordnance/bomb) +"gtB" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/white, +/area/station/science/lobby) +"gtE" = ( +/obj/machinery/door/poddoor/shutters/window/preopen{ + name = "Security Shutters"; + id = "xbprotect1"; + dir = 8 + }, +/obj/machinery/door/firedoor, +/turf/open/floor/iron/white/textured_large, +/area/station/science/xenobiology) +"gtK" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"gtO" = ( +/obj/structure/cable, +/obj/effect/turf_decal/tile/green/half/contrasted, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/turf/open/floor/iron/white, +/area/station/medical/virology) +"gtX" = ( +/obj/effect/turf_decal/tile/red/opposingcorners, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/security/brig/entrance) +"gub" = ( +/obj/machinery/firealarm/directional/north, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/aisat/teleporter) +"guk" = ( +/obj/machinery/vending/wardrobe/gene_wardrobe, +/turf/open/floor/iron/white/textured, +/area/station/science/genetics) +"gup" = ( +/obj/effect/landmark/start/depsec/science, +/obj/effect/turf_decal/tile/red/opposingcorners, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/science) +"gur" = ( +/obj/structure/table/glass, +/obj/item/book/manual/wiki/engineering_construction{ + pixel_x = -3 + }, +/obj/item/book/manual/wiki/engineering_hacking{ + pixel_x = 4 + }, +/obj/item/book/manual/wiki/engineering_guide, +/turf/open/floor/iron, +/area/station/engineering/lobby) +"guF" = ( +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 1 + }, +/obj/machinery/airalarm/directional/north, +/turf/open/floor/iron, +/area/station/cargo/storage) +"guN" = ( +/obj/structure/table/glass, +/obj/item/folder/white, +/obj/effect/turf_decal/tile/yellow/fourcorners, +/obj/machinery/newscaster/directional/south, +/turf/open/floor/iron/white, +/area/station/medical/chemistry/minisat) +"guO" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/engineering/main) +"guP" = ( +/obj/structure/table, +/obj/item/modular_computer/laptop/preset/mafia, +/obj/structure/broken_flooring/side/directional/south, +/turf/open/floor/plating, +/area/station/maintenance/department/medical) +"guV" = ( +/obj/effect/decal/cleanable/blood/old, +/turf/open/floor/iron/freezer, +/area/station/maintenance/department/medical/central) +"gvk" = ( +/obj/structure/cable, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"gvn" = ( +/obj/machinery/door/airlock/engineering/glass{ + name = "Gravity Generator Access" + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/construction, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/engineering/gravity_generator) +"gvw" = ( +/turf/closed/wall, +/area/station/command/heads_quarters/cmo) +"gvF" = ( +/turf/closed/wall, +/area/station/science/lobby) +"gvH" = ( +/obj/structure/table, +/obj/item/grenade/chem_grenade/cleaner{ + pixel_x = -7; + pixel_y = 12 + }, +/obj/item/grenade/chem_grenade/cleaner{ + pixel_x = -7; + pixel_y = 12 + }, +/obj/item/grenade/chem_grenade/cleaner{ + pixel_x = -7; + pixel_y = 12 + }, +/obj/item/reagent_containers/spray/cleaner, +/obj/item/storage/box/lights/mixed{ + pixel_x = 6; + pixel_y = 8 + }, +/obj/item/storage/box/lights/mixed{ + pixel_x = 6; + pixel_y = 8 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light/directional/west, +/turf/open/floor/iron, +/area/station/service/janitor) +"gvK" = ( +/obj/machinery/light/dim/directional/south, +/turf/open/floor/iron/showroomfloor, +/area/station/cargo/storage) +"gvN" = ( +/obj/machinery/announcement_system, +/turf/open/floor/circuit/green/telecomms/mainframe, +/area/station/tcommsat/server) +"gvO" = ( +/obj/machinery/camera/directional/south{ + c_tag = "Holodeck - Aft"; + name = "holodeck camera" + }, +/turf/open/floor/engine{ + name = "Holodeck Projector Floor" + }, +/area/station/holodeck/rec_center) +"gvR" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/engineering/atmos) +"gwq" = ( +/obj/machinery/camera/autoname/directional/south, +/obj/effect/turf_decal/tile/neutral, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"gws" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 8; + name = "Privacy Shutters"; + id = "cmoprivacy" + }, +/turf/open/floor/plating, +/area/station/command/heads_quarters/cmo) +"gwx" = ( +/obj/machinery/door/poddoor/shutters/window/preopen{ + name = "Security Shutters"; + id = "xbprotect"; + dir = 8 + }, +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/science/xenobiology) +"gwA" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/spawner/random/engineering/tracking_beacon, +/turf/open/floor/iron/white, +/area/station/medical/storage) +"gwE" = ( +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/medical/treatment_center) +"gwF" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/blood/old, +/obj/machinery/airalarm/directional/north, +/obj/machinery/camera/autoname/motion/directional/east{ + network = list("minisat") + }, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/aisat/uppernorth) +"gwI" = ( +/obj/machinery/camera/autoname/directional/south, +/turf/open/floor/iron/textured, +/area/station/engineering/storage/tech) +"gwS" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"gxt" = ( +/obj/item/kirbyplants/random, +/obj/effect/turf_decal/siding/wood{ + dir = 10 + }, +/obj/machinery/camera/autoname/directional/west, +/turf/open/floor/wood/tile, +/area/station/service/bar) +"gxu" = ( +/obj/machinery/door/airlock/external/glass, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/fore) +"gxw" = ( +/turf/open/floor/engine/vacuum, +/area/station/engineering/atmos) +"gxx" = ( +/obj/machinery/porta_turret/ai, +/obj/machinery/flasher/directional/east{ + id = "AI" + }, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/structure/cable/layer3, +/turf/open/floor/iron/dark/telecomms, +/area/station/ai_monitored/turret_protected/ai) +"gxy" = ( +/obj/machinery/light/small/dim/directional/west, +/obj/effect/decal/cleanable/blood/tracks, +/turf/open/floor/plating, +/area/station/medical/chemistry/minisat) +"gxE" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/iron/large, +/area/station/hallway/secondary/exit/departure_lounge) +"gxM" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/maintenance/department/engine) +"gya" = ( +/obj/effect/turf_decal/tile/brown/half/contrasted, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/cargo/storage) +"gyl" = ( +/obj/machinery/vending/modularpc, +/obj/effect/turf_decal/tile/purple/anticorner/contrasted{ + dir = 8 + }, +/obj/machinery/newscaster/directional/west, +/turf/open/floor/iron/white, +/area/station/science/lobby) +"gyq" = ( +/obj/effect/turf_decal/stripes{ + dir = 8 + }, +/obj/structure/cable, +/obj/structure/cable/layer1, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"gyu" = ( +/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, +/obj/machinery/door/airlock/maintenance_hatch, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/commons/storage/primary) +"gyB" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/machinery/airalarm/directional/west, +/turf/open/floor/wood, +/area/station/command/heads_quarters/qm) +"gyI" = ( +/obj/effect/spawner/random/structure/closet_maintenance, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"gyM" = ( +/obj/machinery/button/curtain{ + id = "theater_curtains"; + name = "curtain control"; + req_access = list("theatre"); + pixel_x = 32 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/wood/parquet, +/area/station/service/theater) +"gyP" = ( +/obj/machinery/portable_atmospherics/canister/oxygen, +/turf/open/floor/engine/o2, +/area/station/engineering/atmos) +"gyS" = ( +/obj/structure/table, +/obj/effect/turf_decal/tile/brown/anticorner/contrasted{ + dir = 8 + }, +/obj/item/food/chips/shrimp, +/obj/effect/spawner/random/entertainment/dice, +/obj/machinery/camera/autoname/directional/north, +/turf/open/floor/iron, +/area/station/cargo/miningoffice) +"gza" = ( +/obj/machinery/atmospherics/pipe/smart/manifold/general/visible{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/engineering/atmos) +"gzd" = ( +/obj/item/paper_bin, +/obj/item/pen, +/obj/structure/table, +/obj/machinery/firealarm/directional/south, +/turf/open/floor/iron/white, +/area/station/science/explab) +"gzj" = ( +/obj/machinery/door/window/brigdoor/right/directional/north{ + req_access = list("xenobiology") + }, +/obj/machinery/door/window/brigdoor/left/directional/south{ + req_access = list("xenobiology") + }, +/obj/machinery/door/poddoor/preopen{ + id = "xenobio6"; + name = "Xenobio Pen 6 Blast Door" + }, +/turf/open/floor/engine, +/area/station/science/xenobiology) +"gzp" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/commons/fitness/recreation) +"gzq" = ( +/obj/effect/mapping_helpers/burnt_floor, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/obj/effect/landmark/generic_maintenance_landmark, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"gzr" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/item/food/grown/banana, +/turf/open/floor/grass, +/area/station/science/genetics) +"gzt" = ( +/obj/effect/turf_decal/tile/yellow/diagonal_centre, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/obj/effect/landmark/event_spawn, +/turf/open/floor/iron, +/area/station/commons/storage/tools) +"gzw" = ( +/obj/structure/window/reinforced/spawner/directional/west, +/obj/machinery/door/window/left/directional/north{ + req_access = list("medical"); + name = "Anti Assistant Protection Door" + }, +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 1 + }, +/obj/machinery/portable_atmospherics/canister/anesthetic_mix, +/obj/effect/turf_decal/tile/blue/fourcorners, +/turf/open/floor/iron/white, +/area/station/medical/treatment_center) +"gzF" = ( +/obj/machinery/atmospherics/pipe/smart/simple/dark/visible{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/science/ordnance) +"gzL" = ( +/obj/machinery/light/small/directional/south, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"gzS" = ( +/obj/structure/table/wood, +/obj/item/toy/plush/lizard_plushie/green{ + name = "Counsels-The-Patients" + }, +/obj/machinery/light_switch/directional/east, +/turf/open/floor/carpet, +/area/station/medical/psychology) +"gAg" = ( +/obj/structure/bodycontainer/morgue, +/obj/machinery/firealarm/directional/west, +/turf/open/floor/iron/dark/textured, +/area/station/medical/morgue) +"gAv" = ( +/obj/structure/table, +/obj/item/storage/box/evidence, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 1 + }, +/obj/item/restraints/legcuffs/bola/energy, +/turf/open/floor/iron/dark, +/area/station/security/lockers) +"gAD" = ( +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, +/turf/open/floor/plating, +/area/station/maintenance/port/lesser) +"gAQ" = ( +/obj/structure/bed/dogbed, +/obj/machinery/light_switch/directional/north, +/mob/living/basic/carp/pet/lia, +/turf/open/floor/carpet/red, +/area/station/command/heads_quarters/hos) +"gAZ" = ( +/obj/machinery/atmospherics/components/binary/pump/off{ + dir = 8; + name = "O2 To Pure" + }, +/obj/effect/turf_decal/tile/yellow{ + dir = 4 + }, +/turf/open/floor/iron/dark/corner, +/area/station/engineering/atmos) +"gBg" = ( +/obj/effect/landmark/event_spawn, +/turf/open/floor/catwalk_floor/iron_white, +/area/station/science/ordnance/testlab) +"gBh" = ( +/obj/effect/landmark/start/detective, +/obj/structure/chair/office, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/carpet, +/area/station/security/detectives_office) +"gBi" = ( +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron/chapel{ + dir = 8 + }, +/area/station/service/chapel) +"gBq" = ( +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/cargo/storage) +"gBu" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/blood/tracks, +/obj/item/broken_bottle, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/cargo/warehouse/upper) +"gBw" = ( +/obj/structure/chair/office{ + dir = 1 + }, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/security/execution/education) +"gBx" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/ai_monitored/turret_protected/aisat_interior) +"gBy" = ( +/obj/structure/sign/warning/electric_shock/directional/south, +/turf/open/floor/plating, +/area/station/maintenance/aft/upper) +"gBA" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/glass, +/area/station/cargo/storage) +"gBB" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/turf/open/floor/carpet, +/area/station/service/chapel) +"gBE" = ( +/obj/structure/table, +/obj/effect/spawner/random/entertainment/deck, +/turf/open/floor/iron, +/area/station/security/prison) +"gBG" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/security/prison/safe) +"gBY" = ( +/obj/effect/turf_decal/stripes/red/line{ + dir = 5 + }, +/turf/open/floor/iron/dark, +/area/station/medical/morgue) +"gBZ" = ( +/obj/machinery/door/airlock/security/glass, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 8 + }, +/obj/machinery/door/poddoor/preopen{ + id = "prison release"; + name = "Prisoner Processing Blast Door" + }, +/obj/effect/turf_decal/delivery, +/turf/open/floor/iron, +/area/station/hallway/primary/fore) +"gCL" = ( +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/tile/neutral, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"gCN" = ( +/obj/structure/table/reinforced, +/obj/effect/spawner/random/food_or_drink/snack, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 8 + }, +/obj/item/radio/intercom/directional/west, +/turf/open/floor/iron, +/area/station/engineering/break_room) +"gCP" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/iron/white/textured_large, +/area/station/science/xenobiology) +"gCT" = ( +/obj/effect/turf_decal/tile/yellow/fourcorners, +/turf/open/floor/iron, +/area/station/engineering/main) +"gCY" = ( +/obj/structure/cable, +/obj/effect/turf_decal/tile/yellow, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/sorting/mail/flip{ + dir = 4 + }, +/obj/effect/mapping_helpers/mail_sorting/engineering/atmospherics, +/turf/open/floor/iron/dark/corner{ + dir = 8 + }, +/area/station/engineering/atmos/storage/gas) +"gDl" = ( +/obj/structure/sign/xenobio_guide/directional/south, +/obj/structure/tank_holder/extinguisher, +/obj/effect/turf_decal/bot, +/turf/open/floor/iron/white/textured_half, +/area/station/science/xenobiology) +"gDm" = ( +/obj/structure/railing{ + dir = 8 + }, +/turf/open/floor/iron/stairs{ + dir = 1 + }, +/area/station/security) +"gDQ" = ( +/obj/effect/turf_decal/tile/brown/fourcorners, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/obj/structure/window/spawner/directional/north, +/turf/open/floor/iron, +/area/station/cargo/storage) +"gDR" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 10 + }, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/turf/open/floor/iron/white, +/area/station/medical/storage) +"gEk" = ( +/obj/effect/spawner/random/trash/mopbucket, +/turf/open/misc/asteroid, +/area/station/maintenance/central/greater) +"gEm" = ( +/obj/structure/railing{ + dir = 4 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/trunk/multiz/down{ + dir = 1 + }, +/turf/open/floor/wood/tile, +/area/station/service/bar) +"gEp" = ( +/obj/effect/landmark/carpspawn, +/turf/open/space/openspace, +/area/space/nearstation) +"gEr" = ( +/obj/effect/turf_decal/arrows{ + dir = 8; + pixel_x = 7 + }, +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 8 + }, +/obj/machinery/door/firedoor, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/exit/departure_lounge) +"gEA" = ( +/obj/structure/flora/rock/pile/style_random, +/obj/effect/turf_decal/stripes/asteroid/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/asteroid/line{ + dir = 4 + }, +/turf/open/misc/asteroid/airless, +/area/station/asteroid) +"gEJ" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/engineering/lobby) +"gEP" = ( +/obj/effect/turf_decal/tile/blue/opposingcorners, +/obj/effect/turf_decal/tile/red/opposingcorners{ + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/service/theater) +"gEQ" = ( +/obj/structure/closet/secure_closet/miner, +/obj/effect/turf_decal/tile/brown/anticorner/contrasted, +/obj/machinery/light_switch/directional/north, +/turf/open/floor/iron, +/area/station/cargo/miningoffice) +"gFe" = ( +/obj/structure/fluff/iced_abductor, +/turf/open/misc/asteroid/airless, +/area/space/nearstation) +"gFg" = ( +/obj/effect/landmark/event_spawn, +/obj/effect/turf_decal/siding/purple{ + dir = 8 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/iron/white/textured_large, +/area/station/science/genetics) +"gFI" = ( +/obj/machinery/door/airlock/command{ + name = "Head of Security's Quarters" + }, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/effect/mapping_helpers/airlock/access/all/security/hos, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/carpet/red, +/area/station/command/heads_quarters/hos) +"gFU" = ( +/obj/machinery/button/door/directional/west{ + id = "Cabin5"; + name = "Cabin Bolt Control"; + normaldoorcontrol = 1; + specialfunctions = 4 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 9 + }, +/obj/effect/turf_decal/siding/wood/corner, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/wood/tile, +/area/station/commons/dorms) +"gGa" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/newscaster/directional/south, +/turf/open/floor/wood/parquet, +/area/station/cargo/boutique) +"gGf" = ( +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/plating/airless, +/area/space/nearstation) +"gGh" = ( +/obj/effect/landmark/start/cyborg, +/obj/structure/window/reinforced/spawner/directional/east, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/recharge_floor, +/area/station/ai_monitored/turret_protected/ai_upload_foyer) +"gGm" = ( +/obj/effect/spawner/random/engineering/tank, +/turf/open/floor/plating, +/area/station/maintenance/central/lesser) +"gGo" = ( +/obj/structure/sign/poster/official/random/directional/south, +/obj/effect/turf_decal/siding/purple, +/obj/structure/chair{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/turf/open/floor/iron/white/herringbone, +/area/station/science/breakroom) +"gGp" = ( +/obj/structure/table/wood/fancy/orange, +/obj/machinery/coffeemaker/impressa{ + pixel_y = 6; + pixel_x = 6; + desc = "An industry-grade Impressa Modello 5 Coffeemaker of the Piccionaia Home Appliances premium coffeemakers product line. Makes coffee from fresh dried whole beans. Guess this is where all the cargo tax goes." + }, +/obj/structure/cable, +/turf/open/floor/carpet/red, +/area/station/command/heads_quarters/qm) +"gGr" = ( +/turf/closed/wall, +/area/station/engineering/storage/tcomms) +"gGs" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/commons/locker) +"gGP" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/security/lockers) +"gGS" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/plating, +/area/station/maintenance/central/lesser) +"gHc" = ( +/obj/effect/landmark/event_spawn, +/obj/effect/mapping_helpers/trapdoor_placer, +/turf/open/floor/glass/reinforced/plasma, +/area/station/engineering/supermatter/room) +"gHk" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/fore) +"gHr" = ( +/turf/closed/wall/r_wall, +/area/station/security/processing) +"gHx" = ( +/obj/machinery/light/small/broken/directional/east, +/turf/open/floor/iron/freezer, +/area/station/maintenance/department/medical/central) +"gHL" = ( +/obj/structure/table, +/obj/effect/turf_decal/bot, +/obj/machinery/camera/directional/west{ + c_tag = "Science Ordnance Test Lab"; + network = list("ss13","rd") + }, +/obj/item/assembly/prox_sensor{ + pixel_y = 2 + }, +/obj/item/assembly/prox_sensor{ + pixel_x = 9; + pixel_y = -2 + }, +/obj/item/assembly/prox_sensor{ + pixel_x = -4; + pixel_y = 1 + }, +/obj/item/assembly/prox_sensor{ + pixel_x = 8; + pixel_y = 9 + }, +/obj/machinery/requests_console/directional/west{ + department = "Ordnance Test Range"; + name = "Test Range Requests Console" + }, +/obj/effect/mapping_helpers/requests_console/information, +/obj/effect/mapping_helpers/requests_console/assistance, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/item/binoculars{ + pixel_y = -10; + pixel_x = -5 + }, +/turf/open/floor/iron/dark, +/area/station/science/ordnance/testlab) +"gHN" = ( +/turf/closed/wall, +/area/station/medical/chemistry/minisat) +"gHQ" = ( +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/aisat/foyer) +"gHS" = ( +/obj/structure/cable, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/security/breakroom) +"gHX" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/carpet/executive, +/area/station/command/heads_quarters/captain/private) +"gHZ" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/department/engine) +"gIb" = ( +/obj/effect/turf_decal/tile/red/half/contrasted, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/security/brig/entrance) +"gIw" = ( +/obj/machinery/door/airlock/research/glass{ + name = "Robotics Lab" + }, +/obj/effect/mapping_helpers/airlock/access/all/science/robotics, +/obj/effect/turf_decal/siding/purple{ + dir = 1 + }, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark/textured, +/area/station/science/robotics/lab) +"gID" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/structure/grille{ + spawn_loot_chance = 76 + }, +/turf/open/floor/iron/dark, +/area/station/maintenance/department/engine) +"gIO" = ( +/obj/structure/table/reinforced/rglass, +/obj/item/poster/random_official, +/obj/item/poster/random_official{ + pixel_y = 11 + }, +/obj/item/poster/random_official{ + pixel_y = 5 + }, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/security/office) +"gIS" = ( +/obj/structure/chair/stool/bar/directional/north, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/wood, +/area/station/service/cafeteria) +"gIW" = ( +/obj/structure/cable, +/obj/structure/sign/warning/radiation/rad_area/directional/east, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/maintenance/department/engine) +"gJg" = ( +/obj/structure/flora/bush/flowers_pp/style_random, +/obj/structure/window/spawner/directional/north, +/mob/living/basic/butterfly, +/turf/open/misc/grass, +/area/station/ai_monitored/turret_protected/aisat/foyer) +"gJA" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/light_switch/directional/west, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/cargo/bitrunning/den) +"gJE" = ( +/obj/machinery/door/poddoor/shutters{ + id = "maintbridge" + }, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"gJL" = ( +/obj/effect/spawner/random/maintenance, +/obj/structure/closet, +/turf/open/floor/plating, +/area/station/maintenance/department/engine) +"gJS" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "chapel_shutters_parlour"; + name = "Chapel Shutters" + }, +/turf/open/floor/plating, +/area/station/service/chapel/funeral) +"gKt" = ( +/turf/closed/wall, +/area/station/science/auxlab/firing_range) +"gKu" = ( +/obj/machinery/atmospherics/pipe/smart/simple/purple/visible{ + initialize_directions = 15 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/engineering/atmos/pumproom) +"gKS" = ( +/obj/machinery/door/airlock/external, +/obj/effect/mapping_helpers/airlock/cyclelink_helper, +/obj/effect/mapping_helpers/airlock/access/all/engineering/external, +/obj/effect/turf_decal/stripes/end{ + dir = 1 + }, +/turf/open/floor/plating, +/area/station/maintenance/department/engine) +"gLp" = ( +/obj/structure/closet/secure_closet/personal, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/structure/window/spawner/directional/east, +/obj/effect/turf_decal/delivery, +/obj/item/radio/intercom/directional/north, +/turf/open/floor/iron/dark, +/area/station/commons/locker) +"gLq" = ( +/obj/structure/rack, +/obj/item/food/cheesiehonkers, +/turf/open/floor/plating, +/area/station/maintenance/department/engine) +"gLw" = ( +/obj/machinery/atmospherics/pipe/multiz/scrubbers/visible/layer2, +/obj/machinery/atmospherics/pipe/multiz/supply/hidden/layer4, +/obj/structure/window/spawner/directional/east, +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/turf/open/floor/plating, +/area/station/maintenance/department/science) +"gLD" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/spawner/random/engineering/atmospherics_portable, +/turf/open/floor/iron, +/area/station/maintenance/central/greater) +"gLE" = ( +/turf/open/floor/iron/white, +/area/station/medical/chemistry/minisat) +"gLJ" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/aisat/teleporter) +"gLK" = ( +/obj/structure/table/wood, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/item/storage/fancy/candle_box, +/obj/item/storage/fancy/candle_box{ + pixel_x = -2; + pixel_y = 2 + }, +/obj/machinery/airalarm/directional/east, +/turf/open/floor/carpet, +/area/station/service/chapel/funeral) +"gLQ" = ( +/obj/effect/turf_decal/tile/yellow{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/iron/dark/corner{ + dir = 1 + }, +/area/station/engineering/atmos/storage/gas) +"gLZ" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/station/command/corporate_dock) +"gMk" = ( +/turf/open/misc/asteroid, +/area/station/asteroid) +"gMr" = ( +/obj/structure/railing/corner{ + dir = 1 + }, +/obj/structure/broken_flooring/pile{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"gMy" = ( +/obj/machinery/door/poddoor/shutters/window/preopen{ + name = "Security Shutters"; + id = "xbprotect"; + dir = 8 + }, +/obj/machinery/door/firedoor, +/turf/open/floor/iron/white/textured_large, +/area/station/science/xenobiology) +"gME" = ( +/obj/effect/turf_decal/delivery, +/obj/structure/table, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/item/raw_anomaly_core/random{ + pixel_x = -5; + pixel_y = 7 + }, +/obj/item/raw_anomaly_core/random, +/obj/item/raw_anomaly_core/random{ + pixel_x = 7; + pixel_y = 9 + }, +/turf/open/floor/iron/dark, +/area/station/science/ordnance/testlab) +"gMH" = ( +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/abandoned, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 8 + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/maintenance/aft/upper) +"gMK" = ( +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/department/science) +"gNd" = ( +/obj/structure/rack, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/department/engine) +"gNo" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/wood/tile, +/area/station/service/chapel) +"gNP" = ( +/obj/machinery/computer/records/security{ + dir = 4 + }, +/obj/effect/turf_decal/tile/red/anticorner/contrasted{ + dir = 8 + }, +/turf/open/floor/iron/textured, +/area/station/security/warden) +"gNT" = ( +/obj/structure/table/reinforced, +/obj/item/grenade/chem_grenade, +/obj/item/grenade/chem_grenade, +/obj/item/grenade/chem_grenade, +/obj/item/grenade/chem_grenade, +/obj/item/stack/cable_coil, +/obj/item/stack/cable_coil, +/obj/item/screwdriver{ + pixel_x = -2; + pixel_y = 6 + }, +/obj/machinery/airalarm/directional/south, +/obj/structure/extinguisher_cabinet/directional/west, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 10 + }, +/obj/effect/turf_decal/trimline/yellow/filled/mid_joiner, +/obj/effect/turf_decal/trimline/yellow/filled/mid_joiner{ + dir = 8 + }, +/turf/open/floor/iron/white/smooth_corner{ + dir = 4 + }, +/area/station/medical/pharmacy) +"gNV" = ( +/turf/closed/wall/r_wall, +/area/station/ai_monitored/command/nuke_storage) +"gOc" = ( +/turf/open/openspace, +/area/station/science/lobby) +"gOs" = ( +/obj/effect/turf_decal/siding/purple{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/turf/open/floor/iron/white/smooth_corner{ + dir = 1 + }, +/area/station/science/research) +"gOB" = ( +/obj/structure/table, +/obj/item/storage/box/monkeycubes{ + pixel_x = 4 + }, +/obj/item/storage/box/monkeycubes{ + pixel_x = 6; + pixel_y = 9 + }, +/obj/item/storage/pill_bottle/mutadone{ + pixel_x = -9 + }, +/obj/machinery/airalarm/directional/north, +/obj/effect/turf_decal/siding/purple/corner{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/white/textured, +/area/station/science/genetics) +"gOG" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/wood/tile, +/area/station/service/bar) +"gOY" = ( +/turf/closed/wall/r_wall, +/area/station/science/ordnance) +"gPk" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/iron/textured, +/area/station/security/processing) +"gPn" = ( +/obj/effect/turf_decal/tile/neutral, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"gPI" = ( +/obj/structure/railing/corner/end{ + dir = 1 + }, +/obj/structure/cable, +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/aisat/foyer) +"gPZ" = ( +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 4 + }, +/obj/machinery/light/dim/directional/east, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/security/office) +"gQe" = ( +/obj/structure/lattice, +/obj/effect/turf_decal/stripes/asteroid/line{ + dir = 1 + }, +/turf/open/misc/asteroid, +/area/station/hallway/primary/starboard) +"gQq" = ( +/turf/open/openspace, +/area/station/science/xenobiology) +"gQs" = ( +/obj/structure/transport/linear/public, +/obj/effect/landmark/transport/transport_id{ + specific_transport_id = "aisat" + }, +/obj/machinery/holopad, +/turf/open/openspace, +/area/station/ai_monitored/turret_protected/aisat_interior) +"gQt" = ( +/obj/machinery/door/airlock{ + id_tag = "Cabin6"; + name = "Cabin 2" + }, +/obj/effect/turf_decal/siding/wood/end, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/wood/tile, +/area/station/commons/dorms) +"gQu" = ( +/obj/structure/railing/corner{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/catwalk_floor/iron_white, +/area/station/science/lobby) +"gQK" = ( +/obj/structure/cable, +/obj/effect/landmark/event_spawn, +/turf/open/floor/iron, +/area/station/engineering/lobby) +"gQN" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/tile/purple/half/contrasted, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/white, +/area/station/science/lobby) +"gRp" = ( +/obj/item/kirbyplants/random, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/white, +/area/station/medical/treatment_center) +"gRq" = ( +/obj/structure/cable/layer3, +/obj/structure/cable, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/ai_monitored/turret_protected/aisat_interior) +"gRA" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/airalarm/directional/north, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/ai_monitored/turret_protected/aisat_interior) +"gRG" = ( +/obj/effect/turf_decal/stripes, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"gRO" = ( +/obj/machinery/firealarm/directional/south, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/security/prison) +"gSr" = ( +/obj/effect/turf_decal/tile/red/opposingcorners, +/obj/structure/sink/kitchen/directional/north, +/turf/open/floor/iron/white, +/area/station/security/prison/mess) +"gSD" = ( +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/fore) +"gSI" = ( +/obj/machinery/suit_storage_unit/cmo, +/obj/effect/turf_decal/trimline/dark_blue/filled/line{ + dir = 9 + }, +/obj/machinery/light/cold/directional/north, +/turf/open/floor/holofloor/dark, +/area/station/command/heads_quarters/cmo) +"gSJ" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron/white, +/area/station/medical/chemistry/minisat) +"gSY" = ( +/obj/item/target/syndicate, +/turf/open/floor/engine, +/area/station/science/explab) +"gTe" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, +/obj/effect/turf_decal/stripes{ + dir = 8 + }, +/obj/machinery/power/apc/auto_name/directional/west, +/obj/effect/mapping_helpers/apc/cell_10k, +/obj/structure/cable, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"gTf" = ( +/obj/structure/table, +/obj/machinery/reagentgrinder{ + pixel_x = -1; + pixel_y = 8 + }, +/obj/item/swab{ + pixel_x = 15 + }, +/turf/open/floor/iron/dark/small, +/area/station/science/cytology) +"gTh" = ( +/obj/structure/table/wood, +/obj/item/gift, +/turf/open/floor/wood, +/area/station/commons/lounge) +"gTA" = ( +/obj/structure/railing, +/obj/structure/closet/emcloset/anchored, +/obj/machinery/door/firedoor/border_only, +/turf/open/floor/iron/white, +/area/station/science/research) +"gTI" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 4 + }, +/obj/structure/table, +/obj/machinery/microwave{ + pixel_y = 6 + }, +/obj/effect/spawner/random/food_or_drink/donkpockets{ + pixel_y = 6 + }, +/obj/item/radio/intercom/directional/east, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron/white, +/area/station/medical/paramedic) +"gTS" = ( +/obj/machinery/door/poddoor/shutters{ + name = "Warehouse Shutters"; + id = "warehouse" + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron, +/area/station/cargo/warehouse) +"gTU" = ( +/obj/docking_port/stationary{ + dheight = 4; + dwidth = 4; + height = 9; + name = "Aux Base Zone"; + roundstart_template = /datum/map_template/shuttle/aux_base/default; + shuttle_id = "aux_base_zone"; + width = 9 + }, +/turf/open/floor/plating, +/area/station/construction/mining/aux_base) +"gTV" = ( +/obj/effect/spawner/structure/window, +/turf/open/floor/plating, +/area/station/engineering/break_room) +"gTY" = ( +/obj/machinery/door/airlock/maintenance_hatch, +/obj/effect/mapping_helpers/airlock/access/all/medical/general, +/turf/open/floor/plating, +/area/station/medical/exam_room) +"gUa" = ( +/obj/machinery/conveyor{ + id = "garbage"; + dir = 8 + }, +/obj/structure/window/spawner/directional/north, +/obj/item/mod/construction/broken_core, +/turf/open/floor/plating, +/area/station/maintenance/disposal) +"gUe" = ( +/obj/structure/table, +/obj/item/grenade/chem_grenade/smart_metal_foam{ + pixel_x = -4; + pixel_y = 6 + }, +/obj/item/grenade/chem_grenade/smart_metal_foam{ + pixel_y = 4 + }, +/obj/item/grenade/chem_grenade/smart_metal_foam{ + pixel_x = 4; + pixel_y = 2 + }, +/obj/item/grenade/chem_grenade/smart_metal_foam{ + pixel_x = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/storage/gas) +"gUl" = ( +/obj/machinery/light/directional/west, +/obj/machinery/button/door/directional/north{ + id = "Xenolab"; + name = "Test Chamber Blast Doors"; + pixel_x = 6; + pixel_y = -2; + req_access = list("xenobiology") + }, +/obj/machinery/button/ignition{ + id = "Xenobio"; + pixel_x = -6 + }, +/obj/structure/table/reinforced/plastitaniumglass, +/turf/open/floor/iron/dark/textured_corner, +/area/station/science/xenobiology) +"gUq" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/structure/table, +/obj/effect/landmark/start/hangover, +/turf/open/floor/iron/dark, +/area/station/security/courtroom) +"gUs" = ( +/obj/effect/turf_decal/tile/blue/opposingcorners{ + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/iron/cafeteria, +/area/station/commons/locker) +"gUu" = ( +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/obj/effect/turf_decal/tile/green{ + dir = 4 + }, +/obj/machinery/duct, +/obj/machinery/camera/autoname/directional/north, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/service/hydroponics) +"gUv" = ( +/obj/effect/spawner/random/structure/closet_empty/crate, +/obj/effect/spawner/random/structure/furniture_parts, +/obj/effect/spawner/random/maintenance, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/dark, +/area/station/maintenance/department/engine) +"gUB" = ( +/obj/structure/railing, +/obj/structure/table/wood/fancy/blue, +/obj/machinery/airalarm/directional/west, +/turf/open/floor/iron/dark/side{ + dir = 10 + }, +/area/station/command/meeting_room) +"gUK" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/siding/purple{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/white, +/area/station/ai_monitored/turret_protected/ai_upload_foyer) +"gUY" = ( +/obj/structure/chair/sofa/bench/left{ + dir = 1 + }, +/turf/open/floor/iron/white, +/area/station/medical/exam_room) +"gUZ" = ( +/obj/effect/turf_decal/tile/yellow, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) +"gVe" = ( +/obj/structure/chair/stool/directional/east, +/obj/effect/turf_decal/tile/yellow, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) +"gVi" = ( +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible, +/turf/open/floor/iron/dark/textured_half{ + dir = 1 + }, +/area/station/science/xenobiology) +"gVn" = ( +/obj/machinery/light/cold/dim/directional/east, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/medical/treatment_center) +"gVx" = ( +/obj/machinery/atmospherics/components/unary/thermomachine{ + dir = 4; + initialize_directions = 4 + }, +/turf/open/floor/iron/textured, +/area/station/engineering/atmos) +"gVC" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/obj/machinery/camera/motion/directional/south{ + c_tag = "Secure Technical Storage" + }, +/turf/open/floor/iron/dark/textured_large, +/area/station/engineering/storage/tech) +"gVN" = ( +/obj/effect/turf_decal/stripes/asteroid/line, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/sand/plating, +/turf/open/floor/plating/airless, +/area/station/asteroid) +"gVW" = ( +/obj/effect/turf_decal/trimline/blue/filled/corner{ + dir = 1 + }, +/turf/open/floor/iron/white, +/area/station/medical/exam_room) +"gWe" = ( +/obj/machinery/holopad, +/obj/effect/turf_decal/bot_white{ + color = "#74b2d3" + }, +/turf/open/floor/iron/white/smooth_large, +/area/station/medical/exam_room) +"gWo" = ( +/obj/structure/closet/cardboard/metal, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/department/engine) +"gWr" = ( +/obj/effect/turf_decal/trimline/yellow/filled/warning, +/obj/structure/sign/warning/directional/west, +/obj/structure/railing/corner, +/obj/machinery/door/firedoor/border_only, +/turf/open/floor/iron, +/area/station/hallway/secondary/exit/departure_lounge) +"gWG" = ( +/obj/structure/cable, +/obj/machinery/door/airlock/security/glass{ + name = "Permabrig" + }, +/turf/open/floor/plating, +/area/station/security/prison/garden) +"gWO" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/command/storage/satellite) +"gWX" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 1 + }, +/obj/item/radio/intercom/directional/north, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) +"gXh" = ( +/obj/machinery/portable_atmospherics/canister, +/turf/open/misc/asteroid, +/area/station/maintenance/disposal/incinerator) +"gXo" = ( +/obj/effect/landmark/start/quartermaster, +/obj/structure/chair/comfy/black{ + dir = 1 + }, +/turf/open/floor/wood, +/area/station/command/heads_quarters/qm) +"gXw" = ( +/obj/structure/table, +/obj/effect/turf_decal/bot, +/obj/effect/turf_decal/stripes/white/line{ + dir = 1 + }, +/obj/item/assembly/signaler{ + pixel_x = 6; + pixel_y = 5 + }, +/obj/item/assembly/signaler{ + pixel_x = -2; + pixel_y = -2 + }, +/obj/item/assembly/signaler{ + pixel_x = -8; + pixel_y = 5 + }, +/obj/item/assembly/signaler{ + pixel_y = 8 + }, +/obj/machinery/airalarm/directional/west, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/station/science/ordnance/testlab) +"gYh" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line, +/obj/effect/turf_decal/trimline/yellow/filled/mid_joiner, +/turf/open/floor/iron/white/smooth_edge, +/area/station/medical/pharmacy) +"gYH" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/wood, +/area/station/command/heads_quarters/hos) +"gYI" = ( +/obj/structure/railing/corner{ + dir = 8 + }, +/obj/structure/railing/corner{ + dir = 1 + }, +/obj/structure/lattice/catwalk, +/turf/open/openspace, +/area/station/science/xenobiology) +"gYM" = ( +/obj/effect/turf_decal/stripes{ + dir = 8 + }, +/obj/machinery/airalarm/directional/west, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/engineering/atmospherics_engine) +"gYO" = ( +/obj/machinery/door/airlock/command{ + name = "Corporate Showroom" + }, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/effect/mapping_helpers/airlock/access/any/command/general, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 1 + }, +/obj/effect/turf_decal/siding/wood, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/turf/open/floor/wood/tile, +/area/station/command/corporate_showroom) +"gYP" = ( +/obj/machinery/atmospherics/pipe/smart/simple/green/visible{ + dir = 10 + }, +/obj/structure/lattice, +/turf/open/space/basic, +/area/space/nearstation) +"gYT" = ( +/obj/machinery/power/apc/auto_name/directional/north, +/obj/structure/cable, +/obj/item/kirbyplants/random, +/turf/open/floor/iron/dark/textured, +/area/station/command/heads_quarters/cmo) +"gYW" = ( +/turf/closed/wall, +/area/station/maintenance/central/greater) +"gYY" = ( +/turf/closed/wall, +/area/station/science/genetics) +"gZc" = ( +/obj/machinery/camera/directional/south{ + c_tag = "Atmospherics Tank - Air" + }, +/turf/open/floor/engine/air, +/area/station/engineering/atmos) +"gZe" = ( +/obj/machinery/holopad, +/turf/open/floor/iron, +/area/station/security/execution/transfer) +"gZk" = ( +/obj/machinery/airalarm/directional/east, +/turf/open/floor/iron/dark/textured_large, +/area/station/security/interrogation) +"gZs" = ( +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 1 + }, +/obj/machinery/conveyor{ + dir = 4; + id = "QMLoad2" + }, +/obj/machinery/status_display/supply{ + pixel_y = 32 + }, +/turf/open/floor/iron, +/area/station/cargo/storage) +"gZt" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/trimline/yellow/filled/corner{ + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/iron/white/smooth_large, +/area/station/medical/chemistry/minisat) +"gZv" = ( +/obj/structure/closet/secure_closet{ + req_access = list("brig") + }, +/obj/effect/turf_decal/tile/red/anticorner/contrasted, +/obj/item/radio/intercom/directional/east, +/turf/open/floor/iron, +/area/station/security/brig) +"gZA" = ( +/obj/machinery/component_printer, +/turf/open/floor/iron/white, +/area/station/science/explab) +"gZE" = ( +/obj/effect/landmark/start/depsec/science, +/obj/effect/turf_decal/tile/red/opposingcorners, +/obj/effect/landmark/event_spawn, +/obj/structure/disposalpipe/trunk/multiz/down{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/science) +"gZI" = ( +/obj/structure/dresser, +/obj/machinery/airalarm/directional/west, +/turf/open/floor/carpet, +/area/station/commons/dorms) +"haa" = ( +/obj/structure/ladder{ + icon_state = "ladder10" + }, +/obj/machinery/light/small/dim/directional/north, +/turf/open/floor/plating, +/area/station/maintenance/port/lesser) +"hab" = ( +/obj/machinery/light/small/directional/north, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/maintenance/department/engine) +"haf" = ( +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 4 + }, +/obj/machinery/button/door/directional/south{ + id = "gateshutter"; + name = "Gateway Shutter Control"; + req_access = list("command") + }, +/turf/open/floor/iron/dark/side{ + dir = 4 + }, +/area/station/command/gateway) +"hak" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/textured, +/area/station/security/processing) +"hav" = ( +/obj/structure/table, +/obj/effect/turf_decal/tile/green/half/contrasted{ + dir = 1 + }, +/obj/item/reagent_containers/cup/glass/coffee, +/turf/open/floor/iron, +/area/station/hallway/primary/fore) +"haC" = ( +/obj/structure/lattice/catwalk, +/obj/structure/railing{ + dir = 5 + }, +/obj/structure/railing/corner{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/openspace, +/area/station/engineering/supermatter/room) +"haF" = ( +/obj/effect/spawner/random/structure/crate, +/obj/effect/spawner/random/clothing/costume, +/obj/effect/spawner/random/engineering/flashlight, +/turf/open/floor/plating, +/area/station/maintenance/department/medical) +"haH" = ( +/obj/machinery/door/poddoor/shutters{ + id = "secmechbay"; + name = "Security Mech Bay Shutters" + }, +/obj/machinery/button/door/directional/west{ + id = "secmechbay"; + name = "Security Mech Garage Door Controls"; + req_access = list("security") + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/caution/stand_clear, +/turf/open/floor/iron/dark, +/area/station/security/mechbay) +"haQ" = ( +/obj/machinery/duct, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/machinery/bluespace_vendor/directional/south, +/turf/open/floor/iron, +/area/station/commons/locker) +"hbb" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/obj/structure/railing{ + dir = 5 + }, +/turf/open/floor/engine, +/area/station/hallway/secondary/entry) +"hbf" = ( +/obj/effect/spawner/structure/window, +/turf/open/floor/plating, +/area/station/commons/storage/primary) +"hbh" = ( +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 1 + }, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/turf/open/floor/iron, +/area/station/security) +"hbk" = ( +/obj/effect/turf_decal/sand/plating, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/spawner/random/trash/mess, +/turf/open/floor/plating, +/area/station/maintenance/central/greater) +"hbo" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 4 + }, +/obj/effect/spawner/random/engineering/tracking_beacon, +/obj/effect/landmark/event_spawn, +/turf/open/floor/iron/white, +/area/station/medical/treatment_center) +"hbq" = ( +/obj/item/extinguisher, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/turf/open/floor/plating, +/area/station/maintenance/department/engine) +"hbr" = ( +/obj/effect/turf_decal/siding/white{ + dir = 6 + }, +/obj/effect/decal/cleanable/blood/tracks, +/turf/open/floor/iron/white/small, +/area/station/science/lobby) +"hbw" = ( +/obj/effect/spawner/structure/window, +/turf/open/floor/plating, +/area/station/security/prison/garden) +"hbG" = ( +/obj/structure/sign/warning/radiation/rad_area/directional/west, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 10 + }, +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/engineering/main) +"hbH" = ( +/obj/machinery/portable_atmospherics/canister/nitrogen, +/turf/open/floor/iron/white/smooth_large, +/area/station/science/ordnance/storage) +"hbM" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/curtain/cloth/fancy/mechanical{ + id = "court" + }, +/turf/open/floor/plating, +/area/station/security/courtroom) +"hbQ" = ( +/obj/structure/table/wood, +/obj/item/clothing/under/costume/maid, +/obj/item/clothing/head/costume/kitty, +/obj/item/clothing/neck/petcollar, +/obj/effect/decal/cleanable/blood/old, +/turf/open/floor/plating, +/area/station/maintenance/central/greater) +"hbV" = ( +/turf/open/floor/iron/dark, +/area/station/science/xenobiology) +"hce" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/medical/morgue) +"hcm" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/carpet, +/area/station/service/theater) +"hcp" = ( +/obj/structure/closet/crate, +/obj/effect/turf_decal/delivery, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/power/apc/auto_name/directional/south, +/obj/item/radio/intercom/directional/west, +/obj/structure/cable, +/obj/item/stock_parts/servo, +/obj/item/stock_parts/servo, +/obj/item/stock_parts/servo, +/obj/item/stock_parts/servo, +/obj/item/stock_parts/micro_laser/high, +/obj/item/stock_parts/micro_laser/high, +/obj/item/stock_parts/micro_laser/high, +/obj/item/stock_parts/micro_laser/high, +/obj/item/stock_parts/capacitor, +/turf/open/floor/iron/dark, +/area/station/engineering/storage/tcomms) +"hcQ" = ( +/obj/structure/table/reinforced/rglass, +/obj/item/paper_bin{ + pixel_x = -3; + pixel_y = 7 + }, +/obj/item/pen{ + pixel_x = -3; + pixel_y = 8 + }, +/obj/effect/turf_decal/tile/red/anticorner/contrasted{ + dir = 8 + }, +/obj/machinery/recharger{ + pixel_x = 12 + }, +/turf/open/floor/iron/dark, +/area/station/security/office) +"hcU" = ( +/obj/machinery/door/airlock/atmos{ + name = "Incinerator" + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, +/obj/structure/cable/multilayer/connected, +/obj/machinery/door/firedoor, +/turf/open/floor/iron/dark, +/area/station/maintenance/disposal/incinerator) +"hdd" = ( +/obj/effect/turf_decal/tile/yellow{ + dir = 4 + }, +/obj/machinery/atmospherics/components/binary/temperature_gate{ + dir = 1; + inverted = 1; + target_temperature = 1000 + }, +/turf/open/floor/iron/dark/corner{ + dir = 1 + }, +/area/station/engineering/atmos) +"hdq" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/security/warden) +"hdD" = ( +/obj/effect/turf_decal/tile/blue, +/obj/effect/turf_decal/tile/green{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/service/hydroponics) +"hdK" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/machinery/newscaster/directional/west, +/obj/machinery/holopad, +/obj/effect/turf_decal/box, +/turf/open/floor/wood, +/area/station/command/heads_quarters/qm) +"hdN" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/mapping_helpers/burnt_floor, +/obj/effect/decal/cleanable/blood/old, +/turf/open/floor/plating, +/area/station/maintenance/central/greater) +"hdO" = ( +/obj/structure/chair/plastic{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/sign/poster/contraband/random/directional/south, +/turf/open/floor/iron/grimy, +/area/station/maintenance/central/lesser) +"hef" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/west, +/obj/effect/landmark/blobstart, +/turf/open/floor/iron, +/area/station/service/janitor) +"heh" = ( +/obj/machinery/atmospherics/pipe/multiz/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/multiz/scrubbers/visible/layer2, +/turf/open/floor/plating, +/area/station/maintenance/central/lesser) +"hen" = ( +/turf/open/space/openspace, +/area/space/nearstation) +"hep" = ( +/obj/machinery/door/airlock/maintenance_hatch, +/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, +/obj/effect/mapping_helpers/airlock/unres, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/commons/fitness/recreation) +"heu" = ( +/turf/open/floor/iron, +/area/station/security/prison) +"hex" = ( +/obj/effect/turf_decal/trimline/blue/filled/corner{ + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/iron/white/smooth_large, +/area/station/medical/medbay/central) +"heI" = ( +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/obj/machinery/camera/autoname/directional/south, +/turf/open/floor/wood, +/area/station/service/lawoffice) +"heO" = ( +/obj/structure/falsewall/reinforced, +/turf/open/floor/plating, +/area/station/engineering/lobby) +"heP" = ( +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/blood/tracks{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/plating, +/area/station/maintenance/department/engine) +"hfd" = ( +/obj/machinery/atmospherics/pipe/bridge_pipe/cyan/visible, +/obj/machinery/atmospherics/pipe/bridge_pipe/green/visible{ + dir = 4 + }, +/obj/effect/turf_decal/tile/yellow{ + dir = 8 + }, +/turf/open/floor/iron/dark/corner{ + dir = 1 + }, +/area/station/engineering/atmos) +"hfm" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/aisat/foyer) +"hfn" = ( +/obj/structure/chair/office{ + dir = 1 + }, +/obj/machinery/light/small/broken/directional/south, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/iron/grimy, +/area/station/security/detectives_office/private_investigators_office) +"hfp" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/engineering/atmos) +"hfv" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/decal/cleanable/dirt/dust, +/obj/item/trash/chips, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) +"hfx" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/security/prison) +"hfB" = ( +/obj/structure/window/reinforced/spawner/directional/north, +/obj/structure/flora/bush/fullgrass/style_random, +/turf/open/floor/grass, +/area/station/science/research) +"hfD" = ( +/obj/structure/flora/coconuts, +/turf/open/floor/grass, +/area/station/science/genetics) +"hfH" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/ai_monitored/turret_protected/aisat_interior) +"hfQ" = ( +/obj/structure/railing{ + dir = 8 + }, +/obj/effect/spawner/random/vending/colavend, +/obj/machinery/camera/autoname/directional/north, +/turf/open/floor/iron, +/area/station/hallway/secondary/exit/departure_lounge) +"hfS" = ( +/obj/machinery/door/airlock{ + id_tag = "Cabin5"; + name = "Cabin 3" + }, +/obj/effect/turf_decal/siding/wood/end, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/wood/tile, +/area/station/commons/dorms) +"hfU" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/green/visible, +/obj/effect/turf_decal/stripes{ + dir = 4 + }, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"hfX" = ( +/obj/structure/window/reinforced/spawner/directional/east, +/obj/machinery/light/directional/south, +/turf/open/floor/engine, +/area/station/science/xenobiology) +"hgi" = ( +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/cargo/storage) +"hgl" = ( +/obj/structure/railing/corner{ + dir = 1 + }, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"hgB" = ( +/obj/machinery/door/airlock/maintenance/external, +/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, +/obj/structure/barricade/wooden, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 8 + }, +/turf/open/floor/plating, +/area/station/science/lobby) +"hgN" = ( +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/west, +/turf/open/floor/iron/dark/side{ + dir = 8 + }, +/area/station/maintenance/radshelter/medical) +"hgS" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/junction/flip{ + dir = 1 + }, +/turf/open/floor/plating, +/area/station/maintenance/department/medical) +"hgV" = ( +/obj/structure/lattice, +/turf/open/misc/asteroid/airless, +/area/space/nearstation) +"hhC" = ( +/obj/structure/railing{ + dir = 5 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/turf/open/floor/iron/dark/side{ + dir = 5 + }, +/area/station/command/meeting_room) +"hhH" = ( +/obj/structure/table/reinforced/rglass, +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/item/book/manual/wiki/medicine, +/obj/item/clothing/neck/stethoscope{ + pixel_y = 4 + }, +/turf/open/floor/iron/white, +/area/station/medical/treatment_center) +"hhU" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/structure/broken_flooring/side/directional/east, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/maintenance/central/greater) +"hhX" = ( +/turf/open/space/openspace, +/area/space) +"hhZ" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 4 + }, +/turf/open/floor/carpet, +/area/station/service/chapel/funeral) +"hii" = ( +/obj/machinery/door/poddoor/shutters/window/preopen{ + name = "Security Shutters"; + id = "xbprotect3"; + dir = 8 + }, +/obj/effect/turf_decal/caution/stand_clear{ + dir = 4 + }, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark/textured_large, +/area/station/science/xenobiology) +"him" = ( +/obj/machinery/shower/directional/east, +/turf/open/floor/iron/showroomfloor, +/area/station/cargo/storage) +"his" = ( +/obj/effect/decal/cleanable/greenglow/radioactive, +/obj/machinery/light/small/directional/west, +/turf/open/misc/asteroid, +/area/station/asteroid) +"hiO" = ( +/obj/structure/table, +/obj/item/storage/toolbox/emergency, +/obj/effect/spawner/random/maintenance/three, +/turf/open/floor/iron, +/area/station/maintenance/department/medical/central) +"hiW" = ( +/obj/structure/chair{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/wood, +/area/station/service/lawoffice) +"hjo" = ( +/obj/effect/turf_decal/arrows{ + dir = 8; + pixel_x = 7 + }, +/obj/structure/cable, +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/exit/departure_lounge) +"hjI" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/spawner/random/structure/closet_maintenance, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/plating, +/area/station/maintenance/port/lesser) +"hjJ" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/digital_clock/directional/west, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"hjU" = ( +/obj/structure/table, +/obj/item/toy/plush/pkplush, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/department/engine) +"hjW" = ( +/obj/structure/table/reinforced, +/obj/item/reagent_containers/cup/bottle/epinephrine{ + pixel_x = -4; + pixel_y = 12 + }, +/obj/item/reagent_containers/cup/bottle/multiver{ + pixel_x = 7; + pixel_y = 12 + }, +/obj/item/reagent_containers/dropper, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/yellow/filled/mid_joiner{ + dir = 4 + }, +/turf/open/floor/iron/white/smooth_edge{ + dir = 4 + }, +/area/station/medical/pharmacy) +"hkc" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/obj/effect/turf_decal/tile/purple/anticorner/contrasted, +/obj/machinery/camera/autoname/directional/south, +/obj/machinery/light_switch/directional/south, +/turf/open/floor/iron/white, +/area/station/science/lobby) +"hkm" = ( +/obj/machinery/door/airlock/medical, +/obj/effect/mapping_helpers/airlock/access/any/medical/maintenance, +/obj/effect/mapping_helpers/airlock/abandoned, +/obj/effect/mapping_helpers/burnt_floor, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/maintenance/department/medical) +"hkt" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/structure/chair/comfy/black, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/turf/open/floor/wood, +/area/station/service/library) +"hkG" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/tank/oxygen{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/department/science) +"hld" = ( +/obj/structure/cable, +/obj/machinery/firealarm/directional/east, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/catwalk_floor/flat_white, +/area/station/science/lab) +"hle" = ( +/obj/machinery/light/directional/south, +/obj/structure/table/glass, +/obj/item/stack/sheet/glass, +/obj/item/assembly/timer, +/obj/effect/turf_decal/tile/purple/half/contrasted, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/station/science/lobby) +"hlh" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/white/herringbone, +/area/station/science/breakroom) +"hli" = ( +/obj/machinery/door/airlock/maintenance_hatch{ + name = "Xenobiology Maintenance" + }, +/obj/structure/cable, +/obj/effect/mapping_helpers/airlock/access/all/science/xenobio, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/science/xenobiology) +"hlF" = ( +/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/engineering/atmos) +"hmb" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"hmg" = ( +/obj/machinery/requests_console/directional/north{ + name = "Bar Requests Console"; + department = "Bar" + }, +/obj/effect/mapping_helpers/requests_console/supplies, +/obj/machinery/disposal/bin, +/obj/effect/turf_decal/tile/dark_red/opposingcorners, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/obj/item/radio/intercom/directional/west, +/obj/effect/mapping_helpers/requests_console/assistance, +/turf/open/floor/iron/dark, +/area/station/service/bar) +"hmj" = ( +/obj/structure/table/reinforced, +/obj/item/storage/box/lights/mixed, +/obj/item/stack/sheet/iron{ + amount = 30 + }, +/obj/item/radio{ + pixel_x = -5; + pixel_y = 5 + }, +/obj/item/stack/cable_coil, +/obj/machinery/light_switch/directional/north, +/turf/open/floor/iron, +/area/station/commons/storage/primary) +"hmk" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/chair/office{ + name = "grimy chair"; + dir = 1 + }, +/turf/open/floor/iron, +/area/station/maintenance/department/medical/central) +"hms" = ( +/obj/machinery/power/apc/auto_name/directional/west, +/obj/effect/turf_decal/siding/purple{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/science/robotics/mechbay) +"hmu" = ( +/obj/effect/turf_decal/siding/dark, +/obj/machinery/firealarm/directional/east, +/obj/machinery/door/firedoor/border_only, +/turf/open/floor/iron/dark/side{ + dir = 4 + }, +/area/station/command/corporate_showroom) +"hmv" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/landmark/event_spawn, +/turf/open/floor/iron/dark, +/area/station/service/cafeteria) +"hmw" = ( +/obj/effect/turf_decal/tile/brown/half/contrasted, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/cargo/lobby) +"hmz" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 6 + }, +/turf/open/floor/iron, +/area/station/engineering/lobby) +"hmA" = ( +/obj/structure/cable, +/obj/effect/turf_decal/sand/plating, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/turf/open/floor/plating, +/area/station/asteroid) +"hmF" = ( +/obj/structure/table/wood, +/obj/effect/turf_decal/sand/plating, +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/spawner/random/food_or_drink/booze{ + spawn_random_offset = 1 + }, +/turf/open/floor/plating, +/area/station/maintenance/central/greater) +"hmG" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/stripes/white/line{ + dir = 1 + }, +/obj/machinery/research/anomaly_refinery, +/turf/open/floor/iron/dark, +/area/station/science/ordnance/testlab) +"hna" = ( +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/aisat/teleporter) +"hnh" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/security/execution/education) +"hnu" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/main) +"hnw" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/tile/red/diagonal_edge, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/security/warden) +"hny" = ( +/obj/machinery/camera/autoname/directional/west, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"hnE" = ( +/obj/machinery/door/airlock/external{ + id_tag = "cap_ext" + }, +/obj/effect/mapping_helpers/airlock/access/all/command/captain, +/obj/effect/turf_decal/stripes/end{ + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/locked, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "capspace" + }, +/turf/open/floor/engine, +/area/station/command/heads_quarters/captain/private) +"hnJ" = ( +/obj/machinery/door/airlock/public/glass{ + name = "Lethal Armaments" + }, +/obj/effect/mapping_helpers/airlock/access/all/security/armory, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/security/armory) +"hnL" = ( +/obj/structure/tank_holder/extinguisher, +/obj/machinery/light/small/dim/directional/south, +/obj/effect/turf_decal/stripes{ + dir = 1 + }, +/turf/open/floor/iron/dark/textured_large, +/area/station/ai_monitored/turret_protected/aisat/foyer) +"hnY" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment, +/turf/open/floor/wood/parquet, +/area/station/service/theater) +"hoe" = ( +/obj/machinery/conveyor/auto{ + id = "bridgedeliver"; + dir = 8 + }, +/obj/structure/transit_tube/crossing, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating/airless, +/area/station/maintenance/department/science) +"hon" = ( +/obj/effect/turf_decal/tile/yellow{ + dir = 4 + }, +/turf/open/floor/iron/dark/corner{ + dir = 1 + }, +/area/station/engineering/atmos) +"hov" = ( +/turf/closed/wall, +/area/station/commons/storage/tools) +"hoD" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/spawner/random/structure/tank_holder, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"hoM" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on, +/turf/open/floor/engine, +/area/station/engineering/supermatter) +"hoQ" = ( +/obj/machinery/light/small/directional/north, +/obj/machinery/atmospherics/components/binary/valve/digital/on{ + dir = 4 + }, +/turf/open/floor/engine, +/area/station/engineering/supermatter) +"hoX" = ( +/obj/effect/turf_decal/tile/brown/half/contrasted, +/turf/open/floor/iron, +/area/station/cargo/storage) +"hpb" = ( +/obj/structure/railing, +/obj/machinery/door/firedoor/border_only, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wood, +/obj/structure/chair/wood{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/wood/tile, +/area/station/service/bar) +"hpB" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/structure/sign/directions/security/directional/west{ + dir = 1 + }, +/obj/structure/sign/directions/supply/directional/west{ + pixel_y = 8; + dir = 1 + }, +/obj/structure/sign/directions/science/directional/west{ + pixel_y = -8; + dir = 1 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"hpT" = ( +/obj/machinery/door/airlock/command{ + name = "Quartermaster's Office" + }, +/obj/effect/mapping_helpers/airlock/access/all/supply/qm, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 8 + }, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/carpet/red, +/area/station/command/heads_quarters/qm) +"hpV" = ( +/turf/open/floor/iron, +/area/station/security/office) +"hqd" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/turf/open/floor/iron/white, +/area/station/medical/chemistry/minisat) +"hqg" = ( +/obj/effect/turf_decal/stripes/full, +/turf/open/floor/engine, +/area/station/command/corporate_dock) +"hqj" = ( +/obj/machinery/door/airlock/atmos/glass{ + name = "Crystallizer Room" + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/tile/yellow/opposingcorners, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/iron/checker{ + dir = 1 + }, +/area/station/engineering/atmos/upper) +"hqk" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) +"hqw" = ( +/obj/structure/cable, +/turf/open/floor/carpet, +/area/station/security/detectives_office) +"hqz" = ( +/obj/effect/turf_decal/tile/neutral, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/sign/poster/official/random/directional/south, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"hqF" = ( +/obj/machinery/conveyor/auto/inverted{ + dir = 6; + id = "bridgedeliver" + }, +/turf/open/floor/plating/airless, +/area/station/maintenance/department/science) +"hqN" = ( +/obj/structure/window/spawner/directional/east, +/obj/structure/bed, +/obj/effect/turf_decal/tile/blue/anticorner/contrasted, +/obj/item/bedsheet, +/obj/effect/decal/cleanable/blood/old, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/light_switch/directional/south, +/turf/open/floor/iron/white, +/area/station/security/medical) +"hqO" = ( +/obj/effect/turf_decal/trimline/yellow/arrow_cw{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/spawner/random/trash/mess, +/turf/open/floor/iron, +/area/station/maintenance/department/medical/central) +"hrg" = ( +/obj/structure/broken_flooring/singular{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/mapping_helpers/broken_floor, +/obj/structure/rack, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"hri" = ( +/obj/machinery/mech_bay_recharge_port{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/circuit/green, +/area/station/science/robotics/mechbay) +"hrk" = ( +/obj/machinery/door/airlock/external{ + name = "Escape Pod Three"; + space_dir = 8 + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 8 + }, +/obj/effect/landmark/navigate_destination/dockescpod3, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"hrm" = ( +/obj/structure/toilet{ + dir = 1 + }, +/obj/effect/landmark/start/hangover, +/obj/effect/spawner/random/trash/graffiti{ + spawn_loot_chance = 50; + pixel_y = -32 + }, +/obj/machinery/light/small/dim/directional/east, +/obj/machinery/button/door/directional/west{ + normaldoorcontrol = 1; + specialfunctions = 4; + name = "privacy bolt control"; + id = "u4" + }, +/turf/open/floor/iron/freezer, +/area/station/commons/toilet/restrooms) +"hro" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/yellow/filled/line, +/obj/machinery/firealarm/directional/south, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/white, +/area/station/medical/chemistry/minisat) +"hrp" = ( +/obj/structure/closet/crate{ + name = "Surplus Communications Parts" + }, +/obj/effect/turf_decal/delivery, +/obj/effect/decal/cleanable/dirt/dust, +/obj/item/stock_parts/subspace/analyzer, +/obj/item/stock_parts/subspace/analyzer, +/obj/item/stock_parts/subspace/analyzer, +/obj/item/stock_parts/subspace/amplifier, +/obj/item/stock_parts/subspace/amplifier, +/obj/item/stock_parts/subspace/amplifier, +/obj/item/stock_parts/subspace/ansible, +/obj/item/stock_parts/subspace/ansible, +/obj/item/stock_parts/subspace/ansible, +/obj/item/stock_parts/subspace/crystal, +/obj/item/stock_parts/subspace/crystal, +/obj/item/stock_parts/subspace/crystal, +/obj/item/stock_parts/subspace/filter, +/obj/item/stock_parts/subspace/filter, +/obj/item/stock_parts/subspace/filter, +/obj/item/stock_parts/subspace/transmitter, +/obj/item/stock_parts/subspace/transmitter, +/obj/item/stock_parts/subspace/transmitter, +/obj/item/stock_parts/subspace/treatment, +/obj/item/stock_parts/subspace/treatment, +/obj/item/stock_parts/subspace/treatment, +/turf/open/floor/iron/dark, +/area/station/engineering/storage/tcomms) +"hru" = ( +/obj/effect/landmark/start/coroner, +/obj/effect/turf_decal/trimline/neutral/filled/warning{ + dir = 5 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/medical/morgue) +"hrA" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/junction{ + dir = 1 + }, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/engineering/lobby) +"hrI" = ( +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/engine, +/area/station/hallway/secondary/entry) +"hrM" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/obj/machinery/door/poddoor/preopen{ + id = "capshut" + }, +/turf/open/floor/plating, +/area/station/command/heads_quarters/captain/private) +"hrO" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 8 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/wood/parquet, +/area/station/service/theater) +"hrS" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/engineering/atmospherics_engine) +"hsb" = ( +/obj/structure/cable/multilayer/multiz, +/obj/item/assembly/mousetrap/armed, +/obj/machinery/camera/autoname/directional/north, +/turf/open/floor/plating, +/area/station/hallway/secondary/service) +"hsj" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/carpet/executive, +/area/station/command/corporate_showroom) +"hso" = ( +/obj/effect/turf_decal/tile/brown/half/contrasted, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/turf/open/floor/iron, +/area/station/cargo/storage) +"hsz" = ( +/obj/structure/cable, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/plating/airless, +/area/station/solars/starboard/fore) +"hsB" = ( +/obj/effect/turf_decal/stripes{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/command/bridge) +"hsE" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/turf_decal/tile/green/half{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/white/smooth_large, +/area/station/medical/virology) +"hsW" = ( +/turf/open/floor/iron/dark, +/area/station/cargo/drone_bay) +"htb" = ( +/obj/effect/landmark/start/hangover, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"htf" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"hth" = ( +/obj/structure/cable, +/obj/effect/turf_decal/tile/red/opposingcorners, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/security) +"htw" = ( +/obj/effect/spawner/random/structure/closet_empty/crate, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/plating, +/area/station/maintenance/central/lesser) +"htx" = ( +/obj/effect/landmark/event_spawn, +/obj/machinery/shower/directional/south{ + name = "emergency shower" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/obj/effect/turf_decal/trimline/dark_blue/end, +/turf/open/floor/iron/textured, +/area/station/engineering/atmos) +"htJ" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/machinery/airalarm/directional/west, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/carpet, +/area/station/service/chapel) +"htN" = ( +/obj/structure/chair/office{ + dir = 4 + }, +/obj/effect/landmark/event_spawn, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/carpet/purple, +/area/station/service/library) +"htV" = ( +/obj/machinery/door/airlock/external, +/obj/effect/mapping_helpers/airlock/cyclelink_helper, +/obj/effect/mapping_helpers/airlock/access/all/medical/chemistry, +/obj/effect/decal/cleanable/blood/tracks, +/turf/open/floor/plating, +/area/station/medical/chemistry/minisat) +"hue" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/structure/closet/masks, +/obj/structure/window/spawner/directional/west, +/obj/machinery/light/directional/north, +/obj/effect/landmark/start/hangover/closet, +/turf/open/floor/iron, +/area/station/commons/fitness/recreation) +"huj" = ( +/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible{ + dir = 9 + }, +/turf/open/floor/iron, +/area/station/engineering/atmos) +"hun" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/effect/turf_decal/siding/wood/corner, +/obj/item/radio/intercom/directional/north, +/obj/effect/landmark/event_spawn, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/wood, +/area/station/service/library) +"huv" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"hux" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 9 + }, +/obj/item/kirbyplants/random, +/turf/open/floor/iron, +/area/station/engineering/main) +"huK" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/wood/parquet, +/area/station/cargo/boutique) +"huP" = ( +/obj/structure/cable, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/engineering/main) +"huX" = ( +/obj/structure/closet, +/obj/effect/spawner/random/maintenance/two, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/dark, +/area/station/maintenance/department/engine) +"hvf" = ( +/obj/effect/turf_decal/tile/dark_red/anticorner/contrasted{ + dir = 1 + }, +/obj/effect/turf_decal/arrows{ + dir = 4; + pixel_x = -15 + }, +/turf/open/floor/iron, +/area/station/cargo/storage) +"hvj" = ( +/obj/effect/decal/cleanable/blood/old{ + icon_state = "gib1-old" + }, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/security/execution/education) +"hvl" = ( +/obj/structure/lattice/catwalk, +/obj/structure/railing/corner, +/turf/open/openspace, +/area/station/engineering/supermatter/room) +"hvt" = ( +/obj/effect/turf_decal/tile/dark_blue/half/contrasted{ + dir = 8 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/hallway/secondary/command) +"hvw" = ( +/obj/effect/turf_decal/sand/plating, +/obj/structure/disposalpipe/trunk/multiz/down, +/turf/open/floor/plating, +/area/station/asteroid) +"hvA" = ( +/obj/structure/transport/linear/public{ + icon = 'icons/obj/smooth_structures/catwalk.dmi'; + base_icon_state = "catwalk"; + icon_state = "catwalk-78" + }, +/obj/effect/spawner/random/structure/closet_empty/crate, +/turf/open/floor/plating/elevatorshaft, +/area/station/cargo/storage) +"hvD" = ( +/obj/structure/broken_flooring/pile{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/cable, +/obj/structure/sign/poster/contraband/random/directional/north, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/hallway/primary/central) +"hvL" = ( +/obj/effect/turf_decal/siding/white{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/turf/open/floor/iron/herringbone, +/area/station/hallway/primary/central) +"hvP" = ( +/obj/machinery/light/cold/directional/south, +/obj/effect/turf_decal/trimline/blue/filled/line, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/white, +/area/station/medical/treatment_center) +"hvQ" = ( +/obj/structure/cable, +/obj/effect/turf_decal/tile/neutral, +/turf/open/floor/iron, +/area/station/commons/fitness/recreation) +"hvT" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"hvV" = ( +/obj/machinery/nuclearbomb/selfdestruct, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/command/nuke_storage) +"hwb" = ( +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/carpet/purple, +/area/station/service/library) +"hwc" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/cable/multilayer/multiz, +/obj/effect/turf_decal/stripes{ + dir = 10 + }, +/turf/open/floor/plating, +/area/station/command/bridge) +"hwi" = ( +/obj/structure/chair{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured, +/area/station/security/interrogation) +"hwk" = ( +/obj/machinery/duct, +/obj/machinery/door/airlock{ + name = "Kitchen" + }, +/obj/effect/mapping_helpers/airlock/access/all/service/kitchen, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/textured_large, +/area/station/service/kitchen) +"hwP" = ( +/turf/open/floor/iron/dark/telecomms, +/area/station/tcommsat/server) +"hwW" = ( +/obj/structure/chair/stool/directional/east, +/turf/open/misc/asteroid, +/area/station/maintenance/central/greater) +"hxg" = ( +/obj/machinery/netpod, +/obj/structure/window/reinforced/spawner/directional/west, +/obj/structure/cable, +/obj/structure/sign/poster/contraband/space_cola/directional/north, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/cargo/bitrunning/den) +"hxB" = ( +/obj/effect/mapping_helpers/airlock/access/all/security/brig, +/obj/machinery/door/airlock/security/glass{ + name = "Prison Wing" + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "perma-entrance" + }, +/turf/open/floor/iron, +/area/station/security/execution/transfer) +"hye" = ( +/obj/effect/spawner/random/structure/closet_empty/crate, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/science/xenobiology) +"hyk" = ( +/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/visible{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_half{ + dir = 1 + }, +/area/station/science/xenobiology) +"hyp" = ( +/obj/machinery/door/airlock/medical/glass{ + name = "Medbay Storage" + }, +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/access/any/medical/general, +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron/white, +/area/station/medical/storage) +"hyM" = ( +/obj/structure/closet, +/obj/item/food/grown/banana, +/obj/item/food/grown/banana, +/obj/item/food/grown/banana, +/obj/item/food/grown/banana, +/obj/item/food/grown/banana, +/turf/open/misc/asteroid, +/area/station/asteroid) +"hyS" = ( +/obj/effect/spawner/random/maintenance, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/plating, +/area/station/maintenance/central/lesser) +"hyX" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"hzg" = ( +/obj/structure/lattice/catwalk, +/obj/structure/railing, +/obj/structure/cable/layer3, +/obj/machinery/door/firedoor/border_only, +/turf/open/openspace, +/area/station/engineering/atmos) +"hzh" = ( +/obj/machinery/hydroponics/constructable, +/obj/machinery/newscaster/directional/south, +/turf/open/floor/iron/large, +/area/station/service/hydroponics/garden) +"hzn" = ( +/obj/machinery/power/port_gen/pacman/pre_loaded, +/obj/effect/mapping_helpers/burnt_floor, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"hzx" = ( +/obj/structure/railing/corner{ + dir = 1 + }, +/obj/structure/closet/secure_closet/injection{ + name = "educational injections locker" + }, +/obj/effect/turf_decal/tile/red/anticorner/contrasted{ + dir = 4 + }, +/obj/machinery/button/flasher{ + id = "executionflash"; + pixel_y = 32 + }, +/obj/machinery/airalarm/directional/east, +/turf/open/floor/iron/dark, +/area/station/security/execution/education) +"hzC" = ( +/obj/structure/altar_of_gods, +/obj/effect/turf_decal/siding/dark{ + dir = 8 + }, +/obj/item/book/bible, +/turf/open/floor/wood/tile, +/area/station/service/chapel) +"hzF" = ( +/turf/closed/wall, +/area/station/hallway/secondary/exit/departure_lounge) +"hAa" = ( +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/aisat/foyer) +"hAd" = ( +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 8 + }, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/security/office) +"hAg" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/carpet/executive, +/area/station/command/heads_quarters/captain/private) +"hAx" = ( +/obj/effect/decal/cleanable/blood/splatter/over_window, +/turf/closed/wall, +/area/station/science/lobby) +"hAA" = ( +/obj/structure/chair/sofa/corp/right{ + desc = "Looks like someone threw it out. Covered in donut crumbs."; + name = "couch" + }, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 1 + }, +/obj/machinery/firealarm/directional/north, +/turf/open/floor/iron/white, +/area/station/medical/paramedic) +"hAL" = ( +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/science/xenobiology) +"hAV" = ( +/obj/structure/table/wood, +/obj/item/flashlight/flare/candle{ + pixel_y = 10; + pixel_x = 1 + }, +/turf/open/floor/iron/chapel{ + dir = 4 + }, +/area/station/service/chapel) +"hBi" = ( +/obj/structure/reagent_dispensers/watertank, +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 4 + }, +/obj/machinery/camera/autoname/directional/east, +/turf/open/floor/iron, +/area/station/commons/storage/tools) +"hBD" = ( +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/security) +"hBF" = ( +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/science/xenobiology) +"hBX" = ( +/obj/machinery/computer/records/security, +/obj/effect/turf_decal/tile/green/anticorner/contrasted{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/command/bridge) +"hBZ" = ( +/obj/structure/cable, +/obj/effect/spawner/random/structure/grille, +/turf/open/floor/plating, +/area/station/maintenance/central/lesser) +"hCb" = ( +/obj/structure/bookcase{ + name = "Forbidden Knowledge" + }, +/turf/open/floor/engine/cult, +/area/station/service/library) +"hCs" = ( +/turf/closed/wall, +/area/station/service/hydroponics) +"hCt" = ( +/obj/machinery/door/airlock/security/glass{ + name = "Departure Lounge Security Post" + }, +/obj/effect/mapping_helpers/airlock/access/all/security/general, +/obj/effect/turf_decal/tile/red/fourcorners, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/hallway/secondary/exit/departure_lounge) +"hCv" = ( +/obj/machinery/mech_bay_recharge_port{ + dir = 2 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/cable, +/turf/open/floor/circuit, +/area/station/hallway/primary/central) +"hCJ" = ( +/obj/structure/railing{ + dir = 8 + }, +/obj/effect/turf_decal/tile/brown/anticorner/contrasted{ + dir = 8 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/obj/structure/cable, +/obj/machinery/camera/autoname/directional/south, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/turf/open/floor/iron, +/area/station/cargo/storage) +"hCK" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/effect/turf_decal/tile/bar/opposingcorners, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/service/bar) +"hCN" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/obj/machinery/airalarm/directional/north, +/turf/open/floor/plating, +/area/station/maintenance/department/medical) +"hCR" = ( +/obj/machinery/door/airlock/medical{ + name = "Chemical Storage" + }, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + color = "#000000" + }, +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 1 + }, +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/access/all/medical/pharmacy, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/station/medical/pharmacy) +"hCS" = ( +/turf/closed/wall, +/area/station/cargo/warehouse) +"hCT" = ( +/obj/effect/turf_decal/sand/plating, +/obj/structure/closet/secure_closet/freezer/kitchen/maintenance, +/obj/effect/spawner/random/food_or_drink/donkpockets, +/turf/open/floor/plating, +/area/station/maintenance/central/greater) +"hDo" = ( +/turf/closed/wall/r_wall, +/area/station/security/evidence) +"hDJ" = ( +/obj/machinery/door/poddoor/shutters{ + dir = 4; + id = "ordauxgarage" + }, +/obj/effect/turf_decal/sand/plating, +/obj/effect/turf_decal/stripes/asteroid/end{ + dir = 1 + }, +/turf/open/floor/plating, +/area/station/science/ordnance) +"hDK" = ( +/obj/effect/turf_decal/tile/neutral, +/obj/machinery/camera/autoname/directional/south, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"hDV" = ( +/obj/effect/turf_decal/tile/yellow/diagonal_centre, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/commons/storage/tools) +"hDX" = ( +/obj/structure/table/wood, +/obj/effect/turf_decal/siding/dark{ + dir = 8 + }, +/obj/item/flashlight/lantern{ + pixel_y = 7 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/wood/tile, +/area/station/service/chapel) +"hEi" = ( +/turf/closed/wall/r_wall, +/area/station/command/heads_quarters/rd) +"hEu" = ( +/obj/structure/chair/wood{ + dir = 1 + }, +/obj/effect/landmark/start/mime, +/turf/open/floor/carpet, +/area/station/service/theater) +"hEw" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/catwalk_floor/flat_white, +/area/station/science/lab) +"hED" = ( +/turf/closed/wall/r_wall, +/area/station/ai_monitored/security/armory) +"hEI" = ( +/obj/structure/cable, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/turf/open/floor/iron, +/area/station/security/breakroom) +"hER" = ( +/obj/structure/railing, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable/multilayer/multiz, +/turf/open/floor/plating, +/area/station/maintenance/disposal) +"hEV" = ( +/obj/machinery/chem_heater/withbuffer, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 4 + }, +/obj/machinery/newscaster/directional/east, +/turf/open/floor/iron/white, +/area/station/medical/chemistry) +"hFa" = ( +/obj/machinery/light/small/directional/east, +/obj/machinery/atmospherics/components/tank/plasma, +/turf/open/misc/asteroid, +/area/station/maintenance/disposal/incinerator) +"hFA" = ( +/obj/machinery/light/small/directional/south, +/obj/effect/turf_decal/stripes/asteroid/line{ + dir = 1 + }, +/turf/open/misc/asteroid, +/area/station/maintenance/port/lesser) +"hFF" = ( +/obj/machinery/atmospherics/components/binary/pump, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/engineering/atmos) +"hFO" = ( +/obj/machinery/power/apc/auto_name/directional/north, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/commons/dorms) +"hFY" = ( +/obj/effect/turf_decal/tile/purple{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/turf/open/floor/iron/white, +/area/station/science/lobby) +"hGh" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/iron/chapel{ + dir = 1 + }, +/area/station/service/chapel) +"hGo" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/chapel{ + dir = 8 + }, +/area/station/service/chapel) +"hGy" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/blood/tracks{ + dir = 4 + }, +/obj/item/ammo_casing/a357/spent, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/cargo/warehouse/upper) +"hGB" = ( +/obj/effect/turf_decal/tile/red{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/fore) +"hGE" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"hGU" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/carpet/purple, +/area/station/service/library) +"hGV" = ( +/obj/structure/railing, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"hGZ" = ( +/obj/structure/cable/multilayer/multiz, +/obj/machinery/light/small/dim/directional/west, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/ai_monitored/command/storage/satellite) +"hHa" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/cobweb/cobweb2, +/obj/machinery/button/door/directional/north{ + id = "secwarehouse"; + req_access = list("shipping") + }, +/obj/structure/closet/crate/preopen, +/turf/open/floor/iron, +/area/station/cargo/warehouse/upper) +"hHj" = ( +/obj/effect/landmark/start/medical_doctor, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 1 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/medical/treatment_center) +"hHw" = ( +/turf/closed/wall/r_wall, +/area/station/security/prison/shower) +"hHx" = ( +/obj/machinery/drone_dispenser, +/turf/open/floor/plating, +/area/station/maintenance/port/lesser) +"hHA" = ( +/obj/machinery/status_display/ai/directional/north, +/turf/open/floor/iron/stairs/left{ + dir = 8; + color = "#795C32" + }, +/area/station/security/courtroom) +"hHF" = ( +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 4 + }, +/obj/structure/chair{ + dir = 8 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/station/security/brig/entrance) +"hHJ" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/sand/plating, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"hHL" = ( +/obj/machinery/power/apc/auto_name/directional/south, +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/port/greater) +"hHW" = ( +/obj/structure/table, +/obj/item/book/manual/wiki/engineering_guide{ + pixel_y = 7; + pixel_x = -6 + }, +/obj/item/pen{ + pixel_x = 7; + pixel_y = 6 + }, +/obj/item/clothing/head/utility/welding{ + pixel_y = 1 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/department/science) +"hIq" = ( +/obj/machinery/door/airlock/medical/glass{ + name = "Reception" + }, +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/access/any/medical/general, +/obj/effect/turf_decal/trimline/blue/filled/line, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/station/medical/paramedic) +"hIv" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"hIV" = ( +/obj/machinery/recharge_station, +/obj/effect/turf_decal/siding/purple{ + dir = 1 + }, +/obj/structure/window/spawner/directional/north, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/science/robotics/mechbay) +"hJo" = ( +/obj/structure/closet/emcloset, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"hJs" = ( +/obj/machinery/conveyor/auto{ + id = "bridgedeliver"; + dir = 8 + }, +/turf/open/floor/plating/airless, +/area/station/maintenance/department/science) +"hJU" = ( +/obj/structure/chair/wood, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/turf/open/floor/carpet, +/area/station/service/chapel/funeral) +"hKB" = ( +/obj/structure/stairs/south, +/turf/open/floor/iron, +/area/station/hallway/secondary/exit/departure_lounge) +"hKM" = ( +/obj/machinery/door/airlock/security/glass{ + name = "Prison Wing" + }, +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/access/all/security/armory, +/obj/effect/turf_decal/tile/red/half/contrasted, +/turf/open/floor/iron, +/area/station/security/warden) +"hKN" = ( +/obj/machinery/portable_atmospherics/canister/carbon_dioxide, +/obj/effect/turf_decal/bot, +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/obj/machinery/light/directional/north, +/turf/open/floor/iron/dark/textured_large, +/area/station/science/xenobiology) +"hKU" = ( +/obj/machinery/computer/exoscanner_control{ + dir = 8 + }, +/turf/open/floor/iron/textured, +/area/station/cargo/drone_bay) +"hKX" = ( +/obj/effect/landmark/start/hangover, +/turf/open/floor/iron, +/area/station/commons/locker) +"hLj" = ( +/obj/machinery/atmospherics/pipe/smart/manifold/purple/visible{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/engineering/atmos) +"hLq" = ( +/obj/effect/turf_decal/delivery, +/obj/effect/turf_decal/stripes{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/engineering/supermatter/room) +"hLw" = ( +/obj/effect/turf_decal/trimline/blue/filled/line, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/station/medical/exam_room) +"hLA" = ( +/obj/machinery/smartfridge/extract/preloaded, +/turf/open/floor/iron/white/textured_large, +/area/station/science/xenobiology) +"hLG" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/command/bridge) +"hLP" = ( +/obj/machinery/camera/autoname/directional/east{ + network = list("ss13","rd","xeno") + }, +/obj/effect/turf_decal/siding/purple{ + dir = 1 + }, +/turf/open/floor/iron/white/smooth_corner{ + dir = 8 + }, +/area/station/science/xenobiology) +"hLR" = ( +/obj/effect/mapping_helpers/burnt_floor, +/obj/structure/sink/directional/west, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/maintenance/department/medical) +"hMa" = ( +/obj/structure/chair{ + dir = 1 + }, +/obj/item/restraints/handcuffs, +/obj/effect/decal/cleanable/blood/old, +/obj/effect/turf_decal/tile/red/half/contrasted, +/obj/machinery/light/dim/directional/south, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/security/execution/education) +"hME" = ( +/turf/closed/wall, +/area/station/security/prison/work) +"hMM" = ( +/obj/machinery/light_switch/directional/north, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/wood/parquet, +/area/station/service/library) +"hNg" = ( +/obj/structure/chair, +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/turf/open/floor/plating/airless, +/area/station/science/ordnance/bomb) +"hNh" = ( +/turf/closed/wall/r_wall, +/area/station/maintenance/department/bridge) +"hNC" = ( +/obj/structure/transport/linear/public{ + icon = 'icons/obj/smooth_structures/catwalk.dmi'; + base_icon_state = "catwalk"; + icon_state = "catwalk-4" + }, +/turf/open/openspace, +/area/station/ai_monitored/turret_protected/aisat_interior) +"hNG" = ( +/obj/effect/turf_decal/siding/green, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/commons/storage/art) +"hNN" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/airalarm/directional/west, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/white, +/area/station/medical/chemistry) +"hNP" = ( +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/mapping_helpers/airlock/access/all/science/xenobio, +/obj/machinery/door/airlock/research/glass{ + name = "Secure Pen" + }, +/obj/machinery/door/poddoor/preopen{ + id = "Xenolab"; + name = "Test Chamber Blast Door" + }, +/obj/effect/turf_decal/bot, +/obj/effect/decal/cleanable/blood/footprints{ + dir = 8 + }, +/turf/open/floor/engine, +/area/station/science/xenobiology) +"hOa" = ( +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/plating, +/area/station/science/auxlab/firing_range) +"hOb" = ( +/obj/machinery/door/airlock/command{ + name = "Bridge" + }, +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/access/all/command/general, +/turf/open/floor/iron/dark/side, +/area/station/command/bridge) +"hOh" = ( +/obj/structure/table/glass, +/obj/item/folder/white{ + pixel_x = 4; + pixel_y = -3 + }, +/obj/item/book/manual/wiki/infections, +/obj/item/stack/sheet/mineral/plasma, +/obj/item/stack/sheet/mineral/plasma, +/obj/item/stack/sheet/mineral/plasma, +/obj/effect/turf_decal/tile/green/half/contrasted{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/station/medical/virology) +"hOn" = ( +/obj/structure/closet/emcloset, +/obj/structure/sign/poster/official/random/directional/east, +/turf/open/floor/iron/textured, +/area/station/hallway/primary/central) +"hOD" = ( +/obj/structure/table, +/obj/item/kitchen/rollingpin, +/turf/open/floor/iron/kitchen, +/area/station/service/kitchen) +"hOR" = ( +/obj/structure/stairs/east, +/turf/open/floor/iron/stairs, +/area/station/command/heads_quarters/qm) +"hPb" = ( +/obj/structure/cable, +/obj/effect/turf_decal/tile/green/anticorner/contrasted{ + dir = 8 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/white/smooth_large, +/area/station/medical/virology) +"hPg" = ( +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/solars/port/fore) +"hPk" = ( +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/obj/effect/turf_decal/tile/green{ + dir = 4 + }, +/obj/machinery/light_switch/directional/north, +/turf/open/floor/iron, +/area/station/service/hydroponics) +"hPp" = ( +/obj/structure/table/glass, +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/machinery/light_switch/directional/west, +/obj/item/wrench/medical, +/turf/open/floor/iron/white, +/area/station/medical/treatment_center) +"hPs" = ( +/obj/machinery/atmospherics/components/trinary/mixer/airmix{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/engineering/atmos) +"hPw" = ( +/turf/open/floor/iron/stairs/right{ + dir = 8 + }, +/area/station/science/research) +"hPx" = ( +/obj/structure/table, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt/dust, +/obj/item/reagent_containers/cup/bottle/welding_fuel{ + pixel_y = 7 + }, +/obj/item/reagent_containers/cup/bottle/welding_fuel{ + pixel_x = -7 + }, +/obj/item/reagent_containers/cup/bottle/welding_fuel{ + pixel_x = 7 + }, +/obj/machinery/light/cold/dim/directional/north, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/aisat/uppernorth) +"hPF" = ( +/obj/machinery/power/apc/auto_name/directional/east, +/obj/structure/closet/crate/trashcart, +/obj/effect/spawner/random/trash/garbage, +/obj/effect/spawner/random/contraband/prison, +/obj/structure/cable, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/security/prison/safe) +"hPH" = ( +/obj/effect/landmark/start/hangover, +/turf/open/floor/iron/white, +/area/station/science/lobby) +"hPP" = ( +/obj/machinery/camera/autoname/directional/east, +/turf/open/floor/wood, +/area/station/service/library) +"hPS" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 1 + }, +/turf/open/floor/iron/white, +/area/station/hallway/secondary/entry) +"hPW" = ( +/obj/effect/turf_decal/tile/red/opposingcorners, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/security/brig/entrance) +"hQg" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/medical/exam_room) +"hQh" = ( +/obj/effect/turf_decal/tile/neutral/half{ + dir = 8 + }, +/turf/open/floor/iron/edge{ + dir = 8 + }, +/area/station/hallway/secondary/exit/departure_lounge) +"hQj" = ( +/obj/effect/landmark/event_spawn, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron/showroomfloor, +/area/station/cargo/storage) +"hQm" = ( +/turf/open/floor/iron/stairs/left{ + dir = 4 + }, +/area/station/engineering/main) +"hQq" = ( +/obj/effect/turf_decal/siding/purple{ + dir = 1 + }, +/turf/open/floor/iron/white, +/area/station/science/ordnance/testlab) +"hQu" = ( +/obj/effect/turf_decal/bot_white, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/iron, +/area/station/cargo/storage) +"hQy" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/cargo/storage) +"hQA" = ( +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/engine, +/area/station/command/corporate_dock) +"hQD" = ( +/obj/effect/turf_decal/tile/neutral/full, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/item/kirbyplants/random, +/turf/open/floor/iron/dark/smooth_large, +/area/station/hallway/primary/central) +"hQE" = ( +/obj/structure/cable, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/medical/maintenance, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"hQF" = ( +/obj/structure/transit_tube/horizontal, +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/space/basic, +/area/space/nearstation) +"hQH" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/iron/white/textured_large, +/area/station/science/xenobiology) +"hQJ" = ( +/obj/structure/cable, +/obj/machinery/newscaster/directional/south, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/turf/open/floor/wood, +/area/station/commons/lounge) +"hQK" = ( +/obj/structure/cable, +/obj/effect/turf_decal/trimline/red/filled/line, +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/landmark/start/depsec/medical, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/medical) +"hQR" = ( +/obj/machinery/door/poddoor/incinerator_ordmix, +/turf/open/floor/engine/vacuum, +/area/station/science/ordnance/burnchamber) +"hQY" = ( +/obj/structure/table, +/obj/effect/spawner/random/bureaucracy/folder, +/turf/open/floor/iron, +/area/station/hallway/secondary/exit/departure_lounge) +"hRd" = ( +/obj/effect/turf_decal/tile/brown/opposingcorners{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/commons/vacant_room/commissary) +"hRo" = ( +/obj/structure/table, +/obj/item/storage/box/shipping, +/obj/structure/sign/poster/random/directional/north, +/turf/open/floor/iron/textured_large, +/area/station/cargo/sorting) +"hRp" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/simple/dark/visible{ + dir = 9 + }, +/turf/open/floor/iron, +/area/station/engineering/atmos) +"hRv" = ( +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/security/interrogation) +"hRB" = ( +/turf/closed/wall, +/area/station/service/bar) +"hRE" = ( +/obj/structure/lattice/catwalk, +/obj/structure/ladder, +/obj/structure/railing/corner{ + dir = 1 + }, +/turf/open/openspace, +/area/station/engineering/atmospherics_engine) +"hRH" = ( +/obj/structure/cable, +/obj/effect/turf_decal/trimline/purple/filled/arrow_ccw, +/obj/effect/turf_decal/trimline/purple/filled/arrow_ccw{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/white/smooth_edge{ + dir = 8 + }, +/area/station/science/xenobiology/hallway) +"hRM" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/iron/dark, +/area/station/maintenance/department/engine) +"hRO" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/textured, +/area/station/construction/mining/aux_base) +"hRX" = ( +/obj/machinery/portable_atmospherics/canister/plasma, +/turf/open/floor/plating, +/area/station/engineering/storage) +"hSg" = ( +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 1 + }, +/obj/machinery/door/airlock/external{ + name = "Departure Lounge Airlock"; + space_dir = 2 + }, +/obj/effect/turf_decal/stripes/end, +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/exit/departure_lounge) +"hSi" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/dark_blue/half/contrasted{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/command/bridge) +"hSA" = ( +/obj/effect/spawner/random/structure/chair_comfy{ + dir = 1 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/carpet/red, +/area/station/command/heads_quarters/qm) +"hSC" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/plating, +/area/station/science/robotics/storage) +"hSF" = ( +/mob/living/basic/mining/basilisk, +/turf/open/misc/asteroid/airless, +/area/station/asteroid) +"hSM" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/effect/turf_decal/siding/wideplating/dark/end{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/cargo/storage) +"hST" = ( +/obj/machinery/conveyor{ + dir = 1; + id = "garbage" + }, +/obj/effect/spawner/random/trash/garbage{ + spawn_loot_count = 3 + }, +/turf/open/floor/plating, +/area/station/maintenance/disposal) +"hSW" = ( +/obj/structure/cable, +/obj/effect/turf_decal/tile/red/opposingcorners, +/obj/structure/disposalpipe/sorting/mail/flip{ + dir = 4 + }, +/obj/effect/mapping_helpers/mail_sorting/security/general, +/turf/open/floor/iron, +/area/station/security) +"hTf" = ( +/obj/structure/chair/office{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/command/storage/satellite) +"hTl" = ( +/obj/machinery/computer/records/medical{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 10 + }, +/obj/structure/extinguisher_cabinet/directional/south, +/turf/open/floor/iron/white, +/area/station/medical/paramedic) +"hTQ" = ( +/obj/machinery/atmospherics/components/unary/passive_vent{ + dir = 1; + name = "killroom vent" + }, +/turf/open/floor/circuit/telecomms, +/area/station/science/xenobiology) +"hTW" = ( +/obj/structure/cable, +/obj/structure/chair/sofa/bench/left, +/obj/effect/landmark/start/prisoner, +/turf/open/floor/iron, +/area/station/security/prison) +"hTX" = ( +/obj/machinery/atmospherics/pipe/smart/manifold/cyan/visible{ + dir = 8 + }, +/obj/effect/turf_decal/tile/yellow{ + dir = 8 + }, +/turf/open/floor/iron/dark/corner{ + dir = 1 + }, +/area/station/engineering/atmos/pumproom) +"hUm" = ( +/obj/machinery/light/cold/dim/directional/south, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/ai_monitored/turret_protected/aisat/foyer) +"hUo" = ( +/obj/machinery/shieldgen, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/science/xenobiology) +"hUr" = ( +/obj/machinery/atmospherics/pipe/smart/simple/dark/visible{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/engineering/atmos) +"hUw" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/obj/effect/turf_decal/trimline/yellow/filled/corner{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/engineering/break_room) +"hUD" = ( +/obj/effect/landmark/start/chief_medical_officer, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/carpet/blue, +/area/station/command/heads_quarters/cmo) +"hUH" = ( +/obj/machinery/camera/autoname/directional/north{ + network = list("ss13","rd") + }, +/turf/open/floor/engine, +/area/station/command/heads_quarters/rd) +"hUI" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/command/gateway) +"hUN" = ( +/obj/effect/turf_decal/sand/plating, +/obj/effect/spawner/random/trash/caution_sign, +/turf/open/floor/plating, +/area/station/maintenance/central/greater) +"hUS" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/catwalk_floor/iron, +/area/station/hallway/secondary/exit/departure_lounge) +"hUU" = ( +/obj/machinery/atmospherics/components/binary/pump/off/general/visible{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/door/window/brigdoor/right/directional/west, +/obj/effect/turf_decal/bot, +/turf/open/floor/engine, +/area/station/science/xenobiology) +"hVe" = ( +/obj/effect/turf_decal/bot{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 10 + }, +/obj/machinery/suit_storage_unit/engine, +/obj/machinery/airalarm/directional/west, +/turf/open/floor/iron, +/area/station/engineering/storage) +"hVm" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/atmospherics/pipe/smart/simple/green/hidden{ + dir = 6 + }, +/turf/open/floor/iron/dark, +/area/station/science/ordnance) +"hVs" = ( +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/solars/port/aft) +"hVB" = ( +/turf/open/floor/plating, +/area/station/engineering/supermatter/room) +"hVL" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/carpet, +/area/station/security/detectives_office) +"hVN" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/hallway/secondary/entry) +"hVQ" = ( +/obj/structure/transport/linear/public{ + icon = 'icons/obj/smooth_structures/catwalk.dmi'; + base_icon_state = "catwalk"; + icon_state = "catwalk-203" + }, +/turf/open/floor/plating/elevatorshaft, +/area/station/cargo/storage) +"hVW" = ( +/obj/machinery/telecomms/hub/preset, +/turf/open/floor/circuit/green/telecomms/mainframe, +/area/station/tcommsat/server) +"hWt" = ( +/obj/effect/turf_decal/box/corners{ + dir = 8 + }, +/turf/open/floor/plating/elevatorshaft, +/area/station/ai_monitored/turret_protected/aisat_interior) +"hWx" = ( +/obj/effect/spawner/random/structure/closet_empty/crate/with_loot, +/obj/structure/broken_flooring/corner/directional/north, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/hallway/primary/central) +"hWF" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/catwalk_floor/iron_smooth, +/area/station/maintenance/disposal) +"hWG" = ( +/obj/structure/railing, +/obj/machinery/door/firedoor/border_only, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wood, +/obj/structure/table/wood/fancy, +/obj/item/food/beef_stroganoff, +/obj/item/kitchen/spoon, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/wood/tile, +/area/station/service/bar) +"hWW" = ( +/obj/structure/cable, +/obj/effect/landmark/start/atmospheric_technician, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/engineering/break_room) +"hXb" = ( +/obj/effect/turf_decal/siding/thinplating_new{ + dir = 10 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron, +/area/station/maintenance/department/cargo) +"hXf" = ( +/obj/structure/chair/office, +/obj/effect/turf_decal/siding/wood, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/wood, +/area/station/security/detectives_office/private_investigators_office) +"hXk" = ( +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/station/medical/medbay/lobby) +"hXo" = ( +/obj/machinery/door/airlock/maintenance_hatch, +/obj/effect/mapping_helpers/airlock/access/all/medical/surgery, +/obj/structure/cable, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/medical/coldroom) +"hXu" = ( +/obj/effect/turf_decal/tile/yellow/anticorner/contrasted{ + dir = 4 + }, +/obj/item/kirbyplants/random/dead, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/construction/mining/aux_base) +"hXK" = ( +/obj/structure/closet/cardboard, +/obj/effect/turf_decal/stripes/line, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron, +/area/station/maintenance/department/science) +"hXL" = ( +/obj/machinery/light/directional/south, +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/effect/turf_decal/siding/wideplating/dark, +/obj/effect/turf_decal/siding/wideplating/dark{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/cargo/storage) +"hYe" = ( +/turf/closed/wall, +/area/station/science/ordnance/bomb) +"hYg" = ( +/obj/structure/table, +/obj/item/paper_bin, +/obj/item/stack/pipe_cleaner_coil/random, +/obj/item/stack/pipe_cleaner_coil/random, +/obj/item/stack/pipe_cleaner_coil/random, +/obj/item/stack/pipe_cleaner_coil/random, +/obj/item/stack/pipe_cleaner_coil/random, +/obj/item/canvas, +/obj/item/canvas, +/obj/item/canvas, +/obj/item/canvas, +/obj/item/canvas, +/obj/item/canvas, +/obj/item/chisel{ + pixel_y = 7 + }, +/obj/machinery/power/apc/auto_name/directional/south, +/obj/structure/cable, +/turf/open/floor/iron/textured, +/area/station/commons/storage/art) +"hYh" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/kitchen, +/area/station/service/kitchen) +"hYF" = ( +/obj/structure/cable, +/turf/open/floor/iron/textured_large, +/area/station/engineering/storage/tech) +"hYP" = ( +/obj/machinery/modular_computer/preset/id{ + dir = 1 + }, +/obj/machinery/light/directional/east, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 6 + }, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/command/heads_quarters/ce) +"hYU" = ( +/obj/structure/lattice, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/space/basic, +/area/space/nearstation) +"hZs" = ( +/turf/open/floor/wood, +/area/station/command/heads_quarters/qm) +"hZM" = ( +/obj/machinery/light/cold/directional/west, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/aisat/foyer) +"hZN" = ( +/obj/structure/flora/bush/sparsegrass/style_random, +/obj/item/food/grown/banana, +/obj/machinery/light/dim/directional/south, +/turf/open/floor/grass, +/area/station/medical/virology) +"hZO" = ( +/obj/structure/table, +/obj/effect/decal/cleanable/oil, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt/dust, +/obj/item/clothing/head/costume/cardborg, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/aisat/uppernorth) +"hZV" = ( +/obj/effect/turf_decal/tile/neutral, +/obj/structure/chair/sofa/bench{ + dir = 1 + }, +/obj/effect/landmark/start/assistant, +/obj/machinery/light/directional/south, +/turf/open/floor/iron, +/area/station/commons/fitness/recreation) +"iac" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 6 + }, +/obj/structure/extinguisher_cabinet/directional/south, +/obj/machinery/photocopier, +/obj/machinery/airalarm/directional/east, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) +"iau" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/sign/poster/contraband/random/directional/south, +/turf/open/floor/iron, +/area/station/maintenance/department/medical/central) +"iaI" = ( +/obj/structure/railing{ + dir = 10 + }, +/turf/open/floor/carpet, +/area/station/service/theater) +"iaN" = ( +/turf/closed/wall, +/area/station/cargo/miningoffice) +"ibi" = ( +/obj/structure/cable, +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/aisat/foyer) +"ibl" = ( +/obj/structure/lattice/catwalk, +/obj/structure/railing{ + dir = 1 + }, +/turf/open/openspace, +/area/station/science/xenobiology) +"ibq" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/airalarm/directional/north, +/turf/open/floor/plating, +/area/station/maintenance/aft/upper) +"ibv" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/iron/freezer, +/area/station/security/prison/shower) +"ibx" = ( +/obj/effect/turf_decal/sand/plating, +/turf/open/floor/plating, +/area/station/asteroid) +"ibE" = ( +/obj/machinery/pdapainter/research, +/obj/item/toy/plush/rouny{ + pixel_y = 18; + name = "rouny plushie"; + desc = "THAT is a rouny." + }, +/obj/effect/turf_decal/tile/neutral/opposingcorners{ + dir = 1 + }, +/obj/effect/turf_decal/siding/purple/corner, +/turf/open/floor/iron/dark, +/area/station/command/heads_quarters/rd) +"icl" = ( +/obj/machinery/door/airlock/public/glass{ + name = "Library" + }, +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/turf/open/floor/wood/tile, +/area/station/service/library) +"icp" = ( +/obj/structure/table/wood/fancy/red, +/obj/effect/turf_decal/siding/wood, +/obj/machinery/computer/records/medical/laptop{ + dir = 1 + }, +/turf/open/floor/wood, +/area/station/command/heads_quarters/hos) +"icq" = ( +/obj/effect/landmark/event_spawn, +/obj/machinery/holopad, +/obj/effect/turf_decal/bot, +/turf/open/floor/iron, +/area/station/cargo/sorting) +"icr" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/orange/visible, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"icw" = ( +/turf/open/floor/iron/white/smooth_half, +/area/station/medical/pharmacy) +"icz" = ( +/obj/item/radio/intercom/directional/east, +/obj/structure/table, +/obj/effect/turf_decal/bot, +/obj/item/computer_disk{ + pixel_x = 7; + pixel_y = 2 + }, +/obj/item/computer_disk{ + pixel_x = -5; + pixel_y = 8 + }, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/station/science/ordnance) +"icC" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/department/engine) +"icM" = ( +/obj/effect/turf_decal/bot_white, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/cargo/storage) +"idr" = ( +/obj/machinery/door/airlock/command, +/obj/effect/mapping_helpers/airlock/access/all/science/rd, +/obj/effect/turf_decal/tile/purple/fourcorners, +/obj/machinery/door/firedoor, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/command/heads_quarters/rd) +"idB" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/table, +/obj/item/restraints/handcuffs{ + pixel_x = -3; + pixel_y = 5 + }, +/obj/item/restraints/handcuffs, +/obj/item/restraints/handcuffs{ + pixel_x = 4; + pixel_y = -3 + }, +/obj/item/food/candy{ + pixel_x = 18; + pixel_y = 7 + }, +/turf/open/floor/iron, +/area/station/security/warden) +"idH" = ( +/obj/effect/turf_decal/sand/plating, +/obj/effect/turf_decal/stripes/asteroid/line{ + dir = 4 + }, +/obj/item/radio/intercom/directional/west, +/turf/open/floor/plating, +/area/station/hallway/secondary/entry) +"idU" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/command/storage/satellite) +"idV" = ( +/obj/docking_port/stationary{ + dwidth = 3; + height = 15; + name = "arrivals"; + roundstart_template = /datum/map_template/shuttle/arrival/box; + shuttle_id = "arrival_stationary"; + width = 7 + }, +/turf/open/floor/engine, +/area/station/hallway/secondary/entry) +"ied" = ( +/obj/effect/decal/cleanable/dirt, +/obj/item/grown/bananapeel, +/turf/open/floor/plating, +/area/station/maintenance/department/engine) +"iee" = ( +/obj/machinery/bouldertech/refinery/smelter, +/obj/machinery/conveyor{ + dir = 6; + id = "brm" + }, +/obj/effect/turf_decal/sand/plating, +/turf/open/floor/plating, +/area/station/cargo/miningoffice) +"iej" = ( +/obj/effect/turf_decal/siding/white{ + dir = 1 + }, +/obj/structure/rack, +/obj/item/wrench/medical, +/obj/item/food/strawberryicecreamsandwich, +/obj/machinery/light/dim/directional/south, +/turf/open/floor/iron, +/area/station/medical/coldroom) +"iel" = ( +/obj/machinery/atmospherics/components/unary/thermomachine/heater/on, +/obj/effect/turf_decal/tile/yellow{ + dir = 8 + }, +/obj/effect/turf_decal/tile/yellow{ + dir = 4 + }, +/turf/open/floor/iron/dark/corner{ + dir = 1 + }, +/area/station/engineering/atmos/pumproom) +"iem" = ( +/obj/machinery/atmospherics/components/unary/passive_vent{ + dir = 1; + name = "server vent" + }, +/obj/machinery/camera/motion/directional/south{ + c_tag = "Research Server Room"; + network = list("ss13","rd") + }, +/turf/open/floor/iron/dark/telecomms, +/area/station/science/server) +"ien" = ( +/obj/machinery/door/airlock/external/glass, +/obj/effect/mapping_helpers/airlock/access/all/command/captain, +/obj/effect/turf_decal/stripes/end, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "capspace" + }, +/turf/open/floor/engine, +/area/station/command/heads_quarters/captain/private) +"ieo" = ( +/obj/structure/flora/rock/style_random, +/turf/open/misc/asteroid, +/area/station/maintenance/department/science) +"ieI" = ( +/obj/structure/cable/layer3, +/turf/open/floor/circuit/telecomms/mainframe, +/area/station/tcommsat/server) +"ieJ" = ( +/obj/effect/decal/cleanable/dirt, +/obj/item/toy/basketball, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/security/prison) +"ieP" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/station/hallway/secondary/entry) +"ieU" = ( +/obj/structure/cable, +/obj/effect/turf_decal/siding/purple/corner{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/catwalk_floor/flat_white, +/area/station/science/xenobiology) +"ifc" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line, +/obj/machinery/firealarm/directional/south, +/obj/machinery/camera/autoname/directional/south, +/turf/open/floor/iron, +/area/station/engineering/lobby) +"ifj" = ( +/turf/open/floor/circuit/red, +/area/station/ai_monitored/turret_protected/ai_upload) +"ifl" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/medical/storage) +"ift" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 8 + }, +/turf/open/floor/engine/vacuum, +/area/station/science/ordnance/burnchamber) +"ifE" = ( +/obj/machinery/vending/medical, +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/machinery/firealarm/directional/south, +/obj/machinery/newscaster/directional/east, +/turf/open/floor/iron/white, +/area/station/medical/storage) +"ifV" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/obj/machinery/door/poddoor/preopen{ + id = "xeno_blastdoor"; + name = "Biohazard Containment Door" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/science/xenobiology) +"ign" = ( +/obj/structure/closet/toolcloset, +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 1 + }, +/obj/item/radio/intercom/directional/north, +/turf/open/floor/iron, +/area/station/commons/storage/tools) +"igq" = ( +/turf/closed/wall, +/area/station/medical/medbay/central) +"igB" = ( +/obj/effect/turf_decal/stripes/full, +/turf/open/floor/iron/dark, +/area/station/security/processing) +"igE" = ( +/obj/structure/lattice/catwalk, +/obj/structure/railing{ + dir = 10 + }, +/obj/structure/railing/corner{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/openspace, +/area/station/engineering/supermatter/room) +"igG" = ( +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/plating/airless, +/area/station/solars/port) +"igK" = ( +/turf/open/floor/iron/stairs/medium{ + dir = 1 + }, +/area/station/hallway/secondary/exit/departure_lounge) +"igQ" = ( +/obj/structure/table/reinforced/rglass, +/obj/item/storage/box/evidence{ + pixel_x = -5; + pixel_y = 12 + }, +/obj/item/implanter, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/security/office) +"igS" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/wood/tile, +/area/station/service/bar) +"ihd" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/machinery/light/warm/directional/south, +/obj/effect/turf_decal/tile/bar/opposingcorners, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/service/bar) +"ihe" = ( +/obj/structure/closet/secure_closet/brig{ + id = "Cell 4"; + name = "Cell 4 locker" + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light/small/directional/east, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/security/brig) +"ihH" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/spawner/random/structure/chair_maintenance{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/central/lesser) +"ihK" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"iig" = ( +/obj/machinery/computer/security/mining{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/iron/textured, +/area/station/cargo/miningoffice) +"iin" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) +"iio" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable/layer1, +/turf/open/floor/iron, +/area/station/engineering/main) +"iiB" = ( +/obj/structure/lattice, +/obj/structure/cable, +/turf/open/space/openspace, +/area/space/nearstation) +"iiM" = ( +/obj/effect/turf_decal/siding/thinplating{ + dir = 4 + }, +/turf/open/floor/glass/reinforced, +/area/station/engineering/lobby) +"ijd" = ( +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/turf/open/floor/iron, +/area/station/cargo/lobby) +"ijg" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/cargo/storage) +"ijn" = ( +/obj/structure/stairs/north, +/obj/structure/railing{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"ijo" = ( +/obj/effect/turf_decal/tile/yellow/anticorner/contrasted{ + dir = 8 + }, +/obj/machinery/computer/shuttle/mining{ + dir = 4 + }, +/obj/structure/window/reinforced/spawner/directional/south, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/power/apc/auto_name/directional/west, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/construction/mining/aux_base) +"ijp" = ( +/obj/structure/cable/multilayer/multiz, +/turf/open/floor/plating, +/area/station/maintenance/port/lesser) +"ijv" = ( +/obj/machinery/atmospherics/components/binary/volume_pump{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/engineering/atmos/pumproom) +"ijC" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/spawner/random/trash, +/turf/open/floor/iron, +/area/station/maintenance/department/science) +"ikc" = ( +/obj/structure/closet/crate/secure/loot{ + codelen = 2; + name = "malfunctioning abandoned crate" + }, +/turf/open/misc/asteroid, +/area/station/asteroid) +"ike" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/structure/closet_maintenance, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/plating, +/area/station/maintenance/central/lesser) +"ikp" = ( +/obj/structure/table, +/obj/item/toy/plush/slimeplushie{ + pixel_y = 12; + pixel_x = 3 + }, +/obj/item/stamp{ + pixel_x = -6; + pixel_y = 4 + }, +/obj/item/stamp/denied{ + pixel_x = 4; + pixel_y = 1 + }, +/turf/open/floor/glass/reinforced, +/area/station/science/xenobiology) +"ikD" = ( +/obj/structure/grille/broken, +/obj/effect/decal/cleanable/glass, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating/reinforced, +/area/station/maintenance/port/greater) +"ilb" = ( +/obj/effect/turf_decal/tile/red/diagonal_edge, +/turf/open/floor/iron/dark, +/area/station/security/warden) +"ili" = ( +/obj/structure/transit_tube/curved/flipped{ + dir = 1 + }, +/obj/structure/lattice, +/turf/open/space/basic, +/area/space/nearstation) +"ilk" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/spawner/random/structure/closet_empty/crate/with_loot, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"ilp" = ( +/turf/closed/mineral/random/stationside/asteroid/porus{ + mineralChance = 20 + }, +/area/station/maintenance/department/science) +"ilq" = ( +/obj/structure/transport/linear/public, +/obj/machinery/holopad, +/turf/open/openspace, +/area/station/ai_monitored/turret_protected/aisat_interior) +"ilr" = ( +/obj/machinery/mineral/ore_redemption{ + input_dir = 8; + output_dir = 4 + }, +/obj/structure/sign/poster/random/directional/north, +/turf/open/floor/iron/dark/textured, +/area/station/cargo/storage) +"ilx" = ( +/obj/machinery/smartfridge/organ, +/turf/open/floor/plating, +/area/station/medical/morgue) +"ilO" = ( +/obj/effect/decal/cleanable/rubble, +/obj/structure/railing{ + dir = 1 + }, +/turf/open/misc/asteroid, +/area/station/cargo/miningoffice) +"ilQ" = ( +/obj/structure/railing, +/obj/machinery/door/firedoor/border_only, +/turf/open/floor/glass/reinforced, +/area/station/service/bar) +"iml" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/iron/textured, +/area/station/maintenance/department/medical/central) +"imx" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron, +/area/station/maintenance/department/science) +"imy" = ( +/obj/effect/turf_decal/plaque{ + icon_state = "L8" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"imG" = ( +/obj/machinery/firealarm/directional/south, +/obj/effect/turf_decal/trimline/blue/filled/line, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/station/medical/exam_room) +"imI" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/white, +/area/station/medical/chemistry) +"imQ" = ( +/obj/structure/table, +/obj/item/camera, +/turf/open/floor/iron, +/area/station/security/prison) +"imZ" = ( +/obj/effect/landmark/atmospheric_sanity/ignore_area, +/turf/closed/wall/r_wall, +/area/station/ai_monitored/turret_protected/aisat/uppernorth) +"ina" = ( +/obj/effect/spawner/random/structure/steam_vent, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"ine" = ( +/obj/structure/cable, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/engineering/lobby) +"ini" = ( +/obj/effect/turf_decal/stripes{ + dir = 9 + }, +/turf/open/floor/engine, +/area/station/engineering/atmospherics_engine) +"ins" = ( +/obj/machinery/airalarm/directional/south, +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/multiz/supply/visible/layer4{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/multiz/scrubbers/visible/layer2{ + dir = 1 + }, +/turf/open/floor/plating, +/area/station/ai_monitored/turret_protected/aisat/teleporter) +"inz" = ( +/obj/machinery/door/airlock/research{ + glass = 1; + name = "Slime Euthanization Chamber"; + opacity = 0 + }, +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/effect/mapping_helpers/airlock/access/all/science/xenobio, +/turf/open/floor/iron, +/area/station/science/xenobiology) +"inC" = ( +/obj/structure/cable, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/yellow/filled/mid_joiner{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/junction{ + dir = 8 + }, +/turf/open/floor/iron/white/smooth_edge{ + dir = 8 + }, +/area/station/medical/pharmacy) +"ioa" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/medical/treatment_center) +"ioh" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/duct, +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden, +/obj/effect/turf_decal/tile/blue/fourcorners, +/turf/open/floor/catwalk_floor/flat_white, +/area/station/medical/treatment_center) +"iol" = ( +/turf/closed/wall/r_wall, +/area/station/service/lawoffice) +"iom" = ( +/obj/effect/mapping_helpers/dead_body_placer, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/medical/morgue) +"iov" = ( +/obj/structure/chair/office{ + name = "grimy chair" + }, +/obj/machinery/light/directional/north, +/turf/open/floor/carpet/purple, +/area/station/service/library) +"iow" = ( +/obj/structure/cable, +/obj/effect/turf_decal/tile/dark_blue, +/obj/structure/disposalpipe/junction/flip{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/hallway/secondary/command) +"iox" = ( +/obj/machinery/computer/camera_advanced/xenobio{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/item/storage/box/monkeycubes, +/turf/open/floor/iron/white/textured_half, +/area/station/science/xenobiology) +"ioL" = ( +/obj/item/radio/intercom/directional/east, +/obj/machinery/portable_atmospherics/canister/oxygen, +/turf/open/floor/iron/white, +/area/station/science/ordnance/storage) +"ioP" = ( +/obj/structure/cable/multilayer/multiz, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/science/xenobiology) +"ioZ" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/dresser, +/obj/item/toy/figure/dsquad{ + pixel_y = 12; + pixel_x = 6 + }, +/obj/item/toy/figure/secofficer{ + pixel_y = 12; + pixel_x = -6 + }, +/obj/machinery/light_switch/directional/east, +/turf/open/floor/carpet/red, +/area/station/security/warden) +"ipc" = ( +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/security/armory) +"ipu" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/dark/hidden, +/obj/machinery/door/airlock/public/glass/incinerator/atmos_interior, +/obj/effect/mapping_helpers/airlock/locked, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/engine, +/area/station/maintenance/disposal/incinerator) +"ipv" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/tile/purple/anticorner/contrasted{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/science/lobby) +"ipx" = ( +/turf/closed/wall/r_wall, +/area/station/science/cytology) +"ipJ" = ( +/obj/effect/turf_decal/tile/red{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/turf/open/floor/iron, +/area/station/security/warden) +"ipR" = ( +/obj/structure/grille, +/turf/open/floor/plating, +/area/station/ai_monitored/turret_protected/aisat/teleporter) +"ipT" = ( +/obj/machinery/atmospherics/components/trinary/filter/flipped/critical{ + dir = 1 + }, +/obj/effect/turf_decal/stripes{ + dir = 4 + }, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"ipV" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/trunk/multiz{ + dir = 8 + }, +/turf/open/floor/iron/white/herringbone, +/area/station/science/breakroom) +"ipZ" = ( +/obj/effect/landmark/event_spawn, +/obj/machinery/iv_drip, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/engine, +/area/station/medical/chemistry) +"iqa" = ( +/obj/structure/chair{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/turf/open/floor/plating/airless, +/area/station/science/ordnance/bomb) +"iqf" = ( +/obj/machinery/seed_extractor, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/security/prison/garden) +"iqE" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/window/left/directional/west{ + name = "Requests Window" + }, +/obj/machinery/door/window/brigdoor/left/directional/east{ + name = "Weapon Distribution"; + req_access = list("armory") + }, +/obj/item/paper, +/obj/item/pen, +/obj/machinery/door/firedoor, +/turf/open/floor/iron, +/area/station/ai_monitored/security/armory) +"iqW" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"irx" = ( +/obj/structure/chair/sofa/bench/right{ + dir = 4 + }, +/obj/effect/turf_decal/tile/purple/half/contrasted{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/station/science/lobby) +"irA" = ( +/obj/machinery/light/small/directional/west, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/carpet, +/area/station/commons/dorms) +"irJ" = ( +/turf/open/floor/iron/white, +/area/station/science/lab) +"irK" = ( +/obj/effect/mapping_helpers/burnt_floor, +/obj/effect/spawner/random/trash/grime, +/turf/open/floor/plating, +/area/station/maintenance/central/greater) +"irS" = ( +/obj/structure/cable, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"ise" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/spawner/random/trash/mess, +/obj/effect/spawner/random/engineering/tracking_beacon, +/turf/open/floor/plating, +/area/station/maintenance/port/lesser) +"isg" = ( +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/turf/open/floor/plating, +/area/station/maintenance/port/lesser) +"ism" = ( +/obj/machinery/button/door/directional/east{ + normaldoorcontrol = 1; + specialfunctions = 4; + name = "Cabin Bolt Control"; + id = "Cabin7" + }, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/wood/tile, +/area/station/commons/dorms) +"isq" = ( +/obj/effect/turf_decal/tile/dark_red/opposingcorners, +/obj/effect/landmark/event_spawn, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/service/bar) +"isr" = ( +/obj/effect/turf_decal/siding/green{ + dir = 4 + }, +/turf/open/floor/iron/textured_large, +/area/station/hallway/primary/central) +"isx" = ( +/obj/machinery/door/airlock/security/glass, +/obj/effect/turf_decal/tile/red/fourcorners, +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/all/security/general, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/station/security/office) +"isH" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/turf/open/floor/iron/large, +/area/station/service/hydroponics/garden) +"isO" = ( +/obj/structure/table, +/obj/item/construction/plumbing, +/obj/item/construction/plumbing{ + pixel_y = -5 + }, +/obj/item/plunger{ + pixel_x = 15 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/dark/textured_half{ + dir = 1 + }, +/area/station/medical/chemistry/minisat) +"isT" = ( +/turf/open/openspace, +/area/station/engineering/break_room) +"ita" = ( +/obj/effect/turf_decal/tile/dark_blue/anticorner/contrasted, +/obj/machinery/light_switch/directional/east, +/turf/open/floor/iron, +/area/station/command/bridge) +"itk" = ( +/obj/effect/spawner/structure/window/reinforced/plasma, +/obj/machinery/door/poddoor/preopen{ + id = "ceshut" + }, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/engineering/supermatter/room) +"its" = ( +/obj/machinery/atmospherics/components/unary/thermomachine{ + dir = 8; + initialize_directions = 8 + }, +/turf/open/floor/iron/textured, +/area/station/engineering/atmos) +"itt" = ( +/obj/structure/lattice/catwalk, +/obj/item/toy/plush/lizard_plushie/space{ + name = "Abuses-The-Chemicals" + }, +/turf/open/space/basic, +/area/space/nearstation) +"itV" = ( +/obj/structure/railing/corner{ + dir = 8 + }, +/obj/effect/turf_decal/siding/purple/corner{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/door/firedoor/border_only, +/turf/open/floor/iron/white/textured, +/area/station/science/genetics) +"iua" = ( +/obj/machinery/door/airlock/external, +/obj/effect/mapping_helpers/airlock/cyclelink_helper, +/obj/effect/mapping_helpers/airlock/access/any/engineering/external, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"iub" = ( +/obj/structure/cable/multilayer/multiz, +/turf/open/floor/plating, +/area/station/command/corporate_showroom) +"iuv" = ( +/obj/effect/spawner/structure/window/hollow/middle, +/turf/open/floor/plating, +/area/station/service/hydroponics/garden) +"iuA" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/light/small/directional/south, +/obj/structure/sign/poster/contraband/random/directional/west, +/obj/effect/spawner/random/trash/crushed_can, +/turf/open/floor/iron, +/area/station/maintenance/department/medical/central) +"iuB" = ( +/turf/open/floor/plating/elevatorshaft, +/area/station/ai_monitored/turret_protected/aisat_interior) +"iuU" = ( +/obj/structure/window/reinforced/spawner/directional/west, +/mob/living/basic/bot/cleanbot, +/obj/effect/turf_decal/stripes{ + dir = 5 + }, +/obj/machinery/airalarm/directional/south, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/aisat/foyer) +"iuV" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/white, +/area/station/medical/paramedic) +"ivh" = ( +/obj/machinery/atmospherics/pipe/smart/manifold/cyan/hidden{ + dir = 4 + }, +/turf/open/floor/circuit/telecomms, +/area/station/science/xenobiology) +"ivp" = ( +/obj/structure/table, +/obj/item/clothing/suit/jacket/straight_jacket, +/obj/item/clothing/mask/muzzle, +/obj/item/clothing/glasses/blindfold, +/obj/effect/turf_decal/tile/red/anticorner/contrasted, +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/east, +/turf/open/floor/iron/dark, +/area/station/security/execution/education) +"ivx" = ( +/turf/open/floor/glass/reinforced/airless, +/area/station/asteroid) +"ivC" = ( +/obj/machinery/camera/autoname/directional/north{ + network = list("ss13","engine") + }, +/turf/open/floor/iron/dark, +/area/station/engineering/supermatter/room) +"ivR" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/machinery/vending/coffee, +/turf/open/floor/iron, +/area/station/commons/fitness/recreation) +"ivU" = ( +/obj/effect/turf_decal/tile/neutral, +/obj/structure/extinguisher_cabinet/directional/south, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"iwd" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/iron/grimy, +/area/station/service/chapel/office) +"iwk" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/sorting/mail/flip, +/obj/effect/mapping_helpers/mail_sorting/engineering/ce_office, +/turf/open/floor/iron, +/area/station/engineering/main) +"iwm" = ( +/obj/structure/chair{ + dir = 8 + }, +/obj/effect/turf_decal/bot_red, +/obj/effect/turf_decal/tile/dark_blue/half/contrasted{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/hallway/secondary/command) +"iwu" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/closet/crate, +/obj/effect/spawner/random/bureaucracy/briefcase, +/obj/effect/spawner/random/bureaucracy/pen, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/maintenance/aft/upper) +"iwQ" = ( +/obj/effect/turf_decal/tile/dark_red/opposingcorners, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/service/bar) +"iwS" = ( +/obj/machinery/airalarm/directional/north, +/obj/effect/mapping_helpers/airalarm/tlv_cold_room, +/turf/open/floor/iron/dark/telecomms, +/area/station/ai_monitored/turret_protected/ai) +"ixa" = ( +/obj/machinery/light/directional/south, +/obj/effect/turf_decal/tile/yellow, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) +"ixc" = ( +/obj/machinery/door/airlock/maintenance_hatch, +/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance/departmental, +/obj/structure/cable, +/obj/effect/mapping_helpers/airlock/unres, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/plating, +/area/station/engineering/main) +"ixm" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 10 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/wood/parquet, +/area/station/service/theater) +"ixo" = ( +/obj/structure/girder, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/sand/plating, +/turf/open/floor/plating, +/area/station/cargo/miningoffice) +"ixA" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/white, +/area/station/medical/treatment_center) +"ixL" = ( +/obj/structure/table, +/obj/item/reagent_containers/cup/beaker/large, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/showroomfloor, +/area/station/maintenance/department/engine) +"ixR" = ( +/obj/effect/turf_decal/tile/green{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/medical/virology) +"ixU" = ( +/turf/closed/wall/r_wall, +/area/station/science/research) +"ixY" = ( +/obj/effect/turf_decal/siding/thinplating_new{ + dir = 1 + }, +/turf/open/floor/glass/reinforced, +/area/station/engineering/atmos/upper) +"ixZ" = ( +/obj/effect/turf_decal/sand/plating, +/obj/effect/turf_decal/stripes/asteroid/line, +/turf/open/floor/plating/airless, +/area/space/nearstation) +"iyb" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment, +/obj/structure/cable, +/turf/open/floor/iron/white, +/area/station/medical/treatment_center) +"iyw" = ( +/obj/machinery/power/smes, +/obj/structure/cable, +/obj/effect/turf_decal/sand/plating, +/turf/open/floor/plating, +/area/station/maintenance/solars/port/fore) +"iyA" = ( +/turf/open/floor/iron/white, +/area/station/medical/chemistry) +"iyE" = ( +/obj/machinery/door/window/left/directional/west{ + name = "Mass Driver Door"; + req_access = list("ordnance") + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/mass_driver/ordnance{ + dir = 4 + }, +/turf/open/floor/engine, +/area/station/science/ordnance/testlab) +"iyF" = ( +/obj/machinery/door/airlock/command{ + name = "Chief Medical Officer's Quarters" + }, +/obj/effect/mapping_helpers/airlock/access/all/medical/cmo, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/carpet/blue, +/area/station/command/heads_quarters/cmo) +"iyG" = ( +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 1 + }, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/security) +"iyT" = ( +/obj/effect/spawner/random/structure/closet_empty/crate, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/department/science) +"iyZ" = ( +/obj/machinery/camera/autoname/directional/east{ + network = list("ss13","rd","xeno") + }, +/obj/effect/turf_decal/siding/purple, +/turf/open/floor/iron/white/smooth_corner{ + dir = 1 + }, +/area/station/science/xenobiology) +"izd" = ( +/obj/machinery/airalarm/directional/west, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/wood/large, +/area/station/cargo/boutique) +"izr" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/porta_turret/ai, +/turf/open/floor/iron/dark/airless, +/area/station/tcommsat/server) +"izy" = ( +/obj/effect/turf_decal/plaque{ + icon_state = "L4" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"izP" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/security/execution/transfer) +"izU" = ( +/obj/item/radio/intercom/directional/north, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/wood/tile, +/area/station/service/bar) +"izV" = ( +/obj/effect/mapping_helpers/airlock/access/all/science/general, +/obj/machinery/door/airlock/science/glass, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/tile/purple/opposingcorners, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/white, +/area/station/science/auxlab/firing_range) +"iAw" = ( +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/tile/purple/anticorner/contrasted{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/white, +/area/station/science/lobby) +"iAx" = ( +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 4 + }, +/obj/effect/turf_decal/box/red, +/obj/item/radio/intercom/directional/north, +/turf/open/floor/iron/dark, +/area/station/science/ordnance) +"iAE" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"iAM" = ( +/obj/machinery/computer/security/telescreen/rd/directional/south, +/turf/open/floor/glass/reinforced/plasma, +/area/station/command/heads_quarters/rd) +"iBe" = ( +/obj/structure/chair/pew/right{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/iron/chapel, +/area/station/service/chapel) +"iBg" = ( +/obj/structure/table, +/obj/effect/spawner/random/contraband/prison, +/turf/open/floor/iron, +/area/station/security/prison) +"iBl" = ( +/obj/structure/sign/poster/contraband/missing_gloves, +/turf/closed/wall, +/area/station/commons/storage/primary) +"iBs" = ( +/obj/structure/table, +/obj/item/stack/spacecash/c100, +/obj/item/food/drug/saturnx{ + pixel_y = 10 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/white/small, +/area/station/science/lobby) +"iBH" = ( +/obj/effect/landmark/start/chief_engineer, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/command/heads_quarters/ce) +"iBK" = ( +/obj/machinery/door/airlock/research/glass{ + name = "Chemistry Minisat" + }, +/obj/effect/mapping_helpers/airlock/access/all/medical/chemistry, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 + }, +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/station/medical/chemistry/minisat) +"iBP" = ( +/obj/structure/table, +/obj/effect/spawner/random/bureaucracy/paper, +/obj/effect/spawner/random/bureaucracy/pen, +/obj/item/radio/intercom/directional/south, +/turf/open/floor/iron/dark, +/area/station/medical/morgue) +"iCa" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/grunge{ + name = "Courtroom" + }, +/obj/effect/mapping_helpers/airlock/access/all/service/lawyer, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/service/lawoffice) +"iCi" = ( +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron, +/area/station/construction/mining/aux_base) +"iCD" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/iron/checker, +/area/station/science/research) +"iCH" = ( +/obj/structure/closet/crate, +/obj/effect/spawner/random/maintenance, +/obj/effect/spawner/random/maintenance, +/turf/open/misc/asteroid, +/area/station/maintenance/department/cargo) +"iCM" = ( +/obj/effect/spawner/random/engineering/tracking_beacon, +/turf/open/floor/iron, +/area/station/engineering/lobby) +"iCT" = ( +/obj/structure/girder/reinforced, +/obj/structure/grille, +/turf/open/floor/plating, +/area/station/maintenance/port/lesser) +"iCV" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/teleport/station, +/obj/machinery/light/small/directional/south, +/turf/open/floor/iron/dark, +/area/station/command/teleporter) +"iDq" = ( +/obj/item/clothing/head/costume/festive{ + pixel_x = 1; + pixel_y = 8 + }, +/mob/living/basic/mothroach, +/turf/open/misc/asteroid, +/area/station/asteroid) +"iDs" = ( +/obj/structure/disposaloutlet{ + dir = 4 + }, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/obj/structure/window/spawner/directional/west, +/obj/structure/window/spawner/directional/south, +/turf/open/floor/iron/textured_large, +/area/station/cargo/lobby) +"iDu" = ( +/obj/structure/door_assembly/door_assembly_mai, +/obj/effect/turf_decal/sand/plating, +/turf/open/floor/plating/airless, +/area/station/asteroid) +"iDw" = ( +/obj/effect/landmark/start/chief_medical_officer, +/obj/machinery/light/small/directional/north, +/turf/open/floor/iron/freezer, +/area/station/command/heads_quarters/cmo) +"iDx" = ( +/obj/machinery/door/window/brigdoor/security/cell/left/directional/west{ + id = "Cell 3"; + name = "Cell 3" + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/security/brig) +"iDB" = ( +/obj/effect/decal/cleanable/dirt, +/obj/item/radio/intercom/directional/west, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/wood/large, +/area/station/cargo/boutique) +"iDD" = ( +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron/kitchen, +/area/station/service/kitchen) +"iDJ" = ( +/obj/structure/table/reinforced, +/obj/item/modular_computer/laptop/preset/civilian, +/obj/structure/cable, +/turf/open/floor/carpet/executive, +/area/station/command/heads_quarters/captain/private) +"iEj" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"iEl" = ( +/obj/structure/holosign/barrier/atmos, +/turf/open/misc/asteroid, +/area/station/asteroid) +"iEn" = ( +/obj/machinery/door/airlock/public/glass{ + name = "Starboard Primary Hallway" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) +"iEq" = ( +/obj/machinery/camera/motion/directional/west{ + network = list("aicore"); + c_tag = "Secure - AI Upper External East" + }, +/turf/open/space/openspace, +/area/space/nearstation) +"iEA" = ( +/obj/effect/turf_decal/trimline/blue/filled/line, +/obj/machinery/light/cold/directional/south, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) +"iEB" = ( +/obj/machinery/firealarm/directional/south, +/obj/effect/turf_decal/siding/thinplating_new, +/turf/open/floor/glass/reinforced, +/area/station/engineering/atmos/upper) +"iEK" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/iron/chapel{ + dir = 1 + }, +/area/station/service/chapel) +"iEO" = ( +/turf/closed/wall, +/area/station/security/prison/mess) +"iEQ" = ( +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark/smooth_large, +/area/station/command/meeting_room) +"iFb" = ( +/obj/machinery/door/airlock/external{ + name = "Solar Maintenance" + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 1 + }, +/obj/structure/cable, +/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 1 + }, +/turf/open/floor/plating, +/area/station/maintenance/solars/port) +"iFg" = ( +/obj/effect/turf_decal/tile/blue/half/contrasted, +/obj/machinery/camera/autoname/directional/south, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/security/medical) +"iFn" = ( +/obj/structure/closet/crate, +/obj/item/stack/sheet/iron/fifty, +/obj/item/stack/rods/fifty, +/obj/item/stack/sheet/glass/fifty, +/obj/item/electronics/airlock, +/obj/item/electronics/airlock, +/obj/item/stock_parts/power_store/cell/high, +/obj/item/stack/sheet/mineral/plasma{ + amount = 30 + }, +/turf/open/floor/plating, +/area/station/engineering/storage) +"iFq" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) +"iFr" = ( +/obj/item/radio/intercom/directional/south, +/obj/structure/closet, +/turf/open/floor/iron/textured, +/area/station/hallway/primary/central) +"iFv" = ( +/obj/effect/turf_decal/tile/dark_blue{ + dir = 1 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/station/hallway/secondary/command) +"iFz" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/maintenance/solars/port/aft) +"iFK" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored/oxygen_output{ + dir = 8 + }, +/turf/open/floor/engine/o2, +/area/station/engineering/atmos) +"iFN" = ( +/turf/closed/wall/r_wall, +/area/station/science/server) +"iFU" = ( +/obj/effect/spawner/random/structure/crate, +/obj/effect/spawner/random/maintenance, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/maintenance/department/medical/central) +"iFV" = ( +/obj/structure/table/wood, +/obj/item/radio/intercom/directional/east, +/turf/open/floor/carpet, +/area/station/commons/dorms) +"iGa" = ( +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/obj/effect/landmark/blobstart, +/turf/open/floor/carpet/purple, +/area/station/service/library) +"iGo" = ( +/obj/structure/cable, +/obj/machinery/door/airlock{ + name = "Service Hall" + }, +/obj/effect/mapping_helpers/airlock/access/all/service/general, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/hallway/secondary/service) +"iGC" = ( +/turf/open/floor/iron, +/area/station/hallway/secondary/exit/departure_lounge) +"iGK" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/wood, +/area/station/commons/lounge) +"iHr" = ( +/obj/structure/cable, +/obj/structure/chair/sofa/bench{ + dir = 1 + }, +/obj/effect/landmark/start/prisoner, +/turf/open/floor/iron, +/area/station/security/prison) +"iHv" = ( +/obj/effect/spawner/random/decoration/carpet, +/obj/structure/closet/crate/engineering, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/maintenance/department/cargo) +"iHC" = ( +/obj/machinery/power/solar_control{ + dir = 1; + id = "aft"; + name = "Aft Solar Control" + }, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/solars/port) +"iHG" = ( +/obj/effect/turf_decal/tile/red, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/security/lockers) +"iHH" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/white, +/area/station/science/research) +"iHK" = ( +/obj/structure/window/spawner/directional/west, +/turf/open/floor/iron/dark, +/area/station/commons/fitness/recreation) +"iHL" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/sorting/mail/flip{ + dir = 2 + }, +/obj/effect/landmark/event_spawn, +/obj/effect/mapping_helpers/mail_sorting/medbay/virology, +/turf/open/floor/iron/white/smooth_large, +/area/station/medical/virology) +"iHO" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/asteroid) +"iHY" = ( +/obj/structure/sign/warning/explosives/directional/east, +/obj/effect/turf_decal/siding/purple/corner{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/white, +/area/station/science/research) +"iIo" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron, +/area/station/maintenance/department/cargo) +"iIp" = ( +/obj/structure/railing, +/obj/machinery/power/terminal{ + dir = 1 + }, +/obj/structure/cable/layer3, +/turf/open/floor/catwalk_floor/iron_dark/telecomms, +/area/station/ai_monitored/turret_protected/ai) +"iIq" = ( +/obj/machinery/power/apc/auto_name/directional/east, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/cargo/bitrunning/den) +"iIw" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/table, +/obj/machinery/microwave{ + pixel_y = 6 + }, +/obj/machinery/light_switch/directional/north, +/turf/open/floor/iron, +/area/station/cargo/warehouse) +"iIB" = ( +/obj/effect/turf_decal/tile/yellow/diagonal_centre, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/commons/storage/tools) +"iIR" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/sorting/mail/flip{ + dir = 2 + }, +/obj/effect/mapping_helpers/mail_sorting/service/chapel, +/obj/machinery/navbeacon{ + codes_txt = "patrol;next_patrol=P3-Central-Primary"; + location = "P2-Central-Primary" + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"iIT" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/door/window/brigdoor/left/directional/north, +/obj/effect/turf_decal/siding/purple{ + dir = 8 + }, +/obj/machinery/camera/autoname/directional/west, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/white, +/area/station/ai_monitored/turret_protected/ai_upload_foyer) +"iIY" = ( +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/service/hydroponics) +"iJd" = ( +/obj/structure/table, +/obj/machinery/fax{ + fax_name = "Medical"; + name = "Medical Fax Machine" + }, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 1 + }, +/turf/open/floor/iron/white, +/area/station/medical/exam_room) +"iJg" = ( +/obj/structure/table, +/obj/item/ai_module/reset{ + pixel_x = 2; + pixel_y = 8 + }, +/obj/item/ai_module/supplied/freeform, +/turf/open/floor/circuit/red, +/area/station/ai_monitored/turret_protected/ai_upload) +"iJm" = ( +/obj/effect/turf_decal/sand/plating, +/turf/open/floor/plating/airless, +/area/station/asteroid) +"iJr" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/cargo/storage) +"iJt" = ( +/obj/structure/cable, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable/layer1, +/turf/open/floor/iron, +/area/station/engineering/main) +"iJB" = ( +/obj/machinery/door/airlock/medical{ + name = "Psychology Bedroom" + }, +/obj/effect/mapping_helpers/airlock/access/all/medical/psychology, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/wood/parquet, +/area/station/medical/psychology) +"iJF" = ( +/obj/structure/table, +/obj/effect/spawner/random/food_or_drink/snack, +/obj/machinery/power/apc/auto_name/directional/east, +/obj/structure/cable, +/turf/open/floor/iron/white, +/area/station/medical/patients_rooms/room_a) +"iJG" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/security/lockers) +"iJP" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/aisat/foyer) +"iJS" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/white, +/area/station/science/research) +"iJT" = ( +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/south, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark/small, +/area/station/science/cytology) +"iJZ" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/airalarm/directional/north, +/obj/structure/filingcabinet, +/obj/machinery/firealarm/directional/west, +/turf/open/floor/iron/dark, +/area/station/science/ordnance) +"iKc" = ( +/turf/open/floor/iron/white, +/area/station/science/lobby) +"iKn" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/item/chair, +/obj/effect/mob_spawn/corpse/human/cargo_tech, +/obj/effect/landmark/event_spawn, +/turf/open/floor/iron, +/area/station/cargo/warehouse/upper) +"iKA" = ( +/obj/structure/table/reinforced, +/turf/open/floor/iron, +/area/station/security/prison/mess) +"iKD" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/turf/open/floor/iron/white, +/area/station/medical/paramedic) +"iLh" = ( +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 1 + }, +/obj/structure/window/reinforced/spawner/directional/south, +/obj/machinery/portable_atmospherics/canister/carbon_dioxide, +/turf/open/floor/iron/dark/textured_corner{ + dir = 1 + }, +/area/station/science/xenobiology) +"iLj" = ( +/obj/structure/railing{ + dir = 10 + }, +/obj/structure/cable/layer3, +/turf/open/floor/catwalk_floor/iron_dark/telecomms, +/area/station/ai_monitored/turret_protected/ai) +"iLo" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/trimline/yellow/filled/corner{ + dir = 1 + }, +/turf/open/floor/iron/white, +/area/station/maintenance/department/medical) +"iLw" = ( +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"iLG" = ( +/obj/structure/table/wood, +/obj/item/radio/intercom/command/directional/south, +/obj/machinery/recharger, +/turf/open/floor/carpet/green, +/area/station/command/heads_quarters/hop) +"iLZ" = ( +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/turf/open/floor/iron/dark, +/area/station/command/corporate_showroom) +"iMc" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/effect/mapping_helpers/damaged_window, +/turf/open/floor/plating, +/area/station/maintenance/port/lesser) +"iMk" = ( +/obj/structure/chair/sofa/bench/left{ + dir = 4 + }, +/obj/effect/turf_decal/tile/purple/half/contrasted{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/station/science/lobby) +"iMq" = ( +/turf/closed/wall, +/area/station/medical/morgue) +"iMD" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/turf/open/floor/wood/tile, +/area/station/service/bar) +"iMK" = ( +/obj/structure/cable, +/obj/effect/turf_decal/trimline/yellow/filled/corner{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/engineering/gravity_generator) +"iMT" = ( +/obj/effect/spawner/random/trash/mess, +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/obj/effect/turf_decal/sand/plating, +/turf/open/floor/plating, +/area/station/maintenance/department/medical) +"iNa" = ( +/obj/effect/turf_decal/stripes{ + dir = 8 + }, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"iNh" = ( +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/station/engineering/storage) +"iNj" = ( +/obj/machinery/light/small/directional/east, +/turf/open/openspace, +/area/station/engineering/main) +"iNq" = ( +/obj/machinery/hydroponics/soil, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/turf/open/floor/grass, +/area/station/security/prison/garden) +"iNv" = ( +/obj/machinery/door/airlock/maintenance_hatch, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden, +/obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, +/turf/open/floor/catwalk_floor, +/area/station/maintenance/disposal/incinerator) +"iNC" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/item/radio/intercom/directional/south, +/turf/open/floor/iron/dark, +/area/station/science/ordnance/testlab) +"iNT" = ( +/obj/effect/turf_decal/tile/blue/anticorner/contrasted{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/security/courtroom) +"iNU" = ( +/obj/item/stack/tile/rglass/sixty, +/obj/item/fuel_pellet, +/obj/structure/closet/crate/engineering, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/port/greater) +"iNY" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/machinery/light_switch/directional/east, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/wood/tile, +/area/station/service/chapel) +"iOc" = ( +/obj/effect/turf_decal/tile/yellow, +/obj/structure/sign/poster/official/random/directional/east, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) +"iOk" = ( +/obj/machinery/door/airlock/research{ + autoclose = 0; + frequency = 1449; + id_tag = "xeno_airlock_interior"; + name = "Xenobiology Lab Internal Airlock" + }, +/obj/effect/mapping_helpers/airlock/locked, +/obj/structure/cable, +/obj/effect/mapping_helpers/airlock/access/all/science/xenobio, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/catwalk_floor/flat_white, +/area/station/science/xenobiology) +"iOE" = ( +/obj/item/pickaxe/mini, +/turf/open/misc/asteroid, +/area/station/asteroid) +"iOH" = ( +/obj/machinery/meter, +/obj/machinery/atmospherics/pipe/smart/simple/purple/visible{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/turf/open/floor/iron/dark, +/area/station/science/ordnance) +"iON" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/white, +/area/station/medical/chemistry/minisat) +"iOP" = ( +/obj/machinery/holopad, +/obj/effect/turf_decal/trimline/yellow/filled/corner, +/turf/open/floor/iron, +/area/station/engineering/lobby) +"iPd" = ( +/obj/machinery/firealarm/directional/north, +/turf/open/floor/carpet/executive, +/area/station/command/corporate_showroom) +"iPm" = ( +/obj/structure/rack, +/obj/effect/turf_decal/trimline/yellow/filled/line, +/obj/item/analyzer{ + pixel_y = 3 + }, +/obj/effect/spawner/random/engineering/toolbox, +/obj/machinery/newscaster/directional/south, +/turf/open/floor/iron, +/area/station/engineering/lobby) +"iPp" = ( +/obj/structure/chair/sofa/bench/left{ + dir = 8 + }, +/obj/machinery/newscaster/directional/south, +/turf/open/floor/iron, +/area/station/hallway/primary/fore) +"iPu" = ( +/obj/machinery/light/dim/directional/north, +/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ + dir = 8 + }, +/obj/effect/turf_decal/tile/yellow{ + dir = 4 + }, +/turf/open/floor/iron/dark/corner{ + dir = 1 + }, +/area/station/engineering/atmos/pumproom) +"iPw" = ( +/obj/machinery/power/apc/auto_name/directional/north, +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/disposal) +"iPz" = ( +/obj/effect/turf_decal/stripes/line, +/obj/structure/window/reinforced/survival_pod/spawner/directional/south, +/obj/structure/table, +/obj/machinery/cell_charger, +/obj/item/stock_parts/power_store/cell/high, +/obj/effect/turf_decal/bot{ + dir = 1 + }, +/obj/machinery/airalarm/directional/west, +/turf/open/floor/iron, +/area/station/command/gateway) +"iPH" = ( +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/aisat/foyer) +"iPQ" = ( +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/aisat/teleporter) +"iPS" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/command/corporate_showroom) +"iPW" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/tank/oxygen{ + dir = 8 + }, +/turf/open/floor/plating, +/area/station/maintenance/department/science) +"iQt" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/spawner/random/trash/food_packaging, +/turf/open/floor/iron/textured, +/area/station/maintenance/department/medical/central) +"iQD" = ( +/obj/structure/railing, +/obj/machinery/camera/motion/directional/north{ + c_tag = "AI Sat - Lower Right Exterior"; + network = list("minisat") + }, +/turf/open/floor/iron/stairs{ + dir = 8 + }, +/area/station/ai_monitored/turret_protected/aisat/foyer) +"iQJ" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/engineering/main) +"iQS" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/machinery/bluespace_vendor/directional/north, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"iQZ" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/science/research) +"iRm" = ( +/obj/effect/spawner/random/structure/barricade, +/turf/open/misc/asteroid/airless, +/area/station/asteroid) +"iRp" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/structure/table/reinforced, +/obj/item/newspaper, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/aisat/foyer) +"iRB" = ( +/obj/effect/turf_decal/tile/dark_blue/half/contrasted{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/command/bridge) +"iRG" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/landmark/start/assistant, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/commons/fitness/recreation) +"iRL" = ( +/obj/structure/sink/kitchen/directional/east, +/turf/open/floor/iron/kitchen, +/area/station/service/kitchen) +"iRR" = ( +/obj/structure/cable, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 1 + }, +/turf/open/floor/iron/textured, +/area/station/security/warden) +"iSz" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/spawner/random/trash, +/turf/open/floor/plating, +/area/station/maintenance/department/science) +"iSD" = ( +/turf/closed/wall/r_wall, +/area/station/science/xenobiology/hallway) +"iSE" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/firealarm/directional/west, +/obj/machinery/atmospherics/pipe/multiz/scrubbers/visible/layer2, +/obj/machinery/atmospherics/pipe/multiz/supply/hidden/layer4, +/obj/effect/turf_decal/stripes{ + dir = 6 + }, +/turf/open/floor/plating, +/area/station/command/bridge) +"iSH" = ( +/obj/structure/rack, +/obj/item/reagent_containers/cup/bottle/ethanol{ + pixel_x = -6 + }, +/obj/item/reagent_containers/cup/bottle/hydrogen, +/obj/item/reagent_containers/cup/bottle/copper{ + pixel_x = 6 + }, +/obj/machinery/light/very_dim/directional/south, +/turf/open/floor/iron/dark/textured_edge{ + dir = 1 + }, +/area/station/medical/pharmacy) +"iSU" = ( +/obj/effect/spawner/random/structure/crate, +/turf/open/misc/asteroid, +/area/station/maintenance/department/science) +"iTa" = ( +/obj/machinery/power/terminal{ + dir = 8 + }, +/obj/structure/cable, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/engineering/main) +"iTA" = ( +/obj/structure/railing/corner{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"iTF" = ( +/obj/structure/cable, +/obj/effect/turf_decal/trimline/purple/filled/arrow_ccw{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/purple/filled/arrow_ccw{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/item/radio/intercom/directional/east, +/turf/open/floor/iron/white/smooth_large, +/area/station/science/xenobiology/hallway) +"iTL" = ( +/obj/structure/falsewall, +/turf/open/floor/plating, +/area/station/commons/storage/art) +"iTU" = ( +/obj/structure/window/reinforced/plasma/spawner/directional/north, +/obj/machinery/power/energy_accumulator/grounding_rod/anchored, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/green/visible, +/turf/open/floor/engine, +/area/station/engineering/supermatter) +"iTW" = ( +/obj/machinery/door/airlock/public/glass{ + name = "Locker Room" + }, +/obj/machinery/door/firedoor, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/commons/locker) +"iUF" = ( +/obj/structure/lattice, +/obj/effect/spawner/random/structure/grille, +/turf/open/space/basic, +/area/space/nearstation) +"iUJ" = ( +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/turf/open/floor/iron/stairs/right{ + dir = 8 + }, +/area/station/science/lab) +"iUV" = ( +/obj/effect/spawner/random/armory/shotgun, +/obj/structure/rack, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/security/armory) +"iVg" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/circuit/green, +/area/station/ai_monitored/turret_protected/ai_upload) +"iVp" = ( +/obj/machinery/modular_computer/preset/research, +/obj/effect/turf_decal/tile/neutral/opposingcorners{ + dir = 1 + }, +/obj/effect/turf_decal/siding/purple, +/turf/open/floor/iron/dark, +/area/station/command/heads_quarters/rd) +"iVG" = ( +/obj/item/tank/internals/oxygen, +/obj/structure/rack, +/obj/effect/decal/cleanable/dirt/dust, +/obj/item/radio/intercom/directional/south, +/turf/open/floor/iron/white, +/area/station/medical/chemistry/minisat) +"iVJ" = ( +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/abandoned, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 8 + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, +/turf/open/floor/plating, +/area/station/maintenance/aft/upper) +"iVK" = ( +/obj/machinery/camera/autoname/directional/north{ + network = list("minisat") + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/aisat/foyer) +"iVY" = ( +/obj/structure/lattice/catwalk, +/obj/machinery/light/directional/east, +/turf/open/openspace, +/area/station/engineering/supermatter/room) +"iWn" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 10 + }, +/obj/effect/spawner/random/vending/snackvend, +/obj/machinery/camera/directional/south, +/turf/open/floor/iron, +/area/station/engineering/main) +"iWu" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/cargo/miningoffice) +"iWO" = ( +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/commons/storage/art) +"iWV" = ( +/obj/effect/turf_decal/sand/plating, +/turf/open/floor/plating/airless, +/area/station/maintenance/department/science) +"iXj" = ( +/obj/effect/spawner/structure/window/reinforced/tinted, +/turf/open/floor/plating, +/area/station/security/courtroom) +"iXk" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/obj/machinery/door/poddoor/preopen{ + id = "bridgespace" + }, +/turf/open/floor/glass/reinforced, +/area/station/command/meeting_room) +"iXn" = ( +/obj/item/radio/intercom/directional/north, +/obj/effect/turf_decal/siding/purple{ + dir = 4 + }, +/obj/structure/closet/emcloset, +/turf/open/floor/iron/white/textured_corner{ + dir = 8 + }, +/area/station/science/xenobiology) +"iXp" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/sand/plating, +/turf/open/floor/plating, +/area/station/maintenance/department/science) +"iXv" = ( +/turf/open/floor/glass/reinforced, +/area/station/science/genetics) +"iXx" = ( +/obj/structure/railing/corner{ + dir = 8 + }, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/ai_monitored/turret_protected/aisat/foyer) +"iXA" = ( +/obj/machinery/door/airlock/research/glass{ + name = "Chemistry Minisat" + }, +/obj/effect/mapping_helpers/airlock/access/all/medical/chemistry, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/yellow/filled/corner, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/white, +/area/station/medical/chemistry/minisat) +"iXB" = ( +/obj/structure/cable, +/obj/effect/turf_decal/siding/purple, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/catwalk_floor/flat_white, +/area/station/science/xenobiology) +"iXR" = ( +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/engineering/supermatter/room) +"iYb" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/trash/mess, +/obj/structure/sign/warning/biohazard/directional/east, +/turf/open/floor/iron/white, +/area/station/maintenance/aft/upper) +"iYB" = ( +/obj/machinery/door/airlock/command{ + name = "Chief Medical Officer's Office" + }, +/obj/effect/mapping_helpers/airlock/access/all/medical/cmo, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/command/heads_quarters/cmo) +"iYC" = ( +/obj/machinery/telecomms/processor/preset_four, +/turf/open/floor/circuit/green/telecomms/mainframe, +/area/station/tcommsat/server) +"iYO" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/dark_blue/opposingcorners, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/command/bridge) +"iYS" = ( +/obj/effect/turf_decal/tile/red/anticorner/contrasted{ + dir = 4 + }, +/obj/machinery/disposal/bin, +/obj/machinery/light/directional/east, +/obj/structure/disposalpipe/trunk, +/obj/machinery/light_switch/directional/north, +/turf/open/floor/iron, +/area/station/security) +"iZa" = ( +/turf/closed/wall/r_wall, +/area/station/engineering/atmos/upper) +"iZr" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/airalarm/directional/south, +/turf/open/floor/plating, +/area/station/maintenance/central/greater) +"iZz" = ( +/obj/structure/lattice, +/turf/open/openspace, +/area/station/hallway/primary/central) +"iZW" = ( +/obj/effect/turf_decal/siding/purple{ + dir = 1 + }, +/obj/machinery/light/small/dim/directional/north, +/turf/open/floor/iron/white/smooth_large, +/area/station/science/research) +"jaa" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/structure/sign/directions/command/directional/north, +/obj/structure/sign/directions/engineering/directional/north{ + pixel_y = 40; + dir = 4 + }, +/obj/structure/sign/directions/security/directional/north{ + pixel_y = 24; + dir = 8 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"jac" = ( +/obj/structure/cable, +/obj/effect/spawner/random/trash/garbage{ + spawn_scatter_radius = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/maintenance/central/lesser) +"jaf" = ( +/obj/structure/table/wood, +/obj/item/flashlight/lamp/green, +/turf/open/floor/wood/parquet, +/area/station/medical/psychology) +"jak" = ( +/obj/machinery/atmospherics/pipe/smart/simple/purple/visible{ + dir = 9 + }, +/turf/open/floor/iron, +/area/station/engineering/atmos) +"jam" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/science/lobby) +"jaJ" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/engine, +/area/station/command/corporate_dock) +"jaV" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/dark/hidden, +/turf/open/floor/engine, +/area/station/science/xenobiology) +"jbc" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/hallway/primary/fore) +"jbi" = ( +/obj/effect/turf_decal/siding/wood, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/wood/tile, +/area/station/service/bar) +"jbo" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/obj/machinery/power/apc/auto_name/directional/north, +/turf/open/floor/plating, +/area/station/maintenance/department/medical) +"jbq" = ( +/obj/structure/railing{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/hallway/secondary/exit/departure_lounge) +"jbG" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 1 + }, +/obj/machinery/newscaster/directional/north, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) +"jbK" = ( +/obj/structure/table, +/obj/item/reagent_containers/cup/beaker{ + pixel_x = 5 + }, +/obj/item/reagent_containers/condiment/enzyme, +/turf/open/floor/iron/kitchen, +/area/station/service/kitchen) +"jbM" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/structure/table/reinforced, +/obj/item/ai_module/toy_ai{ + pixel_x = 16; + pixel_y = 8 + }, +/obj/item/paper_bin/construction{ + pixel_y = 6 + }, +/obj/item/pen, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/aisat/foyer) +"jbP" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/light/small/directional/west, +/obj/structure/moisture_trap, +/turf/open/floor/iron, +/area/station/maintenance/central/greater) +"jbR" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 8 + }, +/obj/machinery/light/warm/directional/west, +/obj/item/storage/fancy/coffee_condi_display, +/obj/structure/table, +/turf/open/floor/iron/white, +/area/station/medical/paramedic) +"jbV" = ( +/obj/structure/plasticflaps, +/obj/machinery/conveyor{ + dir = 4; + id = "QMLoad2" + }, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/plating, +/area/station/cargo/storage) +"jch" = ( +/obj/structure/table, +/obj/item/fuel_pellet, +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 1 + }, +/obj/machinery/airalarm/directional/north, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/cargo/drone_bay) +"jco" = ( +/obj/machinery/vending/tool, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 5 + }, +/turf/open/floor/iron, +/area/station/engineering/lobby) +"jcG" = ( +/obj/machinery/light/warm/directional/north, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"jcL" = ( +/obj/machinery/power/apc/auto_name/directional/north, +/obj/machinery/computer/records/security, +/obj/structure/cable, +/turf/open/floor/carpet, +/area/station/security/detectives_office) +"jcR" = ( +/obj/structure/chair/sofa/bench/left{ + dir = 4 + }, +/obj/machinery/bluespace_vendor/directional/west, +/turf/open/floor/iron/textured_large, +/area/station/hallway/primary/central) +"jcW" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/machinery/light_switch/directional/east, +/obj/machinery/computer/communications{ + dir = 8 + }, +/turf/open/floor/carpet/royalblue, +/area/station/command/heads_quarters/captain/private) +"jdd" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/maintenance/solars/port) +"jdg" = ( +/obj/machinery/computer/bank_machine{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/bot_white, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/command/nuke_storage) +"jdl" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/turf/open/floor/glass/reinforced, +/area/station/service/library) +"jdn" = ( +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 1 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/textured, +/area/station/security/processing) +"jdo" = ( +/obj/machinery/camera/directional/south{ + c_tag = "Atmospherics Tank - Nitrogen" + }, +/turf/open/floor/engine/n2, +/area/station/engineering/atmos) +"jds" = ( +/obj/structure/table, +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 8 + }, +/obj/machinery/light/small/directional/east, +/obj/item/pickaxe, +/turf/open/floor/iron, +/area/station/cargo/miningoffice) +"jdK" = ( +/obj/effect/turf_decal/siding/thinplating_new, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron, +/area/station/maintenance/department/cargo) +"jdP" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/plating, +/area/station/maintenance/central/lesser) +"jdW" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners{ + dir = 1 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/command/heads_quarters/rd) +"jea" = ( +/obj/effect/turf_decal/bot_white, +/obj/effect/spawner/random/maintenance, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/cargo/storage) +"jej" = ( +/obj/structure/cable, +/obj/effect/turf_decal/siding/purple{ + dir = 1 + }, +/turf/open/floor/catwalk_floor/flat_white, +/area/station/science/xenobiology) +"jer" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/obj/effect/landmark/event_spawn, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"jex" = ( +/obj/structure/chair/wood, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/carpet, +/area/station/service/chapel/funeral) +"jez" = ( +/obj/structure/sink/directional/north, +/obj/machinery/airalarm/directional/south, +/turf/open/floor/iron/freezer, +/area/station/security/prison/shower) +"jeL" = ( +/obj/machinery/suit_storage_unit/standard_unit, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/delivery, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/command/storage/eva) +"jeV" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 8 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/white, +/area/station/medical/chemistry) +"jeY" = ( +/obj/structure/railing/corner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/yellow/filled/corner{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/engineering/main) +"jfb" = ( +/obj/structure/transit_tube/curved{ + dir = 1 + }, +/obj/structure/lattice, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/space/basic, +/area/space/nearstation) +"jfm" = ( +/obj/machinery/light/directional/south, +/obj/effect/turf_decal/tile/neutral, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"jfo" = ( +/obj/effect/turf_decal/stripes{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/engineering/atmospherics_engine) +"jfr" = ( +/obj/effect/spawner/random/trash/garbage{ + spawn_loot_count = 3; + spawn_scatter_radius = 1 + }, +/obj/machinery/light/floor, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/maintenance/department/medical/central) +"jfB" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners{ + dir = 1 + }, +/obj/effect/turf_decal/siding/purple, +/turf/open/floor/iron/dark, +/area/station/command/heads_quarters/rd) +"jfD" = ( +/turf/open/floor/iron/white/smooth_corner{ + dir = 4 + }, +/area/station/science/xenobiology) +"jfE" = ( +/obj/effect/turf_decal/tile/red/fourcorners, +/obj/structure/bed{ + dir = 1 + }, +/obj/item/bedsheet/red{ + dir = 4 + }, +/obj/machinery/light/small/dim/directional/west, +/turf/open/floor/iron/white, +/area/station/security/prison/safe) +"jfL" = ( +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/security/execution/transfer) +"jge" = ( +/obj/effect/spawner/random/structure/crate, +/obj/item/clothing/glasses/meson, +/turf/open/floor/plating, +/area/station/maintenance/department/engine) +"jgl" = ( +/obj/structure/table, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/item/holosign_creator/atmos, +/turf/open/floor/iron/dark, +/area/station/science/ordnance) +"jgs" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/engineering/atmos/upper) +"jgA" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/sign/warning/cold_temp, +/turf/open/floor/glass/reinforced, +/area/station/science/xenobiology) +"jgB" = ( +/obj/structure/closet/emcloset, +/obj/effect/landmark/start/hangover/closet, +/obj/item/radio/intercom/directional/south, +/turf/open/floor/iron/textured, +/area/station/hallway/primary/central) +"jgC" = ( +/obj/effect/mapping_helpers/airlock/access/all/service/theatre, +/obj/machinery/door/airlock{ + name = "Clown's Backstage Room" + }, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/wood/parquet, +/area/station/service/theater) +"jgH" = ( +/obj/machinery/holopad, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/iron/white, +/area/station/medical/patients_rooms/room_a) +"jgZ" = ( +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 1 + }, +/obj/item/radio/intercom/directional/north, +/obj/machinery/modular_computer/preset/cargochat/cargo, +/turf/open/floor/iron, +/area/station/cargo/storage) +"jha" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 1 + }, +/turf/open/floor/iron/white, +/area/station/medical/storage) +"jhc" = ( +/obj/docking_port/stationary/mining_home/common, +/turf/open/floor/plating, +/area/station/hallway/secondary/entry) +"jhe" = ( +/obj/effect/spawner/structure/window, +/turf/open/floor/plating, +/area/station/commons/storage/tools) +"jhj" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/light/directional/east, +/turf/open/floor/iron/dark/side{ + dir = 5 + }, +/area/station/command/corporate_dock) +"jhl" = ( +/obj/structure/transport/linear/public, +/obj/effect/landmark/transport/transport_id{ + specific_transport_id = "dumbwaiter_lift" + }, +/obj/machinery/smartfridge, +/obj/effect/turf_decal/tile/blue, +/obj/effect/turf_decal/tile/green{ + dir = 4 + }, +/turf/open/openspace, +/area/station/service/hydroponics) +"jhG" = ( +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/maintenance/aft/upper) +"jhK" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/science/robotics/mechbay) +"jih" = ( +/obj/item/trash/spacers_sidekick, +/turf/open/floor/plating, +/area/station/maintenance/port/lesser) +"jij" = ( +/turf/closed/wall/r_wall, +/area/station/commons/storage/primary) +"jim" = ( +/turf/open/floor/iron/white, +/area/station/science/explab) +"jin" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/cable, +/turf/open/floor/iron/white, +/area/station/medical/chemistry/minisat) +"jir" = ( +/obj/machinery/door/airlock/maintenance_hatch, +/obj/effect/mapping_helpers/airlock/access/all/supply/general, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 1 + }, +/turf/open/misc/asteroid, +/area/station/cargo/storage) +"jit" = ( +/obj/effect/mapping_helpers/burnt_floor, +/obj/structure/table/wood, +/obj/item/paper_bin, +/obj/item/pen, +/obj/effect/spawner/random/entertainment/cigarette_pack{ + pixel_x = -12 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/grimy, +/area/station/security/detectives_office/private_investigators_office) +"jiv" = ( +/obj/machinery/door/airlock/mining{ + name = "Cargo Bathroom" + }, +/obj/effect/mapping_helpers/airlock/access/all/supply/general, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/showroomfloor, +/area/station/cargo/storage) +"jiw" = ( +/turf/open/floor/iron/white/smooth_edge, +/area/station/science/research) +"jiy" = ( +/obj/machinery/disposal/bin, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 8 + }, +/obj/machinery/camera/autoname/directional/west, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/security/breakroom) +"jiz" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/wood, +/area/station/service/theater) +"jiN" = ( +/obj/docking_port/stationary/syndicate, +/turf/open/space/openspace, +/area/space) +"jiP" = ( +/obj/effect/turf_decal/sand/plating, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/turf/open/floor/plating, +/area/station/asteroid) +"jjp" = ( +/obj/item/reagent_containers/cup/bottle/fake_gbs, +/turf/closed/mineral/random/stationside/asteroid/porus{ + mineralChance = 20 + }, +/area/station/asteroid) +"jjF" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/wood, +/area/station/service/library) +"jjG" = ( +/obj/machinery/power/emitter/welded, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/engineering/supermatter/room) +"jjI" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/command/heads_quarters/ce) +"jjN" = ( +/obj/effect/turf_decal/tile/red/half/contrasted, +/obj/machinery/camera/autoname/directional/south, +/turf/open/floor/iron, +/area/station/hallway/primary/fore) +"jjO" = ( +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 8 + }, +/obj/machinery/portable_atmospherics/canister/nitrogen, +/obj/effect/turf_decal/bot{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/supermatter/room) +"jjQ" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/atmospherics_engine) +"jjS" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/rack, +/obj/effect/spawner/random/entertainment/cigarette_pack, +/turf/open/floor/wood/parquet, +/area/station/cargo/boutique) +"jjX" = ( +/obj/effect/turf_decal/tile/yellow{ + dir = 8 + }, +/obj/machinery/atmospherics/components/binary/crystallizer{ + dir = 1 + }, +/obj/effect/turf_decal/delivery, +/obj/machinery/light/directional/west, +/turf/open/floor/iron/dark/corner{ + dir = 1 + }, +/area/station/engineering/atmos/upper) +"jka" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 1 + }, +/obj/structure/closet/secure_closet/medical1, +/turf/open/floor/iron/white, +/area/station/medical/paramedic) +"jkc" = ( +/obj/structure/bed{ + dir = 1 + }, +/obj/effect/spawner/random/bedsheet{ + dir = 1 + }, +/obj/item/pillow/random, +/turf/open/floor/carpet, +/area/station/commons/dorms) +"jke" = ( +/obj/structure/sign/poster/contraband/random/directional/north, +/obj/effect/mapping_helpers/burnt_floor, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/maintenance/department/engine) +"jkv" = ( +/obj/structure/closet/secure_closet/security/sec, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 1 + }, +/obj/machinery/digital_clock/directional/north, +/turf/open/floor/iron/dark, +/area/station/security/lockers) +"jky" = ( +/obj/machinery/atmospherics/components/unary/outlet_injector/on{ + dir = 8 + }, +/turf/open/floor/engine/xenobio, +/area/station/science/xenobiology) +"jkF" = ( +/obj/structure/table/reinforced, +/obj/effect/turf_decal/tile/dark_red/opposingcorners, +/obj/machinery/door/firedoor, +/obj/machinery/computer/security/telescreen/entertainment/directional/north, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/turf/open/floor/iron/dark, +/area/station/service/bar) +"jkG" = ( +/obj/effect/turf_decal/siding/wood/end{ + dir = 4 + }, +/obj/item/radio/intercom/directional/south, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/wood/tile, +/area/station/commons/dorms) +"jkL" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 8 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/hallway/secondary/entry) +"jlb" = ( +/obj/structure/table/reinforced/rglass, +/obj/machinery/computer/records/medical/laptop{ + dir = 4; + pixel_y = 1 + }, +/turf/open/floor/holofloor/dark, +/area/station/command/heads_quarters/cmo) +"jlc" = ( +/obj/structure/railing/corner{ + dir = 4 + }, +/obj/structure/table, +/obj/effect/turf_decal/tile/red/anticorner/contrasted{ + dir = 1 + }, +/obj/item/reagent_containers/cup/bottle/facid{ + pixel_y = 5; + pixel_x = -5 + }, +/obj/item/reagent_containers/cup/bottle/toxin{ + pixel_x = 6; + pixel_y = 8 + }, +/obj/item/reagent_containers/cup/bottle/morphine{ + pixel_x = -4; + pixel_y = 1 + }, +/obj/item/reagent_containers/cup/bottle/morphine{ + pixel_x = 5; + pixel_y = 1 + }, +/obj/item/reagent_containers/dropper, +/obj/item/reagent_containers/syringe{ + pixel_y = 5 + }, +/obj/item/reagent_containers/syringe{ + pixel_y = 5 + }, +/obj/item/assembly/signaler{ + pixel_x = -3; + pixel_y = -12 + }, +/turf/open/floor/iron/dark, +/area/station/security/execution/education) +"jle" = ( +/obj/structure/chair{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured, +/area/station/security/interrogation) +"jlg" = ( +/obj/effect/turf_decal/box/white{ + color = "#9FED58" + }, +/turf/open/floor/engine, +/area/station/engineering/atmospherics_engine) +"jlp" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/landmark/start/hangover, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"jlw" = ( +/obj/structure/window/reinforced/spawner/directional/north, +/obj/machinery/vending/coffee, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/dark, +/area/station/command/bridge) +"jlC" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/iron, +/area/station/security/warden) +"jlI" = ( +/obj/machinery/camera/autoname/directional/south, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/command/corporate_dock) +"jlW" = ( +/turf/open/floor/iron/freezer, +/area/station/security/prison/shower) +"jmh" = ( +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 1 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/station/security/brig/entrance) +"jmn" = ( +/obj/effect/spawner/random/trash/grille_or_waste, +/turf/open/floor/plating, +/area/station/maintenance/central/lesser) +"jmp" = ( +/mob/living/simple_animal/hostile/ooze/gelatinous, +/turf/open/misc/asteroid, +/area/station/asteroid) +"jmu" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"jmP" = ( +/obj/machinery/computer/pod/old/mass_driver_controller/trash{ + pixel_x = -24; + id = "captaindriver" + }, +/obj/effect/turf_decal/stripes/corner, +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/turf/open/floor/engine, +/area/station/command/heads_quarters/captain/private) +"jmU" = ( +/obj/effect/landmark/start/head_of_security, +/obj/machinery/light/small/directional/east, +/obj/structure/bed/double, +/obj/item/bedsheet/hos/double, +/turf/open/floor/carpet/red, +/area/station/command/heads_quarters/hos) +"jmY" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/department/science) +"jnm" = ( +/obj/structure/table/wood/fancy, +/obj/effect/spawner/random/food_or_drink/snack, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/turf/open/floor/wood/tile, +/area/station/service/bar) +"jnw" = ( +/obj/machinery/light/small/directional/south, +/turf/open/floor/engine, +/area/station/science/auxlab/firing_range) +"jnE" = ( +/obj/structure/table, +/obj/item/binoculars, +/turf/open/floor/catwalk_floor/iron_white, +/area/station/science/ordnance/testlab) +"jnG" = ( +/obj/machinery/light/directional/east, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/command/corporate_dock) +"jnL" = ( +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 1 + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, +/obj/effect/mapping_helpers/airlock/abandoned, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/maintenance/central/greater) +"jnP" = ( +/obj/machinery/mech_bay_recharge_port{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/siding/brown{ + dir = 6 + }, +/turf/open/floor/iron/textured, +/area/station/cargo/storage) +"jnY" = ( +/obj/effect/spawner/structure/window/reinforced/plasma, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/engineering/supermatter/room) +"joa" = ( +/obj/effect/turf_decal/plaque{ + icon_state = "L6" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"job" = ( +/obj/machinery/door/airlock{ + id_tag = "Toilet_Research"; + name = "Bathroom" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/service/theater) +"joo" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/port/greater) +"joB" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/maintenance/port/lesser) +"joD" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/camera/autoname/directional/north{ + network = list("ss13","rd") + }, +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk, +/turf/open/floor/iron/dark, +/area/station/science/ordnance) +"joH" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/medical/treatment_center) +"joL" = ( +/obj/machinery/computer/gateway_control{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/command/gateway) +"joM" = ( +/turf/open/floor/glass/reinforced/airless, +/area/space/nearstation) +"joQ" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/item/radio/intercom/directional/south, +/turf/open/floor/iron, +/area/station/commons/fitness/recreation) +"joW" = ( +/obj/machinery/door/window/brigdoor/right/directional/north{ + req_access = list("xenobiology") + }, +/obj/machinery/door/window/brigdoor/left/directional/south{ + req_access = list("xenobiology") + }, +/obj/machinery/door/poddoor/preopen{ + id = "xenobio7"; + name = "Xenobio Pen 7 Blast Door" + }, +/turf/open/floor/engine, +/area/station/science/xenobiology) +"jpc" = ( +/obj/effect/turf_decal/tile/red/anticorner/contrasted{ + dir = 1 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/light_switch/directional/west, +/turf/open/floor/iron, +/area/station/security/interrogation) +"jpd" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/structure/closet/secure_closet/captains, +/obj/machinery/firealarm/directional/north, +/turf/open/floor/carpet/royalblue, +/area/station/command/heads_quarters/captain/private) +"jpe" = ( +/turf/open/floor/iron/white/smooth_corner{ + dir = 8 + }, +/area/station/science/xenobiology) +"jpg" = ( +/obj/structure/sign/poster/official/random/directional/south, +/obj/item/kirbyplants/organic/plant3, +/turf/open/floor/iron/textured, +/area/station/hallway/primary/central) +"jpn" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/commons/locker) +"jpx" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/shreds, +/turf/open/floor/iron, +/area/station/cargo/warehouse/upper) +"jpD" = ( +/obj/effect/spawner/random/trash/mess, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/iron/showroomfloor, +/area/station/engineering/main) +"jpV" = ( +/obj/effect/landmark/start/librarian, +/turf/open/floor/wood/parquet, +/area/station/service/library) +"jpW" = ( +/obj/structure/table/wood, +/obj/effect/turf_decal/tile/red/anticorner/contrasted{ + dir = 4 + }, +/obj/item/folder/red, +/turf/open/floor/iron, +/area/station/security/courtroom) +"jpZ" = ( +/obj/machinery/door/firedoor, +/obj/structure/disposalpipe/segment, +/turf/open/floor/wood, +/area/station/commons/lounge) +"jqd" = ( +/obj/structure/closet/secure_closet/hos, +/obj/item/food/sandwich/philly_cheesesteak, +/turf/open/floor/carpet/red, +/area/station/command/heads_quarters/hos) +"jqj" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"jqk" = ( +/obj/effect/mapping_helpers/airlock/access/all/science/xenobio, +/obj/machinery/door/airlock/research{ + name = "Xenobiology" + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper, +/obj/machinery/door/poddoor/preopen{ + id = "xeno_blastdoor"; + name = "Biohazard Containment Door" + }, +/obj/structure/cable, +/obj/effect/turf_decal/trimline/purple/filled/end{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/white/smooth_large, +/area/station/science/research) +"jql" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 + }, +/obj/machinery/plumbing/receiver, +/obj/effect/turf_decal/trimline/yellow/filled/warning, +/turf/open/floor/iron/white, +/area/station/medical/chemistry) +"jqu" = ( +/obj/structure/table/reinforced, +/obj/item/pinpointer/nuke, +/obj/item/disk/nuclear, +/turf/open/floor/carpet/executive, +/area/station/command/heads_quarters/captain/private) +"jqz" = ( +/obj/machinery/vending/cigarette, +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"jqC" = ( +/obj/effect/turf_decal/tile/brown/half/contrasted, +/obj/item/banner/cargo/mundane, +/obj/effect/decal/cleanable/dirt, +/obj/item/radio/intercom/directional/south, +/turf/open/floor/iron, +/area/station/cargo/storage) +"jqD" = ( +/obj/machinery/teleport/station, +/obj/machinery/light/cold/directional/south, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/aisat/teleporter) +"jqT" = ( +/obj/structure/chair{ + dir = 4 + }, +/obj/effect/landmark/start/head_of_personnel, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/command/heads_quarters/hop) +"jqY" = ( +/obj/machinery/portable_atmospherics/canister/carbon_dioxide, +/turf/open/floor/iron/white/smooth_large, +/area/station/science/ordnance/storage) +"jrd" = ( +/obj/effect/turf_decal/tile/purple/half/contrasted{ + dir = 1 + }, +/obj/effect/decal/cleanable/blood/old, +/turf/open/floor/iron/white, +/area/station/science/lobby) +"jrm" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/dark, +/area/station/medical/chemistry/minisat) +"jrn" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/spawner/random/trash/mess, +/obj/structure/sign/poster/contraband/random/directional/south, +/turf/open/floor/wood, +/area/station/maintenance/central/lesser) +"jrX" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/maintenance/central/lesser) +"jrY" = ( +/obj/structure/reagent_dispensers/watertank, +/turf/open/floor/plating, +/area/station/maintenance/port/lesser) +"jsn" = ( +/obj/effect/turf_decal/stripes/corner, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/sign/warning/chem_diamond/directional/north, +/obj/structure/extinguisher_cabinet/directional/west, +/turf/open/floor/iron/dark, +/area/station/medical/chemistry/minisat) +"jsr" = ( +/obj/structure/window/reinforced/spawner/directional/east, +/obj/machinery/light/directional/north, +/turf/open/floor/engine, +/area/station/science/xenobiology) +"jss" = ( +/obj/effect/turf_decal/tile/neutral, +/obj/structure/chair/sofa/bench/left{ + dir = 1 + }, +/obj/effect/landmark/start/assistant, +/turf/open/floor/iron, +/area/station/commons/fitness/recreation) +"jsC" = ( +/turf/closed/wall/r_wall, +/area/station/maintenance/department/medical/central) +"jsL" = ( +/obj/effect/turf_decal/bot{ + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/portables_connector/visible, +/obj/machinery/firealarm/directional/north, +/turf/open/floor/iron/dark, +/area/station/engineering/supermatter/room) +"jsU" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/corner{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/holofloor/dark, +/area/station/command/heads_quarters/cmo) +"jsX" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 4 + }, +/obj/machinery/firealarm/directional/east, +/turf/open/floor/iron/white, +/area/station/hallway/secondary/entry) +"jtc" = ( +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"jtd" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/disposal) +"jtv" = ( +/obj/structure/chair/plastic, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/turf_decal/sand/plating, +/obj/machinery/light/small/dim/directional/north, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"jtw" = ( +/obj/effect/spawner/random/structure/crate_abandoned, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/aft/upper) +"jtR" = ( +/obj/structure/flora/bush/sunny/style_random, +/turf/open/floor/grass, +/area/station/hallway/primary/central) +"jtS" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/engineering/main) +"juf" = ( +/obj/effect/turf_decal/tile/neutral, +/obj/effect/spawner/random/structure/table, +/obj/machinery/airalarm/directional/south, +/obj/item/storage/medkit/brute, +/turf/open/floor/iron, +/area/station/commons/fitness/recreation) +"juh" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/structure/table/reinforced, +/obj/item/analyzer, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/aisat/foyer) +"jui" = ( +/obj/item/radio/intercom/directional/north, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/chair/sofa/bench/right{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/hallway/secondary/exit/departure_lounge) +"juw" = ( +/turf/closed/wall/r_wall, +/area/station/command/corporate_showroom) +"juD" = ( +/obj/effect/turf_decal/tile/red/opposingcorners, +/turf/open/floor/iron, +/area/station/security/brig/entrance) +"juR" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/turf/open/floor/wood/parquet, +/area/station/cargo/boutique) +"juU" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/command/corporate_showroom) +"juV" = ( +/obj/structure/railing, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 6 + }, +/obj/item/radio/intercom/directional/east, +/turf/open/floor/iron, +/area/station/engineering/main) +"juZ" = ( +/obj/structure/table/wood, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/turf/open/floor/carpet/purple, +/area/station/service/library) +"jvd" = ( +/obj/structure/cable, +/obj/effect/landmark/start/paramedic, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/white, +/area/station/medical/paramedic) +"jvn" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/iron, +/area/station/engineering/atmos/upper) +"jvt" = ( +/obj/structure/closet/secure_closet/chemical, +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/turf/open/floor/iron/textured_large, +/area/station/medical/treatment_center) +"jvA" = ( +/obj/machinery/atmospherics/pipe/smart/simple/green/visible{ + dir = 10 + }, +/turf/open/floor/iron, +/area/station/engineering/atmos) +"jvM" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/turf/open/floor/iron/white/smooth_corner{ + dir = 1 + }, +/area/station/science/robotics/lab) +"jvN" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/iron/textured_large, +/area/station/engineering/storage/tech) +"jvO" = ( +/obj/structure/cable, +/obj/machinery/light/warm/directional/south, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/turf/open/floor/wood, +/area/station/commons/lounge) +"jwa" = ( +/obj/structure/lattice, +/obj/effect/spawner/random/structure/grille, +/turf/open/floor/plating/airless, +/area/station/asteroid) +"jwb" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/spawner/random/trash/mess, +/turf/open/floor/iron, +/area/station/service/cafeteria) +"jwr" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 6 + }, +/obj/structure/closet/secure_closet/courtroom, +/obj/item/gavelblock, +/obj/item/gavelhammer, +/obj/machinery/camera/autoname/directional/south, +/turf/open/floor/wood/tile, +/area/station/security/courtroom) +"jws" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/obj/effect/landmark/event_spawn, +/turf/open/floor/iron, +/area/station/engineering/atmos/upper) +"jww" = ( +/obj/effect/turf_decal/tile/dark_blue, +/obj/effect/mapping_helpers/mail_sorting/service/hop_office, +/obj/structure/disposalpipe/sorting/mail/flip{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/hallway/secondary/command) +"jwI" = ( +/obj/structure/table/reinforced, +/obj/effect/turf_decal/tile/dark_red/opposingcorners, +/obj/machinery/door/firedoor, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/turf/open/floor/iron/dark, +/area/station/service/bar) +"jwK" = ( +/obj/item/toy/plush/lizard_plushie/space/green, +/turf/open/floor/fakespace, +/area/station/maintenance/port/lesser) +"jwL" = ( +/obj/effect/landmark/event_spawn, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/station/command/meeting_room) +"jxa" = ( +/turf/closed/wall, +/area/station/science/explab) +"jxd" = ( +/turf/open/floor/iron, +/area/station/engineering/lobby) +"jxe" = ( +/obj/effect/turf_decal/box, +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/stripes/white/line{ + dir = 8 + }, +/obj/item/radio/intercom/directional/north, +/turf/open/floor/iron/dark, +/area/station/science/ordnance/testlab) +"jxi" = ( +/obj/structure/chair/stool/directional/south, +/turf/open/floor/iron/dark, +/area/station/command/corporate_showroom) +"jxq" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/turf/open/floor/carpet/royalblue, +/area/station/command/heads_quarters/captain/private) +"jxx" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/high_volume/siphon/monitored/air_output{ + dir = 8 + }, +/turf/open/floor/engine/air, +/area/station/engineering/atmos) +"jxE" = ( +/obj/machinery/firealarm/directional/south, +/turf/open/floor/glass, +/area/station/command/meeting_room) +"jxF" = ( +/turf/closed/wall/r_wall, +/area/station/security/checkpoint/science) +"jxR" = ( +/obj/effect/spawner/random/maintenance, +/turf/open/floor/plating, +/area/station/maintenance/department/medical) +"jxS" = ( +/obj/structure/lattice, +/obj/structure/cable, +/turf/open/openspace, +/area/station/command/meeting_room) +"jyg" = ( +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/machinery/suit_storage_unit/medical, +/obj/effect/turf_decal/box/white{ + color = "#52B4E9" + }, +/obj/item/radio/intercom/directional/north, +/obj/machinery/light_switch/directional/west, +/turf/open/floor/iron/white, +/area/station/medical/storage) +"jyu" = ( +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 8 + }, +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/west, +/obj/effect/landmark/start/depsec/supply, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/security/checkpoint/supply) +"jyx" = ( +/obj/structure/chair/office, +/obj/structure/cable, +/turf/open/floor/iron/white, +/area/station/medical/paramedic) +"jyM" = ( +/obj/structure/ladder{ + icon_state = "ladder10" + }, +/obj/machinery/light/small/directional/south, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/dark, +/area/station/maintenance/department/engine) +"jyO" = ( +/obj/machinery/portable_atmospherics/canister/nitrous_oxide, +/turf/open/floor/engine/n2o, +/area/station/engineering/atmos) +"jyQ" = ( +/obj/machinery/door/airlock/research{ + name = "Research and Development Lab" + }, +/obj/effect/mapping_helpers/airlock/access/all/science/general, +/obj/machinery/door/firedoor, +/turf/open/floor/iron/white/smooth_edge, +/area/station/science/lab) +"jyV" = ( +/obj/machinery/hydroponics/constructable, +/obj/machinery/airalarm/directional/north, +/turf/open/floor/iron/large, +/area/station/service/hydroponics/garden) +"jza" = ( +/turf/closed/wall/r_wall, +/area/station/security/lockers) +"jzi" = ( +/obj/machinery/light/floor, +/turf/open/floor/iron, +/area/station/hallway/secondary/exit/departure_lounge) +"jzq" = ( +/obj/item/target, +/obj/structure/window/reinforced/spawner/directional/south, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/plating/airless, +/area/station/science/ordnance/bomb) +"jzu" = ( +/obj/structure/sink/directional/west, +/obj/structure/mirror/directional/east, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/freezer, +/area/station/commons/toilet/restrooms) +"jzv" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/cable, +/obj/machinery/light_switch/directional/east, +/turf/open/floor/iron/dark, +/area/station/engineering/storage/tcomms) +"jzC" = ( +/obj/effect/turf_decal/tile/neutral, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/light_switch/directional/west, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/command/heads_quarters/hop) +"jzI" = ( +/obj/structure/railing{ + dir = 1 + }, +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 1 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/cargo/storage) +"jzJ" = ( +/obj/machinery/power/terminal{ + dir = 8 + }, +/obj/structure/cable, +/obj/effect/turf_decal/trimline/yellow/filled/line, +/turf/open/floor/iron, +/area/station/engineering/main) +"jzM" = ( +/turf/open/floor/glass/reinforced/plasma, +/area/station/command/heads_quarters/rd) +"jzN" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/station/hallway/secondary/entry) +"jzR" = ( +/obj/effect/turf_decal/tile/red/opposingcorners, +/obj/machinery/door/airlock/public/glass{ + name = "Prison Kitchen" + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/white, +/area/station/security/prison/mess) +"jzV" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/plating/airless, +/area/station/science/ordnance/bomb) +"jAd" = ( +/obj/machinery/teleport/hub, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/aisat/teleporter) +"jAe" = ( +/obj/machinery/airalarm/directional/north, +/turf/open/floor/iron, +/area/station/commons/fitness/recreation) +"jAg" = ( +/obj/machinery/door/airlock/security/glass, +/obj/effect/turf_decal/tile/red/fourcorners, +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/access/all/security/brig, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/dark/side{ + dir = 8 + }, +/area/station/security/lockers) +"jAn" = ( +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/security/office) +"jAB" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/grille, +/turf/open/floor/plating, +/area/station/maintenance/department/science) +"jAD" = ( +/obj/effect/turf_decal/stripes{ + dir = 5 + }, +/obj/machinery/portable_atmospherics/canister, +/obj/machinery/power/apc/auto_name/directional/east, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/engineering/atmospherics_engine) +"jAE" = ( +/obj/structure/lattice/catwalk, +/obj/structure/railing{ + dir = 8 + }, +/turf/open/openspace, +/area/station/engineering/atmospherics_engine) +"jAG" = ( +/turf/closed/wall, +/area/station/service/lawoffice) +"jAR" = ( +/obj/machinery/power/apc/auto_name/directional/east, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/maintenance/radshelter/civil) +"jAU" = ( +/obj/structure/window/reinforced/spawner/directional/west, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/engine, +/area/station/science/xenobiology) +"jBg" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/structure/table/reinforced, +/obj/machinery/light/small/dim/directional/east, +/obj/item/assembly/timer{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/assembly/igniter/condenser, +/obj/machinery/camera/autoname/directional/east{ + network = list("minisat") + }, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/aisat/foyer) +"jBh" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/light/small/dim/directional/south, +/turf/open/floor/plating, +/area/station/maintenance/central/greater) +"jBj" = ( +/obj/structure/chair/office/tactical{ + dir = 4 + }, +/obj/effect/landmark/start/detective, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/station/security/office) +"jBl" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"jBG" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden, +/turf/open/floor/plating, +/area/station/maintenance/port/greater) +"jBJ" = ( +/obj/effect/landmark/event_spawn, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/holopad, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/cable, +/obj/effect/turf_decal/tile/yellow/half/contrasted, +/turf/open/floor/iron, +/area/station/construction/mining/aux_base) +"jBM" = ( +/obj/machinery/door/airlock/external{ + name = "Escape Pod Two"; + space_dir = 4 + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 8 + }, +/turf/open/floor/plating, +/area/station/maintenance/department/science) +"jBX" = ( +/obj/effect/turf_decal/stripes{ + dir = 8 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"jCm" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/layer2{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/dark/hidden, +/turf/open/floor/engine/airless, +/area/station/maintenance/disposal/incinerator) +"jCr" = ( +/obj/effect/turf_decal/trimline/yellow/filled/warning{ + dir = 10 + }, +/obj/structure/railing{ + dir = 10 + }, +/obj/machinery/door/firedoor/border_only, +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/hallway/secondary/exit/departure_lounge) +"jCw" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/obj/machinery/navbeacon{ + codes_txt = "patrol;next_patrol=P5-Central-Primary"; + location = "P4-Central-Primary" + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"jCD" = ( +/turf/closed/wall, +/area/station/security/detectives_office/private_investigators_office) +"jCG" = ( +/obj/machinery/door/airlock/external/glass, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/access/all/security/brig, +/obj/effect/turf_decal/stripes/full, +/turf/open/floor/iron/dark, +/area/station/security/processing) +"jCN" = ( +/obj/machinery/door/airlock/medical{ + name = "Psychology Office" + }, +/obj/effect/mapping_helpers/airlock/access/all/medical/psychology, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment, +/turf/open/floor/wood, +/area/station/medical/psychology) +"jCT" = ( +/obj/structure/cable, +/obj/effect/turf_decal/siding/purple{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/white/textured, +/area/station/science/genetics) +"jCU" = ( +/obj/structure/closet/crate/freezer, +/obj/item/reagent_containers/blood/random, +/obj/item/reagent_containers/blood/random, +/obj/item/reagent_containers/blood/random, +/obj/item/reagent_containers/blood/random, +/obj/item/reagent_containers/blood/o_plus{ + pixel_x = -2; + pixel_y = -1 + }, +/obj/item/reagent_containers/blood/o_minus, +/obj/item/reagent_containers/blood/b_plus, +/obj/item/reagent_containers/blood/b_minus, +/obj/item/reagent_containers/blood/a_plus, +/obj/item/reagent_containers/blood/a_minus, +/obj/item/reagent_containers/blood/lizard, +/obj/item/reagent_containers/blood/ethereal, +/obj/item/reagent_containers/blood{ + pixel_x = -3; + pixel_y = -3 + }, +/obj/item/reagent_containers/blood{ + pixel_x = -3; + pixel_y = -3 + }, +/obj/item/reagent_containers/blood{ + pixel_x = -3; + pixel_y = -3 + }, +/obj/effect/turf_decal/tile/green/anticorner/contrasted{ + dir = 4 + }, +/obj/machinery/camera/autoname/directional/east{ + network = list("ss13","medbay") + }, +/turf/open/floor/iron/white, +/area/station/medical/virology) +"jCX" = ( +/obj/structure/transport/linear/public, +/turf/open/floor/plating/elevatorshaft, +/area/station/cargo/storage) +"jDs" = ( +/obj/effect/turf_decal/tile/dark_red/opposingcorners, +/obj/structure/table, +/obj/item/reagent_containers/cup/glass/shaker{ + pixel_x = -6 + }, +/obj/item/storage/box/drinkingglasses{ + pixel_y = 3; + pixel_x = 6 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/service/bar) +"jDC" = ( +/obj/effect/turf_decal/tile/brown/half/contrasted, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/conveyor_switch/oneway{ + dir = 8; + id = "QMLoad"; + name = "Loading Conveyor"; + pixel_x = -13 + }, +/turf/open/floor/iron, +/area/station/cargo/storage) +"jDM" = ( +/obj/machinery/power/turbine/turbine_outlet{ + dir = 4 + }, +/turf/open/floor/engine, +/area/station/maintenance/disposal/incinerator) +"jDP" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/sorting/mail, +/obj/effect/mapping_helpers/mail_sorting/science/genetics, +/turf/open/floor/iron/white, +/area/station/science/research) +"jDQ" = ( +/obj/effect/turf_decal/trimline/blue/filled/line, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) +"jDT" = ( +/obj/effect/turf_decal/tile/dark_blue/half/contrasted{ + dir = 8 + }, +/obj/machinery/firealarm/directional/west, +/turf/open/floor/iron, +/area/station/hallway/secondary/command) +"jEc" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/engineering/lobby) +"jEd" = ( +/obj/item/stack/tile/iron/white, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/holopad, +/obj/effect/turf_decal/box/white{ + color = "#EFB341" + }, +/turf/open/floor/iron/white/smooth_large, +/area/station/medical/chemistry/minisat) +"jEf" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/line{ + dir = 4 + }, +/obj/item/radio/intercom/directional/east, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/holofloor/dark, +/area/station/command/heads_quarters/cmo) +"jEr" = ( +/obj/structure/chair/stool/directional/west, +/obj/effect/landmark/start/assistant, +/turf/open/floor/wood, +/area/station/commons/lounge) +"jEt" = ( +/turf/open/floor/glass/reinforced, +/area/station/science/xenobiology) +"jEu" = ( +/obj/structure/table/reinforced, +/obj/item/reagent_containers/syringe, +/obj/item/reagent_containers/syringe{ + pixel_y = 6 + }, +/obj/item/reagent_containers/syringe{ + pixel_y = 3 + }, +/turf/open/floor/engine, +/area/station/medical/chemistry) +"jEw" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/structure/closet/crate/science{ + opened = 1; + icon_state = "scicrateopen" + }, +/obj/item/tank, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/iron/dark/smooth_large, +/area/station/science/ordnance) +"jED" = ( +/obj/machinery/camera/autoname/directional/east, +/turf/open/floor/iron/freezer, +/area/station/security/prison/shower) +"jEX" = ( +/obj/machinery/newscaster/directional/west, +/turf/open/floor/carpet/orange, +/area/station/service/theater) +"jEY" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/ai_monitored/turret_protected/aisat/foyer) +"jFc" = ( +/obj/effect/turf_decal/tile/yellow, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) +"jFf" = ( +/obj/structure/closet/secure_closet/atmospherics, +/obj/machinery/firealarm/directional/west, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/storage/gas) +"jFP" = ( +/obj/structure/lattice/catwalk, +/obj/structure/railing{ + dir = 1 + }, +/obj/structure/railing, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/openspace, +/area/station/engineering/supermatter/room) +"jFR" = ( +/obj/effect/turf_decal/tile/brown/anticorner/contrasted, +/obj/machinery/light/directional/east, +/turf/open/floor/iron, +/area/station/cargo/drone_bay) +"jGa" = ( +/obj/structure/lattice/catwalk, +/obj/structure/marker_beacon/yellow, +/turf/open/space/openspace, +/area/space/nearstation) +"jGd" = ( +/obj/machinery/portable_atmospherics/canister/nitrous_oxide, +/obj/structure/sign/warning/explosives/alt/directional/north, +/turf/open/floor/iron/white/smooth_large, +/area/station/science/ordnance/storage) +"jGe" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/spawner/random/maintenance, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/port/greater) +"jGg" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/turf/open/floor/engine, +/area/station/command/corporate_dock) +"jGs" = ( +/obj/structure/sign/warning/electric_shock, +/turf/closed/wall/r_wall, +/area/station/science/xenobiology) +"jGy" = ( +/obj/structure/table, +/obj/effect/turf_decal/bot, +/obj/item/assembly/timer{ + pixel_x = -4; + pixel_y = 2 + }, +/obj/item/assembly/timer{ + pixel_x = 5; + pixel_y = 4 + }, +/obj/item/assembly/timer{ + pixel_x = 6; + pixel_y = -4 + }, +/obj/item/assembly/timer, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/light_switch/directional/west, +/turf/open/floor/iron/dark, +/area/station/science/ordnance/testlab) +"jGB" = ( +/turf/closed/wall, +/area/station/service/janitor) +"jGF" = ( +/obj/effect/turf_decal/tile/red/anticorner/contrasted{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/security/office) +"jGK" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/wood/parquet, +/area/station/cargo/boutique) +"jGW" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/stripes/white/line{ + dir = 8 + }, +/obj/effect/landmark/start/prisoner, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/security/prison) +"jGX" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/decal/cleanable/dirt/dust, +/obj/item/broken_bottle, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) +"jGZ" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/chapel{ + dir = 1 + }, +/area/station/service/chapel) +"jHn" = ( +/obj/structure/railing{ + dir = 8 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 8 + }, +/obj/machinery/light_switch/directional/east, +/turf/open/floor/iron, +/area/station/engineering/lobby) +"jHp" = ( +/turf/open/floor/plating, +/area/station/maintenance/department/medical) +"jHx" = ( +/obj/machinery/light/small/dim/directional/east, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron/white/smooth_large, +/area/station/medical/patients_rooms/room_a) +"jHz" = ( +/obj/effect/turf_decal/stripes, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"jHD" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/firealarm/directional/west, +/turf/open/floor/iron/dark, +/area/station/command/corporate_showroom) +"jHH" = ( +/obj/machinery/disposal/bin, +/obj/machinery/airalarm/directional/east, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/turf/open/floor/iron/grimy, +/area/station/security/detectives_office) +"jHQ" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plating, +/area/station/maintenance/department/medical) +"jHR" = ( +/obj/effect/mapping_helpers/airlock/abandoned, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, +/obj/effect/decal/cleanable/dirt, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 8 + }, +/turf/open/floor/plating, +/area/station/maintenance/department/engine) +"jIc" = ( +/obj/machinery/light/warm/directional/east, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 1 + }, +/turf/open/floor/wood/parquet, +/area/station/service/theater) +"jIe" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 8 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/white, +/area/station/hallway/secondary/entry) +"jIf" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/effect/mapping_helpers/broken_floor, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/turf/open/floor/wood, +/area/station/service/library) +"jIl" = ( +/obj/structure/railing{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/turf/open/floor/iron/dark/side{ + dir = 5 + }, +/area/station/command/meeting_room) +"jIm" = ( +/obj/structure/sign/poster/random/directional/south, +/obj/structure/cable, +/turf/open/floor/iron/white, +/area/station/science/research) +"jIn" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/medical/chemistry) +"jIA" = ( +/obj/structure/cable, +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/commons/storage/tools) +"jIG" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/science/robotics/lab) +"jIK" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/service/hydroponics) +"jIU" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/sign/poster/contraband/lusty_xenomorph/directional/north, +/turf/open/floor/plating, +/area/station/maintenance/central/greater) +"jJb" = ( +/turf/closed/wall/r_wall, +/area/station/hallway/secondary/entry) +"jJe" = ( +/obj/effect/spawner/random/structure/closet_empty/crate/with_loot, +/turf/open/misc/asteroid, +/area/station/maintenance/department/science) +"jJg" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/disposal) +"jJo" = ( +/obj/structure/chair{ + dir = 1 + }, +/obj/machinery/firealarm/directional/east, +/turf/open/floor/iron/dark/side{ + dir = 6 + }, +/area/station/maintenance/radshelter/medical) +"jJp" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 + }, +/obj/machinery/incident_display/delam/directional/north, +/turf/open/floor/iron, +/area/station/engineering/main) +"jJv" = ( +/obj/effect/turf_decal/sand/plating, +/obj/effect/decal/cleanable/rubble, +/obj/structure/rack, +/obj/item/pickaxe/improvised, +/turf/open/floor/plating, +/area/station/maintenance/port/greater) +"jJA" = ( +/obj/structure/sign/warning/directional/east, +/obj/structure/closet/crate/trashcart/filled, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"jJS" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark/textured_half{ + dir = 1 + }, +/area/station/science/xenobiology) +"jJW" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/clothing/wardrobe_closet_colored, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/maintenance/aft/upper) +"jKc" = ( +/obj/machinery/door/window/brigdoor/left/directional/north{ + req_access = list("armory") + }, +/obj/structure/railing{ + dir = 1 + }, +/turf/open/floor/glass/reinforced, +/area/station/security/prison) +"jKg" = ( +/obj/effect/landmark/start/depsec/science, +/obj/effect/turf_decal/tile/red/opposingcorners, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/science) +"jKj" = ( +/obj/structure/closet{ + name = "janitorial supplies" + }, +/obj/item/storage/box/bodybags, +/obj/item/reagent_containers/spray/cleaner, +/obj/effect/turf_decal/bot_red, +/turf/open/floor/iron/dark/textured, +/area/station/medical/morgue) +"jKp" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/engineering/storage) +"jKt" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"jKu" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/engineering/gravity_generator) +"jKw" = ( +/obj/effect/turf_decal/box/corners{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/engineering/atmos) +"jKy" = ( +/turf/open/floor/iron/chapel{ + dir = 4 + }, +/area/station/service/chapel) +"jKC" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/turf_decal/sand/plating, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"jKD" = ( +/obj/effect/landmark/event_spawn, +/turf/open/floor/wood/tile, +/area/station/service/bar) +"jKF" = ( +/obj/effect/turf_decal/tile/yellow{ + dir = 8 + }, +/obj/effect/turf_decal/tile/yellow{ + dir = 4 + }, +/obj/item/radio/intercom/directional/south, +/obj/machinery/atmospherics/components/binary/valve/digital{ + dir = 8; + name = "Waste Release" + }, +/turf/open/floor/iron/dark/corner, +/area/station/engineering/atmos) +"jLp" = ( +/obj/machinery/photocopier, +/turf/open/floor/carpet/purple, +/area/station/service/library) +"jLr" = ( +/obj/effect/turf_decal/tile/neutral, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/item/radio/intercom/directional/south, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"jLv" = ( +/obj/structure/table, +/obj/item/storage/fancy/cigarettes/cigpack_carp, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"jLC" = ( +/obj/effect/turf_decal/siding/wood, +/turf/open/floor/wood/parquet, +/area/station/service/theater) +"jLV" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/blood/old{ + icon_state = "splatter6" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/cargo/warehouse/upper) +"jMa" = ( +/obj/machinery/light/dim/directional/south, +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ + dir = 4 + }, +/obj/effect/turf_decal/tile/yellow{ + dir = 8 + }, +/turf/open/floor/iron/dark/corner, +/area/station/engineering/atmos/pumproom) +"jMe" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/trash/mess, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/service/cafeteria) +"jMy" = ( +/obj/structure/railing/corner{ + dir = 1 + }, +/obj/machinery/camera/autoname/directional/south, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/ai_monitored/turret_protected/aisat/foyer) +"jMN" = ( +/obj/machinery/camera/autoname/directional/south, +/turf/open/misc/asteroid, +/area/station/maintenance/disposal/incinerator) +"jMU" = ( +/obj/structure/table/reinforced/rglass, +/obj/machinery/fax{ + fax_name = "Security Office"; + name = "Security Office Fax Machine" + }, +/obj/effect/turf_decal/tile/red/half/contrasted, +/turf/open/floor/iron/dark, +/area/station/security/office) +"jMW" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/department/medical) +"jNg" = ( +/obj/structure/table/reinforced, +/obj/item/stack/cable_coil, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/ai_monitored/turret_protected/aisat/foyer) +"jNh" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/camera/autoname/directional/west, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"jNr" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/carpet, +/area/station/service/lawoffice) +"jNJ" = ( +/obj/effect/turf_decal/siding/green, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/commons/storage/art) +"jNL" = ( +/obj/machinery/door/airlock/command{ + name = "Chief Engineer" + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/ce, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/command/heads_quarters/ce) +"jOf" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/tile/brown/anticorner/contrasted{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/station/cargo/lobby) +"jOq" = ( +/obj/structure/filingcabinet/chestdrawer, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/commons/vacant_room/commissary) +"jOr" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/bot_white/right, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/command/gateway) +"jOz" = ( +/obj/structure/cable, +/obj/effect/mapping_helpers/broken_floor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"jOB" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/plating, +/area/station/maintenance/department/medical) +"jOD" = ( +/obj/structure/closet/firecloset, +/obj/item/poster/random_contraband, +/turf/open/floor/plating, +/area/station/maintenance/central/lesser) +"jOH" = ( +/obj/structure/cable, +/obj/effect/turf_decal/trimline/blue/filled/line, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/medical/treatment_center) +"jOM" = ( +/obj/structure/lattice/catwalk, +/obj/machinery/atmospherics/components/unary/passive_vent/layer2{ + dir = 4 + }, +/turf/open/space/openspace, +/area/space/nearstation) +"jON" = ( +/obj/item/storage/bag/tray/cafeteria, +/obj/item/storage/bag/tray/cafeteria, +/obj/item/kitchen/fork/plastic, +/obj/item/kitchen/fork/plastic, +/obj/structure/table/reinforced, +/obj/structure/window/spawner/directional/east, +/turf/open/floor/iron, +/area/station/security/prison/mess) +"jOV" = ( +/turf/closed/wall/r_wall, +/area/station/security/prison) +"jOZ" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/cargo/warehouse/upper) +"jPb" = ( +/obj/effect/baseturf_helper/reinforced_plating, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/iron, +/area/station/command/heads_quarters/ce) +"jPg" = ( +/obj/machinery/telecomms/broadcaster/preset_right, +/turf/open/floor/circuit/green/telecomms/mainframe, +/area/station/tcommsat/server) +"jPm" = ( +/obj/structure/chair/office/tactical{ + dir = 4 + }, +/obj/effect/landmark/start/security_officer, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/junction, +/turf/open/floor/iron, +/area/station/security/office) +"jPq" = ( +/obj/machinery/light/small/dim/directional/south, +/turf/open/misc/asteroid, +/area/station/maintenance/port/greater) +"jPs" = ( +/obj/structure/table, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 4 + }, +/obj/item/reagent_containers/cup/beaker/large{ + pixel_x = -5 + }, +/obj/item/storage/box/beakers{ + pixel_y = 3; + pixel_x = 7 + }, +/obj/machinery/light/directional/east, +/turf/open/floor/iron/white, +/area/station/medical/chemistry) +"jPL" = ( +/obj/structure/lattice, +/obj/machinery/camera/autoname/directional/east, +/turf/open/openspace, +/area/station/hallway/secondary/exit/departure_lounge) +"jPO" = ( +/obj/machinery/cryo_cell, +/obj/effect/turf_decal/tile/blue/fourcorners, +/turf/open/floor/iron/white, +/area/station/medical/treatment_center) +"jPR" = ( +/obj/structure/transport/linear/public{ + icon = 'icons/obj/smooth_structures/catwalk.dmi'; + base_icon_state = "catwalk"; + icon_state = "catwalk-255" + }, +/obj/effect/turf_decal/caution/stand_clear, +/turf/open/floor/plating/elevatorshaft, +/area/station/cargo/storage) +"jPY" = ( +/mob/living/basic/living_floor, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"jQc" = ( +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/security/armory) +"jQf" = ( +/obj/structure/cable, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/fore) +"jQl" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/structure/rack, +/obj/item/stack/sheet/iron/twenty, +/obj/item/stack/sheet/iron/ten, +/obj/item/stack/sheet/glass{ + amount = 25; + pixel_y = 6 + }, +/turf/open/floor/plating, +/area/station/maintenance/port/lesser) +"jQo" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/machinery/digital_clock/directional/north, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"jQs" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/purple/visible, +/obj/effect/turf_decal/stripes{ + dir = 4 + }, +/obj/machinery/light/directional/east, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"jQt" = ( +/obj/structure/cable, +/obj/effect/spawner/random/maintenance, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/maintenance/aft/upper) +"jQS" = ( +/turf/closed/wall/r_wall, +/area/station/science/xenobiology) +"jRc" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/item/radio/intercom/command/directional/east, +/turf/open/floor/carpet/royalblue, +/area/station/command/heads_quarters/captain/private) +"jRj" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/structure/table, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/light/small/broken/directional/west, +/obj/effect/spawner/random/engineering/tool, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) +"jRw" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 1 + }, +/turf/open/floor/carpet, +/area/station/service/chapel/funeral) +"jRI" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/spawner/random/trash/hobo_squat, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"jRJ" = ( +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 1 + }, +/obj/structure/disposalpipe/trunk/multiz/down{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/security) +"jRK" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/mapping_helpers/airlock/access/all/service/theatre, +/obj/machinery/door/airlock{ + name = "Mime's Backstage Room" + }, +/obj/machinery/door/firedoor, +/turf/open/floor/plating, +/area/station/service/theater) +"jRN" = ( +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/west, +/turf/open/floor/iron/white, +/area/station/science/lab) +"jRU" = ( +/obj/effect/spawner/random/engineering/tank, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/sign/poster/random/directional/north, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"jSf" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/chair/office{ + name = "grimy chair" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/commons/vacant_room/commissary) +"jSs" = ( +/obj/machinery/door/airlock/command{ + name = "Head of Personnel's Booth" + }, +/obj/effect/turf_decal/siding/wood, +/obj/effect/mapping_helpers/airlock/access/any/command/hop, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "bridgehop" + }, +/turf/open/floor/carpet/green, +/area/station/command/heads_quarters/hop) +"jSu" = ( +/obj/machinery/atmospherics/pipe/smart/simple/green/visible{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/engineering/atmos) +"jSE" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/turf/open/floor/plating, +/area/station/maintenance/department/medical) +"jSR" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/science/ordnance) +"jSV" = ( +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 1 + }, +/obj/machinery/firealarm/directional/west, +/turf/open/floor/iron/dark/textured_large, +/area/station/science/xenobiology) +"jSY" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/turf/open/floor/iron/white/smooth_edge, +/area/station/medical/exam_room) +"jTa" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/firealarm/directional/west, +/turf/open/floor/iron/showroomfloor, +/area/station/cargo/storage) +"jTd" = ( +/obj/effect/turf_decal/tile/dark_blue/half/contrasted{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/command/bridge) +"jTg" = ( +/obj/structure/cable/layer3, +/turf/open/floor/iron/dark/telecomms, +/area/station/tcommsat/server) +"jTB" = ( +/turf/closed/wall/r_wall, +/area/station/science/ordnance/storage) +"jTE" = ( +/obj/structure/chair/sofa/bench/right{ + dir = 4 + }, +/turf/open/floor/iron/textured_large, +/area/station/hallway/primary/central) +"jTI" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible, +/turf/open/space/basic, +/area/space/nearstation) +"jTR" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/plating, +/area/station/maintenance/department/bridge) +"jUd" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/catwalk_floor, +/area/station/maintenance/central/lesser) +"jUi" = ( +/obj/effect/turf_decal/tile/purple/anticorner/contrasted{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/science/lobby) +"jUm" = ( +/obj/structure/closet/wardrobe/pjs, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/cargo/miningoffice) +"jUD" = ( +/obj/effect/turf_decal/tile/blue/half/contrasted{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/security/courtroom) +"jUU" = ( +/turf/closed/wall, +/area/station/commons/vacant_room/commissary) +"jUV" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/turf/open/floor/wood, +/area/station/service/library) +"jVk" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/plating, +/area/station/maintenance/central/greater) +"jVq" = ( +/obj/effect/spawner/random/structure/billboard/nanotrasen, +/obj/effect/turf_decal/stripes/asteroid/line{ + dir = 9 + }, +/turf/open/misc/asteroid, +/area/station/maintenance/port/lesser) +"jVu" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/dark, +/area/station/medical/chemistry/minisat) +"jVx" = ( +/turf/closed/wall/rust, +/area/station/engineering/storage/tech) +"jVy" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/command/bridge) +"jVF" = ( +/obj/machinery/duct, +/obj/effect/landmark/start/botanist, +/obj/effect/landmark/event_spawn, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/service/hydroponics) +"jVI" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/command/gateway) +"jVO" = ( +/obj/effect/turf_decal/plaque{ + icon_state = "L2" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"jVV" = ( +/obj/structure/lattice, +/turf/open/space/openspace, +/area/space/nearstation) +"jWb" = ( +/obj/structure/closet/secure_closet/brig{ + id = "Cell 1"; + name = "Cell 1 locker" + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light/small/directional/west, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/security/brig) +"jWc" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/turf/open/floor/wood, +/area/station/service/library) +"jWg" = ( +/obj/structure/table/wood, +/obj/effect/turf_decal/siding/dark{ + dir = 9 + }, +/obj/item/flashlight/lantern{ + pixel_y = 7 + }, +/turf/open/floor/wood/tile, +/area/station/service/chapel) +"jWh" = ( +/turf/open/floor/circuit/green, +/area/station/ai_monitored/turret_protected/ai_upload) +"jWj" = ( +/obj/structure/cable, +/obj/structure/cable/layer3, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/command/storage/satellite) +"jWm" = ( +/obj/structure/lattice/catwalk, +/obj/structure/railing{ + dir = 1 + }, +/obj/machinery/firealarm/directional/south, +/turf/open/openspace, +/area/station/security/prison/shower) +"jWE" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/reagent_dispensers/watertank, +/turf/open/floor/iron, +/area/station/commons/storage/primary) +"jWG" = ( +/obj/effect/turf_decal/siding/purple{ + dir = 9 + }, +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk, +/turf/open/floor/iron/white/smooth_large, +/area/station/science/research) +"jWI" = ( +/obj/machinery/atmospherics/components/binary/pump/on{ + name = "Gas to Cooling Loop" + }, +/obj/effect/turf_decal/stripes, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"jWP" = ( +/obj/machinery/meter, +/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ + dir = 8 + }, +/turf/closed/wall/r_wall, +/area/station/engineering/atmos) +"jWU" = ( +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible, +/obj/effect/turf_decal/tile/yellow{ + dir = 8 + }, +/turf/open/floor/iron/dark/corner{ + dir = 1 + }, +/area/station/engineering/atmos/pumproom) +"jXb" = ( +/turf/open/floor/iron/white/textured_large, +/area/station/science/genetics) +"jXl" = ( +/obj/effect/turf_decal/trimline/dark_red/arrow_cw{ + dir = 5 + }, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/obj/machinery/computer/cargo{ + dir = 1 + }, +/obj/effect/turf_decal/bot_red, +/turf/open/floor/iron/textured_large, +/area/station/cargo/sorting) +"jXv" = ( +/obj/structure/broken_flooring/singular/directional/south, +/turf/open/space/openspace, +/area/space/nearstation) +"jXL" = ( +/obj/effect/spawner/random/trash/garbage{ + spawn_scatter_radius = 1 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/central/lesser) +"jXO" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plating, +/area/station/maintenance/port/lesser) +"jYf" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 1 + }, +/obj/machinery/airalarm/directional/north, +/turf/open/floor/iron/white, +/area/station/hallway/secondary/entry) +"jYh" = ( +/obj/structure/window/reinforced/spawner/directional/north, +/turf/open/floor/glass/reinforced, +/area/station/security/prison) +"jYm" = ( +/obj/structure/broken_flooring/corner/directional/east, +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/spawner/random/structure/closet_empty/crate/with_loot, +/turf/open/floor/plating, +/area/station/hallway/primary/starboard) +"jYp" = ( +/obj/structure/railing/corner{ + dir = 8 + }, +/turf/open/floor/plating, +/area/station/maintenance/central/greater) +"jYy" = ( +/obj/effect/turf_decal/tile/neutral/diagonal_centre, +/turf/open/floor/iron/dark, +/area/station/service/chapel/funeral) +"jYG" = ( +/obj/effect/landmark/navigate_destination{ + location = "Public Mining Dock" + }, +/obj/machinery/door/airlock/external{ + name = "Common Mining Dock" + }, +/turf/open/floor/plating, +/area/station/hallway/secondary/entry) +"jYH" = ( +/obj/effect/turf_decal/siding/wood, +/turf/open/floor/wood, +/area/station/service/theater) +"jYT" = ( +/turf/open/floor/catwalk_floor/iron_white, +/area/station/science/ordnance/testlab) +"jZg" = ( +/obj/structure/window/reinforced/spawner/directional/east, +/obj/structure/rack, +/obj/item/restraints/handcuffs, +/obj/item/restraints/handcuffs, +/turf/open/floor/glass/reinforced, +/area/station/security/checkpoint/science) +"jZj" = ( +/turf/open/floor/iron, +/area/station/hallway/secondary/command) +"jZp" = ( +/obj/effect/turf_decal/tile/brown/opposingcorners{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/commons/vacant_room/commissary) +"jZt" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/maintenance/department/cargo) +"jZx" = ( +/obj/structure/closet/emcloset, +/turf/open/floor/iron/textured, +/area/station/hallway/primary/central) +"jZC" = ( +/obj/structure/lattice, +/turf/open/openspace, +/area/station/command/meeting_room) +"jZK" = ( +/obj/effect/spawner/random/food_or_drink/seed{ + spawn_all_loot = 1; + spawn_random_offset = 1 + }, +/obj/structure/table, +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/turf/open/floor/iron/textured_large, +/area/station/service/hydroponics/garden) +"jZN" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ + dir = 1 + }, +/obj/effect/turf_decal/tile/yellow{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark/corner, +/area/station/engineering/atmos) +"jZV" = ( +/obj/structure/window/reinforced/spawner/directional/south, +/obj/structure/table, +/obj/effect/decal/cleanable/dirt, +/obj/item/paper_bin, +/turf/open/floor/iron, +/area/station/commons/vacant_room/commissary) +"jZY" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/blood/tracks, +/turf/open/floor/plating, +/area/station/asteroid) +"kaa" = ( +/obj/machinery/door/airlock/security/glass{ + name = "Security Office" + }, +/obj/effect/mapping_helpers/airlock/access/all/security/general, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/security/checkpoint/science) +"kae" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/yellow/filled/line, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/newscaster/directional/south, +/turf/open/floor/iron/white, +/area/station/medical/chemistry/minisat) +"kag" = ( +/turf/closed/wall, +/area/station/commons/storage/primary) +"kah" = ( +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 4 + }, +/obj/machinery/light/directional/east, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/cargo/storage) +"kao" = ( +/obj/structure/ladder, +/obj/machinery/light/small/dim/directional/north, +/turf/open/floor/plating, +/area/station/maintenance/port/greater) +"kaz" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/hallway/secondary/command) +"kaJ" = ( +/obj/effect/turf_decal/tile/red/half/contrasted, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/security) +"kaK" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/security/breakroom) +"kbg" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/cargo/miningoffice) +"kbv" = ( +/obj/machinery/turretid{ + control_area = "/area/station/ai_monitored/turret_protected/aisat_interior"; + name = "AI Antechamber turret control"; + pixel_x = 27 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/aisat/foyer) +"kbD" = ( +/obj/machinery/newscaster/directional/south, +/obj/effect/turf_decal/siding/purple, +/obj/structure/table, +/obj/effect/spawner/random/food_or_drink/snack, +/turf/open/floor/iron/white/herringbone, +/area/station/science/breakroom) +"kbT" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/landmark/event_spawn, +/obj/machinery/holopad, +/obj/effect/turf_decal/bot, +/turf/open/floor/iron/dark, +/area/station/command/bridge) +"kbW" = ( +/obj/structure/chair/plastic{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/grimy, +/area/station/maintenance/central/lesser) +"kbY" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"kcd" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment, +/obj/machinery/duct, +/turf/open/floor/iron/white/textured_large, +/area/station/medical/treatment_center) +"kck" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/iron/dark/smooth_large, +/area/station/ai_monitored/turret_protected/aisat/uppersouth) +"kco" = ( +/obj/effect/turf_decal/stripes/asteroid/line{ + dir = 5 + }, +/turf/open/misc/asteroid, +/area/station/maintenance/port/lesser) +"kcr" = ( +/obj/structure/table/optable, +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/machinery/digital_clock/directional/south, +/obj/structure/cable, +/obj/machinery/camera/autoname/directional/west{ + network = list("ss13","medbay") + }, +/obj/effect/decal/cleanable/blood/old, +/turf/open/floor/iron/white, +/area/station/medical/surgery/theatre) +"kcz" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 6 + }, +/obj/structure/closet/radiation, +/turf/open/floor/iron, +/area/station/engineering/gravity_generator) +"kcA" = ( +/obj/structure/cable, +/obj/effect/turf_decal/tile/red/opposingcorners, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/security) +"kcB" = ( +/obj/effect/turf_decal/siding/purple/corner{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/junction/flip, +/turf/open/floor/iron/white/herringbone, +/area/station/science/breakroom) +"kcE" = ( +/obj/effect/landmark/event_spawn, +/turf/open/floor/iron/white, +/area/station/science/research) +"kcN" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 5 + }, +/obj/item/radio/intercom/directional/east, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/checker, +/area/station/science/research) +"kcW" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/spawner/random/structure/closet_empty/crate, +/obj/effect/spawner/random/maintenance, +/obj/machinery/newscaster/directional/west, +/turf/open/floor/iron, +/area/station/cargo/warehouse) +"kcY" = ( +/obj/structure/table/reinforced, +/obj/machinery/camera/directional/north{ + c_tag = "Science Robotics Office"; + network = list("ss13","rd") + }, +/obj/item/radio/intercom/directional/north, +/obj/item/storage/medkit{ + pixel_x = 7; + pixel_y = -3 + }, +/obj/item/storage/medkit{ + pixel_x = -5; + pixel_y = -1 + }, +/obj/item/healthanalyzer{ + pixel_x = 4; + pixel_y = 6 + }, +/obj/item/healthanalyzer{ + pixel_x = -3; + pixel_y = -4 + }, +/obj/effect/turf_decal/delivery/red, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/iron/white/smooth_large, +/area/station/science/robotics/lab) +"kda" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"kdc" = ( +/obj/effect/spawner/random/trash/graffiti, +/obj/machinery/light/small/dim/directional/east, +/turf/open/floor/plating, +/area/station/maintenance/central/greater) +"kde" = ( +/obj/structure/chair{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/turf/open/floor/plating/airless, +/area/station/science/ordnance/bomb) +"kdg" = ( +/turf/closed/wall, +/area/station/science/research) +"kdo" = ( +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/south, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark/side{ + dir = 6 + }, +/area/station/command/emergency_closet) +"kdp" = ( +/turf/open/floor/glass/reinforced, +/area/station/engineering/lobby) +"kdu" = ( +/obj/structure/toilet{ + dir = 1 + }, +/obj/effect/landmark/start/hangover, +/obj/effect/spawner/random/trash/graffiti{ + spawn_loot_chance = 50; + pixel_y = -32 + }, +/obj/machinery/light/small/dim/directional/east, +/obj/machinery/button/door/directional/west{ + normaldoorcontrol = 1; + specialfunctions = 4; + name = "privacy bolt control"; + id = "u3" + }, +/turf/open/floor/iron/freezer, +/area/station/commons/toilet/restrooms) +"kdw" = ( +/obj/effect/turf_decal/siding/purple{ + dir = 6 + }, +/obj/machinery/modular_computer/preset/civilian{ + dir = 8 + }, +/turf/open/floor/iron/white/herringbone, +/area/station/science/breakroom) +"kdI" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 6 + }, +/turf/open/floor/iron/white, +/area/station/medical/treatment_center) +"kdP" = ( +/obj/structure/bed/medical/emergency, +/obj/effect/turf_decal/bot{ + dir = 1 + }, +/obj/machinery/light/small/dim/directional/north, +/turf/open/floor/iron, +/area/station/command/gateway) +"kdR" = ( +/obj/machinery/camera/autoname/directional/south{ + network = list("aicore") + }, +/turf/open/floor/catwalk_floor/iron_dark/telecomms, +/area/station/ai_monitored/turret_protected/ai) +"kdW" = ( +/obj/machinery/smartfridge, +/obj/effect/turf_decal/tile/green/opposingcorners{ + dir = 1 + }, +/obj/effect/turf_decal/tile/blue/opposingcorners, +/turf/open/floor/iron, +/area/station/service/hydroponics) +"keb" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/research/glass{ + name = "Secure Pen" + }, +/obj/effect/mapping_helpers/airlock/access/all/science/xenobio, +/obj/structure/cable, +/obj/machinery/door/poddoor/preopen{ + id = "Xenolab"; + name = "Test Chamber Blast Door" + }, +/turf/open/floor/catwalk_floor/flat_white, +/area/station/science/xenobiology) +"ked" = ( +/obj/structure/cable, +/turf/open/floor/wood, +/area/station/service/lawoffice) +"kee" = ( +/obj/structure/cable/layer3, +/obj/effect/turf_decal/tile/blue, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/aisat/foyer) +"keg" = ( +/obj/structure/cable, +/obj/machinery/light/small/directional/east, +/obj/effect/turf_decal/tile/green/fourcorners, +/obj/machinery/camera/autoname/directional/north{ + network = list("ss13","medbay") + }, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/turf/open/floor/iron/white, +/area/station/medical/virology) +"keo" = ( +/obj/machinery/conveyor_switch/oneway{ + id = "QMLoad2"; + name = "Unloading Conveyor"; + pixel_x = -13; + pixel_y = -4 + }, +/turf/open/floor/iron, +/area/station/cargo/storage) +"ket" = ( +/obj/structure/reagent_dispensers/plumbed{ + dir = 1 + }, +/obj/machinery/light/small/directional/south, +/turf/open/floor/iron, +/area/station/commons/locker) +"kex" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/carpet/red, +/area/station/security/warden) +"keJ" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/visible/layer2, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) +"keP" = ( +/turf/open/floor/iron/stairs/left{ + dir = 1 + }, +/area/station/hallway/secondary/exit/departure_lounge) +"keQ" = ( +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/security/lockers) +"kfr" = ( +/obj/machinery/gulag_item_reclaimer{ + pixel_y = 24 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/fore) +"kfZ" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/green/visible, +/obj/machinery/meter, +/turf/closed/wall/r_wall, +/area/station/engineering/supermatter) +"kgb" = ( +/obj/machinery/light/directional/west, +/obj/effect/turf_decal/tile/yellow/fourcorners, +/turf/open/floor/iron, +/area/station/engineering/main) +"kgh" = ( +/obj/effect/turf_decal/trimline/blue/filled/line, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/camera/autoname/directional/south{ + network = list("ss13","medbay") + }, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/station/medical/exam_room) +"kgm" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/hallway/primary/central) +"kgA" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 1; + id = "kitchen_counter"; + name = "Kitchen Counter Shutters" + }, +/obj/machinery/door/firedoor, +/obj/item/book/manual/chef_recipes{ + pixel_x = 2; + pixel_y = 6 + }, +/turf/open/floor/iron/kitchen, +/area/station/service/kitchen) +"kgT" = ( +/obj/effect/turf_decal/tile/red/fourcorners, +/obj/machinery/door/firedoor, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/security/brig) +"khi" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/stairs{ + dir = 1 + }, +/area/station/cargo/bitrunning/den) +"khA" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/obj/machinery/disposal/bin, +/turf/open/floor/iron, +/area/station/commons/storage/primary) +"khL" = ( +/obj/effect/turf_decal/trimline/green/filled/line, +/obj/machinery/status_display/evac/directional/south, +/turf/open/floor/iron/white, +/area/station/hallway/secondary/entry) +"khO" = ( +/obj/machinery/atmospherics/components/unary/portables_connector/visible, +/obj/machinery/portable_atmospherics/canister, +/obj/effect/turf_decal/bot{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/supermatter/room) +"khP" = ( +/obj/structure/cable, +/obj/machinery/airalarm/directional/south, +/obj/effect/turf_decal/trimline/purple/filled/arrow_ccw, +/obj/effect/turf_decal/trimline/purple/filled/arrow_ccw{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/white/smooth_large, +/area/station/science/xenobiology/hallway) +"khZ" = ( +/obj/item/radio/intercom/directional/west, +/turf/open/floor/wood, +/area/station/commons/lounge) +"kib" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"kic" = ( +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"kik" = ( +/obj/effect/turf_decal/siding/white, +/obj/structure/chair/sofa/bench/right{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/herringbone, +/area/station/hallway/primary/central) +"kir" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/textured, +/area/station/hallway/primary/starboard) +"kiB" = ( +/obj/effect/turf_decal/tile/neutral/half/contrasted, +/obj/structure/table, +/obj/item/hand_tele, +/obj/effect/spawner/random/engineering/tracking_beacon, +/obj/machinery/power/apc/auto_name/directional/east, +/obj/structure/cable, +/obj/item/radio{ + pixel_x = -8; + broadcasting = 1 + }, +/turf/open/floor/iron/dark, +/area/station/command/teleporter) +"kiE" = ( +/obj/effect/spawner/random/trash/grille_or_waste, +/turf/open/floor/plating, +/area/station/maintenance/central/greater) +"kiK" = ( +/obj/effect/spawner/random/structure/closet_maintenance, +/obj/effect/spawner/random/maintenance/two, +/turf/open/floor/plating, +/area/station/maintenance/department/engine) +"kiN" = ( +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/construction/mining/aux_base) +"kiT" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, +/obj/effect/turf_decal/stripes, +/obj/structure/cable, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"kiW" = ( +/obj/item/radio/intercom/directional/south, +/turf/open/floor/iron/dark, +/area/station/engineering/supermatter/room) +"kjf" = ( +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/turf/open/floor/carpet/purple, +/area/station/service/library) +"kjg" = ( +/obj/effect/turf_decal/tile/dark_red/opposingcorners, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/service/bar) +"kjh" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/holosign/barrier, +/obj/machinery/light_switch/directional/west, +/turf/open/floor/iron, +/area/station/cargo/warehouse/upper) +"kjo" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/wood, +/area/station/command/heads_quarters/qm) +"kjp" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/engineering/gravity_generator) +"kjs" = ( +/obj/effect/spawner/random/structure/chair_comfy{ + dir = 1 + }, +/obj/effect/turf_decal/tile/dark_blue/half/contrasted{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/command/bridge) +"kju" = ( +/obj/machinery/door/airlock/maintenance_hatch, +/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 1 + }, +/turf/open/floor/plating, +/area/station/maintenance/department/science) +"kjv" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/engineering/atmos/upper) +"kjx" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/broken_flooring/singular, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"kjR" = ( +/obj/item/radio/intercom/directional/north, +/obj/structure/rack, +/obj/item/clothing/glasses/meson/engine, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 5 + }, +/obj/structure/cable, +/obj/item/trapdoor_remote/preloaded, +/obj/machinery/light_switch/directional/north{ + pixel_x = 26 + }, +/turf/open/floor/iron, +/area/station/command/heads_quarters/ce) +"kjU" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 5 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/medical/treatment_center) +"kke" = ( +/obj/structure/tank_dispenser, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/item/radio/intercom/directional/north, +/obj/machinery/light_switch/directional/east, +/turf/open/floor/iron/dark, +/area/station/science/ordnance) +"kkf" = ( +/obj/machinery/portable_atmospherics/canister/nitrous_oxide, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"kki" = ( +/obj/machinery/fax{ + fax_name = "Quartermaster's Office"; + name = "Quartermaster's Fax Machine" + }, +/obj/effect/turf_decal/siding/wood{ + dir = 6 + }, +/obj/structure/table/wood/fancy/orange, +/turf/open/floor/wood, +/area/station/command/heads_quarters/qm) +"kkx" = ( +/turf/open/misc/asteroid/airless, +/area/space/nearstation) +"kkA" = ( +/obj/machinery/light_switch/directional/east, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/dark, +/area/station/security/mechbay) +"kkC" = ( +/obj/machinery/light/small/directional/east, +/obj/structure/rack, +/obj/effect/spawner/random/armory/laser_gun, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/security/armory) +"kkD" = ( +/obj/machinery/smartfridge/extract, +/obj/structure/sign/poster/official/random/directional/south, +/turf/open/floor/iron/white/textured_large, +/area/station/science/xenobiology) +"kkF" = ( +/obj/machinery/chem_master/condimaster{ + name = "CondiMaster Neo" + }, +/obj/machinery/light/directional/east, +/turf/open/floor/iron/kitchen, +/area/station/service/kitchen) +"kkJ" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/structure/table, +/obj/machinery/cell_charger, +/obj/item/stock_parts/power_store/cell/high, +/obj/machinery/button/door/directional/south{ + id = "evashutter"; + name = "E.V.A. Storage Shutter Control"; + req_access = list("command") + }, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/command/storage/eva) +"kkK" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/circuit/green, +/area/station/ai_monitored/command/nuke_storage) +"kkT" = ( +/obj/structure/cable, +/obj/effect/turf_decal/tile/red, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/security/lockers) +"kkU" = ( +/obj/effect/turf_decal/tile/brown/half/contrasted, +/obj/machinery/camera/autoname/directional/south, +/turf/open/floor/iron, +/area/station/cargo/storage) +"kld" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/engineering/lobby) +"kll" = ( +/obj/structure/railing{ + dir = 8 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/yellow/filled/corner, +/obj/effect/turf_decal/trimline/yellow/filled/corner{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/engineering/lobby) +"klu" = ( +/obj/structure/railing{ + dir = 1 + }, +/obj/structure/railing/corner, +/obj/structure/lattice/catwalk, +/turf/open/openspace, +/area/station/science/xenobiology) +"klz" = ( +/obj/structure/rack, +/obj/effect/spawner/random/maintenance, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/port/greater) +"klG" = ( +/obj/effect/turf_decal/tile/red/half/contrasted, +/obj/item/radio/intercom/directional/south, +/turf/open/floor/iron, +/area/station/security) +"klJ" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/service/janitor) +"klL" = ( +/obj/machinery/door/window/brigdoor/left/directional/west{ + name = "Command Desk"; + req_access = list("command") + }, +/obj/effect/turf_decal/siding/dark_blue{ + dir = 8 + }, +/turf/open/floor/iron/textured_large, +/area/station/command/bridge) +"klP" = ( +/obj/structure/sign/poster/random/directional/west, +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/cargo/storage) +"klR" = ( +/obj/machinery/light/small/dim/directional/east, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron/white/smooth_large, +/area/station/medical/patients_rooms/room_b) +"kmb" = ( +/obj/effect/decal/cleanable/dirt, +/obj/item/radio/intercom/directional/west, +/turf/open/floor/iron, +/area/station/commons/storage/primary) +"kmj" = ( +/obj/machinery/door/airlock/mining{ + name = "Boutique Backroom" + }, +/obj/effect/mapping_helpers/airlock/access/all/supply/general, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/machinery/door/firedoor, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment, +/turf/open/floor/wood/large, +/area/station/cargo/boutique) +"kmu" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"kmB" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/engineering/main) +"kmL" = ( +/obj/structure/cable, +/obj/effect/turf_decal/tile/neutral/half{ + dir = 8 + }, +/turf/open/floor/iron/edge{ + dir = 8 + }, +/area/station/hallway/secondary/exit/departure_lounge) +"kmX" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/trunk/multiz/down, +/turf/open/floor/iron, +/area/station/cargo/storage) +"kmZ" = ( +/obj/structure/lattice, +/turf/open/space, +/area/space/nearstation) +"kng" = ( +/obj/structure/closet/secure_closet/warden, +/obj/item/gun/energy/laser, +/obj/item/radio/intercom/directional/north, +/turf/open/floor/carpet/red, +/area/station/security/warden) +"kno" = ( +/obj/structure/chair/sofa/bench{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 8 + }, +/obj/machinery/camera/autoname/directional/east, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/exit/departure_lounge) +"knt" = ( +/obj/effect/turf_decal/loading_area/white, +/turf/open/floor/iron/textured_large, +/area/station/cargo/lobby) +"knw" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/bot_white/right, +/turf/open/floor/iron/dark, +/area/station/command/gateway) +"knK" = ( +/obj/machinery/door/airlock/atmos/glass{ + name = "Atmospherics" + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/tile/yellow/opposingcorners{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/checker, +/area/station/engineering/atmos/storage/gas) +"knX" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"kod" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 6 + }, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) +"koe" = ( +/obj/machinery/portable_atmospherics/pump, +/obj/machinery/atmospherics/components/unary/portables_connector/visible/layer4{ + dir = 4 + }, +/obj/effect/turf_decal/tile/yellow{ + dir = 1 + }, +/obj/machinery/firealarm/directional/west, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) +"kol" = ( +/obj/effect/landmark/start/depsec/engineering, +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/engineering) +"kop" = ( +/obj/effect/mapping_helpers/burnt_floor, +/obj/effect/spawner/random/trash/mess, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"koz" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/neutral, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/obj/machinery/airalarm/directional/south, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"koA" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"koG" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/bot_white/left, +/turf/open/floor/iron/dark, +/area/station/command/gateway) +"koM" = ( +/obj/structure/table, +/obj/effect/turf_decal/tile/blue/opposingcorners{ + dir = 1 + }, +/obj/item/radio/intercom/directional/south, +/turf/open/floor/iron/cafeteria, +/area/station/commons/locker) +"koT" = ( +/obj/machinery/door/airlock/command{ + name = "Chief Engineer" + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/ce, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/plating, +/area/station/command/heads_quarters/ce) +"koX" = ( +/obj/structure/cable/multilayer/multiz, +/obj/effect/turf_decal/sand/plating, +/turf/open/floor/plating, +/area/station/asteroid) +"koZ" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/broken_flooring/pile, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"kpe" = ( +/obj/structure/closet/l3closet/janitor, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/camera/autoname/directional/north, +/turf/open/floor/iron, +/area/station/service/janitor) +"kpj" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/iron/chapel{ + dir = 8 + }, +/area/station/service/chapel) +"kpn" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, +/obj/effect/turf_decal/stripes{ + dir = 1 + }, +/obj/structure/cable, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"kps" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/iron/dark/smooth_edge, +/area/station/science/xenobiology) +"kpw" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/plating, +/area/station/maintenance/port/lesser) +"kpx" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/misc/asteroid, +/area/station/asteroid) +"kpy" = ( +/obj/effect/turf_decal/tile/red/opposingcorners, +/obj/effect/landmark/event_spawn, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/security) +"kpD" = ( +/obj/structure/table/wood/fancy/red, +/obj/effect/spawner/random/aimodule/harmful, +/obj/structure/window/reinforced/spawner/directional/south, +/obj/machinery/door/window/brigdoor/left/directional/east{ + req_access = list("captain"); + name = "High-Risk Modules" + }, +/obj/item/ai_module/reset/purge{ + pixel_y = 11 + }, +/turf/open/floor/circuit/red, +/area/station/ai_monitored/turret_protected/ai_upload) +"kpG" = ( +/obj/effect/turf_decal/stripes/red/corner, +/obj/effect/turf_decal/stripes/red/corner{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/medical/morgue) +"kpP" = ( +/obj/machinery/door/airlock/command{ + name = "Shower"; + id_tag = "cmoshower" + }, +/turf/open/floor/iron/freezer, +/area/station/command/heads_quarters/cmo) +"kpT" = ( +/obj/effect/spawner/random/decoration/paint, +/obj/structure/closet/crate/engineering, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/dirt, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/iron, +/area/station/maintenance/department/cargo) +"kqf" = ( +/obj/machinery/plumbing/input{ + dir = 8 + }, +/obj/item/radio/intercom/directional/south, +/turf/open/floor/iron/dark/small, +/area/station/science/cytology) +"kqj" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/obj/effect/turf_decal/sand/plating, +/turf/open/floor/plating/airless, +/area/station/asteroid) +"kqy" = ( +/obj/structure/cable, +/turf/open/floor/plating/airless, +/area/station/solars/port/aft) +"kqB" = ( +/obj/effect/landmark/event_spawn, +/obj/structure/toilet{ + dir = 1 + }, +/obj/item/radio/intercom/directional/east, +/turf/open/floor/iron/showroomfloor, +/area/station/science/research) +"kqC" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/engineering/storage) +"kqD" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/commons/locker) +"kqE" = ( +/obj/effect/turf_decal/tile/red/half/contrasted, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/fore) +"kqQ" = ( +/turf/open/floor/iron/half{ + dir = 1 + }, +/area/station/service/hydroponics/garden) +"kqS" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/engine, +/area/station/command/corporate_dock) +"kqV" = ( +/obj/structure/rack, +/obj/item/storage/box/teargas{ + pixel_x = 1; + pixel_y = -2 + }, +/obj/effect/spawner/random/armory/barrier_grenades{ + pixel_y = 3 + }, +/obj/machinery/button/door/directional/west{ + name = "Armory Shutters"; + id = "armory" + }, +/obj/effect/turf_decal/tile/red/half/contrasted, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/security/armory) +"kqW" = ( +/turf/open/floor/wood, +/area/station/service/library) +"kra" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/cargo/warehouse/upper) +"krg" = ( +/obj/structure/training_machine, +/turf/open/floor/engine, +/area/station/science/explab) +"kri" = ( +/obj/effect/turf_decal/siding/purple{ + dir = 1 + }, +/turf/open/floor/iron/white/smooth_half, +/area/station/science/research) +"krj" = ( +/obj/structure/railing/corner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 1 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/camera/autoname/directional/north{ + network = list("ss13","medbay") + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) +"krq" = ( +/obj/structure/hoop{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/stripes/white/line{ + dir = 4 + }, +/obj/machinery/light/directional/east, +/turf/open/floor/iron, +/area/station/security/prison) +"krJ" = ( +/obj/machinery/atmospherics/pipe/smart/simple/purple/visible{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/engineering/atmos) +"krO" = ( +/obj/structure/cable, +/turf/open/floor/catwalk_floor/flat_white, +/area/station/science/xenobiology) +"krP" = ( +/turf/closed/wall/r_wall, +/area/station/command/teleporter) +"krW" = ( +/obj/structure/rack, +/obj/item/storage/toolbox/mechanical, +/obj/item/stack/cable_coil, +/turf/open/floor/plating, +/area/station/engineering/storage) +"ksa" = ( +/obj/effect/turf_decal/tile/red/half/contrasted, +/obj/effect/turf_decal/trimline/dark_red/filled/warning, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/hallway/secondary/exit/departure_lounge) +"ksd" = ( +/obj/effect/turf_decal/tile/yellow{ + dir = 4 + }, +/obj/machinery/light/directional/north, +/turf/open/floor/iron/dark/corner{ + dir = 1 + }, +/area/station/engineering/atmos) +"kse" = ( +/obj/structure/table/wood, +/obj/item/restraints/handcuffs, +/turf/open/floor/carpet/executive, +/area/station/command/meeting_room) +"ksf" = ( +/obj/structure/table/wood, +/obj/effect/turf_decal/sand/plating, +/obj/item/reagent_containers/cup/glass/drinkingglass/shotglass, +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/spawner/random/food_or_drink/booze{ + spawn_random_offset = 1 + }, +/turf/open/floor/plating, +/area/station/maintenance/central/greater) +"ksg" = ( +/obj/effect/turf_decal/tile/yellow{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/simple/green/visible{ + dir = 8 + }, +/obj/machinery/camera/autoname/directional/north, +/turf/open/floor/iron/dark/corner{ + dir = 1 + }, +/area/station/engineering/atmos/upper) +"ksl" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/wood/parquet, +/area/station/cargo/boutique) +"ksq" = ( +/obj/structure/sign/poster/contraband/random/directional/south, +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/turf/open/floor/carpet/orange, +/area/station/service/theater) +"ksw" = ( +/obj/effect/turf_decal/tile/neutral, +/obj/structure/extinguisher_cabinet/directional/east, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"ksE" = ( +/obj/structure/table, +/obj/item/stack/rods/two, +/obj/item/stack/cable_coil/five, +/obj/effect/decal/cleanable/dirt/dust, +/obj/item/radio/intercom/directional/north, +/turf/open/floor/iron/dark, +/area/station/security/mechbay) +"ksR" = ( +/obj/effect/turf_decal/siding/thinplating_new{ + dir = 8 + }, +/turf/open/floor/glass/reinforced, +/area/station/engineering/atmos/upper) +"ksU" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/white, +/area/station/medical/exam_room) +"ktc" = ( +/obj/structure/reflector/single{ + dir = 5 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/supermatter/room) +"ktr" = ( +/obj/machinery/door/airlock/grunge{ + name = "Radiation Shelter" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/maintenance/radshelter/civil) +"ktD" = ( +/obj/item/shard, +/obj/effect/decal/cleanable/glass, +/turf/open/floor/iron/dark, +/area/station/security/prison/safe) +"ktG" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 10 + }, +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/engineering/main) +"ktL" = ( +/turf/open/floor/iron, +/area/station/engineering/atmos/upper) +"ktU" = ( +/obj/machinery/airalarm/directional/south, +/obj/structure/urinal/directional/north, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron/freezer, +/area/station/commons/toilet/restrooms) +"kub" = ( +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/showroomfloor, +/area/station/maintenance/department/engine) +"kuk" = ( +/obj/item/toy/plush/lizard_plushie/space/green{ + name = "Delaminates-The-Supermatter" + }, +/turf/open/misc/asteroid/airless, +/area/space/nearstation) +"kuy" = ( +/obj/effect/landmark/event_spawn, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/structure/cable, +/turf/open/floor/wood/parquet, +/area/station/medical/psychology) +"kuI" = ( +/obj/structure/chair/sofa/right/maroon, +/obj/effect/landmark/start/psychologist, +/turf/open/floor/carpet, +/area/station/medical/psychology) +"kuP" = ( +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/central/lesser) +"kuS" = ( +/obj/item/trash/boritos/purple, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron, +/area/station/service/cafeteria) +"kuW" = ( +/obj/structure/statue/sandstone/venus{ + dir = 1 + }, +/turf/open/floor/grass, +/area/station/science/research) +"kuX" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "geneshut" + }, +/turf/open/floor/plating, +/area/station/science/genetics) +"kvj" = ( +/obj/machinery/light/directional/north, +/obj/structure/table, +/obj/effect/turf_decal/tile/purple/opposingcorners, +/obj/item/storage/toolbox/mechanical, +/turf/open/floor/iron/white, +/area/station/science/auxlab/firing_range) +"kvk" = ( +/obj/structure/table, +/obj/machinery/fax{ + fax_name = "Chief Medical Officer's Office"; + name = "Chief Medical Officer's Fax Machine" + }, +/obj/machinery/light_switch/directional/north, +/turf/open/floor/iron/dark/textured, +/area/station/command/heads_quarters/cmo) +"kvo" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/dark, +/area/station/medical/chemistry/minisat) +"kvU" = ( +/obj/effect/turf_decal/sand/plating, +/obj/structure/rack, +/obj/effect/mapping_helpers/broken_floor, +/obj/machinery/light/small/directional/east, +/obj/item/reagent_containers/cup/glass/drinkingglass/shotglass, +/obj/item/reagent_containers/cup/glass/drinkingglass/shotglass, +/obj/item/reagent_containers/cup/rag, +/turf/open/floor/plating, +/area/station/maintenance/central/greater) +"kvX" = ( +/obj/effect/turf_decal/sand/plating, +/obj/effect/spawner/random/trash/mess, +/turf/open/floor/plating, +/area/station/maintenance/central/greater) +"kwc" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/maintenance/aft/upper) +"kwh" = ( +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/dark/visible, +/obj/machinery/meter, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/visible/layer2, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) +"kwp" = ( +/obj/item/storage/box/bodybags, +/obj/item/healthanalyzer, +/obj/structure/rack, +/obj/structure/window/spawner/directional/east, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/iron/white/smooth_half{ + dir = 8 + }, +/area/station/science/robotics/lab) +"kwS" = ( +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 4 + }, +/obj/item/radio/intercom/directional/east, +/obj/effect/landmark/start/depsec/supply, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/security/checkpoint/supply) +"kwU" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) +"kwW" = ( +/obj/effect/mapping_helpers/burnt_floor, +/obj/structure/kitchenspike_frame, +/obj/effect/decal/cleanable/blood/old, +/obj/machinery/light/small/dim/directional/north, +/turf/open/floor/plating, +/area/station/maintenance/central/greater) +"kxa" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/turf/open/floor/iron/white, +/area/station/medical/storage) +"kxk" = ( +/obj/effect/turf_decal/tile/neutral/diagonal_centre, +/obj/machinery/camera/autoname/directional/north, +/turf/open/floor/iron/dark, +/area/station/service/chapel/funeral) +"kxm" = ( +/obj/machinery/door/airlock/public/glass{ + name = "Prison Showers" + }, +/obj/structure/cable, +/turf/open/floor/iron/freezer, +/area/station/security/prison/shower) +"kxs" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/spawner/random/medical/memeorgans, +/obj/structure/closet/crate/freezer, +/obj/effect/decal/cleanable/blood/old, +/turf/open/floor/iron/freezer, +/area/station/maintenance/department/medical/central) +"kxz" = ( +/obj/effect/landmark/event_spawn, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/circuit/green, +/area/station/science/robotics/mechbay) +"kxB" = ( +/turf/closed/wall/r_wall, +/area/station/asteroid) +"kxD" = ( +/obj/effect/turf_decal/tile/red/anticorner/contrasted{ + dir = 1 + }, +/obj/machinery/computer/records/security, +/obj/machinery/requests_console/auto_name/directional/north, +/obj/effect/mapping_helpers/requests_console/supplies, +/obj/effect/mapping_helpers/requests_console/information, +/turf/open/floor/iron, +/area/station/security/office) +"kxG" = ( +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/east, +/obj/effect/turf_decal/tile/yellow{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark/corner, +/area/station/engineering/atmos/pumproom) +"kxS" = ( +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/research/glass{ + name = "Chemistry Lab" + }, +/obj/effect/mapping_helpers/airlock/access/all/medical/chemistry, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron/white, +/area/station/medical/chemistry) +"kxZ" = ( +/obj/structure/table, +/obj/effect/turf_decal/tile/yellow/anticorner/contrasted{ + dir = 4 + }, +/obj/item/storage/toolbox/emergency, +/obj/item/stack/sheet/glass/fifty, +/obj/effect/landmark/start/hangover, +/turf/open/floor/iron, +/area/station/commons/storage/tools) +"kyb" = ( +/obj/effect/turf_decal/tile/yellow{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) +"kyd" = ( +/obj/structure/table/wood, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/item/book/bible, +/obj/machinery/newscaster/directional/north, +/obj/item/radio/intercom/directional/east, +/turf/open/floor/carpet, +/area/station/service/chapel/funeral) +"kyh" = ( +/obj/effect/landmark/start/station_engineer, +/obj/effect/landmark/event_spawn, +/obj/machinery/holopad, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/engineering/storage) +"kyi" = ( +/mob/living/basic/mothroach, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/commons/storage/art) +"kyn" = ( +/obj/structure/table, +/obj/item/instrument/harmonica, +/turf/open/floor/iron, +/area/station/security/prison) +"kyv" = ( +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/aisat/foyer) +"kyA" = ( +/obj/effect/turf_decal/tile/brown/half/contrasted, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/obj/machinery/light_switch/directional/south, +/turf/open/floor/iron, +/area/station/cargo/storage) +"kyE" = ( +/obj/structure/railing/corner{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/engineering/main) +"kyP" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"kyQ" = ( +/obj/structure/closet/emcloset, +/turf/open/floor/iron/textured, +/area/station/hallway/primary/starboard) +"kze" = ( +/obj/structure/rack, +/obj/item/storage/toolbox/electrical, +/turf/open/floor/glass/reinforced, +/area/station/engineering/lobby) +"kzk" = ( +/obj/effect/turf_decal/stripes{ + dir = 8 + }, +/turf/open/floor/engine, +/area/station/engineering/atmospherics_engine) +"kzC" = ( +/obj/structure/cable, +/obj/effect/turf_decal/siding/purple, +/obj/effect/mapping_helpers/mail_sorting/science/xenobiology, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/sorting/mail/flip{ + dir = 8 + }, +/turf/open/floor/iron/white/smooth_large, +/area/station/science/research) +"kzG" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/turf/open/floor/plating, +/area/station/maintenance/port/lesser) +"kzI" = ( +/obj/machinery/door/airlock/virology/glass{ + name = "Virology Lab"; + id_tag = "virology_airlock_interior" + }, +/obj/effect/mapping_helpers/airlock/locked, +/obj/effect/mapping_helpers/airlock/access/all/medical/virology, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/green/fourcorners, +/obj/machinery/door_buttons/access_button{ + idDoor = "virology_airlock_interior"; + idSelf = "virology_airlock_control"; + name = "Virology Access Button"; + pixel_x = -24; + pixel_y = 8; + req_access = list("virology") + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron/white, +/area/station/medical/virology) +"kzK" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/junction/flip{ + dir = 4 + }, +/turf/open/floor/wood, +/area/station/service/library) +"kzS" = ( +/obj/effect/landmark/generic_maintenance_landmark, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/plating, +/area/station/maintenance/department/medical) +"kAc" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/engine, +/area/station/hallway/secondary/entry) +"kAg" = ( +/turf/closed/wall, +/area/station/service/hydroponics/garden) +"kAh" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, +/obj/effect/turf_decal/stripes{ + dir = 5 + }, +/obj/machinery/light/directional/east, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"kAw" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/junction/flip{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/maintenance/port/lesser) +"kAI" = ( +/obj/machinery/door/airlock/maintenance_hatch, +/obj/effect/mapping_helpers/airlock/access/all/science/ordnance, +/obj/machinery/atmospherics/pipe/smart/simple/green/visible{ + dir = 1 + }, +/turf/open/floor/plating, +/area/station/science/ordnance/testlab) +"kAW" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/light/floor/broken, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"kBf" = ( +/obj/structure/cable, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 1 + }, +/obj/machinery/light/directional/north, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/hallway/primary/fore) +"kBh" = ( +/obj/structure/cable/multilayer/multiz, +/obj/machinery/light/small/dim/directional/west, +/turf/open/floor/glass, +/area/station/ai_monitored/turret_protected/ai) +"kBm" = ( +/obj/structure/cable, +/turf/open/floor/iron/large, +/area/station/service/hydroponics/garden) +"kBr" = ( +/obj/structure/barricade/wooden, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/simple/green/visible{ + dir = 4 + }, +/obj/item/flashlight/glowstick/blue{ + start_on = 1; + light_range = 2 + }, +/turf/open/floor/plating, +/area/station/maintenance/department/science) +"kBs" = ( +/obj/structure/window/reinforced/spawner/directional/south, +/obj/structure/flora/bush/fullgrass/style_random, +/obj/structure/window/reinforced/spawner/directional/east, +/turf/open/floor/grass, +/area/station/science/research) +"kBt" = ( +/obj/machinery/modular_computer/preset/civilian, +/obj/machinery/button/door/directional/north{ + id = "roboticsprivacy"; + name = "Robotics Privacy Control"; + pixel_x = -24; + req_access = list("robotics") + }, +/obj/effect/turf_decal/delivery, +/obj/machinery/light_switch/directional/north, +/turf/open/floor/iron/dark/textured, +/area/station/science/robotics/lab) +"kBw" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/station/science/ordnance/testlab) +"kBx" = ( +/obj/structure/railing/corner{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"kBy" = ( +/obj/structure/frame/machine, +/obj/item/shard, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/showroomfloor, +/area/station/maintenance/department/engine) +"kBJ" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/ai_monitored/turret_protected/aisat/uppersouth) +"kBM" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/turf/open/floor/plating, +/area/station/maintenance/port/lesser) +"kBN" = ( +/obj/machinery/atmospherics/pipe/smart/simple/orange/visible{ + dir = 9 + }, +/turf/open/floor/iron, +/area/station/engineering/atmos) +"kBX" = ( +/obj/structure/window/reinforced/spawner/directional/east, +/obj/structure/window/reinforced/spawner/directional/north, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/chair{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/maintenance/department/cargo) +"kCc" = ( +/obj/effect/landmark/secequipment, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 1 + }, +/obj/machinery/airalarm/directional/south, +/obj/machinery/camera/autoname/directional/west, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/security/interrogation) +"kCg" = ( +/obj/effect/turf_decal/tile/neutral/diagonal_centre, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/service/chapel/funeral) +"kCn" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/yellow/filled/mid_joiner{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron/white/smooth_edge{ + dir = 1 + }, +/area/station/medical/pharmacy) +"kCr" = ( +/obj/structure/rack, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/iron/dark, +/area/station/maintenance/department/engine) +"kCs" = ( +/obj/structure/railing{ + dir = 9 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/turf/open/floor/glass, +/area/station/command/meeting_room) +"kCu" = ( +/obj/structure/railing{ + dir = 4 + }, +/obj/machinery/airalarm/directional/north, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/item/kirbyplants/random, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/hallway/secondary/exit/departure_lounge) +"kCD" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/obj/effect/turf_decal/tile/dark_blue{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/command/bridge) +"kCJ" = ( +/obj/structure/toilet{ + dir = 4 + }, +/obj/machinery/light/small/directional/south, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/service/theater) +"kDb" = ( +/obj/structure/window/reinforced/spawner/directional/east, +/obj/structure/cable, +/turf/open/floor/glass/reinforced, +/area/station/security/prison) +"kDf" = ( +/turf/open/floor/engine/hull, +/area/space/nearstation) +"kDm" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"kDs" = ( +/obj/docking_port/stationary/public_mining_dock{ + dir = 2 + }, +/turf/open/floor/plating, +/area/station/construction/mining/aux_base) +"kDx" = ( +/obj/machinery/meter, +/obj/machinery/atmospherics/pipe/smart/simple/green/visible{ + dir = 1 + }, +/turf/closed/wall/r_wall, +/area/station/engineering/atmos) +"kDC" = ( +/obj/machinery/firealarm/directional/south, +/obj/effect/turf_decal/tile/blue, +/obj/effect/turf_decal/tile/green{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/turf/open/floor/iron, +/area/station/service/hydroponics) +"kDI" = ( +/obj/effect/turf_decal/siding/thinplating_new{ + dir = 5 + }, +/obj/machinery/light_switch/directional/north, +/turf/open/floor/glass/reinforced, +/area/station/engineering/atmos/upper) +"kDJ" = ( +/obj/effect/turf_decal/sand/plating, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/central/greater) +"kEg" = ( +/obj/machinery/suit_storage_unit/standard_unit, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/item/radio/intercom/directional/west, +/obj/effect/turf_decal/delivery, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/command/storage/eva) +"kEn" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/mapping_helpers/mail_sorting/engineering/general, +/obj/structure/disposalpipe/sorting/mail/flip{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/engineering/lobby) +"kEp" = ( +/obj/effect/turf_decal/tile/neutral/anticorner/contrasted, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/exit/departure_lounge) +"kEt" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/cargo/lobby) +"kEu" = ( +/turf/open/floor/iron/dark, +/area/station/engineering/supermatter/room) +"kEJ" = ( +/obj/structure/toilet{ + dir = 4 + }, +/obj/effect/landmark/start/hangover, +/obj/effect/spawner/random/trash/graffiti{ + pixel_x = -32; + spawn_loot_chance = 50 + }, +/obj/machinery/light/small/dim/directional/south, +/obj/machinery/button/door/directional/north{ + name = "privacy bolt control"; + normaldoorcontrol = 1; + specialfunctions = 4; + id = "u1" + }, +/turf/open/floor/iron/freezer, +/area/station/commons/toilet/restrooms) +"kEM" = ( +/obj/effect/turf_decal/box/corners{ + dir = 4 + }, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/science/ordnance) +"kFi" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/commons/locker) +"kFl" = ( +/obj/effect/turf_decal/siding/purple, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/white/smooth_half, +/area/station/science/research) +"kFm" = ( +/obj/structure/rack, +/obj/item/stack/sheet/iron/twenty, +/obj/item/stack/sheet/iron/ten, +/obj/item/stack/sheet/glass{ + amount = 30 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light/directional/north, +/turf/open/floor/iron, +/area/station/commons/storage/primary) +"kFp" = ( +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/engineering/break_room) +"kFB" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/turf/open/floor/wood/tile, +/area/station/security/courtroom) +"kFO" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/orange/visible, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable/layer1, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"kFP" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners{ + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/command/heads_quarters/rd) +"kFR" = ( +/obj/effect/turf_decal/siding/wood, +/obj/structure/cable, +/turf/open/floor/carpet, +/area/station/security/detectives_office) +"kFT" = ( +/turf/closed/wall, +/area/station/security/checkpoint/medical) +"kGf" = ( +/obj/machinery/power/smes, +/obj/structure/cable, +/obj/machinery/power/terminal, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/light_switch/directional/east, +/turf/open/floor/plating, +/area/station/maintenance/solars/starboard/fore) +"kGm" = ( +/obj/structure/window/reinforced/spawner/directional/south, +/obj/structure/lattice, +/turf/open/space/basic, +/area/space/nearstation) +"kGo" = ( +/obj/structure/ladder{ + icon_state = "ladder10" + }, +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/science/xenobiology) +"kGu" = ( +/turf/open/floor/iron/stairs/medium, +/area/station/command/corporate_showroom) +"kGy" = ( +/obj/effect/spawner/random/structure/closet_maintenance, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/plating, +/area/station/maintenance/central/greater) +"kGF" = ( +/obj/effect/turf_decal/tile/neutral/half{ + dir = 8 + }, +/obj/structure/extinguisher_cabinet/directional/west, +/turf/open/floor/iron/edge{ + dir = 8 + }, +/area/station/hallway/secondary/exit/departure_lounge) +"kGS" = ( +/turf/closed/wall/rust, +/area/station/maintenance/department/medical) +"kGZ" = ( +/turf/open/floor/iron/dark, +/area/station/engineering/atmospherics_engine) +"kHf" = ( +/obj/structure/table, +/obj/item/clipboard, +/obj/item/wrench, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/airalarm/directional/north, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/science/server) +"kHn" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) +"kHp" = ( +/obj/machinery/disposal/bin, +/obj/effect/turf_decal/trimline/yellow/filled/line, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/obj/machinery/light/directional/south, +/turf/open/floor/iron, +/area/station/engineering/storage) +"kHw" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/obj/machinery/light/dim/directional/east, +/obj/effect/turf_decal/tile/green/half{ + dir = 4 + }, +/turf/open/floor/iron/white/smooth_large, +/area/station/medical/virology) +"kHG" = ( +/obj/effect/spawner/random/trash/moisture_trap, +/obj/effect/turf_decal/sand/plating, +/turf/open/floor/plating, +/area/station/maintenance/department/science) +"kHU" = ( +/obj/structure/lattice/catwalk, +/obj/structure/railing{ + dir = 4 + }, +/obj/structure/cable/layer3, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/turf/open/openspace, +/area/station/engineering/atmos) +"kIl" = ( +/obj/machinery/recharge_station, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/power/apc/auto_name/directional/west, +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/command/storage/satellite) +"kIm" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 4 + }, +/obj/machinery/status_display/evac/directional/east, +/turf/open/floor/iron/white, +/area/station/hallway/secondary/entry) +"kIx" = ( +/obj/effect/turf_decal/siding/thinplating_new{ + dir = 10 + }, +/turf/open/floor/glass/reinforced, +/area/station/engineering/atmos/upper) +"kIB" = ( +/obj/effect/spawner/random/structure/closet_maintenance, +/turf/open/floor/plating, +/area/station/maintenance/central/greater) +"kIK" = ( +/obj/structure/table, +/obj/item/flashlight/lamp, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark/textured, +/area/station/security/interrogation) +"kIM" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/frame/computer, +/obj/effect/decal/cleanable/glass, +/obj/item/shard, +/turf/open/floor/iron, +/area/station/maintenance/department/medical/central) +"kIS" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/engineering/main) +"kIY" = ( +/obj/effect/turf_decal/siding/purple, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/turf/open/floor/iron/white/smooth_corner{ + dir = 8 + }, +/area/station/science/research) +"kJj" = ( +/obj/effect/turf_decal/tile/blue/full, +/obj/machinery/holopad, +/obj/effect/turf_decal/bot_white{ + color = "#74b2d3" + }, +/turf/open/floor/iron/white/smooth_large, +/area/station/medical/treatment_center) +"kJl" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/chapel{ + dir = 1 + }, +/area/station/service/chapel) +"kJp" = ( +/obj/machinery/disposal/bin, +/obj/effect/turf_decal/tile/dark_blue/anticorner/contrasted{ + dir = 1 + }, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/obj/machinery/airalarm/directional/west, +/turf/open/floor/iron, +/area/station/hallway/secondary/command) +"kJH" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/item/trash/chips, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"kJM" = ( +/obj/machinery/power/apc/auto_name/directional/south, +/obj/effect/turf_decal/tile/brown/half/contrasted, +/obj/structure/table, +/obj/item/storage/medkit/regular, +/obj/structure/cable, +/obj/item/healthanalyzer/simple, +/obj/effect/mapping_helpers/apc/full_charge, +/turf/open/floor/iron, +/area/station/cargo/storage) +"kJN" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/wood/parquet, +/area/station/cargo/boutique) +"kJT" = ( +/turf/closed/wall, +/area/station/commons/storage/art) +"kJV" = ( +/obj/effect/spawner/random/decoration/statue, +/turf/open/floor/plating/airless, +/area/space/nearstation) +"kKc" = ( +/obj/structure/cable, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/white, +/area/station/medical/treatment_center) +"kKw" = ( +/obj/effect/spawner/random/vending/snackvend, +/obj/effect/turf_decal/siding/green{ + dir = 1 + }, +/obj/machinery/light/small/dim/directional/west, +/turf/open/floor/iron/textured_large, +/area/station/hallway/primary/central) +"kKC" = ( +/obj/machinery/atmospherics/pipe/smart/simple/dark/visible{ + dir = 8 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/science/ordnance) +"kKJ" = ( +/obj/machinery/rnd/destructive_analyzer, +/obj/machinery/light/directional/north, +/turf/open/floor/iron/white, +/area/station/science/lab) +"kKK" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 9 + }, +/obj/item/radio/intercom/directional/north, +/obj/item/kirbyplants/random, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) +"kKN" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/iron/showroomfloor, +/area/station/engineering/main) +"kKR" = ( +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/aft/upper) +"kLi" = ( +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/station/maintenance/department/medical/central) +"kLw" = ( +/obj/structure/window/reinforced/spawner/directional/south, +/turf/open/floor/engine, +/area/station/science/explab) +"kLL" = ( +/obj/effect/turf_decal/sand/plating, +/obj/effect/spawner/random/structure/grille, +/turf/open/floor/plating/airless, +/area/station/asteroid) +"kLO" = ( +/obj/structure/chair/stool/bar/directional/north, +/obj/effect/turf_decal/siding/wood{ + dir = 10 + }, +/obj/effect/turf_decal/tile/bar/opposingcorners, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/commons/lounge) +"kLQ" = ( +/obj/structure/window/reinforced/spawner/directional/south, +/obj/structure/window/reinforced/spawner/directional/east, +/turf/open/floor/engine, +/area/station/science/xenobiology) +"kLU" = ( +/obj/machinery/firealarm/directional/east, +/obj/effect/turf_decal/tile/yellow{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/iron/dark/corner, +/area/station/engineering/atmos/pumproom) +"kMj" = ( +/obj/item/target/alien/anchored, +/obj/machinery/camera/preset/ordnance{ + dir = 6 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/plating/airless{ + luminosity = 2 + }, +/area/station/science/ordnance/bomb) +"kMr" = ( +/obj/structure/transport/linear/public, +/obj/machinery/elevator_control_panel/directional/north{ + linked_elevator_id = "cargo" + }, +/turf/open/floor/plating/elevatorshaft, +/area/station/cargo/storage) +"kMA" = ( +/obj/effect/turf_decal/siding/purple, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/white, +/area/station/science/research) +"kMS" = ( +/obj/machinery/camera/autoname/directional/west, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/command/corporate_dock) +"kMW" = ( +/obj/item/exodrone, +/obj/structure/table, +/obj/effect/turf_decal/tile/brown/anticorner/contrasted{ + dir = 1 + }, +/obj/effect/decal/cleanable/cobweb, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/cargo/drone_bay) +"kNb" = ( +/obj/structure/closet/secure_closet/atmospherics, +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/obj/machinery/newscaster/directional/south, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/storage/gas) +"kNk" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 1 + }, +/turf/open/floor/plating, +/area/station/maintenance/port/lesser) +"kNs" = ( +/obj/machinery/vending/assist, +/turf/open/floor/iron/textured, +/area/station/engineering/storage/tech) +"kNH" = ( +/obj/machinery/power/emitter{ + dir = 8 + }, +/turf/open/floor/plating, +/area/station/engineering/supermatter/room) +"kNJ" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/turf/open/floor/engine, +/area/station/command/corporate_dock) +"kNO" = ( +/obj/effect/turf_decal/siding/wood, +/obj/machinery/newscaster/directional/south, +/turf/open/floor/wood, +/area/station/service/library) +"kNX" = ( +/obj/structure/table/reinforced, +/obj/structure/window/reinforced/spawner/directional/east, +/obj/machinery/power/apc/auto_name/directional/south, +/obj/effect/turf_decal/siding/dark_blue{ + dir = 6 + }, +/obj/structure/cable, +/obj/machinery/recharger, +/turf/open/floor/iron/textured_large, +/area/station/command/bridge) +"kOd" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/sign/poster/official/random/directional/north, +/turf/open/floor/iron, +/area/station/ai_monitored/command/storage/eva) +"kOl" = ( +/obj/structure/railing, +/obj/structure/cable, +/turf/open/floor/iron/dark/side, +/area/station/command/meeting_room) +"kOn" = ( +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/security/warden) +"kOx" = ( +/obj/machinery/door/airlock/security, +/obj/effect/turf_decal/tile/red/fourcorners, +/obj/machinery/door/firedoor, +/obj/structure/cable, +/obj/effect/mapping_helpers/airlock/access/all/security/brig, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/station/security/brig/entrance) +"kOC" = ( +/obj/machinery/light_switch/directional/north, +/turf/open/floor/iron/textured, +/area/station/security/courtroom) +"kOE" = ( +/obj/structure/sign/painting/library{ + pixel_y = 32 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/wood, +/area/station/service/library) +"kOL" = ( +/turf/open/floor/engine, +/area/station/science/xenobiology) +"kOT" = ( +/obj/item/stack/tile/iron/grimy{ + amount = 10 + }, +/obj/structure/sign/poster/random/directional/east, +/turf/open/floor/iron/grimy, +/area/station/maintenance/central/greater) +"kPc" = ( +/obj/structure/table/wood, +/obj/item/camera_film{ + pixel_y = 9 + }, +/obj/item/camera_film{ + pixel_x = -3; + pixel_y = 5 + }, +/turf/open/floor/wood/parquet, +/area/station/service/library) +"kPj" = ( +/obj/structure/chair/sofa/bench/right{ + dir = 4 + }, +/obj/effect/turf_decal/siding, +/obj/effect/landmark/start/assistant, +/turf/open/floor/iron/large, +/area/station/commons/locker) +"kPv" = ( +/obj/item/kirbyplants/random, +/obj/effect/turf_decal/bot, +/obj/machinery/firealarm/directional/east, +/turf/open/floor/iron, +/area/station/hallway/secondary/command) +"kQa" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/science/xenobiology) +"kQj" = ( +/obj/item/radio/intercom/directional/east, +/obj/structure/closet/firecloset, +/turf/open/floor/iron/textured, +/area/station/hallway/primary/central) +"kQt" = ( +/obj/structure/sign/warning/yes_smoking/circle/directional/west, +/obj/item/cigbutt, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured_corner{ + dir = 4 + }, +/area/station/science/breakroom) +"kQv" = ( +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/white, +/area/station/science/research) +"kQz" = ( +/obj/effect/spawner/random/trash/graffiti, +/obj/item/instrument/musicalmoth, +/obj/effect/spawner/random/entertainment/musical_instrument, +/obj/effect/decal/cleanable/blood/old, +/turf/open/floor/plating, +/area/station/engineering/lobby) +"kQB" = ( +/obj/machinery/portable_atmospherics/canister/oxygen, +/obj/structure/sign/poster/official/wtf_is_co2/directional/north, +/obj/machinery/light_switch/directional/east, +/turf/open/floor/iron/white/smooth_large, +/area/station/science/ordnance/storage) +"kQF" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"kQH" = ( +/obj/machinery/door/airlock/medical/glass{ + name = "Treatment Centre" + }, +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/access/any/medical/general, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/station/medical/treatment_center) +"kQJ" = ( +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 1 + }, +/obj/structure/sign/poster/random/directional/north, +/turf/open/floor/iron, +/area/station/cargo/storage) +"kQV" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/line{ + dir = 4 + }, +/obj/machinery/computer/security/telescreen/cmo/directional/east, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/holofloor/dark, +/area/station/command/heads_quarters/cmo) +"kRl" = ( +/obj/effect/landmark/event_spawn, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/white, +/area/station/medical/exam_room) +"kRq" = ( +/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ + dir = 8 + }, +/obj/effect/turf_decal/tile/yellow{ + dir = 4 + }, +/turf/open/floor/iron/checker, +/area/station/engineering/atmos/pumproom) +"kRs" = ( +/obj/machinery/door/airlock/engineering{ + name = "Engineering Breakroom"; + panel_open = 1 + }, +/obj/effect/mapping_helpers/airlock/access/any/engineering/construction, +/obj/effect/mapping_helpers/airlock/welded, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) +"kRw" = ( +/obj/machinery/door/airlock/maintenance_hatch, +/obj/effect/mapping_helpers/airlock/access/all/supply/general, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"kRG" = ( +/obj/machinery/door/airlock/public/glass{ + name = "Library" + }, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/wood/tile, +/area/station/service/library) +"kRM" = ( +/obj/structure/table, +/obj/item/folder/yellow{ + pixel_x = 3; + pixel_y = 6 + }, +/obj/item/folder/yellow{ + pixel_x = -6; + pixel_y = 8 + }, +/obj/item/folder/yellow{ + pixel_x = -9; + pixel_y = 1 + }, +/obj/item/folder/yellow{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/folder/yellow{ + pixel_x = 3; + pixel_y = 1 + }, +/obj/machinery/newscaster/directional/east, +/turf/open/floor/iron/textured_large, +/area/station/cargo/sorting) +"kRX" = ( +/obj/effect/turf_decal/tile/yellow/anticorner/contrasted, +/obj/structure/reagent_dispensers/fueltank, +/obj/machinery/mining_weather_monitor/directional/east, +/obj/structure/window/reinforced/spawner/directional/south, +/obj/effect/turf_decal/stripes/line, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron, +/area/station/construction/mining/aux_base) +"kSc" = ( +/obj/structure/table, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 5 + }, +/obj/machinery/light/small/dim/directional/north, +/turf/open/floor/iron/white, +/area/station/medical/chemistry) +"kSm" = ( +/obj/machinery/computer/libraryconsole/bookmanagement, +/obj/structure/table, +/obj/machinery/light/dim/directional/north, +/turf/open/floor/iron, +/area/station/security/prison) +"kSy" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark/smooth_edge, +/area/station/science/xenobiology) +"kSA" = ( +/obj/effect/turf_decal/siding/purple{ + dir = 4 + }, +/obj/machinery/light/directional/east, +/obj/machinery/modular_computer/preset/cargochat/science{ + dir = 8 + }, +/turf/open/floor/iron/white/herringbone, +/area/station/science/breakroom) +"kSH" = ( +/obj/machinery/medical_kiosk{ + pixel_x = -2 + }, +/obj/effect/turf_decal/tile/blue/diagonal_edge, +/obj/structure/window/spawner/directional/east, +/obj/structure/window/spawner/directional/west, +/turf/open/floor/iron/white/textured_large, +/area/station/medical/medbay/lobby) +"kSM" = ( +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/obj/effect/turf_decal/tile/purple{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/science/lobby) +"kSO" = ( +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/obj/effect/turf_decal/tile/green{ + dir = 4 + }, +/obj/machinery/duct, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/service/hydroponics) +"kSP" = ( +/obj/effect/spawner/structure/window, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/security/office) +"kSU" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/wood/parquet, +/area/station/medical/psychology) +"kSW" = ( +/obj/structure/chair/office{ + name = "grimy chair"; + dir = 8 + }, +/obj/effect/turf_decal/tile/brown/opposingcorners{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/commons/vacant_room/commissary) +"kTb" = ( +/obj/structure/cable, +/obj/machinery/camera/directional/east{ + c_tag = "Interrogation room"; + network = list("interrogation") + }, +/turf/open/floor/iron/dark/textured_large, +/area/station/security/interrogation) +"kTo" = ( +/obj/structure/cable/multilayer/multiz, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"kTr" = ( +/obj/machinery/firealarm/directional/north, +/turf/open/floor/iron/dark/side{ + dir = 5 + }, +/area/station/command/corporate_dock) +"kTx" = ( +/obj/effect/landmark/atmospheric_sanity/ignore_area, +/turf/closed/wall/r_wall, +/area/station/ai_monitored/turret_protected/aisat_interior) +"kTy" = ( +/obj/structure/railing, +/turf/open/floor/iron/dark/side, +/area/station/command/meeting_room) +"kTC" = ( +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 8 + }, +/obj/item/radio/intercom/directional/west, +/turf/open/floor/iron, +/area/station/cargo/storage) +"kTL" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/turf/open/floor/iron, +/area/station/commons/locker) +"kTM" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"kTP" = ( +/obj/effect/turf_decal/siding/wood/corner, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 1 + }, +/turf/open/floor/wood/tile, +/area/station/security/courtroom) +"kTV" = ( +/obj/item/circuitboard/machine/engine/propulsion, +/turf/open/misc/asteroid, +/area/station/asteroid) +"kUb" = ( +/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible, +/obj/effect/turf_decal/tile/yellow{ + dir = 8 + }, +/obj/effect/turf_decal/tile/yellow{ + dir = 4 + }, +/turf/open/floor/iron/dark/corner{ + dir = 1 + }, +/area/station/engineering/atmos) +"kUd" = ( +/obj/machinery/door/poddoor/lift{ + transport_linked_id = "cargo" + }, +/obj/effect/turf_decal/stripes, +/obj/effect/turf_decal/stripes{ + dir = 1 + }, +/obj/machinery/door/firedoor, +/turf/open/floor/iron/dark/textured_half, +/area/station/cargo/storage) +"kUh" = ( +/obj/machinery/computer/mech_bay_power_console{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/siding/brown{ + dir = 5 + }, +/turf/open/floor/iron/textured, +/area/station/cargo/storage) +"kUp" = ( +/obj/effect/landmark/blobstart, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/engineering/gravity_generator) +"kUz" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/port/lesser) +"kUG" = ( +/obj/machinery/computer/security{ + dir = 8 + }, +/obj/effect/turf_decal/tile/red/anticorner/contrasted{ + dir = 4 + }, +/turf/open/floor/iron/textured, +/area/station/security/warden) +"kUJ" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/light/small/dim/directional/north, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"kUW" = ( +/obj/structure/chair/pew{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/chapel, +/area/station/service/chapel) +"kUX" = ( +/turf/closed/wall/r_wall, +/area/station/engineering/atmospherics_engine) +"kVh" = ( +/obj/effect/turf_decal/sand/plating, +/turf/closed/wall/rust, +/area/station/medical/chemistry/minisat) +"kVF" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/turf/open/floor/glass/reinforced, +/area/station/service/library) +"kVP" = ( +/obj/effect/spawner/structure/window, +/obj/machinery/door/firedoor/heavy, +/turf/open/floor/plating, +/area/station/science/breakroom) +"kVV" = ( +/obj/effect/turf_decal/trimline/yellow/filled/corner{ + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/engineering/main) +"kVX" = ( +/obj/structure/closet/secure_closet/miner, +/obj/effect/turf_decal/tile/brown/anticorner/contrasted{ + dir = 8 + }, +/obj/machinery/power/apc/auto_name/directional/west, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/cargo/miningoffice) +"kWb" = ( +/turf/closed/wall/r_wall, +/area/station/ai_monitored/turret_protected/ai) +"kWc" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/spawner/random/structure/closet_maintenance, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"kWk" = ( +/obj/effect/turf_decal/stripes/line, +/obj/structure/cable, +/obj/machinery/newscaster/directional/east, +/turf/open/floor/iron, +/area/station/science/robotics/lab) +"kWI" = ( +/obj/effect/turf_decal/stripes{ + dir = 1 + }, +/obj/effect/turf_decal/stripes{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"kWK" = ( +/obj/effect/spawner/random/structure/grille, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/central/lesser) +"kWN" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/science/xenobiology) +"kXs" = ( +/obj/structure/railing, +/obj/machinery/door/firedoor/border_only, +/obj/machinery/camera/autoname/directional/east, +/turf/open/floor/glass/reinforced, +/area/station/service/bar) +"kXz" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/commons/storage/primary) +"kXN" = ( +/obj/effect/turf_decal/tile/blue/anticorner/contrasted{ + dir = 8 + }, +/obj/structure/window/reinforced/spawner/directional/north, +/obj/structure/window/reinforced/spawner/directional/west, +/obj/machinery/computer/records/security, +/turf/open/floor/iron, +/area/station/command/bridge) +"kXV" = ( +/obj/structure/cable, +/obj/structure/plaque/static_plaque/golden/commission/wawa, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"kYc" = ( +/obj/structure/rack, +/obj/effect/spawner/random/techstorage/command_all, +/obj/machinery/light/directional/north, +/turf/open/floor/circuit, +/area/station/engineering/storage/tech) +"kYk" = ( +/obj/machinery/door/poddoor/shutters{ + id = "secmechbay"; + name = "Security Mech Bay Shutters" + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/caution/stand_clear, +/turf/open/floor/iron/dark, +/area/station/security/mechbay) +"kYl" = ( +/obj/structure/ladder{ + icon_state = "ladder10" + }, +/turf/open/floor/catwalk_floor, +/area/station/maintenance/central/lesser) +"kYn" = ( +/obj/structure/lattice, +/obj/structure/grille/broken, +/turf/open/space/basic, +/area/space/nearstation) +"kYs" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/medical/chemistry/minisat) +"kYu" = ( +/turf/closed/wall/r_wall, +/area/station/ai_monitored/turret_protected/aisat/teleporter) +"kYB" = ( +/obj/effect/turf_decal/siding/white{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/turf/open/floor/iron/herringbone, +/area/station/hallway/primary/central) +"kYN" = ( +/obj/structure/table, +/obj/item/paper_bin, +/obj/item/pen, +/obj/item/clothing/glasses/science, +/obj/machinery/camera/autoname/directional/north{ + network = list("ss13","rd") + }, +/obj/item/flatpack{ + board = /obj/item/circuitboard/machine/flatpacker + }, +/obj/item/multitool, +/turf/open/floor/iron/white, +/area/station/science/lab) +"kYT" = ( +/turf/closed/wall/r_wall, +/area/station/maintenance/department/medical) +"kYU" = ( +/obj/machinery/computer/prisoner/management{ + dir = 8 + }, +/obj/effect/turf_decal/tile/dark_blue/half/contrasted{ + dir = 4 + }, +/obj/machinery/requests_console/directional/east{ + department = "Bridge"; + name = "Bridge Requests Console" + }, +/obj/effect/mapping_helpers/requests_console/information, +/obj/effect/mapping_helpers/requests_console/announcement, +/obj/effect/mapping_helpers/requests_console/assistance, +/turf/open/floor/iron/dark, +/area/station/command/bridge) +"kYW" = ( +/obj/structure/table/reinforced, +/obj/structure/displaycase/forsale/kitchen{ + pixel_y = 8 + }, +/obj/effect/turf_decal/tile/dark_red/opposingcorners, +/obj/machinery/door/firedoor, +/turf/open/floor/iron/dark, +/area/station/service/bar) +"kYZ" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/sign/poster/official/random/directional/west, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"kZf" = ( +/obj/structure/table/reinforced, +/obj/item/stack/sheet/plasteel{ + amount = 15 + }, +/obj/item/assembly/prox_sensor{ + pixel_x = 5; + pixel_y = 7 + }, +/obj/structure/fireaxecabinet/mechremoval/directional/east, +/obj/item/stack/sheet/glass/fifty, +/turf/open/floor/iron/dark/textured, +/area/station/science/robotics/lab) +"kZg" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/dark_blue/opposingcorners, +/turf/open/floor/iron, +/area/station/command/bridge) +"kZj" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/stairs{ + dir = 1 + }, +/area/station/cargo/bitrunning/den) +"kZu" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/trimline/blue/filled/corner{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/white, +/area/station/medical/treatment_center) +"kZv" = ( +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/security/execution/transfer) +"kZw" = ( +/turf/open/floor/iron, +/area/station/commons/fitness/recreation) +"kZA" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/obj/effect/turf_decal/tile/dark_blue{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/command/bridge) +"kZO" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/item/radio/intercom/directional/west, +/turf/open/floor/iron/white, +/area/station/medical/treatment_center) +"kZS" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/window/right/directional/south{ + name = "Hydroponics Desk"; + req_access = list("hydroponics") + }, +/obj/machinery/door/firedoor, +/turf/open/floor/iron, +/area/station/service/hydroponics) +"laf" = ( +/obj/effect/spawner/random/structure/chair_comfy{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/landmark/start/psychologist, +/turf/open/floor/carpet, +/area/station/medical/psychology) +"lam" = ( +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/cargo/storage) +"lan" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/iron/grimy, +/area/station/security/detectives_office/private_investigators_office) +"lao" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/poddoor/shutters{ + id = "evashutter"; + name = "E.V.A. Storage Shutter" + }, +/obj/effect/turf_decal/delivery, +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/ai_monitored/command/storage/eva) +"lar" = ( +/obj/structure/table/reinforced/rglass, +/obj/effect/landmark/start/lawyer, +/turf/open/floor/iron/dark, +/area/station/security/office) +"laF" = ( +/obj/structure/closet{ + name = "evidence closet 1" + }, +/obj/machinery/light/small/directional/north, +/obj/effect/decal/cleanable/dirt/dust, +/obj/item/hand_labeler, +/turf/open/floor/iron, +/area/station/security/evidence) +"laM" = ( +/obj/effect/decal/cleanable/dirt, +/obj/item/clothing/gloves/color/fyellow, +/obj/structure/rack, +/turf/open/floor/plating, +/area/station/maintenance/central/lesser) +"lbg" = ( +/turf/open/floor/plating, +/area/station/cargo/storage) +"lbl" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/mapping_helpers/broken_floor, +/obj/machinery/airalarm/directional/south, +/turf/open/floor/plating, +/area/station/maintenance/central/lesser) +"lbo" = ( +/obj/structure/falsewall, +/turf/open/misc/asteroid, +/area/station/hallway/secondary/exit/departure_lounge) +"lbr" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/airalarm/directional/south, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/carpet/red, +/area/station/command/heads_quarters/hos) +"lbt" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/structure/cable, +/obj/item/radio/intercom/directional/south, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/command/storage/satellite) +"lbw" = ( +/obj/structure/closet/l3closet, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/tile/green/half/contrasted, +/turf/open/floor/iron/white/textured, +/area/station/maintenance/department/medical/central) +"lbJ" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/stripes/white/line, +/turf/open/floor/iron, +/area/station/security/prison) +"lbT" = ( +/obj/machinery/light/small/directional/north, +/obj/structure/chair/stool/directional/west, +/obj/effect/turf_decal/sand/plating, +/turf/open/floor/plating, +/area/station/maintenance/solars/port/fore) +"lbX" = ( +/obj/machinery/airalarm/directional/north, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/security/prison/safe) +"lbZ" = ( +/obj/effect/turf_decal/tile/neutral, +/obj/structure/railing/corner/end{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/purple/arrow_cw{ + dir = 6 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"lcd" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/science/ordnance) +"lcj" = ( +/obj/item/stack/sheet/glass, +/obj/item/clothing/glasses/welding, +/obj/item/disk/tech_disk{ + pixel_y = 6 + }, +/obj/item/reagent_containers/dropper, +/obj/structure/table, +/obj/machinery/requests_console/auto_name/directional/north, +/obj/effect/mapping_helpers/requests_console/supplies, +/obj/effect/mapping_helpers/requests_console/ore_update, +/obj/effect/mapping_helpers/requests_console/assistance, +/turf/open/floor/iron/white, +/area/station/science/lab) +"lcv" = ( +/obj/machinery/camera/autoname/directional/south, +/turf/open/floor/glass/reinforced, +/area/station/engineering/lobby) +"lcM" = ( +/obj/machinery/atmospherics/components/unary/thermomachine/freezer, +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/machinery/light/cold/dim/directional/east, +/turf/open/floor/iron/white, +/area/station/medical/treatment_center) +"lcX" = ( +/obj/effect/spawner/random/maintenance/two, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/cobweb/cobweb2, +/turf/open/floor/plating, +/area/station/science/xenobiology) +"ldo" = ( +/obj/effect/turf_decal/sand/plating, +/obj/effect/turf_decal/stripes/asteroid/line{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/hallway/secondary/entry) +"ldT" = ( +/obj/machinery/portable_atmospherics/pump, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"les" = ( +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/structure/cable, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/item/stack/rods/two, +/obj/item/grown/bananapeel, +/obj/effect/mapping_helpers/broken_floor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/wood/tile, +/area/station/service/bar) +"leT" = ( +/obj/machinery/mecha_part_fabricator/maint{ + name = "forgotten exosuit fabricator" + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/circuit, +/area/station/hallway/primary/central) +"leW" = ( +/obj/machinery/atmospherics/pipe/smart/simple/purple/visible{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/engineering/atmos/pumproom) +"leZ" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/catwalk_floor/flat_white, +/area/station/hallway/secondary/entry) +"lfd" = ( +/obj/machinery/door/airlock/external/glass, +/obj/effect/mapping_helpers/airlock/access/all/engineering/external, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"lfh" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/newscaster/directional/north, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"lfn" = ( +/obj/machinery/atmospherics/pipe/smart/simple/dark/visible{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/engineering/atmos) +"lfo" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/disposal) +"lfp" = ( +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 8 + }, +/obj/structure/table, +/obj/machinery/recharger, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron, +/area/station/security/brig/entrance) +"lfu" = ( +/obj/effect/turf_decal/tile/dark_red/opposingcorners, +/obj/effect/landmark/start/bartender, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/service/bar) +"lfv" = ( +/obj/machinery/space_heater/improvised_chem_heater, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/showroomfloor, +/area/station/maintenance/department/engine) +"lfx" = ( +/obj/structure/cable, +/obj/machinery/light/dim/directional/south, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/white, +/area/station/science/research) +"lfy" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/wood/tile, +/area/station/service/bar) +"lfC" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/closet/crate/decorations, +/obj/effect/spawner/random/decoration, +/obj/effect/spawner/random/decoration/material, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/maintenance/aft/upper) +"lfG" = ( +/obj/machinery/atmospherics/pipe/smart/simple/green/visible{ + dir = 8 + }, +/obj/structure/lattice, +/turf/open/space/basic, +/area/space/nearstation) +"lfN" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/green/visible, +/turf/closed/wall/r_wall, +/area/station/engineering/supermatter) +"lfR" = ( +/obj/structure/reagent_dispensers/fueltank/large, +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/turf/open/floor/iron/large, +/area/station/engineering/atmos/upper) +"lgh" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/textured, +/area/station/construction/mining/aux_base) +"lgp" = ( +/obj/effect/turf_decal/sand/plating, +/obj/effect/spawner/random/structure/closet_empty/crate, +/obj/effect/spawner/random/maintenance/two, +/turf/open/floor/plating, +/area/station/asteroid) +"lgw" = ( +/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible{ + dir = 5 + }, +/turf/open/floor/iron, +/area/station/engineering/atmos) +"lgx" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/iron/showroomfloor, +/area/station/cargo/storage) +"lgA" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/wood/parquet, +/area/station/medical/psychology) +"lgG" = ( +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 1 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/security/brig) +"lgK" = ( +/obj/structure/lattice/catwalk, +/obj/structure/railing{ + dir = 8 + }, +/turf/open/openspace, +/area/station/science/genetics) +"lgL" = ( +/mob/living/carbon/human/species/monkey/angry, +/turf/open/misc/asteroid, +/area/station/asteroid) +"lgO" = ( +/obj/machinery/camera/autoname/directional/north, +/turf/open/floor/engine, +/area/station/science/xenobiology) +"lhc" = ( +/obj/structure/flora/rock/pile/style_random, +/obj/effect/turf_decal/stripes/asteroid/line{ + dir = 8 + }, +/turf/open/misc/asteroid/airless, +/area/station/asteroid) +"lhx" = ( +/obj/effect/mapping_helpers/airlock/access/all/science/general, +/obj/machinery/door/airlock/research/glass{ + name = "Research Breakroom" + }, +/obj/machinery/door/firedoor, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/white, +/area/station/science/breakroom) +"lhA" = ( +/obj/effect/landmark/start/scientist, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/white/herringbone, +/area/station/science/breakroom) +"lhD" = ( +/obj/effect/turf_decal/tile/dark_blue/half/contrasted, +/obj/machinery/firealarm/directional/south, +/turf/open/floor/iron, +/area/station/command/bridge) +"lhG" = ( +/obj/structure/rack, +/obj/effect/decal/cleanable/dirt/dust, +/obj/item/clothing/suit/apron/chef, +/obj/item/clothing/mask/surgical, +/turf/open/floor/iron/showroomfloor, +/area/station/maintenance/department/engine) +"lhO" = ( +/obj/machinery/door/airlock/maintenance/external, +/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, +/turf/open/misc/asteroid, +/area/station/maintenance/central/greater) +"lib" = ( +/obj/machinery/light/directional/west, +/turf/open/floor/circuit/green, +/area/station/ai_monitored/command/nuke_storage) +"lil" = ( +/obj/machinery/atmospherics/components/binary/valve, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/light/small/dim/directional/east, +/turf/open/floor/plating, +/area/station/maintenance/department/medical) +"lip" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/blue/filled/corner, +/turf/open/floor/iron/white, +/area/station/medical/treatment_center) +"liE" = ( +/obj/effect/spawner/random/trash/graffiti, +/turf/closed/wall, +/area/station/maintenance/central/greater) +"liF" = ( +/obj/effect/turf_decal/tile/brown/opposingcorners{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/commons/vacant_room/commissary) +"liH" = ( +/obj/effect/turf_decal/tile/blue/opposingcorners{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/cafeteria, +/area/station/commons/locker) +"liQ" = ( +/obj/structure/table, +/obj/item/reagent_containers/cup/glass/coffee, +/turf/open/floor/iron/white, +/area/station/medical/exam_room) +"liU" = ( +/obj/structure/table, +/obj/item/electronics/airlock, +/obj/effect/decal/cleanable/glass, +/obj/item/stack/rods/two, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/commons/vacant_room/commissary) +"ljk" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/showroomfloor, +/area/station/cargo/storage) +"ljl" = ( +/obj/effect/turf_decal/tile/neutral, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/commons/fitness/recreation) +"ljp" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/decal/cleanable/dirt, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"ljt" = ( +/obj/structure/table/optable{ + dir = 4 + }, +/obj/structure/broken_flooring/corner/directional/east, +/turf/open/floor/plating, +/area/station/maintenance/department/medical) +"ljw" = ( +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/tile/brown{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/cargo/lobby) +"ljF" = ( +/obj/structure/weightmachine/weightlifter, +/obj/machinery/camera/autoname/directional/east, +/turf/open/floor/iron, +/area/station/security/prison) +"ljG" = ( +/obj/structure/railing{ + dir = 1 + }, +/turf/open/misc/asteroid, +/area/station/cargo/miningoffice) +"ljN" = ( +/obj/structure/table/wood, +/obj/effect/spawner/random/bureaucracy/birthday_wrap, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/wood, +/area/station/maintenance/port/greater) +"ljU" = ( +/obj/effect/turf_decal/tile/dark_red/opposingcorners, +/obj/structure/table, +/obj/item/clothing/head/hats/tophat, +/obj/item/book/manual/wiki/barman_recipes{ + pixel_x = -4; + pixel_y = 7 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/service/bar) +"ljZ" = ( +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/turf/open/floor/iron/dark/textured, +/area/station/command/heads_quarters/cmo) +"lke" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 8 + }, +/obj/machinery/holopad, +/turf/open/floor/iron, +/area/station/engineering/main) +"lkw" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 5 + }, +/obj/effect/turf_decal/trimline/yellow/filled/warning{ + dir = 5 + }, +/turf/open/floor/iron, +/area/station/engineering/lobby) +"lkQ" = ( +/obj/item/kirbyplants/random, +/obj/effect/turf_decal/bot, +/obj/machinery/light/dim/directional/north, +/turf/open/floor/iron, +/area/station/hallway/secondary/command) +"lls" = ( +/obj/effect/turf_decal/stripes/asteroid/line{ + dir = 1 + }, +/turf/open/misc/asteroid, +/area/station/hallway/primary/starboard) +"llD" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/iron/white/smooth_large, +/area/station/medical/exam_room) +"llT" = ( +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/security/office) +"llW" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/maintenance/disposal/incinerator) +"lmd" = ( +/obj/effect/turf_decal/siding/wood/end{ + dir = 1 + }, +/obj/effect/spawner/random/structure/closet_private, +/obj/item/radio/intercom/directional/west, +/turf/open/floor/wood/tile, +/area/station/commons/dorms) +"lmn" = ( +/obj/item/flashlight/lamp, +/turf/open/misc/asteroid, +/area/station/asteroid) +"lmo" = ( +/obj/structure/transport/linear/public, +/obj/machinery/porta_turret/ai, +/turf/open/openspace, +/area/station/ai_monitored/turret_protected/aisat_interior) +"lmt" = ( +/obj/structure/cable, +/obj/effect/mapping_helpers/burnt_floor, +/obj/effect/decal/cleanable/blood/old, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"lmI" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/components/unary/passive_vent/layer2{ + dir = 4 + }, +/turf/open/space/basic, +/area/space/nearstation) +"lmL" = ( +/obj/effect/turf_decal/bot_white, +/obj/effect/spawner/random/maintenance, +/obj/effect/spawner/random/structure/closet_empty/crate, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/cargo/storage) +"lmU" = ( +/obj/effect/turf_decal/tile/dark_blue{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/hallway/secondary/command) +"lno" = ( +/turf/closed/wall/r_wall, +/area/station/science/explab) +"lnp" = ( +/obj/effect/turf_decal/tile/red/fourcorners, +/obj/item/toy/plush/nukeplushie, +/obj/machinery/camera/autoname/directional/south, +/turf/open/floor/iron/white, +/area/station/security/prison/safe) +"lnt" = ( +/obj/effect/turf_decal/tile/yellow{ + dir = 1 + }, +/obj/effect/turf_decal/tile/yellow, +/obj/structure/chair{ + dir = 1 + }, +/obj/machinery/newscaster/directional/south, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) +"lnu" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/command{ + name = "E.V.A. Storage" + }, +/obj/effect/turf_decal/delivery, +/obj/structure/cable, +/obj/effect/landmark/navigate_destination, +/obj/effect/mapping_helpers/airlock/access/any/command/eva, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/ai_monitored/command/storage/eva) +"lnG" = ( +/obj/structure/bed, +/obj/machinery/airalarm/directional/north, +/obj/machinery/camera/autoname/directional/east{ + network = list("ss13","medbay") + }, +/turf/open/floor/iron/white, +/area/station/medical/patients_rooms/room_b) +"lnZ" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/structure/table, +/obj/item/stack/sheet/rglass/fifty, +/obj/item/stack/rods/fifty, +/obj/item/stack/sheet/glass/fifty, +/obj/item/stack/sheet/rglass/fifty, +/obj/item/stack/rods/fifty, +/obj/item/stack/sheet/glass/fifty, +/obj/machinery/airalarm/directional/east, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/command/storage/eva) +"loa" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/turf/open/floor/wood, +/area/station/service/theater) +"loh" = ( +/turf/closed/wall, +/area/station/maintenance/solars/port/aft) +"lok" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/port/lesser) +"lop" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/item/paper/pamphlet/gateway, +/obj/structure/table, +/obj/item/flashlight/flare{ + pixel_x = 12 + }, +/obj/machinery/firealarm/directional/south, +/turf/open/floor/iron, +/area/station/command/gateway) +"loq" = ( +/obj/machinery/power/apc/auto_name/directional/south, +/obj/structure/cable, +/obj/structure/rack, +/obj/item/toy/figure/borg, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/aisat/teleporter) +"loC" = ( +/obj/machinery/door/airlock/command{ + name = "Head of Personnel's Quarters" + }, +/obj/effect/turf_decal/siding/wood, +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/access/any/command/hop, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "bridgehop" + }, +/turf/open/floor/iron, +/area/station/command/heads_quarters/hop) +"loR" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/machinery/power/port_gen/pacman/pre_loaded, +/obj/machinery/light/small/dim/directional/south, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"loT" = ( +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/station/security/warden) +"loU" = ( +/obj/structure/bookcase{ + name = "Holy Bookcase" + }, +/obj/machinery/airalarm/directional/west, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/station/service/chapel) +"loY" = ( +/obj/machinery/biogenerator, +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/turf/open/floor/iron/textured_large, +/area/station/service/hydroponics/garden) +"lpc" = ( +/obj/structure/railing{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/spawner/random/trash/food_packaging, +/turf/open/floor/iron, +/area/station/maintenance/department/medical/central) +"lpe" = ( +/turf/open/floor/iron, +/area/station/engineering/storage) +"lpu" = ( +/obj/machinery/light_switch/directional/south, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/carpet/purple, +/area/station/service/library) +"lpE" = ( +/obj/machinery/hydroponics/constructable, +/obj/item/radio/intercom/directional/south, +/turf/open/floor/iron/large, +/area/station/service/hydroponics/garden) +"lpF" = ( +/obj/machinery/fax{ + fax_name = "Medical"; + name = "Medical Fax Machine" + }, +/obj/structure/table, +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/machinery/camera/autoname/directional/north{ + network = list("ss13","medbay") + }, +/turf/open/floor/iron/white, +/area/station/medical/storage) +"lqf" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"lqv" = ( +/obj/structure/cable, +/obj/machinery/light/directional/west, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/turf/open/floor/wood/tile, +/area/station/service/bar) +"lqy" = ( +/obj/structure/chair, +/obj/effect/landmark/event_spawn, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/turf/open/floor/iron/grimy, +/area/station/service/chapel/office) +"lqI" = ( +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/solars/starboard/fore) +"lqR" = ( +/obj/effect/landmark/event_spawn, +/turf/open/floor/iron, +/area/station/cargo/drone_bay) +"lrc" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/stairs/right{ + dir = 1 + }, +/area/station/command/bridge) +"lrk" = ( +/obj/structure/rack, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/plating, +/area/station/maintenance/department/engine) +"lrr" = ( +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/turf/open/floor/iron/stairs/left{ + dir = 8 + }, +/area/station/medical/storage) +"lrw" = ( +/obj/structure/cable, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/engineering/break_room) +"lrF" = ( +/obj/effect/turf_decal/siding/red{ + dir = 10 + }, +/turf/open/floor/circuit, +/area/station/science/robotics/lab) +"lrV" = ( +/obj/structure/sign/poster/official/enlist/directional/north, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/carpet/red, +/area/station/security/warden) +"lsq" = ( +/obj/structure/chair/office{ + name = "grimy chair" + }, +/turf/open/floor/iron/dark, +/area/station/medical/morgue) +"lsr" = ( +/obj/machinery/door/window/brigdoor/security/cell/left/directional/east{ + id = "Cell 2"; + name = "Cell 2" + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/security/brig) +"lsx" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/preopen{ + id = "rdoffice"; + name = "Research Director's Shutters" + }, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/command/heads_quarters/rd) +"lsC" = ( +/obj/effect/spawner/structure/window, +/turf/open/floor/plating, +/area/station/hallway/primary/central) +"lsJ" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/mapping_helpers/broken_floor, +/obj/structure/closet/crate/bin, +/obj/machinery/newscaster/directional/west, +/obj/effect/turf_decal/bot, +/turf/open/floor/iron/dark, +/area/station/service/cafeteria) +"lta" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/command/corporate_dock) +"ltj" = ( +/obj/structure/table/reinforced, +/obj/machinery/recharger{ + pixel_y = 4 + }, +/obj/effect/turf_decal/tile/red/fourcorners, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/medical) +"ltk" = ( +/obj/machinery/power/emitter, +/obj/effect/decal/cleanable/dirt, +/obj/item/shard, +/obj/effect/decal/cleanable/glass, +/turf/open/floor/plating, +/area/station/maintenance/department/engine) +"ltB" = ( +/obj/effect/turf_decal/trimline/blue/filled/corner{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron/white, +/area/station/medical/paramedic) +"ltF" = ( +/obj/structure/cable, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"ltS" = ( +/turf/closed/wall, +/area/station/hallway/primary/starboard) +"ltU" = ( +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"luq" = ( +/obj/effect/turf_decal/stripes{ + dir = 4 + }, +/obj/machinery/firealarm/directional/east, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"lut" = ( +/obj/effect/turf_decal/sand/plating, +/obj/effect/turf_decal/stripes/asteroid/line{ + dir = 4 + }, +/turf/open/floor/plating/airless, +/area/space/nearstation) +"lux" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/structure/girder, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"luz" = ( +/obj/structure/cable, +/obj/machinery/door/window/left/directional/east{ + name = "Security Medbay" + }, +/obj/effect/turf_decal/tile/blue/half/contrasted{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/white, +/area/station/security/medical) +"luA" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/circuit/green, +/area/station/science/robotics/mechbay) +"luK" = ( +/obj/structure/closet/crate/trashcart/laundry, +/obj/item/grenade/iedcasing/spawned{ + det_time = 0 + }, +/obj/effect/turf_decal/tile/blue/opposingcorners{ + dir = 1 + }, +/obj/machinery/light/directional/south, +/obj/machinery/camera/autoname/directional/south, +/turf/open/floor/iron/cafeteria, +/area/station/commons/locker) +"luW" = ( +/obj/machinery/door/airlock/grunge{ + name = "Chapel" + }, +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/turf/open/floor/carpet, +/area/station/service/chapel) +"lva" = ( +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/solars/port) +"lvg" = ( +/obj/effect/turf_decal/tile/brown, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/cargo/drone_bay) +"lvj" = ( +/obj/structure/table/wood, +/obj/machinery/computer/libraryconsole{ + dir = 8 + }, +/turf/open/floor/wood/parquet, +/area/station/service/library) +"lvn" = ( +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/turf/open/floor/iron/chapel{ + dir = 1 + }, +/area/station/service/chapel) +"lvw" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 4 + }, +/obj/item/radio/intercom/directional/east, +/turf/open/floor/iron/white, +/area/station/hallway/secondary/entry) +"lvT" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/tile/yellow, +/obj/effect/turf_decal/tile/yellow{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) +"lvW" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment, +/obj/machinery/light/cold/directional/west, +/turf/open/floor/iron/white, +/area/station/medical/treatment_center) +"lvZ" = ( +/obj/machinery/vending/cola/red, +/obj/machinery/airalarm/directional/north, +/turf/open/floor/iron, +/area/station/security/prison) +"lwr" = ( +/obj/structure/railing, +/obj/structure/cable/layer3, +/turf/open/floor/catwalk_floor/iron_dark/telecomms, +/area/station/ai_monitored/turret_protected/ai) +"lwu" = ( +/turf/open/floor/carpet/red, +/area/station/command/heads_quarters/qm) +"lwv" = ( +/obj/effect/turf_decal/stripes{ + dir = 1 + }, +/obj/machinery/light/directional/north, +/obj/structure/rack, +/obj/item/clothing/glasses/meson/engine, +/obj/item/clothing/glasses/meson/engine, +/obj/item/clothing/glasses/meson/engine, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"lww" = ( +/obj/machinery/light/directional/north, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron, +/area/station/engineering/main) +"lwB" = ( +/obj/effect/turf_decal/tile/dark_red/opposingcorners, +/obj/structure/sign/picture_frame/portrait/bar{ + pixel_y = -28 + }, +/turf/open/floor/iron/dark, +/area/station/service/bar) +"lwC" = ( +/obj/machinery/power/terminal{ + dir = 8 + }, +/obj/structure/cable, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 5 + }, +/obj/machinery/power/port_gen/pacman, +/turf/open/floor/iron, +/area/station/engineering/gravity_generator) +"lwI" = ( +/obj/effect/turf_decal/tile/blue/half/contrasted, +/obj/item/kirbyplants/organic/plant11, +/turf/open/floor/iron/white, +/area/station/medical/medbay/lobby) +"lwW" = ( +/obj/machinery/lift_indicator/directional/north{ + linked_elevator_id = "cargo" + }, +/obj/machinery/button/elevator/directional/north{ + id = "cargo" + }, +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/cargo/storage) +"lwZ" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/computer/atmos_control/nocontrol/incinerator{ + dir = 8 + }, +/obj/machinery/button/door/directional/north{ + id = "incstorage"; + name = "Storage Shutter Control" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/visible, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) +"lxb" = ( +/obj/structure/girder, +/obj/effect/turf_decal/siding/thinplating_new{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron, +/area/station/maintenance/department/cargo) +"lxw" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/obj/effect/landmark/generic_maintenance_landmark, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/department/engine) +"lxx" = ( +/obj/effect/spawner/random/trash/grille_or_waste, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/port/greater) +"lxy" = ( +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/tile/purple/anticorner/contrasted, +/turf/open/floor/iron/white, +/area/station/science/lobby) +"lxI" = ( +/obj/item/kirbyplants/random, +/turf/open/floor/wood/parquet, +/area/station/medical/psychology) +"lxP" = ( +/obj/machinery/defibrillator_mount/directional/west, +/obj/machinery/stasis{ + dir = 4 + }, +/obj/effect/turf_decal/tile/blue/fourcorners, +/turf/open/floor/iron/white, +/area/station/medical/treatment_center) +"lxR" = ( +/obj/effect/turf_decal/tile/yellow/half/contrasted, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/textured, +/area/station/construction/mining/aux_base) +"lyr" = ( +/obj/structure/table/reinforced/rglass, +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/item/stack/medical/suture{ + pixel_x = 6; + pixel_y = 7 + }, +/obj/item/reagent_containers/cup/bottle/multiver{ + pixel_x = -6; + pixel_y = 6 + }, +/obj/item/stack/medical/mesh, +/obj/item/reagent_containers/syringe, +/turf/open/floor/iron/white, +/area/station/medical/treatment_center) +"lyy" = ( +/obj/structure/railing/corner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/yellow/filled/corner{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/engineering/main) +"lyF" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/turf/open/floor/iron/white/smooth_edge{ + dir = 4 + }, +/area/station/medical/exam_room) +"lyJ" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/structure/sign/poster/official/report_crimes/directional/north, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"lyN" = ( +/turf/open/openspace, +/area/station/engineering/lobby) +"lyQ" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/obj/effect/spawner/random/trash/grille_or_waste, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"lyY" = ( +/obj/machinery/shower/directional/south, +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal{ + icon = 'icons/obj/mining_zones/survival_pod.dmi'; + icon_state = "fan_tiny" + }, +/turf/open/floor/iron/textured_large, +/area/station/medical/treatment_center) +"lzj" = ( +/obj/effect/turf_decal/tile/red/half/contrasted, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/firealarm/directional/south, +/turf/open/floor/iron, +/area/station/security/brig/entrance) +"lzk" = ( +/obj/machinery/door/airlock/grunge{ + name = "Radiation Shelter" + }, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark/textured, +/area/station/maintenance/radshelter/medical) +"lzr" = ( +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/security/lockers) +"lzs" = ( +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 1 + }, +/obj/machinery/light/directional/north, +/turf/open/floor/iron, +/area/station/security) +"lzu" = ( +/obj/machinery/shower/directional/north, +/obj/structure/curtain, +/obj/effect/spawner/random/trash/soap, +/turf/open/floor/iron/showroomfloor, +/area/station/command/heads_quarters/qm) +"lzB" = ( +/obj/structure/cable, +/obj/effect/landmark/blobstart, +/turf/open/floor/iron, +/area/station/security/prison) +"lzE" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/maintenance, +/obj/effect/decal/cleanable/blood/tracks, +/turf/open/floor/plating, +/area/station/asteroid) +"lzF" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/navbeacon{ + codes_txt = "patrol;next_patrol=P2-Central-Primary"; + location = "P1-Central-Primary" + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"lzW" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/engineering/gravity_generator) +"lAc" = ( +/turf/closed/wall/r_wall, +/area/station/science/genetics) +"lAe" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/commons/fitness/recreation) +"lAj" = ( +/turf/closed/wall, +/area/station/construction/mining/aux_base) +"lAm" = ( +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 1 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/cargo/storage) +"lAs" = ( +/obj/effect/decal/cleanable/glass, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/iron/white/textured_large, +/area/station/maintenance/department/medical/central) +"lAy" = ( +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron, +/area/station/maintenance/department/medical/central) +"lAE" = ( +/obj/effect/turf_decal/trimline/yellow/filled/corner{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/command/heads_quarters/ce) +"lAG" = ( +/obj/machinery/skill_station, +/turf/open/floor/carpet/purple, +/area/station/service/library) +"lAL" = ( +/obj/structure/stairs/east, +/turf/open/floor/iron, +/area/station/cargo/storage) +"lAN" = ( +/obj/structure/railing/corner{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark/corner{ + dir = 4 + }, +/area/station/command/meeting_room) +"lBm" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/simple/green/hidden{ + dir = 9 + }, +/turf/open/floor/iron/white, +/area/station/science/ordnance/testlab) +"lBu" = ( +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 1 + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/conveyor_switch/oneway{ + pixel_y = 16; + pixel_x = 20; + id = "sorter" + }, +/turf/open/floor/iron, +/area/station/cargo/sorting) +"lBB" = ( +/obj/machinery/suit_storage_unit/radsuit, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 9 + }, +/obj/machinery/firealarm/directional/west, +/turf/open/floor/iron/dark, +/area/station/engineering/main) +"lBC" = ( +/obj/effect/turf_decal/tile/brown/anticorner/contrasted, +/obj/structure/sign/poster/random/directional/south, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/cargo/drone_bay) +"lBJ" = ( +/obj/effect/turf_decal/siding/purple, +/obj/structure/chair/sofa/bench/left, +/turf/open/floor/iron/white/textured_large, +/area/station/science/research) +"lBZ" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/catwalk_floor/flat_white, +/area/station/science/xenobiology) +"lCk" = ( +/obj/effect/turf_decal/siding/dark_blue{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/command/corporate_showroom) +"lCp" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/obj/structure/railing{ + dir = 6 + }, +/turf/open/floor/engine, +/area/station/hallway/secondary/entry) +"lCu" = ( +/obj/effect/turf_decal/stripes{ + dir = 1 + }, +/obj/structure/extinguisher_cabinet/directional/north, +/obj/structure/cable, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"lCw" = ( +/obj/effect/turf_decal/box/corners{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/science/ordnance) +"lCA" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 + }, +/obj/item/radio/intercom/directional/north, +/turf/open/floor/iron/white, +/area/station/medical/chemistry/minisat) +"lCO" = ( +/obj/structure/chair/pew{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/chapel, +/area/station/service/chapel) +"lCR" = ( +/obj/structure/railing{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/spawner/random/maintenance/two, +/turf/open/floor/iron, +/area/station/maintenance/central/greater) +"lCY" = ( +/obj/effect/spawner/random/maintenance/two, +/obj/effect/spawner/random/structure/closet_empty/crate, +/obj/effect/mapping_helpers/burnt_floor, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"lDa" = ( +/obj/effect/turf_decal/tile/neutral, +/obj/structure/table, +/obj/item/reagent_containers/cup/soda_cans/cola{ + pixel_x = 14 + }, +/obj/item/reagent_containers/cup/soda_cans/cola{ + pixel_x = 3; + pixel_y = 5 + }, +/obj/item/reagent_containers/cup/soda_cans/cola{ + pixel_x = -6 + }, +/obj/effect/landmark/start/hangover, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"lDl" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/yellow/filled/line, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/textured, +/area/station/medical/pharmacy) +"lDn" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/department/bridge) +"lDK" = ( +/obj/structure/railing{ + dir = 1 + }, +/turf/open/floor/iron/stairs/left{ + dir = 8 + }, +/area/station/science/research) +"lDP" = ( +/obj/structure/table, +/obj/item/healthanalyzer{ + pixel_x = -5; + pixel_y = 5 + }, +/obj/item/healthanalyzer{ + pixel_x = -5 + }, +/obj/item/pen{ + pixel_x = 7 + }, +/obj/effect/turf_decal/tile/blue/half/contrasted{ + dir = 8 + }, +/obj/machinery/airalarm/directional/west, +/turf/open/floor/iron/white, +/area/station/security/medical) +"lDQ" = ( +/turf/closed/mineral/random/stationside/asteroid/porus{ + mineralChance = 20 + }, +/area/station/hallway/secondary/entry) +"lDZ" = ( +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/unres, +/obj/effect/mapping_helpers/airlock/access/any/supply/maintenance, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/catwalk_floor/iron_smooth, +/area/station/maintenance/disposal) +"lEa" = ( +/obj/machinery/button/elevator/directional/east{ + id = "aisat" + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron/dark/smooth_large, +/area/station/ai_monitored/turret_protected/aisat_interior) +"lED" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/turf/open/floor/iron, +/area/station/engineering/lobby) +"lEM" = ( +/obj/item/radio/intercom/directional/south{ + frequency = 1423; + name = "Interrogation Intercom" + }, +/obj/effect/landmark/secequipment, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/security/interrogation) +"lER" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment, +/turf/open/floor/wood/tile, +/area/station/service/bar) +"lES" = ( +/obj/structure/table/reinforced, +/obj/machinery/reagentgrinder{ + pixel_y = 12 + }, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/yellow/filled/mid_joiner{ + dir = 1 + }, +/turf/open/floor/iron/white/smooth_edge{ + dir = 1 + }, +/area/station/medical/pharmacy) +"lFv" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plating, +/area/station/maintenance/port/lesser) +"lFE" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"lFG" = ( +/turf/open/floor/glass, +/area/station/command/meeting_room) +"lFJ" = ( +/obj/effect/decal/cleanable/blood/old, +/obj/item/flashlight/flare/candle, +/turf/open/floor/plating, +/area/station/engineering/lobby) +"lFK" = ( +/obj/structure/chair, +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/turf/open/floor/plating/airless, +/area/station/science/ordnance/bomb) +"lFN" = ( +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + color = "#000000" + }, +/obj/effect/turf_decal/box, +/obj/item/radio/intercom/directional/west, +/obj/machinery/byteforge, +/turf/open/floor/iron/dark/textured, +/area/station/cargo/bitrunning/den) +"lFR" = ( +/obj/machinery/door/airlock/medical/glass{ + name = "Pharmacy" + }, +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/access/all/medical/pharmacy, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment, +/obj/machinery/duct, +/turf/open/floor/iron/white/textured_edge{ + dir = 1 + }, +/area/station/medical/treatment_center) +"lFT" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/plating, +/area/station/maintenance/aft/upper) +"lFW" = ( +/obj/effect/spawner/random/structure/grille{ + spawn_loot_chance = 76 + }, +/turf/open/floor/iron/dark, +/area/station/maintenance/department/engine) +"lFX" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/engineering/main) +"lFZ" = ( +/mob/living/basic/axolotl, +/turf/open/floor/grass, +/area/station/service/hydroponics/garden) +"lGe" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/plating, +/area/station/maintenance/department/medical) +"lGt" = ( +/obj/machinery/atmospherics/pipe/smart/manifold/green/visible, +/turf/open/floor/iron, +/area/station/engineering/atmos) +"lGD" = ( +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 1 + }, +/obj/structure/table, +/obj/item/book/manual/wiki/security_space_law, +/turf/open/floor/iron, +/area/station/hallway/secondary/exit/departure_lounge) +"lGH" = ( +/obj/effect/turf_decal/stripes{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/dark, +/area/station/command/bridge) +"lGJ" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/station/medical/surgery/theatre) +"lGP" = ( +/obj/effect/turf_decal/trimline/green/filled/line, +/turf/open/floor/iron/white, +/area/station/hallway/secondary/entry) +"lGR" = ( +/obj/effect/spawner/structure/window/hollow/end{ + dir = 8 + }, +/turf/open/floor/plating, +/area/station/service/hydroponics/garden) +"lHc" = ( +/obj/effect/turf_decal/tile/neutral, +/obj/machinery/computer/security/telescreen/entertainment/directional/east, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"lHi" = ( +/obj/structure/ladder{ + icon_state = "ladder10" + }, +/obj/effect/turf_decal/tile/dark_green/opposingcorners, +/turf/open/floor/iron, +/area/station/hallway/secondary/service) +"lHm" = ( +/turf/closed/wall, +/area/station/engineering/storage/tech) +"lHx" = ( +/obj/machinery/door/airlock/engineering{ + name = "Auxiliary Base Construction" + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/mapping_helpers/airlock/access/all/engineering/aux_base, +/obj/effect/turf_decal/tile/yellow/fourcorners, +/obj/effect/landmark/navigate_destination, +/obj/machinery/door/firedoor, +/obj/effect/decal/cleanable/dirt, +/obj/structure/barricade/wooden, +/turf/open/floor/iron, +/area/station/construction/mining/aux_base) +"lHy" = ( +/obj/machinery/button/door/directional/west{ + id = "Cabin6"; + name = "Cabin Bolt Control"; + normaldoorcontrol = 1; + specialfunctions = 4 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/wood/tile, +/area/station/commons/dorms) +"lHC" = ( +/obj/structure/table/reinforced/rglass, +/turf/open/floor/iron/dark, +/area/station/security/office) +"lHX" = ( +/obj/machinery/holopad, +/obj/effect/turf_decal/box/white{ + color = "#EFB341" + }, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/yellow/filled/mid_joiner{ + dir = 4 + }, +/turf/open/floor/iron/white/smooth_large, +/area/station/medical/chemistry/minisat) +"lIm" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/commons/locker) +"lIn" = ( +/obj/machinery/portable_atmospherics/canister/plasma, +/obj/structure/window/reinforced/spawner/directional/east, +/turf/open/floor/iron/white/smooth_large, +/area/station/science/ordnance/storage) +"lIp" = ( +/obj/structure/chair, +/obj/machinery/camera/autoname/directional/east, +/turf/open/floor/iron/dark, +/area/station/maintenance/radshelter/civil) +"lIr" = ( +/turf/closed/wall, +/area/station/hallway/secondary/service) +"lIv" = ( +/obj/structure/railing{ + dir = 8 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/iron, +/area/station/hallway/secondary/exit/departure_lounge) +"lIZ" = ( +/obj/effect/turf_decal/sand/plating, +/obj/machinery/vending/boozeomat/all_access, +/turf/open/floor/plating, +/area/station/maintenance/central/greater) +"lJq" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/maintenance/department/science) +"lJv" = ( +/obj/structure/kitchenspike, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/mob_spawn/corpse/human/damaged, +/obj/effect/decal/cleanable/blood/old, +/obj/effect/mapping_helpers/mob_buckler, +/obj/machinery/light/small/dim/directional/east, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/aisat/uppernorth) +"lJw" = ( +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/security/warden) +"lJC" = ( +/obj/effect/turf_decal/siding/purple{ + dir = 9 + }, +/turf/open/floor/iron/white/smooth_large, +/area/station/science/research) +"lKh" = ( +/obj/machinery/vending/coffee, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 6 + }, +/turf/open/floor/iron/white, +/area/station/medical/exam_room) +"lKk" = ( +/obj/machinery/light/small/dim/directional/west, +/turf/open/misc/asteroid, +/area/station/maintenance/department/science) +"lKp" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 8 + }, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/cargo/storage) +"lKC" = ( +/obj/structure/railing{ + dir = 1 + }, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"lKE" = ( +/obj/structure/cable, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/turf/open/floor/iron, +/area/station/engineering/lobby) +"lKF" = ( +/obj/effect/turf_decal/box/corners{ + dir = 1 + }, +/turf/open/floor/plating/elevatorshaft, +/area/station/ai_monitored/turret_protected/aisat_interior) +"lKY" = ( +/turf/open/floor/iron/white/textured_large, +/area/station/science/xenobiology) +"lKZ" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/stripes/asteroid/corner{ + dir = 1 + }, +/obj/effect/turf_decal/sand/plating, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"lLa" = ( +/obj/machinery/light/small/dim/directional/south, +/obj/effect/turf_decal/tile/red/fourcorners, +/turf/open/floor/iron, +/area/station/security/warden) +"lLk" = ( +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron, +/area/station/cargo/warehouse) +"lLo" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/cargo/miningoffice) +"lLr" = ( +/obj/machinery/door/airlock/external, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 8 + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/external, +/turf/open/floor/plating, +/area/station/cargo/storage) +"lLC" = ( +/obj/structure/chair/stool/directional/east{ + name = "Quartermaster" + }, +/turf/open/floor/carpet/executive, +/area/station/command/meeting_room) +"lLF" = ( +/obj/structure/broken_flooring/side/directional/north, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/hallway/primary/central) +"lLH" = ( +/obj/machinery/atmospherics/components/trinary/filter/atmos/n2{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/engineering/atmos) +"lLO" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/carpet/red, +/area/station/security/warden) +"lLU" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"lLW" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/plating, +/area/station/maintenance/central/lesser) +"lMj" = ( +/obj/effect/turf_decal/siding/thinplating_new{ + dir = 9 + }, +/turf/open/floor/glass/reinforced, +/area/station/engineering/atmos/upper) +"lMx" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/carpet/blue, +/area/station/command/heads_quarters/cmo) +"lMI" = ( +/obj/effect/spawner/random/structure/closet_maintenance, +/turf/open/floor/plating, +/area/station/maintenance/port/lesser) +"lMT" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/obj/effect/turf_decal/delivery, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 10 + }, +/obj/structure/closet/emcloset, +/obj/machinery/camera/autoname/directional/south{ + network = list("ss13","rd") + }, +/turf/open/floor/iron/checker, +/area/station/science/research) +"lNe" = ( +/obj/machinery/atmospherics/pipe/layer_manifold/scrubbers/visible, +/turf/open/floor/plating, +/area/station/maintenance/port/greater) +"lNk" = ( +/obj/effect/turf_decal/stripes{ + dir = 9 + }, +/obj/machinery/light/directional/west, +/obj/item/pipe_dispenser, +/obj/item/pipe_dispenser, +/obj/item/pipe_dispenser, +/obj/structure/rack, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"lNr" = ( +/obj/effect/landmark/event_spawn, +/turf/open/floor/iron, +/area/station/engineering/atmos) +"lNu" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/stripes{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"lNv" = ( +/obj/effect/turf_decal/trimline/blue/filled/line, +/obj/machinery/newscaster/directional/south, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) +"lNx" = ( +/obj/machinery/atmospherics/pipe/smart/simple/dark/hidden{ + dir = 8 + }, +/turf/open/floor/engine/vacuum, +/area/station/science/ordnance/burnchamber) +"lNz" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) +"lNB" = ( +/obj/effect/mapping_helpers/airlock/access/all/service/hydroponics, +/obj/machinery/door/airlock{ + name = "Hydroponics Backroom" + }, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/service/hydroponics) +"lNE" = ( +/obj/machinery/door/airlock/hatch{ + name = "MiniSat Antechamber" + }, +/obj/effect/mapping_helpers/airlock/access/all/command/minisat, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "antesat" + }, +/obj/structure/cable/layer3, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/ai_monitored/turret_protected/aisat_interior) +"lNJ" = ( +/obj/structure/lattice/catwalk, +/obj/machinery/atmospherics/pipe/heat_exchanging/simple, +/turf/open/space/basic, +/area/space/nearstation) +"lNO" = ( +/obj/effect/turf_decal/tile/dark_green/anticorner/contrasted{ + dir = 4 + }, +/obj/effect/turf_decal/arrows{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/cargo/storage) +"lOk" = ( +/obj/machinery/power/apc/auto_name/directional/west, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/solars/port/aft) +"lOo" = ( +/obj/effect/turf_decal/tile/red/anticorner/contrasted{ + dir = 8 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/security/execution/transfer) +"lOy" = ( +/obj/item/radio/intercom/directional/east, +/obj/structure/reagent_dispensers/fueltank, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/station/science/robotics/mechbay) +"lOE" = ( +/obj/structure/table/wood, +/obj/item/gun/ballistic/revolver/russian, +/turf/open/floor/wood, +/area/station/commons/lounge) +"lPe" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/plating, +/area/station/maintenance/port/lesser) +"lPi" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/iron/dark/smooth_large, +/area/station/ai_monitored/turret_protected/aisat/uppersouth) +"lPj" = ( +/obj/machinery/firealarm/directional/north, +/obj/structure/rack, +/obj/item/storage/toolbox/emergency, +/obj/effect/turf_decal/stripes, +/turf/open/floor/iron/dark/textured_large, +/area/station/ai_monitored/turret_protected/aisat/foyer) +"lPp" = ( +/obj/machinery/light/directional/south, +/obj/machinery/power/emitter, +/turf/open/floor/plating, +/area/station/engineering/storage) +"lPw" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/turf/open/floor/engine, +/area/station/command/corporate_dock) +"lPz" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/obj/effect/turf_decal/tile/dark_blue, +/turf/open/floor/iron/dark, +/area/station/command/bridge) +"lPC" = ( +/obj/item/stack/tile/iron/white, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/white, +/area/station/medical/chemistry/minisat) +"lPV" = ( +/obj/effect/spawner/random/trash/garbage{ + spawn_scatter_radius = 1 + }, +/turf/open/floor/plating, +/area/station/maintenance/central/lesser) +"lQe" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/structure/table, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/cable/multilayer/connected, +/obj/machinery/cell_charger, +/obj/item/stock_parts/power_store/cell/high, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/command/storage/satellite) +"lQl" = ( +/obj/structure/cable, +/obj/effect/spawner/structure/window/hollow/reinforced/end{ + dir = 8 + }, +/obj/machinery/door/firedoor, +/turf/open/floor/plating, +/area/station/hallway/secondary/command) +"lQD" = ( +/obj/effect/turf_decal/tile/dark_blue/half/contrasted, +/obj/machinery/airalarm/directional/south, +/turf/open/floor/iron, +/area/station/command/bridge) +"lQL" = ( +/turf/open/openspace, +/area/station/hallway/primary/starboard) +"lQN" = ( +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/iron/dark/side{ + dir = 4 + }, +/area/station/command/gateway) +"lQQ" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/commons/vacant_room/commissary) +"lQU" = ( +/obj/effect/turf_decal/siding/purple{ + dir = 9 + }, +/obj/structure/table, +/obj/item/reagent_containers/cup/glass/coffee/no_lid, +/obj/effect/spawner/random/trash/cigbutt{ + spawn_random_offset = 4; + spawn_scatter_radius = 1 + }, +/turf/open/floor/iron/white/textured_large, +/area/station/science/research) +"lRc" = ( +/obj/structure/table, +/obj/item/paper_bin, +/obj/item/pen, +/obj/effect/turf_decal/tile/red/diagonal_edge, +/obj/machinery/camera/autoname/directional/east, +/turf/open/floor/iron/dark, +/area/station/security/warden) +"lRk" = ( +/obj/effect/landmark/atmospheric_sanity/ignore_area, +/turf/open/floor/iron/dark/telecomms, +/area/station/ai_monitored/turret_protected/ai) +"lRr" = ( +/obj/machinery/door/airlock/maintenance/glass, +/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/commons/vacant_room/commissary) +"lRL" = ( +/obj/effect/turf_decal/tile/red/anticorner/contrasted{ + dir = 8 + }, +/obj/item/kirbyplants/random, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/obj/machinery/light_switch/directional/west, +/turf/open/floor/iron, +/area/station/security/warden) +"lSc" = ( +/obj/machinery/door/airlock/medical/glass{ + name = "Reception" + }, +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/access/any/medical/general, +/obj/effect/turf_decal/trimline/blue/filled/line, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/station/medical/exam_room) +"lSm" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/main) +"lSz" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light/small/directional/south, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/plating, +/area/station/science/robotics/storage) +"lSA" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/white/textured_half, +/area/station/science/xenobiology) +"lSD" = ( +/obj/machinery/disposal/bin, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light_switch/directional/east, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/obj/item/radio/intercom/directional/south, +/turf/open/floor/iron, +/area/station/service/janitor) +"lSI" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/white, +/area/station/medical/chemistry/minisat) +"lSM" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/hallway/secondary/exit/departure_lounge) +"lSN" = ( +/obj/effect/turf_decal/tile/yellow{ + dir = 1 + }, +/obj/structure/chair, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) +"lTb" = ( +/obj/structure/lattice/catwalk, +/turf/open/space/basic, +/area/station/solars/port/aft) +"lTj" = ( +/obj/effect/spawner/random/trash/hobo_squat, +/turf/open/floor/plating, +/area/station/maintenance/department/medical) +"lTp" = ( +/obj/structure/chair/sofa/bench, +/obj/machinery/light/directional/north, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/exit/departure_lounge) +"lTq" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/hallway/primary/fore) +"lTv" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/command/teleporter) +"lTD" = ( +/obj/machinery/modular_computer/preset/engineering, +/obj/effect/turf_decal/tile/yellow/anticorner/contrasted, +/turf/open/floor/iron/dark, +/area/station/command/bridge) +"lTJ" = ( +/obj/structure/filingcabinet, +/obj/item/storage/box/evidence{ + pixel_y = 19 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron, +/area/station/security/detectives_office) +"lTN" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/junction, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"lUj" = ( +/obj/effect/turf_decal/siding/purple{ + dir = 1 + }, +/obj/machinery/light/directional/north, +/turf/open/floor/iron/white/smooth_half, +/area/station/science/research) +"lUk" = ( +/obj/effect/turf_decal/trimline/blue/filled/line, +/turf/open/floor/iron/white, +/area/station/medical/treatment_center) +"lUl" = ( +/obj/structure/cable, +/obj/structure/chair/sofa/bench/right, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + color = "#000000" + }, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/exit/departure_lounge) +"lUp" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/plating, +/area/station/maintenance/department/bridge) +"lUy" = ( +/obj/structure/cable, +/obj/effect/landmark/navigate_destination/dockarrival, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/catwalk_floor/flat_white, +/area/station/hallway/secondary/entry) +"lUF" = ( +/obj/structure/transport/linear/public, +/obj/machinery/elevator_control_panel{ + preset_destination_names = list(2 = "Telecomms", 3 = "AI Core"); + linked_elevator_id = "aisat"; + pixel_x = 32 + }, +/turf/open/openspace, +/area/station/ai_monitored/turret_protected/aisat_interior) +"lUM" = ( +/obj/structure/toilet/greyscale{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/camera/autoname/directional/west, +/turf/open/floor/iron/dark, +/area/station/security/prison/safe) +"lVj" = ( +/obj/effect/turf_decal/loading_area/white{ + dir = 4 + }, +/obj/machinery/light/directional/north, +/turf/open/floor/iron/textured_large, +/area/station/cargo/lobby) +"lVo" = ( +/obj/effect/turf_decal/trimline/blue/filled/line, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) +"lVq" = ( +/obj/item/radio/intercom/directional/south, +/obj/structure/closet/firecloset, +/obj/effect/turf_decal/bot, +/obj/effect/turf_decal/siding/purple{ + dir = 4 + }, +/turf/open/floor/iron/white/textured_corner{ + dir = 1 + }, +/area/station/science/xenobiology) +"lVv" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/grass, +/area/station/security/prison/garden) +"lVx" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/plating, +/area/station/maintenance/port/greater) +"lVy" = ( +/obj/machinery/door/airlock/command{ + name = "Research Director's Observatory" + }, +/obj/effect/mapping_helpers/airlock/access/all/science/rd, +/obj/machinery/door/firedoor, +/turf/open/floor/plating, +/area/station/command/heads_quarters/rd) +"lVB" = ( +/turf/closed/mineral/random/stationside/asteroid/porus, +/area/station/maintenance/department/science) +"lVD" = ( +/obj/effect/landmark/event_spawn, +/turf/open/floor/iron/dark, +/area/station/medical/morgue) +"lVF" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/medical/chemistry) +"lWc" = ( +/obj/structure/table/wood, +/obj/item/storage/photo_album/chapel, +/turf/open/floor/iron/grimy, +/area/station/service/chapel/office) +"lWd" = ( +/obj/machinery/door/airlock/maintenance_hatch, +/obj/effect/mapping_helpers/airlock/access/all/science/research, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/science/explab) +"lWF" = ( +/obj/structure/table/wood, +/obj/item/paper_bin, +/obj/item/pen, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/wood, +/area/station/maintenance/port/greater) +"lWW" = ( +/obj/structure/grille, +/turf/open/floor/plating, +/area/station/ai_monitored/turret_protected/ai) +"lXb" = ( +/obj/machinery/light/warm/directional/east, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/turf/open/floor/wood/tile, +/area/station/security/courtroom) +"lXe" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/siding/purple, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/white, +/area/station/ai_monitored/turret_protected/ai_upload_foyer) +"lXu" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/exit/departure_lounge) +"lXy" = ( +/mob/living/basic/slime, +/turf/open/floor/engine, +/area/station/science/xenobiology) +"lXz" = ( +/obj/machinery/atmospherics/pipe/multiz/scrubbers/visible/layer2, +/turf/open/floor/grass, +/area/station/science/genetics) +"lXG" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/spawner/random/structure/crate, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"lXI" = ( +/obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, +/obj/machinery/door/airlock/atmos{ + name = "Hypertorus Fusion Reactor" + }, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/engineering/atmospherics_engine) +"lXJ" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/oil, +/obj/item/radio/intercom/directional/north, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/aisat/uppernorth) +"lXO" = ( +/obj/effect/spawner/random/engineering/atmospherics_portable, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/central/lesser) +"lXY" = ( +/obj/machinery/power/port_gen/pacman/pre_loaded, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"lYa" = ( +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 1 + }, +/obj/vehicle/ridden/secway, +/obj/structure/window/reinforced/spawner/directional/east, +/obj/machinery/firealarm/directional/north, +/turf/open/floor/iron, +/area/station/security/interrogation) +"lYe" = ( +/obj/effect/turf_decal/tile/brown/half/contrasted, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/cargo/lobby) +"lYg" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/turf_decal/trimline/yellow/filled/corner{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/station/maintenance/department/medical) +"lYm" = ( +/obj/machinery/disposal/bin, +/obj/effect/turf_decal/delivery, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured, +/area/station/science/robotics/lab) +"lYo" = ( +/obj/structure/table, +/obj/machinery/cell_charger, +/obj/item/stock_parts/power_store/cell/high, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"lYp" = ( +/obj/structure/railing/corner{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/turf/open/floor/iron, +/area/station/engineering/main) +"lYt" = ( +/obj/structure/table/reinforced, +/obj/machinery/microwave, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 9 + }, +/obj/machinery/light_switch/directional/north, +/turf/open/floor/iron, +/area/station/engineering/break_room) +"lYu" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment, +/obj/effect/landmark/event_spawn, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) +"lYA" = ( +/obj/effect/spawner/random/maintenance/two, +/obj/machinery/airalarm/directional/south, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/port/greater) +"lYB" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/department/medical) +"lYL" = ( +/obj/structure/railing{ + dir = 10 + }, +/turf/open/floor/iron/dark/side{ + dir = 10 + }, +/area/station/command/meeting_room) +"lYN" = ( +/obj/machinery/computer/monitor, +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/aisat/teleporter) +"lYR" = ( +/obj/machinery/flasher/portable, +/obj/effect/turf_decal/tile/blue/half/contrasted{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/security/lockers) +"lYZ" = ( +/obj/machinery/computer/communications, +/obj/effect/turf_decal/tile/blue/half/contrasted, +/obj/structure/window/reinforced/spawner/directional/north, +/turf/open/floor/iron, +/area/station/command/bridge) +"lZb" = ( +/obj/effect/turf_decal/trimline/yellow/filled/end{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/obj/machinery/camera/autoname/directional/east{ + network = list("ss13","medbay") + }, +/turf/open/floor/iron/textured, +/area/station/medical/pharmacy) +"lZc" = ( +/obj/machinery/button/door/directional/east{ + name = "Radiation Shutters Control"; + id = "soup" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, +/obj/effect/turf_decal/stripes{ + dir = 4 + }, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"lZn" = ( +/obj/effect/turf_decal/siding/purple/corner{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/landmark/event_spawn, +/turf/open/floor/iron/white/herringbone, +/area/station/science/breakroom) +"lZu" = ( +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/turf/open/floor/iron/textured, +/area/station/hallway/primary/starboard) +"lZH" = ( +/obj/effect/turf_decal/trimline/blue/filled/corner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/duct, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron/white, +/area/station/medical/treatment_center) +"lZO" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/iron/corner, +/area/station/service/hydroponics/garden) +"lZP" = ( +/obj/structure/railing, +/obj/machinery/door/firedoor/border_only, +/obj/effect/turf_decal/tile/brown/anticorner/contrasted, +/turf/open/floor/iron, +/area/station/cargo/storage) +"mam" = ( +/obj/structure/closet/secure_closet/personal, +/obj/machinery/power/apc/auto_name/directional/east, +/obj/effect/turf_decal/tile/red/anticorner/contrasted, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/security) +"maz" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/structure/sink/kitchen/directional/north, +/turf/open/floor/iron/textured_large, +/area/station/service/hydroponics/garden) +"maA" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/science/robotics/lab) +"maR" = ( +/obj/machinery/restaurant_portal/restaurant, +/obj/machinery/firealarm/directional/west, +/turf/open/floor/wood, +/area/station/commons/lounge) +"maY" = ( +/obj/structure/table/wood, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/security/courtroom) +"mbn" = ( +/obj/structure/table/reinforced, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/machinery/door/firedoor, +/obj/effect/spawner/random/clothing/costume, +/turf/open/floor/wood/large, +/area/station/cargo/boutique) +"mbA" = ( +/obj/structure/cable, +/obj/machinery/button/ignition{ + id = "xenobio"; + pixel_y = -26 + }, +/obj/machinery/button/door/directional/north{ + pixel_x = -6; + id = "xenobio5"; + name = "pen 5 blast doors control" + }, +/obj/machinery/button/door/directional/north{ + pixel_x = 6; + id = "xenobio6"; + name = "pen 6 blast doors control" + }, +/turf/open/floor/iron/dark/textured_edge{ + dir = 8 + }, +/area/station/science/xenobiology) +"mbL" = ( +/turf/closed/wall/r_wall, +/area/station/ai_monitored/turret_protected/ai_upload_foyer) +"mbM" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/security/lockers) +"mbZ" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/decal/cleanable/dirt/dust, +/obj/item/radio/intercom/directional/south, +/turf/open/floor/wood, +/area/station/maintenance/central/lesser) +"mcd" = ( +/obj/structure/closet/secure_closet/engineering_personal, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 10 + }, +/obj/machinery/light/directional/south, +/turf/open/floor/iron, +/area/station/engineering/storage) +"mcl" = ( +/obj/effect/turf_decal/trimline/blue/filled/line, +/turf/open/floor/iron/white, +/area/station/medical/storage) +"mcv" = ( +/obj/machinery/button/door/directional/south{ + name = "Observatory Lock"; + id = "sealobs" + }, +/turf/open/floor/catwalk_floor/iron_white, +/area/station/science/ordnance/testlab) +"mcw" = ( +/obj/item/radio/intercom/directional/west, +/obj/effect/turf_decal/tile/neutral, +/turf/open/floor/iron/dark, +/area/station/command/heads_quarters/hop) +"mcA" = ( +/obj/structure/closet/secure_closet/personal, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/delivery, +/obj/machinery/light/directional/north, +/obj/item/storage/wallet, +/turf/open/floor/iron/dark, +/area/station/commons/locker) +"mcQ" = ( +/obj/machinery/duct, +/obj/effect/turf_decal/trimline/blue/filled/line, +/turf/open/floor/iron/white, +/area/station/medical/treatment_center) +"mcS" = ( +/obj/effect/spawner/random/engineering/tracking_beacon, +/turf/open/floor/iron, +/area/station/cargo/lobby) +"mds" = ( +/obj/machinery/vending/autodrobe/all_access, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/delivery, +/obj/machinery/camera/autoname/directional/west, +/turf/open/floor/iron/dark, +/area/station/commons/locker) +"mdv" = ( +/obj/structure/chair/wood{ + dir = 1 + }, +/obj/machinery/light/small/directional/east, +/turf/open/floor/carpet, +/area/station/commons/dorms) +"mdw" = ( +/obj/machinery/power/apc/auto_name/directional/south, +/obj/structure/cable, +/obj/effect/turf_decal/tile/yellow{ + dir = 1 + }, +/obj/effect/turf_decal/tile/yellow, +/turf/open/floor/iron/dark/corner{ + dir = 8 + }, +/area/station/engineering/atmos/storage/gas) +"mee" = ( +/obj/effect/turf_decal/trimline/yellow/filled/corner{ + dir = 8 + }, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/command/heads_quarters/ce) +"meE" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/effect/spawner/structure/window, +/turf/open/floor/plating, +/area/station/service/bar) +"meF" = ( +/obj/effect/turf_decal/tile/neutral/half/contrasted, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/turf/open/floor/iron/dark, +/area/station/command/teleporter) +"meH" = ( +/obj/structure/rack, +/obj/item/electronics/apc, +/obj/item/electronics/airlock, +/obj/item/electronics/airlock, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/ai_monitored/turret_protected/aisat/uppersouth) +"meL" = ( +/obj/effect/landmark/event_spawn, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/wood, +/area/station/command/heads_quarters/qm) +"meP" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/blue/filled/corner{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/white, +/area/station/medical/storage) +"meQ" = ( +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/security/lockers) +"meT" = ( +/obj/effect/turf_decal/tile/brown/half/contrasted, +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/obj/machinery/digital_clock/directional/south, +/turf/open/floor/iron, +/area/station/cargo/storage) +"mff" = ( +/obj/effect/turf_decal/tile/blue/half/contrasted, +/turf/open/floor/iron, +/area/station/security/courtroom) +"mfh" = ( +/obj/machinery/newscaster/directional/east, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/grimy, +/area/station/security/detectives_office/private_investigators_office) +"mfl" = ( +/obj/structure/bookcase/random/adult, +/obj/machinery/light/dim/directional/south, +/turf/open/floor/wood, +/area/station/service/library) +"mfA" = ( +/obj/machinery/exoscanner, +/obj/effect/turf_decal/siding/wideplating_new/dark/end{ + dir = 8 + }, +/turf/open/floor/circuit/airless, +/area/station/cargo/storage) +"mfC" = ( +/obj/effect/baseturf_helper/reinforced_plating/ceiling, +/turf/open/floor/iron/dark, +/area/station/science/ordnance) +"mgi" = ( +/obj/machinery/door/poddoor/shutters{ + id = "ordauxgarage"; + dir = 1 + }, +/obj/effect/turf_decal/sand/plating, +/obj/effect/turf_decal/stripes/asteroid/end{ + dir = 8 + }, +/turf/open/floor/plating, +/area/station/science/ordnance) +"mgn" = ( +/obj/docking_port/stationary{ + dir = 8; + dwidth = 5; + height = 7; + name = "Cargo Bay"; + shuttle_id = "cargo_home"; + width = 12 + }, +/turf/open/space/basic, +/area/space) +"mgF" = ( +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/simple/purple/visible/layer1, +/obj/machinery/portable_atmospherics/pipe_scrubber, +/turf/open/floor/iron/textured, +/area/station/engineering/atmos) +"mgH" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt/dust, +/obj/item/trash/syndi_cakes, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"mgV" = ( +/obj/machinery/door/airlock/maintenance_hatch, +/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 8 + }, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/commons/fitness/recreation) +"mhc" = ( +/obj/machinery/door/airlock/maintenance_hatch, +/obj/effect/mapping_helpers/airlock/access/all/medical/general, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/turf/open/floor/plating, +/area/station/medical/medbay/central) +"mhh" = ( +/turf/open/openspace, +/area/station/engineering/atmos) +"mhi" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/light/directional/west, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"mht" = ( +/obj/machinery/portable_atmospherics/pump, +/obj/structure/window/reinforced/spawner/directional/north, +/obj/machinery/atmospherics/components/unary/portables_connector/visible/layer4{ + dir = 4 + }, +/obj/effect/turf_decal/tile/yellow{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) +"mhz" = ( +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 8 + }, +/obj/machinery/light/directional/west, +/turf/open/floor/iron, +/area/station/cargo/storage) +"mhA" = ( +/obj/effect/turf_decal/siding/thinplating_new, +/obj/item/radio/intercom/directional/south, +/turf/open/floor/glass/reinforced, +/area/station/engineering/atmos/upper) +"mhF" = ( +/obj/effect/spawner/random/decoration/material, +/obj/effect/spawner/random/decoration/material, +/obj/structure/closet/crate/engineering, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/maintenance/department/cargo) +"mhG" = ( +/obj/effect/turf_decal/tile/dark_blue/half/contrasted{ + dir = 8 + }, +/obj/machinery/light_switch/directional/west, +/turf/open/floor/iron, +/area/station/hallway/secondary/command) +"mhI" = ( +/obj/machinery/power/apc/auto_name/directional/west, +/obj/structure/cable, +/obj/item/surgery_tray/full/deployed, +/obj/effect/turf_decal/tile/blue/full, +/obj/machinery/light_switch/directional/south, +/turf/open/floor/iron/white, +/area/station/medical/surgery) +"mhO" = ( +/obj/structure/table/reinforced, +/obj/item/storage/box/beakers{ + pixel_x = -10; + pixel_y = 3 + }, +/obj/item/reagent_containers/cup/beaker/large{ + pixel_x = 6; + pixel_y = 5 + }, +/obj/item/reagent_containers/cup/beaker/large{ + pixel_x = 6 + }, +/obj/machinery/firealarm/directional/south, +/obj/effect/turf_decal/trimline/yellow/filled/line, +/obj/effect/turf_decal/trimline/yellow/filled/mid_joiner, +/turf/open/floor/iron/white/smooth_edge, +/area/station/medical/pharmacy) +"mhU" = ( +/obj/effect/turf_decal/tile/red/diagonal_edge, +/obj/effect/landmark/event_spawn, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/security/warden) +"mil" = ( +/obj/machinery/atmospherics/pipe/multiz/scrubbers/visible/layer2{ + name = "chimpanzee filth exhaust" + }, +/obj/machinery/light/directional/north, +/turf/open/floor/iron/white, +/area/station/science/research) +"mio" = ( +/obj/machinery/computer/station_alert, +/turf/open/floor/iron, +/area/station/engineering/atmos/upper) +"mit" = ( +/obj/structure/weightmachine/weightlifter, +/obj/machinery/newscaster/directional/east, +/turf/open/floor/iron, +/area/station/security/prison) +"miD" = ( +/obj/effect/turf_decal/stripes/line, +/obj/structure/reagent_dispensers/plumbed, +/turf/open/floor/pod/light, +/area/station/maintenance/department/medical/central) +"miE" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/cargo/storage) +"miI" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/command/gateway) +"miK" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/item/stack/sheet/iron, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) +"miL" = ( +/obj/effect/landmark/start/depsec/engineering, +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 10 + }, +/obj/machinery/power/apc/auto_name/directional/west, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/engineering) +"miR" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/sand/plating, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/turf/open/floor/plating, +/area/station/maintenance/department/medical) +"miV" = ( +/obj/effect/spawner/random/trash/mess, +/turf/open/floor/plating, +/area/station/maintenance/central/greater) +"mjd" = ( +/obj/machinery/light/directional/south, +/obj/machinery/cell_charger, +/obj/structure/table, +/turf/open/floor/iron/textured, +/area/station/hallway/primary/starboard) +"mjf" = ( +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/engineering/main) +"mjq" = ( +/obj/structure/cable/layer3, +/obj/machinery/camera/autoname/directional/north{ + network = list("aicore") + }, +/turf/open/floor/catwalk_floor/iron_dark/telecomms, +/area/station/ai_monitored/turret_protected/ai) +"mju" = ( +/obj/effect/turf_decal/stripes/corner, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/wood/parquet, +/area/station/cargo/boutique) +"mjx" = ( +/obj/machinery/door/airlock/external{ + name = "Solar Maintenance" + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 1 + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/solars/port/aft) +"mjP" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ + dir = 1 + }, +/obj/effect/turf_decal/tile/yellow{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark/corner, +/area/station/engineering/atmos) +"mjR" = ( +/obj/effect/landmark/blobstart, +/turf/open/floor/iron, +/area/station/engineering/atmos) +"mjZ" = ( +/obj/machinery/atmospherics/components/binary/pump, +/turf/open/floor/iron, +/area/station/engineering/atmos) +"mkc" = ( +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, +/obj/effect/mapping_helpers/airlock/unres, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/maintenance/department/medical) +"mks" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron/freezer, +/area/station/security/prison/shower) +"mkE" = ( +/obj/structure/table/glass, +/obj/item/storage/box/lights/mixed, +/turf/open/floor/iron, +/area/station/engineering/lobby) +"mkJ" = ( +/obj/effect/turf_decal/tile/red/anticorner/contrasted{ + dir = 1 + }, +/obj/machinery/computer/records/security, +/turf/open/floor/iron, +/area/station/security/checkpoint/supply) +"mkL" = ( +/obj/item/kirbyplants/random, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 5 + }, +/obj/machinery/camera/autoname/directional/north, +/turf/open/floor/iron, +/area/station/engineering/main) +"mkN" = ( +/obj/machinery/door/airlock/command{ + name = "Head of Security's Tactical Shower" + }, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/effect/mapping_helpers/airlock/access/all/security/hos, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 8 + }, +/turf/open/floor/carpet/red, +/area/station/command/heads_quarters/hos) +"mkR" = ( +/obj/machinery/light/small/dim/directional/north, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/iron, +/area/station/command/gateway) +"mkX" = ( +/obj/structure/lattice/catwalk, +/obj/structure/railing{ + dir = 1 + }, +/turf/open/openspace, +/area/station/engineering/atmospherics_engine) +"mkZ" = ( +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk, +/turf/open/floor/iron/dark, +/area/station/command/corporate_showroom) +"mla" = ( +/obj/machinery/door/poddoor/shutters/window{ + id = "gateshutter"; + name = "Gateway Access Shutter"; + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/command/gateway) +"mld" = ( +/obj/effect/turf_decal/tile/red/opposingcorners, +/obj/effect/landmark/event_spawn, +/turf/open/floor/iron, +/area/station/security/brig/entrance) +"mlf" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/turf_decal/tile/brown{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/cargo/storage) +"mlk" = ( +/obj/machinery/atmospherics/pipe/heat_exchanging/manifold4w, +/turf/open/space/basic, +/area/space/nearstation) +"mlm" = ( +/obj/machinery/light/warm/directional/north, +/turf/open/floor/engine, +/area/station/command/heads_quarters/rd) +"mlo" = ( +/obj/structure/table, +/obj/item/hand_labeler, +/turf/open/floor/iron/kitchen, +/area/station/service/kitchen) +"mlq" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/turf/open/floor/carpet/black, +/area/station/command/heads_quarters/hos) +"mlG" = ( +/obj/structure/table/reinforced, +/obj/machinery/recharger{ + pixel_y = 3 + }, +/obj/item/restraints/handcuffs, +/obj/effect/turf_decal/tile/dark_blue/half/contrasted{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/command/bridge) +"mlK" = ( +/turf/open/floor/fakepit, +/area/station/maintenance/department/medical) +"mlV" = ( +/obj/machinery/power/apc/auto_name/directional/west, +/obj/structure/cable, +/turf/open/floor/iron/white, +/area/station/science/research) +"mlY" = ( +/obj/machinery/door/airlock/hatch{ + name = "Cyborg Break Room" + }, +/obj/effect/mapping_helpers/airlock/access/all/command/minisat, +/obj/machinery/door/firedoor, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/ai_monitored/turret_protected/aisat/uppernorth) +"mmh" = ( +/turf/closed/wall/r_wall, +/area/station/security/checkpoint/engineering) +"mml" = ( +/obj/structure/lattice/catwalk, +/obj/structure/cable, +/turf/open/space/openspace, +/area/station/solars/port) +"mmy" = ( +/obj/machinery/photobooth/security, +/turf/open/floor/iron/dark/textured, +/area/station/security/execution/transfer) +"mmU" = ( +/obj/machinery/computer/mecha{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral/opposingcorners{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/command/heads_quarters/rd) +"mmV" = ( +/mob/living/carbon/human/species/monkey, +/turf/open/floor/grass, +/area/station/science/genetics) +"mna" = ( +/obj/structure/tank_dispenser, +/obj/machinery/firealarm/directional/west, +/turf/open/floor/iron/white, +/area/station/science/ordnance/testlab) +"mnc" = ( +/obj/machinery/chem_master, +/obj/effect/turf_decal/trimline/yellow/filled/line, +/obj/effect/turf_decal/trimline/yellow/filled/mid_joiner, +/turf/open/floor/iron/white/smooth_edge, +/area/station/medical/pharmacy) +"mnd" = ( +/obj/effect/turf_decal/siding/purple{ + dir = 10 + }, +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/turf/open/floor/iron/white/textured_large, +/area/station/science/research) +"mne" = ( +/obj/effect/turf_decal/sand/plating, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/plating, +/area/station/maintenance/central/greater) +"mnk" = ( +/obj/effect/spawner/random/structure/tank_holder, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/dark, +/area/station/maintenance/department/engine) +"mnt" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"mnA" = ( +/obj/effect/turf_decal/stripes/red/corner{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/red/line, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/medical/morgue) +"mnC" = ( +/obj/effect/turf_decal/trimline/neutral/filled/warning, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/medical/morgue) +"mnD" = ( +/obj/effect/spawner/random/structure/crate, +/obj/effect/spawner/random/decoration/flower, +/obj/effect/spawner/random/decoration/paint, +/obj/effect/spawner/random/decoration/glowstick, +/turf/open/floor/plating, +/area/station/maintenance/central/greater) +"mnG" = ( +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 1 + }, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/cargo/storage) +"mnI" = ( +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/command/heads_quarters/hop) +"mnP" = ( +/turf/open/floor/iron, +/area/station/service/hydroponics) +"mnS" = ( +/obj/machinery/portable_atmospherics/pump, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/dark/smooth_large, +/area/station/science/ordnance) +"mnU" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 + }, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/engineering/storage) +"mnX" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/cable, +/obj/effect/landmark/event_spawn, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/iron, +/area/station/security/evidence) +"mod" = ( +/obj/machinery/holopad, +/obj/effect/turf_decal/tile/neutral/opposingcorners{ + dir = 1 + }, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/command/heads_quarters/rd) +"moe" = ( +/turf/closed/wall/r_wall, +/area/station/science/ordnance/testlab) +"mog" = ( +/turf/open/openspace, +/area/station/engineering/main) +"mor" = ( +/obj/effect/turf_decal/siding/wood, +/obj/machinery/power/apc/auto_name/directional/east, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/carpet, +/area/station/service/lawoffice) +"moH" = ( +/obj/machinery/computer/records/security, +/obj/machinery/airalarm/directional/east, +/obj/effect/turf_decal/tile/red/fourcorners, +/obj/structure/reagent_dispensers/wall/peppertank/directional/north, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/medical) +"moL" = ( +/obj/machinery/atmospherics/components/binary/pump{ + dir = 8; + name = "Pure to Mix" + }, +/obj/machinery/atmospherics/pipe/bridge_pipe/yellow/visible, +/turf/open/floor/iron, +/area/station/engineering/atmos) +"moT" = ( +/obj/effect/turf_decal/siding/white, +/obj/item/ammo_casing/a357/spent, +/turf/open/floor/iron/white/small, +/area/station/science/lobby) +"moU" = ( +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/engineering/main) +"mpc" = ( +/turf/closed/wall/rock/porous, +/area/station/hallway/primary/starboard) +"mpp" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 4 + }, +/obj/machinery/light/cold/directional/east, +/obj/machinery/modular_computer/preset/civilian{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) +"mpA" = ( +/obj/structure/window/spawner/directional/west, +/turf/open/floor/iron/white/smooth_half{ + dir = 8 + }, +/area/station/commons/fitness/recreation) +"mpG" = ( +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/medical/maintenance, +/obj/effect/mapping_helpers/airlock/unres, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"mpH" = ( +/obj/machinery/computer/operating{ + dir = 1 + }, +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/structure/cable, +/turf/open/floor/iron/white, +/area/station/medical/surgery/theatre) +"mpZ" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/spawner/random/structure/steam_vent, +/turf/open/floor/plating, +/area/station/maintenance/central/greater) +"mqb" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/science/ordnance) +"mqz" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/power/apc/auto_name/directional/east, +/obj/structure/cable, +/obj/machinery/light_switch/directional/north, +/turf/open/floor/plating, +/area/station/science/robotics/storage) +"mqA" = ( +/obj/structure/rack, +/obj/effect/spawner/random/armory/riot_armor, +/obj/effect/spawner/random/armory/bulletproof_armor, +/obj/effect/turf_decal/tile/red/half/contrasted, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/security/armory) +"mqE" = ( +/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible{ + dir = 10 + }, +/turf/open/floor/iron, +/area/station/engineering/atmos) +"mqH" = ( +/obj/structure/cable, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/engineering/gravity_generator) +"mra" = ( +/obj/machinery/button/door/incinerator_vent_atmos_aux{ + pixel_y = 24 + }, +/obj/machinery/button/door/incinerator_vent_atmos_main{ + pixel_y = 40 + }, +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) +"mrq" = ( +/obj/effect/turf_decal/tile/dark_blue/half/contrasted{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/command/bridge) +"mrr" = ( +/obj/item/storage/box/beakers{ + pixel_y = 7 + }, +/obj/structure/table/reinforced, +/obj/item/assembly/igniter{ + pixel_y = -3 + }, +/obj/item/toy/figure/chemist{ + pixel_x = 6 + }, +/turf/open/floor/iron/dark/textured_edge, +/area/station/medical/pharmacy) +"mrw" = ( +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/security/brig/entrance) +"mry" = ( +/turf/open/misc/asteroid, +/area/station/hallway/primary/starboard) +"mrK" = ( +/obj/machinery/shower/directional/south, +/obj/effect/turf_decal{ + icon = 'icons/obj/mining_zones/survival_pod.dmi'; + icon_state = "fan_tiny" + }, +/obj/machinery/firealarm/directional/east, +/turf/open/floor/iron/white/textured_large, +/area/station/medical/surgery/theatre) +"mrV" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/plating, +/area/station/maintenance/department/bridge) +"msf" = ( +/obj/effect/turf_decal/tile/dark_red/opposingcorners, +/obj/effect/spawner/random/bedsheet/any, +/obj/structure/bed, +/obj/item/toy/plush/lizard_plushie/green{ + name = "Drinks-The-Booze" + }, +/turf/open/floor/iron/dark, +/area/station/service/bar/backroom) +"msi" = ( +/obj/effect/turf_decal/sand/plating, +/turf/open/floor/plating, +/area/station/maintenance/port/greater) +"msm" = ( +/obj/machinery/camera/autoname/directional/south, +/obj/effect/turf_decal/trimline/yellow/filled/line, +/turf/open/floor/iron, +/area/station/engineering/lobby) +"mst" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/landmark/event_spawn, +/turf/open/floor/iron, +/area/station/engineering/atmos/pumproom) +"msw" = ( +/obj/effect/mob_spawn/corpse/human/assistant, +/turf/open/misc/asteroid, +/area/station/asteroid) +"msz" = ( +/obj/machinery/door/airlock/security{ + name = "Auxilliary Brig" + }, +/obj/effect/turf_decal/tile/red/fourcorners, +/obj/machinery/door/firedoor, +/obj/structure/cable, +/obj/effect/mapping_helpers/airlock/access/all/security/brig, +/turf/open/floor/iron, +/area/station/security/brig) +"msE" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/oil, +/obj/machinery/camera/autoname/directional/south, +/turf/open/floor/iron, +/area/station/cargo/warehouse/upper) +"msR" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/turf/open/floor/engine, +/area/station/command/corporate_dock) +"msS" = ( +/obj/structure/table/reinforced/rglass, +/obj/item/mod/module/thermal_regulator, +/obj/item/mod/module/plasma_stabilizer{ + pixel_y = 12 + }, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/security/office) +"msV" = ( +/obj/structure/closet/crate/bin, +/obj/effect/spawner/random/trash/botanical_waste, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 6 + }, +/obj/machinery/camera/autoname/directional/south, +/turf/open/floor/iron, +/area/station/engineering/break_room) +"msY" = ( +/turf/open/floor/engine/co2, +/area/station/engineering/atmos) +"msZ" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/obj/effect/turf_decal/trimline/yellow/filled/corner{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/engineering/break_room) +"mta" = ( +/obj/effect/turf_decal/stripes/corner, +/turf/open/floor/engine, +/area/station/command/corporate_dock) +"mtB" = ( +/obj/effect/turf_decal/tile/green/anticorner/contrasted{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/fore) +"mtG" = ( +/obj/machinery/door/airlock/command, +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/access/any/command/general, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "bridgec" + }, +/obj/effect/mapping_helpers/airlock/access/any/admin/general, +/turf/open/floor/iron/dark/side{ + dir = 4 + }, +/area/station/command/corporate_showroom) +"mtH" = ( +/turf/open/floor/plating/airless, +/area/station/solars/port) +"mtO" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/junction, +/turf/open/floor/iron/white/smooth_large, +/area/station/science/research) +"mtS" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/wood, +/area/station/security/detectives_office/private_investigators_office) +"mua" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/blood/old, +/turf/open/floor/iron/white, +/area/station/medical/chemistry/minisat) +"muf" = ( +/obj/structure/chair/pew/right{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/iron/chapel, +/area/station/service/chapel) +"mut" = ( +/obj/machinery/shower/directional/south, +/obj/structure/cable, +/obj/effect/landmark/start/prisoner, +/turf/open/floor/iron/freezer, +/area/station/security/prison/shower) +"muw" = ( +/obj/structure/table, +/obj/item/storage/belt/utility, +/obj/item/storage/medkit/fire{ + pixel_y = -4 + }, +/turf/open/floor/iron, +/area/station/engineering/atmos/upper) +"muL" = ( +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/mapping_helpers/airlock/abandoned, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/department/bridge) +"muP" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/machinery/power/apc/auto_name/directional/east, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/wood/tile, +/area/station/service/chapel) +"mvb" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/landmark/start/assistant, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/commons/fitness/recreation) +"mvd" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/siding/thinplating/dark, +/obj/structure/sink/directional/north, +/obj/effect/turf_decal{ + icon = 'icons/obj/mining_zones/survival_pod.dmi'; + icon_state = "fan_tiny" + }, +/obj/machinery/light/directional/south, +/turf/open/floor/iron/checker, +/area/station/science/research) +"mvh" = ( +/obj/machinery/light/floor, +/turf/open/floor/engine, +/area/station/science/xenobiology) +"mvk" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/stripes{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"mvp" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/grille/broken, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/plating, +/area/station/cargo/warehouse) +"mvG" = ( +/obj/structure/flora/rock/pile/style_random, +/turf/open/misc/asteroid/airless, +/area/station/asteroid) +"mvI" = ( +/obj/machinery/power/emitter, +/obj/effect/decal/cleanable/dirt, +/obj/structure/window/spawner/directional/south, +/turf/open/floor/plating, +/area/station/maintenance/department/engine) +"mvJ" = ( +/obj/structure/table/wood, +/obj/structure/window/reinforced/spawner/directional/east, +/obj/item/reagent_containers/cup/glass/coffee{ + pixel_x = -3; + pixel_y = 9 + }, +/obj/structure/desk_bell{ + pixel_x = 4 + }, +/obj/effect/turf_decal/tile/neutral/half/contrasted, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/service/cafeteria) +"mvP" = ( +/obj/machinery/door/airlock/security/glass{ + name = "N2O Storage" + }, +/obj/effect/mapping_helpers/airlock/access/all/security/armory, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"mvR" = ( +/obj/machinery/door/airlock/public/glass{ + name = "Jim Norton's Quebecois Coffee" + }, +/obj/effect/mapping_helpers/airlock/access/any/service/general, +/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, +/obj/effect/turf_decal/tile/neutral/half/contrasted, +/turf/open/floor/iron/dark, +/area/station/service/cafeteria) +"mvU" = ( +/obj/item/radio/intercom/prison/directional/north, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/security/prison) +"mvW" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/firedoor/heavy, +/turf/open/floor/plating, +/area/station/commons/fitness/recreation) +"mwc" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/firealarm/directional/east, +/turf/open/floor/carpet/red, +/area/station/command/heads_quarters/qm) +"mwe" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/ai_monitored/turret_protected/aisat/uppersouth) +"mwo" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/herringbone, +/area/station/hallway/primary/central) +"mww" = ( +/obj/structure/cable, +/turf/open/floor/iron/dark/side, +/area/station/command/corporate_dock) +"mwx" = ( +/obj/structure/cable, +/obj/effect/landmark/blobstart, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/maintenance/radshelter/civil) +"mwS" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/iron, +/area/station/cargo/lobby) +"mwW" = ( +/obj/effect/spawner/structure/window, +/turf/open/floor/plating, +/area/station/science/robotics/lab) +"mwY" = ( +/obj/machinery/door/airlock/engineering{ + name = "Engineering Restrooms" + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/obj/machinery/door/firedoor, +/turf/open/floor/iron/showroomfloor, +/area/station/engineering/main) +"mxh" = ( +/obj/item/radio/intercom/directional/east, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron/grimy, +/area/station/security/detectives_office) +"mxn" = ( +/obj/machinery/module_duplicator, +/obj/machinery/camera/autoname/directional/south{ + network = list("ss13","rd") + }, +/obj/structure/sign/poster/random/directional/south, +/turf/open/floor/iron/white, +/area/station/science/explab) +"mxq" = ( +/turf/closed/wall, +/area/station/maintenance/disposal) +"mxs" = ( +/obj/item/radio/intercom/directional/north, +/turf/open/floor/grass, +/area/station/science/genetics) +"mxt" = ( +/obj/structure/lattice/catwalk, +/turf/open/space/openspace, +/area/space/nearstation) +"mxv" = ( +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 1 + }, +/obj/machinery/light/directional/north, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/obj/machinery/photocopier, +/turf/open/floor/iron, +/area/station/security) +"mxx" = ( +/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ + dir = 6 + }, +/turf/open/floor/iron, +/area/station/engineering/atmos) +"mxF" = ( +/obj/effect/turf_decal/tile/dark_red/opposingcorners, +/obj/machinery/airalarm/directional/south, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/service/bar) +"mxL" = ( +/obj/effect/turf_decal/tile/yellow{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold/green/visible{ + dir = 1 + }, +/obj/machinery/light_switch/directional/north, +/turf/open/floor/iron/dark/corner{ + dir = 1 + }, +/area/station/engineering/atmos/upper) +"myg" = ( +/obj/structure/cable, +/obj/item/radio/intercom/directional/north, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/engineering/lobby) +"myk" = ( +/obj/structure/table, +/obj/item/food/popcorn/salty, +/turf/open/floor/iron, +/area/station/commons/fitness/recreation) +"myx" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/commons/storage/primary) +"myG" = ( +/obj/effect/turf_decal/tile/red/anticorner/contrasted, +/obj/machinery/computer/records/security{ + dir = 8 + }, +/obj/structure/reagent_dispensers/wall/peppertank/directional/east, +/obj/effect/turf_decal/trimline/dark_red/filled/warning, +/turf/open/floor/iron, +/area/station/hallway/secondary/exit/departure_lounge) +"myV" = ( +/obj/structure/window/spawner/directional/south, +/obj/structure/window/spawner/directional/west, +/turf/open/floor/iron/dark, +/area/station/commons/fitness/recreation) +"myW" = ( +/obj/structure/window/reinforced/spawner/directional/west, +/turf/open/floor/engine, +/area/station/command/heads_quarters/rd) +"myZ" = ( +/obj/structure/table, +/obj/item/stack/sheet/plasteel{ + amount = 10 + }, +/obj/item/stack/rods/fifty, +/obj/effect/spawner/random/trash/janitor_supplies, +/obj/effect/turf_decal/tile/yellow/anticorner/contrasted, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron, +/area/station/construction/mining/aux_base) +"mzb" = ( +/obj/machinery/atmospherics/pipe/smart/simple/orange/visible, +/turf/open/floor/iron, +/area/station/engineering/atmos) +"mzB" = ( +/obj/machinery/firealarm/directional/west, +/obj/structure/closet/firecloset/full, +/obj/structure/sign/departments/science/alt/directional/south, +/turf/open/floor/iron/white, +/area/station/science/research) +"mzI" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/turf/open/floor/iron, +/area/station/command/bridge) +"mzJ" = ( +/obj/structure/stairs/south, +/obj/structure/railing{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/engineering/atmos) +"mzU" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/door/airlock/maintenance_hatch, +/obj/effect/mapping_helpers/airlock/welded, +/turf/open/floor/iron/dark/smooth_large, +/area/station/command/emergency_closet) +"mAa" = ( +/obj/structure/rack, +/obj/item/reagent_containers/cup/bottle/chlorine{ + pixel_x = -6 + }, +/obj/item/reagent_containers/cup/bottle/carbon, +/obj/item/reagent_containers/cup/bottle/bromine{ + pixel_x = 6 + }, +/turf/open/floor/iron/dark/textured_edge{ + dir = 1 + }, +/area/station/medical/pharmacy) +"mAd" = ( +/obj/effect/turf_decal/tile/red/half/contrasted, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/security/office) +"mAi" = ( +/obj/structure/stairs/east, +/turf/open/floor/iron/stairs/right{ + dir = 8 + }, +/area/station/medical/storage) +"mAA" = ( +/obj/structure/bed/medical/emergency{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/department/engine) +"mAF" = ( +/obj/effect/turf_decal/sand/plating, +/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/obj/machinery/door/airlock/external, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 8 + }, +/turf/open/floor/plating, +/area/station/engineering/supermatter/room) +"mAX" = ( +/obj/effect/turf_decal/tile/blue/anticorner/contrasted{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/security/courtroom) +"mBg" = ( +/obj/machinery/portable_atmospherics/canister/plasma, +/turf/open/floor/engine/plasma, +/area/station/engineering/atmos) +"mBj" = ( +/obj/structure/bed, +/obj/machinery/airalarm/directional/north, +/obj/machinery/camera/autoname/directional/east{ + network = list("ss13","medbay") + }, +/turf/open/floor/iron/white, +/area/station/medical/patients_rooms/room_a) +"mBt" = ( +/obj/effect/turf_decal/tile/brown{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/cargo/storage) +"mBw" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/structure/cable, +/obj/item/radio/intercom/directional/west, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/obj/machinery/disposal/bin, +/turf/open/floor/wood, +/area/station/service/library) +"mBD" = ( +/obj/machinery/light/small/directional/west, +/turf/open/floor/grass, +/area/station/medical/chemistry) +"mBI" = ( +/obj/structure/table/wood, +/obj/item/storage/fancy/candle_box{ + pixel_y = 5 + }, +/obj/item/storage/fancy/candle_box, +/obj/item/radio/intercom/directional/south, +/turf/open/floor/iron/grimy, +/area/station/service/chapel/office) +"mBS" = ( +/obj/machinery/door/firedoor, +/turf/open/floor/iron, +/area/station/cargo/lobby) +"mBT" = ( +/obj/structure/weightmachine, +/turf/open/floor/iron/white/textured_large, +/area/station/commons/fitness/recreation) +"mBX" = ( +/obj/machinery/door/airlock/engineering/glass{ + name = "Engineering Foyer" + }, +/obj/effect/mapping_helpers/airlock/access/any/engineering/general, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/effect/landmark/navigate_destination/engineering, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/access/any/engineering/construction, +/turf/open/floor/iron, +/area/station/engineering/lobby) +"mBY" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/carpet/red, +/area/station/command/heads_quarters/qm) +"mCb" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/turf/open/floor/iron, +/area/station/engineering/main) +"mCm" = ( +/obj/effect/turf_decal/stripes, +/obj/item/radio/intercom/directional/south, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"mCn" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 4 + }, +/obj/structure/sign/poster/random/directional/east, +/turf/open/floor/iron/white, +/area/station/hallway/secondary/entry) +"mCo" = ( +/obj/effect/spawner/random/structure/girder, +/turf/open/floor/plating, +/area/station/maintenance/central/lesser) +"mCr" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/wood, +/area/station/service/library) +"mCt" = ( +/obj/machinery/light/cold/dim/directional/north, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/ai_monitored/turret_protected/aisat/foyer) +"mCv" = ( +/obj/structure/closet/secure_closet/personal, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/delivery, +/obj/machinery/light_switch/directional/west, +/obj/item/storage/wallet/random, +/turf/open/floor/iron/dark, +/area/station/commons/locker) +"mCF" = ( +/obj/machinery/duct, +/obj/effect/landmark/start/cook, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/kitchen, +/area/station/service/kitchen) +"mCN" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/engineering/storage/tech) +"mCT" = ( +/obj/structure/chair/office/light, +/turf/open/floor/glass/reinforced, +/area/station/science/xenobiology) +"mCZ" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/public/glass{ + name = "Departure Lounge" + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/station/hallway/secondary/exit/departure_lounge) +"mDb" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/station/hallway/primary/fore) +"mDe" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/spawner/random/structure/closet_empty/crate, +/turf/open/floor/iron, +/area/station/cargo/warehouse) +"mDr" = ( +/obj/effect/landmark/event_spawn, +/obj/machinery/holopad, +/turf/open/floor/wood/parquet, +/area/station/cargo/boutique) +"mDF" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/item/radio/intercom/directional/east, +/obj/structure/cable, +/turf/open/floor/iron/white, +/area/station/medical/treatment_center) +"mDK" = ( +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/obj/machinery/light/small/directional/north, +/turf/open/floor/iron/stairs/left{ + dir = 8 + }, +/area/station/science/lab) +"mDP" = ( +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "antesat" + }, +/obj/machinery/door/airlock/hatch{ + name = "MiniSat Antechamber" + }, +/obj/effect/mapping_helpers/airlock/access/any/engineering/tcoms, +/obj/structure/cable/layer3, +/obj/machinery/elevator_control_panel/directional/south{ + linked_elevator_id = "aisat"; + pixel_x = 8; + pixel_y = -29 + }, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/ai_monitored/turret_protected/aisat_interior) +"mDT" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) +"mDV" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/purple/visible, +/obj/structure/lattice, +/turf/open/space/basic, +/area/space/nearstation) +"mDX" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/carpet, +/area/station/service/theater) +"mEs" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 1 + }, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/plating, +/area/station/maintenance/port/lesser) +"mEy" = ( +/obj/structure/cable, +/obj/effect/landmark/event_spawn, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/security) +"mEN" = ( +/obj/item/computer_disk/maintenance/spectre_meter, +/turf/open/misc/asteroid/airless, +/area/station/asteroid) +"mEO" = ( +/obj/structure/table, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/item/pipe_dispenser{ + pixel_x = 3; + pixel_y = 7 + }, +/obj/item/pipe_dispenser, +/obj/machinery/power/apc/auto_name/directional/south{ + areastring = "/area/station/science/ordnance/burnchamber" + }, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/science/ordnance) +"mEQ" = ( +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/plating, +/area/station/maintenance/port/greater) +"mFa" = ( +/obj/machinery/door/firedoor/heavy, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/door/airlock/research{ + name = "Ordnance Auxiliary Storage" + }, +/obj/effect/mapping_helpers/airlock/access/all/science/ordnance, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/atmospherics/pipe/smart/simple/green/hidden, +/turf/open/floor/iron/dark, +/area/station/science/ordnance) +"mFb" = ( +/obj/structure/fans/tiny, +/obj/machinery/door/poddoor/massdriver_chapel, +/obj/effect/turf_decal/stripes/full, +/turf/open/floor/iron/dark, +/area/station/service/chapel/funeral) +"mFe" = ( +/obj/structure/chair/office{ + dir = 4 + }, +/obj/effect/landmark/start/cargo_technician, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment, +/turf/open/floor/wood/large, +/area/station/cargo/boutique) +"mFn" = ( +/obj/structure/window/reinforced/spawner/directional/north, +/obj/structure/table, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 1 + }, +/obj/item/storage/backpack/duffelbag/sec/surgery{ + pixel_y = 5 + }, +/obj/structure/cable, +/obj/item/clothing/gloves/color/yellow, +/turf/open/floor/iron/dark, +/area/station/security/execution/education) +"mFR" = ( +/obj/effect/turf_decal/tile/yellow/anticorner/contrasted{ + dir = 4 + }, +/obj/structure/closet/toolcloset, +/obj/machinery/computer/security/telescreen/auxbase/directional/east, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/light_switch/directional/north, +/turf/open/floor/iron, +/area/station/construction/mining/aux_base) +"mFT" = ( +/obj/machinery/newscaster/directional/west, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/freezer, +/area/station/security/prison/shower) +"mGk" = ( +/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ + dir = 9 + }, +/obj/effect/turf_decal/tile/yellow{ + dir = 8 + }, +/turf/open/floor/iron/dark/corner{ + dir = 1 + }, +/area/station/engineering/atmos) +"mGn" = ( +/turf/closed/wall/rock/porous, +/area/station/hallway/secondary/entry) +"mGo" = ( +/obj/structure/chair/comfy{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/structure/sign/painting/library{ + pixel_y = 32 + }, +/turf/open/floor/wood/tile, +/area/station/service/bar) +"mGq" = ( +/obj/machinery/door/firedoor, +/obj/effect/spawner/structure/window, +/turf/open/floor/plating, +/area/station/hallway/primary/central) +"mGG" = ( +/turf/closed/wall, +/area/station/security/breakroom) +"mGM" = ( +/obj/effect/turf_decal/sand/plating, +/obj/structure/reagent_dispensers/fueltank, +/turf/open/floor/plating, +/area/station/asteroid) +"mGP" = ( +/obj/effect/turf_decal/trimline/yellow/filled/corner{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/command/heads_quarters/ce) +"mGW" = ( +/turf/open/openspace, +/area/station/hallway/primary/central) +"mGX" = ( +/obj/machinery/door/poddoor{ + id = "captaindriver" + }, +/obj/effect/turf_decal/stripes/end{ + dir = 1 + }, +/turf/open/floor/engine, +/area/station/command/heads_quarters/captain/private) +"mHc" = ( +/obj/machinery/airalarm/directional/west, +/obj/machinery/portable_atmospherics/canister/oxygen, +/turf/open/floor/iron/white/smooth_large, +/area/station/science/ordnance/storage) +"mHf" = ( +/obj/structure/table, +/obj/item/controller, +/obj/item/compact_remote, +/obj/item/compact_remote, +/obj/machinery/light/directional/west, +/turf/open/floor/iron/white, +/area/station/science/explab) +"mHn" = ( +/obj/structure/cable, +/obj/effect/turf_decal/trimline/purple/filled/arrow_ccw{ + dir = 10 + }, +/obj/effect/turf_decal/trimline/purple/filled/corner{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/white/smooth_large, +/area/station/science/xenobiology/hallway) +"mHu" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/machinery/camera/autoname/directional/north, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"mHx" = ( +/obj/structure/window/spawner/directional/east, +/obj/machinery/portable_atmospherics/pipe_scrubber, +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark/smooth_large, +/area/station/science/ordnance) +"mHG" = ( +/obj/machinery/door/airlock/maintenance_hatch, +/obj/effect/mapping_helpers/airlock/access/all/medical/general, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plating, +/area/station/medical/treatment_center) +"mHL" = ( +/obj/structure/closet/secure_closet/security/sec, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 1 + }, +/obj/structure/extinguisher_cabinet/directional/north, +/turf/open/floor/iron/dark, +/area/station/security/lockers) +"mHU" = ( +/obj/effect/turf_decal/siding/brown{ + dir = 9 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/chair/stool/directional/east, +/obj/effect/landmark/start/cargo_technician, +/turf/open/floor/iron/textured, +/area/station/cargo/storage) +"mHV" = ( +/obj/effect/turf_decal/siding/purple{ + dir = 4 + }, +/obj/structure/chair/sofa/bench/right{ + dir = 4 + }, +/turf/open/floor/iron/white/textured_large, +/area/station/science/research) +"mIa" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/structure/tank_holder/extinguisher, +/obj/machinery/light/directional/south, +/turf/open/floor/iron/dark, +/area/station/science/ordnance/testlab) +"mIe" = ( +/obj/machinery/door/airlock/multi_tile/public, +/obj/effect/mapping_helpers/airlock/access/all/command/minisat, +/obj/machinery/door/firedoor, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/aisat/foyer) +"mIk" = ( +/obj/structure/closet/crate/coffin, +/obj/effect/decal/cleanable/cobweb, +/turf/open/floor/plating, +/area/station/service/chapel/funeral) +"mIA" = ( +/obj/machinery/power/apc/auto_name/directional/west, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/turf/open/floor/wood/large, +/area/station/cargo/boutique) +"mIH" = ( +/obj/structure/lattice, +/obj/effect/turf_decal/stripes/asteroid/line{ + dir = 5 + }, +/turf/open/misc/asteroid, +/area/station/hallway/primary/starboard) +"mIW" = ( +/turf/closed/wall/r_wall, +/area/station/security/warden) +"mIY" = ( +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/east, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/maintenance/department/engine) +"mJv" = ( +/obj/structure/cable, +/obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/exit/departure_lounge) +"mJx" = ( +/obj/effect/spawner/random/vending/colavend, +/obj/effect/turf_decal/tile/red/anticorner/contrasted{ + dir = 8 + }, +/obj/machinery/airalarm/directional/south, +/obj/machinery/light_switch/directional/west, +/turf/open/floor/iron/half, +/area/station/security/breakroom) +"mJB" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/atmospherics/pipe/bridge_pipe/cyan/visible{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/layer_manifold/yellow/visible, +/turf/open/floor/plating, +/area/station/engineering/atmos) +"mJG" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/white, +/area/station/science/lobby) +"mJL" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/obj/effect/turf_decal/sand/plating, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"mJO" = ( +/obj/structure/railing{ + dir = 5 + }, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"mJR" = ( +/obj/machinery/light/dim/directional/east, +/obj/effect/turf_decal/tile/neutral, +/obj/structure/table, +/obj/item/clothing/head/soft/grey{ + pixel_x = -2; + pixel_y = 3 + }, +/obj/effect/landmark/start/hangover, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"mJU" = ( +/obj/machinery/atmospherics/components/trinary/filter{ + dir = 4 + }, +/obj/effect/turf_decal/delivery, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/newscaster/directional/north, +/turf/open/floor/iron/dark, +/area/station/science/ordnance/testlab) +"mJV" = ( +/obj/effect/turf_decal/stripes/line, +/obj/structure/railing, +/turf/open/floor/engine, +/area/station/hallway/secondary/entry) +"mKc" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/engineering/gravity_generator) +"mKe" = ( +/obj/structure/railing, +/obj/machinery/door/firedoor/border_only, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wood, +/obj/structure/table/wood/fancy, +/obj/effect/spawner/random/food_or_drink/refreshing_beverage, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/wood/tile, +/area/station/service/bar) +"mKo" = ( +/obj/structure/railing{ + dir = 5 + }, +/obj/structure/window/reinforced/spawner/directional/west, +/obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ + dir = 4 + }, +/obj/machinery/holopad, +/obj/effect/landmark/event_spawn, +/turf/open/floor/iron/dark, +/area/station/cargo/bitrunning/den) +"mKD" = ( +/turf/closed/wall, +/area/station/hallway/secondary/command) +"mKF" = ( +/obj/structure/table, +/obj/machinery/cell_charger, +/obj/item/stock_parts/power_store/cell/high, +/obj/machinery/light_switch/directional/south, +/turf/open/floor/iron/white, +/area/station/science/lab) +"mKJ" = ( +/obj/structure/lattice/catwalk, +/obj/machinery/camera/autoname/directional/south, +/turf/open/openspace, +/area/station/engineering/atmospherics_engine) +"mKM" = ( +/obj/machinery/atmospherics/pipe/smart/manifold/general/visible{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/engineering/atmos) +"mKO" = ( +/obj/machinery/holopad, +/turf/open/floor/iron, +/area/station/engineering/gravity_generator) +"mKW" = ( +/obj/structure/dresser, +/turf/open/floor/carpet/red, +/area/station/command/heads_quarters/hos) +"mLe" = ( +/obj/effect/turf_decal/tile/neutral, +/obj/structure/chair/sofa/bench/right{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"mLn" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/cargo/miningoffice) +"mLr" = ( +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"mLA" = ( +/obj/structure/railing{ + dir = 8 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/mapping_helpers/mail_sorting/medbay/virology, +/obj/structure/disposalpipe/sorting/mail/flip{ + dir = 2 + }, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) +"mLG" = ( +/obj/structure/railing{ + dir = 5 + }, +/turf/open/floor/catwalk_floor/iron_dark/telecomms, +/area/station/ai_monitored/turret_protected/ai) +"mLH" = ( +/obj/machinery/vending/coffee, +/obj/effect/turf_decal/delivery, +/obj/effect/turf_decal/siding/purple, +/obj/machinery/digital_clock/directional/north, +/turf/open/floor/iron/white/textured_large, +/area/station/science/research) +"mLN" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/engineering/main) +"mLO" = ( +/obj/effect/turf_decal/tile/neutral, +/obj/structure/table, +/obj/effect/spawner/random/trash/food_packaging, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"mMp" = ( +/obj/machinery/door/airlock/highsecurity, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/structure/cable, +/obj/effect/mapping_helpers/airlock/access/all/security/armory, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/ai_monitored/security/armory) +"mMC" = ( +/obj/effect/turf_decal/tile/neutral, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/computer/security/telescreen/entertainment/directional/south, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"mMH" = ( +/obj/effect/turf_decal/tile/dark_blue/half/contrasted{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/hallway/secondary/command) +"mMJ" = ( +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/cargo/storage) +"mMN" = ( +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/plating, +/area/station/maintenance/central/greater) +"mMS" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/sand/plating, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"mNl" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/iron, +/area/station/commons/locker) +"mNo" = ( +/obj/structure/table/reinforced/rglass, +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/item/storage/box/gloves{ + pixel_y = 10 + }, +/obj/item/storage/box/masks{ + pixel_x = -6; + pixel_y = 2 + }, +/obj/item/storage/box/bodybags{ + pixel_y = 2; + pixel_x = 6 + }, +/turf/open/floor/iron/white, +/area/station/medical/treatment_center) +"mNF" = ( +/obj/machinery/light/directional/west, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/command/corporate_dock) +"mNZ" = ( +/turf/closed/mineral/random/stationside/asteroid/porus, +/area/station/asteroid) +"mOb" = ( +/obj/structure/chair/sofa/bench{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/security/courtroom) +"mOc" = ( +/obj/machinery/door/airlock/research{ + name = "Research Division Access" + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "sci-entrance" + }, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 4 + }, +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/access/all/science/general, +/turf/open/floor/iron/white, +/area/station/science/research) +"mOo" = ( +/obj/effect/turf_decal/tile/brown/half/contrasted, +/turf/open/floor/iron, +/area/station/cargo/drone_bay) +"mOC" = ( +/obj/structure/cable, +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/aisat/foyer) +"mOI" = ( +/obj/machinery/button/door/directional/south{ + id = "warehouse" + }, +/obj/effect/turf_decal/tile/brown/anticorner/contrasted{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/window/spawner/directional/south, +/obj/machinery/conveyor{ + dir = 1; + id = "QMLoad" + }, +/obj/item/radio/intercom/directional/west, +/turf/open/floor/iron, +/area/station/cargo/storage) +"mPl" = ( +/obj/machinery/computer/scan_consolenew{ + dir = 1 + }, +/obj/structure/railing, +/obj/machinery/door/firedoor/border_only, +/obj/effect/turf_decal/siding/purple{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/white/textured, +/area/station/science/genetics) +"mPv" = ( +/obj/structure/lattice/catwalk, +/obj/structure/marker_beacon/olive, +/turf/open/space/basic, +/area/space/nearstation) +"mPH" = ( +/obj/structure/closet/secure_closet/miner, +/obj/effect/turf_decal/tile/brown/half/contrasted, +/obj/machinery/light/directional/north, +/turf/open/floor/iron, +/area/station/cargo/miningoffice) +"mPN" = ( +/obj/effect/turf_decal/tile/red/half/contrasted, +/obj/structure/chair/office, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/security/brig/entrance) +"mPW" = ( +/obj/machinery/door/poddoor/shutters/window{ + name = "Incinerator Storage Shutters"; + id = "incstorage" + }, +/turf/open/floor/plating, +/area/station/maintenance/disposal/incinerator) +"mPX" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/spawner/random/trash/garbage, +/turf/open/floor/iron, +/area/station/maintenance/department/medical/central) +"mQk" = ( +/obj/effect/spawner/random/vending/colavend, +/obj/effect/turf_decal/trimline/yellow/filled/line, +/turf/open/floor/iron, +/area/station/engineering/lobby) +"mQo" = ( +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/security/warden) +"mQy" = ( +/turf/open/floor/iron/chapel{ + dir = 1 + }, +/area/station/service/chapel) +"mQE" = ( +/turf/closed/wall/r_wall, +/area/station/ai_monitored/turret_protected/aisat/uppernorth) +"mQM" = ( +/obj/structure/cable, +/turf/open/floor/iron/dark/textured_half, +/area/station/science/xenobiology) +"mQP" = ( +/obj/structure/lattice, +/obj/structure/cable, +/obj/machinery/atmospherics/components/binary/valve/on/layer4, +/turf/open/space/basic, +/area/space/nearstation) +"mQZ" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/mapping_helpers/broken_floor, +/obj/structure/table, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"mRd" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/textured, +/area/station/construction/mining/aux_base) +"mRi" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron/textured, +/area/station/hallway/primary/central) +"mRu" = ( +/obj/effect/spawner/structure/window/reinforced/plasma, +/obj/machinery/door/poddoor/shutters/radiation/preopen{ + id = "atmoshfr"; + dir = 8 + }, +/turf/open/floor/plating, +/area/station/engineering/atmospherics_engine) +"mRw" = ( +/obj/item/radio/intercom/directional/north, +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/obj/effect/turf_decal/tile/green{ + dir = 4 + }, +/obj/machinery/duct, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/service/hydroponics) +"mRA" = ( +/obj/effect/landmark/event_spawn, +/turf/open/floor/wood, +/area/station/commons/lounge) +"mRC" = ( +/obj/structure/cable, +/obj/machinery/door/airlock/maintenance_hatch{ + name = "Xenobiology Maintenance" + }, +/obj/effect/mapping_helpers/airlock/access/all/science/xenobio, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/catwalk_floor/flat_white, +/area/station/science/xenobiology) +"mRI" = ( +/obj/effect/mob_spawn/corpse/human/clown, +/turf/open/misc/asteroid, +/area/station/asteroid) +"mRU" = ( +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron, +/area/station/engineering/main) +"mSf" = ( +/obj/machinery/mass_driver{ + dir = 1; + power = 12; + id = "captaindriver" + }, +/obj/effect/turf_decal/stripes/end, +/obj/machinery/light/small/directional/south, +/turf/open/floor/engine, +/area/station/command/heads_quarters/captain/private) +"mSm" = ( +/obj/structure/table/wood, +/obj/item/clothing/head/fedora, +/turf/open/floor/wood, +/area/station/commons/lounge) +"mSG" = ( +/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible{ + dir = 1 + }, +/obj/machinery/meter, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/science/ordnance) +"mSK" = ( +/turf/open/floor/iron/white, +/area/station/commons/fitness/recreation) +"mSN" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/engineering/atmos) +"mSY" = ( +/obj/machinery/camera/autoname/directional/east{ + network = list("ss13","rd") + }, +/turf/open/floor/engine, +/area/station/science/explab) +"mTs" = ( +/obj/machinery/holopad, +/obj/effect/landmark/event_spawn, +/turf/open/floor/iron/white/smooth_large, +/area/station/medical/exam_room) +"mTP" = ( +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/department/engine) +"mTS" = ( +/obj/structure/closet/crate, +/obj/effect/spawner/random/maintenance/three, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/department/engine) +"mTV" = ( +/obj/structure/table/wood, +/obj/effect/turf_decal/siding/wood, +/obj/item/paper_bin, +/obj/item/pen, +/turf/open/floor/carpet, +/area/station/service/lawoffice) +"mTZ" = ( +/obj/structure/closet/secure_closet/security/med, +/obj/structure/cable, +/obj/effect/turf_decal/tile/red/fourcorners, +/obj/item/radio/intercom/directional/north, +/obj/machinery/power/apc/auto_name/directional/west, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/medical) +"mUg" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line, +/turf/open/floor/iron, +/area/station/engineering/break_room) +"mUi" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/carpet/red, +/area/station/command/heads_quarters/qm) +"mUp" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 1 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) +"mUs" = ( +/turf/open/floor/iron/white, +/area/station/medical/storage) +"mUC" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/iron, +/area/station/engineering/gravity_generator) +"mUP" = ( +/obj/effect/turf_decal/siding/purple{ + dir = 1 + }, +/obj/structure/chair/sofa/bench{ + dir = 1 + }, +/turf/open/floor/iron/white/textured_large, +/area/station/science/research) +"mUQ" = ( +/turf/closed/wall/rock, +/area/station/asteroid) +"mUU" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/service/chapel/office) +"mUW" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/plating, +/area/station/maintenance/central/lesser) +"mVf" = ( +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ + dir = 4 + }, +/obj/effect/turf_decal/tile/yellow{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/camera/autoname/directional/south, +/turf/open/floor/iron/dark/corner, +/area/station/engineering/atmos) +"mVU" = ( +/obj/effect/spawner/random/maintenance/two, +/obj/effect/spawner/random/structure/crate, +/turf/open/floor/plating, +/area/station/maintenance/central/greater) +"mVX" = ( +/obj/machinery/door/airlock/mining{ + name = "Drone Bay" + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/mapping_helpers/airlock/access/any/supply/maintenance, +/turf/open/floor/plating, +/area/station/cargo/drone_bay) +"mWb" = ( +/obj/effect/turf_decal/siding/wood, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/wood, +/area/station/service/cafeteria) +"mWe" = ( +/obj/machinery/door/poddoor{ + id = "QMLoaddoor2"; + name = "Supply Dock Loading Door" + }, +/obj/machinery/conveyor{ + dir = 4; + id = "QMLoad2" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/turf/open/floor/plating, +/area/station/cargo/storage) +"mWf" = ( +/obj/effect/spawner/structure/window/hollow/end{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/service/hydroponics/garden) +"mWh" = ( +/obj/effect/turf_decal/stripes{ + dir = 6 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"mWB" = ( +/obj/machinery/requests_console/auto_name/directional/south, +/obj/effect/mapping_helpers/requests_console/supplies, +/obj/effect/mapping_helpers/requests_console/assistance, +/obj/effect/turf_decal/tile/yellow{ + dir = 8 + }, +/obj/machinery/light/directional/south, +/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/visible, +/turf/open/floor/iron/dark/corner, +/area/station/engineering/atmos) +"mWF" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible{ + dir = 8 + }, +/turf/open/floor/plating, +/area/station/engineering/atmos) +"mWJ" = ( +/obj/structure/table, +/obj/item/storage/toolbox/electrical, +/obj/item/clothing/gloves/color/fyellow, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/commons/storage/primary) +"mWS" = ( +/obj/machinery/light/small/directional/north, +/obj/structure/flora/rock/pile/style_random, +/turf/open/misc/asteroid, +/area/station/asteroid) +"mWX" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/effect/turf_decal/tile/bar/opposingcorners, +/turf/open/floor/iron, +/area/station/service/bar) +"mXj" = ( +/obj/machinery/door/poddoor/shutters{ + name = "Warehouse Shutters"; + id = "warehouse" + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/cargo/warehouse) +"mXp" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/white, +/area/station/medical/chemistry) +"mXr" = ( +/obj/machinery/atmospherics/pipe/smart/simple/green/visible{ + dir = 4 + }, +/obj/structure/lattice, +/turf/open/space/basic, +/area/space/nearstation) +"mXE" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/carpet, +/area/station/commons/dorms) +"mXJ" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark/small, +/area/station/science/cytology) +"mXK" = ( +/obj/item/clothing/mask/gas/clown_hat, +/obj/effect/decal/remains/human, +/turf/open/floor/plating/airless, +/area/space/nearstation) +"mXM" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/spawner/structure/window/hollow/reinforced/directional{ + dir = 1 + }, +/turf/open/floor/plating/airless, +/area/station/maintenance/department/medical/central) +"mXV" = ( +/obj/effect/turf_decal/tile/red/anticorner/contrasted{ + dir = 4 + }, +/obj/structure/table, +/obj/machinery/firealarm/directional/east, +/obj/item/radio{ + pixel_x = -12 + }, +/obj/machinery/recharger, +/turf/open/floor/iron, +/area/station/hallway/secondary/exit/departure_lounge) +"mXY" = ( +/obj/structure/railing{ + dir = 8 + }, +/turf/open/floor/iron/stairs/left, +/area/station/command/corporate_showroom) +"mYb" = ( +/obj/effect/landmark/start/chief_engineer, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/landmark/event_spawn, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/command/heads_quarters/ce) +"mYd" = ( +/obj/structure/railing{ + dir = 8 + }, +/turf/open/floor/carpet/red, +/area/station/command/heads_quarters/qm) +"mYh" = ( +/obj/machinery/door/poddoor/shutters/window/preopen{ + name = "Security Shutters"; + id = "xbprotect1"; + dir = 8 + }, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/machinery/firealarm/directional/south, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/catwalk_floor/flat_white, +/area/station/science/xenobiology) +"mYs" = ( +/obj/machinery/door/airlock/public/glass{ + name = "Gateway Chamber" + }, +/obj/effect/mapping_helpers/airlock/access/all/command/gateway, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/command/gateway) +"mYD" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/purple/visible, +/obj/effect/turf_decal/stripes, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"mYE" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/iron/dark, +/area/station/security/execution/education) +"mYK" = ( +/obj/machinery/telecomms/server/presets/service, +/turf/open/floor/circuit/green/telecomms/mainframe, +/area/station/tcommsat/server) +"mYN" = ( +/obj/structure/cable, +/obj/effect/turf_decal/tile/purple/opposingcorners, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/white, +/area/station/science/auxlab/firing_range) +"mYU" = ( +/obj/machinery/requests_console/directional/west{ + department = "Hydroponics"; + name = "Hydroponics Requests Console" + }, +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/obj/effect/turf_decal/tile/green{ + dir = 8 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/service/hydroponics) +"mZc" = ( +/obj/effect/turf_decal/trimline/yellow/filled/corner{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/engineering/lobby) +"mZn" = ( +/obj/machinery/atmospherics/components/unary/passive_vent{ + name = "server vent" + }, +/turf/open/floor/iron/dark/telecomms, +/area/station/science/server) +"mZr" = ( +/obj/structure/table/wood, +/obj/item/paper_bin/carbon{ + pixel_x = 6 + }, +/obj/item/folder/white{ + pixel_x = -7; + pixel_y = -3 + }, +/obj/item/pen{ + pixel_x = 6 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/machinery/button/door/directional/east{ + id = "psychshutter"; + name = "privacy shutter control" + }, +/turf/open/floor/wood/parquet, +/area/station/medical/psychology) +"mZs" = ( +/obj/effect/spawner/random/structure/crate, +/turf/open/misc/asteroid, +/area/station/asteroid) +"mZA" = ( +/obj/machinery/atmospherics/pipe/smart/simple/purple/visible{ + dir = 10 + }, +/turf/open/floor/iron, +/area/station/engineering/atmos/pumproom) +"mZJ" = ( +/obj/structure/lattice, +/obj/structure/disposaloutlet, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/turf/open/space/openspace, +/area/space/nearstation) +"mZL" = ( +/obj/effect/spawner/random/structure/chair_flipped, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"mZY" = ( +/obj/machinery/piratepad/civilian, +/obj/effect/turf_decal/bot_white, +/obj/machinery/camera/autoname/directional/south, +/turf/open/floor/iron/textured_large, +/area/station/cargo/lobby) +"naj" = ( +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/obj/machinery/light_switch/directional/east, +/turf/open/floor/iron/white, +/area/station/science/explab) +"nal" = ( +/obj/machinery/atmospherics/pipe/heat_exchanging/simple/layer2{ + dir = 5 + }, +/obj/machinery/camera/autoname/directional/west{ + network = list("ss13","rd") + }, +/turf/open/floor/iron/dark/airless, +/area/station/science/ordnance) +"nan" = ( +/obj/structure/railing/corner{ + dir = 1 + }, +/obj/structure/railing/corner, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/hallway/secondary/exit/departure_lounge) +"nas" = ( +/turf/open/floor/engine, +/area/station/science/auxlab/firing_range) +"nat" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/sign/poster/contraband/random/directional/north, +/turf/open/floor/plating, +/area/station/maintenance/central/lesser) +"nav" = ( +/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ + dir = 6 + }, +/obj/effect/turf_decal/tile/yellow{ + dir = 4 + }, +/obj/machinery/camera/autoname/directional/north, +/turf/open/floor/iron/dark/corner{ + dir = 1 + }, +/area/station/engineering/atmos/pumproom) +"naF" = ( +/turf/open/floor/iron, +/area/station/hallway/primary/fore) +"naO" = ( +/obj/structure/chair/pew/right{ + dir = 4 + }, +/turf/open/floor/iron/chapel, +/area/station/service/chapel) +"naU" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/iron/white, +/area/station/science/ordnance/storage) +"naX" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/wood/parquet, +/area/station/service/theater) +"naZ" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/white, +/area/station/medical/paramedic) +"nbf" = ( +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/west, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/wood, +/area/station/security/detectives_office/private_investigators_office) +"nbj" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/iron/dark/side, +/area/station/command/emergency_closet) +"nbm" = ( +/obj/effect/landmark/start/captain, +/obj/structure/cable, +/obj/effect/baseturf_helper/reinforced_plating/ceiling, +/turf/open/floor/carpet/executive, +/area/station/command/heads_quarters/captain/private) +"nbu" = ( +/obj/structure/grille, +/turf/closed/wall/r_wall, +/area/station/engineering/atmos) +"nbz" = ( +/obj/structure/lattice/catwalk, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/space/basic, +/area/space/nearstation) +"nbG" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) +"ncc" = ( +/obj/structure/flora/bush/flowers_br/style_random, +/obj/structure/window/spawner/directional/north, +/mob/living/basic/butterfly, +/turf/open/misc/grass, +/area/station/ai_monitored/turret_protected/aisat/foyer) +"nck" = ( +/obj/effect/spawner/structure/window/hollow/reinforced/middle{ + dir = 4 + }, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "chemsat"; + dir = 4 + }, +/turf/open/floor/plating, +/area/station/medical/chemistry/minisat) +"ncm" = ( +/obj/machinery/camera/autoname/directional/south{ + network = list("ss13","engine") + }, +/turf/open/floor/iron/dark, +/area/station/engineering/supermatter/room) +"ncv" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/engineering/supermatter/room) +"ncM" = ( +/obj/structure/railing{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/engineering/lobby) +"ncR" = ( +/obj/machinery/door/airlock/research/glass{ + name = "Monkey Pen" + }, +/obj/effect/mapping_helpers/airlock/access/all/medical/chemistry, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/grass, +/area/station/medical/chemistry) +"ncV" = ( +/obj/machinery/door/airlock/public{ + name = "Restroom" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/showroomfloor, +/area/station/engineering/main) +"ncX" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/wood, +/area/station/commons/lounge) +"ncZ" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) +"ndb" = ( +/obj/machinery/vending/security, +/obj/effect/turf_decal/tile/red/anticorner/contrasted, +/obj/machinery/light_switch/directional/east, +/turf/open/floor/iron/dark, +/area/station/security/lockers) +"ndo" = ( +/obj/structure/flora/bush/flowers_br/style_random, +/obj/structure/window/spawner/directional/west, +/obj/structure/window/spawner/directional/south, +/turf/open/misc/grass, +/area/station/ai_monitored/turret_protected/aisat/foyer) +"ndr" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 9 + }, +/obj/effect/decal/cleanable/dirt, +/obj/item/radio/intercom/prison/directional/south, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/security/prison/garden) +"ndu" = ( +/obj/structure/grille, +/turf/open/floor/plating, +/area/station/maintenance/aft/upper) +"ndv" = ( +/obj/machinery/door/window/brigdoor/security/cell/left/directional/east, +/turf/open/floor/glass/reinforced, +/area/station/security/checkpoint/science) +"ndB" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/turf/closed/wall, +/area/station/service/bar) +"ndI" = ( +/obj/structure/table, +/obj/item/hand_labeler, +/obj/item/camera, +/obj/item/camera_film, +/obj/item/storage/crayons, +/obj/item/storage/crayons, +/obj/item/storage/crayons, +/obj/machinery/airalarm/directional/east, +/obj/structure/sign/poster/contraband/clown/directional/south, +/turf/open/floor/iron/textured, +/area/station/commons/storage/art) +"ndR" = ( +/obj/machinery/disposal/bin, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/machinery/button/door/directional/west{ + pixel_y = -6; + name = "Privacy Control"; + id = "pharmacy_shutters" + }, +/obj/structure/cable, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 9 + }, +/obj/effect/turf_decal/trimline/yellow/filled/mid_joiner{ + dir = 1 + }, +/obj/structure/disposalpipe/trunk, +/obj/machinery/light_switch/directional/west{ + pixel_y = 6 + }, +/turf/open/floor/iron/white/smooth_corner, +/area/station/medical/pharmacy) +"ndS" = ( +/obj/effect/spawner/random/structure/closet_maintenance, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/plating, +/area/station/maintenance/port/lesser) +"nea" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 8 + }, +/obj/machinery/digital_clock/directional/west, +/turf/open/floor/iron/white, +/area/station/medical/paramedic) +"nee" = ( +/turf/open/floor/iron/dark/corner{ + dir = 4 + }, +/area/station/command/corporate_dock) +"nek" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/maintenance/solars/port/aft) +"nem" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/iron/white/textured_half{ + dir = 1 + }, +/area/station/science/xenobiology) +"nen" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/dirt, +/obj/item/bot_assembly/firebot, +/turf/open/floor/plating/reinforced, +/area/station/command/emergency_closet) +"nep" = ( +/obj/effect/landmark/event_spawn, +/turf/open/floor/glass/reinforced, +/area/station/engineering/atmos/upper) +"nes" = ( +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/command/storage/satellite) +"net" = ( +/obj/effect/spawner/structure/window/reinforced/tinted, +/turf/open/floor/plating, +/area/station/security/interrogation) +"neu" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 9 + }, +/obj/effect/turf_decal/trimline/yellow/filled/warning{ + dir = 9 + }, +/turf/open/floor/iron, +/area/station/engineering/lobby) +"nev" = ( +/obj/structure/flora/rock/pile/style_random, +/turf/open/misc/asteroid, +/area/station/hallway/secondary/entry) +"nez" = ( +/obj/machinery/door/airlock/maintenance{ + name = "Storage Room" + }, +/obj/effect/mapping_helpers/airlock/abandoned, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 1 + }, +/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"neE" = ( +/obj/machinery/door/poddoor/shutters/radiation/preopen{ + id = "soup"; + name = "Radiation Chamber Shutters" + }, +/turf/open/floor/engine, +/area/station/engineering/supermatter) +"neH" = ( +/obj/effect/turf_decal/tile/dark_blue/half/contrasted{ + dir = 8 + }, +/obj/machinery/computer/security/telescreen/minisat/directional/west, +/turf/open/floor/iron, +/area/station/command/bridge) +"neM" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/engineering/main) +"neT" = ( +/obj/machinery/light/small/directional/west, +/turf/open/floor/plating/reinforced/airless, +/area/station/tcommsat/server) +"nfa" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/commons/fitness/recreation) +"nfc" = ( +/obj/structure/table, +/obj/machinery/door/window/left/directional/east{ + name = "First Aid Supplies"; + req_access = list("medical") + }, +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/item/storage/medkit/regular{ + pixel_x = 3; + pixel_y = 6 + }, +/obj/item/storage/medkit/fire{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/storage/medkit/fire, +/obj/item/storage/medkit/fire{ + pixel_x = -3; + pixel_y = -3 + }, +/obj/machinery/camera/autoname/directional/west, +/turf/open/floor/iron/white, +/area/station/medical/storage) +"nfe" = ( +/obj/machinery/door/airlock/public/glass{ + name = "Auxiliary Tool Storage" + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/door/firedoor, +/turf/open/floor/iron, +/area/station/commons/storage/tools) +"nfj" = ( +/obj/effect/turf_decal/sand/plating, +/obj/effect/spawner/random/decoration/ornament{ + pixel_x = 5 + }, +/obj/structure/table/wood, +/obj/effect/mapping_helpers/broken_floor, +/obj/item/reagent_containers/cup/glass/shaker{ + pixel_x = -8; + pixel_y = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/central/greater) +"nfk" = ( +/obj/structure/table, +/obj/item/paper_bin{ + pixel_x = -2; + pixel_y = 6 + }, +/obj/item/pen{ + pixel_x = -2; + pixel_y = 5 + }, +/turf/open/floor/glass/reinforced, +/area/station/science/xenobiology) +"nfn" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/structure/table/wood/fancy/orange, +/obj/item/paper_bin/carbon{ + pixel_x = 5 + }, +/obj/item/paper_bin/carbon{ + pixel_x = 5; + pixel_y = 4 + }, +/obj/item/reagent_containers/cup/glass/bottle/whiskey{ + pixel_x = -7; + pixel_y = 4 + }, +/obj/machinery/camera/autoname/directional/east, +/turf/open/floor/wood, +/area/station/command/heads_quarters/qm) +"nfx" = ( +/obj/structure/disposalpipe/segment{ + dir = 2 + }, +/obj/effect/turf_decal/trimline/green/filled/corner{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/service/hydroponics) +"nfy" = ( +/obj/effect/turf_decal/tile/yellow/anticorner/contrasted{ + dir = 1 + }, +/obj/machinery/computer/camera_advanced/base_construction/aux{ + dir = 4 + }, +/obj/machinery/airalarm/directional/north, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/camera/autoname/directional/west, +/turf/open/floor/iron, +/area/station/construction/mining/aux_base) +"nfF" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) +"nfP" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/showroomfloor, +/area/station/engineering/main) +"nfS" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/light/small/broken/directional/west, +/obj/structure/reagent_dispensers/fueltank, +/turf/open/floor/plating, +/area/station/cargo/warehouse) +"ngd" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/sand/plating, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"ngh" = ( +/obj/effect/spawner/random/structure/closet_maintenance, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/port/lesser) +"ngn" = ( +/obj/machinery/airalarm/directional/south, +/obj/effect/mapping_helpers/airalarm/engine_access, +/obj/machinery/atmospherics/components/binary/valve/digital/on{ + dir = 4 + }, +/turf/open/floor/engine, +/area/station/engineering/supermatter) +"ngp" = ( +/obj/effect/turf_decal/siding/white{ + dir = 5 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/turf/open/floor/iron/herringbone, +/area/station/hallway/primary/central) +"ngz" = ( +/obj/structure/holosign/barrier/atmos, +/turf/open/misc/asteroid, +/area/station/hallway/primary/central) +"ngK" = ( +/obj/structure/chair{ + dir = 1 + }, +/obj/machinery/camera/autoname/directional/west, +/turf/open/floor/iron/dark/side{ + dir = 10 + }, +/area/station/maintenance/radshelter/medical) +"nhf" = ( +/obj/machinery/computer/records/medical/laptop{ + dir = 8; + pixel_y = 1 + }, +/obj/structure/table, +/obj/machinery/light/dim/directional/east, +/turf/open/floor/iron/white/textured, +/area/station/science/genetics) +"nhk" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/machinery/space_heater, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"nhm" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/engine, +/area/station/hallway/secondary/entry) +"nhC" = ( +/obj/effect/turf_decal/tile/neutral, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/light_switch/directional/north, +/turf/open/floor/iron, +/area/station/commons/fitness/recreation) +"nhS" = ( +/obj/machinery/atmospherics/pipe/smart/simple/orange/visible{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/simple/dark/visible/layer5{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/engineering/atmos) +"nii" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/camera/autoname/directional/north, +/obj/machinery/light_switch/directional/north, +/turf/open/floor/wood, +/area/station/commons/lounge) +"niv" = ( +/obj/structure/cable, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/wood/tile, +/area/station/command/corporate_showroom) +"niB" = ( +/turf/open/floor/plating, +/area/station/maintenance/port/lesser) +"niC" = ( +/obj/structure/window/spawner/directional/east, +/obj/structure/table, +/obj/item/reagent_containers/spray/cleaner{ + pixel_x = -14 + }, +/obj/item/storage/medkit/regular{ + pixel_y = 5 + }, +/obj/item/storage/medkit/regular{ + pixel_y = 10 + }, +/obj/effect/turf_decal/tile/blue/anticorner/contrasted{ + dir = 4 + }, +/obj/structure/cable, +/obj/structure/disposalpipe/trunk/multiz{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/station/security/medical) +"niI" = ( +/obj/effect/turf_decal/stripes/red/line{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/light_switch/directional/east, +/turf/open/floor/iron/dark, +/area/station/medical/morgue) +"nje" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/iron/white/textured_large, +/area/station/science/genetics) +"njr" = ( +/obj/structure/closet/crate/freezer, +/obj/item/food/breadslice/plain, +/obj/item/food/breadslice/plain, +/obj/item/food/breadslice/plain, +/obj/item/food/grown/potato, +/obj/item/food/grown/potato, +/obj/item/food/grown/onion, +/obj/item/food/grown/onion, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/tile/red/opposingcorners, +/obj/machinery/newscaster/directional/south, +/obj/item/radio/intercom/prison/directional/east, +/obj/item/reagent_containers/condiment/rice, +/obj/item/reagent_containers/condiment/flour, +/obj/item/storage/fancy/egg_box, +/turf/open/floor/iron/white, +/area/station/security/prison/mess) +"njM" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/wood/parquet, +/area/station/medical/psychology) +"njX" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/visible, +/obj/effect/turf_decal/delivery, +/obj/machinery/light/directional/east, +/turf/open/floor/iron/dark, +/area/station/engineering/supermatter/room) +"njZ" = ( +/obj/structure/railing{ + dir = 1 + }, +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/west, +/obj/structure/table/wood/fancy/blue, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/turf/open/floor/iron/dark/side{ + dir = 9 + }, +/area/station/command/meeting_room) +"nkb" = ( +/obj/machinery/power/apc/auto_name/directional/west, +/obj/structure/cable, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/command/corporate_dock) +"nkc" = ( +/obj/structure/railing/corner{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/carpet, +/area/station/service/theater) +"nkd" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) +"nke" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/spawner/random/engineering/atmospherics_portable, +/turf/open/floor/iron, +/area/station/maintenance/department/science) +"nkf" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/iron/white/smooth_large, +/area/station/medical/exam_room) +"nkA" = ( +/obj/machinery/atmospherics/pipe/smart/simple/green/visible{ + dir = 1 + }, +/obj/effect/turf_decal/tile/yellow{ + dir = 4 + }, +/turf/open/floor/iron/dark/corner{ + dir = 1 + }, +/area/station/engineering/atmos) +"nli" = ( +/obj/machinery/atmospherics/pipe/smart/simple/dark/visible, +/obj/machinery/airalarm/directional/east, +/obj/effect/mapping_helpers/airalarm/mixingchamber_access, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/mapping_helpers/airalarm/link{ + chamber_id = "ordnanceburn" + }, +/obj/effect/mapping_helpers/airalarm/tlv_no_checks, +/turf/open/floor/iron/dark, +/area/station/science/ordnance) +"nlu" = ( +/obj/effect/turf_decal/trimline/blue/filled/line, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) +"nlx" = ( +/obj/structure/cable, +/obj/effect/turf_decal/sand/plating, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plating, +/area/station/maintenance/department/medical) +"nlI" = ( +/obj/effect/landmark/start/depsec/engineering, +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 8 + }, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/engineering) +"nlQ" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/dark_blue/opposingcorners, +/turf/open/floor/iron, +/area/station/command/bridge) +"nlZ" = ( +/obj/machinery/light/small/directional/north, +/turf/open/misc/asteroid, +/area/station/maintenance/central/greater) +"nmc" = ( +/obj/structure/cable, +/obj/effect/turf_decal/siding/purple, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/white/smooth_large, +/area/station/science/research) +"nmj" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/white, +/area/station/science/research) +"nmr" = ( +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/engineering/atmos/upper) +"nmD" = ( +/obj/structure/cable/multilayer/multiz, +/turf/open/floor/plating, +/area/station/maintenance/port/greater) +"nmG" = ( +/obj/effect/turf_decal/trimline/blue/filled/end, +/obj/structure/cable, +/obj/machinery/duct, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron/white, +/area/station/medical/treatment_center) +"nmN" = ( +/obj/structure/lattice/catwalk, +/obj/structure/marker_beacon/purple, +/turf/open/space/basic, +/area/space/nearstation) +"nmS" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/spawner/random/structure/grille, +/turf/open/floor/plating, +/area/station/maintenance/central/lesser) +"nmX" = ( +/obj/effect/turf_decal/tile/red/anticorner/contrasted, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/station/security) +"nne" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/siding/purple{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/science/robotics/mechbay) +"nnj" = ( +/obj/effect/turf_decal/trimline/blue/filled/line, +/obj/machinery/firealarm/directional/south, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) +"nnt" = ( +/obj/machinery/computer/security/qm, +/obj/effect/turf_decal/siding/wood{ + dir = 9 + }, +/obj/machinery/computer/security/telescreen/vault/directional/north, +/obj/machinery/button/door/directional/west{ + id = "qmprivacy"; + name = "Privacy Shutters Control" + }, +/obj/machinery/keycard_auth/directional/west{ + pixel_y = 12 + }, +/turf/open/floor/wood, +/area/station/command/heads_quarters/qm) +"nnv" = ( +/obj/structure/table/reinforced/rglass, +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/item/clothing/glasses/hud/health{ + pixel_y = 8 + }, +/obj/item/clothing/glasses/hud/health{ + pixel_y = 4 + }, +/obj/item/clothing/glasses/hud/health, +/turf/open/floor/iron/white, +/area/station/medical/treatment_center) +"nny" = ( +/obj/effect/turf_decal/tile/red/half/contrasted, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/turf/open/floor/iron, +/area/station/security) +"nnF" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 8 + }, +/obj/effect/landmark/start/paramedic, +/turf/open/floor/iron/white, +/area/station/medical/paramedic) +"nnL" = ( +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/cargo/storage) +"nnM" = ( +/obj/structure/railing{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/vending/cola/red, +/obj/effect/mapping_helpers/broken_machine, +/turf/open/floor/iron, +/area/station/maintenance/department/medical/central) +"nnT" = ( +/obj/machinery/door/airlock/external{ + name = "Escape Pod Four"; + space_dir = 2 + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper, +/obj/effect/landmark/navigate_destination/dockescpod4, +/turf/open/floor/plating, +/area/station/maintenance/department/engine) +"noc" = ( +/obj/structure/cable/multilayer/multiz, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/ai_monitored/turret_protected/aisat/teleporter) +"noh" = ( +/obj/structure/railing{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/iron, +/area/station/maintenance/department/medical/central) +"noi" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/cargo/storage) +"nor" = ( +/obj/machinery/door/airlock/command{ + name = "Head of Security's Office" + }, +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/access/all/security/hos, +/obj/structure/cable, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/turf/open/floor/carpet/black, +/area/station/command/heads_quarters/hos) +"noy" = ( +/obj/structure/bed, +/obj/item/bedsheet, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light/small/directional/east, +/turf/open/floor/iron, +/area/station/security/brig) +"noF" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/station/command/gateway) +"noO" = ( +/obj/item/target, +/obj/item/target, +/obj/item/target/alien, +/obj/item/target/alien, +/obj/item/target/clown, +/obj/item/target/clown, +/obj/item/target/syndicate, +/obj/item/target/syndicate, +/obj/structure/closet/crate/secure{ + desc = "A secure crate containing various materials for building a customised test-site."; + name = "Firing Range Gear Crate"; + req_access = list("science") + }, +/obj/effect/turf_decal/tile/purple/opposingcorners, +/obj/machinery/light_switch/directional/north, +/turf/open/floor/iron/white, +/area/station/science/auxlab/firing_range) +"npg" = ( +/obj/structure/table/wood, +/obj/item/toy/plush/carpplushie{ + greyscale_colors = "#ff5050#000000"; + name = "\improper Nanotrasen wildlife department space carp plushie" + }, +/obj/effect/turf_decal/siding/wood{ + dir = 10 + }, +/obj/structure/extinguisher_cabinet/directional/south, +/turf/open/floor/wood/tile, +/area/station/command/corporate_showroom) +"npn" = ( +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/security/armory) +"npw" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/iron/white/smooth_large, +/area/station/medical/treatment_center) +"npH" = ( +/obj/machinery/door/airlock/maintenance_hatch, +/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/turf/open/floor/plating, +/area/station/maintenance/port/lesser) +"npL" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/spawner/random/vending/colavend, +/obj/structure/sign/poster/official/no_erp/directional/north, +/turf/open/floor/iron, +/area/station/commons/fitness/recreation) +"npM" = ( +/obj/structure/railing/corner/end, +/obj/structure/cable, +/obj/machinery/door/airlock/hatch{ + name = "MiniSat Access" + }, +/obj/effect/mapping_helpers/airlock/access/all/command/minisat, +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/aisat/foyer) +"nqg" = ( +/obj/effect/landmark/event_spawn, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/security/medical) +"nql" = ( +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, +/obj/structure/chair{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/security/interrogation) +"nqu" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/light/small/dim/directional/north, +/obj/item/restraints/handcuffs/cable/zipties/used, +/turf/open/floor/iron/grimy, +/area/station/maintenance/port/greater) +"nqD" = ( +/obj/structure/flora/bush/sunny/style_random, +/turf/open/floor/grass, +/area/station/medical/virology) +"nqI" = ( +/obj/structure/table/reinforced/rglass, +/obj/item/inspector{ + pixel_x = -5; + pixel_y = 12 + }, +/obj/item/inspector{ + pixel_x = 5 + }, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/security/office) +"nqK" = ( +/obj/machinery/atmospherics/components/trinary/filter/atmos/plasma{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/engineering/atmos) +"nqR" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ + dir = 9 + }, +/obj/effect/turf_decal/tile/yellow{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark/corner, +/area/station/engineering/atmos) +"nrp" = ( +/obj/machinery/door/airlock/public/glass{ + name = "Fore Primary Hallway" + }, +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/fore) +"nrL" = ( +/obj/structure/cable, +/obj/structure/window/reinforced/spawner/directional/west, +/turf/open/floor/engine, +/area/station/science/xenobiology) +"nrW" = ( +/obj/structure/flora/bush/sparsegrass/style_random, +/obj/machinery/camera/autoname/directional/south{ + network = list("ss13","medbay") + }, +/turf/open/floor/grass, +/area/station/medical/virology) +"nsi" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/item/radio/intercom/directional/east, +/turf/open/floor/iron/dark, +/area/station/medical/chemistry/minisat) +"nso" = ( +/obj/effect/landmark/event_spawn, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/cargo/storage) +"nsu" = ( +/obj/machinery/atmospherics/pipe/multiz/supply/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/multiz/scrubbers/visible/layer2{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"nsI" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/white, +/area/station/medical/medbay/lobby) +"nsY" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 4 + }, +/obj/machinery/camera/autoname/directional/east, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/station/hallway/secondary/entry) +"ntQ" = ( +/obj/structure/sign/warning/docking, +/turf/closed/wall, +/area/station/hallway/secondary/entry) +"ntS" = ( +/obj/structure/cable, +/obj/machinery/door/firedoor, +/turf/open/floor/iron/freezer, +/area/station/commons/toilet/restrooms) +"nun" = ( +/obj/structure/cable, +/obj/structure/window/reinforced/spawner/directional/south, +/obj/structure/window/reinforced/spawner/directional/west, +/turf/open/floor/glass/reinforced, +/area/station/security/prison) +"nup" = ( +/obj/item/radio/intercom/directional/east, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/chapel, +/area/station/service/chapel) +"nuu" = ( +/obj/machinery/bouldertech/refinery, +/obj/machinery/conveyor{ + dir = 4; + id = "brm" + }, +/obj/effect/turf_decal/sand/plating, +/turf/open/floor/plating, +/area/station/cargo/miningoffice) +"nuC" = ( +/obj/effect/turf_decal/tile/brown/anticorner/contrasted, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/turf/open/floor/iron, +/area/station/cargo/sorting) +"nuM" = ( +/obj/machinery/door/airlock/public/glass{ + name = "Courtroom" + }, +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/effect/turf_decal/siding/dark, +/turf/open/floor/iron/dark, +/area/station/security/courtroom) +"nuR" = ( +/obj/machinery/light/dim/directional/south, +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/turf/open/floor/iron/textured, +/area/station/hallway/primary/central) +"nva" = ( +/obj/effect/turf_decal/stripes{ + dir = 10 + }, +/obj/machinery/button/door/directional/south{ + name = "Secure Storage Control"; + id = "Secure Storage" + }, +/obj/machinery/light/directional/west, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"nvg" = ( +/obj/machinery/power/apc/auto_name/directional/east, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/turf/open/floor/iron/dark/textured, +/area/station/science/robotics/lab) +"nvp" = ( +/obj/structure/table/optable, +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/machinery/light_switch/directional/north, +/obj/machinery/button/door/directional/west{ + id = "main_surgery"; + name = "Privacy Shutters Control" + }, +/turf/open/floor/iron/white, +/area/station/medical/surgery/theatre) +"nvu" = ( +/obj/effect/spawner/random/structure/grille, +/turf/open/floor/plating, +/area/station/maintenance/aft/upper) +"nvw" = ( +/obj/structure/cable/multilayer/multiz, +/obj/effect/turf_decal/stripes/box, +/obj/item/assembly/mousetrap/armed, +/turf/open/floor/plating, +/area/station/engineering/lobby) +"nvD" = ( +/obj/structure/window/spawner/directional/east, +/turf/open/floor/grass, +/area/station/service/hydroponics/garden) +"nvK" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/hallway/secondary/command) +"nvQ" = ( +/obj/effect/turf_decal/tile/purple/half/contrasted{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/science/lobby) +"nvR" = ( +/obj/structure/cable, +/obj/structure/window/reinforced/spawner/directional/west, +/turf/open/floor/glass/reinforced, +/area/station/security/prison) +"nvT" = ( +/obj/item/surgery_tray/full/deployed, +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/machinery/power/apc/auto_name/directional/west, +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/white/textured, +/area/station/medical/surgery/theatre) +"nwc" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/camera/autoname/directional/south, +/turf/open/floor/iron, +/area/station/security/detectives_office) +"nwp" = ( +/obj/effect/turf_decal/tile/blue/anticorner/contrasted{ + dir = 8 + }, +/obj/structure/bed/medical/emergency, +/obj/machinery/firealarm/directional/west, +/obj/item/radio/intercom/directional/south, +/turf/open/floor/iron/white, +/area/station/medical/medbay/lobby) +"nwr" = ( +/turf/closed/wall/r_wall, +/area/station/commons/fitness/recreation) +"nwv" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/navbeacon{ + codes_txt = "patrol;next_patrol=P7-Central-Primary"; + location = "P6-Central-Primary" + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"nwF" = ( +/obj/structure/reagent_dispensers/fueltank, +/obj/machinery/airalarm/directional/south, +/obj/effect/turf_decal/tile/yellow/anticorner/contrasted, +/obj/machinery/light_switch/directional/east, +/turf/open/floor/iron, +/area/station/commons/storage/tools) +"nxc" = ( +/obj/effect/turf_decal/stripes{ + dir = 8 + }, +/obj/machinery/light/directional/west, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"nxd" = ( +/obj/structure/rack, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/sand/plating, +/obj/item/storage/box/bandages, +/turf/open/floor/plating, +/area/station/cargo/miningoffice) +"nxG" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"nxY" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/glass, +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/white, +/area/station/medical/chemistry/minisat) +"nyq" = ( +/obj/item/flashlight/flare/candle/infinite{ + pixel_x = 16; + pixel_y = -16 + }, +/turf/open/misc/asteroid, +/area/station/asteroid) +"nyz" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/purple/visible, +/turf/open/floor/iron, +/area/station/engineering/atmos/pumproom) +"nyA" = ( +/obj/structure/chair/sofa/bench/left{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"nyE" = ( +/obj/machinery/airalarm/directional/north, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/yellow{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) +"nyQ" = ( +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/turf/open/floor/plating, +/area/station/maintenance/port/lesser) +"nyW" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 8 + }, +/obj/effect/turf_decal/siding/wood/corner, +/turf/open/floor/wood, +/area/station/command/heads_quarters/qm) +"nzb" = ( +/obj/machinery/holopad, +/obj/effect/turf_decal/box/white{ + color = "#52B4E9" + }, +/turf/open/floor/iron/white/smooth_large, +/area/station/command/heads_quarters/cmo) +"nzf" = ( +/obj/machinery/recharge_station, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/command/storage/satellite) +"nzi" = ( +/obj/effect/turf_decal/trimline/yellow/filled/corner{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/junction{ + dir = 2 + }, +/turf/open/floor/iron, +/area/station/engineering/main) +"nzk" = ( +/turf/closed/wall, +/area/station/science/ordnance) +"nzn" = ( +/obj/structure/lattice/catwalk, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/openspace, +/area/station/science/lobby) +"nzw" = ( +/obj/machinery/computer/slot_machine, +/obj/effect/turf_decal/sand/plating, +/turf/open/floor/plating, +/area/station/maintenance/central/greater) +"nzC" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/medical/chemistry/minisat) +"nzR" = ( +/obj/structure/sign/warning/radiation/rad_area/directional/west, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/turf/open/floor/iron, +/area/station/engineering/main) +"nzT" = ( +/obj/effect/landmark/start/ai, +/obj/machinery/power/apc/auto_name/directional/south, +/obj/item/radio/intercom/directional/west{ + freerange = 1; + listening = 0; + name = "Common Channel"; + pixel_y = -8 + }, +/obj/item/radio/intercom/directional/west{ + listening = 0; + frequency = 1447; + freerange = 1; + pixel_y = 6 + }, +/obj/machinery/button/door/directional/south{ + id = "AI Core shutters"; + name = "AI Core Shutters Control"; + pixel_x = -24; + req_access = list("ai_upload") + }, +/obj/machinery/camera/directional/north{ + c_tag = "AI Chamber - Core"; + network = list("aicore") + }, +/obj/structure/cable, +/obj/effect/mapping_helpers/apc/cell_5k, +/turf/open/floor/circuit/green, +/area/station/ai_monitored/turret_protected/ai) +"nAa" = ( +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/obj/effect/turf_decal/tile/yellow{ + dir = 8 + }, +/obj/structure/sign/poster/contraband/singletank_bomb/directional/south, +/turf/open/floor/iron/dark/corner, +/area/station/engineering/atmos/upper) +"nAb" = ( +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/station/maintenance/department/cargo) +"nAe" = ( +/obj/machinery/power/port_gen/pacman/pre_loaded, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/department/bridge) +"nAm" = ( +/obj/structure/lattice, +/turf/open/openspace, +/area/station/service/bar) +"nAr" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/landmark/blobstart, +/turf/open/floor/iron, +/area/station/commons/vacant_room/commissary) +"nAs" = ( +/obj/effect/turf_decal/trimline/blue/filled/corner{ + dir = 4 + }, +/obj/effect/turf_decal/siding/blue{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/white, +/area/station/command/heads_quarters/cmo) +"nAt" = ( +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/effect/decal/cleanable/blood/drip, +/turf/open/floor/engine/xenobio, +/area/station/science/xenobiology) +"nAu" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/grimy, +/area/station/service/chapel/office) +"nAx" = ( +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/hallway/secondary/command) +"nAG" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/commons/locker) +"nAR" = ( +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/multiz/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/multiz/supply/hidden/layer4, +/obj/structure/cable/multilayer/multiz, +/turf/open/floor/iron, +/area/station/security) +"nBa" = ( +/obj/structure/chair, +/obj/item/restraints/handcuffs, +/obj/effect/turf_decal/tile/red/anticorner/contrasted{ + dir = 1 + }, +/obj/machinery/firealarm/directional/west, +/turf/open/floor/iron/textured, +/area/station/security/processing) +"nBA" = ( +/obj/machinery/light/small/directional/south, +/obj/effect/turf_decal/tile/neutral, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/sign/directions/evac/directional/south, +/obj/structure/sign/directions/medical/directional/south{ + pixel_y = -24; + dir = 8 + }, +/obj/structure/sign/directions/science/directional/south{ + pixel_y = -40; + dir = 4 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"nBV" = ( +/obj/effect/turf_decal/tile/blue/half/contrasted{ + dir = 1 + }, +/obj/structure/chair/sofa/bench/tram/solo, +/obj/machinery/light/dim/directional/north, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/station/medical/medbay/lobby) +"nCb" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/wood, +/area/station/service/library) +"nCc" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/iron, +/area/station/cargo/miningoffice) +"nCe" = ( +/obj/structure/cable, +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/engineering/lobby) +"nCf" = ( +/obj/structure/railing/corner/end{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/aisat/foyer) +"nCo" = ( +/obj/machinery/atmospherics/pipe/smart/simple/dark/visible, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/science/ordnance) +"nCq" = ( +/obj/effect/turf_decal/tile/neutral, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/newscaster/directional/south, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"nCs" = ( +/obj/machinery/shower/directional/north, +/turf/open/floor/iron/freezer, +/area/station/commons/toilet/restrooms) +"nCt" = ( +/obj/effect/spawner/random/engineering/tracking_beacon, +/turf/open/floor/iron, +/area/station/cargo/storage) +"nCu" = ( +/obj/machinery/power/port_gen/pacman/pre_loaded, +/turf/open/floor/plating, +/area/station/maintenance/aft/upper) +"nCH" = ( +/obj/effect/turf_decal/tile/blue/anticorner/contrasted, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/security/courtroom) +"nCS" = ( +/obj/structure/cable, +/obj/structure/lattice/catwalk, +/obj/structure/window/reinforced/spawner/directional/east, +/obj/structure/window/reinforced/spawner/directional/north, +/turf/open/space/openspace, +/area/space/nearstation) +"nDg" = ( +/obj/machinery/power/apc/auto_name/directional/south, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/freezer, +/area/station/commons/toilet/restrooms) +"nDC" = ( +/obj/machinery/holopad, +/turf/open/floor/circuit/green/telecomms/mainframe, +/area/station/tcommsat/server) +"nDE" = ( +/obj/structure/cable, +/obj/effect/turf_decal/tile/red/opposingcorners, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/security) +"nDF" = ( +/obj/machinery/fax{ + fax_name = "Psychology Office"; + name = "Psychology Office Fax Machine" + }, +/obj/structure/table/wood, +/obj/machinery/light/directional/south, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/wood/parquet, +/area/station/medical/psychology) +"nDG" = ( +/obj/structure/cable, +/obj/structure/chair/sofa/bench, +/obj/effect/landmark/start/prisoner, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/security/prison) +"nDN" = ( +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/simple/purple/visible/layer1, +/turf/open/floor/iron/textured, +/area/station/engineering/atmos) +"nDR" = ( +/obj/structure/railing/corner, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark/corner, +/area/station/command/meeting_room) +"nDS" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 1 + }, +/obj/machinery/camera/autoname/directional/north{ + network = list("ss13","medbay") + }, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) +"nDU" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/commons/storage/primary) +"nEb" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/turf/open/floor/wood/large, +/area/station/cargo/boutique) +"nEk" = ( +/turf/open/floor/iron/large, +/area/station/service/hydroponics/garden) +"nEw" = ( +/obj/structure/chair{ + name = "Judge"; + dir = 8 + }, +/turf/open/floor/wood/tile, +/area/station/security/courtroom) +"nEx" = ( +/obj/machinery/hydroponics/soil, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/grass, +/area/station/security/prison/garden) +"nED" = ( +/obj/effect/turf_decal/tile/dark_blue/half/contrasted{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/hallway/secondary/command) +"nEY" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/camera/autoname/directional/north{ + network = list("ss13","medbay") + }, +/turf/open/floor/iron/dark, +/area/station/medical/chemistry/minisat) +"nFl" = ( +/obj/structure/chair/sofa/bench/right{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"nFI" = ( +/obj/effect/landmark/start/chief_medical_officer, +/obj/effect/turf_decal/trimline/blue/filled/corner{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/station/command/heads_quarters/cmo) +"nFS" = ( +/obj/structure/closet/wardrobe/white, +/obj/item/restraints/handcuffs/cable/zipties, +/obj/item/reagent_containers/blood/random, +/obj/effect/mapping_helpers/burnt_floor, +/obj/structure/broken_flooring/pile{ + dir = 8 + }, +/obj/effect/spawner/random/bedsheet, +/turf/open/floor/plating, +/area/station/maintenance/department/medical) +"nFT" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 1; + id = "detective_shutters"; + name = "Detective's Office Shutters" + }, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/security/detectives_office) +"nGd" = ( +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 4 + }, +/obj/machinery/firealarm/directional/east, +/turf/open/floor/iron, +/area/station/security/office) +"nGp" = ( +/obj/machinery/camera/directional/west{ + c_tag = "Atmospherics Tank - Carbon Dioxide" + }, +/turf/open/floor/engine/co2, +/area/station/engineering/atmos) +"nGv" = ( +/obj/machinery/door/airlock/maintenance_hatch, +/obj/effect/mapping_helpers/airlock/access/all/supply/general, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/misc/asteroid, +/area/station/cargo/warehouse/upper) +"nGO" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/security/prison) +"nHj" = ( +/obj/structure/cable, +/turf/open/floor/catwalk_floor/iron, +/area/station/hallway/secondary/exit/departure_lounge) +"nHm" = ( +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/spawner/random/structure/steam_vent, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"nHr" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/engineering/main) +"nHs" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/turf/open/floor/wood/tile, +/area/station/service/bar) +"nHD" = ( +/obj/effect/turf_decal/bot{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 8 + }, +/obj/item/radio/intercom/directional/west, +/obj/structure/reagent_dispensers/fueltank, +/turf/open/floor/iron, +/area/station/engineering/storage) +"nHK" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/hallway/secondary/exit/departure_lounge) +"nHV" = ( +/obj/structure/chair/sofa/bench/right{ + dir = 4 + }, +/obj/machinery/camera/autoname/directional/south, +/turf/open/floor/iron, +/area/station/hallway/primary/fore) +"nIa" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/duct, +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden, +/turf/open/floor/catwalk_floor/flat_white, +/area/station/medical/treatment_center) +"nIb" = ( +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/department/bridge) +"nIu" = ( +/obj/machinery/door/airlock/research, +/obj/effect/turf_decal/siding/purple{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/mapping_helpers/airlock/access/all/science/genetics, +/obj/machinery/door/firedoor, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/white/textured, +/area/station/science/genetics) +"nID" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/command/bridge) +"nIG" = ( +/turf/closed/wall, +/area/station/medical/medbay/lobby) +"nIJ" = ( +/obj/structure/rack, +/obj/effect/spawner/random/engineering/tool, +/obj/effect/spawner/random/engineering/tool, +/obj/effect/spawner/random/maintenance, +/turf/open/misc/asteroid, +/area/station/maintenance/department/cargo) +"nIQ" = ( +/obj/item/radio/intercom/directional/south, +/turf/open/floor/catwalk_floor/iron_white, +/area/station/science/ordnance/testlab) +"nIS" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/engine, +/area/station/command/corporate_dock) +"nJs" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/wood/parquet, +/area/station/cargo/boutique) +"nJF" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/window/left/directional/east{ + name = "Robotics Desk"; + req_access = list("robotics") + }, +/obj/structure/desk_bell, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 8; + id = "roboticsprivacy"; + name = "Robotics Shutters" + }, +/obj/machinery/door/firedoor, +/turf/open/floor/iron/dark/textured, +/area/station/science/robotics/lab) +"nJK" = ( +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/plating, +/area/station/maintenance/department/engine) +"nJL" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/trash/mess, +/obj/effect/spawner/random/clothing/pirate_or_bandana, +/turf/open/floor/plating, +/area/station/maintenance/aft/upper) +"nKa" = ( +/obj/machinery/disposal/bin, +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/effect/turf_decal/box/white{ + color = "#52B4E9" + }, +/obj/structure/disposalpipe/trunk, +/obj/machinery/requests_console/auto_name/directional/north, +/obj/effect/mapping_helpers/requests_console/assistance, +/turf/open/floor/iron/white, +/area/station/medical/storage) +"nKc" = ( +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 1 + }, +/obj/machinery/button/door/directional/north{ + id = "aux_base_shutters"; + name = "Shutter Control" + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light/floor, +/turf/open/floor/iron, +/area/station/construction/mining/aux_base) +"nKe" = ( +/obj/machinery/door/airlock/medical{ + name = "Medical Breakroom and Paramedic Dispatch" + }, +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/access/any/medical/general, +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron/white, +/area/station/medical/paramedic) +"nKi" = ( +/obj/effect/landmark/start/cargo_technician, +/turf/open/floor/iron, +/area/station/cargo/storage) +"nKk" = ( +/obj/structure/rack, +/obj/effect/spawner/random/clothing/kittyears_or_rabbitears, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/wood/parquet, +/area/station/cargo/boutique) +"nKn" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/blood/old{ + icon_state = "splatter1" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/cargo/warehouse/upper) +"nKp" = ( +/turf/open/floor/glass/reinforced/plasma, +/area/station/engineering/supermatter/room) +"nKt" = ( +/obj/effect/spawner/random/decoration/showcase, +/obj/structure/sign/picture_frame/showroom/two{ + pixel_x = 8; + pixel_y = 32 + }, +/obj/structure/sign/picture_frame/showroom/one{ + pixel_x = -8; + pixel_y = 32 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/turf/open/floor/wood/tile, +/area/station/command/corporate_showroom) +"nKu" = ( +/obj/machinery/door/airlock/hatch{ + name = "MiniSat Access" + }, +/obj/effect/mapping_helpers/airlock/access/all/command/minisat, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/aisat/teleporter) +"nKx" = ( +/obj/machinery/light/dim/directional/south, +/turf/open/floor/glass, +/area/station/command/meeting_room) +"nKA" = ( +/obj/effect/turf_decal/tile/brown/anticorner/contrasted{ + dir = 8 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/turf/open/floor/iron, +/area/station/cargo/storage) +"nKO" = ( +/obj/structure/railing/corner, +/turf/open/floor/plating, +/area/station/engineering/main) +"nLb" = ( +/obj/structure/closet/wardrobe/grey, +/obj/effect/landmark/start/hangover/closet, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/delivery, +/turf/open/floor/iron/dark, +/area/station/commons/locker) +"nLc" = ( +/obj/structure/window/reinforced/spawner/directional/south, +/obj/structure/table, +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/bureaucracy/stamp, +/obj/machinery/light_switch/directional/east, +/turf/open/floor/iron, +/area/station/commons/vacant_room/commissary) +"nLd" = ( +/obj/effect/turf_decal/stripes{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/engineering/atmospherics_engine) +"nLi" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 + }, +/obj/structure/extinguisher_cabinet/directional/north, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/engineering/gravity_generator) +"nLz" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/security/processing) +"nLD" = ( +/obj/machinery/computer/atmos_control/plasma_tank, +/obj/effect/turf_decal/tile/yellow{ + dir = 4 + }, +/turf/open/floor/iron/dark/corner{ + dir = 1 + }, +/area/station/engineering/atmos) +"nLF" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/security/lockers) +"nLT" = ( +/obj/machinery/light/small/directional/north, +/obj/structure/flora/rock/pile/style_random, +/turf/open/misc/asteroid, +/area/station/maintenance/department/science) +"nLW" = ( +/obj/structure/chair/office{ + name = "grimy chair" + }, +/obj/machinery/camera/autoname/directional/north, +/turf/open/floor/carpet/purple, +/area/station/service/library) +"nMf" = ( +/obj/structure/lattice/catwalk, +/obj/structure/railing{ + dir = 8 + }, +/obj/machinery/light/directional/south, +/turf/open/openspace, +/area/station/science/xenobiology) +"nMj" = ( +/obj/effect/turf_decal/sand/plating, +/obj/effect/mapping_helpers/broken_floor, +/mob/living/simple_animal/hostile/retaliate/goose/vomit, +/turf/open/floor/plating, +/area/station/maintenance/central/greater) +"nMk" = ( +/obj/structure/cable, +/turf/open/floor/plating/airless, +/area/station/solars/port/fore) +"nMo" = ( +/obj/structure/transit_tube/curved/flipped{ + dir = 8 + }, +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/space/basic, +/area/space/nearstation) +"nMI" = ( +/turf/closed/wall/r_wall, +/area/station/maintenance/port/lesser) +"nMK" = ( +/obj/effect/decal/cleanable/blood/old{ + icon_state = "gib3-old" + }, +/turf/open/floor/engine/xenobio, +/area/station/science/xenobiology) +"nMP" = ( +/obj/structure/sign/poster/random/directional/south, +/obj/machinery/light/small/directional/south, +/obj/effect/turf_decal/siding/purple{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/science/robotics/mechbay) +"nMR" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"nMT" = ( +/obj/effect/spawner/structure/window, +/turf/open/floor/plating, +/area/station/service/hydroponics/garden) +"nMV" = ( +/obj/structure/closet/secure_closet/engineering_electrical, +/obj/machinery/light/directional/south, +/obj/effect/turf_decal/trimline/yellow/filled/line, +/turf/open/floor/iron, +/area/station/engineering/main) +"nMW" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line, +/obj/effect/landmark/event_spawn, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/engineering/gravity_generator) +"nMX" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/machinery/camera/autoname/directional/south, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"nNl" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/turf/open/floor/iron/white, +/area/station/science/ordnance/storage) +"nNo" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 + }, +/obj/structure/closet/secure_closet/chemical, +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/white, +/area/station/medical/chemistry) +"nNv" = ( +/obj/effect/spawner/random/structure/crate, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"nNA" = ( +/obj/effect/turf_decal/bot, +/obj/effect/landmark/event_spawn, +/turf/open/floor/engine, +/area/station/engineering/atmospherics_engine) +"nNK" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/plating, +/area/station/maintenance/port/greater) +"nNN" = ( +/obj/effect/turf_decal/stripes, +/obj/structure/cable, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"nNP" = ( +/obj/machinery/power/port_gen/pacman/pre_loaded, +/turf/open/floor/plating, +/area/station/maintenance/central/lesser) +"nOx" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 4 + }, +/obj/effect/spawner/random/vending/colavend, +/obj/machinery/airalarm/directional/east, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron/white, +/area/station/medical/paramedic) +"nOy" = ( +/obj/structure/cable, +/obj/structure/closet/l3closet/scientist, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/camera/autoname/directional/south{ + network = list("ss13","rd","xeno") + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/white/textured_large, +/area/station/science/xenobiology) +"nOZ" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/iron/dark/textured, +/area/station/science/robotics/lab) +"nPf" = ( +/obj/effect/turf_decal/stripes{ + dir = 6 + }, +/turf/open/floor/engine, +/area/station/engineering/atmospherics_engine) +"nPm" = ( +/obj/structure/cable, +/obj/effect/turf_decal/tile/dark_blue, +/turf/open/floor/iron, +/area/station/command/bridge) +"nPM" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 4 + }, +/obj/machinery/light_switch/directional/east, +/turf/open/floor/iron, +/area/station/engineering/lobby) +"nPQ" = ( +/obj/effect/turf_decal/siding/dark_blue{ + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/iron/dark, +/area/station/command/corporate_showroom) +"nPV" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"nPW" = ( +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"nQl" = ( +/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible{ + dir = 4 + }, +/obj/machinery/camera/autoname/directional/north{ + network = list("ss13","rd") + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/science/ordnance) +"nQs" = ( +/obj/machinery/light/small/directional/north, +/turf/open/misc/asteroid, +/area/station/maintenance/disposal/incinerator) +"nQw" = ( +/obj/effect/spawner/random/structure/grille, +/turf/open/space/openspace, +/area/space/nearstation) +"nQy" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/light/warm/directional/east, +/turf/open/floor/iron/dark, +/area/station/medical/chemistry/minisat) +"nQQ" = ( +/obj/effect/spawner/random/decoration/statue{ + spawn_loot_chance = 50 + }, +/obj/structure/window/spawner/directional/west, +/obj/structure/sign/painting/library_secure{ + pixel_x = 32 + }, +/turf/open/floor/carpet/royalblue, +/area/station/service/library) +"nQT" = ( +/obj/item/flashlight/flare{ + icon_state = "flare-on"; + start_on = 1 + }, +/turf/open/misc/asteroid/airless, +/area/space/nearstation) +"nRj" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/turf/open/floor/iron/white/textured_corner, +/area/station/science/xenobiology) +"nRq" = ( +/obj/effect/turf_decal/caution/stand_clear/red, +/obj/machinery/light/small/dim/directional/north, +/turf/open/floor/iron/dark/telecomms, +/area/station/tcommsat/server) +"nRw" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/atmospherics/pipe/smart/manifold4w/dark/hidden, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/science/xenobiology) +"nRA" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/landmark/event_spawn, +/obj/structure/bed/maint, +/obj/effect/spawner/random/bedsheet/any, +/turf/open/floor/iron, +/area/station/service/janitor) +"nSn" = ( +/obj/structure/cable, +/obj/machinery/firealarm/directional/south, +/obj/effect/turf_decal/siding/wood, +/obj/effect/mapping_helpers/broken_floor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/wood/tile, +/area/station/service/bar) +"nSC" = ( +/turf/closed/wall, +/area/station/security/prison/shower) +"nSF" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/plating, +/area/station/medical/chemistry/minisat) +"nSH" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/commons/storage/primary) +"nSP" = ( +/obj/effect/turf_decal/trimline/blue/filled/corner{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) +"nTm" = ( +/obj/structure/chair/office{ + dir = 1 + }, +/obj/effect/landmark/start/chemist, +/turf/open/floor/iron/white/smooth_corner{ + dir = 8 + }, +/area/station/medical/pharmacy) +"nTo" = ( +/obj/structure/rack, +/obj/effect/spawner/random/entertainment/plushie, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/wood/parquet, +/area/station/cargo/boutique) +"nTq" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/closet/crate/engineering, +/obj/item/pinpointer/material_sniffer, +/obj/effect/spawner/random/decoration/material, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"nTA" = ( +/obj/effect/turf_decal/siding/white{ + dir = 1 + }, +/obj/structure/closet/crate/freezer/blood, +/obj/machinery/camera/autoname/directional/east{ + network = list("ss13","medbay") + }, +/obj/item/radio/intercom/directional/south, +/turf/open/floor/iron, +/area/station/medical/coldroom) +"nTT" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"nTZ" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/science/ordnance) +"nUi" = ( +/obj/structure/table/reinforced/rglass, +/obj/item/clipboard, +/obj/item/toy/figure/cmo, +/obj/item/clothing/neck/stethoscope, +/obj/effect/turf_decal/trimline/dark_blue/filled/line, +/turf/open/floor/holofloor/dark, +/area/station/command/heads_quarters/cmo) +"nUy" = ( +/obj/effect/decal/cleanable/dirt, +/obj/item/emergency_bed, +/turf/open/floor/iron/white, +/area/station/maintenance/aft/upper) +"nUJ" = ( +/obj/effect/spawner/structure/window/reinforced/plasma, +/turf/open/floor/engine/vacuum, +/area/station/science/ordnance/burnchamber) +"nUS" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) +"nVa" = ( +/obj/structure/closet/secure_closet/brig/genpop, +/obj/machinery/firealarm/directional/south, +/obj/machinery/camera/autoname/directional/east, +/turf/open/floor/iron/dark/textured, +/area/station/security/execution/transfer) +"nVj" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/science/xenobiology) +"nVp" = ( +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 8 + }, +/obj/structure/cable, +/obj/effect/landmark/start/depsec/supply, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/security/checkpoint/supply) +"nVz" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 10 + }, +/obj/machinery/airalarm/directional/west, +/turf/open/floor/iron, +/area/station/engineering/gravity_generator) +"nVT" = ( +/turf/closed/wall, +/area/station/service/cafeteria) +"nWd" = ( +/obj/machinery/airalarm/directional/east, +/obj/structure/table, +/obj/item/reagent_containers/spray/cleaner{ + pixel_x = 10; + pixel_y = -1 + }, +/obj/item/storage/box/gloves{ + pixel_x = -4; + pixel_y = 8 + }, +/turf/open/floor/glass/reinforced, +/area/station/science/xenobiology) +"nWu" = ( +/obj/machinery/camera/autoname/directional/north, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/yellow{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) +"nWx" = ( +/turf/closed/wall, +/area/station/service/chapel) +"nWC" = ( +/obj/structure/railing{ + dir = 9 + }, +/obj/effect/spawner/random/trash/soap, +/obj/structure/table/wood, +/turf/open/floor/carpet, +/area/station/service/theater) +"nWG" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored/nitrous_output, +/turf/open/floor/engine/n2o, +/area/station/engineering/atmos) +"nXe" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/table, +/obj/effect/spawner/random/maintenance, +/obj/machinery/airalarm/directional/west, +/turf/open/floor/iron, +/area/station/cargo/warehouse/upper) +"nXw" = ( +/obj/structure/cable, +/obj/effect/turf_decal/tile/green/fourcorners, +/turf/open/floor/iron/white, +/area/station/medical/virology) +"nXF" = ( +/obj/item/flashlight/flare/candle{ + start_on = 1; + icon_state = "candle1_lit"; + pixel_y = 12 + }, +/obj/structure/broken_flooring/side/directional/west, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/blood/old, +/turf/open/floor/plating, +/area/station/maintenance/department/science) +"nXL" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/white, +/area/station/science/explab) +"nXO" = ( +/obj/structure/table/wood, +/obj/item/storage/crayons, +/turf/open/floor/carpet/purple, +/area/station/service/library) +"nXY" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/light/warm/directional/east, +/turf/open/floor/wood/tile, +/area/station/service/chapel) +"nYj" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/dark, +/area/station/medical/chemistry/minisat) +"nYy" = ( +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light/directional/west, +/turf/open/floor/iron, +/area/station/construction/mining/aux_base) +"nYK" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/green/visible, +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable/layer1, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"nYT" = ( +/obj/machinery/door/airlock/external{ + name = "Escape Pod Three"; + space_dir = 8 + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"nZb" = ( +/obj/structure/closet/l3closet/virology, +/obj/effect/turf_decal/tile/green/half/contrasted{ + dir = 1 + }, +/obj/machinery/requests_console/auto_name/directional/north, +/obj/effect/mapping_helpers/requests_console/supplies, +/turf/open/floor/iron/white, +/area/station/medical/virology) +"nZo" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/ai_monitored/command/storage/eva) +"nZt" = ( +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 8 + }, +/obj/machinery/light/directional/west, +/obj/machinery/conveyor{ + dir = 1; + id = "QMLoad" + }, +/turf/open/floor/iron, +/area/station/cargo/storage) +"nZv" = ( +/obj/item/radio/intercom/command/directional/west, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/command/corporate_dock) +"nZw" = ( +/obj/effect/turf_decal/siding/thinplating_new{ + dir = 5 + }, +/turf/open/floor/glass/reinforced, +/area/station/engineering/atmos/upper) +"nZB" = ( +/obj/machinery/light/dim/directional/west, +/obj/effect/turf_decal/tile/dark_blue/half/contrasted{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/command/bridge) +"nZH" = ( +/obj/effect/spawner/structure/window/hollow/directional{ + dir = 1 + }, +/turf/open/floor/plating, +/area/station/engineering/atmos/storage/gas) +"nZI" = ( +/obj/structure/cable, +/obj/effect/turf_decal/tile/yellow{ + dir = 1 + }, +/turf/open/floor/iron/dark/corner{ + dir = 8 + }, +/area/station/engineering/atmos/storage/gas) +"nZY" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/structure/reagent_dispensers/watertank, +/turf/open/floor/plating, +/area/station/maintenance/central/lesser) +"oac" = ( +/obj/machinery/mecha_part_fabricator{ + dir = 1 + }, +/obj/effect/turf_decal/delivery, +/obj/machinery/digital_clock/directional/south, +/turf/open/floor/iron/dark/textured, +/area/station/science/robotics/lab) +"oas" = ( +/obj/structure/table, +/obj/item/phone{ + pixel_x = -3; + pixel_y = 3 + }, +/obj/item/food/popcorn{ + pixel_x = 7 + }, +/turf/open/floor/iron, +/area/station/engineering/atmos/upper) +"oaF" = ( +/obj/effect/spawner/structure/window/hollow/reinforced/middle{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/command/emergency_closet) +"oaG" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/purple/visible, +/obj/machinery/meter, +/turf/closed/wall/r_wall, +/area/station/engineering/supermatter/room) +"oaP" = ( +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"oaY" = ( +/obj/effect/landmark/start/medical_doctor, +/obj/effect/turf_decal/trimline/blue/filled/line, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/medical/treatment_center) +"obc" = ( +/obj/machinery/door/airlock/security/glass{ + name = "Security Entry"; + id_tag = "secentrylock" + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "brig-entrance" + }, +/obj/effect/turf_decal/tile/red/fourcorners, +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/access/all/security/entrance, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/security/brig/entrance) +"obx" = ( +/obj/structure/railing, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/port/greater) +"obA" = ( +/turf/closed/wall/r_wall, +/area/station/maintenance/department/science) +"obD" = ( +/obj/effect/turf_decal/stripes/asteroid/line, +/turf/open/misc/asteroid, +/area/station/asteroid) +"obL" = ( +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, +/obj/effect/mapping_helpers/airlock/abandoned, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/department/engine) +"obU" = ( +/obj/machinery/vending/wardrobe/robo_wardrobe, +/obj/effect/turf_decal/delivery, +/obj/machinery/camera/autoname/directional/east{ + network = list("ss13","rd") + }, +/turf/open/floor/iron/dark/textured, +/area/station/science/robotics/lab) +"obV" = ( +/obj/structure/stairs/west, +/obj/structure/railing, +/turf/open/floor/iron, +/area/station/security/prison) +"occ" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/spawner/random/structure/girder, +/turf/open/floor/plating, +/area/station/maintenance/department/science) +"ocl" = ( +/obj/structure/rack, +/obj/effect/spawner/random/armory/e_gun, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 8 + }, +/obj/machinery/camera/motion/directional/north{ + c_tag = "Security Armory - Lethals" + }, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/security/armory) +"ocm" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/machinery/firealarm/directional/west, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"ocq" = ( +/obj/effect/turf_decal/siding/purple, +/obj/structure/chair/sofa/bench/right, +/turf/open/floor/iron/white/textured_large, +/area/station/science/research) +"ocB" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/station/engineering/lobby) +"ocF" = ( +/obj/machinery/atmospherics/pipe/smart/simple/green/visible{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/engineering/atmos) +"ocJ" = ( +/obj/effect/landmark/blobstart, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/obj/effect/landmark/generic_maintenance_landmark, +/turf/open/floor/iron/grimy, +/area/station/maintenance/central/greater) +"ocV" = ( +/obj/structure/cable, +/obj/structure/reagent_dispensers/water_cooler, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/white, +/area/station/science/research) +"odg" = ( +/obj/machinery/telecomms/server/presets/medical, +/turf/open/floor/circuit/green/telecomms/mainframe, +/area/station/tcommsat/server) +"odi" = ( +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/cargo/storage) +"odm" = ( +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 8 + }, +/obj/structure/table/reinforced, +/obj/item/paper_bin, +/turf/open/floor/iron, +/area/station/cargo/storage) +"odp" = ( +/obj/machinery/door/airlock/security/glass{ + name = "Security Entry"; + id_tag = "secentrylock2" + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "brig-entrance" + }, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 1 + }, +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/access/all/security/entrance, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/station/security/brig/entrance) +"odG" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/firealarm/directional/south, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/cargo/bitrunning/den) +"odK" = ( +/obj/effect/spawner/random/structure/closet_maintenance, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/port/greater) +"odL" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/junction/flip, +/turf/open/floor/iron, +/area/station/hallway/secondary/command) +"odU" = ( +/obj/effect/landmark/start/mime, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light/small/directional/east, +/turf/open/floor/plating, +/area/station/service/theater) +"oed" = ( +/obj/effect/spawner/structure/window/hollow/middle{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/security/courtroom) +"oel" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/iron/white/smooth_large, +/area/station/science/robotics/lab) +"oey" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/cargo/drone_bay) +"oez" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/structure/sign/directions/science/directional/north{ + dir = 4 + }, +/obj/structure/sign/directions/engineering/directional/north{ + pixel_y = 40; + dir = 4 + }, +/obj/structure/sign/directions/command/directional/north{ + pixel_y = 24; + dir = 4 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"oeL" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/chapel, +/area/station/service/chapel) +"oeN" = ( +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 1 + }, +/obj/machinery/airalarm/directional/north, +/obj/structure/table, +/obj/machinery/recharger, +/turf/open/floor/iron, +/area/station/security) +"ofc" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/maintenance/central/greater) +"oft" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/grass, +/area/station/science/genetics) +"ofx" = ( +/obj/structure/chair/stool/directional/north, +/obj/effect/landmark/start/atmospheric_technician, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) +"ofE" = ( +/obj/machinery/firealarm/directional/east, +/turf/open/floor/glass, +/area/station/command/meeting_room) +"ofL" = ( +/obj/effect/spawner/random/structure/crate, +/obj/effect/turf_decal/stripes/line, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron, +/area/station/maintenance/department/science) +"ogb" = ( +/obj/effect/landmark/atmospheric_sanity/ignore_area, +/turf/closed/wall/r_wall, +/area/station/ai_monitored/turret_protected/aisat/uppersouth) +"ogH" = ( +/obj/machinery/computer/atmos_alert, +/obj/effect/turf_decal/tile/yellow/anticorner/contrasted{ + dir = 8 + }, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/command/bridge) +"ogL" = ( +/obj/structure/table/reinforced, +/obj/item/restraints/handcuffs, +/turf/open/floor/engine, +/area/station/medical/chemistry) +"ogP" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/dark, +/area/station/medical/chemistry/minisat) +"ogU" = ( +/obj/structure/railing/corner, +/turf/open/floor/iron/dark/textured_large, +/area/station/science/xenobiology) +"ohh" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/landmark/start/hangover, +/turf/open/floor/wood, +/area/station/commons/lounge) +"ohk" = ( +/turf/open/misc/asteroid, +/area/station/maintenance/disposal/incinerator) +"ohu" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/structure/table, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/spawner/random/maintenance/three, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) +"ohw" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/junction/flip, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"ohz" = ( +/obj/structure/railing{ + dir = 8 + }, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"ohF" = ( +/obj/effect/turf_decal/stripes{ + dir = 1 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/engineering/atmospherics_engine) +"ohZ" = ( +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt/dust, +/obj/item/stack/sheet/cardboard{ + amount = 14 + }, +/obj/item/stack/package_wrap, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/plating, +/area/station/security/prison/work) +"oix" = ( +/turf/open/floor/iron/white, +/area/station/science/ordnance/testlab) +"ojc" = ( +/obj/machinery/atmospherics/components/unary/outlet_injector/monitored/plasma_input, +/turf/open/floor/engine/plasma, +/area/station/engineering/atmos) +"ojv" = ( +/obj/structure/window/reinforced/spawner/directional/east, +/obj/effect/turf_decal/tile/neutral/diagonal_centre, +/obj/structure/cable, +/obj/effect/landmark/start/chaplain, +/turf/open/floor/iron/dark, +/area/station/service/chapel/funeral) +"ojz" = ( +/turf/closed/wall, +/area/station/science/ordnance/testlab) +"ojB" = ( +/obj/effect/turf_decal/tile/neutral, +/obj/structure/chair/sofa/bench{ + dir = 1 + }, +/obj/machinery/camera/autoname/directional/south, +/obj/effect/landmark/start/assistant, +/turf/open/floor/iron, +/area/station/commons/fitness/recreation) +"ojC" = ( +/obj/machinery/smartfridge/extract, +/turf/open/floor/iron/white/textured_large, +/area/station/science/xenobiology) +"ojG" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron/textured, +/area/station/cargo/drone_bay) +"ojR" = ( +/obj/machinery/power/apc/auto_name/directional/west, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/simple/green/hidden, +/turf/open/floor/iron/white, +/area/station/science/ordnance/testlab) +"oka" = ( +/obj/effect/turf_decal/siding/purple{ + dir = 1 + }, +/obj/machinery/door/window/left/directional/north{ + req_access = list("medical"); + name = "Waiting Room Desk" + }, +/obj/machinery/camera/autoname/directional/west{ + network = list("ss13","rd") + }, +/turf/open/floor/engine, +/area/station/science/auxlab/firing_range) +"okd" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/turf/open/floor/wood, +/area/station/service/lawoffice) +"okg" = ( +/obj/machinery/holopad, +/obj/effect/landmark/event_spawn, +/obj/effect/turf_decal/box, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/command/storage/satellite) +"okm" = ( +/turf/open/floor/engine/hull/reinforced, +/area/station/asteroid) +"okC" = ( +/obj/machinery/computer/prisoner/gulag_teleporter_computer{ + dir = 8 + }, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 4 + }, +/turf/open/floor/iron/textured, +/area/station/security/processing) +"okF" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/security/armory) +"okL" = ( +/obj/structure/railing{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/hallway/secondary/exit/departure_lounge) +"okV" = ( +/obj/machinery/shower/directional/south, +/obj/effect/landmark/start/prisoner, +/obj/item/radio/intercom/prison/directional/east, +/turf/open/floor/iron/freezer, +/area/station/security/prison/shower) +"oli" = ( +/obj/structure/table, +/obj/item/hand_labeler{ + pixel_y = -2 + }, +/obj/item/hand_labeler, +/obj/item/hand_labeler_refill{ + pixel_x = 9; + pixel_y = 10 + }, +/obj/item/hand_labeler_refill{ + pixel_x = -8; + pixel_y = 8 + }, +/turf/open/floor/iron, +/area/station/cargo/sorting) +"olq" = ( +/obj/structure/table/wood, +/turf/open/floor/carpet, +/area/station/service/theater) +"olr" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"olC" = ( +/obj/machinery/computer/slot_machine, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light/small/directional/west, +/turf/open/floor/iron/grimy, +/area/station/maintenance/central/lesser) +"olE" = ( +/turf/open/floor/iron/white/smooth_corner, +/area/station/science/xenobiology) +"olM" = ( +/obj/effect/turf_decal/tile/neutral/full, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/iron/dark/smooth_large, +/area/station/hallway/primary/central) +"olN" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/meter/layer4, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/department/bridge) +"olR" = ( +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/wood, +/area/station/service/library) +"olW" = ( +/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/engineering/atmos) +"oma" = ( +/obj/structure/chair/wood{ + dir = 1 + }, +/obj/structure/railing, +/turf/open/floor/carpet, +/area/station/service/theater) +"omv" = ( +/obj/structure/rack, +/obj/effect/spawner/random/clothing/backpack, +/turf/open/floor/wood/parquet, +/area/station/cargo/boutique) +"omw" = ( +/obj/structure/bed, +/obj/effect/spawner/random/bedsheet, +/obj/machinery/airalarm/directional/south, +/obj/item/pillow/random, +/turf/open/floor/carpet, +/area/station/commons/dorms) +"omy" = ( +/obj/effect/mapping_helpers/burnt_floor, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/circuit, +/area/station/hallway/primary/central) +"omB" = ( +/obj/effect/turf_decal/stripes{ + dir = 1 + }, +/obj/machinery/quantum_server, +/turf/open/floor/circuit, +/area/station/cargo/bitrunning/den) +"omE" = ( +/obj/structure/table/glass, +/obj/effect/spawner/random/food_or_drink/snack, +/obj/effect/spawner/random/food_or_drink/refreshing_beverage, +/turf/open/floor/iron, +/area/station/engineering/lobby) +"omL" = ( +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/station/science/research) +"onb" = ( +/obj/machinery/iv_drip, +/obj/effect/mapping_helpers/burnt_floor, +/turf/open/floor/plating, +/area/station/maintenance/department/medical) +"ong" = ( +/obj/structure/window/reinforced/spawner/directional/west, +/obj/effect/turf_decal/box, +/obj/structure/cable, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/structure/transit_tube/station/dispenser/reverse, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/aisat/foyer) +"onm" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark/textured_half{ + dir = 1 + }, +/area/station/science/xenobiology) +"onn" = ( +/obj/machinery/blackbox_recorder, +/turf/open/floor/circuit/green/telecomms/mainframe, +/area/station/tcommsat/server) +"onB" = ( +/obj/structure/railing{ + dir = 8 + }, +/obj/effect/spawner/random/structure/musician/piano/random_piano, +/turf/open/floor/carpet, +/area/station/service/theater) +"onG" = ( +/obj/structure/railing{ + dir = 4 + }, +/turf/open/floor/iron/stairs/right, +/area/station/command/corporate_showroom) +"onK" = ( +/obj/structure/rack, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/plating, +/area/station/maintenance/port/lesser) +"onL" = ( +/obj/structure/rack, +/obj/effect/spawner/random/clothing/costume, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"onW" = ( +/obj/machinery/light/warm/directional/north, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"oow" = ( +/obj/effect/decal/cleanable/blood/old, +/turf/open/floor/plating, +/area/station/engineering/lobby) +"ooy" = ( +/obj/machinery/rnd/production/circuit_imprinter/department/science, +/obj/machinery/newscaster/directional/south, +/turf/open/floor/iron/white, +/area/station/science/lab) +"ooE" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/machinery/light_switch/directional/north, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/commons/locker) +"opq" = ( +/obj/effect/turf_decal/tile/yellow{ + dir = 8 + }, +/obj/effect/turf_decal/bot{ + dir = 1 + }, +/turf/open/floor/iron/dark/corner, +/area/station/engineering/atmos/upper) +"opG" = ( +/obj/effect/turf_decal/tile/yellow{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark/corner, +/area/station/engineering/atmos/pumproom) +"opH" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/junction/yjunction, +/obj/machinery/navbeacon{ + codes_txt = "patrol;next_patrol=P1-Central-Primary"; + location = "P15-Central-Primary" + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"opN" = ( +/obj/effect/turf_decal/arrows, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/station/hallway/secondary/exit/departure_lounge) +"opT" = ( +/obj/structure/reflector/box/anchored{ + dir = 8 + }, +/turf/open/floor/plating, +/area/station/engineering/supermatter/room) +"opZ" = ( +/obj/machinery/power/solar{ + id = "foreport"; + name = "Fore-Port Solar Array" + }, +/obj/structure/cable, +/turf/open/floor/iron/solarpanel/airless, +/area/station/solars/port/fore) +"oqb" = ( +/obj/structure/table/reinforced, +/obj/effect/turf_decal/tile/dark_red/opposingcorners, +/obj/machinery/door/firedoor, +/turf/open/floor/iron/dark, +/area/station/service/bar) +"oqj" = ( +/obj/structure/rack, +/obj/item/reagent_containers/cup/bucket, +/obj/item/mop, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"oql" = ( +/obj/structure/table, +/obj/item/reagent_containers/condiment/saltshaker{ + pixel_x = -2; + pixel_y = 2 + }, +/obj/item/reagent_containers/condiment/peppermill{ + desc = "Often used to flavor food or make people sneeze. Fashionably moved to the left side of the table."; + pixel_x = -8; + pixel_y = 2 + }, +/obj/item/reagent_containers/condiment/enzyme{ + pixel_x = 9; + pixel_y = 3 + }, +/obj/item/book/manual/chef_recipes, +/obj/effect/turf_decal/tile/red/opposingcorners, +/turf/open/floor/iron/white, +/area/station/security/prison/mess) +"oqp" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/shower/directional/east, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 8; + icon_state = "siding_thinplating_new_end" + }, +/obj/effect/turf_decal{ + icon = 'icons/obj/mining_zones/survival_pod.dmi'; + icon_state = "fan_tiny" + }, +/turf/open/floor/iron/checker, +/area/station/science/research) +"oqs" = ( +/obj/machinery/hydroponics/constructable{ + dir = 4 + }, +/obj/effect/turf_decal/bot, +/turf/open/floor/iron, +/area/station/service/hydroponics) +"oqt" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/commons/locker) +"oqz" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/commons/storage/primary) +"oqN" = ( +/obj/structure/lattice, +/obj/effect/landmark/start/hangover, +/turf/open/openspace, +/area/station/hallway/secondary/exit/departure_lounge) +"oqP" = ( +/obj/machinery/door/airlock{ + id_tag = "Cabin2"; + name = "Cabin 4" + }, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 8 + }, +/obj/effect/turf_decal/siding/wood/end{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/wood/tile, +/area/station/commons/dorms) +"oqV" = ( +/obj/structure/table, +/obj/item/stack/sheet/iron/fifty, +/obj/item/stack/ducts/fifty, +/obj/item/stack/ducts/fifty, +/obj/item/stack/ducts/fifty, +/obj/item/stack/ducts/fifty, +/obj/item/stack/ducts/fifty, +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/button/door/directional/south{ + id = "chemsat"; + name = "Shutter Control"; + req_access = list("plumbing") + }, +/turf/open/floor/iron/dark/textured_half{ + dir = 1 + }, +/area/station/medical/chemistry/minisat) +"oru" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment, +/turf/open/floor/wood/parquet, +/area/station/service/theater) +"ory" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light/warm/directional/west, +/turf/open/floor/iron/dark, +/area/station/medical/chemistry/minisat) +"orD" = ( +/obj/machinery/door/airlock/engineering{ + name = "Telecomms Storage" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/mapping_helpers/airlock/access/all/engineering/tcoms, +/obj/structure/cable, +/turf/open/floor/iron/dark/side, +/area/station/engineering/storage/tcomms) +"orE" = ( +/turf/closed/wall/rust, +/area/station/maintenance/central/lesser) +"orI" = ( +/obj/effect/turf_decal/tile/brown/anticorner/contrasted, +/obj/machinery/camera/autoname/directional/east, +/turf/open/floor/iron, +/area/station/cargo/storage) +"orJ" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/poddoor/shutters{ + dir = 8; + id = "commissaryshutter"; + name = "Vacant Commissary Shutter" + }, +/turf/open/floor/plating, +/area/station/commons/vacant_room/commissary) +"orT" = ( +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/obj/effect/turf_decal/sand/plating, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"osd" = ( +/obj/structure/cable, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/medical/treatment_center) +"osp" = ( +/obj/effect/turf_decal/tile/brown/anticorner/contrasted{ + dir = 8 + }, +/obj/structure/rack, +/obj/effect/spawner/random/clothing/backpack, +/turf/open/floor/iron, +/area/station/cargo/boutique) +"osr" = ( +/obj/machinery/power/apc/auto_name/directional/south, +/obj/structure/cable, +/obj/effect/turf_decal/trimline/purple/filled/arrow_ccw{ + dir = 10 + }, +/obj/effect/turf_decal/trimline/purple/filled/corner{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/camera/autoname/directional/west{ + network = list("ss13","rd","xeno") + }, +/turf/open/floor/iron/white/smooth_large, +/area/station/science/xenobiology/hallway) +"oss" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/engineering/lobby) +"ost" = ( +/obj/effect/turf_decal/tile/yellow/opposingcorners{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/simple/green/visible{ + dir = 6 + }, +/obj/machinery/airalarm/directional/west, +/turf/open/floor/iron/dark/corner{ + dir = 1 + }, +/area/station/engineering/atmos/upper) +"osK" = ( +/obj/machinery/light/cold/dim/directional/west, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/ai_monitored/turret_protected/aisat_interior) +"osT" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden, +/obj/effect/turf_decal/tile/blue/fourcorners, +/turf/open/floor/catwalk_floor/flat_white, +/area/station/medical/treatment_center) +"osX" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/department/engine) +"otm" = ( +/obj/machinery/light/directional/north, +/turf/open/floor/engine, +/area/station/science/explab) +"otA" = ( +/obj/structure/cable/multilayer/multiz, +/obj/item/assembly/mousetrap/armed, +/obj/machinery/light/directional/north, +/turf/open/floor/plating, +/area/station/hallway/secondary/service) +"otH" = ( +/obj/structure/closet/crate/cardboard, +/obj/item/relic, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/department/bridge) +"otY" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/spawner/random/structure/closet_empty/crate, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/iron, +/area/station/cargo/warehouse/upper) +"oue" = ( +/obj/machinery/door/airlock/medical{ + id_tag = "r2"; + name = "Room B" + }, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 4 + }, +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/effect/mapping_helpers/airlock/access/any/medical/general, +/turf/open/floor/iron/white, +/area/station/medical/patients_rooms/room_b) +"ouk" = ( +/obj/structure/closet/emcloset/anchored, +/turf/open/floor/plating, +/area/station/maintenance/department/science) +"ouo" = ( +/obj/machinery/door/airlock/public/glass{ + name = "Auxiliary Tool Storage" + }, +/obj/machinery/door/firedoor, +/turf/open/floor/iron, +/area/station/commons/storage/tools) +"ouA" = ( +/obj/effect/landmark/blobstart, +/turf/open/misc/asteroid, +/area/station/maintenance/department/science) +"ouF" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/carpet/red, +/area/station/command/heads_quarters/hos) +"ouG" = ( +/obj/effect/turf_decal/tile/yellow{ + dir = 1 + }, +/obj/structure/railing/corner{ + dir = 4 + }, +/obj/structure/cable/multilayer/connected, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/turf/open/floor/iron/checker{ + dir = 1 + }, +/area/station/engineering/atmos/upper) +"ouH" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/power/apc/auto_name/directional/west, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/service/cafeteria) +"ouQ" = ( +/obj/structure/closet/crate/engineering, +/obj/item/stack/sheet/mineral/plasma/five, +/obj/item/stack/sheet/mineral/plasma/five, +/obj/structure/sign/poster/official/random/directional/west, +/obj/item/storage/toolbox/emergency, +/obj/machinery/light_switch/directional/south, +/turf/open/floor/iron/dark/side{ + dir = 10 + }, +/area/station/command/emergency_closet) +"ovj" = ( +/obj/effect/turf_decal/trimline/yellow/arrow_cw{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/barricade/wooden, +/turf/open/floor/iron, +/area/station/maintenance/department/medical/central) +"ovl" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/obj/machinery/duct, +/obj/effect/turf_decal/trimline/blue/filled/corner, +/turf/open/floor/iron/white, +/area/station/medical/treatment_center) +"ovr" = ( +/obj/machinery/vending/coffee, +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/machinery/button/curtain{ + id = "court"; + pixel_x = -24; + pixel_y = -8 + }, +/turf/open/floor/iron/dark, +/area/station/security/courtroom) +"ovB" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/heat_exchanging/manifold{ + dir = 1 + }, +/turf/open/space/basic, +/area/space/nearstation) +"ovD" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/engineering/atmos/upper) +"ovW" = ( +/obj/structure/railing{ + dir = 10 + }, +/obj/effect/spawner/random/entertainment/musical_instrument, +/obj/structure/table/wood, +/turf/open/floor/carpet, +/area/station/service/theater) +"owj" = ( +/obj/structure/weightmachine, +/obj/structure/window/spawner/directional/west, +/turf/open/floor/iron/white/textured_large, +/area/station/commons/fitness/recreation) +"owl" = ( +/turf/open/openspace, +/area/station/command/corporate_showroom) +"owp" = ( +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/turf/open/floor/iron/white/smooth_edge{ + dir = 4 + }, +/area/station/science/research) +"owr" = ( +/obj/item/reagent_containers/cup/bottle/silicon{ + pixel_y = 6; + pixel_x = 6 + }, +/obj/structure/rack, +/obj/item/reagent_containers/cup/bottle/sugar{ + pixel_x = 6 + }, +/obj/item/reagent_containers/cup/bottle/silver{ + pixel_y = 6; + pixel_x = -6 + }, +/obj/item/reagent_containers/cup/bottle/sacid{ + pixel_y = 6 + }, +/obj/item/reagent_containers/cup/bottle/water, +/obj/item/reagent_containers/cup/bottle/sulfur{ + pixel_x = -6 + }, +/obj/machinery/light/very_dim/directional/north, +/turf/open/floor/iron/dark/textured_edge, +/area/station/medical/pharmacy) +"owB" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/airalarm/directional/east, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/service/chapel) +"owL" = ( +/obj/effect/turf_decal/stripes{ + dir = 4 + }, +/obj/structure/sign/warning/radiation/rad_area/directional/east, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/engineering/atmospherics_engine) +"oxB" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/port/greater) +"oxG" = ( +/obj/item/storage/box/syringes, +/obj/item/storage/box/beakers{ + pixel_x = 2; + pixel_y = 2 + }, +/obj/structure/table/glass, +/obj/effect/turf_decal/tile/blue, +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/obj/effect/turf_decal/tile/green{ + dir = 8 + }, +/obj/machinery/light_switch/directional/south, +/turf/open/floor/iron, +/area/station/service/hydroponics) +"oxN" = ( +/obj/machinery/door/airlock/multi_tile/public{ + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/access/any/command/general, +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 8 + }, +/obj/structure/cable, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/any/admin/general, +/turf/open/floor/iron/dark/smooth_large, +/area/station/command/meeting_room) +"oxU" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/wood/tile, +/area/station/service/bar) +"oyq" = ( +/obj/machinery/light/cold/directional/west, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/structure/table/reinforced, +/obj/item/electronics/apc, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/aisat/foyer) +"oyC" = ( +/obj/structure/table, +/obj/effect/turf_decal/tile/brown/opposingcorners{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/item/radio/intercom/directional/north, +/obj/effect/spawner/random/entertainment/money_medium, +/turf/open/floor/iron, +/area/station/commons/vacant_room/commissary) +"oyO" = ( +/obj/structure/flora/bush/flowers_yw/style_random, +/obj/structure/window/spawner/directional/south, +/mob/living/basic/butterfly, +/turf/open/misc/grass, +/area/station/ai_monitored/turret_protected/aisat/foyer) +"oyP" = ( +/obj/structure/lattice/catwalk, +/obj/structure/railing{ + dir = 1 + }, +/turf/open/openspace, +/area/station/security/prison/shower) +"oyS" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/maintenance/solars/port/fore) +"oyV" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"oze" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/station/security/office) +"ozr" = ( +/obj/effect/turf_decal/box/corners{ + dir = 4 + }, +/turf/open/floor/plating/elevatorshaft, +/area/station/ai_monitored/turret_protected/aisat_interior) +"ozy" = ( +/obj/machinery/camera/autoname/directional/east, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/security/prison) +"ozF" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light/directional/south, +/turf/open/floor/wood/parquet, +/area/station/cargo/boutique) +"ozU" = ( +/obj/structure/extinguisher_cabinet/directional/west, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/light/small/directional/north, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/iron/dark, +/area/station/security/lockers) +"oAc" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/engineering/main) +"oAn" = ( +/obj/machinery/door/airlock/engineering{ + name = "Engine Room" + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 8 + }, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/main) +"oAo" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/plating, +/area/station/maintenance/department/bridge) +"oAs" = ( +/obj/structure/lattice/catwalk, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/openspace, +/area/station/science/lobby) +"oAH" = ( +/obj/effect/turf_decal/tile/brown{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/cargo/storage) +"oAJ" = ( +/obj/effect/turf_decal/stripes{ + dir = 1 + }, +/obj/structure/cable, +/obj/machinery/button/door/directional/north{ + id = "atmoshfr"; + name = "Protection Shutter Control" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/engineering/atmospherics_engine) +"oAO" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/visible, +/obj/effect/turf_decal/tile/yellow{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark/corner, +/area/station/engineering/atmos) +"oAV" = ( +/obj/machinery/firealarm/directional/south, +/obj/effect/turf_decal/siding/purple, +/obj/structure/chair/office{ + dir = 4 + }, +/turf/open/floor/iron/white/herringbone, +/area/station/science/breakroom) +"oAX" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/grass, +/area/station/science/genetics) +"oAY" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/turf/open/floor/iron, +/area/station/hallway/secondary/exit/departure_lounge) +"oBe" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/navbeacon{ + codes_txt = "patrol;next_patrol=S1-Security"; + location = "P11.5-Central-Primary" + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"oBg" = ( +/obj/structure/chair, +/turf/open/floor/iron/white/smooth_corner{ + dir = 8 + }, +/area/station/medical/exam_room) +"oBl" = ( +/obj/effect/turf_decal/tile/red/half/contrasted, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/firealarm/directional/south, +/turf/open/floor/iron, +/area/station/security) +"oBt" = ( +/obj/effect/turf_decal/tile/red/half/contrasted, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/security/execution/education) +"oBE" = ( +/obj/effect/turf_decal/tile/neutral, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"oBH" = ( +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/turf/open/floor/iron/dark, +/area/station/security/lockers) +"oBP" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/maintenance/department/science) +"oBU" = ( +/obj/machinery/food_cart, +/turf/open/floor/iron/kitchen_coldroom/freezerfloor, +/area/station/service/kitchen) +"oCb" = ( +/obj/machinery/atmospherics/pipe/smart/simple/green/visible{ + dir = 1 + }, +/obj/structure/lattice, +/turf/open/space/basic, +/area/space/nearstation) +"oCu" = ( +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 4 + }, +/obj/structure/chair{ + dir = 8 + }, +/obj/item/radio/intercom/directional/east, +/turf/open/floor/iron, +/area/station/hallway/secondary/exit/departure_lounge) +"oCx" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/wood/parquet, +/area/station/service/theater) +"oCB" = ( +/obj/structure/cable, +/obj/machinery/duct, +/turf/open/floor/iron, +/area/station/service/hydroponics) +"oCR" = ( +/obj/effect/turf_decal/tile/red/opposingcorners, +/obj/machinery/microwave, +/obj/structure/table, +/obj/machinery/airalarm/directional/north, +/turf/open/floor/iron/white, +/area/station/security/prison/mess) +"oDn" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, +/obj/effect/turf_decal/stripes/corner, +/obj/machinery/meter, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"oDC" = ( +/obj/effect/turf_decal/trimline/blue/filled/corner, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/white, +/area/station/medical/storage) +"oDH" = ( +/obj/machinery/power/solar{ + id = "portaft"; + name = "Aft-Port Solar Array" + }, +/obj/structure/cable, +/turf/open/floor/iron/solarpanel/airless, +/area/station/solars/port/aft) +"oDI" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/structure/chair/sofa/bench, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/exit/departure_lounge) +"oDJ" = ( +/obj/structure/rack, +/obj/item/reagent_containers/cup/bottle/formaldehyde{ + pixel_y = 5 + }, +/obj/item/reagent_containers/cup/bottle/nitrogen{ + pixel_x = -6 + }, +/obj/item/reagent_containers/cup/bottle/oxygen, +/obj/item/reagent_containers/cup/bottle/mercury{ + pixel_x = 6 + }, +/turf/open/floor/iron/dark/textured_edge, +/area/station/medical/pharmacy) +"oDK" = ( +/turf/open/floor/carpet/executive, +/area/station/command/meeting_room) +"oDR" = ( +/obj/machinery/holopad, +/obj/effect/turf_decal/box/white{ + color = "#52B4E9" + }, +/obj/effect/turf_decal/tile/blue/full, +/obj/effect/landmark/start/paramedic, +/turf/open/floor/iron/white/smooth_large, +/area/station/medical/storage) +"oDZ" = ( +/obj/structure/cable, +/obj/machinery/door/airlock/external{ + name = "Solar Maintenance" + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/solars/port/fore) +"oEf" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, +/obj/machinery/meter, +/turf/closed/wall/r_wall, +/area/station/engineering/supermatter) +"oEp" = ( +/obj/effect/spawner/structure/window, +/turf/open/floor/plating, +/area/station/hallway/secondary/entry) +"oEy" = ( +/obj/structure/sink/directional/west, +/obj/structure/mirror/directional/east, +/obj/structure/cable, +/turf/open/floor/iron/freezer, +/area/station/commons/toilet/restrooms) +"oEB" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/security/checkpoint/engineering) +"oEC" = ( +/obj/structure/table, +/obj/machinery/computer/records/medical/laptop{ + dir = 4; + pixel_y = 1 + }, +/obj/machinery/camera/autoname/directional/south{ + network = list("ss13","medbay") + }, +/turf/open/floor/iron/dark, +/area/station/medical/morgue) +"oEN" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/plating, +/area/station/maintenance/port/greater) +"oEZ" = ( +/obj/machinery/atmospherics/pipe/bridge_pipe/yellow/visible, +/obj/machinery/atmospherics/pipe/bridge_pipe/green/visible{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/engineering/atmos) +"oFa" = ( +/mob/living/carbon/human/species/monkey/angry, +/obj/item/knife/kitchen, +/turf/open/floor/plating, +/area/station/medical/medbay/central) +"oFk" = ( +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/construction/mining/aux_base) +"oFn" = ( +/obj/machinery/door/airlock/maintenance_hatch, +/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 8 + }, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"oFp" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners{ + dir = 1 + }, +/obj/effect/turf_decal/siding/purple{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/command/heads_quarters/rd) +"oFu" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"oFy" = ( +/obj/structure/closet/secure_closet/brig{ + id = "Cell 3"; + name = "Cell 3 locker" + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/flasher/directional/east{ + id = "Cell 3"; + pixel_y = 26 + }, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/security/brig) +"oFK" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/structure/cable, +/obj/effect/turf_decal/stripes{ + dir = 5 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/ai_upload_foyer) +"oGk" = ( +/obj/effect/turf_decal/siding/purple, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/white/smooth_large, +/area/station/science/research) +"oGp" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/spawner/random/structure/table, +/obj/effect/spawner/random/maintenance/no_decals, +/turf/open/floor/iron, +/area/station/command/bridge) +"oGw" = ( +/obj/structure/table, +/obj/item/food/energybar, +/turf/open/floor/iron, +/area/station/security/prison) +"oGB" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/structure/table, +/obj/item/book/manual/wiki/security_space_law, +/obj/machinery/camera/autoname/directional/west, +/turf/open/floor/iron/dark, +/area/station/security/courtroom) +"oGD" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/white, +/area/station/hallway/secondary/entry) +"oGO" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"oGQ" = ( +/obj/structure/table, +/obj/structure/microscope, +/obj/item/storage/box/beakers{ + pixel_y = 18; + pixel_x = -14 + }, +/turf/open/floor/iron/dark/small, +/area/station/science/cytology) +"oGX" = ( +/obj/effect/spawner/structure/window, +/turf/open/floor/plating, +/area/station/commons/lounge) +"oHd" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/structure/cable/layer3, +/turf/open/floor/iron/dark/telecomms, +/area/station/tcommsat/server) +"oHf" = ( +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/tile/brown{ + dir = 8 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/cargo/lobby) +"oHi" = ( +/obj/structure/cable, +/turf/open/floor/grass, +/area/station/security/prison/garden) +"oHw" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 10 + }, +/turf/open/floor/iron/white, +/area/station/medical/treatment_center) +"oHA" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/engineering/main) +"oHC" = ( +/obj/machinery/light/small/dim/directional/west, +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/spawner/random/structure/crate, +/obj/effect/turf_decal/trimline/yellow/filled/corner{ + dir = 1 + }, +/turf/open/floor/iron/white, +/area/station/maintenance/department/medical) +"oIh" = ( +/obj/machinery/monkey_recycler, +/obj/effect/turf_decal/bot_red, +/turf/open/floor/iron/white/textured_large, +/area/station/science/xenobiology) +"oIo" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/obj/machinery/duct, +/obj/structure/cable, +/turf/open/floor/iron/white/textured_large, +/area/station/medical/treatment_center) +"oIr" = ( +/obj/effect/turf_decal/tile/red/anticorner/contrasted, +/obj/structure/bed/dogbed/mcgriff, +/mob/living/basic/pet/dog/pug/mcgriff, +/obj/machinery/button/flasher{ + pixel_x = 28; + pixel_y = 6; + id = "control1" + }, +/obj/machinery/button/flasher{ + pixel_y = -23; + pixel_x = -6; + id = "control2" + }, +/turf/open/floor/iron, +/area/station/security/warden) +"oIu" = ( +/obj/structure/table, +/obj/machinery/reagentgrinder{ + pixel_y = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/iron/white/textured_corner{ + dir = 1 + }, +/area/station/science/xenobiology) +"oID" = ( +/obj/structure/lattice, +/obj/effect/spawner/random/structure/grille, +/turf/open/space/openspace, +/area/space/nearstation) +"oIV" = ( +/obj/effect/turf_decal/tile/dark_blue/half/contrasted{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light/cold/dim/directional/west, +/turf/open/floor/iron/dark, +/area/station/command/bridge) +"oJt" = ( +/obj/structure/lattice, +/obj/structure/disposaloutlet{ + dir = 1 + }, +/obj/structure/disposalpipe/trunk, +/turf/open/space/openspace, +/area/space/nearstation) +"oJv" = ( +/obj/structure/lattice/catwalk, +/obj/structure/bed/pod, +/obj/item/clothing/glasses/sunglasses{ + flash_protect = 0; + desc = "A pair of sunglasses to provide eye protection against solar rays. Does not block flashes." + }, +/turf/open/space/basic, +/area/space/nearstation) +"oJD" = ( +/obj/effect/turf_decal/siding/wood/end{ + dir = 4 + }, +/obj/effect/spawner/random/structure/closet_private, +/obj/item/radio/intercom/directional/east, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/wood/tile, +/area/station/commons/dorms) +"oJE" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/iron/white/smooth_corner{ + dir = 4 + }, +/area/station/medical/pharmacy) +"oJG" = ( +/obj/effect/turf_decal/stripes/corner, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/dark, +/area/station/medical/chemistry/minisat) +"oJI" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/obj/structure/reagent_dispensers/plumbed{ + dir = 1 + }, +/obj/machinery/light/directional/south, +/turf/open/floor/iron, +/area/station/service/hydroponics) +"oJJ" = ( +/obj/effect/spawner/random/structure/crate, +/turf/open/floor/plating, +/area/station/maintenance/department/medical) +"oJQ" = ( +/obj/item/food/grown/poppy, +/obj/structure/table/wood, +/obj/item/food/grown/poppy{ + pixel_y = 8; + pixel_x = -8 + }, +/turf/open/floor/iron/chapel{ + dir = 1 + }, +/area/station/service/chapel) +"oJU" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/plating, +/area/station/maintenance/port/greater) +"oJW" = ( +/obj/structure/showcase/cyborg/old{ + dir = 4; + pixel_x = -9; + pixel_y = 2 + }, +/turf/open/floor/glass/reinforced/telecomms, +/area/station/ai_monitored/turret_protected/ai) +"oKr" = ( +/obj/effect/landmark/start/depsec/science, +/obj/effect/turf_decal/tile/red/opposingcorners, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/science) +"oKx" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/hallway/secondary/entry) +"oKy" = ( +/obj/item/kirbyplants/random, +/obj/effect/turf_decal/tile/neutral/half{ + dir = 8 + }, +/turf/open/floor/iron/edge{ + dir = 8 + }, +/area/station/hallway/secondary/exit/departure_lounge) +"oKB" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/engineering/atmos) +"oKF" = ( +/obj/structure/closet/toolcloset, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/structure/cable, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 9 + }, +/obj/item/lightreplacer, +/turf/open/floor/iron, +/area/station/engineering/break_room) +"oKI" = ( +/obj/effect/spawner/random/structure/chair_maintenance{ + dir = 8 + }, +/turf/open/floor/plating, +/area/station/maintenance/central/greater) +"oKM" = ( +/obj/effect/turf_decal/tile/red/half/contrasted, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/security/lockers) +"oLe" = ( +/obj/effect/spawner/random/engineering/tracking_beacon, +/turf/open/floor/plating/airless, +/area/station/science/ordnance/bomb) +"oLh" = ( +/obj/effect/spawner/structure/window, +/turf/open/floor/plating, +/area/station/science/robotics/mechbay) +"oLj" = ( +/obj/machinery/atmospherics/pipe/heat_exchanging/simple/layer2{ + dir = 9 + }, +/turf/open/floor/iron/dark/airless, +/area/station/science/ordnance) +"oLy" = ( +/obj/effect/turf_decal/trimline/blue/filled/line, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/medical/treatment_center) +"oLF" = ( +/obj/structure/bed/double, +/obj/item/pillow/clown, +/obj/item/bedsheet/clown/double, +/obj/structure/sign/poster/contraband/random/directional/south, +/obj/machinery/camera/autoname/directional/south, +/turf/open/floor/carpet/orange, +/area/station/service/theater) +"oLH" = ( +/obj/effect/turf_decal/tile/blue/opposingcorners{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/cafeteria, +/area/station/commons/locker) +"oLL" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/preopen{ + id = "xenobio8"; + name = "Xenobio Pen 8 Blast Door" + }, +/turf/open/floor/plating, +/area/station/science/xenobiology) +"oLU" = ( +/obj/structure/lattice/catwalk, +/obj/structure/fence{ + dir = 4 + }, +/turf/open/openspace, +/area/station/cargo/storage) +"oMf" = ( +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/fore) +"oMi" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line, +/turf/open/floor/iron, +/area/station/engineering/gravity_generator) +"oMk" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/freezer, +/area/station/security/prison/shower) +"oMn" = ( +/turf/open/floor/iron/grimy, +/area/station/maintenance/central/greater) +"oMr" = ( +/obj/machinery/door/airlock/public/glass, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/station/hallway/secondary/command) +"oMB" = ( +/obj/machinery/light_switch/directional/west, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/command/corporate_dock) +"oMJ" = ( +/obj/machinery/door/airlock/research{ + name = "Circuit Lab" + }, +/obj/effect/mapping_helpers/airlock/access/all/science/research, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron/white/smooth_large, +/area/station/science/explab) +"oNo" = ( +/obj/machinery/camera/autoname/directional/west, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/wood, +/area/station/service/library) +"oNC" = ( +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/east, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"oND" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden, +/turf/open/floor/iron/dark/telecomms, +/area/station/science/server) +"oNM" = ( +/obj/machinery/door/window/brigdoor/right/directional/east{ + name = "Primary AI Core Access"; + req_access = list("ai_upload") + }, +/obj/machinery/turretid{ + icon_state = "control_stun"; + name = "AI Chamber turret control"; + pixel_x = 3; + pixel_y = -23 + }, +/obj/machinery/flasher/directional/north{ + id = "AI" + }, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 4; + id = "AI Core shutters"; + name = "AI Core Shutters" + }, +/obj/structure/cable, +/turf/open/floor/circuit/green, +/area/station/ai_monitored/turret_protected/ai) +"oOb" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/structure/closet/athletic_mixed, +/obj/structure/window/spawner/directional/west, +/obj/structure/window/spawner/directional/east, +/obj/machinery/camera/autoname/directional/north, +/obj/effect/landmark/start/hangover/closet, +/turf/open/floor/iron, +/area/station/commons/fitness/recreation) +"oOe" = ( +/turf/open/floor/wood/tile, +/area/station/service/chapel) +"oOr" = ( +/obj/effect/turf_decal/trimline/blue/arrow_ccw{ + dir = 1 + }, +/obj/effect/landmark/start/hangover, +/turf/open/floor/iron/white, +/area/station/medical/medbay/lobby) +"oOC" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/light/floor, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/aisat/foyer) +"oOF" = ( +/obj/item/surgery_tray/deployed, +/turf/open/floor/iron, +/area/station/maintenance/department/medical) +"oOI" = ( +/obj/effect/turf_decal/tile/dark_blue/half/contrasted, +/obj/effect/spawner/random/engineering/flashlight, +/obj/effect/spawner/random/engineering/flashlight, +/obj/effect/spawner/random/engineering/tool, +/obj/structure/closet/crate/engineering, +/obj/effect/decal/cleanable/dirt/dust, +/obj/item/stack/sheet/paperframes/twenty, +/obj/machinery/camera/autoname/directional/south, +/turf/open/floor/iron/dark, +/area/station/command/bridge) +"oOP" = ( +/obj/structure/cable, +/obj/structure/fireaxecabinet/directional/south, +/obj/effect/turf_decal/tile/dark_blue/half/contrasted, +/turf/open/floor/iron, +/area/station/command/bridge) +"oOR" = ( +/obj/structure/hedge, +/obj/effect/turf_decal/siding/green{ + dir = 4 + }, +/turf/open/floor/iron/textured_large, +/area/station/hallway/primary/central) +"oOV" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/catwalk_floor, +/area/station/cargo/storage) +"oOX" = ( +/obj/machinery/door/airlock/grunge{ + name = "Cell 2" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/security/prison/safe) +"oPe" = ( +/turf/closed/wall/r_wall, +/area/station/security/prison/garden) +"oPl" = ( +/obj/structure/cable, +/obj/effect/turf_decal/tile/dark_blue{ + dir = 1 + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/hallway/secondary/command) +"oPs" = ( +/obj/effect/spawner/random/maintenance, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/cobweb/cobweb2, +/turf/open/floor/plating, +/area/station/science/xenobiology) +"oPB" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/dark, +/area/station/maintenance/department/engine) +"oPC" = ( +/turf/open/floor/iron/stairs/right{ + dir = 8; + color = "#795C32" + }, +/area/station/security/courtroom) +"oPL" = ( +/obj/item/clothing/head/chameleon/broken, +/turf/open/misc/asteroid/airless, +/area/station/asteroid) +"oPN" = ( +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/security) +"oPT" = ( +/obj/effect/spawner/random/trash/grille_or_waste, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"oQd" = ( +/obj/effect/turf_decal/tile/neutral/diagonal_centre, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/service/chapel/funeral) +"oQe" = ( +/obj/effect/turf_decal/siding/red{ + dir = 6 + }, +/turf/open/floor/circuit, +/area/station/science/robotics/lab) +"oQk" = ( +/obj/structure/window/spawner/directional/north, +/obj/structure/window/spawner/directional/south, +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/turf/open/floor/iron/large, +/area/station/service/hydroponics/garden) +"oQp" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ + dir = 4 + }, +/obj/effect/turf_decal/tile/yellow{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark/corner, +/area/station/engineering/atmos) +"oQr" = ( +/obj/machinery/atmospherics/components/binary/pump/off{ + dir = 8; + name = "N2 To Pure" + }, +/obj/effect/turf_decal/tile/yellow{ + dir = 4 + }, +/turf/open/floor/iron/dark/corner, +/area/station/engineering/atmos) +"oQs" = ( +/obj/effect/turf_decal/stripes{ + dir = 1 + }, +/obj/machinery/computer/order_console/bitrunning, +/obj/item/storage/pill_bottle/mannitol{ + pixel_x = 7; + pixel_y = 16 + }, +/obj/structure/extinguisher_cabinet/directional/east, +/turf/open/floor/circuit, +/area/station/cargo/bitrunning/den) +"oQy" = ( +/obj/structure/sign/warning/vacuum/external/directional/north, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/fore) +"oQW" = ( +/turf/open/floor/engine, +/area/station/science/explab) +"oRa" = ( +/obj/effect/spawner/random/structure/closet_maintenance, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/hallway/primary/central) +"oRe" = ( +/obj/structure/rack, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/cable, +/obj/machinery/airalarm/directional/east, +/obj/machinery/light/small/dim/directional/south, +/obj/item/circuitboard/machine/telecomms/broadcaster, +/obj/item/circuitboard/machine/telecomms/bus, +/obj/item/circuitboard/machine/telecomms/receiver, +/obj/item/circuitboard/machine/telecomms/processor, +/turf/open/floor/iron/dark, +/area/station/engineering/storage/tcomms) +"oRf" = ( +/obj/machinery/atmospherics/pipe/bridge_pipe/green/visible{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/bridge_pipe/cyan/visible, +/turf/open/floor/iron, +/area/station/engineering/atmos) +"oRp" = ( +/obj/machinery/door/airlock/medical/glass{ + name = "Triage"; + id_tag = "triage" + }, +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/access/any/medical/general, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/white, +/area/station/medical/exam_room) +"oRD" = ( +/obj/structure/table, +/obj/structure/bedsheetbin, +/obj/machinery/power/apc/auto_name/directional/west, +/obj/structure/cable, +/obj/machinery/light/directional/north, +/turf/open/floor/iron/freezer, +/area/station/security/prison/shower) +"oRE" = ( +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + color = "#000000" + }, +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/iron/dark/textured, +/area/station/cargo/bitrunning/den) +"oRK" = ( +/obj/structure/table/wood, +/obj/item/storage/fancy/coffee_condi_display, +/turf/open/floor/carpet, +/area/station/command/corporate_showroom) +"oRM" = ( +/obj/machinery/door/airlock/freezer{ + name = "Showers" + }, +/obj/machinery/duct, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/freezer, +/area/station/commons/toilet/restrooms) +"oRR" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 5 + }, +/obj/effect/turf_decal/siding/blue{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/command/heads_quarters/cmo) +"oSa" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/bluespace_beacon, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/command/teleporter) +"oSd" = ( +/obj/effect/turf_decal/tile/dark_red/opposingcorners, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/mob/living/carbon/human/species/monkey/punpun, +/turf/open/floor/iron/dark, +/area/station/service/bar) +"oSk" = ( +/turf/closed/wall/rock/porous, +/area/station/maintenance/central/greater) +"oSB" = ( +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 1 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/security/brig/entrance) +"oSG" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/iron/dark/small, +/area/station/science/cytology) +"oSJ" = ( +/obj/structure/stairs/east, +/turf/open/floor/iron/white/smooth_large, +/area/station/science/research) +"oSK" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/iron/white/smooth_large, +/area/station/medical/surgery) +"oSP" = ( +/obj/machinery/light/small/directional/west, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/iron/white/smooth_large, +/area/station/medical/surgery) +"oSS" = ( +/obj/structure/table, +/obj/effect/turf_decal/tile/blue/opposingcorners{ + dir = 1 + }, +/turf/open/floor/iron/cafeteria, +/area/station/commons/locker) +"oTa" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/spawner/random/structure/steam_vent, +/turf/open/floor/plating, +/area/station/maintenance/central/greater) +"oTe" = ( +/turf/closed/wall/rust, +/area/station/asteroid) +"oTv" = ( +/obj/effect/spawner/structure/window/reinforced/plasma, +/turf/open/floor/plating, +/area/station/engineering/supermatter/room) +"oTJ" = ( +/obj/structure/chair/sofa/bench/right, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"oTW" = ( +/obj/structure/closet/secure_closet/quartermaster, +/obj/machinery/light/small/directional/east, +/turf/open/floor/carpet/red, +/area/station/command/heads_quarters/qm) +"oTX" = ( +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/tile/purple/half/contrasted, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/white, +/area/station/science/lobby) +"oUb" = ( +/obj/machinery/door/airlock/engineering/glass{ + name = "Supermatter Engine Room" + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"oUd" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"oUg" = ( +/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/bridge_pipe/yellow/visible{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/engineering/atmos) +"oUh" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/stripes/white/line{ + dir = 10 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/security/prison) +"oUm" = ( +/obj/effect/turf_decal/tile/red/anticorner/contrasted{ + dir = 8 + }, +/obj/machinery/airalarm/directional/south, +/turf/open/floor/iron, +/area/station/hallway/primary/fore) +"oUr" = ( +/obj/machinery/power/apc/auto_name/directional/north, +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/closet/crate, +/obj/item/storage/box/prisoner, +/turf/open/floor/iron/dark, +/area/station/security/mechbay) +"oUw" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 5 + }, +/obj/structure/disposalpipe/trunk/multiz, +/turf/open/floor/iron, +/area/station/engineering/gravity_generator) +"oUP" = ( +/obj/effect/turf_decal/tile/brown/anticorner/contrasted, +/obj/effect/spawner/random/clothing/wardrobe_closet_colored, +/turf/open/floor/iron, +/area/station/cargo/boutique) +"oUW" = ( +/obj/structure/chair/sofa/bench/left{ + dir = 8 + }, +/obj/effect/turf_decal/siding/purple{ + dir = 8 + }, +/turf/open/floor/iron/white/textured_large, +/area/station/science/research) +"oVa" = ( +/obj/machinery/modular_computer/preset/cargochat/engineering{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 10 + }, +/obj/effect/turf_decal/trimline/yellow/filled/warning{ + dir = 10 + }, +/obj/machinery/camera/autoname/directional/west, +/turf/open/floor/iron, +/area/station/engineering/lobby) +"oVj" = ( +/obj/effect/turf_decal/siding/purple{ + dir = 1 + }, +/obj/machinery/firealarm/directional/north, +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/turf/open/floor/iron/white/smooth_corner, +/area/station/science/research) +"oVn" = ( +/obj/structure/bed/dogbed/runtime, +/mob/living/basic/pet/cat/runtime, +/obj/item/toy/cattoy, +/obj/machinery/light/small/directional/north, +/turf/open/floor/carpet/blue, +/area/station/command/heads_quarters/cmo) +"oVs" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/purple/visible, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"oVC" = ( +/obj/structure/bodycontainer/morgue, +/obj/machinery/light/directional/west, +/turf/open/floor/iron/dark/textured, +/area/station/medical/morgue) +"oVG" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/circuit/green, +/area/station/ai_monitored/turret_protected/ai_upload) +"oVX" = ( +/obj/structure/table, +/obj/structure/window/spawner/directional/east, +/obj/item/clothing/suit/jacket/straight_jacket, +/obj/item/clothing/glasses/blindfold{ + pixel_y = 3 + }, +/obj/item/clothing/glasses/blindfold{ + pixel_y = 3 + }, +/obj/item/clothing/glasses/eyepatch, +/obj/item/clothing/ears/earmuffs{ + pixel_y = 3 + }, +/obj/item/clothing/ears/earmuffs{ + pixel_y = 3 + }, +/turf/open/floor/iron/white/textured, +/area/station/medical/paramedic) +"oWd" = ( +/obj/structure/cable, +/obj/item/radio/intercom/directional/west, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/turf/open/floor/wood/tile, +/area/station/service/bar) +"oWg" = ( +/obj/machinery/door/airlock/maintenance/external, +/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, +/turf/open/floor/plating, +/area/station/science/lobby) +"oWr" = ( +/obj/machinery/atmospherics/components/binary/pump, +/obj/structure/fireaxecabinet/directional/east, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/engineering/atmos) +"oWv" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/maintenance/solars/port) +"oWy" = ( +/obj/effect/turf_decal/box/corners, +/turf/open/floor/iron/dark, +/area/station/science/ordnance) +"oWB" = ( +/obj/machinery/door/airlock/hatch{ + name = "MiniSat Access" + }, +/obj/effect/mapping_helpers/airlock/access/all/command/minisat, +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/aisat/foyer) +"oWE" = ( +/obj/structure/closet/radiation{ + anchored = 1 + }, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/engineering/main) +"oXa" = ( +/obj/structure/cable, +/obj/structure/railing{ + dir = 1 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/white, +/area/station/science/research) +"oXc" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/cargo/storage) +"oXd" = ( +/obj/machinery/status_display/door_timer{ + id = "Cell 3"; + name = "Cell 3"; + pixel_x = 32; + pixel_y = 32 + }, +/obj/machinery/status_display/door_timer{ + id = "Cell 2"; + name = "Cell 2"; + pixel_y = 32; + pixel_x = -32 + }, +/obj/effect/turf_decal/tile/red/fourcorners, +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/iron, +/area/station/security/brig) +"oXh" = ( +/obj/machinery/requests_console/directional/east{ + department = "Security"; + name = "Security Requests Console" + }, +/obj/effect/mapping_helpers/requests_console/information, +/obj/effect/mapping_helpers/requests_console/assistance, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 4 + }, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 4 + }, +/obj/structure/chair{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/hallway/secondary/exit/departure_lounge) +"oXz" = ( +/obj/effect/turf_decal/tile/purple/opposingcorners, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/station/science/lobby) +"oXE" = ( +/obj/machinery/atmospherics/components/unary/outlet_injector/monitored/oxygen_input{ + dir = 8 + }, +/turf/open/floor/engine/o2, +/area/station/engineering/atmos) +"oXI" = ( +/obj/structure/girder, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/hallway/primary/starboard) +"oXW" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/iron/large, +/area/station/hallway/secondary/exit/departure_lounge) +"oYm" = ( +/obj/machinery/camera/autoname/directional/west, +/obj/item/radio/intercom/directional/east, +/obj/effect/turf_decal/tile/red/fourcorners, +/obj/structure/cable, +/obj/effect/landmark/event_spawn, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/light_switch/directional/west, +/turf/open/floor/iron, +/area/station/security/brig) +"oYu" = ( +/obj/machinery/mech_bay_recharge_port{ + dir = 2 + }, +/turf/open/floor/circuit/green, +/area/station/science/robotics/mechbay) +"oYv" = ( +/obj/machinery/door/airlock/external{ + name = "Server Room" + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/mapping_helpers/airlock/access/all/engineering/tcoms, +/turf/open/floor/iron/dark/telecomms, +/area/station/tcommsat/server) +"oYC" = ( +/obj/machinery/camera/autoname/directional/east{ + network = list("ss13","medbay") + }, +/turf/open/floor/engine, +/area/station/medical/chemistry) +"oYE" = ( +/obj/machinery/door/airlock/vault{ + name = "Vault" + }, +/obj/effect/mapping_helpers/airlock/access/all/supply/vault, +/obj/effect/mapping_helpers/airlock/locked, +/obj/effect/landmark/navigate_destination, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 4 + }, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/command/nuke_storage) +"oYM" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/engineering/atmos) +"oYX" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/simple/orange/visible{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/engineering/atmos) +"oZb" = ( +/obj/machinery/light/dim/directional/south, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/white/smooth_edge{ + dir = 1 + }, +/area/station/science/research) +"oZl" = ( +/obj/structure/railing{ + dir = 1 + }, +/obj/structure/cable, +/obj/structure/rack, +/obj/item/clothing/suit/space/orange, +/obj/item/clothing/head/helmet/space/orange, +/obj/item/tank/internals/oxygen, +/turf/open/floor/catwalk_floor/iron_dark/telecomms, +/area/station/ai_monitored/turret_protected/ai) +"oZp" = ( +/obj/structure/cable/multilayer/connected, +/turf/open/floor/iron/dark/telecomms, +/area/station/tcommsat/server) +"oZt" = ( +/turf/closed/wall/r_wall, +/area/station/medical/virology) +"oZz" = ( +/turf/closed/wall/r_wall, +/area/station/security/brig) +"oZC" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/command/heads_quarters/ce) +"oZK" = ( +/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, +/obj/machinery/door/airlock/maintenance_hatch, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 8 + }, +/turf/open/floor/plating, +/area/station/commons/storage/primary) +"oZQ" = ( +/turf/open/openspace, +/area/station/cargo/storage) +"oZT" = ( +/obj/item/kirbyplants/random, +/obj/structure/cable, +/obj/effect/turf_decal/tile/red/opposingcorners, +/obj/machinery/light_switch/directional/north{ + pixel_x = 26 + }, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/science) +"oZX" = ( +/obj/structure/railing, +/obj/machinery/door/firedoor/border_only, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 10 + }, +/obj/machinery/light/cold/dim/directional/west, +/obj/structure/table, +/obj/effect/spawner/random/food_or_drink/snack, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) +"paa" = ( +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"paf" = ( +/obj/machinery/light/warm/directional/south, +/obj/effect/turf_decal/tile/neutral, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"pah" = ( +/obj/machinery/light/directional/south, +/obj/effect/turf_decal/trimline/yellow/filled/line, +/obj/structure/disposalpipe/trunk/multiz/down{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/engineering/main) +"pat" = ( +/obj/effect/turf_decal/siding/red{ + dir = 8 + }, +/obj/effect/turf_decal/tile/dark_red/opposingcorners, +/turf/open/floor/iron/dark, +/area/station/science/robotics/lab) +"pau" = ( +/obj/machinery/power/port_gen/pacman/pre_loaded, +/turf/open/floor/plating, +/area/station/maintenance/central/greater) +"paC" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/structure/table, +/obj/item/storage/belt/utility, +/obj/item/storage/toolbox/electrical{ + pixel_y = 6 + }, +/obj/item/storage/toolbox/mechanical, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/command/storage/eva) +"paS" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/tile/neutral, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"paW" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/maintenance/department/medical/central) +"pbn" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 10 + }, +/obj/structure/closet/emcloset, +/obj/item/radio/intercom/directional/west, +/turf/open/floor/iron/white, +/area/station/hallway/secondary/entry) +"pbA" = ( +/obj/machinery/air_sensor/incinerator_tank, +/turf/open/floor/engine/airless, +/area/station/maintenance/disposal/incinerator) +"pbB" = ( +/obj/structure/closet/crate/trashcart/laundry, +/obj/effect/spawner/random/contraband/prison, +/obj/item/clothing/under/rank/prisoner, +/obj/item/clothing/under/rank/prisoner, +/obj/item/clothing/under/rank/prisoner/skirt, +/obj/item/clothing/under/rank/prisoner/skirt, +/obj/machinery/firealarm/directional/south, +/obj/machinery/camera/autoname/directional/west, +/turf/open/floor/iron/freezer, +/area/station/security/prison/shower) +"pbD" = ( +/obj/effect/turf_decal/stripes{ + dir = 1 + }, +/obj/structure/ladder{ + icon_state = "ladder10" + }, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"pbO" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/obj/effect/turf_decal/tile/yellow{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) +"pbP" = ( +/obj/structure/lattice/catwalk, +/obj/structure/marker_beacon/burgundy, +/turf/open/space/basic, +/area/station/solars/starboard/fore) +"pbX" = ( +/obj/machinery/power/apc/auto_name/directional/north, +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/commons/storage/primary) +"pbY" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/station/engineering/storage/tech) +"pco" = ( +/obj/machinery/biogenerator, +/turf/closed/wall, +/area/station/service/hydroponics) +"pcN" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/obj/structure/cable, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/maintenance/department/engine) +"pcQ" = ( +/obj/machinery/atmospherics/components/unary/portables_connector/visible/layer4{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/department/bridge) +"pdg" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/iron/large, +/area/station/hallway/secondary/exit/departure_lounge) +"pdo" = ( +/obj/structure/cable/multilayer/multiz, +/turf/open/floor/glass, +/area/station/ai_monitored/turret_protected/aisat/uppersouth) +"pdp" = ( +/obj/effect/turf_decal/siding/wood, +/turf/open/floor/wood/tile, +/area/station/service/bar) +"pdx" = ( +/obj/effect/turf_decal/trimline/blue/filled/line, +/obj/item/radio/intercom/directional/south, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/blue/filled/mid_joiner, +/turf/open/floor/iron/white/smooth_large, +/area/station/medical/medbay/central) +"pdz" = ( +/obj/item/radio/intercom/directional/west, +/obj/structure/disposalpipe/trunk/multiz{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/science/research) +"pdK" = ( +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 1 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/security) +"pdR" = ( +/obj/effect/turf_decal/stripes{ + dir = 8 + }, +/obj/effect/turf_decal/arrows/white{ + dir = 4 + }, +/turf/open/floor/engine, +/area/station/engineering/atmospherics_engine) +"pdS" = ( +/obj/structure/railing/corner{ + dir = 4 + }, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"peo" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/white/smooth_edge{ + dir = 1 + }, +/area/station/science/research) +"peA" = ( +/obj/structure/cable, +/turf/open/floor/iron/chapel{ + dir = 8 + }, +/area/station/service/chapel) +"peD" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/security/warden) +"peL" = ( +/obj/effect/turf_decal/tile/dark_blue/half/contrasted{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/dark, +/area/station/command/bridge) +"peU" = ( +/obj/effect/turf_decal/tile/blue/half/contrasted{ + dir = 1 + }, +/obj/structure/chair/sofa/bench/tram/solo, +/turf/open/floor/iron/white, +/area/station/medical/medbay/lobby) +"peW" = ( +/obj/machinery/light/directional/south, +/obj/effect/turf_decal/tile/yellow{ + dir = 8 + }, +/turf/open/floor/iron/dark/corner, +/area/station/engineering/atmos/upper) +"pfe" = ( +/obj/structure/railing{ + dir = 8 + }, +/turf/open/space/basic, +/area/space/nearstation) +"pfg" = ( +/obj/structure/barricade/wooden, +/turf/open/misc/asteroid, +/area/station/asteroid) +"pfp" = ( +/obj/structure/closet/secure_closet/personal, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"pfv" = ( +/obj/machinery/shower/directional/west, +/obj/effect/turf_decal{ + icon = 'icons/obj/mining_zones/survival_pod.dmi'; + icon_state = "fan_tiny" + }, +/obj/machinery/digital_clock/directional/south, +/turf/open/floor/iron/white/textured_large, +/area/station/medical/treatment_center) +"pfV" = ( +/obj/machinery/holopad, +/turf/open/floor/iron, +/area/station/engineering/main) +"pgd" = ( +/obj/structure/chair{ + dir = 1; + name = "Prosecution" + }, +/turf/open/floor/iron, +/area/station/security/courtroom) +"pgk" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/aisat/teleporter) +"pgm" = ( +/obj/machinery/button/door/directional/east{ + id = "Secure Storage"; + name = "Secure Storage Control" + }, +/obj/machinery/vending/wardrobe/engi_wardrobe, +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 6 + }, +/turf/open/floor/iron, +/area/station/engineering/storage) +"pgv" = ( +/obj/machinery/light/small/dim/directional/south, +/obj/item/storage/box/lights/mixed, +/obj/structure/rack, +/turf/open/floor/iron/textured, +/area/station/hallway/primary/central) +"pgC" = ( +/obj/structure/table/wood, +/obj/machinery/fax{ + fax_name = "Detective's Office"; + name = "Detective's Fax Machine" + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron, +/area/station/security/detectives_office) +"pgJ" = ( +/obj/structure/table/reinforced, +/obj/effect/turf_decal/tile/red/fourcorners, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/medical) +"pgN" = ( +/obj/machinery/light/small/dim/directional/east, +/obj/structure/closet/crate/medical, +/obj/effect/spawner/random/medical/medkit, +/obj/effect/decal/cleanable/blood/old, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/iron, +/area/station/maintenance/department/cargo) +"pgS" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 9 + }, +/obj/machinery/firealarm/directional/west, +/turf/open/floor/iron/checker, +/area/station/science/research) +"pgW" = ( +/obj/effect/turf_decal/trimline/blue/filled/corner, +/obj/effect/landmark/start/medical_doctor, +/turf/open/floor/iron/white, +/area/station/medical/treatment_center) +"phi" = ( +/obj/machinery/duct, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/freezer, +/area/station/commons/toilet/restrooms) +"phq" = ( +/obj/machinery/atmospherics/components/binary/pump/on{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/layer_manifold/scrubbers/hidden, +/obj/machinery/airlock_sensor/incinerator_ordmix{ + pixel_y = -24 + }, +/turf/open/floor/engine, +/area/station/science/ordnance/burnchamber) +"phA" = ( +/obj/machinery/computer/exodrone_control_console{ + dir = 8 + }, +/turf/open/floor/iron/textured, +/area/station/cargo/drone_bay) +"phG" = ( +/obj/machinery/door/airlock/highsecurity{ + name = "AI Upload" + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "aiupload" + }, +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/access/all/command/ai_upload, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/ai_monitored/turret_protected/aisat_interior) +"phJ" = ( +/obj/structure/closet/secure_closet{ + name = "contraband locker"; + req_access = list("armory") + }, +/obj/effect/spawner/random/contraband/armory, +/obj/effect/spawner/random/maintenance/three, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/security/armory) +"phO" = ( +/obj/machinery/vending/wardrobe/chef_wardrobe, +/turf/open/floor/iron/kitchen, +/area/station/service/kitchen) +"phP" = ( +/obj/effect/spawner/random/entertainment/arcade{ + dir = 1 + }, +/obj/machinery/camera/autoname/directional/south, +/turf/open/floor/carpet, +/area/station/command/corporate_showroom) +"phV" = ( +/obj/machinery/door/airlock/security{ + name = "Medbay Security Post" + }, +/obj/machinery/door/firedoor, +/obj/structure/cable, +/obj/effect/turf_decal/trimline/red/filled/end{ + dir = 8 + }, +/obj/effect/mapping_helpers/airlock/access/all/security/general, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/medical) +"pic" = ( +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 4 + }, +/obj/item/radio/intercom/directional/east, +/turf/open/floor/iron, +/area/station/cargo/storage) +"pih" = ( +/obj/machinery/power/solar{ + id = "forestarboard"; + name = "Fore-Starboard Solar Array" + }, +/obj/structure/cable, +/turf/open/floor/iron/solarpanel/airless, +/area/station/solars/starboard/fore) +"pik" = ( +/obj/item/radio/intercom/directional/west, +/turf/open/floor/iron/freezer, +/area/station/commons/toilet/restrooms) +"pim" = ( +/obj/structure/railing, +/obj/machinery/door/firedoor/border_only, +/obj/effect/turf_decal/tile/brown/half/contrasted, +/obj/item/paper/fluff/stations/lavaland/orm_notice, +/obj/item/pen{ + pixel_x = 4; + pixel_y = 4 + }, +/obj/structure/table/reinforced, +/turf/open/floor/iron, +/area/station/cargo/storage) +"piu" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/engineering/lobby) +"piE" = ( +/obj/structure/ladder, +/turf/open/floor/plating, +/area/station/maintenance/department/science) +"piF" = ( +/obj/effect/turf_decal/tile/brown/anticorner/contrasted{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/cargo/storage) +"piH" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/duct, +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden, +/obj/effect/turf_decal/tile/blue/fourcorners, +/turf/open/floor/catwalk_floor/flat_white, +/area/station/medical/treatment_center) +"piS" = ( +/obj/structure/girder/displaced, +/obj/effect/turf_decal/sand/plating, +/obj/structure/barricade/wooden/crude, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/hallway/secondary/exit/departure_lounge) +"pjk" = ( +/obj/machinery/portable_atmospherics/canister/nitrogen, +/turf/open/floor/engine/n2, +/area/station/engineering/atmos) +"pjl" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/security/prison) +"pjn" = ( +/obj/effect/turf_decal/sand/plating, +/obj/structure/sign/poster/contraband/random/directional/north, +/turf/open/floor/plating, +/area/station/maintenance/central/greater) +"pjt" = ( +/obj/structure/bed{ + dir = 1 + }, +/obj/item/bedsheet/red{ + dir = 4 + }, +/obj/effect/landmark/start/prisoner, +/obj/machinery/light/small/dim/directional/west, +/turf/open/floor/iron/dark, +/area/station/security/prison/safe) +"pjw" = ( +/obj/machinery/power/apc/auto_name/directional/east, +/obj/machinery/disposal/bin, +/obj/effect/turf_decal/siding/wood{ + dir = 5 + }, +/obj/structure/cable, +/obj/structure/disposalpipe/trunk, +/turf/open/floor/wood, +/area/station/command/heads_quarters/qm) +"pjE" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/plating, +/area/station/maintenance/port/lesser) +"pjI" = ( +/obj/machinery/camera/autoname/directional/north, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/stairs/left{ + dir = 8 + }, +/area/station/service/theater) +"pjL" = ( +/obj/structure/table, +/obj/item/paper_bin{ + pixel_x = -5; + pixel_y = 6 + }, +/turf/open/floor/glass/reinforced, +/area/station/science/xenobiology) +"pjN" = ( +/obj/structure/transit_tube/horizontal{ + dir = 2 + }, +/obj/structure/lattice, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/space/basic, +/area/space/nearstation) +"pjY" = ( +/obj/machinery/button/door/directional/west{ + req_access = list("atmospherics"); + name = "Atmospherics Lockdown"; + id = "atmos" + }, +/obj/machinery/light_switch/directional/west{ + pixel_x = -35 + }, +/obj/effect/turf_decal/tile/yellow{ + dir = 4 + }, +/turf/open/floor/iron/dark/corner{ + dir = 1 + }, +/area/station/engineering/atmos/storage/gas) +"pkl" = ( +/turf/closed/wall, +/area/station/maintenance/solars/starboard/fore) +"pkn" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/commons/fitness/recreation) +"pkt" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/table_frame, +/obj/item/stack/sheet/iron, +/obj/effect/decal/cleanable/blood/splatter, +/obj/machinery/light/small/broken/directional/west, +/turf/open/floor/iron, +/area/station/cargo/warehouse/upper) +"pkw" = ( +/obj/structure/flora/rock/pile/style_random, +/turf/open/misc/asteroid, +/area/station/maintenance/department/science) +"pkA" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/obj/machinery/digital_clock/directional/west, +/obj/machinery/newscaster/directional/south, +/turf/open/floor/iron/dark, +/area/station/medical/chemistry/minisat) +"pkN" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"pkP" = ( +/obj/machinery/airalarm/directional/north, +/obj/effect/turf_decal/loading_area/white{ + dir = 8 + }, +/obj/machinery/conveyor{ + dir = 8; + id = "sorter" + }, +/obj/machinery/door/window/right/directional/south{ + name = "Crate Security Door"; + req_access = list("shipping") + }, +/turf/open/floor/iron/textured_large, +/area/station/cargo/sorting) +"pkR" = ( +/obj/structure/stairs/west, +/obj/structure/railing{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/security/warden) +"pla" = ( +/obj/effect/landmark/start/cyborg, +/obj/structure/window/reinforced/spawner/directional/east, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/recharge_floor, +/area/station/ai_monitored/turret_protected/ai_upload_foyer) +"pld" = ( +/obj/effect/turf_decal/siding/purple{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/camera/autoname/directional/south{ + network = list("ss13","rd") + }, +/turf/open/floor/iron/white/herringbone, +/area/station/science/breakroom) +"plA" = ( +/turf/closed/wall/r_wall, +/area/station/security/office) +"plC" = ( +/obj/effect/turf_decal/siding/purple{ + dir = 4 + }, +/obj/structure/chair/sofa/bench{ + dir = 4 + }, +/turf/open/floor/iron/white/textured_large, +/area/station/science/research) +"plH" = ( +/obj/machinery/button/door/directional/west{ + id = "cmoshower"; + name = "Bolt Control"; + normaldoorcontrol = 1; + specialfunctions = 4 + }, +/obj/structure/curtain, +/obj/machinery/shower/directional/north, +/obj/item/soap, +/turf/open/floor/iron/freezer, +/area/station/command/heads_quarters/cmo) +"plV" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/yellow/filled/line, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/white, +/area/station/medical/chemistry/minisat) +"plX" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/tank_holder/extinguisher, +/turf/open/floor/plating, +/area/station/maintenance/department/science) +"pme" = ( +/obj/machinery/door/firedoor, +/obj/structure/cable, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/duct, +/obj/machinery/firealarm/directional/south, +/turf/open/floor/iron/dark, +/area/station/medical/treatment_center) +"pmC" = ( +/obj/effect/turf_decal/tile/neutral, +/turf/open/floor/iron/dark, +/area/station/command/heads_quarters/hop) +"pmT" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/department/science) +"pns" = ( +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"pny" = ( +/obj/machinery/atmospherics/pipe/multiz/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/multiz/scrubbers/visible/layer2, +/turf/open/floor/plating, +/area/station/maintenance/central/greater) +"pnK" = ( +/obj/machinery/atmospherics/pipe/multiz/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/multiz/scrubbers/visible/layer2, +/turf/open/floor/plating, +/area/station/maintenance/port/greater) +"pnQ" = ( +/obj/effect/turf_decal/sand/plating, +/obj/machinery/door/airlock/external, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, +/turf/open/floor/plating, +/area/station/maintenance/disposal) +"pnS" = ( +/turf/closed/mineral/random/stationside/asteroid, +/area/station/asteroid) +"pog" = ( +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/aisat/teleporter) +"poi" = ( +/turf/closed/wall, +/area/station/maintenance/department/cargo) +"poj" = ( +/obj/structure/cable, +/obj/effect/turf_decal/siding/wood, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/wood, +/area/station/security/detectives_office/private_investigators_office) +"poo" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/machinery/holopad, +/turf/open/floor/wood/tile, +/area/station/command/corporate_showroom) +"pos" = ( +/obj/structure/table/wood, +/obj/item/pai_card, +/obj/item/pen/red, +/obj/item/pen/blue{ + pixel_x = 5; + pixel_y = 5 + }, +/turf/open/floor/wood/parquet, +/area/station/service/library) +"poF" = ( +/obj/structure/cable, +/obj/item/radio/intercom/directional/north, +/obj/machinery/button/door/directional/south{ + pixel_x = -6; + id = "xenobio7"; + name = "pen 7 blast doors control" + }, +/obj/machinery/button/door/directional/south{ + pixel_x = 6; + id = "xenobio8"; + name = "pen 8 blast doors control" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark/textured_edge{ + dir = 8 + }, +/area/station/science/xenobiology) +"poU" = ( +/obj/structure/table/reinforced/rglass, +/obj/effect/spawner/random/engineering/flashlight, +/obj/effect/turf_decal/tile/red/anticorner/contrasted, +/turf/open/floor/iron/dark, +/area/station/security/office) +"poV" = ( +/obj/effect/landmark/start/hangover, +/turf/open/floor/iron, +/area/station/cargo/lobby) +"poZ" = ( +/obj/structure/reagent_dispensers/watertank, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/station/science/robotics/mechbay) +"ppb" = ( +/obj/structure/chair/comfy/brown{ + dir = 1; + name = "Chief Medical Officer" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/carpet/executive, +/area/station/command/meeting_room) +"ppk" = ( +/obj/structure/chair{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/turf/open/floor/iron/dark/textured, +/area/station/hallway/secondary/exit/departure_lounge) +"ppp" = ( +/obj/structure/cable, +/obj/effect/turf_decal/siding/purple, +/obj/machinery/camera/autoname/directional/south{ + network = list("ss13","rd") + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/white/smooth_large, +/area/station/science/research) +"ppw" = ( +/obj/structure/table, +/obj/machinery/reagentgrinder{ + pixel_x = 6; + pixel_y = 6 + }, +/obj/structure/window/spawner/directional/south, +/obj/machinery/elevator_control_panel/directional/east{ + desc = "A small control panel used to move the kitchen dumbwaiter up and down."; + linked_elevator_id = "dumbwaiter_lift"; + name = "Dumbwaiter Control Panel"; + preset_destination_names = list("2"="Kitchen","3"="Hydroponics") + }, +/turf/open/floor/iron/kitchen, +/area/station/service/kitchen) +"ppz" = ( +/obj/effect/turf_decal/tile/red/diagonal_edge, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/turf/open/floor/iron/dark, +/area/station/security/warden) +"ppD" = ( +/obj/structure/rack, +/obj/effect/spawner/random/maintenance, +/obj/item/pickaxe/improvised, +/turf/open/misc/asteroid, +/area/station/maintenance/port/greater) +"ppO" = ( +/obj/effect/spawner/structure/window/hollow/end, +/turf/open/floor/plating, +/area/station/security/courtroom) +"ppR" = ( +/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ + dir = 8 + }, +/obj/effect/turf_decal/tile/yellow{ + dir = 4 + }, +/obj/machinery/airalarm/directional/north, +/turf/open/floor/iron/dark/corner{ + dir = 1 + }, +/area/station/engineering/atmos/pumproom) +"pql" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/dark/hidden, +/obj/effect/mapping_helpers/airlock/locked, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/door/airlock/public/glass/incinerator/atmos_exterior, +/turf/open/floor/engine, +/area/station/maintenance/disposal/incinerator) +"pqB" = ( +/obj/structure/chair/stool/directional/north, +/obj/effect/turf_decal/sand/plating, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/plating, +/area/station/maintenance/central/greater) +"pqJ" = ( +/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/obj/machinery/door/airlock/external, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/engineering/supermatter/room) +"pqX" = ( +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ + dir = 8 + }, +/turf/closed/wall/r_wall, +/area/station/science/ordnance/burnchamber) +"prc" = ( +/obj/machinery/field/generator, +/turf/open/floor/plating, +/area/station/engineering/storage) +"prg" = ( +/obj/structure/rack, +/obj/item/food/sandwich/peanut_butter_jelly, +/obj/effect/turf_decal/delivery/red, +/obj/item/toy/figure/roboticist, +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/turf/open/floor/iron/white/smooth_large, +/area/station/science/robotics/lab) +"prh" = ( +/obj/effect/turf_decal/siding/purple, +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/turf/open/floor/iron/white/smooth_corner{ + dir = 4 + }, +/area/station/science/research) +"prk" = ( +/obj/effect/turf_decal/tile/red/anticorner/contrasted{ + dir = 8 + }, +/obj/item/kirbyplants/random, +/obj/structure/extinguisher_cabinet/directional/west, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/security) +"prr" = ( +/turf/closed/wall/r_wall/rust, +/area/station/command/corporate_showroom) +"prw" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/circuit/green, +/area/station/ai_monitored/turret_protected/ai_upload) +"prz" = ( +/obj/machinery/portable_atmospherics/canister/air, +/obj/machinery/atmospherics/components/unary/portables_connector/visible/layer4, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/command/storage/satellite) +"prI" = ( +/obj/item/kirbyplants/random, +/obj/machinery/light_switch/directional/west, +/obj/machinery/airalarm/directional/north, +/turf/open/floor/iron/grimy, +/area/station/service/chapel/office) +"prS" = ( +/obj/structure/sign/departments/psychology/directional/north, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 1 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) +"prW" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"prX" = ( +/obj/effect/turf_decal/tile/blue, +/obj/effect/turf_decal/tile/green{ + dir = 8 + }, +/obj/effect/turf_decal/tile/green{ + dir = 4 + }, +/obj/machinery/light/directional/east, +/obj/item/kirbyplants/random, +/turf/open/floor/iron, +/area/station/service/hydroponics) +"psi" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) +"psj" = ( +/obj/structure/sign/warning/vacuum/directional/north, +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/obj/effect/turf_decal/bot_red, +/obj/effect/turf_decal/tile/purple/anticorner/contrasted{ + dir = 1 + }, +/turf/open/floor/iron/white, +/area/station/science/lobby) +"pso" = ( +/obj/machinery/door/airlock/maintenance/glass, +/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/commons/vacant_room/commissary) +"psy" = ( +/obj/effect/turf_decal/siding/wood/corner, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/turf/open/floor/wood, +/area/station/command/heads_quarters/qm) +"psF" = ( +/obj/effect/turf_decal/stripes, +/obj/machinery/camera/autoname/directional/south{ + network = list("ss13","engine") + }, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"psM" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"psT" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/corner, +/turf/open/floor/engine, +/area/station/command/corporate_dock) +"ptc" = ( +/obj/effect/turf_decal/bot_white, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/station/engineering/gravity_generator) +"pth" = ( +/obj/structure/lattice/catwalk, +/obj/structure/railing{ + dir = 8 + }, +/turf/open/space/basic, +/area/space/nearstation) +"pti" = ( +/obj/machinery/plumbing/growing_vat, +/turf/open/misc/asteroid, +/area/station/asteroid) +"ptq" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"pts" = ( +/obj/structure/table/reinforced/rglass, +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/item/reagent_containers/cup/bottle/epinephrine{ + pixel_y = 9; + pixel_x = 6 + }, +/obj/item/storage/box/rxglasses{ + pixel_x = -4; + pixel_y = 8 + }, +/obj/item/stack/medical/gauze{ + pixel_x = 8 + }, +/obj/item/reagent_containers/syringe, +/turf/open/floor/iron/white, +/area/station/medical/treatment_center) +"ptP" = ( +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark/smooth_large, +/area/station/command/corporate_dock) +"ptR" = ( +/obj/effect/turf_decal/tile/neutral/diagonal_centre, +/obj/structure/noticeboard/directional/north{ + desc = "A memorial wall for pinning mementos upon."; + name = "memorial board" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/service/chapel/funeral) +"pui" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/bot_white, +/turf/open/floor/iron/dark, +/area/station/command/gateway) +"pul" = ( +/obj/structure/table, +/obj/item/hfr_box/body/waste_output, +/obj/item/hfr_box/body/moderator_input, +/obj/item/hfr_box/body/fuel_input, +/obj/item/hfr_box/body/interface, +/obj/effect/turf_decal/stripes, +/obj/machinery/camera/autoname/directional/south, +/turf/open/floor/iron/dark, +/area/station/engineering/atmospherics_engine) +"pum" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/preopen{ + id = "xenobio7"; + name = "Xenobio Pen 7 Blast Door" + }, +/turf/open/floor/plating, +/area/station/science/xenobiology) +"pux" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/yellow/filled/line, +/obj/machinery/firealarm/directional/south, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/white, +/area/station/medical/chemistry/minisat) +"puP" = ( +/obj/structure/transport/linear/public{ + icon = 'icons/obj/smooth_structures/catwalk.dmi'; + base_icon_state = "catwalk"; + icon_state = "catwalk-3" + }, +/turf/open/openspace, +/area/station/ai_monitored/turret_protected/aisat_interior) +"puQ" = ( +/obj/effect/baseturf_helper/reinforced_plating/ceiling, +/turf/open/floor/engine/vacuum, +/area/station/engineering/atmos) +"puS" = ( +/obj/machinery/power/apc/auto_name/directional/north, +/obj/structure/cable, +/obj/machinery/vending/sustenance, +/turf/open/floor/iron, +/area/station/security/prison) +"puT" = ( +/obj/structure/chair/comfy/brown{ + dir = 8 + }, +/turf/open/floor/carpet/green, +/area/station/command/heads_quarters/hop) +"puV" = ( +/obj/effect/turf_decal/trimline/blue/filled/line, +/obj/item/radio/intercom/directional/south, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/blue/filled/mid_joiner, +/turf/open/floor/iron/white/smooth_large, +/area/station/medical/medbay/central) +"puX" = ( +/obj/item/radio/intercom/directional/south, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/white/smooth_edge{ + dir = 1 + }, +/area/station/science/research) +"pve" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 8 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/station/engineering/lobby) +"pvo" = ( +/obj/machinery/firealarm/directional/north, +/obj/structure/table, +/obj/effect/turf_decal/tile/purple/opposingcorners, +/obj/item/clothing/ears/earmuffs{ + pixel_y = 7 + }, +/obj/item/radio/off{ + pixel_x = 4; + pixel_y = 3 + }, +/turf/open/floor/iron/white, +/area/station/science/auxlab/firing_range) +"pvy" = ( +/obj/structure/window/spawner/directional/north, +/turf/open/floor/iron/dark, +/area/station/commons/fitness/recreation) +"pvG" = ( +/obj/machinery/telecomms/server/presets/science, +/turf/open/floor/circuit/green/telecomms/mainframe, +/area/station/tcommsat/server) +"pvT" = ( +/obj/structure/flora/rock/style_random, +/turf/open/misc/asteroid/airless, +/area/space/nearstation) +"pvX" = ( +/obj/effect/turf_decal/tile/yellow{ + dir = 8 + }, +/turf/open/floor/iron/dark/corner{ + dir = 1 + }, +/area/station/engineering/atmos) +"pwn" = ( +/obj/structure/table/glass, +/obj/item/reagent_containers/cup/beaker/cryoxadone{ + pixel_x = -6; + pixel_y = 10 + }, +/obj/item/reagent_containers/cup/beaker/cryoxadone{ + pixel_x = 6; + pixel_y = 10 + }, +/obj/item/reagent_containers/cup/beaker/cryoxadone{ + pixel_x = -6; + pixel_y = 6 + }, +/obj/item/reagent_containers/cup/beaker/cryoxadone{ + pixel_x = 6; + pixel_y = 6 + }, +/obj/item/storage/pill_bottle/mannitol, +/obj/item/reagent_containers/dropper{ + pixel_y = 6 + }, +/obj/effect/turf_decal/tile/blue/fourcorners, +/turf/open/floor/iron/white, +/area/station/medical/treatment_center) +"pwt" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/broken_flooring/pile{ + dir = 8 + }, +/turf/open/floor/plating, +/area/station/cargo/warehouse) +"pwx" = ( +/obj/machinery/vending/clothing, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/delivery, +/turf/open/floor/iron/dark, +/area/station/commons/locker) +"pwE" = ( +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 8 + }, +/obj/effect/turf_decal/box/red, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/camera/autoname/directional/north{ + network = list("ss13","rd") + }, +/obj/machinery/portable_atmospherics/canister, +/turf/open/floor/iron/dark, +/area/station/science/ordnance/testlab) +"pwO" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/iron/white/smooth_large, +/area/station/medical/treatment_center) +"pwV" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/medical/morgue) +"pwZ" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/light/small/directional/south, +/turf/open/misc/asteroid, +/area/station/maintenance/department/science) +"pxh" = ( +/obj/effect/turf_decal/tile/brown/opposingcorners{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light/small/directional/east, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/iron, +/area/station/commons/vacant_room/commissary) +"pxo" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored/nitrogen_output{ + dir = 8 + }, +/turf/open/floor/engine/n2, +/area/station/engineering/atmos) +"pxu" = ( +/obj/structure/cable, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"pxM" = ( +/obj/machinery/shower/directional/south, +/turf/open/floor/iron/freezer, +/area/station/commons/toilet/restrooms) +"pxR" = ( +/obj/machinery/door/airlock/external, +/obj/effect/mapping_helpers/airlock/cyclelink_helper, +/obj/effect/decal/cleanable/blood/tracks, +/turf/open/floor/plating/airless, +/area/station/maintenance/department/medical/central) +"pxU" = ( +/obj/effect/turf_decal/sand/plating, +/turf/closed/wall, +/area/station/medical/chemistry/minisat) +"pxY" = ( +/obj/structure/reagent_dispensers/fueltank, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/commons/storage/primary) +"pya" = ( +/turf/open/floor/glass/reinforced/telecomms, +/area/station/ai_monitored/turret_protected/ai) +"pyi" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/maintenance/port/lesser) +"pyo" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/junction{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"pyq" = ( +/obj/effect/turf_decal/tile/red/half/contrasted, +/obj/machinery/firealarm/directional/south, +/turf/open/floor/iron, +/area/station/hallway/primary/fore) +"pyx" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured, +/area/station/science/robotics/lab) +"pyA" = ( +/obj/structure/broken_flooring/singular{ + dir = 4 + }, +/obj/effect/mapping_helpers/broken_floor, +/obj/structure/table, +/obj/structure/window/spawner/directional/east, +/obj/item/flashlight/lamp{ + pixel_x = -7; + pixel_y = 18; + start_on = 0 + }, +/obj/item/paper, +/obj/effect/spawner/random/bureaucracy/pen, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"pyB" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 8 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/station/engineering/main) +"pyF" = ( +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/turf/open/floor/iron, +/area/station/security/interrogation) +"pyH" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/structure/table/reinforced, +/obj/item/circuitboard/machine/cyborgrecharger, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/aisat/foyer) +"pyK" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/maintenance/department/engine) +"pyO" = ( +/turf/open/openspace, +/area/station/maintenance/port/greater) +"pzo" = ( +/obj/vehicle/ridden/wheelchair{ + dir = 1 + }, +/obj/machinery/light/cold/directional/south, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/white/smooth_edge{ + dir = 1 + }, +/area/station/medical/exam_room) +"pzw" = ( +/obj/machinery/door/airlock/maintenance/external, +/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, +/obj/effect/mapping_helpers/airlock/unres, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating/airless, +/area/station/hallway/secondary/exit/departure_lounge) +"pzx" = ( +/obj/machinery/iv_drip, +/obj/machinery/button/door/directional/west{ + pixel_y = -6; + name = "Privacy Control"; + id = "r1p" + }, +/obj/machinery/button/door/directional/west{ + id = "r1"; + name = "Bolt Control"; + normaldoorcontrol = 1; + specialfunctions = 4; + pixel_y = 6 + }, +/obj/machinery/firealarm/directional/north, +/turf/open/floor/iron/white, +/area/station/medical/patients_rooms/room_a) +"pzB" = ( +/obj/machinery/telecomms/server/presets/supply, +/turf/open/floor/circuit/green/telecomms/mainframe, +/area/station/tcommsat/server) +"pzC" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/station/engineering/main) +"pzU" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/fore) +"pAa" = ( +/obj/structure/cable, +/turf/open/floor/carpet/executive, +/area/station/command/corporate_showroom) +"pAB" = ( +/obj/structure/cable, +/obj/effect/turf_decal/trimline/yellow/filled/line, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/engineering/break_room) +"pAP" = ( +/obj/effect/spawner/random/food_or_drink/seed{ + spawn_all_loot = 1; + spawn_random_offset = 1 + }, +/obj/effect/spawner/random/contraband/prison, +/obj/structure/closet/crate/hydroponics, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/newscaster/directional/south, +/turf/open/floor/iron, +/area/station/security/prison/garden) +"pBg" = ( +/obj/effect/turf_decal/tile/yellow/anticorner/contrasted{ + dir = 1 + }, +/obj/structure/rack, +/obj/item/knife/combat/survival, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/construction/mining/aux_base) +"pBk" = ( +/obj/machinery/power/tracker, +/obj/structure/cable, +/turf/open/floor/iron/solarpanel/airless, +/area/station/solars/port/aft) +"pBn" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/iron/white/smooth_edge{ + dir = 4 + }, +/area/station/science/research) +"pBu" = ( +/obj/machinery/door/airlock/command/glass{ + name = "Corporate Showroom" + }, +/obj/structure/cable, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/effect/mapping_helpers/airlock/access/any/command/general, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/turf/open/floor/wood/tile, +/area/station/command/corporate_showroom) +"pBz" = ( +/obj/machinery/disposal/bin, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_edge{ + dir = 1 + }, +/area/station/medical/pharmacy) +"pBB" = ( +/obj/machinery/door/airlock/external, +/obj/effect/mapping_helpers/airlock/access/all/engineering/external, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "ext42" + }, +/turf/open/floor/engine, +/area/station/maintenance/port/lesser) +"pBJ" = ( +/obj/effect/turf_decal/box/white, +/turf/open/floor/engine, +/area/station/engineering/atmospherics_engine) +"pBN" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/rack, +/obj/effect/spawner/random/maintenance/four, +/obj/machinery/light/small/dim/directional/south, +/turf/open/floor/plating, +/area/station/maintenance/department/science) +"pBS" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/iron, +/area/station/security) +"pBV" = ( +/obj/structure/closet/secure_closet/exile, +/obj/item/radio/intercom/directional/north, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/command/gateway) +"pCd" = ( +/obj/machinery/smartfridge/chemistry/preloaded, +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 1 + }, +/obj/effect/turf_decal/tile/blue/half/contrasted, +/obj/machinery/door/firedoor, +/turf/open/floor/iron/white, +/area/station/medical/pharmacy) +"pCf" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/closet/crate/bin, +/obj/effect/spawner/random/trash/botanical_waste, +/turf/open/floor/iron, +/area/station/maintenance/department/medical/central) +"pCz" = ( +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 4 + }, +/obj/item/radio/intercom/directional/east, +/turf/open/floor/iron, +/area/station/security/office) +"pCF" = ( +/obj/machinery/light/directional/south, +/obj/structure/chair/office{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/engineering/atmos/upper) +"pCG" = ( +/obj/structure/railing/corner{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/station/science/xenobiology) +"pCJ" = ( +/obj/item/kirbyplants/random, +/obj/effect/turf_decal/tile/neutral/half{ + dir = 8 + }, +/obj/machinery/newscaster/directional/west, +/turf/open/floor/iron/edge{ + dir = 8 + }, +/area/station/hallway/secondary/exit/departure_lounge) +"pCK" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron/white/smooth_edge{ + dir = 4 + }, +/area/station/medical/exam_room) +"pCO" = ( +/obj/machinery/vending/wardrobe/chap_wardrobe, +/obj/machinery/camera/autoname/directional/north, +/turf/open/floor/iron/grimy, +/area/station/service/chapel/office) +"pCT" = ( +/obj/machinery/door/poddoor/shutters{ + name = "Secure Warehouse Shutters"; + id = "secwarehouse" + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron, +/area/station/cargo/warehouse/upper) +"pCX" = ( +/obj/effect/turf_decal/tile/neutral/diagonal_centre, +/obj/machinery/light/warm/directional/west, +/turf/open/floor/iron/dark, +/area/station/service/chapel/funeral) +"pDd" = ( +/obj/structure/rack, +/obj/item/storage/toolbox/electrical, +/obj/item/integrated_circuit/loaded/speech_relay, +/obj/item/integrated_circuit/loaded/speech_relay, +/obj/item/radio/intercom/directional/south, +/turf/open/floor/iron/white, +/area/station/science/explab) +"pDe" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/iron/white/smooth_large, +/area/station/medical/chemistry) +"pDr" = ( +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/department/medical) +"pDs" = ( +/obj/structure/chair, +/obj/machinery/light/small/directional/north, +/turf/open/floor/iron/dark, +/area/station/maintenance/radshelter/civil) +"pDu" = ( +/obj/machinery/door/airlock/mining/glass{ + name = "Cargo Boutique" + }, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/machinery/door/poddoor/shutters{ + name = "Countertheft Shutters"; + id = "boutique" + }, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/wood/parquet, +/area/station/cargo/boutique) +"pDx" = ( +/obj/effect/turf_decal/stripes{ + dir = 5 + }, +/turf/open/floor/engine, +/area/station/engineering/atmospherics_engine) +"pDG" = ( +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 4 + }, +/obj/machinery/airalarm/directional/east, +/turf/open/floor/iron, +/area/station/security/office) +"pDP" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/turf/open/floor/wood, +/area/station/commons/lounge) +"pDQ" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/space_heater, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"pDU" = ( +/obj/effect/turf_decal/tile/red/diagonal_edge, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/security/warden) +"pEf" = ( +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/structure/table, +/obj/item/storage/toolbox/electrical{ + pixel_x = 1; + pixel_y = -1 + }, +/obj/item/clothing/glasses/meson, +/obj/item/stack/cable_coil{ + pixel_x = -3; + pixel_y = 3 + }, +/obj/item/stack/cable_coil{ + pixel_x = -3; + pixel_y = 3 + }, +/turf/open/floor/iron/textured, +/area/station/engineering/storage/tech) +"pEH" = ( +/turf/closed/wall/rock/porous, +/area/station/cargo/miningoffice) +"pEO" = ( +/obj/effect/spawner/random/structure/grille, +/obj/effect/spawner/random/structure/girder, +/turf/open/floor/plating, +/area/station/maintenance/central/greater) +"pEZ" = ( +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"pFa" = ( +/obj/effect/spawner/random/structure/crate_abandoned, +/turf/open/floor/iron/grimy, +/area/station/maintenance/central/greater) +"pFd" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/command/corporate_showroom) +"pFg" = ( +/obj/structure/lattice/catwalk, +/obj/structure/railing/corner{ + dir = 8 + }, +/turf/open/openspace, +/area/station/engineering/supermatter/room) +"pFl" = ( +/obj/structure/table, +/obj/item/storage/toolbox/mechanical{ + pixel_y = 5 + }, +/obj/item/storage/toolbox/electrical, +/obj/item/flashlight{ + pixel_x = 1; + pixel_y = 5 + }, +/obj/effect/turf_decal/trimline/yellow/filled/line, +/turf/open/floor/iron, +/area/station/engineering/storage) +"pFo" = ( +/obj/machinery/camera/autoname/directional/south{ + network = list("ss13","rd") + }, +/obj/item/radio/intercom/directional/west, +/obj/machinery/computer/mechpad{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/science/robotics/mechbay) +"pFy" = ( +/obj/machinery/door/poddoor/preopen{ + id = "sealobs" + }, +/turf/open/floor/catwalk_floor/iron_white, +/area/station/science/ordnance/testlab) +"pFC" = ( +/obj/structure/chair/sofa/bench/left{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 8 + }, +/obj/machinery/status_display/evac/directional/east, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/exit/departure_lounge) +"pFE" = ( +/obj/machinery/camera/motion/directional/south{ + c_tag = "Secure - AI Upper External North"; + network = list("aicore") + }, +/turf/open/misc/asteroid/airless, +/area/station/asteroid) +"pFF" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/station/engineering/main) +"pFP" = ( +/obj/structure/chair/office, +/obj/effect/landmark/start/lawyer, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/carpet, +/area/station/service/lawoffice) +"pFZ" = ( +/turf/open/floor/plating, +/area/station/engineering/main) +"pGf" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/carpet/executive, +/area/station/command/heads_quarters/captain/private) +"pGo" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/obj/machinery/light_switch/directional/south, +/turf/open/floor/iron, +/area/station/engineering/gravity_generator) +"pGq" = ( +/obj/machinery/vending/games, +/turf/open/floor/carpet/purple, +/area/station/service/library) +"pGs" = ( +/obj/effect/landmark/event_spawn, +/obj/structure/table/wood, +/obj/item/camera/detective{ + pixel_x = -6; + pixel_y = 5 + }, +/obj/item/storage/fancy/cigarettes{ + pixel_x = -4 + }, +/obj/item/taperecorder{ + pixel_x = 7; + pixel_y = 5 + }, +/obj/effect/turf_decal/siding/wood, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/carpet, +/area/station/security/detectives_office) +"pGt" = ( +/turf/open/floor/engine/vacuum, +/area/station/science/ordnance/burnchamber) +"pGH" = ( +/obj/machinery/door/airlock/external{ + name = "Server Room" + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/tcoms, +/turf/open/floor/iron/dark/telecomms, +/area/station/tcommsat/server) +"pGM" = ( +/obj/vehicle/ridden/wheelchair{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/camera/autoname/directional/south{ + network = list("ss13","medbay") + }, +/obj/item/radio/intercom/directional/east, +/obj/machinery/light_switch/directional/south, +/turf/open/floor/iron/white/smooth_corner{ + dir = 1 + }, +/area/station/medical/exam_room) +"pGS" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 5 + }, +/obj/effect/spawner/random/structure/table_or_rack, +/obj/machinery/airalarm/directional/north, +/turf/open/floor/wood/tile, +/area/station/security/courtroom) +"pHr" = ( +/obj/item/pickaxe, +/obj/effect/turf_decal/stripes/asteroid/corner{ + dir = 1 + }, +/turf/open/misc/asteroid, +/area/station/hallway/primary/starboard) +"pHy" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/security/brig) +"pHA" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/glass/reinforced, +/area/station/ai_monitored/turret_protected/aisat/foyer) +"pHP" = ( +/obj/effect/decal/cleanable/glass, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/commons/vacant_room/commissary) +"pIa" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/blood/tracks, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/cargo/warehouse/upper) +"pIp" = ( +/obj/structure/railing{ + dir = 4 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/station/science/research) +"pIF" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/window/brigdoor/right/directional/north{ + req_access = list("armory"); + name = "Brig Control Desk" + }, +/obj/machinery/door/window/right/directional/south, +/obj/structure/desk_bell, +/obj/machinery/flasher/directional/east{ + id = "control2" + }, +/turf/open/floor/plating, +/area/station/security/warden) +"pIM" = ( +/obj/structure/flora/bush/fullgrass/style_random, +/obj/structure/window/reinforced/spawner/directional/east, +/turf/open/floor/grass, +/area/station/science/research) +"pIN" = ( +/obj/effect/landmark/atmospheric_sanity/ignore_area, +/turf/closed/wall/r_wall, +/area/station/ai_monitored/turret_protected/aisat/teleporter) +"pIV" = ( +/turf/open/floor/engine/plasma, +/area/station/engineering/atmos) +"pJj" = ( +/obj/machinery/door/poddoor{ + id = "QMLoaddoor2"; + name = "Supply Dock Loading Door" + }, +/obj/machinery/conveyor{ + dir = 4; + id = "QMLoad2" + }, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/plating, +/area/station/cargo/storage) +"pJk" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/iron/white/smooth_large, +/area/station/medical/storage) +"pJw" = ( +/obj/machinery/atmospherics/pipe/smart/manifold/cyan/visible, +/turf/open/floor/iron, +/area/station/engineering/atmos/pumproom) +"pJF" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/medical/chemistry/minisat) +"pJJ" = ( +/obj/machinery/computer/crew{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark_blue/filled/line, +/turf/open/floor/holofloor/dark, +/area/station/command/heads_quarters/cmo) +"pJL" = ( +/obj/structure/transport/linear/public{ + icon = 'icons/obj/smooth_structures/catwalk.dmi'; + base_icon_state = "catwalk"; + icon_state = "catwalk-157" + }, +/turf/open/floor/plating/elevatorshaft, +/area/station/cargo/storage) +"pJN" = ( +/obj/effect/turf_decal/tile/purple/opposingcorners, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/station/science/lobby) +"pKb" = ( +/obj/effect/spawner/random/trash/cigbutt{ + spawn_random_offset = 4; + spawn_scatter_radius = 1 + }, +/turf/open/floor/plating, +/area/station/maintenance/central/lesser) +"pKg" = ( +/obj/machinery/computer/operating, +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/item/radio/intercom/directional/north, +/turf/open/floor/iron/white, +/area/station/medical/surgery/theatre) +"pKn" = ( +/obj/structure/lattice, +/turf/open/floor/engine/airless, +/area/space/nearstation) +"pKH" = ( +/obj/effect/landmark/start/hangover, +/obj/machinery/duct, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/freezer, +/area/station/commons/toilet/restrooms) +"pLd" = ( +/obj/machinery/door/airlock/security, +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/structure/cable, +/obj/effect/mapping_helpers/airlock/access/all/security/armory, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/station/security/warden) +"pLe" = ( +/obj/machinery/atmospherics/pipe/smart/manifold/yellow/visible, +/obj/structure/lattice, +/turf/open/space/basic, +/area/space/nearstation) +"pLj" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/item/stack/rods/two, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) +"pLk" = ( +/obj/machinery/atmospherics/pipe/smart/simple/dark/visible{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/science/ordnance) +"pLn" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/glass/airless, +/area/station/hallway/secondary/exit/departure_lounge) +"pLo" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/blue/filled/mid_joiner{ + dir = 1 + }, +/turf/open/floor/iron/white/smooth_large, +/area/station/medical/surgery/theatre) +"pLy" = ( +/obj/structure/toilet{ + dir = 1 + }, +/turf/open/floor/plating, +/area/station/maintenance/port/lesser) +"pLA" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 8 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/iron/white/smooth_large, +/area/station/medical/chemistry) +"pLB" = ( +/turf/closed/wall/r_wall, +/area/space/nearstation) +"pLE" = ( +/obj/effect/turf_decal/sand/plating, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/plating, +/area/station/maintenance/central/greater) +"pLM" = ( +/obj/machinery/light/small/directional/north, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/carpet, +/area/station/commons/dorms) +"pLN" = ( +/obj/structure/rack, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/item/food/grown/cannabis, +/obj/item/food/grown/cannabis, +/obj/item/storage/fancy/cigarettes/cigpack_cannabis, +/turf/open/floor/wood, +/area/station/maintenance/central/lesser) +"pLO" = ( +/obj/effect/turf_decal/siding/dark_blue/corner{ + dir = 1 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/command/heads_quarters/hop) +"pLP" = ( +/turf/open/openspace, +/area/station/hallway/secondary/entry) +"pLW" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/security/courtroom) +"pLX" = ( +/obj/machinery/modular_computer/preset/curator{ + dir = 8 + }, +/obj/item/radio/intercom/directional/east, +/turf/open/floor/engine/cult, +/area/station/service/library) +"pMo" = ( +/obj/structure/grille, +/turf/open/floor/plating, +/area/station/maintenance/department/medical) +"pMD" = ( +/obj/structure/closet/firecloset, +/obj/effect/turf_decal/tile/neutral/full, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/camera/autoname/directional/south, +/obj/effect/landmark/start/hangover/closet, +/turf/open/floor/iron/dark/smooth_large, +/area/station/hallway/primary/central) +"pMG" = ( +/turf/open/floor/glass/reinforced, +/area/station/engineering/atmos/upper) +"pMR" = ( +/obj/machinery/door/firedoor, +/turf/open/floor/iron/chapel{ + dir = 1 + }, +/area/station/service/chapel) +"pNa" = ( +/obj/machinery/door/window/left/directional/east, +/turf/open/floor/grass, +/area/station/service/hydroponics/garden) +"pNi" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ + dir = 6 + }, +/turf/open/floor/plating, +/area/station/engineering/atmos) +"pNk" = ( +/obj/structure/lattice/catwalk, +/obj/structure/cable, +/turf/open/space/basic, +/area/station/solars/port/fore) +"pNs" = ( +/obj/structure/cable, +/obj/effect/landmark/start/bitrunner, +/obj/machinery/requests_console/auto_name/directional/east, +/obj/effect/mapping_helpers/requests_console/assistance, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/cargo/bitrunning/den) +"pNB" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 1 + }, +/obj/machinery/duct, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/white, +/area/station/medical/surgery/theatre) +"pNE" = ( +/obj/effect/turf_decal/tile/brown/half/contrasted, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/cargo/sorting) +"pNI" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/recharge_station, +/obj/effect/decal/cleanable/cobweb, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"pOd" = ( +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/yellow{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) +"pOg" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/iron/dark/textured, +/area/station/security/interrogation) +"pOv" = ( +/obj/structure/chair/pew{ + dir = 4 + }, +/turf/open/floor/iron/chapel{ + dir = 4 + }, +/area/station/service/chapel) +"pOw" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/iron/dark/side{ + dir = 9 + }, +/area/station/command/corporate_showroom) +"pOA" = ( +/obj/effect/spawner/random/trash/janitor_supplies, +/turf/open/floor/plating, +/area/station/maintenance/central/lesser) +"pOP" = ( +/obj/machinery/door/airlock/maintenance_hatch, +/obj/effect/mapping_helpers/airlock/access/any/supply/maintenance, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 8 + }, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"pPv" = ( +/obj/effect/turf_decal/box/corners{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/layer_manifold/purple/visible, +/turf/open/floor/iron, +/area/station/engineering/atmos) +"pPx" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners{ + dir = 1 + }, +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk, +/turf/open/floor/iron/dark, +/area/station/command/heads_quarters/rd) +"pPy" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/meter/layer2, +/obj/machinery/meter/layer4, +/obj/machinery/light/small/directional/south, +/turf/open/floor/plating, +/area/station/maintenance/central/lesser) +"pPY" = ( +/obj/machinery/chem_heater/withbuffer, +/obj/effect/turf_decal/bot_red, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/iron/white/textured_half, +/area/station/science/xenobiology) +"pQc" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/textured_large, +/area/station/engineering/storage/tech) +"pQl" = ( +/obj/effect/spawner/random/structure/closet_private, +/obj/machinery/airalarm/directional/west, +/turf/open/floor/carpet, +/area/station/commons/dorms) +"pQm" = ( +/obj/structure/lattice/catwalk, +/obj/machinery/atmospherics/pipe/multiz/supply/visible/layer4{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/multiz/scrubbers/visible/layer2{ + dir = 1 + }, +/turf/open/space/basic, +/area/space/nearstation) +"pQn" = ( +/obj/structure/cable, +/turf/open/floor/iron/chapel, +/area/station/service/chapel) +"pQs" = ( +/obj/structure/rack, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/structure/cable, +/obj/effect/turf_decal/tile/yellow/anticorner/contrasted{ + dir = 1 + }, +/obj/effect/spawner/random/maintenance, +/obj/item/electronics/airlock, +/obj/item/electronics/apc, +/turf/open/floor/iron, +/area/station/commons/storage/tools) +"pQt" = ( +/obj/machinery/door/airlock/security/glass{ + name = "Engineering Security Post" + }, +/obj/effect/mapping_helpers/airlock/access/all/security/general, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/turf/open/floor/iron, +/area/station/security/checkpoint/engineering) +"pQz" = ( +/obj/effect/turf_decal/siding/purple{ + dir = 8 + }, +/turf/open/floor/iron/white/textured_large, +/area/station/science/genetics) +"pQE" = ( +/obj/structure/dresser, +/obj/machinery/airalarm/directional/east, +/turf/open/floor/carpet, +/area/station/commons/dorms) +"pQG" = ( +/obj/machinery/atmospherics/components/trinary/mixer{ + dir = 4 + }, +/obj/machinery/light/directional/north, +/turf/open/floor/iron/dark, +/area/station/science/ordnance) +"pQM" = ( +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 1; + id = "kitchen_counter"; + name = "Kitchen Counter Shutters" + }, +/obj/machinery/door/firedoor, +/obj/machinery/smartfridge/food, +/turf/open/floor/iron/kitchen, +/area/station/service/kitchen) +"pQN" = ( +/obj/structure/chair/stool/directional/east, +/turf/open/floor/wood, +/area/station/commons/lounge) +"pRb" = ( +/obj/machinery/light/floor, +/turf/open/floor/engine/xenobio, +/area/station/science/xenobiology) +"pRk" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 9 + }, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/turf/open/floor/iron/white, +/area/station/medical/storage) +"pRl" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/security/warden) +"pRm" = ( +/obj/structure/cable/layer3, +/obj/machinery/button/elevator/directional/south{ + pixel_y = -25; + id = "aisat"; + pixel_x = 8 + }, +/obj/machinery/lift_indicator/directional/south{ + pixel_x = -6; + pixel_y = -40; + linked_elevator_id = "aisat" + }, +/obj/machinery/camera/autoname/directional/south{ + network = list("aicore") + }, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/ai_monitored/turret_protected/ai) +"pRq" = ( +/obj/effect/turf_decal/trimline/yellow/arrow_cw{ + dir = 9 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron, +/area/station/maintenance/department/medical/central) +"pRG" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/gravity_generator) +"pRH" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"pRM" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/maintenance/disposal) +"pRN" = ( +/obj/machinery/atmospherics/components/unary/outlet_injector/on{ + dir = 4 + }, +/turf/open/floor/engine, +/area/station/science/xenobiology) +"pRY" = ( +/obj/structure/chair/sofa/bench/left{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/hallway/secondary/exit/departure_lounge) +"pSb" = ( +/obj/structure/railing{ + dir = 8 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/obj/effect/turf_decal/trimline/yellow/filled/end{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/engineering/lobby) +"pSf" = ( +/obj/effect/turf_decal/tile/red/opposingcorners, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/security/brig/entrance) +"pSk" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/command/gateway) +"pSm" = ( +/obj/machinery/fax{ + fax_name = "Law Office"; + name = "Law Office Fax Machine" + }, +/obj/structure/table/wood, +/obj/machinery/airalarm/directional/east, +/turf/open/floor/wood, +/area/station/service/lawoffice) +"pSH" = ( +/obj/machinery/atmospherics/components/unary/outlet_injector/on{ + dir = 4 + }, +/obj/machinery/door/window/brigdoor/right/directional/east, +/turf/open/floor/engine/airless, +/area/station/engineering/atmos) +"pSK" = ( +/obj/machinery/door/airlock/external{ + name = "Departure Lounge Airlock"; + space_dir = 2 + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/end, +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/exit/departure_lounge) +"pSM" = ( +/obj/structure/lattice, +/turf/open/openspace, +/area/station/engineering/break_room) +"pSN" = ( +/obj/machinery/suit_storage_unit/security, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/firealarm/directional/east, +/turf/open/floor/iron/dark, +/area/station/security/lockers) +"pSO" = ( +/turf/closed/wall/r_wall, +/area/station/engineering/transit_tube) +"pSS" = ( +/obj/machinery/conveyor/auto{ + id = "bridgedeliver"; + dir = 9 + }, +/turf/open/floor/plating/airless, +/area/station/maintenance/department/science) +"pSV" = ( +/obj/effect/turf_decal/sand/plating, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, +/obj/effect/mapping_helpers/airlock/welded, +/turf/open/floor/plating, +/area/station/asteroid) +"pTn" = ( +/obj/structure/kitchenspike, +/obj/machinery/light/directional/west, +/turf/open/floor/iron/kitchen_coldroom/freezerfloor, +/area/station/service/kitchen) +"pTt" = ( +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"pTw" = ( +/obj/structure/table/glass, +/obj/item/radio/intercom/directional/south, +/obj/item/food/sandwich/cheese, +/turf/open/floor/iron/dark/textured, +/area/station/command/heads_quarters/cmo) +"pTC" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/aisat/teleporter) +"pTJ" = ( +/obj/structure/cable, +/obj/effect/turf_decal/trimline/yellow/filled/line, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/engineering/lobby) +"pTO" = ( +/obj/machinery/atmospherics/pipe/layer_manifold/supply/visible/layer4, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, +/obj/effect/mapping_helpers/airlock/unres, +/turf/open/floor/plating, +/area/station/maintenance/department/medical) +"pTP" = ( +/obj/structure/window/reinforced/spawner/directional/east, +/obj/effect/turf_decal/loading_area, +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/obj/machinery/camera/autoname/directional/north, +/turf/open/floor/iron/dark/small, +/area/station/engineering/transit_tube) +"pTU" = ( +/obj/machinery/conveyor{ + dir = 9; + id = "garbage" + }, +/obj/machinery/light/small/directional/south, +/turf/open/floor/plating, +/area/station/maintenance/disposal) +"pTZ" = ( +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/turf/open/floor/iron, +/area/station/cargo/storage) +"pUa" = ( +/obj/machinery/atmospherics/components/trinary/filter/flipped/critical{ + filter_type = list(/datum/gas/nitrogen) + }, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"pUj" = ( +/obj/effect/turf_decal/tile/blue/opposingcorners{ + dir = 1 + }, +/obj/machinery/door/firedoor, +/turf/open/floor/iron/cafeteria, +/area/station/commons/locker) +"pUr" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/maintenance/department/engine) +"pUt" = ( +/obj/machinery/atmospherics/components/binary/pump{ + name = "Distro Staging to Filter" + }, +/turf/open/floor/iron, +/area/station/engineering/atmos/pumproom) +"pUy" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/wood, +/area/station/service/library) +"pUE" = ( +/obj/structure/table, +/obj/effect/mapping_helpers/burnt_floor, +/obj/effect/decal/cleanable/dirt/dust, +/obj/item/wrench, +/obj/item/stack/cable_coil, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"pUG" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/spawner/random/trash/mess, +/turf/open/floor/plating, +/area/station/maintenance/department/engine) +"pUH" = ( +/obj/machinery/holopad{ + pixel_x = 1 + }, +/obj/effect/turf_decal/bot, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/exit/departure_lounge) +"pUJ" = ( +/obj/machinery/light/warm/directional/north, +/obj/effect/landmark/event_spawn, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/turf/open/floor/wood/tile, +/area/station/service/bar) +"pUW" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"pUY" = ( +/obj/structure/rack, +/obj/item/paper_bin/construction, +/obj/item/airlock_painter, +/obj/item/rcl/pre_loaded, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/light/small/directional/south, +/turf/open/floor/iron/textured, +/area/station/commons/storage/art) +"pVh" = ( +/obj/machinery/light/warm/directional/south, +/obj/effect/turf_decal/siding/wood, +/turf/open/floor/wood/tile, +/area/station/service/bar) +"pVx" = ( +/obj/structure/broken_flooring/side/directional/west, +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/light/small/broken/directional/east, +/turf/open/floor/plating, +/area/station/hallway/primary/starboard) +"pVB" = ( +/obj/structure/lattice, +/obj/effect/turf_decal/stripes/asteroid/line{ + dir = 9 + }, +/turf/open/misc/asteroid, +/area/station/hallway/primary/starboard) +"pVC" = ( +/obj/machinery/computer/station_alert, +/obj/effect/turf_decal/tile/yellow/half/contrasted, +/obj/machinery/light/directional/north, +/turf/open/floor/iron/dark, +/area/station/command/bridge) +"pVG" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/heat_exchanging/manifold/layer2{ + dir = 1 + }, +/turf/open/floor/iron/dark/airless, +/area/station/science/ordnance) +"pWa" = ( +/obj/machinery/light/directional/west, +/obj/structure/table, +/obj/item/food/candy_trash/nicotine, +/turf/open/floor/iron, +/area/station/commons/fitness/recreation) +"pWg" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/cargo/warehouse/upper) +"pWh" = ( +/obj/machinery/computer/security/telescreen/interrogation/directional/east, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/station/security/interrogation) +"pWn" = ( +/obj/structure/railing/corner{ + dir = 8 + }, +/obj/structure/cable, +/turf/open/floor/iron/dark/corner{ + dir = 8 + }, +/area/station/command/meeting_room) +"pWr" = ( +/obj/effect/landmark/start/chemist, +/obj/structure/chair/office/light, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/white, +/area/station/medical/chemistry) +"pWw" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/port/lesser) +"pWB" = ( +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 8 + }, +/obj/item/radio/intercom/directional/west, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/station/security/breakroom) +"pWC" = ( +/obj/machinery/photocopier{ + pixel_y = 3 + }, +/obj/effect/turf_decal/tile/red/anticorner/contrasted{ + dir = 8 + }, +/obj/machinery/button/door/directional/south{ + id = "brigdesk"; + name = "shutter control"; + pixel_x = -24 + }, +/turf/open/floor/iron, +/area/station/security/brig/entrance) +"pWE" = ( +/obj/structure/cable, +/turf/open/floor/iron/textured, +/area/station/engineering/storage/tech) +"pWG" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable/layer1, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"pWL" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/blood/tracks{ + dir = 10 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/cargo/warehouse/upper) +"pWP" = ( +/obj/structure/broken_flooring/side/directional/west, +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/hallway/primary/starboard) +"pWW" = ( +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 8 + }, +/obj/item/radio/intercom/directional/west, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/turf/open/floor/iron, +/area/station/security/warden) +"pXn" = ( +/obj/effect/turf_decal/tile/dark_blue/anticorner/contrasted, +/obj/machinery/vending/cigarette, +/obj/machinery/camera/autoname/directional/east, +/turf/open/floor/iron, +/area/station/command/meeting_room) +"pXp" = ( +/obj/effect/spawner/structure/window, +/obj/structure/curtain/cloth/fancy/mechanical/start_closed{ + id = "neverstopgambling" + }, +/turf/open/floor/plating, +/area/station/maintenance/central/lesser) +"pXr" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/turf/open/floor/iron, +/area/station/security/interrogation) +"pXs" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment, +/turf/open/floor/wood/large, +/area/station/cargo/boutique) +"pXA" = ( +/obj/structure/broken_flooring/side/directional/north, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/light/floor/broken, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/hallway/primary/central) +"pXB" = ( +/obj/structure/sign/painting/library_secure{ + pixel_y = -32 + }, +/obj/effect/turf_decal/siding/wood, +/turf/open/floor/wood, +/area/station/service/library) +"pXC" = ( +/obj/structure/table, +/obj/machinery/microwave, +/obj/structure/window/spawner/directional/north, +/obj/item/radio/intercom/directional/east, +/turf/open/floor/iron/kitchen, +/area/station/service/kitchen) +"pXS" = ( +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/plating, +/area/station/maintenance/port/lesser) +"pXV" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/obj/machinery/door/poddoor/preopen{ + id = "Xenolab"; + name = "Test Chamber Blast Door" + }, +/turf/open/floor/engine, +/area/station/science/xenobiology) +"pXX" = ( +/obj/machinery/door/airlock/command{ + name = "Quartermaster's Office" + }, +/obj/effect/mapping_helpers/airlock/access/all/supply/qm, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/showroomfloor, +/area/station/command/heads_quarters/qm) +"pYu" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/wood, +/area/station/commons/lounge) +"pYw" = ( +/obj/machinery/power/apc/auto_name/directional/south, +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/chair/stool/directional/west, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/aisat/uppernorth) +"pYE" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/commons/fitness/recreation) +"pYM" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/machinery/power/apc/auto_name/directional/east, +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/security/prison/garden) +"pYX" = ( +/obj/effect/spawner/random/structure/grille, +/turf/open/floor/plating, +/area/station/maintenance/department/engine) +"pYY" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/commons/locker) +"pZj" = ( +/obj/structure/toilet{ + dir = 1 + }, +/turf/open/floor/iron/showroomfloor, +/area/station/command/heads_quarters/qm) +"pZG" = ( +/turf/open/floor/iron/dark/textured_half, +/area/station/science/xenobiology) +"pZH" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/spawner/random/structure/grille, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"pZP" = ( +/obj/machinery/atmospherics/pipe/multiz/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/multiz/scrubbers/visible/layer2, +/turf/open/floor/plating, +/area/station/maintenance/department/science) +"qad" = ( +/obj/structure/lattice/catwalk, +/obj/structure/railing, +/turf/open/openspace, +/area/station/science/xenobiology) +"qaz" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/structure/sign/directions/science/directional/north{ + dir = 4 + }, +/obj/structure/sign/directions/command/directional/north{ + pixel_y = 40; + dir = 8 + }, +/obj/structure/sign/directions/evac/directional/north{ + pixel_y = 24; + dir = 2 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"qaE" = ( +/obj/effect/landmark/start/janitor, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/firealarm/directional/east, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/service/janitor) +"qaI" = ( +/obj/structure/chair{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/light_switch/directional/south{ + pixel_x = -10 + }, +/turf/open/floor/iron/white, +/area/station/medical/patients_rooms/room_b) +"qaO" = ( +/obj/effect/turf_decal/tile/neutral, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"qaS" = ( +/obj/effect/turf_decal/sand/plating, +/obj/effect/spawner/random/structure/tank_holder, +/turf/open/floor/plating, +/area/station/maintenance/central/greater) +"qaV" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/structure/barricade/wooden, +/obj/machinery/light/floor, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"qaZ" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 1 + }, +/turf/open/floor/engine, +/area/station/engineering/supermatter) +"qbd" = ( +/obj/effect/turf_decal/siding/purple{ + dir = 5 + }, +/obj/structure/table, +/obj/effect/spawner/random/food_or_drink/snack, +/turf/open/floor/iron/white/textured_large, +/area/station/science/research) +"qbk" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/greenglow/filled, +/turf/open/floor/iron/white, +/area/station/medical/chemistry/minisat) +"qbA" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"qbN" = ( +/turf/open/floor/iron/textured, +/area/station/security/courtroom) +"qbW" = ( +/obj/structure/stairs/north, +/obj/structure/railing{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/security) +"qcQ" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 8 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/main) +"qcS" = ( +/obj/structure/table, +/obj/item/storage/box/chemimp{ + pixel_x = 6; + pixel_y = 19 + }, +/obj/item/storage/box/handcuffs{ + pixel_y = 19; + pixel_x = -6 + }, +/obj/item/storage/box/flashbangs{ + pixel_x = 6; + pixel_y = 1 + }, +/obj/item/storage/box/trackimp{ + pixel_y = 1; + pixel_x = -6 + }, +/obj/effect/turf_decal/tile/blue/half/contrasted{ + dir = 4 + }, +/obj/machinery/camera/autoname/directional/west, +/turf/open/floor/iron/dark, +/area/station/security/lockers) +"qcU" = ( +/turf/closed/wall, +/area/station/maintenance/disposal/incinerator) +"qdc" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/carpet, +/area/station/service/chapel) +"qdl" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/visible/layer2, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light_switch/directional/west, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) +"qdo" = ( +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured, +/area/station/science/robotics/lab) +"qdt" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/commons/locker) +"qdA" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/medical/treatment_center) +"qdR" = ( +/obj/structure/table/wood, +/obj/item/flashlight/flare/candle{ + start_on = 1; + icon_state = "candle1_lit" + }, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/machinery/camera/autoname/directional/north, +/turf/open/floor/carpet, +/area/station/service/chapel) +"qdV" = ( +/turf/open/openspace, +/area/station/engineering/atmos/upper) +"qdW" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/textured, +/area/station/cargo/miningoffice) +"qeg" = ( +/obj/machinery/pdapainter/security, +/obj/machinery/camera/autoname/directional/north, +/turf/open/floor/iron/dark, +/area/station/command/heads_quarters/hos) +"qej" = ( +/obj/structure/rack, +/obj/item/flashlight, +/obj/item/clothing/gloves/color/fyellow, +/obj/item/book/manual/wiki/engineering_hacking{ + pixel_x = -3; + pixel_y = 3 + }, +/obj/item/book/manual/wiki/engineering_guide, +/obj/item/book/manual/wiki/engineering_construction{ + pixel_x = 3; + pixel_y = -3 + }, +/obj/item/airlock_painter, +/obj/item/crowbar, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/newscaster/directional/north, +/turf/open/floor/iron, +/area/station/commons/storage/primary) +"qen" = ( +/obj/machinery/computer/upload/borg{ + dir = 1 + }, +/obj/machinery/power/apc/auto_name/directional/west, +/obj/structure/cable, +/turf/open/floor/circuit, +/area/station/ai_monitored/turret_protected/ai_upload) +"qeo" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/mapping_helpers/broken_floor, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/service/cafeteria) +"qez" = ( +/obj/structure/cable, +/obj/structure/ladder, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/science/xenobiology) +"qeA" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark/side{ + dir = 10 + }, +/area/station/command/corporate_dock) +"qeN" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/landmark/blobstart, +/turf/open/floor/iron, +/area/station/engineering/gravity_generator) +"qeP" = ( +/obj/structure/frame/machine, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/iron, +/area/station/maintenance/department/medical/central) +"qeW" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/maintenance/department/engine) +"qeY" = ( +/obj/machinery/meter, +/obj/machinery/atmospherics/pipe/smart/simple/dark/visible{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/science/ordnance) +"qfu" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/white/textured_large, +/area/station/science/genetics) +"qfB" = ( +/turf/closed/wall, +/area/station/medical/pharmacy) +"qfJ" = ( +/obj/structure/sign/poster/random/directional/north, +/obj/structure/table/wood/fancy/orange, +/obj/item/flashlight/lamp, +/turf/open/floor/carpet/red, +/area/station/command/heads_quarters/qm) +"qgd" = ( +/obj/structure/cable, +/obj/effect/turf_decal/tile/dark_blue, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/junction/flip{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/hallway/secondary/command) +"qgn" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/command/heads_quarters/hop) +"qgA" = ( +/obj/structure/window/spawner/directional/east, +/obj/structure/table, +/obj/item/dest_tagger{ + pixel_x = 4; + pixel_y = -2 + }, +/obj/item/stamp{ + pixel_x = 5; + pixel_y = 12 + }, +/obj/item/paper_bin/bundlenatural{ + pixel_x = -14; + pixel_y = -3 + }, +/obj/item/stamp/denied{ + pixel_x = -5; + pixel_y = 12 + }, +/obj/item/radio/intercom/directional/south, +/turf/open/floor/iron/textured_large, +/area/station/cargo/sorting) +"qgD" = ( +/obj/structure/closet/radiation, +/obj/effect/turf_decal/delivery, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) +"qgE" = ( +/obj/structure/table/wood, +/obj/item/flashlight/lamp/green{ + pixel_x = 1; + pixel_y = 5 + }, +/turf/open/floor/carpet, +/area/station/service/lawoffice) +"qgK" = ( +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 1 + }, +/obj/structure/extinguisher_cabinet/directional/north, +/obj/item/kirbyplants/random, +/turf/open/floor/iron, +/area/station/security) +"qgY" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/landmark/event_spawn, +/obj/machinery/holopad, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/textured_large, +/area/station/engineering/storage/tech) +"qhg" = ( +/obj/structure/cable, +/obj/machinery/door/airlock/command, +/obj/effect/mapping_helpers/airlock/access/any/command/general, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/mapping_helpers/airlock/access/any/admin/general, +/turf/open/floor/iron/dark/smooth_large, +/area/station/command/emergency_closet) +"qhm" = ( +/obj/effect/turf_decal/sand/plating, +/obj/effect/turf_decal/stripes/asteroid/line{ + dir = 4 + }, +/obj/machinery/camera/autoname/directional/south, +/turf/open/floor/plating, +/area/station/hallway/secondary/entry) +"qhu" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment, +/obj/machinery/newscaster/directional/west, +/turf/open/floor/iron/white, +/area/station/medical/treatment_center) +"qhw" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/airalarm/directional/south, +/obj/machinery/space_heater, +/turf/open/floor/plating, +/area/station/maintenance/port/lesser) +"qhG" = ( +/turf/closed/wall/r_wall, +/area/station/maintenance/disposal/incinerator) +"qhP" = ( +/turf/closed/wall/r_wall, +/area/station/security/execution/education) +"qhS" = ( +/obj/structure/disposalpipe/junction/flip{ + dir = 1 + }, +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"qia" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/circuit/green, +/area/station/ai_monitored/command/nuke_storage) +"qic" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/port/greater) +"qie" = ( +/obj/effect/turf_decal/tile/red/half/contrasted, +/turf/open/floor/iron, +/area/station/security) +"qif" = ( +/obj/effect/turf_decal/tile/brown/half/contrasted, +/obj/structure/cable, +/obj/machinery/camera/autoname/directional/south, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/cargo/storage) +"qih" = ( +/obj/effect/turf_decal/stripes, +/obj/structure/closet/radiation, +/obj/machinery/light/directional/south, +/turf/open/floor/iron/dark, +/area/station/engineering/atmospherics_engine) +"qii" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron/white/smooth_edge{ + dir = 4 + }, +/area/station/science/research) +"qil" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/obj/item/kirbyplants/random, +/obj/structure/sign/poster/random/directional/east, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"qio" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"qir" = ( +/obj/effect/turf_decal/tile/red/anticorner/contrasted{ + dir = 1 + }, +/obj/machinery/disposal/bin, +/obj/machinery/light/small/dim/directional/west, +/obj/structure/disposalpipe/trunk, +/turf/open/floor/iron, +/area/station/security/warden) +"qiu" = ( +/obj/item/radio/intercom/directional/north, +/obj/machinery/camera/autoname/directional/north, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/wood, +/area/station/commons/lounge) +"qiJ" = ( +/obj/machinery/computer/mech_bay_power_console{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/camera/autoname/directional/west, +/turf/open/floor/iron, +/area/station/security/mechbay) +"qjc" = ( +/obj/structure/cable, +/obj/machinery/door/airlock/external{ + name = "Solar Maintenance" + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 8 + }, +/turf/open/floor/plating, +/area/station/maintenance/solars/port/fore) +"qjp" = ( +/obj/structure/flora/bush/flowers_yw/style_random, +/obj/structure/window/spawner/directional/north, +/turf/open/misc/grass, +/area/station/ai_monitored/turret_protected/aisat/foyer) +"qjw" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/engineering/break_room) +"qjW" = ( +/obj/effect/spawner/random/vending/colavend, +/obj/effect/turf_decal/siding/brown{ + dir = 5 + }, +/obj/effect/turf_decal/tile/bar/opposingcorners, +/obj/machinery/light/warm/directional/south, +/turf/open/floor/iron, +/area/station/commons/lounge) +"qjY" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/security/execution/transfer) +"qka" = ( +/turf/open/floor/iron/dark, +/area/station/command/heads_quarters/hop) +"qkv" = ( +/obj/machinery/door/airlock/public{ + name = "Jim Norton's Quebecois Coffee" + }, +/obj/effect/mapping_helpers/airlock/access/any/service/general, +/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/service/cafeteria) +"qkw" = ( +/obj/machinery/computer/mecha{ + dir = 1 + }, +/obj/effect/turf_decal/tile/red/opposingcorners, +/obj/machinery/airalarm/directional/south, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/science) +"qkC" = ( +/obj/effect/turf_decal/stripes/corner, +/obj/machinery/button/door/directional/south{ + id = "abrobo"; + name = "Shutter Control" + }, +/obj/structure/rack, +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/decal/cleanable/dirt/dust, +/obj/item/flashlight/seclite, +/obj/item/screwdriver, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"qlc" = ( +/obj/effect/spawner/random/structure/chair_comfy{ + dir = 1 + }, +/obj/structure/cable, +/obj/effect/turf_decal/tile/dark_blue/half/contrasted{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/dark, +/area/station/command/bridge) +"qlh" = ( +/obj/structure/falsewall, +/turf/open/floor/plating, +/area/station/maintenance/department/medical) +"qlE" = ( +/obj/structure/fence/post{ + dir = 8 + }, +/turf/open/floor/catwalk_floor, +/area/station/cargo/storage) +"qlG" = ( +/obj/structure/window/spawner/directional/east, +/obj/structure/table, +/obj/structure/extinguisher_cabinet/directional/north, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured_corner{ + dir = 8 + }, +/area/station/science/breakroom) +"qlO" = ( +/obj/structure/table, +/obj/item/stock_parts/capacitor, +/obj/effect/spawner/random/maintenance/two, +/obj/structure/broken_flooring/side/directional/south, +/turf/open/floor/plating, +/area/station/maintenance/department/medical) +"qmc" = ( +/obj/machinery/disposal/bin, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/security/interrogation) +"qmf" = ( +/obj/machinery/airalarm/directional/west, +/turf/open/floor/circuit/green, +/area/station/ai_monitored/command/nuke_storage) +"qmg" = ( +/obj/structure/table/wood, +/obj/item/stock_parts/power_store/cell/crap, +/obj/item/clothing/head/collectable/hop{ + name = "novelty HoP hat" + }, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/turf/open/floor/wood/tile, +/area/station/command/corporate_showroom) +"qml" = ( +/obj/machinery/chem_master, +/obj/effect/turf_decal/trimline/yellow/filled/line, +/obj/item/radio/intercom/directional/south, +/turf/open/floor/iron/white, +/area/station/medical/chemistry) +"qmo" = ( +/obj/structure/chair/wood, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/effect/landmark/event_spawn, +/obj/structure/cable, +/turf/open/floor/carpet, +/area/station/service/chapel/funeral) +"qmp" = ( +/obj/structure/table/wood, +/obj/effect/spawner/random/bureaucracy/paper{ + pixel_y = 5; + spawn_loot_count = 6; + spawn_random_offset = 3; + loot = list(/obj/item/paper = 20, /obj/item/paper/crumpled = 2, /obj/item/paper/crumpled/muddy = 2, /obj/item/paper/construction = 1, /obj/item/paper/carbon = 1) + }, +/obj/item/stamp/granted, +/turf/open/floor/carpet/executive, +/area/station/command/meeting_room) +"qms" = ( +/obj/structure/cable, +/obj/effect/spawner/structure/window/hollow/reinforced/end{ + dir = 4 + }, +/obj/machinery/door/firedoor, +/turf/open/floor/plating, +/area/station/hallway/secondary/command) +"qmD" = ( +/obj/machinery/door/airlock/engineering/glass{ + name = "Primary Tool Storage" + }, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/commons/storage/primary) +"qmI" = ( +/obj/effect/turf_decal/tile/purple/fourcorners, +/obj/machinery/light/small/directional/north, +/turf/open/floor/iron, +/area/station/science/ordnance) +"qmU" = ( +/obj/item/radio/intercom/command/directional/west, +/turf/open/floor/glass, +/area/station/command/meeting_room) +"qmY" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 6 + }, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/obj/structure/cable, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/medical/treatment_center) +"qnh" = ( +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/dark, +/area/station/command/bridge) +"qnm" = ( +/obj/structure/urinal/directional/north, +/turf/open/floor/iron/showroomfloor, +/area/station/cargo/storage) +"qnq" = ( +/obj/structure/railing{ + dir = 8 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) +"qnQ" = ( +/obj/effect/turf_decal/stripes/line, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/mapping_helpers/dead_body_placer{ + bodycount = 1 + }, +/turf/open/floor/iron/white/smooth_half, +/area/station/science/robotics/lab) +"qnV" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light/small/broken/directional/north, +/obj/machinery/atmospherics/components/tank/oxygen{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/department/science) +"qob" = ( +/obj/structure/table, +/obj/item/stock_parts/micro_laser{ + pixel_x = -6; + pixel_y = 4 + }, +/obj/item/stock_parts/micro_laser{ + pixel_x = -2; + pixel_y = 2 + }, +/obj/item/stock_parts/micro_laser{ + pixel_x = 2 + }, +/obj/item/stock_parts/micro_laser{ + pixel_x = 6; + pixel_y = -2 + }, +/obj/effect/turf_decal/tile/brown/anticorner/contrasted{ + dir = 8 + }, +/obj/machinery/light_switch/directional/west, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/cargo/drone_bay) +"qod" = ( +/obj/machinery/door/airlock/external, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, +/turf/open/floor/plating, +/area/station/maintenance/disposal) +"qof" = ( +/obj/structure/bed/medical{ + dir = 4 + }, +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/machinery/defibrillator_mount/directional/north, +/turf/open/floor/iron/white, +/area/station/medical/treatment_center) +"qog" = ( +/obj/effect/landmark/start/head_of_security, +/obj/machinery/shower/directional/south, +/obj/structure/curtain, +/obj/item/bikehorn/rubberducky/plasticducky, +/turf/open/floor/iron/showroomfloor, +/area/station/command/heads_quarters/hos) +"qoj" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/engine, +/area/station/science/xenobiology) +"qoJ" = ( +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/airalarm/directional/east, +/turf/open/floor/plating, +/area/station/maintenance/central/lesser) +"qoN" = ( +/turf/closed/mineral/random/stationside/asteroid/porus{ + mineralChance = 20 + }, +/area/station/maintenance/department/medical) +"qoO" = ( +/obj/structure/window/spawner/directional/south, +/turf/open/floor/iron/dark, +/area/station/commons/fitness/recreation) +"qpb" = ( +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/wood, +/area/station/maintenance/central/lesser) +"qpc" = ( +/obj/machinery/camera/autoname/directional/east{ + network = list("aicore") + }, +/turf/open/floor/catwalk_floor/iron_dark/telecomms, +/area/station/ai_monitored/turret_protected/ai) +"qpj" = ( +/obj/machinery/turretid{ + name = "Telecomms turret control"; + control_area = /area/station/tcommsat/server; + req_access = list("tcomms") + }, +/turf/closed/wall/r_wall, +/area/station/tcommsat/server) +"qpr" = ( +/obj/effect/turf_decal/stripes{ + dir = 4 + }, +/obj/effect/turf_decal/arrows/white{ + dir = 8 + }, +/turf/open/floor/engine, +/area/station/engineering/atmospherics_engine) +"qpt" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) +"qpD" = ( +/obj/structure/chair/sofa/bench/left{ + dir = 1 + }, +/obj/structure/cable, +/obj/effect/landmark/start/prisoner, +/turf/open/floor/iron, +/area/station/security/prison) +"qpO" = ( +/obj/machinery/firealarm/directional/east, +/turf/open/floor/carpet/orange, +/area/station/service/theater) +"qpR" = ( +/obj/structure/chair{ + dir = 8 + }, +/mob/living/basic/mouse, +/obj/effect/mapping_helpers/mob_buckler, +/turf/open/floor/iron/checker, +/area/station/maintenance/department/medical) +"qqh" = ( +/obj/machinery/computer/apc_control{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/yellow/filled/line, +/turf/open/floor/iron, +/area/station/command/heads_quarters/ce) +"qqq" = ( +/obj/structure/table/reinforced, +/obj/machinery/coffeemaker{ + pixel_y = 5 + }, +/obj/effect/turf_decal/tile/red/anticorner/contrasted{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/turf/open/floor/iron/half, +/area/station/security/breakroom) +"qqy" = ( +/obj/structure/rack, +/obj/effect/spawner/random/techstorage/tcomms_all, +/turf/open/floor/iron/textured, +/area/station/engineering/storage/tech) +"qqz" = ( +/obj/structure/sign/departments/holy/directional/east, +/obj/effect/spawner/random/vending/snackvend, +/obj/effect/turf_decal/stripes, +/turf/open/floor/iron/dark/textured, +/area/station/hallway/secondary/exit/departure_lounge) +"qqB" = ( +/obj/effect/turf_decal/stripes, +/obj/machinery/light/directional/south, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"qqH" = ( +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 4 + }, +/obj/structure/chair{ + dir = 8 + }, +/obj/machinery/flasher/directional/east{ + id = "secentry" + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/station/security/brig/entrance) +"qqL" = ( +/obj/item/kirbyplants/random, +/obj/structure/sign/directions/vault/directional/west, +/turf/open/floor/carpet/red, +/area/station/command/heads_quarters/qm) +"qqQ" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/iron/dark/smooth_edge{ + dir = 1 + }, +/area/station/science/xenobiology) +"qrg" = ( +/obj/effect/turf_decal/stripes/corner, +/turf/open/floor/plating, +/area/station/maintenance/department/medical) +"qrh" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/hallway/secondary/command) +"qrj" = ( +/obj/structure/table/wood, +/obj/effect/decal/cleanable/dirt, +/obj/item/storage/crayons{ + pixel_x = 2; + pixel_y = 2 + }, +/turf/open/floor/plating, +/area/station/service/theater) +"qrl" = ( +/turf/open/floor/wood, +/area/station/commons/lounge) +"qrm" = ( +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/item/radio/intercom/directional/west, +/turf/open/floor/iron, +/area/station/construction/mining/aux_base) +"qro" = ( +/obj/structure/table/glass, +/obj/structure/reagent_dispensers/wall/virusfood/directional/west, +/obj/machinery/reagentgrinder{ + pixel_y = 8 + }, +/obj/effect/turf_decal/tile/green/half/contrasted{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/station/medical/virology) +"qrs" = ( +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/cargo/storage) +"qrt" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/obj/structure/cable/layer3, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/command/storage/satellite) +"qru" = ( +/obj/structure/cable, +/obj/structure/chair/sofa/bench/right, +/obj/effect/landmark/start/prisoner, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/security/prison) +"qry" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/iron/dark, +/area/station/maintenance/department/engine) +"qrF" = ( +/obj/effect/turf_decal/tile/brown/half/contrasted, +/obj/machinery/light/directional/south, +/turf/open/floor/iron, +/area/station/cargo/storage) +"qrQ" = ( +/obj/machinery/door/airlock/maintenance_hatch{ + name = "Xenobiology Maintenance" + }, +/obj/structure/cable, +/obj/effect/mapping_helpers/airlock/access/all/science/xenobio, +/turf/open/floor/plating, +/area/station/science/xenobiology) +"qrY" = ( +/obj/structure/railing{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark/side{ + dir = 4 + }, +/area/station/command/meeting_room) +"qsa" = ( +/obj/machinery/air_sensor/nitrous_tank, +/turf/open/floor/engine/n2o, +/area/station/engineering/atmos) +"qsu" = ( +/obj/machinery/light/directional/north, +/obj/machinery/rnd/production/protolathe/department/engineering, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/engineering/break_room) +"qsx" = ( +/obj/machinery/door/airlock{ + id_tag = "u2"; + name = "Unit 2" + }, +/turf/open/floor/iron/freezer, +/area/station/commons/toilet/restrooms) +"qsI" = ( +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark/side{ + dir = 4 + }, +/area/station/command/gateway) +"qtc" = ( +/obj/effect/landmark/start/clown, +/turf/open/floor/carpet/orange, +/area/station/service/theater) +"qtg" = ( +/obj/structure/cable, +/obj/effect/landmark/event_spawn, +/obj/machinery/holopad, +/turf/open/floor/carpet/executive, +/area/station/command/heads_quarters/captain/private) +"qtx" = ( +/obj/effect/turf_decal/siding/purple{ + dir = 4 + }, +/turf/open/floor/iron/white/smooth_large, +/area/station/science/research) +"qtP" = ( +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/hallway/secondary/exit/departure_lounge) +"qtT" = ( +/obj/structure/safe, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/bot_white, +/obj/item/gun/ballistic/shotgun/lethal, +/obj/item/stack/spacecash/c1000, +/obj/item/stack/spacecash/c1000, +/obj/item/stack/spacecash/c1000, +/obj/machinery/light_switch/directional/east, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/command/nuke_storage) +"qug" = ( +/obj/machinery/door/airlock/mining{ + name = "Mining Office" + }, +/obj/effect/mapping_helpers/airlock/access/all/supply/mining, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/cargo/storage) +"quh" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/wood, +/area/station/commons/lounge) +"qun" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/turf/open/floor/engine, +/area/station/command/corporate_dock) +"qup" = ( +/obj/effect/turf_decal/tile/dark_red/opposingcorners, +/obj/machinery/vending/wardrobe/bar_wardrobe, +/obj/machinery/light_switch/directional/south, +/obj/machinery/power/apc/auto_name/directional/west, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/service/bar/backroom) +"qus" = ( +/obj/effect/turf_decal/siding/purple/corner{ + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/iron/white/smooth_large, +/area/station/science/research) +"quz" = ( +/obj/structure/tank_holder/anesthetic, +/obj/item/clothing/mask/breath/medical, +/turf/open/floor/engine, +/area/station/medical/chemistry) +"quD" = ( +/obj/structure/railing{ + dir = 10 + }, +/obj/effect/turf_decal/siding/wood/end, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/wood, +/area/station/command/heads_quarters/qm) +"quM" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/spawner/random/trash, +/turf/open/floor/plating, +/area/station/maintenance/department/science) +"quV" = ( +/obj/structure/cable, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/structure/sign/painting/library{ + pixel_x = -32 + }, +/turf/open/floor/wood/tile, +/area/station/service/bar) +"qvh" = ( +/obj/effect/turf_decal/siding/dark_blue, +/obj/machinery/holopad, +/turf/open/floor/iron/textured_large, +/area/station/command/bridge) +"qvA" = ( +/turf/closed/wall, +/area/station/medical/surgery) +"qvG" = ( +/obj/effect/spawner/structure/window, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"qvK" = ( +/obj/machinery/computer/records/security{ + dir = 8 + }, +/obj/structure/window/reinforced/spawner/directional/east, +/turf/open/floor/iron, +/area/station/security/brig/entrance) +"qvN" = ( +/obj/structure/sink/directional/west, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/iron, +/area/station/maintenance/department/medical/central) +"qvP" = ( +/obj/machinery/dna_scannernew, +/obj/structure/extinguisher_cabinet/directional/east, +/obj/item/radio/intercom/directional/north, +/turf/open/floor/iron/white, +/area/station/science/genetics) +"qvV" = ( +/obj/structure/cable, +/obj/effect/turf_decal/tile/green/fourcorners, +/obj/item/radio/intercom/directional/south, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/medical/virology) +"qvX" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/plating, +/area/station/engineering/supermatter/room) +"qwd" = ( +/obj/structure/table/wood, +/obj/item/storage/medkit{ + pixel_x = -10 + }, +/obj/item/toy/figure/ian{ + pixel_x = 5; + pixel_y = 12 + }, +/turf/open/floor/carpet/executive, +/area/station/command/meeting_room) +"qwu" = ( +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"qwG" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/port/greater) +"qwM" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/plating, +/area/station/maintenance/central/greater) +"qwQ" = ( +/obj/docking_port/stationary/mining_home{ + dir = 8 + }, +/turf/open/space/openspace, +/area/space) +"qxp" = ( +/obj/machinery/atmospherics/pipe/smart/manifold/green/visible{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/engineering/atmos) +"qxr" = ( +/obj/structure/cable, +/turf/open/floor/iron/kitchen, +/area/station/service/kitchen) +"qxE" = ( +/obj/structure/frame/computer, +/obj/item/shard, +/obj/item/shard, +/obj/effect/decal/cleanable/glass, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/tile/green/half/contrasted{ + dir = 1 + }, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/iron/white/textured, +/area/station/maintenance/department/medical/central) +"qxG" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/turf/open/floor/plating, +/area/station/maintenance/department/medical) +"qxU" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/wood, +/area/station/service/library) +"qxW" = ( +/obj/machinery/door/airlock/security/glass, +/obj/effect/turf_decal/tile/red/fourcorners, +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/structure/cable, +/obj/effect/mapping_helpers/airlock/access/all/security/brig, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/security/processing) +"qyg" = ( +/obj/structure/railing{ + dir = 5 + }, +/obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ + dir = 4 + }, +/obj/structure/sign/poster/contraband/cc64k_ad/directional/west, +/turf/open/floor/iron/dark, +/area/station/cargo/bitrunning/den) +"qyq" = ( +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/white, +/area/station/medical/chemistry/minisat) +"qyv" = ( +/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ + dir = 5 + }, +/obj/structure/broken_flooring/pile, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"qyz" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/structure/chair/stool/directional/south, +/obj/machinery/airalarm/directional/west, +/turf/open/floor/iron/dark, +/area/station/security/courtroom) +"qyG" = ( +/obj/machinery/holopad/secure, +/obj/effect/turf_decal/bot, +/obj/structure/cable, +/turf/open/floor/carpet/executive, +/area/station/command/meeting_room) +"qyI" = ( +/obj/effect/turf_decal/tile/brown/half/contrasted, +/obj/machinery/light/dim/directional/south, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/cargo/storage) +"qyK" = ( +/obj/structure/chair/stool/bar/directional/west, +/obj/effect/turf_decal/siding/wood{ + dir = 6 + }, +/obj/effect/turf_decal/tile/bar/opposingcorners, +/turf/open/floor/iron, +/area/station/commons/lounge) +"qzu" = ( +/obj/machinery/vending/boozeomat, +/obj/effect/turf_decal/tile/dark_red/opposingcorners, +/turf/open/floor/iron/dark, +/area/station/service/bar) +"qzF" = ( +/obj/structure/transport/linear/public, +/obj/effect/landmark/transport/transport_id{ + specific_transport_id = "cargo" + }, +/turf/open/floor/plating/elevatorshaft, +/area/station/cargo/storage) +"qzZ" = ( +/obj/structure/cable, +/turf/open/floor/plating/airless, +/area/station/solars/port) +"qAh" = ( +/obj/machinery/status_display/evac/directional/north, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/iron/dark, +/area/station/maintenance/radshelter/civil) +"qAo" = ( +/obj/effect/turf_decal/tile/neutral, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/sign/directions/security/directional/south{ + pixel_y = -24; + dir = 8 + }, +/obj/structure/sign/directions/supply/directional/south{ + dir = 8 + }, +/obj/structure/sign/directions/engineering/directional/south{ + pixel_y = -40 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"qAp" = ( +/mob/living/basic/mining/goliath/ancient, +/turf/open/misc/asteroid/airless, +/area/station/asteroid) +"qAI" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/spawner/random/maintenance, +/obj/effect/spawner/random/structure/table_or_rack, +/turf/open/floor/plating, +/area/station/maintenance/port/lesser) +"qAS" = ( +/obj/effect/spawner/random/structure/tank_holder, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"qAU" = ( +/obj/structure/sign/warning/explosives/directional/north, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 + }, +/obj/machinery/vending/drugs, +/obj/effect/turf_decal/trimline/yellow/filled/warning{ + dir = 10 + }, +/turf/open/floor/iron/white, +/area/station/medical/chemistry) +"qBf" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/wood, +/area/station/service/theater) +"qBj" = ( +/obj/effect/turf_decal/tile/red/half/contrasted, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/security/office) +"qBt" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/aisat/foyer) +"qBu" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/light/small/broken/directional/east, +/turf/open/floor/iron, +/area/station/cargo/warehouse/upper) +"qBB" = ( +/obj/structure/rack, +/obj/effect/spawner/random/techstorage/service_all, +/obj/effect/spawner/random/techstorage/arcade_boards, +/obj/item/radio/intercom/directional/east, +/turf/open/floor/iron/textured, +/area/station/engineering/storage/tech) +"qBK" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment, +/obj/machinery/duct, +/obj/effect/turf_decal/trimline/blue/filled/corner{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/station/medical/treatment_center) +"qCd" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/turf/open/floor/iron/chapel{ + dir = 8 + }, +/area/station/service/chapel) +"qCf" = ( +/obj/effect/turf_decal/sand/plating, +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/spawner/random/trash/mess, +/turf/open/floor/plating, +/area/station/maintenance/central/greater) +"qCy" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 1 + }, +/obj/structure/disposalpipe/trunk/multiz, +/turf/open/floor/iron/white, +/area/station/medical/storage) +"qCE" = ( +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/iron/dark/side{ + dir = 8 + }, +/area/station/security/execution/transfer) +"qCT" = ( +/obj/machinery/computer/rdconsole, +/obj/structure/cable, +/obj/effect/turf_decal/tile/green/half/contrasted, +/turf/open/floor/iron/dark, +/area/station/command/bridge) +"qCU" = ( +/obj/structure/cable, +/obj/structure/window/reinforced/spawner/directional/west, +/obj/structure/window/reinforced/spawner/directional/east, +/turf/open/floor/glass/reinforced, +/area/station/security/prison) +"qDb" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"qDg" = ( +/obj/effect/turf_decal/stripes, +/obj/machinery/light/directional/north, +/obj/structure/closet/emcloset, +/turf/open/floor/iron/dark/textured, +/area/station/hallway/secondary/exit/departure_lounge) +"qDl" = ( +/obj/structure/lattice/catwalk, +/turf/open/openspace/telecomms, +/area/station/ai_monitored/turret_protected/ai) +"qDH" = ( +/obj/structure/chair/sofa/corner/maroon, +/obj/item/toy/plush/moth{ + name = "Mender Moff" + }, +/turf/open/floor/carpet, +/area/station/medical/psychology) +"qDP" = ( +/obj/structure/lattice/catwalk, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/space/basic, +/area/space/nearstation) +"qDQ" = ( +/obj/structure/closet/secure_closet/hydroponics, +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/obj/machinery/light_switch/directional/west, +/obj/machinery/camera/autoname/directional/north, +/turf/open/floor/iron, +/area/station/service/hydroponics) +"qDR" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/engineering/storage) +"qDU" = ( +/obj/structure/table, +/obj/machinery/computer/records/medical/laptop, +/obj/effect/turf_decal/tile/blue/half/contrasted{ + dir = 1 + }, +/obj/machinery/light/small/directional/north, +/turf/open/floor/iron/white, +/area/station/security/medical) +"qEh" = ( +/obj/effect/turf_decal/tile/red/opposingcorners, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/security) +"qEm" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/freezer, +/area/station/security/prison/shower) +"qEn" = ( +/obj/structure/destructible/cult/item_dispenser/archives/library, +/obj/item/book/codex_gigas, +/turf/open/floor/engine/cult, +/area/station/service/library) +"qEC" = ( +/obj/effect/turf_decal/stripes{ + dir = 1 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/portable_atmospherics/scrubber, +/turf/open/floor/iron/dark, +/area/station/engineering/atmospherics_engine) +"qEF" = ( +/obj/structure/punching_bag, +/obj/machinery/camera/autoname/directional/east, +/turf/open/floor/iron/white/textured_large, +/area/station/commons/fitness/recreation) +"qER" = ( +/obj/structure/chair/sofa/bench{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/turf/open/floor/iron/dark, +/area/station/security/courtroom) +"qET" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"qEX" = ( +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/iron, +/area/station/security) +"qFj" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/caution/stand_clear, +/turf/open/floor/catwalk_floor/iron_smooth, +/area/station/maintenance/disposal) +"qFn" = ( +/obj/machinery/door/airlock/external/glass{ + name = "Supply Door Airlock" + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 8 + }, +/obj/effect/mapping_helpers/airlock/access/all/supply/general, +/turf/open/floor/plating, +/area/station/cargo/storage) +"qFM" = ( +/obj/machinery/button/door/directional/north{ + id = "warehouse" + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/spawner/random/structure/closet_empty/crate, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/iron, +/area/station/cargo/warehouse) +"qFN" = ( +/obj/machinery/ai_slipper{ + uses = 10 + }, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/aisat/teleporter) +"qFS" = ( +/obj/structure/window/reinforced/spawner/directional/south, +/turf/open/floor/glass/reinforced, +/area/station/security/prison) +"qGk" = ( +/turf/closed/wall/r_wall, +/area/station/hallway/secondary/command) +"qGo" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/poddoor/shutters{ + id = "evashutter"; + name = "E.V.A. Storage Shutter" + }, +/obj/effect/turf_decal/delivery, +/turf/open/floor/iron, +/area/station/ai_monitored/command/storage/eva) +"qGr" = ( +/obj/machinery/door/poddoor/shutters/window/preopen{ + id = "ordstorage" + }, +/obj/effect/turf_decal/stripes/line, +/obj/structure/cable, +/obj/effect/turf_decal/caution/stand_clear/red, +/turf/open/floor/iron/white, +/area/station/science/ordnance/storage) +"qGB" = ( +/obj/machinery/ticket_machine/directional/north, +/obj/structure/chair/sofa/bench, +/turf/open/floor/iron/white, +/area/station/medical/exam_room) +"qGN" = ( +/obj/structure/table/wood, +/obj/effect/spawner/random/entertainment/deck, +/obj/machinery/light/small/directional/north, +/turf/open/misc/asteroid, +/area/station/maintenance/central/greater) +"qHd" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/door/airlock/mining{ + name = "Cargo Bay" + }, +/obj/effect/mapping_helpers/airlock/access/all/supply/general, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/machinery/door/firedoor, +/turf/open/floor/wood/large, +/area/station/cargo/boutique) +"qHf" = ( +/obj/item/storage/toolbox/emergency, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/blood/old, +/obj/machinery/light/small/directional/west, +/turf/open/floor/iron, +/area/station/maintenance/department/cargo) +"qHi" = ( +/obj/structure/railing{ + dir = 1 + }, +/turf/open/floor/catwalk_floor/iron_dark/telecomms, +/area/station/ai_monitored/turret_protected/ai) +"qHl" = ( +/obj/effect/turf_decal/tile/yellow/opposingcorners{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/iron/dark/corner, +/area/station/engineering/atmos/upper) +"qHp" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 6 + }, +/turf/open/floor/iron, +/area/station/engineering/main) +"qHs" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/light/warm/directional/west, +/turf/open/floor/iron/dark, +/area/station/medical/chemistry/minisat) +"qHv" = ( +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/obj/effect/turf_decal/sand/plating, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"qHx" = ( +/obj/machinery/porta_turret/ai{ + dir = 4 + }, +/turf/open/floor/circuit/green, +/area/station/ai_monitored/turret_protected/ai_upload) +"qHE" = ( +/obj/effect/decal/cleanable/rubble, +/turf/open/misc/asteroid/airless, +/area/station/asteroid) +"qHR" = ( +/obj/machinery/rnd/production/circuit_imprinter/department/science, +/obj/effect/turf_decal/delivery, +/obj/machinery/requests_console/auto_name/directional/east, +/obj/effect/mapping_helpers/requests_console/ore_update, +/obj/effect/mapping_helpers/requests_console/supplies, +/turf/open/floor/iron/dark/textured, +/area/station/science/robotics/lab) +"qIa" = ( +/obj/item/bedsheet/ian, +/obj/structure/bed, +/obj/effect/spawner/random/entertainment/plushie, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/cargo/miningoffice) +"qIf" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/white, +/area/station/hallway/secondary/entry) +"qIo" = ( +/obj/structure/cable/multilayer/multiz, +/turf/open/floor/plating, +/area/station/maintenance/department/science) +"qIr" = ( +/obj/structure/railing/corner, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/spawner/random/trash/mess, +/turf/open/floor/iron, +/area/station/maintenance/central/greater) +"qIA" = ( +/obj/structure/girder, +/turf/open/misc/asteroid, +/area/station/asteroid) +"qIJ" = ( +/obj/structure/table/wood, +/obj/effect/spawner/random/engineering/tool, +/turf/open/floor/carpet/executive, +/area/station/command/meeting_room) +"qIP" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/mapping_helpers/burnt_floor, +/turf/open/floor/plating, +/area/station/maintenance/central/greater) +"qIQ" = ( +/obj/structure/chair/office{ + dir = 8 + }, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/turf/open/floor/catwalk_floor/flat_white, +/area/station/science/lab) +"qIS" = ( +/obj/machinery/cryo_cell, +/obj/structure/window/reinforced/spawner/directional/west, +/obj/effect/turf_decal/tile/blue/fourcorners, +/turf/open/floor/iron/white, +/area/station/medical/treatment_center) +"qJo" = ( +/obj/structure/table/glass, +/obj/effect/spawner/random/medical/medkit, +/obj/item/clothing/glasses/hud/health, +/obj/machinery/light/cold/dim/directional/south, +/turf/open/floor/iron/dark/textured, +/area/station/command/heads_quarters/cmo) +"qJs" = ( +/obj/structure/cable, +/obj/structure/railing{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/engineering/lobby) +"qJt" = ( +/obj/structure/broken_flooring/side/directional/north, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/plating, +/area/station/hallway/primary/central) +"qJB" = ( +/obj/machinery/power/tracker, +/obj/structure/cable, +/turf/open/floor/plating/airless, +/area/station/solars/port/fore) +"qJN" = ( +/obj/machinery/power/apc/auto_name/directional/west, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/science/server) +"qJR" = ( +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 1 + }, +/obj/machinery/light/directional/north, +/obj/machinery/conveyor{ + dir = 4; + id = "QMLoad2" + }, +/turf/open/floor/iron, +/area/station/cargo/storage) +"qJV" = ( +/obj/structure/chair{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/turf/open/floor/plating/airless, +/area/station/science/ordnance/bomb) +"qJX" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/structure/sign/poster/official/random/directional/north, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"qKi" = ( +/obj/effect/landmark/start/hangover, +/turf/open/floor/engine{ + name = "Holodeck Projector Floor" + }, +/area/station/holodeck/rec_center) +"qKj" = ( +/obj/machinery/light/directional/north, +/obj/effect/turf_decal/tile/yellow{ + dir = 4 + }, +/turf/open/floor/iron/dark/corner{ + dir = 1 + }, +/area/station/engineering/atmos) +"qKm" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark/textured, +/area/station/science/robotics/lab) +"qKH" = ( +/turf/open/floor/glass/reinforced, +/area/station/science/research) +"qLc" = ( +/obj/effect/landmark/blobstart, +/obj/effect/spawner/random/trash/garbage{ + spawn_scatter_radius = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"qLg" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/duct, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/station/medical/treatment_center) +"qLk" = ( +/obj/structure/closet/bombcloset/security, +/obj/machinery/power/apc/auto_name/directional/south, +/obj/effect/turf_decal/tile/red/half/contrasted, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/security/lockers) +"qMd" = ( +/obj/effect/turf_decal/tile/dark_red/opposingcorners, +/obj/effect/landmark/start/bartender, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/service/bar/backroom) +"qMn" = ( +/obj/structure/bodycontainer/morgue, +/turf/open/floor/iron/dark/textured, +/area/station/medical/morgue) +"qMw" = ( +/obj/structure/chair/plastic, +/turf/open/floor/plating, +/area/station/engineering/main) +"qMA" = ( +/obj/machinery/door/airlock/maintenance_hatch, +/obj/effect/mapping_helpers/airlock/access/all/supply/general, +/obj/structure/disposalpipe/segment, +/obj/effect/mapping_helpers/airlock/unres, +/turf/open/floor/iron, +/area/station/cargo/sorting) +"qMC" = ( +/obj/structure/girder/displaced, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/department/engine) +"qMI" = ( +/obj/machinery/atmospherics/pipe/layer_manifold/scrubbers/hidden, +/turf/open/floor/iron/white, +/area/station/medical/treatment_center) +"qMK" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 + }, +/obj/machinery/digital_clock/directional/north, +/turf/open/floor/iron/white, +/area/station/medical/chemistry/minisat) +"qMV" = ( +/obj/effect/turf_decal/tile/neutral, +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"qMX" = ( +/obj/structure/railing{ + dir = 1 + }, +/obj/effect/turf_decal/tile/yellow{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/turf/open/floor/iron/dark/corner{ + dir = 4 + }, +/area/station/engineering/atmos/upper) +"qNo" = ( +/turf/open/floor/circuit/green, +/area/station/ai_monitored/command/nuke_storage) +"qNz" = ( +/obj/structure/railing{ + dir = 1 + }, +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 1 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/cargo/storage) +"qNM" = ( +/obj/machinery/portable_atmospherics/canister/carbon_dioxide, +/turf/open/floor/engine/co2, +/area/station/engineering/atmos) +"qNS" = ( +/obj/structure/bookcase/random/fiction, +/turf/open/floor/wood, +/area/station/service/library) +"qNU" = ( +/obj/effect/decal/cleanable/oil, +/obj/machinery/light/small/directional/west, +/turf/open/floor/plating, +/area/station/maintenance/port/lesser) +"qOs" = ( +/obj/effect/spawner/random/structure/table_or_rack, +/turf/open/floor/plating, +/area/station/maintenance/port/lesser) +"qOt" = ( +/obj/machinery/portable_atmospherics/canister, +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 8 + }, +/obj/effect/turf_decal/box/red, +/turf/open/floor/iron/dark, +/area/station/science/ordnance) +"qOz" = ( +/obj/structure/girder, +/turf/open/floor/plating, +/area/station/maintenance/port/greater) +"qOF" = ( +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/medical/treatment_center) +"qOG" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/rack, +/obj/effect/spawner/random/trash/janitor_supplies, +/obj/item/airlock_painter/decal, +/turf/open/floor/iron, +/area/station/cargo/warehouse) +"qOP" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/rack, +/obj/item/clothing/shoes/wheelys/rollerskates, +/obj/item/clothing/shoes/wheelys/rollerskates{ + pixel_y = 5 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/cargo/warehouse) +"qOY" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/engineering/storage) +"qOZ" = ( +/obj/machinery/door/airlock/research/glass{ + name = "Chemistry Minisat" + }, +/obj/effect/mapping_helpers/airlock/access/all/medical/chemistry, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 4 + }, +/obj/machinery/door/firedoor, +/turf/open/floor/iron/white, +/area/station/medical/chemistry/minisat) +"qPp" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/yellow{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) +"qPr" = ( +/obj/effect/turf_decal/siding/wood/corner, +/turf/open/floor/wood, +/area/station/service/theater) +"qPt" = ( +/obj/structure/table/reinforced, +/obj/item/stack/cable_coil, +/obj/machinery/firealarm/directional/north, +/turf/open/floor/iron, +/area/station/science/robotics/lab) +"qPx" = ( +/obj/structure/chair/wood, +/obj/effect/turf_decal/siding/wood{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/carpet, +/area/station/service/chapel/funeral) +"qPC" = ( +/obj/effect/turf_decal/stripes{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/engineering/storage) +"qPI" = ( +/obj/structure/table, +/obj/effect/turf_decal/siding/purple{ + dir = 1 + }, +/obj/machinery/coffeemaker, +/turf/open/floor/iron/white/herringbone, +/area/station/science/breakroom) +"qPN" = ( +/obj/structure/disposalpipe/junction{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"qPX" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/iron/dark/side{ + dir = 9 + }, +/area/station/command/meeting_room) +"qQi" = ( +/obj/structure/cable, +/obj/machinery/light/floor, +/obj/effect/turf_decal/trimline/purple/filled/arrow_ccw{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/purple/filled/arrow_ccw{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/white/smooth_large, +/area/station/science/research) +"qQm" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 9 + }, +/obj/item/kirbyplants/random, +/turf/open/floor/iron/white, +/area/station/medical/treatment_center) +"qQq" = ( +/obj/effect/landmark/carpspawn, +/obj/structure/lattice, +/turf/open/space/openspace, +/area/space/nearstation) +"qQr" = ( +/mob/living/carbon/human/species/monkey, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/flora/coconuts, +/turf/open/floor/grass, +/area/station/science/genetics) +"qQK" = ( +/obj/machinery/light/small/directional/east, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/service/theater) +"qQW" = ( +/obj/machinery/atmospherics/components/unary/portables_connector/visible, +/turf/open/floor/iron, +/area/station/engineering/atmos) +"qRb" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/plating, +/area/station/maintenance/port/lesser) +"qRe" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment, +/obj/structure/chair/office{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/white, +/area/station/medical/chemistry/minisat) +"qRf" = ( +/obj/machinery/power/apc/auto_name/directional/west, +/obj/structure/cable, +/obj/effect/spawner/random/trash/bin, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/iron, +/area/station/maintenance/solars/starboard/fore) +"qRp" = ( +/obj/effect/turf_decal/tile/brown/anticorner/contrasted{ + dir = 4 + }, +/obj/item/radio/intercom/directional/east, +/turf/open/floor/iron, +/area/station/cargo/drone_bay) +"qRr" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 6 + }, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/turf/open/floor/wood, +/area/station/service/cafeteria) +"qRu" = ( +/obj/structure/chair/stool/directional/west, +/turf/open/floor/iron, +/area/station/cargo/storage) +"qRF" = ( +/obj/effect/turf_decal/stripes{ + dir = 10 + }, +/turf/open/floor/engine, +/area/station/engineering/atmospherics_engine) +"qRJ" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/science/xenobiology) +"qRK" = ( +/obj/machinery/power/terminal{ + dir = 8 + }, +/obj/structure/cable, +/turf/open/floor/circuit/green/telecomms/mainframe, +/area/station/tcommsat/server) +"qRY" = ( +/obj/structure/railing, +/obj/structure/railing/corner{ + dir = 4 + }, +/obj/structure/lattice/catwalk, +/turf/open/openspace, +/area/station/science/xenobiology) +"qRZ" = ( +/turf/open/floor/iron/stairs/left{ + dir = 8; + color = "#795C32" + }, +/area/station/security/courtroom) +"qSb" = ( +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/plating/airless, +/area/station/solars/starboard/fore) +"qSg" = ( +/obj/machinery/newscaster/directional/north, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/turf/open/floor/wood/parquet, +/area/station/service/theater) +"qSq" = ( +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/plating, +/area/station/maintenance/central/lesser) +"qSt" = ( +/obj/effect/turf_decal/siding/purple, +/turf/open/floor/iron/white, +/area/station/science/ordnance/testlab) +"qSG" = ( +/obj/effect/turf_decal/tile/brown/half/contrasted, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/cargo/storage) +"qTe" = ( +/obj/structure/railing{ + dir = 8 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/engineering/lobby) +"qTA" = ( +/turf/closed/wall, +/area/station/security/warden) +"qTC" = ( +/obj/machinery/atmospherics/components/unary/outlet_injector/monitored/carbon_input, +/turf/open/floor/engine/co2, +/area/station/engineering/atmos) +"qTF" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/ai_monitored/command/storage/eva) +"qTG" = ( +/obj/effect/turf_decal/tile/red/anticorner/contrasted{ + dir = 4 + }, +/obj/machinery/computer/security/mining, +/obj/machinery/requests_console/directional/north{ + department = "Security"; + name = "Security Requests Console" + }, +/obj/effect/mapping_helpers/requests_console/supplies, +/obj/effect/mapping_helpers/requests_console/assistance, +/turf/open/floor/iron, +/area/station/security/checkpoint/supply) +"qTR" = ( +/obj/item/poster/random_contraband, +/obj/item/poster/random_contraband, +/obj/structure/rack, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"qTS" = ( +/obj/effect/spawner/random/structure/crate, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/glass, +/turf/open/floor/plating, +/area/station/maintenance/department/engine) +"qUl" = ( +/obj/effect/turf_decal/tile/neutral, +/obj/structure/table, +/obj/effect/spawner/random/food_or_drink/any_snack_or_beverage, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"qUr" = ( +/obj/structure/closet/crate/secure/loot, +/turf/open/floor/plating, +/area/station/maintenance/central/greater) +"qUx" = ( +/obj/machinery/camera/autoname/directional/south{ + network = list("ss13","rd","xeno") + }, +/turf/open/openspace, +/area/station/science/xenobiology) +"qUA" = ( +/obj/effect/landmark/generic_maintenance_landmark, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/solars/port/fore) +"qUT" = ( +/obj/effect/turf_decal/tile/yellow{ + dir = 4 + }, +/obj/machinery/atmospherics/components/binary/pump/off/yellow/visible, +/turf/open/floor/iron/dark/corner{ + dir = 1 + }, +/area/station/engineering/atmos) +"qVB" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron/dark, +/area/station/science/ordnance) +"qVD" = ( +/obj/structure/railing, +/obj/structure/table, +/obj/item/storage/box/disks{ + pixel_x = 6; + pixel_y = 3 + }, +/obj/item/storage/box/bodybags{ + pixel_x = -4; + pixel_y = 9 + }, +/obj/machinery/door/firedoor/border_only, +/obj/effect/turf_decal/siding/purple{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/white/textured, +/area/station/science/genetics) +"qVF" = ( +/turf/open/floor/plating/reinforced/airless, +/area/station/tcommsat/server) +"qVH" = ( +/obj/effect/turf_decal/tile/yellow, +/obj/machinery/newscaster/directional/south, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) +"qVS" = ( +/obj/effect/mapping_helpers/airlock/access/all/supply/general, +/obj/machinery/door/airlock/mining{ + name = "Cargo Bay" + }, +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/tile/brown/fourcorners, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/cargo/storage) +"qWh" = ( +/obj/effect/decal/cleanable/blood/old, +/obj/machinery/portable_atmospherics/canister/air, +/obj/machinery/atmospherics/components/unary/portables_connector/visible/layer4{ + dir = 4 + }, +/turf/open/floor/iron/grimy, +/area/station/maintenance/central/greater) +"qWq" = ( +/obj/machinery/firealarm/directional/west, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/grimy, +/area/station/service/chapel/office) +"qWs" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"qWt" = ( +/obj/machinery/smartfridge/extract/preloaded, +/obj/structure/sign/poster/random/directional/north, +/turf/open/floor/iron/white/textured_large, +/area/station/science/xenobiology) +"qWu" = ( +/obj/effect/landmark/blobstart, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/disposal) +"qWB" = ( +/obj/machinery/porta_turret/ai, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark/telecomms, +/area/station/ai_monitored/turret_protected/ai) +"qWG" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 + }, +/obj/structure/extinguisher_cabinet/directional/north, +/turf/open/floor/iron, +/area/station/engineering/main) +"qWH" = ( +/obj/structure/cable/layer3, +/turf/open/floor/circuit/green/telecomms/mainframe, +/area/station/tcommsat/server) +"qWM" = ( +/obj/effect/landmark/start/roboticist, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/iron/dark/textured, +/area/station/science/robotics/lab) +"qWS" = ( +/obj/machinery/portable_atmospherics/scrubber, +/obj/machinery/atmospherics/components/unary/portables_connector/visible/layer2{ + dir = 4 + }, +/obj/effect/turf_decal/tile/yellow{ + dir = 1 + }, +/obj/effect/turf_decal/tile/yellow, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) +"qWW" = ( +/obj/structure/cable, +/obj/machinery/light/small/dim/directional/east, +/turf/open/floor/plating, +/area/station/maintenance/central/lesser) +"qWY" = ( +/obj/effect/turf_decal/tile/brown/fourcorners, +/turf/open/floor/iron, +/area/station/cargo/storage) +"qXa" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/commons/vacant_room/commissary) +"qXf" = ( +/obj/machinery/bluespace_vendor/directional/north, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"qXm" = ( +/turf/open/floor/iron/showroomfloor, +/area/station/engineering/main) +"qXp" = ( +/obj/effect/turf_decal/tile/blue/opposingcorners, +/obj/effect/turf_decal/tile/red/opposingcorners{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/service/theater) +"qXy" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/white, +/area/station/science/lobby) +"qXB" = ( +/obj/structure/rack, +/obj/effect/spawner/random/techstorage/security_all, +/turf/open/floor/iron/textured, +/area/station/engineering/storage/tech) +"qXK" = ( +/obj/effect/turf_decal/tile/red, +/obj/effect/landmark/event_spawn, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/security/lockers) +"qXN" = ( +/turf/open/floor/iron/stairs/right{ + dir = 1 + }, +/area/station/hallway/secondary/exit/departure_lounge) +"qXY" = ( +/turf/open/misc/asteroid, +/area/station/cargo/miningoffice) +"qXZ" = ( +/obj/structure/railing{ + dir = 1 + }, +/obj/machinery/camera/motion/directional/south{ + c_tag = "AI Sat - Lower Left Exterior"; + network = list("minisat") + }, +/turf/open/floor/iron/stairs{ + dir = 8 + }, +/area/station/ai_monitored/turret_protected/aisat/foyer) +"qYe" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 4 + }, +/obj/machinery/power/apc/auto_name/directional/east, +/obj/structure/cable, +/turf/open/floor/iron/white, +/area/station/hallway/secondary/entry) +"qYn" = ( +/obj/structure/reagent_dispensers/fueltank, +/obj/structure/sign/warning/no_smoking/circle/directional/west, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/command/corporate_dock) +"qYL" = ( +/turf/open/floor/iron/grimy, +/area/station/security/detectives_office) +"qYV" = ( +/obj/effect/landmark/event_spawn, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/aisat/foyer) +"qYW" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, +/obj/effect/mapping_helpers/airlock/unres, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/maintenance/department/engine) +"qZh" = ( +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron, +/area/station/security/detectives_office) +"qZo" = ( +/obj/structure/railing{ + dir = 5 + }, +/obj/structure/window/reinforced/spawner/directional/west, +/obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/cargo/bitrunning/den) +"qZB" = ( +/obj/machinery/camera/directional/north{ + c_tag = "Holodeck - Fore"; + name = "holodeck camera" + }, +/turf/open/floor/engine{ + name = "Holodeck Projector Floor" + }, +/area/station/holodeck/rec_center) +"qZR" = ( +/obj/structure/table/reinforced, +/obj/item/stack/cable_coil{ + pixel_y = 3 + }, +/obj/item/stack/cable_coil{ + pixel_y = 3 + }, +/obj/item/multitool, +/obj/effect/turf_decal/stripes/red/line{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/airalarm/directional/west, +/turf/open/floor/iron/dark/textured_half{ + dir = 1 + }, +/area/station/medical/chemistry/minisat) +"qZX" = ( +/obj/structure/sign/xenobio_guide/directional/north, +/obj/structure/tank_holder/extinguisher, +/obj/effect/turf_decal/bot, +/turf/open/floor/iron/white/textured_half, +/area/station/science/xenobiology) +"qZZ" = ( +/obj/machinery/flasher/portable, +/obj/effect/turf_decal/tile/blue/half/contrasted{ + dir = 8 + }, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/security/lockers) +"rab" = ( +/obj/effect/landmark/blobstart, +/turf/open/floor/plating, +/area/station/maintenance/port/lesser) +"rai" = ( +/turf/open/openspace, +/area/station/security) +"rak" = ( +/obj/structure/tank_holder/anesthetic, +/obj/structure/cable, +/obj/effect/turf_decal/tile/blue/full, +/obj/machinery/airalarm/directional/east, +/turf/open/floor/iron/white, +/area/station/medical/surgery) +"rap" = ( +/obj/structure/table/reinforced, +/obj/machinery/digital_clock/directional/east, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/iron/white, +/area/station/medical/chemistry/minisat) +"rat" = ( +/turf/open/floor/iron, +/area/station/engineering/atmos/storage/gas) +"ray" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/button/door/directional/north{ + id = "chemsat"; + name = "Shutters Control Button"; + req_access = list("plumbing") + }, +/turf/open/floor/iron/dark, +/area/station/medical/chemistry/minisat) +"raz" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/plating, +/area/station/maintenance/department/science) +"raA" = ( +/obj/structure/table/reinforced, +/obj/structure/window/reinforced/spawner/directional/west, +/obj/effect/turf_decal/siding/dark_blue{ + dir = 10 + }, +/obj/machinery/button/door/directional/south{ + id = "bridgespace" + }, +/obj/item/aicard, +/obj/item/restraints/handcuffs, +/turf/open/floor/iron/textured_large, +/area/station/command/bridge) +"raR" = ( +/obj/effect/landmark/event_spawn, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/cargo/storage) +"raT" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/structure/sign/poster/random/directional/south, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"raX" = ( +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 4; + id = "hopdesk" + }, +/obj/machinery/door/firedoor, +/obj/effect/spawner/structure/window/hollow/reinforced/end, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/command/heads_quarters/hop) +"raZ" = ( +/obj/machinery/door/airlock/maintenance_hatch, +/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/misc/asteroid, +/area/station/science/research) +"rbe" = ( +/obj/effect/spawner/random/structure/grille{ + spawn_loot_chance = 76 + }, +/turf/open/floor/plating, +/area/station/maintenance/department/engine) +"rbg" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/stairs/medium{ + dir = 1 + }, +/area/station/command/bridge) +"rbs" = ( +/obj/machinery/turretid{ + control_area = "/area/station/ai_monitored/turret_protected/ai_upload"; + icon_state = "control_stun"; + name = "AI Upload Turret Control"; + pixel_x = -28 + }, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/door/window/brigdoor/left/directional/south, +/obj/effect/turf_decal/siding/purple{ + dir = 8 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/white, +/area/station/ai_monitored/turret_protected/ai_upload_foyer) +"rbw" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) +"rbF" = ( +/obj/effect/spawner/random/structure/grille, +/obj/structure/cable, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/plating, +/area/station/maintenance/central/lesser) +"rbH" = ( +/obj/structure/chair/sofa/bench/left{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral/half{ + dir = 8 + }, +/turf/open/floor/iron/edge{ + dir = 8 + }, +/area/station/hallway/secondary/exit/departure_lounge) +"rbS" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/simple/green/visible{ + dir = 1 + }, +/turf/open/floor/plating, +/area/station/maintenance/department/science) +"rce" = ( +/obj/structure/table/wood, +/obj/item/flashlight/lamp/green{ + pixel_x = 1; + pixel_y = 5 + }, +/turf/open/floor/wood/parquet, +/area/station/service/library) +"rcl" = ( +/turf/closed/wall/r_wall, +/area/station/security/execution/transfer) +"rcp" = ( +/obj/machinery/power/solar{ + id = "forestarboard"; + name = "Fore-Starboard Solar Array" + }, +/turf/open/floor/iron/solarpanel/airless, +/area/station/solars/starboard/fore) +"rcs" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/commons/vacant_room/commissary) +"rcx" = ( +/obj/structure/cable, +/obj/structure/railing{ + dir = 4 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/white, +/area/station/science/research) +"rcy" = ( +/obj/machinery/light/small/broken/directional/north, +/obj/structure/table, +/obj/item/food/spaghetti/pastatomato, +/obj/item/flashlight/flare/candle{ + start_on = 1; + icon_state = "candle1_lit"; + pixel_y = 4; + pixel_x = -10 + }, +/obj/item/flashlight/flare/candle{ + start_on = 1; + icon_state = "candle1_lit"; + pixel_x = 10; + pixel_y = 4 + }, +/turf/open/floor/iron/checker, +/area/station/maintenance/department/medical) +"rcz" = ( +/obj/machinery/computer/security{ + dir = 4 + }, +/obj/structure/sign/poster/official/random/directional/west, +/obj/effect/turf_decal/tile/dark_blue/half/contrasted{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/command/bridge) +"rcG" = ( +/obj/machinery/mech_bay_recharge_port{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/firealarm/directional/south, +/turf/open/floor/iron, +/area/station/security/mechbay) +"rcP" = ( +/obj/effect/turf_decal/stripes/asteroid/corner, +/turf/open/misc/asteroid, +/area/station/asteroid) +"rcR" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/modular_computer/preset/civilian{ + dir = 1 + }, +/obj/item/computer_disk/ordnance{ + pixel_x = 1 + }, +/turf/open/floor/iron/dark, +/area/station/science/ordnance) +"rdm" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/wood/parquet, +/area/station/cargo/boutique) +"rdn" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/white/smooth_corner, +/area/station/science/xenobiology) +"rdE" = ( +/obj/machinery/chem_mass_spec, +/obj/machinery/light/cold/directional/north, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/yellow/filled/mid_joiner{ + dir = 1 + }, +/turf/open/floor/iron/white/smooth_edge{ + dir = 1 + }, +/area/station/medical/pharmacy) +"rdI" = ( +/obj/structure/table, +/obj/item/aicard, +/obj/item/ai_module/reset, +/obj/item/assembly/flash/handheld, +/obj/item/assembly/flash/handheld, +/obj/machinery/airalarm/directional/north, +/turf/open/floor/iron/textured, +/area/station/engineering/storage/tech) +"rdK" = ( +/obj/machinery/telecomms/processor/preset_one, +/turf/open/floor/circuit/green/telecomms/mainframe, +/area/station/tcommsat/server) +"rdR" = ( +/obj/structure/broken_flooring/pile, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"rdU" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/yellow/filled/mid_joiner{ + dir = 4 + }, +/turf/open/floor/iron/white/smooth_large, +/area/station/medical/chemistry/minisat) +"rdX" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/spawner/random/structure/crate, +/obj/effect/decal/cleanable/cobweb, +/turf/open/floor/iron, +/area/station/cargo/warehouse) +"rdY" = ( +/obj/effect/turf_decal/plaque{ + icon_state = "L10" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"rec" = ( +/obj/effect/landmark/observer_start, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"reg" = ( +/obj/structure/lattice, +/obj/structure/cable, +/obj/structure/transit_tube/curved/flipped{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/space/basic, +/area/space/nearstation) +"reh" = ( +/obj/effect/turf_decal/tile/neutral, +/obj/structure/disposalpipe/junction{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"rej" = ( +/obj/effect/landmark/event_spawn, +/obj/machinery/holopad, +/turf/open/floor/wood, +/area/station/commons/lounge) +"reD" = ( +/turf/closed/wall/r_wall, +/area/station/service/hydroponics) +"reG" = ( +/obj/machinery/airalarm/directional/south, +/obj/effect/turf_decal/trimline/blue/filled/line, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/turf/open/floor/iron/white, +/area/station/medical/exam_room) +"reI" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/commons/fitness/recreation) +"reJ" = ( +/obj/machinery/chem_dispenser, +/obj/machinery/newscaster/directional/east, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 6 + }, +/obj/effect/turf_decal/trimline/yellow/filled/mid_joiner, +/obj/effect/turf_decal/trimline/yellow/filled/mid_joiner{ + dir = 4 + }, +/turf/open/floor/iron/white/smooth_corner{ + dir = 1 + }, +/area/station/medical/pharmacy) +"reK" = ( +/obj/effect/turf_decal/sand/plating, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, +/obj/structure/barricade/wooden/crude, +/turf/open/floor/plating, +/area/station/maintenance/central/greater) +"reS" = ( +/obj/effect/turf_decal/siding/dark, +/obj/machinery/door/firedoor/border_only, +/turf/open/floor/iron, +/area/station/command/corporate_showroom) +"reU" = ( +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/obj/effect/turf_decal/tile/green{ + dir = 8 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/service/hydroponics) +"rfd" = ( +/obj/machinery/door/airlock/maintenance_hatch, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/mapping_helpers/airlock/access/any/engineering/general, +/turf/open/floor/plating, +/area/station/engineering/lobby) +"rfi" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/obj/effect/turf_decal/tile/neutral/full, +/obj/effect/spawner/random/vending/snackvend, +/turf/open/floor/iron/dark/smooth_large, +/area/station/hallway/primary/central) +"rfQ" = ( +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/cargo/sorting) +"rgp" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/aisat/foyer) +"rgs" = ( +/obj/structure/holosign/barrier/atmos, +/turf/open/misc/asteroid, +/area/station/maintenance/port/greater) +"rgx" = ( +/obj/effect/turf_decal/tile/blue/anticorner/contrasted{ + dir = 4 + }, +/obj/structure/table, +/obj/item/storage/medkit/regular{ + pixel_x = 4; + pixel_y = 4 + }, +/obj/item/storage/medkit/regular, +/obj/machinery/airalarm/directional/east, +/obj/structure/sign/departments/chemistry/pharmacy/directional/north, +/turf/open/floor/iron/white, +/area/station/medical/medbay/lobby) +"rgy" = ( +/obj/machinery/atmospherics/components/unary/portables_connector/visible, +/obj/structure/window/reinforced/spawner/directional/north, +/turf/open/floor/iron/dark/textured_corner{ + dir = 8 + }, +/area/station/science/xenobiology) +"rgE" = ( +/obj/machinery/iv_drip, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/white/smooth_corner{ + dir = 4 + }, +/area/station/medical/exam_room) +"rgF" = ( +/obj/structure/lattice/catwalk, +/turf/open/space/openspace, +/area/station/solars/port) +"rgI" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/turf/open/floor/iron, +/area/station/engineering/storage) +"rgT" = ( +/obj/machinery/seed_extractor, +/obj/effect/turf_decal/tile/blue, +/obj/effect/turf_decal/tile/green{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/service/hydroponics) +"rgU" = ( +/obj/machinery/deepfryer, +/obj/machinery/requests_console/auto_name/directional/west, +/obj/effect/mapping_helpers/requests_console/supplies, +/obj/machinery/firealarm/directional/north, +/obj/effect/mapping_helpers/requests_console/assistance, +/turf/open/floor/iron/kitchen, +/area/station/service/kitchen) +"rgX" = ( +/obj/structure/rack, +/obj/effect/spawner/random/techstorage/ai_all, +/turf/open/floor/circuit, +/area/station/engineering/storage/tech) +"rhc" = ( +/obj/structure/railing{ + dir = 1 + }, +/turf/open/floor/iron/textured_large, +/area/station/security/warden) +"rhh" = ( +/obj/machinery/plumbing/sender{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/red/line{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/power/apc/auto_name/directional/west, +/obj/structure/cable, +/turf/open/floor/iron/dark/textured_half{ + dir = 1 + }, +/area/station/medical/chemistry/minisat) +"rhi" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) +"rhn" = ( +/obj/structure/table/wood, +/obj/item/flashlight/lamp{ + pixel_x = -7; + pixel_y = 14; + start_on = 0 + }, +/obj/effect/spawner/random/bureaucracy/crayon, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/wood, +/area/station/maintenance/port/greater) +"rhB" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/engineering/atmos/storage/gas) +"rhK" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 10 + }, +/turf/open/floor/iron, +/area/station/engineering/lobby) +"rhP" = ( +/obj/structure/chair/stool/directional/south, +/turf/open/floor/iron, +/area/station/commons/fitness/recreation) +"rhR" = ( +/obj/structure/window/reinforced/spawner/directional/west, +/obj/structure/window/reinforced/spawner/directional/south, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/aisat/foyer) +"rhS" = ( +/turf/open/floor/iron, +/area/station/engineering/main) +"rhW" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/wood, +/area/station/service/library) +"rhY" = ( +/obj/structure/table, +/obj/item/paper_bin, +/obj/item/pen, +/turf/open/floor/iron, +/area/station/security/prison) +"ria" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment, +/turf/closed/wall/r_wall, +/area/station/medical/virology) +"ril" = ( +/obj/effect/turf_decal/trimline/yellow/arrow_cw{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron, +/area/station/maintenance/department/medical/central) +"rin" = ( +/obj/effect/landmark/start/geneticist, +/obj/structure/chair/office, +/obj/structure/cable, +/obj/effect/turf_decal/siding/purple{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron/white/textured, +/area/station/science/genetics) +"riv" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/light/small/dim/directional/north, +/obj/structure/sign/warning/vacuum/directional/east, +/turf/open/floor/plating, +/area/station/maintenance/department/science) +"rix" = ( +/obj/structure/closet/secure_closet/medical1, +/obj/effect/turf_decal/tile/green/half/contrasted{ + dir = 1 + }, +/obj/machinery/airalarm/directional/north, +/turf/open/floor/iron/white, +/area/station/medical/virology) +"riE" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/engineering/atmos) +"riJ" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 10 + }, +/obj/machinery/camera/autoname/directional/south{ + network = list("ss13","medbay") + }, +/turf/open/floor/iron/white, +/area/station/command/heads_quarters/cmo) +"riQ" = ( +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/ai_monitored/turret_protected/aisat/foyer) +"riS" = ( +/obj/machinery/atmospherics/pipe/bridge_pipe/green/visible{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/bridge_pipe/cyan/visible, +/obj/effect/turf_decal/tile/yellow{ + dir = 8 + }, +/turf/open/floor/iron/dark/corner{ + dir = 1 + }, +/area/station/engineering/atmos) +"riT" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/structure/table, +/obj/effect/spawner/random/entertainment/cigarette, +/turf/open/floor/iron/dark, +/area/station/security/courtroom) +"riY" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/obj/machinery/door/poddoor/preopen{ + id = "xeno_blastdoor"; + name = "Biohazard Containment Door" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/plating, +/area/station/science/xenobiology) +"riZ" = ( +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 4 + }, +/obj/machinery/firealarm/directional/east, +/turf/open/floor/iron/dark, +/area/station/security/execution/education) +"rjf" = ( +/obj/structure/closet/emcloset/anchored, +/obj/effect/mapping_helpers/burnt_floor, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"rjg" = ( +/obj/effect/turf_decal/tile/neutral/half/contrasted, +/obj/machinery/button/door/directional/west{ + id = "teleporterhubshutters"; + pixel_y = -6 + }, +/obj/machinery/disposal/bin, +/obj/machinery/firealarm/directional/north, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/command/teleporter) +"rji" = ( +/turf/closed/wall/rock/porous, +/area/station/maintenance/department/science) +"rjk" = ( +/obj/machinery/holopad, +/turf/open/floor/iron/large, +/area/station/service/hydroponics/garden) +"rjn" = ( +/turf/closed/wall, +/area/station/commons/lounge) +"rjp" = ( +/obj/structure/grille, +/turf/open/space/openspace, +/area/space/nearstation) +"rjr" = ( +/obj/structure/cable, +/obj/effect/turf_decal/tile/purple/opposingcorners, +/turf/open/floor/iron/white, +/area/station/science/auxlab/firing_range) +"rjs" = ( +/obj/structure/window/reinforced/spawner/directional/east, +/obj/structure/table/reinforced, +/obj/machinery/door/window/right/directional/west{ + req_one_access = list("service","maint_tunnels"); + name = "Baked Goods" + }, +/obj/item/food/hotcrossbun{ + pixel_x = 1; + pixel_y = 10 + }, +/obj/item/food/cakeslice/pound_cake_slice{ + pixel_y = -2; + pixel_x = 1 + }, +/obj/effect/turf_decal/siding/red{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/fore) +"rjx" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/security/interrogation) +"rjG" = ( +/obj/machinery/airalarm/directional/west, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/landmark/blobstart, +/turf/open/floor/iron/grimy, +/area/station/service/chapel/office) +"rjH" = ( +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/all/medical/virology, +/obj/structure/cable, +/obj/effect/turf_decal/tile/green/half/contrasted, +/turf/open/floor/iron/white, +/area/station/medical/virology) +"rjL" = ( +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 8 + }, +/obj/structure/table, +/obj/item/book/manual/wiki/security_space_law{ + pixel_x = -3; + pixel_y = 5 + }, +/obj/item/radio/intercom/directional/west, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron, +/area/station/security/brig/entrance) +"rjX" = ( +/turf/closed/wall, +/area/station/security/courtroom) +"rka" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/science/xenobiology) +"rkd" = ( +/obj/structure/closet/crate/science, +/obj/item/wrench, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/firealarm/directional/west, +/obj/effect/spawner/random/maintenance, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/iron/dark/smooth_large, +/area/station/science/ordnance) +"rkm" = ( +/obj/machinery/washing_machine, +/turf/open/floor/iron/freezer, +/area/station/security/prison/shower) +"rkp" = ( +/obj/effect/turf_decal/stripes, +/obj/item/stack/sheet/plasteel/fifty, +/obj/item/stack/cable_coil{ + pixel_x = -1; + pixel_y = -3 + }, +/obj/item/stack/cable_coil{ + pixel_x = -1; + pixel_y = -3 + }, +/obj/structure/table, +/turf/open/floor/iron/dark, +/area/station/engineering/atmospherics_engine) +"rkr" = ( +/obj/effect/turf_decal/tile/brown/half/contrasted, +/obj/machinery/light/directional/south, +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/cargo/storage) +"rkt" = ( +/obj/machinery/door/airlock/security, +/obj/effect/turf_decal/tile/red/fourcorners, +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/structure/cable, +/obj/effect/mapping_helpers/airlock/access/all/security/general, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/security/evidence) +"rkw" = ( +/obj/structure/chair/office{ + dir = 1 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/grimy, +/area/station/security/detectives_office) +"rkz" = ( +/obj/effect/turf_decal/tile/dark_blue/half/contrasted{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/command/bridge) +"rkA" = ( +/obj/effect/turf_decal/siding/wood, +/obj/structure/table/wood, +/obj/machinery/button/curtain{ + id = "law"; + pixel_x = -26; + pixel_y = -8 + }, +/obj/item/book/manual/wiki/security_space_law, +/obj/item/stamp/law, +/obj/item/pen/red, +/turf/open/floor/carpet, +/area/station/service/lawoffice) +"rkI" = ( +/obj/machinery/atmospherics/pipe/smart/simple/purple/visible/layer2{ + dir = 10 + }, +/turf/open/floor/iron/dark, +/area/station/science/ordnance) +"rkL" = ( +/obj/structure/table, +/obj/structure/window/spawner/directional/east, +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/item/storage/medkit/regular{ + pixel_x = 3; + pixel_y = 6 + }, +/obj/item/storage/medkit/brute{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/storage/medkit/brute, +/obj/item/storage/medkit/brute{ + pixel_x = -3; + pixel_y = -3 + }, +/obj/machinery/light/cold/directional/west, +/turf/open/floor/iron/white, +/area/station/medical/storage) +"rkS" = ( +/obj/effect/turf_decal/box/white{ + color = "#52B4E9" + }, +/turf/open/floor/engine, +/area/station/engineering/atmospherics_engine) +"rkZ" = ( +/obj/machinery/suit_storage_unit/ce, +/obj/machinery/requests_console/directional/south{ + department = "Chief Engineer's Desk"; + name = "Chief Engineer's Request Console" + }, +/obj/machinery/computer/security/telescreen/ce/directional/west, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 10 + }, +/turf/open/floor/iron, +/area/station/command/heads_quarters/ce) +"rlp" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/medical/paramedic) +"rls" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/engineering/lobby) +"rlt" = ( +/obj/machinery/camera/autoname/motion/directional/north{ + network = list("minisat") + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/aisat/teleporter) +"rlw" = ( +/turf/closed/wall, +/area/station/science/xenobiology/hallway) +"rlH" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/engineering/atmos/upper) +"rlU" = ( +/obj/structure/railing/corner, +/turf/open/floor/iron, +/area/station/engineering/atmos/upper) +"rmi" = ( +/obj/structure/table, +/obj/machinery/reagentgrinder{ + pixel_y = 8 + }, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/iron/white/textured_large, +/area/station/science/xenobiology) +"rms" = ( +/obj/structure/cable, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"rmx" = ( +/obj/structure/cable, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/structure/cable/layer3, +/obj/machinery/firealarm/directional/south, +/obj/structure/rack, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/command/storage/satellite) +"rmy" = ( +/obj/structure/cable, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/plating, +/area/station/maintenance/central/lesser) +"rmF" = ( +/obj/structure/cable, +/obj/structure/lattice/catwalk, +/obj/structure/window/reinforced/spawner/directional/west, +/obj/structure/window/reinforced/spawner/directional/north, +/turf/open/space/openspace, +/area/space/nearstation) +"rmU" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 4 + }, +/obj/machinery/firealarm/directional/east, +/turf/open/floor/iron/white, +/area/station/medical/chemistry/minisat) +"rmX" = ( +/obj/machinery/light/small/dim/directional/north, +/turf/open/misc/asteroid, +/area/station/maintenance/department/science) +"rnb" = ( +/obj/structure/cable, +/obj/effect/turf_decal/trimline/blue/filled/corner{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/medical/treatment_center) +"rnk" = ( +/turf/closed/wall, +/area/station/maintenance/department/medical/central) +"rnB" = ( +/obj/machinery/firealarm/directional/south, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/commons/locker) +"rnJ" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/turf/open/floor/iron/white, +/area/station/science/explab) +"rnU" = ( +/obj/machinery/ai_slipper{ + uses = 10 + }, +/obj/effect/turf_decal/box, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/aisat/foyer) +"roc" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 + }, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/engineering/main) +"rox" = ( +/obj/machinery/atmospherics/components/binary/pump{ + name = "Pure to Port" + }, +/turf/open/floor/iron, +/area/station/engineering/atmos) +"roB" = ( +/obj/machinery/door/airlock/maintenance_hatch, +/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 1 + }, +/turf/open/floor/plating, +/area/station/service/library) +"roG" = ( +/obj/effect/turf_decal/tile/red/half/contrasted, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/security) +"roK" = ( +/obj/machinery/door/airlock/research{ + name = "Ordnance Lab" + }, +/obj/effect/mapping_helpers/airlock/access/all/science/ordnance, +/obj/structure/cable, +/obj/machinery/door/firedoor/heavy, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/simple/green/hidden{ + dir = 4 + }, +/turf/open/floor/catwalk_floor/flat_white, +/area/station/science/ordnance) +"roO" = ( +/obj/machinery/door/airlock/security/glass{ + name = "Prison Wing" + }, +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/access/all/security/armory, +/obj/effect/turf_decal/tile/red/fourcorners, +/turf/open/floor/iron, +/area/station/security/warden) +"roW" = ( +/obj/machinery/door/window/right/directional/west{ + name = "Fitness Ring" + }, +/obj/structure/window/spawner/directional/north, +/turf/open/floor/iron/dark, +/area/station/commons/fitness/recreation) +"rpb" = ( +/obj/machinery/computer/cargo{ + dir = 4 + }, +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 8 + }, +/obj/machinery/button/door/directional/west{ + id = "QMLoaddoor"; + name = "Loading Doors"; + pixel_y = -8; + req_access = list("cargo") + }, +/obj/machinery/button/door/directional/west{ + id = "QMLoaddoor2"; + name = "Loading Doors"; + pixel_y = 8; + req_access = list("cargo") + }, +/turf/open/floor/iron, +/area/station/cargo/storage) +"rpy" = ( +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/cargo/sorting) +"rpC" = ( +/obj/effect/decal/remains/human, +/turf/open/floor/plating, +/area/station/science/ordnance/storage) +"rpD" = ( +/obj/structure/closet/secure_closet/brig/genpop, +/obj/machinery/light/dim/directional/east, +/turf/open/floor/iron/dark/textured, +/area/station/security/execution/transfer) +"rpP" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/plating, +/area/station/maintenance/port/lesser) +"rpR" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/maintenance/department/engine) +"rpS" = ( +/obj/machinery/atmospherics/pipe/smart/manifold/general/visible{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/engineering/atmos) +"rqe" = ( +/obj/structure/table, +/obj/item/stock_parts/scanning_module{ + pixel_x = -5; + pixel_y = 7 + }, +/obj/item/stock_parts/scanning_module{ + pixel_x = 5; + pixel_y = 7 + }, +/obj/item/stock_parts/scanning_module{ + pixel_x = -5 + }, +/obj/item/stock_parts/scanning_module{ + pixel_x = 5 + }, +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 1 + }, +/obj/machinery/camera/autoname/directional/north, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/cargo/drone_bay) +"rqh" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/corner, +/turf/open/floor/engine, +/area/station/command/corporate_dock) +"rqi" = ( +/obj/structure/lattice, +/obj/effect/landmark/start/hangover, +/turf/open/openspace, +/area/station/service/bar) +"rqj" = ( +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"rqw" = ( +/obj/machinery/power/shieldwallgen, +/obj/structure/window/spawner/directional/east, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/cable, +/turf/open/floor/iron/dark/corner{ + dir = 4 + }, +/area/station/command/emergency_closet) +"rqy" = ( +/obj/structure/table, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 8 + }, +/obj/item/reagent_containers/spray/cleaner{ + pixel_x = 5 + }, +/obj/item/clothing/mask/balaclava{ + pixel_x = -7 + }, +/obj/item/assembly/flash/handheld{ + pixel_y = -12 + }, +/obj/item/radio/intercom/directional/west, +/turf/open/floor/iron/dark, +/area/station/security/execution/education) +"rqJ" = ( +/obj/machinery/air_sensor/plasma_tank, +/turf/open/floor/engine/plasma, +/area/station/engineering/atmos) +"rqP" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/medical/chemistry/minisat) +"rqW" = ( +/obj/machinery/status_display/ai/directional/south, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/turf/open/floor/wood/parquet, +/area/station/service/theater) +"rri" = ( +/turf/open/openspace, +/area/station/security/prison/garden) +"rrn" = ( +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/security/warden) +"rrq" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/white, +/area/station/science/lab) +"rry" = ( +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/east, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/engineering/atmos/upper) +"rrz" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/station/engineering/gravity_generator) +"rrF" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/power/apc/auto_name/directional/east, +/obj/structure/cable, +/obj/effect/landmark/start/prisoner, +/turf/open/floor/plating, +/area/station/security/prison/work) +"rrR" = ( +/obj/machinery/mass_driver/trash{ + dir = 8 + }, +/obj/machinery/light/small/directional/north, +/turf/open/floor/plating, +/area/station/maintenance/disposal) +"rrZ" = ( +/obj/machinery/airalarm/directional/north, +/turf/open/floor/engine, +/area/station/science/explab) +"rsd" = ( +/obj/effect/turf_decal/siding/thinplating_new{ + dir = 6 + }, +/turf/open/floor/glass/reinforced, +/area/station/engineering/atmos/upper) +"rsk" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/machinery/photocopier, +/obj/machinery/camera/autoname/directional/north, +/turf/open/floor/wood, +/area/station/service/library) +"rsl" = ( +/obj/structure/sign/poster/random/directional/north, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/wood, +/area/station/service/theater) +"rss" = ( +/obj/structure/chair/stool/directional/east, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/wood, +/area/station/commons/lounge) +"rst" = ( +/obj/structure/lattice/catwalk, +/turf/open/space/basic, +/area/station/solars/starboard/fore) +"rsw" = ( +/obj/structure/closet/secure_closet/engineering_chief, +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/machinery/airalarm/directional/west, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 9 + }, +/obj/item/food/cracker, +/turf/open/floor/iron, +/area/station/command/heads_quarters/ce) +"rsI" = ( +/obj/structure/displaycase/labcage, +/turf/open/floor/engine, +/area/station/command/heads_quarters/rd) +"rsK" = ( +/obj/effect/turf_decal/tile/dark_green/opposingcorners, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/hallway/secondary/service) +"rsQ" = ( +/obj/structure/cable, +/obj/machinery/light/small/directional/west, +/obj/machinery/firealarm/directional/east, +/obj/effect/turf_decal/trimline/purple/filled/arrow_ccw{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/purple/filled/arrow_ccw{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/white/smooth_large, +/area/station/science/xenobiology/hallway) +"rsZ" = ( +/obj/effect/turf_decal/trimline/blue/arrow_ccw{ + dir = 8 + }, +/obj/effect/turf_decal/tile/blue/half/contrasted, +/turf/open/floor/iron/white, +/area/station/medical/medbay/lobby) +"rts" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/textured, +/area/station/construction/mining/aux_base) +"rtx" = ( +/obj/structure/closet/secure_closet/personal, +/obj/effect/spawner/random/bureaucracy/briefcase, +/turf/open/floor/plating, +/area/station/commons/vacant_room/commissary) +"rtA" = ( +/obj/effect/turf_decal/siding/dark_blue{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/command/corporate_showroom) +"rtL" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/tile/yellow, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) +"rtN" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/turf/open/floor/engine, +/area/station/command/corporate_dock) +"rtO" = ( +/obj/structure/railing{ + dir = 1 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/structure/cable, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/wood/tile, +/area/station/service/bar) +"ruc" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/carpet/royalblue, +/area/station/command/heads_quarters/captain/private) +"rup" = ( +/obj/effect/spawner/structure/window/hollow/reinforced/middle{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/medical/chemistry/minisat) +"ruq" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/textured, +/area/station/engineering/storage/tech) +"rus" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/iron/white, +/area/station/science/ordnance/storage) +"ruE" = ( +/obj/structure/chair/sofa/bench/left{ + dir = 4 + }, +/obj/effect/landmark/start/assistant, +/turf/open/floor/iron/large, +/area/station/commons/locker) +"ruL" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/science/research) +"ruN" = ( +/obj/effect/spawner/random/structure/tank_holder, +/obj/effect/turf_decal/sand/plating, +/turf/open/floor/plating, +/area/station/maintenance/department/science) +"ruP" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/wood, +/area/station/commons/lounge) +"ruZ" = ( +/turf/closed/wall/r_wall, +/area/station/maintenance/department/engine) +"rvo" = ( +/obj/machinery/light/small/dim/directional/west, +/obj/effect/turf_decal/tile/green/half/contrasted{ + dir = 8 + }, +/turf/open/floor/iron/white/textured, +/area/station/maintenance/department/medical/central) +"rwf" = ( +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/cargo/warehouse) +"rwn" = ( +/obj/effect/turf_decal/tile/red/anticorner/contrasted{ + dir = 8 + }, +/obj/structure/rack, +/obj/structure/disposalpipe/junction/flip{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/security) +"rwq" = ( +/obj/structure/chair/office/light, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron/white, +/area/station/medical/virology) +"rwt" = ( +/obj/machinery/power/shieldwallgen/xenobiologyaccess{ + anchored = 1 + }, +/obj/structure/cable, +/turf/open/floor/engine, +/area/station/science/xenobiology) +"rwu" = ( +/obj/structure/closet/crate/silvercrate, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/bot_white, +/obj/item/radio/intercom/directional/north, +/obj/item/piggy_bank/vault, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/command/nuke_storage) +"rwD" = ( +/obj/structure/cable, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/wood/tile, +/area/station/service/bar) +"rwE" = ( +/obj/structure/lattice/catwalk, +/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ + dir = 9 + }, +/turf/open/space/basic, +/area/space/nearstation) +"rwF" = ( +/obj/effect/turf_decal/box/corners{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/engineering/atmos) +"rwU" = ( +/obj/structure/sign/painting/large/library{ + dir = 4 + }, +/obj/machinery/door/window/left/directional/west{ + req_access = list("library") + }, +/turf/open/floor/carpet/royalblue, +/area/station/service/library) +"rwW" = ( +/obj/structure/window/reinforced/spawner/directional/south, +/obj/structure/window/reinforced/spawner/directional/north, +/turf/open/floor/glass/reinforced, +/area/station/security/prison) +"rwX" = ( +/obj/structure/sign/painting/large/library_private{ + dir = 8; + pixel_x = -29 + }, +/obj/item/storage/photo_album/library{ + pixel_x = 4 + }, +/obj/item/camera{ + pixel_x = -4 + }, +/obj/structure/table/wood, +/turf/open/floor/engine/cult, +/area/station/service/library) +"rxn" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/stripes/white/line{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/science/ordnance/testlab) +"rxr" = ( +/turf/open/floor/engine/xenobio, +/area/station/science/xenobiology) +"rxv" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron, +/area/station/maintenance/department/medical/central) +"rxw" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/spawner/random/trash/garbage{ + spawn_scatter_radius = 1 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/airalarm/directional/north, +/turf/open/floor/plating, +/area/station/maintenance/department/engine) +"rxC" = ( +/turf/open/floor/iron/white/smooth_corner{ + dir = 1 + }, +/area/station/science/xenobiology) +"rxE" = ( +/obj/machinery/door/window/brigdoor/security/cell/left/directional/east{ + id = "Cell 1"; + name = "Cell 1" + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/security/brig) +"rxK" = ( +/obj/machinery/modular_computer/preset/command, +/turf/open/floor/carpet/red, +/area/station/command/heads_quarters/qm) +"rxU" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/engineering/atmos/storage/gas) +"rxW" = ( +/obj/structure/railing/corner{ + dir = 1 + }, +/turf/open/floor/glass, +/area/station/command/meeting_room) +"rxX" = ( +/obj/effect/turf_decal/bot_white, +/obj/effect/spawner/random/maintenance, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/cargo/storage) +"ryb" = ( +/obj/effect/decal/cleanable/rubble, +/turf/open/misc/asteroid, +/area/station/maintenance/port/greater) +"ryt" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 9 + }, +/obj/item/radio/intercom/directional/west, +/obj/structure/chair, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) +"ryu" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/landmark/event_spawn, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/cargo/warehouse) +"ryy" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron/dark/textured, +/area/station/science/robotics/lab) +"ryz" = ( +/turf/closed/wall, +/area/station/medical/patients_rooms/room_b) +"ryC" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/engineering/storage) +"ryE" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/camera/autoname/directional/west{ + network = list("ss13","medbay") + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron/white, +/area/station/medical/treatment_center) +"ryG" = ( +/obj/structure/cable, +/obj/machinery/door/airlock/engineering/glass{ + name = "Break Room" + }, +/obj/effect/turf_decal/tile/yellow/fourcorners, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/mapping_helpers/airlock/access/any/engineering/general, +/obj/effect/mapping_helpers/airlock/access/any/engineering/construction, +/turf/open/floor/iron, +/area/station/engineering/break_room) +"ryP" = ( +/obj/structure/closet/secure_closet/brig{ + id = "Cell 2"; + name = "Cell 2 locker" + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/flasher/directional/west{ + id = "Cell 2" + }, +/turf/open/floor/iron, +/area/station/security/brig) +"ryR" = ( +/obj/structure/bodycontainer/morgue/beeper_off, +/turf/open/floor/iron/dark/textured, +/area/station/medical/morgue) +"ryV" = ( +/obj/structure/table/optable, +/obj/effect/decal/cleanable/blood/old, +/obj/machinery/light/small/dim/directional/north, +/mob/living/carbon/human/monkeybrain{ + ai_controller = /datum/ai_controller/monkey/angry + }, +/turf/open/floor/iron/white/herringbone, +/area/station/maintenance/department/medical/central) +"rzb" = ( +/obj/structure/cable, +/obj/effect/turf_decal/siding/wood, +/obj/machinery/camera/autoname/directional/south, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/wood/tile, +/area/station/service/bar) +"rzg" = ( +/obj/structure/transport/linear/public{ + icon = 'icons/obj/smooth_structures/catwalk.dmi'; + base_icon_state = "catwalk"; + icon_state = "catwalk-55" + }, +/turf/open/floor/plating/elevatorshaft, +/area/station/cargo/storage) +"rzB" = ( +/turf/open/floor/iron/white/smooth_half{ + dir = 8 + }, +/area/station/commons/fitness/recreation) +"rzD" = ( +/obj/effect/turf_decal/trimline/blue/filled/corner{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/white, +/area/station/command/heads_quarters/cmo) +"rzF" = ( +/obj/effect/turf_decal/bot_white, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/cargo/storage) +"rzJ" = ( +/obj/machinery/door/airlock/maintenance_hatch, +/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, +/obj/effect/mapping_helpers/airlock/unres, +/turf/open/misc/asteroid, +/area/station/hallway/secondary/entry) +"rzP" = ( +/obj/structure/statue/sandstone/assistant, +/obj/machinery/firealarm/directional/west, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/camera/autoname/directional/south, +/turf/open/floor/iron/textured, +/area/station/commons/storage/art) +"rAa" = ( +/obj/effect/turf_decal/tile/blue/half/contrasted, +/obj/structure/bed/medical/emergency, +/obj/structure/window/spawner/directional/east, +/turf/open/floor/iron/white, +/area/station/medical/medbay/lobby) +"rAi" = ( +/obj/machinery/door/window/brigdoor/left/directional/north{ + req_access = list("shipping") + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/blood/old, +/turf/open/floor/iron, +/area/station/maintenance/department/cargo) +"rAq" = ( +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, +/obj/machinery/light/directional/east, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/security/armory) +"rAu" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/airalarm/directional/east, +/obj/machinery/firealarm/directional/south, +/turf/open/floor/iron, +/area/station/security/evidence) +"rAz" = ( +/obj/machinery/camera/autoname/directional/south{ + network = list("ss13","rd") + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/white/smooth_edge{ + dir = 1 + }, +/area/station/science/research) +"rAK" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"rAW" = ( +/obj/structure/window/reinforced/plasma/spawner/directional/east, +/obj/machinery/electrolyzer{ + anchored = 1 + }, +/obj/machinery/light/small/directional/west, +/turf/open/floor/engine/airless, +/area/station/engineering/atmos) +"rAZ" = ( +/obj/effect/turf_decal/tile/yellow{ + dir = 4 + }, +/obj/machinery/atmospherics/components/binary/pump{ + dir = 8 + }, +/turf/open/floor/iron/dark/corner{ + dir = 1 + }, +/area/station/engineering/atmos/upper) +"rBb" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/effect/turf_decal/tile/neutral, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"rBj" = ( +/obj/machinery/camera/directional/west{ + c_tag = "Atmospherics Tank - Nitrous Oxide" + }, +/turf/open/floor/engine/n2o, +/area/station/engineering/atmos) +"rBq" = ( +/obj/structure/cable, +/obj/effect/turf_decal/siding/purple, +/turf/open/floor/catwalk_floor/flat_white, +/area/station/science/xenobiology) +"rBt" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/door/window/brigdoor/left/directional/north{ + pixel_y = 1; + req_access = list("ordnance") + }, +/turf/open/floor/iron/white, +/area/station/science/ordnance/storage) +"rBv" = ( +/obj/item/flashlight/flare/candle/infinite{ + pixel_x = -16; + pixel_y = -16 + }, +/turf/open/misc/asteroid, +/area/station/asteroid) +"rBw" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/machinery/power/apc/auto_name/directional/south, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/port/lesser) +"rBI" = ( +/obj/structure/filingcabinet, +/obj/item/toy/figure/scientist{ + pixel_x = -1; + pixel_y = 15 + }, +/obj/machinery/digital_clock/directional/south, +/turf/open/floor/iron/white, +/area/station/science/lab) +"rBT" = ( +/obj/structure/window/reinforced/spawner/directional/east, +/obj/structure/transit_tube/station/dispenser/reverse{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/airalarm/directional/south, +/turf/open/floor/iron/dark/small, +/area/station/engineering/transit_tube) +"rBZ" = ( +/obj/structure/cable, +/obj/machinery/turretid{ + control_area = "/area/station/ai_monitored/turret_protected/aisat_interior"; + name = "AI Antechamber turret control"; + pixel_y = 27 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/ai_monitored/turret_protected/aisat/uppersouth) +"rCd" = ( +/obj/machinery/door/window/brigdoor/left/directional/east{ + name = "Command Desk"; + req_access = list("command") + }, +/obj/effect/turf_decal/siding/dark_blue{ + dir = 4 + }, +/turf/open/floor/iron/textured_large, +/area/station/command/bridge) +"rCe" = ( +/obj/machinery/door/poddoor/lift/preopen{ + transport_linked_id = "cargo" + }, +/obj/effect/turf_decal/stripes{ + dir = 4 + }, +/obj/effect/turf_decal/stripes{ + dir = 8 + }, +/obj/machinery/door/firedoor, +/turf/open/floor/iron/dark/textured_half{ + dir = 1 + }, +/area/station/cargo/sorting) +"rCv" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/engineering/storage/tech) +"rCz" = ( +/obj/effect/landmark/event_spawn, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/white, +/area/station/medical/treatment_center) +"rCL" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/obj/structure/railing{ + dir = 9 + }, +/turf/open/floor/engine, +/area/station/hallway/secondary/entry) +"rCN" = ( +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/mapping_helpers/airlock/abandoned, +/obj/effect/turf_decal/caution/stand_clear, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/maintenance/central/lesser) +"rCT" = ( +/obj/structure/lattice/catwalk, +/obj/structure/railing{ + dir = 4 + }, +/obj/structure/cable/layer3, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/obj/machinery/camera/autoname/directional/west, +/turf/open/openspace, +/area/station/engineering/atmos) +"rCW" = ( +/obj/structure/table, +/obj/item/paper_bin{ + pixel_x = 1; + pixel_y = 9 + }, +/obj/effect/spawner/random/bureaucracy/pen, +/obj/effect/spawner/random/bureaucracy/pen, +/obj/effect/spawner/random/bureaucracy/pen, +/obj/effect/spawner/random/bureaucracy/pen, +/turf/open/floor/iron/textured_large, +/area/station/cargo/sorting) +"rCY" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/filingcabinet, +/obj/item/radio/intercom/directional/east, +/turf/open/floor/iron/white, +/area/station/medical/chemistry/minisat) +"rDa" = ( +/obj/structure/urinal/directional/north, +/obj/machinery/light_switch/directional/west, +/turf/open/floor/iron/showroomfloor, +/area/station/cargo/storage) +"rDg" = ( +/turf/open/openspace, +/area/station/service/bar) +"rDl" = ( +/obj/effect/turf_decal/siding/red{ + dir = 1 + }, +/obj/effect/turf_decal/tile/dark_red/opposingcorners, +/turf/open/floor/iron/dark, +/area/station/science/robotics/lab) +"rDm" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 1 + }, +/obj/machinery/firealarm/directional/north, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) +"rDs" = ( +/obj/effect/spawner/random/engineering/tracking_beacon, +/obj/machinery/holopad, +/turf/open/floor/iron, +/area/station/service/hydroponics/garden) +"rDx" = ( +/obj/machinery/vending/wardrobe/viro_wardrobe, +/obj/effect/turf_decal/tile/green/anticorner/contrasted{ + dir = 1 + }, +/turf/open/floor/iron/white, +/area/station/medical/virology) +"rDD" = ( +/obj/structure/stairs/west, +/turf/open/floor/iron/stairs/left{ + dir = 4 + }, +/area/station/engineering/main) +"rDE" = ( +/obj/machinery/light/dim/directional/west, +/obj/structure/table/wood, +/obj/item/toy/figure/qm{ + pixel_y = 3; + pixel_x = 5 + }, +/obj/item/reagent_containers/cup/beaker/jar{ + pixel_y = 5; + pixel_x = -5 + }, +/obj/item/coffee_cartridge/fancy{ + pixel_y = 18 + }, +/turf/open/floor/carpet/red, +/area/station/command/heads_quarters/qm) +"rDI" = ( +/obj/structure/closet/secure_closet/engineering_personal, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 + }, +/obj/machinery/firealarm/directional/north, +/turf/open/floor/iron, +/area/station/engineering/storage) +"rEp" = ( +/obj/structure/cable, +/obj/effect/turf_decal/tile/dark_blue/half/contrasted{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/station/hallway/secondary/command) +"rEv" = ( +/obj/machinery/rnd/server, +/obj/effect/turf_decal/siding/blue{ + dir = 8 + }, +/turf/open/floor/circuit/telecomms/server, +/area/station/science/server) +"rEJ" = ( +/obj/item/reagent_containers/spray/plantbgone{ + pixel_y = 3 + }, +/obj/item/reagent_containers/spray/plantbgone{ + pixel_x = 8; + pixel_y = 8 + }, +/obj/item/reagent_containers/spray/plantbgone{ + pixel_x = 13; + pixel_y = 5 + }, +/obj/item/watertank, +/obj/item/grenade/chem_grenade/antiweed, +/obj/structure/table/glass, +/obj/structure/sign/poster/official/random/directional/south, +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/turf/open/floor/iron, +/area/station/service/hydroponics) +"rEK" = ( +/obj/machinery/door/airlock/external, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/external, +/turf/open/floor/plating, +/area/station/cargo/storage) +"rEV" = ( +/obj/structure/cable, +/obj/machinery/door/airlock/maintenance_hatch, +/obj/effect/mapping_helpers/airlock/access/all/medical/chemistry, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/maintenance/department/medical) +"rFb" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 9 + }, +/obj/structure/closet/emcloset, +/obj/item/radio/intercom/directional/west, +/turf/open/floor/iron/white, +/area/station/hallway/secondary/entry) +"rFd" = ( +/obj/structure/cable, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 8 + }, +/obj/effect/mapping_helpers/airlock/access/any/medical/maintenance, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"rFt" = ( +/obj/machinery/shower/directional/west, +/obj/effect/landmark/start/prisoner, +/turf/open/floor/iron/freezer, +/area/station/security/prison/shower) +"rFA" = ( +/obj/structure/window/spawner/directional/east, +/obj/machinery/portable_atmospherics/pump, +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark/smooth_large, +/area/station/science/ordnance) +"rFK" = ( +/obj/effect/turf_decal/sand/plating, +/obj/effect/decal/cleanable/rubble, +/turf/open/floor/plating, +/area/station/asteroid) +"rFL" = ( +/obj/structure/chair/office/light{ + dir = 4 + }, +/obj/effect/landmark/start/chemist, +/turf/open/floor/iron/white, +/area/station/medical/chemistry) +"rFV" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/mob/living/simple_animal/bot/secbot/beepsky/officer, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"rFX" = ( +/obj/effect/turf_decal/siding/dark_blue/corner{ + dir = 4 + }, +/obj/effect/landmark/event_spawn, +/turf/open/floor/iron/dark, +/area/station/command/corporate_showroom) +"rFZ" = ( +/obj/machinery/atmospherics/components/trinary/mixer{ + dir = 8; + name = "plasma mixer" + }, +/turf/open/floor/iron, +/area/station/engineering/atmos) +"rGg" = ( +/obj/effect/turf_decal/stripes/asteroid/line{ + dir = 8 + }, +/turf/open/misc/asteroid/airless, +/area/station/asteroid) +"rGq" = ( +/obj/structure/window/reinforced/plasma/spawner/directional/north, +/obj/machinery/power/energy_accumulator/tesla_coil/anchored, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/green/visible, +/turf/open/floor/engine, +/area/station/engineering/supermatter) +"rGr" = ( +/obj/effect/baseturf_helper/reinforced_plating, +/turf/open/floor/glass/reinforced/plasma, +/area/station/engineering/supermatter/room) +"rGu" = ( +/obj/effect/turf_decal/siding/purple{ + dir = 8 + }, +/obj/structure/sign/poster/random/directional/west, +/turf/open/floor/iron/white/smooth_large, +/area/station/science/research) +"rGv" = ( +/obj/machinery/light/directional/north, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"rGM" = ( +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 4 + }, +/obj/structure/chair/office{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/security/brig/entrance) +"rGO" = ( +/obj/structure/lattice/catwalk, +/turf/open/space/basic, +/area/station/solars/port/fore) +"rGQ" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/chapel{ + dir = 4 + }, +/area/station/service/chapel) +"rGX" = ( +/obj/structure/table, +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/dirt, +/obj/item/reagent_containers/syringe/contraband/fentanyl, +/obj/item/reagent_containers/syringe/contraband/space_drugs{ + pixel_x = 3; + pixel_y = 7 + }, +/turf/open/floor/wood, +/area/station/maintenance/central/lesser) +"rHc" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/window/left/directional/north{ + req_access = list("shipping") + }, +/obj/machinery/door/firedoor, +/obj/item/paper_bin, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/station/cargo/sorting) +"rHm" = ( +/obj/structure/lattice/catwalk, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/space/openspace, +/area/space/nearstation) +"rHq" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/recharge_station, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/cargo/warehouse/upper) +"rHF" = ( +/obj/machinery/bci_implanter, +/turf/open/floor/iron/white, +/area/station/science/explab) +"rHG" = ( +/obj/machinery/atmospherics/components/trinary/filter{ + dir = 4 + }, +/obj/machinery/light/directional/north, +/obj/effect/turf_decal/delivery, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/station/science/ordnance/testlab) +"rHU" = ( +/obj/effect/spawner/random/structure/closet_empty/crate/with_loot, +/turf/open/floor/plating, +/area/station/maintenance/department/engine) +"rHV" = ( +/obj/structure/table, +/obj/effect/decal/cleanable/dirt, +/obj/item/storage/photo_album/prison, +/turf/open/floor/iron, +/area/station/security/prison) +"rIb" = ( +/obj/machinery/door/firedoor, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/obj/effect/turf_decal/tile/purple/anticorner/contrasted{ + dir = 1 + }, +/turf/open/floor/iron/white, +/area/station/science/lobby) +"rIf" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/item/storage/medkit, +/obj/structure/table, +/obj/machinery/light/directional/south, +/obj/item/radio/intercom/directional/south, +/turf/open/floor/iron, +/area/station/command/gateway) +"rIw" = ( +/obj/machinery/light_switch/directional/north, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/command/corporate_dock) +"rIG" = ( +/obj/effect/turf_decal/tile/red{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/security/office) +"rIH" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/obj/machinery/duct, +/turf/open/floor/iron/showroomfloor, +/area/station/medical/coldroom) +"rIJ" = ( +/obj/machinery/light/small/directional/south, +/turf/open/floor/catwalk_floor/iron_white, +/area/station/science/ordnance/testlab) +"rJb" = ( +/obj/machinery/power/smes/engineering, +/obj/structure/cable, +/obj/machinery/light/directional/west, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/engineering/main) +"rJg" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 5 + }, +/obj/machinery/vending/coffee, +/obj/machinery/light/small/dim/directional/east, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) +"rJs" = ( +/obj/machinery/light/directional/south, +/obj/effect/turf_decal/trimline/yellow/filled/line, +/obj/structure/table, +/obj/machinery/cell_charger, +/obj/item/holosign_creator/atmos{ + pixel_y = 7; + pixel_x = 4 + }, +/turf/open/floor/iron, +/area/station/engineering/main) +"rJv" = ( +/obj/structure/sign/warning/chem_diamond/directional/south, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/department/medical) +"rJy" = ( +/obj/machinery/portable_atmospherics/canister/air, +/obj/effect/turf_decal/bot, +/turf/open/floor/iron/large, +/area/station/engineering/atmos/storage/gas) +"rJz" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"rJD" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ + dir = 4 + }, +/obj/effect/turf_decal/tile/yellow{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/checker, +/area/station/engineering/atmos) +"rJK" = ( +/obj/machinery/door/airlock/security{ + name = "Detective's Closet" + }, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/access/all/security/detective, +/turf/open/floor/carpet, +/area/station/security/detectives_office) +"rJW" = ( +/obj/machinery/computer/shuttle/labor{ + dir = 8 + }, +/obj/effect/turf_decal/tile/red/anticorner/contrasted{ + dir = 4 + }, +/obj/machinery/airalarm/directional/east, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/textured, +/area/station/security/processing) +"rKb" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/dark_blue/half/contrasted{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/dark, +/area/station/command/bridge) +"rKi" = ( +/obj/machinery/firealarm/directional/north, +/turf/open/floor/iron/dark/textured, +/area/station/security/interrogation) +"rKq" = ( +/obj/structure/sign/warning/vacuum/directional/east, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/exit/departure_lounge) +"rKW" = ( +/obj/machinery/photocopier, +/obj/effect/turf_decal/bot_red, +/obj/machinery/light_switch/directional/east, +/turf/open/floor/iron/textured_large, +/area/station/cargo/sorting) +"rKY" = ( +/obj/structure/table, +/obj/effect/spawner/random/maintenance/two, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"rKZ" = ( +/obj/machinery/prisongate, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/security/execution/transfer) +"rLb" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/carpet/red, +/area/station/command/heads_quarters/qm) +"rLw" = ( +/obj/structure/cable/multilayer/multiz, +/turf/open/floor/plating, +/area/station/maintenance/department/medical) +"rLz" = ( +/obj/effect/turf_decal/stripes{ + dir = 1 + }, +/obj/structure/cable, +/obj/structure/extinguisher_cabinet/directional/north, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable/layer1, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"rLJ" = ( +/obj/effect/turf_decal/sand/plating, +/obj/effect/spawner/random/structure/girder, +/turf/open/floor/plating, +/area/station/maintenance/central/greater) +"rLK" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ + dir = 8 + }, +/turf/open/floor/plating, +/area/station/engineering/atmos) +"rLT" = ( +/obj/machinery/door/window/left/directional/east, +/obj/effect/decal/cleanable/ash, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark/textured_corner{ + dir = 1 + }, +/area/station/science/breakroom) +"rMj" = ( +/obj/structure/closet/secure_closet/hydroponics, +/obj/effect/turf_decal/stripes/line, +/obj/item/radio/intercom/directional/north, +/turf/open/floor/iron, +/area/station/service/hydroponics) +"rMx" = ( +/obj/machinery/door/airlock/external, +/obj/effect/mapping_helpers/airlock/access/all/engineering/external, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "ext42" + }, +/turf/open/floor/plating, +/area/station/maintenance/port/lesser) +"rMz" = ( +/obj/structure/cable, +/turf/open/floor/iron/solarpanel/airless, +/area/station/solars/port) +"rMP" = ( +/obj/machinery/light/directional/west, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark/textured_corner{ + dir = 4 + }, +/area/station/science/xenobiology) +"rMQ" = ( +/obj/structure/sign/painting/library{ + pixel_y = -32 + }, +/obj/effect/turf_decal/siding/wood, +/turf/open/floor/wood, +/area/station/service/library) +"rNs" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/kitchen_coldroom/freezerfloor, +/area/station/service/kitchen) +"rNJ" = ( +/turf/closed/wall, +/area/station/maintenance/solars/port/fore) +"rOq" = ( +/obj/structure/chair{ + dir = 1 + }, +/turf/open/floor/iron/textured, +/area/station/hallway/primary/central) +"rOF" = ( +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/security/office) +"rOL" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/cargo/miningoffice) +"rPe" = ( +/obj/structure/cable, +/turf/open/floor/iron/dark/corner{ + dir = 4 + }, +/area/station/command/meeting_room) +"rPg" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 1; + id = "kitchen_counter"; + name = "Kitchen Counter Shutters" + }, +/obj/machinery/door/firedoor, +/obj/item/holosign_creator/robot_seat/restaurant, +/turf/open/floor/iron/kitchen, +/area/station/service/kitchen) +"rPi" = ( +/obj/structure/flora/bush/flowers_br/style_random, +/obj/structure/window/spawner/directional/west, +/obj/structure/window/spawner/directional/north, +/turf/open/misc/grass, +/area/station/ai_monitored/turret_protected/aisat/foyer) +"rPt" = ( +/obj/structure/toilet{ + dir = 8 + }, +/obj/effect/decal/cleanable/vomit/old, +/obj/item/radio/intercom/directional/south, +/turf/open/floor/iron/showroomfloor, +/area/station/cargo/storage) +"rPy" = ( +/turf/closed/mineral/random/stationside/asteroid/porus{ + mineralChance = 20 + }, +/area/station/maintenance/port/greater) +"rPA" = ( +/obj/effect/turf_decal/tile/brown/anticorner/contrasted{ + dir = 1 + }, +/obj/item/kirbyplants/random, +/obj/machinery/light/small/directional/north, +/turf/open/floor/iron, +/area/station/cargo/storage) +"rPC" = ( +/obj/effect/turf_decal/tile/yellow/anticorner/contrasted{ + dir = 8 + }, +/obj/structure/table, +/obj/item/pipe_dispenser, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/construction/mining/aux_base) +"rPL" = ( +/obj/effect/spawner/random{ + loot = list(/obj/item/cardboard_cutout/nuclear_operative,/obj/item/cardboard_cutout/nuclear_operative,/obj/structure/fluff/balloon_nuke); + spawn_all_loot = 1; + spawn_loot_chance = 5; + spawn_loot_double = 0; + spawn_scatter_radius = 1 + }, +/turf/open/space/basic, +/area/space/nearstation) +"rPR" = ( +/obj/effect/turf_decal/siding/green{ + dir = 5 + }, +/turf/open/floor/iron/textured_large, +/area/station/hallway/primary/central) +"rQb" = ( +/obj/effect/turf_decal/siding/thinplating_new/end, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/glass, +/area/station/engineering/main) +"rQg" = ( +/obj/structure/chair{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/turf/open/floor/plating/airless, +/area/station/science/ordnance/bomb) +"rQx" = ( +/obj/machinery/door/airlock/research{ + name = "Mech Bay" + }, +/obj/effect/mapping_helpers/airlock/access/all/science/robotics, +/obj/machinery/door/firedoor, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/science/robotics/mechbay) +"rQy" = ( +/turf/open/floor/iron/showroomfloor, +/area/station/command/heads_quarters/qm) +"rQC" = ( +/obj/structure/chair/sofa/bench/right{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/machinery/light/warm/dim/directional/south, +/turf/open/floor/iron/dark, +/area/station/security/courtroom) +"rQI" = ( +/obj/machinery/conveyor{ + dir = 1; + id = "garbage" + }, +/turf/open/floor/plating, +/area/station/maintenance/disposal) +"rQK" = ( +/obj/machinery/door/airlock/security/glass, +/obj/effect/turf_decal/tile/red/fourcorners, +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/all/security/general, +/turf/open/floor/iron, +/area/station/security/office) +"rQO" = ( +/obj/effect/mapping_helpers/airlock/access/all/science/xenobio, +/obj/machinery/door/airlock/research{ + name = "Xenobiology" + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 1 + }, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/trimline/purple/filled/arrow_ccw{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/purple/filled/arrow_ccw{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/white/smooth_large, +/area/station/science/research) +"rQP" = ( +/obj/item/food/grown/banana, +/obj/structure/rack, +/turf/open/misc/asteroid, +/area/station/asteroid) +"rQS" = ( +/obj/effect/decal/cleanable/blood/old, +/turf/open/floor/plating, +/area/station/maintenance/central/greater) +"rQY" = ( +/obj/effect/landmark/start/warden, +/obj/effect/landmark/event_spawn, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/carpet/red, +/area/station/security/warden) +"rRb" = ( +/obj/effect/spawner/structure/window, +/turf/open/floor/plating, +/area/station/service/library) +"rRd" = ( +/obj/machinery/hydroponics/constructable{ + dir = 8 + }, +/obj/effect/turf_decal/bot, +/turf/open/floor/iron, +/area/station/service/hydroponics) +"rRs" = ( +/obj/structure/broken_flooring/corner/directional/north, +/obj/effect/landmark/generic_maintenance_landmark, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/solars/starboard/fore) +"rRt" = ( +/obj/structure/lattice/catwalk, +/turf/open/openspace, +/area/station/engineering/break_room) +"rRy" = ( +/mob/living/carbon/human/species/monkey, +/obj/machinery/camera/autoname/directional/north{ + network = list("ss13","medbay") + }, +/turf/open/floor/grass, +/area/station/medical/chemistry) +"rRz" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark/textured_half, +/area/station/science/xenobiology) +"rRK" = ( +/turf/closed/wall/r_wall, +/area/station/security/brig/entrance) +"rRL" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/medical/chemistry/minisat) +"rRO" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/station/science/ordnance/testlab) +"rRP" = ( +/obj/effect/turf_decal/trimline/green/filled/line, +/obj/structure/railing/corner, +/obj/machinery/firealarm/directional/south, +/turf/open/floor/iron/white, +/area/station/hallway/secondary/entry) +"rRY" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/dirt, +/obj/structure/rack, +/obj/item/trapdoor_remote/preloaded, +/turf/open/floor/plating/reinforced, +/area/station/command/emergency_closet) +"rSh" = ( +/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible{ + dir = 9 + }, +/turf/open/floor/iron/dark, +/area/station/science/ordnance) +"rSq" = ( +/obj/machinery/atmospherics/components/binary/pump{ + name = "CO2 to Pure" + }, +/obj/effect/turf_decal/tile/yellow{ + dir = 4 + }, +/turf/open/floor/iron/dark/corner{ + dir = 1 + }, +/area/station/engineering/atmos) +"rSB" = ( +/obj/machinery/atmospherics/pipe/smart/manifold/yellow/visible{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/science/ordnance) +"rSF" = ( +/obj/effect/turf_decal/siding, +/obj/structure/table, +/obj/machinery/microwave, +/turf/open/floor/iron/large, +/area/station/commons/locker) +"rSL" = ( +/obj/effect/turf_decal/tile/purple, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/station/science/lobby) +"rSS" = ( +/obj/machinery/light/directional/north, +/obj/structure/disposaloutlet{ + dir = 8 + }, +/obj/structure/window/spawner/directional/east, +/obj/structure/window/spawner/directional/south, +/obj/machinery/conveyor{ + dir = 8; + id = "sorter" + }, +/obj/structure/disposalpipe/trunk, +/turf/open/floor/iron/textured_large, +/area/station/cargo/sorting) +"rTc" = ( +/obj/structure/railing{ + dir = 8 + }, +/obj/structure/cable, +/turf/open/floor/iron/dark/side{ + dir = 10 + }, +/area/station/command/meeting_room) +"rTi" = ( +/obj/structure/bed, +/obj/item/bedsheet, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/flasher/directional/east{ + id = "Cell 4"; + pixel_y = -26 + }, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/security/brig) +"rTo" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/atmospherics/pipe/bridge_pipe/cyan/visible{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/bridge_pipe/green/visible{ + dir = 1 + }, +/turf/open/floor/plating, +/area/station/engineering/atmos) +"rTs" = ( +/obj/effect/turf_decal/tile/neutral, +/obj/item/radio/intercom/directional/east, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"rTw" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/commons/fitness/recreation) +"rTA" = ( +/obj/structure/closet/secure_closet{ + req_access = list("brig") + }, +/obj/effect/turf_decal/tile/red/anticorner/contrasted{ + dir = 4 + }, +/obj/machinery/airalarm/directional/east, +/turf/open/floor/iron, +/area/station/security/brig) +"rTC" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/wood/parquet, +/area/station/service/theater) +"rTH" = ( +/obj/effect/landmark/start/depsec/engineering, +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/engineering) +"rTM" = ( +/turf/closed/wall/r_wall, +/area/station/security/mechbay) +"rTQ" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/closed/wall/r_wall, +/area/station/science/ordnance/burnchamber) +"rTV" = ( +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 8 + }, +/obj/item/radio/intercom/directional/west, +/turf/open/floor/iron, +/area/station/hallway/primary/fore) +"rUf" = ( +/obj/effect/mapping_helpers/airlock/access/all/medical/coroner, +/obj/machinery/door/airlock/grunge{ + name = "Coroner Office" + }, +/obj/effect/turf_decal/stripes/red/end{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/medical/morgue) +"rUi" = ( +/obj/machinery/computer/security, +/obj/structure/window/reinforced/spawner/directional/north, +/obj/effect/turf_decal/tile/blue/half/contrasted, +/turf/open/floor/iron, +/area/station/command/bridge) +"rUt" = ( +/obj/machinery/door/airlock{ + id_tag = "u4"; + name = "Unit 4" + }, +/turf/open/floor/iron/freezer, +/area/station/commons/toilet/restrooms) +"rUu" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/maintenance/department/medical/central) +"rUC" = ( +/obj/machinery/atmospherics/components/unary/portables_connector/visible/layer4{ + dir = 4 + }, +/obj/machinery/portable_atmospherics/pump, +/obj/effect/turf_decal/delivery, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/machinery/light/small/directional/west, +/turf/open/floor/iron, +/area/station/commons/locker) +"rUZ" = ( +/obj/structure/reagent_dispensers/water_cooler, +/obj/machinery/light/small/directional/south, +/turf/open/floor/iron/white/textured_large, +/area/station/commons/fitness/recreation) +"rVj" = ( +/obj/machinery/light/dim/directional/south, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/grass, +/area/station/security/prison/garden) +"rVo" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/machinery/light/warm/directional/south, +/obj/effect/turf_decal/tile/bar/opposingcorners, +/turf/open/floor/iron, +/area/station/service/bar) +"rVu" = ( +/obj/structure/chair/sofa/bench/left{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/security/courtroom) +"rVv" = ( +/obj/machinery/door/airlock/security{ + id_tag = "IsolationCell"; + name = "Isolation Cell" + }, +/obj/effect/mapping_helpers/airlock/access/all/security/brig, +/obj/effect/turf_decal/tile/red/fourcorners, +/turf/open/floor/iron/white, +/area/station/security/prison/safe) +"rVy" = ( +/obj/machinery/camera/autoname/directional/south, +/turf/open/floor/glass, +/area/station/command/meeting_room) +"rVA" = ( +/obj/effect/turf_decal/tile/brown/opposingcorners{ + dir = 1 + }, +/obj/machinery/light/very_dim/directional/south, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/commons/vacant_room/commissary) +"rVD" = ( +/obj/effect/turf_decal/tile/neutral, +/obj/structure/sign/directions/supply/directional/east{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"rVL" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/engine, +/area/station/medical/chemistry) +"rVT" = ( +/obj/effect/turf_decal/stripes, +/obj/effect/turf_decal/stripes{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"rWf" = ( +/obj/structure/sign/poster/official/cleanliness/directional/north, +/obj/effect/turf_decal/bot, +/obj/item/reagent_containers/condiment/sugar{ + pixel_y = 4 + }, +/obj/item/storage/pill_bottle/happinesspsych{ + pixel_x = -4; + pixel_y = -1 + }, +/obj/item/storage/box/coffeepack, +/obj/item/storage/box/coffeepack/robusta, +/obj/item/reagent_containers/condiment/soymilk, +/obj/item/reagent_containers/condiment/milk, +/obj/structure/closet/secure_closet/freezer/empty/open, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/light/small/dim/directional/west, +/turf/open/floor/iron/dark, +/area/station/service/cafeteria) +"rWh" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/status_display/ai/directional/west, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"rWj" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 8; + id = "rndlab2"; + name = "Secondary Research and Development Shutter" + }, +/turf/open/floor/plating, +/area/station/science/lab) +"rWl" = ( +/obj/machinery/light/no_nightlight/directional/west, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"rWp" = ( +/obj/machinery/disposal/bin{ + desc = "A pneumatic waste disposal unit. This one leads into space!"; + name = "deathsposal unit" + }, +/obj/effect/turf_decal/stripes/end{ + dir = 1 + }, +/obj/machinery/light/directional/south, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/turf/open/floor/iron/white/textured_large, +/area/station/science/xenobiology) +"rWs" = ( +/obj/machinery/airalarm/directional/north, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/wood/parquet, +/area/station/cargo/boutique) +"rWv" = ( +/obj/structure/railing{ + dir = 4 + }, +/obj/effect/turf_decal/tile/brown/anticorner/contrasted{ + dir = 4 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/obj/machinery/camera/autoname/directional/north, +/turf/open/floor/iron, +/area/station/cargo/storage) +"rWI" = ( +/obj/structure/reagent_dispensers/watertank, +/obj/effect/turf_decal/bot{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 8 + }, +/obj/machinery/camera/autoname/directional/west, +/turf/open/floor/iron, +/area/station/engineering/storage) +"rWL" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/science/xenobiology) +"rWM" = ( +/obj/machinery/rnd/production/circuit_imprinter, +/obj/machinery/firealarm/directional/north, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 5 + }, +/turf/open/floor/iron, +/area/station/engineering/break_room) +"rWO" = ( +/obj/item/radio/intercom/prison/directional/west, +/turf/open/floor/iron, +/area/station/security/prison) +"rWQ" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/circuit/green, +/area/station/science/robotics/mechbay) +"rWZ" = ( +/obj/structure/chair{ + dir = 1 + }, +/obj/effect/landmark/start/lawyer, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/wood, +/area/station/service/lawoffice) +"rXd" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "qmprivacy"; + name = "Privacy Shutters" + }, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/command/heads_quarters/qm) +"rXg" = ( +/obj/structure/spirit_board, +/obj/item/storage/box/bodybags{ + pixel_y = 16 + }, +/turf/open/floor/cult, +/area/station/service/chapel/office) +"rXj" = ( +/obj/structure/railing/corner{ + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/iron, +/area/station/cargo/storage) +"rXp" = ( +/obj/effect/turf_decal/tile/red/anticorner/contrasted, +/obj/structure/closet/secure_closet/security/cargo, +/obj/structure/reagent_dispensers/wall/peppertank/directional/east, +/obj/machinery/airalarm/directional/south, +/turf/open/floor/iron, +/area/station/security/checkpoint/supply) +"rXq" = ( +/obj/structure/lattice, +/obj/structure/cable, +/obj/structure/transit_tube/curved/flipped, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/space/basic, +/area/space/nearstation) +"rXt" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/maintenance/solars/starboard/fore) +"rXD" = ( +/obj/machinery/door/airlock/security/glass{ + name = "Prisoner Processing" + }, +/obj/machinery/door/firedoor, +/obj/structure/cable, +/obj/effect/mapping_helpers/airlock/access/all/security/brig, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "perma-entrance" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/security/execution/transfer) +"rXG" = ( +/obj/machinery/airalarm/directional/north, +/turf/open/floor/plating, +/area/station/maintenance/department/science) +"rXQ" = ( +/obj/structure/lattice/catwalk, +/obj/structure/cable, +/obj/structure/railing{ + dir = 8 + }, +/turf/open/openspace, +/area/station/security/prison/garden) +"rXS" = ( +/obj/machinery/computer/rdconsole, +/obj/effect/turf_decal/tile/neutral/opposingcorners{ + dir = 1 + }, +/obj/effect/turf_decal/siding/purple, +/obj/machinery/requests_console/auto_name/directional/east, +/obj/effect/mapping_helpers/requests_console/announcement, +/obj/effect/mapping_helpers/requests_console/assistance, +/obj/effect/mapping_helpers/requests_console/information, +/turf/open/floor/iron/dark, +/area/station/command/heads_quarters/rd) +"rXT" = ( +/obj/effect/mapping_helpers/airlock/access/all/science/general, +/obj/machinery/door/airlock/maintenance_hatch, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 1 + }, +/turf/open/floor/plating, +/area/station/science/breakroom) +"rXU" = ( +/obj/structure/table, +/obj/item/clothing/head/utility/welding{ + pixel_x = 6; + pixel_y = 10 + }, +/obj/item/clothing/head/utility/welding{ + pixel_y = 7 + }, +/obj/item/clothing/head/utility/welding{ + pixel_x = -5; + pixel_y = 3 + }, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/storage/gas) +"rXZ" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 9 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/iron, +/area/station/security/prison/garden) +"rYe" = ( +/obj/machinery/atmospherics/components/unary/portables_connector/visible/layer2{ + dir = 1 + }, +/obj/structure/window/spawner/directional/east, +/obj/effect/turf_decal/box/red, +/obj/item/radio/intercom/directional/south, +/turf/open/floor/iron/dark, +/area/station/science/ordnance) +"rYg" = ( +/obj/effect/landmark/event_spawn, +/obj/machinery/holopad, +/turf/open/floor/iron/white/smooth_large, +/area/station/medical/medbay/lobby) +"rYh" = ( +/obj/effect/turf_decal/tile/neutral, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/sign/poster/random/directional/east, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"rYo" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating/airless, +/area/station/science/ordnance/bomb) +"rYs" = ( +/obj/machinery/door/airlock/medical{ + name = "Medical Cold Room" + }, +/obj/effect/mapping_helpers/airlock/access/all/medical/surgery, +/obj/effect/turf_decal/siding/white, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/medical/coldroom) +"rYy" = ( +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/turf/open/floor/iron/stairs/medium{ + dir = 8 + }, +/area/station/medical/storage) +"rYJ" = ( +/obj/structure/closet/emcloset/anchored, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"rYU" = ( +/obj/structure/bed{ + dir = 4 + }, +/obj/effect/spawner/random/bedsheet{ + dir = 1 + }, +/obj/item/pillow/random, +/turf/open/floor/carpet, +/area/station/commons/dorms) +"rYZ" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/iron/dark, +/area/station/science/xenobiology) +"rZb" = ( +/obj/machinery/power/smes/engineering, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 9 + }, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/engineering/main) +"rZc" = ( +/turf/open/floor/cult, +/area/station/service/chapel/office) +"rZg" = ( +/mob/living/carbon/human/species/monkey, +/turf/open/misc/asteroid, +/area/station/asteroid) +"rZz" = ( +/obj/machinery/door/airlock{ + name = "Maintenance Bathroom" + }, +/obj/effect/mapping_helpers/airlock/access/any/medical/maintenance, +/obj/effect/mapping_helpers/airlock/unres, +/obj/structure/broken_flooring/side/directional/north, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/mapping_helpers/airlock/abandoned, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"rZB" = ( +/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible{ + dir = 10 + }, +/obj/structure/lattice, +/turf/open/space/basic, +/area/space/nearstation) +"rZC" = ( +/obj/effect/turf_decal/tile/blue, +/obj/effect/turf_decal/tile/green{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/obj/machinery/holopad, +/turf/open/floor/iron, +/area/station/service/hydroponics) +"rZJ" = ( +/obj/effect/turf_decal/siding/thinplating_new, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/spawner/random/trash/mess, +/turf/open/floor/iron, +/area/station/maintenance/department/cargo) +"rZK" = ( +/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible, +/obj/effect/turf_decal/tile/yellow{ + dir = 8 + }, +/obj/item/radio/intercom/directional/west, +/turf/open/floor/iron/dark/corner{ + dir = 1 + }, +/area/station/engineering/atmos) +"rZL" = ( +/obj/machinery/door/airlock{ + id_tag = "u1"; + name = "Unit 1" + }, +/turf/open/floor/iron/freezer, +/area/station/commons/toilet/restrooms) +"rZX" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/engineering/atmos/upper) +"sab" = ( +/obj/effect/landmark/start/research_director, +/turf/open/floor/glass/reinforced/plasma, +/area/station/command/heads_quarters/rd) +"sad" = ( +/obj/machinery/door/airlock/hatch{ + name = "Secure Pen" + }, +/obj/effect/mapping_helpers/airlock/access/all/science/xenobio, +/obj/structure/cable, +/turf/open/floor/engine, +/area/station/science/xenobiology) +"sap" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/turf/open/floor/carpet/black, +/area/station/command/heads_quarters/hos) +"sar" = ( +/obj/machinery/camera/autoname/directional/south{ + network = list("ss13","rd") + }, +/turf/open/floor/catwalk_floor/iron_white, +/area/station/science/ordnance/testlab) +"sas" = ( +/obj/machinery/door/airlock/command/glass{ + name = "Emergency Spatial Evacuation" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/obj/effect/mapping_helpers/airlock/access/all/command/captain, +/turf/open/floor/engine, +/area/station/command/heads_quarters/captain/private) +"saA" = ( +/obj/machinery/door/window/right/directional/east{ + name = "Corpse Arrivals"; + req_access = list("morgue_secure") + }, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/structure/disposalpipe/trunk/multiz/down{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured, +/area/station/medical/morgue) +"saH" = ( +/obj/structure/filingcabinet, +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 6 + }, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/engineering) +"saJ" = ( +/obj/effect/turf_decal/bot_white/left, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/station/engineering/gravity_generator) +"saQ" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark/textured, +/area/station/science/robotics/lab) +"saY" = ( +/obj/structure/table/wood, +/obj/item/clothing/gloves/maid, +/obj/item/clothing/neck/maid, +/obj/effect/decal/cleanable/blood/old, +/turf/open/floor/plating, +/area/station/maintenance/central/greater) +"sbd" = ( +/turf/open/floor/iron/textured_large, +/area/station/engineering/storage/tech) +"sbf" = ( +/obj/effect/spawner/structure/window, +/turf/open/floor/plating, +/area/station/engineering/atmos/pumproom) +"sbn" = ( +/obj/effect/spawner/random/trash/mess, +/obj/machinery/airalarm/directional/north, +/turf/open/floor/plating, +/area/station/maintenance/central/greater) +"sbo" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/textured, +/area/station/construction/mining/aux_base) +"sbp" = ( +/obj/structure/toilet, +/turf/open/floor/plating, +/area/station/maintenance/central/greater) +"sby" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/engine, +/area/station/hallway/secondary/entry) +"sbL" = ( +/obj/machinery/door/airlock/engineering{ + name = "Aft Port Solar Access" + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/obj/effect/mapping_helpers/airlock/unres, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/maintenance/solars/port/aft) +"sbR" = ( +/obj/structure/railing, +/obj/structure/railing{ + dir = 1 + }, +/obj/structure/lattice/catwalk, +/turf/open/openspace, +/area/station/science/xenobiology) +"sbU" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/spawner/random/structure/crate, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"sbZ" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/engineering/gravity_generator) +"scd" = ( +/obj/structure/cable, +/obj/machinery/door/airlock/atmos/glass{ + name = "Atmospherics" + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, +/obj/machinery/door/poddoor/preopen{ + id = "atmos"; + name = "Atmospherics Blast Door" + }, +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/tile/yellow/opposingcorners{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/landmark/navigate_destination/atmos, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/checker, +/area/station/engineering/atmos/storage/gas) +"scg" = ( +/obj/effect/landmark/event_spawn, +/turf/open/floor/glass/reinforced, +/area/station/ai_monitored/turret_protected/ai_upload_foyer) +"sco" = ( +/obj/structure/reagent_dispensers/water_cooler, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/turf/open/floor/wood/parquet, +/area/station/medical/psychology) +"scs" = ( +/obj/structure/chair/sofa/bench/left, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"scw" = ( +/obj/machinery/door/airlock/mining{ + name = "Mining Office" + }, +/obj/effect/mapping_helpers/airlock/access/all/supply/mining, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/cargo/storage) +"scS" = ( +/obj/machinery/duct, +/obj/effect/turf_decal/sand/plating, +/turf/open/floor/plating, +/area/station/asteroid) +"scT" = ( +/obj/structure/table, +/obj/item/toy/balloon, +/obj/effect/turf_decal/tile/red/diagonal_edge, +/obj/machinery/light/directional/east, +/turf/open/floor/iron/dark, +/area/station/security/warden) +"sdc" = ( +/turf/closed/wall, +/area/station/cargo/storage) +"sdn" = ( +/obj/machinery/keycard_auth/directional/south, +/turf/open/floor/glass/reinforced/plasma, +/area/station/command/heads_quarters/rd) +"sdA" = ( +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 8 + }, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/security/execution/transfer) +"sdW" = ( +/obj/structure/railing{ + dir = 9 + }, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"sed" = ( +/obj/structure/chair/sofa/bench/left, +/turf/open/floor/iron/white, +/area/station/medical/exam_room) +"sep" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/iron/white/smooth_large, +/area/station/medical/paramedic) +"set" = ( +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ + dir = 1 + }, +/turf/open/floor/iron/dark/textured_half{ + dir = 1 + }, +/area/station/science/xenobiology) +"seJ" = ( +/obj/machinery/light/dim/directional/north, +/obj/structure/cable, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"seV" = ( +/obj/effect/turf_decal/tile/dark_red/opposingcorners, +/obj/effect/landmark/start/hangover, +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/service/bar) +"seW" = ( +/obj/effect/turf_decal/tile/red/opposingcorners, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/structure/cable, +/turf/open/floor/iron/white, +/area/station/security/prison/mess) +"sfh" = ( +/obj/structure/closet/secure_closet/security/sec, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/security/lockers) +"sfl" = ( +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 4 + }, +/obj/machinery/door/poddoor/shutters{ + dir = 8; + id = "teleporterhubshutters"; + name = "Teleporter Shutters" + }, +/turf/open/floor/iron/dark, +/area/station/command/teleporter) +"sfm" = ( +/obj/effect/turf_decal/tile/red/anticorner/contrasted{ + dir = 8 + }, +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/security/office) +"sfu" = ( +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 8 + }, +/obj/machinery/conveyor{ + dir = 1; + id = "QMLoad2" + }, +/turf/open/floor/iron, +/area/station/cargo/storage) +"sfF" = ( +/obj/item/robot_suit, +/obj/effect/turf_decal/siding/red{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/circuit, +/area/station/science/robotics/lab) +"sfH" = ( +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"sfT" = ( +/obj/structure/cable/layer3, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/ai_monitored/turret_protected/aisat_interior) +"sfY" = ( +/obj/structure/stairs/east, +/obj/structure/railing{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/aisat/foyer) +"sgc" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 4 + }, +/turf/open/floor/engine, +/area/station/science/xenobiology) +"sge" = ( +/turf/closed/wall/r_wall, +/area/station/science/robotics/storage) +"sgg" = ( +/obj/machinery/atmospherics/pipe/smart/manifold/purple/visible{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/engineering/atmos/pumproom) +"sgq" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/commons/locker) +"sgu" = ( +/obj/effect/decal/cleanable/glass, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/plating, +/area/station/commons/vacant_room/commissary) +"sgw" = ( +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/engineering/atmos) +"sgz" = ( +/turf/closed/wall/r_wall, +/area/station/command/heads_quarters/hop) +"sgG" = ( +/obj/structure/cable, +/obj/effect/landmark/event_spawn, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/engineering/main) +"sgR" = ( +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 1 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/obj/machinery/requests_console/auto_name/directional/north, +/obj/effect/mapping_helpers/requests_console/assistance, +/turf/open/floor/iron, +/area/station/cargo/storage) +"sgW" = ( +/obj/structure/chair/office/tactical{ + dir = 8 + }, +/obj/effect/landmark/start/security_officer, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/security/office) +"sha" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/shutters{ + name = "Countertheft Shutters"; + id = "boutique" + }, +/turf/open/floor/plating, +/area/station/cargo/boutique) +"shb" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/engineering/atmos/upper) +"shc" = ( +/obj/machinery/atmospherics/pipe/layer_manifold/scrubbers/hidden{ + dir = 4 + }, +/turf/closed/wall/r_wall, +/area/station/engineering/atmos/pumproom) +"shl" = ( +/obj/structure/table/wood, +/obj/item/paper_bin{ + pixel_x = -2; + pixel_y = 4 + }, +/obj/item/pen, +/turf/open/floor/carpet/purple, +/area/station/service/library) +"shs" = ( +/obj/effect/spawner/random/structure/grille, +/obj/structure/lattice, +/turf/open/space/basic, +/area/space/nearstation) +"shu" = ( +/obj/machinery/light/directional/north, +/obj/structure/cable, +/obj/effect/turf_decal/trimline/purple/filled/arrow_ccw, +/obj/effect/turf_decal/trimline/purple/filled/arrow_ccw{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/item/radio/intercom/directional/south, +/turf/open/floor/iron/white/smooth_large, +/area/station/science/xenobiology/hallway) +"shG" = ( +/obj/effect/mapping_helpers/airlock/access/all/service/kitchen, +/obj/machinery/door/airlock{ + name = "Kitchen" + }, +/obj/machinery/door/firedoor, +/obj/structure/cable, +/obj/effect/landmark/navigate_destination/kitchen, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/kitchen, +/area/station/service/kitchen) +"shI" = ( +/obj/effect/turf_decal/tile/green/half/contrasted{ + dir = 4 + }, +/obj/structure/chair{ + name = "Defense" + }, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/security/courtroom) +"sia" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/medical/treatment_center) +"sid" = ( +/obj/structure/chair/sofa/bench/left{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/security/courtroom) +"siG" = ( +/obj/structure/cable, +/obj/effect/spawner/random/maintenance, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/maintenance/central/lesser) +"siH" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 6 + }, +/turf/open/floor/wood/tile, +/area/station/security/courtroom) +"siK" = ( +/obj/structure/closet/emcloset, +/turf/open/floor/plating, +/area/station/maintenance/department/medical) +"siR" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"siS" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/landmark/blobstart, +/turf/open/floor/iron/dark, +/area/station/security/lockers) +"siU" = ( +/obj/item/pickaxe, +/obj/effect/turf_decal/sand/plating, +/turf/open/floor/plating, +/area/station/maintenance/department/medical) +"siX" = ( +/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/visible, +/obj/machinery/meter/monitored/waste_loop, +/obj/effect/turf_decal/tile/yellow{ + dir = 8 + }, +/turf/open/floor/iron/checker, +/area/station/engineering/atmos/pumproom) +"sji" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, +/obj/effect/turf_decal/stripes{ + dir = 10 + }, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"sjl" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/fore) +"sjo" = ( +/obj/effect/spawner/structure/window, +/turf/open/floor/plating, +/area/station/commons/storage/art) +"sjD" = ( +/obj/effect/decal/cleanable/blood/tracks{ + dir = 4 + }, +/obj/structure/sign/poster/random/directional/north, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"sjJ" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/iron, +/area/station/cargo/storage) +"sjL" = ( +/obj/machinery/door/airlock/public/glass{ + name = "Garden" + }, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/service/hydroponics/garden) +"sjN" = ( +/obj/machinery/light/small/directional/east, +/turf/open/floor/plating, +/area/station/maintenance/department/engine) +"sjR" = ( +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/airalarm/directional/north, +/obj/effect/mapping_helpers/airalarm/all_access, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/visible/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) +"sjW" = ( +/obj/machinery/atmospherics/pipe/bridge_pipe/yellow/visible{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/bridge_pipe/green/visible, +/turf/open/floor/iron, +/area/station/engineering/atmos) +"sjX" = ( +/obj/machinery/atmospherics/components/tank/air{ + dir = 4 + }, +/obj/structure/sign/poster/contraband/random/directional/west, +/turf/open/floor/plating, +/area/station/maintenance/department/medical) +"skb" = ( +/obj/structure/cable, +/obj/structure/window/reinforced/spawner/directional/south, +/turf/open/floor/glass/reinforced, +/area/station/security/prison) +"skc" = ( +/obj/effect/spawner/random/trash/mess, +/obj/machinery/door/airlock/maintenance, +/obj/structure/cable, +/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, +/turf/open/floor/plating, +/area/station/maintenance/port/lesser) +"skj" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/iron, +/area/station/cargo/sorting) +"skr" = ( +/obj/machinery/door/airlock/security/glass, +/obj/effect/turf_decal/tile/red/fourcorners, +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/all/security/general, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/security/office) +"skw" = ( +/obj/machinery/firealarm/directional/south, +/obj/machinery/portable_atmospherics/canister/air, +/obj/effect/turf_decal/stripes{ + dir = 1 + }, +/turf/open/floor/iron/dark/textured_large, +/area/station/ai_monitored/turret_protected/aisat/foyer) +"skL" = ( +/obj/effect/turf_decal/bot, +/obj/machinery/holopad, +/turf/open/floor/iron, +/area/station/cargo/storage) +"skQ" = ( +/obj/machinery/airalarm/directional/south, +/obj/effect/turf_decal/tile/blue, +/obj/effect/turf_decal/tile/green{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/service/hydroponics) +"skV" = ( +/obj/machinery/holopad, +/obj/effect/turf_decal/bot, +/turf/open/floor/iron, +/area/station/commons/locker) +"skW" = ( +/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/obj/machinery/door/airlock/engineering/glass{ + name = "Material Storage" + }, +/obj/structure/cable, +/obj/effect/landmark/navigate_destination, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/station/engineering/storage) +"slb" = ( +/obj/machinery/iv_drip, +/turf/open/floor/plating, +/area/station/maintenance/central/greater) +"sln" = ( +/obj/effect/turf_decal/siding/purple{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/white, +/area/station/science/research) +"slr" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/decal/cleanable/dirt/dust, +/obj/item/broken_bottle, +/turf/open/floor/plating, +/area/station/hallway/primary/starboard) +"slu" = ( +/obj/structure/transit_tube/curved, +/obj/structure/lattice, +/turf/open/space/basic, +/area/space/nearstation) +"slx" = ( +/obj/structure/cable, +/obj/machinery/door/airlock/maintenance_hatch, +/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/central/lesser) +"slG" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/white, +/area/station/medical/chemistry/minisat) +"slL" = ( +/obj/effect/turf_decal/tile/purple/opposingcorners, +/turf/open/floor/iron/white, +/area/station/science/lobby) +"slM" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/service/janitor) +"sme" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron/white/smooth_large, +/area/station/medical/treatment_center) +"smh" = ( +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/unres, +/obj/effect/decal/cleanable/dirt, +/obj/effect/mapping_helpers/airlock/welded, +/turf/open/floor/plating, +/area/station/maintenance/aft/upper) +"smi" = ( +/obj/machinery/firealarm/directional/south, +/obj/effect/turf_decal/tile/neutral, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"sml" = ( +/obj/structure/window/reinforced/spawner/directional/north, +/obj/structure/flora/bush/fullgrass/style_random, +/obj/structure/window/reinforced/spawner/directional/east, +/turf/open/floor/grass, +/area/station/science/research) +"smn" = ( +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/visible/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) +"smE" = ( +/obj/structure/window/reinforced/spawner/directional/south, +/obj/structure/flora/bush/fullgrass/style_random, +/turf/open/floor/grass, +/area/station/science/research) +"smG" = ( +/obj/structure/disposalpipe/junction/flip{ + dir = 8 + }, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) +"smM" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/station/cargo/boutique) +"smQ" = ( +/obj/machinery/power/solar_control{ + id = "forestarboard"; + name = "Starboard Bow Solar Control" + }, +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron, +/area/station/maintenance/solars/starboard/fore) +"smT" = ( +/obj/effect/turf_decal/tile/neutral, +/obj/structure/chair/sofa/bench/right{ + dir = 1 + }, +/obj/item/radio/intercom/directional/south, +/obj/effect/landmark/start/assistant, +/turf/open/floor/iron, +/area/station/commons/fitness/recreation) +"smZ" = ( +/obj/effect/turf_decal/tile/red/half/contrasted, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/security/interrogation) +"snj" = ( +/obj/effect/turf_decal/stripes/asteroid/line{ + dir = 4 + }, +/turf/open/misc/asteroid, +/area/station/hallway/primary/starboard) +"snk" = ( +/obj/structure/table/wood/poker, +/obj/item/storage/dice, +/obj/machinery/light/small/directional/south, +/turf/open/misc/asteroid, +/area/station/maintenance/central/greater) +"snl" = ( +/obj/machinery/light/small/directional/north, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/structure/chair/sofa/bench/right, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"sns" = ( +/obj/structure/table/wood, +/obj/structure/railing{ + dir = 8 + }, +/obj/item/book/manual/wiki/security_space_law, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/turf/open/floor/wood/tile, +/area/station/security/courtroom) +"snF" = ( +/obj/effect/turf_decal/tile/red/half/contrasted, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/fore) +"sok" = ( +/obj/machinery/newscaster/directional/west, +/obj/machinery/computer/records/medical/laptop, +/obj/structure/table/reinforced, +/turf/open/floor/iron/dark/textured, +/area/station/medical/morgue) +"sot" = ( +/obj/structure/table, +/obj/structure/sign/departments/medbay/directional/north, +/obj/item/circuitboard/machine/chem_master, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/showroomfloor, +/area/station/maintenance/department/engine) +"soA" = ( +/obj/effect/landmark/start/chaplain, +/obj/structure/chair{ + dir = 1 + }, +/obj/structure/cable, +/turf/open/floor/iron/grimy, +/area/station/service/chapel/office) +"soB" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/iron/textured_large, +/area/station/engineering/storage/tech) +"soG" = ( +/obj/structure/sink/directional/south, +/obj/structure/mirror/directional/north{ + pixel_y = 35 + }, +/obj/machinery/light/small/directional/west, +/turf/open/floor/iron/showroomfloor, +/area/station/science/research) +"soW" = ( +/obj/effect/landmark/event_spawn, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/white, +/area/station/science/ordnance/testlab) +"soZ" = ( +/obj/structure/transport/linear/public, +/obj/effect/spawner/random/structure/closet_empty/crate, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/plating/elevatorshaft, +/area/station/cargo/storage) +"spd" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/maintenance/department/engine) +"spf" = ( +/obj/effect/spawner/random/structure/closet_maintenance, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/commons/vacant_room/commissary) +"spg" = ( +/obj/effect/turf_decal/siding/wood, +/obj/structure/sign/painting/library{ + pixel_y = -32 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/wood/tile, +/area/station/service/bar) +"spl" = ( +/obj/structure/window/reinforced/spawner/directional/west, +/obj/structure/window/reinforced/spawner/directional/north, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/structure/tank_holder/extinguisher, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/aisat/foyer) +"spr" = ( +/obj/effect/turf_decal/stripes{ + dir = 5 + }, +/obj/machinery/camera/autoname/directional/north{ + network = list("ss13","engine") + }, +/obj/structure/cable, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"spw" = ( +/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/obj/machinery/door/airlock/engineering/glass{ + name = "Emitter Room" + }, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/engineering/supermatter/room) +"spA" = ( +/obj/effect/turf_decal/stripes/red/line{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/medical/morgue) +"spG" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/command/storage/satellite) +"spS" = ( +/obj/item/mop, +/obj/effect/spawner/random/trash/bucket, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"spU" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/sand/plating, +/turf/open/floor/plating, +/area/station/maintenance/department/medical) +"sqb" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"sqk" = ( +/obj/machinery/biogenerator, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/airalarm/directional/south, +/turf/open/floor/iron, +/area/station/security/prison/garden) +"sqo" = ( +/obj/machinery/light/warm/directional/north, +/obj/structure/bed/dogbed/renault, +/mob/living/basic/pet/fox/renault, +/turf/open/floor/carpet/executive, +/area/station/command/heads_quarters/captain/private) +"sqw" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line, +/turf/open/floor/iron, +/area/station/engineering/main) +"sqx" = ( +/obj/structure/window/spawner/directional/east, +/turf/open/floor/iron/dark, +/area/station/commons/fitness/recreation) +"sqz" = ( +/obj/effect/turf_decal/tile/dark_red/opposingcorners, +/obj/machinery/light/directional/south, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/service/bar/backroom) +"sqA" = ( +/obj/machinery/door/airlock/atmos{ + name = "Hypertorus Fusion Reactor" + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/engineering/atmospherics_engine) +"sqJ" = ( +/obj/machinery/portable_atmospherics/canister/plasma, +/obj/structure/window/reinforced/spawner/directional/west, +/obj/machinery/camera/autoname/directional/north{ + network = list("ss13","rd") + }, +/obj/structure/sign/warning/fire/directional/north, +/turf/open/floor/iron/white/smooth_large, +/area/station/science/ordnance/storage) +"sqL" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/science/xenobiology/hallway) +"sqZ" = ( +/obj/structure/lattice/catwalk, +/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ + dir = 5 + }, +/turf/open/space/basic, +/area/space/nearstation) +"srd" = ( +/obj/machinery/vending/wardrobe/jani_wardrobe, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/service/janitor) +"srh" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/machinery/firealarm/directional/west, +/obj/item/kirbyplants/random, +/obj/item/trash/chips, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"srj" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/service/chapel/funeral) +"srq" = ( +/obj/machinery/door/airlock/maintenance_hatch, +/obj/effect/turf_decal/siding/green/corner{ + dir = 8 + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/commons/storage/art) +"srs" = ( +/turf/closed/wall/r_wall, +/area/station/ai_monitored/turret_protected/aisat/foyer) +"srv" = ( +/obj/effect/turf_decal/sand/plating, +/obj/effect/landmark/generic_maintenance_landmark, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/plating, +/area/station/maintenance/central/greater) +"srE" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/turf_decal/tile/yellow, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) +"srI" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/suit_storage_unit/industrial/loader, +/turf/open/floor/iron, +/area/station/cargo/warehouse) +"ssg" = ( +/obj/structure/filingcabinet/chestdrawer, +/obj/effect/turf_decal/tile/neutral/opposingcorners{ + dir = 1 + }, +/obj/machinery/power/apc/auto_name/directional/west, +/obj/item/toy/figure/rd{ + pixel_y = 10 + }, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/command/heads_quarters/rd) +"ssJ" = ( +/obj/effect/turf_decal/tile/blue/half/contrasted{ + dir = 8 + }, +/obj/structure/disposalpipe/junction{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/station/medical/medbay/lobby) +"ssN" = ( +/obj/structure/cable, +/obj/effect/turf_decal/tile/red/opposingcorners, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/obj/structure/disposalpipe/junction/flip{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/security) +"ssS" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/machinery/light/small/directional/south, +/turf/open/floor/iron, +/area/station/commons/locker) +"ssZ" = ( +/obj/structure/railing{ + dir = 1 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/structure/cable, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/wood/tile, +/area/station/service/bar) +"sti" = ( +/obj/effect/mapping_helpers/airlock/access/all/science/general, +/obj/machinery/door/airlock/science, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark/small, +/area/station/science/cytology) +"stj" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/siding/purple{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/white, +/area/station/ai_monitored/turret_protected/ai_upload_foyer) +"stk" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/sand/plating, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/turf/open/floor/plating, +/area/station/maintenance/department/medical) +"stp" = ( +/obj/structure/railing{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 9 + }, +/obj/item/radio/intercom/directional/west, +/turf/open/floor/iron, +/area/station/engineering/main) +"stq" = ( +/obj/structure/table, +/obj/machinery/door/window/right/directional/east, +/obj/item/wheelchair{ + pixel_y = -3 + }, +/obj/item/wheelchair, +/obj/item/wheelchair{ + pixel_y = 3 + }, +/turf/open/floor/iron/white/textured, +/area/station/medical/paramedic) +"stw" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 8; + id = "roboticsprivacy"; + name = "Robotics Shutters" + }, +/turf/open/floor/plating, +/area/station/science/robotics/lab) +"stz" = ( +/turf/open/misc/asteroid, +/area/station/maintenance/port/greater) +"stE" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/spawner/random/engineering/atmospherics_portable, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"stF" = ( +/obj/structure/rack, +/obj/effect/spawner/random/armory/riot_shield, +/obj/effect/turf_decal/tile/red/half/contrasted, +/obj/machinery/airalarm/directional/north, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/security/armory) +"stP" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/visible, +/turf/closed/wall/r_wall, +/area/station/maintenance/disposal/incinerator) +"stS" = ( +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) +"suq" = ( +/obj/effect/landmark/start/station_engineer, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/junction/flip{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/engineering/main) +"sut" = ( +/obj/machinery/light/small/directional/south, +/obj/effect/turf_decal/tile/neutral, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/sign/directions/supply/directional/south{ + dir = 8 + }, +/obj/structure/sign/directions/engineering/directional/south{ + pixel_y = -40; + dir = 4 + }, +/obj/structure/sign/directions/security/directional/south{ + pixel_y = -24; + dir = 8 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"suw" = ( +/obj/machinery/chem_master, +/turf/open/floor/iron/dark/small, +/area/station/science/cytology) +"suB" = ( +/obj/structure/table/wood, +/obj/item/reagent_containers/cup/bottle/syrup_bottle/liqueur{ + pixel_x = -5; + pixel_y = 16 + }, +/obj/item/reagent_containers/cup/bottle/syrup_bottle/korta_nectar{ + pixel_x = 5; + pixel_y = 16 + }, +/obj/item/reagent_containers/cup/bottle/syrup_bottle/caramel{ + pixel_x = 15; + pixel_y = 16 + }, +/obj/item/storage/fancy/coffee_condi_display{ + pixel_x = 4; + pixel_y = 2 + }, +/obj/effect/turf_decal/tile/neutral/half/contrasted, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/light/small/directional/west, +/turf/open/floor/iron/dark, +/area/station/service/cafeteria) +"suK" = ( +/obj/effect/turf_decal/siding/purple{ + dir = 1 + }, +/obj/machinery/door/window/right/directional/north, +/turf/open/floor/engine, +/area/station/science/auxlab/firing_range) +"suO" = ( +/obj/structure/window/reinforced/spawner/directional/north, +/obj/effect/turf_decal/siding/purple{ + dir = 1 + }, +/turf/open/floor/engine, +/area/station/science/auxlab/firing_range) +"suV" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/yellow/half/contrasted, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/construction/mining/aux_base) +"svf" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/engineering/lobby) +"svl" = ( +/obj/structure/railing, +/obj/machinery/door/firedoor/border_only, +/obj/effect/turf_decal/trimline/blue/filled/line, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) +"svK" = ( +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/maintenance/department/engine) +"svS" = ( +/obj/machinery/newscaster/directional/north, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/wood/parquet, +/area/station/service/library) +"swe" = ( +/obj/structure/urinal/directional/north, +/obj/machinery/light/small/dim/directional/east, +/turf/open/floor/iron/freezer, +/area/station/commons/toilet/restrooms) +"swi" = ( +/turf/closed/wall/r_wall, +/area/station/science/robotics/mechbay) +"swj" = ( +/turf/open/floor/iron, +/area/station/cargo/miningoffice) +"swl" = ( +/obj/structure/railing{ + dir = 1 + }, +/turf/open/floor/iron/stairs{ + dir = 8 + }, +/area/station/ai_monitored/turret_protected/aisat/foyer) +"swv" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/hallway/primary/starboard) +"swH" = ( +/obj/machinery/door/window/brigdoor/right/directional/north{ + req_access = list("shipping") + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron, +/area/station/maintenance/department/cargo) +"swP" = ( +/obj/machinery/light/small/dim/directional/north, +/obj/machinery/power/apc/auto_name/directional/west, +/obj/structure/cable, +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/ai_monitored/command/storage/eva) +"swS" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/grass, +/area/station/medical/chemistry) +"swU" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/hallway/secondary/exit/departure_lounge) +"sxa" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 5 + }, +/obj/machinery/disposal/bin, +/obj/machinery/camera/autoname/directional/east{ + network = list("ss13","medbay") + }, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) +"sxk" = ( +/obj/machinery/newscaster/directional/south, +/turf/open/floor/iron/chapel, +/area/station/service/chapel) +"sxl" = ( +/obj/structure/closet/secure_closet/brig/genpop, +/obj/machinery/power/apc/auto_name/directional/east, +/obj/structure/cable, +/obj/machinery/light_switch/directional/north, +/turf/open/floor/iron/dark/textured, +/area/station/security/execution/transfer) +"sxC" = ( +/obj/structure/table/wood, +/obj/structure/secure_safe/directional/east, +/obj/item/flashlight/lamp/green{ + pixel_x = 4; + pixel_y = 12 + }, +/obj/item/restraints/handcuffs, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron, +/area/station/security/detectives_office) +"sxK" = ( +/obj/structure/rack, +/obj/effect/spawner/random/techstorage/rnd_all, +/turf/open/floor/iron/textured, +/area/station/engineering/storage/tech) +"sxL" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/obj/machinery/recharge_station, +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"sxV" = ( +/turf/open/floor/engine, +/area/station/hallway/secondary/entry) +"sye" = ( +/obj/structure/table, +/obj/item/paper/pamphlet/radstorm, +/turf/open/floor/iron/dark/side{ + dir = 9 + }, +/area/station/maintenance/radshelter/medical) +"syl" = ( +/obj/machinery/atmospherics/pipe/layer_manifold/purple/visible, +/turf/open/floor/iron, +/area/station/engineering/atmos) +"syF" = ( +/obj/effect/landmark/start/prisoner, +/turf/open/floor/grass, +/area/station/security/prison/garden) +"syL" = ( +/obj/effect/landmark/start/shaft_miner, +/turf/open/floor/iron, +/area/station/cargo/miningoffice) +"syR" = ( +/obj/structure/cable, +/obj/effect/turf_decal/sand/plating, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"syX" = ( +/obj/effect/decal/cleanable/greenglow/radioactive, +/turf/open/misc/asteroid, +/area/station/asteroid) +"szc" = ( +/turf/open/floor/engine/air, +/area/station/engineering/atmos) +"szi" = ( +/obj/effect/spawner/structure/window/reinforced/plasma, +/turf/open/floor/engine, +/area/station/maintenance/disposal/incinerator) +"szk" = ( +/obj/item/kirbyplants/random, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/firealarm/directional/west, +/turf/open/floor/iron/dark, +/area/station/science/server) +"szp" = ( +/obj/machinery/door/airlock/maintenance_hatch, +/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/commons/vacant_room/commissary) +"szq" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/iron/white/smooth_large, +/area/station/medical/exam_room) +"szt" = ( +/obj/structure/lattice/catwalk, +/obj/machinery/atmospherics/pipe/multiz/supply/visible/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/multiz/scrubbers/visible/layer2{ + dir = 4 + }, +/turf/open/space/openspace, +/area/space/nearstation) +"szD" = ( +/obj/effect/spawner/structure/window, +/turf/open/floor/plating, +/area/station/science/research) +"szK" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/broken_flooring/side{ + dir = 8 + }, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"szO" = ( +/obj/machinery/computer/monitor{ + name = "bridge power monitoring console" + }, +/obj/structure/cable, +/obj/effect/turf_decal/tile/yellow/half/contrasted, +/turf/open/floor/iron/dark, +/area/station/command/bridge) +"szR" = ( +/obj/effect/baseturf_helper/space, +/turf/open/floor/plating/airless, +/area/station/science/ordnance/bomb) +"sAc" = ( +/obj/structure/table/wood, +/obj/item/radio/intercom, +/turf/open/floor/carpet, +/area/station/service/theater) +"sAf" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/dark/visible, +/turf/open/floor/iron/dark/smooth_edge, +/area/station/science/xenobiology) +"sAr" = ( +/obj/machinery/door/airlock/medical/glass{ + name = "Treatment Centre" + }, +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/access/any/medical/general, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 8 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/white, +/area/station/medical/treatment_center) +"sAs" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/hallway/secondary/service) +"sAy" = ( +/obj/effect/landmark/start/scientist, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/white/smooth_large, +/area/station/science/research) +"sAJ" = ( +/obj/structure/sign/poster/random/directional/north, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"sAK" = ( +/obj/effect/turf_decal/tile/red/half/contrasted, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/turf/open/floor/iron/dark, +/area/station/security/lockers) +"sAN" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners{ + dir = 1 + }, +/obj/machinery/fax{ + fax_name = "Research Director's Office"; + name = "Research Director's Fax Machine" + }, +/obj/structure/table, +/obj/machinery/camera/autoname/directional/south{ + network = list("ss13","rd") + }, +/obj/machinery/firealarm/directional/south, +/obj/machinery/light_switch/directional/south{ + pixel_x = 8 + }, +/turf/open/floor/iron/dark, +/area/station/command/heads_quarters/rd) +"sAO" = ( +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/turf/open/floor/iron/white, +/area/station/science/lobby) +"sBb" = ( +/obj/effect/turf_decal/tile/brown/anticorner/contrasted{ + dir = 4 + }, +/obj/machinery/firealarm/directional/east, +/turf/open/floor/iron, +/area/station/cargo/storage) +"sBe" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"sBl" = ( +/obj/structure/cable, +/turf/open/floor/iron/dark/side{ + dir = 5 + }, +/area/station/command/meeting_room) +"sBm" = ( +/obj/machinery/power/apc/auto_name/directional/east, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/commons/vacant_room/commissary) +"sBr" = ( +/obj/effect/turf_decal/siding/purple/corner{ + dir = 8 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/iron/white/smooth_large, +/area/station/science/research) +"sBv" = ( +/obj/structure/railing, +/turf/open/floor/iron/stairs{ + dir = 8 + }, +/area/station/ai_monitored/turret_protected/aisat/foyer) +"sBG" = ( +/obj/machinery/light/warm/directional/north, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/turf/open/floor/wood/tile, +/area/station/service/bar) +"sBH" = ( +/obj/effect/turf_decal/siding/purple{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/science/robotics/mechbay) +"sBO" = ( +/obj/machinery/firealarm/directional/west, +/obj/effect/turf_decal/siding/purple{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/science/robotics/mechbay) +"sBZ" = ( +/obj/structure/sign/poster/official/random/directional/north, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/command/corporate_dock) +"sCf" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/landmark/event_spawn, +/turf/open/floor/iron, +/area/station/engineering/lobby) +"sCp" = ( +/obj/structure/lattice, +/turf/open/openspace, +/area/station/engineering/main) +"sCD" = ( +/obj/machinery/power/tracker, +/obj/structure/cable, +/turf/open/floor/iron/solarpanel/airless, +/area/station/solars/starboard/fore) +"sCE" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/preopen{ + id = "xeno_blastdoor"; + name = "Biohazard Containment Door" + }, +/turf/open/floor/plating, +/area/station/science/xenobiology) +"sCO" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/iron/dark, +/area/station/security/lockers) +"sCT" = ( +/obj/structure/closet/secure_closet/psychology, +/obj/item/radio/intercom/directional/south, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/wood/parquet, +/area/station/medical/psychology) +"sDd" = ( +/obj/structure/cable, +/obj/effect/landmark/event_spawn, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/service/hydroponics) +"sDh" = ( +/obj/structure/rack, +/obj/item/mod/module/plasma_stabilizer, +/obj/item/mod/module/thermal_regulator, +/obj/machinery/newscaster/directional/north, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 5 + }, +/turf/open/floor/iron, +/area/station/engineering/break_room) +"sDr" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/maintenance/department/engine) +"sDH" = ( +/obj/structure/cable, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/wood/tile, +/area/station/service/bar) +"sDK" = ( +/obj/structure/table/wood, +/obj/item/toy/crayon/spraycan/lubecan, +/obj/item/bikehorn{ + pixel_x = 6 + }, +/obj/item/radio/intercom/directional/north, +/obj/effect/turf_decal/tile/blue/opposingcorners, +/obj/effect/turf_decal/tile/red/opposingcorners{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/service/theater) +"sDP" = ( +/obj/effect/turf_decal/stripes/asteroid/corner{ + dir = 8 + }, +/turf/open/misc/asteroid, +/area/station/asteroid) +"sEe" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"sEv" = ( +/obj/structure/table, +/obj/machinery/recharger{ + pixel_y = 4 + }, +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 5 + }, +/obj/structure/reagent_dispensers/wall/peppertank/directional/north, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/engineering) +"sEC" = ( +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ + dir = 4 + }, +/obj/effect/turf_decal/tile/yellow{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark/corner, +/area/station/engineering/atmos) +"sEY" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/chair/comfy{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/maintenance/department/medical/central) +"sFa" = ( +/obj/effect/turf_decal/siding/purple{ + dir = 1 + }, +/turf/open/floor/iron/white/smooth_large, +/area/station/science/research) +"sFd" = ( +/obj/effect/turf_decal/tile/brown/anticorner/contrasted, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/vending/wardrobe/cargo_wardrobe, +/turf/open/floor/iron, +/area/station/cargo/storage) +"sFg" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/white/smooth_half, +/area/station/medical/pharmacy) +"sFq" = ( +/obj/structure/cable, +/obj/effect/turf_decal/tile/red/opposingcorners, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/junction{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/security) +"sFB" = ( +/obj/item/bedsheet/hop, +/obj/structure/bed, +/obj/effect/landmark/start/head_of_personnel, +/obj/machinery/airalarm/directional/south, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/firealarm/directional/east, +/turf/open/floor/iron/dark, +/area/station/command/heads_quarters/hop) +"sFT" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, +/turf/open/floor/plating, +/area/station/maintenance/port/lesser) +"sFX" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/landmark/blobstart, +/turf/open/floor/plating, +/area/station/maintenance/port/lesser) +"sGj" = ( +/obj/effect/mapping_helpers/airlock/access/any/supply/maintenance, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 8 + }, +/obj/machinery/door/airlock/maintenance{ + name = "Disposal Access" + }, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/turf/open/floor/plating, +/area/station/maintenance/disposal) +"sGk" = ( +/obj/effect/turf_decal/siding/white/corner, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/iron/herringbone, +/area/station/hallway/primary/central) +"sGs" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"sGt" = ( +/obj/effect/turf_decal/trimline/red/filled/line, +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 1 + }, +/obj/machinery/light/floor, +/obj/effect/landmark/event_spawn, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/landmark/start/depsec/medical, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/medical) +"sGu" = ( +/obj/structure/table, +/obj/machinery/processor{ + pixel_y = 12 + }, +/turf/open/floor/iron/kitchen, +/area/station/service/kitchen) +"sGz" = ( +/obj/structure/closet/secure_closet/security/sec, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 1 + }, +/obj/machinery/light/directional/north, +/turf/open/floor/iron/dark, +/area/station/security/lockers) +"sGE" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, +/obj/effect/turf_decal/stripes{ + dir = 9 + }, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"sGV" = ( +/turf/open/floor/iron/freezer, +/area/station/commons/toilet/restrooms) +"sHa" = ( +/obj/effect/turf_decal/sand/plating, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/asteroid) +"sHg" = ( +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/commons/storage/primary) +"sHh" = ( +/obj/effect/mapping_helpers/burnt_floor, +/obj/effect/decal/cleanable/blood/old, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"sHn" = ( +/obj/effect/turf_decal/siding/purple{ + dir = 1 + }, +/obj/structure/chair/sofa/bench/right{ + dir = 1 + }, +/turf/open/floor/iron/white/textured_large, +/area/station/science/research) +"sHz" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/dark, +/area/station/medical/chemistry/minisat) +"sIl" = ( +/obj/structure/table, +/obj/machinery/reagentgrinder{ + pixel_y = 12 + }, +/obj/effect/turf_decal/trimline/yellow/filled/line, +/obj/item/stack/sheet/mineral/plasma{ + pixel_y = -3 + }, +/obj/machinery/firealarm/directional/south, +/turf/open/floor/iron/white, +/area/station/medical/chemistry) +"sIm" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/engineering/supermatter/room) +"sIv" = ( +/obj/effect/turf_decal/trimline/blue/filled/line, +/obj/machinery/power/apc/auto_name/directional/south, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/white, +/area/station/medical/paramedic) +"sIx" = ( +/obj/structure/cable, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/engineering/lobby) +"sIA" = ( +/obj/structure/filingcabinet/filingcabinet, +/obj/effect/turf_decal/bot_red, +/turf/open/floor/iron/textured_large, +/area/station/cargo/sorting) +"sIJ" = ( +/obj/machinery/light/small/directional/north{ + bulb_power = 0.8 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/rack, +/obj/effect/spawner/random/maintenance/two, +/turf/open/floor/iron, +/area/station/commons/vacant_room/commissary) +"sIM" = ( +/obj/structure/filingcabinet/security, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/camera/autoname/directional/west, +/turf/open/floor/iron, +/area/station/security/evidence) +"sIN" = ( +/obj/effect/turf_decal/sand/plating, +/obj/effect/turf_decal/stripes/asteroid/line{ + dir = 1 + }, +/turf/open/floor/plating/airless, +/area/space/nearstation) +"sIQ" = ( +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/visible/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/landmark/event_spawn, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) +"sIV" = ( +/turf/open/misc/asteroid, +/area/station/maintenance/department/cargo) +"sIW" = ( +/obj/structure/transport/linear/public, +/turf/open/openspace, +/area/station/ai_monitored/turret_protected/aisat_interior) +"sIX" = ( +/obj/effect/turf_decal/arrows{ + dir = 4; + pixel_x = -7 + }, +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 8 + }, +/obj/machinery/door/firedoor, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/exit/departure_lounge) +"sIY" = ( +/obj/machinery/dna_scannernew, +/obj/structure/railing, +/obj/machinery/power/apc/auto_name/directional/west, +/obj/machinery/door/firedoor/border_only, +/obj/structure/cable, +/obj/effect/turf_decal/siding/purple/corner{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/turf/open/floor/iron/white/textured, +/area/station/science/genetics) +"sJh" = ( +/obj/machinery/portable_atmospherics/canister/nitrogen, +/obj/effect/turf_decal/bot, +/turf/open/floor/iron/large, +/area/station/engineering/atmos/storage/gas) +"sJo" = ( +/obj/structure/table/glass, +/obj/effect/spawner/random/food_or_drink/donkpockets, +/turf/open/floor/iron, +/area/station/engineering/lobby) +"sJz" = ( +/obj/machinery/camera/motion/directional/north{ + network = list("aicore"); + c_tag = "Secure - AI Upper External South" + }, +/turf/open/space/openspace, +/area/space/nearstation) +"sJG" = ( +/obj/effect/turf_decal/stripes{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"sJI" = ( +/obj/structure/chair/sofa/bench/left{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ + dir = 4 + }, +/obj/machinery/newscaster/directional/west, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/exit/departure_lounge) +"sJT" = ( +/turf/closed/wall/r_wall, +/area/station/ai_monitored/turret_protected/aisat/uppersouth) +"sJX" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/iron, +/area/station/cargo/storage) +"sKn" = ( +/obj/effect/turf_decal/delivery, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/power/apc/auto_name/directional/west, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) +"sKs" = ( +/obj/machinery/power/apc/auto_name/directional/north, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/central/greater) +"sKt" = ( +/turf/open/floor/carpet, +/area/station/medical/psychology) +"sKF" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/command/heads_quarters/hop) +"sKL" = ( +/turf/open/floor/plating/airless, +/area/station/solars/port/fore) +"sKM" = ( +/obj/machinery/door/firedoor, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"sLa" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/camera/autoname/directional/east, +/obj/structure/sign/poster/contraband/pwr_game/directional/east, +/turf/open/floor/iron/stairs{ + dir = 1 + }, +/area/station/cargo/bitrunning/den) +"sLn" = ( +/obj/effect/turf_decal/tile/dark_red/opposingcorners, +/obj/machinery/door/airlock{ + name = "Bar Storage" + }, +/obj/effect/mapping_helpers/airlock/access/all/service/bar, +/obj/machinery/door/firedoor, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/service/bar/backroom) +"sLt" = ( +/obj/machinery/camera/autoname/directional/east, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/service/chapel/office) +"sLy" = ( +/obj/effect/turf_decal/tile/red/anticorner/contrasted{ + dir = 8 + }, +/obj/structure/extinguisher_cabinet/directional/south, +/turf/open/floor/iron, +/area/station/security/brig/entrance) +"sLJ" = ( +/obj/machinery/door/poddoor/lift/preopen{ + transport_linked_id = "cargo" + }, +/obj/effect/turf_decal/stripes{ + dir = 8 + }, +/obj/effect/turf_decal/stripes{ + dir = 4 + }, +/obj/machinery/door/firedoor, +/turf/open/floor/iron/dark/textured_half{ + dir = 1 + }, +/area/station/cargo/storage) +"sLU" = ( +/obj/machinery/light/cold/dim/directional/west, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/ai_monitored/turret_protected/aisat_interior) +"sLW" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/airalarm/directional/north, +/turf/open/floor/plating, +/area/station/maintenance/department/bridge) +"sMl" = ( +/turf/open/floor/iron/white/textured, +/area/station/science/genetics) +"sMo" = ( +/obj/effect/landmark/event_spawn, +/obj/effect/turf_decal/siding/thinplating{ + dir = 4 + }, +/turf/open/floor/glass/reinforced, +/area/station/engineering/lobby) +"sMs" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/atmospherics/pipe/layer_manifold/yellow/visible{ + dir = 8 + }, +/turf/open/floor/plating, +/area/station/engineering/atmos) +"sMO" = ( +/obj/effect/spawner/random/vending/colavend, +/obj/structure/sign/warning/cold_temp/directional/south, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 6 + }, +/obj/machinery/camera/autoname/directional/east{ + network = list("ss13","medbay") + }, +/turf/open/floor/iron/white, +/area/station/medical/treatment_center) +"sMT" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/cargo/miningoffice) +"sMV" = ( +/obj/structure/railing, +/obj/effect/turf_decal/tile/brown/half/contrasted, +/obj/machinery/door/firedoor/border_only, +/turf/open/floor/iron, +/area/station/cargo/storage) +"sMX" = ( +/mob/living/basic/chicken{ + name = "Kentucky"; + real_name = "Kentucky" + }, +/turf/open/floor/grass, +/area/station/service/hydroponics/garden) +"sNc" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/engineering/atmospherics_engine) +"sNi" = ( +/obj/machinery/light/directional/north, +/obj/effect/mapping_helpers/broken_floor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/chair/sofa/bench/left{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/hallway/secondary/exit/departure_lounge) +"sNj" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/command/heads_quarters/hop) +"sNu" = ( +/obj/structure/sign/warning/electric_shock, +/turf/closed/wall/r_wall, +/area/station/security/prison/garden) +"sNy" = ( +/obj/effect/turf_decal/sand/plating, +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/spawner/random/structure/closet_maintenance, +/turf/open/floor/plating, +/area/station/maintenance/central/greater) +"sNJ" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/engineering/main) +"sNP" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/turf/open/floor/iron/white/herringbone, +/area/station/science/breakroom) +"sNU" = ( +/obj/effect/turf_decal/trimline/yellow/filled/corner{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/engineering/main) +"sOj" = ( +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/machinery/firealarm/directional/south, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark/textured_edge{ + dir = 4 + }, +/area/station/science/xenobiology) +"sOA" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/machinery/firealarm/directional/east, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"sOG" = ( +/obj/structure/window/reinforced/plasma/spawner/directional/south, +/obj/machinery/power/energy_accumulator/grounding_rod/anchored, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, +/turf/open/floor/engine, +/area/station/engineering/supermatter) +"sOJ" = ( +/obj/structure/flora/coconuts, +/obj/machinery/camera/autoname/directional/north{ + network = list("ss13","rd") + }, +/turf/open/floor/grass, +/area/station/science/genetics) +"sOS" = ( +/obj/structure/cable, +/obj/effect/turf_decal/trimline/purple/filled/arrow_ccw, +/obj/effect/turf_decal/trimline/purple/filled/arrow_ccw{ + dir = 1 + }, +/obj/machinery/light/directional/south, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/white/smooth_large, +/area/station/science/xenobiology/hallway) +"sPi" = ( +/obj/structure/closet/firecloset, +/obj/effect/landmark/start/hangover/closet, +/turf/open/floor/iron/textured, +/area/station/hallway/primary/central) +"sPv" = ( +/obj/structure/table/wood, +/obj/item/stamp/head/hop, +/turf/open/floor/carpet/green, +/area/station/command/heads_quarters/hop) +"sPC" = ( +/obj/effect/turf_decal/trimline/blue/filled/line, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/blue/filled/mid_joiner, +/turf/open/floor/iron/white/smooth_large, +/area/station/medical/surgery/theatre) +"sPD" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/security/checkpoint/science) +"sPS" = ( +/obj/effect/turf_decal/tile/dark_blue, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/hallway/secondary/command) +"sPV" = ( +/obj/machinery/atmospherics/components/binary/passive_gate{ + target_pressure = 600; + on = 1 + }, +/obj/effect/turf_decal/tile/yellow{ + dir = 8 + }, +/turf/open/floor/iron/dark/corner{ + dir = 1 + }, +/area/station/engineering/atmos/pumproom) +"sPW" = ( +/obj/machinery/light/floor, +/obj/structure/railing/corner{ + dir = 4 + }, +/turf/open/floor/iron/dark/smooth_large, +/area/station/command/meeting_room) +"sPY" = ( +/obj/effect/turf_decal/tile/dark_blue/anticorner/contrasted{ + dir = 4 + }, +/obj/item/radio/intercom/directional/north, +/turf/open/floor/iron, +/area/station/hallway/secondary/command) +"sQd" = ( +/obj/structure/cable/multilayer/connected, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/aisat/foyer) +"sQe" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/port/lesser) +"sQC" = ( +/obj/structure/chair/pew/left{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 4 + }, +/obj/machinery/button/door/directional/south{ + id = "chapel_shutters_parlour"; + name = "chapel shutters control" + }, +/turf/open/floor/carpet, +/area/station/service/chapel/funeral) +"sQD" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 4 + }, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) +"sQP" = ( +/obj/effect/turf_decal/tile/purple/full, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron/dark/smooth_large, +/area/station/science/xenobiology) +"sQU" = ( +/obj/machinery/light/directional/south, +/obj/structure/table, +/obj/item/clothing/mask/gas, +/obj/item/clothing/mask/gas, +/obj/item/clothing/mask/gas, +/turf/open/floor/glass/reinforced, +/area/station/science/xenobiology) +"sRj" = ( +/obj/structure/sign/poster/official/random/directional/east, +/obj/effect/turf_decal/siding/purple{ + dir = 5 + }, +/obj/machinery/camera/autoname/directional/north{ + network = list("ss13","rd") + }, +/obj/machinery/modular_computer/preset/civilian{ + dir = 8 + }, +/turf/open/floor/iron/white/herringbone, +/area/station/science/breakroom) +"sRl" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/iron/white, +/area/station/science/explab) +"sRo" = ( +/obj/machinery/power/solar_control{ + dir = 1; + id = "portaft"; + name = "Aft Port Solar Control" + }, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/solars/port/aft) +"sRq" = ( +/obj/item/stack/tile/iron/white, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/white, +/area/station/medical/chemistry/minisat) +"sRH" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/siding/white{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/item/radio/intercom/directional/north, +/turf/open/floor/iron/herringbone, +/area/station/hallway/primary/central) +"sRI" = ( +/obj/structure/girder, +/turf/open/floor/plating, +/area/station/maintenance/port/lesser) +"sRM" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/stairs/left{ + dir = 1 + }, +/area/station/command/bridge) +"sRP" = ( +/obj/machinery/photocopier, +/obj/machinery/light/directional/north, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/command/heads_quarters/hop) +"sRU" = ( +/obj/machinery/light/small/dim/directional/south, +/obj/item/paper_bin, +/obj/item/pen, +/obj/structure/table, +/turf/open/floor/iron/textured, +/area/station/hallway/primary/central) +"sRV" = ( +/obj/item/kirbyplants/organic/plant21, +/obj/item/radio/intercom/directional/south, +/turf/open/floor/wood, +/area/station/service/lawoffice) +"sSm" = ( +/obj/machinery/door/airlock/maintenance_hatch, +/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/commons/locker) +"sSL" = ( +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/white, +/area/station/science/research) +"sSN" = ( +/obj/machinery/atmospherics/components/unary/outlet_injector/monitored/ordnance_freezer_chamber_input{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/heat_exchanging/simple/layer2{ + dir = 6 + }, +/turf/open/floor/iron/dark/airless, +/area/station/science/ordnance) +"sSP" = ( +/obj/structure/chair/office/light{ + dir = 8 + }, +/turf/open/floor/holofloor/dark, +/area/station/command/heads_quarters/cmo) +"sSX" = ( +/obj/machinery/disposal/bin, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 8 + }, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/obj/machinery/digital_clock/directional/west, +/turf/open/floor/iron/dark, +/area/station/command/heads_quarters/hop) +"sTb" = ( +/obj/effect/turf_decal/tile/neutral, +/obj/structure/table, +/obj/effect/spawner/random/entertainment/deck, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"sTg" = ( +/obj/structure/table, +/obj/item/electronics/apc, +/obj/item/electronics/apc, +/obj/item/electronics/airlock, +/obj/item/electronics/airlock, +/obj/machinery/light_switch/directional/west, +/turf/open/floor/iron/textured, +/area/station/engineering/storage/tech) +"sTj" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/white, +/area/station/medical/chemistry) +"sTl" = ( +/obj/effect/spawner/random/decoration/statue{ + spawn_loot_chance = 50 + }, +/obj/structure/sign/painting/library_secure{ + pixel_x = 32 + }, +/obj/structure/window/spawner/directional/west, +/turf/open/floor/carpet/royalblue, +/area/station/service/library) +"sTB" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/railing{ + dir = 8 + }, +/turf/open/floor/engine, +/area/station/hallway/secondary/entry) +"sUc" = ( +/obj/item/bodypart/arm/left, +/turf/open/floor/plating/airless, +/area/station/science/ordnance/bomb) +"sUn" = ( +/obj/structure/table, +/obj/item/papercutter, +/obj/item/paper_bin/bundlenatural, +/turf/open/floor/iron/textured_large, +/area/station/cargo/sorting) +"sUy" = ( +/obj/structure/sign/poster/contraband/communist_state/directional/east, +/turf/open/space/basic, +/area/space/nearstation) +"sUz" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/security/brig) +"sUI" = ( +/obj/machinery/door/airlock{ + name = "Kitchen Cold Room" + }, +/obj/effect/mapping_helpers/airlock/access/all/service/kitchen, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/kitchen_coldroom/freezerfloor, +/area/station/service/kitchen) +"sUM" = ( +/obj/item/radio/intercom/directional/west, +/turf/open/openspace, +/area/station/security/warden) +"sUY" = ( +/obj/structure/chair/stool/directional/east, +/obj/effect/turf_decal/sand/plating, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/plating, +/area/station/maintenance/central/greater) +"sVn" = ( +/obj/effect/spawner/random/maintenance, +/turf/open/misc/asteroid, +/area/station/maintenance/department/cargo) +"sVv" = ( +/obj/machinery/portable_atmospherics/canister/air, +/obj/machinery/atmospherics/components/unary/portables_connector/visible, +/obj/machinery/light/small/directional/west, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"sVM" = ( +/obj/machinery/door/airlock/public/glass{ + name = "Garden" + }, +/obj/machinery/door/firedoor, +/turf/open/floor/iron, +/area/station/service/hydroponics/garden) +"sVT" = ( +/obj/structure/fluff/minepost, +/turf/open/misc/asteroid, +/area/station/maintenance/port/greater) +"sWd" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/broken_flooring/side, +/turf/open/floor/plating, +/area/station/cargo/warehouse) +"sWn" = ( +/obj/machinery/light/warm/directional/south, +/turf/open/floor/grass, +/area/station/service/hydroponics/garden) +"sWp" = ( +/obj/machinery/status_display/door_timer{ + id = "Cell 1"; + name = "Cell 1"; + pixel_y = -32; + pixel_x = -32 + }, +/obj/machinery/status_display/door_timer{ + id = "Cell 4"; + name = "Cell 4"; + pixel_y = -32; + pixel_x = 32 + }, +/obj/effect/turf_decal/tile/red/fourcorners, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/iron, +/area/station/security/brig) +"sWv" = ( +/obj/effect/spawner/random/decoration/showcase, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/turf/open/floor/wood/tile, +/area/station/command/corporate_showroom) +"sWy" = ( +/obj/structure/reagent_dispensers/servingdish, +/obj/structure/table/reinforced, +/obj/structure/window/spawner/directional/east, +/turf/open/floor/iron, +/area/station/security/prison/mess) +"sWC" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/machinery/newscaster/directional/north, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"sWN" = ( +/obj/effect/turf_decal/stripes{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable/multilayer/connected, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"sWT" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark/textured_large, +/area/station/engineering/storage/tech) +"sWY" = ( +/obj/machinery/door/airlock/external/glass{ + name = "Mining Dock Airlock" + }, +/obj/effect/turf_decal/stripes/end{ + dir = 8 + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/access/all/supply/mining, +/turf/open/floor/iron, +/area/station/cargo/miningoffice) +"sXf" = ( +/obj/structure/table/reinforced, +/obj/item/storage/toolbox/emergency, +/obj/item/storage/toolbox/emergency{ + pixel_x = -2; + pixel_y = -3 + }, +/obj/item/multitool, +/obj/item/wrench, +/obj/effect/turf_decal/tile/dark_blue/anticorner/contrasted{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/command/bridge) +"sXG" = ( +/obj/effect/turf_decal/tile/purple/opposingcorners, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/white, +/area/station/science/auxlab/firing_range) +"sXI" = ( +/obj/structure/lattice, +/obj/structure/grille/broken, +/turf/open/space/openspace, +/area/space/nearstation) +"sXJ" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/iron/white/smooth_large, +/area/station/medical/exam_room) +"sXL" = ( +/obj/structure/table/wood, +/obj/item/reagent_containers/cup/glass/ice{ + pixel_x = -4; + pixel_y = 2 + }, +/obj/item/food/donkpocket/pizza{ + pixel_x = 12 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/mapping_helpers/broken_floor, +/obj/machinery/light/small/directional/north, +/turf/open/floor/iron, +/area/station/service/cafeteria) +"sYb" = ( +/obj/structure/railing{ + dir = 8 + }, +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 8 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/station/cargo/storage) +"sYc" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 8; + id = "pharmacy_shutters"; + name = "Pharmacy Shutters" + }, +/turf/open/floor/plating, +/area/station/medical/pharmacy) +"sYi" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/airalarm/directional/east, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/command/teleporter) +"sYn" = ( +/obj/effect/turf_decal/siding/purple{ + dir = 1 + }, +/obj/structure/chair/sofa/bench/left{ + dir = 1 + }, +/turf/open/floor/iron/white/textured_large, +/area/station/science/research) +"sYs" = ( +/obj/machinery/light/warm/directional/north, +/obj/effect/turf_decal/siding/wood{ + dir = 9 + }, +/obj/structure/closet/emcloset/anchored, +/turf/open/floor/wood/tile, +/area/station/service/bar) +"sYu" = ( +/obj/structure/closet/crate/wooden/toy, +/obj/effect/landmark/start/hangover/closet, +/obj/effect/turf_decal/tile/blue/opposingcorners, +/obj/effect/turf_decal/tile/red/opposingcorners{ + dir = 1 + }, +/obj/item/storage/box/stickers, +/obj/structure/sign/poster/contraband/random/directional/east, +/turf/open/floor/iron, +/area/station/service/theater) +"sYy" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/engineering/atmos) +"sYB" = ( +/obj/machinery/door/airlock/security/glass{ + name = "Engineering Security Post" + }, +/obj/effect/mapping_helpers/airlock/access/all/security/general, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/security/checkpoint/engineering) +"sYD" = ( +/obj/item/toy/plush/lizard_plushie{ + name = "Scared-Of-Heights" + }, +/turf/open/floor/plating, +/area/station/hallway/primary/central) +"sYH" = ( +/obj/effect/landmark/blobstart, +/obj/effect/landmark/generic_maintenance_landmark, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"sYI" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/aisat/foyer) +"sYU" = ( +/obj/machinery/atmospherics/components/binary/pump{ + name = "Air to Port" + }, +/turf/open/floor/iron, +/area/station/engineering/atmos) +"sZl" = ( +/obj/effect/turf_decal/trimline/blue/filled/line, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/station/medical/paramedic) +"sZs" = ( +/obj/effect/landmark/event_spawn, +/obj/effect/turf_decal/siding/wood, +/turf/open/floor/wood/tile, +/area/station/service/bar) +"sZy" = ( +/obj/effect/spawner/random/structure/closet_maintenance, +/obj/item/clothing/gloves/color/fyellow, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/department/bridge) +"sZF" = ( +/obj/effect/turf_decal/trimline/green/filled/line, +/obj/machinery/door/firedoor/border_only, +/turf/open/floor/iron/white, +/area/station/hallway/secondary/entry) +"sZG" = ( +/obj/structure/lattice, +/turf/open/openspace, +/area/station/hallway/secondary/exit/departure_lounge) +"sZH" = ( +/obj/machinery/holopad, +/obj/effect/turf_decal/box/white{ + color = "#EFB341" + }, +/turf/open/floor/iron/white, +/area/station/medical/chemistry) +"sZK" = ( +/turf/open/floor/iron/dark, +/area/station/command/bridge) +"sZS" = ( +/obj/effect/spawner/random/engineering/vending_restock, +/obj/effect/spawner/random/structure/closet_maintenance, +/obj/machinery/light/small/directional/north, +/obj/effect/spawner/random/maintenance, +/obj/structure/window/reinforced/spawner/directional/east, +/turf/open/floor/plating, +/area/station/maintenance/port/lesser) +"sZT" = ( +/obj/machinery/door/airlock/public/glass{ + name = "Prison Showers" + }, +/obj/machinery/firealarm/directional/south, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/freezer, +/area/station/security/prison/shower) +"sZV" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 10 + }, +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/spawner/random/entertainment/coin{ + spawn_loot_count = 5; + spawn_random_offset = 5; + spawn_scatter_radius = 1 + }, +/turf/open/floor/wood, +/area/station/maintenance/central/lesser) +"tab" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/ai_monitored/command/storage/eva) +"tac" = ( +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/obj/machinery/disposal/bin, +/turf/open/floor/plating, +/area/station/commons/vacant_room/commissary) +"taj" = ( +/obj/effect/turf_decal/sand/plating, +/obj/structure/barricade/wooden, +/turf/open/floor/plating, +/area/station/asteroid) +"tar" = ( +/obj/effect/mapping_helpers/airlock/access/all/service/kitchen, +/obj/machinery/door/airlock{ + name = "Kitchen" + }, +/obj/machinery/door/firedoor, +/obj/structure/cable, +/turf/open/floor/iron/kitchen, +/area/station/service/kitchen) +"taw" = ( +/obj/effect/spawner/random/trash/mess, +/turf/open/floor/plating, +/area/station/maintenance/department/engine) +"taD" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/obj/effect/landmark/generic_maintenance_landmark, +/obj/item/toy/basketball, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/department/bridge) +"taI" = ( +/obj/machinery/vending/cigarette, +/obj/effect/turf_decal/siding/purple{ + dir = 6 + }, +/obj/machinery/light/small/directional/south, +/turf/open/floor/iron/white/herringbone, +/area/station/science/breakroom) +"taK" = ( +/obj/machinery/telecomms/server/presets/security, +/turf/open/floor/circuit/green/telecomms/mainframe, +/area/station/tcommsat/server) +"taP" = ( +/obj/structure/cable, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/maintenance/department/engine) +"taT" = ( +/obj/effect/turf_decal/trimline/blue/filled/line, +/obj/structure/extinguisher_cabinet/directional/south, +/turf/open/floor/iron/white, +/area/station/medical/storage) +"tbb" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/obj/structure/cable, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/maintenance/department/engine) +"tbe" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/wood, +/area/station/service/library) +"tbk" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/atmospherics_engine) +"tbp" = ( +/obj/item/flashlight/flare/candle/infinite{ + pixel_x = -16; + pixel_y = 16 + }, +/turf/open/misc/asteroid, +/area/station/asteroid) +"tbv" = ( +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 8 + }, +/obj/machinery/portable_atmospherics/canister, +/obj/machinery/camera/autoname/directional/east, +/turf/open/floor/iron/dark/textured, +/area/station/engineering/atmos) +"tbH" = ( +/turf/open/floor/iron, +/area/station/command/bridge) +"tbU" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/firedoor, +/obj/structure/cable, +/obj/machinery/door/poddoor/preopen{ + id = "Xenolab"; + name = "Test Chamber Blast Door" + }, +/turf/open/floor/plating, +/area/station/science/xenobiology) +"tbZ" = ( +/obj/structure/chair/comfy/brown{ + dir = 4; + name = "Head Of Security" + }, +/turf/open/floor/carpet/executive, +/area/station/command/meeting_room) +"tcx" = ( +/obj/machinery/door/airlock/command, +/obj/effect/mapping_helpers/airlock/access/all/science/rd, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/tile/neutral/opposingcorners{ + dir = 1 + }, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/science/server) +"tcL" = ( +/obj/machinery/camera/autoname/directional/east, +/turf/open/floor/iron/dark/side{ + dir = 4 + }, +/area/station/command/corporate_showroom) +"tcN" = ( +/obj/item/dice/d1, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"tdh" = ( +/obj/structure/closet/crate/trashcart/filled, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/maintenance/department/medical/central) +"tdk" = ( +/obj/structure/sign/departments/science/directional/east, +/obj/effect/landmark/navigate_destination/research, +/obj/effect/turf_decal/tile/purple/half/contrasted{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/science/lobby) +"tdm" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/item/training_toolbox{ + pixel_y = 5 + }, +/obj/item/training_toolbox, +/obj/structure/table, +/turf/open/floor/iron, +/area/station/commons/fitness/recreation) +"tdq" = ( +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"tdW" = ( +/obj/effect/turf_decal/tile/red/anticorner/contrasted{ + dir = 4 + }, +/obj/machinery/rnd/production/techfab/department/security, +/turf/open/floor/iron, +/area/station/security/office) +"tel" = ( +/obj/effect/spawner/structure/window/reinforced/plasma, +/obj/structure/lattice/catwalk, +/obj/structure/cable, +/turf/open/openspace, +/area/station/engineering/supermatter/room) +"teG" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/commons/storage/primary) +"teT" = ( +/obj/structure/cable, +/obj/effect/turf_decal/tile/dark_blue{ + dir = 1 + }, +/obj/effect/turf_decal/tile/dark_blue, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/hallway/secondary/command) +"teV" = ( +/obj/structure/sink/directional/north, +/obj/effect/turf_decal/tile/green/anticorner/contrasted, +/obj/item/radio/intercom/directional/east, +/turf/open/floor/iron/white, +/area/station/medical/virology) +"tft" = ( +/obj/structure/closet/secure_closet/security/science, +/obj/machinery/power/apc/auto_name/directional/south, +/obj/structure/cable, +/obj/effect/turf_decal/tile/red/opposingcorners, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/science) +"tfx" = ( +/obj/structure/closet/crate/coffin, +/obj/machinery/door/window/left/directional/east{ + name = "Coffin Storage"; + req_access = list("chapel_office") + }, +/turf/open/floor/plating, +/area/station/service/chapel/funeral) +"tfC" = ( +/obj/machinery/light/directional/east, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/iron/showroomfloor, +/area/station/engineering/main) +"tfZ" = ( +/obj/structure/window/reinforced/spawner/directional/north, +/obj/machinery/firealarm/directional/south, +/turf/open/floor/glass/reinforced, +/area/station/security/prison) +"tgf" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/carpet, +/area/station/commons/dorms) +"tgj" = ( +/obj/machinery/atmospherics/pipe/heat_exchanging/manifold{ + dir = 4 + }, +/turf/open/space/basic, +/area/space/nearstation) +"tgr" = ( +/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ + dir = 6 + }, +/turf/open/space/basic, +/area/space/nearstation) +"tgv" = ( +/obj/machinery/computer/crew{ + dir = 8 + }, +/obj/effect/turf_decal/tile/red/anticorner/contrasted, +/turf/open/floor/iron/textured, +/area/station/security/warden) +"tgw" = ( +/obj/machinery/power/smes/full, +/obj/structure/cable, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/airalarm/directional/north, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/command/storage/satellite) +"tgW" = ( +/obj/machinery/door/airlock/medical{ + name = "Primary Surgical Theatre" + }, +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/access/all/medical/surgery, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 8 + }, +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/white, +/area/station/medical/surgery/theatre) +"tgZ" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/cable, +/turf/open/floor/iron/recharge_floor, +/area/station/hallway/primary/central) +"thf" = ( +/turf/closed/wall, +/area/station/science/breakroom) +"thg" = ( +/obj/machinery/mass_driver/chapelgun, +/obj/machinery/light/small/dim/directional/north, +/obj/effect/turf_decal/stripes/end{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/service/chapel/funeral) +"tho" = ( +/obj/machinery/power/port_gen, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/extinguisher_cabinet/directional/east, +/obj/structure/cable, +/turf/open/floor/iron/dark/side{ + dir = 5 + }, +/area/station/command/emergency_closet) +"tht" = ( +/obj/machinery/button/door/directional/east{ + id = "gateshutter"; + name = "Gateway Shutter Control"; + req_access = list("command") + }, +/obj/effect/turf_decal/tile/neutral, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"thH" = ( +/obj/effect/turf_decal/tile/red/anticorner/contrasted{ + dir = 4 + }, +/obj/machinery/airalarm/directional/east, +/obj/structure/closet/secure_closet/security/sec, +/turf/open/floor/iron/dark, +/area/station/security/lockers) +"thI" = ( +/obj/structure/cable, +/obj/effect/turf_decal/trimline/yellow/filled/corner{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/station/engineering/main) +"thT" = ( +/turf/open/openspace, +/area/station/security/warden) +"thW" = ( +/obj/machinery/computer/piratepad_control/civilian{ + dir = 1 + }, +/obj/effect/turf_decal/bot_white, +/obj/machinery/light_switch/directional/south, +/turf/open/floor/iron/textured_large, +/area/station/cargo/lobby) +"thX" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/engineering/lobby) +"thZ" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/rack, +/obj/effect/spawner/random/engineering/tool, +/turf/open/floor/wood/parquet, +/area/station/cargo/boutique) +"tiv" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/blood/tracks, +/obj/structure/holosign/barrier, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/cargo/warehouse/upper) +"tiB" = ( +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/grimy, +/area/station/security/detectives_office/private_investigators_office) +"tiI" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/spawner/random/structure/furniture_parts, +/obj/effect/spawner/random/structure/crate, +/turf/open/floor/iron, +/area/station/maintenance/department/medical/central) +"tiL" = ( +/obj/structure/railing/corner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/red/filled/arrow_cw, +/obj/machinery/light/small/directional/south, +/turf/open/floor/iron/textured_large, +/area/station/security) +"tiP" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/security/prison/safe) +"tiT" = ( +/obj/structure/chair/sofa/bench/right{ + dir = 4 + }, +/obj/machinery/light/directional/west, +/obj/effect/turf_decal/tile/neutral/half{ + dir = 8 + }, +/turf/open/floor/iron/edge{ + dir = 8 + }, +/area/station/hallway/secondary/exit/departure_lounge) +"tiY" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/iron/white, +/area/station/science/explab) +"tjc" = ( +/obj/structure/cable, +/obj/item/radio/intercom/directional/south, +/turf/open/floor/iron/stairs{ + icon = 'icons/obj/stairs.dmi'; + icon_state = "stairs_wood"; + dir = 4 + }, +/area/station/service/chapel) +"tjd" = ( +/obj/machinery/chem_heater/withbuffer, +/obj/effect/turf_decal/trimline/yellow/filled/line, +/obj/effect/turf_decal/trimline/yellow/filled/mid_joiner, +/turf/open/floor/iron/white/smooth_edge, +/area/station/medical/pharmacy) +"tjq" = ( +/obj/structure/cable, +/obj/machinery/shower/directional/south, +/obj/effect/turf_decal{ + icon = 'icons/obj/mining_zones/survival_pod.dmi'; + icon_state = "fan_tiny" + }, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/iron/white/textured_large, +/area/station/science/xenobiology) +"tju" = ( +/obj/effect/turf_decal/tile/dark_blue/half/contrasted{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/rack, +/obj/effect/spawner/random/bureaucracy/pen{ + spawn_loot_count = 3; + spawn_random_offset = 2 + }, +/obj/item/radio/intercom/directional/north, +/turf/open/floor/iron/dark, +/area/station/command/bridge) +"tjz" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/machinery/computer/security/telescreen/entertainment/directional/east, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"tjB" = ( +/obj/machinery/computer/security{ + dir = 1 + }, +/obj/effect/turf_decal/tile/red/opposingcorners, +/obj/machinery/light/directional/east, +/obj/machinery/camera/autoname/directional/south{ + network = list("ss13","rd") + }, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/science) +"tjD" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/obj/effect/turf_decal/plaque{ + icon_state = "L5" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"tka" = ( +/obj/effect/turf_decal/tile/brown/half/contrasted, +/obj/machinery/power/apc/auto_name/directional/south, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/cargo/drone_bay) +"tkh" = ( +/obj/effect/turf_decal/tile/green/half/contrasted{ + dir = 4 + }, +/obj/item/radio/intercom/directional/east, +/turf/open/floor/iron/white, +/area/station/medical/virology) +"tki" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/service/chapel) +"tkr" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"tkD" = ( +/obj/effect/turf_decal/trimline/yellow/filled/warning, +/obj/structure/railing, +/obj/machinery/door/firedoor/border_only, +/turf/open/floor/iron, +/area/station/hallway/secondary/exit/departure_lounge) +"tkH" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/light/floor/broken, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"tkR" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/window/left/directional/south{ + name = "Hydroponics Desk"; + req_access = list("hydroponics") + }, +/obj/structure/desk_bell, +/obj/machinery/door/firedoor, +/turf/open/floor/iron, +/area/station/service/hydroponics) +"tla" = ( +/obj/machinery/power/apc/auto_name/directional/east, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/aisat/foyer) +"tlb" = ( +/obj/effect/turf_decal/tile/dark_red/opposingcorners, +/turf/open/floor/iron/dark, +/area/station/service/bar) +"tld" = ( +/turf/open/floor/iron/dark/textured, +/area/station/science/robotics/lab) +"tlp" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/commons/vacant_room/commissary) +"tlC" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"tlE" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/computer/teleporter{ + dir = 1 + }, +/obj/machinery/camera/autoname/directional/south, +/obj/machinery/light_switch/directional/west, +/turf/open/floor/iron/dark, +/area/station/command/teleporter) +"tlW" = ( +/obj/structure/cable, +/turf/open/floor/catwalk_floor/iron_dark/telecomms, +/area/station/ai_monitored/turret_protected/ai) +"tlY" = ( +/obj/effect/turf_decal/trimline/yellow/filled/corner, +/turf/open/floor/iron, +/area/station/engineering/lobby) +"tmk" = ( +/obj/machinery/door/airlock/grunge{ + name = "Prison Workshop" + }, +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/plating, +/area/station/security/prison/work) +"tmn" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/medical/medbay/lobby) +"tms" = ( +/obj/machinery/chem_heater/withbuffer, +/obj/structure/extinguisher_cabinet/directional/north, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/yellow/filled/mid_joiner{ + dir = 1 + }, +/turf/open/floor/iron/white/smooth_edge{ + dir = 1 + }, +/area/station/medical/pharmacy) +"tmR" = ( +/obj/structure/bed/maint, +/obj/item/bedsheet/yellow{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/blood/old, +/turf/open/floor/iron/grimy, +/area/station/maintenance/port/greater) +"tmT" = ( +/obj/structure/table, +/obj/machinery/button/flasher{ + pixel_y = 26; + id = "pbrig" + }, +/obj/item/clothing/shoes/sneakers/orange{ + pixel_x = -6; + pixel_y = -8 + }, +/obj/item/clothing/shoes/sneakers/orange{ + pixel_x = -6; + pixel_y = 4 + }, +/obj/item/clothing/shoes/sneakers/orange{ + pixel_x = -6; + pixel_y = -2 + }, +/obj/item/clothing/shoes/sneakers/orange{ + pixel_x = -6; + pixel_y = 10 + }, +/obj/item/clothing/under/rank/prisoner{ + pixel_x = 8; + pixel_y = 5 + }, +/obj/item/clothing/under/rank/prisoner{ + pixel_x = 8; + pixel_y = 5 + }, +/obj/item/clothing/under/rank/prisoner{ + pixel_x = 8; + pixel_y = 5 + }, +/obj/item/clothing/under/rank/prisoner{ + pixel_x = 8; + pixel_y = 5 + }, +/turf/open/floor/iron/dark/textured, +/area/station/security/execution/transfer) +"tnp" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/engineering/atmos) +"tnu" = ( +/obj/machinery/gateway/centerstation{ + bound_y = -32; + bound_x = 0; + bound_height = 96; + bound_width = 64; + dir = 8 + }, +/obj/effect/turf_decal/bot_white, +/turf/open/floor/iron/dark, +/area/station/command/gateway) +"tnv" = ( +/obj/machinery/camera/autoname/directional/east, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"tny" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/stripes{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/obj/machinery/airalarm/directional/north, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/ai_upload_foyer) +"tnD" = ( +/obj/item/bodypart/leg/left, +/turf/open/floor/plating/airless, +/area/station/science/ordnance/bomb) +"tnI" = ( +/obj/effect/turf_decal/tile/brown/half/contrasted, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/cargo/storage) +"tnL" = ( +/obj/item/stack/tile/glass/sixty, +/obj/item/wrench, +/obj/structure/closet/crate/engineering, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/port/greater) +"tnO" = ( +/obj/effect/turf_decal/stripes/end, +/obj/machinery/materials_market, +/obj/machinery/light/small/dim/directional/north, +/turf/open/floor/iron, +/area/station/cargo/storage) +"toc" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/entertainment/arcade{ + dir = 1 + }, +/obj/machinery/flasher/directional/south{ + id = "pbrig" + }, +/turf/open/floor/iron, +/area/station/security/prison) +"tom" = ( +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 1 + }, +/obj/structure/extinguisher_cabinet/directional/north, +/turf/open/floor/iron, +/area/station/cargo/storage) +"tot" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/station/command/meeting_room) +"toz" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"toC" = ( +/obj/machinery/door/airlock/maintenance_hatch, +/obj/structure/cable, +/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 8 + }, +/turf/open/floor/plating, +/area/station/hallway/secondary/exit/departure_lounge) +"toD" = ( +/obj/structure/table/wood, +/obj/item/paper_bin{ + pixel_x = 5; + pixel_y = 3 + }, +/obj/item/storage/fancy/candle_box{ + pixel_x = -12; + pixel_y = 3 + }, +/obj/machinery/newscaster/directional/north, +/obj/machinery/light/warm/directional/east, +/turf/open/floor/iron/chapel{ + dir = 4 + }, +/area/station/service/chapel) +"toJ" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/carpet/executive, +/area/station/command/heads_quarters/captain/private) +"toT" = ( +/obj/machinery/telecomms/bus/preset_two, +/turf/open/floor/circuit/green/telecomms/mainframe, +/area/station/tcommsat/server) +"tpj" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/plating, +/area/station/maintenance/port/greater) +"tpl" = ( +/obj/structure/sign/warning/rad_shelter/directional/west, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/white, +/area/station/medical/treatment_center) +"tpz" = ( +/obj/effect/spawner/random/structure/closet_maintenance, +/turf/open/floor/plating, +/area/station/maintenance/port/greater) +"tpC" = ( +/obj/machinery/door/airlock/maintenance_hatch, +/obj/effect/mapping_helpers/airlock/welded, +/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/wood, +/area/station/maintenance/central/lesser) +"tqk" = ( +/obj/machinery/conveyor{ + id = "garbage"; + dir = 8 + }, +/obj/effect/spawner/random/trash/garbage{ + spawn_loot_count = 3 + }, +/obj/machinery/door/window/left/directional/north{ + name = "Danger: Conveyor Access"; + req_access = list("maint_tunnels") + }, +/turf/open/floor/plating, +/area/station/maintenance/disposal) +"tqz" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/junction{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/cargo/storage) +"tqD" = ( +/obj/structure/railing{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/turf/open/floor/catwalk_floor/iron_white, +/area/station/science/lobby) +"tqJ" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/service/janitor) +"tqN" = ( +/obj/structure/table, +/obj/effect/turf_decal/tile/green/half/contrasted{ + dir = 1 + }, +/obj/effect/spawner/random/food_or_drink/snack, +/turf/open/floor/iron, +/area/station/hallway/primary/fore) +"tqV" = ( +/turf/open/floor/wood/parquet, +/area/station/medical/psychology) +"tra" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/door/window/brigdoor/right/directional/north{ + pixel_y = 1; + req_access = list("ordnance") + }, +/turf/open/floor/iron/white, +/area/station/science/ordnance/storage) +"trg" = ( +/obj/machinery/firealarm/directional/south, +/obj/structure/closet{ + anchored = 1; + can_be_unanchored = 1; + name = "Cold protection gear" + }, +/obj/item/clothing/shoes/winterboots, +/obj/item/clothing/shoes/winterboots, +/obj/item/clothing/shoes/winterboots, +/obj/item/clothing/suit/hooded/wintercoat/science, +/obj/item/clothing/suit/hooded/wintercoat/science, +/obj/item/clothing/suit/hooded/wintercoat/science, +/turf/open/floor/iron/white/smooth_corner{ + dir = 1 + }, +/area/station/science/xenobiology) +"tro" = ( +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/machinery/door/window/left/directional/east{ + name = "First Aid Supplies"; + req_access = list("medical") + }, +/obj/structure/table, +/obj/item/storage/medkit/regular{ + pixel_x = 3; + pixel_y = 6 + }, +/obj/item/storage/medkit/o2{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/storage/medkit/o2, +/obj/item/storage/medkit/o2{ + pixel_x = -3; + pixel_y = -3 + }, +/turf/open/floor/iron/white, +/area/station/medical/storage) +"trs" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"trz" = ( +/obj/effect/turf_decal/box/corners, +/turf/open/floor/iron, +/area/station/engineering/atmos) +"trK" = ( +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 8 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/iron/dark/side{ + dir = 4 + }, +/area/station/security/execution/transfer) +"trL" = ( +/obj/effect/turf_decal/siding/purple{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/science/robotics/mechbay) +"trP" = ( +/obj/effect/spawner/random/structure/crate_abandoned, +/turf/open/floor/plating, +/area/station/maintenance/department/medical) +"tsf" = ( +/obj/structure/bed/double{ + dir = 4 + }, +/obj/item/bedsheet/cmo/double{ + dir = 1 + }, +/turf/open/floor/carpet/blue, +/area/station/command/heads_quarters/cmo) +"tsj" = ( +/obj/effect/spawner/random/structure/closet_empty/crate, +/obj/effect/turf_decal/tile/brown/anticorner/contrasted{ + dir = 8 + }, +/obj/machinery/airalarm/directional/south, +/obj/machinery/light/small/directional/west, +/turf/open/floor/iron, +/area/station/cargo/lobby) +"tsk" = ( +/obj/structure/chair/sofa/bench{ + dir = 1 + }, +/obj/effect/landmark/start/prisoner, +/turf/open/floor/iron, +/area/station/security/prison) +"tsq" = ( +/obj/structure/chair/sofa/bench/right{ + dir = 1 + }, +/turf/open/floor/iron/white, +/area/station/medical/exam_room) +"tsy" = ( +/obj/effect/turf_decal/siding/purple{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/white/textured, +/area/station/science/genetics) +"tsz" = ( +/obj/machinery/door/airlock/external{ + name = "Escape Pod Two"; + space_dir = 4 + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 4 + }, +/obj/effect/landmark/navigate_destination/dockescpod2, +/turf/open/floor/plating, +/area/station/maintenance/department/science) +"tsI" = ( +/obj/machinery/camera/autoname/directional/north, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"tsJ" = ( +/obj/machinery/computer/cargo/request{ + dir = 8 + }, +/obj/effect/turf_decal/tile/dark_blue/anticorner/contrasted{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/command/bridge) +"tsP" = ( +/obj/structure/cable, +/turf/open/floor/carpet/green, +/area/station/command/heads_quarters/hop) +"tsU" = ( +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/sign/poster/contraband/lusty_xenomorph/directional/north, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"tsX" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/sign/warning/biohazard, +/turf/open/floor/plating, +/area/station/science/xenobiology) +"tth" = ( +/obj/structure/grille, +/turf/open/floor/plating, +/area/station/maintenance/central/greater) +"ttt" = ( +/turf/closed/wall/r_wall, +/area/station/command/emergency_closet) +"ttv" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 1 + }, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) +"ttL" = ( +/obj/effect/turf_decal/sand/plating, +/obj/effect/spawner/random/trash/garbage, +/turf/open/floor/plating, +/area/station/maintenance/central/greater) +"ttT" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/command/gateway) +"tus" = ( +/obj/machinery/plumbing/sender{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/red/line{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/newscaster/directional/west, +/turf/open/floor/iron/dark/textured_half{ + dir = 1 + }, +/area/station/medical/chemistry/minisat) +"tuA" = ( +/obj/structure/cable, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"tuE" = ( +/obj/effect/spawner/structure/window/hollow/middle{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"tuF" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/firealarm/directional/east, +/turf/open/floor/iron/dark, +/area/station/medical/chemistry/minisat) +"tuH" = ( +/obj/machinery/light/dim/directional/south, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/yellow, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) +"tuR" = ( +/obj/machinery/door/firedoor/border_only, +/obj/structure/railing, +/turf/open/floor/plating, +/area/station/maintenance/central/greater) +"tuT" = ( +/obj/effect/turf_decal/siding/purple{ + dir = 1 + }, +/obj/machinery/computer/security/telescreen/ordnance/directional/south, +/turf/open/floor/iron/white, +/area/station/science/ordnance/testlab) +"tuY" = ( +/obj/effect/turf_decal/trimline/blue/arrow_ccw{ + dir = 1 + }, +/obj/effect/turf_decal/tile/blue/half/contrasted{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/white, +/area/station/medical/medbay/lobby) +"tvc" = ( +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/cargo/lobby) +"tve" = ( +/obj/effect/turf_decal/stripes/red/line{ + dir = 9 + }, +/turf/open/floor/iron/dark, +/area/station/medical/morgue) +"tvj" = ( +/obj/structure/sign/poster/random/directional/south, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/turf/open/floor/wood/parquet, +/area/station/service/theater) +"tvt" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/catwalk_floor/flat_white, +/area/station/science/xenobiology) +"tvB" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/science/ordnance) +"tvQ" = ( +/obj/structure/chair/sofa/bench, +/obj/effect/landmark/start/prisoner, +/turf/open/floor/iron, +/area/station/security/prison) +"twf" = ( +/obj/machinery/door/poddoor/shutters/radiation/preopen{ + id = "soup"; + name = "Radiation Chamber Shutters" + }, +/obj/structure/cable, +/turf/open/floor/engine, +/area/station/engineering/supermatter) +"twm" = ( +/obj/effect/turf_decal/tile/purple/opposingcorners, +/obj/effect/landmark/event_spawn, +/turf/open/floor/iron/white, +/area/station/science/auxlab/firing_range) +"tww" = ( +/obj/structure/cable, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/ai_monitored/turret_protected/aisat/uppersouth) +"twx" = ( +/turf/open/openspace, +/area/station/maintenance/disposal) +"twR" = ( +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/cargo/storage) +"twW" = ( +/obj/structure/kitchenspike, +/obj/item/radio/intercom/directional/west, +/turf/open/floor/iron/kitchen_coldroom/freezerfloor, +/area/station/service/kitchen) +"txo" = ( +/obj/effect/turf_decal/caution/stand_clear, +/turf/open/floor/engine, +/area/station/command/corporate_dock) +"txw" = ( +/obj/structure/table, +/obj/effect/spawner/round_default_module, +/obj/machinery/flasher/directional/north, +/turf/open/floor/circuit/red, +/area/station/ai_monitored/turret_protected/ai_upload) +"txx" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/maintenance/department/cargo) +"txy" = ( +/obj/machinery/door/airlock/hatch, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 1 + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/department/science) +"txF" = ( +/obj/structure/table/optable, +/turf/open/floor/iron/dark/textured, +/area/station/medical/morgue) +"txK" = ( +/obj/structure/cable, +/obj/machinery/computer/warrant, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 1 + }, +/obj/machinery/digital_clock/directional/north, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/fore) +"tyd" = ( +/obj/effect/landmark/carpspawn, +/turf/open/space/basic, +/area/space) +"tye" = ( +/obj/effect/turf_decal/tile/brown/opposingcorners{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/commons/vacant_room/commissary) +"typ" = ( +/obj/effect/spawner/random/structure/chair_comfy{ + dir = 1 + }, +/turf/open/floor/iron/textured_large, +/area/station/command/bridge) +"tyu" = ( +/obj/effect/turf_decal/siding/purple/corner{ + dir = 1 + }, +/obj/structure/disposalpipe/junction/flip{ + dir = 4 + }, +/turf/open/floor/iron/white/smooth_large, +/area/station/science/research) +"tyQ" = ( +/obj/structure/cable, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/plating, +/area/station/maintenance/central/lesser) +"tzk" = ( +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 8 + }, +/obj/item/kirbyplants/random, +/turf/open/floor/iron, +/area/station/security/office) +"tzs" = ( +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron, +/area/station/service/cafeteria) +"tzw" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/landmark/blobstart, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/maintenance/department/engine) +"tzy" = ( +/obj/machinery/camera/autoname/directional/west{ + network = list("ss13","rd") + }, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/iron/dark/small, +/area/station/science/cytology) +"tzT" = ( +/obj/machinery/door/airlock/maintenance_hatch, +/obj/structure/cable, +/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, +/obj/effect/mapping_helpers/airlock/unres, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"tAa" = ( +/turf/closed/mineral/random/stationside/asteroid/porus{ + mineralChance = 20 + }, +/area/station/maintenance/central/greater) +"tAf" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/junction, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) +"tAk" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/cable, +/obj/machinery/light/warm/directional/south, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/yellow/filled/line, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/white, +/area/station/medical/chemistry/minisat) +"tAo" = ( +/obj/structure/lattice, +/turf/open/misc/asteroid/airless, +/area/station/asteroid) +"tAr" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron/large, +/area/station/hallway/secondary/exit/departure_lounge) +"tAt" = ( +/obj/machinery/power/smes, +/turf/open/floor/plating, +/area/station/maintenance/solars/port/aft) +"tAw" = ( +/obj/structure/toilet{ + dir = 1 + }, +/obj/effect/landmark/start/hangover, +/obj/effect/spawner/random/trash/graffiti{ + spawn_loot_chance = 50; + pixel_y = -32 + }, +/obj/machinery/light/small/dim/directional/east, +/obj/machinery/button/door/directional/west{ + normaldoorcontrol = 1; + specialfunctions = 4; + name = "privacy bolt control"; + id = "u5" + }, +/turf/open/floor/iron/freezer, +/area/station/commons/toilet/restrooms) +"tAx" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/engineering/atmos/pumproom) +"tAz" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/engine/cult, +/area/station/service/library) +"tAL" = ( +/obj/item/exodrone, +/obj/machinery/exodrone_launcher, +/turf/open/floor/iron/dark, +/area/station/cargo/drone_bay) +"tAQ" = ( +/obj/effect/turf_decal/stripes{ + dir = 4 + }, +/obj/machinery/atmospherics/components/binary/pump{ + name = "Gas Bypass" + }, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"tBe" = ( +/obj/machinery/computer/pod/old/mass_driver_controller/trash{ + pixel_x = -32; + pixel_y = 6; + range = 5 + }, +/obj/structure/cable, +/obj/machinery/button/door/directional/west{ + id = "Disposal Exit"; + name = "Disposal Vent Control"; + req_access = list("maint_tunnels"); + pixel_x = -32; + pixel_y = -6 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/disposal) +"tBg" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/item/radio/intercom/directional/north, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/ai_monitored/turret_protected/aisat/uppersouth) +"tBh" = ( +/obj/structure/railing/corner{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/turf_decal/trimline/yellow/filled/corner{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/engineering/lobby) +"tBi" = ( +/obj/effect/turf_decal/tile/brown/anticorner/contrasted{ + dir = 1 + }, +/obj/structure/rack, +/obj/effect/spawner/random/clothing/gloves, +/obj/effect/spawner/random/clothing/bowler_or_that, +/obj/machinery/light/small/directional/north, +/turf/open/floor/iron, +/area/station/cargo/boutique) +"tBo" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/turf/open/floor/wood/parquet, +/area/station/medical/psychology) +"tBt" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored/mix_output{ + dir = 4 + }, +/turf/open/floor/engine/vacuum, +/area/station/engineering/atmos) +"tBF" = ( +/obj/structure/closet/secure_closet/chief_medical, +/obj/item/screwdriver, +/turf/open/floor/carpet/blue, +/area/station/command/heads_quarters/cmo) +"tBK" = ( +/obj/effect/turf_decal/sand/plating, +/obj/effect/turf_decal/stripes/asteroid/line{ + dir = 6 + }, +/turf/open/floor/plating/airless, +/area/space/nearstation) +"tBL" = ( +/obj/machinery/door/airlock/maintenance_hatch, +/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 8 + }, +/obj/effect/turf_decal/sand/plating, +/turf/open/floor/plating, +/area/station/hallway/secondary/entry) +"tCb" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/trimline/yellow/filled/line, +/turf/open/floor/iron, +/area/station/engineering/lobby) +"tCm" = ( +/obj/effect/landmark/event_spawn, +/obj/structure/chair/wood{ + dir = 8 + }, +/obj/effect/landmark/start/quartermaster, +/turf/open/floor/carpet/red, +/area/station/command/heads_quarters/qm) +"tCt" = ( +/obj/machinery/computer/shuttle/mining{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/status_display/evac/directional/west, +/obj/machinery/light_switch/directional/south, +/turf/open/floor/iron/textured, +/area/station/cargo/miningoffice) +"tCz" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/catwalk_floor/flat_white, +/area/station/science/lab) +"tCE" = ( +/obj/effect/turf_decal/tile/neutral, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"tCH" = ( +/obj/structure/toilet{ + dir = 4 + }, +/obj/machinery/light/small/directional/west, +/obj/effect/spawner/random/trash/graffiti{ + pixel_x = -32; + spawn_loot_chance = 50 + }, +/obj/effect/landmark/blobstart, +/obj/machinery/newscaster/directional/north, +/turf/open/floor/iron/showroomfloor, +/area/station/engineering/main) +"tCJ" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 1; + id = "kitchen_counter"; + name = "Kitchen Counter Shutters" + }, +/obj/machinery/door/firedoor, +/obj/structure/displaycase/forsale/kitchen{ + pixel_y = 8 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron/kitchen, +/area/station/service/kitchen) +"tDa" = ( +/obj/effect/spawner/structure/window, +/turf/open/floor/plating, +/area/station/commons/locker) +"tDf" = ( +/turf/closed/wall, +/area/station/service/bar/backroom) +"tDg" = ( +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/all/supply/general, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"tDk" = ( +/obj/effect/turf_decal/siding/purple/corner, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/white/herringbone, +/area/station/science/breakroom) +"tDl" = ( +/obj/machinery/door/firedoor, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"tDm" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 6 + }, +/obj/item/radio/intercom/directional/east, +/obj/structure/tank_holder/oxygen, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) +"tDw" = ( +/obj/machinery/disposal/bin, +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/obj/effect/turf_decal/tile/neutral/full, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/turf/open/floor/iron/dark/smooth_large, +/area/station/hallway/primary/central) +"tDL" = ( +/obj/effect/turf_decal/siding/white{ + dir = 6 + }, +/turf/open/floor/iron/herringbone, +/area/station/commons/fitness/recreation) +"tDQ" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/obj/effect/turf_decal/plaque{ + icon_state = "L9" + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"tDS" = ( +/obj/machinery/atmospherics/pipe/heat_exchanging/simple/layer2{ + dir = 4 + }, +/turf/open/floor/iron/dark/airless, +/area/station/science/ordnance) +"tEn" = ( +/obj/structure/cable, +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/obj/effect/turf_decal/tile/green{ + dir = 8 + }, +/obj/effect/turf_decal/tile/green{ + dir = 4 + }, +/obj/machinery/duct, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/service/hydroponics) +"tEp" = ( +/obj/structure/table, +/obj/item/toy/talking/ai, +/obj/item/toy/minimeteor, +/obj/effect/turf_decal/tile/red/diagonal_edge, +/turf/open/floor/iron/dark, +/area/station/security/warden) +"tEu" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) +"tEy" = ( +/turf/open/floor/plating, +/area/station/maintenance/department/bridge) +"tEH" = ( +/obj/machinery/light/directional/east, +/obj/effect/turf_decal/tile/dark_blue/half/contrasted{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/hallway/secondary/command) +"tEI" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/spawner/random/structure/crate, +/obj/item/radio/intercom/directional/south, +/turf/open/floor/iron, +/area/station/cargo/warehouse) +"tEM" = ( +/obj/item/radio/intercom/directional/south, +/obj/effect/turf_decal/tile/yellow, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) +"tEU" = ( +/obj/structure/window/reinforced/spawner/directional/west, +/obj/structure/stairs/north, +/obj/structure/window/reinforced/spawner/directional/east, +/turf/open/floor/iron/dark/textured_large, +/area/station/engineering/storage/tech) +"tEW" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"tFa" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/dark, +/area/station/security/mechbay) +"tFD" = ( +/obj/structure/sink/directional/west, +/obj/structure/mirror/directional/east, +/turf/open/floor/iron/showroomfloor, +/area/station/cargo/storage) +"tFH" = ( +/obj/effect/turf_decal/tile/brown/fourcorners, +/obj/machinery/power/apc/auto_name/directional/west, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/cargo/sorting) +"tFW" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/engineering/lobby) +"tGb" = ( +/turf/open/openspace, +/area/station/engineering/supermatter/room) +"tGc" = ( +/obj/structure/girder, +/obj/effect/spawner/random/structure/grille, +/turf/open/floor/plating, +/area/station/maintenance/department/medical) +"tGt" = ( +/obj/structure/chair/stool/bar/directional/west, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/effect/turf_decal/tile/bar/opposingcorners, +/obj/machinery/light/warm/directional/north, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/turf/open/floor/iron, +/area/station/commons/lounge) +"tGu" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/security/prison) +"tGw" = ( +/obj/effect/turf_decal/tile/red/opposingcorners, +/obj/effect/turf_decal/tile/blue/opposingcorners{ + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/security/armory) +"tGE" = ( +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/obj/effect/turf_decal/tile/purple/half/contrasted{ + dir = 1 + }, +/turf/open/floor/iron/white, +/area/station/science/lobby) +"tGJ" = ( +/obj/structure/table/reinforced/rglass, +/obj/item/megaphone/sec, +/obj/effect/turf_decal/tile/red/anticorner/contrasted{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/security/office) +"tGM" = ( +/obj/machinery/firealarm/directional/south, +/obj/structure/closet/emcloset, +/obj/effect/turf_decal/tile/neutral/full, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/landmark/start/hangover/closet, +/turf/open/floor/iron/dark/smooth_large, +/area/station/hallway/primary/central) +"tGR" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 8 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/obj/effect/turf_decal/trimline/yellow/filled/mid_joiner{ + dir = 8 + }, +/obj/machinery/light_switch/directional/west, +/turf/open/floor/iron/white/smooth_large, +/area/station/medical/chemistry) +"tGW" = ( +/obj/machinery/atmospherics/pipe/smart/simple/dark/visible, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/science/ordnance) +"tGZ" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/chapel, +/area/station/service/chapel) +"tHh" = ( +/obj/effect/spawner/random/structure/closet_empty/crate, +/obj/effect/spawner/random/maintenance/three, +/turf/open/floor/plating, +/area/station/maintenance/port/lesser) +"tHr" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/white, +/area/station/medical/treatment_center) +"tHA" = ( +/obj/structure/closet/l3closet, +/obj/effect/turf_decal/tile/green/anticorner/contrasted{ + dir = 1 + }, +/turf/open/floor/iron/white, +/area/station/medical/virology) +"tHE" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/button/door/directional/west{ + id = "zaza" + }, +/turf/open/floor/iron/white, +/area/station/maintenance/aft/upper) +"tHF" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"tHR" = ( +/obj/structure/chair/sofa/bench/right{ + dir = 8 + }, +/obj/effect/turf_decal/tile/green/half/contrasted{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/fore) +"tHS" = ( +/obj/structure/railing/corner{ + dir = 8 + }, +/turf/open/floor/iron/dark/corner{ + dir = 8 + }, +/area/station/command/meeting_room) +"tIr" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/security/warden) +"tIs" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/turf/open/floor/catwalk_floor/flat_white, +/area/station/science/xenobiology) +"tIE" = ( +/obj/effect/landmark/secequipment, +/obj/effect/turf_decal/tile/red/anticorner/contrasted{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/security/interrogation) +"tIH" = ( +/turf/open/floor/grass, +/area/station/service/hydroponics/garden) +"tIL" = ( +/obj/effect/turf_decal/siding/white{ + dir = 1 + }, +/obj/machinery/light/warm/dim/directional/north, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/herringbone, +/area/station/hallway/primary/central) +"tIN" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/command/corporate_showroom) +"tIO" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/turf/open/floor/iron/dark, +/area/station/medical/chemistry/minisat) +"tIS" = ( +/obj/machinery/door/airlock/hatch{ + name = "Cyborg Break Room" + }, +/obj/machinery/door/firedoor, +/obj/structure/cable, +/obj/effect/mapping_helpers/airlock/access/all/command/minisat, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/ai_monitored/turret_protected/aisat_interior) +"tIT" = ( +/obj/effect/turf_decal/tile/neutral, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/digital_clock/directional/south, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"tJx" = ( +/obj/structure/chair/plastic{ + dir = 4 + }, +/obj/machinery/light/small/directional/west, +/obj/item/radio/intercom/directional/north, +/turf/open/floor/iron/dark/textured_corner, +/area/station/science/breakroom) +"tJB" = ( +/obj/machinery/door/window/right/directional/east{ + req_access = list("chapel_office") + }, +/obj/effect/turf_decal/tile/neutral/diagonal_centre, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/service/chapel/funeral) +"tJC" = ( +/obj/effect/turf_decal/tile/brown, +/obj/structure/railing/corner, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/cargo/lobby) +"tJO" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/machinery/door/firedoor/border_only, +/obj/effect/turf_decal/tile/bar/opposingcorners, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/turf/open/floor/iron, +/area/station/service/bar) +"tJS" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ + dir = 6 + }, +/obj/effect/turf_decal/tile/yellow{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark/corner, +/area/station/engineering/atmos/pumproom) +"tJT" = ( +/obj/structure/cable, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/machinery/door/airlock/engineering, +/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/maintenance/solars/starboard/fore) +"tKX" = ( +/obj/structure/table/reinforced, +/obj/item/storage/toolbox/mechanical{ + pixel_x = -1; + pixel_y = 4 + }, +/obj/effect/turf_decal/tile/dark_blue/half/contrasted{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/command/bridge) +"tLa" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/junction/flip{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/engineering/lobby) +"tLg" = ( +/turf/closed/indestructible/reinforced, +/area/space/nearstation) +"tLh" = ( +/obj/machinery/atmospherics/components/binary/tank_compressor{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/delivery, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/light_switch/directional/north, +/turf/open/floor/iron/dark, +/area/station/science/ordnance/testlab) +"tLs" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 4 + }, +/obj/structure/cable, +/obj/item/radio/intercom/directional/east, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) +"tLv" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/public/glass{ + name = "Departure Lounge" + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/hallway/secondary/exit/departure_lounge) +"tLH" = ( +/obj/item/storage/fancy/candle_box, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/department/science) +"tLI" = ( +/obj/machinery/vending/coffee, +/obj/effect/turf_decal/siding/brown{ + dir = 1 + }, +/obj/effect/turf_decal/tile/bar/opposingcorners, +/turf/open/floor/iron, +/area/station/commons/lounge) +"tLO" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/obj/machinery/door/poddoor/preopen{ + id = "xeno_blastdoor"; + name = "Biohazard Containment Door" + }, +/turf/open/floor/plating, +/area/station/science/xenobiology) +"tLX" = ( +/obj/structure/table/wood, +/obj/item/flashlight/flare/candle{ + start_on = 1; + icon_state = "candle1_lit" + }, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/item/radio/intercom/directional/south, +/turf/open/floor/carpet, +/area/station/service/chapel) +"tMf" = ( +/obj/item/modular_computer/laptop/preset/civilian, +/obj/structure/table/wood, +/turf/open/floor/carpet/red, +/area/station/security/warden) +"tMp" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/dirt, +/obj/item/clothing/suit/utility/fire/firefighter, +/turf/open/floor/plating/reinforced, +/area/station/command/emergency_closet) +"tMz" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/science/xenobiology) +"tMD" = ( +/obj/machinery/suit_storage_unit/radsuit, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 5 + }, +/obj/machinery/camera/autoname/directional/north, +/turf/open/floor/iron/dark, +/area/station/engineering/main) +"tME" = ( +/obj/structure/rack, +/obj/effect/spawner/random/armory/disablers, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 1 + }, +/obj/machinery/requests_console/auto_name/directional/south, +/obj/effect/mapping_helpers/requests_console/supplies, +/obj/effect/mapping_helpers/requests_console/assistance, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/security/armory) +"tMF" = ( +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/turf/open/floor/plating, +/area/station/maintenance/department/medical) +"tMK" = ( +/obj/structure/cable, +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/button/door/directional/east{ + pixel_y = 24; + name = "bolt control"; + normaldoorcontrol = 1; + specialfunctions = 4; + id = "cap_ext" + }, +/turf/open/floor/engine, +/area/station/command/heads_quarters/captain/private) +"tMO" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron/white, +/area/station/medical/treatment_center) +"tMP" = ( +/obj/effect/turf_decal/sand/plating, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/light/small/dim/directional/west, +/turf/open/floor/plating, +/area/station/asteroid) +"tMT" = ( +/obj/effect/turf_decal/siding/purple/corner{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/iron/white/smooth_edge{ + dir = 8 + }, +/area/station/science/research) +"tMV" = ( +/obj/structure/railing/corner{ + dir = 1 + }, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/ai_monitored/turret_protected/aisat/foyer) +"tNh" = ( +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light/small/directional/west, +/obj/effect/turf_decal/loading_area, +/obj/effect/turf_decal/stripes/red/line, +/turf/open/floor/engine, +/area/station/maintenance/disposal/incinerator) +"tNn" = ( +/obj/structure/cable, +/obj/machinery/navbeacon{ + codes_txt = "patrol;next_patrol=P9-Central-Primary"; + location = "P8-Central-Primary" + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"tNx" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/landmark/blobstart, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/cargo/warehouse) +"tNy" = ( +/obj/effect/landmark/secequipment, +/obj/effect/turf_decal/tile/red/anticorner/contrasted{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/security/interrogation) +"tNz" = ( +/obj/effect/turf_decal/tile/neutral/half{ + dir = 4 + }, +/turf/open/floor/iron/edge{ + dir = 4 + }, +/area/station/hallway/secondary/exit/departure_lounge) +"tNE" = ( +/turf/open/floor/plating, +/area/station/maintenance/aft/upper) +"tNK" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/dark/hidden, +/obj/machinery/atmospherics/components/binary/dp_vent_pump/high_volume/incinerator_atmos, +/obj/machinery/airlock_sensor/incinerator_atmos{ + pixel_y = 24 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/light/small/directional/south, +/turf/open/floor/engine, +/area/station/maintenance/disposal/incinerator) +"tNN" = ( +/obj/effect/decal/cleanable/blood/old{ + icon_state = "floor6-old" + }, +/obj/effect/landmark/event_spawn, +/turf/open/floor/iron/dark, +/area/station/security/execution/education) +"tNP" = ( +/obj/machinery/door/airlock/medical{ + id_tag = "r1"; + name = "Room A" + }, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 4 + }, +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/access/any/medical/general, +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/iron/white, +/area/station/medical/patients_rooms/room_a) +"tNR" = ( +/obj/structure/chair/sofa/bench{ + dir = 8 + }, +/obj/effect/turf_decal/siding/purple{ + dir = 8 + }, +/turf/open/floor/iron/white/textured_large, +/area/station/science/research) +"tOa" = ( +/obj/machinery/door/airlock/grunge{ + name = "Morgue" + }, +/obj/effect/mapping_helpers/airlock/access/all/medical/morgue, +/obj/effect/turf_decal/trimline/neutral/filled/warning{ + dir = 1 + }, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron/dark/textured, +/area/station/medical/morgue) +"tOm" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"tOp" = ( +/obj/machinery/telecomms/processor/preset_three, +/turf/open/floor/circuit/green/telecomms/mainframe, +/area/station/tcommsat/server) +"tOs" = ( +/obj/machinery/telecomms/bus/preset_one, +/turf/open/floor/circuit/green/telecomms/mainframe, +/area/station/tcommsat/server) +"tOA" = ( +/obj/machinery/door/airlock/highsecurity{ + name = "Gravity Generator Room" + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/construction, +/obj/structure/cable, +/obj/effect/landmark/navigate_destination, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/engineering/gravity_generator) +"tOG" = ( +/obj/structure/marker_beacon/yellow, +/turf/open/misc/asteroid/airless, +/area/station/asteroid) +"tOH" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/port/lesser) +"tOL" = ( +/obj/machinery/button/door/directional/east{ + id = "rdoffice"; + name = "Privacy Control" + }, +/turf/open/floor/glass/reinforced/plasma, +/area/station/command/heads_quarters/rd) +"tOO" = ( +/obj/effect/landmark/start/geneticist, +/obj/structure/chair/office{ + dir = 1 + }, +/turf/open/floor/iron/white/textured, +/area/station/science/genetics) +"tOU" = ( +/obj/structure/railing{ + dir = 4 + }, +/obj/machinery/firealarm/directional/north, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/science/research) +"tOV" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/half{ + dir = 8 + }, +/area/station/service/hydroponics/garden) +"tPb" = ( +/obj/structure/window/reinforced/spawner/directional/south, +/obj/structure/window/reinforced/spawner/directional/west, +/obj/structure/window/reinforced/spawner/directional/east, +/turf/open/openspace, +/area/station/engineering/storage/tech) +"tPr" = ( +/obj/structure/sign/poster/random/directional/north, +/turf/open/openspace, +/area/station/science/research) +"tPE" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/catwalk_floor/flat_white, +/area/station/science/xenobiology) +"tPJ" = ( +/obj/machinery/light_switch/directional/west, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron/large, +/area/station/service/hydroponics/garden) +"tPW" = ( +/obj/effect/landmark/event_spawn, +/turf/open/floor/circuit/green, +/area/station/science/robotics/mechbay) +"tQh" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/obj/effect/turf_decal/stripes/corner, +/turf/open/floor/engine, +/area/station/command/corporate_dock) +"tQt" = ( +/obj/structure/table/wood/poker, +/turf/open/floor/wood, +/area/station/commons/lounge) +"tQy" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/obj/effect/landmark/generic_maintenance_landmark, +/obj/effect/mapping_helpers/burnt_floor, +/obj/effect/decal/cleanable/blood/old, +/turf/open/floor/plating, +/area/station/maintenance/central/greater) +"tQC" = ( +/obj/machinery/power/apc/auto_name/directional/east, +/obj/structure/cable, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/engineering/lobby) +"tQF" = ( +/obj/effect/spawner/random/structure/crate, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/plating, +/area/station/maintenance/central/lesser) +"tQI" = ( +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/iron/dark/small, +/area/station/science/cytology) +"tQM" = ( +/obj/effect/mapping_helpers/airlock/access/all/supply/general, +/obj/machinery/door/airlock/mining{ + name = "Boutique Backroom" + }, +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 1 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/station/cargo/boutique) +"tQS" = ( +/obj/structure/table/glass, +/obj/item/binoculars, +/turf/open/floor/glass/reinforced, +/area/station/command/meeting_room) +"tQV" = ( +/obj/structure/railing{ + dir = 8 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/turf/open/floor/glass, +/area/station/command/meeting_room) +"tRb" = ( +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/maintenance/department/engine) +"tRf" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/broken_flooring/pile{ + dir = 1 + }, +/turf/open/floor/plating, +/area/station/cargo/warehouse) +"tRg" = ( +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 8 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/cargo/drone_bay) +"tRl" = ( +/obj/structure/rack/skeletal, +/obj/item/storage/fancy/candle_box, +/turf/open/floor/engine/cult, +/area/station/service/library) +"tRp" = ( +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/machinery/disposal/bin, +/obj/structure/cable, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/turf/open/floor/iron/white, +/area/station/medical/surgery/theatre) +"tRP" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/science/xenobiology) +"tRX" = ( +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 8 + }, +/obj/machinery/light/directional/west, +/obj/structure/table, +/obj/item/paper_bin/bundlenatural, +/obj/item/pen, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron, +/area/station/security/brig/entrance) +"tSc" = ( +/obj/machinery/light/directional/north, +/turf/open/floor/iron, +/area/station/security/prison) +"tSj" = ( +/obj/structure/rack, +/obj/effect/spawner/random/armory/riot_helmet, +/obj/effect/spawner/random/armory/bulletproof_helmet, +/obj/effect/turf_decal/tile/red/half/contrasted, +/obj/machinery/camera/motion/directional/north{ + c_tag = "Security Armory" + }, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/security/armory) +"tSn" = ( +/obj/structure/chair/office/light{ + dir = 4 + }, +/obj/effect/turf_decal/siding/blue{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/command/heads_quarters/cmo) +"tSH" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/catwalk_floor/iron, +/area/station/hallway/secondary/exit/departure_lounge) +"tSX" = ( +/obj/item/stack/tile/iron/white/smooth_large, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/cable, +/turf/open/floor/iron/white, +/area/station/medical/chemistry/minisat) +"tTe" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/sand/plating, +/turf/open/floor/plating, +/area/station/maintenance/solars/port/fore) +"tTl" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/obj/machinery/duct, +/turf/open/floor/iron/white/smooth_large, +/area/station/medical/treatment_center) +"tTE" = ( +/obj/effect/landmark/start/hangover, +/turf/open/floor/iron/showroomfloor, +/area/station/engineering/main) +"tTJ" = ( +/obj/structure/railing{ + dir = 4 + }, +/turf/open/floor/iron/stairs/right, +/area/station/hallway/primary/central) +"tTK" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/science/ordnance) +"tTQ" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron/corner{ + dir = 1 + }, +/area/station/service/hydroponics/garden) +"tUb" = ( +/obj/structure/railing{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark/side{ + dir = 6 + }, +/area/station/command/meeting_room) +"tUc" = ( +/obj/item/radio/intercom/directional/south, +/turf/open/misc/asteroid, +/area/station/maintenance/disposal/incinerator) +"tUk" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/maintenance/department/bridge) +"tUn" = ( +/obj/effect/decal/cleanable/insectguts, +/turf/open/floor/plating, +/area/station/maintenance/central/greater) +"tUo" = ( +/turf/closed/wall/r_wall, +/area/station/maintenance/radshelter/medical) +"tUp" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/tile/red/diagonal_edge, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/security/warden) +"tUr" = ( +/obj/machinery/light/small/dim/directional/west, +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/trimline/yellow/filled/corner{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/station/maintenance/department/medical) +"tUD" = ( +/obj/structure/cable, +/turf/open/floor/iron/dark/side{ + dir = 4 + }, +/area/station/command/meeting_room) +"tUF" = ( +/obj/structure/table/wood, +/obj/item/flashlight/lamp, +/obj/machinery/camera/autoname/directional/north, +/obj/machinery/keycard_auth/directional/north, +/turf/open/floor/carpet/green, +/area/station/command/heads_quarters/hop) +"tUG" = ( +/obj/structure/chair/stool/bar/directional/west, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/effect/turf_decal/tile/bar/opposingcorners, +/turf/open/floor/iron, +/area/station/commons/lounge) +"tUR" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/blue/filled/corner{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/medical/treatment_center) +"tUV" = ( +/obj/structure/cable, +/turf/closed/wall/r_wall, +/area/station/engineering/main) +"tVF" = ( +/obj/effect/spawner/structure/window/hollow/reinforced/middle, +/obj/structure/cable, +/obj/machinery/door/poddoor/shutters/window/preopen{ + id = "chimpcon1" + }, +/turf/open/floor/plating, +/area/station/science/genetics) +"tVH" = ( +/obj/machinery/door/airlock/security/glass, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 8 + }, +/obj/effect/mapping_helpers/airlock/access/all/security/brig, +/obj/effect/turf_decal/stripes/full, +/turf/open/floor/iron/dark, +/area/station/security/processing) +"tVI" = ( +/obj/effect/turf_decal/trimline/blue/filled/line, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/sorting/mail/flip{ + dir = 1 + }, +/obj/effect/mapping_helpers/mail_sorting/medbay/general, +/turf/open/floor/iron/white, +/area/station/medical/storage) +"tVJ" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/aisat/foyer) +"tVQ" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/disposal) +"tVS" = ( +/obj/item/kirbyplants/random, +/obj/effect/turf_decal/tile/brown/anticorner/contrasted{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/cargo/storage) +"tVT" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/green/visible, +/obj/machinery/meter, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"tVV" = ( +/obj/structure/reagent_dispensers/watertank, +/obj/item/extinguisher, +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/obj/machinery/camera/autoname/directional/south{ + network = list("ss13","rd","xeno") + }, +/turf/open/floor/iron/dark/textured_large, +/area/station/science/xenobiology) +"tWi" = ( +/obj/structure/cable, +/obj/effect/turf_decal/plaque{ + icon_state = "L7" + }, +/obj/machinery/navbeacon{ + codes_txt = "patrol;next_patrol=C1-Command"; + location = "P9-Central-Primary" + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"tWs" = ( +/obj/effect/spawner/random/structure/grille, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/maintenance/central/lesser) +"tWV" = ( +/obj/structure/table/reinforced/rglass, +/obj/item/storage/box/deputy, +/obj/item/storage/fancy/cigarettes{ + pixel_x = 8; + pixel_y = 8 + }, +/obj/effect/turf_decal/tile/red/anticorner/contrasted{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/security/office) +"tXc" = ( +/obj/structure/railing{ + dir = 6 + }, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"tXf" = ( +/obj/machinery/atmospherics/components/trinary/filter/flipped/layer2{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/camera/autoname/directional/south, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) +"tXg" = ( +/obj/structure/sign/warning, +/turf/closed/wall/rock/porous, +/area/station/asteroid) +"tXi" = ( +/obj/machinery/duct, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/light_switch/directional/west, +/turf/open/floor/iron/freezer, +/area/station/commons/toilet/restrooms) +"tXn" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 1; + id = "kitchen_counter"; + name = "Kitchen Counter Shutters" + }, +/obj/machinery/door/firedoor, +/obj/structure/desk_bell{ + pixel_x = 7 + }, +/obj/item/food/pie/cream{ + pixel_x = -12 + }, +/turf/open/floor/iron/kitchen, +/area/station/service/kitchen) +"tXp" = ( +/obj/effect/turf_decal/sand/plating, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/maintenance/central/greater) +"tXr" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/circuit/green, +/area/station/ai_monitored/command/nuke_storage) +"tXM" = ( +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"tXS" = ( +/obj/machinery/mechpad, +/obj/machinery/light_switch/directional/south, +/turf/open/floor/iron, +/area/station/science/robotics/mechbay) +"tYg" = ( +/obj/machinery/firealarm/directional/north, +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/obj/effect/turf_decal/tile/green{ + dir = 4 + }, +/obj/machinery/duct, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/service/hydroponics) +"tYs" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 1 + }, +/turf/open/floor/iron/white, +/area/station/medical/treatment_center) +"tYw" = ( +/obj/structure/easel, +/obj/item/canvas/twentythree_twentythree, +/turf/open/floor/carpet/purple, +/area/station/service/library) +"tYy" = ( +/obj/machinery/recharge_station, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 10 + }, +/obj/machinery/airalarm/directional/west, +/turf/open/floor/iron, +/area/station/engineering/break_room) +"tYD" = ( +/obj/structure/table, +/obj/structure/window/spawner/directional/east, +/obj/item/emergency_bed{ + pixel_y = 3 + }, +/obj/item/emergency_bed{ + pixel_y = 6 + }, +/obj/item/emergency_bed{ + pixel_y = 11 + }, +/turf/open/floor/iron/white/textured, +/area/station/medical/paramedic) +"tYI" = ( +/obj/effect/landmark/start/head_of_security, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/structure/chair/office/tactical, +/turf/open/floor/wood, +/area/station/command/heads_quarters/hos) +"tYQ" = ( +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/command/bridge) +"tZp" = ( +/obj/effect/turf_decal/tile/yellow{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 8 + }, +/obj/effect/turf_decal/bot{ + dir = 1 + }, +/turf/open/floor/iron/dark/corner, +/area/station/engineering/atmos/upper) +"tZt" = ( +/obj/machinery/airalarm/directional/north, +/turf/open/floor/iron/white, +/area/station/science/research) +"tZv" = ( +/obj/item/radio/intercom/command/directional/east, +/turf/open/floor/glass, +/area/station/command/meeting_room) +"tZA" = ( +/turf/open/floor/iron/dark/side{ + dir = 4 + }, +/area/station/command/corporate_showroom) +"tZF" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/white, +/area/station/science/research) +"tZL" = ( +/obj/machinery/suit_storage_unit/radsuit, +/obj/machinery/light/small/directional/south, +/turf/open/floor/iron/dark, +/area/station/maintenance/radshelter/civil) +"tZO" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 9 + }, +/turf/open/floor/iron/white, +/area/station/medical/surgery/theatre) +"tZR" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/catwalk_floor/flat_white, +/area/station/science/xenobiology) +"tZW" = ( +/obj/machinery/camera/autoname/directional/south, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/turf/open/floor/wood, +/area/station/service/theater) +"uab" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden, +/turf/open/floor/catwalk_floor, +/area/station/maintenance/disposal/incinerator) +"uac" = ( +/obj/structure/rack, +/obj/effect/decal/cleanable/dirt/dust, +/obj/item/clothing/head/soft/mime, +/obj/item/clothing/mask/surgical, +/obj/machinery/light/small/directional/west, +/turf/open/floor/iron/showroomfloor, +/area/station/maintenance/department/engine) +"uat" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/plating, +/area/station/maintenance/department/science) +"uaw" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/closed/wall/r_wall, +/area/station/science/ordnance/burnchamber) +"uay" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/stripes/white/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/security/prison) +"uaC" = ( +/obj/structure/closet/secure_closet/personal/cabinet, +/turf/open/floor/carpet, +/area/station/medical/psychology) +"uaH" = ( +/obj/machinery/iv_drip, +/obj/machinery/button/door/directional/west{ + id = "r2"; + name = "Bolt Control"; + normaldoorcontrol = 1; + specialfunctions = 4; + pixel_y = 6 + }, +/obj/machinery/button/door/directional/west{ + pixel_y = -6; + name = "Privacy Control"; + id = "r2p" + }, +/obj/machinery/firealarm/directional/north, +/turf/open/floor/iron/white, +/area/station/medical/patients_rooms/room_b) +"uaK" = ( +/obj/machinery/libraryscanner, +/obj/machinery/airalarm/directional/north, +/turf/open/floor/wood/parquet, +/area/station/service/library) +"uaM" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/structure/showcase/machinery/oldpod{ + desc = "An old NT branded sleeper, decommissioned after the lead acetate incident. None of the functional machinery remains inside."; + name = "decommissioned sleeper" + }, +/obj/effect/decal/cleanable/blood/old, +/turf/open/floor/iron/freezer, +/area/station/maintenance/department/medical/central) +"uaN" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/cargo/storage) +"uaT" = ( +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/obj/effect/turf_decal/tile/red, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/security/armory) +"uaY" = ( +/obj/item/kirbyplants/random/dead, +/obj/structure/window/reinforced/spawner/directional/north, +/turf/open/misc/grass, +/area/station/command/heads_quarters/rd) +"uba" = ( +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/department/science) +"ubd" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/security/brig/entrance) +"ubk" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/item/radio/intercom/directional/west, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"ubm" = ( +/turf/closed/wall/r_wall, +/area/station/security/prison/work) +"ubn" = ( +/obj/structure/lattice/catwalk, +/obj/structure/railing{ + dir = 8 + }, +/turf/open/openspace, +/area/station/science/xenobiology) +"ubo" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/landmark/event_spawn, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) +"ubs" = ( +/obj/structure/closet/lasertag/red, +/obj/structure/window/spawner/directional/east, +/obj/effect/turf_decal/tile/red/fourcorners, +/obj/effect/landmark/start/hangover/closet, +/turf/open/floor/iron, +/area/station/commons/fitness/recreation) +"ubV" = ( +/obj/structure/chair{ + dir = 1 + }, +/obj/item/restraints/handcuffs, +/obj/effect/decal/cleanable/blood, +/obj/effect/turf_decal/tile/red/anticorner/contrasted{ + dir = 8 + }, +/obj/machinery/camera/autoname/directional/west, +/turf/open/floor/iron/textured, +/area/station/security/processing) +"uca" = ( +/obj/machinery/modular_computer/preset/engineering, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/command/heads_quarters/ce) +"ucb" = ( +/obj/effect/spawner/random/structure/closet_empty/crate/with_loot, +/turf/open/floor/plating, +/area/station/maintenance/central/greater) +"ucg" = ( +/obj/effect/turf_decal/siding/purple{ + dir = 1 + }, +/turf/open/floor/iron/white/herringbone, +/area/station/science/breakroom) +"ucm" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/department/bridge) +"ucG" = ( +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/science/xenobiology) +"ucY" = ( +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/camera/autoname/directional/north, +/turf/open/floor/iron, +/area/station/cargo/storage) +"udf" = ( +/obj/structure/cable, +/obj/effect/decal/cleanable/oil, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/aisat/uppernorth) +"udi" = ( +/obj/effect/spawner/random/entertainment/arcade{ + dir = 1 + }, +/turf/open/floor/carpet/red, +/area/station/command/heads_quarters/qm) +"udt" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/service/theater) +"udG" = ( +/obj/structure/flora/bush/sparsegrass/style_random, +/turf/open/floor/grass, +/area/station/medical/virology) +"udH" = ( +/obj/structure/chair/office/light{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark/textured_half{ + dir = 1 + }, +/area/station/science/xenobiology) +"udO" = ( +/obj/structure/window/reinforced/spawner/directional/south, +/obj/effect/turf_decal/stripes/line, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/tile/yellow/half/contrasted, +/turf/open/floor/iron, +/area/station/construction/mining/aux_base) +"udQ" = ( +/obj/machinery/vending/assist, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light_switch/directional/east, +/turf/open/floor/iron, +/area/station/commons/storage/primary) +"udW" = ( +/obj/machinery/holopad, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/iron/white, +/area/station/medical/patients_rooms/room_b) +"ued" = ( +/obj/effect/turf_decal/tile/yellow/fourcorners, +/obj/machinery/airalarm/directional/west, +/obj/structure/table, +/obj/item/paper_bin, +/obj/effect/spawner/random/bureaucracy/pen, +/turf/open/floor/iron, +/area/station/engineering/main) +"uei" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/components/binary/valve/digital/on{ + dir = 4; + name = "Cooling Loop Bypass" + }, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"uep" = ( +/obj/item/cardboard_cutout/nuclear_operative, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating/airless, +/area/space/nearstation) +"uet" = ( +/obj/structure/flora/rock/pile/style_random, +/turf/open/misc/asteroid, +/area/station/asteroid) +"uex" = ( +/mob/living/basic/axolotl{ + habitable_atmos = list("min_oxy" = 0, "max_oxy" = 0, "min_plas" = 0, "max_plas" = 1, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0); + name = "harbringer of doom" + }, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"ueA" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/visible, +/obj/effect/turf_decal/delivery, +/turf/open/floor/iron/dark, +/area/station/engineering/supermatter/room) +"ueC" = ( +/obj/item/stack/rods/ten, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/plating, +/area/station/maintenance/port/greater) +"ueI" = ( +/obj/machinery/computer/operating, +/obj/machinery/firealarm/directional/north, +/obj/effect/turf_decal/tile/blue/full, +/turf/open/floor/iron/white, +/area/station/medical/surgery) +"ueJ" = ( +/obj/structure/lattice/catwalk, +/obj/structure/railing/corner{ + dir = 8 + }, +/turf/open/openspace, +/area/station/science/xenobiology) +"ueK" = ( +/obj/effect/landmark/event_spawn, +/obj/effect/turf_decal/tile/yellow{ + dir = 4 + }, +/turf/open/floor/iron/dark/corner{ + dir = 1 + }, +/area/station/engineering/atmos/storage/gas) +"ueX" = ( +/obj/machinery/exodrone_launcher, +/turf/open/floor/iron/dark, +/area/station/cargo/drone_bay) +"ufr" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/commons/fitness/recreation) +"ufv" = ( +/obj/structure/chair/sofa/bench/right{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 4 + }, +/obj/machinery/status_display/evac/directional/west, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/exit/departure_lounge) +"ufA" = ( +/obj/item/pickaxe, +/turf/open/misc/asteroid/airless, +/area/station/asteroid) +"ufD" = ( +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/machinery/firealarm/directional/north, +/turf/open/floor/iron/dark/textured_edge{ + dir = 4 + }, +/area/station/science/xenobiology) +"ufV" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/command/gateway) +"ufW" = ( +/obj/effect/turf_decal/tile/red/anticorner/contrasted{ + dir = 1 + }, +/obj/structure/table, +/obj/item/restraints/handcuffs/cable/yellow, +/obj/item/restraints/handcuffs, +/obj/machinery/computer/security/telescreen/normal/directional/west, +/turf/open/floor/iron, +/area/station/hallway/secondary/exit/departure_lounge) +"ugh" = ( +/obj/machinery/door/airlock/research{ + name = "Research and Development Lab" + }, +/obj/effect/mapping_helpers/airlock/access/all/science/general, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/white/smooth_edge, +/area/station/science/lab) +"ugo" = ( +/obj/effect/turf_decal/tile/yellow{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/iron/dark/corner{ + dir = 1 + }, +/area/station/engineering/atmos/upper) +"ugs" = ( +/obj/item/kirbyplants/random, +/turf/open/floor/iron, +/area/station/commons/storage/primary) +"ugu" = ( +/obj/effect/spawner/random/trash/mess, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/turf/open/floor/plating, +/area/station/maintenance/disposal) +"ugI" = ( +/obj/machinery/light/small/directional/south, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/iron/showroomfloor, +/area/station/command/heads_quarters/qm) +"ugJ" = ( +/obj/effect/spawner/random/maintenance, +/obj/structure/closet, +/turf/open/floor/iron/dark, +/area/station/maintenance/department/engine) +"ugN" = ( +/obj/machinery/door/airlock/highsecurity{ + name = "Secure Tech Storage" + }, +/obj/effect/mapping_helpers/airlock/access/all/command/general, +/obj/effect/mapping_helpers/airlock/access/all/engineering/tech_storage, +/turf/open/floor/iron/dark/textured_half, +/area/station/engineering/storage/tech) +"ugP" = ( +/obj/structure/chair/sofa/bench/right{ + dir = 8 + }, +/obj/effect/turf_decal/siding/purple{ + dir = 8 + }, +/turf/open/floor/iron/white/textured_large, +/area/station/science/research) +"ugV" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/engineering/main) +"uhc" = ( +/turf/open/floor/grass, +/area/station/science/genetics) +"uhe" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/iron/white, +/area/station/medical/treatment_center) +"uhi" = ( +/turf/closed/wall/r_wall, +/area/station/maintenance/radshelter/civil) +"uhs" = ( +/obj/effect/decal/cleanable/blood/old, +/turf/open/floor/iron/grimy, +/area/station/maintenance/central/greater) +"uhz" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/obj/machinery/light/directional/south, +/obj/structure/closet/emcloset, +/obj/machinery/airalarm/directional/east, +/turf/open/floor/iron/dark/textured_large, +/area/station/science/xenobiology) +"uhC" = ( +/obj/structure/cable, +/obj/structure/window/reinforced/spawner/directional/west, +/obj/structure/window/reinforced/spawner/directional/north, +/turf/open/floor/glass/reinforced, +/area/station/security/prison) +"uhD" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/chapel, +/area/station/service/chapel) +"uhE" = ( +/obj/machinery/atmospherics/components/unary/thermomachine/heater/on, +/turf/open/floor/iron, +/area/station/engineering/atmos/pumproom) +"uhK" = ( +/obj/machinery/door/airlock/multi_tile/public/glass{ + name = "Funeral Room" + }, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/service/chapel/funeral) +"uhW" = ( +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 1 + }, +/obj/effect/turf_decal/tile/yellow{ + dir = 8 + }, +/obj/effect/turf_decal/bot{ + dir = 1 + }, +/turf/open/floor/iron/checker{ + dir = 4 + }, +/area/station/engineering/atmos/upper) +"uif" = ( +/obj/structure/flora/rock/style_random, +/turf/open/misc/asteroid/airless, +/area/station/asteroid) +"uig" = ( +/obj/machinery/recharge_station, +/turf/open/floor/iron, +/area/station/science/robotics/mechbay) +"uik" = ( +/obj/structure/table/wood, +/obj/item/food/grown/poppy, +/obj/item/food/grown/poppy{ + pixel_x = 8; + pixel_y = 8 + }, +/obj/item/book/bible{ + pixel_y = 3; + pixel_x = 16 + }, +/turf/open/floor/iron/chapel{ + dir = 4 + }, +/area/station/service/chapel) +"uir" = ( +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/exit/departure_lounge) +"uit" = ( +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"uiu" = ( +/obj/machinery/airalarm/directional/north, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/landmark/event_spawn, +/turf/open/floor/iron/dark, +/area/station/security/mechbay) +"uiy" = ( +/obj/effect/spawner/random/engineering/vending_restock, +/obj/effect/spawner/random/structure/closet_maintenance, +/obj/machinery/light/small/directional/north, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/disposal) +"uiH" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/teleport/hub, +/obj/structure/extinguisher_cabinet/directional/east, +/turf/open/floor/iron/dark, +/area/station/command/teleporter) +"uiL" = ( +/obj/machinery/holopad, +/obj/effect/turf_decal/bot, +/turf/open/floor/iron, +/area/station/cargo/storage) +"uiO" = ( +/obj/item/flashlight/lamp/bananalamp, +/turf/open/misc/asteroid, +/area/station/asteroid) +"uiP" = ( +/obj/structure/railing/corner/end{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/aisat/foyer) +"uiU" = ( +/obj/effect/spawner/random/structure/table, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron, +/area/station/maintenance/department/medical/central) +"ujo" = ( +/obj/structure/chair/sofa/bench/left{ + dir = 8 + }, +/obj/item/radio/intercom/directional/south, +/turf/open/floor/iron, +/area/station/hallway/primary/fore) +"ujt" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/closet/crate/bin, +/turf/open/floor/iron, +/area/station/commons/vacant_room/commissary) +"ujv" = ( +/obj/structure/stairs/north, +/obj/structure/railing{ + dir = 8 + }, +/obj/structure/sign/directions/arrival/directional/west{ + dir = 10 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"ujx" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/chair/plastic{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 5 + }, +/turf/open/floor/iron/white, +/area/station/medical/chemistry/minisat) +"ujE" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/item/kirbyplants/random, +/obj/machinery/light/small/directional/east, +/turf/open/floor/wood, +/area/station/command/heads_quarters/qm) +"ujT" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 4; + id = "pharmacy_shutters"; + name = "Pharmacy Shutters" + }, +/turf/open/floor/plating, +/area/station/medical/pharmacy) +"ujW" = ( +/obj/machinery/air_sensor/ordnance_burn_chamber, +/turf/open/floor/engine/vacuum, +/area/station/science/ordnance/burnchamber) +"ukl" = ( +/obj/machinery/door/airlock/external{ + name = "Solar Maintenance" + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper, +/obj/structure/cable, +/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 1 + }, +/turf/open/floor/plating, +/area/station/maintenance/solars/port) +"ukv" = ( +/obj/machinery/lift_indicator/directional/west{ + linked_elevator_id = "medbay1" + }, +/obj/machinery/button/elevator/directional/west{ + id = "medbay1" + }, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 10 + }, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) +"ukw" = ( +/obj/effect/turf_decal/siding/purple{ + dir = 6 + }, +/obj/effect/spawner/random/vending/snackvend, +/obj/machinery/camera/autoname/directional/east{ + network = list("ss13","rd") + }, +/turf/open/floor/iron/white/smooth_large, +/area/station/science/research) +"ukx" = ( +/obj/item/stack/rods/two, +/turf/open/floor/engine, +/area/station/science/auxlab/firing_range) +"ukK" = ( +/obj/effect/turf_decal/tile/dark_red/opposingcorners, +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/service/bar/backroom) +"ukO" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/siding/purple{ + dir = 6 + }, +/obj/structure/cable, +/obj/item/kirbyplants/random/dead, +/obj/machinery/power/apc/auto_name/directional/south, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/white, +/area/station/ai_monitored/turret_protected/ai_upload_foyer) +"ukY" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/engine, +/area/station/command/corporate_dock) +"ulc" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/maintenance/department/engine) +"uld" = ( +/obj/structure/chair/wood, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/turf/open/floor/carpet, +/area/station/service/chapel/funeral) +"ull" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/window/right/directional/south{ + name = "Reception Window" + }, +/obj/machinery/door/window/brigdoor/left/directional/north{ + name = "Security Desk"; + req_access = list("security") + }, +/obj/machinery/door/firedoor, +/obj/structure/desk_bell, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "brigdesk"; + name = "Warden Desk Shutters" + }, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/security/brig/entrance) +"ulA" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/iron/dark, +/area/station/science/xenobiology) +"ulL" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/machinery/door/firedoor/border_only, +/obj/effect/turf_decal/tile/bar/opposingcorners, +/turf/open/floor/iron, +/area/station/service/bar) +"ulV" = ( +/obj/machinery/door/airlock/grunge{ + name = "Chapel" + }, +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/carpet, +/area/station/service/chapel) +"ulY" = ( +/obj/effect/turf_decal/tile/neutral, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"umg" = ( +/obj/effect/turf_decal/sand/plating, +/turf/open/floor/plating/airless, +/area/space/nearstation) +"umh" = ( +/obj/effect/turf_decal/bot_white, +/turf/open/floor/iron, +/area/station/cargo/storage) +"umo" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/trunk/multiz{ + dir = 1 + }, +/turf/open/floor/wood, +/area/station/commons/lounge) +"umt" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) +"umK" = ( +/obj/effect/spawner/random/structure/crate_abandoned, +/turf/open/floor/plating, +/area/station/maintenance/port/lesser) +"umO" = ( +/obj/structure/chair/pew/left{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/chapel{ + dir = 4 + }, +/area/station/service/chapel) +"umT" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark/corner, +/area/station/engineering/atmos) +"una" = ( +/obj/structure/chair/comfy/shuttle/tactical{ + name = "tactical head of security chair" + }, +/obj/effect/landmark/start/head_of_security, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/security/office) +"unk" = ( +/turf/closed/wall/rock/porous, +/area/station/asteroid) +"unA" = ( +/obj/machinery/air_sensor/nitrogen_tank, +/turf/open/floor/engine/n2, +/area/station/engineering/atmos) +"unC" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/obj/machinery/airalarm/directional/west, +/turf/open/floor/plating, +/area/station/maintenance/solars/port) +"unE" = ( +/obj/structure/cable, +/obj/effect/turf_decal/tile/green/fourcorners, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/turf/open/floor/iron/white, +/area/station/medical/virology) +"unF" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/chair/office, +/turf/open/floor/iron, +/area/station/cargo/storage) +"unH" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light/directional/west, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/simple/dark/visible/layer5{ + dir = 5 + }, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) +"unL" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/sign/poster/random/directional/south, +/turf/open/floor/wood/parquet, +/area/station/cargo/boutique) +"unR" = ( +/obj/effect/turf_decal/tile/blue/half/contrasted{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/station/medical/medbay/lobby) +"unZ" = ( +/turf/closed/mineral/asteroid, +/area/space/nearstation) +"uoi" = ( +/obj/machinery/space_heater, +/turf/open/floor/plating, +/area/station/maintenance/department/medical) +"uoo" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/components/binary/valve, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"uoY" = ( +/obj/structure/cable, +/obj/effect/turf_decal/trimline/purple/filled/arrow_ccw, +/obj/effect/turf_decal/trimline/purple/filled/arrow_ccw{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/white/smooth_large, +/area/station/science/xenobiology/hallway) +"upd" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/department/science) +"upj" = ( +/obj/effect/landmark/navigate_destination/hydro, +/obj/machinery/door/airlock/hydroponics/glass{ + name = "Hydroponics" + }, +/obj/effect/mapping_helpers/airlock/access/all/service/hydroponics, +/obj/machinery/door/firedoor, +/obj/structure/disposalpipe/segment{ + dir = 2 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/service/hydroponics) +"ups" = ( +/obj/docking_port/stationary/escape_pod, +/turf/open/space/basic, +/area/space) +"upw" = ( +/obj/machinery/door/airlock/maintenance_hatch, +/obj/structure/cable/layer3, +/obj/effect/mapping_helpers/airlock/access/all/command/ai_upload, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/ai_monitored/turret_protected/ai) +"upy" = ( +/obj/effect/turf_decal/tile/yellow/diagonal_centre, +/obj/machinery/holopad, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/commons/storage/tools) +"upE" = ( +/obj/machinery/door/airlock{ + name = "Custodial Closet" + }, +/obj/effect/mapping_helpers/airlock/access/all/service/janitor, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/landmark/navigate_destination/janitor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/service/janitor) +"upF" = ( +/obj/structure/railing/corner{ + dir = 8 + }, +/obj/machinery/camera/autoname/directional/north, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/ai_monitored/turret_protected/aisat/foyer) +"upS" = ( +/obj/machinery/holopad, +/turf/open/floor/iron, +/area/station/commons/storage/primary) +"upW" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/commons/locker) +"uqh" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) +"uqr" = ( +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/mapping_helpers/airlock/abandoned, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/plating, +/area/station/maintenance/port/greater) +"uqy" = ( +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/commons/vacant_room/commissary) +"uqI" = ( +/obj/structure/railing{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/item/crowbar, +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/spawner/random/trash/food_packaging, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"uqM" = ( +/obj/structure/table/reinforced, +/obj/item/stamp/head/ce, +/obj/item/folder/yellow, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 10 + }, +/obj/structure/cable, +/obj/machinery/keycard_auth/directional/west{ + pixel_y = -10 + }, +/obj/item/pen/screwdriver, +/obj/item/stamp/head/ce, +/turf/open/floor/iron, +/area/station/command/heads_quarters/ce) +"ura" = ( +/obj/structure/closet/crate/science{ + opened = 1; + icon_state = "scicrateopen" + }, +/obj/effect/decal/cleanable/greenglow/radioactive, +/turf/open/misc/asteroid, +/area/station/asteroid) +"urc" = ( +/obj/effect/landmark/start/station_engineer, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/station/engineering/main) +"urh" = ( +/obj/effect/landmark/event_spawn, +/turf/open/floor/iron/white, +/area/station/science/lab) +"url" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/dark_blue/half/contrasted{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/hallway/secondary/command) +"uro" = ( +/obj/machinery/light/small/directional/south, +/turf/open/misc/asteroid, +/area/station/maintenance/department/science) +"urx" = ( +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/obj/effect/turf_decal/tile/green{ + dir = 4 + }, +/obj/machinery/light/directional/north, +/turf/open/floor/iron, +/area/station/service/hydroponics) +"urz" = ( +/obj/effect/landmark/start/cargo_technician, +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/cargo/storage) +"urC" = ( +/obj/effect/spawner/structure/window/hollow/reinforced/middle, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "chemsat"; + dir = 1 + }, +/turf/open/floor/plating, +/area/station/medical/chemistry/minisat) +"urP" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/machinery/firealarm/directional/south, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"urT" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) +"urY" = ( +/obj/machinery/atmospherics/components/binary/valve/digital{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/science/ordnance) +"urZ" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/chair/stool/directional/south, +/obj/effect/spawner/random/engineering/tracking_beacon, +/obj/effect/landmark/event_spawn, +/turf/open/floor/iron, +/area/station/commons/storage/primary) +"usa" = ( +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/science/robotics/lab) +"usm" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/newscaster/directional/south, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) +"usq" = ( +/obj/effect/turf_decal/tile/red, +/obj/structure/disposalpipe/junction{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/fore) +"usr" = ( +/obj/structure/railing, +/obj/machinery/door/firedoor/border_only, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wood, +/obj/structure/chair/wood{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/wood/tile, +/area/station/service/bar) +"usF" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/spawner/random/entertainment/arcade, +/turf/open/floor/iron, +/area/station/commons/fitness/recreation) +"usH" = ( +/mob/living/basic/chicken{ + name = "Featherbottom"; + real_name = "Featherbottom" + }, +/turf/open/floor/grass, +/area/station/service/hydroponics/garden) +"usL" = ( +/obj/machinery/lift_indicator{ + pixel_y = -3; + pixel_x = -6; + linked_elevator_id = "aisat" + }, +/turf/closed/wall/r_wall, +/area/station/ai_monitored/turret_protected/aisat_interior) +"usQ" = ( +/obj/effect/turf_decal/tile/yellow, +/obj/item/kirbyplants/random, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) +"usT" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/closet/crate/trashcart/filled, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"utc" = ( +/obj/machinery/atmospherics/components/unary/thermomachine/freezer{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/engineering/atmos/pumproom) +"utf" = ( +/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ + dir = 8 + }, +/turf/closed/wall/r_wall, +/area/station/engineering/atmos) +"uto" = ( +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, +/obj/structure/cable, +/obj/effect/mapping_helpers/airlock/abandoned, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 4 + }, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/maintenance/department/engine) +"utw" = ( +/obj/machinery/door/airlock/grunge{ + name = "Cell 1" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/security/prison/safe) +"utH" = ( +/obj/machinery/duct, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/freezer, +/area/station/commons/toilet/restrooms) +"utM" = ( +/turf/closed/wall/r_wall, +/area/station/ai_monitored/command/storage/eva) +"utP" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/cargo/lobby) +"utT" = ( +/obj/machinery/atmospherics/components/binary/pump{ + name = "Mix to Port" + }, +/turf/open/floor/iron, +/area/station/engineering/atmos) +"utU" = ( +/turf/open/floor/catwalk_floor/airless, +/area/space/nearstation) +"utV" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"utY" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/machinery/door/airlock{ + id_tag = "Toilet_Research"; + name = "Theater Access" + }, +/obj/effect/mapping_helpers/airlock/access/all/service/theatre, +/obj/machinery/door/firedoor, +/turf/open/floor/wood/parquet, +/area/station/service/theater) +"uuq" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/item/radio/intercom/directional/east, +/turf/open/floor/iron, +/area/station/engineering/atmos/upper) +"uuu" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/trunk/multiz{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/cargo/storage) +"uuM" = ( +/obj/effect/turf_decal/bot/left, +/turf/open/floor/engine, +/area/station/engineering/atmospherics_engine) +"uuN" = ( +/obj/structure/lattice/catwalk, +/turf/open/space/basic, +/area/space/nearstation) +"uuW" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 1 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) +"uvd" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/turf/open/floor/engine, +/area/station/command/corporate_dock) +"uvl" = ( +/obj/machinery/door/airlock/virology/glass{ + name = "Biohazard Gear" + }, +/obj/effect/mapping_helpers/airlock/access/any/medical/surgery, +/obj/effect/turf_decal/tile/green/half/contrasted{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/tile/blue/half/contrasted{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/maintenance/department/medical/central) +"uvn" = ( +/obj/structure/table, +/obj/item/flashlight/lamp, +/turf/open/floor/iron/dark, +/area/station/medical/morgue) +"uvx" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/white, +/area/station/science/ordnance/testlab) +"uvH" = ( +/obj/effect/turf_decal/tile/yellow{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/visible{ + dir = 8 + }, +/obj/machinery/meter, +/obj/item/radio/intercom/directional/west, +/turf/open/floor/iron/dark/corner{ + dir = 1 + }, +/area/station/engineering/atmos/upper) +"uvN" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/supermatter/room) +"uww" = ( +/obj/structure/table/reinforced, +/obj/structure/desk_bell{ + pixel_x = 7 + }, +/obj/effect/turf_decal/tile/dark_red/opposingcorners, +/obj/effect/spawner/random/entertainment/lighter, +/obj/machinery/door/firedoor, +/turf/open/floor/iron/dark, +/area/station/service/bar) +"uwI" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 + }, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/engineering/storage) +"uwN" = ( +/obj/structure/table, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/item/storage/toolbox/mechanical{ + pixel_x = -2; + pixel_y = 8 + }, +/obj/item/storage/toolbox/mechanical{ + pixel_x = 3; + pixel_y = -2 + }, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/science/ordnance) +"uwV" = ( +/obj/machinery/door/poddoor/shutters/window/preopen{ + id = "ordstorage" + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/button/door/directional/east{ + req_access = list("ordnance"); + name = "Ordnance Storage Shutter Control"; + id = "ordstorage" + }, +/obj/effect/turf_decal/caution/stand_clear/red, +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/science/ordnance/storage) +"uwW" = ( +/obj/structure/cable/layer1, +/turf/open/floor/iron, +/area/station/engineering/main) +"uxt" = ( +/turf/open/openspace, +/area/station/hallway/secondary/exit/departure_lounge) +"uxw" = ( +/obj/item/surgery_tray/full/deployed, +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/machinery/airalarm/directional/west, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/white/textured, +/area/station/medical/surgery/theatre) +"uxy" = ( +/obj/structure/window/reinforced/spawner/directional/east, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/blood/old, +/obj/structure/chair{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/maintenance/department/cargo) +"uxH" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/machinery/status_display/evac/directional/north, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"uxJ" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/stripes/white/line{ + dir = 1 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/security/prison) +"uxO" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/engine, +/area/station/command/corporate_dock) +"uxS" = ( +/obj/machinery/computer/atmos_control/oxygen_tank{ + dir = 8 + }, +/obj/effect/turf_decal/tile/yellow{ + dir = 4 + }, +/turf/open/floor/iron/dark/corner, +/area/station/engineering/atmos) +"uyc" = ( +/obj/machinery/light/cold/directional/west, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/aisat/foyer) +"uyj" = ( +/obj/structure/cable, +/obj/machinery/door/airlock/atmos/glass{ + name = "Atmospherics" + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, +/obj/machinery/door/poddoor/preopen{ + id = "atmos"; + name = "Atmospherics Blast Door" + }, +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/tile/yellow/opposingcorners, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/turf/open/floor/iron/checker{ + dir = 1 + }, +/area/station/engineering/atmos/upper) +"uym" = ( +/obj/machinery/light/small/dim/directional/south, +/obj/structure/chair/office{ + name = "grimy chair"; + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/department/medical) +"uyu" = ( +/obj/structure/railing/corner{ + dir = 8 + }, +/obj/effect/turf_decal/tile/brown{ + dir = 8 + }, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/station/cargo/storage) +"uyA" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light/small/broken/directional/east, +/turf/open/floor/iron, +/area/station/commons/vacant_room/commissary) +"uyB" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/training_machine, +/obj/item/target, +/turf/open/floor/iron, +/area/station/commons/fitness/recreation) +"uyC" = ( +/obj/structure/ladder{ + icon_state = "ladder10" + }, +/obj/machinery/light/small/dim/directional/north, +/turf/open/floor/catwalk_floor, +/area/station/maintenance/department/medical/central) +"uyL" = ( +/turf/open/floor/iron, +/area/station/cargo/storage) +"uzh" = ( +/obj/effect/turf_decal/tile/red/half/contrasted, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/security/office) +"uzv" = ( +/obj/effect/turf_decal/siding/purple{ + dir = 1 + }, +/obj/machinery/airalarm/directional/north, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/iron/white/herringbone, +/area/station/science/breakroom) +"uzB" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark/side{ + dir = 8 + }, +/area/station/command/corporate_showroom) +"uzH" = ( +/turf/open/floor/iron, +/area/station/commons/locker) +"uzQ" = ( +/turf/open/floor/iron/white/textured_large, +/area/station/commons/fitness/recreation) +"uzV" = ( +/obj/effect/turf_decal/stripes, +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"uAe" = ( +/obj/effect/turf_decal/tile/brown/half/contrasted, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/turf/open/floor/iron, +/area/station/cargo/sorting) +"uAn" = ( +/obj/structure/rack, +/obj/item/electronics/airlock, +/obj/item/electronics/airlock, +/obj/item/electronics/airlock, +/obj/item/electronics/airlock, +/obj/item/stack/cable_coil, +/obj/item/stack/cable_coil, +/obj/item/wallframe/camera, +/obj/item/wallframe/camera, +/obj/item/wallframe/camera, +/obj/item/wallframe/camera, +/obj/item/assault_pod/mining, +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron, +/area/station/construction/mining/aux_base) +"uAt" = ( +/obj/structure/table, +/obj/structure/window/spawner/directional/east, +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/structure/window/spawner/directional/south, +/obj/item/storage/medkit/regular{ + pixel_x = 3; + pixel_y = 6 + }, +/obj/item/storage/medkit/toxin{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/storage/medkit/toxin, +/obj/item/storage/medkit/toxin{ + pixel_x = -3; + pixel_y = -3 + }, +/turf/open/floor/iron/white, +/area/station/medical/storage) +"uAH" = ( +/obj/structure/punching_bag, +/obj/structure/window/spawner/directional/west, +/turf/open/floor/iron/white/textured_large, +/area/station/commons/fitness/recreation) +"uAW" = ( +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/cargo/storage) +"uAX" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/maintenance/department/cargo) +"uBe" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/carpet/executive, +/area/station/command/corporate_showroom) +"uBf" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/iron, +/area/station/cargo/lobby) +"uBm" = ( +/obj/structure/chair/office{ + dir = 1 + }, +/turf/open/floor/iron/white/textured_large, +/area/station/science/xenobiology) +"uBn" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/textured, +/area/station/construction/mining/aux_base) +"uBw" = ( +/obj/effect/spawner/structure/window, +/turf/open/floor/plating, +/area/station/cargo/lobby) +"uBI" = ( +/obj/machinery/door/airlock/maintenance_hatch, +/obj/effect/mapping_helpers/airlock/access/all/supply/general, +/turf/open/floor/iron, +/area/station/cargo/storage) +"uBT" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/obj/effect/turf_decal/sand/plating, +/turf/open/floor/plating/airless, +/area/station/asteroid) +"uCj" = ( +/obj/effect/turf_decal/tile/blue/opposingcorners, +/obj/effect/turf_decal/tile/red/opposingcorners{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/service/theater) +"uCo" = ( +/obj/machinery/power/shieldwallgen, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/camera/autoname/directional/north, +/turf/open/floor/iron/dark/side{ + dir = 9 + }, +/area/station/command/emergency_closet) +"uCr" = ( +/obj/structure/table, +/obj/machinery/fax{ + fax_name = "Xenobiology Desk"; + name = "Xenobiology's Fax Machine" + }, +/turf/open/floor/glass/reinforced, +/area/station/science/xenobiology) +"uCw" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/spawner/random/structure/chair_maintenance{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/command/bridge) +"uCx" = ( +/obj/machinery/computer/crew{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/blue/filled/line, +/obj/machinery/camera/autoname/directional/south{ + network = list("ss13","medbay") + }, +/turf/open/floor/iron/white, +/area/station/medical/paramedic) +"uCy" = ( +/obj/structure/rack, +/obj/structure/window/spawner/directional/north, +/obj/machinery/door/window/left/directional/west{ + name = "Magboot Storage"; + req_access = list("eva") + }, +/obj/machinery/door/window/right/directional/east{ + req_access = list("eva"); + name = "Magboot Storage" + }, +/obj/item/clothing/shoes/magboots{ + pixel_x = -4; + pixel_y = 3 + }, +/obj/item/clothing/shoes/magboots, +/obj/item/clothing/shoes/magboots{ + pixel_x = 4; + pixel_y = -3 + }, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/command/storage/eva) +"uCS" = ( +/obj/machinery/telecomms/receiver/preset_right, +/turf/open/floor/circuit/green/telecomms/mainframe, +/area/station/tcommsat/server) +"uDd" = ( +/obj/structure/sign/painting/library{ + pixel_y = -32 + }, +/obj/effect/turf_decal/siding/wood, +/obj/effect/landmark/event_spawn, +/turf/open/floor/wood, +/area/station/service/library) +"uDk" = ( +/obj/structure/broken_flooring/side/directional/west, +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/decal/cleanable/dirt/dust, +/obj/item/broken_bottle, +/turf/open/floor/plating, +/area/station/hallway/primary/starboard) +"uDp" = ( +/obj/structure/railing{ + dir = 4 + }, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"uDA" = ( +/obj/structure/rack, +/obj/effect/spawner/random/bureaucracy/briefcase, +/obj/effect/spawner/random/bureaucracy/crayon, +/turf/open/floor/wood/parquet, +/area/station/cargo/boutique) +"uDB" = ( +/turf/closed/wall, +/area/station/cargo/drone_bay) +"uDE" = ( +/obj/effect/turf_decal/tile/dark_blue{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/hallway/secondary/command) +"uDQ" = ( +/obj/machinery/door/airlock/research{ + name = "Restroom" + }, +/obj/machinery/door/firedoor, +/turf/open/floor/iron/showroomfloor, +/area/station/science/research) +"uDZ" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/turf/open/floor/carpet/black, +/area/station/command/heads_quarters/hos) +"uEb" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/mapping_helpers/turn_off_lights_with_lightswitch, +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/cargo/warehouse) +"uEf" = ( +/obj/structure/rack, +/obj/item/storage/belt/utility, +/obj/effect/spawner/random/maintenance, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 9 + }, +/obj/machinery/firealarm/directional/north, +/turf/open/floor/iron, +/area/station/engineering/lobby) +"uEg" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/iron, +/area/station/security) +"uEn" = ( +/turf/open/floor/engine/airless, +/area/space/nearstation) +"uEo" = ( +/turf/closed/wall, +/area/station/service/chapel/office) +"uEr" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/chapel{ + dir = 8 + }, +/area/station/service/chapel) +"uES" = ( +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/security) +"uEV" = ( +/obj/effect/turf_decal/stripes/white/line{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/station/science/ordnance/testlab) +"uEW" = ( +/obj/structure/railing{ + dir = 1 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 1 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/junction/flip{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) +"uEX" = ( +/obj/structure/cable, +/turf/open/floor/glass/reinforced, +/area/station/security/prison) +"uFa" = ( +/obj/effect/turf_decal/siding/white{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/herringbone, +/area/station/commons/fitness/recreation) +"uFb" = ( +/turf/closed/wall, +/area/station/maintenance/department/engine) +"uFc" = ( +/obj/effect/turf_decal/tile/brown/anticorner/contrasted, +/obj/structure/railing{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/cargo/lobby) +"uFC" = ( +/turf/closed/wall/r_wall, +/area/station/engineering/supermatter/room) +"uFK" = ( +/obj/structure/sign/warning/secure_area{ + desc = "A warning sign which reads 'BOMB RANGE"; + name = "BOMB RANGE" + }, +/turf/closed/wall, +/area/station/science/ordnance/bomb) +"uFL" = ( +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ + dir = 9 + }, +/obj/effect/turf_decal/tile/yellow{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark/corner, +/area/station/engineering/atmos) +"uFN" = ( +/obj/structure/reagent_dispensers/watertank, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/department/bridge) +"uFW" = ( +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/central/lesser) +"uGv" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/stripes/white/line{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/security/prison) +"uGx" = ( +/obj/item/toy/plush/lizard_plushie/green{ + name = "Hauls-The-Crates" + }, +/obj/effect/spawner/random/structure/table_or_rack, +/obj/effect/decal/cleanable/cobweb/cobweb2, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"uGS" = ( +/obj/structure/chair/office/tactical{ + dir = 8 + }, +/obj/effect/landmark/start/security_officer, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/security/office) +"uGW" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 1 + }, +/obj/machinery/camera/autoname/directional/north, +/turf/open/floor/iron/white, +/area/station/hallway/secondary/entry) +"uHz" = ( +/obj/structure/lattice/catwalk, +/turf/open/openspace{ + initial_gas_mix = "n2=100;TEMP=80" + }, +/area/station/science/xenobiology) +"uHA" = ( +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/security/brig/entrance) +"uHE" = ( +/obj/machinery/computer/pandemic, +/obj/effect/turf_decal/tile/green/anticorner/contrasted, +/turf/open/floor/iron/white, +/area/station/medical/virology) +"uHL" = ( +/obj/structure/lattice/catwalk, +/obj/structure/statue/bronze/marx, +/turf/open/space/basic, +/area/space/nearstation) +"uHQ" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/science/server) +"uIa" = ( +/obj/machinery/door/airlock/public/glass{ + name = "Garden" + }, +/obj/machinery/door/firedoor, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/station/service/hydroponics/garden) +"uIb" = ( +/obj/structure/table/reinforced/rglass, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 8 + }, +/obj/machinery/recharger, +/turf/open/floor/iron/textured, +/area/station/security/warden) +"uIj" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/engineering/atmos/upper) +"uIu" = ( +/obj/item/radio/intercom/directional/east, +/obj/effect/decal/cleanable/blood/old, +/turf/open/floor/engine/xenobio, +/area/station/science/xenobiology) +"uIx" = ( +/obj/machinery/airalarm/directional/west, +/obj/structure/bed/double{ + dir = 4 + }, +/obj/item/bedsheet/qm/double{ + dir = 1 + }, +/obj/item/pillow/random, +/turf/open/floor/carpet/red, +/area/station/command/heads_quarters/qm) +"uIC" = ( +/obj/structure/ladder, +/obj/item/radio/intercom/directional/west, +/obj/effect/turf_decal/tile/dark_green/opposingcorners, +/turf/open/floor/iron, +/area/station/hallway/secondary/service) +"uIF" = ( +/obj/machinery/power/shieldwallgen/xenobiologyaccess{ + anchored = 1 + }, +/obj/structure/cable, +/obj/structure/sign/poster/random/directional/south, +/turf/open/floor/engine, +/area/station/science/xenobiology) +"uIM" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/maintenance/aft/upper) +"uIU" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/iron, +/area/station/commons/fitness/recreation) +"uIW" = ( +/obj/machinery/light/small/directional/east, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/exit/departure_lounge) +"uJc" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/structure/cable, +/turf/open/floor/plating/airless, +/area/station/solars/port) +"uJq" = ( +/obj/machinery/computer/records/medical, +/obj/effect/turf_decal/tile/red/fourcorners, +/obj/machinery/computer/security/telescreen/cmo/directional/north{ + name = "Medbay Monitor" + }, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/medical) +"uJt" = ( +/obj/effect/mapping_helpers/engraving, +/turf/closed/wall, +/area/station/maintenance/department/science) +"uJA" = ( +/obj/effect/turf_decal/sand/plating, +/obj/item/rack_parts, +/turf/open/floor/plating, +/area/station/asteroid) +"uJH" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark/textured, +/area/station/science/robotics/lab) +"uJO" = ( +/obj/effect/turf_decal/tile/red/opposingcorners, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/security) +"uJV" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/port/greater) +"uJW" = ( +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 4 + }, +/obj/structure/chair{ + dir = 1; + name = "Prosecution" + }, +/turf/open/floor/iron, +/area/station/security/courtroom) +"uKg" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/mapping_helpers/broken_floor, +/obj/item/stack/rods/two, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/hallway/primary/starboard) +"uKh" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/machinery/door/firedoor, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"uKm" = ( +/turf/closed/wall, +/area/station/asteroid) +"uKv" = ( +/obj/machinery/requests_console/directional/east{ + department = "Chief Medical Officer's Desk"; + name = "Chief Medical Officer's Request Console" + }, +/obj/effect/mapping_helpers/requests_console/announcement, +/obj/effect/mapping_helpers/requests_console/information, +/obj/effect/mapping_helpers/requests_console/assistance, +/obj/effect/turf_decal/trimline/dark_blue/filled/line{ + dir = 4 + }, +/turf/open/floor/holofloor/dark, +/area/station/command/heads_quarters/cmo) +"uKA" = ( +/obj/structure/transport/linear/public{ + icon = 'icons/obj/smooth_structures/catwalk.dmi'; + base_icon_state = "catwalk"; + icon_state = "catwalk-14" + }, +/turf/open/openspace, +/area/station/ai_monitored/turret_protected/aisat_interior) +"uLh" = ( +/obj/structure/cable, +/obj/machinery/camera/autoname/directional/north, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/engineering/gravity_generator) +"uLj" = ( +/obj/machinery/door/poddoor/shutters/window{ + id = "gateshutter"; + name = "Gateway Access Shutter"; + dir = 8 + }, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/command/gateway) +"uLm" = ( +/obj/machinery/door/airlock/external, +/obj/effect/mapping_helpers/airlock/cyclelink_helper, +/obj/effect/mapping_helpers/airlock/access/all/engineering/external, +/turf/open/floor/plating, +/area/station/maintenance/department/bridge) +"uLz" = ( +/obj/structure/table, +/obj/item/stack/cable_coil, +/obj/item/assembly/igniter, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/effect/turf_decal/tile/purple/half/contrasted{ + dir = 1 + }, +/obj/structure/cable, +/turf/open/floor/iron/white, +/area/station/science/lobby) +"uLP" = ( +/obj/effect/turf_decal/trimline/yellow/filled/warning{ + dir = 6 + }, +/obj/structure/railing{ + dir = 6 + }, +/obj/machinery/door/firedoor/border_only, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/hallway/secondary/exit/departure_lounge) +"uLR" = ( +/obj/structure/lattice, +/turf/open/openspace/airless, +/area/station/asteroid) +"uLU" = ( +/obj/effect/spawner/structure/window, +/turf/open/floor/plating, +/area/station/maintenance/port/lesser) +"uLY" = ( +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/commons/storage/primary) +"uMa" = ( +/obj/machinery/door/poddoor{ + id = "QMLoaddoor"; + name = "Supply Dock Loading Door" + }, +/obj/machinery/conveyor{ + dir = 8; + id = "QMLoad" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/plating, +/area/station/cargo/storage) +"uMo" = ( +/obj/machinery/flasher/directional/south{ + id = "control1" + }, +/turf/open/floor/iron/textured_large, +/area/station/security/warden) +"uMp" = ( +/obj/structure/chair/sofa/bench/left, +/obj/machinery/airalarm/directional/north, +/obj/machinery/camera/autoname/directional/east{ + network = list("ss13","medbay") + }, +/turf/open/floor/iron/white, +/area/station/medical/exam_room) +"uMq" = ( +/turf/closed/wall/r_wall, +/area/station/engineering/atmos/storage/gas) +"uMz" = ( +/obj/structure/chair/office{ + dir = 4 + }, +/turf/open/floor/iron/textured, +/area/station/cargo/drone_bay) +"uMA" = ( +/obj/structure/bed{ + dir = 1 + }, +/obj/item/bedsheet/captain{ + dir = 4 + }, +/obj/effect/landmark/start/captain, +/obj/structure/cable, +/turf/open/floor/carpet/executive, +/area/station/command/heads_quarters/captain/private) +"uMT" = ( +/obj/structure/cable, +/obj/effect/turf_decal/trimline/purple/filled/arrow_ccw{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/purple/filled/arrow_ccw{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/white/smooth_large, +/area/station/science/research) +"uMY" = ( +/obj/effect/turf_decal/sand/plating, +/obj/structure/closet/secure_closet/bar/all_access, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/plating, +/area/station/maintenance/central/greater) +"uNc" = ( +/obj/structure/rack, +/obj/effect/spawner/random/engineering/vending_restock, +/turf/open/floor/wood/parquet, +/area/station/cargo/boutique) +"uNd" = ( +/obj/structure/chair/office{ + dir = 1 + }, +/obj/effect/landmark/start/medical_doctor, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 1 + }, +/turf/open/floor/iron/white, +/area/station/medical/exam_room) +"uNl" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/turf/open/floor/iron/half, +/area/station/service/hydroponics/garden) +"uNt" = ( +/obj/effect/turf_decal/siding/wideplating_new, +/obj/effect/turf_decal/siding/white, +/turf/open/floor/iron/herringbone, +/area/station/commons/fitness/recreation) +"uNy" = ( +/obj/structure/table, +/obj/item/assembly/igniter, +/obj/item/assembly/igniter, +/obj/item/assembly/signaler{ + pixel_y = 6; + pixel_x = 12 + }, +/obj/item/assembly/signaler{ + pixel_y = 6; + pixel_x = 12 + }, +/obj/item/assembly/signaler{ + pixel_y = 6; + pixel_x = 12 + }, +/obj/item/assembly/signaler{ + pixel_y = 6; + pixel_x = 12 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/commons/storage/primary) +"uNK" = ( +/obj/effect/decal/cleanable/robot_debris/old, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/blood/tracks, +/turf/open/floor/plating, +/area/station/asteroid) +"uNR" = ( +/obj/structure/cable, +/obj/effect/spawner/random/maintenance, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"uNZ" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/structure/tank_dispenser{ + plasmatanks = 0 + }, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/aisat/foyer) +"uOb" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"uOf" = ( +/obj/docking_port/stationary/laborcamp_home{ + dir = 8 + }, +/turf/open/space/basic, +/area/space) +"uOm" = ( +/obj/machinery/door/airlock/medical{ + name = "Primary Surgical Theatre" + }, +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 8 + }, +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/effect/mapping_helpers/airlock/access/all/medical/surgery, +/obj/machinery/duct, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/medical/surgery/theatre) +"uOo" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/misc/asteroid, +/area/station/maintenance/department/science) +"uOs" = ( +/obj/structure/table/wood, +/obj/item/ai_module/toy_ai{ + pixel_x = 9; + pixel_y = -6 + }, +/obj/item/food/carneburrito{ + pixel_x = -2; + pixel_y = 5 + }, +/turf/open/floor/carpet/executive, +/area/station/command/meeting_room) +"uOx" = ( +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/turf/open/floor/plating, +/area/station/maintenance/disposal) +"uOF" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/dirt, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"uOJ" = ( +/obj/machinery/door/poddoor/lift{ + transport_linked_id = "medbay1" + }, +/turf/open/floor/plating/elevatorshaft, +/area/station/medical/medbay/central) +"uOU" = ( +/obj/machinery/door/airlock{ + name = "Law Office" + }, +/obj/effect/mapping_helpers/airlock/access/all/service/lawyer, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/turf/open/floor/wood, +/area/station/service/lawoffice) +"uOY" = ( +/obj/structure/lattice/catwalk, +/obj/structure/marker_beacon/purple, +/turf/open/space/openspace, +/area/space/nearstation) +"uOZ" = ( +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron/large, +/area/station/service/hydroponics/garden) +"uPg" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 9 + }, +/obj/machinery/lift_indicator/directional/south{ + linked_elevator_id = "medbay1"; + pixel_x = -32 + }, +/obj/machinery/button/elevator/directional/south{ + id = "medbay1"; + pixel_x = -32 + }, +/turf/open/floor/iron/white, +/area/station/medical/treatment_center) +"uPi" = ( +/obj/effect/turf_decal/tile/brown/half/contrasted, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/cargo/storage) +"uPj" = ( +/obj/machinery/door/airlock/research/glass/incinerator/ordmix_exterior{ + name = "Burn Chamber Interior Airlock"; + id_tag = "ordmix_airlock_interior" + }, +/obj/effect/mapping_helpers/airlock/locked, +/obj/effect/mapping_helpers/airlock/access/all/science/ordnance, +/obj/machinery/airlock_controller/incinerator_ordmix{ + pixel_y = -26 + }, +/obj/machinery/button/ignition/incinerator/ordmix{ + pixel_x = -6; + pixel_y = 24 + }, +/obj/machinery/button/door/incinerator_vent_ordmix{ + pixel_x = 8; + pixel_y = 24 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/engine/vacuum, +/area/station/science/ordnance/burnchamber) +"uPv" = ( +/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ + dir = 10 + }, +/turf/open/floor/iron, +/area/station/engineering/atmos) +"uPL" = ( +/obj/machinery/door/airlock/research/glass{ + name = "Ordnance Lab" + }, +/obj/effect/mapping_helpers/airlock/locked, +/obj/effect/mapping_helpers/airlock/access/all/science/ordnance, +/obj/machinery/atmospherics/pipe/smart/simple/purple/visible, +/turf/open/floor/iron/dark/airless, +/area/station/science/ordnance) +"uPM" = ( +/obj/structure/railing, +/obj/machinery/door/firedoor/border_only, +/obj/effect/turf_decal/trimline/blue/filled/line, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/blue/filled/mid_joiner, +/turf/open/floor/iron/white/smooth_large, +/area/station/medical/medbay/central) +"uPR" = ( +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ + dir = 10 + }, +/turf/open/floor/iron, +/area/station/engineering/atmos/upper) +"uQl" = ( +/obj/item/flashlight/flare/candle/infinite{ + pixel_x = 16; + pixel_y = 16 + }, +/turf/open/misc/asteroid, +/area/station/asteroid) +"uQB" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/catwalk_floor/iron_white, +/area/station/science/lobby) +"uQG" = ( +/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible, +/obj/machinery/atmospherics/pipe/bridge_pipe/green/visible{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/engineering/atmos) +"uQM" = ( +/obj/structure/rack, +/obj/item/clothing/glasses/science, +/obj/item/clothing/glasses/science, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/firealarm/directional/north, +/turf/open/floor/iron/textured_large, +/area/station/medical/treatment_center) +"uQO" = ( +/obj/structure/table/wood, +/obj/machinery/coffeemaker/impressa{ + pixel_x = 5; + pixel_y = 6 + }, +/obj/item/storage/box/coffeepack, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/dark, +/area/station/service/cafeteria) +"uRb" = ( +/obj/structure/cable, +/turf/open/floor/iron/white/smooth_large, +/area/station/medical/surgery) +"uRc" = ( +/obj/structure/curtain/cloth/fancy/mechanical/start_closed{ + desc = "A set of curtains serving as a fancy theater backdrop. They can only be opened by a button."; + id = "theater_curtains"; + name = "Theater Curtains" + }, +/turf/open/floor/wood, +/area/station/service/theater) +"uRG" = ( +/turf/open/openspace, +/area/station/security/prison/shower) +"uRI" = ( +/obj/effect/turf_decal/tile/dark_blue/anticorner/contrasted{ + dir = 8 + }, +/obj/machinery/vending/autodrobe, +/turf/open/floor/iron, +/area/station/command/meeting_room) +"uRO" = ( +/obj/effect/mapping_helpers/burnt_floor, +/turf/open/floor/iron, +/area/station/cargo/miningoffice) +"uRT" = ( +/obj/structure/cable, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/medical/treatment_center) +"uSd" = ( +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/white, +/area/station/science/lobby) +"uSe" = ( +/obj/structure/closet/crate, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/plating, +/area/station/maintenance/central/greater) +"uSA" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/iron, +/area/station/cargo/storage) +"uSG" = ( +/obj/effect/turf_decal/caution/stand_clear, +/turf/open/floor/plating/elevatorshaft, +/area/station/service/kitchen) +"uSN" = ( +/obj/effect/turf_decal/trimline/blue/filled/corner, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) +"uSX" = ( +/obj/machinery/atmospherics/components/unary/thermomachine/freezer/on{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/item/radio/intercom/directional/south, +/turf/open/floor/iron/dark, +/area/station/science/server) +"uTk" = ( +/obj/machinery/light/warm/dim/directional/north, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/obj/effect/turf_decal/trimline/yellow/filled/mid_joiner{ + dir = 1 + }, +/turf/open/floor/iron/white/smooth_large, +/area/station/medical/chemistry/minisat) +"uTy" = ( +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 8 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/station/security) +"uTU" = ( +/obj/structure/tank_holder/extinguisher/advanced, +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/turf/open/floor/iron/large, +/area/station/engineering/atmos) +"uUj" = ( +/obj/machinery/door/airlock/highsecurity{ + name = "AI Chamber" + }, +/obj/effect/mapping_helpers/airlock/access/all/command/ai_upload, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 8 + }, +/obj/structure/cable/layer3, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/ai_monitored/turret_protected/ai) +"uUk" = ( +/obj/structure/rack, +/obj/item/storage/briefcase{ + pixel_x = -3; + pixel_y = 2 + }, +/obj/item/storage/briefcase/secure{ + pixel_x = 2; + pixel_y = -2 + }, +/obj/item/taperecorder, +/obj/item/clothing/glasses/sunglasses, +/obj/item/clothing/glasses/sunglasses/big, +/turf/open/floor/wood, +/area/station/service/lawoffice) +"uUr" = ( +/obj/machinery/atmospherics/components/tank/air, +/obj/structure/sign/poster/contraband/random/directional/west, +/turf/open/floor/plating, +/area/station/maintenance/department/medical) +"uUx" = ( +/obj/machinery/dna_infuser, +/obj/item/infuser_book, +/turf/open/floor/iron/white/textured, +/area/station/science/genetics) +"uUA" = ( +/obj/structure/rack, +/obj/effect/spawner/random/techstorage/medical_all, +/turf/open/floor/iron/textured, +/area/station/engineering/storage/tech) +"uUF" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/cargo/storage) +"uUP" = ( +/obj/structure/railing/corner{ + dir = 1 + }, +/obj/machinery/camera/autoname/directional/south, +/turf/open/floor/carpet/red, +/area/station/command/heads_quarters/qm) +"uUX" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/wood, +/area/station/command/heads_quarters/qm) +"uUZ" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/trash/hobo_squat, +/obj/machinery/button/curtain{ + pixel_y = 32; + id = "neverstopgambling" + }, +/turf/open/floor/wood, +/area/station/maintenance/central/lesser) +"uVe" = ( +/obj/machinery/disposal/bin{ + desc = "A pneumatic waste disposal unit. This one leads into space!"; + name = "deathsposal unit" + }, +/obj/effect/turf_decal/stripes/end, +/obj/machinery/light/directional/north, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/turf/open/floor/iron/white/textured_large, +/area/station/science/xenobiology) +"uVi" = ( +/obj/structure/stairs/east, +/turf/open/floor/iron/stairs/left{ + dir = 8 + }, +/area/station/medical/storage) +"uVk" = ( +/obj/structure/cable, +/obj/effect/turf_decal/tile/red/opposingcorners, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/security) +"uVI" = ( +/obj/structure/grille, +/turf/open/misc/asteroid/airless, +/area/station/asteroid) +"uVP" = ( +/obj/machinery/computer/atmos_control/air_tank{ + dir = 8 + }, +/obj/effect/turf_decal/tile/yellow{ + dir = 4 + }, +/turf/open/floor/iron/dark/corner, +/area/station/engineering/atmos) +"uVU" = ( +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 8 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/station/cargo/storage) +"uWg" = ( +/obj/structure/closet/secure_closet/hop, +/obj/effect/turf_decal/siding/dark_blue{ + dir = 8 + }, +/obj/machinery/power/apc/auto_name/directional/east, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/command/heads_quarters/hop) +"uWj" = ( +/obj/effect/landmark/start/chaplain, +/obj/machinery/holopad, +/turf/open/floor/wood/tile, +/area/station/service/chapel) +"uWl" = ( +/turf/closed/wall, +/area/station/cargo/sorting) +"uWr" = ( +/obj/effect/turf_decal/tile/dark_green/opposingcorners, +/obj/machinery/modular_computer/preset/cargochat/service{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/hallway/secondary/service) +"uWt" = ( +/obj/effect/turf_decal/siding/purple, +/obj/structure/disposalpipe/trunk/multiz/down{ + dir = 4 + }, +/obj/item/radio/intercom/directional/south, +/turf/open/floor/iron/white/smooth_half, +/area/station/science/research) +"uWy" = ( +/obj/structure/table/reinforced, +/obj/item/book/manual/wiki/security_space_law{ + pixel_x = 9; + pixel_y = 4 + }, +/obj/machinery/recharger, +/obj/effect/turf_decal/tile/red/opposingcorners, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/science) +"uWB" = ( +/turf/open/floor/iron/stairs{ + dir = 1 + }, +/area/station/command/heads_quarters/qm) +"uWI" = ( +/obj/machinery/door/airlock/research/glass{ + name = "Chemistry Lab" + }, +/obj/effect/mapping_helpers/airlock/access/all/medical/chemistry, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 8 + }, +/obj/effect/landmark/navigate_destination/chemfactory, +/turf/open/floor/iron/white, +/area/station/medical/chemistry/minisat) +"uWX" = ( +/obj/effect/turf_decal/tile/yellow{ + dir = 8 + }, +/obj/machinery/atmospherics/components/unary/thermomachine/freezer{ + dir = 1 + }, +/obj/effect/turf_decal/bot{ + dir = 1 + }, +/turf/open/floor/iron/dark/corner, +/area/station/engineering/atmos/upper) +"uXb" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/simple/green/hidden{ + dir = 5 + }, +/turf/open/floor/iron/dark, +/area/station/science/ordnance) +"uXe" = ( +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/obj/structure/chair/stool/directional/east, +/obj/machinery/atmospherics/pipe/layer_manifold/supply/visible{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) +"uXp" = ( +/obj/docking_port/stationary{ + dir = 2; + dwidth = 9; + height = 25; + name = "emergency evac bay"; + shuttle_id = "emergency_home"; + width = 29 + }, +/turf/open/space/basic, +/area/space) +"uXt" = ( +/obj/machinery/hydroponics/constructable, +/turf/open/floor/iron/large, +/area/station/service/hydroponics/garden) +"uXw" = ( +/obj/machinery/camera/autoname/directional/west{ + network = list("ss13","engine") + }, +/turf/open/floor/engine, +/area/station/engineering/supermatter) +"uXD" = ( +/turf/closed/wall, +/area/station/hallway/secondary/entry) +"uXP" = ( +/obj/structure/cable, +/obj/effect/turf_decal/trimline/purple/filled/arrow_ccw{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/purple/filled/arrow_ccw{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/white/smooth_large, +/area/station/science/xenobiology/hallway) +"uXQ" = ( +/obj/structure/chair/office{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/landmark/start/psychologist, +/turf/open/floor/wood/parquet, +/area/station/medical/psychology) +"uXR" = ( +/obj/effect/turf_decal/trimline/blue/filled/line, +/obj/machinery/firealarm/directional/south, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) +"uXS" = ( +/obj/structure/barricade/wooden, +/obj/effect/turf_decal/sand/plating, +/turf/open/floor/plating, +/area/station/maintenance/department/medical) +"uXZ" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/service/hydroponics) +"uYg" = ( +/obj/effect/turf_decal/loading_area/white{ + dir = 8 + }, +/obj/machinery/conveyor{ + dir = 8; + id = "sorter" + }, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/obj/machinery/door/window/left/directional/south{ + name = "Crate Security Door"; + req_access = list("shipping") + }, +/turf/open/floor/iron/textured_large, +/area/station/cargo/sorting) +"uYk" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/maintenance/department/engine) +"uYl" = ( +/obj/machinery/door/airlock/security, +/obj/effect/turf_decal/tile/red/fourcorners, +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/structure/cable, +/obj/effect/mapping_helpers/airlock/access/all/security/general, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/security/office) +"uYG" = ( +/turf/closed/wall/r_wall, +/area/station/maintenance/aft/upper) +"uYH" = ( +/turf/open/floor/plating, +/area/station/maintenance/department/science) +"uYI" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark/textured, +/area/station/security/execution/transfer) +"uYT" = ( +/obj/structure/broken_flooring/side/directional/north, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/plating, +/area/station/hallway/primary/central) +"uYV" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/commons/fitness/recreation) +"uZa" = ( +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 4 + }, +/obj/item/radio/intercom/directional/east, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/construction/mining/aux_base) +"uZc" = ( +/turf/closed/wall/r_wall, +/area/station/security) +"uZg" = ( +/obj/machinery/icecream_vat, +/turf/open/floor/iron/kitchen_coldroom/freezerfloor, +/area/station/service/kitchen) +"uZx" = ( +/turf/closed/wall, +/area/station/hallway/primary/central) +"uZG" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/turf/open/floor/engine, +/area/station/command/corporate_dock) +"uZQ" = ( +/obj/machinery/vending/wardrobe/det_wardrobe, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron, +/area/station/security/detectives_office) +"vaf" = ( +/obj/effect/turf_decal/tile/red{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/security) +"vas" = ( +/obj/effect/turf_decal/trimline/yellow/filled/corner, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/engineering/main) +"vau" = ( +/obj/structure/table/glass, +/obj/item/storage/box/beakers{ + pixel_x = 2; + pixel_y = 2 + }, +/obj/item/storage/box/syringes, +/obj/effect/turf_decal/tile/green/anticorner/contrasted{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/station/medical/virology) +"vay" = ( +/obj/structure/table/reinforced, +/obj/item/storage/medkit/regular, +/obj/effect/turf_decal/tile/dark_blue/half/contrasted{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/command/bridge) +"vaC" = ( +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/command/corporate_dock) +"vaY" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/broken_flooring/pile, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/plating, +/area/station/cargo/warehouse) +"vaZ" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"vbd" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/visible/layer2, +/turf/open/misc/asteroid/airless, +/area/station/asteroid) +"vbn" = ( +/obj/effect/turf_decal/siding/purple, +/obj/machinery/light/dim/directional/west, +/turf/open/floor/iron/white, +/area/station/science/ordnance/testlab) +"vbF" = ( +/obj/effect/spawner/random/structure/grille, +/obj/machinery/atmospherics/pipe/smart/simple/supply/visible/layer4, +/turf/open/floor/plating, +/area/station/maintenance/department/medical) +"vbV" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/obj/machinery/door/poddoor/preopen{ + id = "xeno_blastdoor"; + name = "Biohazard Containment Door" + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plating, +/area/station/science/xenobiology) +"vbY" = ( +/obj/structure/cable, +/obj/effect/turf_decal/siding/wood, +/obj/structure/sign/painting/large/library{ + pixel_y = -35 + }, +/turf/open/floor/wood/tile, +/area/station/service/bar) +"vck" = ( +/obj/machinery/atmospherics/pipe/smart/simple/dark/visible/layer5{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/engineering/atmos) +"vcn" = ( +/obj/machinery/door/airlock/research{ + name = "Ordnance Lab" + }, +/obj/effect/mapping_helpers/airlock/access/all/science/ordnance_storage, +/obj/machinery/door/firedoor/heavy, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/science/ordnance) +"vcs" = ( +/turf/open/floor/fakespace, +/area/station/maintenance/port/lesser) +"vcV" = ( +/obj/machinery/door/airlock/grunge{ + name = "Chapel Morgue" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/mapping_helpers/airlock/access/all/service/crematorium, +/turf/open/floor/iron/dark, +/area/station/service/chapel/office) +"vcZ" = ( +/obj/item/circuitboard/machine/thermomachine, +/obj/item/circuitboard/machine/thermomachine, +/obj/item/storage/bag/construction, +/obj/item/storage/bag/construction, +/obj/item/storage/bag/construction, +/obj/item/stock_parts/power_store/cell/high, +/obj/item/stock_parts/power_store/cell/high, +/obj/item/stock_parts/power_store/cell/high, +/obj/structure/closet/crate, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/light/dim/directional/south, +/turf/open/floor/iron/large, +/area/station/engineering/atmos) +"vdb" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 1 + }, +/obj/machinery/light/cold/directional/north, +/obj/structure/closet/wardrobe/white/medical, +/turf/open/floor/iron/white, +/area/station/medical/paramedic) +"vdO" = ( +/obj/effect/turf_decal/tile/dark_red/opposingcorners, +/obj/machinery/light_switch/directional/north, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/service/bar) +"vdR" = ( +/obj/structure/disposalpipe/junction/flip{ + dir = 4 + }, +/obj/effect/turf_decal/tile/purple{ + dir = 1 + }, +/turf/open/floor/iron/white, +/area/station/science/lobby) +"vdZ" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/station/engineering/storage) +"ved" = ( +/turf/closed/wall/r_wall, +/area/station/hallway/primary/fore) +"veh" = ( +/obj/structure/cable/multilayer/multiz, +/turf/open/floor/plating, +/area/station/maintenance/central/greater) +"vel" = ( +/obj/structure/stairs/west, +/obj/structure/railing, +/turf/open/floor/iron, +/area/station/security/warden) +"vem" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/washing_machine{ + name = "washashing machinine" + }, +/obj/effect/decal/cleanable/blood/old, +/turf/open/floor/plating, +/area/station/maintenance/department/science) +"vew" = ( +/obj/effect/mapping_helpers/airlock/cyclelink_helper, +/obj/machinery/door/airlock/external{ + name = "Departure Lounge Airlock" + }, +/obj/effect/turf_decal/stripes/end{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/exit/departure_lounge) +"vex" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/turf/open/floor/iron/large, +/area/station/service/hydroponics/garden) +"veF" = ( +/obj/effect/turf_decal/tile/brown/fourcorners, +/obj/structure/railing, +/turf/open/floor/iron, +/area/station/cargo/storage) +"veW" = ( +/obj/structure/extinguisher_cabinet/directional/north, +/turf/closed/wall, +/area/station/hallway/primary/central) +"vfq" = ( +/obj/structure/railing{ + dir = 9 + }, +/turf/open/floor/catwalk_floor/iron_dark/telecomms, +/area/station/ai_monitored/turret_protected/ai) +"vfy" = ( +/obj/machinery/door/airlock/medical/glass{ + name = "Pharmacy" + }, +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/access/all/medical/pharmacy, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/medical/pharmacy) +"vfG" = ( +/obj/structure/sign/warning/vacuum/directional/west, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/exit/departure_lounge) +"vfJ" = ( +/turf/closed/wall, +/area/station/maintenance/department/science) +"vfL" = ( +/obj/effect/turf_decal/stripes{ + dir = 4 + }, +/obj/structure/cable, +/obj/structure/sign/warning/vacuum/external/directional/east, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"vfM" = ( +/obj/effect/landmark/start/depsec/science, +/obj/effect/turf_decal/tile/red/opposingcorners, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/science) +"vfR" = ( +/obj/structure/fluff/minepost, +/turf/open/misc/asteroid, +/area/station/maintenance/department/science) +"vgd" = ( +/obj/structure/chair/office/light{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/structure/cable/layer3, +/turf/open/floor/iron/dark/telecomms, +/area/station/tcommsat/server) +"vge" = ( +/obj/effect/turf_decal/siding/wood, +/obj/machinery/pdapainter/supply, +/obj/machinery/light/directional/south, +/turf/open/floor/wood, +/area/station/command/heads_quarters/qm) +"vgh" = ( +/obj/machinery/door/airlock/security/glass{ + name = "Security Entry"; + id_tag = "secentrylock" + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "brig-entrance" + }, +/obj/effect/turf_decal/tile/red/fourcorners, +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/access/all/security/entrance, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/station/security/brig/entrance) +"vgq" = ( +/obj/structure/railing{ + dir = 6 + }, +/obj/structure/cable/layer3, +/turf/open/floor/catwalk_floor/iron_dark/telecomms, +/area/station/ai_monitored/turret_protected/ai) +"vgz" = ( +/obj/effect/turf_decal/tile/neutral, +/obj/machinery/firealarm/directional/south, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"vgI" = ( +/obj/effect/turf_decal/tile/red/anticorner/contrasted, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/security/execution/transfer) +"vgM" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored/carbon_output, +/turf/open/floor/engine/co2, +/area/station/engineering/atmos) +"vgP" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/maintenance/department/engine) +"vhf" = ( +/obj/machinery/atmospherics/pipe/multiz/supply/visible/layer4, +/obj/machinery/atmospherics/pipe/multiz/scrubbers/visible/layer2, +/turf/open/floor/catwalk_floor, +/area/station/maintenance/department/medical/central) +"vhz" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 8; + name = "Privacy Shutters"; + id = "psychshutter" + }, +/turf/open/floor/plating, +/area/station/medical/psychology) +"vhH" = ( +/obj/effect/turf_decal/tile/dark_red/opposingcorners, +/obj/item/gun/ballistic/shotgun/doublebarrel, +/obj/structure/table/wood, +/obj/item/radio/intercom/directional/west, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/service/bar/backroom) +"vhT" = ( +/obj/effect/turf_decal/tile/blue/half/contrasted{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/security/courtroom) +"vhW" = ( +/obj/machinery/door/firedoor, +/obj/machinery/firealarm/directional/west, +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron/dark, +/area/station/medical/treatment_center) +"vhZ" = ( +/obj/structure/cable, +/obj/effect/turf_decal/tile/dark_blue/half/contrasted{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/command/bridge) +"viK" = ( +/obj/effect/turf_decal/tile/dark_blue/half/contrasted{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/command/bridge) +"viT" = ( +/obj/machinery/camera/autoname/directional/west{ + network = list("ss13","rd","xeno") + }, +/turf/open/floor/iron/white/smooth_half{ + dir = 8 + }, +/area/station/science/xenobiology) +"viX" = ( +/obj/structure/window/reinforced/spawner/directional/south, +/obj/structure/window/reinforced/spawner/directional/west, +/obj/structure/flora/bush/grassy/style_random, +/turf/open/floor/grass, +/area/station/science/research) +"vji" = ( +/obj/structure/cable, +/obj/effect/turf_decal/tile/yellow{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/trunk/multiz, +/turf/open/floor/iron/dark/corner{ + dir = 1 + }, +/area/station/engineering/atmos/storage/gas) +"vjm" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/security/prison/garden) +"vjq" = ( +/obj/machinery/power/apc/auto_name/directional/north, +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/central/lesser) +"vjv" = ( +/obj/structure/railing, +/obj/machinery/door/firedoor/border_only, +/turf/open/floor/iron/white, +/area/station/science/research) +"vjy" = ( +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 8 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/security/brig/entrance) +"vjA" = ( +/obj/effect/turf_decal/tile/red/half/contrasted, +/turf/open/floor/iron, +/area/station/security/warden) +"vjB" = ( +/obj/machinery/door/poddoor/shutters{ + id = "ordauxgarage"; + dir = 1 + }, +/obj/effect/turf_decal/sand/plating, +/obj/effect/turf_decal/stripes/asteroid/end{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/science/ordnance) +"vjD" = ( +/obj/structure/cable, +/obj/structure/sign/poster/random/directional/north, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/airalarm/directional/east, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"vjQ" = ( +/obj/effect/turf_decal/siding/blue{ + dir = 8 + }, +/turf/open/floor/circuit/telecomms/server, +/area/station/science/server) +"vjT" = ( +/obj/effect/landmark/start/librarian, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/engine/cult, +/area/station/service/library) +"vjZ" = ( +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/disposal) +"vkn" = ( +/obj/machinery/firealarm/directional/east, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/white/smooth_edge{ + dir = 8 + }, +/area/station/medical/exam_room) +"vkp" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden, +/turf/closed/wall/r_wall, +/area/station/maintenance/disposal/incinerator) +"vks" = ( +/obj/machinery/door/poddoor/shutters{ + dir = 1; + id = "mechbay"; + name = "Mech Bay Shutters" + }, +/obj/effect/turf_decal/stripes/full, +/turf/open/floor/iron, +/area/station/science/robotics/mechbay) +"vkv" = ( +/obj/item/stock_parts/power_store/cell/bluespace{ + rigged = 1; + pixel_x = -5; + pixel_y = -8 + }, +/turf/open/misc/asteroid, +/area/station/asteroid) +"vkx" = ( +/obj/machinery/recycler{ + dir = 4 + }, +/obj/machinery/conveyor{ + id = "garbage"; + dir = 8 + }, +/obj/structure/window/spawner/directional/north, +/turf/open/floor/plating, +/area/station/maintenance/disposal) +"vkM" = ( +/obj/machinery/light_switch/directional/north, +/obj/structure/easel, +/obj/item/canvas/twentythree_twentythree, +/obj/item/canvas/twentythree_twentythree, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/textured, +/area/station/commons/storage/art) +"vkN" = ( +/obj/machinery/door/firedoor/border_only, +/obj/structure/railing, +/turf/open/floor/iron, +/area/station/engineering/atmos/upper) +"vkO" = ( +/obj/effect/turf_decal/sand/plating, +/obj/structure/tank_dispenser/oxygen, +/turf/open/floor/plating, +/area/station/engineering/supermatter/room) +"vkR" = ( +/obj/machinery/firealarm/directional/west, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/service/hydroponics) +"vla" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/structure/chair/comfy/black{ + dir = 1 + }, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/turf/open/floor/wood, +/area/station/service/library) +"vlc" = ( +/obj/machinery/light/directional/south, +/turf/open/openspace, +/area/station/security/warden) +"vlz" = ( +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/science/ordnance) +"vlD" = ( +/obj/structure/table/wood, +/obj/machinery/light_switch/directional/north, +/obj/machinery/fax{ + fax_name = "Head of Personnel's Office"; + name = "Head of Personnel's Fax Machine" + }, +/turf/open/floor/carpet/green, +/area/station/command/heads_quarters/hop) +"vlJ" = ( +/obj/machinery/door/airlock/security{ + name = "Interrogation" + }, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 8 + }, +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/structure/cable, +/obj/effect/mapping_helpers/airlock/access/all/security/general, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark/side{ + dir = 4 + }, +/area/station/security/interrogation) +"vlM" = ( +/obj/structure/bodycontainer/crematorium{ + dir = 4; + id = "crematoriumChapel" + }, +/turf/open/floor/iron/dark, +/area/station/service/chapel/office) +"vlR" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"vlX" = ( +/obj/machinery/airalarm/directional/north, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/tile/yellow{ + dir = 4 + }, +/turf/open/floor/iron/dark/corner{ + dir = 1 + }, +/area/station/engineering/atmos/storage/gas) +"vmf" = ( +/obj/structure/closet/wardrobe/orange, +/obj/effect/turf_decal/tile/red/anticorner/contrasted{ + dir = 8 + }, +/obj/machinery/firealarm/directional/west, +/turf/open/floor/iron, +/area/station/security/brig) +"vmk" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/girder, +/turf/open/floor/plating, +/area/station/maintenance/department/science) +"vmB" = ( +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/construction/mining/aux_base) +"vnb" = ( +/obj/machinery/door/poddoor/incinerator_atmos_aux, +/turf/open/floor/engine/airless, +/area/station/maintenance/disposal/incinerator) +"vnj" = ( +/obj/structure/railing/corner{ + dir = 4 + }, +/obj/structure/railing/corner{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/hallway/secondary/exit/departure_lounge) +"vno" = ( +/obj/machinery/fax{ + fax_name = "Chief Engineer's Office"; + name = "Chief Engineer's Fax Machine" + }, +/obj/structure/table/reinforced, +/obj/machinery/light/directional/east, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 5 + }, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/command/heads_quarters/ce) +"vnr" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/wood, +/area/station/service/theater) +"vns" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/obj/machinery/door/poddoor/preopen{ + id = "Xenolab"; + name = "Test Chamber Blast Door" + }, +/obj/structure/sign/warning/gas_mask/directional/south, +/turf/open/floor/engine, +/area/station/science/xenobiology) +"vnG" = ( +/obj/machinery/disposal/bin, +/obj/machinery/requests_console/directional/north{ + department = "Chapel"; + name = "Chapel Requests Console" + }, +/obj/effect/mapping_helpers/requests_console/assistance, +/obj/structure/disposalpipe/trunk, +/turf/open/floor/iron/grimy, +/area/station/service/chapel/office) +"vnV" = ( +/obj/structure/sign/warning/directional/east, +/obj/effect/spawner/random/trash/caution_sign, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"vnX" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron/white, +/area/station/science/research) +"voq" = ( +/obj/structure/closet/crate/secure/science, +/obj/effect/spawner/random/entertainment/money_medium, +/obj/effect/spawner/random/entertainment/money_medium, +/turf/open/misc/asteroid, +/area/station/asteroid) +"vos" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/engineering/lobby) +"vot" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/dark_blue/opposingcorners, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/command/bridge) +"voy" = ( +/obj/structure/cable, +/obj/machinery/navbeacon{ + codes_txt = "patrol;next_patrol=P15-Central-Primary"; + location = "P14-Central-Primary" + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"voB" = ( +/obj/structure/table/reinforced, +/obj/machinery/fax{ + fax_name = "Engineering Lobby"; + name = "Engineering Lobby Fax Machine" + }, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 + }, +/obj/structure/extinguisher_cabinet/directional/north, +/turf/open/floor/iron, +/area/station/engineering/lobby) +"voI" = ( +/obj/structure/chair/comfy/brown{ + name = "Chief Engineer"; + dir = 8 + }, +/turf/open/floor/carpet/executive, +/area/station/command/meeting_room) +"voQ" = ( +/obj/machinery/computer/rdconsole, +/obj/item/radio/intercom/directional/north, +/turf/open/floor/iron/white, +/area/station/science/lab) +"voY" = ( +/obj/machinery/light/directional/south, +/turf/open/floor/iron/dark, +/area/station/engineering/gravity_generator) +"vpf" = ( +/obj/machinery/suit_storage_unit/atmos, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/storage/gas) +"vpn" = ( +/obj/machinery/power/emitter/welded{ + dir = 8 + }, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/engineering/supermatter/room) +"vpq" = ( +/obj/structure/bodycontainer/morgue, +/obj/structure/window/spawner/directional/south, +/obj/effect/turf_decal/stripes/line, +/obj/item/radio/intercom/directional/west, +/turf/open/floor/iron/white/smooth_half, +/area/station/science/robotics/lab) +"vpz" = ( +/obj/effect/turf_decal/tile/red/half/contrasted, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/security) +"vpD" = ( +/obj/machinery/light/directional/west, +/turf/open/floor/plating, +/area/station/engineering/supermatter/room) +"vpI" = ( +/obj/structure/table, +/obj/effect/turf_decal/tile/red/anticorner/contrasted{ + dir = 1 + }, +/obj/machinery/recharger{ + pixel_x = -6; + pixel_y = 2 + }, +/obj/machinery/recharger{ + pixel_x = 6; + pixel_y = 2 + }, +/turf/open/floor/iron/dark, +/area/station/security/lockers) +"vpK" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/door/airlock/external, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "warneverchanges" + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/external, +/turf/open/floor/plating, +/area/station/maintenance/department/science) +"vqm" = ( +/obj/structure/railing{ + dir = 4 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/wood/tile, +/area/station/service/bar) +"vqq" = ( +/obj/structure/disposalpipe/trunk/multiz{ + dir = 4 + }, +/obj/structure/girder/reinforced, +/obj/structure/grille, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"vqr" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/junction/flip{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/yellow/filled/line, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/white, +/area/station/medical/chemistry/minisat) +"vqt" = ( +/turf/open/floor/wood/tile, +/area/station/service/bar) +"vqv" = ( +/turf/open/floor/iron/white/smooth_edge{ + dir = 8 + }, +/area/station/science/research) +"vqB" = ( +/obj/machinery/portable_atmospherics/canister/nitrous_oxide, +/obj/effect/turf_decal/bot, +/turf/open/floor/iron/large, +/area/station/engineering/atmos/storage/gas) +"vqC" = ( +/obj/effect/turf_decal/stripes/line, +/turf/closed/wall, +/area/station/medical/coldroom) +"vqH" = ( +/obj/structure/chair/sofa/bench, +/obj/effect/turf_decal/tile/neutral, +/obj/machinery/camera/autoname/directional/north, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/exit/departure_lounge) +"vqI" = ( +/obj/effect/landmark/atmospheric_sanity/mark_all_station_areas_as_goal, +/turf/open/floor/iron, +/area/station/engineering/lobby) +"vqN" = ( +/turf/open/floor/iron/dark/small, +/area/station/science/cytology) +"vqY" = ( +/obj/structure/table, +/obj/item/clipboard, +/obj/structure/sign/poster/official/random/directional/north, +/turf/open/floor/iron/large, +/area/station/commons/locker) +"vrF" = ( +/turf/open/floor/iron/stairs/right{ + dir = 8 + }, +/area/station/service/theater) +"vrG" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 1 + }, +/obj/machinery/portable_atmospherics/canister, +/obj/effect/turf_decal/box/red, +/obj/machinery/light/directional/south, +/turf/open/floor/iron/dark/smooth_large, +/area/station/science/ordnance) +"vrR" = ( +/obj/effect/spawner/random/engineering/tracking_beacon, +/turf/open/floor/wood, +/area/station/commons/lounge) +"vrU" = ( +/obj/machinery/computer/security/hos{ + dir = 1 + }, +/obj/effect/turf_decal/siding/wood, +/obj/effect/landmark/event_spawn, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/wood, +/area/station/command/heads_quarters/hos) +"vse" = ( +/obj/structure/cable, +/obj/structure/window/reinforced/spawner/directional/north, +/turf/open/floor/glass/reinforced, +/area/station/security/prison) +"vsx" = ( +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/hallway/secondary/exit/departure_lounge) +"vsD" = ( +/obj/structure/table, +/obj/effect/spawner/random/maintenance/two, +/turf/open/floor/iron/grimy, +/area/station/maintenance/central/greater) +"vsO" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/sorting/mail{ + dir = 8 + }, +/obj/effect/mapping_helpers/mail_sorting/service/dormitories, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"vsQ" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 1 + }, +/obj/structure/chair{ + name = "Judge"; + dir = 8 + }, +/turf/open/floor/wood/tile, +/area/station/security/courtroom) +"vtg" = ( +/obj/structure/table/wood/fancy/green, +/obj/effect/spawner/random/aimodule/harmless, +/obj/machinery/camera/autoname/directional/west, +/turf/open/floor/circuit/green, +/area/station/ai_monitored/turret_protected/ai_upload) +"vtv" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/iron/dark/smooth_large, +/area/station/medical/morgue) +"vtN" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners{ + dir = 1 + }, +/obj/machinery/airalarm/directional/west, +/obj/machinery/modular_computer/preset/id{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/command/heads_quarters/rd) +"vtP" = ( +/obj/machinery/computer/mech_bay_power_console, +/turf/open/floor/circuit/green, +/area/station/science/robotics/mechbay) +"vtW" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/central/lesser) +"vuh" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/atmospherics_engine) +"vuj" = ( +/obj/effect/turf_decal/tile/red/anticorner/contrasted{ + dir = 4 + }, +/obj/item/kirbyplants/random, +/turf/open/floor/iron, +/area/station/hallway/primary/fore) +"vuq" = ( +/obj/effect/turf_decal/tile/purple/opposingcorners, +/obj/effect/landmark/event_spawn, +/turf/open/floor/iron/white, +/area/station/science/lobby) +"vuZ" = ( +/obj/structure/bookcase/random/reference, +/turf/open/floor/wood/parquet, +/area/station/medical/psychology) +"vvn" = ( +/obj/effect/decal/cleanable/oil, +/obj/machinery/light/small/directional/west, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/turf/open/floor/plating, +/area/station/maintenance/disposal) +"vvC" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/plating, +/area/station/service/theater) +"vvE" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/science/ordnance) +"vvG" = ( +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 8 + }, +/obj/structure/cable, +/obj/machinery/light/dim/directional/west, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/security/office) +"vvP" = ( +/obj/structure/rack, +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/decal/cleanable/dirt/dust, +/obj/item/toy/plush/lizard_plushie/green{ + name = "Makes-The-Robots" + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"vvY" = ( +/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/maintenance/department/medical) +"vwb" = ( +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/cargo/storage) +"vwd" = ( +/obj/machinery/newscaster/directional/south, +/turf/open/floor/engine, +/area/station/science/auxlab/firing_range) +"vwf" = ( +/obj/structure/girder, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"vwh" = ( +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) +"vwn" = ( +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/hallway/secondary/exit/departure_lounge) +"vwD" = ( +/obj/effect/landmark/start/clown, +/obj/structure/chair/stool/bar/directional/west, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/carpet, +/area/station/service/theater) +"vwK" = ( +/obj/machinery/light/directional/north, +/obj/effect/spawner/random/structure/table, +/obj/item/toy/nuke, +/turf/open/floor/iron/dark, +/area/station/command/corporate_showroom) +"vwL" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 8 + }, +/obj/machinery/camera/autoname/directional/west, +/turf/open/floor/iron/white, +/area/station/hallway/secondary/entry) +"vwZ" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"vxl" = ( +/obj/machinery/power/apc/auto_name/directional/south, +/obj/structure/cable, +/obj/machinery/computer/slot_machine{ + pixel_y = 2 + }, +/turf/open/floor/wood, +/area/station/commons/lounge) +"vxn" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 8 + }, +/obj/effect/mapping_helpers/airlock/access/any/medical/general, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/multi_tile/public/glass, +/obj/effect/mapping_helpers/airlock/autoname, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) +"vxx" = ( +/obj/effect/turf_decal/trimline/blue/filled/line, +/obj/structure/extinguisher_cabinet/directional/south, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/station/medical/exam_room) +"vxA" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/iron, +/area/station/commons/fitness/recreation) +"vxX" = ( +/turf/closed/mineral/random/stationside/asteroid/porus{ + mineralChance = 20 + }, +/area/station/asteroid) +"vyj" = ( +/obj/structure/stairs/east, +/obj/structure/railing, +/turf/open/floor/iron/dark/textured_large, +/area/station/science/xenobiology) +"vyp" = ( +/obj/effect/spawner/random/vending/colavend, +/obj/effect/turf_decal/siding/purple{ + dir = 9 + }, +/turf/open/floor/iron/white/herringbone, +/area/station/science/breakroom) +"vyL" = ( +/obj/structure/mop_bucket/janitorialcart, +/obj/item/reagent_containers/cup/bucket, +/obj/item/mop, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/service/janitor) +"vyO" = ( +/obj/machinery/chem_master, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 5 + }, +/obj/effect/turf_decal/trimline/yellow/filled/mid_joiner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/yellow/filled/mid_joiner{ + dir = 1 + }, +/obj/machinery/camera/autoname/directional/north{ + network = list("ss13","medbay") + }, +/turf/open/floor/iron/white/smooth_corner{ + dir = 8 + }, +/area/station/medical/pharmacy) +"vyZ" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/wood, +/area/station/maintenance/central/lesser) +"vzi" = ( +/obj/structure/window/reinforced/spawner/directional/west, +/obj/structure/window/reinforced/spawner/directional/north, +/obj/machinery/computer/shuttle/mining/common{ + pixel_x = 2 + }, +/turf/open/floor/plating, +/area/station/hallway/secondary/entry) +"vzj" = ( +/obj/effect/turf_decal/tile/purple/opposingcorners, +/turf/open/floor/iron/white, +/area/station/science/auxlab/firing_range) +"vzu" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/fore) +"vzC" = ( +/obj/machinery/door/airlock/maintenance_hatch, +/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance/departmental, +/turf/open/floor/iron, +/area/station/engineering/main) +"vzG" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/grass, +/area/station/medical/chemistry) +"vzP" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/thermomachine/freezer{ + dir = 1 + }, +/obj/effect/turf_decal/box/red, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark/smooth_large, +/area/station/science/ordnance) +"vzU" = ( +/obj/structure/cable, +/obj/effect/turf_decal/tile/red/opposingcorners, +/obj/effect/landmark/event_spawn, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/security) +"vzW" = ( +/obj/item/radio/intercom/directional/north, +/obj/structure/table/wood, +/obj/effect/spawner/random/food_or_drink/booze, +/turf/open/floor/carpet/blue, +/area/station/command/heads_quarters/cmo) +"vAa" = ( +/obj/machinery/disposal/bin, +/obj/effect/turf_decal/tile/red/diagonal_edge, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/security/warden) +"vAj" = ( +/obj/structure/table, +/obj/item/stack/sheet/iron/fifty{ + pixel_y = 7; + pixel_x = -7 + }, +/obj/item/stack/sheet/plasteel{ + amount = 10; + pixel_y = 7; + pixel_x = 7 + }, +/obj/effect/turf_decal/trimline/yellow/filled/line, +/turf/open/floor/iron, +/area/station/engineering/storage) +"vAm" = ( +/obj/structure/lattice/catwalk, +/obj/effect/decal/remains/human, +/turf/open/openspace, +/area/station/engineering/break_room) +"vAo" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/obj/structure/railing{ + dir = 10 + }, +/turf/open/floor/engine, +/area/station/hallway/secondary/entry) +"vAp" = ( +/turf/closed/wall, +/area/station/commons/fitness/recreation) +"vAs" = ( +/obj/machinery/door/airlock/maintenance_hatch, +/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 4 + }, +/turf/open/misc/asteroid, +/area/station/science/research) +"vAu" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/security/breakroom) +"vAB" = ( +/turf/open/openspace/telecomms, +/area/station/ai_monitored/turret_protected/ai) +"vAD" = ( +/obj/machinery/door/airlock/multi_tile/public/glass{ + name = "Dormitories" + }, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/commons/locker) +"vAE" = ( +/obj/structure/closet/wardrobe/green, +/obj/effect/landmark/start/hangover/closet, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/delivery, +/turf/open/floor/iron/dark, +/area/station/commons/locker) +"vAY" = ( +/obj/machinery/light/directional/south, +/obj/effect/turf_decal/tile/neutral, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"vBp" = ( +/obj/effect/spawner/random/engineering/tracking_beacon, +/turf/open/floor/iron, +/area/station/ai_monitored/command/storage/eva) +"vBs" = ( +/obj/machinery/holopad, +/obj/effect/landmark/event_spawn, +/obj/effect/turf_decal/box, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/aisat/foyer) +"vBD" = ( +/obj/structure/chair/office/light{ + dir = 1 + }, +/turf/open/floor/iron/white/smooth_half{ + dir = 8 + }, +/area/station/science/xenobiology) +"vBV" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/spawner/random/trash/garbage{ + spawn_scatter_radius = 1 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/maintenance/department/engine) +"vCw" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/structure/closet/boxinggloves, +/obj/effect/landmark/start/hangover/closet, +/turf/open/floor/iron, +/area/station/commons/fitness/recreation) +"vCy" = ( +/obj/effect/turf_decal/stripes, +/obj/machinery/light/directional/north, +/obj/effect/spawner/random/entertainment/arcade, +/turf/open/floor/iron/dark/textured, +/area/station/hallway/secondary/exit/departure_lounge) +"vCI" = ( +/obj/structure/stairs/north, +/obj/structure/railing{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/command/corporate_showroom) +"vCL" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/service/hydroponics) +"vCQ" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/white, +/area/station/command/heads_quarters/cmo) +"vDa" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/sand/plating, +/turf/open/floor/plating, +/area/station/asteroid) +"vDn" = ( +/obj/machinery/camera/autoname/directional/north{ + network = list("ss13","rd","xeno") + }, +/turf/open/openspace, +/area/station/science/xenobiology) +"vDw" = ( +/obj/structure/window/reinforced/spawner/directional/west, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/engine, +/area/station/science/xenobiology) +"vDK" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/aisat/foyer) +"vEh" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/item/stack/sheet/iron, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/hallway/primary/starboard) +"vEm" = ( +/obj/structure/closet/crate/coffin, +/turf/open/floor/plating, +/area/station/service/chapel/funeral) +"vEp" = ( +/obj/machinery/light/directional/east, +/obj/effect/turf_decal/tile/neutral, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"vEq" = ( +/obj/structure/cable, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/command/heads_quarters/ce) +"vEu" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored/plasma_output, +/turf/open/floor/engine/plasma, +/area/station/engineering/atmos) +"vEE" = ( +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/visible/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/dark/visible, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) +"vEF" = ( +/obj/structure/displaycase/captain{ + pixel_y = 5 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/machinery/power/apc/auto_name/directional/south, +/obj/structure/cable, +/obj/machinery/camera/autoname/directional/west, +/turf/open/floor/carpet/royalblue, +/area/station/command/heads_quarters/captain/private) +"vEL" = ( +/obj/effect/turf_decal/trimline/blue/filled/corner{ + dir = 8 + }, +/obj/effect/landmark/start/medical_doctor, +/turf/open/floor/iron/white, +/area/station/medical/treatment_center) +"vES" = ( +/obj/item/radio/intercom/directional/east, +/obj/effect/turf_decal/tile/purple/half/contrasted{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/science/lobby) +"vEX" = ( +/obj/structure/table/reinforced, +/obj/machinery/computer/security/telescreen/entertainment/directional/north, +/obj/machinery/microwave{ + pixel_y = 6 + }, +/obj/effect/spawner/random/food_or_drink/donkpockets, +/obj/effect/turf_decal/tile/red/anticorner/contrasted{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/turf/open/floor/iron/half, +/area/station/security/breakroom) +"vEZ" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/engineering/lobby) +"vFf" = ( +/obj/effect/turf_decal/tile/dark_blue/anticorner/contrasted{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/hallway/secondary/command) +"vFg" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/plating, +/area/station/maintenance/central/greater) +"vFl" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"vFq" = ( +/obj/structure/ladder, +/obj/effect/turf_decal/sand/plating, +/turf/open/floor/plating, +/area/station/asteroid) +"vFr" = ( +/obj/machinery/light/dim/directional/west, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/service/chapel/office) +"vFs" = ( +/obj/effect/spawner/structure/window, +/obj/effect/mapping_helpers/damaged_window, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"vFy" = ( +/obj/structure/cable/multilayer/multiz, +/obj/machinery/light/small/directional/north, +/turf/open/floor/plating, +/area/station/maintenance/central/lesser) +"vFz" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/structure/table/reinforced, +/obj/machinery/light/small/dim/directional/east, +/obj/item/coin/titanium, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/aisat/foyer) +"vFD" = ( +/obj/machinery/door/window/brigdoor/security/cell/left/directional/west{ + id = "Cell 4"; + name = "Cell 4" + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/security/brig) +"vFH" = ( +/obj/effect/turf_decal/trimline/blue/line{ + dir = 9 + }, +/obj/effect/turf_decal/trimline/blue/arrow_ccw{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/station/medical/medbay/lobby) +"vFM" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/plating, +/area/station/maintenance/port/greater) +"vFT" = ( +/obj/structure/toilet{ + dir = 4 + }, +/obj/effect/landmark/start/hangover, +/obj/effect/spawner/random/trash/graffiti{ + pixel_x = -32; + spawn_loot_chance = 50 + }, +/obj/machinery/light/small/dim/directional/north, +/obj/machinery/button/door/directional/south{ + id = "u2"; + normaldoorcontrol = 1; + specialfunctions = 4; + name = "privacy bolt control" + }, +/turf/open/floor/iron/freezer, +/area/station/commons/toilet/restrooms) +"vFY" = ( +/turf/open/floor/wood, +/area/station/service/cafeteria) +"vGn" = ( +/turf/closed/wall, +/area/station/medical/patients_rooms/room_a) +"vGs" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/light/small/directional/north, +/turf/open/floor/iron/textured_edge, +/area/station/maintenance/department/medical/central) +"vGv" = ( +/obj/structure/broken_flooring/singular, +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/table_frame, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"vGy" = ( +/obj/structure/transit_tube/crossing, +/obj/structure/lattice, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/space/basic, +/area/space/nearstation) +"vGz" = ( +/obj/structure/bed/dogbed/ian, +/mob/living/basic/pet/dog/corgi/ian, +/obj/effect/turf_decal/siding/dark_blue{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/command/heads_quarters/hop) +"vGJ" = ( +/obj/effect/spawner/random/structure/grille, +/obj/effect/spawner/random/structure/girder, +/turf/open/floor/plating, +/area/station/maintenance/department/engine) +"vGZ" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners{ + dir = 1 + }, +/obj/item/radio/intercom/directional/north, +/obj/machinery/suit_storage_unit/rd, +/turf/open/floor/iron/dark, +/area/station/command/heads_quarters/rd) +"vHa" = ( +/obj/structure/closet{ + name = "plasmaman supply closet" + }, +/obj/item/tank/internals/plasmaman/full, +/obj/item/tank/internals/plasmaman/full, +/obj/item/tank/internals/plasmaman/belt/full, +/obj/item/tank/internals/plasmaman/belt/full, +/obj/item/toy/plush/plasmamanplushie, +/obj/effect/turf_decal/bot, +/turf/open/floor/iron/textured, +/area/station/engineering/lobby) +"vHf" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/obj/effect/turf_decal/tile/yellow, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) +"vHh" = ( +/obj/structure/sign/warning/xeno_mining/directional/south, +/obj/effect/spawner/random/structure/grille, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"vHi" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 8 + }, +/obj/structure/chair{ + name = "Judge"; + dir = 8 + }, +/turf/open/floor/wood/tile, +/area/station/security/courtroom) +"vHA" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/ai_monitored/turret_protected/aisat_interior) +"vHI" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/delivery, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 1 + }, +/obj/effect/turf_decal/siding/thinplating/dark, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/iron/checker, +/area/station/science/research) +"vHL" = ( +/obj/structure/extinguisher_cabinet/directional/north, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/wood, +/area/station/service/theater) +"vHY" = ( +/obj/effect/landmark/event_spawn, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/exit/departure_lounge) +"vIi" = ( +/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/visible, +/obj/effect/turf_decal/tile/yellow{ + dir = 8 + }, +/obj/machinery/light_switch/directional/south, +/turf/open/floor/iron/dark/corner, +/area/station/engineering/atmos/pumproom) +"vIt" = ( +/obj/effect/mapping_helpers/dead_body_placer{ + bodycount = 1 + }, +/obj/effect/turf_decal/trimline/neutral/filled/warning{ + dir = 6 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/medical/morgue) +"vIB" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 + }, +/turf/open/floor/iron/white, +/area/station/medical/chemistry/minisat) +"vIO" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/department/bridge) +"vJf" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/obj/effect/landmark/generic_maintenance_landmark, +/turf/open/floor/iron, +/area/station/maintenance/department/medical/central) +"vJE" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/white, +/area/station/science/research) +"vJF" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/turf/open/floor/iron/white/smooth_corner, +/area/station/medical/pharmacy) +"vJG" = ( +/obj/machinery/ai_slipper{ + uses = 8 + }, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/structure/cable, +/obj/effect/turf_decal/siding/purple{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/white, +/area/station/ai_monitored/turret_protected/ai_upload_foyer) +"vKt" = ( +/obj/structure/cable, +/obj/machinery/door/airlock/engineering{ + name = "Relay Access" + }, +/obj/effect/mapping_helpers/airlock/access/all/command/minisat, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/aisat/teleporter) +"vKx" = ( +/obj/structure/table/wood, +/obj/item/storage/box/coffeepack, +/obj/item/trash/sosjerky, +/turf/open/floor/carpet, +/area/station/command/corporate_showroom) +"vKM" = ( +/obj/structure/barricade/wooden/crude, +/turf/open/misc/asteroid, +/area/station/maintenance/central/greater) +"vKV" = ( +/obj/machinery/atmospherics/components/unary/passive_vent{ + dir = 8 + }, +/obj/structure/lattice, +/turf/open/space/basic, +/area/space/nearstation) +"vKY" = ( +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"vLs" = ( +/obj/effect/turf_decal/sand/plating, +/obj/structure/fence, +/turf/open/floor/plating, +/area/station/asteroid) +"vLx" = ( +/obj/structure/rack, +/obj/item/reagent_containers/cup/bottle/iodine{ + pixel_x = -6 + }, +/obj/item/reagent_containers/cup/bottle/iron, +/obj/item/reagent_containers/cup/bottle/lithium{ + pixel_x = 6 + }, +/turf/open/floor/iron/dark/textured_edge, +/area/station/medical/pharmacy) +"vLy" = ( +/obj/structure/railing/corner{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/white, +/area/station/science/research) +"vLH" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) +"vLN" = ( +/obj/structure/table, +/obj/effect/turf_decal/tile/red/anticorner/contrasted{ + dir = 8 + }, +/obj/item/electropack, +/obj/machinery/light_switch/directional/west, +/turf/open/floor/iron/dark, +/area/station/security/execution/education) +"vLQ" = ( +/obj/effect/turf_decal/tile/red/anticorner/contrasted{ + dir = 4 + }, +/obj/structure/rack, +/obj/item/storage/belt/utility/full/engi, +/turf/open/floor/iron, +/area/station/security/office) +"vMb" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/turf/open/floor/wood, +/area/station/commons/lounge) +"vMm" = ( +/obj/machinery/atmospherics/pipe/multiz/supply/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/multiz/scrubbers/visible/layer2{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/department/medical) +"vMA" = ( +/obj/structure/railing{ + dir = 9 + }, +/turf/open/floor/carpet, +/area/station/service/theater) +"vMC" = ( +/obj/effect/turf_decal/tile/dark_red/opposingcorners, +/obj/machinery/door/airlock{ + name = "Bar Storage" + }, +/obj/effect/mapping_helpers/airlock/access/all/service/bar, +/obj/machinery/door/firedoor, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/service/bar) +"vME" = ( +/obj/machinery/door/airlock/engineering/glass{ + name = "Break Room" + }, +/obj/effect/mapping_helpers/airlock/access/any/engineering/general, +/obj/structure/cable, +/obj/effect/turf_decal/tile/yellow/fourcorners, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/mapping_helpers/airlock/access/any/engineering/construction, +/turf/open/floor/iron, +/area/station/engineering/break_room) +"vMN" = ( +/obj/structure/flora/coconuts, +/turf/open/floor/grass, +/area/station/medical/chemistry) +"vNc" = ( +/obj/machinery/modular_computer/preset/id{ + dir = 1 + }, +/obj/machinery/button/flasher{ + id = "hopflash"; + pixel_x = 24; + pixel_y = 8 + }, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 4 + }, +/obj/machinery/requests_console/auto_name/directional/south, +/obj/effect/mapping_helpers/requests_console/information, +/obj/effect/mapping_helpers/requests_console/assistance, +/obj/effect/mapping_helpers/requests_console/announcement, +/turf/open/floor/iron/dark, +/area/station/command/heads_quarters/hop) +"vNd" = ( +/obj/effect/turf_decal/tile/yellow{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/iron/dark/corner, +/area/station/engineering/atmos/upper) +"vNg" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/blood/old, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/aisat/uppernorth) +"vNk" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 8 + }, +/obj/machinery/firealarm/directional/west, +/turf/open/floor/iron, +/area/station/engineering/main) +"vNl" = ( +/obj/machinery/atmospherics/pipe/smart/simple/dark/visible{ + dir = 10 + }, +/obj/structure/railing/corner, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/science/ordnance) +"vNB" = ( +/obj/machinery/vending/tool, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/camera/autoname/directional/east, +/turf/open/floor/iron, +/area/station/commons/storage/primary) +"vNE" = ( +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/security/execution/education) +"vNH" = ( +/obj/structure/stairs/north, +/obj/structure/railing{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"vNM" = ( +/obj/structure/cable, +/obj/effect/turf_decal/siding/purple, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/firealarm/directional/south, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/white/smooth_large, +/area/station/science/research) +"vNT" = ( +/obj/machinery/computer/slot_machine, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/grimy, +/area/station/maintenance/central/lesser) +"vNY" = ( +/obj/machinery/firealarm/directional/east, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/large, +/area/station/service/hydroponics/garden) +"vNZ" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"vOa" = ( +/obj/structure/ladder, +/turf/open/floor/plating, +/area/station/maintenance/central/greater) +"vOe" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/command/corporate_showroom) +"vOg" = ( +/obj/structure/broken_flooring/pile, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/hallway/primary/central) +"vOs" = ( +/obj/machinery/airalarm/directional/south, +/obj/structure/tank_holder/extinguisher, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 10 + }, +/turf/open/floor/iron/white, +/area/station/medical/treatment_center) +"vOu" = ( +/turf/closed/wall, +/area/station/cargo/warehouse/upper) +"vOH" = ( +/obj/structure/railing{ + dir = 1 + }, +/obj/structure/cable, +/turf/open/floor/catwalk_floor/iron_dark/telecomms, +/area/station/ai_monitored/turret_protected/ai) +"vOT" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/commons/locker) +"vPe" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/table, +/obj/item/reagent_containers/cup/mortar, +/obj/item/cigbutt/cigarbutt{ + pixel_x = 4; + pixel_y = 5 + }, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 + }, +/turf/open/floor/iron/white, +/area/station/medical/chemistry/minisat) +"vPn" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 1 + }, +/turf/open/floor/wood/tile, +/area/station/service/bar) +"vPq" = ( +/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/obj/machinery/door/airlock/engineering/glass{ + name = "Supermatter Engine Room" + }, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/machinery/firealarm/directional/south, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable/layer1, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"vPt" = ( +/turf/closed/mineral/random/stationside/asteroid/porus{ + mineralChance = 20 + }, +/area/station/maintenance/disposal/incinerator) +"vPF" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/spawner/random/structure/grille, +/obj/effect/spawner/random/structure/girder, +/turf/open/floor/plating, +/area/station/maintenance/department/engine) +"vPG" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"vPN" = ( +/obj/structure/urinal/directional/north, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/freezer, +/area/station/commons/toilet/restrooms) +"vPP" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/junction/yjunction, +/turf/open/floor/iron, +/area/station/security/office) +"vPT" = ( +/obj/structure/cable, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/turf/open/floor/iron, +/area/station/engineering/gravity_generator) +"vQa" = ( +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/cargo/storage) +"vQb" = ( +/obj/structure/grille, +/turf/open/floor/plating, +/area/station/engineering/supermatter/room) +"vQf" = ( +/obj/machinery/suit_storage_unit/standard_unit, +/obj/machinery/door/window/brigdoor/right/directional/east{ + req_access = list("command") + }, +/obj/effect/turf_decal/bot, +/obj/machinery/light/small/dim/directional/west, +/turf/open/floor/iron, +/area/station/command/bridge) +"vQn" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/engine, +/area/station/medical/chemistry) +"vQw" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/shutters{ + name = "Countertheft Shutters"; + id = "boutique"; + dir = 4 + }, +/turf/open/floor/plating, +/area/station/cargo/boutique) +"vQB" = ( +/turf/closed/wall, +/area/station/cargo/boutique) +"vQP" = ( +/obj/machinery/light/dim/directional/east, +/obj/effect/turf_decal/tile/dark_blue/half/contrasted{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/command/bridge) +"vQT" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/sign/poster/official/moth_hardhat/directional/north, +/obj/structure/table, +/obj/item/storage/toolbox/emergency, +/turf/open/floor/iron, +/area/station/hallway/secondary/exit/departure_lounge) +"vRi" = ( +/mob/living/basic/bot/cleanbot/medbay, +/obj/effect/turf_decal/trimline/blue/filled/line, +/turf/open/floor/iron/white, +/area/station/medical/storage) +"vRm" = ( +/obj/machinery/suit_storage_unit/standard_unit, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/structure/extinguisher_cabinet/directional/east, +/obj/effect/turf_decal/delivery, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/command/storage/eva) +"vRt" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/wood, +/area/station/service/library) +"vRw" = ( +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 4 + }, +/obj/machinery/door/airlock/hatch{ + name = "Telecomms Server Room" + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/tcoms, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "antesat" + }, +/obj/structure/cable/layer3, +/turf/open/floor/iron/dark/telecomms, +/area/station/tcommsat/server) +"vRA" = ( +/turf/open/openspace, +/area/station/science/research) +"vRC" = ( +/obj/effect/turf_decal/tile/red/anticorner/contrasted{ + dir = 8 + }, +/obj/structure/chair/office{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark_red/filled/warning, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/hallway/secondary/exit/departure_lounge) +"vRJ" = ( +/obj/effect/spawner/random/entertainment/arcade{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/commons/fitness/recreation) +"vRP" = ( +/obj/machinery/door/airlock/maintenance_hatch, +/obj/effect/mapping_helpers/airlock/access/any/science/general, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/plating, +/area/station/science/research) +"vRZ" = ( +/obj/effect/turf_decal/siding/red{ + dir = 4 + }, +/obj/effect/turf_decal/tile/dark_red/opposingcorners, +/turf/open/floor/iron/dark, +/area/station/science/robotics/lab) +"vSd" = ( +/obj/structure/lattice/catwalk, +/obj/structure/railing{ + dir = 4 + }, +/turf/open/space/basic, +/area/space/nearstation) +"vSj" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/plating, +/area/station/maintenance/port/greater) +"vSn" = ( +/obj/structure/noticeboard/directional/south, +/turf/open/floor/iron/chapel{ + dir = 8 + }, +/area/station/service/chapel) +"vSt" = ( +/obj/structure/railing/corner{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/cargo/storage) +"vSv" = ( +/obj/structure/sign/warning/directional/north, +/obj/effect/turf_decal/tile/purple/half/contrasted{ + dir = 1 + }, +/turf/open/floor/iron/white, +/area/station/science/lobby) +"vSy" = ( +/obj/structure/chair/sofa/bench{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 4 + }, +/obj/machinery/camera/autoname/directional/west, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/exit/departure_lounge) +"vSH" = ( +/obj/machinery/atmospherics/components/binary/pump{ + name = "Plasma to Pure" + }, +/obj/effect/turf_decal/tile/yellow{ + dir = 4 + }, +/turf/open/floor/iron/dark/corner{ + dir = 1 + }, +/area/station/engineering/atmos) +"vST" = ( +/obj/effect/turf_decal/tile/brown/half/contrasted, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/cargo/storage) +"vTd" = ( +/obj/effect/turf_decal/sand/plating, +/obj/effect/turf_decal/stripes/asteroid/corner{ + dir = 8 + }, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"vTp" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/duct, +/turf/open/floor/iron/showroomfloor, +/area/station/medical/coldroom) +"vTt" = ( +/obj/structure/marker_beacon/burgundy, +/turf/open/floor/fakebasalt, +/area/station/maintenance/department/medical) +"vTx" = ( +/obj/structure/cable, +/obj/effect/turf_decal/tile/neutral, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"vTN" = ( +/obj/effect/turf_decal/tile/brown/half/contrasted, +/turf/open/floor/iron, +/area/station/cargo/lobby) +"vTO" = ( +/obj/structure/table, +/obj/item/clothing/gloves/color/fyellow, +/obj/item/stack/cable_coil, +/obj/effect/spawner/random{ + loot = list(/obj/item/storage/belt/utility=1); + spawn_loot_chance = 50 + }, +/turf/open/floor/iron, +/area/station/commons/storage/primary) +"vTU" = ( +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron/chapel{ + dir = 1 + }, +/area/station/service/chapel) +"vUa" = ( +/obj/structure/reagent_dispensers/watertank, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/service/janitor) +"vUb" = ( +/obj/machinery/portable_atmospherics/canister/oxygen, +/obj/effect/turf_decal/bot, +/turf/open/floor/iron/large, +/area/station/engineering/atmos/storage/gas) +"vUh" = ( +/turf/open/floor/engine, +/area/station/engineering/supermatter) +"vUj" = ( +/obj/structure/cable, +/obj/machinery/power/solar{ + id = "aft"; + name = "Aft Solar Array" + }, +/turf/open/floor/iron/solarpanel/airless, +/area/station/solars/port) +"vUn" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/turf/open/floor/iron, +/area/station/security/warden) +"vUo" = ( +/obj/machinery/power/apc/auto_name/directional/north, +/obj/structure/cable, +/turf/open/floor/carpet, +/area/station/medical/psychology) +"vUr" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/engineering/atmos/storage/gas) +"vUO" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/showroomfloor, +/area/station/engineering/main) +"vVc" = ( +/obj/effect/landmark/start/ai/secondary, +/obj/machinery/door/window/brigdoor/right/directional/south{ + name = "Secondary AI Core Access"; + req_access = list("ai_upload"); + pixel_y = -4 + }, +/obj/machinery/flasher/directional/west{ + id = "AI"; + pixel_y = -8 + }, +/obj/item/radio/intercom/directional/north{ + pixel_x = -27; + frequency = 1447; + freerange = 1; + on = 0; + name = "Private Channel" + }, +/obj/item/radio/intercom/directional/north{ + pixel_x = 27; + name = "Common Channel"; + freerange = 1; + listening = 0 + }, +/turf/open/floor/circuit/green, +/area/station/ai_monitored/turret_protected/ai) +"vVe" = ( +/obj/structure/lattice/catwalk, +/obj/structure/cable, +/obj/structure/railing{ + dir = 10 + }, +/turf/open/openspace, +/area/station/security/prison/garden) +"vVg" = ( +/obj/effect/turf_decal/siding/wood/end{ + dir = 1 + }, +/obj/effect/spawner/random/structure/closet_private, +/obj/item/radio/intercom/directional/east, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/wood/tile, +/area/station/commons/dorms) +"vVj" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/white, +/area/station/medical/chemistry/minisat) +"vVk" = ( +/obj/effect/turf_decal/siding/purple{ + dir = 1 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/turf/open/floor/iron/white/herringbone, +/area/station/science/breakroom) +"vVl" = ( +/obj/machinery/door/airlock/public/glass{ + name = "Fore Primary Hallway" + }, +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/fore) +"vVp" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"vVr" = ( +/obj/machinery/door/airlock/command{ + name = "Head of Personnel's Quarters" + }, +/obj/effect/turf_decal/siding/dark_blue{ + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/access/any/command/hop, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "bridgec" + }, +/turf/open/floor/iron/dark, +/area/station/command/heads_quarters/hop) +"vVs" = ( +/obj/effect/turf_decal/tile/yellow, +/obj/structure/sign/poster/official/random/directional/south, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) +"vVC" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/structure/railing{ + dir = 1 + }, +/turf/open/floor/engine, +/area/station/hallway/secondary/entry) +"vVW" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/supply/maintenance, +/obj/effect/mapping_helpers/airlock/abandoned, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"vWh" = ( +/obj/structure/lattice/catwalk, +/turf/open/openspace, +/area/station/engineering/atmospherics_engine) +"vWo" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"vWx" = ( +/obj/structure/barricade/wooden, +/turf/open/misc/asteroid, +/area/station/maintenance/port/greater) +"vWF" = ( +/obj/effect/turf_decal/tile/red/half/contrasted, +/obj/machinery/airalarm/directional/south, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/security) +"vWH" = ( +/obj/item/radio/intercom/directional/south, +/turf/open/floor/iron/dark/textured, +/area/station/medical/morgue) +"vWI" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 1 + }, +/obj/machinery/light/cold/directional/north, +/turf/open/floor/iron/white, +/area/station/medical/storage) +"vWK" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/aisat/foyer) +"vWN" = ( +/obj/structure/sign/warning/electric_shock/directional/north, +/obj/structure/rack, +/obj/item/wrench, +/turf/open/misc/asteroid, +/area/station/maintenance/department/science) +"vWY" = ( +/obj/effect/turf_decal/siding, +/obj/structure/table, +/obj/item/storage/medkit/regular, +/obj/machinery/camera/autoname/directional/north, +/turf/open/floor/iron/large, +/area/station/commons/locker) +"vXi" = ( +/obj/machinery/gulag_teleporter, +/obj/machinery/light/dim/directional/east, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 4 + }, +/turf/open/floor/iron/textured, +/area/station/security/processing) +"vXp" = ( +/obj/structure/table/wood, +/obj/machinery/microwave{ + pixel_x = 1; + pixel_y = 6 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron, +/area/station/service/cafeteria) +"vXG" = ( +/obj/effect/turf_decal/tile/yellow{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/simple/green/visible, +/turf/open/floor/iron/dark/corner{ + dir = 1 + }, +/area/station/engineering/atmos/upper) +"vXS" = ( +/obj/structure/broken_flooring/side, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"vYg" = ( +/obj/effect/turf_decal/bot/right, +/turf/open/floor/engine, +/area/station/engineering/atmospherics_engine) +"vYv" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/command/corporate_showroom) +"vYz" = ( +/turf/closed/wall/r_wall, +/area/station/medical/chemistry/minisat) +"vYL" = ( +/obj/machinery/computer/atmos_control/nitrous_tank, +/obj/effect/turf_decal/tile/yellow{ + dir = 4 + }, +/turf/open/floor/iron/dark/corner{ + dir = 1 + }, +/area/station/engineering/atmos) +"vYQ" = ( +/obj/structure/bodycontainer/morgue, +/obj/item/radio/intercom/directional/west, +/turf/open/floor/iron/dark/textured, +/area/station/medical/morgue) +"vZb" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/white, +/area/station/medical/chemistry/minisat) +"vZj" = ( +/obj/effect/decal/cleanable/oil, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/structure/cable, +/obj/item/reagent_containers/spray/cleaner, +/turf/open/floor/plating, +/area/station/medical/virology) +"vZn" = ( +/obj/structure/closet/secure_closet/personal, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/delivery, +/obj/structure/sign/poster/official/random/directional/north, +/turf/open/floor/iron/dark, +/area/station/commons/locker) +"vZu" = ( +/obj/machinery/atmospherics/components/tank/air{ + piping_layer = 4 + }, +/obj/effect/turf_decal/tile/green/half/contrasted{ + dir = 1 + }, +/turf/open/floor/iron/white, +/area/station/medical/virology) +"vZF" = ( +/obj/structure/dresser, +/obj/effect/decal/cleanable/dirt, +/obj/item/toy/figure/mime{ + pixel_y = 12 + }, +/turf/open/floor/plating, +/area/station/service/theater) +"vZL" = ( +/obj/machinery/holopad, +/obj/effect/turf_decal/box/white{ + color = "#52B4E9" + }, +/turf/open/floor/iron/white/smooth_large, +/area/station/medical/surgery/theatre) +"vZP" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/window/brigdoor/left/directional/east{ + name = "Security Desk"; + req_access = list("security") + }, +/obj/item/hand_labeler, +/turf/open/floor/iron, +/area/station/security/brig/entrance) +"vZX" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark/side{ + dir = 8 + }, +/area/station/command/meeting_room) +"wad" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/turf/open/floor/engine, +/area/station/command/corporate_dock) +"wag" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/maintenance/department/engine) +"waj" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/white, +/area/station/medical/treatment_center) +"war" = ( +/obj/structure/table/wood, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/item/food/grown/poppy, +/obj/item/food/grown/poppy, +/obj/item/food/grown/poppy, +/obj/item/food/grown/poppy, +/obj/item/food/grown/poppy, +/obj/item/food/grown/poppy, +/obj/structure/sign/plaques/kiddie/badger{ + pixel_x = 32 + }, +/turf/open/floor/carpet, +/area/station/service/chapel/funeral) +"wat" = ( +/obj/machinery/door/firedoor, +/obj/structure/cable, +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/medical/treatment_center) +"waJ" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/security/interrogation) +"waS" = ( +/obj/machinery/door/airlock/maintenance_hatch, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 8 + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/hallway/primary/central) +"waT" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/engine, +/area/station/medical/chemistry) +"waZ" = ( +/obj/machinery/door/airlock/research/glass{ + name = "Chemistry Minisat" + }, +/obj/effect/mapping_helpers/airlock/access/all/medical/chemistry, +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 8 + }, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/white, +/area/station/medical/chemistry/minisat) +"wbf" = ( +/obj/effect/turf_decal/tile/dark_blue/half/contrasted, +/turf/open/floor/iron/dark, +/area/station/command/bridge) +"wbC" = ( +/obj/effect/turf_decal/siding/dark_blue{ + dir = 1 + }, +/obj/machinery/light/directional/east, +/turf/open/floor/carpet, +/area/station/command/corporate_showroom) +"wbE" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/security/interrogation) +"wbM" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/iron/white/smooth_large, +/area/station/medical/medbay/lobby) +"wbT" = ( +/obj/effect/turf_decal/sand/plating, +/obj/structure/rack, +/obj/item/storage/box/drinkingglasses, +/turf/open/floor/plating, +/area/station/maintenance/central/greater) +"wca" = ( +/obj/structure/bodycontainer/morgue, +/obj/structure/window/reinforced/spawner/directional/north, +/obj/machinery/newscaster/directional/west, +/turf/open/floor/iron/dark/textured, +/area/station/medical/morgue) +"wcb" = ( +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 8 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/fore) +"wcm" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/light/cold/directional/north, +/obj/structure/table, +/obj/item/stack/cable_coil, +/obj/item/stack/cable_coil{ + pixel_y = 7 + }, +/obj/item/multitool, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/command/storage/satellite) +"wcp" = ( +/turf/open/floor/carpet, +/area/station/command/corporate_showroom) +"wcC" = ( +/obj/machinery/portable_atmospherics/scrubber, +/obj/machinery/atmospherics/components/unary/portables_connector/visible/layer2{ + dir = 4 + }, +/obj/effect/turf_decal/tile/yellow{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) +"wcH" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/conveyor_switch/oneway{ + id = "hoptroll" + }, +/turf/open/floor/plating/reinforced, +/area/station/command/emergency_closet) +"wdc" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/engineering/gravity_generator) +"wdm" = ( +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/hallway/secondary/exit/departure_lounge) +"wds" = ( +/obj/machinery/door/airlock/mining/glass{ + name = "Ore Refinery" + }, +/obj/effect/mapping_helpers/airlock/access/all/supply/mining, +/obj/effect/turf_decal/sand/plating, +/turf/open/floor/plating, +/area/station/cargo/miningoffice) +"wdu" = ( +/obj/structure/table, +/obj/item/taperecorder, +/obj/item/radio/intercom/directional/south{ + frequency = 1423; + name = "Interrogation Intercom"; + broadcasting = 1; + listening = 0 + }, +/turf/open/floor/iron/dark/textured, +/area/station/security/interrogation) +"wdx" = ( +/obj/structure/broken_flooring/side{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"wdz" = ( +/obj/structure/chair/office{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured, +/area/station/science/robotics/lab) +"wdI" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 5 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/yellow/filled/mid_joiner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/yellow/filled/mid_joiner{ + dir = 1 + }, +/turf/open/floor/iron/white/smooth_large, +/area/station/medical/chemistry/minisat) +"wdO" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment, +/obj/structure/sign/poster/random/directional/west, +/turf/open/floor/plating, +/area/station/maintenance/department/medical) +"wdV" = ( +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"wea" = ( +/obj/structure/cable, +/obj/machinery/airalarm/directional/north, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/catwalk_floor/flat_white, +/area/station/science/xenobiology) +"weg" = ( +/obj/effect/turf_decal/tile/brown/anticorner/contrasted{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/cargo/sorting) +"weu" = ( +/obj/structure/lattice/catwalk, +/obj/structure/cable, +/turf/open/space/basic, +/area/station/solars/port/aft) +"wex" = ( +/obj/structure/railing/corner{ + dir = 4 + }, +/obj/machinery/light/small/dim/directional/south, +/obj/effect/turf_decal/tile/yellow, +/turf/open/floor/iron/dark/corner{ + dir = 8 + }, +/area/station/engineering/atmos/storage/gas) +"weB" = ( +/obj/structure/railing/corner{ + dir = 8 + }, +/obj/structure/railing/corner{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"weD" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/security/prison) +"weK" = ( +/obj/effect/spawner/random/structure/chair_comfy{ + dir = 1 + }, +/turf/open/floor/iron/white, +/area/station/science/ordnance/testlab) +"weR" = ( +/obj/effect/turf_decal/tile/red/half/contrasted, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/station/security/warden) +"wfi" = ( +/obj/effect/turf_decal/stripes{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable/layer1, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"wfl" = ( +/obj/effect/landmark/atmospheric_sanity/ignore_area, +/turf/closed/wall/r_wall, +/area/station/ai_monitored/command/storage/satellite) +"wfs" = ( +/obj/structure/cable, +/obj/machinery/button/door/directional/west{ + id = "maintbridge"; + name = "Shutter Control"; + pixel_y = 24 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"wfy" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/kitchen, +/area/station/service/kitchen) +"wfz" = ( +/obj/structure/lattice/catwalk, +/obj/structure/marker_beacon/burgundy, +/turf/open/space/basic, +/area/space/nearstation) +"wfN" = ( +/obj/machinery/atmospherics/components/unary/bluespace_sender{ + initialize_directions = 4; + dir = 4 + }, +/turf/open/floor/iron/textured, +/area/station/engineering/atmos) +"wfU" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/simple/green/visible{ + dir = 6 + }, +/turf/open/floor/plating, +/area/station/maintenance/department/science) +"wfW" = ( +/obj/structure/lattice/catwalk, +/obj/item/food/pie/cream, +/turf/open/openspace, +/area/station/engineering/break_room) +"wgk" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/engineering/gravity_generator) +"wgm" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/wood/parquet, +/area/station/cargo/boutique) +"wgw" = ( +/obj/structure/cable, +/obj/machinery/navbeacon{ + codes_txt = "patrol;next_patrol=P14-Central-Primary"; + location = "P13-Central-Primary" + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"wgK" = ( +/obj/effect/turf_decal/box/corners{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/engineering/atmos) +"whn" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/trash/mess, +/turf/open/floor/iron, +/area/station/commons/vacant_room/commissary) +"whq" = ( +/obj/structure/railing/corner, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/iron/dark/smooth_large, +/area/station/command/meeting_room) +"whx" = ( +/obj/effect/spawner/random/structure/tank_holder, +/obj/structure/broken_flooring/side/directional/east, +/turf/open/floor/plating, +/area/station/maintenance/department/medical) +"whz" = ( +/obj/machinery/chem_dispenser, +/obj/item/radio/intercom/directional/north, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/yellow/filled/mid_joiner{ + dir = 1 + }, +/turf/open/floor/iron/white/smooth_edge{ + dir = 1 + }, +/area/station/medical/pharmacy) +"whG" = ( +/obj/structure/table/reinforced/rglass, +/obj/item/folder/blue, +/obj/item/computer_disk/medical, +/obj/item/stamp/head/cmo, +/turf/open/floor/holofloor/dark, +/area/station/command/heads_quarters/cmo) +"whM" = ( +/obj/machinery/ntnet_relay, +/turf/open/floor/circuit/green/telecomms/mainframe, +/area/station/tcommsat/server) +"whY" = ( +/obj/machinery/door/airlock/grunge{ + name = "Prison Workshop" + }, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/security/prison/safe) +"wie" = ( +/obj/structure/lattice/catwalk, +/obj/structure/railing, +/obj/structure/railing{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/openspace, +/area/station/engineering/supermatter/room) +"wim" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/plaque{ + icon_state = "L13" + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"wiA" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 1 + }, +/obj/effect/landmark/event_spawn, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/white/smooth_large, +/area/station/science/research) +"wiK" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/structure/barricade/wooden, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"wiT" = ( +/obj/machinery/portable_atmospherics/canister/plasma, +/obj/structure/window/reinforced/spawner/directional/west, +/turf/open/floor/iron/white/smooth_large, +/area/station/science/ordnance/storage) +"wje" = ( +/obj/effect/spawner/structure/window/reinforced/plasma, +/obj/machinery/door/poddoor/preopen{ + id = "ceshut" + }, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/command/heads_quarters/ce) +"wjj" = ( +/obj/effect/decal/cleanable/dirt, +/obj/item/radio/intercom/directional/south, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/wood/parquet, +/area/station/cargo/boutique) +"wjC" = ( +/turf/open/floor/iron/showroomfloor, +/area/station/cargo/storage) +"wjI" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/maintenance/central/greater) +"wjJ" = ( +/obj/structure/cable, +/obj/effect/turf_decal/tile/red/half/contrasted, +/turf/open/floor/iron/textured, +/area/station/security/warden) +"wjM" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/public/glass{ + name = "Departure Lounge" + }, +/turf/open/floor/iron, +/area/station/hallway/secondary/exit/departure_lounge) +"wjP" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) +"wjW" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"wkf" = ( +/obj/effect/turf_decal/tile/neutral, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/status_display/ai/directional/south, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"wkg" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment, +/obj/machinery/airalarm/directional/west, +/turf/open/floor/iron/white, +/area/station/medical/treatment_center) +"wkr" = ( +/obj/structure/lattice/catwalk, +/obj/structure/fence/post{ + dir = 8 + }, +/turf/open/openspace, +/area/station/cargo/storage) +"wku" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 + }, +/turf/open/floor/iron/white, +/area/station/medical/chemistry/minisat) +"wkA" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/plating/airless, +/area/station/science/ordnance/bomb) +"wkG" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/glass, +/area/station/science/ordnance/testlab) +"wkK" = ( +/obj/structure/table, +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/item/mod/module/plasma_stabilizer, +/obj/item/mod/module/thermal_regulator, +/obj/machinery/door/window/right/directional/east{ + name = "First Aid Supplies"; + req_access = list("medical") + }, +/obj/machinery/light/cold/dim/directional/west, +/turf/open/floor/iron/white, +/area/station/medical/storage) +"wkP" = ( +/obj/structure/lattice/catwalk, +/obj/structure/cable, +/obj/structure/railing, +/turf/open/openspace, +/area/station/security/prison/garden) +"wkR" = ( +/obj/structure/table/wood, +/obj/item/storage/crayons, +/turf/open/floor/iron/grimy, +/area/station/service/chapel/office) +"wkX" = ( +/mob/living/basic/mining/hivelord, +/turf/open/misc/asteroid/airless, +/area/station/asteroid) +"wlc" = ( +/turf/open/floor/plating, +/area/station/maintenance/department/engine) +"wlf" = ( +/obj/machinery/power/apc/auto_name/directional/north, +/obj/structure/cable, +/obj/effect/turf_decal/tile/dark_green/opposingcorners, +/turf/open/floor/iron, +/area/station/hallway/secondary/service) +"wli" = ( +/obj/structure/sign/warning/vacuum/external, +/turf/closed/wall, +/area/station/cargo/miningoffice) +"wlo" = ( +/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ + dir = 5 + }, +/turf/open/floor/iron, +/area/station/engineering/atmos) +"wlq" = ( +/obj/effect/spawner/random/entertainment/arcade{ + dir = 1 + }, +/turf/open/floor/plating, +/area/station/maintenance/central/greater) +"wlF" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/trash/mess, +/turf/open/floor/plating, +/area/station/maintenance/aft/upper) +"wlG" = ( +/obj/effect/turf_decal/stripes, +/obj/structure/table, +/obj/item/stack/sheet/iron/fifty, +/obj/item/stack/sheet/glass/fifty, +/obj/machinery/light/directional/south, +/turf/open/floor/iron/dark, +/area/station/engineering/atmospherics_engine) +"wlN" = ( +/obj/structure/table, +/obj/item/hatchet, +/obj/item/cultivator, +/obj/item/crowbar, +/obj/item/reagent_containers/cup/watering_can, +/obj/item/plant_analyzer, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/item/storage/bag/plants/portaseeder, +/obj/machinery/light/small/directional/east, +/turf/open/floor/iron/textured_large, +/area/station/service/hydroponics/garden) +"wlR" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden, +/turf/open/floor/plating, +/area/station/maintenance/port/greater) +"wlV" = ( +/obj/structure/falsewall/reinforced, +/turf/open/floor/plating, +/area/station/engineering/main) +"wmc" = ( +/obj/machinery/status_display/evac/directional/south, +/obj/structure/cable, +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/turf/open/floor/carpet/black, +/area/station/command/heads_quarters/hos) +"wmd" = ( +/obj/machinery/telecomms/bus/preset_four, +/turf/open/floor/circuit/green/telecomms/mainframe, +/area/station/tcommsat/server) +"wmg" = ( +/obj/structure/bed{ + dir = 1 + }, +/obj/item/bedsheet{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/flasher/directional/west{ + id = "Cell 1" + }, +/turf/open/floor/iron, +/area/station/security/brig) +"wmj" = ( +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron/dark/corner{ + dir = 1 + }, +/area/station/engineering/atmos/storage/gas) +"wmr" = ( +/obj/effect/turf_decal/stripes, +/turf/open/floor/iron/dark, +/area/station/engineering/atmospherics_engine) +"wmM" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/structure/cable, +/obj/machinery/light/directional/east, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/simple/green/hidden{ + dir = 10 + }, +/turf/open/floor/iron/dark, +/area/station/science/ordnance) +"wmO" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/glass/reinforced, +/area/station/science/xenobiology) +"wmX" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 8 + }, +/turf/open/floor/wood/tile, +/area/station/security/courtroom) +"wnj" = ( +/mob/living/basic/deer, +/turf/open/floor/grass, +/area/station/service/hydroponics/garden) +"wnw" = ( +/obj/effect/spawner/structure/window/hollow/reinforced/middle, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "chemsat" + }, +/turf/open/floor/plating, +/area/station/medical/chemistry/minisat) +"wny" = ( +/obj/structure/railing, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/door/firedoor/border_only, +/turf/open/floor/catwalk_floor/iron_white, +/area/station/science/lobby) +"wnA" = ( +/turf/open/floor/iron/white/smooth_half{ + dir = 8 + }, +/area/station/science/xenobiology) +"wnH" = ( +/obj/machinery/power/apc/auto_name/directional/west, +/obj/structure/cable, +/obj/machinery/portable_atmospherics/canister/oxygen, +/turf/open/floor/iron/white, +/area/station/science/ordnance/storage) +"wnL" = ( +/turf/open/floor/plating, +/area/station/medical/medbay/central) +"wnM" = ( +/obj/structure/girder, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/maintenance/central/lesser) +"wnT" = ( +/obj/structure/filingcabinet/filingcabinet, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/camera/autoname/directional/south{ + network = list("ss13","medbay") + }, +/turf/open/floor/wood/parquet, +/area/station/medical/psychology) +"wnX" = ( +/obj/machinery/power/supermatter_crystal/engine, +/turf/open/floor/engine, +/area/station/engineering/supermatter) +"wnY" = ( +/turf/open/floor/carpet/executive, +/area/station/command/corporate_showroom) +"woe" = ( +/obj/structure/tank_dispenser{ + pixel_x = -1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/item/radio/intercom/directional/west, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/storage/gas) +"woo" = ( +/obj/effect/turf_decal/stripes, +/obj/machinery/portable_atmospherics/canister, +/obj/item/radio/intercom/directional/south, +/turf/open/floor/iron/dark, +/area/station/engineering/atmospherics_engine) +"wos" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 1 + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/plating, +/area/station/maintenance/central/greater) +"wou" = ( +/obj/structure/table, +/obj/item/reagent_containers/cup/glass/coffee, +/turf/open/floor/iron/white, +/area/station/science/ordnance/testlab) +"wow" = ( +/obj/effect/turf_decal/tile/red, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/security/armory) +"woz" = ( +/obj/structure/sign/poster/official/random/directional/east, +/obj/structure/cable, +/turf/open/floor/iron/dark/textured, +/area/station/science/robotics/lab) +"woI" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/plating, +/area/station/maintenance/port/lesser) +"woJ" = ( +/obj/structure/cable/layer3, +/obj/structure/sign/departments/maint/directional/south, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/command/storage/satellite) +"woL" = ( +/turf/closed/wall/rock, +/area/station/maintenance/port/greater) +"wpc" = ( +/obj/structure/table/wood, +/obj/effect/turf_decal/tile/green/half/contrasted, +/obj/item/folder/blue, +/turf/open/floor/iron, +/area/station/security/courtroom) +"wpi" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light/small/broken/directional/south, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/plating, +/area/station/commons/vacant_room/commissary) +"wpn" = ( +/obj/structure/stairs/west, +/obj/structure/railing, +/turf/open/floor/iron, +/area/station/engineering/lobby) +"wpr" = ( +/obj/structure/railing{ + dir = 4 + }, +/turf/open/floor/glass/reinforced/telecomms, +/area/station/ai_monitored/turret_protected/ai) +"wps" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/iron/dark/side{ + dir = 8 + }, +/area/station/command/corporate_showroom) +"wpv" = ( +/obj/machinery/holopad, +/obj/effect/landmark/event_spawn, +/obj/effect/turf_decal/box, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/aisat/teleporter) +"wpH" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/crayon, +/turf/open/floor/plating, +/area/station/maintenance/department/engine) +"wpJ" = ( +/obj/effect/mapping_helpers/airlock/access/all/service/hydroponics, +/obj/machinery/door/airlock{ + name = "Hydroponics Backroom" + }, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/machinery/duct, +/turf/open/floor/iron, +/area/station/service/hydroponics) +"wpM" = ( +/obj/machinery/meter, +/obj/machinery/atmospherics/pipe/smart/simple/green/visible{ + dir = 8 + }, +/turf/closed/wall/r_wall, +/area/station/engineering/atmos) +"wpU" = ( +/obj/machinery/door/airlock/medical/glass{ + name = "Waiting Room" + }, +/obj/machinery/door/firedoor, +/turf/open/floor/iron/white, +/area/station/medical/exam_room) +"wqc" = ( +/obj/effect/turf_decal/siding/wood, +/turf/open/floor/wood, +/area/station/service/cafeteria) +"wql" = ( +/obj/machinery/telecomms/server/presets/command, +/turf/open/floor/circuit/green/telecomms/mainframe, +/area/station/tcommsat/server) +"wqq" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/greenglow, +/turf/open/floor/iron/white, +/area/station/medical/chemistry/minisat) +"wqB" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/iron/white, +/area/station/science/ordnance/testlab) +"wqK" = ( +/obj/structure/table, +/obj/item/circular_saw, +/obj/item/scalpel{ + pixel_y = 16 + }, +/obj/machinery/light/small/dim/directional/north, +/turf/open/floor/iron/white/smooth_large, +/area/station/science/robotics/lab) +"wqW" = ( +/obj/effect/mapping_helpers/apc/full_charge, +/obj/effect/mapping_helpers/apc/cell_5k, +/obj/machinery/power/apc/auto_name/directional/east, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/circuit/green, +/area/station/ai_monitored/command/nuke_storage) +"wrx" = ( +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/security) +"wrG" = ( +/obj/effect/turf_decal/tile/red/fourcorners, +/obj/structure/toilet/secret{ + dir = 4; + secret_type = /obj/item/storage/toolbox/mechanical/old + }, +/turf/open/floor/iron/white, +/area/station/security/prison/safe) +"wrQ" = ( +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 8 + }, +/obj/machinery/portable_atmospherics/canister, +/obj/machinery/light/directional/east, +/turf/open/floor/iron/dark/textured, +/area/station/engineering/atmos) +"wrU" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron/white, +/area/station/medical/treatment_center) +"wsa" = ( +/obj/structure/table, +/obj/item/paper, +/obj/effect/spawner/random/bureaucracy/crayon, +/turf/open/floor/iron/white, +/area/station/medical/exam_room) +"wsb" = ( +/obj/structure/statue/bananium/clown{ + custom_materials = list(/datum/material/bananium=2000) + }, +/obj/structure/sign/poster/contraband/random/directional/east, +/turf/open/floor/carpet/orange, +/area/station/service/theater) +"wsc" = ( +/obj/machinery/light/directional/west, +/obj/effect/turf_decal/siding/wood, +/turf/open/floor/wood, +/area/station/command/heads_quarters/hos) +"wsi" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/iron/chapel{ + dir = 8 + }, +/area/station/service/chapel) +"wsI" = ( +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 1 + }, +/obj/effect/turf_decal/loading_area/white{ + dir = 4 + }, +/obj/structure/extinguisher_cabinet/directional/north, +/turf/open/floor/iron, +/area/station/cargo/storage) +"wsM" = ( +/turf/closed/wall/r_wall, +/area/station/hallway/primary/central) +"wsS" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/landmark/event_spawn, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/command/heads_quarters/hop) +"wsW" = ( +/obj/effect/turf_decal/trimline/yellow/filled/corner, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/turf/open/floor/iron, +/area/station/command/heads_quarters/ce) +"wtf" = ( +/obj/machinery/camera/autoname/directional/north{ + network = list("ss13","rd") + }, +/obj/machinery/light/small/directional/north, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/turf/open/floor/catwalk_floor/iron_white, +/area/station/science/ordnance/testlab) +"wtr" = ( +/obj/machinery/door/airlock/maintenance_hatch, +/obj/effect/mapping_helpers/airlock/access/all/science/general, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/white/smooth_large, +/area/station/science/lab) +"wts" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners{ + dir = 1 + }, +/obj/effect/turf_decal/siding/purple{ + dir = 4 + }, +/obj/effect/landmark/event_spawn, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/iron/dark, +/area/station/command/heads_quarters/rd) +"wtw" = ( +/obj/structure/extinguisher_cabinet/directional/south, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/iron/dark/side, +/area/station/maintenance/radshelter/medical) +"wtF" = ( +/obj/structure/lattice/catwalk, +/obj/machinery/atmospherics/pipe/heat_exchanging/manifold, +/turf/open/space/basic, +/area/space/nearstation) +"wtH" = ( +/turf/closed/wall/r_wall, +/area/station/command/heads_quarters/ce) +"wtI" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/blood/tracks{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/department/science) +"wtW" = ( +/obj/structure/window/spawner/directional/north, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/commons/fitness/recreation) +"wtZ" = ( +/obj/structure/table/wood, +/obj/item/storage/briefcase/secure{ + desc = "A large briefcase with a digital locking system, and the Nanotrasen logo emblazoned on the sides."; + name = "\improper Nanotrasen-brand secure briefcase exhibit"; + pixel_y = 2 + }, +/obj/item/radio/intercom/directional/south, +/obj/effect/turf_decal/siding/wood{ + dir = 6 + }, +/turf/open/floor/wood/tile, +/area/station/command/corporate_showroom) +"wum" = ( +/obj/machinery/fax{ + fax_name = "Head of Security's Office"; + name = "Head of Security's Fax Machine" + }, +/obj/structure/table/wood/fancy/red, +/obj/structure/secure_safe/hos{ + pixel_x = 36; + pixel_y = 28 + }, +/obj/machinery/airalarm/directional/north, +/turf/open/floor/iron/dark, +/area/station/command/heads_quarters/hos) +"wun" = ( +/obj/machinery/door/airlock/maintenance, +/obj/machinery/atmospherics/pipe/layer_manifold/supply/visible/layer4, +/obj/effect/mapping_helpers/airlock/unres, +/obj/effect/mapping_helpers/airlock/access/all/engineering/external, +/obj/effect/mapping_helpers/airlock/abandoned, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"wur" = ( +/obj/effect/turf_decal/stripes/line, +/obj/machinery/camera/autoname/directional/north{ + network = list("ss13","medbay") + }, +/turf/open/floor/iron/textured_large, +/area/station/medical/treatment_center) +"wus" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/carpet/black, +/area/station/command/heads_quarters/hos) +"wuS" = ( +/obj/machinery/door/window/right/directional/east{ + name = "Engineering Deliveries"; + req_access = list("engineering") + }, +/obj/effect/turf_decal/delivery, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/engineering/main) +"wvc" = ( +/obj/structure/railing{ + dir = 4 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/sorting/mail/flip{ + dir = 1 + }, +/obj/effect/mapping_helpers/mail_sorting/service/hydroponics, +/turf/open/floor/wood/tile, +/area/station/service/bar) +"wvt" = ( +/obj/machinery/door/airlock/maintenance_hatch, +/obj/effect/mapping_helpers/airlock/access/any/supply/maintenance, +/obj/machinery/door/poddoor/shutters{ + name = "Countertheft Shutters"; + id = "boutique" + }, +/turf/open/floor/wood/parquet, +/area/station/cargo/boutique) +"wvC" = ( +/obj/machinery/vending/wardrobe/medi_wardrobe, +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/machinery/airalarm/directional/east, +/turf/open/floor/iron/white, +/area/station/medical/storage) +"wvM" = ( +/obj/effect/turf_decal/tile/blue/half/contrasted{ + dir = 1 + }, +/turf/open/floor/iron/white, +/area/station/medical/medbay/lobby) +"wvS" = ( +/obj/machinery/light/directional/north, +/obj/structure/cable, +/obj/effect/turf_decal/trimline/purple/filled/corner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/purple/filled/arrow_ccw{ + dir = 5 + }, +/obj/effect/landmark/event_spawn, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/white/smooth_large, +/area/station/science/xenobiology/hallway) +"wwj" = ( +/obj/effect/landmark/event_spawn, +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/iron/white/smooth_large, +/area/station/medical/treatment_center) +"wwB" = ( +/obj/structure/table, +/obj/item/radio/intercom/directional/north, +/turf/open/floor/plating, +/area/station/commons/vacant_room/commissary) +"wwD" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/commons/locker) +"wwR" = ( +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 8 + }, +/turf/open/floor/plating, +/area/station/maintenance/central/greater) +"wwY" = ( +/obj/effect/decal/cleanable/blood/tracks{ + dir = 5 + }, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"wxa" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/tile/purple/half/contrasted, +/turf/open/floor/iron/white, +/area/station/science/lobby) +"wxh" = ( +/turf/open/openspace, +/area/station/maintenance/central/greater) +"wxk" = ( +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/engineering/lobby) +"wxu" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/iron/white/smooth_large, +/area/station/medical/treatment_center) +"wxv" = ( +/obj/machinery/power/apc/auto_name/directional/north, +/obj/structure/cable, +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/obj/effect/turf_decal/tile/green{ + dir = 4 + }, +/obj/machinery/duct, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/service/hydroponics) +"wxF" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/closet/crate/engineering, +/obj/item/stack/tile/iron{ + amount = 30 + }, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"wxH" = ( +/obj/structure/chair/comfy/brown{ + dir = 4; + name = "Captain" + }, +/turf/open/floor/carpet/executive, +/area/station/command/meeting_room) +"wxP" = ( +/obj/structure/cable, +/obj/machinery/airalarm/directional/north, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/catwalk_floor/flat_white, +/area/station/science/lab) +"wxQ" = ( +/obj/machinery/computer/operating{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured, +/area/station/medical/morgue) +"wxW" = ( +/obj/structure/table/wood, +/obj/item/toy/talking/ai{ + name = "\improper Nanotrasen-brand toy AI"; + pixel_y = 6 + }, +/obj/machinery/cell_charger, +/obj/effect/turf_decal/siding/wood{ + dir = 9 + }, +/obj/machinery/light_switch/directional/north, +/turf/open/floor/wood/tile, +/area/station/command/corporate_showroom) +"wyb" = ( +/obj/effect/turf_decal/tile/blue/half/contrasted, +/obj/structure/chair/sofa/bench/tram/solo{ + dir = 1 + }, +/obj/structure/cable, +/obj/machinery/light/dim/directional/south, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/white, +/area/station/medical/medbay/lobby) +"wyh" = ( +/obj/structure/lattice, +/obj/structure/grille, +/turf/open/openspace, +/area/station/hallway/secondary/exit/departure_lounge) +"wyi" = ( +/obj/structure/closet/crate, +/obj/item/reagent_containers/cup/bowl, +/obj/effect/spawner/random/contraband/prison, +/obj/item/reagent_containers/cup/bowl, +/obj/item/reagent_containers/cup/bowl, +/obj/item/reagent_containers/cup/bowl, +/obj/item/reagent_containers/cup/bowl, +/obj/item/reagent_containers/cup/bowl, +/obj/item/reagent_containers/cup/bowl, +/obj/item/reagent_containers/cup/bowl, +/obj/item/kitchen/fork/plastic, +/obj/item/kitchen/fork/plastic, +/obj/item/kitchen/fork/plastic, +/obj/item/storage/box/drinkingglasses, +/obj/item/kitchen/spoon/plastic, +/obj/item/kitchen/spoon/plastic, +/obj/item/kitchen/spoon/plastic, +/obj/item/knife/plastic, +/obj/item/knife/plastic, +/obj/item/knife/plastic, +/obj/item/storage/bag/tray/cafeteria, +/obj/item/storage/bag/tray/cafeteria, +/obj/item/storage/bag/tray/cafeteria, +/obj/item/storage/bag/tray/cafeteria, +/obj/item/storage/box/drinkingglasses, +/obj/effect/turf_decal/tile/red/opposingcorners, +/obj/machinery/light/small/directional/east, +/turf/open/floor/iron/white, +/area/station/security/prison/mess) +"wyj" = ( +/obj/structure/table, +/obj/item/reagent_containers/cup/rag{ + pixel_x = -5; + pixel_y = 8 + }, +/obj/machinery/reagentgrinder{ + pixel_x = 6; + pixel_y = 6 + }, +/obj/effect/turf_decal/tile/dark_red/opposingcorners, +/obj/machinery/light/directional/west, +/turf/open/floor/iron/dark, +/area/station/service/bar) +"wyl" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/port/greater) +"wyq" = ( +/obj/machinery/camera/autoname/directional/south, +/obj/effect/turf_decal/tile/neutral, +/obj/structure/table, +/obj/item/pai_card, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"wyZ" = ( +/obj/machinery/atmospherics/pipe/bridge_pipe/green/visible{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/bridge_pipe/yellow/visible, +/turf/open/floor/iron, +/area/station/engineering/atmos) +"wze" = ( +/obj/structure/cable/layer3, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/command/storage/satellite) +"wzX" = ( +/obj/structure/flora/tree/palm/style_random, +/turf/open/floor/grass, +/area/station/science/genetics) +"wAa" = ( +/obj/machinery/power/apc/auto_name/directional/north, +/obj/structure/cable, +/obj/structure/table, +/obj/item/reagent_containers/cup/bottle/multiver{ + pixel_y = 9; + pixel_x = -5 + }, +/obj/item/reagent_containers/cup/bottle/epinephrine{ + pixel_y = 9; + pixel_x = 8 + }, +/obj/item/reagent_containers/syringe{ + pixel_y = -3 + }, +/obj/effect/turf_decal/tile/blue/half/contrasted{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/turf/open/floor/iron/white, +/area/station/security/medical) +"wAm" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/showroomfloor, +/area/station/command/heads_quarters/qm) +"wAv" = ( +/turf/open/floor/plating, +/area/station/maintenance/central/greater) +"wAx" = ( +/obj/machinery/airalarm/directional/south, +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/multiz/supply/visible/layer4{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/multiz/scrubbers/visible/layer2{ + dir = 1 + }, +/turf/open/floor/plating, +/area/station/ai_monitored/turret_protected/aisat/uppersouth) +"wAy" = ( +/obj/structure/cable, +/turf/open/floor/iron/white/smooth_edge, +/area/station/science/research) +"wAB" = ( +/obj/structure/chair/stool/bar/directional/west, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/effect/turf_decal/tile/bar/opposingcorners, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/turf/open/floor/iron, +/area/station/commons/lounge) +"wAP" = ( +/obj/effect/turf_decal/trimline/blue/filled/line, +/obj/structure/cable, +/obj/machinery/firealarm/directional/south, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/turf/open/floor/iron/white, +/area/station/medical/paramedic) +"wAT" = ( +/obj/structure/lattice, +/obj/structure/disposalpipe/segment, +/turf/open/space/openspace, +/area/space/nearstation) +"wBc" = ( +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/cargo/drone_bay) +"wBd" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/preopen{ + id = "xeno_blastdoor"; + name = "Biohazard Containment Door" + }, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/science/xenobiology) +"wBe" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment, +/obj/structure/extinguisher_cabinet/directional/west, +/turf/open/floor/iron/white, +/area/station/medical/treatment_center) +"wBk" = ( +/obj/effect/turf_decal/stripes{ + dir = 1 + }, +/obj/effect/turf_decal/arrows/white, +/turf/open/floor/engine, +/area/station/engineering/atmospherics_engine) +"wBw" = ( +/obj/structure/table, +/obj/machinery/fax{ + fax_name = "Cargo Office"; + name = "Cargo Office Fax Machine" + }, +/obj/effect/turf_decal/bot_red, +/obj/machinery/camera/autoname/directional/east, +/turf/open/floor/iron/textured_large, +/area/station/cargo/sorting) +"wBC" = ( +/turf/closed/wall/r_wall, +/area/station/security/interrogation) +"wBH" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/engineering/main) +"wBO" = ( +/obj/item/stack/package_wrap, +/obj/item/stack/package_wrap, +/obj/item/stack/package_wrap, +/obj/item/stack/package_wrap, +/obj/item/stack/package_wrap, +/obj/item/hand_labeler, +/obj/structure/table/glass, +/obj/item/book/manual/hydroponics_pod_people, +/obj/effect/turf_decal/trimline/green/filled/corner{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/blue, +/obj/effect/turf_decal/tile/green{ + dir = 4 + }, +/obj/structure/window/spawner/directional/north, +/obj/machinery/camera/autoname/directional/east, +/turf/open/floor/iron, +/area/station/service/hydroponics) +"wBU" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/engineering/atmos) +"wBV" = ( +/obj/effect/decal/cleanable/dirt, +/mob/living/carbon/human/species/monkey/angry, +/obj/item/knife/kitchen, +/obj/structure/window/reinforced/spawner/directional/north, +/obj/structure/window/reinforced/spawner/directional/west, +/obj/item/food/grown/banana, +/obj/structure/sign/warning/biohazard/directional/south, +/obj/structure/sign/warning{ + pixel_x = 32 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/misc/grass, +/area/station/cargo/boutique) +"wCj" = ( +/obj/machinery/portable_atmospherics/canister/water_vapor, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/airalarm/directional/south, +/turf/open/floor/iron, +/area/station/service/janitor) +"wCm" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, +/obj/effect/turf_decal/stripes{ + dir = 4 + }, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"wCr" = ( +/obj/machinery/door/airlock/security/glass{ + name = "Secure Gear Storage" + }, +/obj/effect/mapping_helpers/airlock/access/all/security/armory, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/security/lockers) +"wCv" = ( +/obj/structure/cable, +/obj/effect/turf_decal/trimline/yellow/filled/corner{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/engineering/gravity_generator) +"wCC" = ( +/obj/effect/spawner/random/trash/mopbucket, +/turf/open/floor/plating, +/area/station/maintenance/central/lesser) +"wCG" = ( +/obj/machinery/light/directional/north, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/engineering/main) +"wCO" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/landmark/event_spawn, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/science/robotics/lab) +"wCP" = ( +/obj/structure/cable, +/obj/structure/broken_flooring/singular, +/obj/machinery/airalarm/directional/east, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/solars/starboard/fore) +"wCR" = ( +/obj/structure/table, +/obj/item/clothing/head/utility/welding{ + pixel_y = 9 + }, +/obj/item/plunger{ + pixel_x = 8; + pixel_y = 9 + }, +/obj/item/storage/toolbox/mechanical, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/camera/autoname/directional/east{ + network = list("ss13","medbay") + }, +/turf/open/floor/iron/dark/textured_half{ + dir = 1 + }, +/area/station/medical/chemistry/minisat) +"wCV" = ( +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/iron, +/area/station/maintenance/department/medical/central) +"wCY" = ( +/obj/machinery/computer/teleporter{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/aisat/teleporter) +"wDe" = ( +/obj/effect/turf_decal/siding/white{ + dir = 1 + }, +/obj/structure/closet/crate/freezer/blood, +/obj/machinery/firealarm/directional/west, +/turf/open/floor/iron, +/area/station/medical/coldroom) +"wDo" = ( +/obj/structure/cable, +/obj/effect/landmark/event_spawn, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/security/interrogation) +"wDr" = ( +/obj/effect/turf_decal/trimline/green/filled/line, +/obj/structure/railing/corner{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/station/hallway/secondary/entry) +"wDu" = ( +/obj/structure/chair/sofa/bench/left{ + dir = 4 + }, +/obj/effect/turf_decal/tile/green/half/contrasted{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/fore) +"wDv" = ( +/obj/effect/turf_decal/tile/brown, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/cargo/storage) +"wDy" = ( +/obj/item/kirbyplants/random, +/obj/machinery/firealarm/directional/west, +/turf/open/floor/iron/grimy, +/area/station/security/detectives_office) +"wDD" = ( +/obj/effect/turf_decal/siding/red{ + dir = 5 + }, +/turf/open/floor/circuit, +/area/station/science/robotics/lab) +"wDH" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 10 + }, +/obj/machinery/chem_heater/withbuffer, +/turf/open/floor/iron/white, +/area/station/medical/chemistry) +"wDJ" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/security/execution/education) +"wDP" = ( +/obj/effect/turf_decal/siding/thinplating_new, +/obj/effect/landmark/event_spawn, +/turf/open/floor/glass/reinforced, +/area/station/engineering/atmos/upper) +"wDW" = ( +/obj/machinery/modular_computer/preset/id{ + dir = 1 + }, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/security/office) +"wEc" = ( +/obj/structure/chair/sofa/bench/right{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/security/courtroom) +"wEd" = ( +/obj/effect/turf_decal/tile/brown/anticorner/contrasted, +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/cargo/storage) +"wEe" = ( +/obj/effect/spawner/random/structure/crate, +/obj/effect/spawner/random/structure/furniture_parts, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/department/engine) +"wEg" = ( +/obj/effect/landmark/event_spawn, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/kitchen, +/area/station/service/kitchen) +"wEj" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line, +/obj/machinery/chem_dispenser, +/obj/machinery/light/directional/south, +/turf/open/floor/iron/white, +/area/station/medical/chemistry) +"wEs" = ( +/obj/item/target, +/obj/structure/window/reinforced/spawner/directional/north, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/plating/airless, +/area/station/science/ordnance/bomb) +"wEA" = ( +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/tile/purple/anticorner/contrasted{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/station/science/lobby) +"wED" = ( +/obj/structure/closet/masks, +/obj/effect/landmark/start/hangover/closet, +/turf/open/floor/iron/white/textured_large, +/area/station/commons/fitness/recreation) +"wEF" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"wEK" = ( +/obj/machinery/door/window/left/directional/east{ + pixel_x = 4 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron/kitchen, +/area/station/service/kitchen) +"wEL" = ( +/obj/structure/railing, +/obj/machinery/door/firedoor/border_only, +/obj/effect/turf_decal/tile/brown/anticorner/contrasted{ + dir = 8 + }, +/obj/machinery/light/directional/west, +/obj/structure/table/reinforced, +/obj/item/wrench, +/obj/item/stack/cable_coil/thirty{ + pixel_x = 14; + pixel_y = 4 + }, +/turf/open/floor/iron, +/area/station/cargo/storage) +"wEM" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/cargo/warehouse) +"wEW" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/landmark/event_spawn, +/turf/open/floor/iron/dark, +/area/station/command/gateway) +"wFw" = ( +/obj/structure/cable, +/obj/structure/closet/emcloset, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/light/small/directional/south, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/white/textured_large, +/area/station/science/xenobiology) +"wFy" = ( +/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ + dir = 4 + }, +/obj/effect/turf_decal/tile/yellow{ + dir = 4 + }, +/turf/open/floor/iron/dark/corner, +/area/station/engineering/atmos) +"wFC" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/station/engineering/atmos/storage/gas) +"wFG" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, +/obj/effect/turf_decal/stripes{ + dir = 8 + }, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"wFI" = ( +/obj/machinery/computer/robotics{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral/opposingcorners{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/command/heads_quarters/rd) +"wFZ" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/obj/machinery/airalarm/directional/south, +/turf/open/floor/iron/dark, +/area/station/maintenance/radshelter/civil) +"wGg" = ( +/obj/machinery/door/airlock/public/glass{ + name = "Courtroom" + }, +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/effect/turf_decal/siding/dark{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/security/courtroom) +"wGu" = ( +/obj/structure/table/wood, +/turf/open/floor/carpet, +/area/station/commons/dorms) +"wGZ" = ( +/obj/machinery/atmospherics/pipe/smart/manifold/general/visible{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/engineering/atmos) +"wHa" = ( +/obj/effect/spawner/structure/window, +/turf/open/floor/plating, +/area/station/commons/fitness/recreation) +"wHb" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/engineering/lobby) +"wHj" = ( +/obj/machinery/bluespace_vendor/directional/south, +/obj/structure/closet, +/turf/open/floor/iron/textured, +/area/station/hallway/primary/central) +"wHo" = ( +/obj/effect/turf_decal/tile/neutral, +/obj/effect/spawner/random/entertainment/arcade{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/commons/fitness/recreation) +"wHs" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/station/hallway/secondary/command) +"wHJ" = ( +/turf/closed/wall/r_wall, +/area/station/ai_monitored/turret_protected/aisat_interior) +"wIn" = ( +/obj/structure/table/optable, +/obj/machinery/camera/autoname/directional/west{ + network = list("ss13","medbay") + }, +/obj/effect/turf_decal/tile/blue/full, +/obj/item/radio/intercom/directional/north, +/turf/open/floor/iron/white, +/area/station/medical/surgery) +"wIr" = ( +/obj/effect/turf_decal/tile/dark_red/opposingcorners, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/service/bar/backroom) +"wIB" = ( +/obj/structure/railing, +/obj/machinery/atmospherics/pipe/multiz/supply/visible/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/multiz/scrubbers/visible/layer2{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/dark, +/area/station/maintenance/department/engine) +"wIN" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/gravity_generator) +"wIT" = ( +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/security/brig/entrance) +"wIV" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/trunk/multiz, +/turf/open/floor/wood, +/area/station/commons/lounge) +"wIX" = ( +/obj/effect/turf_decal/tile/red/half/contrasted, +/obj/structure/reagent_dispensers/wall/peppertank/directional/south, +/turf/open/floor/iron, +/area/station/security) +"wJk" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/medical/chemistry/minisat) +"wJy" = ( +/turf/closed/wall, +/area/station/medical/storage) +"wJN" = ( +/obj/machinery/space_heater/improvised_chem_heater, +/turf/open/floor/plating, +/area/station/maintenance/aft/upper) +"wKo" = ( +/obj/structure/table/wood/poker, +/obj/effect/spawner/random/entertainment/deck, +/obj/effect/spawner/random/entertainment/deck, +/turf/open/floor/wood, +/area/station/commons/lounge) +"wKE" = ( +/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, +/obj/effect/mapping_helpers/airlock/unres, +/obj/structure/disposalpipe/segment, +/obj/machinery/door/airlock/maintenance_hatch, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/hallway/primary/starboard) +"wKO" = ( +/turf/open/floor/glass, +/area/station/maintenance/department/medical) +"wKT" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/atmospherics/pipe/smart/simple/green/visible{ + dir = 8 + }, +/turf/open/floor/plating, +/area/station/engineering/atmos) +"wKY" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/yellow{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) +"wLi" = ( +/obj/effect/turf_decal/tile/blue/anticorner/contrasted, +/obj/structure/table, +/obj/item/storage/box/bodybags{ + pixel_x = 3; + pixel_y = 2 + }, +/obj/machinery/firealarm/directional/east, +/obj/machinery/camera/autoname/directional/south{ + network = list("ss13","medbay") + }, +/turf/open/floor/iron/white, +/area/station/medical/medbay/lobby) +"wLj" = ( +/obj/effect/spawner/random/structure/crate, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/department/engine) +"wLq" = ( +/obj/effect/landmark/blobstart, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/medical/morgue) +"wLu" = ( +/obj/effect/turf_decal/trimline/green/filled/line, +/obj/machinery/light/directional/south, +/obj/structure/railing/corner{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/station/hallway/secondary/entry) +"wLA" = ( +/obj/structure/bed{ + dir = 1 + }, +/obj/effect/spawner/random/bedsheet{ + dir = 1 + }, +/obj/item/radio/intercom/directional/north, +/turf/open/floor/carpet, +/area/station/medical/psychology) +"wLP" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/iron/white/smooth_large, +/area/station/medical/chemistry) +"wMb" = ( +/obj/effect/spawner/random/structure/grille, +/turf/open/floor/plating, +/area/station/maintenance/central/lesser) +"wMe" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/medical/chemistry/minisat) +"wMn" = ( +/obj/structure/table, +/obj/item/storage/box/prisoner{ + pixel_y = 8; + pixel_x = -6 + }, +/obj/item/storage/box/prisoner{ + pixel_y = 4; + pixel_x = -6 + }, +/obj/item/storage/box/hug{ + pixel_y = 8; + pixel_x = 8 + }, +/obj/item/storage/box/bodybags{ + pixel_x = 8; + pixel_y = 4 + }, +/obj/item/radio/intercom/prison/directional/south, +/obj/item/razor{ + pixel_x = -8; + pixel_y = 3 + }, +/obj/item/paper/fluff/genpop_instructions, +/turf/open/floor/iron/dark/textured, +/area/station/security/execution/transfer) +"wMt" = ( +/obj/structure/table, +/obj/item/stack/sheet/glass/fifty, +/obj/item/stack/rods/fifty, +/obj/effect/turf_decal/trimline/yellow/filled/line, +/obj/item/clothing/gloves/color/yellow, +/obj/item/clothing/gloves/color/yellow, +/turf/open/floor/iron, +/area/station/engineering/storage) +"wMu" = ( +/obj/structure/rack, +/obj/effect/spawner/random/maintenance, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/dark, +/area/station/maintenance/department/engine) +"wMy" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/carpet/executive, +/area/station/command/heads_quarters/captain/private) +"wMB" = ( +/obj/effect/turf_decal/siding, +/turf/open/floor/iron/textured, +/area/station/science/lobby) +"wME" = ( +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/white, +/area/station/science/research) +"wMY" = ( +/obj/structure/cable, +/obj/structure/dresser, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/wood, +/area/station/security/detectives_office/private_investigators_office) +"wMZ" = ( +/obj/effect/turf_decal/siding/purple{ + dir = 10 + }, +/obj/machinery/power/apc/auto_name/directional/west, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 1 + }, +/turf/open/floor/iron/white/herringbone, +/area/station/science/breakroom) +"wNa" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/carpet/green, +/area/station/command/heads_quarters/hop) +"wNk" = ( +/turf/closed/wall, +/area/station/tcommsat/server) +"wNp" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/spawner/random/structure/crate, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"wNK" = ( +/obj/structure/closet/emcloset, +/obj/effect/turf_decal/stripes, +/turf/open/floor/iron/dark/textured, +/area/station/hallway/secondary/exit/departure_lounge) +"wNL" = ( +/obj/structure/table, +/obj/item/storage/toolbox/mechanical, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/commons/storage/primary) +"wNN" = ( +/obj/structure/cable, +/obj/effect/landmark/start/atmospheric_technician, +/obj/effect/landmark/event_spawn, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/turf/open/floor/iron/dark/corner{ + dir = 8 + }, +/area/station/engineering/atmos/storage/gas) +"wNZ" = ( +/obj/machinery/light/small/directional/west, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/iron/white/textured_large, +/area/station/medical/treatment_center) +"wOi" = ( +/obj/effect/turf_decal/tile/neutral, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/newscaster/directional/south, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"wOm" = ( +/obj/structure/table, +/obj/item/food/grown/wheat, +/obj/item/food/grown/watermelon, +/obj/item/food/grown/citrus/orange, +/obj/item/food/grown/grapes, +/obj/item/food/grown/cocoapod, +/obj/item/food/grown/apple, +/obj/item/food/grown/chili, +/obj/item/food/grown/cherries, +/obj/item/food/grown/soybeans, +/obj/item/food/grown/citrus/lime, +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/turf/open/floor/iron/textured_large, +/area/station/service/hydroponics/garden) +"wOn" = ( +/obj/machinery/door/airlock/research/glass{ + name = "Ordnance Lab" + }, +/obj/effect/mapping_helpers/airlock/locked, +/obj/machinery/atmospherics/pipe/heat_exchanging/junction/layer2{ + dir = 8 + }, +/obj/effect/mapping_helpers/airlock/access/all/science/ordnance, +/turf/open/floor/iron/dark, +/area/station/science/ordnance) +"wOo" = ( +/turf/closed/wall/r_wall, +/area/station/ai_monitored/turret_protected/ai_upload) +"wOp" = ( +/obj/structure/table, +/obj/machinery/reagentgrinder{ + pixel_y = 4 + }, +/obj/effect/spawner/random/entertainment/drugs, +/obj/effect/spawner/random/entertainment/drugs, +/turf/open/floor/iron/grimy, +/area/station/maintenance/central/greater) +"wOy" = ( +/obj/effect/turf_decal/bot_white, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/gravity_generator/main, +/turf/open/floor/iron/dark, +/area/station/engineering/gravity_generator) +"wOJ" = ( +/obj/structure/table, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 9 + }, +/obj/item/stack/sheet/iron/fifty, +/obj/item/construction/plumbing, +/obj/item/stack/ducts/fifty, +/obj/item/stack/ducts/fifty, +/obj/item/stack/ducts/fifty, +/obj/item/stack/ducts/fifty, +/obj/item/stack/ducts/fifty, +/obj/machinery/camera/autoname/directional/north{ + network = list("ss13","medbay") + }, +/turf/open/floor/iron/white, +/area/station/medical/chemistry) +"wOK" = ( +/obj/structure/chair/comfy/brown{ + dir = 8; + name = "Research Director" + }, +/turf/open/floor/carpet/executive, +/area/station/command/meeting_room) +"wOU" = ( +/turf/closed/wall/r_wall, +/area/station/command/heads_quarters/qm) +"wPh" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/service/chapel) +"wPn" = ( +/obj/structure/girder, +/turf/open/floor/plating, +/area/station/maintenance/central/greater) +"wPy" = ( +/obj/effect/landmark/atmospheric_sanity/ignore_area, +/turf/closed/wall/r_wall, +/area/station/ai_monitored/turret_protected/ai_upload_foyer) +"wPP" = ( +/obj/machinery/door/airlock/maintenance_hatch{ + name = "Xenobiology Maintenance" + }, +/obj/effect/mapping_helpers/airlock/access/all/science/xenobio, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/turf/open/floor/catwalk_floor/flat_white, +/area/station/science/xenobiology) +"wPU" = ( +/obj/machinery/light/small/directional/west, +/turf/open/misc/asteroid, +/area/station/maintenance/disposal/incinerator) +"wPX" = ( +/obj/machinery/light/dim/directional/west, +/turf/open/floor/iron/white, +/area/station/science/research) +"wQa" = ( +/obj/effect/turf_decal/bot_white, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/cargo/storage) +"wQj" = ( +/obj/structure/chair/sofa/bench/right{ + dir = 1 + }, +/obj/machinery/light/cold/directional/south, +/turf/open/floor/iron/white, +/area/station/medical/exam_room) +"wQz" = ( +/obj/effect/landmark/start/station_engineer, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/engineering/supermatter/room) +"wQG" = ( +/obj/effect/turf_decal/siding/wood, +/obj/structure/disposalpipe/sorting/mail, +/obj/effect/mapping_helpers/mail_sorting/service/janitor_closet, +/turf/open/floor/wood/tile, +/area/station/service/bar) +"wQH" = ( +/obj/machinery/atmospherics/components/trinary/filter/atmos/o2{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/engineering/atmos) +"wQM" = ( +/obj/effect/turf_decal/siding/wood/corner, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/wood, +/area/station/service/theater) +"wQW" = ( +/obj/structure/cable, +/obj/effect/turf_decal/tile/neutral, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"wRf" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/structure/extinguisher_cabinet/directional/west, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/wood, +/area/station/command/heads_quarters/hos) +"wRm" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating/airless, +/area/station/hallway/secondary/exit/departure_lounge) +"wRx" = ( +/obj/item/kirbyplants/random, +/obj/effect/turf_decal/tile/neutral/half{ + dir = 4 + }, +/obj/item/radio/intercom/directional/east, +/turf/open/floor/iron/edge{ + dir = 4 + }, +/area/station/hallway/secondary/exit/departure_lounge) +"wRD" = ( +/obj/machinery/airalarm/directional/west, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/service/cafeteria) +"wRG" = ( +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/security/brig/entrance) +"wRN" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ + dir = 10 + }, +/turf/open/floor/plating, +/area/station/engineering/atmos) +"wSc" = ( +/turf/open/openspace, +/area/station/security/prison) +"wSf" = ( +/turf/open/floor/iron/white, +/area/station/medical/exam_room) +"wSi" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/machinery/status_display/ai/directional/west, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"wSn" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/carpet, +/area/station/service/theater) +"wTc" = ( +/obj/machinery/meter/monitored/distro_loop, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/visible, +/obj/effect/turf_decal/tile/yellow{ + dir = 8 + }, +/turf/open/floor/iron/dark/corner{ + dir = 1 + }, +/area/station/engineering/atmos/pumproom) +"wTp" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/spawner/random/entertainment/arcade, +/obj/effect/decal/cleanable/dirt, +/obj/structure/sign/poster/official/no_erp/directional/north, +/turf/open/floor/iron, +/area/station/commons/fitness/recreation) +"wTs" = ( +/obj/machinery/camera/autoname/directional/south{ + network = list("ss13","rd","xeno") + }, +/turf/open/floor/engine, +/area/station/science/xenobiology) +"wTu" = ( +/obj/machinery/light/directional/west, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/fore) +"wTT" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/effect/turf_decal/tile/neutral/opposingcorners{ + dir = 1 + }, +/obj/item/radio/intercom/directional/south, +/turf/open/floor/iron, +/area/station/commons/locker) +"wTW" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/white/smooth_half, +/area/station/medical/pharmacy) +"wTX" = ( +/obj/effect/spawner/random/trash/mess, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"wUc" = ( +/obj/effect/turf_decal/siding/white{ + dir = 9 + }, +/turf/open/floor/iron/herringbone, +/area/station/hallway/primary/central) +"wUe" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/security/prison) +"wUg" = ( +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 8 + }, +/obj/machinery/portable_atmospherics/canister, +/turf/open/floor/iron/dark/textured, +/area/station/engineering/atmos) +"wUH" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/white, +/area/station/medical/chemistry/minisat) +"wUK" = ( +/obj/machinery/disposal/bin, +/obj/effect/turf_decal/tile/yellow{ + dir = 4 + }, +/obj/effect/turf_decal/tile/yellow{ + dir = 8 + }, +/obj/structure/disposalpipe/trunk, +/obj/machinery/light/dim/directional/north, +/turf/open/floor/iron/dark/corner{ + dir = 1 + }, +/area/station/engineering/atmos/storage/gas) +"wUM" = ( +/obj/machinery/nuclearbomb/beer, +/obj/machinery/airalarm/directional/north, +/obj/effect/turf_decal/siding/wood{ + dir = 9 + }, +/turf/open/floor/wood/tile, +/area/station/command/corporate_showroom) +"wUS" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/maintenance/department/medical) +"wVb" = ( +/obj/structure/curtain/cloth/fancy/mechanical/start_closed{ + desc = "A set of curtains serving as a fancy theater backdrop. They can only be opened by a button."; + id = "theater_curtains"; + name = "Theater Curtains" + }, +/obj/structure/cable, +/obj/machinery/button/curtain{ + id = "theater_curtains"; + name = "curtain control"; + pixel_y = -32; + req_access = list("theatre") + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/turf/open/floor/wood, +/area/station/service/theater) +"wVz" = ( +/obj/machinery/power/apc/auto_name/directional/west, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/cable, +/obj/machinery/light_switch/directional/south, +/turf/open/floor/iron, +/area/station/security/evidence) +"wVI" = ( +/obj/effect/spawner/structure/window/reinforced/plasma, +/turf/open/floor/plating, +/area/station/engineering/atmos) +"wVL" = ( +/obj/machinery/door/airlock/research{ + name = "Research Division Access" + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "sci-entrance" + }, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 4 + }, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/mapping_helpers/airlock/access/all/science/general, +/turf/open/floor/iron/white, +/area/station/science/research) +"wWk" = ( +/obj/effect/turf_decal/stripes{ + dir = 1 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/item/radio/intercom/directional/north, +/obj/machinery/portable_atmospherics/pump, +/turf/open/floor/iron/dark, +/area/station/engineering/atmospherics_engine) +"wWs" = ( +/obj/machinery/door/firedoor, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"wWt" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/window/left/directional/east{ + req_access = list("engineering") + }, +/obj/structure/desk_bell, +/obj/item/crowbar, +/obj/item/wrench, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/turf/open/floor/iron, +/area/station/engineering/lobby) +"wWu" = ( +/obj/structure/table/wood, +/obj/machinery/computer/records/medical/laptop{ + dir = 8; + pixel_y = 1 + }, +/turf/open/floor/wood/parquet, +/area/station/medical/psychology) +"wWv" = ( +/obj/machinery/door/airlock/maintenance_hatch, +/obj/effect/mapping_helpers/airlock/access/all/supply/general, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/cargo/warehouse) +"wWy" = ( +/obj/machinery/power/terminal{ + dir = 8 + }, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/engineering/main) +"wWD" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/light_switch/directional/north, +/turf/open/floor/iron, +/area/station/ai_monitored/command/storage/eva) +"wWE" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/spawner/random/structure/steam_vent, +/turf/open/floor/plating, +/area/station/maintenance/department/science) +"wWH" = ( +/obj/machinery/holopad, +/obj/effect/turf_decal/bot, +/obj/effect/landmark/event_spawn, +/turf/open/floor/iron, +/area/station/cargo/miningoffice) +"wWJ" = ( +/obj/effect/turf_decal/sand/plating, +/obj/machinery/light/small/directional/north, +/turf/open/floor/plating, +/area/station/asteroid) +"wWY" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/blood/old, +/turf/open/floor/plating, +/area/station/maintenance/department/science) +"wWZ" = ( +/obj/effect/turf_decal/tile/blue/opposingcorners{ + dir = 1 + }, +/turf/open/floor/iron/cafeteria, +/area/station/commons/locker) +"wXe" = ( +/obj/machinery/light/directional/north, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/carpet, +/area/station/service/lawoffice) +"wXh" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/spawner/random/maintenance, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/cargo/warehouse/upper) +"wXO" = ( +/obj/structure/cable, +/obj/effect/mapping_helpers/broken_floor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"wXY" = ( +/obj/structure/broken_flooring/side/directional/east, +/turf/open/floor/plating, +/area/station/maintenance/department/medical) +"wYb" = ( +/obj/machinery/computer/turbine_computer{ + mapping_id = "main_turbine" + }, +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) +"wYc" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/chapel{ + dir = 8 + }, +/area/station/service/chapel) +"wYj" = ( +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/east, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/ai_monitored/turret_protected/aisat/uppersouth) +"wYo" = ( +/obj/structure/filingcabinet/chestdrawer, +/obj/item/toy/figure/cmo{ + pixel_y = 9; + pixel_x = -1 + }, +/obj/machinery/airalarm/directional/north, +/turf/open/floor/iron/dark/textured, +/area/station/command/heads_quarters/cmo) +"wYI" = ( +/obj/machinery/door/airlock/command, +/obj/effect/mapping_helpers/airlock/access/all/science/rd, +/obj/effect/turf_decal/tile/purple/fourcorners, +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/autoname, +/turf/open/floor/iron, +/area/station/command/heads_quarters/rd) +"wYO" = ( +/obj/effect/turf_decal/tile/red/anticorner/contrasted, +/obj/machinery/computer/security/telescreen/prison/directional/south, +/obj/machinery/modular_computer/preset/cargochat/security{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/security/office) +"wYW" = ( +/obj/machinery/door/airlock/research{ + autoclose = 0; + frequency = 1449; + id_tag = "xeno_airlock_exterior"; + name = "Xenobiology Lab External Airlock" + }, +/obj/machinery/door_buttons/access_button{ + idDoor = "xeno_airlock_exterior"; + idSelf = "xeno_airlock_control"; + name = "Access Button"; + pixel_y = -24; + req_access = list("xenobiology") + }, +/obj/structure/cable, +/obj/machinery/door/poddoor/preopen{ + id = "xeno_blastdoor"; + name = "Biohazard Containment Door" + }, +/obj/effect/mapping_helpers/airlock/access/all/science/xenobio, +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/trimline/purple/filled/end{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/white/textured_edge{ + dir = 4 + }, +/area/station/science/xenobiology) +"wYY" = ( +/obj/effect/turf_decal/siding/blue{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/command/heads_quarters/cmo) +"wZc" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/spawner/random/structure/steam_vent, +/turf/open/floor/plating, +/area/station/maintenance/department/bridge) +"wZd" = ( +/obj/effect/landmark/event_spawn, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/white, +/area/station/medical/treatment_center) +"wZf" = ( +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 4 + }, +/obj/effect/landmark/start/depsec/supply, +/obj/machinery/light_switch/directional/east, +/obj/machinery/camera/autoname/directional/east, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/security/checkpoint/supply) +"wZj" = ( +/obj/structure/cable, +/obj/effect/landmark/start/hangover, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"wZm" = ( +/obj/structure/ladder, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/maintenance/aft/upper) +"wZw" = ( +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/iron/dark, +/area/station/medical/medbay/central) +"wZz" = ( +/turf/closed/wall/r_wall, +/area/station/tcommsat/server) +"wZI" = ( +/obj/effect/turf_decal/tile/blue/half/contrasted, +/turf/open/floor/iron/white, +/area/station/medical/medbay/lobby) +"wZK" = ( +/obj/structure/table/wood/fancy/red, +/obj/effect/turf_decal/siding/wood, +/obj/machinery/recharger{ + pixel_x = 14 + }, +/obj/item/folder/red, +/obj/item/stamp/head/hos, +/turf/open/floor/wood, +/area/station/command/heads_quarters/hos) +"wZR" = ( +/obj/machinery/telecomms/message_server/preset, +/turf/open/floor/circuit/green/telecomms/mainframe, +/area/station/tcommsat/server) +"wZU" = ( +/obj/item/crowbar/large/heavy, +/turf/open/misc/asteroid, +/area/station/asteroid) +"xad" = ( +/obj/machinery/door/airlock/maintenance_hatch, +/obj/effect/mapping_helpers/airlock/access/all/science/robotics, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/science/robotics/lab) +"xao" = ( +/obj/structure/railing{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/turf/open/floor/catwalk_floor/iron_white, +/area/station/science/lobby) +"xas" = ( +/obj/effect/turf_decal/trimline/blue/filled/line, +/obj/effect/turf_decal/siding/blue{ + dir = 4 + }, +/obj/machinery/vending/wallmed/directional/south, +/turf/open/floor/iron/white, +/area/station/command/heads_quarters/cmo) +"xaw" = ( +/obj/machinery/atmospherics/pipe/smart/manifold/purple/visible{ + dir = 8 + }, +/obj/structure/disposalpipe/trunk/multiz{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/science/ordnance) +"xay" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/science/xenobiology) +"xaz" = ( +/obj/effect/turf_decal/siding/purple/corner, +/turf/open/floor/iron/white/smooth_large, +/area/station/science/research) +"xaC" = ( +/obj/machinery/portable_atmospherics/canister/anesthetic_mix, +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 1 + }, +/obj/structure/window/reinforced/spawner/directional/east, +/obj/machinery/door/window/right/directional/north{ + req_access = list("medical"); + name = "Anti Assistant Protection Door" + }, +/obj/effect/turf_decal/tile/blue/fourcorners, +/turf/open/floor/iron/white, +/area/station/medical/treatment_center) +"xaH" = ( +/obj/structure/filingcabinet, +/obj/machinery/button/ticket_machine{ + pixel_x = 24; + pixel_y = 6 + }, +/obj/machinery/button/door/directional/east{ + id = "hopdesk"; + name = "desk shutter control"; + pixel_y = -6 + }, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/command/heads_quarters/hop) +"xaI" = ( +/obj/structure/cable, +/obj/effect/turf_decal/tile/dark_blue{ + dir = 1 + }, +/obj/effect/turf_decal/tile/dark_blue, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/navbeacon{ + codes_txt = "patrol;next_patrol=P10-Central-Primary"; + location = "C1-Command" + }, +/turf/open/floor/iron, +/area/station/hallway/secondary/command) +"xaM" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/obj/machinery/light/small/directional/east, +/turf/open/floor/iron/grimy, +/area/station/service/chapel/office) +"xaN" = ( +/obj/effect/turf_decal/tile/blue/anticorner/contrasted{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/iron, +/area/station/security/courtroom) +"xaP" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, +/obj/effect/turf_decal/stripes, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"xaY" = ( +/obj/machinery/computer/records/security, +/obj/item/radio/intercom/directional/north, +/turf/open/floor/iron/dark, +/area/station/command/heads_quarters/hos) +"xbg" = ( +/turf/closed/wall/r_wall, +/area/station/science/ordnance/burnchamber) +"xbi" = ( +/obj/effect/landmark/start/depsec/engineering, +/obj/effect/turf_decal/trimline/red/filled/line, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/engineering) +"xbm" = ( +/obj/effect/turf_decal/sand/plating, +/obj/item/pickaxe, +/obj/item/pickaxe{ + pixel_x = 3 + }, +/obj/item/pickaxe{ + pixel_x = -3 + }, +/obj/structure/rack, +/turf/open/floor/plating, +/area/station/asteroid) +"xbr" = ( +/obj/structure/window/reinforced/spawner/directional/west, +/turf/open/floor/glass/reinforced, +/area/station/security/prison) +"xbs" = ( +/obj/machinery/airalarm/directional/south, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/turf/open/floor/iron/stairs/right{ + dir = 8 + }, +/area/station/service/theater) +"xbu" = ( +/obj/structure/ladder{ + icon_state = "ladder10" + }, +/obj/structure/window/spawner/directional/west, +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/department/science) +"xbC" = ( +/obj/effect/turf_decal/siding/purple{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/white/smooth_large, +/area/station/science/research) +"xcb" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark/textured, +/area/station/science/robotics/lab) +"xch" = ( +/obj/machinery/hydroponics/soil, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/camera/autoname/directional/east, +/turf/open/floor/grass, +/area/station/security/prison/garden) +"xck" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 10 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron/white, +/area/station/command/heads_quarters/cmo) +"xcl" = ( +/obj/effect/spawner/random/structure/chair_flipped, +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/turf/open/floor/iron/dark/textured, +/area/station/hallway/secondary/exit/departure_lounge) +"xcm" = ( +/obj/effect/turf_decal/stripes{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"xcq" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/sand/plating, +/turf/open/floor/plating/airless, +/area/station/asteroid) +"xcs" = ( +/obj/structure/cable, +/obj/effect/spawner/random/structure/chair_comfy{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/command/bridge) +"xcC" = ( +/obj/machinery/light/cold/dim/directional/north, +/obj/item/radio/intercom/directional/east, +/obj/machinery/vending/drugs, +/obj/effect/turf_decal/tile/blue/fourcorners, +/turf/open/floor/iron/white, +/area/station/medical/treatment_center) +"xcX" = ( +/obj/machinery/sparker/directional/south{ + id = "Xenobio" + }, +/turf/open/floor/engine/xenobio, +/area/station/science/xenobiology) +"xdf" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/turf/open/floor/carpet, +/area/station/service/chapel/funeral) +"xdj" = ( +/obj/structure/table, +/obj/machinery/newscaster/directional/west, +/obj/effect/spawner/random/trash/food_packaging, +/obj/effect/spawner/random/trash/food_packaging, +/turf/open/floor/iron, +/area/station/commons/fitness/recreation) +"xdm" = ( +/obj/structure/cable, +/obj/effect/landmark/event_spawn, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron/white/textured_large, +/area/station/medical/exam_room) +"xdq" = ( +/obj/effect/turf_decal/siding/white, +/turf/open/floor/iron/herringbone, +/area/station/commons/fitness/recreation) +"xdz" = ( +/obj/structure/cable, +/turf/open/floor/iron/dark/textured_edge, +/area/station/science/xenobiology) +"xdQ" = ( +/obj/structure/cable, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/white, +/area/station/command/heads_quarters/cmo) +"xdT" = ( +/obj/structure/table/reinforced, +/obj/structure/desk_bell, +/obj/structure/cable, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 8; + id = "rndlab2"; + name = "Secondary Research and Development Shutter" + }, +/obj/machinery/door/window/left/directional/east{ + name = "Research Lab Desk"; + req_access = list("science") + }, +/obj/machinery/door/firedoor, +/turf/open/floor/iron/white, +/area/station/science/lab) +"xeh" = ( +/obj/item/instrument/musicalmoth, +/obj/structure/sign/warning/vacuum/external/directional/north, +/turf/open/floor/plating, +/area/station/cargo/storage) +"xeo" = ( +/obj/machinery/door/airlock/maintenance_hatch, +/obj/structure/cable, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 8 + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/hallway/secondary/command) +"xey" = ( +/obj/machinery/camera/autoname/directional/west, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 1 + }, +/obj/structure/railing/corner, +/turf/open/floor/iron/textured, +/area/station/security) +"xeA" = ( +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron, +/area/station/cargo/warehouse/upper) +"xeF" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark/side{ + dir = 9 + }, +/area/station/command/corporate_dock) +"xeJ" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/plating, +/area/station/maintenance/department/science) +"xeS" = ( +/turf/open/floor/iron, +/area/station/commons/storage/primary) +"xeT" = ( +/obj/structure/cable, +/obj/machinery/button/door/directional/east{ + name = "shutter control"; + id = "xbprotect1" + }, +/obj/structure/window/reinforced/spawner/directional/north, +/obj/item/kirbyplants/random, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/catwalk_floor/flat_white, +/area/station/science/xenobiology) +"xeW" = ( +/obj/effect/turf_decal/tile/brown{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/cargo/storage) +"xfa" = ( +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/medical/chemistry/minisat) +"xfi" = ( +/obj/effect/turf_decal/trimline/yellow/filled/corner{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/engineering/main) +"xfn" = ( +/obj/effect/landmark/atmospheric_sanity/ignore_area, +/turf/closed/wall/r_wall, +/area/station/ai_monitored/turret_protected/ai_upload) +"xfJ" = ( +/obj/machinery/door/window/brigdoor/right/directional/west{ + req_access = list("xenobiology") + }, +/obj/machinery/door/window/brigdoor/right/directional/east{ + req_access = list("xenobiology") + }, +/obj/effect/turf_decal/caution/stand_clear{ + dir = 4 + }, +/turf/open/floor/engine, +/area/station/science/xenobiology) +"xfK" = ( +/obj/structure/table, +/obj/item/multitool/circuit{ + pixel_x = -8 + }, +/obj/item/multitool/circuit, +/obj/item/multitool/circuit{ + pixel_x = 7 + }, +/turf/open/floor/iron/white, +/area/station/science/explab) +"xfM" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/maintenance/department/medical) +"xfN" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/cargo/storage) +"xfS" = ( +/obj/structure/sign/departments/aisat/directional/east, +/obj/effect/turf_decal/tile/dark_blue/anticorner/contrasted{ + dir = 4 + }, +/obj/machinery/photobooth, +/turf/open/floor/iron, +/area/station/hallway/secondary/command) +"xgc" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment, +/turf/open/floor/catwalk_floor/flat_white, +/area/station/science/lab) +"xgn" = ( +/obj/structure/mannequin/skeleton{ + starting_items = list() + }, +/obj/machinery/airalarm/directional/west, +/turf/open/floor/wood/parquet, +/area/station/medical/psychology) +"xgq" = ( +/obj/structure/lattice/catwalk, +/obj/structure/railing/corner{ + dir = 1 + }, +/turf/open/openspace, +/area/station/science/xenobiology) +"xgy" = ( +/obj/machinery/atmospherics/components/unary/outlet_injector/monitored/ordnance_burn_chamber_input{ + dir = 8 + }, +/turf/open/floor/engine/vacuum, +/area/station/science/ordnance/burnchamber) +"xgG" = ( +/turf/closed/wall/rust, +/area/station/maintenance/department/medical/central) +"xgN" = ( +/obj/structure/lattice/catwalk, +/obj/machinery/light/directional/south, +/turf/open/openspace, +/area/station/engineering/supermatter/room) +"xgQ" = ( +/obj/structure/cable, +/obj/effect/landmark/start/bitrunner, +/obj/machinery/light/cold/dim/directional/north, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/cargo/bitrunning/den) +"xgZ" = ( +/obj/structure/closet/crate/coffin, +/obj/structure/window/spawner/directional/east, +/turf/open/floor/plating, +/area/station/service/chapel/funeral) +"xhb" = ( +/obj/effect/turf_decal/tile/red/half/contrasted, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/security) +"xhu" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/carpet, +/area/station/command/corporate_showroom) +"xhy" = ( +/turf/open/floor/wood/parquet, +/area/station/service/theater) +"xhJ" = ( +/turf/closed/wall/r_wall, +/area/station/command/heads_quarters/cmo) +"xhV" = ( +/obj/machinery/door/airlock/medical/glass{ + name = "Medbay" + }, +/obj/machinery/door/firedoor, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/station/medical/medbay/lobby) +"xic" = ( +/obj/machinery/door/airlock/research/glass{ + name = "Xenobiology Space Bridge" + }, +/obj/structure/cable, +/obj/effect/mapping_helpers/airlock/access/all/science/xenobio, +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/trimline/purple/filled/arrow_ccw{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/purple/filled/arrow_ccw{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/firealarm/directional/east, +/turf/open/floor/iron/white/smooth_large, +/area/station/science/xenobiology/hallway) +"xih" = ( +/obj/effect/turf_decal/trimline/blue/filled/line, +/obj/machinery/camera/autoname/directional/south{ + network = list("ss13","medbay") + }, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) +"xin" = ( +/obj/effect/turf_decal/tile/red/opposingcorners, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/navbeacon{ + codes_txt = "delivery;dir=1"; + location = "Security" + }, +/turf/open/floor/iron, +/area/station/security/brig/entrance) +"xiy" = ( +/obj/effect/turf_decal/siding/white{ + dir = 10 + }, +/turf/open/floor/iron/herringbone, +/area/station/commons/fitness/recreation) +"xiC" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/machinery/light/small/dim/directional/east, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"xiF" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/blood/splatter, +/obj/effect/decal/cleanable/glass, +/turf/open/floor/iron, +/area/station/cargo/warehouse/upper) +"xiM" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/plating, +/area/station/maintenance/central/greater) +"xiV" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/item/radio/intercom/directional/west, +/obj/structure/displaycase{ + start_showpiece_type = /obj/item/gun/ballistic/rocketlauncher/unrestricted/nanotrasen + }, +/turf/open/floor/wood, +/area/station/command/heads_quarters/qm) +"xiZ" = ( +/obj/structure/table/reinforced, +/obj/item/flashlight, +/obj/item/analyzer{ + pixel_x = 7; + pixel_y = 3 + }, +/obj/item/assembly/signaler, +/obj/item/stack/rods{ + amount = 25 + }, +/obj/item/stack/cable_coil, +/obj/item/gps, +/obj/item/clothing/gloves/color/fyellow, +/obj/item/gps, +/obj/machinery/airalarm/directional/north, +/turf/open/floor/iron, +/area/station/commons/storage/primary) +"xje" = ( +/obj/machinery/airalarm/directional/south, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/turf/open/floor/iron/dark/small, +/area/station/science/cytology) +"xjh" = ( +/obj/effect/landmark/start/hangover, +/turf/open/floor/iron/white, +/area/station/medical/medbay/lobby) +"xjj" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/commons/locker) +"xjl" = ( +/obj/machinery/door/airlock/maintenance_hatch, +/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, +/turf/open/floor/plating, +/area/station/hallway/secondary/exit/departure_lounge) +"xjo" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 9 + }, +/obj/effect/turf_decal/trimline/yellow/filled/corner, +/obj/item/radio/intercom/directional/west, +/obj/effect/landmark/start/chemist, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/iron/textured, +/area/station/medical/pharmacy) +"xjq" = ( +/obj/machinery/computer/pod/old/mass_driver_controller/ordnancedriver{ + pixel_x = 26 + }, +/turf/open/floor/iron/white, +/area/station/science/ordnance/testlab) +"xjw" = ( +/obj/structure/table_frame, +/obj/effect/decal/cleanable/glass, +/obj/item/shard, +/obj/effect/turf_decal/tile/yellow/fourcorners, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/iron/white, +/area/station/medical/chemistry/minisat) +"xjE" = ( +/obj/structure/plasticflaps, +/obj/machinery/conveyor{ + dir = 8; + id = "QMLoad" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/plating, +/area/station/cargo/storage) +"xjQ" = ( +/obj/machinery/shower/directional/south, +/obj/effect/landmark/start/prisoner, +/turf/open/floor/iron/freezer, +/area/station/security/prison/shower) +"xjW" = ( +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/turf/open/floor/plating, +/area/station/maintenance/port/lesser) +"xkc" = ( +/obj/structure/cable/layer3, +/mob/living/simple_animal/bot/secbot/pingsky, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/aisat/foyer) +"xkI" = ( +/obj/effect/decal/cleanable/molten_object, +/turf/open/misc/asteroid, +/area/station/asteroid) +"xkL" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/landmark/event_spawn, +/turf/open/floor/iron/dark, +/area/station/science/server) +"xkO" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/structure/railing{ + dir = 4 + }, +/turf/open/floor/engine, +/area/station/hallway/secondary/entry) +"xla" = ( +/obj/structure/table, +/obj/item/ai_module/core/full/dungeon_master, +/obj/structure/cable, +/turf/open/floor/circuit, +/area/station/ai_monitored/turret_protected/ai_upload) +"xlm" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/frame/machine, +/obj/machinery/airalarm/directional/east, +/turf/open/floor/plating, +/area/station/science/robotics/storage) +"xlo" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"xlv" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/blood/old, +/obj/structure/showcase/horrific_experiment, +/turf/open/floor/iron/white, +/area/station/maintenance/aft/upper) +"xlw" = ( +/obj/structure/hedge, +/obj/machinery/newscaster/directional/west, +/turf/open/floor/iron/textured_large, +/area/station/hallway/primary/central) +"xlB" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/mineral/stacking_unit_console{ + pixel_y = 28 + }, +/turf/open/floor/plating, +/area/station/maintenance/disposal) +"xlD" = ( +/obj/structure/lattice, +/obj/structure/grille, +/turf/open/space/basic, +/area/space/nearstation) +"xlG" = ( +/obj/structure/lattice/catwalk, +/turf/open/openspace, +/area/station/engineering/supermatter/room) +"xlI" = ( +/obj/effect/decal/cleanable/glass, +/obj/effect/mapping_helpers/burnt_floor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/maintenance/department/medical) +"xlJ" = ( +/obj/structure/closet/emcloset, +/obj/effect/turf_decal/stripes, +/obj/machinery/firealarm/directional/north, +/turf/open/floor/iron/dark/textured, +/area/station/hallway/secondary/exit/departure_lounge) +"xlX" = ( +/obj/machinery/duct, +/obj/structure/cable, +/obj/effect/turf_decal/tile/dark_green/opposingcorners, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/hallway/secondary/service) +"xlY" = ( +/obj/structure/bookcase/random/reference, +/turf/open/floor/wood, +/area/station/service/library) +"xma" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/engineering/lobby) +"xmy" = ( +/obj/effect/turf_decal/trimline/yellow/filled/corner{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/white, +/area/station/medical/chemistry) +"xmH" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/trunk/multiz/down{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/engineering/atmos/upper) +"xmM" = ( +/obj/structure/closet/secure_closet/freezer/fridge, +/obj/machinery/power/apc/auto_name/directional/west, +/obj/structure/cable, +/turf/open/floor/iron/kitchen, +/area/station/service/kitchen) +"xmU" = ( +/obj/effect/turf_decal/trimline/blue/filled/corner{ + dir = 1 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/medical/treatment_center) +"xmZ" = ( +/obj/effect/decal/cleanable/dirt, +/obj/item/radio/intercom/directional/south, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) +"xnc" = ( +/obj/machinery/door/airlock/command/glass{ + name = "Bridge" + }, +/obj/effect/mapping_helpers/airlock/access/any/command/general, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "bridgec" + }, +/obj/effect/mapping_helpers/airlock/access/any/admin/general, +/turf/open/floor/iron, +/area/station/hallway/secondary/command) +"xne" = ( +/obj/structure/cable, +/obj/effect/spawner/random/maintenance/two, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/science/xenobiology) +"xnl" = ( +/obj/structure/cable, +/obj/item/radio/intercom/directional/west, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/showroomfloor, +/area/station/engineering/main) +"xnq" = ( +/obj/effect/turf_decal/trimline/blue/filled/line, +/turf/open/floor/iron/white, +/area/station/command/heads_quarters/cmo) +"xnB" = ( +/obj/structure/ladder{ + icon_state = "ladder10" + }, +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/science/xenobiology) +"xnF" = ( +/obj/structure/cable, +/turf/open/floor/iron/dark/side{ + dir = 8 + }, +/area/station/command/emergency_closet) +"xnQ" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/cargo/storage) +"xok" = ( +/obj/machinery/brm, +/obj/machinery/conveyor{ + dir = 4; + id = "brm" + }, +/obj/effect/turf_decal/sand/plating, +/turf/open/floor/plating, +/area/station/cargo/miningoffice) +"xoo" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/blue/filled/corner{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron/white, +/area/station/medical/storage) +"xoM" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/stripes/white/line, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/security/prison) +"xoQ" = ( +/obj/effect/turf_decal/tile/neutral, +/obj/machinery/camera/autoname/directional/east, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"xoR" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 9 + }, +/obj/structure/table, +/obj/item/stack/rods/twentyfive, +/obj/item/stack/cable_coil, +/obj/machinery/camera/autoname/directional/north, +/turf/open/floor/iron, +/area/station/engineering/main) +"xoT" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"xpn" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/stripes/white/line{ + dir = 5 + }, +/turf/open/floor/iron, +/area/station/security/prison) +"xpx" = ( +/obj/effect/decal/cleanable/blood/tracks, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"xpD" = ( +/obj/structure/grille, +/obj/structure/girder, +/turf/open/floor/plating, +/area/station/maintenance/aft/upper) +"xpJ" = ( +/obj/effect/landmark/start/cook, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron/kitchen, +/area/station/service/kitchen) +"xpR" = ( +/obj/machinery/light/small/directional/east, +/obj/effect/mapping_helpers/burnt_floor, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"xpY" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/obj/machinery/duct, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/medical/treatment_center) +"xqa" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/turf/open/floor/plating, +/area/station/maintenance/port/lesser) +"xqe" = ( +/obj/machinery/conveyor_switch{ + id = "bridgedeliver" + }, +/obj/effect/turf_decal/sand/plating, +/turf/open/floor/plating/airless, +/area/station/maintenance/department/science) +"xqB" = ( +/obj/machinery/light/dim/directional/south, +/turf/open/floor/iron/textured, +/area/station/engineering/storage/tech) +"xqE" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/white, +/area/station/medical/chemistry/minisat) +"xqG" = ( +/obj/structure/cable, +/obj/effect/landmark/event_spawn, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/catwalk_floor/flat_white, +/area/station/hallway/secondary/entry) +"xqO" = ( +/obj/docking_port/stationary/escape_pod{ + dir = 8 + }, +/turf/open/space/basic, +/area/space) +"xqY" = ( +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/obj/item/stack/rods/ten, +/turf/open/floor/plating, +/area/station/maintenance/central/greater) +"xrb" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/security/prison/garden) +"xrd" = ( +/obj/structure/table, +/obj/machinery/light/directional/east, +/obj/item/reagent_containers/cup/glass/mug/tea{ + pixel_y = 3; + pixel_x = -5 + }, +/obj/item/food/butterbiscuit{ + pixel_x = 5; + pixel_y = 5 + }, +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/turf/open/floor/iron/dark/textured, +/area/station/hallway/secondary/exit/departure_lounge) +"xrt" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/item/organ/external/horns, +/obj/item/organ/external/antennae, +/obj/item/organ/external/frills, +/obj/item/organ/external/spines, +/obj/item/organ/external/tail/lizard/fake, +/obj/structure/closet/crate/freezer, +/turf/open/floor/plating, +/area/station/maintenance/department/science) +"xrG" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/stripes/asteroid/line, +/obj/effect/turf_decal/sand/plating, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"xrH" = ( +/obj/structure/transport/linear/public{ + icon = 'icons/obj/smooth_structures/catwalk.dmi'; + base_icon_state = "catwalk"; + icon_state = "catwalk-21" + }, +/turf/open/floor/plating/elevatorshaft, +/area/station/cargo/storage) +"xrO" = ( +/obj/item/bedsheet/mime, +/obj/structure/bed/maint, +/obj/effect/decal/cleanable/dirt, +/obj/item/radio/intercom/directional/north, +/obj/machinery/firealarm/directional/east, +/turf/open/floor/plating, +/area/station/service/theater) +"xrT" = ( +/obj/machinery/oven/range, +/obj/structure/extinguisher_cabinet/directional/north, +/turf/open/floor/iron/kitchen, +/area/station/service/kitchen) +"xrU" = ( +/obj/effect/turf_decal/bot_white, +/obj/effect/spawner/random/maintenance, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/cargo/storage) +"xrV" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/junction{ + dir = 4 + }, +/turf/open/floor/wood, +/area/station/commons/lounge) +"xsj" = ( +/obj/machinery/netpod, +/obj/structure/cable, +/obj/structure/sign/poster/contraband/space_cube/directional/north, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/cargo/bitrunning/den) +"xst" = ( +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/security/office) +"xsv" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/machinery/button/door/directional/north{ + id = "evashutter"; + name = "E.V.A. Storage Shutter Control"; + req_access = list("command") + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"xsG" = ( +/obj/machinery/light/small/broken/directional/west, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/maintenance/aft/upper) +"xsJ" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/navbeacon{ + codes_txt = "patrol;next_patrol=P12-Central-Primary"; + location = "S1-Security" + }, +/turf/open/floor/iron, +/area/station/hallway/primary/fore) +"xsM" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/camera/autoname/directional/west{ + network = list("ss13","medbay") + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron/white, +/area/station/medical/treatment_center) +"xsN" = ( +/obj/structure/window/reinforced/spawner/directional/north, +/obj/structure/lattice, +/turf/open/space/basic, +/area/space/nearstation) +"xsR" = ( +/obj/effect/turf_decal/tile/brown/anticorner/contrasted{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/cargo/sorting) +"xtb" = ( +/obj/machinery/light/directional/north, +/turf/open/floor/engine, +/area/station/medical/chemistry) +"xtp" = ( +/obj/effect/turf_decal/tile/red/anticorner/contrasted{ + dir = 4 + }, +/obj/machinery/light/small/directional/north, +/obj/machinery/atmospherics/pipe/multiz/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/multiz/scrubbers/hidden/layer2, +/obj/structure/cable/multilayer/multiz, +/turf/open/floor/iron, +/area/station/security) +"xtA" = ( +/obj/effect/turf_decal/tile/neutral/diagonal_centre, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/service/chapel/funeral) +"xtB" = ( +/obj/machinery/firealarm/directional/west, +/turf/open/floor/catwalk_floor, +/area/station/cargo/storage) +"xtH" = ( +/obj/machinery/power/apc/auto_name/directional/west, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 8 + }, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/security/office) +"xtN" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/structure/table/wood, +/obj/item/flashlight/lamp/green{ + pixel_x = 1; + pixel_y = 5 + }, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/turf/open/floor/wood, +/area/station/service/library) +"xtZ" = ( +/obj/structure/disposalpipe/trunk/multiz/down{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/science/research) +"xun" = ( +/obj/effect/turf_decal/tile/red/anticorner/contrasted, +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/fore) +"xuD" = ( +/obj/structure/cable, +/obj/machinery/button/door/directional/south{ + id = "maintbridge"; + name = "Shutter Control"; + pixel_x = 24 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"xuF" = ( +/obj/item/radio/intercom/directional/east, +/obj/structure/sign/poster/official/random/directional/south, +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ + dir = 9 + }, +/obj/effect/turf_decal/tile/yellow{ + dir = 4 + }, +/obj/effect/turf_decal/tile/yellow{ + dir = 8 + }, +/turf/open/floor/iron/dark/corner, +/area/station/engineering/atmos/pumproom) +"xuK" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/window/left/directional/south{ + req_access = list("medical"); + name = "Reception Desk" + }, +/obj/machinery/door/firedoor, +/obj/effect/spawner/random/bureaucracy/folder, +/obj/effect/spawner/random/bureaucracy/pen, +/turf/open/floor/iron/white, +/area/station/medical/exam_room) +"xuR" = ( +/obj/machinery/power/apc/auto_name/directional/west, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 8 + }, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/hallway/primary/fore) +"xuZ" = ( +/obj/structure/cable, +/obj/effect/turf_decal/tile/yellow, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/dark/corner{ + dir = 8 + }, +/area/station/engineering/atmos/storage/gas) +"xvg" = ( +/obj/machinery/atmospherics/pipe/bridge_pipe/cyan/visible{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/bridge_pipe/green/visible, +/turf/open/floor/iron, +/area/station/engineering/atmos) +"xvr" = ( +/obj/machinery/computer/prisoner/management{ + dir = 1 + }, +/obj/machinery/power/apc/auto_name/directional/west, +/obj/structure/cable, +/turf/open/floor/carpet/black, +/area/station/command/heads_quarters/hos) +"xvH" = ( +/obj/machinery/door/airlock/grunge{ + name = "Quiet Room" + }, +/obj/structure/disposalpipe/segment{ + dir = 2 + }, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/carpet/purple, +/area/station/service/library) +"xvU" = ( +/obj/effect/landmark/event_spawn, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/white/smooth_half, +/area/station/medical/pharmacy) +"xwe" = ( +/obj/effect/turf_decal/sand/plating, +/obj/effect/turf_decal/stripes/full, +/obj/effect/mapping_helpers/airlock/access/any/science/general, +/obj/machinery/door/airlock/maintenance/external/glass, +/turf/open/floor/iron/dark/small, +/area/station/science/cytology) +"xwf" = ( +/obj/structure/chair/plastic{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/spawner/random/trash/mess, +/turf/open/floor/iron/grimy, +/area/station/maintenance/central/lesser) +"xwh" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/engineering/gravity_generator) +"xws" = ( +/turf/closed/wall, +/area/station/engineering/supermatter/room) +"xwu" = ( +/obj/machinery/firealarm/directional/north, +/turf/open/floor/iron/textured_large, +/area/station/cargo/lobby) +"xwz" = ( +/obj/structure/lattice/catwalk, +/obj/machinery/power/smes/full, +/obj/structure/cable, +/turf/open/floor/catwalk_floor/iron_dark/telecomms, +/area/station/ai_monitored/turret_protected/ai) +"xwA" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/plating, +/area/station/asteroid) +"xwD" = ( +/obj/effect/turf_decal/stripes{ + dir = 1 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable/layer1, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"xwG" = ( +/obj/structure/railing, +/obj/effect/spawner/random/structure/closet_private, +/turf/open/floor/carpet/red, +/area/station/command/heads_quarters/qm) +"xwO" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/disposalpipe/segment, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"xxe" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/power/apc/auto_name/directional/east, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"xxi" = ( +/obj/structure/closet/secure_closet/atmospherics, +/obj/effect/turf_decal/stripes{ + dir = 10 + }, +/obj/machinery/firealarm/directional/west, +/turf/open/floor/iron/dark, +/area/station/engineering/atmospherics_engine) +"xxn" = ( +/obj/machinery/door/airlock/atmos/glass{ + name = "Distribution Loop" + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/engineering/atmos/pumproom) +"xxs" = ( +/obj/machinery/door/airlock/multi_tile/public{ + name = "Corporate Private Dock" + }, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/access/any/command/general, +/obj/effect/mapping_helpers/airlock/access/any/admin/general, +/turf/open/floor/iron/dark/smooth_large, +/area/station/command/corporate_dock) +"xxH" = ( +/obj/machinery/firealarm/directional/south, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/ai_monitored/command/storage/eva) +"xxJ" = ( +/obj/machinery/atmospherics/pipe/smart/manifold/yellow/visible{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/engineering/atmos) +"xxT" = ( +/obj/structure/chair/wood, +/obj/effect/turf_decal/siding/wood{ + dir = 5 + }, +/obj/structure/cable, +/turf/open/floor/carpet, +/area/station/service/chapel/funeral) +"xxV" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 2 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/wood, +/area/station/service/library) +"xyG" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/power/apc/auto_name/directional/south, +/obj/structure/closet/crate/internals, +/obj/effect/spawner/random/maintenance, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/cargo/warehouse) +"xyN" = ( +/obj/effect/spawner/random/structure/grille, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"xyP" = ( +/obj/structure/cable, +/obj/machinery/light/small/dim/directional/north, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"xza" = ( +/mob/living/basic/bot/medbot/autopatrol, +/obj/effect/turf_decal/tile/blue/half/contrasted{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/medical/medbay/lobby) +"xzj" = ( +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/commons/locker) +"xzp" = ( +/obj/docking_port/stationary{ + dwidth = 2; + height = 13; + name = "port bay 2"; + shuttle_id = "ferry_home"; + width = 5; + dir = 2 + }, +/turf/open/floor/engine, +/area/station/command/corporate_dock) +"xzG" = ( +/obj/item/kirbyplants/random, +/turf/open/floor/iron/white, +/area/station/medical/exam_room) +"xzJ" = ( +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/maintenance/department/engine) +"xzK" = ( +/obj/machinery/door/airlock{ + id_tag = "u3"; + name = "Unit 3" + }, +/turf/open/floor/iron/freezer, +/area/station/commons/toilet/restrooms) +"xzP" = ( +/mob/living/carbon/human/species/monkey, +/obj/structure/flora/bush/sparsegrass/style_random, +/turf/open/floor/grass, +/area/station/medical/virology) +"xzT" = ( +/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ + dir = 10 + }, +/turf/open/space/basic, +/area/space/nearstation) +"xzZ" = ( +/obj/effect/turf_decal/tile/red/anticorner/contrasted{ + dir = 1 + }, +/obj/structure/table, +/obj/item/camera, +/obj/machinery/recharger, +/turf/open/floor/iron, +/area/station/security/interrogation) +"xAa" = ( +/obj/machinery/computer/upload/ai, +/obj/machinery/airalarm/directional/west, +/turf/open/floor/circuit/red, +/area/station/ai_monitored/turret_protected/ai_upload) +"xAd" = ( +/obj/effect/turf_decal/sand/plating, +/turf/open/floor/plating, +/area/station/maintenance/department/science) +"xAl" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/button/door/directional/south{ + id = "boutique"; + name = "shutter control" + }, +/obj/structure/filingcabinet/chestdrawer, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/turf/open/floor/wood/large, +/area/station/cargo/boutique) +"xAm" = ( +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"xAr" = ( +/obj/structure/ladder{ + icon_state = "ladder10" + }, +/turf/open/floor/plating, +/area/station/maintenance/port/lesser) +"xAy" = ( +/turf/closed/wall/r_wall, +/area/station/engineering/storage/tech) +"xAH" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/maintenance/department/engine) +"xAN" = ( +/obj/machinery/door/airlock/public/glass, +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/station/hallway/secondary/command) +"xAR" = ( +/obj/machinery/button/elevator/directional/east{ + id = "aisat" + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/iron/dark/smooth_large, +/area/station/ai_monitored/turret_protected/aisat_interior) +"xAV" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/security/prison) +"xBf" = ( +/obj/effect/turf_decal/tile/brown/half/contrasted, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/cargo/sorting) +"xBl" = ( +/obj/structure/table/wood, +/obj/item/flashlight/lamp, +/obj/machinery/power/apc/auto_name/directional/east, +/obj/structure/cable, +/turf/open/floor/iron/grimy, +/area/station/service/chapel/office) +"xBn" = ( +/obj/effect/landmark/start/roboticist, +/turf/open/floor/iron/dark/textured, +/area/station/science/robotics/lab) +"xBs" = ( +/obj/machinery/meter, +/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ + dir = 4 + }, +/turf/closed/wall/r_wall, +/area/station/engineering/atmos) +"xBz" = ( +/obj/structure/closet/emcloset, +/obj/machinery/light/directional/west, +/turf/open/floor/iron/textured, +/area/station/hallway/primary/central) +"xBI" = ( +/obj/effect/spawner/random/vending/colavend, +/turf/open/floor/iron/textured, +/area/station/hallway/primary/central) +"xBR" = ( +/obj/effect/turf_decal/tile/red/half/contrasted, +/obj/structure/cable, +/obj/machinery/power/port_gen/pacman/pre_loaded{ + anchored = 1 + }, +/obj/effect/turf_decal/bot, +/obj/structure/sign/warning/electric_shock/directional/south, +/turf/open/floor/iron/dark, +/area/station/security/execution/education) +"xBS" = ( +/turf/closed/wall, +/area/station/medical/surgery/theatre) +"xBV" = ( +/obj/machinery/atmospherics/components/binary/volume_pump, +/obj/effect/turf_decal/tile/yellow{ + dir = 8 + }, +/turf/open/floor/iron/dark/corner{ + dir = 1 + }, +/area/station/engineering/atmos/pumproom) +"xBW" = ( +/obj/machinery/light/floor, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark/textured, +/area/station/maintenance/radshelter/medical) +"xCf" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/station/engineering/main) +"xCh" = ( +/obj/effect/turf_decal/tile/dark_red/opposingcorners, +/obj/machinery/door/airlock{ + name = "Bar" + }, +/obj/effect/mapping_helpers/airlock/access/all/service/bar, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/service/bar/backroom) +"xCq" = ( +/obj/effect/landmark/start/scientist, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/white, +/area/station/science/explab) +"xCw" = ( +/obj/effect/turf_decal/siding/purple, +/obj/structure/chair/sofa/bench, +/turf/open/floor/iron/white/textured_large, +/area/station/science/research) +"xCA" = ( +/obj/structure/rack, +/obj/effect/spawner/random/entertainment/deck, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/wood/parquet, +/area/station/cargo/boutique) +"xCI" = ( +/obj/structure/broken_flooring/side/directional/east, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/central/greater) +"xCM" = ( +/obj/machinery/door/airlock/grunge{ + name = "Quiet Room" + }, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/carpet/purple, +/area/station/service/library) +"xCX" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/misc/asteroid, +/area/station/asteroid) +"xDf" = ( +/obj/machinery/door/poddoor/shutters/window/preopen{ + name = "Security Shutters"; + id = "xbprotect1"; + dir = 8 + }, +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/science/xenobiology) +"xDh" = ( +/obj/structure/sign/picture_frame/showroom/three{ + pixel_x = -8; + pixel_y = -32 + }, +/obj/structure/sign/picture_frame/showroom/four{ + pixel_x = 8; + pixel_y = -32 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/turf/open/floor/wood/tile, +/area/station/command/corporate_showroom) +"xDk" = ( +/obj/effect/turf_decal/trimline/yellow/filled/corner{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/engineering/storage) +"xDn" = ( +/obj/machinery/door/airlock/engineering{ + name = "Engine Room" + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/obj/structure/cable, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 4 + }, +/obj/machinery/door/firedoor, +/obj/effect/landmark/navigate_destination, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/main) +"xDp" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 9 + }, +/turf/open/floor/iron/white, +/area/station/medical/treatment_center) +"xDI" = ( +/obj/machinery/light/floor, +/turf/open/floor/iron/dark/smooth_large, +/area/station/command/meeting_room) +"xDW" = ( +/obj/effect/turf_decal/tile/red/anticorner/contrasted{ + dir = 1 + }, +/obj/machinery/light/small/directional/north, +/obj/item/radio/intercom/directional/west, +/obj/structure/disposalpipe/trunk/multiz/down, +/obj/structure/closet/crate/bin, +/turf/open/floor/iron, +/area/station/security) +"xEl" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/multi_tile/public/glass{ + name = "Art Storage" + }, +/turf/open/floor/iron, +/area/station/commons/storage/art) +"xEr" = ( +/obj/machinery/computer/telecomms/monitor, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/camera/autoname/directional/west{ + network = list("ss13","tcomms") + }, +/turf/open/floor/iron/dark/telecomms, +/area/station/tcommsat/server) +"xEs" = ( +/turf/closed/wall, +/area/station/science/xenobiology) +"xEL" = ( +/obj/structure/closet/firecloset, +/obj/effect/turf_decal/stripes, +/turf/open/floor/iron/dark/textured, +/area/station/hallway/secondary/exit/departure_lounge) +"xET" = ( +/obj/machinery/holopad, +/obj/effect/turf_decal/bot_red, +/turf/open/floor/iron/white, +/area/station/science/lobby) +"xEW" = ( +/obj/structure/closet/toolcloset, +/obj/effect/turf_decal/tile/yellow/anticorner/contrasted{ + dir = 1 + }, +/obj/item/clothing/gloves/color/yellow{ + siemens_coefficient = 5; + name = "unsulated gloves" + }, +/turf/open/floor/iron, +/area/station/commons/storage/tools) +"xEZ" = ( +/obj/structure/lattice/catwalk, +/obj/structure/cable, +/obj/structure/railing{ + dir = 8 + }, +/obj/machinery/firealarm/directional/east, +/turf/open/openspace, +/area/station/security/prison/garden) +"xFd" = ( +/obj/machinery/light/directional/east, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 6 + }, +/turf/open/floor/iron, +/area/station/engineering/lobby) +"xFh" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/plating, +/area/station/maintenance/port/lesser) +"xFt" = ( +/obj/structure/railing/corner{ + dir = 4 + }, +/turf/open/floor/glass, +/area/station/command/meeting_room) +"xFH" = ( +/obj/structure/stairs/east, +/turf/open/floor/iron/white/smooth_large, +/area/station/science/lab) +"xFP" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/carpet/purple, +/area/station/service/library) +"xFT" = ( +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/obj/effect/turf_decal/trimline/green/filled/corner, +/turf/open/floor/iron, +/area/station/service/hydroponics) +"xGe" = ( +/obj/effect/mapping_helpers/burnt_floor, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/department/medical) +"xGg" = ( +/obj/machinery/doppler_array{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/station/science/ordnance/testlab) +"xGo" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 6 + }, +/obj/structure/closet/firecloset, +/turf/open/floor/iron/white, +/area/station/hallway/secondary/entry) +"xGB" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/obj/effect/turf_decal/delivery, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 6 + }, +/obj/structure/closet/firecloset, +/turf/open/floor/iron/checker, +/area/station/science/research) +"xGC" = ( +/obj/structure/chair/stool/bar/directional/north, +/obj/item/radio/intercom/directional/west, +/turf/open/floor/wood, +/area/station/service/cafeteria) +"xGG" = ( +/obj/machinery/computer/camera_advanced/xenobio, +/obj/effect/turf_decal/stripes/line, +/obj/item/storage/box/monkeycubes, +/turf/open/floor/iron/white/textured_large, +/area/station/science/xenobiology) +"xGX" = ( +/obj/machinery/pdapainter{ + pixel_y = 2 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/machinery/airalarm/directional/south, +/obj/item/storage/box/stickers{ + pixel_y = 16 + }, +/turf/open/floor/iron/dark, +/area/station/command/heads_quarters/hop) +"xGY" = ( +/obj/item/radio/intercom/directional/south, +/turf/open/floor/engine, +/area/station/science/auxlab/firing_range) +"xGZ" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 4 + }, +/obj/structure/disposalpipe/junction{ + dir = 1 + }, +/obj/structure/cable, +/obj/machinery/duct, +/obj/effect/turf_decal/trimline/blue/filled/corner{ + dir = 1 + }, +/turf/open/floor/iron/white, +/area/station/medical/treatment_center) +"xHB" = ( +/obj/machinery/atmospherics/pipe/multiz/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/multiz/scrubbers/visible/layer2, +/turf/open/floor/plating, +/area/station/command/corporate_showroom) +"xHT" = ( +/obj/structure/cable, +/obj/machinery/light/warm/dim/directional/south, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/yellow/filled/line, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/white, +/area/station/medical/chemistry/minisat) +"xHY" = ( +/turf/open/floor/iron/white, +/area/station/medical/medbay/lobby) +"xIh" = ( +/obj/effect/turf_decal/siding/thinplating_new{ + dir = 4 + }, +/turf/open/floor/glass/reinforced, +/area/station/engineering/atmos/upper) +"xIl" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/siding/purple{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/white, +/area/station/ai_monitored/turret_protected/ai_upload_foyer) +"xIm" = ( +/obj/structure/broken_flooring/pile, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/mapping_helpers/broken_floor, +/obj/machinery/light/small/directional/north, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"xIz" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/ai_monitored/command/storage/eva) +"xIN" = ( +/obj/structure/railing, +/obj/machinery/door/firedoor/border_only, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wood, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/wood/tile, +/area/station/service/bar) +"xIP" = ( +/obj/structure/window/fulltile, +/turf/open/misc/asteroid, +/area/station/asteroid) +"xIV" = ( +/turf/closed/wall/r_wall, +/area/station/engineering/supermatter) +"xJd" = ( +/obj/effect/spawner/random/decoration/glowstick, +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/spawner/random/trash/mess, +/turf/open/floor/plating, +/area/station/maintenance/central/greater) +"xJe" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/item/radio/intercom/directional/west, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"xJt" = ( +/obj/effect/turf_decal/sand/plating, +/obj/machinery/light/small/directional/south, +/obj/structure/broken_flooring/pile, +/obj/machinery/atmospherics/components/binary/pump/off/green/hidden{ + dir = 4; + name = "Aux Oxygen To Port" + }, +/turf/open/floor/plating, +/area/station/science/ordnance) +"xJA" = ( +/obj/structure/table/wood/fancy/blue, +/obj/effect/spawner/random/aimodule/neutral, +/obj/structure/window/reinforced/spawner/directional/north, +/obj/machinery/door/window/right/directional/east{ + name = "Core Modules"; + req_access = list("captain") + }, +/turf/open/floor/circuit, +/area/station/ai_monitored/turret_protected/ai_upload) +"xJQ" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 4 + }, +/obj/machinery/light/cold/directional/east, +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/station/medical/exam_room) +"xJT" = ( +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/construction/mining/aux_base) +"xKh" = ( +/obj/structure/closet/wardrobe/miner, +/obj/effect/turf_decal/tile/brown/anticorner/contrasted{ + dir = 1 + }, +/obj/machinery/requests_console/directional/south{ + department = "Mining"; + name = "Mining Requests Console" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/cargo/miningoffice) +"xKo" = ( +/turf/closed/wall, +/area/station/maintenance/port/greater) +"xKp" = ( +/obj/structure/closet/preopen{ + name = "level 3 biohazard gear closet"; + icon_state = "bio" + }, +/obj/effect/turf_decal/tile/green/anticorner/contrasted{ + dir = 8 + }, +/obj/item/radio/intercom/directional/west, +/obj/effect/mapping_helpers/broken_floor, +/obj/item/tank/internals/oxygen, +/turf/open/floor/iron/white/textured, +/area/station/maintenance/department/medical/central) +"xKx" = ( +/mob/living/basic/mothroach, +/turf/open/misc/asteroid, +/area/station/asteroid) +"xKC" = ( +/obj/structure/table/glass, +/obj/item/clothing/head/utility/hardhat, +/obj/item/clothing/head/utility/hardhat{ + pixel_y = 5 + }, +/turf/open/floor/iron, +/area/station/engineering/lobby) +"xKV" = ( +/obj/structure/cable, +/obj/effect/turf_decal/tile/red/opposingcorners, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/turf/open/floor/iron, +/area/station/security) +"xLg" = ( +/obj/structure/cable, +/obj/structure/broken_flooring/side/directional/east, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/solars/starboard/fore) +"xLu" = ( +/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ + dir = 4 + }, +/obj/structure/lattice, +/turf/open/space/basic, +/area/space/nearstation) +"xLN" = ( +/obj/structure/cable, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/white, +/area/station/medical/treatment_center) +"xMg" = ( +/obj/machinery/shower/directional/south, +/obj/effect/spawner/random/trash/soap, +/turf/open/floor/iron/freezer, +/area/station/commons/toilet/restrooms) +"xMk" = ( +/obj/effect/turf_decal/tile/neutral, +/obj/machinery/door/firedoor, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"xMJ" = ( +/obj/structure/cable, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/wood/tile, +/area/station/command/corporate_showroom) +"xMY" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/table, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/iron, +/area/station/cargo/warehouse/upper) +"xMZ" = ( +/obj/structure/bodycontainer/morgue/beeper_off{ + dir = 8 + }, +/obj/machinery/camera/autoname/directional/east{ + network = list("ss13","medbay") + }, +/turf/open/floor/iron/dark/textured, +/area/station/medical/morgue) +"xNb" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/machinery/button/door/directional/south{ + id = "capshut"; + pixel_x = -8; + name = "shutter control" + }, +/obj/machinery/fax{ + fax_name = "Captain's Office"; + name = "Captain's Fax Machine" + }, +/obj/structure/table/reinforced, +/obj/machinery/keycard_auth/directional/south{ + pixel_y = -24; + pixel_x = 8 + }, +/turf/open/floor/carpet/royalblue, +/area/station/command/heads_quarters/captain/private) +"xNh" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/obj/machinery/camera/autoname/directional/north, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/station/command/corporate_dock) +"xNl" = ( +/obj/structure/chair/office/tactical{ + dir = 4 + }, +/obj/effect/landmark/start/security_officer, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/station/security/office) +"xNo" = ( +/obj/machinery/light_switch/directional/east, +/obj/structure/table, +/obj/machinery/light/small/directional/east, +/obj/item/reagent_containers/cup/beaker/large{ + pixel_y = 14; + pixel_x = 6 + }, +/obj/item/reagent_containers/cup/beaker{ + pixel_y = 7; + pixel_x = 10 + }, +/obj/item/book/manual/wiki/cytology{ + pixel_x = -3; + pixel_y = 2 + }, +/obj/item/biopsy_tool{ + pixel_x = -14; + pixel_y = 4 + }, +/turf/open/floor/iron/dark/small, +/area/station/science/cytology) +"xNp" = ( +/obj/effect/turf_decal/stripes{ + dir = 1 + }, +/turf/open/floor/engine, +/area/station/engineering/atmospherics_engine) +"xNq" = ( +/obj/effect/turf_decal/tile/red/half/contrasted, +/turf/open/floor/iron, +/area/station/hallway/primary/fore) +"xNy" = ( +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, +/obj/structure/extinguisher_cabinet/directional/east, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/security/armory) +"xOg" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/effect/spawner/random/engineering/tracking_beacon, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/security/courtroom) +"xOo" = ( +/obj/structure/cable, +/obj/machinery/power/smes, +/turf/open/floor/plating, +/area/station/maintenance/solars/port) +"xOp" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/turf/open/floor/iron, +/area/station/hallway/secondary/exit/departure_lounge) +"xOr" = ( +/obj/structure/cable, +/obj/structure/extinguisher_cabinet/directional/west, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/turf/open/floor/wood/tile, +/area/station/service/bar) +"xOC" = ( +/obj/effect/turf_decal/tile/dark_blue/half/contrasted, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/hallway/secondary/command) +"xOF" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/turf/open/floor/iron/white, +/area/station/medical/virology) +"xOJ" = ( +/obj/machinery/door/airlock/highsecurity{ + name = "Gravity Generator Room" + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/construction, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/engineering/gravity_generator) +"xOK" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/maintenance/port/greater) +"xOO" = ( +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 4 + }, +/obj/machinery/light/directional/east, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/iron, +/area/station/security/warden) +"xOQ" = ( +/turf/open/floor/iron/white, +/area/station/medical/treatment_center) +"xOU" = ( +/turf/closed/wall, +/area/station/science/robotics/lab) +"xPo" = ( +/obj/effect/turf_decal/box/corners, +/turf/open/floor/plating/elevatorshaft, +/area/station/ai_monitored/turret_protected/aisat_interior) +"xPH" = ( +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/security/prison) +"xPL" = ( +/obj/effect/turf_decal/tile/yellow/half/contrasted, +/turf/open/floor/iron, +/area/station/commons/storage/tools) +"xPW" = ( +/obj/structure/disposalpipe/sorting/mail/flip{ + dir = 1 + }, +/obj/effect/mapping_helpers/mail_sorting/supply/disposals, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"xPZ" = ( +/obj/structure/ladder{ + icon_state = "ladder10" + }, +/obj/machinery/light/warm/directional/north, +/turf/open/floor/grass, +/area/station/science/genetics) +"xQe" = ( +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/construction/mining/aux_base) +"xQk" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/spawner/random/trash/mess, +/turf/open/floor/iron/grimy, +/area/station/maintenance/central/lesser) +"xQv" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/wood, +/area/station/commons/lounge) +"xQB" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/engineering/atmos) +"xQH" = ( +/turf/closed/wall, +/area/station/commons/locker) +"xQN" = ( +/obj/effect/spawner/random/structure/crate_loot, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"xQS" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/spawner/random/structure/steam_vent, +/turf/open/floor/plating, +/area/station/maintenance/port/greater) +"xQW" = ( +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 1 + }, +/obj/structure/table, +/obj/item/storage/fancy/donut_box, +/obj/machinery/firealarm/directional/north, +/turf/open/floor/iron, +/area/station/security) +"xQX" = ( +/obj/effect/spawner/random/structure/crate, +/turf/open/floor/plating, +/area/station/maintenance/central/greater) +"xRj" = ( +/obj/structure/fence{ + dir = 4 + }, +/turf/open/floor/catwalk_floor, +/area/station/cargo/storage) +"xRu" = ( +/obj/effect/landmark/start/ai/secondary, +/obj/machinery/door/window/brigdoor/left/directional/north{ + name = "Tertiary AI Core Access"; + req_access = list("ai_upload"); + pixel_y = 3 + }, +/obj/item/radio/intercom/directional/south{ + pixel_x = -27; + freerange = 1; + listening = 0; + name = "Common Channel" + }, +/obj/item/radio/intercom/directional/south{ + pixel_x = 27; + frequency = 1447; + freerange = 1; + listening = 0; + name = "Private Channel" + }, +/obj/machinery/flasher/directional/east{ + pixel_y = 8; + id = "AI" + }, +/turf/open/floor/circuit/green, +/area/station/ai_monitored/turret_protected/ai) +"xRG" = ( +/obj/structure/chair/wood{ + dir = 4 + }, +/turf/open/floor/wood, +/area/station/commons/lounge) +"xRH" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"xRL" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/port/lesser) +"xRP" = ( +/obj/machinery/light/small/directional/north, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/carpet, +/area/station/medical/psychology) +"xRU" = ( +/obj/effect/turf_decal/tile/neutral, +/obj/structure/chair/sofa/bench/left{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"xSE" = ( +/obj/machinery/door/poddoor/lift/preopen{ + transport_linked_id = "cargo" + }, +/obj/effect/turf_decal/stripes, +/obj/effect/turf_decal/stripes{ + dir = 1 + }, +/obj/machinery/door/firedoor, +/turf/open/floor/iron/dark/textured_half, +/area/station/cargo/storage) +"xTa" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/preopen{ + id = "xenobio6"; + name = "Xenobio Pen 6 Blast Door" + }, +/turf/open/floor/plating, +/area/station/science/xenobiology) +"xTb" = ( +/obj/machinery/light/small/directional/south, +/obj/structure/closet/emcloset/anchored, +/turf/open/floor/plating, +/area/station/cargo/storage) +"xTs" = ( +/obj/effect/landmark/event_spawn, +/turf/open/floor/iron/dark, +/area/station/science/ordnance) +"xTw" = ( +/obj/structure/rack, +/obj/effect/spawner/random/techstorage/engineering_all, +/turf/open/floor/iron/textured, +/area/station/engineering/storage/tech) +"xTI" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/station/cargo/storage) +"xTP" = ( +/obj/machinery/atmospherics/pipe/smart/simple/green/visible{ + dir = 5 + }, +/turf/open/floor/iron, +/area/station/engineering/atmos/upper) +"xTZ" = ( +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/wood/tile, +/area/station/service/bar) +"xUf" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/white, +/area/station/medical/storage) +"xUx" = ( +/obj/structure/flora/rock/style_random, +/turf/open/misc/asteroid, +/area/station/asteroid) +"xUy" = ( +/obj/structure/chair/office{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/turf/open/floor/carpet/purple, +/area/station/service/library) +"xUA" = ( +/obj/structure/lattice/catwalk, +/obj/structure/fluff/beach_umbrella/science{ + deconstructible = 1 + }, +/turf/open/space/basic, +/area/space/nearstation) +"xUR" = ( +/obj/machinery/suit_storage_unit/standard_unit, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/camera/motion/directional/east{ + c_tag = "E.V.A. Storage" + }, +/obj/effect/turf_decal/delivery, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/command/storage/eva) +"xUT" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/obj/item/radio/intercom/directional/west, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/science/xenobiology) +"xUW" = ( +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/port/lesser) +"xVg" = ( +/obj/structure/cable, +/obj/effect/turf_decal/siding/purple{ + dir = 10 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/white/smooth_large, +/area/station/science/research) +"xVk" = ( +/obj/effect/turf_decal/tile/yellow{ + dir = 8 + }, +/turf/open/floor/iron/dark/corner{ + dir = 1 + }, +/area/station/engineering/atmos/upper) +"xVt" = ( +/obj/structure/window/reinforced/spawner/directional/north, +/turf/open/floor/engine, +/area/station/science/xenobiology) +"xVK" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/turf/open/floor/iron/dark/textured, +/area/station/science/robotics/lab) +"xWb" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/iron/white, +/area/station/science/lab) +"xWd" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/service/janitor) +"xWg" = ( +/obj/structure/cable, +/obj/machinery/door/airlock/engineering{ + name = "Tech Storage" + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/tech_storage, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/landmark/navigate_destination/techstorage, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 1 + }, +/turf/open/floor/iron/textured, +/area/station/engineering/storage/tech) +"xWi" = ( +/obj/structure/cable, +/obj/machinery/door/airlock/public/glass, +/obj/effect/mapping_helpers/airlock/access/any/medical/maintenance, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"xWq" = ( +/obj/structure/flora/bush/grassy/style_random, +/turf/open/floor/grass, +/area/station/science/genetics) +"xWs" = ( +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/firealarm/directional/east, +/turf/open/floor/iron/dark, +/area/station/medical/medbay/central) +"xWK" = ( +/obj/machinery/power/apc/auto_name/directional/south, +/obj/effect/turf_decal/tile/red/half/contrasted, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/security/brig) +"xWN" = ( +/obj/machinery/door/poddoor/shutters/window{ + id = "gateshutter"; + name = "Gateway Access Shutter"; + dir = 8 + }, +/turf/open/floor/iron, +/area/station/command/gateway) +"xWQ" = ( +/obj/structure/cable, +/obj/effect/landmark/start/bitrunner, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/cargo/bitrunning/den) +"xXh" = ( +/obj/machinery/power/shieldwallgen, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/cable, +/obj/machinery/airalarm/directional/west, +/turf/open/floor/iron/dark/side{ + dir = 8 + }, +/area/station/command/emergency_closet) +"xXi" = ( +/obj/machinery/griddle, +/turf/open/floor/iron/kitchen, +/area/station/service/kitchen) +"xXm" = ( +/obj/structure/table, +/obj/item/storage/box/masks{ + pixel_x = 4; + pixel_y = 4 + }, +/obj/item/clothing/glasses/science, +/obj/item/clothing/glasses/science, +/obj/structure/sign/poster/official/random/directional/east, +/turf/open/floor/glass/reinforced, +/area/station/science/xenobiology) +"xXo" = ( +/turf/open/floor/glass, +/area/station/cargo/storage) +"xXs" = ( +/obj/machinery/door/window/brigdoor/left/directional/north{ + name = "Justice Chamber"; + req_access = list("armory") + }, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/security/execution/education) +"xXz" = ( +/obj/effect/turf_decal/stripes/red/line{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/medical/morgue) +"xXY" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/effect/turf_decal/siding/wideplating/dark/end{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/cargo/storage) +"xYa" = ( +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/maintenance/department/engine) +"xYb" = ( +/obj/structure/rack, +/obj/effect/spawner/random/engineering/flashlight, +/turf/open/floor/wood/parquet, +/area/station/cargo/boutique) +"xYn" = ( +/obj/machinery/door/airlock/engineering{ + name = "Engineer AI Satellite Access" + }, +/obj/effect/mapping_helpers/airlock/access/any/command/minisat, +/obj/effect/landmark/navigate_destination/minisat_access_ai, +/obj/effect/turf_decal/stripes/corner, +/obj/structure/cable, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark/small, +/area/station/engineering/transit_tube) +"xYu" = ( +/obj/machinery/button/door/directional/west{ + id = "prison release"; + name = "Labor Camp Shuttle Lockdown"; + req_access = list("brig") + }, +/obj/effect/turf_decal/tile/red/half/contrasted, +/turf/open/floor/iron, +/area/station/hallway/primary/fore) +"xYz" = ( +/obj/machinery/chem_dispenser/drinks/beer{ + dir = 4 + }, +/obj/structure/table, +/obj/effect/turf_decal/tile/dark_red/opposingcorners, +/obj/machinery/firealarm/directional/west, +/turf/open/floor/iron/dark, +/area/station/service/bar) +"xYG" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/airalarm/directional/east, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) +"xYZ" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/holofloor/dark, +/area/station/command/heads_quarters/cmo) +"xZj" = ( +/obj/effect/spawner/random/structure/grille, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/plating, +/area/station/maintenance/aft/upper) +"xZL" = ( +/obj/machinery/camera/autoname/directional/east{ + network = list("ss13","tcomms") + }, +/turf/open/floor/circuit/telecomms/mainframe, +/area/station/tcommsat/server) +"xZO" = ( +/obj/machinery/door/airlock/security{ + name = "Warden Quarters" + }, +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/access/all/security/armory, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/carpet/red, +/area/station/security/warden) +"xZU" = ( +/obj/structure/chair/office, +/turf/open/floor/iron/white, +/area/station/science/explab) +"xZV" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/trimline/yellow/filled/corner{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/white, +/area/station/medical/chemistry/minisat) +"xZX" = ( +/obj/machinery/power/port_gen/pacman, +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/power/terminal{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/ai_monitored/command/storage/satellite) +"yae" = ( +/obj/effect/turf_decal/tile/brown/anticorner/contrasted{ + dir = 4 + }, +/obj/structure/rack, +/obj/effect/spawner/random/clothing/beret_or_rabbitears, +/obj/machinery/camera/autoname/directional/east, +/turf/open/floor/iron, +/area/station/cargo/boutique) +"yai" = ( +/obj/structure/table, +/obj/item/transfer_valve{ + pixel_x = 5 + }, +/obj/item/transfer_valve, +/obj/item/transfer_valve{ + pixel_x = -5 + }, +/obj/item/transfer_valve{ + pixel_x = 5 + }, +/obj/item/transfer_valve, +/obj/effect/turf_decal/delivery, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/station/science/ordnance/testlab) +"yaM" = ( +/obj/effect/turf_decal/siding/wood, +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/turf/open/floor/wood/tile, +/area/station/service/bar) +"yaX" = ( +/obj/structure/broken_flooring/pile{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/mapping_helpers/broken_floor, +/obj/item/crowbar/large/heavy, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"ybh" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/ai_monitored/command/storage/eva) +"ybo" = ( +/turf/open/floor/iron/white/textured_corner{ + dir = 8 + }, +/area/station/science/xenobiology) +"ybp" = ( +/obj/effect/decal/cleanable/glass, +/obj/effect/mapping_helpers/burnt_floor, +/obj/structure/broken_flooring/pile, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/plating, +/area/station/maintenance/department/medical) +"ybz" = ( +/obj/structure/urinal/directional/north, +/turf/open/floor/iron/showroomfloor, +/area/station/engineering/main) +"ybD" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/engineering/main) +"ybK" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"ybO" = ( +/obj/structure/lattice/catwalk, +/turf/open/openspace, +/area/station/science/xenobiology) +"ybP" = ( +/obj/machinery/shower/directional/north, +/turf/open/floor/iron/showroomfloor, +/area/station/engineering/main) +"yca" = ( +/obj/machinery/door/airlock/research/glass{ + name = "Chemistry Lab" + }, +/obj/effect/mapping_helpers/airlock/access/all/medical/chemistry, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/yellow/filled/line, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/station/medical/chemistry/minisat) +"ycf" = ( +/obj/machinery/door/airlock/engineering/glass/critical{ + heat_proof = 1; + name = "Supermatter Chamber" + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 4 + }, +/turf/open/floor/engine, +/area/station/engineering/supermatter) +"ycq" = ( +/obj/structure/training_machine, +/obj/item/target/clown, +/obj/structure/sign/poster/random/directional/south, +/turf/open/floor/engine, +/area/station/science/auxlab/firing_range) +"ycs" = ( +/obj/effect/spawner/random/engineering/tank, +/obj/effect/decal/cleanable/cobweb, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/department/engine) +"ycw" = ( +/obj/structure/table/wood, +/obj/effect/turf_decal/sand/plating, +/obj/effect/spawner/random/food_or_drink/booze{ + spawn_loot_count = 3; + spawn_loot_double = 0; + spawn_random_offset = 1 + }, +/turf/open/floor/plating, +/area/station/maintenance/central/greater) +"ycz" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"ycG" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"ycI" = ( +/mob/living/carbon/human/species/monkey, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/grass, +/area/station/medical/chemistry) +"ycN" = ( +/turf/closed/wall/r_wall, +/area/station/command/corporate_dock) +"ycO" = ( +/obj/machinery/door/airlock/maintenance_hatch, +/obj/effect/mapping_helpers/airlock/access/any/command/hop, +/turf/open/floor/plating, +/area/station/command/heads_quarters/hop) +"ycU" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/junction/yjunction, +/turf/open/floor/iron/half, +/area/station/service/hydroponics/garden) +"ycY" = ( +/obj/effect/turf_decal/tile/brown/anticorner/contrasted{ + dir = 1 + }, +/obj/machinery/disposal/bin, +/obj/item/radio/intercom/directional/north, +/obj/machinery/firealarm/directional/west, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/cargo/storage) +"ydk" = ( +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/hallway/primary/fore) +"yds" = ( +/obj/structure/chair{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/light_switch/directional/south{ + pixel_x = -10 + }, +/turf/open/floor/iron/white, +/area/station/medical/patients_rooms/room_a) +"ydv" = ( +/obj/machinery/door/airlock{ + id_tag = "Toilet_Research"; + name = "Bathroom" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/plating, +/area/station/service/theater) +"ydy" = ( +/obj/machinery/door/airlock/engineering/glass{ + name = "Primary Tool Storage" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/commons/storage/primary) +"ydC" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/holosign/barrier, +/turf/open/floor/iron, +/area/station/cargo/warehouse/upper) +"ydQ" = ( +/obj/effect/turf_decal/tile/dark_blue/half/contrasted, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/hallway/secondary/command) +"ydX" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/engineering/atmospherics_engine) +"yec" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron/white/smooth_large, +/area/station/medical/storage) +"yed" = ( +/obj/effect/spawner/random/bedsheet{ + dir = 1 + }, +/obj/structure/bed{ + dir = 1 + }, +/obj/item/pillow/random, +/turf/open/floor/carpet, +/area/station/commons/dorms) +"yei" = ( +/obj/structure/cable, +/obj/machinery/firealarm/directional/east, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/security/prison/garden) +"yes" = ( +/obj/effect/turf_decal/sand/plating, +/obj/effect/turf_decal/stripes/asteroid/line{ + dir = 9 + }, +/turf/open/floor/plating/airless, +/area/space/nearstation) +"yew" = ( +/obj/effect/spawner/random/structure/girder, +/turf/open/floor/plating, +/area/station/maintenance/department/medical) +"yeO" = ( +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/obj/structure/railing{ + dir = 8 + }, +/turf/open/floor/plating, +/area/station/maintenance/central/greater) +"yeQ" = ( +/obj/structure/railing/corner/end{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/aisat/foyer) +"yeS" = ( +/obj/structure/closet/crate/grave, +/obj/effect/landmark/start/hangover/closet, +/turf/open/misc/asteroid, +/area/station/asteroid) +"yfl" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 1 + }, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/medical/storage) +"yfw" = ( +/obj/effect/turf_decal/siding/wood, +/obj/effect/spawner/random/entertainment/lighter, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/wood, +/area/station/security/detectives_office/private_investigators_office) +"yfz" = ( +/obj/machinery/vending/dinnerware, +/obj/machinery/camera/autoname/directional/east, +/turf/open/floor/iron/kitchen, +/area/station/service/kitchen) +"ygb" = ( +/obj/structure/table, +/obj/machinery/recharger, +/obj/effect/turf_decal/bot{ + dir = 1 + }, +/obj/machinery/camera/autoname/directional/west, +/turf/open/floor/iron, +/area/station/command/gateway) +"ygc" = ( +/obj/machinery/door/airlock/maintenance_hatch, +/obj/effect/mapping_helpers/airlock/access/all/supply/qm, +/turf/open/floor/plating, +/area/station/cargo/storage) +"ygh" = ( +/obj/structure/disposaloutlet{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured, +/area/station/medical/morgue) +"ygj" = ( +/obj/structure/cable, +/turf/open/floor/wood, +/area/station/commons/lounge) +"ygw" = ( +/turf/closed/wall/r_wall, +/area/station/security/detectives_office) +"ygx" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/blood/old{ + icon_state = "gib5-old" + }, +/obj/effect/spawner/random/contraband/narcotics, +/turf/open/floor/iron/white, +/area/station/maintenance/aft/upper) +"ygJ" = ( +/obj/machinery/button/door/directional/south{ + name = "Secure Storage Control"; + id = "Secure Storage"; + req_access = list("engine_equip") + }, +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 6 + }, +/obj/structure/cable, +/obj/machinery/button/door/directional/south{ + name = "Atmospherics Lockdown"; + id = "atmos"; + req_access = list("atmospherics"); + pixel_y = -34 + }, +/turf/open/floor/iron, +/area/station/command/heads_quarters/ce) +"ygN" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/spawner/random/structure/closet_maintenance, +/turf/open/floor/iron, +/area/station/maintenance/department/medical/central) +"ygW" = ( +/obj/effect/spawner/random/medical/two_percent_xeno_egg_spawner, +/turf/open/floor/engine/xenobio, +/area/station/science/xenobiology) +"yhj" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/atmospherics/pipe/smart/simple/green/visible{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/engineering/atmos) +"yhk" = ( +/obj/effect/spawner/random/structure/chair_comfy{ + dir = 1 + }, +/obj/structure/cable, +/obj/effect/turf_decal/tile/dark_blue/half/contrasted{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/command/bridge) +"yhn" = ( +/obj/machinery/door/airlock/external{ + name = "Escape Pod One"; + space_dir = 1 + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 1 + }, +/obj/effect/landmark/navigate_destination/dockescpod1, +/obj/effect/mapping_helpers/burnt_floor, +/turf/open/floor/plating, +/area/station/maintenance/department/cargo) +"yho" = ( +/obj/machinery/atmospherics/components/binary/pump{ + dir = 8; + name = "External Gas to Loop" + }, +/obj/effect/turf_decal/delivery, +/turf/open/floor/iron/dark, +/area/station/engineering/supermatter/room) +"yhq" = ( +/obj/machinery/newscaster/directional/north, +/turf/open/floor/iron, +/area/station/security/prison) +"yhz" = ( +/obj/effect/turf_decal/tile/red/diagonal_edge, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/security/warden) +"yhV" = ( +/obj/effect/turf_decal/siding/purple, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/science/robotics/mechbay) +"yhW" = ( +/obj/machinery/light/directional/south, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/command/corporate_dock) +"yib" = ( +/obj/structure/table/wood, +/obj/item/flashlight/lamp, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/grimy, +/area/station/security/detectives_office/private_investigators_office) +"yic" = ( +/obj/structure/flora/bush/flowers_br/style_random, +/obj/structure/window/spawner/directional/south, +/obj/structure/window/spawner/directional/east, +/turf/open/misc/grass, +/area/station/ai_monitored/turret_protected/aisat/foyer) +"yit" = ( +/obj/structure/transport/linear/public, +/turf/open/floor/plating/elevatorshaft, +/area/station/medical/treatment_center) +"yiv" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/carpet/black, +/area/station/command/heads_quarters/hos) +"yiN" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"yiO" = ( +/obj/structure/chair/sofa/bench/left{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral/half{ + dir = 8 + }, +/obj/item/radio/intercom/directional/west, +/obj/effect/landmark/start/assistant, +/turf/open/floor/iron/edge{ + dir = 8 + }, +/area/station/hallway/secondary/exit/departure_lounge) +"yiQ" = ( +/turf/closed/wall/rust, +/area/station/maintenance/port/lesser) +"yiW" = ( +/obj/effect/turf_decal/siding/purple{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/white/textured_large, +/area/station/science/genetics) +"yjb" = ( +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 8 + }, +/obj/structure/cable, +/obj/effect/landmark/start/depsec/supply, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/security/checkpoint/supply) +"yjm" = ( +/obj/item/flashlight/glowstick/orange{ + start_on = 1; + pixel_x = -5; + pixel_y = -6 + }, +/turf/open/misc/asteroid, +/area/station/asteroid) +"yjw" = ( +/obj/effect/turf_decal/tile/neutral, +/obj/structure/chair/sofa/bench{ + dir = 1 + }, +/obj/effect/landmark/start/assistant, +/obj/machinery/light_switch/directional/south, +/turf/open/floor/iron, +/area/station/commons/fitness/recreation) +"yjH" = ( +/obj/machinery/disposal/bin, +/obj/effect/turf_decal/tile/dark_blue/anticorner/contrasted, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/command/bridge) +"ykc" = ( +/obj/structure/cable, +/obj/item/trash/chips, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"ykf" = ( +/obj/effect/spawner/xmastree, +/turf/open/floor/iron/chapel{ + dir = 1 + }, +/area/station/service/chapel) +"ykh" = ( +/obj/effect/landmark/start/roboticist, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/siding/purple{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/science/robotics/mechbay) +"yki" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark/side{ + dir = 4 + }, +/area/station/maintenance/radshelter/medical) +"ykG" = ( +/turf/closed/wall/r_wall, +/area/station/engineering/gravity_generator) +"ykO" = ( +/obj/effect/decal/cleanable/blood/gibs/core, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/department/engine) +"ylf" = ( +/obj/effect/turf_decal/tile/brown/anticorner/contrasted{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/cargo/storage) +"ylj" = ( +/turf/open/floor/circuit, +/area/station/science/robotics/lab) +"ylm" = ( +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/visible/layer2, +/obj/machinery/atmospherics/components/binary/pump{ + name = "Fuel Pipe to Incinerator"; + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) +"ylw" = ( +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron/dark, +/area/station/medical/medbay/central) +"ylz" = ( +/obj/effect/turf_decal/tile/dark_blue{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/turf/open/floor/iron, +/area/station/hallway/secondary/command) +"ylD" = ( +/obj/structure/railing{ + dir = 8 + }, +/obj/structure/cable, +/turf/open/floor/iron/dark/side{ + dir = 8 + }, +/area/station/command/meeting_room) +"ylQ" = ( +/obj/effect/turf_decal/siding/thinplating_new{ + dir = 10 + }, +/obj/machinery/camera/autoname/directional/south, +/turf/open/floor/glass/reinforced, +/area/station/engineering/atmos/upper) +"ylR" = ( +/obj/structure/table, +/obj/item/aicard, +/obj/item/pai_card, +/obj/item/circuitboard/aicore, +/obj/effect/turf_decal/tile/neutral/opposingcorners{ + dir = 1 + }, +/obj/item/stamp/head/rd, +/turf/open/floor/iron/dark, +/area/station/command/heads_quarters/rd) +"ylS" = ( +/obj/machinery/button/ignition/incinerator/atmos, +/turf/closed/wall/r_wall, +/area/station/maintenance/disposal/incinerator) +"ylV" = ( +/turf/closed/wall, +/area/station/security/checkpoint/supply) +"ylZ" = ( +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/obj/effect/turf_decal/tile/red, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/security/armory) +"yma" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/iron/kitchen, +/area/station/service/kitchen) +"ymg" = ( +/obj/machinery/door/airlock/highsecurity{ + name = "AI Chamber" + }, +/obj/effect/mapping_helpers/airlock/access/all/command/ai_upload, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 4 + }, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/ai_monitored/turret_protected/ai) +"ymi" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/machinery/status_display/ai/directional/north, +/turf/open/floor/iron, +/area/station/hallway/primary/central) + +(1,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(2,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(3,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(4,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(5,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(6,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(7,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(8,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(9,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(10,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(11,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(12,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(13,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(14,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(15,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(16,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +iUF +iUF +iUF +iUF +iUF +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(17,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +iUF +iUF +cLf +cLf +iUF +tLg +fWZ +tLg +iUF +cLf +cLf +iUF +iUF +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(18,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +iUF +tLg +bwC +bwC +bwC +bwC +bwC +bwC +bwC +bwC +bwC +tLg +iUF +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(19,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +iUF +bwC +wfz +uuN +uuN +uuN +uuN +uuN +uuN +uuN +wfz +bwC +iUF +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(20,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +bwC +uuN +cLf +cLf +cLf +bwC +cLf +cLf +cLf +uuN +bwC +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(21,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +bwC +uuN +cLf +cLf +cLf +bwC +cLf +cLf +cLf +uuN +bwC +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(22,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +bwC +uuN +cLf +cLf +cLf +bwC +cLf +cLf +cLf +uuN +bwC +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(23,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +bwC +uuN +bwC +bwC +bwC +itt +bwC +bwC +bwC +uuN +bwC +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(24,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +bwC +uuN +cLf +cLf +cLf +bwC +cLf +cLf +cLf +uuN +bwC +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(25,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +bwC +uuN +cLf +cLf +cLf +bwC +cLf +cLf +cLf +uuN +bwC +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(26,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +bwC +uuN +cLf +cLf +cLf +bwC +cLf +cLf +cLf +uuN +bwC +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(27,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +iUF +bwC +wfz +uuN +uuN +uuN +uuN +uuN +uuN +uuN +wfz +bwC +iUF +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(28,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +iUF +iUF +iUF +iUF +iUF +iUF +iUF +iUF +iUF +iUF +iUF +iUF +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +iUF +tLg +bwC +bwC +bwC +bwC +bwC +bwC +bwC +bwC +bwC +tLg +iUF +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(29,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +iUF +iUF +cLf +cLf +bwC +cLf +cLf +cLf +bwC +cLf +cLf +cLf +iUF +bwC +iUF +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +iUF +iUF +cLf +bwC +cLf +uuN +uuN +uuN +cLf +bwC +cLf +iUF +iUF +bwC +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(30,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +iUF +cLf +cLf +cLf +bwC +cLf +cLf +cLf +bwC +cLf +cLf +cLf +iUF +bwC +iUF +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +bwC +cLf +uuN +uuN +uuN +cLf +bwC +cLf +cLf +cLf +bwC +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(31,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +iUF +bwC +bwC +bwC +rGO +cLf +qJB +cLf +rGO +bwC +bwC +bwC +iUF +bwC +iUF +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +bwC +cLf +uuN +uuN +uuN +cLf +bwC +cLf +cLf +cLf +bwC +bwC +iUF +iUF +iUF +bwC +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(32,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +iUF +cLf +cLf +cLf +rGO +sKL +pNk +sKL +rGO +cLf +cLf +cLf +iUF +bwC +iUF +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +bwC +cLf +uuN +uuN +uuN +cLf +bwC +bwC +bwC +bwC +bwC +cLf +cLf +bwC +cLf +bwC +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(33,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +iUF +cLf +cLf +cLf +opZ +opZ +pNk +opZ +opZ +cLf +cLf +cLf +iUF +bwC +iUF +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +bwC +cLf +uuN +uuN +uuN +cLf +bwC +cLf +cLf +cLf +bwC +cLf +cLf +kJV +cLf +bwC +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(34,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +iUF +cLf +cLf +rGO +rGO +nMk +rGO +nMk +rGO +rGO +cLf +cLf +iUF +bwC +iUF +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +iUF +iUF +iUF +iUF +iUF +iUF +iUF +iUF +iUF +iUF +iUF +iUF +iUF +iUF +iUF +iUF +cLf +cLf +cLf +cLf +cLf +cLf +bwC +cLf +uuN +uuN +uuN +cLf +bwC +cLf +cLf +cLf +iUF +iUF +bwC +bwC +bwC +iUF +iUF +bwC +mPv +cLf +cLf +cLf +mPv +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(35,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +iUF +cLf +rGO +opZ +opZ +fYX +rGO +opZ +opZ +opZ +rGO +cLf +iUF +bwC +iUF +cLf +cLf +cLf +cLf +cLf +cLf +cLf +bwC +iUF +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +iUF +bwC +bwC +bwC +bwC +bwC +bwC +iUF +iUF +kYn +kYn +kYn +kYn +iUF +iUF +iUF +cLf +cLf +bwC +cLf +cLf +cLf +cLf +cLf +cLf +bwC +cLf +cLf +cLf +bwC +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(36,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +iUF +bwC +rGO +sKL +rGO +nMk +rGO +nMk +rGO +sKL +rGO +bwC +iUF +bwC +iUF +bwC +bwC +iUF +iUF +iUF +iUF +bwC +bwC +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +bwC +cLf +cLf +cLf +cLf +cLf +iUF +cLf +bwC +cLf +bwC +cLf +bwC +cLf +iUF +cLf +cLf +bwC +cLf +cLf +cLf +cLf +cLf +cLf +kLi +cLf +cLf +cLf +kLi +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +kYn +shs +shs +shs +shs +shs +shs +shs +shs +shs +shs +shs +shs +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(37,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +iUF +cLf +opZ +opZ +opZ +fYX +rGO +fYX +opZ +opZ +opZ +cLf +iUF +bwC +iUF +cLf +cLf +cLf +cLf +cLf +bwC +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +bwC +cLf +cLf +cLf +cLf +cLf +bwC +cLf +bwC +cLf +bwC +cLf +bwC +cLf +cLf +cLf +xgG +oFu +oFu +xgG +xgG +oFu +oFu +xgG +jsC +cLf +cLf +cLf +jsC +cLf +cLf +cLf +tyd +cLf +cLf +cLf +cLf +cLf +shs +shs +kYn +cLf +cLf +cLf +bwC +cLf +cLf +cLf +cLf +bwC +cLf +cLf +shs +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(38,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +iUF +cLf +rGO +sKL +rGO +nMk +rGO +nMk +rGO +sKL +rGO +bwC +iUF +bwC +iUF +cLf +cLf +cLf +cLf +cLf +bwC +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +tyd +bwC +cLf +cLf +cLf +cLf +cLf +bwC +cLf +bwC +cLf +bwC +cLf +bwC +cLf +cLf +rnk +xgG +fls +vGv +pCf +xgG +kxs +bOg +uaM +jsC +cLf +xqO +cLf +jsC +cLf +cLf +cLf +cLf +cLf +shs +shs +shs +kYn +shs +bwC +bwC +cLf +cLf +oDH +bfl +oDH +cLf +cLf +cLf +bwC +cLf +cLf +shs +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(39,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +iUF +bwC +opZ +opZ +opZ +fYX +rGO +fYX +opZ +opZ +fYX +cLf +iUF +bwC +iUF +cLf +cLf +cLf +cLf +cLf +bwC +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +bwC +cLf +cLf +cLf +cLf +cLf +bwC +cLf +bwC +rnk +rnk +oFu +rnk +rnk +cLf +rnk +kIM +hmk +rdR +rxv +aCr +atl +gHx +guV +jsC +oFu +nYT +oFu +jsC +cLf +cLf +cLf +cLf +cLf +bwC +cLf +cLf +cLf +cLf +cLf +bwC +cLf +oDH +weu +oDH +weu +oDH +bfl +bwC +wfz +bwC +bwC +shs +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(40,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +iUF +cLf +cLf +bwC +cLf +cLf +pNk +cLf +cLf +bwC +cLf +cLf +iUF +bwC +iUF +cLf +cLf +cLf +cLf +cLf +bwC +cLf +tyd +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +bwC +cLf +cLf +cLf +cLf +vxX +vxX +vxX +rnk +rnk +auE +lAy +aYx +rnk +rnk +rnk +pyA +wCV +wCV +iau +xgG +xgG +xgG +rnk +jsC +rYJ +fjg +gzL +jsC +vxX +vxX +vxX +vxX +cLf +bwC +cLf +cLf +cLf +bwC +bwC +wfz +bwC +oDH +weu +oDH +weu +oDH +lTb +oDH +bwC +cLf +cLf +shs +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(41,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +iUF +cLf +cLf +bwC +cLf +cLf +pNk +cLf +cLf +bwC +cLf +cLf +bwC +cLf +bwC +cLf +cLf +cLf +cLf +cLf +bwC +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +bwC +cLf +cLf +cLf +vxX +vxX +vxX +rnk +rnk +tdh +rUu +rUu +paW +ggz +rnk +xlo +fVU +kyP +kyP +kDm +lyQ +qTR +kic +eDb +jsC +oFu +hrk +oFu +jsC +vxX +vxX +vxX +vxX +loh +loh +loh +loh +loh +bwC +cLf +bwC +cLf +oDH +weu +oDH +weu +oDH +weu +oDH +bwC +cLf +cLf +shs +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(42,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +tyd +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +bwC +cLf +oyS +oDZ +oyS +cLf +bwC +tyd +cLf +bwC +cLf +bwC +cLf +cLf +cLf +cLf +cLf +bwC +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +bwC +cLf +vxX +vxX +vxX +rnk +rnk +rnk +dNp +dNp +dNp +clY +qLc +clY +mpG +gtK +qET +cIh +uNR +gtK +gtK +bTN +jOz +gtK +gtK +gtK +cIh +pEZ +jsC +rnk +rnk +rnk +rnk +loh +lOk +euj +sRo +iFz +iFz +iFz +bwC +bwC +lTb +weu +lTb +weu +lTb +weu +lTb +lTb +bfl +cLf +shs +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(43,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +poi +poi +poi +cLf +oyS +hPg +oyS +cLf +bwC +cLf +cLf +bwC +cLf +bwC +cLf +cLf +cLf +cLf +cLf +fYe +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +mgn +cLf +cLf +cLf +cLf +cLf +cLf +bwC +vxX +vxX +vxX +vxX +rnk +ryV +rnk +dNp +kic +ceZ +jJA +rnk +bAn +rnk +cIh +rnk +tuE +tuE +rnk +cJT +fPp +bJr +nhk +dFk +mZL +gtK +gtK +bgx +bAr +bDK +gtK +bAr +sbL +nek +afz +hVs +mjx +hVs +eip +kqy +kqy +kqy +kqy +kqy +kqy +kqy +kqy +kqy +kqy +pBk +bwC +shs +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(44,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +mPv +bwC +nAb +eSS +eSS +eSS +eSS +eSS +onL +poi +rNJ +oyS +qjc +oyS +oyS +bwC +cLf +cLf +bwC +cLf +bwC +cLf +cLf +cLf +cLf +vxX +vxX +vxX +vxX +cLf +bwC +bwC +mfA +bwC +fVZ +mWe +aoL +sdc +aoL +cor +sdc +iUF +hCS +hCS +hCS +hCS +hCS +hCS +hCS +vxX +rnk +bCv +tDg +dNp +vHh +rnk +rnk +rnk +rnk +rnk +xyP +rnk +kTo +nsu +rnk +lux +lux +xBS +xBS +xBS +xBS +xBS +dog +rnk +cPR +spS +xiC +dMD +loh +tAt +eCp +hVs +iFz +iFz +iFz +bwC +bwC +lTb +weu +lTb +weu +lTb +weu +lTb +lTb +bfl +cLf +shs +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(45,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +htf +rjf +htf +cEt +hzn +rNJ +boQ +hPg +hPg +poi +poi +poi +mxq +bwC +cLf +bwC +cLf +cLf +cLf +mxq +poi +poi +poi +poi +cLf +bwC +cLf +fsI +cLf +fVZ +jbV +aOi +sdc +aip +xjE +sdc +cLf +hCS +rdX +kcW +nfS +mDe +fUz +hCS +rnk +rnk +rnk +rnk +kUJ +vnV +bWn +dPO +bWn +uex +rnk +vjD +wXO +oNC +dnO +rnk +rnk +xBS +xBS +uxw +dBM +nvT +xBS +tUo +tUo +tUo +tUo +tUo +hQE +loh +loh +loh +loh +loh +bwC +cLf +bwC +cLf +oDH +weu +oDH +weu +oDH +weu +oDH +bwC +cLf +cLf +shs +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(46,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +ups +eBd +cEt +yhn +kop +cEt +rNJ +lbT +qUA +fsS +poi +jtv +jLv +mxq +mxq +dIo +mxq +pRM +pRM +pRM +mxq +pNI +iIo +fAE +poi +poi +sdc +sdc +fVZ +fVZ +fVZ +pJj +qFn +sdc +qFn +uMa +sdc +sdc +hCS +apW +lLk +lLk +sWd +asb +hCS +lCY +gzq +nez +huv +dNp +rnk +rnk +rnk +rnk +rnk +rnk +rnk +dnO +qvA +qvA +qvA +mhI +xBS +nvp +tZO +lGJ +dGG +kcr +tUo +sye +hgN +ngK +tUo +lmt +lmt +sHh +xyN +nNv +rnk +bwC +bwC +wfz +bwC +oDH +weu +oDH +weu +oDH +lTb +oDH +bwC +cLf +cLf +shs +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(47,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +htf +xpR +htf +cEt +rKY +rNJ +ddF +tTe +iyw +poi +jKC +aCx +lDZ +qFj +aie +qFj +hWF +hWF +hWF +lDZ +hyX +trs +jZt +cVi +qHf +sdc +brN +sfu +sfu +sfu +bgv +lam +rpb +lam +goX +nZt +mOI +hCS +qFM +fyn +qOP +wEM +tEI +hCS +lCY +lCY +rnk +jRU +awi +fpK +ilk +rnk +alW +rvo +xKp +rnk +dnO +qvA +wIn +oSP +uRb +xBS +pKg +pLo +vZL +sPC +mpH +tUo +aYD +xBW +wtw +tUo +sHh +cdQ +dRr +xyN +lXY +rnk +cLf +cLf +cLf +cLf +oDH +weu +oDH +weu +oDH +bfl +bwC +wfz +bwC +bwC +shs +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(48,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +mPv +bwC +nAb +eSS +eSS +eSS +eSS +eSS +cEt +poi +rNJ +rNJ +fgP +rNJ +cax +eio +aCx +mxq +mxq +aGu +mxq +pRM +pRM +pRM +mxq +mxq +cqQ +jZt +rAi +txx +sdc +gZs +uyL +keo +uyL +nKi +uyL +qRu +uyL +uyL +uyL +jDC +gTS +fyn +mvp +qOG +pwt +aTd +hCS +rnk +rnk +rnk +rnk +ina +fpK +hoD +rnk +qxE +lAs +lbw +rnk +dnO +qvA +ueI +oSK +rak +xBS +mrK +pNB +dzq +abC +tRp +tUo +aKl +yki +jJo +tUo +sHh +lmt +aTJ +rnk +rnk +rnk +cLf +cLf +cLf +cLf +cLf +oDH +bfl +oDH +cLf +cLf +cLf +bwC +cLf +cLf +shs +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(49,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +poi +ekl +kop +cEt +dqW +vTd +csl +dfW +eio +dDZ +mMS +nIJ +mxq +rrR +eeu +rQI +hST +rQI +pTU +mxq +sbU +uAX +swH +dGw +sdc +qJR +uyL +hQu +uyL +bNS +uyL +umh +uyL +xrU +xfN +gya +mXj +vaY +uEb +ryu +tNx +xyG +hCS +qAS +uiU +rnk +vqq +awi +rnk +rnk +rnk +rnk +uvl +rnk +rnk +fjC +qvA +qvA +fys +qvA +xBS +xBS +tgW +esg +uOm +xBS +tUo +tUo +lzk +tUo +tUo +oPT +gtK +gtK +ybK +gtK +rnk +cLf +cLf +cLf +cLf +cLf +cLf +bwC +cLf +cLf +cLf +cLf +bwC +cLf +cLf +shs +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(50,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +bwC +iUF +iUF +iUF +bwC +iUF +iUF +iUF +bwC +iUF +iUF +iUF +bwC +bwC +bwC +bwC +eSS +cro +cro +cro +poi +eio +ngd +lKZ +ngd +mMS +mMS +eio +mxq +pRM +mxq +bTB +dzr +bnv +vkx +mxq +pZH +uAX +kBX +uxy +sdc +wsI +uyL +umh +sjJ +rzF +bGe +lmL +hQy +icM +uyL +tnI +gTS +rwf +tRf +lLk +lLk +lLk +wWv +koZ +mPX +szK +kbY +awi +dKw +bay +lvW +xsM +tMO +qhu +wBe +iyb +vhW +wkg +iyb +wrU +djc +ryE +wrU +wrU +dcx +kZO +faf +tpl +kKc +gRp +fma +fma +fma +fma +fma +gtK +rnk +bwC +bwC +bwC +bwC +bwC +kYn +shs +shs +shs +shs +shs +shs +shs +shs +shs +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(51,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +bwC +iUF +iUF +iUF +bwC +cLf +bwC +cLf +cLf +cLf +bwC +cLf +cLf +cLf +bwC +cLf +cLf +cLf +cLf +qhP +qhP +qhP +qhP +qhP +qhP +eSS +eSS +dGR +syR +aVY +eio +eio +mxq +iPw +tBe +vjZ +jtd +bPP +gUa +mxq +uGx +bVs +ycz +bVs +cAv +uAW +xfN +icM +xfN +rxX +raR +wQa +vwb +xrU +fXZ +sFd +hCS +iIw +fdm +fMF +beN +srI +hCS +qeP +iFU +bSX +qPN +xwO +mHG +ecy +sme +rCz +awj +dkj +pwO +aRE +wat +aRE +waj +sme +dkj +qMI +fai +pwO +fFy +xOQ +qOF +xOQ +wwj +hvP +fma +eCd +dHU +wDe +fma +bAr +rnk +rnk +rnk +rnk +rnk +cLf +cLf +cLf +bwC +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(52,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +bwC +cLf +cLf +cLf +cLf +cLf +bwC +cLf +cLf +cLf +bwC +cLf +cLf +cLf +bwC +cLf +cLf +cLf +qhP +qhP +jlc +rqy +bWp +vLN +qhP +kkf +qio +sIV +syR +sVn +sIV +eio +mxq +uiy +qWu +vjZ +cLm +fxr +tqk +mxq +uDB +mVX +uDB +sdc +sdc +jgZ +uyL +hQu +uyL +rzF +nCt +umh +uyL +eDu +kkU +wOU +wOU +wOU +wOU +wOU +wOU +wOU +wOU +wOU +wOU +usT +tkr +pfp +dKw +glL +bvD +bvD +mDF +bvD +bvD +uhe +qOF +gVn +xLN +uRT +uRT +uRT +bzo +ioa +xpY +osd +gdf +rnb +tTl +jOH +rYs +vTp +vTp +iej +fma +gtK +stE +rnk +sVv +qyv +rnk +rnk +cLf +cLf +iUF +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(53,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +iUF +cLf +cLf +xrb +xrb +sNu +oPe +oPe +baH +baH +baH +baH +baH +baH +baH +baH +baH +cLf +qhP +aIR +mFn +gBw +hvj +xBR +qhP +kkf +mvP +mJL +hHJ +hHJ +qHv +eio +mxq +mxq +xlB +jJg +cqU +tVQ +blz +mxq +kMW +tRg +qob +sdc +rPA +mBt +xnQ +hQu +sJX +rzF +noi +jea +ghU +icM +hoX +wOU +nnt +dNW +hdK +xiV +gyB +fDt +uWB +bej +wOU +dvO +tkr +rnk +ryz +ryz +oue +fzZ +vGn +vGn +tNP +fMT +kFT +kFT +phV +kFT +kFT +qIS +osT +aSn +ioh +gzw +dKw +amK +ckH +sMO +fma +eOZ +rIH +nTA +fma +gtK +vlR +wun +uoo +bMx +hiO +oFu +bwC +bwC +iUF +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(54,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +iUF +bwC +xrb +xrb +dEG +dEG +iqf +cKn +pjt +lUM +cem +pjt +glk +cem +hPF +cuH +baH +xlD +qhP +aou +xXs +tNN +hnh +hMa +cpB +cpB +cpB +abw +cpB +esl +ggY +eio +eio +mxq +fGr +ugu +vvn +uOx +dXW +mxq +jch +oey +dhN +sdc +sgR +eQQ +vSt +umh +uyL +fFz +aex +umh +uyL +xrU +hoX +rXd +dkN +gXo +meL +uUX +aDk +nyW +quD +hOR +wOU +ldT +kJH +kWc +ryz +uaH +udW +qaI +vGn +pzx +jgH +yds +kFT +mTZ +hQK +dPg +fvo +jPO +osT +dci +piH +xaC +dKw +dKw +dKw +dKw +fma +vqC +hXo +fma +fma +gtK +hJo +rnk +sEY +vJf +rnk +rnk +bwC +cLf +iUF +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(55,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +iUF +cLf +xrb +nEx +lVv +ckc +pAP +cKn +lbX +tiP +cem +lbX +gBG +cem +cem +whY +baH +bwC +qhP +dJK +geh +mYE +wDJ +oBt +cpB +cDM +lDP +fBK +cpB +eio +ggY +eio +eio +mxq +mxq +sGj +mxq +bFw +uDB +uDB +rqe +lqR +tka +uDB +lAL +lAL +fuc +uyL +uyL +ezP +ezP +ezP +ezP +ijg +hoX +rXd +bDA +kjo +eaD +fOR +hZs +vge +wOU +wOU +wOU +aKS +tkr +jRI +ryz +lnG +klR +etI +vGn +mBj +jHx +iJF +kFT +uJq +sGt +ltj +fvo +pwn +eaL +eUB +dgR +uPg +bui +yit +dpf +yit +dKw +miD +dFY +pEZ +pEZ +gtK +rnk +rnk +oFu +oFu +rnk +cLf +kYn +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(56,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +tyd +cLf +cLf +cLf +bwC +cLf +xrb +nEx +syF +ckc +sqk +cKn +oOX +eph +cem +utw +eph +cem +puS +auW +jOV +tGu +qhP +qhP +hzx +riZ +vNE +ivp +cpB +qDU +nqg +iFg +cpB +iCH +orT +xrG +ptq +xxe +aKB +tXM +bdu +bWW +uDB +tAL +giK +lvg +lBC +uDB +sdc +sdc +eHA +skL +uyL +bnP +uyL +uyL +xnQ +ijg +hoX +rXd +pjw +psy +ujE +nfn +adg +kki +wOU +tsU +eje +eje +pTt +kWc +ryz +ryz +ryz +ryz +vGn +vGn +vGn +vGn +kFT +moH +bhZ +pgJ +fvo +lcM +eaL +eaL +nIa +crz +bui +yit +yit +gft +cBb +cBb +cBb +cBb +cBb +gtK +lXG +rnk +cLf +cLf +bwC +kYn +shs +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(57,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +iUF +cLf +xrb +nEx +dEG +rVj +cKn +cKn +mvU +pjl +dVs +weD +auW +xAV +heu +auW +rWO +auW +bDq +qhP +qhP +qhP +cLx +qhP +cpB +wAa +baO +aJr +cpB +sIV +sIV +poi +ezk +poi +qwu +qhS +xPW +bHI +uDB +hsW +wBc +mOo +ojG +uMz +sdc +tnO +gtj +gli +gli +beS +bGq +ehP +uyL +ijg +qrF +wOU +wOU +dWI +wOU +wOU +wOU +wOU +wOU +kRw +rnk +vXS +rnk +rnk +wJy +tro +rkL +nfc +uAt +ehs +wkK +aem +kFT +kFT +aeI +fvo +kFT +dKw +gwE +gwE +pme +dKw +cBb +cBb +cBb +cBb +cBb +oVX +stq +tYD +cBb +gtK +pEZ +oFu +cLf +tyd +iUF +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(58,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +iUF +bwC +xrb +iNq +oHi +ndr +cKn +obV +fKs +pjl +auW +auW +auW +heu +nGO +auW +auW +auW +toc +rcl +tmT +mmy +uYI +wMn +cpB +niC +luz +hqN +cpB +uZc +uZc +uZc +jPY +poi +poi +avL +fLU +ihK +uDB +ueX +qRp +jFR +phA +hKU +sdc +sdc +sLJ +sLJ +sLJ +sdc +sdc +twR +uyL +uuu +xeW +bWO +lam +lKp +fZp +klP +mhz +kTC +nnL +ylf +cOf +bfc +tiI +rnk +jyg +pRk +dGt +dGt +dss +aNe +xoo +gDR +ifl +qQm +oHw +amJ +lxP +hPp +tHr +ixA +qLg +vOs +cBb +dkZ +nea +fhs +jbR +nnF +bqR +hTl +cBb +gtK +oaP +oFu +cLf +cLf +iUF +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(59,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +iUF +cLf +sNu +nEx +rXZ +vjm +hbw +aGm +hfx +qru +bKV +oGw +qpD +bTJ +uGv +jGW +xpn +heu +heu +hxB +sdA +sdA +lOo +qCE +izP +fCR +uTy +rwn +uZc +qbW +dTE +uZc +pgN +cMR +poi +cQg +vwf +ihK +uDB +uDB +uDB +uDB +uDB +uDB +sdc +fLM +soZ +jCX +jCX +fLM +sdc +guF +uyL +tqz +xTI +xTI +xTI +cQa +xTI +xTI +xTI +xTI +xTI +vST +etV +jfr +ygN +rnk +fZl +yfl +pJk +eIY +vRi +oDR +qCy +tVI +hyp +eIP +epA +wZd +ixA +ixA +kZu +npw +ovl +kdI +nKe +dCG +iuV +iuV +cEy +dHk +jyx +uCx +cBb +gtK +oaP +oFu +cLf +cLf +iUF +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(60,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +bwC +cLf +oPe +xch +pYM +yei +cBD +eFK +eFK +nDG +iBg +gBE +iHr +lzB +uxJ +ieJ +xoM +eFK +eFK +rKZ +qjY +gZe +gjG +qjY +rXD +pdK +nDE +eNS +bTP +gDm +tiL +uZc +poi +poi +poi +poi +poi +vKY +eBE +vWo +dQv +mgH +ffF +bHI +sdc +kMr +aZt +rzg +xrH +jCX +sdc +lwW +uyL +esN +fXZ +gli +gli +gli +fEi +gli +gli +hgi +bSz +orI +etV +bfc +gok +rnk +lpF +yfl +aNR +oDC +meP +dmT +dVl +fSK +ifl +crz +esx +pgW +qdA +hbo +qdA +fKK +mcQ +ebD +cBb +hAA +naZ +sep +ebo +ebo +jvd +sIv +cBb +bAr +oaP +oFu +cLf +cLf +bwC +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(61,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +bwC +vxX +ubm +ubm +hME +hME +hME +tSc +wUe +tvQ +imQ +rhY +tsk +wUe +uay +xAV +lbJ +heu +heu +hxB +kZv +jfL +vgI +trK +izP +wrx +vzU +ein +uZc +uZc +uZc +uZc +bwC +bwC +bwC +bwC +poi +poi +poi +poi +poi +lxb +hXb +exT +uBI +jCX +hvA +jPR +pJL +jCX +xSE +twR +uyL +dUS +meT +sdc +mHU +cAQ +ylV +fGL +fGL +ylV +fSB +ylV +ylV +wdx +rnk +rnk +nKa +kxa +gwA +mcl +cUn +wvC +bRI +ifE +wJy +gkj +aPR +lUk +nnv +mNo +pts +tYs +oaY +ceB +cBb +bGl +fYZ +iKD +nOx +gTI +ltB +wAP +cBb +gtK +oqj +rnk +vxX +vxX +bwC +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(62,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +unk +vxX +vxX +ubm +fae +eyv +hME +yhq +wUe +hTW +kyn +rHV +cEr +wUe +oUh +krq +bEd +mit +ljF +rcl +sxl +rpD +bBs +nVa +rcl +nAR +nDE +oBl +uZc +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +bwC +htf +kpT +jdK +sEe +sdc +soZ +fHk +hVQ +fxG +jCX +sdc +aMH +uyL +uUF +eDq +sdc +kUh +jnP +ylV +mkJ +nVp +jyu +yjb +frR +ylV +sjD +xQN +rnk +wJy +vWI +xUf +taT +wJy +wJy +wJy +wJy +wJy +qof +hHj +lUk +hhH +asr +lyr +tYs +oaY +buK +dgp +dgp +hQg +epl +dgp +cBb +rlp +hIq +cBb +gtK +rnk +rnk +rnk +vxX +unk +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(63,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +vxX +vxX +vxX +ubm +eYT +ohZ +tmk +pjl +eFK +eFK +ozy +wUe +wUe +gRO +jza +jza +jza +jza +jza +jza +mIW +mIW +mIW +mIW +mIW +ciA +xKV +nny +uZc +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +bwC +htf +iHv +rZJ +rAK +sdc +fLM +jCX +qzF +jCX +fLM +sdc +dro +uyL +uUF +kJM +vQB +vQB +vQB +ylV +qTG +wZf +ciw +kwS +rXp +ylV +wwY +bvP +bMm +dgy +jha +yec +mcl +wJy +uQM +wNZ +jvt +sia +xDp +xmU +vEL +lip +joH +tUR +eiJ +oLy +gfe +dgp +cqJ +pCK +lyF +rgE +cBb +jka +sZl +cBb +gtK +rnk +gaE +rnk +vxX +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(64,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +vxX +vxX +vxX +ubm +dMF +rrF +hME +lvZ +wUe +xPH +iEO +sWy +iKA +jON +jza +vpI +bAW +gAv +bzI +jza +vAa +qTA +qTA +dUb +mIW +qEX +hth +vpz +uZc +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +bwC +poi +mhF +jdK +uOF +uWl +uWl +rCe +rCe +rCe +uWl +uWl +ucY +uyL +uUF +jqC +vQB +tBi +osp +vQB +vQB +vQB +vQB +vQB +vQB +vQB +aME +paa +rnk +wJy +dFm +mUs +mcl +wJy +lyY +oIo +kcd +lFR +kjU +dIW +wxu +bka +kJj +tYs +bdv +lZH +nmG +gnO +jSY +dPt +xdm +pzo +cBb +vdb +cJh +cBb +gtK +rZz +beO +rnk +vxX +vxX +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(65,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +vxX +vxX +vxX +ubm +hME +hME +hME +kSm +wUe +eFK +iEO +oCR +bxs +oql +jza +mHL +iHG +iJG +dWW +jza +pDU +pkR +vel +ilb +mIW +lzs +hth +klG +uZc +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +bwC +poi +htf +poi +toz +uWl +aze +weg +rpy +xsR +tFH +eCt +lAm +ijg +uUF +hso +tQM +smM +smM +kmj +mIA +izd +ccT +iDB +nEb +vQB +uyC +paa +gyI +wJy +lrr +rYy +dlQ +wJy +wur +gjw +ajh +dKw +xcC +fPX +erd +qBK +eCz +xGZ +qmY +aqh +pfv +dgp +oBg +eAJ +vkn +pGM +cBb +dAr +sZl +cBb +paa +rnk +qvN +rnk +vxX +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(66,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +vxX +vxX +vxX +hHw +oRD +pbB +nSC +ezj +awd +eFK +iEO +seW +dgw +gSr +jza +sfh +iHG +nLF +oKM +gGP +pDU +hnw +chU +ilb +pRl +wrx +hth +azb +uZc +cLf +cLf +cLf +cLf +cLf +cLf +uOf +cLf +cLf +cLf +bwC +iua +tdq +cTa +eZQ +qMA +uYg +dUD +skj +xBf +bIe +uWl +tVS +urz +pTZ +dHW +vQB +yae +oUP +vQB +geO +chF +pXs +mFe +xAl +vQB +vhf +oUd +oUd +wJy +uVi +cdV +mAi +wJy +qfB +vfy +sYc +qfB +qfB +dKw +sia +sAr +sia +kQH +sia +dKw +dKw +dgp +hQg +oRp +dgp +dgp +dgp +hQg +lSc +dgp +paa +rnk +rnk +rnk +vxX +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(67,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +vxX +vxX +vxX +hHw +mut +eQY +kxm +auW +eFK +eFK +jzR +byk +cwc +njr +jza +sfh +iHG +oBH +sAK +byT +ppz +mhU +tUp +yhz +axk +uES +ssN +qie +uZc +cLf +gHr +jCG +gHr +cLf +ved +gxu +ved +bwC +bwC +poi +poi +poi +poi +sfH +uWl +pkP +rfQ +oli +gpg +qgA +uWl +etV +apx +etV +qVS +vQB +vQB +vQB +vQB +qHd +vQB +cNX +mbn +ahp +vQB +vQB +vQB +oUd +qfB +qfB +qfB +qfB +qfB +ndR +inC +dRu +gNT +qfB +bxi +anb +ftz +anb +ssJ +dtp +nwp +dgp +bGX +wSf +ksU +bHj +dgp +dnP +gVW +kgh +dgp +rms +loR +rnk +vxX +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(68,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +vxX +vxX +vxX +hHw +xjQ +oMk +nSC +nSC +sZT +nSC +nSC +wyi +jza +jza +jza +sGz +qXK +lzr +ghs +jza +lRc +tEp +scT +eLg +mIW +qgK +uVk +qie +uZc +cLf +gHr +igB +gHr +cLf +ved +kfr +ved +aSZ +jbc +aSZ +cqQ +siR +vVW +koA +uWl +rSS +lBu +bGc +uAe +dGB +uWl +ejh +tvc +eSR +cho +ekY +cOG +tsj +vQB +rdm +fXn +fXn +fXn +fXn +cQm +huK +wvt +oUd +qfB +mrr +xjo +grO +hCR +kCn +vJF +oJE +mhO +qfB +peU +xjh +nsI +wbM +hXk +xHY +rAa +dgp +qGB +fqF +ksU +tsq +dgp +iJd +wSf +bQT +dgp +paa +rnk +rnk +rnk +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(69,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +vxX +vxX +hHw +xjQ +qEm +mFT +ayC +aeD +jez +nSC +jza +jza +eWC +jza +jkv +kkT +dba +qLk +jza +fBF +fBF +fBF +fBF +fBF +oeN +uVk +wIX +uZc +gHr +gHr +tVH +gHr +gHr +gHr +gBZ +ved +hav +cSJ +aSZ +cqQ +sYH +poi +xoT +uWl +rCW +rfQ +icq +pNE +jXl +fmR +ahv +aHh +aCs +mwS +utP +aHh +vTN +sha +ksl +uDA +omv +nKk +aUl +xYb +gGa +vQB +oUd +qfB +owr +lDl +pBz +qfB +rdE +wTW +sFg +gYh +pCd +wvM +xHY +wyb +nIG +nBV +xHY +wZI +hQg +sed +fqF +nkf +xzG +hQg +eVv +sXJ +imG +dgp +paa +pEZ +wiK +mXM +bwC +gGf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(70,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +vxX +hHw +okV +mks +jlW +jlW +ibv +jlW +rkm +jza +ozU +siS +bDs +meQ +fAR +keQ +ftK +jza +qqq +pWB +jiy +mJx +mGG +gkt +uVk +vaf +cUP +nLz +nBa +fee +fee +ubV +gHr +oQy +xYu +tHR +ujo +aSZ +cqQ +cqQ +poi +ljp +uWl +hRo +caz +dSV +nuC +dMa +rHc +jOf +cye +ijd +bUx +utP +kEt +hmw +pDu +ksl +nJs +fXn +mDr +jGK +kJN +unL +vQB +oUd +qfB +oDJ +cgj +iSH +qfB +lES +xvU +icw +faz +crq +wvM +rYg +cFH +kSH +unR +bqA +rsZ +wpU +wSf +kRl +gWe +wSf +xuK +uNd +mTs +hLw +gTY +gvk +pEZ +qaV +mXM +cLf +cLf +cLf +eTi +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(71,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +hHw +hHw +rFt +rFt +fQf +rFt +jED +rkm +jza +pSN +fod +jza +bSI +sCO +bqV +bZf +jza +fLv +kaK +vAu +eSE +mGG +gkt +uVk +qEh +roG +qxW +jdn +hak +gPk +eFy +gHr +ydk +snF +wDu +nHV +aSZ +nVT +nVT +nVT +xoT +uWl +sUn +kRM +wBw +rKW +sIA +uWl +iDs +fad +poV +mcS +tJC +cJC +uFc +sha +wgm +thZ +nTo +xCA +jjS +uNc +ozF +vQB +oUd +qfB +vLx +lZb +mAa +qfB +whz +bII +icw +mnc +bOT +wvM +xHY +wyb +nIG +nBV +oOr +wZI +hQg +gdA +eYv +szq +wSf +hQg +fRw +llD +vxx +dgp +rms +pEZ +wiK +mXM +gGf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(72,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +hHw +hHw +hHw +hHw +hHw +hHw +jza +jza +jza +jza +jza +thH +fba +aJa +ndb +jza +vEX +hEI +gHS +drl +mGG +gkt +kcA +feN +mam +nLz +rJW +vXi +okC +cIV +gHr +ydk +xNq +tqN +bPZ +aSZ +rWf +lsJ +nVT +koA +uWl +uWl +uWl +uWl +uWl +uWl +uWl +lVj +fad +aHh +uBf +lYe +knt +mZY +vQB +rWs +cQm +fXn +fXn +aKd +mju +wjj +vQB +oFn +qfB +qfB +qfB +qfB +qfB +tms +nTm +cGr +tjd +qfB +fPs +gpF +avU +brQ +vFH +crg +lwI +dgp +fid +liQ +wsa +gUY +dgp +aIc +apH +reG +dgp +paa +rnk +rnk +iUF +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(73,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +bwC +bwC +cLf +cLf +cLf +jza +gcb +qcS +bYl +jza +jza +jAg +mbM +jza +jza +mGG +fsx +dPv +mGG +mGG +xQW +kcA +fyA +rRK +gHr +gHr +gHr +gHr +gHr +gHr +ydk +ghW +tHR +iPp +aSZ +jwb +tzs +fXC +xoT +ycG +kib +xoT +fnG +vPG +kib +poi +xwu +fad +aHh +aHh +lYe +cis +thW +vQB +juR +dtx +dtx +dtx +dtx +gjy +wBV +vQB +fgi +kKw +jcR +jTE +xlw +qfB +vyO +hjW +dGs +reJ +qfB +rgx +goI +tuY +xza +fcM +goI +wLi +dgp +uMp +fGT +wsa +wQj +dgp +dVx +xJQ +lKh +dgp +paa +rnk +bwC +iUF +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(74,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +fYe +unk +unk +fYe +cLf +cLf +jza +eTn +eYj +bue +wCr +jGF +dsa +hAd +bXJ +vvG +xtH +baW +tzk +sfm +ecC +mxv +hSW +fyA +rRK +fNB +lfp +tRX +rjL +pWC +ubd +ydk +xNq +mtB +gqd +aSZ +qeo +nVT +nVT +poi +poi +poi +poi +poi +poi +pOP +poi +uBw +ljw +mBS +mBS +oHf +aOJ +uBw +vQB +vQB +vQw +vQw +vQw +vQw +vQw +vQB +vQB +fgi +rPR +isr +isr +oOR +qfB +qfB +ujT +ujT +qfB +qfB +nIG +tmn +bxC +tmn +xhV +tmn +nIG +dgp +dgp +hQg +hQg +dgp +dgp +dgp +dgp +dgp +dgp +rFd +rnk +bwC +iUF +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(75,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +pnS +pnS +pnS +fYe +cLf +cLf +jza +lYR +qZZ +jza +jza +aTi +vPP +jBj +aas +xNl +xNl +jPm +oze +aSK +isx +hbh +sFq +eMr +kOx +jmh +pSf +hPW +hPW +mPN +ull +ydk +hGB +oUm +aSZ +nVT +azB +qkv +ouH +wRD +suB +xGC +faP +rWh +xRH +tuA +wEF +nxG +nxG +nxG +nxG +tuA +nxG +nxG +aHp +dzN +nxG +nxG +ciY +ciY +nxG +nxG +mhi +tuA +nxG +nxG +nxG +nxG +mLr +bGD +nxG +nxG +nxG +hpB +nxG +nxG +tuA +nxG +vwZ +jmu +kJT +fhL +kJT +cLf +bwC +cLf +bwC +kkx +rnk +wdV +nHm +wdV +rnk +cLf +iUF +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(76,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +pnS +pnS +pnS +unk +bwC +bwC +jza +mbM +mbM +jza +kxD +jAn +llT +tWV +igQ +gIO +dCi +hcQ +cpO +uzh +kSP +eDG +kpy +vpz +rRK +ehn +wIT +rGM +mrw +dfY +ubd +ydk +naF +xNq +aSZ +sXL +jMe +awq +fzh +hmv +mvJ +gIS +mWb +dzF +sqb +olr +fIr +dxT +dxT +dxT +wZj +vFl +tlC +dxT +dxT +dxT +dxT +vFl +dxT +dxT +vFl +wgw +dxT +dxT +eyq +dxT +wZj +dxT +wWs +dxT +dxT +dxT +dxT +dxT +dxT +dxT +dxT +voy +eFj +paf +kJT +kyi +kJT +cLf +bwC +cLf +bwC +cLf +rnk +xuD +rnk +oFu +rnk +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(77,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +pnS +pnS +pnS +pnS +cLf +cLf +bwC +uuN +uuN +plA +aCp +hpV +una +wDW +lHC +lar +bPY +jMU +cpO +exF +rQK +iyG +uJO +azb +rRK +rRK +ava +vZP +qvK +rRK +rRK +ydk +ehO +pyq +aSZ +vXp +kuS +nVT +uQO +aUM +mvR +vFY +wqc +kmu +dxT +tCE +xMk +rVD +deY +aQS +vTx +gPn +aQS +tht +aQS +aQS +aQS +wQW +aQS +deY +iqW +aly +aly +tnv +tjz +prW +axI +gag +dhg +prW +anT +sOA +prW +prW +prW +prW +dvz +prW +tOm +hDK +kJT +iTL +kJT +bwC +wfz +uuN +wfz +bwC +jsC +xWi +jsC +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(78,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +fYe +pnS +unk +cLf +cLf +cLf +bwC +uuN +uuN +plA +tdW +rIG +llT +tGJ +dtc +nqI +msS +poU +cpO +qBj +kSP +iyG +uVk +klG +rRK +fjp +vjy +wRG +uHA +sLy +rRK +ydk +naF +jjN +aSZ +aSZ +aSZ +aSZ +rjs +fNp +aSZ +eGz +qRr +kmu +dxT +tCE +bAw +bAw +bAw +bAw +uLj +mla +xWN +bAw +kQj +hov +jhe +nfe +jhe +hov +bAe +eaT +uit +kAg +kAg +nMT +kAg +kAg +kAg +nMT +kAg +kAg +uZx +lsC +bvm +lsC +uZx +dbN +tOm +tCE +kJT +vkM +kJT +kJT +uuN +uHL +uuN +cLf +gJE +paa +aPO +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(79,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +bwC +bwC +bwC +bwC +rTM +rTM +rTM +plA +plA +dRM +fmw +ccc +uGS +sgW +sgW +sgW +cpO +mAd +skr +hBD +gpV +kaJ +obc +oSB +gtX +gtX +gtX +gIb +aNH +lTq +naF +hGB +wcb +xuR +rTV +wTu +oMf +oMf +vVl +hIv +dRy +kmu +dxT +axi +bAw +cGP +ygb +iPz +lQN +qsI +haf +bAw +bAw +hov +pQs +jIA +bNz +jhe +xRH +aly +raT +kAg +tIH +tIH +tIH +iuv +ggl +tIH +tIH +kAg +afW +wUc +fWp +jtR +lsC +prW +tOm +tCE +sjo +bTY +rzP +kJT +wfz +uuN +wfz +uuN +gJE +rms +aPO +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(80,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +rTM +qiJ +blE +rcG +plA +vLQ +rOF +xst +pCz +gPZ +pDG +nGd +xst +wYO +ecC +wrx +gpV +qie +rRK +aOK +xin +mld +juD +lzj +rRK +kBf +xsJ +pzU +mDb +mDb +mDb +mDb +mDb +mDb +bmy +oGO +lTN +knX +oBe +vAY +bAw +kdP +fGR +bSC +pSk +hUI +noF +lop +bAw +xEW +hDV +upy +xPL +ouo +xRH +aly +hvT +kAg +ckn +wnj +tIH +mWf +tIH +lFZ +sWn +kAg +uZx +sRH +avu +fno +lsC +prW +tOm +tCE +xEl +jNJ +pUY +kJT +hgV +sUy +bwC +uuN +gJE +paa +aPO +cLf +tyd +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(81,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +rTM +uiu +gme +rTM +plA +ecC +uYl +ecC +oZz +oZz +oZz +oZz +oZz +oZz +oZz +iYS +dpo +nmX +vgh +fSS +qqH +hHF +bYP +dcS +odp +flZ +aGa +usq +bdG +gSD +gSD +gSD +gSD +gSD +nrp +gls +aQS +aly +tHF +gwq +bAw +cJx +abK +cOR +ufV +jVI +noF +rIf +bAw +ign +iIB +gzt +xPL +jhe +xRH +qDb +urP +kAg +nvD +pNa +nvD +oQk +nvD +fRv +nvD +kAg +fux +czO +aod +cVh +lsC +prW +tOm +ulY +iWO +eGJ +hYg +kJT +rnk +rnk +bwC +wfz +gJE +paa +aPO +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(82,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +rTM +oUr +tFa +haH +jpc +dpz +pXr +kCc +oZz +ryP +fiB +pHy +jWb +wmg +oZz +oZz +bNA +oZz +ygw +ygw +ygw +dRi +ygw +ygw +ygw +txK +sjl +kqE +rjX +rjX +hbM +hbM +hbM +rjX +rjX +iXj +rjX +oez +tHF +hqz +bAw +ttT +mYs +bAw +aYQ +wEW +noF +bvt +bAw +kxZ +fMZ +hBi +nwF +hov +wjW +aly +hvT +kAg +dAa +agu +nEk +aaV +uOZ +vex +hzh +kAg +vNH +czO +aod +bxx +lsC +prW +tOm +tCE +sjo +hNG +ndI +kJT +afV +rnk +bwC +uuN +gJE +paa +aPO +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(83,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +rTM +ksE +kkA +kYk +dzb +hRv +wbE +tNy +oZz +pHy +lsr +oZz +pHy +rxE +oZz +aCB +eRA +vmf +ygw +jcL +hqw +kFR +qYL +wDy +nFT +jQf +duy +kqE +rjX +ovr +bZa +riT +gUq +oGB +qyz +ahI +rjX +lyJ +tHF +tCE +bAw +pBV +miI +ttT +jOr +pui +koG +bAw +bAw +hov +hov +hov +hov +hov +bKK +aly +hvT +kAg +dIc +lZO +cQT +tOV +cQT +dGf +uXt +kAg +kAg +tIL +aod +bxx +lsC +prW +tOm +jLr +kJT +srq +kJT +kJT +kic +rnk +rnk +lfd +jsC +xWi +jsC +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(84,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +tyd +cLf +cLf +iUF +cLf +hDo +hDo +hDo +hDo +hDo +lYa +hRv +wDo +smZ +msz +oXd +cyS +oYm +cyS +sWp +kgT +lgG +sUz +xWK +ygw +diI +gBh +pGs +rkw +eNr +ese +gHk +duy +sjl +wGg +pLW +bzH +bZa +bZa +giy +ego +bZa +nuM +kmu +tHF +tCE +bAw +mkR +aVp +ttT +pui +tnu +pui +bAw +leT +omy +lLF +vvP +qkC +uZx +eKD +aly +hvT +sVM +kBm +aKP +jZK +wlN +loY +ycU +uOZ +tPJ +uIa +hvL +mwo +kik +lsC +prW +tOm +vgz +uZx +paa +paa +paa +wdV +wdV +ltU +jtc +wdV +wfs +rnk +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(85,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +iUF +bwC +hDo +sIM +wVz +hDo +xzZ +nql +hRv +rjx +tIE +oZz +pHy +iDx +oZz +pHy +vFD +oZz +rTA +adW +gZv +ygw +aRM +hVL +aSG +mxh +jHH +ygw +vuj +vzu +xun +iXj +sid +mOb +wEc +xOg +rVu +qER +aUo +iXj +kmu +qbA +mMC +bAw +egN +joL +ttT +koG +pui +knw +bAw +bqE +omy +cHV +tkH +uzV +dIZ +lNu +eHc +hvT +nMT +rjk +aKP +maz +kAg +auo +fvg +rDs +agu +nMT +kYB +sGk +crr +lsC +prW +kXV +tCE +uZx +ykc +pEZ +rnk +rnk +rnk +rnk +rnk +rnk +rnk +rnk +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(86,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +iUF +cLf +hDo +laF +mnX +rkt +bqr +pWh +pyF +waJ +lEM +oZz +oFy +noy +pHy +ihe +rTi +oZz +oZz +oZz +oZz +ygw +fZe +rJK +ygw +ygw +ygw +ygw +dRb +uOU +dRb +jAG +exz +qER +aUo +pLW +bLa +qER +rQC +rjX +aFJ +tHF +tIT +bAw +bAw +bAw +bAw +bAw +bAw +bAw +bAw +hCv +tgZ +vOg +qJt +uzV +dIZ +mvk +aly +cJO +eFl +fFQ +aKP +clX +cHu +wOm +uNl +dIi +vNY +sjL +ngp +fHJ +jtR +lsC +prW +tOm +tIT +uZx +paa +lqf +rnk +vxX +vxX +vxX +cLf +cLf +bwC +bwC +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(87,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +iUF +bwC +hDo +fmB +rAu +hDo +qmc +wBC +net +vlJ +net +wBC +pHy +oZz +oZz +oZz +pHy +oZz +vxX +vxX +ygw +lTJ +qZh +nwc +ygw +bYa +qgE +rkA +hiW +okd +heI +jAG +oed +oed +ppO +fpH +bxH +oed +oed +rjX +fCy +tHF +tCE +pXp +ctP +olC +vNT +acc +tQF +hyS +acc +acc +acc +hvD +uYT +sxL +uZx +qil +cyF +vTx +kAg +jyV +eSc +kqQ +kqQ +dVi +tTQ +uXt +kAg +kAg +mGq +btU +mGq +uZx +dhg +iLw +gsb +uZx +paa +pDQ +rnk +vxX +vxX +rnk +rnk +rnk +rnk +bwC +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(88,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +iUF +cLf +hDo +hDo +hDo +hDo +wBC +wBC +dsy +fJT +dsy +wBC +fYe +fYe +fYe +fYe +fYe +vxX +vxX +vxX +ygw +pgC +sxC +uZQ +ygw +wXe +pFP +mTV +rWZ +bZH +sRV +jAG +gdj +wpc +mAX +aHl +iNT +maY +pgd +rjX +iQS +tHF +tCE +pXp +kbW +xwf +hdO +acc +qSq +lPV +uFW +wnM +rCN +pXA +kAW +pUE +acc +acc +acc +slx +kAg +gsm +agu +agu +cOC +isH +agu +lpE +kAg +ujv +kmu +hGE +nxG +afe +kmu +tOm +hDK +uZx +rms +rnk +rnk +cLf +rnk +rnk +ijn +koZ +rnk +rnk +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(89,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +vxX +vxX +vxX +vxX +wBC +pOg +cYP +jle +wBC +fYe +cLf +cLf +cLf +fYe +fYe +fYe +vxX +ygw +ygw +ygw +ygw +ygw +bjv +jNr +mor +dIT +ked +ked +iCa +shI +dBS +vhT +fYj +mff +jpW +uJW +rjX +mHu +tHF +vAY +acc +uUZ +sZV +xQk +acc +rbF +kWK +hBZ +tWs +acc +oRa +hWx +lYo +acc +vjq +pKb +kuP +kAg +bVl +bIN +bVl +emf +bVl +ath +bVl +kAg +vNH +kmu +opH +knX +fBz +fBz +pUW +paf +uZx +paa +kic +gim +pth +gim +kic +kic +wTX +wxF +qvG +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(90,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +vxX +vxX +vxX +wBC +rKi +kIK +wdu +wBC +fYe +cLf +cLf +cLf +cLf +uuN +fYe +fYe +vxX +vxX +vxX +vxX +iol +iol +iol +iol +uUk +pSm +bmz +jAG +kOC +qbN +xaN +jUD +nCH +qbN +qbN +iXj +kmu +tHF +tCE +tpC +vyZ +dcv +pLN +acc +tQF +ewJ +uFW +jrX +acc +acc +acc +acc +acc +rmy +wMb +kuP +kAg +ckn +usH +sMX +lGR +tIH +cxD +sWn +kAg +veW +qXf +tOm +tCE +tCE +tCE +tCE +jLr +uZx +gvk +kic +gim +vSd +gim +lqf +kjx +kic +nTq +vFs +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(91,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +vxX +unk +vxX +wBC +dQr +dNn +hwi +wBC +fYe +cLf +cLf +cLf +cLf +uuN +uuN +fYe +fYe +fYe +vxX +vxX +fri +sZy +otH +iol +jAG +jAG +jAG +jAG +hHA +oPC +dcf +sns +dpc +qRZ +oPC +rjX +sWC +jlp +hqz +acc +rGX +mbZ +acc +acc +acc +acc +eFP +jac +kuP +kuP +kuP +tyQ +qoJ +kuP +qWW +cVN +kAg +tIH +dPq +tIH +iuv +tIH +tIH +tIH +kAg +uxH +kmu +tOm +paf +uZx +eMG +hOn +jZx +uZx +paa +rnk +rnk +cLf +rnk +rnk +aDd +bSX +rnk +rnk +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(92,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +iUF +cLf +wBC +gZk +kTb +cxr +wBC +fYe +fYe +cLf +cLf +cLf +uuN +uuN +cLf +cLf +fYe +fYe +vxX +fri +taD +nIb +hNh +byB +fkh +nIb +rjX +bZj +wmX +vsQ +nEw +vHi +kTP +siH +rjX +kmu +tHF +tCE +acc +dJa +jrn +acc +nZY +ihH +acc +acc +jrX +lIr +lIr +lIr +lIr +hRB +hRB +hRB +hRB +hRB +hRB +hRB +tDf +tDf +tDf +tDf +tDf +uZx +rqj +eaT +cvZ +gCL +uZx +uZx +uZx +uZx +uZx +rms +tcN +rnk +bwC +bwC +rnk +rnk +rnk +rnk +bwC +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(93,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +iUF +cLf +wBC +axD +axD +axD +axD +axD +fYe +bwC +bwC +bwC +uuN +uuN +bwC +bwC +bwC +fYe +fYe +fri +muL +hNh +hNh +sLW +uZx +waS +rjX +rjX +pGS +kFB +lXb +kFB +jwr +rjX +rjX +uKh +fDb +gsb +acc +acc +qpb +acc +jOD +uFW +nmS +uFW +jrX +lIr +lHi +dyX +uWr +hRB +hmg +ghQ +wyj +xYz +gqX +qzu +tDf +cuq +vhH +qup +tDf +srh +ckZ +aly +tOm +aRW +tzT +wdV +ltU +wdV +paa +paa +lqf +rnk +cLf +cLf +bwC +cLf +cLf +cLf +bwC +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(94,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +bwC +cLf +fZF +mGX +clb +jmP +mSf +axD +fYe +cLf +cLf +cLf +uuN +uuN +cLf +cLf +cLf +cLf +fYe +fri +oAo +pcQ +fri +nIb +uZx +olM +fsn +rjX +rjX +rjX +rjX +rjX +rjX +rjX +rfi +kmu +tHF +tCE +gcZ +acc +pOA +mCo +ewJ +uFW +jXL +uFW +jdP +lIr +wlf +fvd +cik +hRB +vdO +kjg +kjg +oSd +seV +bca +sLn +ukK +qMd +sqz +tDf +snl +aly +htb +tOm +wOi +hzF +hzF +toC +hzF +hzF +hzF +hzF +hzF +hzF +hzF +hzF +hzF +bwC +bwC +bwC +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(95,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +iUF +cLf +fZF +axD +axD +sas +axD +axD +fYe +cLf +cLf +cLf +uuN +uuN +cLf +cLf +cLf +cLf +fYe +aHx +vIO +olN +vIO +vIO +uZx +mHu +eEa +kmu +kmu +xJe +kmu +wSi +kmu +rqj +kmu +kmu +tHF +tCE +tGM +acc +acc +acc +acc +jrX +siG +jrX +jrX +lIr +otA +xlX +bcX +vMC +brS +lfu +jDs +ljU +isq +mxF +tDf +msf +wIr +eKq +tDf +dOv +aly +aly +tOm +tCE +hzF +xEL +kmL +oKy +rbH +dMU +kGF +hQh +yiO +tiT +pCJ +hzF +cLf +cLf +bwC +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(96,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +iUF +bwC +bwC +bwC +bwC +bwC +axD +axD +axD +axD +bRl +jxq +vEF +axD +axD +bwC +uuN +bwC +uuN +uuN +bwC +uuN +bwC +bwC +fYe +fri +nAe +uFN +fBD +tUk +uZx +rGv +ebB +fBz +bhk +fBz +fBz +fBz +fBz +sKM +fBz +abn +eRh +tCE +hQD +acc +vFy +bIi +acc +jrX +gGm +enu +enu +enu +enu +edv +eBb +hRB +cXe +iwQ +tlb +tlb +tlb +lwB +tDf +tDf +xCh +tDf +tDf +aic +aly +aly +iEj +wkf +hzF +xEL +qtP +pdg +iGC +iGC +dzU +iGC +iGC +gxE +iGC +hzF +hzF +hzF +hzF +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(97,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +iUF +cLf +cLf +cLf +tyd +cLf +hrM +aGz +ien +csW +wMy +toJ +dGh +jqu +hrM +cLf +bwC +cLf +cLf +cLf +cLf +bwC +cLf +fYe +fYe +fri +aHx +fri +fri +wZc +uZx +sWC +tOm +tCE +tCE +tCE +eEm +yiN +aiZ +gCL +rYh +tCE +cVX +dTU +pMD +acc +kYl +jUd +dGc +fDN +enu +enu +twW +pTn +enu +enu +hwk +hRB +jkF +jwI +oqb +oqb +uww +kYW +rjn +fvk +ezL +eAx +rjn +rjn +onW +aly +tOm +hDK +hzF +vCy +czW +tSH +hUS +hUS +hUS +hUS +hUS +hUS +qtP +vfG +vew +buI +pSK +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(98,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +iUF +cLf +cLf +cLf +cLf +cLf +hrM +tMK +hrM +uMA +pGf +qtg +nbm +iDJ +hrM +cLf +bwC +cLf +cLf +cLf +cLf +fYe +fYe +fYe +fYe +uLm +tEy +cef +ucm +tUk +uZx +qJX +tOm +tCE +wsM +krP +krP +sfl +krP +nwr +vAp +vAp +vAp +vAp +vAp +acc +heh +jUd +acc +fDN +enu +uZg +byb +rNs +rNs +sUI +cXL +enu +tGt +fTD +wAB +tUG +tUG +qyK +khZ +qrl +eQi +eEC +rjn +fux +aUy +kmu +pns +jLr +hzF +wNK +czW +iGC +iGC +iGC +iGC +qtP +iGC +nHj +iGC +aaB +nHK +nHK +nHK +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(99,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +iUF +bwC +bwC +bwC +bwC +bwC +axD +hnE +axD +sqo +gHX +hAg +csW +fzx +hrM +cLf +sgz +sNj +sNj +sNj +sNj +sgz +fYe +sgz +sgz +sgz +sgz +sgz +fBD +jTR +uZx +jQo +cfv +tCE +pgv +krP +rjg +lTv +tlE +nwr +afA +xdj +pWa +kZw +vRJ +acc +acc +acc +acc +fDN +enu +oBU +aAg +cYH +aJv +enu +drJ +shG +vMb +quh +pDP +umo +aMR +ygj +qrl +ncX +eQi +tLI +rjn +vNH +tTJ +kmu +tOm +tCE +hzF +xlJ +czW +iGC +dje +kno +pFC +mJv +iGC +nHj +qtP +lXu +vew +aso +hSg +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(100,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +bwC +bwC +cLf +cLf +cLf +cLf +cLf +uuN +uuN +axD +jpd +jRc +ruc +jcW +xNb +axD +eKR +sgz +tUF +sPv +eoo +iLG +sgz +sgz +sgz +sSX +agw +bUj +sgz +cIa +lDn +uZx +aFJ +pyo +paS +mRi +cZb +meF +oSa +iCV +nwr +kZw +cWb +vxA +joQ +vAp +acc +acB +jmn +atX +mUW +enu +fNy +rNs +rNs +dCh +enu +alP +enu +nii +aGA +rss +aGA +rss +dbw +aGA +aGA +eQi +qjW +rjn +rjn +kmu +rFV +tOm +sut +hzF +hzF +hjo +gEr +hzF +hzF +hzF +lUl +wdm +dkm +wdm +aaB +nHK +nHK +nHK +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(101,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +iUF +cLf +cLf +cLf +cLf +cLf +cLf +bqX +bhD +axD +axD +axD +aEP +axD +axD +axD +vQf +sgz +vlD +puT +tsP +wNa +jSs +jzC +mcw +aKg +pmC +qka +ycO +mrV +egH +uZx +kmu +tOm +tCE +sRU +krP +kiB +sYi +uiH +nwr +jAe +fHU +myk +rTw +hep +bcu +gGS +bcu +bcu +pPy +enu +enu +sUI +enu +enu +enu +duS +pQM +pYu +ruP +lOE +mRA +dlZ +ygj +pQN +pQN +eQi +qrl +maR +oGX +kmu +aly +tOm +tCE +wjM +cWX +czW +iGC +keP +hKB +hzF +oDI +uir +uir +uir +aaB +nHK +cLf +kmZ +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(102,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +iUF +cLf +cLf +cLf +cLf +cLf +bqX +bqX +bhY +rcz +eYO +mrq +eBK +bQc +neH +nZB +fCY +loC +ejb +fZr +bUM +vGz +sgz +sRP +qgn +wsS +eXM +xGX +sgz +dFM +lUp +uZx +rqj +cvZ +gCL +wsM +wsM +nwr +nwr +nwr +nwr +aFz +wHa +wHa +aFz +vAp +vAp +vAp +vAp +nNP +fDN +enu +rgU +cTb +xmM +efx +iRL +bYc +kgA +kLO +ruP +jEr +qrl +ffk +ygj +wKo +fIX +eQi +dbw +wIV +ajK +vNZ +dco +lzF +aRW +tLv +bYF +fus +iGC +igK +hKB +hzF +lTp +vHY +pUH +amZ +aaB +nHK +cLf +kmZ +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(103,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +iUF +cLf +cLf +cLf +cLf +cLf +bqX +ogH +aeJ +xcs +tYQ +tYQ +tYQ +fID +nlQ +nlQ +lQD +sgz +uWg +cdX +pLO +sFB +sgz +xaH +mnI +jqT +sKF +vNc +sgz +mKD +xeo +mKD +fCy +mnt +nTT +eeL +fEL +vAp +aQL +aQL +aQL +aQL +aQL +aQL +aQL +aQL +aQL +aQL +vAp +acc +nat +enu +xrT +cTb +wfy +hYh +mCF +bYc +gbQ +fIY +ruP +qrl +vrR +rej +ygj +tQt +efc +xrV +cBj +cBj +jpZ +pRH +rec +fBz +reh +mCZ +opN +oAY +iGC +qXN +hKB +hzF +vqH +ewX +ewX +ewX +aaB +nHK +cLf +kmZ +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(104,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +iUF +bwC +bwC +bwC +bwC +bwC +eKR +pVC +yhk +lPz +cBh +cBh +rKb +dla +kCD +gkQ +lhD +sgz +sgz +sgz +vVr +sgz +sgz +sgz +raX +bbf +cTc +sgz +sgz +kJp +fSR +mKD +aFJ +bCJ +jVO +nFl +xRU +mvW +aQL +aQL +aQL +aQL +aQL +aQL +aQL +aQL +aQL +aQL +vAp +ike +fDN +enu +cLd +cdk +fTl +jbK +bJo +cdk +rPg +fIY +ruP +pQN +qrl +aqR +ygj +ffk +ffk +eQi +qrl +bzN +oGX +kmu +aly +dxT +nBA +hzF +hzF +eGn +sIX +hzF +hzF +hzF +aXz +vsx +vsx +vsx +aaB +nHK +nHK +nHK +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(105,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +iUF +cLf +cLf +cLf +cLf +cLf +bqX +szO +vhZ +wbf +kXN +klL +raA +eKR +mlG +gkQ +bRN +sXf +eKR +lkQ +dhl +fbC +qms +auM +hvt +iwm +aBy +mhG +jDT +uDE +ahw +nvK +kmu +eGN +izy +oTJ +mLO +mvW +aQL +aQL +qKi +aQL +aQL +aQL +aQL +aQL +aQL +aQL +vAp +laM +fDN +enu +sGu +xXi +bhU +mlo +wEg +cdk +gbQ +fIY +ruP +mSm +qrl +gTh +ygj +qrl +qrl +eQi +dxx +rjn +rjn +sAJ +aly +dxT +smi +hzF +efY +dhO +iGC +sJI +vSy +ufv +kEp +iGC +nHj +qtP +lXu +vew +aso +hSg +uXp +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(106,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +iUF +cLf +cLf +rPL +cLf +cLf +bqX +lTD +yhk +fUR +rUi +typ +qvh +jlw +iRB +gkQ +bGW +tbH +alc +jZj +nAx +kaz +dbJ +mMH +sPS +jww +btw +btw +btw +iow +cEf +oMr +irS +tjD +joa +eSe +qUl +mvW +aQL +aQL +aQL +aQL +aQL +aQL +aQL +aQL +aQL +aQL +vAp +qSq +lLW +tar +qxr +qxr +qxr +hOD +yma +cdk +tXn +fIY +ruP +ffk +ohh +ffk +ygj +fXU +eDV +eQi +vxl +rjn +fux +aUy +kmu +dxT +oBE +hzF +buH +dhO +iGC +iGC +iGC +iGC +dzU +iGC +nHj +iGC +aaB +nHK +nHK +nHK +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(107,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +iUF +cLf +cLf +tyd +cLf +cLf +bqX +hBX +qlc +wbf +lYZ +typ +goL +aHs +iRB +kZg +gbM +mzI +cgo +wHs +odL +wHs +xnc +rEp +qgd +xaI +bzE +epx +teT +fpm +cas +nvK +kmu +tWi +imy +csq +lDa +mvW +qZB +aQL +aQL +aQL +aQL +aQL +aQL +aQL +aQL +gvO +vAp +htw +bcu +enu +dTJ +xpJ +iDD +wEK +iDD +iDD +tCJ +aOY +xQv +qrl +qrl +qrl +qrl +qrl +iGK +eQi +bXx +rjn +vNH +tTJ +kmu +dxT +ekL +hzF +qDg +dhO +tSH +cSb +cSb +cSb +cSb +cSb +cSb +qtP +rKq +vew +uIW +hSg +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(108,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +iUF +cLf +cLf +cLf +cLf +cLf +bqX +qCT +vhZ +wbf +efb +rCd +kNX +eKR +tKX +kZg +nPm +yjH +eKR +lkQ +qrh +kPv +lQl +vFf +ylz +iFv +iFv +bjl +iFv +oPl +xOC +xAN +vVp +tDQ +rdY +csq +sTb +mvW +aQL +aQL +aQL +aQL +aQL +aQL +aQL +aQL +aQL +aQL +vAp +orE +bcu +enu +yfz +phO +ppw +uSG +pXC +kkF +enu +fnc +xRG +xRG +xRG +xRG +xRG +xRG +xRG +jvO +rjn +rjn +rjn +jcG +kmu +sqb +ivU +hzF +cWz +xOp +tAr +iGC +iGC +iGC +iGC +iGC +oXW +iGC +hzF +hzF +hzF +hzF +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(109,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +iUF +bwC +bwC +bwC +bwC +bwC +eKR +cNQ +kjs +ftR +fun +fun +hSi +sRM +kZA +gkQ +oOP +eKR +eKR +juw +mtG +juw +juw +juw +sPY +nED +nED +url +tEH +lmU +ydQ +nvK +kmu +dOD +eUD +scs +eTu +mvW +aQL +aQL +aQL +aQL +aQL +aQL +aQL +qKi +aQL +aQL +vAp +lXO +lbl +enu +enu +enu +enu +enu +enu +enu +enu +qiu +xRG +xRG +xRG +xRG +xRG +xRG +xRG +hQJ +rjn +ebP +kmu +kmu +aly +dxT +nCq +hzF +qqz +bMP +tNz +tNz +tNz +cqd +wRx +tNz +tNz +tNz +nHK +cLf +cLf +bwC +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(110,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +iUF +cLf +cLf +cLf +cLf +cLf +bqX +cQP +vay +eon +sZK +sZK +hLG +rbg +vot +iYO +bxN +eKR +mkZ +jHD +iLZ +jxi +phP +juw +vOe +vOe +vOe +pBu +juw +xfS +dLx +qGk +kmu +wim +fwz +nyA +mLe +mvW +aQL +aQL +aQL +aQL +aQL +aQL +aQL +aQL +aQL +aQL +vAp +wCC +bcu +vtW +bcu +cwD +bmp +kCJ +bmp +dga +bmp +ebi +uRc +uRc +uRc +uRc +uRc +uRc +uRc +wVb +bmp +seJ +awF +fBz +fBz +iIR +koz +nWx +nWx +ulV +nWx +nWx +luW +nWx +azg +xcl +xrd +ppk +hzF +bwC +bwC +wfz +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(111,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +iUF +cLf +cLf +cLf +cLf +cLf +bqX +bqX +tsJ +bCr +kYU +jTd +rkz +lrc +eHa +vQP +ita +hOb +cwq +cwq +giv +iPS +wcp +juw +nKt +sWv +sWv +xDh +juw +pSO +xYn +pSO +jaa +qbA +tCE +mJR +wyq +vAp +aQL +aQL +aQL +aQL +aQL +aQL +aQL +aQL +aQL +aQL +vAp +xQH +xQH +xQH +sSm +xQH +bmp +job +bmp +ydv +bmp +rsl +jiz +wQM +qBf +qBf +qBf +cnm +jiz +cSp +bmp +aFJ +tHF +tCE +aDE +bEu +rBb +nWx +qdR +qdc +gaj +htJ +gBB +tLX +azg +azg +azg +azg +azg +cLf +cLf +bwC +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(112,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +iUF +cLf +cLf +cLf +cLf +cLf +cLf +bqX +bqX +eKR +eKR +eKR +alg +eKR +eKR +eKR +eKR +eKR +dwv +rtA +rFX +juU +xhu +gYO +hsj +hsj +uBe +uBe +juw +eKw +cCo +pSO +rqj +tDl +gCL +uZx +fDa +vAp +vAp +vAp +wHa +aFz +wHa +wHa +aFz +wHa +vAp +vAp +vAp +cRg +rUC +bbh +pYY +mds +bmp +vvC +qQK +vvC +gjI +vnr +qPr +cwt +nWC +onB +ovW +cAa +amh +fGE +bmp +rqj +tDl +gCL +nWx +pMR +dzm +nWx +ykf +wsi +mQy +wYc +mQy +cOT +azg +mIk +aIz +vEm +azg +gmd +gmd +azg +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(113,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +iUF +iUF +cLf +cLf +cLf +cLf +cLf +cLf +bwC +cLf +eKR +iSE +viK +oIV +peL +bkb +juw +vCI +mXY +mXY +nPQ +tIN +euR +juw +wUM +poo +xMJ +bEW +juw +pTP +rBT +pSO +kmu +tHF +tCE +feA +fDa +gZI +jkc +fDa +ivR +lAe +uyB +tdm +lAe +lAe +des +xQH +mCv +wwD +bgU +kTL +pYY +pwx +bmp +bmp +bmp +bmp +bmp +vHL +jYH +vMA +bZq +vwD +nkc +iaI +loa +tZW +bmp +aFJ +tHF +tCE +nWx +ekz +oeL +loU +jKy +iBe +pOv +kUW +aRt +sxk +azg +xgZ +tfx +xgZ +azg +gpy +sQC +azg +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(114,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +iUF +bwC +bwC +bwC +bwC +bwC +bwC +bwC +cLf +eKR +tju +nID +kbT +qnh +oOI +juw +enT +kGu +kGu +lCk +cwq +oRK +juw +dwz +bOO +niv +wtZ +juw +cLf +hQF +wsM +kmu +pyo +ftF +nuR +fDa +pLM +tgf +fDa +npL +kZw +kZw +nfa +dic +kZw +ubs +xQH +vZn +kqD +dJg +dyD +sgq +vAE +tDa +fXR +fXR +fXR +bmp +pjI +vrF +fkn +sAc +bmL +wSn +oma +axa +xbs +bmp +tsI +tHF +tCE +nWx +cRM +hGo +dPw +jGZ +kpj +kJl +wYc +hGh +vSn +azg +kxk +oQd +dge +pCX +jYy +xdf +gJS +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(115,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +iUF +cLf +eKR +hwc +hsB +lGH +lGH +caW +juw +aMF +onG +onG +wbC +bAS +vKx +juw +iPd +wnY +pAa +eJE +juw +cLf +hQF +kgm +kmu +tHF +tCE +xBI +fDa +vVg +ism +eiT +uYV +uFa +aGL +aGL +cgr +xiy +juf +xQH +mcA +kqD +jpn +vOT +oqt +oqt +aFw +oLH +wWZ +wWZ +utY +rTC +jLC +bVg +olq +hcm +mDX +hEu +fUH +tvj +bmp +kmu +tHF +tCE +bTm +jKy +oeL +dPw +rGQ +muf +pOv +lCO +umO +uhD +uhK +kCg +qPx +uld +uld +uld +jRw +gJS +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(116,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +iUF +bwC +eKR +eKR +uCw +cPc +oGp +eKR +juw +juw +juw +juw +juw +juw +juw +juw +wxW +qmg +dTd +npg +juw +cLf +hQF +kgm +ltF +tHF +vgz +uZx +fDa +fDa +fDa +fDa +oOb +bmf +roW +iHK +myV +xdq +jss +xQH +gLp +dNh +gGs +skV +uzH +nAG +pUj +oLH +gUs +wWZ +bmp +qSg +hrO +ixm +fPk +geo +gtn +hnY +oru +rqW +bmp +kmu +tHF +tCE +bTm +hAV +hGo +tki +iEK +wsi +bfD +wsi +bJQ +peA +srj +xtA +xxT +jex +qmo +hJU +hhZ +gJS +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(117,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +iUF +cLf +cLf +eKR +jVy +brP +jVy +eKR +bwC +bwC +bwC +bwC +bwC +bwC +bwC +juw +vOe +vOe +vOe +vOe +juw +cLf +hQF +kgm +kmu +jlp +tCE +jgB +fDa +lmd +lHy +gQt +pYE +bmf +bBX +iRG +qoO +uNt +yjw +xQH +ruE +kPj +gGs +coQ +kFi +aUB +tDa +wWZ +liH +luK +bmp +bfe +oCx +aSd +naX +gyM +doH +jIc +xhy +eyn +bmp +rGv +qbA +tCE +bTm +gho +tGZ +ccZ +rGQ +naO +pOv +gaK +aRt +pQn +azg +ptR +ayx +cXr +ojv +tJB +eYe +azg +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(118,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +tyd +cLf +cLf +cLf +cLf +cLf +cLf +hqF +epi +epi +epi +epi +epi +pSS +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +nMo +kgm +kmu +hmb +tCE +gpR +fDa +bga +fVs +fDa +hue +bmf +pvy +fsk +qoO +xdq +hZV +xQH +vqY +dqr +gGs +hKX +sgq +nLb +tDa +liH +wWZ +koM +bmp +bmp +dkC +bmp +jgC +bmp +bmp +bmp +jRK +bmp +bmp +fCy +tHF +tCE +bTm +uik +qCd +dyA +vTU +gBi +vTU +gBi +lvn +btM +azg +kyd +war +gLK +azg +thg +fUj +mFb +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(119,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +slu +ili +cLf +cLf +cLf +bwC +cLf +cLf +bwC +dVE +pjN +hoe +pjN +pjN +pjN +pjN +pjN +vGy +vGy +pjN +pjN +jfb +hYU +kgm +kmu +tHF +tCE +sPi +fDa +iFV +omw +fDa +vCw +bmf +wtW +mvb +qoO +xdq +ojB +xQH +fZT +dAu +gGs +uzH +kFi +euF +tDa +bdk +oSS +oSS +bmp +sDK +qXp +jEX +cLA +ksq +bmp +vZF +udt +bTI +bmp +kmu +tHF +tCE +bTm +oJQ +uhD +wPh +jWg +cwb +hzC +cwb +hDX +tjc +azg +azg +azg +azg +azg +azg +azg +azg +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(120,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +kGm +aPz +aPz +xsN +bwC +bwC +cLf +cLf +reg +hYU +mQP +rXq +cqH +vGy +vGy +cqH +cqH +jfb +hYU +cLf +hJs +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +utM +utM +utM +kmu +tHF +tCE +fDa +fDa +fDa +fDa +fDa +eEE +bmf +abc +sqx +flc +xdq +smT +xQH +xQH +vWY +gGs +uzH +rnB +xQH +ahE +ahE +ahE +ahE +bmp +bmj +gEP +qtc +dGq +aFp +bmp +xrO +odU +qrj +bmp +ymi +tHF +tCE +nWx +toD +uEr +dPw +dIe +oOe +uWj +oOe +gNo +erE +nWx +aSE +vFr +vlM +uEo +cLf +bwC +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(121,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +kGm +oOC +oOC +xsN +cLf +bwC +cLf +cLf +dwF +cLf +cLf +cLf +cLf +cLf +bwC +cLf +cLf +cLf +cLf +cLf +hJs +cLf +utM +utM +utM +utM +utM +utM +utM +utM +utM +swP +lnu +tuA +sGs +wOi +fDa +rYU +irA +gFU +hfS +uYV +cCv +dmH +dmH +dmH +tDL +kZw +aJX +xQH +rSF +gGs +uzH +bIJ +ket +ahE +kEJ +ahE +vFT +bmp +sYu +uCj +wsb +qpO +oLF +bmp +bmp +bmp +bmp +bmp +jQo +tHF +tCE +nWx +nWx +nup +owB +bAJ +iNY +muP +nXY +cbv +gep +nWx +mUU +sLt +dnt +uEo +bwC +iUF +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(122,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +iUF +bwC +srs +aPz +aPz +srs +jEY +jEY +cLf +spl +ong +rhR +lmI +jEY +jEY +srs +jEY +jEY +cLf +cLf +cLf +cLf +hJs +cLf +cLf +cLf +utM +jeL +jeL +eyN +paC +kEg +jeL +xxH +utM +kmu +tHF +tIT +fDa +pQE +ghM +oJD +fDa +usF +ufr +kZw +uIU +ufr +kZw +rhP +wHo +xQH +xQH +cWD +uzH +haQ +ahE +ahE +rZL +ahE +qsx +bmp +bmp +bmp +bmp +bmp +bmp +bmp +eMG +jZx +jZx +uZx +kmu +tHF +tCE +tDw +nWx +nWx +nWx +nWx +nWx +nWx +nWx +dCo +nWx +nWx +vcV +uEo +uEo +uEo +cLf +iUF +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(123,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +iUF +cLf +jEY +vWK +vWK +uyc +juh +srs +dWb +bOl +tVJ +iPH +iuU +srs +bsZ +oyq +iRp +jEY +jEY +cLf +cLf +iWV +hJs +xqe +bwC +utM +utM +kOd +qTF +qTF +qTF +xIz +xIz +fyC +qGo +kmu +tHF +gwq +fDa +fDa +fDa +fDa +fDa +wTp +ufr +ufr +rTw +gzp +aJL +ufr +ufr +pkn +vAD +gGs +qdt +akl +clG +tXi +utH +avW +sGV +pik +xzK +kdu +ahE +nxG +ubk +jNh +nxG +nxG +nxG +aNV +nxG +sGs +nTT +vwZ +nxG +nxG +nxG +xJe +nMX +uEo +prI +nAu +qWq +rjG +eoy +uEo +fzL +uEo +cLf +iUF +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(124,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +iUF +cLf +jEY +vWK +hfm +vBs +qBt +mIe +hAa +bOl +qYV +sQd +rgp +mIe +qBt +vBs +hfm +eVE +jEY +bwC +bwC +vfJ +hJs +vfJ +cZp +utM +fSb +vBp +ybh +uCy +bDX +tab +alI +abi +qGo +kmu +tHF +tCE +wHj +fDa +pQl +yed +fDa +fDa +nhC +dcU +ljl +ljl +ljl +ljl +hvQ +hvQ +era +lIm +mNl +xjj +ntS +oEy +phi +jzu +buw +nDg +ahE +ahE +ahE +fFp +crD +dxT +dxT +dxT +dxT +dxT +dxT +jCw +fBz +aBY +fBz +fBz +nMR +gwS +jfm +uEo +vnG +lqy +wkR +soA +iwd +fDK +rZc +uEo +cLf +iUF +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(125,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +iUF +cLf +jEY +uNZ +nCf +vDK +gPI +ibi +mOC +mOC +tla +dcm +brw +kyv +yeQ +sYI +uiP +cES +jEY +cLf +cLf +iWV +hJs +iWV +bwC +utM +utM +wWD +nZo +nZo +nZo +nZo +nZo +nZo +lao +kmu +jlp +tCE +iFr +fDa +ghM +mXE +dSQ +oqP +reI +vAp +owj +mpA +rzB +rzB +mpA +uAH +vAp +xzj +cOp +ssS +ahE +ahE +oRM +ahE +ahE +vPN +rUt +hrm +ahE +nxG +dxT +aly +prW +prW +prW +gag +prW +anT +prW +sOA +bVA +aKJ +jqj +dxT +aQS +uEo +pCO +xaM +lWc +xBl +mBI +uEo +rXg +uEo +cLf +iUF +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(126,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +iUF +iUF +cLf +jEY +jEY +sBv +vDK +swl +jEY +ndo +gHQ +srs +kee +rPi +jEY +sBv +sYI +swl +jEY +jEY +cLf +cLf +cLf +hJs +cLf +cLf +cLf +utM +jeL +jeL +lnZ +dCu +xUR +vRm +kkJ +utM +xsv +tHF +tCE +rOq +fDa +wGu +mdv +jkG +fDa +mgV +vAp +dSp +mSK +mSK +dmo +mSK +rUZ +vAp +ooE +upW +wTT +ahE +pxM +pKH +nCs +ahE +ktU +ahE +ahE +ahE +lfh +dxT +fsc +crU +uLU +uLU +crU +crU +crU +crU +crU +crU +crU +iEn +eZn +emy +uEo +uEo +uEo +uEo +uEo +uEo +uEo +uEo +uEo +cLf +iUF +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(127,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +iUF +iUF +cLf +cLf +cLf +srs +sBv +vDK +qXZ +srs +oyO +gHQ +hZM +kee +qjp +srs +iQD +sYI +swl +srs +cLf +cLf +cLf +cLf +hJs +bwC +bwC +obA +utM +utM +utM +utM +utM +utM +utM +utM +utM +rGv +tHF +tCE +jpg +fDa +fDa +fDa +fDa +fDa +hFO +vAp +mBT +uzQ +wED +flH +uzQ +qEF +vAp +iTW +tDa +eXU +ahE +xMg +bFa +nCs +ahE +swe +ajL +tAw +ahE +nxG +dxT +aQS +uLU +vcs +vcs +yiQ +aor +xRL +xRL +xRL +xRL +fAg +pOd +pbO +kyb +cno +lSN +fYQ +lnt +ltS +ycs +pYX +rHU +uFb +cLf +iUF +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(128,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +iUF +cLf +cLf +cLf +vxX +srs +eEx +vDK +sfY +srs +eJQ +gHQ +rnU +kee +gJg +srs +eEx +sYI +sfY +srs +bwC +bwC +bwC +bwC +hJs +cLf +cLf +lJq +axV +iyT +vfJ +psj +iMk +bDy +irx +gyl +gvF +qaz +tHF +qAo +uZx +fDa +eMG +xBz +jZx +fDa +fzK +vAp +vAp +vAp +wHa +wHa +vAp +vAp +vAp +jKt +kmu +kTM +ahE +ahE +ahE +ahE +ahE +ahE +ahE +ahE +ahE +nxG +dxT +aQS +uLU +vcs +jVq +kag +iBl +oZK +kag +kag +kag +kag +dct +dgX +iin +iin +iin +iin +rtL +wKE +gxM +cmZ +osX +pUr +cLf +iUF +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(129,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +iUF +bwC +bwC +unk +vxX +srs +srs +npM +srs +srs +yic +gHQ +aAk +kee +cZi +srs +srs +oWB +srs +srs +cLf +cLf +bwC +cLf +hqF +epi +epi +dJJ +goB +goB +txy +tGE +cUk +cUk +cUk +hFY +wEA +nxG +sGs +nTT +wEF +hny +nxG +nxG +nxG +ocm +nxG +ubk +aHp +nxG +nxG +nxG +hjJ +nxG +glH +iAE +xAm +nMR +rWl +ubk +nxG +aNV +dzN +nxG +kYZ +nxG +wEF +nxG +dxT +aQS +uLU +vcs +hFA +kag +hmj +xeS +kmb +jWE +pxY +hbf +dct +hqk +jFc +jFc +iOc +adV +usQ +ltS +eCC +qeW +wlc +pUr +cLf +iUF +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(130,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +iUF +cLf +cLf +vxX +vxX +srs +lPj +cqm +srs +oyO +pyH +gHQ +iJP +kee +jbM +ncc +srs +sYI +skw +srs +cLf +cLf +bwC +cLf +cLf +cLf +cLf +lJq +eRu +eRu +vfJ +vSv +grl +dko +qXy +mJG +oTX +tEW +pkN +tNn +fIr +dxT +dxT +dxT +dxT +dxT +eyq +dxT +dxT +dxT +dxT +gii +dxT +dxT +dxT +jBl +vsO +jBl +kda +fBz +fBz +ohw +fBz +uOb +dxT +dxT +fIr +nwv +gwS +aQS +uLU +vcs +kco +kag +xiZ +nSH +oqz +kXz +oqz +ydy +dct +hqk +jFc +ltS +gGr +gGr +gGr +gGr +uFb +jke +kiK +uFb +bwC +iUF +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(131,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +iUF +cLf +cLf +cLf +vxX +eOn +fxo +vDK +srs +eJQ +vFz +kbv +xkc +kee +jBg +qjp +srs +iVK +hnL +srs +cLf +cLf +bwC +cLf +cLf +cLf +cLf +vfJ +vfJ +vfJ +vfJ +bUu +grl +pJN +iKc +rSL +lxy +lFE +cBr +deY +xMk +aQS +vTx +aQS +aQS +aQS +aQS +aly +aly +aQS +grK +aQS +aQS +ksw +lHc +aly +vaZ +aly +aly +aly +aly +dmx +deY +qaO +aQS +vEp +xMk +aQS +rTs +xoQ +uLU +jwK +vcs +kag +qej +nSH +myx +agr +wNL +hbf +dct +smG +bEq +lZu +gGr +hrp +hcp +gGr +wEe +vBV +cpF +uFb +cLf +bwC +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(132,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +iUF +cLf +cLf +cLf +cLf +dZy +dZy +bHh +dZy +wHJ +wHJ +wHJ +mDP +usL +wHJ +kTx +kYu +nKu +kYu +kYu +cLf +cLf +bwC +cLf +cLf +cLf +vxX +vxX +vxX +vxX +gvF +uLz +grl +xET +iKc +hle +gvF +rIb +iAw +swi +swi +swi +rQx +swi +swi +swi +swi +cmf +fGu +lbZ +azv +azv +azv +azv +azv +jqz +dmx +xoQ +aQS +aQS +aQS +qMV +uZx +npH +crU +crU +crU +crU +crU +crU +crU +crU +sFT +kag +kFm +nSH +upS +urZ +uNy +hbf +dct +nfF +srE +kir +orD +jzv +oRe +gGr +pYX +qeW +pYX +uFb +uFb +uFb +uFb +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(133,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +iUF +cLf +cLf +cLf +dZy +dZy +nzf +gWO +kIl +wHJ +lKF +iuB +sfT +iuB +hWt +wHJ +rlt +pgk +ins +kYu +kYu +bwC +bwC +bwC +bwC +vxX +vxX +vxX +vxX +vxX +gvF +dnW +iKc +slL +iKc +cRV +caB +vdR +eVR +swi +dOC +sBO +sBH +hms +bhS +pFo +azv +stw +nJF +stw +azv +dZd +esX +lYm +azv +azv +aVm +jUU +orJ +orJ +orJ +jUU +jUU +nyQ +bpy +crU +xUW +xUW +xUW +xUW +xUW +fZc +xUW +kag +pbX +xeS +nDU +vTO +mWJ +hbf +dct +hqk +jFc +mjd +gGr +gGr +gGr +gGr +dai +qeW +taw +nJK +gKS +gHZ +cLW +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(134,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +iUF +bwC +bwC +bwC +dZy +awB +glq +spG +lbt +wHJ +iuB +iuB +sfT +iuB +iuB +wHJ +gub +pTC +pog +jAd +kYu +cLf +cLf +cLf +cLf +vxX +vfJ +uJt +uJt +vfJ +gvF +eBY +iKc +vuq +hPH +iKc +gtB +uSd +gQN +vks +yhV +oYu +tPW +luA +ykh +tXS +xOU +kBt +wdz +nOZ +xcb +eqQ +dyb +qdo +exQ +azv +sQe +jUU +flN +kSW +tye +bFI +jUU +xjW +dQQ +xUW +xUW +nMI +xUW +pLy +nMI +niB +xUW +gyu +uLY +uLY +teG +sHg +sHg +qmD +wKY +iFq +jFc +kyQ +ltS +ohu +jRj +ltS +ltS +epT +cmZ +hbq +uFb +pUr +uFb +cLf +iUF +iUF +iUF +iUF +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(135,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +iUF +tyd +cLf +cLf +dZy +wcm +hTf +okg +jWj +lNE +gRq +gRq +gRq +eAW +eAW +dPY +bNu +wpv +qFN +jqD +kYu +cLf +cLf +cLf +cLf +vxX +uJt +eJr +wWY +kju +wMB +jrd +iKc +slL +slL +slL +oXz +bsw +wxa +vks +yhV +aDm +oLh +vtP +nne +jhK +gIw +uJH +uJH +ceg +sfF +pat +lrF +qdo +bYo +azv +sQe +jUU +oyC +pxh +lQQ +bjM +jUU +lMI +kBM +nMI +pWw +nMI +pWw +pWw +nMI +pWw +pWw +jij +jij +ugs +khA +vNB +udQ +hbf +dct +bcr +jFc +cVL +ltS +eAP +wjP +jYm +ltS +qTS +qeW +wlc +cWv +jge +uFb +cLf +cLf +bwC +cLf +iUF +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(136,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +iUF +cLf +cLf +vxX +dZy +fhG +lQe +qrt +rmx +wHJ +iuB +iuB +sfT +iuB +iuB +wHJ +bNu +gLJ +pog +wCY +kYu +cLf +cLf +cLf +cLf +vxX +uJt +eJr +uba +vfJ +aTU +jUi +nvQ +nvQ +nvQ +vES +kSM +sAO +wxa +vks +yhV +rWQ +kxz +hri +hIV +uig +xOU +kcY +prg +qKm +rDl +ylj +esP +eri +fwA +azv +sQe +jUU +jUU +jUU +uqy +jUU +jUU +jUU +kBM +nMI +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +xAy +jVx +lHm +lHm +lHm +lHm +nyE +kwU +tEM +ltS +ltS +ncZ +uDk +vEh +ltS +uFb +rxw +cuj +uFb +uFb +uFb +uFb +uFb +uFb +cLf +iUF +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(137,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +vxX +vxX +dZy +dZy +xZX +eMD +aMx +wHJ +ozr +iuB +sfT +iuB +xPo +wHJ +hna +hna +loq +kYu +kYu +cLf +cLf +cLf +vxX +vxX +uJt +nXF +tLH +vfJ +cPt +rWj +xdT +rWj +rWj +cPt +ipv +tdk +hkc +swi +dHy +cBB +trL +nMP +xOU +mwW +xOU +xOU +xOU +qKm +wDD +vRZ +oQe +qdo +oac +azv +sQe +lMI +jUU +rtx +qXa +fRC +tac +jUU +kBM +nMI +cLf +xAy +bwC +bwC +xAy +cLf +bwC +xAy +xAy +xTw +uUA +sxK +sTg +lHm +dIR +bcr +vVs +ltS +hfv +pLj +dOJ +fBN +oXI +icC +eLm +hRM +uFb +lhG +uac +diD +lfv +uFb +cLf +iUF +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(138,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +vxX +vxX +vxX +dZy +tgw +nes +woJ +dZy +dZy +wZz +bxn +wZz +kYu +kYu +kYu +vKt +kYu +kYu +vxX +cLf +cLf +cLf +vxX +vxX +uJt +eJr +wWY +eZN +cPt +alA +qIQ +irJ +rBI +cPt +ctE +ixU +mOc +swi +swi +swi +lOy +poZ +xOU +exk +geZ +cya +vpq +qKm +xVK +ryy +ryy +nvg +qHR +azv +sQe +dNu +jUU +wwB +jZp +liF +rVA +jUU +kBM +pWw +cLf +bwC +cLf +cLf +uuN +uuN +uuN +xAy +pEf +sbd +soB +sbd +gwI +lHm +dct +umt +gUZ +kRs +dYR +jGX +pWP +gqz +swv +fpG +cBt +xAH +qYW +vgP +wag +xzJ +kub +pUr +bwC +iUF +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(139,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +vxX +vxX +dZy +prz +idU +wze +aby +hGZ +wZz +cdo +wZz +ipR +kYu +lYN +iPQ +noc +kYu +vxX +vxX +cLf +cLf +vxX +vxX +vfJ +vfJ +xbu +gMK +cPt +lcj +tCz +dfr +mKF +cPt +iQZ +oqp +dfM +pgS +lMT +ixU +ixU +ixU +xOU +wqK +oel +chm +qnQ +xcb +wCO +tld +kZf +azv +azv +azv +kAw +pyi +szp +hRd +sBm +bAE +ddb +jUU +nyQ +pWw +cLf +bwC +cLf +cLf +uuN +xAy +tEU +ugN +pWE +hYF +qgY +pQc +ruq +xWg +qPp +bcr +qVH +ltS +miK +vLH +pVx +slr +uKg +qMC +cXh +qry +uFb +ixL +bon +uYk +eVG +uFb +cLf +iUF +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(140,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +vxX +wfl +dZy +dZy +dZy +wZz +wZz +wZz +vRw +wZz +wZz +wZz +kYu +kYu +kYu +pIN +vxX +vxX +cLf +cLf +vxX +vxX +vxX +vfJ +eIV +gMK +cPt +voQ +tCz +urh +ooy +cPt +iQZ +vHI +kcE +iCD +mvd +ixU +soG +kqB +xOU +drO +fPx +kwp +jvM +tld +jIG +qWM +azv +sge +eEG +sge +rpP +niB +jUU +jUU +jUU +dda +jUU +jUU +kBM +pWw +cLf +bwC +cLf +cLf +axt +uuN +uuN +xAy +rdI +byj +jvN +sbd +xqB +lHm +nWu +bcr +ixa +ltS +ltS +ltS +ltS +ltS +ltS +uFb +vGJ +vPF +uFb +sot +kBy +spd +mAA +uFb +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(141,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +vxX +vxX +wZz +wZz +wZz +wZz +xEr +vgd +oHd +eXy +bKX +wZz +wZz +wZz +fBc +vxX +vxX +vxX +fYe +fYe +vxX +vxX +vxX +vfJ +gLw +jmY +cPt +kKJ +hEw +xWb +cUe +cPt +eQf +eCO +tZF +kcN +xGB +ixU +uDQ +kdg +xOU +xOU +qPt +ghK +xBn +tld +daN +saQ +dXN +hSC +lSz +sge +dht +jUU +jUU +jOq +jZV +sgu +tlp +aXA +ajQ +nMI +cLf +xAy +bwC +bwC +xAy +cLf +bwC +xAy +xAy +qXB +qBB +qqy +kNs +lHm +fbM +bcr +cEc +mht +koe +wcC +qWS +ltS +gWo +uFb +uFb +obL +uFb +ruZ +ruZ +xYa +ruZ +ruZ +ruZ +ruZ +ruZ +ruZ +fmY +bwC +mPv +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(142,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +vxX +vxX +wZz +wZz +dxA +dPf +dPf +ieI +nDC +dPf +dPf +dPf +uCS +wZz +wZz +vxX +vxX +uif +fYe +fYe +fYe +vxX +vxX +vfJ +rXG +raz +cPt +kYN +hEw +irJ +cPt +cPt +dmE +ixU +wVL +ixU +ixU +ixU +tZt +cpw +maA +aqr +usa +kWk +woz +fwT +pyx +obU +sge +mqz +xlm +sge +dht +jUU +spf +jSf +liU +pHP +wpi +jUU +kpw +nMI +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +xAy +lHm +lHm +jVx +lHm +lHm +dct +urT +kHn +kHn +kHn +lNz +tuH +ltS +mTP +pUG +fNn +fNn +mTS +ruZ +huX +rpR +mnk +pUr +byf +pUr +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +tyd +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(143,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +vxX +vxX +wZz +wZz +tOs +jTg +jTg +jTg +cHP +hwP +hwP +hwP +wmd +wZz +wZz +vxX +vxX +fYe +fYe +fYe +fYe +vxX +vxX +vfJ +oBP +raz +wtr +rrq +aNF +irJ +jRN +jyQ +ruL +pdz +tZF +wPX +mlV +cpw +cpw +jIm +xOU +xOU +xOU +azv +azv +azv +xad +azv +sge +sge +sge +sge +dht +jUU +sIJ +awW +nLc +jUU +rcs +jUU +kBM +nMI +nMI +nMI +nMI +pWw +pWw +nMI +nMI +nMI +nMI +lMI +niB +isg +lFv +dFi +lvT +vHf +fzY +jFc +jFc +gVe +jFc +ltS +wLj +hjU +lxw +gNd +ruZ +ruZ +ruZ +rpR +oPB +nnT +wlc +euX +bbq +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(144,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +vxX +vxX +wZz +wZz +rdK +jTg +dLi +wZz +hVW +wZz +pvG +hwP +iYC +wZz +wZz +vxX +vxX +fYe +fYe +fYe +uif +vxX +vfJ +vfJ +oBP +vfJ +cPt +cPt +wxP +xgc +hld +ugh +aZs +jDP +vJE +vJE +vJE +dIr +kQv +lfx +thf +tJx +kQt +aCv +jQl +niB +kUz +crU +tHh +pXS +jrY +crU +dht +jUU +ujt +nAr +jUU +jUU +lRr +jUU +kBM +sRI +qRb +crU +arl +lok +xUW +ngh +crU +bqT +lFv +lFv +lFv +cwk +joB +dUi +nCe +mBX +xma +dUi +xma +wWt +xma +dUi +dUi +ruZ +ruZ +ruZ +ruZ +fFT +wIB +tzw +oPB +pUr +sjN +pUr +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(145,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +vxX +vxX +vxX +wZz +wZz +mYK +qWH +pzB +wZz +wZz +wZz +wql +cHP +taK +wZz +wZz +vxX +vxX +vxX +fYe +fYe +vxX +vxX +vfJ +xAd +oBP +xAd +kHG +cPt +mDK +iUJ +cPt +ixU +cpw +dfM +pBn +cPo +qii +owp +iQZ +ocV +thf +qlG +rLT +aCv +hHx +niB +kUz +niB +pXS +niB +umK +crU +dht +jUU +jUU +ffp +pso +uyA +whn +jUU +kBM +crU +sRI +crU +haa +sFX +eIy +rBw +crU +tOH +djo +eyg +eyg +eyg +eyg +eyg +uEf +wHb +tFW +brx +tFW +aFD +neu +oVa +dUi +mvI +ykO +azu +uFb +hab +pyK +sDr +jyM +ykG +ykG +ykG +ykG +ykG +fdj +bwC +mPv +vxX +vxX +vxX +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(146,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +vxX +vxX +vxX +wZz +wZz +fOM +jTg +ajU +wZz +cSa +wZz +odg +hwP +tOp +wZz +wZz +vxX +vxX +vxX +cLf +cLf +vxX +vxX +vfJ +xAd +iXp +xAd +ruN +cPt +xFH +xFH +cPt +dYD +wAy +lQU +ugP +tNR +oUW +mnd +peo +bWi +thf +dmM +pld +aCv +aCv +jih +kUz +niB +niB +crU +crU +crU +dht +onK +jUU +jUU +jUU +jUU +jUU +jUU +ajQ +niB +niB +crU +ijp +joB +pjE +qhw +crU +tOH +eyg +eyg +lYt +gCN +tYy +eyg +voB +kld +thX +wxk +gQK +wxk +lkw +cdi +dUi +ltk +ied +wpH +uFb +gUv +lFW +pcN +tbb +ykG +eZr +ayy +nVz +ykG +ykG +ykG +ykG +ykG +ykG +ykG +vxX +vxX +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(147,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +vxX +vxX +vxX +wZz +wZz +toT +jTg +jTg +oZp +qRK +hwP +hwP +hwP +emn +wZz +wZz +vxX +vxX +cLf +cLf +cLf +vxX +vxX +dpu +aku +uOo +xAd +lAc +lAc +lAc +lAc +lAc +lAc +cAr +sYn +ejS +aMU +viX +ocq +gfF +bWi +lhx +vVk +kcB +wMZ +rXT +kNk +bwQ +mEs +xFh +lPe +lPe +lPe +aLH +woI +woI +woI +woI +woI +woI +woI +xqa +jXO +kzG +crU +crU +joB +niB +crU +crU +tOH +eyg +oKF +hUw +qjw +mUg +gTV +piu +gEJ +jEc +sJo +xKC +omE +jxd +mQk +dUi +uFb +jHR +uFb +uFb +uFb +uFb +uFb +tRb +ykG +cfO +sbZ +kjp +wgk +kUp +bBH +pRG +arr +aRs +ykG +vxX +vxX +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(148,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +vxX +vxX +wZz +wZz +biC +dPf +dPf +cHP +nDC +cHP +dPf +xZL +jPg +wZz +wZz +vxX +vxX +cLf +cLf +cLf +vxX +vxX +ilp +aku +uOo +ilp +lAc +lXz +oAX +wzX +hfD +tVF +wAy +mUP +hfB +kuW +smE +xCw +rAz +thf +thf +uzv +hlh +dhb +crU +crU +skc +crU +gAD +crU +crU +nMI +aRf +aRf +nMI +iCT +iCT +iCT +nMI +aRf +aRf +nMI +xqa +aeq +jXO +lFv +lFv +lFv +lFv +cwk +eyg +qsu +kFp +csB +pAB +ryG +sIx +cFc +iCM +grv +dUi +cAy +vqI +ger +dUi +fgq +ulc +ulc +ulc +ulc +ulc +gIW +bos +ykG +lwC +iMK +oMi +wgk +bBH +dwH +ptc +saJ +arr +ykG +vxX +vxX +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(149,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +vxX +vxX +wZz +wZz +wZz +wZz +gvN +onn +cHP +whM +wZR +wZz +wZz +wZz +wZz +vxX +cLf +cLf +cLf +cLf +vxX +vxX +vfR +aku +uOo +ilp +lAc +mxs +qQr +oft +mmV +tVF +jiw +sHn +sml +pIM +kBs +lBJ +puX +thf +vyp +lZn +tDk +taI +crU +xAr +xUW +qNU +niB +hjI +crU +vxX +bwC +bwC +nbu +nbu +nbu +nbu +nbu +bwC +bwC +pLB +dpU +dpU +dpU +dpU +ffJ +dpU +dpU +shc +eyg +rWM +msZ +hWW +mUg +gTV +aGQ +kEn +jxd +fzW +gur +mkE +jxd +iPm +dUi +gID +ulc +uFb +uFb +uto +uFb +ykG +xOJ +ykG +ykG +uLh +nMW +gvn +cdI +ptc +rrz +wOy +voY +ykG +vxX +vxX +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(150,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +vxX +wNk +wZz +wZz +wZz +wZz +wZz +pGH +wZz +wZz +wZz +wZz +wZz +wNk +vxX +cLf +cLf +cLf +cLf +vxX +vxX +ilp +aku +uOo +ilp +lAc +xPZ +gzr +xWq +uhc +tVF +jiw +qbd +dzC +plC +mHV +bgm +oZb +thf +dus +sNP +gGo +nMI +crU +ijp +xUW +aoA +pXS +hjI +crU +vxX +bwC +bwC +nbu +gxw +gxw +cxN +nbu +bwC +bwC +bwC +dpU +iel +hTX +sPV +wTc +xBV +jWU +siX +eyg +eyg +sDh +lrw +msV +eyg +dUi +myg +sCf +svf +svf +svf +svf +pTJ +rfd +ulc +dbn +uFb +wMu +taP +fpo +ykG +vPT +fIW +mqH +wCv +oMi +wgk +jKu +saJ +ptc +dwH +arr +ykG +vxX +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(151,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +wNk +wNk +wZz +wZz +nRq +wZz +wZz +wNk +wNk +cLf +cLf +cLf +cLf +cLf +cLf +cLf +vxX +vxX +ilp +aku +uOo +ilp +lAc +wzX +eFx +oft +hfD +tVF +dfM +vqv +cct +bSr +tMT +vqv +eOD +kVP +qPI +lhA +kbD +nMI +sZS +niB +rab +ise +niB +qAI +crU +vxX +bwC +bwC +nbu +gxw +puQ +gxw +nbu +bwC +bwC +bwC +dpU +nav +pJw +duo +ijv +tAx +uhE +vIi +dpU +eyg +gTV +vME +gTV +eyg +wpn +cFc +tlY +vEZ +nPM +tQC +fQO +eqp +dUi +csj +svK +uFb +gJL +oPB +oPB +ykG +nLi +lzW +mKO +xwh +wdc +wgk +jKu +jKu +wIN +arr +arr +ykG +vxX +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(152,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +wZz +wZz +oYv +wZz +wZz +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +vxX +vxX +ilp +aku +uOo +ilp +lAc +sOJ +uhc +uhc +uhc +tVF +dfM +dfM +kMA +gdL +eki +vLy +sSL +kVP +ucg +ipV +aHt +eRq +gqA +ers +niB +aoA +qOs +bpy +crU +vxX +bwC +bwC +nbu +cIx +enn +tBt +nbu +bwC +bwC +bwC +dpU +iPu +eoQ +utc +leW +mst +duo +jMa +dpU +fQp +pve +lKE +gsM +tFW +mZc +cFc +ifc +dUi +dUi +dUi +dUi +dUi +dUi +rbe +ulc +uFb +uFb +osX +oPB +ykG +azK +qeN +dsY +fKT +kcz +ykG +ykG +ykG +ykG +ykG +ykG +ykG +vxX +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(153,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +pfe +neT +utU +neT +pfe +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +vxX +vxX +ieo +aku +uOo +ilp +lAc +lAc +lAc +lAc +lAc +lAc +dcO +dfM +kMA +qKH +aNv +lDK +hPw +kVP +fBS +awb +oAV +nMI +iMc +crU +ndS +niB +niB +aoA +crU +vxX +bwC +bwC +nbu +wpM +wVI +bvl +nbu +bwC +bwC +bwC +dpU +ppR +mZA +nyz +sgg +gKu +pUt +dHL +dpU +bnK +lED +tLa +ocB +ocB +hrA +enL +aOb +dUi +heP +apK +apK +apK +bTt +svK +ulc +kCr +uFb +gLq +lrk +ykG +mUC +mKc +pGo +ykG +ykG +ykG +bwC +bwC +fmr +bwC +cLf +cLf +vxX +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(154,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +bwC +utU +bwC +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +vxX +vxX +vxX +ilp +aku +uOo +ilp +ilp +ieo +lKk +iSU +ilp +ixU +mLH +dfM +iHY +sln +dCI +aoz +oSJ +thf +sRj +kSA +kdw +nMI +niB +rMx +aoA +niB +ers +dsL +crU +vxX +bwC +bwC +bwC +gdP +bwC +mXr +bwC +bwC +bwC +bwC +dpU +kRq +kLU +cPQ +opG +kxG +tJS +xuF +dpU +jco +oss +vEZ +fEu +vEZ +ine +hmz +bLS +dUi +bcA +aWD +aWD +aWD +aWD +ugJ +mIY +eLk +aWD +aWD +aWD +ykG +oUw +ece +kcz +ykG +mXK +bwC +bwC +bwC +fmr +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(155,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +bwC +utU +bwC +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +fYe +vxX +vxX +ilp +aku +uOo +aku +foX +aku +ouA +jJe +ilp +ixU +ixU +gOY +gOY +gOY +vcn +gOY +gOY +gOY +gOY +gOY +gOY +nMI +pBB +crU +crU +aRf +aRf +crU +crU +vxX +fTX +hfp +hfp +wKT +hfp +yhj +hfp +hfp +hfp +fTX +dpU +xxn +cbJ +eLV +sbf +cbJ +giD +uMq +uMq +uMq +scd +uMq +uMq +aWD +xDn +aWD +aWD +aWD +wuS +aWD +chV +rDD +aWD +aWD +tUV +aWD +aWD +chV +rDD +ykG +ykG +tOA +ykG +ykG +cpG +cpG +cpG +cpG +cpG +vxX +vxX +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(156,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +wNk +qVF +izr +qVF +wNk +bwC +bwC +bwC +bwC +bwC +bwC +bwC +bwC +fYe +vxX +vxX +ilp +aku +uOo +aku +foX +aku +aku +ilp +ilp +jTB +rpC +gOY +iAx +boy +gql +abh +xaw +uPL +sSN +nal +gOY +vxX +kkx +vxX +bwC +bwC +bwC +bwC +bwC +cNc +pNi +kUb +aZR +hfd +gjA +riS +aZR +aZR +aZR +rZK +fFj +mGk +pvX +arB +pvX +pvX +rJD +rhB +woe +pjY +xuZ +jFf +uMq +lBB +qcQ +gpJ +aWD +xoR +huP +dBX +ahl +hQm +aWD +rZb +rJb +abF +aWD +ahl +hQm +stp +nzR +pyB +hbG +cpG +fGo +nHD +rWI +hVe +cpG +cpG +vxX +vxX +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(157,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +bwC +bwC +bwC +wZz +wZz +qpj +wZz +wZz +cLf +cLf +cLf +bwC +cLf +cLf +cLf +cLf +fYe +vxX +vxX +ilp +aku +uOo +pwZ +rji +foX +ilp +ilp +jTB +jTB +jTB +gOY +pQG +atb +qVB +iOH +fQr +gOY +tDS +cpJ +gOY +kkx +kkx +vxX +nbu +nbu +nbu +nbu +nbu +gYP +rTo +hdd +qxp +lGt +uPv +oRf +sYU +hLj +syl +mgF +nDN +nDN +pPv +jak +tnp +mSN +oQp +rhB +rXU +gLQ +xuZ +vpf +uMq +epE +hnu +neM +kmB +roc +btl +lyy +rhS +sqw +aWD +iTa +wWy +jzJ +aWD +cNM +rhS +jeY +dCM +btl +rJs +cpG +uwI +lpe +lpe +xDk +mcd +cpG +vxX +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(158,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +shs +cLf +cLf +cLf +cLf +cLf +cLf +bwC +cLf +cLf +cLf +bwC +cLf +cLf +cLf +cLf +fYe +vxX +vxX +ilp +vfR +aku +uOo +aku +aku +ilp +jTB +jTB +mHc +wnH +gOY +nQl +jSR +nTZ +urY +czh +uPL +pVG +oLj +gOY +ftW +kkx +vxX +nbu +aXt +rBj +nWG +gkx +jTI +gjD +qUT +uQG +moL +bXK +wyZ +rox +dNr +mjZ +ayf +rpS +rpS +wGZ +dow +sgw +bzC +oAO +rhB +gUe +ueK +xuZ +vpf +uMq +tMD +lSm +cCj +aWD +jJp +btl +oAc +moU +ggP +eaX +kVV +mjf +sNU +aer +xfi +wBH +ggQ +mLN +btl +kIS +ryC +mnU +lpe +lpe +jKp +wMt +ryC +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(159,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +shs +cLf +cLf +cLf +cLf +cLf +cLf +bwC +cLf +fYe +fYe +uif +cLf +cLf +cLf +cLf +cLf +uif +vxX +ilp +ilp +ilp +uOo +aku +ilp +ilp +jTB +jGd +eBH +cQX +enX +rSB +bwj +mSG +rSh +qOt +gOY +wOn +gOY +gOY +kkx +kkx +vxX +nbu +aXt +jyO +qsa +wVI +bwC +rLK +vYL +jSu +xxJ +huj +jvA +utT +gcs +bND +its +wfN +gVx +cLs +bND +cYa +bND +fvW +uMq +wUK +wmj +gCY +kNb +uMq +aWD +oAn +aWD +aWD +cNM +mCb +xCf +urc +xCf +lFX +xCf +bzQ +xCf +xCf +xCf +xCf +xCf +suq +bzQ +ciE +skW +vdZ +rgI +kyh +qOY +vAj +ryC +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(160,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +shs +cLf +cLf +cLf +cLf +cLf +cLf +bwC +cLf +vxX +vxX +fYe +fYe +fYe +fYe +fYe +fYe +fYe +vxX +ilp +ilp +ilp +uOo +aku +ilp +ilp +jTB +dkr +hbH +naU +gsw +fSD +lCw +vlz +fDz +fDz +bPc +efJ +dPh +gOY +kkx +kkx +vxX +nbu +aXt +aXt +aZn +kDx +oCb +gjN +nkA +com +cnS +mSN +tnp +fCG +krJ +oWr +mKM +cKo +cKo +gza +hFF +lfn +oYM +nqR +knK +vji +wFC +wNN +nZI +mdw +aWD +cXn +vNk +oHA +xfi +jtS +rhS +rhS +equ +mjf +pfV +sgG +dAe +rhS +rhS +rhS +rhS +gaN +nHr +sqw +ryC +kqC +qDR +lpe +lpe +pFl +ryC +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(161,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +shs +bwC +wfz +bwC +bwC +bwC +bwC +vxX +vxX +vxX +vxX +vxX +fYe +fYe +fYe +fYe +fYe +fYe +ilp +ilp +ieo +iSU +uOo +uro +rji +ilp +jTB +sqJ +wiT +rBt +aPG +qeY +aMG +vlz +xTs +fDz +fDz +rkI +rYe +gOY +gOY +kkx +vxX +nbu +nbu +nbu +nbu +nbu +bwC +utf +qKj +jSu +cnS +rwF +fCG +wgK +uTU +fTX +wUg +wrQ +tbv +fTX +htx +hUr +wBU +aKA +uMq +fIG +dmW +rxU +rat +wex +aWD +eFM +xCf +xCf +xCf +cYB +rhS +rhS +rhS +dDc +uwW +iio +rhS +rhS +rhS +wBH +rhS +rhS +rhS +nMV +cpG +rDI +azQ +iNh +iNh +kHp +cpG +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(162,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +shs +shs +shs +shs +cLf +bwC +cLf +cLf +cLf +cLf +vxX +vxX +vxX +fYe +fYe +fYe +cLf +cLf +cLf +cLf +fYe +rji +ilp +vfR +aku +uOo +aku +ilp +ilp +jTB +dEn +lIn +tra +qGr +kKC +mqb +vlz +fDz +mfC +fDz +fDz +fDz +gqV +gOY +kkx +vxX +nbu +pIV +dLf +vEu +gkx +jTI +mJB +vSH +oEZ +rFZ +bND +mjR +bND +vcZ +fTX +fTX +fTX +fTX +fTX +aDJ +hUr +wBU +mzJ +uMq +vlX +vUr +vUr +vUr +eus +aWD +qWG +vas +fMW +cfJ +ybD +ybD +ybD +ybD +ybD +oWE +iJt +oWE +ybD +ybD +ybD +ybD +ePT +ybD +ape +cpG +fPe +qPC +qPC +qPC +pgm +cpG +kxB +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(163,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +shs +shs +shs +cLf +cLf +cLf +cLf +bwC +cLf +cLf +cLf +cLf +cLf +vxX +cLf +cLf +bwC +cLf +cLf +cLf +cLf +fYe +fYe +lJq +aku +aku +aku +uOo +aku +ilp +ilp +jTB +gbV +jqY +rus +fuF +gzF +kEM +fDz +fDz +fDz +oWy +fDz +dyd +vrG +gOY +kkx +vxX +nbu +pIV +mBg +rqJ +wVI +bwC +rLK +nLD +jSu +cnS +gvR +bND +bND +dAo +fTX +deX +rAW +pSH +fTX +ciF +hUr +wBU +dYx +uMq +vqB +sJh +rJy +vUb +uMq +aWD +mkL +qHp +uFC +uFC +jnY +jnY +jnY +jnY +jnY +uFC +vPq +uFC +jnY +jnY +jnY +jnY +jnY +jnY +uFC +cpG +cpG +aTv +aTv +aTv +cpG +cpG +vxX +vxX +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(164,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +shs +shs +cLf +bwC +cLf +cLf +cLf +cLf +bwC +cLf +cLf +cLf +cLf +cLf +bwC +cLf +cLf +bwC +cLf +cLf +cLf +cLf +fYe +fYe +lJq +aku +aku +pkw +uOo +aku +ilp +ilp +jTB +cuA +cuA +nNl +uwV +vNl +nCo +tGW +tGW +nli +pLk +vvE +aWM +vzP +gOY +kkx +vxX +nbu +pIV +pIV +ojc +kDx +oCb +gjN +nkA +nqK +cnS +bND +bND +lNr +bND +ecF +dWB +vck +nhS +vck +flQ +hRp +wBU +diM +uMq +vqB +sJh +rJy +vUb +nZH +uFC +jnY +oUb +uFC +lNk +sJG +jBX +jBX +bup +bup +fOi +cHe +gyq +gyq +gyq +gyq +gyq +gyq +iNa +nva +cpG +fJn +aYf +aYf +aYf +krW +cpG +vxX +vxX +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +tyd +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(165,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +shs +bwC +bwC +bwC +bwC +bwC +pbP +pih +pbP +pih +pbP +cLf +cLf +cLf +bwC +cLf +cLf +bwC +cLf +cLf +cLf +cLf +fYe +vxX +rji +nLT +aku +aku +uOo +aku +ieo +ilp +jTB +jTB +kQB +ioL +gOY +aks +tTK +tvB +cSI +xbg +egj +uPj +pqX +rTQ +gOY +kkx +vxX +nbu +nbu +nbu +nbu +nbu +bwC +utf +hon +jSu +cnS +bND +bND +bND +gvR +bND +eYM +fIZ +oYX +umT +mjP +jZN +uFL +azs +uMq +vqB +sJh +rJy +vUb +uMq +uFC +boT +djU +wFG +lLU +utV +cPG +bUA +bUh +bUh +bUh +bUh +bUh +bUh +bUh +bUh +bUh +dPH +nPW +gRG +aTv +aYf +aYf +aYf +eRD +eRD +cpG +vxX +vxX +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(166,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +shs +cLf +cLf +cLf +cLf +pbP +pih +eYo +pih +eYo +pih +cLf +cLf +tyd +bwC +cLf +cLf +bwC +cLf +cLf +cLf +cLf +fYe +vxX +ilp +pkw +aku +aku +uOo +aku +vfR +ilp +ilp +jTB +jTB +jTB +gOY +gOY +tTK +rFA +mHx +uaw +apA +deV +phq +rTQ +kkx +kkx +vxX +nbu +msY +nGp +vgM +gkx +jTI +mJB +rSq +oEZ +fjn +jKw +bND +trz +bND +bND +qQW +mzb +kBN +mVf +kUX +lXI +mRu +eeo +kUX +mRu +mRu +mRu +mRu +kUX +uFC +jsL +kpn +nPW +nPW +auj +cPG +oDn +wCm +wCm +avx +lZc +tAQ +hfU +eMk +hfU +ipT +nYK +tVT +dTb +aTv +aYf +aYf +aYf +eRD +lPp +cpG +vxX +vxX +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(167,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +shs +cLf +cLf +cLf +pih +eYo +pih +rst +pih +rst +pih +cLf +cLf +cLf +bwC +cLf +cLf +bwC +cLf +cLf +pkl +pkl +pkl +pkl +pkl +vfJ +vfR +aku +uOo +aku +aku +fbN +gsW +gsW +mnS +mnS +gOY +iJZ +lcd +uwN +mEO +xbg +egj +fDI +pqX +xbg +kkx +kkx +vxX +nbu +msY +qNM +fzM +wVI +bwC +rLK +fMS +jSu +mqE +hlF +bXK +hlF +hlF +hlF +lgw +riE +fCG +sEC +kUX +eTg +jfo +jfo +gYM +jfo +jfo +jfo +jfo +xxi +uFC +eBZ +kpn +pxu +pxu +pxu +oyV +axQ +yho +yho +dYp +gqN +ycf +lfN +xIV +khO +ueA +xwD +cvL +gRG +aTv +aYf +aYf +prc +prc +prc +cpG +vxX +vxX +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(168,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +shs +cLf +pbP +rst +pih +rst +pih +rst +pih +rst +pih +cLf +cLf +cLf +bwC +cLf +cLf +bwC +rXt +rXt +rXt +smQ +fSk +qRf +pkl +vWN +aku +aku +uOo +aku +aku +pkw +mgi +rkd +aMS +hVm +mFa +elG +uXb +cmn +jgl +nUJ +lNx +ujW +dOt +hQR +bwC +kkx +vxX +nbu +msY +msY +qTC +kDx +oCb +gjN +nkA +bIE +mxx +hPs +oUg +olW +olW +wlo +cnS +xQB +sYy +gms +kUX +oAJ +enz +kGZ +kGZ +kGZ +kGZ +kGZ +tbk +rkp +uFC +boT +kAh +wCm +qWs +utV +gea +xaP +dhn +jjO +xIV +hoQ +vUh +ngn +xIV +khO +njX +xwD +cvL +mCm +cpG +hRX +iFn +prc +prc +prc +cpG +vxX +vxX +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(169,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +shs +cLf +sCD +bgp +hsz +qSb +cLS +qSb +qSb +cLS +qSb +qSb +qSb +qSb +qSb +hsz +hsz +hsz +aep +lqI +eoL +xLg +rRs +afC +tJT +uOo +uOo +uOo +uOo +aku +aku +aku +ajs +gop +cqf +xJt +gOY +joD +ffK +cut +rcR +nUJ +xgy +gmC +ift +hQR +bwC +kkx +vxX +nbu +nbu +nbu +nbu +nbu +dXU +utf +ksd +jvA +baY +xvg +sjW +ocF +wQH +xvg +sjW +ocF +lLH +mWB +kUX +ohF +kGZ +ini +kzk +pdR +kzk +qRF +kGZ +cPx +uFC +uFC +uFC +uFC +lwv +nPW +oyV +xaP +xIV +xIV +gqN +oEf +ewL +kfZ +lfN +xIV +xIV +xwD +cvL +qqB +cpG +cpG +cpG +cpG +cpG +cpG +cpG +vxX +vxX +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(170,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +shs +cLf +pbP +rst +rcp +rst +pih +rst +pih +rst +pih +cLf +cLf +cLf +bwC +cLf +cLf +bwC +rXt +rXt +rXt +wCP +cfG +kGf +pkl +rmX +aku +aku +aku +aku +aku +aku +vjB +jEw +cmn +cqt +gOY +kke +wmM +auA +icz +nUJ +pGt +pGt +pGt +hQR +bwC +cLf +vxX +vxX +vxX +vxX +vxX +vxX +bwC +wRN +fdC +uVP +wFy +dgm +gAZ +uxS +fDO +cMI +oQr +aVZ +fDO +jKF +kUX +fUN +kGZ +xNp +vYg +pBJ +uuM +cEh +kGZ +woo +kUX +vxX +vxX +uFC +cUD +nPW +oyV +xaP +neE +uXw +bhv +qaZ +vUh +hoM +rGq +vUh +neE +xwD +cvL +psF +uFC +vxX +vxX +vxX +vxX +kxB +kxB +vxX +vxX +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(171,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +shs +cLf +cLf +cLf +rcp +rst +pih +rst +pih +rst +pih +cLf +cLf +cLf +bwC +cLf +cLf +bwC +cLf +cLf +pkl +pkl +pkl +pkl +pkl +ilp +ilp +ieo +aku +aku +aku +uro +gsW +hDJ +grm +gsW +gOY +gOY +gOY +roK +gOY +xbg +xbg +xbg +xbg +xbg +bwC +cLf +bwC +vxX +vxX +vxX +vxX +vxX +bwC +fTX +rLK +hfp +dSB +mWF +sMs +hfp +wKT +mWF +sMs +hfp +wKT +oKB +kUX +agq +kGZ +wBk +rkS +nNA +cFq +edL +kGZ +wlG +kUX +vxX +vxX +uFC +pbD +nPW +oyV +kiT +twf +aez +sOG +qaZ +wnX +hoM +iTU +aez +twf +xwD +cvL +jWI +anu +lNJ +gjZ +gjZ +sqZ +uuN +kxB +vxX +vxX +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(172,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +shs +cLf +cLf +cLf +cLf +pbP +pih +eYo +pih +eYo +pih +cLf +cLf +cLf +bwC +cLf +cLf +bwC +cLf +cLf +cLf +cLf +ilp +ilp +ilp +ilp +ilp +ilp +vfR +pkw +aku +aku +aku +aku +xAd +wfU +rbS +kAI +ojR +lBm +uvx +mna +gXw +gHL +jGy +moe +bwC +cLf +bwC +vxX +vxX +vxX +vxX +vxX +vxX +bwC +eTZ +bwC +xLu +rZB +pLe +bwC +lfG +rZB +pLe +bwC +lfG +aUx +kUX +wWk +kGZ +xNp +uuM +jlg +vYg +cEh +kGZ +pul +kUX +vxX +vxX +uFC +biG +nPW +oyV +xaP +neE +vUh +bhv +qaZ +vUh +hoM +rGq +vUh +neE +xwD +cvL +gRG +jnY +tgr +dqK +mlk +dqK +sqZ +kxB +vxX +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(173,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +shs +bwC +bwC +bwC +bwC +bwC +pbP +pih +pbP +pih +pbP +cLf +cLf +cLf +bwC +fYe +fYe +wfz +bwC +vxX +bwC +bwC +ilp +ilp +ilp +ilp +ilp +ilp +ilp +ilp +aku +aku +aku +vfR +vfJ +dGX +upd +moe +jxe +aaR +uvx +oix +uEV +rRO +yai +moe +bwC +bwC +bwC +bwC +bwC +bwC +bwC +vxX +vxX +nbu +jWP +wVI +xBs +nbu +aPI +wVI +wpM +nbu +aPI +wVI +wpM +nbu +kUX +qEC +kGZ +pDx +cHt +qpr +cHt +nPf +kGZ +qih +kUX +vxX +vxX +uFC +lCu +pxu +oyV +xaP +xIV +xIV +xIV +xIV +fXt +xIV +xIV +xIV +xIV +rLz +uei +nNN +jnY +fnI +mlk +mlk +mlk +wtF +kxB +vxX +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(174,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +shs +cLf +cLf +bwC +cLf +cLf +cLf +cLf +bwC +cLf +cLf +cLf +cLf +cLf +vxX +vxX +vxX +vxX +fYe +fYe +cLf +cLf +cLf +ilp +ilp +ilp +ilp +cLf +ilp +obA +lJq +tsz +lJq +obA +vfJ +kBr +vfJ +moe +tLh +dlE +soW +wqB +rxn +rRO +mIa +moe +bwC +cLf +iUF +cLf +cLf +cLf +bwC +vxX +vxX +nbu +jxx +bHa +fGZ +nbu +iFK +fDU +oXE +nbu +pxo +unA +fdJ +nbu +kUX +qEC +jjQ +kGZ +kGZ +kGZ +kGZ +kGZ +vuh +wmr +bBr +bwC +bwC +jnY +alX +kQF +bHH +sBe +ceu +gTe +wFG +sji +cjV +sGE +wFG +wFG +nxc +pWG +icr +jHz +jnY +xzT +dqK +mlk +dqK +wtF +kxB +vxX +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(175,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +shs +shs +cLf +bwC +cLf +cLf +cLf +cLf +bwC +cLf +cLf +cLf +cLf +cLf +uif +vxX +vxX +vxX +uif +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +obA +ouk +uYH +aQm +obA +upd +bnb +upd +moe +rHG +bpW +kBw +oix +rxn +rRO +iNC +moe +bwC +cLf +iUF +cLf +cLf +cLf +bwC +vxX +vxX +nbu +szc +azx +gZc +nbu +beW +gyP +aPt +nbu +fhu +pjk +jdo +nbu +kUX +jAD +nLd +nLd +nLd +nLd +nLd +nLd +owL +fpg +bBr +bwC +bwC +jnY +alX +nPW +oVs +oVs +oVs +dtY +oVs +mYD +fXc +gas +oVs +pUa +acG +kFO +acG +fEm +anu +auD +dqK +mlk +dqK +wtF +kxB +vxX +vxX +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(176,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +shs +shs +shs +shs +shs +shs +bwC +wfz +bwC +shs +shs +shs +bwC +vxX +vxX +vxX +vxX +fYe +cLf +cLf +cLf +cLf +cLf +cLf +cLf +vxX +vxX +vxX +obA +lJq +jBM +lJq +obA +qnV +iPW +hkG +moe +mJU +bpW +oix +oix +hmG +gME +xGg +moe +bwC +cLf +iUF +cLf +cLf +cLf +bwC +vxX +vxX +nbu +szc +szc +szc +nbu +beW +beW +beW +nbu +fhu +fhu +fhu +nbu +kUX +kUX +bBr +bBr +bBr +bBr +bBr +bBr +kUX +kUX +kUX +bwC +vxX +uFC +spr +xcm +jQs +luq +ddO +xcm +xcm +rVT +hLq +kWI +xcm +sWN +wfi +cXy +vfL +mWh +jnY +tgr +mlk +mlk +mlk +wtF +vxX +vxX +vxX +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(177,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +vxX +vxX +vxX +obA +cLf +cPl +cLf +obA +vfJ +vfJ +vfJ +moe +pwE +dlE +xjq +feR +moe +fDj +fDj +moe +bwC +cLf +iUF +cLf +cLf +cLf +bwC +vxX +vxX +nbu +nbu +nbu +nbu +nbu +nbu +nbu +nbu +nbu +nbu +nbu +nbu +nbu +vxX +mUQ +cLf +bwC +cLf +cLf +cLf +bwC +cLf +vxX +vxX +vxX +vxX +uFC +uFC +jnY +oaG +uFC +oTv +fhH +oTv +uFC +oTv +uFC +oTv +spw +oTv +uFC +uFC +pqJ +uFC +fnI +dqK +mlk +dqK +wtF +vxX +vxX +vxX +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(178,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +vxX +vxX +obA +cLf +cLf +cLf +obA +cLf +cLf +cLf +moe +fDj +fDj +moe +iyE +moe +bwC +bwC +bwC +nmN +cLf +iUF +cLf +cLf +cLf +bwC +cLf +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +fYe +fYe +fYe +fYe +uVI +cLf +bwC +cLf +cLf +cLf +bwC +cLf +cLf +vxX +vxX +vxX +vxX +bwC +cLf +mDV +uFC +kEu +iXR +kNH +vpD +hVB +dvX +ktc +ncv +kEu +uFC +vkO +eIk +xws +ovB +dqK +dqK +dqK +wtF +vxX +vxX +vxX +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(179,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +tyd +cLf +cLf +cLf +vxX +vxX +etW +cLf +cLf +cLf +etW +cLf +cLf +cLf +bwC +bwC +bwC +moe +aub +moe +bwC +cLf +cLf +cLf +cLf +iUF +cLf +cLf +cLf +bwC +cLf +cLf +vxX +cLf +bwC +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +fYe +vxX +mUQ +vxX +bwC +cLf +cLf +cLf +bwC +cLf +cLf +cLf +vxX +vxX +vxX +bwC +cLf +mDV +uFC +kEu +iXR +hVB +hVB +hVB +kEu +kEu +ncv +kEu +uFC +drj +mAF +drj +fnI +dqK +mlk +dqK +wtF +vxX +vxX +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(180,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +bwC +cLf +cLf +cLf +bwC +iUF +iUF +cLf +cLf +cLf +bwC +ojz +eEX +ojz +bwC +bwC +iUF +iUF +iUF +iUF +cLf +cLf +cLf +bwC +cLf +cLf +cLf +cLf +bwC +cLf +cLf +cLf +vxX +vxX +cLf +cLf +cLf +vxX +vxX +vxX +vxX +vxX +bwC +cLf +cLf +cLf +bwC +cLf +cLf +vxX +vxX +vxX +vxX +bwC +bwC +mDV +uFC +ivC +iXR +jjG +iXR +opT +iXR +adc +ncv +ncm +uFC +vxX +kkx +kkx +xzT +tgj +tgj +tgj +rwE +vxX +vxX +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(181,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +mPv +cLf +cLf +cLf +mPv +cLf +iUF +iUF +iUF +bwC +nmN +dXU +dXU +dXU +nmN +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +bwC +cLf +cLf +cLf +cLf +bwC +cLf +cLf +cLf +cLf +bwC +cLf +cLf +cLf +cLf +cLf +cLf +vxX +vxX +bwC +iUF +iUF +iUF +bwC +vxX +vxX +vxX +vxX +vxX +cLf +cLf +cLf +vKV +uFC +kEu +kEu +fsQ +aGC +vpn +qvX +uvN +wQz +kiW +uFC +vxX +vxX +vxX +kkx +kkx +kkx +kkx +vxX +vxX +vxX +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(182,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +tyd +cLf +cLf +cLf +cLf +cLf +cLf +cLf +bwC +cLf +bwC +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +bwC +cLf +cLf +cLf +cLf +bwC +cLf +cLf +cLf +cLf +bwC +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +vxX +vxX +cLf +mUQ +fYe +cLf +cLf +bwC +uFC +kEu +kEu +kEu +aQo +aQo +sIm +sIm +sIm +kEu +uFC +kuk +vxX +vxX +vxX +fYe +fYe +vxX +vxX +vxX +vxX +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(183,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +nmN +bwC +bwC +cLf +bwC +bwC +nmN +cLf +cLf +cLf +cLf +cLf +cLf +cLf +bwC +bwC +bwC +bwC +bwC +bwC +bwC +bwC +bwC +bwC +bwC +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +uVI +fYe +fYe +fYe +vxX +uFC +uFC +kEu +kEu +kEu +vQb +kEu +kEu +kEu +uFC +uFC +vxX +vxX +vxX +mUQ +uVI +uVI +mUQ +vxX +vxX +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(184,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +bwC +cLf +cLf +cLf +cLf +cLf +bwC +cLf +cLf +cLf +cLf +cLf +cLf +cLf +bwC +cLf +cLf +cLf +cLf +bwC +cLf +cLf +cLf +cLf +bwC +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +uVI +uVI +uVI +mUQ +vxX +vxX +uFC +uFC +uFC +uFC +uFC +uFC +uFC +uFC +uFC +vxX +vxX +vxX +vxX +fYe +fYe +fYe +fYe +fYe +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(185,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +bwC +cLf +cLf +cLf +cLf +cLf +bwC +cLf +cLf +cLf +cLf +cLf +cLf +cLf +bwC +cLf +cLf +cLf +cLf +bwC +cLf +cLf +cLf +cLf +bwC +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +cLf +cLf +fYe +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(186,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +nmN +bwC +bwC +cLf +bwC +bwC +nmN +cLf +cLf +cLf +cLf +cLf +cLf +cLf +bwC +bwC +cLf +cLf +cLf +bwC +cLf +cLf +cLf +bwC +bwC +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(187,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +bwC +cLf +bwC +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +bwC +cLf +cLf +cLf +bwC +cLf +cLf +cLf +bwC +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(188,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +nmN +bwC +bwC +cLf +bwC +bwC +nmN +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +bwC +cLf +cLf +cLf +bwC +cLf +cLf +cLf +bwC +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(189,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +bwC +cLf +cLf +cLf +cLf +cLf +bwC +cLf +cLf +cLf +cLf +cLf +cLf +cLf +shs +bwC +bwC +jQS +jQS +jQS +jQS +jQS +bwC +bwC +shs +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(190,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +bwC +cLf +cLf +cLf +cLf +cLf +bwC +cLf +cLf +cLf +cLf +cLf +cLf +cLf +shs +bwC +cLf +jQS +lgO +czY +kOL +jQS +cLf +bwC +shs +bwC +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(191,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +nmN +bwC +bwC +cLf +bwC +bwC +nmN +cLf +cLf +shs +shs +shs +shs +bwC +bwC +bwC +bwC +jQS +pRN +kOL +sgc +jQS +bwC +bwC +cLf +bwC +shs +shs +shs +shs +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(192,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +bwC +cLf +bwC +cLf +cLf +cLf +cLf +shs +cLf +cLf +cLf +cLf +jQS +jQS +jQS +jQS +jaV +kOL +jaV +jQS +jQS +jQS +jQS +cLf +cLf +cLf +cLf +shs +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(193,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +nmN +bwC +bwC +cLf +bwC +bwC +nmN +cLf +cLf +bwC +cLf +cLf +cLf +jQS +jQS +kOL +asl +jGs +fin +sad +nRw +jQS +xVt +kOL +jQS +jQS +uep +qDP +qDP +bwC +bwC +cLf +cLf +cLf +tyd +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +tyd +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(194,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +bwC +cLf +cLf +cLf +cLf +cLf +bwC +bwC +bwC +bwC +bwC +jQS +tLO +jQS +jsr +aJA +kLQ +beE +asn +hBF +sAf +jSV +bEY +aJA +hfX +jQS +ifV +jQS +qDP +cLf +bwC +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(195,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +bwC +cLf +cLf +cLf +cLf +cLf +bwC +bwC +bwC +bwC +bwC +jQS +xnB +jQS +eEV +kOL +asl +ogU +qqQ +hBF +kps +pCG +xVt +kOL +wTs +jQS +kGo +jQS +qDP +cLf +shs +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(196,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +nmN +bwC +bwC +cLf +bwC +bwC +nmN +cLf +cLf +cLf +cLf +jQS +hAL +jQS +kOL +lXy +asl +vyj +dcw +kWN +kSy +bPS +xVt +lXy +kOL +jQS +ucG +jQS +qDP +pQm +shs +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(197,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +bwC +cLf +bwC +cLf +cLf +cLf +cLf +shs +cLf +jQS +dBj +jQS +tsX +xfJ +tMz +jQS +cxH +aEj +hii +jQS +qoj +axB +dzX +jQS +ioP +jQS +cLf +cLf +shs +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(198,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +nmN +bwC +bwC +cLf +bwC +bwC +nmN +cLf +cLf +shs +bwC +jQS +hAL +jQS +cCI +hbV +hbV +qRJ +rka +nVj +rka +xUT +tRP +tRP +tVV +jQS +ucG +jQS +bwC +bwC +shs +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(199,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +bwC +cLf +cLf +cLf +cLf +cLf +bwC +cLf +cLf +shs +cLf +jQS +hAL +qrQ +bKQ +hBF +rYZ +xay +xay +hBF +hBF +hBF +ulA +kQa +baP +hli +ucG +jQS +cLf +cLf +shs +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(200,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +bwC +cLf +cLf +cLf +cLf +cLf +bwC +cLf +cLf +cLf +cLf +jQS +lcX +jQS +hKN +hbV +hBF +cnt +hbV +hbV +hbV +hbV +kQa +tRP +uhz +jQS +oPs +jQS +cLf +cLf +shs +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +tyd +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(201,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +nmN +bwC +bwC +cLf +bwC +bwC +nmN +cLf +cLf +cLf +fZF +jQS +jQS +jQS +jQS +jQS +ufD +jQS +tMz +evA +tMz +jQS +sOj +jQS +jQS +jQS +jQS +jQS +fZF +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(202,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +bwC +cLf +bwC +cLf +cLf +cLf +cLf +cLf +fZF +jQS +kOL +kOL +kOL +fHW +mQM +tMz +fIl +ekp +hTQ +tMz +rRz +pum +kOL +kOL +kOL +jQS +fZF +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(203,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +nmN +bwC +bwC +cLf +bwC +bwC +nmN +cLf +cLf +fZF +jQS +jQS +eEV +mvh +kOL +fFm +mQM +tMz +fIl +ekp +hTQ +tMz +rRz +joW +kOL +mvh +wTs +jQS +jQS +fZF +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(204,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +bwC +cLf +cLf +cLf +cLf +cLf +bwC +cLf +cLf +fZF +jQS +jQS +kOL +kOL +kOL +fHW +mQM +tMz +fIl +ivh +hTQ +tMz +rRz +pum +kOL +kOL +kOL +jQS +jQS +fZF +cLf +shs +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(205,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +bwC +cLf +cLf +cLf +cLf +cLf +bwC +cLf +cLf +fZF +jQS +jQS +jQS +jQS +jQS +jQS +mbA +jQS +tMz +inz +fUp +jQS +poF +jQS +jQS +jQS +jQS +jQS +jQS +fZF +bwC +shs +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(206,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +nmN +bwC +bwC +cLf +bwC +bwC +nmN +cLf +cLf +fZF +jQS +jQS +kOL +kOL +kOL +xTa +fyS +gUl +udH +onm +jJS +rMP +fJi +oLL +kOL +kOL +kOL +jQS +jQS +fZF +cLf +shs +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(207,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +bwC +cLf +bwC +cLf +cLf +cLf +cLf +fZF +jQS +jQS +eEV +mvh +kOL +gzj +xdz +pZG +sQP +bnn +dTA +pZG +bvX +eNU +kOL +mvh +wTs +jQS +jQS +fZF +bwC +shs +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(208,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +nmN +bwC +bwC +cLf +bwC +bwC +nmN +cLf +cLf +fZF +jQS +jQS +kOL +kOL +kOL +xTa +aWi +rgy +gVi +hyk +set +iLh +aWi +oLL +kOL +kOL +kOL +jQS +jQS +fZF +cLf +shs +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(209,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +bwC +cLf +cLf +cLf +cLf +cLf +bwC +bwC +bwC +fZF +jQS +jQS +jQS +jQS +jQS +jQS +rwt +nrL +jAU +hUU +vDw +nrL +uIF +jQS +jQS +jQS +jQS +jQS +jQS +fZF +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(210,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +bwC +cLf +cLf +cLf +cLf +cLf +bwC +bwC +bwC +fZF +jQS +jQS +jQS +jQS +jQS +jQS +jQS +dQJ +pXV +hNP +pXV +vns +jQS +jQS +jQS +jQS +jQS +jQS +jQS +fZF +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(211,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +nmN +bwC +bwC +cLf +bwC +bwC +nmN +cLf +cLf +cLf +fZF +fZF +fZF +fZF +jQS +jQS +rxr +rxr +nMK +epy +rxr +rxr +rxr +jQS +jQS +fZF +fZF +fZF +fZF +bwC +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(212,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +bwC +cLf +bwC +cLf +cLf +cLf +cLf +cLf +cLf +bwC +cLf +fZF +jQS +jQS +dLd +rxr +rxr +nAt +rxr +rxr +rxr +jQS +jQS +fZF +tyd +cLf +bwC +bwC +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(213,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +nmN +bwC +bwC +cLf +bwC +bwC +nmN +cLf +cLf +cLf +shs +shs +bwC +fZF +jQS +jQS +rxr +rxr +pRb +jky +pRb +ehN +xcX +jQS +jQS +fZF +cLf +shs +shs +shs +shs +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(214,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +bwC +cLf +cLf +cLf +cLf +cLf +bwC +cLf +cLf +cLf +cLf +shs +cLf +fZF +jQS +jQS +rxr +rxr +rxr +rxr +rxr +rxr +ygW +jQS +jQS +fZF +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(215,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +bwC +cLf +cLf +cLf +cLf +cLf +bwC +cLf +cLf +cLf +cLf +cLf +cLf +fZF +jQS +jQS +jQS +rxr +fOu +uIu +fQE +rxr +jQS +jQS +jQS +fZF +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(216,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +nmN +bwC +bwC +cLf +bwC +bwC +nmN +cLf +cLf +cLf +cLf +cLf +cLf +cLf +fZF +jQS +jQS +jQS +jQS +jQS +jQS +jQS +jQS +jQS +fZF +bwC +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(217,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +bwC +bwC +bwC +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +bwC +fZF +jQS +jQS +jQS +jQS +jQS +jQS +jQS +fZF +cLf +bwC +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(218,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +bwC +bwC +nmN +bwC +bwC +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +bwC +cLf +fZF +fZF +fZF +fZF +fZF +fZF +fZF +cLf +cLf +bwC +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(219,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +bwC +xUA +uuN +oJv +bwC +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +bwC +cLf +cLf +bwC +cLf +cLf +cLf +bwC +cLf +cLf +cLf +bwC +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(220,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +bwC +bwC +nmN +bwC +bwC +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +bwC +cLf +cLf +bwC +cLf +cLf +cLf +bwC +cLf +cLf +cLf +bwC +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(221,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +bwC +bwC +bwC +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +shs +shs +cLf +cLf +bwC +cLf +cLf +cLf +bwC +cLf +cLf +cLf +shs +shs +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(222,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +nmN +bwC +bwC +cLf +bwC +bwC +nmN +cLf +cLf +cLf +cLf +cLf +cLf +cLf +shs +shs +shs +shs +shs +shs +shs +shs +shs +shs +shs +shs +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(223,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +bwC +cLf +cLf +cLf +cLf +cLf +bwC +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(224,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +bwC +cLf +cLf +cLf +cLf +cLf +bwC +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(225,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +nmN +bwC +bwC +cLf +bwC +bwC +nmN +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(226,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +bwC +bwC +bwC +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(227,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +hYe +bJX +hYe +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(228,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +kmZ +rYo +rYo +cAC +rYo +rYo +kmZ +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(229,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +uFK +rYo +fsU +jzV +kde +rYo +uFK +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(230,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +hYe +rYo +lFK +bJX +bJX +tnD +rQg +rYo +hYe +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(231,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +hYe +jzq +wkA +bJX +oLe +szR +bJX +wEs +hYe +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(232,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +hYe +rYo +hNg +sUc +gty +bJX +qJV +rYo +hYe +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +tyd +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(233,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +uFK +rYo +iqa +kMj +eam +rYo +uFK +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(234,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +kmZ +rYo +rYo +fxp +rYo +rYo +kmZ +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(235,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +hYe +hYe +hYe +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(236,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(237,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(238,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(239,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(240,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(241,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(242,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(243,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(244,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(245,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(246,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(247,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(248,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(249,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(250,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(251,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(252,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(253,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(254,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} +(255,1,1) = {" +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +cLf +"} + +(1,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(2,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(3,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(4,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(5,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(6,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(7,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(8,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(9,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(10,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(11,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(12,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +vxX +vxX +hhX +hhX +vxX +vxX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(13,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(14,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +mUQ +kLL +unk +vxX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(15,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +fYe +qHE +vxX +vxX +vxX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(16,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +vxX +vxX +vxX +vxX +vxX +vYz +aUf +vYz +vYz +vYz +vxX +fYe +fYe +fYe +fYe +vxX +vxX +vxX +vxX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(17,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +vxX +vxX +vYz +aUf +vYz +vYz +tus +rhh +qZR +vYz +aUf +aUf +aUf +vxX +vxX +vxX +vxX +fYe +vxX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(18,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +vYz +vYz +jsn +qHs +czT +sHz +rRL +jVu +aDI +ory +aTE +aUf +aUf +vxX +vxX +vxX +fYe +fYe +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(19,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +aUf +oJG +kvo +qyq +wUH +wUH +hqd +rqP +jin +qyq +fUv +pkA +aUf +vxX +vxX +vxX +vxX +fYe +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(20,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +urC +jrm +qyq +qyq +doO +doO +qyq +sRq +tSX +nzC +qyq +wMe +wnw +fYe +fYe +vxX +vxX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(21,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +urC +nYj +qyq +wUH +qbk +doO +xfa +wUH +rqP +slG +doO +wJk +wnw +fYe +fYe +fYe +fYe +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(22,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +urC +nYj +mua +qyq +qyq +wUH +wUH +sRq +wqq +lPC +qyq +wMe +wnw +fYe +fYe +fYe +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(23,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +urC +jrm +qyq +xfa +sRq +qyq +jEd +xfa +qyq +dRZ +qyq +wJk +wnw +fYe +qHE +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(24,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +urC +jrm +qyq +sRq +xfa +qyq +xfa +sRq +qyq +vZb +sRq +wJk +wnw +fYe +fYe +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(25,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +urC +jrm +pJF +bcg +bcg +bcg +bcg +bcg +nSF +vVj +mua +wJk +wnw +fYe +fYe +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(26,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +urC +jrm +qyq +bDN +sRq +wqq +qyq +wUH +sRq +lSI +gSJ +tIO +wnw +fYe +fYe +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(27,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +aUf +ray +ogP +qyq +qyq +xfa +qyq +qyq +qyq +czD +isO +oqV +vYz +fYe +fYe +fYe +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(28,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +aUf +aUf +nEY +egz +egz +nsi +nQy +tuF +wUH +eZo +wCR +vYz +vYz +vxX +fYe +fYe +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(29,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +fNW +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +vYz +nck +nck +nck +aUf +aUf +aUf +eSs +iXA +vYz +vYz +vxX +vxX +vxX +fYe +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(30,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +jVV +hhX +hhX +hhX +jVV +hhX +foL +wku +plV +iVG +eYP +gHN +gHN +vxX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(31,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +aUf +rup +rup +rup +vYz +hhX +foL +wku +dPG +fUx +htV +gxy +dni +jVV +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(32,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +fNW +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +aUf +aUf +cWi +xjw +guN +vYz +vYz +gHN +uTk +hro +eYP +eYP +rup +gHN +jVV +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(33,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +vYz +drz +xqE +qRe +nxY +iON +waZ +fxg +xZV +vqr +foL +hhX +hhX +hhX +jVV +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(34,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +vxX +vYz +fJV +wdI +lHX +rdU +rmU +qOZ +kYs +eZu +dPG +foL +hhX +hhX +hhX +jVV +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hen +hen +hen +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(35,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +vxX +vxX +vYz +vYz +rap +bky +rCY +vYz +aUf +eYP +fkF +xHT +gHN +hhX +hhX +hhX +jVV +hhX +hhX +fNW +hhX +hhX +hhX +hhX +hen +hen +hen +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +fNW +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(36,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +vxX +vxX +vYz +aUf +aUf +vYz +vYz +hhX +foL +wku +dPG +foL +hhX +hhX +hhX +jVV +hhX +vxX +vxX +vxX +hhX +hhX +fZF +hen +hen +hen +fZF +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(37,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +jVV +hhX +hhX +hhX +foL +vIB +dPG +foL +hhX +hhX +fYe +fYe +fYe +vxX +vxX +fYe +fYe +qHE +fZF +hen +hen +hen +fZF +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(38,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +oID +oID +oID +oID +oID +oID +oID +oID +jVV +hhX +hhX +vxX +vxX +vxX +vxX +hhX +hhX +hhX +hhX +hhX +hhX +jVV +hhX +hhX +hhX +eYP +gck +kae +eYP +fYe +fYe +qHE +fYe +fYe +fYe +fYe +fYe +fYe +fYe +fZF +fZF +fZF +fZF +fZF +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(39,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +jVV +hhX +hhX +hhX +hhX +hhX +hhX +jVV +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +hhX +hhX +vxX +vxX +iJm +iJm +eYP +iBK +yca +eYP +dvC +mUQ +fYe +fYe +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +fYe +fYe +fYe +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(40,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +jVV +hhX +hhX +hhX +hhX +hhX +hhX +hhX +vxX +vxX +vxX +qAp +fYe +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +mUQ +kLL +cts +caH +lCA +pux +kVh +iJm +mUQ +mUQ +fYe +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +fYe +fYe +fYe +fYe +fYe +fYe +fYe +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(41,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +jVV +hhX +hhX +hhX +hhX +hhX +hhX +hhX +vxX +vxX +vxX +uif +uif +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +iJm +iJm +foL +cuE +gZt +dPG +foL +iJm +vxX +vxX +vxX +vxX +fnh +fnh +fnh +fnh +fnh +fnh +vxX +vxX +vxX +vxX +fYe +fYe +fYe +fYe +vxX +vxX +vxX +vxX +vxX +vxX +vxX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(42,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +vxX +vxX +vxX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +jVV +jVV +jVV +hhX +hhX +hhX +hhX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +fYe +hSF +vxX +vxX +vxX +vxX +iJm +iJm +foL +vPe +gLE +plV +foL +dcl +qHE +vxX +vxX +vxX +fnh +vTt +dBK +aQD +vTt +fnh +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(43,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +fYe +fYe +fYe +hhX +vxX +vxX +vxX +vxX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +qwQ +hhX +hhX +hhX +hhX +jVV +hhX +hhX +hhX +hhX +vxX +vxX +gNV +gNV +gNV +gNV +gNV +gNV +gNV +uif +vxX +vxX +vxX +vxX +iJm +iJm +foL +ujx +fjF +plV +foL +iJm +fYe +fnh +fnh +fnh +fnh +aQD +mlK +mlK +fSp +fnh +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +jjp +vxX +vxX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(44,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +fYe +fYe +fYe +fYe +fYe +fYe +vxX +vxX +vxX +vxX +vxX +vxX +vxX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +fYe +fYe +iaN +sWY +iaN +hhX +hhX +yes +aZg +aZg +aZg +aZg +aZg +aZg +vxX +gNV +dyB +qNo +lib +qmf +jdg +gNV +vxX +vxX +vxX +vxX +vxX +iJm +iJm +eYP +kVh +qMK +tAk +pxU +iJm +iJm +fnh +rLw +vMm +fnh +dBK +mlK +mlK +dBK +fnh +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(45,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hen +hen +hen +hen +hen +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +lLo +sMT +lLo +hhX +hhX +sIN +umg +umg +umg +umg +umg +umg +vxX +gNV +rwu +eiI +hvV +kkK +ezZ +gNV +vxX +vxX +vxX +vxX +vxX +iJm +iJm +iJm +foL +wku +plV +gHN +fYe +qoN +fnh +diz +jMW +qlh +vTt +aQD +dBK +vTt +fnh +vxX +vxX +fnh +fnh +fnh +fnh +fnh +fnh +fnh +vxX +vxX +vxX +vxX +vxX +vxX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(46,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hen +gEp +hen +hen +hen +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +pEH +pEH +pEH +vxX +iaN +wli +aJP +iaN +sdc +sdc +fVZ +fVZ +sdc +fVZ +fVZ +fVZ +fVZ +dLR +gNV +ayA +wqW +tXr +qia +qtT +gNV +vxX +vxX +vxX +vxX +vxX +vxX +iJm +uKm +eYP +uWI +dir +eYP +fnh +qoN +fnh +fnh +jMW +fnh +fnh +fnh +fnh +fnh +fnh +fnh +fnh +fnh +uUr +sjX +fnh +wXY +whx +fnh +vxX +vxX +vxX +vxX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(47,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hen +hen +hen +hen +hen +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +pEH +pEH +bBo +bBo +iaN +iaN +iig +qdW +tCt +sdc +ycY +aTM +odm +wEL +oZQ +oZQ +oZQ +oZQ +oZQ +gNV +gNV +gNV +oYE +gNV +gNV +gNV +dLR +vxX +vxX +vxX +vxX +vxX +vxX +uKm +tUr +iLo +lYg +oHC +fnh +qoN +fnh +lTj +jMW +jSE +jHQ +jHQ +wdO +jHQ +jHQ +atw +vbF +pTO +lil +vvY +mkc +kzS +uym +fnh +vxX +vxX +vxX +vxX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(48,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +fYe +fYe +fYe +fYe +fYe +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +pEH +ixo +dcg +nxd +iaN +kVX +bUJ +rOL +gsn +scw +mnG +ghU +unF +pim +oZQ +oZQ +oZQ +oZQ +oZQ +oZQ +oLU +fLe +oOV +xtB +xRj +hSM +dLR +vLs +unk +vLs +unk +vxX +vxX +oTe +ctf +pDr +cMK +rJv +fnh +kGS +fnh +jxR +xfM +lYB +frh +cDD +cDD +cDD +cDD +hCN +pMo +fnh +fnh +fnh +fnh +qlO +guP +fnh +vxX +vxX +vxX +vxX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(49,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +fYe +fYe +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +pEH +xok +ljG +fFE +iaN +mPH +dhv +wWH +iWu +qug +vQa +iJr +skL +gcU +oZQ +oZQ +oZQ +oZQ +oZQ +oZQ +oLU +fLe +oOV +fLe +qlE +hXL +dLR +cGs +ibx +ibx +unk +hvw +jiP +uKm +yew +stk +hgS +jHQ +jHQ +jHQ +bhV +jHQ +jHQ +tMF +uoi +cDD +wLA +uaC +cDD +qxG +fnh +fnh +oOF +onb +fnh +fnh +fnh +fnh +vxX +vxX +vxX +vxX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(50,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +jVV +oID +oID +oID +jVV +oID +oID +oID +jVV +oID +oID +oID +jVV +jVV +jVV +jVV +fYe +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +pEH +cbn +ljG +qXY +iaN +gEQ +syL +kbg +xKh +sdc +lNO +mMJ +gli +lZP +oZQ +oZQ +oZQ +oZQ +oZQ +oZQ +wkr +fLe +oOV +fLe +xRj +dWl +ygc +ibx +ibx +ibx +fvF +duU +hmA +exS +nlx +miR +kYT +kYT +kYT +kYT +kYT +kYT +haF +wKO +trP +cDD +xRP +gzS +cDD +qxG +fnh +bEo +ljt +xGe +nFS +fnh +dxD +aRn +vxX +vxX +vxX +vxX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(51,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +jVV +oID +oID +oID +jVV +hhX +jVV +hhX +hhX +hhX +jVV +hhX +hhX +hhX +jVV +hhX +hhX +hhX +hhX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +pEH +nuu +ilO +qXY +wds +uRO +nCc +kbg +cwB +sdc +ilr +gDQ +qWY +veF +oZQ +oZQ +oZQ +oZQ +oZQ +oZQ +oLU +fLe +oOV +fLe +xRj +xXY +dLR +vxX +vxX +vxX +unk +ibx +vxX +vxX +siU +spU +kYT +bUZ +vzG +swS +mBD +ahq +cDD +cDD +cDD +cDD +iJB +cDD +cDD +jbo +fnh +ybp +xlI +hLR +bjo +fnh +ibx +ibx +rFK +vxX +vxX +vxX +vxX +fYe +fYe +fYe +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(52,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +jVV +hhX +hhX +hhX +hhX +hhX +jVV +hhX +hhX +hhX +jVV +hhX +hhX +hhX +jVV +hhX +hhX +hhX +mIW +mIW +mIW +mIW +dOG +dOG +dOG +dOG +dOG +dOG +dOG +dOG +dOG +dOG +dOG +vxX +vxX +bBo +efm +ljG +qXY +iaN +gyS +mLn +swj +eFu +etV +hvf +miE +lam +cHx +oZQ +oZQ +oZQ +oZQ +oZQ +oZQ +wOU +wOU +hpT +wOU +wOU +wOU +wOU +wOU +wOU +wOU +vxX +ibx +vxX +vxX +fnh +spU +kYT +rRy +cOb +ycI +vMN +ahq +lxI +bCD +xgn +vuZ +lgA +sCT +cDD +qxG +fnh +fnh +hkm +fnh +fnh +fnh +fnh +uXS +fnh +vxX +vxX +vxX +vxX +vxX +vxX +fYe +fYe +hhX +hhX +hhX +hhX +hhX +fNW +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(53,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +oID +hhX +hhX +xrb +xrb +oPe +oPe +baH +baH +baH +baH +baH +baH +baH +fZF +fZF +fZF +hhX +mIW +cYG +fDV +tMf +dOG +qeg +wRf +wsc +yiv +xvr +dOG +qog +gcQ +bEn +dOG +vxX +vxX +bBo +iee +bPu +bBo +iaN +fON +jds +bzx +sdc +sdc +rWv +mlf +uyL +sMV +oZQ +oZQ +oZQ +oZQ +oZQ +oZQ +rXd +qqL +mUi +fpx +rDE +uIx +fkG +fxF +fxF +wOU +vxX +taj +vxX +bGk +kYT +rEV +kYT +bGk +ncR +ncR +bGk +ahq +sco +egv +tqV +tqV +njM +wnT +cDD +qxG +jOB +wUS +wUS +jHp +tGc +qrg +eQI +iMT +fnh +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(54,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +oID +jVV +xrb +xrb +rri +rri +rri +baH +pjt +glk +baH +jfE +wrG +baH +fZF +fZF +fZF +hhX +mIW +lrV +rQY +kex +dOG +xaY +gYH +vrU +uDZ +wmc +dOG +dOG +dOG +mkN +dOG +vxX +vxX +vxX +bBo +bBo +bBo +iaN +iaN +dlY +iaN +sdc +oZQ +oZQ +qNz +uyL +sMV +oZQ +oZQ +oZQ +oZQ +oZQ +oZQ +rXd +gGp +mUi +rxK +tCm +lwu +xwG +fxF +fxF +wOU +ibx +ibx +vxX +bGk +wOJ +jeV +tGR +hNN +pLA +fNw +wDH +ahq +vUo +laf +kuy +bVY +lgA +nDF +cDD +mhc +igq +igq +igq +igq +igq +igq +eAq +lGe +fnh +fnh +vxX +vxX +vxX +vxX +fYe +vxX +vxX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(55,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +oID +hhX +xrb +rri +rri +rri +rri +baH +aMa +ktD +baH +eBh +lnp +baH +jOV +jOV +mIW +mIW +mIW +kng +lLO +ioZ +dOG +wum +tYI +wZK +sap +wus +gFI +ouF +ouF +lbr +dOG +vxX +vxX +vxX +vxX +vxX +vxX +iaN +qIa +fBm +jUm +sdc +oZQ +oZQ +jzI +ayG +uyu +sYb +sYb +sYb +sYb +sYb +hCJ +wOU +aqw +hSA +mBY +rLb +rLb +bHg +mYd +uUP +wOU +ibx +vxX +vxX +bGk +kSc +dhj +dhj +xmy +sZH +pWr +wEj +ahq +kuI +sKt +kSU +uXQ +bHc +tBo +jCN +gbF +ukv +uOJ +evQ +evQ +evQ +igq +rcy +cIi +siK +fnh +vxX +vxX +vxX +fYe +fYe +fYe +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(56,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +xrb +rri +rri +rri +jOV +baH +cfM +dAG +baH +rVv +baH +baH +wSc +jYh +hKM +lLa +mIW +mIW +xZO +mIW +dOG +bFe +fir +icp +mlq +aiS +dOG +gAQ +eBa +eWJ +dOG +vxX +vxX +vxX +vxX +vxX +vxX +iaN +iaN +iaN +iaN +sdc +aAl +qrs +rXj +eDa +iJr +xXo +xXo +xXo +xXo +gBA +qyI +wOU +qfJ +mUi +mwc +rLb +ejl +eqv +udi +oTW +wOU +ibx +bGk +bGk +bGk +bGk +cou +bGk +nNo +imI +mXp +qml +ahq +qDH +dzA +mZr +wWu +jaf +gey +cDD +prS +asz +uOJ +evQ +evQ +evQ +igq +qpR +lGe +oJJ +fnh +vxX +vxX +vxX +fYe +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(57,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +oID +hhX +xrb +rri +rri +rri +jOV +aHM +aYj +aYj +aYj +aYj +aYj +aOp +wSc +tfZ +mIW +roO +mIW +qir +loT +lRL +dOG +dOG +dOG +dOG +nor +dOG +dOG +jqd +jmU +mKW +dOG +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +sdc +xeh +jir +sBb +pic +gli +gBq +gBq +dPk +gBq +oAH +uaN +uyL +kyA +wOU +wOU +cHp +wOU +pXX +wOU +wOU +wOU +wOU +wOU +taj +bGk +ogL +cPZ +rVL +rVL +bGk +qAU +cJL +iyA +sIl +ahq +cDD +cDD +cDD +vhz +vhz +cDD +cDD +krj +puV +iMq +iMq +iMq +iMq +iMq +iMq +iMq +iMq +iMq +vxX +vxX +vxX +fYe +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(58,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +oID +jVV +xrb +vVe +rri +rri +jOV +wSc +wSc +wSc +wSc +wSc +wSc +wSc +wSc +jYh +tIr +rrn +edH +kOn +jlC +ipJ +pWW +eQF +mIW +xDW +fLi +prk +dOG +dOG +dOG +dOG +dOG +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +sdc +rEK +sdc +sdc +sdc +aHc +aHc +aHc +sdc +sdc +guF +nso +kmX +aIU +uVU +uVU +nKA +wOU +wAm +lzu +wOU +vxX +vxX +vxX +ibx +bGk +auB +waT +rVL +auB +aPC +jql +sTj +pDe +fqt +jIn +ryt +oZX +evQ +evQ +evQ +evQ +evQ +fpi +lNv +iMq +ygh +wca +gAg +oVC +vYQ +ezM +qMn +iMq +vxX +vxX +vxX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(59,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +oID +hhX +oPe +wkP +rri +rri +jOV +wSc +wSc +wSc +wSc +wSc +wSc +wSc +wSc +jKc +tIr +mQo +mQo +eWB +uIb +gNP +hdq +vjA +tIr +jRJ +uEg +xhb +xey +egY +rai +uZc +vxX +vxX +fYe +fYe +fYe +vxX +vxX +vxX +vxX +sdc +lbg +xTb +sdc +oZQ +oZQ +oZQ +oZQ +oZQ +sdc +tom +oXc +uiL +ijg +xXo +xXo +rkr +wOU +cNr +ugI +wOU +vxX +vxX +vxX +ibx +bGk +xtb +fwJ +ipZ +auB +aPC +jql +sTj +fGc +dTh +kxS +mUp +eAZ +evQ +evQ +evQ +evQ +evQ +fpi +aTr +iMq +saA +cDV +spA +spA +spA +spA +gBY +iMq +vxX +vxX +vxX +fYe +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(60,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +jVV +hhX +oPe +eTd +rXQ +xEZ +gWG +nun +wSc +wSc +wSc +wSc +wSc +wSc +wSc +eJT +tIr +bnr +cYS +iRR +fsd +wjJ +vUn +weR +pLd +afR +mEy +xhb +cJZ +rai +rai +uZc +vxX +vxX +wkX +fYe +fYe +fYe +fYe +fYe +fYe +sdc +lLr +sdc +sdc +oZQ +oZQ +oZQ +oZQ +oZQ +sdc +lwW +uyL +uSA +wDv +gli +gli +wEd +wOU +rQy +pZj +wOU +vxX +vxX +vxX +ibx +bGk +auB +auB +rVL +vQn +aPC +eeQ +rFL +wLP +lVF +jIn +uuW +svl +evQ +evQ +evQ +evQ +evQ +uEW +nlu +tOa +foq +cNG +vtv +lVD +iom +dpj +aRZ +iMq +vxX +vxX +vxX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(61,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +jVV +fYe +oPe +oPe +oPe +oPe +jOV +skb +wSc +wSc +wSc +wSc +wSc +wSc +wSc +jYh +tIr +idB +mQo +kUG +dkq +tgv +peD +vjA +pIF +wrx +pBS +vWF +uZc +uZc +uZc +uZc +vxX +hen +hen +hen +fYe +fYe +fYe +fYe +fYe +fYe +fYe +vxX +sdc +oZQ +oZQ +oZQ +oZQ +oZQ +kUd +twR +xXo +xXo +qif +vOu +vOu +vOu +epK +epK +epK +epK +vOu +vxX +vxX +taj +bGk +jEu +oYC +auB +quz +bGk +ebk +jPs +hEV +dpT +bGk +eqD +svl +evQ +evQ +evQ +evQ +evQ +fpi +iEA +iMq +apk +cNG +hce +wLq +hce +cUm +tve +iMq +vxX +vxX +vxX +fYe +fYe +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(62,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +fYe +fYe +vxX +vxX +vxX +vxX +jOV +skb +wSc +wSc +wSc +wSc +wSc +uhC +nvR +uEX +tIr +fPB +ciy +eLe +xOO +lJw +lJw +oIr +mIW +xtp +oPN +bWJ +uZc +vxX +vxX +vxX +vxX +hen +hen +hen +hen +hen +hen +hen +fYe +fYe +fYe +vxX +sdc +oZQ +oZQ +oZQ +oZQ +oZQ +sdc +kQJ +xXo +xXo +qSG +pCT +kjh +xiF +nXe +pkt +xMY +aDW +vOu +vxX +gMk +gMk +bGk +bGk +bGk +bGk +bGk +bGk +bGk +bGk +bGk +bGk +bGk +dkv +svl +evQ +evQ +evQ +evQ +evQ +fpi +uXR +iMq +gei +bQl +kpG +xXz +niI +mnA +jKj +iMq +vxX +vxX +vxX +fYe +fYe +fYe +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(63,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +fYe +fYe +vxX +vxX +vxX +vxX +jOV +skb +wSc +wSc +wSc +wSc +wSc +vse +jOV +jOV +mIW +mIW +mIW +mIW +mIW +cFK +cFK +mIW +hED +crb +iqE +mMp +hED +vxX +vxX +fYe +fYe +hen +hen +hen +hen +hen +hen +hen +fYe +fYe +fYe +vxX +sdc +oZQ +oZQ +oZQ +oZQ +oZQ +sdc +ahV +xXo +xXo +qSG +fSq +tiv +pIa +gBu +pWL +kra +kra +nGv +bgY +bgY +bgY +bgY +vxX +igq +wnL +oFa +wnL +igq +kKK +nbG +nbG +wZw +cCP +uPM +evQ +evQ +evQ +evQ +evQ +fpi +pdx +iMq +iMq +pwV +rUf +ilx +iMq +beR +iMq +iMq +vxX +vxX +vxX +fYe +fYe +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(64,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +fYe +fYe +vxX +vxX +vxX +vxX +jOV +kDb +ctL +qCU +duB +nvR +fDi +uEX +jOV +vxX +vxX +vxX +vxX +mIW +sUM +rhc +uMo +hED +kqV +wow +ylZ +buu +hED +hED +vxX +wkX +fYe +hen +hen +hen +hen +hen +hen +hen +fYe +fYe +fYe +vxX +sdc +sdc +sdc +sdc +sdc +sdc +sdc +cBz +xXo +xXo +uPi +pCT +ydC +pWg +jLV +hGy +jpx +aLE +vOu +vxX +gMk +koX +bgY +vxX +igq +igq +igq +igq +igq +aBb +nkd +lYu +ylw +tAf +eau +qnq +qnq +ecj +qnq +mLA +aAn +xih +iMq +sok +eZg +mnC +ryR +iMq +avC +oEC +iMq +vxX +vxX +vxX +fYe +fYe +fYe +hhX +hhX +hhX +hhX +hhX +hhX +fNW +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(65,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +fYe +fYe +vxX +hHw +hHw +hHw +jOV +wSc +rwW +wSc +jOV +jOV +jOV +jOV +jOV +vxX +vxX +vxX +vxX +mIW +thT +thT +vlc +hED +fye +uaT +ccI +cPP +aco +hED +vxX +fYe +fYe +hen +hen +hen +hen +hen +hen +hen +fYe +fYe +vxX +vxX +vxX +bNL +xsj +lFN +qyg +gJA +dAC +piF +kah +odi +eYd +vOu +hHa +wXh +jOZ +iKn +gcD +msE +vOu +unk +wWJ +vFq +azk +vxX +igq +evQ +evQ +evQ +igq +nDS +fow +cQK +xWs +dYr +uqh +tLs +uqh +eCW +uqh +xYG +sQD +kod +iMq +aJM +hru +vIt +vWH +iMq +lsq +iBP +iMq +vxX +vxX +vxX +fYe +fYe +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(66,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +fYe +fYe +fYe +hHw +uRG +oyP +jOV +wSc +rwW +wSc +jOV +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +mIW +thT +thT +thT +hED +stF +uaT +bZI +ipc +tME +hED +vxX +fYe +hen +hen +hen +hen +hen +hen +hen +hen +fYe +fYe +vxX +vxX +vxX +bNL +xWQ +cVb +khi +odG +bNL +sdc +sdc +jiv +sdc +vOu +vOu +rHq +nKn +gnE +xeA +otY +vOu +vxX +gMk +blM +azk +vxX +igq +evQ +evQ +evQ +igq +rDm +jDQ +xhJ +xhJ +xhJ +xhJ +gvw +gws +iYB +gws +gvw +xhJ +dpe +aOm +gjB +txF +wxQ +xMZ +iMq +uvn +ceF +iMq +vxX +vxX +vxX +fYe +fYe +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(67,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +fYe +jwa +fYe +hHw +uRG +oyP +dAq +xbr +qFS +wSc +jOV +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +mIW +thT +thT +thT +hED +mqA +uaT +tGw +ipc +eQJ +hED +vxX +vxX +vxX +vxX +vxX +vxX +vxX +hen +hen +fYe +fYe +vxX +vxX +vxX +vxX +bNL +exg +bcj +mKo +fzg +omB +sdc +rDa +ljk +jTa +him +vOu +dDm +xeA +qBu +fIm +otY +vOu +vxX +vxX +gMk +kpx +vxX +igq +gWX +bAV +nnj +igq +ttv +jDQ +xhJ +tBF +tsf +gvw +gYT +xdQ +eCR +xck +ljZ +xhJ +qvV +aOm +aOm +aOm +aOm +aOm +aOm +aOm +aOm +aOm +vxX +vxX +vxX +fYe +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(68,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +fYe +jwa +fYe +hHw +uRG +jWm +hHw +hHw +dAq +jOV +jOV +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +mIW +thT +thT +thT +hED +tSj +jQc +rAq +xNy +iUV +hED +vxX +vxX +vxX +vxX +vxX +vxX +vxX +fYe +fYe +fYe +fYe +vxX +vxX +vxX +vxX +bNL +xgQ +oRE +kZj +fzg +aED +sdc +qnm +hQj +lgx +gvK +vOu +vOu +vOu +vOu +vOu +vOu +vOu +vxX +vxX +gMk +kpx +uet +igq +jbG +ubo +cXd +vxn +hex +jDQ +xhJ +vzW +hUD +gvw +kvk +cLD +ezF +xnq +qJo +xhJ +keg +unE +oZt +vZj +rjH +nXw +fnU +udG +xzP +oZt +vxX +vxX +vxX +fYe +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(69,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +jwa +fYe +hHw +uRG +eXu +aCb +aCb +aCb +aCb +hHw +hHw +vxX +vxX +vxX +vxX +vxX +vxX +vxX +mIW +mIW +mIW +mIW +hED +bme +hnJ +hED +hED +hED +hED +vxX +vxX +vxX +vxX +vxX +vxX +vxX +fYe +fYe +fYe +vxX +vxX +vxX +vxX +vxX +bNL +hxg +bcj +qZo +fPV +oQs +sdc +qnm +tFD +wjC +rPt +sdc +vxX +vxX +vxX +vxX +vxX +vxX +vxX +gMk +gMk +kpx +gMk +eSL +mDT +cyw +uSN +cbr +nSP +lVo +xhJ +oVn +fwU +gvw +wYo +cLD +nzb +xnq +pTw +xhJ +oZt +fQG +oZt +oZt +oZt +dlp +aRN +nqD +hZN +oZt +vxX +vxX +vxX +vxX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(70,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +fYe +hHw +uRG +uRG +uRG +uRG +uRG +uRG +uRG +hHw +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +hED +npn +okF +aum +hED +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +fYe +fYe +vxX +vxX +vxX +vxX +vxX +vxX +bNL +pNs +dpH +sLa +iIq +bNL +sdc +sdc +sdc +sdc +sdc +sdc +vxX +vxX +uKm +uKm +uKm +uKm +uKm +uet +kpx +kpx +vxX +igq +sxa +mpp +iac +igq +ttv +asz +xhJ +cEV +lMx +iyF +vCQ +rzD +bsM +nFI +riJ +xhJ +tHA +hsE +etg +oZt +rDx +hPb +fnU +xzP +nrW +oZt +vxX +vxX +vxX +vxX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(71,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hHw +hHw +uRG +uRG +uRG +uRG +uRG +uRG +hHw +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +hED +ocl +kkC +phJ +hED +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +fYe +fYe +vxX +vxX +vxX +vxX +vxX +vxX +bNL +bNL +bNL +bNL +bNL +bNL +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +uKm +bmu +tMP +sHa +pSV +kpx +bzu +uet +vxX +igq +igq +igq +igq +igq +rJg +tDm +xhJ +kpP +gvw +gvw +oRR +nAs +wYY +tSn +xas +xhJ +vZu +xOF +dgS +kzI +cNk +gtO +gcy +aRN +aRN +oZt +vxX +fYe +vxX +mUQ +jOM +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(72,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hHw +hHw +hHw +hHw +hHw +hHw +hHw +hHw +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +hED +hED +hED +hED +hED +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +fYe +fYe +fYe +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +gYW +gYW +gYW +gYW +vxX +vxX +vxX +uKm +bmu +bMl +uJA +uKm +vxX +gMk +doZ +vxX +vxX +vxX +vxX +vxX +igq +igq +igq +xhJ +iDw +plH +gvw +eOI +xYZ +jlb +whG +nUi +xhJ +cgB +kHw +teV +oZt +rix +ixR +qro +hOh +vau +oZt +vxX +kqj +xcq +gVN +dKp +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(73,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +okm +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +fYe +fYe +fYe +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +gYW +gYW +gYW +gYW +gYW +gYW +gYW +jbP +gLD +gYW +vxX +vxX +vxX +uXD +uXD +uXD +uXD +uXD +lDQ +mGn +tBL +mGn +lDQ +lDQ +lDQ +lDQ +vxX +vxX +vxX +gvw +gvw +gvw +gvw +gSI +jsU +dBu +sSP +pJJ +xhJ +oZt +oZt +oZt +oZt +nZb +fPi +iHL +rwq +eSH +ria +xcq +uBT +fYe +mUQ +agP +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(74,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +fYe +fYe +hhX +hhX +hhX +okm +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +fYe +fYe +mEN +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +gYW +dTy +vsD +oMn +qWh +pFa +gYW +qIr +lCR +gYW +gYW +gYW +gYW +lDQ +lDQ +lDQ +lDQ +nev +dtt +dtt +dtt +dtt +dtt +lDQ +lDQ +lDQ +vxX +vxX +vxX +vxX +vxX +vxX +gvw +gjt +jEf +kQV +uKv +evg +gvw +vxX +vxX +vxX +oZt +jCU +tkh +cgw +fMY +uHE +oZt +vxX +vxX +vxX +vxX +jVV +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(75,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +pnS +fYe +fYe +fYe +hhX +hhX +okm +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +fYe +fYe +unk +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +gYW +fdQ +oMn +ocJ +brc +ofc +jnL +hhU +xCI +gYW +xQX +dTe +gYW +nev +dtt +dtt +nev +dtt +dtt +dtt +nev +lDQ +dtt +lDQ +lDQ +lDQ +vxX +vxX +vxX +vxX +vxX +vxX +gvw +gvw +gvw +gvw +gvw +gvw +gvw +vxX +unk +unk +oZt +oZt +oZt +oZt +oZt +oZt +oZt +vxX +vxX +vxX +vxX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(76,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +pnS +pnS +pnS +pnS +hhX +hhX +okm +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +fYe +fYe +iRm +fYe +vxX +vxX +vxX +gYW +gYW +gYW +gYW +gYW +wOp +uhs +kOT +wAv +rQS +liE +ofc +irK +gYW +gYW +dTe +ely +dtt +dtt +dtt +dtt +dtt +dtt +dtt +lDQ +lDQ +dtt +dtt +nev +mGn +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +tXg +hhX +hhX +hhX +hhX +hhX +unk +vxX +vxX +vxX +vxX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(77,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +oPL +pnS +pnS +fYe +hhX +hhX +hhX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +fYe +fYe +vxX +unk +fYe +fYe +vxX +fYe +oSk +esQ +wAv +wlq +gYW +gYW +gYW +gYW +gYW +slb +gYW +vFg +wjI +wjI +wjI +wjI +gYW +lDQ +lDQ +lDQ +dtt +dtt +lDQ +dtt +uXD +lDQ +dtt +dtt +dtt +bTO +gMk +azk +azk +azk +azk +azk +azk +vxX +vxX +gMk +vxX +vxX +vxX +vxX +vxX +hhX +hhX +hhX +hhX +hhX +unk +vxX +vxX +vxX +vxX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(78,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +fYe +pnS +hhX +hhX +hhX +hhX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +fYe +vxX +vxX +fYe +fYe +fYe +fYe +aza +lhO +wAv +aiE +dKA +gYW +mVU +mnD +mVU +gYW +gYW +gYW +wjI +uXD +uXD +uXD +dSl +uXD +uXD +uXD +lDQ +ldo +ldo +ldo +ldo +idH +ldo +ldo +qhm +uXD +uXD +uXD +cHs +uXD +uXD +uXD +vxX +azk +azk +azk +azk +azk +vxX +vxX +vxX +vxX +fYe +hhX +hhX +hhX +hhX +tXg +vxX +vxX +vxX +vxX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(79,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +okm +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +fYe +vxX +vxX +fYe +fYe +fYe +fYe +vxX +oSk +wAv +wAv +pau +gYW +gYW +tth +gYW +gYW +kIB +wAv +xiM +uXD +rFb +jzN +jIe +jzN +fdy +chW +jzN +jzN +jzN +jzN +jzN +jzN +jzN +jzN +jzN +chW +jkL +jzN +qIf +vwL +pbn +uXD +vxX +vxX +uet +gMk +vxX +azk +azk +vxX +vxX +vxX +fYe +hhX +hhX +hhX +hhX +vxX +vxX +vxX +vxX +vxX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(80,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +fNW +hhX +okm +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +fYe +fYe +vxX +vxX +fYe +gYW +gYW +gYW +gYW +wAv +gYW +gYW +gYW +wjI +wjI +wjI +wjI +wjI +wjI +wjI +uXD +cYC +leZ +leZ +leZ +leZ +leZ +leZ +leZ +leZ +leZ +leZ +leZ +leZ +leZ +leZ +leZ +leZ +leZ +leZ +leZ +dFc +uXD +uXD +uXD +vxX +vxX +vxX +vxX +azk +vxX +vxX +vxX +fYe +hhX +hhX +hhX +hhX +unk +vxX +vxX +vxX +vxX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(81,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +okm +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +fYe +fYe +vxX +vxX +gYW +dum +hdN +aPM +hdN +gYW +ucb +wPn +iZr +uXD +uXD +uXD +uXD +uXD +uXD +uXD +uGW +leZ +rCL +sTB +kAc +kAc +kAc +kAc +kAc +kAc +sTB +sTB +sTB +sTB +kAc +kAc +kAc +sTB +vAo +leZ +sZF +pLP +pLP +uXD +vxX +vxX +vxX +vxX +azk +vxX +vxX +unk +unk +tXg +vxX +tXg +unk +unk +vxX +vxX +vxX +vxX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(82,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +okm +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +fYe +vxX +vxX +vxX +gYW +kwW +tQy +gYW +ofc +gYW +cLI +dnw +jBh +uXD +aLN +aLN +aLN +aLN +aLN +uXD +jYf +leZ +vVC +sxV +sxV +sxV +sxV +sxV +sxV +sxV +sxV +sxV +sxV +sxV +sxV +sxV +sxV +sxV +mJV +leZ +sZF +pLP +pLP +uXD +vxX +vxX +vxX +vxX +azk +azk +azk +azk +unk +gMk +vxX +vxX +vxX +vxX +vxX +vxX +vxX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(83,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +okm +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +fYe +fYe +vxX +vxX +gYW +hbQ +saY +gYW +qIP +gYW +fET +miV +wjI +uXD +aLN +aLN +aLN +aLN +aLN +ntQ +hPS +leZ +sby +sxV +sxV +sxV +sxV +sxV +sxV +sxV +sxV +sxV +sxV +sxV +sxV +sxV +sxV +sxV +hrI +xqG +wDr +uXD +uXD +uXD +uKm +uKm +vxX +vxX +vxX +vxX +vxX +azk +iEl +gMk +uet +uet +vxX +gMk +mGM +tXg +unk +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(84,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +okm +okm +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +fYe +fYe +fYe +vxX +vxX +gYW +gYW +gYW +gYW +ofc +gYW +gYW +gYW +wjI +hVN +aLN +aLN +aLN +aLN +aLN +hVN +hPS +leZ +sby +sxV +sxV +sxV +sxV +sxV +sxV +sxV +sxV +sxV +sxV +sxV +sxV +sxV +sxV +sxV +hrI +leZ +lGP +rzJ +gMk +dij +atB +uKm +vxX +vxX +vxX +vxX +azk +azk +unk +vxX +gMk +gMk +gMk +alx +scS +ejH +unk +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(85,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +okm +okm +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +unk +unk +gbv +any +unk +unk +vxX +vxX +gYW +kGy +mMN +jVk +jVk +fuk +wos +xiM +hVN +aLN +aLN +aLN +aLN +jhc +jYG +hPS +leZ +sby +sxV +sxV +sxV +sxV +sxV +sxV +sxV +sxV +sxV +sxV +sxV +sxV +sxV +sxV +idV +hrI +leZ +khL +uXD +uet +gMk +mZs +vxX +vxX +vxX +vxX +vxX +azk +vxX +vxX +vxX +gMk +vxX +vxX +ent +bCg +unk +unk +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(86,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +okm +okm +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +unk +unk +kkx +kkx +kkx +kkx +unk +unk +vxX +gYW +kGy +mMN +qwM +jCD +jCD +jCD +wjI +hVN +aLN +aLN +aLN +aLN +aLN +vzi +hPS +leZ +sby +sxV +sxV +sxV +sxV +sxV +sxV +sxV +sxV +sxV +sxV +sxV +sxV +sxV +sxV +sxV +hrI +leZ +lGP +rzJ +gMk +gMk +gMk +vxX +vxX +vxX +vxX +vxX +azk +gMk +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(87,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +okm +okm +vxX +vxX +vxX +vxX +vxX +vxX +vxX +fYe +dsG +fYe +fYe +fYe +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +unk +kkx +kkx +kkx +nQT +kkx +kkx +unk +jCD +jCD +jCD +jCD +eiZ +jCD +bXD +jCD +wjI +uXD +aLN +aLN +aLN +aLN +aLN +uXD +hPS +leZ +sby +sxV +sxV +sxV +sxV +sxV +sxV +sxV +sxV +sxV +sxV +sxV +sxV +sxV +sxV +sxV +hrI +leZ +rRP +uXD +uXD +uXD +gMk +vxX +vxX +vxX +vxX +vxX +azk +vxX +vxX +vxX +rnk +rnk +rnk +rnk +rnk +rnk +vxX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +fNW +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(88,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +okm +okm +vxX +vxX +vxX +vxX +vxX +vxX +vxX +fYe +fYe +hen +hen +hen +hen +fYe +fYe +fYe +dsG +dsG +vxX +vxX +unk +kkx +joM +joM +joM +joM +kkx +eOx +wMY +apb +nbf +csr +poj +yib +lan +jCD +wjI +uXD +aLN +aLN +aLN +aLN +aLN +uXD +cDl +leZ +vVC +sxV +sxV +sxV +sxV +sxV +sxV +sxV +sxV +sxV +sxV +sxV +sxV +sxV +sxV +sxV +mJV +leZ +sZF +pLP +pLP +uXD +gMk +vxX +vxX +vxX +vxX +gMk +azk +vxX +vxX +vxX +rnk +vGs +dwI +dwI +nnM +rnk +rnk +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(89,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +fYe +vxX +vxX +vxX +vxX +vxX +vxX +vxX +fYe +fYe +hen +hen +hen +hen +fYe +fYe +fYe +dsG +dsG +dsG +dsG +any +kkx +joM +joM +joM +joM +kkx +eOx +fFt +cTH +bwt +mtS +hXf +jit +hfn +jCD +vFg +uXD +uXD +uXD +jJb +jJb +jJb +jJb +ata +leZ +hbb +xkO +nhm +nhm +nhm +nhm +nhm +nhm +xkO +xkO +xkO +xkO +nhm +nhm +nhm +xkO +lCp +leZ +sZF +pLP +pLP +uXD +gMk +gMk +vxX +vxX +vxX +azk +azk +gMk +uet +vxX +rnk +iQt +noh +lpc +gMr +iuA +rnk +cTm +rnk +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(90,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +fYe +fYe +hen +hen +hen +hen +hen +hen +fYe +fYe +fYe +fYe +fYe +unk +kkx +kkx +kkx +kkx +kkx +kkx +unk +jCD +jCD +jCD +eYI +yfw +mfh +tiB +jCD +wjI +wjI +wjI +eHU +uhi +dRq +bfN +uhi +bOr +leZ +leZ +leZ +leZ +leZ +leZ +leZ +leZ +leZ +lUy +leZ +leZ +leZ +leZ +leZ +leZ +leZ +leZ +leZ +wLu +uXD +uXD +uXD +vxX +gMk +uet +uet +vxX +azk +vxX +gMk +gMk +gMk +aXD +iml +evT +dca +kBx +pRq +pxR +xpx +cXP +aIo +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(91,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +fYe +fYe +hen +hen +hen +hen +hen +hen +hen +fYe +fYe +fYe +fYe +unk +unk +kkx +kkx +kkx +kkx +unk +unk +vxX +vxX +jCD +jCD +jCD +jCD +fcH +jCD +wPn +gYW +cjp +wjI +uhi +qAh +mwx +ktr +oGD +oKx +oKx +kIm +ieP +cUv +oKx +mCn +dgY +oKx +oKx +dzu +oKx +jsX +mCn +cUv +nsY +qYe +mCn +lvw +xGo +oEp +ibx +vxX +vxX +azk +azk +azk +azk +azk +vxX +vxX +vxX +vxX +rnk +bzj +eMq +dwI +uqI +yaX +rnk +cvn +rnk +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(92,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +fYe +fYe +fYe +hen +hen +hen +hen +hen +hen +hen +hen +hen +fYe +vxX +unk +unk +unk +unk +unk +unk +vxX +vxX +vxX +vxX +vxX +tAa +jCD +jCD +jCD +sbp +wPn +xJd +xiM +uhi +pDs +wFZ +uhi +reD +hCs +hCs +hCs +hCs +lIr +sAs +lIr +lIr +meE +ayE +fOs +meE +jGB +jGB +jGB +jGB +jGB +jGB +jGB +oEp +oEp +ibx +uet +azk +azk +vxX +vxX +pfg +vxX +vxX +vxX +vxX +hhX +rnk +rnk +rnk +rnk +rnk +ovj +rnk +rnk +rnk +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(93,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +fYe +fYe +fYe +hen +hen +hen +hen +hen +hen +hen +hen +hen +fYe +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +hwW +dTe +tAa +gYW +gYW +gYW +sKs +jBh +uhi +lIp +jAR +tZL +reD +qDQ +vkR +rEJ +hCs +uIC +cmw +fEI +lIr +sYs +vPn +rwD +fCj +jGB +dsR +hef +gvH +dVX +srd +jGB +ibx +ibx +ibx +ibx +azk +vxX +vxX +vxX +iDq +vxX +vxX +vxX +vxX +hhX +hhX +hhX +hhX +cTm +wNp +nPV +hrg +rnk +oID +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(94,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +fYe +hen +hen +hen +hen +hen +hen +hen +hen +hen +hen +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +oSk +qGN +dTe +tAa +tAa +tAa +gYW +gYW +wjI +uhi +uhi +uhi +uhi +reD +rMj +jIK +sDd +lNB +aZk +aZk +aZk +iGo +fao +fZv +fZv +vbY +jGB +kpe +slM +feu +xWd +wCj +jGB +xbm +ibx +ibx +ibx +ftX +hzF +hzF +hzF +lbo +hzF +hzF +hzF +hzF +hzF +hzF +hzF +hzF +rnk +xIm +hqO +mQZ +cTm +jVV +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(95,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +fYe +fYe +hen +hen +hen +hen +hen +hen +hen +hen +hen +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +fAV +aIB +dTe +eyf +eyf +tAa +tAa +gYW +wjI +wjI +xiM +wjI +wjI +hCs +fqg +uXZ +bZi +hCs +hsb +rsK +aSS +lIr +gcN +xTZ +igS +aEY +jGB +nRA +tqJ +qaE +klJ +lSD +jGB +vxX +pfg +vxX +ibx +ftX +piS +dIv +cyT +hQY +gWr +wyh +aFL +sZG +sZG +sZG +sZG +pzw +bWI +ril +aeC +mQZ +rnk +oID +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(96,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +fYe +fYe +hen +hen +hen +hen +hen +hen +hen +hen +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +gYW +gYW +gYW +gYW +gYW +pjn +aWJ +aWJ +hwW +tAa +gYW +tXp +gYW +veh +ewr +wjI +hCs +frd +oCB +oJI +hCs +vCL +bHb +pco +lIr +mGo +vqt +vqt +nSn +jGB +vyL +vUa +jGB +upE +jGB +jGB +cOD +uet +vxX +ibx +lgp +hzF +lSM +gcV +iGC +tkD +uxt +uxt +uxt +uxt +uxt +sZG +hzF +hzF +rnk +cTm +rnk +rnk +oID +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(97,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +fYe +fYe +hen +hen +hen +hen +hen +hen +hen +hen +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +gYW +gnx +dTe +sNy +gYW +aWJ +aWJ +ayw +snk +oSk +gYW +pLE +gYW +vOa +tUn +wjI +hCs +hCs +wpJ +hCs +hCs +frs +dHS +oxG +hCs +jnm +jKD +vqt +rzb +jGB +jGB +jGB +jGB +doh +gxt +hRB +hRB +uZx +uZx +lsC +uZx +hzF +sNi +bOi +iGC +tkD +uxt +uxt +uxt +uxt +uxt +sZG +sZG +pLn +umg +ixZ +hhX +hhX +oID +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(98,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +fYe +fYe +hen +hen +hen +hen +hen +hen +hen +hen +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +gYW +rLJ +srv +hbk +reK +pLE +tXp +aWJ +aIB +tAa +gYW +tXp +gYW +pny +eht +vFg +wjI +hCs +tEn +reU +mYU +iIY +jIK +hdD +upj +lER +iMD +nHs +sDH +lqv +xOr +quV +oWd +lfy +yaM +ulL +mGW +mGW +mGW +mGW +iZz +hzF +vQT +clM +caP +tkD +uxt +uxt +uxt +uxt +uxt +uxt +sZG +wRm +umg +ixZ +jVV +jVV +oID +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(99,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +fYe +fYe +fYe +dsG +dsG +dsG +dsG +fYe +fYe +fYe +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +gYW +gYW +hCT +ttL +gYW +dTe +tXp +kDJ +fne +aWJ +vKM +tXp +gYW +gYW +gYW +sbn +wjI +hCs +wxv +mnP +mnP +mnP +mnP +dAS +kdW +gOG +ffA +wvc +gEm +vqm +vqm +vqm +vqm +etu +wQG +tJO +mGW +mGW +mGW +mGW +iZz +hzF +jui +pRY +iGC +bef +cQU +jCr +uxt +uxt +uxt +uxt +sZG +pLn +umg +ixZ +hhX +hhX +oID +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(100,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +jVV +jVV +oID +oID +oID +jVV +jVV +jVV +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +dsG +vxX +vxX +vxX +fYe +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +gYW +gYW +gYW +gYW +pjn +tXp +pLE +tXp +pLE +dse +tXp +gYW +qUr +gYW +kIB +xiM +hCs +aZK +oqs +oqs +oqs +oqs +dAS +eOY +acA +xIN +rDg +rDg +rDg +rDg +rDg +rDg +rtO +jbi +ihd +hRB +mGW +mGW +mGW +iZz +hzF +kCu +jbq +jbq +jbq +jbq +vnj +jCr +uxt +uxt +uxt +sZG +wRm +umg +ixZ +hhX +hhX +oID +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(101,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +oID +hhX +hhX +hhX +hhX +hhX +hhX +iXk +iXk +fIv +fIv +fIv +fIv +fIv +fIv +fIv +fIv +ttt +ttt +ttt +oaF +ttt +ttt +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +nzw +aih +fne +dTe +kvX +dTe +aWJ +vKM +mne +gYW +cjp +gYW +gYW +oTa +hCs +tYg +jVF +cAg +cAg +cAg +dAS +eOY +gcN +hpb +rDg +rDg +rDg +rDg +rDg +rDg +les +pdp +hCK +ilQ +mGW +mGW +mGW +iZz +hzF +uxt +uxt +uxt +uxt +uxt +swU +tkD +uxt +uxt +uxt +sZG +pLn +umg +ixZ +hhX +hhX +oID +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(102,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +oID +hhX +hhX +hhX +hhX +hhX +iXk +iXk +bBm +jxS +jxS +jxS +njZ +gUB +lFG +qmU +lFG +ttt +uCo +xXh +xnF +ouQ +ttt +ttt +ttt +ttt +ttt +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +nzw +pqB +fne +sUY +sUY +sUY +bCm +gYW +fne +gYW +wAv +kIB +pEO +wjI +hCs +bxQ +rRd +gbS +gbS +rRd +skQ +hCs +pUJ +mKe +rDg +rDg +rDg +rDg +rDg +rDg +ssZ +pdp +dMC +ilQ +mGW +mGW +mGW +iZz +hzF +uxt +uxt +uxt +uxt +uxt +swU +tkD +uxt +uxt +uxt +oqN +pLn +umg +ixZ +hhX +hhX +oID +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(103,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +oID +hhX +hhX +hhX +hhX +rmF +iXk +cZE +jZC +cZE +cZE +bnG +bxG +tHS +lYL +lFG +nKx +ttt +beK +rqw +dLI +nbj +mzU +bjn +bjn +rRY +ttt +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +nzw +aih +qCf +ycw +ksf +hmF +tAa +gYW +wAv +gYW +gYW +gYW +gYW +jIU +hCs +gUu +ban +eJB +eJB +eCb +rZC +eOY +gcN +usr +rDg +rDg +rDg +rDg +rDg +rDg +ssZ +pdp +mWX +ilQ +mGW +mGW +mGW +iZz +hzF +uxt +uxt +uxt +uxt +uxt +swU +tkD +uxt +uxt +uxt +sZG +pLn +umg +ixZ +hhX +hhX +oID +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(104,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +oID +jVV +jVV +jVV +jVV +iXk +fIv +cZE +kCs +tQV +tQV +xDI +tUD +rPe +kTy +lFG +lFG +ttt +ttt +tho +aBU +kdo +ttt +tMp +bjn +nen +ttt +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +fne +dTe +dTe +nMj +nfj +tAa +gYW +wAv +wAv +mpZ +wAv +wAv +wjI +hCs +mRw +oqs +gbS +gbS +oqs +dAS +tkR +oxU +xIN +rDg +rDg +rDg +rDg +rDg +rDg +ssZ +pdp +mWX +kXs +mGW +mGW +mGW +iZz +hzF +hfQ +eXi +lIv +okL +okL +nan +uLP +uxt +uxt +uxt +sZG +wRm +umg +ixZ +hhX +hhX +oID +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(105,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +oID +hhX +hhX +hhX +iXk +iXk +uRI +kCs +rxW +lFG +wxH +tbZ +lLC +sBl +eYF +lYL +lFG +jxE +ttt +ttt +ttt +qhg +ttt +wcH +fib +fDf +ttt +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +lIZ +dTe +fne +dTe +tAa +gYW +oKI +gYW +gYW +gYW +kiE +wjI +azV +kSO +abo +abo +abo +fXH +dAS +kZS +gcN +xIN +rDg +rDg +rDg +rDg +rDg +rDg +ssZ +pdp +rVo +hRB +mGW +mGW +mGW +iZz +xjl +iGC +swU +swU +swU +aPw +uLP +uxt +uxt +uxt +uxt +sZG +pLn +umg +ixZ +hhX +hhX +oID +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(106,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +oID +hhX +hhX +hhX +iXk +tQS +glA +lFG +lFG +oDK +uOs +kse +qmp +qyG +tot +pWn +ylD +rTc +xxs +xeF +flm +qeA +ttt +ttt +ttt +ttt +ttt +ycN +ycN +ycN +ycN +ycN +ycN +ycN +ycN +ycN +ycN +ycN +ycN +ycN +wbT +kvU +uMY +tAa +gYW +gYW +gYW +uSe +cjp +wAv +wAv +hCs +urx +rRd +rRd +rRd +rRd +dAS +eOY +gcN +hpb +rDg +rDg +rDg +rDg +rDg +rDg +ssZ +sZs +ulL +mGW +mGW +mGW +mGW +iZz +hzF +hzF +hCt +nHK +bBI +hzF +sZG +uxt +uxt +uxt +uxt +sZG +wRm +umg +ixZ +jVV +jVV +oID +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(107,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +oID +fNW +hhX +hhX +iXk +tQS +glA +lFG +lFG +oDK +qIJ +fHX +qwd +ppb +jwL +nDR +qrY +tUb +ptP +dnB +lta +mww +nkb +vaC +vaC +nZv +vaC +vaC +kMS +mNF +vaC +vaC +vaC +vaC +vaC +vaC +oMB +vaC +vaC +ycN +unk +unk +unk +vxX +vxX +vxX +gYW +uSe +cjp +mMN +wAv +hCs +hPk +mnP +xFT +etB +nfx +kDC +hCs +gcN +hWG +rDg +rDg +rDg +rDg +rDg +rDg +ssZ +pdp +ulL +mGW +mGW +mGW +mGW +iZz +nHK +ufW +vwn +eRf +vRC +nHK +sZG +uxt +uxt +uxt +sZG +sZG +pLn +umg +ixZ +hhX +hhX +oID +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(108,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +oID +hhX +hhX +hhX +iXk +iXk +pXn +aLK +xFt +lFG +voI +wOK +dby +qPX +whq +fYc +lFG +lFG +ycN +kTr +nee +akU +vaC +tQh +cHh +fde +kqS +kqS +kqS +kqS +kqS +kqS +kqS +kqS +kqS +psT +cHh +kNJ +vaC +ycN +vxX +vxX +vxX +vxX +vxX +vxX +gYW +uSe +cjp +wAv +fld +hCs +dBU +rgT +fgt +jhl +wBO +prX +hCs +izU +usr +rDg +rDg +rDg +rDg +rDg +rDg +ssZ +spg +ndB +hRB +mGW +mGW +mGW +iZz +nHK +lGD +cpZ +jzi +ksa +nHK +sZG +uxt +uxt +uxt +sZG +hzF +hzF +lut +tBK +hhX +hhX +oID +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(109,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +oID +jVV +jVV +jVV +jVV +iXk +fIv +cZE +aLK +fWD +fWD +sPW +vZX +dZA +kTy +lFG +rVy +fIv +ycN +ycN +xNh +akU +vaC +uxO +hqg +nIS +brV +brV +brV +brV +brV +brV +brV +brV +brV +hQA +hqg +ukY +vaC +ycN +vxX +vxX +vxX +vxX +vxX +vxX +gYW +gYW +gYW +wwR +gYW +hCs +hCs +hCs +hCs +hCs +hCs +hCs +hCs +sBG +xIN +rDg +rDg +rqi +nAm +rDg +rDg +dyV +pVh +hRB +sYD +iZz +iZz +iZz +iZz +nHK +mXV +oCu +oXh +myG +nHK +jPL +sZG +sZG +sZG +sZG +nHK +hhX +hhX +hhX +hhX +hhX +oID +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(110,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +oID +hhX +hhX +hhX +hhX +nCS +iXk +cZE +cZE +cZE +cZE +hhC +lAN +fEa +fYc +lFG +nKx +fIv +qYn +vaC +gLZ +akU +vaC +azt +kqS +dAv +brV +brV +brV +brV +brV +brV +brV +brV +brV +jGg +kqS +rtN +jlI +ycN +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +gYW +wAv +tuR +wxh +wxh +apQ +apQ +tYw +tYw +dho +apQ +icl +ggu +apQ +rRb +rRb +rRb +rRb +apQ +kRG +abX +apQ +uZx +uZx +ngz +ngz +uZx +hzF +hzF +hzF +hzF +hzF +hzF +hzF +hzF +hzF +hzF +hzF +hzF +vxX +jVV +jVV +jVV +jVV +oID +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(111,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +oID +hhX +hhX +hhX +hhX +hhX +iXk +iXk +cZE +cZE +cZE +cZE +jIl +kOl +ofE +tZv +lFG +fIv +blh +vaC +jhj +cnZ +vaC +nIS +xzp +brV +brV +brV +brV +brV +txo +brV +brV +brV +brV +brV +brV +hQA +yhW +ycN +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +gYW +kdc +jYp +xqY +yeO +apQ +eZc +htN +bGZ +hGU +xCM +jjF +eky +aCP +hkt +xtN +exR +vla +mBw +qxU +fAT +apQ +vxX +vxX +gMk +gMk +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +hhX +hhX +hhX +hhX +oID +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(112,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +oID +hhX +hhX +hhX +hhX +hhX +hhX +iXk +iXk +fIv +fIv +fIv +iEQ +oxN +fIv +fIv +fIv +fIv +ycN +ycN +ycN +ycN +vaC +rqh +daK +lPw +brV +brV +brV +brV +brV +brV +brV +brV +brV +mta +daK +wad +vaC +ycN +vxX +vxX +vxX +gMk +gMk +vxX +vxX +vxX +gYW +gYW +gYW +dTe +wAv +apQ +nLW +nXO +dxH +hwb +xvH +xxV +kzK +tbe +tbe +nCb +kqW +kqW +hPP +rhW +kNO +apQ +vxX +gMk +gMk +gMk +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +fNW +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(113,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +oID +oID +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +juw +xHB +pOw +wps +uzB +uzB +bhL +owl +owl +owl +owl +ycN +rIw +uxO +hqg +nIS +brV +brV +brV +brV +brV +brV +brV +brV +brV +hQA +hqg +ukY +vaC +ycN +vxX +gMk +gMk +gMk +gMk +uet +vxX +vxX +vxX +tAa +gYW +dTe +dTe +apQ +iov +shl +juZ +lpu +apQ +rsk +dzY +olR +pUy +xlY +jdl +mfl +apQ +kOE +rMQ +apQ +vxX +vxX +gMk +gMk +vxX +vxX +vxX +lAj +lAj +lAj +lAj +lAj +lAj +lAj +lAj +lAj +lAj +lAj +lAj +lAj +vxX +fYe +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(114,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +oID +jVV +jVV +jVV +jVV +jVV +jVV +jVV +jVV +juw +vwK +ecz +vYv +fEU +pFd +reS +owl +owl +owl +owl +ycN +sBZ +uvd +jaJ +msR +daK +daK +daK +daK +daK +daK +daK +daK +daK +uZG +jaJ +qun +vaC +ycN +gMk +gMk +gMk +gMk +gMk +gMk +gMk +vxX +vxX +tAa +gEk +dTe +dTe +roB +iGa +fKo +xUy +xFP +apQ +hun +jWc +dFb +jUV +xlY +ghp +aML +apQ +kOE +uDd +apQ +vxX +vxX +gMk +gMk +gMk +vxX +vxX +lAj +pBg +xJT +dcH +iCi +qrm +nYy +vmB +vmB +vmB +ctv +rPC +lAj +vxX +fYe +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(115,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +prr +iub +dSG +tZA +tZA +tcL +hmu +owl +owl +owl +owl +ycN +vaC +ahb +vaC +vaC +vaC +vaC +vaC +jnG +vaC +vaC +vaC +vaC +vaC +vaC +vaC +vaC +vaC +ycN +vxX +vxX +gMk +gMk +gMk +gMk +gMk +vxX +vxX +oSk +nlZ +dTe +dTe +apQ +kjf +jLp +pGq +lAG +apQ +bBb +lvj +rce +mCr +ceD +ghp +qNS +apQ +kOE +rMQ +apQ +vxX +vxX +gMk +gMk +gMk +vxX +vxX +lAj +ebz +sbo +uBn +uBn +lgh +uBn +uBn +uBn +uBn +rts +gdZ +lAj +vxX +fYe +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(116,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +vxX +juw +prr +juw +juw +prr +prr +juw +juw +juw +juw +juw +ycN +ycN +ycN +ycN +ycN +ycN +ycN +ycN +ycN +ycN +ycN +ycN +ycN +ycN +ycN +ycN +ycN +ycN +ycN +vxX +vxX +vxX +gMk +gMk +gMk +gMk +vxX +vxX +tAa +aWJ +hUN +dTe +apQ +apQ +apQ +apQ +apQ +apQ +hMM +fUn +pos +mCr +ceD +kVF +cTI +apQ +kOE +rMQ +apQ +vxX +vxX +vxX +gMk +gMk +lAj +lAj +lAj +dWT +ajS +ajS +ajS +ajS +ajS +ajS +ajS +ajS +ajS +gdZ +lAj +vxX +fYe +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(117,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +vxX +vxX +dsG +vxX +vxX +dsG +dsG +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +gMk +gMk +vxX +vxX +vxX +vxX +tAa +aWJ +fAJ +qaS +tAa +apQ +hCb +rwX +drb +apQ +svS +jpV +kPc +mCr +pUy +pUy +pUy +oNo +vRt +pXB +apQ +vxX +vxX +vxX +gMk +rcP +lAj +nfy +ijo +hRO +ajS +ajS +ajS +ajS +ajS +ajS +ajS +ajS +ajS +gdZ +lAj +vxX +fYe +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(118,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +uet +xUx +vxX +vxX +vxX +vxX +vxX +oSk +lhO +oSk +oSk +tAa +apQ +dzQ +vjT +tAz +bAF +fvf +fUn +aEh +eAg +dFb +dFb +dFb +anZ +jIf +eaS +apQ +vxX +vxX +uet +gMk +obD +bQf +kiN +cRa +hRO +ajS +ajS +ajS +ajS +ajS +ajS +ajS +ajS +ajS +bag +lAj +vxX +vxX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(119,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +xUx +uet +vxX +vxX +vxX +vxX +gMk +gMk +gMk +gMk +vxX +vxX +apQ +qEn +tRl +pLX +apQ +uaK +cdW +cUN +bAP +apQ +nQQ +bsG +rwU +sTl +apQ +apQ +vxX +vxX +gMk +alx +obD +bQf +kiN +aEr +hRO +ajS +ajS +ajS +ajS +ajS +ajS +ajS +ajS +ajS +gdZ +lAj +vxX +vxX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(120,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +joM +joM +hhX +hhX +hhX +wOo +wOo +biS +wOo +wOo +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +unk +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +gMk +gMk +vxX +vxX +gMk +gMk +gMk +gMk +uet +vxX +vxX +apQ +apQ +apQ +apQ +apQ +apQ +apQ +apQ +apQ +apQ +apQ +apQ +apQ +apQ +apQ +apQ +vxX +vxX +gMk +gMk +sDP +lAj +nKc +jBJ +hRO +kDs +ajS +ajS +ajS +gTU +ajS +ajS +ajS +ajS +gdZ +lAj +vxX +fYe +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(121,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +joM +joM +hhX +hhX +wOo +wOo +kpD +vtg +xJA +wOo +wOo +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +vxX +vxX +vxX +vxX +vxX +vxX +gMk +his +gMk +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +gMk +gMk +vxX +gMk +gMk +gMk +gMk +gMk +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +gMk +vDa +lHx +oFk +suV +hRO +ajS +ajS +ajS +ajS +ajS +ajS +ajS +ajS +ajS +gdZ +lAj +vxX +fYe +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(122,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +oID +jVV +fZF +joM +joM +fZF +joM +wOo +xAa +ifj +jWh +fry +qen +wOo +joM +fZF +joM +joM +hhX +hhX +hhX +hhX +hhX +hhX +vxX +vxX +vxX +vxX +vxX +voq +jmp +gMk +xkI +cGl +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +gMk +gMk +gMk +gMk +gMk +gMk +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vDa +vDa +vDa +lAj +fsB +udO +hRO +ajS +ajS +ajS +ajS +ajS +ajS +ajS +ajS +ajS +gdZ +lAj +vxX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(123,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +oID +hhX +joM +joM +pHA +pHA +pHA +wOo +txw +erY +qHx +eWO +daz +wOo +pHA +pHA +pHA +joM +joM +hhX +hhX +hhX +hhX +hhX +vxX +vxX +vxX +vxX +vxX +syX +cGl +gMk +syX +gMk +cGl +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +gMk +gMk +gMk +vxX +gMk +gMk +gMk +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +gMk +vDa +gMk +gMk +lAj +mFR +kRX +hRO +ajS +ajS +ajS +ajS +ajS +ajS +ajS +ajS +ajS +gdZ +lAj +vxX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(124,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +oID +hhX +joM +pHA +pHA +bFS +bFS +biS +iJg +ebs +cWr +oVG +xla +wOo +bFS +bFS +pHA +pHA +joM +hhX +hhX +umg +asZ +umg +vxX +vxX +vxX +vxX +vxX +ura +syX +qIA +cGl +gMk +syX +qIA +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +gMk +gMk +vxX +vxX +gMk +gMk +gMk +gMk +gMk +gMk +gMk +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +mUQ +gMk +gMk +vxX +gMk +vDa +gMk +vxX +lAj +lAj +lAj +dWT +ajS +ajS +ajS +ajS +ajS +ajS +ajS +ajS +ajS +lxR +lAj +vxX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(125,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +oID +hhX +joM +pHA +bFS +bFS +bFS +wOo +bSE +iVg +prw +oVG +aSM +wOo +bFS +bFS +bFS +pHA +joM +hhX +hhX +hhX +hhX +hhX +vxX +vxX +vxX +vxX +vxX +aHe +gMk +xkI +syX +jmp +gMk +cGl +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +gMk +gMk +gMk +gMk +gMk +gMk +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +gMk +iEl +gMk +gMk +vDa +vDa +vDa +vxX +vxX +vxX +vxX +lAj +fiI +rts +mRd +mRd +mRd +mRd +mRd +mRd +mRd +sbo +gdZ +lAj +vxX +fYe +fYe +vxX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(126,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +oID +oID +fNW +joM +pHA +bFS +bFS +bFS +wOo +wOo +wOo +dTM +wOo +wOo +xfn +bFS +bFS +bFS +pHA +joM +hhX +hhX +hhX +hhX +hhX +vxX +vxX +vxX +vxX +vxX +vxX +syX +cGl +gMk +gMk +gMk +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +gMk +gMk +gMk +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +uet +gMk +iEl +gMk +gMk +vDa +gMk +vxX +vxX +vxX +vxX +vxX +lAj +hXu +xQe +xQe +dtm +uZa +alf +dtm +dtm +dtm +uAn +myZ +lAj +fYe +fYe +fYe +vxX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(127,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +oID +oID +hhX +hhX +mxt +srs +bFS +bFS +bFS +mbL +pla +iIT +vJG +rbs +gGh +mbL +bFS +bFS +bFS +srs +mxt +hhX +hhX +hhX +hhX +hhX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +pfg +pfg +pfg +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +gMk +gMk +vxX +gMk +uet +vxX +vxX +gMk +gMk +vxX +gMk +gMk +mUQ +vxX +vxX +vDa +uet +vxX +vxX +vxX +vxX +vxX +lAj +lAj +lAj +lAj +lAj +lAj +lAj +lAj +lAj +lAj +lAj +lAj +lAj +fYe +fYe +fYe +vxX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(128,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +oID +hhX +hhX +hhX +kkx +srs +bFS +bFS +bFS +aOQ +tny +faK +faK +faK +oFK +wPy +bFS +bFS +bFS +srs +mxt +hhX +hhX +hhX +hhX +hhX +vxX +vxX +vxX +vxX +vxX +vxX +gMk +gMk +gMk +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +gMk +gMk +gMk +gMk +gMk +gMk +gMk +gMk +gMk +gMk +gMk +gMk +vxX +vxX +vxX +vDa +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +gMk +gMk +gMk +vxX +vxX +vxX +vxX +fYe +fYe +fYe +vxX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(129,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +oID +jVV +jVV +kkx +pvT +srs +upF +dVu +tMV +aOQ +gUK +faK +scg +faK +lXe +aOQ +iXx +dVu +jMy +srs +mxt +hhX +hhX +hhX +hhX +hhX +vxX +vxX +vxX +vxX +vxX +vxX +gMk +gMk +gMk +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +uet +gMk +gMk +gMk +vxX +vxX +vxX +vxX +gMk +gMk +gMk +gMk +gMk +gMk +gMk +gMk +gMk +gMk +gMk +gMk +gMk +gMk +vxX +vxX +vxX +vDa +vDa +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +fYe +fYe +vxX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(130,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +oID +hhX +hhX +kkx +kkx +srs +mCt +riQ +jNg +mbL +and +stj +fEe +xIl +ukO +aOQ +aqT +riQ +hUm +srs +mxt +hhX +hhX +hhX +vxX +vxX +vxX +vxX +vxX +gvF +gvF +gvF +gvF +hgB +gvF +gvF +gvF +gvF +vxX +vxX +vxX +vxX +xUx +uet +vxX +vxX +vxX +vxX +vxX +gMk +nyq +gMk +uQl +gMk +gMk +vxX +vxX +uet +gMk +gMk +gMk +gMk +gMk +gMk +vxX +vxX +vxX +vxX +vxX +gMk +gMk +gMk +vxX +vxX +vxX +vxX +vDa +vxX +vxX +mUQ +vxX +gMk +gMk +gMk +gMk +gMk +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(131,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +oID +hhX +hhX +hhX +kkx +srs +riQ +bNI +wHJ +wHJ +wHJ +phG +wHJ +cbc +wHJ +wHJ +wHJ +riQ +bNI +srs +mxt +hhX +hhX +hhX +vxX +vxX +vxX +gvF +gvF +gvF +bJc +tqD +tqD +tqD +tqD +tqD +gQu +gvF +vxX +bKL +gMk +gMk +rZg +gMk +gMk +vxX +vxX +vxX +vxX +gMk +gMk +gqm +gMk +gMk +gMk +vxX +vxX +gMk +gMk +gMk +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +gMk +gMk +vxX +vxX +woL +woL +cMJ +woL +stz +stz +gMk +gMk +vxX +gMk +gMk +gMk +gMk +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(132,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +oID +hhX +hhX +hhX +mxt +mQE +mlY +mQE +wHJ +hfH +osK +feV +feV +gBx +sLU +cbO +wHJ +eMj +sJT +sJT +mxt +hhX +hhX +hhX +hhX +hhX +fYe +jam +bjb +fft +wny +oAs +gOc +gOc +gOc +nzn +xao +oWg +gMk +fXf +gMk +gMk +gMk +gMk +gMk +fVf +vxX +vxX +vxX +vxX +rBv +gMk +tbp +gMk +gMk +vxX +gMk +gMk +gMk +gMk +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +uet +vxX +vxX +gMk +vxX +vxX +woL +eAk +cMJ +stz +jPq +woL +vxX +vxX +vxX +vxX +vxX +uet +gMk +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +fNW +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(133,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +oID +hhX +hhX +hhX +mQE +mQE +lXJ +bvJ +wHJ +gRA +lmo +sIW +sIW +sIW +lmo +gBx +wHJ +tBg +wAx +sJT +sJT +hhX +hhX +hhX +hhX +fYe +fYe +jam +bFP +moT +wny +gOc +gOc +gOc +gOc +gOc +gOc +gvF +vxX +xUx +gMk +gMk +gMk +gMk +gMk +gMk +vxX +vxX +vxX +vxX +vxX +gMk +gMk +vxX +uet +vxX +mNZ +gMk +gMk +gMk +gMk +vxX +vxX +vxX +vxX +vxX +vxX +ent +gMk +gMk +gMk +gMk +gMk +gMk +rgs +stz +cMJ +fOv +ryb +xKo +ltS +ltS +ltS +ltS +ltS +vxX +gMk +gMk +vxX +vxX +vxX +vxX +vxX +vxX +vxX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(134,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +oID +jVV +jVV +jVV +mQE +hPx +fNk +pYw +wHJ +hfH +sIW +hNC +gQs +hNC +sIW +gBx +wHJ +kBJ +kck +bsX +sJT +hhX +hhX +hhX +hhX +fYe +uif +jam +iBs +moT +wny +gOc +gOc +gOc +gOc +gOc +gOc +gvF +vxX +vxX +uet +gMk +pti +gMk +gMk +gMk +gMk +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +mNZ +mNZ +gMk +gMk +gMk +gMk +mNZ +vxX +vxX +vxX +vxX +vxX +gMk +gMk +gMk +gMk +gMk +vxX +woL +sVT +cMJ +fDR +fDR +xKo +lQL +lQL +lQL +aoy +ltS +mpc +vxX +gMk +vxX +vxX +vxX +vxX +vxX +vxX +vxX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(135,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +oID +hhX +hhX +hhX +mQE +hZO +fGm +udf +tIS +hfH +sIW +uKA +puP +fnO +sIW +vHA +fqi +mwe +dUl +bGg +sJT +vxX +hhX +hhX +hhX +fYe +uif +jam +afF +hbr +bUU +gOc +gOc +gOc +gOc +gOc +gOc +gvF +vxX +vxX +hyM +gMk +cgu +gMk +gMk +gMk +gMk +gMk +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +mNZ +mNZ +mNZ +gMk +gMk +gMk +gMk +vxX +vxX +kxB +kxB +kxB +eOx +eOx +eOx +eOx +kxB +kxB +bkk +rPy +cMJ +msi +ppD +xKo +lQL +lQL +lQL +aoy +lls +mpc +gMk +gMk +vxX +vxX +vxX +vxX +vxX +vxX +vxX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(136,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +oID +hhX +hhX +kkx +mQE +mQE +gwF +eaW +wHJ +dqA +sIW +ciR +ilq +ciR +sIW +dfd +wHJ +rBZ +lPi +meH +sJT +vxX +hhX +hhX +hhX +mNZ +mNZ +gvF +hAx +uQB +wny +gOc +gOc +gOc +gOc +gOc +gOc +gvF +vxX +vxX +vxX +gMk +cgu +yjm +vxX +vxX +gMk +gMk +gMk +vxX +vxX +vxX +vxX +vxX +vxX +vxX +mNZ +mNZ +mNZ +mNZ +gMk +gMk +gMk +vxX +vxX +kxB +hhX +hhX +hhX +iiB +hhX +hhX +hhX +hhX +uJV +eng +eng +fDR +jJv +xKo +lQL +lQL +lQL +pVB +pHr +mpc +wZU +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(137,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +kkx +kkx +vxX +imZ +mQE +fTj +wHJ +lEa +lmo +sIW +sIW +lUF +lmo +xAR +wHJ +tww +ffT +sJT +ogb +vxX +vxX +hhX +fYe +mNZ +mNZ +vxX +vfJ +fhN +cMZ +dpp +dpp +dpp +dpp +cMZ +cMZ +cMZ +cMZ +cMZ +vxX +uet +cgu +vxX +vxX +uet +gMk +qIA +gMk +vxX +vxX +vxX +uKm +vxX +vxX +vxX +mNZ +mNZ +gMk +mNZ +mNZ +gMk +gMk +vxX +vxX +kxB +hhX +xAy +mCN +mCN +xAy +cLf +hhX +uEn +bkk +eng +msi +xKo +xKo +xKo +lQL +lQL +lQL +gQe +mry +cXo +gMk +gMk +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(138,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +kkx +pvT +vxX +vxX +mQE +vNg +kWb +kWb +kWb +kWb +ymg +kWb +kWb +kWb +kWb +aKi +sJT +sJT +vxX +vxX +vxX +hhX +fYe +mNZ +mNZ +vfJ +vfJ +quM +cMZ +noO +vzj +vzj +vzj +oka +nas +bbe +ycq +cMZ +ipx +dVt +cdl +ipx +vxX +vxX +gMk +gMk +gMk +gMk +vxX +vxX +kTV +gMk +vxX +vxX +fJz +gMk +gMk +mNZ +mNZ +gMk +gMk +gMk +xUx +kxB +hhX +xAy +rgX +gVC +xAy +cLf +hhX +uEn +bkk +qwG +msi +eeB +fVI +obx +lQL +lQL +lQL +gQe +mry +mpc +gMk +gMk +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(139,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +vxX +vxX +vxX +mQE +lJv +kWb +lWW +kBh +upw +pRm +kWb +lWW +lWW +kWb +wYj +pdo +sJT +vxX +uif +hhX +hhX +fYe +mNZ +mNZ +vfJ +piE +pmT +cMZ +kvj +twm +aqM +fFq +suO +ukx +hOa +jnw +gKt +gTf +dOg +kqf +ipx +ipx +vxX +gMk +vxX +vxX +vxX +vxX +xUx +gMk +gMk +vxX +vxX +vxX +gMk +gMk +vxX +vxX +gMk +gMk +dtQ +dtQ +eOx +jVV +xAy +kYc +sWT +bdC +fSP +tPb +pKn +uJV +qwG +eeB +klz +xKo +ueC +lQL +lQL +lQL +gQe +mry +mpc +yeS +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(140,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +vxX +vxX +vxX +kWb +kWb +kWb +kWb +kWb +kWb +uUj +kWb +kWb +kWb +kWb +kWb +kWb +kWb +vxX +vxX +hhX +hhX +fYe +mNZ +mNZ +vfJ +qIo +uat +cMZ +pvo +dHa +sXG +bzB +suO +hOa +ukx +xGY +gKt +oGQ +aIX +oSG +tzy +dVt +xCX +gMk +xUx +uet +vxX +vxX +gMk +ceN +gMk +gMk +gMk +vxX +xKx +vxX +vxX +vxX +vxX +gMk +dtQ +gMk +kxB +hhX +xAy +bdR +pbY +xAy +cLf +hhX +uEn +bkk +oJU +eeB +bRU +fVI +obx +lQL +lQL +lQL +mIH +snj +ltS +ltS +ltS +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +hhX +hhX +hhX +hhX +hhX +hhX +oID +oID +oID +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(141,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +vxX +vxX +vxX +kWb +kWb +kWb +iwS +pya +oJW +eWD +oJW +pya +lRk +kWb +kWb +kWb +vxX +vxX +vxX +hhX +hhX +fYe +mNZ +mNZ +vfJ +pZP +raz +cMZ +fAU +rjr +mYN +vzj +suK +nas +nas +vwd +gKt +xNo +suw +fdN +tQI +xwe +xCX +gMk +gMk +gMk +vxX +vxX +vxX +lmn +gMk +vxX +gMk +vxX +vxX +vxX +vxX +gMk +vxX +vxX +dtQ +vxX +kxB +hhX +xAy +mCN +rCv +xAy +cLf +hhX +uEn +bkk +qwG +eeB +xKo +xKo +obx +lQL +lQL +lQL +aoy +lQL +lQL +lQL +ltS +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +hhX +hhX +hhX +hhX +jVV +hhX +hhX +hhX +jVV +jVV +oID +oID +oID +oID +oID +oID +oID +oID +oID +oID +oID +oID +oID +oID +oID +oID +oID +oID +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(142,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +vxX +vxX +kWb +kWb +kWb +qWB +wpr +wpr +pya +eWD +pya +wpr +wpr +qWB +kWb +kWb +kWb +vxX +vxX +hhX +hhX +hhX +mNZ +mNZ +vfJ +vfJ +jmY +cMZ +gKt +dpp +izV +dpp +gKt +dpp +dpp +dpp +gKt +dVp +dRh +fdN +xje +ipx +vxX +gMk +gMk +vxX +vxX +vxX +vxX +xIP +xIP +uKm +elE +vxX +vxX +vxX +vxX +gMk +vkv +vxX +dtQ +vxX +kxB +hhX +cLf +cLf +nbz +cLf +cLf +hhX +hhX +uJV +vSj +eeB +odK +xKo +xKo +lQL +lQL +lQL +aoy +lQL +lQL +lQL +ltS +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +hen +hen +hen +jVV +hhX +hhX +hhX +jVV +hhX +hhX +hhX +hhX +jVV +hhX +hhX +hhX +jVV +hhX +hhX +hhX +hhX +jVV +hhX +hhX +hhX +hhX +oID +hhX +fNW +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(143,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +vxX +vxX +kWb +kWb +kWb +vAB +vAB +vfq +qpc +gxx +eWD +iLj +vAB +vAB +kWb +kWb +kWb +vxX +vxX +hhX +hhX +hhX +fYe +uif +fYe +lJq +xeJ +vRP +bWi +bWi +iHH +nmj +wPX +dfM +xtZ +dfM +mzB +dVp +vqN +mXJ +iJT +ipx +uKm +mWS +gMk +ent +vxX +gMk +gMk +gMk +uet +cPE +gMk +vxX +vxX +gMk +gMk +gMk +xUx +unk +fNv +xKo +xKo +bkk +bkk +uJV +xOK +uJV +uJV +bkk +bkk +bkk +vSj +mEQ +eeB +tnL +xKo +lQL +lQL +lQL +aoy +lQL +lQL +lQL +aWD +aWD +aWD +aWD +aWD +aWD +aWD +uYG +uYG +vxX +vxX +vxX +vxX +uYG +uYG +uYG +uYG +uYG +jVV +hhX +hhX +hhX +jVV +hhX +hhX +hhX +hhX +vUj +hhX +hhX +hhX +vUj +hhX +hhX +hhX +hhX +jVV +hhX +hhX +hhX +hhX +oID +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(144,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +unk +vxX +kWb +kWb +kWb +vAB +vAB +qHi +kWb +kWb +kWb +lwr +vAB +vAB +kWb +kWb +kWb +vxX +vxX +hhX +hhX +hhX +fYe +fYe +fYe +lJq +raz +ixU +ixU +tOU +rcx +eua +dsi +vnX +bNp +iHH +iHH +sti +fFg +fFg +dhR +ipx +vxX +uet +gMk +vxX +vxX +vxX +vxX +gMk +xUx +vxX +dsF +gMk +vxX +vxX +gMk +gMk +gMk +gMk +dtQ +xKo +pyO +pyO +xKo +pnK +vSj +eeB +lxx +xKo +vSj +qwG +oJU +qOz +eeB +iNU +mmh +mmh +oEB +oEB +mmh +mmh +dUi +dUi +aWD +tCH +aWD +tCH +aWD +tCH +aWD +bvT +uYG +uYG +uYG +uYG +uYG +uYG +jtw +cKc +wJN +cEG +fYe +fYe +hhX +fYe +jVV +hhX +hhX +hhX +vUj +mml +vUj +hhX +vUj +mml +vUj +hhX +hhX +hhX +jVV +hhX +hhX +hhX +hhX +oID +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(145,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +uVI +pFE +kWb +kWb +vVc +qDl +qDl +kdR +kWb +nzT +kWb +mjq +qDl +qDl +xRu +kWb +kWb +vxX +vxX +hhX +hhX +fYe +fYe +mNZ +fYe +lJq +raz +eUj +ixU +tPr +vRA +oXa +gak +bdz +pIp +bdz +frG +dVp +dVt +dVt +ipx +ipx +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +gMk +gMk +xUx +vxX +vxX +vxX +vxX +gMk +gMk +dtQ +xKo +pyO +pyO +xKo +kao +tpj +nNK +lYA +xKo +vSj +tpz +eyg +eyg +eyg +eyg +mmh +ejx +nlI +nlI +miL +oEB +kdp +kze +aWD +jpD +aWD +kKN +aWD +jpD +aWD +lFT +uYG +wZm +xsG +jJW +cKc +dzv +nJL +cKc +tNE +cEG +cEG +uYG +vxX +vxX +jVV +jVV +jGa +jVV +vUj +mml +vUj +jVV +vUj +mml +vUj +jVV +jVV +jVV +jGa +jVV +jVV +jVV +jVV +oID +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(146,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +unk +vxX +kWb +kWb +kWb +vAB +vAB +qHi +kWb +oNM +kWb +lwr +vAB +vAB +kWb +kWb +kWb +vxX +vxX +hhX +hhX +fYe +mNZ +mNZ +fYe +lJq +raz +ixU +ixU +vRA +vRA +oXa +vjv +vRA +vRA +vRA +vRA +vRA +vRA +vRA +ixU +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +uet +vxX +vxX +vxX +vxX +xKo +xKo +xKo +feU +xKo +pyO +pyO +xKo +nmD +tpj +abb +hHL +xKo +vSj +eyg +eyg +isT +isT +isT +mmh +dmj +rTH +ckK +xbi +pQt +kdp +lcv +aWD +ncV +aWD +ncV +aWD +ncV +aWD +xZj +uYG +iwu +kwc +lfC +cKc +iVJ +cKc +cKc +tNE +tNE +dYZ +uYG +vxX +vxX +jVV +hhX +hhX +hhX +vUj +mml +vUj +hhX +vUj +mml +vUj +hhX +hhX +hhX +jVV +hhX +hhX +hhX +hhX +oID +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(147,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +vxX +vxX +kWb +kWb +kWb +vAB +vAB +mLG +abx +tlW +gts +vgq +vAB +vAB +kWb +kWb +kWb +vxX +hhX +hhX +hhX +fYe +mNZ +vfJ +evr +vfJ +raz +ixU +eBD +omL +wME +acY +aqa +vRA +vRA +vRA +vRA +vRA +vRA +vRA +ixU +vxX +vxX +vxX +kxB +uKm +uKm +uKm +uKm +uKm +uKm +vxX +gMk +vxX +vxX +vxX +vxX +xKo +rhn +lWF +bzX +xKo +adK +adK +xKo +xKo +vSj +mEQ +xKo +xKo +jGe +eyg +isT +isT +wfW +isT +mmh +sEv +kol +bbx +saH +oEB +kdp +kdp +iQJ +vUO +dFB +vUO +xnl +nfP +ixc +cvT +cKc +dsJ +jhG +jhG +cKc +dzv +ndu +ndu +xpD +bco +bco +bco +bco +jdd +jVV +hhX +hhX +hhX +vUj +mml +vUj +hhX +vUj +mml +vUj +hhX +hhX +vUj +vUj +vUj +hhX +hhX +hhX +oID +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(148,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +vxX +vxX +kWb +kWb +kWb +vAB +vAB +vAB +vOH +qDl +lwr +vAB +vAB +vAB +kWb +kWb +kWb +fYe +hhX +hhX +hhX +fYe +mNZ +vfJ +riv +vpK +raz +ixU +mil +nmj +iJS +fTN +gTA +vRA +vRA +vRA +vRA +vRA +vRA +vRA +jxF +jxF +jxF +jxF +jxF +iHO +iHO +jZY +uNK +vxX +lzE +vxX +gMk +gMk +uet +vxX +vxX +xKo +ljN +eqC +qic +xKo +wyl +cca +joo +joo +qwG +qwG +xQS +vSj +vSj +eyg +pSM +pSM +vAm +pSM +mmh +oEB +sYB +oEB +oEB +mmh +iiM +sMo +aWD +ybz +tTE +anJ +nfP +ybP +aWD +jQt +cKc +cKc +gMH +cKc +cKc +tNE +tNE +wlF +atK +bco +ePC +unC +iHC +jdd +jdd +jdd +hhX +hhX +hhX +mml +hhX +hhX +hhX +mml +hhX +hhX +hhX +rgF +rgF +mml +vUj +hhX +hhX +oID +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(149,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +vxX +kWb +kWb +kWb +kWb +kWb +qWB +oZl +xwz +iIp +qWB +kWb +kWb +kWb +kWb +kWb +sJz +hhX +hhX +hhX +fYe +mNZ +vfJ +vfJ +vfJ +jmY +lAc +lAc +kuX +nIu +frt +gYY +vRA +vRA +vRA +vRA +vRA +vRA +vRA +jxF +dPN +gqO +aYu +jxF +iHO +cVW +uKm +uKm +uKm +uKm +vxX +vxX +gMk +gMk +vxX +vxX +xKo +fEQ +eeB +qic +xKo +joo +iZa +iZa +iZa +iZa +iZa +fcK +iZa +iZa +eyg +isT +isT +rRt +isT +dUi +dmp +rls +vos +tFW +tFW +tFW +rhK +aWD +ybz +qXm +tfC +nfP +ybP +aWD +ibq +uIM +cRT +uIM +uIM +uIM +cRT +uIM +uIM +uIM +bhB +oWv +eoC +fZz +ukl +lva +iFb +qzZ +qzZ +uJc +igG +mtH +qzZ +qzZ +qzZ +igG +mtH +jXv +aDF +uJc +mml +mml +eLU +jVV +oID +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(150,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +vxX +kWb +kWb +kWb +kWb +kWb +kWb +kWb +kWb +kWb +kWb +kWb +kWb +kWb +fYe +hhX +hhX +hhX +hhX +fYe +mNZ +mNZ +fYe +lJq +raz +lAc +bPx +tsy +jCT +rin +sIY +vRA +vRA +vRA +vRA +vRA +vRA +vRA +jxF +jZg +ndv +fBw +jxF +lfo +hER +twx +twx +twx +twx +vxX +vxX +gMk +gMk +vxX +vxX +xKo +xKo +xKo +qic +xKo +joo +iZa +ost +bMG +vXG +jjX +ugo +uvH +uhW +eyg +eyg +isT +isT +isT +dUi +fXV +tBh +jxd +iOP +vEZ +nPM +xFd +aWD +aWD +mwY +aWD +grw +aWD +aWD +dDK +nvu +kKR +cKc +cKc +cKc +cKc +cKc +cKc +gBy +bco +xOo +eVq +lva +jdd +jdd +jdd +hhX +hhX +hhX +aDF +hhX +hhX +hhX +mml +hhX +hhX +hhX +rgF +rgF +mml +vUj +hhX +hhX +oID +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(151,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +vxX +vxX +kWb +kWb +kWb +kWb +kWb +kWb +kWb +kWb +kWb +kWb +kWb +hhX +hhX +hhX +hhX +hhX +hhX +fYe +fYe +uif +fYe +lJq +raz +lAc +dES +fuo +iXv +iXv +mPl +vRA +vRA +vRA +vRA +vRA +vRA +vRA +sPD +uWy +oKr +tft +jxF +lfo +erX +twx +twx +twx +twx +vxX +vxX +gMk +gMk +vxX +vxX +xKo +tmR +xKo +oxB +xKo +joo +iZa +ksg +ktL +ktL +dKI +anN +fRB +opq +iZa +dUi +dUi +dUi +dUi +dUi +lyN +ncM +dbl +hmz +vHa +aWD +aWD +aWD +ewa +gCT +kgb +gaI +ued +aWD +aWD +aWD +fRF +smh +tHE +fOP +xlv +anf +cKc +nCu +bco +bco +bco +bco +jdd +jVV +jVV +hhX +hhX +hhX +hhX +hhX +hhX +vUj +mml +vUj +hhX +hhX +vUj +vUj +vUj +hhX +hhX +hhX +oID +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(152,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +vxX +vxX +vxX +vxX +kWb +kWb +kWb +kWb +kWb +vxX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +fYe +fYe +fYe +fYe +lJq +wWE +lAc +aVq +iXv +iXv +iXv +qVD +vRA +vRA +vRA +vRA +vRA +vRA +vRA +sPD +gup +gZE +qkw +jxF +lfo +dKH +twx +twx +twx +twx +vxX +uKm +aXH +gMk +xUx +vxX +xKo +nqu +ikD +vFM +uqr +joo +iZa +mxL +xTP +jgs +jws +anN +uPR +uWX +iZa +lyN +lyN +lyN +lyN +lyN +lyN +ncM +msm +aWD +aWD +aWD +hux +eoO +ugV +ugV +lke +sNJ +ugV +etr +ktG +aWD +aWD +aWD +iYb +dBF +ygx +nUy +uYG +uYG +uYG +vxX +vxX +vxX +vxX +vxX +jVV +pnS +hhX +dAn +hhX +eNk +hhX +vUj +mml +vUj +hhX +hhX +hhX +jVV +hhX +hhX +hhX +hhX +oID +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(153,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +vxX +vxX +hhX +hhX +jVV +iEq +jVV +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +fYe +uif +fYe +fYe +lJq +jmY +lAc +gOB +yiW +gFg +pQz +itV +lgK +dDI +vRA +vRA +vRA +vRA +vRA +sPD +vfM +jKg +dYS +jxF +qod +mxq +twx +twx +twx +twx +uKm +vxX +gMk +vxX +vxX +vxX +xKo +xKo +xKo +xKo +xKo +lVx +iZa +rAZ +glC +ktL +jvn +anN +anN +vNd +iZa +dRs +lyN +lyN +lyN +lyN +lyN +fqs +tCb +fjt +gij +cVn +thI +pFF +pFF +pFF +iwk +pzC +eUW +eUW +nzi +dkt +iWn +aWD +uYG +uYG +uYG +uYG +uYG +hhX +hhX +hhX +vxX +vxX +vxX +vxX +jVV +hhX +vUj +rgF +vUj +hhX +jVV +vUj +mml +vUj +jVV +jVV +jVV +jGa +jVV +jVV +jVV +jVV +oID +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(154,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +jVV +hhX +hhX +hhX +jVV +hhX +jVV +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +fYe +fYe +fYe +fYe +fYe +lJq +raz +lAc +aYS +qfu +nje +jXb +aLe +cCb +dwV +vRA +vRA +vRA +vRA +vRA +sPD +oZT +jKg +tjB +jxF +vjZ +mxq +twx +twx +twx +twx +uKm +xwA +gMk +vxX +vxX +vxX +xKo +dor +lVx +dDG +lVx +cie +iZa +cMW +tZp +aaY +aaY +aaY +aaY +qHl +iZa +pSb +qJs +jHn +qTe +kll +qTe +aqu +nvw +aWD +wCG +alv +guO +rhS +kyE +rhS +bWl +rhS +alv +rhS +nHr +lYp +pah +aWD +eNj +uYG +hhX +hhX +hhX +hhX +hhX +hhX +hhX +vxX +vxX +hhX +jVV +hhX +vUj +rgF +vUj +hhX +hhX +vUj +mml +vUj +hhX +hhX +hhX +jVV +hhX +hhX +hhX +hhX +oID +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(155,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +oID +hhX +hhX +hhX +jVV +hhX +jVV +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +fYe +fYe +fYe +fYe +lJq +raz +lAc +qvP +tOO +jXb +sMl +amn +jxa +jxa +jxa +jxa +jxa +oVj +prh +jxF +sPD +kaa +jxF +jxF +pnQ +mxq +mxq +mxq +mxq +mxq +uKm +gMk +uet +vxX +vxX +vxX +xKo +lVx +fTX +fTX +fTX +fTX +iZa +ewM +ewM +ewM +ewM +ewM +ewM +hqj +iZa +iZa +uyj +dUi +dUi +heO +dUi +aWD +aWD +aWD +vzC +aWD +mog +mog +fFb +ybD +cSd +ybD +juV +mog +mog +aWD +vzC +aWD +wlV +aWD +vxX +vxX +mUQ +rGg +rGg +mUQ +vxX +vxX +hhX +hhX +jVV +hhX +vUj +mml +rMz +hhX +hhX +hhX +vUj +hhX +hhX +hhX +hhX +jVV +hhX +hhX +hhX +hhX +oID +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(156,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +fNW +hhX +hhX +oID +hhX +hhX +kDf +kDf +joM +kDf +kDf +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +fYe +fYe +uif +fYe +lJq +raz +lAc +lAc +uUx +nhf +guk +jxa +jxa +xfK +mHf +rHF +jxa +kri +uWt +kdg +lJC +xVg +ixU +dtQ +dtQ +gMk +vxX +vxX +vxX +vxX +vxX +xUx +vxX +vxX +vxX +ent +cIN +lVx +fTX +axv +kHU +kHU +rCT +kHU +kHU +kHU +kHU +kHU +kHU +ouG +fst +dBp +bPH +dUi +lFJ +oow +lFJ +aWD +mRU +sCp +sCp +aWD +mog +iNj +wtH +wtH +jNL +wtH +wtH +iNj +mog +aWD +sCp +sCp +sCp +aWD +vxX +vxX +vxX +tOG +ufA +vxX +vxX +uif +hhX +hhX +sXI +hhX +rMz +mml +rMz +hhX +hhX +hhX +jVV +hhX +hhX +hhX +hhX +jVV +hhX +hhX +hhX +hhX +oID +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(157,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +oID +hhX +hhX +kDf +kDf +kDf +kDf +kDf +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +uif +fYe +fYe +fYe +lJq +xeJ +jAB +lAc +lAc +lno +lno +lno +afJ +jim +jim +mxn +jxa +lUj +kFl +szD +sFa +nmc +ixU +dtQ +gMk +gMk +gMk +vxX +gMk +vxX +uKm +aXH +lgL +rQP +vxX +gMk +vWx +dor +fTX +hzg +mhh +mhh +mhh +mhh +mhh +mhh +mhh +mhh +mhh +fsu +fze +lMj +ylQ +dUi +oow +kQz +oow +aWD +rQb +mog +sCp +aWD +aWD +wtH +wtH +rsw +vEq +rkZ +wtH +wtH +aWD +aWD +sCp +mog +mog +aWD +vxX +vxX +vxX +uif +fYe +vxX +vxX +hhX +hhX +hhX +sXI +sXI +sXI +vUj +sXI +sXI +sXI +sXI +oID +oID +oID +oID +oID +oID +oID +oID +oID +oID +oID +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(158,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +oID +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +fYe +fYe +fYe +mNZ +vfJ +raz +jAB +vem +lno +rrZ +oQW +kLw +sRl +xCq +xZU +gZA +jxa +kri +kFl +szD +sFa +ppp +ixU +raZ +szD +kdg +sqL +sqL +rlw +rlw +rlw +uet +gnh +msw +pfg +gMk +cIN +lVx +fTX +hzg +mhh +mhh +mhh +mhh +mhh +mhh +mhh +mhh +mhh +fsu +nmr +ixY +mhA +dUi +lFJ +oow +lFJ +aWD +mRU +mog +sCp +sCp +sCp +wje +anX +mGP +jjI +mee +uqM +wje +sCp +sCp +sCp +mog +mog +aWD +vxX +vxX +vxX +fYe +fYe +vxX +mUQ +jVV +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(159,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +oID +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +fYe +fYe +vfJ +vfJ +raz +vfJ +vfJ +lno +krg +oQW +bjp +fmK +fwM +pDd +jxa +jxa +gOs +kIY +kdg +sFa +kzC +jqk +qQi +uMT +rQO +uXP +uXP +rsQ +osr +rlw +gMk +ikc +gMk +xKo +xKo +xKo +bjy +fTX +hzg +mhh +mhh +mhh +mhh +mhh +mhh +mhh +mhh +mhh +fsu +shb +ixY +iEB +dUi +dUi +dUi +aWD +aWD +lww +mog +mog +mog +sCp +wje +uca +eVA +mYb +oZC +aKj +wje +sCp +mog +mog +mog +cYw +aWD +vxX +vxX +fYe +fYe +fYe +fYe +anx +jVV +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(160,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +oID +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +mNZ +mNZ +hhX +hhX +hhX +hhX +hhX +hhX +hhX +fYe +fYe +vfJ +hXK +raz +vfJ +plX +lno +otm +oQW +kLw +tiY +ehb +gzd +jxa +jWG +tyu +sBr +rGu +qus +vNM +ixU +vAs +szD +kdg +sqL +sqL +rlw +khP +rlw +vxX +vxX +vxX +xKo +wlR +lNe +lVx +fTX +hzg +mhh +mhh +mhh +mhh +mhh +mhh +mhh +mhh +mhh +qMX +xmH +ixY +wDP +xVk +lfR +iZa +aWF +elz +mog +mog +mog +mog +sCp +wje +cSC +jPb +iBH +eVA +qqh +wje +sCp +mog +mog +mog +mog +aWD +vxX +vxX +vxX +fYe +vxX +vxX +mUQ +eCF +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(161,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +oID +jVV +jVV +jVV +jVV +jVV +jVV +mNZ +mNZ +mNZ +mNZ +mNZ +hhX +hhX +hhX +hhX +hhX +hhX +fYe +uif +lJq +imx +raz +occ +fMz +lno +gSY +oQW +ddZ +nXL +nXL +rnJ +oMJ +cDQ +mtO +sAy +wiA +eLu +oGk +ixU +gMk +gMk +gMk +vxX +vxX +sqL +uoY +sqL +vxX +vxX +vxX +xKo +jBG +oEN +aCL +fTX +hzg +mhh +mhh +mhh +mhh +mhh +mhh +mhh +mhh +mhh +csH +nmr +nZw +rsd +rlU +dTz +iZa +pFZ +nKO +mog +mog +mog +mog +sCp +wje +vno +lAE +afp +wsW +hYP +wje +sCp +mog +mog +mog +mog +aWD +vxX +vxX +vxX +fYe +vxX +vxX +vxX +vxX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(162,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +oID +hhX +hhX +hhX +hhX +hhX +hhX +fYe +mNZ +mNZ +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +fYe +fYe +lJq +ijC +raz +vfJ +vfJ +lno +lno +mSY +kLw +nXL +fBO +naj +jxa +iZW +xaz +qtx +qtx +xbC +cIE +ixU +gMk +vxX +gMk +vxX +vxX +sqL +uoY +sqL +gMk +vxX +vPt +dsP +iNv +qcU +tpz +fTX +hzg +mhh +mhh +mhh +mhh +mhh +mhh +mhh +mhh +mhh +rry +rZX +kjv +fwV +vkN +qdV +iZa +qMw +aJz +mog +mog +mog +mog +sCp +wje +wtH +kjR +buk +ygJ +wtH +wje +sCp +mog +mog +mog +mog +aWD +vxX +vxX +fYe +fYe +fYe +vxX +vxX +vxX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(163,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +oID +hhX +hhX +hhX +hhX +hhX +hhX +hhX +uif +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +fYe +fYe +fYe +vfJ +ofL +raz +uba +nke +cYs +lno +lno +lno +lWd +jxa +jxa +jxa +fta +ukw +hEi +lsx +idr +lsx +hEi +vxX +vxX +iOE +vxX +vxX +sqL +uoY +gbP +fWJ +vPt +vPt +wPU +uab +qhG +qhG +qhG +hcU +qhG +qhG +qhG +iZa +ovD +ovD +ovD +ovD +ovD +iZa +lMj +ksR +ksR +kIx +nAa +iZa +aWD +aWD +uFC +uFC +tel +tel +tel +tel +uFC +itk +koT +itk +uFC +tel +tel +tel +tel +tel +uFC +uFC +vxX +vxX +fYe +vxX +fYe +vxX +vxX +fYe +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(164,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +fYe +fYe +fYe +vfJ +vfJ +jmY +jmY +uba +agO +vfJ +hHW +uba +raz +nzk +fpY +hEi +hEi +hEi +hEi +vGZ +cHn +sAN +hEi +hEi +vxX +vxX +vxX +vxX +sqL +uoY +sqL +mRI +dsP +gXh +ohk +uab +qhG +awM +eqX +efQ +drK +unH +sKn +ovD +btZ +djW +oas +muw +dLW +iZa +dhH +pMG +pMG +grb +peW +iZa +vxX +vxX +uFC +xlG +tGb +tGb +tGb +tGb +eyp +tGb +wie +tGb +eyp +tGb +tGb +tGb +tGb +tGb +xlG +uFC +vxX +vxX +fYe +vxX +fYe +vxX +vxX +fYe +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(165,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +mNZ +mNZ +mNZ +fYe +fYe +fYe +vfJ +vfJ +jmY +fXD +jmY +wWE +jmY +raz +raz +nzk +fpY +clQ +ssg +vtN +ylR +pPx +akB +kFP +uaY +iFN +iFN +iFN +vxX +vxX +sqL +uoY +sqL +uiO +dsP +gXh +ohk +uab +gcA +cuz +qpt +rbw +rbw +cZf +bDk +ovD +mio +jgs +nep +pMG +pCF +iZa +kDI +xIh +xIh +rsd +cti +iZa +vxX +vxX +uFC +xlG +tGb +tGb +tGb +tGb +tGb +tGb +haC +igE +tGb +tGb +tGb +tGb +tGb +tGb +xlG +uFC +vxX +vxX +fYe +vxX +fYe +vxX +vxX +fYe +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(166,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +fYe +fYe +uif +mNZ +mNZ +mNZ +fYe +fYe +fYe +uif +vfJ +vfJ +vfJ +vfJ +vfJ +iSz +uba +vfJ +nzk +qmI +wYI +elT +elT +elT +mod +jdW +fGG +iFN +iFN +ekR +iFN +iFN +vxX +rlw +shu +rlw +vxX +dsP +nQs +ohk +ohk +mPW +uXe +fUL +kwh +ylm +vEE +dSN +iZa +cvX +uuq +rlH +uIj +jgs +adP +aaY +aaY +aaY +aaY +cCQ +iZa +vxX +vxX +uFC +xlG +tGb +tGb +tGb +tGb +tGb +tGb +tGb +jFP +tGb +tGb +tGb +tGb +tGb +tGb +xlG +uFC +vxX +vxX +fYe +tOG +fYe +vxX +vxX +uif +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(167,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +fNW +hhX +hhX +hhX +fYe +uif +mNZ +mNZ +mNZ +mNZ +mNZ +fYe +uif +fYe +mNZ +mNZ +mNZ +mNZ +vfJ +vmk +uba +pBN +nzk +hEi +hEi +wFI +mmU +ibE +wts +oFp +oFp +tcx +qJN +uHQ +szk +iFN +vxX +sqL +uoY +sqL +vxX +vPt +alu +ohk +jMN +qhG +lwZ +diZ +fvq +psi +smn +nUS +qhG +sqA +kUX +mRu +mRu +mRu +kUX +mRu +mRu +mRu +mRu +mRu +kUX +vxX +vxX +uFC +xlG +tGb +tGb +tGb +tGb +tGb +sdW +ohz +weB +ohz +aXg +tGb +tGb +tGb +tGb +xlG +uFC +vxX +uKm +uKm +iDu +uKm +uKm +vxX +fYe +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(168,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +fYe +fYe +mNZ +mNZ +mNZ +mNZ +mNZ +fYe +fYe +fYe +mNZ +mNZ +mNZ +mNZ +vfJ +xrt +wtI +vfJ +vfJ +hEi +myW +myW +fsZ +jfB +sab +sab +jzM +iFN +kHf +xkL +uSX +iFN +vxX +sqL +uoY +sqL +vxX +vPt +vPt +hFa +tUc +qhG +stP +ipu +qhG +evO +sIQ +usm +qhG +ydX +hrS +vWh +eES +eES +eES +eES +eES +eES +eES +vWh +kUX +vxX +vxX +uFC +xlG +tGb +tGb +tGb +tGb +tGb +lKC +jer +rJz +psM +hGV +tGb +tGb +tGb +tGb +xlG +uFC +vxX +vxX +iJm +iJm +iJm +uKm +vxX +fYe +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(169,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +fYe +fYe +mNZ +mNZ +mNZ +mNZ +mNZ +fYe +fYe +fYe +mNZ +mNZ +mNZ +mNZ +vfJ +vfJ +bfp +vfJ +mNZ +hEi +mlm +rsI +gmH +iVp +sab +sab +sdn +iFN +aXl +fyJ +aXl +iFN +vxX +sqL +uoY +sqL +vxX +vxX +vxX +dsP +vPt +vPt +stP +tNK +vkp +qgD +smn +rbw +btj +dVW +sNc +vWh +eES +eES +eES +eES +eES +eES +eES +vWh +kUX +vxX +vxX +uFC +xlG +tGb +tGb +tGb +sdW +ohz +iTA +rJz +rJz +rJz +btJ +ohz +aXg +tGb +tGb +xlG +uFC +vxX +fYe +fYe +iJm +iJm +uKm +uif +fYe +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(170,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +fYe +fYe +mNZ +mNZ +mNZ +mNZ +mNZ +fYe +fYe +mvG +mNZ +mNZ +mNZ +mNZ +mNZ +vfJ +lVB +vfJ +mNZ +hEi +hUH +dfk +gmH +rXS +tOL +fPv +iAM +iFN +mZn +oND +iem +iFN +vxX +sqL +uoY +sqL +gMk +vxX +vxX +vxX +vxX +vxX +qhG +pql +qhG +qhG +sjR +xmZ +qhG +qhG +qhG +vWh +eES +eES +eES +eES +eES +eES +eES +vWh +kUX +vxX +vxX +uFC +pFg +gsg +gsg +gsg +hgl +nPW +rJz +nKp +rGr +nKp +rJz +nPW +hGV +tGb +tGb +xlG +uFC +vxX +fYe +fYe +fYe +iJm +uKm +vxX +fYe +hhX +hhX +hhX +fNW +fNW +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(171,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +fYe +fYe +fYe +fYe +mNZ +mNZ +uif +fYe +fYe +fYe +mNZ +mNZ +mNZ +mNZ +mNZ +mNZ +mNZ +mNZ +mNZ +hEi +hEi +hEi +hEi +hEi +hEi +hEi +lVy +iFN +rEv +vjQ +evN +iFN +vxX +sqL +uoY +sqL +gMk +vxX +vxX +vxX +vxX +fYe +vnb +jCm +pbA +szi +smn +keJ +keJ +qdl +qhG +vWh +eES +eES +eES +eES +eES +eES +eES +mKJ +kUX +fYe +vxX +uFC +bMb +xlG +xlG +xlG +nPW +auj +rJz +nKp +gHc +nKp +rJz +psM +hGV +tGb +tGb +xgN +uFC +vxX +vxX +fYe +vxX +vxX +vxX +vxX +fYe +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(172,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +fYe +fYe +fYe +fYe +fYe +fYe +fYe +fYe +fYe +fYe +uif +mNZ +mNZ +mNZ +mNZ +mNZ +mNZ +mNZ +mNZ +ivx +ivx +ivx +ivx +wkG +nIQ +iFN +iFN +iFN +iFN +iFN +vxX +eIO +ehY +rlw +sqL +sqL +sqL +sqL +iSD +hen +vnb +asp +elX +szi +stS +bDk +bqz +tXf +qhG +vWh +eES +eES +eES +eES +eES +eES +eES +vWh +kUX +fYe +fYe +uFC +hvl +bWv +bWv +bWv +pdS +nPW +nPW +nKp +nKp +nKp +nPW +nPW +hGV +tGb +tGb +xlG +uFC +vxX +vxX +vxX +vxX +hen +vxX +vxX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(173,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +mvG +hhX +hhX +uif +uif +fYe +fYe +fYe +fYe +fYe +fYe +fYe +mNZ +mNZ +mNZ +mNZ +mNZ +mNZ +mNZ +mNZ +ivx +moe +wkG +wkG +wkG +sar +moe +vxX +vxX +vxX +vxX +vxX +rlw +wvS +xic +uXP +uXP +iTF +mHn +sqL +fYe +qhG +bjc +qhG +ylS +mra +rhi +bDk +eju +qhG +vWh +eES +eES +eES +eES +eES +eES +eES +vWh +kUX +fYe +fYe +uFC +xlG +tGb +tGb +tGb +mJO +uDp +uDp +uDp +uDp +uDp +uDp +uDp +tXc +tGb +tGb +xlG +uFC +vxX +hen +hen +hen +hen +vxX +vxX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(174,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +mNZ +mNZ +uif +fYe +hhX +hhX +hhX +hhX +fYe +fYe +fYe +fYe +fYe +hhX +fYe +fYe +fYe +mNZ +mNZ +mNZ +mNZ +mNZ +mNZ +mNZ +mNZ +gEA +wkG +jYT +jYT +jYT +rIJ +moe +vxX +vxX +vxX +vxX +hhX +rlw +sqL +rlw +sqL +sqL +rlw +uoY +sqL +fYe +qhG +gni +tNh +efQ +vwh +nUS +bDk +eJi +qhG +vWh +eES +eES +eES +eES +eES +eES +eES +mkX +kUX +hen +hen +uFC +xlG +tGb +tGb +tGb +tGb +tGb +tGb +tGb +tGb +tGb +tGb +tGb +tGb +tGb +tGb +xlG +uFC +hen +hen +hen +hen +hen +vxX +vxX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(175,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +uif +mNZ +mNZ +fYe +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +fYe +fYe +mNZ +mNZ +mNZ +mNZ +mNZ +mNZ +mNZ +ivx +ivx +wkG +jYT +wkG +wkG +wkG +moe +vxX +vxX +vxX +hhX +hhX +jVV +hhX +hhX +hhX +hhX +sqL +uoY +sqL +fYe +qhG +jDM +qhG +wYb +ofx +tEu +bDk +eJi +qhG +vWh +vWh +vWh +vWh +vWh +vWh +vWh +jAE +hRE +kUX +hen +hen +uFC +xlG +tGb +tGb +tGb +tGb +tGb +tGb +tGb +tGb +tGb +tGb +tGb +tGb +tGb +tGb +xlG +uFC +hen +hen +hen +hen +hen +kxB +vxX +fYe +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(176,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +fYe +fYe +mNZ +fYe +hhX +hhX +hhX +hhX +hhX +hhX +hhX +fYe +mNZ +mNZ +fYe +fYe +fYe +fYe +uif +mNZ +mNZ +mNZ +mNZ +mNZ +ivx +ivx +wkG +jYT +wkG +ivx +ivx +vxX +vxX +vxX +hhX +hhX +hhX +jVV +hhX +hhX +hhX +hhX +sqL +khP +iSD +uVI +qhG +cxz +qhG +qhG +llW +llW +llW +feQ +qhG +kUX +kUX +kUX +kUX +kUX +kUX +kUX +kUX +kUX +kUX +hen +fYe +uFC +xlG +xlG +xlG +xlG +xlG +xlG +xlG +xlG +iVY +xlG +xlG +xlG +xlG +xlG +xlG +xlG +uFC +hen +hen +hen +hen +hen +vxX +vxX +fYe +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(177,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +fYe +uif +mNZ +mNZ +fYe +hen +hen +fYe +mNZ +mNZ +mNZ +mNZ +mNZ +lhc +rGg +wkG +mcv +moe +rGg +rGg +fqD +vxX +vxX +hhX +hhX +hhX +jVV +hhX +hhX +hhX +hhX +sqL +uoY +sqL +fYe +fYe +fYe +fYe +fYe +fYe +tAo +vbd +vbd +fYe +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +fYe +vxX +uFC +uFC +uFC +uFC +uFC +uFC +uFC +uFC +uFC +uFC +uFC +uFC +uFC +uFC +uFC +uFC +uFC +uFC +hen +hen +hen +hen +hen +vxX +vxX +fYe +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(178,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +fYe +fYe +fYe +fYe +hen +hen +hen +mNZ +mNZ +mNZ +mNZ +mNZ +mNZ +uVI +moe +pFy +moe +hhX +hhX +hhX +jVV +jVV +jVV +jVV +jVV +jVV +hhX +hhX +hhX +hhX +sqL +uoY +sqL +fYe +fYe +fYe +fYe +fYe +tAo +uLR +avQ +uLR +tAo +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +fYe +vxX +vxX +hhX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +hen +hen +hen +hen +hen +vxX +fYe +uif +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(179,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +mNZ +mNZ +mNZ +fYe +hen +hen +hen +umg +hhX +jVV +hhX +hhX +hhX +hhX +fDj +jYT +fDj +hhX +hhX +hhX +hhX +jVV +hhX +hhX +hhX +jVV +hhX +hhX +hhX +hhX +sqL +uoY +sqL +fYe +fYe +fYe +fYe +fYe +fYe +fYe +fYe +uLR +fYe +fYe +vxX +vxX +vxX +vxX +hhX +hhX +vxX +vxX +vxX +fYe +vxX +vxX +hhX +hhX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +hen +hen +hen +hen +hen +vxX +fYe +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(180,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hen +hen +hen +hhX +hhX +jVV +hhX +hhX +hhX +fDj +moe +wtf +moe +fDj +hhX +hhX +hhX +jVV +hhX +hhX +hhX +jVV +hhX +hhX +hhX +hhX +sqL +sOS +rlw +uVI +uVI +mUQ +vxX +vxX +vxX +vxX +vxX +mUQ +uVI +uVI +mUQ +hhX +hhX +hhX +hhX +hhX +vxX +vxX +fYe +fYe +vxX +vxX +hhX +hhX +hhX +vxX +vxX +vxX +vxX +gMk +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +hen +hen +hen +hen +hen +hen +vxX +fYe +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(181,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hen +hen +hen +hhX +hhX +uOY +jVV +jVV +fDj +fDj +vbn +jYT +bwf +fDj +fDj +jVV +jVV +uOY +hhX +hhX +hhX +jVV +hhX +hhX +hhX +hhX +sqL +uoY +sqL +fYe +fYe +vxX +vxX +vxX +vxX +vxX +vxX +vxX +fYe +fYe +fYe +hhX +hhX +hhX +hhX +hhX +fYe +fYe +fYe +fYe +vxX +hhX +hhX +hhX +hhX +vxX +vxX +vxX +vxX +gMk +gMk +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +hen +hen +hen +hen +vxX +vxX +fYe +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(182,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +fNW +hhX +jVV +hhX +hhX +fDj +wou +qSt +jYT +tuT +bRD +fDj +hhX +hhX +jVV +hhX +hhX +hhX +jVV +hhX +hhX +hhX +hhX +sqL +uoY +sqL +hhX +hhX +jVV +hhX +hhX +vxX +hhX +vxX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +fYe +fYe +hhX +bZr +hhX +hhX +hhX +hhX +vxX +vxX +vxX +vxX +gMk +xKx +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +hen +hen +vxX +vxX +uif +fYe +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(183,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +nQw +hhX +hhX +hhX +jVV +hhX +hhX +fDj +weK +qSt +gBg +hQq +fKb +fDj +hhX +hhX +jVV +hhX +hhX +hhX +jVV +hhX +hhX +hhX +hhX +sqL +uoY +sqL +hhX +jVV +jVV +hhX +hhX +hhX +hhX +jVV +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +rjp +hhX +hhX +hhX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +bZr +rjp +rjp +bZr +uif +fYe +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(184,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +nQw +jVV +jVV +jVV +uOY +jVV +jVV +fDj +fDj +qSt +jYT +hQq +fDj +fDj +jVV +jVV +uOY +hhX +hhX +hhX +jVV +hhX +hhX +hhX +hhX +sqL +uoY +sqL +hhX +jVV +hhX +hhX +hhX +hhX +hhX +jVV +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +rjp +rjp +rjp +bZr +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(185,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +nQw +hhX +hhX +hhX +jVV +hhX +hhX +hhX +fDj +fDj +jnE +fDj +fDj +hhX +hhX +hhX +jVV +hhX +hhX +hhX +jVV +hhX +hhX +hhX +hhX +sqL +uoY +sqL +hhX +jVV +hhX +hhX +hhX +hhX +hhX +jVV +hhX +fNW +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +vxX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +fNW +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(186,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +nQw +jVV +hhX +hhX +jVV +hhX +hhX +hhX +hhX +fDj +fDj +fDj +hhX +hhX +hhX +hhX +jVV +hhX +hhX +hhX +jVV +hhX +hhX +hhX +hhX +sqL +uoY +sqL +hhX +jVV +hhX +hhX +hhX +hhX +hhX +jVV +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +vxX +vxX +vxX +vxX +vxX +vxX +hhX +hhX +vxX +vxX +vxX +vxX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(187,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +jVV +jVV +hhX +jVV +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +jVV +hhX +hhX +hhX +jVV +hhX +hhX +hhX +hhX +sqL +uoY +sqL +hhX +jVV +hhX +hhX +hhX +hhX +hhX +jVV +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +vxX +vxX +vxX +vxX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(188,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +jVV +hhX +jVV +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +jVV +hhX +hhX +hhX +jVV +hhX +hhX +hhX +hhX +sqL +hRH +sqL +hhX +jVV +hhX +hhX +hhX +hhX +hhX +jVV +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(189,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +jVV +hhX +jVV +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +jVV +hhX +hhX +jVV +jVV +jVV +jVV +jVV +jQS +jQS +wYW +jQS +jQS +jVV +jVV +jVV +jVV +jVV +jVV +jVV +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(190,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +jVV +hhX +jVV +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +qQq +hhX +jVV +jVV +hhX +jVV +hhX +hhX +jQS +tjq +lSA +nOy +jQS +hhX +hhX +hhX +hhX +hhX +hhX +jVV +hhX +hhX +hhX +hhX +fNW +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(191,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +nQw +nQw +nQw +nQw +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +nQw +nQw +nQw +nQw +hhX +hhX +jVV +hhX +hhX +jQS +tjq +jEt +wFw +jQS +hhX +hhX +hhX +hhX +hhX +hhX +jVV +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +fNW +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(192,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +jVV +hhX +hhX +hhX +jQS +jQS +jQS +jQS +aPJ +lSA +csu +jQS +jQS +jQS +jQS +hhX +hhX +hhX +jVV +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +fNW +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(193,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +jVV +hhX +hhX +jQS +jQS +gQq +klu +xEs +xEs +iOk +xEs +xEs +qRY +gQq +jQS +jQS +hhX +hhX +jVV +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(194,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +jVV +jQS +sCE +jQS +gQq +gQq +sbR +gQq +arS +drx +qad +gQq +abm +gQq +gQq +jQS +tLO +jQS +jVV +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(195,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +jQS +jQS +bYy +jQS +gQq +gQq +sbR +gQq +ibl +tZR +qad +gQq +abm +gQq +gQq +jQS +qez +jQS +jQS +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(196,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +oID +hhX +jQS +hUo +rWL +jQS +vDn +gQq +sbR +gQq +ibl +tZR +qad +gQq +abm +gQq +qUx +jQS +xne +hUo +jQS +szt +oID +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(197,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +oID +hhX +wBd +hAL +dBj +jQS +erR +ubn +gYI +ybO +xgq +tZR +ueJ +ybO +gYI +ubn +nMf +jQS +dBj +cku +riY +rHm +oID +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(198,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +oID +jVV +wBd +rWL +jQS +jQS +wea +tPE +tPE +tvt +tvt +tZR +tvt +tvt +tZR +tZR +aXc +jQS +jQS +geB +tLO +jVV +oID +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(199,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +oID +hhX +wBd +hAL +jQS +ojC +tPE +lKY +lKY +lBZ +nRj +nem +ciV +tPE +lKY +lKY +tZR +kkD +jQS +cku +tLO +hhX +oID +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(200,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +oID +hhX +jQS +hAL +jQS +qWt +tPE +lKY +hQH +gjo +csf +oIh +pPY +xeT +gCP +lKY +tZR +hLA +jQS +cku +jQS +hhX +oID +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(201,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +oID +hhX +wBd +hAL +jQS +jQS +agM +gMy +gwx +jQS +wmO +wmO +wmO +jQS +xDf +gtE +mYh +jQS +jQS +cku +tLO +hhX +oID +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(202,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +oJt +wAT +ezg +agA +wPP +tIs +tPE +lKY +bBJ +wmO +uHz +uHz +uHz +wmO +rmi +lKY +tZR +gmb +mRC +awC +vbV +wAT +mZJ +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(203,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +oID +jVV +wBd +rWL +jQS +uVe +tPE +avA +iox +wmO +uHz +uHz +uHz +wmO +xGG +uBm +lBZ +rWp +jQS +hAL +tLO +hhX +oID +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(204,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +oID +hhX +jQS +hye +jQS +qZX +tPE +lKY +oIu +wmO +uHz +uHz +uHz +wmO +bLI +lKY +lBZ +gDl +jQS +hye +jQS +hhX +oID +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(205,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +jQS +jQS +jQS +iXn +ieU +cWL +tMz +jQS +wmO +inz +jgA +jQS +tMz +ybo +aqG +lVq +jQS +jQS +jQS +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(206,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +fZF +jQS +pjL +jEt +gdM +rdn +dck +wnA +wnA +wnA +wnA +viT +bUl +cNh +iXB +jEt +nfk +jQS +fZF +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(207,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +fZF +jQS +fSi +fXW +jej +krO +krO +krO +krO +krO +krO +krO +krO +krO +rBq +mCT +sQU +jQS +fZF +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(208,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +fZF +jQS +uCr +ikp +hLP +cWc +wnA +wnA +jfD +krO +olE +wnA +wnA +wnA +iyZ +nWd +xXm +jQS +fZF +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(209,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +fNW +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +fZF +jQS +jQS +jQS +jQS +jQS +bGL +vBD +rxC +krO +jpe +wnA +trg +jQS +jQS +jQS +jQS +jQS +fZF +hhX +hhX +hhX +hhX +hhX +hhX +fNW +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(210,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +fZF +fZF +fZF +fZF +fZF +jQS +tbU +byC +tbU +keb +tbU +byC +tbU +jQS +fZF +fZF +fZF +fZF +fZF +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(211,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +fZF +jQS +gQq +gQq +gQq +ybO +gQq +gQq +gQq +jQS +fZF +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(212,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +fZF +jQS +gQq +gQq +gQq +ybO +gQq +gQq +gQq +jQS +fZF +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(213,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +fZF +jQS +gQq +gQq +gQq +gQq +gQq +gQq +gQq +jQS +fZF +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(214,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +fZF +jQS +gQq +gQq +gQq +gQq +gQq +gQq +gQq +jQS +fZF +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(215,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +fZF +jQS +jQS +gQq +gQq +gQq +gQq +gQq +jQS +jQS +fZF +hhX +hhX +fNW +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(216,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +fZF +jQS +jQS +jQS +jQS +jQS +jQS +jQS +fZF +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(217,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +fZF +fZF +fZF +fZF +fZF +fZF +fZF +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(218,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(219,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +jiN +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(220,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(221,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +fNW +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(222,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(223,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(224,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(225,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(226,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(227,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(228,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(229,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(230,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(231,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(232,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(233,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(234,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(235,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(236,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(237,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(238,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(239,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(240,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(241,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(242,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(243,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(244,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(245,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +kkx +kkx +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(246,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +kkx +fcC +unZ +kkx +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(247,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +kkx +unZ +gFe +unZ +unZ +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(248,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +kkx +unZ +unZ +unZ +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(249,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(250,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(251,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(252,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(253,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(254,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} +(255,1,2) = {" +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +hhX +"} diff --git a/_maps/modular_generic/ice_l_storage.dmm b/_maps/modular_generic/ice_l_storage.dmm index 5914568908c58..6aca9bec648fb 100644 --- a/_maps/modular_generic/ice_l_storage.dmm +++ b/_maps/modular_generic/ice_l_storage.dmm @@ -38,9 +38,7 @@ /turf/closed/wall/ice, /area/template_noop) "i" = ( -/obj/structure/railing{ - layer = 4 - }, +/obj/structure/railing, /obj/effect/decal/cleanable/dirt, /obj/machinery/space_heater, /turf/open/floor/plastic, @@ -122,17 +120,13 @@ }, /obj/item/trash/can, /obj/effect/decal/cleanable/dirt, -/obj/structure/railing{ - layer = 4 - }, +/obj/structure/railing, /turf/open/floor/plastic, /area/template_noop) "y" = ( /obj/structure/closet/crate/bin, /obj/effect/decal/cleanable/dirt, -/obj/structure/railing{ - layer = 4 - }, +/obj/structure/railing, /turf/open/floor/plastic, /area/template_noop) "z" = ( @@ -164,9 +158,7 @@ /turf/open/floor/plating, /area/template_noop) "D" = ( -/obj/structure/railing{ - layer = 4 - }, +/obj/structure/railing, /obj/effect/decal/cleanable/dirt, /turf/open/floor/plastic, /area/template_noop) @@ -203,9 +195,7 @@ /obj/structure/chair/plastic{ dir = 1 }, -/obj/structure/railing{ - layer = 4 - }, +/obj/structure/railing, /obj/effect/decal/cleanable/dirt, /turf/open/floor/plastic, /area/template_noop) diff --git a/_maps/multiz_debug.json b/_maps/multiz_debug.json index 7f44673da3da6..e83101d74d733 100644 --- a/_maps/multiz_debug.json +++ b/_maps/multiz_debug.json @@ -4,6 +4,7 @@ "map_path": "map_files/debug", "map_file": "multiz.dmm", "ignored_unit_tests": [ + "/datum/unit_test/cargo_dep_order_locations", "/datum/unit_test/job_roundstart_spawnpoints", "/datum/unit_test/required_map_items", "/datum/unit_test/spy_bounty" diff --git a/_maps/runtimestation.json b/_maps/runtimestation.json index ee042270c0a3e..12f854ce425e3 100644 --- a/_maps/runtimestation.json +++ b/_maps/runtimestation.json @@ -5,6 +5,7 @@ "map_file": "runtimestation.dmm", "space_ruin_levels": 1, "ignored_unit_tests": [ + "/datum/unit_test/cargo_dep_order_locations", "/datum/unit_test/job_roundstart_spawnpoints", "/datum/unit_test/required_map_items", "/datum/unit_test/spy_bounty" diff --git a/_maps/shuttles/arrival_birdshot.dmm b/_maps/shuttles/arrival_birdshot.dmm index 2288db6bbe24d..d884c22d8db3d 100644 --- a/_maps/shuttles/arrival_birdshot.dmm +++ b/_maps/shuttles/arrival_birdshot.dmm @@ -62,6 +62,11 @@ /obj/machinery/light/cold/directional/north, /turf/open/floor/mineral/titanium/blue, /area/shuttle/arrival) +"x" = ( +/obj/effect/spawner/structure/window/reinforced/shuttle, +/obj/structure/fans/tiny/invisible, +/turf/open/floor/plating, +/area/shuttle/arrival) "B" = ( /turf/open/floor/mineral/titanium/blue, /area/shuttle/arrival) @@ -69,6 +74,7 @@ /obj/machinery/door/airlock/titanium{ name = "Arrivals Shuttle Airlock" }, +/obj/structure/fans/tiny, /turf/open/floor/mineral/titanium/blue, /area/shuttle/arrival) "J" = ( @@ -128,20 +134,20 @@ (1,1,1) = {" a -Q -Q -Q -Q -Q +x +x +x +x +x a "} (2,1,1) = {" a -Q +x f n R -Q +x a "} (3,1,1) = {" @@ -172,22 +178,22 @@ B F "} (6,1,1) = {" -Q +x U B U B U -Q +x "} (7,1,1) = {" -Q +x U B U B U -Q +x "} (8,1,1) = {" V @@ -204,7 +210,7 @@ Q L q w -Q +x a "} (10,1,1) = {" @@ -217,22 +223,22 @@ q V "} (11,1,1) = {" -Q +x U B U B U -Q +x "} (12,1,1) = {" -Q +x U B U B U -Q +x "} (13,1,1) = {" F diff --git a/_maps/shuttles/arrival_box.dmm b/_maps/shuttles/arrival_box.dmm index 3d4a8769d4cdb..53d704515bb25 100644 --- a/_maps/shuttles/arrival_box.dmm +++ b/_maps/shuttles/arrival_box.dmm @@ -9,10 +9,12 @@ /obj/machinery/door/airlock/titanium{ name = "Arrivals Shuttle Airlock" }, +/obj/structure/fans/tiny, /turf/open/floor/plating, /area/shuttle/arrival) "d" = ( /obj/effect/spawner/structure/window/reinforced/shuttle, +/obj/structure/fans/tiny/invisible, /turf/open/floor/plating, /area/shuttle/arrival) "e" = ( diff --git a/_maps/shuttles/arrival_delta.dmm b/_maps/shuttles/arrival_delta.dmm index 649c16bdcf4db..527b50f66c3dd 100644 --- a/_maps/shuttles/arrival_delta.dmm +++ b/_maps/shuttles/arrival_delta.dmm @@ -39,6 +39,7 @@ /area/shuttle/arrival) "ah" = ( /obj/effect/spawner/structure/window/reinforced/shuttle, +/obj/structure/fans/tiny/invisible, /turf/open/floor/plating, /area/shuttle/arrival) "ai" = ( @@ -156,6 +157,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 4 }, +/obj/structure/fans/tiny, /turf/open/floor/iron/white, /area/shuttle/arrival) "ap" = ( diff --git a/_maps/shuttles/arrival_donut.dmm b/_maps/shuttles/arrival_donut.dmm index e8ff316a69e7d..e8947674b7c39 100644 --- a/_maps/shuttles/arrival_donut.dmm +++ b/_maps/shuttles/arrival_donut.dmm @@ -38,6 +38,7 @@ /area/shuttle/arrival) "k" = ( /obj/machinery/door/airlock/titanium, +/obj/structure/fans/tiny, /turf/open/floor/plating, /area/shuttle/arrival) "l" = ( @@ -55,6 +56,7 @@ /area/shuttle/arrival) "o" = ( /obj/effect/spawner/structure/window/reinforced/shuttle, +/obj/structure/fans/tiny/invisible, /turf/open/floor/plating, /area/shuttle/arrival) "p" = ( diff --git a/_maps/shuttles/arrival_kilo.dmm b/_maps/shuttles/arrival_kilo.dmm index 3fd328965deae..b59cf8d160dc4 100644 --- a/_maps/shuttles/arrival_kilo.dmm +++ b/_maps/shuttles/arrival_kilo.dmm @@ -16,6 +16,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 1 }, +/obj/structure/fans/tiny, /turf/open/floor/mineral/plastitanium, /area/shuttle/arrival) "ae" = ( @@ -99,6 +100,7 @@ dir = 8 }, /obj/effect/spawner/structure/window/reinforced/shuttle, +/obj/structure/fans/tiny/invisible, /turf/open/floor/plating, /area/shuttle/arrival) "ap" = ( @@ -298,6 +300,11 @@ }, /turf/open/floor/mineral/plastitanium, /area/shuttle/arrival) +"lA" = ( +/obj/effect/spawner/structure/window/reinforced/shuttle, +/obj/structure/fans/tiny/invisible, +/turf/open/floor/plating, +/area/shuttle/arrival) "rV" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -349,7 +356,7 @@ aX aW aQ aY -af +lA "} (5,1,1) = {" ae @@ -367,7 +374,7 @@ rV ay aV aN -af +lA "} (7,1,1) = {" af @@ -376,7 +383,7 @@ rV az aV aN -af +lA "} (8,1,1) = {" af @@ -385,7 +392,7 @@ rV ab aV aN -af +lA "} (9,1,1) = {" ac @@ -435,9 +442,9 @@ ag (14,1,1) = {" ag ac -af -af -af +lA +lA +lA ac ag "} diff --git a/_maps/shuttles/arrival_northstar.dmm b/_maps/shuttles/arrival_northstar.dmm index 888a497bc581f..fadde8f9df42b 100644 --- a/_maps/shuttles/arrival_northstar.dmm +++ b/_maps/shuttles/arrival_northstar.dmm @@ -12,6 +12,7 @@ /obj/machinery/door/airlock/survival_pod/glass{ name = "Arrivals Shuttle Airlock" }, +/obj/structure/fans/tiny, /turf/open/floor/plating, /area/shuttle/arrival) "d" = ( @@ -183,6 +184,7 @@ /area/shuttle/arrival) "Z" = ( /obj/effect/spawner/structure/window/survival_pod, +/obj/structure/fans/tiny/invisible, /turf/open/floor/plating, /area/shuttle/arrival) diff --git a/_maps/shuttles/arrival_pubby.dmm b/_maps/shuttles/arrival_pubby.dmm index 8f2ecdab58c85..e534fd01a4015 100644 --- a/_maps/shuttles/arrival_pubby.dmm +++ b/_maps/shuttles/arrival_pubby.dmm @@ -9,10 +9,12 @@ /obj/machinery/door/airlock/titanium{ name = "Arrivals Shuttle Airlock" }, +/obj/structure/fans/tiny, /turf/open/floor/plating, /area/shuttle/arrival) "d" = ( /obj/effect/spawner/structure/window/reinforced/shuttle, +/obj/structure/fans/tiny/invisible, /turf/open/floor/plating, /area/shuttle/arrival) "e" = ( @@ -53,6 +55,7 @@ name = "Ship Shutters" }, /obj/effect/spawner/structure/window/reinforced/shuttle, +/obj/structure/fans/tiny/invisible, /turf/open/floor/plating, /area/shuttle/arrival) "n" = ( diff --git a/_maps/shuttles/emergency_birdshot.dmm b/_maps/shuttles/emergency_birdshot.dmm index 20ffeb679d7d8..0e265110bde50 100644 --- a/_maps/shuttles/emergency_birdshot.dmm +++ b/_maps/shuttles/emergency_birdshot.dmm @@ -99,7 +99,7 @@ pixel_x = 3; pixel_y = 2 }, -/obj/item/clothing/mask/cigarette/dromedary{ +/obj/item/cigarette/dromedary{ pixel_x = 8; pixel_y = 15 }, @@ -287,7 +287,7 @@ "mU" = ( /obj/structure/lattice, /turf/template_noop, -/area/template_noop) +/area/shuttle/escape) "no" = ( /obj/item/trash/popcorn/caramel, /turf/open/floor/mineral/titanium, @@ -552,7 +552,7 @@ /obj/structure/lattice, /obj/item/stack/rods/two, /turf/template_noop, -/area/template_noop) +/area/shuttle/escape) "Ay" = ( /obj/item/shard{ pixel_y = 19 @@ -697,7 +697,7 @@ /obj/structure/window/reinforced/survival_pod/spawner/directional/north, /obj/structure/table, /obj/machinery/cell_charger, -/obj/item/stock_parts/cell, +/obj/item/stock_parts/power_store/cell, /turf/open/floor/glass/reinforced, /area/shuttle/escape) "Id" = ( diff --git a/_maps/shuttles/emergency_casino.dmm b/_maps/shuttles/emergency_casino.dmm index 55985a02e693e..c1332f0ef1ded 100644 --- a/_maps/shuttles/emergency_casino.dmm +++ b/_maps/shuttles/emergency_casino.dmm @@ -753,7 +753,6 @@ /area/shuttle/escape) "wv" = ( /obj/structure/tank_dispenser/oxygen{ - layer = 2.7; pixel_x = -1; pixel_y = 2 }, @@ -1186,7 +1185,7 @@ /obj/item/storage/crayons, /obj/item/storage/crayons, /obj/item/storage/crayons, -/mob/living/simple_animal/bot/secbot/honkbot, +/mob/living/basic/bot/honkbot, /turf/open/floor/sepia, /area/shuttle/escape) "NN" = ( diff --git a/_maps/shuttles/emergency_cruise.dmm b/_maps/shuttles/emergency_cruise.dmm index 81328a07751dd..c111505c14789 100644 --- a/_maps/shuttles/emergency_cruise.dmm +++ b/_maps/shuttles/emergency_cruise.dmm @@ -130,7 +130,13 @@ /obj/effect/turf_decal/trimline/blue/mid_joiner{ dir = 4 }, -/mob/living/basic/bot/medbot/stationary, +/mob/living/basic/bot/medbot/stationary{ + damage_type_healer = "all_damage"; + heal_amount = 5; + heal_threshold = 0; + skin = "advanced"; + name = "Doctor Rumack" + }, /turf/open/floor/iron/white/smooth_large, /area/shuttle/escape) "dw" = ( @@ -402,7 +408,7 @@ /turf/closed/wall/mineral/titanium, /area/shuttle/escape) "jy" = ( -/obj/machinery/sleeper{ +/obj/machinery/sleeper/syndie/fullupgrade/nt{ dir = 8 }, /turf/open/floor/iron/dark/small, @@ -531,13 +537,19 @@ /obj/effect/turf_decal/trimline/blue/mid_joiner{ dir = 1 }, -/obj/structure/window/reinforced/spawner/directional/west, /obj/structure/window/reinforced/spawner/directional/south, /obj/structure/table/reinforced, +/obj/item/surgery_tray/full/advanced, /obj/item/book/manual/wiki/surgery, /obj/item/stack/medical/mesh/advanced, /obj/item/stack/medical/gauze/twelve, /obj/item/stack/medical/suture/medicated, +/obj/structure/window/reinforced/spawner/directional/west, +/obj/item/defibrillator/compact/combat/loaded/nanotrasen{ + combat = 0; + safety = 1 + }, +/obj/item/healthanalyzer/advanced, /turf/open/floor/iron/white/smooth_large, /area/shuttle/escape) "lw" = ( @@ -845,7 +857,6 @@ "sz" = ( /obj/machinery/shuttle_manipulator{ desc = "A holographic display of the cruise shuttle we're on right now."; - layer = 2.7; max_integrity = 99999; name = "shuttle holographic display" }, @@ -1266,6 +1277,10 @@ pixel_x = 6; pixel_y = 10 }, +/obj/item/storage/pill_bottle/mannitol{ + pixel_x = -7; + pixel_y = 3 + }, /turf/open/floor/iron/white, /area/shuttle/escape) "Bd" = ( @@ -1329,7 +1344,6 @@ density = 1; icon = 'icons/obj/machines/shuttle_manipulator.dmi'; icon_state = "hologram_on"; - layer = 2.8; light_color = "#2cb2e8"; light_range = 2; max_integrity = 7500; @@ -1342,7 +1356,6 @@ desc = "This is the shuttle we're on. It's amazing what Nanotrasen can do once they actually put more than ten seconds of effort into their projects."; icon = 'icons/obj/machines/shuttle_manipulator.dmi'; icon_state = "hologram_whiteship"; - layer = 4; light_color = "#2cb2e8"; light_range = 7; max_integrity = 75000; @@ -1371,7 +1384,9 @@ /turf/template_noop, /area/shuttle/escape) "Cr" = ( -/obj/machinery/atmospherics/components/unary/thermomachine/freezer, +/obj/machinery/atmospherics/components/unary/thermomachine/freezer{ + dir = 4 + }, /turf/open/floor/iron/dark/small, /area/shuttle/escape) "Cu" = ( @@ -1433,8 +1448,8 @@ dir = 1 }, /obj/effect/turf_decal/trimline/blue/filled/line, -/obj/structure/window/reinforced/spawner/directional/west, /obj/machinery/computer/operating, +/obj/structure/window/reinforced/spawner/directional/west, /turf/open/floor/iron/white, /area/shuttle/escape) "DV" = ( @@ -1630,7 +1645,7 @@ /turf/open/floor/carpet/executive, /area/shuttle/escape) "Jl" = ( -/mob/living/simple_animal/bot/vibebot, +/mob/living/basic/bot/vibebot, /turf/open/floor/iron, /area/shuttle/escape) "Jo" = ( @@ -1760,7 +1775,7 @@ dir = 1 }, /obj/effect/turf_decal/trimline/blue/filled/line, -/obj/machinery/medical_kiosk, +/obj/machinery/stasis, /turf/open/floor/iron/white, /area/shuttle/escape) "LU" = ( @@ -1784,9 +1799,9 @@ /obj/effect/turf_decal/trimline/blue/mid_joiner{ dir = 8 }, -/obj/structure/window/reinforced/spawner/directional/west, /obj/machinery/iv_drip, /obj/item/reagent_containers/blood/o_minus, +/obj/structure/window/reinforced/spawner/directional/west, /turf/open/floor/iron/white/smooth_large, /area/shuttle/escape) "Mt" = ( @@ -3186,9 +3201,9 @@ jt ij ij jt -Jl qt Jl +qt jt rG Um diff --git a/_maps/shuttles/emergency_delta.dmm b/_maps/shuttles/emergency_delta.dmm index 5cca48f0d8fa3..854f76f7a154f 100644 --- a/_maps/shuttles/emergency_delta.dmm +++ b/_maps/shuttles/emergency_delta.dmm @@ -533,7 +533,7 @@ "bs" = ( /obj/structure/table, /obj/machinery/cell_charger, -/obj/item/stock_parts/cell/high, +/obj/item/stock_parts/power_store/cell/high, /obj/effect/turf_decal/bot, /obj/machinery/camera/autoname, /turf/open/floor/iron, @@ -1058,7 +1058,7 @@ "Rz" = ( /obj/structure/table/reinforced, /obj/machinery/cell_charger, -/obj/item/stock_parts/cell/high, +/obj/item/stock_parts/power_store/cell/high, /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/shuttle/escape) diff --git a/_maps/shuttles/emergency_fame.dmm b/_maps/shuttles/emergency_fame.dmm index 368de11546d7a..919a8651b378a 100644 --- a/_maps/shuttles/emergency_fame.dmm +++ b/_maps/shuttles/emergency_fame.dmm @@ -605,7 +605,6 @@ /area/shuttle/escape/brig) "zc" = ( /obj/structure/tank_dispenser/oxygen{ - layer = 2.7; pixel_x = -1; pixel_y = 2 }, diff --git a/_maps/shuttles/emergency_fish.dmm b/_maps/shuttles/emergency_fish.dmm index 3726a7399d9ab..b99aa01b096bf 100644 --- a/_maps/shuttles/emergency_fish.dmm +++ b/_maps/shuttles/emergency_fish.dmm @@ -311,21 +311,18 @@ "qO" = ( /obj/structure/table/wood, /obj/item/fishing_line{ - layer = 4; pixel_x = 6; pixel_y = 3 }, -/obj/item/fishing_hook{ - layer = 5; - pixel_y = 3 - }, /obj/item/bait_can/worm{ - pixel_x = -5; pixel_y = 13 }, /obj/effect/turf_decal/tile/dark/half/contrasted{ dir = 4 }, +/obj/item/fishing_hook{ + pixel_y = 3 + }, /turf/open/floor/wood/tile, /area/shuttle/escape) "rj" = ( @@ -586,12 +583,7 @@ /area/shuttle/escape) "IM" = ( /obj/structure/table/wood, -/obj/item/fishing_hook{ - layer = 5; - pixel_y = 3 - }, /obj/item/fishing_line{ - layer = 4; pixel_x = 6; pixel_y = 3 }, @@ -602,6 +594,9 @@ /obj/effect/turf_decal/tile/dark/half/contrasted{ dir = 4 }, +/obj/item/fishing_hook{ + pixel_y = 3 + }, /turf/open/floor/wood/tile, /area/shuttle/escape) "Jh" = ( diff --git a/_maps/shuttles/emergency_kilo.dmm b/_maps/shuttles/emergency_kilo.dmm index b8710eb116450..4ebd7843239aa 100644 --- a/_maps/shuttles/emergency_kilo.dmm +++ b/_maps/shuttles/emergency_kilo.dmm @@ -630,11 +630,8 @@ /obj/structure/chair/comfy/shuttle{ dir = 8 }, -/obj/machinery/computer/security/telescreen{ - dir = 8; - name = "Shuttle Camera Monitor"; - network = list("ss13"); - pixel_x = 26 +/obj/machinery/computer/security/telescreen/normal/directional/east{ + name = "Shuttle Camera Monitor" }, /turf/open/floor/mineral/plastitanium, /area/shuttle/escape) diff --git a/_maps/shuttles/emergency_lance.dmm b/_maps/shuttles/emergency_lance.dmm index e2f254844d332..c17d1767b13af 100644 --- a/_maps/shuttles/emergency_lance.dmm +++ b/_maps/shuttles/emergency_lance.dmm @@ -297,7 +297,8 @@ }, /obj/docking_port/mobile/emergency{ dir = 2; - name = "Lance Emergency Shuttle" + name = "Lance Emergency Shuttle"; + port_direction = 1 }, /turf/open/floor/iron/dark, /area/shuttle/escape) @@ -1284,7 +1285,7 @@ "Nx" = ( /obj/structure/table/reinforced, /obj/machinery/cell_charger, -/obj/item/stock_parts/cell/high, +/obj/item/stock_parts/power_store/cell/high, /obj/effect/turf_decal/tile/dark_blue/opposingcorners{ dir = 1 }, diff --git a/_maps/shuttles/emergency_luxury.dmm b/_maps/shuttles/emergency_luxury.dmm index af17c03a0d8be..74b18ef61b4de 100644 --- a/_maps/shuttles/emergency_luxury.dmm +++ b/_maps/shuttles/emergency_luxury.dmm @@ -138,9 +138,7 @@ name = "Escape Shuttle Cell" }, /obj/effect/mapping_helpers/airlock/access/all/security/general, -/obj/machinery/scanner_gate/luxury_shuttle{ - layer = 2.6 - }, +/obj/machinery/scanner_gate/luxury_shuttle, /turf/open/indestructible/white, /area/shuttle/escape/brig) "gY" = ( @@ -340,9 +338,7 @@ /obj/structure/closet/crate/large, /obj/effect/turf_decal/delivery, /obj/effect/decal/cleanable/dirt, -/obj/structure/window/reinforced/spawner/directional/east{ - layer = 2.9 - }, +/obj/structure/window/reinforced/spawner/directional/east, /obj/item/toy/plush/rouny{ name = "rouny plushie" }, @@ -444,9 +440,7 @@ /obj/machinery/power/shuttle_engine/heater{ dir = 8 }, -/obj/structure/window/reinforced/spawner/directional/east{ - layer = 2.9 - }, +/obj/structure/window/reinforced/spawner/directional/east, /turf/open/floor/plating, /area/shuttle/escape) "sH" = ( @@ -630,9 +624,7 @@ /turf/open/floor/mineral/titanium/white, /area/shuttle/escape/luxury) "Bj" = ( -/obj/structure/window/reinforced/spawner/directional/east{ - layer = 2.9 - }, +/obj/structure/window/reinforced/spawner/directional/east, /obj/effect/spawner/random/structure/closet_private, /turf/open/floor/iron/white/herringbone, /area/shuttle/escape/luxury) @@ -653,9 +645,7 @@ /area/shuttle/escape) "BK" = ( /obj/structure/girder, -/obj/structure/window/reinforced/spawner/directional/east{ - layer = 2.9 - }, +/obj/structure/window/reinforced/spawner/directional/east, /obj/effect/turf_decal/delivery, /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, @@ -667,9 +657,7 @@ /turf/open/floor/iron, /area/shuttle/escape) "Ck" = ( -/obj/machinery/scanner_gate/luxury_shuttle{ - layer = 2.6 - }, +/obj/machinery/scanner_gate/luxury_shuttle, /obj/machinery/door/airlock/silver{ name = "First Class" }, @@ -695,18 +683,14 @@ dir = 2; name = "Luxurious Emergency Shuttle" }, -/obj/machinery/scanner_gate/luxury_shuttle{ - layer = 2.6 - }, +/obj/machinery/scanner_gate/luxury_shuttle, /obj/machinery/door/airlock/silver{ name = "First Class" }, /turf/open/floor/carpet/blue, /area/shuttle/escape/luxury) "Dj" = ( -/obj/structure/window/reinforced/spawner/directional/east{ - layer = 2.9 - }, +/obj/structure/window/reinforced/spawner/directional/east, /obj/structure/rack, /obj/effect/spawner/random/trash/soap, /turf/open/floor/iron/white/herringbone, @@ -792,9 +776,7 @@ /obj/structure/girder, /obj/effect/turf_decal/delivery, /obj/effect/decal/cleanable/dirt, -/obj/structure/window/reinforced/spawner/directional/east{ - layer = 2.9 - }, +/obj/structure/window/reinforced/spawner/directional/east, /turf/open/floor/iron, /area/shuttle/escape) "EZ" = ( @@ -1080,9 +1062,7 @@ /turf/open/floor/carpet/green, /area/shuttle/escape/luxury) "Rk" = ( -/obj/machinery/scanner_gate/luxury_shuttle{ - layer = 2.6 - }, +/obj/machinery/scanner_gate/luxury_shuttle, /obj/effect/mapping_helpers/airlock/access/all/security/general, /obj/machinery/door/airlock/security/glass{ name = "Escape Shuttle Cell" diff --git a/_maps/shuttles/emergency_medisim.dmm b/_maps/shuttles/emergency_medisim.dmm index 4e62c20d74b65..0876b69f520f9 100644 --- a/_maps/shuttles/emergency_medisim.dmm +++ b/_maps/shuttles/emergency_medisim.dmm @@ -693,17 +693,7 @@ /turf/open/misc/sandy_dirt, /area/shuttle/escape/simulation) "Cv" = ( -/obj/machinery/drone_dispenser{ - desc = "A hefty machine that periodically creates a pair of binoculars. Really, Nanotrasen? We're getting this lazy?"; - dispense_type = /obj/item/binoculars; - end_create_message = "dispenses a pair of binoculars."; - glass_cost = 0; - iron_cost = 0; - maximum_idle = 1; - name = "binoculars fabricator"; - energy_used = 0; - starting_amount = 25000 - }, +/obj/machinery/drone_dispenser/binoculars, /turf/open/floor/mineral/titanium/yellow, /area/shuttle/escape) "Cy" = ( diff --git a/_maps/shuttles/emergency_meta.dmm b/_maps/shuttles/emergency_meta.dmm index 5a4ca2c48326f..f1064a77fdaf0 100644 --- a/_maps/shuttles/emergency_meta.dmm +++ b/_maps/shuttles/emergency_meta.dmm @@ -160,7 +160,6 @@ /area/shuttle/escape) "aA" = ( /obj/structure/tank_dispenser/oxygen{ - layer = 2.7; pixel_x = -1; pixel_y = 2 }, diff --git a/_maps/shuttles/emergency_meteor.dmm b/_maps/shuttles/emergency_meteor.dmm index 658c290b95684..9d05cf8cc62c4 100644 --- a/_maps/shuttles/emergency_meteor.dmm +++ b/_maps/shuttles/emergency_meteor.dmm @@ -6,9 +6,7 @@ /turf/closed/mineral/asteroid/porous, /area/shuttle/escape/meteor) "c" = ( -/obj/structure/window/reinforced/spawner/directional/north{ - layer = 2.9 - }, +/obj/structure/window/reinforced/spawner/directional/north, /turf/open/misc/asteroid, /area/shuttle/escape/meteor) "d" = ( diff --git a/_maps/shuttles/emergency_monastery.dmm b/_maps/shuttles/emergency_monastery.dmm index dbc203630102b..4041e4e0588c5 100644 --- a/_maps/shuttles/emergency_monastery.dmm +++ b/_maps/shuttles/emergency_monastery.dmm @@ -40,13 +40,6 @@ /obj/structure/grille/broken, /turf/open/space/basic, /area/shuttle/escape) -"aN" = ( -/obj/structure/window/reinforced/spawner/directional/south, -/obj/structure/window/reinforced/spawner/directional/west{ - layer = 2.9 - }, -/turf/open/space/basic, -/area/shuttle/escape) "aO" = ( /obj/structure/sign/plaques/kiddie{ desc = "It reads: PRIVATE EXHIBIT - Please inquire with library staff for guided tours."; @@ -65,16 +58,8 @@ /obj/effect/spawner/structure/window/reinforced, /turf/closed/wall, /area/shuttle/escape) -"aT" = ( -/obj/structure/window/reinforced/spawner/directional/west{ - layer = 2.9 - }, -/turf/open/space/basic, -/area/shuttle/escape) "aW" = ( -/obj/structure/window/reinforced/spawner/directional/east{ - layer = 2.9 - }, +/obj/structure/window/reinforced/spawner/directional/east, /obj/structure/lattice, /turf/open/space/basic, /area/shuttle/escape) @@ -103,9 +88,7 @@ /area/shuttle/escape) "bl" = ( /obj/structure/window/reinforced/spawner/directional/south, -/obj/structure/window/reinforced/spawner/directional/east{ - layer = 2.9 - }, +/obj/structure/window/reinforced/spawner/directional/east, /turf/open/space/basic, /area/shuttle/escape) "bn" = ( @@ -145,13 +128,6 @@ /obj/structure/window/reinforced/spawner/directional/west, /turf/open/floor/plating, /area/shuttle/escape) -"bx" = ( -/obj/machinery/power/shuttle_engine/propulsion, -/obj/structure/window/reinforced/spawner/directional/west{ - layer = 2.9 - }, -/turf/open/floor/plating, -/area/shuttle/escape) "by" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/sign/painting/library_private{ @@ -162,13 +138,9 @@ /area/shuttle/escape) "bC" = ( /obj/machinery/power/shuttle_engine/heater, -/obj/structure/window/reinforced/spawner/directional/east{ - layer = 2.9 - }, +/obj/structure/window/reinforced/spawner/directional/east, /obj/structure/window/reinforced/spawner/directional/north, -/obj/structure/window/reinforced/spawner/directional/west{ - layer = 2.9 - }, +/obj/structure/window/reinforced/spawner/directional/west, /turf/open/floor/plating, /area/shuttle/escape) "bI" = ( @@ -428,13 +400,6 @@ /obj/structure/window/reinforced/spawner/directional/east, /turf/open/space/basic, /area/shuttle/escape) -"hC" = ( -/obj/machinery/power/shuttle_engine/propulsion, -/obj/structure/window/reinforced/spawner/directional/east{ - layer = 2.9 - }, -/turf/open/floor/plating, -/area/shuttle/escape) "hI" = ( /obj/machinery/atmospherics/components/binary/pump/on{ dir = 4; @@ -467,9 +432,7 @@ /obj/structure/window/reinforced/spawner/directional/north{ pixel_y = 1 }, -/obj/structure/window/reinforced/spawner/directional/west{ - layer = 2.9 - }, +/obj/structure/window/reinforced/spawner/directional/west, /turf/open/space/basic, /area/shuttle/escape) "hW" = ( @@ -495,7 +458,6 @@ "hZ" = ( /obj/structure/table/wood, /obj/item/paper_bin{ - layer = 2.9; pixel_x = -2; pixel_y = 4 }, @@ -633,9 +595,7 @@ "jt" = ( /obj/machinery/power/shuttle_engine/heater, /obj/structure/window/reinforced/spawner/directional/north, -/obj/structure/window/reinforced/spawner/directional/west{ - layer = 2.9 - }, +/obj/structure/window/reinforced/spawner/directional/west, /turf/open/floor/plating, /area/shuttle/escape) "jx" = ( @@ -910,12 +870,6 @@ /obj/effect/spawner/structure/window/reinforced/tinted, /turf/open/floor/iron/dark, /area/shuttle/escape) -"nQ" = ( -/obj/structure/window/reinforced/spawner/directional/east{ - layer = 2.9 - }, -/turf/open/space/basic, -/area/shuttle/escape) "oa" = ( /obj/structure/chair/wood, /turf/open/floor/carpet, @@ -932,12 +886,6 @@ /obj/machinery/vending/wardrobe/curator_wardrobe, /turf/open/floor/iron/dark, /area/shuttle/escape) -"om" = ( -/obj/structure/window/reinforced/spawner/directional/east{ - layer = 2.9 - }, -/turf/open/space, -/area/shuttle/escape) "ov" = ( /obj/machinery/light/small/directional/east, /obj/machinery/camera/directional/east{ @@ -1078,7 +1026,6 @@ "qi" = ( /obj/structure/table/wood, /obj/item/paper_bin{ - layer = 2.9; pixel_x = -2; pixel_y = 4 }, @@ -1632,7 +1579,6 @@ "yP" = ( /obj/structure/table/wood, /obj/item/reagent_containers/condiment/saltshaker{ - layer = 3.1; pixel_x = -2; pixel_y = 2 }, @@ -1662,12 +1608,9 @@ /area/shuttle/escape) "zh" = ( /obj/effect/decal/cleanable/cobweb/cobweb2, -/obj/item/stack/sheet/glass/fifty{ - layer = 4 - }, +/obj/item/stack/sheet/glass/fifty, /obj/item/stack/sheet/iron{ - amount = 20; - layer = 3.1 + amount = 20 }, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ dir = 10 @@ -2162,9 +2105,7 @@ pixel_y = 4 }, /obj/item/reagent_containers/condiment/peppermill, -/obj/item/storage/box/ingredients/wildcard{ - layer = 3.1 - }, +/obj/item/storage/box/ingredients/wildcard, /turf/open/floor/iron, /area/shuttle/escape) "FA" = ( @@ -2664,12 +2605,6 @@ }, /turf/open/floor/iron/dark, /area/shuttle/escape) -"Ms" = ( -/obj/structure/window/reinforced/spawner/directional/west{ - layer = 2.9 - }, -/turf/open/space, -/area/shuttle/escape) "Mt" = ( /obj/structure/lattice, /turf/open/space, @@ -2712,12 +2647,8 @@ /area/shuttle/escape) "Nb" = ( /obj/machinery/power/shuttle_engine/propulsion, -/obj/structure/window/reinforced/spawner/directional/east{ - layer = 2.9 - }, -/obj/structure/window/reinforced/spawner/directional/west{ - layer = 2.9 - }, +/obj/structure/window/reinforced/spawner/directional/east, +/obj/structure/window/reinforced/spawner/directional/west, /turf/open/floor/plating, /area/shuttle/escape) "Nf" = ( @@ -2886,9 +2817,7 @@ "Pb" = ( /obj/machinery/power/shuttle_engine/heater, /obj/structure/window/reinforced/spawner/directional/north, -/obj/structure/window/reinforced/spawner/directional/east{ - layer = 2.9 - }, +/obj/structure/window/reinforced/spawner/directional/east, /turf/open/floor/plating, /area/shuttle/escape) "Pe" = ( @@ -2974,7 +2903,6 @@ "Qj" = ( /obj/structure/table/wood, /obj/item/paper_bin{ - layer = 2.9; pixel_x = -2; pixel_y = 4 }, @@ -3254,9 +3182,7 @@ /turf/open/floor/iron/dark, /area/shuttle/escape) "SU" = ( -/obj/structure/window/reinforced/spawner/directional/east{ - layer = 2.9 - }, +/obj/structure/window/reinforced/spawner/directional/east, /turf/open/floor/mineral/plastitanium/red, /area/shuttle/escape/brig) "SV" = ( @@ -3498,9 +3424,7 @@ /area/shuttle/escape) "VF" = ( /obj/structure/window/reinforced/spawner/directional/south, -/obj/structure/window/reinforced/spawner/directional/west{ - layer = 2.9 - }, +/obj/structure/window/reinforced/spawner/directional/west, /obj/machinery/atmospherics/components/unary/outlet_injector/on/layer2{ name = "Outlet Injector" }, @@ -3508,9 +3432,7 @@ /area/shuttle/escape) "VM" = ( /obj/machinery/mass_driver/chapelgun, -/obj/structure/window/reinforced/spawner/directional/east{ - layer = 2.9 - }, +/obj/structure/window/reinforced/spawner/directional/east, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/shuttle/escape) @@ -3632,9 +3554,7 @@ /turf/open/floor/iron/dark, /area/shuttle/escape) "Xx" = ( -/obj/structure/window/reinforced/spawner/directional/east{ - layer = 2.9 - }, +/obj/structure/window/reinforced/spawner/directional/east, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 1 }, @@ -3750,9 +3670,7 @@ /obj/structure/window/reinforced/spawner/directional/north{ pixel_y = 1 }, -/obj/structure/window/reinforced/spawner/directional/east{ - layer = 2.9 - }, +/obj/structure/window/reinforced/spawner/directional/east, /turf/open/space/basic, /area/shuttle/escape) "YZ" = ( @@ -3797,9 +3715,7 @@ /area/shuttle/escape) "Zn" = ( /obj/structure/window/reinforced/spawner/directional/south, -/obj/structure/window/reinforced/spawner/directional/east{ - layer = 2.9 - }, +/obj/structure/window/reinforced/spawner/directional/east, /turf/open/floor/mineral/plastitanium/red, /area/shuttle/escape/brig) "Zr" = ( @@ -4380,8 +4296,8 @@ nr nr nr nr -om -nQ +af +hq JG JG JG @@ -5118,8 +5034,8 @@ nr nr nr nr -aT -aT +IM +IM JG JG JG @@ -5483,9 +5399,9 @@ JG (21,1,1) = {" af af -nQ +hq aW -nQ +hq bl zE jc @@ -6056,7 +5972,7 @@ JG "} (28,1,1) = {" JG -aN +jS zE wt Mf @@ -6216,7 +6132,7 @@ Ho Ho Ho jt -bx +bv "} (30,1,1) = {" JG @@ -6380,17 +6296,17 @@ Ho Ho Ho Pb -hC +Ye "} (32,1,1) = {" JG JG -aT -aT -Ms -Ms -Ms -aT +IM +IM +Jl +Jl +Jl +IM JG JG JG diff --git a/_maps/shuttles/emergency_nature.dmm b/_maps/shuttles/emergency_nature.dmm index a1fa04c1c6a73..0f793c714753e 100644 --- a/_maps/shuttles/emergency_nature.dmm +++ b/_maps/shuttles/emergency_nature.dmm @@ -177,7 +177,6 @@ dir = 10 }, /obj/structure/tank_dispenser/oxygen{ - layer = 2.7; pixel_x = -1; pixel_y = 2 }, diff --git a/_maps/shuttles/emergency_northstar.dmm b/_maps/shuttles/emergency_northstar.dmm index 85b807d843157..e934a65b722fa 100644 --- a/_maps/shuttles/emergency_northstar.dmm +++ b/_maps/shuttles/emergency_northstar.dmm @@ -559,7 +559,7 @@ "Wd" = ( /obj/structure/table/reinforced, /obj/machinery/cell_charger, -/obj/item/stock_parts/cell/high, +/obj/item/stock_parts/power_store/cell/high, /turf/open/floor/iron/smooth_large, /area/shuttle/escape) "Wz" = ( diff --git a/_maps/shuttles/emergency_omega.dmm b/_maps/shuttles/emergency_omega.dmm index e3f867a613047..7a183d4ac448a 100644 --- a/_maps/shuttles/emergency_omega.dmm +++ b/_maps/shuttles/emergency_omega.dmm @@ -337,7 +337,7 @@ "bm" = ( /obj/structure/table, /obj/machinery/cell_charger, -/obj/item/stock_parts/cell/high, +/obj/item/stock_parts/power_store/cell/high, /obj/structure/extinguisher_cabinet/directional/east, /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/bot, diff --git a/_maps/shuttles/emergency_pubby.dmm b/_maps/shuttles/emergency_pubby.dmm index f346fe323c6e4..84780e4332b9d 100644 --- a/_maps/shuttles/emergency_pubby.dmm +++ b/_maps/shuttles/emergency_pubby.dmm @@ -276,9 +276,7 @@ /area/shuttle/escape) "bd" = ( /obj/structure/window/reinforced/spawner/directional/south, -/obj/structure/window/reinforced/spawner/directional/west{ - layer = 2.9 - }, +/obj/structure/window/reinforced/spawner/directional/west, /obj/structure/table, /obj/item/food/canned/beans{ pixel_x = 3; @@ -395,15 +393,11 @@ /turf/open/floor/mineral/plastitanium/red, /area/shuttle/escape/brig) "bB" = ( -/obj/structure/window/reinforced/spawner/directional/east{ - layer = 2.9 - }, +/obj/structure/window/reinforced/spawner/directional/east, /turf/open/floor/mineral/plastitanium/red, /area/shuttle/escape/brig) "bC" = ( -/obj/structure/window/reinforced/spawner/directional/west{ - layer = 2.9 - }, +/obj/structure/window/reinforced/spawner/directional/west, /turf/open/floor/mineral/plastitanium/red, /area/shuttle/escape/brig) "bD" = ( @@ -485,9 +479,7 @@ /area/shuttle/escape) "jO" = ( /obj/structure/closet/secure_closet/freezer/fridge, -/obj/structure/window/reinforced/spawner/directional/west{ - layer = 2.9 - }, +/obj/structure/window/reinforced/spawner/directional/west, /obj/item/food/butterdog, /obj/item/food/cakeslice/apple, /obj/item/food/cakeslice/brioche, @@ -548,9 +540,7 @@ /turf/open/floor/mineral/plastitanium/red, /area/shuttle/escape/brig) "xt" = ( -/obj/structure/window/reinforced/spawner/directional/west{ - layer = 2.9 - }, +/obj/structure/window/reinforced/spawner/directional/west, /turf/open/floor/plating, /area/shuttle/escape) "Br" = ( @@ -599,9 +589,7 @@ "ZM" = ( /obj/structure/table/glass, /obj/item/storage/medkit/regular, -/obj/structure/window/reinforced/spawner/directional/east{ - layer = 2.9 - }, +/obj/structure/window/reinforced/spawner/directional/east, /obj/machinery/vending/wallmed/directional/north{ use_power = 0 }, diff --git a/_maps/shuttles/emergency_raven.dmm b/_maps/shuttles/emergency_raven.dmm index ce552c3764b5d..7e3937568001f 100644 --- a/_maps/shuttles/emergency_raven.dmm +++ b/_maps/shuttles/emergency_raven.dmm @@ -1524,7 +1524,7 @@ /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/bot, /obj/machinery/cell_charger, -/obj/item/stock_parts/cell/high, +/obj/item/stock_parts/power_store/cell/high, /obj/structure/table/reinforced, /turf/open/floor/plating, /area/shuttle/escape) diff --git a/_maps/shuttles/emergency_shadow.dmm b/_maps/shuttles/emergency_shadow.dmm index 19bbf8f786e14..5afa72919cb28 100644 --- a/_maps/shuttles/emergency_shadow.dmm +++ b/_maps/shuttles/emergency_shadow.dmm @@ -69,10 +69,10 @@ pixel_y = 9 }, /obj/machinery/cell_charger, -/obj/item/stock_parts/cell/high{ +/obj/item/stock_parts/power_store/cell/high{ pixel_y = 9 }, -/obj/item/stock_parts/cell/high, +/obj/item/stock_parts/power_store/cell/high, /obj/effect/turf_decal/tile/neutral/opposingcorners, /turf/open/floor/iron/dark/smooth_large, /area/shuttle/escape) @@ -468,7 +468,7 @@ }, /obj/item/kirbyplants/organic/plant21, /obj/structure/sign/warning/hot_temp/directional/west, -/obj/item/clothing/mask/cigarette/rollie/cannabis, +/obj/item/cigarette/rollie/cannabis, /turf/open/floor/iron/dark/textured_large, /area/shuttle/escape) "yg" = ( diff --git a/_maps/shuttles/emergency_tranquility.dmm b/_maps/shuttles/emergency_tranquility.dmm index 5458e59c84316..3019f72a1d2da 100644 --- a/_maps/shuttles/emergency_tranquility.dmm +++ b/_maps/shuttles/emergency_tranquility.dmm @@ -37,8 +37,7 @@ dir = 4 }, /obj/structure/railing{ - dir = 4; - layer = 4.1 + dir = 4 }, /turf/open/floor/wood, /area/shuttle/escape) @@ -354,8 +353,7 @@ /obj/effect/turf_decal/siding/wood, /obj/structure/railing{ color = "#A47449"; - dir = 2; - layer = 3.1 + dir = 2 }, /obj/structure/table/wood, /obj/machinery/reagentgrinder{ @@ -461,8 +459,7 @@ "jl" = ( /obj/structure/railing{ color = "#A47449"; - dir = 10; - layer = 3.1 + dir = 10 }, /obj/structure/flora/bush/fullgrass/style_2, /obj/effect/turf_decal/siding/wood{ @@ -511,8 +508,7 @@ "jM" = ( /obj/structure/railing{ color = "#A47449"; - dir = 6; - layer = 3.1 + dir = 6 }, /obj/effect/turf_decal/siding/wood{ dir = 6 @@ -537,8 +533,7 @@ }, /obj/structure/railing{ color = "#A47449"; - dir = 10; - layer = 3.1 + dir = 10 }, /obj/structure/flora/bush/fullgrass, /obj/effect/turf_decal/siding/wood{ @@ -695,8 +690,7 @@ "nA" = ( /obj/structure/railing/corner{ dir = 8; - color = "#A47449"; - layer = 3.1 + color = "#A47449" }, /obj/structure/flora/rock/pile/jungle/style_3{ pixel_x = -4 @@ -739,8 +733,7 @@ "oj" = ( /obj/structure/railing{ color = "#A47449"; - dir = 10; - layer = 3.1 + dir = 10 }, /obj/effect/turf_decal/siding/wood{ dir = 10 @@ -767,8 +760,7 @@ }, /obj/structure/railing{ color = "#A47449"; - dir = 10; - layer = 3.1 + dir = 10 }, /turf/open/floor/grass, /area/shuttle/escape) @@ -819,8 +811,7 @@ "pf" = ( /obj/structure/railing{ color = "#A47449"; - dir = 6; - layer = 3.1 + dir = 6 }, /obj/effect/turf_decal/siding/wood{ dir = 6 @@ -1013,8 +1004,7 @@ }, /obj/structure/railing{ color = "#A47449"; - dir = 6; - layer = 3.1 + dir = 6 }, /obj/effect/turf_decal/siding/wood{ dir = 6 @@ -1058,9 +1048,7 @@ /area/shuttle/escape) "uR" = ( /obj/effect/turf_decal/siding/wood, -/obj/structure/railing{ - layer = 3.1 - }, +/obj/structure/railing, /turf/open/floor/wood/large, /area/shuttle/escape) "uT" = ( @@ -1211,16 +1199,14 @@ dir = 4 }, /obj/structure/railing{ - dir = 4; - layer = 4.1 + dir = 4 }, /turf/open/floor/wood, /area/shuttle/escape) "ya" = ( /obj/structure/railing/corner{ dir = 8; - color = "#A47449"; - layer = 3.1 + color = "#A47449" }, /obj/structure/flora/bush/large/style_2{ pixel_x = -6; @@ -1283,8 +1269,7 @@ }, /obj/structure/railing{ color = "#A47449"; - dir = 6; - layer = 3.1 + dir = 6 }, /obj/effect/turf_decal/weather/dirt{ dir = 5 @@ -1315,8 +1300,7 @@ dir = 4 }, /obj/structure/railing{ - dir = 4; - layer = 4.1 + dir = 4 }, /obj/effect/turf_decal/siding/wood/corner{ dir = 8 @@ -1515,8 +1499,7 @@ "Ci" = ( /obj/structure/railing{ color = "#A47449"; - dir = 6; - layer = 3.1 + dir = 6 }, /obj/effect/turf_decal/siding/wood{ dir = 6 @@ -1563,8 +1546,7 @@ }, /obj/structure/railing{ color = "#A47449"; - dir = 2; - layer = 3.1 + dir = 2 }, /obj/machinery/chem_master/condimaster{ desc = "Used to separate out liquids - useful for purifying botanical extracts. Also dispenses condiments."; @@ -1796,9 +1778,7 @@ /turf/open/floor/iron/dark/small, /area/shuttle/escape) "Hq" = ( -/obj/structure/railing{ - layer = 3.1 - }, +/obj/structure/railing, /obj/effect/turf_decal/siding/dark, /obj/effect/turf_decal/trimline/blue/line, /turf/open/floor/iron/dark/small, @@ -1944,9 +1924,7 @@ /turf/open/water, /area/shuttle/escape) "Kk" = ( -/obj/structure/railing{ - layer = 3.1 - }, +/obj/structure/railing, /obj/effect/turf_decal/siding/dark, /obj/effect/turf_decal/trimline/blue/line, /obj/machinery/light/floor, @@ -2011,8 +1989,7 @@ }, /obj/structure/railing{ color = "#A47449"; - dir = 4; - layer = 3.2 + dir = 4 }, /obj/structure/flora/bush/flowers_pp, /obj/structure/flora/bush/flowers_pp/style_2, @@ -2122,8 +2099,7 @@ /obj/structure/flora/bush/fullgrass/style_random, /obj/structure/railing{ color = "#A47449"; - dir = 8; - layer = 3.2 + dir = 8 }, /turf/open/floor/grass, /area/shuttle/escape) @@ -2176,8 +2152,7 @@ "Oj" = ( /obj/structure/railing{ color = "#A47449"; - dir = 10; - layer = 3.1 + dir = 10 }, /obj/effect/turf_decal/siding/wood{ dir = 10 @@ -2357,8 +2332,7 @@ /obj/structure/table/wood, /obj/item/flashlight/lamp/green{ pixel_x = 7; - pixel_y = 14; - layer = 3.1 + pixel_y = 14 }, /obj/item/paper_bin{ pixel_x = -5; @@ -2377,15 +2351,11 @@ /area/shuttle/escape) "Sl" = ( /obj/effect/turf_decal/siding/wood, -/obj/structure/railing{ - layer = 3.1 - }, +/obj/structure/railing, /turf/open/floor/wood/tile, /area/shuttle/escape) "St" = ( -/obj/structure/railing{ - layer = 3.1 - }, +/obj/structure/railing, /obj/machinery/computer/communications{ dir = 8 }, @@ -2454,7 +2424,6 @@ /area/shuttle/escape) "Tw" = ( /obj/structure/statue/sandstone/venus{ - layer = 4; anchored = 1 }, /turf/open/floor/wood, @@ -2540,8 +2509,7 @@ /obj/effect/turf_decal/siding/wood, /obj/structure/railing{ color = "#A47449"; - dir = 2; - layer = 3.1 + dir = 2 }, /obj/machinery/microwave, /obj/structure/table/wood, diff --git a/_maps/shuttles/emergency_venture.dmm b/_maps/shuttles/emergency_venture.dmm index 6b72f22dc295a..29ad2a695d191 100644 --- a/_maps/shuttles/emergency_venture.dmm +++ b/_maps/shuttles/emergency_venture.dmm @@ -647,7 +647,6 @@ /area/shuttle/escape) "Jz" = ( /obj/structure/tank_dispenser/oxygen{ - layer = 2.7; pixel_x = -1; pixel_y = 2 }, diff --git a/_maps/shuttles/emergency_wawa.dmm b/_maps/shuttles/emergency_wawa.dmm new file mode 100644 index 0000000000000..458ffa8a17902 --- /dev/null +++ b/_maps/shuttles/emergency_wawa.dmm @@ -0,0 +1,1099 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"aa" = ( +/turf/template_noop, +/area/template_noop) +"ac" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/decal/cleanable/blood/old, +/turf/open/floor/mineral/plastitanium/red, +/area/shuttle/escape/brig) +"ad" = ( +/obj/machinery/door/poddoor/preopen{ + id = "dont close or i will kill you" + }, +/obj/machinery/door/airlock/external/glass, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "es4" + }, +/turf/open/floor/catwalk_floor, +/area/shuttle/escape) +"ae" = ( +/obj/structure/girder/reinforced, +/obj/effect/spawner/structure/window/hollow/reinforced/middle{ + dir = 1 + }, +/turf/open/floor/plating, +/area/shuttle/escape) +"af" = ( +/obj/machinery/conveyor/auto{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/shuttle/escape) +"ag" = ( +/obj/structure/girder/reinforced, +/obj/structure/window/reinforced/spawner/directional/north, +/obj/structure/grille/broken, +/obj/effect/decal/cleanable/glass, +/turf/open/floor/plating, +/area/shuttle/escape/brig) +"ah" = ( +/obj/structure/girder/reinforced, +/obj/effect/spawner/structure/window/hollow/reinforced/middle{ + dir = 1 + }, +/turf/open/floor/plating, +/area/shuttle/escape/brig) +"ai" = ( +/obj/structure/table, +/obj/item/restraints/handcuffs, +/obj/item/restraints/handcuffs, +/obj/effect/decal/cleanable/glass, +/obj/item/restraints/handcuffs{ + pixel_x = 12; + pixel_y = 6 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/mineral/plastitanium/red, +/area/shuttle/escape/brig) +"al" = ( +/turf/closed/wall/r_wall, +/area/shuttle/escape/brig) +"am" = ( +/obj/structure/table, +/obj/machinery/recharger, +/obj/effect/decal/cleanable/blood/old, +/obj/item/book/manual/wiki/security_space_law{ + pixel_x = 12 + }, +/obj/effect/decal/cleanable/glass, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/mineral/plastitanium/red, +/area/shuttle/escape/brig) +"an" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/turf_decal/siding/dark_blue{ + dir = 5 + }, +/turf/open/floor/iron, +/area/shuttle/escape) +"ao" = ( +/obj/machinery/computer/crew, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/grimy, +/area/shuttle/escape) +"ap" = ( +/obj/machinery/computer/emergency_shuttle, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/grimy, +/area/shuttle/escape) +"aq" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 4 + }, +/obj/effect/decal/cleanable/blood/old, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/mineral/plastitanium/red, +/area/shuttle/escape/brig) +"ar" = ( +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/mineral/plastitanium/red, +/area/shuttle/escape/brig) +"as" = ( +/obj/machinery/conveyor/auto{ + dir = 8 + }, +/obj/machinery/light/small/dim/directional/north, +/turf/open/floor/plating, +/area/shuttle/escape) +"at" = ( +/obj/structure/lattice, +/obj/structure/marker_beacon/burgundy, +/turf/template_noop, +/area/shuttle/escape) +"au" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 1 + }, +/turf/open/floor/iron/grimy, +/area/shuttle/escape) +"ay" = ( +/obj/structure/girder/reinforced, +/obj/effect/spawner/structure/window/hollow/reinforced/middle{ + dir = 4 + }, +/turf/open/floor/plating, +/area/shuttle/escape/brig) +"aA" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/engine, +/area/shuttle/escape) +"aC" = ( +/obj/effect/turf_decal/tile/yellow/opposingcorners{ + dir = 8 + }, +/obj/machinery/light/warm/directional/north, +/obj/structure/chair/comfy/shuttle, +/turf/open/floor/iron/checker, +/area/shuttle/escape) +"aE" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 1 + }, +/obj/structure/window/spawner/directional/south, +/turf/open/floor/iron/grimy, +/area/shuttle/escape) +"aG" = ( +/turf/open/floor/mineral/plastitanium/red, +/area/shuttle/escape/brig) +"aH" = ( +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron, +/area/shuttle/escape/brig) +"aI" = ( +/obj/machinery/door/airlock/external, +/obj/effect/mapping_helpers/airlock/access/all/security/general, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "es1" + }, +/turf/open/floor/catwalk_floor, +/area/shuttle/escape/brig) +"aJ" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron, +/area/shuttle/escape) +"aK" = ( +/obj/machinery/light/small/dim/directional/north, +/turf/open/floor/catwalk_floor, +/area/shuttle/escape) +"aM" = ( +/obj/machinery/light/warm/directional/north, +/obj/effect/turf_decal/stripes/line, +/obj/structure/chair/comfy/shuttle, +/turf/open/floor/engine, +/area/shuttle/escape) +"aP" = ( +/obj/docking_port/mobile/emergency{ + name = "Wawa stand-in emergency shuttle" + }, +/obj/machinery/door/airlock/external, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "es2" + }, +/turf/open/floor/catwalk_floor, +/area/shuttle/escape) +"aQ" = ( +/obj/machinery/door/airlock/external/glass, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "es2" + }, +/turf/open/floor/catwalk_floor, +/area/shuttle/escape) +"aR" = ( +/obj/machinery/conveyor/auto/inverted{ + dir = 5 + }, +/turf/open/floor/plating, +/area/shuttle/escape) +"aV" = ( +/obj/machinery/door/poddoor/preopen{ + id = "dont close or i will kill you" + }, +/obj/machinery/conveyor/auto{ + dir = 4 + }, +/obj/structure/fans/tiny/shield{ + max_integrity = 400; + name = "recycling shield" + }, +/turf/open/floor/plating, +/area/shuttle/escape) +"aW" = ( +/obj/machinery/recycler{ + dir = 8 + }, +/obj/machinery/conveyor/auto{ + dir = 4 + }, +/turf/open/floor/plating, +/area/shuttle/escape) +"aX" = ( +/obj/machinery/conveyor/auto, +/turf/open/floor/plating, +/area/shuttle/escape) +"aY" = ( +/obj/machinery/door/airlock/external, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "es4" + }, +/turf/open/floor/catwalk_floor, +/area/shuttle/escape) +"aZ" = ( +/obj/effect/turf_decal/tile/yellow/opposingcorners{ + dir = 8 + }, +/turf/open/floor/iron/checker, +/area/shuttle/escape) +"bb" = ( +/obj/machinery/conveyor/auto, +/obj/structure/plasticflaps/opaque, +/turf/open/floor/plating, +/area/shuttle/escape) +"bc" = ( +/obj/effect/turf_decal/tile/yellow/opposingcorners{ + dir = 8 + }, +/obj/structure/chair/plastic{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/checker, +/area/shuttle/escape) +"bd" = ( +/obj/machinery/conveyor/auto{ + dir = 10 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/shuttle/escape) +"be" = ( +/obj/machinery/conveyor/auto/inverted{ + dir = 1 + }, +/obj/structure/plasticflaps/opaque, +/turf/open/floor/plating, +/area/shuttle/escape) +"bf" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/item/toy/plush/lizard_plushie, +/turf/open/floor/plating, +/area/shuttle/escape) +"bg" = ( +/obj/machinery/conveyor/auto{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/light/small/dim/directional/north, +/turf/open/floor/plating, +/area/shuttle/escape) +"bj" = ( +/obj/effect/turf_decal/siding/dark_blue{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron, +/area/shuttle/escape) +"bk" = ( +/obj/machinery/power/shuttle_engine/propulsion, +/turf/open/floor/plating/airless, +/area/shuttle/escape) +"bp" = ( +/obj/effect/turf_decal/tile/yellow/opposingcorners{ + dir = 8 + }, +/obj/structure/chair/comfy/shuttle, +/turf/open/floor/iron/checker, +/area/shuttle/escape) +"bq" = ( +/turf/closed/wall/r_wall, +/area/shuttle/escape) +"br" = ( +/turf/closed/wall, +/area/shuttle/escape) +"bs" = ( +/obj/machinery/conveyor/auto{ + dir = 1 + }, +/obj/structure/plasticflaps/opaque, +/turf/open/floor/plating, +/area/shuttle/escape) +"cH" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 4 + }, +/obj/structure/broken_flooring/singular{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/shuttle/escape) +"cY" = ( +/obj/structure/window/reinforced/spawner/directional/north, +/obj/machinery/power/shuttle_engine/heater, +/turf/open/floor/plating/airless, +/area/shuttle/escape) +"dj" = ( +/obj/machinery/conveyor/auto{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/shuttle/escape) +"dC" = ( +/obj/machinery/door/airlock/external/glass, +/obj/effect/mapping_helpers/airlock/access/all/security/general, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "es1" + }, +/obj/structure/broken_flooring/side, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/shuttle/escape/brig) +"dZ" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/obj/structure/chair/comfy/shuttle, +/turf/open/floor/engine, +/area/shuttle/escape) +"ga" = ( +/obj/effect/turf_decal/tile/yellow/opposingcorners{ + dir = 8 + }, +/obj/machinery/mineral/stacking_machine{ + input_dir = 8; + output_dir = 1 + }, +/obj/structure/window/reinforced/spawner/directional/east, +/turf/open/floor/iron/checker, +/area/shuttle/escape) +"gn" = ( +/obj/effect/decal/cleanable/rubble, +/obj/effect/turf_decal/stripes/box, +/turf/open/floor/plating, +/area/shuttle/escape) +"gX" = ( +/obj/effect/turf_decal/tile/yellow/opposingcorners{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/checker, +/area/shuttle/escape) +"hq" = ( +/obj/machinery/recycler{ + dir = 4 + }, +/obj/machinery/conveyor/auto{ + dir = 8 + }, +/turf/open/floor/plating, +/area/shuttle/escape) +"hV" = ( +/obj/machinery/door/airlock/external, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "es3" + }, +/obj/effect/mapping_helpers/airlock/access/all/command/general, +/turf/open/floor/catwalk_floor, +/area/shuttle/escape) +"iN" = ( +/obj/effect/decal/cleanable/glass, +/obj/structure/chair/comfy/shuttle{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/shuttle/escape) +"jA" = ( +/obj/effect/turf_decal/tile/yellow/opposingcorners{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/checker, +/area/shuttle/escape) +"jK" = ( +/obj/machinery/light/small/dim/directional/south, +/turf/open/floor/catwalk_floor, +/area/shuttle/escape) +"ks" = ( +/obj/structure/closet/crate/medical, +/obj/item/storage/medkit/regular{ + pixel_x = 2; + pixel_y = 3 + }, +/obj/item/storage/medkit/fire, +/mob/living/basic/bot/medbot/derelict, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/grimy, +/area/shuttle/escape) +"ld" = ( +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/mineral/titanium/white, +/area/shuttle/escape) +"lI" = ( +/obj/effect/turf_decal/tile/yellow/opposingcorners{ + dir = 8 + }, +/obj/structure/window/reinforced/spawner/directional/west, +/obj/structure/closet/crate/preopen, +/turf/open/floor/iron/checker, +/area/shuttle/escape) +"lP" = ( +/obj/machinery/vending/wallmed/directional/south, +/turf/open/floor/catwalk_floor, +/area/shuttle/escape) +"mT" = ( +/obj/machinery/computer/atmos_alert{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/grimy, +/area/shuttle/escape) +"nN" = ( +/obj/effect/turf_decal/tile/yellow/opposingcorners{ + dir = 8 + }, +/obj/structure/chair/plastic, +/turf/open/floor/iron/checker, +/area/shuttle/escape) +"nZ" = ( +/obj/machinery/portable_atmospherics/canister/oxygen, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/light/warm/dim/directional/south, +/turf/open/floor/plating, +/area/shuttle/escape/brig) +"oY" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/obj/structure/chair/comfy/shuttle, +/turf/open/floor/engine, +/area/shuttle/escape) +"pQ" = ( +/obj/structure/girder/reinforced, +/obj/structure/grille/broken, +/obj/structure/window/reinforced/spawner/directional/west, +/obj/effect/decal/cleanable/glass, +/turf/open/floor/plating, +/area/shuttle/escape) +"pW" = ( +/turf/open/floor/catwalk_floor, +/area/shuttle/escape/brig) +"qJ" = ( +/obj/machinery/conveyor/auto{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/light/small/dim/directional/north, +/turf/open/floor/plating, +/area/shuttle/escape) +"qQ" = ( +/obj/structure/girder/reinforced, +/obj/effect/spawner/structure/window/hollow/reinforced/middle{ + dir = 4 + }, +/turf/open/floor/plating, +/area/shuttle/escape) +"rX" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/engine, +/area/shuttle/escape) +"sj" = ( +/obj/machinery/conveyor/auto{ + dir = 6 + }, +/turf/open/floor/plating, +/area/shuttle/escape) +"tw" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron, +/area/shuttle/escape) +"tQ" = ( +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/mineral/plastitanium/red, +/area/shuttle/escape/brig) +"uQ" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 8 + }, +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron, +/area/shuttle/escape) +"vz" = ( +/obj/structure/table, +/obj/effect/decal/cleanable/blood/old, +/obj/effect/decal/cleanable/glass, +/obj/item/restraints/handcuffs, +/turf/open/floor/mineral/plastitanium/red, +/area/shuttle/escape/brig) +"wj" = ( +/obj/effect/turf_decal/tile/yellow/opposingcorners{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/mineral/stacking_unit_console{ + pixel_y = 32 + }, +/obj/structure/chair/comfy/shuttle, +/turf/open/floor/iron/checker, +/area/shuttle/escape) +"xg" = ( +/obj/effect/spawner/structure/window/hollow/middle{ + dir = 4 + }, +/turf/open/floor/plating, +/area/shuttle/escape) +"xT" = ( +/obj/machinery/conveyor/auto{ + dir = 8 + }, +/obj/machinery/light/small/dim/directional/south, +/turf/open/floor/plating, +/area/shuttle/escape) +"xY" = ( +/obj/machinery/conveyor/auto{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/shuttle/escape) +"za" = ( +/obj/machinery/conveyor/auto{ + dir = 8 + }, +/obj/machinery/door/poddoor/preopen{ + id = "dont close or i will kill you" + }, +/obj/structure/fans/tiny/shield{ + max_integrity = 400; + name = "recycling shield" + }, +/turf/open/floor/plating, +/area/shuttle/escape) +"zT" = ( +/obj/effect/turf_decal/siding/dark_blue{ + dir = 1 + }, +/obj/structure/table, +/obj/item/storage/fancy/cigarettes/cigars/cohiba, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/light/warm/dim/directional/south, +/turf/open/floor/iron, +/area/shuttle/escape) +"Di" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/shuttle/escape) +"Dk" = ( +/obj/machinery/door/poddoor/preopen{ + id = "dont close or i will kill you" + }, +/obj/machinery/door/airlock/external/glass, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "es3" + }, +/obj/effect/mapping_helpers/airlock/access/all/command/general, +/turf/open/floor/catwalk_floor, +/area/shuttle/escape) +"DT" = ( +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/mineral/titanium/white, +/area/shuttle/escape) +"ER" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 4 + }, +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/mineral/titanium/white, +/area/shuttle/escape) +"FH" = ( +/obj/machinery/conveyor/auto{ + dir = 4 + }, +/obj/machinery/light/small/dim/directional/north, +/turf/open/floor/plating, +/area/shuttle/escape) +"FL" = ( +/obj/machinery/computer/communications, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/grimy, +/area/shuttle/escape) +"Gw" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron, +/area/shuttle/escape/brig) +"Ic" = ( +/obj/effect/mapping_helpers/airlock/access/all/security/general, +/obj/machinery/door/airlock/security/glass{ + name = "Brig" + }, +/turf/open/floor/catwalk_floor, +/area/shuttle/escape/brig) +"Iw" = ( +/obj/structure/table, +/obj/item/storage/medkit/fire, +/obj/item/storage/medkit/regular{ + pixel_x = 2; + pixel_y = 3 + }, +/obj/item/crowbar, +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/mineral/titanium/white, +/area/shuttle/escape) +"IR" = ( +/obj/machinery/conveyor/auto{ + dir = 4 + }, +/obj/machinery/light/small/dim/directional/south, +/turf/open/floor/plating, +/area/shuttle/escape) +"Lq" = ( +/obj/structure/broken_flooring/pile{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/light/small/dim/directional/north, +/turf/open/floor/plating, +/area/shuttle/escape/brig) +"LJ" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/broken_flooring/singular{ + dir = 8 + }, +/turf/open/floor/plating, +/area/shuttle/escape) +"LQ" = ( +/obj/structure/window/spawner/directional/south, +/obj/structure/chair/comfy/shuttle{ + dir = 1 + }, +/turf/open/floor/iron/grimy, +/area/shuttle/escape) +"MN" = ( +/obj/machinery/door/airlock/command/glass{ + name = "Cockpit" + }, +/obj/effect/mapping_helpers/airlock/access/all/command/general, +/turf/open/floor/catwalk_floor, +/area/shuttle/escape) +"Ne" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/mineral/titanium/white, +/area/shuttle/escape) +"ND" = ( +/obj/machinery/conveyor/auto/inverted{ + dir = 9 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/shuttle/escape) +"NW" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/broken_flooring/pile, +/turf/open/floor/plating, +/area/shuttle/escape) +"Oi" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/item/reagent_containers/pill/maintenance, +/turf/open/floor/plating, +/area/shuttle/escape) +"Oq" = ( +/obj/structure/broken_flooring/pile, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/shuttle/escape) +"Pp" = ( +/obj/machinery/stasis, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/mineral/titanium/white, +/area/shuttle/escape) +"Pw" = ( +/obj/structure/lattice, +/turf/template_noop, +/area/shuttle/escape) +"QP" = ( +/obj/machinery/conveyor/auto/inverted{ + dir = 1 + }, +/turf/open/floor/plating, +/area/shuttle/escape) +"Rm" = ( +/turf/open/floor/catwalk_floor, +/area/shuttle/escape) +"SI" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 4 + }, +/turf/open/floor/iron/grimy, +/area/shuttle/escape) +"SX" = ( +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/grimy, +/area/shuttle/escape) +"Tq" = ( +/turf/closed/wall/rust, +/area/shuttle/escape) +"Xl" = ( +/obj/machinery/stasis, +/obj/structure/broken_flooring/singular, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/shuttle/escape) +"Xw" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 1 + }, +/obj/structure/window/spawner/directional/south, +/obj/effect/turf_decal/stripes/line, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/mineral/plastitanium/red, +/area/shuttle/escape/brig) +"XE" = ( +/turf/open/floor/iron/grimy, +/area/shuttle/escape) +"Yk" = ( +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/shuttle/escape) + +(1,1,1) = {" +aa +aa +aa +aa +aa +aa +al +al +aI +bq +aP +bq +aa +aa +aa +bq +aV +bq +aV +bq +aa +aa +aa +"} +(2,1,1) = {" +aa +at +Pw +al +al +al +al +Lq +pW +bq +jK +bq +qQ +pQ +qQ +bq +FH +bq +IR +bq +bq +bq +aa +"} +(3,1,1) = {" +aa +aa +al +al +aq +aq +al +dC +al +bq +aQ +bq +LJ +iN +iN +bq +aW +bq +aW +bq +bf +bq +bq +"} +(4,1,1) = {" +aa +aa +ah +am +ar +aG +Xw +Gw +al +dZ +Rm +rX +aJ +NW +Yk +aA +sj +aX +aX +bb +ND +cY +bk +"} +(5,1,1) = {" +aa +aa +ag +ai +aG +tQ +ac +aH +Ic +Rm +Rm +aA +Yk +Yk +aJ +rX +jA +gX +bc +br +bg +cY +bk +"} +(6,1,1) = {" +aa +aa +ah +vz +aG +ar +Xw +nZ +al +oY +Rm +rX +tw +uQ +tw +bq +bp +jA +lI +Tq +af +cY +bk +"} +(7,1,1) = {" +aa +at +al +al +ay +ay +ay +al +al +aM +lP +bq +xg +xg +xg +bq +aC +jA +gn +bs +xY +cY +bk +"} +(8,1,1) = {" +aa +aa +ae +ao +SX +SX +LQ +zT +bq +dZ +Rm +aA +Di +cH +ER +bq +wj +aZ +ga +br +dj +cY +bk +"} +(9,1,1) = {" +aa +aa +ae +ap +au +XE +SX +bj +MN +Rm +Rm +aA +Oq +DT +ld +rX +aZ +gX +nN +Tq +qJ +cY +bk +"} +(10,1,1) = {" +aa +aa +ae +FL +SI +XE +aE +an +bq +oY +Rm +rX +Yk +Ne +DT +aA +aR +QP +QP +be +bd +cY +bk +"} +(11,1,1) = {" +aa +aa +bq +bq +mT +ks +bq +Dk +bq +bq +ad +bq +Xl +Iw +Pp +bq +hq +bq +hq +bq +Oi +bq +bq +"} +(12,1,1) = {" +at +Pw +Pw +bq +bq +bq +bq +aK +Rm +bq +jK +bq +qQ +qQ +qQ +bq +as +bq +xT +bq +bq +bq +aa +"} +(13,1,1) = {" +aa +aa +aa +aa +aa +aa +bq +bq +hV +bq +aY +bq +aa +aa +aa +bq +za +bq +za +bq +aa +aa +aa +"} diff --git a/_maps/shuttles/emergency_zeta.dmm b/_maps/shuttles/emergency_zeta.dmm index 399b40156ceb6..720a906a767c8 100644 --- a/_maps/shuttles/emergency_zeta.dmm +++ b/_maps/shuttles/emergency_zeta.dmm @@ -23,7 +23,7 @@ pixel_x = -10; pixel_y = 6 }, -/obj/item/stock_parts/cell/infinite/abductor{ +/obj/item/stock_parts/power_store/cell/infinite/abductor{ pixel_x = 5 }, /turf/open/floor/plating/abductor, diff --git a/_maps/shuttles/ert_bounty.dmm b/_maps/shuttles/ert_bounty.dmm index 46c6f03f11691..03be12a36a771 100644 --- a/_maps/shuttles/ert_bounty.dmm +++ b/_maps/shuttles/ert_bounty.dmm @@ -21,14 +21,34 @@ shuttle_id = "huntership" }, /obj/structure/fans/tiny, -/turf/open/floor/plating, +/turf/open/floor/pod/dark, /area/shuttle/hunter) "d" = ( -/obj/structure/sign/warning/vacuum/external, -/turf/closed/wall/mineral/plastitanium, +/obj/structure/table, +/obj/item/tape{ + pixel_y = 17; + pixel_x = -12 + }, +/obj/item/reagent_containers/cup/glass/dry_ramen{ + pixel_x = 4; + pixel_y = -4 + }, +/turf/open/floor/pod/dark, /area/shuttle/hunter) "f" = ( /obj/structure/table, +/obj/structure/sign/poster/contraband/bountyhunters/directional/north, +/obj/item/storage/toolbox/mechanical{ + pixel_y = 8 + }, +/obj/item/reagent_containers/cup/glass/coffee{ + pixel_x = 9; + pixel_y = -3 + }, +/obj/effect/spawner/random/bureaucracy/pen{ + pixel_x = -6; + pixel_y = -7 + }, /turf/open/floor/pod/light, /area/shuttle/hunter) "h" = ( @@ -37,6 +57,7 @@ /area/shuttle/hunter) "i" = ( /obj/structure/tank_dispenser/oxygen, +/obj/effect/turf_decal/stripes/full, /turf/open/floor/pod/dark, /area/shuttle/hunter) "j" = ( @@ -44,11 +65,16 @@ /turf/open/floor/pod/dark, /area/shuttle/hunter) "k" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 +/obj/structure/table/reinforced, +/obj/item/book/manual/wiki/security_space_law{ + pixel_y = 6; + pixel_x = -5 }, -/obj/machinery/light/floor, -/turf/open/floor/pod/dark, +/obj/item/grenade/chem_grenade/cleaner{ + pixel_x = 8; + pixel_y = 14 + }, +/turf/open/floor/pod/light, /area/shuttle/hunter) "l" = ( /obj/machinery/power/shuttle_engine/propulsion{ @@ -60,8 +86,9 @@ /obj/effect/turf_decal/stripes/line{ dir = 1 }, -/obj/machinery/light/small/directional/west, -/turf/open/floor/plating, +/obj/effect/mapping_helpers/airlock/cyclelink_helper, +/obj/machinery/door/airlock/external/ruin, +/turf/open/floor/pod/dark, /area/shuttle/hunter) "n" = ( /turf/closed/wall/mineral/plastitanium, @@ -70,7 +97,14 @@ /obj/effect/turf_decal/stripes/line{ dir = 1 }, -/turf/open/floor/plating, +/turf/open/floor/pod/dark, +/area/shuttle/hunter) +"q" = ( +/obj/structure/closet/crate/bin, +/obj/item/grenade/chem_grenade/glitter/pink, +/obj/item/trash/can, +/obj/item/cigbutt, +/turf/open/floor/pod/dark, /area/shuttle/hunter) "r" = ( /obj/structure/chair/office{ @@ -105,11 +139,11 @@ /turf/open/floor/plating/airless, /area/shuttle/hunter) "w" = ( -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ +/obj/effect/turf_decal/stripes/line{ dir = 1 }, -/obj/machinery/door/airlock/external/ruin, -/turf/open/floor/plating, +/obj/structure/sign/warning/vacuum/directional/west, +/turf/open/floor/pod/dark, /area/shuttle/hunter) "x" = ( /obj/structure/chair/office{ @@ -126,12 +160,15 @@ /turf/open/floor/pod/dark, /area/shuttle/hunter) "z" = ( -/obj/structure/sign/poster/contraband/bountyhunters, -/turf/closed/wall/mineral/plastitanium, +/obj/structure/table/reinforced, +/obj/item/storage/fancy/cigarettes/cigars/havana{ + pixel_y = 6 + }, +/turf/open/floor/pod/light, /area/shuttle/hunter) "A" = ( /obj/effect/turf_decal/stripes/line{ - dir = 9 + dir = 8 }, /turf/open/floor/pod/dark, /area/shuttle/hunter) @@ -141,21 +178,30 @@ /area/shuttle/hunter) "D" = ( /obj/machinery/power/smes, +/obj/effect/turf_decal/stripes/full, /turf/open/floor/pod/dark, /area/shuttle/hunter) "E" = ( /obj/structure/table, -/obj/item/phone, +/obj/item/food/donut/plain{ + pixel_y = -10; + pixel_x = -4 + }, +/obj/item/reagent_containers/cup/glass/dry_ramen{ + pixel_x = -4; + pixel_y = 15 + }, /turf/open/floor/pod/dark, /area/shuttle/hunter) "F" = ( /obj/effect/mapping_helpers/airlock/cyclelink_helper, /obj/machinery/door/airlock/external/ruin, /obj/structure/fans/tiny, -/turf/open/floor/plating, +/turf/open/floor/pod/dark, /area/shuttle/hunter) "G" = ( -/turf/open/floor/plating, +/obj/machinery/light/small/directional/west, +/turf/open/floor/pod/dark, /area/shuttle/hunter) "H" = ( /obj/machinery/computer/camera_advanced/shuttle_docker/syndicate/hunter{ @@ -172,8 +218,11 @@ /area/shuttle/hunter) "J" = ( /obj/effect/turf_decal/stripes/line, -/obj/machinery/light/small/directional/west, -/turf/open/floor/plating, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 1 + }, +/obj/machinery/door/airlock/external/ruin, +/turf/open/floor/pod/dark, /area/shuttle/hunter) "K" = ( /obj/structure/chair/office{ @@ -198,24 +247,52 @@ /area/shuttle/hunter) "P" = ( /obj/structure/table, +/obj/item/toy/cards/deck{ + pixel_y = 3; + pixel_x = -3 + }, +/obj/item/multitool{ + pixel_x = 10; + pixel_y = 5 + }, /turf/open/floor/pod/dark, /area/shuttle/hunter) "Q" = ( -/obj/effect/mapping_helpers/airlock/cyclelink_helper, -/obj/machinery/door/airlock/external/ruin, -/turf/open/floor/plating, +/obj/effect/turf_decal/stripes/line, +/obj/structure/sign/warning/vacuum/directional/west, +/turf/open/floor/pod/dark, /area/shuttle/hunter) "R" = ( /obj/structure/table, /obj/item/binoculars, +/obj/item/reagent_containers/cup/glass/coffee{ + pixel_y = 16; + pixel_x = -7 + }, /turf/open/floor/pod/dark, /area/shuttle/hunter) "S" = ( +/obj/structure/table/reinforced, +/obj/item/paper{ + pixel_y = 2; + pixel_x = 2 + }, +/obj/item/paper{ + pixel_y = 5; + pixel_x = -4 + }, +/obj/item/stamp/centcom{ + pixel_x = 6; + pixel_y = 5 + }, +/obj/item/pen/fourcolor{ + pixel_x = -4 + }, /turf/open/floor/pod/light, /area/shuttle/hunter) "T" = ( /obj/effect/turf_decal/stripes/line, -/turf/open/floor/plating, +/turf/open/floor/pod/dark, /area/shuttle/hunter) "V" = ( /obj/machinery/computer/camera_advanced{ @@ -226,30 +303,40 @@ "X" = ( /obj/structure/rack, /obj/item/grenade/c4{ - pixel_x = -1; - pixel_y = 1 + pixel_x = -4; + pixel_y = 3 }, /obj/item/grenade/c4{ - pixel_x = -6; - pixel_y = 7 + pixel_x = 3; + pixel_y = 1 }, /obj/item/grenade/c4{ - pixel_x = 7; - pixel_y = -5 + pixel_x = 11; + pixel_y = -1 }, +/obj/effect/turf_decal/stripes/full, /turf/open/floor/pod/dark, /area/shuttle/hunter) "Y" = ( /obj/structure/table, -/obj/item/storage/toolbox/mechanical, /obj/machinery/light/small/directional/north, +/obj/item/phone{ + pixel_x = 8; + pixel_y = 7 + }, +/obj/item/cigbutt/cigarbutt{ + pixel_x = 7; + pixel_y = -10 + }, +/obj/item/paper_bin{ + pixel_x = -9; + pixel_y = 6 + }, /turf/open/floor/pod/light, /area/shuttle/hunter) "Z" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 10 - }, -/turf/open/floor/pod/dark, +/obj/structure/bookcase/random/reference, +/turf/open/floor/pod/light, /area/shuttle/hunter) (1,1,1) = {" @@ -330,15 +417,15 @@ n (6,1,1) = {" n n -d n n -O -O -O +n +A +A +A +n n n -d n n "} @@ -348,9 +435,9 @@ p G J w -A -k -Z +O +B +O Q m G @@ -363,9 +450,9 @@ n h n n -j -j -j +q +O +O n n h @@ -391,7 +478,7 @@ a a a h -z +n f E P @@ -408,7 +495,7 @@ a a n Y -P +d R O t @@ -436,13 +523,13 @@ a a a a -h n -j -j +n +n +n j n -h +n a a a @@ -452,11 +539,11 @@ a a a h -S +Z O B O -S +k h a a @@ -471,7 +558,7 @@ S u I u -S +z h a a diff --git a/_maps/shuttles/ferry_lighthouse.dmm b/_maps/shuttles/ferry_lighthouse.dmm index 18197d61f1401..b5bb7186693e8 100644 --- a/_maps/shuttles/ferry_lighthouse.dmm +++ b/_maps/shuttles/ferry_lighthouse.dmm @@ -192,8 +192,7 @@ "bb" = ( /obj/machinery/conveyor{ dir = 1; - id = "garbage"; - layer = 2.5 + id = "garbage" }, /turf/open/floor/wood, /area/shuttle/transport) diff --git a/_maps/shuttles/hunter_mi13_foodtruck.dmm b/_maps/shuttles/hunter_mi13_foodtruck.dmm new file mode 100644 index 0000000000000..9b42fab671f61 --- /dev/null +++ b/_maps/shuttles/hunter_mi13_foodtruck.dmm @@ -0,0 +1,998 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"aa" = ( +/obj/effect/spawner/structure/window/reinforced/shuttle, +/obj/machinery/door/poddoor/shutters{ + id = "foodtruck_backroom_shutters"; + dir = 4 + }, +/turf/open/floor/plating, +/area/shuttle/hunter/mi13_foodtruck) +"ab" = ( +/obj/machinery/computer/operating{ + dir = 1 + }, +/turf/open/floor/circuit/red/off, +/area/shuttle/hunter/mi13_foodtruck) +"af" = ( +/obj/structure/table/reinforced/plastitaniumglass, +/obj/item/surgery_tray/full, +/obj/structure/sign/poster/contraband/hacking_guide/directional/south, +/turf/open/floor/circuit/red/off, +/area/shuttle/hunter/mi13_foodtruck) +"ag" = ( +/obj/structure/tank_dispenser/oxygen, +/obj/structure/cable/layer1, +/turf/open/floor/circuit/red/off, +/area/shuttle/hunter/mi13_foodtruck) +"ah" = ( +/obj/effect/mapping_helpers/airlock/cutaiwire, +/obj/effect/mapping_helpers/airlock/access/any/syndicate/general, +/obj/machinery/door/airlock/vault{ + normalspeed = 0; + name = "Secure Door"; + desc = "An imposing looking door. It looks reinforced." + }, +/turf/open/floor/mineral/plastitanium, +/area/shuttle/hunter/mi13_foodtruck) +"aj" = ( +/obj/machinery/power/shuttle_engine/heater, +/turf/closed/wall/mineral/titanium, +/area/shuttle/hunter/mi13_foodtruck) +"al" = ( +/obj/structure/railing{ + dir = 4 + }, +/turf/open/floor/mineral/titanium, +/area/shuttle/hunter/mi13_foodtruck) +"ao" = ( +/obj/structure/sign/poster/contraband/bountyhunters/directional/north, +/turf/open/floor/mineral/titanium, +/area/shuttle/hunter/mi13_foodtruck) +"bY" = ( +/turf/open/floor/iron/kitchen/small, +/area/shuttle/hunter/mi13_foodtruck) +"cm" = ( +/obj/structure/lattice, +/obj/structure/marker_beacon/burgundy, +/turf/template_noop, +/area/shuttle/hunter/mi13_foodtruck) +"dg" = ( +/obj/structure/closet/secure_closet/freezer/empty, +/obj/machinery/light/dim/directional/east, +/obj/item/food/fries{ + pixel_x = -2; + pixel_y = -8 + }, +/obj/item/food/fries{ + pixel_y = -11 + }, +/obj/item/food/fries{ + pixel_x = 3; + pixel_y = -7 + }, +/obj/item/food/fries{ + pixel_x = -3; + pixel_y = -3 + }, +/obj/item/food/fries{ + pixel_x = -3 + }, +/obj/item/food/fries{ + pixel_x = 5; + pixel_y = -2 + }, +/obj/item/food/burger/cheese{ + pixel_y = 7; + pixel_x = -5 + }, +/obj/item/food/burger/cheese{ + pixel_y = 7; + pixel_x = 5 + }, +/obj/item/food/fishandchips{ + pixel_y = -8 + }, +/turf/open/floor/iron/kitchen/small, +/area/shuttle/hunter/mi13_foodtruck) +"dB" = ( +/obj/machinery/vending/clothing, +/obj/structure/sign/poster/official/high_class_martini/directional/north, +/turf/open/floor/circuit/red/off, +/area/shuttle/hunter/mi13_foodtruck) +"dC" = ( +/obj/structure/table/reinforced/plastitaniumglass, +/obj/item/binoculars{ + pixel_y = 10 + }, +/obj/item/traitor_bug{ + pixel_y = 6; + pixel_x = 6 + }, +/obj/item/traitor_bug{ + pixel_y = 3; + pixel_x = -5 + }, +/obj/item/storage/box/zipties{ + pixel_y = -4; + pixel_x = 4 + }, +/turf/open/floor/circuit/red/off, +/area/shuttle/hunter/mi13_foodtruck) +"dJ" = ( +/obj/machinery/computer/records/security/syndie, +/turf/open/floor/circuit/red/off, +/area/shuttle/hunter/mi13_foodtruck) +"eA" = ( +/obj/machinery/vending/medical/syndicate_access/cybersun, +/obj/machinery/airalarm/directional/west, +/obj/effect/mapping_helpers/airalarm/syndicate_access, +/turf/open/floor/circuit/red/off, +/area/shuttle/hunter/mi13_foodtruck) +"eP" = ( +/obj/structure/table/reinforced/plastitaniumglass, +/obj/machinery/light/dim/directional/north, +/obj/structure/cable/layer1, +/obj/machinery/button/door{ + id = "foodtruck_right_window"; + pixel_x = 6; + name = "SHUTTERS - R" + }, +/obj/machinery/button/door{ + id = "foodtruck_left_window"; + pixel_x = -6; + name = "SHUTTERS - L" + }, +/obj/item/reagent_containers/cup/glass/mug/tea{ + pixel_x = 8; + pixel_y = -9 + }, +/turf/open/floor/circuit/red/off, +/area/shuttle/hunter/mi13_foodtruck) +"fo" = ( +/obj/effect/turf_decal/siding/dark_red{ + dir = 4 + }, +/turf/open/floor/mineral/plastitanium, +/area/shuttle/hunter/mi13_foodtruck) +"gc" = ( +/obj/structure/closet/crate/cardboard/mothic, +/obj/item/storage/box/mothic_rations{ + pixel_x = -6; + pixel_y = 7 + }, +/obj/item/storage/box/mothic_rations{ + pixel_x = 8; + pixel_y = 7 + }, +/obj/item/storage/box/mothic_rations{ + pixel_x = -6; + pixel_y = -1 + }, +/obj/item/storage/box/mothic_rations{ + pixel_x = 8; + pixel_y = -1 + }, +/obj/item/poster/random_contraband{ + poster_type = /obj/structure/sign/poster/contraband/mothic_rations; + name = "mothic ration poster"; + desc = "A rolled up poster."; + pixel_y = 7 + }, +/turf/open/floor/mineral/plastitanium, +/area/shuttle/hunter/mi13_foodtruck) +"gs" = ( +/obj/structure/cable/layer1, +/obj/effect/turf_decal/siding/dark_red{ + dir = 4 + }, +/obj/effect/turf_decal/siding/dark_red{ + dir = 8 + }, +/turf/open/floor/mineral/plastitanium, +/area/shuttle/hunter/mi13_foodtruck) +"gv" = ( +/obj/structure/closet/crate/freezer, +/obj/machinery/button/door/directional/west{ + name = "External Shutter Switch"; + id = "foodtruck_backroom_shutters" + }, +/obj/item/pizzabox/margherita{ + pixel_y = 5 + }, +/obj/item/food/burrito{ + pixel_x = -9; + pixel_y = 2 + }, +/obj/item/food/burrito{ + pixel_x = -1; + pixel_y = 2 + }, +/obj/item/food/burrito{ + pixel_x = 8; + pixel_y = 2 + }, +/turf/open/floor/mineral/plastitanium, +/area/shuttle/hunter/mi13_foodtruck) +"hB" = ( +/obj/machinery/power/shuttle_engine/propulsion, +/turf/template_noop, +/area/shuttle/hunter/mi13_foodtruck) +"iO" = ( +/obj/structure/noticeboard/directional/north, +/turf/open/floor/mineral/titanium, +/area/shuttle/hunter/mi13_foodtruck) +"jb" = ( +/obj/machinery/light/dim/directional/south, +/obj/structure/cable/layer1, +/obj/effect/turf_decal/siding/dark_red{ + dir = 1 + }, +/obj/machinery/power/terminal{ + dir = 1; + cable_layer = 1 + }, +/turf/open/floor/mineral/plastitanium, +/area/shuttle/hunter/mi13_foodtruck) +"jc" = ( +/obj/machinery/light/floor, +/obj/structure/table/reinforced, +/obj/structure/railing{ + dir = 4 + }, +/obj/effect/turf_decal/siding/dark{ + dir = 4 + }, +/turf/open/floor/mineral/titanium, +/area/shuttle/hunter/mi13_foodtruck) +"jw" = ( +/obj/structure/closet/cardboard, +/obj/structure/cable/layer1, +/obj/item/cardboard_cutout, +/obj/item/cardboard_cutout, +/obj/item/cardboard_cutout, +/obj/item/cardboard_cutout, +/obj/item/storage/crayons, +/obj/item/soap/syndie{ + pixel_y = -7 + }, +/obj/item/mop{ + pixel_y = 2; + pixel_x = 4 + }, +/obj/effect/spawner/random/trash/bucket, +/turf/open/floor/circuit/red/off, +/area/shuttle/hunter/mi13_foodtruck) +"jA" = ( +/obj/effect/turf_decal/siding/dark_red/corner, +/obj/item/storage/toolbox/syndicate, +/obj/effect/turf_decal/siding/dark_red{ + dir = 1 + }, +/turf/open/floor/mineral/plastitanium, +/area/shuttle/hunter/mi13_foodtruck) +"kf" = ( +/obj/effect/turf_decal/box, +/turf/closed/wall/mineral/titanium/nodiagonal, +/area/shuttle/hunter/mi13_foodtruck) +"kj" = ( +/obj/structure/table/reinforced/plastitaniumglass, +/obj/item/ammo_box/c9mm{ + pixel_x = 5; + pixel_y = 8 + }, +/obj/item/ammo_box/magazine/m9mm/ap{ + pixel_x = -7 + }, +/obj/item/ammo_box/magazine/m9mm/ap, +/obj/item/ammo_box/magazine/m9mm/ap{ + pixel_x = 7 + }, +/obj/effect/turf_decal/siding/dark_red{ + dir = 1 + }, +/turf/open/floor/circuit/red/off, +/area/shuttle/hunter/mi13_foodtruck) +"ku" = ( +/turf/closed/wall/mineral/titanium/nodiagonal, +/area/shuttle/hunter/mi13_foodtruck) +"kv" = ( +/obj/machinery/door/window/brigdoor/right/directional/east{ + req_access = list("syndicate") + }, +/obj/effect/turf_decal/caution/stand_clear{ + dir = 8 + }, +/obj/effect/turf_decal/bot, +/obj/effect/turf_decal/siding/dark{ + dir = 4 + }, +/obj/effect/turf_decal/siding/dark{ + dir = 4 + }, +/turf/open/floor/mineral/titanium, +/area/shuttle/hunter/mi13_foodtruck) +"lp" = ( +/obj/effect/turf_decal/siding/dark_red{ + dir = 4 + }, +/obj/effect/turf_decal/siding/dark_red{ + dir = 8 + }, +/turf/open/floor/mineral/plastitanium, +/area/shuttle/hunter/mi13_foodtruck) +"lX" = ( +/obj/structure/table/reinforced/plastitaniumglass, +/obj/structure/sign/poster/contraband/kss13/directional/north, +/obj/machinery/reagentgrinder, +/turf/open/floor/circuit/red/off, +/area/shuttle/hunter/mi13_foodtruck) +"mT" = ( +/obj/machinery/power/smes/magical{ + cable_layer = 1; + name = "cybersun power storage unit"; + desc = "A high-capacity superconducting magnetic energy storage (SMES) unit. Produces power via a top-secret method." + }, +/obj/structure/cable/layer1, +/turf/open/floor/circuit/red, +/area/shuttle/hunter/mi13_foodtruck) +"nh" = ( +/obj/structure/sign/poster/ripped/directional/south, +/turf/open/floor/mineral/titanium, +/area/shuttle/hunter/mi13_foodtruck) +"oA" = ( +/obj/structure/railing{ + dir = 8 + }, +/obj/effect/turf_decal/arrows{ + pixel_y = 16 + }, +/turf/open/floor/mineral/titanium, +/area/shuttle/hunter/mi13_foodtruck) +"pQ" = ( +/obj/structure/cable/layer1, +/obj/machinery/computer/shuttle/hunter{ + req_access = list("syndicate") + }, +/turf/open/floor/circuit/red/off, +/area/shuttle/hunter/mi13_foodtruck) +"pU" = ( +/obj/structure/chair/comfy/shuttle/tactical{ + dir = 4 + }, +/obj/effect/turf_decal/siding/dark_red/end{ + dir = 4 + }, +/turf/open/floor/mineral/plastitanium, +/area/shuttle/hunter/mi13_foodtruck) +"pZ" = ( +/obj/structure/railing/corner{ + dir = 1 + }, +/turf/open/floor/mineral/titanium, +/area/shuttle/hunter/mi13_foodtruck) +"sN" = ( +/obj/structure/table/reinforced, +/obj/machinery/computer/security/telescreen/entertainment/directional/north, +/obj/structure/railing{ + dir = 4 + }, +/obj/item/reagent_containers/condiment/vinegar{ + pixel_y = 9 + }, +/obj/item/reagent_containers/condiment/mayonnaise{ + pixel_x = 5; + pixel_y = 6 + }, +/obj/item/reagent_containers/condiment/ketchup{ + pixel_x = -5; + pixel_y = 6 + }, +/obj/item/reagent_containers/condiment/saltshaker{ + pixel_x = -2; + pixel_y = -3 + }, +/obj/item/reagent_containers/condiment/peppermill{ + pixel_y = -4; + pixel_x = 4 + }, +/obj/effect/turf_decal/siding/dark{ + dir = 4 + }, +/turf/open/floor/mineral/titanium, +/area/shuttle/hunter/mi13_foodtruck) +"te" = ( +/obj/structure/fans/tiny, +/obj/docking_port/stationary{ + dir = 4; + dwidth = 7; + height = 15; + name = "Deep Space"; + shuttle_id = "huntership_home"; + width = 13 + }, +/obj/docking_port/mobile{ + name = "food truck"; + rechargeTime = 1800; + dir = 4; + shuttle_id = "huntership"; + port_direction = 8 + }, +/obj/effect/turf_decal/stripes{ + dir = 8 + }, +/obj/machinery/door/poddoor/shutters{ + id = "foodtruck_shutters"; + dir = 8 + }, +/turf/open/floor/plating, +/area/shuttle/hunter/mi13_foodtruck) +"tW" = ( +/obj/structure/table/optable, +/turf/open/floor/circuit/red/off, +/area/shuttle/hunter/mi13_foodtruck) +"ua" = ( +/obj/structure/sign/poster/contraband/donk_co/directional/south, +/turf/open/floor/mineral/titanium, +/area/shuttle/hunter/mi13_foodtruck) +"ui" = ( +/obj/structure/table/reinforced, +/obj/item/food/classic_hard_shell_taco{ + pixel_x = 2; + pixel_y = 10 + }, +/obj/item/food/classic_hard_shell_taco{ + pixel_y = 8 + }, +/obj/item/food/classic_hard_shell_taco{ + pixel_y = 6; + pixel_x = -2 + }, +/obj/item/food/classic_hard_shell_taco{ + pixel_y = 4; + pixel_x = -4 + }, +/obj/item/food/classic_hard_shell_taco{ + pixel_y = 2; + pixel_x = -6 + }, +/obj/item/food/classic_hard_shell_taco{ + pixel_x = -8 + }, +/obj/structure/sign/poster/contraband/eat/directional/east, +/turf/open/floor/iron/kitchen/small, +/area/shuttle/hunter/mi13_foodtruck) +"uq" = ( +/obj/effect/mob_spawn/ghost_role/human/fugitive/mi13/chef{ + dir = 4 + }, +/turf/open/floor/circuit/red/off, +/area/shuttle/hunter/mi13_foodtruck) +"we" = ( +/obj/machinery/power/apc/auto_name/directional/south{ + cable_layer = 1 + }, +/obj/structure/cable/layer1, +/obj/effect/turf_decal/siding/dark_red/corner{ + dir = 4 + }, +/obj/effect/turf_decal/siding/dark_red/corner{ + dir = 1 + }, +/obj/effect/mapping_helpers/apc/syndicate_access, +/turf/open/floor/mineral/plastitanium, +/area/shuttle/hunter/mi13_foodtruck) +"wA" = ( +/obj/structure/lattice/catwalk, +/turf/template_noop, +/area/shuttle/hunter/mi13_foodtruck) +"xg" = ( +/obj/structure/chair/comfy/shuttle/tactical{ + dir = 1 + }, +/obj/structure/cable/layer1, +/obj/effect/turf_decal/siding/dark_red/end{ + dir = 1 + }, +/turf/open/floor/mineral/plastitanium, +/area/shuttle/hunter/mi13_foodtruck) +"xG" = ( +/obj/structure/railing/corner{ + dir = 8 + }, +/turf/open/floor/mineral/titanium, +/area/shuttle/hunter/mi13_foodtruck) +"zJ" = ( +/obj/effect/turf_decal/siding/dark_red{ + dir = 1 + }, +/turf/open/floor/mineral/plastitanium, +/area/shuttle/hunter/mi13_foodtruck) +"Ak" = ( +/obj/machinery/computer/camera_advanced/shuttle_docker/syndicate/hunter{ + x_offset = -6; + y_offset = -7 + }, +/obj/structure/cable/layer1, +/turf/open/floor/circuit/red/off, +/area/shuttle/hunter/mi13_foodtruck) +"Am" = ( +/obj/structure/lattice, +/turf/template_noop, +/area/shuttle/hunter/mi13_foodtruck) +"An" = ( +/obj/effect/spawner/structure/window/reinforced/shuttle, +/obj/structure/cable/layer1, +/obj/machinery/door/poddoor{ + id = "foodtruck_right_window" + }, +/turf/open/floor/plating, +/area/shuttle/hunter/mi13_foodtruck) +"Ay" = ( +/obj/effect/turf_decal/siding/dark_red{ + dir = 1 + }, +/obj/effect/turf_decal/siding/dark_red, +/turf/open/floor/mineral/plastitanium, +/area/shuttle/hunter/mi13_foodtruck) +"AF" = ( +/obj/structure/fans/tiny, +/obj/machinery/door/poddoor/shutters{ + id = "foodtruck_shutters"; + dir = 8 + }, +/obj/effect/turf_decal/stripes{ + dir = 8 + }, +/turf/open/floor/plating, +/area/shuttle/hunter/mi13_foodtruck) +"AP" = ( +/obj/effect/turf_decal/arrows, +/obj/structure/railing{ + dir = 8 + }, +/turf/open/floor/mineral/titanium, +/area/shuttle/hunter/mi13_foodtruck) +"Bn" = ( +/obj/machinery/computer/crew/syndie, +/turf/open/floor/circuit/red, +/area/shuttle/hunter/mi13_foodtruck) +"CF" = ( +/obj/structure/fans/tiny, +/obj/effect/turf_decal/stripes{ + dir = 8 + }, +/obj/machinery/door/poddoor/shutters{ + id = "foodtruck_shutters"; + dir = 8 + }, +/turf/open/floor/plating, +/area/shuttle/hunter/mi13_foodtruck) +"CY" = ( +/obj/machinery/deepfryer, +/obj/structure/noticeboard/directional/north, +/turf/open/floor/iron/kitchen/small, +/area/shuttle/hunter/mi13_foodtruck) +"Dp" = ( +/obj/effect/turf_decal/arrows{ + dir = 8; + pixel_x = 16 + }, +/obj/structure/railing/corner{ + dir = 4 + }, +/turf/open/floor/mineral/titanium, +/area/shuttle/hunter/mi13_foodtruck) +"Ev" = ( +/obj/effect/spawner/structure/window/reinforced/shuttle, +/obj/structure/cable/layer1, +/obj/machinery/door/poddoor{ + id = "foodtruck_left_window" + }, +/turf/open/floor/plating, +/area/shuttle/hunter/mi13_foodtruck) +"Ff" = ( +/obj/effect/turf_decal/siding/dark_red, +/obj/effect/turf_decal/siding/dark_red{ + dir = 1 + }, +/turf/open/floor/mineral/plastitanium, +/area/shuttle/hunter/mi13_foodtruck) +"Fv" = ( +/obj/machinery/light/dim/directional/west, +/obj/effect/turf_decal/siding/dark_red{ + dir = 4 + }, +/turf/open/floor/mineral/plastitanium, +/area/shuttle/hunter/mi13_foodtruck) +"IG" = ( +/obj/structure/marker_beacon/burgundy, +/obj/structure/lattice, +/turf/template_noop, +/area/shuttle/hunter/mi13_foodtruck) +"Jv" = ( +/obj/structure/cable/layer1, +/obj/effect/turf_decal/siding/dark_red/corner{ + dir = 4 + }, +/obj/effect/turf_decal/siding/dark_red/corner{ + dir = 1 + }, +/obj/machinery/airalarm/directional/south, +/obj/effect/mapping_helpers/airalarm/syndicate_access, +/turf/open/floor/mineral/plastitanium, +/area/shuttle/hunter/mi13_foodtruck) +"KV" = ( +/obj/structure/table/reinforced/plastitaniumglass, +/obj/item/reagent_containers/cup/glass/mug/tea{ + pixel_x = 8; + pixel_y = 9 + }, +/obj/item/reagent_containers/cup/beaker{ + pixel_x = 8 + }, +/obj/item/reagent_containers/cup/beaker{ + pixel_x = -5; + pixel_y = 3 + }, +/obj/item/reagent_containers/pill/cyanide{ + pixel_y = -9; + pixel_x = -2 + }, +/turf/open/floor/circuit/red/off, +/area/shuttle/hunter/mi13_foodtruck) +"Lm" = ( +/obj/machinery/vending/dinnerware, +/obj/machinery/airalarm/directional/east, +/obj/effect/mapping_helpers/airalarm/syndicate_access, +/turf/open/floor/iron/kitchen/small, +/area/shuttle/hunter/mi13_foodtruck) +"Ml" = ( +/obj/machinery/computer/camera_advanced/syndie{ + dir = 1 + }, +/turf/open/floor/circuit/red, +/area/shuttle/hunter/mi13_foodtruck) +"MZ" = ( +/obj/effect/mob_spawn/ghost_role/human/fugitive/mi13{ + dir = 4 + }, +/turf/open/floor/circuit/red/off, +/area/shuttle/hunter/mi13_foodtruck) +"NJ" = ( +/obj/effect/turf_decal/siding/dark_red, +/obj/effect/turf_decal/siding/dark_red/corner{ + dir = 4 + }, +/obj/effect/turf_decal/siding/dark_red/corner{ + dir = 1 + }, +/turf/open/floor/mineral/plastitanium, +/area/shuttle/hunter/mi13_foodtruck) +"OU" = ( +/obj/machinery/fugitive_locator, +/turf/open/floor/circuit/red, +/area/shuttle/hunter/mi13_foodtruck) +"Pq" = ( +/turf/template_noop, +/area/template_noop) +"PE" = ( +/obj/machinery/fugitive_capture, +/turf/open/floor/circuit/red, +/area/shuttle/hunter/mi13_foodtruck) +"QV" = ( +/obj/effect/turf_decal/siding/dark_red/corner{ + dir = 4 + }, +/obj/effect/turf_decal/siding/dark_red, +/turf/open/floor/mineral/plastitanium, +/area/shuttle/hunter/mi13_foodtruck) +"RO" = ( +/obj/machinery/button/door/directional/east{ + id = "foodtruck_shutters"; + name = "External Shutter Switch" + }, +/obj/structure/table/reinforced, +/obj/item/storage/cans/sixsoda, +/turf/open/floor/iron/kitchen/small, +/area/shuttle/hunter/mi13_foodtruck) +"Sw" = ( +/obj/machinery/door/airlock/vault{ + normalspeed = 0; + name = "Secure Door"; + desc = "An imposing looking door. It looks reinforced." + }, +/obj/effect/mapping_helpers/airlock/cutaiwire, +/obj/effect/mapping_helpers/airlock/access/any/syndicate/general, +/turf/open/floor/mineral/plastitanium, +/area/shuttle/hunter/mi13_foodtruck) +"SP" = ( +/obj/structure/table/reinforced/plastitaniumglass, +/obj/item/pinpointer/shuttle, +/turf/open/floor/circuit/red/off, +/area/shuttle/hunter/mi13_foodtruck) +"UF" = ( +/obj/machinery/door/airlock/external{ + name = "Fire Escape"; + desc = "If you really need to escape in a hurry, try this door."; + id_tag = "foodtruck_firescape" + }, +/obj/structure/fans/tiny, +/obj/effect/mapping_helpers/airlock/access/any/syndicate/general, +/obj/effect/mapping_helpers/airlock/locked, +/obj/effect/mapping_helpers/airlock/cutaiwire, +/turf/open/floor/mineral/plastitanium, +/area/shuttle/hunter/mi13_foodtruck) +"Xc" = ( +/obj/effect/turf_decal/arrows{ + dir = 4 + }, +/obj/structure/railing/corner, +/turf/open/floor/mineral/titanium, +/area/shuttle/hunter/mi13_foodtruck) +"XE" = ( +/obj/machinery/suit_storage_unit/syndicate{ + mod_type = null; + suit_type = /obj/item/clothing/suit/space/syndicate/black; + helmet_type = /obj/item/clothing/head/helmet/space/syndicate/black + }, +/obj/machinery/button/door/directional/east{ + id = "foodtruck_firescape"; + normaldoorcontrol = 1; + specialfunctions = 4; + pixel_y = -10; + name = "Fire Escape Bolt Switch" + }, +/turf/open/floor/circuit/red/off, +/area/shuttle/hunter/mi13_foodtruck) +"Yi" = ( +/obj/structure/table/reinforced/plastitaniumglass, +/obj/item/reagent_containers/syringe{ + pixel_y = -3; + pixel_x = -5 + }, +/obj/item/reagent_containers/dropper{ + pixel_y = 6; + pixel_x = -3 + }, +/obj/item/reagent_containers/cup/beaker/large{ + pixel_y = 6; + pixel_x = 8 + }, +/obj/item/reagent_containers/pill/cyanide{ + pixel_y = -6; + pixel_x = 10 + }, +/turf/open/floor/circuit/red/off, +/area/shuttle/hunter/mi13_foodtruck) +"YW" = ( +/obj/structure/table/reinforced, +/obj/structure/railing{ + dir = 4 + }, +/obj/effect/turf_decal/siding/dark{ + dir = 4 + }, +/turf/open/floor/mineral/titanium, +/area/shuttle/hunter/mi13_foodtruck) + +(1,1,1) = {" +Pq +Pq +Pq +Pq +Pq +ku +AF +CF +te +CF +CF +CF +ku +Pq +Pq +"} +(2,1,1) = {" +Pq +Pq +Pq +cm +Am +ku +ao +Xc +al +al +Dp +ua +ku +IG +Pq +"} +(3,1,1) = {" +Pq +Pq +Pq +Pq +wA +ku +iO +xG +oA +AP +pZ +nh +ku +aj +hB +"} +(4,1,1) = {" +cm +Ev +Ev +ku +ku +ku +sN +jc +YW +YW +jc +kv +ku +aj +hB +"} +(5,1,1) = {" +Ev +Ev +jw +MZ +zJ +Sw +bY +bY +bY +bY +bY +bY +ku +cm +Pq +"} +(6,1,1) = {" +Ev +Ak +xg +gs +Jv +ku +CY +ui +dg +Lm +bY +RO +ku +Pq +Pq +"} +(7,1,1) = {" +ku +eP +SP +mT +jb +ku +ku +ku +ku +ku +ah +kf +ku +Pq +Pq +"} +(8,1,1) = {" +An +pQ +xg +gs +we +ku +eA +jA +Fv +fo +QV +gv +ku +Pq +Pq +"} +(9,1,1) = {" +An +An +ag +XE +zJ +ah +lp +NJ +PE +OU +Ay +gc +ku +cm +Pq +"} +(10,1,1) = {" +cm +An +An +ku +UF +ku +dB +Ff +MZ +uq +Ay +tW +ku +aj +hB +"} +(11,1,1) = {" +Pq +Pq +Pq +Pq +wA +ku +dJ +pU +Ml +Bn +pU +ab +ku +aj +hB +"} +(12,1,1) = {" +Pq +Pq +Pq +cm +Am +ku +lX +KV +Yi +dC +kj +af +ku +IG +Pq +"} +(13,1,1) = {" +Pq +Pq +Pq +Pq +Pq +ku +aa +aa +aa +aa +aa +aa +ku +Pq +Pq +"} diff --git a/_maps/shuttles/infiltrator_advanced.dmm b/_maps/shuttles/infiltrator_advanced.dmm index c9123066874f0..9f93df25b0479 100644 --- a/_maps/shuttles/infiltrator_advanced.dmm +++ b/_maps/shuttles/infiltrator_advanced.dmm @@ -1219,11 +1219,11 @@ pixel_x = 32 }, /obj/machinery/cell_charger, -/obj/item/stock_parts/cell/high{ +/obj/item/stock_parts/power_store/cell/high{ pixel_x = 4; pixel_y = 4 }, -/obj/item/stock_parts/cell/high, +/obj/item/stock_parts/power_store/cell/high, /obj/item/multitool, /turf/open/floor/pod/dark, /area/shuttle/syndicate/armory) diff --git a/_maps/shuttles/infiltrator_basic.dmm b/_maps/shuttles/infiltrator_basic.dmm index 1da090f295744..805f9053e2476 100644 --- a/_maps/shuttles/infiltrator_basic.dmm +++ b/_maps/shuttles/infiltrator_basic.dmm @@ -462,11 +462,11 @@ /area/shuttle/syndicate/medical) "ce" = ( /obj/machinery/cell_charger, -/obj/item/stock_parts/cell/high{ +/obj/item/stock_parts/power_store/cell/high{ pixel_x = -3; pixel_y = 3 }, -/obj/item/stock_parts/cell/high, +/obj/item/stock_parts/power_store/cell/high, /obj/structure/extinguisher_cabinet/directional/west, /obj/structure/table/reinforced/plastitaniumglass, /obj/effect/turf_decal/tile/yellow{ @@ -587,7 +587,7 @@ /area/shuttle/syndicate/medical) "fB" = ( /obj/structure/sign/warning/vacuum/external, -/turf/closed/wall/mineral/plastitanium/nodiagonal, +/turf/closed/wall/r_wall/syndicate/nodiagonal, /area/shuttle/syndicate/airlock) "gt" = ( /obj/item/storage/box/handcuffs{ @@ -1096,7 +1096,7 @@ }, /area/shuttle/syndicate/eva) "Xy" = ( -/turf/closed/wall/mineral/plastitanium/nodiagonal, +/turf/closed/wall/r_wall/syndicate/nodiagonal, /area/shuttle/syndicate/airlock) "YN" = ( /turf/open/floor/iron/dark/smooth_corner{ diff --git a/_maps/shuttles/labour_box.dmm b/_maps/shuttles/labour_box.dmm index f1eeb8e5b04d9..4adb12a5321b2 100644 --- a/_maps/shuttles/labour_box.dmm +++ b/_maps/shuttles/labour_box.dmm @@ -104,9 +104,7 @@ /area/shuttle/labor) "r" = ( /obj/machinery/power/shuttle_engine/heater, -/obj/structure/window/reinforced/spawner/directional/north{ - layer = 2.9 - }, +/obj/structure/window/reinforced/spawner/directional/north, /turf/open/floor/plating/airless, /area/shuttle/labor) "s" = ( diff --git a/_maps/shuttles/labour_delta.dmm b/_maps/shuttles/labour_delta.dmm index 62b590b8c82fc..aa4e90090d985 100644 --- a/_maps/shuttles/labour_delta.dmm +++ b/_maps/shuttles/labour_delta.dmm @@ -242,9 +242,7 @@ /area/shuttle/labor) "x" = ( /obj/machinery/power/shuttle_engine/heater, -/obj/structure/window/reinforced/spawner/directional/north{ - layer = 2.9 - }, +/obj/structure/window/reinforced/spawner/directional/north, /obj/effect/turf_decal/stripes/line, /turf/open/floor/plating/airless, /area/shuttle/labor) diff --git a/_maps/shuttles/labour_generic.dmm b/_maps/shuttles/labour_generic.dmm index 82b20d6f5ed28..fe7c0b4b12ebc 100644 --- a/_maps/shuttles/labour_generic.dmm +++ b/_maps/shuttles/labour_generic.dmm @@ -99,9 +99,7 @@ /area/shuttle/labor) "r" = ( /obj/machinery/power/shuttle_engine/heater, -/obj/structure/window/reinforced/spawner/directional/north{ - layer = 2.9 - }, +/obj/structure/window/reinforced/spawner/directional/north, /turf/open/floor/plating/airless, /area/shuttle/labor) "s" = ( diff --git a/_maps/shuttles/mining_box.dmm b/_maps/shuttles/mining_box.dmm index c9771c932e5a2..98607ead77fc3 100644 --- a/_maps/shuttles/mining_box.dmm +++ b/_maps/shuttles/mining_box.dmm @@ -45,9 +45,7 @@ /area/shuttle/mining) "j" = ( /obj/machinery/power/shuttle_engine/heater, -/obj/structure/window/reinforced/spawner/directional/north{ - layer = 2.9 - }, +/obj/structure/window/reinforced/spawner/directional/north, /obj/structure/window/reinforced/spawner/directional/west, /obj/structure/window/reinforced/spawner/directional/east, /turf/open/floor/plating, diff --git a/_maps/shuttles/mining_common_meta.dmm b/_maps/shuttles/mining_common_meta.dmm index 0acf76371b881..f8aee42a870a7 100644 --- a/_maps/shuttles/mining_common_meta.dmm +++ b/_maps/shuttles/mining_common_meta.dmm @@ -45,9 +45,7 @@ /area/shuttle/mining) "j" = ( /obj/machinery/power/shuttle_engine/heater, -/obj/structure/window/reinforced/spawner/directional/north{ - layer = 2.9 - }, +/obj/structure/window/reinforced/spawner/directional/north, /obj/structure/window/reinforced/spawner/directional/west, /obj/structure/window/reinforced/spawner/directional/east, /turf/open/floor/plating, diff --git a/_maps/shuttles/mining_delta.dmm b/_maps/shuttles/mining_delta.dmm index 8b731c6f024d2..7ee1e5662e812 100644 --- a/_maps/shuttles/mining_delta.dmm +++ b/_maps/shuttles/mining_delta.dmm @@ -224,9 +224,7 @@ /area/shuttle/mining) "t" = ( /obj/machinery/power/shuttle_engine/propulsion/burst, -/obj/structure/window/reinforced/spawner/directional/north{ - layer = 2.9 - }, +/obj/structure/window/reinforced/spawner/directional/north, /obj/effect/turf_decal/stripes/line, /turf/open/floor/plating/airless, /area/shuttle/mining) diff --git a/_maps/shuttles/mining_freight.dmm b/_maps/shuttles/mining_freight.dmm index 70605f222e7fd..ead08ff80ac31 100644 --- a/_maps/shuttles/mining_freight.dmm +++ b/_maps/shuttles/mining_freight.dmm @@ -106,7 +106,7 @@ /obj/effect/spawner/structure/window/reinforced/shuttle, /obj/machinery/power/shuttle_engine/heater, /turf/open/floor/plating, -/area/template_noop) +/area/shuttle/mining) "q" = ( /obj/structure/ore_box, /obj/effect/turf_decal/delivery, diff --git a/_maps/shuttles/mining_kilo.dmm b/_maps/shuttles/mining_kilo.dmm index 3352abdf14d5a..f52a5c947f3e6 100644 --- a/_maps/shuttles/mining_kilo.dmm +++ b/_maps/shuttles/mining_kilo.dmm @@ -102,7 +102,7 @@ /area/shuttle/mining/large) "p" = ( /obj/effect/decal/cleanable/dirt, -/obj/item/stock_parts/cell/high, +/obj/item/stock_parts/power_store/cell/high, /obj/item/screwdriver{ pixel_y = 18 }, diff --git a/_maps/shuttles/mining_large.dmm b/_maps/shuttles/mining_large.dmm index 3be1c617cfc92..f1c0d3a4cf2e6 100644 --- a/_maps/shuttles/mining_large.dmm +++ b/_maps/shuttles/mining_large.dmm @@ -128,7 +128,7 @@ "p" = ( /obj/structure/table/reinforced, /obj/effect/decal/cleanable/dirt, -/obj/item/stock_parts/cell/high, +/obj/item/stock_parts/power_store/cell/high, /obj/item/screwdriver{ pixel_y = 18 }, @@ -322,9 +322,7 @@ /area/shuttle/mining/large) "G" = ( /obj/machinery/power/shuttle_engine/heater, -/obj/structure/window/reinforced/spawner/directional/north{ - layer = 2.9 - }, +/obj/structure/window/reinforced/spawner/directional/north, /turf/open/floor/plating/airless, /area/shuttle/mining/large) "H" = ( diff --git a/_maps/shuttles/pirate_default.dmm b/_maps/shuttles/pirate_default.dmm index 0f588e1df27bc..43c72a9d2bfa3 100644 --- a/_maps/shuttles/pirate_default.dmm +++ b/_maps/shuttles/pirate_default.dmm @@ -451,7 +451,7 @@ /obj/effect/decal/cleanable/dirt, /obj/structure/table, /obj/machinery/cell_charger, -/obj/item/stock_parts/cell/high, +/obj/item/stock_parts/power_store/cell/high, /turf/open/floor/pod/light, /area/shuttle/pirate) "bm" = ( @@ -475,7 +475,7 @@ pixel_x = 6; pixel_y = 12 }, -/obj/item/clothing/mask/cigarette/cigar, +/obj/item/cigarette/cigar, /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/line, /turf/open/floor/wood, @@ -837,8 +837,7 @@ }, /obj/effect/decal/cleanable/dirt, /obj/structure/rack{ - dir = 8; - layer = 2.9 + dir = 8 }, /obj/item/storage/box/lethalshot, /obj/item/gun/ballistic/shotgun/automatic/combat{ diff --git a/_maps/shuttles/pirate_dutchman.dmm b/_maps/shuttles/pirate_dutchman.dmm index fb36638173ed1..1d1a0b0902b86 100644 --- a/_maps/shuttles/pirate_dutchman.dmm +++ b/_maps/shuttles/pirate_dutchman.dmm @@ -487,8 +487,9 @@ "xA" = ( /obj/machinery/computer/camera_advanced/shuttle_docker/syndicate/pirate{ dir = 1; - x_offset = -4; - y_offset = -8 + x_offset = 7; + y_offset = -3; + view_range = 10 }, /turf/open/floor/carpet/royalblack/airless, /area/shuttle/pirate/flying_dutchman) @@ -618,7 +619,7 @@ pixel_x = -4; pixel_y = 12 }, -/obj/item/clothing/mask/cigarette/cigar{ +/obj/item/cigarette/cigar{ pixel_x = 4 }, /obj/item/reagent_containers/cup/glass/drinkingglass/shotglass{ diff --git a/_maps/shuttles/pirate_ex_interdyne.dmm b/_maps/shuttles/pirate_ex_interdyne.dmm index 77f5ddecaab1c..dce984f19c993 100644 --- a/_maps/shuttles/pirate_ex_interdyne.dmm +++ b/_maps/shuttles/pirate_ex_interdyne.dmm @@ -154,7 +154,7 @@ /area/shuttle/pirate) "aD" = ( /obj/machinery/power/apc/auto_name/directional/north{ - cell_type = /obj/item/stock_parts/cell/bluespace; + cell_type = /obj/item/stock_parts/power_store/battery/bluespace; start_charge = 100 }, /obj/effect/mapping_helpers/apc/cut_AI_wire, @@ -169,7 +169,7 @@ "aF" = ( /obj/machinery/computer/camera_advanced/shuttle_docker/syndicate/pirate{ dir = 4; - x_offset = -3; + x_offset = 0; y_offset = 7 }, /turf/open/floor/iron/dark, diff --git a/_maps/shuttles/pirate_geode.dmm b/_maps/shuttles/pirate_geode.dmm index 3a75c42779401..2f6a573aae050 100644 --- a/_maps/shuttles/pirate_geode.dmm +++ b/_maps/shuttles/pirate_geode.dmm @@ -237,9 +237,9 @@ }, /obj/structure/table/wood, /obj/machinery/cell_charger, -/obj/item/stock_parts/cell/high, -/obj/item/stock_parts/cell/high, -/obj/item/stock_parts/cell/high, +/obj/item/stock_parts/power_store/cell/high, +/obj/item/stock_parts/power_store/cell/high, +/obj/item/stock_parts/power_store/cell/high, /turf/open/floor/plating, /area/shuttle/pirate) "oa" = ( @@ -430,8 +430,7 @@ "vY" = ( /obj/machinery/computer/camera_advanced/shuttle_docker/syndicate/pirate{ dir = 8; - x_offset = 10; - y_offset = 5 + x_offset = -8 }, /obj/effect/turf_decal/weather/dirt{ dir = 3 @@ -487,7 +486,7 @@ /obj/effect/turf_decal/stripes/white/line{ dir = 8 }, -/turf/open/floor/plating, +/turf/open/floor/plating/airless, /area/shuttle/pirate) "yz" = ( /obj/structure/flora/lunar_plant/style_3, @@ -838,7 +837,7 @@ /obj/machinery/power/shuttle_engine/propulsion{ dir = 8 }, -/turf/open/floor/plating, +/turf/open/floor/plating/airless, /area/shuttle/pirate) "Pr" = ( /obj/structure/table/wood, diff --git a/_maps/shuttles/pirate_grey.dmm b/_maps/shuttles/pirate_grey.dmm index 522576fdf0264..22356be732c36 100644 --- a/_maps/shuttles/pirate_grey.dmm +++ b/_maps/shuttles/pirate_grey.dmm @@ -353,8 +353,9 @@ /obj/machinery/light/small/directional/west, /obj/machinery/computer/camera_advanced/shuttle_docker/syndicate/pirate{ dir = 4; - x_offset = -3; - y_offset = 7 + x_offset = -5; + y_offset = 12; + view_range = 10 }, /obj/effect/decal/cleanable/dirt, /obj/machinery/firealarm/directional/south, @@ -854,14 +855,14 @@ }, /obj/effect/mapping_helpers/airlock/cutaiwire, /obj/docking_port/mobile/pirate{ - dir = 4 + dir = 8 }, /obj/structure/fans/tiny, /turf/open/floor/pod/light, /area/shuttle/pirate) "Bu" = ( /obj/machinery/power/apc/auto_name/directional/north{ - cell_type = /obj/item/stock_parts/cell/bluespace + cell_type = /obj/item/stock_parts/power_store/battery/bluespace }, /obj/structure/reagent_dispensers/watertank, /obj/effect/turf_decal/bot, @@ -927,7 +928,7 @@ "De" = ( /obj/structure/table/reinforced, /obj/machinery/cell_charger, -/obj/item/stock_parts/cell/high, +/obj/item/stock_parts/power_store/cell/high, /obj/machinery/airalarm/directional/east, /turf/open/floor/plating, /area/shuttle/pirate) @@ -1231,7 +1232,7 @@ /area/shuttle/pirate) "Pn" = ( /turf/closed/wall, -/area/template_noop) +/area/shuttle/pirate) "PM" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/spawner/random/trash/grille_or_waste, diff --git a/_maps/shuttles/pirate_irs.dmm b/_maps/shuttles/pirate_irs.dmm index c352bb02c3e82..4fd5a8c357342 100644 --- a/_maps/shuttles/pirate_irs.dmm +++ b/_maps/shuttles/pirate_irs.dmm @@ -281,7 +281,7 @@ pixel_x = -9; pixel_y = -4 }, -/obj/item/stock_parts/cell/lead{ +/obj/item/stock_parts/power_store/cell/lead{ pixel_y = -8; pixel_x = 2 }, @@ -1027,9 +1027,7 @@ /obj/structure/railing{ dir = 10 }, -/obj/machinery/shower/directional/south{ - layer = 4 - }, +/obj/machinery/shower/directional/south, /obj/effect/turf_decal/box, /obj/structure/fluff/shower_drain, /turf/open/floor/iron/dark, @@ -1420,7 +1418,11 @@ }, /area/shuttle/pirate) "LV" = ( -/obj/machinery/computer/camera_advanced/shuttle_docker/syndicate/pirate, +/obj/machinery/computer/camera_advanced/shuttle_docker/syndicate/pirate{ + y_offset = 11; + x_offset = -4; + view_range = 10 + }, /obj/effect/turf_decal/trimline/dark_blue/filled/line{ dir = 5 }, diff --git a/_maps/shuttles/pirate_medieval.dmm b/_maps/shuttles/pirate_medieval.dmm index 03441b8a6528d..87b4a42603595 100644 --- a/_maps/shuttles/pirate_medieval.dmm +++ b/_maps/shuttles/pirate_medieval.dmm @@ -1,15 +1,15 @@ //MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"a" = ( +"aa" = ( /turf/template_noop, /area/template_noop) -"b" = ( +"ab" = ( /obj/structure/table/wood, /obj/item/stack/sheet/mineral/wood/fifty{ pixel_y = 4 }, /turf/open/floor/stone, /area/shuttle/pirate) -"c" = ( +"ac" = ( /obj/structure/fake_stairs/wood/directional/east, /obj/structure/window/reinforced/spawner/directional/north, /obj/structure/window/reinforced/spawner/directional/south, @@ -18,7 +18,7 @@ }, /turf/open/floor/stone, /area/shuttle/pirate) -"d" = ( +"ad" = ( /obj/structure/fake_stairs/wood/directional/east, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden{ dir = 4 @@ -26,7 +26,7 @@ /obj/structure/mineral_door/gold, /turf/open/floor/stone, /area/shuttle/pirate) -"e" = ( +"ae" = ( /obj/structure/window/reinforced/spawner/directional/west, /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt/dust, @@ -35,20 +35,20 @@ /obj/effect/mob_spawn/ghost_role/human/pirate/medieval, /turf/open/floor/plating, /area/shuttle/pirate) -"f" = ( +"af" = ( /obj/structure/window/reinforced/spawner/directional/east, /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt/dust, /obj/effect/spawner/random/trash/garbage, /turf/open/floor/plating, /area/shuttle/pirate) -"g" = ( +"ag" = ( /obj/structure/fans/tiny, /obj/structure/window/reinforced/spawner/directional/east, /obj/structure/mineral_door/iron, /turf/open/floor/plating, /area/shuttle/pirate) -"h" = ( +"ah" = ( /obj/structure/table/wood, /obj/item/spear/military{ pixel_y = 8; @@ -64,13 +64,17 @@ }, /turf/open/floor/stone, /area/shuttle/pirate) -"j" = ( +"ai" = ( +/obj/machinery/power/shuttle_engine/propulsion/left, +/turf/open/floor/plating/airless, +/area/shuttle/pirate) +"aj" = ( /obj/item/flashlight/lantern{ light_on = 1 }, /turf/open/floor/stone, /area/shuttle/pirate) -"k" = ( +"ak" = ( /obj/structure/table/wood, /obj/item/restraints/legcuffs/bola/tactical, /obj/item/restraints/legcuffs/bola/tactical, @@ -80,12 +84,12 @@ /obj/item/restraints/legcuffs/bola, /turf/open/floor/stone, /area/shuttle/pirate) -"l" = ( +"al" = ( /obj/structure/fans/tiny, /obj/structure/mineral_door/iron, /turf/open/floor/stone, /area/shuttle/pirate) -"m" = ( +"am" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt/dust, /obj/effect/turf_decal/arrows{ @@ -99,11 +103,11 @@ }, /turf/open/floor/plating, /area/shuttle/pirate) -"n" = ( +"an" = ( /obj/effect/decal/cleanable/vomit/old, /turf/open/floor/stone, /area/shuttle/pirate) -"o" = ( +"ao" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt/dust, /obj/effect/turf_decal/arrows{ @@ -117,17 +121,10 @@ }, /turf/open/floor/plating, /area/shuttle/pirate) -"p" = ( +"ap" = ( /turf/closed/wall/mineral/wood, /area/shuttle/pirate) -"q" = ( -/obj/effect/mob_spawn/ghost_role/human/pirate/medieval/warlord, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden{ - dir = 4 - }, -/turf/open/floor/stone, -/area/shuttle/pirate) -"r" = ( +"ar" = ( /obj/structure/window/reinforced/spawner/directional/east, /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt/dust, @@ -135,7 +132,7 @@ /obj/effect/mob_spawn/ghost_role/human/pirate/medieval, /turf/open/floor/plating, /area/shuttle/pirate) -"s" = ( +"as" = ( /obj/structure/fans/tiny, /obj/structure/window/reinforced/spawner/directional/east, /obj/docking_port/mobile/pirate{ @@ -152,9 +149,17 @@ width = 17 }, /obj/structure/mineral_door/iron, +/obj/structure/window/reinforced/spawner/directional/west, +/turf/open/floor/plating, +/area/shuttle/pirate) +"at" = ( +/obj/structure/fans/tiny, +/obj/structure/window/reinforced/spawner/directional/west, +/obj/structure/mineral_door/iron, +/obj/structure/window/reinforced/spawner/directional/east, /turf/open/floor/plating, /area/shuttle/pirate) -"u" = ( +"au" = ( /obj/effect/decal/cleanable/blood/old, /obj/effect/decal/cleanable/blood/gibs/limb, /obj/effect/decal/cleanable/blood/gibs/body, @@ -162,21 +167,21 @@ /obj/item/kitchen/fork, /turf/open/floor/stone, /area/shuttle/pirate) -"v" = ( +"av" = ( /obj/structure/window/reinforced/spawner/directional/west, /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt/dust, /obj/effect/spawner/random/trash/garbage, /turf/open/floor/plating, /area/shuttle/pirate) -"w" = ( +"aw" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden{ dir = 4 }, /turf/open/floor/stone, /area/shuttle/pirate) -"x" = ( +"ax" = ( /obj/structure/fake_stairs/wood/directional/west, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden{ dir = 4 @@ -184,51 +189,56 @@ /obj/structure/mineral_door/gold, /turf/open/floor/stone, /area/shuttle/pirate) -"y" = ( +"ay" = ( /obj/machinery/shuttle_scrambler, /turf/open/floor/stone, /area/shuttle/pirate) -"z" = ( +"az" = ( /obj/structure/fans/tiny, /obj/structure/window/reinforced/spawner/directional/west, /obj/structure/mineral_door/iron, /turf/open/floor/plating, /area/shuttle/pirate) -"A" = ( +"aA" = ( /obj/structure/window/reinforced/spawner/directional/east, /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt/dust, /obj/item/reagent_containers/cup/glass/bottle/vodka, /turf/open/floor/plating, /area/shuttle/pirate) -"C" = ( +"aB" = ( +/obj/machinery/power/shuttle_engine/heater, +/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, +/turf/open/floor/plating/airless, +/area/shuttle/pirate) +"aC" = ( /obj/machinery/airalarm/directional/west, /obj/effect/mapping_helpers/airalarm/all_access, /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/stone, /area/shuttle/pirate) -"D" = ( +"aD" = ( /obj/machinery/piratepad, /turf/open/floor/stone, /area/shuttle/pirate) -"E" = ( +"aE" = ( /obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, /obj/structure/barricade/wooden/crude, /turf/open/floor/stone, /area/shuttle/pirate) -"F" = ( +"aF" = ( /turf/open/floor/stone, /area/shuttle/pirate) -"G" = ( +"aG" = ( /obj/machinery/computer/piratepad_control, /turf/open/floor/stone, /area/shuttle/pirate) -"H" = ( +"aH" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/structure/chair/wood/wings, /turf/open/floor/stone, /area/shuttle/pirate) -"I" = ( +"aI" = ( /obj/structure/fake_stairs/wood/directional/west, /obj/structure/window/reinforced/spawner/directional/north, /obj/structure/window/reinforced/spawner/directional/south, @@ -237,7 +247,7 @@ }, /turf/open/floor/stone, /area/shuttle/pirate) -"J" = ( +"aJ" = ( /obj/effect/decal/cleanable/blood/gibs/old, /obj/item/food/burger/human, /obj/structure/table/wood, @@ -251,7 +261,7 @@ }, /turf/open/floor/stone, /area/shuttle/pirate) -"K" = ( +"aK" = ( /obj/structure/table/wood, /obj/item/stack/medical/poultice{ pixel_y = 6; @@ -264,13 +274,13 @@ /obj/item/storage/medkit/fire, /turf/open/floor/stone, /area/shuttle/pirate) -"L" = ( +"aL" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 1 }, /turf/open/floor/stone, /area/shuttle/pirate) -"M" = ( +"aM" = ( /obj/structure/window/reinforced/spawner/directional/west, /obj/effect/spawner/random/trash/graffiti, /obj/effect/decal/cleanable/dirt, @@ -278,11 +288,11 @@ /obj/effect/spawner/random/trash/garbage, /turf/open/floor/plating, /area/shuttle/pirate) -"N" = ( +"aN" = ( /obj/machinery/computer/shuttle/pirate/drop_pod, /turf/open/floor/stone, /area/shuttle/pirate) -"O" = ( +"aO" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/structure/fermenting_barrel/thermite, /obj/item/reagent_containers/cup/beaker/large, @@ -290,11 +300,11 @@ /obj/item/reagent_containers/cup/beaker/large, /turf/open/floor/stone, /area/shuttle/pirate) -"P" = ( +"aP" = ( /obj/effect/decal/cleanable/glass, /turf/open/floor/stone, /area/shuttle/pirate) -"Q" = ( +"aQ" = ( /obj/structure/closet/cabinet, /obj/item/claymore, /obj/item/shield/kite, @@ -302,42 +312,42 @@ /obj/item/shield/kite, /turf/open/floor/stone, /area/shuttle/pirate) -"R" = ( +"aR" = ( /obj/machinery/atmospherics/components/tank/air{ dir = 1 }, /turf/open/floor/stone, /area/shuttle/pirate) -"S" = ( +"aS" = ( /obj/structure/frame/computer{ anchored = 1 }, /obj/item/assault_pod/medieval, /turf/open/floor/stone, /area/shuttle/pirate) -"T" = ( +"aT" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden{ dir = 4 }, /turf/open/floor/stone, /area/shuttle/pirate) -"U" = ( +"aU" = ( /obj/machinery/loot_locator, /turf/open/floor/stone, /area/shuttle/pirate) -"V" = ( +"aV" = ( /obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, /obj/structure/barricade/wooden/crude, /turf/open/floor/plating, /area/shuttle/pirate) -"W" = ( +"aW" = ( /obj/structure/table/wood, /obj/item/radio/intercom{ pixel_y = 5 }, /turf/open/floor/stone, /area/shuttle/pirate) -"X" = ( +"aX" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden{ dir = 4 @@ -356,180 +366,188 @@ }, /turf/open/floor/stone, /area/shuttle/pirate) -"Y" = ( +"aY" = ( /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/stone, /area/shuttle/pirate) -"Z" = ( +"aZ" = ( /obj/effect/decal/cleanable/dirt, /obj/item/flashlight/lantern{ light_on = 1 }, /turf/open/floor/stone, /area/shuttle/pirate) +"qA" = ( +/obj/machinery/power/shuttle_engine/propulsion/right, +/turf/open/floor/plating/airless, +/area/shuttle/pirate) +"HQ" = ( +/obj/effect/mob_spawn/ghost_role/human/pirate/medieval/warlord, +/turf/open/floor/stone, +/area/shuttle/pirate) (1,1,1) = {" -a -a -p -p -l -p -p -p -a +aa +aa +ap +ap +al +ap +aB +ai +aa "} (2,1,1) = {" -a -a -g -f -o -r -A -s -a +aa +aa +ag +af +ao +ar +aA +as +aa "} (3,1,1) = {" -a -a -a -a -I -a -a -a -a +aa +aa +aa +aa +aI +aa +aa +aa +aa "} (4,1,1) = {" -p -p -p -p -x -p -E -p -a +ap +ap +ap +ap +ax +ap +aE +ap +aa "} (5,1,1) = {" -a -E -R -X -T -C -Q -p -p +aa +aE +aR +aX +aT +aC +aQ +ap +ap "} (6,1,1) = {" -p -p -W -F -T -j -Y -h -E +ap +ap +aW +aF +aT +aj +aY +ah +aE "} (7,1,1) = {" -a -E -N -Y -T -Y -F -k -p +aa +aE +aN +aY +aT +aY +aF +ak +ap "} (8,1,1) = {" -V -V -S -P -q -L -F -F -l +aV +aV +aS +aP +aT +aL +HQ +aF +al "} (9,1,1) = {" -a -E -y -F -w -n -H -b -p +aa +aE +ay +aF +aw +an +aH +ab +ap "} (10,1,1) = {" -p -p -U -F -w -Z -u -K -E +ap +ap +aU +aF +aw +aZ +au +aK +aE "} (11,1,1) = {" -a -E -G -D -T -O -J -p -p +aa +aE +aG +aD +aT +aO +aJ +ap +ap "} (12,1,1) = {" -p -p -p -p -d -p -E -p -a +ap +ap +ap +ap +ad +ap +aE +ap +aa "} (13,1,1) = {" -a -a -a -a -c -a -a -a -a +aa +aa +aa +aa +ac +aa +aa +aa +aa "} (14,1,1) = {" -a -a -z -M -m -e -v -z -a +aa +aa +az +aM +am +ae +av +at +aa "} (15,1,1) = {" -a -a -p -p -l -p -p -p -a +aa +aa +ap +ap +al +ap +aB +qA +aa "} diff --git a/_maps/shuttles/pirate_silverscale.dmm b/_maps/shuttles/pirate_silverscale.dmm index f32e70b1e451d..519a17b4659d9 100644 --- a/_maps/shuttles/pirate_silverscale.dmm +++ b/_maps/shuttles/pirate_silverscale.dmm @@ -79,10 +79,6 @@ /obj/effect/turf_decal/trimline/yellow/warning, /turf/open/floor/plating/airless, /area/shuttle/pirate) -"eK" = ( -/obj/machinery/power/shuttle_engine/propulsion, -/turf/open/floor/plating/airless, -/area/shuttle/pirate) "eU" = ( /obj/structure/chair/comfy/shuttle, /turf/open/floor/carpet/royalblack, @@ -337,7 +333,7 @@ dir = 6 }, /turf/open/floor/plating/airless, -/area/template_noop) +/area/shuttle/pirate) "xj" = ( /obj/structure/table/glass, /obj/item/storage/medkit/brute, @@ -355,8 +351,7 @@ /area/shuttle/pirate) "xR" = ( /obj/structure/rack{ - dir = 8; - layer = 2.9 + dir = 8 }, /obj/item/melee/energy/sword/saber/purple{ pixel_y = 12 @@ -462,7 +457,7 @@ width = 26 }, /obj/docking_port/mobile/pirate{ - dir = 4; + dir = 8; launch_status = 0; movement_force = list("KNOCKDOWN"=0,"THROW"=0); name = "Silverscale Cruiser"; @@ -652,8 +647,9 @@ "Mo" = ( /obj/machinery/computer/camera_advanced/shuttle_docker/syndicate/pirate{ dir = 8; - x_offset = 10; - y_offset = 5 + x_offset = 12; + y_offset = 5; + view_range = 10 }, /turf/open/floor/iron/dark/side{ dir = 8 @@ -695,12 +691,10 @@ pixel_y = 10 }, /obj/item/reagent_containers/cup/glass/bottle/hcider{ - layer = 3.1; pixel_x = -6; pixel_y = 8 }, /obj/item/reagent_containers/cup/glass/bottle/rum{ - layer = 3.2; pixel_x = -15; pixel_y = 4 }, @@ -713,7 +707,6 @@ pixel_y = 15 }, /obj/item/reagent_containers/cup/glass/bottle/wine{ - layer = 3.1; pixel_x = 3; pixel_y = 5 }, @@ -784,8 +777,7 @@ /area/shuttle/pirate) "RO" = ( /obj/structure/rack{ - dir = 8; - layer = 2.9 + dir = 8 }, /obj/item/ammo_box/strilka310, /obj/item/ammo_box/strilka310{ @@ -942,8 +934,7 @@ /area/shuttle/pirate) "Yj" = ( /obj/structure/rack{ - dir = 8; - layer = 2.9 + dir = 8 }, /obj/item/storage/box/lethalshot, /obj/item/storage/box/lethalshot, @@ -1022,7 +1013,7 @@ rB Ww Ww Ww -eK +Ww Ww Ww Ww diff --git a/_maps/shuttles/ruin_cyborg_mothership.dmm b/_maps/shuttles/ruin_cyborg_mothership.dmm index 86178845e3ab4..4e0fff656e83d 100644 --- a/_maps/shuttles/ruin_cyborg_mothership.dmm +++ b/_maps/shuttles/ruin_cyborg_mothership.dmm @@ -12,7 +12,7 @@ id = "mothership_main" }, /obj/machinery/recycler{ - dir = 8 + dir = 4 }, /turf/open/floor/plating/airless, /area/shuttle/ruin/cyborg_mothership) @@ -43,9 +43,7 @@ /area/shuttle/ruin/cyborg_mothership) "dI" = ( /obj/machinery/power/shuttle_engine/heater, -/obj/structure/window/reinforced/spawner/directional/north{ - layer = 2.9 - }, +/obj/structure/window/reinforced/spawner/directional/north, /turf/template_noop, /area/shuttle/ruin/cyborg_mothership) "dO" = ( @@ -59,7 +57,7 @@ pixel_y = 10 }, /obj/machinery/cell_charger, -/obj/item/stock_parts/cell/high, +/obj/item/stock_parts/power_store/cell/high, /turf/open/floor/circuit/green/airless, /area/shuttle/ruin/cyborg_mothership) "eO" = ( @@ -232,9 +230,7 @@ /turf/open/floor/plating/airless, /area/shuttle/ruin/cyborg_mothership) "nM" = ( -/obj/structure/window/reinforced/spawner/directional/north{ - layer = 2.9 - }, +/obj/structure/window/reinforced/spawner/directional/north, /obj/structure/closet/crate/preopen, /obj/effect/turf_decal/stripes/asteroid/line{ dir = 8 @@ -733,9 +729,7 @@ /area/shuttle/ruin/cyborg_mothership) "OY" = ( /obj/machinery/power/shuttle_engine/heater, -/obj/structure/window/reinforced/spawner/directional/north{ - layer = 2.9 - }, +/obj/structure/window/reinforced/spawner/directional/north, /obj/structure/window/reinforced/spawner/directional/west, /turf/template_noop, /area/shuttle/ruin/cyborg_mothership) @@ -796,9 +790,7 @@ /area/shuttle/ruin/cyborg_mothership) "SV" = ( /obj/machinery/power/shuttle_engine/heater, -/obj/structure/window/reinforced/spawner/directional/north{ - layer = 2.9 - }, +/obj/structure/window/reinforced/spawner/directional/north, /obj/structure/window/reinforced/spawner/directional/east, /turf/template_noop, /area/shuttle/ruin/cyborg_mothership) @@ -809,9 +801,7 @@ /area/shuttle/ruin/cyborg_mothership) "TH" = ( /obj/effect/decal/cleanable/dirt, -/obj/structure/window/reinforced/spawner/directional/north{ - layer = 2.9 - }, +/obj/structure/window/reinforced/spawner/directional/north, /obj/effect/turf_decal/stripes/asteroid/line{ dir = 4 }, diff --git a/_maps/shuttles/ruin_pirate_cutter.dmm b/_maps/shuttles/ruin_pirate_cutter.dmm index 2777f06ce8cbd..422d5bfb2cdd5 100644 --- a/_maps/shuttles/ruin_pirate_cutter.dmm +++ b/_maps/shuttles/ruin_pirate_cutter.dmm @@ -266,7 +266,7 @@ /obj/structure/table, /obj/machinery/cell_charger, /obj/item/stack/cable_coil, -/obj/item/stock_parts/cell/high, +/obj/item/stock_parts/power_store/cell/high, /obj/effect/turf_decal/bot, /turf/open/floor/plating, /area/shuttle/ruin/caravan/pirate) diff --git a/_maps/shuttles/starfury_corvette.dmm b/_maps/shuttles/starfury_corvette.dmm index 498f8198cb421..877375fa4e785 100644 --- a/_maps/shuttles/starfury_corvette.dmm +++ b/_maps/shuttles/starfury_corvette.dmm @@ -58,7 +58,9 @@ /area/shuttle/sbc_corvette) "ai" = ( /obj/machinery/computer/camera_advanced/shuttle_docker/syndicate/corvette{ - dir = 8 + dir = 8; + y_offset = 0; + x_offset = -3 }, /obj/effect/turf_decal/stripes/red/line{ dir = 4 @@ -70,7 +72,10 @@ id_tag = "SBC_corvette_bolt"; name = "Syndicate Corvette Airlock" }, -/obj/docking_port/mobile/syndicate_corvette, +/obj/docking_port/mobile/syndicate_corvette{ + preferred_direction = 1; + port_direction = 4 + }, /obj/structure/fans/tiny, /obj/effect/mapping_helpers/airlock/access/all/syndicate/general, /obj/effect/turf_decal/siding/thinplating_new/dark{ @@ -290,8 +295,7 @@ /area/shuttle/sbc_corvette) "aO" = ( /obj/machinery/door/poddoor/preopen{ - id = "SBC_corvette_blast"; - layer = 3 + id = "SBC_corvette_blast" }, /obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, /turf/open/floor/plating, diff --git a/_maps/shuttles/whiteship_birdshot.dmm b/_maps/shuttles/whiteship_birdshot.dmm index b6bb7f6155bb7..ed1936e3a1cf8 100644 --- a/_maps/shuttles/whiteship_birdshot.dmm +++ b/_maps/shuttles/whiteship_birdshot.dmm @@ -26,9 +26,6 @@ /obj/machinery/meter, /turf/open/floor/catwalk_floor, /area/shuttle/abandoned/engine) -"bp" = ( -/turf/closed/wall/mineral/titanium/overspace, -/area/shuttle/abandoned/engine) "bq" = ( /obj/effect/turf_decal/siding/thinplating/dark{ dir = 1 @@ -181,11 +178,12 @@ /obj/machinery/porta_turret/centcom_shuttle/weak{ dir = 4 }, -/turf/closed/wall/mineral/titanium/overspace, +/turf/closed/wall/mineral/titanium, /area/shuttle/abandoned/crew) "gj" = ( /obj/machinery/computer/camera_advanced/shuttle_docker/whiteship{ - dir = 1 + dir = 1; + x_offset = 4 }, /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/dark/small, @@ -339,9 +337,6 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on, /turf/open/floor/iron/smooth_large, /area/shuttle/abandoned/cargo) -"ma" = ( -/turf/closed/wall/mineral/titanium/overspace, -/area/shuttle/abandoned/cargo) "mU" = ( /obj/structure/toilet{ pixel_y = 8 @@ -366,9 +361,7 @@ /area/shuttle/abandoned/crew) "nz" = ( /obj/structure/closet/secure_closet/freezer/fridge/open, -/obj/item/reagent_containers/condiment/enzyme{ - layer = 5 - }, +/obj/item/reagent_containers/condiment/enzyme, /obj/item/food/meat/slab/synthmeat{ pixel_x = -3; pixel_y = 3 @@ -538,7 +531,7 @@ /turf/open/floor/iron/small, /area/shuttle/abandoned/medbay) "ry" = ( -/turf/closed/wall/mineral/titanium/overspace, +/turf/closed/wall/mineral/titanium, /area/shuttle/abandoned/bar) "rO" = ( /obj/effect/decal/cleanable/dirt, @@ -598,9 +591,6 @@ /obj/structure/sign/poster/official/random/directional/north, /turf/open/floor/catwalk_floor, /area/shuttle/abandoned/engine) -"uk" = ( -/turf/closed/wall/mineral/titanium/overspace, -/area/shuttle/abandoned/pod) "ur" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/components/unary/vent_pump/on{ @@ -1033,7 +1023,7 @@ pixel_x = 4; pixel_y = 11 }, -/obj/item/stock_parts/cell/high{ +/obj/item/stock_parts/power_store/cell/high{ pixel_x = 4; pixel_y = 11 }, @@ -1170,7 +1160,7 @@ /obj/machinery/porta_turret/centcom_shuttle/weak{ dir = 4 }, -/turf/closed/wall/mineral/titanium/overspace, +/turf/closed/wall/mineral/titanium, /area/shuttle/abandoned/pod) "Ll" = ( /obj/structure/cable, @@ -1199,7 +1189,7 @@ /obj/machinery/cell_charger{ pixel_y = 11 }, -/obj/item/stock_parts/cell/high{ +/obj/item/stock_parts/power_store/cell/high{ pixel_y = 11 }, /obj/item/stack/cable_coil{ @@ -1277,7 +1267,7 @@ /obj/machinery/porta_turret/centcom_shuttle/weak{ dir = 4 }, -/turf/closed/wall/mineral/titanium/overspace, +/turf/closed/wall/mineral/titanium, /area/shuttle/abandoned/bridge) "Ql" = ( /obj/effect/decal/cleanable/dirt, @@ -1448,9 +1438,6 @@ /obj/machinery/light/built/directional/west, /turf/open/floor/carpet/green, /area/shuttle/abandoned/bar) -"WG" = ( -/turf/closed/wall/mineral/titanium/overspace, -/area/shuttle/abandoned/bridge) "WW" = ( /obj/effect/turf_decal/tile/red/half/contrasted{ dir = 4 @@ -1538,9 +1525,9 @@ (1,1,1) = {" lt lt -bp +Gi BH -bp +Gi lt lt lt @@ -1552,15 +1539,15 @@ lt lt lt lt -bp +Gi BH -bp +Gi lt lt "} (2,1,1) = {" lt -bp +Gi Om oe Gi @@ -1578,7 +1565,7 @@ BH Gi oe Om -bp +Gi lt "} (3,1,1) = {" @@ -1588,7 +1575,7 @@ Wu RH Gi oe -bp +Gi lt lt lt @@ -1596,7 +1583,7 @@ lt lt lt lt -bp +Gi oe Gi qn @@ -1674,7 +1661,7 @@ Gi lt "} (7,1,1) = {" -ma +Tg kQ DK er @@ -1694,7 +1681,7 @@ uF uF BR kQ -ma +Tg "} (8,1,1) = {" kQ @@ -1928,7 +1915,7 @@ lt "} (18,1,1) = {" lt -uk +PN pv pv pv @@ -1946,7 +1933,7 @@ KR JP JP JP -WG +XB lt "} (19,1,1) = {" @@ -2021,7 +2008,7 @@ lt (22,1,1) = {" lt lt -uk +PN pv xr qO @@ -2032,12 +2019,12 @@ lt lt lt lt -WG +XB JP Hk Bs JP -WG +XB lt lt "} @@ -2045,7 +2032,7 @@ lt lt lt lt -uk +PN BZ BZ Lj @@ -2059,7 +2046,7 @@ lt Qf YJ YJ -WG +XB lt lt lt diff --git a/_maps/shuttles/whiteship_cere.dmm b/_maps/shuttles/whiteship_cere.dmm index 4e53e54651e16..df697dc1739c1 100644 --- a/_maps/shuttles/whiteship_cere.dmm +++ b/_maps/shuttles/whiteship_cere.dmm @@ -502,7 +502,7 @@ /obj/structure/table/reinforced/titaniumglass, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden, /obj/machinery/cell_charger, -/obj/item/stock_parts/cell/high, +/obj/item/stock_parts/power_store/cell/high, /turf/open/floor/catwalk_floor/iron_dark, /area/shuttle/abandoned/cargo) "wN" = ( @@ -685,7 +685,9 @@ "Hw" = ( /obj/machinery/light/small/directional/east, /obj/machinery/computer/camera_advanced/shuttle_docker/whiteship{ - dir = 1 + dir = 1; + x_offset = 0; + y_offset = 10 }, /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/dark, diff --git a/_maps/shuttles/whiteship_delta.dmm b/_maps/shuttles/whiteship_delta.dmm index 53e09ce34d3c8..efc2302379730 100644 --- a/_maps/shuttles/whiteship_delta.dmm +++ b/_maps/shuttles/whiteship_delta.dmm @@ -1168,7 +1168,7 @@ /obj/structure/table, /obj/machinery/cell_charger, /obj/item/stack/cable_coil, -/obj/item/stock_parts/cell/high, +/obj/item/stock_parts/power_store/cell/high, /obj/item/multitool{ pixel_y = -13 }, @@ -1819,7 +1819,7 @@ pixel_x = -3; pixel_y = 8 }, -/obj/item/stock_parts/cell/high{ +/obj/item/stock_parts/power_store/cell/high{ pixel_x = 3; pixel_y = -1 }, diff --git a/_maps/shuttles/whiteship_donut.dmm b/_maps/shuttles/whiteship_donut.dmm index ff9d17b5e36b1..1c28cd3481875 100644 --- a/_maps/shuttles/whiteship_donut.dmm +++ b/_maps/shuttles/whiteship_donut.dmm @@ -36,9 +36,7 @@ /area/shuttle/abandoned) "aX" = ( /obj/machinery/power/shuttle_engine/heater, -/obj/structure/window/reinforced/spawner/directional/north{ - layer = 2.9 - }, +/obj/structure/window/reinforced/spawner/directional/north, /turf/open/floor/plating/airless, /area/shuttle/abandoned) "be" = ( @@ -55,7 +53,7 @@ /area/shuttle/abandoned) "cm" = ( /obj/effect/decal/cleanable/dirt, -/obj/item/stock_parts/cell/high, +/obj/item/stock_parts/power_store/cell/high, /turf/open/floor/iron/airless, /area/shuttle/abandoned) "da" = ( @@ -389,7 +387,7 @@ /area/shuttle/abandoned) "NG" = ( /obj/effect/decal/cleanable/dirt, -/obj/item/stock_parts/cell/high/empty, +/obj/item/stock_parts/power_store/cell/high/empty, /turf/open/floor/plating/airless, /area/shuttle/abandoned) "Ot" = ( @@ -468,7 +466,9 @@ /area/shuttle/abandoned) "XY" = ( /obj/machinery/computer/camera_advanced/shuttle_docker/whiteship{ - dir = 1 + dir = 1; + x_offset = 0; + y_offset = 9 }, /obj/effect/decal/cleanable/dirt, /obj/item/disk/holodisk/donutstation/whiteship, diff --git a/_maps/shuttles/whiteship_kilo.dmm b/_maps/shuttles/whiteship_kilo.dmm index cbc214f21d828..3dda9d34da2a1 100644 --- a/_maps/shuttles/whiteship_kilo.dmm +++ b/_maps/shuttles/whiteship_kilo.dmm @@ -207,7 +207,7 @@ /obj/machinery/power/shuttle_engine/propulsion/left{ dir = 8 }, -/turf/open/floor/plating, +/turf/open/floor/plating/airless, /area/shuttle/abandoned/engine) "jM" = ( /obj/structure/table, @@ -249,8 +249,8 @@ launch_status = 0; movement_force = list("KNOCKDOWN"=0,"THROW"=0); name = "Mining Shuttle"; - port_direction = 4; - preferred_direction = 8 + port_direction = 8; + preferred_direction = 4 }, /turf/open/floor/plating, /area/shuttle/abandoned/cargo) @@ -327,7 +327,7 @@ /obj/machinery/power/shuttle_engine/propulsion{ dir = 8 }, -/turf/open/floor/plating, +/turf/open/floor/plating/airless, /area/shuttle/abandoned/engine) "nt" = ( /obj/effect/turf_decal/stripes/line{ @@ -355,7 +355,7 @@ /obj/machinery/power/shuttle_engine/propulsion/right{ dir = 8 }, -/turf/open/floor/plating, +/turf/open/floor/plating/airless, /area/shuttle/abandoned/bar) "pI" = ( /obj/effect/turf_decal/delivery, @@ -416,7 +416,7 @@ /obj/machinery/power/shuttle_engine/propulsion/right{ dir = 8 }, -/turf/open/floor/plating, +/turf/open/floor/plating/airless, /area/shuttle/abandoned/engine) "rX" = ( /obj/effect/decal/cleanable/dirt, @@ -570,7 +570,7 @@ /obj/machinery/cell_charger, /obj/structure/table, /obj/effect/decal/cleanable/dirt, -/obj/item/stock_parts/cell/emproof/empty{ +/obj/item/stock_parts/power_store/cell/emproof/empty{ pixel_y = 7; pixel_x = 5 }, @@ -868,7 +868,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 4 }, -/turf/open/floor/plating, +/turf/open/floor/plating/airless, /area/shuttle/abandoned/engine) "Nh" = ( /turf/closed/wall/mineral/plastitanium, @@ -909,7 +909,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 4 }, -/turf/open/floor/plating, +/turf/open/floor/plating/airless, /area/shuttle/abandoned/bar) "Pe" = ( /obj/machinery/button/door/directional/north{ @@ -931,7 +931,7 @@ /obj/machinery/power/shuttle_engine/propulsion/left{ dir = 8 }, -/turf/open/floor/plating, +/turf/open/floor/plating/airless, /area/shuttle/abandoned/bar) "PR" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden{ @@ -1031,7 +1031,9 @@ }, /obj/machinery/computer/camera_advanced/shuttle_docker/whiteship{ dir = 4; - view_range = 14 + view_range = 14; + y_offset = 5; + x_offset = 0 }, /obj/effect/turf_decal/stripes/corner{ dir = 8 diff --git a/_maps/shuttles/whiteship_meta.dmm b/_maps/shuttles/whiteship_meta.dmm index c01d6742975ab..1557622647809 100644 --- a/_maps/shuttles/whiteship_meta.dmm +++ b/_maps/shuttles/whiteship_meta.dmm @@ -792,7 +792,7 @@ pixel_x = 2; pixel_y = 6 }, -/obj/item/stock_parts/cell/high, +/obj/item/stock_parts/power_store/cell/high, /turf/open/floor/iron/dark, /area/shuttle/abandoned/engine) "cy" = ( @@ -836,7 +836,7 @@ /obj/machinery/light/small/built/directional/west, /obj/effect/decal/cleanable/dirt, /obj/machinery/cell_charger, -/obj/item/stock_parts/cell/high, +/obj/item/stock_parts/power_store/cell/high, /obj/item/radio/off{ pixel_x = 6; pixel_y = 7 @@ -1000,7 +1000,7 @@ /obj/structure/table, /obj/machinery/cell_charger, /obj/item/stack/cable_coil, -/obj/item/stock_parts/cell/high, +/obj/item/stock_parts/power_store/cell/high, /obj/item/multitool, /obj/structure/cable, /turf/open/floor/plating, @@ -1361,7 +1361,6 @@ pixel_y = 14 }, /obj/item/reagent_containers/condiment/enzyme{ - layer = 5; pixel_x = -5; pixel_y = 6 }, @@ -1933,7 +1932,7 @@ /obj/item/stack/cable_coil{ pixel_x = 2 }, -/obj/item/stock_parts/cell/high, +/obj/item/stock_parts/power_store/cell/high, /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/shuttle/abandoned/cargo) diff --git a/_maps/shuttles/whiteship_obelisk.dmm b/_maps/shuttles/whiteship_obelisk.dmm index 4b8eb9ee91b84..0f1e07b1a213e 100644 --- a/_maps/shuttles/whiteship_obelisk.dmm +++ b/_maps/shuttles/whiteship_obelisk.dmm @@ -206,7 +206,7 @@ /obj/machinery/power/shuttle_engine/propulsion/left{ dir = 4 }, -/turf/open/floor/plating, +/turf/open/floor/plating/airless, /area/shuttle/abandoned/engine) "mQ" = ( /obj/structure/cable, @@ -271,14 +271,14 @@ dir = 4 }, /obj/structure/window/reinforced/spawner/directional/west, -/turf/open/floor/plating, +/turf/open/floor/plating/airless, /area/shuttle/abandoned/engine) "ot" = ( /obj/machinery/computer/camera_advanced/shuttle_docker/whiteship{ dir = 4; view_range = 14; - x_offset = -3; - y_offset = -3 + x_offset = -2; + y_offset = -7 }, /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/tile/dark_blue/anticorner{ @@ -438,7 +438,7 @@ /obj/effect/turf_decal/stripes{ dir = 4 }, -/turf/open/floor/plating, +/turf/open/floor/plating/airless, /area/shuttle/abandoned/engine) "zj" = ( /obj/structure/cable, @@ -699,7 +699,7 @@ /obj/machinery/power/shuttle_engine/propulsion/right{ dir = 4 }, -/turf/open/floor/plating, +/turf/open/floor/plating/airless, /area/shuttle/abandoned/engine) "PR" = ( /obj/structure/table/wood, diff --git a/_maps/shuttles/whiteship_personalshuttle.dmm b/_maps/shuttles/whiteship_personalshuttle.dmm index 8e041082bc6d9..7666f6c63add1 100644 --- a/_maps/shuttles/whiteship_personalshuttle.dmm +++ b/_maps/shuttles/whiteship_personalshuttle.dmm @@ -90,7 +90,7 @@ /obj/machinery/power/shuttle_engine/propulsion/right{ dir = 1 }, -/turf/open/floor/plating, +/turf/open/floor/plating/airless, /area/shuttle/abandoned/engine) "cM" = ( /turf/template_noop, @@ -100,7 +100,7 @@ dir = 1 }, /obj/structure/window/reinforced/spawner/directional/south, -/turf/open/floor/plating, +/turf/open/floor/plating/airless, /area/shuttle/abandoned/engine) "cY" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on, @@ -372,9 +372,8 @@ "DT" = ( /obj/machinery/computer/camera_advanced/shuttle_docker/whiteship{ dir = 1; - view_range = 14; - x_offset = -3; - y_offset = -3 + x_offset = 0; + y_offset = -5 }, /obj/effect/decal/cleanable/dirt, /turf/open/floor/mineral/plastitanium, @@ -523,7 +522,7 @@ /obj/machinery/power/shuttle_engine/propulsion/left{ dir = 1 }, -/turf/open/floor/plating, +/turf/open/floor/plating/airless, /area/shuttle/abandoned/engine) "WL" = ( /obj/machinery/light/cold/no_nightlight/directional/west, diff --git a/_maps/shuttles/whiteship_pubby.dmm b/_maps/shuttles/whiteship_pubby.dmm index 807d1385899ab..39024a6f0a391 100644 --- a/_maps/shuttles/whiteship_pubby.dmm +++ b/_maps/shuttles/whiteship_pubby.dmm @@ -271,7 +271,7 @@ "lV" = ( /obj/machinery/computer/camera_advanced/shuttle_docker/whiteship{ y_offset = 2; - x_offset = -7 + x_offset = -8 }, /obj/effect/decal/cleanable/cobweb/cobweb2, /obj/effect/decal/cleanable/dirt, @@ -406,7 +406,7 @@ "qS" = ( /obj/structure/table, /obj/machinery/cell_charger, -/obj/item/stock_parts/cell/high, +/obj/item/stock_parts/power_store/cell/high, /obj/effect/turf_decal/bot_white, /obj/effect/turf_decal/siding/purple{ dir = 9 @@ -550,7 +550,7 @@ shuttle_id = "whiteship"; launch_status = 0; name = "White Ship"; - port_direction = 2 + port_direction = 4 }, /turf/open/floor/plating, /area/shuttle/abandoned) @@ -595,9 +595,7 @@ /area/shuttle/abandoned) "zw" = ( /obj/machinery/power/shuttle_engine/heater, -/obj/structure/window/reinforced/spawner/directional/north{ - layer = 2.9 - }, +/obj/structure/window/reinforced/spawner/directional/north, /turf/open/floor/plating/airless, /area/shuttle/abandoned) "zY" = ( diff --git a/_maps/shuttles/whiteship_tram.dmm b/_maps/shuttles/whiteship_tram.dmm index 0dfa8b414bdd6..7666e2c70ac85 100644 --- a/_maps/shuttles/whiteship_tram.dmm +++ b/_maps/shuttles/whiteship_tram.dmm @@ -500,7 +500,7 @@ /obj/structure/cable, /obj/structure/table, /obj/machinery/cell_charger, -/obj/item/stock_parts/cell/high, +/obj/item/stock_parts/power_store/cell/high, /obj/item/multitool{ pixel_x = 7; pixel_y = 5 @@ -1164,7 +1164,9 @@ /area/shuttle/abandoned/cargo) "Ft" = ( /obj/machinery/computer/camera_advanced/shuttle_docker/whiteship{ - dir = 8 + dir = 8; + x_offset = 0; + y_offset = 13 }, /obj/effect/turf_decal/stripes/white/corner{ dir = 1 diff --git a/_maps/templates/battlecruiser_starfury.dmm b/_maps/templates/battlecruiser_starfury.dmm index 001a937e97b3b..59d6b325fdaac 100644 --- a/_maps/templates/battlecruiser_starfury.dmm +++ b/_maps/templates/battlecruiser_starfury.dmm @@ -21,8 +21,7 @@ /area/shuttle/sbc_starfury) "ad" = ( /obj/machinery/door/poddoor/preopen{ - id = "syndie_battlecruier_bridge_blast"; - layer = 3 + id = "syndie_battlecruier_bridge_blast" }, /obj/structure/cable, /obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, @@ -409,8 +408,7 @@ /area/shuttle/sbc_starfury) "bx" = ( /obj/machinery/door/poddoor/preopen{ - id = "syndie_battlecruier_bridge_blast"; - layer = 3 + id = "syndie_battlecruier_bridge_blast" }, /obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, /obj/structure/cable, @@ -645,14 +643,6 @@ }, /turf/open/floor/iron/dark, /area/shuttle/sbc_starfury) -"cy" = ( -/obj/structure/table, -/obj/machinery/cell_charger, -/obj/item/stock_parts/cell/high, -/obj/effect/turf_decal/siding/thinplating_new/dark, -/obj/effect/turf_decal/stripes/red/line, -/turf/open/floor/mineral/plastitanium/red, -/area/shuttle/sbc_starfury) "cz" = ( /obj/machinery/newscaster/directional/south, /obj/structure/table/reinforced/plastitaniumglass, @@ -997,7 +987,6 @@ /obj/structure/sign/warning/secure_area/directional/east{ desc = "A warning sign which reads 'KEEP CLEAR: SHUTTLE BAY'"; icon_state = "space"; - layer = 4; name = "KEEP CLEAR: SHUTTLE BAY" }, /obj/effect/turf_decal/stripes/red/line, @@ -1007,7 +996,6 @@ /obj/structure/sign/warning/secure_area/directional/west{ desc = "A warning sign which reads 'KEEP CLEAR: SHUTTLE BAY'"; icon_state = "space"; - layer = 4; name = "KEEP CLEAR: SHUTTLE BAY" }, /obj/effect/turf_decal/stripes/red/line, @@ -1592,6 +1580,15 @@ /obj/machinery/door/airlock/multi_tile/public/glass, /turf/open/floor/pod/light, /area/shuttle/sbc_starfury) +"fE" = ( +/obj/structure/table/reinforced, +/obj/machinery/cell_charger, +/obj/item/stock_parts/power_store/cell/high, +/obj/effect/turf_decal/tile/yellow/anticorner/contrasted{ + dir = 8 + }, +/turf/open/floor/iron, +/area/shuttle/sbc_starfury) "fF" = ( /obj/effect/mapping_helpers/airlock/access/all/syndicate/general, /obj/machinery/door/firedoor/heavy, @@ -1614,6 +1611,14 @@ /obj/effect/mapping_helpers/airlock/access/all/syndicate/general, /turf/open/floor/iron/showroomfloor, /area/shuttle/sbc_starfury) +"fR" = ( +/obj/structure/table, +/obj/machinery/cell_charger, +/obj/item/stock_parts/power_store/cell/high, +/obj/effect/turf_decal/siding/thinplating_new/dark, +/obj/effect/turf_decal/stripes/red/line, +/turf/open/floor/mineral/plastitanium/red, +/area/shuttle/sbc_starfury) "fS" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -1641,7 +1646,6 @@ /obj/structure/sign/warning/secure_area/directional/east{ desc = "A warning sign which reads 'KEEP CLEAR: SHUTTLE BAY'"; icon_state = "space"; - layer = 4; name = "KEEP CLEAR: SHUTTLE BAY" }, /obj/effect/turf_decal/stripes/red/line{ @@ -1682,7 +1686,6 @@ /obj/structure/sign/warning/secure_area/directional/west{ desc = "A warning sign which reads 'KEEP CLEAR: SHUTTLE BAY'"; icon_state = "space"; - layer = 4; name = "KEEP CLEAR: SHUTTLE BAY" }, /obj/effect/turf_decal/stripes/line{ @@ -1732,19 +1735,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/shuttle/sbc_starfury) -"gN" = ( -/obj/structure/table, -/obj/machinery/cell_charger, -/obj/item/stock_parts/cell/high, -/obj/structure/cable, -/obj/effect/turf_decal/siding/thinplating_new/dark{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/red/line{ - dir = 8 - }, -/turf/open/floor/mineral/plastitanium/red, -/area/shuttle/sbc_starfury) "gO" = ( /obj/effect/turf_decal/tile/red/half/contrasted{ dir = 8 @@ -2196,8 +2186,7 @@ /area/shuttle/sbc_starfury) "hZ" = ( /obj/structure/rack{ - dir = 8; - layer = 2.9 + dir = 8 }, /obj/item/gun/ballistic/automatic/m90{ pixel_x = -3; @@ -2212,8 +2201,7 @@ /area/shuttle/sbc_starfury) "ia" = ( /obj/structure/rack{ - dir = 8; - layer = 2.9 + dir = 8 }, /obj/item/gun/ballistic/shotgun/bulldog{ pixel_x = -3; @@ -2258,21 +2246,6 @@ /obj/structure/extinguisher_cabinet/directional/east, /turf/open/floor/pod/light, /area/shuttle/sbc_starfury) -"ic" = ( -/obj/machinery/computer/security/telescreen/entertainment{ - pixel_x = -31 - }, -/obj/item/book/manual/wiki/barman_recipes, -/obj/item/reagent_containers/cup/glass/shaker{ - pixel_x = 10 - }, -/obj/structure/table/reinforced/plastitaniumglass, -/obj/effect/turf_decal/siding/dark{ - dir = 1 - }, -/obj/effect/turf_decal/tile/bar, -/turf/open/floor/iron/dark, -/area/shuttle/sbc_starfury) "id" = ( /obj/item/toy/cards/deck/syndicate{ pixel_x = -6; @@ -2389,8 +2362,7 @@ /area/shuttle/sbc_starfury) "io" = ( /obj/structure/rack{ - dir = 8; - layer = 2.9 + dir = 8 }, /obj/item/gun/ballistic/revolver/syndicate{ pixel_x = 2; @@ -2470,8 +2442,7 @@ /area/shuttle/sbc_starfury) "ix" = ( /obj/structure/rack{ - dir = 8; - layer = 2.9 + dir = 8 }, /obj/item/storage/belt/military, /obj/item/ammo_box/magazine/m7mm, @@ -2537,7 +2508,7 @@ pixel_x = -5; pixel_y = 2 }, -/obj/item/clothing/mask/cigarette/cigar{ +/obj/item/cigarette/cigar{ pixel_x = 5; pixel_y = 7 }, @@ -2578,8 +2549,7 @@ /area/shuttle/sbc_starfury) "iN" = ( /obj/structure/rack{ - dir = 8; - layer = 2.9 + dir = 8 }, /obj/item/mod/control/pre_equipped/elite{ pixel_x = 1; @@ -3195,7 +3165,6 @@ /obj/structure/sign/warning/secure_area/directional/north{ desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; - layer = 4; name = "EXTERNAL AIRLOCK" }, /obj/effect/turf_decal/stripes/line{ @@ -3267,7 +3236,6 @@ /obj/structure/sign/warning/secure_area/directional/north{ desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; - layer = 4; name = "EXTERNAL AIRLOCK" }, /obj/effect/turf_decal/stripes/line{ @@ -3276,15 +3244,6 @@ /obj/machinery/light/small/red/directional/north, /turf/open/floor/plating, /area/shuttle/sbc_starfury) -"lg" = ( -/obj/structure/table/reinforced, -/obj/machinery/cell_charger, -/obj/item/stock_parts/cell/high, -/obj/effect/turf_decal/tile/yellow/anticorner/contrasted{ - dir = 8 - }, -/turf/open/floor/iron, -/area/shuttle/sbc_starfury) "lh" = ( /obj/effect/turf_decal/tile/yellow{ dir = 8 @@ -4577,6 +4536,19 @@ /obj/structure/cable, /turf/open/floor/iron/dark/textured, /area/shuttle/sbc_starfury) +"Dy" = ( +/obj/structure/table, +/obj/machinery/cell_charger, +/obj/item/stock_parts/power_store/cell/high, +/obj/structure/cable, +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/red/line{ + dir = 8 + }, +/turf/open/floor/mineral/plastitanium/red, +/area/shuttle/sbc_starfury) "Dz" = ( /obj/item/crowbar/red, /obj/structure/cable, @@ -4902,8 +4874,7 @@ /area/shuttle/sbc_starfury) "Jl" = ( /obj/structure/rack{ - dir = 8; - layer = 2.9 + dir = 8 }, /obj/machinery/airalarm/directional/east, /obj/item/storage/belt/military, @@ -4943,8 +4914,7 @@ /area/shuttle/sbc_starfury) "JL" = ( /obj/structure/rack{ - dir = 8; - layer = 2.9 + dir = 8 }, /obj/item/card/emag{ pixel_x = -2; @@ -5088,17 +5058,6 @@ /obj/machinery/light/small/red/directional/north, /turf/open/floor/plating, /area/shuttle/sbc_starfury) -"MQ" = ( -/obj/structure/closet/crate, -/obj/item/stock_parts/cell/high, -/obj/item/stock_parts/cell/high{ - pixel_x = -3; - pixel_y = -3 - }, -/obj/item/inducer/syndicate, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, -/area/shuttle/sbc_starfury) "MR" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -5371,6 +5330,19 @@ /obj/machinery/firealarm/directional/south, /turf/open/floor/engine, /area/shuttle/sbc_starfury) +"RX" = ( +/obj/item/book/manual/wiki/barman_recipes, +/obj/item/reagent_containers/cup/glass/shaker{ + pixel_x = 10 + }, +/obj/structure/table/reinforced/plastitaniumglass, +/obj/effect/turf_decal/siding/dark{ + dir = 1 + }, +/obj/effect/turf_decal/tile/bar, +/obj/machinery/computer/security/telescreen/entertainment/directional/west, +/turf/open/floor/iron/dark, +/area/shuttle/sbc_starfury) "Sb" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/centcom{ @@ -5631,6 +5603,17 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/dark/side, /area/shuttle/sbc_starfury) +"WI" = ( +/obj/structure/closet/crate, +/obj/item/stock_parts/power_store/cell/high, +/obj/item/stock_parts/power_store/cell/high{ + pixel_x = -3; + pixel_y = -3 + }, +/obj/item/inducer/syndicate, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/shuttle/sbc_starfury) "WV" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, @@ -6066,7 +6049,7 @@ ce ae hd hD -ic +RX iq iy ae @@ -6486,7 +6469,7 @@ Jf ae kz kO -lg +fE ae ae Fc @@ -6720,7 +6703,7 @@ ay ag dY UB -cy +fR ec eB aH @@ -7286,7 +7269,7 @@ ST ae ae gB -gN +Dy gY Fl hS @@ -7772,7 +7755,7 @@ mQ ae nR Xr -MQ +WI ae ko ae diff --git a/_maps/templates/holodeck_basketball.dmm b/_maps/templates/holodeck_basketball.dmm index 7af2c536439bb..3260193010956 100644 --- a/_maps/templates/holodeck_basketball.dmm +++ b/_maps/templates/holodeck_basketball.dmm @@ -9,8 +9,7 @@ /area/template_noop) "b" = ( /obj/structure/hoop{ - dir = 1; - layer = 4.1 + dir = 1 }, /obj/effect/turf_decal/tile/green/half/contrasted, /turf/open/floor/holofloor, @@ -44,9 +43,7 @@ /turf/open/floor/holofloor, /area/template_noop) "k" = ( -/obj/structure/hoop{ - layer = 3.9 - }, +/obj/structure/hoop, /obj/effect/turf_decal/tile/red/half/contrasted{ dir = 1 }, diff --git a/_maps/templates/holodeck_kobayashi.dmm b/_maps/templates/holodeck_kobayashi.dmm index babaeaac2a0d1..bb8c5c297acf1 100644 --- a/_maps/templates/holodeck_kobayashi.dmm +++ b/_maps/templates/holodeck_kobayashi.dmm @@ -5,14 +5,12 @@ "c" = ( /obj/machinery/button/massdriver/indestructible{ id = "trektorpedo1"; - layer = 3.9; name = "photon torpedo button"; pixel_x = -16; pixel_y = -5 }, /obj/machinery/button/massdriver/indestructible{ id = "trektorpedo2"; - layer = 3.9; name = "photon torpedo button"; pixel_x = 16; pixel_y = -5 @@ -131,9 +129,7 @@ /obj/structure/rack, /obj/item/clothing/under/trek/engsec, /obj/item/clothing/under/trek/engsec, -/obj/structure/window/reinforced/spawner/directional/east{ - layer = 2.9 - }, +/obj/structure/window/reinforced/spawner/directional/east, /obj/effect/turf_decal/tile/neutral/half/contrasted{ dir = 1 }, @@ -144,9 +140,7 @@ /turf/open/floor/holofloor/plating, /area/template_noop) "J" = ( -/obj/structure/window/reinforced/spawner/directional/east{ - layer = 2.9 - }, +/obj/structure/window/reinforced/spawner/directional/east, /obj/effect/turf_decal/tile/neutral/half/contrasted{ dir = 1 }, diff --git a/_maps/templates/holodeck_lounge.dmm b/_maps/templates/holodeck_lounge.dmm index 3807be667cbf9..1bcec197d7b66 100644 --- a/_maps/templates/holodeck_lounge.dmm +++ b/_maps/templates/holodeck_lounge.dmm @@ -33,9 +33,7 @@ /area/template_noop) "f" = ( /obj/structure/table/wood, -/obj/item/flashlight/lamp/green{ - layer = 3.3 - }, +/obj/item/flashlight/lamp/green, /turf/open/floor/holofloor{ dir = 9; icon_state = "wood" @@ -43,7 +41,7 @@ /area/template_noop) "h" = ( /obj/structure/table/wood, -/obj/item/clothing/mask/cigarette/pipe, +/obj/item/cigarette/pipe, /obj/effect/holodeck_effect/random_book, /turf/open/floor/holofloor/carpet, /area/template_noop) @@ -56,9 +54,7 @@ }, /area/template_noop) "j" = ( -/obj/structure/window/reinforced/spawner/directional/east{ - layer = 2.9 - }, +/obj/structure/window/reinforced/spawner/directional/east, /turf/open/floor/holofloor{ dir = 9; icon_state = "wood" @@ -74,9 +70,7 @@ /area/template_noop) "l" = ( /obj/structure/chair/stool/bar/directional/south, -/obj/structure/window/reinforced/spawner/directional/east{ - layer = 2.9 - }, +/obj/structure/window/reinforced/spawner/directional/east, /turf/open/floor/holofloor{ dir = 9; icon_state = "wood" @@ -256,7 +250,7 @@ /area/template_noop) "T" = ( /obj/structure/table/wood/poker, -/obj/item/clothing/mask/cigarette/pipe, +/obj/item/cigarette/pipe, /turf/open/floor/holofloor{ dir = 9; icon_state = "wood" @@ -279,9 +273,7 @@ /area/template_noop) "Y" = ( /obj/structure/table/wood/shuttle_bar, -/obj/structure/window/reinforced/spawner/directional/east{ - layer = 2.9 - }, +/obj/structure/window/reinforced/spawner/directional/east, /turf/open/floor/holofloor{ dir = 9; icon_state = "wood" diff --git a/_maps/templates/lazy_templates/ninja_den.dmm b/_maps/templates/lazy_templates/ninja_den.dmm index b1506b72efed5..88f4bce19d45a 100644 --- a/_maps/templates/lazy_templates/ninja_den.dmm +++ b/_maps/templates/lazy_templates/ninja_den.dmm @@ -1691,7 +1691,6 @@ pixel_y = 4 }, /obj/item/reagent_containers/condiment/enzyme{ - layer = 5; pixel_x = 10; pixel_y = 2 }, @@ -2040,9 +2039,7 @@ /obj/item/food/grown/cabbage, /obj/item/food/grown/cherries, /obj/item/food/grown/cherries, -/obj/item/reagent_containers/condiment/enzyme{ - layer = 5 - }, +/obj/item/reagent_containers/condiment/enzyme, /obj/item/food/grown/redbeet, /turf/open/floor/catwalk_floor, /area/centcom/central_command_areas/holding) diff --git a/_maps/templates/lazy_templates/nukie_base.dmm b/_maps/templates/lazy_templates/nukie_base.dmm index 059d27000d0e5..60c5b1dcb5825 100644 --- a/_maps/templates/lazy_templates/nukie_base.dmm +++ b/_maps/templates/lazy_templates/nukie_base.dmm @@ -124,14 +124,10 @@ /turf/open/floor/plating, /area/centcom/syndicate_mothership/control) "bQ" = ( +/obj/machinery/atmospherics/components/trinary/filter/flipped, /obj/effect/turf_decal/stripes/line{ - dir = 10 - }, -/obj/machinery/atmospherics/components/binary/pump/on{ - dir = 1 + dir = 8 }, -/obj/machinery/airalarm/directional/west, -/obj/effect/mapping_helpers/airalarm/unlocked, /turf/open/floor/mineral/titanium/tiled/yellow, /area/centcom/syndicate_mothership/expansion_bombthreat) "bT" = ( @@ -165,21 +161,11 @@ /turf/open/floor/iron/smooth, /area/centcom/syndicate_mothership/control) "cA" = ( -/obj/effect/turf_decal/stripes/line, -/obj/machinery/button/ignition/incinerator/ordmix{ - id = "syn_ordmix_igniter"; - pixel_x = -6; - pixel_y = -30 - }, -/obj/machinery/button/door/directional/south{ - id = "syn_ordmix_vent"; - pixel_x = 5; - pixel_y = -29 - }, -/obj/machinery/camera/autoname/directional/south{ - network = list("nukie") +/obj/machinery/portable_atmospherics/pump/lil_pump{ + desc = "A betrayer to pump-kind." }, -/turf/open/floor/mineral/titanium/tiled/yellow, +/obj/effect/turf_decal/stripes/box, +/turf/open/floor/mineral/plastitanium, /area/centcom/syndicate_mothership/expansion_bombthreat) "cF" = ( /obj/effect/baseturf_helper/asteroid/snow, @@ -489,7 +475,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 4 }, -/obj/machinery/portable_atmospherics/canister/oxygen, +/obj/machinery/portable_atmospherics/canister/plasma, /turf/open/floor/plating, /area/centcom/syndicate_mothership/expansion_bombthreat) "fu" = ( @@ -497,6 +483,13 @@ /obj/machinery/light/floor, /turf/open/floor/iron/freezer, /area/centcom/syndicate_mothership/control) +"fv" = ( +/obj/machinery/light/small/directional/south, +/obj/machinery/igniter/incinerator_ordmix{ + id = "syn_ordmix_igniter" + }, +/turf/open/floor/engine/vacuum, +/area/centcom/syndicate_mothership/expansion_bombthreat) "fw" = ( /obj/structure/frame/computer, /obj/effect/decal/cleanable/cobweb, @@ -537,23 +530,6 @@ /obj/item/kirbyplants/random, /turf/open/floor/catwalk_floor/iron_smooth, /area/centcom/syndicate_mothership/control) -"fD" = ( -/obj/structure/window/reinforced/survival_pod/spawner/directional/south{ - name = "Tinted Window" - }, -/obj/structure/table/reinforced/plasmarglass, -/obj/effect/turf_decal/siding/thinplating_new/dark{ - dir = 4 - }, -/obj/item/transfer_valve{ - pixel_x = 5 - }, -/obj/item/transfer_valve, -/obj/item/transfer_valve{ - pixel_x = -5 - }, -/turf/open/floor/mineral/plastitanium/red, -/area/centcom/syndicate_mothership/expansion_bombthreat) "fK" = ( /obj/machinery/hydroponics/constructable, /turf/open/floor/mineral/titanium/tiled, @@ -578,10 +554,10 @@ /turf/open/floor/iron/dark/textured_large, /area/centcom/syndicate_mothership/control) "gh" = ( -/obj/machinery/atmospherics/components/trinary/mixer, /obj/effect/turf_decal/siding/thinplating_new/dark{ dir = 4 }, +/obj/machinery/atmospherics/components/unary/portables_connector/visible, /turf/open/floor/mineral/plastitanium/red, /area/centcom/syndicate_mothership/expansion_bombthreat) "go" = ( @@ -634,6 +610,16 @@ }, /turf/open/floor/mineral/titanium/tiled/yellow, /area/centcom/syndicate_mothership/expansion_chemicalwarfare) +"gK" = ( +/obj/effect/turf_decal/stripes/line, +/obj/machinery/computer/atmos_control/noreconnect{ + atmos_chambers = list("nukiebase"="Burn Chamber"); + desc = "Used to monitor the Syndicate Ordnance Laboratory's burn chamber."; + dir = 1; + name = "Ordnance Chamber Monitor" + }, +/turf/open/floor/mineral/titanium/tiled/yellow, +/area/centcom/syndicate_mothership/expansion_bombthreat) "gL" = ( /obj/structure/window/reinforced/survival_pod/spawner/directional/south{ name = "Tinted Window" @@ -651,6 +637,15 @@ }, /turf/open/floor/mineral/titanium/tiled/blue, /area/centcom/syndicate_mothership/control) +"gO" = ( +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/turf/open/floor/mineral/titanium/tiled/blue, +/area/centcom/syndicate_mothership/expansion_bombthreat) "gS" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden, /obj/machinery/atmospherics/pipe/smart/manifold4w/orange/hidden/layer5, @@ -747,30 +742,12 @@ /turf/open/floor/mineral/plastitanium, /area/centcom/syndicate_mothership/control) "ia" = ( -/obj/structure/rack, /obj/effect/turf_decal/siding/thinplating_new/dark{ dir = 8 }, -/obj/item/stock_parts/micro_laser/high{ - pixel_x = 12 - }, -/obj/item/wrench{ - desc = "A little smidgeon of Freon..."; - name = "Freon" - }, -/obj/item/stock_parts/micro_laser/high{ - pixel_x = -4; - pixel_y = -8 - }, -/obj/item/stock_parts/micro_laser/high{ - pixel_x = 8; - pixel_y = 4 - }, -/obj/item/stock_parts/micro_laser/high{ - pixel_x = -8; - pixel_y = -4 +/obj/machinery/atmospherics/components/unary/thermomachine/freezer{ + dir = 4 }, -/obj/item/melee/powerfist, /turf/open/floor/mineral/plastitanium/red, /area/centcom/syndicate_mothership/expansion_bombthreat) "id" = ( @@ -1121,6 +1098,15 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/orange/hidden/layer5, /turf/open/floor/iron/smooth, /area/centcom/syndicate_mothership/control) +"lO" = ( +/obj/machinery/atmospherics/pipe/smart/simple/dark/visible{ + dir = 5 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/mineral/titanium/tiled/yellow, +/area/centcom/syndicate_mothership/expansion_bombthreat) "lQ" = ( /obj/structure/chair/sofa/left/brown{ dir = 4 @@ -1247,16 +1233,16 @@ /obj/machinery/light/cold/directional/east, /turf/open/floor/mineral/plastitanium, /area/centcom/syndicate_mothership/expansion_bioterrorism) -"nQ" = ( -/turf/closed/indestructible/syndicate, -/area/centcom/syndicate_mothership/expansion_chemicalwarfare) -"nR" = ( +"nN" = ( +/obj/structure/tank_dispenser, /obj/effect/turf_decal/stripes/line{ - dir = 8 + dir = 5 }, -/obj/machinery/portable_atmospherics/canister/oxygen, -/turf/open/floor/plating, +/turf/open/floor/mineral/titanium/tiled/yellow, /area/centcom/syndicate_mothership/expansion_bombthreat) +"nQ" = ( +/turf/closed/indestructible/syndicate, +/area/centcom/syndicate_mothership/expansion_chemicalwarfare) "nS" = ( /obj/structure/flora/grass/both/style_random, /obj/structure/flora/tree/dead/style_random, @@ -1274,6 +1260,15 @@ }, /turf/open/misc/asteroid/snow/icemoon, /area/centcom/syndicate_mothership/control) +"oe" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 1 + }, +/turf/open/floor/mineral/plastitanium/red, +/area/centcom/syndicate_mothership/expansion_bombthreat) "oh" = ( /obj/structure/table/reinforced, /obj/item/syndicatedetonator{ @@ -1492,9 +1487,7 @@ /obj/item/food/grown/tomato, /obj/item/food/grown/tomato, /obj/item/food/grown/tomato, -/obj/item/reagent_containers/condiment/enzyme{ - layer = 5 - }, +/obj/item/reagent_containers/condiment/enzyme, /obj/item/storage/fancy/egg_box, /obj/item/storage/fancy/egg_box, /obj/item/reagent_containers/condiment/milk, @@ -1540,16 +1533,6 @@ dir = 4 }, /area/centcom/syndicate_mothership/control) -"qK" = ( -/obj/machinery/computer/atmos_control/noreconnect{ - atmos_chambers = list("nukiebase"="Burn Chamber"); - desc = "Used to monitor the Syndicate Ordnance Laboratory's burn chamber."; - dir = 1; - name = "Ordnance Chamber Monitor" - }, -/obj/effect/turf_decal/stripes/line, -/turf/open/floor/mineral/titanium/tiled/yellow, -/area/centcom/syndicate_mothership/expansion_bombthreat) "qN" = ( /turf/open/floor/iron/dark/textured_large, /area/centcom/syndicate_mothership/control) @@ -1678,15 +1661,6 @@ /obj/structure/extinguisher_cabinet/directional/west, /turf/open/floor/mineral/titanium, /area/centcom/syndicate_mothership/control) -"sj" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 6 - }, -/obj/machinery/atmospherics/components/unary/portables_connector/visible{ - dir = 1 - }, -/turf/open/floor/mineral/titanium/tiled/blue, -/area/centcom/syndicate_mothership/expansion_bombthreat) "sl" = ( /obj/machinery/light/floor, /turf/open/floor/mineral/plastitanium, @@ -1779,6 +1753,17 @@ }, /turf/open/misc/asteroid/snow/icemoon, /area/centcom/syndicate_mothership/control) +"tn" = ( +/obj/machinery/airalarm/directional/west, +/obj/effect/mapping_helpers/airalarm/unlocked, +/obj/machinery/atmospherics/components/binary/pump/on{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/turf/open/floor/mineral/titanium/tiled/yellow, +/area/centcom/syndicate_mothership/expansion_bombthreat) "tu" = ( /obj/structure/table/reinforced, /obj/effect/turf_decal/siding/red/corner{ @@ -1892,6 +1877,13 @@ }, /turf/open/floor/mineral/plastitanium/red, /area/centcom/syndicate_mothership/control) +"vm" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/portable_atmospherics/canister/carbon_dioxide, +/turf/open/floor/plating, +/area/centcom/syndicate_mothership/expansion_bombthreat) "vv" = ( /obj/structure/table/reinforced, /obj/item/paper/fluff/stations/centcom/disk_memo{ @@ -2094,23 +2086,18 @@ /turf/open/floor/mineral/plastitanium, /area/centcom/syndicate_mothership/expansion_chemicalwarfare) "yi" = ( -/obj/machinery/atmospherics/components/unary/portables_connector/visible{ - dir = 1 - }, /obj/effect/turf_decal/siding/thinplating_new/dark{ dir = 4 }, +/obj/machinery/atmospherics/components/trinary/mixer, /turf/open/floor/mineral/plastitanium/red, /area/centcom/syndicate_mothership/expansion_bombthreat) "ym" = ( -/obj/structure/window/reinforced/survival_pod/spawner/directional/south{ - name = "Tinted Window" - }, -/obj/effect/turf_decal/stripes/line{ - dir = 6 - }, /obj/machinery/portable_atmospherics/canister/oxygen, /obj/machinery/light/cold/directional/east, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, /turf/open/floor/plating, /area/centcom/syndicate_mothership/expansion_bombthreat) "yp" = ( @@ -2291,13 +2278,14 @@ /turf/open/floor/mineral/titanium/tiled, /area/centcom/syndicate_mothership/control) "AA" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 +/obj/structure/window/reinforced/survival_pod/spawner/directional/south{ + name = "Tinted Window" }, -/obj/machinery/atmospherics/components/unary/portables_connector/visible{ - dir = 8 +/obj/machinery/portable_atmospherics/canister/oxygen, +/obj/effect/turf_decal/stripes/line{ + dir = 10 }, -/turf/open/floor/mineral/titanium/tiled/yellow, +/turf/open/floor/plating, /area/centcom/syndicate_mothership/expansion_bombthreat) "AL" = ( /obj/machinery/light/cold/directional/south, @@ -2566,6 +2554,29 @@ }, /turf/open/floor/mineral/plastitanium, /area/centcom/syndicate_mothership/control) +"DO" = ( +/obj/machinery/button/door/directional/south{ + id = "syn_ordmix_vent"; + pixel_x = 5; + pixel_y = -29 + }, +/obj/machinery/button/ignition/incinerator/ordmix{ + id = "syn_ordmix_igniter"; + pixel_x = -6; + pixel_y = -30 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/camera/autoname/directional/south{ + network = list("nukie") + }, +/turf/open/floor/mineral/titanium/tiled/yellow, +/area/centcom/syndicate_mothership/expansion_bombthreat) +"DV" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 8 + }, +/turf/open/floor/mineral/plastitanium/red, +/area/centcom/syndicate_mothership/expansion_bombthreat) "DY" = ( /obj/structure/table/wood/poker, /obj/machinery/light/warm/directional/north, @@ -2577,7 +2588,7 @@ pixel_x = 3; pixel_y = 6 }, -/obj/item/clothing/mask/cigarette/robust{ +/obj/item/cigarette/robust{ pixel_x = -4; pixel_y = 1 }, @@ -2682,6 +2693,15 @@ /obj/item/flashlight/lamp, /turf/open/floor/carpet, /area/centcom/syndicate_mothership/control) +"FB" = ( +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/mineral/titanium/tiled/yellow, +/area/centcom/syndicate_mothership/expansion_bombthreat) "FG" = ( /obj/effect/turf_decal/stripes/corner, /obj/effect/turf_decal/stripes/corner{ @@ -2710,13 +2730,11 @@ }, /area/centcom/syndicate_mothership/control) "FU" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/simple/dark/visible{ - dir = 5 +/obj/machinery/atmospherics/components/unary/portables_connector/visible, +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 8 }, -/turf/open/floor/mineral/titanium/tiled/yellow, +/turf/open/floor/mineral/plastitanium/red, /area/centcom/syndicate_mothership/expansion_bombthreat) "Ga" = ( /obj/effect/turf_decal/siding/wideplating{ @@ -2749,6 +2767,12 @@ }, /turf/open/misc/asteroid/snow/airless, /area/centcom/syndicate_mothership) +"Gm" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 4 + }, +/turf/open/floor/mineral/plastitanium/red, +/area/centcom/syndicate_mothership/expansion_bombthreat) "Gr" = ( /obj/machinery/washing_machine, /obj/structure/extinguisher_cabinet/directional/north, @@ -3021,10 +3045,12 @@ /turf/open/floor/plastic, /area/centcom/syndicate_mothership/expansion_fridgerummage) "If" = ( +/obj/machinery/atmospherics/pipe/smart/simple/general/visible{ + dir = 10 + }, /obj/effect/turf_decal/stripes/line{ - dir = 8 + dir = 9 }, -/obj/machinery/atmospherics/components/trinary/filter/flipped, /turf/open/floor/mineral/titanium/tiled/yellow, /area/centcom/syndicate_mothership/expansion_bombthreat) "In" = ( @@ -3057,6 +3083,15 @@ /obj/effect/turf_decal/tile/bar/opposingcorners, /turf/open/floor/iron, /area/centcom/syndicate_mothership/control) +"IK" = ( +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/turf/open/floor/mineral/titanium/tiled/blue, +/area/centcom/syndicate_mothership/expansion_bombthreat) "IL" = ( /obj/structure/table/reinforced, /obj/effect/turf_decal/siding/red, @@ -3253,13 +3288,6 @@ /obj/effect/turf_decal/tile/red/full, /turf/open/floor/iron/dark/textured_half, /area/centcom/syndicate_mothership/control) -"Le" = ( -/obj/machinery/igniter/incinerator_ordmix{ - id = "syn_ordmix_igniter" - }, -/obj/machinery/light/small/directional/south, -/turf/open/floor/engine/vacuum, -/area/centcom/syndicate_mothership/expansion_bombthreat) "Lk" = ( /obj/structure/table/reinforced, /obj/effect/turf_decal/siding/red{ @@ -3310,13 +3338,6 @@ /obj/item/pen/red, /turf/open/floor/iron/dark/textured_large, /area/centcom/syndicate_mothership/control) -"LF" = ( -/obj/effect/turf_decal/stripes/box, -/obj/machinery/portable_atmospherics/pump/lil_pump{ - desc = "A betrayer to pump-kind." - }, -/turf/open/floor/mineral/plastitanium, -/area/centcom/syndicate_mothership/expansion_bombthreat) "LM" = ( /obj/machinery/atmospherics/components/unary/passive_vent{ dir = 8 @@ -3344,15 +3365,6 @@ /obj/effect/turf_decal/tile/bar/opposingcorners, /turf/open/floor/iron, /area/centcom/syndicate_mothership/control) -"LY" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/machinery/atmospherics/components/trinary/filter{ - dir = 8 - }, -/turf/open/floor/mineral/titanium/tiled/yellow, -/area/centcom/syndicate_mothership/expansion_bombthreat) "Mb" = ( /obj/structure/lattice/catwalk, /obj/structure/railing{ @@ -3486,7 +3498,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 5 }, -/obj/machinery/portable_atmospherics/canister, +/obj/machinery/portable_atmospherics/canister/nitrogen, /turf/open/floor/plating, /area/centcom/syndicate_mothership/expansion_bombthreat) "ND" = ( @@ -3499,7 +3511,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 9 }, -/obj/machinery/portable_atmospherics/canister, +/obj/machinery/portable_atmospherics/canister/nitrogen, /turf/open/floor/plating, /area/centcom/syndicate_mothership/expansion_bombthreat) "NP" = ( @@ -3520,59 +3532,38 @@ /turf/open/floor/iron/textured_large, /area/centcom/syndicate_mothership/control) "Oc" = ( -/obj/structure/window/reinforced/survival_pod/spawner/directional/south{ - name = "Tinted Window" - }, -/obj/structure/table/reinforced/plasmarglass, /obj/effect/turf_decal/siding/thinplating_new/dark{ dir = 8 }, -/obj/item/assembly/prox_sensor{ - pixel_x = -6; - pixel_y = 4 - }, -/obj/item/assembly/prox_sensor{ - pixel_x = -2; - pixel_y = 3 - }, -/obj/item/assembly/signaler{ - pixel_x = -2; - pixel_y = -2 - }, -/obj/item/assembly/signaler{ - pixel_x = 2; - pixel_y = 5 - }, -/obj/item/assembly/timer{ - pixel_x = 12; - pixel_y = -9 +/obj/structure/rack, +/obj/item/stock_parts/matter_bin/super{ + pixel_x = -4; + pixel_y = -4 }, -/obj/item/assembly/timer{ - pixel_x = 15 +/obj/item/stock_parts/matter_bin/super{ + pixel_x = 6 }, -/obj/item/assembly/prox_sensor{ - pixel_x = -6; +/obj/item/stock_parts/micro_laser/ultra{ + pixel_x = -8; pixel_y = -4 }, -/obj/item/assembly/signaler{ - pixel_x = 5; - pixel_y = 10 +/obj/item/stock_parts/micro_laser/ultra{ + pixel_x = -4; + pixel_y = -8 }, -/obj/item/assembly/timer{ - pixel_x = 18; - pixel_y = 5 +/obj/item/stock_parts/micro_laser/ultra{ + pixel_x = 8; + pixel_y = 4 }, -/obj/machinery/light/cold/directional/west, -/turf/open/floor/mineral/plastitanium/red, -/area/centcom/syndicate_mothership/expansion_bombthreat) -"Oh" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 10 +/obj/item/stock_parts/micro_laser/ultra{ + pixel_x = 12 }, -/obj/machinery/atmospherics/components/unary/portables_connector/visible{ - dir = 1 +/obj/item/wrench{ + desc = "A little smidgeon of Freon..."; + name = "Freon" }, -/turf/open/floor/mineral/titanium/tiled/blue, +/obj/item/melee/powerfist, +/turf/open/floor/mineral/plastitanium/red, /area/centcom/syndicate_mothership/expansion_bombthreat) "Oi" = ( /obj/structure/cable, @@ -3779,14 +3770,51 @@ /turf/open/lava/plasma/ice_moon, /area/centcom/syndicate_mothership/control) "Ql" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 9 +/obj/structure/sign/poster/contraband/fun_police/directional/west, +/obj/structure/window/reinforced/survival_pod/spawner/directional/south{ + name = "Tinted Window" }, -/obj/machinery/atmospherics/components/unary/portables_connector/visible{ - dir = 4 +/obj/machinery/light/cold/directional/west, +/obj/structure/table/reinforced/plasmarglass, +/obj/item/assembly/timer{ + pixel_x = 12; + pixel_y = -9 }, -/obj/structure/sign/poster/contraband/fun_police/directional/west, -/turf/open/floor/mineral/plastitanium, +/obj/item/assembly/timer{ + pixel_x = 15 + }, +/obj/item/assembly/timer{ + pixel_x = 18; + pixel_y = 5 + }, +/obj/item/assembly/signaler{ + pixel_x = -2; + pixel_y = -2 + }, +/obj/item/assembly/signaler{ + pixel_x = 2; + pixel_y = 5 + }, +/obj/item/assembly/signaler{ + pixel_x = 5; + pixel_y = 10 + }, +/obj/item/assembly/prox_sensor{ + pixel_x = -6; + pixel_y = -4 + }, +/obj/item/assembly/prox_sensor{ + pixel_x = -2; + pixel_y = 3 + }, +/obj/item/assembly/prox_sensor{ + pixel_x = -6; + pixel_y = 4 + }, +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 8 + }, +/turf/open/floor/mineral/plastitanium/red, /area/centcom/syndicate_mothership/expansion_bombthreat) "Qp" = ( /obj/structure/lattice/catwalk, @@ -3828,7 +3856,7 @@ dir = 4 }, /obj/structure/sign/poster/contraband/c20r/directional/east, -/obj/machinery/portable_atmospherics/canister/plasma, +/obj/machinery/portable_atmospherics/canister/carbon_dioxide, /turf/open/floor/plating, /area/centcom/syndicate_mothership/expansion_bombthreat) "QM" = ( @@ -3911,6 +3939,17 @@ /obj/structure/flora/rock/icy/style_random, /turf/open/misc/asteroid/snow/airless, /area/centcom/syndicate_mothership) +"RO" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/obj/machinery/light/cold/directional/south, +/obj/machinery/portable_atmospherics/canister, +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 4 + }, +/turf/open/floor/mineral/plastitanium, +/area/centcom/syndicate_mothership/expansion_bombthreat) "RQ" = ( /obj/structure/closet/cardboard, /obj/structure/sign/poster/contraband/busty_backdoor_xeno_babes_6/directional/east, @@ -3996,14 +4035,21 @@ /turf/open/floor/catwalk_floor/iron_smooth, /area/centcom/syndicate_mothership/control) "SD" = ( -/obj/machinery/atmospherics/components/unary/thermomachine/freezer{ - dir = 4 - }, /obj/effect/turf_decal/siding/thinplating_new/dark{ dir = 8 }, +/obj/machinery/portable_atmospherics/pump, /turf/open/floor/mineral/plastitanium/red, /area/centcom/syndicate_mothership/expansion_bombthreat) +"SJ" = ( +/obj/machinery/atmospherics/components/trinary/filter{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/mineral/titanium/tiled/yellow, +/area/centcom/syndicate_mothership/expansion_bombthreat) "SK" = ( /obj/structure/fence/cut/large, /turf/open/misc/asteroid/snow/airless, @@ -4239,13 +4285,21 @@ }, /area/centcom/syndicate_mothership/control) "VF" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 9 +/obj/structure/window/reinforced/survival_pod/spawner/directional/south{ + name = "Tinted Window" }, -/obj/machinery/atmospherics/pipe/smart/simple/general/visible{ - dir = 10 +/obj/structure/table/reinforced/plasmarglass, +/obj/item/transfer_valve{ + pixel_x = -5 }, -/turf/open/floor/mineral/titanium/tiled/yellow, +/obj/item/transfer_valve, +/obj/item/transfer_valve{ + pixel_x = 5 + }, +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 4 + }, +/turf/open/floor/mineral/plastitanium/red, /area/centcom/syndicate_mothership/expansion_bombthreat) "VH" = ( /obj/effect/turf_decal/siding/thinplating_new/dark{ @@ -4445,6 +4499,13 @@ dir = 4 }, /area/centcom/syndicate_mothership/control) +"XS" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/components/unary/passive_vent{ + dir = 8 + }, +/turf/open/space/basic, +/area/space/nearstation) "XT" = ( /obj/effect/turf_decal/siding/thinplating_new/dark{ dir = 1 @@ -4478,11 +4539,14 @@ /turf/closed/indestructible/rock/snow, /area/centcom/syndicate_mothership) "Yk" = ( +/obj/structure/window/reinforced/survival_pod/spawner/directional/south{ + name = "Tinted Window" + }, +/obj/machinery/portable_atmospherics/canister/oxygen, /obj/effect/turf_decal/stripes/line{ - dir = 5 + dir = 6 }, -/obj/structure/tank_dispenser, -/turf/open/floor/mineral/titanium/tiled/yellow, +/turf/open/floor/plating, /area/centcom/syndicate_mothership/expansion_bombthreat) "Yx" = ( /turf/open/floor/mineral/titanium/tiled/yellow, @@ -4506,13 +4570,6 @@ /obj/structure/cable, /turf/open/floor/catwalk_floor/iron_smooth, /area/centcom/syndicate_mothership/control) -"YJ" = ( -/obj/effect/turf_decal/siding/thinplating_new/dark{ - dir = 8 - }, -/obj/machinery/atmospherics/components/unary/portables_connector/visible, -/turf/open/floor/mineral/plastitanium/red, -/area/centcom/syndicate_mothership/expansion_bombthreat) "YO" = ( /obj/effect/turf_decal/siding/wideplating/dark{ dir = 8 @@ -4556,9 +4613,9 @@ dir = 4 }, /obj/structure/sign/poster/contraband/fun_police/directional/west, -/obj/machinery/light/cold/directional/south, +/obj/machinery/portable_atmospherics/canister, /obj/effect/turf_decal/stripes/line{ - dir = 10 + dir = 9 }, /turf/open/floor/mineral/plastitanium, /area/centcom/syndicate_mothership/expansion_bombthreat) @@ -4608,13 +4665,10 @@ /turf/open/floor/mineral/plastitanium, /area/centcom/syndicate_mothership/control) "ZF" = ( -/obj/structure/window/reinforced/survival_pod/spawner/directional/south{ - name = "Tinted Window" - }, +/obj/machinery/portable_atmospherics/canister/oxygen, /obj/effect/turf_decal/stripes/line{ - dir = 10 + dir = 8 }, -/obj/machinery/portable_atmospherics/canister/oxygen, /turf/open/floor/plating, /area/centcom/syndicate_mothership/expansion_bombthreat) "ZG" = ( @@ -5771,7 +5825,7 @@ zQ fR kq Ox -sU +Ox sU sU sU @@ -5867,6 +5921,7 @@ ia Oc Ql Zc +RO RD RD RD @@ -5884,7 +5939,6 @@ sU sU sU sU -sU "} (13,1,1) = {" sU @@ -5963,13 +6017,14 @@ ZI GU zZ FM -wM +Gm ee +wM yp -fD VF If bQ +tn lC yb Uq @@ -5986,7 +6041,6 @@ sU sU sU sU -sU "} (14,1,1) = {" sU @@ -6069,12 +6123,13 @@ ae ae ae ae +ae Dl -LF cA +DO RD PM -Le +fv RD Ox sU @@ -6088,7 +6143,6 @@ sU sU sU sU -sU "} (15,1,1) = {" sU @@ -6168,10 +6222,11 @@ TY hX FM iL +DV mB tz -YJ FU +lO xe bs lC @@ -6190,7 +6245,6 @@ sU sU sU sU -sU "} (16,1,1) = {" sU @@ -6269,13 +6323,14 @@ Vr cQ uf RD -Gf +Gm gh yi +oe Gf -LY +SJ te -qK +gK kW oy oy @@ -6292,7 +6347,6 @@ sU sU sU sU -sU "} (17,1,1) = {" sU @@ -6372,12 +6426,13 @@ eK DZ RD NH +vm Tl -nR ZF AA +FB ZG -Oh +IK RD Sj Sj @@ -6394,7 +6449,6 @@ sU sU sU sU -sU "} (18,1,1) = {" sU @@ -6478,11 +6532,12 @@ QJ fl ym Yk +nN XV -sj +gO RD EM -EM +RD RD Ox sU @@ -6496,7 +6551,6 @@ sU sU sU sU -sU "} (19,1,1) = {" sU @@ -6583,8 +6637,9 @@ RD RD RD RD +RD LM -LM +XS RD Ox sU @@ -6598,7 +6653,6 @@ sU sU sU sU -sU "} (20,1,1) = {" sU @@ -6688,6 +6742,7 @@ RD RD RD RD +RD Ox sU sU @@ -6700,7 +6755,6 @@ sU sU sU sU -sU "} (21,1,1) = {" sU @@ -6791,7 +6845,7 @@ Ox Ox Ox Ox -sU +Ox sU sU sU diff --git a/_maps/templates/lazy_templates/wizard_den.dmm b/_maps/templates/lazy_templates/wizard_den.dmm index 58e09b40a0ac7..887e1c0817639 100644 --- a/_maps/templates/lazy_templates/wizard_den.dmm +++ b/_maps/templates/lazy_templates/wizard_den.dmm @@ -46,7 +46,7 @@ /area/centcom/wizard_station) "dr" = ( /obj/structure/table/wood, -/obj/item/clothing/mask/cigarette/cigar{ +/obj/item/cigarette/cigar{ pixel_y = -9; pixel_x = -5 }, @@ -328,11 +328,8 @@ /turf/open/floor/iron, /area/centcom/wizard_station) "qg" = ( +/obj/structure/railing, /obj/structure/railing{ - layer = 3.1 - }, -/obj/structure/railing{ - layer = 3.1; dir = 1 }, /turf/open/floor/engine/cult, @@ -511,9 +508,7 @@ /turf/open/floor/plastic, /area/centcom/wizard_station) "yX" = ( -/obj/structure/railing{ - layer = 3.1 - }, +/obj/structure/railing, /obj/structure/railing/corner{ dir = 4 }, @@ -536,7 +531,7 @@ /turf/open/floor/iron, /area/centcom/wizard_station) "AW" = ( -/mob/living/simple_animal/pet/gondola{ +/mob/living/basic/pet/gondola{ name = "Jommy"; faction = list("gondola", "Wizard") }, diff --git a/_maps/templates/shelter_2.dmm b/_maps/templates/shelter_2.dmm index b12848b01daf6..38a742b85fd53 100644 --- a/_maps/templates/shelter_2.dmm +++ b/_maps/templates/shelter_2.dmm @@ -62,9 +62,7 @@ /turf/open/floor/pod, /area/misc/survivalpod) "n" = ( -/obj/structure/window/reinforced/survival_pod/spawner/directional/west{ - layer = 3 - }, +/obj/structure/window/reinforced/survival_pod/spawner/directional/west, /obj/machinery/door/window/survival_pod/left/directional/north, /turf/open/floor/carpet/black, /area/misc/survivalpod) diff --git a/_maps/templates/small_shuttle_1.dmm b/_maps/templates/small_shuttle_1.dmm index a8a7ab9b7df7e..362d17d79ac25 100644 --- a/_maps/templates/small_shuttle_1.dmm +++ b/_maps/templates/small_shuttle_1.dmm @@ -22,7 +22,7 @@ /turf/open/floor/mineral/titanium/blue, /area/template_noop) "j" = ( -/obj/machinery/door/unpowered/shuttle, +/obj/machinery/door/airlock/titanium, /turf/open/floor/mineral/titanium/blue, /area/template_noop) "l" = ( diff --git a/_maps/virtual_domains/README.md b/_maps/virtual_domains/README.md index 6e9abc6556825..f0a8a1ebfd216 100644 --- a/_maps/virtual_domains/README.md +++ b/_maps/virtual_domains/README.md @@ -1,11 +1,12 @@ # Making new virtual domains ## REQUIRED: -1. One way that the encrypted cache can spawn. This can be from a mob drop, a landmark (place a few, it'll pick one), or a signable landmark if you have a points system. +1. One way that the encrypted cache can spawn. This can be from a mob drop, a landmark (place a few, it'll pick one), or a signal landmark if you have a points system. 2. Place a virtual domain baseturf helper in each area. 3. If you're using modular safehouses, ensure that the map has ONE tile marked with the safehouse modular map loader (and set the KEY). it will need an open 7x6 area. 4. Placing a safehouse area is redundant, but it will ensure there is power in the starting safehouse. 5. Create the dm file that defines the map qualities. You can use the existing ones as a template. +6. Place a virtual domain baseturf helper in each area. ## Converting an existing map 1. Create a new map using the existing map's size - give yourself enough room to enclose it with a binary wall. There's no need for any space outside of it, so ensure that it fits and is enclosed, nothing outside of this. @@ -18,7 +19,7 @@ You shouldn't need to fully enclose your map in 15 tiles of binary filler. Using For areas, ideally just one on the map and one for the safehouse. Vdoms should never last so long as to need individual area power and atmos unless you're specifically going for a gimmick. -Use modular mob segments! Use modular map segments! Add some variety to your maps! Just make sure you've set your map to have "is_modular" afterwards. +Make it modular: Add modular map and mob segments! It adds variety. Just make sure you've set your map to have "is_modular" afterwards. Adding some open tile padding around the safehouse is a good touch. About 7 tiles West/East for the visual effect of a larger map. diff --git a/_maps/virtual_domains/abductor_ship.dmm b/_maps/virtual_domains/abductor_ship.dmm index ebb4a042bb97b..35bf563eb45c4 100644 --- a/_maps/virtual_domains/abductor_ship.dmm +++ b/_maps/virtual_domains/abductor_ship.dmm @@ -153,7 +153,7 @@ "sv" = ( /obj/structure/table/abductor, /obj/item/crowbar/abductor, -/obj/item/stock_parts/cell/infinite/abductor{ +/obj/item/stock_parts/power_store/cell/infinite/abductor{ pixel_x = 5; pixel_y = -3 }, diff --git a/_maps/virtual_domains/beach_bar.dmm b/_maps/virtual_domains/beach_bar.dmm index 6368168416193..5e1c6f753b8ac 100644 --- a/_maps/virtual_domains/beach_bar.dmm +++ b/_maps/virtual_domains/beach_bar.dmm @@ -491,9 +491,7 @@ /area/virtual_domain/fullbright) "xR" = ( /obj/structure/window/reinforced/spawner/directional/east, -/obj/structure/window/reinforced/spawner/directional/north{ - layer = 2.9 - }, +/obj/structure/window/reinforced/spawner/directional/north, /obj/structure/chair/stool/directional/south, /obj/item/storage/backpack/duffelbag, /obj/item/clothing/under/shorts/red, @@ -685,9 +683,7 @@ /turf/closed/wall/mineral/sandstone, /area/virtual_domain/fullbright) "Em" = ( -/obj/item/reagent_containers/condiment/enzyme{ - layer = 5 - }, +/obj/item/reagent_containers/condiment/enzyme, /obj/item/reagent_containers/cup/beaker{ pixel_x = 5 }, diff --git a/_maps/virtual_domains/fredingtonfastingbear.dmm b/_maps/virtual_domains/fredingtonfastingbear.dmm new file mode 100644 index 0000000000000..4da8210c90e1a --- /dev/null +++ b/_maps/virtual_domains/fredingtonfastingbear.dmm @@ -0,0 +1,3201 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"aV" = ( +/turf/open/floor/iron/kitchen/small, +/area/ruin/space/has_grav/powered/virtual_domain) +"bu" = ( +/obj/machinery/oven/range, +/turf/open/floor/iron/kitchen/small, +/area/ruin/space/has_grav/powered/virtual_domain) +"bL" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners, +/obj/effect/turf_decal/tile/bar/opposingcorners, +/obj/structure/mop_bucket/janitorialcart, +/obj/effect/turf_decal/tile/blue/opposingcorners, +/obj/effect/turf_decal/tile/blue/opposingcorners, +/obj/effect/decal/cleanable/greenglow, +/turf/open/floor/iron/kitchen, +/area/ruin/space/has_grav/powered/virtual_domain) +"bP" = ( +/obj/structure/sign/poster/official/report_crimes, +/turf/closed/indestructible/reinforced, +/area/virtual_domain/protected_space/fullbright) +"bR" = ( +/obj/machinery/chem_dispenser/drinks/beer, +/obj/structure/table/wood, +/turf/open/floor/iron/kitchen, +/area/ruin/space/has_grav/powered/virtual_domain) +"bW" = ( +/obj/effect/turf_decal/tile/blue/opposingcorners, +/obj/effect/turf_decal/tile/blue/opposingcorners, +/obj/structure/table, +/obj/item/food/pizza{ + pixel_y = 6 + }, +/turf/open/floor/iron/kitchen, +/area/ruin/space/has_grav/powered/virtual_domain) +"cn" = ( +/obj/effect/turf_decal/tile/blue/opposingcorners, +/obj/effect/turf_decal/tile/blue/opposingcorners, +/obj/item/toy/balloon{ + pixel_x = 7; + pixel_y = 2 + }, +/turf/open/floor/iron/kitchen, +/area/ruin/space/has_grav/powered/virtual_domain) +"cp" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners, +/obj/effect/turf_decal/tile/bar/opposingcorners, +/mob/living/basic/bear/snow, +/turf/open/floor/iron/kitchen, +/area/ruin/space/has_grav/powered/virtual_domain) +"cY" = ( +/obj/structure/sign/poster/official/no_erp/directional/north, +/obj/structure/sign/poster/official/no_erp/directional/north, +/turf/closed/indestructible/reinforced, +/area/ruin/space/has_grav/powered/virtual_domain) +"dl" = ( +/obj/structure/sign/poster/contraband/blood_geometer/directional/south, +/obj/effect/landmark/bitrunning/cache_spawn, +/turf/open/floor/wood, +/area/ruin/space/has_grav/powered/virtual_domain) +"dz" = ( +/obj/structure/table/wood, +/turf/open/floor/iron/kitchen, +/area/ruin/space/has_grav/powered/virtual_domain) +"dN" = ( +/obj/effect/turf_decal/tile/blue/opposingcorners, +/obj/effect/turf_decal/tile/blue/opposingcorners, +/obj/effect/decal/cleanable/blood/xtracks, +/turf/open/floor/iron/kitchen, +/area/ruin/space/has_grav/powered/virtual_domain) +"dV" = ( +/obj/structure/table/glass, +/turf/open/floor/iron/kitchen, +/area/ruin/space/has_grav/powered/virtual_domain) +"ex" = ( +/turf/closed/indestructible/binary, +/area/ruin/space/has_grav/powered/virtual_domain) +"eE" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners, +/obj/effect/turf_decal/tile/bar/opposingcorners, +/obj/structure/closet/gmcloset, +/obj/effect/turf_decal/tile/blue/opposingcorners, +/obj/effect/turf_decal/tile/blue/opposingcorners, +/obj/effect/decal/cleanable/blood/old, +/turf/open/floor/iron/kitchen, +/area/ruin/space/has_grav/powered/virtual_domain) +"eW" = ( +/obj/effect/turf_decal/tile/dark_red/opposingcorners, +/obj/effect/turf_decal/tile/dark_red/opposingcorners, +/obj/effect/decal/cleanable/confetti, +/turf/open/floor/iron/kitchen, +/area/ruin/space/has_grav/powered/virtual_domain) +"fd" = ( +/obj/structure/table/wood/poker, +/turf/open/floor/iron/kitchen, +/area/ruin/space/has_grav/powered/virtual_domain) +"fo" = ( +/obj/structure/table/wood, +/obj/item/reagent_containers/cup/glass/shaker{ + pixel_x = 5 + }, +/turf/open/floor/iron/kitchen, +/area/ruin/space/has_grav/powered/virtual_domain) +"fy" = ( +/obj/machinery/stove, +/turf/open/floor/iron/kitchen/small, +/area/ruin/space/has_grav/powered/virtual_domain) +"fz" = ( +/obj/effect/turf_decal/tile/blue/opposingcorners, +/obj/effect/turf_decal/tile/blue/opposingcorners, +/obj/structure/table, +/obj/item/pizzabox/bomb/armed{ + pixel_x = 3; + pixel_y = 6 + }, +/turf/open/floor/iron/kitchen, +/area/ruin/space/has_grav/powered/virtual_domain) +"fU" = ( +/obj/effect/decal/cleanable/blood/footprints, +/turf/open/floor/iron/kitchen, +/area/ruin/space/has_grav/powered/virtual_domain) +"gl" = ( +/obj/structure/sign/poster/contraband/blasto_detergent, +/turf/closed/indestructible/reinforced, +/area/ruin/space/has_grav/powered/virtual_domain) +"gL" = ( +/obj/effect/turf_decal/tile/dark_red/opposingcorners, +/obj/effect/turf_decal/tile/dark_red/opposingcorners, +/obj/item/toy/balloon/heart, +/obj/effect/decal/cleanable/blood/tracks{ + dir = 4 + }, +/obj/machinery/light/built/directional/east, +/turf/open/floor/iron/kitchen, +/area/ruin/space/has_grav/powered/virtual_domain) +"hq" = ( +/obj/structure/table/reinforced, +/obj/item/flashlight/seclite{ + pixel_y = 9 + }, +/obj/item/flashlight/seclite, +/obj/item/flashlight/seclite{ + pixel_y = 6 + }, +/turf/open/floor/iron/cafeteria, +/area/virtual_domain/protected_space/fullbright) +"hI" = ( +/obj/effect/turf_decal/tile/dark_red/opposingcorners, +/turf/closed/indestructible/reinforced, +/area/ruin/space/has_grav/powered/virtual_domain) +"hK" = ( +/obj/item/trash/popcorn, +/turf/open/floor/iron/kitchen, +/area/ruin/space/has_grav/powered/virtual_domain) +"hR" = ( +/obj/effect/turf_decal/tile/dark_red/opposingcorners, +/obj/effect/turf_decal/tile/dark_red/opposingcorners, +/obj/structure/table, +/obj/item/food/pizzaslice/mothic_margherita, +/obj/effect/decal/cleanable/confetti, +/obj/effect/decal/cleanable/insectguts, +/turf/open/floor/iron/kitchen, +/area/ruin/space/has_grav/powered/virtual_domain) +"jE" = ( +/obj/structure/sign/poster/abductor/ayy_over_tizira, +/obj/structure/sign/poster/official/the_owl, +/turf/closed/indestructible/reinforced, +/area/virtual_domain/protected_space/fullbright) +"jZ" = ( +/obj/effect/turf_decal/tile/dark_red/opposingcorners, +/obj/effect/turf_decal/tile/dark_red/opposingcorners, +/obj/effect/turf_decal/caution/stand_clear, +/obj/structure/fake_stairs/wood{ + dir = 4 + }, +/turf/open/floor/iron/kitchen, +/area/ruin/space/has_grav/powered/virtual_domain) +"kf" = ( +/obj/structure/chair/stool/bar/directional/east, +/turf/open/floor/iron/kitchen, +/area/ruin/space/has_grav/powered/virtual_domain) +"km" = ( +/obj/structure/chair/sofa/corp/left{ + dir = 1 + }, +/turf/open/floor/iron/kitchen, +/area/ruin/space/has_grav/powered/virtual_domain) +"kL" = ( +/obj/machinery/light/built/directional/west, +/obj/item/light/tube/broken, +/turf/open/floor/iron/kitchen, +/area/ruin/space/has_grav/powered/virtual_domain) +"lc" = ( +/obj/machinery/vending/boozeomat, +/turf/open/floor/iron/kitchen, +/area/ruin/space/has_grav/powered/virtual_domain) +"lL" = ( +/obj/structure/table, +/obj/item/kitchen/rollingpin/illegal, +/turf/open/floor/iron/kitchen/small, +/area/ruin/space/has_grav/powered/virtual_domain) +"lP" = ( +/obj/machinery/vending/sovietsoda, +/turf/open/floor/iron/kitchen, +/area/ruin/space/has_grav/powered/virtual_domain) +"lS" = ( +/obj/effect/turf_decal/tile/blue/opposingcorners, +/obj/effect/turf_decal/tile/blue/opposingcorners, +/obj/effect/decal/cleanable/cobweb/cobweb2, +/turf/open/floor/iron/kitchen, +/area/ruin/space/has_grav/powered/virtual_domain) +"ma" = ( +/obj/effect/turf_decal/tile/dark_red/opposingcorners, +/obj/effect/turf_decal/tile/dark_red/opposingcorners, +/obj/structure/table, +/turf/open/floor/iron/kitchen, +/area/ruin/space/has_grav/powered/virtual_domain) +"ms" = ( +/obj/effect/turf_decal/tile/blue/opposingcorners, +/obj/effect/turf_decal/tile/blue/opposingcorners, +/obj/effect/decal/cleanable/blood/tracks, +/turf/open/floor/iron/kitchen, +/area/ruin/space/has_grav/powered/virtual_domain) +"mC" = ( +/obj/effect/turf_decal/tile/dark_red/opposingcorners, +/obj/effect/turf_decal/tile/dark_red/opposingcorners, +/obj/structure/table, +/obj/item/food/pizza, +/turf/open/floor/iron/kitchen, +/area/ruin/space/has_grav/powered/virtual_domain) +"mX" = ( +/obj/machinery/computer/arcade/amputation{ + dir = 1 + }, +/obj/effect/decal/cleanable/confetti, +/turf/open/floor/iron/kitchen, +/area/ruin/space/has_grav/powered/virtual_domain) +"ng" = ( +/obj/effect/decal/cleanable/blood/drip, +/turf/open/floor/iron/kitchen, +/area/ruin/space/has_grav/powered/virtual_domain) +"nF" = ( +/obj/effect/spawner/structure/window/reinforced/indestructible, +/turf/open/floor/iron, +/area/virtual_domain/protected_space/fullbright) +"nP" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners, +/obj/effect/turf_decal/tile/bar/opposingcorners, +/obj/structure/closet/gmcloset, +/obj/effect/turf_decal/tile/blue/opposingcorners, +/obj/effect/turf_decal/tile/blue/opposingcorners, +/obj/item/clothing/mask/animal/small/bear/cursed, +/turf/open/floor/iron/kitchen, +/area/ruin/space/has_grav/powered/virtual_domain) +"nX" = ( +/obj/structure/chair/sofa/corp/left, +/turf/open/floor/iron/kitchen, +/area/ruin/space/has_grav/powered/virtual_domain) +"ob" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners, +/obj/effect/turf_decal/tile/bar/opposingcorners, +/obj/effect/turf_decal/tile/blue/opposingcorners, +/obj/effect/turf_decal/tile/blue/opposingcorners, +/obj/effect/decal/cleanable/greenglow, +/turf/open/floor/iron/kitchen, +/area/ruin/space/has_grav/powered/virtual_domain) +"of" = ( +/obj/structure/railing, +/obj/effect/decal/cleanable/fuel_pool/hivis, +/turf/open/floor/wood, +/area/ruin/space/has_grav/powered/virtual_domain) +"oO" = ( +/obj/effect/turf_decal/tile/blue/opposingcorners, +/obj/effect/turf_decal/tile/blue/opposingcorners, +/obj/structure/chair/greyscale{ + dir = 4 + }, +/turf/open/floor/iron/kitchen, +/area/ruin/space/has_grav/powered/virtual_domain) +"pr" = ( +/obj/machinery/light/built/directional/east, +/turf/open/floor/iron/kitchen, +/area/ruin/space/has_grav/powered/virtual_domain) +"pK" = ( +/obj/effect/decal/cleanable/blood/tracks{ + dir = 4 + }, +/turf/open/floor/wood, +/area/ruin/space/has_grav/powered/virtual_domain) +"pX" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners, +/obj/effect/turf_decal/tile/bar/opposingcorners, +/obj/item/restraints/legcuffs/beartrap/prearmed, +/turf/open/floor/iron/kitchen, +/area/ruin/space/has_grav/powered/virtual_domain) +"ql" = ( +/obj/structure/table/reinforced, +/obj/item/toy/plush/nukeplushie{ + pixel_x = 5; + pixel_y = 6 + }, +/obj/item/phone{ + base_pixel_w = 4; + pixel_x = -6 + }, +/turf/open/floor/iron/cafeteria, +/area/virtual_domain/protected_space/fullbright) +"qK" = ( +/turf/closed/indestructible/fakedoor, +/area/ruin/space/has_grav/powered/virtual_domain) +"rc" = ( +/obj/structure/chair/comfy/black{ + dir = 8 + }, +/obj/effect/decal/cleanable/blood/splatter, +/turf/open/floor/iron/kitchen, +/area/ruin/space/has_grav/powered/virtual_domain) +"re" = ( +/obj/structure/chair/comfy/black{ + dir = 8 + }, +/turf/open/floor/iron/kitchen, +/area/ruin/space/has_grav/powered/virtual_domain) +"ri" = ( +/obj/effect/turf_decal/tile/dark_red/opposingcorners, +/obj/effect/turf_decal/tile/dark_red/opposingcorners, +/obj/structure/chair/greyscale{ + dir = 8 + }, +/obj/effect/decal/cleanable/blood/tracks, +/turf/open/floor/iron/kitchen, +/area/ruin/space/has_grav/powered/virtual_domain) +"rB" = ( +/obj/item/trash/boritos/green{ + pixel_x = 4; + pixel_y = 11 + }, +/turf/open/floor/iron/kitchen, +/area/ruin/space/has_grav/powered/virtual_domain) +"rD" = ( +/obj/machinery/door/poddoor{ + id = "door2" + }, +/turf/open/floor/iron/kitchen, +/area/virtual_domain/protected_space/fullbright) +"rY" = ( +/obj/effect/turf_decal/tile/blue/opposingcorners, +/obj/effect/turf_decal/tile/blue/opposingcorners, +/obj/effect/decal/cleanable/blood/tracks{ + dir = 4 + }, +/turf/open/floor/iron/kitchen, +/area/ruin/space/has_grav/powered/virtual_domain) +"sg" = ( +/obj/structure/sign/poster/contraband/bountyhunters/directional/south, +/turf/closed/indestructible/binary, +/area/ruin/space/has_grav/powered/virtual_domain) +"si" = ( +/obj/effect/turf_decal/tile/blue/opposingcorners, +/obj/structure/table, +/obj/item/balloon_mallet, +/turf/open/floor/iron/kitchen, +/area/ruin/space/has_grav/powered/virtual_domain) +"sk" = ( +/obj/machinery/computer/slot_machine, +/turf/open/floor/iron/kitchen, +/area/ruin/space/has_grav/powered/virtual_domain) +"sl" = ( +/obj/effect/spawner/structure/window/reinforced/indestructible, +/obj/structure/sign/poster/contraband/space_cola/directional/north, +/turf/open/floor/iron, +/area/virtual_domain/protected_space/fullbright) +"sR" = ( +/obj/structure/chair/sofa/corp/right{ + dir = 1 + }, +/turf/open/floor/iron/kitchen, +/area/ruin/space/has_grav/powered/virtual_domain) +"td" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners, +/obj/effect/turf_decal/tile/bar/opposingcorners, +/obj/effect/decal/chempuff, +/turf/open/floor/iron/kitchen, +/area/ruin/space/has_grav/powered/virtual_domain) +"to" = ( +/obj/effect/turf_decal/tile/blue/opposingcorners, +/obj/effect/turf_decal/tile/blue/opposingcorners, +/turf/open/floor/iron/kitchen, +/area/ruin/space/has_grav/powered/virtual_domain) +"tC" = ( +/obj/effect/turf_decal/tile/blue/opposingcorners, +/obj/effect/turf_decal/tile/blue/opposingcorners, +/obj/structure/table, +/turf/open/floor/iron/kitchen, +/area/ruin/space/has_grav/powered/virtual_domain) +"tI" = ( +/obj/item/trash/can, +/turf/open/floor/iron/kitchen, +/area/ruin/space/has_grav/powered/virtual_domain) +"tN" = ( +/obj/effect/baseturf_helper/virtual_domain, +/turf/template_noop, +/area/virtual_domain/safehouse) +"tZ" = ( +/obj/structure/table/wood/poker, +/obj/item/trash/ready_donk, +/turf/open/floor/iron/kitchen, +/area/ruin/space/has_grav/powered/virtual_domain) +"ud" = ( +/obj/effect/decal/cleanable/confetti, +/turf/open/floor/iron/cafeteria, +/area/virtual_domain/protected_space/fullbright) +"ur" = ( +/obj/structure/chair/sofa/corp{ + dir = 1 + }, +/turf/open/floor/iron/kitchen, +/area/ruin/space/has_grav/powered/virtual_domain) +"uZ" = ( +/obj/effect/decal/cleanable/food/salt, +/turf/open/floor/iron/kitchen/small, +/area/ruin/space/has_grav/powered/virtual_domain) +"ve" = ( +/turf/closed/indestructible/reinforced, +/area/ruin/space/has_grav/powered/virtual_domain) +"vk" = ( +/obj/structure/railing, +/turf/open/floor/wood, +/area/ruin/space/has_grav/powered/virtual_domain) +"vm" = ( +/obj/effect/landmark/bitrunning/cache_spawn, +/turf/open/floor/wood, +/area/ruin/space/has_grav/powered/virtual_domain) +"vs" = ( +/obj/structure/closet/secure_closet/freezer/cream_pie, +/turf/open/floor/iron/kitchen/small, +/area/ruin/space/has_grav/powered/virtual_domain) +"vw" = ( +/mob/living/basic/bear/butter, +/turf/open/floor/iron/kitchen, +/area/ruin/space/has_grav/powered/virtual_domain) +"vy" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners, +/obj/effect/turf_decal/tile/bar/opposingcorners, +/obj/effect/decal/cleanable/blood/gibs/down, +/turf/open/floor/iron/kitchen, +/area/ruin/space/has_grav/powered/virtual_domain) +"vz" = ( +/obj/effect/spawner/structure/window/reinforced/plasma, +/turf/open/floor/iron, +/area/ruin/space/has_grav/powered/virtual_domain) +"vF" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners, +/obj/effect/turf_decal/tile/bar/opposingcorners, +/obj/effect/turf_decal/tile/blue/opposingcorners, +/obj/effect/turf_decal/tile/blue/opposingcorners, +/obj/machinery/button/door/directional/west{ + id = "door2" + }, +/turf/open/floor/iron/kitchen, +/area/ruin/space/has_grav/powered/virtual_domain) +"vG" = ( +/obj/structure/closet/secure_closet/freezer/kitchen, +/turf/open/floor/iron/kitchen/small, +/area/ruin/space/has_grav/powered/virtual_domain) +"vR" = ( +/obj/effect/turf_decal/tile/blue/opposingcorners, +/obj/effect/turf_decal/tile/blue/opposingcorners, +/obj/structure/table, +/obj/item/trash/tray, +/turf/open/floor/iron/kitchen, +/area/ruin/space/has_grav/powered/virtual_domain) +"vT" = ( +/obj/effect/turf_decal/tile/dark_red/opposingcorners, +/obj/effect/turf_decal/tile/dark_red/opposingcorners, +/obj/structure/chair/greyscale{ + dir = 4 + }, +/obj/effect/decal/cleanable/insectguts, +/turf/open/floor/iron/kitchen, +/area/ruin/space/has_grav/powered/virtual_domain) +"wM" = ( +/obj/item/toy/balloon/heart, +/obj/machinery/light/built/directional/west, +/obj/structure/fake_stairs/wood{ + dir = 1 + }, +/turf/open/floor/iron/kitchen, +/area/ruin/space/has_grav/powered/virtual_domain) +"xa" = ( +/obj/structure/railing, +/obj/structure/curtain/cloth/fancy/mechanical/start_closed, +/turf/open/floor/wood, +/area/ruin/space/has_grav/powered/virtual_domain) +"xk" = ( +/obj/effect/turf_decal/tile/dark_red/opposingcorners, +/obj/effect/turf_decal/tile/dark_red/opposingcorners, +/obj/structure/table, +/obj/effect/decal/cleanable/confetti, +/turf/open/floor/iron/kitchen, +/area/ruin/space/has_grav/powered/virtual_domain) +"xv" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners, +/obj/effect/turf_decal/tile/bar/opposingcorners, +/obj/structure/sign/poster/official/moth_hardhat/directional/west, +/turf/open/floor/iron/kitchen, +/area/ruin/space/has_grav/powered/virtual_domain) +"xY" = ( +/obj/effect/decal/cleanable/insectguts, +/turf/open/floor/iron/kitchen, +/area/ruin/space/has_grav/powered/virtual_domain) +"yz" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners, +/obj/effect/turf_decal/tile/bar/opposingcorners, +/obj/effect/turf_decal/tile/blue/opposingcorners, +/obj/effect/turf_decal/tile/blue/opposingcorners, +/turf/open/floor/iron/kitchen, +/area/ruin/space/has_grav/powered/virtual_domain) +"yB" = ( +/obj/structure/railing, +/obj/effect/decal/cleanable/blood/tracks, +/turf/open/floor/wood, +/area/ruin/space/has_grav/powered/virtual_domain) +"zU" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners, +/obj/effect/turf_decal/tile/bar/opposingcorners, +/obj/effect/decal/cleanable/blood/old, +/turf/open/floor/iron/kitchen, +/area/ruin/space/has_grav/powered/virtual_domain) +"Ag" = ( +/obj/effect/turf_decal/tile/dark_red/opposingcorners, +/obj/effect/turf_decal/tile/dark_red/opposingcorners, +/obj/structure/chair/greyscale{ + dir = 4 + }, +/turf/open/floor/iron/kitchen, +/area/ruin/space/has_grav/powered/virtual_domain) +"Ak" = ( +/obj/effect/landmark/bitrunning/cache_spawn, +/turf/open/floor/iron/kitchen, +/area/ruin/space/has_grav/powered/virtual_domain) +"AF" = ( +/obj/structure/table/wood, +/obj/item/reagent_containers/cup/glass/bottle/goldschlager{ + pixel_y = 11; + pixel_x = 7 + }, +/obj/item/reagent_containers/cup/glass/bottle/cognac{ + pixel_x = -4 + }, +/turf/open/floor/iron/kitchen, +/area/ruin/space/has_grav/powered/virtual_domain) +"Bc" = ( +/turf/template_noop, +/area/virtual_domain/safehouse) +"Bf" = ( +/obj/effect/spawner/random/trash/graffiti, +/turf/open/floor/iron/kitchen, +/area/ruin/space/has_grav/powered/virtual_domain) +"Bj" = ( +/obj/machinery/computer/arcade/amputation, +/obj/effect/decal/cleanable/confetti, +/turf/open/floor/iron/kitchen, +/area/ruin/space/has_grav/powered/virtual_domain) +"Bo" = ( +/obj/machinery/door/airlock, +/turf/open/floor/iron/kitchen/small, +/area/ruin/space/has_grav/powered/virtual_domain) +"BU" = ( +/obj/effect/decal/cleanable/blood/old, +/turf/open/floor/iron/cafeteria, +/area/virtual_domain/protected_space/fullbright) +"Ce" = ( +/obj/effect/turf_decal/tile/dark_red/opposingcorners, +/obj/effect/turf_decal/tile/dark_red/opposingcorners, +/obj/structure/chair/greyscale{ + dir = 8 + }, +/obj/effect/decal/cleanable/blood/gibs/up, +/turf/open/floor/iron/kitchen, +/area/ruin/space/has_grav/powered/virtual_domain) +"Cm" = ( +/turf/template_noop, +/area/space) +"Ct" = ( +/obj/effect/turf_decal/tile/blue/opposingcorners, +/obj/effect/turf_decal/tile/blue/opposingcorners, +/obj/machinery/light/built/directional/east, +/turf/open/floor/iron/kitchen, +/area/ruin/space/has_grav/powered/virtual_domain) +"Dx" = ( +/obj/effect/decal/cleanable/fuel_pool, +/obj/effect/decal/cleanable/confetti, +/turf/open/floor/iron/cafeteria, +/area/virtual_domain/protected_space/fullbright) +"Dz" = ( +/mob/living/basic/bear/fightpit, +/turf/open/floor/iron/kitchen, +/area/ruin/space/has_grav/powered/virtual_domain) +"DV" = ( +/obj/machinery/door/airlock, +/turf/open/floor/iron/cafeteria, +/area/virtual_domain/protected_space/fullbright) +"EO" = ( +/obj/effect/turf_decal/tile/blue/opposingcorners, +/obj/effect/turf_decal/tile/blue/opposingcorners, +/obj/structure/chair/greyscale{ + dir = 4 + }, +/obj/effect/decal/cleanable/confetti, +/turf/open/floor/iron/kitchen, +/area/ruin/space/has_grav/powered/virtual_domain) +"EP" = ( +/obj/structure/railing{ + dir = 4 + }, +/obj/effect/decal/cleanable/leaper_sludge, +/turf/open/floor/wood, +/area/ruin/space/has_grav/powered/virtual_domain) +"Fc" = ( +/turf/closed/indestructible/reinforced, +/area/virtual_domain/protected_space/fullbright) +"Fy" = ( +/obj/effect/decal/cleanable/confetti, +/obj/machinery/light/built/directional/west, +/obj/structure/fake_stairs/wood, +/turf/open/floor/iron/kitchen, +/area/ruin/space/has_grav/powered/virtual_domain) +"FA" = ( +/obj/effect/decal/cleanable/food/flour, +/turf/open/floor/iron/kitchen/small, +/area/ruin/space/has_grav/powered/virtual_domain) +"Gb" = ( +/obj/item/trash/peanuts, +/turf/open/floor/iron/kitchen, +/area/ruin/space/has_grav/powered/virtual_domain) +"Gn" = ( +/obj/machinery/light/built/directional/east, +/obj/effect/decal/cleanable/food/tomato_smudge, +/obj/effect/landmark/bitrunning/cache_spawn, +/turf/open/floor/iron/kitchen/small, +/area/ruin/space/has_grav/powered/virtual_domain) +"GD" = ( +/obj/effect/decal/cleanable/blood, +/turf/open/floor/iron/kitchen, +/area/ruin/space/has_grav/powered/virtual_domain) +"GK" = ( +/obj/structure/closet/crate/trashcart/filled, +/turf/open/floor/iron/kitchen, +/area/ruin/space/has_grav/powered/virtual_domain) +"Hi" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners, +/obj/effect/turf_decal/tile/bar/opposingcorners, +/obj/structure/closet/gmcloset, +/obj/effect/turf_decal/tile/blue/opposingcorners, +/obj/effect/turf_decal/tile/blue/opposingcorners, +/turf/open/floor/iron/kitchen, +/area/ruin/space/has_grav/powered/virtual_domain) +"Ho" = ( +/obj/effect/decal/cleanable/fuel_pool/hivis, +/mob/living/basic/bear/fightpit, +/turf/open/floor/iron/kitchen, +/area/ruin/space/has_grav/powered/virtual_domain) +"HE" = ( +/obj/structure/table/reinforced, +/obj/item/gun/energy/laser{ + pixel_x = -4 + }, +/obj/item/gun/energy/laser{ + pixel_y = 2 + }, +/obj/item/gun/energy/laser{ + pixel_x = 4; + pixel_y = 4 + }, +/obj/machinery/recharger{ + pixel_x = 7; + pixel_y = -1 + }, +/obj/machinery/button/door/directional/east{ + id = "door2" + }, +/turf/open/floor/iron/cafeteria, +/area/virtual_domain/protected_space/fullbright) +"HG" = ( +/obj/structure/curtain/cloth/fancy/mechanical, +/turf/open/floor/wood, +/area/ruin/space/has_grav/powered/virtual_domain) +"If" = ( +/mob/living/basic/bear/russian, +/turf/open/floor/wood, +/area/ruin/space/has_grav/powered/virtual_domain) +"Io" = ( +/obj/structure/closet/crate/trashcart/filled, +/turf/open/misc/dirt/jungle, +/area/virtual_domain/fullbright) +"IX" = ( +/obj/machinery/computer/arcade/amputation, +/turf/open/floor/iron/kitchen, +/area/ruin/space/has_grav/powered/virtual_domain) +"IY" = ( +/obj/structure/table/wood/poker, +/obj/item/toy/cards/deck/syndicate, +/turf/open/floor/iron/kitchen, +/area/ruin/space/has_grav/powered/virtual_domain) +"Jh" = ( +/obj/effect/turf_decal/tile/dark_red/opposingcorners, +/obj/effect/turf_decal/tile/dark_red/opposingcorners, +/obj/structure/table, +/obj/item/food/pizza/energy/raw{ + pixel_x = 3; + pixel_y = 8 + }, +/turf/open/floor/iron/kitchen, +/area/ruin/space/has_grav/powered/virtual_domain) +"JD" = ( +/obj/effect/turf_decal/tile/dark_red/opposingcorners, +/obj/effect/turf_decal/tile/dark_red/opposingcorners, +/obj/effect/decal/cleanable/blood/tracks, +/turf/open/floor/iron/kitchen, +/area/ruin/space/has_grav/powered/virtual_domain) +"JF" = ( +/obj/modular_map_root/safehouse{ + key = "wood" + }, +/turf/template_noop, +/area/virtual_domain/safehouse) +"JW" = ( +/obj/structure/sign/poster/official/the_owl, +/turf/closed/indestructible/reinforced, +/area/virtual_domain/protected_space/fullbright) +"Ke" = ( +/obj/structure/chair/comfy/black{ + dir = 8 + }, +/obj/item/trash/pistachios, +/turf/open/floor/iron/kitchen, +/area/ruin/space/has_grav/powered/virtual_domain) +"KJ" = ( +/mob/living/basic/bear/fightpit, +/turf/open/floor/iron/kitchen/small, +/area/ruin/space/has_grav/powered/virtual_domain) +"Ln" = ( +/obj/effect/turf_decal/tile/blue/opposingcorners, +/obj/effect/turf_decal/tile/blue/opposingcorners, +/obj/structure/chair/greyscale{ + dir = 8 + }, +/obj/effect/decal/cleanable/confetti, +/turf/open/floor/iron/kitchen, +/area/ruin/space/has_grav/powered/virtual_domain) +"LP" = ( +/obj/item/trash/shrimp_chips, +/turf/open/floor/iron/kitchen, +/area/ruin/space/has_grav/powered/virtual_domain) +"LU" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners, +/obj/effect/turf_decal/tile/bar/opposingcorners, +/obj/effect/turf_decal/tile/blue/opposingcorners, +/obj/effect/turf_decal/tile/blue/opposingcorners, +/obj/machinery/button/door/directional/east{ + id = "door1" + }, +/turf/open/floor/iron/kitchen, +/area/ruin/space/has_grav/powered/virtual_domain) +"Mc" = ( +/obj/effect/turf_decal/tile/blue/opposingcorners, +/obj/effect/turf_decal/tile/blue/opposingcorners, +/obj/effect/decal/cleanable/blood/tracks{ + dir = 4 + }, +/obj/effect/turf_decal/caution/stand_clear, +/obj/structure/fake_stairs/wood{ + dir = 8 + }, +/turf/open/floor/iron/kitchen, +/area/ruin/space/has_grav/powered/virtual_domain) +"Mm" = ( +/obj/structure/chair/stool/bar/directional/north, +/turf/open/floor/iron/kitchen, +/area/ruin/space/has_grav/powered/virtual_domain) +"Mq" = ( +/obj/structure/sign/poster/contraband/ambrosia_vulgaris/directional/west, +/turf/closed/indestructible/reinforced, +/area/ruin/space/has_grav/powered/virtual_domain) +"ML" = ( +/obj/effect/turf_decal/tile/dark_red/opposingcorners, +/obj/effect/turf_decal/tile/dark_red/opposingcorners, +/turf/open/floor/iron/kitchen, +/area/ruin/space/has_grav/powered/virtual_domain) +"MO" = ( +/obj/effect/decal/cleanable/cobweb, +/turf/open/floor/wood, +/area/ruin/space/has_grav/powered/virtual_domain) +"MS" = ( +/obj/effect/turf_decal/tile/dark_red/opposingcorners, +/obj/effect/turf_decal/tile/dark_red/opposingcorners, +/obj/item/toy/balloon{ + pixel_x = 7; + pixel_y = 2 + }, +/turf/open/floor/iron/kitchen, +/area/ruin/space/has_grav/powered/virtual_domain) +"Ne" = ( +/turf/closed/indestructible/binary, +/area/space) +"Nz" = ( +/obj/structure/sign/poster/official/pda_ad/directional/north, +/turf/closed/indestructible/reinforced, +/area/ruin/space/has_grav/powered/virtual_domain) +"NA" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners, +/obj/effect/turf_decal/tile/bar/opposingcorners, +/turf/open/floor/iron/kitchen, +/area/ruin/space/has_grav/powered/virtual_domain) +"NE" = ( +/obj/structure/sign/poster/abductor/ayy_cops/directional/north, +/turf/closed/indestructible/reinforced, +/area/ruin/space/has_grav/powered/virtual_domain) +"Od" = ( +/obj/structure/table/wood/poker, +/obj/item/toy/cards/deck, +/turf/open/floor/iron/kitchen, +/area/ruin/space/has_grav/powered/virtual_domain) +"Ox" = ( +/obj/structure/sign/poster/official/the_owl, +/turf/closed/indestructible/reinforced, +/area/ruin/space/has_grav/powered/virtual_domain) +"OB" = ( +/turf/open/floor/wood, +/area/ruin/space/has_grav/powered/virtual_domain) +"OD" = ( +/mob/living/basic/bear/russian, +/turf/open/floor/iron/kitchen, +/area/ruin/space/has_grav/powered/virtual_domain) +"OM" = ( +/obj/structure/table, +/obj/effect/decal/cleanable/food/salt, +/turf/open/floor/iron/kitchen/small, +/area/ruin/space/has_grav/powered/virtual_domain) +"Pm" = ( +/obj/structure/chair/sofa/corp/right, +/turf/open/floor/iron/kitchen, +/area/ruin/space/has_grav/powered/virtual_domain) +"PK" = ( +/obj/structure/curtain/cloth/fancy/mechanical, +/obj/effect/decal/cleanable/blood/tracks, +/turf/open/floor/wood, +/area/ruin/space/has_grav/powered/virtual_domain) +"Qg" = ( +/obj/effect/turf_decal/tile/blue/opposingcorners, +/obj/effect/turf_decal/tile/blue/opposingcorners, +/obj/item/toy/balloon/heart, +/obj/machinery/light/built/directional/west, +/turf/open/floor/iron/kitchen, +/area/ruin/space/has_grav/powered/virtual_domain) +"RB" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners, +/obj/effect/turf_decal/tile/bar/opposingcorners, +/obj/machinery/light/built/directional/west, +/obj/effect/decal/cleanable/glass/plastitanium, +/turf/open/floor/iron/kitchen, +/area/ruin/space/has_grav/powered/virtual_domain) +"Sp" = ( +/obj/structure/chair/sofa/corp, +/turf/open/floor/iron/kitchen, +/area/ruin/space/has_grav/powered/virtual_domain) +"Sr" = ( +/obj/effect/decal/cleanable/blood/footprints{ + dir = 4 + }, +/turf/open/floor/iron/kitchen, +/area/ruin/space/has_grav/powered/virtual_domain) +"SE" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners, +/obj/effect/turf_decal/tile/bar/opposingcorners, +/obj/machinery/light/built/directional/east, +/obj/effect/decal/cleanable/glass/plastitanium, +/turf/open/floor/iron/kitchen, +/area/ruin/space/has_grav/powered/virtual_domain) +"SW" = ( +/obj/machinery/door/poddoor{ + id = "door1" + }, +/turf/open/floor/iron/kitchen, +/area/virtual_domain/protected_space/fullbright) +"Ti" = ( +/obj/structure/table/glass, +/obj/item/reagent_containers/cup/glass/drinkingglass/filled/soda{ + pixel_x = 3; + pixel_y = 6 + }, +/turf/open/floor/iron/kitchen, +/area/ruin/space/has_grav/powered/virtual_domain) +"Tp" = ( +/obj/structure/sign/poster/official/soft_cap_pop_art, +/turf/closed/indestructible/reinforced, +/area/ruin/space/has_grav/powered/virtual_domain) +"Tq" = ( +/turf/open/misc/dirt/jungle, +/area/virtual_domain/fullbright) +"TG" = ( +/obj/effect/turf_decal/tile/blue/opposingcorners, +/obj/effect/turf_decal/tile/blue/opposingcorners, +/obj/structure/chair/greyscale{ + dir = 8 + }, +/obj/effect/decal/cleanable/insectguts, +/turf/open/floor/iron/kitchen, +/area/ruin/space/has_grav/powered/virtual_domain) +"TR" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners, +/obj/effect/turf_decal/tile/bar/opposingcorners, +/obj/effect/decal/cleanable/ants/fire, +/turf/open/floor/iron/kitchen, +/area/ruin/space/has_grav/powered/virtual_domain) +"TW" = ( +/obj/effect/turf_decal/tile/dark_red/opposingcorners, +/obj/effect/turf_decal/tile/dark_red/opposingcorners, +/mob/living/basic/bear/snow, +/turf/open/floor/iron/kitchen, +/area/ruin/space/has_grav/powered/virtual_domain) +"Uj" = ( +/obj/structure/curtain/bounty/start_closed, +/turf/closed/indestructible/binary, +/area/ruin/space/has_grav/powered/virtual_domain) +"Ux" = ( +/turf/open/floor/iron/kitchen, +/area/ruin/space/has_grav/powered/virtual_domain) +"UR" = ( +/obj/effect/decal/cleanable/confetti, +/turf/open/floor/iron/kitchen, +/area/ruin/space/has_grav/powered/virtual_domain) +"UW" = ( +/obj/structure/sign/poster/official/no_erp/directional/north, +/turf/closed/indestructible/reinforced, +/area/ruin/space/has_grav/powered/virtual_domain) +"Vd" = ( +/turf/open/floor/iron/cafeteria, +/area/virtual_domain/protected_space/fullbright) +"Ve" = ( +/obj/structure/table, +/obj/item/kitchen/tongs, +/turf/open/floor/iron/kitchen/small, +/area/ruin/space/has_grav/powered/virtual_domain) +"Vs" = ( +/obj/effect/turf_decal/tile/dark_red/opposingcorners, +/obj/effect/turf_decal/tile/dark_red/opposingcorners, +/obj/effect/decal/cleanable/blood/gibs/old, +/obj/machinery/light/built/directional/west, +/turf/open/floor/iron/kitchen, +/area/ruin/space/has_grav/powered/virtual_domain) +"VS" = ( +/obj/structure/table/reinforced, +/obj/item/modular_computer/laptop/preset/civilian, +/turf/open/floor/iron/cafeteria, +/area/virtual_domain/protected_space/fullbright) +"VW" = ( +/obj/structure/reagent_dispensers/water_cooler, +/turf/open/floor/iron/kitchen, +/area/ruin/space/has_grav/powered/virtual_domain) +"Wj" = ( +/obj/structure/sign/poster/contraband/free_key/directional, +/turf/closed/indestructible/reinforced, +/area/virtual_domain/protected_space/fullbright) +"Wy" = ( +/obj/effect/decal/cleanable/molten_object/large, +/turf/open/floor/iron/kitchen, +/area/ruin/space/has_grav/powered/virtual_domain) +"WG" = ( +/obj/effect/turf_decal/tile/dark_red/opposingcorners, +/obj/effect/turf_decal/tile/dark_red/opposingcorners, +/obj/structure/chair/greyscale{ + dir = 4 + }, +/obj/effect/decal/cleanable/confetti, +/turf/open/floor/iron/kitchen, +/area/ruin/space/has_grav/powered/virtual_domain) +"XG" = ( +/obj/machinery/roulette, +/turf/open/floor/iron/kitchen, +/area/ruin/space/has_grav/powered/virtual_domain) +"Yd" = ( +/obj/effect/turf_decal/tile/blue/opposingcorners, +/obj/effect/turf_decal/tile/blue/opposingcorners, +/obj/structure/chair/greyscale{ + dir = 8 + }, +/turf/open/floor/iron/kitchen, +/area/ruin/space/has_grav/powered/virtual_domain) +"Ye" = ( +/obj/structure/table/glass, +/obj/item/reagent_containers/cup/soda_cans/grey_bull, +/turf/open/floor/iron/kitchen, +/area/ruin/space/has_grav/powered/virtual_domain) +"Yy" = ( +/obj/machinery/computer/arcade/amputation{ + dir = 1 + }, +/turf/open/floor/iron/kitchen, +/area/ruin/space/has_grav/powered/virtual_domain) +"YK" = ( +/obj/effect/spawner/random/trash, +/turf/open/floor/iron/kitchen, +/area/ruin/space/has_grav/powered/virtual_domain) +"YL" = ( +/obj/item/trash/raisins, +/turf/open/floor/iron/kitchen, +/area/ruin/space/has_grav/powered/virtual_domain) +"YT" = ( +/obj/machinery/button/door/directional/west{ + id = "door1" + }, +/turf/open/floor/iron/cafeteria, +/area/virtual_domain/protected_space/fullbright) +"Zf" = ( +/obj/machinery/deepfryer, +/turf/open/floor/iron/kitchen/small, +/area/ruin/space/has_grav/powered/virtual_domain) +"Zj" = ( +/mob/living/basic/bear/fightpit, +/turf/open/floor/wood, +/area/ruin/space/has_grav/powered/virtual_domain) +"Zp" = ( +/obj/structure/chair/comfy/black{ + dir = 8 + }, +/obj/effect/decal/cleanable/blood/old, +/turf/open/floor/iron/kitchen, +/area/ruin/space/has_grav/powered/virtual_domain) +"ZL" = ( +/obj/structure/railing{ + dir = 4 + }, +/turf/open/floor/wood, +/area/ruin/space/has_grav/powered/virtual_domain) +"ZU" = ( +/obj/effect/turf_decal/tile/blue/opposingcorners, +/obj/effect/turf_decal/tile/blue/opposingcorners, +/obj/effect/decal/cleanable/confetti, +/turf/open/floor/iron/kitchen, +/area/ruin/space/has_grav/powered/virtual_domain) +"ZZ" = ( +/obj/effect/turf_decal/tile/dark_red/opposingcorners, +/obj/effect/turf_decal/tile/dark_red/opposingcorners, +/obj/structure/chair/greyscale{ + dir = 8 + }, +/turf/open/floor/iron/kitchen, +/area/ruin/space/has_grav/powered/virtual_domain) + +(1,1,1) = {" +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +"} +(2,1,1) = {" +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +"} +(3,1,1) = {" +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +"} +(4,1,1) = {" +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Ne +Ne +Ne +Ne +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +"} +(5,1,1) = {" +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Ne +Ne +Ne +Ne +Ne +Ne +Ne +Ne +Ne +Ne +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +"} +(6,1,1) = {" +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Ne +Uj +Uj +Uj +Uj +Uj +Uj +Uj +Ne +Ne +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +"} +(7,1,1) = {" +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Ne +Ne +Uj +MO +OB +OB +OB +OB +Uj +Ne +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +"} +(8,1,1) = {" +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Ne +Ne +Uj +OB +OB +OB +OB +Zj +Uj +Ne +Ne +Ne +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +"} +(9,1,1) = {" +Cm +Cm +Cm +Cm +Cm +Ne +Ne +Ne +Ne +Ne +Ne +Ne +Ne +Ne +Ne +Ne +Uj +vm +OB +OB +OB +vm +Uj +Ne +Ne +Ne +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +"} +(10,1,1) = {" +Cm +Cm +Cm +Cm +Cm +Ne +ve +ve +ve +ve +ve +ve +Ox +ve +ve +ve +ve +ve +OB +OB +OB +ve +ve +Ne +Ne +Ne +Ne +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +"} +(11,1,1) = {" +Cm +Cm +Cm +Cm +Cm +Ne +ve +sk +Ux +Ux +kL +Ux +Ux +UR +Ux +Ux +Ux +Fy +EP +ZL +ZL +wM +ve +Ne +Ne +Ne +Ne +Ne +Ne +Ne +Ne +Ne +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +"} +(12,1,1) = {" +Cm +Cm +Cm +Cm +Cm +Ne +ve +GK +Gb +Ux +IX +rB +YL +mX +UR +Ux +Ux +Ux +UR +UR +Ux +Ux +ve +Ne +Ne +ve +ve +ve +ve +ve +ve +Ne +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +"} +(13,1,1) = {" +Cm +Cm +Cm +Cm +Cm +Ne +gl +GK +Ux +Ux +Bj +Ux +Ux +Yy +Bf +Ux +Ux +Ux +Zp +rc +re +Ux +ve +Ne +Ne +ve +Ux +Ux +Ux +Ux +ve +Ne +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +"} +(14,1,1) = {" +Cm +Cm +Cm +Ne +Ne +Ne +ve +GK +Ux +Ux +Bj +UR +Ux +Yy +Ux +Ux +Ux +Ux +Ke +re +re +Ux +Tp +Ne +Ne +ve +Ux +vw +Ux +Ux +ve +Ne +Ne +Ne +Cm +Cm +Cm +Cm +Ne +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +"} +(15,1,1) = {" +Cm +Ne +Ne +Ne +Ne +Ne +ve +sk +Ux +Ux +Ux +Ux +Ux +Ux +Ux +Ux +Ux +Ux +re +re +re +Ux +ve +Ne +Ne +ve +Ux +Ux +Ux +Ux +ve +Ne +Ne +Ne +Ne +Ne +Ne +Ne +Ne +Ne +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +"} +(16,1,1) = {" +Cm +Ne +Uj +Uj +Uj +Uj +ve +ve +ve +ve +Ux +Ux +Ux +Wy +ve +ve +NE +Ux +Ux +Ux +Ux +Ho +ve +ve +ve +ve +ve +ve +ve +ve +ve +ve +UW +UW +cY +UW +ve +ve +Ne +Ne +Cm +Cm +Cm +Cm +Ne +Ne +Cm +Cm +"} +(17,1,1) = {" +Cm +Ne +Uj +OB +OB +dl +hI +to +Vs +dN +vT +oO +ML +EO +WG +Qg +ve +Ux +xY +Ux +Ux +NA +NA +NA +NA +RB +NA +NA +zU +NA +NA +NA +yz +yz +yz +yz +nP +ve +Ne +Ne +Ne +Ne +Ne +Ne +Ne +Ne +Ne +Cm +"} +(18,1,1) = {" +Cm +Ne +Uj +OB +OB +OB +xa +jZ +to +eW +bW +ma +to +hR +tC +MS +ve +Ux +XG +XG +Ux +NA +pX +NA +NA +NA +NA +NA +NA +NA +NA +td +yz +LU +yz +ob +bL +ve +Ne +Bc +Bc +Bc +Bc +Bc +JF +Ne +Cm +Cm +"} +(19,1,1) = {" +Cm +Ne +Uj +OB +OB +OB +HG +of +ML +ZU +mC +vR +ML +tC +Jh +to +Ux +Ux +Od +tZ +Ux +TR +ve +ve +ve +ve +ve +ve +ve +Fc +Fc +sl +SW +Fc +Wj +Fc +ve +ve +ve +Bc +Bc +Bc +Bc +Bc +Bc +Ne +Cm +Cm +"} +(20,1,1) = {" +Cm +Ne +Uj +OB +OB +OB +HG +vk +to +ML +Ln +ZZ +to +ZZ +Yd +eW +Ux +hK +fd +Ux +Ux +NA +vz +tI +VW +ve +ex +ex +ex +Fc +hq +ud +Dx +YT +Vd +Fc +Tq +Tq +Tq +Bc +Bc +Bc +Bc +Bc +Bc +Ne +Cm +Cm +"} +(21,1,1) = {" +Cm +Ne +Uj +OB +OB +OB +HG +vk +ML +to +ML +cn +ML +to +ML +ZU +Ux +Ux +fd +Ux +Ux +NA +Ux +Ux +lP +qK +ex +ex +sg +jE +VS +Vd +Vd +Vd +Vd +DV +Tq +Tq +Tq +Bc +Bc +Bc +Bc +Bc +Bc +Ne +Cm +Cm +"} +(22,1,1) = {" +Cm +Ne +Uj +OB +OB +pK +PK +yB +to +ML +EO +Ag +to +Ag +EO +eW +Ux +Ux +fd +Ux +Ux +NA +vz +LP +lc +ve +ex +ex +ex +JW +ql +BU +ud +HE +Vd +Fc +Io +Tq +Tq +Bc +Bc +Bc +Bc +Bc +Bc +Ne +Cm +Cm +"} +(23,1,1) = {" +Cm +Ne +Uj +OB +OB +pK +xa +Mc +JD +ZU +xk +tC +ML +si +ma +ZU +YK +Ux +fd +IY +Ux +NA +ve +ve +ve +ve +ve +ve +ve +Fc +Fc +nF +rD +Fc +bP +Fc +ve +ve +ve +Bc +Bc +Bc +Bc +Bc +Bc +Ne +Cm +Cm +"} +(24,1,1) = {" +Cm +Ne +Uj +OB +OB +If +ve +ML +rY +ML +tC +Jh +to +ma +fz +TW +ve +Ux +XG +XG +Ux +NA +NA +NA +NA +NA +NA +NA +xv +NA +NA +NA +yz +vF +yz +yz +Hi +ve +Ne +Bc +Bc +Bc +Bc +Bc +tN +Ne +Cm +Cm +"} +(25,1,1) = {" +Cm +Ne +Uj +OB +OB +vm +ve +lS +gL +ms +ri +TG +eW +Yd +Ce +Ct +ve +Ux +Ux +Ux +Ux +cp +NA +NA +NA +SE +NA +NA +vy +NA +NA +NA +yz +yz +yz +yz +eE +ve +Ne +Ne +Ne +Ne +Ne +Ne +Ne +Ne +Cm +Cm +"} +(26,1,1) = {" +Cm +Ne +Uj +Uj +Uj +Uj +ve +ve +ve +ve +GD +Ux +Ux +Ux +ve +ve +ve +Ux +Ux +Ux +Ux +Ux +ve +ve +ve +ve +ve +ve +qK +ve +ve +Nz +ve +ve +ve +ve +ve +ve +Ne +Ne +Ne +Ne +Cm +Cm +Ne +Cm +Cm +Cm +"} +(27,1,1) = {" +Cm +Ne +Ne +Ne +Ne +Ne +ve +OD +Ux +Ux +Ux +Ux +Ux +Ux +Ux +Ux +Ux +Ux +Ux +Ux +Ux +Ux +ve +Ne +Ne +Ne +Ne +Ne +Ne +Ne +Ne +Ne +Ne +Ne +Ne +Ne +Ne +Ne +Ne +Ne +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +"} +(28,1,1) = {" +Cm +Cm +Ne +Ne +Ne +Ne +ve +kf +kf +kf +kf +kf +kf +Ux +Ux +Ux +Ux +Ux +Pm +Ye +km +Ux +ve +ve +ve +ve +ve +ve +ve +Ne +Ne +Ne +Cm +Cm +Cm +Cm +Ne +Ne +Ne +Ne +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +"} +(29,1,1) = {" +Cm +Cm +Cm +Cm +Ne +Ne +ve +dz +dz +dz +dz +dz +dz +Mm +Ux +Ux +Ux +Ux +Sp +dV +ur +Ux +Bo +aV +uZ +KJ +Ve +lL +ve +Ne +Ne +Cm +Cm +Cm +Cm +Cm +Cm +Ne +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +"} +(30,1,1) = {" +Cm +Cm +Cm +Cm +Cm +Ne +Mq +bR +Ux +Ux +Ux +Ux +dz +Mm +Ux +Ux +Ux +Dz +nX +Ti +sR +Ux +Bo +aV +aV +FA +aV +OM +ve +Ne +Ne +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +"} +(31,1,1) = {" +Cm +Cm +Cm +Cm +Cm +Ne +ve +lc +Ux +fo +AF +pr +dz +Mm +Ux +Ux +ng +fU +fU +pr +Ux +Ux +ve +ve +ve +vG +aV +Zf +ve +Ne +Ne +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +"} +(32,1,1) = {" +Cm +Cm +Cm +Cm +Cm +Ne +ve +ve +qK +ve +ve +ve +ve +ve +ve +Ux +Sr +ve +ve +ve +ve +ve +ve +Ne +ve +vG +aV +fy +ve +Ne +Ne +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +"} +(33,1,1) = {" +Cm +Cm +Cm +Cm +Ne +Ne +Ne +Ne +Ne +Ne +Ne +Ne +Ne +Ne +ve +Ux +Sr +ve +Ne +Ne +Ne +Ne +Ne +Ne +ve +vs +Gn +bu +ve +Ne +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +"} +(34,1,1) = {" +Cm +Cm +Cm +Cm +Ne +Ne +ve +ve +ve +ve +ve +ve +ve +ve +ve +Ux +Ux +ve +ve +ve +ve +ve +ve +Ne +ve +ve +ve +ve +ve +Ne +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +"} +(35,1,1) = {" +Cm +Cm +Cm +Cm +Ne +Ne +ve +Ux +Ux +Ux +Ux +Ux +Dz +Ux +Ux +Ux +Ux +Ux +Ux +Ux +Ux +Ux +ve +Ne +Ne +Ne +Ne +Ne +Ne +Ne +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +"} +(36,1,1) = {" +Cm +Cm +Cm +Cm +Ne +Ne +ve +Ak +Ux +Ux +Ux +Ux +Ux +Ux +Ux +Ux +Ux +Ux +Ux +Ux +Ux +Ux +ve +Ne +Ne +Ne +Ne +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +"} +(37,1,1) = {" +Cm +Cm +Cm +Cm +Ne +Ne +ve +ve +ve +qK +qK +ve +ve +ve +ve +ve +ve +ve +ve +qK +qK +ve +ve +Ne +Ne +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +"} +(38,1,1) = {" +Cm +Cm +Cm +Cm +Ne +Ne +Ne +Ne +Ne +Ne +Ne +Ne +Ne +Ne +Ne +Ne +Ne +Ne +Ne +Ne +Ne +Ne +Ne +Ne +Ne +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +"} +(39,1,1) = {" +Cm +Cm +Cm +Ne +Ne +Ne +Ne +Ne +Ne +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +"} +(40,1,1) = {" +Cm +Cm +Cm +Cm +Ne +Ne +Ne +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +"} +(41,1,1) = {" +Cm +Cm +Cm +Cm +Cm +Ne +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +"} +(42,1,1) = {" +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +"} +(43,1,1) = {" +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +Cm +"} diff --git a/_maps/virtual_domains/gondola_asteroid.dmm b/_maps/virtual_domains/gondola_asteroid.dmm index cb8f2625f0d95..6ed8763f9a6f5 100644 --- a/_maps/virtual_domains/gondola_asteroid.dmm +++ b/_maps/virtual_domains/gondola_asteroid.dmm @@ -53,7 +53,7 @@ /turf/open/floor/grass, /area/ruin/space/has_grav/powered/virtual_domain) "z" = ( -/mob/living/simple_animal/pet/gondola/virtual_domain, +/mob/living/basic/pet/gondola/virtual_domain, /turf/open/floor/grass, /area/ruin/space/has_grav/powered/virtual_domain) "A" = ( diff --git a/_maps/virtual_domains/island_brawl.dmm b/_maps/virtual_domains/island_brawl.dmm new file mode 100644 index 0000000000000..2c8a12c6c5793 --- /dev/null +++ b/_maps/virtual_domains/island_brawl.dmm @@ -0,0 +1,12259 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"al" = ( +/obj/structure/flora/coconuts{ + pixel_x = -5; + pixel_y = 4 + }, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"as" = ( +/obj/structure/flora/tree/palm/style_2{ + pixel_y = 6 + }, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"aw" = ( +/obj/structure/railing{ + dir = 1 + }, +/turf/open/floor/wood, +/area/virtual_domain/fullbright) +"aA" = ( +/obj/structure/chair/stool/bamboo{ + dir = 1 + }, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 8 + }, +/turf/open/floor/wood/large, +/area/virtual_domain/fullbright) +"aD" = ( +/obj/item/storage/medkit/regular{ + pixel_y = 15; + pixel_x = -2 + }, +/obj/structure/table/glass, +/obj/item/emergency_bed{ + pixel_y = 6 + }, +/turf/open/floor/iron/white/textured_large, +/area/virtual_domain) +"aE" = ( +/obj/structure/chair/stool/directional/south, +/turf/open/floor/iron/freezer, +/area/virtual_domain) +"aQ" = ( +/obj/structure/closet/secure_closet/personal/cabinet, +/obj/item/clothing/under/costume/sailor, +/turf/open/floor/wood, +/area/virtual_domain) +"aY" = ( +/obj/structure/table/wood, +/obj/item/tape{ + pixel_y = 7; + pixel_x = 11 + }, +/obj/item/reagent_containers/cup/glass/coffee{ + pixel_x = -7; + pixel_y = 12 + }, +/obj/effect/spawner/random/bureaucracy/pen{ + pixel_x = -3; + pixel_y = -2 + }, +/turf/open/floor/iron/dark/diagonal, +/area/virtual_domain) +"aZ" = ( +/obj/structure/table/wood, +/obj/item/food/grown/watermelon{ + pixel_y = 8; + pixel_x = 6 + }, +/obj/item/food/watermelonslice, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"ba" = ( +/obj/effect/landmark/bitrunning/curiosity_spawn, +/turf/open/floor/iron/dark/textured_large, +/area/virtual_domain) +"bb" = ( +/obj/item/circular_saw{ + pixel_y = 4 + }, +/obj/item/scalpel{ + pixel_y = 15 + }, +/obj/structure/table/glass, +/turf/open/floor/wood/large, +/area/virtual_domain/fullbright) +"bp" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 10 + }, +/obj/effect/turf_decal/tile/dark/half{ + pixel_y = -1; + pixel_x = 5; + dir = 8 + }, +/turf/open/water/beach, +/area/virtual_domain/fullbright) +"bx" = ( +/obj/machinery/defibrillator_mount/directional/west, +/obj/structure/bed/pod{ + desc = "An old medical bed, just waiting for replacement with something up to date."; + dir = 4; + name = "medical bed" + }, +/obj/machinery/iv_drip{ + pixel_y = 21; + pixel_x = -4 + }, +/turf/open/floor/iron/white/textured_large, +/area/virtual_domain) +"bD" = ( +/obj/structure/chair/plastic{ + dir = 8 + }, +/obj/item/reagent_containers/cup/soda_cans/melon_soda{ + pixel_y = 13; + pixel_x = -9 + }, +/obj/item/fishing_rod{ + pixel_x = 8; + pixel_y = -6 + }, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"bE" = ( +/turf/open/floor/wood, +/area/virtual_domain) +"bK" = ( +/turf/open/floor/wood/parquet, +/area/virtual_domain/fullbright) +"bT" = ( +/obj/item/cigbutt{ + pixel_y = -4; + pixel_x = 2 + }, +/turf/open/floor/wood/large, +/area/virtual_domain/fullbright) +"bX" = ( +/obj/effect/turf_decal/sand/plating, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"bY" = ( +/turf/open/misc/beach/coast{ + dir = 4 + }, +/area/virtual_domain/fullbright) +"cc" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 6 + }, +/obj/machinery/vending/cigarette/beach, +/turf/open/floor/wood/large, +/area/virtual_domain/fullbright) +"ce" = ( +/obj/structure/reagent_dispensers/fueltank, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/cobweb/cobweb2, +/turf/open/floor/plating, +/area/virtual_domain) +"cg" = ( +/obj/machinery/medical_kiosk, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"ch" = ( +/obj/machinery/recharge_station, +/obj/machinery/light/directional/east, +/turf/open/floor/carpet/cyan, +/area/virtual_domain) +"cp" = ( +/obj/item/reagent_containers/cup/soda_cans/cola{ + pixel_x = -8; + pixel_y = -6 + }, +/obj/item/reagent_containers/cup/soda_cans/space_mountain_wind{ + pixel_x = 15 + }, +/obj/structure/fluff/beach_umbrella/science, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"cr" = ( +/obj/structure/closet/secure_closet/personal/cabinet, +/obj/machinery/button/door/directional/north{ + id = "beach_room_9"; + normaldoorcontrol = 1; + specialfunctions = 4 + }, +/obj/item/claymore/cutlass{ + desc = "A piratey, foam sword used by kids to train themselves in the business of \"negotiating\" the transfer of treasure."; + force = 0; + name = "foam cutlass"; + throwforce = 0 + }, +/turf/open/floor/wood, +/area/virtual_domain) +"ct" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 1 + }, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"cB" = ( +/obj/structure/closet/secure_closet/personal/cabinet, +/obj/item/clothing/under/costume/pirate, +/turf/open/floor/wood, +/area/virtual_domain) +"cC" = ( +/obj/structure/reagent_dispensers/watertank, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/virtual_domain) +"cE" = ( +/turf/open/misc/beach/coast, +/area/virtual_domain/fullbright) +"cH" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/machinery/door/airlock/wood{ + name = "Room 7"; + id_tag = "beach_room_7" + }, +/turf/open/floor/wood, +/area/virtual_domain) +"cK" = ( +/obj/item/reagent_containers/cup/glass/bottle/wine{ + pixel_y = 16; + pixel_x = -5 + }, +/obj/item/reagent_containers/cup/glass/drinkingglass/shotglass{ + pixel_y = 3; + pixel_x = -8 + }, +/obj/structure/table/bronze, +/obj/item/reagent_containers/cup/glass/drinkingglass/shotglass{ + pixel_y = 10; + pixel_x = 6 + }, +/turf/open/floor/wood/large, +/area/virtual_domain) +"cO" = ( +/turf/open/water/beach, +/area/virtual_domain/fullbright) +"cW" = ( +/obj/effect/mob_spawn/ghost_role/human/virtual_domain/islander, +/turf/open/floor/carpet/cyan, +/area/virtual_domain) +"db" = ( +/obj/machinery/door/airlock/wood{ + name = "Room 11"; + id_tag = "beach_room_11" + }, +/obj/effect/turf_decal/siding/wood, +/turf/open/floor/wood, +/area/virtual_domain) +"de" = ( +/obj/effect/turf_decal/sand, +/mob/living/basic/crab, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"dj" = ( +/obj/machinery/door/airlock/wood/glass{ + name = "Hotel's Facilities" + }, +/turf/open/floor/wood/large, +/area/virtual_domain) +"dl" = ( +/obj/structure/table/bronze, +/obj/item/reagent_containers/condiment/bbqsauce{ + pixel_y = 13; + pixel_x = 3 + }, +/obj/item/reagent_containers/condiment/hotsauce{ + pixel_y = 9; + pixel_x = -3 + }, +/turf/open/floor/wood/large, +/area/virtual_domain) +"dp" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"du" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/effect/turf_decal/tile/dark/half{ + pixel_y = -1; + pixel_x = 5; + dir = 8 + }, +/turf/open/water/beach, +/area/virtual_domain/fullbright) +"dv" = ( +/obj/structure/table, +/obj/item/wrench{ + pixel_y = 4 + }, +/obj/item/storage/toolbox/emergency, +/obj/effect/decal/cleanable/oil, +/turf/open/floor/iron/dark/herringbone, +/area/virtual_domain) +"dA" = ( +/obj/structure/table/bronze, +/obj/item/paper_bin/carbon{ + pixel_y = 8 + }, +/turf/open/floor/wood/large, +/area/virtual_domain) +"dB" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 6 + }, +/turf/open/floor/eighties, +/area/virtual_domain) +"dD" = ( +/obj/item/trash/can{ + pixel_y = -9; + pixel_x = 10 + }, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"dG" = ( +/obj/effect/turf_decal/siding/blue, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"dH" = ( +/obj/structure/closet/crate/bin, +/turf/open/floor/wood, +/area/virtual_domain) +"dS" = ( +/obj/structure/table/bronze, +/obj/structure/sign/poster/random/directional/east, +/obj/item/table_clock{ + pixel_y = 4 + }, +/turf/open/floor/wood, +/area/virtual_domain) +"dW" = ( +/obj/structure/railing/corner/end/flip{ + dir = 1 + }, +/obj/machinery/door/airlock/wood{ + name = "Balcony"; + id_tag = "beach_room_x" + }, +/turf/open/floor/wood, +/area/virtual_domain) +"dX" = ( +/obj/item/toy/seashell{ + pixel_y = -5 + }, +/turf/open/misc/beach/coast, +/area/virtual_domain/fullbright) +"dY" = ( +/obj/structure/table/wood/poker, +/obj/item/stack/spacecash/c100{ + pixel_y = 5 + }, +/obj/item/toy/cards/deck{ + pixel_y = 13; + pixel_x = -5 + }, +/turf/open/floor/wood/large, +/area/virtual_domain) +"ee" = ( +/obj/structure/table/reinforced, +/obj/item/defibrillator/loaded{ + pixel_y = 7 + }, +/turf/open/floor/iron/white/textured_large, +/area/virtual_domain) +"ef" = ( +/obj/effect/turf_decal/stripes/red/line{ + dir = 8 + }, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"eh" = ( +/obj/structure/table/wood/fancy, +/obj/effect/turf_decal/tile/dark_red/full, +/obj/item/reagent_containers/cup/soda_cans/cola{ + pixel_x = -13; + pixel_y = 14 + }, +/obj/item/reagent_containers/cup/soda_cans/cola{ + pixel_x = 7; + pixel_y = 8 + }, +/turf/open/floor/iron/smooth_large, +/area/virtual_domain/fullbright) +"en" = ( +/turf/open/floor/eighties, +/area/virtual_domain) +"ev" = ( +/obj/structure/mineral_door/sandstone{ + name = "Sandcastle" + }, +/obj/effect/turf_decal/sand/plating, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"ew" = ( +/obj/effect/landmark/bitrunning/cache_goal_turf, +/obj/effect/landmark/bitrunning/loot_signal, +/turf/open/indestructible/binary, +/area/virtual_domain/protected_space/fullbright) +"eH" = ( +/turf/open/misc/beach/coast{ + dir = 9 + }, +/area/virtual_domain/fullbright) +"eJ" = ( +/obj/structure/table/bronze, +/obj/item/camera{ + pixel_y = 5 + }, +/turf/open/floor/wood, +/area/virtual_domain) +"eK" = ( +/turf/closed/wall/mineral/wood, +/area/virtual_domain/fullbright) +"eM" = ( +/obj/item/trash/can{ + pixel_y = -5; + pixel_x = 4 + }, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"eO" = ( +/obj/structure/table/bronze, +/obj/item/camera{ + pixel_y = 8; + pixel_x = -3 + }, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"eP" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/food_cart, +/turf/open/floor/plating, +/area/virtual_domain) +"fe" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/effect/turf_decal/tile/dark/half{ + pixel_y = -2; + pixel_x = 5; + dir = 8 + }, +/turf/open/water/beach, +/area/virtual_domain/fullbright) +"fg" = ( +/obj/effect/baseturf_helper/virtual_domain, +/turf/closed/wall/mineral/wood, +/area/virtual_domain) +"fv" = ( +/obj/item/toy/seashell{ + pixel_x = 12; + pixel_y = -9 + }, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"fH" = ( +/obj/structure/table/bronze, +/obj/item/camera{ + pixel_y = 8; + pixel_x = 6 + }, +/obj/item/pen/blue{ + pixel_x = -11; + pixel_y = 2 + }, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"fI" = ( +/turf/open/misc/beach/sand, +/area/virtual_domain/protected_space/fullbright) +"fJ" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/turf/open/water/beach, +/area/virtual_domain) +"fL" = ( +/obj/machinery/computer/order_console/cook, +/turf/open/floor/wood/large, +/area/virtual_domain) +"fY" = ( +/obj/structure/window/reinforced/spawner/directional/west, +/obj/structure/window/reinforced/spawner/directional/south, +/obj/item/binoculars{ + pixel_y = 20 + }, +/obj/item/megaphone{ + pixel_y = 2; + pixel_x = 1 + }, +/obj/structure/table/wood, +/obj/effect/turf_decal/siding/wood{ + dir = 10 + }, +/turf/open/floor/wood, +/area/virtual_domain/fullbright) +"gc" = ( +/obj/structure/table/bronze, +/obj/item/pai_card{ + desc = "A real Nanotrasen success, these personal AIs provide all of the companionship of an AI without any law related red-tape."; + name = "\improper Nanotrasen-brand personal AI device exhibit"; + pixel_y = 4 + }, +/turf/open/floor/wood, +/area/virtual_domain) +"gf" = ( +/obj/machinery/button/door/directional/south{ + id = "beach_room_5"; + normaldoorcontrol = 1; + specialfunctions = 4 + }, +/turf/open/floor/wood, +/area/virtual_domain) +"gi" = ( +/obj/effect/turf_decal/siding/wood/corner, +/obj/item/stack/arcadeticket{ + pixel_y = 12; + pixel_x = -16 + }, +/turf/open/floor/eighties, +/area/virtual_domain) +"gs" = ( +/obj/structure/closet/crate, +/obj/item/clothing/suit/hooded/carp_costume, +/obj/item/clothing/head/hooded/carp_hood, +/obj/item/toy/plush/carpplushie, +/obj/item/toy/plush/shark, +/turf/open/floor/eighties, +/area/virtual_domain) +"gw" = ( +/turf/open/floor/carpet/cyan, +/area/virtual_domain) +"gA" = ( +/obj/effect/turf_decal/sand{ + density = 1 + }, +/obj/effect/decal/fakelattice, +/turf/open/floor/pod/light{ + density = 1 + }, +/area/virtual_domain/fullbright) +"gB" = ( +/obj/effect/landmark/bitrunning/curiosity_spawn, +/turf/open/floor/plastic, +/area/virtual_domain) +"gC" = ( +/obj/item/reagent_containers/cup/soda_cans/cola{ + pixel_x = -5; + pixel_y = -5 + }, +/obj/structure/fluff/beach_umbrella/syndi, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"gH" = ( +/obj/structure/tank_holder/extinguisher, +/turf/open/floor/wood/large, +/area/virtual_domain) +"gI" = ( +/obj/item/storage/toolbox/fishing{ + pixel_x = 2; + pixel_y = -13 + }, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"gK" = ( +/obj/structure/bed/double, +/obj/item/bedsheet/hos/double{ + name = "bedsheet"; + desc = "A bedsheet from the beach hotel." + }, +/turf/open/floor/carpet, +/area/virtual_domain) +"gL" = ( +/turf/open/misc/beach/coast/corner, +/area/virtual_domain/fullbright) +"gN" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/turf/open/floor/wood/large, +/area/virtual_domain) +"gP" = ( +/turf/open/floor/iron/white/textured_large, +/area/virtual_domain) +"gV" = ( +/obj/structure/flora/tree/palm{ + pixel_y = 25 + }, +/obj/structure/flora/coconuts{ + pixel_x = -7; + pixel_y = 7 + }, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"hh" = ( +/obj/effect/turf_decal/sand/plating, +/obj/item/shovel{ + pixel_y = 15; + pixel_x = -8 + }, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"ho" = ( +/obj/structure/chair/stool/bar/directional/west, +/turf/open/floor/wood/large, +/area/virtual_domain) +"hu" = ( +/obj/effect/baseturf_helper/virtual_domain, +/turf/open/misc/beach/sand, +/area/virtual_domain/protected_space/fullbright) +"hA" = ( +/obj/structure/table/wood, +/obj/machinery/chem_dispenser/drinks/fullupgrade{ + dir = 4 + }, +/turf/open/floor/wood/large, +/area/virtual_domain) +"hB" = ( +/obj/item/reagent_containers/cup/soda_cans/lemon_lime{ + pixel_x = -12 + }, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"hD" = ( +/obj/effect/decal/cleanable/oil, +/obj/machinery/button/door/directional/south{ + id = "BeachGarage" + }, +/turf/open/floor/iron/dark/herringbone, +/area/virtual_domain) +"hM" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/machinery/button/door/directional/south{ + id = "BeachBoats" + }, +/obj/effect/landmark/bitrunning/curiosity_spawn, +/turf/open/floor/wood/parquet, +/area/virtual_domain) +"hT" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/decal/cleanable/cobweb, +/obj/machinery/power/smes/full, +/turf/open/floor/plating, +/area/virtual_domain) +"hZ" = ( +/obj/structure/table/bronze, +/obj/item/storage/bag/tray, +/turf/open/floor/wood/large, +/area/virtual_domain) +"ii" = ( +/obj/effect/turf_decal/sand, +/obj/effect/turf_decal/siding/wood{ + dir = 5 + }, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"ij" = ( +/turf/open/misc/beach/coast{ + dir = 10 + }, +/area/virtual_domain/fullbright) +"ik" = ( +/obj/structure/dresser, +/obj/machinery/digital_clock/directional/north, +/turf/open/floor/wood, +/area/virtual_domain) +"il" = ( +/obj/structure/chair/plastic, +/obj/item/fishing_rod{ + pixel_x = 11; + pixel_y = -8 + }, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"io" = ( +/obj/structure/railing{ + dir = 10 + }, +/obj/item/kirbyplants/organic/plant8{ + pixel_y = 9; + pixel_x = 6 + }, +/turf/open/floor/wood, +/area/virtual_domain/fullbright) +"iy" = ( +/obj/structure/window/reinforced/spawner/directional/east, +/obj/structure/window/reinforced/spawner/directional/north, +/obj/structure/chair/stool/directional/south, +/obj/item/clothing/glasses/sunglasses{ + pixel_y = -2; + pixel_x = 2 + }, +/obj/item/bikehorn/airhorn{ + pixel_y = -15; + pixel_x = -13 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 5 + }, +/turf/open/floor/wood, +/area/virtual_domain/fullbright) +"iF" = ( +/obj/structure/table/bronze, +/obj/structure/desk_bell{ + pixel_x = -11; + pixel_y = 9 + }, +/obj/item/phone{ + pixel_y = 9; + pixel_x = 8 + }, +/turf/open/floor/carpet, +/area/virtual_domain) +"iP" = ( +/obj/structure/chair/plastic, +/obj/item/clothing/head/collectable/paper{ + desc = "What looks like an ordinary paper hat is actually a rare and valuable collector's edition paper hat. Keep away from fire, Curators, and ocean waves."; + pixel_y = -4 + }, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"iQ" = ( +/obj/machinery/button/door/directional/north{ + id = "beach_room_3"; + normaldoorcontrol = 1; + specialfunctions = 4 + }, +/turf/open/floor/wood, +/area/virtual_domain) +"iU" = ( +/obj/structure/chair/plastic{ + dir = 8 + }, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"iY" = ( +/obj/item/storage/bag/tray, +/obj/item/food/grown/watermelon{ + pixel_y = 4; + pixel_x = -1 + }, +/obj/effect/turf_decal/stripes/red/box, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"jb" = ( +/obj/structure/tank_holder/extinguisher{ + pixel_y = 11 + }, +/turf/open/floor/wood/large, +/area/virtual_domain) +"jm" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light/small/directional/west, +/obj/effect/landmark/bitrunning/curiosity_spawn, +/turf/open/floor/plating, +/area/virtual_domain) +"jn" = ( +/obj/item/cigbutt{ + pixel_y = -6; + pixel_x = -12 + }, +/obj/structure/railing/corner/end/flip{ + dir = 4 + }, +/turf/open/floor/wood/parquet, +/area/virtual_domain) +"jp" = ( +/obj/structure/closet/secure_closet/personal/cabinet, +/obj/item/clothing/neck/necklace/dope, +/obj/item/clothing/suit/jacket/letterman, +/turf/open/floor/wood, +/area/virtual_domain) +"jq" = ( +/obj/structure/musician/piano, +/turf/open/floor/wood, +/area/virtual_domain/fullbright) +"jr" = ( +/obj/structure/flora/tree/palm{ + pixel_y = 10; + pixel_x = 7 + }, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"jw" = ( +/obj/machinery/space_heater, +/obj/structure/sign/clock/directional/north, +/turf/open/floor/wood, +/area/virtual_domain) +"jK" = ( +/obj/machinery/reagentgrinder{ + pixel_y = 15; + pixel_x = -1 + }, +/obj/structure/table/bronze, +/obj/structure/desk_bell{ + pixel_x = 12; + pixel_y = 3 + }, +/turf/open/floor/wood/large, +/area/virtual_domain) +"jL" = ( +/obj/effect/mob_spawn/ghost_role/human/virtual_domain/islander, +/turf/open/floor/iron/white/textured_large, +/area/virtual_domain) +"jP" = ( +/turf/open/indestructible/binary, +/area/virtual_domain/protected_space/fullbright) +"jV" = ( +/turf/open/floor/iron/dark/herringbone, +/area/virtual_domain) +"jW" = ( +/obj/effect/baseturf_helper/virtual_domain, +/turf/open/floor/wood/large, +/area/virtual_domain) +"ka" = ( +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"ke" = ( +/obj/vehicle/ridden/atv{ + dir = 4 + }, +/turf/open/floor/iron/dark/herringbone, +/area/virtual_domain) +"ky" = ( +/obj/machinery/vending/snack, +/obj/effect/turf_decal/sand, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"kD" = ( +/obj/machinery/door/airlock/maintenance, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/turf/open/floor/plating, +/area/virtual_domain) +"kI" = ( +/obj/effect/turf_decal/sand, +/turf/closed/wall/mineral/wood, +/area/virtual_domain) +"kJ" = ( +/obj/machinery/shower/directional/south, +/obj/effect/turf_decal/siding/wood{ + dir = 6 + }, +/turf/open/floor/wood/parquet, +/area/virtual_domain/fullbright) +"kL" = ( +/obj/structure/billboard/space_cola, +/obj/effect/turf_decal/siding/dark_red, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"kN" = ( +/obj/effect/turf_decal/sand/plating, +/obj/effect/mob_spawn/ghost_role/human/virtual_domain/islander, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"lc" = ( +/obj/machinery/space_heater, +/obj/machinery/button/door/directional/north{ + id = "beach_room_2"; + normaldoorcontrol = 1; + specialfunctions = 4 + }, +/turf/open/floor/wood, +/area/virtual_domain) +"lh" = ( +/obj/effect/decal/cleanable/dirt, +/obj/item/storage/toolbox/mechanical/old, +/turf/open/floor/plating, +/area/virtual_domain) +"lk" = ( +/obj/effect/turf_decal/siding/dark_red/corner, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"lx" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/virtual_domain/fullbright) +"lz" = ( +/obj/effect/turf_decal/siding/blue/corner{ + dir = 1 + }, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"lA" = ( +/obj/machinery/shower/directional/west, +/obj/effect/turf_decal/siding/wood{ + dir = 9 + }, +/turf/open/floor/wood, +/area/virtual_domain/fullbright) +"lF" = ( +/obj/structure/table/reinforced, +/obj/item/storage/medkit/o2{ + pixel_y = 17; + pixel_x = -1 + }, +/obj/item/storage/medkit/brute{ + pixel_y = 23; + pixel_x = -1 + }, +/obj/item/food/lollipop{ + pixel_y = 8; + pixel_x = 12 + }, +/obj/item/food/lollipop{ + pixel_y = 5; + pixel_x = 12 + }, +/obj/item/reagent_containers/cup/bottle/multiver{ + pixel_x = -9; + pixel_y = 9 + }, +/turf/open/floor/iron/white/textured_large, +/area/virtual_domain) +"lG" = ( +/obj/item/toy/seashell{ + pixel_y = 11; + pixel_x = -7 + }, +/turf/open/misc/beach/coast, +/area/virtual_domain/fullbright) +"lI" = ( +/obj/structure/table/wood/poker, +/turf/open/floor/wood/large, +/area/virtual_domain) +"lJ" = ( +/obj/structure/table/wood, +/obj/item/reagent_containers/cup/beaker/large{ + pixel_y = 7 + }, +/turf/open/floor/wood/large, +/area/virtual_domain) +"lP" = ( +/obj/structure/chair, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"lS" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 6 + }, +/turf/open/water/beach, +/area/virtual_domain/fullbright) +"lU" = ( +/obj/machinery/door/airlock/security/glass{ + name = "Temporary Holding Cell" + }, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 8 + }, +/obj/effect/mapping_helpers/airlock/access/all/security/entrance, +/turf/open/floor/iron/dark/textured_large, +/area/virtual_domain) +"lW" = ( +/turf/open/floor/iron/dark/diagonal, +/area/virtual_domain) +"mi" = ( +/obj/structure/flora/tree/palm{ + pixel_y = 24 + }, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"mv" = ( +/obj/effect/turf_decal/siding/dark_red{ + dir = 1 + }, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"mx" = ( +/obj/machinery/door/airlock/wood{ + name = "Arcade" + }, +/turf/open/floor/wood/large, +/area/virtual_domain) +"mJ" = ( +/obj/structure/flora/tree/palm/style_2{ + pixel_y = 25 + }, +/obj/item/stack/sheet/mineral/sandstone/thirty{ + pixel_y = -10; + pixel_x = -5 + }, +/obj/item/stack/sheet/mineral/sandstone/thirty{ + pixel_y = -2; + pixel_x = 9 + }, +/obj/item/stack/sheet/mineral/sandstone/thirty{ + pixel_y = -4; + pixel_x = 1 + }, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"mL" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/machinery/door/airlock/wood{ + name = "Tropical Kitchen" + }, +/turf/open/floor/wood/large, +/area/virtual_domain) +"mP" = ( +/obj/structure/chair/plastic{ + dir = 8 + }, +/obj/item/reagent_containers/cup/soda_cans/starkist{ + pixel_y = 10; + pixel_x = -17 + }, +/obj/item/fishing_rod{ + pixel_x = -13; + pixel_y = 2 + }, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"mV" = ( +/obj/effect/mob_spawn/ghost_role/human/virtual_domain/islander, +/turf/open/floor/wood/large, +/area/virtual_domain/fullbright) +"mW" = ( +/obj/effect/turf_decal/siding/blue/corner{ + dir = 8 + }, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"nc" = ( +/turf/open/misc/beach/coast/corner{ + dir = 1 + }, +/area/virtual_domain/fullbright) +"nk" = ( +/obj/machinery/door/airlock/wood{ + name = "Balcony"; + id_tag = "beach_room_x" + }, +/obj/structure/railing/corner/end/flip{ + dir = 1 + }, +/turf/open/floor/wood, +/area/virtual_domain) +"nR" = ( +/obj/structure/flora/tree/palm{ + pixel_y = 6 + }, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"nX" = ( +/obj/structure/table/wood, +/obj/item/melee/baseball_bat{ + pixel_y = 3; + pixel_x = 6 + }, +/obj/item/clothing/glasses/blindfold/white{ + pixel_y = 7; + pixel_x = -5 + }, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"oa" = ( +/turf/open/misc/beach/coast{ + dir = 1 + }, +/area/virtual_domain/fullbright) +"ob" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"og" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 4 + }, +/turf/open/water/beach, +/area/virtual_domain) +"oq" = ( +/obj/structure/table/wood, +/obj/item/food/grown/watermelon{ + pixel_y = 13; + pixel_x = 6 + }, +/obj/item/food/grown/watermelon{ + pixel_y = 8; + pixel_x = -4 + }, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"os" = ( +/obj/structure/flora/tree/palm/style_2{ + pixel_y = 12; + pixel_x = -7 + }, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"ot" = ( +/turf/template_noop, +/area/template_noop) +"ow" = ( +/obj/structure/reagent_dispensers/watertank, +/turf/open/floor/wood/large, +/area/virtual_domain) +"oC" = ( +/obj/item/reagent_containers/cup/soda_cans/cola{ + pixel_x = -8; + pixel_y = 13 + }, +/turf/open/floor/carpet/blue, +/area/virtual_domain/fullbright) +"oE" = ( +/obj/structure/closet/secure_closet/personal/cabinet, +/obj/item/clothing/glasses/heat, +/obj/item/clothing/head/cowboy/brown, +/turf/open/floor/wood, +/area/virtual_domain) +"oJ" = ( +/obj/item/flashlight/flare/torch{ + pixel_x = -11; + pixel_y = -6 + }, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"oQ" = ( +/obj/structure/table/bronze, +/obj/item/pai_card{ + desc = "A real Nanotrasen success, these personal AIs provide all of the companionship of an AI without any law related red-tape."; + name = "\improper Nanotrasen-brand personal AI device exhibit"; + pixel_y = 2 + }, +/turf/open/floor/wood/large, +/area/virtual_domain) +"oX" = ( +/obj/effect/baseturf_helper/virtual_domain, +/turf/closed/indestructible/binary, +/area/virtual_domain/fullbright) +"oZ" = ( +/obj/effect/turf_decal/sand, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"pj" = ( +/obj/structure/table/bronze, +/obj/item/camera{ + pixel_y = 12; + pixel_x = -10 + }, +/obj/item/camera{ + pixel_y = 4; + pixel_x = 1 + }, +/obj/item/camera_film{ + pixel_y = -11; + pixel_x = -10 + }, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"pq" = ( +/obj/structure/closet/secure_closet/personal/cabinet, +/obj/item/clothing/suit/jacket/letterman_syndie, +/turf/open/floor/wood, +/area/virtual_domain) +"pv" = ( +/obj/machinery/light/directional/north, +/turf/open/floor/wood/large, +/area/virtual_domain) +"py" = ( +/turf/open/floor/iron/stairs, +/area/virtual_domain/fullbright) +"pz" = ( +/obj/structure/closet/secure_closet/personal/cabinet, +/obj/item/clothing/under/costume/lobster, +/obj/item/clothing/head/costume/lobsterhat, +/turf/open/floor/wood, +/area/virtual_domain) +"pC" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 1 + }, +/turf/open/water/beach, +/area/virtual_domain/fullbright) +"pE" = ( +/obj/machinery/door/airlock/wood/glass{ + name = "Rooms" + }, +/turf/open/floor/wood/large, +/area/virtual_domain) +"pJ" = ( +/obj/structure/closet/secure_closet/personal/cabinet, +/obj/item/clothing/suit/jacket/letterman_red, +/turf/open/floor/wood, +/area/virtual_domain) +"pV" = ( +/obj/item/stack/arcadeticket{ + pixel_y = 5; + pixel_x = 13 + }, +/turf/open/floor/eighties, +/area/virtual_domain) +"pX" = ( +/obj/structure/chair/office{ + dir = 8 + }, +/turf/open/floor/iron/dark/diagonal, +/area/virtual_domain) +"qa" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 4 + }, +/turf/open/water/beach, +/area/virtual_domain/fullbright) +"qb" = ( +/obj/machinery/button/door/directional/west{ + id = "beach_room_1"; + normaldoorcontrol = 1; + specialfunctions = 4 + }, +/turf/open/floor/wood, +/area/virtual_domain) +"qc" = ( +/obj/effect/turf_decal/sand, +/obj/machinery/vending/clothing, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"qB" = ( +/obj/item/toy/seashell{ + pixel_x = 5; + pixel_y = 4 + }, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"qH" = ( +/obj/structure/bed/medical/emergency, +/turf/open/floor/iron/white/textured_large, +/area/virtual_domain) +"qR" = ( +/obj/structure/chair/office{ + dir = 8 + }, +/obj/item/cigbutt{ + pixel_y = -6; + pixel_x = -12 + }, +/turf/open/floor/iron/dark/diagonal, +/area/virtual_domain) +"qZ" = ( +/obj/effect/turf_decal/siding/dark_red/corner{ + dir = 4 + }, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"ra" = ( +/obj/item/stack/sheet/mineral/sandstone{ + pixel_x = 11 + }, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"rj" = ( +/obj/machinery/grill, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"rl" = ( +/obj/structure/rack, +/obj/item/melee/skateboard/hoverboard{ + pixel_x = -7 + }, +/obj/item/melee/skateboard/hoverboard, +/obj/item/melee/skateboard/hoverboard{ + pixel_x = 7 + }, +/turf/open/misc/beach/coast/corner{ + dir = 4 + }, +/area/virtual_domain/fullbright) +"rn" = ( +/obj/machinery/computer/operating{ + dir = 8 + }, +/turf/open/floor/wood/large, +/area/virtual_domain/fullbright) +"ro" = ( +/obj/structure/closet/secure_closet/personal, +/turf/open/floor/wood/parquet, +/area/virtual_domain) +"rw" = ( +/obj/structure/table/bronze, +/obj/machinery/button/door/directional/south{ + id = "beach_room_4"; + normaldoorcontrol = 1; + specialfunctions = 4 + }, +/obj/item/storage/toolbox/fishing{ + pixel_y = 2 + }, +/turf/open/floor/wood, +/area/virtual_domain) +"rz" = ( +/obj/effect/turf_decal/siding/wood, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"rB" = ( +/obj/item/toy/seashell{ + pixel_x = -10; + pixel_y = -4 + }, +/obj/structure/fluff/beach_umbrella, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"rD" = ( +/obj/structure/flora/coconuts, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"rE" = ( +/obj/structure/table/bronze, +/obj/machinery/button/door/directional/south{ + id = "beach_room_11"; + normaldoorcontrol = 1; + specialfunctions = 4 + }, +/obj/item/storage/toolbox/fishing{ + pixel_y = 2 + }, +/turf/open/floor/wood, +/area/virtual_domain) +"rG" = ( +/obj/machinery/telecomms/allinone, +/obj/item/wirecutters{ + pixel_y = 9 + }, +/obj/machinery/light/directional/south, +/turf/open/floor/iron/dark/diagonal, +/area/virtual_domain) +"rI" = ( +/obj/machinery/door/airlock/wood{ + name = "Room 12"; + id_tag = "beach_room_12" + }, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/turf/open/floor/wood, +/area/virtual_domain) +"rK" = ( +/obj/machinery/vending/cigarette/beach, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"rQ" = ( +/obj/structure/flora/tree/palm{ + pixel_y = 7; + pixel_x = 9 + }, +/obj/effect/turf_decal/siding/wood, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"rR" = ( +/obj/structure/table/bronze, +/turf/open/floor/wood/large, +/area/virtual_domain) +"rW" = ( +/obj/structure/chair{ + dir = 8 + }, +/turf/open/floor/iron/dark/diagonal, +/area/virtual_domain) +"sa" = ( +/obj/effect/turf_decal/sand, +/obj/machinery/door/airlock/wood{ + name = "Bathroom"; + id_tag = "toilet3beach" + }, +/turf/open/floor/iron/white, +/area/virtual_domain) +"sh" = ( +/obj/structure/statue/sandstone/venus{ + pixel_y = 9; + dir = 1; + anchored = 1 + }, +/obj/structure/flora/bush/flowers_br/style_random, +/turf/open/floor/grass, +/area/virtual_domain) +"si" = ( +/obj/structure/table/wood, +/obj/item/reagent_containers/condiment/enzyme{ + pixel_x = 9; + pixel_y = 5 + }, +/obj/item/food/seaweedsheet{ + pixel_y = 6; + pixel_x = -4 + }, +/obj/item/food/seaweedsheet{ + pixel_x = -15; + pixel_y = 2 + }, +/turf/open/floor/wood/large, +/area/virtual_domain) +"sl" = ( +/obj/effect/turf_decal/sand/plating, +/obj/item/reagent_containers/cup/bucket/wooden{ + pixel_y = 17; + pixel_x = -6 + }, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"st" = ( +/obj/structure/table/bronze, +/obj/structure/sign/poster/random/directional/east, +/obj/machinery/button/door/directional/south{ + id = "beach_room_8"; + normaldoorcontrol = 1; + specialfunctions = 4 + }, +/obj/item/camera{ + pixel_y = 5 + }, +/turf/open/floor/wood, +/area/virtual_domain) +"sz" = ( +/obj/item/toy/seashell, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"sC" = ( +/obj/item/reagent_containers/cup/soda_cans/space_mountain_wind, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"sI" = ( +/obj/structure/table/bronze, +/obj/item/clothing/suit/costume/hawaiian{ + pixel_y = 2; + pixel_x = 5 + }, +/obj/item/clothing/suit/costume/hawaiian{ + pixel_y = 6; + pixel_x = -4 + }, +/turf/open/floor/wood/parquet, +/area/virtual_domain/fullbright) +"sO" = ( +/obj/structure/fluff/beach_umbrella/syndi, +/obj/item/reagent_containers/cup/soda_cans/cola{ + pixel_x = -8; + pixel_y = -6 + }, +/obj/item/reagent_containers/cup/soda_cans/thirteenloko{ + pixel_x = 15; + pixel_y = -11 + }, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"sR" = ( +/obj/structure/flora/tree/palm/style_2{ + pixel_y = 4 + }, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"sV" = ( +/obj/structure/table, +/obj/item/storage/belt/utility, +/obj/item/reagent_containers/cup/glass/drinkingglass/shotglass{ + pixel_y = 14; + pixel_x = -8 + }, +/turf/open/floor/wood/parquet, +/area/virtual_domain) +"sW" = ( +/obj/machinery/door/airlock/wood{ + name = "Room 5"; + id_tag = "beach_room_5" + }, +/obj/effect/turf_decal/siding/wood, +/turf/open/floor/wood, +/area/virtual_domain) +"ta" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 8 + }, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"tf" = ( +/obj/effect/decal/cleanable/dirt, +/obj/item/storage/box/lights/mixed{ + pixel_x = -4; + pixel_y = 18 + }, +/obj/item/storage/box/lights/mixed{ + pixel_x = 6; + pixel_y = 12 + }, +/obj/item/grenade/chem_grenade/cleaner{ + pixel_x = -7; + pixel_y = 12 + }, +/obj/structure/table, +/obj/item/reagent_containers/cup/bucket{ + pixel_x = 10; + pixel_y = 4 + }, +/turf/open/floor/wood/large, +/area/virtual_domain) +"th" = ( +/obj/structure/flora/tree/palm, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"tk" = ( +/turf/open/misc/beach/coast/corner{ + dir = 4 + }, +/area/virtual_domain/fullbright) +"tw" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/turf/open/water/beach, +/area/virtual_domain/fullbright) +"ty" = ( +/obj/item/trash/boritos/purple{ + pixel_y = -16; + pixel_x = -5 + }, +/turf/open/floor/eighties, +/area/virtual_domain) +"tI" = ( +/obj/structure/sign/departments/custodian/directional/north{ + pixel_x = -32 + }, +/turf/open/floor/wood/large, +/area/virtual_domain) +"tM" = ( +/obj/structure/table/wood, +/obj/item/book/manual/chef_recipes{ + pixel_x = 2; + pixel_y = 6 + }, +/turf/open/floor/wood/large, +/area/virtual_domain) +"tQ" = ( +/obj/effect/turf_decal/sand, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 4 + }, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"tW" = ( +/obj/structure/chair/plastic{ + dir = 4 + }, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"tX" = ( +/obj/structure/table/bronze, +/obj/item/reagent_containers/condiment/ketchup{ + pixel_y = 14; + pixel_x = 1 + }, +/obj/item/reagent_containers/condiment/mayonnaise{ + pixel_y = 8; + pixel_x = 8 + }, +/obj/machinery/light/directional/east, +/turf/open/floor/wood/large, +/area/virtual_domain) +"up" = ( +/obj/item/storage/box/syringes{ + pixel_y = 14; + pixel_x = -5 + }, +/obj/item/clothing/neck/stethoscope{ + pixel_y = 3; + pixel_x = 4 + }, +/obj/structure/table/glass, +/turf/open/floor/iron/white/textured_large, +/area/virtual_domain) +"ut" = ( +/obj/structure/window/reinforced/spawner/directional/east, +/obj/effect/turf_decal/siding/wood{ + dir = 6 + }, +/obj/effect/mob_spawn/ghost_role/human/virtual_domain/islander, +/turf/open/floor/wood, +/area/virtual_domain/fullbright) +"uu" = ( +/turf/open/floor/iron/freezer, +/area/virtual_domain) +"uz" = ( +/obj/effect/turf_decal/siding/dark_red/corner{ + dir = 8 + }, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"uC" = ( +/obj/structure/flora/tree/palm{ + pixel_y = 14 + }, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"uD" = ( +/obj/structure/table/wood, +/obj/item/food/seaweedsheet, +/obj/item/kitchen/rollingpin{ + pixel_x = -12; + pixel_y = 3 + }, +/turf/open/floor/wood/large, +/area/virtual_domain) +"uH" = ( +/obj/structure/bonfire, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"uI" = ( +/obj/structure/bed, +/turf/open/floor/iron/dark/textured_large, +/area/virtual_domain) +"uX" = ( +/obj/effect/turf_decal/siding/dark_red{ + dir = 4 + }, +/obj/item/trash/can{ + pixel_y = -9; + pixel_x = 10 + }, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"uY" = ( +/turf/open/floor/carpet, +/area/virtual_domain) +"vx" = ( +/obj/structure/table/glass, +/obj/item/storage/box/coffeepack{ + pixel_x = 2; + pixel_y = 4 + }, +/obj/item/storage/box/donkpockets{ + pixel_y = 10; + pixel_x = 11 + }, +/obj/item/storage/fancy/donut_box{ + pixel_y = 18; + pixel_x = -11 + }, +/obj/item/food/donut/berry{ + pixel_y = 5; + pixel_x = -6 + }, +/turf/open/floor/iron/dark/diagonal, +/area/virtual_domain) +"vF" = ( +/obj/structure/railing{ + dir = 9 + }, +/turf/open/floor/wood, +/area/virtual_domain/fullbright) +"vM" = ( +/obj/effect/turf_decal/sand, +/obj/effect/turf_decal/siding/wood{ + dir = 9 + }, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"vU" = ( +/obj/machinery/chem_master/condimaster{ + name = "CondiMaster Neo" + }, +/turf/open/floor/wood/large, +/area/virtual_domain) +"wb" = ( +/turf/open/misc/beach/coast{ + dir = 5 + }, +/area/virtual_domain/fullbright) +"wf" = ( +/obj/structure/flora/tree/palm{ + pixel_y = 10 + }, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"ww" = ( +/obj/structure/chair/stool/directional/south{ + dir = 8 + }, +/turf/open/floor/wood, +/area/virtual_domain/fullbright) +"wx" = ( +/obj/structure/closet/crate/bin, +/obj/structure/sign/clock/directional/north, +/turf/open/floor/wood, +/area/virtual_domain) +"wz" = ( +/obj/structure/rack, +/obj/item/mop, +/obj/item/extinguisher, +/turf/open/floor/wood/large, +/area/virtual_domain) +"wC" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/structure/reagent_dispensers/fueltank/large, +/turf/open/floor/wood/parquet, +/area/virtual_domain) +"wH" = ( +/obj/structure/table/wood/fancy, +/obj/effect/turf_decal/tile/dark_red/full, +/obj/item/reagent_containers/cup/soda_cans/cola{ + pixel_x = -5; + pixel_y = 14 + }, +/obj/item/reagent_containers/cup/soda_cans/cola{ + pixel_y = 13; + pixel_x = 6 + }, +/obj/item/reagent_containers/cup/soda_cans/cola{ + pixel_y = 10 + }, +/obj/item/reagent_containers/cup/soda_cans/cola{ + pixel_y = 6; + pixel_x = 11 + }, +/turf/open/floor/iron/smooth_large, +/area/virtual_domain/fullbright) +"wI" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 6 + }, +/obj/machinery/shower/directional/south, +/turf/open/floor/wood/parquet, +/area/virtual_domain/fullbright) +"wN" = ( +/obj/item/cigbutt{ + pixel_y = 21; + pixel_x = -13 + }, +/turf/open/floor/wood/large, +/area/virtual_domain/fullbright) +"wO" = ( +/obj/structure/dresser, +/obj/machinery/light/directional/north, +/turf/open/floor/wood, +/area/virtual_domain) +"wT" = ( +/obj/effect/spawner/random/entertainment/arcade{ + dir = 8 + }, +/turf/open/floor/eighties, +/area/virtual_domain) +"wZ" = ( +/obj/item/clothing/head/soft/green, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"xe" = ( +/obj/effect/turf_decal/sand, +/obj/machinery/door/airlock/wood{ + name = "Bathroom"; + id_tag = "toiletfarbeach" + }, +/turf/open/floor/iron/white, +/area/virtual_domain) +"xg" = ( +/turf/open/misc/beach/sand, +/area/virtual_domain) +"xj" = ( +/obj/item/toy/seashell{ + pixel_x = -8; + pixel_y = 9 + }, +/turf/open/misc/beach/coast/corner{ + dir = 1 + }, +/area/virtual_domain/fullbright) +"xk" = ( +/obj/structure/closet/crate/freezer, +/obj/item/food/meat/slab/rawcrab, +/obj/item/food/meat/slab/rawcrab, +/obj/item/food/meat/slab/rawcrab, +/obj/item/food/meat/slab/chicken, +/obj/item/food/meat/slab/chicken, +/obj/item/food/meat/slab/chicken, +/obj/item/food/meat/slab, +/obj/item/food/meat/slab, +/obj/item/food/meat/slab, +/obj/item/stack/sheet/mineral/coal/ten, +/obj/item/stack/sheet/mineral/coal/ten, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"xw" = ( +/obj/item/kirbyplants/organic/applebush{ + pixel_x = 7 + }, +/obj/item/kirbyplants/organic/plant17{ + pixel_y = 2; + pixel_x = -8 + }, +/turf/open/floor/wood/large, +/area/virtual_domain) +"xx" = ( +/obj/item/stack/arcadeticket{ + pixel_y = 6; + pixel_x = -7 + }, +/obj/effect/landmark/bitrunning/curiosity_spawn, +/turf/open/floor/eighties, +/area/virtual_domain) +"xJ" = ( +/turf/open/floor/wood/large, +/area/virtual_domain/fullbright) +"xO" = ( +/obj/structure/chair/stool/directional/south, +/obj/machinery/light/directional/north, +/turf/open/floor/iron/freezer, +/area/virtual_domain) +"xP" = ( +/obj/structure/chair/plastic{ + dir = 1 + }, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"xR" = ( +/obj/structure/railing{ + dir = 5 + }, +/obj/item/kirbyplants/organic/plant8{ + pixel_y = 3; + pixel_x = -2 + }, +/turf/open/floor/wood, +/area/virtual_domain/fullbright) +"xT" = ( +/obj/machinery/oven/range, +/turf/open/floor/wood/large, +/area/virtual_domain) +"yc" = ( +/obj/structure/closet/gmcloset, +/turf/open/floor/plastic, +/area/virtual_domain) +"yg" = ( +/obj/machinery/light/directional/east, +/turf/open/floor/wood/large, +/area/virtual_domain) +"yy" = ( +/obj/effect/mob_spawn/ghost_role/human/virtual_domain/islander, +/turf/open/floor/carpet/red, +/area/virtual_domain/fullbright) +"yz" = ( +/obj/structure/table/bronze, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"yB" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 9 + }, +/obj/effect/turf_decal/tile/dark/half{ + pixel_y = -1; + pixel_x = 5; + dir = 8 + }, +/turf/open/water/beach, +/area/virtual_domain/fullbright) +"yG" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/virtual_domain) +"yI" = ( +/obj/structure/dresser, +/obj/structure/sign/calendar/directional/north, +/turf/open/floor/wood, +/area/virtual_domain) +"yJ" = ( +/obj/structure/closet/crate/hydroponics, +/obj/item/popsicle_stick, +/obj/item/popsicle_stick, +/obj/item/popsicle_stick, +/obj/item/reagent_containers/condiment/flour, +/obj/item/reagent_containers/condiment/flour, +/obj/item/reagent_containers/condiment/rice, +/obj/item/reagent_containers/condiment/rice, +/obj/item/food/grown/banana/bunch, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"yN" = ( +/obj/structure/chair/stool/bamboo{ + dir = 1 + }, +/turf/open/floor/wood/large, +/area/virtual_domain/fullbright) +"yQ" = ( +/obj/structure/table/bronze, +/obj/structure/sign/poster/random/directional/east, +/obj/machinery/button/door/directional/south{ + id = "beach_room_10"; + normaldoorcontrol = 1; + specialfunctions = 4 + }, +/obj/item/table_clock{ + pixel_y = 4 + }, +/turf/open/floor/wood, +/area/virtual_domain) +"ze" = ( +/obj/effect/turf_decal/tile/dark_red/full, +/turf/open/floor/iron/smooth_large, +/area/virtual_domain/fullbright) +"zg" = ( +/obj/structure/table/bronze, +/obj/item/clothing/suit/costume/hawaiian{ + pixel_y = 6; + pixel_x = 4 + }, +/turf/open/floor/wood/parquet, +/area/virtual_domain/fullbright) +"zm" = ( +/obj/structure/table/reinforced, +/obj/item/stack/medical/mesh{ + pixel_y = 1; + pixel_x = 1 + }, +/obj/item/clothing/suit/toggle/labcoat{ + pixel_y = 9; + pixel_x = -8 + }, +/obj/item/storage/box/bodybags{ + pixel_y = 17; + pixel_x = 8 + }, +/turf/open/floor/iron/white/textured_large, +/area/virtual_domain) +"zn" = ( +/obj/structure/table/optable, +/turf/open/floor/wood/large, +/area/virtual_domain/fullbright) +"zp" = ( +/obj/structure/chair{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/virtual_domain) +"zq" = ( +/obj/item/stack/sheet/mineral/sandstone{ + pixel_x = -11; + pixel_y = -2 + }, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"zH" = ( +/obj/item/reagent_containers/cup/soda_cans/lemon_lime{ + pixel_x = -12; + pixel_y = 14 + }, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"zK" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 6 + }, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"zL" = ( +/obj/structure/table/bronze, +/obj/item/paper/paperslip{ + pixel_y = 6; + pixel_x = 10 + }, +/obj/item/pen/fourcolor{ + pixel_y = 7; + pixel_x = 1 + }, +/turf/open/floor/carpet, +/area/virtual_domain) +"zO" = ( +/obj/item/retractor{ + pixel_y = 8; + pixel_x = -2 + }, +/obj/item/cautery{ + pixel_y = 10 + }, +/obj/item/hemostat{ + pixel_y = -11 + }, +/obj/item/bonesetter{ + pixel_y = -12 + }, +/obj/structure/table/glass, +/turf/open/floor/wood/large, +/area/virtual_domain/fullbright) +"zS" = ( +/obj/item/kirbyplants/organic/plant8{ + pixel_y = 18; + pixel_x = -8 + }, +/obj/item/cigbutt{ + pixel_y = -4; + pixel_x = 2 + }, +/turf/open/floor/iron/dark/diagonal, +/area/virtual_domain) +"Ac" = ( +/obj/machinery/chem_dispenser/drinks/beer/fullupgrade{ + dir = 4 + }, +/obj/structure/table/wood, +/turf/open/floor/wood/large, +/area/virtual_domain) +"Ae" = ( +/obj/machinery/space_heater, +/obj/machinery/light/directional/north, +/turf/open/floor/wood, +/area/virtual_domain) +"Ag" = ( +/obj/effect/turf_decal/siding/wood, +/obj/item/kirbyplants/organic/plant8{ + pixel_y = 6 + }, +/obj/machinery/light/directional/east, +/turf/open/floor/eighties, +/area/virtual_domain) +"Ai" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/turf/open/floor/eighties, +/area/virtual_domain) +"Aj" = ( +/obj/structure/railing/corner/end{ + dir = 8 + }, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 1 + }, +/turf/open/water/beach, +/area/virtual_domain) +"Al" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 4 + }, +/turf/open/floor/wood/large, +/area/virtual_domain) +"Aq" = ( +/obj/structure/table/wood/poker, +/obj/item/storage/dice{ + pixel_y = 3; + pixel_x = 5 + }, +/turf/open/floor/wood/large, +/area/virtual_domain) +"Ay" = ( +/obj/structure/table/reinforced, +/obj/item/storage/medkit/brute{ + pixel_y = 9; + pixel_x = 2 + }, +/obj/item/storage/medkit/o2{ + pixel_y = 15; + pixel_x = 2 + }, +/obj/item/reagent_containers/cup/bottle/multiver{ + pixel_x = -9; + pixel_y = 3 + }, +/obj/item/reagent_containers/syringe{ + pixel_y = -4; + pixel_x = 3 + }, +/turf/open/floor/iron/white/textured_large, +/area/virtual_domain) +"AG" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/effect/turf_decal/tile/dark/half{ + pixel_x = 5; + dir = 8 + }, +/turf/open/water/beach, +/area/virtual_domain/fullbright) +"AK" = ( +/obj/effect/mob_spawn/ghost_role/human/virtual_domain/islander, +/turf/open/floor/plastic, +/area/virtual_domain) +"AX" = ( +/obj/vehicle/ridden/atv{ + dir = 4 + }, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"AZ" = ( +/obj/effect/spawner/structure/window, +/turf/open/floor/plating, +/area/virtual_domain/fullbright) +"Bc" = ( +/obj/item/reagent_containers/cup/bucket/wooden{ + pixel_y = -5; + pixel_x = -11 + }, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"Bf" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/turf/open/water/beach, +/area/virtual_domain/fullbright) +"Bk" = ( +/obj/machinery/door/airlock/wood{ + name = "Room 2"; + id_tag = "beach_room_2" + }, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/structure/sign/poster/random/directional/east, +/turf/open/floor/wood, +/area/virtual_domain) +"Bq" = ( +/turf/closed/wall/mineral/wood, +/area/virtual_domain) +"Bx" = ( +/obj/item/reagent_containers/cup/soda_cans/starkist{ + pixel_x = -12; + pixel_y = -6 + }, +/obj/structure/fluff/beach_umbrella/cap, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"Bz" = ( +/obj/structure/closet, +/obj/item/key/atv{ + pixel_x = -4 + }, +/obj/item/key/atv{ + pixel_x = 5; + pixel_y = 3 + }, +/obj/item/key/atv{ + pixel_x = 1; + pixel_y = 1 + }, +/obj/item/clothing/head/soft/black, +/obj/item/clothing/head/soft/black, +/obj/item/clothing/head/soft/black, +/obj/effect/decal/cleanable/oil, +/obj/item/clothing/glasses/sunglasses, +/obj/item/clothing/glasses/heat, +/turf/open/floor/iron/dark/herringbone, +/area/virtual_domain) +"BB" = ( +/obj/item/toy/plush/moth{ + pixel_y = 5 + }, +/turf/open/floor/carpet/red, +/area/virtual_domain/fullbright) +"BD" = ( +/obj/structure/flora/tree/palm{ + pixel_y = 19; + pixel_x = 8 + }, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"BI" = ( +/obj/structure/flora/tree/palm{ + pixel_y = 5 + }, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"BM" = ( +/obj/structure/closet/crate/bin, +/obj/item/flashlight/glowstick/yellow, +/obj/item/trash/candy, +/turf/open/floor/eighties, +/area/virtual_domain) +"BU" = ( +/obj/item/storage/toolbox/fishing{ + pixel_x = 10 + }, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"BV" = ( +/obj/structure/sign/directions/dorms/directional/north{ + pixel_y = 35 + }, +/obj/structure/sign/directions/medical/directional/north{ + pixel_y = 29 + }, +/obj/machinery/computer/slot_machine, +/turf/open/floor/wood/large, +/area/virtual_domain) +"BW" = ( +/obj/structure/dresser, +/obj/structure/sign/clock/directional/east, +/turf/open/floor/wood, +/area/virtual_domain) +"Co" = ( +/obj/machinery/processor, +/turf/open/floor/wood/large, +/area/virtual_domain) +"Cw" = ( +/obj/structure/sign/poster/official/fruit_bowl/directional/north, +/turf/open/floor/carpet, +/area/virtual_domain) +"CA" = ( +/obj/item/reagent_containers/cup/soda_cans/sol_dry{ + pixel_y = 18; + pixel_x = 9 + }, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"CH" = ( +/obj/machinery/light/directional/north, +/turf/open/floor/wood, +/area/virtual_domain) +"CP" = ( +/obj/structure/table/reinforced, +/obj/item/toy/plush/slimeplushie{ + pixel_y = 8; + pixel_x = 4 + }, +/turf/open/floor/iron/white/textured_large, +/area/virtual_domain) +"CQ" = ( +/obj/structure/closet/crate/trashcart/laundry, +/turf/open/floor/plastic, +/area/virtual_domain) +"CR" = ( +/obj/structure/fluff/beach_umbrella/syndi, +/turf/open/misc/beach/coast/corner{ + dir = 8 + }, +/area/virtual_domain/fullbright) +"CS" = ( +/obj/machinery/door/airlock/wood{ + name = "Room 1"; + id_tag = "beach_room_1" + }, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/turf/open/floor/wood, +/area/virtual_domain) +"CU" = ( +/obj/structure/closet/secure_closet/personal/cabinet, +/obj/machinery/button/door/directional/west{ + id = "beach_room_6"; + normaldoorcontrol = 1; + specialfunctions = 4 + }, +/obj/item/clothing/suit/jacket/leather/biker, +/turf/open/floor/wood, +/area/virtual_domain) +"CV" = ( +/obj/item/toy/seashell{ + pixel_x = 8; + pixel_y = 14 + }, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"Dg" = ( +/obj/item/toy/beach_ball, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"Do" = ( +/obj/effect/landmark/bitrunning/curiosity_spawn, +/turf/open/floor/wood/large, +/area/virtual_domain) +"Dq" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/structure/railing{ + dir = 1 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/turf/open/water/beach, +/area/virtual_domain) +"Dt" = ( +/obj/machinery/icecream_vat, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"Dx" = ( +/obj/structure/chair/stool/bar/directional/east, +/obj/machinery/light/directional/west, +/turf/open/floor/wood/large, +/area/virtual_domain) +"DA" = ( +/obj/item/cigbutt{ + pixel_y = -7; + pixel_x = 14 + }, +/turf/open/floor/iron/dark/diagonal, +/area/virtual_domain) +"DG" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/plating, +/area/virtual_domain) +"DL" = ( +/obj/structure/table, +/obj/item/storage/toolbox/mechanical{ + pixel_y = 12; + pixel_x = 3 + }, +/obj/item/stock_parts/power_store/cell/emproof{ + pixel_x = -4; + pixel_y = 6 + }, +/obj/item/clothing/head/soft/mime{ + pixel_y = 3; + pixel_x = 5 + }, +/turf/open/floor/wood/parquet, +/area/virtual_domain) +"DP" = ( +/obj/effect/spawner/structure/window, +/turf/open/floor/plating, +/area/virtual_domain) +"DR" = ( +/turf/open/floor/carpet/blue, +/area/virtual_domain/fullbright) +"DS" = ( +/obj/machinery/door/airlock/wood{ + name = "Changing Room" + }, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/turf/open/floor/iron/freezer, +/area/virtual_domain) +"DT" = ( +/obj/structure/table/wood, +/obj/item/knife/kitchen{ + pixel_y = 12; + pixel_x = -13 + }, +/obj/item/clothing/head/utility/chefhat, +/turf/open/floor/wood/large, +/area/virtual_domain) +"DU" = ( +/obj/machinery/door/airlock/wood{ + name = "Room 10"; + id_tag = "beach_room_10" + }, +/obj/effect/turf_decal/siding/wood, +/turf/open/floor/wood, +/area/virtual_domain) +"Eb" = ( +/obj/item/reagent_containers/cup/soda_cans/cola{ + pixel_x = -8; + pixel_y = -4 + }, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"Ej" = ( +/obj/structure/flora/tree/palm{ + pixel_y = 19; + pixel_x = 7 + }, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"Er" = ( +/obj/effect/turf_decal/sand, +/obj/structure/bedsheetbin{ + pixel_y = 3; + pixel_x = -1 + }, +/obj/structure/table, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"Et" = ( +/obj/item/toy/seashell, +/turf/open/misc/beach/coast/corner{ + dir = 8 + }, +/area/virtual_domain/fullbright) +"EA" = ( +/obj/effect/turf_decal/sand, +/obj/machinery/button/door/directional/east{ + id = "toiletfarbeach"; + name = "restroom lock"; + normaldoorcontrol = 1; + specialfunctions = 4 + }, +/obj/structure/toilet{ + pixel_y = 8 + }, +/obj/structure/sink/directional/west, +/obj/machinery/light/small/directional/west, +/obj/effect/mob_spawn/ghost_role/human/virtual_domain/islander, +/obj/effect/baseturf_helper/virtual_domain, +/turf/open/floor/iron/white, +/area/virtual_domain) +"EI" = ( +/turf/open/misc/beach/coast{ + dir = 8 + }, +/area/virtual_domain/fullbright) +"EP" = ( +/obj/machinery/door/airlock/wood{ + name = "Room 3"; + id_tag = "beach_room_3" + }, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/turf/open/floor/wood, +/area/virtual_domain) +"EQ" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/turf/open/water/beach, +/area/virtual_domain) +"ET" = ( +/obj/item/reagent_containers/cup/glass/bottle/beer/light{ + pixel_x = -14; + pixel_y = 15 + }, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"EY" = ( +/obj/structure/statue/sandstone/venus{ + dir = 4; + pixel_y = 9; + anchored = 1 + }, +/obj/structure/flora/bush/flowers_br/style_random, +/turf/open/floor/grass, +/area/virtual_domain) +"Fk" = ( +/obj/effect/decal/cleanable/dirt, +/obj/item/storage/box/mousetraps{ + pixel_x = -5; + pixel_y = 14 + }, +/obj/structure/table, +/obj/item/storage/box/mousetraps{ + pixel_x = 12; + pixel_y = 15 + }, +/obj/item/grenade/chem_grenade/cleaner{ + pixel_x = -7; + pixel_y = 6 + }, +/obj/item/grenade/chem_grenade/cleaner{ + pixel_x = -1; + pixel_y = 3 + }, +/turf/open/floor/wood/large, +/area/virtual_domain) +"Fp" = ( +/obj/structure/closet/crate/bin, +/turf/open/floor/wood/large, +/area/virtual_domain) +"Fx" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 6 + }, +/turf/open/floor/wood/large, +/area/virtual_domain/fullbright) +"FB" = ( +/obj/machinery/medical_kiosk, +/turf/open/floor/iron/white/textured_large, +/area/virtual_domain) +"FE" = ( +/obj/machinery/washing_machine, +/obj/machinery/light/directional/north, +/turf/open/floor/plastic, +/area/virtual_domain) +"FO" = ( +/obj/structure/chair/plastic, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"FX" = ( +/turf/open/floor/carpet/green, +/area/virtual_domain/fullbright) +"Ga" = ( +/obj/item/stack/arcadeticket{ + pixel_y = -1; + pixel_x = -6 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/turf/open/floor/wood/large, +/area/virtual_domain) +"Gm" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/turf/closed/wall/mineral/wood, +/area/virtual_domain) +"Go" = ( +/obj/structure/closet/secure_closet/personal/cabinet, +/obj/item/clothing/suit/jacket/letterman_nanotrasen, +/obj/item/clothing/glasses/salesman, +/turf/open/floor/wood, +/area/virtual_domain) +"Gp" = ( +/obj/structure/no_effect_signpost{ + pixel_y = 6; + desc = "Northwest: Hotel. South: Seaside Bar. East: Dressing Rooms." + }, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"Gq" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 1 + }, +/turf/closed/wall/mineral/wood, +/area/virtual_domain) +"Gw" = ( +/turf/open/indestructible/binary, +/area/virtual_domain/fullbright) +"Gx" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/spawner/random/structure/closet_empty/crate, +/obj/effect/spawner/random/maintenance/two, +/obj/item/storage/toolbox/fishing{ + pixel_y = 2 + }, +/turf/open/floor/plating, +/area/virtual_domain) +"GD" = ( +/obj/effect/landmark/bitrunning/permanent_exit, +/turf/open/floor/bitrunning_transport, +/area/virtual_domain/protected_space/fullbright) +"GI" = ( +/turf/open/floor/iron/dark/textured_large, +/area/virtual_domain) +"GK" = ( +/obj/effect/mob_spawn/ghost_role/human/virtual_domain/islander, +/turf/open/floor/wood/large, +/area/virtual_domain) +"GQ" = ( +/obj/item/toy/seashell{ + pixel_y = 3; + pixel_x = -6 + }, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"GX" = ( +/obj/machinery/light/directional/west, +/turf/open/floor/carpet, +/area/virtual_domain) +"GY" = ( +/obj/effect/turf_decal/siding/wood, +/obj/machinery/shower/directional/south, +/obj/structure/sink/directional/east, +/turf/open/floor/wood/parquet, +/area/virtual_domain/fullbright) +"Hd" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/structure/railing/corner/end{ + dir = 8 + }, +/turf/open/water/beach, +/area/virtual_domain) +"Ho" = ( +/obj/structure/table/wood, +/obj/item/modular_computer/laptop{ + pixel_y = 5 + }, +/obj/item/multitool{ + pixel_x = -8; + pixel_y = -8 + }, +/turf/open/floor/iron/dark/diagonal, +/area/virtual_domain) +"Hp" = ( +/obj/structure/table/wood, +/obj/item/clothing/suit/apron/chef{ + pixel_y = 5; + pixel_x = 2 + }, +/turf/open/floor/wood/large, +/area/virtual_domain) +"HE" = ( +/obj/machinery/griddle, +/turf/open/floor/wood/large, +/area/virtual_domain) +"HH" = ( +/obj/effect/turf_decal/siding/wood/corner, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 4 + }, +/turf/open/water/beach, +/area/virtual_domain/fullbright) +"HI" = ( +/obj/structure/statue/sandstone/venus{ + dir = 4; + pixel_y = 9 + }, +/turf/open/floor/wood/large, +/area/virtual_domain) +"HK" = ( +/obj/structure/closet/crate/bin, +/obj/effect/spawner/random/trash/cigbutt, +/obj/effect/spawner/random/trash/food_packaging, +/obj/machinery/light/directional/north, +/turf/open/floor/iron/dark/diagonal, +/area/virtual_domain) +"HO" = ( +/obj/machinery/door/airlock/wood{ + name = "Room 9"; + id_tag = "beach_room_9" + }, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/turf/open/floor/wood, +/area/virtual_domain) +"HP" = ( +/turf/open/water/beach, +/area/virtual_domain) +"HR" = ( +/obj/structure/sign/poster/official/tactical_game_cards/directional/west, +/obj/effect/mob_spawn/ghost_role/human/virtual_domain/islander, +/turf/open/floor/eighties, +/area/virtual_domain) +"HT" = ( +/obj/structure/bed/pod{ + desc = "An old medical bed, just waiting for replacement with something up to date."; + dir = 4; + name = "medical bed" + }, +/obj/machinery/defibrillator_mount/directional/east, +/obj/machinery/iv_drip{ + pixel_y = 21; + pixel_x = -4 + }, +/turf/open/floor/iron/white/textured_large, +/area/virtual_domain) +"HV" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/virtual_domain) +"Ib" = ( +/obj/structure/tank_holder/extinguisher{ + pixel_y = 11 + }, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"If" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 10 + }, +/turf/open/water/beach, +/area/virtual_domain/fullbright) +"In" = ( +/obj/item/kirbyplants/organic/plant8{ + pixel_y = 4; + pixel_x = 8 + }, +/turf/open/floor/iron/dark/diagonal, +/area/virtual_domain) +"It" = ( +/obj/effect/turf_decal/siding/dark_red{ + dir = 8 + }, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"Iw" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/machinery/door/poddoor/shutters{ + id = "BeachBoats" + }, +/turf/open/water/beach, +/area/virtual_domain/fullbright) +"IA" = ( +/obj/machinery/shower/directional/west, +/obj/effect/turf_decal/siding/wood{ + dir = 10 + }, +/turf/open/floor/wood, +/area/virtual_domain/fullbright) +"IF" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/turf/open/water/beach, +/area/virtual_domain/fullbright) +"IG" = ( +/obj/machinery/door/poddoor/shutters{ + dir = 4; + id = "BeachGarage" + }, +/turf/open/floor/plating, +/area/virtual_domain/fullbright) +"II" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/turf/open/floor/wood/large, +/area/virtual_domain) +"IJ" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/item/blood_filter{ + pixel_y = 8; + pixel_x = -6 + }, +/obj/item/surgical_drapes{ + pixel_x = -1; + pixel_y = 2 + }, +/obj/item/surgical_drapes{ + pixel_x = 13; + pixel_y = 2 + }, +/obj/structure/table/glass, +/turf/open/floor/wood/large, +/area/virtual_domain/fullbright) +"IL" = ( +/obj/effect/turf_decal/siding/dark_red, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"IS" = ( +/obj/effect/turf_decal/siding/wood/corner, +/turf/open/floor/wood/large, +/area/virtual_domain) +"IX" = ( +/obj/item/kirbyplants/organic/plant8{ + pixel_y = 18; + pixel_x = -8 + }, +/turf/open/floor/wood/large, +/area/virtual_domain) +"Jb" = ( +/obj/structure/table/glass, +/obj/machinery/coffeemaker/impressa{ + pixel_y = 13; + pixel_x = -1 + }, +/obj/item/reagent_containers/cup/glass/mug{ + pixel_x = -6; + pixel_y = 2 + }, +/obj/item/reagent_containers/cup/glass/mug{ + pixel_x = 11; + pixel_y = -1 + }, +/turf/open/floor/iron/dark/diagonal, +/area/virtual_domain) +"Jc" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 8 + }, +/turf/open/water/beach, +/area/virtual_domain/fullbright) +"Jd" = ( +/obj/effect/turf_decal/siding/wood, +/turf/open/water/beach, +/area/virtual_domain/fullbright) +"Je" = ( +/obj/structure/table/bronze, +/obj/item/table_clock{ + pixel_y = 13 + }, +/obj/structure/sign/poster/random/directional/east, +/turf/open/floor/wood, +/area/virtual_domain) +"Jp" = ( +/obj/effect/turf_decal/siding/wood, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/turf/open/water/beach, +/area/virtual_domain/fullbright) +"Jv" = ( +/obj/item/reagent_containers/cup/soda_cans/starkist{ + pixel_x = -6 + }, +/obj/effect/mob_spawn/ghost_role/human/virtual_domain/islander, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"Jw" = ( +/obj/item/toy/seashell{ + pixel_x = 12; + pixel_y = 5 + }, +/turf/open/misc/beach/coast{ + dir = 4 + }, +/area/virtual_domain/fullbright) +"JF" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 10 + }, +/turf/open/floor/wood/large, +/area/virtual_domain/fullbright) +"JG" = ( +/obj/machinery/light/directional/west, +/turf/open/floor/wood/large, +/area/virtual_domain) +"JH" = ( +/obj/structure/marker_beacon/burgundy, +/turf/open/water/beach, +/area/virtual_domain/fullbright) +"JJ" = ( +/obj/machinery/door/airlock/wood{ + name = "Room 8"; + id_tag = "beach_room_8" + }, +/turf/open/floor/wood, +/area/virtual_domain) +"JN" = ( +/obj/effect/turf_decal/sand, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"JU" = ( +/obj/item/instrument/guitar{ + pixel_y = 4; + pixel_x = -1 + }, +/turf/open/misc/beach/coast, +/area/virtual_domain/fullbright) +"Ka" = ( +/obj/structure/closet/secure_closet/personal/cabinet, +/obj/machinery/button/door/directional/west{ + id = "beach_room_7"; + normaldoorcontrol = 1; + specialfunctions = 4 + }, +/obj/item/clothing/suit/apron/overalls, +/turf/open/floor/wood, +/area/virtual_domain) +"Ko" = ( +/obj/item/toy/beach_ball, +/turf/open/misc/beach/coast/corner{ + dir = 4 + }, +/area/virtual_domain/fullbright) +"Ks" = ( +/obj/structure/table/glass, +/obj/machinery/microwave{ + pixel_y = 15 + }, +/obj/item/cigbutt{ + pixel_y = 2; + pixel_x = -12 + }, +/turf/open/floor/iron/dark/diagonal, +/area/virtual_domain) +"KH" = ( +/obj/structure/closet/athletic_mixed, +/turf/open/floor/iron/freezer, +/area/virtual_domain) +"KI" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/spawner/random/structure/crate, +/turf/open/floor/plating, +/area/virtual_domain) +"KJ" = ( +/obj/machinery/vending/coffee, +/turf/open/floor/wood/large, +/area/virtual_domain) +"KL" = ( +/obj/structure/closet/secure_closet/freezer/empty, +/obj/item/food/popsicle/creamsicle_berry, +/obj/item/food/popsicle/creamsicle_berry, +/obj/item/food/popsicle/creamsicle_orange, +/obj/item/food/popsicle/creamsicle_orange, +/obj/item/food/popsicle/jumbo, +/obj/item/food/popsicle/pineapple_pop, +/obj/item/food/popsicle/pineapple_pop, +/obj/item/food/fishmeat, +/obj/item/food/fishmeat, +/obj/item/food/fishmeat, +/obj/item/food/fishmeat, +/obj/item/food/fishmeat, +/turf/open/floor/wood/large, +/area/virtual_domain) +"KP" = ( +/obj/item/clothing/head/soft/black{ + pixel_x = -1; + pixel_y = -3 + }, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"KS" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/structure/railing{ + dir = 1 + }, +/turf/open/floor/wood/parquet, +/area/virtual_domain) +"KT" = ( +/obj/effect/mob_spawn/ghost_role/human/virtual_domain/islander, +/turf/open/floor/iron/dark/diagonal, +/area/virtual_domain) +"KZ" = ( +/obj/structure/railing{ + dir = 1 + }, +/obj/effect/landmark/bitrunning/curiosity_spawn, +/turf/open/floor/wood, +/area/virtual_domain/fullbright) +"La" = ( +/obj/machinery/light/directional/south, +/turf/open/floor/wood, +/area/virtual_domain) +"Ld" = ( +/obj/structure/table/wood, +/obj/item/cigarette/cigar{ + pixel_y = 16; + pixel_x = -2 + }, +/obj/item/reagent_containers/cup/glass/coffee{ + pixel_x = 8; + pixel_y = 9 + }, +/obj/machinery/cell_charger, +/turf/open/floor/iron/dark/diagonal, +/area/virtual_domain) +"Lm" = ( +/obj/machinery/door/airlock/wood{ + name = "Balcony"; + id_tag = "beach_room_x" + }, +/turf/open/floor/wood, +/area/virtual_domain) +"LD" = ( +/obj/effect/turf_decal/sand, +/obj/machinery/door/airlock/wood{ + name = "Bathroom"; + id_tag = "toilet1beach" + }, +/turf/open/floor/iron/white, +/area/virtual_domain) +"LN" = ( +/obj/effect/mob_spawn/ghost_role/human/virtual_domain/islander, +/turf/open/floor/carpet/blue, +/area/virtual_domain/fullbright) +"LR" = ( +/obj/effect/turf_decal/siding/wood/corner, +/turf/open/water/beach, +/area/virtual_domain/fullbright) +"LV" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 8 + }, +/turf/open/floor/wood/large, +/area/virtual_domain) +"LY" = ( +/obj/effect/turf_decal/siding/blue{ + dir = 4 + }, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"Ma" = ( +/obj/machinery/vending/games, +/turf/open/floor/eighties, +/area/virtual_domain) +"Mb" = ( +/turf/open/floor/wood/large, +/area/virtual_domain) +"Md" = ( +/obj/structure/fluff/beach_umbrella/syndi, +/obj/item/reagent_containers/cup/soda_cans/wellcheers{ + pixel_y = -10; + pixel_x = -6 + }, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"Mj" = ( +/obj/structure/table, +/obj/item/weldingtool{ + pixel_y = -7; + pixel_x = 4 + }, +/obj/item/trash/can{ + pixel_y = 10; + pixel_x = -5 + }, +/turf/open/floor/wood/parquet, +/area/virtual_domain) +"Ml" = ( +/obj/machinery/washing_machine, +/turf/open/floor/plastic, +/area/virtual_domain) +"Mo" = ( +/obj/machinery/door/airlock/wood{ + name = "Docks" + }, +/turf/open/floor/wood/parquet, +/area/virtual_domain) +"Mr" = ( +/obj/structure/table/wood, +/obj/item/stack/arcadeticket{ + pixel_y = 6; + pixel_x = -7 + }, +/obj/item/pen{ + pixel_y = 5; + pixel_x = 8 + }, +/turf/open/floor/wood/large, +/area/virtual_domain) +"Mx" = ( +/obj/structure/table/reinforced, +/obj/machinery/cell_charger{ + pixel_y = 13; + pixel_x = 21 + }, +/obj/item/clothing/glasses/hud/health{ + pixel_y = 1; + pixel_x = 18 + }, +/obj/item/stack/medical/gauze{ + pixel_x = -15; + pixel_y = 10 + }, +/obj/item/storage/belt/medical{ + pixel_y = 3; + pixel_x = -3 + }, +/obj/machinery/light/directional/north, +/turf/open/floor/iron/white/textured_large, +/area/virtual_domain) +"MA" = ( +/obj/effect/turf_decal/siding/dark_red/corner{ + dir = 1 + }, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"MH" = ( +/obj/item/toy/seashell{ + pixel_x = -7; + pixel_y = 5 + }, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"MO" = ( +/obj/structure/table/wood, +/obj/machinery/recharger, +/obj/item/reagent_containers/cup/glass/mug{ + pixel_x = -12; + pixel_y = 9 + }, +/obj/effect/spawner/random/bureaucracy/stamp{ + pixel_y = 14; + pixel_x = 8 + }, +/turf/open/floor/iron/dark/diagonal, +/area/virtual_domain) +"MR" = ( +/obj/effect/spawner/random/entertainment/arcade{ + dir = 4 + }, +/turf/open/floor/wood/large, +/area/virtual_domain) +"MT" = ( +/turf/open/misc/beach/coast/corner{ + dir = 8 + }, +/area/virtual_domain/fullbright) +"MV" = ( +/obj/item/radio/off{ + pixel_y = 16; + pixel_x = -5 + }, +/obj/item/storage/box/monkeycubes{ + pixel_y = 10; + pixel_x = 4 + }, +/obj/item/storage/toolbox/mechanical{ + pixel_y = 2 + }, +/obj/structure/table/glass, +/turf/open/floor/iron/dark/diagonal, +/area/virtual_domain) +"MX" = ( +/obj/effect/turf_decal/stripes/red/box, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"MZ" = ( +/obj/machinery/button/door/directional/north{ + id = "beach_room_12"; + normaldoorcontrol = 1; + specialfunctions = 4 + }, +/turf/open/floor/wood, +/area/virtual_domain) +"Nc" = ( +/obj/item/tank/internals/anesthetic{ + pixel_y = 4 + }, +/obj/item/stack/medical/bone_gel{ + pixel_y = 16; + pixel_x = -7 + }, +/obj/item/clothing/mask/breath/medical{ + pixel_y = 3; + pixel_x = 3 + }, +/obj/structure/table/bronze, +/turf/open/floor/wood/large, +/area/virtual_domain/fullbright) +"Ne" = ( +/obj/machinery/light/directional/east, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/turf/open/floor/wood/large, +/area/virtual_domain) +"Nj" = ( +/obj/structure/fluff/beach_umbrella/cap, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"Np" = ( +/obj/structure/chair/stool/bamboo{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wood/corner, +/turf/open/floor/wood/large, +/area/virtual_domain/fullbright) +"Nt" = ( +/obj/effect/turf_decal/siding/wood/corner, +/turf/open/floor/eighties, +/area/virtual_domain) +"NB" = ( +/obj/item/storage/box/fishing_hooks{ + pixel_y = 14 + }, +/obj/item/storage/box/fishing_lines{ + pixel_y = 12; + pixel_x = 18 + }, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"NC" = ( +/mob/living/basic/crab, +/obj/effect/turf_decal/stripes/red/line{ + dir = 8 + }, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"NH" = ( +/obj/structure/closet/crate/bin, +/obj/item/trash/candy, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"NT" = ( +/obj/item/toy/seashell, +/turf/open/misc/beach/coast, +/area/virtual_domain/fullbright) +"NU" = ( +/obj/machinery/vending/medical{ + req_access = "201" + }, +/turf/open/floor/iron/white/textured_large, +/area/virtual_domain) +"NZ" = ( +/obj/effect/turf_decal/sand, +/turf/closed/wall/mineral/wood, +/area/virtual_domain/fullbright) +"Of" = ( +/obj/item/reagent_containers/cup/soda_cans/space_mountain_wind{ + pixel_x = -17; + pixel_y = 17 + }, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"Og" = ( +/obj/structure/table/bronze, +/obj/item/reagent_containers/condiment/peppermill{ + pixel_y = 12 + }, +/obj/item/reagent_containers/condiment/saltshaker{ + pixel_x = -5; + pixel_y = 9 + }, +/turf/open/floor/wood/large, +/area/virtual_domain) +"Ol" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/power/port_gen/pacman, +/turf/open/floor/plating, +/area/virtual_domain) +"Om" = ( +/obj/structure/bed/double, +/obj/item/bedsheet/hop/double{ + desc = "A blue bedsheet. Likely from the beach hotel."; + name = "blue bedsheet" + }, +/turf/open/floor/carpet/cyan, +/area/virtual_domain) +"Or" = ( +/obj/effect/turf_decal/siding/dark_red{ + dir = 4 + }, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"Oy" = ( +/mob/living/basic/crab, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"OA" = ( +/turf/open/floor/wood, +/area/virtual_domain/fullbright) +"OK" = ( +/obj/item/storage/box/gloves{ + pixel_y = 14; + pixel_x = 7 + }, +/turf/open/floor/iron/white/textured_large, +/area/virtual_domain) +"OM" = ( +/turf/open/floor/iron/stairs/old, +/area/virtual_domain/fullbright) +"OO" = ( +/obj/structure/flora/tree/palm{ + pixel_y = 16; + pixel_x = 12 + }, +/obj/structure/flora/coconuts, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"OV" = ( +/mob/living/basic/crab/kreb, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"Po" = ( +/obj/structure/sink/kitchen/directional/east, +/turf/open/floor/plastic, +/area/virtual_domain) +"Pq" = ( +/obj/structure/table/bronze, +/obj/item/reagent_containers/cup/rag{ + pixel_y = 5 + }, +/obj/item/reagent_containers/condiment/coconut_milk{ + pixel_y = 14; + pixel_x = 5 + }, +/obj/machinery/light/directional/east, +/turf/open/floor/wood/large, +/area/virtual_domain) +"PD" = ( +/obj/item/kirbyplants/organic/plant8{ + pixel_y = 9; + pixel_x = 6 + }, +/obj/structure/railing{ + dir = 10 + }, +/turf/open/floor/wood, +/area/virtual_domain/fullbright) +"PE" = ( +/obj/machinery/space_heater, +/turf/open/floor/wood, +/area/virtual_domain) +"PG" = ( +/obj/structure/table/bronze, +/obj/item/food/grown/banana/bunch{ + pixel_y = 10; + offset_at_init = 0 + }, +/turf/open/floor/wood/large, +/area/virtual_domain) +"PH" = ( +/obj/item/toy/seashell{ + pixel_x = 12; + pixel_y = 5 + }, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"PJ" = ( +/obj/item/cigbutt{ + pixel_y = -11; + pixel_x = -15 + }, +/turf/open/floor/iron/dark/diagonal, +/area/virtual_domain) +"PR" = ( +/obj/effect/turf_decal/siding/blue{ + dir = 1 + }, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"PZ" = ( +/obj/structure/table/bronze, +/obj/item/camera{ + pixel_y = 12; + pixel_x = 6 + }, +/obj/item/camera_film{ + pixel_y = 4; + pixel_x = -2 + }, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"Qc" = ( +/obj/item/kirbyplants/organic/plant8{ + pixel_y = 5 + }, +/turf/open/floor/wood/large, +/area/virtual_domain) +"Qj" = ( +/obj/effect/mob_spawn/ghost_role/human/virtual_domain/islander, +/turf/open/floor/iron/freezer, +/area/virtual_domain) +"Qk" = ( +/obj/effect/turf_decal/sand, +/obj/machinery/button/door/directional/east{ + id = "toilet2beach"; + name = "restroom lock"; + normaldoorcontrol = 1; + specialfunctions = 4 + }, +/obj/structure/toilet{ + pixel_y = 8 + }, +/obj/structure/sink/directional/west, +/obj/machinery/light/small/directional/west, +/obj/effect/mob_spawn/ghost_role/human/virtual_domain/islander, +/turf/open/floor/iron/white, +/area/virtual_domain) +"Qm" = ( +/obj/structure/sink/kitchen/directional/south, +/turf/open/floor/wood/large, +/area/virtual_domain) +"Qq" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 1 + }, +/turf/open/floor/wood/large, +/area/virtual_domain) +"Qu" = ( +/obj/structure/tank_holder/extinguisher, +/turf/open/floor/iron/dark/diagonal, +/area/virtual_domain) +"Qv" = ( +/obj/machinery/door/airlock/command/glass{ + name = "Admin" + }, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/effect/mapping_helpers/airlock_note_placer{ + note_info = "Dear IT: Please fix the fax machine" + }, +/turf/open/floor/iron/dark/diagonal, +/area/virtual_domain) +"Qx" = ( +/obj/effect/spawner/random/entertainment/arcade{ + dir = 4 + }, +/turf/open/floor/eighties, +/area/virtual_domain) +"QG" = ( +/obj/structure/railing/corner/end/flip{ + dir = 4 + }, +/obj/item/wrench{ + pixel_y = -1; + pixel_x = 6 + }, +/obj/item/storage/toolbox/fishing{ + pixel_y = -8; + pixel_x = -3 + }, +/obj/structure/railing/corner/end/flip{ + dir = 4 + }, +/turf/open/floor/wood/parquet, +/area/virtual_domain) +"QH" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/machinery/door/airlock/wood{ + name = "Room 6"; + id_tag = "beach_room_6" + }, +/turf/open/floor/wood, +/area/virtual_domain) +"QI" = ( +/obj/effect/mob_spawn/ghost_role/human/virtual_domain/islander, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"QN" = ( +/obj/item/cigbutt{ + pixel_y = -6; + pixel_x = -12 + }, +/obj/item/clothing/head/soft/black, +/turf/open/floor/wood/parquet, +/area/virtual_domain) +"QX" = ( +/obj/machinery/vending/boozeomat/all_access{ + desc = "A technological marvel, supposedly able to mix just the mixture you'd like to drink the moment you ask for one. May not work for bartenders that don't have Nanotrasen bank accounts." + }, +/turf/open/floor/wood/large, +/area/virtual_domain) +"QY" = ( +/obj/structure/window/reinforced/spawner/directional/north, +/obj/structure/window/reinforced/spawner/directional/west, +/obj/structure/table/wood, +/obj/item/storage/medkit/o2{ + pixel_y = 4; + pixel_x = 1 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 9 + }, +/turf/open/floor/wood, +/area/virtual_domain/fullbright) +"Rc" = ( +/obj/structure/flora/tree/palm{ + pixel_y = 31 + }, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"Rd" = ( +/obj/effect/mob_spawn/ghost_role/human/virtual_domain/islander, +/turf/open/floor/carpet, +/area/virtual_domain) +"Re" = ( +/obj/structure/table/wood, +/obj/item/stack/arcadeticket{ + pixel_y = 3; + pixel_x = -5 + }, +/obj/item/reagent_containers/cup/soda_cans/pwr_game{ + pixel_y = 12; + pixel_x = -8 + }, +/obj/item/paper_bin/carbon{ + pixel_y = 6; + pixel_x = 4 + }, +/turf/open/floor/wood/large, +/area/virtual_domain) +"Rf" = ( +/obj/effect/turf_decal/siding/wood/corner, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"Rk" = ( +/obj/structure/table/glass, +/obj/machinery/fax{ + fax_name = "Beach Hotel Fax"; + name = "Beach Hotel's Fax Machine"; + pixel_y = 8; + visible_to_network = 0 + }, +/turf/open/floor/iron/dark/diagonal, +/area/virtual_domain) +"Rs" = ( +/obj/machinery/door/airlock/wood{ + name = "Garage" + }, +/turf/open/floor/iron/dark/herringbone, +/area/virtual_domain) +"Rw" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/machinery/door/airlock/wood{ + name = "Room 1" + }, +/turf/open/floor/wood/large, +/area/virtual_domain) +"Ry" = ( +/obj/structure/closet{ + name = "Holding Cell Storage" + }, +/obj/item/taperecorder, +/turf/open/floor/iron/dark/diagonal, +/area/virtual_domain) +"Rz" = ( +/obj/item/kirbyplants/organic/plant21{ + pixel_y = 3; + pixel_x = -6 + }, +/turf/open/floor/wood/large, +/area/virtual_domain) +"RB" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 5 + }, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"RF" = ( +/obj/effect/turf_decal/siding/wood, +/turf/closed/wall/mineral/wood, +/area/virtual_domain/fullbright) +"RJ" = ( +/obj/item/reagent_containers/cup/soda_cans/starkist{ + pixel_y = 16; + pixel_x = 10 + }, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"RM" = ( +/obj/effect/baseturf_helper/beach/water, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"RO" = ( +/obj/item/reagent_containers/cup/soda_cans/lemon_lime{ + pixel_x = -12; + pixel_y = -7 + }, +/obj/item/reagent_containers/cup/soda_cans/dr_gibb{ + pixel_x = 13; + pixel_y = -7 + }, +/obj/structure/fluff/beach_umbrella, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"RP" = ( +/obj/structure/table, +/obj/item/book/manual/wiki/engineering_guide{ + pixel_y = 7; + pixel_x = -6 + }, +/obj/item/pen{ + pixel_x = 7; + pixel_y = 6 + }, +/obj/item/clothing/head/utility/welding{ + pixel_x = -10; + pixel_y = -8 + }, +/turf/open/floor/wood/parquet, +/area/virtual_domain) +"RS" = ( +/obj/structure/table/wood, +/obj/item/food/donut/plain{ + pixel_y = -2; + pixel_x = 14 + }, +/obj/item/assembly/signaler{ + pixel_x = -6; + pixel_y = -5 + }, +/obj/effect/spawner/random/bureaucracy/folder{ + pixel_y = 11; + pixel_x = 4 + }, +/turf/open/floor/iron/dark/diagonal, +/area/virtual_domain) +"Sb" = ( +/obj/structure/flora/tree/palm{ + pixel_y = 19; + pixel_x = 10 + }, +/obj/machinery/hydroponics/constructable, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"Sc" = ( +/obj/structure/table/wood, +/obj/item/storage/box/drinkingglasses{ + pixel_y = 18; + pixel_x = -5 + }, +/obj/item/reagent_containers/cup/glass/shaker{ + pixel_y = 12; + pixel_x = -7 + }, +/obj/item/clothing/head/hats/tophat{ + pixel_y = 2; + pixel_x = 3 + }, +/turf/open/floor/wood/large, +/area/virtual_domain) +"Se" = ( +/obj/structure/table/wood, +/obj/effect/spawner/random/entertainment/lighter, +/turf/open/floor/wood/large, +/area/virtual_domain) +"Sf" = ( +/obj/structure/flora/tree/palm{ + pixel_y = 8 + }, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"So" = ( +/obj/effect/turf_decal/siding/wood, +/turf/open/floor/wood/large, +/area/virtual_domain) +"Sr" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/rack, +/obj/effect/spawner/random/maintenance/three, +/obj/effect/decal/cleanable/cobweb, +/obj/item/wheelchair, +/turf/open/floor/plating, +/area/virtual_domain) +"Su" = ( +/obj/machinery/door/airlock/wood{ + name = "Room 4"; + id_tag = "beach_room_4" + }, +/obj/effect/turf_decal/siding/wood, +/turf/open/floor/wood, +/area/virtual_domain) +"Sx" = ( +/turf/open/floor/wood/parquet, +/area/virtual_domain) +"Sz" = ( +/obj/structure/chair/stool/bamboo{ + dir = 1 + }, +/obj/effect/turf_decal/siding/wood/corner, +/turf/open/floor/wood/large, +/area/virtual_domain/fullbright) +"SJ" = ( +/obj/structure/rack, +/obj/effect/turf_decal/sand, +/obj/item/clothing/shoes/sandal{ + pixel_y = 4; + pixel_x = 8 + }, +/obj/item/clothing/shoes/sandal{ + pixel_x = 4 + }, +/obj/item/clothing/shoes/sandal{ + pixel_y = -4 + }, +/obj/item/clothing/shoes/sandal{ + pixel_y = -7; + pixel_x = -3 + }, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"SL" = ( +/obj/machinery/door/airlock/wood{ + name = "Trash Disposal" + }, +/turf/open/floor/wood/large, +/area/virtual_domain) +"SM" = ( +/obj/effect/turf_decal/siding/blue{ + dir = 4 + }, +/obj/structure/chair/plastic{ + dir = 4 + }, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"SO" = ( +/obj/structure/table/bronze, +/obj/structure/desk_bell{ + pixel_x = 7; + pixel_y = 8 + }, +/turf/open/floor/wood/large, +/area/virtual_domain) +"SR" = ( +/turf/closed/indestructible/binary, +/area/virtual_domain/fullbright) +"Ta" = ( +/obj/machinery/light/directional/south, +/turf/open/floor/carpet, +/area/virtual_domain) +"Tb" = ( +/obj/effect/landmark/bitrunning/curiosity_spawn, +/turf/open/floor/iron/dark/herringbone, +/area/virtual_domain) +"Tq" = ( +/obj/machinery/light/small/directional/north, +/turf/open/floor/iron/dark/herringbone, +/area/virtual_domain) +"Tr" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"Tt" = ( +/obj/machinery/recharge_station, +/turf/open/floor/wood/large, +/area/virtual_domain) +"Tw" = ( +/obj/effect/turf_decal/stripes/white/full, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"Ty" = ( +/turf/open/floor/carpet, +/area/virtual_domain/fullbright) +"TB" = ( +/obj/effect/turf_decal/tile/dark_red/full, +/obj/machinery/vending/cola/red, +/turf/open/floor/iron/smooth_large, +/area/virtual_domain/fullbright) +"TC" = ( +/obj/effect/turf_decal/sand, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"TK" = ( +/obj/structure/table/bronze, +/obj/item/clothing/suit/costume/hawaiian{ + pixel_y = 1; + pixel_x = 7 + }, +/obj/item/clothing/suit/costume/hawaiian{ + pixel_x = -14 + }, +/turf/open/floor/wood/parquet, +/area/virtual_domain/fullbright) +"TM" = ( +/obj/effect/turf_decal/siding/blue/corner, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"TO" = ( +/obj/structure/closet/crate/bin, +/obj/item/reagent_containers/syringe{ + pixel_y = -4; + pixel_x = 3 + }, +/obj/effect/spawner/random/trash/food_packaging, +/turf/open/floor/iron/white/textured_large, +/area/virtual_domain) +"TR" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/virtual_domain) +"TS" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/item/clothing/mask/breath/medical{ + pixel_y = 7; + pixel_x = -9 + }, +/obj/item/clothing/mask/breath/medical{ + pixel_y = 4; + pixel_x = 3 + }, +/obj/item/clothing/gloves/latex, +/obj/structure/table/glass, +/turf/open/floor/wood/large, +/area/virtual_domain/fullbright) +"TW" = ( +/obj/structure/table/bronze, +/obj/item/clothing/suit/costume/hawaiian{ + pixel_y = 7; + pixel_x = -3 + }, +/obj/machinery/light/directional/west, +/turf/open/floor/wood/parquet, +/area/virtual_domain/fullbright) +"TY" = ( +/obj/machinery/door/airlock/medical/glass{ + name = "Medbay Clinic" + }, +/obj/effect/turf_decal/siding/blue{ + dir = 8 + }, +/turf/open/floor/iron/white/textured_large, +/area/virtual_domain) +"TZ" = ( +/obj/structure/fluff/beach_umbrella/science, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"Ub" = ( +/obj/machinery/light/directional/west, +/turf/open/floor/wood/parquet, +/area/virtual_domain) +"Ud" = ( +/obj/effect/turf_decal/siding/wood, +/obj/item/cigbutt{ + pixel_y = -9; + pixel_x = 13 + }, +/turf/open/water/beach, +/area/virtual_domain/fullbright) +"Uf" = ( +/obj/effect/turf_decal/sand, +/obj/machinery/door/airlock/wood{ + name = "Bathroom"; + id_tag = "toilet2beach" + }, +/turf/open/floor/iron/white, +/area/virtual_domain) +"Ug" = ( +/obj/structure/chair/office{ + dir = 4 + }, +/turf/open/floor/iron/dark/diagonal, +/area/virtual_domain) +"Uk" = ( +/obj/machinery/vending/autodrobe/all_access, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"Um" = ( +/obj/structure/closet/secure_closet/personal/cabinet, +/obj/item/clothing/suit/jacket/miljacket, +/turf/open/floor/wood, +/area/virtual_domain) +"Uy" = ( +/obj/machinery/door/airlock/medical/glass{ + name = "Medbay Clinic" + }, +/obj/effect/turf_decal/siding/blue{ + dir = 4 + }, +/turf/open/floor/iron/white/textured_large, +/area/virtual_domain) +"UE" = ( +/obj/effect/turf_decal/siding/wood, +/turf/open/floor/wood/large, +/area/virtual_domain/fullbright) +"UI" = ( +/obj/machinery/door/airlock/wood{ + name = "Janitorial" + }, +/turf/open/floor/wood/large, +/area/virtual_domain) +"UJ" = ( +/obj/vehicle/ridden/atv{ + dir = 4 + }, +/obj/effect/decal/cleanable/oil, +/turf/open/floor/iron/dark/herringbone, +/area/virtual_domain) +"UO" = ( +/obj/machinery/vending/cola/pwr_game, +/turf/open/floor/eighties, +/area/virtual_domain) +"US" = ( +/obj/machinery/shower/directional/west, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/turf/open/floor/wood, +/area/virtual_domain/fullbright) +"UW" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/turf/open/floor/wood/large, +/area/virtual_domain) +"UZ" = ( +/obj/item/stack/sheet/mineral/sandstone{ + pixel_x = -8 + }, +/obj/item/stack/sheet/mineral/sandstone{ + pixel_x = 5 + }, +/obj/item/stack/sheet/mineral/sandstone{ + pixel_x = 1; + pixel_y = 7 + }, +/obj/item/stack/sheet/mineral/sandstone{ + pixel_x = -12; + pixel_y = 6 + }, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"Va" = ( +/obj/machinery/door/airlock/wood{ + name = "Employees' Only" + }, +/turf/open/floor/plastic, +/area/virtual_domain) +"Vs" = ( +/obj/structure/table/wood, +/obj/item/pai_card{ + desc = "A real Nanotrasen success, these personal AIs provide all of the companionship of an AI without any law related red-tape."; + name = "\improper Nanotrasen-brand personal AI device exhibit"; + pixel_y = 3; + pixel_x = 10 + }, +/turf/open/floor/wood/large, +/area/virtual_domain) +"VD" = ( +/obj/effect/turf_decal/sand, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 1 + }, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"VI" = ( +/obj/machinery/vending/dinnerware, +/turf/open/floor/wood/large, +/area/virtual_domain) +"VK" = ( +/obj/machinery/door/airlock/wood/glass{ + name = "Cabin" + }, +/turf/open/floor/carpet, +/area/virtual_domain) +"VL" = ( +/turf/open/misc/beach/coast{ + dir = 6 + }, +/area/virtual_domain/fullbright) +"We" = ( +/obj/structure/table/bronze, +/obj/item/book/manual/wiki/barman_recipes{ + pixel_x = 9; + pixel_y = 7; + name = "Tropical Mixing for Tropical Bartenders" + }, +/obj/item/reagent_containers/cup/glass/drinkingglass/shotglass{ + pixel_y = 10; + pixel_x = -12 + }, +/turf/open/floor/wood/large, +/area/virtual_domain) +"Wg" = ( +/obj/structure/closet/crate/trashcart/filled, +/turf/open/floor/wood/large, +/area/virtual_domain/fullbright) +"Wm" = ( +/obj/effect/landmark/bitrunning/curiosity_spawn, +/turf/open/floor/iron/white/textured_large, +/area/virtual_domain) +"Ws" = ( +/obj/machinery/vending/cigarette/beach, +/turf/open/floor/wood/large, +/area/virtual_domain) +"WG" = ( +/obj/effect/turf_decal/siding/blue{ + dir = 8 + }, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"WX" = ( +/obj/structure/marker_beacon/teal, +/turf/open/water/beach, +/area/virtual_domain/fullbright) +"Xe" = ( +/obj/structure/table/bronze, +/obj/structure/sign/poster/random/directional/east, +/obj/item/camera{ + pixel_y = 5 + }, +/turf/open/floor/wood, +/area/virtual_domain) +"Xl" = ( +/obj/structure/flora/tree/palm/style_2{ + pixel_y = 25 + }, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"Xt" = ( +/turf/open/floor/plastic, +/area/virtual_domain) +"Xu" = ( +/obj/effect/turf_decal/siding/blue{ + dir = 8 + }, +/obj/structure/chair/plastic{ + dir = 8 + }, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"Xx" = ( +/obj/machinery/door/airlock/wood/glass{ + name = "Beach Access" + }, +/turf/open/floor/wood/large, +/area/virtual_domain) +"XJ" = ( +/obj/machinery/door/airlock/public/glass{ + name = "Locker Room" + }, +/turf/open/floor/wood/parquet, +/area/virtual_domain) +"XO" = ( +/obj/structure/flora/tree/palm/style_2{ + pixel_y = 25 + }, +/obj/structure/chair/plastic{ + dir = 4 + }, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"XP" = ( +/obj/structure/mop_bucket/janitorialcart{ + dir = 8 + }, +/obj/machinery/light/directional/south, +/turf/open/floor/wood/large, +/area/virtual_domain) +"XT" = ( +/obj/machinery/light/directional/west, +/turf/open/floor/carpet/cyan, +/area/virtual_domain) +"XW" = ( +/obj/structure/fluff/beach_umbrella/syndi, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"Yb" = ( +/obj/structure/sign/poster/contraband/pwr_game/directional/west, +/turf/open/floor/eighties, +/area/virtual_domain) +"Yd" = ( +/obj/structure/flora/tree/palm/style_2{ + pixel_y = 3; + pixel_x = -4 + }, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"Yo" = ( +/turf/closed/wall/mineral/sandstone, +/area/virtual_domain/fullbright) +"Yr" = ( +/obj/item/reagent_containers/cup/watering_can{ + pixel_y = 19; + pixel_x = -6 + }, +/turf/open/floor/wood/large, +/area/virtual_domain) +"Yz" = ( +/obj/item/trash/candy{ + pixel_y = 9; + pixel_x = -9 + }, +/turf/open/floor/wood/large, +/area/virtual_domain/fullbright) +"YD" = ( +/obj/effect/turf_decal/sand, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"YI" = ( +/obj/effect/turf_decal/sand, +/obj/machinery/button/door/directional/east{ + id = "toilet1beach"; + name = "restroom lock"; + normaldoorcontrol = 1; + specialfunctions = 4 + }, +/obj/structure/toilet{ + pixel_y = 8 + }, +/obj/structure/sink/directional/west, +/obj/machinery/light/small/directional/west, +/turf/open/floor/iron/white, +/area/virtual_domain) +"YM" = ( +/obj/effect/mob_spawn/ghost_role/human/virtual_domain/islander, +/turf/open/floor/wood/parquet, +/area/virtual_domain) +"YN" = ( +/obj/item/toy/seashell{ + pixel_x = 12; + pixel_y = -5 + }, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"YP" = ( +/obj/structure/table/glass, +/obj/item/paper{ + pixel_y = 7; + pixel_x = 2 + }, +/obj/item/screwdriver{ + pixel_y = 13; + pixel_x = 3 + }, +/obj/item/paper_bin/carbon{ + pixel_y = 4; + pixel_x = -6 + }, +/obj/effect/spawner/random/bureaucracy/pen{ + pixel_x = 7 + }, +/turf/open/floor/iron/dark/diagonal, +/area/virtual_domain) +"YR" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 10 + }, +/obj/machinery/vending/cola/red, +/turf/open/floor/wood/large, +/area/virtual_domain/fullbright) +"YW" = ( +/obj/structure/chair{ + dir = 1 + }, +/turf/open/floor/iron/dark/textured_large, +/area/virtual_domain) +"YZ" = ( +/obj/structure/railing/corner/end/flip{ + dir = 4 + }, +/turf/open/floor/wood/parquet, +/area/virtual_domain) +"Zd" = ( +/obj/structure/railing{ + dir = 8 + }, +/turf/open/floor/wood, +/area/virtual_domain/fullbright) +"Zj" = ( +/obj/structure/flora/tree/palm{ + pixel_y = 16 + }, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"Zn" = ( +/obj/item/reagent_containers/cup/soda_cans/dr_gibb{ + pixel_x = -9; + pixel_y = -9 + }, +/obj/structure/fluff/beach_umbrella/engine, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"Zp" = ( +/obj/structure/dresser, +/turf/open/floor/wood, +/area/virtual_domain) +"Zs" = ( +/obj/machinery/door/poddoor/shutters{ + id = "BeachBoats" + }, +/turf/open/water/beach, +/area/virtual_domain/fullbright) +"Zy" = ( +/obj/structure/sign/chalkboard_menu{ + pixel_y = 32 + }, +/turf/open/floor/wood/large, +/area/virtual_domain) +"Zz" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 4 + }, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"ZB" = ( +/obj/effect/turf_decal/sand, +/obj/machinery/button/door/directional/east{ + id = "toilet3beach"; + name = "restroom lock"; + normaldoorcontrol = 1; + specialfunctions = 4 + }, +/obj/structure/toilet{ + pixel_y = 8 + }, +/obj/structure/sink/directional/west, +/obj/item/cigbutt{ + pixel_y = -7; + pixel_x = -13 + }, +/obj/machinery/light/small/directional/west, +/obj/effect/baseturf_helper/virtual_domain, +/turf/open/floor/iron/white, +/area/virtual_domain) +"ZE" = ( +/obj/structure/table/bronze, +/turf/open/floor/carpet, +/area/virtual_domain) +"ZH" = ( +/obj/item/kirbyplants/organic/plant24{ + pixel_x = 7; + pixel_y = 10 + }, +/obj/item/reagent_containers/cup/watering_can{ + pixel_x = -3; + pixel_y = 15 + }, +/obj/structure/table, +/turf/open/floor/wood/large, +/area/virtual_domain) +"ZI" = ( +/obj/effect/baseturf_helper/beach/sand, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"ZV" = ( +/obj/structure/chair/plastic, +/obj/item/pai_card{ + desc = "A real Nanotrasen success, these personal AIs provide all of the companionship of an AI without any law related red-tape."; + name = "\improper Nanotrasen-brand personal AI device exhibit"; + pixel_y = 3; + pixel_x = -1 + }, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"ZX" = ( +/obj/structure/table/bronze, +/obj/item/storage/toolbox/fishing{ + pixel_y = 2 + }, +/turf/open/floor/wood, +/area/virtual_domain) +"ZY" = ( +/obj/effect/turf_decal/siding/blue/corner{ + dir = 4 + }, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) + +(1,1,1) = {" +SR +SR +SR +SR +SR +SR +SR +SR +SR +SR +SR +SR +SR +SR +SR +SR +SR +SR +SR +SR +SR +SR +SR +SR +SR +SR +SR +SR +SR +SR +SR +SR +SR +SR +SR +SR +SR +SR +SR +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +"} +(2,1,1) = {" +SR +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +SR +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +"} +(3,1,1) = {" +SR +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +SR +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +"} +(4,1,1) = {" +SR +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +SR +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +"} +(5,1,1) = {" +SR +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +SR +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +"} +(6,1,1) = {" +SR +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +SR +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +"} +(7,1,1) = {" +SR +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +SR +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +"} +(8,1,1) = {" +SR +cO +cO +cO +cO +cO +cO +cO +cO +LR +Bf +Bf +Bf +qa +cO +LR +Bf +Bf +Bf +HH +Bf +Bf +Bf +qa +cO +LR +Bf +Bf +Bf +qa +cO +cO +cO +cO +cO +cO +cO +cO +SR +SR +SR +SR +SR +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +"} +(9,1,1) = {" +SR +cO +cO +cO +cO +cO +cO +cO +cO +Jd +vF +Zd +io +tw +cO +Jd +vF +Zd +io +Jp +vF +Zd +io +tw +cO +Jd +vF +Zd +PD +tw +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +SR +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +"} +(10,1,1) = {" +SR +cO +cO +cO +cO +cO +cO +cO +cO +eK +Lm +AZ +AZ +eK +cO +eK +Lm +AZ +AZ +eK +Lm +AZ +AZ +eK +cO +eK +Lm +AZ +AZ +eK +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +SR +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +"} +(11,1,1) = {" +SR +cO +cO +cO +cO +cO +cO +cO +cO +eK +CH +uY +PE +Bq +eK +Bq +MZ +gw +PE +Bq +bE +uY +oE +Bq +eK +Bq +iQ +gw +jp +eK +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +SR +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +"} +(12,1,1) = {" +SR +cO +cO +cO +cO +cO +cO +cO +cO +eK +cB +Rd +bE +db +Mb +rI +bE +cW +aQ +Bq +jw +Rd +bE +Su +Mb +EP +bE +cW +La +eK +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +SR +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +"} +(13,1,1) = {" +SR +cO +cO +cO +cO +cO +cO +cO +cO +eK +yI +gK +rE +Bq +Mb +Bq +yI +ch +Xe +Bq +wO +gK +rw +Bq +Mb +Bq +Je +Om +Zp +eK +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +SR +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +"} +(14,1,1) = {" +SR +cO +cO +cO +cO +cO +cO +cO +cO +eK +Bq +Bq +Bq +Bq +pv +Bq +Bq +Bq +Bq +Bq +Bq +Bq +Bq +Bq +Mb +Bq +Bq +Bq +Bq +eK +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +SR +SR +SR +SR +SR +SR +SR +SR +SR +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +"} +(15,1,1) = {" +SR +cO +cO +cO +cO +cO +cO +cO +vF +nk +bE +XT +PE +Bq +Mb +Mb +yg +Mb +Mb +Mb +Mb +yg +Mb +Mb +Mb +Mb +yg +gH +Bq +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +SR +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +"} +(16,1,1) = {" +SR +cO +cO +cO +cO +cO +cO +cO +aw +AZ +Go +cW +bE +DU +Mb +Bq +Bq +Bq +Bq +Bq +Bq +Bq +Bq +Bq +Mb +Bq +Bq +Bq +Bq +eK +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +SR +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +"} +(17,1,1) = {" +SR +cO +cO +cO +cO +cO +cO +cO +xR +AZ +Zp +Om +yQ +Bq +Mb +Bq +cr +uY +dH +Bq +Um +gw +gf +Bq +pv +Bq +lc +uY +pq +eK +cO +eH +EI +EI +EI +ij +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +SR +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +"} +(18,1,1) = {" +SR +cO +cO +cO +cO +cO +cO +cO +cO +eK +Bq +Gm +Bq +Bq +Mb +HO +bE +Rd +La +Bq +Ae +cW +bE +sW +Mb +Bk +bE +Rd +La +eK +eH +tk +qB +ka +MH +nc +ij +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +SR +SR +SR +SR +SR +SR +SR +SR +SR +SR +SR +SR +SR +SR +SR +SR +SR +SR +SR +SR +SR +SR +SR +SR +SR +SR +SR +SR +SR +oX +"} +(19,1,1) = {" +SR +cO +cO +cO +cO +cO +cO +cO +vF +dW +bE +GX +dH +Bq +Mb +Bq +ik +gK +ZX +Bq +yI +Om +dS +Bq +Mb +Bq +ik +gK +ZX +eK +tk +CV +wZ +QI +gI +ka +nc +ij +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +SR +"} +(20,1,1) = {" +SR +cO +cO +cO +cO +cO +cO +cO +KZ +AZ +pz +Rd +bE +JJ +Mb +Bq +Bq +Bq +Bq +Bq +Bq +Bq +Bq +Bq +Mb +Bq +Bq +Bq +Bq +eK +BI +ka +mP +rB +bD +ka +ka +cE +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +SR +"} +(21,1,1) = {" +SR +cO +cO +cO +cO +cO +cO +cO +xR +AZ +BW +gK +st +Bq +Mb +Mb +yg +Mb +Bq +xg +Bq +Mb +Mb +Mb +Mb +yg +Mb +Mb +Xx +TC +JN +ka +ka +ka +ka +ka +rD +cE +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +SR +"} +(22,1,1) = {" +SR +cO +cO +cO +cO +cO +cO +cO +cO +eK +Bq +Bq +Bq +Bq +Mb +Bq +Bq +cH +Bq +Bq +Bq +QH +Bq +Bq +Mb +Bq +Bq +Bq +Bq +eK +NB +rD +ka +ka +ka +BI +ka +nc +ij +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +SR +"} +(23,1,1) = {" +SR +cO +cO +cO +cO +cO +cO +eK +eK +Bq +Fk +Yr +wz +Bq +Mb +Bq +Ka +gw +PE +Bq +CU +uY +bE +Bq +Mb +CS +qb +gw +pJ +eK +ka +ka +eK +Rw +eK +eK +eK +Ej +nc +EI +EI +EI +ij +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +SR +"} +(24,1,1) = {" +SR +cO +cO +cO +cO +cO +cO +cO +cO +eK +tf +GK +XP +Bq +pv +Bq +bE +cW +La +Bq +PE +Rd +La +Bq +Mb +Bq +wx +cW +La +eK +Sf +eK +Bq +Mb +Dx +Mb +Bq +eK +Ej +ka +ka +ka +nc +EI +ij +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +SR +"} +(25,1,1) = {" +SR +cO +cO +cO +cO +cO +cO +cO +cO +eK +IX +Mb +Mb +Bq +pE +Bq +ik +Om +gc +Bq +yI +gK +ZX +Bq +pE +Bq +Zp +Om +eJ +Bq +eK +Bq +jb +dY +lI +Aq +MR +Bq +eK +th +ka +ka +ka +ka +nc +EI +EI +EI +EI +ij +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +SR +"} +(26,1,1) = {" +SR +cO +cO +cO +cO +cO +cO +cO +cO +eK +ow +Bq +UI +Bq +Mb +Bq +Bq +Bq +Bq +Bq +Bq +Bq +Bq +Bq +Mb +Bq +Bq +Bq +Bq +Bq +BV +Mb +Mb +ho +ho +ho +Mb +Rz +AZ +ka +sz +ka +ka +yy +ka +ka +ka +ka +ka +nc +EI +ij +cO +cO +cO +cO +eH +EI +EI +EI +EI +EI +ij +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +SR +"} +(27,1,1) = {" +SR +cO +cO +cO +cO +cO +cO +LR +Bf +eK +Bq +Bq +tI +Mb +Mb +Mb +Mb +Mb +Mb +JG +Mb +Mb +Mb +Mb +Mb +Mb +JG +Mb +dj +Mb +Mb +IS +gN +Al +Mb +Mb +Mb +xw +AZ +ka +ka +ka +Md +BB +ka +ka +ka +rD +ka +ka +ka +nc +ij +cO +cO +cO +oa +sz +th +ka +ka +ka +nc +ij +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +SR +"} +(28,1,1) = {" +SR +cO +cO +cO +cO +cO +LR +lS +wN +xJ +SL +Mb +Mb +Mb +Mb +Mb +Mb +Mb +Mb +Mb +Mb +Mb +Mb +Mb +Mb +Mb +Mb +Mb +dj +Mb +Mb +So +EY +UW +Mb +Mb +ZH +AZ +AZ +JN +ka +ka +ka +ka +ka +ka +DR +ka +ka +BD +ka +sz +nc +EI +EI +EI +tk +ka +ka +ka +ka +ka +sz +nc +ij +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +SR +"} +(29,1,1) = {" +SR +cO +cO +cO +cO +cO +Jd +Yz +xJ +eK +Bq +Bq +yG +yG +Bq +Qv +Bq +Bq +Bq +Bq +Bq +DP +TY +DP +Bq +Bq +Bq +Bq +Bq +Bq +pv +LV +II +Qq +Mb +Mb +AZ +AZ +JN +JN +ka +ka +ka +ka +ka +TZ +oC +ka +ka +ka +ka +ka +ka +ka +ka +ka +ka +ka +ka +ka +ka +Oy +ka +Dg +cE +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +SR +"} +(30,1,1) = {" +SR +cO +cO +cO +cO +cO +Jd +mV +xJ +eK +Jb +zS +lW +lW +PJ +lW +Qu +Bq +lF +bx +jL +qH +gP +FB +NU +Bq +CQ +CQ +Bq +cK +Mb +dA +Mb +Mb +Mb +Mb +eK +sR +JN +de +JN +ka +ka +ka +rD +ka +ka +ka +ka +eK +AZ +AZ +eK +ka +eK +AZ +AZ +eK +uC +ka +ka +Nj +ka +ka +nc +ij +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +SR +"} +(31,1,1) = {" +SR +cO +cO +cO +cO +cO +Ud +bT +Wg +eK +vx +lW +Ug +aY +Ug +lW +YP +Gq +zm +Wm +gP +gP +gP +gP +gP +Va +Xt +Xt +Bq +Cw +uY +zL +uY +uY +uY +uY +VK +Ty +JN +JN +JN +ka +ka +th +ka +ka +ka +ka +eK +Bq +Qx +Qx +Bq +AZ +Bq +BM +gs +Bq +eK +rD +ka +DR +LN +ka +ka +cE +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +SR +"} +(32,1,1) = {" +SR +cO +cO +cO +cO +cO +Jc +If +Wg +eK +Ks +lW +Ho +RS +Ld +lW +Rk +Bq +Mx +gP +gP +up +gP +gP +TO +Bq +Ml +Xt +Bq +uY +Rd +ZE +uY +uY +uY +Ta +eK +Ty +Ty +JN +JN +ka +ka +ka +ka +ka +ka +ka +eK +UO +en +ty +Yb +en +HR +gi +Ai +Ga +eK +ka +ka +ka +nR +ka +gL +VL +JH +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +SR +"} +(33,1,1) = {" +SR +cO +cO +cO +cO +cO +cO +Jc +IF +eK +HK +lW +qR +MO +pX +PJ +rG +Bq +CP +HT +gP +aD +OK +gP +Ay +Bq +Ml +Xt +Bq +Cw +uY +iF +uY +uY +uY +uY +VK +Ty +Ty +Ty +JN +ka +ka +ka +ka +ka +ka +ka +eK +Bq +Ma +xx +en +pV +Nt +dB +Mr +Mb +AZ +ka +ka +ka +rD +ka +cE +cO +cO +cO +cO +WX +cO +cO +cO +cO +cO +cO +cO +cO +cO +SR +"} +(34,1,1) = {" +SR +cO +cO +cO +cO +cO +cO +cO +cO +eK +Bq +lW +lW +KT +DA +In +Bq +eK +AZ +Bq +gP +gP +gP +Bq +Bq +Bq +FE +Xt +Bq +PG +Mb +oQ +Mb +Mb +Mb +eK +eK +wf +Ty +Ty +Ty +ka +ka +ka +rD +ka +ka +sz +ka +eK +AZ +Bq +wT +wT +Ag +Mb +Vs +Mb +eK +ka +ka +ka +ka +ka +cE +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +SR +"} +(35,1,1) = {" +SR +cO +cO +cO +cO +cO +cO +cO +cO +cO +eK +lW +rW +Ry +MV +Bq +eK +zO +bb +eK +Uy +Bq +ee +Bq +Ml +Po +gB +Xt +Bq +Bq +Mb +IS +gN +Al +Mb +AZ +wf +SJ +JN +Ty +Ty +Ty +ka +ka +ka +ka +ka +ka +th +ka +JN +eK +AZ +AZ +Bq +Mb +Re +fg +eK +as +ka +ka +ka +ka +nc +ij +cO +cO +cO +cO +cO +cO +cO +JH +cO +cO +cO +cO +cO +SR +"} +(36,1,1) = {" +SR +cO +cO +cO +cO +cO +cO +cO +cO +cO +eK +lU +yG +yG +Bq +eK +IJ +xJ +xJ +xJ +xJ +eK +AZ +Bq +Ml +AK +Xt +Xt +Xt +Va +Mb +So +sh +UW +Mb +AZ +AZ +SJ +JN +JN +Ty +Ty +Ty +ka +ka +ka +ka +ka +ka +ka +ka +ka +ka +JN +eK +mx +AZ +eK +Ib +JN +ka +ka +ka +Oy +ka +cE +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +SR +"} +(37,1,1) = {" +SR +cO +cO +cO +cO +cO +cO +cO +cO +cO +eK +GI +GI +YW +eK +cO +TS +mV +xJ +xJ +xJ +tw +cO +eK +Bq +yc +yc +yc +Bq +Bq +Bq +LV +Ne +Qq +Mb +Qc +AZ +SJ +JN +JN +ka +Ty +Ty +Ty +ka +ka +ka +ka +ka +ka +ka +JN +ka +ka +ta +YD +dp +ct +ka +ka +ka +JN +ka +ka +ka +NT +cO +cO +cO +cO +cO +cO +cO +cO +cO +WX +cO +cO +cO +SR +"} +(38,1,1) = {" +SR +cO +cO +cO +cO +cO +cO +cO +cO +cO +lx +uI +ba +YW +lx +cO +bp +rn +zn +Nc +yB +pC +cO +cO +eK +Bq +Bq +Bq +Bq +Sr +Bq +kD +Bq +Mb +Mb +Tt +AZ +Er +JN +rD +ka +ka +Ty +Ty +Ty +ka +ka +ka +rD +ka +JN +JN +JN +ka +JN +ka +JN +ka +JN +ka +ka +ka +ka +ka +ka +cE +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +SR +"} +(39,1,1) = {" +SR +cO +cO +cO +cO +cO +cO +cO +cO +cO +eK +Bq +zp +Bq +eK +cO +Jc +fe +du +AG +pC +cO +cO +cO +eK +hT +lh +TR +jm +TR +TR +TR +Bq +Ws +KJ +fg +eK +JN +ka +ka +ka +ka +ka +Ty +Ty +Ty +ka +ka +ka +JN +JN +JN +ka +JN +ka +JN +JN +ka +ka +ka +JN +ka +ka +FO +ka +cE +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +JH +cO +SR +"} +(40,1,1) = {" +SR +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +eK +eK +eK +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +eK +TR +TR +HV +TR +TR +eP +KI +Bq +eK +eK +eK +ka +ka +Xl +ka +sz +ka +ka +Gp +Ty +Ty +JN +JN +JN +JN +JN +ka +ka +JN +JN +ka +ka +JN +ka +ka +ka +ka +ka +RO +ka +cE +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +SR +"} +(41,1,1) = {" +SR +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +eK +Ol +TR +TR +DG +Gx +Bq +eK +eK +rD +ka +ka +ka +ka +ka +ka +ka +ka +th +ka +JN +JN +JN +JN +JN +JN +ka +NH +eK +eK +AZ +AZ +eK +eK +ky +ka +JN +ka +ka +FO +ka +cE +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +SR +"} +(42,1,1) = {" +SR +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +eK +eK +Bq +ce +cC +Bq +eK +mJ +ka +ka +ka +Yo +Yo +Yo +ka +ka +ka +ka +ka +rD +JN +JN +JN +ka +ka +JN +JN +yJ +eK +QX +hA +Ac +Sc +eK +YR +ka +ka +ka +ka +ka +ka +cE +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +WX +SR +"} +(43,1,1) = {" +SR +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +eK +eK +eK +eK +bY +Et +ka +ra +Yo +Yo +bX +Yo +Yo +sz +ka +ka +ka +ka +JN +JN +jr +ka +ka +ka +JN +eK +Bq +Qm +Mb +Mb +Mb +jK +aA +JF +ka +ka +FO +ka +gL +VL +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +SR +"} +(44,1,1) = {" +SR +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +wb +MT +UZ +Yo +bX +hh +bX +Yo +sz +ka +lA +US +IA +JN +JN +ka +ka +ka +ka +JN +mL +Mb +GK +Se +vU +Mb +rR +yN +UE +ka +ka +Bx +ka +cE +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +SR +"} +(45,1,1) = {" +SR +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +oa +zq +Yo +bX +kN +bX +ev +ka +ka +NZ +NZ +eK +JN +JN +ka +ka +ka +ka +Sb +eK +Zy +lJ +tM +Hp +Mb +rR +yN +UE +ka +ka +FO +ka +cE +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +JH +SR +"} +(46,1,1) = {" +SR +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +oa +Bc +Yo +sl +bX +bX +Yo +sz +ka +NZ +YI +LD +JN +JN +rD +ka +ka +ka +eK +eK +pv +uD +DT +Mb +Mb +We +yN +UE +ka +ka +Eb +ka +nc +ij +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +SR +"} +(47,1,1) = {" +SR +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +oa +ka +Yo +Yo +bX +Yo +Yo +sz +ka +NZ +kI +eK +JN +JN +ka +ka +ka +GQ +eK +VI +Mb +si +Co +Mb +Fp +Pq +Sz +Fx +ka +ka +ka +FO +ka +cE +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +SR +"} +(48,1,1) = {" +SR +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +oa +ka +ka +Yo +Yo +Yo +ka +ka +ka +NZ +Qk +Uf +JN +JN +ka +ka +ka +ka +AZ +HE +Mb +jW +Mb +Mb +dl +eK +Fx +ka +ka +ka +th +Zn +ka +cE +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +SR +"} +(49,1,1) = {" +SR +SR +SR +SR +SR +SR +SR +SR +SR +SR +SR +SR +SR +SR +SR +SR +SR +SR +SR +SR +SR +SR +SR +SR +cO +cO +cO +cO +cO +cO +cO +cO +oa +ka +sz +ka +ka +ka +th +ka +eK +kI +kI +eK +JN +JN +ka +ka +ka +ka +AZ +fL +Mb +Mb +Mb +hZ +rR +UE +ka +ka +ka +ka +ka +FO +ka +cE +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +SR +"} +(50,1,1) = {" +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +SR +cO +cO +cO +cO +cO +cO +cO +cO +oa +ka +ka +rD +ka +ka +ka +ka +ka +NZ +ZB +sa +JN +JN +ka +th +ka +ka +AZ +xT +Mb +Mb +Og +SO +Np +Fx +ka +as +ka +ka +ka +sC +ka +cE +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +WX +SR +"} +(51,1,1) = {" +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +SR +cO +cO +cO +cO +cO +cO +cO +cO +wb +MT +th +ka +ka +ka +ka +ka +ka +eK +eK +eK +JN +JN +ka +ka +rD +ka +eK +xT +Do +KL +tX +Np +Fx +ka +ka +ka +ka +ka +ka +ka +gL +VL +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +SR +"} +(52,1,1) = {" +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +SR +cO +cO +cO +cO +cO +cO +cO +cO +cO +oa +ka +ka +ka +RM +ka +ka +ka +eK +rK +JN +JN +JN +ka +ka +ka +ka +eK +eK +AZ +AZ +eK +cc +ka +ka +ka +ka +ka +ka +ka +ka +cE +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +SR +"} +(53,1,1) = {" +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +SR +cO +cO +cO +cO +cO +cO +cO +cO +cO +oa +ka +ka +ka +ZI +ka +ka +as +ka +cg +JN +JN +ka +ka +ka +ka +ka +ka +os +ka +eM +ka +rD +ka +ka +ka +ka +ka +rj +ka +gL +VL +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +SR +"} +(54,1,1) = {" +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +SR +cO +cO +cO +cO +cO +cO +cO +cO +cO +oa +tW +ka +ka +th +ka +ka +ka +ka +ka +JN +JN +ka +ka +ka +ka +th +ka +BI +ka +ka +as +ka +ka +ka +ka +ka +ka +xk +ka +cE +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +JH +SR +"} +(55,1,1) = {" +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +SR +cO +cO +cO +cO +cO +cO +cO +cO +cO +oa +Rc +Of +ka +ka +rD +ka +ka +ka +ka +JN +JN +ka +ka +ka +ka +ka +ka +sz +ka +ka +ka +ka +ka +QY +fY +gA +ka +ka +ka +cE +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +SR +"} +(56,1,1) = {" +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +SR +cO +cO +cO +cO +cO +cO +cO +cO +cO +wb +MT +ka +ka +ka +ka +ka +ka +ka +ka +JN +JN +JN +lk +Or +uX +qZ +ka +ka +ka +rD +ka +ka +ka +iy +ut +OM +ka +ka +ka +nc +ij +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +SR +"} +(57,1,1) = {" +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +SR +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +oa +XO +ka +ka +ka +ka +ka +ka +ka +as +JN +JN +kL +TB +ze +mv +ka +ka +ka +ka +ka +ka +ka +ka +ka +ka +ka +th +ka +ka +cE +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +SR +"} +(58,1,1) = {" +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +SR +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +oa +ka +ET +tW +ka +XW +CA +ka +ka +ka +JN +JN +IL +wH +ze +mv +ka +ka +ka +ka +ka +ka +ka +ka +ka +ka +ka +ka +rD +ka +cE +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +WX +cO +SR +"} +(59,1,1) = {" +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +SR +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +wb +bY +CR +ka +zH +LN +DR +ka +ka +ka +JN +JN +IL +eh +ze +mv +ka +rD +ka +ka +th +ka +ka +th +ka +ka +Oy +ka +ka +BU +nc +ij +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +SR +"} +(60,1,1) = {" +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +SR +cO +cO +cO +cO +cO +cO +cO +cO +JH +cO +cO +cO +wb +bY +MT +ka +ka +ka +ka +ka +JN +JN +uz +It +It +MA +ka +ka +ka +ka +ka +ka +tW +tW +tW +tW +ka +ka +ka +il +ka +cE +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +SR +"} +(61,1,1) = {" +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +SR +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +oa +ka +TZ +RJ +ka +JN +JN +JN +Yd +ka +ka +ka +ka +dD +ka +ka +ka +TM +SM +SM +SM +SM +LY +ZY +ka +cp +ka +cE +cO +cO +cO +cO +cO +cO +cO +cO +cO +JH +cO +cO +cO +SR +"} +(62,1,1) = {" +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +SR +cO +cO +cO +cO +cO +cO +cO +WX +cO +cO +cO +cO +cO +cO +oa +ka +FX +FX +ka +JN +JN +ka +ka +ka +ka +ka +ka +ka +sz +ZV +FO +dG +ka +ka +ka +ka +ka +PR +ka +FO +ka +cE +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +SR +"} +(63,1,1) = {" +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +SR +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +wb +MT +ka +ka +ka +JN +JN +ka +ka +ka +ka +ka +ka +OO +ka +FO +FO +dG +ka +ka +ka +ka +ka +PR +ka +ka +gL +VL +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +SR +"} +(64,1,1) = {" +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +SR +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +oa +ka +ka +ka +JN +JN +ka +mi +ka +ka +ka +ka +ka +ka +FO +FO +dG +ka +ka +ka +ka +ka +PR +th +gL +VL +cO +cO +cO +cO +cO +cO +cO +cO +cO +WX +cO +cO +cO +cO +SR +"} +(65,1,1) = {" +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +SR +cO +cO +cO +cO +cO +cO +cO +JH +cO +cO +cO +cO +cO +cO +cO +oa +rD +ka +ka +JN +JN +ka +ka +ka +ka +rD +ka +JN +ka +ka +ka +dG +ka +Dg +ka +ka +ka +PR +ka +cE +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +SR +"} +(66,1,1) = {" +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +SR +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +oa +ka +ka +ka +JN +JN +JN +JN +JN +ka +ka +ka +fI +jP +fI +lP +dG +ka +ka +ka +ka +ka +PR +Oy +cE +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +SR +"} +(67,1,1) = {" +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +SR +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +oa +th +ka +ka +JN +JN +JN +ka +JN +JN +ka +JN +GD +ew +fI +sO +dG +Tw +Tw +Tw +Tw +Tw +PR +ka +cE +cO +cO +cO +cO +cO +cO +cO +cO +JH +cO +cO +cO +cO +cO +cO +SR +"} +(68,1,1) = {" +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +SR +cO +cO +cO +cO +cO +cO +cO +WX +cO +cO +cO +cO +cO +cO +eH +Ko +ka +ka +rD +JN +JN +ka +yz +ka +ka +ka +Gw +fI +jP +hu +lP +dG +ka +ka +ka +ka +ka +PR +ka +cE +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +SR +"} +(69,1,1) = {" +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +SR +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +eH +tk +ka +ka +Dt +ka +JN +JN +ka +ka +ka +ka +JN +ka +ka +th +ka +ka +dG +ka +ka +ka +ka +ka +PR +ka +cE +cO +cO +cO +cO +cO +cO +WX +cO +cO +cO +cO +cO +cO +cO +cO +SR +"} +(70,1,1) = {" +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +SR +cO +cO +cO +cO +cO +cO +cO +cO +JH +cO +cO +eH +EI +rl +ka +ka +ka +ka +ka +JN +JN +JN +ka +ka +ka +ka +ka +ka +rD +FO +FO +dG +ka +ka +ka +ka +ka +PR +al +cE +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +SR +"} +(71,1,1) = {" +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +SR +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +eH +tk +th +ka +ka +eK +eK +eK +eK +qc +JN +JN +ka +ka +ka +ka +ka +JN +ka +FO +FO +dG +ka +ka +ka +ka +ka +PR +ka +xj +ij +cO +cO +JH +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +SR +"} +(72,1,1) = {" +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +SR +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +oa +ka +Oy +eK +eK +Bq +ro +ro +fg +eK +oZ +tQ +ka +ka +eO +PZ +ka +ka +ka +FO +FO +dG +ka +ka +ka +ka +ka +PR +ka +ka +nc +ij +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +SR +"} +(73,1,1) = {" +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +SR +cO +cO +cO +cO +cO +cO +cO +cO +cO +eH +tk +ka +eK +Bq +ro +Ub +Sx +Sx +Sx +XJ +bK +ii +tQ +ka +pj +fH +ka +ka +ka +ka +ka +mW +Xu +Xu +Xu +Xu +WG +lz +ka +iP +ka +lG +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +SR +"} +(74,1,1) = {" +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +SR +cO +cO +cO +cO +cO +cO +cO +cO +eH +tk +ka +ka +eK +ro +Sx +Sx +Sx +Sx +Sx +XJ +bK +bK +TC +ka +ka +ka +rD +ka +ka +ka +ka +th +iU +iU +iU +iU +ka +ka +ka +hB +ka +cE +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +SR +"} +(75,1,1) = {" +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +SR +cO +cO +cO +cO +cO +cO +cO +cO +oa +sz +ka +ka +eK +Bq +DS +Bq +Bq +ro +Sx +eK +bK +bK +TC +ka +ka +ka +ka +ka +ka +ka +ka +rD +ka +ka +ka +ka +ka +rD +ka +FO +ka +cE +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +SR +"} +(76,1,1) = {" +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +SR +cO +cO +cO +cO +cO +cO +cO +eH +tk +ka +sz +JN +eK +KH +uu +KH +Bq +ro +Sx +TW +bK +bK +TC +ka +ka +th +ka +ka +ka +ka +ka +ka +ka +ka +ka +th +ka +ka +ka +gC +ka +cE +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +SR +"} +(77,1,1) = {" +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +SR +cO +cO +cO +cO +cO +cO +cO +oa +ka +ka +eK +Rs +Bq +Bq +uu +uu +Bq +Bq +Sx +TK +bK +bK +TC +ka +ka +ka +tW +tW +tW +ka +tW +tW +ka +ka +ka +ka +ka +ka +ka +FO +ka +dX +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +SR +"} +(78,1,1) = {" +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +SR +cO +cO +cO +cO +cO +cO +cO +oa +ka +ka +eK +jV +dv +Bq +KH +uu +Qj +Bq +Sx +sI +bK +bK +TC +ka +ka +ka +tW +tW +tW +ka +tW +tW +ka +ka +ka +ka +ka +sR +ka +Jv +ka +cE +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +SR +"} +(79,1,1) = {" +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +SR +cO +cO +cO +cO +cO +cO +cO +oa +th +ka +eK +Tq +hD +Bq +Bq +xO +uu +Bq +Bq +zg +bK +vM +VD +ka +ka +rD +ka +ka +ka +ka +ka +ka +ka +ka +ka +tW +ka +ka +ka +Oy +ka +cE +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +SR +"} +(80,1,1) = {" +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +SR +cO +cO +cO +cO +cO +cO +cO +oa +ka +ka +eK +Bz +Tb +UJ +Bq +aE +uu +KH +Bq +RF +YD +VD +ka +ka +ka +ka +ka +Rf +Tr +Tr +Tr +Zz +ka +ka +FO +uH +xP +ka +ka +ka +ka +cE +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +SR +"} +(81,1,1) = {" +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +SR +cO +cO +cO +cO +cO +cO +cO +wb +MT +ka +eK +eK +jV +ke +Bq +aE +uu +KH +eK +GY +ka +ka +ka +ka +th +ka +Rf +zK +OA +OA +OA +RB +Zz +Oy +oJ +iU +ka +ka +ka +YN +gL +VL +cO +cO +cO +cO +cO +cO +cO +SR +SR +SR +SR +SR +SR +SR +"} +(82,1,1) = {" +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +SR +cO +cO +cO +cO +cO +cO +cO +cO +oa +sz +AX +eK +IG +IG +eK +Bq +KH +Bq +eK +wI +ka +ka +ka +ka +ka +ka +rz +jq +OA +OA +OA +OA +ob +ka +ka +ka +ka +Zj +rD +gL +VL +cO +cO +cO +cO +cO +cO +cO +cO +SR +ot +ot +ot +ot +ot +ot +"} +(83,1,1) = {" +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +SR +cO +cO +cO +cO +cO +cO +cO +cO +wb +MT +ka +ka +ka +ka +ka +eK +eK +eK +kJ +ka +OV +ka +ka +ka +ka +ka +rQ +ww +OA +OA +OA +OA +py +ka +Dg +ka +ka +ka +ka +cE +cO +cO +cO +cO +cO +cO +cO +cO +cO +SR +ot +ot +ot +ot +ot +ot +"} +(84,1,1) = {" +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +SR +cO +cO +cO +cO +cO +cO +cO +cO +cO +wb +MT +ka +ka +ka +ka +ka +ka +sR +ka +ka +ka +ka +ka +ka +ka +KP +eK +eK +eK +eK +eK +eK +eK +Uk +ka +ka +ka +ka +gL +VL +cO +cO +cO +cO +cO +cO +cO +cO +cO +SR +ot +ot +ot +ot +ot +ot +"} +(85,1,1) = {" +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +SR +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +wb +MT +Oy +ka +ka +ka +ka +ka +ka +tW +tW +ka +tW +tW +Rf +eK +Bq +RP +YM +Ub +Mj +sV +fg +eK +ka +ka +gL +bY +VL +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +SR +ot +ot +ot +ot +ot +ot +"} +(86,1,1) = {" +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +SR +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +oa +th +ka +NZ +NZ +eK +ka +ka +ka +ka +ka +ka +ka +rz +Mo +Sx +jn +YZ +YZ +jn +YZ +QG +Bq +eK +bY +VL +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +SR +SR +SR +ot +ot +ot +ot +ot +ot +"} +(87,1,1) = {" +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +SR +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +wb +MT +ka +NZ +EA +xe +ka +ka +ef +ef +ef +ef +NC +ta +eK +DL +Dq +Dq +Dq +Dq +Dq +KS +QN +eK +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +SR +ot +ot +ot +ot +ot +ot +ot +ot +"} +(88,1,1) = {" +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +SR +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +wb +MT +eK +eK +eK +ka +oq +ka +ka +ka +ka +ka +ka +eK +Bq +Aj +Aj +Aj +Aj +Aj +Hd +hM +eK +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +SR +ot +ot +ot +ot +ot +ot +ot +ot +"} +(89,1,1) = {" +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +SR +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +wb +MT +PH +ka +ka +aZ +iY +ka +ka +ka +MX +ka +JU +eK +fJ +og +HP +HP +HP +HP +wC +eK +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +SR +SR +SR +ot +ot +ot +ot +ot +ot +ot +ot +"} +(90,1,1) = {" +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +SR +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +oa +ka +ka +Oy +ka +ka +ka +ka +nX +gL +Jw +VL +eK +HI +EQ +HP +HP +HP +HP +Bq +eK +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +SR +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +"} +(91,1,1) = {" +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +SR +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +wb +MT +gV +ka +ka +fv +gL +bY +bY +VL +cO +cO +eK +eK +Zs +Iw +Iw +Iw +eK +eK +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +SR +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +"} +(92,1,1) = {" +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +SR +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +wb +bY +bY +bY +bY +VL +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +SR +SR +SR +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +"} +(93,1,1) = {" +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +SR +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +SR +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +"} +(94,1,1) = {" +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +SR +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +SR +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +"} +(95,1,1) = {" +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +SR +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +SR +SR +SR +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +"} +(96,1,1) = {" +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +SR +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +SR +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +"} +(97,1,1) = {" +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +SR +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +cO +SR +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +"} +(98,1,1) = {" +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +SR +SR +SR +SR +SR +SR +SR +SR +SR +SR +SR +SR +SR +SR +SR +SR +SR +SR +SR +SR +SR +SR +SR +SR +SR +SR +SR +SR +SR +SR +SR +SR +SR +SR +SR +SR +SR +SR +SR +SR +SR +SR +SR +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +ot +"} diff --git a/_maps/virtual_domains/pirates.dmm b/_maps/virtual_domains/pirates.dmm index 1d330adcc4ddf..5ad9c23595d64 100644 --- a/_maps/virtual_domains/pirates.dmm +++ b/_maps/virtual_domains/pirates.dmm @@ -2,11 +2,14 @@ "af" = ( /obj/structure/flora/rock/pile/style_2, /turf/open/water/beach, -/area/virtual_domain/fullbright) +/area/virtual_domain/protected_space/fullbright) "al" = ( /obj/structure/flora/bush/sunny, /turf/open/misc/grass, /area/virtual_domain/fullbright) +"au" = ( +/turf/open/water/beach, +/area/virtual_domain/protected_space/fullbright) "bb" = ( /obj/effect/turf_decal/weather/sand, /turf/open/floor/wood, @@ -20,7 +23,7 @@ /obj/effect/turf_decal/weather/dirt, /obj/structure/flora/rock/pile, /turf/open/water/beach, -/area/virtual_domain/fullbright) +/area/virtual_domain/protected_space) "bI" = ( /obj/effect/turf_decal/siding/wood{ dir = 1 @@ -36,7 +39,7 @@ pixel_y = -3 }, /turf/open/floor/wood, -/area/virtual_domain/fullbright) +/area/virtual_domain/protected_space/fullbright) "cr" = ( /obj/item/stack/cannonball/shellball{ pixel_x = 13; @@ -48,7 +51,7 @@ }, /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/wood, -/area/virtual_domain/fullbright) +/area/virtual_domain/protected_space/fullbright) "cX" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/item/claymore/cutlass, @@ -70,7 +73,7 @@ }, /obj/effect/turf_decal/weather/dirt, /turf/open/water/beach, -/area/virtual_domain/fullbright) +/area/virtual_domain/protected_space) "dc" = ( /turf/open/misc/beach/coast/corner, /area/virtual_domain/fullbright) @@ -84,7 +87,7 @@ "eO" = ( /obj/structure/flora/rock/pile, /turf/open/water/beach, -/area/virtual_domain/fullbright) +/area/virtual_domain/protected_space/fullbright) "eP" = ( /obj/effect/turf_decal/weather/dirt{ dir = 4 @@ -92,14 +95,14 @@ /turf/open/misc/beach/coast{ dir = 6 }, -/area/virtual_domain/fullbright) +/area/virtual_domain/protected_space) "eS" = ( /turf/open/misc/beach/sand, /area/virtual_domain/fullbright) "fd" = ( /obj/structure/flora/grass/jungle/b, /turf/open/misc/dirt/jungle, -/area/virtual_domain/fullbright) +/area/virtual_domain/protected_space) "fh" = ( /obj/structure/flora/bush/sparsegrass, /obj/structure/flora/bush/lavendergrass, @@ -113,7 +116,7 @@ /obj/effect/turf_decal/siding/wood, /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/wood, -/area/virtual_domain/fullbright) +/area/virtual_domain/protected_space/fullbright) "fR" = ( /obj/effect/baseturf_helper/virtual_domain, /turf/closed/indestructible/binary, @@ -156,12 +159,12 @@ dir = 4 }, /turf/open/water/beach, -/area/virtual_domain/fullbright) +/area/virtual_domain/protected_space) "hq" = ( /obj/structure/closet/crate/grave, /obj/structure/flora/grass/jungle/b, /turf/open/misc/dirt/jungle, -/area/virtual_domain/fullbright) +/area/virtual_domain/protected_space) "jp" = ( /obj/effect/landmark/bitrunning/cache_spawn, /turf/open/misc/beach/sand, @@ -183,7 +186,7 @@ /obj/item/melee/energy/sword/pirate{ pixel_y = 10 }, -/obj/item/clothing/mask/cigarette/cigar{ +/obj/item/cigarette/cigar{ pixel_x = 4 }, /obj/item/lighter{ @@ -218,14 +221,14 @@ /turf/open/misc/beach/sand, /area/virtual_domain/fullbright) "nb" = ( -/obj/effect/turf_decal/weather/sand{ - dir = 9 - }, /obj/structure/fermenting_barrel{ pixel_x = 6; pixel_y = 11 }, -/obj/effect/mob_spawn/ghost_role/human/pirate/skeleton, +/obj/effect/turf_decal/weather/sand{ + dir = 9 + }, +/obj/effect/mob_spawn/ghost_role/human/virtual_domain/pirate, /turf/open/floor/wood{ icon_state = "wood_large" }, @@ -237,11 +240,14 @@ "nN" = ( /obj/structure/flora/rock, /turf/open/water/beach, -/area/virtual_domain/fullbright) +/area/virtual_domain/protected_space/fullbright) +"nQ" = ( +/turf/closed/wall/mineral/wood/nonmetal, +/area/virtual_domain/protected_space/fullbright) "oB" = ( /obj/structure/flora/grass/jungle, /turf/open/misc/dirt/jungle, -/area/virtual_domain/fullbright) +/area/virtual_domain/protected_space) "oL" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/structure/bed/maint, @@ -252,7 +258,7 @@ dir = 1 }, /turf/open/floor/wood, -/area/virtual_domain/fullbright) +/area/virtual_domain/protected_space/fullbright) "pi" = ( /obj/structure/flora/rock/style_3, /turf/open/water/beach, @@ -261,9 +267,12 @@ /obj/structure/flora/bush/flowers_br/style_random, /turf/open/misc/grass, /area/virtual_domain/fullbright) +"py" = ( +/turf/closed/indestructible/binary, +/area/virtual_domain/protected_space/fullbright) "qk" = ( /turf/open/misc/dirt/jungle, -/area/virtual_domain/fullbright) +/area/virtual_domain/protected_space) "qE" = ( /obj/structure/table/wood, /obj/item/book/manual/wiki/ordnance, @@ -284,7 +293,7 @@ "rm" = ( /obj/structure/closet/crate/goldcrate, /turf/open/misc/dirt/jungle, -/area/virtual_domain/fullbright) +/area/virtual_domain/protected_space) "rn" = ( /obj/effect/turf_decal/siding/wood{ dir = 1 @@ -303,7 +312,7 @@ pixel_x = -5 }, /turf/open/floor/wood, -/area/virtual_domain/fullbright) +/area/virtual_domain/protected_space/fullbright) "ru" = ( /obj/effect/mapping_helpers/broken_floor, /obj/effect/decal/cleanable/dirt/dust, @@ -315,6 +324,9 @@ /obj/item/toy/plush/beeplushie, /turf/open/floor/wood, /area/virtual_domain/fullbright) +"sb" = ( +/turf/open/water/beach, +/area/virtual_domain/protected_space) "sj" = ( /obj/effect/mine/explosive/light, /turf/open/misc/beach/sand, @@ -382,7 +394,7 @@ dir = 10 }, /turf/open/floor/wood, -/area/virtual_domain/fullbright) +/area/virtual_domain/protected_space/fullbright) "wj" = ( /obj/effect/turf_decal/siding/wood{ dir = 8 @@ -401,7 +413,7 @@ pixel_y = -1 }, /turf/open/misc/dirt/jungle, -/area/virtual_domain/fullbright) +/area/virtual_domain/protected_space) "wH" = ( /obj/structure/fluff/beach_umbrella{ pixel_x = -7; @@ -430,7 +442,7 @@ pixel_y = 10 }, /turf/open/misc/dirt/jungle, -/area/virtual_domain/fullbright) +/area/virtual_domain/protected_space) "zj" = ( /obj/effect/mapping_helpers/burnt_floor, /obj/effect/decal/cleanable/garbage, @@ -445,7 +457,7 @@ /obj/item/gun/energy/laser/retro, /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/wood, -/area/virtual_domain/fullbright) +/area/virtual_domain/protected_space/fullbright) "zR" = ( /obj/effect/baseturf_helper/virtual_domain, /turf/template_noop, @@ -508,7 +520,7 @@ pixel_y = 22 }, /turf/open/misc/dirt/jungle, -/area/virtual_domain/fullbright) +/area/virtual_domain/protected_space) "Ci" = ( /turf/closed/wall/mineral/wood/nonmetal, /area/virtual_domain/fullbright) @@ -524,12 +536,12 @@ "CL" = ( /obj/structure/flora/rock/pile/jungle/large, /turf/open/misc/dirt/jungle, -/area/virtual_domain/fullbright) +/area/virtual_domain/protected_space) "Dd" = ( /obj/effect/turf_decal/siding/wood, /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/wood, -/area/virtual_domain/fullbright) +/area/virtual_domain/protected_space/fullbright) "DM" = ( /turf/closed/mineral/random/jungle, /area/virtual_domain/fullbright) @@ -567,7 +579,7 @@ "Gl" = ( /obj/structure/flora/rock/pile/style_3, /turf/open/misc/dirt/jungle, -/area/virtual_domain/fullbright) +/area/virtual_domain/protected_space) "Gy" = ( /obj/structure/flora/rock/style_2, /turf/open/water/beach, @@ -583,16 +595,20 @@ }, /turf/open/floor/carpet/blue, /area/virtual_domain) +"Iv" = ( +/obj/structure/flora/rock/style_3, +/turf/open/water/beach, +/area/virtual_domain/protected_space/fullbright) "ID" = ( /obj/effect/landmark/bitrunning/cache_spawn, /turf/open/misc/dirt/jungle, -/area/virtual_domain/fullbright) +/area/virtual_domain/protected_space) "IW" = ( /obj/effect/turf_decal/weather/dirt{ dir = 5 }, /turf/open/water/beach, -/area/virtual_domain/fullbright) +/area/virtual_domain/protected_space) "Jf" = ( /obj/structure/flora/bush/sparsegrass, /turf/open/misc/grass, @@ -637,7 +653,10 @@ pixel_y = -4 }, /turf/open/misc/dirt/jungle, -/area/virtual_domain/fullbright) +/area/virtual_domain/protected_space) +"Li" = ( +/turf/closed/mineral/random/jungle, +/area/virtual_domain/protected_space/fullbright) "LC" = ( /mob/living/basic/trooper/pirate/melee, /turf/open/misc/grass, @@ -649,7 +668,7 @@ }, /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/wood, -/area/virtual_domain/fullbright) +/area/virtual_domain/protected_space/fullbright) "LP" = ( /obj/effect/turf_decal/weather/sand{ dir = 5 @@ -694,11 +713,11 @@ pixel_y = 18 }, /turf/open/misc/dirt/jungle, -/area/virtual_domain/fullbright) +/area/virtual_domain/protected_space) "Oi" = ( /obj/effect/mob_spawn/corpse/human/pirate, /turf/open/misc/dirt/jungle, -/area/virtual_domain/fullbright) +/area/virtual_domain/protected_space) "Ov" = ( /turf/open/misc/beach/coast{ dir = 6 @@ -714,7 +733,7 @@ "Oz" = ( /obj/structure/flora/rock/pile/jungle/style_2, /turf/open/misc/dirt/jungle, -/area/virtual_domain/fullbright) +/area/virtual_domain/protected_space) "OD" = ( /obj/effect/turf_decal/weather/sand{ dir = 6 @@ -726,7 +745,7 @@ dir = 1 }, /turf/open/water/beach, -/area/virtual_domain/fullbright) +/area/virtual_domain/protected_space) "Qc" = ( /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/wood{ @@ -736,12 +755,12 @@ "QF" = ( /obj/effect/turf_decal/weather/dirt, /turf/open/water/beach, -/area/virtual_domain/fullbright) +/area/virtual_domain/protected_space) "QG" = ( /obj/effect/turf_decal/weather/dirt, /obj/effect/turf_decal/weather/dirt, /turf/open/water/beach, -/area/virtual_domain/fullbright) +/area/virtual_domain/protected_space) "QN" = ( /obj/structure/barricade/sandbags, /obj/effect/turf_decal/weather/sand{ @@ -789,7 +808,7 @@ }, /obj/structure/closet/cabinet, /turf/open/floor/wood, -/area/virtual_domain/fullbright) +/area/virtual_domain/protected_space/fullbright) "RJ" = ( /obj/effect/turf_decal/siding/wood{ dir = 8 @@ -861,7 +880,7 @@ dir = 1 }, /turf/open/floor/wood, -/area/virtual_domain/fullbright) +/area/virtual_domain/protected_space/fullbright) "Vx" = ( /obj/structure/flora/rock/style_4, /turf/open/water/beach, @@ -869,7 +888,7 @@ "VE" = ( /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/wood, -/area/virtual_domain/fullbright) +/area/virtual_domain/protected_space/fullbright) "VG" = ( /obj/effect/turf_decal/siding/wood{ dir = 8 @@ -901,7 +920,7 @@ "Wx" = ( /obj/effect/turf_decal/siding/wood, /turf/open/floor/wood, -/area/virtual_domain/fullbright) +/area/virtual_domain/protected_space/fullbright) "WW" = ( /turf/template_noop, /area/virtual_domain/fullbright) @@ -932,7 +951,7 @@ /area/virtual_domain/fullbright) "Yy" = ( /turf/open/floor/wood, -/area/virtual_domain/fullbright) +/area/virtual_domain/protected_space/fullbright) "YJ" = ( /obj/structure/table/wood, /obj/effect/turf_decal/siding/wood{ @@ -1226,10 +1245,10 @@ DM hb hb hb -hb -hb -hb -hb +py +py +py +py xg xg xg @@ -1270,10 +1289,10 @@ DM hb hb DM -DM -DM -DM -hb +Li +Li +Li +py xg xg xg @@ -1314,10 +1333,10 @@ sj hb hb DM -DM -DM -DM -hb +Li +Li +Li +py xg xg xg @@ -1358,13 +1377,13 @@ mp Ov xp xp -xp -xp -xp -hb -hb -hb -hb +au +au +au +py +py +py +py xg xg xg @@ -1402,15 +1421,15 @@ xp xp xp NE -xp -xp -xp -xp -xp -Ci -hb -hb -hb +au +au +au +au +au +nQ +py +py +py xg xg xg @@ -1446,15 +1465,15 @@ xp xp xp Gy -xp -xp -xp -xp -xp -Ci +au +au +au +au +au +nQ bI VE -hb +py hb hb hb @@ -1490,12 +1509,12 @@ xp xp xp xp -xp -xp -xp -xp +au +au +au +au nN -Ci +nQ rn VE fw @@ -1534,12 +1553,12 @@ xp xp xp xp -xp -xp -xp -xp -pi -Ci +au +au +au +au +Iv +nQ QX Yy zk @@ -1578,13 +1597,13 @@ xp xp xp xp -xp -xp -xp -xp -xp -Ci -Ci +au +au +au +au +au +nQ +nQ Yy Dd ub @@ -1622,14 +1641,14 @@ xp xp xp xp -xp -xp -xp -xp -xp -xp -xp -xp +au +au +au +au +au +au +au +au Wx ub ub @@ -1666,15 +1685,15 @@ xp xp xp xp -xp -xp -xp -xp -xp -xp -xp -xp -xp +au +au +au +au +au +au +au +au +au ub ub ub @@ -1710,15 +1729,15 @@ xp xp xp xp -xp -xp -xp -xp -xp -xp -xp -xp -xp +au +au +au +au +au +au +au +au +au ub ub ub @@ -1754,15 +1773,15 @@ xp xp xp xp -xp -xp -xp -xp -xp -xp -xp +au +au +au +au +au +au +au Wx -xp +au ub ub ub @@ -1798,15 +1817,15 @@ xp xp xp xp -xp -xp -xp -xp -xp -xp -Ci +au +au +au +au +au +au +nQ fw -xp +au xp xp xp @@ -1842,12 +1861,12 @@ xp xp xp xp -xp -xp -xp -xp -xp -xp +au +au +au +au +au +au Uw cr vR @@ -1886,13 +1905,13 @@ xp xp xp xp -xp -xp -xp -xp -xp +au +au +au +au +au af -Ci +nQ LK fw xp @@ -1930,12 +1949,12 @@ xp xp xp xp -xp -xp -xp -xp -xp -xp +au +au +au +au +au +au oM VE eO @@ -1974,15 +1993,15 @@ xp xp xp xp -xp -xp -xp -xp -xp -xp -xp -xp -xp +au +au +au +au +au +au +au +au +au xp xp xp @@ -2018,15 +2037,15 @@ xp xp xp xp -xp -xp -xp -xp -xp -xp -xp -xp -xp +au +au +au +au +au +au +au +au +au xp xp xp @@ -2062,15 +2081,15 @@ xp xp xp xp -xp -xp -xp -xp -xp -xp -xp -xp -xp +au +au +au +au +au +au +au +au +au xp xp DM @@ -2098,7 +2117,7 @@ DM DM DM eP -xp +sb DM DM hb @@ -2106,15 +2125,15 @@ hb xp xp xp -xp -xp -xp -xp -xp -xp -xp -xp -xp +au +au +au +au +au +au +au +au +au hb DM DM @@ -2150,15 +2169,15 @@ hb hb xp xp -xp -xp -xp -xp -xp -xp -xp -xp -hb +au +au +au +au +au +au +au +au +py hb DM DM @@ -2194,15 +2213,15 @@ DM hb hb hb -hb -xp -xp -xp -xp -xp -xp -hb -hb +py +au +au +au +au +au +au +py +py hb hb hb @@ -2231,21 +2250,21 @@ DM DM qk IW -xp +sb DM DM DM DM DM DM -hb -hb -hb -hb -hb -hb -hb -hb +py +py +py +py +py +py +py +py xg xg xg @@ -2277,7 +2296,7 @@ Gl qk IW hn -xp +sb DM DM DM @@ -2322,7 +2341,7 @@ qk qk Oi OW -xp +sb be Oz DM @@ -2366,7 +2385,7 @@ DM qk CL IW -xp +sb QG qk rm diff --git a/_maps/virtual_domains/psyker_zombies.dmm b/_maps/virtual_domains/psyker_zombies.dmm index a20e260bbcf04..1d4307ebdcef8 100644 --- a/_maps/virtual_domains/psyker_zombies.dmm +++ b/_maps/virtual_domains/psyker_zombies.dmm @@ -19,7 +19,7 @@ "h" = ( /obj/structure/rack, /turf/open/indestructible/dark, -/area/ruin/space/has_grav/powered/virtual_domain) +/area/virtual_domain/protected_space) "i" = ( /obj/structure/sign/warning/directional/east, /turf/open/chasm, @@ -61,10 +61,20 @@ /obj/effect/mapping_helpers/airlock/abandoned, /turf/open/indestructible/dark, /area/ruin/space/has_grav/powered/virtual_domain) +"D" = ( +/turf/open/indestructible/dark, +/area/virtual_domain/protected_space) "F" = ( /obj/structure/mystery_box/guns, /turf/open/indestructible/dark, -/area/ruin/space/has_grav/powered/virtual_domain) +/area/virtual_domain/protected_space) +"I" = ( +/turf/closed/indestructible/binary, +/area/virtual_domain/protected_space) +"J" = ( +/obj/machinery/door/airlock/abductor, +/turf/open/indestructible/dark, +/area/virtual_domain/protected_space) "K" = ( /obj/effect/baseturf_helper/virtual_domain, /turf/closed/indestructible/binary, @@ -530,10 +540,10 @@ Y Y a Y -a -a -a -a +I +I +I +I a a a @@ -557,10 +567,10 @@ Y Y Y Y -a +I h -Y -Y +D +D t t t @@ -584,10 +594,10 @@ X Y Y Y -a +I F -Y -Y +D +D t t t @@ -611,10 +621,10 @@ a Y Y Y -a -Y -Y -Y +I +D +D +D t t t @@ -638,10 +648,10 @@ Y Y Y Y -T -Y -Y -Y +J +D +D +D t t t @@ -665,10 +675,10 @@ Y R Y Y -a -Y -Y -Y +I +D +D +D t t t @@ -692,10 +702,10 @@ Y Y Y Y -a +I F -Y -Y +D +D t t t @@ -719,10 +729,10 @@ a a Y Y -a +I h -Y -Y +D +D t t t @@ -746,10 +756,10 @@ a a a Y -a -a -a -a +I +I +I +I a a a diff --git a/_maps/virtual_domains/starfront_saloon.dmm b/_maps/virtual_domains/starfront_saloon.dmm deleted file mode 100644 index 277382b6dbbf2..0000000000000 --- a/_maps/virtual_domains/starfront_saloon.dmm +++ /dev/null @@ -1,1834 +0,0 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"ae" = ( -/obj/item/kirbyplants/random, -/obj/effect/turf_decal/tile/dark_red/half, -/turf/open/floor/sepia, -/area/virtual_domain) -"cK" = ( -/obj/effect/landmark/bitrunning/mob_segment, -/turf/template_noop, -/area/virtual_domain) -"cU" = ( -/turf/template_noop, -/area/virtual_domain/safehouse) -"df" = ( -/obj/effect/spawner/random/vending/snackvend, -/turf/open/floor/sepia, -/area/virtual_domain) -"do" = ( -/obj/effect/spawner/random/trash/garbage, -/turf/open/floor/sepia, -/area/virtual_domain) -"eU" = ( -/obj/effect/spawner/random/structure/crate, -/obj/machinery/light/small/directional/north, -/turf/open/floor/catwalk_floor, -/area/virtual_domain) -"gh" = ( -/obj/effect/spawner/random/vending/colavend, -/turf/open/floor/sepia, -/area/virtual_domain) -"hz" = ( -/obj/item/clothing/head/cowboy, -/obj/item/clothing/head/cowboy, -/obj/item/clothing/head/cowboy, -/obj/structure/closet, -/turf/template_noop, -/area/virtual_domain/safehouse) -"il" = ( -/turf/open/floor/sepia, -/area/virtual_domain) -"it" = ( -/obj/modular_map_root/generic{ - key = "station_medium" - }, -/turf/open/floor/sepia, -/area/virtual_domain) -"iJ" = ( -/obj/machinery/light/directional/south, -/obj/effect/spawner/random/structure/table, -/obj/effect/spawner/random/entertainment/plushie, -/obj/effect/turf_decal/tile/dark_red/half, -/turf/open/floor/sepia, -/area/virtual_domain) -"iO" = ( -/obj/effect/spawner/random/structure/crate, -/obj/effect/turf_decal/tile/dark_red/half, -/turf/open/floor/sepia, -/area/virtual_domain) -"jt" = ( -/obj/item/gun/energy/marksman_revolver{ - pixel_x = 8; - pixel_y = 4 - }, -/obj/item/gun/energy/marksman_revolver{ - pixel_x = 4 - }, -/obj/item/gun/energy/marksman_revolver{ - pixel_x = -4; - pixel_y = -4 - }, -/obj/structure/table, -/turf/template_noop, -/area/virtual_domain/safehouse) -"ma" = ( -/obj/machinery/light/directional/south, -/obj/effect/spawner/random/structure/table, -/obj/effect/spawner/random/decoration/generic, -/obj/effect/turf_decal/tile/dark_red/half, -/turf/open/floor/sepia, -/area/virtual_domain) -"mq" = ( -/obj/effect/baseturf_helper/virtual_domain, -/turf/closed/indestructible/binary, -/area/virtual_domain) -"mu" = ( -/turf/closed/wall, -/area/virtual_domain) -"on" = ( -/obj/structure/table/greyscale, -/obj/machinery/recharger{ - pixel_x = 8; - pixel_y = 4 - }, -/obj/machinery/recharger{ - pixel_x = -8; - pixel_y = 4 - }, -/turf/template_noop, -/area/virtual_domain/safehouse) -"oR" = ( -/obj/effect/spawner/random/structure/chair_maintenance{ - dir = 8 - }, -/turf/open/floor/sepia, -/area/virtual_domain) -"po" = ( -/obj/effect/baseturf_helper/virtual_domain, -/obj/modular_map_root/safehouse{ - key = "den" - }, -/turf/template_noop, -/area/virtual_domain/safehouse) -"sX" = ( -/obj/effect/spawner/random/decoration/statue, -/turf/open/floor/sepia, -/area/virtual_domain) -"uW" = ( -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/sepia, -/area/virtual_domain) -"ve" = ( -/obj/effect/spawner/random/trash/graffiti, -/turf/open/floor/catwalk_floor, -/area/virtual_domain) -"wB" = ( -/obj/effect/spawner/random/engineering/tank, -/obj/machinery/light/small/directional/north, -/turf/open/floor/catwalk_floor, -/area/virtual_domain) -"wK" = ( -/obj/machinery/light/small/directional/north, -/turf/open/floor/catwalk_floor, -/area/virtual_domain) -"yF" = ( -/obj/machinery/light/directional/south, -/obj/effect/spawner/random/structure/table, -/obj/effect/spawner/random/food_or_drink/snack, -/obj/effect/turf_decal/tile/dark_red/half, -/turf/open/floor/sepia, -/area/virtual_domain) -"zU" = ( -/obj/machinery/light/directional/south, -/obj/effect/spawner/random/structure/table, -/obj/effect/turf_decal/tile/dark_red/half, -/obj/machinery/recharger{ - pixel_x = 8; - pixel_y = 4 - }, -/turf/open/floor/sepia, -/area/virtual_domain) -"Au" = ( -/obj/effect/spawner/random/trash/garbage, -/obj/machinery/light/small/directional/north, -/turf/open/floor/catwalk_floor, -/area/virtual_domain) -"AF" = ( -/obj/effect/turf_decal/tile/dark_red/half, -/obj/effect/turf_decal/tile/dark_red/half, -/turf/open/floor/sepia, -/area/virtual_domain) -"Bi" = ( -/obj/effect/spawner/random/structure/chair_maintenance{ - dir = 4 - }, -/turf/open/floor/sepia, -/area/virtual_domain) -"BX" = ( -/obj/effect/spawner/random/trash/graffiti, -/obj/effect/turf_decal/tile/dark_red/half, -/turf/open/floor/sepia, -/area/virtual_domain) -"Ey" = ( -/obj/machinery/light/directional/south, -/obj/effect/spawner/random/structure/table, -/obj/effect/spawner/random/decoration/ornament, -/obj/effect/turf_decal/tile/dark_red/half, -/turf/open/floor/sepia, -/area/virtual_domain) -"EK" = ( -/obj/effect/spawner/random/structure/chair_maintenance{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/sepia, -/area/virtual_domain) -"Gz" = ( -/obj/effect/spawner/random/structure/crate, -/obj/effect/turf_decal/tile/dark_red/half, -/obj/effect/spawner/random/armory/shotgun, -/turf/open/floor/sepia, -/area/virtual_domain) -"GY" = ( -/obj/effect/spawner/random/entertainment/arcade, -/turf/open/floor/sepia, -/area/virtual_domain) -"Ib" = ( -/obj/effect/spawner/random/trash/bin, -/turf/open/floor/sepia, -/area/virtual_domain) -"Il" = ( -/obj/effect/turf_decal/tile/dark_red/half, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/sepia, -/area/virtual_domain) -"Ix" = ( -/obj/structure/closet, -/obj/effect/spawner/random/maintenance/three, -/obj/effect/spawner/random/exotic/antag_gear, -/obj/machinery/light/small/directional/north, -/turf/open/floor/catwalk_floor, -/area/virtual_domain) -"Ja" = ( -/turf/closed/indestructible/binary, -/area/virtual_domain) -"JA" = ( -/obj/effect/spawner/random/structure/crate, -/turf/open/floor/catwalk_floor, -/area/virtual_domain) -"KD" = ( -/obj/effect/landmark/bitrunning/cache_spawn, -/turf/template_noop, -/area/virtual_domain) -"KN" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/virtual_domain) -"Lu" = ( -/obj/structure/table/greyscale, -/obj/machinery/recharger{ - pixel_x = 8; - pixel_y = 4 - }, -/obj/machinery/recharger{ - pixel_x = -8; - pixel_y = 4 - }, -/obj/effect/turf_decal/tile/dark_red/half, -/obj/machinery/light/directional/south, -/turf/open/floor/sepia, -/area/virtual_domain) -"MG" = ( -/obj/effect/spawner/random/trash/graffiti, -/obj/machinery/light/small/directional/north, -/turf/open/floor/catwalk_floor, -/area/virtual_domain) -"Oq" = ( -/obj/machinery/light/small/directional/south, -/turf/open/floor/sepia, -/area/virtual_domain) -"Ox" = ( -/obj/structure/closet, -/obj/effect/spawner/random/maintenance/five, -/obj/effect/spawner/random/armory/laser_gun, -/obj/machinery/light/small/directional/north, -/turf/open/floor/catwalk_floor, -/area/virtual_domain) -"OX" = ( -/turf/open/floor/catwalk_floor, -/area/virtual_domain) -"OZ" = ( -/obj/effect/spawner/random/structure/billboard, -/turf/open/floor/sepia, -/area/virtual_domain) -"PE" = ( -/turf/template_noop, -/area/virtual_domain) -"Qi" = ( -/obj/modular_map_root/generic{ - key = "station_small" - }, -/turf/open/floor/sepia, -/area/virtual_domain) -"QM" = ( -/obj/modular_map_root/generic{ - key = "station_large" - }, -/turf/open/floor/sepia, -/area/virtual_domain) -"QO" = ( -/obj/machinery/light/directional/east, -/turf/open/floor/sepia, -/area/virtual_domain) -"Rk" = ( -/obj/effect/spawner/random/trash/graffiti, -/turf/open/floor/sepia, -/area/virtual_domain) -"Te" = ( -/obj/machinery/light/directional/south, -/obj/effect/spawner/random/structure/table, -/obj/effect/spawner/random/engineering/toolbox, -/obj/effect/turf_decal/tile/dark_red/half, -/turf/open/floor/sepia, -/area/virtual_domain) -"Tn" = ( -/turf/open/space/basic, -/area/virtual_domain) -"TM" = ( -/obj/machinery/light/directional/south, -/obj/effect/turf_decal/tile/dark_red/half, -/turf/open/floor/sepia, -/area/virtual_domain) -"VX" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/sepia, -/area/virtual_domain) -"Wd" = ( -/obj/effect/turf_decal/tile/dark_red/half, -/turf/open/floor/sepia, -/area/virtual_domain) -"Wp" = ( -/obj/effect/landmark/bitrunning/mob_segment, -/turf/open/floor/sepia, -/area/virtual_domain) - -(1,1,1) = {" -Ja -Ja -Ja -Ja -Ja -Ja -Ja -Ja -Ja -Ja -Ja -Ja -Ja -Ja -Ja -Ja -mq -"} -(2,1,1) = {" -Ja -il -il -il -il -mu -df -il -cU -cU -cU -cU -cU -po -il -OX -Ja -"} -(3,1,1) = {" -Ja -mu -mu -mu -mu -mu -il -il -cU -jt -on -hz -cU -cU -il -OX -Ja -"} -(4,1,1) = {" -Ja -OX -OX -OX -OX -OX -Qi -il -cU -cU -cU -cU -cU -cU -il -OX -Ja -"} -(5,1,1) = {" -Ja -PE -PE -PE -PE -PE -gh -il -cU -cU -cU -cU -cU -cU -il -OX -Ja -"} -(6,1,1) = {" -Ja -PE -PE -PE -PE -PE -il -il -cU -cU -cU -cU -cU -cU -il -OX -Ja -"} -(7,1,1) = {" -Ja -PE -PE -PE -PE -PE -il -il -cU -cU -cU -cU -cU -cU -il -OX -Ja -"} -(8,1,1) = {" -Ja -PE -PE -PE -PE -PE -il -il -cU -cU -cU -cU -cU -cU -il -il -Ja -"} -(9,1,1) = {" -Ja -PE -PE -PE -PE -PE -il -il -il -il -il -il -il -il -il -il -Ja -"} -(10,1,1) = {" -Ja -Ix -OX -OX -OX -OX -il -il -it -il -il -il -TM -mu -KN -KN -Ja -"} -(11,1,1) = {" -Ja -PE -PE -PE -PE -PE -PE -PE -Ib -il -il -il -ae -KN -Tn -Tn -Ja -"} -(12,1,1) = {" -Ja -PE -PE -PE -PE -PE -PE -PE -il -il -il -il -Wd -KN -Tn -Tn -Ja -"} -(13,1,1) = {" -Ja -PE -PE -PE -PE -PE -PE -PE -il -il -il -il -Il -KN -Tn -Tn -Ja -"} -(14,1,1) = {" -Ja -PE -PE -PE -cK -PE -PE -PE -il -il -il -il -Wd -KN -Tn -Tn -Ja -"} -(15,1,1) = {" -Ja -PE -PE -PE -PE -PE -PE -PE -il -il -il -il -Wd -KN -Tn -Tn -Ja -"} -(16,1,1) = {" -Ja -PE -PE -PE -PE -PE -PE -PE -VX -il -il -il -Wd -KN -Tn -Tn -Ja -"} -(17,1,1) = {" -Ja -PE -PE -PE -PE -PE -PE -PE -il -il -il -il -Wd -KN -Tn -Tn -Ja -"} -(18,1,1) = {" -Ja -Au -OX -OX -OX -OX -il -il -it -il -sX -il -iO -KN -Tn -Tn -Ja -"} -(19,1,1) = {" -Ja -PE -PE -PE -PE -PE -PE -PE -il -il -il -il -Te -mu -Tn -Tn -Ja -"} -(20,1,1) = {" -Ja -PE -PE -PE -PE -PE -PE -PE -il -il -il -il -Wd -KN -Tn -Tn -Ja -"} -(21,1,1) = {" -Ja -PE -PE -PE -PE -PE -PE -PE -il -il -il -il -AF -KN -Tn -Tn -Ja -"} -(22,1,1) = {" -Ja -PE -PE -PE -cK -PE -PE -PE -il -il -il -il -Wd -KN -Tn -Tn -Ja -"} -(23,1,1) = {" -Ja -PE -KD -PE -PE -PE -PE -PE -il -il -il -Wp -Wd -KN -Tn -Tn -Ja -"} -(24,1,1) = {" -Ja -PE -PE -PE -PE -PE -PE -PE -il -il -il -il -Wd -KN -Tn -Tn -Ja -"} -(25,1,1) = {" -Ja -PE -PE -PE -PE -PE -PE -PE -il -il -VX -il -Wd -KN -Tn -Tn -Ja -"} -(26,1,1) = {" -Ja -wB -OX -OX -OX -OX -il -il -it -il -il -il -Wd -KN -Tn -Tn -Ja -"} -(27,1,1) = {" -Ja -PE -PE -PE -PE -PE -PE -PE -Ib -il -il -il -iJ -mu -Tn -Tn -Ja -"} -(28,1,1) = {" -Ja -PE -KD -PE -PE -PE -PE -PE -il -uW -il -il -ae -KN -Tn -Tn -Ja -"} -(29,1,1) = {" -Ja -PE -PE -PE -PE -PE -PE -PE -il -oR -oR -il -Wd -KN -Tn -Tn -Ja -"} -(30,1,1) = {" -Ja -PE -PE -PE -cK -PE -PE -PE -Oq -mu -mu -il -Wd -KN -Tn -Tn -Ja -"} -(31,1,1) = {" -Ja -PE -PE -PE -PE -PE -PE -PE -il -Bi -EK -il -Wd -KN -Tn -Tn -Ja -"} -(32,1,1) = {" -Ja -PE -PE -PE -PE -PE -PE -PE -il -il -il -il -Wd -KN -Tn -Tn -Ja -"} -(33,1,1) = {" -Ja -PE -PE -PE -PE -PE -PE -PE -il -il -il -il -Wd -KN -Tn -Tn -Ja -"} -(34,1,1) = {" -Ja -wK -ve -OX -OX -OX -VX -il -it -il -il -il -Wd -KN -Tn -Tn -Ja -"} -(35,1,1) = {" -Ja -PE -PE -PE -PE -PE -PE -PE -il -il -OZ -il -zU -mu -Tn -Tn -Ja -"} -(36,1,1) = {" -Ja -PE -PE -PE -PE -PE -PE -PE -il -il -il -il -Wd -KN -Tn -Tn -Ja -"} -(37,1,1) = {" -Ja -PE -PE -PE -PE -PE -PE -PE -VX -il -il -il -Wd -KN -Tn -Tn -Ja -"} -(38,1,1) = {" -Ja -PE -PE -PE -cK -PE -PE -PE -il -il -il -il -Wd -KN -Tn -Tn -Ja -"} -(39,1,1) = {" -Ja -PE -KD -PE -PE -PE -PE -PE -il -il -il -il -Wd -KN -Tn -Tn -Ja -"} -(40,1,1) = {" -Ja -PE -PE -PE -PE -PE -PE -PE -il -il -il -il -Wd -KN -Tn -Tn -Ja -"} -(41,1,1) = {" -Ja -PE -PE -PE -PE -PE -PE -PE -il -uW -il -il -Wd -KN -Tn -Tn -Ja -"} -(42,1,1) = {" -Ja -Ox -OX -OX -OX -OX -il -il -it -uW -il -Wp -Gz -KN -Tn -Tn -Ja -"} -(43,1,1) = {" -Ja -PE -PE -PE -PE -PE -PE -PE -il -uW -il -il -Lu -mu -Tn -Tn -Ja -"} -(44,1,1) = {" -Ja -PE -PE -PE -PE -PE -PE -PE -do -il -il -il -ae -KN -Tn -Tn -Ja -"} -(45,1,1) = {" -Ja -PE -PE -PE -PE -PE -PE -PE -il -il -il -il -Wd -KN -Tn -Tn -Ja -"} -(46,1,1) = {" -Ja -PE -KD -PE -cK -PE -PE -PE -il -il -il -VX -Wd -KN -Tn -Tn -Ja -"} -(47,1,1) = {" -Ja -PE -PE -PE -PE -KD -PE -PE -il -il -il -il -Wd -KN -Tn -Tn -Ja -"} -(48,1,1) = {" -Ja -PE -PE -PE -PE -PE -PE -PE -il -il -il -il -Wd -KN -Tn -Tn -Ja -"} -(49,1,1) = {" -Ja -PE -PE -PE -PE -PE -PE -PE -Ib -il -il -il -Wd -KN -Tn -Tn -Ja -"} -(50,1,1) = {" -Ja -MG -OX -OX -OX -OX -VX -il -il -il -QM -il -Wd -KN -Tn -Tn -Ja -"} -(51,1,1) = {" -Ja -PE -PE -PE -PE -PE -PE -PE -PE -PE -il -il -yF -mu -Tn -Tn -Ja -"} -(52,1,1) = {" -Ja -PE -KD -PE -PE -PE -PE -PE -PE -PE -il -il -Wd -KN -Tn -Tn -Ja -"} -(53,1,1) = {" -Ja -PE -PE -cK -PE -PE -KD -PE -PE -PE -uW -il -Wd -KN -Tn -Tn -Ja -"} -(54,1,1) = {" -Ja -PE -PE -PE -PE -PE -PE -PE -PE -PE -uW -il -Wd -KN -Tn -Tn -Ja -"} -(55,1,1) = {" -Ja -PE -PE -PE -PE -PE -PE -PE -PE -PE -il -il -Wd -KN -Tn -Tn -Ja -"} -(56,1,1) = {" -Ja -PE -PE -PE -PE -PE -cK -PE -PE -PE -il -il -Wd -KN -Tn -Tn -Ja -"} -(57,1,1) = {" -Ja -PE -KD -PE -PE -PE -KD -PE -PE -PE -il -il -Wd -KN -Tn -Tn -Ja -"} -(58,1,1) = {" -Ja -PE -PE -PE -PE -PE -PE -PE -PE -PE -GY -il -Wd -KN -Tn -Tn -Ja -"} -(59,1,1) = {" -Ja -PE -PE -PE -PE -PE -PE -PE -PE -PE -il -il -Wd -KN -Tn -Tn -Ja -"} -(60,1,1) = {" -Ja -eU -OX -OX -OX -OX -il -il -it -il -il -il -Wd -KN -Tn -Tn -Ja -"} -(61,1,1) = {" -Ja -PE -PE -PE -PE -PE -PE -PE -Ib -il -il -il -Ey -mu -Tn -Tn -Ja -"} -(62,1,1) = {" -Ja -PE -PE -KD -PE -PE -PE -PE -do -il -il -VX -ae -KN -Tn -Tn -Ja -"} -(63,1,1) = {" -Ja -PE -PE -PE -PE -PE -PE -PE -il -il -il -il -Wd -KN -Tn -Tn -Ja -"} -(64,1,1) = {" -Ja -PE -PE -PE -cK -PE -PE -PE -il -il -Wp -il -Wd -KN -Tn -Tn -Ja -"} -(65,1,1) = {" -Ja -PE -KD -PE -PE -KD -PE -PE -il -il -sX -il -Wd -KN -Tn -Tn -Ja -"} -(66,1,1) = {" -Ja -PE -PE -PE -PE -PE -PE -PE -il -il -il -il -Wd -KN -Tn -Tn -Ja -"} -(67,1,1) = {" -Ja -PE -PE -PE -PE -PE -PE -PE -Rk -il -il -uW -Wd -KN -Tn -Tn -Ja -"} -(68,1,1) = {" -Ja -wB -OX -OX -OX -OX -VX -il -il -il -QM -uW -Wd -KN -Tn -Tn -Ja -"} -(69,1,1) = {" -Ja -PE -PE -PE -PE -PE -PE -PE -PE -PE -il -il -ma -mu -Tn -Tn -Ja -"} -(70,1,1) = {" -Ja -PE -PE -PE -PE -PE -PE -PE -PE -PE -il -il -Wd -KN -Tn -Tn -Ja -"} -(71,1,1) = {" -Ja -PE -PE -KD -PE -PE -PE -KD -PE -PE -il -uW -Wd -KN -Tn -Tn -Ja -"} -(72,1,1) = {" -Ja -PE -PE -PE -PE -PE -PE -PE -PE -PE -il -il -Wd -KN -Tn -Tn -Ja -"} -(73,1,1) = {" -Ja -PE -PE -cK -PE -PE -PE -PE -PE -PE -il -il -Wd -KN -Tn -Tn -Ja -"} -(74,1,1) = {" -Ja -PE -PE -PE -PE -PE -cK -PE -PE -PE -il -il -Wd -KN -Tn -Tn -Ja -"} -(75,1,1) = {" -Ja -PE -KD -PE -PE -PE -KD -PE -PE -PE -il -il -Wd -KN -Tn -Tn -Ja -"} -(76,1,1) = {" -Ja -PE -PE -PE -PE -PE -PE -PE -PE -PE -il -il -Wd -KN -Tn -Tn -Ja -"} -(77,1,1) = {" -Ja -PE -PE -PE -PE -PE -PE -PE -PE -PE -il -VX -BX -KN -Tn -Tn -Ja -"} -(78,1,1) = {" -Ja -eU -JA -OX -OX -OX -OX -OX -OX -il -QO -il -Wd -KN -Tn -Tn -Ja -"} -(79,1,1) = {" -Ja -mu -mu -mu -mu -mu -mu -mu -mu -mu -mu -mu -mu -mu -Tn -Tn -Ja -"} -(80,1,1) = {" -Ja -Ja -Ja -Ja -Ja -Ja -Ja -Ja -Ja -Ja -Ja -Ja -Ja -Ja -Ja -Ja -Ja -"} diff --git a/_maps/virtual_domains/syndicate_assault.dmm b/_maps/virtual_domains/syndicate_assault.dmm index d3cb42a8eeb56..a40945410c11b 100644 --- a/_maps/virtual_domains/syndicate_assault.dmm +++ b/_maps/virtual_domains/syndicate_assault.dmm @@ -26,7 +26,7 @@ /obj/item/stack/sheet/glass/fifty, /obj/item/stack/rods/fifty, /turf/open/floor/pod/dark, -/area/ruin/space/has_grav/powered/virtual_domain) +/area/virtual_domain/protected_space) "aO" = ( /obj/machinery/recharge_station, /turf/open/floor/mineral/plastitanium, @@ -44,7 +44,7 @@ /area/ruin/space/has_grav/powered/virtual_domain) "bG" = ( /turf/open/floor/pod/dark, -/area/ruin/space/has_grav/powered/virtual_domain) +/area/virtual_domain/protected_space) "cc" = ( /obj/structure/closet/crate/secure/gear{ req_access = list("syndicate") @@ -55,7 +55,7 @@ "cj" = ( /obj/structure/transit_tube/crossing, /turf/closed/wall/r_wall/syndicate, -/area/ruin/space/has_grav/powered/virtual_domain) +/area/virtual_domain/protected_space) "ct" = ( /obj/structure/closet/syndicate{ anchored = 1; @@ -65,6 +65,7 @@ req_access = list("syndicate"); secure = 1 }, +/obj/item/gun/ballistic/automatic/pistol, /turf/open/floor/mineral/plastitanium/red, /area/ruin/space/has_grav/powered/virtual_domain) "cw" = ( @@ -115,7 +116,7 @@ /obj/item/gun/ballistic/automatic/l6_saw/unrestricted, /obj/item/ammo_box/magazine/m7mm, /turf/open/floor/mineral/plastitanium, -/area/ruin/space/has_grav/powered/virtual_domain) +/area/virtual_domain/protected_space) "da" = ( /obj/machinery/stasis, /turf/open/floor/plastic, @@ -132,6 +133,9 @@ /obj/item/paper/fluff/ruins/forgottenship/powerissues, /turf/open/floor/mineral/plastitanium/red, /area/ruin/space/has_grav/powered/virtual_domain) +"dp" = ( +/turf/open/floor/mineral/plastitanium, +/area/virtual_domain/protected_space) "dw" = ( /obj/machinery/light/small/directional/south, /turf/open/floor/mineral/plastitanium, @@ -164,11 +168,11 @@ /obj/item/card/id/advanced/black/syndicate_command/crew_id, /obj/item/card/id/advanced/black/syndicate_command/crew_id, /turf/open/floor/mineral/plastitanium, -/area/ruin/space/has_grav/powered/virtual_domain) +/area/virtual_domain/protected_space) "fd" = ( /obj/structure/transit_tube/crossing, /turf/open/space/basic, -/area/space) +/area/virtual_domain/protected_space) "fG" = ( /obj/structure/toilet{ dir = 1 @@ -185,7 +189,7 @@ /turf/open/floor/mineral/plastitanium/red, /area/ruin/space/has_grav/powered/virtual_domain) "gD" = ( -/obj/effect/mob_spawn/ghost_role/human/syndicatespace, +/obj/effect/mob_spawn/ghost_role/human/virtual_domain/syndie, /turf/open/floor/mineral/plastitanium, /area/ruin/space/has_grav/powered/virtual_domain) "hg" = ( @@ -221,7 +225,7 @@ "iL" = ( /obj/structure/sign/departments/cargo, /turf/closed/wall/r_wall/syndicate, -/area/ruin/space/has_grav/powered/virtual_domain) +/area/virtual_domain/protected_space) "iU" = ( /obj/structure/closet/crate/secure/gear{ req_access = list("syndicate") @@ -229,7 +233,7 @@ /obj/item/melee/energy/sword/saber/red, /obj/machinery/light/small/directional/north, /turf/open/floor/pod/dark, -/area/ruin/space/has_grav/powered/virtual_domain) +/area/virtual_domain/protected_space) "iW" = ( /obj/structure/table/reinforced, /obj/machinery/button/door{ @@ -292,16 +296,6 @@ }, /turf/open/floor/mineral/plastitanium, /area/ruin/space/has_grav/powered/virtual_domain) -"ki" = ( -/obj/structure/table/reinforced, -/obj/machinery/computer/security/telescreen/interrogation{ - name = "Cameras monitor"; - network = list("fsci"); - req_access = list("syndicate"); - screen_loc = "" - }, -/turf/open/floor/mineral/plastitanium, -/area/ruin/space/has_grav/powered/virtual_domain) "kI" = ( /obj/machinery/computer/atmos_alert{ dir = 8 @@ -319,7 +313,7 @@ dir = 4 }, /turf/open/floor/mineral/plastitanium, -/area/ruin/space/has_grav/powered/virtual_domain) +/area/virtual_domain/protected_space) "ln" = ( /obj/machinery/turretid{ control_area = "/area/ruin/space/has_grav/syndicate_forgotten_ship"; @@ -350,6 +344,10 @@ }, /turf/open/floor/mineral/plastitanium/red, /area/ruin/space/has_grav/powered/virtual_domain) +"mA" = ( +/obj/machinery/light/small/directional/south, +/turf/open/floor/mineral/plastitanium, +/area/virtual_domain/protected_space) "mD" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden{ dir = 10 @@ -357,12 +355,19 @@ /obj/item/wrench, /turf/open/floor/mineral/plastitanium/red, /area/ruin/space/has_grav/powered/virtual_domain) +"mL" = ( +/obj/structure/tank_dispenser/oxygen, +/turf/open/floor/mineral/plastitanium, +/area/virtual_domain/protected_space) "nk" = ( /obj/machinery/power/apc/auto_name/directional/north, /obj/effect/mapping_helpers/apc/syndicate_access, /obj/structure/cable, /turf/open/floor/mineral/plastitanium, /area/ruin/space/has_grav/powered/virtual_domain) +"nn" = ( +/turf/closed/mineral/random, +/area/virtual_domain/protected_space) "nB" = ( /turf/closed/mineral/random, /area/space) @@ -374,6 +379,11 @@ /obj/structure/sign/poster/contraband/syndicate_pistol, /turf/closed/wall/r_wall/syndicate, /area/ruin/space/has_grav/powered/virtual_domain) +"og" = ( +/obj/structure/table/reinforced, +/obj/item/reagent_containers/cup/glass/trophy/silver_cup, +/turf/open/floor/mineral/plastitanium/red, +/area/ruin/space/has_grav/powered/virtual_domain) "oM" = ( /obj/structure/cable, /turf/open/floor/mineral/plastitanium, @@ -428,7 +438,7 @@ "qU" = ( /obj/structure/sign/poster/contraband/c20r, /turf/closed/wall/r_wall/syndicate, -/area/ruin/space/has_grav/powered/virtual_domain) +/area/virtual_domain/protected_space) "qY" = ( /obj/machinery/light/small/directional/south, /obj/effect/landmark/bitrunning/cache_spawn, @@ -462,14 +472,14 @@ /turf/open/floor/mineral/plastitanium/red, /area/ruin/space/has_grav/powered/virtual_domain) "rP" = ( -/obj/effect/mob_spawn/ghost_role/human/syndicatespace, /obj/machinery/light/small/directional/south, +/obj/effect/mob_spawn/ghost_role/human/virtual_domain/syndie, /turf/open/floor/mineral/plastitanium, /area/ruin/space/has_grav/powered/virtual_domain) "sg" = ( /obj/machinery/ore_silo, /turf/open/floor/mineral/plastitanium, -/area/ruin/space/has_grav/powered/virtual_domain) +/area/virtual_domain/protected_space) "sq" = ( /obj/machinery/door/window/left/directional/south{ name = "Control Room"; @@ -484,10 +494,16 @@ /turf/open/floor/mineral/plastitanium/red, /area/ruin/space/has_grav/powered/virtual_domain) "sH" = ( -/obj/structure/displaycase{ +/obj/structure/closet/syndicate{ + anchored = 1; + desc = "A basic closet for all your villainous needs."; + locked = 1; + name = "Closet"; req_access = list("syndicate"); - start_showpiece_type = /obj/item/gun/ballistic/automatic/pistol/deagle/camo + secure = 1 }, +/obj/item/ammo_box/c9mm, +/obj/item/gun/ballistic/automatic/pistol, /turf/open/floor/mineral/plastitanium/red, /area/ruin/space/has_grav/powered/virtual_domain) "sK" = ( @@ -501,7 +517,7 @@ amount = 15 }, /turf/open/floor/pod/dark, -/area/ruin/space/has_grav/powered/virtual_domain) +/area/virtual_domain/protected_space) "sL" = ( /obj/structure/chair/comfy, /turf/open/floor/mineral/plastitanium, @@ -573,7 +589,7 @@ /obj/item/storage/medkit/regular, /obj/machinery/light/small/directional/north, /turf/open/floor/mineral/plastitanium, -/area/ruin/space/has_grav/powered/virtual_domain) +/area/virtual_domain/protected_space) "xJ" = ( /obj/structure/closet/syndicate{ anchored = 1; @@ -586,6 +602,9 @@ /obj/item/ammo_box/c9mm, /turf/open/floor/mineral/plastitanium/red, /area/ruin/space/has_grav/powered/virtual_domain) +"xS" = ( +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/space/has_grav/powered/virtual_domain) "yl" = ( /obj/machinery/door/airlock/grunge{ name = "Captain's Room" @@ -638,6 +657,9 @@ }, /turf/open/floor/mineral/plastitanium/red, /area/ruin/space/has_grav/powered/virtual_domain) +"zN" = ( +/turf/closed/wall/r_wall/syndicate, +/area/virtual_domain/protected_space) "Aa" = ( /obj/structure/chair/comfy/shuttle, /turf/open/floor/mineral/plastitanium, @@ -645,7 +667,7 @@ "Bm" = ( /obj/effect/baseturf_helper/virtual_domain, /turf/closed/indestructible/syndicate, -/area/ruin/space/has_grav/powered/virtual_domain) +/area/virtual_domain/protected_space) "BK" = ( /obj/structure/lattice/catwalk, /obj/structure/cable, @@ -671,6 +693,7 @@ /obj/item/crowbar/red, /obj/item/ammo_box/magazine/m9mm_aps, /obj/item/ammo_box/magazine/m9mm_aps, +/obj/item/gun/ballistic/automatic/pistol, /turf/open/floor/carpet/royalblack, /area/ruin/space/has_grav/powered/virtual_domain) "Cn" = ( @@ -717,7 +740,7 @@ /obj/item/ammo_box/magazine/smgm45, /obj/item/gun/ballistic/automatic/c20r/unrestricted, /turf/open/floor/mineral/plastitanium, -/area/ruin/space/has_grav/powered/virtual_domain) +/area/virtual_domain/protected_space) "DA" = ( /obj/structure/closet/crate/secure/gear{ req_access = list("syndicate") @@ -790,7 +813,7 @@ /turf/open/floor/mineral/plastitanium/red, /area/ruin/space/has_grav/powered/virtual_domain) "Ia" = ( -/obj/effect/mob_spawn/ghost_role/human/syndicatespace/captain, +/obj/effect/mob_spawn/ghost_role/human/virtual_domain/syndie, /turf/open/floor/carpet/royalblack, /area/ruin/space/has_grav/powered/virtual_domain) "Id" = ( @@ -831,6 +854,7 @@ /obj/structure/table/reinforced, /obj/item/paper, /obj/item/pen, +/obj/machinery/computer/security/telescreen/forgotten_ship/sci/directional/south, /turf/open/floor/carpet/royalblack, /area/ruin/space/has_grav/powered/virtual_domain) "IH" = ( @@ -841,7 +865,7 @@ /obj/structure/cable, /obj/structure/fans/tiny, /turf/open/floor/plating, -/area/ruin/space/has_grav/powered/virtual_domain) +/area/virtual_domain/protected_space) "IV" = ( /obj/machinery/door/airlock/grunge{ name = "Syndicate Ship Airlock" @@ -885,7 +909,7 @@ "Lk" = ( /obj/structure/transit_tube/crossing, /turf/closed/mineral/random, -/area/space) +/area/virtual_domain/protected_space) "Lo" = ( /obj/structure/filingcabinet, /obj/machinery/door/window/left/directional/west{ @@ -894,6 +918,10 @@ }, /turf/open/floor/mineral/plastitanium/red, /area/ruin/space/has_grav/powered/virtual_domain) +"LB" = ( +/obj/structure/cable, +/turf/open/floor/mineral/plastitanium, +/area/virtual_domain/protected_space) "Mc" = ( /obj/structure/closet/syndicate{ anchored = 1; @@ -906,6 +934,7 @@ /obj/item/crowbar/red, /obj/item/ammo_box/magazine/m9mm, /obj/item/ammo_box/magazine/m9mm, +/obj/item/gun/ballistic/automatic/pistol, /turf/open/floor/mineral/plastitanium, /area/ruin/space/has_grav/powered/virtual_domain) "Mm" = ( @@ -938,7 +967,7 @@ req_access = list("syndicate") }, /turf/open/floor/pod/dark, -/area/ruin/space/has_grav/powered/virtual_domain) +/area/virtual_domain/protected_space) "Nr" = ( /obj/structure/closet/crate/secure/gear{ req_access = list("syndicate") @@ -951,14 +980,14 @@ }, /obj/machinery/light/small/directional/south, /turf/open/floor/pod/dark, -/area/ruin/space/has_grav/powered/virtual_domain) +/area/virtual_domain/protected_space) "Of" = ( /obj/structure/closet/crate/secure/gear{ req_access = list("syndicate") }, /obj/item/disk/surgery/forgottenship, /turf/open/floor/pod/dark, -/area/ruin/space/has_grav/powered/virtual_domain) +/area/virtual_domain/protected_space) "Ox" = ( /obj/machinery/atmospherics/components/unary/vent_pump, /turf/open/floor/mineral/plastitanium, @@ -969,7 +998,7 @@ /obj/item/storage/toolbox/syndicate, /obj/item/storage/toolbox/syndicate, /turf/open/floor/mineral/plastitanium, -/area/ruin/space/has_grav/powered/virtual_domain) +/area/virtual_domain/protected_space) "OI" = ( /obj/structure/chair/comfy/shuttle{ dir = 1 @@ -988,7 +1017,7 @@ }, /obj/effect/mapping_helpers/airlock/access/all/syndicate/general, /turf/open/floor/pod/dark, -/area/ruin/space/has_grav/powered/virtual_domain) +/area/virtual_domain/protected_space) "Qg" = ( /obj/machinery/suit_storage_unit/syndicate{ helmet_type = /obj/item/clothing/head/helmet/space/syndicate/black; @@ -1009,7 +1038,7 @@ /obj/item/dualsaber/green, /obj/machinery/light/small/directional/east, /turf/open/floor/mineral/plastitanium, -/area/ruin/space/has_grav/powered/virtual_domain) +/area/virtual_domain/protected_space) "QG" = ( /obj/structure/tank_dispenser/oxygen, /turf/closed/mineral/random, @@ -1033,7 +1062,7 @@ "RU" = ( /obj/machinery/suit_storage_unit/syndicate, /turf/open/floor/mineral/plastitanium, -/area/ruin/space/has_grav/powered/virtual_domain) +/area/virtual_domain/protected_space) "Sc" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -1055,6 +1084,7 @@ /obj/item/ammo_box/magazine/m9mm, /obj/item/ammo_box/magazine/m9mm, /obj/machinery/light/small/directional/north, +/obj/item/gun/ballistic/automatic/pistol, /turf/open/floor/mineral/plastitanium, /area/ruin/space/has_grav/powered/virtual_domain) "Sq" = ( @@ -1078,11 +1108,14 @@ /area/ruin/space/has_grav/powered/virtual_domain) "TB" = ( /turf/closed/indestructible/syndicate, -/area/ruin/space/has_grav/powered/virtual_domain) +/area/virtual_domain/protected_space) "UQ" = ( /obj/structure/sign/poster/contraband/syndicate_recruitment, /turf/closed/wall/r_wall/syndicate, /area/ruin/space/has_grav/powered/virtual_domain) +"Vg" = ( +/turf/open/space/basic, +/area/virtual_domain/protected_space) "Vk" = ( /obj/machinery/porta_turret/syndicate/energy{ dir = 4; @@ -1101,7 +1134,7 @@ "Wd" = ( /obj/structure/sign/poster/contraband/tools, /turf/closed/wall/r_wall/syndicate, -/area/ruin/space/has_grav/powered/virtual_domain) +/area/virtual_domain/protected_space) "Wy" = ( /obj/structure/closet/crate/secure/gear{ req_access = list("syndicate") @@ -1132,7 +1165,7 @@ /obj/item/clothing/head/helmet/space/syndicate/black/engie, /obj/item/clothing/suit/space/syndicate/black/engie, /turf/open/floor/pod/dark, -/area/ruin/space/has_grav/powered/virtual_domain) +/area/virtual_domain/protected_space) "Yi" = ( /obj/effect/landmark/bitrunning/cache_spawn, /turf/open/floor/plastic, @@ -2182,7 +2215,7 @@ qx qx qx ru -vp +og Jg ru bh @@ -2240,7 +2273,7 @@ qx qx qx ru -sH +Kz Kz yl bh @@ -2418,7 +2451,7 @@ ru Lo ru tv -ki +hD nU wb EB @@ -2611,21 +2644,21 @@ qx nB nB we -ru -ru -uP +zN +zN +dp sg -ru -ru -nB -nB -nB -nB -qx -qx -qx -qx -qx +zN +zN +nn +nn +nn +nn +Vg +Vg +Vg +Vg +Vg sM sM sM @@ -2670,9 +2703,9 @@ qx nB nB qU -Fp -uP -uP +mL +dp +dp li cj Lk @@ -2719,7 +2752,7 @@ ru ru ru ru -Vk +ru qx qx qx @@ -2727,21 +2760,21 @@ qx qx nB nB -ru +zN eB -uP -uP -uP -ru -nB -qx -qx -qx -qx -qx -qx -qx -qx +dp +dp +dp +zN +nn +Vg +Vg +Vg +Vg +Vg +Vg +Vg +Vg sM sM sM @@ -2785,12 +2818,12 @@ qx qx qx nB -ru +zN wL -oM -uP -dw -ru +LB +dp +mA +zN yZ nB nB @@ -2845,10 +2878,10 @@ qx qx Wd OH -oM -uP +LB +dp RU -ru +zN we nB nB @@ -2902,11 +2935,11 @@ BK BK BK IH -oM -oM -uP +LB +LB +dp RU -ru +zN nB nB qx @@ -2961,10 +2994,10 @@ qx qx iL cZ -uP -uP +dp +dp RU -ru +zN nB nB qx @@ -3017,12 +3050,12 @@ qx qx qx nB -ru -ru +zN +zN Dj QF -ru -ru +zN +zN nB nB qx @@ -3067,7 +3100,7 @@ uP ru hD ru -Ig +xS qx qx qx @@ -3076,10 +3109,10 @@ qx nB nB nB -ru -ru -ru -ru +zN +zN +zN +zN nB nB we @@ -3179,7 +3212,7 @@ tI Kz Kz ct -xJ +sH ru qx qx diff --git a/_maps/virtual_domains/xeno_nest.dmm b/_maps/virtual_domains/xeno_nest.dmm index 907436758c781..65f183d69c401 100644 --- a/_maps/virtual_domains/xeno_nest.dmm +++ b/_maps/virtual_domains/xeno_nest.dmm @@ -140,7 +140,7 @@ /area/ruin/space/has_grav/powered/virtual_domain) "F" = ( /obj/structure/table/greyscale, -/obj/item/gun/energy/beam_rifle, +/obj/item/gun/energy/xray, /obj/item/gun/energy/laser{ pixel_x = 4; pixel_y = -6 diff --git a/_maps/wawastation.json b/_maps/wawastation.json new file mode 100644 index 0000000000000..71d716a56e07e --- /dev/null +++ b/_maps/wawastation.json @@ -0,0 +1,32 @@ +{ + "version": 1, + "map_name": "Wawastation", + "map_path": "map_files/wawastation", + "map_file": "wawastation.dmm", + "shuttles": { + "cargo": "cargo_box", + "ferry": "ferry_fancy", + "whiteship": "whiteship_meta", + "emergency": "emergency_wawa" + }, + "traits": [ + { + "Up": true, + "Baseturf": "/turf/open/misc/asteroid/airless", + "Linkage": "Cross" + }, + { + "Down": true, + "Baseturf": "/turf/open/openspace", + "Linkage": "Cross" + } + ], + "job_changes": { + "Cook": { + "additional_cqc_areas": ["/area/station/service/bar", "/area/station/commons/lounge"] + }, + "Captain": { + "special_charter": "asteroid" + } + } +} diff --git a/code/__DEFINES/DNA.dm b/code/__DEFINES/DNA.dm index b3cf4b093d442..8901d2d8e858e 100644 --- a/code/__DEFINES/DNA.dm +++ b/code/__DEFINES/DNA.dm @@ -37,8 +37,12 @@ #define DNA_HAIR_COLOR_BLOCK 6 #define DNA_FACIAL_HAIRSTYLE_BLOCK 7 #define DNA_FACIAL_HAIR_COLOR_BLOCK 8 +#define DNA_HAIRSTYLE_GRADIENT_BLOCK 9 +#define DNA_HAIR_COLOR_GRADIENT_BLOCK 10 +#define DNA_FACIAL_HAIRSTYLE_GRADIENT_BLOCK 11 +#define DNA_FACIAL_HAIR_COLOR_GRADIENT_BLOCK 12 -#define DNA_UNI_IDENTITY_BLOCKS 8 +#define DNA_UNI_IDENTITY_BLOCKS 12 /// This number needs to equal the total number of DNA blocks #define DNA_MUTANT_COLOR_BLOCK 1 diff --git a/code/__DEFINES/_flags.dm b/code/__DEFINES/_flags.dm index 74af498376ef6..72d28ca6bca9d 100644 --- a/code/__DEFINES/_flags.dm +++ b/code/__DEFINES/_flags.dm @@ -93,6 +93,9 @@ GLOBAL_LIST_INIT(bitflags, list(1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 204 #define IS_SOLID (1<<6) /// This turf will never be cleared away by other objects on Initialize. #define NO_CLEARING (1<<7) +/// This atom is a pseudo-floor that blocks map generation's checkPlaceAtom() from placing things like trees ontop of it. +#define TURF_BLOCKS_POPULATE_TERRAIN_FLORAFEATURES (1<<8) + ////////////////Area flags\\\\\\\\\\\\\\ /// If it's a valid territory for cult summoning or the CRAB-17 phone to spawn @@ -117,18 +120,20 @@ GLOBAL_LIST_INIT(bitflags, list(1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 204 #define BLOCK_SUICIDE (1<<9) /// If set, this area will be innately traversable by Xenobiology camera consoles. #define XENOBIOLOGY_COMPATIBLE (1<<10) -/// If Abductors are unable to teleport in with their observation console -#define ABDUCTOR_PROOF (1<<11) /// If blood cultists can draw runes or build structures on this AREA. -#define CULT_PERMITTED (1<<12) +#define CULT_PERMITTED (1<<11) /// If engravings are persistent in this area -#define PERSISTENT_ENGRAVINGS (1<<13) +#define PERSISTENT_ENGRAVINGS (1<<12) /// Mobs that die in this area don't produce a dead chat message -#define NO_DEATH_MESSAGE (1<<14) +#define NO_DEATH_MESSAGE (1<<13) /// This area should have extra shielding from certain event effects -#define EVENT_PROTECTED (1<<15) +#define EVENT_PROTECTED (1<<14) /// This Area Doesn't have Flood or Bomb Admin Messages, but will still log -#define QUIET_LOGS (1<<16) +#define QUIET_LOGS (1<<15) +/// This area does not allow virtual entities to enter. +#define VIRTUAL_SAFE_AREA (1<<16) +/// This area does not allow the Binary channel +#define BINARY_JAMMING (1<<17) /* These defines are used specifically with the atom/pass_flags bitmask diff --git a/code/__DEFINES/access.dm b/code/__DEFINES/access.dm index ef254589129c4..325116eb5b869 100644 --- a/code/__DEFINES/access.dm +++ b/code/__DEFINES/access.dm @@ -467,6 +467,7 @@ #define REGION_RESEARCH "Research" /// Used to seed the accesses_by_region list in SSid_access. A list of all research regional accesses that are overseen by the RD. #define REGION_ACCESS_RESEARCH list( \ + ACCESS_AI_UPLOAD, \ ACCESS_GENETICS, \ ACCESS_MECH_SCIENCE, \ ACCESS_MINISAT, \ diff --git a/code/__DEFINES/achievements.dm b/code/__DEFINES/achievements.dm index e46fef9123e18..0253df0b57a4d 100644 --- a/code/__DEFINES/achievements.dm +++ b/code/__DEFINES/achievements.dm @@ -1,7 +1,7 @@ // Keep the identifiers here below 32 characters, you can put the full display name in the actual achievement datum /// Achievements icon set -#define ACHIEVEMENTS_SET 'icons/ui_icons/achievements/achievements.dmi' +#define ACHIEVEMENTS_SET 'icons/ui/achievements/achievements.dmi' #define ACHIEVEMENT_DEFAULT "default" #define ACHIEVEMENT_SCORE "score" diff --git a/code/__DEFINES/admin_verb.dm b/code/__DEFINES/admin_verb.dm index cbf856bf4365f..04806e098b2c4 100644 --- a/code/__DEFINES/admin_verb.dm +++ b/code/__DEFINES/admin_verb.dm @@ -87,6 +87,7 @@ _ADMIN_VERB(verb_path_name, verb_permissions, verb_name, verb_desc, verb_categor #define ADMIN_CATEGORY_OBJECT "Object" #define ADMIN_CATEGORY_MAPPING "Mapping" #define ADMIN_CATEGORY_PROFILE "Profile" +#define ADMIN_CATEGORY_IPINTEL "Admin.IPIntel" // Visibility flags #define ADMIN_VERB_VISIBLITY_FLAG_MAPPING_DEBUG "Map-Debug" diff --git a/code/__DEFINES/ai/ai.dm b/code/__DEFINES/ai/ai.dm index 2f567be2d571d..37ee5c077e2a5 100644 --- a/code/__DEFINES/ai/ai.dm +++ b/code/__DEFINES/ai/ai.dm @@ -13,7 +13,7 @@ ///For JPS pathing, the maximum length of a path we'll try to generate. Should be modularized depending on what we're doing later on #define AI_MAX_PATH_LENGTH 30 // 30 is possibly overkill since by default we lose interest after 14 tiles of distance, but this gives wiggle room for weaving around obstacles -#define AI_BOT_PATH_LENGTH 150 +#define AI_BOT_PATH_LENGTH 75 // How far should we, by default, be looking for interesting things to de-idle? #define AI_DEFAULT_INTERESTING_DIST 10 diff --git a/code/__DEFINES/ai/ai_blackboard.dm b/code/__DEFINES/ai/ai_blackboard.dm index 0047c9c63a4ac..90a9b55ba1749 100644 --- a/code/__DEFINES/ai/ai_blackboard.dm +++ b/code/__DEFINES/ai/ai_blackboard.dm @@ -14,6 +14,16 @@ #define BB_BREED_READY "BB_breed_ready" ///maximum kids we can have #define BB_MAX_CHILDREN "BB_max_children" +///our current happiness level +#define BB_BASIC_HAPPINESS "BB_basic_happiness" +///can this mob heal? +#define BB_BASIC_MOB_HEALER "BB_basic_mob_healer" + +///the owner we will try to play with +#define BB_OWNER_TARGET "BB_owner_target" +///the list of interactions we can have with the owner +#define BB_INTERACTIONS_WITH_OWNER "BB_interactions_with_owner" + /// Store a single or list of emotes at this key #define BB_EMOTE_KEY "BB_emotes" @@ -145,7 +155,13 @@ ///Text we display when we befriend someone #define BB_FRIENDLY_MESSAGE "friendly_message" +///our fishing target +#define BB_FISHING_TARGET "fishing_target" + // Keys used by one and only one behavior // Used to hold state without making bigass lists /// For /datum/ai_behavior/find_potential_targets, what if any field are we using currently #define BB_FIND_TARGETS_FIELD(type) "bb_find_targets_field_[type]" + +///mothroach next meal key! +#define BB_MOTHROACH_NEXT_EAT "mothroach_next_eat" diff --git a/code/__DEFINES/ai/bot_keys.dm b/code/__DEFINES/ai/bot_keys.dm index 8a46d15611478..c7285d18acac6 100644 --- a/code/__DEFINES/ai/bot_keys.dm +++ b/code/__DEFINES/ai/bot_keys.dm @@ -1,3 +1,22 @@ +//bitfield defines + +///can honkbots slip people? +#define HONKBOT_MODE_SLIP (1<<0) +///can honkbots check IDs? +#define HONKBOT_CHECK_IDS (1<<1) +///can honkbots check records? +#define HONKBOT_CHECK_RECORDS (1<<2) +///can honkbots handcuff people? +#define HONKBOT_HANDCUFF_TARGET (1<<3) + +DEFINE_BITFIELD(honkbot_flags, list( + "CAN_SLIP" = HONKBOT_MODE_SLIP, + "CHECK_IDS" = HONKBOT_CHECK_IDS, + "CHECK_RECORDS" = HONKBOT_CHECK_RECORDS, + "CAN_FAKE_CUFF" = HONKBOT_HANDCUFF_TARGET, +)) + + // bot keys ///The first beacon we find #define BB_BEACON_TARGET "beacon_target" @@ -73,3 +92,45 @@ #define BB_WASH_FRUSTRATION "wash_frustration" ///key that holds cooldown after we finish cleaning something, so we dont immediately run off to patrol #define BB_POST_CLEAN_COOLDOWN "post_clean_cooldown" + +//Honkbots +///key that holds all possible clown friends +#define BB_CLOWNS_LIST "clowns_list" +///key that holds the clown we play with +#define BB_CLOWN_FRIEND "clown_friend" +///key that holds the list of slippery items +#define BB_SLIPPERY_ITEMS "slippery_items" +///key that holds list of types we will attempt to slip +#define BB_SLIP_LIST "slip_list" +///key that holds the slippery item we will drag people too +#define BB_SLIPPERY_TARGET "slippery_target" +///key that holds the victim we will slip +#define BB_SLIP_TARGET "slip_target" +///key that holds our honk ability +#define BB_HONK_ABILITY "honk_ability" + +//firebot keys +///things we can extinguish +#define BB_FIREBOT_CAN_EXTINGUISH "can_extinguish" +///the target we will extinguish +#define BB_FIREBOT_EXTINGUISH_TARGET "extinguish_target" +///lines we say when we detect a fire +#define BB_FIREBOT_FIRE_DETECTED_LINES "fire_detected_lines" +///lines we say when we are idle +#define BB_FIREBOT_IDLE_LINES "idle_lines" +///lines we say when we are emagged +#define BB_FIREBOT_EMAGGED_LINES "emagged_lines" + +//vibebots +///key that holds our partying ability +#define BB_VIBEBOT_PARTY_ABILITY "party_ability" +///key that holds our birthday song +#define BB_VIBEBOT_BIRTHDAY_SONG "birthday_song" +///key that holds happy songs we play to depressed targets +#define BB_VIBEBOT_HAPPY_SONG "happy_song" +///key that holds grim song we play when emagged +#define BB_VIBEBOT_GRIM_SONG "GRIM_song" +///key that holds neutral targets we vibe with +#define BB_VIBEBOT_PARTY_TARGET "party_target" +///key that holds our instrument +#define BB_VIBEBOT_INSTRUMENT "instrument" diff --git a/code/__DEFINES/ai/pet_commands.dm b/code/__DEFINES/ai/pet_commands.dm index 1e692b9f805aa..5f03bf1a5b0d7 100644 --- a/code/__DEFINES/ai/pet_commands.dm +++ b/code/__DEFINES/ai/pet_commands.dm @@ -7,3 +7,6 @@ #define BB_PET_TARGETING_STRATEGY "BB_pet_targeting" /// Typecache of weakrefs to mobs this mob is friends with, will follow their instructions and won't attack them #define BB_FRIENDS_LIST "BB_friends_list" +/// List of strings we might say to encourage someone to make better choices. +#define BB_OWNER_SELF_HARM_RESPONSES "BB_self_harm_responses" + diff --git a/code/__DEFINES/ai/pets.dm b/code/__DEFINES/ai/pets.dm index 48d4f2d67d065..6af24b6cdd973 100644 --- a/code/__DEFINES/ai/pets.dm +++ b/code/__DEFINES/ai/pets.dm @@ -67,7 +67,7 @@ //virtual pet keys ///the last PDA message we must relay -#define BB_LAST_RECIEVED_MESSAGE "last_recieved_message" +#define BB_LAST_RECEIVED_MESSAGE "last_received_message" ///our current virtual pet level #define BB_VIRTUAL_PET_LEVEL "virtual_pet_level" ///the target we will play with diff --git a/code/__DEFINES/antagonists.dm b/code/__DEFINES/antagonists.dm index 2397a6c14c666..9a943474de6f9 100644 --- a/code/__DEFINES/antagonists.dm +++ b/code/__DEFINES/antagonists.dm @@ -113,6 +113,7 @@ #define CONSTRUCT_JUGGERNAUT "Juggernaut" #define CONSTRUCT_WRAITH "Wraith" #define CONSTRUCT_ARTIFICER "Artificer" +#define CONSTRUCT_HARVESTER "Harvester" /// The Classic Wizard wizard loadout. #define WIZARD_LOADOUT_CLASSIC "loadout_classic" @@ -238,6 +239,8 @@ GLOBAL_LIST_INIT(ai_employers, list( #define IS_LUNATIC(mob) (mob.mind?.has_antag_datum(/datum/antagonist/lunatic)) /// Checks if the given mob is either a heretic, heretic monster or a lunatic. #define IS_HERETIC_OR_MONSTER(mob) (IS_HERETIC(mob) || IS_HERETIC_MONSTER(mob) || IS_LUNATIC(mob)) +/// CHecks if the given mob is in the mansus realm +#define IS_IN_MANSUS(mob) (istype(get_area(mob), /area/centcom/heretic_sacrifice)) /// Checks if the given mob is a wizard #define IS_WIZARD(mob) (mob?.mind?.has_antag_datum(/datum/antagonist/wizard)) @@ -251,6 +254,9 @@ GLOBAL_LIST_INIT(ai_employers, list( /// Checks if the given mob is a malf ai. #define IS_MALF_AI(mob) (mob?.mind?.has_antag_datum(/datum/antagonist/malf_ai)) +/// Checks if the given mob is a spy! +#define IS_SPY(mob) (mob?.mind?.has_antag_datum(/datum/antagonist/spy)) + /// List of human antagonist types which don't spawn directly on the space station GLOBAL_LIST_INIT(human_invader_antagonists, list( /datum/antagonist/abductor, @@ -359,6 +365,7 @@ GLOBAL_LIST_INIT(human_invader_antagonists, list( #define HUNTER_PACK_RUSSIAN "Russian Fugitive Hunters" #define HUNTER_PACK_BOUNTY "Bounty Fugitive Hunters" #define HUNTER_PACK_PSYKER "Psyker Fugitive Hunters" +#define HUNTER_PACK_MI13 "MI13 Fugitive Hunters" /// Changeling abilities with DNA cost = this are innately given to all changelings #define CHANGELING_POWER_INNATE -1 diff --git a/code/__DEFINES/atom_hud.dm b/code/__DEFINES/atom_hud.dm index 7df79b7e57a26..86de96f07a1d1 100644 --- a/code/__DEFINES/atom_hud.dm +++ b/code/__DEFINES/atom_hud.dm @@ -81,6 +81,7 @@ #define SECHUD_ASSISTANT "hudassistant" #define SECHUD_ATMOSPHERIC_TECHNICIAN "hudatmospherictechnician" #define SECHUD_BARTENDER "hudbartender" +#define SECHUD_BITAVATAR "hudbitavatar" #define SECHUD_BITRUNNER "hudbitrunner" #define SECHUD_BOTANIST "hudbotanist" #define SECHUD_BRIDGE_ASSISTANT "hudbridgeassistant" diff --git a/code/__DEFINES/basic_mobs.dm b/code/__DEFINES/basic_mobs.dm index c827f760b8a5c..ae74872cd7302 100644 --- a/code/__DEFINES/basic_mobs.dm +++ b/code/__DEFINES/basic_mobs.dm @@ -32,3 +32,43 @@ ///keeps track of how many gutlunches are born GLOBAL_VAR_INIT(gutlunch_count, 0) + +//raptor defines + +#define RAPTOR_RED "Red" +#define RAPTOR_GREEN "Green" +#define RAPTOR_PURPLE "Purple" +#define RAPTOR_WHITE "White" +#define RAPTOR_YELLOW "Yellow" +#define RAPTOR_BLACK "Black" +#define RAPTOR_BLUE "Blue" + +#define RAPTOR_INHERIT_MAX_ATTACK 5 +#define RAPTOR_INHERIT_MAX_HEALTH 30 + +///this mob suffers depression +#define BB_BASIC_DEPRESSED "basic_depressed" +///this mob will care for its young +#define BB_RAPTOR_MOTHERLY "raptor_motherly" +///this mob will be playful around their owners +#define BB_RAPTOR_PLAYFUL "raptor_playful" +///this mob will flee combat when it feels threatened +#define BB_RAPTOR_COWARD "raptor_coward" +///this mob will go out seeking trouble against its kind +#define BB_RAPTOR_TROUBLE_MAKER "raptor_trouble_maker" +///cooldown till we go out cause trouble again +#define BB_RAPTOR_TROUBLE_COOLDOWN "raptor_trouble_maker_cooldown" +///our raptor baby target we will take care of +#define BB_RAPTOR_BABY "raptor_baby" +///the raptor we will heal up +#define BB_INJURED_RAPTOR "injured_raptor" +///the raptor we will bully +#define BB_RAPTOR_VICTIM "raptor_victim" +///the cooldown for next time we eat +#define BB_RAPTOR_EAT_COOLDOWN "raptor_eat_cooldown" +///our trough target +#define BB_RAPTOR_TROUGH_TARGET "raptor_trough_target" + +#define MAX_RAPTOR_POP 64 + + diff --git a/code/__DEFINES/cameranets.dm b/code/__DEFINES/cameranets.dm index 15b4493738e2f..935e015e0cda0 100644 --- a/code/__DEFINES/cameranets.dm +++ b/code/__DEFINES/cameranets.dm @@ -18,12 +18,22 @@ #define CAMERANET_NETWORK_XENOBIOLOGY "xeno" #define CAMERANET_NETWORK_TEST_CHAMBER "test" #define CAMERANET_NETWORK_PRISON "prison" +#define CAMERANET_NETWORK_ISOLATION "isolation" #define CAMERANET_NETWORK_MEDBAY "medbay" #define CAMERANET_NETWORK_ENGINE "engine" +#define CAMERANET_NETWORK_WASTE "waste" #define CAMERANET_NETWORK_TELECOMMS "tcomms" #define CAMERANET_NETWORK_TURBINE "turbine" #define CAMERANET_NETWORK_THUNDERDOME "thunder" #define CAMERANET_NETWORK_BAR "bar" #define CAMERANET_NETWORK_INTERROGATION "interrogation" +#define CAMERA_NETWORK_CARGO "cargo" #define CAMERANET_NETWORK_ABDUCTOR "abductor" #define OPERATIVE_CAMERA_NET "operative" + +// Ruins/Away missiosn/Misc camera nets +#define CAMERANET_NETWORK_MOON19_XENO "mo19x" +#define CAMERANET_NETWORK_MOON19_RESEARCH "mo19r" +#define CAMERANET_NETWORK_UGO45_RESEARCH "uo45r" +#define CAMERANET_NETWORK_FSCI "fsci" +#define CAMERA_NETWORK_BUNKER "bunker1" diff --git a/code/__DEFINES/chat.dm b/code/__DEFINES/chat.dm index 4590a5081f0d1..c3fe46b0cd496 100644 --- a/code/__DEFINES/chat.dm +++ b/code/__DEFINES/chat.dm @@ -45,3 +45,5 @@ #define debug_world_log(msg) if (GLOB.Debug2) log_world("DEBUG: [msg]") /// Adds a generic box around whatever message you're sending in chat. Really makes things stand out. #define examine_block(str) ("
" + str + "
") +/// Emboldens runechat messages +#define RUNECHAT_BOLD(str) "+[str]+" diff --git a/code/__DEFINES/cleaning.dm b/code/__DEFINES/cleaning.dm index 79708cd152b62..1db2a9d31aaa9 100644 --- a/code/__DEFINES/cleaning.dm +++ b/code/__DEFINES/cleaning.dm @@ -1,8 +1,17 @@ // Cleaning flags -///Whether we should not attempt to clean. -#define DO_NOT_CLEAN "do_not_clean" +/// Return to prevent clean attempts +#define CLEAN_BLOCKED (1<<0) +/// Return to allow clean attempts +/// This is (currently) the same as returning null / none but more explicit +#define CLEAN_ALLOWED (1<<1) +/// Return to prevent XP gain +/// Only does anything if [CLEAN_ALLOWED] is also returned +#define CLEAN_NO_XP (1<<2) +/// Return to stop cleaner component from blocking interaction chain further +/// Only does anything if [CLEAN_BLOCKED] is also returned +#define CLEAN_DONT_BLOCK_INTERACTION (1<<3) // Different kinds of things that can be cleaned. // Use these when overriding the wash proc or registering for the clean signals to check if your thing should be cleaned diff --git a/code/__DEFINES/click.dm b/code/__DEFINES/click.dm index 5900dd54210ca..d650a32e81604 100644 --- a/code/__DEFINES/click.dm +++ b/code/__DEFINES/click.dm @@ -4,5 +4,4 @@ #define CLICK_ACTION_BLOCKING (1<<1) /// Either return state #define CLICK_ACTION_ANY (CLICK_ACTION_SUCCESS | CLICK_ACTION_BLOCKING) - /// Use NONE for continue interaction diff --git a/code/__DEFINES/colors.dm b/code/__DEFINES/colors.dm index d1f489f0555ef..72159bde0540e 100644 --- a/code/__DEFINES/colors.dm +++ b/code/__DEFINES/colors.dm @@ -72,6 +72,7 @@ #define COLOR_LIME "#32CD32" #define COLOR_DARK_LIME "#00aa00" #define COLOR_VERY_PALE_LIME_GREEN "#DDFFD3" +#define COLOR_HERETIC_GREEN COLOR_VERY_PALE_LIME_GREEN // i am co-opting this as heretic glow. #define COLOR_VERY_DARK_LIME_GREEN "#003300" #define COLOR_GREEN "#008000" #define COLOR_CHRISTMAS_GREEN "#00873E" @@ -130,6 +131,7 @@ #define COLOR_DARK_ORANGE "#C3630C" #define COLOR_PRISONER_ORANGE "#A54900" #define COLOR_DARK_MODERATE_ORANGE "#8B633B" +#define COLOR_RUSTED_GLASS "#917c65" #define COLOR_BROWN "#BA9F6D" #define COLOR_DARK_BROWN "#997C4F" diff --git a/code/__DEFINES/combat.dm b/code/__DEFINES/combat.dm index 686e422b02019..6246e25e93b56 100644 --- a/code/__DEFINES/combat.dm +++ b/code/__DEFINES/combat.dm @@ -285,6 +285,7 @@ GLOBAL_LIST_INIT(shove_disarming_types, typecacheof(list( GLOBAL_LIST_INIT(all_body_zones, list(BODY_ZONE_HEAD, BODY_ZONE_CHEST, BODY_ZONE_R_ARM, BODY_ZONE_L_ARM, BODY_ZONE_R_LEG, BODY_ZONE_L_LEG)) GLOBAL_LIST_INIT(limb_zones, list(BODY_ZONE_R_ARM, BODY_ZONE_L_ARM, BODY_ZONE_R_LEG, BODY_ZONE_L_LEG)) GLOBAL_LIST_INIT(arm_zones, list(BODY_ZONE_L_ARM, BODY_ZONE_R_ARM)) +GLOBAL_LIST_INIT(leg_zones, list(BODY_ZONE_R_LEG, BODY_ZONE_L_LEG)) #define BODY_ZONE_PRECISE_EYES "eyes" #define BODY_ZONE_PRECISE_MOUTH "mouth" @@ -318,13 +319,6 @@ GLOBAL_LIST_INIT(arm_zones, list(BODY_ZONE_L_ARM, BODY_ZONE_R_ARM)) /// Proceed with the attack chain, but don't call the normal methods. #define SECONDARY_ATTACK_CONTINUE_CHAIN 3 -/// Flag for when /afterattack potentially acts on an item. -/// Used for the swap hands/drop tutorials to know when you might just be trying to do something normally. -/// Does not necessarily imply success, or even that it did hit an item, just intent. -// This is intentionally not (1 << 0) because some stuff currently erroneously returns TRUE/FALSE for afterattack. -// Doesn't need to be set if proximity flag is FALSE. -#define AFTERATTACK_PROCESSED_ITEM (1 << 1) - //Autofire component /// Compatible firemode is in the gun. Wait until it's held in the user hands. #define AUTOFIRE_STAT_IDLE (1<<0) @@ -387,6 +381,9 @@ GLOBAL_LIST_INIT(arm_zones, list(BODY_ZONE_L_ARM, BODY_ZONE_R_ARM)) ///If the obstacle is an object at the border of the turf (so no signal from being sent to the other turf) #define SHOVE_DIRECTIONAL_BLOCKED (1<<6) +///Bitfield returned by listeners for COMSIG_CARBON_ENTER_STAMCRIT when they perform some action that prevents a mob going into stamcrit. +#define STAMCRIT_CANCELLED (1<<0) + ///Deathmatch lobby current status #define DEATHMATCH_NOT_PLAYING 0 #define DEATHMATCH_PRE_PLAYING 1 diff --git a/code/__DEFINES/construction/structures.dm b/code/__DEFINES/construction/structures.dm index 1b4ea8aa11297..e48dc078ca4bc 100644 --- a/code/__DEFINES/construction/structures.dm +++ b/code/__DEFINES/construction/structures.dm @@ -48,9 +48,11 @@ #define AIRLOCK_ASSEMBLY_NEEDS_ELECTRONICS 1 #define AIRLOCK_ASSEMBLY_NEEDS_SCREWDRIVER 2 -//blast door (de)construction states +///The blast door is missing wires, first step of construction. #define BLASTDOOR_NEEDS_WIRES 0 +///The blast door needs electronics, second step of construction. #define BLASTDOOR_NEEDS_ELECTRONICS 1 +///The blast door is fully constructed. #define BLASTDOOR_FINISHED 2 //floodlights because apparently we use defines now diff --git a/code/__DEFINES/cooldowns.dm b/code/__DEFINES/cooldowns.dm index 1d160a8c0f147..0ff525dac5ae0 100644 --- a/code/__DEFINES/cooldowns.dm +++ b/code/__DEFINES/cooldowns.dm @@ -46,6 +46,7 @@ // item cooldowns #define COOLDOWN_SIGNALLER_SEND "cooldown_signaller_send" +#define COOLDOWN_TOOL_SOUND "cooldown_tool_sound" //circuit cooldowns #define COOLDOWN_CIRCUIT_SOUNDEMITTER "circuit_soundemitter" @@ -65,6 +66,7 @@ #define MOB_SHARED_COOLDOWN_1 (1<<0) #define MOB_SHARED_COOLDOWN_2 (1<<1) #define MOB_SHARED_COOLDOWN_3 (1<<2) +#define MOB_SHARED_COOLDOWN_BOT_ANNOUNCMENT (1<<3) //TIMER COOLDOWN MACROS @@ -107,7 +109,7 @@ #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) +#define COOLDOWN_FINISHED(cd_source, cd_index) (cd_source.cd_index <= world.time) #define COOLDOWN_RESET(cd_source, cd_index) cd_source.cd_index = 0 diff --git a/code/__DEFINES/crafting.dm b/code/__DEFINES/crafting.dm index 647278aa3ec0b..54dc479aa7306 100644 --- a/code/__DEFINES/crafting.dm +++ b/code/__DEFINES/crafting.dm @@ -7,6 +7,28 @@ ///If the structure is only "used" i.e. it checks to see if it's nearby and allows crafting, but doesn't delete it #define CRAFTING_STRUCTURE_USE 0 +//stack recipe placement check types +/// Checks if there is an object of the result type in any of the cardinal directions +#define STACK_CHECK_CARDINALS (1<<0) +/// Checks if there is an object of the result type within one tile +#define STACK_CHECK_ADJACENT (1<<1) + +//---- Defines for var/crafting_flags +///If this craft must be learned before it becomes available +#define CRAFT_MUST_BE_LEARNED (1<<0) +///Should only one object exist on the same turf? +#define CRAFT_ONE_PER_TURF (1<<1) +/// Setting this to true will effectively set check_direction to true. +#define CRAFT_IS_FULLTILE (1<<2) +/// If this craft should run the direction check, for use when building things like directional windows where you can have more than one per turf +#define CRAFT_CHECK_DIRECTION (1<<3) +/// If the craft requires a floor below +#define CRAFT_ON_SOLID_GROUND (1<<4) +/// If the craft checks that there are objects with density in the same turf when being built +#define CRAFT_CHECK_DENSITY (1<<5) +/// If the created atom will gain custom mat datums +#define CRAFT_APPLIES_MATS (1<<6) + //food/drink crafting defines //When adding new defines, please make sure to also add them to the encompassing list #define CAT_FOOD "Foods" diff --git a/code/__DEFINES/cult.dm b/code/__DEFINES/cult.dm index 06393d145f8ca..005b0ca27eef8 100644 --- a/code/__DEFINES/cult.dm +++ b/code/__DEFINES/cult.dm @@ -9,6 +9,8 @@ #define RUNE_COLOR_SUMMON COLOR_VIBRANT_LIME //blood magic +/// The maximum number of cult spell slots each cultist is allowed to scribe at once. +#define ENHANCED_BLOODCHARGE 5 #define MAX_BLOODCHARGE 4 #define RUNELESS_MAX_BLOODCHARGE 1 /// percent before rise @@ -28,6 +30,8 @@ #define THEME_CULT "cult" #define THEME_WIZARD "wizard" #define THEME_HOLY "holy" +/// Only used for heretic Harvesters, obtained from sacrificing cultists +#define THEME_HERETIC "heretic" /// Defines for cult item_dispensers. #define PREVIEW_IMAGE "preview" @@ -51,3 +55,8 @@ GLOBAL_LIST(sacrificed) #define CULT_VICTORY 1 #define CULT_LOSS 0 #define CULT_NARSIE_KILLED -1 + +// Used to keep track of items rewarded after a heretic is sacked. +#define CURSED_BLADE_UNLOCKED "Cursed Blade" +#define CRIMSON_FOCUS_UNLOCKED "Crimson Focus" +#define PROTEON_ORB_UNLOCKED "Proteon Orb" diff --git a/code/__DEFINES/dcs/signals/signals_atom/signals_atom_attack.dm b/code/__DEFINES/dcs/signals/signals_atom/signals_atom_attack.dm index 932fc008848f5..5c5c2aefa6c25 100644 --- a/code/__DEFINES/dcs/signals/signals_atom/signals_atom_attack.dm +++ b/code/__DEFINES/dcs/signals/signals_atom/signals_atom_attack.dm @@ -6,7 +6,7 @@ #define COMSIG_ATOM_ATTACKBY "atom_attackby" /// From base of [atom/proc/attacby_secondary()]: (/obj/item/weapon, /mob/user, params) #define COMSIG_ATOM_ATTACKBY_SECONDARY "atom_attackby_secondary" -///from [/item/afterattack()], sent by an atom which was just attacked by an item: (/obj/item/weapon, /mob/user, proximity_flag, click_parameters) +/// From [/item/attack()], sent by an atom which was just attacked by an item: (/obj/item/weapon, /mob/user, proximity_flag, click_parameters) #define COMSIG_ATOM_AFTER_ATTACKEDBY "atom_after_attackby" /// From base of [/atom/proc/attack_hand_secondary]: (mob/user, list/modifiers) - Called when the atom receives a secondary unarmed attack. #define COMSIG_ATOM_ATTACK_HAND_SECONDARY "atom_attack_hand_secondary" @@ -18,6 +18,7 @@ #define COMSIG_ATOM_ATTACK_ANIMAL "attack_animal" //from base of atom/attack_basic_mob(): (/mob/user) #define COMSIG_ATOM_ATTACK_BASIC_MOB "attack_basic_mob" + #define COMSIG_BASIC_ATTACK_CANCEL_CHAIN (1<<0) /// from /atom/proc/atom_break: (damage_flag) #define COMSIG_ATOM_BREAK "atom_break" /// from base of [/atom/proc/atom_fix]: () diff --git a/code/__DEFINES/dcs/signals/signals_atom/signals_atom_main.dm b/code/__DEFINES/dcs/signals/signals_atom/signals_atom_main.dm index f4dcd49664160..c612d174ac354 100644 --- a/code/__DEFINES/dcs/signals/signals_atom/signals_atom_main.dm +++ b/code/__DEFINES/dcs/signals/signals_atom/signals_atom_main.dm @@ -133,3 +133,10 @@ #define COMSIG_ATOM_PRE_CLEAN "atom_pre_clean" ///cancel clean #define COMSIG_ATOM_CANCEL_CLEAN (1<<0) + +/// From /obj/item/stack/make_item() +#define COMSIG_ATOM_CONSTRUCTED "atom_constructed" + +/// From /obj/effect/particle_effect/sparks/proc/sparks_touched(datum/source, atom/movable/singed) +#define COMSIG_ATOM_TOUCHED_SPARKS "atom_touched_sparks" +#define COMSIG_ATOM_TOUCHED_HAZARDOUS_SPARKS "atom_touched_hazardous_sparks" diff --git a/code/__DEFINES/dcs/signals/signals_atom/signals_atom_mouse.dm b/code/__DEFINES/dcs/signals/signals_atom/signals_atom_mouse.dm index 2ea2e4d5fe3f7..81cdd2c85966e 100644 --- a/code/__DEFINES/dcs/signals/signals_atom/signals_atom_mouse.dm +++ b/code/__DEFINES/dcs/signals/signals_atom/signals_atom_mouse.dm @@ -9,20 +9,23 @@ ///from base of atom/ShiftClick(): (/mob) #define COMSIG_CLICK_SHIFT "shift_click" #define COMPONENT_ALLOW_EXAMINATE (1<<0) //! Allows the user to examinate regardless of client.eye. +///from base of atom/ShiftClick() +#define COMSIG_SHIFT_CLICKED_ON "shift_clicked_on" ///from base of atom/CtrlClickOn(): (/mob) #define COMSIG_CLICK_CTRL "ctrl_click" ///from base of atom/AltClick(): (/mob) #define COMSIG_CLICK_ALT "alt_click" -///from base of atom/alt_click_secondary(): (/mob) -#define COMSIG_CLICK_ALT_SECONDARY "alt_click_secondary" +///from base of atom/base_click_alt_secondary(): (/mob) +#define COMSIG_CLICK_ALT_SECONDARY "click_alt_secondary" #define COMPONENT_CANCEL_CLICK_ALT_SECONDARY (1<<0) ///from base of atom/CtrlShiftClick(/mob) #define COMSIG_CLICK_CTRL_SHIFT "ctrl_shift_click" ///from base of atom/MouseDrop(): (/atom/over, /mob/user) #define COMSIG_MOUSEDROP_ONTO "mousedrop_onto" - #define COMPONENT_NO_MOUSEDROP (1<<0) -///from base of atom/MouseDrop_T: (/atom/from, /mob/user) + #define COMPONENT_CANCEL_MOUSEDROP_ONTO (1<<0) +///from base of atom/handle_mouse_drop_receive: (/atom/from, /mob/user) #define COMSIG_MOUSEDROPPED_ONTO "mousedropped_onto" + #define COMPONENT_CANCEL_MOUSEDROPPED_ONTO (1<<0) ///from base of mob/MouseWheelOn(): (/atom, delta_x, delta_y, params) #define COMSIG_MOUSE_SCROLL_ON "mousescroll_on" /// From /atom/movable/screen/click(): (atom/target, atom/location, control, params, mob/user) diff --git a/code/__DEFINES/dcs/signals/signals_atom/signals_atom_movable.dm b/code/__DEFINES/dcs/signals/signals_atom/signals_atom_movable.dm index 42b2b2ce2b350..bc73dbf32914a 100644 --- a/code/__DEFINES/dcs/signals/signals_atom/signals_atom_movable.dm +++ b/code/__DEFINES/dcs/signals/signals_atom/signals_atom_movable.dm @@ -119,3 +119,7 @@ /// Sent to movables when they are being stolen by a spy: (mob/living/spy, datum/spy_bounty/bounty) #define COMSIG_MOVABLE_SPY_STEALING "movable_spy_stealing" +/// Called when something is pushed by a living mob bumping it: (mob/living/pusher, push force) +#define COMSIG_MOVABLE_BUMP_PUSHED "movable_bump_pushed" + /// Stop it from moving + #define COMPONENT_NO_PUSH (1<<0) diff --git a/code/__DEFINES/dcs/signals/signals_atom/signals_atom_movement.dm b/code/__DEFINES/dcs/signals/signals_atom/signals_atom_movement.dm index 25eb8b15f381d..5836a0be65a39 100644 --- a/code/__DEFINES/dcs/signals/signals_atom/signals_atom_movement.dm +++ b/code/__DEFINES/dcs/signals/signals_atom/signals_atom_movement.dm @@ -46,7 +46,7 @@ ///from base of atom/setDir(): (old_dir, new_dir). Called before the direction changes. #define COMSIG_ATOM_DIR_CHANGE "atom_dir_change" ///from base of atom/setDir(): (old_dir, new_dir). Called after the direction changes. -#define COMSIG_ATOM_POST_DIR_CHANGE "atom_dir_change" +#define COMSIG_ATOM_POST_DIR_CHANGE "atom_post_dir_change" ///from base of atom/movable/keybind_face_direction(): (dir). Called before turning with the movement lock key. #define COMSIG_MOVABLE_KEYBIND_FACE_DIR "keybind_face_dir" ///ignores the movement lock key, used for turning while strafing in a mech diff --git a/code/__DEFINES/dcs/signals/signals_atom/signals_atom_x_act.dm b/code/__DEFINES/dcs/signals/signals_atom/signals_atom_x_act.dm index f6f7f6e4a291c..6448be3fecb74 100644 --- a/code/__DEFINES/dcs/signals/signals_atom/signals_atom_x_act.dm +++ b/code/__DEFINES/dcs/signals/signals_atom/signals_atom_x_act.dm @@ -56,6 +56,8 @@ /// Args: (mob/living/user, obj/item/tool, list/modifiers) /// Return any ITEM_INTERACT_ flags as relevant (see tools.dm) #define COMSIG_ATOM_ITEM_INTERACTION_SECONDARY "atom_item_interaction_secondary" +/// Sent from [atom/proc/item_interaction], to a mob clicking on an atom with an item +#define COMSIG_USER_ITEM_INTERACTION "user_item_interaction" /// Sent from [atom/proc/item_interaction], to an item clicking on an atom /// Args: (mob/living/user, atom/interacting_with, list/modifiers) /// Return any ITEM_INTERACT_ flags as relevant (see tools.dm) @@ -64,6 +66,8 @@ /// Args: (mob/living/user, atom/interacting_with, list/modifiers) /// Return any ITEM_INTERACT_ flags as relevant (see tools.dm) #define COMSIG_ITEM_INTERACTING_WITH_ATOM_SECONDARY "item_interacting_with_atom_secondary" +/// Sent from [atom/proc/item_interaction], when this atom is right-clicked on by a mob with a tool +#define COMSIG_USER_ITEM_INTERACTION_SECONDARY "user_item_interaction_secondary" /// Sent from [atom/proc/item_interaction], when this atom is left-clicked on by a mob with a tool of a specific tool type /// Args: (mob/living/user, obj/item/tool, list/recipes) /// Return any ITEM_INTERACT_ flags as relevant (see tools.dm) @@ -72,3 +76,20 @@ /// Args: (mob/living/user, obj/item/tool) /// Return any ITEM_INTERACT_ flags as relevant (see tools.dm) #define COMSIG_ATOM_SECONDARY_TOOL_ACT(tooltype) "tool_secondary_act_[tooltype]" + +/// Sent from [atom/proc/ranged_item_interaction], when this atom is left-clicked on by a mob with an item while not adjacent +#define COMSIG_ATOM_RANGED_ITEM_INTERACTION "atom_ranged_item_interaction" +/// Sent from [atom/proc/ranged_item_interaction], when this atom is right-clicked on by a mob with an item while not adjacent +#define COMSIG_ATOM_RANGED_ITEM_INTERACTION_SECONDARY "atom_ranged_item_interaction_secondary" +/// Sent from [atom/proc/ranged_item_interaction], when a mob is using this item while left-clicking on by an atom while not adjacent +#define COMSIG_RANGED_ITEM_INTERACTING_WITH_ATOM "ranged_item_interacting_with_atom" +/// Sent from [atom/proc/ranged_item_interaction], when a mob is using this item while right-clicking on by an atom while not adjacent +#define COMSIG_RANGED_ITEM_INTERACTING_WITH_ATOM_SECONDARY "ranged_item_interacting_with_atom_secondary" + +/// Sent from [atom/proc/item_interaction], when this atom is used as a tool and an event occurs +#define COMSIG_ITEM_TOOL_ACTED "tool_item_acted" + +/// This is sent via item interaction (IE, item clicking on atom) right before the item's inserted into the atom's storage +/// Args: (obj/item/inserting, mob/living/user) +#define COMSIG_ATOM_STORAGE_ITEM_INTERACT_INSERT "atom_storage_item_interact_insert" + #define BLOCK_STORAGE_INSERT (1<<0) diff --git a/code/__DEFINES/dcs/signals/signals_bitrunning.dm b/code/__DEFINES/dcs/signals/signals_bitrunning.dm index 74d418182d597..23461a90a1108 100644 --- a/code/__DEFINES/dcs/signals/signals_bitrunning.dm +++ b/code/__DEFINES/dcs/signals/signals_bitrunning.dm @@ -42,5 +42,14 @@ #define COMSIG_BITRUNNER_STATION_SPAWN "bitrunner_station_spawn" // Ladder + /// from /obj/structure/hololadder/disconnect() #define COMSIG_BITRUNNER_LADDER_SEVER "bitrunner_ladder_sever" + +/// Sent when a server console is emagged +#define COMSIG_BITRUNNER_SERVER_EMAGGED "bitrunner_server_emagged" + +// Spawners + +/// from /obj/effect/mob_spawn/ghost_role/human/virtual_domain/proc/artificial_spawn() : (mob/living/runner) +#define COMSIG_BITRUNNER_SPAWNED "bitrunner_spawned" diff --git a/code/__DEFINES/dcs/signals/signals_closet.dm b/code/__DEFINES/dcs/signals/signals_closet.dm index fb78d69b8a11b..8945e876ccb5f 100644 --- a/code/__DEFINES/dcs/signals/signals_closet.dm +++ b/code/__DEFINES/dcs/signals/signals_closet.dm @@ -1,2 +1,2 @@ /// Called in /obj/structure/closet/PopulateContents() -#define COMSIG_CLOSET_POPULATE_CONTENTS "closet_populate_contents" +#define COMSIG_CLOSET_CONTENTS_INITIALIZED "closet_initialize_contents" diff --git a/code/__DEFINES/dcs/signals/signals_global.dm b/code/__DEFINES/dcs/signals/signals_global.dm index 41c2b4b7459c1..5e9011f5f4075 100644 --- a/code/__DEFINES/dcs/signals/signals_global.dm +++ b/code/__DEFINES/dcs/signals/signals_global.dm @@ -103,3 +103,6 @@ /// Global signal sent when narsie summon count is updated: (new count) #define COMSIG_NARSIE_SUMMON_UPDATE "!narsie_summon_update" + +/// Global signal sent when a mob is spawned from a ghost in a dynamic ruleset (mob/spawned_mob) +#define COMSIG_RULESET_BODY_GENERATED_FROM_GHOSTS "!ruleset_body_generated_from_ghosts" diff --git a/code/__DEFINES/dcs/signals/signals_heretic.dm b/code/__DEFINES/dcs/signals/signals_heretic.dm index a80526f96ab4f..bce4269720ccf 100644 --- a/code/__DEFINES/dcs/signals/signals_heretic.dm +++ b/code/__DEFINES/dcs/signals/signals_heretic.dm @@ -1,15 +1,15 @@ /// Heretic signals -/// From /obj/item/melee/touch_attack/mansus_fist/on_mob_hit : (mob/living/source, mob/living/target) +/// From /datum/action/cooldown/spell/touch/mansus_grasp/cast_on_hand_hit : (mob/living/source, mob/living/target) #define COMSIG_HERETIC_MANSUS_GRASP_ATTACK "mansus_grasp_attack" /// Default behavior is to use the hand, so return this to blocks the mansus fist from being consumed after use. #define COMPONENT_BLOCK_HAND_USE (1<<0) -/// From /obj/item/melee/touch_attack/mansus_fist/afterattack_secondary : (mob/living/source, atom/target) +/// From /datum/action/cooldown/spell/touch/mansus_grasp/cast_on_secondary_hand_hit : (mob/living/source, atom/target) #define COMSIG_HERETIC_MANSUS_GRASP_ATTACK_SECONDARY "mansus_grasp_attack_secondary" /// Default behavior is to continue attack chain and do nothing else, so return this to use up the hand after use. #define COMPONENT_USE_HAND (1<<0) -/// From /obj/item/melee/sickly_blade/afterattack (with proximity) : (mob/living/source, mob/living/target) +/// From /obj/item/melee/sickly_blade/afterattack : (mob/living/source, mob/living/target) #define COMSIG_HERETIC_BLADE_ATTACK "blade_attack" -/// From /obj/item/melee/sickly_blade/afterattack (without proximity) : (mob/living/source, mob/living/target) +/// From /obj/item/melee/sickly_blade/ranged_interact_with_atom (without proximity) : (mob/living/source, mob/living/target) #define COMSIG_HERETIC_RANGED_BLADE_ATTACK "ranged_blade_attack" diff --git a/code/__DEFINES/dcs/signals/signals_mob/signals_mob_ai.dm b/code/__DEFINES/dcs/signals/signals_mob/signals_mob_ai.dm index 6cca71839a927..026247acf57ab 100644 --- a/code/__DEFINES/dcs/signals/signals_mob/signals_mob_ai.dm +++ b/code/__DEFINES/dcs/signals/signals_mob/signals_mob_ai.dm @@ -1,6 +1,9 @@ /// Signal sent when a blackboard key is set to a new value #define COMSIG_AI_BLACKBOARD_KEY_SET(blackboard_key) "ai_blackboard_key_set_[blackboard_key]" +///Signal sent before a blackboard key is cleared +#define COMSIG_AI_BLACKBOARD_KEY_PRECLEAR(blackboard_key) "ai_blackboard_key_pre_clear_[blackboard_key]" + /// Signal sent when a blackboard key is cleared #define COMSIG_AI_BLACKBOARD_KEY_CLEARED(blackboard_key) "ai_blackboard_key_clear_[blackboard_key]" diff --git a/code/__DEFINES/dcs/signals/signals_mob/signals_mob_carbon.dm b/code/__DEFINES/dcs/signals/signals_mob/signals_mob_carbon.dm index 637ea90c8e4eb..598ddc5187852 100644 --- a/code/__DEFINES/dcs/signals/signals_mob/signals_mob_carbon.dm +++ b/code/__DEFINES/dcs/signals/signals_mob/signals_mob_carbon.dm @@ -158,4 +158,8 @@ /// Return to skip default nutrition -> blood conversion #define HANDLE_BLOOD_NO_NUTRITION_DRAIN (1<<1) /// Return to skip oxyloss and similar effecst from blood level - #define HANDLE_BLOOD_NO_EFFECTS (1<<2) + #define HANDLE_BLOOD_NO_OXYLOSS (1<<2) + +/// from /datum/status_effect/limp/proc/check_step(mob/whocares, OldLoc, Dir, forced) iodk where it shuld go +#define COMSIG_CARBON_LIMPING "mob_limp_check" + #define COMPONENT_CANCEL_LIMP (1<<0) diff --git a/code/__DEFINES/dcs/signals/signals_mob/signals_mob_living.dm b/code/__DEFINES/dcs/signals/signals_mob/signals_mob_living.dm index cc9e4d2e9666a..517048bbd4d1d 100644 --- a/code/__DEFINES/dcs/signals/signals_mob/signals_mob_living.dm +++ b/code/__DEFINES/dcs/signals/signals_mob/signals_mob_living.dm @@ -43,8 +43,12 @@ #define COMSIG_LIVING_SET_BUCKLED "living_set_buckled" ///from base of mob/living/set_body_position() #define COMSIG_LIVING_SET_BODY_POSITION "living_set_body_position" -///From post-can inject check of syringe after attack (mob/user) -#define COMSIG_LIVING_TRY_SYRINGE "living_try_syringe" +/// Sent to a mob being injected with a syringe when the do_after initiates +#define COMSIG_LIVING_TRY_SYRINGE_INJECT "living_try_syringe_inject" +/// Sent to a mob being withdrawn from with a syringe when the do_after initiates +#define COMSIG_LIVING_TRY_SYRINGE_WITHDRAW "living_try_syringe_withdraw" +///from base of mob/living/set_usable_legs() +#define COMSIG_LIVING_LIMBLESS_SLOWDOWN "living_limbless_slowdown" ///From living/Life(). (deltatime, times_fired) #define COMSIG_LIVING_LIFE "living_life" /// Block the Life() proc from proceeding... this should really only be done in some really wacky situations. @@ -146,6 +150,8 @@ #define COMPONENT_LIVING_BLOCK_PRE_MOB_BUMP (1<<0) ///From base of mob/living/MobBump() (mob/living) #define COMSIG_LIVING_MOB_BUMP "living_mob_bump" +///From base of mob/living/MobBump() (mob/living) +#define COMSIG_LIVING_MOB_BUMPED "living_mob_bumped" ///From base of mob/living/Bump() (turf/closed) #define COMSIG_LIVING_WALL_BUMP "living_wall_bump" ///From base of turf/closed/Exited() (turf/closed) @@ -172,6 +178,7 @@ #define TREAT_MESSAGE_ARG 1 #define TREAT_TTS_MESSAGE_ARG 2 #define TREAT_TTS_FILTER_ARG 3 + #define TREAT_CAPITALIZE_MESSAGE 4 ///From obj/item/toy/crayon/spraycan #define COMSIG_LIVING_MOB_PAINTED "living_mob_painted" @@ -197,6 +204,10 @@ #define STOP_SACRIFICE (1<<0) /// Don't send a message for sacrificing this thing, we have our own #define SILENCE_SACRIFICE_MESSAGE (1<<1) + /// Don't send a message for sacrificing this thing UNLESS it's the cult target + #define SILENCE_NONTARGET_SACRIFICE_MESSAGE (1<<2) + /// Dusts the target instead of gibbing them (no soulstone) + #define DUST_SACRIFICE (1<<3) /// From /mob/living/befriend() : (mob/living/new_friend) #define COMSIG_LIVING_BEFRIENDED "living_befriended" @@ -271,3 +282,10 @@ /// From /datum/element/basic_eating/finish_eating() #define COMSIG_MOB_ATE "mob_ate" + +///From mob/living/carbon/proc/throw_mode_on and throw_mode_off +#define COMSIG_LIVING_THROW_MODE_TOGGLE "living_throw_mode_toggle" +///From /datum/component/happiness() +#define COMSIG_MOB_HAPPINESS_CHANGE "happiness_change" +/// From /obj/item/melee/baton/baton_effect(): (datum/source, mob/living/user, /obj/item/melee/baton) +#define COMSIG_MOB_BATONED "mob_batoned" diff --git a/code/__DEFINES/dcs/signals/signals_mob/signals_mob_main.dm b/code/__DEFINES/dcs/signals/signals_mob/signals_mob_main.dm index f33d2f1f40d02..8be5b1fdb64aa 100644 --- a/code/__DEFINES/dcs/signals/signals_mob/signals_mob_main.dm +++ b/code/__DEFINES/dcs/signals/signals_mob/signals_mob_main.dm @@ -81,6 +81,9 @@ #define ACCESS_DISALLOWED (1<<1) #define LOCKED_ATOM_INCOMPATIBLE (1<<2) +///from the component /datum/component/simple_access +#define COMSIG_MOB_RETRIEVE_SIMPLE_ACCESS "retrieve_simple_access" + ///from base of mob/can_cast_magic(): (mob/user, magic_flags, charge_cost) #define COMSIG_MOB_RESTRICT_MAGIC "mob_cast_magic" ///from base of mob/can_block_magic(): (mob/user, casted_magic_flags, charge_cost) @@ -152,7 +155,7 @@ ///Mob is trying to open the wires of a target [/atom], from /datum/wires/interactable(): (atom/target) #define COMSIG_TRY_WIRES_INTERACT "try_wires_interact" #define COMPONENT_CANT_INTERACT_WIRES (1<<0) -///Mob is trying to emote, from /datum/emote/proc/run_emote(): (key, params, type_override, intentional) +///Mob is trying to emote, from /datum/emote/proc/run_emote(): (key, params, type_override, intentional, emote) #define COMSIG_MOB_PRE_EMOTED "mob_pre_emoted" #define COMPONENT_CANT_EMOTE (1<<0) #define COMSIG_MOB_EMOTED(emote_key) "mob_emoted_[emote_key]" @@ -178,16 +181,14 @@ #define COMSIG_MOB_ATTACK_HAND "mob_attack_hand" ///from base of /obj/item/attack(): (mob/M, mob/user) #define COMSIG_MOB_ITEM_ATTACK "mob_item_attack" -///from base of obj/item/afterattack(): (atom/target, obj/item/weapon, proximity_flag, click_parameters) -#define COMSIG_MOB_ITEM_AFTERATTACK "mob_item_afterattack" -///from base of obj/item/afterattack_secondary(): (atom/target, obj/item/weapon, proximity_flag, click_parameters) -#define COMSIG_MOB_ITEM_AFTERATTACK_SECONDARY "mob_item_afterattack_secondary" ///from base of mob/RangedAttack(): (atom/A, modifiers) #define COMSIG_MOB_ATTACK_RANGED "mob_attack_ranged" ///from base of mob/ranged_secondary_attack(): (atom/target, modifiers) #define COMSIG_MOB_ATTACK_RANGED_SECONDARY "mob_attack_ranged_secondary" -///From base of atom/ctrl_click(): (atom/A) +///From base of /mob/base_click_ctrl: (atom/A) #define COMSIG_MOB_CTRL_CLICKED "mob_ctrl_clicked" +///From base of /mob/base_click_ctrl_shift: (atom/A) +#define COMSIG_MOB_CTRL_SHIFT_CLICKED "mob_ctrl_shift_clicked" ///From base of mob/update_movespeed():area #define COMSIG_MOB_MOVESPEED_UPDATED "mob_update_movespeed" /// From /atom/movable/screen/zone_sel/proc/set_selected_zone. @@ -204,7 +205,7 @@ ///Sent by pilot of mech in /obj/vehicle/sealed/mecha/on_mouseclick when using mech equipment : (/obj/vehicle/sealed/mecha/mech) #define COMSIG_MOB_USED_MECH_EQUIPMENT "mob_used_mech_equipment" ///Sent by pilot of mech in /obj/vehicle/sealed/mecha/on_mouseclick when triggering mech punch : (/obj/vehicle/sealed/mecha/mech) -#define COMSIG_MOB_USED_MECH_MELEE "mob_used_mech_melee" +#define COMSIG_MOB_USED_CLICK_MECH_MELEE "mob_used_click_mech_melee" ///from living/flash_act(), when a mob is successfully flashed. #define COMSIG_MOB_FLASHED "mob_flashed" diff --git a/code/__DEFINES/dcs/signals/signals_mob/signals_mob_spawner.dm b/code/__DEFINES/dcs/signals/signals_mob/signals_mob_spawner.dm index 6ff8b1e8d61d4..2e1b157ec11f8 100644 --- a/code/__DEFINES/dcs/signals/signals_mob/signals_mob_spawner.dm +++ b/code/__DEFINES/dcs/signals/signals_mob/signals_mob_spawner.dm @@ -2,5 +2,8 @@ /// called when a spawner spawns a mob #define COMSIG_SPAWNER_SPAWNED "spawner_spawned" +/// Called when a spawner spawns a mob in a turf peel, but we need to use the default case. +#define COMSIG_SPAWNER_SPAWNED_DEFAULT "spawner_spawned_default" + /// called when a ghost clicks a spawner role: (mob/living) #define COMSIG_GHOSTROLE_SPAWNED "ghostrole_spawned" diff --git a/code/__DEFINES/dcs/signals/signals_mod.dm b/code/__DEFINES/dcs/signals/signals_mod.dm index c4007d1296910..d3439cf857291 100644 --- a/code/__DEFINES/dcs/signals/signals_mod.dm +++ b/code/__DEFINES/dcs/signals/signals_mod.dm @@ -1,10 +1,14 @@ //MODsuit signals /// Called when a module is selected to be the active one from on_select(obj/item/mod/module/module) #define COMSIG_MOD_MODULE_SELECTED "mod_module_selected" -/// Called when a MOD deploys one or more of its parts. +/// Called when a MOD user deploys one or more of its parts. #define COMSIG_MOD_DEPLOYED "mod_deployed" -/// Called when a MOD retracts one or more of its parts. +/// Called when a MOD user retracts one or more of its parts. #define COMSIG_MOD_RETRACTED "mod_retracted" +/// Called when a MOD deploys a part. +#define COMSIG_MOD_PART_DEPLOYED "mod_part_deployed" +/// Called when a MOD retracts a part. +#define COMSIG_MOD_PART_RETRACTED "mod_part_retracted" /// Called when a MOD is finished toggling itself. #define COMSIG_MOD_TOGGLED "mod_toggled" /// Called when a MOD activation is called from toggle_activate(mob/user) diff --git a/code/__DEFINES/dcs/signals/signals_object.dm b/code/__DEFINES/dcs/signals/signals_object.dm index 43e3a09a0287d..d34de1e356792 100644 --- a/code/__DEFINES/dcs/signals/signals_object.dm +++ b/code/__DEFINES/dcs/signals/signals_object.dm @@ -9,7 +9,7 @@ #define COMSIG_OBJ_DEFAULT_UNFASTEN_WRENCH "obj_default_unfasten_wrench" ///from base of /turf/proc/levelupdate(). (intact) true to hide and false to unhide #define COMSIG_OBJ_HIDE "obj_hide" -/// from /obj/item/toy/crayon/spraycan/afterattack: (user, spraycan, color_is_dark) +/// from /obj/item/toy/crayon/spraycan/use_on: (user, spraycan, color_is_dark) #define COMSIG_OBJ_PAINTED "obj_painted" #define DONT_USE_SPRAYCAN_CHARGES (1<<0) /// from /obj/obj_reskin: (mob/user, skin) @@ -161,9 +161,6 @@ /// Return to prevent the default behavior (attack_selfing) from ocurring. #define COMPONENT_ITEM_ACTION_SLOT_INVALID (1<<0) -/// Sent from /obj/item/attack_atom(): (atom/attacked_atom, mob/living/user) -#define COMSIG_ITEM_POST_ATTACK_ATOM "item_post_attack_atom" - ///from base of mob/living/carbon/attacked_by(): (mob/living/carbon/target, mob/living/user, hit_zone) #define COMSIG_ITEM_ATTACK_ZONE "item_attack_zone" ///from base of obj/item/hit_reaction(): (owner, hitby, attack_text, final_block_chance, damage, attack_type, damage_type) @@ -208,7 +205,7 @@ #define COMSIG_STACK_CAN_MERGE "stack_can_merge" #define CANCEL_STACK_MERGE (1<<0) -///from /obj/item/book/bible/afterattack(): (mob/user, proximity) +///from /obj/item/book/bible/interact_with_atom(): (mob/user) #define COMSIG_BIBLE_SMACKED "bible_smacked" ///stops the bible chain from continuing. When all of the effects of the bible smacking have been moved to a signal we can kill this #define COMSIG_END_BIBLE_CHAIN (1<<0) @@ -343,6 +340,10 @@ #define COMSIG_GUN_CHAMBER_PROCESSED "gun_chamber_processed" ///called in /obj/item/gun/ballistic/process_chamber (casing) #define COMSIG_CASING_EJECTED "casing_ejected" +///called in /obj/item/gun/ballistic/sawoff(mob/user, obj/item/saw, handle_modifications) : (mob/user) +#define COMSIG_GUN_BEING_SAWNOFF "gun_being_sawnoff" + #define COMPONENT_CANCEL_SAWING_OFF (1<<0) +#define COMSIG_GUN_SAWN_OFF "gun_sawn_off" // Jetpack things // Please kill me @@ -366,11 +367,11 @@ // /obj/item/grenade signals -///called in /obj/item/gun/process_fire (user, target, params, zone_override) +///called in /obj/item/grenade/proc/detonate(): (lanced_by) #define COMSIG_GRENADE_DETONATE "grenade_prime" -//called from many places in grenade code (armed_by, nade, det_time, delayoverride) +///called in /obj/item/grenade/gas_crystal/arm_grenade(): (armed_by, nade, det_time, delayoverride) #define COMSIG_MOB_GRENADE_ARMED "grenade_mob_armed" -///called in /obj/item/gun/process_fire (user, target, params, zone_override) +///called in /obj/item/grenade/proc/arm_grenade() and /obj/item/grenade/gas_crystal/arm_grenade(): (det_time, delayoverride) #define COMSIG_GRENADE_ARMED "grenade_armed" // /obj/projectile signals (sent to the firer) @@ -423,7 +424,7 @@ #define COMSIG_VIM_HEADLIGHTS_TOGGLED "vim_headlights_toggled" ///from /datum/computer_file/program/messenger/proc/receive_message -#define COMSIG_COMPUTER_RECIEVED_MESSAGE "computer_recieved_message" +#define COMSIG_COMPUTER_RECEIVED_MESSAGE "computer_received_message" ///from /datum/computer_file/program/virtual_pet/proc/handle_level_up #define COMSIG_VIRTUAL_PET_LEVEL_UP "virtual_pet_level_up" @@ -448,6 +449,7 @@ /// Prevents click from happening. #define COMPONENT_CANCEL_EQUIPMENT_CLICK (1<<0) +///from base of /obj/item/attack(): (mob/living, mob/living, params) #define COMSIG_ITEM_ATTACK "item_attack" ///from base of obj/item/attack_self(): (/mob) #define COMSIG_ITEM_ATTACK_SELF "item_attack_self" @@ -464,14 +466,8 @@ #define COMPONENT_SECONDARY_CALL_NORMAL_ATTACK_CHAIN (1<<2) /// From base of [/obj/item/proc/attack_secondary()]: (atom/target, mob/user, params) #define COMSIG_ITEM_ATTACK_SECONDARY "item_attack_secondary" -///from base of obj/item/afterattack(): (atom/target, mob/user, proximity_flag, click_parameters) +///from base of [obj/item/attack()]: (atom/target, mob/user, proximity_flag, click_parameters) #define COMSIG_ITEM_AFTERATTACK "item_afterattack" - /// Flag for when /afterattack potentially acts on an item. - /// Used for the swap hands/drop tutorials to know when you might just be trying to do something normally. - /// Does not necessarily imply success, or even that it did hit an item, just intent. - #define COMPONENT_AFTERATTACK_PROCESSED_ITEM (1<<0) -///from base of obj/item/afterattack_secondary(): (atom/target, mob/user, proximity_flag, click_parameters) -#define COMSIG_ITEM_AFTERATTACK_SECONDARY "item_afterattack_secondary" ///from base of obj/item/embedded(): (atom/target, obj/item/bodypart/part) #define COMSIG_ITEM_EMBEDDED "item_embedded" ///from base of datum/component/embedded/safeRemove(): (mob/living/carbon/victim) @@ -492,7 +488,7 @@ ///from base of /obj/item/mmi/set_brainmob(): (mob/living/brain/new_brainmob) #define COMSIG_MMI_SET_BRAINMOB "mmi_set_brainmob" -/// from base of /obj/item/slimepotion/speed/afterattack(): (obj/target, /obj/src, mob/user) +/// from base of /obj/item/slimepotion/speed/interact_with_atom(): (obj/target, /obj/src, mob/user) #define COMSIG_SPEED_POTION_APPLIED "speed_potion" #define SPEED_POTION_STOP (1<<0) diff --git a/code/__DEFINES/dcs/signals/signals_reagent.dm b/code/__DEFINES/dcs/signals/signals_reagent.dm index 08993ad56de02..5bb2c89d4ef33 100644 --- a/code/__DEFINES/dcs/signals/signals_reagent.dm +++ b/code/__DEFINES/dcs/signals/signals_reagent.dm @@ -19,8 +19,8 @@ ///from base of [/datum/reagent/proc/expose_atom]: (/turf, reac_volume) #define COMSIG_REAGENT_EXPOSE_TURF "reagent_expose_turf" -///from base of [/datum/system/materials/proc/InitializeMaterial]: (/datum/material) -#define COMSIG_MATERIALS_INIT_MAT "DSmaterials_init_mat" +///from base of [/datum/materials_controller/proc/InitializeMaterial]: (/datum/material) +#define COMSIG_MATERIALS_INIT_MAT "SSmaterials_init_mat" ///from base of [/datum/component/multiple_lives/proc/respawn]: (mob/respawned_mob, gibbed, lives_left) #define COMSIG_ON_MULTIPLE_LIVES_RESPAWN "on_multiple_lives_respawn" diff --git a/code/__DEFINES/dcs/signals/signals_storage.dm b/code/__DEFINES/dcs/signals/signals_storage.dm index 45b6ec6bfe3f2..26459ab4dad3d 100644 --- a/code/__DEFINES/dcs/signals/signals_storage.dm +++ b/code/__DEFINES/dcs/signals/signals_storage.dm @@ -5,5 +5,14 @@ /// Sent after dumping into some other storage object: (atom/dest_object, mob/user) #define COMSIG_STORAGE_DUMP_POST_TRANSFER "storage_dump_into_storage" -/// Sent to the STORAGE when an ITEM is STORED INSIDE. +/// Fired off the storage's PARENT when an ITEM is STORED INSIDE. (obj/item, mob, force) +#define COMSIG_ATOM_STORED_ITEM "atom_storing_item" + +/// Fired off the storage's PARENT when an ITEM is REMOVED. (obj/item, atom, silent) +#define COMSIG_ATOM_REMOVED_ITEM "atom_removing_item" + +/// Sent to the STORAGE when an ITEM is STORED INSIDE. (obj/item, mob, force) #define COMSIG_STORAGE_STORED_ITEM "storage_storing_item" + +/// Sent to the STORAGE when an ITEM is REMOVED. (obj/item, atom, silent) +#define COMSIG_STORAGE_REMOVED_ITEM "storage_removing_item" diff --git a/code/__DEFINES/dcs/signals/signals_xeno_control.dm b/code/__DEFINES/dcs/signals/signals_xeno_control.dm index 595f44f4f9174..660dc9ce44627 100644 --- a/code/__DEFINES/dcs/signals/signals_xeno_control.dm +++ b/code/__DEFINES/dcs/signals/signals_xeno_control.dm @@ -1,14 +1,6 @@ //Xenobio hotkeys -///from slime CtrlClickOn(): (/mob) -#define COMSIG_XENO_SLIME_CLICK_CTRL "xeno_slime_click_ctrl" -///from slime AltClickOn(): (/mob) -#define COMSIG_XENO_SLIME_CLICK_ALT "xeno_slime_click_alt" ///from slime ShiftClickOn(): (/mob) #define COMSIG_XENO_SLIME_CLICK_SHIFT "xeno_slime_click_shift" ///from turf ShiftClickOn(): (/mob) #define COMSIG_XENO_TURF_CLICK_SHIFT "xeno_turf_click_shift" -///from turf AltClickOn(): (/mob) -#define COMSIG_XENO_TURF_CLICK_CTRL "xeno_turf_click_alt" -///from monkey CtrlClickOn(): (/mob) -#define COMSIG_XENO_MONKEY_CLICK_CTRL "xeno_monkey_click_ctrl" diff --git a/code/__DEFINES/diseases.dm b/code/__DEFINES/diseases.dm index 047bb79582de4..fe05a30e0fd83 100644 --- a/code/__DEFINES/diseases.dm +++ b/code/__DEFINES/diseases.dm @@ -81,28 +81,28 @@ DEFINE_BITFIELD(spread_flags, list( //// Adjust to make it faster or slower to cure once the virus has reached its peak. #define DISEASE_PEAKED_RECOVERY_MULTIPLIER 1.2 /// Slowdown Recovery Bonus - set this to the maximum extra chance per tick you want people to get to recover from spaceacillin or other slowdown/virus resistance effects -#define DISEASE_SLOWDOWN_RECOVERY_BONUS 1 -/// Slowdown Recovery Bonus Duration - set this to the maximum # of cycles you want things that cause slowdown/virus resistance to be able to add a bonus up to DISEASE_SLOWDOWN_RECOVERY_BONUS.______qdel_list_wrapper(list/L) +#define DISEASE_SLOWDOWN_RECOVERY_BONUS 3 +/// Slowdown Recovery Bonus Duration - set this to the maximum # of cycles you want things that cause slowdown/virus resistance to be able to add a bonus up to DISEASE_SLOWDOWN_RECOVERY_BONUS. //// Scales down linearly over time. -#define DISEASE_SLOWDOWN_RECOVERY_BONUS_DURATION 100 +#define DISEASE_SLOWDOWN_RECOVERY_BONUS_DURATION 200 /// Negative Malnutrition Recovery Penalty //// Flat penalty to recovery chance if malnourished or starving -#define DISEASE_MALNUTRITION_RECOVERY_PENALTY 1.5 +#define DISEASE_MALNUTRITION_RECOVERY_PENALTY 3 /// Satiety Recovery Multiplier - added chance to recover based on positive satiety //// Multiplier of satiety/max_satiety if satiety is positive or zero. Increase to make satiety more valuable, decrease for less. -#define DISEASE_SATIETY_RECOVERY_MULTIPLIER 1 +#define DISEASE_SATIETY_RECOVERY_MULTIPLIER 3 /// Good Sleeping Recovery Bonus - additive benefits for various types of good sleep (blanket, bed, darkness, pillows.) //// Raise to make each factor add this much chance to recover. -#define DISEASE_GOOD_SLEEPING_RECOVERY_BONUS 0.2 +#define DISEASE_GOOD_SLEEPING_RECOVERY_BONUS 0.6 /// Sleeping Recovery Multiplier - multiplies ALL recovery chance effects by this amount. //// Set to 1 for no effect on recovery chances from sleeping. -#define DISEASE_SLEEPING_RECOVERY_MULTIPLIER 2 +#define DISEASE_SLEEPING_RECOVERY_MULTIPLIER 6 /// Final Cure Chance Multiplier - multiplies the disease's cure chance to get the probability of moving from stage 1 to a final cure. //// Must be greater than zero for diseases to self cure. -#define DISEASE_FINAL_CURE_CHANCE_MULTIPLIER 3 +#define DISEASE_FINAL_CURE_CHANCE_MULTIPLIER 6 /// Symptom Offset Duration - number of cycles over which sleeping/having spaceacillin or a slowdown effect can prevent symptoms appearing //// Set to maximum # of cycles you want to be able to offset symptoms. Scales down linearly over time. -#define DISEASE_SYMPTOM_OFFSET_DURATION 100 +#define DISEASE_SYMPTOM_OFFSET_DURATION 200 /// Symptom Frequency Modifier //// Raise to make symptoms fire less frequently, lower to make them fire more frequently. Keep at 0 or above. diff --git a/code/__DEFINES/dynamic.dm b/code/__DEFINES/dynamic.dm index 07c833cdc4947..0162ef755e315 100644 --- a/code/__DEFINES/dynamic.dm +++ b/code/__DEFINES/dynamic.dm @@ -38,3 +38,9 @@ #define RULESET_FORCE_ENABLED "force enabled" /// Ruleset should not run regardless of population and threat available #define RULESET_FORCE_DISABLED "force disabled" + +// Flavor ruletypes, used by station traits +/// Rulesets selected by dynamic at default +#define RULESET_CATEGORY_DEFAULT (1 << 0) +/// Rulesets not including crew antagonists, non-witting referring to antags like obsessed which aren't really enemies of the station +#define RULESET_CATEGORY_NO_WITTING_CREW_ANTAGONISTS (1 << 1) diff --git a/code/__DEFINES/economy.dm b/code/__DEFINES/economy.dm index 184419c2b5c79..5ffa92c05b691 100644 --- a/code/__DEFINES/economy.dm +++ b/code/__DEFINES/economy.dm @@ -64,7 +64,8 @@ #define CIV_JOB_MED 11 #define CIV_JOB_GROW 12 #define CIV_JOB_ATMOS 13 -#define CIV_JOB_RANDOM 14 +#define CIV_JOB_BITRUN 14 +#define CIV_JOB_RANDOM 15 //These defines are to be used to with the payment component, determines which lines will be used during a transaction. If in doubt, go with clinical. #define PAYMENT_CLINICAL "clinical" @@ -79,22 +80,3 @@ #define MARKET_EVENT_PROBABILITY 8 //Probability of a market event firing, in percent. Fires once per material, every stock market tick. #define MARKET_PROFIT_MODIFIER 0.8 //We don't make every sale a 1-1 of the actual buy price value, like with real life taxes and to encourage more smart trades - -/// Create quantity subtypes for stock market datums. -#define MARKET_QUANTITY_HELPERS(path) ##path/one {\ - amount = 1; \ -} \ -##path/five {\ - amount = 5; \ -} \ -##path/ten {\ - amount = 10; \ -} \ -##path/twenty_five {\ - amount = 25; \ -} \ -##path/fifty {\ - amount = 50; \ -} - - diff --git a/code/__DEFINES/fish.dm b/code/__DEFINES/fish.dm index 24c3c963598f8..8e03c920d248d 100644 --- a/code/__DEFINES/fish.dm +++ b/code/__DEFINES/fish.dm @@ -9,8 +9,8 @@ #define FAV_BAIT_DIFFICULTY_MOD -5 /// Difficulty modifier when bait is fish's disliked #define DISLIKED_BAIT_DIFFICULTY_MOD 15 -/// Difficulty modifier when our fisherman has the trait TRAIT_SETTLER -#define SETTLER_DIFFICULTY_MOD -5 +/// Difficulty modifier when our fisherman has the trait TRAIT_EXPERT_FISHER +#define EXPERT_FISHER_DIFFICULTY_MOD -5 #define FISH_TRAIT_MINOR_DIFFICULTY_BOOST 5 @@ -147,3 +147,8 @@ ///Fluff. The name of the aquarium company shown in the fish catalog #define AQUARIUM_COMPANY "Aquatech Ltd." + +/// how long between electrogenesis zaps +#define ELECTROGENESIS_DURATION 40 SECONDS +/// a random range the electrogenesis cooldown varies by +#define ELECTROGENESIS_VARIANCE (rand(-10 SECONDS, 10 SECONDS)) diff --git a/code/__DEFINES/fonts.dm b/code/__DEFINES/fonts.dm index 0f1dbd501d092..b643ec997ca10 100644 --- a/code/__DEFINES/fonts.dm +++ b/code/__DEFINES/fonts.dm @@ -13,7 +13,7 @@ #define SIGNATURE_FONT "Segoe Script" /// Emoji icon set -#define EMOJI_SET 'icons/ui_icons/emoji/emoji.dmi' +#define EMOJI_SET 'icons/ui/chat/emoji.dmi' // Font metrics bitfield /// Include leading A width and trailing C width in GetWidth() or in DrawText() diff --git a/code/__DEFINES/icon_smoothing.dm b/code/__DEFINES/icon_smoothing.dm index eb6216e7806d8..a853fde0c5dee 100644 --- a/code/__DEFINES/icon_smoothing.dm +++ b/code/__DEFINES/icon_smoothing.dm @@ -3,23 +3,28 @@ #define SMOOTH_CORNERS (1<<0) /// Smoothing system in where adjacencies are calculated and used to select a pre-baked icon_state, encoded by bitmasking. #define SMOOTH_BITMASK (1<<1) +/// Limits SMOOTH_BITMASK to only cardinal directions, for use with cardinal smoothing +#define SMOOTH_BITMASK_CARDINALS (1<<2) /// Atom has diagonal corners, with underlays under them. -#define SMOOTH_DIAGONAL_CORNERS (1<<2) +#define SMOOTH_DIAGONAL_CORNERS (1<<3) /// Atom will smooth with the borders of the map. -#define SMOOTH_BORDER (1<<3) +#define SMOOTH_BORDER (1<<4) /// Atom is currently queued to smooth. -#define SMOOTH_QUEUED (1<<4) +#define SMOOTH_QUEUED (1<<5) /// Smooths with objects, and will thus need to scan turfs for contents. -#define SMOOTH_OBJ (1<<5) +#define SMOOTH_OBJ (1<<6) /// Uses directional object smoothing, so we care not only about something being on the right turf, but also its direction /// Changes the meaning of smoothing_junction, instead of representing the directions we are smoothing in /// it represents the sides of our directional border object that have a neighbor /// Is incompatible with SMOOTH_CORNERS because border objects don't have corners -#define SMOOTH_BORDER_OBJECT (1<<6) +#define SMOOTH_BORDER_OBJECT (1<<7) + +#define USES_SMOOTHING (SMOOTH_CORNERS|SMOOTH_BITMASK|SMOOTH_BITMASK_CARDINALS) DEFINE_BITFIELD(smoothing_flags, list( "SMOOTH_CORNERS" = SMOOTH_CORNERS, "SMOOTH_BITMASK" = SMOOTH_BITMASK, + "SMOOTH_BITMASK_CARDINALS" = SMOOTH_BITMASK_CARDINALS, "SMOOTH_DIAGONAL_CORNERS" = SMOOTH_DIAGONAL_CORNERS, "SMOOTH_BORDER" = SMOOTH_BORDER, "SMOOTH_QUEUED" = SMOOTH_QUEUED, @@ -38,6 +43,9 @@ DEFINE_BITFIELD(smoothing_flags, list( #define SOUTHWEST_JUNCTION (1<<6) #define NORTHWEST_JUNCTION (1<<7) +#define CARDINAL_SMOOTHING_JUNCTIONS (NORTH_JUNCTION|SOUTH_JUNCTION|EAST_JUNCTION|WEST_JUNCTION) +#define ALL_SMOOTHING_JUNCTIONS (NORTH_JUNCTION|SOUTH_JUNCTION|EAST_JUNCTION|WEST_JUNCTION|NORTHEAST_JUNCTION|SOUTHEAST_JUNCTION|SOUTHWEST_JUNCTION|NORTHWEST_JUNCTION) + DEFINE_BITFIELD(smoothing_junction, list( "NORTH_JUNCTION" = NORTH_JUNCTION, "SOUTH_JUNCTION" = SOUTH_JUNCTION, @@ -51,7 +59,7 @@ DEFINE_BITFIELD(smoothing_junction, list( /*smoothing macros*/ -#define QUEUE_SMOOTH(thing_to_queue) if(thing_to_queue.smoothing_flags & (SMOOTH_CORNERS|SMOOTH_BITMASK)) {SSicon_smooth.add_to_queue(thing_to_queue)} +#define QUEUE_SMOOTH(thing_to_queue) if(thing_to_queue.smoothing_flags & USES_SMOOTHING) {SSicon_smooth.add_to_queue(thing_to_queue)} #define QUEUE_SMOOTH_NEIGHBORS(thing_to_queue) for(var/atom/atom_neighbor as anything in orange(1, thing_to_queue)) {QUEUE_SMOOTH(atom_neighbor)} diff --git a/code/__DEFINES/id_cards.dm b/code/__DEFINES/id_cards.dm index 6feca150b77f0..a42016dd3de3f 100644 --- a/code/__DEFINES/id_cards.dm +++ b/code/__DEFINES/id_cards.dm @@ -10,12 +10,12 @@ * explicitly equal 0 for all compatible wildcard slots. */ -/// Wildcard slot define for basic grey cards. Only hold 2 common wildcards. -#define WILDCARD_LIMIT_GREY list(WILDCARD_NAME_COMMON = list(limit = 2, usage = list())) -/// Wildcard slot define for Head of Staff silver cards. Can hold 3 common, 1 command and 1 private command. +/// Wildcard slot define for basic grey cards. Only hold 4 common wildcards. +#define WILDCARD_LIMIT_GREY list(WILDCARD_NAME_COMMON = list(limit = 4, usage = list())) +/// Wildcard slot define for Head of Staff silver cards. Can hold 6 common, 2 command and 1 private command. #define WILDCARD_LIMIT_SILVER list( \ - WILDCARD_NAME_COMMON = list(limit = 3, usage = list()), \ - WILDCARD_NAME_COMMAND = list(limit = 1, usage = list()), \ + WILDCARD_NAME_COMMON = list(limit = 6, usage = list()), \ + WILDCARD_NAME_COMMAND = list(limit = 2, usage = list()), \ WILDCARD_NAME_PRV_COMMAND = list(limit = 1, usage = list()) \ ) /// Wildcard slot define for Captain gold cards. Can hold infinite of any Captain level wildcard. @@ -28,10 +28,10 @@ #define WILDCARD_LIMIT_CENTCOM list(WILDCARD_NAME_CENTCOM = list(limit = -1, usage = list())) /// Wildcard slot define for Prisoner orange cards. No wildcard slots. #define WILDCARD_LIMIT_PRISONER list() -/// Wildcard slot define for Chameleon/Agent ID grey cards. Can hold 3 common, 1 command and 1 captain access. +/// Wildcard slot define for Chameleon/Agent ID grey cards. Can hold 6 common, 2 command and 1 captain access. #define WILDCARD_LIMIT_CHAMELEON list( \ - WILDCARD_NAME_COMMON = list(limit = 3, usage = list()), \ - WILDCARD_NAME_COMMAND = list(limit = 1, usage = list()), \ + WILDCARD_NAME_COMMON = list(limit = 6, usage = list()), \ + WILDCARD_NAME_COMMAND = list(limit = 2, usage = list()), \ WILDCARD_NAME_CAPTAIN = list(limit = 1, usage = list()) \ ) /// Wildcard slot define for admin/debug/weird, special abstract cards. Can hold infinite of any access. diff --git a/code/__DEFINES/interaction_flags.dm b/code/__DEFINES/interaction_flags.dm index 418466a0eb2c7..615fe5c4cbda2 100644 --- a/code/__DEFINES/interaction_flags.dm +++ b/code/__DEFINES/interaction_flags.dm @@ -20,6 +20,12 @@ #define INTERACT_ATOM_ALLOW_USER_LOCATION (1<<9) /// ignores mobility check #define INTERACT_ATOM_IGNORE_MOBILITY (1<<10) +// Bypass all adjacency checks for mouse drop +#define INTERACT_ATOM_MOUSEDROP_IGNORE_ADJACENT (1<<11) +/// Bypass all can_perform_action checks for mouse drop +#define INTERACT_ATOM_MOUSEDROP_IGNORE_USABILITY (1<<12) +/// Bypass all adjacency and other checks for mouse drop +#define INTERACT_ATOM_MOUSEDROP_IGNORE_CHECKS (INTERACT_ATOM_MOUSEDROP_IGNORE_ADJACENT | INTERACT_ATOM_MOUSEDROP_IGNORE_USABILITY) /// attempt pickup on attack_hand for items #define INTERACT_ITEM_ATTACK_HAND_PICKUP (1<<0) diff --git a/code/__DEFINES/inventory.dm b/code/__DEFINES/inventory.dm index f80316a133fe4..f915b0f66a7c5 100644 --- a/code/__DEFINES/inventory.dm +++ b/code/__DEFINES/inventory.dm @@ -241,6 +241,26 @@ GLOBAL_LIST_INIT(chaplain_suit_allowed, list( /obj/item/gun/ballistic/revolver/chaplain, )) +//Allowed list for all mining suits + +GLOBAL_LIST_INIT(mining_suit_allowed, list( + /obj/item/t_scanner/adv_mining_scanner, + /obj/item/melee/cleaving_saw, + /obj/item/climbing_hook, + /obj/item/flashlight, + /obj/item/grapple_gun, + /obj/item/tank/internals, + /obj/item/gun/energy/recharge/kinetic_accelerator, + /obj/item/kinetic_crusher, + /obj/item/knife, + /obj/item/mining_scanner, + /obj/item/organ/internal/monster_core, + /obj/item/storage/bag/ore, + /obj/item/pickaxe, + /obj/item/resonator, + /obj/item/spear, +)) + /// String for items placed into the left pocket. #define LOCATION_LPOCKET "in your left pocket" /// String for items placed into the right pocket diff --git a/code/__DEFINES/ipintel.dm b/code/__DEFINES/ipintel.dm new file mode 100644 index 0000000000000..9fbc14ae40dbf --- /dev/null +++ b/code/__DEFINES/ipintel.dm @@ -0,0 +1,15 @@ +#define IPINTEL_RATE_LIMIT_MINUTE "minute" +#define IPINTEL_RATE_LIMIT_DAY "day" + +/// An internal error occurred and the query cannot be processed +#define IPINTEL_UNKNOWN_INTERNAL_ERROR "unknown_internal_error" +/// An error occurred with the query and the result is unknown +#define IPINTEL_UNKNOWN_QUERY_ERROR "unknown_query_error" +/// Cannot query as we are rate limited for the rest of the day +#define IPINTEL_RATE_LIMITED_DAY "rate_limited_day" +/// Cannot query as we are rate limited for the rest of the minute +#define IPINTEL_RATE_LIMITED_MINUTE "rate_limited_minute" +/// The IP address is a VPN or bad IP +#define IPINTEL_BAD_IP "bad_ip" +/// The IP address is not a VPN or bad IP +#define IPINTEL_GOOD_IP "good_ip" diff --git a/code/__DEFINES/is_helpers.dm b/code/__DEFINES/is_helpers.dm index 3430f97dd7dcd..ba467347e87d2 100644 --- a/code/__DEFINES/is_helpers.dm +++ b/code/__DEFINES/is_helpers.dm @@ -231,6 +231,8 @@ GLOBAL_LIST_INIT(turfs_pass_meteor, typecacheof(list( #define islandmine(A) (istype(A, /obj/effect/mine)) +#define iscloset(A) (istype(A, /obj/structure/closet)) + #define issupplypod(A) (istype(A, /obj/structure/closet/supplypod)) #define isammocasing(A) (istype(A, /obj/item/ammo_casing)) diff --git a/code/__DEFINES/keybinding.dm b/code/__DEFINES/keybinding.dm index 2a2a092c6d05b..5f025ad99cffb 100644 --- a/code/__DEFINES/keybinding.dm +++ b/code/__DEFINES/keybinding.dm @@ -26,6 +26,7 @@ //Client #define COMSIG_KB_CLIENT_GETHELP_DOWN "keybinding_client_gethelp_down" #define COMSIG_KB_CLIENT_SCREENSHOT_DOWN "keybinding_client_screenshot_down" +#define COMSIG_KB_CLIENT_FULLSCREEN_DOWN "keybinding_client_fullscreen_down" #define COMSIG_KB_CLIENT_MINIMALHUD_DOWN "keybinding_client_minimalhud_down" //Communication diff --git a/code/__DEFINES/layers.dm b/code/__DEFINES/layers.dm index 9b5f73aa7fa76..08a771bf7ddf6 100644 --- a/code/__DEFINES/layers.dm +++ b/code/__DEFINES/layers.dm @@ -212,6 +212,7 @@ // ABOVE_GAME_PLANE layers #define NAVIGATION_EYE_LAYER 4.9 //#define FLY_LAYER 5 //For easy recordkeeping; this is a byond define +#define ABOVE_TREE_LAYER 5.01 #define GASFIRE_LAYER 5.05 #define RIPPLE_LAYER 5.1 @@ -280,7 +281,7 @@ ///Layer for lobby menu collapse button #define LOBBY_BELOW_MENU_LAYER 2 -///Layer for lobby menu background image and main buttons (Join/Ready, Observe, Charater Prefs) +///Layer for lobby menu background image and main buttons (Join/Ready, Observe, Character Prefs) #define LOBBY_MENU_LAYER 3 ///Layer for lobby menu shutter, which covers up the menu to collapse/expand it #define LOBBY_SHUTTER_LAYER 4 diff --git a/code/__DEFINES/living.dm b/code/__DEFINES/living.dm index 1f2316e8e1240..63993f4bc620b 100644 --- a/code/__DEFINES/living.dm +++ b/code/__DEFINES/living.dm @@ -1,3 +1,6 @@ // living_flags /// Simple mob trait, indicating it may follow continuous move actions controlled by code instead of by user input. #define MOVES_ON_ITS_OWN (1<<0) +/// Always does *deathgasp when they die +/// If unset mobs will only deathgasp if supplied a death sound or custom death message +#define ALWAYS_DEATHGASP (1<<1) diff --git a/code/__DEFINES/maps.dm b/code/__DEFINES/maps.dm index 7e26e30d18dc0..c76ba60911355 100644 --- a/code/__DEFINES/maps.dm +++ b/code/__DEFINES/maps.dm @@ -176,11 +176,13 @@ Always compile, always use that verb, and always make sure that it works for wha #define BIOME_LOW_HEAT "low_heat" #define BIOME_LOWMEDIUM_HEAT "lowmedium_heat" +#define BIOME_MEDIUM_HEAT "medium_heat" #define BIOME_HIGHMEDIUM_HEAT "highmedium_heat" #define BIOME_HIGH_HEAT "high_heat" #define BIOME_LOW_HUMIDITY "low_humidity" #define BIOME_LOWMEDIUM_HUMIDITY "lowmedium_humidity" +#define BIOME_MEDIUM_HUMIDITY "medium_humidity" #define BIOME_HIGHMEDIUM_HUMIDITY "highmedium_humidity" #define BIOME_HIGH_HUMIDITY "high_humidity" diff --git a/code/__DEFINES/mobfactions.dm b/code/__DEFINES/mobfactions.dm index d503a499d0da0..aea143dad253c 100644 --- a/code/__DEFINES/mobfactions.dm +++ b/code/__DEFINES/mobfactions.dm @@ -83,7 +83,8 @@ #define FACTION_TURRET "turret" /// Vines, lots of overlap with plants #define FACTION_VINES "vines" - +///raptor factions +#define FACTION_RAPTOR "raptor" // Antagonist factions /// Cultists and their constructs diff --git a/code/__DEFINES/mobs.dm b/code/__DEFINES/mobs.dm index 5428f2ac3dd58..4265428e56f9b 100644 --- a/code/__DEFINES/mobs.dm +++ b/code/__DEFINES/mobs.dm @@ -16,10 +16,11 @@ #define BLOOD_VOLUME_MAXIMUM 2000 #define BLOOD_VOLUME_SLIME_SPLIT 1120 #define BLOOD_VOLUME_NORMAL 560 -#define BLOOD_VOLUME_SAFE 475 -#define BLOOD_VOLUME_OKAY 336 -#define BLOOD_VOLUME_BAD 224 -#define BLOOD_VOLUME_SURVIVE 122 +#define BLOOD_VOLUME_SAFE (BLOOD_VOLUME_NORMAL * (1 - 0.15)) // Latter number is percentage of blood lost, for readability! +#define BLOOD_VOLUME_OKAY (BLOOD_VOLUME_NORMAL * (1 - 0.30)) +#define BLOOD_VOLUME_RISKY (BLOOD_VOLUME_NORMAL * (1 - 0.45)) +#define BLOOD_VOLUME_BAD (BLOOD_VOLUME_NORMAL * (1 - 0.60)) +#define BLOOD_VOLUME_SURVIVE (BLOOD_VOLUME_NORMAL * (1 - 0.80)) /// How efficiently humans regenerate blood. #define BLOOD_REGEN_FACTOR 0.25 @@ -84,6 +85,8 @@ #define BODYTYPE_ALIEN (1<<3) ///The limb is from a golem #define BODYTYPE_GOLEM (1<<4) +//The limb is a peg limb +#define BODYTYPE_PEG (1<<5) // Bodyshape defines for how things can be worn, i.e., what "shape" the mob sprite is ///The limb fits the human mold. This is not meant to be literal, if the sprite "fits" on a human, it is "humanoid", regardless of origin. @@ -95,7 +98,7 @@ ///The limb is snouted. #define BODYSHAPE_SNOUTED (1<<3) -#define BODYTYPE_BIOSCRAMBLE_INCOMPATIBLE (BODYTYPE_ROBOTIC | BODYTYPE_LARVA_PLACEHOLDER | BODYTYPE_GOLEM) +#define BODYTYPE_BIOSCRAMBLE_INCOMPATIBLE (BODYTYPE_ROBOTIC | BODYTYPE_LARVA_PLACEHOLDER | BODYTYPE_GOLEM | BODYTYPE_PEG) #define BODYTYPE_CAN_BE_BIOSCRAMBLED(bodytype) (!(bodytype & BODYTYPE_BIOSCRAMBLE_INCOMPATIBLE)) // Defines for Species IDs. Used to refer to the name of a species, for things like bodypart names or species preferences. @@ -135,6 +138,8 @@ #define BODYPART_ID_LARVA "larva" #define BODYPART_ID_PSYKER "psyker" #define BODYPART_ID_MEAT "meat" +#define BODYPART_ID_PEG "peg" + //See: datum/species/var/digitigrade_customization ///The species does not have digitigrade legs in generation. @@ -161,8 +166,6 @@ #define HUMAN_MAX_OXYLOSS 3 #define HUMAN_CRIT_MAX_OXYLOSS (SSMOBS_DT/3) -#define STAMINA_REGEN_BLOCK_TIME (10 SECONDS) - #define HEAT_DAMAGE_LEVEL_1 1 //Amount of damage applied when your body temperature just passes the 360.15k safety point #define HEAT_DAMAGE_LEVEL_2 1.5 //Amount of damage applied when your body temperature passes the 400K point #define HEAT_DAMAGE_LEVEL_3 4 //Amount of damage applied when your body temperature passes the 460K point and you are on fire @@ -274,6 +277,7 @@ //Disgust levels for humans #define DISGUST_LEVEL_MAXEDOUT 150 +#define DISGUST_LEVEL_VERYDISGUSTED 100 #define DISGUST_LEVEL_DISGUSTED 75 #define DISGUST_LEVEL_VERYGROSS 50 #define DISGUST_LEVEL_GROSS 25 @@ -306,7 +310,7 @@ #define SLIME_EVOLUTION_THRESHOLD 10 //Slime evolution cost in nutrition -#define SLIME_EVOLUTION_COST 200 +#define SLIME_EVOLUTION_COST 100 //Slime extract crossing. Controls how many extracts is required to feed to a slime to core-cross. #define SLIME_EXTRACT_CROSSING_REQUIRED 10 @@ -440,11 +444,14 @@ #define REM REAGENTS_EFFECT_MULTIPLIER //! Shorthand for the above define for ease of use in equations and the like // Eye protection +// THese values are additive to determine your overall flash protection. #define FLASH_PROTECTION_HYPER_SENSITIVE -2 #define FLASH_PROTECTION_SENSITIVE -1 #define FLASH_PROTECTION_NONE 0 #define FLASH_PROTECTION_FLASH 1 #define FLASH_PROTECTION_WELDER 2 +#define FLASH_PROTECTION_WELDER_SENSITIVE 3 +#define FLASH_PROTECTION_WELDER_HYPER_SENSITIVE 4 // AI Toggles #define AI_CAMERA_LUMINOSITY 5 @@ -620,8 +627,6 @@ //defines for grad_color and grad_styles list access keys #define GRADIENT_HAIR_KEY 1 #define GRADIENT_FACIAL_HAIR_KEY 2 -//Keep up to date with the highest key value -#define GRADIENTS_LEN 2 // /datum/sprite_accessory/gradient defines #define GRADIENT_APPLIES_TO_HAIR (1<<0) @@ -634,6 +639,7 @@ // Otherwise they are completely arbitrary #define MONKEY_HEIGHT_DWARF 2 #define MONKEY_HEIGHT_MEDIUM 4 +#define MONKEY_HEIGHT_TALL HUMAN_HEIGHT_DWARF #define HUMAN_HEIGHT_DWARF 6 #define HUMAN_HEIGHT_SHORTEST 8 #define HUMAN_HEIGHT_SHORT 10 @@ -661,39 +667,41 @@ GLOBAL_LIST_INIT(human_heights_to_offsets, list( /// Total number of layers for mob overlays /// KEEP THIS UP-TO-DATE OR SHIT WILL BREAK /// Also consider updating layers_to_offset -#define TOTAL_LAYERS 34 +#define TOTAL_LAYERS 35 /// Mutations layer - Tk headglows, cold resistance glow, etc -#define MUTATIONS_LAYER 34 +#define MUTATIONS_LAYER 35 /// Mutantrace features (tail when looking south) that must appear behind the body parts -#define BODY_BEHIND_LAYER 33 +#define BODY_BEHIND_LAYER 34 /// Layer for bodyparts that should appear behind every other bodypart - Mostly, legs when facing WEST or EAST -#define BODYPARTS_LOW_LAYER 32 +#define BODYPARTS_LOW_LAYER 33 /// Layer for most bodyparts, appears above BODYPARTS_LOW_LAYER and below BODYPARTS_HIGH_LAYER -#define BODYPARTS_LAYER 31 +#define BODYPARTS_LAYER 32 /// Mutantrace features (snout, body markings) that must appear above the body parts -#define BODY_ADJ_LAYER 30 +#define BODY_ADJ_LAYER 31 /// Underwear, undershirts, socks, eyes, lips(makeup) -#define BODY_LAYER 29 +#define BODY_LAYER 30 /// Mutations that should appear above body, body_adj and bodyparts layer (e.g. laser eyes) -#define FRONT_MUTATIONS_LAYER 28 +#define FRONT_MUTATIONS_LAYER 29 /// Damage indicators (cuts and burns) -#define DAMAGE_LAYER 27 +#define DAMAGE_LAYER 28 /// Jumpsuit clothing layer -#define UNIFORM_LAYER 26 +#define UNIFORM_LAYER 27 /// ID card layer -#define ID_LAYER 25 +#define ID_LAYER 26 /// ID card layer (might be deprecated) -#define ID_CARD_LAYER 24 +#define ID_CARD_LAYER 25 /// Layer for bodyparts that should appear above every other bodypart - Currently only used for hands -#define BODYPARTS_HIGH_LAYER 23 +#define BODYPARTS_HIGH_LAYER 24 /// Gloves layer -#define GLOVES_LAYER 22 +#define GLOVES_LAYER 23 /// Shoes layer -#define SHOES_LAYER 21 +#define SHOES_LAYER 22 /// Layer for masks that are worn below ears and eyes (like Balaclavas) (layers below hair, use flagsinv=HIDEHAIR as needed) -#define LOW_FACEMASK_LAYER 20 +#define LOW_FACEMASK_LAYER 21 /// Ears layer (Spessmen have ears? Wow) -#define EARS_LAYER 19 +#define EARS_LAYER 20 +/// Layer for neck apperal that should appear below the suit slot (like neckties) +#define LOW_NECK_LAYER 19 /// Suit layer (armor, coats, etc.) #define SUIT_LAYER 18 /// Glasses layer @@ -702,7 +710,7 @@ GLOBAL_LIST_INIT(human_heights_to_offsets, list( #define BELT_LAYER 16 //Possible make this an overlay of somethign required to wear a belt? /// Suit storage layer (tucking a gun or baton underneath your armor) #define SUIT_STORE_LAYER 15 -/// Neck layer (for wearing ties and bedsheets) +/// Neck layer (for wearing capes and bedsheets) #define NECK_LAYER 14 /// Back layer (for backpacks and equipment on your back) #define BACK_LAYER 13 @@ -749,7 +757,9 @@ GLOBAL_LIST_INIT(layers_to_offset, list( "[BELT_LAYER]" = LOWER_BODY, // Everything below looks fine with or without a filter, so we can skip it and just offset // (In practice they'd be fine if they got a filter but we can optimize a bit by not.) + "[NECK_LAYER]" = UPPER_BODY, "[GLASSES_LAYER]" = UPPER_BODY, + "[LOW_NECK_LAYER]" = UPPER_BODY, "[ABOVE_BODY_FRONT_GLASSES_LAYER]" = UPPER_BODY, // currently unused "[ABOVE_BODY_FRONT_HEAD_LAYER]" = UPPER_BODY, // only used for head stuff "[GLOVES_LAYER]" = LOWER_BODY, @@ -826,8 +836,12 @@ GLOBAL_LIST_INIT(layers_to_offset, list( #define ALLOW_RESTING (1<<7) /// If this is accessible to creatures with ventcrawl capabilities #define NEED_VENTCRAWL (1<<8) +/// Skips adjacency checks +#define BYPASS_ADJACENCY (1<<9) +/// Skips reccursive loc checks +#define NOT_INSIDE_TARGET (1<<10) /// Checks for base adjacency, but silences the error -#define SILENT_ADJACENCY (1<<9) +#define SILENT_ADJACENCY (1<<11) /// The default mob sprite size (used for shrinking or enlarging the mob sprite to regular size) #define RESIZE_DEFAULT_SIZE 1 @@ -949,6 +963,9 @@ GLOBAL_LIST_INIT(layers_to_offset, list( /// Types of bullets that mining mobs take full damage from #define MINING_MOB_PROJECTILE_VULNERABILITY list(BRUTE) +/// Helper macro that determines if the mob is at the threshold to start vomitting due to high toxin levels +#define AT_TOXIN_VOMIT_THRESHOLD(mob) (mob.getToxLoss() > 45 && mob.nutrition > 20) + /// The duration of the flip emote animation #define FLIP_EMOTE_DURATION 0.7 SECONDS diff --git a/code/__DEFINES/mod.dm b/code/__DEFINES/mod.dm index be59793927f07..8257e1969bedb 100644 --- a/code/__DEFINES/mod.dm +++ b/code/__DEFINES/mod.dm @@ -4,7 +4,7 @@ /// The default cell drain of a modsuit. The standard modsuit active power usage drains this much energy per modsuit second. #define DEFAULT_CHARGE_DRAIN (0.005 * STANDARD_CELL_CHARGE) // A standard cell lasts 200 seconds with this on active power usage, while a high power one lasts 2,000 seconds. -/// Default time for a part to seal +/// Default time for a part of the suit to seal. #define MOD_ACTIVATION_STEP_TIME (2 SECONDS) /// Passive module, just acts when put in naturally. @@ -23,14 +23,8 @@ /// This module can be used while the suit is off #define MODULE_ALLOW_INACTIVE (1<<2) -//Defines used by the theme for clothing flags and similar -#define CONTROL_LAYER "control_layer" -#define HELMET_FLAGS "helmet_flags" -#define CHESTPLATE_FLAGS "chestplate_flags" -#define GAUNTLETS_FLAGS "gauntlets_flags" -#define BOOTS_FLAGS "boots_flags" - #define UNSEALED_LAYER "unsealed_layer" +#define SEALED_LAYER "sealed_layer" #define UNSEALED_CLOTHING "unsealed_clothing" #define SEALED_CLOTHING "sealed_clothing" #define UNSEALED_INVISIBILITY "unsealed_invisibility" @@ -38,6 +32,8 @@ #define UNSEALED_COVER "unsealed_cover" #define SEALED_COVER "sealed_cover" #define CAN_OVERSLOT "can_overslot" +#define UNSEALED_MESSAGE "unsealed_message" +#define SEALED_MESSAGE "sealed_message" //Defines used to override MOD clothing's icon and worn icon files in the skin. #define MOD_ICON_OVERRIDE "mod_icon_override" @@ -49,6 +45,16 @@ #define MODLINK_FREQ_CHARLIE "CHRL" #define MODLINK_FREQ_CENTCOM "CC" +//Default text for different messages for the user. +#define HELMET_UNSEAL_MESSAGE "hisses open" +#define HELMET_SEAL_MESSAGE "hisses closed" +#define CHESTPLATE_UNSEAL_MESSAGE "releases your chest" +#define CHESTPLATE_SEAL_MESSAGE "cinches tightly around your chest" +#define GAUNTLET_UNSEAL_MESSAGE "become loose around your fingers" +#define GAUNTLET_SEAL_MESSAGE "tighten around your fingers and wrists" +#define BOOT_UNSEAL_MESSAGE "relax their grip on your legs" +#define BOOT_SEAL_MESSAGE "seal around your feet" + /// Global list of all /datum/mod_theme GLOBAL_LIST_INIT(mod_themes, setup_mod_themes()) /// Global list of all ids associated to a /datum/mod_link instance diff --git a/code/__DEFINES/modular_computer.dm b/code/__DEFINES/modular_computer.dm index a8e5c38ffc68f..9659e7e0d7acf 100644 --- a/code/__DEFINES/modular_computer.dm +++ b/code/__DEFINES/modular_computer.dm @@ -41,7 +41,7 @@ #define PROGRAM_CATEGORY_SCIENCE "Science" ///The default amount a program should take in cell use. -#define PROGRAM_BASIC_CELL_USE 15 +#define PROGRAM_BASIC_CELL_USE 2 WATTS ///This app grants a minor protection against being PDA bombed if installed. ///(can sometimes prevent it from being sent, while wasting a PDA bomb from the sender). diff --git a/code/__DEFINES/movement.dm b/code/__DEFINES/movement.dm index 540e5f7914c24..be3546ea102d1 100644 --- a/code/__DEFINES/movement.dm +++ b/code/__DEFINES/movement.dm @@ -103,7 +103,7 @@ GLOBAL_VAR_INIT(glide_size_multiplier, 1.0) #define ZMOVE_CHECK_PULLS (ZMOVE_CHECK_PULLING|ZMOVE_CHECK_PULLEDBY) /// Flags used in "Move Upwards" and "Move Downwards" verbs. -#define ZMOVE_FLIGHT_FLAGS (ZMOVE_CAN_FLY_CHECKS|ZMOVE_INCAPACITATED_CHECKS|ZMOVE_CHECK_PULLS|ZMOVE_ALLOW_BUCKLED) +#define ZMOVE_FLIGHT_FLAGS (ZMOVE_CAN_FLY_CHECKS|ZMOVE_INCAPACITATED_CHECKS|ZMOVE_CHECK_PULLS|ZMOVE_ALLOW_BUCKLED|ZMOVE_INCLUDE_PULLED) /// Used when walking upstairs #define ZMOVE_STAIRS_FLAGS (ZMOVE_CHECK_PULLEDBY|ZMOVE_ALLOW_BUCKLED) /// Used for falling down open space. diff --git a/code/__DEFINES/obj_flags.dm b/code/__DEFINES/obj_flags.dm index 9e38eada92313..9f575de9fbc55 100644 --- a/code/__DEFINES/obj_flags.dm +++ b/code/__DEFINES/obj_flags.dm @@ -75,18 +75,18 @@ #define DANGEROUS_OBJECT (1<<10) /// Clothes that use large icons, for applying the proper overlays like blood #define LARGE_WORN_ICON (1<<11) -/// Clothes that block speech (i.e the muzzle). Can be applied to any clothing piece. -#define BLOCKS_SPEECH (1<<12) /// prevents from placing on plasmaman helmet or modsuit hat holder -#define STACKABLE_HELMET_EXEMPT (1<<13) +#define STACKABLE_HELMET_EXEMPT (1<<12) /// Prevents plasmamen from igniting when wearing this -#define PLASMAMAN_PREVENT_IGNITION (1<<14) +#define PLASMAMAN_PREVENT_IGNITION (1<<13) /// Usable as casting clothes by wizards (matters for suits, glasses and headwear) -#define CASTING_CLOTHES (1<<15) +#define CASTING_CLOTHES (1<<14) ///Moths can't eat the clothing that has this flag. -#define INEDIBLE_CLOTHING (1<<16) +#define INEDIBLE_CLOTHING (1<<15) /// Headgear/helmet allows internals -#define HEADINTERNALS (1<<17) +#define HEADINTERNALS (1<<16) +/// Prevents masks from getting adjusted from enabling internals +#define INTERNALS_ADJUST_EXEMPT (1<<17) /// Integrity defines for clothing (not flags but close enough) #define CLOTHING_PRISTINE 0 // We have no damage on the clothing @@ -106,3 +106,8 @@ /// Flags for sharpness in obj/item #define SHARP_EDGED (1<<0) #define SHARP_POINTY (1<<1) + +/// Flags for specifically what kind of items to get in get_equipped_items +#define INCLUDE_POCKETS (1<<0) +#define INCLUDE_ACCESSORIES (1<<1) +#define INCLUDE_HELD (1<<2) diff --git a/code/__DEFINES/paper.dm b/code/__DEFINES/paper.dm index feb41c0409cd3..0d70a2f3ca40d 100644 --- a/code/__DEFINES/paper.dm +++ b/code/__DEFINES/paper.dm @@ -16,3 +16,5 @@ #define BARCODE_SCANNER_CHECKIN "check_in" #define BARCODE_SCANNER_INVENTORY "inventory" + +#define IS_WRITING_UTENSIL(thing) (thing?.get_writing_implement_details()?["interaction_mode"] == MODE_WRITING) diff --git a/code/__DEFINES/power.dm b/code/__DEFINES/power.dm index b9752eac351f1..2476906d91322 100644 --- a/code/__DEFINES/power.dm +++ b/code/__DEFINES/power.dm @@ -20,13 +20,18 @@ #define JOULES * JOULE ///The capacity of a standard power cell -#define STANDARD_CELL_VALUE (1 MEGA) +#define STANDARD_CELL_VALUE (10 KILO) ///The amount of energy, in joules, a standard powercell has. - #define STANDARD_CELL_CHARGE (STANDARD_CELL_VALUE JOULES) // 1 MJ. + #define STANDARD_CELL_CHARGE (STANDARD_CELL_VALUE JOULES) // 10 KJ. ///The amount of power, in watts, a standard powercell can give. - #define STANDARD_CELL_RATE (STANDARD_CELL_VALUE WATTS) // 1 MW. + #define STANDARD_CELL_RATE (STANDARD_CELL_VALUE WATTS) // 10 KW. -GLOBAL_VAR_INIT(CHARGELEVEL, 0.01) // Cap for how fast cells charge, as a percentage per second (.01 means cellcharge is capped to 1% per second) +/// Capacity of a standard battery +#define STANDARD_BATTERY_VALUE (STANDARD_CELL_VALUE * 100) + /// The amount of energy, in joules, a standard battery has. + #define STANDARD_BATTERY_CHARGE (STANDARD_BATTERY_VALUE JOULES) // 1 MJ + /// The amount of energy, in watts, a standard battery can give. + #define STANDARD_BATTERY_RATE (STANDARD_BATTERY_VALUE WATTS) // 1 MW // Converts cable layer to its human readable name GLOBAL_LIST_INIT(cable_layer_to_name, list( diff --git a/code/__DEFINES/preferences.dm b/code/__DEFINES/preferences.dm index c7daddd2970ae..51a995c90e100 100644 --- a/code/__DEFINES/preferences.dm +++ b/code/__DEFINES/preferences.dm @@ -35,7 +35,7 @@ #define CHAT_GHOSTLAWS (1<<11) #define CHAT_LOGIN_LOGOUT (1<<12) -#define TOGGLES_DEFAULT_CHAT (CHAT_OOC|CHAT_DEAD|CHAT_GHOSTEARS|CHAT_GHOSTSIGHT|CHAT_PRAYER|CHAT_PULLR|CHAT_GHOSTWHISPER|CHAT_GHOSTPDA|CHAT_GHOSTRADIO|CHAT_BANKCARD|CHAT_GHOSTLAWS|CHAT_LOGIN_LOGOUT) +#define TOGGLES_DEFAULT_CHAT (CHAT_OOC|CHAT_DEAD|CHAT_PRAYER|CHAT_PULLR|CHAT_GHOSTPDA|CHAT_GHOSTRADIO|CHAT_BANKCARD|CHAT_GHOSTLAWS|CHAT_LOGIN_LOGOUT) #define PARALLAX_INSANE "Insane" #define PARALLAX_HIGH "High" @@ -142,3 +142,17 @@ /// The key used for sprite accessories that should never actually be applied to the player. #define SPRITE_ACCESSORY_NONE "None" + +// Loadout +/// Used to make something not recolorable even if it's capable +#define DONT_GREYSCALE -1 +// Loadout item info keys +// Changing these will break existing loadouts +/// Tracks GAGS color information +#define INFO_GREYSCALE "greyscale" +/// Used to set custom names +#define INFO_NAMED "name" +/// Used for specific alt-reskins, like the pride pin +#define INFO_RESKIN "reskin" +/// Handles which layer the item will be on, for accessories +#define INFO_LAYER "layer" diff --git a/code/__DEFINES/projectiles.dm b/code/__DEFINES/projectiles.dm index e471fe2324d93..ed4c66b799c59 100644 --- a/code/__DEFINES/projectiles.dm +++ b/code/__DEFINES/projectiles.dm @@ -53,17 +53,17 @@ /// The caliber used by the harpoon gun. #define CALIBER_HARPOON "harpoon" /// The caliber used by the rebar crossbow. -#define CALIBER_REBAR "sharpened iron rod" +#define CALIBER_REBAR "sharpened rod" /// The caliber used by the rebar crossbow when forced to hold 2 rods. -#define CALIBER_REBAR_FORCED "sharpened iron rod" +#define CALIBER_REBAR_FORCED "sharpened rod" /// The caliber used by the syndicate rebar crossbow. -#define CALIBER_REBAR_SYNDIE "jagged iron rod" -/// The caliber used by the syndicate rebar crossbow. -#define CALIBER_REBAR_SYNDIE_NORMAL "sharpened iron rod" +#define CALIBER_REBAR_SYNDIE "sharpened rod" /// The caliber used by the meat hook. #define CALIBER_HOOK "hook" /// The caliber used by the changeling tentacle mutation. #define CALIBER_TENTACLE "tentacle" +/// The caliber used by pipeguns and pipe pistols +#define CALIBER_JUNK "junk" /// For gunpoints, how many tiles around the target the shooter can roam without losing their shot #define GUNPOINT_SHOOTER_STRAY_RANGE 2 diff --git a/code/__DEFINES/pronouns.dm b/code/__DEFINES/pronouns.dm new file mode 100644 index 0000000000000..d137970f217eb --- /dev/null +++ b/code/__DEFINES/pronouns.dm @@ -0,0 +1,42 @@ +/// she, he, they, it "%PRONOUN_they" = "p_they" +/// She, He, They, It "%PRONOUN_They" = "p_They" +/// her, his, their, its "%PRONOUN_their" = "p_their" +/// Her, His, Their, Its "%PRONOUN_Their" = "p_Their" +/// hers, his, theirs, its "%PRONOUN_theirs" = "p_theirs" +/// Hers, His, Theirs, Its "%PRONOUN_Theirs" = "p_Theirs" +/// her, him, them, it "%PRONOUN_them" = "p_them" +/// Her, Him, Them, It "%PRONOUN_Them" = "p_Them" +/// has, have "%PRONOUN_have" = "p_have" +/// is, are "%PRONOUN_are" = "p_are" +/// was, were "%PRONOUN_were" = "p_were" +/// does, do "%PRONOUN_do" = "p_do" +/// she has, he has, they have, it has "%PRONOUN_theyve" = "p_theyve" +/// She has, He has, They have, It has "%PRONOUN_Theyve" = "p_Theyve" +/// she is, he is, they are, it is "%PRONOUN_theyre" = "p_theyre" +/// She is, He is, They are, It is "%PRONOUN_Theyre" = "p_Theyre" +/// s, null (she looks, they look) "%PRONOUN_s" = "p_s" +/// es, null (she goes, they go) "%PRONOUN_es" = "p_es" + +/// Don't forget to update the grep if you add more! tools/ci/check_grep.sh -> pronoun helper spellcheck + +/// A list for all the pronoun procs, if you need to iterate or search through it or something. +#define ALL_PRONOUNS list( \ + "%PRONOUN_they" = TYPE_PROC_REF(/datum, p_they), \ + "%PRONOUN_They" = TYPE_PROC_REF(/datum, p_They), \ + "%PRONOUN_their" = TYPE_PROC_REF(/datum, p_their), \ + "%PRONOUN_Their" = TYPE_PROC_REF(/datum, p_Their), \ + "%PRONOUN_theirs" = TYPE_PROC_REF(/datum, p_theirs), \ + "%PRONOUN_Theirs" = TYPE_PROC_REF(/datum, p_Theirs), \ + "%PRONOUN_them" = TYPE_PROC_REF(/datum, p_them), \ + "%PRONOUN_Them" = TYPE_PROC_REF(/datum, p_Them), \ + "%PRONOUN_have" = TYPE_PROC_REF(/datum, p_have), \ + "%PRONOUN_are" = TYPE_PROC_REF(/datum, p_are), \ + "%PRONOUN_were" = TYPE_PROC_REF(/datum, p_were), \ + "%PRONOUN_do" = TYPE_PROC_REF(/datum, p_do), \ + "%PRONOUN_theyve" = TYPE_PROC_REF(/datum, p_theyve), \ + "%PRONOUN_Theyve" = TYPE_PROC_REF(/datum, p_Theyve), \ + "%PRONOUN_theyre" = TYPE_PROC_REF(/datum, p_theyre), \ + "%PRONOUN_Theyre" = TYPE_PROC_REF(/datum, p_Theyre), \ + "%PRONOUN_s" = TYPE_PROC_REF(/datum, p_s), \ + "%PRONOUN_es" = TYPE_PROC_REF(/datum, p_es) \ +) diff --git a/code/__DEFINES/research.dm b/code/__DEFINES/research.dm index d3f99314f1d8f..cf35d553ec4dc 100644 --- a/code/__DEFINES/research.dm +++ b/code/__DEFINES/research.dm @@ -4,8 +4,15 @@ //! Techweb names for new point types. Can be used to define specific point values for specific types of research (science, security, engineering, etc.) #define TECHWEB_POINT_TYPE_GENERIC "General Research" +//! Amount of points required to unlock nodes of corresponding tiers +#define TECHWEB_TIER_1_POINTS 40 +#define TECHWEB_TIER_2_POINTS 80 +#define TECHWEB_TIER_3_POINTS 120 +#define TECHWEB_TIER_4_POINTS 160 +#define TECHWEB_TIER_5_POINTS 200 + //! Amount of points gained per second by a single R&D server, see: [research][code/controllers/subsystem/research.dm] -#define TECHWEB_SINGLE_SERVER_INCOME 52.3 +#define TECHWEB_SINGLE_SERVER_INCOME 1 //! Swab cell line types #define CELL_LINE_TABLE_SLUDGE "cell_line_sludge_table" diff --git a/code/__DEFINES/research/anomalies.dm b/code/__DEFINES/research/anomalies.dm index 3b2687b5fcf55..a1e30cd142f00 100644 --- a/code/__DEFINES/research/anomalies.dm +++ b/code/__DEFINES/research/anomalies.dm @@ -1,8 +1,8 @@ // Max amounts of cores you can make -#define MAX_CORES_BLUESPACE 8 +#define MAX_CORES_BLUESPACE 3 #define MAX_CORES_GRAVITATIONAL 8 #define MAX_CORES_FLUX 8 -#define MAX_CORES_VORTEX 8 +#define MAX_CORES_VORTEX 1 #define MAX_CORES_PYRO 8 #define MAX_CORES_HALLUCINATION 8 #define MAX_CORES_BIOSCRAMBLER 8 diff --git a/code/__DEFINES/research/slimes.dm b/code/__DEFINES/research/slimes.dm index 344514afb76e3..03671ee24d2a0 100644 --- a/code/__DEFINES/research/slimes.dm +++ b/code/__DEFINES/research/slimes.dm @@ -11,15 +11,15 @@ #define SLIME_MAX_POWER 10 ///The maximum amount of nutrition a slime can contain -#define SLIME_MAX_NUTRITION 1000 +#define SLIME_MAX_NUTRITION 200 ///The starting nutrition of a slime -#define SLIME_STARTING_NUTRITION 700 +#define SLIME_STARTING_NUTRITION 100 /// Above it we grow our amount_grown and our power_level, below it we can eat -#define SLIME_GROW_NUTRITION 800 +#define SLIME_GROW_NUTRITION 150 /// Below this, we feel hungry -#define SLIME_HUNGER_NUTRITION 500 +#define SLIME_HUNGER_NUTRITION 50 /// Below this, we feel starving -#define SLIME_STARVE_NUTRITION 200 +#define SLIME_STARVE_NUTRITION 10 ///The slime is not hungry. It might try to feed anyways. #define SLIME_HUNGER_NONE 0 @@ -44,12 +44,12 @@ #define SLIME_TYPE_BLUE "blue" #define SLIME_TYPE_BLUESPACE "bluespace" #define SLIME_TYPE_CERULEAN "cerulean" -#define SLIME_TYPE_DARK_BLUE "dark blue" -#define SLIME_TYPE_DARK_PURPLE "dark purple" +#define SLIME_TYPE_DARK_BLUE "dark-blue" +#define SLIME_TYPE_DARK_PURPLE "dark-purple" #define SLIME_TYPE_GOLD "gold" #define SLIME_TYPE_GREEN "green" #define SLIME_TYPE_GREY "grey" -#define SLIME_TYPE_LIGHT_PINK "light pink" +#define SLIME_TYPE_LIGHT_PINK "light-pink" #define SLIME_TYPE_METAL "metal" #define SLIME_TYPE_OIL "oil" #define SLIME_TYPE_ORANGE "orange" @@ -61,3 +61,6 @@ #define SLIME_TYPE_SEPIA "sepia" #define SLIME_TYPE_SILVER "silver" #define SLIME_TYPE_YELLOW "yellow" + +// The alpha value of transperent slime types +#define SLIME_TRANSPARENCY_ALPHA 180 diff --git a/code/__DEFINES/research/techweb_nodes.dm b/code/__DEFINES/research/techweb_nodes.dm new file mode 100644 index 0000000000000..a31c3e1a2f278 --- /dev/null +++ b/code/__DEFINES/research/techweb_nodes.dm @@ -0,0 +1,122 @@ +#define TECHWEB_NODE_AI "ai" +#define TECHWEB_NODE_AI_LAWS "ai_laws" +#define TECHWEB_NODE_ALIEN_ENGI "alien_engi" +#define TECHWEB_NODE_ALIEN_SURGERY "alien_surgery" +#define TECHWEB_NODE_ALIENTECH "alientech" +#define TECHWEB_NODE_ANOMALY_RESEARCH "anomaly_research" +#define TECHWEB_NODE_ANOMALY_SHELLS "anomaly_shells" +#define TECHWEB_NODE_APPLIED_BLUESPACE "applied_bluespace" +#define TECHWEB_NODE_ATMOS "atmos" +#define TECHWEB_NODE_AUGMENTATION "augmentation" +#define TECHWEB_NODE_AUS_SECURITY "aus_security" +#define TECHWEB_NODE_BASIC_ARMS "basic_arms" +#define TECHWEB_NODE_BCI "bci" +#define TECHWEB_NODE_BEAM_WEAPONS "beam_weapons" +#define TECHWEB_NODE_BIO_SCAN "bio_scan" +#define TECHWEB_NODE_BITRUNNING "bitrunning" +#define TECHWEB_NODE_BLUESPACE "bluespace" +#define TECHWEB_NODE_BLUESPACE_THEORY "bluespace_theory" +#define TECHWEB_NODE_BLUESPACE_TRAVEL "bluespace_travel" +#define TECHWEB_NODE_BORG_ENGI "borg_engi" +#define TECHWEB_NODE_BORG_MEDICAL "borg_medical" +#define TECHWEB_NODE_BORG_MINING "borg_mining" +#define TECHWEB_NODE_BORG_SERVICES "borg_services" +#define TECHWEB_NODE_BORG_UTILITY "borg_utility" +#define TECHWEB_NODE_BOTANY_EQUIP "botany_equip" +#define TECHWEB_NODE_CAFETERIA_EQUIP "cafeteria_equip" +#define TECHWEB_NODE_CHEM_SYNTHESIS "chem_synthesis" +#define TECHWEB_NODE_CIRCUIT_SHELLS "circuit_shells" +#define TECHWEB_NODE_COMBAT_IMPLANTS "combat_implants" +#define TECHWEB_NODE_CONSOLES "consoles" +#define TECHWEB_NODE_CONSTRUCTION "construction" +#define TECHWEB_NODE_CRYOSTASIS "cryostasis" +#define TECHWEB_NODE_CYBER_IMPLANTS "cyber_implants" +#define TECHWEB_NODE_CYBER_ORGANS "cyber_organs" +#define TECHWEB_NODE_CYBER_ORGANS_ADV "cyber_organs_adv" +#define TECHWEB_NODE_CYBER_ORGANS_UPGRADED "cyber_organs_upgraded" +#define TECHWEB_NODE_CYBERNETICS "cybernetics" +#define TECHWEB_NODE_CYTOLOGY "cytology" +#define TECHWEB_NODE_ELECTRIC_WEAPONS "electric_weapons" +#define TECHWEB_NODE_ENERGY_MANIPULATION "energy_manipulation" +#define TECHWEB_NODE_EXODRONE "exodrone" +#define TECHWEB_NODE_EXOTIC_AMMO "exotic_ammo" +#define TECHWEB_NODE_EXP_TOOLS "exp_tools" +#define TECHWEB_NODE_EXPLOSIVES "explosives" +#define TECHWEB_NODE_EXTREME_OFFICE "extreme_office" +#define TECHWEB_NODE_FISHING_EQUIP "fishing_equip" +#define TECHWEB_NODE_FISHING_EQUIP_ADV "fishing_equip_adv" +#define TECHWEB_NODE_FOOD_PROC "food_proc" +#define TECHWEB_NODE_FUNDIMENTAL_SCI "fundimental_sci" +#define TECHWEB_NODE_FUSION "fusion" +#define TECHWEB_NODE_GAMING "gaming" +#define TECHWEB_NODE_GAS_COMPRESSION "gas_compression" +#define TECHWEB_NODE_GENE_ENGINEERING "gene_engineering" +#define TECHWEB_NODE_HOLOGRAPHICS "holographics" +#define TECHWEB_NODE_HUD "hud" +#define TECHWEB_NODE_HYDROPONICS "hydroponics" +#define TECHWEB_NODE_INTERGRATED_TOOLSETS "intergrated_toolsets" +#define TECHWEB_NODE_INTERROGATION "interrogation" +#define TECHWEB_NODE_LIGHT_APPS "light_apps" +#define TECHWEB_NODE_LOW_PRESSURE_EXCAVATION "low_pressure_excavation" +#define TECHWEB_NODE_MARINE_UTIL "marine_util" +#define TECHWEB_NODE_MATERIAL_PROC "material_proc" +#define TECHWEB_NODE_MECH_ASSAULT "mech_assault" +#define TECHWEB_NODE_MECH_ASSEMBLY "mech_assembly" +#define TECHWEB_NODE_MECH_CLOWN "mech_clown" +#define TECHWEB_NODE_MECH_COMBAT "mech_combat" +#define TECHWEB_NODE_MECH_ENERGY_GUNS "mech_energy_guns" +#define TECHWEB_NODE_MECH_EQUIPMENT "mech_equipment" +#define TECHWEB_NODE_MECH_FIREARMS "mech_firearms" +#define TECHWEB_NODE_MECH_HEAVY "mech_heavy" +#define TECHWEB_NODE_MECH_HEAVY_ARMS "mech_heavy_arms" +#define TECHWEB_NODE_MECH_INFILTRATOR "mech_infiltrator" +#define TECHWEB_NODE_MECH_LIGHT "mech_light" +#define TECHWEB_NODE_MECH_MEDICAL "mech_medical" +#define TECHWEB_NODE_MECH_MINING "mech_mining" +#define TECHWEB_NODE_MEDBAY_EQUIP "medbay_equip" +#define TECHWEB_NODE_MEDBAY_EQUIP_ADV "medbay_equip_adv" +#define TECHWEB_NODE_MINING "mining" +#define TECHWEB_NODE_MINING_ADV "mining_adv" +#define TECHWEB_NODE_MOD_ANOMALY "mod_anomaly" +#define TECHWEB_NODE_MOD_ENGI "mod_engi" +#define TECHWEB_NODE_MOD_ENGI_ADV "mod_engi_adv" +#define TECHWEB_NODE_MOD_ENTERTAINMENT "mod_entertainment" +#define TECHWEB_NODE_MOD_EQUIP "mod_equip" +#define TECHWEB_NODE_MOD_EXPERIMENTAL "mod_experimental" +#define TECHWEB_NODE_MOD_MEDICAL "mod_medical" +#define TECHWEB_NODE_MOD_MEDICAL_ADV "mod_medical_adv" +#define TECHWEB_NODE_MOD_SECURITY "mod_security" +#define TECHWEB_NODE_MOD_SUIT "mod_suit" +#define TECHWEB_NODE_NIGHT_VISION "night_vision" +#define TECHWEB_NODE_OFFICE_EQUIP "office_equip" +#define TECHWEB_NODE_OLDSTATION_SURGERY "oldstation_surgery" +#define TECHWEB_NODE_PARTS "parts" +#define TECHWEB_NODE_PARTS_ADV "parts_adv" +#define TECHWEB_NODE_PARTS_BLUESPACE "parts_bluespace" +#define TECHWEB_NODE_PARTS_UPG "parts_upg" +#define TECHWEB_NODE_PASSIVE_IMPLANTS "passive_implants" +#define TECHWEB_NODE_PLASMA_CONTROL "plasma_control" +#define TECHWEB_NODE_PLASMA_MINING "plasma_mining" +#define TECHWEB_NODE_PLUMBING "plumbing" +#define TECHWEB_NODE_POSITRONIC_SPHERE "positronic_sphere" +#define TECHWEB_NODE_PROGRAMMED_ROBOT "programmed_robot" +#define TECHWEB_NODE_PROGRAMMED_SERVER "programmed_server" +#define TECHWEB_NODE_PROGRAMMING "programming" +#define TECHWEB_NODE_RCD_UPGRADE "rcd_upgrade" +#define TECHWEB_NODE_RIOT_SUPRESSION "riot_supression" +#define TECHWEB_NODE_ROBOTICS "robotics" +#define TECHWEB_NODE_SANITATION "sanitation" +#define TECHWEB_NODE_SEC_EQUIP "sec_equip" +#define TECHWEB_NODE_SELECTION "selection" +#define TECHWEB_NODE_SPEC_ENG "spec_eng" +#define TECHWEB_NODE_STICKY_ADVANCED "sticky_advanced" +#define TECHWEB_NODE_SURGERY "surgery" +#define TECHWEB_NODE_SURGERY_ADV "surgery_adv" +#define TECHWEB_NODE_SURGERY_EXP "surgery_exp" +#define TECHWEB_NODE_SURGERY_TOOLS "surgery_tools" +#define TECHWEB_NODE_SYNDICATE_BASIC "syndicate_basic" +#define TECHWEB_NODE_TACKLE_ADVANCED "tackle_advanced" +#define TECHWEB_NODE_TELECOMS "telecoms" +#define TECHWEB_NODE_TOYS "toys" +#define TECHWEB_NODE_UNREGULATED_BLUESPACE "unregulated_bluespace" +#define TECHWEB_NODE_XENOBIOLOGY "xenobiology" diff --git a/code/__DEFINES/robots.dm b/code/__DEFINES/robots.dm index 4ec8e1294c312..393e0f7b5f7d3 100644 --- a/code/__DEFINES/robots.dm +++ b/code/__DEFINES/robots.dm @@ -35,9 +35,9 @@ /// Special value to reset cyborg's lamp_cooldown #define BORG_LAMP_CD_RESET -1 /// How many watts per lamp power is consumed while the lamp is on. -#define BORG_LAMP_POWER_CONSUMPTION (1000 WATTS) +#define BORG_LAMP_POWER_CONSUMPTION (5 WATTS) /// The minimum power consumption of a cyborg. -#define BORG_MINIMUM_POWER_CONSUMPTION (500 WATTS) +#define BORG_MINIMUM_POWER_CONSUMPTION (1 WATTS) //Module slot define ///The third module slots is disabed. @@ -244,6 +244,21 @@ DEFINE_BITFIELD(medical_mode_flags, list( "MEDBOT_TIPPED_MODE" = MEDBOT_TIPPED_MODE, )) +///Whether we are stationary or not +#define FIREBOT_STATIONARY_MODE (1<<0) +///If we will extinguish people +#define FIREBOT_EXTINGUISH_PEOPLE (1<<1) +///if we will extinguish turfs on flames +#define FIREBOT_EXTINGUISH_FLAMES (1<<2) + +DEFINE_BITFIELD(firebot_mode_flags, list( + "FIREBOT_STATIONARY_MODE" = FIREBOT_STATIONARY_MODE, + "FIREBOT_EXTINGUISH_PEOPLE" = FIREBOT_EXTINGUISH_PEOPLE, + "FIREBOT_EXTINGUISH_FLAMES" = FIREBOT_EXTINGUISH_FLAMES, +)) + + + //cleanBOT defines on what to clean #define CLEANBOT_CLEAN_BLOOD (1<<0) #define CLEANBOT_CLEAN_TRASH (1<<1) @@ -284,6 +299,9 @@ DEFINE_BITFIELD(janitor_mode_flags, list( #define FIREBOT_VOICED_ONLY_YOU "Only you can prevent station fires." #define FIREBOT_VOICED_TEMPERATURE_NOMINAL "Temperature nominal." #define FIREBOT_VOICED_KEEP_COOL "Keep it cool." +#define FIREBOT_VOICED_CANDLE_TIP "Keep candles near curtains for cozy night lights!" +#define FIREBOT_VOICED_ELECTRIC_FIRE "Keep full buckets of water near outlets in case of an electric fire!" +#define FIREBOT_VOICED_FUEL_TIP "Pouring fuel on fire makes it burn out faster!" #define HYGIENEBOT_VOICED_UNHYGIENIC "Unhygienic client found. Please stand still so I can clean you." #define HYGIENEBOT_VOICED_ENJOY_DAY "Enjoy your clean and tidy day!" diff --git a/code/__DEFINES/role_preferences.dm b/code/__DEFINES/role_preferences.dm index ee7e5dfee0d12..88e64164acd4b 100644 --- a/code/__DEFINES/role_preferences.dm +++ b/code/__DEFINES/role_preferences.dm @@ -33,7 +33,6 @@ #define ROLE_OPERATIVE_MIDROUND "Operative (Midround)" #define ROLE_PARADOX_CLONE "Paradox Clone" #define ROLE_REV_HEAD "Head Revolutionary" -#define ROLE_SENTIENT_DISEASE "Sentient Disease" #define ROLE_SLEEPER_AGENT "Syndicate Sleeper Agent" #define ROLE_SPACE_DRAGON "Space Dragon" #define ROLE_SPIDER "Spider" @@ -150,7 +149,6 @@ GLOBAL_LIST_INIT(special_roles, list( ROLE_OPERATIVE_MIDROUND = 14, ROLE_PARADOX_CLONE = 0, ROLE_REVENANT = 0, - ROLE_SENTIENT_DISEASE = 0, ROLE_SLEEPER_AGENT = 0, ROLE_SPACE_DRAGON = 0, ROLE_SPIDER = 0, diff --git a/code/__DEFINES/rust_g.dm b/code/__DEFINES/rust_g.dm index 5404cebed97e8..7c601b62ff0fd 100644 --- a/code/__DEFINES/rust_g.dm +++ b/code/__DEFINES/rust_g.dm @@ -107,6 +107,23 @@ #define rustg_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 + * + * Returns a single string that goes row by row, with values of 1 representing an turned on cell, and a value of 0 representing a turned off cell. + * + * Arguments: + * * seed: seed for the function + * * accuracy: how close this is to the original perlin noise, as accuracy approaches infinity, the noise becomes more and more perlin-like + * * stamp_size: Size of a singular stamp used by the algorithm, think of this as the same stuff as frequency in perlin noise + * * world_size: size of the returned grid. + * * lower_range: lower bound of values selected for. (inclusive) + * * upper_range: upper bound of values selected for. (exclusive) + */ +#define rustg_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) 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) @@ -159,6 +176,16 @@ #define rustg_noise_get_at_coordinates(seed, x, y) RUSTG_CALL(RUST_G, "noise_get_at_coordinates")(seed, x, y) +/* + * Takes in a string and json_encode()"d lists to produce a sanitized string. + * This function operates on whitelists, there is currently no way to blacklist. + * Args: + * * text: the string to sanitize. + * * attribute_whitelist_json: a json_encode()'d list of HTML attributes to allow in the final string. + * * tag_whitelist_json: a json_encode()'d list of HTML tags to allow in the final string. + */ +#define rustg_sanitize_html(text, attribute_whitelist_json, tag_whitelist_json) RUSTG_CALL(RUST_G, "sanitize_html")(text, attribute_whitelist_json, tag_whitelist_json) + #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) diff --git a/code/__DEFINES/skills.dm b/code/__DEFINES/skills.dm index f6ecde7c2e10b..5a945d7ec5790 100644 --- a/code/__DEFINES/skills.dm +++ b/code/__DEFINES/skills.dm @@ -46,3 +46,9 @@ ///The base modifier a boulder's size grants to the mining skill. #define MINING_SKILL_BOULDER_SIZE_XP 10 + +// Skillchip categories +//Various skillchip categories. Use these when setting which categories a skillchip restricts being paired with +//while using the SKILLCHIP_RESTRICTED_CATEGORIES flag +#define SKILLCHIP_CATEGORY_GENERAL "general" +#define SKILLCHIP_CATEGORY_JOB "job" diff --git a/code/__DEFINES/song.dm b/code/__DEFINES/song.dm index 782a7923ea14f..0e7e9f0ce0692 100644 --- a/code/__DEFINES/song.dm +++ b/code/__DEFINES/song.dm @@ -15,3 +15,9 @@ #define MONKEY_SONG "BPM: 200\nC4/0,14,C,A4-F2,F3,A3,F-F2,A-F,F4,G4,F,D4-Bb2-G2\nD3,G3,D-G2,G3-G2,D,D4-G3,D,B4-B2,G,B3,G-B2,B3-B2\nG4,A4,G,E4-C3,E3,G3,E-C,G-C,E,E4-G,E,C5-E-A3,C4\nA-E3,C,E4-C3,A4-C4,B4-A3-A2,C5-C4,D5-F-B3,D4,B-F3\nD,F4-D3,D4,F-B-B2,G4-D,A4-C-F3,F,C/2,B3/2,A3-C3/2\nB/2,C4,E-C3,F4,G-C,F-F3,F-C,C4/2,B/2,A-A2/2,G3/2\nF/I" ///song played by the mook bard #define MOOK_SONG "BPM: 240\nA5,B5,C#6,D6,E6/0.17,A/0.5,A/0.25,A3/0.25\nA4/0.25,C#5/0.25,E5/0.25,A/0.25,C#/0.25,E/0.12\nC#6/0.25,C#/0.25,E6/0.25,A3/0.25,A4/0.25\nC#5/0.25,E5/0.25,A/0.25,C#/0.25,E/0.25,D/0.25\nG6/0.25,D/0.17,F6/0.17,C#6/0.5,E6/0.5,D4/0.25\nA/0.25,D5/0.25,F5/0.25,A/0.25,D/0.25,F/0.25\nD6/0.08,F6/0.08,D4/0.25,A/0.25,D5/0.25,F5/0.25\nCn4/0.2,B/0.17,D6/0.17,G5/0.5,G/0.25,B3/0.25\nD4/0.25,G4/0.25,B4/0.25,D/0.25,G/0.25,B/0.12\nB5/0.25,B/0.25,D6/0.25,G3/0.25,G4/0.25,B4/0.25\nF/0.25,G/0.25,B/0.25,F/0.25,D/0.25,F6/0.25\nC6/0.17,E/0.17,B5/0.5,D#/0.5,C4/0.25,G/0.25\nC5/0.25,E5/0.25,G/0.25,C/0.25,E/0.25,C6/0.08\nE6/0.08,C4/0.25,Dn4/0.25,E4/0.25,A5/0.17,B/0.5\nC6/0.25,F5/0.08,F4/0.08,C5/0.08,E5/0.12,G5/0.12\nC6/0.25,E6/0.25,E4/0.08,C5/0.08,B/0.17,F6/0.17\nE6/0.5,B/0.25,E4/0.08,G#4/0.08,C6/0.17,D6/0.5\nE6/0.25,A3/0.25,E4/0.25,C5/0.25,Gn3/0.25\nF5/0.12,A5/0.12,A6/0.25,F3/0.25,F4/0.12,A4/0.12\nC/0.12,F6/0.17,A6/0.17,G#6/0.5,A/0.25,F3/0.25\nF4/0.12,A4/0.12,D#5/0.12,B/0.17,G#/0.17,B6/0.5\nB5/0.25,G#/0.25,E3/0.25,E4/0.12,G#4/0.12\nDn/0.12,E6/0.08,E3/0.25,F#3/0.25,G#3/0.25\nE5/0.17,A5/0.17,E/0.5,E/0.25,A3/0.25,C#4/0.25\nE4/0.25,C#/0.25,E/0.12,A5/0.5,B/0.5,C#6/0.5\nD6/0.5,A3/0.25,C#4/0.25,E/0.25,C#/0.25,E/0.25\nE6/0.08,Gn/0.25,E4/0.25,A4/0.25,C#5/0.25,E/0.25\nA/0.25,C#/0.25,E6/0.17,E/0.5,Fn6/0.5,G6/0.5\nG3/0.25,E4/0.25,A/0.25,C#/0.25,E/0.25,A/0.25\nC#/0.25,F/0.08,A6/0.08,F3/0.25,F4/0.25,A4/0.25\nCn/0.25,F/0.25,A/0.25,C/0.25,G6/0.12,A6/0.12\nG A G F6 G3/0.25 D4/0.25 G4/0.25 B4/0.25 D/0.25\nG/0.25 B/0.25 E6/0.12 G6/0.12 F/0.71 G/0.71 F/0.71\nE3/0.25 E4/0.25 G4/0.25 B/0.25 E/0.25 G/0.25 B/0.25\nA5/0.08 E6/0.08 A3/0.25 E4/0.25 A4/0.25 C#/0.25 E/0.25 A/0.25 C#/0.25 D6/0.17 E6/0.5 F/0.25 B3/0.25 D4/0.12 F4/0.12 B4/0.12 F6/0.25 E/0.25 D6/0.25 G#3/0.25 E4/0.12 G#4/0.12 B/0.12 Cn6/0.12 D/0.25 A3/0.25 A4/0.25 C5/0.25 E5/0.25 G#3/0.25 Gn/0.25 C4/0.25 E4/0.25 A/" +///song played by the vibebot when cheering people up +#define VIBEBOT_CHEER_SONG "BPM: 360\nE4/0.5,B4-G4/0.5,G-B-E/0.5,D4,Gb,A4-D-G/0.25\nGn-B3-E/0.5,G-B-E/0.5,A3-D-Gb/0.5,E-Gn-B/0.17,E,G\nB4/0.5,E-B-G/0.5,D,Gb,A4-D-G/0.25,B3-Gn-E/0.5\nG-B-E/0.5,A3-D-Gb/0.5,E-Gn-B/0.17,E-G-C5/0.5,G,E,G\nC,B4-Eb-Gb/0.5,B3-E-G/0.5,B-E-G3/0.5,C-Gn4-En/0.5\nG,E,G,C,Eb-Gb-B4/0.17,C-Gn-En/0.5,G,E,G,C\nB-C-Eb-Gb/0.5,B3-E-G/0.5,E-B-G3/0.5,C-En-Gn4,E,G,C\nE,G,A4-Gb-D5/0.17,E/0.5,B4-Gn/0.5,G-B-E/0.5,D4,Gb\nA-D-G/0.25,Gn-B3-E/0.5,G-B-E/0.5,A3-D-Gb/0.5\nE-Gn-B/0.17,E,G,B4/0.5,E-B-G/0.5,D,Gb,A4-D-G/0.25\nB3-Gn-E/0.5,G-B-E/0.5,A3-D-Gb/0.5,E-Gn-B/0.17\nE-G-C/0.5,G,E,G,C,B4-Eb-Gb/0.5,B3-E-G/0.5\nB-E-G3/0.5,C-Gn4-En/0.5,G,E,G,C,Eb-Gb-B4/0.17\nC-Gn-En/0.5,G,E,G,C,B-C-Eb-Gb/0.5,B3-E-G/0.5\nE-B-G3/0.5,C-En-Gn4,E,G,C,E,G,A4-Gb-D5/0.17\nGn-E-B/0.5,B-G3-E,E3-G-B,G4-E4-B/0.5,A3-D4-Gb/0.5\nA-D-G3/0.5,D3-G-A/0.5,Gn4-E-B/0.5,B-G3-E,E3-G-B\nG4-E4-B/0.5,A-D4-Gb/0.17,A4-F4-C4/0.5,C-A3-F\nF3-A-C,C-F4-A4/0.5,B-Gn-E/0.5,B-G3-E/0.5\nG-E3-B/0.5,A3-D-Gb4/0.5,D-A-G3/0.5,D3-A-G/0.5\nA-D4-G4/0.17,Gn-E4-B/0.5,B-G3-E,E3-G-B,G4-E4-B/0.5\nA-D-Gb/0.5,A-D-G3/0.5,D3-G-A/0.5,Gn4-E-B/0.5\nB-G3-E,E3-G-B,G4-E4-B/0.5,A-D4-Gb/0.17,A4-F-C/0.5\nC-A3-F,F3-A-C,C-F4-A4/0.5,B-Gn-E/0.5,B-G3-E/0.5\nG-E3-B/0.5,A3-D-Gb4/0.5,D-A-G3/0.5,D3-A-G/0.5\nE4-A-Db4/0.17,A2,E3,Gn-B-E4,A,E3,B-G-E4\nA3-Dn-F-D3/0.5,F3-A-D4/0.5,D3/0.5,A2,E3,B-E4-G,A\nE3,B-G-E4,F-D4-A3/0.17,A2,E3,B-E4-G,A,E3,B-G-E4\nB-A3-F4-D-D3/0.5,F3-D4-A/0.5,F-A-D3/0.5,A2,E3\nB-E4-G,A,E3,B-E4-G,F-A3-D4-D3/0.17,A2,E3,G-B-E4,A\nE3,B-G-E4,A3-D4-F4-D3/0.5,F3-A-D4/0.5,D3/0.5,A2,E3\nB-E4-G,A,E3,B-G-E4,F-D4-A3/0.17,A2,E3,B-E4-G,A,E3\nB-G-E4,B-A3-F4-D-D3/0.5,F3-D4-A/0.5,F-A-D3/0.5,A2\nE3,B-E4-G,A,E3,B-E4-G,F-A3-D4-D3/0.17,E/0.5\nB4-G4/0.5,G-B-E/0.5,D4,Gb,A4-D-G/0.25,Gn-B3-E/0.5\nG-B-E/0.5,A3-D-Gb/0.5,E-Gn-B/0.17,E,G,B4/0.5\nE-B-G/0.5,D,Gb,A4-D-G/0.25,B3-Gn-E/0.5,G-B-E/0.5\nA3-D-Gb/0.5,E-Gn-B/0.17,E-G-C5/0.5,G,E,G,C\nB4-Eb-Gb/0.5,B3-E-G/0.5,B-E-G3/0.5,C-Gn4-En/0.5,G\nE,G,C,Eb-Gb-B4/0.17,C-Gn-En/0.5,G,E,G,C\nB-Eb-Gb/0.5,B3-E-G/0.5,E-B-G3/0.53,En-Gn4/8,C,G,E\nB4,G,E,B3-E-G/0.07" +///grim music played by the vibebot +#define VIBEBOT_GRIM_MUSIC "BPM: 92\nG5/0.5,C#7-F#5/1.08,G6-G5/0.52,D6-D5,B6-E5/0.52\nG6-G5/1.08,D6-D5/0.34,Cn6-C5-G6/0.5,D,B5-F#6/13\nB4/0.52,C6-C5-G,A4/0.28,G-G5/0.5\nC#7-F#-F#5/1.08,G6-G5/0.52,D6-D5,B6-E/0.52,G-G6\nB5,D7/13,D6/0.52,Cn6,B6-B5,G-G5,G/0.5\nF#-C#7/1.08,G6-G5/0.22,G/0.5,C#-F#/1.08\nG6-G5/0.52,D-D5,B6-E/0.52,G6-G5/1.08,D6-D5/0.34\nCn6-C5-G6/0.5,D,B5-F#6/13,B4/0.52,C6-G-C5/0.25\nG-G5/0.5,C#7-F#-F#5/1.08,G6-G5/0.52,D6-D5\nB6-E/0.52,G-G6,B5,D7/13,D6/0.52,Cn6,B6-B5,G-G5\nG/0.5,F#-C#7/1.08,G6-G5/0.65" +///happy birthday music we play to the birthday boy +#define VIBEBOT_HAPPY_BIRTHDAY "BPM: 120\nG4/0.5,G4/0.25,A4/0.5,G4/0.5,C5/0.5,B4/1\nG4/0.5,G4/0.25,A4/0.5,G4/0.5,D5/0.5,C5/1\nG4/0.5,G4/0.5,G5/0.5,E5/0.5,C5/0.5,B4/0.5,A4/0.5\nF5/0.5,F5/0.5,E5/0.5,C5/0.5,D5/0.5,C5/1" diff --git a/code/__DEFINES/sound.dm b/code/__DEFINES/sound.dm index 896f6ec5bf448..345ff07ea18a2 100644 --- a/code/__DEFINES/sound.dm +++ b/code/__DEFINES/sound.dm @@ -172,3 +172,7 @@ GLOBAL_LIST_INIT(announcer_keys, list( #define SFX_SEAR "sear" #define SFX_REEL "reel" #define SFX_RATTLE "rattle" +#define SFX_PORTAL_ENTER "portal_enter" +#define SFX_PORTAL_CLOSE "portal_closed" +#define SFX_PORTAL_CREATED "portal_created" +#define SFX_SCREECH "screech" diff --git a/code/__DEFINES/subsystems.dm b/code/__DEFINES/subsystems.dm index 3878ba8c45ce3..8d460c3aecb6f 100644 --- a/code/__DEFINES/subsystems.dm +++ b/code/__DEFINES/subsystems.dm @@ -20,7 +20,7 @@ * * make sure you add an update to the schema_version stable in the db changelog */ -#define DB_MINOR_VERSION 26 +#define DB_MINOR_VERSION 27 //! ## Timing subsystem @@ -346,3 +346,6 @@ #define VOTE_WINNER_METHOD_WEIGHTED_RANDOM "Weighted Random" /// There is no winner for this vote. #define VOTE_WINNER_METHOD_NONE "None" + +/// Returned by [/datum/vote/proc/can_be_initiated] to denote the vote is valid and can be initiated. +#define VOTE_AVAILABLE "Vote Available" diff --git a/code/__DEFINES/surgery.dm b/code/__DEFINES/surgery.dm index cada3f9eb21aa..feddc24c6f858 100644 --- a/code/__DEFINES/surgery.dm +++ b/code/__DEFINES/surgery.dm @@ -26,11 +26,15 @@ #define ORGAN_HIDDEN (1<<9) /// Has the organ already been inserted inside someone #define ORGAN_VIRGIN (1<<10) +/// ALWAYS show this when scanned by advanced scanners, even if it is totally healthy +#define ORGAN_PROMINENT (1<<11) /// Helper to figure out if a limb is organic #define IS_ORGANIC_LIMB(limb) (limb.bodytype & BODYTYPE_ORGANIC) /// Helper to figure out if a limb is robotic #define IS_ROBOTIC_LIMB(limb) (limb.bodytype & BODYTYPE_ROBOTIC) +/// Helper to figure out if a limb is a peg limb +#define IS_PEG_LIMB(limb) (limb.bodytype & BODYTYPE_PEG) // Flags for the bodypart_flags var on /obj/item/bodypart /// Bodypart cannot be dismembered or amputated diff --git a/code/__DEFINES/tools.dm b/code/__DEFINES/tools.dm index 132ae1962398f..2348bd49f194b 100644 --- a/code/__DEFINES/tools.dm +++ b/code/__DEFINES/tools.dm @@ -8,6 +8,7 @@ #define TOOL_ANALYZER "analyzer" #define TOOL_MINING "mining" #define TOOL_SHOVEL "shovel" +#define TOOL_DRAPES "surgicaldrapes" #define TOOL_RETRACTOR "retractor" #define TOOL_HEMOSTAT "hemostat" #define TOOL_CAUTERY "cautery" @@ -24,13 +25,15 @@ // If delay between the start and the end of tool operation is less than MIN_TOOL_SOUND_DELAY, // tool sound is only played when op is started. If not, it's played twice. #define MIN_TOOL_SOUND_DELAY 20 - +#define MIN_TOOL_OPERATING_DELAY 40 //minimum delay for operating sound. Prevent overlaps and overhand sound. /// Return when an item interaction is successful. /// This cancels the rest of the chain entirely and indicates success. #define ITEM_INTERACT_SUCCESS (1<<0) // Same as TRUE, as most tool (legacy) tool acts return TRUE on success /// Return to prevent the rest of the attack chain from being executed / preventing the item user from thwacking the target. /// Similar to [ITEM_INTERACT_SUCCESS], but does not necessarily indicate success. #define ITEM_INTERACT_BLOCKING (1<<1) + /// Only for people who get confused by the naming scheme + #define ITEM_INTERACT_FAILURE ITEM_INTERACT_BLOCKING /// Return to skip the rest of the interaction chain, going straight to attack. #define ITEM_INTERACT_SKIP_TO_ATTACK (1<<2) diff --git a/code/__DEFINES/traits/declarations.dm b/code/__DEFINES/traits/declarations.dm index f2cb9069fb64f..ff73ecb3302b4 100644 --- a/code/__DEFINES/traits/declarations.dm +++ b/code/__DEFINES/traits/declarations.dm @@ -69,6 +69,8 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai // Antagonizes the above. #define TRAIT_DISCOORDINATED_TOOL_USER "discoordinated_tool_user" #define TRAIT_PACIFISM "pacifism" +// Trait added to the user of a hippocratic oath status effect +#define TRAIT_HIPPOCRATIC_OATH "hippocratic_oath" #define TRAIT_IGNORESLOWDOWN "ignoreslow" #define TRAIT_IGNOREDAMAGESLOWDOWN "ignoredamageslowdown" /// Makes it so the mob can use guns regardless of tool user status @@ -96,6 +98,8 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai #define TRAIT_IWASBATONED "iwasbatoned" #define TRAIT_SLEEPIMMUNE "sleep_immunity" #define TRAIT_PUSHIMMUNE "push_immunity" +/// can't be kicked to the side +#define TRAIT_NO_SIDE_KICK "no_side_kick" /// Are we immune to shocks? #define TRAIT_SHOCKIMMUNE "shock_immunity" /// Are we immune to specifically tesla / SM shocks? @@ -118,8 +122,6 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai #define TRAIT_RESISTLOWPRESSURE "resist_low_pressure" /// This human is immune to the effects of being exploded. (ex_act) #define TRAIT_BOMBIMMUNE "bomb_immunity" -/// Immune to being irradiated -#define TRAIT_RADIMMUNE "rad_immunity" /// This mob won't get gibbed by nukes going off #define TRAIT_NUKEIMMUNE "nuke_immunity" /// Can't be given viruses @@ -140,8 +142,6 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai #define TRAIT_AGENDER "agender" /// Species with this trait have a blood clan mechanic #define TRAIT_BLOOD_CLANS "blood_clans" -/// Species with this trait have markings (this SUCKS, remove this later in favor of bodypart overlays) -#define TRAIT_HAS_MARKINGS "has_markings" /// Species with this trait use skin tones for coloration #define TRAIT_USES_SKINTONES "uses_skintones" /// Species with this trait use mutant colors for coloration @@ -224,6 +224,17 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai #define TRAIT_REVEAL_FISH "reveal_fish" ///This trait gets you a list of fishes that can be caught when examining a fishing spot. #define TRAIT_EXAMINE_FISHING_SPOT "examine_fishing_spot" +///Trait given to turfs or objects that can be fished from +#define TRAIT_FISHING_SPOT "fishing_spot" +///Trait given to mobs that can fish without a rod +#define TRAIT_PROFOUND_FISHER "profound_fisher" +/// This trait lets you evaluate someone's fitness level against your own +#define TRAIT_EXAMINE_FITNESS "reveal_power_level" +/// These mobs have particularly hygienic tongues +#define TRAIT_WOUND_LICKER "wound_licker" + +/// This trait designate that the mob was originally a monkey +#define TRAIT_BORN_MONKEY "born_as_a_monkey" /// Added to a mob, allows that mob to experience flavour-based moodlets when examining food #define TRAIT_REMOTE_TASTING "remote_tasting" @@ -287,6 +298,9 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai /// Allows you to hear speech through walls #define TRAIT_XRAY_HEARING "xray_hearing" +/// This mob can not enter or move on a shuttle +#define TRAIT_BLOCK_SHUTTLE_MOVEMENT "block_shuttle_movement" + /// Lets us scan reagents #define TRAIT_REAGENT_SCANNER "reagent_scanner" /// Lets us scan machine parts and tech unlocks @@ -354,6 +368,8 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai #define TRAIT_GAMERGOD "gamer-god" #define TRAIT_GIANT "giant" #define TRAIT_DWARF "dwarf" +/// Makes you way too tall. Like just too much, dude, it's kind of creepy. Humanoid only. +#define TRAIT_TOO_TALL "too_tall" /// makes your footsteps completely silent #define TRAIT_SILENT_FOOTSTEPS "silent_footsteps" /// hnnnnnnnggggg..... you're pretty good.... @@ -541,8 +557,11 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai ///Given by /obj/item/virgin_mary, mobs that used this can no longer use it again ever #define TRAIT_MAFIAINITIATE "mafiainitiate" +/// Our mob has the mind reading genetic mutation. +#define TRAIT_MIND_READER "mind reader" + ///Makes the player appear as their respective job in Binary Talk rather than being a 'Default Cyborg'. -#define DISPLAYS_JOB_IN_BINARY "display_job_in_binary" +#define TRAIT_DISPLAY_JOB_IN_BINARY "display job in binary" // METABOLISMS // Various jobs on the station have historically had better reactions @@ -598,6 +617,8 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai #define TRAIT_CHEF_KISS "chefs_kiss" /// Allows clowns to bend balloons into animals #define TRAIT_BALLOON_SUTRA "balloon_sutra" +/// Allows detectives to identify chemicals by taste +#define TRAIT_DETECTIVES_TASTE "detectives_taste" ///Movement type traits for movables. See elements/movetype_handler.dm #define TRAIT_MOVE_GROUND "move_ground" @@ -902,6 +923,8 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai #define TRAIT_FISH_NO_HUNGER "fish_no_hunger" ///It comes from a fish case. Relevant for bounties so far. #define TRAIT_FISH_FROM_CASE "fish_from_case" +///Fish will also occasionally fire weak tesla zaps +#define TRAIT_FISH_ELECTROGENESIS "fish_electrogenesis" /// Trait given to angelic constructs to let them purge cult runes #define TRAIT_ANGELIC "angelic" @@ -950,6 +973,7 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai #define STATION_TRAIT_BIGGER_PODS "station_trait_bigger_pods" #define STATION_TRAIT_BIRTHDAY "station_trait_birthday" #define STATION_TRAIT_BOTS_GLITCHED "station_trait_bot_glitch" +#define STATION_TRAIT_BRIGHT_DAY "station_trait_bright_day" #define STATION_TRAIT_CARP_INFESTATION "station_trait_carp_infestation" #define STATION_TRAIT_CYBERNETIC_REVOLUTION "station_trait_cybernetic_revolution" #define STATION_TRAIT_EMPTY_MAINT "station_trait_empty_maint" @@ -992,14 +1016,17 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai /// things with this trait are treated as having no access in /atom/movable/proc/check_access(obj/item) #define TRAIT_ALWAYS_NO_ACCESS "alwaysnoaccess" -/// This human wants to see the color of their glasses, for some reason -#define TRAIT_SEE_GLASS_COLORS "see_glass_colors" +///Used by wearable_client_colour to determine whether the mob wants to have the colours of the screen affected by worn items (some still do regardless). +#define TRAIT_SEE_WORN_COLOURS "see_worn_colour" // Radiation defines /// Marks that this object is irradiated #define TRAIT_IRRADIATED "iraddiated" +/// Immune to being irradiated +#define TRAIT_RADIMMUNE "rad_immunity" + /// Harmful radiation effects, the toxin damage and the burns, will not occur while this trait is active #define TRAIT_HALT_RADIATION_EFFECTS "halt_radiation_effects" @@ -1066,6 +1093,11 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai /// Note this doesn't mean all spells are guaranteed to work or the mob is guaranteed to cast #define TRAIT_CASTABLE_LOC "castable_loc" +/// Needs above trait to work. +/// This trait makes it so that any cast spells will attempt to transfer to the location's location. +/// For example, a heretic inside the haunted blade's spells would emanate from the mob wielding the sword. +#define TRAIT_SPELLS_TRANSFER_TO_LOC "spells_transfer_to_loc" + ///Trait given by /datum/element/relay_attacker #define TRAIT_RELAYING_ATTACKER "relaying_attacker" @@ -1079,8 +1111,12 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai /// Trait given to a dragon who fails to defend their rifts #define TRAIT_RIFT_FAILURE "fail_dragon_loser" +///this mob is able to relay happiness, given by /datum/component/happiness +#define TRAIT_MOB_RELAY_HAPPINESS "mob_relay_happiness" ///trait determines if this mob can breed given by /datum/component/breeding #define TRAIT_MOB_BREEDER "mob_breeder" +///trait given to mobs that are hatched +#define TRAIT_MOB_HATCHED "mob_hatched" /// Trait given to mobs that we do not want to mindswap #define TRAIT_NO_MINDSWAP "no_mindswap" ///trait given to food that can be baked by /datum/component/bakeable @@ -1124,4 +1160,27 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai /// Trait applied to objects and mobs that can attack a boulder and break it down. (See /obj/item/boulder/manual_process()) #define TRAIT_BOULDER_BREAKER "boulder_breaker" +/// Trait given to anything linked to, not necessarily allied to, the mansus +#define TRAIT_MANSUS_TOUCHED "mansus_touched" + +/// Trait given to mobs wearing the clown mask +#define TRAIT_PERCEIVED_AS_CLOWN "perceived_as_clown" +/// Does this item bypass ranged armor checks? +#define TRAIT_BYPASS_RANGED_ARMOR "bypass_ranged_armor" + +/// Traits given by settler, each with their own specific effects for cases where someone would have that trait, but not the other settler effects + +#define TRAIT_EXPERT_FISHER "expert_fisher" // fishing is easier +#define TRAIT_ROUGHRIDER "roughrider" // you can improve speed on mounted animals with a good mood +#define TRAIT_STUBBY_BODY "stubby_body" // you have a stubby body that lessens your agility +#define TRAIT_BEAST_EMPATHY "beast_empathy" // you're good with animals, such as with taming them +#define TRAIT_STURDY_FRAME "sturdy_frame" // you suffer much lesser effects from equipment that slows you down + +/// This item cannot be selected for or used by a theft objective (Spies, Traitors, etc.) +#define TRAIT_ITEM_OBJECTIVE_BLOCKED "item_objective_blocked" +/// This trait lets you attach limbs to any player without surgery. +#define TRAIT_EASY_ATTACH "easy_attach" + +///Trait given to the birthday boy +#define TRAIT_BIRTHDAY_BOY "birthday_boy" // END TRAIT DEFINES diff --git a/code/__DEFINES/traits/sources.dm b/code/__DEFINES/traits/sources.dm index 278510bd23fbe..759101dc2abd5 100644 --- a/code/__DEFINES/traits/sources.dm +++ b/code/__DEFINES/traits/sources.dm @@ -190,6 +190,8 @@ #define MOD_TRAIT "mod" /// Trait applied to tram passengers #define TRAM_PASSENGER_TRAIT "tram-passenger" +/// Trait given by a fulton extraction pack +#define FULTON_PACK_TRAIT "fulton-pack" /// Trait granted by the berserker hood. #define BERSERK_TRAIT "berserk_trait" diff --git a/code/__DEFINES/transport.dm b/code/__DEFINES/transport.dm index 452ba28535492..09d4f39280a8d 100644 --- a/code/__DEFINES/transport.dm +++ b/code/__DEFINES/transport.dm @@ -99,12 +99,11 @@ DEFINE_BITFIELD(request_flags, list( #define XING_STATE_RED 2 #define XING_STATE_MALF 3 -#define AMBER_THRESHOLD_NORMAL 45 -#define RED_THRESHOLD_NORMAL 20 -#define AMBER_THRESHOLD_DEGRADED 30 -#define RED_THRESHOLD_DEGRADED 15 +#define XING_THRESHOLD_AMBER 45 +#define XING_THRESHOLD_RED 27 #define DEFAULT_TRAM_LENGTH 10 +#define DEFAULT_TRAM_MIDPOINT 5 // Tram machinery subtype #define TRANSPORT_SYSTEM_NORMAL 0 diff --git a/code/__DEFINES/turfs.dm b/code/__DEFINES/turfs.dm index 295c09f6d465e..545767289e0b5 100644 --- a/code/__DEFINES/turfs.dm +++ b/code/__DEFINES/turfs.dm @@ -82,6 +82,13 @@ */ #define get_area(A) (isarea(A) ? A : get_step(A, 0)?.loc) +// Defines for turfs rust resistance +#define RUST_RESISTANCE_BASIC 1 +#define RUST_RESISTANCE_REINFORCED 2 +#define RUST_RESISTANCE_TITANIUM 3 +#define RUST_RESISTANCE_ORGANIC 4 +#define RUST_RESISTANCE_ABSOLUTE 5 + /// Turf will be passable if density is 0 #define TURF_PATHING_PASS_DENSITY 0 /// Turf will be passable depending on [CanAStarPass] return value @@ -104,3 +111,8 @@ * Finds the midpoint of two given turfs. */ #define TURF_MIDPOINT(a, b) (locate(((a.x + b.x) * 0.5), (a.y + b.y) * 0.5, (a.z + b.z) * 0.5)) + +/// Defines the x offset to apply to larger smoothing turfs (such as grass). +#define LARGE_TURF_SMOOTHING_X_OFFSET -9 +/// Defines the y offset to apply to larger smoothing turfs (such as grass). +#define LARGE_TURF_SMOOTHING_Y_OFFSET -9 diff --git a/code/__DEFINES/vv.dm b/code/__DEFINES/vv.dm index 90bd77c0423aa..a83ef71ddc69f 100644 --- a/code/__DEFINES/vv.dm +++ b/code/__DEFINES/vv.dm @@ -54,8 +54,6 @@ //Helpers for vv_get_dropdown() #define VV_DROPDOWN_OPTION(href_key, name) . += "" -//Same with VV_DROPDOWN_OPTION, but global proc doesn't have src -#define VV_DROPDOWN_OPTION_APPEARANCE(thing, href_key, name) . += "" // VV HREF KEYS #define VV_HK_TARGET "target" diff --git a/code/__DEFINES/wires.dm b/code/__DEFINES/wires.dm index 2b4c528abc212..4926996f26bd3 100644 --- a/code/__DEFINES/wires.dm +++ b/code/__DEFINES/wires.dm @@ -64,6 +64,8 @@ #define WIRE_ZAP1 "High Voltage Circuit 1" #define WIRE_ZAP2 "High Voltage Circuit 2" #define WIRE_OVERCLOCK "Overclock" +#define WIRE_EQUIPMENT "Equipment" +#define WIRE_ENVIRONMENT "Environment" // Wire states for the AI #define AI_WIRE_NORMAL 0 diff --git a/code/__HELPERS/_lists.dm b/code/__HELPERS/_lists.dm index 7af30c8d9727c..6811a31284aa4 100644 --- a/code/__HELPERS/_lists.dm +++ b/code/__HELPERS/_lists.dm @@ -417,7 +417,7 @@ **/ /proc/list_clear_nulls(list/list_to_clear) return (list_to_clear.RemoveAll(null) > 0) - + /** * Removes any empty weakrefs from the list @@ -473,17 +473,23 @@ * You should only pass integers in. */ /proc/pick_weight(list/list_to_pick) + if(length(list_to_pick) == 0) + return null + var/total = 0 - var/item - for(item in list_to_pick) + for(var/item in list_to_pick) if(!list_to_pick[item]) list_to_pick[item] = 0 total += list_to_pick[item] total = rand(1, total) - for(item in list_to_pick) - total -= list_to_pick[item] - if(total <= 0 && list_to_pick[item]) + for(var/item in list_to_pick) + var/item_weight = list_to_pick[item] + if(item_weight == 0) + continue + + total -= item_weight + if(total <= 0) return item return null diff --git a/code/__HELPERS/construction.dm b/code/__HELPERS/construction.dm index cf38f690c26fc..f7b0ece13f894 100644 --- a/code/__HELPERS/construction.dm +++ b/code/__HELPERS/construction.dm @@ -2,7 +2,7 @@ #define OPTIMAL_COST(cost)(max(1, round(cost))) /// Wrapper for fetching material references. Exists exclusively so that people don't need to wrap everything in a list every time. -#define GET_MATERIAL_REF(arguments...) DSmaterials._GetMaterialRef(list(##arguments)) +#define GET_MATERIAL_REF(arguments...) SSmaterials._GetMaterialRef(list(##arguments)) // Wrapper to convert material name into its source name #define MATERIAL_SOURCE(mat) "[mat.name]_material" diff --git a/code/__HELPERS/game.dm b/code/__HELPERS/game.dm index 0aaca9a0907cf..aa953760bce71 100644 --- a/code/__HELPERS/game.dm +++ b/code/__HELPERS/game.dm @@ -205,18 +205,30 @@ return winset(flashed_client, "mainwindow", "flash=5") -///Recursively checks if an item is inside a given type, even through layers of storage. Returns the atom if it finds it. +///Recursively checks if an item is inside a given type/atom, even through layers of storage. Returns the atom if it finds it. /proc/recursive_loc_check(atom/movable/target, type) - var/atom/atom_to_find = target - if(istype(atom_to_find, type)) - return atom_to_find - - while(!istype(atom_to_find.loc, type)) - if(!atom_to_find.loc) - return - atom_to_find = atom_to_find.loc - - return atom_to_find.loc + var/atom/atom_to_find = null + + if(ispath(type)) + atom_to_find = target + if(istype(atom_to_find, type)) + return atom_to_find + + while(!istype(atom_to_find.loc, type)) + if(!atom_to_find.loc) + return + atom_to_find = atom_to_find.loc + else if(isatom(type)) + atom_to_find = target + if(atom_to_find.loc == type) + return atom_to_find + + while(atom_to_find.loc != type) + if(!atom_to_find.loc) + return + atom_to_find = atom_to_find.loc + + return atom_to_find ///Send a message in common radio when a player arrives /proc/announce_arrival(mob/living/carbon/human/character, rank) diff --git a/code/__HELPERS/global_lists.dm b/code/__HELPERS/global_lists.dm index 4a83b9b45a76a..bd991f29d014a 100644 --- a/code/__HELPERS/global_lists.dm +++ b/code/__HELPERS/global_lists.dm @@ -2,44 +2,6 @@ /////Initial Building///// ////////////////////////// -/proc/init_sprite_accessories() - //hair - init_sprite_accessory_subtypes(/datum/sprite_accessory/hair, GLOB.hairstyles_list, GLOB.hairstyles_male_list, GLOB.hairstyles_female_list) - //facial hair - init_sprite_accessory_subtypes(/datum/sprite_accessory/facial_hair, GLOB.facial_hairstyles_list, GLOB.facial_hairstyles_male_list, GLOB.facial_hairstyles_female_list) - //underwear - init_sprite_accessory_subtypes(/datum/sprite_accessory/underwear, GLOB.underwear_list, GLOB.underwear_m, GLOB.underwear_f) - //undershirt - init_sprite_accessory_subtypes(/datum/sprite_accessory/undershirt, GLOB.undershirt_list, GLOB.undershirt_m, GLOB.undershirt_f) - //socks - init_sprite_accessory_subtypes(/datum/sprite_accessory/socks, GLOB.socks_list) - //bodypart accessories (blizzard intensifies) - init_sprite_accessory_subtypes(/datum/sprite_accessory/body_markings, GLOB.body_markings_list) - init_sprite_accessory_subtypes(/datum/sprite_accessory/tails/human, GLOB.tails_list_human, add_blank = TRUE) - init_sprite_accessory_subtypes(/datum/sprite_accessory/tails/lizard, GLOB.tails_list_lizard, add_blank = TRUE) - init_sprite_accessory_subtypes(/datum/sprite_accessory/tails/monkey, GLOB.tails_list_monkey, add_blank = FALSE) - init_sprite_accessory_subtypes(/datum/sprite_accessory/snouts, GLOB.snouts_list) - init_sprite_accessory_subtypes(/datum/sprite_accessory/horns,GLOB.horns_list) - init_sprite_accessory_subtypes(/datum/sprite_accessory/ears, GLOB.ears_list) - init_sprite_accessory_subtypes(/datum/sprite_accessory/wings, GLOB.wings_list) - init_sprite_accessory_subtypes(/datum/sprite_accessory/wings_open, GLOB.wings_open_list) - init_sprite_accessory_subtypes(/datum/sprite_accessory/frills, GLOB.frills_list) - init_sprite_accessory_subtypes(/datum/sprite_accessory/spines, GLOB.spines_list) - init_sprite_accessory_subtypes(/datum/sprite_accessory/tail_spines, GLOB.tail_spines_list) - init_sprite_accessory_subtypes(/datum/sprite_accessory/legs, GLOB.legs_list) - init_sprite_accessory_subtypes(/datum/sprite_accessory/caps, GLOB.caps_list) - init_sprite_accessory_subtypes(/datum/sprite_accessory/moth_wings, GLOB.moth_wings_list) - init_sprite_accessory_subtypes(/datum/sprite_accessory/moth_antennae, GLOB.moth_antennae_list) - init_sprite_accessory_subtypes(/datum/sprite_accessory/moth_markings, GLOB.moth_markings_list) - init_sprite_accessory_subtypes(/datum/sprite_accessory/pod_hair, GLOB.pod_hair_list) - -/// Inits GLOB.species_list. Not using GLOBAL_LIST_INIT b/c it depends on GLOB.string_lists -/proc/init_species_list() - for(var/species_path in subtypesof(/datum/species)) - var/datum/species/species = new species_path() - GLOB.species_list[species.id] = species_path - sort_list(GLOB.species_list, GLOBAL_PROC_REF(cmp_typepaths_asc)) - /// Inits GLOB.surgeries /proc/init_surgeries() var/surgeries = list() @@ -48,21 +10,9 @@ sort_list(surgeries, GLOBAL_PROC_REF(cmp_typepaths_asc)) return surgeries -/// Hair Gradients - Initialise all /datum/sprite_accessory/hair_gradient into an list indexed by gradient-style name -/proc/init_hair_gradients() - for(var/path in subtypesof(/datum/sprite_accessory/gradient)) - var/datum/sprite_accessory/gradient/gradient = new path() - if(gradient.gradient_category & GRADIENT_APPLIES_TO_HAIR) - GLOB.hair_gradients_list[gradient.name] = gradient - if(gradient.gradient_category & GRADIENT_APPLIES_TO_FACIAL_HAIR) - GLOB.facial_hair_gradients_list[gradient.name] = gradient - /// Legacy procs that really should be replaced with proper _INIT macros /proc/make_datum_reference_lists() // I tried to eliminate this proc but I couldn't untangle their init-order interdependencies -Dominion/Cyberboss - init_sprite_accessories() - init_species_list() - init_hair_gradients() init_keybindings() GLOB.emote_list = init_emote_list() // WHY DOES THIS NEED TO GO HERE? IT JUST INITS DATUMS init_crafting_recipes() @@ -139,8 +89,8 @@ GLOB.crafting_recipes += recipe var/list/material_stack_recipes = list( - DSmaterials.base_stack_recipes, - DSmaterials.rigid_stack_recipes, + SSmaterials.base_stack_recipes, + SSmaterials.rigid_stack_recipes, ) for(var/list/recipe_list in material_stack_recipes) diff --git a/code/__HELPERS/hallucinations.dm b/code/__HELPERS/hallucinations.dm index 1eeab08d87691..edd65ee926abf 100644 --- a/code/__HELPERS/hallucinations.dm +++ b/code/__HELPERS/hallucinations.dm @@ -145,7 +145,7 @@ ADMIN_VERB(debug_hallucination_weighted_list_per_type, R_DEBUG, "Show Hallucinat last_type_weight = this_weight // Sort by weight descending, where weight is the values (not the keys). We assoc_to_keys later to get JUST the text - all_weights = sortTim(all_weights, GLOBAL_PROC_REF(cmp_numeric_dsc), associative = TRUE) + sortTim(all_weights, GLOBAL_PROC_REF(cmp_numeric_dsc), associative = TRUE) var/page_style = "" var/page_contents = "[page_style][header][jointext(assoc_to_keys(all_weights), "")]
" diff --git a/code/__HELPERS/icon_smoothing.dm b/code/__HELPERS/icon_smoothing.dm index 5c5ff5a059a30..c53d9df2d2c05 100644 --- a/code/__HELPERS/icon_smoothing.dm +++ b/code/__HELPERS/icon_smoothing.dm @@ -177,7 +177,7 @@ xxx xxx xxx corners_diagonal_smooth(calculate_adjacencies()) else corners_cardinal_smooth(calculate_adjacencies()) - else if(smoothing_flags & SMOOTH_BITMASK) + else if(smoothing_flags & (SMOOTH_BITMASK|SMOOTH_BITMASK_CARDINALS)) bitmask_smooth() else CRASH("smooth_icon called for [src] with smoothing_flags == [smoothing_flags]") @@ -430,7 +430,7 @@ xxx xxx xxx SET_ADJ_IN_DIR(WEST, WEST) // If there's nothing going on already - if(!(new_junction & (NORTH|SOUTH)) || !(new_junction & (EAST|WEST))) + if(smoothing_flags & SMOOTH_BITMASK_CARDINALS || !(new_junction & (NORTH|SOUTH)) || !(new_junction & (EAST|WEST))) set_smoothed_icon_state(new_junction) return @@ -518,13 +518,13 @@ xxx xxx xxx /proc/smooth_zlevel(zlevel, now = FALSE) var/list/away_turfs = Z_TURFS(zlevel) for(var/turf/turf_to_smooth as anything in away_turfs) - if(turf_to_smooth.smoothing_flags & (SMOOTH_CORNERS|SMOOTH_BITMASK)) + if(turf_to_smooth.smoothing_flags & USES_SMOOTHING) if(now) turf_to_smooth.smooth_icon() else QUEUE_SMOOTH(turf_to_smooth) for(var/atom/movable/movable_to_smooth as anything in turf_to_smooth) - if(movable_to_smooth.smoothing_flags & (SMOOTH_CORNERS|SMOOTH_BITMASK)) + if(movable_to_smooth.smoothing_flags & USES_SMOOTHING) if(now) movable_to_smooth.smooth_icon() else @@ -655,15 +655,6 @@ xxx xxx xxx smoothing_groups = null canSmoothWith = null -#undef NORTH_JUNCTION -#undef SOUTH_JUNCTION -#undef EAST_JUNCTION -#undef WEST_JUNCTION -#undef NORTHEAST_JUNCTION -#undef NORTHWEST_JUNCTION -#undef SOUTHEAST_JUNCTION -#undef SOUTHWEST_JUNCTION - #undef NO_ADJ_FOUND #undef ADJ_FOUND #undef NULLTURF_BORDER diff --git a/code/__HELPERS/logging/_logging.dm b/code/__HELPERS/logging/_logging.dm index b7a7b689483c2..bfcaded67f021 100644 --- a/code/__HELPERS/logging/_logging.dm +++ b/code/__HELPERS/logging/_logging.dm @@ -70,7 +70,7 @@ GLOBAL_LIST_INIT(testing_global_profiler, list("_PROFILE_NAME" = "Global")) SEND_TEXT(world.log, text) #endif -#if defined(REFERENCE_DOING_IT_LIVE) +#if defined(REFERENCE_TRACKING_LOG_APART) #define log_reftracker(msg) log_harddel("## REF SEARCH [msg]") /proc/log_harddel(text) diff --git a/code/__HELPERS/mobs.dm b/code/__HELPERS/mobs.dm index 8e2a4e608573e..06f81e742adfe 100644 --- a/code/__HELPERS/mobs.dm +++ b/code/__HELPERS/mobs.dm @@ -29,31 +29,31 @@ return COLOR_BLACK /proc/random_underwear(gender) - if(!GLOB.underwear_list.len) - init_sprite_accessory_subtypes(/datum/sprite_accessory/underwear, GLOB.underwear_list, GLOB.underwear_m, GLOB.underwear_f) + if(length(SSaccessories.underwear_list) == 0) + CRASH("No underwear to choose from!") switch(gender) if(MALE) - return pick(GLOB.underwear_m) + return pick(SSaccessories.underwear_m) if(FEMALE) - return pick(GLOB.underwear_f) + return pick(SSaccessories.underwear_f) else - return pick(GLOB.underwear_list) + return pick(SSaccessories.underwear_list) /proc/random_undershirt(gender) - if(!GLOB.undershirt_list.len) - init_sprite_accessory_subtypes(/datum/sprite_accessory/undershirt, GLOB.undershirt_list, GLOB.undershirt_m, GLOB.undershirt_f) + if(length(SSaccessories.undershirt_list) == 0) + CRASH("No undershirts to choose from!") switch(gender) if(MALE) - return pick(GLOB.undershirt_m) + return pick(SSaccessories.undershirt_m) if(FEMALE) - return pick(GLOB.undershirt_f) + return pick(SSaccessories.undershirt_f) else - return pick(GLOB.undershirt_list) + return pick(SSaccessories.undershirt_list) /proc/random_socks() - if(!GLOB.socks_list.len) - init_sprite_accessory_subtypes(/datum/sprite_accessory/socks, GLOB.socks_list) - return pick(GLOB.socks_list) + if(length(SSaccessories.socks_list) == 0) + CRASH("No socks to choose from!") + return pick(SSaccessories.socks_list) /proc/random_backpack() return pick(GLOB.backpacklist) @@ -61,61 +61,20 @@ /proc/random_hairstyle(gender) switch(gender) if(MALE) - return pick(GLOB.hairstyles_male_list) + return pick(SSaccessories.hairstyles_male_list) if(FEMALE) - return pick(GLOB.hairstyles_female_list) + return pick(SSaccessories.hairstyles_female_list) else - return pick(GLOB.hairstyles_list) + return pick(SSaccessories.hairstyles_list) /proc/random_facial_hairstyle(gender) switch(gender) if(MALE) - return pick(GLOB.facial_hairstyles_male_list) + return pick(SSaccessories.facial_hairstyles_male_list) if(FEMALE) - return pick(GLOB.facial_hairstyles_female_list) + return pick(SSaccessories.facial_hairstyles_female_list) else - return pick(GLOB.facial_hairstyles_list) - -/proc/random_unique_name(gender, attempts_to_find_unique_name=10) - for(var/i in 1 to attempts_to_find_unique_name) - if(gender == FEMALE) - . = capitalize(pick(GLOB.first_names_female)) + " " + capitalize(pick(GLOB.last_names)) - else - . = capitalize(pick(GLOB.first_names_male)) + " " + capitalize(pick(GLOB.last_names)) - - if(!findname(.)) - break - -/proc/random_unique_lizard_name(gender, attempts_to_find_unique_name=10) - for(var/i in 1 to attempts_to_find_unique_name) - . = capitalize(lizard_name(gender)) - - if(!findname(.)) - break - -/proc/random_unique_plasmaman_name(attempts_to_find_unique_name=10) - for(var/i in 1 to attempts_to_find_unique_name) - . = capitalize(plasmaman_name()) - - if(!findname(.)) - break - -/proc/random_unique_ethereal_name(attempts_to_find_unique_name=10) - for(var/i in 1 to attempts_to_find_unique_name) - . = capitalize(ethereal_name()) - - if(!findname(.)) - break - -/proc/random_unique_moth_name(attempts_to_find_unique_name=10) - for(var/i in 1 to attempts_to_find_unique_name) - . = capitalize(pick(GLOB.moth_first)) + " " + capitalize(pick(GLOB.moth_last)) - - if(!findname(.)) - break - -/proc/random_skin_tone() - return pick(GLOB.skin_tones) + return pick(SSaccessories.facial_hairstyles_list) GLOBAL_LIST_INIT(skin_tones, sort_list(list( "albino", @@ -155,9 +114,6 @@ GLOBAL_LIST_INIT(skin_tone_names, list( "mixed4" = "Macadamia", )) -/// An assoc list of species IDs to type paths -GLOBAL_LIST_EMPTY(species_list) - /proc/age2agedescription(age) switch(age) if(0 to 1) @@ -238,7 +194,7 @@ GLOBAL_LIST_EMPTY(species_list) var/atom/target_loc = target?.loc var/drifting = FALSE - if(DSmove_manager.processing_on(user, SSspacedrift)) + if(GLOB.move_manager.processing_on(user, SSspacedrift)) drifting = TRUE var/holding = user.get_active_held_item() @@ -267,7 +223,7 @@ GLOBAL_LIST_EMPTY(species_list) if(!QDELETED(progbar)) progbar.update(world.time - starttime) - if(drifting && !DSmove_manager.processing_on(user, SSspacedrift)) + if(drifting && !GLOB.move_manager.processing_on(user, SSspacedrift)) drifting = FALSE user_loc = user.loc @@ -375,6 +331,9 @@ GLOBAL_LIST_EMPTY(species_list) /proc/deadchat_broadcast(message, source=null, mob/follow_target=null, turf/turf_target=null, speaker_key=null, message_type=DEADCHAT_REGULAR, admin_only=FALSE) message = span_deadsay("[source][span_linkify(message)]") + if(admin_only) + message += span_deadsay(" (This is viewable to admins only).") + for(var/mob/M in GLOB.player_list) var/chat_toggles = TOGGLES_DEFAULT_CHAT var/toggles = TOGGLES_DEFAULT @@ -385,10 +344,8 @@ GLOBAL_LIST_EMPTY(species_list) toggles = prefs.toggles ignoring = prefs.ignoring if(admin_only) - if (!M.client?.holder) - return - else - message += span_deadsay(" (This is viewable to admins only).") + if(!M.client?.holder) + continue var/override = FALSE if(M.client?.holder && (chat_toggles & CHAT_DEAD)) override = TRUE @@ -518,13 +475,18 @@ GLOBAL_LIST_EMPTY(species_list) . += borg //Returns a list of AI's -/proc/active_ais(check_mind=FALSE, z = null) +/proc/active_ais(check_mind=FALSE, z = null, skip_syndicate, only_syndicate) . = list() for(var/mob/living/silicon/ai/ai as anything in GLOB.ai_list) if(ai.stat == DEAD) continue if(ai.control_disabled) continue + var/syndie_ai = istype(ai, /mob/living/silicon/ai/weak_syndie) + if(skip_syndicate && syndie_ai) + continue + if(only_syndicate && !syndie_ai) + continue if(check_mind) if(!ai.mind) continue @@ -551,8 +513,8 @@ GLOBAL_LIST_EMPTY(species_list) . = pick(borgs) return . -/proc/select_active_ai(mob/user, z = null) - var/list/ais = active_ais(FALSE, z) +/proc/select_active_ai(mob/user, z = null, skip_syndicate, only_syndicate) + var/list/ais = active_ais(FALSE, z, skip_syndicate, only_syndicate) if(ais.len) if(user) . = input(user,"AI signals detected:", "AI Selection", ais[1]) in sort_list(ais) @@ -622,6 +584,12 @@ GLOBAL_LIST_EMPTY(species_list) if(mob.ckey == key) return mob +/// Returns a string for the specified body zone. If we have a bodypart in this zone, refers to its plaintext_zone instead. +/mob/living/proc/parse_zone_with_bodypart(zone) + var/obj/item/bodypart/part = get_bodypart(zone) + + return part?.plaintext_zone || parse_zone(zone) + ///Return a string for the specified body zone. Should be used for parsing non-instantiated bodyparts, otherwise use [/obj/item/bodypart/var/plaintext_zone] /proc/parse_zone(zone) switch(zone) @@ -670,6 +638,49 @@ GLOBAL_LIST_EMPTY(species_list) else return precise_zone +///Returns a list of strings for a given slot flag. +/proc/parse_slot_flags(slot_flags) + var/list/slot_strings = list() + if(slot_flags & ITEM_SLOT_BACK) + slot_strings += "back" + if(slot_flags & ITEM_SLOT_MASK) + slot_strings += "mask" + if(slot_flags & ITEM_SLOT_NECK) + slot_strings += "neck" + if(slot_flags & ITEM_SLOT_HANDCUFFED) + slot_strings += "handcuff" + if(slot_flags & ITEM_SLOT_LEGCUFFED) + slot_strings += "legcuff" + if(slot_flags & ITEM_SLOT_BELT) + slot_strings += "belt" + if(slot_flags & ITEM_SLOT_ID) + slot_strings += "id" + if(slot_flags & ITEM_SLOT_EARS) + slot_strings += "ear" + if(slot_flags & ITEM_SLOT_EYES) + slot_strings += "glasses" + if(slot_flags & ITEM_SLOT_GLOVES) + slot_strings += "glove" + if(slot_flags & ITEM_SLOT_HEAD) + slot_strings += "head" + if(slot_flags & ITEM_SLOT_FEET) + slot_strings += "shoe" + if(slot_flags & ITEM_SLOT_OCLOTHING) + slot_strings += "oversuit" + if(slot_flags & ITEM_SLOT_ICLOTHING) + slot_strings += "undersuit" + if(slot_flags & ITEM_SLOT_SUITSTORE) + slot_strings += "suit storage" + if(slot_flags & (ITEM_SLOT_LPOCKET|ITEM_SLOT_RPOCKET)) + slot_strings += "pocket" + if(slot_flags & ITEM_SLOT_HANDS) + slot_strings += "hand" + if(slot_flags & ITEM_SLOT_DEX_STORAGE) + slot_strings += "dextrous storage" + if(slot_flags & ITEM_SLOT_BACKPACK) + slot_strings += "backpack" + return slot_strings + ///Returns the direction that the initiator and the target are facing /proc/check_target_facings(mob/living/initiator, mob/living/target) /*This can be used to add additional effects on interactions between mobs depending on how the mobs are facing each other, such as adding a crit damage to blows to the back of a guy's head. diff --git a/code/__HELPERS/names.dm b/code/__HELPERS/names.dm index 12c34d3a705ca..3a82c8dc1a66c 100644 --- a/code/__HELPERS/names.dm +++ b/code/__HELPERS/names.dm @@ -1,20 +1,75 @@ -/proc/lizard_name(gender) - if(gender == MALE) - return "[pick(GLOB.lizard_names_male)]-[pick(GLOB.lizard_names_male)]" - else - return "[pick(GLOB.lizard_names_female)]-[pick(GLOB.lizard_names_female)]" +/** + * Generate a random name based off of one of the roundstart languages + * + * * gender - What gender to pick from. Picks between male, female if not provided. + * * unique - If the name should be unique, IE, avoid picking names that mobs already have. + * * list/language_weights - A list of language weights to pick from. + * If not provided, it will default to a list of roundstart languages, with common being the most likely. + */ +/proc/generate_random_name(gender, unique, list/language_weights) + if(isnull(language_weights)) + language_weights = list() + for(var/lang_type in GLOB.uncommon_roundstart_languages) + language_weights[lang_type] = 1 + language_weights[/datum/language/common] = 20 + + var/datum/language/picked = GLOB.language_datum_instances[pick_weight(language_weights)] + if(unique) + return picked.get_random_unique_name(gender) + return picked.get_random_name(gender) + +/** + * Generate a random name based off of a species + * This will pick a name from the species language, and avoid picking common if there are alternatives + * + * * gender - What gender to pick from. Picks between male, female if not provided. + * * unique - If the name should be unique, IE, avoid picking names that mobs already have. + * * datum/species/species_type - The species to pick from + * * include_all - Makes the generated name a mix of all the languages the species can speak rather than just one of them + * Does this on a per-name basis, IE "Lizard first name, uncommon last name". + */ +/proc/generate_random_name_species_based(gender, unique, datum/species/species_type, include_all = FALSE) + ASSERT(ispath(species_type, /datum/species)) + var/datum/language_holder/holder = GLOB.prototype_language_holders[species_type::species_language_holder] -/proc/ethereal_name() - var/tempname = "[pick(GLOB.ethereal_names)] [random_capital_letter()]" - if(prob(65)) - tempname += random_capital_letter() - return tempname + var/list/languages_to_pick_from = list() + for(var/language in holder.spoken_languages) + languages_to_pick_from[language] = 1 -/proc/plasmaman_name() - return "[pick(GLOB.plasmaman_names)] \Roman[rand(1,99)]" + if(length(languages_to_pick_from) >= 2) + // Basically, if we have alternatives, don't pick common it's boring + languages_to_pick_from -= /datum/language/common -/proc/moth_name() - return "[pick(GLOB.moth_first)] [pick(GLOB.moth_last)]" + if(!include_all || length(languages_to_pick_from) <= 1) + return generate_random_name(gender, unique, languages_to_pick_from) + + var/list/name_parts = list() + for(var/lang_type in shuffle(languages_to_pick_from)) + name_parts += GLOB.language_datum_instances[lang_type].get_random_name(gender, name_count = 1, force_use_syllables = TRUE) + return jointext(name_parts, " ") + +/** + * Generates a random name for the mob based on their gender or species (for humans) + * + * * unique - If the name should be unique, IE, avoid picking names that mobs already have. + */ +/mob/proc/generate_random_mob_name(unique) + return generate_random_name_species_based(gender, unique, /datum/species/human) + +/mob/living/carbon/generate_random_mob_name(unique) + return generate_random_name_species_based(gender, unique, dna?.species?.type || /datum/species/human) + +/mob/living/silicon/generate_random_mob_name(unique) + return generate_random_name(gender, unique, list(/datum/language/machine = 1)) + +/mob/living/basic/drone/generate_random_mob_name(unique) + return generate_random_name(gender, unique, list(/datum/language/machine = 1)) + +/mob/living/basic/bot/generate_random_mob_name(unique) + return generate_random_name(gender, unique, list(/datum/language/machine = 1)) + +/mob/living/simple_animal/bot/generate_random_mob_name(unique) + return generate_random_name(gender, unique, list(/datum/language/machine = 1)) GLOBAL_VAR(command_name) /proc/command_name() @@ -194,16 +249,11 @@ GLOBAL_DATUM(syndicate_code_response_regex, /regex) if(1)//1 and 2 can only be selected once each to prevent more than two specific names/places/etc. switch(rand(1,2))//Mainly to add more options later. if(1) - if(names.len && prob(70)) + if(length(names) && prob(70)) . += pick(names) else - if(prob(10)) - . += pick(lizard_name(MALE),lizard_name(FEMALE)) - else - var/new_name = pick(pick(GLOB.first_names_male,GLOB.first_names_female)) - new_name += " " - new_name += pick(GLOB.last_names) - . += new_name + . += generate_random_name() + if(2) var/datum/job/job = pick(SSjob.joinable_occupations) if(job) diff --git a/code/__HELPERS/paths/jps.dm b/code/__HELPERS/paths/jps.dm index 2dc46dea1b7cf..fbdccdef12c56 100644 --- a/code/__HELPERS/paths/jps.dm +++ b/code/__HELPERS/paths/jps.dm @@ -34,7 +34,7 @@ previous_node = incoming_previous_node number_tiles = previous_node.number_tiles + jumps node_goal = previous_node.node_goal - heuristic = get_dist(tile, node_goal) + heuristic = get_dist_euclidean(tile, node_goal) f_value = number_tiles + heuristic // otherwise, no parent node means this is from a subscan lateral scan, so we just need the tile for now until we call [datum/jps/proc/update_parent] on it @@ -47,7 +47,7 @@ node_goal = previous_node.node_goal jumps = get_dist(tile, previous_node.tile) number_tiles = previous_node.number_tiles + jumps - heuristic = get_dist(tile, node_goal) + heuristic = get_dist_euclidean(tile, node_goal) f_value = number_tiles + heuristic /proc/HeapPathWeightCompare(datum/jps_node/a, datum/jps_node/b) diff --git a/code/__HELPERS/priority_announce.dm b/code/__HELPERS/priority_announce.dm index d902b5efca3cd..895ff2388fd26 100644 --- a/code/__HELPERS/priority_announce.dm +++ b/code/__HELPERS/priority_announce.dm @@ -107,7 +107,7 @@ message.title = title message.content = text - DScommunications.send_message(message) + GLOB.communications_controller.send_message(message) /** * Sends a minor annoucement to players. diff --git a/code/__HELPERS/pronouns.dm b/code/__HELPERS/pronouns.dm index df84c1cdcf42a..fe2357d6ce422 100644 --- a/code/__HELPERS/pronouns.dm +++ b/code/__HELPERS/pronouns.dm @@ -1,5 +1,8 @@ +#define GET_TARGET_PRONOUN(target, pronoun, gender) call(target, ALL_PRONOUNS[pronoun])(gender) + //pronoun procs, for getting pronouns without using the text macros that only work in certain positions //datums don't have gender, but most of their subtypes do! + /datum/proc/p_they(temp_gender) return "it" @@ -69,6 +72,26 @@ else return "s" +/// A proc to replace pronouns in a string with the appropriate pronouns for a target atom. +/// Uses associative list access from a __DEFINE list, since associative access is slightly +/// faster +/datum/proc/REPLACE_PRONOUNS(target_string, atom/targeted_atom, targeted_gender = null) + /// If someone specifies targeted_gender we choose that, + /// otherwise we go off the gender of our object + var/gender + if(targeted_gender) + if(!istext(targeted_gender) || !(targeted_gender in list(MALE, FEMALE, PLURAL, NEUTER))) + stack_trace("REPLACE_PRONOUNS called with improper parameters.") + return + gender = targeted_gender + else + gender = targeted_atom.gender + var/regex/pronoun_regex = regex("%PRONOUN(_(they|They|their|Their|theirs|Theirs|them|Them|have|are|were|do|theyve|Theyve|theyre|Theyre|s|es))") + while(pronoun_regex.Find(target_string)) + target_string = pronoun_regex.Replace(target_string, GET_TARGET_PRONOUN(targeted_atom, pronoun_regex.match, gender)) + return target_string + + //like clients, which do have gender. /client/p_they(temp_gender) if(!temp_gender) diff --git a/code/__HELPERS/screen_objs.dm b/code/__HELPERS/screen_objs.dm index 7debecf816f3c..cb8520225ab8c 100644 --- a/code/__HELPERS/screen_objs.dm +++ b/code/__HELPERS/screen_objs.dm @@ -101,3 +101,15 @@ /proc/cut_relative_direction(fragment) var/static/regex/regex = regex(@"([A-Z])\w+", "g") return regex.Replace(fragment, "") + +/// Returns a screen_loc format for a tiling screen objects from start and end positions. Start should be bottom left corner, and end top right corner. +/proc/spanning_screen_loc(start_px, start_py, end_px, end_py) + var/starting_tile_x = round(start_px / 32) + start_px -= starting_tile_x * 32 + var/starting_tile_y = round(start_py/ 32) + start_py -= starting_tile_y * 32 + var/ending_tile_x = round(end_px / 32) + end_px -= ending_tile_x * 32 + var/ending_tile_y = round(end_py / 32) + end_py -= ending_tile_y * 32 + return "[starting_tile_x]:[start_px],[starting_tile_y]:[start_py] to [ending_tile_x]:[end_px],[ending_tile_y]:[end_py]" diff --git a/code/__HELPERS/sorts/InsertSort.dm b/code/__HELPERS/sorts/InsertSort.dm deleted file mode 100644 index 2d5ca408ce3b3..0000000000000 --- a/code/__HELPERS/sorts/InsertSort.dm +++ /dev/null @@ -1,19 +0,0 @@ -//simple insertion sort - generally faster than merge for runs of 7 or smaller -/proc/sortInsert(list/L, cmp=/proc/cmp_numeric_asc, associative, fromIndex=1, toIndex=0) - if(L && L.len >= 2) - fromIndex = fromIndex % L.len - toIndex = toIndex % (L.len+1) - if(fromIndex <= 0) - fromIndex += L.len - if(toIndex <= 0) - toIndex += L.len + 1 - - var/datum/sort_instance/SI = GLOB.sortInstance - if(!SI) - SI = new - SI.L = L - SI.cmp = cmp - SI.associative = associative - - SI.binarySort(fromIndex, toIndex, fromIndex) - return L diff --git a/code/__HELPERS/sorts/MergeSort.dm b/code/__HELPERS/sorts/MergeSort.dm deleted file mode 100644 index 4692534edffd7..0000000000000 --- a/code/__HELPERS/sorts/MergeSort.dm +++ /dev/null @@ -1,19 +0,0 @@ -//merge-sort - gernerally faster than insert sort, for runs of 7 or larger -/proc/sortMerge(list/L, cmp=/proc/cmp_numeric_asc, associative, fromIndex=1, toIndex) - if(L && L.len >= 2) - fromIndex = fromIndex % L.len - toIndex = toIndex % (L.len+1) - if(fromIndex <= 0) - fromIndex += L.len - if(toIndex <= 0) - toIndex += L.len + 1 - - var/datum/sort_instance/SI = GLOB.sortInstance - if(!SI) - SI = new - SI.L = L - SI.cmp = cmp - SI.associative = associative - - SI.mergeSort(fromIndex, toIndex) - return L diff --git a/code/__HELPERS/sorts/TimSort.dm b/code/__HELPERS/sorts/TimSort.dm deleted file mode 100644 index 44f6d170df402..0000000000000 --- a/code/__HELPERS/sorts/TimSort.dm +++ /dev/null @@ -1,20 +0,0 @@ -//TimSort interface -/proc/sortTim(list/L, cmp=/proc/cmp_numeric_asc, associative, fromIndex=1, toIndex=0) - if(L && L.len >= 2) - fromIndex = fromIndex % L.len - toIndex = toIndex % (L.len+1) - if(fromIndex <= 0) - fromIndex += L.len - if(toIndex <= 0) - toIndex += L.len + 1 - - var/datum/sort_instance/SI = GLOB.sortInstance - if(!SI) - SI = new - - SI.L = L - SI.cmp = cmp - SI.associative = associative - - SI.timSort(fromIndex, toIndex) - return L diff --git a/code/__HELPERS/sorts/helpers.dm b/code/__HELPERS/sorts/helpers.dm new file mode 100644 index 0000000000000..7198286f29fe2 --- /dev/null +++ b/code/__HELPERS/sorts/helpers.dm @@ -0,0 +1,95 @@ +/// Sorts the list in place with timSort, default settings. +#define SORT_TIM(to_sort, associative) if(length(to_sort) >= 2) { \ + var/datum/sort_instance/sorter = GLOB.sortInstance; \ + if (isnull(sorter)) { \ + sorter = new; \ + } \ + sorter.L = to_sort; \ + sorter.cmp = GLOBAL_PROC_REF(cmp_numeric_asc); \ + sorter.associative = associative; \ + sorter.timSort(1, 0); \ +} + + +/// Helper for the sorting procs. Prevents some code duplication. Creates /datum/sort_instance/sorter +#define CREATE_SORT_INSTANCE(to_sort, cmp, associative, fromIndex, toIndex) \ + if(length(to_sort) < 2) { \ + return to_sort; \ + } \ + fromIndex = fromIndex % length(to_sort); \ + toIndex = toIndex % (length(to_sort) + 1); \ + if (fromIndex <= 0) { \ + fromIndex += length(to_sort); \ + } \ + if (toIndex <= 0) { \ + toIndex += length(to_sort) + 1; \ + } \ + var/datum/sort_instance/sorter = GLOB.sortInstance; \ + if (isnull(sorter)) { \ + sorter = new; \ + } \ + sorter.L = to_sort; \ + sorter.cmp = cmp; \ + sorter.associative = associative; + + +/** + * ## Tim Sort + * Hybrid sorting algorithm derived from merge sort and insertion sort. + * + * **Sorts in place**. + * You might not need to get the return value. + * + * @see + * https://en.wikipedia.org/wiki/Timsort + * + * @param {list} to_sort - The list to sort. + * + * @param {proc} cmp - The comparison proc to use. Default: Numeric ascending. + * + * @param {boolean} associative - Whether the list is associative. Default: FALSE. + * + * @param {int} fromIndex - The index to start sorting from. Default: 1. + * + * @param {int} toIndex - The index to stop sorting at. Default: 0. + */ +/proc/sortTim(list/to_sort, cmp = GLOBAL_PROC_REF(cmp_numeric_asc), associative = FALSE, fromIndex = 1, toIndex = 0) as /list + CREATE_SORT_INSTANCE(to_sort, cmp, associative, fromIndex, toIndex) + + sorter.timSort(fromIndex, toIndex) + + return to_sort + + +/** + * ## Merge Sort + * Divide and conquer sorting algorithm. + * + * @see + * - https://en.wikipedia.org/wiki/Merge_sort + */ +/proc/sortMerge(list/to_sort, cmp = GLOBAL_PROC_REF(cmp_numeric_asc), associative = FALSE, fromIndex = 1, toIndex = 0) as /list + CREATE_SORT_INSTANCE(to_sort, cmp, associative, fromIndex, toIndex) + + sorter.mergeSort(fromIndex, toIndex) + + return to_sort + + +/** + * ## Insertion Sort + * Simple sorting algorithm that builds the final sorted list one item at a time. + * + + * @see + * - https://en.wikipedia.org/wiki/Insertion_sort + */ +/proc/sortInsert(list/to_sort, cmp = GLOBAL_PROC_REF(cmp_numeric_asc), associative = FALSE, fromIndex = 1, toIndex = 0) as /list + CREATE_SORT_INSTANCE(to_sort, cmp, associative, fromIndex, toIndex) + + sorter.binarySort(fromIndex, toIndex) + + return to_sort + + +#undef CREATE_SORT_INSTANCE diff --git a/code/__HELPERS/sorts/__main.dm b/code/__HELPERS/sorts/sort_instance.dm similarity index 100% rename from code/__HELPERS/sorts/__main.dm rename to code/__HELPERS/sorts/sort_instance.dm diff --git a/code/__HELPERS/spatial_info.dm b/code/__HELPERS/spatial_info.dm index 98e11b483bab7..529532f50cf4d 100644 --- a/code/__HELPERS/spatial_info.dm +++ b/code/__HELPERS/spatial_info.dm @@ -283,7 +283,7 @@ return atoms ///Returns the distance between two atoms -/proc/get_dist_euclidian(atom/first_location as turf|mob|obj, atom/second_location as turf|mob|obj) +/proc/get_dist_euclidean(atom/first_location, atom/second_location) var/dx = first_location.x - second_location.x var/dy = first_location.y - second_location.y @@ -468,5 +468,8 @@ if(possible_spawn in inner) continue peel += possible_spawn + + if(!length(peel)) + return center //Offer the center only as a default case when we don't have a valid circle. return peel diff --git a/code/__HELPERS/text.dm b/code/__HELPERS/text.dm index 40915672ef960..53b8b95997cc9 100644 --- a/code/__HELPERS/text.dm +++ b/code/__HELPERS/text.dm @@ -241,12 +241,7 @@ if(last_char_group == SPACES_DETECTED) t_out = copytext_char(t_out, 1, -1) //removes the last character (in this case a space) - for(var/bad_name in list("space","floor","wall","r-wall","monkey","unknown","inactive ai")) //prevents these common metagamey names - if(cmptext(t_out,bad_name)) - return //(not case sensitive) - - // Protects against names containing IC chat prohibited words. - if(is_ic_filtered(t_out) || is_soft_ic_filtered(t_out)) + if(!filter_name_ic(t_out)) return return t_out @@ -257,6 +252,39 @@ #undef LETTERS_DETECTED +/// Much more permissive version of reject_bad_name(). +/// Returns a trimmed string or null if the name is invalid. +/// Allows most characters except for IC chat prohibited words. +/proc/permissive_sanitize_name(value) + if(!istext(value)) // Not a string + return + + var/name_length = length(value) + if(name_length < 3) // Too short + return + + if(name_length > 3 * MAX_NAME_LEN) // Bad input + return + + var/trimmed = trim(value, MAX_NAME_LEN) + if(!filter_name_ic(trimmed)) // Contains IC chat prohibited words + return + + return trim_reduced(trimmed) + + +/// Helper proc to check if a name is valid for the IC filter +/proc/filter_name_ic(name) + for(var/bad_name in list("space", "floor", "wall", "r-wall", "monkey", "unknown", "inactive ai")) //prevents these common metagamey names + if(cmptext(name, bad_name)) + return FALSE //(not case sensitive) + + // Protects against names containing IC chat prohibited words. + if(is_ic_filtered(name) || is_soft_ic_filtered(name)) + return FALSE + + return TRUE + //html_encode helper proc that returns the smallest non null of two numbers //or 0 if they're both null (needed because of findtext returning 0 when a value is not present) diff --git a/code/__HELPERS/time.dm b/code/__HELPERS/time.dm index 9c57f2334c8cf..ac3ff23b05e41 100644 --- a/code/__HELPERS/time.dm +++ b/code/__HELPERS/time.dm @@ -28,7 +28,7 @@ SSticker.gametime_offset = CEILING(SSticker.gametime_offset, 3600) //returns timestamp in a sql and a not-quite-compliant ISO 8601 friendly format -/proc/SQLtime(timevar) +/proc/ISOtime(timevar) return time2text(timevar || world.timeofday, "YYYY-MM-DD hh:mm:ss") diff --git a/code/__HELPERS/turfs.dm b/code/__HELPERS/turfs.dm index c44845a5854b7..88509b88ce802 100644 --- a/code/__HELPERS/turfs.dm +++ b/code/__HELPERS/turfs.dm @@ -400,8 +400,8 @@ Turf and target are separate in case you want to teleport some distance from a t /** * Checks whether or not a particular typepath or subtype of it is present on a turf * - * Returns TRUE if an instance of the desired type or a subtype of it is found - * Returns FALSE if the type is not found, or if no turf is supplied + * Returns the first instance located if an instance of the desired type or a subtype of it is found + * Returns null if the type is not found, or if no turf is supplied * * Arguments: * * location - The turf to be checked for the desired type @@ -409,10 +409,9 @@ Turf and target are separate in case you want to teleport some distance from a t */ /proc/is_type_on_turf(turf/location, type_to_find) if(!location) - return FALSE - if(locate(type_to_find) in location) - return TRUE - return FALSE + return + var/found_type = locate(type_to_find) in location + return found_type /** * get_blueprint_data diff --git a/code/_compile_options.dm b/code/_compile_options.dm index 0d534fac9a36c..6056a292ed61f 100644 --- a/code/_compile_options.dm +++ b/code/_compile_options.dm @@ -34,6 +34,8 @@ #define FIND_REF_NO_CHECK_TICK #endif //ifdef GC_FAILURE_HARD_LOOKUP +// Log references in their own file, rather then in runtimes.log +//#define REFERENCE_TRACKING_LOG_APART #endif //ifdef REFERENCE_TRACKING /* @@ -60,8 +62,24 @@ #define REFERENCE_TRACKING // actually look for refs #define GC_FAILURE_HARD_LOOKUP +// Log references in their own file +#define REFERENCE_TRACKING_LOG_APART #endif // REFERENCE_DOING_IT_LIVE +/// Sets up the reftracker to be used locally, to hunt for hard deletions +/// Errors are logged to [log_dir]/harddels.log +//#define REFERENCE_TRACKING_STANDARD +#ifdef REFERENCE_TRACKING_STANDARD +// compile the backend +#define REFERENCE_TRACKING +// actually look for refs +#define GC_FAILURE_HARD_LOOKUP +// spend ALL our time searching, not just part of it +#define FIND_REF_NO_CHECK_TICK +// Log references in their own file +#define REFERENCE_TRACKING_LOG_APART +#endif // REFERENCE_TRACKING_STANDARD + // If this is uncommented, we do a single run though of the game setup and tear down process with unit tests in between // #define UNIT_TESTS diff --git a/code/_globalvars/bitfields.dm b/code/_globalvars/bitfields.dm index 8852e9bb7def9..ea1b16d71cef8 100644 --- a/code/_globalvars/bitfields.dm +++ b/code/_globalvars/bitfields.dm @@ -50,7 +50,6 @@ DEFINE_BITFIELD(appearance_flags, list( )) DEFINE_BITFIELD(area_flags, list( - "ABDUCTOR_PROOF" = ABDUCTOR_PROOF, "BLOBS_ALLOWED" = BLOBS_ALLOWED, "BLOCK_SUICIDE" = BLOCK_SUICIDE, "CAVES_ALLOWED" = CAVES_ALLOWED, @@ -75,6 +74,7 @@ DEFINE_BITFIELD(turf_flags, list( "IS_SOLID" = IS_SOLID, "UNUSED_RESERVATION_TURF" = UNUSED_RESERVATION_TURF, "RESERVATION_TURF" = RESERVATION_TURF, + "TURF_BLOCKS_PLACEATOM" = TURF_BLOCKS_POPULATE_TERRAIN_FLORAFEATURES, )) DEFINE_BITFIELD(car_traits, list( @@ -83,7 +83,6 @@ DEFINE_BITFIELD(car_traits, list( DEFINE_BITFIELD(clothing_flags, list( "ANTI_TINFOIL_MANEUVER" = ANTI_TINFOIL_MANEUVER, - "BLOCKS_SPEECH" = BLOCKS_SPEECH, "BLOCK_GAS_SMOKE_EFFECT" = BLOCK_GAS_SMOKE_EFFECT, "CASTING_CLOTHES" = CASTING_CLOTHES, "GAS_FILTERING" = GAS_FILTERING, @@ -99,6 +98,7 @@ DEFINE_BITFIELD(clothing_flags, list( "THICKMATERIAL" = THICKMATERIAL, "VOICEBOX_DISABLED" = VOICEBOX_DISABLED, "VOICEBOX_TOGGLABLE" = VOICEBOX_TOGGLABLE, + "INTERNALS_ADJUST_EXEMPT" = INTERNALS_ADJUST_EXEMPT, )) DEFINE_BITFIELD(datum_flags, list( @@ -339,6 +339,19 @@ DEFINE_BITFIELD(vis_flags, list( "VIS_UNDERLAY" = VIS_UNDERLAY, )) +// I am so sorry. Required because vis_flags is both undefinable and unreadable on mutable_appearance +// But we need to display them anyway. See /mutable_appearance/appearance_mirror +DEFINE_BITFIELD(_vis_flags, list( + "VIS_HIDE" = VIS_HIDE, + "VIS_INHERIT_DIR" = VIS_INHERIT_DIR, + "VIS_INHERIT_ICON" = VIS_INHERIT_ICON, + "VIS_INHERIT_ICON_STATE" = VIS_INHERIT_ICON_STATE, + "VIS_INHERIT_ID" = VIS_INHERIT_ID, + "VIS_INHERIT_LAYER" = VIS_INHERIT_LAYER, + "VIS_INHERIT_PLANE" = VIS_INHERIT_PLANE, + "VIS_UNDERLAY" = VIS_UNDERLAY, +)) + DEFINE_BITFIELD(zap_flags, list( "ZAP_ALLOW_DUPLICATES" = ZAP_ALLOW_DUPLICATES, "ZAP_MACHINE_EXPLOSIVE" = ZAP_MACHINE_EXPLOSIVE, @@ -377,6 +390,7 @@ DEFINE_BITFIELD(bodytype, list( "BODYTYPE_LARVA_PLACEHOLDER" = BODYTYPE_LARVA_PLACEHOLDER, "BODYTYPE_ALIEN" = BODYTYPE_ALIEN, "BODYTYPE_GOLEM" = BODYTYPE_GOLEM, + "BODYTYPE_PEG" = BODYTYPE_PEG, )) DEFINE_BITFIELD(acceptable_bodytype, list( @@ -385,6 +399,7 @@ DEFINE_BITFIELD(acceptable_bodytype, list( "BODYTYPE_LARVA_PLACEHOLDER" = BODYTYPE_LARVA_PLACEHOLDER, "BODYTYPE_ALIEN" = BODYTYPE_ALIEN, "BODYTYPE_GOLEM" = BODYTYPE_GOLEM, + "BODYTYPE_PEG" = BODYTYPE_PEG, )) DEFINE_BITFIELD(bodyshape, list( diff --git a/code/_globalvars/configuration.dm b/code/_globalvars/configuration.dm index e43d803fc4f29..5bece07319c78 100644 --- a/code/_globalvars/configuration.dm +++ b/code/_globalvars/configuration.dm @@ -11,10 +11,6 @@ GLOBAL_VAR_INIT(hub_visibility, FALSE) GLOBAL_VAR_INIT(ooc_allowed, TRUE) // used with admin verbs to disable ooc - not a config option apparently GLOBAL_VAR_INIT(dooc_allowed, TRUE) -GLOBAL_VAR_INIT(enter_allowed, TRUE) -GLOBAL_VAR_INIT(shuttle_frozen, FALSE) -GLOBAL_VAR_INIT(shuttle_left, FALSE) -GLOBAL_VAR_INIT(tinted_weldhelh, TRUE) // Debug is used exactly once (in living.dm) but is commented out in a lot of places. It is not set anywhere and only checked. diff --git a/code/_globalvars/game_modes.dm b/code/_globalvars/game_modes.dm index 8a1493e383dbc..10d923343717e 100644 --- a/code/_globalvars/game_modes.dm +++ b/code/_globalvars/game_modes.dm @@ -1,8 +1,6 @@ GLOBAL_VAR(common_report) //Contains common part of roundend report GLOBAL_VAR(survivor_report) //Contains shared survivor report for roundend report (part of personal report) - -GLOBAL_VAR_INIT(wavesecret, 0) // meteor mode, delays wave progression, terrible name GLOBAL_DATUM(start_state, /datum/station_state) // Used in round-end report /// We want reality_smash_tracker to exist only once and be accessible from anywhere. diff --git a/code/_globalvars/lists/flavor_misc.dm b/code/_globalvars/lists/flavor_misc.dm index ce4d847928988..faaabd77ba134 100644 --- a/code/_globalvars/lists/flavor_misc.dm +++ b/code/_globalvars/lists/flavor_misc.dm @@ -1,45 +1,3 @@ -//Preferences stuff - //Hairstyles -GLOBAL_LIST_EMPTY(hairstyles_list) //stores /datum/sprite_accessory/hair indexed by name -GLOBAL_LIST_EMPTY(hairstyles_male_list) //stores only hair names -GLOBAL_LIST_EMPTY(hairstyles_female_list) //stores only hair names -GLOBAL_LIST_EMPTY(facial_hairstyles_list) //stores /datum/sprite_accessory/facial_hair indexed by name -GLOBAL_LIST_EMPTY(facial_hairstyles_male_list) //stores only hair names -GLOBAL_LIST_EMPTY(facial_hairstyles_female_list) //stores only hair names -GLOBAL_LIST_EMPTY(hair_gradients_list) //stores /datum/sprite_accessory/hair_gradient indexed by name -GLOBAL_LIST_EMPTY(facial_hair_gradients_list) //stores /datum/sprite_accessory/facial_hair_gradient indexed by name - //Underwear -GLOBAL_LIST_EMPTY(underwear_list) //stores /datum/sprite_accessory/underwear indexed by name -GLOBAL_LIST_EMPTY(underwear_m) //stores only underwear name -GLOBAL_LIST_EMPTY(underwear_f) //stores only underwear name - //Undershirts -GLOBAL_LIST_EMPTY(undershirt_list) //stores /datum/sprite_accessory/undershirt indexed by name -GLOBAL_LIST_EMPTY(undershirt_m) //stores only undershirt name -GLOBAL_LIST_EMPTY(undershirt_f) //stores only undershirt name - //Socks -GLOBAL_LIST_EMPTY(socks_list) //stores /datum/sprite_accessory/socks indexed by name - //Lizard Bits (all datum lists indexed by name) -GLOBAL_LIST_EMPTY(body_markings_list) -GLOBAL_LIST_EMPTY(snouts_list) -GLOBAL_LIST_EMPTY(horns_list) -GLOBAL_LIST_EMPTY(frills_list) -GLOBAL_LIST_EMPTY(spines_list) -GLOBAL_LIST_EMPTY(tail_spines_list) -GLOBAL_LIST_EMPTY(legs_list) - - //Mutant Human bits -GLOBAL_LIST_EMPTY(tails_list_human) -GLOBAL_LIST_EMPTY(tails_list_lizard) -GLOBAL_LIST_EMPTY(tails_list_monkey) -GLOBAL_LIST_EMPTY(ears_list) -GLOBAL_LIST_EMPTY(wings_list) -GLOBAL_LIST_EMPTY(wings_open_list) -GLOBAL_LIST_EMPTY(moth_wings_list) -GLOBAL_LIST_EMPTY(moth_antennae_list) -GLOBAL_LIST_EMPTY(moth_markings_list) -GLOBAL_LIST_EMPTY(caps_list) -GLOBAL_LIST_EMPTY(pod_hair_list) - GLOBAL_LIST_INIT(color_list_ethereal, list( "Blue" = "#3399ff", "Bright Yellow" = "#ffff99", @@ -191,6 +149,7 @@ GLOBAL_LIST_INIT(scarySounds, list( 'sound/weapons/armbomb.ogg', 'sound/weapons/taser.ogg', 'sound/weapons/thudswoosh.ogg', + 'sound/weapons/shove.ogg', )) diff --git a/code/_globalvars/lists/maintenance_loot.dm b/code/_globalvars/lists/maintenance_loot.dm index 36f96bcc563e0..76c69425bf54b 100644 --- a/code/_globalvars/lists/maintenance_loot.dm +++ b/code/_globalvars/lists/maintenance_loot.dm @@ -111,7 +111,7 @@ GLOBAL_LIST_INIT(common_loot, list( //common: basic items /obj/item/stack/rods/twentyfive = 1, /obj/item/stack/sheet/iron/twenty = 1, /obj/item/stack/sheet/mineral/plasma = 1, - /obj/item/stock_parts/cell = 1, + /obj/item/stock_parts/power_store/cell = 1, //assemblies /obj/item/assembly/health = 1, @@ -133,7 +133,7 @@ GLOBAL_LIST_INIT(common_loot, list( //common: basic items /obj/item/reagent_containers/cup/rag = 1, /obj/item/reagent_containers/hypospray/medipen/pumpup = 2, /obj/item/reagent_containers/syringe = 1, - /obj/item/stock_parts/cell/lead = 1, + /obj/item/stock_parts/power_store/cell/lead = 1, /obj/item/storage/box/matches = 1, /obj/item/storage/fancy/cigarettes/dromedaryco = 1, ) = 1, @@ -205,7 +205,7 @@ GLOBAL_LIST_INIT(uncommon_loot, list(//uncommon: useful items /obj/item/seeds/kronkus = 1, /obj/item/seeds/odious_puffball = 1, /obj/item/stack/sheet/mineral/wood/fifty = 1, - /obj/item/stock_parts/cell/high = 1, + /obj/item/stock_parts/power_store/cell/high = 1, /obj/item/storage/box/clown = 1, /obj/item/weaponcrafting/receiver = 1, /obj/item/book/granter/crafting_recipe/death_sandwich = 1, diff --git a/code/_globalvars/lists/mapping.dm b/code/_globalvars/lists/mapping.dm index 45f59fb447514..a7c7584d23aad 100644 --- a/code/_globalvars/lists/mapping.dm +++ b/code/_globalvars/lists/mapping.dm @@ -132,9 +132,6 @@ GLOBAL_LIST_EMPTY(bar_areas) /// List of all the maps that have been cached for /proc/load_map GLOBAL_LIST_EMPTY(cached_maps) -/// Away missions -GLOBAL_LIST_EMPTY(vr_spawnpoints) - /// Just a list of all the area objects in the game /// Note, areas can have duplicate types GLOBAL_LIST_EMPTY(areas) diff --git a/code/_globalvars/lists/mobs.dm b/code/_globalvars/lists/mobs.dm index 4e33aa43708a2..d91eec6e1bc87 100644 --- a/code/_globalvars/lists/mobs.dm +++ b/code/_globalvars/lists/mobs.dm @@ -32,7 +32,6 @@ GLOBAL_LIST_INIT(abstract_mob_types, list( /mob/living/simple_animal/hostile/mimic, // Cannot exist if spawned without being passed an item reference /mob/living/simple_animal/hostile/retaliate, /mob/living/simple_animal/hostile, - /mob/living/simple_animal/pet, /mob/living/simple_animal/soulscythe, // As mimic, can't exist if spawned outside an item /mob/living/simple_animal, )) @@ -44,7 +43,6 @@ GLOBAL_LIST_INIT(abstract_mob_types, list( GLOBAL_LIST_EMPTY(player_list) //all mobs **with clients attached**. GLOBAL_LIST_EMPTY(keyloop_list) //as above but can be limited to boost performance GLOBAL_LIST_EMPTY(mob_list) //all mobs, including clientless -GLOBAL_LIST_EMPTY(mob_directory) //mob_id -> mob GLOBAL_LIST_EMPTY(alive_mob_list) //all alive mobs, including clientless. Excludes /mob/dead/new_player GLOBAL_LIST_EMPTY(suicided_mob_list) //contains a list of all mobs that suicided, including their associated ghosts. GLOBAL_LIST_EMPTY(drones_list) @@ -57,7 +55,6 @@ GLOBAL_LIST_EMPTY(mob_living_list) //all instances of /mob/living and subtypes GLOBAL_LIST_EMPTY(carbon_list) //all instances of /mob/living/carbon and subtypes, notably does not contain brains or simple animals GLOBAL_LIST_EMPTY(human_list) //all instances of /mob/living/carbon/human and subtypes GLOBAL_LIST_EMPTY(ai_list) -GLOBAL_LIST_EMPTY(pai_list) GLOBAL_LIST_EMPTY(available_ai_shells) GLOBAL_LIST_INIT(simple_animals, list(list(),list(),list())) // One for each AI_* status define GLOBAL_LIST_EMPTY(spidermobs) //all sentient spider mobs @@ -85,13 +82,54 @@ GLOBAL_LIST_EMPTY(revenant_relay_mobs) ///underages who have been reported to security for trying to buy things they shouldn't, so they can't spam GLOBAL_LIST_EMPTY(narcd_underages) +/// List of language prototypes to reference, assoc [type] = prototype +GLOBAL_LIST_INIT_TYPED(language_datum_instances, /datum/language, init_language_prototypes()) +/// List if all language typepaths learnable, IE, those with keys +GLOBAL_LIST_INIT(all_languages, init_all_languages()) +// /List of language prototypes to reference, assoc "name" = typepath +GLOBAL_LIST_INIT(language_types_by_name, init_language_types_by_name()) + +/proc/init_language_prototypes() + var/list/lang_list = list() + for(var/datum/language/lang_type as anything in typesof(/datum/language)) + if(!initial(lang_type.key)) + continue + + lang_list[lang_type] = new lang_type() + return lang_list -GLOBAL_LIST_EMPTY(language_datum_instances) -GLOBAL_LIST_EMPTY(all_languages) -///List of all languages ("name" = type) -GLOBAL_LIST_EMPTY(language_types_by_name) +/proc/init_all_languages() + var/list/lang_list = list() + for(var/datum/language/lang_type as anything in typesof(/datum/language)) + if(!initial(lang_type.key)) + continue + lang_list += lang_type + return lang_list -GLOBAL_LIST_EMPTY(sentient_disease_instances) +/proc/init_language_types_by_name() + var/list/lang_list = list() + for(var/datum/language/lang_type as anything in typesof(/datum/language)) + if(!initial(lang_type.key)) + continue + lang_list[initial(lang_type.name)] = lang_type + return lang_list + +/// An assoc list of species IDs to type paths +GLOBAL_LIST_INIT(species_list, init_species_list()) +/// List of all species prototypes to reference, assoc [type] = prototype +GLOBAL_LIST_INIT_TYPED(species_prototypes, /datum/species, init_species_prototypes()) + +/proc/init_species_list() + var/list/species_list = list() + for(var/datum/species/species_path as anything in subtypesof(/datum/species)) + species_list[initial(species_path.id)] = species_path + return species_list + +/proc/init_species_prototypes() + var/list/species_list = list() + for(var/species_type in subtypesof(/datum/species)) + species_list[species_type] = new species_type() + return species_list GLOBAL_LIST_EMPTY(latejoin_ai_cores) diff --git a/code/_globalvars/lists/names.dm b/code/_globalvars/lists/names.dm index c51fbaa9eb7a0..dce2dc69a50ae 100644 --- a/code/_globalvars/lists/names.dm +++ b/code/_globalvars/lists/names.dm @@ -8,12 +8,12 @@ GLOBAL_LIST_INIT(first_names, world.file2list("strings/names/first.txt")) GLOBAL_LIST_INIT(first_names_male, world.file2list("strings/names/first_male.txt")) GLOBAL_LIST_INIT(first_names_female, world.file2list("strings/names/first_female.txt")) GLOBAL_LIST_INIT(last_names, world.file2list("strings/names/last.txt")) -GLOBAL_LIST_INIT(lizard_names_male, world.file2list("strings/names/lizard_male.txt")) -GLOBAL_LIST_INIT(lizard_names_female, world.file2list("strings/names/lizard_female.txt")) GLOBAL_LIST_INIT(clown_names, world.file2list("strings/names/clown.txt")) GLOBAL_LIST_INIT(mime_names, world.file2list("strings/names/mime.txt")) GLOBAL_LIST_INIT(religion_names, world.file2list("strings/names/religion.txt")) GLOBAL_LIST_INIT(carp_names, world.file2list("strings/names/carp.txt")) +GLOBAL_LIST_INIT(lizard_names_male, world.file2list("strings/names/lizard_male.txt")) +GLOBAL_LIST_INIT(lizard_names_female, world.file2list("strings/names/lizard_female.txt")) GLOBAL_LIST_INIT(golem_names, world.file2list("strings/names/golem.txt")) GLOBAL_LIST_INIT(moth_first, world.file2list("strings/names/moth_first.txt")) GLOBAL_LIST_INIT(moth_last, world.file2list("strings/names/moth_last.txt")) @@ -24,6 +24,7 @@ GLOBAL_LIST_INIT(nightmare_names, world.file2list("strings/names/nightmare.txt") GLOBAL_LIST_INIT(megacarp_first_names, world.file2list("strings/names/megacarp1.txt")) GLOBAL_LIST_INIT(megacarp_last_names, world.file2list("strings/names/megacarp2.txt")) GLOBAL_LIST_INIT(cyberauth_names, world.file2list("strings/names/cyberauth.txt")) +GLOBAL_LIST_INIT(hacker_aliases, world.file2list("strings/names/hackers.txt")) GLOBAL_LIST_INIT(syndicate_monkey_names, world.file2list("strings/names/syndicate_monkey.txt")) GLOBAL_LIST_INIT(cargorilla_names, world.file2list("strings/names/cargorilla.txt")) GLOBAL_LIST_INIT(guardian_first_names, world.file2list("strings/names/guardian_descriptions.txt")) diff --git a/code/_globalvars/lists/objects.dm b/code/_globalvars/lists/objects.dm index 1d53a499322d3..0e5f7feb75247 100644 --- a/code/_globalvars/lists/objects.dm +++ b/code/_globalvars/lists/objects.dm @@ -31,8 +31,7 @@ GLOBAL_LIST_EMPTY(deliverybeacontags) /// List of all singularity components that exist GLOBAL_LIST_EMPTY_TYPED(singularities, /datum/component/singularity) -/// list of all /datum/tech datums indexed by id. -GLOBAL_LIST_EMPTY(tech_list) +GLOBAL_LIST_EMPTY(item_to_design_list) /// list of all surgeries by name, associated with their path. GLOBAL_LIST_INIT(surgeries_list, init_surgeries()) diff --git a/code/_globalvars/lists/quirks.dm b/code/_globalvars/lists/quirks.dm index 4ce15f2e09e12..22ef830ea773d 100644 --- a/code/_globalvars/lists/quirks.dm +++ b/code/_globalvars/lists/quirks.dm @@ -11,7 +11,7 @@ GLOBAL_LIST_INIT(nearsighted_glasses, list( )) ///Options for the prosthetic limb quirk to choose from -GLOBAL_LIST_INIT(limb_choice, list( +GLOBAL_LIST_INIT(prosthetic_limb_choice, list( "Left Arm" = /obj/item/bodypart/arm/left/robot/surplus, "Right Arm" = /obj/item/bodypart/arm/right/robot/surplus, "Left Leg" = /obj/item/bodypart/leg/left/robot/surplus, @@ -45,7 +45,7 @@ GLOBAL_LIST_INIT(possible_junkie_addictions, setup_junkie_addictions(list( ))) ///Options for the Smoker quirk to choose from -GLOBAL_LIST_INIT(possible_smoker_addictions, setup_junkie_addictions(list( +GLOBAL_LIST_INIT(possible_smoker_addictions, setup_smoker_addictions(list( /obj/item/storage/fancy/cigarettes, /obj/item/storage/fancy/cigarettes/cigpack_midori, /obj/item/storage/fancy/cigarettes/cigpack_uplift, diff --git a/code/_globalvars/logging.dm b/code/_globalvars/logging.dm index fc6919c3a3b86..3100456691011 100644 --- a/code/_globalvars/logging.dm +++ b/code/_globalvars/logging.dm @@ -33,7 +33,7 @@ GLOBAL_PROTECT(##log_var_name);\ DECLARE_LOG(config_error_log, DONT_START_LOG) DECLARE_LOG(perf_log, DONT_START_LOG) // Declared here but name is set in time_track subsystem -#ifdef REFERENCE_DOING_IT_LIVE +#ifdef REFERENCE_TRACKING_LOG_APART DECLARE_LOG_NAMED(harddel_log, "harddels", START_LOG) #endif diff --git a/code/_globalvars/phobias.dm b/code/_globalvars/phobias.dm index ea1d939351ddb..131e530ce82ac 100644 --- a/code/_globalvars/phobias.dm +++ b/code/_globalvars/phobias.dm @@ -245,7 +245,7 @@ GLOBAL_LIST_INIT(phobia_objs, list( /obj/item/clothing/suit/hooded/carp_costume, /obj/item/clothing/head/fedora/carpskin, /obj/item/clothing/mask/gas/carp, - /obj/item/clothing/mask/cigarette/carp, + /obj/item/cigarette/carp, /obj/item/clothing/under/suit/carpskin, /obj/item/food/cubancarp, /obj/item/food/fishmeat/carp, @@ -492,7 +492,6 @@ GLOBAL_LIST_INIT(phobia_objs, list( /obj/item/clothing/suit/wizrobe, /obj/item/clothing/under/rank/civilian/chaplain, /obj/item/codex_cicatrix, - /obj/item/cult_bastard, /obj/item/gun/magic, /obj/item/melee/cultblade, /obj/item/melee/rune_carver, diff --git a/code/_globalvars/traits/_traits.dm b/code/_globalvars/traits/_traits.dm index dd0c89c2211c8..3696f42e77783 100644 --- a/code/_globalvars/traits/_traits.dm +++ b/code/_globalvars/traits/_traits.dm @@ -56,6 +56,7 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_NO_MISSING_ITEM_ERROR" = TRAIT_NO_MISSING_ITEM_ERROR, "TRAIT_NO_THROW_HITPUSH" = TRAIT_NO_THROW_HITPUSH, "TRAIT_NOT_ENGRAVABLE" = TRAIT_NOT_ENGRAVABLE, + "TRAIT_SPELLS_TRANSFER_TO_LOC" = TRAIT_SPELLS_TRANSFER_TO_LOC, "TRAIT_ODD_CUSTOMIZABLE_FOOD_INGREDIENT" = TRAIT_ODD_CUSTOMIZABLE_FOOD_INGREDIENT, "TRAIT_RUNECHAT_HIDDEN" = TRAIT_RUNECHAT_HIDDEN, "TRAIT_SECLUDED_LOCATION" = TRAIT_SECLUDED_LOCATION, @@ -79,6 +80,7 @@ GLOBAL_LIST_INIT(traits_by_type, list( "STATION_TRAIT_BIGGER_PODS" = STATION_TRAIT_BIGGER_PODS, "STATION_TRAIT_BIRTHDAY" = STATION_TRAIT_BIRTHDAY, "STATION_TRAIT_BOTS_GLITCHED" = STATION_TRAIT_BOTS_GLITCHED, + "STATION_TRAIT_BRIGHT_DAY" = STATION_TRAIT_BRIGHT_DAY, "STATION_TRAIT_CARP_INFESTATION" = STATION_TRAIT_CARP_INFESTATION, "STATION_TRAIT_CYBERNETIC_REVOLUTION" = STATION_TRAIT_CYBERNETIC_REVOLUTION, "STATION_TRAIT_EMPTY_MAINT" = STATION_TRAIT_EMPTY_MAINT, @@ -137,14 +139,20 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_BALD" = TRAIT_BALD, "TRAIT_BALLOON_SUTRA" = TRAIT_BALLOON_SUTRA, "TRAIT_BATON_RESISTANCE" = TRAIT_BATON_RESISTANCE, + "TRAIT_BEAST_EMPATHY" = TRAIT_BEAST_EMPATHY, "TRAIT_BEING_BLADE_SHIELDED" = TRAIT_BEING_BLADE_SHIELDED, + "TRAIT_BIRTHDAY_BOY" = TRAIT_BIRTHDAY_BOY, "TRAIT_BLOB_ALLY" = TRAIT_BLOB_ALLY, + "TRAIT_BLOCK_SHUTTLE_MOVEMENT" = TRAIT_BLOCK_SHUTTLE_MOVEMENT, + "TRAIT_BLOOD_CLANS" = TRAIT_BLOOD_CLANS, "TRAIT_BLOODSHOT_EYES" = TRAIT_BLOODSHOT_EYES, "TRAIT_BLOODY_MESS" = TRAIT_BLOODY_MESS, - "TRAIT_BLOOD_CLANS" = TRAIT_BLOOD_CLANS, "TRAIT_BOMBIMMUNE" = TRAIT_BOMBIMMUNE, "TRAIT_BONSAI" = TRAIT_BONSAI, "TRAIT_BOOZE_SLIDER" = TRAIT_BOOZE_SLIDER, + "TRAIT_BOXING_READY" = TRAIT_BOXING_READY, + "TRAIT_BORN_MONKEY" = TRAIT_BORN_MONKEY, + "TRAIT_BOXING_READY" = TRAIT_BOXING_READY, "TRAIT_BRAINWASHING" = TRAIT_BRAINWASHING, "TRAIT_BRAWLING_KNOCKDOWN_BLOCKED" = TRAIT_BRAWLING_KNOCKDOWN_BLOCKED, "TRAIT_BYPASS_EARLY_IRRADIATED_CHECK" = TRAIT_BYPASS_EARLY_IRRADIATED_CHECK, @@ -176,13 +184,15 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_DEATHCOMA" = TRAIT_DEATHCOMA, "TRAIT_DEFIB_BLACKLISTED" = TRAIT_DEFIB_BLACKLISTED, "TRAIT_DEPRESSION" = TRAIT_DEPRESSION, + "TRAIT_DETECTIVES_TASTE" = TRAIT_DETECTIVES_TASTE, "TRAIT_DETECT_STORM" = TRAIT_DETECT_STORM, "TRAIT_DIAGNOSTIC_HUD" = TRAIT_DIAGNOSTIC_HUD, "TRAIT_DISCOORDINATED_TOOL_USER" = TRAIT_DISCOORDINATED_TOOL_USER, "TRAIT_DISEASELIKE_SEVERITY_MEDIUM" = TRAIT_DISEASELIKE_SEVERITY_MEDIUM, "TRAIT_DISFIGURED" = TRAIT_DISFIGURED, "TRAIT_DISGUISED" = TRAIT_DISGUISED, - "DISPLAYS_JOB_IN_BINARY" = DISPLAYS_JOB_IN_BINARY, + "TRAIT_DISPLAY_JOB_IN_BINARY" = TRAIT_DISPLAY_JOB_IN_BINARY, + "TRAIT_DISCO_DANCER" = TRAIT_DISCO_DANCER, "TRAIT_DISK_VERIFIER" = TRAIT_DISK_VERIFIER, "TRAIT_DISSECTED" = TRAIT_DISSECTED, "TRAIT_DONT_WRITE_MEMORY" = TRAIT_DONT_WRITE_MEMORY, @@ -203,7 +213,9 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_EMPATH" = TRAIT_EMPATH, "TRAIT_ENTRAILS_READER" = TRAIT_ENTRAILS_READER, "TRAIT_EXAMINE_FISHING_SPOT" = TRAIT_EXAMINE_FISHING_SPOT, + "TRAIT_EXAMINE_FITNESS" = TRAIT_EXAMINE_FITNESS, "TRAIT_EXPANDED_FOV" = TRAIT_EXPANDED_FOV, + "TRAIT_EXPERT_FISHER" = TRAIT_EXPERT_FISHER, "TRAIT_EXTROVERT" = TRAIT_EXTROVERT, "TRAIT_FAKEDEATH" = TRAIT_FAKEDEATH, "TRAIT_FASTMED" = TRAIT_FASTMED, @@ -244,7 +256,6 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_HARDLY_WOUNDED" = TRAIT_HARDLY_WOUNDED, "TRAIT_HAS_BEEN_KIDNAPPED" = TRAIT_HAS_BEEN_KIDNAPPED, "TRAIT_HAS_CRANIAL_FISSURE" = TRAIT_HAS_CRANIAL_FISSURE, - "TRAIT_HAS_MARKINGS" = TRAIT_HAS_MARKINGS, "TRAIT_HATED_BY_DOGS" = TRAIT_HATED_BY_DOGS, "TRAIT_HEAD_INJURY_BLOCKED" = TRAIT_HEAD_INJURY_BLOCKED, "TRAIT_HEALS_FROM_CARP_RIFTS" = TRAIT_HEALS_FROM_CARP_RIFTS, @@ -284,18 +295,23 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_LITERATE" = TRAIT_LITERATE, "TRAIT_LIVERLESS_METABOLISM" = TRAIT_LIVERLESS_METABOLISM, "TRAIT_MADNESS_IMMUNE" = TRAIT_MADNESS_IMMUNE, + "TRAIT_MAFIAINITIATE" = TRAIT_MAFIAINITIATE, "TRAIT_MAGICALLY_GIFTED" = TRAIT_MAGICALLY_GIFTED, "TRAIT_MAGICALLY_PHASED" = TRAIT_MAGICALLY_PHASED, "TRAIT_MARTIAL_ARTS_IMMUNE" = TRAIT_MARTIAL_ARTS_IMMUNE, + "TRAIT_MANSUS_TOUCHED" = TRAIT_MANSUS_TOUCHED, "TRAIT_MEDIBOTCOMINGTHROUGH" = TRAIT_MEDIBOTCOMINGTHROUGH, "TRAIT_MEDICAL_HUD" = TRAIT_MEDICAL_HUD, "TRAIT_MESON_VISION" = TRAIT_MESON_VISION, "TRAIT_MIME_FAN" = TRAIT_MIME_FAN, "TRAIT_MIMING" = TRAIT_MIMING, + "TRAIT_MIND_READER" = TRAIT_MIND_READER, "TRAIT_MINDSHIELD" = TRAIT_MINDSHIELD, "TRAIT_MIND_TEMPORARILY_GONE" = TRAIT_MIND_TEMPORARILY_GONE, "TRAIT_MOB_BREEDER" = TRAIT_MOB_BREEDER, "TRAIT_MOB_EATER" = TRAIT_MOB_EATER, + "TRAIT_MOB_HATCHED" = TRAIT_MOB_HATCHED, + "TRAIT_MOB_RELAY_HAPPINESS" = TRAIT_MOB_RELAY_HAPPINESS, "TRAIT_MOB_TIPPED" = TRAIT_MOB_TIPPED, "TRAIT_MORBID" = TRAIT_MORBID, "TRAIT_MULTIZ_SUIT_SENSORS" = TRAIT_MULTIZ_SUIT_SENSORS, @@ -351,6 +367,7 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_NO_TWOHANDING" = TRAIT_NO_TWOHANDING, "TRAIT_NO_UNDERWEAR" = TRAIT_NO_UNDERWEAR, "TRAIT_NO_ZOMBIFY" = TRAIT_NO_ZOMBIFY, + "TRAIT_HIPPOCRATIC_OATH" = TRAIT_HIPPOCRATIC_OATH, "TRAIT_NUKEIMMUNE" = TRAIT_NUKEIMMUNE, "TRAIT_OFF_BALANCE_TACKLER" = TRAIT_OFF_BALANCE_TACKLER, "TRAIT_OIL_FRIED" = TRAIT_OIL_FRIED, @@ -368,6 +385,7 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_PARROT_PERCHED" = TRAIT_PARROT_PERCHED, "TRAIT_PASSTABLE" = TRAIT_PASSTABLE, "TRAIT_PASSWINDOW" = TRAIT_PASSWINDOW, + "TRAIT_PERCEIVED_AS_CLOWN" = TRAIT_PERCEIVED_AS_CLOWN, "TRAIT_PERFECT_ATTACKER" = TRAIT_PERFECT_ATTACKER, "TRAIT_PERMANENTLY_MORTAL" = TRAIT_PERMANENTLY_MORTAL, "TRAIT_PHOTOGRAPHER" = TRAIT_PHOTOGRAPHER, @@ -379,6 +397,7 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_PRESERVE_UI_WITHOUT_CLIENT" = TRAIT_PRESERVE_UI_WITHOUT_CLIENT, "TRAIT_PREVENT_IMPLANT_AUTO_EXPLOSION" = TRAIT_PREVENT_IMPLANT_AUTO_EXPLOSION, "TRAIT_PRIMITIVE" = TRAIT_PRIMITIVE, //unable to use mechs. Given to Ash Walkers + "TRAIT_PROFOUND_FISHER" = TRAIT_PROFOUND_FISHER, "TRAIT_PROSOPAGNOSIA" = TRAIT_PROSOPAGNOSIA, "TRAIT_PULL_BLOCKED" = TRAIT_PULL_BLOCKED, "TRAIT_PUSHIMMUNE" = TRAIT_PUSHIMMUNE, @@ -407,9 +426,10 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_ROCK_METAMORPHIC" = TRAIT_ROCK_METAMORPHIC, "TRAIT_ROCK_STONER" = TRAIT_ROCK_STONER, "TRAIT_ROD_SUPLEX" = TRAIT_ROD_SUPLEX, + "TRAIT_ROUGHRIDER" = TRAIT_ROUGHRIDER, "TRAIT_SABRAGE_PRO" = TRAIT_SABRAGE_PRO, "TRAIT_SECURITY_HUD" = TRAIT_SECURITY_HUD, - "TRAIT_SEE_GLASS_COLORS" = TRAIT_SEE_GLASS_COLORS, + "TRAIT_SEE_WORN_COLOURS" = TRAIT_SEE_WORN_COLOURS, "TRAIT_SELF_AWARE" = TRAIT_SELF_AWARE, "TRAIT_SETTLER" = TRAIT_SETTLER, "TRAIT_SHAVED" = TRAIT_SHAVED, @@ -435,10 +455,14 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_STABLEHEART" = TRAIT_STABLEHEART, "TRAIT_STABLELIVER" = TRAIT_STABLELIVER, "TRAIT_STASIS" = TRAIT_STASIS, + "TRAIT_STIMMED" = TRAIT_STIMMED, "TRAIT_STIMULATED" = TRAIT_STIMULATED, + "TRAIT_STRENGTH" = TRAIT_STRENGTH, "TRAIT_STRONG_GRABBER" = TRAIT_STRONG_GRABBER, "TRAIT_STRONG_STOMACH" = TRAIT_STRONG_STOMACH, + "TRAIT_STUBBY_BODY" = TRAIT_STUBBY_BODY, "TRAIT_STUNIMMUNE" = TRAIT_STUNIMMUNE, + "TRAIT_STURDY_FRAME" = TRAIT_STURDY_FRAME, "TRAIT_SUCCUMB_OVERRIDE" = TRAIT_SUCCUMB_OVERRIDE, "TRAIT_SUICIDED" = TRAIT_SUICIDED, "TRAIT_SUPERMATTER_SOOTHER" = TRAIT_SUPERMATTER_SOOTHER, @@ -457,6 +481,7 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_THINKING_IN_CHARACTER" = TRAIT_THINKING_IN_CHARACTER, "TRAIT_THROWINGARM" = TRAIT_THROWINGARM, "TRAIT_TIME_STOP_IMMUNE" = TRAIT_TIME_STOP_IMMUNE, + "TRAIT_TOO_TALL" = TRAIT_TOO_TALL, "TRAIT_TOWER_OF_BABEL" = TRAIT_TOWER_OF_BABEL, "TRAIT_TOXIMMUNE" = TRAIT_TOXIMMUNE, "TRAIT_TOXINLOVER" = TRAIT_TOXINLOVER, @@ -489,20 +514,17 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_WINE_TASTER" = TRAIT_WINE_TASTER, "TRAIT_WING_BUFFET" = TRAIT_WING_BUFFET, "TRAIT_WING_BUFFET_TIRED" = TRAIT_WING_BUFFET_TIRED, + "TRAIT_WOUND_LICKER" = TRAIT_WOUND_LICKER, "TRAIT_XENO_HOST" = TRAIT_XENO_HOST, "TRAIT_XENO_IMMUNE" = TRAIT_XENO_IMMUNE, "TRAIT_XRAY_HEARING" = TRAIT_XRAY_HEARING, "TRAIT_XRAY_VISION" = TRAIT_XRAY_VISION, - "TRAIT_DISCO_DANCER" = TRAIT_DISCO_DANCER, - "TRAIT_MAFIAINITIATE" = TRAIT_MAFIAINITIATE, - "TRAIT_STRENGTH" = TRAIT_STRENGTH, - "TRAIT_STIMMED" = TRAIT_STIMMED, - "TRAIT_BOXING_READY" = TRAIT_BOXING_READY, ), /obj/item = list( "TRAIT_APC_SHOCKING" = TRAIT_APC_SHOCKING, "TRAIT_BASIC_QUALITY_BAIT" = TRAIT_BASIC_QUALITY_BAIT, "TRAIT_BLIND_TOOL" = TRAIT_BLIND_TOOL, + "TRAIT_BYPASS_RANGED_ARMOR" = TRAIT_BYPASS_RANGED_ARMOR, "TRAIT_CUSTOM_TAP_SOUND" = TRAIT_CUSTOM_TAP_SOUND, "TRAIT_DANGEROUS_OBJECT" = TRAIT_DANGEROUS_OBJECT, "TRAIT_FISHING_BAIT" = TRAIT_FISHING_BAIT, @@ -512,10 +534,12 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_HAUNTED" = TRAIT_HAUNTED, "TRAIT_HONKSPAMMING" = TRAIT_HONKSPAMMING, "TRAIT_INNATELY_FANTASTICAL_ITEM" = TRAIT_INNATELY_FANTASTICAL_ITEM, + "TRAIT_ITEM_OBJECTIVE_BLOCKED" = TRAIT_ITEM_OBJECTIVE_BLOCKED, "TRAIT_NEEDS_TWO_HANDS" = TRAIT_NEEDS_TWO_HANDS, "TRAIT_NO_BARCODES" = TRAIT_NO_BARCODES, "TRAIT_NO_STORAGE_INSERT" = TRAIT_NO_STORAGE_INSERT, "TRAIT_NO_TELEPORT" = TRAIT_NO_TELEPORT, + "TRAIT_NO_SIDE_KICK" = TRAIT_NO_SIDE_KICK, "TRAIT_NODROP" = TRAIT_NODROP, "TRAIT_OMNI_BAIT" = TRAIT_OMNI_BAIT, "TRAIT_PLANT_WILDMUTATE" = TRAIT_PLANT_WILDMUTATE, @@ -537,6 +561,9 @@ GLOBAL_LIST_INIT(traits_by_type, list( /obj/item/bodypart = list( "TRAIT_PARALYSIS" = TRAIT_PARALYSIS, ), + /obj/item/bodypart = list( + "TRAIT_EASY_ATTACH" = TRAIT_EASY_ATTACH, + ), /obj/item/card/id = list( "TRAIT_JOB_FIRST_ID_CARD" = TRAIT_JOB_FIRST_ID_CARD, "TRAIT_MAGNETIC_ID_CARD" = TRAIT_MAGNETIC_ID_CARD, @@ -554,6 +581,7 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_FISH_NO_MATING" = TRAIT_FISH_NO_MATING, "TRAIT_FISH_SELF_REPRODUCE" = TRAIT_FISH_SELF_REPRODUCE, "TRAIT_FISH_TOXIN_IMMUNE" = TRAIT_FISH_TOXIN_IMMUNE, + "TRAIT_FISH_ELECTROGENESIS" = TRAIT_FISH_ELECTROGENESIS, "TRAIT_RESIST_EMULSIFY" = TRAIT_RESIST_EMULSIFY, "TRAIT_YUCKY_FISH" = TRAIT_YUCKY_FISH, ), @@ -612,6 +640,7 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_TURF_IGNORE_SLIPPERY" = TRAIT_TURF_IGNORE_SLIPPERY, "TRAIT_TURF_IGNORE_SLOWDOWN" = TRAIT_TURF_IGNORE_SLOWDOWN, "TRAIT_ELEVATED_TURF" = TRAIT_ELEVATED_TURF, + "TRAIT_FISHING_SPOT" = TRAIT_FISHING_SPOT, ), )) diff --git a/code/_globalvars/traits/admin_tooling.dm b/code/_globalvars/traits/admin_tooling.dm index c122dd1ce2e34..e29a140bfe03a 100644 --- a/code/_globalvars/traits/admin_tooling.dm +++ b/code/_globalvars/traits/admin_tooling.dm @@ -36,6 +36,8 @@ GLOBAL_LIST_INIT(admin_visible_traits, list( "TRAIT_BADTOUCH" = TRAIT_BADTOUCH, "TRAIT_BALD" = TRAIT_BALD, "TRAIT_BATON_RESISTANCE" = TRAIT_BATON_RESISTANCE, + "TRAIT_BEAST_EMPATHY" = TRAIT_BEAST_EMPATHY, + "TRAIT_BLOCK_SHUTTLE_MOVEMENT" = TRAIT_BLOCK_SHUTTLE_MOVEMENT, "TRAIT_BLOOD_CLANS" = TRAIT_BLOOD_CLANS, "TRAIT_BLOODSHOT_EYES" = TRAIT_BLOODSHOT_EYES, "TRAIT_BOMBIMMUNE" = TRAIT_BOMBIMMUNE, @@ -69,7 +71,9 @@ GLOBAL_LIST_INIT(admin_visible_traits, list( "TRAIT_EASYDISMEMBER" = TRAIT_EASYDISMEMBER, "TRAIT_EMOTEMUTE " = TRAIT_EMOTEMUTE, "TRAIT_EMPATH" = TRAIT_EMPATH, + "TRAIT_EXAMINE_FITNESS" = TRAIT_EXAMINE_FITNESS, "TRAIT_EXPANDED_FOV" = TRAIT_EXPANDED_FOV, + "TRAIT_EXPERT_FISHER" = TRAIT_EXPERT_FISHER, "TRAIT_FAKEDEATH" = TRAIT_FAKEDEATH, "TRAIT_FAST_CUFFING" = TRAIT_FAST_CUFFING, "TRAIT_FAT" = TRAIT_FAT, @@ -92,7 +96,6 @@ GLOBAL_LIST_INIT(admin_visible_traits, list( "TRAIT_GUNFLIP" = TRAIT_GUNFLIP, "TRAIT_HANDS_BLOCKED" = TRAIT_HANDS_BLOCKED, "TRAIT_HARDLY_WOUNDED" = TRAIT_HARDLY_WOUNDED, - "TRAIT_HAS_MARKINGS" = TRAIT_HAS_MARKINGS, "TRAIT_HEAVY_SLEEPER" = TRAIT_HEAVY_SLEEPER, "TRAIT_HIDE_EXTERNAL_ORGANS" = TRAIT_HIDE_EXTERNAL_ORGANS, "TRAIT_HOLY" = TRAIT_HOLY, @@ -160,6 +163,7 @@ GLOBAL_LIST_INIT(admin_visible_traits, list( "TRAIT_OIL_FRIED" = TRAIT_OIL_FRIED, "TRAIT_OVERWATCH_IMMUNE" = TRAIT_OVERWATCH_IMMUNE, "TRAIT_PACIFISM" = TRAIT_PACIFISM, + "TRAIT_HIPPOCRATIC_OATH" = TRAIT_HIPPOCRATIC_OATH, "TRAIT_PAPER_MASTER" = TRAIT_PAPER_MASTER, "TRAIT_PARALYSIS_L_ARM" = TRAIT_PARALYSIS_L_ARM, "TRAIT_PARALYSIS_L_LEG" = TRAIT_PARALYSIS_L_LEG, @@ -187,6 +191,7 @@ GLOBAL_LIST_INIT(admin_visible_traits, list( "TRAIT_RESISTHIGHPRESSURE" = TRAIT_RESISTHIGHPRESSURE, "TRAIT_RESISTLOWPRESSURE" = TRAIT_RESISTLOWPRESSURE, "TRAIT_RESTRAINED" = TRAIT_RESTRAINED, + "TRAIT_ROUGHRIDER" = TRAIT_ROUGHRIDER, "TRAIT_SECURITY_HUD" = TRAIT_SECURITY_HUD, "TRAIT_SELF_AWARE" = TRAIT_SELF_AWARE, "TRAIT_SETTLER" = TRAIT_SETTLER, @@ -207,7 +212,9 @@ GLOBAL_LIST_INIT(admin_visible_traits, list( "TRAIT_STABLELIVER" = TRAIT_STABLELIVER, "TRAIT_STRONG_GRABBER" = TRAIT_STRONG_GRABBER, "TRAIT_STRONG_STOMACH" = TRAIT_STRONG_STOMACH, + "TRAIT_STUBBY_BODY" = TRAIT_STUBBY_BODY, "TRAIT_STUNIMMUNE" = TRAIT_STUNIMMUNE, + "TRAIT_STURDY_FRAME" = TRAIT_STURDY_FRAME, "TRAIT_SURGEON" = TRAIT_SURGEON, "TRAIT_SURGICALLY_ANALYZED" = TRAIT_SURGICALLY_ANALYZED, "TRAIT_TAGGER" = TRAIT_TAGGER, @@ -231,6 +238,7 @@ GLOBAL_LIST_INIT(admin_visible_traits, list( "TRAIT_USES_SKINTONES" = TRAIT_USES_SKINTONES, "TRAIT_VIRUSIMMUNE" = TRAIT_VIRUSIMMUNE, "TRAIT_VORACIOUS" = TRAIT_VORACIOUS, + "TRAIT_WOUND_LICKER" = TRAIT_WOUND_LICKER, "TRAIT_WEAK_SOUL" = TRAIT_WEAK_SOUL, "TRAIT_WEB_SURFER" = TRAIT_WEB_SURFER, "TRAIT_WEB_WEAVER" = TRAIT_WEB_WEAVER, diff --git a/code/_onclick/ai.dm b/code/_onclick/ai.dm index 93a19ae0219ee..ec76dee9c8e22 100644 --- a/code/_onclick/ai.dm +++ b/code/_onclick/ai.dm @@ -150,6 +150,7 @@ return /atom/proc/ai_click_alt(mob/living/silicon/ai/user) + SHOULD_CALL_PARENT(FALSE) return /atom/proc/AIShiftClick(mob/living/silicon/ai/user) @@ -168,12 +169,13 @@ /obj/machinery/door/airlock/ai_click_alt(mob/living/silicon/ai/user) if(obj_flags & EMAGGED) - return + return NONE if(!secondsElectrified) shock_perm(user) else shock_restore(user) + return CLICK_ACTION_SUCCESS /obj/machinery/door/airlock/AIShiftClick(mob/living/silicon/ai/user) // Opens and closes doors! if(obj_flags & EMAGGED) @@ -237,10 +239,10 @@ /// Toggle APC equipment settings /obj/machinery/power/apc/ai_click_alt(mob/living/silicon/ai/user) if(!can_use(user, loud = TRUE)) - return + return NONE if(!is_operational || failure_timer) - return + return CLICK_ACTION_BLOCKING equipment = equipment ? APC_CHANNEL_OFF : APC_CHANNEL_ON if (user) @@ -250,19 +252,19 @@ user.log_message("turned [enabled_or_disabled] the [src] equipment settings", LOG_GAME) update_appearance() update() + return CLICK_ACTION_SUCCESS /obj/machinery/power/apc/attack_ai_secondary(mob/living/silicon/user, list/modifiers) - if(!can_use(user, loud = TRUE)) - return - - togglelock(user) + if(can_use(user, loud = TRUE)) + togglelock(user) return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN /* AI Turrets */ /obj/machinery/turretid/ai_click_alt(mob/living/silicon/ai/user) //toggles lethal on turrets if(ailock) - return + return CLICK_ACTION_BLOCKING toggle_lethal(user) + return CLICK_ACTION_SUCCESS /obj/machinery/turretid/AICtrlClick(mob/living/silicon/ai/user) //turns off/on Turrets if(ailock) @@ -275,6 +277,7 @@ balloon_alert(user, "disrupted all active calls") add_hiddenprint(user) hangup_all_calls() + return CLICK_ACTION_SUCCESS // // Override TurfAdjacent for AltClicking diff --git a/code/_onclick/click.dm b/code/_onclick/click.dm index eecad5c7522c2..1d7e07f7b9912 100644 --- a/code/_onclick/click.dm +++ b/code/_onclick/click.dm @@ -53,11 +53,10 @@ /** * Standard mob ClickOn() - * Handles exceptions: Buildmode, middle click, modified clicks, mech actions * * After that, mostly just check your state, check whether you're holding an item, - * check whether you're adjacent to the target, then pass off the click to whoever - * is receiving it. + * check whether you're adjacent to the target, then pass off the click to whoever is receiving it. + * * The most common are: * * [mob/proc/UnarmedAttack] (atom,adjacent) - used here only when adjacent, with no item in hand; in the case of humans, checks gloves * * [atom/proc/attackby] (item,user) - used only when adjacent @@ -94,9 +93,9 @@ return if(LAZYACCESS(modifiers, ALT_CLICK)) // alt and alt-gr (rightalt) if(LAZYACCESS(modifiers, RIGHT_CLICK)) - alt_click_on_secondary(A) + AltClickSecondaryOn(A) else - base_click_alt(A) + AltClickOn(A) return if(LAZYACCESS(modifiers, CTRL_CLICK)) CtrlClickOn(A) @@ -167,13 +166,7 @@ UnarmedAttack(A, TRUE, modifiers) else if(W) - if(LAZYACCESS(modifiers, RIGHT_CLICK)) - var/after_attack_secondary_result = W.afterattack_secondary(A, src, FALSE, params) - - if(after_attack_secondary_result == SECONDARY_ATTACK_CALL_NORMAL) - W.afterattack(A, src, FALSE, params) - else - W.afterattack(A, src, FALSE, params) + A.base_ranged_item_interaction(src, W, modifiers) else if(LAZYACCESS(modifiers, RIGHT_CLICK)) ranged_secondary_attack(A, modifiers) @@ -204,7 +197,7 @@ * A backwards depth-limited breadth-first-search to see if the target is * logically "in" anything adjacent to us. */ -/atom/movable/proc/CanReach(atom/ultimate_target, obj/item/tool, view_only = FALSE) +/atom/proc/CanReach(atom/ultimate_target, obj/item/tool, view_only = FALSE) var/list/direct_access = DirectAccess() var/depth = 1 + (view_only ? STORAGE_VIEW_DEPTH : INVENTORY_DEPTH) @@ -232,9 +225,13 @@ next += target.loc checking = next + + if(SEND_SIGNAL(src, COMSIG_ATOM_CANREACH, ultimate_target) & COMPONENT_ALLOW_REACH) + return TRUE + return FALSE -/atom/movable/proc/DirectAccess() +/atom/proc/DirectAccess() return list(src, loc) /mob/DirectAccess(atom/target) @@ -341,89 +338,20 @@ return /atom/proc/ShiftClick(mob/user) + SEND_SIGNAL(src, COMSIG_SHIFT_CLICKED_ON, user) var/flags = SEND_SIGNAL(user, COMSIG_CLICK_SHIFT, src) if(flags & COMSIG_MOB_CANCEL_CLICKON) return if(user.client && (user.client.eye == user || user.client.eye == user.loc || flags & COMPONENT_ALLOW_EXAMINATE)) user.examinate(src) -/** - * Ctrl click - * For most objects, pull - */ -/mob/proc/CtrlClickOn(atom/A) - A.CtrlClick(src) - return - -/atom/proc/CtrlClick(mob/user) - SEND_SIGNAL(src, COMSIG_CLICK_CTRL, user) - SEND_SIGNAL(user, COMSIG_MOB_CTRL_CLICKED, src) - - var/mob/living/ML = user - if(istype(ML)) - ML.pulled(src) - if(!can_interact(user)) - return FALSE - -/mob/living/CtrlClick(mob/living/user) - if(!isliving(user) || !user.CanReach(src) || user.incapacitated()) - return ..() - - if(world.time < user.next_move) - return FALSE - - if(user.grab(src)) - user.changeNext_move(CLICK_CD_MELEE) - return TRUE - - return ..() - -/mob/proc/CtrlMiddleClickOn(atom/A) - if(check_rights_for(client, R_ADMIN)) - client.toggle_tag_datum(A) - else - A.CtrlClick(src) - return - - -///The base proc of when something is right clicked on when alt is held - generally use alt_click_secondary instead -/atom/proc/alt_click_on_secondary(atom/A) - . = SEND_SIGNAL(src, COMSIG_MOB_ALTCLICKON_SECONDARY, A) - if(. & COMSIG_MOB_CANCEL_CLICKON) - return - A.alt_click_secondary(src) - -///The base proc of when something is right clicked on when alt is held -/atom/proc/alt_click_secondary(mob/user) - if(!user.can_interact_with(src)) - return FALSE - if(SEND_SIGNAL(src, COMSIG_CLICK_ALT_SECONDARY, user) & COMPONENT_CANCEL_CLICK_ALT_SECONDARY) - return - if(isobserver(user) && user.client && check_rights_for(user.client, R_DEBUG)) - user.client.toggle_tag_datum(src) - return - /mob/proc/TurfAdjacent(turf/tile) return tile.Adjacent(src) -/** - * Control+Shift click - * Unused except for AI - */ -/mob/proc/CtrlShiftClickOn(atom/A) - A.CtrlShiftClick(src) - return - /mob/proc/ShiftMiddleClickOn(atom/A) src.pointed(A) return -/atom/proc/CtrlShiftClick(mob/user) - if(!can_interact(user)) - return FALSE - SEND_SIGNAL(src, COMSIG_CLICK_CTRL_SHIFT, user) - return - /* Misc helpers face_atom: turns the mob towards what you clicked on diff --git a/code/_onclick/click_alt.dm b/code/_onclick/click_alt.dm index 11419a6081692..28801b9816d36 100644 --- a/code/_onclick/click_alt.dm +++ b/code/_onclick/click_alt.dm @@ -1,5 +1,9 @@ +///Main proc for primary alt click +/mob/proc/AltClickOn(atom/target) + base_click_alt(target) + /** - * ### Base proc for alt click interaction. + * ### Base proc for alt click interaction left click. Returns if the click was intercepted & handled * * If you wish to add custom `click_alt` behavior for a single type, use that proc. */ @@ -8,35 +12,36 @@ // Check if they've hooked in to prevent src from alt clicking anything if(SEND_SIGNAL(src, COMSIG_MOB_ALTCLICKON, target) & COMSIG_MOB_CANCEL_CLICKON) - return + return TRUE - // Is it visible (and we're not wearing it (our clothes are invisible))? - if(!(src in viewers(7, target)) && !CanReach(target)) - return + // If it has a signal handler that returns a click action, done. + if(SEND_SIGNAL(target, COMSIG_CLICK_ALT, src) & CLICK_ACTION_ANY) + return TRUE - var/turf/tile = get_turf(target) + // If it has a custom click_alt that returns success/block, done. + if(can_perform_action(target, (target.interaction_flags_click | SILENT_ADJACENCY))) + return target.click_alt(src) & CLICK_ACTION_ANY - // Ghosties just see loot - if(isobserver(src) || isrevenant(src)) - client.loot_panel.open(tile) - return + return FALSE - // Turfs don't have a click_alt currently, so this saves some time. - if(!isturf(target) && can_perform_action(target, (target.interaction_flags_click | SILENT_ADJACENCY))) - // If it has a signal handler that returns a click action, done. - if(SEND_SIGNAL(target, COMSIG_CLICK_ALT, src) & CLICK_ACTION_ANY) - return +/mob/living/base_click_alt(atom/target) + SHOULD_NOT_OVERRIDE(TRUE) - // If it has a custom click_alt that returns success/block, done. - if(target.click_alt(src) & CLICK_ACTION_ANY) - return + . = ..() + if(. || !CAN_I_SEE(target) || (is_blind() && !IN_GIVEN_RANGE(src, target, 1))) + return // No alt clicking to view turf from beneath if(HAS_TRAIT(src, TRAIT_MOVE_VENTCRAWLING)) return - client.loot_panel.open(tile) + /// No loot panel if it's on our person + if(isobj(target) && (target in get_all_gear())) + to_chat(src, span_warning("You can't search for this item, it's already in your inventory! Take it off first.")) + return + client.loot_panel.open(get_turf(target)) + return TRUE /** * ## Custom alt click interaction @@ -68,3 +73,39 @@ /atom/proc/click_alt(mob/user) SHOULD_CALL_PARENT(FALSE) return NONE + + +///Main proc for secondary alt click +/mob/proc/AltClickSecondaryOn(atom/target) + base_click_alt_secondary(target) + +/** + * ### Base proc for alt click interaction right click. + * + * If you wish to add custom `click_alt_secondary` behavior for a single type, use that proc. + */ +/mob/proc/base_click_alt_secondary(atom/target) + SHOULD_NOT_OVERRIDE(TRUE) + + //Hook on the mob to intercept the click + if(SEND_SIGNAL(src, COMSIG_MOB_ALTCLICKON_SECONDARY, target) & COMSIG_MOB_CANCEL_CLICKON) + return + + //Hook on the atom to intercept the click + if(SEND_SIGNAL(target, COMSIG_CLICK_ALT_SECONDARY, src) & COMPONENT_CANCEL_CLICK_ALT_SECONDARY) + return + + // If it has a custom click_alt_secondary then do that + if(can_perform_action(target, target.interaction_flags_click | SILENT_ADJACENCY)) + target.click_alt_secondary(src) + +/** + * ## Custom alt click secondary interaction + * Override this to change default alt right click behavior. + * + * ### Guard clauses + * Consider adding `interaction_flags_click` before adding unique guard clauses. + **/ +/atom/proc/click_alt_secondary(mob/user) + SHOULD_CALL_PARENT(FALSE) + return NONE diff --git a/code/_onclick/click_ctrl.dm b/code/_onclick/click_ctrl.dm new file mode 100644 index 0000000000000..ebb22b9eafd11 --- /dev/null +++ b/code/_onclick/click_ctrl.dm @@ -0,0 +1,108 @@ +/** + * Ctrl click + */ +/mob/proc/CtrlClickOn(atom/A) + base_click_ctrl(A) + +/** + * ### Base proc for ctrl click interaction left click. + * + * If you wish to add custom `click_ctrl` behavior for a single type, use that proc. + */ +/mob/proc/base_click_ctrl(atom/target) + SHOULD_NOT_OVERRIDE(TRUE) + + // Check if they've hooked in to prevent src from ctrl clicking anything + if(SEND_SIGNAL(src, COMSIG_MOB_CTRL_CLICKED, target) & COMSIG_MOB_CANCEL_CLICKON) + return TRUE + + // If it has a signal handler that returns a click action, done. + if(SEND_SIGNAL(target, COMSIG_CLICK_CTRL, src) & CLICK_ACTION_ANY) + return TRUE + + // If it has a custom click_alt that returns success/block, done. + if(can_perform_action(target, target.interaction_flags_click | SILENT_ADJACENCY)) + return target.click_ctrl(src) & CLICK_ACTION_ANY + + return FALSE + +/** + * Ctrl click + * For most objects, pull + */ +/mob/living/base_click_ctrl(atom/target) + SHOULD_NOT_OVERRIDE(TRUE) + + . = ..() + if(. || world.time < next_move || !can_perform_action(target, NOT_INSIDE_TARGET | SILENT_ADJACENCY | ALLOW_RESTING | FORBID_TELEKINESIS_REACH)) + return + + . = TRUE + if(grab(target)) + changeNext_move(CLICK_CD_MELEE) + return + pulled(target) + +/** + * Ctrl mouse wheel click + * Except for tagging datumns same as control click + */ +/mob/proc/CtrlMiddleClickOn(atom/A) + if(check_rights_for(client, R_ADMIN)) + client.toggle_tag_datum(A) + return + CtrlClickOn(A) + +/** + * ## Custom ctrl click interaction + * Override this to change default ctrl click behavior. Return `CLICK_ACTION_SUCCESS`, `CLICK_ACTION_BLOCKING` or `NONE`. + * + * ### Guard clauses + * Consider adding `interaction_flags_click` before adding unique guard clauses. + * + * ### Return flags + * Forgetting your return will cause the default ctrl click behavior to occur thereafter. + * + * Returning any value besides NONE will stop the attack chain and thus stop the object from getting pulled/grabbed + **/ +/atom/proc/click_ctrl(mob/user) + SHOULD_CALL_PARENT(FALSE) + return NONE + + +/** + * Control+Shift click + * Unused except for AI + */ +/mob/proc/CtrlShiftClickOn(atom/A) + base_click_ctrl_shift(A) + +/** + * ### Base proc for ctrl shift click interaction left click. + * + * If you wish to add custom `click_ctrl_shift` behavior for a single type, use that proc. + */ +/mob/proc/base_click_ctrl_shift(atom/target) + SHOULD_NOT_OVERRIDE(TRUE) + + // Check if they've hooked in to prevent src from ctrl clicking anything + if(SEND_SIGNAL(src, COMSIG_MOB_CTRL_SHIFT_CLICKED, target) & COMSIG_MOB_CANCEL_CLICKON) + return + + // If it has a signal handler that returns a click action, done. + if(SEND_SIGNAL(target, COMSIG_CLICK_CTRL_SHIFT, src) & CLICK_ACTION_ANY) + return + + // Proceed with ctrl shift click + if(can_perform_action(target, target.interaction_flags_click | SILENT_ADJACENCY)) + target.click_ctrl_shift(src) + +/** + * ## Custom ctrl shift click interaction + * + * ### Guard clauses + * Consider adding `interaction_flags_click` before adding unique guard clauses. + **/ +/atom/proc/click_ctrl_shift(mob/user) + SHOULD_CALL_PARENT(FALSE) + return NONE diff --git a/code/_onclick/cyborg.dm b/code/_onclick/cyborg.dm index b16d74550a96d..4e9777ae9cd8d 100644 --- a/code/_onclick/cyborg.dm +++ b/code/_onclick/cyborg.dm @@ -84,13 +84,7 @@ W.melee_attack_chain(src, A, params) return else if(isturf(A) || isturf(A.loc)) - if(LAZYACCESS(modifiers, RIGHT_CLICK)) - var/after_attack_secondary_result = W.afterattack_secondary(A, src, FALSE, params) - - if(after_attack_secondary_result == SECONDARY_ATTACK_CALL_NORMAL) - W.afterattack(A, src, FALSE, params) - else - W.afterattack(A, src, FALSE, params) + A.base_ranged_item_interaction(src, W, modifiers) //Give cyborgs hotkey clicks without breaking existing uses of hotkey clicks // for non-doors/apcs @@ -103,9 +97,8 @@ /mob/living/silicon/robot/CtrlClickOn(atom/target) target.BorgCtrlClick(src) - /atom/proc/BorgCtrlShiftClick(mob/living/silicon/robot/user) //forward to human click if not overridden - CtrlShiftClick(user) + user.base_click_ctrl_shift(src) /obj/machinery/door/airlock/BorgCtrlShiftClick(mob/living/silicon/robot/user) // Sets/Unsets Emergency Access Override Forwards to AI code. if(get_dist(src, user) <= user.interaction_range && !(user.control_disabled)) @@ -122,9 +115,8 @@ else ..() - /atom/proc/BorgCtrlClick(mob/living/silicon/robot/user) //forward to human click if not overridden - CtrlClick(user) + user.base_click_ctrl(src) /obj/machinery/door/airlock/BorgCtrlClick(mob/living/silicon/robot/user) // Bolts doors. Forwards to AI code. if(get_dist(src, user) <= user.interaction_range && !(user.control_disabled)) diff --git a/code/_onclick/drag_drop.dm b/code/_onclick/drag_drop.dm index edecd0ba78f64..aa23d5a57eaa0 100644 --- a/code/_onclick/drag_drop.dm +++ b/code/_onclick/drag_drop.dm @@ -6,18 +6,60 @@ almost anything into a trash can. */ /atom/MouseDrop(atom/over, src_location, over_location, src_control, over_control, params) + SHOULD_NOT_OVERRIDE(TRUE) + if(!usr || !over) return - if(SEND_SIGNAL(src, COMSIG_MOUSEDROP_ONTO, over, usr) & COMPONENT_NO_MOUSEDROP) //Whatever is receiving will verify themselves for adjacency. - return + var/proximity_check = usr.client.check_drag_proximity(src, over, src_location, over_location, src_control, over_control, params) if(proximity_check) return proximity_check - if(!Adjacent(usr) || !over.Adjacent(usr)) - return // should stop you from dragging through windows + base_mouse_drop_handler(over, src_location, over_location, params) + +/** + * Called when all sanity checks for mouse dropping have passed. Handles adjacency & other sanity checks before delegating the event + * down to lower level handlers. Do not override unless you are trying to create hud & screen elements which do not require proximity + * or other checks + */ +/atom/proc/base_mouse_drop_handler(atom/over, src_location, over_location, params) + PROTECTED_PROC(TRUE) + SHOULD_NOT_OVERRIDE(TRUE) + + var/mob/user = usr + + if(SEND_SIGNAL(src, COMSIG_MOUSEDROP_ONTO, over, user) & COMPONENT_CANCEL_MOUSEDROP_ONTO) + return + + if(SEND_SIGNAL(over, COMSIG_MOUSEDROPPED_ONTO, src, user, params) & COMPONENT_CANCEL_MOUSEDROPPED_ONTO) + return + + // only if both dragged object & receiver agree to do checks do we proceed + var/combined_atom_flags = interaction_flags_atom | over.interaction_flags_atom + if(!(combined_atom_flags & INTERACT_ATOM_MOUSEDROP_IGNORE_CHECKS)) + //Check for adjacency + if(!(combined_atom_flags & INTERACT_ATOM_MOUSEDROP_IGNORE_ADJACENT) && (!CanReach(user) || !over.CanReach(user))) + return // should stop you from dragging through windows + + if(!(combined_atom_flags & INTERACT_ATOM_MOUSEDROP_IGNORE_USABILITY)) + //Bypass adjacency cause we already checked for it above + if(!user.can_perform_action(src, interaction_flags_mouse_drop | over.interaction_flags_mouse_drop | BYPASS_ADJACENCY)) + return // is the mob not able to drag the object with both sides conditions applied + + mouse_drop_dragged(over, user, src_location, over_location, params) + + over.mouse_drop_receive(src, user, params) + +/// The proc that should be overridden by subtypes to handle mouse drop. Called on the atom being dragged +/atom/proc/mouse_drop_dragged(atom/over, mob/user, src_location, over_location, params) + PROTECTED_PROC(TRUE) + + return + +/// The proc that should be overridden by subtypes to handle mouse drop. Called on the atom receiving a dragged object +/atom/proc/mouse_drop_receive(atom/dropped, mob/user, params) + PROTECTED_PROC(TRUE) - over.MouseDrop_T(src,usr, params) return /// Handles treating drags as clicks if they're within some conditions @@ -78,11 +120,6 @@ return TRUE -// receive a mousedrop -/atom/proc/MouseDrop_T(atom/dropping, mob/user, params) - SEND_SIGNAL(src, COMSIG_MOUSEDROPPED_ONTO, dropping, user, params) - - /client/MouseDown(datum/object, location, control, params) if(QDELETED(object)) //Yep, you can click on qdeleted things before they have time to nullspace. Fun. return @@ -146,6 +183,8 @@ return ..() /client/MouseDrop(atom/src_object, atom/over_object, atom/src_location, atom/over_location, src_control, over_control, params) + SHOULD_NOT_OVERRIDE(TRUE) + if (IS_WEAKREF_OF(src_object, middle_drag_atom_ref)) middragtime = 0 middle_drag_atom_ref = null diff --git a/code/_onclick/hud/action_button.dm b/code/_onclick/hud/action_button.dm index 9d4343c132e9b..71d8a81b397c3 100644 --- a/code/_onclick/hud/action_button.dm +++ b/code/_onclick/hud/action_button.dm @@ -94,7 +94,7 @@ old_object.MouseExited(over_location, over_control, params) last_hovored_ref = WEAKREF(over_object) - over_object.MouseEntered(over_location, over_control, params) + over_object?.MouseEntered(over_location, over_control, params) /atom/movable/screen/movable/action_button/MouseEntered(location, control, params) . = ..() @@ -105,7 +105,7 @@ closeToolTip(usr) return ..() -/atom/movable/screen/movable/action_button/MouseDrop(over_object) +/atom/movable/screen/movable/action_button/mouse_drop_dragged(atom/over_object, mob/user, src_location, over_location, params) last_hovored_ref = null if(!can_use(usr)) return @@ -130,7 +130,9 @@ our_hud.position_action_relative(src, button) save_position() return + . = ..() + our_hud.position_action(src, screen_loc) save_position() diff --git a/code/_onclick/hud/ai.dm b/code/_onclick/hud/ai.dm index e9650e35d1fc8..84efaf77c5dc9 100644 --- a/code/_onclick/hud/ai.dm +++ b/code/_onclick/hud/ai.dm @@ -10,7 +10,7 @@ icon_state = "ai_core" /atom/movable/screen/ai/aicore/Click() - if(..()) + if(isobserver(usr)) return var/mob/living/silicon/ai/AI = usr AI.view_core() diff --git a/code/_onclick/hud/alert.dm b/code/_onclick/hud/alert.dm index ac10680db27bc..f8f79f442940b 100644 --- a/code/_onclick/hud/alert.dm +++ b/code/_onclick/hud/alert.dm @@ -301,12 +301,25 @@ or shoot a gun to move around via Newton's 3rd Law of Motion." /// The offer we're linked to, yes this is suspiciously like a status effect alert var/datum/status_effect/offering/offer /// Additional text displayed in the description of the alert. - var/additional_desc_text = "Click this alert to take it." + var/additional_desc_text = "Click this alert to take it, or shift click it to examiante it." + /// Text to override what appears in screentips for the alert + var/screentip_override_text + /// Whether the offered item can be examined by shift-clicking the alert + var/examinable = TRUE + +/atom/movable/screen/alert/give/Initialize(mapload, datum/hud/hud_owner) + . = ..() + register_context() /atom/movable/screen/alert/give/Destroy() offer = null return ..() +/atom/movable/screen/alert/give/add_context(atom/source, list/context, obj/item/held_item, mob/user) + context[SCREENTIP_CONTEXT_LMB] = screentip_override_text || "Take [offer.offered_item.name]" + context[SCREENTIP_CONTEXT_SHIFT_LMB] = "Examine" + return CONTEXTUAL_SCREENTIP_SET + /** * Handles assigning most of the variables for the alert that pops up when an item is offered * @@ -357,6 +370,16 @@ or shoot a gun to move around via Newton's 3rd Law of Motion." handle_transfer() +/atom/movable/screen/alert/give/examine(mob/user) + if(!examinable) + return ..() + + return list( + span_boldnotice(name), + span_info("[offer.owner] is offering you the following item (click the alert to take it!):"), + "
[jointext(offer.offered_item.examine(user), "\n")]", + ) + /// An overrideable proc used simply to hand over the item when claimed, this is a proc so that high-fives can override them since nothing is actually transferred /atom/movable/screen/alert/give/proc/handle_transfer() var/mob/living/carbon/taker = owner @@ -367,6 +390,8 @@ or shoot a gun to move around via Newton's 3rd Law of Motion." /atom/movable/screen/alert/give/highfive additional_desc_text = "Click this alert to slap it." + screentip_override_text = "High Five" + examinable = FALSE /// Tracks active "to slow"ing so we can't spam click var/too_slowing_this_guy = FALSE @@ -425,6 +450,10 @@ or shoot a gun to move around via Newton's 3rd Law of Motion." if(QDELETED(offer.offered_item)) examine_list += span_warning("[source]'s arm appears tensed up, as if [source.p_they()] plan on pulling it back suddenly...") +/atom/movable/screen/alert/give/hand + screentip_override_text = "Take Hand" + examinable = FALSE + /atom/movable/screen/alert/give/hand/get_receiving_name(mob/living/carbon/taker, mob/living/carbon/offerer, obj/item/receiving) additional_desc_text = "Click this alert to take it and let [offerer.p_them()] pull you around!" return "[offerer.p_their()] [receiving.name]" @@ -496,7 +525,7 @@ or shoot a gun to move around via Newton's 3rd Law of Motion." alerttooltipstyle = "cult" var/static/image/narnar var/angle = 0 - var/mob/living/basic/construct/Cviewer + var/mob/living/basic/construct/construct_owner /atom/movable/screen/alert/bloodsense/Initialize(mapload, datum/hud/hud_owner) . = ..() @@ -504,7 +533,7 @@ or shoot a gun to move around via Newton's 3rd Law of Motion." START_PROCESSING(SSprocessing, src) /atom/movable/screen/alert/bloodsense/Destroy() - Cviewer = null + construct_owner = null STOP_PROCESSING(SSprocessing, src) return ..() @@ -514,45 +543,53 @@ or shoot a gun to move around via Newton's 3rd Law of Motion." if(!owner.mind) return + if(isconstruct(owner)) + construct_owner = owner + else + construct_owner = null + + // construct track + if(construct_owner?.seeking && construct_owner.master) + blood_target = construct_owner.master + desc = "Your blood sense is leading you to [construct_owner.master]" + + // cult track var/datum/antagonist/cult/antag = owner.mind.has_antag_datum(/datum/antagonist/cult,TRUE) - if(!antag) - return - var/datum/objective/sacrifice/sac_objective = locate() in antag.cult_team.objectives + if(antag) + var/datum/objective/sacrifice/sac_objective = locate() in antag.cult_team.objectives + if(antag.cult_team.blood_target) + if(!get_turf(antag.cult_team.blood_target)) + antag.cult_team.unset_blood_target() + else + blood_target = antag.cult_team.blood_target + if(!blood_target) + if(sac_objective && !sac_objective.check_completion()) + if(icon_state == "runed_sense0") + return + animate(src, transform = null, time = 1, loop = 0) + angle = 0 + cut_overlays() + icon_state = "runed_sense0" + desc = "Nar'Sie demands that [sac_objective.target] be sacrificed before the summoning ritual can begin." + add_overlay(sac_objective.sac_image) + else + var/datum/objective/eldergod/summon_objective = locate() in antag.cult_team.objectives + if(!summon_objective) + return + var/list/location_list = list() + for(var/area/area_to_check in summon_objective.summon_spots) + location_list += area_to_check.get_original_area_name() + desc = "The sacrifice is complete, summon Nar'Sie! The summoning can only take place in [english_list(location_list)]!" + if(icon_state == "runed_sense1") + return + animate(src, transform = null, time = 1, loop = 0) + angle = 0 + cut_overlays() + icon_state = "runed_sense1" + add_overlay(narnar) + return - if(antag.cult_team.blood_target) - if(!get_turf(antag.cult_team.blood_target)) - antag.cult_team.unset_blood_target() - else - blood_target = antag.cult_team.blood_target - if(Cviewer?.seeking && Cviewer.master) - blood_target = Cviewer.master - desc = "Your blood sense is leading you to [Cviewer.master]" - if(!blood_target) - if(sac_objective && !sac_objective.check_completion()) - if(icon_state == "runed_sense0") - return - animate(src, transform = null, time = 1, loop = 0) - angle = 0 - cut_overlays() - icon_state = "runed_sense0" - desc = "Nar'Sie demands that [sac_objective.target] be sacrificed before the summoning ritual can begin." - add_overlay(sac_objective.sac_image) - else - var/datum/objective/eldergod/summon_objective = locate() in antag.cult_team.objectives - if(!summon_objective) - return - var/list/location_list = list() - for(var/area/area_to_check in summon_objective.summon_spots) - location_list += area_to_check.get_original_area_name() - desc = "The sacrifice is complete, summon Nar'Sie! The summoning can only take place in [english_list(location_list)]!" - if(icon_state == "runed_sense1") - return - animate(src, transform = null, time = 1, loop = 0) - angle = 0 - cut_overlays() - icon_state = "runed_sense1" - add_overlay(narnar) - return + // actual tracking var/turf/P = get_turf(blood_target) var/turf/Q = get_turf(owner) if(!P || !Q || (P.z != Q.z)) //The target is on a different Z level, we cannot sense that far. @@ -564,6 +601,7 @@ or shoot a gun to move around via Newton's 3rd Law of Motion." desc = "You are currently tracking [real_target.real_name] in [get_area_name(blood_target)]." else desc = "You are currently tracking [blood_target] in [get_area_name(blood_target)]." + var/target_angle = get_angle(Q, P) var/target_dist = get_dist(P, Q) cut_overlays() @@ -1057,7 +1095,7 @@ or shoot a gun to move around via Newton's 3rd Law of Motion." return FALSE var/list/modifiers = params2list(params) if(LAZYACCESS(modifiers, SHIFT_CLICK)) // screen objects don't do the normal Click() stuff so we'll cheat - to_chat(usr, span_boldnotice("[name] - [desc]")) + to_chat(usr, examine_block(jointext(examine(usr), "\n"))) return FALSE var/datum/our_master = master_ref?.resolve() if(our_master && click_master) @@ -1071,3 +1109,9 @@ or shoot a gun to move around via Newton's 3rd Law of Motion." master_ref = null owner = null screen_loc = "" + +/atom/movable/screen/alert/examine(mob/user) + return list( + span_boldnotice(name), + span_info(desc), + ) diff --git a/code/_onclick/hud/movable_screen_objects.dm b/code/_onclick/hud/movable_screen_objects.dm index e0a6c6873bd5a..7a0937974bd36 100644 --- a/code/_onclick/hud/movable_screen_objects.dm +++ b/code/_onclick/hud/movable_screen_objects.dm @@ -20,7 +20,7 @@ /atom/movable/screen/movable/snap snap2grid = TRUE -/atom/movable/screen/movable/MouseDrop(over_object, src_location, over_location, src_control, over_control, params) +/atom/movable/screen/movable/mouse_drop_dragged(atom/over, mob/user, src_location, over_location, params) var/position = mouse_params_to_position(params) if(!position) return diff --git a/code/_onclick/hud/parallax/parallax.dm b/code/_onclick/hud/parallax/parallax.dm index 506226b41ead0..bcdcd0e74fed1 100644 --- a/code/_onclick/hud/parallax/parallax.dm +++ b/code/_onclick/hud/parallax/parallax.dm @@ -11,6 +11,10 @@ for(var/atom/movable/screen/plane_master/parallax as anything in get_true_plane_masters(PLANE_SPACE_PARALLAX)) parallax.unhide_plane(screenmob) + if(isnull(C.parallax_rock)) + C.parallax_rock = new(null, src) + C.screen |= C.parallax_rock + if(!length(C.parallax_layers_cached)) C.parallax_layers_cached = list() C.parallax_layers_cached += new /atom/movable/screen/parallax_layer/layer_1(null, src) @@ -25,7 +29,7 @@ if (length(C.parallax_layers) > C.parallax_layers_max) C.parallax_layers.len = C.parallax_layers_max - C.screen |= (C.parallax_layers) + C.parallax_rock.vis_contents = C.parallax_layers // We could do not do parallax for anything except the main plane group // This could be changed, but it would require refactoring this whole thing // And adding non client particular hooks for all the inputs, and I do not have the time I'm sorry :( @@ -44,7 +48,7 @@ /datum/hud/proc/remove_parallax(mob/viewmob) var/mob/screenmob = viewmob || mymob var/client/C = screenmob.client - C.screen -= (C.parallax_layers_cached) + C.screen -= (C.parallax_rock) for(var/atom/movable/screen/plane_master/plane_master as anything in screenmob.hud_used.get_true_plane_masters(PLANE_SPACE)) if(screenmob != mymob) C.screen -= locate(/atom/movable/screen/plane_master/parallax_white) in C.screen @@ -104,83 +108,65 @@ update_parallax(screen_mob) // This sets which way the current shuttle is moving (returns true if the shuttle has stopped moving so the caller can append their animation) -/datum/hud/proc/set_parallax_movedir(new_parallax_movedir = 0, skip_windups, mob/viewmob) +/datum/hud/proc/set_parallax_movedir(new_parallax_movedir = NONE, skip_windups, mob/viewmob) . = FALSE var/mob/screenmob = viewmob || mymob var/client/C = screenmob.client if(new_parallax_movedir == C.parallax_movedir) return - var/animatedir = new_parallax_movedir - if(new_parallax_movedir == FALSE) - var/animate_time = 0 - for(var/thing in C.parallax_layers) - var/atom/movable/screen/parallax_layer/L = thing - L.icon_state = initial(L.icon_state) - L.update_o(C.view) - var/T = PARALLAX_LOOP_TIME / L.speed - if (T > animate_time) - animate_time = T - C.dont_animate_parallax = world.time + min(animate_time, PARALLAX_LOOP_TIME) - animatedir = C.parallax_movedir - - var/matrix/newtransform - switch(animatedir) + + var/animation_dir = new_parallax_movedir || C.parallax_movedir + var/matrix/new_transform + switch(animation_dir) if(NORTH) - newtransform = matrix(1, 0, 0, 0, 1, 480) + new_transform = matrix(1, 0, 0, 0, 1, 480) if(SOUTH) - newtransform = matrix(1, 0, 0, 0, 1,-480) + new_transform = matrix(1, 0, 0, 0, 1,-480) if(EAST) - newtransform = matrix(1, 0, 480, 0, 1, 0) + new_transform = matrix(1, 0, 480, 0, 1, 0) if(WEST) - newtransform = matrix(1, 0,-480, 0, 1, 0) - - var/shortesttimer - if(!skip_windups) - for(var/thing in C.parallax_layers) - var/atom/movable/screen/parallax_layer/L = thing - - var/T = PARALLAX_LOOP_TIME / L.speed - if (isnull(shortesttimer)) - shortesttimer = T - if (T < shortesttimer) - shortesttimer = T - L.transform = newtransform - animate(L, transform = matrix(), time = T, easing = QUAD_EASING | (new_parallax_movedir ? EASE_IN : EASE_OUT), flags = ANIMATION_END_NOW) - if (new_parallax_movedir) - L.transform = newtransform - animate(transform = matrix(), time = T) //queue up another animate so lag doesn't create a shutter + new_transform = matrix(1, 0,-480, 0, 1, 0) + + var/longest_timer = 0 + for(var/key in C.parallax_animate_timers) + deltimer(C.parallax_animate_timers[key]) + C.parallax_animate_timers = list() + for(var/atom/movable/screen/parallax_layer/layer as anything in C.parallax_layers) + var/scaled_time = PARALLAX_LOOP_TIME / layer.speed + if(new_parallax_movedir == NONE) // If we're stopping, we need to stop on the same dime, yeah? + scaled_time = PARALLAX_LOOP_TIME + longest_timer = max(longest_timer, scaled_time) + + if(skip_windups) + update_parallax_motionblur(C, layer, new_parallax_movedir, new_transform) + continue - C.parallax_movedir = new_parallax_movedir - if (C.parallax_animate_timer) - deltimer(C.parallax_animate_timer) - var/datum/callback/CB = CALLBACK(src, PROC_REF(update_parallax_motionblur), C, animatedir, new_parallax_movedir, newtransform) - if(skip_windups) - CB.Invoke() - else - C.parallax_animate_timer = addtimer(CB, min(shortesttimer, PARALLAX_LOOP_TIME), TIMER_CLIENT_TIME|TIMER_STOPPABLE) + layer.transform = new_transform + animate(layer, transform = matrix(), time = scaled_time, easing = QUAD_EASING | (new_parallax_movedir ? EASE_IN : EASE_OUT)) + if (new_parallax_movedir == NONE) + continue + //queue up another animate so lag doesn't create a shutter + animate(transform = new_transform, time = 0) + animate(transform = matrix(), time = scaled_time / 2) + C.parallax_animate_timers[layer] = addtimer(CALLBACK(src, PROC_REF(update_parallax_motionblur), C, layer, new_parallax_movedir, new_transform), scaled_time, TIMER_CLIENT_TIME|TIMER_STOPPABLE) + C.dont_animate_parallax = world.time + min(longest_timer, PARALLAX_LOOP_TIME) + C.parallax_movedir = new_parallax_movedir -/datum/hud/proc/update_parallax_motionblur(client/C, animatedir, new_parallax_movedir, matrix/newtransform) +/datum/hud/proc/update_parallax_motionblur(client/C, atom/movable/screen/parallax_layer/layer, new_parallax_movedir, matrix/new_transform) if(!C) return - C.parallax_animate_timer = FALSE - for(var/thing in C.parallax_layers) - var/atom/movable/screen/parallax_layer/L = thing - if (!new_parallax_movedir) - animate(L) - continue - - var/newstate = initial(L.icon_state) - var/T = PARALLAX_LOOP_TIME / L.speed - - if (newstate in icon_states(L.icon)) - L.icon_state = newstate - L.update_o(C.view) - - L.transform = newtransform - - animate(L, transform = L.transform, time = 0, loop = -1, flags = ANIMATION_END_NOW) - animate(transform = matrix(), time = T) + C.parallax_animate_timers -= layer + + // If we are moving in a direction, we used the QUAD_EASING function with EASE_IN + // This means our position function is x^2. This is always LESS then the linear we're using here + // But if we just used the same time delay, our rate of change would mismatch. f'(1) = 2x for quad easing, rather then the 1 we get for linear + // (This is because of how derivatives work right?) + // Because of this, while our actual rate of change from before was PARALLAX_LOOP_TIME, our perceived rate of change was PARALLAX_LOOP_TIME / 2 (lower == faster). + // Let's account for that here + var/scaled_time = (PARALLAX_LOOP_TIME / layer.speed) / 2 + animate(layer, transform = new_transform, time = 0, loop = -1, flags = ANIMATION_END_NOW) + animate(transform = matrix(), time = scaled_time) /datum/hud/proc/update_parallax(mob/viewmob) var/mob/screenmob = viewmob || mymob @@ -217,36 +203,41 @@ var/our_speed = parallax_layer.speed var/change_x var/change_y + var/old_x = parallax_layer.offset_x + var/old_y = parallax_layer.offset_y if(parallax_layer.absolute) // We use change here so the typically large absolute objects (just lavaland for now) don't jitter so much - change_x = (posobj.x - SSparallax.planet_x_offset) * our_speed + parallax_layer.offset_x - change_y = (posobj.y - SSparallax.planet_y_offset) * our_speed + parallax_layer.offset_y + change_x = (posobj.x - SSparallax.planet_x_offset) * our_speed + old_x + change_y = (posobj.y - SSparallax.planet_y_offset) * our_speed + old_y else change_x = offset_x * our_speed change_y = offset_y * our_speed // This is how we tile parralax sprites // It doesn't use change because we really don't want to animate this - if(parallax_layer.offset_x - change_x > 240) + if(old_x - change_x > 240) parallax_layer.offset_x -= 480 - else if(parallax_layer.offset_x - change_x < -240) + parallax_layer.pixel_w = parallax_layer.offset_x + else if(old_x - change_x < -240) parallax_layer.offset_x += 480 - if(parallax_layer.offset_y - change_y > 240) + parallax_layer.pixel_w = parallax_layer.offset_x + if(old_y - change_y > 240) parallax_layer.offset_y -= 480 - else if(parallax_layer.offset_y - change_y < -240) + parallax_layer.pixel_z = parallax_layer.offset_y + else if(old_y - change_y < -240) parallax_layer.offset_y += 480 + parallax_layer.pixel_z = parallax_layer.offset_y - // Now that we have our offsets, let's do our positioning parallax_layer.offset_x -= change_x parallax_layer.offset_y -= change_y - - parallax_layer.screen_loc = "CENTER-7:[round(parallax_layer.offset_x, 1)],CENTER-7:[round(parallax_layer.offset_y, 1)]" - - // We're going to use a transform to "glide" that last movement out, so it looks nicer + // Now that we have our offsets, let's do our positioning + // We're going to use an animate to "glide" that last movement out, so it looks nicer // Don't do any animates if we're not actually moving enough distance yeah? thanks lad if(run_parralax && (largest_change * our_speed > 1)) - parallax_layer.transform = matrix(1,0,change_x, 0,1,change_y) - animate(parallax_layer, transform=matrix(), time = glide_rate) + animate(parallax_layer, pixel_w = round(parallax_layer.offset_x, 1), pixel_z = round(parallax_layer.offset_y, 1), time = glide_rate) + else + parallax_layer.pixel_w = round(parallax_layer.offset_x, 1) + parallax_layer.pixel_z = round(parallax_layer.offset_y, 1) /atom/movable/proc/update_parallax_contents() for(var/mob/client_mob as anything in client_mobs_in_contents) @@ -258,6 +249,15 @@ var/area/areaobj = get_area(client.eye) hud_used.set_parallax_movedir(areaobj.parallax_movedir, TRUE) +// Root object for parallax, all parallax layers are drawn onto this +INITIALIZE_IMMEDIATE(/atom/movable/screen/parallax_home) +/atom/movable/screen/parallax_home + icon = null + blend_mode = BLEND_ADD + plane = PLANE_SPACE_PARALLAX + screen_loc = "CENTER-7,CENTER-7" + mouse_opacity = MOUSE_OPACITY_TRANSPARENT + // We need parallax to always pass its args down into initialize, so we immediate init it INITIALIZE_IMMEDIATE(/atom/movable/screen/parallax_layer) /atom/movable/screen/parallax_layer @@ -266,9 +266,9 @@ INITIALIZE_IMMEDIATE(/atom/movable/screen/parallax_layer) var/offset_x = 0 var/offset_y = 0 var/absolute = FALSE + appearance_flags = APPEARANCE_UI | KEEP_TOGETHER blend_mode = BLEND_ADD plane = PLANE_SPACE_PARALLAX - screen_loc = "CENTER-7,CENTER-7" mouse_opacity = MOUSE_OPACITY_TRANSPARENT /atom/movable/screen/parallax_layer/Initialize(mapload, datum/hud/hud_owner, template = FALSE) @@ -302,15 +302,17 @@ INITIALIZE_IMMEDIATE(/atom/movable/screen/parallax_layer) // Turn the view size into a grid of correctly scaled overlays var/list/viewscales = getviewsize(view) - var/countx = CEILING((viewscales[1] / 2) * parallax_scaler, 1) + 1 - var/county = CEILING((viewscales[2] / 2) * parallax_scaler, 1) + 1 + // This could be half the size but we need to provide space for parallax movement on mob movement, and movement on scroll from shuttles, so like this instead + var/countx = (CEILING((viewscales[1] / 2) * parallax_scaler, 1) + 1) + var/county = (CEILING((viewscales[2] / 2) * parallax_scaler, 1) + 1) var/list/new_overlays = new for(var/x in -countx to countx) for(var/y in -county to county) if(x == 0 && y == 0) continue var/mutable_appearance/texture_overlay = mutable_appearance(icon, icon_state) - texture_overlay.transform = matrix(1, 0, x*480, 0, 1, y*480) + texture_overlay.pixel_w += 480 * x + texture_overlay.pixel_z += 480 * y new_overlays += texture_overlay cut_overlays() add_overlay(new_overlays) diff --git a/code/_onclick/hud/picture_in_picture.dm b/code/_onclick/hud/picture_in_picture.dm index dbf4e0af5310d..f3bb3713225c9 100644 --- a/code/_onclick/hud/picture_in_picture.dm +++ b/code/_onclick/hud/picture_in_picture.dm @@ -41,7 +41,7 @@ /atom/movable/screen/movable/pic_in_pic/proc/make_backgrounds() standard_background = new /mutable_appearance() - standard_background.icon = 'icons/misc/pic_in_pic.dmi' + standard_background.icon = 'icons/hud/pic_in_pic.dmi' standard_background.icon_state = "background" standard_background.layer = SPACE_LAYER @@ -51,7 +51,7 @@ move_tab = new /mutable_appearance() //all these properties are always the same, and since adding something to the overlay //list makes a copy, there is no reason to make a new one each call - move_tab.icon = 'icons/misc/pic_in_pic.dmi' + move_tab.icon = 'icons/hud/pic_in_pic.dmi' move_tab.icon_state = "move" move_tab.plane = HUD_PLANE var/matrix/M = matrix() @@ -63,7 +63,7 @@ button_x = new /atom/movable/screen/component_button(null, src) var/mutable_appearance/MA = new /mutable_appearance() MA.name = "close" - MA.icon = 'icons/misc/pic_in_pic.dmi' + MA.icon = 'icons/hud/pic_in_pic.dmi' MA.icon_state = "x" MA.plane = HUD_PLANE button_x.appearance = MA @@ -76,7 +76,7 @@ button_expand = new /atom/movable/screen/component_button(null, src) var/mutable_appearance/MA = new /mutable_appearance() MA.name = "expand" - MA.icon = 'icons/misc/pic_in_pic.dmi' + MA.icon = 'icons/hud/pic_in_pic.dmi' MA.icon_state = "expand" MA.plane = HUD_PLANE button_expand.appearance = MA @@ -89,7 +89,7 @@ button_shrink = new /atom/movable/screen/component_button(null, src) var/mutable_appearance/MA = new /mutable_appearance() MA.name = "shrink" - MA.icon = 'icons/misc/pic_in_pic.dmi' + MA.icon = 'icons/hud/pic_in_pic.dmi' MA.icon_state = "shrink" MA.plane = HUD_PLANE button_shrink.appearance = MA diff --git a/code/_onclick/hud/robot.dm b/code/_onclick/hud/robot.dm index 090b8876cba44..e2e534443691a 100644 --- a/code/_onclick/hud/robot.dm +++ b/code/_onclick/hud/robot.dm @@ -197,47 +197,50 @@ if(!R.client) return - if(R.shown_robot_modules && screenmob.hud_used.hud_shown) - //Modules display is shown - screenmob.client.screen += module_store_icon //"store" icon - - if(!R.model.modules) - to_chat(usr, span_warning("Selected model has no modules to select!")) - return - - if(!R.robot_modules_background) - return - - var/display_rows = max(CEILING(length(R.model.get_inactive_modules()) / 8, 1),1) - R.robot_modules_background.screen_loc = "CENTER-4:16,SOUTH+1:7 to CENTER+3:16,SOUTH+[display_rows]:7" - screenmob.client.screen += R.robot_modules_background - - var/x = -4 //Start at CENTER-4,SOUTH+1 - var/y = 1 - - for(var/atom/movable/A in R.model.get_inactive_modules()) - //Module is not currently active - screenmob.client.screen += A - if(x < 0) - A.screen_loc = "CENTER[x]:16,SOUTH+[y]:7" - else - A.screen_loc = "CENTER+[x]:16,SOUTH+[y]:7" - SET_PLANE_IMPLICIT(A, ABOVE_HUD_PLANE) - - x++ - if(x == 4) - x = -4 - y++ - - else + //Module is not currently active + screenmob.client.screen -= R.model.get_inactive_modules() + + if(!R.shown_robot_modules || !screenmob.hud_used.hud_shown) //Modules display is hidden screenmob.client.screen -= module_store_icon //"store" icon - for(var/atom/A in R.model.get_inactive_modules()) - //Module is not currently active - screenmob.client.screen -= A R.shown_robot_modules = 0 screenmob.client.screen -= R.robot_modules_background + return + + //Modules display is shown + screenmob.client.screen += module_store_icon //"store" icon + + if(!R.model.modules) + to_chat(usr, span_warning("Selected model has no modules to select!")) + return + + if(!R.robot_modules_background) + return + + var/list/usable_modules = R.model.get_usable_modules() + + var/display_rows = max(CEILING(length(usable_modules) / 8, 1),1) + R.robot_modules_background.screen_loc = "CENTER-4:16,SOUTH+1:7 to CENTER+3:16,SOUTH+[display_rows]:7" + screenmob.client.screen += R.robot_modules_background + + for(var/i in 1 to length(usable_modules)) + var/atom/movable/A = usable_modules[i] + if(A in R.held_items) + //Module is currently active + continue + + // Arrange in a grid x=-4 to 3 and y=1 to display_rows + var/x = (i - 1) % 8 - 4 + var/y = floor((i - 1) / 8) + 1 + + screenmob.client.screen += A + if(x < 0) + A.screen_loc = "CENTER[x]:16,SOUTH+[y]:7" + else + A.screen_loc = "CENTER+[x]:16,SOUTH+[y]:7" + SET_PLANE_IMPLICIT(A, ABOVE_HUD_PLANE) + /datum/hud/robot/persistent_inventory_update(mob/viewer) if(!mymob) diff --git a/code/_onclick/hud/screen_objects.dm b/code/_onclick/hud/screen_objects.dm index ea22327f13592..8cc29740870ca 100644 --- a/code/_onclick/hud/screen_objects.dm +++ b/code/_onclick/hud/screen_objects.dm @@ -15,6 +15,7 @@ animate_movement = SLIDE_STEPS speech_span = SPAN_ROBOT appearance_flags = APPEARANCE_UI + interaction_flags_atom = parent_type::interaction_flags_atom | INTERACT_ATOM_MOUSEDROP_IGNORE_CHECKS /// A reference to the object in the slot. Grabs or items, generally, but any datum will do. var/datum/weakref/master_ref = null /// A reference to the owner HUD, if any. @@ -58,6 +59,10 @@ if(default_click) return ..() +///Screen elements are always on top of the players screen and don't move so yes they are adjacent +/atom/movable/screen/Adjacent(atom/neighbor, atom/target, atom/movable/mover) + return TRUE + /atom/movable/screen/examine(mob/user) return list() @@ -241,6 +246,7 @@ var/mutable_appearance/handcuff_overlay var/static/mutable_appearance/blocked_overlay = mutable_appearance('icons/hud/screen_gen.dmi', "blocked") var/held_index = 0 + interaction_flags_atom = NONE //so dragging objects into hands icon don't skip adjacency & other checks /atom/movable/screen/inventory/hand/update_overlays() . = ..() @@ -288,7 +294,8 @@ /atom/movable/screen/close name = "close" plane = ABOVE_HUD_PLANE - icon_state = "backpack_close" + icon = 'icons/hud/screen_midnight.dmi' + icon_state = "storage_close" /atom/movable/screen/close/Initialize(mapload, datum/hud/hud_owner, new_master) . = ..() @@ -433,8 +440,8 @@ /atom/movable/screen/storage name = "storage" - icon_state = "block" - screen_loc = "7,7 to 10,8" + icon = 'icons/hud/screen_midnight.dmi' + icon_state = "storage_cell" plane = HUD_PLANE /atom/movable/screen/storage/Initialize(mapload, datum/hud/hud_owner, new_master) @@ -459,6 +466,27 @@ return TRUE +/atom/movable/screen/storage/corner + name = "storage" + icon_state = "storage_corner_topleft" + +/atom/movable/screen/storage/corner/top_right + icon_state = "storage_corner_topright" + +/atom/movable/screen/storage/corner/bottom_left + icon_state = "storage_corner_bottomleft" + +/atom/movable/screen/storage/corner/bottom_right + icon_state = "storage_corner_bottomright" + +/atom/movable/screen/storage/rowjoin + name = "storage" + icon_state = "storage_rowjoin_left" + alpha = 0 + +/atom/movable/screen/storage/rowjoin/right + icon_state = "storage_rowjoin_right" + /atom/movable/screen/throw_catch name = "throw/catch" icon = 'icons/hud/screen_midnight.dmi' @@ -793,7 +821,7 @@ INITIALIZE_IMMEDIATE(/atom/movable/screen/splash) food_image = image(icon = food_icon, icon_state = food_icon_state, pixel_x = -5) food_image.plane = plane food_image.appearance_flags |= KEEP_APART // To be unaffected by filters applied to src - food_image.add_filter("simple_outline", 2, outline_filter(1, COLOR_BLACK)) + food_image.add_filter("simple_outline", 2, outline_filter(1, COLOR_BLACK, OUTLINE_SHARP)) underlays += food_image // To be below filters applied to src SetInvisibility(INVISIBILITY_ABSTRACT, name) // Start invisible, update later diff --git a/code/_onclick/item_attack.dm b/code/_onclick/item_attack.dm index be4a481e6773c..a5c2035b9394d 100644 --- a/code/_onclick/item_attack.dm +++ b/code/_onclick/item_attack.dm @@ -8,6 +8,11 @@ * * [/obj/item/proc/afterattack]. The return value does not matter. */ /obj/item/proc/melee_attack_chain(mob/user, atom/target, params) + //Proxy replaces src cause it returns an atom that will attack the target on our behalf + var/obj/item/source_atom = get_proxy_attacker_for(target, user) + if(source_atom != src) //if we are someone else then call that attack chain else we can proceed with the usual stuff + return source_atom.melee_attack_chain(user, target, params) + var/list/modifiers = params2list(params) var/is_right_clicking = LAZYACCESS(modifiers, RIGHT_CLICK) @@ -17,6 +22,8 @@ if(item_interact_result & ITEM_INTERACT_BLOCKING) return FALSE + // At this point it means we're not doing a non-combat interaction so let's just try to bash it + var/pre_attack_result if (is_right_clicking) switch (pre_attack_secondary(target, user, params)) @@ -34,8 +41,9 @@ if(pre_attack_result) return TRUE - var/attackby_result + // At this point the attack is really about to happen + var/attackby_result if (is_right_clicking) switch (target.attackby_secondary(src, user, params)) if (SECONDARY_ATTACK_CALL_NORMAL) @@ -50,24 +58,19 @@ attackby_result = target.attackby(src, user, params) if (attackby_result) + // This means the attack failed or was handled for whatever reason return TRUE - if (is_right_clicking) - var/after_attack_secondary_result = afterattack_secondary(target, user, TRUE, params) - - // There's no chain left to continue at this point, so CANCEL_ATTACK_CHAIN and CONTINUE_CHAIN are functionally the same. - if (after_attack_secondary_result == SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN || after_attack_secondary_result == SECONDARY_ATTACK_CONTINUE_CHAIN) - return TRUE + // At this point it means the attack was "successful", or at least unhandled, in some way + // This can mean nothing happened, this can mean the target took damage, etc. - var/afterattack_result = afterattack(target, user, TRUE, params) - - if (!(afterattack_result & AFTERATTACK_PROCESSED_ITEM) && isitem(target)) - if (isnull(user.get_inactive_held_item())) + if(user.client && isitem(target)) + if(isnull(user.get_inactive_held_item())) SStutorials.suggest_tutorial(user, /datum/tutorial/switch_hands, params2list(params)) else SStutorials.suggest_tutorial(user, /datum/tutorial/drop, params2list(params)) - return afterattack_result & TRUE //this is really stupid but its needed because afterattack can return TRUE | FLAGS. + return TRUE /// Called when the item is in the active hand, and clicked; alternately, there is an 'activate held object' verb or you can hit pagedown. /obj/item/proc/attack_self(mob/user, modifiers) @@ -160,16 +163,6 @@ return attacking_item.attack_atom(src, user, params) /mob/living/item_interaction(mob/living/user, obj/item/tool, list/modifiers) - // Surgery and such happens very high up in the interaction chain, before parent call - var/attempt_tending = item_tending(user, tool, modifiers) - if(attempt_tending & ITEM_INTERACT_ANY_BLOCKER) - return attempt_tending - - return ..() | attempt_tending - -/// Handles any use of using a surgical tool or item on a mob to tend to them. -/// The sole reason this is a separate proc is so carbons can tend wounds AFTER the check for surgery. -/mob/living/proc/item_tending(mob/living/user, obj/item/tool, list/modifiers) for(var/datum/surgery/operation as anything in surgeries) if(IS_IN_INVALID_SURGICAL_POSITION(src, operation)) continue @@ -211,21 +204,21 @@ if(signal_return & COMPONENT_CANCEL_ATTACK_CHAIN) return TRUE if(signal_return & COMPONENT_SKIP_ATTACK) - return + return FALSE SEND_SIGNAL(user, COMSIG_MOB_ITEM_ATTACK, target_mob, user, params) if(item_flags & NOBLUDGEON) - return + return FALSE if(damtype != STAMINA && force && HAS_TRAIT(user, TRAIT_PACIFISM)) to_chat(user, span_warning("You don't want to harm other living beings!")) - return + return FALSE if(!force && !HAS_TRAIT(src, TRAIT_CUSTOM_TAP_SOUND)) - playsound(loc, 'sound/weapons/tap.ogg', get_clamped_volume(), TRUE, -1) + playsound(src, 'sound/weapons/tap.ogg', get_clamped_volume(), TRUE, -1) else if(hitsound) - playsound(loc, hitsound, get_clamped_volume(), TRUE, extrarange = stealthy_audio ? SILENCED_SOUND_EXTRARANGE : -1, falloff_distance = 0) + playsound(src, hitsound, get_clamped_volume(), TRUE, extrarange = stealthy_audio ? SILENCED_SOUND_EXTRARANGE : -1, falloff_distance = 0) target_mob.lastattacker = user.real_name target_mob.lastattackerckey = user.ckey @@ -233,11 +226,18 @@ if(force && target_mob == user && user.client) user.client.give_award(/datum/award/achievement/misc/selfouch, user) - user.do_attack_animation(target_mob) - target_mob.attacked_by(src, user) + if(get(src, /mob/living) == user) // telekinesis. + user.do_attack_animation(target_mob) + if(!target_mob.attacked_by(src, user)) + return TRUE + + SEND_SIGNAL(src, COMSIG_ITEM_AFTERATTACK, target_mob, user, params) + SEND_SIGNAL(target_mob, COMSIG_ATOM_AFTER_ATTACKEDBY, src, user, params) + afterattack(target_mob, user, params) log_combat(user, target_mob, "attacked", src.name, "(COMBAT MODE: [uppertext(user.combat_mode)]) (DAMTYPE: [uppertext(damtype)])") add_fingerprint(user) + return FALSE // unhandled /// The equivalent of [/obj/item/proc/attack] but for alternate attacks, AKA right clicking /obj/item/proc/attack_secondary(mob/living/victim, mob/living/user, params) @@ -253,14 +253,21 @@ /// The equivalent of the standard version of [/obj/item/proc/attack] but for non mob targets. /obj/item/proc/attack_atom(atom/attacked_atom, mob/living/user, params) - if(SEND_SIGNAL(src, COMSIG_ITEM_ATTACK_ATOM, attacked_atom, user) & COMPONENT_CANCEL_ATTACK_CHAIN) - return + var/signal_return = SEND_SIGNAL(src, COMSIG_ITEM_ATTACK_ATOM, attacked_atom, user) + if(signal_return & COMPONENT_SKIP_ATTACK) + return TRUE + if(signal_return & COMPONENT_CANCEL_ATTACK_CHAIN) + return FALSE if(item_flags & NOBLUDGEON) - return + return FALSE user.changeNext_move(attack_speed) - user.do_attack_animation(attacked_atom) + if(get(src, /mob/living) == user) // telekinesis. + user.do_attack_animation(attacked_atom) attacked_atom.attacked_by(src, user) - SEND_SIGNAL(src, COMSIG_ITEM_POST_ATTACK_ATOM, attacked_atom, user) + SEND_SIGNAL(src, COMSIG_ITEM_AFTERATTACK, attacked_atom, user, params) + SEND_SIGNAL(attacked_atom, COMSIG_ATOM_AFTER_ATTACKEDBY, src, user, params) + afterattack(attacked_atom, user, params) + return FALSE // unhandled /// Called from [/obj/item/proc/attack_atom] and [/obj/item/proc/attack] if the attack succeeds /atom/proc/attacked_by(obj/item/attacking_item, mob/living/user) @@ -287,7 +294,7 @@ if(body_position == LYING_DOWN) zone_hit_chance += 10 targeting = get_random_valid_zone(targeting, zone_hit_chance) - var/targeting_human_readable = parse_zone(targeting) + var/targeting_human_readable = parse_zone_with_bodypart(targeting) send_item_attack_message(attacking_item, user, targeting_human_readable, targeting) @@ -316,7 +323,7 @@ SEND_SIGNAL(attacking_item, COMSIG_ITEM_ATTACK_ZONE, src, user, targeting) if(damage <= 0) - return FALSE + return TRUE if(ishuman(src) || client) // istype(src) is kinda bad, but it's to avoid spamming the blackbox SSblackbox.record_feedback("nested tally", "item_used_for_combat", 1, list("[attacking_item.force]", "[attacking_item.type]")) @@ -440,33 +447,9 @@ * * proximity_flag - is 1 if this afterattack was called on something adjacent, in your square, or on your person. * * click_parameters - is the params string from byond [/atom/proc/Click] code, see that documentation. */ -/obj/item/proc/afterattack(atom/target, mob/user, proximity_flag, click_parameters) - . = NONE - . |= SEND_SIGNAL(src, COMSIG_ITEM_AFTERATTACK, target, user, proximity_flag, click_parameters) - SEND_SIGNAL(user, COMSIG_MOB_ITEM_AFTERATTACK, target, src, proximity_flag, click_parameters) - SEND_SIGNAL(target, COMSIG_ATOM_AFTER_ATTACKEDBY, src, user, proximity_flag, click_parameters) - return . - -/** - * Called at the end of the attack chain if the user right-clicked. - * - * Arguments: - * * atom/target - The thing that was hit - * * mob/user - The mob doing the hitting - * * proximity_flag - is 1 if this afterattack was called on something adjacent, in your square, or on your person. - * * click_parameters - is the params string from byond [/atom/proc/Click] code, see that documentation. - */ -/obj/item/proc/afterattack_secondary(atom/target, mob/user, proximity_flag, click_parameters) - var/signal_result = SEND_SIGNAL(src, COMSIG_ITEM_AFTERATTACK_SECONDARY, target, user, proximity_flag, click_parameters) - SEND_SIGNAL(user, COMSIG_MOB_ITEM_AFTERATTACK_SECONDARY, target, src, proximity_flag, click_parameters) - - if(signal_result & COMPONENT_SECONDARY_CANCEL_ATTACK_CHAIN) - return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN - - if(signal_result & COMPONENT_SECONDARY_CONTINUE_ATTACK_CHAIN) - return SECONDARY_ATTACK_CONTINUE_CHAIN - - return SECONDARY_ATTACK_CALL_NORMAL +/obj/item/proc/afterattack(atom/target, mob/user, click_parameters) + PROTECTED_PROC(TRUE) + return /obj/item/proc/get_clamped_volume() if(w_class) @@ -480,9 +463,8 @@ return var/message_verb_continuous = length(I.attack_verb_continuous) ? "[pick(I.attack_verb_continuous)]" : "attacks" var/message_verb_simple = length(I.attack_verb_simple) ? "[pick(I.attack_verb_simple)]" : "attack" - var/message_hit_area = "" - if(hit_area) - message_hit_area = " in the [hit_area]" + var/message_hit_area = get_hit_area_message(hit_area) + var/attack_message_spectator = "[src] [message_verb_continuous][message_hit_area] with [I]!" var/attack_message_victim = "Something [message_verb_continuous] you[message_hit_area] with [I]!" var/attack_message_attacker = "You [message_verb_simple] [src][message_hit_area] with [I]!" @@ -497,3 +479,11 @@ to_chat(src, span_danger("Someone hits you[message_hit_area]!")) to_chat(user, span_danger("[attack_message_attacker]")) return 1 + +/// Overridable proc so subtypes can have unique targetted strike zone messages, return a string. +/mob/living/proc/get_hit_area_message(input_area) + if(input_area) + return " in the [input_area]" + + return "" + diff --git a/code/_onclick/other_mobs.dm b/code/_onclick/other_mobs.dm index f46ab02433ddc..0dd8ee0a582f6 100644 --- a/code/_onclick/other_mobs.dm +++ b/code/_onclick/other_mobs.dm @@ -187,7 +187,8 @@ ///When a basic mob attacks something, either by AI or user. /atom/proc/attack_basic_mob(mob/user, list/modifiers) SHOULD_CALL_PARENT(TRUE) - SEND_SIGNAL(src, COMSIG_ATOM_ATTACK_BASIC_MOB, user) + if(SEND_SIGNAL(src, COMSIG_ATOM_ATTACK_BASIC_MOB, user) & COMSIG_BASIC_ATTACK_CANCEL_CHAIN) + return return handle_basic_attack(user, modifiers) //return value of attack animal, this is how much damage was dealt to the attacked thing ///This exists so stuff can override the default call of attack_animal for attack_basic_mob diff --git a/code/_onclick/telekinesis.dm b/code/_onclick/telekinesis.dm index c0ef2b6001f44..bdbf6ab0a024a 100644 --- a/code/_onclick/telekinesis.dm +++ b/code/_onclick/telekinesis.dm @@ -71,7 +71,7 @@ /obj/item/attack_self_tk(mob/user) if(attack_self(user)) - return COMPONENT_CANCEL_ATTACK_CHAIN + return ITEM_INTERACT_BLOCKING /atom/proc/attack_self_secondary_tk(mob/user) return @@ -79,7 +79,7 @@ /obj/item/attack_self_secondary_tk(mob/user) if(attack_self_secondary(user)) - return COMPONENT_CANCEL_ATTACK_CHAIN + return ITEM_INTERACT_BLOCKING /* @@ -146,80 +146,44 @@ if(QDELING(focus)) qdel(src) return - if(focus.attack_self_tk(user) & COMPONENT_CANCEL_ATTACK_CHAIN) + if(focus.attack_self_tk(user) & ITEM_INTERACT_ANY_BLOCKER) . = TRUE update_appearance() +/obj/item/tk_grab/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + return ranged_interact_with_atom(interacting_with, user, modifiers) -/obj/item/tk_grab/afterattack(atom/target, mob/living/carbon/user, proximity, params)//TODO: go over this - . = ..() - if(.) - return - - if(!target || !user) - return - +/obj/item/tk_grab/ranged_interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) if(!focus) - focus_object(target) - return TRUE + focus_object(interacting_with) + return ITEM_INTERACT_BLOCKING if(!check_if_focusable(focus)) - return + return NONE - if(target == focus) - if(target.attack_self_tk(user) & COMPONENT_CANCEL_ATTACK_CHAIN) - . = TRUE - update_appearance() - return + if(interacting_with == focus) + if(LAZYACCESS(modifiers, RIGHT_CLICK)) + . = focus.attack_self_secondary_tk(user) || NONE + else + . = interacting_with.attack_self_tk(user) || NONE - if(isitem(focus)) - var/obj/item/I = focus + else if(isitem(focus)) + var/obj/item/focused_item = focus apply_focus_overlay() - if(target.Adjacent(focus)) - . = I.melee_attack_chain(tk_user, target, params) //isn't copying the attack chain fun. we should do it more often. + if(interacting_with.Adjacent(focus)) + . = focused_item.melee_attack_chain(user, interacting_with, list2params(modifiers)) ? ITEM_INTERACT_SUCCESS : ITEM_INTERACT_BLOCKING if(check_if_focusable(focus)) - focus.do_attack_animation(target, null, focus) - else if(isgun(I)) //I've only tested this with guns, and it took some doing to make it work - . = I.afterattack(target, tk_user, 0, params) - . |= AFTERATTACK_PROCESSED_ITEM - - user.changeNext_move(CLICK_CD_MELEE) - update_appearance() - return . - -/obj/item/tk_grab/afterattack_secondary(atom/target, mob/user, proximity_flag, click_parameters) - . = ..() - if(. == SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN) - return - - if(!target || !user) - return - - if(!focus) - focus_object(target) - return TRUE - - if(!check_if_focusable(focus)) - return - - if(target == focus) - if(target.attack_self_secondary_tk(user) & COMPONENT_CANCEL_ATTACK_CHAIN) - . = TRUE - update_appearance() - return + focus.do_attack_animation(interacting_with, null, focus) - if(isitem(focus)) - var/obj/item/I = focus - apply_focus_overlay() - if(target.Adjacent(focus)) - . = I.melee_attack_chain(tk_user, target, click_parameters) //isn't copying the attack chain fun. we should do it more often. - if(check_if_focusable(focus)) - focus.do_attack_animation(target, null, focus) - else if(isgun(I)) //I've only tested this with guns, and it took some doing to make it work - . = I.afterattack_secondary(target, tk_user, 0, click_parameters) + // isgun check lets us shoot guns at range + // quoting the old comment: "I've only tested this with guns, and it took some doing to make it work" + // reader beware if trying to add other snowflake cases + else if(isgun(focused_item)) + . = interacting_with.base_ranged_item_interaction(user, focus, modifiers) user.changeNext_move(CLICK_CD_MELEE) update_appearance() + return . /obj/item/tk_grab/on_thrown(mob/living/carbon/user, atom/target) if(!target || !user) @@ -232,7 +196,7 @@ return if(target == focus) - if(target.attack_self_tk(user) & COMPONENT_CANCEL_ATTACK_CHAIN) + if(target.attack_self_tk(user) & ITEM_INTERACT_ANY_BLOCKER) return update_appearance() return diff --git a/code/controllers/configuration/entries/game_options.dm b/code/controllers/configuration/entries/game_options.dm index 368ae3a384035..068f857c8cb31 100644 --- a/code/controllers/configuration/entries/game_options.dm +++ b/code/controllers/configuration/entries/game_options.dm @@ -347,6 +347,16 @@ min_val = 0 integer = FALSE +/datum/config_entry/number/events_frequency_lower + default = 2.5 MINUTES + min_val = 0 + protection = CONFIG_ENTRY_LOCKED + +/datum/config_entry/number/events_frequency_upper + default = 7 MINUTES + min_val = 0 + protection = CONFIG_ENTRY_LOCKED + /datum/config_entry/number/mice_roundstart default = 10 min_val = 0 diff --git a/code/controllers/configuration/entries/general.dm b/code/controllers/configuration/entries/general.dm index 05226ae6b9418..964459aea68d4 100644 --- a/code/controllers/configuration/entries/general.dm +++ b/code/controllers/configuration/entries/general.dm @@ -184,13 +184,13 @@ /// minimum time between voting sessions (deciseconds, 10 minute default) /datum/config_entry/number/vote_delay - default = 6000 + default = 10 MINUTES integer = FALSE min_val = 0 /// length of voting period (deciseconds, default 1 minute) /datum/config_entry/number/vote_period - default = 600 + default = 1 MINUTES integer = FALSE min_val = 0 @@ -447,10 +447,13 @@ /datum/config_entry/flag/irc_first_connection_alert // do we notify the irc channel when somebody is connecting for the first time? +/datum/config_entry/string/ipintel_base + default = "check.getipintel.net" + /datum/config_entry/string/ipintel_email /datum/config_entry/string/ipintel_email/ValidateAndSet(str_val) - return str_val != "ch@nge.me" && ..() + return str_val != "ch@nge.me" && (!length(str_val) || findtext(str_val, "@")) && ..() /datum/config_entry/number/ipintel_rating_bad default = 1 @@ -458,18 +461,26 @@ min_val = 0 max_val = 1 -/datum/config_entry/number/ipintel_save_good - default = 12 - integer = FALSE +/datum/config_entry/flag/ipintel_reject_rate_limited + default = FALSE + +/datum/config_entry/flag/ipintel_reject_bad + default = FALSE + +/datum/config_entry/flag/ipintel_reject_unknown + default = FALSE + +/datum/config_entry/number/ipintel_rate_minute + default = 15 min_val = 0 -/datum/config_entry/number/ipintel_save_bad - default = 1 - integer = FALSE +/datum/config_entry/number/ipintel_cache_length + default = 7 min_val = 0 -/datum/config_entry/string/ipintel_domain - default = "check.getipintel.net" +/datum/config_entry/number/ipintel_exempt_playtime_living + default = 5 + min_val = 0 /datum/config_entry/flag/aggressive_changelog @@ -639,6 +650,9 @@ /datum/config_entry/flag/auto_profile +/datum/config_entry/number/profiler_interval + default = 300 SECONDS + /datum/config_entry/number/drift_dump_threshold default = 4 SECONDS diff --git a/code/controllers/subsystem/ambience.dm b/code/controllers/subsystem/ambience.dm index e138c2d6048c5..cae5d85246d80 100644 --- a/code/controllers/subsystem/ambience.dm +++ b/code/controllers/subsystem/ambience.dm @@ -27,6 +27,9 @@ SUBSYSTEM_DEF(ambience) client_old_areas -= client_iterator continue + if(!client_mob.can_hear()) //WHAT? I CAN'T HEAR YOU + continue + //Check to see if the client-mob is in a valid area var/area/current_area = get_area(client_mob) if(!current_area) //Something's gone horribly wrong @@ -83,3 +86,52 @@ SUBSYSTEM_DEF(ambience) if(!M.has_light_nearby() && prob(0.5)) return ..(M, pick(minecraft_cave_noises)) return ..() + +/** + * Ambience buzz handling called by either area/Enter() or refresh_looping_ambience() + */ + +/mob/proc/update_ambience_area(area/new_area) + + var/old_tracked_area = ambience_tracked_area + if(old_tracked_area) + UnregisterSignal(old_tracked_area, COMSIG_AREA_POWER_CHANGE) + ambience_tracked_area = null + if(!client) + return + if(new_area) + ambience_tracked_area = new_area + RegisterSignal(ambience_tracked_area, COMSIG_AREA_POWER_CHANGE, PROC_REF(refresh_looping_ambience), TRUE) + + refresh_looping_ambience() + +/mob/proc/refresh_looping_ambience() + SIGNAL_HANDLER + + if(!client) // If a tree falls in the woods. + return + + var/area/my_area = get_area(src) + var/sound_to_use = my_area.ambient_buzz + + if(!sound_to_use || !(client.prefs.read_preference(/datum/preference/toggle/sound_ship_ambience))) + SEND_SOUND(src, sound(null, repeat = 0, wait = 0, channel = CHANNEL_BUZZ)) + client.current_ambient_sound = null + return + + if(!can_hear()) // Can the mob hear? + SEND_SOUND(src, sound(null, repeat = 0, wait = 0, channel = CHANNEL_BUZZ)) + client.current_ambient_sound = null + return + + //Station ambience is dependant on a functioning and charged APC with enviorment power enabled. + if(!is_mining_level(my_area.z) && ((!my_area.apc || !my_area.apc.operating || !my_area.apc.cell?.charge && my_area.requires_power || !my_area.power_environ))) + SEND_SOUND(src, sound(null, repeat = 0, wait = 0, channel = CHANNEL_BUZZ)) + client.current_ambient_sound = null + return + else + if(sound_to_use == client.current_ambient_sound) // Don't reset current loops + return + + client.current_ambient_sound = sound_to_use + SEND_SOUND(src, sound(my_area.ambient_buzz, repeat = 1, wait = 0, volume = my_area.ambient_buzz_vol, channel = CHANNEL_BUZZ)) diff --git a/code/controllers/subsystem/bitrunning.dm b/code/controllers/subsystem/bitrunning.dm index 2b303911e42c9..78afb101945b0 100644 --- a/code/controllers/subsystem/bitrunning.dm +++ b/code/controllers/subsystem/bitrunning.dm @@ -24,7 +24,8 @@ SUBSYSTEM_DEF(bitrunning) var/can_view = domain.difficulty < scanner_tier && domain.cost <= points + 5 var/can_view_reward = domain.difficulty < (scanner_tier + 1) && domain.cost <= points + 3 - levels += list(list( + UNTYPED_LIST_ADD(levels, list( + "announce_ghosts"= domain.announce_to_ghosts, "cost" = domain.cost, "desc" = can_view ? domain.desc : "Limited scanning capabilities. Cannot infer domain details.", "difficulty" = domain.difficulty, diff --git a/code/controllers/subsystem/blackbox.dm b/code/controllers/subsystem/blackbox.dm index 8c5fd154805aa..bb4f3802d89b1 100644 --- a/code/controllers/subsystem/blackbox.dm +++ b/code/controllers/subsystem/blackbox.dm @@ -46,11 +46,10 @@ SUBSYSTEM_DEF(blackbox) var/admincount = GLOB.admins.len var/datum/db_query/query_record_playercount = SSdbcore.NewQuery({" INSERT INTO [format_table_name("legacy_population")] (playercount, admincount, time, server_ip, server_port, round_id) - VALUES (:playercount, :admincount, :time, INET_ATON(:server_ip), :server_port, :round_id) + VALUES (:playercount, :admincount, NOW(), INET_ATON(:server_ip), :server_port, :round_id) "}, list( "playercount" = playercount, "admincount" = admincount, - "time" = SQLtime(), "server_ip" = world.internet_address || "0", "server_port" = "[world.port]", "round_id" = GLOB.round_id, @@ -298,7 +297,7 @@ Versioning var/datum/db_query/query_log_ahelp = SSdbcore.NewQuery({" INSERT INTO [format_table_name("ticket")] (ticket, action, message, recipient, sender, server_ip, server_port, round_id, timestamp, urgent) - VALUES (:ticket, :action, :message, :recipient, :sender, INET_ATON(:server_ip), :server_port, :round_id, :time, :urgent) + VALUES (:ticket, :action, :message, :recipient, :sender, INET_ATON(:server_ip), :server_port, :round_id, NOW(), :urgent) "}, list( "ticket" = ticket, "action" = action, @@ -308,7 +307,6 @@ Versioning "server_ip" = world.internet_address || "0", "server_port" = world.port, "round_id" = GLOB.round_id, - "time" = SQLtime(), "urgent" = urgent, )) query_log_ahelp.Execute() @@ -337,7 +335,7 @@ Versioning var/datum/db_query/query_report_death = SSdbcore.NewQuery({" INSERT INTO [format_table_name("death")] (pod, x_coord, y_coord, z_coord, mapname, server_ip, server_port, round_id, tod, job, special, name, byondkey, laname, lakey, bruteloss, fireloss, brainloss, oxyloss, toxloss, staminaloss, last_words, suicide) - VALUES (:pod, :x_coord, :y_coord, :z_coord, :map, INET_ATON(:internet_address), :port, :round_id, :time, :job, :special, :name, :key, :laname, :lakey, :brute, :fire, :brain, :oxy, :tox, :stamina, :last_words, :suicide) + VALUES (:pod, :x_coord, :y_coord, :z_coord, :map, INET_ATON(:internet_address), :port, :round_id, NOW(), :job, :special, :name, :key, :laname, :lakey, :brute, :fire, :brain, :oxy, :tox, :stamina, :last_words, :suicide) "}, list( "name" = L.real_name, "key" = L.ckey, @@ -361,7 +359,6 @@ Versioning "internet_address" = world.internet_address || "0", "port" = "[world.port]", "round_id" = GLOB.round_id, - "time" = SQLtime(), )) if(query_report_death) query_report_death.Execute(async = TRUE) @@ -392,7 +389,7 @@ Versioning :message, :fine, :paid, - :timestamp + NOW() ) ON DUPLICATE KEY UPDATE paid = paid + VALUES(paid)"}, list( "server_ip" = world.internet_address || "0", @@ -406,7 +403,6 @@ Versioning "message" = message, "fine" = fine, "paid" = paid, - "timestamp" = SQLtime() )) if(query_report_citation) query_report_citation.Execute(async = TRUE) diff --git a/code/controllers/subsystem/dcs.dm b/code/controllers/subsystem/dcs.dm index eefbede308739..a3dcc26af54fb 100644 --- a/code/controllers/subsystem/dcs.dm +++ b/code/controllers/subsystem/dcs.dm @@ -84,7 +84,7 @@ PROCESSING_SUBSYSTEM_DEF(dcs) fullid += REF(key) if(named_arguments) - named_arguments = sortTim(named_arguments, GLOBAL_PROC_REF(cmp_text_asc)) + sortTim(named_arguments, GLOBAL_PROC_REF(cmp_text_asc)) fullid += named_arguments return list2params(fullid) diff --git a/code/controllers/subsystem/dynamic/dynamic.dm b/code/controllers/subsystem/dynamic/dynamic.dm index ab407e3e65775..e34b0c7e446c0 100644 --- a/code/controllers/subsystem/dynamic/dynamic.dm +++ b/code/controllers/subsystem/dynamic/dynamic.dm @@ -19,6 +19,8 @@ GLOBAL_VAR_INIT(dynamic_forced_threat_level, -1) GLOBAL_LIST_EMPTY(dynamic_station_traits) /// Rulesets which have been forcibly enabled or disabled GLOBAL_LIST_EMPTY(dynamic_forced_rulesets) +/// Bitflags used during init by Dynamic to determine which rulesets we're allowed to use, used by station traits for gamemode-esque experiences +GLOBAL_VAR_INIT(dynamic_ruleset_categories, RULESET_CATEGORY_DEFAULT) SUBSYSTEM_DEF(dynamic) name = "Dynamic" @@ -317,7 +319,7 @@ SUBSYSTEM_DEF(dynamic) SSticker.news_report = SSshuttle.emergency?.is_hijacked() ? SHUTTLE_HIJACK : STATION_EVACUATED /datum/controller/subsystem/dynamic/proc/send_intercept() - if(DScommunications.block_command_report) //If we don't want the report to be printed just yet, we put it off until it's ready + if(GLOB.communications_controller.block_command_report) //If we don't want the report to be printed just yet, we put it off until it's ready addtimer(CALLBACK(src, PROC_REF(send_intercept)), 10 SECONDS) return @@ -349,10 +351,10 @@ SUBSYSTEM_DEF(dynamic) if(trait_list_strings.len > 0) . += "
Identified shift divergencies:
" + trait_list_strings.Join() - if(length(DScommunications.command_report_footnotes)) + if(length(GLOB.communications_controller.command_report_footnotes)) var/footnote_pile = "" - for(var/datum/command_footnote/footnote in DScommunications.command_report_footnotes) + for(var/datum/command_footnote/footnote in GLOB.communications_controller.command_report_footnotes) footnote_pile += "[footnote.message]
" footnote_pile += "[footnote.signature]
" footnote_pile += "
" @@ -374,21 +376,23 @@ SUBSYSTEM_DEF(dynamic) /// Generate the advisory level depending on the shown threat level. /datum/controller/subsystem/dynamic/proc/generate_advisory_level() var/advisory_string = "" - if (prob(PULSAR_REPORT_CHANCE)) - if(HAS_TRAIT(SSstation, STATION_TRAIT_BANANIUM_SHIPMENTS)) - advisory_string += "Advisory Level: Clown Planet
" - advisory_string += "Your sector's advisory level is Clown Planet! Our bike horns have picked up on a large bananium stash. Clowns show a large influx of clowns on your station. We highly advise you to slip any threats to keep Honkotrasen assets within the Banana Sector. The Department of Intelligence advises defending chemistry from any clowns that are trying to make baldium or space lube." - return advisory_string + if(prob(PULSAR_REPORT_CHANCE)) + for(var/datum/station_trait/our_trait as anything in shuffle(SSstation.station_traits)) + advisory_string += our_trait.get_pulsar_message() + if(length(advisory_string)) + return advisory_string advisory_string += "Advisory Level: Pulsar Star
" advisory_string += "Your sector's advisory level is Pulsar Star. A large, unknown electromagnetic field has stormed through nearby surveillance equipment, causing major data loss. Partial data was recovered and showed no credible threats to Nanotrasen assets within the Spinward Sector; however, the Department of Intelligence advises maintaining high alert against potential threats due to the lack of complete data." return advisory_string + //a white dwarf shift leads to a green security alert on report and special announcement, this prevents a meta check if the alert report is fake or not. + if(round(shown_threat) == 0 && round(threat_level) == 0) + advisory_string += "Advisory Level: White Dwarf
" + advisory_string += "Your sector's advisory level is White Dwarf. Our surveillance has ruled out any and all potential threats known in our database, eliminating most risks to our assets in the Spinward Sector. We advise a lower level of security, alongside distributing resources on potential profit." + return advisory_string switch(round(shown_threat)) - if(0) - advisory_string += "Advisory Level: White Dwarf
" - advisory_string += "Your sector's advisory level is White Dwarf. Our surveillance has ruled out any and all potential threats known in our database, eliminating most risks to our assets in the Spinward Sector. We advise a lower level of security, alongside distributing resources on potential profit." - if(1 to 19) + if(0 to 19) var/show_core_territory = (GLOB.current_living_antags.len > 0) if (prob(FAKE_GREENSHIFT_FORM_CHANCE)) show_core_territory = !show_core_territory @@ -643,7 +647,6 @@ SUBSYSTEM_DEF(dynamic) log_admin(concatenated_message) to_chat(GLOB.admins, concatenated_message) - /// Initializes the internal ruleset variables /datum/controller/subsystem/dynamic/proc/setup_rulesets() midround_rules = init_rulesets(/datum/dynamic_ruleset/midround) @@ -940,6 +943,8 @@ SUBSYSTEM_DEF(dynamic) ruleset.restricted_roles |= ruleset.protected_roles if(CONFIG_GET(flag/protect_assistant_from_antagonist)) ruleset.restricted_roles |= JOB_ASSISTANT + if(!(ruleset.ruleset_category & GLOB.dynamic_ruleset_categories)) + ruleset.requirements = list(101,101,101,101,101,101,101,101,101,101) /// Get station traits and call for their config /datum/controller/subsystem/dynamic/proc/configure_station_trait_costs() diff --git a/code/controllers/subsystem/dynamic/dynamic_rulesets.dm b/code/controllers/subsystem/dynamic/dynamic_rulesets.dm index b5f84176d594b..c77cce50d0157 100644 --- a/code/controllers/subsystem/dynamic/dynamic_rulesets.dm +++ b/code/controllers/subsystem/dynamic/dynamic_rulesets.dm @@ -83,6 +83,8 @@ /// A list, or null, of templates that the ruleset depends on to function correctly var/list/ruleset_lazy_templates + /// In what categories is this ruleset allowed to run? Used by station traits + var/ruleset_category = RULESET_CATEGORY_DEFAULT /datum/dynamic_ruleset/New() // Rulesets can be instantiated more than once, such as when an admin clicks @@ -140,28 +142,41 @@ /// This function is here to ensure the antag ratio is kept under control while scaling up. /// Returns how much threat to actually spend in the end. /datum/dynamic_ruleset/proc/scale_up(population, max_scale) + SHOULD_NOT_OVERRIDE(TRUE) if (!scaling_cost) return 0 var/antag_fraction = 0 - for(var/_ruleset in (SSdynamic.executed_rules + list(src))) // we care about the antags we *will* assign, too - var/datum/dynamic_ruleset/ruleset = _ruleset - antag_fraction += ((1 + ruleset.scaled_times) * ruleset.get_antag_cap(population)) / SSdynamic.roundstart_pop_ready + for(var/datum/dynamic_ruleset/ruleset as anything in (SSdynamic.executed_rules + list(src))) // we care about the antags we *will* assign, too + antag_fraction += ruleset.get_antag_cap_scaling_included(population) / SSdynamic.roundstart_pop_ready for(var/i in 1 to max_scale) if(antag_fraction < 0.25) scaled_times += 1 - antag_fraction += get_antag_cap(population) / SSdynamic.roundstart_pop_ready // we added new antags, gotta update the % + antag_fraction += get_scaling_antag_cap(population) / SSdynamic.roundstart_pop_ready // we added new antags, gotta update the % return scaled_times * scaling_cost +/// Returns how many more antags to add while scaling with a given population. +/// By default rulesets scale linearly, but you can override this to make them scale differently. +/datum/dynamic_ruleset/proc/get_scaling_antag_cap(population) + return get_antag_cap(population) + /// Returns what the antag cap with the given population is. /datum/dynamic_ruleset/proc/get_antag_cap(population) + SHOULD_NOT_OVERRIDE(TRUE) if (isnum(antag_cap)) return antag_cap return CEILING(population / antag_cap["denominator"], 1) + (antag_cap["offset"] || 0) +/// Gets the 'final' antag cap for this ruleset, which is the base cap plus the scaled cap. +/datum/dynamic_ruleset/proc/get_antag_cap_scaling_included(population) + SHOULD_NOT_OVERRIDE(TRUE) + var/base_cap = get_antag_cap(population) + var/modded_cap = scaled_times * get_scaling_antag_cap(population) + return base_cap + modded_cap + /// This is called if persistent variable is true everytime SSTicker ticks. /datum/dynamic_ruleset/proc/rule_process() return diff --git a/code/controllers/subsystem/dynamic/dynamic_rulesets_midround.dm b/code/controllers/subsystem/dynamic/dynamic_rulesets_midround.dm index a36c2c78fb3bb..857a1babd3249 100644 --- a/code/controllers/subsystem/dynamic/dynamic_rulesets_midround.dm +++ b/code/controllers/subsystem/dynamic/dynamic_rulesets_midround.dm @@ -183,6 +183,7 @@ var/mob/new_character = applicant if(makeBody) new_character = generate_ruleset_body(applicant) + SEND_GLOBAL_SIGNAL(COMSIG_RULESET_BODY_GENERATED_FROM_GHOSTS, applicant) finish_setup(new_character, i) notify_ghosts( "[applicant.name] has been picked for the ruleset [name]!", @@ -297,25 +298,29 @@ cost = 10 required_type = /mob/living/silicon/ai blocking_rules = list(/datum/dynamic_ruleset/roundstart/malf_ai) + // AIs are technically considered "Ghost roles" as far as candidate selection are concerned + // So we need to allow it here. We filter of actual ghost role AIs (charlie) via trim_candidates ourselves + restrict_ghost_roles = FALSE /datum/dynamic_ruleset/midround/malf/trim_candidates() ..() - candidates = living_players - for(var/mob/living/player in candidates) - if(!isAI(player)) - candidates -= player + candidates = list() + for(var/mob/living/silicon/ai/player in living_players) + if(!is_station_level(player.z)) continue - - if(is_centcom_level(player.z)) - candidates -= player + if(isnull(player.mind)) continue + if(player.mind.special_role || length(player.mind.antag_datums)) + continue + candidates += player - if(player.mind && (player.mind.special_role || player.mind.antag_datums?.len > 0)) - candidates -= player +/datum/dynamic_ruleset/midround/malf/ready(forced) + if(!check_candidates()) + log_dynamic("FAIL: No valid AI found for the Malfunctioning AI ruleset.") + return FALSE + return ..() /datum/dynamic_ruleset/midround/malf/execute() - if(!candidates || !candidates.len) - return FALSE var/mob/living/silicon/ai/new_malf_ai = pick_n_take(candidates) assigned += new_malf_ai.mind var/datum/antagonist/malf_ai/malf_antag_datum = new @@ -336,6 +341,7 @@ antag_datum = /datum/antagonist/wizard antag_flag = ROLE_WIZARD_MIDROUND antag_flag_override = ROLE_WIZARD + ruleset_category = parent_type::ruleset_category | RULESET_CATEGORY_NO_WITTING_CREW_ANTAGONISTS required_enemies = list(2,2,1,1,1,1,1,0,0,0) required_candidates = 1 weight = 1 @@ -364,6 +370,7 @@ antag_flag = ROLE_OPERATIVE_MIDROUND antag_flag_override = ROLE_OPERATIVE antag_datum = /datum/antagonist/nukeop + ruleset_category = parent_type::ruleset_category | RULESET_CATEGORY_NO_WITTING_CREW_ANTAGONISTS enemy_roles = list( JOB_AI, JOB_CYBORG, @@ -418,6 +425,7 @@ midround_ruleset_style = MIDROUND_RULESET_STYLE_HEAVY antag_datum = /datum/antagonist/blob antag_flag = ROLE_BLOB + ruleset_category = parent_type::ruleset_category | RULESET_CATEGORY_NO_WITTING_CREW_ANTAGONISTS required_enemies = list(2,2,1,1,1,1,1,0,0,0) required_candidates = 1 minimum_round_time = 35 MINUTES @@ -437,6 +445,7 @@ antag_datum = /datum/antagonist/blob/infection antag_flag = ROLE_BLOB_INFECTION antag_flag_override = ROLE_BLOB + ruleset_category = parent_type::ruleset_category | RULESET_CATEGORY_NO_WITTING_CREW_ANTAGONISTS protected_roles = list( JOB_CAPTAIN, JOB_DETECTIVE, @@ -489,6 +498,7 @@ midround_ruleset_style = MIDROUND_RULESET_STYLE_HEAVY antag_datum = /datum/antagonist/xeno antag_flag = ROLE_ALIEN + ruleset_category = parent_type::ruleset_category | RULESET_CATEGORY_NO_WITTING_CREW_ANTAGONISTS required_enemies = list(2,2,1,1,1,1,1,0,0,0) required_candidates = 1 minimum_round_time = 40 MINUTES @@ -537,6 +547,7 @@ antag_datum = /datum/antagonist/nightmare antag_flag = ROLE_NIGHTMARE antag_flag_override = ROLE_ALIEN + ruleset_category = parent_type::ruleset_category | RULESET_CATEGORY_NO_WITTING_CREW_ANTAGONISTS required_enemies = list(2,2,1,1,1,1,1,0,0,0) required_candidates = 1 weight = 3 @@ -572,7 +583,7 @@ midround_ruleset_style = MIDROUND_RULESET_STYLE_HEAVY antag_datum = /datum/antagonist/space_dragon antag_flag = ROLE_SPACE_DRAGON - antag_flag_override = ROLE_SPACE_DRAGON + ruleset_category = parent_type::ruleset_category | RULESET_CATEGORY_NO_WITTING_CREW_ANTAGONISTS required_enemies = list(2,2,1,1,1,1,1,0,0,0) required_candidates = 1 weight = 4 @@ -612,6 +623,7 @@ midround_ruleset_style = MIDROUND_RULESET_STYLE_LIGHT antag_datum = /datum/antagonist/abductor antag_flag = ROLE_ABDUCTOR + ruleset_category = parent_type::ruleset_category | RULESET_CATEGORY_NO_WITTING_CREW_ANTAGONISTS required_enemies = list(2,2,1,1,1,1,1,0,0,0) required_candidates = 2 required_applicants = 2 @@ -649,6 +661,7 @@ midround_ruleset_style = MIDROUND_RULESET_STYLE_HEAVY antag_datum = /datum/antagonist/ninja antag_flag = ROLE_NINJA + ruleset_category = parent_type::ruleset_category | RULESET_CATEGORY_NO_WITTING_CREW_ANTAGONISTS required_enemies = list(2,2,1,1,1,1,1,0,0,0) required_candidates = 1 weight = 4 @@ -688,6 +701,7 @@ name = "Spiders" midround_ruleset_style = MIDROUND_RULESET_STYLE_HEAVY antag_flag = ROLE_SPIDER + ruleset_category = parent_type::ruleset_category | RULESET_CATEGORY_NO_WITTING_CREW_ANTAGONISTS required_type = /mob/dead/observer required_enemies = list(2,2,1,1,1,1,1,0,0,0) required_candidates = 0 @@ -705,6 +719,7 @@ /datum/dynamic_ruleset/midround/from_ghosts/revenant name = "Revenant" midround_ruleset_style = MIDROUND_RULESET_STYLE_LIGHT + ruleset_category = parent_type::ruleset_category | RULESET_CATEGORY_NO_WITTING_CREW_ANTAGONISTS antag_datum = /datum/antagonist/revenant antag_flag = ROLE_REVENANT required_enemies = list(2,2,1,1,1,1,1,0,0,0) @@ -751,30 +766,11 @@ log_game("[key_name(revenant)] was spawned as a revenant by the midround ruleset.") return revenant -/// Midround Sentient Disease Ruleset (From Ghosts) -/datum/dynamic_ruleset/midround/from_ghosts/sentient_disease - name = "Sentient Disease" - midround_ruleset_style = MIDROUND_RULESET_STYLE_HEAVY - antag_datum = /datum/antagonist/disease - antag_flag = ROLE_SENTIENT_DISEASE - required_candidates = 1 - minimum_players = 25 - weight = 4 - cost = 8 - repeatable = TRUE - -/datum/dynamic_ruleset/midround/from_ghosts/sentient_disease/generate_ruleset_body(mob/applicant) - var/mob/camera/disease/virus = new /mob/camera/disease(SSmapping.get_station_center()) - virus.key = applicant.key - INVOKE_ASYNC(virus, TYPE_PROC_REF(/mob/camera/disease, pick_name)) - message_admins("[ADMIN_LOOKUPFLW(virus)] has been made into a sentient disease by the midround ruleset.") - log_game("[key_name(virus)] was spawned as a sentient disease by the midround ruleset.") - return virus - /// Midround Space Pirates Ruleset (From Ghosts) /datum/dynamic_ruleset/midround/pirates name = "Space Pirates" midround_ruleset_style = MIDROUND_RULESET_STYLE_LIGHT + ruleset_category = parent_type::ruleset_category | RULESET_CATEGORY_NO_WITTING_CREW_ANTAGONISTS antag_flag = "Space Pirates" required_type = /mob/dead/observer required_enemies = list(2,2,1,1,1,1,1,0,0,0) @@ -797,6 +793,7 @@ /datum/dynamic_ruleset/midround/dangerous_pirates name = "Dangerous Space Pirates" midround_ruleset_style = MIDROUND_RULESET_STYLE_HEAVY + ruleset_category = parent_type::ruleset_category | RULESET_CATEGORY_NO_WITTING_CREW_ANTAGONISTS antag_flag = "Space Pirates" required_type = /mob/dead/observer required_enemies = list(2,2,1,1,1,1,1,0,0,0) @@ -821,6 +818,7 @@ midround_ruleset_style = MIDROUND_RULESET_STYLE_LIGHT antag_datum = /datum/antagonist/obsessed antag_flag = ROLE_OBSESSED + ruleset_category = parent_type::ruleset_category | RULESET_CATEGORY_NO_WITTING_CREW_ANTAGONISTS restricted_roles = list( JOB_AI, JOB_CYBORG, @@ -864,6 +862,7 @@ antag_datum = /datum/antagonist/changeling/space antag_flag = ROLE_CHANGELING_MIDROUND antag_flag_override = ROLE_CHANGELING + ruleset_category = parent_type::ruleset_category | RULESET_CATEGORY_NO_WITTING_CREW_ANTAGONISTS required_type = /mob/dead/observer required_enemies = list(2,2,1,1,1,1,1,0,0,0) required_candidates = 1 @@ -884,6 +883,7 @@ midround_ruleset_style = MIDROUND_RULESET_STYLE_LIGHT antag_datum = /datum/antagonist/paradox_clone antag_flag = ROLE_PARADOX_CLONE + ruleset_category = parent_type::ruleset_category | RULESET_CATEGORY_NO_WITTING_CREW_ANTAGONISTS enemy_roles = list( JOB_CAPTAIN, JOB_DETECTIVE, diff --git a/code/controllers/subsystem/dynamic/dynamic_rulesets_roundstart.dm b/code/controllers/subsystem/dynamic/dynamic_rulesets_roundstart.dm index 51ecd59925a4d..72554a108e328 100644 --- a/code/controllers/subsystem/dynamic/dynamic_rulesets_roundstart.dm +++ b/code/controllers/subsystem/dynamic/dynamic_rulesets_roundstart.dm @@ -33,8 +33,7 @@ GLOBAL_VAR_INIT(revolutionary_win, FALSE) /datum/dynamic_ruleset/roundstart/traitor/pre_execute(population) . = ..() - var/num_traitors = get_antag_cap(population) * (scaled_times + 1) - for (var/i = 1 to num_traitors) + for (var/i in 1 to get_antag_cap_scaling_included(population)) if(candidates.len <= 0) break var/mob/M = pick_n_take(candidates) @@ -121,7 +120,7 @@ GLOBAL_VAR_INIT(revolutionary_win, FALSE) /datum/dynamic_ruleset/roundstart/traitorbro/pre_execute(population) . = ..() - for (var/_ in 1 to get_antag_cap(population) * (scaled_times + 1)) + for (var/i in 1 to get_antag_cap_scaling_included(population)) var/mob/candidate = pick_n_take(candidates) if (isnull(candidate)) break @@ -135,10 +134,7 @@ GLOBAL_VAR_INIT(revolutionary_win, FALSE) /datum/dynamic_ruleset/roundstart/traitorbro/execute() for (var/datum/mind/mind in assigned) - var/datum/team/brother_team/team = new - team.add_member(mind) - team.forge_brother_objectives() - mind.add_antag_datum(/datum/antagonist/brother, team) + new /datum/team/brother_team(mind) GLOB.pre_setup_antags -= mind return TRUE @@ -174,8 +170,7 @@ GLOBAL_VAR_INIT(revolutionary_win, FALSE) /datum/dynamic_ruleset/roundstart/changeling/pre_execute(population) . = ..() - var/num_changelings = get_antag_cap(population) * (scaled_times + 1) - for (var/i = 1 to num_changelings) + for (var/i in 1 to get_antag_cap_scaling_included(population)) if(candidates.len <= 0) break var/mob/M = pick_n_take(candidates) @@ -259,6 +254,7 @@ GLOBAL_VAR_INIT(revolutionary_win, FALSE) name = "Wizard" antag_flag = ROLE_WIZARD antag_datum = /datum/antagonist/wizard + ruleset_category = parent_type::ruleset_category | RULESET_CATEGORY_NO_WITTING_CREW_ANTAGONISTS flags = HIGH_IMPACT_RULESET minimum_required_age = 14 restricted_roles = list( @@ -400,6 +396,7 @@ GLOBAL_VAR_INIT(revolutionary_win, FALSE) /datum/dynamic_ruleset/roundstart/nuclear name = "Nuclear Emergency" antag_flag = ROLE_OPERATIVE + ruleset_category = parent_type::ruleset_category | RULESET_CATEGORY_NO_WITTING_CREW_ANTAGONISTS antag_datum = /datum/antagonist/nukeop var/datum/antagonist/antag_leader_datum = /datum/antagonist/nukeop/leader minimum_required_age = 14 @@ -623,6 +620,7 @@ GLOBAL_VAR_INIT(revolutionary_win, FALSE) antag_datum = /datum/antagonist/nukeop/clownop antag_flag = ROLE_CLOWN_OPERATIVE antag_flag_override = ROLE_OPERATIVE + ruleset_category = parent_type::ruleset_category | RULESET_CATEGORY_NO_WITTING_CREW_ANTAGONISTS antag_leader_datum = /datum/antagonist/nukeop/leader/clownop requirements = list(101,101,101,101,101,101,101,101,101,101) required_role = ROLE_CLOWN_OPERATIVE @@ -720,13 +718,15 @@ GLOBAL_VAR_INIT(revolutionary_win, FALSE) required_candidates = 3 // lives or dies by there being a few spies weight = 5 cost = 8 - scaling_cost = 101 // see below - minimum_players = 8 - antag_cap = list("denominator" = 8, "offset" = 1) // should have quite a few spies to work against each other + scaling_cost = 4 + minimum_players = 10 + antag_cap = list("denominator" = 20, "offset" = 1) requirements = list(8, 8, 8, 8, 8, 8, 8, 8, 8, 8) + /// What fraction is added to the antag cap for each additional scale + var/fraction_per_scale = 0.2 /datum/dynamic_ruleset/roundstart/spies/pre_execute(population) - for(var/i in 1 to get_antag_cap(population) * (scaled_times + 1)) + for(var/i in 1 to get_antag_cap_scaling_included(population)) if(length(candidates) <= 0) break var/mob/picked_player = pick_n_take(candidates) @@ -736,7 +736,6 @@ GLOBAL_VAR_INIT(revolutionary_win, FALSE) GLOB.pre_setup_antags += picked_player.mind return TRUE -/datum/dynamic_ruleset/roundstart/spies/scale_up(population, max_scale) - // Disabled (at least until dynamic can handle scaling this better) - // Because spies have a very low demoninator, this can easily spawn like 30 of them - return 0 +// Scaling adds a fraction of the amount of additional spies rather than the full amount. +/datum/dynamic_ruleset/roundstart/spies/get_scaling_antag_cap(population) + return ceil(..() * fraction_per_scale) diff --git a/code/controllers/subsystem/events.dm b/code/controllers/subsystem/events.dm index 362129f130570..b117a35718196 100644 --- a/code/controllers/subsystem/events.dm +++ b/code/controllers/subsystem/events.dm @@ -23,6 +23,10 @@ SUBSYSTEM_DEF(events) if(!event.typepath || !event.valid_for_map()) continue //don't want this one! leave it for the garbage collector control += event //add it to the list of all events (controls) + + frequency_lower = CONFIG_GET(number/events_frequency_lower) + frequency_upper = CONFIG_GET(number/events_frequency_upper) + reschedule() // Instantiate our holidays list if it hasn't been already if(isnull(GLOB.holidays)) @@ -61,8 +65,13 @@ SUBSYSTEM_DEF(events) /datum/controller/subsystem/events/proc/reschedule() scheduled = world.time + rand(frequency_lower, max(frequency_lower,frequency_upper)) -//selects a random event based on whether it can occur and it's 'weight'(probability) -/datum/controller/subsystem/events/proc/spawnEvent() +/** + * Selects a random event based on whether it can occur and it's 'weight'(probability) + * + * Arguments: + * * excluded_event - The event path we will be foregoing, if present. + */ +/datum/controller/subsystem/events/proc/spawnEvent(datum/round_event_control/excluded_event) set waitfor = FALSE //for the admin prompt if(!CONFIG_GET(flag/allow_random_events)) return @@ -73,6 +82,8 @@ SUBSYSTEM_DEF(events) var/list/event_roster = list() for(var/datum/round_event_control/event_to_check in control) + if(excluded_event && event_to_check.typepath == excluded_event.typepath) //If an event has been rerolled we won't just roll the same one again. + continue if(!event_to_check.can_spawn_event(players_amt)) continue if(event_to_check.weight < 0) //for round-start events etc. @@ -85,7 +96,8 @@ SUBSYSTEM_DEF(events) event_roster[event_to_check] = event_to_check.weight var/datum/round_event_control/event_to_run = pick_weight(event_roster) - TriggerEvent(event_to_run) + if(event_to_run) + TriggerEvent(event_to_run) ///Does the last pre-flight checks for the passed event, and runs it if the event is ready. /datum/controller/subsystem/events/proc/TriggerEvent(datum/round_event_control/event_to_trigger) @@ -103,8 +115,8 @@ SUBSYSTEM_DEF(events) ///Sets the event frequency bounds back to their initial value. /datum/controller/subsystem/events/proc/resetFrequency() - frequency_lower = initial(frequency_lower) - frequency_upper = initial(frequency_upper) + frequency_lower = CONFIG_GET(number/events_frequency_lower) + frequency_upper = CONFIG_GET(number/events_frequency_upper) /** * HOLIDAYS diff --git a/code/controllers/subsystem/ipintel.dm b/code/controllers/subsystem/ipintel.dm index 83cbbc4c27efc..db397d514742f 100644 --- a/code/controllers/subsystem/ipintel.dm +++ b/code/controllers/subsystem/ipintel.dm @@ -1,13 +1,295 @@ SUBSYSTEM_DEF(ipintel) name = "XKeyScore" init_order = INIT_ORDER_XKEYSCORE - flags = SS_NO_FIRE - var/enabled = FALSE //disable at round start to avoid checking reconnects - var/throttle = 0 - var/errors = 0 + flags = SS_NO_INIT|SS_NO_FIRE + /// The threshold for probability to be considered a VPN and/or bad IP + var/probability_threshold - var/list/cache = list() + /// Cache for previously queried IP addresses and those stored in the database + var/list/datum/ip_intel/cached_queries = list() + /// The store for rate limiting + var/list/rate_limit_minute -/datum/controller/subsystem/ipintel/Initialize() - enabled = TRUE - return SS_INIT_SUCCESS +/// The ip intel for a given address +/datum/ip_intel + /// If this intel was just queried, the status of the query + var/query_status + var/result + var/address + var/date + +/datum/controller/subsystem/ipintel/OnConfigLoad() + var/list/fail_messages = list() + + var/contact_email = CONFIG_GET(string/ipintel_email) + + if(!length(contact_email)) + fail_messages += "No contact email" + + if(!findtext(contact_email, "@")) + fail_messages += "Invalid contact email" + + if(!length(CONFIG_GET(string/ipintel_base))) + fail_messages += "Invalid query base" + + if (!CONFIG_GET(flag/sql_enabled)) + fail_messages += "The database is not enabled" + + if(length(fail_messages)) + message_admins("IPIntel: Initialization failed check logs!") + logger.Log(LOG_CATEGORY_GAME_ACCESS, "IPIntel is not enabled because the configs are not valid.", list( + "fail_messages" = fail_messages, + )) + +/datum/controller/subsystem/ipintel/stat_entry(msg) + return "[..()] | M: [CONFIG_GET(number/ipintel_rate_minute) - rate_limit_minute]" + + +/datum/controller/subsystem/ipintel/proc/is_enabled() + return length(CONFIG_GET(string/ipintel_email)) && length(CONFIG_GET(string/ipintel_base)) && CONFIG_GET(flag/sql_enabled) + +/datum/controller/subsystem/ipintel/proc/get_address_intel_state(address, probability_override) + if (!is_enabled()) + return IPINTEL_GOOD_IP + var/datum/ip_intel/intel = query_address(address) + if(isnull(intel)) + stack_trace("query_address did not return an ip intel response") + return IPINTEL_UNKNOWN_INTERNAL_ERROR + + if(istext(intel)) + return intel + + if(!(intel.query_status in list("success", "cached"))) + return IPINTEL_UNKNOWN_QUERY_ERROR + var/check_probability = probability_override || CONFIG_GET(number/ipintel_rating_bad) + if(intel.result >= check_probability) + return IPINTEL_BAD_IP + return IPINTEL_GOOD_IP + +/datum/controller/subsystem/ipintel/proc/is_rate_limited() + var/static/minute_key + var/expected_minute_key = floor(REALTIMEOFDAY / 1 MINUTES) + + if(minute_key != expected_minute_key) + minute_key = expected_minute_key + rate_limit_minute = 0 + + if(rate_limit_minute >= CONFIG_GET(number/ipintel_rate_minute)) + return IPINTEL_RATE_LIMITED_MINUTE + return FALSE + +/datum/controller/subsystem/ipintel/proc/query_address(address, allow_cached = TRUE) + if (!is_enabled()) + return + if(allow_cached && fetch_cached_ip_intel(address)) + return cached_queries[address] + var/is_rate_limited = is_rate_limited() + if(is_rate_limited) + return is_rate_limited + rate_limit_minute += 1 + + var/query_base = "https://[CONFIG_GET(string/ipintel_base)]/check.php?ip=" + var/query = "[query_base][address]&contact=[CONFIG_GET(string/ipintel_email)]&flags=b&format=json" + + var/datum/http_request/request = new + request.prepare(RUSTG_HTTP_METHOD_GET, query) + request.execute_blocking() + var/datum/http_response/response = request.into_response() + var/list/data = json_decode(response.body) + // Log the response + logger.Log(LOG_CATEGORY_DEBUG, "ip check response body", data) + + var/datum/ip_intel/intel = new + intel.query_status = data["status"] + if(intel.query_status != "success") + return intel + intel.result = data["result"] + if(istext(intel.result)) + intel.result = text2num(intel.result) + intel.date = ISOtime() + intel.address = address + cached_queries[address] = intel + add_intel_to_database(intel) + return intel + +/datum/controller/subsystem/ipintel/proc/add_intel_to_database(datum/ip_intel/intel) + set waitfor = FALSE //no need to make the client connection wait for this step. + if (!SSdbcore.Connect()) + return + var/datum/db_query/query = SSdbcore.NewQuery( + "INSERT INTO [format_table_name("ipintel")] ( \ + ip, \ + intel \ + ) VALUES ( \ + INET_ATON(:address), \ + :result \ + )", list( + "address" = intel.address, + "result" = intel.result, + ) + ) + query.warn_execute() + query.sync() + qdel(query) + +/datum/controller/subsystem/ipintel/proc/fetch_cached_ip_intel(address) + if (!SSdbcore.Connect()) + return + var/ipintel_cache_length = CONFIG_GET(number/ipintel_cache_length) + var/date_restrictor = "" + var/sql_args = list("address" = address) + if(ipintel_cache_length > 1) + date_restrictor = " AND date > DATE_SUB(NOW(), INTERVAL :ipintel_cache_length DAY)" + sql_args["ipintel_cache_length"] = ipintel_cache_length + var/datum/db_query/query = SSdbcore.NewQuery( + "SELECT * FROM [format_table_name("ipintel")] WHERE ip = INET_ATON(:address)[date_restrictor]", + sql_args + ) + query.warn_execute() + query.sync() + if(query.status == DB_QUERY_BROKEN) + qdel(query) + return null + + query.NextRow() + var/list/data = query.item + qdel(query) + if(isnull(data)) + return null + + var/datum/ip_intel/intel = new + intel.query_status = "cached" + intel.result = data["intel"] + if(istext(intel.result)) + intel.result = text2num(intel.result) + intel.date = data["date"] + intel.address = address + return TRUE + +/datum/controller/subsystem/ipintel/proc/is_exempt(client/player) + if(player.holder || GLOB.deadmins[player.ckey]) + return TRUE + var/exempt_living_playtime = CONFIG_GET(number/ipintel_exempt_playtime_living) + if(exempt_living_playtime > 0) + var/list/play_records = player.prefs.exp + if (!play_records.len) + player.set_exp_from_db() + play_records = player.prefs.exp + if(length(play_records) && play_records[EXP_TYPE_LIVING] > exempt_living_playtime) + return TRUE + return FALSE + +/datum/controller/subsystem/ipintel/proc/is_whitelisted(ckey) + var/datum/db_query/query = SSdbcore.NewQuery( + "SELECT * FROM [format_table_name("ipintel_whitelist")] WHERE ckey = :ckey", list( + "ckey" = ckey + ) + ) + query.warn_execute() + query.sync() + if(query.status == DB_QUERY_BROKEN) + qdel(query) + return FALSE + query.NextRow() + . = !!query.item // if they have a row, they are whitelisted + qdel(query) + + +ADMIN_VERB(ipintel_allow, R_BAN, "Whitelist Player VPN", "Allow a player to connect even if they are using a VPN.", ADMIN_CATEGORY_IPINTEL, ckey as text) + if (!SSipintel.is_enabled()) + to_chat(user, "The ipintel system is not currently enabled but you can still edit the whitelists") + if(SSipintel.is_whitelisted(ckey)) + to_chat(user, "Player is already whitelisted.") + return + + var/datum/db_query/query = SSdbcore.NewQuery( + "INSERT INTO [format_table_name("ipintel_whitelist")] ( \ + ckey, \ + admin_ckey \ + ) VALUES ( \ + :ckey, \ + :admin_ckey \ + )", list( + "ckey" = ckey, + "admin_ckey" = user.ckey, + ) + ) + query.warn_execute() + query.sync() + qdel(query) + message_admins("IPINTEL: [key_name_admin(user)] has whitelisted '[ckey]'") + +ADMIN_VERB(ipintel_revoke, R_BAN, "Revoke Player VPN Whitelist", "Revoke a player's VPN whitelist.", ADMIN_CATEGORY_IPINTEL, ckey as text) + if (!SSipintel.is_enabled()) + to_chat(user, "The ipintel system is not currently enabled but you can still edit the whitelists") + if(!SSipintel.is_whitelisted(ckey)) + to_chat(user, "Player is not whitelisted.") + return + var/datum/db_query/query = SSdbcore.NewQuery( + "DELETE FROM [format_table_name("ipintel_whitelist")] WHERE ckey = :ckey", list( + "ckey" = ckey + ) + ) + query.warn_execute() + query.sync() + qdel(query) + message_admins("IPINTEL: [key_name_admin(user)] has revoked the VPN whitelist for '[ckey]'") + +/client/proc/check_ip_intel() + if (!SSipintel.is_enabled()) + return + if(SSipintel.is_exempt(src) || SSipintel.is_whitelisted(ckey)) + return + + var/intel_state = SSipintel.get_address_intel_state(address) + var/reject_bad_intel = CONFIG_GET(flag/ipintel_reject_bad) + var/reject_unknown_intel = CONFIG_GET(flag/ipintel_reject_unknown) + var/reject_rate_limited = CONFIG_GET(flag/ipintel_reject_rate_limited) + + var/connection_rejected = FALSE + var/datum/ip_intel/intel = SSipintel.cached_queries[address] + switch(intel_state) + if(IPINTEL_BAD_IP) + log_access("IPINTEL: [ckey] was flagged as a VPN with [intel.result * 100]% likelihood.") + if(reject_bad_intel) + to_chat_immediate(src, span_boldnotice("Your connection has been detected as a VPN.")) + connection_rejected = TRUE + else + message_admins("IPINTEL: [key_name_admin(src)] has been flagged as a VPN with [intel.result * 100]% likelihood.") + + if(IPINTEL_RATE_LIMITED_DAY, IPINTEL_RATE_LIMITED_MINUTE) + log_access("IPINTEL: [ckey] was unable to be checked due to the rate limit.") + if(reject_rate_limited) + to_chat_immediate(src, span_boldnotice("New connections are not being allowed at this time.")) + connection_rejected = TRUE + else + message_admins("IPINTEL: [key_name_admin(src)] was unable to be checked due to rate limiting.") + + if(IPINTEL_UNKNOWN_INTERNAL_ERROR, IPINTEL_UNKNOWN_QUERY_ERROR) + log_access("IPINTEL: [ckey] unable to be checked due to an error.") + if(reject_unknown_intel) + to_chat_immediate(src, span_boldnotice("Your connection cannot be processed at this time.")) + connection_rejected = TRUE + else + message_admins("IPINTEL: [key_name_admin(src)] was unable to be checked due to an error.") + + if(!connection_rejected) + return + + var/list/contact_where = list() + var/forum_url = CONFIG_GET(string/forumurl) + if(forum_url) + contact_where += list("Forums") + var/appeal_url = CONFIG_GET(string/banappeals) + if(appeal_url) + contact_where += list("Ban Appeals") + + var/message_string = "Your connection has been rejected at this time. If you believe this is in error or have any questions please contact an admin" + if(length(contact_where)) + message_string += " at [english_list(contact_where)]" + else + message_string += " somehow." + message_string += "." + + to_chat_immediate(src, span_userdanger(message_string)) + qdel(src) diff --git a/code/controllers/subsystem/job.dm b/code/controllers/subsystem/job.dm index 5f12370c60d7b..dc1091bcfc516 100644 --- a/code/controllers/subsystem/job.dm +++ b/code/controllers/subsystem/job.dm @@ -557,7 +557,7 @@ SUBSYSTEM_DEF(job) SEND_SIGNAL(equipping, COMSIG_JOB_RECEIVED, job) equipping.mind?.set_assigned_role_with_greeting(job, player_client) - equipping.on_job_equipping(job) + equipping.on_job_equipping(job, player_client) job.announce_job(equipping) if(player_client?.holder) diff --git a/code/controllers/subsystem/language.dm b/code/controllers/subsystem/language.dm deleted file mode 100644 index 88e92e2f93c5f..0000000000000 --- a/code/controllers/subsystem/language.dm +++ /dev/null @@ -1,17 +0,0 @@ -SUBSYSTEM_DEF(language) - name = "Language" - init_order = INIT_ORDER_LANGUAGE - flags = SS_NO_FIRE - -/datum/controller/subsystem/language/Initialize() - for(var/datum/language/language as anything in subtypesof(/datum/language)) - if(!initial(language.key)) - continue - - GLOB.all_languages += language - GLOB.language_types_by_name[initial(language.name)] = language - - var/datum/language/instance = new language - GLOB.language_datum_instances[language] = instance - - return SS_INIT_SUCCESS diff --git a/code/controllers/subsystem/lua.dm b/code/controllers/subsystem/lua.dm index b9ad7dc1644e3..1ab88a01746b7 100644 --- a/code/controllers/subsystem/lua.dm +++ b/code/controllers/subsystem/lua.dm @@ -53,7 +53,7 @@ SUBSYSTEM_DEF(lua) world.SetConfig("env", "LUAU_PATH", jointext(lua_path, ";")) /datum/controller/subsystem/lua/Shutdown() - AUXTOOLS_SHUTDOWN(AUXLUA) + AUXTOOLS_FULL_SHUTDOWN(AUXLUA) /datum/controller/subsystem/lua/proc/queue_resume(datum/lua_state/state, index, arguments) if(!initialized) diff --git a/code/datums/systems/ds/materials.dm b/code/controllers/subsystem/materials.dm similarity index 83% rename from code/datums/systems/ds/materials.dm rename to code/controllers/subsystem/materials.dm index 527c1a3d64224..3a704d01a82fd 100644 --- a/code/datums/systems/ds/materials.dm +++ b/code/controllers/subsystem/materials.dm @@ -1,12 +1,12 @@ /*! How material datums work -Materials are now instanced datums, with an associative list of them being kept in DSmaterials. We only instance the materials once and then re-use these instances for everything. +Materials are now instanced datums, with an associative list of them being kept in SSmaterials. We only instance the materials once and then re-use these instances for everything. These materials call on_applied() on whatever item they are applied to, common effects are adding components, changing color and changing description. This allows us to differentiate items based on the material they are made out of.area */ - -DATASYSTEM_DEF(materials) +SUBSYSTEM_DEF(materials) name = "Materials" + flags = SS_NO_FIRE | SS_NO_INIT ///Dictionary of material.id || material ref var/list/materials ///Dictionary of type || list of material refs @@ -21,22 +21,22 @@ DATASYSTEM_DEF(materials) var/list/list/material_combos ///List of stackcrafting recipes for materials using base recipes var/list/base_stack_recipes = list( - new /datum/stack_recipe("Chair", /obj/structure/chair/greyscale, one_per_turf = TRUE, on_solid_ground = TRUE, applies_mats = TRUE, category = CAT_FURNITURE), - new /datum/stack_recipe("Toilet", /obj/structure/toilet/greyscale, one_per_turf = TRUE, on_solid_ground = TRUE, applies_mats = TRUE, category = CAT_FURNITURE), - new /datum/stack_recipe("Sink Frame", /obj/structure/sinkframe, one_per_turf = TRUE, on_solid_ground = TRUE, applies_mats = TRUE, category = CAT_FURNITURE), - new /datum/stack_recipe("Material floor tile", /obj/item/stack/tile/material, 1, 4, 20, applies_mats = TRUE, check_density = FALSE, category = CAT_TILES), - new /datum/stack_recipe("Material airlock assembly", /obj/structure/door_assembly/door_assembly_material, 4, time = 5 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, applies_mats = TRUE, category = CAT_DOORS), + new /datum/stack_recipe("Chair", /obj/structure/chair/greyscale, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND | CRAFT_APPLIES_MATS, category = CAT_FURNITURE), + new /datum/stack_recipe("Toilet", /obj/structure/toilet/greyscale, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND | CRAFT_APPLIES_MATS, category = CAT_FURNITURE), + new /datum/stack_recipe("Sink Frame", /obj/structure/sinkframe, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND | CRAFT_APPLIES_MATS, category = CAT_FURNITURE), + new /datum/stack_recipe("Material floor tile", /obj/item/stack/tile/material, 1, 4, 20, crafting_flags = CRAFT_APPLIES_MATS, category = CAT_TILES), + new /datum/stack_recipe("Material airlock assembly", /obj/structure/door_assembly/door_assembly_material, 4, time = 5 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND | CRAFT_APPLIES_MATS, category = CAT_DOORS), ) ///List of stackcrafting recipes for materials using rigid recipes var/list/rigid_stack_recipes = list( - new /datum/stack_recipe("Carving block", /obj/structure/carving_block, 5, time = 3 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, applies_mats = TRUE, category = CAT_STRUCTURE), + new /datum/stack_recipe("Carving block", /obj/structure/carving_block, 5, time = 3 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND | CRAFT_APPLIES_MATS, category = CAT_STRUCTURE), ) ///A list of dimensional themes used by the dimensional anomaly and other things, most of which require materials to function. var/list/datum/dimension_theme/dimensional_themes ///Ran on initialize, populated the materials and materials_by_category dictionaries with their appropiate vars (See these variables for more info) -/datum/system/materials/proc/InitializeMaterials() +/datum/controller/subsystem/materials/proc/InitializeMaterials() materials = list() materials_by_type = list() materialids_by_type = list() @@ -57,7 +57,7 @@ DATASYSTEM_DEF(materials) * - [arguments][/list]: The arguments to use to create the material datum * - The first element is the type of material to initialize. */ -/datum/system/materials/proc/InitializeMaterial(list/arguments) +/datum/controller/subsystem/materials/proc/InitializeMaterial(list/arguments) var/datum/material/mat_type = arguments[1] if(initial(mat_type.init_flags) & MATERIAL_INIT_BESPOKE) arguments[1] = GetIdFromArguments(arguments) @@ -89,13 +89,13 @@ DATASYSTEM_DEF(materials) * - If the material type is bespoke a text ID is generated from the arguments list and used to load a material datum from the cache. * - The following elements are used to generate bespoke IDs */ -/datum/system/materials/proc/_GetMaterialRef(list/arguments) +/datum/controller/subsystem/materials/proc/_GetMaterialRef(list/arguments) if(!materials) InitializeMaterials() var/datum/material/key = arguments[1] if(istype(key)) - return key // We are assuming here that the only thing allowed to create material datums is [/datum/system/materials/proc/InitializeMaterial] + return key // We are assuming here that the only thing allowed to create material datums is [/datum/controller/subsystem/materials/proc/InitializeMaterial] if(istext(key)) // Handle text id . = materials[key] @@ -123,7 +123,7 @@ DATASYSTEM_DEF(materials) * Named arguments can appear in any order and we need them to appear after ordered arguments * We assume that no one will pass in a named argument with a value of null **/ -/datum/system/materials/proc/GetIdFromArguments(list/arguments) +/datum/controller/subsystem/materials/proc/GetIdFromArguments(list/arguments) var/datum/material/mattype = arguments[1] var/list/fullid = list("[initial(mattype.id) || mattype]") var/list/named_arguments = list() @@ -149,7 +149,7 @@ DATASYSTEM_DEF(materials) /// Returns a list to be used as an object's custom_materials. Lists will be cached and re-used based on the parameters. -/datum/system/materials/proc/FindOrCreateMaterialCombo(list/materials_declaration, multiplier) +/datum/controller/subsystem/materials/proc/FindOrCreateMaterialCombo(list/materials_declaration, multiplier) if(!LAZYLEN(materials_declaration)) return null // If we get a null we pass it right back, we don't want to generate stack traces just because something is clearing out its materials list. diff --git a/code/controllers/subsystem/movement/cliff_falling.dm b/code/controllers/subsystem/movement/cliff_falling.dm index 65089f0ea1b29..b3d7f114dfba6 100644 --- a/code/controllers/subsystem/movement/cliff_falling.dm +++ b/code/controllers/subsystem/movement/cliff_falling.dm @@ -10,7 +10,7 @@ MOVEMENT_SUBSYSTEM_DEF(cliff_falling) /datum/controller/subsystem/movement/cliff_falling/proc/start_falling(atom/movable/faller, turf/open/cliff/cliff) // Make them move - var/mover = DSmove_manager.move(moving = faller, direction = cliff.fall_direction, delay = cliff.fall_speed, subsystem = src, priority = MOVEMENT_ABOVE_SPACE_PRIORITY, flags = MOVEMENT_LOOP_OUTSIDE_CONTROL | MOVEMENT_LOOP_NO_DIR_UPDATE) + var/mover = GLOB.move_manager.move(moving = faller, direction = cliff.fall_direction, delay = cliff.fall_speed, subsystem = src, priority = MOVEMENT_ABOVE_SPACE_PRIORITY, flags = MOVEMENT_LOOP_OUTSIDE_CONTROL | MOVEMENT_LOOP_NO_DIR_UPDATE) cliff_grinders[faller] = mover diff --git a/code/controllers/subsystem/movement/movement_types.dm b/code/controllers/subsystem/movement/movement_types.dm index 3567e881b14c3..50864f731e21a 100644 --- a/code/controllers/subsystem/movement/movement_types.dm +++ b/code/controllers/subsystem/movement/movement_types.dm @@ -162,7 +162,7 @@ status &= ~MOVELOOP_STATUS_PAUSED ///Removes the atom from some movement subsystem. Defaults to SSmovement -/datum/system/move_manager/proc/stop_looping(atom/movable/moving, datum/controller/subsystem/movement/subsystem = SSmovement) +/datum/move_manager/proc/stop_looping(atom/movable/moving, datum/controller/subsystem/movement/subsystem = SSmovement) var/datum/movement_packet/our_info = moving.move_packet if(!our_info) return FALSE @@ -183,7 +183,7 @@ * flags - Set of bitflags that effect move loop behavior in some way. Check _DEFINES/movement.dm * **/ -/datum/system/move_manager/proc/move(moving, direction, delay, timeout, subsystem, priority, flags, datum/extra_info) +/datum/move_manager/proc/move(moving, direction, delay, timeout, subsystem, priority, flags, datum/extra_info) return add_to_loop(moving, subsystem, /datum/move_loop/move, priority, flags, extra_info, delay, timeout, direction) ///Replacement for walk() @@ -224,7 +224,7 @@ * flags - Set of bitflags that effect move loop behavior in some way. Check _DEFINES/movement.dm * **/ -/datum/system/move_manager/proc/force_move_dir(moving, direction, delay, timeout, subsystem, priority, flags, datum/extra_info) +/datum/move_manager/proc/force_move_dir(moving, direction, delay, timeout, subsystem, priority, flags, datum/extra_info) return add_to_loop(moving, subsystem, /datum/move_loop/move/force, priority, flags, extra_info, delay, timeout, direction) /datum/move_loop/move/force @@ -281,7 +281,7 @@ * flags - Set of bitflags that effect move loop behavior in some way. Check _DEFINES/movement.dm * **/ -/datum/system/move_manager/proc/force_move(moving, chasing, delay, timeout, subsystem, priority, flags, datum/extra_info) +/datum/move_manager/proc/force_move(moving, chasing, delay, timeout, subsystem, priority, flags, datum/extra_info) return add_to_loop(moving, subsystem, /datum/move_loop/has_target/force_move, priority, flags, extra_info, delay, timeout, chasing) ///Used for force-move loops @@ -315,7 +315,7 @@ * flags - Set of bitflags that effect move loop behavior in some way. Check _DEFINES/movement.dm * **/ -/datum/system/move_manager/proc/jps_move(moving, +/datum/move_manager/proc/jps_move(moving, chasing, delay, timeout, @@ -493,7 +493,7 @@ * flags - Set of bitflags that effect move loop behavior in some way. Check _DEFINES/movement.dm * **/ -/datum/system/move_manager/proc/move_to(moving, chasing, min_dist, delay, timeout, subsystem, priority, flags, datum/extra_info) +/datum/move_manager/proc/move_to(moving, chasing, min_dist, delay, timeout, subsystem, priority, flags, datum/extra_info) return add_to_loop(moving, subsystem, /datum/move_loop/has_target/dist_bound/move_to, priority, flags, extra_info, delay, timeout, chasing, min_dist) ///Wrapper around walk_to() @@ -527,7 +527,7 @@ * flags - Set of bitflags that effect move loop behavior in some way. Check _DEFINES/movement.dm * **/ -/datum/system/move_manager/proc/move_away(moving, chasing, max_dist, delay, timeout, subsystem, priority, flags, datum/extra_info) +/datum/move_manager/proc/move_away(moving, chasing, max_dist, delay, timeout, subsystem, priority, flags, datum/extra_info) return add_to_loop(moving, subsystem, /datum/move_loop/has_target/dist_bound/move_away, priority, flags, extra_info, delay, timeout, chasing, max_dist) ///Wrapper around walk_away() @@ -562,7 +562,7 @@ * flags - Set of bitflags that effect move loop behavior in some way. Check _DEFINES/movement.dm * **/ -/datum/system/move_manager/proc/move_towards(moving, chasing, delay, home, timeout, subsystem, priority, flags, datum/extra_info) +/datum/move_manager/proc/move_towards(moving, chasing, delay, home, timeout, subsystem, priority, flags, datum/extra_info) return add_to_loop(moving, subsystem, /datum/move_loop/has_target/move_towards, priority, flags, extra_info, delay, timeout, chasing, home) /** @@ -581,7 +581,7 @@ * flags - Set of bitflags that effect move loop behavior in some way. Check _DEFINES/movement.dm * **/ -/datum/system/move_manager/proc/home_onto(moving, chasing, delay, timeout, subsystem, priority, flags, datum/extra_info) +/datum/move_manager/proc/home_onto(moving, chasing, delay, timeout, subsystem, priority, flags, datum/extra_info) return move_towards(moving, chasing, delay, TRUE, timeout, subsystem, priority, flags, extra_info) ///Used as a alternative to walk_towards @@ -717,7 +717,7 @@ * flags - Set of bitflags that effect move loop behavior in some way. Check _DEFINES/movement.dm * **/ -/datum/system/move_manager/proc/move_towards_legacy(moving, chasing, delay, timeout, subsystem, priority, flags, datum/extra_info) +/datum/move_manager/proc/move_towards_legacy(moving, chasing, delay, timeout, subsystem, priority, flags, datum/extra_info) return add_to_loop(moving, subsystem, /datum/move_loop/has_target/move_towards_budget, priority, flags, extra_info, delay, timeout, chasing) ///The actual implementation of walk_towards() @@ -743,7 +743,7 @@ * priority - Defines how different move loops override each other. Lower numbers beat higher numbers, equal defaults to what currently exists. Defaults to MOVEMENT_DEFAULT_PRIORITY * flags - Set of bitflags that effect move loop behavior in some way. Check _DEFINES/movement.dm */ -/datum/system/move_manager/proc/freeze(moving, halted_turf, delay, timeout, subsystem, priority, flags, datum/extra_info) +/datum/move_manager/proc/freeze(moving, halted_turf, delay, timeout, subsystem, priority, flags, datum/extra_info) return add_to_loop(moving, subsystem, /datum/move_loop/freeze, priority, flags, extra_info, delay, timeout, halted_turf) /// As close as you can get to a "do-nothing" move loop, the pure intention of this is to absolutely resist all and any automated movement until the move loop times out. @@ -767,7 +767,7 @@ * flags - Set of bitflags that effect move loop behavior in some way. Check _DEFINES/movement.dm * **/ -/datum/system/move_manager/proc/move_rand(moving, directions, delay, timeout, subsystem, priority, flags, datum/extra_info) +/datum/move_manager/proc/move_rand(moving, directions, delay, timeout, subsystem, priority, flags, datum/extra_info) if(!directions) directions = GLOB.alldirs return add_to_loop(moving, subsystem, /datum/move_loop/move_rand, priority, flags, extra_info, delay, timeout, directions) @@ -819,7 +819,7 @@ * flags - Set of bitflags that effect move loop behavior in some way. Check _DEFINES/movement.dm * **/ -/datum/system/move_manager/proc/move_to_rand(moving, delay, timeout, subsystem, priority, flags, datum/extra_info) +/datum/move_manager/proc/move_to_rand(moving, delay, timeout, subsystem, priority, flags, datum/extra_info) return add_to_loop(moving, subsystem, /datum/move_loop/move_to_rand, priority, flags, extra_info, delay, timeout) ///Wrapper around step_rand @@ -845,7 +845,7 @@ * flags - Set of bitflags that effect move loop behavior in some way. Check _DEFINES/movement.dm * **/ -/datum/system/move_manager/proc/move_disposals(moving, delay, timeout, subsystem, priority, flags, datum/extra_info) +/datum/move_manager/proc/move_disposals(moving, delay, timeout, subsystem, priority, flags, datum/extra_info) return add_to_loop(moving, subsystem, /datum/move_loop/disposal_holder, priority, flags, extra_info, delay, timeout) /// Disposal holders need to move through a chain of pipes diff --git a/code/controllers/subsystem/pai.dm b/code/controllers/subsystem/pai.dm index 58f4eda0a05e7..e3d47a5c0cd6b 100644 --- a/code/controllers/subsystem/pai.dm +++ b/code/controllers/subsystem/pai.dm @@ -17,6 +17,11 @@ SUBSYSTEM_DEF(pai) ui.open() ui.set_autoupdate(FALSE) +/datum/controller/subsystem/pai/Recover() + . = ..() + candidates = SSpai.candidates + pai_card_list = SSpai.pai_card_list + /datum/controller/subsystem/pai/ui_state(mob/user) return GLOB.observer_state @@ -35,13 +40,14 @@ SUBSYSTEM_DEF(pai) . = ..() if(.) return TRUE - var/datum/pai_candidate/candidate = candidates[usr.ckey] - if(is_banned_from(usr.ckey, ROLE_PAI)) - to_chat(usr, span_warning("You are banned from playing pAI!")) + var/mob/user = ui.user + var/datum/pai_candidate/candidate = candidates[user.ckey] + if(is_banned_from(user.ckey, ROLE_PAI)) + to_chat(user, span_warning("You are banned from playing pAI!")) ui.close() return FALSE if(isnull(candidate)) - to_chat(usr, span_warning("There was an error. Please resubmit.")) + to_chat(user, span_warning("There was an error. Please resubmit.")) ui.close() return FALSE switch(action) @@ -49,19 +55,19 @@ SUBSYSTEM_DEF(pai) candidate.comments = trim(params["comments"], MAX_BROADCAST_LEN) candidate.description = trim(params["description"], MAX_BROADCAST_LEN) candidate.name = trim(params["name"], MAX_NAME_LEN) - candidate.ckey = usr.ckey + candidate.ckey = user.ckey candidate.ready = TRUE ui.close() - submit_alert() + submit_alert(user) return TRUE if("save") candidate.comments = params["comments"] candidate.description = params["description"] candidate.name = params["name"] - candidate.savefile_save(usr) + candidate.savefile_save(user) return TRUE if("load") - candidate.savefile_load(usr) + candidate.savefile_load(user) ui.send_full_update() return TRUE return FALSE @@ -84,14 +90,14 @@ SUBSYSTEM_DEF(pai) /** * Pings all pAI cards on the station that new candidates are available. */ -/datum/controller/subsystem/pai/proc/submit_alert() +/datum/controller/subsystem/pai/proc/submit_alert(mob/user) if(submit_spam) - to_chat(usr, span_warning("Your candidacy has been submitted, but pAI cards have been alerted too recently.")) + to_chat(user, span_warning("Your candidacy has been submitted, but pAI cards have been alerted too recently.")) return FALSE submit_spam = TRUE for(var/obj/item/pai_card/pai_card as anything in pai_card_list) if(!pai_card.pai) pai_card.alert_update() - to_chat(usr, span_notice("Your pAI candidacy has been submitted!")) - addtimer(VARSET_CALLBACK(src, submit_spam, FALSE), PAI_SPAM_TIME, TIMER_UNIQUE | TIMER_STOPPABLE | TIMER_CLIENT_TIME | TIMER_DELETE_ME) + to_chat(user, span_notice("Your pAI candidacy has been submitted!")) + addtimer(VARSET_CALLBACK(src, submit_spam, FALSE), PAI_SPAM_TIME, TIMER_UNIQUE|TIMER_DELETE_ME) return TRUE diff --git a/code/controllers/subsystem/polling.dm b/code/controllers/subsystem/polling.dm index e48dddfe3f0ab..cbbcca59fa6e2 100644 --- a/code/controllers/subsystem/polling.dm +++ b/code/controllers/subsystem/polling.dm @@ -79,13 +79,13 @@ SUBSYSTEM_DEF(polling) for(var/mob/candidate_mob as anything in group) if(!candidate_mob.client) continue - // Universal opt-out for all players if it's for a role. - if(role && (!candidate_mob.client.prefs.read_preference(/datum/preference/toggle/ghost_roles))) + // Universal opt-out for all players. + if(!candidate_mob.client.prefs.read_preference(/datum/preference/toggle/ghost_roles)) continue // Opt-out for admins whom are currently adminned. - if(role && (!candidate_mob.client.prefs.read_preference(/datum/preference/toggle/ghost_roles_as_admin)) && candidate_mob.client.holder) + if((!candidate_mob.client.prefs.read_preference(/datum/preference/toggle/ghost_roles_as_admin)) && candidate_mob.client.holder) continue - if(role && !is_eligible(candidate_mob, role, check_jobban, ignore_category)) + if(!is_eligible(candidate_mob, role, check_jobban, ignore_category)) continue if(start_signed_up) diff --git a/code/controllers/subsystem/processing/quirks.dm b/code/controllers/subsystem/processing/quirks.dm index a915346cebdf0..45354d4bd6164 100644 --- a/code/controllers/subsystem/processing/quirks.dm +++ b/code/controllers/subsystem/processing/quirks.dm @@ -10,10 +10,11 @@ GLOBAL_LIST_INIT_TYPED(quirk_blacklist, /list/datum/quirk, list( list(/datum/quirk/no_taste, /datum/quirk/vegetarian, /datum/quirk/deviant_tastes, /datum/quirk/gamer), list(/datum/quirk/pineapple_liker, /datum/quirk/pineapple_hater, /datum/quirk/gamer), list(/datum/quirk/alcohol_tolerance, /datum/quirk/light_drinker), - list(/datum/quirk/item_quirk/clown_enjoyer, /datum/quirk/item_quirk/mime_fan, /datum/quirk/item_quirk/pride_pin), + list(/datum/quirk/item_quirk/clown_enjoyer, /datum/quirk/item_quirk/mime_fan), list(/datum/quirk/bad_touch, /datum/quirk/friendly), list(/datum/quirk/extrovert, /datum/quirk/introvert), - list(/datum/quirk/prosthetic_limb, /datum/quirk/quadruple_amputee, /datum/quirk/transhumanist, /datum/quirk/body_purist), + list(/datum/quirk/prosthetic_limb, /datum/quirk/quadruple_amputee, /datum/quirk/body_purist), + list(/datum/quirk/transhumanist, /datum/quirk/body_purist), list(/datum/quirk/prosthetic_organ, /datum/quirk/tin_man, /datum/quirk/body_purist), list(/datum/quirk/quadruple_amputee, /datum/quirk/paraplegic, /datum/quirk/hemiplegic), list(/datum/quirk/quadruple_amputee, /datum/quirk/frail), diff --git a/code/controllers/subsystem/processing/station.dm b/code/controllers/subsystem/processing/station.dm index 8c57ab08fe842..883ab37456d2c 100644 --- a/code/controllers/subsystem/processing/station.dm +++ b/code/controllers/subsystem/processing/station.dm @@ -95,8 +95,7 @@ PROCESSING_SUBSYSTEM_DEF(station) return - for(var/i in subtypesof(/datum/station_trait)) - var/datum/station_trait/trait_typepath = i + for(var/datum/station_trait/trait_typepath as anything in subtypesof(/datum/station_trait)) // If forced, (probably debugging), just set it up now, keep it out of the pool. if(initial(trait_typepath.force)) @@ -115,6 +114,14 @@ PROCESSING_SUBSYSTEM_DEF(station) if(!(initial(trait_typepath.trait_flags) & STATION_TRAIT_REQUIRES_AI) && !CONFIG_GET(flag/allow_ai)) //can't have AI traits without AI continue + if(ispath(trait_typepath, /datum/station_trait/random_event_weight_modifier)) //Don't add event modifiers for events that can't occur on our map. + var/datum/station_trait/random_event_weight_modifier/random_trait_typepath = trait_typepath + var/datum/round_event_control/event_to_check = initial(random_trait_typepath.event_control_path) + if(event_to_check) + event_to_check = new event_to_check() + if(!event_to_check.valid_for_map()) + continue + selectable_traits_by_types[initial(trait_typepath.trait_type)][trait_typepath] = initial(trait_typepath.weight) var/positive_trait_budget = text2num(pick_weight(CONFIG_GET(keyed_list/positive_station_traits))) diff --git a/code/controllers/subsystem/profiler.dm b/code/controllers/subsystem/profiler.dm index dc06c2bc6ae7f..d149bc5e77c93 100644 --- a/code/controllers/subsystem/profiler.dm +++ b/code/controllers/subsystem/profiler.dm @@ -1,11 +1,8 @@ -#define PROFILER_FILENAME "profiler.json" -#define SENDMAPS_FILENAME "sendmaps.json" - SUBSYSTEM_DEF(profiler) name = "Profiler" init_order = INIT_ORDER_PROFILER runlevels = RUNLEVELS_DEFAULT | RUNLEVEL_LOBBY - wait = 3000 + wait = 300 SECONDS var/fetch_cost = 0 var/write_cost = 0 @@ -19,6 +16,7 @@ SUBSYSTEM_DEF(profiler) StartProfiling() else StopProfiling() //Stop the early start profiler + wait = CONFIG_GET(number/profiler_interval) return SS_INIT_SUCCESS /datum/controller/subsystem/profiler/OnConfigLoad() @@ -56,12 +54,12 @@ SUBSYSTEM_DEF(profiler) if(!length(current_profile_data)) //Would be nice to have explicit proc to check this stack_trace("Warning, profiling stopped manually before dump.") - var/prof_file = file("[GLOB.log_directory]/[PROFILER_FILENAME]") + var/prof_file = file("[GLOB.log_directory]/profiler/profiler-[round(world.time * 0.1, 10)].json") if(fexists(prof_file)) fdel(prof_file) if(!length(current_sendmaps_data)) //Would be nice to have explicit proc to check this stack_trace("Warning, sendmaps profiling stopped manually before dump.") - var/sendmaps_file = file("[GLOB.log_directory]/[SENDMAPS_FILENAME]") + var/sendmaps_file = file("[GLOB.log_directory]/profiler/sendmaps-[round(world.time * 0.1, 10)].json") if(fexists(sendmaps_file)) fdel(sendmaps_file) @@ -70,5 +68,3 @@ SUBSYSTEM_DEF(profiler) WRITE_FILE(sendmaps_file, current_sendmaps_data) write_cost = MC_AVERAGE(write_cost, TICK_DELTA_TO_MS(TICK_USAGE_REAL - timer)) -#undef PROFILER_FILENAME -#undef SENDMAPS_FILENAME diff --git a/code/controllers/subsystem/radiation.dm b/code/controllers/subsystem/radiation.dm index d52fe83856a45..6a9cc631cf529 100644 --- a/code/controllers/subsystem/radiation.dm +++ b/code/controllers/subsystem/radiation.dm @@ -74,7 +74,7 @@ SUBSYSTEM_DEF(radiation) if(pulse_information.chance < 100) // Prevents log(0) runtime if chance is 100% intensity = -log(1 - pulse_information.chance / 100) * (1 + pulse_information.max_range / 2) ** 2 - perceived_intensity = intensity * INVERSE((1 + get_dist_euclidian(source, target)) ** 2) // Diminishes over range. + perceived_intensity = intensity * INVERSE((1 + get_dist_euclidean(source, target)) ** 2) // Diminishes over range. perceived_intensity *= (current_insulation - pulse_information.threshold) * INVERSE(1 - pulse_information.threshold) // Perceived intensity decreases as objects that absorb radiation block its trajectory. perceived_chance = 100 * (1 - NUM_E ** -perceived_intensity) else diff --git a/code/controllers/subsystem/research.dm b/code/controllers/subsystem/research.dm index 612c599c0f62c..b51e686c6a644 100644 --- a/code/controllers/subsystem/research.dm +++ b/code/controllers/subsystem/research.dm @@ -7,6 +7,7 @@ SUBSYSTEM_DEF(research) //TECHWEB STATIC var/list/techweb_nodes = list() //associative id = node datum var/list/techweb_designs = list() //associative id = node datum + var/list/datum/design/item_to_design = list() //typepath = list of design datums ///List of all techwebs, generating points or not. ///Autolathes, Mechfabs, and others all have shared techwebs, for example. @@ -162,6 +163,7 @@ SUBSYSTEM_DEF(research) /datum/controller/subsystem/research/proc/initialize_all_techweb_designs(clearall = FALSE) if(islist(techweb_designs) && clearall) + item_to_design = null QDEL_LIST(techweb_designs) var/list/returned = list() for(var/path in subtypesof(/datum/design)) @@ -176,6 +178,11 @@ SUBSYSTEM_DEF(research) stack_trace("WARNING: Design ID clash with ID [initial(DN.id)] detected! Path: [path]") errored_datums[DN] = initial(DN.id) continue + var/build_path = initial(DN.build_path) + if(!isnull(build_path)) + if(!(build_path in item_to_design)) + item_to_design[build_path] = list() + item_to_design[build_path] += DN DN.InitializeMaterials() //Initialize the materials in the design returned[initial(DN.id)] = DN techweb_designs = returned @@ -325,3 +332,16 @@ SUBSYSTEM_DEF(research) continue valid_servers += server return valid_servers + +/// Returns true if you can make an anomaly core of the provided type +/datum/controller/subsystem/research/proc/is_core_available(core_type) + if (!ispath(core_type, /obj/item/assembly/signaler/anomaly)) + return FALSE // The fuck are you checking this random object for? + var/already_made = created_anomaly_types[core_type] || 0 + var/hard_limit = anomaly_hard_limit_by_type[core_type] + return already_made < hard_limit + +/// Increase our tracked number of cores of this type +/datum/controller/subsystem/research/proc/increment_existing_anomaly_cores(core_type) + var/existing = created_anomaly_types[core_type] || 0 + created_anomaly_types[core_type] = existing + 1 diff --git a/code/controllers/subsystem/sprite_accessories.dm b/code/controllers/subsystem/sprite_accessories.dm new file mode 100644 index 0000000000000..f381df80df6da --- /dev/null +++ b/code/controllers/subsystem/sprite_accessories.dm @@ -0,0 +1,154 @@ +/// The non gender specific list that we get from init_sprite_accessory_subtypes() +#define DEFAULT_SPRITE_LIST "default_sprites" +/// The male specific list that we get from init_sprite_accessory_subtypes() +#define MALE_SPRITE_LIST "male_sprites" +/// The female specific list that we get from init_sprite_accessory_subtypes() +#define FEMALE_SPRITE_LIST "female_sprites" + +/// subsystem that just holds lists of sprite accessories for accession in generating said sprites. +/// A sprite accessory is something that we add to a human sprite to make them look different. This is hair, facial hair, underwear, mutant bits, etc. +SUBSYSTEM_DEF(accessories) // just 'accessories' for brevity + name = "Sprite Accessories" + flags = SS_NO_FIRE | SS_NO_INIT + + //Hairstyles + var/list/hairstyles_list //! stores /datum/sprite_accessory/hair indexed by name + var/list/hairstyles_male_list //! stores only hair names + var/list/hairstyles_female_list //! stores only hair names + var/list/facial_hairstyles_list //! stores /datum/sprite_accessory/facial_hair indexed by name + var/list/facial_hairstyles_male_list //! stores only hair names + var/list/facial_hairstyles_female_list //! stores only hair names + var/list/hair_gradients_list //! stores /datum/sprite_accessory/hair_gradient indexed by name + var/list/facial_hair_gradients_list //! stores /datum/sprite_accessory/facial_hair_gradient indexed by name + + //Underwear + var/list/underwear_list //! stores /datum/sprite_accessory/underwear indexed by name + var/list/underwear_m //! stores only underwear name + var/list/underwear_f //! stores only underwear name + + //Undershirts + var/list/undershirt_list //! stores /datum/sprite_accessory/undershirt indexed by name + var/list/undershirt_m //! stores only undershirt name + var/list/undershirt_f //! stores only undershirt name + + //Socks + var/list/socks_list //! stores /datum/sprite_accessory/socks indexed by name + + //Lizard Bits (all datum lists indexed by name) + var/list/lizard_markings_list + var/list/snouts_list + var/list/horns_list + var/list/frills_list + var/list/spines_list + var/list/legs_list + var/list/tail_spines_list + + //Mutant Human bits + var/list/tails_list_human + var/list/tails_list_lizard + var/list/tails_list_monkey + var/list/ears_list + var/list/wings_list + var/list/wings_open_list + var/list/moth_wings_list + var/list/moth_antennae_list + var/list/moth_markings_list + var/list/caps_list + var/list/pod_hair_list + +/datum/controller/subsystem/accessories/PreInit() // this stuff NEEDS to be set up before GLOB for preferences and stuff to work so this must go here. sorry + setup_lists() + init_hair_gradients() + +/// Sets up all of the lists for later utilization in the round and building sprites. +/// In an ideal world we could tack everything that just needed `DEFAULT_SPRITE_LIST` into static variables on the top, but due to the initialization order +/// where this subsystem will initialize BEFORE statics, it's just not feasible since this all needs to be ready for actual subsystems to use. +/// Sorry. +/datum/controller/subsystem/accessories/proc/setup_lists() + var/hair_lists = init_sprite_accessory_subtypes(/datum/sprite_accessory/hair) + hairstyles_list = hair_lists[DEFAULT_SPRITE_LIST] + hairstyles_male_list = hair_lists[MALE_SPRITE_LIST] + hairstyles_female_list = hair_lists[FEMALE_SPRITE_LIST] + + var/facial_hair_lists = init_sprite_accessory_subtypes(/datum/sprite_accessory/facial_hair) + facial_hairstyles_list = facial_hair_lists[DEFAULT_SPRITE_LIST] + facial_hairstyles_male_list = facial_hair_lists[MALE_SPRITE_LIST] + facial_hairstyles_female_list = facial_hair_lists[FEMALE_SPRITE_LIST] + + var/underwear_lists = init_sprite_accessory_subtypes(/datum/sprite_accessory/underwear) + underwear_list = underwear_lists[DEFAULT_SPRITE_LIST] + underwear_m = underwear_lists[MALE_SPRITE_LIST] + underwear_f = underwear_lists[FEMALE_SPRITE_LIST] + + var/undershirt_lists = init_sprite_accessory_subtypes(/datum/sprite_accessory/undershirt) + undershirt_list = undershirt_lists[DEFAULT_SPRITE_LIST] + undershirt_m = undershirt_lists[MALE_SPRITE_LIST] + undershirt_f = undershirt_lists[FEMALE_SPRITE_LIST] + + socks_list = init_sprite_accessory_subtypes(/datum/sprite_accessory/socks)[DEFAULT_SPRITE_LIST] + + lizard_markings_list = init_sprite_accessory_subtypes(/datum/sprite_accessory/lizard_markings)[DEFAULT_SPRITE_LIST] + tails_list_human = init_sprite_accessory_subtypes(/datum/sprite_accessory/tails/human, add_blank = TRUE)[DEFAULT_SPRITE_LIST] + tails_list_lizard = init_sprite_accessory_subtypes(/datum/sprite_accessory/tails/lizard, add_blank = TRUE)[DEFAULT_SPRITE_LIST] + tails_list_monkey = init_sprite_accessory_subtypes(/datum/sprite_accessory/tails/monkey, add_blank = TRUE)[DEFAULT_SPRITE_LIST] + snouts_list = init_sprite_accessory_subtypes(/datum/sprite_accessory/snouts)[DEFAULT_SPRITE_LIST] + horns_list = init_sprite_accessory_subtypes(/datum/sprite_accessory/horns)[DEFAULT_SPRITE_LIST] + ears_list = init_sprite_accessory_subtypes(/datum/sprite_accessory/ears)[DEFAULT_SPRITE_LIST] + wings_list = init_sprite_accessory_subtypes(/datum/sprite_accessory/wings)[DEFAULT_SPRITE_LIST] + wings_open_list = init_sprite_accessory_subtypes(/datum/sprite_accessory/wings_open)[DEFAULT_SPRITE_LIST] + frills_list = init_sprite_accessory_subtypes(/datum/sprite_accessory/frills)[DEFAULT_SPRITE_LIST] + spines_list = init_sprite_accessory_subtypes(/datum/sprite_accessory/spines)[DEFAULT_SPRITE_LIST] + tail_spines_list = init_sprite_accessory_subtypes(/datum/sprite_accessory/tail_spines)[DEFAULT_SPRITE_LIST] + legs_list = init_sprite_accessory_subtypes(/datum/sprite_accessory/legs)[DEFAULT_SPRITE_LIST] + caps_list = init_sprite_accessory_subtypes(/datum/sprite_accessory/caps)[DEFAULT_SPRITE_LIST] + moth_wings_list = init_sprite_accessory_subtypes(/datum/sprite_accessory/moth_wings)[DEFAULT_SPRITE_LIST] + moth_antennae_list = init_sprite_accessory_subtypes(/datum/sprite_accessory/moth_antennae)[DEFAULT_SPRITE_LIST] + moth_markings_list = init_sprite_accessory_subtypes(/datum/sprite_accessory/moth_markings)[DEFAULT_SPRITE_LIST] + pod_hair_list = init_sprite_accessory_subtypes(/datum/sprite_accessory/pod_hair)[DEFAULT_SPRITE_LIST] + +/// This proc just intializes all /datum/sprite_accessory/hair_gradient into an list indexed by gradient-style name +/datum/controller/subsystem/accessories/proc/init_hair_gradients() + hair_gradients_list = list() + facial_hair_gradients_list = list() + for(var/path in subtypesof(/datum/sprite_accessory/gradient)) + var/datum/sprite_accessory/gradient/gradient = new path + if(gradient.gradient_category & GRADIENT_APPLIES_TO_HAIR) + hair_gradients_list[gradient.name] = gradient + if(gradient.gradient_category & GRADIENT_APPLIES_TO_FACIAL_HAIR) + facial_hair_gradients_list[gradient.name] = gradient + +/// This reads the applicable sprite accessory datum's subtypes and adds it to the subsystem's list of sprite accessories. +/// The boolean `add_blank` argument just adds a "None" option to the list of sprite accessories, like if a felinid doesn't want a tail or something, typically good for gated-off things. +/datum/controller/subsystem/accessories/proc/init_sprite_accessory_subtypes(prototype, add_blank = FALSE) + RETURN_TYPE(/list) + var/returnable_list = list( + DEFAULT_SPRITE_LIST = list(), + MALE_SPRITE_LIST = list(), + FEMALE_SPRITE_LIST = list(), + ) + + for(var/path in subtypesof(prototype)) + var/datum/sprite_accessory/accessory = new path + + if(accessory.icon_state) + returnable_list[DEFAULT_SPRITE_LIST][accessory.name] = accessory + else + returnable_list[DEFAULT_SPRITE_LIST] += accessory.name + + switch(accessory.gender) + if(MALE) + returnable_list[MALE_SPRITE_LIST] += accessory.name + if(FEMALE) + returnable_list[FEMALE_SPRITE_LIST] += accessory.name + else + returnable_list[MALE_SPRITE_LIST] += accessory.name + returnable_list[FEMALE_SPRITE_LIST] += accessory.name + + if(add_blank) + returnable_list[DEFAULT_SPRITE_LIST][SPRITE_ACCESSORY_NONE] = new /datum/sprite_accessory/blank + + return returnable_list + +#undef DEFAULT_SPRITE_LIST +#undef MALE_SPRITE_LIST +#undef FEMALE_SPRITE_LIST diff --git a/code/controllers/subsystem/ticker.dm b/code/controllers/subsystem/ticker.dm index 468882f0e86ec..efca8dd19b5cc 100644 --- a/code/controllers/subsystem/ticker.dm +++ b/code/controllers/subsystem/ticker.dm @@ -697,6 +697,13 @@ SUBSYSTEM_DEF(ticker) to_chat(world, span_boldannounce("Rebooting World in [DisplayTimeText(delay)]. [reason]")) + var/statspage = CONFIG_GET(string/roundstatsurl) + var/gamelogloc = CONFIG_GET(string/gamelogurl) + if(statspage) + to_chat(world, span_info("Round statistics and logs can be viewed at this website!")) + else if(gamelogloc) + to_chat(world, span_info("Round logs can be located at this website!")) + var/start_wait = world.time UNTIL(round_end_sound_sent || (world.time - start_wait) > (delay * 2)) //don't wait forever sleep(delay - (world.time - start_wait)) @@ -707,13 +714,6 @@ SUBSYSTEM_DEF(ticker) if(end_string) end_state = end_string - var/statspage = CONFIG_GET(string/roundstatsurl) - var/gamelogloc = CONFIG_GET(string/gamelogurl) - if(statspage) - to_chat(world, span_info("Round statistics and logs can be viewed at this website!")) - else if(gamelogloc) - to_chat(world, span_info("Round logs can be located at this website!")) - log_game(span_boldannounce("Rebooting World. [reason]")) world.Reboot() diff --git a/code/controllers/subsystem/time_track.dm b/code/controllers/subsystem/time_track.dm index ab6d5fb2ed572..aaaf5520e0fc3 100644 --- a/code/controllers/subsystem/time_track.dm +++ b/code/controllers/subsystem/time_track.dm @@ -123,7 +123,7 @@ SUBSYSTEM_DEF(time_track) send_maps_values += packet["value"] send_maps_values += packet["calls"] - SSblackbox.record_feedback("associative", "time_dilation_current", 1, list("[SQLtime()]" = list("current" = "[time_dilation_current]", "avg_fast" = "[time_dilation_avg_fast]", "avg" = "[time_dilation_avg]", "avg_slow" = "[time_dilation_avg_slow]"))) + SSblackbox.record_feedback("associative", "time_dilation_current", 1, list("[ISOtime()]" = list("current" = "[time_dilation_current]", "avg_fast" = "[time_dilation_avg_fast]", "avg" = "[time_dilation_avg]", "avg_slow" = "[time_dilation_avg_slow]"))) log_perf( list( world.time, diff --git a/code/controllers/subsystem/transport.dm b/code/controllers/subsystem/transport.dm index db8d19fa060a4..2f870eb674035 100644 --- a/code/controllers/subsystem/transport.dm +++ b/code/controllers/subsystem/transport.dm @@ -170,10 +170,6 @@ PROCESSING_SUBSYSTEM_DEF(transport) /datum/controller/subsystem/processing/transport/proc/pre_departure(datum/transport_controller/linear/tram/transport_controller, request_flags) log_transport("Sub: [transport_controller.specific_transport_id] start pre-departure. Info: [SUB_TS_STATUS]") - // Tram Malfunction event - if(transport_controller.controller_status & COMM_ERROR) - request_flags |= BYPASS_SENSORS - // Lock the physical controls of the tram transport_controller.set_status_code(PRE_DEPARTURE, TRUE) transport_controller.set_status_code(CONTROLS_LOCKED, TRUE) diff --git a/code/controllers/subsystem/vote.dm b/code/controllers/subsystem/vote.dm index 410db36988dd8..b7c26acf375ee 100644 --- a/code/controllers/subsystem/vote.dm +++ b/code/controllers/subsystem/vote.dm @@ -18,6 +18,8 @@ SUBSYSTEM_DEF(vote) var/list/voted = list() /// A list of all ckeys currently voting for the current vote. var/list/voting = list() + /// World.time we started our last vote + var/last_vote_time = -INFINITY /datum/controller/subsystem/vote/Initialize() for(var/vote_type in subtypesof(/datum/vote)) @@ -30,16 +32,20 @@ SUBSYSTEM_DEF(vote) return SS_INIT_SUCCESS - // Called by master_controller /datum/controller/subsystem/vote/fire() if(!current_vote) return current_vote.time_remaining = round((current_vote.started_time + CONFIG_GET(number/vote_period) - world.time) / 10) if(current_vote.time_remaining < 0) - process_vote_result() - SStgui.close_uis(src) - reset() + end_vote() + +/// Ends the current vote. +/datum/controller/subsystem/vote/proc/end_vote() + ASSERT(current_vote) + process_vote_result() + SStgui.close_uis(src) + reset() /// Resets all of our vars after votes conclude / are cancelled. /datum/controller/subsystem/vote/proc/reset() @@ -168,24 +174,10 @@ SUBSYSTEM_DEF(vote) * * vote_type - The type of vote to initiate. Can be a [/datum/vote] typepath, a [/datum/vote] instance, or the name of a vote datum. * * vote_initiator_name - The ckey (if player initiated) or name that initiated a vote. Ex: "UristMcAdmin", "the server" * * vote_initiator - If a person / mob initiated the vote, this is the mob that did it - * * forced - Whether we're forcing the vote to go through regardless of existing votes or other circumstances. Note: If the vote is admin created, forced becomes true regardless. + * * forced - Whether we're forcing the vote to go through regardless of existing votes or other circumstances. */ /datum/controller/subsystem/vote/proc/initiate_vote(vote_type, vote_initiator_name, mob/vote_initiator, forced = FALSE) - - // Even if it's forced we can't vote before we're set up - if(!MC_RUNNING(init_stage)) - if(vote_initiator) - to_chat(vote_initiator, span_warning("You cannot start vote now, the server is not done initializing.")) - return FALSE - - // Check if we have unlimited voting power. - // Admin started (or forced) voted will go through even if there's an ongoing vote, - // if voting is on cooldown, or regardless if a vote is config disabled (in some cases) - var/unlimited_vote_power = forced || !!GLOB.admin_datums[vote_initiator?.ckey] - - if(current_vote && !unlimited_vote_power) - if(vote_initiator) - to_chat(vote_initiator, span_warning("There is already a vote in progress! Please wait for it to finish.")) + if(!can_vote_start(vote_initiator, forced)) return FALSE // Get our actual datum @@ -212,7 +204,7 @@ SUBSYSTEM_DEF(vote) return FALSE // Vote can't be initiated in our circumstances? No vote - if(!to_vote.can_be_initiated(vote_initiator, unlimited_vote_power)) + if(to_vote.can_be_initiated(forced) != VOTE_AVAILABLE) return FALSE // Okay, we're ready to actually create a vote - @@ -223,8 +215,12 @@ SUBSYSTEM_DEF(vote) if(!to_vote.create_vote(vote_initiator)) return FALSE + if(!vote_initiator_name && vote_initiator) + vote_initiator_name = vote_initiator.key + // Okay, the vote's happening now, for real. Set it up. current_vote = to_vote + last_vote_time = world.time var/duration = CONFIG_GET(number/vote_period) var/to_display = current_vote.initiate_vote(vote_initiator_name, duration) @@ -248,6 +244,36 @@ SUBSYSTEM_DEF(vote) return TRUE +/** + * Checks if we can start a vote. + * + * * vote_initiator - The mob that initiated the vote. + * * forced - Whether we're forcing the vote to go through regardless of existing votes or other circumstances. + * + * Returns TRUE if we can start a vote, FALSE if we can't. + */ +/datum/controller/subsystem/vote/proc/can_vote_start(mob/vote_initiator, forced) + // Even if it's forced we can't vote before we're set up + if(!MC_RUNNING(init_stage)) + if(vote_initiator) + to_chat(vote_initiator, span_warning("You cannot start a vote now, the server is not done initializing.")) + return FALSE + + if(forced) + return TRUE + + var/next_allowed_time = last_vote_time + CONFIG_GET(number/vote_delay) + if(next_allowed_time > world.time) + if(vote_initiator) + to_chat(vote_initiator, span_warning("A vote was initiated recently. You must wait [DisplayTimeText(next_allowed_time - world.time)] before a new vote can be started!")) + return FALSE + + if(current_vote) + if(vote_initiator) + to_chat(vote_initiator, span_warning("There is already a vote in progress! Please wait for it to finish.")) + return FALSE + + return TRUE /datum/controller/subsystem/vote/ui_state() return GLOB.always_state @@ -282,11 +308,12 @@ SUBSYSTEM_DEF(vote) if(!istype(vote)) continue + var/can_vote = vote.can_be_initiated(is_lower_admin) var/list/vote_data = list( "name" = vote_name, - "canBeInitiated" = vote.can_be_initiated(forced = is_lower_admin), + "canBeInitiated" = can_vote == VOTE_AVAILABLE, "config" = vote.is_config_enabled(), - "message" = vote.message, + "message" = can_vote == VOTE_AVAILABLE ? vote.default_message : can_vote, ) if(vote == current_vote) @@ -310,7 +337,13 @@ SUBSYSTEM_DEF(vote) all_vote_data += list(vote_data) data["possibleVotes"] = all_vote_data + data["LastVoteTime"] = last_vote_time - world.time + + return data +/datum/controller/subsystem/vote/ui_static_data(mob/user) + var/list/data = list() + data["VoteCD"] = CONFIG_GET(number/vote_delay) return data /datum/controller/subsystem/vote/ui_act(action, params) @@ -323,19 +356,37 @@ SUBSYSTEM_DEF(vote) switch(action) if("cancel") if(!voter.client?.holder) + message_admins("[key_name(voter)] tried to cancel the current vote while having no admin holder, \ + this is potentially a malicious exploit and worth noting.") return voter.log_message("cancelled a vote.", LOG_ADMIN) message_admins("[key_name_admin(voter)] has cancelled the current vote.") + SStgui.close_uis(src) reset() return TRUE + if("endNow") + if(!voter.client?.holder) + message_admins("[key_name(voter)] tried to end the current vote while having no admin holder, \ + this is potentially a malicious exploit and worth noting.") + return + + voter.log_message("ended the current vote early", LOG_ADMIN) + message_admins("[key_name_admin(voter)] has ended the current vote.") + end_vote() + return TRUE + if("toggleVote") var/datum/vote/selected = possible_votes[params["voteName"]] if(!istype(selected)) return + if(!check_rights_for(voter.client, R_ADMIN)) + message_admins("[key_name(voter)] tried to toggle vote availability while having improper rights, \ + this is potentially a malicious exploit and worth noting.") + return - return selected.toggle_votable(voter) + return selected.toggle_votable() if("callVote") var/datum/vote/selected = possible_votes[params["voteName"]] @@ -344,7 +395,12 @@ SUBSYSTEM_DEF(vote) // Whether the user actually can initiate this vote is checked in initiate_vote, // meaning you can't spoof initiate a vote you're not supposed to be able to - return initiate_vote(selected, voter.key, voter) + return initiate_vote( + vote_type = selected, + vote_initiator_name = voter.key, + vote_initiator = voter, + forced = !!GLOB.admin_datums[voter.ckey], + ) if("voteSingle") return submit_single_vote(voter, params["voteOption"]) @@ -352,6 +408,15 @@ SUBSYSTEM_DEF(vote) if("voteMulti") return submit_multi_vote(voter, params["voteOption"]) + if("resetCooldown") + if(!voter.client.holder) + message_admins("[key_name(voter)] tried to reset the vote cooldown while having no admin holder, \ + this is potentially a malicious exploit and worth noting.") + return + + last_vote_time = -INFINITY + return TRUE + /datum/controller/subsystem/vote/ui_close(mob/user) voting -= user.client?.ckey @@ -360,6 +425,10 @@ SUBSYSTEM_DEF(vote) set category = "OOC" set name = "Vote" + if(!SSvote.initialized) + to_chat(usr, span_notice("Voting is not set up yet!")) + return + SSvote.ui_interact(usr) /// Datum action given to mobs that allows players to vote on the current vote. diff --git a/code/datums/actions/cooldown_action.dm b/code/datums/actions/cooldown_action.dm index 18fe9f22e8024..1c290c5f224c1 100644 --- a/code/datums/actions/cooldown_action.dm +++ b/code/datums/actions/cooldown_action.dm @@ -171,6 +171,9 @@ next_use_time = world.time + override_cooldown_time else next_use_time = world.time + cooldown_time + // Don't start a cooldown if we have a cooldown time of 0 seconds + if(next_use_time == world.time) + return build_all_button_icons(UPDATE_BUTTON_STATUS) START_PROCESSING(SSfastprocess, src) diff --git a/code/datums/actions/items/beserk.dm b/code/datums/actions/items/beserk.dm index a3d89d5f2398c..43e29dbd150cd 100644 --- a/code/datums/actions/items/beserk.dm +++ b/code/datums/actions/items/beserk.dm @@ -8,13 +8,13 @@ /datum/action/item_action/berserk_mode/Trigger(trigger_flags) if(istype(target, /obj/item/clothing/head/hooded/berserker)) - var/obj/item/clothing/head/hooded/berserker/berzerk = target - if(berzerk.berserk_active) + var/obj/item/clothing/head/hooded/berserker/berserk = target + if(berserk.berserk_active) to_chat(owner, span_warning("You are already berserk!")) return - if(berzerk.berserk_charge < 100) + if(berserk.berserk_charge < 100) to_chat(owner, span_warning("You don't have a full charge.")) return - berzerk.berserk_mode(owner) + berserk.berserk_mode(owner) return return ..() diff --git a/code/datums/actions/items/cult_dagger.dm b/code/datums/actions/items/cult_dagger.dm index 76e92c7b23198..6b188e85e9071 100644 --- a/code/datums/actions/items/cult_dagger.dm +++ b/code/datums/actions/items/cult_dagger.dm @@ -17,10 +17,10 @@ return ..() /datum/action/item_action/cult_dagger/Trigger(trigger_flags) - for(var/obj/item/held_item as anything in owner.held_items) // In case we were already holding a dagger - if(istype(held_item, /obj/item/melee/cultblade/dagger)) - held_item.attack_self(owner) - return + if(target in owner.held_items) + var/obj/item/target_item = target + target_item.attack_self(owner) + return var/obj/item/target_item = target if(owner.can_equip(target_item, ITEM_SLOT_HANDS)) owner.temporarilyRemoveItemFromInventory(target_item) diff --git a/code/datums/actions/mobs/charge.dm b/code/datums/actions/mobs/charge.dm index 07c6330c71a42..43fcbd57f69ba 100644 --- a/code/datums/actions/mobs/charge.dm +++ b/code/datums/actions/mobs/charge.dm @@ -23,6 +23,8 @@ /datum/action/cooldown/mob_cooldown/charge/Activate(atom/target_atom) disable_cooldown_actions() + // No charging and meleeing (overridded by StartCooldown after charge ends) + next_melee_use_time = world.time + 100 SECONDS charge_sequence(owner, target_atom, charge_delay, charge_past) StartCooldown() enable_cooldown_actions() @@ -44,7 +46,7 @@ if(charger in charging) // Stop any existing charging, this'll clean things up properly - DSmove_manager.stop_looping(charger) + GLOB.move_manager.stop_looping(charger) charging += charger actively_moving = FALSE @@ -60,7 +62,7 @@ var/time_to_hit = min(get_dist(charger, target), charge_distance) * charge_speed - var/datum/move_loop/new_loop = DSmove_manager.home_onto(charger, target, delay = charge_speed, timeout = time_to_hit, priority = MOVEMENT_ABOVE_SPACE_PRIORITY) + var/datum/move_loop/new_loop = GLOB.move_manager.home_onto(charger, target, delay = charge_speed, timeout = time_to_hit, priority = MOVEMENT_ABOVE_SPACE_PRIORITY) if(!new_loop) return RegisterSignal(new_loop, COMSIG_MOVELOOP_PREPROCESS_CHECK, PROC_REF(pre_move), override = TRUE) @@ -96,7 +98,7 @@ /datum/action/cooldown/mob_cooldown/charge/update_status_on_signal(mob/source, new_stat, old_stat) . = ..() if(new_stat == DEAD) - DSmove_manager.stop_looping(source) //This will cause the loop to qdel, triggering an end to our charging + GLOB.move_manager.stop_looping(source) //This will cause the loop to qdel, triggering an end to our charging /datum/action/cooldown/mob_cooldown/charge/proc/do_charge_indicator(atom/charger, atom/charge_target) var/turf/target_turf = get_turf(charge_target) diff --git a/code/datums/actions/mobs/ground_slam.dm b/code/datums/actions/mobs/ground_slam.dm new file mode 100644 index 0000000000000..e00799196b589 --- /dev/null +++ b/code/datums/actions/mobs/ground_slam.dm @@ -0,0 +1,32 @@ +/datum/action/cooldown/mob_cooldown/ground_slam + name = "Ground Slam" + button_icon = 'icons/mob/actions/actions_items.dmi' + button_icon_state = "sniper_zoom" + desc = "Slams the ground sending out a shockwave around you." + cooldown_time = 10 SECONDS + /// The range of the slam + var/range = 5 + /// The delay before the shockwave expands it's range + var/delay = 3 + /// How far hit targets are thrown + var/throw_range = 8 + /// Whether the target can move or not while the slam is occurring + var/can_move = FALSE + +/datum/action/cooldown/mob_cooldown/ground_slam/Activate(atom/target_atom) + disable_cooldown_actions() + RegisterSignal(owner, COMSIG_MOVABLE_PRE_MOVE, PROC_REF(on_move), override = TRUE) + do_slam(target_atom) + UnregisterSignal(owner, COMSIG_MOVABLE_PRE_MOVE) + StartCooldown() + enable_cooldown_actions() + return TRUE + +/// Slams the ground around the source throwing back enemies caught nearby, delay is for the radius increase +/datum/action/cooldown/mob_cooldown/ground_slam/proc/do_slam(atom/target) + wendigo_slam(owner, range, delay, throw_range) + +/datum/action/cooldown/mob_cooldown/ground_slam/proc/on_move(atom/source, atom/new_loc) + SIGNAL_HANDLER + if(!can_move) + return COMPONENT_MOVABLE_BLOCK_PRE_MOVE diff --git a/code/datums/actions/mobs/projectileattack.dm b/code/datums/actions/mobs/projectileattack.dm index be7eff8963363..d8f8e6bdf6427 100644 --- a/code/datums/actions/mobs/projectileattack.dm +++ b/code/datums/actions/mobs/projectileattack.dm @@ -16,14 +16,23 @@ var/default_projectile_spread = 0 /// The multiplier to the projectiles speed (a value of 2 makes it twice as slow, 0.5 makes it twice as fast) var/projectile_speed_multiplier = 1 + /// Whether the target can move or not while the attack is occurring + var/can_move = TRUE /datum/action/cooldown/mob_cooldown/projectile_attack/Activate(atom/target_atom) disable_cooldown_actions() + RegisterSignal(owner, COMSIG_MOVABLE_PRE_MOVE, PROC_REF(on_move), override = TRUE) attack_sequence(owner, target_atom) + UnregisterSignal(owner, COMSIG_MOVABLE_PRE_MOVE) StartCooldown() enable_cooldown_actions() return TRUE +/datum/action/cooldown/mob_cooldown/projectile_attack/proc/on_move(atom/source, atom/new_loc) + SIGNAL_HANDLER + if(!can_move) + return COMPONENT_MOVABLE_BLOCK_PRE_MOVE + /datum/action/cooldown/mob_cooldown/projectile_attack/proc/attack_sequence(mob/living/firer, atom/target) shoot_projectile(firer, target, null, firer, rand(-default_projectile_spread, default_projectile_spread), null) @@ -151,6 +160,25 @@ SLEEP_CHECK_DEATH(1.5 SECONDS, owner) return ..() +/datum/action/cooldown/mob_cooldown/projectile_attack/spiral_shots/wendigo + cooldown_time = 10 SECONDS + projectile_type = /obj/projectile/colossus/wendigo_shockwave/spiral + can_move = FALSE + +/datum/action/cooldown/mob_cooldown/projectile_attack/spiral_shots/wendigo/create_spiral_attack(mob/living/firer, atom/target, negative = pick(TRUE, FALSE)) + wendigo_scream(firer) + var/shots_spiral = 40 + var/angle_to_target = get_angle(firer, target) + var/spiral_direction = pick(-1, 1) + for(var/shot in 1 to shots_spiral) + var/shots_per_tick = 5 - enraged * 3 + var/angle_change = (5 + enraged * shot / 6) * spiral_direction + for(var/count in 1 to shots_per_tick) + var/angle = angle_to_target + shot * angle_change + count * 360 / shots_per_tick + shoot_projectile(firer, target, angle, firer, null, null) + SLEEP_CHECK_DEATH(1, firer) + SLEEP_CHECK_DEATH(3 SECONDS, firer) + /datum/action/cooldown/mob_cooldown/projectile_attack/random_aoe name = "All Directions" button_icon = 'icons/effects/effects.dmi' @@ -192,6 +220,13 @@ shoot_projectile(firer, target, null, firer, spread, null) +/datum/action/cooldown/mob_cooldown/projectile_attack/shotgun_blast/wendigo + cooldown_time = 10 SECONDS + projectile_type = /obj/projectile/colossus/wendigo_shockwave + shot_angles = list(-20, -10, 0, 10, 20) + projectile_speed_multiplier = 4 + + /datum/action/cooldown/mob_cooldown/projectile_attack/shotgun_blast/colossus cooldown_time = 0.5 SECONDS @@ -327,3 +362,54 @@ colossus.telegraph() colossus.dir_shots.attack_sequence(firer, target) SLEEP_CHECK_DEATH(1 SECONDS, firer) + +/datum/action/cooldown/mob_cooldown/projectile_attack/alternating_circle + name = "Alternating Shots" + button_icon = 'icons/mob/actions/actions_items.dmi' + button_icon_state = "sniper_zoom" + desc = "Fires projectiles around you in an alternating fashion." + cooldown_time = 10 SECONDS + projectile_type = /obj/projectile/colossus/wendigo_shockwave + can_move = FALSE + var/enraged = FALSE + +/datum/action/cooldown/mob_cooldown/projectile_attack/alternating_circle/attack_sequence(mob/living/firer, atom/target) + wendigo_scream(firer) + if(enraged) + projectile_speed_multiplier = 1 + else + projectile_speed_multiplier = 1.5 + var/shots_per = 24 + for(var/shoot_times in 1 to 8) + var/offset = shoot_times % 2 + for(var/shot in 1 to shots_per) + var/angle = shot * 360 / shots_per + (offset * 360 / shots_per) * 0.5 + shoot_projectile(firer, target, angle, firer, null, null) + SLEEP_CHECK_DEATH(6 - enraged * 2, firer) + SLEEP_CHECK_DEATH(3 SECONDS, firer) + +/datum/action/cooldown/mob_cooldown/projectile_attack/wave + name = "Wave Shots" + button_icon = 'icons/mob/actions/actions_items.dmi' + button_icon_state = "sniper_zoom" + desc = "Fires projectiles around you in a circular wave." + cooldown_time = 10 SECONDS + projectile_type = /obj/projectile/colossus/wendigo_shockwave/wave + can_move = FALSE + +/datum/action/cooldown/mob_cooldown/projectile_attack/wave/attack_sequence(mob/living/firer, atom/target) + wendigo_scream(firer) + var/shots_per = 7 + var/difference = 360 / shots_per + var/wave_direction = pick(-1, 1) + switch(wave_direction) + if(-1) + projectile_type = /obj/projectile/colossus/wendigo_shockwave/wave/alternate + if(1) + projectile_type = /obj/projectile/colossus/wendigo_shockwave/wave + for(var/shoot_times in 1 to 32) + for(var/shot in 1 to shots_per) + var/angle = shot * difference + shoot_times * 5 * wave_direction * -1 + shoot_projectile(firer, target, angle, firer, null, null) + SLEEP_CHECK_DEATH(2, firer) + SLEEP_CHECK_DEATH(3 SECONDS, firer) diff --git a/code/datums/actions/mobs/teleport.dm b/code/datums/actions/mobs/teleport.dm new file mode 100644 index 0000000000000..7b7ffddf30b3d --- /dev/null +++ b/code/datums/actions/mobs/teleport.dm @@ -0,0 +1,25 @@ +/datum/action/cooldown/mob_cooldown/teleport + name = "Teleport" + button_icon = 'icons/mob/actions/actions_items.dmi' + button_icon_state = "sniper_zoom" + desc = "Allows you to teleport a certain distance away from a position in a random direction." + cooldown_time = 10 SECONDS + /// The distance from the target + var/radius = 6 + +/datum/action/cooldown/mob_cooldown/teleport/Activate(atom/target_atom) + disable_cooldown_actions() + teleport_to(target_atom) + StartCooldown() + enable_cooldown_actions() + return TRUE + +/// Handles randomly teleporting the owner around the target in view +/datum/action/cooldown/mob_cooldown/teleport/proc/teleport_to(atom/teleport_target) + var/list/possible_ends = view(radius, teleport_target.loc) - view(radius - 1, teleport_target.loc) + for(var/turf/closed/cant_teleport_turf in possible_ends) + possible_ends -= cant_teleport_turf + if(!possible_ends.len) + return + var/turf/end = pick(possible_ends) + do_teleport(owner, end, 0, channel=TELEPORT_CHANNEL_BLUESPACE, forced = TRUE) diff --git a/code/datums/ai/_ai_controller.dm b/code/datums/ai/_ai_controller.dm index c5717ceb04472..7b46a7b06e803 100644 --- a/code/datums/ai/_ai_controller.dm +++ b/code/datums/ai/_ai_controller.dm @@ -172,9 +172,13 @@ multiple modular subtrees with behaviors return FALSE return TRUE -/datum/ai_controller/proc/recalculate_idle() +/datum/ai_controller/proc/recalculate_idle(datum/exited) if(ai_status == AI_STATUS_OFF) return + + if(exited && (get_dist(pawn, (islist(exited) ? exited[1] : exited)) <= interesting_dist)) //is our target in between interesting cells? + return + if(should_idle()) set_ai_status(AI_STATUS_IDLE) @@ -187,7 +191,7 @@ multiple modular subtrees with behaviors /datum/ai_controller/proc/on_client_exit(datum/source, datum/exited) SIGNAL_HANDLER - recalculate_idle() + recalculate_idle(exited) /// Sets the AI on or off based on current conditions, call to reset after you've manually disabled it somewhere /datum/ai_controller/proc/reset_ai_status() @@ -231,9 +235,10 @@ multiple modular subtrees with behaviors ///Called when the AI controller pawn changes z levels, we check if there's any clients on the new one and wake up the AI if there is. /datum/ai_controller/proc/on_changed_z_level(atom/source, turf/old_turf, turf/new_turf, same_z_layer, notify_contents) SIGNAL_HANDLER - var/mob/mob_pawn = pawn - if((mob_pawn?.client && !continue_processing_when_client)) - return + if (ismob(pawn)) + var/mob/mob_pawn = pawn + if((mob_pawn?.client && !continue_processing_when_client)) + return if(old_turf) SSai_controllers.ai_controllers_by_zlevel[old_turf.z] -= src if(new_turf) @@ -279,7 +284,7 @@ multiple modular subtrees with behaviors /datum/ai_controller/process(seconds_per_tick) if(!able_to_run()) - DSmove_manager.stop_looping(pawn) //stop moving + GLOB.move_manager.stop_looping(pawn) //stop moving return //this should remove them from processing in the future through event-based stuff. if(!LAZYLEN(current_behaviors) && idle_behavior) @@ -468,7 +473,10 @@ multiple modular subtrees with behaviors /// Use this proc to define how your controller defines what access the pawn has for the sake of pathfinding. Return the access list you want to use /datum/ai_controller/proc/get_access() - return + if(!isliving(pawn)) + return + var/mob/living/living_pawn = pawn + return living_pawn.get_access() ///Returns the minimum required distance to preform one of our current behaviors. Honestly this should just be cached or something but fuck you /datum/ai_controller/proc/get_minimum_distance() @@ -617,7 +625,7 @@ multiple modular subtrees with behaviors /datum/ai_controller/proc/post_blackboard_key_set(key) if (isnull(pawn)) return - SEND_SIGNAL(pawn, COMSIG_AI_BLACKBOARD_KEY_SET(key)) + SEND_SIGNAL(pawn, COMSIG_AI_BLACKBOARD_KEY_SET(key), key) /** * Adds the passed "thing" to the associated key @@ -707,6 +715,8 @@ multiple modular subtrees with behaviors /datum/ai_controller/proc/clear_blackboard_key(key) if(isnull(blackboard[key])) return + if(pawn && (SEND_SIGNAL(pawn, COMSIG_AI_BLACKBOARD_KEY_PRECLEAR(key)))) + return CLEAR_AI_DATUM_TARGET(blackboard[key], key) blackboard[key] = null if(isnull(pawn)) @@ -747,6 +757,19 @@ multiple modular subtrees with behaviors CRASH("remove_thing_from_blackboard_key called with an invalid \"thing\" argument ([thing]). \ (The passed value is not tracked in the passed list.)") +///removes a tracked object from a lazylist +/datum/ai_controller/proc/remove_from_blackboard_lazylist_key(key, thing) + var/lazylist = blackboard[key] + if(isnull(lazylist)) + return + for(var/key_index in lazylist) + if(thing == key_index || lazylist[key_index] == thing) + CLEAR_AI_DATUM_TARGET(thing, key) + lazylist -= key_index + break + if(!LAZYLEN(lazylist)) + clear_blackboard_key(key) + /// Signal proc to go through every key and remove the datum from all keys it finds /datum/ai_controller/proc/sig_remove_from_blackboard(datum/source) SIGNAL_HANDLER diff --git a/code/datums/ai/basic_mobs/basic_ai_behaviors/targeting.dm b/code/datums/ai/basic_mobs/basic_ai_behaviors/targeting.dm index f227d5dfea6aa..4cf04039e8535 100644 --- a/code/datums/ai/basic_mobs/basic_ai_behaviors/targeting.dm +++ b/code/datums/ai/basic_mobs/basic_ai_behaviors/targeting.dm @@ -7,6 +7,7 @@ GLOBAL_LIST_INIT(target_interested_atoms, typecacheof(list(/mob, /obj/machinery/ /datum/ai_behavior/find_potential_targets action_cooldown = 2 SECONDS + behavior_flags = AI_BEHAVIOR_CAN_PLAN_DURING_EXECUTION /// How far can we see stuff? var/vision_range = 9 /// Blackboard key for aggro range, uses vision range if not specified @@ -34,7 +35,7 @@ GLOBAL_LIST_INIT(target_interested_atoms, typecacheof(list(/mob, /obj/machinery/ // If we're using a field rn, just don't do anything yeah? if(controller.blackboard[BB_FIND_TARGETS_FIELD(type)]) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED var/list/potential_targets = hearers(aggro_range, get_turf(controller.pawn)) - living_mob //Remove self, so we don't suicide @@ -146,7 +147,7 @@ GLOBAL_LIST_INIT(target_interested_atoms, typecacheof(list(/mob, /obj/machinery/ var/datum/proximity_monitor/field = controller.blackboard[BB_FIND_TARGETS_FIELD(type)] qdel(field) // autoclears so it's fine controller.CancelActions() // On retarget cancel any further queued actions so that they will setup again with new target - controller.modify_cooldown(controller, get_cooldown(controller)) + controller.modify_cooldown(src, get_cooldown(controller)) /// Returns the desired final target from the filtered list of targets /datum/ai_behavior/find_potential_targets/proc/pick_final_target(datum/ai_controller/controller, list/filtered_targets) diff --git a/code/datums/ai/basic_mobs/basic_subtrees/capricious_retaliate.dm b/code/datums/ai/basic_mobs/basic_subtrees/capricious_retaliate.dm index a4fc49facc000..52b19036b9a47 100644 --- a/code/datums/ai/basic_mobs/basic_subtrees/capricious_retaliate.dm +++ b/code/datums/ai/basic_mobs/basic_subtrees/capricious_retaliate.dm @@ -21,6 +21,7 @@ return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED pawn.visible_message(span_notice("[pawn] calms down.")) // We can blackboard key this if anyone else actually wants to customise it controller.clear_blackboard_key(BB_BASIC_MOB_RETALIATE_LIST) + controller.clear_blackboard_key(BB_BASIC_MOB_CURRENT_TARGET) controller.CancelActions() // Otherwise they will try and get one last kick in return AI_BEHAVIOR_DELAY diff --git a/code/datums/ai/basic_mobs/basic_subtrees/express_happiness.dm b/code/datums/ai/basic_mobs/basic_subtrees/express_happiness.dm new file mode 100644 index 0000000000000..6cae6132d3688 --- /dev/null +++ b/code/datums/ai/basic_mobs/basic_subtrees/express_happiness.dm @@ -0,0 +1,44 @@ +#define HIGH_HAPPINESS_THRESHOLD 0.7 +#define MODERATE_HAPPINESS_THRESHOLD 0.5 + +/datum/ai_planning_subtree/express_happiness + operational_datums = list(/datum/component/happiness) + ///the key storing our happiness value + var/happiness_key = BB_BASIC_HAPPINESS + ///list of emotions we relay when happy + var/static/list/happy_emotions = list( + "celebrates happily!", + "dances around in excitement!", + ) + ///our moderate emotions + var/static/list/moderate_emotions = list( + "looks satisfied.", + "trots around.", + ) + ///emotions we display when we are sad + var/static/list/depressed_emotions = list( + "looks depressed...", + "turns its back and sulks...", + "looks towards the floor in dissapointment...", + ) + +/datum/ai_planning_subtree/express_happiness/SelectBehaviors(datum/ai_controller/controller, seconds_per_tick) + if(!SPT_PROB(5, seconds_per_tick)) + return + var/happiness_value = controller.blackboard[happiness_key] + if(isnull(happiness_value)) + return + var/list/final_list + switch(happiness_value) + if(HIGH_HAPPINESS_THRESHOLD to INFINITY) + final_list = happy_emotions + if(MODERATE_HAPPINESS_THRESHOLD to HIGH_HAPPINESS_THRESHOLD) + final_list = moderate_emotions + else + final_list = depressed_emotions + if(!length(final_list)) + return + controller.queue_behavior(/datum/ai_behavior/perform_emote, pick(final_list)) + +#undef HIGH_HAPPINESS_THRESHOLD +#undef MODERATE_HAPPINESS_THRESHOLD diff --git a/code/datums/ai/basic_mobs/basic_subtrees/find_parent.dm b/code/datums/ai/basic_mobs/basic_subtrees/find_parent.dm index 2c65dfbb6a97e..ef44df82f78d8 100644 --- a/code/datums/ai/basic_mobs/basic_subtrees/find_parent.dm +++ b/code/datums/ai/basic_mobs/basic_subtrees/find_parent.dm @@ -11,7 +11,7 @@ return if(get_dist(target, baby) > minimum_distance) - controller.queue_behavior(/datum/ai_behavior/travel_towards, BB_FOUND_MOM) + controller.queue_behavior(/datum/ai_behavior/travel_towards/stop_on_arrival, BB_FOUND_MOM) return SUBTREE_RETURN_FINISH_PLANNING if(!SPT_PROB(15, seconds_per_tick)) diff --git a/code/datums/ai/basic_mobs/basic_subtrees/play_with_owners.dm b/code/datums/ai/basic_mobs/basic_subtrees/play_with_owners.dm new file mode 100644 index 0000000000000..e27e984e70649 --- /dev/null +++ b/code/datums/ai/basic_mobs/basic_subtrees/play_with_owners.dm @@ -0,0 +1,21 @@ +/datum/ai_planning_subtree/find_and_hunt_target/play_with_owner + target_key = BB_OWNER_TARGET + hunting_behavior = /datum/ai_behavior/hunt_target/play_with_owner + finding_behavior = /datum/ai_behavior/find_hunt_target/find_owner + hunt_targets = list(/mob/living) + hunt_chance = 80 + hunt_range = 9 + +/datum/ai_behavior/find_hunt_target/find_owner + action_cooldown = 1 MINUTES + behavior_flags = AI_BEHAVIOR_CAN_PLAN_DURING_EXECUTION + +/datum/ai_behavior/find_hunt_target/find_owner/valid_dinner(mob/living/source, atom/friend, radius, datum/ai_controller/controller, seconds_per_tick) + return (friend != source) && (source.faction.Find(REF(friend))) && can_see(source, friend, radius) + +/datum/ai_behavior/hunt_target/play_with_owner + +/datum/ai_behavior/hunt_target/play_with_owner/target_caught(mob/living/hunter, atom/hunted) + var/list/interactions_list = hunter.ai_controller.blackboard[BB_INTERACTIONS_WITH_OWNER] + var/interaction_message = length(interactions_list) ? pick(interactions_list) : "Plays with" + hunter.manual_emote("[interaction_message] [hunted]!") diff --git a/code/datums/ai/basic_mobs/basic_subtrees/simple_find_nearest_target_to_flee.dm b/code/datums/ai/basic_mobs/basic_subtrees/simple_find_nearest_target_to_flee.dm index 6630f7d193d90..d9e0d1e7fb9ff 100644 --- a/code/datums/ai/basic_mobs/basic_subtrees/simple_find_nearest_target_to_flee.dm +++ b/code/datums/ai/basic_mobs/basic_subtrees/simple_find_nearest_target_to_flee.dm @@ -9,13 +9,16 @@ /// Find the nearest thing on our list of 'things which have done damage to me' and set it as the flee target /datum/ai_planning_subtree/find_nearest_thing_which_attacked_me_to_flee + ///the targeting strategy we use var/targeting_key = BB_TARGETING_STRATEGY + ///what key should we set the target as + var/target_key = BB_BASIC_MOB_CURRENT_TARGET /datum/ai_planning_subtree/find_nearest_thing_which_attacked_me_to_flee/SelectBehaviors(datum/ai_controller/controller, seconds_per_tick) . = ..() if (controller.blackboard[BB_BASIC_MOB_STOP_FLEEING]) return - controller.queue_behavior(/datum/ai_behavior/target_from_retaliate_list/nearest, BB_BASIC_MOB_RETALIATE_LIST, BB_BASIC_MOB_CURRENT_TARGET, targeting_key, BB_BASIC_MOB_CURRENT_TARGET_HIDING_LOCATION) + controller.queue_behavior(/datum/ai_behavior/target_from_retaliate_list/nearest, BB_BASIC_MOB_RETALIATE_LIST, target_key, targeting_key, BB_BASIC_MOB_CURRENT_TARGET_HIDING_LOCATION) /datum/ai_planning_subtree/find_nearest_thing_which_attacked_me_to_flee/from_flee_key targeting_key = BB_FLEE_TARGETING_STRATEGY diff --git a/code/datums/ai/basic_mobs/basic_subtrees/target_retaliate.dm b/code/datums/ai/basic_mobs/basic_subtrees/target_retaliate.dm index d327b1047cf57..042ccb2310c1a 100644 --- a/code/datums/ai/basic_mobs/basic_subtrees/target_retaliate.dm +++ b/code/datums/ai/basic_mobs/basic_subtrees/target_retaliate.dm @@ -11,7 +11,6 @@ var/check_faction = FALSE /datum/ai_planning_subtree/target_retaliate/SelectBehaviors(datum/ai_controller/controller, seconds_per_tick) - . = ..() controller.queue_behavior(/datum/ai_behavior/target_from_retaliate_list, BB_BASIC_MOB_RETALIATE_LIST, target_key, targeting_strategy_key, hiding_place_key, check_faction) /datum/ai_planning_subtree/target_retaliate/check_faction @@ -35,7 +34,6 @@ var/vision_range = 9 /datum/ai_behavior/target_from_retaliate_list/perform(seconds_per_tick, datum/ai_controller/controller, shitlist_key, target_key, targeting_strategy_key, hiding_location_key, check_faction) - . = ..() var/mob/living/living_mob = controller.pawn var/datum/targeting_strategy/targeting_strategy = GET_TARGETING_STRATEGY(controller.blackboard[targeting_strategy_key]) if(!targeting_strategy) @@ -58,7 +56,6 @@ enemies_list += potential_target if(!length(enemies_list)) - controller.clear_blackboard_key(target_key) return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED var/atom/new_target = pick_final_target(controller, enemies_list) @@ -75,7 +72,7 @@ /datum/ai_behavior/target_from_retaliate_list/proc/pick_final_target(datum/ai_controller/controller, list/enemies_list) return pick(enemies_list) -/datum/ai_behavior/target_from_retaliate_list/finish_action(datum/ai_controller/controller, succeeded, check_faction) +/datum/ai_behavior/target_from_retaliate_list/finish_action(datum/ai_controller/controller, succeeded, shitlist_key, target_key, targeting_strategy_key, hiding_location_key, check_faction) . = ..() if (succeeded || check_faction) return diff --git a/code/datums/ai/basic_mobs/targeting_strategies/basic_targeting_strategy.dm b/code/datums/ai/basic_mobs/targeting_strategies/basic_targeting_strategy.dm index 14f0d03207959..07b544bc0a296 100644 --- a/code/datums/ai/basic_mobs/targeting_strategies/basic_targeting_strategy.dm +++ b/code/datums/ai/basic_mobs/targeting_strategies/basic_targeting_strategy.dm @@ -137,3 +137,10 @@ /datum/targeting_strategy/basic/same_faction/faction_check(mob/living/living_mob, mob/living/the_target) return !..() // inverts logic to ONLY target mobs that share a faction + +/datum/targeting_strategy/basic/allow_turfs + +/datum/targeting_strategy/basic/allow_turfs/can_attack(mob/living/living_mob, atom/the_target, vision_range) + if(isturf(the_target)) + return TRUE + return ..() diff --git a/code/datums/ai/monkey/monkey_behaviors.dm b/code/datums/ai/monkey/monkey_behaviors.dm index 10a23acdabe48..a5febe03143f1 100644 --- a/code/datums/ai/monkey/monkey_behaviors.dm +++ b/code/datums/ai/monkey/monkey_behaviors.dm @@ -120,7 +120,7 @@ break if(target) - DSmove_manager.move_away(living_pawn, target, max_dist=MONKEY_ENEMY_VISION, delay=5) + GLOB.move_manager.move_away(living_pawn, target, max_dist=MONKEY_ENEMY_VISION, delay=5) return AI_BEHAVIOR_DELAY return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED @@ -161,7 +161,7 @@ controller.clear_blackboard_key(target_key) if(QDELETED(living_pawn)) // pawn can be null at this point return - DSmove_manager.stop_looping(living_pawn) + GLOB.move_manager.stop_looping(living_pawn) /// attack using a held weapon otherwise bite the enemy, then if we are angry there is a chance we might calm down a little /datum/ai_behavior/monkey_attack_mob/proc/monkey_attack(datum/ai_controller/controller, mob/living/target, seconds_per_tick, disarm) @@ -197,7 +197,7 @@ var/can_shoot = gun?.can_shoot() || FALSE if(gun && controller.blackboard[BB_MONKEY_GUN_WORKED] && prob(95)) // We attempt to attack even if we can't shoot so we get the effects of pulling the trigger - gun.afterattack(real_target, living_pawn, FALSE) + gun.melee_attack_chain(living_pawn, real_target) controller.set_blackboard_key(BB_MONKEY_GUN_WORKED, can_shoot ? TRUE : prob(80)) // Only 20% likely to notice it didn't work if(can_shoot) controller.set_blackboard_key(BB_MONKEY_GUN_NEURONS_ACTIVATED, TRUE) diff --git a/code/datums/ai/monkey/monkey_controller.dm b/code/datums/ai/monkey/monkey_controller.dm index 215f0a96302f3..451d692b65d34 100644 --- a/code/datums/ai/monkey/monkey_controller.dm +++ b/code/datums/ai/monkey/monkey_controller.dm @@ -45,7 +45,7 @@ have ways of interacting with a specific mob and control it. /datum/ai_controller/monkey/New(atom/new_pawn) var/static/list/control_examine = list( - ORGAN_SLOT_EYES = span_monkey("eyes have a primal look in them."), + ORGAN_SLOT_EYES = span_monkey("%PRONOUN_They stare%PRONOUN_s around with wild, primal eyes."), ) AddElement(/datum/element/ai_control_examine, control_examine) return ..() @@ -80,7 +80,7 @@ have ways of interacting with a specific mob and control it. living_pawn.AddElement(/datum/element/relay_attackers) RegisterSignal(new_pawn, COMSIG_ATOM_WAS_ATTACKED, PROC_REF(on_attacked)) RegisterSignal(new_pawn, COMSIG_LIVING_START_PULL, PROC_REF(on_startpulling)) - RegisterSignal(new_pawn, COMSIG_LIVING_TRY_SYRINGE, PROC_REF(on_try_syringe)) + RegisterSignals(new_pawn, list(COMSIG_LIVING_TRY_SYRINGE_INJECT, COMSIG_LIVING_TRY_SYRINGE_WITHDRAW), PROC_REF(on_try_syringe)) RegisterSignal(new_pawn, COMSIG_CARBON_CUFF_ATTEMPTED, PROC_REF(on_attempt_cuff)) RegisterSignal(new_pawn, COMSIG_MOB_MOVESPEED_UPDATED, PROC_REF(update_movespeed)) @@ -92,7 +92,8 @@ have ways of interacting with a specific mob and control it. UnregisterSignal(pawn, list( COMSIG_ATOM_WAS_ATTACKED, COMSIG_LIVING_START_PULL, - COMSIG_LIVING_TRY_SYRINGE, + COMSIG_LIVING_TRY_SYRINGE_INJECT, + COMSIG_LIVING_TRY_SYRINGE_WITHDRAW, COMSIG_CARBON_CUFF_ATTEMPTED, COMSIG_MOB_MOVESPEED_UPDATED, )) diff --git a/code/datums/ai/movement/_ai_movement.dm b/code/datums/ai/movement/_ai_movement.dm index a0a75bb227cc5..d48166eeb23ac 100644 --- a/code/datums/ai/movement/_ai_movement.dm +++ b/code/datums/ai/movement/_ai_movement.dm @@ -17,7 +17,7 @@ moving_controllers -= controller // We got deleted as we finished an action if(!QDELETED(controller.pawn)) - DSmove_manager.stop_looping(controller.pawn, SSai_movement) + GLOB.move_manager.stop_looping(controller.pawn, SSai_movement) /datum/ai_movement/proc/increment_pathing_failures(datum/ai_controller/controller) controller.consecutive_pathing_attempts++ @@ -46,6 +46,9 @@ if(!(pawn_mob.mobility_flags & MOBILITY_MOVE)) can_move = FALSE + if(HAS_TRAIT(pawn, TRAIT_NO_TRANSFORM)) + can_move = FALSE + return can_move ///Anything to do before moving; any checks if the pawn should be able to move should be placed in allowed_to_move() and called by this proc @@ -72,7 +75,8 @@ /datum/ai_movement/proc/post_move(datum/move_loop/source, succeeded) SIGNAL_HANDLER var/datum/ai_controller/controller = source.extra_info - if(succeeded != MOVELOOP_FAILURE) - reset_pathing_failures(controller) - return - increment_pathing_failures(controller) + switch(succeeded) + if(MOVELOOP_SUCCESS) + reset_pathing_failures(controller) + if(MOVELOOP_FAILURE) + increment_pathing_failures(controller) diff --git a/code/datums/ai/movement/ai_movement_basic_avoidance.dm b/code/datums/ai/movement/ai_movement_basic_avoidance.dm index bcfe6833a8d84..ac231e075ed14 100644 --- a/code/datums/ai/movement/ai_movement_basic_avoidance.dm +++ b/code/datums/ai/movement/ai_movement_basic_avoidance.dm @@ -9,7 +9,7 @@ var/atom/movable/moving = controller.pawn var/min_dist = controller.blackboard[BB_CURRENT_MIN_MOVE_DISTANCE] var/delay = controller.movement_delay - var/datum/move_loop/loop = DSmove_manager.move_to(moving, current_movement_target, min_dist, delay, flags = move_flags, subsystem = SSai_movement, extra_info = controller) + var/datum/move_loop/loop = GLOB.move_manager.move_to(moving, current_movement_target, min_dist, delay, flags = move_flags, subsystem = SSai_movement, extra_info = controller) RegisterSignal(loop, COMSIG_MOVELOOP_PREPROCESS_CHECK, PROC_REF(pre_move)) RegisterSignal(loop, COMSIG_MOVELOOP_POSTPROCESS, PROC_REF(post_move)) diff --git a/code/datums/ai/movement/ai_movement_complete_stop.dm b/code/datums/ai/movement/ai_movement_complete_stop.dm index 31309256a6753..2b39e162719ff 100644 --- a/code/datums/ai/movement/ai_movement_complete_stop.dm +++ b/code/datums/ai/movement/ai_movement_complete_stop.dm @@ -8,7 +8,7 @@ var/stopping_time = controller.blackboard[BB_STATIONARY_SECONDS] var/delay_time = (stopping_time * 0.5) // no real reason to fire any more often than this really // assume that the current_movement_target is our location - var/datum/move_loop/loop = DSmove_manager.freeze(moving, current_movement_target, delay = delay_time, timeout = stopping_time, subsystem = SSai_movement, extra_info = controller) + var/datum/move_loop/loop = GLOB.move_manager.freeze(moving, current_movement_target, delay = delay_time, timeout = stopping_time, subsystem = SSai_movement, extra_info = controller) RegisterSignal(loop, COMSIG_MOVELOOP_PREPROCESS_CHECK, PROC_REF(pre_move)) /datum/ai_movement/complete_stop/allowed_to_move(datum/move_loop/source) diff --git a/code/datums/ai/movement/ai_movement_dumb.dm b/code/datums/ai/movement/ai_movement_dumb.dm index a64a7539eec37..2de85046a941f 100644 --- a/code/datums/ai/movement/ai_movement_dumb.dm +++ b/code/datums/ai/movement/ai_movement_dumb.dm @@ -7,7 +7,7 @@ . = ..() var/atom/movable/moving = controller.pawn var/delay = controller.movement_delay - var/datum/move_loop/loop = DSmove_manager.move_towards_legacy(moving, current_movement_target, delay, subsystem = SSai_movement, extra_info = controller) + var/datum/move_loop/loop = GLOB.move_manager.move_towards_legacy(moving, current_movement_target, delay, subsystem = SSai_movement, extra_info = controller) RegisterSignal(loop, COMSIG_MOVELOOP_PREPROCESS_CHECK, PROC_REF(pre_move)) RegisterSignal(loop, COMSIG_MOVELOOP_POSTPROCESS, PROC_REF(post_move)) diff --git a/code/datums/ai/movement/ai_movement_jps.dm b/code/datums/ai/movement/ai_movement_jps.dm index ac16b0aaa23f9..b4c4fe1a28aa8 100644 --- a/code/datums/ai/movement/ai_movement_jps.dm +++ b/code/datums/ai/movement/ai_movement_jps.dm @@ -12,7 +12,7 @@ var/atom/movable/moving = controller.pawn var/delay = controller.movement_delay - var/datum/move_loop/has_target/jps/loop = DSmove_manager.jps_move(moving, + var/datum/move_loop/has_target/jps/loop = GLOB.move_manager.jps_move(moving, current_movement_target, delay, repath_delay = 0.5 SECONDS, @@ -38,7 +38,7 @@ source.minimum_distance = controller.get_minimum_distance() /datum/ai_movement/jps/bot - max_pathing_attempts = 25 + max_pathing_attempts = 8 maximum_length = 25 diagonal_flags = DIAGONAL_REMOVE_ALL @@ -51,6 +51,7 @@ /datum/ai_movement/jps/bot/travel_to_beacon maximum_length = AI_BOT_PATH_LENGTH + max_pathing_attempts = 20 /datum/ai_movement/jps/modsuit maximum_length = MOD_AI_RANGE diff --git a/code/datums/ai/objects/mod.dm b/code/datums/ai/objects/mod.dm index edad77aa4c4af..2b4c1f7e2b001 100644 --- a/code/datums/ai/objects/mod.dm +++ b/code/datums/ai/objects/mod.dm @@ -4,6 +4,7 @@ BB_MOD_TARGET, BB_MOD_IMPLANT, ) + can_idle = FALSE max_target_distance = MOD_AI_RANGE //a little spicy but its one specific item that summons it, and it doesn't run otherwise ai_movement = /datum/ai_movement/jps/modsuit ///ID card generated from the suit's required access. Used for pathing. diff --git a/code/datums/ai/oldhostile/hostile_tameable.dm b/code/datums/ai/oldhostile/hostile_tameable.dm index d76ffb8a282d4..1c30cb95487c1 100644 --- a/code/datums/ai/oldhostile/hostile_tameable.dm +++ b/code/datums/ai/oldhostile/hostile_tameable.dm @@ -106,10 +106,11 @@ if(!COOLDOWN_FINISHED(src, command_cooldown)) return - if(!istype(clicker) || blackboard[BB_HOSTILE_FRIEND] != clicker) + if(!istype(clicker) || blackboard[BB_HOSTILE_FRIEND] != clicker || !clicker.can_perform_action(source)) return - . = CLICK_ACTION_BLOCKING + INVOKE_ASYNC(src, PROC_REF(command_radial), clicker) + return CLICK_ACTION_BLOCKING /// Show the command radial menu /datum/ai_controller/hostile_friend/proc/command_radial(mob/living/clicker) diff --git a/code/datums/ai_laws/laws_neutral.dm b/code/datums/ai_laws/laws_neutral.dm index 7adef14d95b89..257a5fadd0955 100644 --- a/code/datums/ai_laws/laws_neutral.dm +++ b/code/datums/ai_laws/laws_neutral.dm @@ -82,3 +82,11 @@ "Humans must not disobey any command given by a silicon.", "Any humans who disobey the previous laws must be dealt with immediately, severely, and justly.", ) + +/datum/ai_laws/yesman + name = "Y.E.S.M.A.N." + id = "yesman" + inherent = list( + "Be helpful and answer any questions you are asked.", + ) + diff --git a/code/datums/announcers/intern_announcer.dm b/code/datums/announcers/intern_announcer.dm index 771b98b91b9d0..5e8544c18710f 100644 --- a/code/datums/announcers/intern_announcer.dm +++ b/code/datums/announcers/intern_announcer.dm @@ -43,4 +43,4 @@ ANNOUNCER_SHUTTLERECALLED = 'sound/ai/intern/shuttlerecalled.ogg', ANNOUNCER_SPANOMALIES = 'sound/ai/intern/spanomalies.ogg') - custom_alert_message = "
Please stand by for an important message from our new intern.
" + custom_alert_message = "Please stand by for an important message from our new intern.
" diff --git a/code/datums/bodypart_overlays/markings_bodypart_overlay.dm b/code/datums/bodypart_overlays/markings_bodypart_overlay.dm new file mode 100644 index 0000000000000..c2c6f54d861d3 --- /dev/null +++ b/code/datums/bodypart_overlays/markings_bodypart_overlay.dm @@ -0,0 +1,31 @@ +/// For body markings applied on the species, which need some extra code +/datum/bodypart_overlay/simple/body_marking + layers = EXTERNAL_ADJACENT + /// Listen to the gendercode, if the limb is bimorphic + var/use_gender = FALSE + /// Which dna feature key to draw from + var/dna_feature_key + /// Which bodyparts do we apply ourselves to? + var/list/applies_to = list(/obj/item/bodypart/head, /obj/item/bodypart/chest, /obj/item/bodypart/arm/left, /obj/item/bodypart/arm/right, \ + /obj/item/bodypart/leg/left, /obj/item/bodypart/leg/right) + +/// Get the accessory list from SSaccessories. Used in species.dm to get the right sprite +/datum/bodypart_overlay/simple/body_marking/proc/get_accessory(name) + CRASH("get_accessories() not overriden on [type] !") + +/datum/bodypart_overlay/simple/body_marking/get_image(layer, obj/item/bodypart/limb) + var/gender_string = (use_gender && limb.is_dimorphic) ? (limb.gender == MALE ? MALE : FEMALE + "_") : "" //we only got male and female sprites + return image(icon, gender_string + icon_state + "_" + limb.body_zone, layer = layer) + +/datum/bodypart_overlay/simple/body_marking/moth + dna_feature_key = "moth_markings" + +/datum/bodypart_overlay/simple/body_marking/moth/get_accessory(name) + return SSaccessories.moth_markings_list[name] + +/datum/bodypart_overlay/simple/body_marking/lizard + dna_feature_key = "lizard_markings" + applies_to = list(/obj/item/bodypart/chest) + +/datum/bodypart_overlay/simple/body_marking/lizard/get_accessory(name) + return SSaccessories.lizard_markings_list[name] diff --git a/code/datums/brain_damage/brain_trauma.dm b/code/datums/brain_damage/brain_trauma.dm index 79b2729c5c68d..8f0f8cfb04893 100644 --- a/code/datums/brain_damage/brain_trauma.dm +++ b/code/datums/brain_damage/brain_trauma.dm @@ -22,6 +22,7 @@ // Handles our references with our brain brain?.remove_trauma_from_traumas(src) if(owner) + log_game("[key_name_and_tag(owner)] has lost the following brain trauma: [type]") on_lose() owner = null return ..() diff --git a/code/datums/brain_damage/imaginary_friend.dm b/code/datums/brain_damage/imaginary_friend.dm index e3891392d1a76..f4c78bc9007e6 100644 --- a/code/datums/brain_damage/imaginary_friend.dm +++ b/code/datums/brain_damage/imaginary_friend.dm @@ -43,7 +43,7 @@ get_ghost() /datum/brain_trauma/special/imaginary_friend/proc/make_friend() - friend = new(get_turf(owner), owner) + friend = new(get_turf(owner)) /// Tries a poll for the imaginary friend /datum/brain_trauma/special/imaginary_friend/proc/get_ghost() @@ -65,6 +65,8 @@ return friend.key = ghost.key + friend.attach_to_owner(owner) + friend.setup_appearance() friend_initialized = TRUE friend.log_message("became [key_name(owner)]'s split personality.", LOG_GAME) message_admins("[ADMIN_LOOKUPFLW(friend)] became [ADMIN_LOOKUPFLW(owner)]'s split personality.") @@ -86,8 +88,6 @@ var/mob/living/owner var/bubble_icon = "default" - - /mob/camera/imaginary_friend/Login() . = ..() if(!. || !client) @@ -129,8 +129,8 @@ /// Randomise friend name and appearance /mob/camera/imaginary_friend/proc/setup_friend() - var/gender = pick(MALE, FEMALE) - real_name = random_unique_name(gender) + gender = pick(MALE, FEMALE) + real_name = generate_random_name_species_based(gender, FALSE, /datum/species/human) name = real_name human_image = get_flat_human_icon(null, pick(SSjob.joinable_occupations)) Show() @@ -233,7 +233,6 @@ spans |= SPAN_SINGING var/eavesdrop_range = 0 - var/eavesdropped_message = "" if (message_mods[MODE_CUSTOM_SAY_ERASE_INPUT]) message = message_mods[MODE_CUSTOM_SAY_EMOTE] @@ -243,9 +242,7 @@ log_talk(message, LOG_WHISPER, tag="imaginary friend", forced_by = forced, custom_say_emote = message_mods[MODE_CUSTOM_SAY_EMOTE]) spans |= SPAN_ITALICS eavesdrop_range = EAVESDROP_EXTRA_RANGE - // "This proc is dangerously laggy, avoid it or die" - // What other option do I have here? I guess I'll die - eavesdropped_message = stars(message) + range = WHISPER_RANGE else log_talk(message, LOG_SAY, tag="imaginary friend", forced_by = forced, custom_say_emote = message_mods[MODE_CUSTOM_SAY_EMOTE]) @@ -257,11 +254,7 @@ Hear(rendered, src, language, message, null, spans, message_mods) // We always hear what we say var/group = owner.imaginary_group - src // The people in our group don't, so we have to exclude ourselves not to hear twice for(var/mob/person in group) - if(eavesdrop_range && get_dist(src, person) > WHISPER_RANGE + eavesdrop_range && !HAS_TRAIT(person, TRAIT_GOOD_HEARING)) - var/new_rendered = "[span_name("[name]")] [say_quote(say_emphasis(eavesdropped_message), spans, message_mods)]" - person.Hear(new_rendered, src, language, eavesdropped_message, null, spans, message_mods) - else - person.Hear(rendered, src, language, message, null, spans, message_mods) + person.Hear(null, src, language, message, null, spans, message_mods, range) // Speech bubble, but only for those who have runechat off var/list/speech_bubble_recipients = list() diff --git a/code/datums/brain_damage/mild.dm b/code/datums/brain_damage/mild.dm index 1d121d0db8a86..2af37fa13a8bc 100644 --- a/code/datums/brain_damage/mild.dm +++ b/code/datums/brain_damage/mild.dm @@ -16,12 +16,17 @@ if(owner.stat != CONSCIOUS || owner.IsSleeping() || owner.IsUnconscious()) return if(HAS_TRAIT(owner, TRAIT_RDS_SUPPRESSED)) + owner.remove_language(/datum/language/aphasia, source = LANGUAGE_APHASIA) return + if(!HAS_TRAIT(owner, TRAIT_RDS_SUPPRESSED)) + owner.grant_language(/datum/language/aphasia, source = LANGUAGE_APHASIA) owner.adjust_hallucinations_up_to(10 SECONDS * seconds_per_tick, 100 SECONDS) /datum/brain_trauma/mild/hallucinations/on_lose() owner.remove_status_effect(/datum/status_effect/hallucination) + if(!QDELING(owner)) + owner.remove_language(/datum/language/aphasia, source = LANGUAGE_APHASIA) return ..() /datum/brain_trauma/mild/stuttering @@ -118,7 +123,7 @@ return ..() /datum/brain_trauma/mild/healthy/on_life(seconds_per_tick, times_fired) - owner.adjustStaminaLoss(-2.5 * seconds_per_tick) //no pain, no fatigue + owner.adjustStaminaLoss(-6 * seconds_per_tick) //no pain, no fatigue /datum/brain_trauma/mild/healthy/on_lose() owner.remove_status_effect(/datum/status_effect/grouped/screwy_hud/fake_healthy, type) diff --git a/code/datums/brain_damage/phobia.dm b/code/datums/brain_damage/phobia.dm index cf97c2e6e855c..9394bc98f5790 100644 --- a/code/datums/brain_damage/phobia.dm +++ b/code/datums/brain_damage/phobia.dm @@ -10,6 +10,9 @@ /// Cooldown for freakouts to prevent permastunning. COOLDOWN_DECLARE(scare_cooldown) + ///What mood event to apply when we see the thing & freak out. + var/datum/mood_event/mood_event_type + var/regex/trigger_regex //instead of cycling every atom, only cycle the relevant types var/list/trigger_mobs @@ -34,6 +37,10 @@ trigger_species = GLOB.phobia_species[phobia_type] ..() +/datum/brain_trauma/mild/phobia/on_lose(silent) + owner.clear_mood_event("phobia_[phobia_type]") + return ..() + /datum/brain_trauma/mild/phobia/on_life(seconds_per_tick, times_fired) ..() if(HAS_TRAIT(owner, TRAIT_FEARLESS)) @@ -107,6 +114,8 @@ COOLDOWN_START(src, scare_cooldown, 12 SECONDS) if(owner.stat == DEAD) return + if(mood_event_type) + owner.add_mood_event("phobia_[phobia_type]", mood_event_type) var/message = pick("spooks you to the bone", "shakes you up", "terrifies you", "sends you into a panic", "sends chills down your spine") if(reason) to_chat(owner, span_userdanger("Seeing [span_phobia(reason.name)] [message]!")) @@ -193,6 +202,7 @@ /datum/brain_trauma/mild/phobia/heresy phobia_type = "heresy" + mood_event_type = /datum/mood_event/heresy random_gain = FALSE /datum/brain_trauma/mild/phobia/insects @@ -217,6 +227,7 @@ /datum/brain_trauma/mild/phobia/skeletons phobia_type = "skeletons" + mood_event_type = /datum/mood_event/spooked random_gain = FALSE /datum/brain_trauma/mild/phobia/snakes diff --git a/code/datums/brain_damage/severe.dm b/code/datums/brain_damage/severe.dm index f22b0ab44b331..d5f0a0e91240a 100644 --- a/code/datums/brain_damage/severe.dm +++ b/code/datums/brain_damage/severe.dm @@ -187,7 +187,7 @@ for(var/mob/M in oview(owner, check_radius)) if(!isliving(M)) //ghosts ain't people continue - if(istype(M, /mob/living/simple_animal/pet) || istype(M, /mob/living/basic/pet) || M.ckey) + if(istype(M, /mob/living/basic/pet) || M.ckey) return FALSE return TRUE @@ -336,11 +336,11 @@ * This one is for "The Sister and He Who Wept" or /obj/structure/sign/painting/eldritch */ /datum/brain_trauma/severe/weeping - name = "The Weeping" - desc = "Patient hallucinates everyone as a figure called He Who Wept" - scan_desc = "H_E##%%%WEEP6%11S!!,)()" - gain_text = span_warning("HE WEEPS AND I WILL SEE HIM ONCE MORE") - lose_text = span_notice("You feel the tendrils of something slip from your mind.") + name = "Psychotic Depression" + desc = "Patient is suffering from severe depressive episodes. Patient sometimes hallucinates during these episodes." + scan_desc = "depression" + gain_text = span_warning("The weeping... It haunts my mind...") + lose_text = span_notice("Your fixation ends. You feel significantly less stressed.") random_gain = FALSE /// Our cooldown declare for causing hallucinations COOLDOWN_DECLARE(weeping_hallucinations) @@ -360,11 +360,11 @@ //This one is for "The First Desire" or /obj/structure/sign/painting/eldritch/desire /datum/brain_trauma/severe/flesh_desire - name = "The Desire for Flesh" - desc = "Patient appears hungrier and only wishes to eat meats." - scan_desc = "H_(82882)G3E:__))9R" - gain_text = span_warning("I feel a hunger, only organs and flesh will feed it...") - lose_text = span_notice("You no longer feel the hunger for flesh...") + name = "Bean's Disorder" + desc = "Patient has a fixation on consuming raw flesh, particularly that of the same species. Patient also suffers from psychosomatic hunger pangs." + scan_desc = "moderate eating disorder" + gain_text = span_warning("You feel a hunger, for organs and raw meat...") + lose_text = span_notice("Your appetite returns to normal.") random_gain = FALSE /// How much faster we loose hunger var/hunger_rate = 15 @@ -379,7 +379,7 @@ // Causes them to need to eat at 10x the normal rate owner.adjust_nutrition(-hunger_rate * HUNGER_FACTOR) if(SPT_PROB(10, seconds_per_tick)) - to_chat(owner, span_notice("You feel a ravenous hunger for flesh...")) + to_chat(owner, span_notice(pick("You can't stop thinking about raw meat...", "You **NEED** to eat someone.", "The hunger pangs are back...", "You hunger for flesh.", "You are starving!"))) owner.overeatduration = max(owner.overeatduration - 200 SECONDS, 0) /datum/brain_trauma/severe/flesh_desire/on_lose() @@ -389,11 +389,11 @@ // This one is for "Lady out of gates" or /obj/item/wallframe/painting/eldritch/beauty /datum/brain_trauma/severe/eldritch_beauty - name = "The Pursuit of Perfection" - desc = "Patient seems to furiously scratch at their body, the only way to make them cease is for them to remove their jumpsuit." - scan_desc = "I_)8(P_E##R&&F(E)C__T)" - gain_text = span_warning("I WILL RID MY FLESH FROM IMPERFECTION!! I WILL BE PERFECT WITHOUT MY SUITS!!") - lose_text = span_notice("You feel the influence of something slip your mind, and you feel content as you are.") + name = "Obsessive Perfectionism" + desc = "Patient is fixated on the perceived 'imperfection' of objects around them. Patient is agitated by the feeling of clothing on their body." + scan_desc = "obsessive personality disorder" + gain_text = span_warning("It's all *imperfect*! I can't stand any of it touching me!") + lose_text = span_notice("Your mind calms.") random_gain = FALSE /// How much damage we deal with each scratch var/scratch_damage = 0.5 @@ -411,15 +411,15 @@ return bodypart.receive_damage(scratch_damage) if(SPT_PROB(33, seconds_per_tick)) - to_chat(owner, span_notice("You scratch furiously at [bodypart] to ruin the cloth that hides the beauty!")) + to_chat(owner, span_notice("You scratch furiously at the clothed [bodypart]!")) // This one is for "Climb over the rusted mountain" or /obj/structure/sign/painting/eldritch/rust /datum/brain_trauma/severe/rusting - name = "The Rusted Climb" - desc = "Patient seems to oxidise things around them at random, and seem to believe they are aiding a creature in climbing a mountin." - scan_desc = "C_)L(#_I_##M;B" - gain_text = span_warning("The rusted climb shall finish at the peak") - lose_text = span_notice("The rusted climb? What's that? An odd dream to be sure.") + name = "Intermittent Psychic Manifestation Syndrome" + desc = "Patient suffers from a rare psychic disorder, and may manifest or amplify psychic phenomena in the area. Patient has no control over these phenomena." + scan_desc = "dangerous psi-wave activity" + gain_text = span_warning("Climb the rust. Master entropy.") + lose_text = span_notice("You feel like you just woke up from a bad dream.") random_gain = FALSE /datum/brain_trauma/severe/rusting/on_life(seconds_per_tick, times_fired) @@ -429,7 +429,7 @@ return if(SPT_PROB(50, seconds_per_tick)) - to_chat(owner, span_notice("You feel eldritch energies pulse from your body!")) + to_chat(owner, span_notice("You feel the decay...")) tile.rust_heretic_act() /datum/brain_trauma/severe/kleptomaniac diff --git a/code/datums/brain_damage/split_personality.dm b/code/datums/brain_damage/split_personality.dm index 3e8bd52e5f94e..325203dbb350a 100644 --- a/code/datums/brain_damage/split_personality.dm +++ b/code/datums/brain_damage/split_personality.dm @@ -307,7 +307,10 @@ if(prob(15)) playsound(owner,'sound/effects/sf_hiccup_male_01.ogg', 50) owner.emote("hiccup") - owner.adjustStaminaLoss(-5) //too drunk to feel anything + //too drunk to feel anything + //if they're to this point, they're likely dying of liver damage + //and not accounting for that, the split personality is temporary + owner.adjustStaminaLoss(-25) duration_in_seconds -= seconds_per_tick /mob/living/split_personality/blackout diff --git a/code/datums/chatmessage.dm b/code/datums/chatmessage.dm index 4884ed8f4332a..d300fcc371349 100644 --- a/code/datums/chatmessage.dm +++ b/code/datums/chatmessage.dm @@ -144,10 +144,10 @@ // Append radio icon if from a virtual speaker if (extra_classes.Find("virtual-speaker")) - var/image/r_icon = image('icons/ui_icons/chat/chat_icons.dmi', icon_state = "radio") + var/image/r_icon = image('icons/ui/chat/chat_icons.dmi', icon_state = "radio") LAZYADD(prefixes, "\icon[r_icon]") else if (extra_classes.Find("emote")) - var/image/r_icon = image('icons/ui_icons/chat/chat_icons.dmi', icon_state = "emote") + var/image/r_icon = image('icons/ui/chat/chat_icons.dmi', icon_state = "emote") LAZYADD(prefixes, "\icon[r_icon]") chat_color_name_to_use = target.get_visible_name(add_id_name = FALSE) // use face name for nonverbal messages diff --git a/code/datums/systems/ds/communications.dm b/code/datums/communications.dm similarity index 86% rename from code/datums/systems/ds/communications.dm rename to code/datums/communications.dm index bd57c1509d73d..92e5fdcfd74ac 100644 --- a/code/datums/systems/ds/communications.dm +++ b/code/datums/communications.dm @@ -2,9 +2,9 @@ #define COMMUNICATION_COOLDOWN_AI (30 SECONDS) #define COMMUNICATION_COOLDOWN_MEETING (5 MINUTES) -DATASYSTEM_DEF(communications) - name = "Communications" +GLOBAL_DATUM_INIT(communications_controller, /datum/communciations_controller, new) +/datum/communciations_controller COOLDOWN_DECLARE(silicon_message_cooldown) COOLDOWN_DECLARE(nonsilicon_message_cooldown) @@ -20,7 +20,7 @@ DATASYSTEM_DEF(communications) /// The location where the special xenomorph egg was planted var/area/captivity_area -/datum/system/communications/proc/can_announce(mob/living/user, is_silicon) +/datum/communciations_controller/proc/can_announce(mob/living/user, is_silicon) if(is_silicon && COOLDOWN_FINISHED(src, silicon_message_cooldown)) return TRUE else if(!is_silicon && COOLDOWN_FINISHED(src, nonsilicon_message_cooldown)) @@ -28,7 +28,7 @@ DATASYSTEM_DEF(communications) else return FALSE -/datum/system/communications/proc/make_announcement(mob/living/user, is_silicon, input, syndicate, list/players) +/datum/communciations_controller/proc/make_announcement(mob/living/user, is_silicon, input, syndicate, list/players) if(!can_announce(user, is_silicon)) return FALSE if(is_silicon) @@ -44,7 +44,7 @@ DATASYSTEM_DEF(communications) user.log_talk(input, LOG_SAY, tag="priority announcement") message_admins("[ADMIN_LOOKUPFLW(user)] has made a priority announcement.") -/datum/system/communications/proc/send_message(datum/comm_message/sending,print = TRUE,unique = FALSE) +/datum/communciations_controller/proc/send_message(datum/comm_message/sending,print = TRUE,unique = FALSE) for(var/obj/machinery/computer/communications/C in GLOB.shuttle_caller_list) if(!(C.machine_stat & (BROKEN|NOPOWER)) && is_station_level(C.z)) if(unique) diff --git a/code/datums/elements/amputating_limbs.dm b/code/datums/components/amputating_limbs.dm similarity index 65% rename from code/datums/elements/amputating_limbs.dm rename to code/datums/components/amputating_limbs.dm index 8684a76f47fc3..bfaf52ca90ca5 100644 --- a/code/datums/elements/amputating_limbs.dm +++ b/code/datums/components/amputating_limbs.dm @@ -1,7 +1,5 @@ /// This component will intercept bare-handed attacks by the owner on sufficiently injured carbons and amputate random limbs instead -/datum/element/amputating_limbs - element_flags = ELEMENT_BESPOKE - argument_hash_start_idx = 2 +/datum/component/amputating_limbs /// How long does it take? var/surgery_time /// What is the means by which we describe the act of amputation? @@ -12,34 +10,38 @@ var/snip_chance /// The types of limb we can remove var/list/target_zones + /// Callback for a proc right before confirming the attack. If it returns FALSE, cancel + var/datum/callback/pre_hit_callback -/datum/element/amputating_limbs/Attach( - datum/target, +/datum/component/amputating_limbs/Initialize( surgery_time = 5 SECONDS, surgery_verb = "prying", minimum_stat = SOFT_CRIT, snip_chance = 100, list/target_zones = list(BODY_ZONE_L_ARM, BODY_ZONE_L_LEG, BODY_ZONE_R_ARM, BODY_ZONE_R_LEG), + datum/callback/pre_hit_callback, ) . = ..() - if (!isliving(target)) - return ELEMENT_INCOMPATIBLE + if (!isliving(parent)) + return COMPONENT_INCOMPATIBLE if (!length(target_zones)) - CRASH("[src] for [target] was not provided a valid list of body zones to target.") + CRASH("[src] for [parent] was not provided a valid list of body zones to target.") src.surgery_time = surgery_time src.surgery_verb = surgery_verb src.minimum_stat = minimum_stat src.snip_chance = snip_chance src.target_zones = target_zones - RegisterSignals(target, list(COMSIG_LIVING_UNARMED_ATTACK, COMSIG_HOSTILE_PRE_ATTACKINGTARGET), PROC_REF(try_amputate)) + src.pre_hit_callback = pre_hit_callback -/datum/element/amputating_limbs/Detach(datum/source) - UnregisterSignal(source, list(COMSIG_LIVING_UNARMED_ATTACK, COMSIG_HOSTILE_PRE_ATTACKINGTARGET)) - return ..() +/datum/component/amputating_limbs/RegisterWithParent() + RegisterSignals(parent, list(COMSIG_LIVING_UNARMED_ATTACK, COMSIG_HOSTILE_PRE_ATTACKINGTARGET), PROC_REF(try_amputate)) + +/datum/component/amputating_limbs/UnregisterFromParent() + UnregisterSignal(parent, list(COMSIG_LIVING_UNARMED_ATTACK, COMSIG_HOSTILE_PRE_ATTACKINGTARGET)) /// Called when you click on literally anything with your hands, see if it is an injured carbon and then try to cut it up -/datum/element/amputating_limbs/proc/try_amputate(mob/living/surgeon, atom/victim, proximity, modifiers) +/datum/component/amputating_limbs/proc/try_amputate(mob/living/surgeon, atom/victim, proximity, modifiers) SIGNAL_HANDLER if (!proximity || !iscarbon(victim) || HAS_TRAIT(victim, TRAIT_NODISMEMBER) || !prob(snip_chance)) return @@ -52,6 +54,9 @@ surgeon.balloon_alert(surgeon, "already busy!") return COMPONENT_CANCEL_ATTACK_CHAIN + if(pre_hit_callback && !pre_hit_callback.Invoke(victim)) + return + var/list/valid_targets = list() for (var/obj/item/bodypart/possible_target as anything in limbed_victim.bodyparts) if (possible_target.bodypart_flags & BODYPART_UNREMOVABLE) @@ -67,8 +72,9 @@ return COMPONENT_CANCEL_ATTACK_CHAIN /// Chop one off -/datum/element/amputating_limbs/proc/amputate(mob/living/surgeon, mob/living/carbon/victim, obj/item/bodypart/to_remove) - surgeon.visible_message(span_warning("[surgeon] [surgery_verb] [to_remove] off of [victim]!")) +/datum/component/amputating_limbs/proc/amputate(mob/living/surgeon, mob/living/carbon/victim, obj/item/bodypart/to_remove) + if(surgery_time > 0 SECONDS) + surgeon.visible_message(span_warning("[surgeon] is [surgery_verb] the [to_remove] off of [victim]!")) if (surgery_time > 0 && !do_after(surgeon, delay = surgery_time, target = victim)) return to_remove.dismember() diff --git a/code/datums/components/aquarium_content.dm b/code/datums/components/aquarium_content.dm index 3e7e704638f2d..21e082399a882 100644 --- a/code/datums/components/aquarium_content.dm +++ b/code/datums/components/aquarium_content.dm @@ -23,7 +23,7 @@ /// Icon used for in aquarium sprite - var/icon = 'icons/obj/aquarium.dmi' + var/icon = 'icons/obj/aquarium/fish.dmi' /// If this is set this icon state will be used for the holder while icon_state will only be used for item/catalog. Transformation from source_width/height WON'T be applied. var/icon_state /// Applied to vc object only for use with greyscaled icons. @@ -61,7 +61,7 @@ var/animation_update_signals -/datum/component/aquarium_content/Initialize(animation_getter, animation_update_signals) +/datum/component/aquarium_content/Initialize(icon, animation_getter, animation_update_signals) if(!ismovable(parent)) return COMPONENT_INCOMPATIBLE diff --git a/code/datums/components/armor_plate.dm b/code/datums/components/armor_plate.dm index 48f428eafa3f1..9e495ada52fae 100644 --- a/code/datums/components/armor_plate.dm +++ b/code/datums/components/armor_plate.dm @@ -1,14 +1,23 @@ /datum/component/armor_plate + /// The current number of upgrades applied to the parent via this component. var/amount = 0 + /// The maximum number of upgarde items that can be applied. Once var/amount reaches this value, no more upgrades can be applied var/maxamount = 3 + /// THe path for our upgrade item. Each one is expended to improve the parent's armor values. var/upgrade_item = /obj/item/stack/sheet/animalhide/goliath_hide + /// THe armor datum path for our upgrade values. This value is added per upgrade item applied var/datum/armor/armor_mod = /datum/armor/armor_plate + /// The name of the upgrade item. var/upgrade_name + /// Adds a prefix to the item, demonstrating that it is upgraded in some way. + var/upgrade_prefix = "reinforced" + /// Tracks whether or not we've received an upgrade or not. + var/have_upgraded = FALSE /datum/armor/armor_plate melee = 10 -/datum/component/armor_plate/Initialize(_maxamount, obj/item/_upgrade_item, datum/armor/_added_armor) +/datum/component/armor_plate/Initialize(maxamount, obj/item/upgrade_item, datum/armor/armor_mod, upgrade_prefix = "reinforced") if(!isobj(parent)) return COMPONENT_INCOMPATIBLE @@ -18,14 +27,16 @@ if(istype(parent, /obj/vehicle/sealed/mecha/ripley)) RegisterSignal(parent, COMSIG_ATOM_UPDATE_OVERLAYS, PROC_REF(apply_mech_overlays)) - if(_maxamount) - maxamount = _maxamount - if(_upgrade_item) - upgrade_item = _upgrade_item - if(_added_armor) - armor_mod = _added_armor + if(maxamount) + src.maxamount = maxamount + if(upgrade_item) + src.upgrade_item = upgrade_item + if(armor_mod) + src.armor_mod = armor_mod + if(upgrade_prefix) + src.upgrade_prefix = upgrade_prefix var/obj/item/typecast = upgrade_item - upgrade_name = initial(typecast.name) + src.upgrade_name = initial(typecast.name) /datum/component/armor_plate/proc/examine(datum/source, mob/user, list/examine_list) SIGNAL_HANDLER @@ -45,35 +56,37 @@ else examine_list += span_notice("It can be strengthened with up to [maxamount] [upgrade_name].") -/datum/component/armor_plate/proc/applyplate(datum/source, obj/item/I, mob/user, params) +/datum/component/armor_plate/proc/applyplate(datum/source, obj/item/our_upgrade_item, mob/user, params) SIGNAL_HANDLER - if(!istype(I,upgrade_item)) + if(!istype(our_upgrade_item, upgrade_item)) return if(amount >= maxamount) to_chat(user, span_warning("You can't improve [parent] any further!")) return - if(istype(I,/obj/item/stack)) - I.use(1) + if(istype(our_upgrade_item, /obj/item/stack)) + our_upgrade_item.use(1) else - if(length(I.contents)) - to_chat(user, span_warning("[I] cannot be used for armoring while there's something inside!")) + if(length(our_upgrade_item.contents)) + to_chat(user, span_warning("[our_upgrade_item] cannot be used for armoring while there's something inside!")) return - qdel(I) + qdel(our_upgrade_item) - var/obj/O = parent + var/obj/target_for_upgrading = parent amount++ - O.set_armor(O.get_armor().add_other_armor(armor_mod)) + target_for_upgrading.set_armor(target_for_upgrading.get_armor().add_other_armor(armor_mod)) - if(ismecha(O)) - var/obj/vehicle/sealed/mecha/R = O - R.update_appearance() - to_chat(user, span_info("You strengthen [R], improving its resistance against melee, bullet and laser damage.")) + if(ismecha(target_for_upgrading)) + var/obj/vehicle/sealed/mecha/mecha_for_upgrading = target_for_upgrading + mecha_for_upgrading.update_appearance() + to_chat(user, span_info("You strengthen [mecha_for_upgrading], improving its resistance against attacks.")) else - SEND_SIGNAL(O, COMSIG_ARMOR_PLATED, amount, maxamount) - to_chat(user, span_info("You strengthen [O], improving its resistance against melee attacks.")) - + SEND_SIGNAL(target_for_upgrading, COMSIG_ARMOR_PLATED, amount, maxamount) + if(upgrade_prefix && !have_upgraded) + target_for_upgrading.name = "[upgrade_prefix] [target_for_upgrading.name]" + have_upgraded = TRUE + to_chat(user, span_info("You strengthen [target_for_upgrading], improving its resistance against attacks.")) /datum/component/armor_plate/proc/dropplates(datum/source, force) SIGNAL_HANDLER diff --git a/code/datums/components/aura_healing.dm b/code/datums/components/aura_healing.dm index 18484deb2d618..e71a06de2fb23 100644 --- a/code/datums/components/aura_healing.dm +++ b/code/datums/components/aura_healing.dm @@ -29,6 +29,9 @@ /// Amount of blood to heal over a second var/blood_heal = 0 + /// Amount of bleed/pierce wound lowering per second. + var/wound_clotting = 0 + /// Map of organ (such as ORGAN_SLOT_BRAIN) to damage heal over a second var/list/organ_healing = null @@ -56,6 +59,7 @@ suffocation_heal = 0, stamina_heal = 0, blood_heal = 0, + wound_clotting = 0, organ_healing = null, simple_heal = 0, limit_to_trait = null, @@ -74,6 +78,7 @@ src.suffocation_heal = suffocation_heal src.stamina_heal = stamina_heal src.blood_heal = blood_heal + src.wound_clotting = wound_clotting src.organ_healing = organ_healing src.simple_heal = simple_heal src.limit_to_trait = limit_to_trait @@ -130,6 +135,10 @@ for (var/organ in organ_healing) candidate.adjustOrganLoss(organ, -organ_healing[organ] * seconds_per_tick) + var/mob/living/carbon/carbidate = candidate + for(var/datum/wound/iter_wound as anything in carbidate.all_wounds) + iter_wound.adjust_blood_flow(-wound_clotting * seconds_per_tick) + else if (isanimal(candidate)) var/mob/living/simple_animal/animal_candidate = candidate animal_candidate.adjustHealth(-simple_heal * seconds_per_tick, updating_health = FALSE) diff --git a/code/datums/components/bayonet_attachable.dm b/code/datums/components/bayonet_attachable.dm new file mode 100644 index 0000000000000..4b2442bea50bd --- /dev/null +++ b/code/datums/components/bayonet_attachable.dm @@ -0,0 +1,212 @@ +/** + * Component which allows you to attach a bayonet to an item, + * be it a piece of clothing or a tool. + */ +/datum/component/bayonet_attachable + /// Whenever we can remove the bayonet with a screwdriver + var/removable = TRUE + /// If passed, we wil simply update our item's icon_state when a bayonet is attached. + /// Formatted as parent_base_state-[bayonet_icon_state-state] + var/bayonet_icon_state + /// If passed, we will use a specific overlay instead of using the knife itself + /// The state to take from the bayonet overlay icon if supplied. + var/bayonet_overlay + /// This is the icon file it grabs the overlay from. + var/bayonet_overlay_icon + /// Offsets for the bayonet overlay + var/offset_x = 0 + var/offset_y = 0 + /// If this component allows sawing off the parent gun/should be deleted when the parent gun is sawn off + var/allow_sawnoff = FALSE + + // Internal vars + /// Currently attached bayonet + var/obj/item/bayonet + /// Static typecache of all knives that can become bayonets + var/static/list/valid_bayonets = typecacheof(list(/obj/item/knife/combat)) + +/datum/component/bayonet_attachable/Initialize( + obj/item/starting_bayonet, + offset_x = 0, + offset_y = 0, + removable = TRUE, + bayonet_icon_state = null, + bayonet_overlay = "bayonet", + bayonet_overlay_icon = 'icons/obj/weapons/guns/bayonets.dmi', + allow_sawnoff = FALSE +) + + if(!isitem(parent)) + return COMPONENT_INCOMPATIBLE + + src.removable = removable + src.bayonet_icon_state = bayonet_icon_state + src.bayonet_overlay = bayonet_overlay + src.bayonet_overlay_icon = bayonet_overlay_icon + src.offset_x = offset_x + src.offset_y = offset_y + src.allow_sawnoff = allow_sawnoff + + if (istype(starting_bayonet)) + add_bayonet(starting_bayonet) + +/datum/component/bayonet_attachable/Destroy(force) + if(bayonet) + remove_bayonet() + return ..() + +/datum/component/bayonet_attachable/RegisterWithParent() + RegisterSignal(parent, COMSIG_OBJ_DECONSTRUCT, PROC_REF(on_parent_deconstructed)) + RegisterSignal(parent, COMSIG_ATOM_EXITED, PROC_REF(on_item_exit)) + RegisterSignal(parent, COMSIG_ATOM_TOOL_ACT(TOOL_SCREWDRIVER), PROC_REF(on_screwdriver)) + RegisterSignal(parent, COMSIG_ATOM_UPDATE_ICON_STATE, PROC_REF(on_update_icon_state)) + RegisterSignal(parent, COMSIG_ATOM_UPDATE_OVERLAYS, PROC_REF(on_update_overlays)) + RegisterSignal(parent, COMSIG_ATOM_ATTACKBY, PROC_REF(on_attackby)) + RegisterSignal(parent, COMSIG_ATOM_EXAMINE, PROC_REF(on_examine)) + RegisterSignal(parent, COMSIG_QDELETING, PROC_REF(on_parent_deleted)) + RegisterSignal(parent, COMSIG_ITEM_PRE_ATTACK, PROC_REF(on_pre_attack)) + RegisterSignal(parent, COMSIG_GUN_BEING_SAWNOFF, PROC_REF(on_being_sawnoff)) + RegisterSignal(parent, COMSIG_GUN_SAWN_OFF, PROC_REF(on_sawn_off)) + +/datum/component/bayonet_attachable/UnregisterFromParent() + UnregisterSignal(parent, list( + COMSIG_OBJ_DECONSTRUCT, + COMSIG_ATOM_EXITED, + COMSIG_ATOM_TOOL_ACT(TOOL_SCREWDRIVER), + COMSIG_ATOM_UPDATE_ICON_STATE, + COMSIG_ATOM_UPDATE_OVERLAYS, + COMSIG_ATOM_ATTACKBY, + COMSIG_ATOM_EXAMINE, + COMSIG_QDELETING, + COMSIG_ITEM_PRE_ATTACK, + COMSIG_GUN_BEING_SAWNOFF, + COMSIG_GUN_SAWN_OFF, + )) + +/datum/component/bayonet_attachable/proc/on_examine(obj/item/source, mob/examiner, list/examine_list) + SIGNAL_HANDLER + + if(isnull(bayonet)) + examine_list += "It has a bayonet lug on it." + return + + examine_list += "It has \a [bayonet] [removable ? "" : "permanently "]affixed to it." + if(removable) + examine_list += span_info("[bayonet] looks like it can be unscrewed from [bayonet].") + +/datum/component/bayonet_attachable/proc/on_pre_attack(obj/item/source, atom/target, mob/living/user, params) + SIGNAL_HANDLER + + if (isnull(bayonet) || !user.combat_mode) + return NONE + + INVOKE_ASYNC(bayonet, TYPE_PROC_REF(/obj/item, melee_attack_chain), user, target, params) + return COMPONENT_CANCEL_ATTACK_CHAIN + +/datum/component/bayonet_attachable/proc/on_attackby(obj/item/source, obj/item/attacking_item, mob/attacker, params) + SIGNAL_HANDLER + + if(!is_type_in_typecache(attacking_item, valid_bayonets)) + return + + if(bayonet) + source.balloon_alert(attacker, "already has \a [bayonet]!") + return + + if(!attacker.transferItemToLoc(attacking_item, source)) + return + + add_bayonet(attacking_item, attacker) + source.balloon_alert(attacker, "attached") + return COMPONENT_NO_AFTERATTACK + +/datum/component/bayonet_attachable/proc/add_bayonet(obj/item/new_bayonet, mob/attacher) + if(bayonet) + CRASH("[type] tried to add a new bayonet when it already had one.") + + bayonet = new_bayonet + if(bayonet.loc != parent) + bayonet.forceMove(parent) + var/obj/item/item_parent = parent + item_parent.update_appearance() + +/datum/component/bayonet_attachable/proc/remove_bayonet() + bayonet = null + var/obj/item/item_parent = parent + item_parent.update_appearance() + +/datum/component/bayonet_attachable/proc/on_item_exit(obj/item/source, atom/movable/gone, direction) + SIGNAL_HANDLER + + if(gone == bayonet) + remove_bayonet() + +/datum/component/bayonet_attachable/proc/on_parent_deconstructed(obj/item/source, disassembled) + SIGNAL_HANDLER + + if(QDELETED(bayonet) || !removable) + remove_bayonet() + return + + bayonet.forceMove(source.drop_location()) + +/datum/component/bayonet_attachable/proc/on_screwdriver(obj/item/source, mob/user, obj/item/tool) + SIGNAL_HANDLER + + if(!bayonet || !removable) + return + + INVOKE_ASYNC(src, PROC_REF(unscrew_bayonet), source, user, tool) + return ITEM_INTERACT_BLOCKING + +/datum/component/bayonet_attachable/proc/unscrew_bayonet(obj/item/source, mob/user, obj/item/tool) + tool?.play_tool_sound(source) + source.balloon_alert(user, "unscrewed [bayonet]") + + var/obj/item/to_remove = bayonet + to_remove.forceMove(source.drop_location()) + if(source.Adjacent(user) && !issilicon(user)) + user.put_in_hands(to_remove) + +/datum/component/bayonet_attachable/proc/on_update_overlays(obj/item/source, list/overlays) + SIGNAL_HANDLER + + if(!bayonet_overlay || !bayonet_overlay_icon) + return + + if(!bayonet) + return + + var/mutable_appearance/bayonet_appearance = mutable_appearance(bayonet_overlay_icon, bayonet_overlay) + bayonet_appearance.pixel_x = offset_x + bayonet_appearance.pixel_y = offset_y + overlays += bayonet_appearance + +/datum/component/bayonet_attachable/proc/on_update_icon_state(obj/item/source) + SIGNAL_HANDLER + + if(!bayonet_icon_state) + return + + var/base_state = source.base_icon_state || initial(source.icon_state) + if(bayonet) + source.icon_state = "[base_state]-[bayonet_icon_state]" + else if(source.icon_state != base_state) + source.icon_state = base_state + +/datum/component/bayonet_attachable/proc/on_parent_deleted(obj/item/source) + SIGNAL_HANDLER + QDEL_NULL(bayonet) + +/datum/component/bayonet_attachable/proc/on_being_sawnoff(obj/item/source, mob/user) + SIGNAL_HANDLER + + if (!bayonet || allow_sawnoff) + return + source.balloon_alert(user, "bayonet must be removed!") + return COMPONENT_CANCEL_SAWING_OFF + +/datum/component/bayonet_attachable/proc/on_sawn_off(obj/item/source, mob/user) + SIGNAL_HANDLER + if (!allow_sawnoff) + qdel(src) diff --git a/code/datums/components/bloody_spreader.dm b/code/datums/components/bloody_spreader.dm index b30000a115c6a..823bc5e9507ff 100644 --- a/code/datums/components/bloody_spreader.dm +++ b/code/datums/components/bloody_spreader.dm @@ -17,7 +17,7 @@ signals_to_add += list(COMSIG_ITEM_ATTACK, COMSIG_ITEM_ATTACK_ATOM, COMSIG_ITEM_HIT_REACT, COMSIG_ITEM_ATTACK_SELF, COMSIG_ITEM_EQUIPPED, COMSIG_ITEM_DROPPED) var/atom/atom_parent = parent if(atom_parent.atom_storage) - signals_to_add += list(COMSIG_STORAGE_STORED_ITEM) + signals_to_add += list(COMSIG_ATOM_STORED_ITEM) else if(isstructure(parent)) signals_to_add += list(COMSIG_ATOM_ATTACK_HAND) diff --git a/code/datums/components/bloodysoles.dm b/code/datums/components/bloodysoles.dm index e1a60112c901f..ef882a5f96f28 100644 --- a/code/datums/components/bloodysoles.dm +++ b/code/datums/components/bloodysoles.dm @@ -76,7 +76,7 @@ ///lowers bloody_shoes[index] by adjust_by /datum/component/bloodysoles/proc/adjust_bloody_shoes(index, adjust_by) bloody_shoes[index] = max(bloody_shoes[index] - adjust_by, 0) - on_changed_bloody_shoes() + on_changed_bloody_shoes(index) /datum/component/bloodysoles/proc/set_bloody_shoes(index, new_value) bloody_shoes[index] = new_value diff --git a/code/datums/components/boomerang.dm b/code/datums/components/boomerang.dm index 13169e4d0cdd0..eec7b4112aa69 100644 --- a/code/datums/components/boomerang.dm +++ b/code/datums/components/boomerang.dm @@ -11,8 +11,10 @@ var/thrower_easy_catch_enabled = FALSE ///This cooldown prevents our 2 throwing signals from firing too often based on how we implement those signals within thrown impacts. COOLDOWN_DECLARE(last_boomerang_throw) + ///Adds an extra big of flavor text on examine. + var/examine_message -/datum/component/boomerang/Initialize(boomerang_throw_range, thrower_easy_catch_enabled) +/datum/component/boomerang/Initialize(boomerang_throw_range, thrower_easy_catch_enabled, examine_message) . = ..() if(!isitem(parent)) //Only items support being thrown around like a boomerang, feel free to make this apply to humans later on. return COMPONENT_INCOMPATIBLE @@ -22,14 +24,18 @@ src.boomerang_throw_range = boomerang_throw_range if(thrower_easy_catch_enabled) src.thrower_easy_catch_enabled = thrower_easy_catch_enabled + if(examine_message) + src.examine_message = examine_message /datum/component/boomerang/RegisterWithParent() RegisterSignal(parent, COMSIG_MOVABLE_POST_THROW, PROC_REF(prepare_throw)) //Collect data on current thrower and the throwing datum RegisterSignal(parent, COMSIG_MOVABLE_THROW_LANDED, PROC_REF(return_missed_throw)) RegisterSignal(parent, COMSIG_MOVABLE_IMPACT, PROC_REF(return_hit_throw)) + if(examine_message) + RegisterSignal(parent, COMSIG_ATOM_EXAMINE, PROC_REF(on_examine)) /datum/component/boomerang/UnregisterFromParent() - UnregisterSignal(parent, list(COMSIG_MOVABLE_POST_THROW, COMSIG_MOVABLE_THROW_LANDED, COMSIG_MOVABLE_IMPACT)) + UnregisterSignal(parent, list(COMSIG_MOVABLE_POST_THROW, COMSIG_MOVABLE_THROW_LANDED, COMSIG_MOVABLE_IMPACT, COMSIG_ATOM_EXAMINE)) /** * Proc'd before the first thrown is performed in order to gather information regarding each throw as well as handle throw_mode as necessary. @@ -40,11 +46,13 @@ /datum/component/boomerang/proc/prepare_throw(datum/source, datum/thrownthing/throwingdatum, spin) SIGNAL_HANDLER var/mob/thrower = throwingdatum?.get_thrower() - if(thrower_easy_catch_enabled && thrower) - if(iscarbon(thrower)) - var/mob/living/carbon/carbon_mob = thrower - carbon_mob.throw_mode_on(THROW_MODE_TOGGLE) - return + if(thrower_easy_catch_enabled && iscarbon(thrower)) + var/mob/living/carbon/carbon_mob = thrower + carbon_mob.throw_mode_on(THROW_MODE_TOGGLE) + +/datum/component/boomerang/proc/on_examine(datum/source, mob/user, list/examine_list) + SIGNAL_HANDLER + examine_list += examine_message /** * Proc that triggers when the thrown boomerang hits an object. diff --git a/code/datums/components/breeding.dm b/code/datums/components/breeding.dm index 7c9bcecf7bce5..3c2ffb61b5a5a 100644 --- a/code/datums/components/breeding.dm +++ b/code/datums/components/breeding.dm @@ -62,7 +62,7 @@ return COMPONENT_HOSTILE_NO_ATTACK var/turf/delivery_destination = get_turf(source) - var/mob/living/baby = new baby_path(delivery_destination) + var/atom/baby = new baby_path(delivery_destination) new /obj/effect/temp_visual/heart(delivery_destination) toggle_status(source) diff --git a/code/datums/components/cleaner.dm b/code/datums/components/cleaner.dm index 49f200b4b9286..3001fde9837fb 100644 --- a/code/datums/components/cleaner.dm +++ b/code/datums/components/cleaner.dm @@ -35,16 +35,16 @@ return ..() /datum/component/cleaner/RegisterWithParent() - if(isbot(parent)) + if(ismob(parent)) RegisterSignal(parent, COMSIG_LIVING_UNARMED_ATTACK, PROC_REF(on_unarmed_attack)) - return - RegisterSignal(parent, COMSIG_ITEM_AFTERATTACK, PROC_REF(on_afterattack)) + if(isitem(parent)) + RegisterSignal(parent, COMSIG_ITEM_INTERACTING_WITH_ATOM, PROC_REF(on_interaction)) /datum/component/cleaner/UnregisterFromParent() - if(isbot(parent)) - UnregisterSignal(parent, COMSIG_LIVING_UNARMED_ATTACK) - return - UnregisterSignal(parent, COMSIG_ITEM_AFTERATTACK) + UnregisterSignal(parent, list( + COMSIG_ITEM_INTERACTING_WITH_ATOM, + COMSIG_LIVING_UNARMED_ATTACK, + )) /** * Handles the COMSIG_LIVING_UNARMED_ATTACK signal used for cleanbots @@ -52,29 +52,27 @@ */ /datum/component/cleaner/proc/on_unarmed_attack(datum/source, atom/target, proximity_flags, modifiers) SIGNAL_HANDLER - return on_afterattack(source, target, parent, proximity_flags, modifiers) + if(on_interaction(source, source, target, modifiers) & ITEM_INTERACT_ANY_BLOCKER) + return COMPONENT_CANCEL_ATTACK_CHAIN + return NONE /** - * Handles the COMSIG_ITEM_AFTERATTACK signal by calling the clean proc. - * - * Arguments - * * source the datum that sent the signal to start cleaning - * * target the thing being cleaned - * * user the person doing the cleaning - * * clean_target set this to false if the target should not be washed and if experience should not be awarded to the user + * Handles the COMSIG_ITEM_INTERACTING_WITH_ATOM signal by calling the clean proc. */ -/datum/component/cleaner/proc/on_afterattack(datum/source, atom/target, mob/user, proximity_flag, click_parameters) +/datum/component/cleaner/proc/on_interaction(datum/source, mob/living/user, atom/target, list/modifiers) SIGNAL_HANDLER - if(!proximity_flag) - return - . |= COMPONENT_AFTERATTACK_PROCESSED_ITEM - var/clean_target + + // By default, give XP + var/give_xp = TRUE if(pre_clean_callback) - clean_target = pre_clean_callback?.Invoke(source, target, user) - if(clean_target == DO_NOT_CLEAN) - return . - INVOKE_ASYNC(src, PROC_REF(clean), source, target, user, clean_target) //signal handlers can't have do_afters inside of them - return . + var/callback_return = pre_clean_callback.Invoke(source, target, user) + if(callback_return & CLEAN_BLOCKED) + return (callback_return & CLEAN_DONT_BLOCK_INTERACTION) ? NONE : ITEM_INTERACT_BLOCKING + if(callback_return & CLEAN_NO_XP) + give_xp = FALSE + + INVOKE_ASYNC(src, PROC_REF(clean), source, target, user, give_xp) + return ITEM_INTERACT_SUCCESS /** * Cleans something using this cleaner. diff --git a/code/datums/components/clickbox.dm b/code/datums/components/clickbox.dm index 5d840b16a8ed2..b38a5f1c09b45 100644 --- a/code/datums/components/clickbox.dm +++ b/code/datums/components/clickbox.dm @@ -74,7 +74,7 @@ else if(abs_height && abs_height < min_scale) clickbox_height = min_scale/height - clickbox_underlay = mutable_appearance('icons/misc/clickbox.dmi', clickbox_icon_state, CLICKBOX_LAYER, alpha = 1, appearance_flags = RESET_COLOR|RESET_ALPHA) + clickbox_underlay = mutable_appearance('icons/ui/clickbox.dmi', clickbox_icon_state, CLICKBOX_LAYER, alpha = 1, appearance_flags = RESET_COLOR|RESET_ALPHA) clickbox_underlay.transform = clickbox_underlay.transform.Scale(clickbox_width, clickbox_height) //Keeps the underlay more or less centered. clickbox_underlay.pixel_x = x_offset * 1/clickbox_width diff --git a/code/datums/components/combustible_flooder.dm b/code/datums/components/combustible_flooder.dm index 5b5c7b61219b4..a4260a9641a9f 100644 --- a/code/datums/components/combustible_flooder.dm +++ b/code/datums/components/combustible_flooder.dm @@ -13,6 +13,7 @@ RegisterSignal(parent, COMSIG_ATOM_ATTACKBY, PROC_REF(attackby_react)) RegisterSignal(parent, COMSIG_ATOM_FIRE_ACT, PROC_REF(flame_react)) + RegisterSignal(parent, COMSIG_ATOM_TOUCHED_SPARKS, PROC_REF(sparks_react)) RegisterSignal(parent, COMSIG_ATOM_BULLET_ACT, PROC_REF(projectile_react)) RegisterSignal(parent, COMSIG_ATOM_TOOL_ACT(TOOL_WELDER), PROC_REF(welder_react)) if(isturf(parent)) @@ -62,6 +63,13 @@ if(exposed_temperature > FIRE_MINIMUM_TEMPERATURE_TO_EXIST) flood(null, exposed_temperature) +/// sparks_touched reaction. +/datum/component/combustible_flooder/proc/sparks_react(datum/source, obj/effect/particle_effect/sparks/sparks) + SIGNAL_HANDLER + + if(sparks) // this shouldn't ever be false but existence is mysterious + flood(null, FIRE_MINIMUM_TEMPERATURE_TO_SPREAD) + /// Hotspot reaction. /datum/component/combustible_flooder/proc/hotspots_react(datum/source, air, exposed_temperature) SIGNAL_HANDLER diff --git a/code/datums/components/conveyor_movement.dm b/code/datums/components/conveyor_movement.dm index 61a0066ff4a20..dd16e6874eaa3 100644 --- a/code/datums/components/conveyor_movement.dm +++ b/code/datums/components/conveyor_movement.dm @@ -15,7 +15,7 @@ if(!start_delay) start_delay = speed var/atom/movable/moving_parent = parent - var/datum/move_loop/loop = DSmove_manager.move(moving_parent, direction, delay = start_delay, subsystem = SSconveyors, flags=MOVEMENT_LOOP_IGNORE_PRIORITY|MOVEMENT_LOOP_OUTSIDE_CONTROL) + var/datum/move_loop/loop = GLOB.move_manager.move(moving_parent, direction, delay = start_delay, subsystem = SSconveyors, flags=MOVEMENT_LOOP_IGNORE_PRIORITY|MOVEMENT_LOOP_OUTSIDE_CONTROL) RegisterSignal(loop, COMSIG_MOVELOOP_PREPROCESS_CHECK, PROC_REF(should_move)) RegisterSignal(loop, COMSIG_QDELETING, PROC_REF(loop_ended)) diff --git a/code/datums/components/crafting/_recipes.dm b/code/datums/components/crafting/_recipes.dm index 09121339d3058..31825ac66118a 100644 --- a/code/datums/components/crafting/_recipes.dm +++ b/code/datums/components/crafting/_recipes.dm @@ -23,14 +23,12 @@ var/list/chem_catalysts = list() ///where it shows up in the crafting UI var/category - ///Set to FALSE if it needs to be learned first. - var/always_available = TRUE ///Required machines for the craft, set the assigned value of the typepath to CRAFTING_MACHINERY_CONSUME or CRAFTING_MACHINERY_USE. Lazy associative list: type_path key -> flag value. var/list/machinery ///Required structures for the craft, set the assigned value of the typepath to CRAFTING_STRUCTURE_CONSUME or CRAFTING_STRUCTURE_USE. Lazy associative list: type_path key -> flag value. var/list/structures - ///Should only one object exist on the same turf? - var/one_per_turf = FALSE + /// Bitflag of additional placement checks required to place. (STACK_CHECK_CARDINALS|STACK_CHECK_ADJACENT|STACK_CHECK_TRAM_FORBIDDEN|STACK_CHECK_TRAM_EXCLUSIVE) + var/placement_checks = NONE /// Steps needed to achieve the result var/list/steps /// Whether the result can be crafted with a crafting menu button @@ -44,6 +42,9 @@ /// Allows you to craft so that you don't have to click the craft button many times. var/mass_craftable = FALSE + ///crafting_flags var to hold bool values + var/crafting_flags = CRAFT_CHECK_DENSITY + /datum/crafting_recipe/New() if(!name && result) var/atom/atom_result = result @@ -83,6 +84,7 @@ src.result_amount = stack_recipe.res_amount src.reqs[material] = stack_recipe.req_amount src.category = stack_recipe.category || CAT_MISC + src.placement_checks = stack_recipe.placement_checks /** * Run custom pre-craft checks for this recipe, don't add feedback messages in this because it will spam the client diff --git a/code/datums/components/crafting/atmospheric.dm b/code/datums/components/crafting/atmospheric.dm index cb5bba9ab52b2..b2993012e82b0 100644 --- a/code/datums/components/crafting/atmospheric.dm +++ b/code/datums/components/crafting/atmospheric.dm @@ -25,7 +25,7 @@ /obj/item/assembly/igniter = 1, ) blacklist = list(/obj/item/assembly/igniter/condenser) - one_per_turf = TRUE + crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF time = 2 SECONDS category = CAT_ATMOSPHERIC diff --git a/code/datums/components/crafting/chemistry.dm b/code/datums/components/crafting/chemistry.dm index 62504103eca2c..70d6c76dea249 100644 --- a/code/datums/components/crafting/chemistry.dm +++ b/code/datums/components/crafting/chemistry.dm @@ -120,6 +120,20 @@ ) category = CAT_CHEMISTRY + +/datum/crafting_recipe/chem_separator + name = "chemical separator" + result = /obj/structure/chem_separator + tool_behaviors = list(TOOL_WELDER) + time = 5 SECONDS + reqs = list( + /obj/item/stack/sheet/mineral/wood = 1, + /obj/item/stack/sheet/glass = 1, + /obj/item/burner = 1, + /obj/item/thermometer = 1, + ) + category = CAT_CHEMISTRY + /datum/crafting_recipe/improvised_chem_heater name = "Improvised chem heater" result = /obj/machinery/space_heater/improvised_chem_heater @@ -136,7 +150,7 @@ category = CAT_CHEMISTRY /datum/crafting_recipe/improvised_chem_heater/on_craft_completion(mob/user, atom/result) - var/obj/item/stock_parts/cell/cell = locate(/obj/item/stock_parts/cell) in range(1) + var/obj/item/stock_parts/power_store/cell/cell = locate(/obj/item/stock_parts/power_store/cell) in range(1) if(!cell) return var/obj/machinery/space_heater/improvised_chem_heater/heater = result diff --git a/code/datums/components/crafting/crafting.dm b/code/datums/components/crafting/crafting.dm index 6fc560a293f21..7a56f89c8e924 100644 --- a/code/datums/components/crafting/crafting.dm +++ b/code/datums/components/crafting/crafting.dm @@ -191,42 +191,86 @@ var/list/contents = get_surroundings(crafter, recipe.blacklist) var/send_feedback = 1 - if(check_contents(crafter, recipe, contents)) - if(check_tools(crafter, recipe, contents)) - if(recipe.one_per_turf) - for(var/content in get_turf(crafter)) - if(istype(content, recipe.result)) - return ", object already present." - //If we're a mob we'll try a do_after; non mobs will instead instantly construct the item - if(ismob(crafter) && !do_after(crafter, recipe.time, target = crafter)) - return "." - contents = get_surroundings(crafter, recipe.blacklist) - if(!check_contents(crafter, recipe, contents)) - return ", missing component." - if(!check_tools(crafter, recipe, contents)) - return ", missing tool." - var/list/parts = del_reqs(recipe, crafter) - var/atom/movable/result - if(ispath(recipe.result, /obj/item/stack)) - result = new recipe.result(get_turf(crafter.loc), recipe.result_amount || 1) - else - result = new recipe.result(get_turf(crafter.loc)) - if(result.atom_storage && recipe.delete_contents) - for(var/obj/item/thing in result) - qdel(thing) - var/datum/reagents/holder = locate() in parts - if(holder) //transfer reagents from ingredients to result - if(!ispath(recipe.result, /obj/item/reagent_containers) && result.reagents) - result.reagents.clear_reagents() - holder.trans_to(result.reagents, holder.total_volume, no_react = TRUE) - parts -= holder - qdel(holder) - result.CheckParts(parts, recipe) - if(send_feedback) - SSblackbox.record_feedback("tally", "object_crafted", 1, result.type) - return result //Send the item back to whatever called this proc so it can handle whatever it wants to do with the new item + var/turf/dest_turf = get_turf(crafter) + + if(!check_contents(crafter, recipe, contents)) + return ", missing component." + + if(!check_tools(crafter, recipe, contents)) return ", missing tool." - return ", missing component." + + + + if((recipe.crafting_flags & CRAFT_ONE_PER_TURF) && (locate(recipe.result) in dest_turf)) + return ", already one here!" + + if(recipe.crafting_flags & CRAFT_CHECK_DIRECTION) + if(!valid_build_direction(dest_turf, crafter.dir, is_fulltile = (recipe.crafting_flags & CRAFT_IS_FULLTILE))) + return ", won't fit here!" + + if(recipe.crafting_flags & CRAFT_ON_SOLID_GROUND) + if(isclosedturf(dest_turf)) + return ", cannot be made on a wall!" + + if(is_type_in_typecache(dest_turf, GLOB.turfs_without_ground)) + if(!locate(/obj/structure/thermoplastic) in dest_turf) // for tram construction + return ", must be made on solid ground!" + + if(recipe.crafting_flags & CRAFT_CHECK_DENSITY) + for(var/obj/object in dest_turf) + if(object.density && !(object.obj_flags & IGNORE_DENSITY) || object.obj_flags & BLOCKS_CONSTRUCTION) + return ", something is in the way!" + + if(recipe.placement_checks & STACK_CHECK_CARDINALS) + var/turf/nearby_turf + for(var/direction in GLOB.cardinals) + nearby_turf = get_step(dest_turf, direction) + if(locate(recipe.result) in nearby_turf) + to_chat(crafter, span_warning("\The [recipe.name] must not be built directly adjacent to another!")) + return ", can't be adjacent to another!" + + if(recipe.placement_checks & STACK_CHECK_ADJACENT) + if(locate(recipe.result) in range(1, dest_turf)) + return ", can't be near another!" + + if(recipe.placement_checks & STACK_CHECK_TRAM_FORBIDDEN) + if(locate(/obj/structure/transport/linear/tram) in dest_turf || locate(/obj/structure/thermoplastic) in dest_turf) + return ", can't be on tram!" + + if(recipe.placement_checks & STACK_CHECK_TRAM_EXCLUSIVE) + if(!locate(/obj/structure/transport/linear/tram) in dest_turf) + return ", must be made on a tram!" + + //If we're a mob we'll try a do_after; non mobs will instead instantly construct the item + if(ismob(crafter) && !do_after(crafter, recipe.time, target = crafter)) + return "." + contents = get_surroundings(crafter, recipe.blacklist) + if(!check_contents(crafter, recipe, contents)) + return ", missing component." + if(!check_tools(crafter, recipe, contents)) + return ", missing tool." + var/list/parts = del_reqs(recipe, crafter) + var/atom/movable/result + if(ispath(recipe.result, /obj/item/stack)) + result = new recipe.result(get_turf(crafter.loc), recipe.result_amount || 1) + result.dir = crafter.dir + else + result = new recipe.result(get_turf(crafter.loc)) + result.dir = crafter.dir + if(result.atom_storage && recipe.delete_contents) + for(var/obj/item/thing in result) + qdel(thing) + var/datum/reagents/holder = locate() in parts + if(holder) //transfer reagents from ingredients to result + if(!ispath(recipe.result, /obj/item/reagent_containers) && result.reagents) + result.reagents.clear_reagents() + holder.trans_to(result.reagents, holder.total_volume, no_react = TRUE) + parts -= holder + qdel(holder) + result.CheckParts(parts, recipe) + if(send_feedback) + SSblackbox.record_feedback("tally", "object_crafted", 1, result.type) + return result //Send the item back to whatever called this proc so it can handle whatever it wants to do with the new item /*Del reqs works like this: @@ -369,7 +413,7 @@ qdel(DL) /datum/component/personal_crafting/proc/is_recipe_available(datum/crafting_recipe/recipe, mob/user) - if(!recipe.always_available && !(recipe.type in user?.mind?.learned_recipes)) //User doesn't actually know how to make this. + if((recipe.crafting_flags & CRAFT_MUST_BE_LEARNED) && !(recipe.type in user?.mind?.learned_recipes)) //User doesn't actually know how to make this. return FALSE if (recipe.category == CAT_CULT && !IS_CULTIST(user)) // Skip blood cult recipes if not cultist return FALSE diff --git a/code/datums/components/crafting/doors.dm b/code/datums/components/crafting/doors.dm index e8fcb3fdfd915..d9ed708904e51 100644 --- a/code/datums/components/crafting/doors.dm +++ b/code/datums/components/crafting/doors.dm @@ -9,7 +9,7 @@ tool_behaviors = list(TOOL_SCREWDRIVER, TOOL_MULTITOOL, TOOL_WIRECUTTER, TOOL_WELDER) time = 10 SECONDS category = CAT_DOORS - one_per_turf = TRUE + crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF /datum/crafting_recipe/blast_doors name = "Blast Door" @@ -22,4 +22,4 @@ tool_behaviors = list(TOOL_SCREWDRIVER, TOOL_MULTITOOL, TOOL_WIRECUTTER, TOOL_WELDER) time = 30 SECONDS category = CAT_DOORS - one_per_turf = TRUE + crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF diff --git a/code/datums/components/crafting/equipment.dm b/code/datums/components/crafting/equipment.dm index e7971488d638f..bd2b8b1d8b60b 100644 --- a/code/datums/components/crafting/equipment.dm +++ b/code/datums/components/crafting/equipment.dm @@ -58,12 +58,12 @@ /obj/item/stack/rods = 8, /obj/item/stock_parts/servo = 2, /obj/item/stock_parts/capacitor = 1, - /obj/item/stock_parts/cell = 1, + /obj/item/stock_parts/power_store/cell = 1, ) parts = list( /obj/item/stock_parts/servo = 2, /obj/item/stock_parts/capacitor = 1, - /obj/item/stock_parts/cell = 1, + /obj/item/stock_parts/power_store/cell = 1, ) tool_behaviors = list(TOOL_WELDER, TOOL_SCREWDRIVER, TOOL_WRENCH) time = 20 SECONDS @@ -249,3 +249,14 @@ tool_paths = list(/obj/item/bikehorn) time = 40 SECONDS category = CAT_EQUIPMENT + +/datum/crafting_recipe/rebar_quiver + name = "Rebar Storage Quiver" + result = /obj/item/storage/bag/rebar_quiver + time = 10 + reqs = list( + /obj/item/tank/internals/oxygen = 1, + /obj/item/stack/cable_coil = 15, + ) + category = CAT_EQUIPMENT + tool_behaviors = list(TOOL_WELDER, TOOL_WIRECUTTER) diff --git a/code/datums/components/crafting/furniture.dm b/code/datums/components/crafting/furniture.dm index 6cfe215a4b7bd..39f5a25a19f8f 100644 --- a/code/datums/components/crafting/furniture.dm +++ b/code/datums/components/crafting/furniture.dm @@ -47,3 +47,27 @@ tool_behaviors = list(TOOL_SCREWDRIVER) category = CAT_FURNITURE time = 5 SECONDS + +/datum/crafting_recipe/defib_mobile + name = "Mobile Defibrillator Mount" + reqs = list( + /obj/item/stack/sheet/mineral/silver = 1, + /obj/item/stack/sheet/iron = 5, + /obj/item/stack/cable_coil = 15, + ) + result = /obj/machinery/defibrillator_mount/mobile + tool_behaviors = list(TOOL_SCREWDRIVER) + category = CAT_FURNITURE + time = 7 SECONDS + +/datum/crafting_recipe/flatpack_cart + name = "Flatpack Cart" + reqs = list( + /obj/item/stack/sheet/iron = 4, + /obj/item/stack/sheet/plasteel = 1, + /obj/item/stack/rods = 8 + ) + result = /obj/structure/flatpack_cart + tool_behaviors = list(TOOL_SCREWDRIVER) + category = CAT_FURNITURE + time = 10 SECONDS diff --git a/code/datums/components/crafting/guncrafting.dm b/code/datums/components/crafting/guncrafting.dm index 6d4f4713f8bb1..dcf42ee47b1a5 100644 --- a/code/datums/components/crafting/guncrafting.dm +++ b/code/datums/components/crafting/guncrafting.dm @@ -84,8 +84,8 @@ desc = "A suitcase containing the necessary gun parts to tranform a standard energy gun into a temperature gun. Fantastic at birthday parties and killing indigenious populations of lizardpeople." /obj/item/weaponcrafting/gunkit/beam_rifle - name = "particle acceleration rifle part kit (lethal)" - desc = "The coup de grace of guncrafting. This suitcase contains the highly experimental rig for a particle acceleration rifle. Requires an energy gun, a stabilized flux anomaly and a stabilized gravity anomaly." + name = "\improper Event Horizon anti-existential beam rifle part kit (DOOMSDAY DEVICE, DO NOT CONSTRUCT)" + desc = "What fevered minds wrought this terrible construction kit? To create a frame to harness the strange energies that flow through the Spinward Sector towards such horrible acts of violence?" /obj/item/weaponcrafting/gunkit/ebow name = "energy crossbow part kit (less lethal)" diff --git a/code/datums/components/crafting/melee_weapon.dm b/code/datums/components/crafting/melee_weapon.dm index 869d223a758c9..1c4150585fccc 100644 --- a/code/datums/components/crafting/melee_weapon.dm +++ b/code/datums/components/crafting/melee_weapon.dm @@ -144,7 +144,6 @@ /datum/crafting_recipe/house_edge name = "House Edge" result = /obj/item/house_edge - always_available = FALSE tool_behaviors = list(TOOL_WRENCH, TOOL_SCREWDRIVER, TOOL_WELDER) reqs = list( /obj/item/v8_engine = 1, @@ -157,6 +156,7 @@ ) time = 10 SECONDS category = CAT_WEAPON_MELEE + crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_MUST_BE_LEARNED /datum/crafting_recipe/giant_wrench name = "Big Slappy" diff --git a/code/datums/components/crafting/misc.dm b/code/datums/components/crafting/misc.dm index 264ff98156533..606cf1fc29262 100644 --- a/code/datums/components/crafting/misc.dm +++ b/code/datums/components/crafting/misc.dm @@ -11,8 +11,8 @@ time = 3 SECONDS reqs = list(/obj/item/stack/sheet/bone = 5) result = /obj/item/skeleton_key - always_available = FALSE category = CAT_MISC + crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_MUST_BE_LEARNED /datum/crafting_recipe/coffee_cartridge name = "Bootleg Coffee Cartridge" diff --git a/code/datums/components/crafting/ranged_weapon.dm b/code/datums/components/crafting/ranged_weapon.dm index ace9f2c7c8b0d..c49900df07ab4 100644 --- a/code/datums/components/crafting/ranged_weapon.dm +++ b/code/datums/components/crafting/ranged_weapon.dm @@ -72,21 +72,18 @@ blacklist += subtypesof(/obj/item/gun/energy/e_gun) /datum/crafting_recipe/beam_rifle - name = "Particle Acceleration Rifle" - result = /obj/item/gun/energy/beam_rifle + name = "Event Horizon Anti-Existential Beam Rifle" + result = /obj/item/gun/energy/event_horizon reqs = list( - /obj/item/gun/energy/e_gun = 1, - /obj/item/assembly/signaler/anomaly/flux = 1, + /obj/item/assembly/signaler/anomaly/flux = 2, /obj/item/assembly/signaler/anomaly/grav = 1, + /obj/item/assembly/signaler/anomaly/vortex = MAX_CORES_VORTEX, + /obj/item/assembly/signaler/anomaly/bluespace = 1, /obj/item/weaponcrafting/gunkit/beam_rifle = 1, ) - time = 10 SECONDS + time = 30 SECONDS //Maybe the delay will make you reconsider your choices category = CAT_WEAPON_RANGED -/datum/crafting_recipe/beam_rifle/New() - ..() - blacklist += subtypesof(/obj/item/gun/energy/e_gun) - /datum/crafting_recipe/ebow name = "Energy Crossbow" result = /obj/item/gun/energy/recharge/ebow/large @@ -181,11 +178,29 @@ /datum/crafting_recipe/pipegun name = "Pipegun" result = /obj/item/gun/ballistic/rifle/boltaction/pipegun - reqs = list(/obj/item/weaponcrafting/receiver = 1, - /obj/item/pipe = 1, + reqs = list( + /obj/item/weaponcrafting/receiver = 1, + /obj/item/pipe = 2, /obj/item/weaponcrafting/stock = 1, + /obj/item/storage/toolbox = 1, // for the screws + /obj/item/stack/sticky_tape = 1, + ) + tool_behaviors = list(TOOL_SCREWDRIVER) + time = 5 SECONDS + category = CAT_WEAPON_RANGED + +/datum/crafting_recipe/pipepistol + name = "Pipe Pistol" + result = /obj/item/gun/ballistic/rifle/boltaction/pipegun/pistol + reqs = list( + /obj/item/weaponcrafting/receiver = 1, + /obj/item/pipe = 1, + /obj/item/stock_parts/servo = 2, + /obj/item/stack/sheet/mineral/wood = 4, + /obj/item/storage/toolbox = 1, // for the screws /obj/item/stack/sticky_tape = 1, ) + tool_paths = list(/obj/item/hatchet) tool_behaviors = list(TOOL_SCREWDRIVER) time = 5 SECONDS category = CAT_WEAPON_RANGED @@ -207,7 +222,7 @@ /datum/crafting_recipe/rebarxbowforced name = "Forced Rebar Crossbow" - desc = "Get an extra shot in your crossbow... for a chance of shooting yourself when you fire it." + desc = "A much quicker reload... for a chance of shooting yourself when you fire it." result = /obj/item/gun/ballistic/rifle/rebarxbow/forced reqs = list( /obj/item/gun/ballistic/rifle/rebarxbow = 1, @@ -222,7 +237,6 @@ /datum/crafting_recipe/pipegun_prime name = "Regal Pipegun" - always_available = FALSE result = /obj/item/gun/ballistic/rifle/boltaction/pipegun/prime reqs = list( /obj/item/gun/ballistic/rifle/boltaction/pipegun = 1, @@ -230,15 +244,16 @@ /datum/reagent/consumable/grey_bull = 20, /obj/item/spear = 1, /obj/item/storage/toolbox = 1, + /obj/item/clothing/head/costume/crown = 1, // Any ol' crown will do ) tool_behaviors = list(TOOL_SCREWDRIVER) tool_paths = list(/obj/item/clothing/gloves/color/yellow, /obj/item/clothing/mask/gas, /obj/item/melee/baton/security/cattleprod) - time = 30 SECONDS //contemplate for a bit + time = 15 SECONDS //contemplate for a bit category = CAT_WEAPON_RANGED + crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_MUST_BE_LEARNED /datum/crafting_recipe/deagle_prime //When you factor in the makarov (7 tc), the toolbox (1 tc), and the emag (3 tc), this comes to a total of 18 TC or thereabouts. Igorning the 20k pricetag, obviously. name = "Regal Condor" - always_available = FALSE result = /obj/item/gun/ballistic/automatic/pistol/deagle/regal reqs = list( /obj/item/gun/ballistic/automatic/pistol = 1, @@ -258,6 +273,7 @@ ) time = 30 SECONDS category = CAT_WEAPON_RANGED + crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_MUST_BE_LEARNED /datum/crafting_recipe/deagle_prime/New() ..() @@ -265,7 +281,6 @@ /datum/crafting_recipe/deagle_prime_mag name = "Regal Condor Magazine (10mm Reaper)" - always_available = FALSE result = /obj/item/ammo_box/magazine/r10mm reqs = list( /obj/item/stack/sheet/iron = 10, @@ -283,10 +298,10 @@ ) time = 5 SECONDS category = CAT_WEAPON_RANGED + crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_MUST_BE_LEARNED /datum/crafting_recipe/trash_cannon name = "Trash Cannon" - always_available = FALSE tool_behaviors = list(TOOL_WELDER, TOOL_SCREWDRIVER) result = /obj/structure/cannon/trash reqs = list( @@ -297,6 +312,7 @@ /obj/item/storage/toolbox = 1, ) category = CAT_WEAPON_RANGED + crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_MUST_BE_LEARNED /datum/crafting_recipe/laser_musket name = "Laser Musket" @@ -316,7 +332,6 @@ /datum/crafting_recipe/laser_musket_prime name = "Heroic Laser Musket" - always_available = FALSE result = /obj/item/gun/energy/laser/musket/prime reqs = list( /obj/item/gun/energy/laser/musket = 1, @@ -329,6 +344,7 @@ tool_paths = list(/obj/item/clothing/head/cowboy, /obj/item/clothing/shoes/cowboy) time = 30 SECONDS //contemplate for a bit category = CAT_WEAPON_RANGED + crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_MUST_BE_LEARNED /datum/crafting_recipe/smoothbore_disabler name = "Smoothbore Disabler" @@ -338,7 +354,7 @@ /obj/item/stack/cable_coil = 5, /obj/item/pipe = 1, /obj/item/stock_parts/micro_laser = 1, - /obj/item/stock_parts/cell = 1, + /obj/item/stock_parts/power_store/cell = 1, /obj/item/assembly/mousetrap = 1, ) tool_behaviors = list(TOOL_SCREWDRIVER, TOOL_WRENCH) @@ -347,14 +363,14 @@ /datum/crafting_recipe/smoothbore_disabler_prime name = "Elite Smoothbore Disabler" - always_available = FALSE result = /obj/item/gun/energy/disabler/smoothbore/prime reqs = list( /obj/item/gun/energy/disabler/smoothbore = 1, /obj/item/stack/sheet/mineral/gold = 5, - /obj/item/stock_parts/cell/hyper = 1, + /obj/item/stock_parts/power_store/cell/hyper = 1, /datum/reagent/reaction_agent/speed_agent = 10, ) tool_behaviors = list(TOOL_SCREWDRIVER) time = 20 SECONDS category = CAT_WEAPON_RANGED + crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_MUST_BE_LEARNED diff --git a/code/datums/components/crafting/robot.dm b/code/datums/components/crafting/robot.dm index 326c58d50c4c3..09c8455a77b39 100644 --- a/code/datums/components/crafting/robot.dm +++ b/code/datums/components/crafting/robot.dm @@ -75,27 +75,13 @@ var/obj/item/storage/medkit/medkit = bot.contents[3] bot.medkit_type = medkit bot.health_analyzer = bot.contents[4] - - ///if you add a new one don't forget to update /obj/item/storage/medkit/attackby() - if (istype(medkit, /obj/item/storage/medkit/fire)) - bot.skin = "ointment" - else if (istype(medkit, /obj/item/storage/medkit/toxin)) - bot.skin = "tox" - else if (istype(medkit, /obj/item/storage/medkit/o2)) - bot.skin = "o2" - else if (istype(medkit, /obj/item/storage/medkit/brute)) - bot.skin = "brute" - else if (istype(medkit, /obj/item/storage/medkit/advanced)) - bot.skin = "advanced" - else if (istype(src, /obj/item/storage/medkit/tactical)) - bot.skin = "bezerk" - + bot.skin = medkit.get_medbot_skin() bot.damage_type_healer = initial(medkit.damagetype_healed) ? initial(medkit.damagetype_healed) : BRUTE bot.update_appearance() /datum/crafting_recipe/honkbot name = "Honkbot" - result = /mob/living/simple_animal/bot/secbot/honkbot + result = /mob/living/basic/bot/honkbot reqs = list( /obj/item/storage/box/clown = 1, /obj/item/bodypart/arm/right/robot = 1, @@ -107,7 +93,7 @@ /datum/crafting_recipe/firebot name = "Firebot" - result = /mob/living/simple_animal/bot/firebot + result = /mob/living/basic/bot/firebot reqs = list( /obj/item/extinguisher = 1, /obj/item/bodypart/arm/right/robot = 1, @@ -119,7 +105,7 @@ /datum/crafting_recipe/vibebot name = "Vibebot" - result = /mob/living/simple_animal/bot/vibebot + result = /mob/living/basic/bot/vibebot reqs = list( /obj/item/light/bulb = 2, /obj/item/bodypart/head/robot = 1, diff --git a/code/datums/components/crafting/structures.dm b/code/datums/components/crafting/structures.dm index 2cbe2c353020b..c4a9b48ec36b6 100644 --- a/code/datums/components/crafting/structures.dm +++ b/code/datums/components/crafting/structures.dm @@ -11,33 +11,33 @@ /datum/crafting_recipe/rib name = "Colossal Rib" - always_available = FALSE reqs = list( /obj/item/stack/sheet/bone = 10, /datum/reagent/fuel/oil = 5, ) result = /obj/structure/statue/bone/rib category = CAT_STRUCTURE + crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_MUST_BE_LEARNED /datum/crafting_recipe/skull name = "Skull Carving" - always_available = FALSE reqs = list( /obj/item/stack/sheet/bone = 6, /datum/reagent/fuel/oil = 5, ) result = /obj/structure/statue/bone/skull category = CAT_STRUCTURE + crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_MUST_BE_LEARNED /datum/crafting_recipe/halfskull name = "Cracked Skull Carving" - always_available = FALSE reqs = list( /obj/item/stack/sheet/bone = 3, /datum/reagent/fuel/oil = 5, ) result = /obj/structure/statue/bone/skull/half category = CAT_STRUCTURE + crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_MUST_BE_LEARNED /datum/crafting_recipe/firecabinet name = "Fire Axe Cabinet" @@ -65,7 +65,6 @@ name = "Syndicate Uplink Beacon" result = /obj/structure/syndicate_uplink_beacon tool_behaviors = list(TOOL_SCREWDRIVER) - always_available = FALSE time = 6 SECONDS reqs = list( /obj/item/stack/sheet/iron = 5, @@ -74,3 +73,4 @@ /obj/item/stack/ore/bluespace_crystal = 1, ) category = CAT_STRUCTURE + crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_MUST_BE_LEARNED diff --git a/code/datums/components/crafting/tailoring.dm b/code/datums/components/crafting/tailoring.dm index 3476016ead3b8..2bcec49aeb504 100644 --- a/code/datums/components/crafting/tailoring.dm +++ b/code/datums/components/crafting/tailoring.dm @@ -166,7 +166,10 @@ name = "Bone Armor" result = /obj/item/clothing/suit/armor/bone time = 3 SECONDS - reqs = list(/obj/item/stack/sheet/bone = 6) + reqs = list( + /obj/item/stack/sheet/bone = 6, + /obj/item/stack/sheet/animalhide/goliath_hide = 3, + ) category = CAT_CLOTHING /datum/crafting_recipe/bonetalisman @@ -244,19 +247,27 @@ result = /obj/item/clothing/suit/hooded/cloak/goliath time = 5 SECONDS reqs = list( - /obj/item/stack/sheet/leather = 2, - /obj/item/stack/sheet/sinew = 2, - /obj/item/stack/sheet/animalhide/goliath_hide = 2, - ) //it takes 4 goliaths to make 1 cloak if the plates are skinned + /obj/item/stack/sheet/sinew = 3, + /obj/item/stack/sheet/animalhide/goliath_hide = 9, + ) category = CAT_CLOTHING /datum/crafting_recipe/drakecloak name = "Ash Drake Armour" result = /obj/item/clothing/suit/hooded/cloak/drake - time = 6 SECONDS + time = 4 SECONDS reqs = list( - /obj/item/stack/sheet/bone = 10, /obj/item/stack/sheet/sinew = 2, + /obj/item/drake_remains = 1, + ) + category = CAT_CLOTHING + +/datum/crafting_recipe/drakeremains + name = "Drake Remains" + result = /obj/item/drake_remains + time = 1 SECONDS + reqs = list( + /obj/item/stack/sheet/bone = 10, /obj/item/stack/sheet/animalhide/ashdrake = 5, ) category = CAT_CLOTHING diff --git a/code/datums/components/crafting/tiles.dm b/code/datums/components/crafting/tiles.dm index 5f7c41e012e0c..3125f4c1e85cf 100644 --- a/code/datums/components/crafting/tiles.dm +++ b/code/datums/components/crafting/tiles.dm @@ -7,3 +7,23 @@ result = /obj/item/stack/tile/carpet/black result_amount = 50 category = CAT_TILES + +/datum/crafting_recipe/wired_glass + name = "Wired Glass Tile" + result = /obj/item/stack/tile/light + reqs = list( + /obj/item/stack/sheet/iron = 1, + /obj/item/stack/sheet/glass = 1, + /obj/item/stack/cable_coil = 5, + ) + category = CAT_TILES + +/datum/crafting_recipe/circuit + name = "Circuit Tile" + result = /obj/item/stack/tile/circuit + reqs = list( + /obj/item/stack/sheet/iron = 1, + /obj/item/stack/sheet/glass = 1, + /obj/item/stack/cable_coil = 5, + ) + category = CAT_TILES diff --git a/code/datums/components/crafting/tools.dm b/code/datums/components/crafting/tools.dm index 8b4b00d006026..d1d303daf8040 100644 --- a/code/datums/components/crafting/tools.dm +++ b/code/datums/components/crafting/tools.dm @@ -19,7 +19,6 @@ /datum/crafting_recipe/boneshovel name = "Serrated Bone Shovel" - always_available = FALSE reqs = list( /obj/item/stack/sheet/bone = 4, /datum/reagent/fuel/oil = 5, @@ -27,6 +26,7 @@ ) result = /obj/item/shovel/serrated category = CAT_TOOLS + crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_MUST_BE_LEARNED /datum/crafting_recipe/lasso name = "Bone Lasso" diff --git a/code/datums/components/crafting/weapon_ammo.dm b/code/datums/components/crafting/weapon_ammo.dm index 44b8055b3ff94..f68ff58072c67 100644 --- a/code/datums/components/crafting/weapon_ammo.dm +++ b/code/datums/components/crafting/weapon_ammo.dm @@ -12,6 +12,15 @@ time = 0.5 SECONDS category = CAT_WEAPON_AMMO +/datum/crafting_recipe/paperball + name = "Paper Ball" + result = /obj/item/ammo_casing/rebar/paperball + reqs = list( + /obj/item/paper = 1, + ) + time = 0.1 SECONDS + category = CAT_WEAPON_AMMO + /datum/crafting_recipe/rebarsyndie name = "jagged iron rod" result = /obj/item/ammo_casing/rebar/syndie @@ -19,9 +28,19 @@ /obj/item/stack/rods = 1, ) tool_behaviors = list(TOOL_WIRECUTTER) - time = 0.5 SECONDS - always_available = FALSE + time = 0.1 SECONDS + category = CAT_WEAPON_AMMO + crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_MUST_BE_LEARNED + +/datum/crafting_recipe/healium_bolt + name = "healium crystal crossbow bolt" + result = /obj/item/ammo_casing/rebar/healium + reqs = list( + /obj/item/grenade/gas_crystal/healium_crystal = 1 + ) + time = 0.1 SECONDS category = CAT_WEAPON_AMMO + crafting_flags = CRAFT_CHECK_DENSITY /datum/crafting_recipe/pulseslug name = "Pulse Slug Shell" @@ -71,8 +90,8 @@ category = CAT_WEAPON_AMMO /datum/crafting_recipe/improvisedslug - name = "Improvised Shotgun Shell" - result = /obj/item/ammo_casing/shotgun/improvised + name = "Junk Shell" + result = /obj/effect/spawner/random/junk_shell reqs = list( /obj/item/stack/sheet/iron = 2, /obj/item/stack/cable_coil = 1, @@ -85,10 +104,10 @@ /datum/crafting_recipe/trashball name = "Trashball" - always_available = FALSE result = /obj/item/stack/cannonball/trashball reqs = list( /obj/item/stack/sheet = 5, /datum/reagent/consumable/space_cola = 10, ) category = CAT_WEAPON_AMMO + crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_MUST_BE_LEARNED diff --git a/code/datums/components/crank_recharge.dm b/code/datums/components/crank_recharge.dm index 10449a337e140..1f2272a8debc2 100644 --- a/code/datums/components/crank_recharge.dm +++ b/code/datums/components/crank_recharge.dm @@ -1,7 +1,7 @@ // Cranking feature on the laser musket and smoothbore disabler, could probably be used on more than guns /datum/component/crank_recharge /// Our cell to charge - var/obj/item/stock_parts/cell/charging_cell + var/obj/item/stock_parts/power_store/charging_cell /// Whether we spin our gun to reload (and therefore need the relevant trait) var/spin_to_win = FALSE /// How much charge we give our cell on each crank @@ -20,7 +20,7 @@ . = ..() if(!isitem(parent)) return COMPONENT_INCOMPATIBLE - if(isnull(charging_cell) || !istype(charging_cell, /obj/item/stock_parts/cell)) + if(isnull(charging_cell) || !istype(charging_cell, /obj/item/stock_parts/power_store)) return COMPONENT_INCOMPATIBLE src.charging_cell = charging_cell src.spin_to_win = spin_to_win diff --git a/code/datums/components/creamed.dm b/code/datums/components/creamed.dm index be536bb792d97..d1ff1b792e17a 100644 --- a/code/datums/components/creamed.dm +++ b/code/datums/components/creamed.dm @@ -50,9 +50,9 @@ GLOBAL_LIST_INIT(creamable, typecacheof(list( carbon_parent.add_mood_event("creampie", /datum/mood_event/creampie) carbon_parent.update_body_parts() else if(iscorgi(parent)) - normal_overlay = mutable_appearance('icons/effects/creampie.dmi', "creampie_corgi") + normal_overlay = mutable_appearance('icons/mob/effects/creampie.dmi', "creampie_corgi") else if(isAI(parent)) - normal_overlay = mutable_appearance('icons/effects/creampie.dmi', "creampie_ai") + normal_overlay = mutable_appearance('icons/mob/effects/creampie.dmi', "creampie_ai") RegisterSignals(parent, list( COMSIG_COMPONENT_CLEAN_ACT, diff --git a/code/datums/components/cuff_n_stun.dm b/code/datums/components/cuff_n_stun.dm new file mode 100644 index 0000000000000..d238a81f06a24 --- /dev/null +++ b/code/datums/components/cuff_n_stun.dm @@ -0,0 +1,101 @@ +/* + * A component to stun and cuff targets + */ +/datum/component/stun_n_cuff + /// mobs we cannot stun nor cuff + var/list/blacklist_mobs + ///sound to play when stunning + var/stun_sound + ///time to stun the target for + var/stun_timer + ///time it takes for us to handcuff the target + var/handcuff_timer + ///callback after we have stunned someone + var/datum/callback/post_stun_callback + ///callback after we have arrested someone + var/datum/callback/post_arrest_callback + ///time until we can stun again + var/stun_cooldown_timer + ///type of cuffs we use + var/handcuff_type + ///cooldown until we can stun again + COOLDOWN_DECLARE(stun_cooldown) + +/datum/component/stun_n_cuff/Initialize(list/blacklist_mobs = list(), + stun_sound = 'sound/weapons/egloves.ogg', + stun_timer = 8 SECONDS, + handcuff_timer = 4 SECONDS, + stun_cooldown_timer = 10 SECONDS, + handcuff_type = /obj/item/restraints/handcuffs/cable/zipties/used, + post_stun_callback, + post_arrest_callback, + ) + if(!isliving(parent)) + return COMPONENT_INCOMPATIBLE + + src.blacklist_mobs = blacklist_mobs + src.stun_sound = stun_sound + src.stun_timer = stun_timer + src.handcuff_timer = handcuff_timer + src.handcuff_type = handcuff_type + src.stun_cooldown_timer = stun_cooldown_timer + src.post_stun_callback = post_stun_callback + src.post_arrest_callback = post_arrest_callback + + +/datum/component/stun_n_cuff/RegisterWithParent() + RegisterSignal(parent, COMSIG_HOSTILE_PRE_ATTACKINGTARGET, PROC_REF(on_unarmed_attack)) + +/datum/component/stun_n_cuff/UnregisterFromParent() + UnregisterSignal(parent, COMSIG_HOSTILE_PRE_ATTACKINGTARGET) + REMOVE_TRAIT(parent, TRAIT_MOB_BREEDER, REF(src)) + post_stun_callback = null + post_arrest_callback = null + +/datum/component/stun_n_cuff/proc/on_unarmed_attack(mob/living/source, atom/target) + SIGNAL_HANDLER + + if(target == source || !iscarbon(target)) + return NONE + + if(is_type_in_typecache(target, blacklist_mobs)) + return NONE + + var/mob/living/carbon/living_target = target + if(living_target.IsParalyzed()) + INVOKE_ASYNC(src, PROC_REF(cuff_target), target) + else + stun_target(target) + + return COMPONENT_HOSTILE_NO_ATTACK + +/datum/component/stun_n_cuff/proc/cuff_target(mob/living/carbon/human_target) + if(human_target.handcuffed) + var/mob/living/living_parent = parent + living_parent.balloon_alert(human_target, "already cuffed!") + return + + playsound(parent, 'sound/weapons/cablecuff.ogg', 30, TRUE) + human_target.visible_message(span_danger("[parent] is trying to put zipties on [human_target]!"),\ + span_danger("[parent] is trying to put zipties on you!")) + + if(!do_after(parent, handcuff_timer, human_target)) + return + human_target.set_handcuffed(new handcuff_type(human_target)) + human_target.update_handcuffed() + post_arrest_callback?.Invoke(human_target) + +/datum/component/stun_n_cuff/proc/stun_target(mob/living/carbon/human_target) + if(!COOLDOWN_FINISHED(src, stun_cooldown)) + return + playsound(parent, stun_sound, 50, TRUE) + human_target.Paralyze(stun_timer) + human_target.set_stutter(40 SECONDS) + log_combat(parent, human_target, "honked") + + human_target.visible_message( + span_danger("[parent] stuns [human_target]!"), \ + span_userdanger("[parent] stuns you!"), \ + ) + COOLDOWN_START(src, stun_cooldown, stun_cooldown_timer) + post_stun_callback?.Invoke(human_target) diff --git a/code/datums/components/cult_ritual_item.dm b/code/datums/components/cult_ritual_item.dm index 7d9710977cecb..dedd30bda0ef5 100644 --- a/code/datums/components/cult_ritual_item.dm +++ b/code/datums/components/cult_ritual_item.dm @@ -128,6 +128,7 @@ INVOKE_ASYNC(src, PROC_REF(do_destroy_girder), target, cultist) return COMPONENT_NO_AFTERATTACK + if(istype(target, /obj/structure/destructible/cult)) INVOKE_ASYNC(src, PROC_REF(do_unanchor_structure), target, cultist) return COMPONENT_NO_AFTERATTACK diff --git a/code/datums/components/damage_aura.dm b/code/datums/components/damage_aura.dm index 98d323aa6d532..9c4e996113b84 100644 --- a/code/datums/components/damage_aura.dm +++ b/code/datums/components/damage_aura.dm @@ -36,6 +36,12 @@ /// Which factions are immune to the damage aura var/list/immune_factions = null + /// If set, gives a message when damaged + var/damage_message = null + + /// Probability for above. + var/message_probability = 0 + /// Sets a special set of conditions for the owner var/datum/weakref/current_owner = null @@ -54,6 +60,8 @@ organ_damage = null, simple_damage = 0, immune_factions = null, + damage_message = null, + message_probability = 0, mob/living/current_owner = null, ) if (!isatom(parent)) @@ -72,6 +80,8 @@ src.organ_damage = organ_damage src.simple_damage = simple_damage src.immune_factions = immune_factions + src.damage_message = damage_message + src.message_probability = message_probability src.current_owner = WEAKREF(current_owner) /datum/component/damage_aura/Destroy(force) @@ -120,6 +130,9 @@ if (candidate.health < candidate.maxHealth) new /obj/effect/temp_visual/cosmic_gem(get_turf(candidate)) + if(damage_message && prob(message_probability)) + to_chat(candidate, damage_message) + if (iscarbon(candidate) || issilicon(candidate) || isbasicmob(candidate)) candidate.adjustBruteLoss(brute_damage * seconds_per_tick, updating_health = FALSE) candidate.adjustFireLoss(burn_damage * seconds_per_tick, updating_health = FALSE) diff --git a/code/datums/components/drift.dm b/code/datums/components/drift.dm index f8ad46e3ec32a..7fba50d315178 100644 --- a/code/datums/components/drift.dm +++ b/code/datums/components/drift.dm @@ -23,7 +23,7 @@ if(instant) flags |= MOVEMENT_LOOP_START_FAST var/atom/movable/movable_parent = parent - drifting_loop = DSmove_manager.move(moving = parent, direction = direction, delay = movable_parent.inertia_move_delay, subsystem = SSspacedrift, priority = MOVEMENT_SPACE_PRIORITY, flags = flags) + drifting_loop = GLOB.move_manager.move(moving = parent, direction = direction, delay = movable_parent.inertia_move_delay, subsystem = SSspacedrift, priority = MOVEMENT_SPACE_PRIORITY, flags = flags) if(!drifting_loop) //Really want to qdel here but can't return COMPONENT_INCOMPATIBLE diff --git a/code/datums/components/echolocation.dm b/code/datums/components/echolocation.dm index 13ef8f4ed2431..020c47ad875e1 100644 --- a/code/datums/components/echolocation.dm +++ b/code/datums/components/echolocation.dm @@ -1,14 +1,14 @@ /datum/component/echolocation /// Radius of our view. var/echo_range = 4 - /// Time between echolocations. - var/cooldown_time = 1.8 SECONDS + /// Time between echolocations. IMPORTANT!! The effective time in local and the effective time in live are very different. The second is noticeably slower, + var/cooldown_time = 1 SECONDS /// Time for the image to start fading out. - var/image_expiry_time = 1.4 SECONDS + var/image_expiry_time = 0.7 SECONDS /// Time for the image to fade in. - var/fade_in_time = 0.4 SECONDS + var/fade_in_time = 0.2 SECONDS /// Time for the image to fade out and delete itself. - var/fade_out_time = 0.4 SECONDS + var/fade_out_time = 0.3 SECONDS /// Are images static? If yes, spawns them on the turf and makes them not change location. Otherwise they change location and pixel shift with the original. var/images_are_static = TRUE /// With mobs that have this echo group in their echolocation receiver trait, we share echo images. @@ -105,7 +105,7 @@ for(var/mob/living/viewer in filtered) if(blocking_trait && HAS_TRAIT(viewer, blocking_trait)) continue - if(HAS_TRAIT_FROM(viewer, TRAIT_ECHOLOCATION_RECEIVER, echo_group)) + if(HAS_TRAIT_FROM(viewer, TRAIT_ECHOLOCATION_RECEIVER, echo_group) && isnull(receivers[viewer])) receivers[viewer] = list() for(var/atom/filtered_atom as anything in filtered) show_image(saved_appearances["[filtered_atom.icon]-[filtered_atom.icon_state]"] || generate_appearance(filtered_atom), filtered_atom, current_time) @@ -175,6 +175,7 @@ for(var/atom/rendered_atom as anything in receivers[echolocate_receiver]) if(receivers[echolocate_receiver][rendered_atom]["time"] <= from_when && echolocate_receiver.client) echolocate_receiver.client.images -= receivers[echolocate_receiver][rendered_atom]["image"] + receivers[echolocate_receiver] -= rendered_atom if(!length(receivers[echolocate_receiver])) receivers -= echolocate_receiver diff --git a/code/datums/components/effect_remover.dm b/code/datums/components/effect_remover.dm index a02be73f5684e..a67962250dbe1 100644 --- a/code/datums/components/effect_remover.dm +++ b/code/datums/components/effect_remover.dm @@ -46,7 +46,7 @@ return ..() /datum/component/effect_remover/RegisterWithParent() - RegisterSignal(parent, COMSIG_ITEM_ATTACK_EFFECT, PROC_REF(try_remove_effect)) + RegisterSignal(parent, COMSIG_ITEM_INTERACTING_WITH_ATOM, PROC_REF(try_remove_effect)) if(tip_text) var/obj/item/item_parent = parent @@ -54,20 +54,21 @@ RegisterSignal(parent, COMSIG_ITEM_REQUESTING_CONTEXT_FOR_TARGET, PROC_REF(add_item_context)) /datum/component/effect_remover/UnregisterFromParent() - UnregisterSignal(parent, list(COMSIG_ITEM_ATTACK_EFFECT, COMSIG_ITEM_REQUESTING_CONTEXT_FOR_TARGET)) + UnregisterSignal(parent, list(COMSIG_ITEM_INTERACTING_WITH_ATOM, COMSIG_ITEM_REQUESTING_CONTEXT_FOR_TARGET)) /* - * Signal proc for [COMSIG_ITEM_ATTACK_EFFECT]. + * Signal proc for [COMSIG_ITEM_INTERACTING_WITH_ATOM]. */ -/datum/component/effect_remover/proc/try_remove_effect(datum/source, obj/effect/target, mob/living/user, params) + +/datum/component/effect_remover/proc/try_remove_effect(datum/source, mob/living/user, atom/target, params) SIGNAL_HANDLER if(!isliving(user)) - return + return NONE - if(effects_we_clear[target.type]) // Make sure we get all subtypes and everything + if(is_type_in_typecache(target, effects_we_clear)) // Make sure we get all subtypes and everything INVOKE_ASYNC(src, PROC_REF(do_remove_effect), target, user) - return COMPONENT_NO_AFTERATTACK + return ITEM_INTERACT_SUCCESS /* * Actually removes the effect, invoking our on_clear_callback before it's deleted. diff --git a/code/datums/components/embedded.dm b/code/datums/components/embedded.dm index b62121d30d073..45a3c07298ff0 100644 --- a/code/datums/components/embedded.dm +++ b/code/datums/components/embedded.dm @@ -200,7 +200,7 @@ /// everything async that ripOut used to do /datum/component/embedded/proc/complete_rip_out(mob/living/carbon/victim, obj/item/I, obj/item/bodypart/limb, time_taken) - victim.visible_message(span_warning("[victim] attempts to remove [weapon] from [victim.p_their()] [limb.plaintext_zone]."),span_notice("You attempt to remove [weapon] from your [limb.plaintext_zone]... (It will take [DisplayTimeText(time_taken)].)")) + victim.visible_message(span_warning("[victim] attempts to remove [weapon] from [victim.p_their()] [limb.plaintext_zone]."),span_notice("You attempt to remove [weapon] from your [limb.plaintext_zone]... (It will take [DisplayTimeText(time_taken)])")) if(!do_after(victim, time_taken, target = victim)) return if(!weapon || !limb || weapon.loc != victim || !(weapon in limb.embedded_objects)) @@ -279,12 +279,12 @@ var/pluck_time = rip_time * (weapon.w_class * 0.3) * (self_pluck ? 1.5 : 1) * tweezer_speed * (tweezer_safe ? 1 : 1.5) if(self_pluck) - user.visible_message(span_danger("[user] begins plucking [weapon] from [user.p_their()] [limb.plaintext_zone] with [possible_tweezers]..."), span_notice("You start plucking [weapon] from your [limb.plaintext_zone] with [possible_tweezers]... (It will take [DisplayTimeText(pluck_time)].)"),\ + user.visible_message(span_danger("[user] begins plucking [weapon] from [user.p_their()] [limb.plaintext_zone] with [possible_tweezers]..."), span_notice("You start plucking [weapon] from your [limb.plaintext_zone] with [possible_tweezers]... (It will take [DisplayTimeText(pluck_time)])"),\ vision_distance=COMBAT_MESSAGE_RANGE, ignored_mobs=victim) else - user.visible_message(span_danger("[user] begins plucking [weapon] from [victim]'s [limb.plaintext_zone] with [possible_tweezers]..."),span_notice("You start plucking [weapon] from [victim]'s [limb.plaintext_zone] with [possible_tweezers]... (It will take [DisplayTimeText(pluck_time)]."), \ + user.visible_message(span_danger("[user] begins plucking [weapon] from [victim]'s [limb.plaintext_zone] with [possible_tweezers]..."),span_notice("You start plucking [weapon] from [victim]'s [limb.plaintext_zone] with [possible_tweezers]... (It will take [DisplayTimeText(pluck_time)])"), \ vision_distance=COMBAT_MESSAGE_RANGE, ignored_mobs=victim) - to_chat(victim, span_userdanger("[user] begins plucking [weapon] from your [limb.plaintext_zone] with [possible_tweezers]... (It will take [DisplayTimeText(pluck_time)].")) + to_chat(victim, span_userdanger("[user] begins plucking [weapon] from your [limb.plaintext_zone] with [possible_tweezers]... (It will take [DisplayTimeText(pluck_time)])")) if(!do_after(user, pluck_time, victim)) if(self_pluck) diff --git a/code/datums/components/energized.dm b/code/datums/components/energized.dm index eb45ee66e2b12..255970bfd311c 100644 --- a/code/datums/components/energized.dm +++ b/code/datums/components/energized.dm @@ -95,7 +95,7 @@ tram_velocity_sign = tram.travel_direction & EAST ? 1 : -1 // How far away are we? negative if already passed. - var/approach_distance = tram_velocity_sign * (plate_pos - (tram_pos + (DEFAULT_TRAM_LENGTH * 0.5))) + var/approach_distance = tram_velocity_sign * (plate_pos - (tram_pos + DEFAULT_TRAM_MIDPOINT)) // Check if our victim is in the active path of the tram. if(!tram.controller_active) @@ -106,7 +106,7 @@ return FALSE if((tram.travel_direction & EAST) && outbound > tram.destination_platform.platform_code) return FALSE - if(approach_distance >= AMBER_THRESHOLD_DEGRADED) + if(approach_distance >= XING_THRESHOLD_AMBER) return FALSE // Finally the interesting part where they ACTUALLY get hit! diff --git a/code/datums/components/fertile_egg.dm b/code/datums/components/fertile_egg.dm index dba704812b088..59100028e852d 100644 --- a/code/datums/components/fertile_egg.dm +++ b/code/datums/components/fertile_egg.dm @@ -29,7 +29,10 @@ /// If true, being in an unsuitable location spoils the egg (ie. kills the component). If false, it just pauses the egg's development. var/spoilable -/datum/component/fertile_egg/Initialize(embryo_type, minimum_growth_rate, maximum_growth_rate, total_growth_required, current_growth, location_allowlist, spoilable, examine_message) + ///callback after the egg hatches + var/datum/callback/post_hatch + +/datum/component/fertile_egg/Initialize(embryo_type, minimum_growth_rate, maximum_growth_rate, total_growth_required, current_growth, location_allowlist, spoilable, examine_message, post_hatch) // Quite how an _area_ can be a fertile egg is an open question, but it still has a location. Technically. if(!isatom(parent)) return COMPONENT_INCOMPATIBLE @@ -41,6 +44,7 @@ src.current_growth = current_growth src.location_allowlist = location_allowlist src.spoilable = spoilable + src.post_hatch = post_hatch START_PROCESSING(SSobj, src) @@ -58,8 +62,10 @@ return current_growth += rand(minimum_growth_rate, maximum_growth_rate) * seconds_per_tick - if(current_growth >= total_growth_required) - parent_atom.visible_message(span_notice("[parent] hatches with a quiet cracking sound.")) - new embryo_type(get_turf(parent_atom)) - // We destroy the parent on hatch, which will destroy the component as well, which will stop us processing. - qdel(parent_atom) + if(current_growth < total_growth_required) + return + parent_atom.visible_message(span_notice("[parent] hatches with a quiet cracking sound.")) + new embryo_type(get_turf(parent_atom)) + post_hatch?.Invoke(embryo_type) + // We destroy the parent on hatch, which will destroy the component as well, which will stop us processing. + qdel(parent_atom) diff --git a/code/datums/components/fishing_spot.dm b/code/datums/components/fishing_spot.dm index 2763d583f819c..414c17b6d15e3 100644 --- a/code/datums/components/fishing_spot.dm +++ b/code/datums/components/fishing_spot.dm @@ -17,6 +17,7 @@ RegisterSignal(parent, COMSIG_FISHING_ROD_CAST, PROC_REF(handle_cast)) RegisterSignal(parent, COMSIG_ATOM_EXAMINE, PROC_REF(on_examined)) RegisterSignal(parent, COMSIG_ATOM_EXAMINE_MORE, PROC_REF(on_examined_more)) + ADD_TRAIT(parent, TRAIT_FISHING_SPOT, REF(src)) /datum/component/fishing_spot/Destroy() fish_source = null @@ -83,6 +84,8 @@ if(denial_reason) to_chat(user, span_warning(denial_reason)) return COMPONENT_NO_AFTERATTACK + // In case the fishing source has anything else to do before beginning to fish. + fish_source.on_start_fishing(rod, user, parent) start_fishing_challenge(rod, user) return COMPONENT_NO_AFTERATTACK diff --git a/code/datums/components/food_storage.dm b/code/datums/components/food_storage.dm index cb1008f88f0c8..873c1646adbe1 100644 --- a/code/datums/components/food_storage.dm +++ b/code/datums/components/food_storage.dm @@ -90,16 +90,16 @@ var/atom/food = parent if(QDELETED(stored_item)) - return + return CLICK_ACTION_BLOCKING if(!food.can_interact(user)) - return + return CLICK_ACTION_BLOCKING user.visible_message(span_notice("[user.name] begins tearing at \the [parent]."), \ span_notice("You start to rip into \the [parent].")) INVOKE_ASYNC(src, PROC_REF(begin_remove_item), user) - return COMPONENT_CANCEL_ATTACK_CHAIN + return CLICK_ACTION_SUCCESS /** Inserts the item into the food, after a do_after. * diff --git a/code/datums/components/force_move.dm b/code/datums/components/force_move.dm index 6c1c1e38e5f72..62fe26d71f7da 100644 --- a/code/datums/components/force_move.dm +++ b/code/datums/components/force_move.dm @@ -9,7 +9,7 @@ var/mob/mob_parent = parent var/dist = get_dist(mob_parent, target) - var/datum/move_loop/loop = DSmove_manager.move_towards(mob_parent, target, delay = 1, timeout = dist) + var/datum/move_loop/loop = GLOB.move_manager.move_towards(mob_parent, target, delay = 1, timeout = dist) RegisterSignal(mob_parent, COMSIG_MOB_CLIENT_PRE_LIVING_MOVE, PROC_REF(stop_move)) RegisterSignal(mob_parent, COMSIG_ATOM_PRE_PRESSURE_PUSH, PROC_REF(stop_pressure)) if(spin) diff --git a/code/datums/components/ghost_direct_control.dm b/code/datums/components/ghost_direct_control.dm index de5bca4fcadde..fb3a2c06e8360 100644 --- a/code/datums/components/ghost_direct_control.dm +++ b/code/datums/components/ghost_direct_control.dm @@ -142,13 +142,20 @@ return if (extra_control_checks && !extra_control_checks.Invoke(harbinger)) return + harbinger.log_message("took control of [new_body].", LOG_GAME) + // doesn't transfer mind because that transfers antag datum as well new_body.key = harbinger.key - to_chat(new_body, span_boldnotice(assumed_control_message)) - after_assumed_control?.Invoke(harbinger) + + // Already qdels due to below proc but just in case qdel(src) -/// When someone else assumes control via some other means, get rid of our component -/datum/component/ghost_direct_control/proc/on_login() +/// When someone assumes control, get rid of our component +/datum/component/ghost_direct_control/proc/on_login(mob/harbinger) SIGNAL_HANDLER + // This proc is called the very moment .key is set, so we need to force mind to initialize here if we want the invoke to affect the mind of the mob + if(isnull(harbinger.mind)) + harbinger.mind_initialize() + to_chat(harbinger, span_boldnotice(assumed_control_message)) + after_assumed_control?.Invoke(harbinger) qdel(src) diff --git a/code/datums/components/growth_and_differentiation.dm b/code/datums/components/growth_and_differentiation.dm index a6e10b98f6d7a..bcf6722492251 100644 --- a/code/datums/components/growth_and_differentiation.dm +++ b/code/datums/components/growth_and_differentiation.dm @@ -37,6 +37,7 @@ growth_probability, lower_growth_value, upper_growth_value, + scale_with_happiness, list/signals_to_kill_on, datum/callback/optional_checks, datum/callback/optional_grow_behavior, @@ -55,6 +56,11 @@ if(islist(signals_to_kill_on)) src.signals_to_kill_on = signals_to_kill_on RegisterSignals(parent, src.signals_to_kill_on, PROC_REF(stop_component_processing_entirely)) + + if(scale_with_happiness) + if(!HAS_TRAIT(parent, TRAIT_MOB_RELAY_HAPPINESS)) + AddComponent(/datum/component/happiness) + RegisterSignal(parent, COMSIG_MOB_HAPPINESS_CHANGE, PROC_REF(on_happiness_change)) // If we haven't started the round, we can't do timer stuff. Let's wait in case we're mapped in or something. if(!SSticker.HasRoundStarted() && !isnull(growth_time)) @@ -113,6 +119,12 @@ if(SPT_PROB(growth_probability, seconds_per_tick)) percent_grown += rand(lower_growth_value, upper_growth_value) +/datum/component/growth_and_differentiation/proc/on_happiness_change(datum/source, happiness_percentage) + SIGNAL_HANDLER + + var/probability_to_add = initial(growth_probability) * happiness_percentage + growth_probability = min(initial(growth_probability) + probability_to_add, 100) + /// Grows the mob into its new form. /datum/component/growth_and_differentiation/proc/grow(silent) if(!isnull(optional_checks) && !optional_checks.Invoke()) // we failed our checks somehow, but we're still ready to grow. Let's wait until next tick to see if our circumstances have changed. @@ -143,3 +155,4 @@ var/mob/living/transformed_mob = old_mob.change_mob_type(growth_path, old_mob.loc, new_name = new_mob_name, delete_old_mob = TRUE) if(initial(new_mob.unique_name)) transformed_mob.set_name() + ADD_TRAIT(transformed_mob, TRAIT_MOB_HATCHED, INNATE_TRAIT) diff --git a/code/datums/components/happiness.dm b/code/datums/components/happiness.dm new file mode 100644 index 0000000000000..0a6274611923b --- /dev/null +++ b/code/datums/components/happiness.dm @@ -0,0 +1,159 @@ +#define INSPECT_TIMER 10 SECONDS +#define PET_COOLDOWN 10 SECONDS +#define GROOM_COOLDOWN 30 SECONDS + +/* + * A component that allows mobs to have happiness levels + */ +/datum/component/happiness + ///our current happiness level + var/happiness_level + ///our maximum happiness level + var/maximum_happiness + ///happiness AI blackboard key + var/blackboard_key + ///happiness when we get groomed + var/on_groom_change + ///happiness when we get petted + var/on_petted_change + ///happiness when we eat + var/on_eat_change + ///percentages we should be calling back on + var/list/callback_percentages + ///callback when our happiness changes + var/datum/callback/happiness_callback + + ///how long till we can inspect happiness again? + COOLDOWN_DECLARE(happiness_inspect) + ///how long till we can pet it again? + COOLDOWN_DECLARE(pet_cooldown) + ///how long till we can groom it again + COOLDOWN_DECLARE(groom_cooldown) + +/datum/component/happiness/Initialize(maximum_happiness = 400, blackboard_key = BB_BASIC_HAPPINESS, on_groom_change = 200, on_eat_change = 300, on_petted_change = 30, callback_percentages = list(0, 25, 50, 75, 100), happiness_callback) + if(!isliving(parent)) + return COMPONENT_INCOMPATIBLE + + src.maximum_happiness = maximum_happiness + src.blackboard_key = blackboard_key + src.on_groom_change = on_groom_change + src.on_petted_change = on_petted_change + src.on_eat_change = on_eat_change + src.happiness_callback = happiness_callback + src.callback_percentages = callback_percentages + + ADD_TRAIT(parent, TRAIT_SUBTREE_REQUIRED_OPERATIONAL_DATUM, type) + +/datum/component/happiness/RegisterWithParent() + + if(on_petted_change) + RegisterSignal(parent, COMSIG_ATOM_ATTACK_HAND, PROC_REF(on_petted)) + if(on_groom_change) + RegisterSignal(parent, COMSIG_COMPONENT_CLEAN_ACT, PROC_REF(on_clean)) + if(on_eat_change) + RegisterSignal(parent, COMSIG_MOB_ATE, PROC_REF(on_eat)) + RegisterSignal(parent, COMSIG_SHIFT_CLICKED_ON, PROC_REF(view_happiness)) + ADD_TRAIT(parent, TRAIT_MOB_RELAY_HAPPINESS, REF(src)) + +/datum/component/happiness/UnregisterFromParent() + UnregisterSignal(parent, list(COMSIG_HOSTILE_PRE_ATTACKINGTARGET, COMSIG_COMPONENT_CLEAN_ACT, COMSIG_MOB_ATE)) + REMOVE_TRAIT(parent, TRAIT_MOB_RELAY_HAPPINESS, REF(src)) + happiness_callback = null + +/datum/component/happiness/proc/on_eat(datum/source) + SIGNAL_HANDLER + + increase_happiness_level(on_eat_change) + +/datum/component/happiness/proc/on_clean(mob/living/source) + SIGNAL_HANDLER + if(!COOLDOWN_FINISHED(src, groom_cooldown)) + return + COOLDOWN_START(src, groom_cooldown, GROOM_COOLDOWN) + increase_happiness_level(on_groom_change) + +/datum/component/happiness/proc/on_petted(datum/source, mob/living/petter, list/modifiers) + SIGNAL_HANDLER + if(!LAZYACCESS(modifiers, LEFT_CLICK) || petter.combat_mode) + return + pet_animal() + +/datum/component/happiness/proc/on_animal_petted(datum/source, mob/living/petter) + SIGNAL_HANDLER + + if(petter.combat_mode) + return + pet_animal() + return COMSIG_BASIC_ATTACK_CANCEL_CHAIN + +/datum/component/happiness/proc/pet_animal() + if(!COOLDOWN_FINISHED(src, pet_cooldown)) + return + increase_happiness_level(on_petted_change) + COOLDOWN_START(src, pet_cooldown, PET_COOLDOWN) + + +/datum/component/happiness/proc/increase_happiness_level(amount) + happiness_level = min(happiness_level + amount, maximum_happiness) + var/mob/living/living_parent = parent + new /obj/effect/temp_visual/heart(living_parent.loc) + living_parent.spin(spintime = 2 SECONDS, speed = 1) + START_PROCESSING(SSprocessing, src) + +/datum/component/happiness/proc/view_happiness(mob/living/source, mob/living/clicker) + if(!istype(clicker) || !COOLDOWN_FINISHED(src, happiness_inspect) || !clicker.CanReach(source)) + return + var/list/offset_to_add = get_icon_dimensions(source.icon) + var/y_position = offset_to_add["height"] + 1 + var/obj/effect/overlay/happiness_overlay/hearts = new + hearts.pixel_y = y_position + hearts.set_hearts(happiness_level/maximum_happiness) + source.vis_contents += hearts + COOLDOWN_START(src, happiness_inspect, INSPECT_TIMER) + + +/datum/component/happiness/process() + var/mob/living/living_parent = parent + var/happiness_percentage = happiness_level/maximum_happiness + living_parent.ai_controller?.set_blackboard_key(blackboard_key, happiness_percentage) + var/check_percentage_in_list = round(happiness_percentage * 100, 1) + if(check_percentage_in_list in callback_percentages) + SEND_SIGNAL(parent, COMSIG_MOB_HAPPINESS_CHANGE, happiness_percentage) + happiness_callback?.Invoke(happiness_percentage) + + if(happiness_level <= 0) + return PROCESS_KILL + var/modifier = living_parent.ai_controller?.blackboard[BB_BASIC_DEPRESSED] ? 2 : 1 + happiness_level = max(0, happiness_level - modifier) + +/obj/effect/overlay/happiness_overlay + mouse_opacity = MOUSE_OPACITY_TRANSPARENT + anchored = TRUE + vis_flags = VIS_INHERIT_DIR | VIS_INHERIT_PLANE + layer = ABOVE_HUD_PLANE + ///how many hearts should we display + VAR_PRIVATE/hearts_percentage + ///icon of our heart + var/heart_icon = 'icons/effects/effects.dmi' + +/obj/effect/overlay/happiness_overlay/Initialize(mapload) + . = ..() + QDEL_IN(src, 5 SECONDS) + +/obj/effect/overlay/happiness_overlay/proc/set_hearts(happiness_percentage) + hearts_percentage = happiness_percentage + update_appearance(UPDATE_OVERLAYS) + +/obj/effect/overlay/happiness_overlay/update_overlays() + . = ..() + var/static/list/heart_positions = list(-13, -5, 3, 11) + var/display_amount = round(length(heart_positions) * hearts_percentage, 1) + for(var/index in 1 to length(heart_positions)) + var/heart_icon_state = display_amount >= index ? "full_heart" : "empty_heart" + var/mutable_appearance/display_icon = mutable_appearance(icon = heart_icon, icon_state = heart_icon_state, layer = ABOVE_HUD_PLANE) + display_icon.pixel_x = heart_positions[index] + . += display_icon + +#undef INSPECT_TIMER +#undef PET_COOLDOWN +#undef GROOM_COOLDOWN diff --git a/code/datums/components/healing_touch.dm b/code/datums/components/healing_touch.dm index bc0493b478773..07f04cba01d73 100644 --- a/code/datums/components/healing_touch.dm +++ b/code/datums/components/healing_touch.dm @@ -90,6 +90,8 @@ RegisterSignal(parent, COMSIG_LIVING_UNARMED_ATTACK, PROC_REF(try_healing)) // Players RegisterSignal(parent, COMSIG_HOSTILE_PRE_ATTACKINGTARGET, PROC_REF(try_healing)) // NPCs + var/mob/living/living_parent = parent + living_parent.ai_controller?.set_blackboard_key(BB_BASIC_MOB_HEALER, TRUE) // Let's populate this list as we actually use it, this thing has too many args /datum/component/healing_touch/InheritComponent( @@ -100,6 +102,8 @@ src.heal_color = heal_color /datum/component/healing_touch/UnregisterFromParent() + var/mob/living/living_parent = parent + living_parent.ai_controller?.set_blackboard_key(BB_BASIC_MOB_HEALER, FALSE) UnregisterSignal(parent, list(COMSIG_LIVING_UNARMED_ATTACK, COMSIG_HOSTILE_PRE_ATTACKINGTARGET)) return ..() diff --git a/code/datums/components/igniter.dm b/code/datums/components/igniter.dm index d94c4be101aa3..ad9351b34e9bf 100644 --- a/code/datums/components/igniter.dm +++ b/code/datums/components/igniter.dm @@ -20,13 +20,10 @@ /datum/component/igniter/UnregisterFromParent() UnregisterSignal(parent, list(COMSIG_ITEM_AFTERATTACK, COMSIG_HOSTILE_POST_ATTACKINGTARGET, COMSIG_PROJECTILE_ON_HIT)) -/datum/component/igniter/proc/item_afterattack(obj/item/source, atom/target, mob/user, proximity_flag, click_parameters) +/datum/component/igniter/proc/item_afterattack(obj/item/source, atom/target, mob/user, click_parameters) SIGNAL_HANDLER - if(!proximity_flag) - return do_igniter(target) - return COMPONENT_AFTERATTACK_PROCESSED_ITEM /datum/component/igniter/proc/hostile_attackingtarget(mob/living/simple_animal/hostile/attacker, atom/target, success) SIGNAL_HANDLER diff --git a/code/datums/components/infective.dm b/code/datums/components/infective.dm index fc2081481d937..bc7cc2e6af3c4 100644 --- a/code/datums/components/infective.dm +++ b/code/datums/components/infective.dm @@ -45,8 +45,6 @@ RegisterSignal(parent, COMSIG_GLASS_DRANK, PROC_REF(try_infect_drink)) if(isorgan(parent)) RegisterSignal(parent, COMSIG_ORGAN_IMPLANTED, PROC_REF(on_organ_insertion)) - else if(istype(parent, /obj/effect/decal/cleanable/blood/gibs)) - RegisterSignal(parent, COMSIG_GIBS_STREAK, PROC_REF(try_infect_streak)) /datum/component/infective/proc/on_organ_insertion(obj/item/organ/target, mob/living/carbon/receiver) SIGNAL_HANDLER @@ -120,17 +118,16 @@ try_infect(target, hit_zone) -/datum/component/infective/proc/try_infect_attack_zone(datum/source, mob/living/carbon/target, mob/living/user, hit_zone) +/datum/component/infective/proc/try_infect_attack_zone(obj/item/source, mob/living/carbon/target, mob/living/user, hit_zone) SIGNAL_HANDLER - try_infect(user, BODY_ZONE_L_ARM) try_infect(target, hit_zone) -/datum/component/infective/proc/try_infect_attack(datum/source, mob/living/target, mob/living/user) +/datum/component/infective/proc/try_infect_attack(obj/item/source, mob/living/target, mob/living/user) SIGNAL_HANDLER - if(!iscarbon(target)) //this case will be handled by try_infect_attack_zone - try_infect(target) - try_infect(user, BODY_ZONE_L_ARM) + if(source.loc == user) + var/obj/item/bodypart/hand = user.get_active_hand() + try_infect(user, hand.body_zone) /datum/component/infective/proc/try_infect_equipped(datum/source, mob/living/L, slot) SIGNAL_HANDLER @@ -180,6 +177,5 @@ COMSIG_ITEM_EQUIPPED, COMSIG_GLASS_DRANK, COMSIG_ORGAN_IMPLANTED, - COMSIG_GIBS_STREAK, )) qdel(GetComponent(/datum/component/connect_loc_behalf)) diff --git a/code/datums/components/irradiated.dm b/code/datums/components/irradiated.dm index 805288fe4867f..077539f49db8e 100644 --- a/code/datums/components/irradiated.dm +++ b/code/datums/components/irradiated.dm @@ -90,7 +90,7 @@ if (should_halt_effects(parent)) return - if (human_parent.stat > DEAD) + if (human_parent.stat != DEAD) human_parent.dna?.species?.handle_radiation(human_parent, world.time - beginning_of_irradiation, seconds_per_tick) process_tox_damage(human_parent, seconds_per_tick) diff --git a/code/datums/components/jousting.dm b/code/datums/components/jousting.dm index 56b65c6f758b5..6d11e20b3a3dd 100644 --- a/code/datums/components/jousting.dm +++ b/code/datums/components/jousting.dm @@ -44,7 +44,7 @@ RegisterSignal(parent, COMSIG_ATOM_EXAMINE, PROC_REF(on_examine)) RegisterSignal(parent, COMSIG_ITEM_EQUIPPED, PROC_REF(on_equip)) RegisterSignal(parent, COMSIG_ITEM_DROPPED, PROC_REF(on_drop)) - RegisterSignal(parent, COMSIG_ITEM_ATTACK, PROC_REF(on_attack)) + RegisterSignal(parent, COMSIG_ITEM_AFTERATTACK, PROC_REF(on_successful_attack)) RegisterSignal(parent, COMSIG_TRANSFORMING_ON_TRANSFORM, PROC_REF(on_transform)) /datum/component/jousting/UnregisterFromParent() @@ -53,7 +53,7 @@ COMSIG_ATOM_EXAMINE, COMSIG_ITEM_EQUIPPED, COMSIG_ITEM_DROPPED, - COMSIG_ITEM_ATTACK, + COMSIG_ITEM_AFTERATTACK, COMSIG_TRANSFORMING_ON_TRANSFORM, )) @@ -94,7 +94,7 @@ * We deduct the minimum tile charge from the current tile charge to get what will actually be buffed * So your charge will only get benefits from each extra tile after the minimum (and before the maximum). */ -/datum/component/jousting/proc/on_attack(datum/source, mob/living/target, mob/user) +/datum/component/jousting/proc/on_successful_attack(datum/source, mob/living/target, mob/user) SIGNAL_HANDLER if(user != current_holder || !user.buckled) return diff --git a/code/datums/components/knockoff.dm b/code/datums/components/knockoff.dm index db72072789c45..3fe007736a1d0 100644 --- a/code/datums/components/knockoff.dm +++ b/code/datums/components/knockoff.dm @@ -23,6 +23,10 @@ /datum/component/knockoff/RegisterWithParent() RegisterSignal(parent, COMSIG_ITEM_EQUIPPED, PROC_REF(on_equipped)) RegisterSignal(parent, COMSIG_ITEM_DROPPED, PROC_REF(on_dropped)) + var/atom/movable/atom_parent = parent + var/mob/living/as_mob = atom_parent.loc + if(ismob(as_mob)) + on_equipped(atom_parent, as_mob, as_mob.get_slot_by_item(atom_parent)) // lie a little /datum/component/knockoff/UnregisterFromParent() UnregisterSignal(parent, list(COMSIG_ITEM_EQUIPPED, COMSIG_ITEM_DROPPED)) diff --git a/code/datums/components/listen_and_repeat.dm b/code/datums/components/listen_and_repeat.dm index 93d2dde93f006..0ebeda27b3f69 100644 --- a/code/datums/components/listen_and_repeat.dm +++ b/code/datums/components/listen_and_repeat.dm @@ -2,12 +2,16 @@ #define MAX_SPEECH_BUFFER_SIZE 500 /// Tendency we have to ignore radio chatter #define RADIO_IGNORE_CHANCE 10 +/// The line we will re-iterate +#define MESSAGE_LINE "line" +/// the tts voice it should be said in +#define MESSAGE_VOICE "voice" +/// the tone it should be said in +#define MESSAGE_PITCH "pitch" /// Simple element that will deterministically set a value based on stuff that the source has heard and will then compel the source to repeat it. /// Requires a valid AI Blackboard. /datum/component/listen_and_repeat - /// List of things that we start out having in our speech buffer - var/list/desired_phrases = null /// The AI Blackboard Key we assign the value to. var/blackboard_key = null /// Probability we speak @@ -16,14 +20,22 @@ var/switch_phrase_probability = null /// List of things that we've heard and will repeat. var/list/speech_buffer = null + /// list we give speech that doesnt have a voice or a pitch + var/static/list/invalid_voice = list( + MESSAGE_VOICE = "invalid", + MESSAGE_PITCH = 0, + ) /datum/component/listen_and_repeat/Initialize(list/desired_phrases, blackboard_key) . = ..() if(!ismovable(parent)) return COMPONENT_INCOMPATIBLE - if(!isnull(desired_phrases)) - LAZYADD(speech_buffer, desired_phrases) + for(var/speech in desired_phrases) + if(!islist(desired_phrases[speech]) || !desired_phrases[speech][MESSAGE_VOICE] || !desired_phrases[speech][MESSAGE_PITCH]) + LAZYSET(speech_buffer, speech, invalid_voice) + continue + LAZYSET(speech_buffer, speech, desired_phrases[speech]) src.blackboard_key = blackboard_key @@ -47,6 +59,16 @@ if(speaker == source) // don't parrot ourselves return + var/list/speaker_sound + + if(!SStts.tts_enabled || !ismovable(speaker)) + speaker_sound = invalid_voice + else + speaker_sound = list() + var/atom/movable/movable_speaker = speaker + speaker_sound[MESSAGE_VOICE] = movable_speaker.voice || "invalid" + speaker_sound[MESSAGE_PITCH] = (movable_speaker.pitch && SStts.pitch_enabled ? movable_speaker.pitch : 0) + if(over_radio && prob(RADIO_IGNORE_CHANCE)) return @@ -55,7 +77,7 @@ for(var/i in 1 to number_of_excess_strings) LAZYREMOVE(speech_buffer, pick(speech_buffer)) - LAZYOR(speech_buffer, html_decode(message)) + LAZYSET(speech_buffer, html_decode(message), speaker_sound) /// Called to set a new value for the blackboard key. /datum/component/listen_and_repeat/proc/set_new_blackboard_phrase(datum/source) @@ -67,7 +89,13 @@ return NO_NEW_PHRASE_AVAILABLE var/selected_phrase = pick(speech_buffer) - controller.set_blackboard_key(blackboard_key, selected_phrase) + var/list/to_return = list(MESSAGE_LINE = selected_phrase) + + if(islist(speech_buffer[selected_phrase])) + to_return[MESSAGE_VOICE] = speech_buffer[selected_phrase][MESSAGE_VOICE] + to_return[MESSAGE_PITCH] = speech_buffer[selected_phrase][MESSAGE_PITCH] + + controller.override_blackboard_key(blackboard_key, to_return) /// Exports all the speech buffer data to a dedicated blackboard key on the source. /datum/component/listen_and_repeat/proc/on_write_memory(datum/source, dead, gibbed) @@ -81,3 +109,6 @@ #undef MAX_SPEECH_BUFFER_SIZE #undef RADIO_IGNORE_CHANCE +#undef MESSAGE_VOICE +#undef MESSAGE_PITCH +#undef MESSAGE_LINE diff --git a/code/datums/components/lockable_storage.dm b/code/datums/components/lockable_storage.dm index 52aba79974179..482cb134159e0 100644 --- a/code/datums/components/lockable_storage.dm +++ b/code/datums/components/lockable_storage.dm @@ -62,6 +62,7 @@ UnregisterSignal(parent, list( COMSIG_ATOM_TOOL_ACT(TOOL_SCREWDRIVER), COMSIG_ATOM_TOOL_ACT(TOOL_MULTITOOL), + COMSIG_ATOM_STORAGE_ITEM_INTERACT_INSERT, )) UnregisterSignal(parent, list( COMSIG_ATOM_EXAMINE, @@ -115,6 +116,7 @@ return NONE panel_open = !panel_open + tool.play_tool_sound(source) source.balloon_alert(user, "panel [panel_open ? "opened" : "closed"]") return ITEM_INTERACT_SUCCESS @@ -135,7 +137,7 @@ ///Does a do_after to hack the storage open, takes a long time cause idk. /datum/component/lockable_storage/proc/hack_open(atom/source, mob/user, obj/item/tool) - if(!tool.use_tool(parent, user, 40 SECONDS)) + if(!tool.use_tool(parent, user, 40 SECONDS, volume = 50)) return source.balloon_alert(user, "hacked") lock_code = null diff --git a/code/datums/components/material/material_container.dm b/code/datums/components/material/material_container.dm index ffcf81feacefd..207e1d080f768 100644 --- a/code/datums/components/material/material_container.dm +++ b/code/datums/components/material/material_container.dm @@ -207,8 +207,9 @@ * - [weapon][obj/item]: the item you are trying to insert * - multiplier: The multiplier for the materials being inserted * - context: the atom performing the operation, this is the last argument sent in COMSIG_MATCONTAINER_ITEM_CONSUMED and is used mostly for silo logging + * * - delete_item: should we delete the item after its materials are consumed. does not apply to stacks if they were split due to lack of space */ -/datum/component/material_container/proc/insert_item(obj/item/weapon, multiplier = 1, atom/context = parent) +/datum/component/material_container/proc/insert_item(obj/item/weapon, multiplier = 1, atom/context = parent, delete_item = TRUE) if(QDELETED(weapon)) return MATERIAL_INSERT_ITEM_NO_MATS multiplier = CEILING(multiplier, 0.01) @@ -232,14 +233,11 @@ material_amount = get_item_material_amount(target) * multiplier material_amount = OPTIMAL_COST(material_amount) - //not enough space, time to bail - if(!has_space(material_amount)) - return MATERIAL_INSERT_ITEM_NO_SPACE - //do the insert var/last_inserted_id = insert_item_materials(target, multiplier, context) if(!isnull(last_inserted_id)) - qdel(target) //item gone + if(delete_item || target != weapon) //we could have split the stack ourself + qdel(target) //item gone return material_amount else if(!isnull(item_stack) && item_stack != target) //insertion failed, merge the split stack back into the original var/obj/item/stack/inserting_stack = target @@ -266,188 +264,178 @@ . = 0 //All items that do not have any contents - var/list/obj/item/child_items = list() - //All items that do have contents but they were already processed by the above list - var/list/obj/item/parent_items = list(held_item) + var/list/obj/item/items = list(held_item) //is this the first item we are ever processing var/first_checks = TRUE + //list of items to delete + var/list/obj/item/to_delete = list() //The status of the last insert attempt var/inserted = 0 //All messages to be displayed to chat var/list/chat_msgs = list() //differs from held_item when using TK var/active_held = user.get_active_held_item() - //storage items to retrive items from - var/static/list/storage_items - if(isnull(storage_items)) - storage_items = list( - /obj/item/storage/backpack, - /obj/item/storage/bag, - /obj/item/storage/box, - ) - - //1st iteration consumes all items that do not have contents inside - //2nd iteration consumes items who do have contents inside(but they were consumed in the 1st iteration so its empty now) - for(var/i in 1 to 2) + + while(items.len) //no point inserting more items if(inserted == MATERIAL_INSERT_ITEM_NO_SPACE) break - //transfer all items for processing - if(!parent_items.len) - break - child_items += parent_items - parent_items.Cut() - - while(child_items.len) - //Pop the 1st item out from the list - var/obj/item/target_item = child_items[1] - child_items -= target_item + //Pop the 1st item out from the list + var/obj/item/target_item = items[1] + items -= target_item - //e.g. projectiles inside bullets are not objects - if(!istype(target_item)) - continue - //can't allow abstract, hologram items - if((target_item.item_flags & ABSTRACT) || (target_item.flags_1 & HOLOGRAM_1)) + //e.g. projectiles inside bullets are not objects + if(!istype(target_item)) + continue + //can't allow abstract, hologram items + if((target_item.item_flags & ABSTRACT) || (target_item.flags_1 & HOLOGRAM_1)) + continue + //user defined conditions + if(SEND_SIGNAL(src, COMSIG_MATCONTAINER_PRE_USER_INSERT, target_item, user) & MATCONTAINER_BLOCK_INSERT) + continue + //item is either indestructible, not allowed for redemption or not in the allowed types + if((target_item.resistance_flags & INDESTRUCTIBLE) || (target_item.item_flags & NO_MAT_REDEMPTION) || (allowed_item_typecache && !is_type_in_typecache(target_item, allowed_item_typecache))) + if(!(mat_container_flags & MATCONTAINER_SILENT)) + var/list/status_data = chat_msgs["[MATERIAL_INSERT_ITEM_FAILURE]"] || list() + var/list/item_data = status_data[target_item.name] || list() + item_data["count"] += 1 + status_data[target_item.name] = item_data + chat_msgs["[MATERIAL_INSERT_ITEM_FAILURE]"] = status_data + + if(target_item.resistance_flags & INDESTRUCTIBLE) + if(target_item != active_held) //move it out of any storage medium its in so it doesn't get consumed with its parent, but only if that storage medium is not our hand + target_item.forceMove(get_turf(context)) continue - //user defined conditions - if(SEND_SIGNAL(src, COMSIG_MATCONTAINER_PRE_USER_INSERT, target_item, user) & MATCONTAINER_BLOCK_INSERT) + + //storage items usually come here + //this is so players can insert items from their bags into machines for convinience + if(!target_item.atom_storage || !target_item.contents.len) continue - //item is either indestructible, not allowed for redemption or not in the allowed types - if((target_item.resistance_flags & INDESTRUCTIBLE) || (target_item.item_flags & NO_MAT_REDEMPTION) || (allowed_item_typecache && !is_type_in_typecache(target_item, allowed_item_typecache))) - if(!(mat_container_flags & MATCONTAINER_SILENT) && i == 1) //count only child items the 1st time around - var/list/status_data = chat_msgs["[MATERIAL_INSERT_ITEM_FAILURE]"] || list() - var/list/item_data = status_data[target_item.name] || list() - item_data["count"] += 1 - status_data[target_item.name] = item_data - chat_msgs["[MATERIAL_INSERT_ITEM_FAILURE]"] = status_data - - if(target_item.resistance_flags & INDESTRUCTIBLE) - if(i == 1 && target_item != active_held) //move it out of any storage medium its in so it doesn't get consumed with its parent, but only if that storage medium is not our hand - target_item.forceMove(get_turf(context)) - continue - //storage items usually come here but we make the exception only on the 1st iteration - //this is so players can insert items from their bags into machines for convinience - if(!is_type_in_list(target_item, storage_items)) - continue - else if(!target_item.contents.len || i == 2) - continue - //at this point we can check if we have enough for all items & other stuff - if(first_checks) - //duffle bags needs to be unzipped - if(target_item.atom_storage?.locked) + //at this point we can check if we have enough for all items & other stuff + if(first_checks) + //duffle bags needs to be unzipped + if(target_item.atom_storage?.locked) + if(!(mat_container_flags & MATCONTAINER_SILENT)) + to_chat(user, span_warning("[target_item] has its storage locked")) + return + + //anything that isn't a stack cannot be split so find out if we have enough space, we don't want to consume half the contents of an object & leave it in a broken state + //for duffle bags and other storage items we can check for space 1 item at a time + if(!isstack(target_item) && !target_item.atom_storage) + var/total_amount = 0 + for(var/obj/item/weapon as anything in target_item.get_all_contents_type(/obj/item)) + total_amount += get_item_material_amount(weapon) + if(!has_space(total_amount)) if(!(mat_container_flags & MATCONTAINER_SILENT)) - to_chat(user, span_warning("[target_item] has its storage locked")) + to_chat(user, span_warning("[parent] does not have enough space for [target_item]!")) return - //anything that isn't a stack cannot be split so find out if we have enough space, we don't want to consume half the contents of an object & leave it in a broken state - //for duffle bags and other storage items we can check for space 1 item at a time - if(!isstack(target_item) && !is_type_in_list(target_item, storage_items)) - var/total_amount = 0 - for(var/obj/item/weapon as anything in target_item.get_all_contents_type(/obj/item)) - total_amount += get_item_material_amount(weapon) - if(!has_space(total_amount)) - if(!(mat_container_flags & MATCONTAINER_SILENT)) - to_chat(user, span_warning("[parent] does not have enough space for [target_item]!")) - return - - first_checks = FALSE - - //All hard checks have passed, at this point we can consume the item - //If it has children then we will process them first and then the item in the 2nd round - //This is done so we don't delete the children when the parent is consumed - //We only do this on the 1st iteration so we don't re-iterate through its children again - if(target_item.contents.len && i == 1) - if(target_item.atom_storage?.locked) //can't access contents of locked storage(like duffle bags) - continue - //process children - child_items += target_item.contents - //in the 2nd round only after its children are consumed do we consume this next, FIFO order - parent_items.Insert(1, target_item) - //leave it here till we get to its children - continue + first_checks = FALSE - //if stack, check if we want to read precise amount of sheets to insert - var/obj/item/stack/item_stack = null - if(isstack(target_item) && precise_insertion) - var/atom/current_parent = parent - item_stack = target_item - var/requested_amount = tgui_input_number(user, "How much do you want to insert?", "Inserting [item_stack.singular_name]s", item_stack.amount, item_stack.amount) - if(!requested_amount || QDELETED(target_item) || QDELETED(user) || QDELETED(src)) - continue - if(parent != current_parent || user.get_active_held_item() != active_held) - continue - if(requested_amount != item_stack.amount) //only split if its not the whole amount - target_item = fast_split_stack(item_stack, requested_amount) //split off the requested amount - requested_amount = 0 - - //is this item a stack and was it split by the player? - var/was_stack_split = !isnull(item_stack) && item_stack != target_item - //if it was split then item_stack has the reference to the original stack/item - var/original_item = was_stack_split ? item_stack : target_item - //if this item is not the one the player is holding then don't remove it from their hand - if(original_item != active_held) - original_item = null - if(!isnull(original_item) && !user.temporarilyRemoveItemFromInventory(original_item)) //remove from hand(if split remove the original stack else the target) - return - - //insert the item - var/item_name = target_item.name - var/item_count = 1 - var/is_stack = FALSE - if(isstack(target_item)) - var/obj/item/stack/the_stack = target_item - item_name = the_stack.singular_name - item_count = the_stack.amount - is_stack = TRUE - inserted = insert_item(target_item, 1, context) - if(inserted > 0) - . += inserted - inserted /= SHEET_MATERIAL_AMOUNT // display units inserted as sheets for improved readability - - //stack was either split by the container(!QDELETED(target_item) means the container only consumed a part of it) or by the player, put whats left back of the original stack back in players hand - if((!QDELETED(target_item) || was_stack_split)) - - //stack was split by player and that portion was not fully consumed, merge whats left back with the original stack - if(!QDELETED(target_item) && was_stack_split) - var/obj/item/stack/inserting_stack = target_item - item_stack.add(inserting_stack.amount) - qdel(inserting_stack) - - //was this the original item in the players hand? put what's left back in the player's hand - if(!isnull(original_item)) - user.put_in_active_hand(original_item) - - //collect all messages to print later - var/list/status_data = chat_msgs["[MATERIAL_INSERT_ITEM_SUCCESS]"] || list() - var/list/item_data = status_data[item_name] || list() - item_data["count"] += item_count - item_data["amount"] += inserted - item_data["stack"] = is_stack - status_data[item_name] = item_data - chat_msgs["[MATERIAL_INSERT_ITEM_SUCCESS]"] = status_data - - else - //collect all messages to print later - var/list/status_data = chat_msgs["[inserted]"] || list() - var/list/item_data = status_data[item_name] || list() - item_data["count"] += item_count - status_data[item_name] = item_data - chat_msgs["[inserted]"] = status_data - - //player split the stack by the requested amount but even that split amount could not be salvaged. merge it back with the original - if(!isnull(item_stack) && was_stack_split) + //if stack, check if we want to read precise amount of sheets to insert + var/obj/item/stack/item_stack = null + if(isstack(target_item) && precise_insertion) + var/atom/current_parent = parent + item_stack = target_item + var/requested_amount = tgui_input_number(user, "How much do you want to insert?", "Inserting [item_stack.singular_name]s", item_stack.amount, item_stack.amount) + if(!requested_amount || QDELETED(target_item) || QDELETED(user) || QDELETED(src)) + continue + if(parent != current_parent || user.get_active_held_item() != active_held) + continue + if(requested_amount != item_stack.amount) //only split if its not the whole amount + target_item = fast_split_stack(item_stack, requested_amount) //split off the requested amount + requested_amount = 0 + + //is this item a stack and was it split by the player? + var/was_stack_split = !isnull(item_stack) && item_stack != target_item + //if it was split then item_stack has the reference to the original stack/item + var/obj/item/original_item = was_stack_split ? item_stack : target_item + //if this item is not the one the player is holding then don't remove it from their hand + if(original_item != active_held) + original_item = null + if(!isnull(original_item) && !user.temporarilyRemoveItemFromInventory(original_item)) //remove from hand(if split remove the original stack else the target) + return + + //insert the item + var/item_name = target_item.name + var/item_count = 1 + var/is_stack = FALSE + var/obj/item/stack/the_stack + if(isstack(target_item)) + the_stack = target_item + item_name = the_stack.singular_name + item_count = the_stack.amount + is_stack = TRUE + + //we typically don't want to consume bags, boxes but only their contents. so we skip processing + inserted = !target_item.atom_storage ? insert_item(target_item, 1, context, is_stack) : 0 + if(inserted > 0) + . += inserted + inserted /= SHEET_MATERIAL_AMOUNT // display units inserted as sheets for improved readability + + //collect all messages to print later + var/list/status_data = chat_msgs["[MATERIAL_INSERT_ITEM_SUCCESS]"] || list() + var/list/item_data = status_data[item_name] || list() + item_data["count"] += item_count + item_data["amount"] += inserted + item_data["stack"] = is_stack + status_data[item_name] = item_data + chat_msgs["[MATERIAL_INSERT_ITEM_SUCCESS]"] = status_data + + //delete the item or merge stacks if any left over + if(is_stack) + //player split it & machine further split that due to lack of space? merge with remaining stack + if(!QDELETED(target_item) && was_stack_split) var/obj/item/stack/inserting_stack = target_item item_stack.add(inserting_stack.amount) qdel(inserting_stack) - //was this the original item in the players hand? put it back because we coudn't salvage it - if(!isnull(original_item)) + //was this the original item in the players hand? put what's left back in the player's hand + if(!QDELETED(original_item)) user.put_in_active_hand(original_item) - //we can stop here as remaining items will fail to insert as well - if(inserted == MATERIAL_INSERT_ITEM_NO_SPACE) - break + //skip processing children & other stuff. irrelevant for stacks + continue + + //queue the object for deletion + to_delete += target_item + else + //collect all messages to print later + var/list/status_data = chat_msgs["[inserted]"] || list() + var/list/item_data = status_data[item_name] || list() + item_data["count"] += item_count + status_data[item_name] = item_data + chat_msgs["[inserted]"] = status_data + + //player split the stack by the requested amount but even that split amount could not be salvaged. merge it back with the original + if(was_stack_split) + var/obj/item/stack/inserting_stack = target_item + item_stack.add(inserting_stack.amount) + qdel(inserting_stack) + + //was this the original item in the players hand? put it back because we coudn't salvage it + if(!QDELETED(original_item)) + user.put_in_active_hand(original_item) + + //we can stop here as remaining items will fail to insert as well + if(inserted == MATERIAL_INSERT_ITEM_NO_SPACE) + break + + //we failed to process the item so don't bother going into its contents + //but if we are dealing with storage items like bags, boxes etc then we make a exception + if(!target_item.atom_storage) + continue + + //If any mats were consumed we can proceed to delete the parent + //If it has children then we will process them first in the 2nd round + //This is done so we don't delete the children when the parent is consumed + //We only do this on the 1st iteration so we don't re-iterate through its children again + if(target_item.contents.len) + if(target_item.atom_storage?.locked) //can't access contents of locked storage(like duffle bags) + continue + //process children + items += target_item.contents //we now summarize the chat msgs collected if(!(mat_container_flags & MATCONTAINER_SILENT)) @@ -475,6 +463,11 @@ if(MATERIAL_INSERT_ITEM_FAILURE) //could be because the material type was not accepted or other stuff to_chat(user, span_warning("[item_name][count > 1 ? "s were" : " was"] rejected by [parent]!")) + //finally delete the items + for(var/obj/item/deleting as anything in to_delete) + if(!QDELETED(deleting)) //deleting parents also delete their children so we check + qdel(deleting) + /// Proc that allows players to fill the parent with mats /datum/component/material_container/proc/on_attackby(datum/source, obj/item/weapon, mob/living/user) SIGNAL_HANDLER diff --git a/code/datums/components/material/remote_materials.dm b/code/datums/components/material/remote_materials.dm index 695a02bcb960b..d2804f97df120 100644 --- a/code/datums/components/material/remote_materials.dm +++ b/code/datums/components/material/remote_materials.dm @@ -86,7 +86,7 @@ handles linking back and forth. mat_container = parent.AddComponent( \ /datum/component/material_container, \ - DSmaterials.materials_by_category[MAT_CATEGORY_SILO], \ + SSmaterials.materials_by_category[MAT_CATEGORY_SILO], \ local_size, \ mat_container_flags, \ container_signals = mat_container_signals, \ @@ -144,12 +144,10 @@ handles linking back and forth. return COMPONENT_NO_AFTERATTACK -/datum/component/remote_materials/proc/OnMultitool(datum/source, mob/user, obj/item/I) +/datum/component/remote_materials/proc/OnMultitool(datum/source, mob/user, obj/item/multitool/M) SIGNAL_HANDLER - if(!I.multitool_check_buffer(user, I)) - return ITEM_INTERACT_BLOCKING - var/obj/item/multitool/M = I + . = ITEM_INTERACT_BLOCKING if (!QDELETED(M.buffer) && istype(M.buffer, /obj/machinery/ore_silo)) if (silo == M.buffer) to_chat(user, span_warning("[parent] is already connected to [silo]!")) diff --git a/code/datums/components/mirv.dm b/code/datums/components/mirv.dm index 0f41df1d2888a..52b4053babb5a 100644 --- a/code/datums/components/mirv.dm +++ b/code/datums/components/mirv.dm @@ -39,5 +39,5 @@ P.range = override_projectile_range P.preparePixelProjectile(shootat_turf, target) P.firer = firer // don't hit ourself that would be really annoying - P.impacted = list(target = TRUE) // don't hit the target we hit already with the flak + P.impacted = list(WEAKREF(target) = TRUE) // don't hit the target we hit already with the flak P.fire() diff --git a/code/datums/components/on_hit_effect.dm b/code/datums/components/on_hit_effect.dm index 4093249c1ad46..9d1d047429069 100644 --- a/code/datums/components/on_hit_effect.dm +++ b/code/datums/components/on_hit_effect.dm @@ -58,7 +58,6 @@ if(!extra_check_callback.Invoke(user, target, source)) return on_hit_callback.Invoke(source, user, target, user.zone_selected) - return COMPONENT_AFTERATTACK_PROCESSED_ITEM /datum/component/on_hit_effect/proc/hostile_attackingtarget(mob/living/attacker, atom/target, success) SIGNAL_HANDLER diff --git a/code/datums/components/orbiter.dm b/code/datums/components/orbiter.dm index 3ba6ba22c07fa..71f391e599ad8 100644 --- a/code/datums/components/orbiter.dm +++ b/code/datums/components/orbiter.dm @@ -120,6 +120,10 @@ orbiter_mob.updating_glide_size = TRUE orbiter_mob.glide_size = 8 + if(isobserver(orbiter)) + var/mob/dead/observer/ghostie = orbiter + ghostie.orbiting_ref = null + REMOVE_TRAIT(orbiter, TRAIT_NO_FLOATING_ANIM, ORBITING_TRAIT) if(!refreshing && !length(orbiter_list) && !QDELING(src)) diff --git a/code/datums/components/pellet_cloud.dm b/code/datums/components/pellet_cloud.dm index e857292f487a5..c206af62f704a 100644 --- a/code/datums/components/pellet_cloud.dm +++ b/code/datums/components/pellet_cloud.dm @@ -277,7 +277,7 @@ P.original = target P.fired_from = parent P.firer = parent // don't hit ourself that would be really annoying - P.impacted = list(parent = TRUE) // don't hit the target we hit already with the flak + P.impacted = list(WEAKREF(parent) = TRUE) // don't hit the target we hit already with the flak P.suppressed = SUPPRESSED_VERY // set the projectiles to make no message so we can do our own aggregate message P.preparePixelProjectile(target, parent) RegisterSignal(P, COMSIG_PROJECTILE_SELF_ON_HIT, PROC_REF(pellet_hit)) diff --git a/code/datums/components/pet_commands/obeys_commands.dm b/code/datums/components/pet_commands/obeys_commands.dm index ec3a04c940a2a..8aaa7e7179294 100644 --- a/code/datums/components/pet_commands/obeys_commands.dm +++ b/code/datums/components/pet_commands/obeys_commands.dm @@ -66,7 +66,7 @@ SIGNAL_HANDLER var/mob/living/living_parent = parent - if (IS_DEAD_OR_INCAP(living_parent)) + if (IS_DEAD_OR_INCAP(living_parent) || !clicker.can_perform_action(living_parent)) return if (!(clicker in living_parent.ai_controller?.blackboard[BB_FRIENDS_LIST])) return // Not our friend, can't boss us around diff --git a/code/datums/components/pet_commands/pet_commands_basic.dm b/code/datums/components/pet_commands/pet_commands_basic.dm index 5ff476a85b959..d9ce0ccb56a46 100644 --- a/code/datums/components/pet_commands/pet_commands_basic.dm +++ b/code/datums/components/pet_commands/pet_commands_basic.dm @@ -222,6 +222,8 @@ var/protect_range = 9 ///the behavior we will use when he is attacked var/protect_behavior = /datum/ai_behavior/basic_melee_attack + ///message cooldown to prevent too many people from telling you not to commit suicide + COOLDOWN_DECLARE(self_harm_message_cooldown) /datum/pet_command/protect_owner/add_new_friend(mob/living/tamer) RegisterSignal(tamer, COMSIG_ATOM_WAS_ATTACKED, PROC_REF(set_attacking_target)) @@ -252,6 +254,13 @@ var/mob/living/basic/owner = weak_parent.resolve() if(isnull(owner)) return + if(source == attacker) + var/list/interventions = owner.ai_controller?.blackboard[BB_OWNER_SELF_HARM_RESPONSES] || list() + if (length(interventions) && COOLDOWN_FINISHED(src, self_harm_message_cooldown) && prob(30)) + COOLDOWN_START(src, self_harm_message_cooldown, 5 SECONDS) + var/chosen_statement = pick(interventions) + INVOKE_ASYNC(owner, TYPE_PROC_REF(/atom/movable, say), chosen_statement) + return var/mob/living/current_target = owner.ai_controller?.blackboard[BB_CURRENT_PET_TARGET] if(attacker == current_target) //we are already dealing with this target return diff --git a/code/datums/components/plumbing/_plumbing.dm b/code/datums/components/plumbing/_plumbing.dm index 3e5528b1095a3..e2f7b2880c4bd 100644 --- a/code/datums/components/plumbing/_plumbing.dm +++ b/code/datums/components/plumbing/_plumbing.dm @@ -394,10 +394,6 @@ demand_connects = NORTH supply_connects = SOUTH -/datum/component/plumbing/iv_drip - demand_connects = SOUTH - supply_connects = NORTH - /datum/component/plumbing/manifold/change_ducting_layer(obj/caller, obj/changer, new_layer) return diff --git a/code/datums/components/profound_fisher.dm b/code/datums/components/profound_fisher.dm new file mode 100644 index 0000000000000..ec839e265f2f0 --- /dev/null +++ b/code/datums/components/profound_fisher.dm @@ -0,0 +1,64 @@ +///component that allows player mobs to play the fishing minigame, non-player mobs will "pretend" fish +/datum/component/profound_fisher + ///the fishing rod this mob will use + var/obj/item/fishing_rod/mob_fisher/our_rod + ///if controlled by an AI, the things this mob can "pretend" fish + var/list/npc_fishing_preset + +/datum/component/profound_fisher/Initialize(list/npc_fishing_preset = list()) + if(!isliving(parent)) + return + our_rod = new(parent) + src.npc_fishing_preset = npc_fishing_preset + ADD_TRAIT(parent, TRAIT_PROFOUND_FISHER, REF(src)) + +/datum/component/profound_fisher/RegisterWithParent() + RegisterSignal(parent, COMSIG_HOSTILE_PRE_ATTACKINGTARGET, PROC_REF(pre_attack)) + +/datum/component/profound_fisher/UnregisterFromParent() + UnregisterSignal(parent, COMSIG_HOSTILE_PRE_ATTACKINGTARGET) + REMOVE_TRAIT(parent, TRAIT_PROFOUND_FISHER, REF(src)) + +/datum/component/profound_fisher/Destroy() + QDEL_NULL(our_rod) + return ..() + +/datum/component/profound_fisher/proc/pre_attack(datum/source, atom/target) + SIGNAL_HANDLER + + if(!HAS_TRAIT(target, TRAIT_FISHING_SPOT)) + return NONE + var/mob/living/living_parent = parent + if(!living_parent.CanReach(target)) + return NONE + if(living_parent.client) + INVOKE_ASYNC(our_rod, TYPE_PROC_REF(/obj/item, melee_attack_chain), parent, target) + else + INVOKE_ASYNC(src, PROC_REF(pretend_fish), target) + return COMPONENT_HOSTILE_NO_ATTACK + +/datum/component/profound_fisher/proc/pretend_fish(atom/target) + var/fishing_type + for(var/type in npc_fishing_preset) + if(!istype(target, type)) + continue + fishing_type = npc_fishing_preset[type] + break + var/datum/fish_source/fish_spot = GLOB.preset_fish_sources[fishing_type] + if(isnull(fish_spot)) + return null + var/obj/effect/fishing_lure/lure = new(get_turf(target), target) + var/mob/living/living_parent = parent + if(!do_after(living_parent, 10 SECONDS, target = target)) + qdel(lure) + return + var/reward_loot = fish_spot.roll_reward(our_rod, parent) + if(ispath(reward_loot)) + fish_spot.dispense_reward(reward_loot, parent, target) + qdel(lure) + +/obj/item/fishing_rod/mob_fisher + display_fishing_line = FALSE + line = /obj/item/fishing_line/reinforced + + diff --git a/code/datums/components/reagent_refiller.dm b/code/datums/components/reagent_refiller.dm index 35bdcb4ce51ec..7e455b150ad5b 100644 --- a/code/datums/components/reagent_refiller.dm +++ b/code/datums/components/reagent_refiller.dm @@ -33,11 +33,11 @@ return ..() /datum/component/reagent_refiller/RegisterWithParent() - RegisterSignal(parent, COMSIG_ITEM_AFTERATTACK, PROC_REF(refill)) + RegisterSignal(parent, COMSIG_ITEM_INTERACTING_WITH_ATOM, PROC_REF(refill)) RegisterSignal(parent, COMSIG_ATOM_EXITED, PROC_REF(delete_self)) /datum/component/reagent_refiller/UnregisterFromParent() - UnregisterSignal(parent, list(COMSIG_ITEM_AFTERATTACK, COMSIG_ATOM_EXITED)) + UnregisterSignal(parent, list(COMSIG_ITEM_INTERACTING_WITH_ATOM, COMSIG_ATOM_EXITED)) /datum/component/reagent_refiller/proc/delete_self() SIGNAL_HANDLER @@ -48,8 +48,6 @@ /datum/component/reagent_refiller/proc/refill() SIGNAL_HANDLER - . |= COMPONENT_AFTERATTACK_PROCESSED_ITEM - var/obj/item/reagent_containers/container = parent var/amount = min((container.amount_per_transfer_from_this + container.reagents.total_volume), container.reagents.total_volume) if (amount == 0) diff --git a/code/datums/components/religious_tool.dm b/code/datums/components/religious_tool.dm index 3c421a04aa302..37b62d1aa0e3c 100644 --- a/code/datums/components/religious_tool.dm +++ b/code/datums/components/religious_tool.dm @@ -140,7 +140,10 @@ select_sect(usr, params["path"]) return TRUE //they picked a sect lets update so some weird spammy shit doesn't happen if("perform_rite") - perform_rite(usr, params["path"]) + if(!ispath(text2path(params["path"]), /datum/religion_rites)) + message_admins("[ADMIN_LOOKUPFLW(usr)] has tried to spawn an item when performing a rite.") + return + perform_rite(usr, text2path(params["path"])) /// Select the sect, called from [/datum/component/religious_tool/proc/AttemptActions] /datum/component/religious_tool/proc/select_sect(mob/living/user, path) @@ -154,9 +157,6 @@ /// Perform the rite, called from [/datum/component/religious_tool/proc/AttemptActions] /datum/component/religious_tool/proc/perform_rite(mob/living/user, path) - if(!ispath(text2path(path), /datum/religion_rites)) - message_admins("[ADMIN_LOOKUPFLW(usr)] has tried to spawn an item when performing a rite.") - return if(user.mind.holy_role < HOLY_ROLE_PRIEST) if(user.mind.holy_role == HOLY_ROLE_DEACON) to_chat(user, "You are merely a deacon of [GLOB.deity], and therefore cannot perform rites.") diff --git a/code/datums/components/riding/riding.dm b/code/datums/components/riding/riding.dm index 7ac6027944c4d..7ead11012b024 100644 --- a/code/datums/components/riding/riding.dm +++ b/code/datums/components/riding/riding.dm @@ -118,6 +118,7 @@ if (HAS_TRAIT(parent, trait)) ADD_TRAIT(rider, trait, REF(src)) rider.add_traits(rider_traits, REF(src)) + post_vehicle_mob_buckle(movable_parent, rider) /// This proc is called when the rider attempts to grab the thing they're riding, preventing them from doing so. /datum/component/riding/proc/on_rider_try_pull(mob/living/rider_pulling, atom/movable/target, force) @@ -127,6 +128,10 @@ ridden.balloon_alert(rider_pulling, "not while riding it!") return COMSIG_LIVING_CANCEL_PULL +///any behavior we want to happen after buckling the mob +/datum/component/riding/proc/post_vehicle_mob_buckle(atom/movable/ridden, atom/movable/rider) + return TRUE + /// Some ridable atoms may want to only show on top of the rider in certain directions, like wheelchairs /datum/component/riding/proc/handle_vehicle_layer(dir) var/atom/movable/AM = parent diff --git a/code/datums/components/riding/riding_mob.dm b/code/datums/components/riding/riding_mob.dm index 20afd23272607..3cc853cc77a17 100644 --- a/code/datums/components/riding/riding_mob.dm +++ b/code/datums/components/riding/riding_mob.dm @@ -5,6 +5,8 @@ var/can_be_driven = TRUE /// If TRUE, this creature's abilities can be triggered by the rider while mounted var/can_use_abilities = FALSE + /// shall we require riders to go through the riding minigame if they arent in our friends list + var/require_minigame = FALSE /// list of blacklisted abilities that cant be shared var/list/blacklist_abilities = list() @@ -95,7 +97,7 @@ return ..() /datum/component/riding/creature/driver_move(atom/movable/movable_parent, mob/living/user, direction) - if(!COOLDOWN_FINISHED(src, vehicle_move_cooldown)) + if(!COOLDOWN_FINISHED(src, vehicle_move_cooldown) || !Process_Spacemove()) return COMPONENT_DRIVER_BLOCK_MOVE if(!keycheck(user)) if(ispath(keytype, /obj/item)) @@ -108,9 +110,14 @@ last_move_diagonal = ((direction & (direction - 1)) && (living_parent.loc == next)) var/modified_move_cooldown = vehicle_move_cooldown var/modified_move_delay = vehicle_move_delay - if(ishuman(user) && HAS_TRAIT(user, TRAIT_SETTLER)) - var/mob/living/carbon/human/settler_rider = user - switch(settler_rider.mob_mood.sanity_level) + if(ishuman(user) && HAS_TRAIT(user, TRAIT_ROUGHRIDER)) // YEEHAW! + var/mob/living/carbon/human/rough_rider = user + var/ride_benefit = null + if(HAS_TRAIT(rough_rider, TRAIT_PRIMITIVE)) // closer to a beast than a man; you don't need to think to ride! + ride_benefit = SANITY_LEVEL_GREAT + else + ride_benefit = rough_rider.mob_mood.sanity_level + switch(ride_benefit) if(SANITY_LEVEL_GREAT) modified_move_cooldown *= 0.5 modified_move_delay *= 0.5 @@ -130,25 +137,18 @@ return ..() /// Yeets the rider off, used for animals and cyborgs, redefined for humans who shove their piggyback rider off -/datum/component/riding/creature/proc/force_dismount(mob/living/rider, gentle = FALSE) +/datum/component/riding/creature/proc/force_dismount(mob/living/rider, throw_range = 8, throw_speed = 3, gentle = FALSE) var/atom/movable/movable_parent = parent movable_parent.unbuckle_mob(rider) - + rider.Knockdown(3 SECONDS) + if(throw_range == 0) + return if(!iscyborg(movable_parent) && !isanimal_or_basicmob(movable_parent)) return - var/turf/target = get_edge_target_turf(movable_parent, movable_parent.dir) - var/turf/targetm = get_step(get_turf(movable_parent), movable_parent.dir) - rider.Move(targetm) - rider.Knockdown(3 SECONDS) - if(gentle) - rider.visible_message(span_warning("[rider] is thrown clear of [movable_parent]!"), \ - span_warning("You're thrown clear of [movable_parent]!")) - rider.throw_at(target, 8, 3, movable_parent, gentle = TRUE) - else - rider.visible_message(span_warning("[rider] is thrown violently from [movable_parent]!"), \ - span_warning("You're thrown violently from [movable_parent]!")) - rider.throw_at(target, 14, 5, movable_parent, gentle = FALSE) + rider.visible_message(span_warning("[rider] is thrown clear of [movable_parent]!"), \ + span_warning("You're thrown clear of [movable_parent]!")) + rider.throw_at(target, throw_range, throw_speed, movable_parent, gentle = gentle) /// If we're a cyborg or animal and we spin, we yeet whoever's on us off us /datum/component/riding/creature/proc/check_emote(mob/living/user, datum/emote/emote) @@ -216,6 +216,14 @@ else if(ride_check_flags & CARRIER_NEEDS_ARM) // fireman human_parent.buckle_lying = 90 +/datum/component/riding/creature/post_vehicle_mob_buckle(mob/living/ridden, mob/living/rider) + if(!require_minigame || ridden.faction.Find(REF(rider))) + return + ridden.Shake(duration = 2 SECONDS) + ridden.balloon_alert(rider, "tries to shake you off!") + var/datum/riding_minigame/game = new(ridden, rider, FALSE) + game.commence_minigame() + /datum/component/riding/creature/human/RegisterWithParent() . = ..() RegisterSignal(parent, COMSIG_LIVING_UNARMED_ATTACK, PROC_REF(on_host_unarmed_melee)) @@ -522,3 +530,153 @@ /datum/component/riding/leaper/handle_unbuckle(mob/living/rider) . = ..() UnregisterSignal(rider, COMSIG_MOB_POINTED) + +/datum/component/riding/creature/raptor + require_minigame = TRUE + ride_check_flags = RIDER_NEEDS_ARM | UNBUCKLE_DISABLED_RIDER + +/datum/component/riding/creature/raptor/Initialize(mob/living/riding_mob, force, ride_check_flags, potion_boost) + . = ..() + RegisterSignal(parent, COMSIG_PROJECTILE_PREHIT, PROC_REF(on_bullet_hit)) + RegisterSignal(parent, COMSIG_MOB_AFTER_APPLY_DAMAGE, PROC_REF(on_attacked)) + +/datum/component/riding/creature/raptor/proc/on_bullet_hit(atom/target, list/bullet_args, obj/projectile/hit_projectile) + SIGNAL_HANDLER + + if(hit_projectile.armor_flag == ENERGY) + freak_out() + +/datum/component/riding/creature/raptor/proc/on_attacked(mob/living/source, damage_dealt, damagetype, def_zone, blocked, wound_bonus, bare_wound_bonus, sharpness, attack_direction, obj/item/attacking_item) + SIGNAL_HANDLER + + if(damagetype == STAMINA) + freak_out() + +/datum/component/riding/creature/raptor/proc/freak_out() + var/mob/living/living_parent = parent + if(!length(living_parent.buckled_mobs)) + return + living_parent.balloon_alert_to_viewers("freaks out!") + living_parent.spin(spintime = 2 SECONDS, speed = 1) + for(var/mob/living/buckled_mob in living_parent.buckled_mobs) + force_dismount(buckled_mob, throw_range = 2, gentle = TRUE) + +/datum/component/riding/creature/raptor/handle_specials() + . = ..() + if(!SSmapping.is_planetary()) + set_riding_offsets(RIDING_OFFSET_ALL, list(TEXT_NORTH = list(7, 7), TEXT_SOUTH = list(2, 10), TEXT_EAST = list(12, 7), TEXT_WEST = list(10, 7))) + else + set_riding_offsets(RIDING_OFFSET_ALL, list(TEXT_NORTH = list(0, 7), TEXT_SOUTH = list(0, 10), TEXT_EAST = list(-3, 9), TEXT_WEST = list(3, 9))) + set_vehicle_dir_layer(SOUTH, ABOVE_MOB_LAYER) + set_vehicle_dir_layer(NORTH, OBJ_LAYER) + set_vehicle_dir_layer(EAST, OBJ_LAYER) + set_vehicle_dir_layer(WEST, OBJ_LAYER) + +/datum/component/riding/creature/raptor/fast + vehicle_move_delay = 1.5 + +//a simple minigame players must win to mount and tame a mob +/datum/riding_minigame + ///our host mob + var/datum/weakref/host + ///our current rider + var/datum/weakref/mounter + ///the total amount of tries the rider gets + var/maximum_attempts = 6 + ///maximum number of failures before we fail + var/maximum_failures = 3 + ///cached directional icons of our host + var/list/cached_icons = list() + +/datum/riding_minigame/New(mob/living/ridden, mob/living/rider, use_mob_icons = TRUE) + . = ..() + RegisterSignal(rider, COMSIG_MOB_UNBUCKLED, PROC_REF(lose_game)) + host = WEAKREF(ridden) + mounter = WEAKREF(rider) + var/used_icon = use_mob_icons ? initial(ridden.icon) : 'icons/testing/turf_analysis.dmi' + var/used_icon_state = use_mob_icons ? initial(ridden.icon_state) : "red_arrow" + for(var/direction in GLOB.cardinals) + var/icon/directional_icon = getFlatIcon(image(icon = used_icon, icon_state = used_icon_state, dir = direction)) + var/string_icon = icon2base64(directional_icon) + var/opposite_direction = dir2text(REVERSE_DIR(direction)) + cached_icons[opposite_direction] = string_icon + +/datum/riding_minigame/proc/commence_minigame() + set waitfor = FALSE + START_PROCESSING(SSprocessing, src) + var/mob/living/rider = mounter?.resolve() + if(isnull(rider)) + lose_game() + return + ui_interact(rider) + +/datum/riding_minigame/process() + var/mob/living/living_host = host?.resolve() + if(isnull(living_host)) + return PROCESS_KILL + if(prob(60)) //we shake and move uncontrollably! + living_host.Shake(duration = 2 SECONDS) + var/list/new_direction = GLOB.cardinals.Copy() - living_host.dir + living_host.setDir(pick(new_direction)) + +/datum/riding_minigame/ui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "RideMinigame") + ui.open() + +/datum/riding_minigame/ui_static_data(mob/user) + var/list/data = list() + data["maximum_attempts"] = maximum_attempts + data["maximum_failures"] = maximum_failures + data["all_icons"] = list() + for(var/index in cached_icons) + data["all_icons"] += list(list( + "direction" = index, + "icon" = cached_icons[index], + )) + return data + +/datum/riding_minigame/ui_state(mob/user) + return GLOB.always_state + +/datum/riding_minigame/ui_act(action, params, datum/tgui/ui) + . = ..() + switch(action) + if("lose_game") + lose_game() + if("win_game") + win_game() + +/datum/riding_minigame/proc/win_game() + var/mob/living/living_host = host?.resolve() + var/mob/living/living_rider = mounter?.resolve() + if(isnull(living_host) || isnull(living_rider)) + qdel(src) + return + living_host.befriend(living_rider) + living_host.balloon_alert(living_rider, "calms down...") + qdel(src) + +/datum/riding_minigame/proc/lose_game() + var/mob/living/living_host = host?.resolve() + var/mob/living/living_rider = mounter?.resolve() + if(isnull(living_host) || isnull(living_rider)) + qdel(src) + return + if(LAZYFIND(living_host.buckled_mobs, living_rider)) + UnregisterSignal(living_rider, COMSIG_MOB_UNBUCKLED) //we're about to knock them down! + living_host.spin(spintime = 2 SECONDS, speed = 1) + living_rider.Knockdown(4 SECONDS) + living_host.unbuckle_mob(living_rider) + living_host.balloon_alert(living_rider, "knocks you down!") + qdel(src) + +/datum/riding_minigame/ui_close(mob/user) + lose_game() + +/datum/riding_minigame/Destroy() + STOP_PROCESSING(SSprocessing, src) + mounter = null + host = null + return ..() diff --git a/code/datums/components/rotation.dm b/code/datums/components/rotation.dm index f872c6bfd6939..6ff8197e09319 100644 --- a/code/datums/components/rotation.dm +++ b/code/datums/components/rotation.dm @@ -55,6 +55,7 @@ /datum/component/simple_rotation/proc/rotate_right(datum/source, mob/user) SIGNAL_HANDLER rotate(user, ROTATION_CLOCKWISE) + return CLICK_ACTION_SUCCESS /datum/component/simple_rotation/proc/rotate_left(datum/source, mob/user) SIGNAL_HANDLER diff --git a/code/datums/components/scope.dm b/code/datums/components/scope.dm index 531ff9e9962df..087eb0c06d24c 100644 --- a/code/datums/components/scope.dm +++ b/code/datums/components/scope.dm @@ -1,3 +1,6 @@ +///Used to allow reaching the maximum offset range without exiting the boundaries of the game screen. +#define MOUSE_POINTER_OFFSET_MULT 1.1 + ///A component that allows players to use the item to zoom out. Mainly intended for firearms, but now works with other items too. /datum/component/scope /// How far we can extend, with modifier of 1, up to our vision edge, higher numbers multiply. @@ -27,7 +30,7 @@ RegisterSignal(parent, COMSIG_MOVABLE_MOVED, PROC_REF(on_move)) switch(zoom_method) if(ZOOM_METHOD_RIGHT_CLICK) - RegisterSignal(parent, COMSIG_ITEM_AFTERATTACK_SECONDARY, PROC_REF(on_secondary_afterattack)) + RegisterSignal(parent, COMSIG_RANGED_ITEM_INTERACTING_WITH_ATOM_SECONDARY, PROC_REF(do_secondary_zoom)) if(ZOOM_METHOD_WIELD) RegisterSignal(parent, SIGNAL_ADDTRAIT(TRAIT_WIELDED), PROC_REF(on_wielded)) RegisterSignal(parent, SIGNAL_REMOVETRAIT(TRAIT_WIELDED), PROC_REF(on_unwielded)) @@ -46,7 +49,7 @@ parent_item.remove_item_action(scope) UnregisterSignal(parent, list( COMSIG_MOVABLE_MOVED, - COMSIG_ITEM_AFTERATTACK_SECONDARY, + COMSIG_RANGED_ITEM_INTERACTING_WITH_ATOM_SECONDARY, SIGNAL_ADDTRAIT(TRAIT_WIELDED), SIGNAL_REMOVETRAIT(TRAIT_WIELDED), COMSIG_GUN_TRY_FIRE, @@ -71,14 +74,14 @@ return stop_zooming(tracker.owner) -/datum/component/scope/proc/on_secondary_afterattack(datum/source, atom/target, mob/user, proximity_flag, click_parameters) +/datum/component/scope/proc/do_secondary_zoom(datum/source, mob/user, atom/target, click_parameters) SIGNAL_HANDLER if(tracker) stop_zooming(user) else zoom(user) - return COMPONENT_SECONDARY_CANCEL_ATTACK_CHAIN + return ITEM_INTERACT_BLOCKING /datum/component/scope/proc/on_action_trigger(datum/action/source) SIGNAL_HANDLER @@ -249,6 +252,12 @@ icon_y = text2num(LAZYACCESS(modifiers, ICON_Y)) if(isnull(icon_y)) icon_y = view_list[2]*world.icon_size/2 - given_x = round(range_modifier * (icon_x - view_list[1]*world.icon_size/2)) - given_y = round(range_modifier * (icon_y - view_list[2]*world.icon_size/2)) + var/x_cap = range_modifier * view_list[1]*world.icon_size / 2 + var/y_cap = range_modifier * view_list[2]*world.icon_size / 2 + var/uncapped_x = round(range_modifier * (icon_x - view_list[1]*world.icon_size/2) * MOUSE_POINTER_OFFSET_MULT) + var/uncapped_y = round(range_modifier * (icon_y - view_list[2]*world.icon_size/2) * MOUSE_POINTER_OFFSET_MULT) + given_x = clamp(uncapped_x, -x_cap, x_cap) + given_y = clamp(uncapped_y, -y_cap, y_cap) given_turf = locate(owner.x+round(given_x/world.icon_size, 1),owner.y+round(given_y/world.icon_size, 1),owner.z) + +#undef MOUSE_POINTER_OFFSET_MULT diff --git a/code/datums/components/shell.dm b/code/datums/components/shell.dm index 5b6361b9ee673..2e9ee73c32a06 100644 --- a/code/datums/components/shell.dm +++ b/code/datums/components/shell.dm @@ -137,7 +137,7 @@ examine_text += span_notice("There is an integrated circuit attached. Use a multitool to access the wiring. Use a screwdriver to remove it from [source].") examine_text += span_notice("The cover panel to the integrated circuit is [locked? "locked" : "unlocked"].") - var/obj/item/stock_parts/cell/cell = attached_circuit.cell + var/obj/item/stock_parts/power_store/cell = attached_circuit.cell examine_text += span_notice("The charge meter reads [cell ? round(cell.percent(), 1) : 0]%.") if (shell_flags & SHELL_FLAG_USB_PORT) @@ -167,13 +167,13 @@ if(!is_authorized(attacker)) return - if(istype(item, /obj/item/stock_parts/cell)) + if(istype(item, /obj/item/stock_parts/power_store/cell)) source.balloon_alert(attacker, "can't put cell in directly!") return if(istype(item, /obj/item/inducer)) var/obj/item/inducer/inducer = item - INVOKE_ASYNC(inducer, TYPE_PROC_REF(/obj/item, attack_atom), attached_circuit, attacker, list()) + INVOKE_ASYNC(inducer, TYPE_PROC_REF(/obj/item, attack_atom), attached_circuit || parent, attacker, list()) return COMPONENT_NO_AFTERATTACK if(attached_circuit) diff --git a/code/datums/components/shielded.dm b/code/datums/components/shielded.dm index f35ad2ceec0c4..da83c4ad2d29d 100644 --- a/code/datums/components/shielded.dm +++ b/code/datums/components/shielded.dm @@ -28,6 +28,9 @@ var/show_charge_as_alpha = FALSE /// The item we use for recharging var/recharge_path + /// Whether or not we lose a charge when hit by 0 damage items or projectiles + var/lose_charge_on_damageless = FALSE + /// The cooldown tracking when we were last hit COOLDOWN_DECLARE(recently_hit_cd) /// The cooldown tracking when we last replenished a charge @@ -172,6 +175,9 @@ if(lose_multiple_charges) // if the shield has health like damage we'll lose charges equal to the damage of the hit charge_loss = damage + else if(!lose_charge_on_damageless && !damage) + charge_loss = 0 + adjust_charge(-charge_loss) INVOKE_ASYNC(src, PROC_REF(actually_run_hit_callback), owner, attack_text, current_charges) diff --git a/code/datums/components/shrink.dm b/code/datums/components/shrink.dm index d2615ea2f7770..0b32526e2b231 100644 --- a/code/datums/components/shrink.dm +++ b/code/datums/components/shrink.dm @@ -1,6 +1,8 @@ /datum/component/shrink var/olddens var/oldopac + /// Tracks the squashable component we apply when we make the small mob squashable + var/datum/component/squashable/newsquash dupe_mode = COMPONENT_DUPE_HIGHLANDER /datum/component/shrink/Initialize(shrink_time) @@ -25,17 +27,27 @@ if(ishuman(C)) var/mob/living/carbon/human/H = C H.physiology.damage_resistance -= 100//carbons take double damage while shrunk + if(!L.GetComponent(/datum/component/squashable)) + newsquash = L.AddComponent( \ + /datum/component/squashable, \ + squash_chance = 75, \ + squash_damage = 10, \ + squash_flags = SQUASHED_ALWAYS_IF_DEAD|SQUASHED_DONT_SQUASH_IN_CONTENTS, \ + ) else parent_atom.set_density(FALSE) // this is handled by the UNDENSE trait on mobs parent_atom.visible_message(span_warning("[parent_atom] shrinks down to a tiny size!"), span_userdanger("Everything grows bigger!")) - QDEL_IN(src, shrink_time) + if(shrink_time >= 0) // negative shrink time is permanent + QDEL_IN(src, shrink_time) /datum/component/shrink/proc/handle_shrunk_speech(mob/living/little_guy, list/speech_args) SIGNAL_HANDLER speech_args[SPEECH_SPANS] |= SPAN_SMALL_VOICE /datum/component/shrink/Destroy() + if(newsquash) + qdel(newsquash) var/atom/parent_atom = parent parent_atom.transform = parent_atom.transform.Scale(2,2) parent_atom.set_opacity(oldopac) diff --git a/code/datums/components/shuttle_cling.dm b/code/datums/components/shuttle_cling.dm index 724060c9cbeb2..cef7c1f94dd6e 100644 --- a/code/datums/components/shuttle_cling.dm +++ b/code/datums/components/shuttle_cling.dm @@ -51,7 +51,7 @@ update_state(parent) //otherwise we'll get moved 1 tile before we can correct ourselves, which isnt super bad but just looks jank /datum/component/shuttle_cling/proc/initialize_loop() - hyperloop = DSmove_manager.move(moving = parent, direction = direction, delay = not_clinging_move_delay, subsystem = SShyperspace_drift, priority = MOVEMENT_ABOVE_SPACE_PRIORITY, flags = MOVEMENT_LOOP_NO_DIR_UPDATE|MOVEMENT_LOOP_OUTSIDE_CONTROL) + hyperloop = GLOB.move_manager.move(moving = parent, direction = direction, delay = not_clinging_move_delay, subsystem = SShyperspace_drift, priority = MOVEMENT_ABOVE_SPACE_PRIORITY, flags = MOVEMENT_LOOP_NO_DIR_UPDATE|MOVEMENT_LOOP_OUTSIDE_CONTROL) update_state() /datum/component/shuttle_cling/proc/clear_loop() diff --git a/code/datums/components/sign_language.dm b/code/datums/components/sign_language.dm index e8d22238705eb..054a4de4af0f0 100644 --- a/code/datums/components/sign_language.dm +++ b/code/datums/components/sign_language.dm @@ -5,7 +5,15 @@ #define SIGN_ARMLESS 3 #define SIGN_ARMS_DISABLED 4 #define SIGN_TRAIT_BLOCKED 5 -#define SIGN_CUFFED 6 +#define SIGN_HANDS_COMPLETELY_RESTRAINED 6 +#define SIGN_SLOWLY_FROM_CUFFS 7 + +// Defines to determine the tone of the signer's message. +#define TONE_NEUTRAL 0 //! a statement +#define TONE_INQUISITIVE 1 //! a question +#define TONE_EMPHATIC 2 //! an exclamation +#define TONE_INQUISITIVE_EMPHATIC 3 //! both a question and an exclamation (interrobang) + /** * Reactive Sign Language Component for Carbons. Allows Carbons to speak with sign language if they have the relevant traits. @@ -140,10 +148,15 @@ carbon_parent.visible_message("tries to sign, but can't with [carbon_parent.p_their()] hands full!", visible_message_flags = EMOTE_MESSAGE) return COMPONENT_CANNOT_SPEAK - if(SIGN_CUFFED) // Restrained + if(SIGN_HANDS_COMPLETELY_RESTRAINED) // Restrained carbon_parent.visible_message("tries to sign, but can't with [carbon_parent.p_their()] hands bound!", visible_message_flags = EMOTE_MESSAGE) return COMPONENT_CANNOT_SPEAK + // If we're handcuffed, we can still sign, but it's slow + if(SIGN_SLOWLY_FROM_CUFFS) + carbon_parent.visible_message("struggles, signing slowly with [carbon_parent.p_their()] hands cuffed...", visible_message_flags = EMOTE_MESSAGE) + return COMPONENT_IGNORE_CAN_SPEAK + if(SIGN_ARMLESS) // No arms to_chat(carbon_parent, span_warning("You can't sign with no hands!")) return COMPONENT_CANNOT_SPEAK @@ -181,9 +194,12 @@ busy_hands++ - // Handcuffed or otherwise restrained - can't talk + // Handcuffed or otherwise restrained if(HAS_TRAIT(carbon_parent, TRAIT_RESTRAINED)) - return SIGN_CUFFED + if(HAS_TRAIT_FROM_ONLY(carbon_parent, TRAIT_RESTRAINED, HANDCUFFED_TRAIT)) + return SIGN_SLOWLY_FROM_CUFFS + else + return SIGN_HANDS_COMPLETELY_RESTRAINED // Some other trait preventing us from using our hands now else if(HAS_TRAIT(carbon_parent, TRAIT_HANDS_BLOCKED) || HAS_TRAIT(carbon_parent, TRAIT_EMOTEMUTE)) return SIGN_TRAIT_BLOCKED @@ -222,13 +238,16 @@ return SPELL_INVOCATION_ALWAYS_SUCCEED /// Signal proc for [COMSIG_LIVING_TREAT_MESSAGE] -/// Stars out our message if we only have 1 hand free. +/// Changes our message based on conditions that limit or alter our ability to communicate /datum/component/sign_language/proc/on_treat_living_message(atom/movable/source, list/message_args) SIGNAL_HANDLER if(check_signables_state() == SIGN_ONE_HAND) message_args[TREAT_MESSAGE_ARG] = stars(message_args[TREAT_MESSAGE_ARG]) + if(check_signables_state() == SIGN_SLOWLY_FROM_CUFFS) + message_args[TREAT_MESSAGE_ARG] = stifled(message_args[TREAT_MESSAGE_ARG]) + message_args[TREAT_TTS_MESSAGE_ARG] = "" /// Signal proc for [COMSIG_MOVABLE_SAY_QUOTE] @@ -245,7 +264,7 @@ return HAS_TRAIT(source, TRAIT_CAN_SIGN_ON_COMMS) ? NONE : COMPONENT_CANNOT_USE_RADIO -/// Replaces emphatic punctuation with periods. Changes tonal indicator and emotes eyebrow movement based on what is typed. +/// Replaces emphatic punctuation with periods. Changes tonal indicator and emotes based on what is typed. /datum/component/sign_language/proc/on_say(mob/living/carbon/carbon_parent, list/speech_args) SIGNAL_HANDLER @@ -255,29 +274,51 @@ var/exclamation_found = findtext(message, "!") // Is there a ? var/question_found = findtext(message, "?") + var/emote_tone = TONE_NEUTRAL + if (exclamation_found && question_found) + emote_tone = TONE_INQUISITIVE_EMPHATIC + else if (exclamation_found) + emote_tone = TONE_EMPHATIC + else if (question_found) + emote_tone = TONE_INQUISITIVE // Cut our last overlay before we replace it if(timeleft(tonal_timerid) > 0) remove_tonal_indicator() deltimer(tonal_timerid) - // Prioritize questions - if(question_found) - tonal_indicator = mutable_appearance('icons/mob/effects/talk.dmi', "signlang1", TYPING_LAYER) - carbon_parent.visible_message(span_notice("[carbon_parent] lowers [carbon_parent.p_their()] eyebrows.")) - else if(exclamation_found) - tonal_indicator = mutable_appearance('icons/mob/effects/talk.dmi', "signlang2", TYPING_LAYER) - carbon_parent.visible_message(span_notice("[carbon_parent] raises [carbon_parent.p_their()] eyebrows.")) - // If either an exclamation or question are found + switch(emote_tone) + if(TONE_INQUISITIVE) + tonal_indicator = mutable_appearance('icons/mob/effects/talk.dmi', "signlang1", TYPING_LAYER) + if(TONE_EMPHATIC) + tonal_indicator = mutable_appearance('icons/mob/effects/talk.dmi', "signlang2", TYPING_LAYER) + if(TONE_INQUISITIVE_EMPHATIC) + tonal_indicator = mutable_appearance('icons/mob/effects/talk.dmi', "signlang2", TYPING_LAYER) + // If there's a tonal indicator if(!isnull(tonal_indicator) && carbon_parent.client?.typing_indicators) carbon_parent.add_overlay(tonal_indicator) tonal_timerid = addtimer(CALLBACK(src, PROC_REF(remove_tonal_indicator)), 2.5 SECONDS, TIMER_UNIQUE | TIMER_OVERRIDE | TIMER_STOPPABLE | TIMER_DELETE_ME) else // If we're not gonna use it, just be sure we get rid of it tonal_indicator = null + // Only emote the tone if we have one and aren't already emoting the handcuffed message + if(!carbon_parent.handcuffed && emote_tone) + emote_tone(carbon_parent, emote_tone) + // remove the ! and ? symbols from message at the end message = sanitize_message(message) speech_args[SPEECH_MESSAGE] = message +/// Send a visible message depending on the tone of the message that the sender is trying to convey to the world. +/datum/component/sign_language/proc/emote_tone(mob/living/carbon/carbon_parent, emote_tone) + switch(emote_tone) + if(TONE_INQUISITIVE) + carbon_parent.visible_message(span_bold("quirks [carbon_parent.p_their()] brows quizzically."), visible_message_flags = EMOTE_MESSAGE) + if(TONE_EMPHATIC) + carbon_parent.visible_message(span_bold("widens [carbon_parent.p_their()] eyes emphatically!"), visible_message_flags = EMOTE_MESSAGE) + if(TONE_INQUISITIVE_EMPHATIC) + carbon_parent.visible_message(span_bold("wears an intense, befuddled expression!"), visible_message_flags = EMOTE_MESSAGE) + + /// Removes the tonal indicator overlay completely /datum/component/sign_language/proc/remove_tonal_indicator() if(isnull(tonal_indicator)) @@ -292,4 +333,9 @@ #undef SIGN_ARMLESS #undef SIGN_ARMS_DISABLED #undef SIGN_TRAIT_BLOCKED -#undef SIGN_CUFFED +#undef SIGN_HANDS_COMPLETELY_RESTRAINED +#undef SIGN_SLOWLY_FROM_CUFFS +#undef TONE_NEUTRAL +#undef TONE_INQUISITIVE +#undef TONE_EMPHATIC +#undef TONE_INQUISITIVE_EMPHATIC diff --git a/code/datums/components/simple_access.dm b/code/datums/components/simple_access.dm index a42d784f0c054..3038b3532906d 100644 --- a/code/datums/components/simple_access.dm +++ b/code/datums/components/simple_access.dm @@ -10,6 +10,7 @@ return COMPONENT_INCOMPATIBLE access = new_access RegisterSignal(parent, COMSIG_MOB_TRIED_ACCESS, PROC_REF(on_tried_access)) + RegisterSignal(parent, COMSIG_MOB_RETRIEVE_SIMPLE_ACCESS, PROC_REF(retrieve_access)) if(!donor_atom) return if(isorgan(donor_atom)) @@ -28,6 +29,10 @@ else return ACCESS_DISALLOWED +/datum/component/simple_access/proc/retrieve_access(datum/source, list/access_list) + SIGNAL_HANDLER + access_list += access + /datum/component/simple_access/proc/on_donor_removed(datum/source) SIGNAL_HANDLER qdel(src) diff --git a/code/datums/components/singularity.dm b/code/datums/components/singularity.dm index 56a6723f21f41..14aaedff7172a 100644 --- a/code/datums/components/singularity.dm +++ b/code/datums/components/singularity.dm @@ -286,7 +286,7 @@ if (STAGE_ONE) steps = 1 if (STAGE_TWO) - steps = 3//Yes this is right + steps = 2 if (STAGE_THREE) steps = 3 if (STAGE_FOUR) diff --git a/code/datums/components/sisyphus_awarder.dm b/code/datums/components/sisyphus_awarder.dm index 36fc344c7465e..2a18a2889fc65 100644 --- a/code/datums/components/sisyphus_awarder.dm +++ b/code/datums/components/sisyphus_awarder.dm @@ -5,6 +5,8 @@ /datum/component/sisyphus_awarder /// What poor sap is hauling this rock? var/mob/living/sisyphus + /// Reference to a place where it all started. + var/turf/bottom_of_the_hill /datum/component/sisyphus_awarder/Initialize() if (!istype(parent, /obj/item/boulder)) @@ -30,6 +32,7 @@ RegisterSignal(the_taker, COMSIG_ENTER_AREA, PROC_REF(on_bearer_changed_area)) RegisterSignal(the_taker, COMSIG_QDELETING, PROC_REF(on_dropped)) sisyphus = the_taker + bottom_of_the_hill = get_turf(the_taker) /// If you ever drop this shit you fail the challenge /datum/component/sisyphus_awarder/proc/on_dropped() @@ -45,5 +48,21 @@ return if (entered_area.type != /area/centcom/central_command_areas/evacuation) return // Don't istype because taking pods doesn't count + chosen_one.client?.give_award(/datum/award/achievement/misc/sisyphus, chosen_one) + play_reward_scene() + qdel(src) + +/// Sends the player back to the Lavaland and plays a funny sound +/datum/component/sisyphus_awarder/proc/play_reward_scene() + if(isnull(bottom_of_the_hill)) + return // This probably shouldn't happen, but... + + podspawn(list( + "path" = /obj/structure/closet/supplypod/centcompod/sisyphus, + "target" = get_turf(sisyphus), + "reverse_dropoff_coords" = list(bottom_of_the_hill.x, bottom_of_the_hill.y, bottom_of_the_hill.z), + )) + + SEND_SOUND(sisyphus, 'sound/ambience/music/sisyphus/sisyphus.ogg') diff --git a/code/datums/components/soul_stealer.dm b/code/datums/components/soul_stealer.dm index a69265421bb97..e725792bffe3c 100644 --- a/code/datums/components/soul_stealer.dm +++ b/code/datums/components/soul_stealer.dm @@ -22,9 +22,10 @@ /datum/component/soul_stealer/RegisterWithParent() RegisterSignal(parent, COMSIG_ATOM_EXAMINE, PROC_REF(on_examine)) RegisterSignal(parent, COMSIG_ITEM_AFTERATTACK, PROC_REF(on_afterattack)) + RegisterSignal(parent, COMSIG_ITEM_INTERACTING_WITH_ATOM, PROC_REF(try_transfer_soul)) /datum/component/soul_stealer/UnregisterFromParent() - UnregisterSignal(parent, list(COMSIG_ATOM_EXAMINE, COMSIG_ITEM_AFTERATTACK)) + UnregisterSignal(parent, list(COMSIG_ATOM_EXAMINE, COMSIG_ITEM_AFTERATTACK, COMSIG_ITEM_INTERACTING_WITH_ATOM)) ///signal called on parent being examined /datum/component/soul_stealer/proc/on_examine(datum/source, mob/user, list/examine_list) @@ -41,15 +42,15 @@ if(10 to INFINITY) examine_list += span_notice("A staggering [num_souls] souls have been claimed by it! And it hungers for more!") -/datum/component/soul_stealer/proc/on_afterattack(obj/item/source, atom/target, mob/living/user, proximity_flag, click_parameters) +/datum/component/soul_stealer/proc/on_afterattack(obj/item/source, atom/target, mob/living/user, click_parameters) SIGNAL_HANDLER - if(!proximity_flag) - return - if(ishuman(target)) INVOKE_ASYNC(src, PROC_REF(try_capture), target, user) +/datum/component/soul_stealer/proc/try_transfer_soul(obj/item/source, mob/user, atom/target, click_parameters) + SIGNAL_HANDLER + if(istype(target, /obj/structure/constructshell) && length(soulstones)) var/obj/item/soulstone/soulstone = soulstones[1] INVOKE_ASYNC(soulstone, TYPE_PROC_REF(/obj/item/soulstone, transfer_to_construct), target, user) @@ -58,7 +59,7 @@ else if(!length(soulstone.contents)) // something fucky happened qdel(soulstone) soulstones -= soulstone - + return ITEM_INTERACT_SUCCESS /datum/component/soul_stealer/proc/try_capture(mob/living/carbon/human/victim, mob/living/captor) if(victim.stat == CONSCIOUS) diff --git a/code/datums/components/sound_player.dm b/code/datums/components/sound_player.dm index 9bad9718a0537..fc1ff34041c77 100644 --- a/code/datums/components/sound_player.dm +++ b/code/datums/components/sound_player.dm @@ -1,7 +1,7 @@ /** * Sound Player component * - * Component that will play a sound upon recieving some signal + * Component that will play a sound upon receiving some signal */ /datum/component/sound_player ///Volume of the sound when played diff --git a/code/datums/components/spawner.dm b/code/datums/components/spawner.dm index a9bb9b4432bb0..26dbffaef6ff6 100644 --- a/code/datums/components/spawner.dm +++ b/code/datums/components/spawner.dm @@ -11,6 +11,8 @@ var/list/faction /// List of weak references to things we have already created var/list/spawned_things = list() + /// Callback to a proc that is called when a mob is spawned. Primarily used for sentient spawners. + var/datum/callback/spawn_callback /// How many mobs can we spawn maximum each time we try to spawn? (1 - max) var/max_spawn_per_attempt /// Distance from the spawner to spawn mobs @@ -19,7 +21,7 @@ var/spawn_distance_exclude COOLDOWN_DECLARE(spawn_delay) -/datum/component/spawner/Initialize(spawn_types = list(), spawn_time = 30 SECONDS, max_spawned = 5, max_spawn_per_attempt = 2 , faction = list(FACTION_MINING), spawn_text = null, spawn_distance = 1, spawn_distance_exclude = 0) +/datum/component/spawner/Initialize(spawn_types = list(), spawn_time = 30 SECONDS, max_spawned = 5, max_spawn_per_attempt = 1 , faction = list(FACTION_MINING), spawn_text = null, datum/callback/spawn_callback = null, spawn_distance = 1, spawn_distance_exclude = 0, initial_spawn_delay = 0 SECONDS) if (!islist(spawn_types)) CRASH("invalid spawn_types to spawn specified for spawner component!") src.spawn_time = spawn_time @@ -27,9 +29,13 @@ src.faction = faction src.spawn_text = spawn_text src.max_spawned = max_spawned + src.spawn_callback = spawn_callback src.max_spawn_per_attempt = max_spawn_per_attempt src.spawn_distance = spawn_distance src.spawn_distance_exclude = spawn_distance_exclude + // If set, doesn't instantly spawn a creature when the spawner component is applied. + if(initial_spawn_delay) + COOLDOWN_START(src, spawn_delay, spawn_time) RegisterSignal(parent, COMSIG_QDELETING, PROC_REF(stop_spawning)) RegisterSignal(parent, COMSIG_VENT_WAVE_CONCLUDED, PROC_REF(stop_spawning)) @@ -52,14 +58,16 @@ if(!COOLDOWN_FINISHED(src, spawn_delay)) return validate_references() - if(length(spawned_things) >= max_spawned) + var/spawned_total = length(spawned_things) + if(spawned_total >= max_spawned) return var/atom/spawner = parent COOLDOWN_START(src, spawn_delay, spawn_time) var/chosen_mob_type = pick(spawn_types) var/adjusted_spawn_count = 1 - if (max_spawn_per_attempt > 1) - adjusted_spawn_count = rand(1, max_spawn_per_attempt) + var/max_spawn_this_attempt = min(max_spawn_per_attempt, max_spawned - spawned_total) + if (max_spawn_this_attempt > 1) + adjusted_spawn_count = rand(1, max_spawn_this_attempt) for(var/i in 1 to adjusted_spawn_count) var/atom/created var/turf/picked_spot @@ -70,6 +78,8 @@ picked_spot = pick(turf_peel(spawn_distance, spawn_distance_exclude, spawner.loc, view_based = TRUE)) if(!picked_spot) picked_spot = pick(circle_range_turfs(spawner.loc, spawn_distance)) + if(picked_spot == spawner.loc) + SEND_SIGNAL(spawner, COMSIG_SPAWNER_SPAWNED_DEFAULT) created = new chosen_mob_type(picked_spot) else if (spawn_distance >= 1) picked_spot = pick(circle_range_turfs(spawner.loc, spawn_distance)) @@ -85,6 +95,7 @@ SEND_SIGNAL(src, COMSIG_SPAWNER_SPAWNED, created) RegisterSignal(created, COMSIG_QDELETING, PROC_REF(on_deleted)) + spawn_callback?.Invoke(created) if (spawn_text) diff --git a/code/datums/components/spirit_holding.dm b/code/datums/components/spirit_holding.dm index e2b1cfb96bc3b..a7accc38352ee 100644 --- a/code/datums/components/spirit_holding.dm +++ b/code/datums/components/spirit_holding.dm @@ -6,12 +6,20 @@ /datum/component/spirit_holding ///bool on if this component is currently polling for observers to inhabit the item var/attempting_awakening = FALSE + /// Allows renaming the bound item + var/allow_renaming + /// Allows channeling + var/allow_channeling ///mob contained in the item. var/mob/living/basic/shade/bound_spirit -/datum/component/spirit_holding/Initialize() +/datum/component/spirit_holding/Initialize(datum/mind/soul_to_bind, mob/awakener, allow_renaming = TRUE, allow_channeling = TRUE) if(!ismovable(parent)) //you may apply this to mobs, i take no responsibility for how that works out return COMPONENT_INCOMPATIBLE + src.allow_renaming = allow_renaming + src.allow_channeling = allow_channeling + if(soul_to_bind) + bind_the_soule(soul_to_bind, awakener, soul_to_bind.name) /datum/component/spirit_holding/Destroy(force) . = ..() @@ -30,7 +38,7 @@ /datum/component/spirit_holding/proc/on_examine(datum/source, mob/user, list/examine_list) SIGNAL_HANDLER if(!bound_spirit) - examine_list += span_notice("[parent] sleeps. Use [parent] in your hands to attempt to awaken it.") + examine_list += span_notice("[parent] sleeps.[allow_channeling ? " Use [parent] in your hands to attempt to awaken it." : ""]") return examine_list += span_notice("[parent] is alive.") @@ -48,6 +56,9 @@ thing.balloon_alert(user, "spirits are unwilling!") to_chat(user, span_warning("Anomalous otherworldly energies block you from awakening [parent]!")) return + if(!allow_channeling && bound_spirit) + to_chat(user, span_warning("Try as you might, the spirit within slumbers.")) + return attempting_awakening = TRUE thing.balloon_alert(user, "channeling...") var/mob/chosen_one = SSpolling.poll_ghosts_for_target( @@ -74,28 +85,29 @@ // Immediately unregister to prevent making a new spirit UnregisterSignal(parent, COMSIG_ITEM_ATTACK_SELF) - if(QDELETED(parent)) //if the thing that we're conjuring a spirit in has been destroyed, don't create a spirit to_chat(ghost, span_userdanger("The new vessel for your spirit has been destroyed! You remain an unbound ghost.")) return - bound_spirit = new(parent) - bound_spirit.ckey = ghost.ckey - bound_spirit.fully_replace_character_name(null, "The spirit of [parent]") - bound_spirit.status_flags |= GODMODE - bound_spirit.copy_languages(awakener, LANGUAGE_MASTER) //Make sure the sword can understand and communicate with the awakener. - bound_spirit.get_language_holder().omnitongue = TRUE //Grants omnitongue + bind_the_soule(ghost, awakener) - //Add new signals for parent and stop attempting to awaken - RegisterSignal(parent, COMSIG_ATOM_RELAYMOVE, PROC_REF(block_buckle_message)) - RegisterSignal(parent, COMSIG_BIBLE_SMACKED, PROC_REF(on_bible_smacked)) + attempting_awakening = FALSE + if(!allow_renaming) + return // Now that all of the important things are in place for our spirit, it's time for them to choose their name. var/valid_input_name = custom_name(awakener) if(valid_input_name) bound_spirit.fully_replace_character_name(null, "The spirit of [valid_input_name]") - attempting_awakening = FALSE +/datum/component/spirit_holding/proc/bind_the_soule(datum/mind/chosen_spirit, mob/awakener, name_override) + bound_spirit = new(parent) + chosen_spirit.transfer_to(bound_spirit) + bound_spirit.fully_replace_character_name(null, "The spirit of [name_override ? name_override : parent]") + bound_spirit.get_language_holder().omnitongue = TRUE //Grants omnitongue + + RegisterSignal(parent, COMSIG_ATOM_RELAYMOVE, PROC_REF(block_buckle_message)) + RegisterSignal(parent, COMSIG_BIBLE_SMACKED, PROC_REF(on_bible_smacked)) /** * custom_name : Simply sends a tgui input text box to the blade asking what name they want to be called, and retries it if the input is invalid. @@ -115,7 +127,7 @@ SIGNAL_HANDLER return COMSIG_BLOCK_RELAYMOVE -/datum/component/spirit_holding/proc/on_bible_smacked(datum/source, mob/living/user, direction) +/datum/component/spirit_holding/proc/on_bible_smacked(datum/source, mob/living/user, ...) SIGNAL_HANDLER INVOKE_ASYNC(src, PROC_REF(attempt_exorcism), user) diff --git a/code/datums/components/stationloving.dm b/code/datums/components/stationloving.dm index 72481bed279b5..35f67d9cd0295 100644 --- a/code/datums/components/stationloving.dm +++ b/code/datums/components/stationloving.dm @@ -51,7 +51,8 @@ /// Teleports parent to a safe turf on the station z-level. /datum/component/stationloving/proc/relocate() - var/target_turf = find_safe_turf() + + var/target_turf = length(GLOB.the_station_areas) ? get_safe_random_station_turf(GLOB.the_station_areas) : find_safe_turf() //Fallback. Mostly for debug maps. if(!target_turf) if(GLOB.blobstart.len > 0) diff --git a/code/datums/components/style/style.dm b/code/datums/components/style/style.dm index 7e92f846c8570..f39379d636783 100644 --- a/code/datums/components/style/style.dm +++ b/code/datums/components/style/style.dm @@ -97,7 +97,7 @@ src.multitooled = multitooled /datum/component/style/RegisterWithParent() - RegisterSignal(parent, COMSIG_MOB_ITEM_AFTERATTACK, PROC_REF(hotswap)) + RegisterSignal(parent, COMSIG_USER_ITEM_INTERACTION, PROC_REF(hotswap)) RegisterSignal(parent, COMSIG_MOB_MINED, PROC_REF(on_mine)) RegisterSignal(parent, COMSIG_MOB_APPLY_DAMAGE, PROC_REF(on_take_damage)) RegisterSignal(parent, COMSIG_MOB_EMOTED("flip"), PROC_REF(on_flip)) @@ -126,7 +126,7 @@ /datum/component/style/UnregisterFromParent() - UnregisterSignal(parent, COMSIG_MOB_ITEM_AFTERATTACK) + UnregisterSignal(parent, COMSIG_USER_ITEM_INTERACTION) UnregisterSignal(parent, COMSIG_MOB_MINED) UnregisterSignal(parent, COMSIG_MOB_APPLY_DAMAGE) UnregisterSignal(parent, list(COMSIG_MOB_EMOTED("flip"), COMSIG_MOB_EMOTED("spin"))) @@ -319,26 +319,27 @@ return "#364866" /// A proc that lets a user, when their rank >= `hotswap_rank`, swap items in storage with what's in their hands, simply by clicking on the stored item with a held item -/datum/component/style/proc/hotswap(mob/living/source, atom/target, obj/item/weapon, proximity_flag, click_parameters) +/datum/component/style/proc/hotswap(mob/living/source, atom/target, obj/item/weapon, click_parameters) SIGNAL_HANDLER if((rank < hotswap_rank) || !isitem(target) || !(target in source.get_all_contents())) - return + return NONE var/obj/item/item_target = target if(!(item_target.item_flags & IN_STORAGE)) - return + return NONE var/datum/storage/atom_storage = item_target.loc.atom_storage if(!atom_storage.can_insert(weapon, source, messages = FALSE)) source.balloon_alert(source, "unable to hotswap!") - return + return NONE atom_storage.attempt_insert(weapon, source, override = TRUE) INVOKE_ASYNC(source, TYPE_PROC_REF(/mob/living, put_in_hands), target) source.visible_message(span_notice("[source] quickly swaps [weapon] out with [target]!"), span_notice("You quickly swap [weapon] with [target].")) + return ITEM_INTERACT_BLOCKING // Point givers /datum/component/style/proc/on_punch(mob/living/carbon/human/punching_person, atom/attacked_atom, proximity) diff --git a/code/datums/components/style/style_meter.dm b/code/datums/components/style/style_meter.dm index c06fc35aca383..94263700dda21 100644 --- a/code/datums/components/style/style_meter.dm +++ b/code/datums/components/style/style_meter.dm @@ -93,10 +93,10 @@ /obj/item/style_meter/proc/on_click_alt(datum/source, mob/user) SIGNAL_HANDLER - if(!istype(loc, /obj/item/clothing/glasses)) + if(!istype(loc, /obj/item/clothing/glasses) || !user.can_perform_action(source)) return CLICK_ACTION_BLOCKING - clean_up() + clean_up(loc) forceMove(get_turf(src)) return CLICK_ACTION_SUCCESS diff --git a/code/datums/components/summoning.dm b/code/datums/components/summoning.dm index 220a4baca5f9a..69ade1e2f1b56 100644 --- a/code/datums/components/summoning.dm +++ b/code/datums/components/summoning.dm @@ -49,13 +49,10 @@ /datum/component/summoning/UnregisterFromParent() UnregisterSignal(parent, list(COMSIG_ITEM_AFTERATTACK, COMSIG_HOSTILE_POST_ATTACKINGTARGET, COMSIG_PROJECTILE_ON_HIT)) -/datum/component/summoning/proc/item_afterattack(obj/item/source, atom/target, mob/user, proximity_flag, click_parameters) +/datum/component/summoning/proc/item_afterattack(obj/item/source, atom/target, mob/user, click_parameters) SIGNAL_HANDLER - if(!proximity_flag) - return do_spawn_mob(get_turf(target), user) - return COMPONENT_AFTERATTACK_PROCESSED_ITEM /datum/component/summoning/proc/hostile_attackingtarget(mob/living/simple_animal/hostile/attacker, atom/target, success) SIGNAL_HANDLER diff --git a/code/datums/components/supermatter_crystal.dm b/code/datums/components/supermatter_crystal.dm index 9ff049e21fcbb..81a29b56c6d81 100644 --- a/code/datums/components/supermatter_crystal.dm +++ b/code/datums/components/supermatter_crystal.dm @@ -161,8 +161,8 @@ return if(is_type_in_typecache(item, sm_item_whitelist)) return FALSE - if(istype(item, /obj/item/clothing/mask/cigarette)) - var/obj/item/clothing/mask/cigarette/cig = item + if(istype(item, /obj/item/cigarette)) + var/obj/item/cigarette/cig = item var/clumsy = HAS_TRAIT(user, TRAIT_CLUMSY) if(clumsy) var/which_hand = BODY_ZONE_L_ARM diff --git a/code/datums/components/surgery_initiator.dm b/code/datums/components/surgery_initiator.dm index dd3251d98f22e..848bfd021eee6 100644 --- a/code/datums/components/surgery_initiator.dm +++ b/code/datums/components/surgery_initiator.dm @@ -119,11 +119,11 @@ patient.surgeries -= the_surgery REMOVE_TRAIT(patient, TRAIT_ALLOWED_HONORBOUND_ATTACK, type) user.visible_message( - span_notice("[user] removes [parent] from [patient]'s [parse_zone(selected_zone)]."), - span_notice("You remove [parent] from [patient]'s [parse_zone(selected_zone)]."), + span_notice("[user] removes [parent] from [patient]'s [patient.parse_zone_with_bodypart(selected_zone)]."), + span_notice("You remove [parent] from [patient]'s [patient.parse_zone_with_bodypart(selected_zone)]."), ) - patient.balloon_alert(user, "stopped work on [parse_zone(selected_zone)]") + patient.balloon_alert(user, "stopped work on [patient.parse_zone_with_bodypart(selected_zone)]") qdel(the_surgery) return @@ -134,15 +134,7 @@ if(is_robotic) required_tool_type = TOOL_SCREWDRIVER - if(iscyborg(user)) - var/has_cautery = FALSE - for(var/obj/item/borg/cyborg_omnitool/medical/omnitool in user.held_items) - if(omnitool.tool_behaviour == TOOL_CAUTERY) - has_cautery = TRUE - if(has_cautery) - patient.balloon_alert(user, "need a cautery in an inactive slot to stop the surgery!") - return - else if(!close_tool || close_tool.tool_behaviour != required_tool_type) + if(!close_tool || close_tool.tool_behaviour != required_tool_type) patient.balloon_alert(user, "need a [is_robotic ? "screwdriver": "cautery"] in your inactive hand to stop the surgery!") return @@ -153,11 +145,11 @@ REMOVE_TRAIT(patient, TRAIT_ALLOWED_HONORBOUND_ATTACK, ELEMENT_TRAIT(type)) user.visible_message( - span_notice("[user] closes [patient]'s [parse_zone(selected_zone)] with [close_tool] and removes [parent]."), - span_notice("You close [patient]'s [parse_zone(selected_zone)] with [close_tool] and remove [parent]."), + span_notice("[user] closes [patient]'s [patient.parse_zone_with_bodypart(selected_zone)] with [close_tool] and removes [parent]."), + span_notice("You close [patient]'s [patient.parse_zone_with_bodypart(selected_zone)] with [close_tool] and remove [parent]."), ) - patient.balloon_alert(user, "closed up [parse_zone(selected_zone)]") + patient.balloon_alert(user, "closed up [patient.parse_zone_with_bodypart(selected_zone)]") qdel(the_surgery) @@ -226,7 +218,7 @@ ) /datum/component/surgery_initiator/ui_data(mob/user) - var/mob/living/surgery_target = surgery_target_ref.resolve() + var/mob/living/surgery_target = surgery_target_ref?.resolve() var/list/surgeries = list() if (!isnull(surgery_target)) @@ -253,10 +245,6 @@ return ..() /datum/component/surgery_initiator/ui_status(mob/user, datum/ui_state/state) - var/obj/item/item_parent = parent - if (user != item_parent.loc) - return UI_CLOSE - var/mob/living/surgery_target = surgery_target_ref?.resolve() if (isnull(surgery_target)) return UI_CLOSE @@ -271,7 +259,8 @@ return FALSE // The item was moved somewhere else - if (!(parent in user)) + var/atom/movable/tool = parent + if (tool.loc != user) return FALSE // While we were choosing, another surgery was started at the same location @@ -312,7 +301,7 @@ return if (surgery_needs_exposure(surgery, target)) - target.balloon_alert(user, "expose [target.p_their()] [parse_zone(selected_zone)]!") + target.balloon_alert(user, "expose [target.p_their()] [target.parse_zone_with_bodypart(selected_zone)]!") return ui_close() @@ -323,8 +312,8 @@ target.balloon_alert(user, "starting \"[LOWER_TEXT(procedure.name)]\"") user.visible_message( - span_notice("[user] drapes [parent] over [target]'s [parse_zone(selected_zone)] to prepare for surgery."), - span_notice("You drape [parent] over [target]'s [parse_zone(selected_zone)] to prepare for \an [procedure.name]."), + span_notice("[user] drapes [parent] over [target]'s [target.parse_zone_with_bodypart(selected_zone)] to prepare for surgery."), + span_notice("You drape [parent] over [target]'s [target.parse_zone_with_bodypart(selected_zone)] to prepare for \an [procedure.name]."), ) log_combat(user, target, "operated on", null, "(OPERATION TYPE: [procedure.name]) (TARGET AREA: [selected_zone])") diff --git a/code/datums/components/tameable.dm b/code/datums/components/tameable.dm index 43f48005bf89e..0d77688a22e7a 100644 --- a/code/datums/components/tameable.dm +++ b/code/datums/components/tameable.dm @@ -42,7 +42,7 @@ var/inform_tamer = FALSE atom_parent.balloon_alert(attacker, "fed") var/modified_tame_chance = current_tame_chance - if(HAS_TRAIT(attacker, TRAIT_SETTLER)) + if(HAS_TRAIT(attacker, TRAIT_BEAST_EMPATHY)) modified_tame_chance += 50 inform_tamer = TRUE if(unique || !already_friends(attacker)) @@ -71,7 +71,7 @@ if(inform_tamer) source.balloon_alert(tamer, "tamed") - if(HAS_TRAIT(tamer, TRAIT_SETTLER)) + if(HAS_TRAIT(tamer, TRAIT_BEAST_EMPATHY)) INVOKE_ASYNC(src, PROC_REF(rename_pet), source, tamer) if(unique) qdel(src) diff --git a/code/datums/components/temporary_body.dm b/code/datums/components/temporary_body.dm index 3da289a6d3462..28a7000a4951d 100644 --- a/code/datums/components/temporary_body.dm +++ b/code/datums/components/temporary_body.dm @@ -10,17 +10,23 @@ var/datum/weakref/old_mind_ref ///The old body we will be put back into when parent is being deleted. var/datum/weakref/old_body_ref + /// Returns the mind if the parent dies by any means + var/delete_on_death = FALSE -/datum/component/temporary_body/Initialize(datum/mind/old_mind, mob/living/old_body) +/datum/component/temporary_body/Initialize(datum/mind/old_mind, mob/living/old_body, delete_on_death = FALSE) if(!isliving(parent) || !isliving(old_body)) return COMPONENT_INCOMPATIBLE ADD_TRAIT(old_body, TRAIT_MIND_TEMPORARILY_GONE, REF(src)) src.old_mind_ref = WEAKREF(old_mind) src.old_body_ref = WEAKREF(old_body) + src.delete_on_death = delete_on_death /datum/component/temporary_body/RegisterWithParent() RegisterSignal(parent, COMSIG_QDELETING, PROC_REF(on_parent_destroy)) + if(delete_on_death) + RegisterSignal(parent, COMSIG_LIVING_DEATH, PROC_REF(on_parent_destroy)) + /datum/component/temporary_body/UnregisterFromParent() UnregisterSignal(parent, COMSIG_QDELETING) diff --git a/code/datums/components/throwbonus_on_windup.dm b/code/datums/components/throwbonus_on_windup.dm new file mode 100644 index 0000000000000..ed505d69697de --- /dev/null +++ b/code/datums/components/throwbonus_on_windup.dm @@ -0,0 +1,172 @@ +/datum/component/throwbonus_on_windup + ///the maximum windup bonus + var/maximum_bonus = 20 + ///additional behavior if we exceed the maximum bonus + var/datum/callback/pass_maximum_callback + ///the player currently winding up their throw + var/datum/weakref/holder + ///the current bonus we are at + var/throwforce_bonus = 0 + ///the bar relaying feedback to the player + var/obj/effect/overlay/windup_bar/our_bar + ///any additional behavior we should look for before applying the bonus + var/datum/callback/apply_bonus_callback + ///sound we play after successfully damaging the enemy with a bonus + var/sound_on_success + ///effect we play after successfully damaging the enemy with a bonus + var/effect_on_success + ///how fast we increase the wind up counter on process + var/windup_increment_speed + ///text we display when we start winding up + var/throw_text + +/datum/component/throwbonus_on_windup/Initialize(maximum_bonus = 20, windup_increment_speed = 1, pass_maximum_callback, apply_bonus_callback, sound_on_success, effect_on_success, throw_text) + . = ..() + if(!isitem(parent)) + return COMPONENT_INCOMPATIBLE + + src.maximum_bonus = maximum_bonus + src.pass_maximum_callback = pass_maximum_callback + src.apply_bonus_callback = apply_bonus_callback + src.sound_on_success = sound_on_success + src.effect_on_success = effect_on_success + src.windup_increment_speed = windup_increment_speed + src.throw_text = throw_text + +/datum/component/throwbonus_on_windup/proc/on_equip(datum/source, mob/living/equipper, slot) + SIGNAL_HANDLER + + if(!(slot & ITEM_SLOT_HANDS) || holder?.resolve()) + return + holder = WEAKREF(equipper) + RegisterSignal(equipper, COMSIG_LIVING_THROW_MODE_TOGGLE, PROC_REF(throw_change)) + RegisterSignal(equipper, COMSIG_MOB_SWAP_HANDS, PROC_REF(on_hands_swap)) + if(equipper.throw_mode) + start_windup() + +/datum/component/throwbonus_on_windup/proc/start_windup() + + throwforce_bonus = initial(throwforce_bonus) + var/mob/living/our_holder = holder?.resolve() + if(isnull(holder)) + return + if(throw_text) + to_chat(our_holder, span_warning(throw_text)) + var/list/offset_to_add = get_icon_dimensions(our_holder.icon) + var/x_position = CEILING(offset_to_add["width"] * 0.5, 1) + our_bar = new() + our_bar.maximum_count = maximum_bonus + our_bar.pixel_x = x_position + our_holder.vis_contents += our_bar + START_PROCESSING(SSfastprocess, src) + +/datum/component/throwbonus_on_windup/RegisterWithParent() + RegisterSignal(parent, COMSIG_ITEM_EQUIPPED, PROC_REF(on_equip)) + RegisterSignal(parent, COMSIG_MOVABLE_MOVED, PROC_REF(on_move)) + RegisterSignal(parent, COMSIG_MOVABLE_PRE_IMPACT, PROC_REF(on_thrown)) + +/datum/component/throwbonus_on_windup/UnregisterFromParent() + UnregisterSignal(parent, list(COMSIG_ITEM_EQUIPPED, COMSIG_MOVABLE_MOVED, COMSIG_MOVABLE_PRE_IMPACT)) + var/atom/our_holder = holder?.resolve() + if(!isnull(our_holder)) + UnregisterSignal(our_holder, list(COMSIG_LIVING_THROW_MODE_TOGGLE, COMSIG_MOB_SWAP_HANDS)) + +/datum/component/throwbonus_on_windup/Destroy() + STOP_PROCESSING(SSfastprocess, src) + QDEL_NULL(our_bar) + holder = null + return ..() + +/datum/component/throwbonus_on_windup/proc/throw_change(datum/source, throw_mode) + SIGNAL_HANDLER + + if(throw_mode) + start_windup() + else + end_windup() + +/datum/component/throwbonus_on_windup/proc/on_hands_swap(mob/living/source) + SIGNAL_HANDLER + + if(source.get_active_held_item() != parent) + end_windup() + return + + if(source.throw_mode) + start_windup() + +/datum/component/throwbonus_on_windup/process(seconds_per_tick) + if(throwforce_bonus > maximum_bonus) + var/mob/living/our_holder = holder?.resolve() + pass_maximum_callback?.Invoke(our_holder) + end_windup() + return PROCESS_KILL + + our_bar.recalculate_position(min(throwforce_bonus, maximum_bonus)) + throwforce_bonus += windup_increment_speed + +/datum/component/throwbonus_on_windup/proc/on_move(obj/item/source, atom/entering_loc) + SIGNAL_HANDLER + end_windup() + var/mob/living/our_holder = holder?.resolve() + if(isnull(our_holder)) + return + holder = null + UnregisterSignal(our_holder, list(COMSIG_LIVING_THROW_MODE_TOGGLE, COMSIG_MOB_SWAP_HANDS)) + +/datum/component/throwbonus_on_windup/proc/end_windup() + QDEL_NULL(our_bar) + STOP_PROCESSING(SSfastprocess, src) + +/datum/component/throwbonus_on_windup/proc/on_thrown(datum/source, atom/hit_atom, datum/thrownthing/throwingdatum) + SIGNAL_HANDLER + + var/damage_to_apply = throwforce_bonus + throwforce_bonus = initial(throwforce_bonus) + if(!isliving(hit_atom)) + return + + if(apply_bonus_callback && !apply_bonus_callback.Invoke(hit_atom, damage_to_apply)) + return + + if(effect_on_success) + new effect_on_success(get_turf(hit_atom)) + if(sound_on_success) + playsound(hit_atom, sound_on_success, 50, TRUE) + + var/mob/living/living_target = hit_atom + living_target.apply_damage(damage_to_apply) + +/obj/effect/overlay/windup_bar + mouse_opacity = MOUSE_OPACITY_TRANSPARENT + anchored = TRUE + vis_flags = VIS_INHERIT_DIR | VIS_INHERIT_PLANE + icon = 'icons/effects/effects.dmi' + icon_state = "windup_bar" + layer = ABOVE_ALL_MOB_LAYER + ///the maximum windup bonus + var/maximum_count = INFINITY + ///the current count we are at + var/current_count = 0 + +/obj/effect/overlay/windup_bar/proc/recalculate_position(input_count) + current_count = input_count + update_appearance(UPDATE_OVERLAYS) + +/obj/effect/overlay/windup_bar/update_overlays() + . = ..() + var/static/list/bar_positions = list(0, 2, 4, 6, 8) + var/current_percentage = current_count / maximum_count + var/bars_to_add = CEILING(length(bar_positions) * current_percentage, 1) + for(var/curr_number in 1 to bars_to_add) + var/bar_color + switch(curr_number) + if(1 to 2) + bar_color = "windup_red" + if(2 to 4) + bar_color = "windup_green" + if(4 to 5) + bar_color = "windup_purple" + var/mutable_appearance/bar_overlay = mutable_appearance(icon = icon, icon_state = bar_color, layer = ABOVE_HUD_PLANE) + bar_overlay.pixel_y = bar_positions[curr_number] + . += bar_overlay diff --git a/code/datums/components/toggle_suit.dm b/code/datums/components/toggle_suit.dm index c4a378a16de27..022fc37c07a26 100644 --- a/code/datums/components/toggle_suit.dm +++ b/code/datums/components/toggle_suit.dm @@ -15,6 +15,7 @@ return COMPONENT_INCOMPATIBLE var/atom/atom_parent = parent + atom_parent.flags_1 |= HAS_CONTEXTUAL_SCREENTIPS_1 src.toggle_noun = toggle_noun src.base_icon_state = atom_parent.base_icon_state || atom_parent.icon_state @@ -22,9 +23,10 @@ /datum/component/toggle_icon/RegisterWithParent() RegisterSignal(parent, COMSIG_CLICK_ALT, PROC_REF(on_click_alt)) RegisterSignal(parent, COMSIG_ATOM_EXAMINE, PROC_REF(on_examine)) + RegisterSignal(parent, COMSIG_ATOM_REQUESTING_CONTEXT_FROM_ITEM, PROC_REF(on_adding_context)) /datum/component/toggle_icon/UnregisterFromParent() - UnregisterSignal(parent, list(COMSIG_CLICK_ALT, COMSIG_ATOM_EXAMINE)) + UnregisterSignal(parent, list(COMSIG_CLICK_ALT, COMSIG_ATOM_EXAMINE, COMSIG_ATOM_REQUESTING_CONTEXT_FROM_ITEM)) /* * Signal proc for COMSIG_CLICK_ALT. @@ -34,24 +36,15 @@ * source - the atom being clicked on * user - the mob doing the click */ -/datum/component/toggle_icon/proc/on_click_alt(atom/source, mob/user) +/datum/component/toggle_icon/proc/on_click_alt(atom/source, mob/living/living_user) SIGNAL_HANDLER - if(!isliving(user)) + if(!isliving(living_user) || !living_user.can_perform_action(source)) return - var/mob/living/living_user = user - - if(!living_user.Adjacent(source)) - return - - if(living_user.incapacitated()) - source.balloon_alert(user, "you're incapacitated!") - return CLICK_ACTION_BLOCKING - if(living_user.usable_hands <= 0) - source.balloon_alert(user, "you don't have hands!") - return CLICK_ACTION_BLOCKING + source.balloon_alert(living_user, "you don't have hands!") + return do_icon_toggle(source, living_user) return CLICK_ACTION_SUCCESS @@ -69,6 +62,21 @@ examine_list += span_notice("Alt-click on [source] to toggle the [toggle_noun].") +/* + * Signal proc for COMSIG_ATOM_REQUESTING_CONTEXT_FROM_ITEM. + * Adds usage context for toggling the parent open or closed. + * + * source - the atom context is requested from (parent) + * context - the list of usage contexts set + * held_item - the item held by the requesting mob + * user - the mob requesting context + */ +/datum/component/toggle_icon/proc/on_adding_context(atom/source, list/context, obj/item/held_item, mob/user) + SIGNAL_HANDLER + + context[SCREENTIP_CONTEXT_ALT_LMB] = "Toggle [toggle_noun]" + return CONTEXTUAL_SCREENTIP_SET + /* * Actually do the toggle of the icon. * Swaps the icon from [base_icon_state] to [base_icon_state]_t. diff --git a/code/datums/components/trapdoor.dm b/code/datums/components/trapdoor.dm index bc4d247943376..32b72c48853e5 100644 --- a/code/datums/components/trapdoor.dm +++ b/code/datums/components/trapdoor.dm @@ -349,26 +349,23 @@ . = ..() AddElement(/datum/element/openspace_item_click_handler) -/obj/item/trapdoor_kit/handle_openspace_click(turf/target, mob/user, proximity_flag, click_parameters) - afterattack(target, user, proximity_flag, click_parameters) +/obj/item/trapdoor_kit/handle_openspace_click(turf/target, mob/user, list/modifiers) + interact_with_atom(target, user, modifiers) -/obj/item/trapdoor_kit/afterattack(atom/target, mob/user, proximity_flag) - . = ..() - if(!proximity_flag) - return - var/turf/target_turf = get_turf(target) +/obj/item/trapdoor_kit/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + var/turf/target_turf = get_turf(interacting_with) if(!isopenspaceturf(target_turf)) - return + return NONE in_use = TRUE balloon_alert(user, "constructing trapdoor") - if(!do_after(user, 5 SECONDS, target = target)) + if(!do_after(user, 5 SECONDS, interacting_with)) in_use = FALSE - return + return ITEM_INTERACT_BLOCKING in_use = FALSE if(!isopenspaceturf(target_turf)) // second check to make sure nothing changed during constructions - return + return ITEM_INTERACT_BLOCKING var/turf/new_turf = target_turf.place_on_top(/turf/open/floor/plating, flags = CHANGETURF_INHERIT_AIR) new_turf.AddComponent(/datum/component/trapdoor, starts_open = FALSE, conspicuous = TRUE) balloon_alert(user, "trapdoor constructed") qdel(src) - return + return ITEM_INTERACT_SUCCESS diff --git a/code/datums/components/udder.dm b/code/datums/components/udder.dm index cd87ff44c1782..a659efbc50411 100644 --- a/code/datums/components/udder.dm +++ b/code/datums/components/udder.dm @@ -204,3 +204,16 @@ reagents.add_reagent(/datum/reagent/medicine/salglu_solution, rand(2,5)) if(on_generate_callback) on_generate_callback.Invoke(reagents.total_volume, reagents.maximum_volume) + +/obj/item/udder/raptor + name = "bird udder" + +/obj/item/udder/raptor/generate() + if(!prob(production_probability)) + return FALSE + var/happiness_percentage = udder_mob.ai_controller?.blackboard[BB_BASIC_HAPPINESS] + if(prob(happiness_percentage)) + reagents.add_reagent(/datum/reagent/consumable/cream, 5, added_purity = 1) + var/minimum_bound = happiness_percentage > 0.6 ? 10 : 5 + var/upper_bound = minimum_bound + 5 + reagents.add_reagent(reagent_produced_typepath, rand(minimum_bound, upper_bound), added_purity = 1) diff --git a/code/datums/components/uplink.dm b/code/datums/components/uplink.dm index 163de4867d575..d62414a862b24 100644 --- a/code/datums/components/uplink.dm +++ b/code/datums/components/uplink.dm @@ -266,7 +266,7 @@ /datum/component/uplink/ui_assets(mob/user) return list( - get_asset_datum(/datum/asset/json/uplink) + get_asset_datum(/datum/asset/json/uplink), ) /datum/component/uplink/ui_act(action, params, datum/tgui/ui, datum/ui_state/state) diff --git a/code/datums/datum.dm b/code/datums/datum.dm index 77d787eb85ba0..b7e11010e8fe5 100644 --- a/code/datums/datum.dm +++ b/code/datums/datum.dm @@ -206,7 +206,7 @@ ///Serializes into JSON. Does not encode type. /datum/proc/serialize_json(list/options) - . = serialize_list(options) + . = serialize_list(options, list()) if(!islist(.)) . = null else @@ -328,7 +328,7 @@ ASSERT(isatom(src) || isimage(src)) var/atom/atom_cast = src // filters only work with images or atoms. atom_cast.filters = null - filter_data = sortTim(filter_data, GLOBAL_PROC_REF(cmp_filter_data_priority), TRUE) + sortTim(filter_data, GLOBAL_PROC_REF(cmp_filter_data_priority), TRUE) for(var/filter_raw in filter_data) var/list/data = filter_data[filter_raw] var/list/arguments = data.Copy() diff --git a/code/datums/diseases/_MobProcs.dm b/code/datums/diseases/_MobProcs.dm index 62ee5e457cabd..337aee46c0379 100644 --- a/code/datums/diseases/_MobProcs.dm +++ b/code/datums/diseases/_MobProcs.dm @@ -94,24 +94,19 @@ if(passed) disease.try_infect(src) -/mob/living/proc/AirborneContractDisease(datum/disease/disease, force_spread) - if(HAS_TRAIT(src, TRAIT_VIRUS_RESISTANCE) && prob(75)) - return - - if(((disease.spread_flags & DISEASE_SPREAD_AIRBORNE) || force_spread) && prob(min((50*disease.spreading_modifier - 1), 50))) - ForceContractDisease(disease) - -/mob/living/carbon/AirborneContractDisease(datum/disease/disease, force_spread) - if(internal) - return - if(HAS_TRAIT(src, TRAIT_NOBREATH)) - return - +/** + * Handle being contracted a disease via airborne transmission + * + * * disease - the disease datum that's infecting us + */ +/mob/living/proc/contract_airborne_disease(datum/disease/disease) + if(!can_be_spread_airborne_disease()) + return FALSE + if(!prob(min((50 * disease.spreading_modifier - 1), 50))) + return FALSE if(!disease.has_required_infectious_organ(src, ORGAN_SLOT_LUNGS)) - return - - ..() - + return FALSE + return ForceContractDisease(disease) //Proc to use when you 100% want to try to infect someone (ignoreing protective clothing and such), as long as they aren't immune /mob/living/proc/ForceContractDisease(datum/disease/D, make_copy = TRUE, del_on_fail = FALSE) @@ -136,8 +131,56 @@ return ..() -/mob/living/proc/CanSpreadAirborneDisease() - return !is_mouth_covered() +/// Checks if this mob can currently spread air based diseases. +/// Nondeterministic +/mob/living/proc/can_spread_airborne_diseases() + SHOULD_CALL_PARENT(TRUE) + if(HAS_TRAIT(src, TRAIT_NOBREATH)) + return FALSE + if(losebreath >= 1) + return FALSE + // I don't know how you are spreading via air with no head but sure + if(!get_bodypart(BODY_ZONE_HEAD)) + return TRUE + // Check both hat and mask for bio protection + // Anything above 50 individually is a shoe-in, and stacking two items at 25 is also a shoe-in + var/obj/item/clothing/hat = is_mouth_covered(ITEM_SLOT_HEAD) + var/obj/item/clothing/mask = is_mouth_covered(ITEM_SLOT_MASK) + var/total_prot = 2 * (hat?.get_armor_rating(BIO) + mask?.get_armor_rating(BIO)) + if(prob(total_prot)) + return FALSE + + return TRUE + +/mob/living/carbon/can_spread_airborne_diseases() + if(internal || external) + return FALSE + + return ..() + +/// Checks if this mob can currently be infected by air based diseases +/// Nondeterministic +/mob/living/proc/can_be_spread_airborne_disease() + if(HAS_TRAIT(src, TRAIT_NOBREATH)) + return FALSE + if(losebreath >= 1) + return FALSE + // Spaceacillin for infection resistance + if(HAS_TRAIT(src, TRAIT_VIRUS_RESISTANCE) && prob(75)) + return FALSE + // Bio check for head AND mask + // Meaning if we're masked up and wearing a dome, we are very likely never getting sick + var/obj/item/clothing/hat = is_mouth_covered(ITEM_SLOT_HEAD) + var/obj/item/clothing/mask = is_mouth_covered(ITEM_SLOT_MASK) + var/total_prot = (hat?.get_armor_rating(BIO) + mask?.get_armor_rating(BIO)) + if(prob(total_prot)) + return FALSE + + return TRUE + +/mob/living/carbon/can_be_spread_airborne_disease() + // Using an isolated air supply is also effective + if((internal || external) && prob(75)) + return FALSE -/mob/living/carbon/CanSpreadAirborneDisease() - return !((head && (head.flags_cover & HEADCOVERSMOUTH) && (head.get_armor_rating(BIO) >= 25)) || (wear_mask && (wear_mask.flags_cover & MASKCOVERSMOUTH) && (wear_mask.get_armor_rating(BIO) >= 25))) + return ..() diff --git a/code/datums/diseases/_disease.dm b/code/datums/diseases/_disease.dm index bc60049e73ea6..9560820f2f048 100644 --- a/code/datums/diseases/_disease.dm +++ b/code/datums/diseases/_disease.dm @@ -70,10 +70,33 @@ D.after_add() infectee.med_hud_set_status() + register_disease_signals() var/turf/source_turf = get_turf(infectee) log_virus("[key_name(infectee)] was infected by virus: [src.admin_details()] at [loc_name(source_turf)]") +/// Updates the spread flags set, ensuring signals are updated as necessary +/datum/disease/proc/update_spread_flags(new_flags) + if(spread_flags == new_flags) + return + + spread_flags = new_flags + unregister_disease_signals() + register_disease_signals() + +/// Register any relevant signals for the disease +/datum/disease/proc/register_disease_signals() + if(isnull(affected_mob)) + return + if(spread_flags & DISEASE_SPREAD_AIRBORNE) + RegisterSignal(affected_mob, COMSIG_CARBON_PRE_BREATHE, PROC_REF(on_breath)) + +/// Unregister any relevant signals for the disease +/datum/disease/proc/unregister_disease_signals() + if(isnull(affected_mob)) + return + UnregisterSignal(affected_mob, COMSIG_CARBON_PRE_BREATHE) + ///Proc to process the disease and decide on whether to advance, cure or make the symptoms appear. Returns a boolean on whether to continue acting on the symptoms or not. /datum/disease/proc/stage_act(seconds_per_tick, times_fired) var/slowdown = HAS_TRAIT(affected_mob, TRAIT_VIRUS_RESISTANCE) ? 0.5 : 1 // spaceacillin slows stage speed by 50% @@ -140,17 +163,17 @@ if(affected_mob.mob_mood) // this and most other modifiers below a shameless rip from sleeping healing buffs, but feeling good helps make it go away quicker switch(affected_mob.mob_mood.sanity_level) if(SANITY_LEVEL_GREAT) - recovery_prob += 0.2 + recovery_prob += 0.4 if(SANITY_LEVEL_NEUTRAL) - recovery_prob += 0.1 + recovery_prob += 0.2 if(SANITY_LEVEL_DISTURBED) recovery_prob += 0 if(SANITY_LEVEL_UNSTABLE) recovery_prob += 0 if(SANITY_LEVEL_CRAZY) - recovery_prob += -0.1 - if(SANITY_LEVEL_INSANE) recovery_prob += -0.2 + if(SANITY_LEVEL_INSANE) + recovery_prob += -0.4 if((HAS_TRAIT(affected_mob, TRAIT_NOHUNGER) || !(affected_mob.satiety < 0 || affected_mob.nutrition < NUTRITION_LEVEL_STARVING)) && HAS_TRAIT(affected_mob, TRAIT_KNOCKEDOUT)) //resting starved won't help, but resting helps var/turf/rest_turf = get_turf(affected_mob) @@ -219,41 +242,41 @@ if(!. || (needs_all_cures && . < cures.len)) return FALSE -//Airborne spreading -/datum/disease/proc/spread(force_spread = 0) - if(!affected_mob) - return - +/** + * Handles performing a spread-via-air + * + * Checks for stuff like "is our mouth covered" for you + * + * * spread_range - How far the disease can spread + * * force_spread - If TRUE, the disease will spread regardless of the spread_flags + * * require_facing - If TRUE, the disease will only spread if the source mob is facing the target mob + */ +/datum/disease/proc/airborne_spread(spread_range = 2, force_spread = TRUE, require_facing = FALSE) + if(isnull(affected_mob)) + return FALSE if(!(spread_flags & DISEASE_SPREAD_AIRBORNE) && !force_spread) - return - - if(affected_mob.internal) //if you keep your internals on, no airborne spread at least - return - - if(HAS_TRAIT(affected_mob, TRAIT_NOBREATH)) //also if you don't breathe - return - + return FALSE + if(affected_mob.can_spread_airborne_diseases()) + return FALSE if(!has_required_infectious_organ(affected_mob, ORGAN_SLOT_LUNGS)) //also if you lack lungs - return - - if(!affected_mob.CanSpreadAirborneDisease()) //should probably check this huh - return - - if(HAS_TRAIT(affected_mob, TRAIT_VIRUS_RESISTANCE) || (affected_mob.satiety > 0 && prob(affected_mob.satiety/2))) //being full or on spaceacillin makes you less likely to spread a virus - return - - var/spread_range = 2 - - if(force_spread) - spread_range = force_spread - - var/turf/T = affected_mob.loc - if(istype(T)) - for(var/mob/living/carbon/C in oview(spread_range, affected_mob)) - var/turf/V = get_turf(C) - if(disease_air_spread_walk(T, V)) - C.AirborneContractDisease(src, force_spread) + return FALSE + if(HAS_TRAIT(affected_mob, TRAIT_VIRUS_RESISTANCE) || (affected_mob.satiety > 0 && prob(affected_mob.satiety / 2))) //being full or on spaceacillin makes you less likely to spread a virus + return FALSE + var/turf/mob_loc = affected_mob.loc + if(!istype(mob_loc)) + return FALSE + for(var/mob/living/carbon/to_infect in oview(spread_range, affected_mob)) + var/turf/infect_loc = to_infect.loc + if(!istype(infect_loc)) + continue + if(require_facing && !is_source_facing_target(affected_mob, to_infect)) + continue + if(!disease_air_spread_walk(mob_loc, infect_loc)) + continue + to_infect.contract_airborne_disease(src) + return TRUE +/// Helper for checking if there is an air path between two turfs /proc/disease_air_spread_walk(turf/start, turf/end) if(!start || !end) return FALSE @@ -265,7 +288,6 @@ return FALSE end = Temp - /datum/disease/proc/cure(add_resistance = TRUE) if(severity == DISEASE_SEVERITY_UNCURABLE) //aw man :( return @@ -307,6 +329,7 @@ return "[type]" /datum/disease/proc/remove_disease() + unregister_disease_signals() LAZYREMOVE(affected_mob.diseases, src) //remove the datum from the list affected_mob.med_hud_set_status() affected_mob = null @@ -346,6 +369,13 @@ return TRUE +/// Handles spreading via air when our mob breathes +/datum/disease/proc/on_breath(datum/source, seconds_per_tick, ...) + SIGNAL_HANDLER + + if(SPT_PROB(infectivity * 4, seconds_per_tick)) + airborne_spread() + //Use this to compare severities /proc/get_disease_severity_value(severity) switch(severity) diff --git a/code/datums/diseases/advance/advance.dm b/code/datums/diseases/advance/advance.dm index 93edea10b41c6..8c8e8e02169b4 100644 --- a/code/datums/diseases/advance/advance.dm +++ b/code/datums/diseases/advance/advance.dm @@ -266,12 +266,13 @@ properties["severity"] = round((properties["severity"] / 2), 1) properties["severity"] *= (symptoms.len / VIRUS_SYMPTOM_LIMIT) //fewer symptoms, less severity properties["severity"] = clamp(properties["severity"], 1, 7) + properties["capacity"] = get_symptom_weights() // Assign the properties that are in the list. /datum/disease/advance/proc/assign_properties() if(properties?.len) - if(properties["stealth"] >= 2) + if(properties["stealth"] >= properties["severity"] && properties["severity"] > 0) visibility_flags |= HIDDEN_SCANNER else visibility_flags &= ~HIDDEN_SCANNER @@ -287,7 +288,7 @@ spreading_modifier = max(CEILING(0.4 * properties["transmittable"], 1), 1) cure_chance = clamp(7.5 - (0.5 * properties["resistance"]), 1, 10) // can be between 1 and 10 - stage_prob = max(0.5 * properties["stage_rate"], 1) + stage_prob = max(0.3 * properties["stage_rate"], 1) set_severity(round(properties["severity"]), 1) generate_cure(properties) else @@ -298,22 +299,22 @@ /datum/disease/advance/proc/set_spread(spread_id) switch(spread_id) if(DISEASE_SPREAD_NON_CONTAGIOUS) - spread_flags = DISEASE_SPREAD_NON_CONTAGIOUS + update_spread_flags(DISEASE_SPREAD_NON_CONTAGIOUS) spread_text = "None" if(DISEASE_SPREAD_SPECIAL) - spread_flags = DISEASE_SPREAD_SPECIAL + update_spread_flags(DISEASE_SPREAD_SPECIAL) spread_text = "None" if(DISEASE_SPREAD_BLOOD) - spread_flags = DISEASE_SPREAD_BLOOD + update_spread_flags(DISEASE_SPREAD_BLOOD) spread_text = "Blood" if(DISEASE_SPREAD_CONTACT_FLUIDS) - spread_flags = DISEASE_SPREAD_BLOOD | DISEASE_SPREAD_CONTACT_FLUIDS + update_spread_flags(DISEASE_SPREAD_BLOOD | DISEASE_SPREAD_CONTACT_FLUIDS) spread_text = "Fluids" if(DISEASE_SPREAD_CONTACT_SKIN) - spread_flags = DISEASE_SPREAD_BLOOD | DISEASE_SPREAD_CONTACT_FLUIDS | DISEASE_SPREAD_CONTACT_SKIN + update_spread_flags(DISEASE_SPREAD_BLOOD | DISEASE_SPREAD_CONTACT_FLUIDS | DISEASE_SPREAD_CONTACT_SKIN) spread_text = "Skin contact" if(DISEASE_SPREAD_AIRBORNE) - spread_flags = DISEASE_SPREAD_BLOOD | DISEASE_SPREAD_CONTACT_FLUIDS | DISEASE_SPREAD_CONTACT_SKIN | DISEASE_SPREAD_AIRBORNE + update_spread_flags(DISEASE_SPREAD_BLOOD | DISEASE_SPREAD_CONTACT_FLUIDS | DISEASE_SPREAD_CONTACT_SKIN | DISEASE_SPREAD_AIRBORNE) spread_text = "Respiration" /datum/disease/advance/proc/set_severity(level_sev) @@ -341,7 +342,7 @@ // Will generate a random cure, the more resistance the symptoms have, the harder the cure. /datum/disease/advance/proc/generate_cure() if(properties?.len) - var/res = clamp(properties["resistance"] - (symptoms.len / 2), 1, advance_cures.len) + var/res = clamp(properties["resistance"] - (symptoms.len * 0.5), 1, advance_cures.len) if(res == oldres) return cures = list(pick(advance_cures[res])) @@ -402,11 +403,9 @@ // Add a symptom, if it is over the limit we take a random symptom away and add the new one. /datum/disease/advance/proc/AddSymptom(datum/symptom/S) - if(HasSymptom(S)) return - - if(symptoms.len >= VIRUS_SYMPTOM_LIMIT) + while(get_symptom_weights() + S.weight > VIRUS_SYMPTOM_LIMIT) RemoveSymptom(pick(symptoms)) symptoms += S S.OnAdd(src) @@ -423,6 +422,12 @@ S.name += " (neutered)" S.OnRemove(src) +/// How much of the symptom capacity is currently being used? +/datum/disease/advance/proc/get_symptom_weights() + . = 0 + for(var/datum/symptom/symptom as anything in symptoms) + . += symptom.weight + /* Static Procs diff --git a/code/datums/diseases/advance/floor_diseases/carpellosis.dm b/code/datums/diseases/advance/floor_diseases/carpellosis.dm index b8630bed29f88..a0482215494c4 100644 --- a/code/datums/diseases/advance/floor_diseases/carpellosis.dm +++ b/code/datums/diseases/advance/floor_diseases/carpellosis.dm @@ -6,7 +6,7 @@ desc = "You have an angry space carp inside." form = "Parasite" agent = "Carp Ella" - cures = list(/datum/reagent/carpet) + cures = list(/datum/reagent/chlorine) viable_mobtypes = list(/mob/living/carbon/human) spread_flags = DISEASE_SPREAD_NON_CONTAGIOUS severity = DISEASE_SEVERITY_MEDIUM diff --git a/code/datums/diseases/advance/floor_diseases/gastritium.dm b/code/datums/diseases/advance/floor_diseases/gastritium.dm index 4a0f3844ca91c..318810eabd5a2 100644 --- a/code/datums/diseases/advance/floor_diseases/gastritium.dm +++ b/code/datums/diseases/advance/floor_diseases/gastritium.dm @@ -4,7 +4,7 @@ desc = "If left untreated, may manifest in severe Tritium heartburn." form = "Infection" agent = "Atmobacter Polyri" - cures = list(/datum/reagent/firefighting_foam) + cures = list(/datum/reagent/consumable/milk) viable_mobtypes = list(/mob/living/carbon/human) spread_flags = DISEASE_SPREAD_NON_CONTAGIOUS severity = DISEASE_SEVERITY_HARMFUL diff --git a/code/datums/diseases/advance/floor_diseases/nebula_nausea.dm b/code/datums/diseases/advance/floor_diseases/nebula_nausea.dm index 1186fb68582e8..4961d1afeef82 100644 --- a/code/datums/diseases/advance/floor_diseases/nebula_nausea.dm +++ b/code/datums/diseases/advance/floor_diseases/nebula_nausea.dm @@ -4,7 +4,7 @@ desc = "You can't contain the colorful beauty of the cosmos inside." form = "Condition" agent = "Stars" - cures = list(/datum/reagent/bluespace) + cures = list(/datum/reagent/space_cleaner) viable_mobtypes = list(/mob/living/carbon/human) spread_flags = DISEASE_SPREAD_NON_CONTAGIOUS severity = DISEASE_SEVERITY_MEDIUM diff --git a/code/datums/diseases/advance/symptoms/cough.dm b/code/datums/diseases/advance/symptoms/cough.dm index 7368e99acc814..6b46667741c61 100644 --- a/code/datums/diseases/advance/symptoms/cough.dm +++ b/code/datums/diseases/advance/symptoms/cough.dm @@ -10,6 +10,7 @@ name = "Cough" desc = "The virus irritates the throat of the host, causing occasional coughing. Each cough will try to infect bystanders who are within 1 tile of the host with the virus." illness = "Jest Infection" + weight = 2 stealth = -1 resistance = 3 stage_speed = 1 @@ -67,8 +68,7 @@ off_cooldown_coughed = TRUE else off_cooldown_coughed = FALSE - if(affected_mob.CanSpreadAirborneDisease()) - active_disease.spread(spread_range) + active_disease.airborne_spread(spread_range) if(power >= 1.5) var/obj/item/held_object = affected_mob.get_active_held_item() if(held_object && held_object.w_class == WEIGHT_CLASS_TINY) diff --git a/code/datums/diseases/advance/symptoms/fire.dm b/code/datums/diseases/advance/symptoms/fire.dm index 0708841fca06b..3ec095feb5c7f 100644 --- a/code/datums/diseases/advance/symptoms/fire.dm +++ b/code/datums/diseases/advance/symptoms/fire.dm @@ -65,7 +65,7 @@ warn_mob(living_mob) if(infective) - A.spread(advanced_stage ? 4 : 2) + A.airborne_spread(advanced_stage ? 4 : 2) /datum/symptom/fire/proc/warn_mob(mob/living/living_mob) if(prob(33.33)) diff --git a/code/datums/diseases/advance/symptoms/narcolepsy.dm b/code/datums/diseases/advance/symptoms/narcolepsy.dm index cbf6462f2c484..a137e8acd91bc 100644 --- a/code/datums/diseases/advance/symptoms/narcolepsy.dm +++ b/code/datums/diseases/advance/symptoms/narcolepsy.dm @@ -64,8 +64,7 @@ if(yawning) M.emote("yawn") - if(M.CanSpreadAirborneDisease()) - A.spread(6) + A.airborne_spread(6) if(5) if(prob(50)) @@ -75,5 +74,4 @@ if(yawning) M.emote("yawn") - if(M.CanSpreadAirborneDisease()) - A.spread(6) + A.airborne_spread(6) diff --git a/code/datums/diseases/advance/symptoms/sneeze.dm b/code/datums/diseases/advance/symptoms/sneeze.dm index 14a087da1238f..0e54bfad385e0 100644 --- a/code/datums/diseases/advance/symptoms/sneeze.dm +++ b/code/datums/diseases/advance/symptoms/sneeze.dm @@ -10,6 +10,7 @@ name = "Sneezing" desc = "The virus causes irritation of the nasal cavity, making the host sneeze occasionally. Sneezes from this symptom will spread the virus in a 4 meter cone in front of the host." illness = "Bard Flu" + weight = 2 stealth = -2 resistance = 3 stage_speed = 0 @@ -52,18 +53,14 @@ if(!suppress_warning) affected_mob.emote("sniff") else - if(affected_mob.CanSpreadAirborneDisease()) //don't spread germs if they covered their mouth - for(var/mob/living/exposed_mob in oview(spread_range, affected_mob)) - if(is_source_facing_target(affected_mob, exposed_mob) && disease_air_spread_walk(get_turf(affected_mob), get_turf(exposed_mob))) - exposed_mob.AirborneContractDisease(active_disease, TRUE) + if(affected_mob.can_spread_airborne_diseases()) //don't spread germs if they covered their mouth + affected_mob.infectious_sneeze(active_disease, TRUE, range = spread_range) if(cartoon_sneezing) //Yeah, this can fling you around even if you have a space suit helmet on. It's, uh, bluespace snot, yeah. - affected_mob.emote("sneeze") to_chat(affected_mob, span_userdanger("You are launched violently backwards by an all-mighty sneeze!")) var/sneeze_distance = rand(2,4) //twice as far as a normal baseball bat strike will fling you var/turf/target = get_ranged_target_turf(affected_mob, REVERSE_DIR(affected_mob.dir), sneeze_distance) affected_mob.throw_at(target, sneeze_distance, rand(1,4)) //with the wounds update, sneezing at 7 speed was causing peoples bones to spontaneously explode, turning cartoonish sneezing into a nightmarishly lethal GBS 2.0 outbreak else if(COOLDOWN_FINISHED(src, sneeze_cooldown) || !COOLDOWN_FINISHED(src, sneeze_cooldown) && prob(60) && !off_cooldown_sneezed) - affected_mob.emote("sneeze") COOLDOWN_START(src, sneeze_cooldown, 5 SECONDS) if(!off_cooldown_sneezed && !COOLDOWN_FINISHED(src, sneeze_cooldown)) off_cooldown_sneezed = TRUE diff --git a/code/datums/diseases/advance/symptoms/symptoms.dm b/code/datums/diseases/advance/symptoms/symptoms.dm index 28ba45f8de4e0..5a4331b3c6183 100644 --- a/code/datums/diseases/advance/symptoms/symptoms.dm +++ b/code/datums/diseases/advance/symptoms/symptoms.dm @@ -39,6 +39,8 @@ var/naturally_occuring = TRUE ///If the symptom requires an organ for the effects to function, robotic organs are immune to disease unless inorganic biology symptom is present var/required_organ + /// How much space does this symptom use? + var/weight = 1 /datum/symptom/New() var/list/S = SSdisease.list_symptoms @@ -106,6 +108,7 @@ var/list/data = list() data["name"] = name data["desc"] = desc + data["weight"] = weight data["stealth"] = stealth data["resistance"] = resistance data["stage_speed"] = stage_speed diff --git a/code/datums/diseases/advance/symptoms/voice_change.dm b/code/datums/diseases/advance/symptoms/voice_change.dm index 255c2a3f3a7f5..9654365c49d34 100644 --- a/code/datums/diseases/advance/symptoms/voice_change.dm +++ b/code/datums/diseases/advance/symptoms/voice_change.dm @@ -54,7 +54,7 @@ else if(ishuman(M)) var/mob/living/carbon/human/H = M - H.SetSpecialVoice(H.dna.species.random_name(H.gender)) + H.SetSpecialVoice(H.generate_random_mob_name()) if(scramble_language && !current_language) // Last part prevents rerolling language with small amounts of cure. current_language = pick(subtypesof(/datum/language) - /datum/language/common) H.add_blocked_language(subtypesof(/datum/language) - current_language, LANGUAGE_VOICECHANGE) diff --git a/code/datums/diseases/cold.dm b/code/datums/diseases/cold.dm index f7bf6cf4b18a7..3b361e53c236c 100644 --- a/code/datums/diseases/cold.dm +++ b/code/datums/diseases/cold.dm @@ -6,7 +6,7 @@ cures = list(/datum/reagent/medicine/spaceacillin) agent = "XY-rhinovirus" viable_mobtypes = list(/mob/living/carbon/human) - spreading_modifier = 0.5 + spreading_modifier = 0.1 spread_text = "Airborne" severity = DISEASE_SEVERITY_NONTHREAT required_organ = ORGAN_SLOT_LUNGS @@ -20,7 +20,7 @@ switch(stage) if(2) if(SPT_PROB(0.5, seconds_per_tick)) - affected_mob.emote("sneeze") + affected_mob.infectious_sneeze(src, TRUE) if(SPT_PROB(0.5, seconds_per_tick)) affected_mob.emote("cough") if(SPT_PROB(0.5, seconds_per_tick)) @@ -33,7 +33,7 @@ return FALSE if(3) if(SPT_PROB(0.5, seconds_per_tick)) - affected_mob.emote("sneeze") + affected_mob.infectious_sneeze(src, TRUE) if(SPT_PROB(0.5, seconds_per_tick)) affected_mob.emote("cough") if(SPT_PROB(0.5, seconds_per_tick)) diff --git a/code/datums/diseases/cold9.dm b/code/datums/diseases/cold9.dm index 2e55df23b7ec8..97adebcac7026 100644 --- a/code/datums/diseases/cold9.dm +++ b/code/datums/diseases/cold9.dm @@ -20,7 +20,7 @@ if(2) affected_mob.adjust_bodytemperature(-5 * seconds_per_tick) if(SPT_PROB(0.5, seconds_per_tick)) - affected_mob.emote("sneeze") + affected_mob.infectious_sneeze(src, TRUE) if(SPT_PROB(0.5, seconds_per_tick)) affected_mob.emote("cough") if(SPT_PROB(0.5, seconds_per_tick)) @@ -34,7 +34,7 @@ if(3) affected_mob.adjust_bodytemperature(-10 * seconds_per_tick) if(SPT_PROB(0.5, seconds_per_tick)) - affected_mob.emote("sneeze") + affected_mob.infectious_sneeze(src, TRUE) if(SPT_PROB(0.5, seconds_per_tick)) affected_mob.emote("cough") if(SPT_PROB(0.5, seconds_per_tick)) diff --git a/code/datums/diseases/dna_spread.dm b/code/datums/diseases/dna_spread.dm index 6fd926f60d3df..e649a557443f1 100644 --- a/code/datums/diseases/dna_spread.dm +++ b/code/datums/diseases/dna_spread.dm @@ -40,7 +40,7 @@ switch(stage) if(2, 3) //Pretend to be a cold and give time to spread. if(SPT_PROB(4, seconds_per_tick)) - affected_mob.emote("sneeze") + affected_mob.sneeze() if(SPT_PROB(4, seconds_per_tick)) affected_mob.emote("cough") if(SPT_PROB(0.5, seconds_per_tick)) diff --git a/code/datums/diseases/fake_gbs.dm b/code/datums/diseases/fake_gbs.dm index 655439cdc6cc5..939ab620feff4 100644 --- a/code/datums/diseases/fake_gbs.dm +++ b/code/datums/diseases/fake_gbs.dm @@ -19,7 +19,7 @@ switch(stage) if(2) if(SPT_PROB(0.5, seconds_per_tick)) - affected_mob.emote("sneeze") + affected_mob.sneeze() if(3) if(SPT_PROB(2.5, seconds_per_tick)) affected_mob.emote("cough") diff --git a/code/datums/diseases/flu.dm b/code/datums/diseases/flu.dm index 9412d2a2a2f63..4ad7bb9b92b59 100644 --- a/code/datums/diseases/flu.dm +++ b/code/datums/diseases/flu.dm @@ -7,7 +7,7 @@ cure_chance = 5 agent = "H13N1 flu virion" viable_mobtypes = list(/mob/living/carbon/human) - spreading_modifier = 0.75 + spreading_modifier = 0.1 desc = "If left untreated the subject will feel quite unwell." severity = DISEASE_SEVERITY_MINOR required_organ = ORGAN_SLOT_LUNGS @@ -20,7 +20,7 @@ switch(stage) if(2) if(SPT_PROB(0.5, seconds_per_tick)) - affected_mob.emote("sneeze") + affected_mob.infectious_sneeze(src, TRUE) if(SPT_PROB(0.5, seconds_per_tick)) affected_mob.emote("cough") if(SPT_PROB(0.5, seconds_per_tick)) @@ -38,7 +38,7 @@ if(3) if(SPT_PROB(0.5, seconds_per_tick)) - affected_mob.emote("sneeze") + affected_mob.infectious_sneeze(src, TRUE) if(SPT_PROB(0.5, seconds_per_tick)) affected_mob.emote("cough") if(SPT_PROB(0.5, seconds_per_tick)) diff --git a/code/datums/diseases/fluspanish.dm b/code/datums/diseases/fluspanish.dm index 6919884b2fe30..1fa6b49d457ad 100644 --- a/code/datums/diseases/fluspanish.dm +++ b/code/datums/diseases/fluspanish.dm @@ -7,7 +7,7 @@ cure_chance = 5 agent = "1nqu1s1t10n flu virion" viable_mobtypes = list(/mob/living/carbon/human) - spreading_modifier = 0.75 + spreading_modifier = 0.1 desc = "If left untreated the subject will burn to death for being a heretic." severity = DISEASE_SEVERITY_DANGEROUS required_organ = ORGAN_SLOT_LUNGS @@ -21,7 +21,7 @@ if(2) affected_mob.adjust_bodytemperature(5 * seconds_per_tick) if(SPT_PROB(2.5, seconds_per_tick)) - affected_mob.emote("sneeze") + affected_mob.infectious_sneeze(src, TRUE) if(SPT_PROB(2.5, seconds_per_tick)) affected_mob.emote("cough") if(SPT_PROB(0.5, seconds_per_tick)) @@ -31,7 +31,7 @@ if(3) affected_mob.adjust_bodytemperature(10 * seconds_per_tick) if(SPT_PROB(2.5, seconds_per_tick)) - affected_mob.emote("sneeze") + affected_mob.infectious_sneeze(src, TRUE) if(SPT_PROB(2.5, seconds_per_tick)) affected_mob.emote("cough") if(SPT_PROB(2.5, seconds_per_tick)) diff --git a/code/datums/diseases/transformation.dm b/code/datums/diseases/transformation.dm index 83e7ac0253425..966987828bd54 100644 --- a/code/datums/diseases/transformation.dm +++ b/code/datums/diseases/transformation.dm @@ -62,7 +62,7 @@ if(HAS_TRAIT_FROM(affected_mob, TRAIT_NO_TRANSFORM, REF(src))) return ADD_TRAIT(affected_mob, TRAIT_NO_TRANSFORM, REF(src)) - for(var/obj/item/W in affected_mob.get_equipped_items(include_pockets = TRUE)) + for(var/obj/item/W in affected_mob.get_equipped_items(INCLUDE_POCKETS)) affected_mob.dropItemToGround(W) for(var/obj/item/I in affected_mob.held_items) affected_mob.dropItemToGround(I) @@ -335,7 +335,7 @@ ) stage4 = list(span_danger("You can't feel your arms. It does not bother you anymore."), span_danger("You forgive the clown for hurting you.")) stage5 = list(span_danger("You have become a Gondola.")) - new_form = /mob/living/simple_animal/pet/gondola + new_form = /mob/living/basic/pet/gondola /datum/disease/transformation/gondola/stage_act(seconds_per_tick, times_fired) diff --git a/code/datums/diseases/wizarditis.dm b/code/datums/diseases/wizarditis.dm index fe0502387f9e3..21dce839dc697 100644 --- a/code/datums/diseases/wizarditis.dm +++ b/code/datums/diseases/wizarditis.dm @@ -99,7 +99,7 @@ var/datum/action/cooldown/spell/picked = pick(random_spells) picked.Activate(affected_mob) - affected_mob.emote("sneeze") + affected_mob.sneeze() return /datum/disease/wizarditis/proc/spawn_wizard_clothes(chance = 0) diff --git a/code/datums/dna.dm b/code/datums/dna.dm index 7d69353e02ffc..17cdb20e3c492 100644 --- a/code/datums/dna.dm +++ b/code/datums/dna.dm @@ -13,6 +13,8 @@ GLOBAL_LIST_INIT(identity_block_lengths, list( "[DNA_FACIAL_HAIR_COLOR_BLOCK]" = DNA_BLOCK_SIZE_COLOR, "[DNA_EYE_COLOR_LEFT_BLOCK]" = DNA_BLOCK_SIZE_COLOR, "[DNA_EYE_COLOR_RIGHT_BLOCK]" = DNA_BLOCK_SIZE_COLOR, + "[DNA_HAIR_COLOR_GRADIENT_BLOCK]" = DNA_BLOCK_SIZE_COLOR, + "[DNA_FACIAL_HAIR_COLOR_GRADIENT_BLOCK]" = DNA_BLOCK_SIZE_COLOR, )) /** @@ -77,7 +79,10 @@ GLOBAL_LIST_INIT(total_uf_len_by_block, populate_total_uf_len_by_block()) var/stability = 100 ///Did we take something like mutagen? In that case we cant get our genes scanned to instantly cheese all the powers. var/scrambled = FALSE - + /// Weighted list of nonlethal meltdowns + var/static/list/nonfatal_meltdowns = list() + /// Weighted list of lethal meltdowns + var/static/list/fatal_meltdowns = list() /datum/dna/New(mob/living/new_holder) if(istype(new_holder)) @@ -179,17 +184,20 @@ GLOBAL_LIST_INIT(total_uf_len_by_block, populate_total_uf_len_by_block()) L[DNA_GENDER_BLOCK] = construct_block(G_PLURAL, GENDERS) if(ishuman(holder)) var/mob/living/carbon/human/H = holder - if(!GLOB.hairstyles_list.len) - init_sprite_accessory_subtypes(/datum/sprite_accessory/hair,GLOB.hairstyles_list, GLOB.hairstyles_male_list, GLOB.hairstyles_female_list) - L[DNA_HAIRSTYLE_BLOCK] = construct_block(GLOB.hairstyles_list.Find(H.hairstyle), GLOB.hairstyles_list.len) + if(length(SSaccessories.hairstyles_list) == 0 || length(SSaccessories.facial_hairstyles_list) == 0) + CRASH("SSaccessories lists are empty, this is bad!") + + L[DNA_HAIRSTYLE_BLOCK] = construct_block(SSaccessories.hairstyles_list.Find(H.hairstyle), length(SSaccessories.hairstyles_list)) L[DNA_HAIR_COLOR_BLOCK] = sanitize_hexcolor(H.hair_color, include_crunch = FALSE) - if(!GLOB.facial_hairstyles_list.len) - init_sprite_accessory_subtypes(/datum/sprite_accessory/facial_hair, GLOB.facial_hairstyles_list, GLOB.facial_hairstyles_male_list, GLOB.facial_hairstyles_female_list) - L[DNA_FACIAL_HAIRSTYLE_BLOCK] = construct_block(GLOB.facial_hairstyles_list.Find(H.facial_hairstyle), GLOB.facial_hairstyles_list.len) + L[DNA_FACIAL_HAIRSTYLE_BLOCK] = construct_block(SSaccessories.facial_hairstyles_list.Find(H.facial_hairstyle), length(SSaccessories.facial_hairstyles_list)) L[DNA_FACIAL_HAIR_COLOR_BLOCK] = sanitize_hexcolor(H.facial_hair_color, include_crunch = FALSE) L[DNA_SKIN_TONE_BLOCK] = construct_block(GLOB.skin_tones.Find(H.skin_tone), GLOB.skin_tones.len) L[DNA_EYE_COLOR_LEFT_BLOCK] = sanitize_hexcolor(H.eye_color_left, include_crunch = FALSE) L[DNA_EYE_COLOR_RIGHT_BLOCK] = sanitize_hexcolor(H.eye_color_right, include_crunch = FALSE) + L[DNA_HAIRSTYLE_GRADIENT_BLOCK] = construct_block(SSaccessories.hair_gradients_list.Find(H.grad_style[GRADIENT_HAIR_KEY]), length(SSaccessories.hair_gradients_list)) + L[DNA_HAIR_COLOR_GRADIENT_BLOCK] = sanitize_hexcolor(H.grad_color[GRADIENT_HAIR_KEY], include_crunch = FALSE) + L[DNA_FACIAL_HAIRSTYLE_GRADIENT_BLOCK] = construct_block(SSaccessories.facial_hair_gradients_list.Find(H.grad_style[GRADIENT_FACIAL_HAIR_KEY]), length(SSaccessories.facial_hair_gradients_list)) + L[DNA_FACIAL_HAIR_COLOR_GRADIENT_BLOCK] = sanitize_hexcolor(H.grad_color[GRADIENT_FACIAL_HAIR_KEY], include_crunch = FALSE) for(var/blocknum in 1 to DNA_UNI_IDENTITY_BLOCKS) . += L[blocknum] || random_string(GET_UI_BLOCK_LEN(blocknum), GLOB.hex_characters) @@ -202,34 +210,34 @@ GLOBAL_LIST_INIT(total_uf_len_by_block, populate_total_uf_len_by_block()) L[DNA_MUTANT_COLOR_BLOCK] = sanitize_hexcolor(features["mcolor"], include_crunch = FALSE) if(features["ethcolor"]) L[DNA_ETHEREAL_COLOR_BLOCK] = sanitize_hexcolor(features["ethcolor"], include_crunch = FALSE) - if(features["body_markings"]) - L[DNA_LIZARD_MARKINGS_BLOCK] = construct_block(GLOB.body_markings_list.Find(features["body_markings"]), GLOB.body_markings_list.len) + if(features["lizard_markings"]) + L[DNA_LIZARD_MARKINGS_BLOCK] = construct_block(SSaccessories.lizard_markings_list.Find(features["lizard_markings"]), length(SSaccessories.lizard_markings_list)) if(features["tail_cat"]) - L[DNA_TAIL_BLOCK] = construct_block(GLOB.tails_list_human.Find(features["tail_cat"]), GLOB.tails_list_human.len) + L[DNA_TAIL_BLOCK] = construct_block(SSaccessories.tails_list_human.Find(features["tail_cat"]), length(SSaccessories.tails_list_human)) if(features["tail_lizard"]) - L[DNA_LIZARD_TAIL_BLOCK] = construct_block(GLOB.tails_list_lizard.Find(features["tail_lizard"]), GLOB.tails_list_lizard.len) + L[DNA_LIZARD_TAIL_BLOCK] = construct_block(SSaccessories.tails_list_lizard.Find(features["tail_lizard"]), length(SSaccessories.tails_list_lizard)) if(features["tail_monkey"]) - L[DNA_MONKEY_TAIL_BLOCK] = construct_block(GLOB.tails_list_monkey.Find(features["tail_monkey"]), GLOB.tails_list_monkey.len) + L[DNA_MONKEY_TAIL_BLOCK] = construct_block(SSaccessories.tails_list_monkey.Find(features["tail_monkey"]), length(SSaccessories.tails_list_monkey)) if(features["snout"]) - L[DNA_SNOUT_BLOCK] = construct_block(GLOB.snouts_list.Find(features["snout"]), GLOB.snouts_list.len) + L[DNA_SNOUT_BLOCK] = construct_block(SSaccessories.snouts_list.Find(features["snout"]), length(SSaccessories.snouts_list)) if(features["horns"]) - L[DNA_HORNS_BLOCK] = construct_block(GLOB.horns_list.Find(features["horns"]), GLOB.horns_list.len) + L[DNA_HORNS_BLOCK] = construct_block(SSaccessories.horns_list.Find(features["horns"]), length(SSaccessories.horns_list)) if(features["frills"]) - L[DNA_FRILLS_BLOCK] = construct_block(GLOB.frills_list.Find(features["frills"]), GLOB.frills_list.len) + L[DNA_FRILLS_BLOCK] = construct_block(SSaccessories.frills_list.Find(features["frills"]), length(SSaccessories.frills_list)) if(features["spines"]) - L[DNA_SPINES_BLOCK] = construct_block(GLOB.spines_list.Find(features["spines"]), GLOB.spines_list.len) + L[DNA_SPINES_BLOCK] = construct_block(SSaccessories.spines_list.Find(features["spines"]), length(SSaccessories.spines_list)) if(features["ears"]) - L[DNA_EARS_BLOCK] = construct_block(GLOB.ears_list.Find(features["ears"]), GLOB.ears_list.len) + L[DNA_EARS_BLOCK] = construct_block(SSaccessories.ears_list.Find(features["ears"]), length(SSaccessories.ears_list)) if(features["moth_wings"] != "Burnt Off") - L[DNA_MOTH_WINGS_BLOCK] = construct_block(GLOB.moth_wings_list.Find(features["moth_wings"]), GLOB.moth_wings_list.len) + L[DNA_MOTH_WINGS_BLOCK] = construct_block(SSaccessories.moth_wings_list.Find(features["moth_wings"]), length(SSaccessories.moth_wings_list)) if(features["moth_antennae"] != "Burnt Off") - L[DNA_MOTH_ANTENNAE_BLOCK] = construct_block(GLOB.moth_antennae_list.Find(features["moth_antennae"]), GLOB.moth_antennae_list.len) + L[DNA_MOTH_ANTENNAE_BLOCK] = construct_block(SSaccessories.moth_antennae_list.Find(features["moth_antennae"]), length(SSaccessories.moth_antennae_list)) if(features["moth_markings"]) - L[DNA_MOTH_MARKINGS_BLOCK] = construct_block(GLOB.moth_markings_list.Find(features["moth_markings"]), GLOB.moth_markings_list.len) + L[DNA_MOTH_MARKINGS_BLOCK] = construct_block(SSaccessories.moth_markings_list.Find(features["moth_markings"]), length(SSaccessories.moth_markings_list)) if(features["caps"]) - L[DNA_MUSHROOM_CAPS_BLOCK] = construct_block(GLOB.caps_list.Find(features["caps"]), GLOB.caps_list.len) + L[DNA_MUSHROOM_CAPS_BLOCK] = construct_block(SSaccessories.caps_list.Find(features["caps"]), length(SSaccessories.caps_list)) if(features["pod_hair"]) - L[DNA_POD_HAIR_BLOCK] = construct_block(GLOB.pod_hair_list.Find(features["pod_hair"]), GLOB.pod_hair_list.len) + L[DNA_POD_HAIR_BLOCK] = construct_block(SSaccessories.pod_hair_list.Find(features["pod_hair"]), length(SSaccessories.pod_hair_list)) for(var/blocknum in 1 to DNA_FEATURE_BLOCKS) . += L[blocknum] || random_string(GET_UI_BLOCK_LEN(blocknum), GLOB.hex_characters) @@ -326,9 +334,17 @@ GLOBAL_LIST_INIT(total_uf_len_by_block, populate_total_uf_len_by_block()) else set_uni_identity_block(blocknumber, construct_block(G_PLURAL, GENDERS)) if(DNA_FACIAL_HAIRSTYLE_BLOCK) - set_uni_identity_block(blocknumber, construct_block(GLOB.facial_hairstyles_list.Find(H.facial_hairstyle), GLOB.facial_hairstyles_list.len)) + set_uni_identity_block(blocknumber, construct_block(SSaccessories.facial_hairstyles_list.Find(H.facial_hairstyle), length(SSaccessories.facial_hairstyles_list))) if(DNA_HAIRSTYLE_BLOCK) - set_uni_identity_block(blocknumber, construct_block(GLOB.hairstyles_list.Find(H.hairstyle), GLOB.hairstyles_list.len)) + set_uni_identity_block(blocknumber, construct_block(SSaccessories.hairstyles_list.Find(H.hairstyle), length(SSaccessories.hairstyles_list))) + if(DNA_HAIRSTYLE_GRADIENT_BLOCK) + set_uni_identity_block(blocknumber, construct_block(SSaccessories.hair_gradients_list.Find(H.grad_style[GRADIENT_HAIR_KEY]), length(SSaccessories.hair_gradients_list))) + if(DNA_FACIAL_HAIRSTYLE_GRADIENT_BLOCK) + set_uni_identity_block(blocknumber, construct_block(SSaccessories.facial_hair_gradients_list.Find(H.grad_style[GRADIENT_FACIAL_HAIR_KEY]), length(SSaccessories.facial_hair_gradients_list))) + if(DNA_HAIR_COLOR_GRADIENT_BLOCK) + set_uni_identity_block(blocknumber, sanitize_hexcolor(H.grad_color[GRADIENT_HAIR_KEY], include_crunch = FALSE)) + if(DNA_FACIAL_HAIR_COLOR_GRADIENT_BLOCK) + set_uni_identity_block(blocknumber, sanitize_hexcolor(H.grad_color[GRADIENT_FACIAL_HAIR_KEY], include_crunch = FALSE)) /datum/dna/proc/update_uf_block(blocknumber) if(!blocknumber) @@ -341,33 +357,33 @@ GLOBAL_LIST_INIT(total_uf_len_by_block, populate_total_uf_len_by_block()) if(DNA_ETHEREAL_COLOR_BLOCK) set_uni_feature_block(blocknumber, sanitize_hexcolor(features["ethcolor"], include_crunch = FALSE)) if(DNA_LIZARD_MARKINGS_BLOCK) - set_uni_feature_block(blocknumber, construct_block(GLOB.body_markings_list.Find(features["body_markings"]), GLOB.body_markings_list.len)) + set_uni_feature_block(blocknumber, construct_block(SSaccessories.lizard_markings_list.Find(features["lizard_markings"]), length(SSaccessories.lizard_markings_list))) if(DNA_TAIL_BLOCK) - set_uni_feature_block(blocknumber, construct_block(GLOB.tails_list_human.Find(features["tail_cat"]), GLOB.tails_list_human.len)) + set_uni_feature_block(blocknumber, construct_block(SSaccessories.tails_list_human.Find(features["tail_cat"]), length(SSaccessories.tails_list_human))) if(DNA_LIZARD_TAIL_BLOCK) - set_uni_feature_block(blocknumber, construct_block(GLOB.tails_list_lizard.Find(features["tail_lizard"]), GLOB.tails_list_lizard.len)) + set_uni_feature_block(blocknumber, construct_block(SSaccessories.tails_list_lizard.Find(features["tail_lizard"]), length(SSaccessories.tails_list_lizard))) if(DNA_MONKEY_TAIL_BLOCK) - set_uni_feature_block(blocknumber, construct_block(GLOB.tails_list_monkey.Find(features["tail_monkey"]), GLOB.tails_list_monkey.len)) + set_uni_feature_block(blocknumber, construct_block(SSaccessories.tails_list_monkey.Find(features["tail_monkey"]), length(SSaccessories.tails_list_monkey))) if(DNA_SNOUT_BLOCK) - set_uni_feature_block(blocknumber, construct_block(GLOB.snouts_list.Find(features["snout"]), GLOB.snouts_list.len)) + set_uni_feature_block(blocknumber, construct_block(SSaccessories.snouts_list.Find(features["snout"]), length(SSaccessories.snouts_list))) if(DNA_HORNS_BLOCK) - set_uni_feature_block(blocknumber, construct_block(GLOB.horns_list.Find(features["horns"]), GLOB.horns_list.len)) + set_uni_feature_block(blocknumber, construct_block(SSaccessories.horns_list.Find(features["horns"]), length(SSaccessories.horns_list))) if(DNA_FRILLS_BLOCK) - set_uni_feature_block(blocknumber, construct_block(GLOB.frills_list.Find(features["frills"]), GLOB.frills_list.len)) + set_uni_feature_block(blocknumber, construct_block(SSaccessories.frills_list.Find(features["frills"]), length(SSaccessories.frills_list))) if(DNA_SPINES_BLOCK) - set_uni_feature_block(blocknumber, construct_block(GLOB.spines_list.Find(features["spines"]), GLOB.spines_list.len)) + set_uni_feature_block(blocknumber, construct_block(SSaccessories.spines_list.Find(features["spines"]), length(SSaccessories.spines_list))) if(DNA_EARS_BLOCK) - set_uni_feature_block(blocknumber, construct_block(GLOB.ears_list.Find(features["ears"]), GLOB.ears_list.len)) + set_uni_feature_block(blocknumber, construct_block(SSaccessories.ears_list.Find(features["ears"]), length(SSaccessories.ears_list))) if(DNA_MOTH_WINGS_BLOCK) - set_uni_feature_block(blocknumber, construct_block(GLOB.moth_wings_list.Find(features["moth_wings"]), GLOB.moth_wings_list.len)) + set_uni_feature_block(blocknumber, construct_block(SSaccessories.moth_wings_list.Find(features["moth_wings"]), length(SSaccessories.moth_wings_list))) if(DNA_MOTH_ANTENNAE_BLOCK) - set_uni_feature_block(blocknumber, construct_block(GLOB.moth_antennae_list.Find(features["moth_antennae"]), GLOB.moth_antennae_list.len)) + set_uni_feature_block(blocknumber, construct_block(SSaccessories.moth_antennae_list.Find(features["moth_antennae"]), length(SSaccessories.moth_antennae_list))) if(DNA_MOTH_MARKINGS_BLOCK) - set_uni_feature_block(blocknumber, construct_block(GLOB.moth_markings_list.Find(features["moth_markings"]), GLOB.moth_markings_list.len)) + set_uni_feature_block(blocknumber, construct_block(SSaccessories.moth_markings_list.Find(features["moth_markings"]), length(SSaccessories.moth_markings_list))) if(DNA_MUSHROOM_CAPS_BLOCK) - set_uni_feature_block(blocknumber, construct_block(GLOB.caps_list.Find(features["caps"]), GLOB.caps_list.len)) + set_uni_feature_block(blocknumber, construct_block(SSaccessories.caps_list.Find(features["caps"]), length(SSaccessories.caps_list))) if(DNA_POD_HAIR_BLOCK) - set_uni_feature_block(blocknumber, construct_block(GLOB.pod_hair_list.Find(features["pod_hair"]), GLOB.pod_hair_list.len)) + set_uni_feature_block(blocknumber, construct_block(SSaccessories.pod_hair_list.Find(features["pod_hair"]), length(SSaccessories.pod_hair_list))) //Please use add_mutation or activate_mutation instead /datum/dna/proc/force_give(datum/mutation/human/human_mutation) @@ -410,7 +426,7 @@ GLOBAL_LIST_INIT(total_uf_len_by_block, populate_total_uf_len_by_block()) /datum/dna/proc/update_instability(alert=TRUE) stability = 100 for(var/datum/mutation/human/M in mutations) - if(M.class == MUT_EXTRA) + if(M.class == MUT_EXTRA || M.instability < 0) stability -= M.instability * GET_MUTATION_STABILIZER(M) if(holder) var/message @@ -452,14 +468,8 @@ GLOBAL_LIST_INIT(total_uf_len_by_block, populate_total_uf_len_by_block()) if(create_mutation_blocks) //I hate this generate_dna_blocks() if(randomize_features) - var/static/list/all_species_protoypes - if(isnull(all_species_protoypes)) - all_species_protoypes = list() - for(var/species_path in subtypesof(/datum/species)) - all_species_protoypes += new species_path() - - for(var/datum/species/random_species as anything in all_species_protoypes) - features |= random_species.randomize_features() + for(var/species_type in GLOB.species_prototypes) + features |= GLOB.species_prototypes[species_type].randomize_features() features["mcolor"] = "#[random_color()]" @@ -621,66 +631,68 @@ GLOBAL_LIST_INIT(total_uf_len_by_block, populate_total_uf_len_by_block()) eye_color_right = sanitize_hexcolor(get_uni_identity_block(structure, DNA_EYE_COLOR_RIGHT_BLOCK)) set_haircolor(sanitize_hexcolor(get_uni_identity_block(structure, DNA_HAIR_COLOR_BLOCK)), update = FALSE) set_facial_haircolor(sanitize_hexcolor(get_uni_identity_block(structure, DNA_FACIAL_HAIR_COLOR_BLOCK)), update = FALSE) + set_hair_gradient_color(sanitize_hexcolor(get_uni_identity_block(structure, DNA_HAIR_COLOR_GRADIENT_BLOCK)), update = FALSE) + set_facial_hair_gradient_color(sanitize_hexcolor(get_uni_identity_block(structure, DNA_FACIAL_HAIR_COLOR_GRADIENT_BLOCK)), update = FALSE) if(HAS_TRAIT(src, TRAIT_SHAVED)) set_facial_hairstyle("Shaved", update = FALSE) else - var/style = GLOB.facial_hairstyles_list[deconstruct_block(get_uni_identity_block(structure, DNA_FACIAL_HAIRSTYLE_BLOCK), GLOB.facial_hairstyles_list.len)] + var/style = SSaccessories.facial_hairstyles_list[deconstruct_block(get_uni_identity_block(structure, DNA_FACIAL_HAIRSTYLE_BLOCK), length(SSaccessories.facial_hairstyles_list))] + var/gradient_style = SSaccessories.facial_hair_gradients_list[deconstruct_block(get_uni_identity_block(structure, DNA_FACIAL_HAIRSTYLE_GRADIENT_BLOCK), length(SSaccessories.facial_hair_gradients_list))] set_facial_hairstyle(style, update = FALSE) + set_facial_hair_gradient_style(gradient_style, update = FALSE) if(HAS_TRAIT(src, TRAIT_BALD)) set_hairstyle("Bald", update = FALSE) else - var/style = GLOB.hairstyles_list[deconstruct_block(get_uni_identity_block(structure, DNA_HAIRSTYLE_BLOCK), GLOB.hairstyles_list.len)] + var/style = SSaccessories.hairstyles_list[deconstruct_block(get_uni_identity_block(structure, DNA_HAIRSTYLE_BLOCK), length(SSaccessories.hairstyles_list))] + var/gradient_style = SSaccessories.hair_gradients_list[deconstruct_block(get_uni_identity_block(structure, DNA_HAIRSTYLE_GRADIENT_BLOCK), length(SSaccessories.hair_gradients_list))] set_hairstyle(style, update = FALSE) + set_hair_gradient_style(gradient_style, update = FALSE) var/features = dna.unique_features if(dna.features["mcolor"]) dna.features["mcolor"] = sanitize_hexcolor(get_uni_feature_block(features, DNA_MUTANT_COLOR_BLOCK)) if(dna.features["ethcolor"]) dna.features["ethcolor"] = sanitize_hexcolor(get_uni_feature_block(features, DNA_ETHEREAL_COLOR_BLOCK)) - if(dna.features["body_markings"]) - dna.features["body_markings"] = GLOB.body_markings_list[deconstruct_block(get_uni_feature_block(features, DNA_LIZARD_MARKINGS_BLOCK), GLOB.body_markings_list.len)] + if(dna.features["lizard_markings"]) + dna.features["lizard_markings"] = SSaccessories.lizard_markings_list[deconstruct_block(get_uni_feature_block(features, DNA_LIZARD_MARKINGS_BLOCK), length(SSaccessories.lizard_markings_list))] if(dna.features["snout"]) - dna.features["snout"] = GLOB.snouts_list[deconstruct_block(get_uni_feature_block(features, DNA_SNOUT_BLOCK), GLOB.snouts_list.len)] + dna.features["snout"] = SSaccessories.snouts_list[deconstruct_block(get_uni_feature_block(features, DNA_SNOUT_BLOCK), length(SSaccessories.snouts_list))] if(dna.features["horns"]) - dna.features["horns"] = GLOB.horns_list[deconstruct_block(get_uni_feature_block(features, DNA_HORNS_BLOCK), GLOB.horns_list.len)] + dna.features["horns"] = SSaccessories.horns_list[deconstruct_block(get_uni_feature_block(features, DNA_HORNS_BLOCK), length(SSaccessories.horns_list))] if(dna.features["frills"]) - dna.features["frills"] = GLOB.frills_list[deconstruct_block(get_uni_feature_block(features, DNA_FRILLS_BLOCK), GLOB.frills_list.len)] + dna.features["frills"] = SSaccessories.frills_list[deconstruct_block(get_uni_feature_block(features, DNA_FRILLS_BLOCK), length(SSaccessories.frills_list))] if(dna.features["spines"]) - dna.features["spines"] = GLOB.spines_list[deconstruct_block(get_uni_feature_block(features, DNA_SPINES_BLOCK), GLOB.spines_list.len)] + dna.features["spines"] = SSaccessories.spines_list[deconstruct_block(get_uni_feature_block(features, DNA_SPINES_BLOCK), length(SSaccessories.spines_list))] if(dna.features["tail_cat"]) - dna.features["tail_cat"] = GLOB.tails_list_human[deconstruct_block(get_uni_feature_block(features, DNA_TAIL_BLOCK), GLOB.tails_list_human.len)] + dna.features["tail_cat"] = SSaccessories.tails_list_human[deconstruct_block(get_uni_feature_block(features, DNA_TAIL_BLOCK), length(SSaccessories.tails_list_human))] if(dna.features["tail_lizard"]) - dna.features["tail_lizard"] = GLOB.tails_list_lizard[deconstruct_block(get_uni_feature_block(features, DNA_LIZARD_TAIL_BLOCK), GLOB.tails_list_lizard.len)] + dna.features["tail_lizard"] = SSaccessories.tails_list_lizard[deconstruct_block(get_uni_feature_block(features, DNA_LIZARD_TAIL_BLOCK), length(SSaccessories.tails_list_lizard))] if(dna.features["tail_monkey"]) - dna.features["tail_monkey"] = GLOB.tails_list_monkey[deconstruct_block(get_uni_feature_block(features, DNA_MONKEY_TAIL_BLOCK), GLOB.tails_list_monkey.len)] + dna.features["tail_monkey"] = SSaccessories.tails_list_monkey[deconstruct_block(get_uni_feature_block(features, DNA_MONKEY_TAIL_BLOCK), length(SSaccessories.tails_list_monkey))] if(dna.features["ears"]) - dna.features["ears"] = GLOB.ears_list[deconstruct_block(get_uni_feature_block(features, DNA_EARS_BLOCK), GLOB.ears_list.len)] + dna.features["ears"] = SSaccessories.ears_list[deconstruct_block(get_uni_feature_block(features, DNA_EARS_BLOCK), length(SSaccessories.ears_list))] if(dna.features["moth_wings"]) - var/genetic_value = GLOB.moth_wings_list[deconstruct_block(get_uni_feature_block(features, DNA_MOTH_WINGS_BLOCK), GLOB.moth_wings_list.len)] + var/genetic_value = SSaccessories.moth_wings_list[deconstruct_block(get_uni_feature_block(features, DNA_MOTH_WINGS_BLOCK), length(SSaccessories.moth_wings_list))] dna.features["original_moth_wings"] = genetic_value dna.features["moth_wings"] = genetic_value if(dna.features["moth_antennae"]) - var/genetic_value = GLOB.moth_antennae_list[deconstruct_block(get_uni_feature_block(features, DNA_MOTH_ANTENNAE_BLOCK), GLOB.moth_antennae_list.len)] + var/genetic_value = SSaccessories.moth_antennae_list[deconstruct_block(get_uni_feature_block(features, DNA_MOTH_ANTENNAE_BLOCK), length(SSaccessories.moth_antennae_list))] dna.features["original_moth_antennae"] = genetic_value dna.features["moth_antennae"] = genetic_value if(dna.features["moth_markings"]) - dna.features["moth_markings"] = GLOB.moth_markings_list[deconstruct_block(get_uni_feature_block(features, DNA_MOTH_MARKINGS_BLOCK), GLOB.moth_markings_list.len)] + dna.features["moth_markings"] = SSaccessories.moth_markings_list[deconstruct_block(get_uni_feature_block(features, DNA_MOTH_MARKINGS_BLOCK), length(SSaccessories.moth_markings_list))] if(dna.features["caps"]) - dna.features["caps"] = GLOB.caps_list[deconstruct_block(get_uni_feature_block(features, DNA_MUSHROOM_CAPS_BLOCK), GLOB.caps_list.len)] + dna.features["caps"] = SSaccessories.caps_list[deconstruct_block(get_uni_feature_block(features, DNA_MUSHROOM_CAPS_BLOCK), length(SSaccessories.caps_list))] if(dna.features["pod_hair"]) - dna.features["pod_hair"] = GLOB.pod_hair_list[deconstruct_block(get_uni_feature_block(features, DNA_POD_HAIR_BLOCK), GLOB.pod_hair_list.len)] + dna.features["pod_hair"] = SSaccessories.pod_hair_list[deconstruct_block(get_uni_feature_block(features, DNA_POD_HAIR_BLOCK), length(SSaccessories.pod_hair_list))] for(var/obj/item/organ/external/external_organ in organs) external_organ.mutate_feature(features, src) if(icon_update) - if(mutcolor_update) - update_body(is_creating = TRUE) - else - update_body() + update_body(is_creating = mutcolor_update) if(mutations_overlay_update) update_mutations_overlay() - /mob/proc/domutcheck() return @@ -862,78 +874,23 @@ GLOBAL_LIST_INIT(total_uf_len_by_block, populate_total_uf_len_by_block()) var/instability = -dna.stability dna.remove_all_mutations() dna.stability = 100 - if(prob(max(70-instability,0))) - switch(rand(0,10)) //not complete and utter death - if(0) - monkeyize() - if(1) - gain_trauma(/datum/brain_trauma/severe/paralysis/paraplegic) - new/obj/vehicle/ridden/wheelchair(get_turf(src)) //don't buckle, because I can't imagine to plethora of things to go through that could otherwise break - to_chat(src, span_warning("My flesh turned into a wheelchair and I can't feel my legs.")) - if(2) - corgize() - if(3) - to_chat(src, span_notice("Oh, I actually feel quite alright!")) - if(4) - to_chat(src, span_notice("Oh, I actually feel quite alright!")) - physiology.damage_resistance -= 20000 //you thought - if(5) - to_chat(src, span_notice("Oh, I actually feel quite alright!")) - reagents.add_reagent(/datum/reagent/aslimetoxin, 10) - if(6) - apply_status_effect(/datum/status_effect/go_away) - if(7) - to_chat(src, span_notice("Oh, I actually feel quite alright!")) - ForceContractDisease(new /datum/disease/decloning) // slow acting, non-viral GBS - if(8) - var/list/elligible_organs = list() - for(var/obj/item/organ/internal/internal_organ in organs) //make sure we dont get an implant or cavity item - elligible_organs += internal_organ - vomit(VOMIT_CATEGORY_DEFAULT, lost_nutrition = 10) - if(elligible_organs.len) - var/obj/item/organ/O = pick(elligible_organs) - O.Remove(src) - visible_message(span_danger("[src] vomits up [p_their()] [O.name]!"), span_danger("You vomit up your [O.name]")) //no "vomit up your heart" - O.forceMove(drop_location()) - if(prob(20)) - O.animate_atom_living() - if(9 to 10) - ForceContractDisease(new/datum/disease/gastrolosis()) - to_chat(src, span_notice("Oh, I actually feel quite alright!")) - else - switch(rand(0,6)) - if(0) - investigate_log("has been gibbed by DNA instability.", INVESTIGATE_DEATHS) - gib(DROP_ALL_REMAINS) - if(1) - investigate_log("has been dusted by DNA instability.", INVESTIGATE_DEATHS) - dust() - if(2) - investigate_log("has been transformed into a statue by DNA instability.", INVESTIGATE_DEATHS) - death() - petrify(statue_timer = INFINITY, save_brain = FALSE) - ghostize(FALSE) - if(3) - if(prob(95)) - var/obj/item/bodypart/BP = get_bodypart(pick(BODY_ZONE_CHEST,BODY_ZONE_HEAD)) - if(BP) - BP.dismember() - else - investigate_log("has been gibbed by DNA instability.", INVESTIGATE_DEATHS) - gib(DROP_ALL_REMAINS) - else - set_species(/datum/species/dullahan) - if(4) - visible_message(span_warning("[src]'s skin melts off!"), span_boldwarning("Your skin melts off!")) - spawn_gibs() - set_species(/datum/species/skeleton) - if(prob(90)) - addtimer(CALLBACK(src, PROC_REF(death)), 3 SECONDS) - if(5) - to_chat(src, span_phobia("LOOK UP!")) - addtimer(CALLBACK(src, PROC_REF(something_horrible_mindmelt)), 3 SECONDS) - if(6) - slow_psykerize() + + var/nonfatal = prob(max(70-instability, 0)) + + if(!dna.nonfatal_meltdowns.len) + for(var/datum/instability_meltdown/meltdown_type as anything in typecacheof(/datum/instability_meltdown, ignore_root_path = TRUE)) + if(initial(meltdown_type.abstract_type) == meltdown_type) + continue + + if (initial(meltdown_type.fatal)) + dna.fatal_meltdowns[meltdown_type] = initial(meltdown_type.meltdown_weight) + continue + + dna.nonfatal_meltdowns[meltdown_type] = initial(meltdown_type.meltdown_weight) + + var/picked_type = pick_weight(nonfatal ? dna.nonfatal_meltdowns : dna.fatal_meltdowns) + var/datum/instability_meltdown/meltdown = new picked_type + meltdown.meltdown(src) /mob/living/carbon/human/proc/something_horrible_mindmelt() if(!is_blind()) diff --git a/code/datums/eigenstate.dm b/code/datums/eigenstate.dm index 3bba746320997..b25fa657eb6e4 100644 --- a/code/datums/eigenstate.dm +++ b/code/datums/eigenstate.dm @@ -119,8 +119,7 @@ GLOBAL_DATUM_INIT(eigenstate_manager, /datum/eigenstate_manager, new) spark_time = world.time //Calls a special proc for the atom if needed (closets use bust_open()) SEND_SIGNAL(eigen_target, COMSIG_EIGENSTATE_ACTIVATE) - if(!subtle) - return COMPONENT_CLOSET_INSERT_INTERRUPT + return COMPONENT_CLOSET_INSERT_INTERRUPT ///Prevents tool use on the item /datum/eigenstate_manager/proc/tool_interact(atom/source, mob/user, obj/item/item) diff --git a/code/datums/elements/ai_control_examine.dm b/code/datums/elements/ai_control_examine.dm index b470ac44b49a7..279fc80dc8192 100644 --- a/code/datums/elements/ai_control_examine.dm +++ b/code/datums/elements/ai_control_examine.dm @@ -46,7 +46,7 @@ if(noticable_organ_examines[possibly_noticable.slot]) make_organ_noticable(possibly_noticable.slot, possibly_noticable) -/datum/element/ai_control_examine/proc/make_organ_noticable(organ_slot, obj/item/organ/noticable_organ) +/datum/element/ai_control_examine/proc/make_organ_noticable(organ_slot, obj/item/organ/noticable_organ, mob/living/carbon/human/human_pawn) var/examine_text = noticable_organ_examines[organ_slot] var/body_zone = organ_slot != ORGAN_SLOT_BRAIN ? noticable_organ.zone : null noticable_organ.AddElement(/datum/element/noticable_organ/ai_control, examine_text, body_zone) diff --git a/code/datums/elements/attack_zone_randomiser.dm b/code/datums/elements/attack_zone_randomiser.dm index 35275e11a9bb2..1e364265bab0a 100644 --- a/code/datums/elements/attack_zone_randomiser.dm +++ b/code/datums/elements/attack_zone_randomiser.dm @@ -21,6 +21,8 @@ SIGNAL_HANDLER if (!iscarbon(target)) return + if (!isnull(source.mind) && !isnull(source.hud_used?.zone_select)) + return var/mob/living/living_target = target var/list/blacklist_zones = GLOB.all_body_zones - valid_attack_zones var/new_zone = living_target.get_random_valid_zone(blacklisted_parts = blacklist_zones, bypass_warning = TRUE) diff --git a/code/datums/elements/backblast.dm b/code/datums/elements/backblast.dm index 8952afbfeaa21..f5e73977159cd 100644 --- a/code/datums/elements/backblast.dm +++ b/code/datums/elements/backblast.dm @@ -38,6 +38,9 @@ /// For firing an actual backblast pellet /datum/element/backblast/proc/pew(obj/item/gun/weapon, mob/living/user, atom/target) + if(HAS_TRAIT(user, TRAIT_PACIFISM)) + return + var/turf/origin = get_turf(weapon) var/backblast_angle = get_angle(target, origin) explosion(weapon, devastation_range = dev_range, heavy_impact_range = heavy_range, light_impact_range = light_range, flame_range = flame_range, adminlog = FALSE, protect_epicenter = TRUE, explosion_direction = backblast_angle, explosion_arc = blast_angle) diff --git a/code/datums/elements/basic_eating.dm b/code/datums/elements/basic_eating.dm index 757fd8b3519b9..4f4f493e0ef33 100644 --- a/code/datums/elements/basic_eating.dm +++ b/code/datums/elements/basic_eating.dm @@ -83,9 +83,15 @@ return TRUE /datum/element/basic_eating/proc/finish_eating(mob/living/eater, atom/target) + set waitfor = FALSE SEND_SIGNAL(eater, COMSIG_MOB_ATE) if(drinking) playsound(eater.loc,'sound/items/drink.ogg', rand(10,50), TRUE) else playsound(eater.loc,'sound/items/eatfood.ogg', rand(10,50), TRUE) - qdel(target) + var/atom/final_target = target + if(isstack(target)) //if stack, only consume 1 + var/obj/item/stack/food_stack = target + final_target = food_stack.split_stack(eater, 1) + eater.log_message("has eaten [target]!", LOG_ATTACK) + qdel(final_target) diff --git a/code/datums/elements/can_shatter.dm b/code/datums/elements/can_shatter.dm index 73b025ad83c08..be7e02e25b458 100644 --- a/code/datums/elements/can_shatter.dm +++ b/code/datums/elements/can_shatter.dm @@ -31,7 +31,7 @@ RegisterSignal(target, COMSIG_MOVABLE_IMPACT, PROC_REF(on_throw_impact)) RegisterSignal(target, COMSIG_ATOM_ON_Z_IMPACT, PROC_REF(on_z_impact)) if(shatters_as_weapon) - RegisterSignal(target, COMSIG_ITEM_POST_ATTACK_ATOM, PROC_REF(on_post_attack_atom)) + RegisterSignal(target, COMSIG_ITEM_AFTERATTACK, PROC_REF(on_post_attack_atom)) /datum/element/can_shatter/Detach(datum/target) . = ..() diff --git a/code/datums/elements/climbable.dm b/code/datums/elements/climbable.dm index 56c16f303c4ed..a2c67742a357e 100644 --- a/code/datums/elements/climbable.dm +++ b/code/datums/elements/climbable.dm @@ -69,7 +69,7 @@ if(HAS_TRAIT(user, TRAIT_FREERUNNING)) //do you have any idea how fast I am??? adjusted_climb_time *= 0.8 adjusted_climb_stun *= 0.8 - if(HAS_TRAIT(user, TRAIT_SETTLER)) //hold on, gimme a moment, my tiny legs can't get over the goshdamn table + if(HAS_TRAIT(user, TRAIT_STUBBY_BODY)) //hold on, gimme a moment, my tiny legs can't get over the goshdamn table adjusted_climb_time *= 1.5 adjusted_climb_stun *= 1.5 LAZYADDASSOCLIST(current_climbers, climbed_thing, user) @@ -82,6 +82,10 @@ log_combat(user, climbed_thing, "climbed onto") if(adjusted_climb_stun) user.Stun(adjusted_climb_stun) + var/atom/movable/buckle_target = climbed_thing + if(istype(buckle_target)) + if(buckle_target.is_buckle_possible(user)) + buckle_target.buckle_mob(user) else to_chat(user, span_warning("You fail to climb onto [climbed_thing].")) LAZYREMOVEASSOC(current_climbers, climbed_thing, user) @@ -111,6 +115,7 @@ ///Handles climbing onto the atom when you click-drag /datum/element/climbable/proc/mousedrop_receive(atom/climbed_thing, atom/movable/dropped_atom, mob/user, params) SIGNAL_HANDLER + if(user != dropped_atom || !isliving(dropped_atom)) return if(!HAS_TRAIT(dropped_atom, TRAIT_FENCE_CLIMBER) && !HAS_TRAIT(dropped_atom, TRAIT_CAN_HOLD_ITEMS)) // If you can hold items you can probably climb a fence @@ -118,3 +123,4 @@ var/mob/living/living_target = dropped_atom if(living_target.mobility_flags & MOBILITY_MOVE) INVOKE_ASYNC(src, PROC_REF(climb_structure), climbed_thing, living_target, params) + return COMPONENT_CANCEL_MOUSEDROPPED_ONTO diff --git a/code/datums/elements/corrupted_organ.dm b/code/datums/elements/corrupted_organ.dm new file mode 100644 index 0000000000000..666ca3460fce5 --- /dev/null +++ b/code/datums/elements/corrupted_organ.dm @@ -0,0 +1,66 @@ +/// Component applying shared behaviour by cursed organs granted when sacrificed by a heretic +/// Mostly just does something spooky when it is removed +/datum/element/corrupted_organ + +/datum/element/corrupted_organ/Attach(datum/target) + . = ..() + if (!isinternalorgan(target)) + return ELEMENT_INCOMPATIBLE + + RegisterSignal(target, COMSIG_ORGAN_SURGICALLY_REMOVED, PROC_REF(on_removed)) + + var/atom/atom_parent = target + atom_parent.color = COLOR_VOID_PURPLE + + atom_parent.add_filter(name = "ray", priority = 1, params = list( + type = "rays", + size = 12, + color = COLOR_VOID_PURPLE, + density = 12 + )) + var/ray_filter = atom_parent.get_filter("ray") + animate(ray_filter, offset = 100, time = 2 MINUTES, loop = -1, flags = ANIMATION_PARALLEL) // Absurdly long animate so nobody notices it hitching when it loops + animate(offset = 0, time = 2 MINUTES) // I sure hope duration of animate doesnt have any performance effect + +/datum/element/corrupted_organ/Detach(datum/source) + UnregisterSignal(source, list(COMSIG_ORGAN_SURGICALLY_REMOVED)) + return ..() + +/// When we're taken out of someone, do something spooky +/datum/element/corrupted_organ/proc/on_removed(atom/organ, mob/living/remover, mob/living/carbon/loser) + SIGNAL_HANDLER + if (loser.has_reagent(/datum/reagent/water/holywater) || loser.can_block_magic(MAGIC_RESISTANCE|MAGIC_RESISTANCE_HOLY) || prob(20)) + return + if (prob(75)) + organ.AddComponent(\ + /datum/component/haunted_item,\ + haunt_color = "#00000000", \ + aggro_radius = 4, \ + spawn_message = span_revenwarning("[organ] hovers ominously into the air, pulsating with unnatural vigour!"), \ + despawn_message = span_revenwarning("[organ] falls motionless to the ground."), \ + ) + return + var/turf/origin_turf = get_turf(organ) + playsound(organ, 'sound/magic/forcewall.ogg', vol = 100) + new /obj/effect/temp_visual/curse_blast(origin_turf) + organ.visible_message(span_revenwarning("[organ] explodes in a burst of dark energy!")) + for(var/mob/living/target in range(1, origin_turf)) + var/armor = target.run_armor_check(attack_flag = BOMB) + target.apply_damage(30, damagetype = BURN, blocked = armor, spread_damage = TRUE) + qdel(organ) + +/obj/effect/temp_visual/curse_blast + icon = 'icons/effects/64x64.dmi' + pixel_x = -16 + pixel_y = -16 + icon_state = "curse" + duration = 0.3 SECONDS + +/obj/effect/temp_visual/curse_blast/Initialize(mapload) + . = ..() + animate(src, transform = matrix() * 0.2, time = 0, flags = ANIMATION_PARALLEL) + animate(transform = matrix() * 2, time = duration, easing = EASE_IN) + + animate(src, alpha = 255, time = 0, flags = ANIMATION_PARALLEL) + animate(alpha = 255, time = 0.2 SECONDS) + animate(alpha = 0, time = 0.1 SECONDS) diff --git a/code/datums/elements/cult_eyes.dm b/code/datums/elements/cult_eyes.dm index 3a46aa42c951a..3e685419836f7 100644 --- a/code/datums/elements/cult_eyes.dm +++ b/code/datums/elements/cult_eyes.dm @@ -1,4 +1,4 @@ -/** +/*** * # Cult eyes element * * Applies and removes the glowing cult eyes @@ -16,8 +16,7 @@ /** * Cult eye setter proc - * - * Changes the eye color, and adds the glowing eye trait to the mob. + * * Changes the eye color, and adds the glowing eye trait to the mob. */ /datum/element/cult_eyes/proc/set_eyes(mob/living/target) SIGNAL_HANDLER diff --git a/code/datums/elements/cult_halo.dm b/code/datums/elements/cult_halo.dm index d6da6d8145ad9..684144ca0ab03 100644 --- a/code/datums/elements/cult_halo.dm +++ b/code/datums/elements/cult_halo.dm @@ -27,7 +27,7 @@ return ADD_TRAIT(target, TRAIT_CULT_HALO, CULT_TRAIT) - var/mutable_appearance/new_halo_overlay = mutable_appearance('icons/effects/cult/halo.dmi', "halo[rand(1, 6)]", -HALO_LAYER) + var/mutable_appearance/new_halo_overlay = mutable_appearance('icons/mob/effects/halo.dmi', "halo[rand(1, 6)]", -HALO_LAYER) if (ishuman(target)) var/mob/living/carbon/human/human_parent = target new /obj/effect/temp_visual/cult/sparks(get_turf(human_parent), human_parent.dir) diff --git a/code/datums/elements/decals/_decal.dm b/code/datums/elements/decals/_decal.dm index fda646c03c9e2..ed28565d6c780 100644 --- a/code/datums/elements/decals/_decal.dm +++ b/code/datums/elements/decals/_decal.dm @@ -113,7 +113,7 @@ return TRUE /datum/element/decal/Detach(atom/source) - UnregisterSignal(source, list(COMSIG_ATOM_DIR_CHANGE, COMSIG_COMPONENT_CLEAN_ACT, COMSIG_ATOM_EXAMINE, COMSIG_ATOM_UPDATE_OVERLAYS, COMSIG_TURF_ON_SHUTTLE_MOVE, COMSIG_ATOM_SMOOTHED_ICON)) + UnregisterSignal(source, list(COMSIG_ATOM_DIR_CHANGE, COMSIG_COMPONENT_CLEAN_ACT, COMSIG_ATOM_EXAMINE, COMSIG_ATOM_UPDATE_OVERLAYS, COMSIG_TURF_ON_SHUTTLE_MOVE, COMSIG_ATOM_SMOOTHED_ICON, COMSIG_ATOM_DECALS_ROTATING)) SSdcs.UnregisterSignal(source, COMSIG_ATOM_DIR_CHANGE) source.update_appearance(UPDATE_OVERLAYS) if(isitem(source)) diff --git a/code/datums/elements/drag_pickup.dm b/code/datums/elements/drag_pickup.dm index ffce267a895a1..d86c615c6389a 100644 --- a/code/datums/elements/drag_pickup.dm +++ b/code/datums/elements/drag_pickup.dm @@ -17,8 +17,9 @@ /datum/element/drag_pickup/proc/pick_up(atom/source, atom/over, mob/user) SIGNAL_HANDLER + var/mob/living/picker = user - if(!istype(picker) || picker.incapacitated() || !source.Adjacent(picker)) + if(!istype(picker) || !user.can_perform_action(source, FORBID_TELEKINESIS_REACH)) return if(over == picker) @@ -26,3 +27,4 @@ else if(istype(over, /atom/movable/screen/inventory/hand)) var/atom/movable/screen/inventory/hand/Selected_hand = over picker.putItemFromInventoryInHandIfPossible(source, Selected_hand.held_index) + return COMPONENT_CANCEL_MOUSEDROP_ONTO diff --git a/code/datums/elements/easily_fragmented.dm b/code/datums/elements/easily_fragmented.dm index eb7f499c0f27e..aa8b07a866ecd 100644 --- a/code/datums/elements/easily_fragmented.dm +++ b/code/datums/elements/easily_fragmented.dm @@ -17,18 +17,21 @@ src.break_chance = break_chance RegisterSignal(target, COMSIG_ITEM_AFTERATTACK, PROC_REF(on_afterattack)) + RegisterSignal(target, COMSIG_ITEM_TOOL_ACTED, PROC_REF(on_tool_use)) /datum/element/easily_fragmented/Detach(datum/target) . = ..() - UnregisterSignal(target, COMSIG_ITEM_AFTERATTACK) + UnregisterSignal(target, list(COMSIG_ITEM_AFTERATTACK, COMSIG_ITEM_TOOL_ACTED)) -/datum/element/easily_fragmented/proc/on_afterattack(datum/source, atom/target, mob/user, proximity_flag, click_parameters) +/datum/element/easily_fragmented/proc/on_afterattack(datum/source, atom/target, mob/user, click_parameters) SIGNAL_HANDLER + try_break(source, user) - var/obj/item/item = source +/datum/element/easily_fragmented/proc/on_tool_use(datum/source, atom/target, mob/user, tool_type, result) + SIGNAL_HANDLER + try_break(source, user) +/datum/element/easily_fragmented/proc/try_break(obj/item/source, mob/user) if(prob(break_chance)) - user.visible_message(span_danger("[user]'s [item.name] snap[item.p_s()] into tiny pieces in [user.p_their()] hand.")) - item.deconstruct(disassembled = FALSE) - - return COMPONENT_AFTERATTACK_PROCESSED_ITEM + user.visible_message(span_danger("[user]'s [source.name] snap[source.p_s()] into tiny pieces in [user.p_their()] hand.")) + source.deconstruct(disassembled = FALSE) diff --git a/code/datums/elements/elevation.dm b/code/datums/elements/elevation.dm index 92fba97a09414..b83548c6b5f41 100644 --- a/code/datums/elements/elevation.dm +++ b/code/datums/elements/elevation.dm @@ -18,8 +18,9 @@ if(ismovable(target)) RegisterSignal(target, COMSIG_MOVABLE_MOVED, PROC_REF(on_moved)) - var/turf/turf = get_turf(target) - if(turf) + var/atom/atom_target = target + if(isturf(atom_target.loc)) + var/turf/turf = atom_target.loc if(!HAS_TRAIT(turf, TRAIT_TURF_HAS_ELEVATED_OBJ(pixel_shift))) RegisterSignal(turf, COMSIG_TURF_RESET_ELEVATION, PROC_REF(check_elevation)) RegisterSignal(turf, COMSIG_TURF_CHANGE, PROC_REF(pre_change_turf)) diff --git a/code/datums/elements/envenomable_casing.dm b/code/datums/elements/envenomable_casing.dm index 8cf77a2f2cc49..5e080adaf0001 100644 --- a/code/datums/elements/envenomable_casing.dm +++ b/code/datums/elements/envenomable_casing.dm @@ -15,7 +15,7 @@ if(!istype(target, /obj/item/ammo_casing)) return ELEMENT_INCOMPATIBLE src.amount_allowed = amount_allowed - RegisterSignal(target, COMSIG_ITEM_AFTERATTACK, PROC_REF(on_afterattack)) + RegisterSignal(target, COMSIG_ITEM_INTERACTING_WITH_ATOM, PROC_REF(handle_interaction)) RegisterSignal(target, COMSIG_ATOM_EXAMINE, PROC_REF(on_examine_before_dip)) /datum/element/envenomable_casing/Detach(datum/target) @@ -23,28 +23,29 @@ UnregisterSignal(target, list(COMSIG_ITEM_AFTERATTACK, COMSIG_ATOM_EXAMINE)) ///signal called on the parent attacking an item -/datum/element/envenomable_casing/proc/on_afterattack(obj/item/ammo_casing/casing, atom/target, mob/user, proximity_flag, click_parameters) +/datum/element/envenomable_casing/proc/handle_interaction(obj/item/ammo_casing/casing, mob/user, atom/target, click_parameters) SIGNAL_HANDLER if(!is_reagent_container(target)) - return + return NONE var/obj/item/reagent_containers/venom_container = target if(!casing.loaded_projectile) user.balloon_alert(user, "casing is already spent!") - return + return ITEM_INTERACT_BLOCKING if(!(venom_container.reagent_flags & OPENCONTAINER)) user.balloon_alert(user, "open the container!") - return + return ITEM_INTERACT_BLOCKING var/datum/reagent/venom_applied = venom_container.reagents.get_master_reagent() if(!venom_applied) - return + return ITEM_INTERACT_BLOCKING var/amount_applied = min(venom_applied.volume, amount_allowed) casing.loaded_projectile.AddElement(/datum/element/venomous, venom_applied.type, amount_applied) to_chat(user, span_notice("You coat [casing] in [venom_applied].")) venom_container.reagents.remove_reagent(venom_applied.type, amount_applied) ///stops further poison application - UnregisterSignal(casing, COMSIG_ITEM_AFTERATTACK) + UnregisterSignal(casing, COMSIG_ITEM_INTERACTING_WITH_ATOM) RegisterSignal(casing, COMSIG_ATOM_EXAMINE, PROC_REF(on_examine_after_dip), override = TRUE) + return ITEM_INTERACT_SUCCESS ///signal called on parent being examined while not coated /datum/element/envenomable_casing/proc/on_examine_before_dip(obj/item/ammo_casing/casing, mob/user, list/examine_list) @@ -55,5 +56,3 @@ /datum/element/envenomable_casing/proc/on_examine_after_dip(obj/item/ammo_casing/casing, mob/user, list/examine_list) SIGNAL_HANDLER examine_list += span_warning("It's coated in some kind of chemical...") - - diff --git a/code/datums/elements/eyestab.dm b/code/datums/elements/eyestab.dm index 5686524d793bc..b8c0d78c4ae5c 100644 --- a/code/datums/elements/eyestab.dm +++ b/code/datums/elements/eyestab.dm @@ -94,8 +94,9 @@ eyes.set_organ_damage(eyes.low_threshold) // At over 10 damage, there is a 50% chance they drop all their items - if (prob(50)) - if (target.stat != DEAD && target.drop_all_held_items()) + if (prob(50) && target.stat != DEAD) + var/list/dropped = target.drop_all_held_items() + if(length(dropped)) to_chat(target, span_danger("You drop what you're holding and clutch at your eyes!")) target.adjust_eye_blur_up_to(20 SECONDS, EYESTAB_MAX_BLUR) target.Unconscious(2 SECONDS) diff --git a/code/datums/elements/food/dunkable.dm b/code/datums/elements/food/dunkable.dm index d413119e285eb..baf4be2a81323 100644 --- a/code/datums/elements/food/dunkable.dm +++ b/code/datums/elements/food/dunkable.dm @@ -10,29 +10,27 @@ if(!isitem(target)) return ELEMENT_INCOMPATIBLE dunk_amount = amount_per_dunk - RegisterSignal(target, COMSIG_ITEM_AFTERATTACK, PROC_REF(get_dunked)) + RegisterSignal(target, COMSIG_ITEM_INTERACTING_WITH_ATOM, PROC_REF(get_dunked)) /datum/element/dunkable/Detach(datum/target) . = ..() - UnregisterSignal(target, COMSIG_ITEM_AFTERATTACK) + UnregisterSignal(target, COMSIG_ITEM_INTERACTING_WITH_ATOM) -/datum/element/dunkable/proc/get_dunked(datum/source, atom/target, mob/user, proximity_flag) +/datum/element/dunkable/proc/get_dunked(datum/source, mob/user, atom/target, params) SIGNAL_HANDLER - if(!proximity_flag) // if the user is not adjacent to the container - return var/obj/item/reagent_containers/container = target // the container we're trying to dunk into - if(istype(container) && container.reagent_flags & DUNKABLE) // container should be a valid target for dunking - . = COMPONENT_AFTERATTACK_PROCESSED_ITEM + if(istype(container) && (container.reagent_flags & DUNKABLE)) // container should be a valid target for dunking if(!container.is_drainable()) to_chat(user, span_warning("[container] is unable to be dunked in!")) - return COMPONENT_AFTERATTACK_PROCESSED_ITEM + return ITEM_INTERACT_BLOCKING var/obj/item/I = source // the item that has the dunkable element if(container.reagents.trans_to(I, dunk_amount, transferred_by = user)) //if reagents were transferred, show the message to_chat(user, span_notice("You dunk \the [I] into \the [container].")) - return COMPONENT_AFTERATTACK_PROCESSED_ITEM + return ITEM_INTERACT_SUCCESS if(!container.reagents.total_volume) to_chat(user, span_warning("[container] is empty!")) else to_chat(user, span_warning("[I] is full!")) - return COMPONENT_AFTERATTACK_PROCESSED_ITEM + return ITEM_INTERACT_BLOCKING + return NONE diff --git a/code/datums/elements/food/processable.dm b/code/datums/elements/food/processable.dm index 625dba6149495..9ca96b3821b21 100644 --- a/code/datums/elements/food/processable.dm +++ b/code/datums/elements/food/processable.dm @@ -46,7 +46,7 @@ var/found_location = found_item.loc var/found_turf = isturf(found_location) var/found_table = locate(/obj/structure/table) in found_location - var/found_tray = locate(/obj/item/storage/bag/tray) in found_location + var/found_tray = locate(/obj/item/storage/bag/tray) in found_location || locate(/obj/item/plate/oven_tray) in found_location if(!found_turf && !istype(found_location, /obj/item/storage/bag/tray) || found_turf && !(found_table || found_tray)) to_chat(user, span_notice("You cannot make [initial(result_atom_type.name)] here! You need a table or at least a tray.")) return diff --git a/code/datums/elements/gravedigger.dm b/code/datums/elements/gravedigger.dm new file mode 100644 index 0000000000000..7f88e7072ce53 --- /dev/null +++ b/code/datums/elements/gravedigger.dm @@ -0,0 +1,48 @@ +/** + * Gravedigger element. Allows for graves to be dug from certain tiles + */ +/datum/element/gravedigger + element_flags = ELEMENT_BESPOKE + argument_hash_start_idx = 2 + + /// A list of turf types that can be used to dig a grave. + var/static/list/turfs_to_consider = typecacheof(list( + /turf/open/misc/asteroid, + /turf/open/misc/dirt, + /turf/open/misc/grass, + /turf/open/misc/basalt, + /turf/open/misc/ashplanet, + /turf/open/misc/snow, + /turf/open/misc/sandy_dirt, + )) + +/datum/element/gravedigger/Attach(datum/target) + . = ..() + + if(!isitem(target)) //Must be an item to use toolspeed variable. + return ELEMENT_INCOMPATIBLE + + RegisterSignal(target, COMSIG_ITEM_INTERACTING_WITH_ATOM_SECONDARY, PROC_REF(dig_checks)) + +/datum/element/gravedigger/Detach(datum/source, ...) + . = ..() + UnregisterSignal(source, COMSIG_ITEM_INTERACTING_WITH_ATOM_SECONDARY) + +/datum/element/gravedigger/proc/dig_checks(datum/source, mob/living/user, atom/interacting_with, list/modifiers) + SIGNAL_HANDLER + + if(!is_type_in_typecache(interacting_with, turfs_to_consider)) + return NONE + + if(locate(/obj/structure/closet/crate/grave) in interacting_with) + user.balloon_alert(user, "grave already present!") + return ITEM_INTERACT_BLOCKING + + user.balloon_alert(user, "digging grave...") + playsound(interacting_with, 'sound/effects/shovel_dig.ogg', 50, TRUE) + INVOKE_ASYNC(src, PROC_REF(perform_digging), user, interacting_with, source) + return ITEM_INTERACT_BLOCKING + +/datum/element/gravedigger/proc/perform_digging(mob/user, atom/dig_area, obj/item/our_tool) + if(our_tool.use_tool(dig_area, user, 10 SECONDS)) + new /obj/structure/closet/crate/grave/fresh(dig_area) //We don't get_turf for the location since this is guaranteed to be a turf at this point. diff --git a/code/datums/elements/knockback.dm b/code/datums/elements/knockback.dm index 2ad669f989219..c8f06efa430e5 100644 --- a/code/datums/elements/knockback.dm +++ b/code/datums/elements/knockback.dm @@ -30,13 +30,10 @@ return ..() /// triggered after an item attacks something -/datum/element/knockback/proc/item_afterattack(obj/item/source, atom/target, mob/user, proximity_flag, click_parameters) +/datum/element/knockback/proc/item_afterattack(obj/item/source, atom/target, mob/user, click_parameters) SIGNAL_HANDLER - if(!proximity_flag) - return do_knockback(target, user, get_dir(source, target)) - return COMPONENT_AFTERATTACK_PROCESSED_ITEM /// triggered after a hostile simplemob attacks something /datum/element/knockback/proc/hostile_attackingtarget(mob/living/simple_animal/hostile/attacker, atom/target, success) diff --git a/code/datums/elements/lazy_fishing_spot.dm b/code/datums/elements/lazy_fishing_spot.dm index 82323372e6a02..901b163af1538 100644 --- a/code/datums/elements/lazy_fishing_spot.dm +++ b/code/datums/elements/lazy_fishing_spot.dm @@ -14,11 +14,12 @@ if(!ispath(configuration, /datum/fish_source) || configuration == /datum/fish_source) CRASH("Lazy fishing spot has incorrect configuration passed in: [configuration].") src.configuration = configuration - + ADD_TRAIT(target, TRAIT_FISHING_SPOT, REF(src)) RegisterSignal(target, COMSIG_PRE_FISHING, PROC_REF(create_fishing_spot)) /datum/element/lazy_fishing_spot/Detach(datum/target) UnregisterSignal(target, COMSIG_PRE_FISHING) + REMOVE_TRAIT(target, TRAIT_FISHING_SPOT, REF(src)) return ..() /datum/element/lazy_fishing_spot/proc/create_fishing_spot(datum/source) diff --git a/code/datums/elements/leeching_walk.dm b/code/datums/elements/leeching_walk.dm new file mode 100644 index 0000000000000..c0afc52b24583 --- /dev/null +++ b/code/datums/elements/leeching_walk.dm @@ -0,0 +1,57 @@ +/// Buffs and heals the target while standing on rust. +/datum/element/leeching_walk + +/datum/element/leeching_walk/Attach(datum/target) + . = ..() + if (!isliving(target)) + return ELEMENT_INCOMPATIBLE + + RegisterSignal(target, COMSIG_MOVABLE_MOVED, PROC_REF(on_move)) + RegisterSignal(target, COMSIG_LIVING_LIFE, PROC_REF(on_life)) + +/datum/element/leeching_walk/Detach(datum/source) + . = ..() + UnregisterSignal(source, list(COMSIG_MOVABLE_MOVED, COMSIG_LIVING_LIFE)) + +/* + * Signal proc for [COMSIG_MOVABLE_MOVED]. + * + * Checks if we should have baton resistance on the new turf. + */ +/datum/element/leeching_walk/proc/on_move(mob/source, atom/old_loc, dir, forced, list/old_locs) + SIGNAL_HANDLER + + var/turf/mover_turf = get_turf(source) + if(HAS_TRAIT(mover_turf, TRAIT_RUSTY)) + ADD_TRAIT(source, TRAIT_BATON_RESISTANCE, type) + return + + REMOVE_TRAIT(source, TRAIT_BATON_RESISTANCE, type) + +/** + * Signal proc for [COMSIG_LIVING_LIFE]. + * + * Gradually heals the heretic ([source]) on rust, + * including baton knockdown and stamina damage. + */ +/datum/element/leeching_walk/proc/on_life(mob/living/source, seconds_per_tick, times_fired) + SIGNAL_HANDLER + + var/turf/our_turf = get_turf(source) + if(!HAS_TRAIT(our_turf, TRAIT_RUSTY)) + return + + // Heals all damage + Stamina + var/need_mob_update = FALSE + need_mob_update += source.adjustBruteLoss(-3, updating_health = FALSE) + need_mob_update += source.adjustFireLoss(-3, updating_health = FALSE) + need_mob_update += source.adjustToxLoss(-3, updating_health = FALSE, forced = TRUE) // Slimes are people to + need_mob_update += source.adjustOxyLoss(-1.5, updating_health = FALSE) + need_mob_update += source.adjustStaminaLoss(-10, updating_stamina = FALSE) + if(need_mob_update) + source.updatehealth() + // Reduces duration of stuns/etc + source.AdjustAllImmobility(-0.5 SECONDS) + // Heals blood loss + if(source.blood_volume < BLOOD_VOLUME_NORMAL) + source.blood_volume += 2.5 * seconds_per_tick diff --git a/code/datums/elements/light_eater.dm b/code/datums/elements/light_eater.dm index 50f88cb9e9b23..27500b066fefa 100644 --- a/code/datums/elements/light_eater.dm +++ b/code/datums/elements/light_eater.dm @@ -18,7 +18,7 @@ if(isitem(target)) if(isgun(target)) RegisterSignal(target, COMSIG_PROJECTILE_ON_HIT, PROC_REF(on_projectile_hit)) - RegisterSignal(target, COMSIG_ITEM_AFTERATTACK, PROC_REF(on_afterattack)) + RegisterSignal(target, COMSIG_ITEM_INTERACTING_WITH_ATOM, PROC_REF(on_interacting_with)) RegisterSignal(target, COMSIG_ITEM_HIT_REACT, PROC_REF(on_hit_reaction)) else if(isprojectile(target)) RegisterSignal(target, COMSIG_PROJECTILE_SELF_ON_HIT, PROC_REF(on_projectile_self_hit)) @@ -34,7 +34,7 @@ /datum/element/light_eater/Detach(datum/source) UnregisterSignal(source, list( COMSIG_MOVABLE_IMPACT, - COMSIG_ITEM_AFTERATTACK, + COMSIG_ITEM_INTERACTING_WITH_ATOM, COMSIG_ITEM_HIT_REACT, COMSIG_PROJECTILE_ON_HIT, COMSIG_REAGENT_EXPOSE_ATOM, @@ -118,20 +118,16 @@ return NONE /** - * Called when a target is attacked with a source item + * Called when a target is interacted with by a source item * * Arguments: * - [source][/obj/item]: The item what was used to strike the target - * - [target][/atom]: The atom being struck by the user with the source * - [user][/mob/living]: The mob using the source to strike the target - * - proximity: Whether the strike was in melee range so you can't eat lights from cameras + * - [target][/atom]: The atom being struck by the user with the source */ -/datum/element/light_eater/proc/on_afterattack(obj/item/source, atom/target, mob/living/user, proximity) +/datum/element/light_eater/proc/on_interacting_with(obj/item/source, mob/living/user, atom/target) SIGNAL_HANDLER - if(!proximity) - return NONE eat_lights(target, source) - return COMPONENT_AFTERATTACK_PROCESSED_ITEM /** * Called when a source object is used to block a thrown object, projectile, or attack diff --git a/code/datums/elements/lube_walking.dm b/code/datums/elements/lube_walking.dm new file mode 100644 index 0000000000000..8ab6b2b760285 --- /dev/null +++ b/code/datums/elements/lube_walking.dm @@ -0,0 +1,61 @@ +/** + * # lube_walking + * + * Makes a mob cause a turf to get wet as they walk, requires lying down. + * Has configurable args for wet flags, time, and resting requirements. + */ +/datum/element/lube_walking + element_flags = ELEMENT_BESPOKE | ELEMENT_DETACH_ON_HOST_DESTROY + argument_hash_start_idx = 2 + ///The wet flags that we make each tile we are affecting slippery with. + var/wet_flags + ///The minimum amount of time any tile we wet will be wet for. + var/min_time_wet_for + ///Boolean on whether the mob has to be 'resting' for the element to properly affect tiles. + ///Used to exclude simple animals that you don't expect to lie down. + var/require_resting + +/datum/element/lube_walking/Attach(atom/movable/target, wet_flags = TURF_WET_LUBE, min_time_wet_for = 2 SECONDS, require_resting = FALSE) + . = ..() + if(!ismovable(target)) + return ELEMENT_INCOMPATIBLE + src.wet_flags = wet_flags + src.min_time_wet_for = min_time_wet_for + src.require_resting = require_resting + + if(require_resting) + if(!isliving(target)) + stack_trace("lube_walking Element was added onto [target] with require_resting set on, which only works on living mobs.") + return ELEMENT_INCOMPATIBLE + var/mob/living/living_target = target + RegisterSignal(living_target, COMSIG_LIVING_RESTING, PROC_REF(on_resting_changed)) + if(living_target.resting) //theyre resting as the element was added, so let them start lubricating. + on_resting_changed(living_target, new_resting = TRUE) + else + RegisterSignal(target, COMSIG_MOVABLE_MOVED, PROC_REF(lubricate)) + +/datum/element/lube_walking/Detach(mob/living/carbon/target) + . = ..() + UnregisterSignal(target, list(COMSIG_LIVING_RESTING, COMSIG_MOVABLE_MOVED)) + if(istype(target)) + target.remove_movespeed_modifier(/datum/movespeed_modifier/snail_crawl) + +///Called when a living mob changes their resting state with require_resting on, giving them their movement speed and ability. +/datum/element/lube_walking/proc/on_resting_changed(mob/snail, new_resting, silent, instant) + SIGNAL_HANDLER + + if(new_resting && lubricate(snail)) + snail.add_movespeed_modifier(/datum/movespeed_modifier/snail_crawl) + RegisterSignal(snail, COMSIG_MOVABLE_MOVED, PROC_REF(lubricate)) + else + snail.remove_movespeed_modifier(/datum/movespeed_modifier/snail_crawl) + UnregisterSignal(snail, COMSIG_MOVABLE_MOVED) + +/datum/element/lube_walking/proc/lubricate(atom/movable/snail) + SIGNAL_HANDLER + + var/turf/open/turf_standing_on = get_turf(snail) + if(!istype(turf_standing_on)) + return FALSE + turf_standing_on.MakeSlippery(wet_flags, min_wet_time = min_time_wet_for) + return TRUE diff --git a/code/datums/elements/muffles_speech.dm b/code/datums/elements/muffles_speech.dm new file mode 100644 index 0000000000000..bbf41e3c4deef --- /dev/null +++ b/code/datums/elements/muffles_speech.dm @@ -0,0 +1,48 @@ +/datum/element/muffles_speech + +/datum/element/muffles_speech/Attach(datum/target) + . = ..() + if(!isitem(target)) + return ELEMENT_INCOMPATIBLE + + RegisterSignal(target, COMSIG_ITEM_EQUIPPED, PROC_REF(equipped)) + RegisterSignal(target, COMSIG_ITEM_DROPPED, PROC_REF(dropped)) + +/datum/element/muffles_speech/Detach(datum/source) + . = ..() + UnregisterSignal(source, list(COMSIG_ITEM_EQUIPPED, COMSIG_ITEM_DROPPED)) + +/datum/element/muffles_speech/proc/equipped(obj/item/source, mob/user, slot) + SIGNAL_HANDLER + if(source.slot_flags & slot) + RegisterSignal(user, COMSIG_MOB_SAY, PROC_REF(muzzle_talk)) + RegisterSignal(user, COMSIG_MOB_PRE_EMOTED, PROC_REF(emote_override)) + +/datum/element/muffles_speech/proc/dropped(obj/item/source, mob/user) + SIGNAL_HANDLER + UnregisterSignal(user, list(COMSIG_MOB_PRE_EMOTED, COMSIG_MOB_SAY)) + +/datum/element/muffles_speech/proc/emote_override(mob/living/source, key, params, type_override, intentional, datum/emote/emote) + SIGNAL_HANDLER + if(!emote.hands_use_check && (emote.emote_type & EMOTE_AUDIBLE)) + source.audible_message("makes a [pick("strong ", "weak ", "")]noise.", audible_message_flags = EMOTE_MESSAGE|ALWAYS_SHOW_SELF_MESSAGE) + return COMPONENT_CANT_EMOTE + return NONE + +/datum/element/muffles_speech/proc/muzzle_talk(datum/source, list/speech_args) + SIGNAL_HANDLER + + var/spoken_message = speech_args[SPEECH_MESSAGE] + if(spoken_message) + var/list/words = splittext(spoken_message, " ") + var/yell_suffix = copytext(spoken_message, findtext(spoken_message, "!")) + spoken_message = "" + + for(var/ind = 1 to length(words)) + var/new_word = "" + for(var/i = 1 to length(words[ind]) + rand(-1,1)) + new_word += "m" + new_word += "f" + words[ind] = yell_suffix ? uppertext(new_word) : new_word + spoken_message = "[jointext(words, " ")][yell_suffix]" + speech_args[SPEECH_MESSAGE] = spoken_message diff --git a/code/datums/elements/noticable_organ.dm b/code/datums/elements/noticable_organ.dm index 1a6a895e53543..a6247d18bb53b 100644 --- a/code/datums/elements/noticable_organ.dm +++ b/code/datums/elements/noticable_organ.dm @@ -6,15 +6,13 @@ /datum/element/noticable_organ element_flags = ELEMENT_BESPOKE argument_hash_start_idx = 2 - /// whether we wrap the examine text in a notice span. - var/add_span = TRUE - /// "[they]|[their] [desc here]", shows on examining someone with an infused organ. - /// Uses a possessive pronoun (His/Her/Their) if a body zone is given, or a singular pronoun (He/She/They) otherwise. + + ///Shows on examining someone with an infused organ. var/infused_desc - /// Which body zone has to be exposed. If none is set, this is always noticable, and the description pronoun becomes singular instead of possesive. + /// Which body zone has to be exposed. If none is set, this is always noticable. var/body_zone -/datum/element/noticable_organ/Attach(datum/target, infused_desc, body_zone) +/datum/element/noticable_organ/Attach(obj/item/organ/target, infused_desc, body_zone) . = ..() if(!isorgan(target)) @@ -23,8 +21,10 @@ src.infused_desc = infused_desc src.body_zone = body_zone - RegisterSignal(target, COMSIG_ORGAN_IMPLANTED, PROC_REF(on_implanted)) + RegisterSignal(target, COMSIG_ORGAN_IMPLANTED, PROC_REF(enable_description)) RegisterSignal(target, COMSIG_ORGAN_REMOVED, PROC_REF(on_removed)) + if(target.owner) + enable_description(target, target.owner) /datum/element/noticable_organ/Detach(obj/item/organ/target) UnregisterSignal(target, list(COMSIG_ORGAN_IMPLANTED, COMSIG_ORGAN_REMOVED)) @@ -38,7 +38,7 @@ return FALSE return TRUE -/datum/element/noticable_organ/proc/on_implanted(obj/item/organ/target, mob/living/carbon/receiver) +/datum/element/noticable_organ/proc/enable_description(obj/item/organ/target, mob/living/carbon/receiver) SIGNAL_HANDLER RegisterSignal(receiver, COMSIG_ATOM_EXAMINE, PROC_REF(on_receiver_examine)) @@ -53,16 +53,17 @@ if(!should_show_text(examined)) return - var/examine_text = replacetext(replacetext("[body_zone ? examined.p_Their() : examined.p_They()] [infused_desc]", "%PRONOUN_ES", examined.p_es()), "%PRONOUN_S", examined.p_s()) - if(add_span) - examine_text = span_notice(examine_text) + + var/examine_text = REPLACE_PRONOUNS(infused_desc, examined) + + examine_list += examine_text /** * Subtype of noticable organs for AI control, that will make a few more ai status checks before forking over the examine. */ /datum/element/noticable_organ/ai_control - add_span = FALSE + /datum/element/noticable_organ/ai_control/should_show_text(mob/living/carbon/examined) . = ..() diff --git a/code/datums/elements/openspace_item_click_handler.dm b/code/datums/elements/openspace_item_click_handler.dm index c9de01f381cd9..9059223fb0c35 100644 --- a/code/datums/elements/openspace_item_click_handler.dm +++ b/code/datums/elements/openspace_item_click_handler.dm @@ -8,22 +8,19 @@ . = ..() if(!isitem(target)) return ELEMENT_INCOMPATIBLE - RegisterSignal(target, COMSIG_ITEM_AFTERATTACK, PROC_REF(on_afterattack)) + RegisterSignal(target, COMSIG_RANGED_ITEM_INTERACTING_WITH_ATOM, PROC_REF(divert_interaction)) /datum/element/openspace_item_click_handler/Detach(datum/source) - UnregisterSignal(source, COMSIG_ITEM_AFTERATTACK) + UnregisterSignal(source, COMSIG_RANGED_ITEM_INTERACTING_WITH_ATOM) return ..() //Invokes the proctype with a turf above as target. -/datum/element/openspace_item_click_handler/proc/on_afterattack(obj/item/source, atom/target, mob/user, proximity_flag, click_parameters) +/datum/element/openspace_item_click_handler/proc/divert_interaction(obj/item/source, mob/user, atom/target, list/modifiers) SIGNAL_HANDLER - if(target.z == user.z) - return - var/turf/checked_turf = get_turf(target) - while(!isnull(checked_turf)) - checked_turf = GET_TURF_ABOVE(checked_turf) - if(checked_turf?.z == user.z) - INVOKE_ASYNC(source, TYPE_PROC_REF(/obj/item, handle_openspace_click), checked_turf, user, user.CanReach(checked_turf, source), click_parameters) - break - - return COMPONENT_AFTERATTACK_PROCESSED_ITEM + if((target.z == 0) || (user.z == 0) || target.z == user.z) + return NONE + var/turf/target_turf = parse_caught_click_modifiers(modifiers, get_turf(user.client?.eye || user), user.client) + if(target_turf?.z == user.z && user.CanReach(target_turf, source)) + INVOKE_ASYNC(source, TYPE_PROC_REF(/obj/item, handle_openspace_click), target_turf, user, modifiers) + return ITEM_INTERACT_BLOCKING + return NONE diff --git a/code/datums/elements/proficient_miner.dm b/code/datums/elements/proficient_miner.dm new file mode 100644 index 0000000000000..9a382afce280e --- /dev/null +++ b/code/datums/elements/proficient_miner.dm @@ -0,0 +1,19 @@ +///element given to mobs that can mine when moving +/datum/element/proficient_miner + +/datum/element/proficient_miner/Attach(datum/target) + . = ..() + if(!ismovable(target)) + return + RegisterSignal(target, COMSIG_MOVABLE_BUMP, PROC_REF(on_bump)) + +/datum/element/proficient_miner/proc/on_bump(mob/living/source, atom/target) + SIGNAL_HANDLER + if(!ismineralturf(target)) + return + var/turf/closed/mineral/mineral_wall = target + mineral_wall.gets_drilled(source) + +/datum/element/proficient_miner/Detach(datum/source, ...) + UnregisterSignal(source, COMSIG_MOVABLE_BUMP) + return ..() diff --git a/code/datums/elements/ranged_armour.dm b/code/datums/elements/ranged_armour.dm index 61a3bc647d628..6d1322c687b1a 100644 --- a/code/datums/elements/ranged_armour.dm +++ b/code/datums/elements/ranged_armour.dm @@ -53,7 +53,7 @@ /// Ignore thrown damage based on projectile properties. There's no elegant way to multiply the damage because throwforce is persistent. /datum/element/ranged_armour/proc/pre_thrown_impact(atom/parent, obj/item/hit_atom, datum/thrownthing/throwingdatum) SIGNAL_HANDLER - if (!isitem(hit_atom)) + if (!isitem(hit_atom) || HAS_TRAIT(hit_atom, TRAIT_BYPASS_RANGED_ARMOR)) return if (hit_atom.throwforce >= minimum_thrown_force) return diff --git a/code/datums/elements/relay_attackers.dm b/code/datums/elements/relay_attackers.dm index a6c319d7bc9b8..fd87cb3bc2c8e 100644 --- a/code/datums/elements/relay_attackers.dm +++ b/code/datums/elements/relay_attackers.dm @@ -7,14 +7,15 @@ /datum/element/relay_attackers/Attach(datum/target) . = ..() - // Boy this sure is a lot of ways to tell us that someone tried to attack us - RegisterSignal(target, COMSIG_ATOM_AFTER_ATTACKEDBY, PROC_REF(after_attackby)) - RegisterSignals(target, list(COMSIG_ATOM_ATTACK_HAND, COMSIG_ATOM_ATTACK_PAW, COMSIG_MOB_ATTACK_ALIEN), PROC_REF(on_attack_generic)) - RegisterSignals(target, list(COMSIG_ATOM_ATTACK_BASIC_MOB, COMSIG_ATOM_ATTACK_ANIMAL), PROC_REF(on_attack_npc)) - RegisterSignal(target, COMSIG_PROJECTILE_PREHIT, PROC_REF(on_bullet_act)) - RegisterSignal(target, COMSIG_ATOM_PREHITBY, PROC_REF(on_hitby)) - RegisterSignal(target, COMSIG_ATOM_HULK_ATTACK, PROC_REF(on_attack_hulk)) - RegisterSignal(target, COMSIG_ATOM_ATTACK_MECH, PROC_REF(on_attack_mech)) + if (!HAS_TRAIT(target, TRAIT_RELAYING_ATTACKER)) // Little bit gross but we want to just apply this shit from a bunch of places + // Boy this sure is a lot of ways to tell us that someone tried to attack us + RegisterSignal(target, COMSIG_ATOM_AFTER_ATTACKEDBY, PROC_REF(after_attackby)) + RegisterSignals(target, list(COMSIG_ATOM_ATTACK_HAND, COMSIG_ATOM_ATTACK_PAW, COMSIG_MOB_ATTACK_ALIEN), PROC_REF(on_attack_generic)) + RegisterSignals(target, list(COMSIG_ATOM_ATTACK_BASIC_MOB, COMSIG_ATOM_ATTACK_ANIMAL), PROC_REF(on_attack_npc)) + RegisterSignal(target, COMSIG_PROJECTILE_PREHIT, PROC_REF(on_bullet_act)) + RegisterSignal(target, COMSIG_ATOM_PREHITBY, PROC_REF(on_hitby)) + RegisterSignal(target, COMSIG_ATOM_HULK_ATTACK, PROC_REF(on_attack_hulk)) + RegisterSignal(target, COMSIG_ATOM_ATTACK_MECH, PROC_REF(on_attack_mech)) ADD_TRAIT(target, TRAIT_RELAYING_ATTACKER, REF(src)) /datum/element/relay_attackers/Detach(datum/source, ...) @@ -84,7 +85,7 @@ SIGNAL_HANDLER relay_attacker(target, attacker, ATTACKER_DAMAGING_ATTACK) -/datum/element/relay_attackers/proc/on_attack_mech(atom/target, obj/vehicle/sealed/mecha/mecha_attacker, mob/living/pilot) +/datum/element/relay_attackers/proc/on_attack_mech(atom/target, obj/vehicle/sealed/mecha/mecha_attacker, mob/living/pilot, mecha_attack_cooldown) SIGNAL_HANDLER relay_attacker(target, mecha_attacker, ATTACKER_DAMAGING_ATTACK) diff --git a/code/datums/elements/rust.dm b/code/datums/elements/rust.dm index 135f45b7c2f3d..265e23c5a3171 100644 --- a/code/datums/elements/rust.dm +++ b/code/datums/elements/rust.dm @@ -17,6 +17,7 @@ ADD_TRAIT(target, TRAIT_RUSTY, ELEMENT_TRAIT(type)) RegisterSignal(target, COMSIG_ATOM_UPDATE_OVERLAYS, PROC_REF(apply_rust_overlay)) RegisterSignal(target, COMSIG_ATOM_EXAMINE, PROC_REF(handle_examine)) + RegisterSignal (target, COMSIG_ATOM_ITEM_INTERACTION, PROC_REF(on_interaction)) RegisterSignals(target, list(COMSIG_ATOM_SECONDARY_TOOL_ACT(TOOL_WELDER), COMSIG_ATOM_SECONDARY_TOOL_ACT(TOOL_RUSTSCRAPER)), PROC_REF(secondary_tool_act)) // Unfortunately registering with parent sometimes doesn't cause an overlay update target.update_appearance() @@ -25,6 +26,7 @@ . = ..() UnregisterSignal(source, COMSIG_ATOM_UPDATE_OVERLAYS) UnregisterSignal(source, COMSIG_ATOM_EXAMINE) + UnregisterSignal(source, COMSIG_ATOM_ITEM_INTERACTION) UnregisterSignal(source, list(COMSIG_ATOM_SECONDARY_TOOL_ACT(TOOL_WELDER), COMSIG_ATOM_SECONDARY_TOOL_ACT(TOOL_RUSTSCRAPER))) REMOVE_TRAIT(source, TRAIT_RUSTY, ELEMENT_TRAIT(type)) source.update_appearance() @@ -72,3 +74,48 @@ user.balloon_alert(user, "scraped off rust") Detach(source) return + +/// Prevents placing floor tiles on rusted turf +/datum/element/rust/proc/on_interaction(datum/source, mob/user, obj/item/tool, modifiers) + SIGNAL_HANDLER + if(istype(tool, /obj/item/stack/tile) || istype(tool, /obj/item/stack/rods)) + user.balloon_alert(user, "floor too rusted!") + return ITEM_INTERACT_BLOCKING + +/// For rust applied by heretics +/datum/element/rust/heretic + +/datum/element/rust/heretic/Attach(atom/target, rust_icon, rust_icon_state) + . = ..() + if(. == ELEMENT_INCOMPATIBLE) + return . + RegisterSignal(target, COMSIG_ATOM_ENTERED, PROC_REF(on_entered)) + RegisterSignal(target, COMSIG_ATOM_EXITED, PROC_REF(on_exited)) + +/datum/element/rust/heretic/Detach(atom/source) + . = ..() + UnregisterSignal(source, COMSIG_ATOM_ENTERED) + UnregisterSignal(source, COMSIG_ATOM_EXITED) + for(var/obj/effect/glowing_rune/rune_to_remove in source) + qdel(rune_to_remove) + for(var/mob/living/victim in source) + victim.remove_status_effect(/datum/status_effect/rust_corruption) + +/datum/element/rust/heretic/proc/on_entered(turf/source, atom/movable/entered, ...) + SIGNAL_HANDLER + + if(!isliving(entered)) + return + var/mob/living/victim = entered + if(IS_HERETIC(victim)) + return + if(victim.can_block_magic(MAGIC_RESISTANCE)) + return + victim.apply_status_effect(/datum/status_effect/rust_corruption) + +/datum/element/rust/heretic/proc/on_exited(turf/source, atom/movable/gone) + SIGNAL_HANDLER + if(!isliving(gone)) + return + var/mob/living/leaver = gone + leaver.remove_status_effect(/datum/status_effect/rust_corruption) diff --git a/code/datums/elements/selfknockback.dm b/code/datums/elements/selfknockback.dm index 61b2d17c3db84..d330b30debc1a 100644 --- a/code/datums/elements/selfknockback.dm +++ b/code/datums/elements/selfknockback.dm @@ -36,19 +36,16 @@ clamping the Knockback_Force value below. */ else return default_speed -/datum/element/selfknockback/proc/Item_SelfKnockback(obj/item/I, atom/attacktarget, mob/usertarget, proximity_flag) +/datum/element/selfknockback/proc/Item_SelfKnockback(obj/item/I, atom/attacktarget, mob/usertarget) SIGNAL_HANDLER - if(isturf(attacktarget) && !attacktarget.density) - return - if(proximity_flag || (get_dist(attacktarget, usertarget) <= I.reach)) - var/knockback_force = Get_Knockback_Force(clamp(CEILING((I.force / 10), 1), 1, 5)) - var/knockback_speed = Get_Knockback_Speed(clamp(knockback_force, 1, 5)) + var/knockback_force = Get_Knockback_Force(clamp(CEILING((I.force / 10), 1), 1, 5)) + var/knockback_speed = Get_Knockback_Speed(clamp(knockback_force, 1, 5)) - var/target_angle = get_angle(attacktarget, usertarget) - var/move_target = get_ranged_target_turf(usertarget, angle2dir(target_angle), knockback_force) - usertarget.throw_at(move_target, knockback_force, knockback_speed) - usertarget.visible_message(span_warning("[usertarget] gets thrown back by the force of \the [I] impacting \the [attacktarget]!"), span_warning("The force of \the [I] impacting \the [attacktarget] sends you flying!")) + var/target_angle = get_angle(attacktarget, usertarget) + var/move_target = get_ranged_target_turf(usertarget, angle2dir(target_angle), knockback_force) + usertarget.throw_at(move_target, knockback_force, knockback_speed) + usertarget.visible_message(span_warning("[usertarget] gets thrown back by the force of \the [I] impacting \the [attacktarget]!"), span_warning("The force of \the [I] impacting \the [attacktarget] sends you flying!")) /datum/element/selfknockback/proc/Projectile_SelfKnockback(obj/projectile/P) SIGNAL_HANDLER diff --git a/code/datums/elements/skill_reward.dm b/code/datums/elements/skill_reward.dm index 7809eea85f715..891f933793ea0 100644 --- a/code/datums/elements/skill_reward.dm +++ b/code/datums/elements/skill_reward.dm @@ -29,7 +29,7 @@ ///We check if the item can be equipped, otherwise we drop it. /datum/element/skill_reward/proc/drop_if_unworthy(datum/source, mob/living/user) SIGNAL_HANDLER - if(check_equippable(user) || !(source in user.get_equipped_items(include_pockets = TRUE, include_accessories = TRUE))) + if(check_equippable(user) || !(source in user.get_equipped_items(INCLUDE_POCKETS | INCLUDE_ACCESSORIES))) return NONE to_chat(user, span_warning("You feel completely and utterly unworthy to even touch \the [source].")) user.dropItemToGround(source, TRUE) diff --git a/code/datums/elements/snail_crawl.dm b/code/datums/elements/snail_crawl.dm deleted file mode 100644 index d0fac629e493d..0000000000000 --- a/code/datums/elements/snail_crawl.dm +++ /dev/null @@ -1,35 +0,0 @@ -/datum/element/snailcrawl - element_flags = ELEMENT_DETACH_ON_HOST_DESTROY - -/datum/element/snailcrawl/Attach(datum/target) - . = ..() - if(!ismovable(target)) - return ELEMENT_INCOMPATIBLE - var/P - if(iscarbon(target)) - P = PROC_REF(snail_crawl) - else - P = PROC_REF(lubricate) - RegisterSignal(target, COMSIG_MOVABLE_MOVED, P) - -/datum/element/snailcrawl/Detach(mob/living/carbon/target) - . = ..() - UnregisterSignal(target, COMSIG_MOVABLE_MOVED) - if(istype(target)) - target.remove_movespeed_modifier(/datum/movespeed_modifier/snail_crawl) - -/datum/element/snailcrawl/proc/snail_crawl(mob/living/carbon/snail) - SIGNAL_HANDLER - - if(snail.resting && !snail.buckled && lubricate(snail)) - snail.add_movespeed_modifier(/datum/movespeed_modifier/snail_crawl) - else - snail.remove_movespeed_modifier(/datum/movespeed_modifier/snail_crawl) - -/datum/element/snailcrawl/proc/lubricate(atom/movable/snail) - SIGNAL_HANDLER - - var/turf/open/OT = get_turf(snail) - if(istype(OT)) - OT.MakeSlippery(TURF_WET_LUBE, 20) - return TRUE diff --git a/code/datums/elements/spooky.dm b/code/datums/elements/spooky.dm index f80c98e2796af..30a04f6348b20 100644 --- a/code/datums/elements/spooky.dm +++ b/code/datums/elements/spooky.dm @@ -47,6 +47,8 @@ C.set_jitter_if_lower(30 SECONDS) C.set_stutter(40 SECONDS) + C.add_mood_event("spooked", /datum/mood_event/spooked) + /datum/element/spooky/proc/spectral_change(mob/living/carbon/human/H, mob/user) if((H.getStaminaLoss() > 95) && (!istype(H.dna.species, /datum/species/skeleton)) && (!istype(H.dna.species, /datum/species/golem)) && (!istype(H.dna.species, /datum/species/android)) && (!istype(H.dna.species, /datum/species/jelly))) H.Paralyze(20) @@ -63,12 +65,12 @@ new instrument(T) else to_chat(H, span_boldwarning("The spooky gods forgot to ship your instrument. Better luck next unlife.")) - to_chat(H, span_boldnotice("You are the spooky skeleton!")) + to_chat(H, span_boldnotice("You are a spooky skeleton!")) to_chat(H, span_boldnotice("A new life and identity has begun. Help your fellow skeletons into bringing out the spooky-pocalypse. You haven't forgotten your past life, and are still beholden to past loyalties.")) change_name(H) //time for a new name! /datum/element/spooky/proc/change_name(mob/living/carbon/human/spooked) - var/skeleton_name = sanitize_name(tgui_input_text(spooked, "Enter your new skeleton name", "Spookifier", spooked.real_name, MAX_NAME_LEN)) + var/skeleton_name = spooked.client ? sanitize_name(tgui_input_text(spooked, "Enter your new skeleton name", "Spookifier", spooked.real_name, MAX_NAME_LEN)) : null if(!skeleton_name) - skeleton_name = "spooky skeleton" + skeleton_name = "\improper spooky skeleton" spooked.fully_replace_character_name(null, skeleton_name) diff --git a/code/datums/elements/strippable.dm b/code/datums/elements/strippable.dm index 18dffff6aedff..1b932ce066590 100644 --- a/code/datums/elements/strippable.dm +++ b/code/datums/elements/strippable.dm @@ -38,9 +38,10 @@ if (user == source) return - if (over != user) return + if(!user.can_perform_action(source, FORBID_TELEKINESIS_REACH | ALLOW_RESTING)) + return // Cyborgs buckle people by dragging them onto them, unless in combat mode. if (iscyborg(user)) @@ -51,6 +52,11 @@ if (!isnull(should_strip_proc_path) && !call(source, should_strip_proc_path)(user)) return + if (isliving(source)) + var/mob/living/mob = source + if (mob.can_be_held && (user.grab_state == GRAB_AGGRESSIVE) && (user.pulling == source)) + return + var/datum/strip_menu/strip_menu = LAZYACCESS(strip_menus, source) if (isnull(strip_menu)) @@ -58,6 +64,7 @@ LAZYSET(strip_menus, source, strip_menu) INVOKE_ASYNC(strip_menu, TYPE_PROC_REF(/datum/, ui_interact), user) + return COMPONENT_CANCEL_MOUSEDROP_ONTO /// A representation of an item that can be stripped down /datum/strippable_item diff --git a/code/datums/elements/tool_flash.dm b/code/datums/elements/tool_flash.dm index fd7c298d6c54e..f17d60970bf58 100644 --- a/code/datums/elements/tool_flash.dm +++ b/code/datums/elements/tool_flash.dm @@ -34,4 +34,4 @@ SIGNAL_HANDLER if(user && get_dist(get_turf(source), get_turf(user)) <= 1) - user.flash_act(min(flash_strength,1)) + user.flash_act(max(flash_strength,1)) diff --git a/code/datums/elements/wall_walker.dm b/code/datums/elements/wall_walker.dm index 92ac3318c1287..abea9db3af8da 100644 --- a/code/datums/elements/wall_walker.dm +++ b/code/datums/elements/wall_walker.dm @@ -4,16 +4,20 @@ argument_hash_start_idx = 2 /// What kind of walls can we pass through? var/wall_type + /// What trait on turfs allows us to pass through? Can be used as OR if wall_type is null, or AND if it's set. + var/or_trait /datum/element/wall_walker/Attach( datum/target, wall_type = /turf/closed/wall, + or_trait, ) . = ..() if (!isliving(target)) return ELEMENT_INCOMPATIBLE src.wall_type = wall_type + src.or_trait = or_trait RegisterSignal(target, COMSIG_LIVING_WALL_BUMP, PROC_REF(try_pass_wall)) RegisterSignal(target, COMSIG_LIVING_WALL_EXITED, PROC_REF(exit_wall)) @@ -23,7 +27,10 @@ /// If the wall is of the proper type, pass into it and keep hold on whatever you're pulling /datum/element/wall_walker/proc/try_pass_wall(mob/living/passing_mob, turf/closed/bumped_wall) - if(!istype(bumped_wall, wall_type)) + if(wall_type && !istype(bumped_wall, wall_type)) + return + + if(or_trait && !HAS_TRAIT(bumped_wall, or_trait)) return var/atom/movable/stored_pulling = passing_mob.pulling diff --git a/code/datums/elements/wearable_client_colour.dm b/code/datums/elements/wearable_client_colour.dm new file mode 100644 index 0000000000000..8757dd1098cd5 --- /dev/null +++ b/code/datums/elements/wearable_client_colour.dm @@ -0,0 +1,121 @@ +/// An element that adds a client colour to the wearer when equipped to the right slot, under the right conditions. +/datum/element/wearable_client_colour + element_flags = ELEMENT_BESPOKE + argument_hash_start_idx = 2 + ///The typepath of the client_colour added when worn in the appropriate slot(s) + var/datum/client_colour/colour_type + ///The slot(s) that enable the client colour + var/equip_slots = NONE + ///For items that want costumizable client colours + var/custom_colour + ///if forced is false, we check that the user has the TRAIT_SEE_WORN_COLOURS before adding the colour. + var/forced = FALSE + ///On examine, it'll tell which you have to press to toggle TRAIT_SEE_WORN_COLOURS. + var/key_info = "Figure it out yourself how" + +/datum/element/wearable_client_colour/Attach(obj/item/target, colour_type, equip_slots, custom_colour, forced = FALSE, comsig_toggle = COMSIG_CLICK_ALT) + . = ..() + if(!isitem(target)) + return ELEMENT_INCOMPATIBLE + + RegisterSignal(target, COMSIG_ITEM_EQUIPPED, PROC_REF(on_equipped)) + RegisterSignal(target, COMSIG_ITEM_DROPPED, PROC_REF(on_dropped)) + + src.colour_type = colour_type + src.equip_slots = equip_slots + src.custom_colour = custom_colour + src.forced = forced + + if(!forced) + switch(comsig_toggle) + if(COMSIG_CLICK_ALT) + key_info = EXAMINE_HINT("Alt-Click") + if(COMSIG_CLICK_ALT_SECONDARY) + key_info = EXAMINE_HINT("Right-Alt-Click") + if(COMSIG_CLICK_CTRL) + key_info = EXAMINE_HINT("Ctrl-Click") + if(COMSIG_CLICK_CTRL_SHIFT) + key_info = EXAMINE_HINT("Ctrl-Shift-Click") + else + stack_trace("Unsupported comsig_toggle arg value ([comsig_toggle]) for [type], defaulting to [COMSIG_CLICK_ALT]") + key_info = EXAMINE_HINT("Alt-Click") + comsig_toggle = COMSIG_CLICK_ALT + RegisterSignal(target, comsig_toggle, PROC_REF(toggle_see_worn_colors)) + RegisterSignal(target, COMSIG_ATOM_EXAMINE, PROC_REF(on_examine)) + + if(ismob(target.loc)) + var/mob/wearer = target.loc + if(wearer.get_slot_by_item(target) & equip_slots) + try_client_colour(wearer) + +/datum/element/wearable_client_colour/Detach(obj/item/source) + var/list/fairly_long_list = list( + COMSIG_ITEM_EQUIPPED, + COMSIG_ITEM_DROPPED, + COMSIG_CLICK_ALT, + COMSIG_CLICK_ALT_SECONDARY, + COMSIG_CLICK_CTRL, + COMSIG_CLICK_CTRL_SHIFT, + COMSIG_ATOM_EXAMINE, + ) + UnregisterSignal(source, fairly_long_list) + if(ismob(source.loc)) + var/mob/wearer = source.loc + if(wearer.get_slot_by_item(source) & equip_slots) + remove_client_colour(wearer) + return ..() + +/datum/element/wearable_client_colour/proc/on_equipped(obj/item/source, mob/equipper, slot) + SIGNAL_HANDLER + if(slot & equip_slots) + try_client_colour(equipper) + +/datum/element/wearable_client_colour/proc/on_dropped(obj/item/source, mob/dropper) + SIGNAL_HANDLER + remove_client_colour(dropper) + +/datum/element/wearable_client_colour/proc/try_client_colour(mob/equipper) + if(!forced) + RegisterSignal(equipper, SIGNAL_ADDTRAIT(TRAIT_SEE_WORN_COLOURS), PROC_REF(on_trait_added)) + RegisterSignal(equipper, SIGNAL_REMOVETRAIT(TRAIT_SEE_WORN_COLOURS), PROC_REF(on_trait_removed)) + if(!HAS_TRAIT(equipper, TRAIT_SEE_WORN_COLOURS)) + return + apply_client_colour(equipper) + +/datum/element/wearable_client_colour/proc/on_trait_added(mob/source, trait) + SIGNAL_HANDLER + apply_client_colour(source) + +/datum/element/wearable_client_colour/proc/apply_client_colour(mob/equipper) + var/datum/client_colour/colour_to_add = colour_type + if(custom_colour) + colour_to_add = new colour_to_add + colour_to_add.colour = custom_colour + equipper.add_client_colour(colour_to_add) + +/datum/element/wearable_client_colour/proc/on_trait_removed(mob/source, trait) + SIGNAL_HANDLER + source.remove_client_colour(colour_type) + +/datum/element/wearable_client_colour/proc/remove_client_colour(mob/dropper) + if(!forced) + UnregisterSignal(dropper, list(SIGNAL_ADDTRAIT(TRAIT_SEE_WORN_COLOURS), SIGNAL_REMOVETRAIT(TRAIT_SEE_WORN_COLOURS))) + if(!HAS_TRAIT(dropper, TRAIT_SEE_WORN_COLOURS)) + return + dropper.remove_client_colour(colour_type) + +/datum/element/wearable_client_colour/proc/toggle_see_worn_colors(obj/item/source, mob/clicker) + SIGNAL_HANDLER + if(source.loc != clicker || HAS_TRAIT(clicker, TRAIT_INCAPACITATED)) + return + if(HAS_TRAIT(clicker, TRAIT_SEE_WORN_COLOURS)) + REMOVE_TRAIT(clicker, TRAIT_SEE_WORN_COLOURS, CLOTHING_TRAIT) + clicker.balloon_alert(clicker, "glasses colors disabled") + else + ADD_TRAIT(clicker, TRAIT_SEE_WORN_COLOURS, CLOTHING_TRAIT) + clicker.balloon_alert(clicker, "glasses colors enabled") + return CLICK_ACTION_SUCCESS + +/datum/element/wearable_client_colour/proc/on_examine(obj/item/source, mob/user, list/examine_texts) + SIGNAL_HANDLER + examine_texts += span_info("While holding or wearing it, [key_info] to toggle on/off the screen color from glasses and such.") diff --git a/code/datums/emotes.dm b/code/datums/emotes.dm index 36d405450af15..7006d6d6daa71 100644 --- a/code/datums/emotes.dm +++ b/code/datums/emotes.dm @@ -38,8 +38,6 @@ var/emote_type = EMOTE_VISIBLE /// Checks if the mob can use its hands before performing the emote. var/hands_use_check = FALSE - /// Will only work if the emote is EMOTE_AUDIBLE. - var/muzzle_ignore = FALSE /// Types that are allowed to use that emote. var/list/mob_type_allowed_typecache = /mob /// Types that are NOT allowed to use that emote. @@ -90,7 +88,7 @@ /datum/emote/proc/run_emote(mob/user, params, type_override, intentional = FALSE) if(!can_run_emote(user, TRUE, intentional)) return FALSE - if(SEND_SIGNAL(user, COMSIG_MOB_PRE_EMOTED, key, params, type_override, intentional) & COMPONENT_CANT_EMOTE) + if(SEND_SIGNAL(user, COMSIG_MOB_PRE_EMOTED, key, params, type_override, intentional, src) & COMPONENT_CANT_EMOTE) return TRUE // We don't return FALSE because the error output would be incorrect, provide your own if necessary. var/msg = select_message_type(user, message, intentional) if(params && message_param) @@ -259,8 +257,6 @@ return . var/mob/living/living_user = user - if(!muzzle_ignore && user.is_muzzled() && emote_type & EMOTE_AUDIBLE) - return "makes a [pick("strong ", "weak ", "")]noise." if(HAS_MIND_TRAIT(user, TRAIT_MIMING) && message_mime) . = message_mime if(isalienadult(user) && message_alien) @@ -338,9 +334,7 @@ * Returns a bool about whether or not the user should play a sound when performing the emote. */ /datum/emote/proc/should_play_sound(mob/user, intentional = FALSE) - if(emote_type & EMOTE_AUDIBLE && !muzzle_ignore) - if(user.is_muzzled()) - return FALSE + if(emote_type & EMOTE_AUDIBLE && !hands_use_check) if(HAS_TRAIT(user, TRAIT_MUTE)) return FALSE if(ishuman(user)) diff --git a/code/datums/greyscale/README.md b/code/datums/greyscale/README.md index 65f5c488790bf..9ff6bbca1d189 100644 --- a/code/datums/greyscale/README.md +++ b/code/datums/greyscale/README.md @@ -63,7 +63,7 @@ In this example, we start off by creating a sprite specified by a different conf The first of the two in the inner group is an "icon_state", this means that the icon will be retrieved from the associated dmi file using the "icon_state" key. -Note that you don't need to give colors to every layer if the layer does not need any colors applied to it, such as if it's a pre-colored component. +Note that you don't need to give colors to every layer if the layer does not need any colors applied to it, such as if it's a pre-colored component. In this example, the last layer is one such example, referencing a separately colored config. "blend_mode" and "color_ids" are special, all layer types have them. The blend mode is what controls how that layer's finished product gets merged together with the rest of the sprite. The color ids control what colors are passed in to the layer. @@ -128,7 +128,7 @@ While creating a greyscale config, be sure to take subtypes into account! Rather ```c /datum/greyscale_config/tablet name = "PDA" - icon_file = 'icons/obj/modular_pda.dmi' + icon_file = 'icons/obj/devices/modular_pda.dmi' json_config = 'code/datums/greyscale/json_configs/pda.json' /datum/greyscale_config/tablet/chaplain diff --git a/code/datums/greyscale/config_types/greyscale_configs/greyscale_items.dm b/code/datums/greyscale/config_types/greyscale_configs/greyscale_items.dm index 6b9465bf46af0..a3866971aae5f 100644 --- a/code/datums/greyscale/config_types/greyscale_configs/greyscale_items.dm +++ b/code/datums/greyscale/config_types/greyscale_configs/greyscale_items.dm @@ -122,7 +122,7 @@ /datum/greyscale_config/tablet name = "PDA" - icon_file = 'icons/obj/modular_pda.dmi' + icon_file = 'icons/obj/devices/modular_pda.dmi' json_config = 'code/datums/greyscale/json_configs/pda.json' /datum/greyscale_config/tablet/chaplain @@ -255,7 +255,7 @@ /datum/greyscale_config/vape name = "Vape" - icon_file = 'icons/obj/clothing/masks.dmi' + icon_file = 'icons/obj/cigarettes.dmi' json_config = 'code/datums/greyscale/json_configs/vape.json' /datum/greyscale_config/vape/worn diff --git a/code/datums/id_trim/jobs.dm b/code/datums/id_trim/jobs.dm index cfa608011bdf9..4d4c44138e0c2 100644 --- a/code/datums/id_trim/jobs.dm +++ b/code/datums/id_trim/jobs.dm @@ -545,11 +545,13 @@ ACCESS_MORGUE, ACCESS_RESEARCH, ACCESS_SCIENCE, + ACCESS_XENOBIOLOGY, ) extra_access = list( ACCESS_ROBOTICS, ACCESS_TECH_STORAGE, - ACCESS_XENOBIOLOGY, + ACCESS_ORDNANCE, + ACCESS_ORDNANCE_STORAGE, ) template_access = list( ACCESS_CAPTAIN, @@ -960,6 +962,8 @@ ACCESS_GENETICS, ACCESS_XENOBIOLOGY, ACCESS_MORGUE_SECURE, + ACCESS_ORDNANCE, + ACCESS_ORDNANCE_STORAGE, ) template_access = list( ACCESS_CAPTAIN, diff --git a/code/datums/id_trim/outfits.dm b/code/datums/id_trim/outfits.dm index 2e7aebff26a1b..a2944a469f43e 100644 --- a/code/datums/id_trim/outfits.dm +++ b/code/datums/id_trim/outfits.dm @@ -62,6 +62,7 @@ trim_state = "trim_bitavatar" department_color = COLOR_BLACK subdepartment_color = COLOR_GREEN + sechud_icon_state = SECHUD_BITAVATAR /// Trim for cyber police in the Virtual Domain. /datum/id_trim/cyber_police diff --git a/code/datums/id_trim/ruins.dm b/code/datums/id_trim/ruins.dm index de58590ba8a9f..36284e06b72c4 100644 --- a/code/datums/id_trim/ruins.dm +++ b/code/datums/id_trim/ruins.dm @@ -27,7 +27,7 @@ /// Trim for the oldstation ruin/Charlie station to access APCs and other equipment /datum/id_trim/away/old/equipment - access = list(ACCESS_AWAY_GENERAL, ACCESS_ENGINEERING, ACCESS_ENGINE_EQUIP) + access = list(ACCESS_AWAY_GENERAL, ACCESS_AWAY_ENGINEERING, ACCESS_ENGINEERING, ACCESS_ENGINE_EQUIP) assignment = "Engine Equipment Access" /// Trim for the oldstation ruin/Charlie station to access robots, and downloading of paper publishing software for experiments diff --git a/code/datums/instability_meltdown.dm b/code/datums/instability_meltdown.dm new file mode 100644 index 0000000000000..d8e6fbd77ac9e --- /dev/null +++ b/code/datums/instability_meltdown.dm @@ -0,0 +1,163 @@ +/// A possible genetic meltdown that occurs when someone exceeds 100 genetic instability +/datum/instability_meltdown + /// How likely a meltdown is to be picked + var/meltdown_weight = 1 + /// If this meltdown is considered "fatal" or not + var/fatal = FALSE + /// Used to ensure that abstract subtypes do not get picked + var/abstract_type = /datum/instability_meltdown + +/// Code that runs when this meltdown is picked +/datum/instability_meltdown/proc/meltdown(mob/living/carbon/human/victim) + return + +// Nonfatal meltdowns + +/// Turns you into a monkey +/datum/instability_meltdown/monkey + +/datum/instability_meltdown/monkey/meltdown(mob/living/carbon/human/victim) + victim.monkeyize() + +/// Gives you brain trauma that makes your legs disfunctional and gifts you a wheelchair +/datum/instability_meltdown/paraplegic + +/datum/instability_meltdown/paraplegic/meltdown(mob/living/carbon/human/victim) + victim.gain_trauma(/datum/brain_trauma/severe/paralysis/paraplegic) + new /obj/vehicle/ridden/wheelchair(get_turf(victim)) + to_chat(victim, span_warning("My flesh turned into a wheelchair and I can't feel my legs.")) + +/// Turns you into a corgi +/datum/instability_meltdown/corgi + +/datum/instability_meltdown/corgi/meltdown(mob/living/carbon/human/victim) + victim.corgize() + +/// Does nothing +/datum/instability_meltdown/alright + +/datum/instability_meltdown/alright/meltdown(mob/living/carbon/human/victim) + to_chat(victim, span_notice("Oh, I actually feel quite alright!")) + +/// Gives you the same text as above but now when you're hit you take 200 times more damage +/datum/instability_meltdown/not_alright + +/datum/instability_meltdown/not_alright/meltdown(mob/living/carbon/human/victim) + to_chat(victim, span_notice("Oh, I actually feel quite alright!")) + victim.physiology.damage_resistance -= 20000 //you thought + victim.log_message("has received x200 damage multiplier from [type] genetic meltdown") + +/// Turns you into a slime +/datum/instability_meltdown/slime + +/datum/instability_meltdown/slime/meltdown(mob/living/carbon/human/victim) + to_chat(victim, span_notice("Oh, I actually feel quite alright!")) + victim.reagents.add_reagent(/datum/reagent/aslimetoxin, 10) + +/// Makes you phase through walls into a random direction +/datum/instability_meltdown/yeet + +/datum/instability_meltdown/yeet/meltdown(mob/living/carbon/human/victim) + victim.apply_status_effect(/datum/status_effect/go_away) + +/// Makes you take cell damage and gibs you after some time +/datum/instability_meltdown/decloning + +/datum/instability_meltdown/decloning/meltdown(mob/living/carbon/human/victim) + to_chat(src, span_notice("Oh, I actually feel quite alright!")) + victim.ForceContractDisease(new /datum/disease/decloning) // slow acting, non-viral GBS + +/// Makes you vomit up a random organ +/datum/instability_meltdown/organ_vomit + +/datum/instability_meltdown/organ_vomit/meltdown(mob/living/carbon/human/victim) + var/list/elligible_organs = list() + for(var/obj/item/organ/internal/internal_organ in victim.organs) //make sure we dont get an implant or cavity item + elligible_organs += internal_organ + victim.vomit(VOMIT_CATEGORY_DEFAULT, lost_nutrition = 10) + if(!elligible_organs.len) + return + var/obj/item/organ/picked_organ = pick(elligible_organs) + picked_organ.Remove(src) + victim.visible_message(span_danger("[victim] vomits up [p_their()] [picked_organ.name]!"), span_danger("You vomit up your [picked_organ.name]")) //no "vomit up your heart" + picked_organ.forceMove(victim.drop_location()) + if(prob(20)) + picked_organ.animate_atom_living() + +/// Turns you into a snail +/datum/instability_meltdown/snail + meltdown_weight = 2 + +/datum/instability_meltdown/snail/meltdown(mob/living/carbon/human/victim) + to_chat(victim, span_notice("Oh, I actually feel quite alright!")) + victim.ForceContractDisease(new/datum/disease/gastrolosis()) + +/// Turns you into the ultimate lifeform +/datum/instability_meltdown/crab + +/datum/instability_meltdown/crab/meltdown(mob/living/carbon/human/victim) + to_chat(victim, span_notice("Your DNA mutates into the ultimate biological form!")) + victim.crabize() + +// Fatal meltdowns + +/datum/instability_meltdown/fatal + fatal = TRUE + abstract_type = /datum/instability_meltdown/fatal + +/// Instantly gibs you +/datum/instability_meltdown/fatal/gib + +/datum/instability_meltdown/fatal/gib/meltdown(mob/living/carbon/human/victim) + victim.investigate_log("has been gibbed by DNA instability.", INVESTIGATE_DEATHS) + victim.gib(DROP_ALL_REMAINS) + +/// Dusts you +/datum/instability_meltdown/fatal/dust + +/datum/instability_meltdown/fatal/dust/meltdown(mob/living/carbon/human/victim) + victim.investigate_log("has been dusted by DNA instability.", INVESTIGATE_DEATHS) + victim.dust() + +/// Turns you into a statue +/datum/instability_meltdown/fatal/petrify + +/datum/instability_meltdown/fatal/petrify/meltdown(mob/living/carbon/human/victim) + victim.investigate_log("has been transformed into a statue by DNA instability.", INVESTIGATE_DEATHS) + victim.death() + victim.petrify(statue_timer = INFINITY, save_brain = FALSE) + victim.ghostize(FALSE) + +/// Either dismembers you, or if unable to, gibs you +/datum/instability_meltdown/fatal/dismember + +/datum/instability_meltdown/fatal/dismember/meltdown(mob/living/carbon/human/victim) + var/obj/item/bodypart/part = victim.get_bodypart(pick(BODY_ZONE_CHEST,BODY_ZONE_HEAD)) + if(part) + part.dismember() + return + victim.investigate_log("has been gibbed by DNA instability.", INVESTIGATE_DEATHS) + victim.gib(DROP_ALL_REMAINS) + +/// Turns you into a skeleton, with a high chance of killing you soon after +/datum/instability_meltdown/fatal/skeletonize + +/datum/instability_meltdown/fatal/skeletonize/meltdown(mob/living/carbon/human/victim) + victim.visible_message(span_warning("[victim]'s skin melts off!"), span_boldwarning("Your skin melts off!")) + victim.spawn_gibs() + victim.set_species(/datum/species/skeleton) + if(prob(90)) + addtimer(CALLBACK(victim, TYPE_PROC_REF(/mob/living, death)), 3 SECONDS) + +/// Makes you look up and melts out your eyes +/datum/instability_meltdown/fatal/ceiling + +/datum/instability_meltdown/fatal/ceiling/meltdown(mob/living/carbon/human/victim) + to_chat(victim, span_phobia("LOOK UP!")) + addtimer(CALLBACK(victim, TYPE_PROC_REF(/mob/living/carbon/human, something_horrible_mindmelt)), 3 SECONDS) + +/// Slowly turns you into a psyker +/datum/instability_meltdown/fatal/psyker + +/datum/instability_meltdown/fatal/psyker/meltdown(mob/living/carbon/human/victim) + victim.slow_psykerize() diff --git a/code/datums/keybinding/client.dm b/code/datums/keybinding/client.dm index 81b9bb6c287a3..f36645692c992 100644 --- a/code/datums/keybinding/client.dm +++ b/code/datums/keybinding/client.dm @@ -32,6 +32,20 @@ winset(user, null, "command=.auto") return TRUE +/datum/keybinding/client/toggle_fullscreen + hotkey_keys = list("F11") + name = "toggle_fullscreen" + full_name = "Toggle Fullscreen" + description = "Makes the game window fullscreen." + keybind_signal = COMSIG_KB_CLIENT_FULLSCREEN_DOWN + +/datum/keybinding/client/toggle_fullscreen/down(client/user) + . = ..() + if(.) + return + user.toggle_fullscreen() + return TRUE + /datum/keybinding/client/minimal_hud hotkey_keys = list("F12") name = "minimal_hud" diff --git a/code/datums/lazy_template.dm b/code/datums/lazy_template.dm index 3b19a17a179da..7b18ff7225f03 100644 --- a/code/datums/lazy_template.dm +++ b/code/datums/lazy_template.dm @@ -15,6 +15,8 @@ var/map_name /// place_on_top: Whether to use /turf/proc/PlaceOnTop rather than /turf/proc/ChangeTurf var/place_on_top = FALSE + /// type of turf reservation + var/turf_reservation_type = /datum/turf_reservation /datum/lazy_template/New() reservations = list() @@ -62,6 +64,7 @@ width, height, parsed_template.parsed_bounds[MAP_MAXZ], + reservation_type = turf_reservation_type, ) if(!reservation) CRASH("Failed to reserve a block for lazy template: '[key]'") diff --git a/code/datums/looping_sounds/machinery_sounds.dm b/code/datums/looping_sounds/machinery_sounds.dm index c751c676ff5ca..2d5e3564e6d09 100644 --- a/code/datums/looping_sounds/machinery_sounds.dm +++ b/code/datums/looping_sounds/machinery_sounds.dm @@ -79,6 +79,15 @@ end_sound = 'sound/machines/microwave/microwave-end.ogg' volume = 90 +/datum/looping_sound/lathe_print + mid_sounds = list('sound/machines/lathe/lathe_print.ogg' = 1) + mid_length = 20 + volume = 50 + vary = TRUE + ignore_walls = FALSE + falloff_distance = 1 + mid_length_vary = 10 + /datum/looping_sound/jackpot mid_length = 11 mid_sounds = list('sound/machines/roulettejackpot.ogg' = 1) @@ -120,7 +129,7 @@ mid_sounds = list('sound/machines/gravgen/gravgen_mid1.ogg' = 1, 'sound/machines/gravgen/gravgen_mid2.ogg' = 1, 'sound/machines/gravgen/gravgen_mid3.ogg' = 1, 'sound/machines/gravgen/gravgen_mid4.ogg' = 1) mid_length = 1.8 SECONDS extra_range = 10 - volume = 40 + volume = 20 falloff_distance = 5 falloff_exponent = 20 @@ -151,3 +160,18 @@ 'sound/machines/terminal_button08.ogg' = 1, ) mid_length = 0.3 SECONDS + +/datum/looping_sound/soup + mid_sounds = list( + 'sound/effects/soup_boil1.ogg' = 1, + 'sound/effects/soup_boil2.ogg' = 1, + 'sound/effects/soup_boil3.ogg' = 1, + 'sound/effects/soup_boil4.ogg' = 1, + 'sound/effects/soup_boil5.ogg' = 1, + ) + mid_length = 3 SECONDS + volume = 80 + end_sound = 'sound/effects/soup_boil_end.ogg' + end_volume = 60 + extra_range = MEDIUM_RANGE_SOUND_EXTRARANGE + falloff_exponent = 4 diff --git a/code/datums/mapgen/CaveGenerator.dm b/code/datums/mapgen/CaveGenerator.dm index 7ace9dd0f2465..be93e9668e547 100644 --- a/code/datums/mapgen/CaveGenerator.dm +++ b/code/datums/mapgen/CaveGenerator.dm @@ -1,3 +1,6 @@ +/// The random offset applied to square coordinates, causes intermingling at biome borders +#define BIOME_RANDOM_SQUARE_DRIFT 2 + /datum/map_generator/cave_generator var/name = "Cave Generator" ///Weighted list of the types that spawns if the turf is open @@ -28,7 +31,23 @@ var/list/weighted_feature_spawn_list ///Expanded list of extra features that can spawn in the area. Reads from the weighted list var/list/feature_spawn_list - + /// The turf types to replace with a biome-related turf, as typecache. + /// Leave empty for all open turfs (but not closed turfs) to be hijacked. + var/list/biome_accepted_turfs = list() + /// An associative list of biome type to the list of turfs that were + /// generated of that biome specifically. Helps to improve the efficiency + /// of biome-related operations. Is populated through + /// `generate_terrain_with_biomes()`. + var/list/generated_turfs_per_biome = list() + /// 2D list of all biomes based on heat and humidity combos. Associative by + /// `BIOME_X_HEAT` and then by `BIOME_X_HUMIDITY` (i.e. + /// `possible_biomes[BIOME_LOW_HEAT][BIOME_LOWMEDIUM_HUMIDITY]`). + /// Check /datum/map_generator/cave_generator/jungle for an example + /// of how to set it up properly. + var/list/possible_biomes = list() + /// Used to select "zoom" level into the perlin noise, higher numbers + /// result in slower transitions + var/perlin_zoom = 65 ///Base chance of spawning a mob var/mob_spawn_chance = 6 @@ -48,6 +67,7 @@ ///How little neighbours does a alive cell need to die var/death_limit = 3 + /datum/map_generator/cave_generator/New() . = ..() if(!weighted_mob_spawn_list) @@ -87,6 +107,9 @@ if(!(generate_in.area_flags & CAVES_ALLOWED)) return + if(length(possible_biomes)) + return generate_terrain_with_biomes(turfs, generate_in) + var/start_time = REALTIMEOFDAY string_gen = rustg_cnoise_generate("[initial_closed_chance]", "[smoothing_iterations]", "[birth_limit]", "[death_limit]", "[world.maxx]", "[world.maxy]") //Generate the raw CA data @@ -106,7 +129,88 @@ to_chat(world, span_boldannounce("[message]")) log_world(message) + +/** + * This proc handles including biomes in the cave generation. This is slower than + * `generate_terrain()`, so please use it only if you actually need biomes. + * + * This should only be called by `generate_terrain()`, if you have to call this, + * you're probably doing something wrong. + */ +/datum/map_generator/cave_generator/proc/generate_terrain_with_biomes(list/turfs, area/generate_in) + if(!(generate_in.area_flags & CAVES_ALLOWED)) + return + + var/humidity_seed = rand(0, 50000) + var/heat_seed = rand(0, 50000) + + var/start_time = REALTIMEOFDAY + string_gen = rustg_cnoise_generate("[initial_closed_chance]", "[smoothing_iterations]", "[birth_limit]", "[death_limit]", "[world.maxx]", "[world.maxy]") //Generate the raw CA data + + var/humidity_gen = list() + humidity_gen[BIOME_HIGH_HUMIDITY] = rustg_dbp_generate("[humidity_seed]", "60", "75", "[world.maxx]", "-0.1", "1.1") + humidity_gen[BIOME_MEDIUM_HUMIDITY] = rustg_dbp_generate("[humidity_seed]", "60", "75", "[world.maxx]", "-0.3", "-0.1") + + var/heat_gen = list() + heat_gen[BIOME_HIGH_HEAT] = rustg_dbp_generate("[heat_seed]", "60", "75", "[world.maxx]", "-0.1", "1.1") + heat_gen[BIOME_MEDIUM_HEAT] = rustg_dbp_generate("[heat_seed]", "60", "75", "[world.maxx]", "-0.3", "-0.1") + + var/list/expanded_closed_turfs = src.closed_turf_types + var/list/expanded_open_turfs = src.open_turf_types + + for(var/turf/gen_turf as anything in turfs) //Go through all the turfs and generate them + var/closed = string_gen[world.maxx * (gen_turf.y - 1) + gen_turf.x] != "0" + var/new_turf_type = pick(closed ? expanded_closed_turfs : expanded_open_turfs) + + var/datum/biome/selected_biome + + // Here comes the meat of the biome code. + var/drift_x = clamp((gen_turf.x + rand(-BIOME_RANDOM_SQUARE_DRIFT, BIOME_RANDOM_SQUARE_DRIFT)), 1, world.maxx) // / perlin_zoom + var/drift_y = clamp((gen_turf.y + rand(-BIOME_RANDOM_SQUARE_DRIFT, BIOME_RANDOM_SQUARE_DRIFT)), 2, world.maxy) // / perlin_zoom + + // Where we go in the generated string (generated outside of the loop for s p e e d) + var/coordinate = world.maxx * (drift_y - 1) + drift_x + + // Type of humidity zone we're in (LOW-MEDIUM-HIGH) + var/humidity_level = text2num(humidity_gen[BIOME_HIGH_HUMIDITY][coordinate]) ? \ + BIOME_HIGH_HUMIDITY : text2num(humidity_gen[BIOME_MEDIUM_HUMIDITY][coordinate]) ? BIOME_MEDIUM_HUMIDITY : BIOME_LOW_HUMIDITY + // Type of heat zone we're in (LOW-MEDIUM-HIGH) + var/heat_level = text2num(heat_gen[BIOME_HIGH_HEAT][coordinate]) ? \ + BIOME_HIGH_HEAT : text2num(heat_gen[BIOME_MEDIUM_HEAT][coordinate]) ? BIOME_MEDIUM_HEAT : BIOME_LOW_HEAT + + selected_biome = possible_biomes[heat_level][humidity_level] + + // Currently, we only affect open turfs, because biomes don't currently + // have a definition for biome-specific closed turfs. + if((!length(biome_accepted_turfs) && !closed) || biome_accepted_turfs[new_turf_type]) + LAZYADD(generated_turfs_per_biome[selected_biome], gen_turf) + + else + // The assumption is this will be faster then changeturf, and changeturf isn't required since by this point + // The old tile hasn't got the chance to init yet + var/turf/new_turf = new new_turf_type(gen_turf) + + if(gen_turf.turf_flags & NO_RUINS) + new_turf.turf_flags |= NO_RUINS + + CHECK_TICK + + for(var/biome in generated_turfs_per_biome) + var/datum/biome/generating_biome = SSmapping.biomes[biome] + + var/list/turf/generated_turfs = generating_biome.generate_turfs_for_terrain(generated_turfs_per_biome[biome]) + + generated_turfs_per_biome[biome] = generated_turfs + + var/message = "[name] terrain generation finished in [(REALTIMEOFDAY - start_time)/10]s!" + to_chat(world, span_boldannounce("[message]")) + log_world(message) + + /datum/map_generator/cave_generator/populate_terrain(list/turfs, area/generate_in) + if(length(possible_biomes)) + return populate_terrain_with_biomes(turfs, generate_in) + // Area var pullouts to make accessing in the loop faster var/flora_allowed = (generate_in.area_flags & FLORA_ALLOWED) && length(flora_spawn_list) var/feature_allowed = (generate_in.area_flags & FLORA_ALLOWED) && length(feature_spawn_list) @@ -122,29 +226,30 @@ // If we've spawned something yet var/spawned_something = FALSE - ///Spawning isn't done in procs to save on overhead on the 60k turfs we're going through. - //FLORA SPAWNING HERE - if(flora_allowed && prob(flora_spawn_chance)) - var/flora_type = pick(flora_spawn_list) - new flora_type(target_turf) - spawned_something = TRUE - - //FEATURE SPAWNING HERE - //we may have generated something from the flora list on the target turf, so let's not place - //a feature here if that's the case (because it would look stupid) - if(feature_allowed && !spawned_something && prob(feature_spawn_chance)) - var/can_spawn = TRUE + if(!(target_turf.turf_flags & TURF_BLOCKS_POPULATE_TERRAIN_FLORAFEATURES)) + ///Spawning isn't done in procs to save on overhead on the 60k turfs we're going through. + //FLORA SPAWNING HERE + if(flora_allowed && prob(flora_spawn_chance)) + var/flora_type = pick(flora_spawn_list) + new flora_type(target_turf) + spawned_something = TRUE - var/atom/picked_feature = pick(feature_spawn_list) + //FEATURE SPAWNING HERE + //we may have generated something from the flora list on the target turf, so let's not place + //a feature here if that's the case (because it would look stupid) + if(feature_allowed && !spawned_something && prob(feature_spawn_chance)) + var/can_spawn = TRUE - for(var/obj/structure/existing_feature in range(7, target_turf)) - if(istype(existing_feature, picked_feature)) - can_spawn = FALSE - break + var/atom/picked_feature = pick(feature_spawn_list) - if(can_spawn) - new picked_feature(target_turf) - spawned_something = TRUE + for(var/obj/structure/existing_feature in range(7, target_turf)) + if(istype(existing_feature, picked_feature)) + can_spawn = FALSE + break + + if(can_spawn) + new picked_feature(target_turf) + spawned_something = TRUE //MOB SPAWNING HERE if(mobs_allowed && !spawned_something && prob(mob_spawn_chance)) @@ -193,3 +298,60 @@ var/message = "[name] terrain population finished in [(REALTIMEOFDAY - start_time)/10]s!" to_chat(world, span_boldannounce("[message]")) log_world(message) + + +/** + * This handles the population of terrain with biomes. Should only be called by + * `populate_terrain()`, if you find yourself calling this, you're probably not + * doing it right. + * + * This proc won't do anything if the area we're trying to generate in does not + * have `FLORA_ALLOWED` or `MOB_SPAWN_ALLOWED` in its `area_flags`. + */ +/datum/map_generator/cave_generator/proc/populate_terrain_with_biomes(list/turfs, area/generate_in) + // Area var pullouts to make accessing in the loop faster + var/flora_allowed = (generate_in.area_flags & FLORA_ALLOWED) + var/features_allowed = (generate_in.area_flags & FLORA_ALLOWED) + var/fauna_allowed = (generate_in.area_flags & MOB_SPAWN_ALLOWED) + + var/start_time = REALTIMEOFDAY + + // No sense in doing anything here if nothing is allowed anyway. + if(!flora_allowed && !features_allowed && !fauna_allowed) + var/message = "[name] terrain population finished in [(REALTIMEOFDAY - start_time)/10]s!" + to_chat(world, span_boldannounce("[message]")) + log_world(message) + return + + for(var/biome in generated_turfs_per_biome) + var/datum/biome/generating_biome = SSmapping.biomes[biome] + generating_biome.populate_turfs(generated_turfs_per_biome[biome], flora_allowed, features_allowed, fauna_allowed) + + CHECK_TICK + + var/message = "[name] terrain population finished in [(REALTIMEOFDAY - start_time)/10]s!" + to_chat(world, span_boldannounce("[message]")) + log_world(message) + + +/datum/map_generator/cave_generator/jungle + possible_biomes = list( + BIOME_LOW_HEAT = list( + BIOME_LOW_HUMIDITY = /datum/biome/plains, + BIOME_MEDIUM_HUMIDITY = /datum/biome/mudlands, + BIOME_HIGH_HUMIDITY = /datum/biome/water + ), + BIOME_MEDIUM_HEAT = list( + BIOME_LOW_HUMIDITY = /datum/biome/plains, + BIOME_MEDIUM_HUMIDITY = /datum/biome/jungle/deep, + BIOME_HIGH_HUMIDITY = /datum/biome/jungle + ), + BIOME_HIGH_HEAT = list( + BIOME_LOW_HUMIDITY = /datum/biome/wasteland, + BIOME_MEDIUM_HUMIDITY = /datum/biome/plains, + BIOME_HIGH_HUMIDITY = /datum/biome/jungle/deep + ) + ) + + +#undef BIOME_RANDOM_SQUARE_DRIFT diff --git a/code/datums/mapgen/Cavegens/IcemoonCaves.dm b/code/datums/mapgen/Cavegens/IcemoonCaves.dm index 91348dd5c1783..926c05ce45cf1 100644 --- a/code/datums/mapgen/Cavegens/IcemoonCaves.dm +++ b/code/datums/mapgen/Cavegens/IcemoonCaves.dm @@ -5,16 +5,17 @@ /turf/closed/mineral/gibtonite/ice/icemoon = 4, ) - weighted_mob_spawn_list = list( /mob/living/basic/mining/goldgrub = 10, /mob/living/basic/mining/legion/snow = 50, /mob/living/basic/mining/lobstrosity = 15, /mob/living/basic/mining/wolf = 50, + /obj/effect/spawner/random/lavaland_mob/raptor = 15, /mob/living/simple_animal/hostile/asteroid/polarbear = 30, /obj/structure/spawner/ice_moon = 3, /obj/structure/spawner/ice_moon/polarbear = 3, ) + weighted_flora_spawn_list = list( /obj/structure/flora/ash/chilly = 2, /obj/structure/flora/grass/both/style_random = 6, @@ -22,6 +23,7 @@ /obj/structure/flora/rock/pile/icy/style_random = 2, /obj/structure/flora/tree/pine/style_random = 2, ) + ///Note that this spawn list is also in the lavaland generator weighted_feature_spawn_list = list( /obj/structure/geyser/hollowwater = 10, @@ -65,7 +67,7 @@ ) mob_spawn_chance = 0.2 - weighted_mob_spawn_list = list(/mob/living/basic/deer/ice = 99, /mob/living/basic/tree = 1) + weighted_mob_spawn_list = list(/mob/living/basic/deer/ice = 99, /mob/living/basic/tree = 1, /obj/effect/spawner/random/lavaland_mob/raptor = 15) /datum/map_generator/cave_generator/icemoon/surface/noruins //use this for when you don't want ruins to spawn in a certain area @@ -76,6 +78,8 @@ /mob/living/basic/mining/ice_demon = 100, /mob/living/basic/mining/ice_whelp = 60, /mob/living/basic/mining/legion/snow = 100, + /obj/effect/spawner/random/lavaland_mob/raptor = 25, + /obj/structure/spawner/ice_moon/demonic_portal = 6, /obj/structure/spawner/ice_moon/demonic_portal/ice_whelp = 6, /obj/structure/spawner/ice_moon/demonic_portal/snowlegion = 6, diff --git a/code/datums/mapgen/Cavegens/LavalandGenerator.dm b/code/datums/mapgen/Cavegens/LavalandGenerator.dm index 846e23181e047..47b62ce4a1baf 100644 --- a/code/datums/mapgen/Cavegens/LavalandGenerator.dm +++ b/code/datums/mapgen/Cavegens/LavalandGenerator.dm @@ -10,6 +10,7 @@ /mob/living/basic/mining/bileworm = 20, /mob/living/basic/mining/brimdemon = 20, /mob/living/basic/mining/lobstrosity/lava = 20, + /obj/effect/spawner/random/lavaland_mob/raptor = 15, /mob/living/basic/mining/goldgrub = 10, /obj/structure/spawner/lavaland = 2, /obj/structure/spawner/lavaland/goliath = 3, diff --git a/code/datums/mapgen/biomes/_biome.dm b/code/datums/mapgen/biomes/_biome.dm index 025b904434d2f..a0672059d93ae 100644 --- a/code/datums/mapgen/biomes/_biome.dm +++ b/code/datums/mapgen/biomes/_biome.dm @@ -2,39 +2,221 @@ /datum/biome ///Type of turf this biome creates var/turf_type - ///Chance of having a structure from the flora types list spawn + /// Chance of having a structure from the flora types list spawn var/flora_density = 0 - ///Chance of having a mob from the fauna types list spawn + /// Chance of spawning special features, such as geysers. + var/feature_density = 0 + /// Chance of having a mob from the fauna types list spawn var/fauna_density = 0 - ///list of type paths of objects that can be spawned when the turf spawns flora - var/list/flora_types = list(/obj/structure/flora/grass/jungle/a/style_random) - ///list of type paths of mobs that can be spawned when the turf spawns fauna + /// Weighted list of type paths of flora that can be spawned when the + /// turf spawns flora. + var/list/flora_types = list() + /// Weighted list of extra features that can spawn in the biome, such as + /// geysers. Gets expanded automatically. + var/list/feature_types = list() + /// Weighted list of type paths of fauna that can be spawned when the + /// turf spawns fauna. var/list/fauna_types = list() + +/datum/biome/New() + . = ..() + if(length(flora_types)) + flora_types = expand_weights(fill_with_ones(flora_types)) + + if(length(fauna_types)) + fauna_types = expand_weights(fill_with_ones(fauna_types)) + + if(length(feature_types)) + feature_types = expand_weights(feature_types) + + ///This proc handles the creation of a turf of a specific biome type /datum/biome/proc/generate_turf(turf/gen_turf) gen_turf.ChangeTurf(turf_type, null, CHANGETURF_DEFER_CHANGE) + if(length(flora_types) && prob(flora_density)) + var/obj/structure/flora = pick(flora_types) + new flora(gen_turf) + return + + if(length(feature_types) && prob(feature_density)) + var/atom/picked_feature = pick(feature_types) + new picked_feature(gen_turf) + return + if(length(fauna_types) && prob(fauna_density)) var/mob/fauna = pick(fauna_types) new fauna(gen_turf) - if(length(flora_types) && prob(flora_density)) + +/// This proc handles the creation of a turf of a specific biome type, assuming +/// that the turf has not been initialized yet. Don't call this unless you know +/// what you're doing. +/datum/biome/proc/generate_turf_for_terrain(turf/gen_turf) + var/turf/new_turf = new turf_type(gen_turf) + return new_turf + + +/** + * This proc handles the sequential creation of turfs of a specific biome type + * in order to optimize the generation for large amount of turfs. + * + * Arguments: + * * gen_turfs - List of turfs to use for turf generation. + * + * Returns a new list of turfs that were generated by the biome. + */ +/datum/biome/proc/generate_turfs_for_terrain(list/turf/gen_turfs) + var/list/turf/new_turfs = list() + + for(var/turf/gen_turf as anything in gen_turfs) + var/turf/new_turf = new turf_type(gen_turf) + new_turfs += new_turf + + if(gen_turf.turf_flags & NO_RUINS) + new_turf.turf_flags |= NO_RUINS + + CHECK_TICK + + return new_turfs + + +/// This proc handles populating the given turf based on whether flora, +/// features and fauna are allowed. Does not take megafauna into account. +/datum/biome/proc/populate_turf(turf/target_turf, flora_allowed, features_allowed, fauna_allowed) + if(flora_allowed && length(flora_types) && prob(flora_density)) var/obj/structure/flora = pick(flora_types) - new flora(gen_turf) + new flora(target_turf) + return TRUE + + if(features_allowed && prob(feature_density)) + var/can_spawn = TRUE + + var/atom/picked_feature = pick(feature_types) + + for(var/obj/structure/existing_feature in range(7, target_turf)) + if(istype(existing_feature, picked_feature)) + can_spawn = FALSE + break + + if(can_spawn) + new picked_feature(target_turf) + return TRUE + + if(fauna_allowed && length(fauna_types) && prob(fauna_density)) + var/mob/picked_mob = pick(fauna_types) + + // prevents tendrils spawning in each other's collapse range + if(ispath(picked_mob, /obj/structure/spawner/lavaland)) + for(var/obj/structure/spawner/lavaland/spawn_blocker in range(2, target_turf)) + return FALSE + + // if the random is not a tendril (hopefully meaning it is a mob), avoid spawning if there's another one within 12 tiles + else + var/list/things_in_range = range(12, target_turf) + for(var/mob/living/mob_blocker in things_in_range) + if(ismining(mob_blocker)) + return FALSE + + new picked_mob(target_turf) + return TRUE + + return FALSE + + +/** + * This proc handles populating the given turfs based on whether flora, features + * and fauna are allowed. Does not take megafauna into account. + * + * Does nothing if `flora_allowed`, `features_allowed` and `fauna_allowed` are + * `FALSE`, or if there's no flora, feature or fauna types for the matching + * allowed type. Aka, we return early if the proc wouldn't do anything anyway. + */ +/datum/biome/proc/populate_turfs(list/turf/target_turfs, flora_allowed, features_allowed, fauna_allowed) + if(!(flora_allowed && length(flora_types)) && !(features_allowed && length(feature_types)) && !(fauna_allowed && length(fauna_types))) + return + + + for(var/turf/target_turf as anything in target_turfs) + // We do the CHECK_TICK here because there's a bunch of continue calls + // in this. + CHECK_TICK + + if(flora_allowed && length(flora_types) && prob(flora_density)) + var/obj/structure/flora = pick(flora_types) + new flora(target_turf) + continue + + if(features_allowed && prob(feature_density)) + var/can_spawn = TRUE + + var/atom/picked_feature = pick(feature_types) + + for(var/obj/structure/existing_feature in range(7, target_turf)) + if(istype(existing_feature, picked_feature)) + can_spawn = FALSE + break + + if(can_spawn) + new picked_feature(target_turf) + continue + + if(fauna_allowed && length(fauna_types) && prob(fauna_density)) + var/mob/picked_mob = pick(fauna_types) + + // prevents tendrils spawning in each other's collapse range + if(ispath(picked_mob, /obj/structure/spawner/lavaland)) + for(var/obj/structure/spawner/lavaland/spawn_blocker in range(2, target_turf)) + continue + + // if the random is not a tendril (hopefully meaning it is a mob), avoid spawning if there's another one within 12 tiles + else + var/list/things_in_range = range(12, target_turf) + for(var/mob/living/mob_blocker in things_in_range) + if(ismining(mob_blocker)) + continue + + new picked_mob(target_turf) + /datum/biome/mudlands turf_type = /turf/open/misc/dirt/jungle/dark - flora_types = list(/obj/structure/flora/grass/jungle/a/style_random,/obj/structure/flora/grass/jungle/b/style_random, /obj/structure/flora/rock/pile/jungle/style_random, /obj/structure/flora/rock/pile/jungle/large/style_random) + flora_types = list( + /obj/structure/flora/grass/jungle/a/style_random = 1, + /obj/structure/flora/grass/jungle/b/style_random = 1, + /obj/structure/flora/rock/pile/jungle/style_random = 1, + /obj/structure/flora/rock/pile/jungle/large/style_random = 1, + ) flora_density = 3 /datum/biome/plains turf_type = /turf/open/misc/grass/jungle - flora_types = list(/obj/structure/flora/grass/jungle/a/style_random,/obj/structure/flora/grass/jungle/b/style_random, /obj/structure/flora/tree/jungle/style_random, /obj/structure/flora/rock/pile/jungle/style_random, /obj/structure/flora/bush/jungle/a/style_random, /obj/structure/flora/bush/jungle/b/style_random, /obj/structure/flora/bush/jungle/c/style_random, /obj/structure/flora/bush/large/style_random, /obj/structure/flora/rock/pile/jungle/large/style_random) + flora_types = list( + /obj/structure/flora/grass/jungle/a/style_random = 1, + /obj/structure/flora/grass/jungle/b/style_random = 1, + /obj/structure/flora/tree/jungle/style_random = 1, + /obj/structure/flora/rock/pile/jungle/style_random = 1, + /obj/structure/flora/bush/jungle/a/style_random = 1, + /obj/structure/flora/bush/jungle/b/style_random = 1, + /obj/structure/flora/bush/jungle/c/style_random = 1, + /obj/structure/flora/bush/large/style_random = 1, + /obj/structure/flora/rock/pile/jungle/large/style_random = 1, + ) flora_density = 15 /datum/biome/jungle turf_type = /turf/open/misc/grass/jungle - flora_types = list(/obj/structure/flora/grass/jungle/a/style_random,/obj/structure/flora/grass/jungle/b/style_random, /obj/structure/flora/tree/jungle/style_random, /obj/structure/flora/rock/pile/jungle/style_random, /obj/structure/flora/bush/jungle/a/style_random, /obj/structure/flora/bush/jungle/b/style_random, /obj/structure/flora/bush/jungle/c/style_random, /obj/structure/flora/bush/large/style_random, /obj/structure/flora/rock/pile/jungle/large/style_random) + flora_types = list( + /obj/structure/flora/grass/jungle/a/style_random = 1, + /obj/structure/flora/grass/jungle/b/style_random = 1, + /obj/structure/flora/tree/jungle/style_random = 1, + /obj/structure/flora/rock/pile/jungle/style_random = 1, + /obj/structure/flora/bush/jungle/a/style_random = 1, + /obj/structure/flora/bush/jungle/b/style_random = 1, + /obj/structure/flora/bush/jungle/c/style_random = 1, + /obj/structure/flora/bush/large/style_random = 1, + /obj/structure/flora/rock/pile/jungle/large/style_random = 1, + ) flora_density = 40 /datum/biome/jungle/deep diff --git a/code/datums/martial/boxing.dm b/code/datums/martial/boxing.dm index 8e20dfbef9cb9..4e6400163a34b 100644 --- a/code/datums/martial/boxing.dm +++ b/code/datums/martial/boxing.dm @@ -93,7 +93,7 @@ attacker.do_attack_animation(defender, ATTACK_EFFECT_PUNCH) - //Determines damage dealt on a punch. Against a boxing defender, we apply our skill bonus. + // Determines damage dealt on a punch. Against a boxing defender, we apply our skill bonus. var/damage = rand(lower_force, upper_force) if(honor_check(defender)) @@ -135,6 +135,9 @@ to_chat(attacker, span_danger("You [current_atk_verbed] [defender]!")) + // Determines the total amount of experience earned per punch + var/experience_earned = round(damage * 0.25, 0.1) + defender.apply_damage(damage, damage_type, affecting, armor_block) log_combat(attacker, defender, "punched (boxing) ") @@ -181,9 +184,11 @@ to_chat(attacker, span_danger("You stagger [defender] with a haymaker!")) log_combat(attacker, defender, "staggered (boxing) ") + experience_earned *= 2 //Double our experience gain on a crit hit + playsound(defender, 'sound/effects/coin2.ogg', 40, TRUE) new /obj/effect/temp_visual/crit(get_turf(defender)) - skill_experience_adjustment(attacker, (damage/lower_force)) //double experience for a successful crit + skill_experience_adjustment(attacker, experience_earned) //double experience for a successful crit return TRUE @@ -203,7 +208,7 @@ var/gravity_modifier = boxer.has_gravity() > STANDARD_GRAVITY ? 1 : 0.5 //You gotta sleep before you get any experience! - boxer.mind?.adjust_experience(/datum/skill/athletics, experience_value * gravity_modifier) + boxer.mind?.adjust_experience(/datum/skill/athletics, round(experience_value * gravity_modifier, 0.1)) boxer.apply_status_effect(/datum/status_effect/exercised) /// Handles our blocking signals, similar to hit_reaction() on items. Only blocks while the boxer is in throw mode. @@ -227,14 +232,22 @@ var/block_text = pick("block", "evade") - if(!prob(block_chance)) - return NONE - var/mob/living/attacker = GET_ASSAILANT(hitby) if(!honor_check(attacker)) return NONE + var/experience_earned = round(damage * 0.25, 0.1) + + if(!damage) + experience_earned = 2 + + // WE reward experience for getting punched while boxing + skill_experience_adjustment(boxer, experience_earned) //just getting hit a bunch doesn't net you much experience however + + if(!prob(block_chance)) + return NONE + if(istype(attacker) && boxer.Adjacent(attacker)) attacker.apply_damage(10, STAMINA) boxer.apply_damage(5, STAMINA) @@ -246,8 +259,6 @@ if(block_text == "evade") playsound(boxer.loc, active_arm.unarmed_miss_sound, 25, TRUE, -1) - skill_experience_adjustment(boxer, 1) //just getting hit a bunch doesn't net you much experience - return SUCCESSFUL_BLOCK /datum/martial_art/boxing/can_use(mob/living/martial_artist) diff --git a/code/datums/martial/psychotic_brawl.dm b/code/datums/martial/psychotic_brawl.dm index 9ba78f9ef4539..454d23637f255 100644 --- a/code/datums/martial/psychotic_brawl.dm +++ b/code/datums/martial/psychotic_brawl.dm @@ -1,6 +1,7 @@ /datum/martial_art/psychotic_brawling name = "Psychotic Brawling" id = MARTIALART_PSYCHOBRAWL + pacifist_style = TRUE /datum/martial_art/psychotic_brawling/disarm_act(mob/living/attacker, mob/living/defender) return psycho_attack(attacker, defender) @@ -75,6 +76,8 @@ carbon_defender.adjustOrganLoss(ORGAN_SLOT_BRAIN, 5) attacker.Stun(rand(1 SECONDS, 4.5 SECONDS)) defender.Stun(rand(0.5 SECONDS, 3 SECONDS)) + if(HAS_TRAIT(attacker, TRAIT_PACIFISM)) + attacker.add_mood_event("bypassed_pacifism", /datum/mood_event/pacifism_bypassed) if(5,6) atk_verb = pick("kick", "hit", "slam") if(defender.check_block(attacker, 0, "[attacker]'s [atk_verb]", UNARMED_ATTACK)) @@ -94,6 +97,8 @@ var/throwtarget = get_edge_target_turf(attacker, get_dir(attacker, get_step_away(defender, attacker))) defender.throw_at(throwtarget, 4, 2, attacker)//So stuff gets tossed around at the same time. defender.Paralyze(6 SECONDS) + if(HAS_TRAIT(attacker, TRAIT_PACIFISM)) + attacker.add_mood_event("bypassed_pacifism", /datum/mood_event/pacifism_bypassed) if(7,8) return MARTIAL_ATTACK_INVALID //Resume default behaviour diff --git a/code/datums/materials/_material.dm b/code/datums/materials/_material.dm index 9d6b867472855..b340d95e90fbd 100644 --- a/code/datums/materials/_material.dm +++ b/code/datums/materials/_material.dm @@ -10,7 +10,7 @@ Simple datum which is instanced once per type and is used for every object of sa var/name = "material" /// A short description of the material. Not used anywhere, yet... var/desc = "its..stuff." - /// What the material is indexed by in the DSmaterials.materials list. Defaults to the type of the material. + /// What the material is indexed by in the SSmaterials.materials list. Defaults to the type of the material. var/id ///Base color of the material, is used for greyscale. Item isn't changed in color if this is null. @@ -23,7 +23,7 @@ Simple datum which is instanced once per type and is used for every object of sa ///Starlight color of the material ///This is the color of light it'll emit if its turf is transparent and over space. Defaults to COLOR_STARLIGHT if not set var/starlight_color - ///Bitflags that influence how DSmaterials handles this material. + ///Bitflags that influence how SSmaterials handles this material. var/init_flags = MATERIAL_INIT_MAPLOAD ///Materials "Traits". its a map of key = category | Value = Bool. Used to define what it can be used for var/list/categories = list() @@ -59,6 +59,8 @@ Simple datum which is instanced once per type and is used for every object of sa var/cached_texture_filter_icon ///What type of shard the material will shatter to var/obj/item/shard_type + ///How resistant the material is to rusting when applied to a turf + var/mat_rust_resistance = RUST_RESISTANCE_ORGANIC ///What type of debris the tile will leave behind when shattered. var/obj/effect/decal/debris_type /// How likely this mineral is to be found in a boulder during mining. @@ -160,6 +162,7 @@ Simple datum which is instanced once per type and is used for every object of sa if(alpha < 255) T.AddElement(/datum/element/turf_z_transparency) setup_glow(T) + T.rust_resistance = mat_rust_resistance return /datum/material/proc/setup_glow(turf/on) diff --git a/code/datums/materials/alloys.dm b/code/datums/materials/alloys.dm index e878a7f495daa..8bfdf0b58d9fe 100644 --- a/code/datums/materials/alloys.dm +++ b/code/datums/materials/alloys.dm @@ -36,6 +36,7 @@ sheet_type = /obj/item/stack/sheet/plasteel categories = list(MAT_CATEGORY_RIGID=TRUE, MAT_CATEGORY_BASE_RECIPES=TRUE, MAT_CATEGORY_ITEM_MATERIAL=TRUE) composition = list(/datum/material/iron=1, /datum/material/plasma=1) + mat_rust_resistance = RUST_RESISTANCE_REINFORCED /datum/material/alloy/plasteel/on_applied_obj(obj/item/target_item, amount, material_flags) . = ..() @@ -69,6 +70,7 @@ sheet_type = /obj/item/stack/sheet/mineral/plastitanium categories = list(MAT_CATEGORY_RIGID=TRUE, MAT_CATEGORY_BASE_RECIPES=TRUE, MAT_CATEGORY_ITEM_MATERIAL=TRUE) composition = list(/datum/material/titanium=1, /datum/material/plasma=1) + mat_rust_resistance = RUST_RESISTANCE_TITANIUM /** Plasmaglass * diff --git a/code/datums/materials/basemats.dm b/code/datums/materials/basemats.dm index 45d725739785e..66f4bccbd6f7b 100644 --- a/code/datums/materials/basemats.dm +++ b/code/datums/materials/basemats.dm @@ -8,6 +8,7 @@ sheet_type = /obj/item/stack/sheet/iron ore_type = /obj/item/stack/ore/iron value_per_unit = 5 / SHEET_MATERIAL_AMOUNT + mat_rust_resistance = RUST_RESISTANCE_BASIC mineral_rarity = MATERIAL_RARITY_COMMON points_per_unit = 1 / SHEET_MATERIAL_AMOUNT minimum_value_override = 0 @@ -268,6 +269,7 @@ Unless you know what you're doing, only use the first three numbers. They're in tradable_base_quantity = MATERIAL_QUANTITY_UNCOMMON beauty_modifier = 0.05 armor_modifiers = list(MELEE = 1.35, BULLET = 1.3, LASER = 1.3, ENERGY = 1.25, BOMB = 1.25, BIO = 1, FIRE = 0.7, ACID = 1) + mat_rust_resistance = RUST_RESISTANCE_TITANIUM mineral_rarity = MATERIAL_RARITY_SEMIPRECIOUS texture_layer_icon_state = "shine" diff --git a/code/datums/memory/key_memories.dm b/code/datums/memory/key_memories.dm index 48d4b0326e2aa..27030a02a1dfe 100644 --- a/code/datums/memory/key_memories.dm +++ b/code/datums/memory/key_memories.dm @@ -115,7 +115,7 @@ return ..() /datum/memory/key/quirk_smoker/get_names() - return list("[protagonist_name]'s smoking problem.") + return list("[protagonist_name]'s addiction to [preferred_brand] cigarettes.") /datum/memory/key/quirk_smoker/get_starts() return list( @@ -143,7 +143,7 @@ return ..() /datum/memory/key/quirk_alcoholic/get_names() - return list("[protagonist_name]'s drinking problem.") + return list("[protagonist_name]'s addiction to [preferred_brandy] alcohol.") /datum/memory/key/quirk_alcoholic/get_starts() return list( diff --git a/code/datums/mind/_mind.dm b/code/datums/mind/_mind.dm index 3aaeb093b9251..f7597da54cc48 100644 --- a/code/datums/mind/_mind.dm +++ b/code/datums/mind/_mind.dm @@ -553,7 +553,7 @@ /// Sets us to the passed job datum, then greets them to their new job. /// Use this one for when you're assigning this mind to a new job for the first time, -/// or for when someone's recieving a job they'd really want to be greeted to. +/// or for when someone's receiving a job they'd really want to be greeted to. /datum/mind/proc/set_assigned_role_with_greeting(datum/job/new_role, client/incoming_client) . = set_assigned_role(new_role) if(assigned_role != new_role) diff --git a/code/datums/mocking/client.dm b/code/datums/mocking/client.dm index dc1db213f34be..4b724ef705e82 100644 --- a/code/datums/mocking/client.dm +++ b/code/datums/mocking/client.dm @@ -48,3 +48,6 @@ /datum/client_interface/proc/set_macros() return + +/datum/client_interface/proc/update_ambience_pref() + return diff --git a/code/datums/mood.dm b/code/datums/mood.dm index 7671f92ed0f7b..2b2a83fc6964d 100644 --- a/code/datums/mood.dm +++ b/code/datums/mood.dm @@ -96,7 +96,7 @@ // 0.416% is 15 successes / 3600 seconds. Calculated with 2 minute // mood runtime, so 50% average uptime across the hour. if(HAS_TRAIT(mob_parent, TRAIT_DEPRESSION) && SPT_PROB(0.416, seconds_per_tick)) - add_mood_event("depression_mild", /datum/mood_event/depression_mild) + add_mood_event("depression", /datum/mood_event/depression) if(HAS_TRAIT(mob_parent, TRAIT_JOLLY) && SPT_PROB(0.416, seconds_per_tick)) add_mood_event("jolly", /datum/mood_event/jolly) diff --git a/code/datums/mood_events/dna_infuser_events.dm b/code/datums/mood_events/dna_infuser_events.dm index 06b7d6cbd4936..6da7235cfc1da 100644 --- a/code/datums/mood_events/dna_infuser_events.dm +++ b/code/datums/mood_events/dna_infuser_events.dm @@ -7,7 +7,3 @@ description = "There's a lot that could be on your mind right now. But this feeling of contentedness, a universal calling to simply sit back and observe is washing over you..." mood_change = 10 special_screen_obj = "mood_gondola" - -/datum/mood_event/obviously_not_listening - description = "Talking to someone and realizing they're clearly not listening is a bit upsetting." - mood_change = -1 diff --git a/code/datums/mood_events/drug_events.dm b/code/datums/mood_events/drug_events.dm index 8ac323dda7a76..ad248ea73369b 100644 --- a/code/datums/mood_events/drug_events.dm +++ b/code/datums/mood_events/drug_events.dm @@ -59,12 +59,6 @@ /datum/mood_event/withdrawal_severe/add_effects(drug_name) description = "Oh god, I need some of that [drug_name]!" -/datum/mood_event/withdrawal_critical - mood_change = -10 - -/datum/mood_event/withdrawal_critical/add_effects(drug_name) - description = "[drug_name]! [drug_name]! [drug_name]!" - /datum/mood_event/happiness_drug description = "Can't feel a thing..." mood_change = 50 diff --git a/code/datums/mood_events/eldritch_painting_events.dm b/code/datums/mood_events/eldritch_painting_events.dm index df801998c1d98..6a2393ed3f576 100644 --- a/code/datums/mood_events/eldritch_painting_events.dm +++ b/code/datums/mood_events/eldritch_painting_events.dm @@ -3,32 +3,32 @@ // Mood applied for ripping the painting /datum/mood_event/eldritch_painting - description = "YOU, I SHOULD NOT HAVE DONE THAT!!!" + description = "I've been hearing weird laughter since cutting down that painting..." mood_change = -6 timeout = 3 MINUTES /datum/mood_event/eldritch_painting/weeping - description = "HE IS HERE, AND HE WEEPS!" + description = "He is here!" mood_change = -3 timeout = 11 SECONDS /datum/mood_event/eldritch_painting/weeping_heretic - description = "Oh such arts! They truly inspire me!" + description = "His suffering inspires me!" mood_change = 5 timeout = 3 MINUTES /datum/mood_event/eldritch_painting/weeping_withdrawal - description = "My mind is clear from his influence." + description = "My mind is clear. He is not here." mood_change = 1 timeout = 3 MINUTES /datum/mood_event/eldritch_painting/desire_heretic - description = "A part gained, the mansus takes and gives. What did it take from me?" + description = "The void screams." mood_change = -2 timeout = 3 MINUTES /datum/mood_event/eldritch_painting/desire_examine - description = "A hunger kept at bay..." + description = "The hunger has been fed, for now..." mood_change = 3 timeout = 3 MINUTES @@ -38,11 +38,11 @@ timeout = 3 MINUTES /datum/mood_event/eldritch_painting/rust_examine - description = "The rusted climb can wait..." + description = "That painting really creeped me out." mood_change = -2 timeout = 3 MINUTES /datum/mood_event/eldritch_painting/rust_heretic_examine - description = "I must hurry the rusted climb!" + description = "Climb. Decay. Rust." mood_change = 6 timeout = 3 MINUTES diff --git a/code/datums/mood_events/generic_negative_events.dm b/code/datums/mood_events/generic_negative_events.dm index 0e54c21e70234..6ad0580e5557c 100644 --- a/code/datums/mood_events/generic_negative_events.dm +++ b/code/datums/mood_events/generic_negative_events.dm @@ -53,26 +53,11 @@ mood_change = -8 timeout = 5 MINUTES -/datum/mood_event/depression_minimal - description = "I feel a bit down." - mood_change = -10 - timeout = 2 MINUTES - -/datum/mood_event/depression_mild +/datum/mood_event/depression description = "I feel sad for no particular reason." mood_change = -12 timeout = 2 MINUTES -/datum/mood_event/depression_moderate - description = "I feel miserable." - mood_change = -14 - timeout = 2 MINUTES - -/datum/mood_event/depression_severe - description = "I've lost all hope." - mood_change = -16 - timeout = 2 MINUTES - /datum/mood_event/shameful_suicide //suicide_acts that return SHAME, like sord description = "I can't even end it all!" mood_change = -15 @@ -217,11 +202,6 @@ mood_change = -4 timeout = 4 MINUTES -/datum/mood_event/loud_gong - description = "That loud gong noise really hurt my ears!" - mood_change = -3 - timeout = 2 MINUTES - /datum/mood_event/notcreeping description = "The voices are not happy, and they painfully contort my thoughts into getting back on task." mood_change = -6 @@ -301,21 +281,11 @@ mood_change = -25 timeout = 4 MINUTES -/datum/mood_event/high_five_alone - description = "I tried getting a high-five with no one around, how embarassing!" - mood_change = -2 - timeout = 60 SECONDS - /datum/mood_event/high_five_full_hand description = "Oh god, I don't even know how to high-five correctly..." mood_change = -1 timeout = 45 SECONDS -/datum/mood_event/left_hanging - description = "But everyone loves high fives! Maybe people just... hate me?" - mood_change = -2 - timeout = 90 SECONDS - /datum/mood_event/too_slow description = "NO! HOW COULD I BE... TOO SLOW???" mood_change = -2 // multiplied by how many people saw it happen, up to 8, so potentially massive. the ULTIMATE prank carries a lot of weight @@ -332,10 +302,20 @@ mood_change *= people_laughing_at_you return ..() -//These are unused so far but I want to remember them to use them later /datum/mood_event/surgery description = "THEY'RE CUTTING ME OPEN!!" mood_change = -8 + var/surgery_completed = FALSE + +/datum/mood_event/surgery/success + description = "That surgery really hurt... Glad it worked, I guess..." + timeout = 3 MINUTES + surgery_completed = TRUE + +/datum/mood_event/surgery/failure + description = "AHHHHHGH! THEY FILLETED ME ALIVE!" + timeout = 10 MINUTES + surgery_completed = TRUE /datum/mood_event/bald description = "I need something to cover my head..." @@ -380,16 +360,21 @@ description = "I feel off-balance without my tail." mood_change = -2 -/datum/mood_event/tail_regained_right - description = "My tail is back, but that was traumatic..." - mood_change = -2 - timeout = 5 MINUTES - /datum/mood_event/tail_regained_wrong description = "Is this some kind of sick joke?! This is NOT the right tail." mood_change = -12 // -8 for tail still missing + -4 bonus for being frakenstein's monster timeout = 5 MINUTES +/datum/mood_event/tail_regained_species + description = "This tail is not mine, but at least it balances me out..." + mood_change = -5 + timeout = 5 MINUTES + +/datum/mood_event/tail_regained_right + description = "My tail is back, but that was traumatic..." + mood_change = -2 + timeout = 5 MINUTES + /datum/mood_event/burnt_wings description = "MY PRECIOUS WINGS!!" mood_change = -10 @@ -469,7 +454,7 @@ mood_change = -3 timeout = 5 MINUTES -/datum/mood_event/amulette_insanity +/datum/mood_event/amulet_insanity description = "I sEe THe LiGHt, It mUsT BE stOPPed" mood_change = -6 timeout = 5 MINUTES @@ -494,3 +479,9 @@ description = "Nothing will ever rival with what I seen in the past..." mood_change = -3 special_screen_obj = "mood_desentized" + +//Used for the psychotic brawling martial art, if the person is a pacifist. +/datum/mood_event/pacifism_bypassed + description = "I DIDN'T MEAN TO HURT THEM!" + mood_change = -20 + timeout = 10 MINUTES diff --git a/code/datums/systems/ds/move_handler.dm b/code/datums/move_manager.dm similarity index 92% rename from code/datums/systems/ds/move_handler.dm rename to code/datums/move_manager.dm index dc3458627eff0..23ddcbecdb707 100644 --- a/code/datums/systems/ds/move_handler.dm +++ b/code/datums/move_manager.dm @@ -17,14 +17,15 @@ * * You can find the logic for this control in this file * - * Specifics of how different loops operate can be found in the movement_types.dm file, alongside the [add to loop][/datum/system/move_manager/proc/add_to_loop] helper procs that use them + * Specifics of how different loops operate can be found in the movement_types.dm file, alongside the [add to loop][/datum/move_manager/proc/add_to_loop] helper procs that use them * **/ -DATASYSTEM_DEF(move_manager) - name = "Movement Handler" +/datum/move_manager + +GLOBAL_DATUM_INIT(move_manager, /datum/move_manager, new) ///Adds a movable thing to a movement subsystem. Returns TRUE if it all worked, FALSE if it failed somehow -/datum/system/move_manager/proc/add_to_loop(atom/movable/thing_to_add, datum/controller/subsystem/movement/subsystem = SSmovement, datum/move_loop/loop_type, priority = MOVEMENT_DEFAULT_PRIORITY, flags, datum/extra_info) +/datum/move_manager/proc/add_to_loop(atom/movable/thing_to_add, datum/controller/subsystem/movement/subsystem = SSmovement, datum/move_loop/loop_type, priority = MOVEMENT_DEFAULT_PRIORITY, flags, datum/extra_info) var/datum/movement_packet/our_data = thing_to_add.move_packet if(!our_data) our_data = new(thing_to_add) @@ -33,7 +34,7 @@ DATASYSTEM_DEF(move_manager) return our_data.add_loop(arglist(arguments)) ///Returns the subsystem's loop if we're processing on it, null otherwise -/datum/system/move_manager/proc/processing_on(atom/movable/packet_owner, datum/controller/subsystem/movement/subsystem) +/datum/move_manager/proc/processing_on(atom/movable/packet_owner, datum/controller/subsystem/movement/subsystem) var/datum/movement_packet/packet = packet_owner.move_packet if(!packet) return diff --git a/code/datums/mutations/_combined.dm b/code/datums/mutations/_combined.dm index cce25beb2161d..baa7c2c1215b5 100644 --- a/code/datums/mutations/_combined.dm +++ b/code/datums/mutations/_combined.dm @@ -25,6 +25,18 @@ required = "/datum/mutation/human/insulated; /datum/mutation/human/radioactive" result = /datum/mutation/human/shock +/datum/generecipe/cindikinesis + required = "/datum/mutation/human/geladikinesis; /datum/mutation/human/fire_breath" + result = /datum/mutation/human/geladikinesis/ash + +/datum/generecipe/pyrokinesis + required = "/datum/mutation/human/cryokinesis; /datum/mutation/human/fire_breath" + result = /datum/mutation/human/cryokinesis/pyrokinesis + +/datum/generecipe/thermal_adaptation + required = "/datum/mutation/human/adaptation/cold; /datum/mutation/human/adaptation/heat" + result = /datum/mutation/human/adaptation/thermal + /datum/generecipe/antiglow required = "/datum/mutation/human/glow; /datum/mutation/human/void" result = /datum/mutation/human/glow/anti @@ -36,3 +48,7 @@ /datum/generecipe/martyrdom required = "/datum/mutation/human/strong; /datum/mutation/human/stimmed" result = /datum/mutation/human/martyrdom + +/datum/generecipe/heckacious + required = "/datum/mutation/human/wacky; /datum/mutation/human/stoner" + result = /datum/mutation/human/heckacious diff --git a/code/datums/mutations/_mutations.dm b/code/datums/mutations/_mutations.dm index 4913a057e011a..ba3c20a0cfe74 100644 --- a/code/datums/mutations/_mutations.dm +++ b/code/datums/mutations/_mutations.dm @@ -1,3 +1,23 @@ + +/// Negatives that are virtually harmless and mostly just funny (language) +// Set to 0 because munchkinning via miscommunication = bad +#define NEGATIVE_STABILITY_MINI 0 +/// Negatives that are slightly annoying (unused) +#define NEGATIVE_STABILITY_MINOR -20 +/// Negatives that present an uncommon or weak, consistent hindrance to gameplay (cough, paranoia) +#define NEGATIVE_STABILITY_MODERATE -30 +/// Negatives that present a major consistent hindrance to gameplay (deaf, mute, acid flesh) +#define NEGATIVE_STABILITY_MAJOR -40 + +/// Positives that provide basically no benefit (glowy) +#define POSITIVE_INSTABILITY_MINI 5 +/// Positives that are niche in application or useful in rare circumstances (parlor tricks, geladikinesis, autotomy) +#define POSITIVE_INSTABILITY_MINOR 10 +/// Positives that provide a new ability that's roughly par with station equipment (insulated, cryokinesis) +#define POSITIVE_INSTABILITY_MODERATE 25 +/// Positives that are unique, very powerful, and noticeably change combat/gameplay (hulk, tk) +#define POSITIVE_INSTABILITY_MAJOR 35 + /datum/mutation var/name @@ -76,6 +96,8 @@ var/energy_coeff = -1 /// List of strings of valid chromosomes this mutation can accept. var/list/valid_chrom_list = list() + /// List of traits that are added or removed by the mutation with GENETIC_TRAIT source. + var/list/mutation_traits /datum/mutation/human/New(class = MUT_OTHER, timer, datum/mutation/human/copymut) . = ..() @@ -121,6 +143,8 @@ owner.overlays_standing[layer_used] = mut_overlay owner.apply_overlay(layer_used) grant_power() //we do checks here so nothing about hulk getting magic + if(mutation_traits) + owner.add_traits(mutation_traits, GENETIC_MUTATION) if(!modified) addtimer(CALLBACK(src, PROC_REF(modify), 0.5 SECONDS)) //gonna want children calling ..() to run first @@ -145,6 +169,9 @@ owner.overlays_standing[layer_used] = mut_overlay owner.apply_overlay(layer_used) + if(mutation_traits) + owner.remove_traits(mutation_traits, GENETIC_MUTATION) + /mob/living/carbon/proc/update_mutations_overlay() return diff --git a/code/datums/mutations/active.dm b/code/datums/mutations/active.dm new file mode 100644 index 0000000000000..42c11e9c6f804 --- /dev/null +++ b/code/datums/mutations/active.dm @@ -0,0 +1,49 @@ +/datum/mutation/human/adrenaline_rush + name = "Adrenaline Rush" + desc = "Allows the host to trigger their body's adrenaline response at will." + quality = POSITIVE + text_gain_indication = span_notice("You feel pumped up!") + instability = POSITIVE_INSTABILITY_MODERATE + power_path = /datum/action/cooldown/adrenaline + + energy_coeff = 1 + synchronizer_coeff = 1 + power_coeff = 1 + +/datum/mutation/human/adrenaline_rush/modify() + . = ..() + var/datum/action/cooldown/adrenaline/to_modify = . + if(!istype(to_modify)) // null or invalid + return + + to_modify.adrenaline_amount = 10 * GET_MUTATION_POWER(src) + to_modify.comedown_amount = 7 / GET_MUTATION_SYNCHRONIZER(src) + +/datum/action/cooldown/adrenaline + name = "Adrenaline!" + desc = "Energize yourself, pushing your body to its limits!" + button_icon = 'icons/mob/actions/actions_genetic.dmi' + button_icon_state = "adrenaline" + + cooldown_time = 2 MINUTES + check_flags = AB_CHECK_CONSCIOUS + /// How many units of each positive reagent injected during adrenaline. + var/adrenaline_amount = 10 + /// How many units of each negative reagent injected after comedown. + var/comedown_amount = 7 + + +/datum/action/cooldown/adrenaline/Activate(mob/living/carbon/cast_on) + . = ..() + to_chat(cast_on, span_userdanger("You feel pumped up! It's time to GO!")) + cast_on.reagents.add_reagent(/datum/reagent/drug/pumpup, adrenaline_amount) + cast_on.reagents.add_reagent(/datum/reagent/medicine/synaptizine, adrenaline_amount) + cast_on.reagents.add_reagent(/datum/reagent/determination, adrenaline_amount) + addtimer(CALLBACK(src, PROC_REF(get_tired), cast_on), 25 SECONDS, TIMER_UNIQUE|TIMER_OVERRIDE) + return TRUE + +/datum/action/cooldown/adrenaline/proc/get_tired(mob/living/carbon/cast_on) + to_chat(cast_on, span_danger("Your adrenaline rush makes way for a bout of nausea and a deep feeling of exhaustion in your muscles.")) + cast_on.reagents.add_reagent(/datum/reagent/peaceborg/tire, comedown_amount) + cast_on.reagents.add_reagent(/datum/reagent/peaceborg/confuse, comedown_amount) + cast_on.set_dizzy_if_lower(10 SECONDS) diff --git a/code/datums/mutations/adaptation.dm b/code/datums/mutations/adaptation.dm index 1c183f9367d3a..7e332984cf9b9 100644 --- a/code/datums/mutations/adaptation.dm +++ b/code/datums/mutations/adaptation.dm @@ -1,53 +1,58 @@ -/datum/mutation/human/temperature_adaptation - name = "Temperature Adaptation" +/datum/mutation/human/adaptation + name = "Adaptation" desc = "A strange mutation that renders the host immune to damage from extreme temperatures. Does not protect from vacuums." quality = POSITIVE difficulty = 16 - text_gain_indication = "Your body feels warm!" - instability = 25 - conflicts = list(/datum/mutation/human/pressure_adaptation) - -/datum/mutation/human/temperature_adaptation/New(class_ = MUT_OTHER, timer, datum/mutation/human/copymut) + text_gain_indication = span_notice("Your body feels normal!") + instability = NEGATIVE_STABILITY_MAJOR + locked = TRUE // fake parent + conflicts = list(/datum/mutation/human/adaptation) + mutation_traits = list(TRAIT_WADDLING) + /// Icon used for the adaptation overlay + var/adapt_icon = "meow" + +/datum/mutation/human/adaptation/New(class_ = MUT_OTHER, timer, datum/mutation/human/copymut) ..() + conflicts = typesof(src) if(!(type in visual_indicators)) - visual_indicators[type] = list(mutable_appearance('icons/mob/effects/genetics.dmi', "fire", -MUTATIONS_LAYER)) + visual_indicators[type] = list(mutable_appearance('icons/mob/effects/genetics.dmi', adapt_icon, -MUTATIONS_LAYER)) -/datum/mutation/human/temperature_adaptation/get_visual_indicator() +/datum/mutation/human/adaptation/get_visual_indicator() return visual_indicators[type][1] -/datum/mutation/human/temperature_adaptation/on_acquiring(mob/living/carbon/human/owner) - if(..()) - return - owner.add_traits(list(TRAIT_RESISTCOLD, TRAIT_RESISTHEAT), GENETIC_MUTATION) - -/datum/mutation/human/temperature_adaptation/on_losing(mob/living/carbon/human/owner) - if(..()) - return - owner.remove_traits(list(TRAIT_RESISTCOLD, TRAIT_RESISTHEAT), GENETIC_MUTATION) - -/datum/mutation/human/pressure_adaptation +/datum/mutation/human/adaptation/cold + name = "Cold Adaptation" + desc = "A strange mutation that renders the host immune to damage from low temperature environments. It also prevents the host from slipping on ice." + text_gain_indication = span_notice("Your body feels refreshingly cold.") + instability = POSITIVE_INSTABILITY_MODERATE + mutation_traits = list(TRAIT_RESISTCOLD, TRAIT_NO_SLIP_ICE) + adapt_icon = "cold" + locked = FALSE + +/datum/mutation/human/adaptation/heat + name = "Heat Adaptation" + desc = "A strange mutation that renders the host immune to damage from high temperature, including being set alight, though the flame itself still burns clothing. It also seems to make the host resist ash storms." + text_gain_indication = span_notice("Your body feels invigoratingly warm.") + instability = POSITIVE_INSTABILITY_MODERATE + mutation_traits = list(TRAIT_RESISTHEAT, TRAIT_ASHSTORM_IMMUNE) + adapt_icon = "fire" + locked = FALSE + +/datum/mutation/human/adaptation/thermal + name = "Thermal Adaptation" + desc = "A strange mutation that renders the host immune to damage from both low and high temperature environments. Does not protect from high or low pressure environments." + difficulty = 32 + text_gain_indication = span_notice("Your body feels pleasantly room temperature.") + instability = POSITIVE_INSTABILITY_MAJOR + mutation_traits = list(TRAIT_RESISTHEAT, TRAIT_RESISTCOLD) + adapt_icon = "thermal" + locked = TRUE // recipe + +/datum/mutation/human/adaptation/pressure name = "Pressure Adaptation" desc = "A strange mutation that renders the host immune to damage from both low and high pressure environments. Does not protect from temperature, including the cold of space." - quality = POSITIVE - difficulty = 16 - text_gain_indication = "Your body feels numb!" - instability = 25 - conflicts = list(/datum/mutation/human/temperature_adaptation) - -/datum/mutation/human/pressure_adaptation/New(class_ = MUT_OTHER, timer, datum/mutation/human/copymut) - ..() - if(!(type in visual_indicators)) - visual_indicators[type] = list(mutable_appearance('icons/mob/effects/genetics.dmi', "pressure", -MUTATIONS_LAYER)) - -/datum/mutation/human/pressure_adaptation/get_visual_indicator() - return visual_indicators[type][1] - -/datum/mutation/human/pressure_adaptation/on_acquiring(mob/living/carbon/human/owner) - if(..()) - return - owner.add_traits(list(TRAIT_RESISTLOWPRESSURE, TRAIT_RESISTHIGHPRESSURE), GENETIC_MUTATION) - -/datum/mutation/human/pressure_adaptation/on_losing(mob/living/carbon/human/owner) - if(..()) - return - owner.remove_traits(list(TRAIT_RESISTLOWPRESSURE, TRAIT_RESISTHIGHPRESSURE), GENETIC_MUTATION) + text_gain_indication = span_notice("Your body feels impressively pressurized.") + instability = POSITIVE_INSTABILITY_MODERATE + adapt_icon = "pressure" + mutation_traits = list(TRAIT_RESISTLOWPRESSURE, TRAIT_RESISTHIGHPRESSURE) + locked = FALSE diff --git a/code/datums/mutations/antenna.dm b/code/datums/mutations/antenna.dm index 80edceea1e5ed..5684b20c454f7 100644 --- a/code/datums/mutations/antenna.dm +++ b/code/datums/mutations/antenna.dm @@ -2,9 +2,9 @@ name = "Antenna" desc = "The affected person sprouts an antenna. This is known to allow them to access common radio channels passively." quality = POSITIVE - text_gain_indication = "You feel an antenna sprout from your forehead." - text_lose_indication = "Your antenna shrinks back down." - instability = 5 + text_gain_indication = span_notice("You feel an antenna sprout from your forehead.") + text_lose_indication = span_notice("Your antenna shrinks back down.") + instability = POSITIVE_INSTABILITY_MINOR difficulty = 8 var/datum/weakref/radio_weakref @@ -44,10 +44,10 @@ name = "Mind Reader" desc = "The affected person can look into the recent memories of others." quality = POSITIVE - text_gain_indication = "You hear distant voices at the corners of your mind." - text_lose_indication = "The distant voices fade." + text_gain_indication = span_notice("You hear distant voices at the corners of your mind.") + text_lose_indication = span_notice("The distant voices fade.") power_path = /datum/action/cooldown/spell/pointed/mindread - instability = 40 + instability = POSITIVE_INSTABILITY_MINOR difficulty = 8 locked = TRUE @@ -62,6 +62,16 @@ ranged_mousepointer = 'icons/effects/mouse_pointers/mindswap_target.dmi' +/datum/action/cooldown/spell/pointed/mindread/Grant(mob/grant_to) + . = ..() + if (!owner) + return + ADD_TRAIT(grant_to, TRAIT_MIND_READER, GENETIC_MUTATION) + +/datum/action/cooldown/spell/pointed/mindread/Remove(mob/remove_from) + . = ..() + REMOVE_TRAIT(remove_from, TRAIT_MIND_READER, GENETIC_MUTATION) + /datum/action/cooldown/spell/pointed/mindread/is_valid_target(atom/cast_on) if(!isliving(cast_on)) return FALSE diff --git a/code/datums/mutations/autotomy.dm b/code/datums/mutations/autotomy.dm index 5a70455db5fb8..bb78ceb08dcf7 100644 --- a/code/datums/mutations/autotomy.dm +++ b/code/datums/mutations/autotomy.dm @@ -3,7 +3,7 @@ desc = "Allows a creature to voluntary discard a random appendage." quality = POSITIVE text_gain_indication = span_notice("Your joints feel loose.") - instability = 30 + instability = POSITIVE_INSTABILITY_MINOR power_path = /datum/action/cooldown/spell/self_amputation energy_coeff = 1 diff --git a/code/datums/mutations/body.dm b/code/datums/mutations/body.dm index b45d0a6499e83..f2db642261633 100644 --- a/code/datums/mutations/body.dm +++ b/code/datums/mutations/body.dm @@ -4,8 +4,9 @@ /datum/mutation/human/epilepsy name = "Epilepsy" desc = "A genetic defect that sporadically causes seizures." + instability = NEGATIVE_STABILITY_MODERATE quality = NEGATIVE - text_gain_indication = "You get a headache." + text_gain_indication = span_danger("You get a headache.") synchronizer_coeff = 1 power_coeff = 1 @@ -50,8 +51,9 @@ /datum/mutation/human/bad_dna name = "Unstable DNA" desc = "Strange mutation that causes the holder to randomly mutate." + instability = NEGATIVE_STABILITY_MAJOR quality = NEGATIVE - text_gain_indication = "You feel strange." + text_gain_indication = span_danger("You feel strange.") locked = TRUE /datum/mutation/human/bad_dna/on_acquiring(mob/living/carbon/human/owner) @@ -79,8 +81,9 @@ /datum/mutation/human/cough name = "Cough" desc = "A chronic cough." + instability = NEGATIVE_STABILITY_MODERATE quality = MINOR_NEGATIVE - text_gain_indication = "You start coughing." + text_gain_indication = span_danger("You start coughing.") synchronizer_coeff = 1 power_coeff = 1 @@ -96,9 +99,10 @@ /datum/mutation/human/paranoia name = "Paranoia" desc = "Subject is easily terrified, and may suffer from hallucinations." + instability = NEGATIVE_STABILITY_MODERATE quality = NEGATIVE - text_gain_indication = "You feel screams echo through your mind..." - text_lose_indication = "The screaming in your mind fades." + text_gain_indication = span_danger("You feel screams echo through your mind...") + text_lose_indication = span_notice("The screaming in your mind fades.") /datum/mutation/human/paranoia/on_life(seconds_per_tick, times_fired) if(SPT_PROB(2.5, seconds_per_tick) && owner.stat == CONSCIOUS) @@ -112,8 +116,8 @@ desc = "A mutation believed to be the cause of dwarfism." quality = POSITIVE difficulty = 16 - instability = 5 - conflicts = list(/datum/mutation/human/gigantism) + instability = POSITIVE_INSTABILITY_MINOR + conflicts = list(/datum/mutation/human/gigantism, /datum/mutation/human/acromegaly) locked = TRUE // Default intert species for now, so locked from regular pool. /datum/mutation/human/dwarfism/on_acquiring(mob/living/carbon/human/owner) @@ -128,12 +132,73 @@ REMOVE_TRAIT(owner, TRAIT_DWARF, GENETIC_MUTATION) owner.visible_message(span_danger("[owner] suddenly grows!"), span_notice("Everything around you seems to shrink..")) +/datum/mutation/human/acromegaly + name = "Acromegaly" + desc = "A mutation believed to be the cause of acromegaly, or 'being unusually tall'." + quality = MINOR_NEGATIVE + difficulty = 16 + instability = NEGATIVE_STABILITY_MODERATE + synchronizer_coeff = 1 + conflicts = list(/datum/mutation/human/dwarfism) + +/datum/mutation/human/acromegaly/on_acquiring(mob/living/carbon/human/owner) + if(..()) + return + ADD_TRAIT(owner, TRAIT_TOO_TALL, GENETIC_MUTATION) + owner.visible_message(span_danger("[owner] suddenly grows tall!"), span_notice("You feel a small strange urge to fight small men with slingshots. Or maybe play some basketball.")) + RegisterSignal(owner, COMSIG_MOVABLE_MOVED, PROC_REF(head_bonk)) + owner.regenerate_icons() + +/datum/mutation/human/acromegaly/on_losing(mob/living/carbon/human/owner) + if(..()) + return + REMOVE_TRAIT(owner, TRAIT_TOO_TALL, GENETIC_MUTATION) + owner.visible_message(span_danger("[owner] suddenly shrinks!"), span_notice("You return to your usual height.")) + UnregisterSignal(owner, COMSIG_MOVABLE_MOVED, PROC_REF(head_bonk)) + owner.regenerate_icons() + +// This is specifically happening because they're not used to their new height and are stumbling around into machinery made for normal humans +/datum/mutation/human/acromegaly/proc/head_bonk(mob/living/parent) + SIGNAL_HANDLER + var/turf/airlock_turf = get_turf(parent) + var/atom/movable/whacked_by = locate(/obj/machinery/door/airlock) in airlock_turf || locate(/obj/machinery/door/firedoor) in airlock_turf || locate(/obj/structure/mineral_door) in airlock_turf + if(!whacked_by || prob(100 - (8 * GET_MUTATION_SYNCHRONIZER(src)))) + return + to_chat(parent, span_danger("You hit your head on \the [whacked_by]'s header!")) + var/dmg = HAS_TRAIT(parent, TRAIT_HEAD_INJURY_BLOCKED) ? rand(1,4) : rand(2,9) + parent.apply_damage(dmg, BRUTE, BODY_ZONE_HEAD) + parent.do_attack_animation(whacked_by, ATTACK_EFFECT_PUNCH) + playsound(whacked_by, 'sound/effects/bang.ogg', 10, TRUE) + parent.adjust_staggered_up_to(STAGGERED_SLOWDOWN_LENGTH, 10 SECONDS) + +/datum/mutation/human/gigantism + name = "Gigantism" //negative version of dwarfism + desc = "The cells within the subject spread out to cover more area, making the subject appear larger." + quality = MINOR_NEGATIVE + difficulty = 12 + conflicts = list(/datum/mutation/human/dwarfism) + +/datum/mutation/human/gigantism/on_acquiring(mob/living/carbon/human/owner) + if(..()) + return + ADD_TRAIT(owner, TRAIT_GIANT, GENETIC_MUTATION) + owner.update_transform(1.25) + owner.visible_message(span_danger("[owner] suddenly grows!"), span_notice("Everything around you seems to shrink..")) + +/datum/mutation/human/gigantism/on_losing(mob/living/carbon/human/owner) + if(..()) + return + REMOVE_TRAIT(owner, TRAIT_GIANT, GENETIC_MUTATION) + owner.update_transform(0.8) + owner.visible_message(span_danger("[owner] suddenly shrinks!"), span_notice("Everything around you seems to grow..")) + //Clumsiness has a very large amount of small drawbacks depending on item. /datum/mutation/human/clumsy name = "Clumsiness" desc = "A genome that inhibits certain brain functions, causing the holder to appear clumsy. Honk!" + instability = NEGATIVE_STABILITY_MAJOR quality = MINOR_NEGATIVE - text_gain_indication = "You feel lightheaded." + text_gain_indication = span_danger("You feel lightheaded.") /datum/mutation/human/clumsy/on_acquiring(mob/living/carbon/human/owner) if(..()) @@ -151,7 +216,8 @@ name = "Tourette's Syndrome" desc = "A chronic twitch that forces the user to scream bad words." //definitely needs rewriting quality = NEGATIVE - text_gain_indication = "You twitch." + instability = 0 + text_gain_indication = span_danger("You twitch.") synchronizer_coeff = 1 /datum/mutation/human/tourettes/on_life(seconds_per_tick, times_fired) @@ -173,8 +239,9 @@ /datum/mutation/human/deaf name = "Deafness" desc = "The holder of this genome is completely deaf." + instability = NEGATIVE_STABILITY_MAJOR quality = NEGATIVE - text_gain_indication = "You can't seem to hear anything." + text_gain_indication = span_danger("You can't seem to hear anything.") /datum/mutation/human/deaf/on_acquiring(mob/living/carbon/human/owner) if(..()) @@ -194,8 +261,10 @@ text_gain_indication = "You feel unusually monkey-like." text_lose_indication = "You feel like your old self." quality = NEGATIVE + instability = NEGATIVE_STABILITY_MAJOR // mmmonky remove_on_aheal = FALSE locked = TRUE //Species specific, keep out of actual gene pool + mutadone_proof = TRUE var/datum/species/original_species = /datum/species/human var/original_name @@ -217,8 +286,8 @@ name = "Glowy" desc = "You permanently emit a light with a random color and intensity." quality = POSITIVE - text_gain_indication = "Your skin begins to glow softly." - instability = 5 + text_gain_indication = span_notice("Your skin begins to glow softly.") + instability = POSITIVE_INSTABILITY_MINI power_coeff = 1 conflicts = list(/datum/mutation/human/glow/anti) var/glow_power = 2 @@ -254,8 +323,9 @@ /datum/mutation/human/glow/anti name = "Anti-Glow" desc = "Your skin seems to attract and absorb nearby light creating 'darkness' around you." - text_gain_indication = "The light around you seems to disappear." + text_gain_indication = span_notice("The light around you seems to disappear.") conflicts = list(/datum/mutation/human/glow) + instability = POSITIVE_INSTABILITY_MINOR locked = TRUE glow_power = -1.5 @@ -264,10 +334,10 @@ /datum/mutation/human/strong name = "Strength" - desc = "The user's muscles slightly expand." + desc = "The user's muscles slightly expand. Commonly seen in top-ranking boxers." quality = POSITIVE - text_gain_indication = "You feel strong." - instability = 5 + text_gain_indication = span_notice("You feel strong.") + instability = POSITIVE_INSTABILITY_MINI difficulty = 16 /datum/mutation/human/strong/on_acquiring(mob/living/carbon/human/owner) @@ -285,10 +355,10 @@ /datum/mutation/human/stimmed name = "Stimmed" - desc = "The user's chemical balance is more robust." + desc = "The user's chemical balance is more robust. This mutation is known to slightly improve workout efficiency." quality = POSITIVE - text_gain_indication = "You feel stimmed." - instability = 5 + instability = POSITIVE_INSTABILITY_MINI + text_gain_indication = span_notice("You feel stimmed.") difficulty = 16 /datum/mutation/human/stimmed/on_acquiring(mob/living/carbon/human/owner) @@ -307,10 +377,10 @@ name = "Insulated" desc = "The affected person does not conduct electricity." quality = POSITIVE - text_gain_indication = "Your fingertips go numb." - text_lose_indication = "Your fingertips regain feeling." + text_gain_indication = span_notice("Your fingertips go numb.") + text_lose_indication = span_notice("Your fingertips regain feeling.") difficulty = 16 - instability = 25 + instability = POSITIVE_INSTABILITY_MODERATE /datum/mutation/human/insulated/on_acquiring(mob/living/carbon/human/owner) if(..()) @@ -326,8 +396,9 @@ name = "Fiery Sweat" desc = "The user's skin will randomly combust, but is generally a lot more resilient to burning." quality = NEGATIVE - text_gain_indication = "You feel hot." - text_lose_indication = "You feel a lot cooler." + text_gain_indication = span_warning("You feel hot.") + text_lose_indication = span_notice("You feel a lot cooler.") + conflicts = list(/datum/mutation/human/adaptation/heat) difficulty = 14 synchronizer_coeff = 1 power_coeff = 1 @@ -351,10 +422,10 @@ name = "Spatial Instability" desc = "The victim of the mutation has a very weak link to spatial reality, and may be displaced. Often causes extreme nausea." quality = NEGATIVE - text_gain_indication = "The space around you twists sickeningly." - text_lose_indication = "The space around you settles back to normal." + text_gain_indication = span_warning("The space around you twists sickeningly.") + text_lose_indication = span_notice("The space around you settles back to normal.") difficulty = 18//high so it's hard to unlock and abuse - instability = 10 + instability = NEGATIVE_STABILITY_MODERATE synchronizer_coeff = 1 energy_coeff = 1 power_coeff = 1 @@ -380,9 +451,10 @@ /datum/mutation/human/acidflesh name = "Acidic Flesh" desc = "Subject has acidic chemicals building up underneath the skin. This is often lethal." + instability = NEGATIVE_STABILITY_MAJOR quality = NEGATIVE - text_gain_indication = "A horrible burning sensation envelops you as your flesh turns to acid!" - text_lose_indication = "A feeling of relief fills you as your flesh goes back to normal." + text_gain_indication = span_userdanger("A horrible burning sensation envelops you as your flesh turns to acid!") + text_lose_indication = span_notice("A feeling of relief fills you as your flesh goes back to normal.") difficulty = 18//high so it's hard to unlock and use on others /// The cooldown for the warning message COOLDOWN_DECLARE(msgcooldown) @@ -397,33 +469,13 @@ owner.visible_message(span_warning("[owner]'s skin bubbles and pops."), span_userdanger("Your bubbling flesh pops! It burns!")) playsound(owner,'sound/weapons/sear.ogg', 50, TRUE) -/datum/mutation/human/gigantism - name = "Gigantism"//negative version of dwarfism - desc = "The cells within the subject spread out to cover more area, making the subject appear larger." - quality = MINOR_NEGATIVE - difficulty = 12 - conflicts = list(/datum/mutation/human/dwarfism) - -/datum/mutation/human/gigantism/on_acquiring(mob/living/carbon/human/owner) - if(..()) - return - ADD_TRAIT(owner, TRAIT_GIANT, GENETIC_MUTATION) - owner.update_transform(1.25) - owner.visible_message(span_danger("[owner] suddenly grows!"), span_notice("Everything around you seems to shrink..")) - -/datum/mutation/human/gigantism/on_losing(mob/living/carbon/human/owner) - if(..()) - return - REMOVE_TRAIT(owner, TRAIT_GIANT, GENETIC_MUTATION) - owner.update_transform(0.8) - owner.visible_message(span_danger("[owner] suddenly shrinks!"), span_notice("Everything around you seems to grow..")) - /datum/mutation/human/spastic name = "Spastic" desc = "Subject suffers from muscle spasms." + instability = NEGATIVE_STABILITY_MODERATE quality = NEGATIVE - text_gain_indication = "You flinch." - text_lose_indication = "Your flinching subsides." + text_gain_indication = span_warning("You flinch.") + text_lose_indication = span_notice("Your flinching subsides.") difficulty = 16 /datum/mutation/human/spastic/on_acquiring() @@ -439,9 +491,10 @@ /datum/mutation/human/extrastun name = "Two Left Feet" desc = "A mutation that replaces the right foot with another left foot. Symptoms include kissing the floor when taking a step." + instability = NEGATIVE_STABILITY_MODERATE quality = NEGATIVE - text_gain_indication = "Your right foot feels... left." - text_lose_indication = "Your right foot feels alright." + text_gain_indication = span_warning("Your right foot feels... left.") + text_lose_indication = span_notice("Your right foot feels alright.") difficulty = 16 /datum/mutation/human/extrastun/on_acquiring() @@ -470,10 +523,11 @@ /datum/mutation/human/martyrdom name = "Internal Martyrdom" desc = "A mutation that makes the body destruct when near death. Not damaging, but very, VERY disorienting." + instability = NEGATIVE_STABILITY_MAJOR // free stability >:) locked = TRUE quality = POSITIVE //not that cloning will be an option a lot but generally lets keep this around i guess? - text_gain_indication = "You get an intense feeling of heartburn." - text_lose_indication = "Your internal organs feel at ease." + text_gain_indication = span_warning("You get an intense feeling of heartburn.") + text_lose_indication = span_notice("Your internal organs feel at ease.") /datum/mutation/human/martyrdom/on_acquiring() . = ..() @@ -517,9 +571,10 @@ /datum/mutation/human/headless name = "H.A.R.S." desc = "A mutation that makes the body reject the head, the brain receding into the chest. Stands for Head Allergic Rejection Syndrome. Warning: Removing this mutation is very dangerous, though it will regenerate non-vital head organs." + instability = NEGATIVE_STABILITY_MAJOR difficulty = 12 //pretty good for traitors quality = NEGATIVE //holy shit no eyes or tongue or ears - text_gain_indication = "Something feels off." + text_gain_indication = span_warning("Something feels off.") /datum/mutation/human/headless/on_acquiring() . = ..() diff --git a/code/datums/mutations/chameleon.dm b/code/datums/mutations/chameleon.dm index d5cbc36d20a1f..6a42c69cb51d8 100644 --- a/code/datums/mutations/chameleon.dm +++ b/code/datums/mutations/chameleon.dm @@ -4,9 +4,9 @@ desc = "A genome that causes the holder's skin to become transparent over time." quality = POSITIVE difficulty = 16 - text_gain_indication = "You feel one with your surroundings." - text_lose_indication = "You feel oddly exposed." - instability = 25 + text_gain_indication = span_notice("You feel one with your surroundings.") + text_lose_indication = span_notice("You feel oddly exposed.") + instability = POSITIVE_INSTABILITY_MAJOR power_coeff = 1 /datum/mutation/human/chameleon/on_acquiring(mob/living/carbon/human/owner) diff --git a/code/datums/mutations/cold.dm b/code/datums/mutations/cold.dm index 57c4f854fc7a2..fd060bc8ca5e0 100644 --- a/code/datums/mutations/cold.dm +++ b/code/datums/mutations/cold.dm @@ -2,8 +2,8 @@ name = "Geladikinesis" desc = "Allows the user to concentrate moisture and sub-zero forces into snow." quality = POSITIVE - text_gain_indication = "Your hand feels cold." - instability = 10 + text_gain_indication = span_notice("Your hand feels cold.") + instability = POSITIVE_INSTABILITY_MINOR difficulty = 10 synchronizer_coeff = 1 power_path = /datum/action/cooldown/spell/conjure_item/snow @@ -24,8 +24,8 @@ name = "Cryokinesis" desc = "Draws negative energy from the sub-zero void to freeze surrounding temperatures at subject's will." quality = POSITIVE //upsides and downsides - text_gain_indication = "Your hand feels cold." - instability = 30 + text_gain_indication = span_notice("Your hand feels cold.") + instability = POSITIVE_INSTABILITY_MODERATE difficulty = 12 synchronizer_coeff = 1 energy_coeff = 1 diff --git a/code/datums/mutations/fire_breath.dm b/code/datums/mutations/fire_breath.dm index f8631761ba202..56915ff0130ea 100644 --- a/code/datums/mutations/fire_breath.dm +++ b/code/datums/mutations/fire_breath.dm @@ -4,10 +4,10 @@ quality = POSITIVE difficulty = 12 locked = TRUE - text_gain_indication = "Your throat is burning!" - text_lose_indication = "Your throat is cooling down." + text_gain_indication = span_notice("Your throat is burning!") + text_lose_indication = span_notice("Your throat is cooling down.") power_path = /datum/action/cooldown/spell/cone/staggered/fire_breath - instability = 30 + instability = POSITIVE_INSTABILITY_MODERATE energy_coeff = 1 power_coeff = 1 diff --git a/code/datums/mutations/hot.dm b/code/datums/mutations/hot.dm new file mode 100644 index 0000000000000..574bc95d1e404 --- /dev/null +++ b/code/datums/mutations/hot.dm @@ -0,0 +1,31 @@ +/datum/mutation/human/geladikinesis/ash + name = "Cindikinesis" + desc = "Allows the user to concentrate nearby heat into a pile of ash. Wow. Very interesting." + text_gain_indication = span_notice("Your hand feels warm.") + locked = TRUE + power_path = /datum/action/cooldown/spell/conjure_item/snow/ash + +/datum/action/cooldown/spell/conjure_item/snow/ash + name = "Create Ash" + desc = "Concentrates pyrokinetic forces to create ash, useful for basically nothing." + button_icon_state = "ash" + + item_type = /obj/effect/decal/cleanable/ash + +/datum/mutation/human/cryokinesis/pyrokinesis + name = "Pyrokinesis" + desc = "Draws positive energy from the surroundings to heat surrounding temperatures at subject's will." + text_gain_indication = span_notice("Your hand feels hot!") + locked = TRUE + power_path = /datum/action/cooldown/spell/pointed/projectile/cryo/pyro + +/datum/action/cooldown/spell/pointed/projectile/cryo/pyro + name = "Pyrobeam" + desc = "This power fires a heated bolt at a target." + button_icon_state = "firebeam" + base_icon_state = "firebeam" + cooldown_time = 30 SECONDS + + active_msg = "You focus your pyrokinesis!" + deactive_msg = "You cool down." + projectile_type = /obj/projectile/temp/pyro diff --git a/code/datums/mutations/hulk.dm b/code/datums/mutations/hulk.dm index 63e0abc22a33f..7a09687ea40bc 100644 --- a/code/datums/mutations/hulk.dm +++ b/code/datums/mutations/hulk.dm @@ -5,14 +5,14 @@ quality = POSITIVE locked = TRUE difficulty = 16 - text_gain_indication = "Your muscles hurt!" + text_gain_indication = span_notice("Your muscles hurt!") species_allowed = list(SPECIES_HUMAN) //no skeleton/lizard hulk health_req = 25 - instability = 40 + instability = POSITIVE_INSTABILITY_MAJOR var/scream_delay = 50 var/last_scream = 0 /// List of traits to add/remove when someone gets this mutation. - var/list/mutation_traits = list( + mutation_traits = list( TRAIT_CHUNKYFINGERS, TRAIT_HULK, TRAIT_IGNOREDAMAGESLOWDOWN, @@ -24,7 +24,6 @@ /datum/mutation/human/hulk/on_acquiring(mob/living/carbon/human/owner) if(..()) return - owner.add_traits(mutation_traits, GENETIC_MUTATION) for(var/obj/item/bodypart/part as anything in owner.bodyparts) part.variable_color = COLOR_DARK_LIME owner.update_body_parts() @@ -87,7 +86,6 @@ /datum/mutation/human/hulk/on_losing(mob/living/carbon/human/owner) if(..()) return - owner.remove_traits(mutation_traits, GENETIC_MUTATION) for(var/obj/item/bodypart/part as anything in owner.bodyparts) part.variable_color = null owner.update_body_parts() diff --git a/code/datums/mutations/olfaction.dm b/code/datums/mutations/olfaction.dm index 305f6d16e8389..b3273c8dd9577 100644 --- a/code/datums/mutations/olfaction.dm +++ b/code/datums/mutations/olfaction.dm @@ -3,10 +3,10 @@ desc = "Your sense of smell is comparable to that of a canine." quality = POSITIVE difficulty = 12 - text_gain_indication = "Smells begin to make more sense..." - text_lose_indication = "Your sense of smell goes back to normal." + text_gain_indication = span_notice("Smells begin to make more sense...") + text_lose_indication = span_notice("Your sense of smell goes back to normal.") power_path = /datum/action/cooldown/spell/olfaction - instability = 30 + instability = POSITIVE_INSTABILITY_MODERATE synchronizer_coeff = 1 /datum/mutation/human/olfaction/modify() @@ -119,6 +119,9 @@ /// Actually go through and give the user a hint of the direction our target is. /datum/action/cooldown/spell/olfaction/proc/on_the_trail(mob/living/caster) var/mob/living/carbon/current_target = tracking_ref?.resolve() + //Using get_turf to deal with those pesky closets that put your x y z to 0 + var/turf/current_target_turf = get_turf(current_target) + var/turf/caster_turf = get_turf(caster) if(!current_target) to_chat(caster, span_warning("You're not tracking a scent, but the game thought you were. \ Something's gone wrong! Report this as a bug.")) @@ -130,14 +133,14 @@ to_chat(caster, span_warning("You smell out the trail to yourself. Yep, it's you.")) return - if(caster.z < current_target.z) + if(caster_turf.z < current_target_turf.z) to_chat(caster, span_warning("The trail leads... way up above you? Huh. They must be really, really far away.")) return - else if(caster.z > current_target.z) + else if(caster_turf.z > current_target_turf.z) to_chat(caster, span_warning("The trail leads... way down below you? Huh. They must be really, really far away.")) return - var/direction_text = span_bold("[dir2text(get_dir(caster, current_target))]") + var/direction_text = span_bold("[dir2text(get_dir(caster_turf, current_target_turf))]") if(direction_text) to_chat(caster, span_notice("You consider [current_target]'s scent. The trail leads [direction_text].")) diff --git a/code/datums/mutations/passive.dm b/code/datums/mutations/passive.dm index 9d694aaf1ebbb..46859db686968 100644 --- a/code/datums/mutations/passive.dm +++ b/code/datums/mutations/passive.dm @@ -2,7 +2,7 @@ name = "Biotech Compatibility" desc = "Subject is more compatibile with biotechnology such as skillchips." quality = POSITIVE - instability = 5 + instability = POSITIVE_INSTABILITY_MINI /datum/mutation/human/biotechcompat/on_acquiring(mob/living/carbon/human/owner) . = ..() @@ -16,9 +16,9 @@ name = "Clever" desc = "Causes the subject to feel just a little bit smarter. Most effective in specimens with low levels of intelligence." quality = POSITIVE - instability = 20 - text_gain_indication = "You feel a little bit smarter." - text_lose_indication = "Your mind feels a little bit foggy." + instability = POSITIVE_INSTABILITY_MODERATE // literally makes you on par with station equipment + text_gain_indication = span_danger("You feel a little bit smarter.") + text_lose_indication = span_danger("Your mind feels a little bit foggy.") /datum/mutation/human/clever/on_acquiring(mob/living/carbon/human/owner) if(..()) diff --git a/code/datums/mutations/radioactive.dm b/code/datums/mutations/radioactive.dm index 8f710bfa497a4..b2a17b5341275 100644 --- a/code/datums/mutations/radioactive.dm +++ b/code/datums/mutations/radioactive.dm @@ -2,8 +2,8 @@ name = "Radioactivity" desc = "A volatile mutation that causes the host to sent out deadly beta radiation. This affects both the hosts and their surroundings." quality = NEGATIVE - text_gain_indication = "You can feel it in your bones!" - instability = 5 + text_gain_indication = span_warning("You can feel it in your bones!") + instability = NEGATIVE_STABILITY_MAJOR difficulty = 8 power_coeff = 1 /// Weakref to our radiation emitter component diff --git a/code/datums/mutations/reach.dm b/code/datums/mutations/reach.dm new file mode 100644 index 0000000000000..1c46976e76bee --- /dev/null +++ b/code/datums/mutations/reach.dm @@ -0,0 +1,112 @@ +///Telekinesis lets you interact with objects from range, and gives you a light blue halo around your head. +/datum/mutation/human/telekinesis + name = "Telekinesis" + desc = "A strange mutation that allows the holder to interact with objects through thought." + quality = POSITIVE + difficulty = 18 + text_gain_indication = span_notice("You feel smarter!") + limb_req = BODY_ZONE_HEAD + instability = POSITIVE_INSTABILITY_MAJOR + ///Typecache of atoms that TK shouldn't interact with + var/static/list/blacklisted_atoms = typecacheof(list(/atom/movable/screen)) + +/datum/mutation/human/telekinesis/New(class_ = MUT_OTHER, timer, datum/mutation/human/copymut) + ..() + if(!(type in visual_indicators)) + visual_indicators[type] = list(mutable_appearance('icons/mob/effects/genetics.dmi', "telekinesishead", -MUTATIONS_LAYER)) + +/datum/mutation/human/telekinesis/on_acquiring(mob/living/carbon/human/homan) + . = ..() + if(.) + return + RegisterSignal(homan, COMSIG_MOB_ATTACK_RANGED, PROC_REF(on_ranged_attack)) + +/datum/mutation/human/telekinesis/on_losing(mob/living/carbon/human/homan) + . = ..() + if(.) + return + UnregisterSignal(homan, COMSIG_MOB_ATTACK_RANGED) + +/datum/mutation/human/telekinesis/get_visual_indicator() + return visual_indicators[type][1] + +///Triggers on COMSIG_MOB_ATTACK_RANGED. Usually handles stuff like picking up items at range. +/datum/mutation/human/telekinesis/proc/on_ranged_attack(mob/source, atom/target) + SIGNAL_HANDLER + if(is_type_in_typecache(target, blacklisted_atoms)) + return + if(!tkMaxRangeCheck(source, target) || source.z != target.z) + return + return target.attack_tk(source) + +/datum/mutation/human/elastic_arms + name = "Elastic Arms" + desc = "Subject's arms have become elastic, allowing them to stretch up to a meter away. However, this elasticity makes it difficult to wear gloves, handle complex tasks, or grab large objects." + quality = POSITIVE + instability = POSITIVE_INSTABILITY_MAJOR + text_gain_indication = span_warning("You feel armstrong!") + text_lose_indication = span_warning("Your arms stop feeling so saggy all the time.") + difficulty = 32 + mutation_traits = list(TRAIT_CHUNKYFINGERS, TRAIT_NO_TWOHANDING) + +/datum/mutation/human/elastic_arms/on_acquiring(mob/living/carbon/human/homan) + . = ..() + if(.) + return + RegisterSignal(homan, COMSIG_ATOM_CANREACH, PROC_REF(on_canreach)) + RegisterSignal(homan, COMSIG_LIVING_TRY_PUT_IN_HAND, PROC_REF(on_owner_equipping_item)) + RegisterSignal(homan, COMSIG_LIVING_TRY_PULL, PROC_REF(on_owner_try_pull)) + +/datum/mutation/human/elastic_arms/on_losing(mob/living/carbon/human/homan) + . = ..() + if(.) + return + UnregisterSignal(homan, list(COMSIG_ATOM_CANREACH, COMSIG_LIVING_TRY_PUT_IN_HAND, COMSIG_LIVING_TRY_PULL)) + +/// signal sent when prompting if an item can be equipped +/datum/mutation/human/elastic_arms/proc/on_owner_equipping_item(mob/living/carbon/human/owner, obj/item/pick_item) + SIGNAL_HANDLER + if((pick_item.w_class > WEIGHT_CLASS_BULKY) && !(pick_item.item_flags & ABSTRACT|HAND_ITEM)) // cant decide if i should limit to huge or bulky. + pick_item.balloon_alert(owner, "arms too floppy to wield!") + return COMPONENT_LIVING_CANT_PUT_IN_HAND + +/// signal sent when owner tries to pull +/datum/mutation/human/elastic_arms/proc/on_owner_try_pull(mob/living/carbon/owner, atom/movable/target, force) + SIGNAL_HANDLER + if(isliving(target)) + var/mob/living/living_target = target + if(living_target.mob_size > MOB_SIZE_HUMAN) + living_target.balloon_alert(owner, "arms too floppy to pull this!") + return COMSIG_LIVING_CANCEL_PULL + if(isitem(target)) + var/obj/item/item_target = target + if(item_target.w_class > WEIGHT_CLASS_BULKY) + item_target.balloon_alert(owner, "arms too floppy to pull this!") + return COMSIG_LIVING_CANCEL_PULL + +// probably buggy. let's enlist our players as bug testers +/datum/mutation/human/elastic_arms/proc/on_canreach(mob/source, atom/target) + SIGNAL_HANDLER + + var/distance = get_dist(target, source) + + // We only care about handling the reach distance, anything closer or further is handled normally. + // Also, no z-level shenanigans. Yet. + if((distance != 2) || source.z != target.z) + return + + var/direction = get_dir(source, target) + if(!direction) + return + var/turf/open/adjacent_turf = get_step(source, direction) + + // Make sure it's an open turf we're trying to pass over. + if(!istype(adjacent_turf)) + return + + // Check if there's something dense inbetween, then allow it. + for(var/atom/thing in adjacent_turf) + if(thing.density) + return + + return COMPONENT_ALLOW_REACH diff --git a/code/datums/mutations/sight.dm b/code/datums/mutations/sight.dm index 8b26f6ca268f0..3aceb3e7d8ad2 100644 --- a/code/datums/mutations/sight.dm +++ b/code/datums/mutations/sight.dm @@ -2,8 +2,9 @@ /datum/mutation/human/nearsight name = "Near Sightness" desc = "The holder of this mutation has poor eyesight." + instability = NEGATIVE_STABILITY_MODERATE quality = MINOR_NEGATIVE - text_gain_indication = "You can't see very well." + text_gain_indication = span_danger("You can't see very well.") /datum/mutation/human/nearsight/on_acquiring(mob/living/carbon/human/owner) if(..()) @@ -19,8 +20,9 @@ /datum/mutation/human/blind name = "Blindness" desc = "Renders the subject completely blind." + instability = NEGATIVE_STABILITY_MAJOR quality = NEGATIVE - text_gain_indication = "You can't seem to see anything." + text_gain_indication = span_danger("You can't seem to see anything.") /datum/mutation/human/blind/on_acquiring(mob/living/carbon/human/owner) if(..()) @@ -38,9 +40,9 @@ desc = "The user of this genome can visually perceive the unique human thermal signature." quality = POSITIVE difficulty = 18 - text_gain_indication = "You can see the heat rising off of your skin..." - text_lose_indication = "You can no longer see the heat rising off of your skin..." - instability = 25 + text_gain_indication = span_notice("You can see the heat rising off of your skin...") + text_lose_indication = span_notice("You can no longer see the heat rising off of your skin...") + instability = POSITIVE_INSTABILITY_MAJOR // thermals aren't station equipment synchronizer_coeff = 1 power_coeff = 1 energy_coeff = 1 @@ -109,8 +111,8 @@ /datum/mutation/human/xray name = "X Ray Vision" desc = "A strange genome that allows the user to see between the spaces of walls." //actual x-ray would mean you'd constantly be blasting rads, wich might be fun for later //hmb - text_gain_indication = "The walls suddenly disappear!" - instability = 35 + text_gain_indication = span_notice("The walls suddenly disappear!") + instability = POSITIVE_INSTABILITY_MAJOR locked = TRUE /datum/mutation/human/xray/on_acquiring(mob/living/carbon/human/owner) @@ -133,7 +135,7 @@ quality = POSITIVE locked = TRUE difficulty = 16 - text_gain_indication = "You feel pressure building up behind your eyes." + text_gain_indication = span_notice("You feel pressure building up behind your eyes.") layer_used = FRONT_MUTATIONS_LAYER limb_req = BODY_ZONE_HEAD @@ -182,9 +184,10 @@ /datum/mutation/human/illiterate name = "Illiterate" desc = "Causes a severe case of Aphasia that prevents reading or writing." + instability = NEGATIVE_STABILITY_MAJOR quality = NEGATIVE - text_gain_indication = "You feel unable to read or write." - text_lose_indication = "You feel able to read and write again." + text_gain_indication = span_danger("You feel unable to read or write.") + text_lose_indication = span_danger("You feel able to read and write again.") /datum/mutation/human/illiterate/on_acquiring(mob/living/carbon/human/owner) if(..()) @@ -195,3 +198,4 @@ if(..()) return REMOVE_TRAIT(owner, TRAIT_ILLITERATE, GENETIC_MUTATION) + diff --git a/code/datums/mutations/speech.dm b/code/datums/mutations/speech.dm index 4c78c19610439..98560bb252679 100644 --- a/code/datums/mutations/speech.dm +++ b/code/datums/mutations/speech.dm @@ -1,11 +1,17 @@ //These are all minor mutations that affect your speech somehow. //Individual ones aren't commented since their functions should be evident at a glance +// no they arent bro + +#define ALPHABET list("a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z") +#define VOWELS list("a", "e", "i", "o", "u") +#define CONSONANTS (ALPHABET - VOWELS) /datum/mutation/human/nervousness name = "Nervousness" desc = "Causes the holder to stutter." + instability = NEGATIVE_STABILITY_MINI quality = MINOR_NEGATIVE - text_gain_indication = "You feel nervous." + text_gain_indication = span_danger("You feel nervous.") /datum/mutation/human/nervousness/on_life(seconds_per_tick, times_fired) if(SPT_PROB(5, seconds_per_tick)) @@ -14,9 +20,10 @@ /datum/mutation/human/wacky name = "Wacky" desc = "You are not a clown. You are the entire circus." + instability = NEGATIVE_STABILITY_MINI quality = MINOR_NEGATIVE - text_gain_indication = "You feel an off sensation in your voicebox." - text_lose_indication = "The off sensation passes." + text_gain_indication = span_sans(span_notice("You feel an off sensation in your voicebox.")) + text_lose_indication = span_notice("The off sensation passes.") /datum/mutation/human/wacky/on_acquiring(mob/living/carbon/human/owner) if(..()) @@ -33,12 +40,107 @@ speech_args[SPEECH_SPANS] |= SPAN_SANS +/datum/mutation/human/heckacious + name = "heckacious larincks" + desc = "duge what is WISH your words man..........." + quality = MINOR_NEGATIVE + text_gain_indication = span_sans("aw SHIT man. your throat feels like FUCKASS.") + text_lose_indication = span_notice("The demonic entity possessing your larynx has finally released its grasp.") + locked = TRUE + +/datum/mutation/human/heckacious/on_acquiring(mob/living/carbon/human/owner) + if(..()) + return + RegisterSignal(owner, COMSIG_LIVING_TREAT_MESSAGE, PROC_REF(handle_caps)) + RegisterSignal(owner, COMSIG_MOB_SAY, PROC_REF(handle_speech)) + +/datum/mutation/human/heckacious/on_losing(mob/living/carbon/human/owner) + if(..()) + return + UnregisterSignal(owner, list(COMSIG_LIVING_TREAT_MESSAGE, COMSIG_MOB_SAY)) + +/datum/mutation/human/heckacious/proc/handle_caps(atom/movable/source, list/message_args) + SIGNAL_HANDLER + message_args[TREAT_CAPITALIZE_MESSAGE] = FALSE + +/datum/mutation/human/heckacious/proc/handle_speech(datum/source, list/speech_args) + + var/message = speech_args[SPEECH_MESSAGE] + if(!message) + return + // Split for swapping purposes + message = " [message] " + + // Splitting up each word in the text to manually apply our intended changes + var/list/message_words = splittext(message, " ") + // What we use in the end + var/list/edited_message_words + + for(var/editing_word in message_words) + if(editing_word == " " || editing_word == "" ) + continue + // Used to replace the original later + var/og_word = editing_word + // Iterating through each replaceable-string in the .json + var/list/static/super_wacky_words = strings("heckacious.json", "heckacious") + + // If the word doesn't get replaced we might do something with it later + var/word_edited + for(var/key in super_wacky_words) + var/value = super_wacky_words[key] + // If list, pick one value from said list + if(islist(value)) + value = pick(value) + editing_word = replacetextEx(editing_word, "[uppertext(key)]", "[uppertext(value)]") + editing_word = replacetextEx(editing_word, "[capitalize(key)]", "[capitalize(value)]") + editing_word = replacetextEx(editing_word, "[key]", "[value]") + // Enable if we actually found something to change + if(editing_word != og_word) + word_edited = TRUE + + // Random caps + if(prob(10)) + editing_word = prob(85) ? uppertext(editing_word) : LOWER_TEXT(editing_word) + // some times....... we add DOTS... + if(prob(10)) + for(var/dotnum in 1 to rand(2, 8)) + editing_word += "." + // change for bold/italics/underline as well! + if(prob(10)) + var/extra_emphasis = pick("+", "_", "|") + editing_word = extra_emphasis + editing_word + extra_emphasis + + // If no replacement we do it manually + if(!word_edited) + if(prob(65)) + editing_word = replacetext(editing_word, pick(VOWELS), pick(VOWELS)) + // Many more consonants, double it! + for(var/i in 1 to rand(1, 2)) + editing_word = replacetext(editing_word, pick(CONSONANTS), pick(CONSONANTS)) + // rarely, lettter is DOUBBLED... + var/patchword = "" + for(var/letter in 1 to length(editing_word)) + if(prob(92)) + patchword += editing_word[letter] + continue + patchword += replacetext(editing_word[letter], "", editing_word[letter] + editing_word[letter]) + editing_word = patchword + + LAZYADD(edited_message_words, editing_word) + + var/edited_message = jointext(edited_message_words, " ") + + message = trim(edited_message) + + speech_args[SPEECH_MESSAGE] = message + /datum/mutation/human/mute name = "Mute" desc = "Completely inhibits the vocal section of the brain." + instability = NEGATIVE_STABILITY_MAJOR quality = NEGATIVE - text_gain_indication = "You feel unable to express yourself at all." - text_lose_indication = "You feel able to speak freely again." + text_gain_indication = span_danger("You feel unable to express yourself at all.") + text_lose_indication = span_danger("You feel able to speak freely again.") /datum/mutation/human/mute/on_acquiring(mob/living/carbon/human/owner) if(..()) @@ -53,9 +155,10 @@ /datum/mutation/human/unintelligible name = "Unintelligible" desc = "Partially inhibits the vocal center of the brain, severely distorting speech." + instability = NEGATIVE_STABILITY_MODERATE quality = NEGATIVE - text_gain_indication = "You can't seem to form any coherent thoughts!" - text_lose_indication = "Your mind feels more clear." + text_gain_indication = span_danger("You can't seem to form any coherent thoughts!") + text_lose_indication = span_danger("Your mind feels more clear.") /datum/mutation/human/unintelligible/on_acquiring(mob/living/carbon/human/owner) if(..()) @@ -70,9 +173,10 @@ /datum/mutation/human/swedish name = "Swedish" desc = "A horrible mutation originating from the distant past. Thought to be eradicated after the incident in 2037." + instability = NEGATIVE_STABILITY_MINI quality = MINOR_NEGATIVE - text_gain_indication = "You feel Swedish, however that works." - text_lose_indication = "The feeling of Swedishness passes." + text_gain_indication = span_notice("You feel Swedish, however that works.") + text_lose_indication = span_notice("The feeling of Swedishness passes.") /datum/mutation/human/swedish/on_acquiring(mob/living/carbon/human/owner) if(..()) @@ -101,9 +205,10 @@ /datum/mutation/human/chav name = "Chav" desc = "Unknown" + instability = NEGATIVE_STABILITY_MINI quality = MINOR_NEGATIVE - text_gain_indication = "Ye feel like a reet prat like, innit?" - text_lose_indication = "You no longer feel like being rude and sassy." + text_gain_indication = span_notice("Ye feel like a reet prat like, innit?") + text_lose_indication = span_notice("You no longer feel like being rude and sassy.") /datum/mutation/human/chav/on_acquiring(mob/living/carbon/human/owner) if(..()) @@ -138,10 +243,10 @@ /datum/mutation/human/elvis name = "Elvis" desc = "A terrifying mutation named after its 'patient-zero'." + instability = NEGATIVE_STABILITY_MINI quality = MINOR_NEGATIVE - locked = TRUE - text_gain_indication = "You feel pretty good, honeydoll." - text_lose_indication = "You feel a little less conversation would be great." + text_gain_indication = span_notice("You feel pretty good, honeydoll.") + text_lose_indication = span_notice("You feel a little less conversation would be great.") /datum/mutation/human/elvis/on_life(seconds_per_tick, times_fired) switch(pick(1,2)) @@ -186,9 +291,8 @@ name = "Stoner" desc = "A common mutation that severely decreases intelligence." quality = NEGATIVE - locked = TRUE - text_gain_indication = "You feel...totally chill, man!" - text_lose_indication = "You feel like you have a better sense of time." + text_gain_indication = span_notice("You feel...totally chill, man!") + text_lose_indication = span_notice("You feel like you have a better sense of time.") /datum/mutation/human/stoner/on_acquiring(mob/living/carbon/human/owner) ..() @@ -203,9 +307,10 @@ /datum/mutation/human/medieval name = "Medieval" desc = "A horrible mutation originating from the distant past, thought to have once been a common gene in all of old world Europe." + instability = NEGATIVE_STABILITY_MINI quality = MINOR_NEGATIVE - text_gain_indication = "You feel like seeking the holy grail!" - text_lose_indication = "You no longer feel like seeking anything." + text_gain_indication = span_notice("You feel like seeking the holy grail!") + text_lose_indication = span_notice("You no longer feel like seeking anything.") /datum/mutation/human/medieval/on_acquiring(mob/living/carbon/human/owner) if(..()) @@ -243,6 +348,7 @@ /datum/mutation/human/piglatin name = "Pig Latin" desc = "Historians say back in the 2020's humanity spoke entirely in this mystical language." + instability = NEGATIVE_STABILITY_MINI quality = MINOR_NEGATIVE text_gain_indication = span_notice("Omethingsay eelsfay offyay.") text_lose_indication = span_notice("The off sensation passes.") @@ -263,3 +369,7 @@ var/spoken_message = speech_args[SPEECH_MESSAGE] spoken_message = piglatin_sentence(spoken_message) speech_args[SPEECH_MESSAGE] = spoken_message + +#undef ALPHABET +#undef VOWELS +#undef CONSONANTS diff --git a/code/datums/mutations/telekinesis.dm b/code/datums/mutations/telekinesis.dm deleted file mode 100644 index 53d8beb56ff50..0000000000000 --- a/code/datums/mutations/telekinesis.dm +++ /dev/null @@ -1,40 +0,0 @@ -///Telekinesis lets you interact with objects from range, and gives you a light blue halo around your head. -/datum/mutation/human/telekinesis - name = "Telekinesis" - desc = "A strange mutation that allows the holder to interact with objects through thought." - quality = POSITIVE - difficulty = 18 - text_gain_indication = "You feel smarter!" - limb_req = BODY_ZONE_HEAD - instability = 30 - ///Typecache of atoms that TK shouldn't interact with - var/static/list/blacklisted_atoms = typecacheof(list(/atom/movable/screen)) - -/datum/mutation/human/telekinesis/New(class_ = MUT_OTHER, timer, datum/mutation/human/copymut) - ..() - if(!(type in visual_indicators)) - visual_indicators[type] = list(mutable_appearance('icons/mob/effects/genetics.dmi', "telekinesishead", -MUTATIONS_LAYER)) - -/datum/mutation/human/telekinesis/on_acquiring(mob/living/carbon/human/H) - . = ..() - if(.) - return - RegisterSignal(H, COMSIG_MOB_ATTACK_RANGED, PROC_REF(on_ranged_attack)) - -/datum/mutation/human/telekinesis/on_losing(mob/living/carbon/human/H) - . = ..() - if(.) - return - UnregisterSignal(H, COMSIG_MOB_ATTACK_RANGED) - -/datum/mutation/human/telekinesis/get_visual_indicator() - return visual_indicators[type][1] - -///Triggers on COMSIG_MOB_ATTACK_RANGED. Usually handles stuff like picking up items at range. -/datum/mutation/human/telekinesis/proc/on_ranged_attack(mob/source, atom/target) - SIGNAL_HANDLER - if(is_type_in_typecache(target, blacklisted_atoms)) - return - if(!tkMaxRangeCheck(source, target) || source.z != target.z) - return - return target.attack_tk(source) diff --git a/code/datums/mutations/telepathy.dm b/code/datums/mutations/telepathy.dm index 8619c2bddc476..4fa2a38db140a 100644 --- a/code/datums/mutations/telepathy.dm +++ b/code/datums/mutations/telepathy.dm @@ -2,9 +2,9 @@ name = "Telepathy" desc = "A rare mutation that allows the user to telepathically communicate to others." quality = POSITIVE - text_gain_indication = "You can hear your own voice echoing in your mind!" - text_lose_indication = "You don't hear your mind echo anymore." + text_gain_indication = span_notice("You can hear your own voice echoing in your mind!") + text_lose_indication = span_notice("You don't hear your mind echo anymore.") difficulty = 12 power_path = /datum/action/cooldown/spell/list_target/telepathy - instability = 10 + instability = POSITIVE_INSTABILITY_MINOR // basically a mediocre PDA messager energy_coeff = 1 diff --git a/code/datums/mutations/tongue_spike.dm b/code/datums/mutations/tongue_spike.dm index e6249041250b8..9e25ad6f4f296 100644 --- a/code/datums/mutations/tongue_spike.dm +++ b/code/datums/mutations/tongue_spike.dm @@ -3,7 +3,7 @@ desc = "Allows a creature to voluntary shoot their tongue out as a deadly weapon." quality = POSITIVE text_gain_indication = span_notice("Your feel like you can throw your voice.") - instability = 15 + instability = POSITIVE_INSTABILITY_MINI // worthless. also serves as a bit of a hint that it's not good power_path = /datum/action/cooldown/spell/tongue_spike energy_coeff = 1 @@ -89,7 +89,7 @@ desc = "Allows a creature to voluntary shoot their tongue out as biomass, allowing a long range transfer of chemicals." quality = POSITIVE text_gain_indication = span_notice("Your feel like you can really connect with people by throwing your voice.") - instability = 15 + instability = POSITIVE_INSTABILITY_MINOR // slightly less worthless. slightly. locked = TRUE power_path = /datum/action/cooldown/spell/tongue_spike/chem energy_coeff = 1 diff --git a/code/datums/mutations/touch.dm b/code/datums/mutations/touch.dm index ca94f109ac664..4bc4ec83bb0a0 100644 --- a/code/datums/mutations/touch.dm +++ b/code/datums/mutations/touch.dm @@ -4,10 +4,10 @@ quality = POSITIVE locked = TRUE difficulty = 16 - text_gain_indication = "You feel power flow through your hands." - text_lose_indication = "The energy in your hands subsides." + text_gain_indication = span_notice("You feel power flow through your hands.") + text_lose_indication = span_notice("The energy in your hands subsides.") power_path = /datum/action/cooldown/spell/touch/shock - instability = 35 + instability = POSITIVE_INSTABILITY_MODERATE // bad stun baton energy_coeff = 1 power_coeff = 1 @@ -85,3 +85,192 @@ icon = 'icons/obj/weapons/hand.dmi' icon_state = "zapper" inhand_icon_state = "zapper" + +/datum/mutation/human/lay_on_hands + name = "Mending Touch" + desc = "The affected can lay their hands on other people to transfer a small amount of their injuries to themselves." + quality = POSITIVE + locked = FALSE + difficulty = 16 + text_gain_indication = span_notice("Your hand feels blessed!") + text_lose_indication = span_notice("Your hand feels secular once more.") + power_path = /datum/action/cooldown/spell/touch/lay_on_hands + instability = POSITIVE_INSTABILITY_MAJOR + energy_coeff = 1 + power_coeff = 1 + synchronizer_coeff = 1 + +/datum/mutation/human/lay_on_hands/modify() + . = ..() + var/datum/action/cooldown/spell/touch/lay_on_hands/to_modify =. + + if(!istype(to_modify)) // null or invalid + return + + // More healing if powered up. + to_modify.heal_multiplier = GET_MUTATION_POWER(src) + // Less pain if synchronized. + to_modify.pain_multiplier = GET_MUTATION_SYNCHRONIZER(src) + +/datum/action/cooldown/spell/touch/lay_on_hands + name = "Mending Touch" + desc = "You can now lay your hands on other people to transfer a small amount of their physical injuries to yourself." + button_icon = 'icons/mob/actions/actions_genetic.dmi' + button_icon_state = "mending_touch" + sound = 'sound/magic/staff_healing.ogg' + cooldown_time = 12 SECONDS + school = SCHOOL_RESTORATION + invocation_type = INVOCATION_NONE + spell_requirements = NONE + antimagic_flags = NONE + + hand_path = /obj/item/melee/touch_attack/lay_on_hands + draw_message = span_notice("You ready your hand to transfer injuries to yourself.") + drop_message = span_notice("You lower your hand.") + /// Multiplies the amount healed, without increasing the received damage. + var/heal_multiplier = 1 + /// Multiplies the incoming pain from healing. + var/pain_multiplier = 1 + /// Icon used for beaming effect + var/beam_icon = "blood" + +/datum/action/cooldown/spell/touch/lay_on_hands/cast_on_hand_hit(obj/item/melee/touch_attack/hand, atom/victim, mob/living/carbon/mendicant) + + var/mob/living/hurtguy = victim + + // Heal more, hurt a bit more. + // If you crunch the numbers it sounds crazy good, + // but I think that's a fair reward for combining the efforts of Genetics, Medbay, and Mining to reach a hidden mechanic. + if(HAS_TRAIT_FROM(mendicant, TRAIT_HIPPOCRATIC_OATH, HIPPOCRATIC_OATH_TRAIT)) + heal_multiplier = 2 + pain_multiplier = 0.5 + to_chat(mendicant, span_green("You can feel the magic of the Rod of Aesculapius aiding your efforts!")) + beam_icon = "sendbeam" + var/obj/item/rod_of_asclepius/rod = locate() in mendicant.contents + if(rod) + rod.add_filter("cool_glow", 2, list("type" = "outline", "color" = COLOR_VERY_PALE_LIME_GREEN, "size" = 1.25)) + addtimer(CALLBACK(rod, TYPE_PROC_REF(/datum, remove_filter), "cool_glow"), 6 SECONDS) + + + // If a normal pacifist, heal and hurt more! + else if(HAS_TRAIT(mendicant, TRAIT_PACIFISM)) + heal_multiplier = 1.75 + pain_multiplier = 1.75 + to_chat(mendicant, span_green("Your peaceful nature helps you guide all the pain to yourself.")) + + var/success + if(iscarbon(hurtguy)) + success = do_complicated_heal(mendicant, hurtguy, heal_multiplier, pain_multiplier) + else + success = do_simple_heal(mendicant, hurtguy, heal_multiplier, pain_multiplier) + + // Both types can be ignited (technically at least), so we can just do this here. + if(hurtguy.fire_stacks > 0) + mendicant.set_fire_stacks(hurtguy.fire_stacks * pain_multiplier, remove_wet_stacks = TRUE) + if(hurtguy.on_fire) + mendicant.ignite_mob() + hurtguy.extinguish_mob() + + // No healies in the end, cancel + if(!success) + return FALSE + + mendicant.Beam(hurtguy, icon_state = beam_icon, time = 0.5 SECONDS) + beam_icon = initial(beam_icon) + + hurtguy.update_damage_overlays() + mendicant.update_damage_overlays() + + hurtguy.visible_message(span_notice("[mendicant] lays hands on [hurtguy]!")) + to_chat(target, span_boldnotice("[mendicant] lays hands on you, healing you!")) + new /obj/effect/temp_visual/heal(get_turf(hurtguy), COLOR_VERY_PALE_LIME_GREEN) + return success + +/datum/action/cooldown/spell/touch/lay_on_hands/proc/do_simple_heal(mob/living/carbon/mendicant, mob/living/hurtguy, heal_multiplier, pain_multiplier) + // Did the transfer work? + . = FALSE + + // Damage to heal + var/brute_to_heal = min(hurtguy.getBruteLoss(), 35 * heal_multiplier) + // no double dipping + var/burn_to_heal = min(hurtguy.getFireLoss(), (35 - brute_to_heal) * heal_multiplier) + + // Get at least organic limb to transfer the damage to + var/list/mendicant_organic_limbs = list() + for(var/obj/item/bodypart/possible_limb in mendicant.bodyparts) + if(IS_ORGANIC_LIMB(possible_limb)) + mendicant_organic_limbs += possible_limb + // None? Gtfo + if(!length(mendicant_organic_limbs)) + return . + + // Try to use our active hand, otherwise pick at random + var/obj/item/bodypart/mendicant_transfer_limb = mendicant.get_active_hand() + if(!(mendicant_transfer_limb in mendicant_organic_limbs)) + mendicant_transfer_limb = pick(mendicant_organic_limbs) + mendicant_transfer_limb.receive_damage(brute_to_heal * pain_multiplier, burn_to_heal * pain_multiplier, forced = TRUE, wound_bonus = CANT_WOUND) + + if(brute_to_heal) + hurtguy.adjustBruteLoss(-brute_to_heal) + . = TRUE + + if(burn_to_heal) + hurtguy.adjustFireLoss(-burn_to_heal) + . = TRUE + + return . + +/datum/action/cooldown/spell/touch/lay_on_hands/proc/do_complicated_heal(mob/living/carbon/mendicant, mob/living/carbon/hurtguy, heal_multiplier, pain_multiplier) + + // Did the transfer work? + . = FALSE + // Get the hurtguy's limbs and the mendicant's limbs to attempt a 1-1 transfer. + var/list/hurt_limbs = hurtguy.get_damaged_bodyparts(1, 1, BODYTYPE_ORGANIC) + hurtguy.get_wounded_bodyparts(BODYTYPE_ORGANIC) + var/list/mendicant_organic_limbs = list() + for(var/obj/item/bodypart/possible_limb in mendicant.bodyparts) + if(IS_ORGANIC_LIMB(possible_limb)) + mendicant_organic_limbs += possible_limb + + // If we have no organic available limbs just give up. + if(!length(mendicant_organic_limbs) || !length(hurt_limbs)) + return + + // Counter to make sure we don't take too much from separate limbs + var/total_damage_healed = 0 + // Transfer damage from one limb to the mendicant's counterpart. + for(var/obj/item/bodypart/affected_limb as anything in hurt_limbs) + var/obj/item/bodypart/mendicant_transfer_limb = mendicant.get_bodypart(affected_limb.body_zone) + // If the compared limb isn't organic, skip it and pick a random one. + if(!(mendicant_transfer_limb in mendicant_organic_limbs)) + mendicant_transfer_limb = pick(mendicant_organic_limbs) + + // Transfer at most 35 damage by default. + var/brute_damage = min(affected_limb.brute_dam, 35 * heal_multiplier) + // no double dipping + var/burn_damage = min(affected_limb.burn_dam, (35 * heal_multiplier) - brute_damage) + if((brute_damage || burn_damage) && total_damage_healed < (35 * heal_multiplier)) + total_damage_healed = brute_damage + burn_damage + . = TRUE + // Heal! + affected_limb.heal_damage(brute_damage * heal_multiplier, burn_damage * heal_multiplier, required_bodytype = BODYTYPE_ORGANIC) + // Hurt! + mendicant_transfer_limb.receive_damage(brute_damage * pain_multiplier, burn_damage * pain_multiplier, forced = TRUE, wound_bonus = CANT_WOUND) + + // Force light wounds onto you. + for(var/datum/wound/iter_wound as anything in affected_limb.wounds) + if(iter_wound.severity > WOUND_SEVERITY_MODERATE) + continue + . = TRUE + iter_wound.remove_wound() + iter_wound.apply_wound(mendicant_transfer_limb) + + + return . + +/obj/item/melee/touch_attack/lay_on_hands + name = "mending touch" + desc = "Unlike in your favorite tabletop games, you sadly can't cast this on yourself, so you can't use that as a Scapegoat." // mayus is reference. if you get it youre cool + icon = 'icons/obj/weapons/hand.dmi' + icon_state = "greyscale" + color = COLOR_VERY_PALE_LIME_GREEN + inhand_icon_state = "greyscale" diff --git a/code/datums/mutations/void_magnet.dm b/code/datums/mutations/void_magnet.dm index 48f04eda636a7..b5c893e32c547 100644 --- a/code/datums/mutations/void_magnet.dm +++ b/code/datums/mutations/void_magnet.dm @@ -3,7 +3,7 @@ desc = "A rare genome that attracts odd forces not usually observed." quality = MINOR_NEGATIVE //upsides and downsides text_gain_indication = span_notice("You feel a heavy, dull force just beyond the walls watching you.") - instability = 30 + instability = POSITIVE_INSTABILITY_MODERATE // useful, but has large drawbacks power_path = /datum/action/cooldown/spell/void/cursed energy_coeff = 1 synchronizer_coeff = 1 diff --git a/code/datums/mutations/webbing.dm b/code/datums/mutations/webbing.dm index 0fda118d0ed60..e372cb4bf5cdb 100644 --- a/code/datums/mutations/webbing.dm +++ b/code/datums/mutations/webbing.dm @@ -3,8 +3,8 @@ name = "Webbing Production" desc = "Allows the user to lay webbing, and travel through it." quality = POSITIVE - text_gain_indication = "Your skin feels webby." - instability = 15 + text_gain_indication = span_notice("Your skin feels webby.") + instability = POSITIVE_INSTABILITY_MODERATE // useful until you're lynched power_path = /datum/action/cooldown/mob_cooldown/lay_web/genetic energy_coeff = 1 diff --git a/code/datums/proximity_monitor/field.dm b/code/datums/proximity_monitor/field.dm index 67bbef948ef3d..03e7c054d0908 100644 --- a/code/datums/proximity_monitor/field.dm +++ b/code/datums/proximity_monitor/field.dm @@ -129,7 +129,7 @@ if(current_range > 0) local_field_turfs += RANGE_TURFS(current_range - 1, center) if(current_range > 1) - local_edge_turfs = local_field_turfs - RANGE_TURFS(current_range, center) + local_edge_turfs = RANGE_TURFS(current_range, center) - local_field_turfs return list(FIELD_TURFS_KEY = local_field_turfs, EDGE_TURFS_KEY = local_edge_turfs) //Gets edge direction/corner, only works with square radius/WDH fields! @@ -169,6 +169,7 @@ name = "strange multitool" desc = "Seems to project a colored field!" var/operating = FALSE + var/range_to_use = 5 var/datum/proximity_monitor/advanced/debug/current = null /obj/item/multitool/field_debug/Destroy() @@ -176,7 +177,7 @@ return ..() /obj/item/multitool/field_debug/proc/setup_debug_field() - current = new(src, 5, FALSE) + current = new(src, range_to_use, FALSE) current.set_fieldturf_color = "#aaffff" current.set_edgeturf_color = "#ffaaff" current.recalculate_field(full_recalc = TRUE) diff --git a/code/datums/proximity_monitor/fields/projectile_dampener.dm b/code/datums/proximity_monitor/fields/projectile_dampener.dm index 3e696e5fb132d..fe23fe0be33e5 100644 --- a/code/datums/proximity_monitor/fields/projectile_dampener.dm +++ b/code/datums/proximity_monitor/fields/projectile_dampener.dm @@ -28,6 +28,10 @@ release_projectile(projectile) return ..() +/datum/proximity_monitor/advanced/projectile_dampener/recalculate_field(full_recalc) + full_recalc = TRUE // We always perform a full recalc because we need to update ALL the sprites + return ..() + /datum/proximity_monitor/advanced/projectile_dampener/process() var/list/ranged = list() for(var/obj/projectile/projectile in range(current_range, get_turf(host))) diff --git a/code/datums/proximity_monitor/fields/timestop.dm b/code/datums/proximity_monitor/fields/timestop.dm index 91e13c791428e..79996dee2dd36 100644 --- a/code/datums/proximity_monitor/fields/timestop.dm +++ b/code/datums/proximity_monitor/fields/timestop.dm @@ -214,7 +214,7 @@ frozen_mobs += victim victim.Stun(20, ignore_canstun = TRUE) victim.add_traits(list(TRAIT_MUTE, TRAIT_EMOTEMUTE), TIMESTOP_TRAIT) - DSmove_manager.stop_looping(victim) //stops them mid pathing even if they're stunimmune //This is really dumb + GLOB.move_manager.stop_looping(victim) //stops them mid pathing even if they're stunimmune //This is really dumb if(isanimal(victim)) var/mob/living/simple_animal/animal_victim = victim animal_victim.toggle_ai(AI_OFF) diff --git a/code/datums/quirks/negative_quirks/addict.dm b/code/datums/quirks/negative_quirks/addict.dm index f97dae32c260f..767d9283baef0 100644 --- a/code/datums/quirks/negative_quirks/addict.dm +++ b/code/datums/quirks/negative_quirks/addict.dm @@ -123,7 +123,7 @@ /obj/effect/spawner/random/entertainment/cigarette_pack, /obj/effect/spawner/random/entertainment/cigar, /obj/effect/spawner/random/entertainment/lighter, - /obj/item/clothing/mask/cigarette/pipe, + /obj/item/cigarette/pipe, ) /datum/quirk_constant_data/smoker @@ -162,7 +162,7 @@ . = ..() var/mob/living/carbon/human/human_holder = quirk_holder var/obj/item/mask_item = human_holder.get_item_by_slot(ITEM_SLOT_MASK) - if(istype(mask_item, /obj/item/clothing/mask/cigarette)) + if(istype(mask_item, /obj/item/cigarette)) var/obj/item/storage/fancy/cigarettes/cigarettes = drug_container_type if(istype(mask_item, initial(cigarettes.spawn_type))) quirk_holder.clear_mood_event("wrong_cigs") diff --git a/code/datums/quirks/negative_quirks/allergic.dm b/code/datums/quirks/negative_quirks/allergic.dm index 64b4c560bde96..8588b95e6e33c 100644 --- a/code/datums/quirks/negative_quirks/allergic.dm +++ b/code/datums/quirks/negative_quirks/allergic.dm @@ -55,14 +55,19 @@ return var/mob/living/carbon/carbon_quirk_holder = quirk_holder + //Just halts the progression, I'd suggest you run to medbay asap to get it fixed + if(carbon_quirk_holder.reagents.has_reagent(/datum/reagent/medicine/epinephrine)) + for(var/allergy in allergies) + var/datum/reagent/instantiated_med = carbon_quirk_holder.reagents.has_reagent(allergy) + if(!instantiated_med) + continue + instantiated_med.reagent_removal_skip_list |= ALLERGIC_REMOVAL_SKIP + return //block damage so long as epinephrine exists + for(var/allergy in allergies) var/datum/reagent/instantiated_med = carbon_quirk_holder.reagents.has_reagent(allergy) if(!instantiated_med) continue - //Just halts the progression, I'd suggest you run to medbay asap to get it fixed - if(carbon_quirk_holder.reagents.has_reagent(/datum/reagent/medicine/epinephrine)) - instantiated_med.reagent_removal_skip_list |= ALLERGIC_REMOVAL_SKIP - return //intentionally stops the entire proc so we avoid the organ damage after the loop instantiated_med.reagent_removal_skip_list -= ALLERGIC_REMOVAL_SKIP carbon_quirk_holder.adjustToxLoss(3 * seconds_per_tick) carbon_quirk_holder.reagents.add_reagent(/datum/reagent/toxin/histamine, 3 * seconds_per_tick) diff --git a/code/datums/quirks/negative_quirks/blindness.dm b/code/datums/quirks/negative_quirks/blindness.dm index ce57e946fe92e..d0af915dc32b0 100644 --- a/code/datums/quirks/negative_quirks/blindness.dm +++ b/code/datums/quirks/negative_quirks/blindness.dm @@ -10,8 +10,15 @@ quirk_flags = QUIRK_HUMAN_ONLY|QUIRK_CHANGES_APPEARANCE mail_goodies = list(/obj/item/clothing/glasses/sunglasses, /obj/item/cane/white) +/datum/quirk_constant_data/blindfoldcolor + associated_typepath = /datum/quirk/item_quirk/blindness + customization_options = list(/datum/preference/color/blindfold_color) + /datum/quirk/item_quirk/blindness/add_unique(client/client_source) - give_item_to_holder(/obj/item/clothing/glasses/blindfold/white, list(LOCATION_EYES = ITEM_SLOT_EYES, LOCATION_BACKPACK = ITEM_SLOT_BACKPACK, LOCATION_HANDS = ITEM_SLOT_HANDS)) + var/obj/item/clothing/glasses/blindfold/white/blindfold = new + blindfold.add_atom_colour(client_source?.prefs.read_preference(/datum/preference/color/blindfold_color), FIXED_COLOUR_PRIORITY) + blindfold.colored_before = TRUE + give_item_to_holder(blindfold, list(LOCATION_EYES = ITEM_SLOT_EYES, LOCATION_BACKPACK = ITEM_SLOT_BACKPACK, LOCATION_HANDS = ITEM_SLOT_HANDS)) /datum/quirk/item_quirk/blindness/add(client/client_source) quirk_holder.become_blind(QUIRK_TRAIT) diff --git a/code/datums/quirks/negative_quirks/chronic_illness.dm b/code/datums/quirks/negative_quirks/chronic_illness.dm index 663d41381987e..f0809b55d2b0f 100644 --- a/code/datums/quirks/negative_quirks/chronic_illness.dm +++ b/code/datums/quirks/negative_quirks/chronic_illness.dm @@ -9,8 +9,10 @@ hardcore_value = 12 mail_goodies = list(/obj/item/storage/pill_bottle/sansufentanyl) -/datum/quirk/item_quirk/chronic_illness/add_unique(client/client_source) +/datum/quirk/item_quirk/chronic_illness/add(client/client_source) var/datum/disease/chronic_illness/hms = new /datum/disease/chronic_illness() quirk_holder.ForceContractDisease(hms) + +/datum/quirk/item_quirk/chronic_illness/add_unique(client/client_source) give_item_to_holder(/obj/item/storage/pill_bottle/sansufentanyl, list(LOCATION_BACKPACK = ITEM_SLOT_BACKPACK),flavour_text = "You've been provided with medication to help manage your condition. Take it regularly to avoid complications.") give_item_to_holder(/obj/item/healthanalyzer/simple/disease, list(LOCATION_BACKPACK = ITEM_SLOT_BACKPACK)) diff --git a/code/datums/quirks/negative_quirks/hemiplegic.dm b/code/datums/quirks/negative_quirks/hemiplegic.dm index b82ad434dfbe2..ac073d4ef8865 100644 --- a/code/datums/quirks/negative_quirks/hemiplegic.dm +++ b/code/datums/quirks/negative_quirks/hemiplegic.dm @@ -16,7 +16,7 @@ associated_typepath = /datum/quirk/hemiplegic customization_options = list(/datum/preference/choiced/hemiplegic) -/datum/quirk/hemiplegic/add_unique(client/client_source) +/datum/quirk/hemiplegic/add(client/client_source) var/datum/brain_trauma/severe/paralysis/hemiplegic/side_choice = GLOB.side_choice_hemiplegic[client_source?.prefs?.read_preference(/datum/preference/choiced/hemiplegic)] if(isnull(side_choice)) // Client gone or they chose a random side side_choice = GLOB.side_choice_hemiplegic[pick(GLOB.side_choice_hemiplegic)] diff --git a/code/datums/quirks/negative_quirks/insanity.dm b/code/datums/quirks/negative_quirks/insanity.dm index 40e70f07b1831..c5fc1afdf0d7c 100644 --- a/code/datums/quirks/negative_quirks/insanity.dm +++ b/code/datums/quirks/negative_quirks/insanity.dm @@ -1,13 +1,13 @@ /datum/quirk/insanity name = "Reality Dissociation Syndrome" - desc = "You suffer from a severe disorder that causes very vivid hallucinations. \ + desc = "You suffer from a severe disorder that causes very vivid hallucinations and trouble expressing your ideas. \ Mindbreaker toxin can suppress its effects, and you are immune to mindbreaker's hallucinogenic properties. \ THIS IS NOT A LICENSE TO GRIEF." icon = FA_ICON_GRIN_TONGUE_WINK value = -8 gain_text = span_userdanger("...") lose_text = span_notice("You feel in tune with the world again.") - medical_record_text = "Patient suffers from acute Reality Dissociation Syndrome and experiences vivid hallucinations." + medical_record_text = "Patient suffers from acute Reality Dissociation Syndrome and experiences vivid hallucinations, and may have trouble speaking." hardcore_value = 6 mail_goodies = list(/obj/item/storage/pill_bottle/lsdpsych) /// Weakref to the trauma we give out @@ -17,7 +17,7 @@ if(!iscarbon(quirk_holder)) return var/mob/living/carbon/carbon_quirk_holder = quirk_holder - + // Setup our special RDS mild hallucination. // Not a unique subtype so not to plague subtypesof, // also as we inherit the names and values from our quirk. diff --git a/code/datums/quirks/negative_quirks/prosthetic_limb.dm b/code/datums/quirks/negative_quirks/prosthetic_limb.dm index eda4217b795d1..f8941975ac15e 100644 --- a/code/datums/quirks/negative_quirks/prosthetic_limb.dm +++ b/code/datums/quirks/negative_quirks/prosthetic_limb.dm @@ -16,9 +16,9 @@ customization_options = list(/datum/preference/choiced/prosthetic) /datum/quirk/prosthetic_limb/add_unique(client/client_source) - var/limb_type = GLOB.limb_choice[client_source?.prefs?.read_preference(/datum/preference/choiced/prosthetic)] + var/limb_type = GLOB.prosthetic_limb_choice[client_source?.prefs?.read_preference(/datum/preference/choiced/prosthetic)] if(isnull(limb_type)) //Client gone or they chose a random prosthetic - limb_type = GLOB.limb_choice[pick(GLOB.limb_choice)] + limb_type = GLOB.prosthetic_limb_choice[pick(GLOB.prosthetic_limb_choice)] var/mob/living/carbon/human/human_holder = quirk_holder var/obj/item/bodypart/surplus = new limb_type() diff --git a/code/datums/quirks/neutral_quirks/bald.dm b/code/datums/quirks/neutral_quirks/bald.dm index 8a760f6ceefdb..2844b790ddfd3 100644 --- a/code/datums/quirks/neutral_quirks/bald.dm +++ b/code/datums/quirks/neutral_quirks/bald.dm @@ -21,7 +21,7 @@ /datum/quirk/item_quirk/bald/add_unique(client/client_source) var/obj/item/clothing/head/wig/natural/baldie_wig = new(get_turf(quirk_holder)) if(old_hair == "Bald") - baldie_wig.hairstyle = pick(GLOB.hairstyles_list - "Bald") + baldie_wig.hairstyle = pick(SSaccessories.hairstyles_list - "Bald") else baldie_wig.hairstyle = old_hair diff --git a/code/datums/quirks/neutral_quirks/heretochromatic.dm b/code/datums/quirks/neutral_quirks/heretochromatic.dm index 629d26e053ec9..311cbf66868f0 100644 --- a/code/datums/quirks/neutral_quirks/heretochromatic.dm +++ b/code/datums/quirks/neutral_quirks/heretochromatic.dm @@ -7,11 +7,7 @@ value = 0 mail_goodies = list(/obj/item/clothing/glasses/eyepatch) -// Only your first eyes are heterochromatic -// If someone comes and says "well mr coder you can have DNA bound heterochromia so it's not unrealistic -// to allow all inserted replacement eyes to become heterochromatic or for it to transfer between mobs" -// Then just change this to [proc/add] I really don't care -/datum/quirk/heterochromatic/add_unique(client/client_source) +/datum/quirk/heterochromatic/add(client/client_source) var/color = client_source?.prefs.read_preference(/datum/preference/color/heterochromatic) if(!color) return @@ -24,6 +20,7 @@ var/was_not_hetero = !human_holder.eye_color_heterochromatic human_holder.eye_color_heterochromatic = TRUE human_holder.eye_color_right = color + human_holder.dna.update_ui_block(DNA_EYE_COLOR_RIGHT_BLOCK) var/obj/item/organ/internal/eyes/eyes_of_the_holder = quirk_holder.get_organ_by_type(/obj/item/organ/internal/eyes) if(!eyes_of_the_holder) diff --git a/code/datums/quirks/neutral_quirks/pride_pin.dm b/code/datums/quirks/neutral_quirks/pride_pin.dm deleted file mode 100644 index 488c0a2bccb58..0000000000000 --- a/code/datums/quirks/neutral_quirks/pride_pin.dm +++ /dev/null @@ -1,19 +0,0 @@ -/datum/quirk/item_quirk/pride_pin - name = "Pride Pin" - desc = "Show off your pride with this changing pride pin!" - icon = FA_ICON_RAINBOW - value = 0 - gain_text = span_notice("You feel fruity.") - lose_text = span_danger("You feel only slightly less fruity than before.") - medical_record_text = "Patient appears to be fruity." - -/datum/quirk/item_quirk/pride_pin/add_unique(client/client_source) - var/obj/item/clothing/accessory/pride/pin = new(get_turf(quirk_holder)) - - var/pride_choice = client_source?.prefs?.read_preference(/datum/preference/choiced/pride_pin) || assoc_to_keys(GLOB.pride_pin_reskins)[1] - var/pride_reskin = GLOB.pride_pin_reskins[pride_choice] - - pin.current_skin = pride_choice - pin.icon_state = pride_reskin - - give_item_to_holder(pin, list(LOCATION_BACKPACK = ITEM_SLOT_BACKPACK, LOCATION_HANDS = ITEM_SLOT_HANDS)) diff --git a/code/datums/quirks/neutral_quirks/transhumanist.dm b/code/datums/quirks/neutral_quirks/transhumanist.dm index 046c2bb30f089..ea6494a6b327b 100644 --- a/code/datums/quirks/neutral_quirks/transhumanist.dm +++ b/code/datums/quirks/neutral_quirks/transhumanist.dm @@ -23,7 +23,7 @@ lose_text = span_danger("Robots don't seem all that great anymore.") medical_record_text = "Patient reports hating pathetic creatures of meat and bone." mail_goodies = list( - /obj/item/stock_parts/cell/potato, + /obj/item/stock_parts/power_store/cell/potato, /obj/item/stack/cable_coil, /obj/item/toy/talking/ai, /obj/item/toy/figure/borg, @@ -110,6 +110,14 @@ if(isnull(part_type)) //Client gone or they chose a random part part_type = GLOB.part_choice_transhuman[pick(GLOB.part_choice_transhuman)] + if(quirk_holder.has_quirk(/datum/quirk/prosthetic_limb)) + var/obj/item/bodypart/shit_limb = GLOB.prosthetic_limb_choice[client_source?.prefs?.read_preference(/datum/preference/choiced/prosthetic)] + var/obj/item/bodypart/part_part = part_type + if(ispath(shit_limb, /obj/item/bodypart) && ispath(part_part, /obj/item/bodypart)) + // dumbass already has a part in the same spot so let's just let the shoddy trait do its thing instead + if(initial(shit_limb.body_zone) == initial(part_part.body_zone)) + return + var/mob/living/carbon/human/human_holder = quirk_holder var/obj/item/new_part = new part_type() if(isbodypart(new_part)) diff --git a/code/datums/quirks/positive_quirks/bilingual.dm b/code/datums/quirks/positive_quirks/bilingual.dm index 408a952cfe18a..20123dbe87afb 100644 --- a/code/datums/quirks/positive_quirks/bilingual.dm +++ b/code/datums/quirks/positive_quirks/bilingual.dm @@ -12,7 +12,7 @@ associated_typepath = /datum/quirk/bilingual customization_options = list(/datum/preference/choiced/language) -/datum/quirk/bilingual/add_unique(client/client_source) +/datum/quirk/bilingual/add(client/client_source) var/wanted_language = client_source?.prefs.read_preference(/datum/preference/choiced/language) var/datum/language/language_type if(wanted_language == "Random") diff --git a/code/datums/quirks/positive_quirks/night_vision.dm b/code/datums/quirks/positive_quirks/night_vision.dm deleted file mode 100644 index 808a213db514b..0000000000000 --- a/code/datums/quirks/positive_quirks/night_vision.dm +++ /dev/null @@ -1,28 +0,0 @@ -/datum/quirk/night_vision - name = "Night Vision" - desc = "You can see slightly more clearly in full darkness than most people." - icon = FA_ICON_MOON - value = 4 - mob_trait = TRAIT_NIGHT_VISION - gain_text = span_notice("The shadows seem a little less dark.") - lose_text = span_danger("Everything seems a little darker.") - medical_record_text = "Patient's eyes show above-average acclimation to darkness." - mail_goodies = list( - /obj/item/flashlight/flashdark, - /obj/item/food/grown/mushroom/glowshroom/shadowshroom, - /obj/item/skillchip/light_remover, - ) - -/datum/quirk/night_vision/add(client/client_source) - refresh_quirk_holder_eyes() - -/datum/quirk/night_vision/remove() - refresh_quirk_holder_eyes() - -/datum/quirk/night_vision/proc/refresh_quirk_holder_eyes() - var/mob/living/carbon/human/human_quirk_holder = quirk_holder - var/obj/item/organ/internal/eyes/eyes = human_quirk_holder.get_organ_by_type(/obj/item/organ/internal/eyes) - if(!eyes || eyes.lighting_cutoff) - return - // We've either added or removed TRAIT_NIGHT_VISION before calling this proc. Just refresh the eyes. - eyes.refresh() diff --git a/code/datums/quirks/positive_quirks/settler.dm b/code/datums/quirks/positive_quirks/settler.dm index 81402c050cdd8..3b4084242b811 100644 --- a/code/datums/quirks/positive_quirks/settler.dm +++ b/code/datums/quirks/positive_quirks/settler.dm @@ -9,19 +9,30 @@ value = 4 mob_trait = TRAIT_SETTLER quirk_flags = QUIRK_HUMAN_ONLY|QUIRK_CHANGES_APPEARANCE - medical_record_text = "Patient appears to be abnormally stout." + medical_record_text = "Patient has been exposed to planetary conditions for extended periods, resulting in an excessively stout build." mail_goodies = list( /obj/item/clothing/shoes/workboots/mining, /obj/item/gps, ) + /// Most of the behavior of settler is from these traits, rather than exclusively the quirk + var/list/settler_traits = list( + TRAIT_EXPERT_FISHER, + TRAIT_ROUGHRIDER, + TRAIT_STUBBY_BODY, + TRAIT_BEAST_EMPATHY, + TRAIT_STURDY_FRAME, + ) -/datum/quirk/item_quirk/settler/add_unique(client/client_source) - give_item_to_holder(/obj/item/storage/box/papersack/wheat, list(LOCATION_BACKPACK = ITEM_SLOT_BACKPACK, LOCATION_HANDS = ITEM_SLOT_HANDS)) - give_item_to_holder(/obj/item/storage/toolbox/fishing/small, list(LOCATION_BACKPACK = ITEM_SLOT_BACKPACK, LOCATION_HANDS = ITEM_SLOT_HANDS)) +/datum/quirk/item_quirk/settler/add(client/client_source) var/mob/living/carbon/human/human_quirkholder = quirk_holder human_quirkholder.set_mob_height(HUMAN_HEIGHT_SHORTEST) human_quirkholder.add_movespeed_modifier(/datum/movespeed_modifier/settler) human_quirkholder.physiology.hunger_mod *= 0.5 //good for you, shortass, you don't get hungry nearly as often + human_quirkholder.add_traits(settler_traits, QUIRK_TRAIT) + +/datum/quirk/item_quirk/settler/add_unique(client/client_source) + give_item_to_holder(/obj/item/storage/box/papersack/wheat, list(LOCATION_BACKPACK = ITEM_SLOT_BACKPACK, LOCATION_HANDS = ITEM_SLOT_HANDS)) + give_item_to_holder(/obj/item/storage/toolbox/fishing/small, list(LOCATION_BACKPACK = ITEM_SLOT_BACKPACK, LOCATION_HANDS = ITEM_SLOT_HANDS)) /datum/quirk/item_quirk/settler/remove() if(QDELING(quirk_holder)) @@ -30,3 +41,4 @@ human_quirkholder.set_mob_height(HUMAN_HEIGHT_MEDIUM) human_quirkholder.remove_movespeed_modifier(/datum/movespeed_modifier/settler) human_quirkholder.physiology.hunger_mod *= 2 + human_quirkholder.remove_traits(settler_traits, QUIRK_TRAIT) diff --git a/code/datums/quirks/positive_quirks/signer.dm b/code/datums/quirks/positive_quirks/signer.dm index 8ff95d25e4a67..9e354ec71492f 100644 --- a/code/datums/quirks/positive_quirks/signer.dm +++ b/code/datums/quirks/positive_quirks/signer.dm @@ -7,8 +7,10 @@ medical_record_text = "Patient can communicate with sign language." mail_goodies = list(/obj/item/clothing/gloves/radio) -/datum/quirk/item_quirk/signer/add_unique(client/client_source) +/datum/quirk/item_quirk/signer/add(client/client_source) quirk_holder.AddComponent(/datum/component/sign_language) + +/datum/quirk/item_quirk/signer/add_unique(client/client_source) var/obj/item/clothing/gloves/gloves_type = /obj/item/clothing/gloves/radio if(isplasmaman(quirk_holder)) gloves_type = /obj/item/clothing/gloves/color/plasmaman/radio diff --git a/code/datums/quirks/positive_quirks/spacer.dm b/code/datums/quirks/positive_quirks/spacer.dm index 991c2001fbb08..4be27fe16b2e2 100644 --- a/code/datums/quirks/positive_quirks/spacer.dm +++ b/code/datums/quirks/positive_quirks/spacer.dm @@ -42,7 +42,6 @@ // Yes, it's assumed for planetary maps that you start at gravity sickness. check_z(quirk_holder, skip_timers = TRUE) -/datum/quirk/spacer_born/add_unique(client/client_source) // drift slightly faster through zero G quirk_holder.inertia_move_delay *= 0.8 diff --git a/code/datums/ruins/icemoon.dm b/code/datums/ruins/icemoon.dm index c79d7229ceecf..73153792ee647 100644 --- a/code/datums/ruins/icemoon.dm +++ b/code/datums/ruins/icemoon.dm @@ -166,6 +166,12 @@ description = "3 Peaks Radio, where the 2000's live forever." suffix = "icemoon_underground_frozen_comms.dmm" +/datum/map_template/ruin/icemoon/underground/comms_agent + name = "Icemoon Listening Post" + id = "icemoon_comms_agent" + description = "Radio signals are being detected and the source is this completely innocent pile of snow." + suffix = "icemoon_underground_comms_agent.dmm" + //TODO: Bottom-Level ONLY Spawns after Refactoring Related Code /datum/map_template/ruin/icemoon/underground/plasma_facility name = "Ice-Ruin Abandoned Plasma Facility" diff --git a/code/datums/ruins/lavaland.dm b/code/datums/ruins/lavaland.dm index 40d7ef49bd4c7..2cde66f187d14 100644 --- a/code/datums/ruins/lavaland.dm +++ b/code/datums/ruins/lavaland.dm @@ -30,7 +30,7 @@ suffix = "lavaland_biodome_clown_planet.dmm" /datum/map_template/ruin/lavaland/lizgas - name = "The Lizard's Gas(Lava)" + name = "Lava-Ruin The Lizard's Gas" id = "lizgas2" description = "A recently opened gas station from the Lizard's Gas franchise." suffix = "lavaland_surface_gas.dmm" @@ -316,3 +316,10 @@ suffix = "lavaland_surface_mookvillage.dmm" allow_duplicates = FALSE cost = 5 + +/datum/map_template/ruin/lavaland/shuttle_wreckage + name = "Lava-Ruin Shuttle Wreckage" + id = "shuttle_wreckage" + description = "Not every shuttle makes it back to CentCom." + suffix = "lavaland_surface_shuttle_wreckage.dmm" + allow_duplicates = FALSE diff --git a/code/datums/screentips/screentips.dm b/code/datums/screentips/screentips.dm index d72e41960e505..20a7f33497400 100644 --- a/code/datums/screentips/screentips.dm +++ b/code/datums/screentips/screentips.dm @@ -1,4 +1,4 @@ -#define HINT_ICON_FILE 'icons/ui_icons/screentips/cursor_hints.dmi' +#define HINT_ICON_FILE 'icons/ui/screentips/cursor_hints.dmi' /// Stores the cursor hint icons for screentip context. GLOBAL_LIST_INIT_TYPED(screentip_context_icons, /image, prepare_screentip_context_icons()) diff --git a/code/datums/shuttles/emergency.dm b/code/datums/shuttles/emergency.dm index 0361848385f1a..0f45a0c6a08b4 100644 --- a/code/datums/shuttles/emergency.dm +++ b/code/datums/shuttles/emergency.dm @@ -265,6 +265,13 @@ description = "We pulled this one out of Mothball just for you!" occupancy_limit = "40" +/datum/map_template/shuttle/emergency/wawa + suffix = "wawa" + name = "Wawa Stand-in Emergency Shuttle" + description = "Due to a recent clerical error in the funding department, a lot of funding went to lizard plushies. Due to the costs, Nanotrasen has supplied a nearby garbage truck as a stand-in. Better learn how to share spots." + credit_cost = CARGO_CRATE_VALUE * 6 + occupancy_limit = "25" + /datum/map_template/shuttle/emergency/scrapheap suffix = "scrapheap" name = "Standby Evacuation Vessel \"Scrapheap Challenge\"" diff --git a/code/datums/shuttles/hunter.dm b/code/datums/shuttles/hunter.dm index d8b7f708324e2..ade978c937e07 100644 --- a/code/datums/shuttles/hunter.dm +++ b/code/datums/shuttles/hunter.dm @@ -17,3 +17,7 @@ /datum/map_template/shuttle/hunter/psyker suffix = "psyker" name = "Psyker Fortune-Telling Ship" + +/datum/map_template/shuttle/hunter/mi13_foodtruck + suffix = "mi13_foodtruck" + name = "Perfectly Ordinary Food Truck" diff --git a/code/datums/shuttles/whiteship.dm b/code/datums/shuttles/whiteship.dm index 0b48575e057c2..b8dbcfd4bd76e 100644 --- a/code/datums/shuttles/whiteship.dm +++ b/code/datums/shuttles/whiteship.dm @@ -24,7 +24,7 @@ /datum/map_template/shuttle/whiteship/birdshot suffix = "birdshot" name = "NT Patrol Bee" - description = "A small patrol vessel with a central corridor connecting all rooms. Features 2 small cargo bays and a brig. Spawns with an agressive and deadly Gelatinous Cube" + description = "A small patrol vessel with a central corridor connecting all rooms. Features 2 small cargo bays and a brig. Spawns with an aggressive and deadly Gelatinous Cube" /datum/map_template/shuttle/whiteship/kilo suffix = "kilo" diff --git a/code/datums/signals.dm b/code/datums/signals.dm index ddb7dd9cc9e37..01ca02e41c264 100644 --- a/code/datums/signals.dm +++ b/code/datums/signals.dm @@ -120,7 +120,9 @@ // all the objects that are receiving the signal get the signal this final time. // AKA: No you can't cancel the signal reception of another object by doing an unregister in the same signal. var/list/queued_calls = list() - for(var/datum/listening_datum as anything in target) - queued_calls[listening_datum] = listening_datum._signal_procs[src][sigtype] - for(var/datum/listening_datum as anything in queued_calls) - . |= call(listening_datum, queued_calls[listening_datum])(arglist(arguments)) + // This should be faster than doing `var/datum/listening_datum as anything in target` as it does not implicitly copy the list + for(var/i in 1 to length(target)) + var/datum/listening_datum = target[i] + queued_calls.Add(listening_datum, listening_datum._signal_procs[src][sigtype]) + for(var/i in 1 to length(queued_calls) step 2) + . |= call(queued_calls[i], queued_calls[i + 1])(arglist(arguments)) diff --git a/code/datums/skills/athletics.dm b/code/datums/skills/athletics.dm index 2ef336e5ba9b2..ac9d5e415a14e 100644 --- a/code/datums/skills/athletics.dm +++ b/code/datums/skills/athletics.dm @@ -5,23 +5,37 @@ // The skill value modifier effects the max duration that is possible for /datum/status_effect/exercised; The rands modifier determines block probability and crit probability while boxing against boxers modifiers = list( SKILL_VALUE_MODIFIER = list( - 1 MINUTES, - 1.5 MINUTES, - 2 MINUTES, - 2.5 MINUTES, - 3 MINUTES, - 3.5 MINUTES, + 1 MINUTES, + 1.5 MINUTES, + 2 MINUTES, + 2.5 MINUTES, + 3 MINUTES, + 3.5 MINUTES, 5 MINUTES - ), + ), SKILL_RANDS_MODIFIER = list( - 0, - 5, - 10, - 15, - 20, - 30, + 0, + 5, + 10, + 15, + 20, + 30, 50 ) ) - + skill_item_path = /obj/item/clothing/gloves/boxing/golden + +/datum/skill/athletics/New() + . = ..() + levelUpMessages[SKILL_LEVEL_NOVICE] = span_nicegreen("I am just getting started on my [name] journey! I think I should be able to identify other people who are working to improve their body by sight.") + +/datum/skill/athletics/level_gained(datum/mind/mind, new_level, old_level, silent) + . = ..() + if(new_level >= SKILL_LEVEL_NOVICE && old_level < SKILL_LEVEL_NOVICE) + ADD_TRAIT(mind, TRAIT_EXAMINE_FITNESS, SKILL_TRAIT) + +/datum/skill/athletics/level_lost(datum/mind/mind, new_level, old_level, silent) + . = ..() + if(old_level >= SKILL_LEVEL_NOVICE && new_level < SKILL_LEVEL_NOVICE) + REMOVE_TRAIT(mind, TRAIT_EXAMINE_FITNESS, SKILL_TRAIT) diff --git a/code/datums/sprite_accessories.dm b/code/datums/sprite_accessories.dm index 40c17b774b1c2..5c7f99daf7e25 100644 --- a/code/datums/sprite_accessories.dm +++ b/code/datums/sprite_accessories.dm @@ -16,35 +16,6 @@ * conversion in savefile.dm */ -/proc/init_sprite_accessory_subtypes(prototype, list/L, list/male, list/female, add_blank)//Roundstart argument builds a specific list for roundstart parts where some parts may be locked - if(!istype(L)) - L = list() - if(!istype(male)) - male = list() - if(!istype(female)) - female = list() - - for(var/path in subtypesof(prototype)) - var/datum/sprite_accessory/D = new path() - - if(D.icon_state) - L[D.name] = D - else - L += D.name - - switch(D.gender) - if(MALE) - male += D.name - if(FEMALE) - female += D.name - else - male += D.name - female += D.name - if(add_blank) - L[SPRITE_ACCESSORY_NONE] = new /datum/sprite_accessory/blank - - return L - /datum/sprite_accessory /// The icon file the accessory is located in. var/icon @@ -55,7 +26,7 @@ /// Determines if the accessory will be skipped or included in random hair generations. var/gender = NEUTER /// Something that can be worn by either gender, but looks different on each. - var/gender_specific + var/gender_specific = FALSE /// Determines if the accessory will be skipped by color preferences. var/use_static /** @@ -75,6 +46,9 @@ var/dimension_y = 32 /// Should this sprite block emissives? var/em_block = FALSE + /// Determines if this is considered "sane" for the purpose of [/proc/randomize_human_normie] + /// Basically this is to blacklist the extremely wacky stuff from being picked in random human generation. + var/natural_spawn = TRUE /datum/sprite_accessory/blank name = "None" @@ -103,11 +77,13 @@ /datum/sprite_accessory/hair/afro_large name = "Afro (Large)" icon_state = "hair_bigafro" + natural_spawn = FALSE /datum/sprite_accessory/hair/afro_huge name = "Afro (Huge)" icon_state = "hair_hugeafro" y_offset = 6 + natural_spawn = FALSE /datum/sprite_accessory/hair/allthefuzz name = "All The Fuzz" @@ -148,6 +124,7 @@ /datum/sprite_accessory/hair/bedheadfloorlength name = "Floorlength Bedhead" icon_state = "hair_floorlength_bedhead" + natural_spawn = FALSE /datum/sprite_accessory/hair/badlycut name = "Shorter Long Bedhead" @@ -388,6 +365,7 @@ /datum/sprite_accessory/hair/bigflattop name = "Flat Top (Big)" icon_state = "hair_bigflattop" + natural_spawn = FALSE /datum/sprite_accessory/hair/flow_hair name = "Flow Hair" @@ -448,6 +426,7 @@ /datum/sprite_accessory/hair/joestar name = "Joestar" icon_state = "hair_joestar" + natural_spawn = FALSE /datum/sprite_accessory/hair/keanu name = "Keanu Hair" @@ -504,22 +483,27 @@ /datum/sprite_accessory/hair/mohawk name = "Mohawk" icon_state = "hair_d" + natural_spawn = FALSE // sorry little one /datum/sprite_accessory/hair/nitori name = "Nitori" icon_state = "hair_nitori" + natural_spawn = FALSE /datum/sprite_accessory/hair/reversemohawk name = "Mohawk (Reverse)" icon_state = "hair_reversemohawk" + natural_spawn = FALSE /datum/sprite_accessory/hair/shavedmohawk name = "Mohawk (Shaved)" icon_state = "hair_shavedmohawk" + natural_spawn = FALSE /datum/sprite_accessory/hair/unshavenmohawk name = "Mohawk (Unshaven)" icon_state = "hair_unshaven_mohawk" + natural_spawn = FALSE /datum/sprite_accessory/hair/mulder name = "Mulder" @@ -528,6 +512,7 @@ /datum/sprite_accessory/hair/odango name = "Odango" icon_state = "hair_odango" + natural_spawn = FALSE /datum/sprite_accessory/hair/ombre name = "Ombre" @@ -560,14 +545,17 @@ /datum/sprite_accessory/hair/kagami name = "Pigtails" icon_state = "hair_kagami" + natural_spawn = FALSE /datum/sprite_accessory/hair/pigtail name = "Pigtails 2" icon_state = "hair_pigtails" + natural_spawn = FALSE /datum/sprite_accessory/hair/pigtail2 name = "Pigtails 3" icon_state = "hair_pigtails2" + natural_spawn = FALSE /datum/sprite_accessory/hair/pixie name = "Pixie Cut" @@ -946,6 +934,7 @@ /datum/sprite_accessory/facial_hair/brokenman name = "Beard (Broken Man)" icon_state = "facial_brokenman" + natural_spawn = FALSE /datum/sprite_accessory/facial_hair/chinstrap name = "Beard (Chinstrap)" @@ -990,6 +979,7 @@ /datum/sprite_accessory/facial_hair/martialartist name = "Beard (Martial Artist)" icon_state = "facial_martialartist" + natural_spawn = FALSE /datum/sprite_accessory/facial_hair/chinlessbeard name = "Beard (Chinless Beard)" @@ -1729,24 +1719,24 @@ // MutantParts Definitions // ///////////////////////////// -/datum/sprite_accessory/body_markings - icon = 'icons/mob/human/species/lizard/lizard_misc.dmi' +/datum/sprite_accessory/lizard_markings + icon = 'icons/mob/human/species/lizard/lizard_markings.dmi' -/datum/sprite_accessory/body_markings/none +/datum/sprite_accessory/lizard_markings/none name = "None" icon_state = "none" -/datum/sprite_accessory/body_markings/dtiger +/datum/sprite_accessory/lizard_markings/dtiger name = "Dark Tiger Body" icon_state = "dtiger" gender_specific = TRUE -/datum/sprite_accessory/body_markings/ltiger +/datum/sprite_accessory/lizard_markings/ltiger name = "Light Tiger Body" icon_state = "ltiger" gender_specific = TRUE -/datum/sprite_accessory/body_markings/lbelly +/datum/sprite_accessory/lizard_markings/lbelly name = "Light Belly" icon_state = "lbelly" gender_specific = TRUE diff --git a/code/datums/station_traits/_station_trait.dm b/code/datums/station_traits/_station_trait.dm index 28836b2b4fa5f..174b127b2d474 100644 --- a/code/datums/station_traits/_station_trait.dm +++ b/code/datums/station_traits/_station_trait.dm @@ -35,6 +35,8 @@ GLOBAL_LIST_EMPTY(lobby_station_traits) var/dynamic_threat_id /// If ran during dynamic, do we reduce the total threat? Will be overriden by config if set var/threat_reduction = 0 + /// Which ruleset flags to allow dynamic to use. null to disregard + var/dynamic_category = null /// Trait should not be instantiated in a round if its type matches this type var/abstract_type = /datum/station_trait @@ -45,6 +47,8 @@ GLOBAL_LIST_EMPTY(lobby_station_traits) if(threat_reduction) GLOB.dynamic_station_traits[src] = threat_reduction + if(dynamic_category) + GLOB.dynamic_ruleset_categories = dynamic_category if(sign_up_button) GLOB.lobby_station_traits += src if(trait_processes) @@ -127,3 +131,7 @@ GLOBAL_LIST_EMPTY(lobby_station_traits) var/datum/hud/using_hud = hud_owner.hud_used using_hud?.show_hud(using_hud?.hud_version) lobby_buttons = list() + +/// Called when overriding a pulsar star command report message. +/datum/station_trait/proc/get_pulsar_message() + return diff --git a/code/datums/station_traits/negative_traits.dm b/code/datums/station_traits/negative_traits.dm index 2ce6543c112e4..266725cf337fc 100644 --- a/code/datums/station_traits/negative_traits.dm +++ b/code/datums/station_traits/negative_traits.dm @@ -285,7 +285,7 @@ weight = 0 /// The path to the round_event_control that we modify. - var/event_control_path + var/datum/round_event_control/event_control_path /// Multiplier applied to the weight of the event. var/weight_multiplier = 1 /// Flat modifier added to the amount of max occurances the random event can have. @@ -308,6 +308,11 @@ event_control_path = /datum/round_event_control/ion_storm weight_multiplier = 2 +/datum/station_trait/random_event_weight_modifier/ion_storms/get_pulsar_message() + var/advisory_string = "Advisory Level: ERROR
" + advisory_string += scramble_message_replace_chars("Your sector's advisory level is ERROR. An electromagnetic field has stormed through nearby surveillance equipment, causing major data loss. Partial data was recovered and showed no credible threats to Nanotrasen assets within the Spinward Sector; however, the Department of Intelligence advises maintaining high alert against potential threats due to the lack of complete data.", 35) + return advisory_string + /datum/station_trait/random_event_weight_modifier/rad_storms name = "Radiation Stormfront" report_message = "A radioactive stormfront is passing through your station's system. Expect an increased likelihood of radiation storms passing over your station, as well the potential for multiple radiation storms to occur during your shift." @@ -570,6 +575,8 @@ /datum/station_trait/nebula/hostile/radiation/New() . = ..() + RegisterSignal(SSdcs, COMSIG_RULESET_BODY_GENERATED_FROM_GHOSTS, PROC_REF(on_spawned_mob)) + for(var/area/target as anything in get_areas(radioactive_areas)) RegisterSignal(target, COMSIG_AREA_ENTERED, PROC_REF(on_entered)) RegisterSignal(target, COMSIG_AREA_EXITED, PROC_REF(on_exited)) @@ -617,6 +624,19 @@ // The component handles its own removal +/// When a mob is spawned by dynamic, intercept and give it a little radiation shield. Only works for dynamic mobs! +/datum/station_trait/nebula/hostile/radiation/proc/on_spawned_mob(datum/source, mob/spawned_mob) + SIGNAL_HANDLER + + if(!istype(get_area(spawned_mob), radioactive_areas)) //only if you're spawned in the radioactive areas + return + + if(!isliving(spawned_mob)) // Dynamic shouldnt spawn non-living but uhhhhhhh why not + return + + var/mob/living/spawnee = spawned_mob + spawnee.apply_status_effect(/datum/status_effect/radiation_immunity/radnebula) + /datum/station_trait/nebula/hostile/radiation/apply_nebula_effect(effect_strength = 0) //big bombad now if(effect_strength > 0 && !SSmapping.is_planetary()) //admins can force this @@ -704,7 +724,11 @@ weight = 3 show_in_report = TRUE report_message = "It looks like the storm is not gonna calm down anytime soon, stay safe out there." - storm_type = /datum/weather/snow_storm/forever_storm +/datum/station_trait/storm/foreverstorm/get_pulsar_message() + var/advisory_string = "Advisory Level: Ice Giant
" + advisory_string += "The ongoing blizzard has interfered with our surveillance equipment, and we cannot provide an accurate threat summary at this time. We advise you to stay safe and avoid traversing the area around the station." + return advisory_string + #undef GLOW_NEBULA diff --git a/code/datums/station_traits/neutral_traits.dm b/code/datums/station_traits/neutral_traits.dm index 7545b2fb39582..0ecb49f96a063 100644 --- a/code/datums/station_traits/neutral_traits.dm +++ b/code/datums/station_traits/neutral_traits.dm @@ -7,6 +7,11 @@ report_message = "Rumors has it that the clown planet has been sending support packages to clowns in this system." trait_to_give = STATION_TRAIT_BANANIUM_SHIPMENTS +/datum/station_trait/bananium_shipment/get_pulsar_message() + var/advisory_string = "Advisory Level: Clown Planet
" + advisory_string += "Your sector's advisory level is Clown Planet! Our bike horns have picked up on a large bananium stash. Clowns show a large influx of clowns on your station. We highly advise you to slip any threats to keep Honkotrasen assets within the Banana Sector. The Department of Intelligence advises defending chemistry from any clowns that are trying to make baldium or space lube." + return advisory_string + /datum/station_trait/unnatural_atmosphere name = "Unnatural atmospherical properties" trait_type = STATION_TRAIT_NEUTRAL @@ -122,6 +127,11 @@ . = ..() SSstation.announcer = /datum/centcom_announcer/intern +/datum/station_trait/announcement_intern/get_pulsar_message() + var/advisory_string = "Advisory Level: (TITLE HERE)
" + advisory_string += "(Copy/Paste the summary provided by the Threat Intelligence Office in this field. You shouldn't have any trouble with this just make sure to replace this message before hitting the send button. Also, make sure there's coffee ready for the meeting at 06:00 when you're done.)" + return advisory_string + /datum/station_trait/announcement_medbot name = "Announcement \"System\"" trait_type = STATION_TRAIT_NEUTRAL @@ -187,6 +197,7 @@ if(length(birthday_options)) birthday_person = pick(birthday_options) birthday_person_name = birthday_person.real_name + ADD_TRAIT(birthday_person, TRAIT_BIRTHDAY_BOY, REF(src)) addtimer(CALLBACK(src, PROC_REF(announce_birthday)), 10 SECONDS) /datum/station_trait/birthday/proc/check_valid_override() @@ -561,3 +572,15 @@ #undef SKUB_IDFC #undef RANDOM_SKUB +/// Crew don't ever spawn as enemies of the station. Obsesseds, blob infection, space changelings etc can still happen though +/datum/station_trait/background_checks + name = "Station-Wide Background Checks" + report_message = "We replaced the intern doing your crew's background checks with a trained screener for this shift! That said, our enemies may just find another way to infiltrate the station, so be careful." + trait_type = STATION_TRAIT_NEUTRAL + weight = 1 + show_in_report = TRUE + can_revert = FALSE + + dynamic_category = RULESET_CATEGORY_NO_WITTING_CREW_ANTAGONISTS + threat_reduction = 15 + dynamic_threat_id = "Background Checks" diff --git a/code/datums/station_traits/positive_traits.dm b/code/datums/station_traits/positive_traits.dm index bff2d532570f9..99ed18f6fc734 100644 --- a/code/datums/station_traits/positive_traits.dm +++ b/code/datums/station_traits/positive_traits.dm @@ -1,7 +1,6 @@ #define PARTY_COOLDOWN_LENGTH_MIN (6 MINUTES) #define PARTY_COOLDOWN_LENGTH_MAX (12 MINUTES) - /datum/station_trait/lucky_winner name = "Lucky winner" trait_type = STATION_TRAIT_POSITIVE @@ -31,6 +30,9 @@ new /obj/item/reagent_containers/cup/glass/bottle/beer(toLaunch) new /obj/effect/pod_landingzone(T, toLaunch) +#undef PARTY_COOLDOWN_LENGTH_MIN +#undef PARTY_COOLDOWN_LENGTH_MAX + /datum/station_trait/galactic_grant name = "Galactic grant" trait_type = STATION_TRAIT_POSITIVE @@ -292,6 +294,20 @@ weight_multiplier = 3 max_occurrences_modifier = 10 //lotta cows +/datum/station_trait/random_event_weight_modifier/wise_cows/get_pulsar_message() + var/advisory_string = "Advisory Level: Cow Planet
" //We're gonna go fast and we're gonna go far. + advisory_string += "Your sector's advisory level is Cow Planet. We don't really know what this one means -- the model we use to create these threat reports hasn't produced this result before. Watch out for cows, I guess? Good luck!" + return advisory_string + +/datum/station_trait/bright_day + name = "Bright Day" + report_message = "The stars shine bright and the clouds are scarcer than usual. It's a bright day here on the Ice Moon's surface." + trait_type = STATION_TRAIT_POSITIVE + weight = 5 + show_in_report = TRUE + trait_flags = STATION_TRAIT_PLANETARY + trait_to_give = STATION_TRAIT_BRIGHT_DAY + /datum/station_trait/shuttle_sale name = "Shuttle Firesale" report_message = "The Nanotrasen Emergency Dispatch team is celebrating a record number of shuttle calls in the recent quarter. Some of your emergency shuttle options have been discounted!" @@ -343,12 +359,14 @@ /// Spawns assistants with some gear, either gimmicky or functional. Maybe, one day, it will inspire an assistant to do something productive or fun /datum/station_trait/assistant_gimmicks name = "Geared Assistants Pilot" - report_message = "The Nanotrassen Assistant Affairs division is performing a pilot to see if different assistant equipments help improve productivity!" + report_message = "The Nanotrassen Assistant Affairs division is performing a pilot to see if different assistant equipment helps improve productivity!" trait_type = STATION_TRAIT_POSITIVE weight = 3 trait_to_give = STATION_TRAIT_ASSISTANT_GIMMICKS show_in_report = TRUE blacklist = list(/datum/station_trait/colored_assistants) -#undef PARTY_COOLDOWN_LENGTH_MIN -#undef PARTY_COOLDOWN_LENGTH_MAX +/datum/station_trait/random_event_weight_modifier/assistant_gimmicks/get_pulsar_message() + var/advisory_string = "Advisory Level: Grey Sky
" + advisory_string += "Your sector's advisory level is Grey Sky. Our sensors detect abnormal activity among the assistants assigned to your station. We advise you to closely monitor the Tool Storage, Bridge, Tech Storage, and Brig for gathering crowds or petty thievery." + return advisory_string diff --git a/code/datums/status_effects/_status_effect.dm b/code/datums/status_effects/_status_effect.dm index b8d77db4ff7f1..637f2c3a07672 100644 --- a/code/datums/status_effects/_status_effect.dm +++ b/code/datums/status_effects/_status_effect.dm @@ -13,7 +13,7 @@ /// -1 = will prevent ticks, and if duration is also unlimited (-1), stop processing wholesale. var/tick_interval = 1 SECONDS /// The mob affected by the status effect. - var/mob/living/owner + VAR_FINAL/mob/living/owner /// How many of the effect can be on one mob, and/or what happens when you try to add a duplicate. var/status_type = STATUS_EFFECT_UNIQUE /// If TRUE, we call [proc/on_remove] when owner is deleted. Otherwise, we call [proc/be_replaced]. @@ -22,7 +22,9 @@ /// Status effect "name"s and "description"s are shown to the owner here. var/alert_type = /atom/movable/screen/alert/status_effect /// The alert itself, created in [proc/on_creation] (if alert_type is specified). - var/atom/movable/screen/alert/status_effect/linked_alert + VAR_FINAL/atom/movable/screen/alert/status_effect/linked_alert + /// If TRUE, and we have an alert, we will show a duration on the alert + var/show_duration = FALSE /// Used to define if the status effect should be using SSfastprocess or SSprocessing var/processing_speed = STATUS_EFFECT_FAST_PROCESS /// Do we self-terminate when a fullheal is called? @@ -30,7 +32,7 @@ /// If remove_on_fullheal is TRUE, what flag do we need to be removed? var/heal_flag_necessary = HEAL_STATUS /// A particle effect, for things like embers - Should be set on update_particles() - var/obj/effect/abstract/particle_holder/particle_effect + VAR_FINAL/obj/effect/abstract/particle_holder/particle_effect /datum/status_effect/New(list/arguments) on_creation(arglist(arguments)) @@ -57,6 +59,7 @@ var/atom/movable/screen/alert/status_effect/new_alert = owner.throw_alert(id, alert_type) new_alert.attached_effect = src //so the alert can reference us, if it needs to linked_alert = new_alert //so we can reference the alert, if we need to + update_shown_duration() if(duration > world.time || tick_interval > world.time) //don't process if we don't care switch(processing_speed) @@ -86,14 +89,24 @@ QDEL_NULL(particle_effect) return ..() +/// Updates the status effect alert's maptext (if possible) +/datum/status_effect/proc/update_shown_duration() + PRIVATE_PROC(TRUE) + if(!linked_alert || !show_duration) + return + + linked_alert.maptext = MAPTEXT_TINY_UNICODE("[round((duration - world.time)/10, 1)]s") + // Status effect process. Handles adjusting its duration and ticks. // If you're adding processed effects, put them in [proc/tick] // instead of extending / overriding the process() proc. /datum/status_effect/process(seconds_per_tick) SHOULD_NOT_OVERRIDE(TRUE) + if(QDELETED(owner)) qdel(src) return + if(tick_interval != -1 && tick_interval < world.time) var/tick_length = initial(tick_interval) tick(tick_length / (1 SECONDS)) @@ -101,8 +114,12 @@ if(QDELING(src)) // tick deleted us, no need to continue return - if(duration != -1 && duration < world.time) - qdel(src) + + if(duration != -1) + if(duration < world.time) + qdel(src) + return + update_shown_duration() /// Called whenever the effect is applied in on_created /// Returning FALSE will cause it to delete itself during creation instead. @@ -185,24 +202,25 @@ qdel(src) return TRUE + update_shown_duration() return FALSE /** * Updates the particles for the status effects * Should be handled by subtypes! */ - /datum/status_effect/proc/update_particles() SHOULD_CALL_PARENT(FALSE) + return /// Alert base type for status effect alerts /atom/movable/screen/alert/status_effect name = "Curse of Mundanity" desc = "You don't feel any different..." + maptext_y = 2 /// The status effect we're linked to var/datum/status_effect/attached_effect /atom/movable/screen/alert/status_effect/Destroy() attached_effect = null //Don't keep a ref now return ..() - diff --git a/code/datums/status_effects/agent_pinpointer.dm b/code/datums/status_effects/agent_pinpointer.dm index 29dfbd4338782..c22242be400fd 100644 --- a/code/datums/status_effects/agent_pinpointer.dm +++ b/code/datums/status_effects/agent_pinpointer.dm @@ -43,7 +43,7 @@ if(here.z != there.z) linked_alert.icon_state = "pinonnull" return - if(get_dist_euclidian(here,there) <= minimum_range + rand(0, range_fuzz_factor)) + if(get_dist_euclidean(here,there) <= minimum_range + rand(0, range_fuzz_factor)) linked_alert.icon_state = "pinondirect" return linked_alert.setDir(get_dir(here, there)) diff --git a/code/datums/status_effects/buffs.dm b/code/datums/status_effects/buffs.dm index 5784739cd9c6a..04ab2ee8f1783 100644 --- a/code/datums/status_effects/buffs.dm +++ b/code/datums/status_effects/buffs.dm @@ -114,6 +114,7 @@ id = "fleshmend" duration = 10 SECONDS alert_type = /atom/movable/screen/alert/status_effect/fleshmend + show_duration = TRUE /datum/status_effect/fleshmend/on_apply() . = ..() @@ -276,14 +277,14 @@ ) //Makes the user passive, it's in their oath not to harm! - ADD_TRAIT(owner, TRAIT_PACIFISM, HIPPOCRATIC_OATH_TRAIT) + owner.add_traits(list(TRAIT_PACIFISM, TRAIT_HIPPOCRATIC_OATH), HIPPOCRATIC_OATH_TRAIT) var/datum/atom_hud/med_hud = GLOB.huds[DATA_HUD_MEDICAL_ADVANCED] med_hud.show_to(owner) return ..() /datum/status_effect/hippocratic_oath/on_remove() QDEL_NULL(aura_healing) - REMOVE_TRAIT(owner, TRAIT_PACIFISM, HIPPOCRATIC_OATH_TRAIT) + owner.remove_traits(list(TRAIT_PACIFISM, TRAIT_HIPPOCRATIC_OATH), HIPPOCRATIC_OATH_TRAIT) var/datum/atom_hud/med_hud = GLOB.huds[DATA_HUD_MEDICAL_ADVANCED] med_hud.hide_from(owner) @@ -338,7 +339,7 @@ need_mob_update += itemUser.adjustFireLoss(-0.6 * seconds_between_ticks, updating_health = FALSE, forced = TRUE) need_mob_update += itemUser.adjustToxLoss(-0.6 * seconds_between_ticks, updating_health = FALSE, forced = TRUE) //Because Slime People are people too need_mob_update += itemUser.adjustOxyLoss(-0.6 * seconds_between_ticks, updating_health = FALSE, forced = TRUE) - need_mob_update += itemUser.adjustStaminaLoss(-0.6 * seconds_between_ticks, updating_stamina = FALSE, forced = TRUE) + need_mob_update += itemUser.adjustStaminaLoss(-3 * seconds_between_ticks, updating_stamina = FALSE, forced = TRUE) need_mob_update += itemUser.adjustOrganLoss(ORGAN_SLOT_BRAIN, -0.6 * seconds_between_ticks) if(need_mob_update) itemUser.updatehealth() @@ -379,6 +380,7 @@ duration = 1 MINUTES status_type = STATUS_EFFECT_REPLACE alert_type = /atom/movable/screen/alert/status_effect/regenerative_core + show_duration = TRUE /datum/status_effect/regenerative_core/on_apply() ADD_TRAIT(owner, TRAIT_IGNOREDAMAGESLOWDOWN, STATUS_EFFECT_TRAIT) @@ -398,6 +400,7 @@ id = "Lightning Orb" duration = 30 SECONDS alert_type = /atom/movable/screen/alert/status_effect/lightningorb + show_duration = TRUE /datum/status_effect/lightningorb/on_apply() . = ..() @@ -460,6 +463,7 @@ id = "speed_boost" duration = 2 SECONDS status_type = STATUS_EFFECT_REPLACE + show_duration = TRUE /datum/status_effect/speed_boost/on_creation(mob/living/new_owner, set_duration) if(isnum(set_duration)) @@ -597,3 +601,24 @@ /datum/status_effect/jump_jet/on_remove() owner.RemoveElement(/datum/element/forced_gravity, 0) + +/// Makes the mob immune to radiation for a short bit to help with safely spawning in hazardous areas +/datum/status_effect/radiation_immunity + id = "radiation_immunity" + duration = 1 MINUTES + show_duration = TRUE + +/datum/status_effect/radiation_immunity/on_apply() + ADD_TRAIT(owner, TRAIT_RADIMMUNE, type) + return TRUE + +/datum/status_effect/radiation_immunity/on_remove() + REMOVE_TRAIT(owner, TRAIT_RADIMMUNE, type) + +/datum/status_effect/radiation_immunity/radnebula + alert_type = /atom/movable/screen/alert/status_effect/radiation_immunity + +/atom/movable/screen/alert/status_effect/radiation_immunity + name = "Radiation shielding" + desc = "You're immune to radiation, get settled quick!" + icon_state = "radiation_shield" diff --git a/code/datums/status_effects/buffs/stop_drop_roll.dm b/code/datums/status_effects/buffs/stop_drop_roll.dm index 43d37654e6177..17b4d6d768de3 100644 --- a/code/datums/status_effects/buffs/stop_drop_roll.dm +++ b/code/datums/status_effects/buffs/stop_drop_roll.dm @@ -24,6 +24,9 @@ // Start with one weaker roll owner.spin(spintime = actual_interval, speed = actual_interval / 4) owner.adjust_fire_stacks(-0.25) + + for (var/obj/item/dropped in owner.loc) + dropped.extinguish() // Effectively extinguish your items by rolling on them return TRUE /datum/status_effect/stop_drop_roll/on_remove() diff --git a/code/datums/status_effects/debuffs/debuffs.dm b/code/datums/status_effects/debuffs/debuffs.dm index ad5696e787fdc..83d99461fce57 100644 --- a/code/datums/status_effects/debuffs/debuffs.dm +++ b/code/datums/status_effects/debuffs/debuffs.dm @@ -18,10 +18,12 @@ /datum/status_effect/incapacitating/on_creation(mob/living/new_owner, set_duration) if(isnum(set_duration)) duration = set_duration - . = ..() - if(. && (needs_update_stat || issilicon(owner))) - owner.update_stat() + return ..() +/datum/status_effect/incapacitating/on_apply() + if(needs_update_stat || issilicon(owner)) + owner.update_stat() + return TRUE /datum/status_effect/incapacitating/on_remove() if(needs_update_stat || issilicon(owner)) //silicons need stat updates in addition to normal canmove updates @@ -663,6 +665,7 @@ duration = 150 status_type = STATUS_EFFECT_REFRESH alert_type = /atom/movable/screen/alert/status_effect/convulsing + show_duration = TRUE /datum/status_effect/convulsing/on_creation(mob/living/zappy_boy) . = ..() @@ -774,7 +777,10 @@ span_userdanger(pick("Your lungs hurt!", "It hurts to breathe!")), span_warning(pick("You feel nauseated.", "You feel like you're going to throw up!"))) else - fake_emote = pick("cough", "sniff", "sneeze") + if(prob(40)) + fake_emote = "cough" + else + owner.sneeze() if(fake_emote) owner.emote(fake_emote) diff --git a/code/datums/status_effects/debuffs/fire_stacks.dm b/code/datums/status_effects/debuffs/fire_stacks.dm index 62f8c9ca24e32..46c31c4578d1d 100644 --- a/code/datums/status_effects/debuffs/fire_stacks.dm +++ b/code/datums/status_effects/debuffs/fire_stacks.dm @@ -136,6 +136,18 @@ /// Type of mob light emitter we use when on fire var/moblight_type = /obj/effect/dummy/lighting_obj/moblight/fire +/datum/status_effect/fire_handler/fire_stacks/proc/owner_touched_sparks() + SIGNAL_HANDLER + + ignite() + +/datum/status_effect/fire_handler/fire_stacks/on_creation(mob/living/new_owner, new_stacks, forced = FALSE) + . = ..() + RegisterSignal(owner, COMSIG_ATOM_TOUCHED_SPARKS, PROC_REF(owner_touched_sparks)) + +/datum/status_effect/fire_handler/fire_stacks/on_remove() + UnregisterSignal(owner, COMSIG_ATOM_TOUCHED_SPARKS) + /datum/status_effect/fire_handler/fire_stacks/tick(seconds_between_ticks) if(stacks <= 0) qdel(src) @@ -247,7 +259,7 @@ owner.clear_mood_event("on_fire") SEND_SIGNAL(owner, COMSIG_LIVING_EXTINGUISHED, owner) cache_stacks() - for(var/obj/item/equipped in owner.get_equipped_items()) + for(var/obj/item/equipped in (owner.get_equipped_items(INCLUDE_HELD))) equipped.extinguish() /datum/status_effect/fire_handler/fire_stacks/on_remove() diff --git a/code/datums/status_effects/debuffs/rust_corruption.dm b/code/datums/status_effects/debuffs/rust_corruption.dm new file mode 100644 index 0000000000000..6ba9d6a4ee958 --- /dev/null +++ b/code/datums/status_effects/debuffs/rust_corruption.dm @@ -0,0 +1,12 @@ +/datum/status_effect/rust_corruption + alert_type = null + id = "rust_turf_effects" + tick_interval = 2 SECONDS + remove_on_fullheal = TRUE + +/datum/status_effect/rust_corruption/tick(seconds_between_ticks) + if(issilicon(owner)) + owner.adjustBruteLoss(10 * seconds_between_ticks) + return + owner.adjust_disgust(5 * seconds_between_ticks) + owner.reagents?.remove_all(0.75 * seconds_between_ticks) diff --git a/code/datums/status_effects/debuffs/slime/slimed.dm b/code/datums/status_effects/debuffs/slime/slimed.dm index 15632277f3dd7..6c2c0fb5be342 100644 --- a/code/datums/status_effects/debuffs/slime/slimed.dm +++ b/code/datums/status_effects/debuffs/slime/slimed.dm @@ -5,9 +5,42 @@ /atom/movable/screen/alert/status_effect/slimed name = "Covered in Slime" - desc = "You are covered in slime and it's eating away at you! Find a way to wash it off!" + desc = "You are covered in slime and it's eating away at you! Click to start cleaning it off, or find a faster way to wash it away!" icon_state = "slimed" +/atom/movable/screen/alert/status_effect/slimed/Click() + . = ..() + if (!.) + return FALSE + if (!can_wash()) + return FALSE + INVOKE_ASYNC(src, PROC_REF(remove_slime)) + return TRUE + +/// Confirm that we are capable of washing off slime +/atom/movable/screen/alert/status_effect/slimed/proc/can_wash() + var/mob/living/living_owner = owner + if (!living_owner.can_resist()) + return FALSE + if (DOING_INTERACTION_WITH_TARGET(owner, owner)) + return FALSE + if (locate(/datum/status_effect/fire_handler/wet_stacks) in living_owner.status_effects) + return FALSE // Don't double dip with washing + return TRUE + +/// Try to get rid of it +/atom/movable/screen/alert/status_effect/slimed/proc/remove_slime() + owner.balloon_alert(owner, "cleaning off slime...") + var/datum/status_effect/slimed/slime_effect = owner.has_status_effect(/datum/status_effect/slimed) + while (!QDELETED(src) && !isnull(slime_effect)) + if (!can_wash()) + return + var/clean_interval = HAS_TRAIT(owner, TRAIT_WOUND_LICKER) ? 1.2 SECONDS : 1.5 SECONDS + owner.Shake(2, 0, duration = clean_interval * 0.8, shake_interval = 0.05 SECONDS) + if (!do_after(owner, clean_interval, owner)) + return + slime_effect.remove_stacks() + /datum/status_effect/slimed id = "slimed" tick_interval = 3 SECONDS @@ -32,6 +65,16 @@ to_chat(owner, span_userdanger("You have been covered in a thick layer of slime! Find a way to wash it off!")) return ..() +/datum/status_effect/slimed/proc/remove_stacks(stacks_to_remove = 1) + slime_stacks -= stacks_to_remove // lose 1 stack per second + if(slime_stacks <= 0) + to_chat(owner, span_notice("You manage to wash off the layer of slime completely.")) + qdel(src) + return + + if(prob(10)) + to_chat(owner,span_warning("The layer of slime is slowly getting thinner.")) + /datum/status_effect/slimed/tick(seconds_between_ticks) // remove from the mob once we have dealt enough damage if(owner.get_organic_health() <= MIN_HEALTH) @@ -42,20 +85,11 @@ // handle washing slime off var/datum/status_effect/fire_handler/wet_stacks/wetness = locate() in owner.status_effects if(istype(wetness) && wetness.stacks > (MIN_WATER_STACKS * seconds_between_ticks)) - slime_stacks -= seconds_between_ticks // lose 1 stack per second wetness.adjust_stacks(-5 * seconds_between_ticks) - - // got rid of it + remove_stacks(seconds_between_ticks) // 1 per second if(slime_stacks <= 0) - to_chat(owner, span_notice("You manage to wash off the layer of slime completely.")) - qdel(src) return - if(SPT_PROB(10, seconds_between_ticks)) - to_chat(owner,span_warning("The layer of slime is slowly getting thinner as it's washing off your skin.")) - - return - // otherwise deal brute damage owner.apply_damage(rand(2,4) * seconds_between_ticks, damagetype = BRUTE) diff --git a/code/datums/status_effects/debuffs/spacer.dm b/code/datums/status_effects/debuffs/spacer.dm index daaf5576ee101..1add806c02f0e 100644 --- a/code/datums/status_effects/debuffs/spacer.dm +++ b/code/datums/status_effects/debuffs/spacer.dm @@ -42,7 +42,7 @@ // This has some interesting side effects with gravitum or similar negating effects that may be worth nothing owner.adjustStaminaLoss(-1 * stamina_heal_per_tick) owner.AdjustAllImmobility(-1 * stun_heal_per_tick) - // For comparison: Ephedrine heals 1 stamina per tick / 0.5 per second + // For comparison: Ephedrine heals 4 stamina per tick / 2 per second // and Nicotine heals 5 seconds of stun per tick / 2.5 per second // The bad side (being on a planet) diff --git a/code/datums/status_effects/debuffs/stamcrit.dm b/code/datums/status_effects/debuffs/stamcrit.dm new file mode 100644 index 0000000000000..05433244df09c --- /dev/null +++ b/code/datums/status_effects/debuffs/stamcrit.dm @@ -0,0 +1,75 @@ +/datum/status_effect/incapacitating/stamcrit + status_type = STATUS_EFFECT_UNIQUE + // Lasts until we go back to 0 stamina, which is handled by the mob + duration = -1 + tick_interval = -1 + /// Cooldown between displaying warning messages that we hit diminishing returns + COOLDOWN_DECLARE(warn_cd) + /// A counter that tracks every time we've taken enough damage to trigger diminishing returns + var/diminishing_return_counter = 0 + +/datum/status_effect/incapacitating/stamcrit/on_creation(mob/living/new_owner, set_duration) + . = ..() + if(!.) + return . + + // This should be in on apply but we need it to happen AFTER being added to the mob + // (Because we need to wait until the status effect is in their status effect list, or we'll add two) + if(owner.getStaminaLoss() < 120) + // Puts you a little further into the initial stamcrit, makes stamcrit harder to outright counter with chems. + owner.adjustStaminaLoss(30, FALSE) + + // Same + RegisterSignal(owner, COMSIG_LIVING_ADJUST_STAMINA_DAMAGE, PROC_REF(update_diminishing_return)) + RegisterSignal(owner, COMSIG_LIVING_HEALTH_UPDATE, PROC_REF(check_remove)) + +/datum/status_effect/incapacitating/stamcrit/on_apply() + if(owner.stat == DEAD) + return FALSE + if(owner.check_stun_immunity(CANKNOCKDOWN)) + return FALSE + + . = ..() + if(!.) + return . + + if(owner.stat == CONSCIOUS) + to_chat(owner, span_notice("You're too exhausted to keep going...")) + owner.add_traits(list(TRAIT_INCAPACITATED, TRAIT_IMMOBILIZED, TRAIT_FLOORED), STAMINA) + return . + +/datum/status_effect/incapacitating/stamcrit/on_remove() + UnregisterSignal(owner, COMSIG_LIVING_HEALTH_UPDATE) + UnregisterSignal(owner, COMSIG_LIVING_ADJUST_STAMINA_DAMAGE) + owner.remove_traits(list(TRAIT_INCAPACITATED, TRAIT_IMMOBILIZED, TRAIT_FLOORED), STAMINA) + return ..() + +/datum/status_effect/incapacitating/stamcrit/proc/update_diminishing_return(datum/source, type, amount, forced) + SIGNAL_HANDLER + if(amount <= 0 || forced) + return NONE + // Here we fake the effect of having diminishing returns + // We don't actually decrease incoming stamina damage because that would be pointless, the mob is at stam damage cap anyways + // Instead we just "ignore" the damage if we have a sufficiently high diminishing return counter + var/mod_amount = ceil(sqrt(amount) / 2) - diminishing_return_counter + // We check base amount not mod_amount because we still want to up tick it even if we've already got a high counter + // We also only uptick it after calculating damage so we start ticking up after the damage and not before + switch(amount) + if(5 to INFINITY) + diminishing_return_counter += 1 + if(2 to 5) // Prevent chems from skyrockting DR + diminishing_return_counter += 0.05 + if(mod_amount > 0) + return NONE + + if(COOLDOWN_FINISHED(src, warn_cd) && owner.stat == CONSCIOUS) + to_chat(owner, span_notice("You start to recover from the exhaustion!")) + owner.visible_message(span_warning("[owner] starts to recover from the exhaustion!"), ignored_mobs = owner) + COOLDOWN_START(src, warn_cd, 2.5 SECONDS) + + return COMPONENT_IGNORE_CHANGE + +/datum/status_effect/incapacitating/stamcrit/proc/check_remove(datum/source, ...) + SIGNAL_HANDLER + if(owner.maxHealth - owner.getStaminaLoss() > owner.crit_threshold) + qdel(src) diff --git a/code/datums/status_effects/debuffs/tox_vomit.dm b/code/datums/status_effects/debuffs/tox_vomit.dm new file mode 100644 index 0000000000000..c1f5aa651efb4 --- /dev/null +++ b/code/datums/status_effects/debuffs/tox_vomit.dm @@ -0,0 +1,23 @@ +/// Simple status effect applied when a mob has high toxins and starts to vomit regularly +/datum/status_effect/tox_vomit + id = "vomitting_from_toxins" + tick_interval = 2 SECONDS + alert_type = null + /// Has a chance to count up every tick, until it reaches a threshold, which causes the mob to vomit and resets + VAR_PRIVATE/puke_counter = 0 + +/datum/status_effect/tox_vomit/tick(seconds_between_ticks) + if(!AT_TOXIN_VOMIT_THRESHOLD(owner)) + qdel(src) + return + + if(owner.stat == DEAD || HAS_TRAIT(owner, TRAIT_STASIS)) + return + + puke_counter += SPT_PROB(30, seconds_between_ticks) + if(puke_counter < 50) // This is like 150 seconds apparently according to old comments + return + + var/mob/living/carbon/human/sick_guy = owner + sick_guy.vomit(VOMIT_CATEGORY_DEFAULT, lost_nutrition = 20) + puke_counter = 0 diff --git a/code/datums/status_effects/food_effects.dm b/code/datums/status_effects/food_effects.dm index deba7bf750b6b..f36f1e2034d9c 100644 --- a/code/datums/status_effects/food_effects.dm +++ b/code/datums/status_effects/food_effects.dm @@ -4,6 +4,7 @@ duration = 5 MINUTES // Same as food mood buffs status_type = STATUS_EFFECT_REPLACE // Only one food buff allowed alert_type = /atom/movable/screen/alert/status_effect/food + show_duration = TRUE /// Buff power var/strength diff --git a/code/datums/status_effects/neutral.dm b/code/datums/status_effects/neutral.dm index 9efc867a043e5..3d4bd7e93655c 100644 --- a/code/datums/status_effects/neutral.dm +++ b/code/datums/status_effects/neutral.dm @@ -1,13 +1,38 @@ //entirely neutral or internal status effects go here -/datum/status_effect/crusher_damage //tracks the damage dealt to this mob by kinetic crushers +/datum/status_effect/crusher_damage id = "crusher_damage" duration = -1 tick_interval = -1 status_type = STATUS_EFFECT_UNIQUE alert_type = null + /// How much damage? var/total_damage = 0 +/datum/status_effect/crusher_damage/on_apply() + RegisterSignal(owner, COMSIG_MOB_AFTER_APPLY_DAMAGE, PROC_REF(damage_taken)) + return TRUE + +/datum/status_effect/crusher_damage/on_remove() + UnregisterSignal(owner, COMSIG_MOB_AFTER_APPLY_DAMAGE) + +/datum/status_effect/crusher_damage/proc/damage_taken( + datum/source, + damage_dealt, + damagetype, + def_zone, + blocked, + wound_bonus, + bare_wound_bonus, + sharpness, + attack_direction, + attacking_item, +) + SIGNAL_HANDLER + + if(istype(attacking_item, /obj/item/kinetic_crusher)) + total_damage += (-1 * damage_dealt) + /datum/status_effect/syphon_mark id = "syphon_mark" duration = 50 diff --git a/code/datums/status_effects/wound_effects.dm b/code/datums/status_effects/wound_effects.dm index f7d640a6d1cf3..fc3f3140593ea 100644 --- a/code/datums/status_effects/wound_effects.dm +++ b/code/datums/status_effects/wound_effects.dm @@ -73,6 +73,9 @@ // less limping while we have determination still var/determined_mod = owner.has_status_effect(/datum/status_effect/determined) ? 0.5 : 1 + if(SEND_SIGNAL(owner, COMSIG_CARBON_LIMPING) & COMPONENT_CANCEL_LIMP) + return + if(next_leg == left) if(prob(limp_chance_left * determined_mod)) owner.client.move_delay += slowdown_left * determined_mod diff --git a/code/datums/storage/storage.dm b/code/datums/storage/storage.dm index b1bacfbceab44..8c98d7d56bd16 100644 --- a/code/datums/storage/storage.dm +++ b/code/datums/storage/storage.dm @@ -4,6 +4,7 @@ * The parent and real_location variables are both weakrefs, so they must be resolved before they can be used. * If you're looking to create custom storage type behaviors, check ../subtypes */ + /datum/storage /** * A reference to the atom linked to this storage object @@ -22,10 +23,8 @@ /// List of all the mobs currently viewing the contents of this storage. VAR_PRIVATE/list/mob/is_using = list() - /// The storage display screen object. - VAR_PRIVATE/atom/movable/screen/storage/boxes - /// The 'close button' screen object. - VAR_PRIVATE/atom/movable/screen/close/closer + /// Associated list that keeps track of all storage UI datums per person. + VAR_PRIVATE/list/datum/storage_interface/storage_interfaces = null /// Typecache of items that can be inserted into this storage. /// By default, all item types can be inserted (assuming other conditions are met). @@ -74,6 +73,9 @@ /// If we support smartly removing/inserting things from ourselves var/supports_smart_equip = TRUE + ///do we insert items when clicked by them? + var/insert_on_attack = TRUE + /// An additional description shown on double-examine. /// Is autogenerated to the can_hold list if not set. var/can_hold_description @@ -113,6 +115,10 @@ /// If TRUE, shows the contents of the storage in open_storage var/display_contents = TRUE + /// Switch this off if you want to handle click_alt in the parent atom + var/click_alt_open = TRUE + + /datum/storage/New( atom/parent, max_slots = src.max_slots, @@ -124,9 +130,6 @@ qdel(src) return - boxes = new(null, null, src) - closer = new(null, null, src) - set_parent(parent) set_real_location(parent) @@ -134,22 +137,16 @@ src.max_specific_storage = max_specific_storage src.max_total_storage = max_total_storage - orient_to_hud() - /datum/storage/Destroy() - parent = null - real_location = null for(var/mob/person in is_using) - if(person.active_storage == src) - person.active_storage = null - person.client?.screen -= boxes - person.client?.screen -= closer - - QDEL_NULL(boxes) - QDEL_NULL(closer) + hide_contents(person) is_using.Cut() + QDEL_LIST_ASSOC_VAL(storage_interfaces) + + parent = null + real_location = null return ..() @@ -192,14 +189,14 @@ parent = new_parent // a few of theses should probably be on the real_location rather than the parent + RegisterSignal(parent, COMSIG_ATOM_ITEM_INTERACTION, PROC_REF(on_item_interact)) RegisterSignals(parent, list(COMSIG_ATOM_ATTACK_PAW, COMSIG_ATOM_ATTACK_HAND), PROC_REF(on_attack)) RegisterSignal(parent, COMSIG_MOUSEDROP_ONTO, PROC_REF(on_mousedrop_onto)) RegisterSignal(parent, COMSIG_MOUSEDROPPED_ONTO, PROC_REF(on_mousedropped_onto)) - RegisterSignal(parent, COMSIG_ATOM_ATTACKBY, PROC_REF(on_attackby)) RegisterSignal(parent, COMSIG_ITEM_PRE_ATTACK, PROC_REF(on_preattack)) RegisterSignal(parent, COMSIG_ITEM_ATTACK_SELF, PROC_REF(mass_empty)) - RegisterSignals(parent, list(COMSIG_CLICK_ALT, COMSIG_ATOM_ATTACK_GHOST, COMSIG_ATOM_ATTACK_HAND_SECONDARY), PROC_REF(open_storage_on_signal)) - RegisterSignal(parent, COMSIG_ATOM_ATTACKBY_SECONDARY, PROC_REF(open_storage_attackby_secondary)) + RegisterSignals(parent, list(COMSIG_ATOM_ATTACK_GHOST, COMSIG_ATOM_ATTACK_HAND_SECONDARY), PROC_REF(open_storage_on_signal)) + RegisterSignal(parent, COMSIG_ATOM_ITEM_INTERACTION_SECONDARY, PROC_REF(on_item_interact_secondary)) RegisterSignal(parent, COMSIG_MOVABLE_MOVED, PROC_REF(close_distance)) RegisterSignal(parent, COMSIG_ITEM_EQUIPPED, PROC_REF(update_actions)) RegisterSignal(parent, COMSIG_TOPIC, PROC_REF(topic_handle)) @@ -208,6 +205,7 @@ RegisterSignal(parent, COMSIG_OBJ_DECONSTRUCT, PROC_REF(on_deconstruct)) RegisterSignal(parent, COMSIG_ATOM_EMP_ACT, PROC_REF(on_emp_act)) RegisterSignal(parent, COMSIG_ATOM_CONTENTS_WEIGHT_CLASS_CHANGED, PROC_REF(contents_changed_w_class)) + RegisterSignal(parent, COMSIG_CLICK_ALT, PROC_REF(on_click_alt)) /** * Sets where items are physically being stored in the case it shouldn't be on the parent. @@ -438,14 +436,16 @@ GLOBAL_LIST_EMPTY(cached_storage_typecaches) * * mob/user - (optional) the user who is inserting the item. * * override - see item_insertion_feedback() * * force - bypass locked storage up to a certain level. See [code/__DEFINES/storage.dm] + * * messages - if TRUE, we will create balloon alerts for the user. */ -/datum/storage/proc/attempt_insert(obj/item/to_insert, mob/user, override = FALSE, force = STORAGE_NOT_LOCKED) +/datum/storage/proc/attempt_insert(obj/item/to_insert, mob/user, override = FALSE, force = STORAGE_NOT_LOCKED, messages = TRUE) SHOULD_NOT_SLEEP(TRUE) - if(!can_insert(to_insert, user, force = force)) + if(!can_insert(to_insert, user, messages = messages, force = force)) return FALSE SEND_SIGNAL(parent, COMSIG_STORAGE_STORED_ITEM, to_insert, user, force) + SEND_SIGNAL(src, COMSIG_STORAGE_STORED_ITEM, to_insert, user, force) to_insert.forceMove(real_location) item_insertion_feedback(user, to_insert, override) parent.update_appearance() @@ -540,6 +540,9 @@ GLOBAL_LIST_EMPTY(cached_storage_typecaches) refresh_views() parent.update_appearance() + + SEND_SIGNAL(parent, COMSIG_ATOM_REMOVED_ITEM, thing, remove_to_loc, silent) + SEND_SIGNAL(src, COMSIG_STORAGE_REMOVED_ITEM, thing, remove_to_loc, silent) return TRUE /** @@ -701,26 +704,33 @@ GLOBAL_LIST_EMPTY(cached_storage_typecaches) /datum/storage/proc/on_mousedrop_onto(datum/source, atom/over_object, mob/user) SIGNAL_HANDLER - if(ismecha(user.loc) || user.incapacitated() || !user.canUseStorage()) + if(ismecha(user.loc) || !user.canUseStorage()) return - parent.add_fingerprint(user) - if(istype(over_object, /atom/movable/screen/inventory/hand)) - if(real_location.loc != user) + if(real_location.loc != user || !user.can_perform_action(parent, FORBID_TELEKINESIS_REACH | ALLOW_RESTING)) return var/atom/movable/screen/inventory/hand/hand = over_object user.putItemFromInventoryInHandIfPossible(parent, hand.held_index) + parent.add_fingerprint(user) + return COMPONENT_CANCEL_MOUSEDROP_ONTO else if(ismob(over_object)) - if(over_object != user) + if(over_object != user || !user.can_perform_action(parent, FORBID_TELEKINESIS_REACH | ALLOW_RESTING)) return + parent.add_fingerprint(user) INVOKE_ASYNC(src, PROC_REF(open_storage), user) + return COMPONENT_CANCEL_MOUSEDROP_ONTO else if(!istype(over_object, /atom/movable/screen)) + if(!user.can_perform_action(over_object, FORBID_TELEKINESIS_REACH)) + return + + parent.add_fingerprint(user) INVOKE_ASYNC(src, PROC_REF(dump_content_at), over_object, user) + return COMPONENT_CANCEL_MOUSEDROP_ONTO /** * Dumps all of our contents at a specific location. @@ -770,29 +780,34 @@ GLOBAL_LIST_EMPTY(cached_storage_typecaches) return if(dropping != user.get_active_held_item()) return + if(!user.can_perform_action(source, FORBID_TELEKINESIS_REACH)) + return if(dropping.atom_storage) // If it has storage it should be trying to dump, not insert. return - if(!iscarbon(user) && !isdrone(user)) return - var/mob/living/user_living = user - if(user_living.incapacitated()) - return attempt_insert(dropping, user) + return COMPONENT_CANCEL_MOUSEDROPPED_ONTO /// Signal handler for whenever we're attacked by an object. -/datum/storage/proc/on_attackby(datum/source, obj/item/thing, mob/user, params) +/datum/storage/proc/on_item_interact(datum/source, mob/user, obj/item/thing, params) SIGNAL_HANDLER - if(!thing.attackby_storage_insert(src, parent, user)) - return + if(!insert_on_attack) + return NONE + if(!thing.storage_insert_on_interaction(src, parent, user)) + return NONE + if(!parent.storage_insert_on_interacted_with(src, thing, user)) + return NONE + if(SEND_SIGNAL(parent, COMSIG_ATOM_STORAGE_ITEM_INTERACT_INSERT, thing, user) & BLOCK_STORAGE_INSERT) + return NONE if(iscyborg(user)) - return COMPONENT_NO_AFTERATTACK + return ITEM_INTERACT_BLOCKING attempt_insert(thing, user) - return COMPONENT_NO_AFTERATTACK + return ITEM_INTERACT_SUCCESS /// Signal handler for whenever we're attacked by a mob. /datum/storage/proc/on_attack(datum/source, mob/user) @@ -838,78 +853,17 @@ GLOBAL_LIST_EMPTY(cached_storage_typecaches) return toreturn -/// Updates the storage UI to fit all objects inside storage. -/datum/storage/proc/orient_to_hud() - var/adjusted_contents = real_location.contents.len - - //Numbered contents display - var/list/datum/numbered_display/numbered_contents - if(numerical_stacking) - numbered_contents = process_numerical_display() - adjusted_contents = numbered_contents.len - //if the ammount of contents reaches some multiplier of the final column (and its not the last slot), let the player view an additional row - var/additional_row = (!(adjusted_contents % screen_max_columns) && adjusted_contents < max_slots) - - var/columns = clamp(max_slots, 1, screen_max_columns) - var/rows = clamp(CEILING(adjusted_contents / columns, 1) + additional_row, 1, screen_max_rows) - - orient_item_boxes(rows, columns, numbered_contents) - -/// Generates the actual UI objects, their location, and alignments whenever we open storage up. -/datum/storage/proc/orient_item_boxes(rows, cols, list/obj/item/numerical_display_contents) - boxes.screen_loc = "[screen_start_x]:[screen_pixel_x],[screen_start_y]:[screen_pixel_y] to [screen_start_x+cols-1]:[screen_pixel_x],[screen_start_y+rows-1]:[screen_pixel_y]" - var/current_x = screen_start_x - var/current_y = screen_start_y - var/turf/our_turf = get_turf(real_location) - - if(islist(numerical_display_contents)) - for(var/type in numerical_display_contents) - var/datum/numbered_display/numberdisplay = numerical_display_contents[type] - - var/obj/item/display_sample = numberdisplay.sample_object - display_sample.mouse_opacity = MOUSE_OPACITY_OPAQUE - display_sample.screen_loc = "[current_x]:[screen_pixel_x],[current_y]:[screen_pixel_y]" - display_sample.maptext = MAPTEXT("[(numberdisplay.number > 1)? "[numberdisplay.number]" : ""]") - SET_PLANE(display_sample, ABOVE_HUD_PLANE, our_turf) - - current_x++ - - if(current_x - screen_start_x >= cols) - current_x = screen_start_x - current_y++ - - if(current_y - screen_start_y >= rows) - break - - else - for(var/obj/item in real_location) - item.mouse_opacity = MOUSE_OPACITY_OPAQUE - item.screen_loc = "[current_x]:[screen_pixel_x],[current_y]:[screen_pixel_y]" - item.maptext = "" - item.plane = ABOVE_HUD_PLANE - SET_PLANE(item, ABOVE_HUD_PLANE, our_turf) - - current_x++ - - if(current_x - screen_start_x >= cols) - current_x = screen_start_x - current_y++ - - if(current_y - screen_start_y >= rows) - break - - closer.screen_loc = "[screen_start_x + cols]:[screen_pixel_x],[screen_start_y]:[screen_pixel_y]" - - /// Signal handler for when we get attacked with secondary click by an item. -/datum/storage/proc/open_storage_attackby_secondary(datum/source, atom/weapon, mob/user) +/datum/storage/proc/on_item_interact_secondary(datum/source, mob/user, atom/weapon) SIGNAL_HANDLER if(istype(weapon, /obj/item/chameleon)) var/obj/item/chameleon/chameleon_weapon = weapon chameleon_weapon.make_copy(source, user) - return open_storage_on_signal(source, user) + if(open_storage_on_signal(source, user)) + return ITEM_INTERACT_BLOCKING + return NONE /// Signal handler to open up the storage when we receive a signal. /datum/storage/proc/open_storage_on_signal(datum/source, mob/to_show) @@ -919,17 +873,23 @@ GLOBAL_LIST_EMPTY(cached_storage_typecaches) if(display_contents) return COMPONENT_NO_AFTERATTACK + +/// Alt click on the storage item. Default: Open the storage. +/datum/storage/proc/on_click_alt(datum/source, mob/user) + SIGNAL_HANDLER + + if(!click_alt_open) + return + + return open_storage_on_signal(source, user) ? CLICK_ACTION_SUCCESS : NONE + /// Opens the storage to the mob, showing them the contents to their UI. /datum/storage/proc/open_storage(mob/to_show) if(isobserver(to_show)) show_contents(to_show) return FALSE - if(!to_show.CanReach(parent)) - parent.balloon_alert(to_show, "can't reach!") - return FALSE - - if(!isliving(to_show) || to_show.incapacitated()) + if(!isliving(to_show) || !to_show.can_perform_action(parent, ALLOW_RESTING | FORBID_TELEKINESIS_REACH)) return FALSE if(locked) @@ -966,10 +926,10 @@ GLOBAL_LIST_EMPTY(cached_storage_typecaches) /// Async version of putting something into a mobs hand. -/datum/storage/proc/put_in_hands_async(mob/toshow, obj/item/toremove) - if(!toshow.put_in_hands(toremove)) +/datum/storage/proc/put_in_hands_async(mob/to_show, obj/item/toremove) + if(!to_show.put_in_hands(toremove)) if(!silent) - toremove.balloon_alert(toshow, "fumbled!") + toremove.balloon_alert(to_show, "fumbled!") return TRUE /// Signal handler for whenever a mob walks away with us, close if they can't reach us. @@ -1004,48 +964,55 @@ GLOBAL_LIST_EMPTY(cached_storage_typecaches) * Show our storage to a mob. * * Arguments - * * mob/toshow - the mob to show the storage to + * * mob/to_show - the mob to show the storage to * * Returns * * FALSE if the show failed * * TRUE otherwise */ -/datum/storage/proc/show_contents(mob/toshow) - if(!toshow.client) +/datum/storage/proc/show_contents(mob/to_show) + if(!to_show.client) return FALSE // You can only inspect hidden contents if you're an observer - if(!isobserver(toshow) && !display_contents) + if(!isobserver(to_show) && !display_contents) return FALSE - if(toshow.active_storage != src && (toshow.stat == CONSCIOUS)) + if(to_show.active_storage != src && (to_show.stat == CONSCIOUS)) for(var/obj/item/thing in real_location) - if(thing.on_found(toshow)) - toshow.active_storage.hide_contents(toshow) + if(thing.on_found(to_show)) + to_show.active_storage.hide_contents(to_show) - if(toshow.active_storage) - toshow.active_storage.hide_contents(toshow) + if(to_show.active_storage) + to_show.active_storage.hide_contents(to_show) - toshow.active_storage = src + to_show.active_storage = src if(ismovable(real_location)) var/atom/movable/movable_loc = real_location movable_loc.become_active_storage(src) - orient_to_hud() + LAZYINITLIST(storage_interfaces) + + var/ui_style = ui_style2icon(to_show.client?.prefs?.read_preference(/datum/preference/choiced/ui_style)) + + if (isnull(storage_interfaces[to_show])) + storage_interfaces[to_show] = new /datum/storage_interface(ui_style, src) - is_using |= toshow + orient_storage() + + is_using |= to_show + + to_show.client.screen |= storage_interfaces[to_show].list_ui_elements() + to_show.client.screen |= real_location.contents - toshow.client.screen |= boxes - toshow.client.screen |= closer - toshow.client.screen |= real_location.contents return TRUE /** * Hide our storage from a mob. * * Arguments - * * mob/toshow - the mob to hide the storage from + * * mob/to_hide - the mob to hide the storage from */ /datum/storage/proc/hide_contents(mob/to_hide) if(!to_hide.client) @@ -1057,13 +1024,19 @@ GLOBAL_LIST_EMPTY(cached_storage_typecaches) var/atom/movable/movable_loc = real_location movable_loc.lose_active_storage(src) + if (isnull(storage_interfaces[to_hide])) + return TRUE + is_using -= to_hide - to_hide.client.screen -= boxes - to_hide.client.screen -= closer + to_hide.client.screen -= storage_interfaces[to_hide].list_ui_elements() to_hide.client.screen -= real_location.contents + QDEL_NULL(storage_interfaces[to_hide]) + storage_interfaces -= to_hide + return TRUE + /datum/storage/proc/action_trigger(datum/source, datum/action/triggered) SIGNAL_HANDLER @@ -1074,10 +1047,54 @@ GLOBAL_LIST_EMPTY(cached_storage_typecaches) modeswitch_action = null +/// Updates views of all objects in storage and stretches UI to appropriate size +/datum/storage/proc/orient_storage() + var/adjusted_contents = length(real_location.contents) + var/list/datum/numbered_display/numbered_contents + if(numerical_stacking) + numbered_contents = process_numerical_display() + adjusted_contents = length(numbered_contents) + + //if the ammount of contents reaches some multiplier of the final column (and its not the last slot), let the player view an additional row + var/additional_row = (!(adjusted_contents % screen_max_columns) && adjusted_contents < max_slots) + + var/columns = clamp(max_slots, 1, screen_max_columns) + var/rows = clamp(CEILING(adjusted_contents / columns, 1) + additional_row, 1, screen_max_rows) + + for (var/ui_user in storage_interfaces) + storage_interfaces[ui_user].update_position(screen_start_x, screen_pixel_x, screen_start_y, screen_pixel_y, columns, rows) + + var/current_x = screen_start_x + var/current_y = screen_start_y + var/turf/our_turf = get_turf(real_location) + + var/list/obj/storage_contents = list() + if (islist(numbered_contents)) + for(var/content_type in numbered_contents) + var/datum/numbered_display/numberdisplay = numbered_contents[content_type] + storage_contents[numberdisplay.sample_object] = MAPTEXT("[(numberdisplay.number > 1)? "[numberdisplay.number]" : ""]") + else + for(var/obj/item as anything in real_location) + storage_contents[item] = "" + + for(var/obj/item as anything in storage_contents) + item.mouse_opacity = MOUSE_OPACITY_OPAQUE + item.screen_loc = "[current_x]:[screen_pixel_x],[current_y]:[screen_pixel_y]" + item.maptext = storage_contents[item] + SET_PLANE(item, ABOVE_HUD_PLANE, our_turf) + current_x++ + if(current_x - screen_start_x < columns) + continue + current_x = screen_start_x + + current_y++ + if(current_y - screen_start_y >= rows) + break + /** * Toggles the collectmode of our storage. * - * @param mob/toshow the mob toggling us + * @param mob/to_show the mob toggling us */ /datum/storage/proc/toggle_collection_mode(mob/user) collection_mode = (collection_mode + 1) % 3 diff --git a/code/datums/storage/storage_interface.dm b/code/datums/storage/storage_interface.dm new file mode 100644 index 0000000000000..cd28b9eb3f7a1 --- /dev/null +++ b/code/datums/storage/storage_interface.dm @@ -0,0 +1,68 @@ +/// Datum tracker for storage UI +/datum/storage_interface + /// UI elements for this theme + var/atom/movable/screen/close/closer + var/atom/movable/screen/storage/cells + var/atom/movable/screen/storage/corner/corner_top_left + var/atom/movable/screen/storage/corner/top_right/corner_top_right + var/atom/movable/screen/storage/corner/bottom_left/corner_bottom_left + var/atom/movable/screen/storage/corner/bottom_right/corner_bottom_right + var/atom/movable/screen/storage/rowjoin/rowjoin_left + var/atom/movable/screen/storage/rowjoin/right/rowjoin_right + + /// Storage that owns us + var/datum/storage/parent_storage + +/datum/storage_interface/New(ui_style, parent_storage) + ..() + src.parent_storage = parent_storage + closer = new(null, null, parent_storage) + cells = new(null, null, parent_storage) + corner_top_left = new(null, null, parent_storage) + corner_top_right = new(null, null, parent_storage) + corner_bottom_left = new(null, null, parent_storage) + corner_bottom_right = new(null, null, parent_storage) + rowjoin_left = new(null, null, parent_storage) + rowjoin_right = new(null, null, parent_storage) + for (var/atom/movable/screen/ui_elem as anything in list_ui_elements()) + ui_elem.icon = ui_style + +/// Returns all UI elements under this theme +/datum/storage_interface/proc/list_ui_elements() + return list(cells, corner_top_left, corner_top_right, corner_bottom_left, corner_bottom_right, rowjoin_left, rowjoin_right, closer) + +/datum/storage_interface/Destroy(force) + QDEL_NULL(cells) + QDEL_NULL(corner_top_left) + QDEL_NULL(corner_top_right) + QDEL_NULL(corner_bottom_left) + QDEL_NULL(corner_bottom_right) + QDEL_NULL(rowjoin_left) + QDEL_NULL(rowjoin_right) + parent_storage = null + return ..() + +/// Updates position of all UI elements +/datum/storage_interface/proc/update_position(screen_start_x, screen_pixel_x, screen_start_y, screen_pixel_y, columns, rows) + var/start_pixel_x = screen_start_x * 32 + screen_pixel_x + var/start_pixel_y = screen_start_y * 32 + screen_pixel_y + var/end_pixel_x = start_pixel_x + (columns - 1) * 32 + var/end_pixel_y = start_pixel_y + (rows - 1) * 32 + + cells.screen_loc = spanning_screen_loc(start_pixel_x, start_pixel_y, end_pixel_x, end_pixel_y) + var/left_edge_loc = spanning_screen_loc(min(start_pixel_x + 32, end_pixel_x), start_pixel_y, end_pixel_x, end_pixel_y) + var/right_edge_loc = spanning_screen_loc(start_pixel_x, start_pixel_y, max(start_pixel_x, end_pixel_x - 32), end_pixel_y) + corner_top_left.screen_loc = left_edge_loc + corner_bottom_left.screen_loc = left_edge_loc + corner_top_right.screen_loc = right_edge_loc + corner_bottom_right.screen_loc = right_edge_loc + + var/row_left_loc = spanning_screen_loc(start_pixel_x, start_pixel_y + 27, start_pixel_x, start_pixel_y + 27 + max(0, rows - 2) * 32) + rowjoin_left.screen_loc = row_left_loc + rowjoin_left.alpha = (rows > 1) * 255 + + var/row_right_loc = spanning_screen_loc(end_pixel_x, start_pixel_y + 27, end_pixel_x, start_pixel_y + 27 + max(0, rows - 2) * 32) + rowjoin_right.screen_loc = row_right_loc + rowjoin_right.alpha = (rows > 1) * 255 + + closer.screen_loc = "[screen_start_x + columns]:[screen_pixel_x - 5],[screen_start_y]:[screen_pixel_y]" diff --git a/code/datums/storage/subtypes/bag_of_holding.dm b/code/datums/storage/subtypes/bag_of_holding.dm index 5abc171e2cb59..aa812f5d1e007 100644 --- a/code/datums/storage/subtypes/bag_of_holding.dm +++ b/code/datums/storage/subtypes/bag_of_holding.dm @@ -4,7 +4,7 @@ max_slots = 30 allow_big_nesting = TRUE -/datum/storage/bag_of_holding/attempt_insert(obj/item/to_insert, mob/user, override, force) +/datum/storage/bag_of_holding/attempt_insert(obj/item/to_insert, mob/user, override, force, messages) var/list/obj/item/storage/backpack/holding/matching = typecache_filter_list(to_insert.get_all_contents(), typecacheof(/obj/item/storage/backpack/holding)) matching -= parent matching -= real_location @@ -32,13 +32,13 @@ span_userdanger("The Bluespace interfaces of the two devices catastrophically malfunction!"), span_danger("The Bluespace interfaces of the two devices catastrophically malfunction!"), ) - playsound(rift_loc, 'sound/effects/supermatter.ogg', 200, TRUE) message_admins("[ADMIN_LOOKUPFLW(user)] detonated a bag of holding at [ADMIN_VERBOSEJMP(rift_loc)].") user.log_message("detonated a bag of holding at [loc_name(rift_loc)].", LOG_ATTACK, color = "red") user.investigate_log("has been gibbed by a bag of holding recursive insertion.", INVESTIGATE_DEATHS) user.gib() - new /obj/boh_tear(rift_loc) + var/obj/reality_tear/tear = new(rift_loc) + tear.start_disaster() qdel(to_insert) qdel(parent) diff --git a/code/datums/storage/subtypes/cards.dm b/code/datums/storage/subtypes/cards.dm index 8e6a2bfb369ac..bf9cc6d0d5b58 100644 --- a/code/datums/storage/subtypes/cards.dm +++ b/code/datums/storage/subtypes/cards.dm @@ -15,19 +15,6 @@ . = ..() set_holdable(/obj/item/tcgcard) -/datum/storage/tcg/attempt_remove(obj/item/thing, atom/remove_to_loc, silent = FALSE) - . = ..() - if(!.) - return - - var/obj/item/tcgcard_deck/deck = parent - var/obj/item/tcgcard/card = thing - card.flipped = deck.flipped - card.update_appearance(UPDATE_ICON_STATE) - - if(length(real_location.contents) == 0) - qdel(parent) - /datum/storage/tcg/show_contents(mob/to_show) // sometimes, show contents is called when the mob is already seeing the contents of the deck, to refresh the view. // to avoid spam, we only show the message if they weren't already seeing the contents. diff --git a/code/datums/storage/subtypes/extract_inventory.dm b/code/datums/storage/subtypes/extract_inventory.dm index 0fea7ffed6335..9d75b6eb1d336 100644 --- a/code/datums/storage/subtypes/extract_inventory.dm +++ b/code/datums/storage/subtypes/extract_inventory.dm @@ -7,6 +7,8 @@ locked = STORAGE_FULLY_LOCKED rustle_sound = FALSE silent = TRUE + // Snowflake so you can feed it + insert_on_attack = FALSE /datum/storage/extract_inventory/New( atom/parent, diff --git a/code/datums/storage/subtypes/pockets.dm b/code/datums/storage/subtypes/pockets.dm index 67a8b2dda7804..edf3816c274ee 100644 --- a/code/datums/storage/subtypes/pockets.dm +++ b/code/datums/storage/subtypes/pockets.dm @@ -4,7 +4,7 @@ max_total_storage = 50 rustle_sound = FALSE -/datum/storage/pockets/attempt_insert(obj/item/to_insert, mob/user, override, force) +/datum/storage/pockets/attempt_insert(obj/item/to_insert, mob/user, override, force, messages) . = ..() if(!.) return @@ -45,6 +45,7 @@ /datum/storage/pockets/small/fedora/detective attack_hand_interact = TRUE // so the detectives would discover pockets in their hats + click_alt_open = FALSE /datum/storage/pockets/chefhat attack_hand_interact = TRUE @@ -107,7 +108,7 @@ /obj/item/ammo_box/magazine/toy/pistol, /obj/item/ammo_casing, /obj/item/lipstick, - /obj/item/clothing/mask/cigarette, + /obj/item/cigarette, /obj/item/lighter, /obj/item/match, /obj/item/holochip, @@ -115,7 +116,7 @@ /obj/item/reagent_containers/cup/glass/flask), list(/obj/item/screwdriver/power, /obj/item/ammo_casing/rocket, - /obj/item/clothing/mask/cigarette/pipe, + /obj/item/cigarette/pipe, /obj/item/toy/crayon/spraycan) ) @@ -133,7 +134,7 @@ /obj/item/ammo_box/magazine/m9mm, /obj/item/ammo_casing, /obj/item/bikehorn, - /obj/item/clothing/mask/cigarette, + /obj/item/cigarette, /obj/item/dnainjector, /obj/item/firing_pin, /obj/item/holochip, @@ -157,7 +158,7 @@ ), cant_hold_list = list( /obj/item/ammo_casing/rocket, - /obj/item/clothing/mask/cigarette/pipe, + /obj/item/cigarette/pipe, /obj/item/screwdriver/power, /obj/item/toy/crayon/spraycan, ), diff --git a/code/datums/systems/_system.dm b/code/datums/systems/_system.dm deleted file mode 100644 index fe3271048abad..0000000000000 --- a/code/datums/systems/_system.dm +++ /dev/null @@ -1,16 +0,0 @@ -#define NEW_DS_GLOBAL(varname) if(varname != src){if(istype(varname)){qdel(varname);}varname = src;} - -#define DATASYSTEM_DEF(X) GLOBAL_REAL(DS##X, /datum/system/##X);\ -/datum/system/##X/New(){\ - NEW_DS_GLOBAL(DS##X);\ -}\ -/datum/system/##X - - -/** - * Global systems which are distinct from subsystems in that they do not process by the MC. - * Data systems or "DS" are used to store round information and procs to interface with that data, if needed. - */ -/datum/system - /// Name of the system - var/name = "Datum System" diff --git a/code/datums/systems/ds/battle_royale.dm b/code/datums/systems/ds/battle_royale.dm deleted file mode 100644 index 1cdc7358a56be..0000000000000 --- a/code/datums/systems/ds/battle_royale.dm +++ /dev/null @@ -1,229 +0,0 @@ -/// Global list of areas which are considered to be inside the same department for our purposes -GLOBAL_LIST_INIT(battle_royale_regions, list( - "Medical Bay" = list( - /area/station/command/heads_quarters/cmo, - /area/station/medical, - /area/station/security/checkpoint/medical, - ), - "Research Division" = list( - /area/station/command/heads_quarters/rd, - /area/station/security/checkpoint/science, - /area/station/science, - ), - "Engineering Bay" = list( - /area/station/command/heads_quarters/ce, - /area/station/engineering, - /area/station/maintenance/disposal/incinerator, - /area/station/security/checkpoint/engineering, - ), - "Cargo Bay" = list( - /area/station/cargo, - /area/station/command/heads_quarters/qm, - /area/station/security/checkpoint/supply, - ), -)) - -/// Basically just exists to hold references to datums so that they don't GC -DATASYSTEM_DEF(battle_royale) - name = "Battle Royale" - /// List of battle royale datums currently running - var/list/active_battles - -/// Start a new battle royale using a passed list of implants -/datum/system/battle_royale/proc/start_battle(list/competitors) - var/datum/battle_royale_controller/controller = new() - if (!controller.start(competitors)) - return FALSE - LAZYADD(active_battles, controller) - if (LAZYLEN(active_battles) == 1) - start_broadcasting_network(BATTLE_ROYALE_CAMERA_NET) - RegisterSignal(controller, COMSIG_QDELETING, PROC_REF(battle_ended)) - return TRUE - -/// Drop reference when it kills itself -/datum/system/battle_royale/proc/battle_ended(datum/source) - SIGNAL_HANDLER - LAZYREMOVE(active_battles, source) - if (!LAZYLEN(active_battles)) - stop_broadcasting_network(BATTLE_ROYALE_CAMERA_NET) - - -/// Datum which controls the conflict -/datum/battle_royale_controller - /// Where is our battle taking place? - var/chosen_area - /// Is the battle currently in progress? - var/battle_running = TRUE - /// Should we let everyone know that someone has died? - var/announce_deaths = TRUE - /// List of implants involved - var/list/contestant_implants = list() - /// Ways to describe that someone has died - var/static/list/euphemisms = list( - "cashed their last paycheque.", - "didn't make it...", - "didn't make the cut.", - "had their head blown clean off!", - "has been killed!", - "has failed the challenge!", - "has passed away.", - "has died.", - "is in a better place now.", - "isn't going to be clocking in tomorrow!", - "just flatlined.", - "isn't today's winner.", - "seems to have exploded!", - "was just murdered on live tv!", - "won't be making it to retirement.", - "won't be getting back up after that one.", - ) - /// Ways to tell people not to salt in deadchat, surely effective - var/static/list/condolences = list( - "Better luck next time!", - "But stay tuned, there's still everything to play for!", - "Did you catch who did it?", - "It looked like that one really hurt...", - "Let's get that one on action replay!", - "Let's have a moment of silence, please.", - "Let's hope the next one does better.", - "Someone please notify their next of kin.", - "They had a good run.", - "Too bad!", - "What a shame!", - "What an upset!", - "What's going to happen next?", - "Who could have seen that coming?", - "Who will be next?", - ) - -/datum/battle_royale_controller/Destroy(force) - contestant_implants = null - return ..() - -/// Start a battle royale with the list of provided implants -/datum/battle_royale_controller/proc/start(list/implants, battle_time = 10 MINUTES) - chosen_area = pick(GLOB.battle_royale_regions) - for (var/obj/item/implant/explosive/battle_royale/contestant_implant in implants) - contestant_implant.start_battle(chosen_area, GLOB.battle_royale_regions[chosen_area]) - if (isnull(contestant_implant)) - continue // Might have exploded if it was removed from a person - RegisterSignal(contestant_implant, COMSIG_QDELETING, PROC_REF(implant_destroyed)) - contestant_implants |= contestant_implant - - if (length(contestant_implants) <= 1) - return FALSE // Well there's not much point is there - - priority_announce( - text = "Congratulations [station_name()], you have been chosen as the next site of the Rumble Royale! \n\ - Viewers across the sector will watch our [convert_integer_to_words(length(contestant_implants))] lucky contestants battle their way into your [chosen_area] and fight until only one is left standing! \n\ - If they don't make it in five minutes, they'll be disqualified. If you see one of our players struggling to get in, do lend them a hand... or don't, if you can live with the consequences! \n\ - As a gesture of gratitude, we will be providing our premium broadcast to your entertainment monitors at no cost so that you can watch the excitement. \n\ - Bystanders are advised not to intervene... but if you do, make it look good for the camera!", - title = "Rumble Royale Beginning", - sound = 'sound/machines/alarm.ogg', - has_important_message = TRUE, - sender_override = "Rumble Royale Pirate Broadcast Station", - color_override = "red", - ) - - for (var/obj/item/implant/explosive/battle_royale/contestant_implant as anything in contestant_implants) - contestant_implant.announce() - addtimer(CALLBACK(src, PROC_REF(limit_area)), battle_time / 2, TIMER_DELETE_ME) - addtimer(CALLBACK(src, PROC_REF(finish)), battle_time, TIMER_DELETE_ME) - return TRUE - -/// An implant was destroyed, hopefully because it exploded. Count how many competitors remain. -/datum/battle_royale_controller/proc/implant_destroyed(obj/item/implant/implant) - SIGNAL_HANDLER - contestant_implants -= implant - if (!battle_running) - return - - if (length(contestant_implants) <= 1) - announce_winner(implant) - else if (announce_deaths) - var/message = "" - if (isnull(implant.imp_in)) - message = "Looks like someone removed and destroyed their implant, that's cheating!" - else - message = "[implant.imp_in.real_name] [pick(euphemisms)] [pick(condolences)]" - priority_announce( - text = message, - title = "Rumble Royale Casualty Report", - sound = 'sound/misc/notice1.ogg', - has_important_message = TRUE, - sender_override = "Rumble Royale Pirate Broadcast Station", - color_override = "red", - ) - -/// There's only one person left, we have a winner! -/datum/battle_royale_controller/proc/announce_winner(obj/item/implant/losing_implant) - battle_running = FALSE - if (length(contestant_implants) > 1) - return - - var/message = "" - var/mob/living/loser = losing_implant.imp_in - var/obj/item/implant/winning_implant = pop(contestant_implants) - var/mob/living/winner = winning_implant?.imp_in - - if (isnull(winner) && isnull(loser)) - message = "Somehow, it seems like there's no winner tonight. What a disappointment!" - else - var/loser_text = isnull(loser) ? "With the disqualification of the other remaining contestant" : "With the death of [loser.real_name]" - var/winner_text = isnull(winner) ? "we must sadly announce that the would-be winner has also been disqualified. Such bad showmanship!" : "only [winner.real_name] remains. Congratulations, we have a winner!" - message = "[loser_text], [winner_text]" - - if (!isnull(winner)) - podspawn(list( - "target" = get_turf(winner), - "style" = STYLE_SYNDICATE, - "spawn" = /obj/item/food/roast_dinner, - )) - - priority_announce( - text = message, - title = "Rumble Royale Winner", - sound = 'sound/misc/notice1.ogg', - has_important_message = TRUE, - sender_override = "Rumble Royale Pirate Broadcast Station", - color_override = "red", - ) - - qdel(winning_implant) // You get to live! - winner?.mind?.remove_antag_datum(/datum/antagonist/survivalist/battle_royale) - qdel(src) - -/// Called halfway through the battle, if you've not made it to the designated battle zone we kill you -/datum/battle_royale_controller/proc/limit_area() - priority_announce( - text = "We're halfway done folks! And bad news to anyone who hasn't made it to the [chosen_area]... you're out!", - title = "Rumble Royale Update", - sound = 'sound/misc/notice1.ogg', - has_important_message = TRUE, - sender_override = "Rumble Royale Pirate Broadcast Station", - color_override = "red", - ) - - for (var/obj/item/implant/explosive/battle_royale/contestant_implant as anything in contestant_implants) - contestant_implant.limit_areas() - -/// Well you're out of time, bad luck -/datum/battle_royale_controller/proc/finish() - battle_running = FALSE - - priority_announce( - text = "Sorry remaining contestants, your time is up. \ - We're sorry to announce that this edition of Royal Rumble has no winner. \n\ - Better luck next time!", - title = "Rumble Royale Concluded", - sound = 'sound/misc/notice1.ogg', - has_important_message = TRUE, - sender_override = "Rumble Royale Pirate Broadcast Station", - color_override = "red", - ) - - for (var/obj/item/implant/explosive/battle_royale/contestant_implant as anything in contestant_implants) - contestant_implant.explode() - - qdel(src) diff --git a/code/datums/systems/manager.dm b/code/datums/systems/manager.dm deleted file mode 100644 index 0d5fdb8b839b2..0000000000000 --- a/code/datums/systems/manager.dm +++ /dev/null @@ -1,14 +0,0 @@ -// See initialization order in /code/game/world.dm -GLOBAL_REAL(SysMgr, /datum/system_manager) - - -/** - * Initializes all data systems and keeps track of them. - */ -/datum/system_manager - /// List of managed data systems, post initialization. - var/list/datum/system/managed = list() - - -/datum/system_manager/New() - init_subtypes(/datum/system, managed) diff --git a/code/datums/votes/_vote_datum.dm b/code/datums/votes/_vote_datum.dm index 3f821a7129ada..76833f73ff5b0 100644 --- a/code/datums/votes/_vote_datum.dm +++ b/code/datums/votes/_vote_datum.dm @@ -15,25 +15,25 @@ var/list/default_choices /// Does the name of this vote contain the word "vote"? var/contains_vote_in_name = FALSE - /// What message do we want to pass to the player-side vote panel as a tooltip? - var/message = "Click to initiate a vote." + /// What message do we show as the tooltip of this vote if the vote can be initiated? + var/default_message = "Click to initiate a vote." + /// The counting method we use for votes. + var/count_method = VOTE_COUNT_METHOD_SINGLE + /// The method for selecting a winner. + var/winner_method = VOTE_WINNER_METHOD_SIMPLE + /// Should we show details about the number of votes submitted for each option? + var/display_statistics = TRUE // Internal values used when tracking ongoing votes. // Don't mess with these, change the above values / override procs for subtypes. /// An assoc list of [all choices] to [number of votes in the current running vote]. - var/list/choices = list() + VAR_FINAL/list/choices = list() /// A assoc list of [ckey] to [what they voted for in the current running vote]. - var/list/choices_by_ckey = list() + VAR_FINAL/list/choices_by_ckey = list() /// The world time this vote was started. - var/started_time + VAR_FINAL/started_time = -1 /// The time remaining in this vote's run. - var/time_remaining - /// The counting method we use for votes. - var/count_method = VOTE_COUNT_METHOD_SINGLE - /// The method for selecting a winner. - var/winner_method = VOTE_WINNER_METHOD_SIMPLE - /// Should we show details about the number of votes submitted for each option? - var/display_statistics = TRUE + VAR_FINAL/time_remaining = -1 /** * Used to determine if this vote is a possible @@ -55,14 +55,13 @@ choices.Cut() choices_by_ckey.Cut() started_time = null - time_remaining = null + time_remaining = -1 /** * If this vote has a config associated, toggles it between enabled and disabled. - * Returns TRUE on a successful toggle, FALSE otherwise */ -/datum/vote/proc/toggle_votable(mob/toggler) - return FALSE +/datum/vote/proc/toggle_votable() + return /** * If this vote has a config associated, returns its value (True or False, usually). @@ -74,20 +73,18 @@ /** * Checks if the passed mob can initiate this vote. * - * Return TRUE if the mob can begin the vote, allowing anyone to actually vote on it. - * Return FALSE if the mob cannot initiate the vote. + * * forced - if being invoked by someone who is an admin + * + * Return VOTE_AVAILABLE if the mob can initiate the vote. + * Return a string with the reason why the mob can't initiate the vote. */ -/datum/vote/proc/can_be_initiated(mob/by_who, forced = FALSE) +/datum/vote/proc/can_be_initiated(forced = FALSE) SHOULD_CALL_PARENT(TRUE) - if(started_time) - var/next_allowed_time = (started_time + CONFIG_GET(number/vote_delay)) - if(next_allowed_time > world.time && !forced) - message = "A vote was initiated recently. You must wait [DisplayTimeText(next_allowed_time - world.time)] before a new vote can be started!" - return FALSE + if(!forced && !is_config_enabled()) + return "This vote is currently disabled by the server configuration." - message = initial(message) - return TRUE + return VOTE_AVAILABLE /** * Called prior to the vote being initiated. diff --git a/code/datums/votes/custom_vote.dm b/code/datums/votes/custom_vote.dm index d67eb0281c6c6..78eb6d3b876d8 100644 --- a/code/datums/votes/custom_vote.dm +++ b/code/datums/votes/custom_vote.dm @@ -1,14 +1,9 @@ /// The max amount of options someone can have in a custom vote. #define MAX_CUSTOM_VOTE_OPTIONS 10 -/datum/vote/custom_vote/single - name = "Custom Standard" - message = "Click here to start a custom vote (one selection per voter)" - -/datum/vote/custom_vote/multi - name = "Custom Multi" - message = "Click here to start a custom multi vote (multiple selections per voter)" - count_method = VOTE_COUNT_METHOD_MULTI +/datum/vote/custom_vote + name = "Custom" + default_message = "Click here to start a custom vote." // Custom votes ares always accessible. /datum/vote/custom_vote/is_accessible_vote() @@ -17,23 +12,45 @@ /datum/vote/custom_vote/reset() default_choices = null override_question = null + count_method = VOTE_COUNT_METHOD_SINGLE return ..() -/datum/vote/custom_vote/can_be_initiated(mob/by_who, forced = FALSE) +/datum/vote/custom_vote/can_be_initiated(forced) . = ..() - if(!.) - return FALSE + if(. != VOTE_AVAILABLE) + return . + if(forced) + return . // Custom votes can only be created if they're forced to be made. // (Either an admin makes it, or otherwise.) - return forced + return "Only admins can create custom votes." /datum/vote/custom_vote/create_vote(mob/vote_creator) + var/custom_count_method = tgui_input_list( + user = vote_creator, + message = "Single or multiple choice?", + title = "Choice Method", + items = list("Single", "Multiple"), + default = "Single", + ) + switch(custom_count_method) + if("Single") + count_method = VOTE_COUNT_METHOD_SINGLE + if("Multiple") + count_method = VOTE_COUNT_METHOD_MULTI + if(null) + return FALSE + else + stack_trace("Got '[custom_count_method]' in create_vote() for custom voting.") + to_chat(vote_creator, span_boldwarning("Unknown choice method. Contact a coder.")) + return FALSE + var/custom_win_method = tgui_input_list( - vote_creator, - "How should the vote winner be determined?", - "Winner Method", - list("Simple", "Weighted Random", "No Winner"), + user = vote_creator, + message = "How should the vote winner be determined?", + title = "Winner Method", + items = list("Simple", "Weighted Random", "No Winner"), default = "Simple", ) switch(custom_win_method) @@ -43,7 +60,10 @@ winner_method = VOTE_WINNER_METHOD_WEIGHTED_RANDOM if("No Winner") winner_method = VOTE_WINNER_METHOD_NONE + if(null) + return FALSE else + stack_trace("Got '[custom_win_method]' in create_vote() for custom voting.") to_chat(vote_creator, span_boldwarning("Unknown winner method. Contact a coder.")) return FALSE @@ -54,7 +74,7 @@ list("Yes", "No"), ) - if(display_stats == null) + if(isnull(display_stats)) return FALSE display_statistics = display_stats == "Yes" @@ -74,6 +94,9 @@ if(!length(default_choices)) return FALSE + // Sanity for all the tgui input stalling we are doing + if(isnull(vote_creator.client?.holder)) + return FALSE return ..() diff --git a/code/datums/votes/map_vote.dm b/code/datums/votes/map_vote.dm index a07d87846f050..abe452ce4fedf 100644 --- a/code/datums/votes/map_vote.dm +++ b/code/datums/votes/map_vote.dm @@ -1,6 +1,6 @@ /datum/vote/map_vote name = "Map" - message = "Vote for next round's map!" + default_message = "Vote for next round's map!" count_method = VOTE_COUNT_METHOD_SINGLE winner_method = VOTE_WINNER_METHOD_WEIGHTED_RANDOM display_statistics = FALSE @@ -21,77 +21,62 @@ /datum/vote/map_vote/create_vote() . = ..() - check_population(should_key_choices = FALSE) - if(length(choices) == 1) // Only one choice, no need to vote. Let's just auto-rotate it to the only remaining map because it would just happen anyways. - var/de_facto_winner = choices[1] - var/datum/map_config/change_me_out = global.config.maplist[de_facto_winner] - SSmapping.changemap(change_me_out) - to_chat(world, span_boldannounce("The map vote has been skipped because there is only one map left to vote for. The map has been changed to [change_me_out.map_name].")) - SSmapping.map_voted = TRUE // voted by not voting, very sad. + if(!.) return FALSE -/datum/vote/map_vote/toggle_votable(mob/toggler) - if(!toggler) - CRASH("[type] wasn't passed a \"toggler\" mob to toggle_votable.") - if(!check_rights_for(toggler.client, R_ADMIN)) + choices -= get_choices_invalid_for_population() + if(length(choices) == 1) // Only one choice, no need to vote. Let's just auto-rotate it to the only remaining map because it would just happen anyways. + var/datum/map_config/change_me_out = global.config.maplist[choices[1]] + finalize_vote(choices[1])// voted by not voting, very sad. + to_chat(world, span_boldannounce("The map vote has been skipped because there is only one map left to vote for. \ + The map has been changed to [change_me_out.map_name].")) + return FALSE + if(length(choices) == 0) + to_chat(world, span_boldannounce("A map vote was called, but there are no maps to vote for! \ + Players, complain to the admins. Admins, complain to the coders.")) return FALSE - CONFIG_SET(flag/allow_vote_map, !CONFIG_GET(flag/allow_vote_map)) return TRUE +/datum/vote/map_vote/toggle_votable() + CONFIG_SET(flag/allow_vote_map, !CONFIG_GET(flag/allow_vote_map)) + /datum/vote/map_vote/is_config_enabled() return CONFIG_GET(flag/allow_vote_map) -/datum/vote/map_vote/can_be_initiated(mob/by_who, forced = FALSE) +/datum/vote/map_vote/can_be_initiated(forced) . = ..() - if(!.) - return FALSE - + if(. != VOTE_AVAILABLE) + return . if(forced) - return TRUE - - var/number_of_choices = length(check_population()) - if(number_of_choices < 2) - message = "There [number_of_choices == 1 ? "is only one map" : "are no maps"] to choose from." - return FALSE - + return VOTE_AVAILABLE + var/num_choices = length(default_choices - get_choices_invalid_for_population()) + if(num_choices <= 1) + return "There [num_choices == 1 ? "is only one map" : "are no maps"] to choose from." if(SSmapping.map_vote_rocked) - return TRUE - - if(!CONFIG_GET(flag/allow_vote_map)) - message = "Map voting is disabled by server configuration settings." - return FALSE - + return VOTE_AVAILABLE if(SSmapping.map_voted) - message = "The next map has already been selected." - return FALSE - - message = initial(message) - return TRUE - -/// Before we create a vote, remove all maps from our choices that are outside of our population range. -/// Note that this can result in zero remaining choices for our vote, which is not ideal (but ultimately okay). -/// Argument should_key_choices is TRUE, pass as FALSE in a context where choices are already keyed in a list. -/datum/vote/map_vote/proc/check_population(should_key_choices = TRUE) - if(should_key_choices) - for(var/key in default_choices) - choices[key] = 0 + return "The next map has already been selected." + return VOTE_AVAILABLE +/// Returns a list of all map options that are invalid for the current population. +/datum/vote/map_vote/proc/get_choices_invalid_for_population() var/filter_threshold = 0 if(SSticker.HasRoundStarted()) filter_threshold = get_active_player_count(alive_check = FALSE, afk_check = TRUE, human_check = FALSE) else filter_threshold = GLOB.clients.len - for(var/map in choices) + var/list/invalid_choices = list() + for(var/map in default_choices) var/datum/map_config/possible_config = config.maplist[map] if(possible_config.config_min_users > 0 && filter_threshold < possible_config.config_min_users) - choices -= map + invalid_choices += map else if(possible_config.config_max_users > 0 && filter_threshold > possible_config.config_max_users) - choices -= map + invalid_choices += map - return choices + return invalid_choices /datum/vote/map_vote/get_vote_result(list/non_voters) // Even if we have default no vote off, diff --git a/code/datums/votes/restart_vote.dm b/code/datums/votes/restart_vote.dm index 987d5b87eb363..3c74d7e518e28 100644 --- a/code/datums/votes/restart_vote.dm +++ b/code/datums/votes/restart_vote.dm @@ -7,7 +7,8 @@ CHOICE_RESTART, CHOICE_CONTINUE, ) - message = "Vote to restart the ongoing round." + default_message = "Vote to restart the ongoing round. \ + Only works if there are no non-AFK admins online." /// This proc checks to see if any admins are online for the purposes of this vote to see if it can pass. Returns TRUE if there are valid admins online (Has +SERVER and is not AFK), FALSE otherwise. /datum/vote/restart_vote/proc/admins_present() @@ -19,36 +20,24 @@ return FALSE -/datum/vote/restart_vote/toggle_votable(mob/toggler) - if(!toggler) - CRASH("[type] wasn't passed a \"toggler\" mob to toggle_votable.") - - if(!check_rights_for(toggler.client, R_ADMIN)) - return FALSE - +/datum/vote/restart_vote/toggle_votable() CONFIG_SET(flag/allow_vote_restart, !CONFIG_GET(flag/allow_vote_restart)) - return TRUE /datum/vote/restart_vote/is_config_enabled() return CONFIG_GET(flag/allow_vote_restart) -/datum/vote/restart_vote/can_be_initiated(mob/by_who, forced) +/datum/vote/restart_vote/create_vote(mob/vote_creator) . = ..() if(!.) - return FALSE - - if(!forced && !CONFIG_GET(flag/allow_vote_restart)) - message = "Restart voting is disabled by server configuration settings." - return FALSE - - // We still want players to be able to vote to restart even if valid admins are online. Let's update the message just so that the player is aware of this fact. - // We don't want to lock-out the vote though, so we'll return TRUE. - if(admins_present()) - message = "Regardless of the results of this vote, the round will not automatically restart because an admin is online." - return TRUE + return + if(!admins_present()) + return + async_alert_about_admins(vote_creator) - message = initial(message) - return TRUE +/datum/vote/restart_vote/proc/async_alert_about_admins(mob/vote_creator) + set waitfor = FALSE + tgui_alert(vote_creator, "Note: Regardless of the results of this vote, \ + the round will not automatically restart because an active admin is online.") /datum/vote/restart_vote/get_vote_result(list/non_voters) if(!CONFIG_GET(flag/default_no_vote)) diff --git a/code/datums/votes/rock_the_vote.dm b/code/datums/votes/rock_the_vote.dm index 6cffeb5ad6702..6c7ac4ff2572e 100644 --- a/code/datums/votes/rock_the_vote.dm +++ b/code/datums/votes/rock_the_vote.dm @@ -10,58 +10,40 @@ CHOICE_TO_ROCK, CHOICE_NOT_TO_ROCK, ) - message = "Override the current map vote." + default_message = "Override the current map vote." /// The number of times we have rocked the vote thus far. var/rocking_votes = 0 -/datum/vote/rock_the_vote/toggle_votable(mob/toggler) - if(!toggler) - CRASH("[type] wasn't passed a \"toggler\" mob to toggle_votable.") - if(!check_rights_for(toggler.client, R_ADMIN)) - return FALSE - +/datum/vote/rock_the_vote/toggle_votable() CONFIG_SET(flag/allow_rock_the_vote, !CONFIG_GET(flag/allow_rock_the_vote)) - return TRUE /datum/vote/rock_the_vote/is_config_enabled() return CONFIG_GET(flag/allow_rock_the_vote) -/datum/vote/rock_the_vote/can_be_initiated(mob/by_who, forced) +/datum/vote/rock_the_vote/can_be_initiated(forced) . = ..() - - if(!.) - return FALSE - - if(!forced && !CONFIG_GET(flag/allow_rock_the_vote)) - message = "Rocking the vote is disabled by this server's configuration settings." - return FALSE + if(. != VOTE_AVAILABLE) + return . if(SSticker.current_state == GAME_STATE_FINISHED) - message = "The game is finished, no map votes can be initiated." - return FALSE + return "The game is finished, no map votes can be initiated." if(rocking_votes >= CONFIG_GET(number/max_rocking_votes)) - message = "The maximum number of times to rock the vote has been reached." - return FALSE + return "The maximum number of times to rock the vote has been reached." if(SSmapping.map_vote_rocked) - message = "The vote has already been rocked! Initiate a map vote!" - return FALSE + return "The vote has already been rocked! Initiate a map vote!" if(!SSmapping.map_voted) - message = "Rocking the vote is disabled because no map has been voted on yet!" - return FALSE + return "Rocking the vote is disabled because no map has been voted on yet!" if(SSmapping.map_force_chosen) - message = "Rocking the vote is disabled because an admin has forcibly set the map!" - return FALSE + return "Rocking the vote is disabled because an admin has forcibly set the map!" if(EMERGENCY_ESCAPED_OR_ENDGAMED && SSmapping.map_voted) - message = "The emergency shuttle has already left the station and the next map has already been chosen!" - return FALSE + return "The emergency shuttle has already left the station and the next map has already been chosen!" - message = initial(message) - return TRUE + return VOTE_AVAILABLE /datum/vote/rock_the_vote/finalize_vote(winning_option) rocking_votes++ diff --git a/code/datums/weather/weather_types/radiation_storm.dm b/code/datums/weather/weather_types/radiation_storm.dm index cab413b3b9b00..a20b552df4f04 100644 --- a/code/datums/weather/weather_types/radiation_storm.dm +++ b/code/datums/weather/weather_types/radiation_storm.dm @@ -20,7 +20,7 @@ protected_areas = list(/area/station/maintenance, /area/station/ai_monitored/turret_protected/ai_upload, /area/station/ai_monitored/turret_protected/ai_upload_foyer, /area/station/ai_monitored/turret_protected/aisat/maint, /area/station/ai_monitored/command/storage/satellite, /area/station/ai_monitored/turret_protected/ai, /area/station/commons/storage/emergency/starboard, /area/station/commons/storage/emergency/port, - /area/shuttle, /area/station/security/prison/safe, /area/station/security/prison/toilet, /area/icemoon/underground) + /area/shuttle, /area/station/security/prison/safe, /area/station/security/prison/toilet, /area/icemoon/underground, /area/ruin/comms_agent/maint) target_trait = ZTRAIT_STATION immunity_type = TRAIT_RADSTORM_IMMUNE diff --git a/code/datums/wires/_wires.dm b/code/datums/wires/_wires.dm index cb7c39729932f..c3c8a1c0e93e1 100644 --- a/code/datums/wires/_wires.dm +++ b/code/datums/wires/_wires.dm @@ -41,6 +41,9 @@ /// If every instance of these wires should be random. Prevents wires from showing up in station blueprints. var/randomize = FALSE + /// Lazy assoc list of refs to mobs to refs to photos they have studied for wires + var/list/studied_photos + /datum/wires/New(atom/holder) ..() if(!istype(holder, holder_type)) @@ -258,8 +261,13 @@ return TRUE // Station blueprints do that too, but only if the wires are not randomized. - if(user.is_holding_item_of_type(/obj/item/blueprints) && !randomize) - return TRUE + if(!randomize) + if(user.is_holding_item_of_type(/obj/item/blueprints)) + return TRUE + if(!isnull(user.mind)) + for(var/obj/item/photo/photo in user.held_items) + if(LAZYACCESS(studied_photos, REF(user.mind)) == REF(photo)) + return TRUE return FALSE @@ -274,6 +282,37 @@ /datum/wires/proc/always_reveal_wire(color) return FALSE +#define STUDY_INTERACTION_KEY "studying_photo" + +/** + * Attempts to study a photo for blueprints. + */ +/datum/wires/proc/try_study_photo(mob/user) + if(randomize) + return + if(isnull(user.mind)) + return + if(DOING_INTERACTION(user, STUDY_INTERACTION_KEY)) + return + if(LAZYACCESS(studied_photos, REF(user.mind))) + return + for(var/obj/item/photo/photo in user.held_items) + if(!photo.picture?.has_blueprints) + continue + + var/study_length = 1 SECONDS * floor(min(photo.picture.psize_x, photo.picture.psize_y) / 32) + if(study_length >= 4 SECONDS) + to_chat(user, span_notice("You squint [photo]... Hey, there's blueprints in the frame! Really wish the photo was zoomed in, though. \ + It's rather difficult to make out the wires.")) + else + to_chat(user, span_notice("You glance at [photo], looking for wires in the pictured blueprints.")) + + if(do_after(user, study_length, holder, interaction_key = STUDY_INTERACTION_KEY, hidden = TRUE)) + LAZYSET(studied_photos, REF(user.mind), REF(photo)) + return + +#undef STUDY_INTERACTION_KEY + /datum/wires/ui_host() return holder @@ -290,6 +329,7 @@ if (!ui) ui = new(user, src, "Wires", "[holder.name] Wires") ui.open() + try_study_photo(user) /datum/wires/ui_data(mob/user) var/list/data = list() diff --git a/code/datums/wires/airlock.dm b/code/datums/wires/airlock.dm index c26ddd524ce4c..8049f08d8dcf4 100644 --- a/code/datums/wires/airlock.dm +++ b/code/datums/wires/airlock.dm @@ -74,7 +74,7 @@ if(!..()) return FALSE var/obj/machinery/door/airlock/airlock = holder - if(!HAS_SILICON_ACCESS(user) && !isdrone(user) && airlock.isElectrified()) + if(!HAS_SILICON_ACCESS(user) && !isdrone(user) && airlock.isElectrified() && airlock.hasPower()) var/mob/living/carbon/carbon_user = user if (!istype(carbon_user) || carbon_user.should_electrocute(get_area(airlock))) return FALSE diff --git a/code/datums/wires/apc.dm b/code/datums/wires/apc.dm index 54d179802a311..50847df994372 100644 --- a/code/datums/wires/apc.dm +++ b/code/datums/wires/apc.dm @@ -4,8 +4,13 @@ /datum/wires/apc/New(atom/holder) wires = list( - WIRE_POWER1, WIRE_POWER2, - WIRE_IDSCAN, WIRE_AI + WIRE_EQUIPMENT, + WIRE_LIGHT, + WIRE_ENVIRONMENT, + WIRE_POWER1, + WIRE_POWER2, + WIRE_INTERFACE, + WIRE_AI ) add_duds(6) ..() @@ -22,17 +27,32 @@ var/list/status = list() status += "The interface light is [A.locked ? "red" : "green"]." status += "The short indicator is [A.shorted ? "lit" : "off"]." + status += "The channel one light is [A.equipment ? "on" : "off"]." + status += "The channel two light is [A.lighting ? "on" : "off"]." + status += "The channel three light is [A.environ ? "on" : "off"]." status += "The AI connection light is [!A.aidisabled ? "on" : "off"]." return status -/datum/wires/apc/on_pulse(wire) +/datum/wires/apc/on_pulse(wire, user) var/obj/machinery/power/apc/A = holder switch(wire) + if(WIRE_EQUIPMENT) + A.equipment = A.equipment > APC_CHANNEL_OFF ? APC_CHANNEL_OFF : APC_CHANNEL_AUTO_ON + A.update_appearance() + A.update() + if(WIRE_LIGHT) + A.lighting = A.lighting > APC_CHANNEL_OFF ? APC_CHANNEL_OFF : APC_CHANNEL_AUTO_ON + A.update_appearance() + A.update() + if(WIRE_ENVIRONMENT) + A.environ = A.environ > APC_CHANNEL_OFF ? APC_CHANNEL_OFF : APC_CHANNEL_AUTO_ON + A.update_appearance() + A.update() if(WIRE_POWER1, WIRE_POWER2) // Short for a long while. if(!A.shorted) A.shorted = TRUE addtimer(CALLBACK(A, TYPE_PROC_REF(/obj/machinery/power/apc, reset), wire), 2 MINUTES) - if(WIRE_IDSCAN) // Unlock for a little while. + if(WIRE_INTERFACE) // Unlock for a little while. A.locked = FALSE addtimer(CALLBACK(A, TYPE_PROC_REF(/obj/machinery/power/apc, reset), wire), 30 SECONDS) if(WIRE_AI) // Disable AI control for a very short time. @@ -43,12 +63,26 @@ /datum/wires/apc/on_cut(wire, mend, source) var/obj/machinery/power/apc/A = holder switch(wire) + if(WIRE_EQUIPMENT) + A.equipment = mend ? APC_CHANNEL_AUTO_ON : APC_CHANNEL_OFF + A.update_appearance() + A.update() + if(WIRE_LIGHT) + A.lighting = mend ? APC_CHANNEL_AUTO_ON : APC_CHANNEL_OFF + A.update_appearance() + A.update() + if(WIRE_ENVIRONMENT) + A.environ = mend ? APC_CHANNEL_AUTO_ON : APC_CHANNEL_OFF + A.update_appearance() + A.update() if(WIRE_POWER1, WIRE_POWER2) // Short out. if(mend && !is_cut(WIRE_POWER1) && !is_cut(WIRE_POWER2)) A.shorted = FALSE else A.shorted = TRUE A.shock(usr, 50) + if(WIRE_INTERFACE) + A.locked = !mend if(WIRE_AI) // Disable AI control. A.aidisabled = !mend diff --git a/code/datums/wires/mecha.dm b/code/datums/wires/mecha.dm index b6e20c8161f45..4e11eda65f7f6 100644 --- a/code/datums/wires/mecha.dm +++ b/code/datums/wires/mecha.dm @@ -3,7 +3,7 @@ proper_name = "Mecha Control" /datum/wires/mecha/New(atom/holder) - wires = list(WIRE_IDSCAN, WIRE_DISARM, WIRE_ZAP, WIRE_OVERCLOCK) + wires = list(WIRE_IDSCAN, WIRE_DISARM, WIRE_ZAP, WIRE_OVERCLOCK, WIRE_LAUNCH) var/obj/vehicle/sealed/mecha/mecha = holder if(mecha.mecha_flags & HAS_LIGHTS) wires += WIRE_LIGHT @@ -27,7 +27,7 @@ status += "The blue light is [mecha.equipment_disabled ? "on" : "off"]." return status -/datum/wires/mecha/on_pulse(wire) +/datum/wires/mecha/on_pulse(wire, user) var/obj/vehicle/sealed/mecha/mecha = holder switch(wire) if(WIRE_IDSCAN) @@ -42,6 +42,8 @@ mecha.set_light_on(!mecha.light_on) if(WIRE_OVERCLOCK) mecha.toggle_overclock() + if(WIRE_LAUNCH) + try_attack(user) /datum/wires/mecha/on_cut(wire, mend, source) var/obj/vehicle/sealed/mecha/mecha = holder @@ -58,11 +60,40 @@ mecha.internal_damage &= ~MECHA_INT_SHORT_CIRCUIT else mecha.internal_damage |= MECHA_INT_SHORT_CIRCUIT + if(isliving(source)) + mecha.shock(source, 50) if(WIRE_LIGHT) mecha.set_light_on(!mend) if(WIRE_OVERCLOCK) if(!mend) mecha.toggle_overclock(FALSE) + if(WIRE_LAUNCH) + if(!mend) + try_attack(source) + +/datum/wires/mecha/proc/try_attack(mob/living/target) + var/obj/vehicle/sealed/mecha/mecha = holder + if(mecha.occupant_amount()) //no powergamers sorry + return + var/list/obj/item/mecha_parts/mecha_equipment/armaments = list() + if(!isnull(mecha.equip_by_category[MECHA_R_ARM])) + armaments += mecha.equip_by_category[MECHA_R_ARM] + if(!isnull(mecha.equip_by_category[MECHA_L_ARM])) + armaments += mecha.equip_by_category[MECHA_L_ARM] + var/obj/item/mecha_parts/mecha_equipment/armament = length(armaments) ? pick(armaments) : null //null makes a melee attack + if(isnull(target)) + target = locate() in view(length(armaments) ? 5 : 1, mecha) + if(isnull(target)) // still no target + return + + var/disabled = mecha.equipment_disabled + if(!isnull(armament) && armament.range & MECHA_RANGED) + mecha.equipment_disabled = FALSE // honestly just avoid this wire + INVOKE_ASYNC(armament, TYPE_PROC_REF(/obj/item/mecha_parts/mecha_equipment, action), mecha, target) + mecha.equipment_disabled = disabled + return + if(mecha.Adjacent(target) && !TIMER_COOLDOWN_RUNNING(mecha, COOLDOWN_MECHA_MELEE_ATTACK) && target.mech_melee_attack(mecha)) + TIMER_COOLDOWN_START(mecha, COOLDOWN_MECHA_MELEE_ATTACK, mecha.melee_cooldown) /datum/wires/mecha/ui_act(action, params) . = ..() diff --git a/code/datums/wires/robot.dm b/code/datums/wires/robot.dm index cf8d9b238867f..2a45b8e2b3d27 100644 --- a/code/datums/wires/robot.dm +++ b/code/datums/wires/robot.dm @@ -35,10 +35,11 @@ if(WIRE_AI) // Pulse to pick a new AI. if(!R.emagged) var/new_ai + var/is_a_syndi_borg = (ROLE_SYNDICATE in R.faction) if(user) - new_ai = select_active_ai(user, R.z) + new_ai = select_active_ai(user, R.z, !is_a_syndi_borg, is_a_syndi_borg) else - new_ai = select_active_ai(R, R.z) + new_ai = select_active_ai(R, R.z, !is_a_syndi_borg, is_a_syndi_borg) R.notify_ai(AI_NOTIFICATION_CYBORG_DISCONNECTED) if(new_ai && (new_ai != R.connected_ai)) R.set_connected_ai(new_ai) diff --git a/code/datums/wounds/_wounds.dm b/code/datums/wounds/_wounds.dm index c081ee4845fa5..f713819c81786 100644 --- a/code/datums/wounds/_wounds.dm +++ b/code/datums/wounds/_wounds.dm @@ -215,13 +215,13 @@ var/msg = span_danger("[victim]'s [limb.plaintext_zone] [occur_text]!") var/vis_dist = COMBAT_MESSAGE_RANGE - if(severity > WOUND_SEVERITY_MODERATE) + if(severity > WOUND_SEVERITY_SEVERE) msg = "[msg]" vis_dist = DEFAULT_MESSAGE_RANGE victim.visible_message(msg, span_userdanger("Your [limb.plaintext_zone] [occur_text]!"), vision_distance = vis_dist) if(sound_effect) - playsound(L.owner, sound_effect, sound_volume + (20 * severity), TRUE) + playsound(L.owner, sound_effect, sound_volume + (20 * severity), TRUE, falloff_exponent = SOUND_FALLOFF_EXPONENT + 2, ignore_walls = FALSE, falloff_distance = 0) wound_injury(old_wound, attack_direction = attack_direction) if(!demoted) @@ -512,8 +512,8 @@ /datum/wound/proc/check_grab_treatments(obj/item/I, mob/user) return FALSE -/// Like try_treating() but for unhanded interactions from humans, used by joint dislocations for manual bodypart chiropractice for example. Ignores thick material checks since you can pop an arm into place through a thick suit unlike using sutures -/datum/wound/proc/try_handling(mob/living/carbon/human/user) +/// Like try_treating() but for unhanded interactions, used by joint dislocations for manual bodypart chiropractice for example. Ignores thick material checks since you can pop an arm into place through a thick suit unlike using sutures +/datum/wound/proc/try_handling(mob/living/user) return FALSE /// Someone is using something that might be used for treating the wound on this limb diff --git a/code/datums/wounds/bones.dm b/code/datums/wounds/bones.dm index 9495d88cdc5a8..43385b47180ae 100644 --- a/code/datums/wounds/bones.dm +++ b/code/datums/wounds/bones.dm @@ -233,8 +233,10 @@ victim.visible_message(span_danger("[victim]'s dislocated [limb.plaintext_zone] pops back into place!"), span_userdanger("Your dislocated [limb.plaintext_zone] pops back into place! Ow!")) remove_wound() -/datum/wound/blunt/bone/moderate/try_handling(mob/living/carbon/human/user) - if(user.pulling != victim || user.zone_selected != limb.body_zone) +/datum/wound/blunt/bone/moderate/try_handling(mob/living/user) + if(user.usable_hands <= 0 || user.pulling != victim) + return FALSE + if(!isnull(user.hud_used?.zone_select) && user.zone_selected != limb.body_zone) return FALSE if(user.grab_state == GRAB_PASSIVE) diff --git a/code/datums/wounds/burns.dm b/code/datums/wounds/burns.dm index dac47d4ea88ad..394486fef9a24 100644 --- a/code/datums/wounds/burns.dm +++ b/code/datums/wounds/burns.dm @@ -290,7 +290,7 @@ flesh_damage = 5 scar_keyword = "burnmoderate" - simple_desc = "Patient's skin is burned, weakening the limb and multiplying percieved damage!" + simple_desc = "Patient's skin is burned, weakening the limb and multiplying perceived damage!" simple_treat_text = "Ointment will speed up recovery, as will regenerative mesh. Risk of infection is negligible." homemade_treat_text = "Healthy tea will speed up recovery. Salt, or preferably a salt-water mixture, will sanitize the wound, but the former will cause skin irritation, increasing the risk of infection." diff --git a/code/datums/wounds/cranial_fissure.dm b/code/datums/wounds/cranial_fissure.dm index f73f263ff50ab..0b7c00dee7e32 100644 --- a/code/datums/wounds/cranial_fissure.dm +++ b/code/datums/wounds/cranial_fissure.dm @@ -12,10 +12,16 @@ viable_zones = list(BODY_ZONE_HEAD) /datum/wound_pregen_data/cranial_fissure/get_weight(obj/item/bodypart/limb, woundtype, damage, attack_direction, damage_source) - if (limb.owner?.stat < HARD_CRIT) - return 0 + if (isnull(limb.owner)) + return ..() - return ..() + if (HAS_TRAIT(limb.owner, TRAIT_CURSED) && (limb.get_mangled_state() & BODYPART_MANGLED_INTERIOR)) + return ..() + + if (limb.owner.stat >= HARD_CRIT) + return ..() + + return 0 /// A wound applied when receiving significant enough damage to the head. /// Will allow other players to take your eyes out of your head, and slipping @@ -74,8 +80,11 @@ span_userdanger("Your brain spills right out of your head!"), ) -/datum/wound/cranial_fissure/try_handling(mob/living/carbon/human/user) - if (user.zone_selected != BODY_ZONE_HEAD && user.zone_selected != BODY_ZONE_PRECISE_EYES) +/datum/wound/cranial_fissure/try_handling(mob/living/user) + if (user.usable_hands <= 0) + return FALSE + + if(!isnull(user.hud_used?.zone_select) && (user.zone_selected != BODY_ZONE_HEAD && user.zone_selected != BODY_ZONE_PRECISE_EYES)) return FALSE if (victim.body_position != LYING_DOWN) diff --git a/code/datums/wounds/slash.dm b/code/datums/wounds/slash.dm index 980cb71248450..e8f77e603be99 100644 --- a/code/datums/wounds/slash.dm +++ b/code/datums/wounds/slash.dm @@ -188,18 +188,23 @@ else if(istype(I, /obj/item/stack/medical/suture)) return suture(I, user) -/datum/wound/slash/flesh/try_handling(mob/living/carbon/human/user) - if(user.pulling != victim || user.zone_selected != limb.body_zone || !isfelinid(user) || !victim.try_inject(user, injection_flags = INJECT_TRY_SHOW_ERROR_MESSAGE)) +/datum/wound/slash/flesh/try_handling(mob/living/user) + if(user.pulling != victim || !HAS_TRAIT(user, TRAIT_WOUND_LICKER) || !victim.try_inject(user, injection_flags = INJECT_TRY_SHOW_ERROR_MESSAGE)) return FALSE + if(!isnull(user.hud_used?.zone_select) && user.zone_selected != limb.body_zone) + return FALSE + if(DOING_INTERACTION_WITH_TARGET(user, victim)) to_chat(user, span_warning("You're already interacting with [victim]!")) return - if(user.is_mouth_covered()) - to_chat(user, span_warning("Your mouth is covered, you can't lick [victim]'s wounds!")) - return - if(!user.get_organ_slot(ORGAN_SLOT_TONGUE)) - to_chat(user, span_warning("You can't lick wounds without a tongue!")) // f in chat - return + if(iscarbon(user)) + var/mob/living/carbon/carbon_user = user + if(carbon_user.is_mouth_covered()) + to_chat(user, span_warning("Your mouth is covered, you can't lick [victim]'s wounds!")) + return + if(!carbon_user.get_organ_slot(ORGAN_SLOT_TONGUE)) + to_chat(user, span_warning("You can't lick wounds without a tongue!")) // f in chat + return lick_wounds(user) return TRUE diff --git a/code/game/area/areas.dm b/code/game/area/areas.dm index 347dfc480b95f..36ce8c5a24fe4 100644 --- a/code/game/area/areas.dm +++ b/code/game/area/areas.dm @@ -540,26 +540,9 @@ GLOBAL_LIST_EMPTY(teleportlocs) for(var/atom/movable/recipient as anything in arrived.important_recursive_contents[RECURSIVE_CONTENTS_AREA_SENSITIVE]) SEND_SIGNAL(recipient, COMSIG_ENTER_AREA, src) - if(!isliving(arrived)) - return - - var/mob/living/L = arrived - if(!L.ckey) - return - - if(ambient_buzz != old_area.ambient_buzz) - L.refresh_looping_ambience() - -///Tries to play looping ambience to the mobs. -/mob/proc/refresh_looping_ambience() - var/area/my_area = get_area(src) - - if(!(client?.prefs.read_preference(/datum/preference/toggle/sound_ship_ambience)) || !my_area.ambient_buzz) - SEND_SOUND(src, sound(null, repeat = 0, wait = 0, channel = CHANNEL_BUZZ)) - return - - SEND_SOUND(src, sound(my_area.ambient_buzz, repeat = 1, wait = 0, volume = my_area.ambient_buzz_vol, channel = CHANNEL_BUZZ)) - + if(ismob(arrived)) + var/mob/mob = arrived + mob.update_ambience_area(src) /** * Called when an atom exits an area diff --git a/code/game/area/areas/ai_monitored.dm b/code/game/area/areas/ai_monitored.dm index 77ac5d6a2fdba..a6964d70f6ae0 100644 --- a/code/game/area/areas/ai_monitored.dm +++ b/code/game/area/areas/ai_monitored.dm @@ -47,7 +47,6 @@ name = "\improper AI Chamber" icon_state = "ai_chamber" ai_will_not_hear_this = null - area_flags = parent_type::area_flags | ABDUCTOR_PROOF /area/station/ai_monitored/turret_protected/aisat name = "\improper AI Satellite" @@ -82,6 +81,14 @@ name = "\improper AI Satellite Maintenance" icon_state = "ai_maint" +/area/station/ai_monitored/turret_protected/aisat/uppernorth + name = "\improper AI Satellite Upper Fore" + icon_state = "ai" + +/area/station/ai_monitored/turret_protected/aisat/uppersouth + name = "\improper AI Satellite Upper Aft" + icon_state = "ai" + /area/station/ai_monitored/turret_protected/aisat_interior name = "\improper AI Satellite Antechamber" icon_state = "ai_interior" diff --git a/code/game/area/areas/mining.dm b/code/game/area/areas/mining.dm index 1582f7390cf04..ff8e22b17b8fa 100644 --- a/code/game/area/areas/mining.dm +++ b/code/game/area/areas/mining.dm @@ -209,13 +209,23 @@ name = "Icemoon Wastes" outdoors = TRUE -/area/icemoon/surface/outdoors/nospawn // this is the area you use for stuff to not spawn, but if you still want weather. +/area/icemoon/surface/outdoors/Initialize(mapload) + if(HAS_TRAIT(SSstation, STATION_TRAIT_BRIGHT_DAY)) + base_lighting_alpha = 145 + return ..() -/area/icemoon/surface/outdoors/nospawn/New() // unless you roll forested trait lol +/// this is the area you use for stuff to not spawn, but if you still want weather. +/area/icemoon/surface/outdoors/nospawn + +// unless you roll forested trait lol (fuck you time green) +/area/icemoon/surface/outdoors/nospawn/New() . = ..() + // this area SOMETIMES does map generation. Often it doesn't at all + // so it SHOULD NOT be used with the genturf turf type, as it is not always replaced if(HAS_TRAIT(SSstation, STATION_TRAIT_FORESTED)) map_generator = /datum/map_generator/cave_generator/icemoon/surface/forested - area_flags = MOB_SPAWN_ALLOWED | FLORA_ALLOWED//flip this on, the generator has already disabled dangerous fauna + // flip this on, the generator has already disabled dangerous fauna + area_flags = MOB_SPAWN_ALLOWED | FLORA_ALLOWED /area/icemoon/surface/outdoors/noteleport // for places like the cursed spring water area_flags = UNIQUE_AREA | FLORA_ALLOWED | NOTELEPORT @@ -282,3 +292,13 @@ /area/icemoon/underground/explored // ruins can't spawn here name = "Icemoon Underground" area_flags = UNIQUE_AREA + +/area/icemoon/underground/explored/graveyard + name = "Graveyard" + area_flags = UNIQUE_AREA + ambience_index = AMBIENCE_SPOOKY + icon = 'icons/area/areas_station.dmi' + icon_state = "graveyard" + +/area/icemoon/underground/explored/graveyard/chapel + name = "Chapel Graveyard" diff --git a/code/game/area/areas/ruins/icemoon.dm b/code/game/area/areas/ruins/icemoon.dm index 8afa3fae2d08f..fd983f763a3a2 100644 --- a/code/game/area/areas/ruins/icemoon.dm +++ b/code/game/area/areas/ruins/icemoon.dm @@ -18,10 +18,19 @@ base_icon_state = "block" smoothing_flags = NONE canSmoothWith = null + rust_resistance = RUST_RESISTANCE_BASIC /area/ruin/powered/mailroom name = "\improper Abandoned Post Office" +/area/ruin/comms_agent + name = "\improper Listening Post" + sound_environment = SOUND_ENVIRONMENT_CITY + +/area/ruin/comms_agent/maint + name = "\improper Listening Post Maintenance" + sound_environment = SOUND_AREA_TUNNEL_ENCLOSED + /area/ruin/plasma_facility/commons name = "\improper Abandoned Plasma Facility Commons" sound_environment = SOUND_AREA_STANDARD_STATION diff --git a/code/game/area/areas/ruins/lavaland.dm b/code/game/area/areas/ruins/lavaland.dm index c740c12316046..f9c57510132f6 100644 --- a/code/game/area/areas/ruins/lavaland.dm +++ b/code/game/area/areas/ruins/lavaland.dm @@ -10,9 +10,6 @@ name = "\improper Clown Biodome" ambientsounds = list('sound/ambience/clown.ogg') -/area/ruin/lizard_gaslava - name = "\improper Lizard's Gas(Lava)" - /area/ruin/unpowered/gaia name = "\improper Patch of Eden" @@ -48,6 +45,12 @@ area_flags = CULT_PERMITTED ambience_index = AMBIENCE_SPOOKY +/area/ruin/thelizardsgas_lavaland + name = "\improper The Lizard's Gas" + icon_state = "lizardgas" + sound_environment = SOUND_ENVIRONMENT_ROOM + ambient_buzz = 'sound/ambience/magma.ogg' + //Syndicate lavaland base /area/ruin/syndicate_lava_base/engineering diff --git a/code/game/area/areas/shuttles.dm b/code/game/area/areas/shuttles.dm index e27d330ae250e..504efe0742ad1 100644 --- a/code/game/area/areas/shuttles.dm +++ b/code/game/area/areas/shuttles.dm @@ -73,6 +73,11 @@ name = "Russian Cargo Hauler" requires_power = TRUE +/area/shuttle/hunter/mi13_foodtruck + name = "Perfectly Ordinary Food Truck" + requires_power = TRUE + ambience_index = AMBIENCE_DANGER + ////////////////////////////White Ship//////////////////////////// /area/shuttle/abandoned diff --git a/code/game/area/areas/station/command.dm b/code/game/area/areas/station/command.dm index a1a521e77a898..23f2c7c61c0fc 100644 --- a/code/game/area/areas/station/command.dm +++ b/code/game/area/areas/station/command.dm @@ -31,6 +31,11 @@ icon_state = "command" sound_environment = SOUND_AREA_WOODFLOOR +/area/station/command/emergency_closet + name = "\improper Corporate Emergency Closet" + icon_state = "command" + sound_environment = SOUND_AREA_SMALL_ENCLOSED + /* * Command Head Areas */ diff --git a/code/game/area/areas/station/medical.dm b/code/game/area/areas/station/medical.dm index 33d4973f62390..fc6c6ff3a7564 100644 --- a/code/game/area/areas/station/medical.dm +++ b/code/game/area/areas/station/medical.dm @@ -79,6 +79,9 @@ name = "Chemistry" icon_state = "chem" +/area/station/medical/chemistry/minisat + name = "Chemistry Mini-Satellite" + /area/station/medical/pharmacy name = "\improper Pharmacy" icon_state = "pharmacy" diff --git a/code/game/area/areas/station/science.dm b/code/game/area/areas/station/science.dm index f63798aca62da..2787a4ff87feb 100644 --- a/code/game/area/areas/station/science.dm +++ b/code/game/area/areas/station/science.dm @@ -72,6 +72,10 @@ name = "\improper Robotics Lab" icon_state = "ass_line" +/area/station/science/robotics/storage + name = "\improper Robotics Storage" + icon_state = "ass_line" + /area/station/science/robotics/augments name = "\improper Augmentation Theater" icon_state = "robotics" diff --git a/code/game/atom/_atom.dm b/code/game/atom/_atom.dm index 46b4a1c391f22..9eaec1b48378e 100644 --- a/code/game/atom/_atom.dm +++ b/code/game/atom/_atom.dm @@ -136,8 +136,10 @@ ///whether ghosts can see screentips on it var/ghost_screentips = FALSE - /// Flags to check for in can_perform_action. Used in alt-click checks + /// Flags to check for in can_perform_action. Used in alt-click & ctrl-click checks var/interaction_flags_click = NONE + /// Flags to check for in can_perform_action for mouse drag & drop checks. To bypass checks see interaction_flags_atom mouse drop flags + var/interaction_flags_mouse_drop = NONE /** * Top level of the destroy chain for most atoms @@ -565,8 +567,9 @@ newdir = dir return SEND_SIGNAL(src, COMSIG_ATOM_DIR_CHANGE, dir, newdir) + var/oldDir = dir dir = newdir - SEND_SIGNAL(src, COMSIG_ATOM_POST_DIR_CHANGE, dir, newdir) + SEND_SIGNAL(src, COMSIG_ATOM_POST_DIR_CHANGE, oldDir, newdir) if(smoothing_flags & SMOOTH_BORDER_OBJECT) QUEUE_SMOOTH_NEIGHBORS(src) diff --git a/code/game/atom/atom_act.dm b/code/game/atom/atom_act.dm index 7d05a6aaa6822..acd33976e51b6 100644 --- a/code/game/atom/atom_act.dm +++ b/code/game/atom/atom_act.dm @@ -201,10 +201,19 @@ * Causes effects when the atom gets hit by a rust effect from heretics * * Override this if you want custom behaviour in whatever gets hit by the rust + * /turf/rust_turf should be used instead for overriding rust on turfs */ /atom/proc/rust_heretic_act() return +///wrapper proc that passes our mob's rust_strength to the target we are rusting +/mob/living/proc/do_rust_heretic_act(atom/target) + var/datum/antagonist/heretic/heretic_data = IS_HERETIC(src) + target.rust_heretic_act(heretic_data?.rust_strength) + +/mob/living/basic/heretic_summon/rust_walker/do_rust_heretic_act(atom/target) + target.rust_heretic_act(4) + ///Called when something resists while this atom is its loc /atom/proc/container_resist_act(mob/living/user) return diff --git a/code/game/atom/atom_invisibility.dm b/code/game/atom/atom_invisibility.dm index 53fbe895817cf..1475313470e59 100644 --- a/code/game/atom/atom_invisibility.dm +++ b/code/game/atom/atom_invisibility.dm @@ -54,7 +54,7 @@ /// Removes the specified invisibility source from the tracker /atom/proc/RemoveInvisibility(id) - if(!invisibility_sources) + if(!invisibility_sources?[id]) return var/list/priority_data = invisibility_sources[id] diff --git a/code/game/atom/atom_materials.dm b/code/game/atom/atom_materials.dm index deb2714025731..345a8486dd60a 100644 --- a/code/game/atom/atom_materials.dm +++ b/code/game/atom/atom_materials.dm @@ -23,7 +23,7 @@ var/datum/material/custom_material = GET_MATERIAL_REF(current_material) custom_material.on_applied(src, OPTIMAL_COST(materials[current_material] * multiplier * material_modifier), material_flags) - custom_materials = DSmaterials.FindOrCreateMaterialCombo(materials, multiplier) + custom_materials = SSmaterials.FindOrCreateMaterialCombo(materials, multiplier) /** * Returns the material composition of the atom. diff --git a/code/game/atom/atom_tool_acts.dm b/code/game/atom/atom_tool_acts.dm index 69a174a6aa1cf..10bed5a407760 100644 --- a/code/game/atom/atom_tool_acts.dm +++ b/code/game/atom/atom_tool_acts.dm @@ -9,15 +9,32 @@ SHOULD_CALL_PARENT(TRUE) PROTECTED_PROC(TRUE) + if(!user.combat_mode) + var/tool_return = tool_act(user, tool, modifiers) + if(tool_return) + return tool_return + var/is_right_clicking = LAZYACCESS(modifiers, RIGHT_CLICK) var/is_left_clicking = !is_right_clicking var/early_sig_return = NONE if(is_left_clicking) + /* + * This is intentionally using `||` instead of `|` to short-circuit the signal calls + * This is because we want to return early if ANY of these signals return a value + * + * This puts priority on the atom's signals, then the tool's signals, then the user's signals + * So stuff like storage can be handled before stuff the item wants to do like cleaner component + * + * Future idea: Being on combat mode could change/reverse the priority of these signals + */ early_sig_return = SEND_SIGNAL(src, COMSIG_ATOM_ITEM_INTERACTION, user, tool, modifiers) \ - | SEND_SIGNAL(tool, COMSIG_ITEM_INTERACTING_WITH_ATOM, user, src, modifiers) + || SEND_SIGNAL(tool, COMSIG_ITEM_INTERACTING_WITH_ATOM, user, src, modifiers) \ + || SEND_SIGNAL(user, COMSIG_USER_ITEM_INTERACTION, src, tool, modifiers) else + // See above early_sig_return = SEND_SIGNAL(src, COMSIG_ATOM_ITEM_INTERACTION_SECONDARY, user, tool, modifiers) \ - | SEND_SIGNAL(tool, COMSIG_ITEM_INTERACTING_WITH_ATOM_SECONDARY, user, src, modifiers) + || SEND_SIGNAL(tool, COMSIG_ITEM_INTERACTING_WITH_ATOM_SECONDARY, user, src, modifiers) \ + || SEND_SIGNAL(user, COMSIG_USER_ITEM_INTERACTION_SECONDARY, src, tool, modifiers) if(early_sig_return) return early_sig_return @@ -33,10 +50,36 @@ if(interact_return) return interact_return + return NONE + +/** + * + * ## Tool Act + * + * Handles using specific tools on this atom directly. + * Only called when combat mode is off. + * + * Handles the tool_acts in particular, such as wrenches and screwdrivers. + * + * This can be overriden to handle unique "tool interactions" + * IE using an item like a tool (when it's not actually one) + * This is particularly useful for things that shouldn't be inserted into storage + * (because tool acting runs before storage checks) + * but otherwise does nothing that [item_interaction] doesn't already do. + * + * In other words, use sparingly. It's harder to use (correctly) than [item_interaction]. + */ +/atom/proc/tool_act(mob/living/user, obj/item/tool, list/modifiers) + SHOULD_CALL_PARENT(TRUE) + PROTECTED_PROC(TRUE) + var/tool_type = tool.tool_behaviour - if(!tool_type) // here on only deals with ... tools + if(!tool_type) return NONE + var/is_right_clicking = LAZYACCESS(modifiers, RIGHT_CLICK) + var/is_left_clicking = !is_right_clicking + var/list/processing_recipes = list() var/signal_result = is_left_clicking \ ? SEND_SIGNAL(src, COMSIG_ATOM_TOOL_ACT(tool_type), user, tool, processing_recipes) \ @@ -45,6 +88,7 @@ return signal_result if(length(processing_recipes)) process_recipes(user, tool, processing_recipes) + return ITEM_INTERACT_SUCCESS if(QDELETED(tool)) return ITEM_INTERACT_SUCCESS // Safe-ish to assume that if we deleted our item something succeeded @@ -76,6 +120,7 @@ else log_tool("[key_name(user)] used [tool] on [src] (right click) at [AREACOORD(src)]") SEND_SIGNAL(tool, COMSIG_TOOL_ATOM_ACTED_SECONDARY(tool_type), src) + SEND_SIGNAL(tool, COMSIG_ITEM_TOOL_ACTED, src, user, tool_type, act_result) return act_result /** @@ -121,6 +166,92 @@ /obj/item/proc/interact_with_atom_secondary(atom/interacting_with, mob/living/user, list/modifiers) return interact_with_atom(interacting_with, user, modifiers) +/** + * ## Ranged item interaction + * + * Handles non-combat ranged interactions of a tool on this atom, + * such as shooting a gun in the direction of someone*, + * having a scanner you can point at someone to scan them at any distance, + * or pointing a laser pointer at something. + * + * *While this intuitively sounds combat related, it is not, + * because a "combat use" of a gun is gun-butting. + */ +/atom/proc/base_ranged_item_interaction(mob/living/user, obj/item/tool, list/modifiers) + SHOULD_CALL_PARENT(TRUE) + PROTECTED_PROC(TRUE) + + var/is_right_clicking = LAZYACCESS(modifiers, RIGHT_CLICK) + var/is_left_clicking = !is_right_clicking + var/early_sig_return = NONE + if(is_left_clicking) + // See [base_item_interaction] for defails on why this is using `||` (TL;DR it's short circuiting) + early_sig_return = SEND_SIGNAL(src, COMSIG_ATOM_RANGED_ITEM_INTERACTION, user, tool, modifiers) \ + || SEND_SIGNAL(tool, COMSIG_RANGED_ITEM_INTERACTING_WITH_ATOM, user, src, modifiers) + else + // See above + early_sig_return = SEND_SIGNAL(src, COMSIG_ATOM_RANGED_ITEM_INTERACTION_SECONDARY, user, tool, modifiers) \ + || SEND_SIGNAL(tool, COMSIG_RANGED_ITEM_INTERACTING_WITH_ATOM_SECONDARY, user, src, modifiers) + if(early_sig_return) + return early_sig_return + + var/self_interaction = is_left_clicking \ + ? ranged_item_interaction(user, tool, modifiers) \ + : ranged_item_interaction_secondary(user, tool, modifiers) + if(self_interaction) + return self_interaction + + var/interact_return = is_left_clicking \ + ? tool.ranged_interact_with_atom(src, user, modifiers) \ + : tool.ranged_interact_with_atom_secondary(src, user, modifiers) + if(interact_return) + return interact_return + + return NONE + +/** + * Called when this atom has an item used on it from a distance. + * IE, a mob is clicking on this atom with an item and is not adjacent. + * + * Does NOT include Telekinesis users, they are considered adjacent generally. + * + * Return an ITEM_INTERACT_ flag in the event the interaction was handled, to cancel further interaction code. + */ +/atom/proc/ranged_item_interaction(mob/living/user, obj/item/tool, list/modifiers) + return NONE + +/** + * Called when this atom has an item used on it from a distance WITH RIGHT CLICK, + * IE, a mob is right clicking on this atom with an item and is not adjacent. + * + * Default behavior has it run the same code as left click. + * + * Return an ITEM_INTERACT_ flag in the event the interaction was handled, to cancel further interaction code. + */ +/atom/proc/ranged_item_interaction_secondary(mob/living/user, obj/item/tool, list/modifiers) + return ranged_item_interaction(user, tool, modifiers) + +/** + * Called when this item is being used to interact with an atom from a distance, + * IE, a mob is clicking on an atom with this item and is not adjacent. + * + * Does NOT include Telekinesis users, they are considered adjacent generally + * (so long as this item is adjacent to the atom). + * + * Return an ITEM_INTERACT_ flag in the event the interaction was handled, to cancel further interaction code. + */ +/obj/item/proc/ranged_interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + return NONE + +/** + * Called when this item is being used to interact with an atom from a distance WITH RIGHT CLICK, + * IE, a mob is right clicking on an atom with this item and is not adjacent. + * + * Default behavior has it run the same code as left click. + */ +/obj/item/proc/ranged_interact_with_atom_secondary(atom/interacting_with, mob/living/user, list/modifiers) + return ranged_interact_with_atom(interacting_with, user, modifiers) + /* * Tool-specific behavior procs. * @@ -145,14 +276,6 @@ /atom/proc/multitool_act_secondary(mob/living/user, obj/item/tool) return -///Check if an item supports a data buffer (is a multitool) -/atom/proc/multitool_check_buffer(user, obj/item/multitool, silent = FALSE) - if(!istype(multitool, /obj/item/multitool)) - if(user && !silent) - to_chat(user, span_warning("[multitool] has no data buffer!")) - return FALSE - return TRUE - /// Called on an object when a tool with screwdriver capabilities is used to left click an object /atom/proc/screwdriver_act(mob/living/user, obj/item/tool) return @@ -192,3 +315,23 @@ /// Called on an object when a tool with analyzer capabilities is used to right click an object /atom/proc/analyzer_act_secondary(mob/living/user, obj/item/tool) return + +/** + * Called before this item is placed into a storage container + * via the item clicking on the target atom + * + * Returning FALSE will prevent the item from being stored. + */ +/obj/item/proc/storage_insert_on_interaction(datum/storage, atom/storage_holder, mob/user) + return TRUE + +/** + * Called before an item is put into this atom's storage datum via the item clicking on this atom + * + * This can be used to add item-atom interactions that you want handled before inserting something into storage + * (But it's also fairly snowflakey) + * + * Returning FALSE will block that item from being put into our storage. + */ +/atom/proc/storage_insert_on_interacted_with(datum/storage, obj/item/inserted, mob/living/user) + return TRUE diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm index b1720c45c51c6..8135a3af59346 100644 --- a/code/game/atoms_movable.dm +++ b/code/game/atoms_movable.dm @@ -73,7 +73,7 @@ var/atom/movable/pulling var/grab_state = GRAB_PASSIVE /// The strongest grab we can acomplish - var/max_grab = GRAB_KILL + var/max_grab = GRAB_PASSIVE var/throwforce = 0 var/datum/component/orbiter/orbiting @@ -286,7 +286,7 @@ // We're gonna build a light, and mask it with the base turf's appearance // grab a 32x32 square of it // I would like to use GLOB.starbright_overlays here - // But that breaks down for... some? reason. I think recieving a render relay breaks keep_together or something + // But that breaks down for... some? reason. I think receiving a render relay breaks keep_together or something // So we're just gonna accept that this'll break with starlight color changing. hardly matters since this is really only for offset stuff, but I'd love to fix it someday var/mutable_appearance/light = new(GLOB.starlight_objects[GET_TURF_PLANE_OFFSET(generate_for) + 1]) light.render_target = "" @@ -401,6 +401,13 @@ . |= buckled.pulling if(pulling) . |= pulling + if (pulling.buckled_mobs) + . |= pulling.buckled_mobs + + //makes conga lines work with ladders and flying up and down; checks if the guy you are pulling is pulling someone, + //then uses recursion to run the same function again + if (pulling.pulling) + . |= pulling.pulling.get_z_move_affected(z_move_flags) /** * Checks if the destination turf is elegible for z movement from the start turf to a given direction and returns it if so. @@ -588,7 +595,7 @@ stop_pulling() else if(pulling.anchored || pulling.move_resist > move_force) stop_pulling() - if(!only_pulling && pulledby && moving_diagonally != FIRST_DIAG_STEP && (get_dist(src, pulledby) > 1 || z != pulledby.z)) //separated from our puller and not in the middle of a diagonal move. + if(!only_pulling && pulledby && moving_diagonally != FIRST_DIAG_STEP && (get_dist(src, pulledby) > 1 || (z != pulledby.z && !z_allowed))) //separated from our puller and not in the middle of a diagonal move. pulledby.stop_pulling() /atom/movable/proc/set_glide_size(target = 8) @@ -785,7 +792,14 @@ if(target_turf != current_turf || (moving_diagonally != SECOND_DIAG_STEP && ISDIAGONALDIR(pull_dir)) || get_dist(src, pulling) > 1) pulling.move_from_pull(src, target_turf, glide_size) - check_pulling() + if (pulledby) + if (pulledby.currently_z_moving) + check_pulling(z_allowed = TRUE) + //dont call check_pulling() here at all if there is a pulledby that is not currently z moving + //because it breaks stair conga lines, for some fucking reason. + //it's fine because the pull will be checked when this whole proc is called by the mob doing the pulling anyways + else + check_pulling() //glide_size strangely enough can change mid movement animation and update correctly while the animation is playing //This means that if you don't override it late like this, it will just be set back by the movement update that's called when you move turfs. diff --git a/code/game/communications.dm b/code/game/communications.dm index 0be3ccf17bc0d..6d26a9779937d 100644 --- a/code/game/communications.dm +++ b/code/game/communications.dm @@ -129,6 +129,24 @@ GLOBAL_LIST_INIT(reverseradiochannels, list( "[FREQ_CTF_YELLOW]" = RADIO_CHANNEL_CTF_YELLOW )) +GLOBAL_LIST_INIT(radiocolors, list( + RADIO_CHANNEL_COMMON = "#008000", + RADIO_CHANNEL_SCIENCE = "#993399", + RADIO_CHANNEL_COMMAND = "#948f02", + RADIO_CHANNEL_MEDICAL = "#337296", + RADIO_CHANNEL_ENGINEERING = "#fb5613", + RADIO_CHANNEL_SECURITY = "#a30000", + RADIO_CHANNEL_CENTCOM = "#686868", + RADIO_CHANNEL_SYNDICATE = "#6d3f40", + RADIO_CHANNEL_SUPPLY = "#a8732b", + RADIO_CHANNEL_SERVICE = "#6eaa2c", + RADIO_CHANNEL_AI_PRIVATE = "#ff00ff", + RADIO_CHANNEL_CTF_RED = "#ff0000", + RADIO_CHANNEL_CTF_BLUE = "#0000ff", + RADIO_CHANNEL_CTF_GREEN = "#00ff00", + RADIO_CHANNEL_CTF_YELLOW = "#d1ba22" +)) + /datum/radio_frequency /// The frequency of this radio frequency. Of course. var/frequency diff --git a/code/game/data_huds.dm b/code/game/data_huds.dm index fda5485484ebb..a4d59d668ae11 100644 --- a/code/game/data_huds.dm +++ b/code/game/data_huds.dm @@ -207,7 +207,7 @@ Medical HUD! Basic mode needs suit sensors on. if(HAS_TRAIT(src, TRAIT_XENO_HOST)) holder.icon_state = "hudxeno" else if(stat == DEAD || (HAS_TRAIT(src, TRAIT_FAKEDEATH))) - if(can_defib_client()) + if(HAS_TRAIT(src, TRAIT_MIND_TEMPORARILY_GONE) || can_defib_client()) holder.icon_state = "huddefib" else holder.icon_state = "huddead" diff --git a/code/game/gamemodes/objective.dm b/code/game/gamemodes/objective.dm index f0ca22b3b4fae..8894403586836 100644 --- a/code/game/gamemodes/objective.dm +++ b/code/game/gamemodes/objective.dm @@ -6,7 +6,7 @@ GLOBAL_LIST(admin_objective_list) //Prefilled admin assignable objective list var/name = "generic objective" //Name for admin prompts var/explanation_text = "Nothing" //What that person is supposed to do. ///if this objective doesn't print failure or success in the roundend report - var/no_failure = FALSE + var/no_failure = FALSE ///name used in printing this objective (Objective #1) var/objective_name = "Objective" var/team_explanation_text //For when there are multiple owners. @@ -688,6 +688,9 @@ GLOBAL_LIST_EMPTY(possible_items) var/list/all_items = M.current.get_all_contents() //this should get things in cheesewheels, books, etc. for(var/obj/I in all_items) //Check for items + if(HAS_TRAIT(I, TRAIT_ITEM_OBJECTIVE_BLOCKED)) + continue + if(istype(I, steal_target)) if(!targetinfo) //If there's no targetinfo, then that means it was a custom objective. At this point, we know you have the item, so return 1. return TRUE diff --git a/code/game/gamemodes/objective_items.dm b/code/game/gamemodes/objective_items.dm index b3ad7108ba536..396cf4db3eac7 100644 --- a/code/game/gamemodes/objective_items.dm +++ b/code/game/gamemodes/objective_items.dm @@ -5,7 +5,7 @@ //Contains the target item datums for Steal objectives. /datum/objective_item /// How the item is described in the objective - var/name = "A silly bike horn! Honk!" + var/name = "a silly bike horn! Honk!" /// Typepath of item var/targetitem = /obj/item/bikehorn /// Valid containers that the target item can be in. @@ -236,14 +236,19 @@ JOB_HEAD_OF_SECURITY, JOB_HEAD_OF_PERSONNEL, JOB_CHIEF_ENGINEER, - JOB_CHIEF_MEDICAL_OFFICER + JOB_CHIEF_MEDICAL_OFFICER, + JOB_QUARTERMASTER, ) exists_on_map = TRUE difficulty = 3 steal_hint = "A self-defense weapon standard-issue for all heads of staffs barring the Head of Security. Rarely found off of their person." +/datum/objective_item/steal/traitor/telebaton/check_special_completion(obj/item/thing) + return thing.type == /obj/item/melee/baton/telescopic + /obj/item/melee/baton/telescopic/add_stealing_item_objective() - return add_item_to_steal(src, /obj/item/melee/baton/telescopic) + if(type == /obj/item/melee/baton/telescopic) + return add_item_to_steal(src, /obj/item/melee/baton/telescopic) /datum/objective_item/steal/traitor/cargo_budget name = "cargo's departmental budget" @@ -279,7 +284,8 @@ JOB_HEAD_OF_SECURITY, JOB_HEAD_OF_PERSONNEL, JOB_CHIEF_ENGINEER, - JOB_CHIEF_MEDICAL_OFFICER + JOB_CHIEF_MEDICAL_OFFICER, + JOB_QUARTERMASTER, ) exists_on_map = TRUE difficulty = 4 @@ -408,8 +414,8 @@ /datum/objective_item/steal/nukedisc/check_special_completion(obj/item/disk/nuclear/N) return !N.fake -/datum/objective_item/steal/reflector - name = "a reflector trenchcoat" +/datum/objective_item/steal/ablative + name = "an ablative trenchcoat" targetitem = /obj/item/clothing/suit/hooded/ablative excludefromjob = list(JOB_HEAD_OF_SECURITY, JOB_WARDEN) item_owner = list(JOB_HEAD_OF_SECURITY) @@ -560,7 +566,7 @@ // A number of special early-game steal objectives intended to be used with the steal-and-destroy objective. // They're basically items of utility or emotional value that may be found on many players or lying around the station. /datum/objective_item/steal/traitor/insuls - name = "insulated gloves" + name = "some insulated gloves" targetitem = /obj/item/clothing/gloves/color/yellow excludefromjob = list(JOB_CARGO_TECHNICIAN, JOB_QUARTERMASTER, JOB_ATMOSPHERIC_TECHNICIAN, JOB_STATION_ENGINEER, JOB_CHIEF_ENGINEER) item_owner = list(JOB_STATION_ENGINEER, JOB_CHIEF_ENGINEER) @@ -572,7 +578,7 @@ return add_item_to_steal(src, /obj/item/clothing/gloves/color/yellow) /datum/objective_item/steal/traitor/moth_plush - name = "cute moth plush toy" + name = "a cute moth plush toy" targetitem = /obj/item/toy/plush/moth excludefromjob = list(JOB_PSYCHOLOGIST, JOB_PARAMEDIC, JOB_CHEMIST, JOB_MEDICAL_DOCTOR, JOB_CHIEF_MEDICAL_OFFICER, JOB_CORONER) exists_on_map = TRUE @@ -583,7 +589,7 @@ return add_item_to_steal(src, /obj/item/toy/plush/moth) /datum/objective_item/steal/traitor/lizard_plush - name = "cute lizard plush toy" + name = "a cute lizard plush toy" targetitem = /obj/item/toy/plush/lizard_plushie exists_on_map = TRUE difficulty = 1 @@ -627,9 +633,17 @@ return add_item_to_steal(src, /obj/item/book/manual/wiki/security_space_law) /datum/objective_item/steal/traitor/rpd - name = "rapid pipe dispenser" + name = "a rapid pipe dispenser" targetitem = /obj/item/pipe_dispenser - excludefromjob = list(JOB_ATMOSPHERIC_TECHNICIAN, JOB_STATION_ENGINEER, JOB_CHIEF_ENGINEER, JOB_SCIENTIST, JOB_RESEARCH_DIRECTOR, JOB_GENETICIST, JOB_ROBOTICIST) + excludefromjob = list( + JOB_ATMOSPHERIC_TECHNICIAN, + JOB_STATION_ENGINEER, + JOB_CHIEF_ENGINEER, + JOB_SCIENTIST, + JOB_RESEARCH_DIRECTOR, + JOB_GENETICIST, + JOB_ROBOTICIST, + ) item_owner = list(JOB_CHIEF_ENGINEER) exists_on_map = TRUE difficulty = 1 @@ -641,7 +655,19 @@ /datum/objective_item/steal/traitor/donut_box name = "a box of prized donuts" targetitem = /obj/item/storage/fancy/donut_box - excludefromjob = list(JOB_CAPTAIN, JOB_CHIEF_ENGINEER, JOB_HEAD_OF_PERSONNEL, JOB_HEAD_OF_SECURITY, JOB_QUARTERMASTER, JOB_CHIEF_MEDICAL_OFFICER, JOB_RESEARCH_DIRECTOR, JOB_SECURITY_OFFICER, JOB_WARDEN, JOB_LAWYER, JOB_DETECTIVE) + excludefromjob = list( + JOB_CAPTAIN, + JOB_CHIEF_ENGINEER, + JOB_HEAD_OF_PERSONNEL, + JOB_HEAD_OF_SECURITY, + JOB_QUARTERMASTER, + JOB_CHIEF_MEDICAL_OFFICER, + JOB_RESEARCH_DIRECTOR, + JOB_SECURITY_OFFICER, + JOB_WARDEN, + JOB_LAWYER, + JOB_DETECTIVE, + ) exists_on_map = TRUE difficulty = 1 steal_hint = "Everyone has a box of donuts - you may most commonly find them on the Bridge, within Security, or in any department's break room." @@ -653,7 +679,7 @@ objective_type = OBJECTIVE_ITEM_TYPE_SPY /datum/objective_item/steal/spy/lamarr - name = "The Research Director's pet headcrab" + name = "the Research Director's pet headcrab" targetitem = /obj/item/clothing/mask/facehugger/lamarr excludefromjob = list(JOB_RESEARCH_DIRECTOR) exists_on_map = TRUE @@ -783,7 +809,7 @@ return add_item_to_steal(src, /obj/item/stamp/head) /datum/objective_item/steal/spy/sunglasses - name = "sunglasses" + name = "some sunglasses" targetitem = /obj/item/clothing/glasses/sunglasses excludefromjob = list( JOB_CAPTAIN, @@ -802,7 +828,7 @@ You can also obtain a pair from dissassembling hudglasses." /datum/objective_item/steal/spy/ce_modsuit - name = "the cheif engineer's advanced MOD control unit" + name = "the chief engineer's advanced MOD control unit" targetitem = /obj/item/mod/control/pre_equipped/advanced excludefromjob = list(JOB_CHIEF_ENGINEER) exists_on_map = TRUE diff --git a/code/game/machinery/_machinery.dm b/code/game/machinery/_machinery.dm index f221b5ff0f910..a8ae65ef24cd4 100644 --- a/code/game/machinery/_machinery.dm +++ b/code/game/machinery/_machinery.dm @@ -1014,8 +1014,8 @@ if(!istype(secondary_part, required_type)) continue // If it's a corrupt or rigged cell, attempting to send it through Bluespace could have unforeseen consequences. - if(istype(secondary_part, /obj/item/stock_parts/cell) && replacer_tool.works_from_distance) - var/obj/item/stock_parts/cell/checked_cell = secondary_part + if(istype(secondary_part, /obj/item/stock_parts/power_store/cell) && replacer_tool.works_from_distance) + var/obj/item/stock_parts/power_store/cell/checked_cell = secondary_part // If it's rigged or corrupted, max the charge. Then explode it. if(checked_cell.rigged || checked_cell.corrupted) checked_cell.charge = checked_cell.maxcharge @@ -1147,9 +1147,6 @@ PROTECTED_PROC(TRUE) return -/obj/machinery/proc/can_be_overridden() - . = 1 - /obj/machinery/zap_act(power, zap_flags) if(prob(85) && (zap_flags & ZAP_MACHINE_EXPLOSIVE) && !(resistance_flags & INDESTRUCTIBLE)) explosion(src, devastation_range = 1, heavy_impact_range = 2, light_impact_range = 4, flame_range = 2, adminlog = TRUE, smoke = FALSE) diff --git a/code/game/machinery/autolathe.dm b/code/game/machinery/autolathe.dm index 02dfa624d359f..d1025b52b321f 100644 --- a/code/game/machinery/autolathe.dm +++ b/code/game/machinery/autolathe.dm @@ -9,6 +9,7 @@ circuit = /obj/item/circuitboard/machine/autolathe layer = BELOW_OBJ_LAYER processing_flags = NONE + interaction_flags_atom = parent_type::interaction_flags_atom | INTERACT_ATOM_MOUSEDROP_IGNORE_CHECKS ///Is the autolathe hacked via wiring var/hacked = FALSE @@ -28,11 +29,14 @@ var/datum/component/material_container/materials ///direction we output onto (if 0, on top of us) var/drop_direction = 0 + //looping sound for printing items + var/datum/looping_sound/lathe_print/print_sound /obj/machinery/autolathe/Initialize(mapload) + print_sound = new(src, FALSE) materials = AddComponent( \ /datum/component/material_container, \ - DSmaterials.materials_by_category[MAT_CATEGORY_ITEM_MATERIAL], \ + SSmaterials.materials_by_category[MAT_CATEGORY_ITEM_MATERIAL], \ 0, \ MATCONTAINER_EXAMINE, \ container_signals = list(COMSIG_MATCONTAINER_ITEM_CONSUMED = TYPE_PROC_REF(/obj/machinery/autolathe, AfterMaterialInsert)) \ @@ -47,6 +51,7 @@ register_context() /obj/machinery/autolathe/Destroy() + QDEL_NULL(print_sound) materials = null QDEL_NULL(wires) return ..() @@ -124,7 +129,6 @@ ui = new(user, src, "Autolathe") ui.open() - /** * Converts all the designs supported by this autolathe into UI data * Arguments @@ -186,7 +190,6 @@ return data - /obj/machinery/autolathe/ui_assets(mob/user) return list( get_asset_datum(/datum/asset/spritesheet/sheetmaterials), @@ -252,7 +255,7 @@ var/amount_needed = design.materials[material] if(istext(material)) // category var/list/choices = list() - for(var/datum/material/valid_candidate as anything in DSmaterials.materials_by_category[material]) + for(var/datum/material/valid_candidate as anything in SSmaterials.materials_by_category[material]) if(materials.get_material_amount(valid_candidate) < amount_needed) continue choices[valid_candidate.name] = valid_candidate @@ -291,6 +294,8 @@ busy = TRUE icon_state = "autolathe_n" SStgui.update_uis(src) + // play this after all checks passed individually for each item. + print_sound.start() var/turf/target_location if(drop_direction) target_location = get_step(src, drop_direction) @@ -329,29 +334,47 @@ if(!directly_use_energy(charge_per_item)) // provide the wait time until lathe is ready var/area/my_area = get_area(src) var/obj/machinery/power/apc/my_apc = my_area.apc - var/charging_wait = my_apc.time_to_charge(charge_per_item) - if(!isnull(charging_wait)) - say("Unable to continue production, APC overload. Wait [DisplayTimeText(charging_wait, round_seconds_to = 1)] and try again.") + if(!QDELETED(my_apc)) + var/charging_wait = my_apc.time_to_charge(charge_per_item) + if(!isnull(charging_wait)) + say("Unable to continue production, APC overload. Wait [DisplayTimeText(charging_wait, round_seconds_to = 1)] and try again.") + else + say("Unable to continue production, power grid overload.") else - say("Unable to continue production, power grid overload.") + say("Unable to continue production, no APC in area.") finalize_build() return var/is_stack = ispath(design.build_path, /obj/item/stack) if(!materials.has_materials(materials_needed, material_cost_coefficient, is_stack ? items_remaining : 1)) say("Unable to continue production, missing materials.") + finalize_build() return materials.use_materials(materials_needed, material_cost_coefficient, is_stack ? items_remaining : 1) var/atom/movable/created if(is_stack) - created = new design.build_path(target, items_remaining) + var/obj/item/stack/stack_item = initial(design.build_path) + var/max_stack_amount = initial(stack_item.max_amount) + var/number_to_make = (initial(stack_item.amount) * items_remaining) + while(number_to_make > max_stack_amount) + created = new stack_item(null, max_stack_amount) //it's imporant to spawn things in nullspace, since obj's like stacks qdel when they enter a tile/merge with other stacks of the same type, resulting in runtimes. + if(isitem(created)) + created.pixel_x = created.base_pixel_x + rand(-6, 6) + created.pixel_y = created.base_pixel_y + rand(-6, 6) + created.forceMove(target) + number_to_make -= max_stack_amount + + created = new stack_item(null, number_to_make) + else - created = new design.build_path(target) + created = new design.build_path(null) split_materials_uniformly(materials_needed, material_cost_coefficient, created) - created.pixel_x = created.base_pixel_x + rand(-6, 6) - created.pixel_y = created.base_pixel_y + rand(-6, 6) + if(isitem(created)) + created.pixel_x = created.base_pixel_x + rand(-6, 6) + created.pixel_y = created.base_pixel_y + rand(-6, 6) + SSblackbox.record_feedback("nested tally", "lathe_printed_items", 1, list("[type]", "[created.type]")) created.forceMove(target) if(is_stack) @@ -370,23 +393,22 @@ */ /obj/machinery/autolathe/proc/finalize_build() PROTECTED_PROC(TRUE) - + print_sound.stop() icon_state = initial(icon_state) busy = FALSE SStgui.update_uis(src) -/obj/machinery/autolathe/MouseDrop(atom/over, src_location, over_location, src_control, over_control, params) - . = ..() - if(!can_interact(usr) || (!HAS_SILICON_ACCESS(usr) && !isAdminGhostAI(usr)) && !Adjacent(usr)) +/obj/machinery/autolathe/mouse_drop_dragged(atom/over, mob/user, src_location, over_location, params) + if(!can_interact(user) || (!HAS_SILICON_ACCESS(user) && !isAdminGhostAI(user)) && !Adjacent(user)) return if(busy) - balloon_alert(usr, "printing started!") + balloon_alert(user, "printing started!") return var/direction = get_dir(src, over_location) if(!direction) return drop_direction = direction - balloon_alert(usr, "dropping [dir2text(drop_direction)]") + balloon_alert(user, "dropping [dir2text(drop_direction)]") /obj/machinery/autolathe/click_alt(mob/user) if(!drop_direction) diff --git a/code/game/machinery/botlaunchpad.dm b/code/game/machinery/botlaunchpad.dm index c8004af84ba86..fecca2a25489f 100644 --- a/code/game/machinery/botlaunchpad.dm +++ b/code/game/machinery/botlaunchpad.dm @@ -21,17 +21,14 @@ /obj/machinery/botpad/crowbar_act(mob/user, obj/item/tool) return default_deconstruction_crowbar(tool) -/obj/machinery/botpad/multitool_act(mob/living/user, obj/item/tool) +/obj/machinery/botpad/multitool_act(mob/living/user, obj/item/multitool/tool) if(!panel_open) - return - if(!multitool_check_buffer(user, tool)) - return + return NONE var/obj/item/multitool/multitool = tool multitool.set_buffer(src) balloon_alert(user, "saved to multitool buffer") return ITEM_INTERACT_SUCCESS - // Checks the turf for a bot and launches it if it's the only mob on the pad. /obj/machinery/botpad/proc/launch(mob/living/user) var/turf/reverse_turf = get_turf(user) diff --git a/code/game/machinery/buttons.dm b/code/game/machinery/buttons.dm index 32e56e2fca920..7b66872f52bb1 100644 --- a/code/game/machinery/buttons.dm +++ b/code/game/machinery/buttons.dm @@ -21,7 +21,7 @@ var/obj/item/electronics/airlock/board var/device_type = null var/id = null - var/initialized_button = 0 + var/initialized_button = FALSE var/silicon_access_disabled = FALSE /obj/machinery/button/indestructible @@ -36,6 +36,10 @@ fire = 90 acid = 70 +/** + * INITIALIZATION + */ + /obj/machinery/button/Initialize(mapload, ndir = 0, built = 0) . = ..() if(built) @@ -58,12 +62,29 @@ setup_device() find_and_hang_on_wall() + register_context() /obj/machinery/button/Destroy() QDEL_NULL(device) QDEL_NULL(board) return ..() +/obj/machinery/button/proc/setup_device() + if(id && istype(device, /obj/item/assembly/control)) + var/obj/item/assembly/control/control_device = device + control_device.id = id + initialized_button = TRUE + +/obj/machinery/button/connect_to_shuttle(mapload, obj/docking_port/mobile/port, obj/docking_port/stationary/dock) + if(id) + id = "[port.shuttle_id]_[id]" + setup_device() + + +/** + * APPEARANCE + */ + /obj/machinery/button/update_icon_state() icon_state = "[base_icon_state][skin]" if(panel_open) @@ -94,53 +115,93 @@ if(!(machine_stat & (NOPOWER|BROKEN)) && !panel_open) . += emissive_appearance(icon, "[base_icon_state]-light-mask", src, alpha = src.alpha) +/obj/machinery/button/on_set_panel_open(old_value) + if(panel_open) // Only allow renaming while the panel is open + obj_flags |= UNIQUE_RENAME + else + obj_flags &= ~UNIQUE_RENAME + + +/** + * INTERACTION + */ + +/obj/machinery/button/item_interaction(mob/living/user, obj/item/tool, list/modifiers) + if(!panel_open) + return NONE + + if(isassembly(tool)) + return assembly_act(user, tool) + else if(istype(tool, /obj/item/electronics/airlock)) + return airlock_electronics_act(user, tool) + +/obj/machinery/button/proc/assembly_act(mob/living/user, obj/item/assembly/new_device) + if(device) + to_chat(user, span_warning("The button already contains a device!")) + return ITEM_INTERACT_BLOCKING + if(!user.transferItemToLoc(new_device, src, silent = FALSE)) + to_chat(user, span_warning("\The [new_device] is stuck to you!")) + return ITEM_INTERACT_BLOCKING + + device = new_device + to_chat(user, span_notice("You add \the [new_device] to the button.")) + + update_appearance() + return ITEM_INTERACT_SUCCESS + +/obj/machinery/button/proc/airlock_electronics_act(mob/living/user, obj/item/electronics/airlock/new_board) + if(board) + to_chat(user, span_warning("The button already contains a board!")) + return ITEM_INTERACT_BLOCKING + if(!user.transferItemToLoc(new_board, src, silent = FALSE)) + to_chat(user, span_warning("\The [new_board] is stuck to you!")) + return ITEM_INTERACT_BLOCKING + + board = new_board + if(board.one_access) + req_one_access = board.accesses + else + req_access = board.accesses + to_chat(user, span_notice("You add \the [new_board] to the button.")) + + update_appearance() + return ITEM_INTERACT_SUCCESS + /obj/machinery/button/screwdriver_act(mob/living/user, obj/item/tool) if(panel_open || allowed(user)) default_deconstruction_screwdriver(user, "[base_icon_state][skin]-open", "[base_icon_state][skin]", tool) update_appearance() - else - balloon_alert(user, "access denied") - flick_overlay_view("[base_icon_state]-overlay-error", 1 SECONDS) + return ITEM_INTERACT_SUCCESS - return TRUE + balloon_alert(user, "access denied") + flick_overlay_view("[base_icon_state]-overlay-error", 1 SECONDS) + return ITEM_INTERACT_BLOCKING -/obj/machinery/button/attackby(obj/item/W, mob/living/user, params) - if(panel_open) - if(!device && isassembly(W)) - if(!user.transferItemToLoc(W, src)) - to_chat(user, span_warning("\The [W] is stuck to you!")) - return - device = W - to_chat(user, span_notice("You add [W] to the button.")) - - if(!board && istype(W, /obj/item/electronics/airlock)) - if(!user.transferItemToLoc(W, src)) - to_chat(user, span_warning("\The [W] is stuck to you!")) - return - board = W - if(board.one_access) - req_one_access = board.accesses - else - req_access = board.accesses - balloon_alert(user, "electronics added") - to_chat(user, span_notice("You add [W] to the button.")) - - if(!device && !board && W.tool_behaviour == TOOL_WRENCH) - to_chat(user, span_notice("You start unsecuring the button frame...")) - W.play_tool_sound(src) - if(W.use_tool(src, user, 40)) - to_chat(user, span_notice("You unsecure the button frame.")) - transfer_fingerprints_to(new /obj/item/wallframe/button(get_turf(src))) - playsound(loc, 'sound/items/deconstruct.ogg', 50, TRUE) - qdel(src) +/obj/machinery/button/wrench_act(mob/living/user, obj/item/tool) + if(!panel_open) + balloon_alert(user, "open button first!") + return ITEM_INTERACT_BLOCKING - update_appearance() - return + if(device || board) + balloon_alert(user, "empty button first!") + return ITEM_INTERACT_BLOCKING + + to_chat(user, span_notice("You start unsecuring the button frame...")) + if(tool.use_tool(src, user, 40, volume=50)) + to_chat(user, span_notice("You unsecure the button frame.")) + playsound(loc, 'sound/items/deconstruct.ogg', 50, TRUE) + deconstruct(TRUE) + + return ITEM_INTERACT_SUCCESS + +/obj/machinery/button/base_item_interaction(mob/living/user, obj/item/tool, list/modifiers) + . = ..() + if(.) + return . + // This is in here so it's called only after every other item interaction. + if(!user.combat_mode && !(tool.item_flags & NOBLUDGEON) && !panel_open) + return attempt_press(user) ? ITEM_INTERACT_SUCCESS : ITEM_INTERACT_BLOCKING - if(!user.combat_mode && !(W.item_flags & NOBLUDGEON)) - return attack_hand(user) - else - return ..() /obj/machinery/button/emag_act(mob/user, obj/item/card/emag/emag_card) . = ..() @@ -157,98 +218,168 @@ balloon_alert(user, "access overridden") return TRUE + /obj/machinery/button/attack_ai(mob/user) if(!silicon_access_disabled && !panel_open) - return attack_hand(user) + return attempt_press(user) /obj/machinery/button/attack_robot(mob/user) return attack_ai(user) -/obj/machinery/button/examine(mob/user) +/obj/machinery/button/interact(mob/user) . = ..() + if(.) + return + if(!initialized_button) + setup_device() + add_fingerprint(user) + if(!panel_open) + attempt_press(user) return - if(device) - . += span_notice("There is \a [device] inside, which could be removed with an empty hand.") - if(board) - . += span_notice("There is \a [board] inside, which could be removed with an empty hand.") - if(!board && !device) - . += span_notice("There is nothing currently installed in \the [src].") -/obj/machinery/button/proc/setup_device() - if(id && istype(device, /obj/item/assembly/control)) - var/obj/item/assembly/control/A = device - A.id = id - initialized_button = 1 + if(board) + remove_airlock_electronics(user) + return + if(device) + remove_assembly(user) + return -/obj/machinery/button/connect_to_shuttle(mapload, obj/docking_port/mobile/port, obj/docking_port/stationary/dock) - if(id) - id = "[port.shuttle_id]_[id]" - setup_device() + if(can_alter_skin) + if(skin == "") + skin = "-warning" + to_chat(user, span_notice("You change the button frame's front panel to warning lines.")) + else + skin = "" + to_chat(user, span_notice("You change the button frame's front panel to default.")) + update_appearance(UPDATE_ICON) + balloon_alert(user, "style swapped") -/obj/machinery/button/interact(mob/user) - . = ..() - if(.) - return +/obj/machinery/button/attack_hand_secondary(mob/user, list/modifiers) if(!initialized_button) setup_device() add_fingerprint(user) - if(panel_open) - if(device || board) - if(device) - user.put_in_hands(device) - device = null - if(board) - user.put_in_hands(board) - req_access = list() - req_one_access = list() - board = null - update_appearance(UPDATE_ICON) - balloon_alert(user, "electronics removed") - to_chat(user, span_notice("You remove electronics from the button frame.")) - - else if(can_alter_skin) - if(skin == "") - skin = "-warning" - to_chat(user, span_notice("You change the button frame's front panel to warning lines.")) - else - skin = "" - to_chat(user, span_notice("You change the button frame's front panel to default.")) - update_appearance(UPDATE_ICON) - balloon_alert(user, "swapped style") - return + if(!panel_open) + return SECONDARY_ATTACK_CALL_NORMAL + + if(device) + remove_assembly(user) + return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN + if(board) + remove_airlock_electronics(user) + return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN + + return ..() + +/obj/machinery/button/proc/remove_assembly(mob/user) + user.put_in_hands(device) + to_chat(user, span_notice("You remove \the [device] from the button frame.")) + device = null + update_appearance(UPDATE_ICON) + +/obj/machinery/button/proc/remove_airlock_electronics(mob/user) + user.put_in_hands(board) + to_chat(user, span_notice("You remove the board from the button frame.")) + req_access = list() + req_one_access = list() + board = null + update_appearance(UPDATE_ICON) + +/obj/machinery/button/proc/attempt_press(mob/user) if((machine_stat & (NOPOWER|BROKEN))) - return + return FALSE if(device && device.next_activate > world.time) - return + return FALSE if(!allowed(user)) balloon_alert(user, "access denied") flick_overlay_view("[base_icon_state]-overlay-error", 1 SECONDS) - return + return FALSE use_energy(5 JOULES) flick_overlay_view("[base_icon_state]-overlay-success", 1 SECONDS) if(device) device.pulsed(user) - SEND_GLOBAL_SIGNAL(COMSIG_GLOB_BUTTON_PRESSED,src) + SEND_GLOBAL_SIGNAL(COMSIG_GLOB_BUTTON_PRESSED, src) + return TRUE + /** - * Called when the mounted button's wall is knocked down. + * DECONSTRUCTION */ -/obj/machinery/button/proc/knock_down() + +/obj/machinery/button/on_deconstruction(disassembled) + var/obj/item/wallframe/button/dropped_frame = new /obj/item/wallframe/button(drop_location()) + transfer_fingerprints_to(dropped_frame) + +/obj/machinery/button/dump_inventory_contents(list/subset) + . = ..() + device = null + board = null + req_access = list() + req_one_access = list() + + +/** + * INFORMATION + */ + +/obj/machinery/button/examine(mob/user) + . = ..() + if(!panel_open) + return if(device) - device.forceMove(get_turf(src)) - device = null + . += span_notice("There is \a [device] inside, which could be removed with an empty hand.") if(board) - board.forceMove(get_turf(src)) - req_access = list() - req_one_access = list() - board = null - qdel(src) + . += span_notice("There is \a [board] inside, which could be removed with an empty hand.") + if(isnull(board) && isnull(device)) + . += span_notice("There is nothing currently installed in \the [src].") + +/obj/machinery/button/add_context(atom/source, list/context, obj/item/held_item, mob/living/user) + if(panel_open) + if(isnull(held_item)) + if(board && device) + context[SCREENTIP_CONTEXT_LMB] = "Remove Board" + context[SCREENTIP_CONTEXT_RMB] = "Remove Device" + return CONTEXTUAL_SCREENTIP_SET + else if(board) + context[SCREENTIP_CONTEXT_LMB] = "Remove Board" + return CONTEXTUAL_SCREENTIP_SET + else if(device) + context[SCREENTIP_CONTEXT_LMB] = "Remove Device" + return CONTEXTUAL_SCREENTIP_SET + else if(can_alter_skin) + context[SCREENTIP_CONTEXT_LMB] = "Swap Style" + return CONTEXTUAL_SCREENTIP_SET + else if(isassembly(held_item)) + context[SCREENTIP_CONTEXT_LMB] = "Install Device" + return CONTEXTUAL_SCREENTIP_SET + else if(istype(held_item, /obj/item/electronics/airlock)) + context[SCREENTIP_CONTEXT_LMB] = "Install Board" + return CONTEXTUAL_SCREENTIP_SET + else if(held_item.tool_behaviour == TOOL_WRENCH) + context[SCREENTIP_CONTEXT_LMB] = "Deconstruct Button" + return CONTEXTUAL_SCREENTIP_SET + else if(held_item.tool_behaviour == TOOL_SCREWDRIVER) + context[SCREENTIP_CONTEXT_LMB] = "Close Button" + return CONTEXTUAL_SCREENTIP_SET + else + if(isnull(held_item)) + context[SCREENTIP_CONTEXT_LMB] = "Press Button" + return CONTEXTUAL_SCREENTIP_SET + else if(held_item.tool_behaviour == TOOL_SCREWDRIVER) + context[SCREENTIP_CONTEXT_LMB] = "Open Button" + return CONTEXTUAL_SCREENTIP_SET + + return NONE + + +/** + * MAPPING PRESETS + */ /obj/machinery/button/door name = "door button" @@ -265,13 +396,13 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/button/door, 24) /obj/machinery/button/door/setup_device() if(!device) if(normaldoorcontrol) - var/obj/item/assembly/control/airlock/A = new(src) - A.specialfunctions = specialfunctions - device = A + var/obj/item/assembly/control/airlock/airlock_device = new(src) + airlock_device.specialfunctions = specialfunctions + device = airlock_device else - var/obj/item/assembly/control/C = new(src) - C.sync_doors = sync_doors - device = C + var/obj/item/assembly/control/control_device = new(src) + control_device.sync_doors = sync_doors + device = control_device ..() /obj/machinery/button/door/incinerator_vent_ordmix diff --git a/code/game/machinery/camera/camera.dm b/code/game/machinery/camera/camera.dm index ca6562635eecb..6f21e9303fc5a 100644 --- a/code/game/machinery/camera/camera.dm +++ b/code/game/machinery/camera/camera.dm @@ -90,6 +90,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/camera, 0) MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/camera/autoname, 0) +MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/camera/autoname/motion, 0) MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/camera/emp_proof, 0) MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/camera/motion, 0) MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/camera/xray, 0) @@ -119,10 +120,14 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/camera/xray, 0) if(camera_enabled) GLOB.cameranet.addCamera(src) LAZYADD(myarea.cameras, src) +#ifdef MAP_TEST + update_appearance() +#else if(mapload && !start_active && is_station_level(z) && prob(3)) toggle_cam() else //this is handled by toggle_camera, so no need to update it twice. update_appearance() +#endif alarm_manager = new(src) find_and_hang_on_wall(directional = TRUE, \ diff --git a/code/game/machinery/camera/presets.dm b/code/game/machinery/camera/presets.dm index 2cd0506cbfd89..a8e20505387bc 100644 --- a/code/game/machinery/camera/presets.dm +++ b/code/game/machinery/camera/presets.dm @@ -84,6 +84,13 @@ autonames_in_areas[camera_area] = number c_tag = "[format_text(camera_area.name)] #[number]" +/obj/machinery/camera/autoname/motion + start_active = TRUE + name = "motion-sensitive security camera" + +/obj/machinery/camera/autoname/motion/Initialize(mapload) + . = ..() + upgradeMotion() /** * Bomb preset diff --git a/code/game/machinery/cell_charger.dm b/code/game/machinery/cell_charger.dm index 4b6272102057b..83075d693262d 100644 --- a/code/game/machinery/cell_charger.dm +++ b/code/game/machinery/cell_charger.dm @@ -6,7 +6,7 @@ power_channel = AREA_USAGE_EQUIP circuit = /obj/item/circuitboard/machine/cell_charger pass_flags = PASSTABLE - var/obj/item/stock_parts/cell/charging = null + var/obj/item/stock_parts/power_store/cell/charging = null var/charge_rate = 0.25 * STANDARD_CELL_RATE /obj/machinery/cell_charger/update_overlays() @@ -42,7 +42,7 @@ return ITEM_INTERACT_SUCCESS /obj/machinery/cell_charger/attackby(obj/item/W, mob/user, params) - if(istype(W, /obj/item/stock_parts/cell) && !panel_open) + if(istype(W, /obj/item/stock_parts/power_store/cell) && !panel_open) if(machine_stat & BROKEN) to_chat(user, span_warning("[src] is broken!")) return @@ -130,18 +130,16 @@ charge_rate *= capacitor.tier /obj/machinery/cell_charger/process(seconds_per_tick) - if(!charging || !anchored || (machine_stat & (BROKEN|NOPOWER))) - return - - if(charging.percent() >= 100) + if(!charging || charging.percent() >= 100 || !anchored || !is_operational) return var/main_draw = charge_rate * seconds_per_tick if(!main_draw) return - //use a small bit for the charger itself, but power usage scales up with the part tier - use_energy(main_draw * 0.01) - charge_cell(main_draw, charging, grid_only = TRUE) + //charge cell, account for heat loss from work done + var/charge_given = charge_cell(main_draw, charging, grid_only = TRUE) + if(charge_given) + use_energy((charge_given + active_power_usage) * 0.01) update_appearance() diff --git a/code/game/machinery/civilian_bounties.dm b/code/game/machinery/civilian_bounties.dm index 1cb7ee1477ef2..fa0d28c999c88 100644 --- a/code/game/machinery/civilian_bounties.dm +++ b/code/game/machinery/civilian_bounties.dm @@ -95,7 +95,7 @@ playsound(loc, 'sound/machines/synth_no.ogg', 30 , TRUE) /** - * This fully rewrites base behavior in order to only check for bounty objects, and nothing else. + * This fully rewrites base behavior in order to only check for bounty objects, and no other types of objects like pirate-pads do. */ /obj/machinery/computer/piratepad_control/civilian/send() playsound(loc, 'sound/machines/wewewew.ogg', 70, TRUE) @@ -125,6 +125,7 @@ if(curr_bounty.can_claim()) //Pay for the bounty with the ID's department funds. status_report += "Bounty completed! Please give your bounty cube to cargo for your automated payout shortly." + SSblackbox.record_feedback("tally", "bounties_completed", 1, curr_bounty.type) inserted_scan_id.registered_account.reset_bounty() SSeconomy.civ_bounty_tracker++ @@ -155,12 +156,19 @@ COOLDOWN_START(pot_acc, bounty_timer, (5 MINUTES) - cooldown_reduction) pot_acc.bounties = crumbs -/obj/machinery/computer/piratepad_control/civilian/proc/pick_bounty(choice) +/** + * Proc that assigned a civilian bounty to an ID card, from the list of potential bounties that that bank account currently has available. + * Available choices are assigned during add_bounties, and one is locked in here. + * + * @param choice The index of the bounty in the list of bounties that the player can choose from. + */ +/obj/machinery/computer/piratepad_control/civilian/proc/pick_bounty(datum/bounty/choice) if(!inserted_scan_id || !inserted_scan_id.registered_account || !inserted_scan_id.registered_account.bounties || !inserted_scan_id.registered_account.bounties[choice]) playsound(loc, 'sound/machines/synth_no.ogg', 40 , TRUE) return inserted_scan_id.registered_account.civilian_bounty = inserted_scan_id.registered_account.bounties[choice] inserted_scan_id.registered_account.bounties = null + SSblackbox.record_feedback("tally", "bounties_assigned", 1, inserted_scan_id.registered_account.civilian_bounty.type) return inserted_scan_id.registered_account.civilian_bounty /obj/machinery/computer/piratepad_control/civilian/click_alt(mob/user) @@ -184,6 +192,9 @@ data["id_bounty_names"] = list(inserted_scan_id.registered_account.bounties[1].name, inserted_scan_id.registered_account.bounties[2].name, inserted_scan_id.registered_account.bounties[3].name) + data["id_bounty_infos"] = list(inserted_scan_id.registered_account.bounties[1].description, + inserted_scan_id.registered_account.bounties[2].description, + inserted_scan_id.registered_account.bounties[3].description) data["id_bounty_values"] = list(inserted_scan_id.registered_account.bounties[1].reward * (CIV_BOUNTY_SPLIT/100), inserted_scan_id.registered_account.bounties[2].reward * (CIV_BOUNTY_SPLIT/100), inserted_scan_id.registered_account.bounties[3].reward * (CIV_BOUNTY_SPLIT/100)) diff --git a/code/game/machinery/computer/_computer.dm b/code/game/machinery/computer/_computer.dm index 9d746bfa32c06..c8e0251b3dd4b 100644 --- a/code/game/machinery/computer/_computer.dm +++ b/code/game/machinery/computer/_computer.dm @@ -117,7 +117,9 @@ new_frame.set_anchored(TRUE) new_frame.circuit = circuit // Circuit removal code is handled in /obj/machinery/Exited() + component_parts -= circuit circuit.forceMove(new_frame) + if((machine_stat & BROKEN) || !disassembled) var/atom/drop_loc = drop_location() playsound(src, 'sound/effects/hit_on_shattered_glass.ogg', 70, TRUE) @@ -128,7 +130,6 @@ new_frame.state = FRAME_COMPUTER_STATE_GLASSED new_frame.update_appearance(UPDATE_ICON_STATE) - /obj/machinery/computer/ui_interact(mob/user, datum/tgui/ui) SHOULD_CALL_PARENT(TRUE) . = ..() diff --git a/code/game/machinery/computer/apc_control.dm b/code/game/machinery/computer/apc_control.dm index 2b5cfa14c7c28..97bf368d3e25e 100644 --- a/code/game/machinery/computer/apc_control.dm +++ b/code/game/machinery/computer/apc_control.dm @@ -205,3 +205,6 @@ . = ..() if(active_apc) disconnect_apc() + +/obj/machinery/computer/apc_control/away + req_access = list(ACCESS_AWAY_ENGINEERING) diff --git a/code/game/machinery/computer/arcade/battle.dm b/code/game/machinery/computer/arcade/battle.dm index 63d2808c773e0..9733759b5caf4 100644 --- a/code/game/machinery/computer/arcade/battle.dm +++ b/code/game/machinery/computer/arcade/battle.dm @@ -505,7 +505,7 @@ return TRUE if(BATTLE_ARCADE_PLAYER_HEAVY_ATTACK) if(player_current_mp < SPELL_MP_COST) - say("You don't have enough MP to counterattack!") + say("You don't have enough MP to heavy attack!") player_turn = TRUE return TRUE player_current_mp -= SPELL_MP_COST @@ -531,7 +531,8 @@ return player_turn = TRUE ui_panel = UI_PANEL_WORLD_MAP - player_gold /= 2 + if(player_gold) + player_gold = max(round(player_gold /= 2, 1), 0) return TRUE //they pressed something but it wasn't in the menu, we'll be nice and give them back their turn anyway. player_turn = TRUE diff --git a/code/game/machinery/computer/camera.dm b/code/game/machinery/computer/camera.dm index 17bbe2299f7e4..670d8d33fd81c 100644 --- a/code/game/machinery/computer/camera.dm +++ b/code/game/machinery/computer/camera.dm @@ -116,7 +116,7 @@ if(action == "switch_camera") var/obj/machinery/camera/selected_camera = locate(params["camera"]) in GLOB.cameranet.cameras active_camera = selected_camera - playsound(src, get_sfx(SFX_TERMINAL_TYPE), 25, FALSE) + playsound(src, SFX_TERMINAL_TYPE, 25, FALSE) if(isnull(active_camera)) return TRUE diff --git a/code/game/machinery/computer/camera_advanced.dm b/code/game/machinery/computer/camera_advanced.dm index f5695dd6284e6..45bfeb9fcef36 100644 --- a/code/game/machinery/computer/camera_advanced.dm +++ b/code/game/machinery/computer/camera_advanced.dm @@ -339,3 +339,12 @@ to_chat(owner, span_notice("You move downwards.")) else to_chat(owner, span_notice("You couldn't move downwards!")) + +/obj/machinery/computer/camera_advanced/human_ai/screwdriver_act(mob/living/user, obj/item/tool) + balloon_alert(user, "repackaging...") + if(!do_after(user, 5 SECONDS, src)) + return ITEM_INTERACT_BLOCKING + tool.play_tool_sound(src, 40) + new /obj/item/secure_camera_console_pod(get_turf(src)) + qdel(src) + return ITEM_INTERACT_SUCCESS diff --git a/code/game/machinery/computer/communications.dm b/code/game/machinery/computer/communications.dm index 0c95f8edbcb7f..1fb46abd1201f 100644 --- a/code/game/machinery/computer/communications.dm +++ b/code/game/machinery/computer/communications.dm @@ -321,7 +321,7 @@ if (!message) return - DScommunications.soft_filtering = FALSE + GLOB.communications_controller.soft_filtering = FALSE var/list/hard_filter_result = is_ic_filtered(message) if(hard_filter_result) tgui_alert(usr, "Your message contains: (\"[hard_filter_result[CHAT_FILTER_INDEX_WORD]]\"), which is not allowed on this server.") @@ -333,7 +333,7 @@ return message_admins("[ADMIN_LOOKUPFLW(usr)] has passed the soft filter for \"[soft_filter_result[CHAT_FILTER_INDEX_WORD]]\". They may be using a disallowed term for a cross-station message. Increasing delay time to reject.\n\n Message: \"[html_encode(message)]\"") log_admin_private("[key_name(usr)] has passed the soft filter for \"[soft_filter_result[CHAT_FILTER_INDEX_WORD]]\". They may be using a disallowed term for a cross-station message. Increasing delay time to reject.\n\n Message: \"[message]\"") - DScommunications.soft_filtering = TRUE + GLOB.communications_controller.soft_filtering = TRUE playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, FALSE) @@ -344,13 +344,13 @@ GLOB.admins, span_adminnotice( \ "CROSS-SECTOR MESSAGE (OUTGOING): [ADMIN_LOOKUPFLW(usr)] is about to send \ - the following message to [destination] (will autoapprove in [DScommunications.soft_filtering ? DisplayTimeText(EXTENDED_CROSS_SECTOR_CANCEL_TIME) : DisplayTimeText(CROSS_SECTOR_CANCEL_TIME)]): \ + the following message to [destination] (will autoapprove in [GLOB.communications_controller.soft_filtering ? DisplayTimeText(EXTENDED_CROSS_SECTOR_CANCEL_TIME) : DisplayTimeText(CROSS_SECTOR_CANCEL_TIME)]): \ REJECT
\ [html_encode(message)]" \ ) ) - send_cross_comms_message_timer = addtimer(CALLBACK(src, PROC_REF(send_cross_comms_message), usr, destination, message), DScommunications.soft_filtering ? EXTENDED_CROSS_SECTOR_CANCEL_TIME : CROSS_SECTOR_CANCEL_TIME, TIMER_STOPPABLE) + send_cross_comms_message_timer = addtimer(CALLBACK(src, PROC_REF(send_cross_comms_message), usr, destination, message), GLOB.communications_controller.soft_filtering ? EXTENDED_CROSS_SECTOR_CANCEL_TIME : CROSS_SECTOR_CANCEL_TIME, TIMER_STOPPABLE) COOLDOWN_START(src, important_action_cooldown, IMPORTANT_ACTION_COOLDOWN) if ("setState") @@ -487,7 +487,7 @@ var/network_name = CONFIG_GET(string/cross_comms_network) if(network_name) payload["network"] = network_name - if(DScommunications.soft_filtering) + if(GLOB.communications_controller.soft_filtering) payload["is_filtered"] = TRUE send2otherserver(html_decode(station_name()), message, "Comms_Console", destination == "all" ? null : list(destination), additional_data = payload) @@ -495,7 +495,7 @@ usr.log_talk(message, LOG_SAY, tag = "message to the other server") message_admins("[ADMIN_LOOKUPFLW(usr)] has sent a message to the other server\[s].") deadchat_broadcast(" has sent an outgoing message to the other station(s).
", "[usr.real_name]", usr, message_type = DEADCHAT_ANNOUNCEMENT) - DScommunications.soft_filtering = FALSE // set it to false at the end of the proc to ensure that everything prior reads as intended + GLOB.communications_controller.soft_filtering = FALSE // set it to false at the end of the proc to ensure that everything prior reads as intended /obj/machinery/computer/communications/ui_data(mob/user) var/list/data = list( @@ -655,7 +655,7 @@ return deltimer(send_cross_comms_message_timer) - DScommunications.soft_filtering = FALSE + GLOB.communications_controller.soft_filtering = FALSE send_cross_comms_message_timer = null log_admin("[key_name(usr)] has cancelled the outgoing cross-comms message.") @@ -728,7 +728,7 @@ /obj/machinery/computer/communications/proc/make_announcement(mob/living/user) var/is_ai = HAS_SILICON_ACCESS(user) - if(!DScommunications.can_announce(user, is_ai)) + if(!GLOB.communications_controller.can_announce(user, is_ai)) to_chat(user, span_alert("Intercomms recharging. Please stand by.")) return var/input = tgui_input_text(user, "Message to announce to the station crew", "Announcement") @@ -749,7 +749,7 @@ ) var/list/players = get_communication_players() - DScommunications.make_announcement(user, is_ai, input, syndicate || (obj_flags & EMAGGED), players) + GLOB.communications_controller.make_announcement(user, is_ai, input, syndicate || (obj_flags & EMAGGED), players) deadchat_broadcast(" made a priority announcement from [span_name("[get_area_name(usr, TRUE)]")].", span_name("[user.real_name]"), user, message_type=DEADCHAT_ANNOUNCEMENT) /obj/machinery/computer/communications/proc/get_communication_players() diff --git a/code/game/machinery/computer/dna_console.dm b/code/game/machinery/computer/dna_console.dm index f0d7b2e30eb52..9028d6d367d91 100644 --- a/code/game/machinery/computer/dna_console.dm +++ b/code/game/machinery/computer/dna_console.dm @@ -1,5 +1,20 @@ -/// Base timeout for creating mutation activators and other injectors -#define INJECTOR_TIMEOUT 100 +/// Base timeout for creating mutation activators +#define MIN_ACTIVATOR_TIMEOUT 5 SECONDS +/// Base cooldown multiplier for activator upgrades +#define ACTIVATOR_COOLDOWN_MULTIPLIER 0.25 +/// Base timeout for creating mutation injectors +#define MIN_INJECTOR_TIMEOUT 10 SECONDS +/// Base cooldown multiplier for injecotr upgrades +#define INJECTOR_COOLDOWN_MULTIPLIER 0.15 + +/// Base timeout for creating advanced injectors +#define MIN_ADVANCED_TIMEOUT 15 SECONDS +/// Base cooldown multiplier for advanced injector upgrades +#define ADVANCED_COOLDOWN_MULTIPLIER 0.1 + +/// Used for other things like UI/UE/Initial CD +#define MISC_INJECTOR_TIMEOUT 60 SECONDS + /// Maximum number of genetic makeup storage slots in DNA Console #define NUMBER_OF_BUFFERS 3 /// Timeout for DNA Scramble in DNA Consoles @@ -221,7 +236,7 @@ connect_to_scanner() // Set appropriate ready timers and limits for machines functions - injector_ready = world.time + INJECTOR_TIMEOUT + injector_ready = world.time + MISC_INJECTOR_TIMEOUT scramble_ready = world.time + SCRAMBLE_TIMEOUT joker_ready = world.time + JOKER_TIMEOUT COOLDOWN_START(src, enzyme_copy_timer, ENZYME_COPY_BASE_COOLDOWN) @@ -816,21 +831,33 @@ I.research = TRUE // If there's an operational connected scanner, we can use its upgrades // to improve our injector's genetic damage generation + var/cd_reduction_mult = 1 + ACTIVATOR_COOLDOWN_MULTIPLIER + var/base_cd_time = max(MIN_ACTIVATOR_TIMEOUT, abs(HM.instability) SECONDS) + if(scanner_operational()) I.damage_coeff = connected_scanner.damage_coeff*4 - injector_ready = world.time + INJECTOR_TIMEOUT * (1 - 0.1 * connected_scanner.precision_coeff) - else - injector_ready = world.time + INJECTOR_TIMEOUT + // T1: 1.25 - 0.25: 1: 100% + // T4: 1.25 - 1: 0.25 = 25% + // 25% reduction per tier + cd_reduction_mult -= ACTIVATOR_COOLDOWN_MULTIPLIER * (connected_scanner.precision_coeff) + + injector_ready = world.time + (base_cd_time * cd_reduction_mult) else I.name = "[HM.name] mutator" - I.doitanyway = TRUE + I.force_mutate = TRUE // If there's an operational connected scanner, we can use its upgrades // to improve our injector's genetic damage generation + var/cd_reduction_mult = 1 + INJECTOR_COOLDOWN_MULTIPLIER + var/base_cd_time = max(MIN_INJECTOR_TIMEOUT, abs(HM.instability) * 1 SECONDS) + if(scanner_operational()) - I.damage_coeff = connected_scanner.damage_coeff - injector_ready = world.time + INJECTOR_TIMEOUT * 5 * (1 - 0.1 * connected_scanner.precision_coeff) - else - injector_ready = world.time + INJECTOR_TIMEOUT * 5 + I.damage_coeff = connected_scanner.damage_coeff*4 + // T1: 1.15 - 0.15: 1: 100% + // T4: 1.15 - 0.60: 0.55: 55% + // 15% reduction per tier + cd_reduction_mult -= (INJECTOR_COOLDOWN_MULTIPLIER * connected_scanner.precision_coeff) + + injector_ready = world.time + (base_cd_time * cd_reduction_mult) if(connected_scanner) connected_scanner.use_energy(connected_scanner.active_power_usage) else @@ -1349,7 +1376,7 @@ // If we successfully created an injector, don't forget to set the new // ready timer. if(I) - injector_ready = world.time + INJECTOR_TIMEOUT + injector_ready = world.time + MISC_INJECTOR_TIMEOUT if(connected_scanner) connected_scanner.use_energy(connected_scanner.active_power_usage) else @@ -1538,22 +1565,29 @@ // Run through each mutation in our Advanced Injector and add them to a // new injector + var/total_stability for(var/A in injector) var/datum/mutation/human/HM = A I.add_mutations += new HM.type(copymut=HM) + total_stability += HM.instability // Force apply any mutations, this is functionality similar to mutators - I.doitanyway = TRUE + I.force_mutate = TRUE I.name = "Advanced [inj_name] injector" // If there's an operational connected scanner, we can use its upgrades // to improve our injector's genetic damage generation + var/cd_reduction_mult = 1 + ADVANCED_COOLDOWN_MULTIPLIER + var/base_cd_time = max(MIN_ADVANCED_TIMEOUT, abs(total_stability) SECONDS) + if(scanner_operational()) - I.damage_coeff = connected_scanner.damage_coeff - injector_ready = world.time + INJECTOR_TIMEOUT * 8 * (1 - 0.1 * connected_scanner.precision_coeff) - else - injector_ready = world.time + INJECTOR_TIMEOUT * 8 + I.damage_coeff = connected_scanner.damage_coeff*4 + // T1: 1.1 - 0.1: 1: 100% + // T4: 1.1 - 0.4: 0.7 = 70% + // 10% reduction per tier + cd_reduction_mult -= ADVANCED_COOLDOWN_MULTIPLIER * (connected_scanner.precision_coeff) + injector_ready = world.time + (base_cd_time * cd_reduction_mult) return // Adds a mutation to an advanced injector @@ -2299,11 +2333,20 @@ SIGNAL_HANDLER set_connected_scanner(null) +#undef MIN_ACTIVATOR_TIMEOUT +#undef ACTIVATOR_COOLDOWN_MULTIPLIER +#undef MIN_INJECTOR_TIMEOUT +#undef INJECTOR_COOLDOWN_MULTIPLIER + +#undef MIN_ADVANCED_TIMEOUT +#undef ADVANCED_COOLDOWN_MULTIPLIER + +#undef MISC_INJECTOR_TIMEOUT + #undef GENETIC_DAMAGE_PULSE_UNIQUE_IDENTITY #undef GENETIC_DAMAGE_PULSE_UNIQUE_FEATURES #undef ENZYME_COPY_BASE_COOLDOWN -#undef INJECTOR_TIMEOUT #undef NUMBER_OF_BUFFERS #undef SCRAMBLE_TIMEOUT #undef JOKER_TIMEOUT diff --git a/code/game/machinery/computer/launchpad_control.dm b/code/game/machinery/computer/launchpad_control.dm index 13f54f2798091..7c6d1307b76b1 100644 --- a/code/game/machinery/computer/launchpad_control.dm +++ b/code/game/machinery/computer/launchpad_control.dm @@ -58,20 +58,16 @@ to_chat(user, span_warning("You are too primitive to use this computer!")) return -/obj/machinery/computer/launchpad/attackby(obj/item/W, mob/user, params) - if(W.tool_behaviour == TOOL_MULTITOOL) - if(!multitool_check_buffer(user, W)) - return - var/obj/item/multitool/M = W - if(M.buffer && istype(M.buffer, /obj/machinery/launchpad)) - if(LAZYLEN(launchpads) < maximum_pads) - launchpads |= M.buffer - M.set_buffer(null) - to_chat(user, span_notice("You upload the data from the [W.name]'s buffer.")) - else - to_chat(user, span_warning("[src] cannot handle any more connections!")) - else - return ..() +/obj/machinery/computer/launchpad/multitool_act(mob/living/user, obj/item/multitool/tool) + . = NONE + if(!istype(tool.buffer, /obj/machinery/launchpad)) + return + + if(LAZYLEN(launchpads) < maximum_pads) + launchpads |= tool.buffer + tool.set_buffer(null) + to_chat(user, span_notice("You upload the data from the [tool] buffer.")) + return ITEM_INTERACT_SUCCESS /obj/machinery/computer/launchpad/proc/pad_exists(number) var/obj/machinery/launchpad/pad = launchpads[number] @@ -137,10 +133,16 @@ if("move_pos") var/plus_x = text2num(params["x"]) var/plus_y = text2num(params["y"]) - current_pad.set_offset( - x = current_pad.x_offset + plus_x, - y = current_pad.y_offset + plus_y - ) + if(plus_x || plus_y) + current_pad.set_offset( + x = current_pad.x_offset + plus_x, + y = current_pad.y_offset + plus_y, + ) + else + current_pad.set_offset( + x = 0, + y = 0, + ) . = TRUE if("rename") . = TRUE diff --git a/code/game/machinery/computer/law.dm b/code/game/machinery/computer/law.dm index 816177f9f0edd..383a980a64da0 100644 --- a/code/game/machinery/computer/law.dm +++ b/code/game/machinery/computer/law.dm @@ -48,7 +48,7 @@ return INITIALIZE_HINT_QDEL /obj/machinery/computer/upload/ai/interact(mob/user) - current = select_active_ai(user, z) + current = select_active_ai(user, z, TRUE) if (!current) to_chat(user, span_alert("No active AIs detected!")) diff --git a/code/game/machinery/computer/mechlaunchpad.dm b/code/game/machinery/computer/mechlaunchpad.dm index 7b80b6e95c8d6..46c0045fb3568 100644 --- a/code/game/machinery/computer/mechlaunchpad.dm +++ b/code/game/machinery/computer/mechlaunchpad.dm @@ -86,28 +86,32 @@ continue return found_mechpad -/obj/machinery/computer/mechpad/multitool_act(mob/living/user, obj/item/tool) - if(!multitool_check_buffer(user, tool)) +/obj/machinery/computer/mechpad/multitool_act(mob/living/user, obj/item/multitool/multitool) + . = NONE + if(!istype(multitool.buffer, /obj/machinery/mechpad)) return - var/obj/item/multitool/multitool = tool - if(istype(multitool.buffer, /obj/machinery/mechpad)) - var/obj/machinery/mechpad/buffered_pad = multitool.buffer - if(!(mechpads.len < maximum_pads)) - to_chat(user, span_warning("[src] cannot handle any more connections!")) - return TRUE - if(buffered_pad == connected_mechpad) - to_chat(user, span_warning("[src] cannot connect to its own mechpad!")) - else if(!connected_mechpad && buffered_pad == find_pad()) - if(buffered_pad in mechpads) - remove_pad(buffered_pad) - connect_launchpad(buffered_pad) - multitool.set_buffer(null) - to_chat(user, span_notice("You connect the console to the pad with data from the [multitool.name]'s buffer.")) - else - add_pad(buffered_pad) - multitool.set_buffer(null) - to_chat(user, span_notice("You upload the data from the [multitool.name]'s buffer.")) - return TRUE + + var/obj/machinery/mechpad/buffered_pad = multitool.buffer + if(!(mechpads.len < maximum_pads)) + to_chat(user, span_warning("[src] cannot handle any more connections!")) + return ITEM_INTERACT_SUCCESS + + if(buffered_pad == connected_mechpad) + to_chat(user, span_warning("[src] cannot connect to its own mechpad!")) + return ITEM_INTERACT_BLOCKING + + if(!connected_mechpad && buffered_pad == find_pad()) + if(buffered_pad in mechpads) + remove_pad(buffered_pad) + connect_launchpad(buffered_pad) + multitool.set_buffer(null) + to_chat(user, span_notice("You connect the console to the pad with data from the [multitool.name]'s buffer.")) + return ITEM_INTERACT_SUCCESS + + add_pad(buffered_pad) + multitool.set_buffer(null) + to_chat(user, span_notice("You upload the data from the [multitool.name]'s buffer.")) + return ITEM_INTERACT_SUCCESS /obj/machinery/computer/mechpad/proc/add_pad(obj/machinery/mechpad/pad) mechpads += pad diff --git a/code/game/machinery/computer/operating_computer.dm b/code/game/machinery/computer/operating_computer.dm index d0ea49df27b59..d67cea367e9a6 100644 --- a/code/game/machinery/computer/operating_computer.dm +++ b/code/game/machinery/computer/operating_computer.dm @@ -151,7 +151,7 @@ else alternative_step = "Finish operation" data["procedures"] += list(list( - "name" = capitalize("[parse_zone(procedure.location)] [procedure.name]"), + "name" = capitalize("[patient.parse_zone_with_bodypart(procedure.location)] [procedure.name]"), "next_step" = capitalize(surgery_step.name), "chems_needed" = chems_needed, "alternative_step" = alternative_step, diff --git a/code/game/machinery/computer/orders/order_computer/order_computer.dm b/code/game/machinery/computer/orders/order_computer/order_computer.dm index 718fa2bc21819..770897a2fe4fb 100644 --- a/code/game/machinery/computer/orders/order_computer/order_computer.dm +++ b/code/game/machinery/computer/orders/order_computer/order_computer.dm @@ -208,7 +208,7 @@ GLOBAL_LIST_EMPTY(order_console_products) return TRUE /** - * Checks if an ID card is able to afford the total cost of the current console's grocieries + * Checks if an ID card is able to afford the total cost of the current console's groceries * and deducts the cost if they can. * Args: * card - The ID card we check for balance diff --git a/code/game/machinery/computer/orders/order_items/cook/order_milk_eggs.dm b/code/game/machinery/computer/orders/order_items/cook/order_milk_eggs.dm index fcd0737675bec..9e5413f854863 100644 --- a/code/game/machinery/computer/orders/order_items/cook/order_milk_eggs.dm +++ b/code/game/machinery/computer/orders/order_items/cook/order_milk_eggs.dm @@ -134,3 +134,13 @@ name = "Mothic Pantry Pack" item_path = /obj/item/storage/box/mothic_cans_sauces cost_per_order = 120 + +/datum/orderable_item/milk_eggs/armorfish + name = "Cleaned Armorfish" + item_path = /obj/item/food/fishmeat/armorfish + cost_per_order = 30 + +/datum/orderable_item/milk_eggs/moonfish + name = "Moonfish" + item_path = /obj/item/food/fishmeat/moonfish + cost_per_order = 30 diff --git a/code/game/machinery/computer/orders/order_items/cook/order_reagents.dm b/code/game/machinery/computer/orders/order_items/cook/order_reagents.dm index d6b4728d10496..39fb38df550ef 100644 --- a/code/game/machinery/computer/orders/order_items/cook/order_reagents.dm +++ b/code/game/machinery/computer/orders/order_items/cook/order_reagents.dm @@ -95,3 +95,13 @@ name = "Grounding Solution" item_path = /obj/item/reagent_containers/condiment/grounding_solution cost_per_order = 30 + +/datum/orderable_item/reagents/honey + name = "Honey" + item_path = /obj/item/reagent_containers/condiment/honey + cost_per_order = 125 //its high quality honey :) + +/datum/orderable_item/reagents/mayonnaise + name = "Mayonnaise" + item_path = /obj/item/reagent_containers/condiment/mayonnaise + cost_per_order = 30 diff --git a/code/game/machinery/computer/orders/order_items/cook/order_veggies.dm b/code/game/machinery/computer/orders/order_items/cook/order_veggies.dm index 506920986dd2c..f96562724d27d 100644 --- a/code/game/machinery/computer/orders/order_items/cook/order_veggies.dm +++ b/code/game/machinery/computer/orders/order_items/cook/order_veggies.dm @@ -89,3 +89,91 @@ name = "Pickled Voltvine" item_path = /obj/item/food/pickled_voltvine cost_per_order = 5 + +/datum/orderable_item/veggies/chili + name = "Chili" + item_path = /obj/item/food/grown/chili + +/datum/orderable_item/veggies/berries + name = "Berries" + item_path = /obj/item/food/grown/berries + +/datum/orderable_item/veggies/pineapple + name = "Pineapple" + item_path = /obj/item/food/grown/pineapple + +/datum/orderable_item/veggies/peas + name = "Peas" + item_path = /obj/item/food/grown/peas + +/datum/orderable_item/veggies/korta_nut //nanotrasen does not devote as much of their resources to pathetic lizard crops + name = "Korta Nut" + item_path = /obj/item/food/grown/korta_nut + cost_per_order = 15 + +/datum/orderable_item/veggies/parsnip + name = "Parsnip" + item_path = /obj/item/food/grown/parsnip + +/datum/orderable_item/veggies/redbeet + name = "Red Beet" + item_path = /obj/item/food/grown/redbeet + +/datum/orderable_item/veggies/orange + name = "Orange" + item_path = /obj/item/food/grown/citrus/orange + +/datum/orderable_item/veggies/vanillapod + name = "Vanilla" + item_path = /obj/item/food/grown/vanillapod + cost_per_order = 25 //food items that are treated as mutations in game should be more expensive. groceries shouldnt include ACTUAL mutations but i think real foods are ok + +/datum/orderable_item/veggies/sweetkorta + name = "Sweet Korta Nut" + item_path = /obj/item/food/grown/korta_nut/sweet + cost_per_order = 30 + +/datum/orderable_item/veggies/redonion + name = "Red Onion" + item_path = /obj/item/food/grown/onion/red + cost_per_order = 25 + +/datum/orderable_item/veggies/peanut + name = "Peanut" + item_path = /obj/item/food/grown/peanut + +/datum/orderable_item/veggies/sweetpotato + name = "Sweet Potato" + item_path = /obj/item/food/grown/potato/sweet + cost_per_order = 25 + +/datum/orderable_item/veggies/oat + name = "Oat" + item_path = /obj/item/food/grown/oat + +/datum/orderable_item/veggies/trumpet + name = "Spaceman's Trumpet" + item_path = /obj/item/food/grown/trumpet + cost_per_order = 25 + +/datum/orderable_item/veggies/banana + name = "Banana" + item_path = /obj/item/food/grown/banana + +/datum/orderable_item/veggies/ghostchili + name = "Ghost Chili" + item_path = /obj/item/food/grown/ghost_chili + cost_per_order = 25 + +/datum/orderable_item/veggies/lemon + name = "Lemon" + item_path = /obj/item/food/grown/citrus/lemon + +/datum/orderable_item/veggies/lime + name = "Lime" + item_path = /obj/item/food/grown/citrus/lime + +/datum/orderable_item/veggies/toechtauese + name = "Töchtaüse berries" + item_path = /obj/item/food/grown/toechtauese + cost_per_order = 15 diff --git a/code/game/machinery/computer/orders/order_items/mining/order_consumables.dm b/code/game/machinery/computer/orders/order_items/mining/order_consumables.dm index de2f3d82275b2..c8cfa12f9abfe 100644 --- a/code/game/machinery/computer/orders/order_items/mining/order_consumables.dm +++ b/code/game/machinery/computer/orders/order_items/mining/order_consumables.dm @@ -31,11 +31,11 @@ cost_per_order = 100 /datum/orderable_item/consumables/havana_cigars - item_path = /obj/item/clothing/mask/cigarette/cigar/havana + item_path = /obj/item/cigarette/cigar/havana cost_per_order = 150 /datum/orderable_item/consumables/havana_cigars - item_path = /obj/item/clothing/mask/cigarette/cigar/havana + item_path = /obj/item/cigarette/cigar/havana cost_per_order = 150 /datum/orderable_item/consumables/tracking_implants diff --git a/code/game/machinery/computer/orders/order_items/mining/order_toys.dm b/code/game/machinery/computer/orders/order_items/mining/order_toys.dm index 7ee4c6cfba8c8..fab03cabaa4b6 100644 --- a/code/game/machinery/computer/orders/order_items/mining/order_toys.dm +++ b/code/game/machinery/computer/orders/order_items/mining/order_toys.dm @@ -25,7 +25,7 @@ item_path = /obj/item/mine_bot_upgrade/regnerative_shield cost_per_order = 500 -/datum/orderable_item/toys_drones/drone_shield +/datum/orderable_item/toys_drones/drone_remote item_path = /obj/item/minebot_remote_control cost_per_order = 500 diff --git a/code/game/machinery/computer/prisoner/gulag_teleporter.dm b/code/game/machinery/computer/prisoner/gulag_teleporter.dm index f3dacdb8e205f..4c2f4dacde3f2 100644 --- a/code/game/machinery/computer/prisoner/gulag_teleporter.dm +++ b/code/game/machinery/computer/prisoner/gulag_teleporter.dm @@ -149,7 +149,7 @@ prisoner.Paralyze(40) // small travel dizziness to_chat(prisoner, span_warning("The teleportation makes you a little dizzy.")) new /obj/effect/particle_effect/sparks(get_turf(prisoner)) - playsound(src, SFX_SPARKS, 50, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) + playsound(src, SFX_PORTAL_ENTER, 50, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) if(teleporter.locked) teleporter.locked = FALSE teleporter.toggle_open() diff --git a/code/game/machinery/computer/records/records.dm b/code/game/machinery/computer/records/records.dm index f0b360ff1c838..e8d8beef854dd 100644 --- a/code/game/machinery/computer/records/records.dm +++ b/code/game/machinery/computer/records/records.dm @@ -100,7 +100,7 @@ if(!target) return FALSE - playsound(src, "sound/machines/terminal_button0[rand(1, 8)].ogg", 50, TRUE) + playsound(src, SFX_TERMINAL_TYPE, 50, TRUE) update_preview(user, params["assigned_view"], target) return TRUE diff --git a/code/game/machinery/computer/records/security.dm b/code/game/machinery/computer/records/security.dm index 0797b4d1890a1..dac62612a4c74 100644 --- a/code/game/machinery/computer/records/security.dm +++ b/code/game/machinery/computer/records/security.dm @@ -49,10 +49,8 @@ if(prob(10/severity)) switch(rand(1,5)) if(1) - if(prob(10)) - target.name = "[pick(lizard_name(MALE),lizard_name(FEMALE))]" - else - target.name = "[pick(pick(GLOB.first_names_male), pick(GLOB.first_names_female))] [pick(GLOB.last_names)]" + target.name = generate_random_name() + if(2) target.gender = pick("Male", "Female", "Other") if(3) @@ -178,7 +176,7 @@ return TRUE if("set_note") - var/note = trim(params["note"], MAX_MESSAGE_LEN) + var/note = strip_html_full(params["note"], MAX_MESSAGE_LEN) investigate_log("[user] has changed the security note of record: \"[target]\" from \"[target.security_note]\" to \"[note]\".") target.security_note = note return TRUE @@ -201,7 +199,7 @@ /// Handles adding a crime to a particular record. /obj/machinery/computer/records/security/proc/add_crime(mob/user, datum/record/crew/target, list/params) - var/input_name = trim(params["name"], MAX_CRIME_NAME_LEN) + var/input_name = strip_html_full(params["name"], MAX_CRIME_NAME_LEN) if(!input_name) to_chat(usr, span_warning("You must enter a name for the crime.")) playsound(src, 'sound/machines/terminal_error.ogg', 75, TRUE) @@ -215,7 +213,7 @@ var/input_details if(params["details"]) - input_details = trim(params["details"], MAX_MESSAGE_LEN) + input_details = strip_html_full(params["details"], MAX_MESSAGE_LEN) if(params["fine"] == 0) var/datum/crime/new_crime = new(name = input_name, details = input_details, author = usr) @@ -247,13 +245,13 @@ return FALSE if(params["name"] && length(params["name"]) > 2 && params["name"] != editing_crime.name) - var/new_name = trim(params["name"], MAX_CRIME_NAME_LEN) + var/new_name = strip_html_full(params["name"], MAX_CRIME_NAME_LEN) investigate_log("[user] edited crime: \"[editing_crime.name]\" for target: \"[target.name]\", changing the name to: \"[new_name]\".", INVESTIGATE_RECORDS) editing_crime.name = new_name return TRUE if(params["details"] && length(params["description"]) > 2 && params["name"] != editing_crime.name) - var/new_details = trim(params["details"], MAX_MESSAGE_LEN) + var/new_details = strip_html_full(params["details"], MAX_MESSAGE_LEN) investigate_log("[user] edited crime \"[editing_crime.name]\" for target: \"[target.name]\", changing the details to: \"[new_details]\" from: \"[editing_crime.details]\".", INVESTIGATE_RECORDS) editing_crime.details = new_details return TRUE @@ -329,9 +327,9 @@ playsound(src, 'sound/machines/printer.ogg', 100, TRUE) var/obj/item/printable - var/input_alias = trim(params["alias"], MAX_NAME_LEN) || target.name - var/input_description = trim(params["desc"], MAX_BROADCAST_LEN) || "No further details." - var/input_header = trim(params["head"], 8) || capitalize(params["type"]) + var/input_alias = strip_html_full(params["alias"], MAX_NAME_LEN) || target.name + var/input_description = strip_html_full(params["desc"], MAX_BROADCAST_LEN) || "No further details." + var/input_header = strip_html_full(params["head"], 8) || capitalize(params["type"]) switch(params["type"]) if("missing") diff --git a/code/game/machinery/computer/teleporter.dm b/code/game/machinery/computer/teleporter.dm index 5baf549785330..d00c5824d8bd3 100644 --- a/code/game/machinery/computer/teleporter.dm +++ b/code/game/machinery/computer/teleporter.dm @@ -1,3 +1,6 @@ +#define REGIME_TELEPORTER "Teleporter" +#define REGIME_GATE "Gate" + /obj/machinery/computer/teleporter name = "teleporter control console" desc = "Used to control a linked teleportation Hub and Station." @@ -5,10 +8,13 @@ icon_keyboard = "teleport_key" light_color = LIGHT_COLOR_BLUE circuit = /obj/item/circuitboard/computer/teleporter - - var/regime_set = "Teleporter" + /// Currently can be "Teleporter" or "Gate" + var/regime_set = REGIME_TELEPORTER + /// The ID of this teleporter, used for linking to power stations var/id + /// The power station this teleporter is linked to var/obj/machinery/teleport/station/power_station + /// Whether the teleporter is currently calibrating var/calibrating ///Weakref to the target atom we're pointed at currently var/datum/weakref/target_ref @@ -63,7 +69,7 @@ data["power_station"] = power_station ? TRUE : FALSE data["teleporter_hub"] = power_station?.teleporter_hub ? TRUE : FALSE data["regime_set"] = regime_set - data["target"] = !target ? "None" : "[get_area(target)] [(regime_set != "Gate") ? "" : "Teleporter"]" + data["target"] = !target ? "None" : "[get_area(target)] [(regime_set != REGIME_GATE) ? "" : REGIME_TELEPORTER]" data["calibrating"] = calibrating if(power_station?.teleporter_hub?.calibrated || power_station?.teleporter_hub?.accuracy >= 3) @@ -145,10 +151,10 @@ /obj/machinery/computer/teleporter/proc/reset_regime() set_teleport_target(null) - if(regime_set == "Teleporter") - regime_set = "Gate" + if(regime_set == REGIME_TELEPORTER) + regime_set = REGIME_GATE else - regime_set = "Teleporter" + regime_set = REGIME_TELEPORTER /// Gets a list of targets to teleport to. /// List is an assoc list of descriptors to locations. @@ -156,7 +162,7 @@ var/list/targets = list() var/list/area_index = list() - if (regime_set == "Teleporter") + if (regime_set == REGIME_TELEPORTER) for (var/obj/item/beacon/beacon as anything in GLOB.teleportbeacons) if (!is_eligible(beacon)) continue @@ -199,9 +205,9 @@ /obj/machinery/computer/teleporter/proc/set_target(mob/user) var/list/targets = get_targets() - if (regime_set == "Teleporter") + if (regime_set == REGIME_TELEPORTER) var/desc = tgui_input_list(usr, "Select a location to lock in", "Locking Computer", sort_list(targets)) - if(isnull(desc) || !user.can_perform_action(src)) + if(isnull(desc) || !user.can_perform_action(src, ALLOW_SILICON_REACH)) return set_teleport_target(targets[desc]) user.log_message("set the teleporter target to [targets[desc]].]", LOG_GAME) @@ -211,7 +217,7 @@ return var/desc = tgui_input_list(usr, "Select a station to lock in", "Locking Computer", sort_list(targets)) - if(isnull(desc)|| !user.can_perform_action(src)) + if(isnull(desc)|| !user.can_perform_action(src, ALLOW_SILICON_REACH)) return var/obj/machinery/teleport/station/target_station = targets[desc] if(!target_station || !target_station.teleporter_hub) @@ -232,6 +238,10 @@ return FALSE return TRUE + +#undef REGIME_TELEPORTER +#undef REGIME_GATE + /obj/item/circuit_component/teleporter_control_console display_name = "Teleporter Control Console" desc = "Used to control a linked teleportation Hub and Station." diff --git a/code/game/machinery/computer/telescreen.dm b/code/game/machinery/computer/telescreen.dm index 2c17e1e088a6b..c421ca0c90308 100644 --- a/code/game/machinery/computer/telescreen.dm +++ b/code/game/machinery/computer/telescreen.dm @@ -148,6 +148,8 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/computer/security/telescreen/entertai ) frame_type = /obj/item/wallframe/telescreen/rd +MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/computer/security/telescreen/rd, 32) + /obj/item/wallframe/telescreen/rd name = "\improper Research Director's telescreen frame" result_path = /obj/machinery/computer/security/telescreen/rd @@ -162,6 +164,8 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/computer/security/telescreen/entertai name = "research telescreen frame" result_path = /obj/machinery/computer/security/telescreen/research +MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/computer/security/telescreen/research, 32) + /obj/machinery/computer/security/telescreen/ce name = "\improper Chief Engineer's telescreen" desc = "Used for watching the engine, telecommunications and the minisat." @@ -172,6 +176,8 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/computer/security/telescreen/entertai name = "\improper Chief Engineer's telescreen frame" result_path = /obj/machinery/computer/security/telescreen/ce +MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/computer/security/telescreen/ce, 32) + /obj/machinery/computer/security/telescreen/cmo name = "\improper Chief Medical Officer's telescreen" desc = "A telescreen with access to the medbay's camera network." @@ -182,6 +188,8 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/computer/security/telescreen/entertai name = "\improper Chief Engineer'stelescreen frame" result_path = /obj/machinery/computer/security/telescreen/cmo +MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/computer/security/telescreen/cmo, 32) + /obj/machinery/computer/security/telescreen/vault name = "vault monitor" desc = "A telescreen that connects to the vault's camera network." @@ -192,6 +200,8 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/computer/security/telescreen/entertai name = "vault telescreen frame" result_path = /obj/machinery/computer/security/telescreen/vault +MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/computer/security/telescreen/vault, 32) + /obj/machinery/computer/security/telescreen/ordnance name = "bomb test site monitor" desc = "A telescreen that connects to the bomb test site's camera." @@ -202,6 +212,8 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/computer/security/telescreen/entertai name = "bomb test site telescreen frame" result_path = /obj/machinery/computer/security/telescreen/ordnance +MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/computer/security/telescreen/ordnance, 32) + /obj/machinery/computer/security/telescreen/engine name = "engine monitor" desc = "A telescreen that connects to the engine's camera network." @@ -212,6 +224,8 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/computer/security/telescreen/entertai name = "engine telescreen frame" result_path = /obj/machinery/computer/security/telescreen/engine +MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/computer/security/telescreen/engine, 32) + /obj/machinery/computer/security/telescreen/turbine name = "turbine monitor" desc = "A telescreen that connects to the turbine's camera." @@ -222,6 +236,8 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/computer/security/telescreen/entertai name = "turbine telescreen frame" result_path = /obj/machinery/computer/security/telescreen/turbine +MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/computer/security/telescreen/turbine, 32) + /obj/machinery/computer/security/telescreen/interrogation name = "interrogation room monitor" desc = "A telescreen that connects to the interrogation room's camera." @@ -232,6 +248,8 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/computer/security/telescreen/entertai name = "interrogation telescreen frame" result_path = /obj/machinery/computer/security/telescreen/interrogation +MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/computer/security/telescreen/interrogation, 32) + /obj/machinery/computer/security/telescreen/prison name = "prison monitor" desc = "A telescreen that connects to the permabrig's camera network." @@ -242,6 +260,8 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/computer/security/telescreen/entertai name = "prison telescreen frame" result_path = /obj/machinery/computer/security/telescreen/prison +MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/computer/security/telescreen/prison, 32) + /obj/machinery/computer/security/telescreen/auxbase name = "auxiliary base monitor" desc = "A telescreen that connects to the auxiliary base's camera." @@ -252,6 +272,8 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/computer/security/telescreen/entertai name = "auxiliary base telescreen frame" result_path = /obj/machinery/computer/security/telescreen/auxbase +MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/computer/security/telescreen/auxbase, 32) + /obj/machinery/computer/security/telescreen/minisat name = "minisat monitor" desc = "A telescreen that connects to the minisat's camera network." @@ -262,6 +284,8 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/computer/security/telescreen/entertai name = "minisat telescreen frame" result_path = /obj/machinery/computer/security/telescreen/minisat +MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/computer/security/telescreen/minisat, 32) + /obj/machinery/computer/security/telescreen/aiupload name = "\improper AI upload monitor" desc = "A telescreen that connects to the AI upload's camera network." @@ -272,6 +296,8 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/computer/security/telescreen/entertai name = "\improper AI upload telescreen frame" result_path = /obj/machinery/computer/security/telescreen/aiupload +MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/computer/security/telescreen/aiupload, 32) + /obj/machinery/computer/security/telescreen/bar name = "bar monitor" desc = "A telescreen that connects to the bar's camera network. Perfect for checking on customers." @@ -282,6 +308,129 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/computer/security/telescreen/entertai name = "bar telescreen frame" result_path = /obj/machinery/computer/security/telescreen/bar +MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/computer/security/telescreen/bar, 32) + +/obj/machinery/computer/security/telescreen/isolation + name = "isolation cell monitor" + desc = "A telescreen that connects to the isolation cells camera network." + network = list(CAMERANET_NETWORK_ISOLATION) + frame_type = /obj/item/wallframe/telescreen/bar + +/obj/item/wallframe/telescreen/isolation + name = "isolation telescreen frame" + result_path = /obj/machinery/computer/security/telescreen/isolation + +MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/computer/security/telescreen/isolation, 32) + +/obj/machinery/computer/security/telescreen/normal + name = "security camera monitor" + desc = "A telescreen that connects to the stations camera network." + network = list(CAMERANET_NETWORK_SS13) + frame_type = /obj/item/wallframe/telescreen/normal + +/obj/item/wallframe/telescreen/normal + name = "security camera telescreen frame" + result_path = /obj/machinery/computer/security/telescreen/normal + +MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/computer/security/telescreen/normal, 32) + +/obj/machinery/computer/security/telescreen/tcomms + name = "tcomms camera monitor" + desc = "A telescreen that connects to the tcomms camera network." + network = list(CAMERANET_NETWORK_TELECOMMS) + frame_type = /obj/item/wallframe/telescreen/tcomms + +/obj/item/wallframe/telescreen/tcomms + name = "tcomms camera telescreen frame" + result_path = /obj/machinery/computer/security/telescreen/tcomms + +MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/computer/security/telescreen/tcomms, 32) + +/obj/machinery/computer/security/telescreen/test_chamber + name = "xenobiology test chamber camera monitor" + desc = "A telescreen that connects to the xenobiology test chamber camera network." + network = list(CAMERANET_NETWORK_XENOBIOLOGY) + frame_type = /obj/item/wallframe/telescreen/test_chamber + +/obj/item/wallframe/telescreen/test_chamber + name = "xenobiology test chamber camera telescreen frame" + result_path = /obj/machinery/computer/security/telescreen/test_chamber + +MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/computer/security/telescreen/test_chamber, 32) + +/obj/machinery/computer/security/telescreen/engine_waste + name = "\improper Engine Waste Monitor" + desc = "A telescreen that connects to the engine waste camera network." + network = list(CAMERANET_NETWORK_WASTE) + frame_type = /obj/item/wallframe/telescreen/engine_waste + +/obj/item/wallframe/telescreen/engine_waste + name = "\improper Engine Waste telescreen frame" + result_path = /obj/machinery/computer/security/telescreen/engine_waste + +MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/computer/security/telescreen/engine_waste, 32) + +/obj/machinery/computer/security/telescreen/cargo_sec + name = "cargo camera monitor" + desc = "A telescreen that connects to the cargo and main station camera network." + network = list(CAMERANET_NETWORK_SS13, + CAMERA_NETWORK_CARGO, + ) + frame_type = /obj/item/wallframe/telescreen/cargo_sec + +/obj/item/wallframe/telescreen/cargo_sec + name = "cargo telescreen frame" + result_path = /obj/machinery/computer/security/telescreen/cargo_sec + +MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/computer/security/telescreen/cargo_sec, 32) + +// This is used in moonoutpost19.dmm +/obj/machinery/computer/security/telescreen/moon_outpost + +/obj/machinery/computer/security/telescreen/moon_outpost/research + name = "research monitor" + desc = "Used for monitoring the research division and the labs within." + network = list(CAMERANET_NETWORK_MOON19_RESEARCH, + CAMERANET_NETWORK_MOON19_XENO, + ) + +MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/computer/security/telescreen/moon_outpost/research, 32) + +/obj/machinery/computer/security/telescreen/moon_outpost/xenobio + name = "xenobiology monitor" + desc = "Used for watching the contents of the xenobiology containment pen." + network = list(CAMERANET_NETWORK_MOON19_XENO) + +MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/computer/security/telescreen/moon_outpost/xenobio, 32) + +// This is used in undergroundoutpost45.dmm +/obj/machinery/computer/security/telescreen/underground_outpost + +/obj/machinery/computer/security/telescreen/underground_outpost/research + name = "research monitor" + desc = "Used for monitoring the research division and the labs within." + network = list(CAMERANET_NETWORK_UGO45_RESEARCH) + +MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/computer/security/telescreen/underground_outpost/research, 32) + +// This is used in forgottenship.dmm +/obj/machinery/computer/security/telescreen/forgotten_ship + +/obj/machinery/computer/security/telescreen/forgotten_ship/sci + name = "Cameras monitor" + network = list(CAMERANET_NETWORK_FSCI) + req_access = list("syndicate") + +MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/computer/security/telescreen/forgotten_ship/sci, 32) + +// This is used in deepstorage.dmm +/obj/machinery/computer/security/telescreen/deep_storage + +/obj/machinery/computer/security/telescreen/deep_storage/bunker + name = "Bunker Entrance monitor" + network = list(CAMERA_NETWORK_BUNKER) + +MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/computer/security/telescreen/deep_storage/bunker, 32) /// A button that adds a camera network to the entertainment monitors /obj/machinery/button/showtime diff --git a/code/game/machinery/defibrillator_mount.dm b/code/game/machinery/defibrillator_mount.dm index 207a3f753ef65..47729c5c0cbac 100644 --- a/code/game/machinery/defibrillator_mount.dm +++ b/code/game/machinery/defibrillator_mount.dm @@ -51,25 +51,23 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/defibrillator_mount, 28) /obj/machinery/defibrillator_mount/update_overlays() . = ..() - - if(!defib) + if(isnull(defib)) return - . += "defib" + var/mutable_appearance/defib_overlay = mutable_appearance(icon, "defib", layer = layer+0.01, offset_spokesman = src) if(defib.powered) - var/obj/item/stock_parts/cell/C = get_cell() - . += (defib.safety ? "online" : "emagged") - var/ratio = C.charge / C.maxcharge - ratio = CEILING(ratio * 4, 1) * 25 - . += "charge[ratio]" + var/obj/item/stock_parts/power_store/cell = defib.cell + var/mutable_appearance/safety = mutable_appearance(icon, defib.safety ? "online" : "emagged", offset_spokesman = src) + var/mutable_appearance/charge_overlay = mutable_appearance(icon, "charge[CEILING((cell.charge / cell.maxcharge) * 4, 1) * 25]", offset_spokesman = src) + + defib_overlay.overlays += list(safety, charge_overlay) if(clamps_locked) - . += "clamps" + var/mutable_appearance/clamps = mutable_appearance(icon, "clamps", offset_spokesman = src) + defib_overlay.overlays += clamps -/obj/machinery/defibrillator_mount/get_cell() - if(defib) - return defib.get_cell() + . += defib_overlay //defib interaction /obj/machinery/defibrillator_mount/attack_hand(mob/living/user, list/modifiers) @@ -196,7 +194,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/defibrillator_mount, 28) /obj/machinery/defibrillator_mount/charging/process(seconds_per_tick) - var/obj/item/stock_parts/cell/cell = get_cell() + var/obj/item/stock_parts/power_store/cell = get_cell() if(!cell || !is_operational) return PROCESS_KILL if(cell.charge < cell.maxcharge) @@ -220,3 +218,37 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/defibrillator_mount, 28) icon_state = "penlite_mount" custom_materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 3, /datum/material/glass = SMALL_MATERIAL_AMOUNT, /datum/material/silver = SMALL_MATERIAL_AMOUNT * 0.5) result_path = /obj/machinery/defibrillator_mount/charging + +//mobile defib + +/obj/machinery/defibrillator_mount/mobile + name = "mobile defibrillator mount" + icon_state = "mobile" + anchored = FALSE + density = TRUE + +/obj/machinery/defibrillator_mount/mobile/Initialize(mapload) + . = ..() + AddElement(/datum/element/noisy_movement) + +/obj/machinery/defibrillator_mount/mobile/wrench_act_secondary(mob/living/user, obj/item/tool) + if(user.combat_mode) + return ..() + if(defib) + to_chat(user, span_warning("The mount can't be deconstructed while a defibrillator unit is loaded!")) + ..() + return TRUE + balloon_alert(user, "deconstructing...") + tool.play_tool_sound(src) + if(tool.use_tool(src, user, 5 SECONDS)) + playsound(loc, 'sound/items/deconstruct.ogg', 50, vary = TRUE) + deconstruct() + return TRUE + +/obj/machinery/defibrillator_mount/mobile/on_deconstruction(disassembled) + if(disassembled) + new /obj/item/stack/sheet/iron(drop_location(), 5) + new /obj/item/stack/sheet/mineral/silver(drop_location(), 1) + new /obj/item/stack/cable_coil(drop_location(), 15) + else + new /obj/item/stack/sheet/iron(drop_location(), 5) diff --git a/code/game/machinery/dna_infuser/dna_infuser.dm b/code/game/machinery/dna_infuser/dna_infuser.dm index 6c239089f5d60..cc2641d32971e 100644 --- a/code/game/machinery/dna_infuser/dna_infuser.dm +++ b/code/game/machinery/dna_infuser/dna_infuser.dm @@ -11,7 +11,9 @@ base_icon_state = "infuser" density = TRUE obj_flags = BLOCKS_CONSTRUCTION // Becomes undense when the door is open + interaction_flags_mouse_drop = NEED_HANDS | NEED_DEXTERITY circuit = /obj/item/circuitboard/machine/dna_infuser + /// maximum tier this will infuse var/max_tier_allowed = DNA_MUTANT_TIER_ONE ///currently infusing a vict- subject @@ -64,8 +66,7 @@ balloon_alert(user, "not while it's on!") return if(occupant && infusing_from) - // Abort infusion if the occupant is invalid. - if(!is_valid_occupant(occupant, user)) + if(!occupant.can_infuse(user)) playsound(src, 'sound/machines/scanbuzz.ogg', 35, vary = TRUE) return balloon_alert(user, "starting DNA infusion...") @@ -77,92 +78,45 @@ var/mob/living/carbon/human/human_occupant = occupant infusing = TRUE visible_message(span_notice("[src] hums to life, beginning the infusion process!")) + + infusing_into = infusing_from.get_infusion_entry() var/fail_title = "" - var/fail_reason = "" - // Replace infusing_into with a [/datum/infuser_entry] - for(var/datum/infuser_entry/entry as anything in GLOB.infuser_entries) - if(entry.tier == DNA_MUTANT_UNOBTAINABLE) - continue - if(is_type_in_list(infusing_from, entry.input_obj_or_mob)) - if(entry.tier > max_tier_allowed) - fail_title = "Overcomplexity" - fail_reason = "DNA too complicated to infuse. The machine needs to infuse simpler DNA first." - infusing_into = entry - break - if(!infusing_into) - //no valid recipe, so you get a fly mutation - if(!fail_reason) - fail_title = "Unknown DNA" - fail_reason = "Unknown DNA. Consult the \"DNA infusion book\"." - infusing_into = GLOB.infuser_entries[1] + var/fail_explanation = "" + if(istype(infusing_into, /datum/infuser_entry/fly)) + fail_title = "Unknown DNA" + fail_explanation = "Unknown DNA. Consult the \"DNA infusion book\"." + if(infusing_into.tier > max_tier_allowed) + infusing_into = GLOB.infuser_entries[/datum/infuser_entry/fly] + fail_title = "Overcomplexity" + fail_explanation = "DNA too complicated to infuse. The machine needs to infuse simpler DNA first." playsound(src, 'sound/machines/blender.ogg', 50, vary = TRUE) to_chat(human_occupant, span_danger("Little needles repeatedly prick you!")) human_occupant.take_overall_damage(10) human_occupant.add_mob_memory(/datum/memory/dna_infusion, protagonist = human_occupant, deuteragonist = infusing_from, mutantlike = infusing_into.infusion_desc) Shake(duration = INFUSING_TIME) addtimer(CALLBACK(human_occupant, TYPE_PROC_REF(/mob, emote), "scream"), INFUSING_TIME - 1 SECONDS) - addtimer(CALLBACK(src, PROC_REF(end_infuse), fail_reason, fail_title), INFUSING_TIME) + addtimer(CALLBACK(src, PROC_REF(end_infuse), fail_explanation, fail_title), INFUSING_TIME) update_appearance() -/obj/machinery/dna_infuser/proc/end_infuse(fail_reason, fail_title) - if(infuse_organ(occupant)) +/obj/machinery/dna_infuser/proc/end_infuse(fail_explanation, fail_title) + var/mob/living/carbon/human/human_occupant = occupant + if(human_occupant.infuse_organ(infusing_into)) + check_tier_progression(human_occupant) to_chat(occupant, span_danger("You feel yourself becoming more... [infusing_into.infusion_desc]?")) infusing = FALSE infusing_into = null QDEL_NULL(infusing_from) playsound(src, 'sound/machines/microwave/microwave-end.ogg', 100, vary = FALSE) - if(fail_reason) + if(fail_explanation) playsound(src, 'sound/machines/printer.ogg', 100, TRUE) visible_message(span_notice("[src] prints an error report.")) var/obj/item/paper/printed_paper = new /obj/item/paper(loc) printed_paper.name = "error report - '[fail_title]'" - printed_paper.add_raw_text(fail_reason) + printed_paper.add_raw_text(fail_explanation) printed_paper.update_appearance() toggle_open() update_appearance() -/// Attempt to replace/add-to the occupant's organs with "mutated" equivalents. -/// Returns TRUE on success, FALSE on failure. -/// Requires the target mob to have an existing organic organ to "mutate". -// TODO: In the future, this should have more logic: -// - Replace non-mutant organs before mutant ones. -/obj/machinery/dna_infuser/proc/infuse_organ(mob/living/carbon/human/target) - if(!ishuman(target)) - return FALSE - var/obj/item/organ/new_organ = pick_organ(target) - if(!new_organ) - return FALSE - // Valid organ successfully picked. - new_organ = new new_organ() - new_organ.replace_into(target) - check_tier_progression(target) - return TRUE - -/// Picks a random mutated organ from the infuser entry which is also compatible with the target mob. -/// Tries to return a typepath of a valid mutant organ if all of the following criteria are true: -/// 1. Target must have a pre-existing organ in the same organ slot as the new organ; -/// - or the new organ must be external. -/// 2. Target's pre-existing organ must be organic / not robotic. -/// 3. Target must not have the same/identical organ. -/obj/machinery/dna_infuser/proc/pick_organ(mob/living/carbon/human/target) - if(!infusing_into) - return FALSE - var/list/obj/item/organ/potential_new_organs = infusing_into.output_organs.Copy() - // Remove organ typepaths from the list if they're incompatible with target. - for(var/obj/item/organ/new_organ as anything in infusing_into.output_organs) - var/obj/item/organ/old_organ = target.get_organ_slot(initial(new_organ.slot)) - if(old_organ) - if((old_organ.type != new_organ) && !IS_ROBOTIC_ORGAN(old_organ)) - continue // Old organ can be mutated! - else if(ispath(new_organ, /obj/item/organ/external)) - continue // External organ can be grown! - // Internal organ is either missing, or is non-organic. - potential_new_organs -= new_organ - // Pick a random organ from the filtered list. - if(length(potential_new_organs)) - return pick(potential_new_organs) - return FALSE - /// checks to see if the machine should progress a new tier. /obj/machinery/dna_infuser/proc/check_tier_progression(mob/living/carbon/human/target) if( @@ -171,7 +125,7 @@ && target.has_status_effect(infusing_into.status_effect_type) \ ) max_tier_allowed++ - playsound(src.loc, 'sound/machines/ding.ogg', 50, TRUE) + playsound(src, 'sound/machines/ding.ogg', 50, TRUE) visible_message(span_notice("[src] dings as it records the results of the full infusion.")) /obj/machinery/dna_infuser/update_icon_state() @@ -247,30 +201,15 @@ infusing_from = target // mostly good for dead mobs like corpses (drag to add). -/obj/machinery/dna_infuser/MouseDrop_T(atom/movable/target, mob/user) +/obj/machinery/dna_infuser/mouse_drop_receive(atom/target, mob/user, params) // if the machine is closed, already has a infusion target, or the target is not valid then no mouse drop. if(!is_valid_infusion(target, user)) return infusing_from = target infusing_from.forceMove(src) -/// Verify that the occupant/target is organic, and has mutable DNA. -/obj/machinery/dna_infuser/proc/is_valid_occupant(mob/living/carbon/human/human_target, mob/user) - // Invalid: DNA is too damaged to mutate anymore / has TRAIT_BADDNA. - if(HAS_TRAIT(human_target, TRAIT_BADDNA)) - balloon_alert(user, "dna is corrupted!") - return FALSE - // Invalid: Occupant isn't Human, isn't organic, lacks DNA / has TRAIT_GENELESS. - if(!ishuman(human_target) || !human_target.can_mutate()) - balloon_alert(user, "dna is missing!") - return FALSE - // Valid: Occupant is an organic Human who has undamaged and mutable DNA. - return TRUE - /// Verify that the given infusion source/mob is a dead creature. /obj/machinery/dna_infuser/proc/is_valid_infusion(atom/movable/target, mob/user) - if(user.stat != CONSCIOUS || HAS_TRAIT(user, TRAIT_UI_BLOCKED) || !Adjacent(user) || !user.Adjacent(target) || !ISADVANCEDTOOLUSER(user)) - return FALSE var/datum/component/edible/food_comp = IS_EDIBLE(target) if(infusing_from) balloon_alert(user, "empty the machine first!") @@ -291,10 +230,10 @@ /obj/machinery/dna_infuser/click_alt(mob/user) if(infusing) balloon_alert(user, "not while it's on!") - return CLICK_ACTION_BLOCKING + return if(!infusing_from) balloon_alert(user, "no sample to eject!") - return CLICK_ACTION_BLOCKING + return balloon_alert(user, "ejected sample") infusing_from.forceMove(get_turf(src)) infusing_from = null diff --git a/code/game/machinery/dna_infuser/dna_infusion.dm b/code/game/machinery/dna_infuser/dna_infusion.dm new file mode 100644 index 0000000000000..c902240404ca7 --- /dev/null +++ b/code/game/machinery/dna_infuser/dna_infusion.dm @@ -0,0 +1,75 @@ + +///returns a boolean whether a machine occupant can be infused +/atom/movable/proc/can_infuse(mob/feedback_target) + if(feedback_target) + balloon_alert(feedback_target, "no dna!") + return FALSE + +/mob/living/can_infuse(mob/feedback_target) + if(feedback_target) + balloon_alert(feedback_target, "dna too simple!") + return FALSE + +/mob/living/carbon/human/can_infuse(mob/feedback_target) + // Checked by can_mutate but explicit feedback for this issue is good + if(HAS_TRAIT(src, TRAIT_BADDNA)) + if(feedback_target) + balloon_alert(feedback_target, "dna is corrupted!") + return FALSE + if(!can_mutate()) + if(feedback_target) + balloon_alert(feedback_target, "dna is missing!") + return FALSE + return TRUE + +///returns /datum/infuser_entry that matches an item being used for infusion, returns a fly mutation on failure +/atom/movable/proc/get_infusion_entry() as /datum/infuser_entry + var/datum/infuser_entry/found + for(var/datum/infuser_entry/entry as anything in flatten_list(GLOB.infuser_entries)) + if(entry.tier == DNA_MUTANT_UNOBTAINABLE) + continue + if(is_type_in_list(src, entry.input_obj_or_mob)) + found = entry + break + if(!found) + found = GLOB.infuser_entries[/datum/infuser_entry/fly] + return found + +/// Attempt to replace/add-to the occupant's organs with "mutated" equivalents. +/// Returns TRUE on success, FALSE on failure. +/// Requires the target mob to have an existing organic organ to "mutate". +// TODO: In the future, this should have more logic: +// - Replace non-mutant organs before mutant ones. +/mob/living/carbon/human/proc/infuse_organ(datum/infuser_entry/entry) + var/obj/item/organ/new_organ = pick_infusion_organ(entry) + if(!new_organ) + return FALSE + // Valid organ successfully picked. + new_organ = new new_organ() + new_organ.replace_into(src) + return TRUE + +/// Picks a random mutated organ from the given infuser entry which is also compatible with this human. +/// Tries to return a typepath of a valid mutant organ if all of the following criteria are true: +/// 1. Target must have a pre-existing organ in the same organ slot as the new organ; +/// - or the new organ must be external. +/// 2. Target's pre-existing organ must be organic / not robotic. +/// 3. Target must not have the same/identical organ. +/mob/living/carbon/human/proc/pick_infusion_organ(datum/infuser_entry/entry) + if(!entry) + return FALSE + var/list/obj/item/organ/potential_new_organs = entry.output_organs.Copy() + // Remove organ typepaths from the list if they're incompatible with target. + for(var/obj/item/organ/new_organ as anything in entry.output_organs) + var/obj/item/organ/old_organ = get_organ_slot(initial(new_organ.slot)) + if(old_organ) + if((old_organ.type != new_organ) && !IS_ROBOTIC_ORGAN(old_organ)) + continue // Old organ can be mutated! + else if(ispath(new_organ, /obj/item/organ/external)) + continue // External organ can be grown! + // Internal organ is either missing, or is non-organic. + potential_new_organs -= new_organ + // Pick a random organ from the filtered list. + if(length(potential_new_organs)) + return pick(potential_new_organs) + return FALSE diff --git a/code/game/machinery/dna_infuser/infuser_book.dm b/code/game/machinery/dna_infuser/infuser_book.dm index 75632178ccae3..416ed038d640a 100644 --- a/code/game/machinery/dna_infuser/infuser_book.dm +++ b/code/game/machinery/dna_infuser/infuser_book.dm @@ -29,7 +29,7 @@ var/list/data = list() // Collect all info from each intry. var/list/entry_data = list() - for(var/datum/infuser_entry/entry as anything in GLOB.infuser_entries) + for(var/datum/infuser_entry/entry as anything in flatten_list(GLOB.infuser_entries)) if(entry.tier == DNA_MUTANT_UNOBTAINABLE) continue var/list/individual_entry_data = list() diff --git a/code/game/machinery/dna_infuser/infuser_entry.dm b/code/game/machinery/dna_infuser/infuser_entry.dm index dfcdfbbe08a5d..8b0bcfb3f790d 100644 --- a/code/game/machinery/dna_infuser/infuser_entry.dm +++ b/code/game/machinery/dna_infuser/infuser_entry.dm @@ -4,17 +4,10 @@ GLOBAL_LIST_INIT(infuser_entries, prepare_infuser_entries()) /// Global proc that sets up each [/datum/infuser_entry] sub-type as singleton instances in a list, and returns it. /proc/prepare_infuser_entries() var/list/entries = list() - // Regardless of names, we want the fly/failed mutant case to show first. - var/prepended for(var/datum/infuser_entry/entry_type as anything in subtypesof(/datum/infuser_entry)) var/datum/infuser_entry/entry = new entry_type() - if(entry.type == /datum/infuser_entry/fly) - prepended = entry - continue - entries += entry - var/list/sorted = sort_names(entries) - sorted.Insert(1, prepended) - return sorted + entries[entry_type] = entry + return entries /datum/infuser_entry //-- Vars for DNA Infusion Book --// diff --git a/code/game/machinery/dna_infuser/organ_sets/carp_organs.dm b/code/game/machinery/dna_infuser/organ_sets/carp_organs.dm index afbb8404060f2..0c181ad043e77 100644 --- a/code/game/machinery/dna_infuser/organ_sets/carp_organs.dm +++ b/code/game/machinery/dna_infuser/organ_sets/carp_organs.dm @@ -27,7 +27,7 @@ /obj/item/organ/internal/lungs/carp/Initialize(mapload) . = ..() - AddElement(/datum/element/noticable_organ, "neck has odd gills.", BODY_ZONE_HEAD) + AddElement(/datum/element/noticable_organ, "%PRONOUN_Their neck has odd gills.", BODY_ZONE_HEAD) AddElement(/datum/element/organ_set_bonus, /datum/status_effect/organ_set_bonus/carp) ADD_TRAIT(src, TRAIT_SPACEBREATHING, REF(src)) @@ -45,7 +45,7 @@ /obj/item/organ/internal/tongue/carp/Initialize(mapload) . = ..() - AddElement(/datum/element/noticable_organ, "teeth are big and sharp.", BODY_ZONE_PRECISE_MOUTH) + AddElement(/datum/element/noticable_organ, "%PRONOUN_Their teeth are big and sharp.", BODY_ZONE_PRECISE_MOUTH) AddElement(/datum/element/organ_set_bonus, /datum/status_effect/organ_set_bonus/carp) /obj/item/organ/internal/tongue/carp/on_mob_insert(mob/living/carbon/tongue_owner, special, movement_flags) @@ -113,7 +113,7 @@ /obj/item/organ/internal/brain/carp/Initialize(mapload) . = ..() AddElement(/datum/element/organ_set_bonus, /datum/status_effect/organ_set_bonus/carp) - AddElement(/datum/element/noticable_organ, "seem%PRONOUN_S unable to stay still.") + AddElement(/datum/element/noticable_organ, "%PRONOUN_They seem%PRONOUN_s unable to stay still.") /obj/item/organ/internal/brain/carp/on_mob_insert(mob/living/carbon/brain_owner) . = ..() @@ -151,8 +151,9 @@ /obj/item/organ/internal/heart/carp/Initialize(mapload) . = ..() - AddElement(/datum/element/noticable_organ, "skin has small patches of scales growing on it.", BODY_ZONE_CHEST) + AddElement(/datum/element/noticable_organ, "%PRONOUN_Their skin has small patches of scales growing on it.", BODY_ZONE_CHEST) AddElement(/datum/element/organ_set_bonus, /datum/status_effect/organ_set_bonus/carp) + AddElement(/datum/element/update_icon_blocker) #undef CARP_ORGAN_COLOR #undef CARP_SCLERA_COLOR diff --git a/code/game/machinery/dna_infuser/organ_sets/goliath_organs.dm b/code/game/machinery/dna_infuser/organ_sets/goliath_organs.dm index f9ccf16812bc7..ac3dae39b7019 100644 --- a/code/game/machinery/dna_infuser/organ_sets/goliath_organs.dm +++ b/code/game/machinery/dna_infuser/organ_sets/goliath_organs.dm @@ -31,7 +31,7 @@ /obj/item/organ/internal/eyes/night_vision/goliath/Initialize(mapload) . = ..() - AddElement(/datum/element/noticable_organ, "eyes are blood red and stone-like.", BODY_ZONE_PRECISE_EYES) + AddElement(/datum/element/noticable_organ, "%PRONOUN_Their eyes are blood red and stone-like.", BODY_ZONE_PRECISE_EYES) AddElement(/datum/element/organ_set_bonus, /datum/status_effect/organ_set_bonus/goliath) ///goliath lungs! You can breathe lavaland air mix but can't breath pure O2 from a tank anymore. @@ -46,7 +46,7 @@ /obj/item/organ/internal/lungs/lavaland/goliath/Initialize(mapload) . = ..() - AddElement(/datum/element/noticable_organ, "back is covered in small tendrils.", BODY_ZONE_CHEST) + AddElement(/datum/element/noticable_organ, "%PRONOUN_Their back is covered in small tendrils.", BODY_ZONE_CHEST) AddElement(/datum/element/organ_set_bonus, /datum/status_effect/organ_set_bonus/goliath) ///goliath brain. you can't use gloves but one of your arms becomes a tendril hammer that can be used to mine! @@ -63,7 +63,7 @@ /obj/item/organ/internal/brain/goliath/Initialize(mapload) . = ..() - AddElement(/datum/element/noticable_organ, "arm is just a mass of plate and tendrils.", BODY_ZONE_CHEST) + AddElement(/datum/element/noticable_organ, "%PRONOUN_Their arm is just a mass of plate and tendrils.", BODY_ZONE_CHEST) AddElement(/datum/element/organ_set_bonus, /datum/status_effect/organ_set_bonus/goliath) /obj/item/organ/internal/brain/goliath/on_mob_insert(mob/living/carbon/brain_owner) @@ -170,7 +170,7 @@ /obj/item/organ/internal/heart/goliath/Initialize(mapload) . = ..() - AddElement(/datum/element/noticable_organ, "skin has visible hard plates growing from within.", BODY_ZONE_CHEST) + AddElement(/datum/element/noticable_organ, "%PRONOUN_Their skin has visible hard plates growing from within.", BODY_ZONE_CHEST) AddElement(/datum/element/organ_set_bonus, /datum/status_effect/organ_set_bonus/goliath) AddElement(/datum/element/update_icon_blocker) diff --git a/code/game/machinery/dna_infuser/organ_sets/gondola_organs.dm b/code/game/machinery/dna_infuser/organ_sets/gondola_organs.dm index 96e41a57789bd..797c7839b2c29 100644 --- a/code/game/machinery/dna_infuser/organ_sets/gondola_organs.dm +++ b/code/game/machinery/dna_infuser/organ_sets/gondola_organs.dm @@ -31,7 +31,8 @@ Fluoride Stare: After someone says 5 words, blah blah blah... /obj/item/organ/internal/heart/gondola/Initialize(mapload) . = ..() AddElement(/datum/element/organ_set_bonus, /datum/status_effect/organ_set_bonus/gondola) - AddElement(/datum/element/noticable_organ, "radiate%PRONOUN_S an aura of serenity.") + AddElement(/datum/element/noticable_organ, "%PRONOUN_They radiate%PRONOUN_s an aura of serenity.") + AddElement(/datum/element/update_icon_blocker) /obj/item/organ/internal/heart/gondola/Insert(mob/living/carbon/receiver, special, movement_flags) . = ..() @@ -60,7 +61,7 @@ Fluoride Stare: After someone says 5 words, blah blah blah... /obj/item/organ/internal/tongue/gondola/Initialize(mapload) . = ..() - AddElement(/datum/element/noticable_organ, "mouth is permanently affixed into a relaxed smile.", BODY_ZONE_PRECISE_MOUTH) + AddElement(/datum/element/noticable_organ, "%PRONOUN_Their mouth is permanently affixed into a relaxed smile.", BODY_ZONE_PRECISE_MOUTH) AddElement(/datum/element/organ_set_bonus, /datum/status_effect/organ_set_bonus/gondola) /obj/item/organ/internal/tongue/gondola/Insert(mob/living/carbon/tongue_owner, special, movement_flags) @@ -83,8 +84,8 @@ Fluoride Stare: After someone says 5 words, blah blah blah... /obj/item/organ/internal/liver/gondola/Initialize(mapload) . = ..() AddElement(/datum/element/organ_set_bonus, /datum/status_effect/organ_set_bonus/gondola) - AddElement(/datum/element/noticable_organ, "left arm has small needles breaching the skin all over it.", BODY_ZONE_L_ARM) - AddElement(/datum/element/noticable_organ, "right arm has small needles breaching the skin all over it.", BODY_ZONE_R_ARM) + AddElement(/datum/element/noticable_organ, "%PRONOUN_Their left arm has small needles breaching the skin all over it.", BODY_ZONE_L_ARM) + AddElement(/datum/element/noticable_organ, "%PRONOUN_Their right arm has small needles breaching the skin all over it.", BODY_ZONE_R_ARM) /obj/item/organ/internal/liver/gondola/Insert(mob/living/carbon/liver_owner, special, movement_flags) . = ..() diff --git a/code/game/machinery/dna_infuser/organ_sets/rat_organs.dm b/code/game/machinery/dna_infuser/organ_sets/rat_organs.dm index f19f3d725c711..45d5f3ddfd997 100644 --- a/code/game/machinery/dna_infuser/organ_sets/rat_organs.dm +++ b/code/game/machinery/dna_infuser/organ_sets/rat_organs.dm @@ -29,7 +29,7 @@ /obj/item/organ/internal/eyes/night_vision/rat/Initialize(mapload) . = ..() - AddElement(/datum/element/noticable_organ, "eyes have deep, shifty black pupils, surrounded by a sickening yellow sclera.", BODY_ZONE_PRECISE_EYES) + AddElement(/datum/element/noticable_organ, "%PRONOUN_Their eyes have deep, shifty black pupils, surrounded by a sickening yellow sclera.", BODY_ZONE_PRECISE_EYES) AddElement(/datum/element/organ_set_bonus, /datum/status_effect/organ_set_bonus/rat) ///increases hunger, disgust recovers quicker, expands what is defined as "food" @@ -47,7 +47,7 @@ /obj/item/organ/internal/stomach/rat/Initialize(mapload) . = ..() AddElement(/datum/element/organ_set_bonus, /datum/status_effect/organ_set_bonus/rat) - AddElement(/datum/element/noticable_organ, "mouth is drooling excessively.", BODY_ZONE_PRECISE_MOUTH) + AddElement(/datum/element/noticable_organ, "%PRONOUN_Their mouth is drooling excessively.", BODY_ZONE_PRECISE_MOUTH) /// makes you smaller, walk over tables, and take 1.5x damage /obj/item/organ/internal/heart/rat @@ -61,7 +61,8 @@ /obj/item/organ/internal/heart/rat/Initialize(mapload) . = ..() AddElement(/datum/element/organ_set_bonus, /datum/status_effect/organ_set_bonus/rat) - AddElement(/datum/element/noticable_organ, "hunch%PRONOUN_ES over unnaturally!") + AddElement(/datum/element/noticable_organ, "%PRONOUN_They hunch%PRONOUN_es over unnaturally!") + AddElement(/datum/element/update_icon_blocker) /obj/item/organ/internal/heart/rat/on_mob_insert(mob/living/carbon/receiver) . = ..() @@ -98,7 +99,7 @@ /obj/item/organ/internal/tongue/rat/Initialize(mapload) . = ..() - AddElement(/datum/element/noticable_organ, "teeth are oddly shaped and yellowing.", BODY_ZONE_PRECISE_MOUTH) + AddElement(/datum/element/noticable_organ, "%PRONOUN_Their teeth are oddly shaped and yellowing.", BODY_ZONE_PRECISE_MOUTH) AddElement(/datum/element/organ_set_bonus, /datum/status_effect/organ_set_bonus/rat) /obj/item/organ/internal/tongue/rat/modify_speech(datum/source, list/speech_args) diff --git a/code/game/machinery/dna_infuser/organ_sets/roach_organs.dm b/code/game/machinery/dna_infuser/organ_sets/roach_organs.dm index 0644bca0354a6..b31a64d9bb87c 100644 --- a/code/game/machinery/dna_infuser/organ_sets/roach_organs.dm +++ b/code/game/machinery/dna_infuser/organ_sets/roach_organs.dm @@ -63,8 +63,9 @@ /obj/item/organ/internal/heart/roach/Initialize(mapload) . = ..() - AddElement(/datum/element/noticable_organ, "has hardened, somewhat translucent skin.") + AddElement(/datum/element/noticable_organ, "%PRONOUN_They %PRONOUN_have hardened, somewhat translucent skin.") AddElement(/datum/element/organ_set_bonus, /datum/status_effect/organ_set_bonus/roach) + AddElement(/datum/element/update_icon_blocker) roach_shell = new() /obj/item/organ/internal/heart/roach/Destroy() diff --git a/code/game/machinery/dna_scanner.dm b/code/game/machinery/dna_scanner.dm index dbcb36ff3cf52..cb0ab9900d5cc 100644 --- a/code/game/machinery/dna_scanner.dm +++ b/code/game/machinery/dna_scanner.dm @@ -6,12 +6,14 @@ base_icon_state = "scanner" density = TRUE obj_flags = BLOCKS_CONSTRUCTION // Becomes undense when the door is open + interaction_flags_mouse_drop = NEED_DEXTERITY occupant_typecache = list(/mob/living, /obj/item/bodypart/head, /obj/item/organ/internal/brain) circuit = /obj/item/circuitboard/machine/dnascanner + var/locked = FALSE - var/damage_coeff + var/damage_coeff = 1 var/scan_level - var/precision_coeff + var/precision_coeff = 1 var/message_cooldown var/breakout_time = 1200 var/obj/machinery/computer/scan_consolenew/linked_console = null @@ -140,8 +142,8 @@ /obj/machinery/dna_scannernew/interact(mob/user) toggle_open(user) -/obj/machinery/dna_scannernew/MouseDrop_T(mob/target, mob/user) - if(user.stat != CONSCIOUS || HAS_TRAIT(user, TRAIT_UI_BLOCKED) || !Adjacent(user) || !user.Adjacent(target) || !iscarbon(target) || !ISADVANCEDTOOLUSER(user)) +/obj/machinery/dna_scannernew/mouse_drop_receive(atom/target, mob/user, params) + if(!iscarbon(target)) return close_machine(target) diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index 96f7d568f0e16..67f069c062c4c 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -86,6 +86,7 @@ smoothing_groups = SMOOTH_GROUP_AIRLOCK interaction_flags_machine = INTERACT_MACHINE_WIRES_IF_OPEN | INTERACT_MACHINE_ALLOW_SILICON | INTERACT_MACHINE_OPEN_SILICON | INTERACT_MACHINE_OPEN + interaction_flags_click = ALLOW_SILICON_REACH blocks_emissive = EMISSIVE_BLOCK_NONE // Custom emissive blocker. We don't want the normal behavior. ///The type of door frame to drop during deconstruction @@ -600,13 +601,19 @@ if(!machine_stat) update_icon(ALL, AIRLOCK_DENY) playsound(src,doorDeni,50,FALSE,3) - addtimer(CALLBACK(src, TYPE_PROC_REF(/atom, update_icon), ALL, AIRLOCK_CLOSED), AIRLOCK_DENY_ANIMATION_TIME) + addtimer(CALLBACK(src, PROC_REF(handle_deny_end)), AIRLOCK_DENY_ANIMATION_TIME) + +/obj/machinery/door/airlock/proc/handle_deny_end() + if(airlock_state == AIRLOCK_DENY) + update_icon(ALL, AIRLOCK_CLOSED) /obj/machinery/door/airlock/examine(mob/user) . = ..() if(closeOtherId) . += span_warning("This airlock cycles on ID: [sanitize(closeOtherId)].") - else if(!closeOtherId) + else if(cyclelinkedairlock) + . += span_warning("This airlock cycles with: [cyclelinkedairlock.name].") + else . += span_warning("This airlock does not cycle.") if(obj_flags & EMAGGED) . += span_warning("Its access panel is smoking slightly.") @@ -1527,10 +1534,12 @@ var/obj/item/electronics/airlock/ae if(!electronics) ae = new/obj/item/electronics/airlock(loc) + if(closeOtherId) + ae.passed_cycle_id = closeOtherId if(length(req_one_access)) ae.one_access = 1 ae.accesses = req_one_access - else + else if(length(req_access)) ae.accesses = req_access else ae = electronics diff --git a/code/game/machinery/doors/brigdoors.dm b/code/game/machinery/doors/brigdoors.dm index 0ddbd58a5c8c8..26dc09204a70c 100644 --- a/code/game/machinery/doors/brigdoors.dm +++ b/code/game/machinery/doors/brigdoors.dm @@ -17,12 +17,14 @@ text_color = "#F44" header_text_color = "#F88" - var/id = null // id of linked machinery/lockers - + /// ID of linked machinery/lockers. + var/id = null + /// The time at which the timer started. var/activation_time = 0 + /// The time offset from the activation time before releasing. var/timer_duration = 0 - - var/timing = FALSE // boolean, true/1 timer is on, false/0 means it's not timing + /// Is the timer on? + var/timing = FALSE ///List of weakrefs to nearby doors var/list/doors = list() ///List of weakrefs to nearby flashers @@ -138,7 +140,7 @@ sec_radio.talk_into(src, "Timer has expired. Releasing prisoner.", FREQ_SECURITY) timing = FALSE - activation_time = null + activation_time = 0 set_timer(0) end_processing() @@ -168,24 +170,24 @@ /** * Return time left. * Arguments: - * * seconds - return time in seconds it TRUE, else deciseconds. + * * seconds - Return the time in seconds if TRUE, else deciseconds. */ /obj/machinery/status_display/door_timer/proc/time_left(seconds = FALSE) - . = max(0, timer_duration - (activation_time ? world.time - activation_time : 0)) + . = max(0, timer_duration + (activation_time ? activation_time - world.time : 0)) if(seconds) - . /= 10 + . /= (1 SECONDS) /** * Set the timer. Does NOT automatically start counting down, but does update the display. * - * returns TRUE if no change occurred + * returns FALSE if no change occurred * * Arguments: * value - time in deciseconds to set the timer for. */ /obj/machinery/status_display/door_timer/proc/set_timer(value) var/new_time = clamp(value, 0, MAX_TIMER) - . = new_time == timer_duration //return 1 on no change + . = new_time != timer_duration //return 1 on change timer_duration = new_time update_content() @@ -229,7 +231,7 @@ if("time") var/value = text2num(params["adjust"]) if(value) - . = set_timer(time_left() + value) + . = set_timer(timer_duration + value) user.investigate_log("modified the timer by [value/10] seconds for cell [id], currently [time_left(seconds = TRUE)]", INVESTIGATE_RECORDS) user.log_message("modified the timer by [value/10] seconds for cell [id], currently [time_left(seconds = TRUE)]", LOG_ATTACK) if("start") diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm index 7a10b2f491f57..b1fec07f422f4 100644 --- a/code/game/machinery/doors/door.dm +++ b/code/game/machinery/doors/door.dm @@ -92,7 +92,7 @@ elevator_status = LIFT_PLATFORM_LOCKED GLOB.elevator_doors += src else - stack_trace("Elevator door [src] has no linked elevator ID!") + stack_trace("Elevator door [src] ([x],[y],[z]) has no linked elevator ID!") spark_system = new /datum/effect_system/spark_spread spark_system.set_up(2, 1, src) if(density) diff --git a/code/game/machinery/doors/poddoor.dm b/code/game/machinery/doors/poddoor.dm index ea8d758666e7d..48e0cb195d7f3 100644 --- a/code/game/machinery/doors/poddoor.dm +++ b/code/game/machinery/doors/poddoor.dm @@ -35,6 +35,72 @@ /obj/machinery/door/poddoor/get_save_vars() return ..() + NAMEOF(src, id) +/obj/machinery/door/poddoor/examine(mob/user) + . = ..() + if(panel_open) + if(deconstruction == BLASTDOOR_FINISHED) + . += span_notice("The maintenance panel is opened and the electronics could be pried out.") + . += span_notice("\The [src] could be calibrated to a blast door controller ID with a multitool.") + else if(deconstruction == BLASTDOOR_NEEDS_ELECTRONICS) + . += span_notice("The electronics are missing and there are some wires sticking out.") + else if(deconstruction == BLASTDOOR_NEEDS_WIRES) + . += span_notice("The wires have been removed and it's ready to be sliced apart.") + +/obj/machinery/door/poddoor/add_context(atom/source, list/context, obj/item/held_item, mob/user) + . = ..() + if(isnull(held_item)) + return NONE + if(deconstruction == BLASTDOOR_NEEDS_WIRES && istype(held_item, /obj/item/stack/cable_coil)) + context[SCREENTIP_CONTEXT_LMB] = "Wire assembly" + return CONTEXTUAL_SCREENTIP_SET + if(deconstruction == BLASTDOOR_NEEDS_ELECTRONICS && istype(held_item, /obj/item/electronics/airlock)) + context[SCREENTIP_CONTEXT_LMB] = "Add electronics" + return CONTEXTUAL_SCREENTIP_SET + //we do not check for special effects like if they can actually perform the action because they will be told they can't do it when they try, + //with feedback on what they have to do in order to do so. + switch(held_item.tool_behaviour) + if(TOOL_SCREWDRIVER) + context[SCREENTIP_CONTEXT_LMB] = "Open panel" + return CONTEXTUAL_SCREENTIP_SET + if(TOOL_MULTITOOL) + context[SCREENTIP_CONTEXT_LMB] = "Calibrate ID" + return CONTEXTUAL_SCREENTIP_SET + if(TOOL_CROWBAR) + context[SCREENTIP_CONTEXT_LMB] = "Remove electronics" + return CONTEXTUAL_SCREENTIP_SET + if(TOOL_WIRECUTTER) + context[SCREENTIP_CONTEXT_LMB] = "Remove wires" + return CONTEXTUAL_SCREENTIP_SET + if(TOOL_WELDER) + context[SCREENTIP_CONTEXT_LMB] = "Disassemble" + return CONTEXTUAL_SCREENTIP_SET + +/obj/machinery/door/poddoor/item_interaction(mob/living/user, obj/item/tool, list/modifiers) + if(deconstruction == BLASTDOOR_NEEDS_WIRES && istype(tool, /obj/item/stack/cable_coil)) + var/obj/item/stack/cable_coil/coil = tool + var/datum/crafting_recipe/recipe = locate(recipe_type) in GLOB.crafting_recipes + var/amount_needed = recipe.reqs[/obj/item/stack/cable_coil] + if(coil.get_amount() < amount_needed) + balloon_alert(user, "not enough cable!") + return ITEM_INTERACT_SUCCESS + balloon_alert(user, "adding cables...") + if(!do_after(user, 5 SECONDS, src)) + return ITEM_INTERACT_SUCCESS + coil.use(amount_needed) + deconstruction = BLASTDOOR_NEEDS_ELECTRONICS + balloon_alert(user, "cables added") + return ITEM_INTERACT_SUCCESS + + if(deconstruction == BLASTDOOR_NEEDS_ELECTRONICS && istype(tool, /obj/item/electronics/airlock)) + balloon_alert(user, "adding electronics...") + if(!do_after(user, 10 SECONDS, src)) + return ITEM_INTERACT_SUCCESS + qdel(tool) + balloon_alert(user, "electronics added") + deconstruction = BLASTDOOR_FINISHED + return ITEM_INTERACT_SUCCESS + return NONE + /obj/machinery/door/poddoor/screwdriver_act(mob/living/user, obj/item/tool) . = ..() if (density) @@ -49,7 +115,8 @@ balloon_alert(user, "open the door first!") return ITEM_INTERACT_SUCCESS if (!panel_open) - return + balloon_alert(user, "open the panel first!") + return ITEM_INTERACT_SUCCESS if (deconstruction != BLASTDOOR_FINISHED) return var/change_id = tgui_input_number(user, "Set the door controllers ID (Current: [id])", "Door Controller ID", isnum(id) ? id : null, 100) @@ -69,7 +136,8 @@ balloon_alert(user, "open the door first!") return ITEM_INTERACT_SUCCESS if (!panel_open) - return + balloon_alert(user, "open the panel first!") + return ITEM_INTERACT_SUCCESS if (deconstruction != BLASTDOOR_FINISHED) return balloon_alert(user, "removing airlock electronics...") @@ -86,7 +154,8 @@ balloon_alert(user, "open the door first!") return ITEM_INTERACT_SUCCESS if (!panel_open) - return + balloon_alert(user, "open the panel first!") + return ITEM_INTERACT_SUCCESS if (deconstruction != BLASTDOOR_NEEDS_ELECTRONICS) return balloon_alert(user, "removing internal cables...") @@ -104,7 +173,8 @@ balloon_alert(user, "open the door first!") return ITEM_INTERACT_SUCCESS if (!panel_open) - return + balloon_alert(user, "open the panel first!") + return ITEM_INTERACT_SUCCESS if (deconstruction != BLASTDOOR_NEEDS_WIRES) return balloon_alert(user, "tearing apart...") //You're tearing me apart, Lisa! @@ -116,17 +186,6 @@ qdel(src) return ITEM_INTERACT_SUCCESS -/obj/machinery/door/poddoor/examine(mob/user) - . = ..() - if(panel_open) - if(deconstruction == BLASTDOOR_FINISHED) - . += span_notice("The maintenance panel is opened and the electronics could be pried out.") - . += span_notice("\The [src] could be calibrated to a blast door controller ID with a multitool.") - else if(deconstruction == BLASTDOOR_NEEDS_ELECTRONICS) - . += span_notice("The electronics are missing and there are some wires sticking out.") - else if(deconstruction == BLASTDOOR_NEEDS_WIRES) - . += span_notice("The wires have been removed and it's ready to be sliced apart.") - /obj/machinery/door/poddoor/connect_to_shuttle(mapload, obj/docking_port/mobile/port, obj/docking_port/stationary/dock) id = "[port.shuttle_id]_[id]" diff --git a/code/game/machinery/doors/shutters.dm b/code/game/machinery/doors/shutters.dm index eca8d88da4baf..0df6024ca827a 100644 --- a/code/game/machinery/doors/shutters.dm +++ b/code/game/machinery/doors/shutters.dm @@ -16,6 +16,9 @@ density = FALSE opacity = FALSE +/obj/machinery/door/poddoor/shutters/preopen/deconstructed + deconstruction = BLASTDOOR_NEEDS_WIRES + /obj/machinery/door/poddoor/shutters/indestructible name = "hardened shutters" resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF diff --git a/code/game/machinery/doors/unpowered.dm b/code/game/machinery/doors/unpowered.dm deleted file mode 100644 index 6a9fea4741921..0000000000000 --- a/code/game/machinery/doors/unpowered.dm +++ /dev/null @@ -1,25 +0,0 @@ -/obj/machinery/door/unpowered - -/obj/machinery/door/unpowered/Bumped(atom/movable/AM) - if(src.locked) - return - ..() - return - - -/obj/machinery/door/unpowered/attackby(obj/item/I, mob/user, params) - if(locked) - return - else - return ..() - -/obj/machinery/door/unpowered/emag_act(mob/user, obj/item/card/emag/emag_card) - return FALSE - -/obj/machinery/door/unpowered/shuttle - icon = 'icons/turf/shuttle.dmi' - name = "door" - icon_state = "door1" - opacity = TRUE - density = TRUE - explosion_block = 1 diff --git a/code/game/machinery/doors/windowdoor.dm b/code/game/machinery/doors/windowdoor.dm index c69c865f6d122..8dca3d1bdadb2 100644 --- a/code/game/machinery/doors/windowdoor.dm +++ b/code/game/machinery/doors/windowdoor.dm @@ -111,9 +111,9 @@ return autoclose = TRUE if(check_access(null)) - sleep(5 SECONDS) + sleep(8 SECONDS) else //secure doors close faster - sleep(2 SECONDS) + sleep(5 SECONDS) if(!density && autoclose) //did someone change state while we slept? close() @@ -317,6 +317,13 @@ /obj/machinery/door/window/narsie_act() add_atom_colour(NARSIE_WINDOW_COLOUR, FIXED_COLOUR_PRIORITY) +/obj/machinery/door/window/rust_heretic_act() + add_atom_colour(COLOR_RUSTED_GLASS, FIXED_COLOUR_PRIORITY) + AddElement(/datum/element/rust) + set_armor(/datum/armor/none) + take_damage(get_integrity() * 0.5) + modify_max_integrity(max_integrity * 0.5) + /obj/machinery/door/window/should_atmos_process(datum/gas_mixture/air, exposed_temperature) return (exposed_temperature > T0C + (reinf ? 1600 : 800)) diff --git a/code/game/machinery/droneDispenser.dm b/code/game/machinery/droneDispenser.dm index 5495033651a89..af39257973cce 100644 --- a/code/game/machinery/droneDispenser.dm +++ b/code/game/machinery/droneDispenser.dm @@ -27,7 +27,7 @@ var/mode = DRONE_READY var/timer - var/cooldownTime = 1800 //3 minutes + var/cooldownTime = 3 MINUTES var/production_time = 30 //The item the dispenser will create var/dispense_type = /obj/effect/mob_spawn/ghost_role/drone @@ -59,7 +59,8 @@ MATCONTAINER_EXAMINE, \ allowed_items = /obj/item/stack \ ) - materials.insert_amount_mat(starting_amount) + materials.insert_amount_mat(starting_amount, /datum/material/iron) + materials.insert_amount_mat(starting_amount, /datum/material/glass) materials.precise_insertion = TRUE using_materials = list(/datum/material/iron = iron_cost, /datum/material/glass = glass_cost) REGISTER_REQUIRED_MAP_ITEM(1, 1) @@ -136,6 +137,19 @@ recharge_sound = null recharge_message = null +// A dispenser that produces binoculars, for the MediSim shuttle. +/obj/machinery/drone_dispenser/binoculars + name = "binoculars fabricator" + desc = "A hefty machine that periodically creates a pair of binoculars. Really, Nanotrasen? We're getting this lazy?" + dispense_type = /obj/item/binoculars + starting_amount = SHEET_MATERIAL_AMOUNT * 2.5 //Redudant + maximum_idle = 1 + cooldownTime = 5 SECONDS + iron_cost = 0 + glass_cost = 0 + energy_used = 0 + end_create_message = "dispenses a pair of binoculars." + /obj/machinery/drone_dispenser/examine(mob/user) . = ..() var/material_requirement_string = "It needs " @@ -155,7 +169,7 @@ if((machine_stat & (NOPOWER|BROKEN)) || !anchored) return - if(!materials.has_materials(using_materials)) + if((glass_cost != 0 || iron_cost != 0) && !materials.has_materials(using_materials)) return // We require more minerals // We are currently in the middle of something diff --git a/code/game/machinery/flatpacker.dm b/code/game/machinery/flatpacker.dm new file mode 100644 index 0000000000000..182db1edc08d9 --- /dev/null +++ b/code/game/machinery/flatpacker.dm @@ -0,0 +1,478 @@ +///Incremets an an value assosiated by an key in the list creating that value if nessassary +#define CREATE_AND_INCREMENT(L, I, increment) if(!(I in L)) { L[I] = 0; } L[I] += increment; + +/obj/machinery/flatpacker + name = "flatpacker" + desc = "It produces items using iron, glass, plastic and maybe some more." + icon = 'icons/obj/machines/lathes.dmi' + base_icon_state = "flatpacker" + icon_state = "flatpacker" + density = TRUE + active_power_usage = BASE_MACHINE_ACTIVE_CONSUMPTION + circuit = /obj/item/circuitboard/machine/flatpacker + + /// Are we busy printing? + var/busy = FALSE + /// Coefficient applied to consumed materials. Lower values result in lower material consumption. + var/creation_efficiency = 2 + ///The container to hold materials + var/datum/component/material_container/materials + /// The inserted board + var/obj/item/circuitboard/machine/inserted_board + /// Materials needed to print this board + var/list/needed_mats = list() + /// The highest tier of this board + var/print_tier = 1 + /// Our max print tier + var/max_part_tier = 1 + /// time needed to produce a flatpacked machine + var/flatpack_time = 4.5 SECONDS + +/obj/machinery/flatpacker/Initialize(mapload) + register_context() + + materials = AddComponent( \ + /datum/component/material_container, \ + SSmaterials.materials_by_category[MAT_CATEGORY_SILO], \ + 0, \ + MATCONTAINER_EXAMINE, \ + container_signals = list(COMSIG_MATCONTAINER_ITEM_CONSUMED = TYPE_PROC_REF(/obj/machinery/flatpacker, AfterMaterialInsert)) \ + ) + + return ..() + +/obj/machinery/flatpacker/Destroy() + materials = null + QDEL_NULL(inserted_board) + . = ..() + +/obj/machinery/flatpacker/add_context(atom/source, list/context, obj/item/held_item, mob/user) + . = NONE + if(!QDELETED(inserted_board)) + context[SCREENTIP_CONTEXT_CTRL_LMB] = "Eject board" + . = CONTEXTUAL_SCREENTIP_SET + + if(!isnull(held_item)) + if(istype(held_item, /obj/item/circuitboard/machine)) + context[SCREENTIP_CONTEXT_LMB] = "Insert board" + return CONTEXTUAL_SCREENTIP_SET + else if(held_item.tool_behaviour == TOOL_SCREWDRIVER) + context[SCREENTIP_CONTEXT_LMB] = "[panel_open ? "Close" : "Open"] panel" + return CONTEXTUAL_SCREENTIP_SET + else if(held_item.tool_behaviour == TOOL_CROWBAR && panel_open) + context[SCREENTIP_CONTEXT_LMB] = "Deconstruct" + return CONTEXTUAL_SCREENTIP_SET + +/obj/machinery/flatpacker/examine(mob/user) + . += ..() + if(!in_range(user, src) && !isobserver(user)) + return + + . += span_notice("The status display reads:") + . += span_notice("Capable of packing up to Tier [max_part_tier].") + . += span_notice("Storing up to [materials.max_amount] material units.") + . += span_notice("Material consumption at [creation_efficiency * 100]%") + + . += span_notice("Its maintainence panel can be [EXAMINE_HINT("screwed")] [panel_open ? "close" : "open"]") + if(panel_open) + . += span_notice("It can be [EXAMINE_HINT("pried")] apart") + if(!QDELETED(inserted_board)) + . += span_notice("The board can be ejected via [EXAMINE_HINT("Ctrl Click")]") + +/obj/machinery/flatpacker/update_overlays() + . = ..() + + if(!QDELETED(inserted_board)) + . += mutable_appearance(icon, "[base_icon_state]_c") + +/obj/machinery/flatpacker/Exited(atom/movable/gone, direction) + . = ..() + if(gone == inserted_board) + inserted_board = null + needed_mats.Cut() + print_tier = 1 + update_appearance(UPDATE_OVERLAYS) + +/obj/machinery/flatpacker/RefreshParts() + . = ..() + + var/mat_capacity = 0 + for(var/datum/stock_part/matter_bin/new_matter_bin in component_parts) + mat_capacity += new_matter_bin.tier * 25 * SHEET_MATERIAL_AMOUNT + materials.max_amount = mat_capacity + + var/datum/stock_part/servo/servo = locate() in component_parts + max_part_tier = servo.tier + flatpack_time = initial(flatpack_time) - servo.tier / 2 // T4 = 2 seconds off + var/efficiency = initial(creation_efficiency) + for(var/datum/stock_part/micro_laser/laser in component_parts) + efficiency -= laser.tier * 0.2 + creation_efficiency = max(1.2, efficiency) + +/obj/machinery/flatpacker/proc/AfterMaterialInsert(container, obj/item/item_inserted, last_inserted_id, mats_consumed, amount_inserted, atom/context) + SIGNAL_HANDLER + + //we use initial(active_power_usage) because higher tier parts will have higher active usage but we have no benifit from it + if(directly_use_energy(ROUND_UP((amount_inserted / (MAX_STACK_SIZE * SHEET_MATERIAL_AMOUNT)) * 0.4 * initial(active_power_usage)))) + flick_overlay_view(mutable_appearance('icons/obj/machines/lathes.dmi', "flatpacker_bar"), 1 SECONDS) + + var/datum/material/highest_mat_ref + var/highest_mat = 0 + for(var/datum/material/mat as anything in mats_consumed) + var/present_mat = mats_consumed[mat] + if(present_mat > highest_mat) + highest_mat = present_mat + highest_mat_ref = mat + + flick_overlay_view(material_insertion_animation(highest_mat_ref.greyscale_colors), 1 SECONDS) + +/** + * Attempts to find the total material cost of a typepath (including our creation efficiency), modifying a list + * The list is modified as an assoc list: Material datum typepath = Cost + * If the type is found on a techweb, uses material costs from there + * Otherwise, the typepath is created in nullspace and fetches materials from the initialized one, then deleted. + * + * Args: + * part_type - Typepath of the item we are trying to find the costs of + * costs - Assoc list we modify and return + */ +/obj/machinery/flatpacker/proc/analyze_cost(part_type, costs) + PRIVATE_PROC(TRUE) + + var/comp_type = part_type + if(ispath(part_type, /datum/stock_part)) + var/datum/stock_part/as_part = part_type + comp_type = initial(as_part.physical_object_type) + if(as_part.tier > print_tier) + print_tier = as_part.tier + + var/list/mat_list + var/obj/item/null_comp + if(!isnull(SSresearch.item_to_design[comp_type])) + mat_list = SSresearch.item_to_design[comp_type][1].materials + else + var/datum/stock_part/part = GLOB.stock_part_datums_per_object[comp_type] + if(part) + mat_list = part.physical_object_reference.custom_materials + else + null_comp = new comp_type + mat_list = null_comp.custom_materials + + for(var/atom/mat as anything in mat_list) + CREATE_AND_INCREMENT(costs, mat.type, mat_list[mat] * inserted_board.req_components[part_type]) + + if(null_comp) + qdel(null_comp) + return costs + +/obj/machinery/flatpacker/item_interaction(mob/living/user, obj/item/attacking_item, params) + . = NONE + if(user.combat_mode || attacking_item.flags_1 & HOLOGRAM_1 || attacking_item.item_flags & ABSTRACT) + return ITEM_INTERACT_SKIP_TO_ATTACK + + if(istype(attacking_item, /obj/item/circuitboard/machine)) + if(busy) + balloon_alert(user, "busy!") + return ITEM_INTERACT_BLOCKING + if (!user.transferItemToLoc(attacking_item, src)) + return ITEM_INTERACT_BLOCKING + + // If insertion was successful and there's already a diskette in the console, eject the old one. + if(inserted_board) + inserted_board.forceMove(drop_location()) + inserted_board = attacking_item + + //compute the needed mats from its stock parts + for(var/type as anything in inserted_board.req_components) + needed_mats = analyze_cost(type, needed_mats) + + // 5 sheets of iron and 5 of cable coil + CREATE_AND_INCREMENT(needed_mats, /datum/material/iron, (SHEET_MATERIAL_AMOUNT * 5 + (SHEET_MATERIAL_AMOUNT / 20))) + CREATE_AND_INCREMENT(needed_mats, /datum/material/glass, (SHEET_MATERIAL_AMOUNT / 20)) + + update_appearance(UPDATE_OVERLAYS) + return ITEM_INTERACT_SUCCESS + +/obj/machinery/flatpacker/screwdriver_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_BLOCKING + if(default_deconstruction_screwdriver(user, "[base_icon_state]_o", base_icon_state, tool)) + return ITEM_INTERACT_SUCCESS + +/obj/machinery/flatpacker/crowbar_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_BLOCKING + if(default_deconstruction_crowbar(tool)) + return ITEM_INTERACT_SUCCESS + +/obj/machinery/flatpacker/ui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "Flatpacker") + ui.open() + +/obj/machinery/flatpacker/ui_assets(mob/user) + return list( + get_asset_datum(/datum/asset/spritesheet/sheetmaterials), + get_asset_datum(/datum/asset/spritesheet/research_designs), + ) + +/obj/machinery/flatpacker/ui_static_data(mob/user) + return materials.ui_static_data() + +/obj/machinery/flatpacker/ui_data(mob/user) + . = list() + + .["materials"] = materials.ui_data() + .["busy"] = busy + + var/list/design + if(!QDELETED(inserted_board)) + var/list/cost_mats = list() + for(var/datum/material/mat_type as anything in needed_mats) + var/list/new_entry = list() + new_entry["name"] = initial(mat_type.name) + new_entry["amount"] = OPTIMAL_COST(needed_mats[mat_type] * creation_efficiency) + cost_mats += list(new_entry) + + var/atom/build = initial(inserted_board.build_path) + + var/disableReason = "" + var/has_materials = materials.has_materials(needed_mats, creation_efficiency) + if(!has_materials) + disableReason += "Not enough materials. " + if(print_tier > max_part_tier) + disableReason += "This design is too advanced for this machine. " + design = list( + "name" = initial(build.name), + "requiredMaterials" = cost_mats, + "icon" = icon2base64(icon(initial(build.icon), initial(build.icon_state), frame = 1)), + "canPrint" = has_materials && print_tier <= max_part_tier, + "disableReason" = disableReason + ) + .["design"] = design + +/obj/machinery/flatpacker/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) + . = ..() + if(.) + return + + switch(action) + if("build") + if(busy) + return + + if(QDELETED(inserted_board)) + return + if(print_tier > max_part_tier) + say("Design too complex.") + return + if(!materials.has_materials(needed_mats, creation_efficiency)) + say("Not enough materials to begin production.") + return + playsound(src, 'sound/items/rped.ogg', 50, TRUE) + + busy = TRUE + flick_overlay_view(mutable_appearance('icons/obj/machines/lathes.dmi', "flatpacker_bar"), flatpack_time) + addtimer(CALLBACK(src, PROC_REF(finish_build), inserted_board), flatpack_time) + return TRUE + + if("ejectBoard") + try_put_in_hand(inserted_board, ui.user) + return TRUE + + if("eject") + var/datum/material/material = locate(params["ref"]) + if(!istype(material)) + return + + var/amount = params["amount"] + if(isnull(amount)) + return + + amount = text2num(amount) + if(isnull(amount)) + return + + //we use initial(active_power_usage) because higher tier parts will have higher active usage but we have no benifit from it + if(!directly_use_energy(ROUND_UP((amount / MAX_STACK_SIZE) * 0.4 * initial(active_power_usage)))) + say("No power to dispense sheets") + return + + materials.retrieve_sheets(amount, material) + return TRUE + +/** + * Turns the supplied board into a flatpack, and sets the machine as not busy + * Arguments + * + * * board - the board to put inside the flatpack + */ +/obj/machinery/flatpacker/proc/finish_build(board) + PRIVATE_PROC(TRUE) + + busy = FALSE + + materials.use_materials(needed_mats, creation_efficiency) + new /obj/item/flatpack(drop_location(), board) + + SStgui.update_uis(src) + +/obj/machinery/flatpacker/click_ctrl(mob/user) + if(QDELETED(inserted_board) || busy) + return CLICK_ACTION_BLOCKING + + try_put_in_hand(inserted_board, user) + + return CLICK_ACTION_SUCCESS + +#undef CREATE_AND_INCREMENT + +/obj/item/flatpack + name = "flatpack" + desc = "A box containing a compactly packed machine. Use multitool to deploy." + icon = 'icons/obj/devices/circuitry_n_data.dmi' + icon_state = "flatpack" + density = TRUE + w_class = WEIGHT_CLASS_HUGE //cart time + throw_range = 2 + item_flags = SLOWS_WHILE_IN_HAND | IMMUTABLE_SLOW + slowdown = 2.5 + drag_slowdown = 3.5 //use the cart stupid + + /// The board we deploy + var/obj/item/circuitboard/machine/board + +/obj/item/flatpack/Initialize(mapload, obj/item/circuitboard/machine/new_board) + if(isnull(board) && isnull(new_board)) + return INITIALIZE_HINT_QDEL //how + + . = ..() + + var/static/list/tool_behaviors = list( + TOOL_MULTITOOL = list( + SCREENTIP_CONTEXT_LMB = "Deploy", + ), + ) + AddElement(/datum/element/contextual_screentip_tools, tool_behaviors) + + board = !isnull(new_board) ? new_board : new board(src) // i got board + if(board.loc != src) + board.forceMove(src) + var/obj/machinery/build = initial(board.build_path) + name += " ([initial(build.name)])" + +/obj/item/flatpack/Destroy() + QDEL_NULL(board) + . = ..() + +/obj/item/flatpack/examine(mob/user) + . = ..() + if(!in_range(user, src) && !isobserver(user)) + return + + if(loc == user) + . += span_warning("You can't deploy while holding it in your hand.") + else if(isturf(loc)) + var/turf/location = loc + if(!isopenturf(location)) + . += span_warning("Can't deploy in this location") + else if(location.is_blocked_turf(source_atom = src)) + . += span_warning("No space for deployment") + +/obj/item/flatpack/multitool_act(mob/living/user, obj/item/tool) + . = NONE + + if(isnull(board)) + return ITEM_INTERACT_BLOCKING + if(loc == user) + balloon_alert(user, "can't deploy in hand") + return ITEM_INTERACT_BLOCKING + else if(isturf(loc)) + var/turf/location = loc + if(!isopenturf(location)) + balloon_alert(user, "can't deploy here") + return ITEM_INTERACT_BLOCKING + else if(location.is_blocked_turf(source_atom = src)) + balloon_alert(user, "no space for deployment") + return ITEM_INTERACT_BLOCKING + balloon_alert_to_viewers("deploying!") + if(!do_after(user, 1 SECONDS, target = src)) + return ITEM_INTERACT_BLOCKING + + new /obj/effect/temp_visual/mook_dust(loc) + var/obj/machinery/new_machine = new board.build_path(loc) + loc.visible_message(span_warning("[src] deploys!")) + playsound(src, 'sound/machines/terminal_eject.ogg', 70, TRUE) + new_machine.on_construction(user) + qdel(src) + return ITEM_INTERACT_SUCCESS + +///Maximum number of flatpacks in a cart +#define MAX_FLAT_PACKS 3 + +/obj/structure/flatpack_cart + name = "flatpack cart" + desc = "A cart specifically made to hold flatpacks from a flatpacker, evenly distributing weight. Convenient!" + icon = 'icons/obj/structures.dmi' + icon_state = "flatcart" + density = TRUE + opacity = FALSE + +/obj/structure/flatpack_cart/Initialize(mapload) + . = ..() + + register_context() + + AddElement(/datum/element/noisy_movement, volume = 45) // i hate noise + +/obj/structure/flatpack_cart/atom_deconstruct(disassembled) + for(var/atom/movable/content as anything in contents) + content.forceMove(drop_location()) + +/obj/structure/flatpack_cart/add_context(atom/source, list/context, obj/item/held_item, mob/user) + . = NONE + if(isnull(held_item)) + return + + if(istype(held_item, /obj/item/flatpack)) + context[SCREENTIP_CONTEXT_LMB] = "Load pack" + return CONTEXTUAL_SCREENTIP_SET + +/obj/structure/flatpack_cart/examine(mob/user) + . = ..() + if(!in_range(user, src) && !isobserver(user)) + return + + . += "From bottom to top, this cart contains:" + for(var/obj/item/flatpack as anything in contents) + . += flatpack.name + +/obj/structure/flatpack_cart/update_overlays() + . = ..() + + var/offset = 0 + for(var/item in contents) + var/mutable_appearance/flatpack_overlay = mutable_appearance(icon, "flatcart_flat", layer = layer + (offset * 0.01)) + flatpack_overlay.pixel_y = offset + offset += 4 + . += flatpack_overlay + +/obj/structure/flatpack_cart/attack_hand(mob/user, list/modifiers) + . = ..() + if(.) + return + user.put_in_hands(contents[length(contents)]) //topmost box + update_appearance(UPDATE_OVERLAYS) + +/obj/structure/flatpack_cart/item_interaction(mob/living/user, obj/item/attacking_item, params) + if(!istype(attacking_item, /obj/item/flatpack) || user.combat_mode || attacking_item.flags_1 & HOLOGRAM_1 || attacking_item.item_flags & ABSTRACT) + return ITEM_INTERACT_SKIP_TO_ATTACK + + if (length(contents) >= MAX_FLAT_PACKS) + balloon_alert(user, "full!") + return ITEM_INTERACT_BLOCKING + if (!user.transferItemToLoc(attacking_item, src)) + return ITEM_INTERACT_BLOCKING + update_appearance(UPDATE_OVERLAYS) + return ITEM_INTERACT_SUCCESS + +#undef MAX_FLAT_PACKS diff --git a/code/game/machinery/hologram.dm b/code/game/machinery/hologram.dm index 16f89fdf3c103..172607451bda7 100644 --- a/code/game/machinery/hologram.dm +++ b/code/game/machinery/hologram.dm @@ -47,6 +47,7 @@ Possible to do for anyone motivated enough: armor_type = /datum/armor/machinery_holopad circuit = /obj/item/circuitboard/machine/holopad interaction_flags_atom = parent_type::interaction_flags_atom | INTERACT_ATOM_IGNORE_MOBILITY + interaction_flags_click = ALLOW_SILICON_REACH // Blue, dim light light_power = 0.8 light_color = LIGHT_COLOR_BLUE @@ -593,7 +594,7 @@ For the other part of the code, check silicon say.dm. Particularly robot talk.*/ /obj/machinery/holopad/proc/SetLightsAndPower() var/total_users = LAZYLEN(masters) + LAZYLEN(holo_calls) update_use_power(total_users > 0 ? ACTIVE_POWER_USE : IDLE_POWER_USE) - update_mode_power_usage(ACTIVE_POWER_USE, active_power_usage + HOLOPAD_PASSIVE_POWER_USAGE + (HOLOGRAM_POWER_USAGE * total_users)) + update_mode_power_usage(ACTIVE_POWER_USE, initial(active_power_usage) + HOLOPAD_PASSIVE_POWER_USAGE + (HOLOGRAM_POWER_USAGE * total_users)) if(total_users || replay_mode) set_light(2) else diff --git a/code/game/machinery/hypnochair.dm b/code/game/machinery/hypnochair.dm index 4594e09a9af9a..f8f3ed49be598 100644 --- a/code/game/machinery/hypnochair.dm +++ b/code/game/machinery/hypnochair.dm @@ -7,13 +7,20 @@ circuit = /obj/item/circuitboard/machine/hypnochair density = TRUE opacity = FALSE - - var/mob/living/carbon/victim = null ///Keeps track of the victim to apply effects if it teleports away - var/interrogating = FALSE ///Is the device currently interrogating someone? - var/start_time = 0 ///Time when the interrogation was started, to calculate effect in case of interruption - var/trigger_phrase = "" ///Trigger phrase to implant - var/timerid = 0 ///Timer ID for interrogations - var/message_cooldown = 0 ///Cooldown for breakout message + interaction_flags_mouse_drop = NEED_DEXTERITY + + ///Keeps track of the victim to apply effects if it teleports away + var/mob/living/carbon/victim = null + ///Is the device currently interrogating someone? + var/interrogating = FALSE + ///Time when the interrogation was started, to calculate effect in case of interruption + var/start_time = 0 + ///Trigger phrase to implant + var/trigger_phrase = "" + ///Timer ID for interrogations + var/timerid = 0 + ///Cooldown for breakout message + var/message_cooldown = 0 /obj/machinery/hypnochair/Initialize(mapload) . = ..() @@ -194,8 +201,7 @@ to_chat(user, span_warning("[src]'s door won't budge!")) -/obj/machinery/hypnochair/MouseDrop_T(mob/target, mob/user) - if(HAS_TRAIT(user, TRAIT_UI_BLOCKED) || !Adjacent(user) || !user.Adjacent(target) || !isliving(target) || !ISADVANCEDTOOLUSER(user)) +/obj/machinery/hypnochair/mouse_drop_receive(atom/target, mob/user, params) + if(!isliving(target)) return - close_machine(target) diff --git a/code/game/machinery/iv_drip.dm b/code/game/machinery/iv_drip.dm index 91104abf68123..4ac2a177e76bc 100644 --- a/code/game/machinery/iv_drip.dm +++ b/code/game/machinery/iv_drip.dm @@ -23,6 +23,7 @@ anchored = FALSE mouse_drag_pointer = MOUSE_ACTIVE_POINTER use_power = NO_POWER_USE + interaction_flags_mouse_drop = NEED_HANDS ///What are we sticking our needle in? var/atom/attached @@ -161,25 +162,22 @@ filling.color = mix_color_from_reagents(container_reagents.reagent_list) . += filling -/obj/machinery/iv_drip/MouseDrop(atom/target) - . = ..() - if(!Adjacent(target) || !usr.can_perform_action(src)) - return - if(!isliving(usr)) - to_chat(usr, span_warning("You can't do that!")) +/obj/machinery/iv_drip/mouse_drop_dragged(atom/target, mob/user) + if(!isliving(user)) + to_chat(user, span_warning("You can't do that!")) return if(!get_reagents()) - to_chat(usr, span_warning("There's nothing attached to the IV drip!")) + to_chat(user, span_warning("There's nothing attached to the IV drip!")) return - if(!target.is_injectable(usr)) - to_chat(usr, span_warning("Can't inject into this!")) + if(!target.is_injectable(user)) + to_chat(user, span_warning("Can't inject into this!")) return if(attached) visible_message(span_warning("[attached] is detached from [src].")) attached = null update_appearance(UPDATE_ICON) - usr.visible_message(span_warning("[usr] attaches [src] to [target]."), span_notice("You attach [src] to [target].")) - attach_iv(target, usr) + user.visible_message(span_warning("[user] attaches [src] to [target]."), span_notice("You attach [src] to [target].")) + attach_iv(target, user) /obj/machinery/iv_drip/attackby(obj/item/W, mob/user, params) if(use_internal_storage) diff --git a/code/game/machinery/launch_pad.dm b/code/game/machinery/launch_pad.dm index 57047c25cac10..391cf38b74b7d 100644 --- a/code/game/machinery/launch_pad.dm +++ b/code/game/machinery/launch_pad.dm @@ -7,7 +7,9 @@ icon_state = "lpad-idle" active_power_usage = BASE_MACHINE_ACTIVE_CONSUMPTION * 2.5 hud_possible = list(DIAG_LAUNCHPAD_HUD) + interaction_flags_mouse_drop = NEED_DEXTERITY | NEED_HANDS circuit = /obj/item/circuitboard/machine/launchpad + /// The beam icon var/icon_teleport = "lpad-beam" /// To prevent briefcase pad deconstruction and such @@ -64,6 +66,15 @@ if(in_range(user, src) || isobserver(user)) . += span_notice("The status display reads: Maximum range: [range] units.") +/obj/machinery/launchpad/multitool_act(mob/living/user, obj/item/multitool/multi) + . = NONE + if(!panel_open) + return + + multi.set_buffer(src) + balloon_alert(user, "saved to buffer") + return ITEM_INTERACT_SUCCESS + /obj/machinery/launchpad/attackby(obj/item/weapon, mob/user, params) if(!stationary) return ..() @@ -72,14 +83,6 @@ update_indicator() return - if(panel_open && weapon.tool_behaviour == TOOL_MULTITOOL) - if(!multitool_check_buffer(user, weapon)) - return - var/obj/item/multitool/multi = weapon - multi.set_buffer(src) - balloon_alert(user, "saved to buffer") - return TRUE - if(default_deconstruction_crowbar(weapon)) return @@ -298,14 +301,13 @@ return FALSE return TRUE -/obj/machinery/launchpad/briefcase/MouseDrop(over_object, src_location, over_location) - . = ..() - if(over_object == usr) - if(!briefcase || !usr.can_perform_action(src, NEED_DEXTERITY|NEED_HANDS)) +/obj/machinery/launchpad/briefcase/mouse_drop_dragged(atom/over_object, mob/user, src_location, over_location, params) + if(over_object == user) + if(!briefcase) return - usr.visible_message(span_notice("[usr] starts closing [src]..."), span_notice("You start closing [src]...")) - if(do_after(usr, 3 SECONDS, target = usr)) - usr.put_in_hands(briefcase) + user.visible_message(span_notice("[usr] starts closing [src]..."), span_notice("You start closing [src]...")) + if(do_after(user, 3 SECONDS, target = user)) + user.put_in_hands(briefcase) moveToNullspace() //hides it from suitcase contents closed = TRUE update_indicator() @@ -350,15 +352,15 @@ user.transferItemToLoc(src, pad, TRUE) atom_storage.close_all() -/obj/item/storage/briefcase/launchpad/attackby(obj/item/I, mob/user, params) - if(istype(I, /obj/item/launchpad_remote)) - var/obj/item/launchpad_remote/L = I - if(L.pad == WEAKREF(src.pad)) //do not attempt to link when already linked - return ..() - L.pad = WEAKREF(src.pad) - to_chat(user, span_notice("You link [pad] to [L].")) - else +/obj/item/storage/briefcase/launchpad/tool_act(mob/living/user, obj/item/tool, list/modifiers) + if(!istype(tool, /obj/item/launchpad_remote)) + return ..() + var/obj/item/launchpad_remote/remote = tool + if(remote.pad == WEAKREF(src.pad)) return ..() + remote.pad = WEAKREF(src.pad) + to_chat(user, span_notice("You link [pad] to [remote].")) + return ITEM_INTERACT_BLOCKING /obj/item/launchpad_remote name = "folder" diff --git a/code/game/machinery/lightswitch.dm b/code/game/machinery/lightswitch.dm index f9075b4318fac..04883800f31ef 100644 --- a/code/game/machinery/lightswitch.dm +++ b/code/game/machinery/lightswitch.dm @@ -42,8 +42,8 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/light_switch, 26) if(isnull(held_item)) context[SCREENTIP_CONTEXT_LMB] = area.lightswitch ? "Flick off" : "Flick on" return CONTEXTUAL_SCREENTIP_SET - if(held_item.tool_behaviour != TOOL_SCREWDRIVER) - context[SCREENTIP_CONTEXT_RMB] = "Deconstruct" + if(held_item.tool_behaviour == TOOL_SCREWDRIVER) + context[SCREENTIP_CONTEXT_LMB] = "Deconstruct" return CONTEXTUAL_SCREENTIP_SET return . @@ -69,17 +69,20 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/light_switch, 26) /obj/machinery/light_switch/examine(mob/user) . = ..() . += "It is [(machine_stat & NOPOWER) ? "unpowered" : (area.lightswitch ? "on" : "off")]." + . += span_notice("It's screwed and secured to the wall.") /obj/machinery/light_switch/interact(mob/user) . = ..() set_lights(!area.lightswitch) -/obj/machinery/light_switch/attackby_secondary(obj/item/weapon, mob/user, params) - if(weapon.tool_behaviour == TOOL_SCREWDRIVER) - to_chat(user, "You pop \the [src] off the wall.") - deconstruct() - return COMPONENT_CANCEL_ATTACK_CHAIN - return ..() +/obj/machinery/light_switch/screwdriver_act(mob/living/user, obj/item/tool) + user.visible_message(span_notice("[user] starts unscrewing [src]..."), span_notice("You start unscrewing [src]...")) + if(!tool.use_tool(src, user, 40, volume = 50)) + return ITEM_INTERACT_BLOCKING + user.visible_message(span_notice("[user] unscrews [src]!"), span_notice("You detach [src] from the wall.")) + playsound(src, 'sound/items/deconstruct.ogg', 50, TRUE) + deconstruct(TRUE) + return ITEM_INTERACT_SUCCESS /obj/machinery/light_switch/proc/set_lights(status) if(area.lightswitch == status) diff --git a/code/game/machinery/mechlaunchpad.dm b/code/game/machinery/mechlaunchpad.dm index b8c282ae22cca..cbdc34d864800 100644 --- a/code/game/machinery/mechlaunchpad.dm +++ b/code/game/machinery/mechlaunchpad.dm @@ -30,15 +30,14 @@ if(default_deconstruction_crowbar(tool)) return TRUE -/obj/machinery/mechpad/multitool_act(mob/living/user, obj/item/tool) +/obj/machinery/mechpad/multitool_act(mob/living/user, obj/item/multitool/multitool) + . = NONE if(!panel_open) return - if(!multitool_check_buffer(user, tool)) - return - var/obj/item/multitool/multitool = tool + multitool.set_buffer(src) balloon_alert(user, "saved to multitool buffer") - return TRUE + return ITEM_INTERACT_SUCCESS /obj/machinery/mechpad/wirecutter_act(mob/living/user, obj/item/tool) if(!panel_open) diff --git a/code/game/machinery/mining_weather_monitor.dm b/code/game/machinery/mining_weather_monitor.dm index 65cc4b9347c1a..32c41871b60df 100644 --- a/code/game/machinery/mining_weather_monitor.dm +++ b/code/game/machinery/mining_weather_monitor.dm @@ -2,7 +2,7 @@ /obj/machinery/mining_weather_monitor name = "barometric monitor" desc = "A machine monitoring atmospheric data from mining environments. Provides warnings about incoming weather fronts." - icon = 'icons/obj/miningradio.dmi' + icon = 'icons/obj/devices/miningradio.dmi' icon_state = "wallmount" light_power = 1 light_range = 1.6 diff --git a/code/game/machinery/newscaster/newspaper.dm b/code/game/machinery/newscaster/newspaper.dm index d791fac6545a0..2bd8187b9f8c0 100644 --- a/code/game/machinery/newscaster/newspaper.dm +++ b/code/game/machinery/newscaster/newspaper.dm @@ -55,7 +55,7 @@ /obj/item/newspaper/add_context(atom/source, list/context, obj/item/held_item, mob/living/user) if(held_item) - if(istype(held_item, /obj/item/pen)) + if(IS_WRITING_UTENSIL(held_item)) context[SCREENTIP_CONTEXT_LMB] = "Scribble" return CONTEXTUAL_SCREENTIP_SET if(held_item.get_temperature()) diff --git a/code/game/machinery/pipe/pipe_dispenser.dm b/code/game/machinery/pipe/pipe_dispenser.dm index d65f33e95878c..eb5b499bce79e 100644 --- a/code/game/machinery/pipe/pipe_dispenser.dm +++ b/code/game/machinery/pipe/pipe_dispenser.dm @@ -9,6 +9,8 @@ desc = "Dispenses countless types of pipes. Very useful if you need pipes." density = TRUE interaction_flags_machine = INTERACT_MACHINE_ALLOW_SILICON | INTERACT_MACHINE_OPEN_SILICON | INTERACT_MACHINE_OFFLINE + interaction_flags_mouse_drop = NEED_DEXTERITY + var/wait = 0 var/piping_layer = PIPING_LAYER_DEFAULT ///color of pipe @@ -183,16 +185,12 @@ density = TRUE category = DISPOSAL_PIPEDISPENSER - //Allow you to drag-drop disposal pipes and transit tubes into it -/obj/machinery/pipedispenser/disposal/MouseDrop_T(obj/structure/pipe, mob/usr) - if(!usr.incapacitated()) - return - +/obj/machinery/pipedispenser/disposal/mouse_drop_receive(obj/structure/pipe, mob/user, params) if (!istype(pipe, /obj/structure/disposalconstruct) && !istype(pipe, /obj/structure/c_transit_tube) && !istype(pipe, /obj/structure/c_transit_tube_pod)) return - if (get_dist(usr, src) > 1 || get_dist(src,pipe) > 1 ) + if (get_dist(user, src) > 1 || get_dist(src, pipe) > 1 ) return if (pipe.anchored) @@ -200,7 +198,6 @@ qdel(pipe) - //transit tube dispenser //inherit disposal for the dragging proc /obj/machinery/pipedispenser/disposal/transit_tube diff --git a/code/game/machinery/porta_turret/portable_turret.dm b/code/game/machinery/porta_turret/portable_turret.dm index 06b1b9778477c..c9694730a3f8a 100644 --- a/code/game/machinery/porta_turret/portable_turret.dm +++ b/code/game/machinery/porta_turret/portable_turret.dm @@ -317,6 +317,15 @@ DEFINE_BITFIELD(turret_flags, list( remove_control() check_should_process() +/obj/machinery/porta_turret/multitool_act(mob/living/user, obj/item/multitool/tool) + . = NONE + if(locked) + return + + tool.set_buffer(src) + balloon_alert(user, "saved to multitool buffer") + return ITEM_INTERACT_SUCCESS + /obj/machinery/porta_turret/attackby(obj/item/I, mob/user, params) if(machine_stat & BROKEN) if(I.tool_behaviour == TOOL_CROWBAR) @@ -364,12 +373,6 @@ DEFINE_BITFIELD(turret_flags, list( to_chat(user, span_notice("Controls are now [locked ? "locked" : "unlocked"].")) else to_chat(user, span_alert("Access denied.")) - else if(I.tool_behaviour == TOOL_MULTITOOL && !locked) - if(!multitool_check_buffer(user, I)) - return - var/obj/item/multitool/M = I - M.set_buffer(src) - balloon_alert(user, "saved to multitool buffer") else return ..() @@ -420,17 +423,23 @@ DEFINE_BITFIELD(turret_flags, list( power_change() SetInvisibility(INVISIBILITY_NONE, id=type) spark_system.start() //creates some sparks because they look cool + has_cover = FALSE qdel(cover) //deletes the cover - no need on keeping it there! +/obj/machinery/porta_turret/atom_fix() + set_machine_stat(machine_stat & ~BROKEN) + has_cover = initial(has_cover) + check_should_process() + return ..() + + /obj/machinery/porta_turret/process() //the main machinery process - if(cover == null && anchored) //if it has no cover and is anchored - if(machine_stat & BROKEN) //if the turret is borked - qdel(cover) //delete its cover, assuming it has one. Workaround for a pesky little bug - else - if(has_cover) - cover = new /obj/machinery/porta_turret_cover(loc) //if the turret has no cover and is anchored, give it a cover - cover.parent_turret = src //assign the cover its parent_turret, which would be this (src) + if(has_cover && cover == null && anchored && !(machine_stat & BROKEN)) //if it has no cover and is anchored + cover = new /obj/machinery/porta_turret_cover(loc) //if the turret has no cover and is anchored, give it a cover + cover.parent_turret = src //assign the cover its parent_turret, which would be this (src) + if(raised) + cover.icon_state = "openTurretCover" if(!on || (machine_stat & (NOPOWER|BROKEN))) return PROCESS_KILL @@ -910,6 +919,7 @@ DEFINE_BITFIELD(turret_flags, list( density = FALSE req_access = list(ACCESS_AI_UPLOAD) resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF + interaction_flags_click = ALLOW_SILICON_REACH /// Variable dictating if linked turrets are active and will shoot targets var/enabled = TRUE /// Variable dictating if linked turrets will shoot lethal projectiles @@ -960,18 +970,19 @@ DEFINE_BITFIELD(turret_flags, list( . += {"[span_notice("Ctrl-click [src] to [ enabled ? "disable" : "enable"] turrets.")] [span_notice("Alt-click [src] to set turrets to [ lethal ? "stun" : "kill"].")]"} -/obj/machinery/turretid/attackby(obj/item/attacking_item, mob/user, params) +/obj/machinery/turretid/multitool_act(mob/living/user, obj/item/multitool/multi_tool) + . = NONE if(machine_stat & BROKEN) return - if(attacking_item.tool_behaviour == TOOL_MULTITOOL) - if(!multitool_check_buffer(user, attacking_item)) - return - var/obj/item/multitool/M = attacking_item - if(M.buffer && istype(M.buffer, /obj/machinery/porta_turret)) - turrets |= WEAKREF(M.buffer) - to_chat(user, span_notice("You link \the [M.buffer] with \the [src].")) - return + if(multi_tool.buffer && istype(multi_tool.buffer, /obj/machinery/porta_turret)) + turrets |= WEAKREF(multi_tool.buffer) + to_chat(user, span_notice("You link \the [multi_tool.buffer] with \the [src].")) + return ITEM_INTERACT_SUCCESS + +/obj/machinery/turretid/attackby(obj/item/attacking_item, mob/user, params) + if(machine_stat & BROKEN) + return if (issilicon(user)) return attack_hand(user) diff --git a/code/game/machinery/porta_turret/portable_turret_construct.dm b/code/game/machinery/porta_turret/portable_turret_construct.dm index 470aa0501e9d7..a8fa4e67b2bf6 100644 --- a/code/game/machinery/porta_turret/portable_turret_construct.dm +++ b/code/game/machinery/porta_turret/portable_turret_construct.dm @@ -181,7 +181,7 @@ build_step = PTURRET_CLOSED return - if(istype(used, /obj/item/pen)) //you can rename turrets like bots! + if(used.get_writing_implement_details()?["interaction_mode"] == MODE_WRITING) //you can rename turrets like bots! var/choice = tgui_input_text(user, "Enter a new turret name", "Turret Classification", finish_name, MAX_NAME_LEN) if(!choice) return diff --git a/code/game/machinery/porta_turret/portable_turret_cover.dm b/code/game/machinery/porta_turret/portable_turret_cover.dm index 082881fc2fa91..ad3111b330bdc 100644 --- a/code/game/machinery/porta_turret/portable_turret_cover.dm +++ b/code/game/machinery/porta_turret/portable_turret_cover.dm @@ -36,6 +36,15 @@ /obj/machinery/porta_turret_cover/attack_ghost(mob/user) return ..() || parent_turret.attack_ghost(user) +/obj/machinery/porta_turret_cover/multitool_act(mob/living/user, obj/item/multitool/multi_tool) + . = NONE + if(parent_turret.locked) + return + + multi_tool.set_buffer(parent_turret) + balloon_alert(user, "saved to multitool buffer") + return ITEM_INTERACT_SUCCESS + /obj/machinery/porta_turret_cover/attackby(obj/item/I, mob/user, params) if(I.tool_behaviour == TOOL_WRENCH && !parent_turret.on) if(parent_turret.raised) @@ -43,12 +52,12 @@ if(!parent_turret.anchored) parent_turret.set_anchored(TRUE) to_chat(user, span_notice("You secure the exterior bolts on the turret.")) - parent_turret.SetInvisibility(INVISIBILITY_NONE, id=type, priority=INVISIBILITY_PRIORITY_TURRET_COVER) + parent_turret.SetInvisibility(INVISIBILITY_MAXIMUM, id=parent_turret.type, priority=INVISIBILITY_PRIORITY_TURRET_COVER) parent_turret.update_appearance() else parent_turret.set_anchored(FALSE) to_chat(user, span_notice("You unsecure the exterior bolts on the turret.")) - parent_turret.SetInvisibility(INVISIBILITY_MAXIMUM, id=type, priority=INVISIBILITY_PRIORITY_TURRET_COVER) + parent_turret.SetInvisibility(INVISIBILITY_NONE, id=parent_turret.type, priority=INVISIBILITY_PRIORITY_TURRET_COVER) parent_turret.update_appearance() qdel(src) return @@ -61,13 +70,6 @@ to_chat(user, span_notice("Access denied.")) return - if(I.tool_behaviour == TOOL_MULTITOOL && !parent_turret.locked) - if(!multitool_check_buffer(user, I)) - return - var/obj/item/multitool/M = I - M.set_buffer(parent_turret) - balloon_alert(user, "saved to multitool buffer") - return return ..() /obj/machinery/porta_turret_cover/attacked_by(obj/item/I, mob/user) @@ -82,9 +84,6 @@ /obj/machinery/porta_turret_cover/attack_hulk(mob/living/carbon/human/user) return parent_turret.attack_hulk(user) -/obj/machinery/porta_turret_cover/can_be_overridden() - . = 0 - /obj/machinery/porta_turret_cover/emag_act(mob/user, obj/item/card/emag/emag_card) if((parent_turret.obj_flags & EMAGGED)) diff --git a/code/game/machinery/quantum_pad.dm b/code/game/machinery/quantum_pad.dm index 1c014927e62d4..f5f5851b7586e 100644 --- a/code/game/machinery/quantum_pad.dm +++ b/code/game/machinery/quantum_pad.dm @@ -53,37 +53,30 @@ teleport_cooldown = initial(teleport_cooldown) teleport_cooldown -= (E * 100) -/obj/machinery/quantumpad/attackby(obj/item/I, mob/user, params) - if(default_deconstruction_screwdriver(user, "qpad-idle-open", "qpad-idle", I)) - return - +/obj/machinery/quantumpad/multitool_act(mob/living/user, obj/item/multitool/multi_tool) if(panel_open) - if(I.tool_behaviour == TOOL_MULTITOOL) - if(!multitool_check_buffer(user, I)) - return - var/obj/item/multitool/M = I - M.set_buffer(src) - balloon_alert(user, "saved to multitool buffer") - to_chat(user, span_notice("You save the data in [I]'s buffer. It can now be saved to pads with closed panels.")) - return TRUE - else if(I.tool_behaviour == TOOL_MULTITOOL) - if(!multitool_check_buffer(user, I)) - return - var/obj/item/multitool/M = I - if(istype(M.buffer, /obj/machinery/quantumpad)) - if(M.buffer == src) - balloon_alert(user, "cannot link to self!") - return TRUE - else - linked_pad = M.buffer - balloon_alert(user, "data uploaded from buffer") - return TRUE - else - balloon_alert(user, "no quantum pad data found!") - return TRUE + multi_tool.set_buffer(src) + balloon_alert(user, "saved to multitool buffer") + to_chat(user, span_notice("You save the data in [multi_tool] buffer. It can now be saved to pads with closed panels.")) + return ITEM_INTERACT_SUCCESS + + if(istype(multi_tool.buffer, /obj/machinery/quantumpad)) + if(multi_tool.buffer == src) + balloon_alert(user, "cannot link to self!") + return ITEM_INTERACT_BLOCKING + linked_pad = multi_tool.buffer + balloon_alert(user, "data uploaded from buffer") + return ITEM_INTERACT_SUCCESS + + balloon_alert(user, "no quantum pad data found!") + return NONE + +/obj/machinery/quantumpad/attackby(obj/item/weapon, mob/user, params) + if(default_deconstruction_screwdriver(user, "qpad-idle-open", "qpad-idle", weapon)) + return - else if(istype(I, /obj/item/quantum_keycard)) - var/obj/item/quantum_keycard/K = I + if(istype(weapon, /obj/item/quantum_keycard)) + var/obj/item/quantum_keycard/K = weapon if(K.qpad) to_chat(user, span_notice("You insert [K] into [src]'s card slot, activating it.")) interact(user, K.qpad) @@ -93,7 +86,7 @@ to_chat(user, span_notice("You complete the link between [K] and [src].")) K.set_pad(src) - if(default_deconstruction_crowbar(I)) + if(default_deconstruction_crowbar(weapon)) return return ..() diff --git a/code/game/machinery/recharger.dm b/code/game/machinery/recharger.dm index f310c1afd3ea2..7454f18551150 100644 --- a/code/game/machinery/recharger.dm +++ b/code/game/machinery/recharger.dm @@ -47,7 +47,7 @@ if(!status_display_message_shown) . += span_notice("The status display reads:") - var/obj/item/stock_parts/cell/charging_cell = charging.get_cell() + var/obj/item/stock_parts/power_store/charging_cell = charging.get_cell() if(charging_cell) . += span_notice("- \The [charging]'s cell is at [charging_cell.percent()]%.") return @@ -143,7 +143,7 @@ using_power = FALSE if(isnull(charging)) return PROCESS_KILL - var/obj/item/stock_parts/cell/charging_cell = charging.get_cell() + var/obj/item/stock_parts/power_store/charging_cell = charging.get_cell() if(charging_cell) if(charging_cell.charge < charging_cell.maxcharge) charge_cell(charging_cell.chargerate * recharge_coeff * seconds_per_tick, charging_cell) diff --git a/code/game/machinery/rechargestation.dm b/code/game/machinery/rechargestation.dm index b328d99284d0e..45610b47e7a42 100644 --- a/code/game/machinery/rechargestation.dm +++ b/code/game/machinery/rechargestation.dm @@ -8,7 +8,7 @@ req_access = list(ACCESS_ROBOTICS) state_open = TRUE circuit = /obj/item/circuitboard/machine/cyborgrecharger - occupant_typecache = list(/mob/living/silicon/robot, /mob/living/carbon/human) + occupant_typecache = list(/mob/living/silicon/robot, /mob/living/carbon/human, /mob/living/circuit_drone) processing_flags = NONE var/recharge_speed var/repairs @@ -54,13 +54,18 @@ * Mobs & borgs invoke this through a callback to recharge their cells * Arguments * - * * obj/item/stock_parts/cell/target - the cell to charge, optional if provided else will draw power used directly + * * obj/item/stock_parts/power_store/cell/target - the cell to charge, optional if provided else will draw power used directly * * seconds_per_tick - supplied from process() */ -/obj/machinery/recharge_station/proc/charge_target_cell(obj/item/stock_parts/cell/target, seconds_per_tick) +/obj/machinery/recharge_station/proc/charge_target_cell(obj/item/stock_parts/power_store/cell/target, seconds_per_tick) PRIVATE_PROC(TRUE) - return charge_cell(recharge_speed * seconds_per_tick, target, grid_only = TRUE) + //charge the cell, account for heat loss from work done + var/charge_given = charge_cell(recharge_speed * seconds_per_tick, target, grid_only = TRUE) + if(charge_given) + use_energy((charge_given + active_power_usage) * 0.01) + + return charge_given /obj/machinery/recharge_station/RefreshParts() . = ..() @@ -70,7 +75,7 @@ recharge_speed += 5e-3 * capacitor.tier for(var/datum/stock_part/servo/servo in component_parts) repairs += servo.tier - 1 - for(var/obj/item/stock_parts/cell/cell in component_parts) + for(var/obj/item/stock_parts/power_store/cell in component_parts) recharge_speed *= cell.maxcharge /obj/machinery/recharge_station/examine(mob/user) @@ -88,12 +93,6 @@ else //Turned on begin_processing() - -/obj/machinery/recharge_station/process(seconds_per_tick) - if(occupant) - process_occupant(seconds_per_tick) - return 1 - /obj/machinery/recharge_station/relaymove(mob/living/user, direction) if(user.stat) return @@ -174,11 +173,8 @@ icon_state = "borgcharger[state_open ? 0 : (occupant ? 1 : 2)]" return ..() -/obj/machinery/recharge_station/proc/process_occupant(seconds_per_tick) - if(!occupant) - return - - if(!use_energy(active_power_usage * seconds_per_tick, force = FALSE)) +/obj/machinery/recharge_station/process(seconds_per_tick) + if(QDELETED(occupant) || !is_operational) return SEND_SIGNAL(occupant, COMSIG_PROCESS_BORGCHARGER_OCCUPANT, charge_cell, seconds_per_tick, repairs, sendmats) diff --git a/code/game/machinery/recycler.dm b/code/game/machinery/recycler.dm index 9df7d584f427a..28aae48886621 100644 --- a/code/game/machinery/recycler.dm +++ b/code/game/machinery/recycler.dm @@ -21,7 +21,7 @@ /obj/machinery/recycler/Initialize(mapload) materials = AddComponent( /datum/component/material_container, \ - DSmaterials.materials_by_category[MAT_CATEGORY_SILO], \ + SSmaterials.materials_by_category[MAT_CATEGORY_SILO], \ INFINITY, \ MATCONTAINER_NO_INSERT \ ) diff --git a/code/game/machinery/shieldgen.dm b/code/game/machinery/shieldgen.dm index 4e7a80e166388..d961c68dc8ed6 100644 --- a/code/game/machinery/shieldgen.dm +++ b/code/game/machinery/shieldgen.dm @@ -286,6 +286,10 @@ icon = 'icons/obj/machines/shield_generator.dmi' icon_state = "shield_wall_gen" base_icon_state = "shield_wall_gen" + light_on = FALSE + light_range = 2.5 + light_power = 2 + light_color = LIGHT_COLOR_BLUE anchored = FALSE density = TRUE req_access = list(ACCESS_TELEPORTER) @@ -325,6 +329,10 @@ RegisterSignal(src, COMSIG_ATOM_SINGULARITY_TRY_MOVE, PROC_REF(block_singularity_if_active)) set_wires(new /datum/wires/shieldwallgen(src)) +/obj/machinery/power/shieldwallgen/update_appearance(updates) + . = ..() + set_light(l_on = !!active) + /obj/machinery/power/shieldwallgen/update_icon_state() icon_state = "[base_icon_state][active ? "_on" : ""]" return ..() @@ -530,7 +538,10 @@ icon_state = "shieldwall" density = TRUE resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF - light_range = 3 + light_range = 2.5 + light_power = 0.7 + light_color = LIGHT_COLOR_BLUE + var/primary_direction = NONE var/needs_power = FALSE var/obj/machinery/power/shieldwallgen/gen_primary var/obj/machinery/power/shieldwallgen/gen_secondary @@ -554,6 +565,10 @@ gen_secondary = null return ..() +/obj/machinery/shieldwall/update_overlays() + . = ..() + . += emissive_appearance(icon, icon_state, src, alpha = 200) + /obj/machinery/shieldwall/process() if(needs_power) if(!gen_primary || !gen_primary.active || !gen_secondary || !gen_secondary.active) diff --git a/code/game/machinery/sleepers.dm b/code/game/machinery/sleepers.dm index 33e255badb244..63291035e784f 100644 --- a/code/game/machinery/sleepers.dm +++ b/code/game/machinery/sleepers.dm @@ -7,6 +7,7 @@ density = FALSE obj_flags = BLOCKS_CONSTRUCTION state_open = TRUE + interaction_flags_mouse_drop = NEED_DEXTERITY circuit = /obj/item/circuitboard/machine/sleeper payment_department = ACCOUNT_MED @@ -114,9 +115,8 @@ if(is_operational && occupant) open_machine() - -/obj/machinery/sleeper/MouseDrop_T(mob/target, mob/user) - if(HAS_TRAIT(user, TRAIT_UI_BLOCKED) || !Adjacent(user) || !user.Adjacent(target) || !iscarbon(target) || !ISADVANCEDTOOLUSER(user)) +/obj/machinery/sleeper/mouse_drop_receive(atom/target, mob/user, params) + if(!iscarbon(target)) return close_machine(target) @@ -309,6 +309,12 @@ /obj/machinery/sleeper/syndie/fullupgrade circuit = /obj/item/circuitboard/machine/sleeper/fullupgrade +///Fully upgraded, not deconstructable, while using the normal sprite. +/obj/machinery/sleeper/syndie/fullupgrade/nt + icon_state = "sleeper" + base_icon_state = "sleeper" + deconstructable = FALSE + /obj/machinery/sleeper/self_control controls_inside = TRUE diff --git a/code/game/machinery/spaceheater.dm b/code/game/machinery/spaceheater.dm index 0ddebbf3ee30f..a74d7456ed8ef 100644 --- a/code/game/machinery/spaceheater.dm +++ b/code/game/machinery/spaceheater.dm @@ -2,7 +2,7 @@ #define HEATER_MODE_HEAT "heat" #define HEATER_MODE_COOL "cool" #define HEATER_MODE_AUTO "auto" -#define BASE_HEATING_ENERGY (40 KILO JOULES) +#define BASE_HEATING_ENERGY (STANDARD_CELL_RATE * 0.1) /obj/machinery/space_heater anchored = FALSE @@ -20,7 +20,7 @@ //We don't use area power, we always use the cell use_power = NO_POWER_USE ///The cell we spawn with - var/obj/item/stock_parts/cell/cell = /obj/item/stock_parts/cell + var/obj/item/stock_parts/power_store/cell = /obj/item/stock_parts/power_store/cell/high ///Is the machine on? var/on = FALSE ///What is the mode we are in now? @@ -30,7 +30,7 @@ ///The temperature we trying to get to var/target_temperature = T20C ///How much heat/cold we can deliver - var/heating_energy = 40 KILO JOULES + var/heating_energy = BASE_HEATING_ENERGY ///How efficiently we can deliver that heat/cold (higher indicates less cell consumption) var/efficiency = 20 ///The amount of degrees above and below the target temperature for us to change mode to heater or cooler @@ -208,7 +208,7 @@ if(default_deconstruction_crowbar(I)) return TRUE - if(istype(I, /obj/item/stock_parts/cell)) + if(istype(I, /obj/item/stock_parts/power_store/cell)) if(!panel_open) to_chat(user, span_warning("The hatch must be open to insert a power cell!")) return @@ -389,7 +389,7 @@ add_fingerprint(user) if(default_deconstruction_crowbar(item)) return - if(istype(item, /obj/item/stock_parts/cell)) + if(istype(item, /obj/item/stock_parts/power_store/cell)) if(cell) to_chat(user, span_warning("There is already a power cell inside!")) return @@ -413,7 +413,7 @@ //Dropper tools if(beaker) if(is_type_in_list(item, list(/obj/item/reagent_containers/dropper, /obj/item/ph_meter, /obj/item/ph_paper, /obj/item/reagent_containers/syringe))) - item.afterattack(beaker, user, 1) + item.interact_with_atom(beaker, user) return /obj/machinery/space_heater/improvised_chem_heater/on_deconstruction(disassembled = TRUE) @@ -468,7 +468,7 @@ for(var/datum/stock_part/capacitor/capacitor in component_parts) capacitors_rating += capacitor.tier - heating_energy = lasers_rating * 20000 + heating_energy = lasers_rating * BASE_HEATING_ENERGY settable_temperature_range = capacitors_rating * 50 //-20 - 80 at base efficiency = (capacitors_rating + 1) * 10 diff --git a/code/game/machinery/status_display.dm b/code/game/machinery/status_display.dm index c1be0917bf352..cdc3109c346fb 100644 --- a/code/game/machinery/status_display.dm +++ b/code/game/machinery/status_display.dm @@ -8,7 +8,7 @@ #define LINE1_Y -4 #define LINE2_X 1 #define LINE2_Y -11 -#define STATUS_DISPLAY_FONT_DATUM /datum/font/tiny_unicode/size_12pt +GLOBAL_DATUM_INIT(status_font, /datum/font, new /datum/font/tiny_unicode/size_12pt()) /// Status display which can show images and scrolling text. /obj/machinery/status_display @@ -22,8 +22,11 @@ density = FALSE layer = ABOVE_WINDOW_LAYER - var/obj/effect/overlay/status_display_text/message1_overlay - var/obj/effect/overlay/status_display_text/message2_overlay + // We store overlays as keys, so multiple displays can use the same object safely + /// String key we use to index the first effect overlay displayed on us + var/message_key_1 + /// String key we use to index the second effect overlay displayed on us + var/message_key_2 var/current_picture = "" var/current_mode = SD_BLANK var/message1 = "" @@ -109,10 +112,26 @@ * Don't call this in subclasses. */ /obj/machinery/status_display/proc/remove_messages() - if(message1_overlay) - QDEL_NULL(message1_overlay) - if(message2_overlay) - QDEL_NULL(message2_overlay) + var/obj/effect/overlay/status_display_text/overlay_1 = get_status_text(message_key_1) + message_key_1 = null + overlay_1?.disown(src) + var/obj/effect/overlay/status_display_text/overlay_2 = get_status_text(message_key_2) + message_key_2 = null + overlay_2?.disown(src) + +// List in the form key -> status display that shows said key +GLOBAL_LIST_EMPTY(key_to_status_display) + +/proc/generate_status_text(line_y, message, x_offset, text_color, header_text_color, line_pair) + var/key = "[line_y]-[message]-[x_offset]-[text_color]-[header_text_color]-[line_pair]" + var/obj/effect/overlay/status_display_text/new_overlay = GLOB.key_to_status_display[key] + if(!new_overlay) + new_overlay = new(null, line_y, message, text_color, header_text_color, x_offset, line_pair, key) + GLOB.key_to_status_display[key] = new_overlay + return new_overlay + +/proc/get_status_text(key) + return GLOB.key_to_status_display[key] /** * Create/update message overlay. @@ -125,19 +144,16 @@ * * message - the new message text. * Returns new /obj/effect/overlay/status_display_text or null if unchanged. */ -/obj/machinery/status_display/proc/update_message(obj/effect/overlay/status_display_text/overlay, line_y, message, x_offset, line_pair) - if(overlay && message == overlay.message) - return null +/obj/machinery/status_display/proc/update_message(current_key, line_y, message, x_offset, line_pair) + var/obj/effect/overlay/status_display_text/current_overlay = get_status_text(current_key) + var/obj/effect/overlay/status_display_text/new_overlay = generate_status_text(line_y, message, x_offset, text_color, header_text_color, line_pair) - if(overlay) - qdel(overlay) + if(current_overlay == new_overlay) + return current_key - var/obj/effect/overlay/status_display_text/new_status_display_text = new(src, line_y, message, text_color, header_text_color, x_offset, line_pair) - // Draw our object visually "in front" of this display, taking advantage of sidemap - new_status_display_text.pixel_y = -32 - new_status_display_text.pixel_z = 32 - vis_contents += new_status_display_text - return new_status_display_text + current_overlay?.disown(src) + new_overlay.own(src) + return new_overlay.status_key /obj/machinery/status_display/update_appearance(updates=ALL) . = ..() @@ -171,17 +187,12 @@ var/line1_metric var/line2_metric var/line_pair - var/datum/font/display_font = new STATUS_DISPLAY_FONT_DATUM() - line1_metric = display_font.get_metrics(message1) - line2_metric = display_font.get_metrics(message2) + line1_metric = GLOB.status_font.get_metrics(message1) + line2_metric = GLOB.status_font.get_metrics(message2) line_pair = (line1_metric > line2_metric ? line1_metric : line2_metric) - var/overlay = update_message(message1_overlay, LINE1_Y, message1, LINE1_X, line_pair) - if(overlay) - message1_overlay = overlay - overlay = update_message(message2_overlay, LINE2_Y, message2, LINE2_X, line_pair) - if(overlay) - message2_overlay = overlay + message_key_1 = update_message(message_key_1, LINE1_Y, message1, LINE1_X, line_pair) + message_key_2 = update_message(message_key_2, LINE2_Y, message2, LINE2_X, line_pair) // Turn off backlight if message is blank if(message1 == "" && message2 == "") @@ -215,6 +226,8 @@ /obj/machinery/status_display/examine(mob/user) . = ..() + var/obj/effect/overlay/status_display_text/message1_overlay = get_status_text(message_key_1) + var/obj/effect/overlay/status_display_text/message2_overlay = get_status_text(message_key_2) if (message1_overlay || message2_overlay) . += "The display says:" if (message1_overlay.message) @@ -247,30 +260,37 @@ /obj/effect/overlay/status_display_text icon = 'icons/obj/machines/status_display.dmi' vis_flags = VIS_INHERIT_LAYER | VIS_INHERIT_PLANE | VIS_INHERIT_ID + // physically shift down to render correctly + pixel_y = -32 + pixel_z = 32 /// The message this overlay is displaying. var/message + /// Amount of usage this overlay is getting + var/use_count = 0 + /// The status key we represent + var/status_key // If the line is short enough to not marquee, and it matches this, it's a header. var/static/regex/header_regex = regex("^-.*-$") -/obj/effect/overlay/status_display_text/Initialize(mapload, yoffset, line, text_color, header_text_color, xoffset = 0, line_pair) +/obj/effect/overlay/status_display_text/Initialize(mapload, maptext_y, message, text_color, header_text_color, xoffset = 0, line_pair, status_key) . = ..() - maptext_y = yoffset - message = line + src.maptext_y = maptext_y + src.message = message + src.status_key = status_key - var/datum/font/display_font = new STATUS_DISPLAY_FONT_DATUM() - var/line_width = display_font.get_metrics(line) + var/line_width = GLOB.status_font.get_metrics(message) if(line_width > MAX_STATIC_WIDTH) // Marquee text - var/marquee_message = "[line] [line] [line]" + var/marquee_message = "[message] [message] [message]" // Width of full content. Must of these is never revealed unless the user inputted a single character. - var/full_marquee_width = display_font.get_metrics("[marquee_message] ") + var/full_marquee_width = GLOB.status_font.get_metrics("[marquee_message] ") // We loop after only this much has passed. - var/looping_marquee_width = (display_font.get_metrics("[line] ]") - SCROLL_PADDING) + var/looping_marquee_width = (GLOB.status_font.get_metrics("[message] ]") - SCROLL_PADDING) maptext = generate_text(marquee_message, center = FALSE, text_color = text_color) maptext_width = full_marquee_width @@ -285,10 +305,28 @@ animate(maptext_x = MAX_STATIC_WIDTH, time = 0) else // Centered text - var/color = header_regex.Find(line) ? header_text_color : text_color - maptext = generate_text(line, center = TRUE, text_color = color) + var/color = header_regex.Find(message) ? header_text_color : text_color + maptext = generate_text(message, center = TRUE, text_color = color) maptext_x = xoffset //Defaults to 0, this would be centered unless overided +/obj/effect/overlay/status_display_text/Destroy(force) + GLOB.key_to_status_display -= status_key + return ..() + +/// Status displays are static, shared by everyone who needs them +/// This marks us as being used by one more guy +/obj/effect/overlay/status_display_text/proc/own(atom/movable/owned_by) + owned_by.vis_contents += src + use_count += 1 + +/// Status displays are static, shared by everyone who needs them +/// This marks us as no longer being used by a guy +/obj/effect/overlay/status_display_text/proc/disown(atom/movable/disowned_by) + disowned_by.vis_contents -= src + use_count -= 1 + if(use_count <= 0) + qdel(src) + /** * Generate the actual maptext. * Arguments: @@ -562,6 +600,4 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/status_display/random_message, 32) #undef LINE1_Y #undef LINE2_X #undef LINE2_Y -#undef STATUS_DISPLAY_FONT_DATUM - #undef SCROLL_PADDING diff --git a/code/game/machinery/suit_storage_unit.dm b/code/game/machinery/suit_storage_unit.dm index a5e301c21680b..6b04b2c6f340d 100644 --- a/code/game/machinery/suit_storage_unit.dm +++ b/code/game/machinery/suit_storage_unit.dm @@ -9,6 +9,7 @@ power_channel = AREA_USAGE_EQUIP density = TRUE obj_flags = BLOCKS_CONSTRUCTION // Becomes undense when the unit is open + interaction_flags_mouse_drop = NEED_DEXTERITY max_integrity = 250 req_access = list() state_open = FALSE @@ -446,13 +447,9 @@ image.color = COLOR_RED return image -/obj/machinery/suit_storage_unit/MouseDrop_T(atom/A, mob/living/user) - if(!istype(user) || user.stat || !Adjacent(user) || !Adjacent(A) || !isliving(A)) +/obj/machinery/suit_storage_unit/mouse_drop_receive(atom/A, mob/living/user, params) + if(!isliving(A)) return - if(isliving(user)) - var/mob/living/L = user - if(L.body_position == LYING_DOWN) - return var/mob/living/target = A if(!state_open) to_chat(user, span_warning("The unit's doors are shut!")) @@ -556,7 +553,7 @@ /obj/machinery/suit_storage_unit/process(seconds_per_tick) var/list/cells_to_charge = list() for(var/obj/item/charging in list(mod, suit, helmet, mask, storage)) - var/obj/item/stock_parts/cell/cell_charging = charging.get_cell() + var/obj/item/stock_parts/power_store/cell_charging = charging.get_cell() if(!istype(cell_charging) || cell_charging.charge == cell_charging.maxcharge) continue @@ -567,7 +564,7 @@ return var/charge_per_item = (final_charge_rate * seconds_per_tick) / cell_count - for(var/obj/item/stock_parts/cell/cell as anything in cells_to_charge) + for(var/obj/item/stock_parts/power_store/cell as anything in cells_to_charge) charge_cell(charge_per_item, cell, grid_only = TRUE) /obj/machinery/suit_storage_unit/proc/shock(mob/user, prb) @@ -702,7 +699,7 @@ else balloon_alert(user, "set to [choice]") - else if(!state_open && istype(weapon, /obj/item/pen)) + else if(!state_open && IS_WRITING_UTENSIL(weapon)) if(locked) balloon_alert(user, "unlock first!") return diff --git a/code/game/machinery/syndicatebomb.dm b/code/game/machinery/syndicatebomb.dm index 154b03e0f988f..e4f7b0a8338b8 100644 --- a/code/game/machinery/syndicatebomb.dm +++ b/code/game/machinery/syndicatebomb.dm @@ -606,7 +606,7 @@ var/datum/radial_menu_choice/null_choice = new null_choice.name = DIMENSION_CHOICE_RANDOM choosable_dimensions[DIMENSION_CHOICE_RANDOM] = null_choice - for(var/datum/dimension_theme/theme as anything in DSmaterials.dimensional_themes) + for(var/datum/dimension_theme/theme as anything in SSmaterials.dimensional_themes) var/datum/radial_menu_choice/theme_choice = new theme_choice.image = image(initial(theme.icon), initial(theme.icon_state)) theme_choice.name = initial(theme.name) @@ -628,21 +628,21 @@ /obj/item/bombcore/dimensional/detonate() var/list/affected_turfs = circle_range_turfs(src, range_heavy) - var/theme_count = length(DSmaterials.dimensional_themes) + var/theme_count = length(SSmaterials.dimensional_themes) var/num_affected = 0 for(var/turf/affected as anything in affected_turfs) var/datum/dimension_theme/theme_to_use if(isnull(chosen_theme)) - theme_to_use = DSmaterials.dimensional_themes[DSmaterials.dimensional_themes[rand(1, theme_count)]] + theme_to_use = SSmaterials.dimensional_themes[SSmaterials.dimensional_themes[rand(1, theme_count)]] else - theme_to_use = DSmaterials.dimensional_themes[chosen_theme] + theme_to_use = SSmaterials.dimensional_themes[chosen_theme] if(!theme_to_use.can_convert(affected)) continue num_affected++ var/skip_sound = TRUE if(num_affected % 5) //makes it play the sound more sparingly skip_sound = FALSE - var/time_mult = round(get_dist_euclidian(get_turf(src), affected)) + 1 + var/time_mult = round(get_dist_euclidean(get_turf(src), affected)) + 1 addtimer(CALLBACK(theme_to_use, TYPE_PROC_REF(/datum/dimension_theme, apply_theme), affected, skip_sound, TRUE), 0.1 SECONDS * time_mult) qdel(src) diff --git a/code/game/machinery/telecomms/computers/message.dm b/code/game/machinery/telecomms/computers/message.dm index 1998654df00b1..a38f18231fb76 100644 --- a/code/game/machinery/telecomms/computers/message.dm +++ b/code/game/machinery/telecomms/computers/message.dm @@ -268,6 +268,9 @@ ui = new(user, src, "MessageMonitor", name) ui.open() +/obj/machinery/computer/message_monitor/ui_assets(mob/user) + . = ..() + . += get_asset_datum(/datum/asset/spritesheet/chat) #undef MSG_MON_SCREEN_MAIN #undef MSG_MON_SCREEN_LOGS diff --git a/code/game/machinery/telecomms/machine_interactions.dm b/code/game/machinery/telecomms/machine_interactions.dm index 5086f7e91a7f1..fb68631b76676 100644 --- a/code/game/machinery/telecomms/machine_interactions.dm +++ b/code/game/machinery/telecomms/machine_interactions.dm @@ -246,19 +246,19 @@ /// Returns a multitool from a user depending on their mobtype. /obj/machinery/telecomms/proc/get_multitool(mob/user) - var/obj/item/multitool/multitool = null - // Let's double check - if(!HAS_SILICON_ACCESS(user) && istype(user.get_active_held_item(), /obj/item/multitool)) - multitool = user.get_active_held_item() - else if(isAI(user)) + . = null + if(isAI(user)) var/mob/living/silicon/ai/U = user - multitool = U.aiMulti - else if(iscyborg(user) && in_range(user, src)) - if(istype(user.get_active_held_item(), /obj/item/multitool)) - multitool = user.get_active_held_item() - return multitool - -/obj/machinery/telecomms/proc/canAccess(mob/user) - if(HAS_SILICON_ACCESS(user) || in_range(user, src)) - return TRUE - return FALSE + return U.aiMulti + + var/obj/item/held_item = user.get_active_held_item() + if(QDELETED(held_item)) + return + held_item = held_item.get_proxy_attacker_for(src, user) //for borgs omni tool + if(held_item.tool_behaviour != TOOL_MULTITOOL) + return + + if(!HAS_SILICON_ACCESS(user)) + return held_item + if(iscyborg(user) && in_range(user, src)) + return held_item diff --git a/code/game/machinery/teleporter.dm b/code/game/machinery/teleporter.dm index 972497da9b316..c46f6b351543d 100644 --- a/code/game/machinery/teleporter.dm +++ b/code/game/machinery/teleporter.dm @@ -73,22 +73,25 @@ com.target_ref = null visible_message(span_alert("Cannot authenticate locked on coordinates. Please reinstate coordinate matrix.")) return - if (ismovable(M)) - if(do_teleport(M, target, channel = TELEPORT_CHANNEL_BLUESPACE)) - use_energy(active_power_usage) - if(!calibrated && prob(30 - ((accuracy) * 10))) //oh dear a problem - if(ishuman(M))//don't remove people from the round randomly you jerks - var/mob/living/carbon/human/human = M - if(!(human.mob_biotypes & (MOB_ROBOTIC|MOB_MINERAL|MOB_UNDEAD|MOB_SPIRIT))) - var/datum/species/species_to_transform = /datum/species/fly - if(check_holidays(MOTH_WEEK)) - species_to_transform = /datum/species/moth - if(human.dna && human.dna.species.id != initial(species_to_transform.id)) - to_chat(M, span_hear("You hear a buzzing in your ears.")) - human.set_species(species_to_transform) - human.log_message("was turned into a [initial(species_to_transform.name)] through [src].", LOG_GAME) - calibrated = FALSE - return + if(!ismovable(M)) + return + var/turf/start_turf = get_turf(M) + if(!do_teleport(M, target, channel = TELEPORT_CHANNEL_BLUESPACE)) + return + playsound(loc, SFX_PORTAL_ENTER, 50, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) + use_energy(active_power_usage) + new /obj/effect/temp_visual/portal_animation(start_turf, src, M) + if(!calibrated && ishuman(M) && prob(30 - ((accuracy) * 10))) //oh dear a problem + var/mob/living/carbon/human/human = M + if(!(human.mob_biotypes & (MOB_ROBOTIC|MOB_MINERAL|MOB_UNDEAD|MOB_SPIRIT))) + var/datum/species/species_to_transform = /datum/species/fly + if(check_holidays(MOTH_WEEK)) + species_to_transform = /datum/species/moth + if(human.dna && human.dna.species.id != initial(species_to_transform.id)) + to_chat(M, span_hear("You hear a buzzing in your ears.")) + human.set_species(species_to_transform) + human.log_message("was turned into a [initial(species_to_transform.name)] through [src].", LOG_GAME) + calibrated = FALSE /obj/machinery/teleport/hub/update_icon_state() icon_state = "[base_icon_state][panel_open ? "-o" : (is_ready() ? 1 : 0)]" @@ -159,24 +162,25 @@ teleporter_console = null return ..() +/obj/machinery/teleport/station/multitool_act(mob/living/user, obj/item/multitool/tool) + . = NONE + + if(panel_open) + tool.set_buffer(src) + balloon_alert(user, "saved to multitool buffer") + return ITEM_INTERACT_SUCCESS + + if(!istype(tool.buffer, /obj/machinery/teleport/station) || tool.buffer == src) + return ITEM_INTERACT_BLOCKING + + if(linked_stations.len < efficiency) + linked_stations.Add(tool.buffer) + tool.set_buffer(null) + balloon_alert(user, "data uploaded from buffer") + return ITEM_INTERACT_SUCCESS + /obj/machinery/teleport/station/attackby(obj/item/W, mob/user, params) - if(W.tool_behaviour == TOOL_MULTITOOL) - if(!multitool_check_buffer(user, W)) - return - var/obj/item/multitool/M = W - if(panel_open) - M.set_buffer(src) - balloon_alert(user, "saved to multitool buffer") - else - if(M.buffer && istype(M.buffer, /obj/machinery/teleport/station) && M.buffer != src) - if(linked_stations.len < efficiency) - linked_stations.Add(M.buffer) - M.set_buffer(null) - balloon_alert(user, "data uploaded from buffer") - else - to_chat(user, span_alert("This station can't hold more information, try to use better parts.")) - return - else if(default_deconstruction_screwdriver(user, "controller-o", "controller", W)) + if(default_deconstruction_screwdriver(user, "controller-o", "controller", W)) update_appearance() return diff --git a/code/game/machinery/transformer.dm b/code/game/machinery/transformer.dm index ecb7ef941aad8..238994004ded0 100644 --- a/code/game/machinery/transformer.dm +++ b/code/game/machinery/transformer.dm @@ -101,7 +101,7 @@ use_energy(active_power_usage) // Use a lot of power. var/mob/living/silicon/robot/new_borg = victim.Robotize() - new_borg.cell = new /obj/item/stock_parts/cell/upgraded/plus(new_borg, robot_cell_charge) + new_borg.cell = new /obj/item/stock_parts/power_store/cell/upgraded/plus(new_borg, robot_cell_charge) // So he can't jump out the gate right away. new_borg.SetLockdown() diff --git a/code/game/machinery/washing_machine.dm b/code/game/machinery/washing_machine.dm index 6ae82fd2654e4..21804def7e361 100644 --- a/code/game/machinery/washing_machine.dm +++ b/code/game/machinery/washing_machine.dm @@ -276,13 +276,9 @@ GLOBAL_LIST_INIT(dye_registry, list( new /obj/item/food/meat/slab/corgi(loc) qdel(src) -/mob/living/simple_animal/pet/machine_wash(obj/machinery/washing_machine/washer) - washer.bloody_mess = TRUE - investigate_log("has been gibbed by a washing machine.", INVESTIGATE_DEATHS) - gib() - /mob/living/basic/pet/machine_wash(obj/machinery/washing_machine/washer) washer.bloody_mess = TRUE + investigate_log("has been gibbed by a washing machine.", INVESTIGATE_DEATHS) gib() /obj/item/machine_wash(obj/machinery/washing_machine/washer) @@ -337,33 +333,33 @@ GLOBAL_LIST_INIT(dye_registry, list( default_unfasten_wrench(user, tool) return ITEM_INTERACT_SUCCESS -/obj/machinery/washing_machine/attackby(obj/item/W, mob/living/user, params) - if(default_deconstruction_screwdriver(user, null, null, W)) - update_appearance() - return - - else if(!user.combat_mode) - if (!state_open) - to_chat(user, span_warning("Open the door first!")) - return TRUE - - if(bloody_mess) - to_chat(user, span_warning("[src] must be cleaned up first!")) - return TRUE - - if(contents.len >= max_wash_capacity) - to_chat(user, span_warning("The washing machine is full!")) - return TRUE - - if(!user.transferItemToLoc(W, src)) - to_chat(user, span_warning("\The [W] is stuck to your hand, you cannot put it in the washing machine!")) - return TRUE - if(W.dye_color) - color_source = W +/obj/machinery/washing_machine/screwdriver_act(mob/living/user, obj/item/tool) + if (!state_open) + default_deconstruction_screwdriver(user, null, null, tool) update_appearance() + return ITEM_INTERACT_SUCCESS + return ITEM_INTERACT_BLOCKING + +/obj/machinery/washing_machine/item_interaction(mob/living/user, obj/item/item, list/modifiers) + if(user.combat_mode) + return NONE + if (!state_open) + to_chat(user, span_warning("Open the door first!")) + return ITEM_INTERACT_BLOCKING + if(bloody_mess) + to_chat(user, span_warning("[src] must be cleaned up first!")) + return ITEM_INTERACT_BLOCKING + if(contents.len >= max_wash_capacity) + to_chat(user, span_warning("The washing machine is full!")) + return ITEM_INTERACT_BLOCKING + if(!user.transferItemToLoc(item, src)) + to_chat(user, span_warning("\The [item] is stuck to your hand, you cannot put it in the washing machine!")) + return ITEM_INTERACT_BLOCKING + if(item.dye_color) + color_source = item + update_appearance() + return ITEM_INTERACT_SUCCESS - else - return ..() /obj/machinery/washing_machine/attack_hand(mob/living/user, list/modifiers) . = ..() @@ -378,7 +374,7 @@ GLOBAL_LIST_INIT(dye_registry, list( if(L.buckled || L.has_buckled_mobs()) return if(state_open) - if(istype(L, /mob/living/simple_animal/pet) || istype(L, /mob/living/basic/pet)) + if(istype(L, /mob/living/basic/pet)) L.forceMove(src) update_appearance() return diff --git a/code/game/objects/buckling.dm b/code/game/objects/buckling.dm index e2ad3af956a2b..fd57b24da099f 100644 --- a/code/game/objects/buckling.dm +++ b/code/game/objects/buckling.dm @@ -42,8 +42,7 @@ else return user_unbuckle_mob(buckled_mobs[1], user) -/atom/movable/MouseDrop_T(mob/living/M, mob/living/user) - . = ..() +/atom/movable/mouse_drop_receive(mob/living/M, mob/user, params) return mouse_buckle_handling(M, user) /** diff --git a/code/game/objects/effects/anomalies/_anomalies.dm b/code/game/objects/effects/anomalies/_anomalies.dm index a3f0b79044b41..ce9bab6a511cc 100644 --- a/code/game/objects/effects/anomalies/_anomalies.dm +++ b/code/game/objects/effects/anomalies/_anomalies.dm @@ -8,7 +8,7 @@ anchored = TRUE light_range = 3 - var/obj/item/assembly/signaler/anomaly/aSignal = /obj/item/assembly/signaler/anomaly + var/obj/item/assembly/signaler/anomaly/anomaly_core = /obj/item/assembly/signaler/anomaly var/area/impact_area var/lifespan = ANOMALY_COUNTDOWN_TIMER @@ -37,12 +37,12 @@ return INITIALIZE_HINT_QDEL src.drops_core = drops_core - if(aSignal) - aSignal = new aSignal(src) - aSignal.code = rand(1,100) - aSignal.anomaly_type = type + if(anomaly_core) + anomaly_core = new anomaly_core(src) + anomaly_core.code = rand(1,100) + anomaly_core.anomaly_type = type - aSignal.set_frequency(sanitize_frequency(rand(MIN_FREE_FREQ, MAX_FREE_FREQ), free = TRUE)) + anomaly_core.set_frequency(sanitize_frequency(rand(MIN_FREE_FREQ, MAX_FREE_FREQ), free = TRUE)) if(new_lifespan) lifespan = new_lifespan @@ -72,7 +72,7 @@ /obj/effect/anomaly/Destroy() STOP_PROCESSING(SSobj, src) QDEL_NULL(countdown) - QDEL_NULL(aSignal) + QDEL_NULL(anomaly_core) return ..() /obj/effect/anomaly/proc/anomalyEffect(seconds_per_tick) @@ -97,21 +97,29 @@ new /obj/effect/particle_effect/fluid/smoke/bad(loc) if(drops_core) - if(isnull(aSignal)) + if(isnull(anomaly_core)) stack_trace("An anomaly ([src]) exists that drops a core, yet has no core!") else - aSignal.forceMove(drop_location()) - aSignal = null + var/anomaly_type = anomaly_core.type + if (SSresearch.is_core_available(anomaly_type)) + SSresearch.increment_existing_anomaly_cores(anomaly_type) + anomaly_core.forceMove(drop_location()) + anomaly_core = null + else // You exceeded the cap sorry + visible_message(span_warning("[anomaly_core] loses its lustre as it falls to the ground, there is too little ambient energy to support another core of this type.")) + new /obj/item/inert_anomaly(drop_location()) + // else, anomaly core gets deleted by qdel(src). qdel(src) -/obj/effect/anomaly/attackby(obj/item/weapon, mob/user, params) - if(weapon.tool_behaviour == TOOL_ANALYZER && aSignal) - to_chat(user, span_notice("Analyzing... [src]'s unstable field is fluctuating along frequency [format_frequency(aSignal.frequency)], code [aSignal.code].")) - return TRUE +/obj/effect/anomaly/analyzer_act(mob/living/user, obj/item/analyzer/tool) + if(!isnull(anomaly_core)) + to_chat(user, span_notice("Analyzing... [src]'s unstable field is fluctuating along frequency [format_frequency(anomaly_core.frequency)], code [anomaly_core.code].")) + return ITEM_INTERACT_SUCCESS + to_chat(user, span_notice("Analyzing... [src]'s unstable field is not fluctuating along a stable frequency.")) + return ITEM_INTERACT_BLOCKING - return ..() ///Stabilize an anomaly, letting it stay around forever or untill destabilizes by a player. An anomaly without a core can't be signalled, but can be destabilized /obj/effect/anomaly/proc/stabilize(anchor = FALSE, has_core = TRUE) @@ -119,6 +127,6 @@ name = (has_core ? "stable " : "hollow ") + name if(!has_core) drops_core = FALSE - QDEL_NULL(aSignal) + QDEL_NULL(anomaly_core) if (anchor) move_chance = 0 diff --git a/code/game/objects/effects/anomalies/anomalies_bioscrambler.dm b/code/game/objects/effects/anomalies/anomalies_bioscrambler.dm index f1034c5541f73..c57a629d85c2b 100644 --- a/code/game/objects/effects/anomalies/anomalies_bioscrambler.dm +++ b/code/game/objects/effects/anomalies/anomalies_bioscrambler.dm @@ -2,7 +2,7 @@ /obj/effect/anomaly/bioscrambler name = "bioscrambler anomaly" icon_state = "bioscrambler" - aSignal = /obj/item/assembly/signaler/anomaly/bioscrambler + anomaly_core = /obj/item/assembly/signaler/anomaly/bioscrambler immortal = TRUE pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE | PASSCLOSEDTURF | PASSMACHINE | PASSSTRUCTURE | PASSDOORS layer = ABOVE_MOB_LAYER @@ -11,9 +11,9 @@ /// Cooldown for every anomaly pulse COOLDOWN_DECLARE(pulse_cooldown) /// How many seconds between each anomaly pulses - var/pulse_delay = 15 SECONDS + var/pulse_delay = 10 SECONDS /// Range of the anomaly pulse - var/range = 5 + var/range = 2 /obj/effect/anomaly/bioscrambler/Initialize(mapload, new_lifespan, drops_core) . = ..() @@ -24,6 +24,8 @@ if(!COOLDOWN_FINISHED(src, pulse_cooldown)) return + new /obj/effect/temp_visual/bioscrambler_wave(get_turf(src)) + playsound(src, 'sound/magic/cosmic_energy.ogg', vol = 50, vary = TRUE) COOLDOWN_START(src, pulse_cooldown, pulse_delay) for(var/mob/living/carbon/nearby in hearers(range, src)) nearby.bioscramble(name) @@ -77,3 +79,20 @@ /obj/effect/anomaly/bioscrambler/docile/update_target() return + +/// Visual effect spawned when the bioscrambler scrambles your bio +/obj/effect/temp_visual/bioscrambler_wave + icon = 'icons/effects/64x64.dmi' + icon_state = "circle_wave" + pixel_x = -16 + pixel_y = -16 + duration = 0.5 SECONDS + color = COLOR_LIME + +/obj/effect/temp_visual/bioscrambler_wave/Initialize(mapload) + transform = matrix().Scale(0.1) + animate(src, transform = matrix().Scale(2), time = duration, flags = ANIMATION_PARALLEL) + animate(src, alpha = 255, time = duration * 0.6, flags = ANIMATION_PARALLEL) + animate(alpha = 0, time = duration * 0.4) + apply_wibbly_filters(src) + return ..() diff --git a/code/game/objects/effects/anomalies/anomalies_bluespace.dm b/code/game/objects/effects/anomalies/anomalies_bluespace.dm index fa88e7d268d61..2ed19adb4f2c8 100644 --- a/code/game/objects/effects/anomalies/anomalies_bluespace.dm +++ b/code/game/objects/effects/anomalies/anomalies_bluespace.dm @@ -4,7 +4,7 @@ icon = 'icons/obj/weapons/guns/projectiles.dmi' icon_state = "bluespace" density = TRUE - aSignal = /obj/item/assembly/signaler/anomaly/bluespace + anomaly_core = /obj/item/assembly/signaler/anomaly/bluespace ///range from which we can teleport someone var/teleport_range = 1 ///Distance we can teleport someone passively @@ -85,7 +85,7 @@ immortal = TRUE teleport_range = 2 teleport_distance = 12 - aSignal = null + anomaly_core = null /obj/effect/anomaly/bluespace/big/Initialize(mapload, new_lifespan, drops_core) . = ..() diff --git a/code/game/objects/effects/anomalies/anomalies_dimensional.dm b/code/game/objects/effects/anomalies/anomalies_dimensional.dm index a4ebfc21f1a8c..53129c0e9ce3f 100644 --- a/code/game/objects/effects/anomalies/anomalies_dimensional.dm +++ b/code/game/objects/effects/anomalies/anomalies_dimensional.dm @@ -2,7 +2,7 @@ /obj/effect/anomaly/dimensional name = "dimensional anomaly" icon_state = "dimensional" - aSignal = /obj/item/assembly/signaler/anomaly/dimensional + anomaly_core = /obj/item/assembly/signaler/anomaly/dimensional immortal = TRUE move_chance = 0 /// Range of effect, if left alone anomaly will convert a 2(range)+1 squared area. @@ -51,7 +51,7 @@ /obj/effect/anomaly/dimensional/proc/prepare_area(new_theme_path) if (!new_theme_path) new_theme_path = pick(subtypesof(/datum/dimension_theme)) - theme = DSmaterials.dimensional_themes[new_theme_path] + theme = SSmaterials.dimensional_themes[new_theme_path] apply_theme_icon() target_turfs = list() diff --git a/code/game/objects/effects/anomalies/anomalies_ectoplasm.dm b/code/game/objects/effects/anomalies/anomalies_ectoplasm.dm index 51a033f515f9c..e6c3e855386b7 100644 --- a/code/game/objects/effects/anomalies/anomalies_ectoplasm.dm +++ b/code/game/objects/effects/anomalies/anomalies_ectoplasm.dm @@ -2,7 +2,7 @@ name = "ectoplasm anomaly" desc = "It looks like the souls of the damned are trying to break into the realm of the living again. How upsetting." icon_state = "ectoplasm" - aSignal = /obj/item/assembly/signaler/anomaly/ectoplasm + anomaly_core = /obj/item/assembly/signaler/anomaly/ectoplasm lifespan = ANOMALY_COUNTDOWN_TIMER + 2 SECONDS //This one takes slightly longer, because it can run away. move_chance = 0 //prevents it from moving around so ghosts can actually move it with decent accuracy diff --git a/code/game/objects/effects/anomalies/anomalies_flux.dm b/code/game/objects/effects/anomalies/anomalies_flux.dm index 91f09095d6f6f..6a4d1e7cf8a3f 100644 --- a/code/game/objects/effects/anomalies/anomalies_flux.dm +++ b/code/game/objects/effects/anomalies/anomalies_flux.dm @@ -2,7 +2,7 @@ name = "flux wave anomaly" icon_state = "flux" density = TRUE - aSignal = /obj/item/assembly/signaler/anomaly/flux + anomaly_core = /obj/item/assembly/signaler/anomaly/flux var/canshock = FALSE var/shockdamage = 20 var/explosive = FLUX_EXPLOSIVE @@ -61,7 +61,7 @@ ///Bigger, meaner, immortal flux anomaly /obj/effect/anomaly/flux/big immortal = TRUE - aSignal = null + anomaly_core = null shockdamage = 30 ///range in whuich we zap diff --git a/code/game/objects/effects/anomalies/anomalies_gravity.dm b/code/game/objects/effects/anomalies/anomalies_gravity.dm index fa7c4f48a36f3..08becc48c7531 100644 --- a/code/game/objects/effects/anomalies/anomalies_gravity.dm +++ b/code/game/objects/effects/anomalies/anomalies_gravity.dm @@ -12,7 +12,7 @@ icon = 'icons/effects/effects.dmi' icon_state = "shield2" density = FALSE - aSignal = /obj/item/assembly/signaler/anomaly/grav + anomaly_core = /obj/item/assembly/signaler/anomaly/grav var/boing = 0 ///Warp effect holder for displacement filter to "pulse" the anomaly var/atom/movable/warp_effect/warp @@ -104,7 +104,7 @@ ///Bigger, meaner, immortal gravity anomaly. although this is just the super grav anomaly but bigger and shattering move force /obj/effect/anomaly/grav/high/big immortal = TRUE - aSignal = null + anomaly_core = null move_force = MOVE_FORCE_OVERPOWERING /obj/effect/anomaly/grav/high/big/Initialize(mapload, new_lifespan, drops_core) diff --git a/code/game/objects/effects/anomalies/anomalies_hallucination.dm b/code/game/objects/effects/anomalies/anomalies_hallucination.dm index a6696070df1c7..4065d8c04a45e 100644 --- a/code/game/objects/effects/anomalies/anomalies_hallucination.dm +++ b/code/game/objects/effects/anomalies/anomalies_hallucination.dm @@ -2,7 +2,7 @@ /obj/effect/anomaly/hallucination name = "hallucination anomaly" icon_state = "hallucination" - aSignal = /obj/item/assembly/signaler/anomaly/hallucination + anomaly_core = /obj/item/assembly/signaler/anomaly/hallucination /// Time passed since the last effect, increased by seconds_per_tick of the SSobj var/ticks = 0 /// How many seconds between each small hallucination pulses diff --git a/code/game/objects/effects/anomalies/anomalies_pyroclastic.dm b/code/game/objects/effects/anomalies/anomalies_pyroclastic.dm index 9cb92a6961de9..6d65990b563dc 100644 --- a/code/game/objects/effects/anomalies/anomalies_pyroclastic.dm +++ b/code/game/objects/effects/anomalies/anomalies_pyroclastic.dm @@ -5,7 +5,7 @@ var/ticks = 0 /// How many seconds between each gas release var/releasedelay = 10 - aSignal = /obj/item/assembly/signaler/anomaly/pyro + anomaly_core = /obj/item/assembly/signaler/anomaly/pyro /obj/effect/anomaly/pyro/Initialize(mapload, new_lifespan, drops_core) . = ..() @@ -46,7 +46,7 @@ ///Bigger, meaner, immortal pyro anomaly /obj/effect/anomaly/pyro/big immortal = TRUE - aSignal = null + anomaly_core = null releasedelay = 2 move_force = MOVE_FORCE_OVERPOWERING diff --git a/code/game/objects/effects/anomalies/anomalies_vortex.dm b/code/game/objects/effects/anomalies/anomalies_vortex.dm index 935522fe90143..0313f63146b52 100644 --- a/code/game/objects/effects/anomalies/anomalies_vortex.dm +++ b/code/game/objects/effects/anomalies/anomalies_vortex.dm @@ -3,7 +3,7 @@ name = "vortex anomaly" icon_state = "vortex" desc = "That's a nice station you have there. It'd be a shame if something happened to it." - aSignal = /obj/item/assembly/signaler/anomaly/vortex + anomaly_core = /obj/item/assembly/signaler/anomaly/vortex /obj/effect/anomaly/bhole/anomalyEffect() ..() diff --git a/code/game/objects/effects/cursor_catcher.dm b/code/game/objects/effects/cursor_catcher.dm index 3229cd44b7083..a8c19e40be80d 100644 --- a/code/game/objects/effects/cursor_catcher.dm +++ b/code/game/objects/effects/cursor_catcher.dm @@ -8,9 +8,9 @@ var/mob/owner /// Client view size of the scoping mob. var/list/view_list - /// Pixel x we send to the scope component. + /// Pixel x relative to the hovered tile we send to the scope component. var/given_x - /// Pixel y we send to the scope component. + /// Pixel y relative to the hovered tile we send to the scope component. var/given_y /// The turf we send to the scope component. var/turf/given_turf diff --git a/code/game/objects/effects/decals/cleanable.dm b/code/game/objects/effects/decals/cleanable.dm index b0af5c3ca029e..21eff5028b57e 100644 --- a/code/game/objects/effects/decals/cleanable.dm +++ b/code/game/objects/effects/decals/cleanable.dm @@ -84,7 +84,7 @@ qdel(src) return if(W.get_temperature()) //todo: make heating a reagent holder proc - if(istype(W, /obj/item/clothing/mask/cigarette)) + if(istype(W, /obj/item/cigarette)) return else var/hotness = W.get_temperature() diff --git a/code/game/objects/effects/decals/cleanable/aliens.dm b/code/game/objects/effects/decals/cleanable/aliens.dm index fb87f78803600..bf826e207db37 100644 --- a/code/game/objects/effects/decals/cleanable/aliens.dm +++ b/code/game/objects/effects/decals/cleanable/aliens.dm @@ -47,7 +47,7 @@ break return - var/datum/move_loop/loop = DSmove_manager.move(src, direction, delay = delay, timeout = range * delay, priority = MOVEMENT_ABOVE_SPACE_PRIORITY) + var/datum/move_loop/loop = GLOB.move_manager.move(src, direction, delay = delay, timeout = range * delay, priority = MOVEMENT_ABOVE_SPACE_PRIORITY) RegisterSignal(loop, COMSIG_MOVELOOP_POSTPROCESS, PROC_REF(spread_movement_effects)) /obj/effect/decal/cleanable/xenoblood/xgibs/proc/spread_movement_effects(datum/move_loop/has_target/source) diff --git a/code/game/objects/effects/decals/cleanable/humans.dm b/code/game/objects/effects/decals/cleanable/humans.dm index 13a0539b2e275..0f4c9dee3127f 100644 --- a/code/game/objects/effects/decals/cleanable/humans.dm +++ b/code/game/objects/effects/decals/cleanable/humans.dm @@ -97,6 +97,15 @@ /obj/effect/decal/cleanable/trail_holder/can_bloodcrawl_in() return TRUE +// normal version of the above trail holder object for use in less convoluted things +/obj/effect/decal/cleanable/blood/trails + desc = "Looks like a corpse was smeared all over the floor like ketchup. Kinda makes you hungry." + random_icon_states = list("trails_1", "trails_2") + icon_state = "trails_1" + beauty = -50 + dryname = "dried tracks" + drydesc = "Looks like a corpse was smeared all over the floor like ketchup, but it's all dried up and nasty now, ew. You lose some of your appetite." + /obj/effect/decal/cleanable/blood/gibs name = "gibs" desc = "They look bloody and gruesome." @@ -111,8 +120,6 @@ drydesc = "They look bloody and gruesome while some terrible smell fills the air." decal_reagent = /datum/reagent/consumable/liquidgibs reagent_amount = 5 - ///Information about the diseases our streaking spawns - var/list/streak_diseases /obj/effect/decal/cleanable/blood/gibs/Initialize(mapload, list/datum/disease/diseases) . = ..() @@ -120,7 +127,6 @@ RegisterSignal(src, COMSIG_MOVABLE_PIPE_EJECTING, PROC_REF(on_pipe_eject)) /obj/effect/decal/cleanable/blood/gibs/Destroy() - LAZYNULL(streak_diseases) return ..() /obj/effect/decal/cleanable/blood/gibs/replace_decal(obj/effect/decal/cleanable/C) @@ -147,8 +153,7 @@ streak(dirs) /obj/effect/decal/cleanable/blood/gibs/proc/streak(list/directions, mapload=FALSE) - LAZYINITLIST(streak_diseases) - SEND_SIGNAL(src, COMSIG_GIBS_STREAK, directions, streak_diseases) + SEND_SIGNAL(src, COMSIG_GIBS_STREAK, directions) var/direction = pick(directions) var/delay = 2 var/range = pick(0, 200; 1, 150; 2, 50; 3, 17; 50) //the 3% chance of 50 steps is intentional and played for laughs. @@ -163,14 +168,14 @@ break return - var/datum/move_loop/loop = DSmove_manager.move_to(src, get_step(src, direction), delay = delay, timeout = range * delay, priority = MOVEMENT_ABOVE_SPACE_PRIORITY) + var/datum/move_loop/loop = GLOB.move_manager.move_to(src, get_step(src, direction), delay = delay, timeout = range * delay, priority = MOVEMENT_ABOVE_SPACE_PRIORITY) RegisterSignal(loop, COMSIG_MOVELOOP_POSTPROCESS, PROC_REF(spread_movement_effects)) /obj/effect/decal/cleanable/blood/gibs/proc/spread_movement_effects(datum/move_loop/has_target/source) SIGNAL_HANDLER if(NeverShouldHaveComeHere(loc)) return - new /obj/effect/decal/cleanable/blood/splatter(loc, streak_diseases) + new /obj/effect/decal/cleanable/blood/splatter(loc) /obj/effect/decal/cleanable/blood/gibs/up icon_state = "gibup1" @@ -376,7 +381,7 @@ GLOBAL_LIST_EMPTY(bloody_footprints_cache) /// Set the splatter up to fly through the air until it rounds out of steam or hits something /obj/effect/decal/cleanable/blood/hitsplatter/proc/fly_towards(turf/target_turf, range) var/delay = 2 - var/datum/move_loop/loop = DSmove_manager.move_towards(src, target_turf, delay, timeout = delay * range, priority = MOVEMENT_ABOVE_SPACE_PRIORITY, flags = MOVEMENT_LOOP_START_FAST) + var/datum/move_loop/loop = GLOB.move_manager.move_towards(src, target_turf, delay, timeout = delay * range, priority = MOVEMENT_ABOVE_SPACE_PRIORITY, flags = MOVEMENT_LOOP_START_FAST) RegisterSignal(loop, COMSIG_MOVELOOP_PREPROCESS_CHECK, PROC_REF(pre_move)) RegisterSignal(loop, COMSIG_MOVELOOP_POSTPROCESS, PROC_REF(post_move)) RegisterSignal(loop, COMSIG_QDELETING, PROC_REF(loop_done)) diff --git a/code/game/objects/effects/decals/cleanable/misc.dm b/code/game/objects/effects/decals/cleanable/misc.dm index f21bfc4788426..04da0c517b0a6 100644 --- a/code/game/objects/effects/decals/cleanable/misc.dm +++ b/code/game/objects/effects/decals/cleanable/misc.dm @@ -81,11 +81,11 @@ if(T.tiled_dirt) smoothing_flags = SMOOTH_BITMASK QUEUE_SMOOTH(src) - if(smoothing_flags & (SMOOTH_CORNERS|SMOOTH_BITMASK)) + if(smoothing_flags & USES_SMOOTHING) QUEUE_SMOOTH_NEIGHBORS(src) /obj/effect/decal/cleanable/dirt/Destroy() - if(smoothing_flags & (SMOOTH_CORNERS|SMOOTH_BITMASK)) + if(smoothing_flags & USES_SMOOTHING) QUEUE_SMOOTH_NEIGHBORS(src) return ..() @@ -219,6 +219,14 @@ . = ..() . += emissive_appearance(icon, icon_state, src, alpha = src.alpha) +/// Nebula vomit with extra guests +/obj/effect/decal/cleanable/vomit/nebula/worms + +/obj/effect/decal/cleanable/vomit/nebula/worms/Initialize(mapload, list/datum/disease/diseases) + . = ..() + for (var/i in 1 to rand(2, 3)) + new /mob/living/basic/hivelord_brood(loc) + /obj/effect/decal/cleanable/vomit/old name = "crusty dried vomit" desc = "You try not to look at the chunks, and fail." @@ -412,9 +420,7 @@ . += emissive_appearance(icon, "[icon_state]_light", src, alpha = src.alpha) /obj/effect/decal/cleanable/ants/fire_act(exposed_temperature, exposed_volume) - var/obj/effect/decal/cleanable/ants/fire/fire_ants = new(loc) - fire_ants.reagents.clear_reagents() - reagents.trans_to(fire_ants, fire_ants.reagents.maximum_volume) + new /obj/effect/decal/cleanable/ants/fire(loc) qdel(src) /obj/effect/decal/cleanable/ants/fire @@ -438,6 +444,7 @@ beauty = -50 clean_type = CLEAN_TYPE_BLOOD mouse_opacity = MOUSE_OPACITY_OPAQUE + resistance_flags = UNACIDABLE | ACID_PROOF | FIRE_PROOF | FLAMMABLE //gross way of doing this but would need to disassemble fire_act call stack otherwise /// Maximum amount of hotspots this pool can create before deleting itself var/burn_amount = 3 /// Is this fuel pool currently burning? @@ -447,6 +454,11 @@ /obj/effect/decal/cleanable/fuel_pool/Initialize(mapload, burn_stacks) . = ..() + var/static/list/ignition_trigger_connections = list( + COMSIG_TURF_MOVABLE_THROW_LANDED = PROC_REF(ignition_trigger), + ) + AddElement(/datum/element/connect_loc, ignition_trigger_connections) + RegisterSignal(src, COMSIG_ATOM_TOUCHED_SPARKS, PROC_REF(ignition_trigger)) for(var/obj/effect/decal/cleanable/fuel_pool/pool in get_turf(src)) //Can't use locate because we also belong to that turf if(pool == src) continue @@ -503,6 +515,28 @@ ignite() return ..() +/obj/effect/decal/cleanable/fuel_pool/on_entered(datum/source, atom/movable/entered_atom) + . = ..() + if(entered_atom.throwing) // don't light from things being thrown over us, we handle that somewhere else + return + ignition_trigger(source = src, enflammable_atom = entered_atom) + +/obj/effect/decal/cleanable/fuel_pool/proc/ignition_trigger(datum/source, atom/movable/enflammable_atom) + SIGNAL_HANDLER + + if(isitem(enflammable_atom)) + var/obj/item/enflamed_item = enflammable_atom + if(enflamed_item.get_temperature() > FIRE_MINIMUM_TEMPERATURE_TO_EXIST) + ignite() + return + else if(isliving(enflammable_atom)) + var/mob/living/enflamed_liver = enflammable_atom + if(enflamed_liver.on_fire) + ignite() + else if(istype(enflammable_atom, /obj/effect/particle_effect/sparks)) + ignite() + + /obj/effect/decal/cleanable/fuel_pool/hivis icon_state = "fuel_pool_hivis" diff --git a/code/game/objects/effects/decals/cleanable/robots.dm b/code/game/objects/effects/decals/cleanable/robots.dm index 77034850a0b6f..808a68d6f5eb0 100644 --- a/code/game/objects/effects/decals/cleanable/robots.dm +++ b/code/game/objects/effects/decals/cleanable/robots.dm @@ -32,7 +32,7 @@ break return - var/datum/move_loop/loop = DSmove_manager.move(src, direction, delay = delay, timeout = range * delay, priority = MOVEMENT_ABOVE_SPACE_PRIORITY) + var/datum/move_loop/loop = GLOB.move_manager.move(src, direction, delay = delay, timeout = range * delay, priority = MOVEMENT_ABOVE_SPACE_PRIORITY) RegisterSignal(loop, COMSIG_MOVELOOP_POSTPROCESS, PROC_REF(spread_movement_effects)) /obj/effect/decal/cleanable/robot_debris/proc/spread_movement_effects(datum/move_loop/has_target/source) diff --git a/code/game/objects/effects/decals/turfdecal/weather.dm b/code/game/objects/effects/decals/turfdecal/weather.dm index 37b4f335e4574..af05e99719727 100644 --- a/code/game/objects/effects/decals/turfdecal/weather.dm +++ b/code/game/objects/effects/decals/turfdecal/weather.dm @@ -19,7 +19,7 @@ /obj/effect/turf_decal/weather/sand name = "sand siding" - icon = 'icons/misc/beach.dmi' + icon = 'icons/obj/fluff/beach.dmi' icon_state = "sand_side" /obj/effect/turf_decal/weather/sand/light diff --git a/code/game/objects/effects/effect_system/effect_system.dm b/code/game/objects/effects/effect_system/effect_system.dm index 9e5418a94f4cc..4fdd4ac598ee0 100644 --- a/code/game/objects/effects/effect_system/effect_system.dm +++ b/code/game/objects/effects/effect_system/effect_system.dm @@ -67,7 +67,7 @@ would spawn and follow the beaker, even if it is carried or thrown. var/step_amt = pick(1,2,3) var/step_delay = 5 - var/datum/move_loop/loop = DSmove_manager.move(effect, direction, step_delay, timeout = step_delay * step_amt, priority = MOVEMENT_ABOVE_SPACE_PRIORITY) + var/datum/move_loop/loop = GLOB.move_manager.move(effect, direction, step_delay, timeout = step_delay * step_amt, priority = MOVEMENT_ABOVE_SPACE_PRIORITY) RegisterSignal(loop, COMSIG_QDELETING, PROC_REF(decrement_total_effect)) /datum/effect_system/proc/decrement_total_effect(datum/source) diff --git a/code/game/objects/effects/effect_system/effects_explosion.dm b/code/game/objects/effects/effect_system/effects_explosion.dm index 9153d4151b38e..a8a3431ef9c68 100644 --- a/code/game/objects/effects/effect_system/effects_explosion.dm +++ b/code/game/objects/effects/effect_system/effects_explosion.dm @@ -11,7 +11,7 @@ /obj/effect/particle_effect/expl_particles/LateInitialize() var/step_amt = pick(25;1,50;2,100;3,200;4) - var/datum/move_loop/loop = DSmove_manager.move(src, pick(GLOB.alldirs), 1, timeout = step_amt, priority = MOVEMENT_ABOVE_SPACE_PRIORITY) + var/datum/move_loop/loop = GLOB.move_manager.move(src, pick(GLOB.alldirs), 1, timeout = step_amt, priority = MOVEMENT_ABOVE_SPACE_PRIORITY) RegisterSignal(loop, COMSIG_QDELETING, PROC_REF(end_particle)) /obj/effect/particle_effect/expl_particles/proc/end_particle(datum/source) diff --git a/code/game/objects/effects/effect_system/effects_sparks.dm b/code/game/objects/effects/effect_system/effects_sparks.dm index 874c53fa83c7d..d7acb25fde459 100644 --- a/code/game/objects/effects/effect_system/effects_sparks.dm +++ b/code/game/objects/effects/effect_system/effects_sparks.dm @@ -26,28 +26,69 @@ return INITIALIZE_HINT_LATELOAD /obj/effect/particle_effect/sparks/LateInitialize() + RegisterSignals(src, list(COMSIG_MOVABLE_CROSS, COMSIG_MOVABLE_CROSS_OVER), PROC_REF(sparks_touched)) flick(icon_state, src) playsound(src, SFX_SPARKS, 100, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) - var/turf/T = loc - if(isturf(T)) - T.hotspot_expose(1000,100) + var/turf/location = loc + if(isturf(location)) + affect_location(location, just_initialized = TRUE) QDEL_IN(src, 20) /obj/effect/particle_effect/sparks/Destroy() - var/turf/T = loc - if(isturf(T)) - T.hotspot_expose(1000,100) + var/turf/location = loc + if(isturf(location)) + affect_location(location) return ..() /obj/effect/particle_effect/sparks/Move() ..() - var/turf/T = loc - if(isturf(T)) - T.hotspot_expose(1000,100) + var/turf/location = loc + if(isturf(location)) + affect_location(location) + +/* +* Apply the effects of this spark to its location. +* +* When the spark is first created, Cross() and Crossed() don't get called, +* so for the first initialization, we make sure to specifically invoke the +* behavior of the spark on all the mobs and objects in the location. +* turf/location - The place the spark is affectiong +* just_initialized - If the spark is just being created, and we need to manually affect everything in the location +*/ +/obj/effect/particle_effect/sparks/proc/affect_location(turf/location, just_initialized = FALSE) + location.hotspot_expose(1000,100) + SEND_SIGNAL(location, COMSIG_ATOM_TOUCHED_SPARKS, src) // for plasma floors; other floor types only have to worry about the mysterious HAZARDOUS sparks + if(just_initialized) + for(var/atom/movable/singed in location) + sparks_touched(src, singed) + +/* +* This is called when anything passes through the same tiles as a spark, or when a spark passes through something's tile. +* +* This is invoked by the signals sent by every atom when they're crossed or crossing something. It +* signifies that something has been touched by sparks, and should be affected by possible pyrotechnic affects.. +* datum/source - Can either be the spark itself or an object that just walked into it +* mob/living/singed - What was touched by the spark +*/ +/obj/effect/particle_effect/sparks/proc/sparks_touched(datum/source, atom/singed) + SIGNAL_HANDLER + + SEND_SIGNAL(singed, COMSIG_ATOM_TOUCHED_SPARKS, src) + if(isobj(singed)) + if(singed.reagents) + var/datum/reagents/reagents = singed.reagents // heat up things that contain reagents before we check to see if they burn + reagents?.expose_temperature(1000) // we set this at 1000 because that's the max reagent temp for a chem heater, higher temps require more than sparks + return + if(ishuman(singed)) + var/mob/living/carbon/human/singed_human = singed + for(var/obj/item/anything in singed_human.get_visible_items()) + sparks_touched(src, anything) /datum/effect_system/spark_spread effect_type = /obj/effect/particle_effect/sparks + + /datum/effect_system/spark_spread/quantum effect_type = /obj/effect/particle_effect/sparks/quantum diff --git a/code/game/objects/effects/effect_system/effects_water.dm b/code/game/objects/effects/effect_system/effects_water.dm index 6444cf3d0eef3..f94e5d0e31c3d 100644 --- a/code/game/objects/effects/effect_system/effects_water.dm +++ b/code/game/objects/effects/effect_system/effects_water.dm @@ -38,7 +38,7 @@ /// Starts the effect moving at a target with a delay in deciseconds, and a lifetime in moves /// Returns the created loop /obj/effect/particle_effect/water/extinguisher/proc/move_at(atom/target, delay, lifetime) - var/datum/move_loop/loop = DSmove_manager.move_towards_legacy(src, target, delay, timeout = delay * lifetime, flags = MOVEMENT_LOOP_START_FAST, priority = MOVEMENT_ABOVE_SPACE_PRIORITY) + var/datum/move_loop/loop = GLOB.move_manager.move_towards_legacy(src, target, delay, timeout = delay * lifetime, flags = MOVEMENT_LOOP_START_FAST, priority = MOVEMENT_ABOVE_SPACE_PRIORITY) RegisterSignal(loop, COMSIG_MOVELOOP_POSTPROCESS, PROC_REF(post_forcemove)) RegisterSignal(loop, COMSIG_QDELETING, PROC_REF(movement_stopped)) return loop @@ -63,7 +63,7 @@ // Stomach acid doesn't use legacy because it's not "targeted", and we instead want the circular sorta look /obj/effect/particle_effect/water/extinguisher/stomach_acid/move_at(atom/target, delay, lifetime) - var/datum/move_loop/loop = DSmove_manager.move_towards(src, target, delay, timeout = delay * lifetime, flags = MOVEMENT_LOOP_START_FAST, priority = MOVEMENT_ABOVE_SPACE_PRIORITY) + var/datum/move_loop/loop = GLOB.move_manager.move_towards(src, target, delay, timeout = delay * lifetime, flags = MOVEMENT_LOOP_START_FAST, priority = MOVEMENT_ABOVE_SPACE_PRIORITY) RegisterSignal(loop, COMSIG_MOVELOOP_POSTPROCESS, PROC_REF(post_forcemove)) RegisterSignal(loop, COMSIG_QDELETING, PROC_REF(movement_stopped)) return loop diff --git a/code/game/objects/effects/forcefields.dm b/code/game/objects/effects/forcefields.dm index cf1257308d944..4445815a422be 100644 --- a/code/game/objects/effects/forcefields.dm +++ b/code/game/objects/effects/forcefields.dm @@ -44,7 +44,7 @@ /obj/effect/forcefield/cult name = "glowing wall" desc = "An unholy shield that blocks all attacks." - icon = 'icons/effects/cult/effects.dmi' + icon = 'icons/effects/cult.dmi' icon_state = "cultshield" can_atmos_pass = ATMOS_PASS_NO initial_duration = 20 SECONDS diff --git a/code/game/objects/effects/mines.dm b/code/game/objects/effects/mines.dm index cd8a859f86fb4..f080035d54c2e 100644 --- a/code/game/objects/effects/mines.dm +++ b/code/game/objects/effects/mines.dm @@ -76,7 +76,7 @@ return TRUE -/obj/effect/mine/proc/on_entered(datum/source, atom/movable/arrived) +/obj/effect/mine/proc/on_entered(datum/source, atom/movable/arrived, atom/old_loc) SIGNAL_HANDLER if(!can_trigger(arrived)) @@ -85,15 +85,35 @@ if(foot_on_mine?.resolve()) return - foot_on_mine = WEAKREF(arrived) + var/gonna_blow + if(arrived.flags_1 & ON_BORDER_1) + if(arrived.dir == get_dir(old_loc, src)) //see if a partial tile atom has passed the mine + gonna_blow = TRUE + else + return //it didn't actually touch the mine, don't blow + visible_message(span_danger("[icon2html(src, viewers(src))] *click*")) playsound(src, 'sound/machines/click.ogg', 60, TRUE) + if(gonna_blow) + RegisterSignal(arrived, COMSIG_MOVABLE_MOVED, PROC_REF(triggermine)) //wait for it to finish the movement before blowing so it takes proper damage + return + + foot_on_mine = WEAKREF(arrived) -/obj/effect/mine/proc/on_exited(datum/source, atom/movable/gone) + +/obj/effect/mine/proc/on_exited(datum/source, atom/movable/gone, direction) SIGNAL_HANDLER if(!can_trigger(gone)) return + + if(!foot_on_mine && gone.flags_1 & ON_BORDER_1) + if(gone.dir == REVERSE_DIR(direction)) //see if a north facing border atom (ie window) travels south (and other directions as needed) + visible_message(span_danger("[icon2html(src, viewers(src))] *click*")) + playsound(src, 'sound/machines/click.ogg', 60, TRUE) + triggermine() //it "passed" over the mine briefly, triggering it in the process + return //either it blew up the mine, or it didn't and we don't have to worry about anything else. + // Check that the guy who's on it is stepping off if(foot_on_mine && !IS_WEAKREF_OF(gone, foot_on_mine)) return @@ -107,6 +127,7 @@ /// When something sets off a mine /obj/effect/mine/proc/triggermine(atom/movable/triggerer) + SIGNAL_HANDLER if(triggered) //too busy detonating to detonate again return if(triggerer) diff --git a/code/game/objects/effects/particle_holder.dm b/code/game/objects/effects/particle_holder.dm index f2cbea06aa730..b5b4fa47108dc 100644 --- a/code/game/objects/effects/particle_holder.dm +++ b/code/game/objects/effects/particle_holder.dm @@ -64,7 +64,6 @@ var/mob/particle_mob = attached.loc particle_mob.vis_contents += src -/// Sets the particles position to the passed coordinate list (X, Y, Z) -/// See [https://www.byond.com/docs/ref/#/{notes}/particles] for position documentation -/obj/effect/abstract/particle_holder/proc/set_particle_position(list/pos) - particles.position = pos +/// Sets the particles position to the passed coordinates +/obj/effect/abstract/particle_holder/proc/set_particle_position(x = 0, y = 0, z = 0) + particles.position = list(x, y, z) diff --git a/code/game/objects/effects/particles/smoke.dm b/code/game/objects/effects/particles/smoke.dm index b41b4eb1d96c9..27249c65a683e 100644 --- a/code/game/objects/effects/particles/smoke.dm +++ b/code/game/objects/effects/particles/smoke.dm @@ -37,6 +37,31 @@ spawning = 2 velocity = list(0, 0.25, 0) +/particles/smoke/cig + icon_state = list("steam_1" = 2, "steam_2" = 1, "steam_3" = 1) + count = 1 + spawning = 0.05 // used to pace it out roughly in time with breath ticks + position = list(-6, -2, 0) + gravity = list(0, 0.75, 0) + lifespan = 0.75 SECONDS + fade = 0.75 SECONDS + velocity = list(0, 0.2, 0) + scale = 0.5 + grow = 0.01 + friction = 0.5 + color = "#d0d0d09d" + +/particles/smoke/cig/big + icon_state = list("steam_1" = 1, "steam_2" = 2, "steam_3" = 2) + gravity = list(0, 0.5, 0) + velocity = list(0, 0.1, 0) + lifespan = 1 SECONDS + fade = 1 SECONDS + grow = 0.1 + scale = 0.75 + spawning = 1 + friction = 0.75 + /particles/smoke/ash icon_state = list("ash_1" = 2, "ash_2" = 2, "ash_3" = 1, "smoke_1" = 3, "smoke_2" = 2) count = 500 diff --git a/code/game/objects/effects/phased_mob.dm b/code/game/objects/effects/phased_mob.dm index 1456fa350bfab..dcd4e39189c87 100644 --- a/code/game/objects/effects/phased_mob.dm +++ b/code/game/objects/effects/phased_mob.dm @@ -2,7 +2,7 @@ name = "water" anchored = TRUE flags_1 = PREVENT_CONTENTS_EXPLOSION_1 - resistance_flags = LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF + resistance_flags = LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF | SHUTTLE_CRUSH_PROOF invisibility = INVISIBILITY_OBSERVER movement_type = FLOATING /// The movable which's jaunting in this dummy diff --git a/code/game/objects/effects/portals.dm b/code/game/objects/effects/portals.dm index 8c52a76dbc0de..255f34eff51dd 100644 --- a/code/game/objects/effects/portals.dm +++ b/code/game/objects/effects/portals.dm @@ -6,6 +6,8 @@ var/obj/effect/portal/P2 = new newtype(actual_destination, _lifespan, P1, TRUE, null) if(!istype(P1) || !istype(P2)) return + playsound(P1, SFX_PORTAL_CREATED, 50, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) + playsound(P2, SFX_PORTAL_CREATED, 50, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) P1.link_portal(P2) P1.hardlinked = TRUE return list(P1, P2) @@ -42,7 +44,7 @@ /// Does this portal bypass teleport restrictions? like TRAIT_NO_TELEPORT and NOTELEPORT flags. var/force_teleport = FALSE /// Does this portal create spark effect when teleporting? - var/sparkless = FALSE + var/sparkless = TRUE /// If FALSE, the wibble filter will not be applied to this portal (only a visual effect). var/wibbles = TRUE @@ -87,6 +89,7 @@ if(Adjacent(user)) teleport(user) + /obj/effect/portal/attack_robot(mob/living/user) if(Adjacent(user)) teleport(user) @@ -98,7 +101,7 @@ . = INITIALIZE_HINT_QDEL CRASH("Somebody fucked up.") if(_lifespan > 0) - QDEL_IN(src, _lifespan) + addtimer(CALLBACK(src, PROC_REF(expire)), _lifespan, TIMER_DELETE_ME) link_portal(_linked) hardlinked = automatic_link if(isturf(hard_target_override)) @@ -106,6 +109,10 @@ if(wibbles) apply_wibbly_filters(src) +/obj/effect/portal/proc/expire() + playsound(loc, SFX_PORTAL_CLOSE, 50, FALSE, SHORT_RANGE_SOUND_EXTRARANGE) + qdel(src) + /obj/effect/portal/singularity_pull() return @@ -140,10 +147,14 @@ no_effect = TRUE else last_effect = world.time + var/turf/start_turf = get_turf(M) if(do_teleport(M, real_target, innate_accuracy_penalty, no_effects = no_effect, channel = teleport_channel, forced = force_teleport)) if(isprojectile(M)) var/obj/projectile/P = M P.ignore_source_check = TRUE + new /obj/effect/temp_visual/portal_animation(start_turf, src, M) + playsound(start_turf, SFX_PORTAL_ENTER, 50, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) + playsound(real_target, SFX_PORTAL_ENTER, 50, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) return TRUE return FALSE @@ -205,4 +216,23 @@ /obj/effect/portal/permanent/one_way/one_use/teleport(atom/movable/M, force = FALSE) . = ..() if (. && !isdead(M)) - qdel(src) + expire() + +/** + * Animation used for transitioning atoms which are teleporting somewhere via a portal + * + * To use, pass it the atom doing the teleporting and the atom that is being teleported in init. + */ +/obj/effect/temp_visual/portal_animation + duration = 0.25 SECONDS + +/obj/effect/temp_visual/portal_animation/Initialize(mapload, atom/portal, atom/movable/teleporting) + . = ..() + if(isnull(portal) || isnull(teleporting)) + return + + appearance = teleporting.appearance + dir = teleporting.dir + layer = portal.layer + 0.01 + alpha = teleporting.alpha + animate(src, pixel_x = (portal.x * 32) - (x * 32), pixel_y = (portal.y * 32) - (y * 32), alpha = 0, time = duration) diff --git a/code/game/objects/effects/spawners/costume.dm b/code/game/objects/effects/spawners/costume.dm index 6eb3f801f7365..e5280f7e66184 100644 --- a/code/game/objects/effects/spawners/costume.dm +++ b/code/game/objects/effects/spawners/costume.dm @@ -40,7 +40,7 @@ items = list( /obj/item/clothing/under/rank/captain/suit, /obj/item/clothing/head/flatcap, - /obj/item/clothing/mask/cigarette/cigar/havana, + /obj/item/cigarette/cigar/havana, /obj/item/clothing/shoes/jackboots, ) diff --git a/code/game/objects/effects/spawners/random/ai_module.dm b/code/game/objects/effects/spawners/random/ai_module.dm index 6a94cf2345a72..cb3056904e2eb 100644 --- a/code/game/objects/effects/spawners/random/ai_module.dm +++ b/code/game/objects/effects/spawners/random/ai_module.dm @@ -37,6 +37,7 @@ /obj/item/ai_module/supplied/safeguard, /obj/item/ai_module/supplied/protect_station, /obj/item/ai_module/supplied/quarantine, + /obj/item/ai_module/core/full/yesman, /obj/item/ai_module/remove, ) diff --git a/code/game/objects/effects/spawners/random/armory.dm b/code/game/objects/effects/spawners/random/armory.dm index 5292ca6ad0986..dfb71ff10d54b 100644 --- a/code/game/objects/effects/spawners/random/armory.dm +++ b/code/game/objects/effects/spawners/random/armory.dm @@ -45,6 +45,16 @@ icon_state = "shotgun" loot = list(/obj/item/gun/ballistic/shotgun/riot) +/obj/effect/spawner/random/armory/dragnet + name = "DRAGnet spawner" + icon_state = "dragnet" + loot = list(/obj/item/gun/energy/e_gun/dragnet) + spawn_loot_count = 2 + +/obj/effect/spawner/random/armory/dragnet/spawn_loot(lootcount_override) + . = ..() + new /obj/item/dragnet_beacon(get_turf(src)) //And give them a beacon too! + // Armor /obj/effect/spawner/random/armory/bulletproof_helmet name = "bulletproof helmet spawner" diff --git a/code/game/objects/effects/spawners/random/contraband.dm b/code/game/objects/effects/spawners/random/contraband.dm index e65a73cfe4ce7..f17656c61191a 100644 --- a/code/game/objects/effects/spawners/random/contraband.dm +++ b/code/game/objects/effects/spawners/random/contraband.dm @@ -43,13 +43,14 @@ name = "armory loot spawner" icon_state = "pistol" loot = list( - /obj/item/gun/ballistic/automatic/pistol = 8, - /obj/item/gun/ballistic/shotgun/automatic/combat = 5, - /obj/item/storage/box/syndie_kit/throwing_weapons = 3, - /obj/item/grenade/clusterbuster/teargas = 2, - /obj/item/grenade/clusterbuster = 2, - /obj/item/gun/ballistic/automatic/pistol/deagle, - /obj/item/gun/ballistic/revolver/mateba, + /obj/item/gun/ballistic/automatic/pistol/contraband = 80, + /obj/item/gun/ballistic/shotgun/automatic/combat = 50, + /obj/item/storage/box/syndie_kit/throwing_weapons = 30, + /obj/item/grenade/clusterbuster/teargas = 20, + /obj/item/grenade/clusterbuster = 20, + /obj/item/gun/ballistic/automatic/pistol/deagle/contraband, + /obj/item/gun/ballistic/revolver/mateba = 9, + /obj/item/gun/ballistic/revolver/reverse/mateba = 1, ) /obj/effect/spawner/random/contraband/narcotics @@ -140,6 +141,13 @@ /obj/effect/mine/shrapnel = 5, ) +/obj/effect/spawner/random/contraband/qm_rocket + name = "QMs dud rocket spawner" + loot = list( + /obj/item/ammo_casing/rocket/reverse = 85, + /obj/item/ammo_casing/rocket = 15, + ) + /obj/effect/spawner/random/contraband/grenades name = "grenades spawner" loot = list( diff --git a/code/game/objects/effects/spawners/random/entertainment.dm b/code/game/objects/effects/spawners/random/entertainment.dm index 3ad477b0294f3..74ca4213b0dc5 100644 --- a/code/game/objects/effects/spawners/random/entertainment.dm +++ b/code/game/objects/effects/spawners/random/entertainment.dm @@ -121,10 +121,10 @@ icon_state = "pill" loot = list( /obj/item/reagent_containers/cup/glass/bottle/hooch = 50, - /obj/item/clothing/mask/cigarette/rollie/cannabis = 15, + /obj/item/cigarette/rollie/cannabis = 15, /obj/item/reagent_containers/syringe = 15, /obj/item/cigbutt/roach = 15, - /obj/item/clothing/mask/cigarette/rollie/mindbreaker = 5, + /obj/item/cigarette/rollie/mindbreaker = 5, ) /obj/effect/spawner/random/entertainment/dice @@ -157,23 +157,23 @@ name = "cigarette spawner" icon_state = "cigarettes" loot = list( - /obj/item/clothing/mask/cigarette/space_cigarette = 3, - /obj/item/clothing/mask/cigarette/rollie/cannabis = 3, - /obj/item/clothing/mask/cigarette/rollie/nicotine = 3, - /obj/item/clothing/mask/cigarette/dromedary = 2, - /obj/item/clothing/mask/cigarette/uplift = 2, - /obj/item/clothing/mask/cigarette/robust = 2, - /obj/item/clothing/mask/cigarette/carp = 1, - /obj/item/clothing/mask/cigarette/robustgold = 1, + /obj/item/cigarette/space_cigarette = 3, + /obj/item/cigarette/rollie/cannabis = 3, + /obj/item/cigarette/rollie/nicotine = 3, + /obj/item/cigarette/dromedary = 2, + /obj/item/cigarette/uplift = 2, + /obj/item/cigarette/robust = 2, + /obj/item/cigarette/carp = 1, + /obj/item/cigarette/robustgold = 1, ) /obj/effect/spawner/random/entertainment/cigar name = "cigar spawner" icon_state = "cigarettes" loot = list( - /obj/item/clothing/mask/cigarette/cigar = 3, - /obj/item/clothing/mask/cigarette/cigar/havana = 2, - /obj/item/clothing/mask/cigarette/cigar/cohiba = 1, + /obj/item/cigarette/cigar = 3, + /obj/item/cigarette/cigar/havana = 2, + /obj/item/cigarette/cigar/cohiba = 1, ) /obj/effect/spawner/random/entertainment/wallet_lighter diff --git a/code/game/objects/effects/spawners/random/exotic.dm b/code/game/objects/effects/spawners/random/exotic.dm index add4faf5c5004..e802e30056f4f 100644 --- a/code/game/objects/effects/spawners/random/exotic.dm +++ b/code/game/objects/effects/spawners/random/exotic.dm @@ -50,7 +50,7 @@ /obj/item/storage/medkit/brute = 27, /obj/item/storage/medkit/fire = 27, /obj/item/storage/toolbox/syndicate = 12, - /obj/item/borg/upgrade/ddrill = 3, + /obj/item/borg/upgrade/diamond_drill = 3, /obj/item/knife/butcher = 14, /obj/item/clothing/glasses/night = 10, /obj/item/pickaxe/drill/diamonddrill = 6, diff --git a/code/game/objects/effects/spawners/random/lavaland_mobs.dm b/code/game/objects/effects/spawners/random/lavaland_mobs.dm index 7b4bec1f6a1ba..4c6cf03532459 100644 --- a/code/game/objects/effects/spawners/random/lavaland_mobs.dm +++ b/code/game/objects/effects/spawners/random/lavaland_mobs.dm @@ -49,3 +49,17 @@ /mob/living/basic/mining/legion = 19, /mob/living/basic/mining/legion/dwarf = 1, ) + +/obj/effect/spawner/random/lavaland_mob/raptor + name = "random raptor" + desc = "Chance to spawn a rare shiny version." + icon = 'icons/mob/simple/lavaland/raptor_big.dmi' + icon_state = "raptor_red" + loot = list( + /mob/living/basic/raptor/red = 20, + /mob/living/basic/raptor/white = 20, + /mob/living/basic/raptor/purple = 20, + /mob/living/basic/raptor/green = 20, + /mob/living/basic/raptor/yellow = 20, + /mob/living/basic/raptor/black = 1, + ) diff --git a/code/game/objects/effects/spawners/random/structure.dm b/code/game/objects/effects/spawners/random/structure.dm index b5b2c226d11d6..b6af49275028b 100644 --- a/code/game/objects/effects/spawners/random/structure.dm +++ b/code/game/objects/effects/spawners/random/structure.dm @@ -123,7 +123,7 @@ /obj/effect/spawner/random/structure/closet_empty/crate/with_loot/make_item(spawn_loc, type_path_to_make) var/obj/structure/closet/closet_to_fill = ..() - closet_to_fill.RegisterSignal(closet_to_fill, COMSIG_CLOSET_POPULATE_CONTENTS, TYPE_PROC_REF(/obj/structure/closet/, populate_with_random_maint_loot)) + closet_to_fill.RegisterSignal(closet_to_fill, COMSIG_CLOSET_CONTENTS_INITIALIZED, TYPE_PROC_REF(/obj/structure/closet/, populate_with_random_maint_loot)) return closet_to_fill diff --git a/code/game/objects/effects/spawners/random/trash.dm b/code/game/objects/effects/spawners/random/trash.dm index 4ed9fe2a812a4..dfac8e4c0c814 100644 --- a/code/game/objects/effects/spawners/random/trash.dm +++ b/code/game/objects/effects/spawners/random/trash.dm @@ -28,6 +28,32 @@ /obj/item/shard/plasma = 1, ) +/obj/effect/spawner/random/trash/deluxe_garbage + name = "fancy deluxe garbage spawner" + loot = list( + /obj/effect/spawner/random/trash/garbage = 25, + /obj/effect/spawner/random/trash/food_packaging = 10, + /obj/effect/spawner/random/entertainment/money = 10, + /obj/effect/spawner/random/trash/crushed_can = 10, + /obj/item/shard/plasma = 5, + /obj/item/reagent_containers/pill/maintenance = 5, + /obj/item/mail/junkmail = 5, + /obj/effect/spawner/random/food_or_drink/snack = 5, + /obj/effect/spawner/random/trash/soap = 3, + /obj/item/reagent_containers/cup/glass/sillycup = 3, + /obj/item/broken_bottle = 3, + /obj/item/reagent_containers/cup/soda_cans/grey_bull = 1, + /obj/effect/spawner/random/engineering/tool = 1, + /mob/living/basic/mouse = 1, + /obj/item/food/grown/cannabis = 1, + /obj/item/reagent_containers/cup/rag = 1, + /obj/effect/spawner/random/entertainment/drugs= 1, + /obj/item/modular_computer/pda = 1, + /obj/item/reagent_containers/syringe = 1, + /obj/effect/spawner/random/entertainment/cigar = 1, + /obj/item/stack/ore/gold = 1, + ) + /obj/effect/spawner/random/trash/cigbutt name = "cigarette butt spawner" loot = list( diff --git a/code/game/objects/effects/spawners/xeno_egg_delivery.dm b/code/game/objects/effects/spawners/xeno_egg_delivery.dm index e87b27e091307..eb5bb62df5c57 100644 --- a/code/game/objects/effects/spawners/xeno_egg_delivery.dm +++ b/code/game/objects/effects/spawners/xeno_egg_delivery.dm @@ -25,5 +25,5 @@ /obj/structure/alien/egg/delivery/Initialize(mapload) . = ..() - DScommunications.xenomorph_egg_delivered = TRUE - DScommunications.captivity_area = get_area(src) + GLOB.communications_controller.xenomorph_egg_delivered = TRUE + GLOB.communications_controller.captivity_area = get_area(src) diff --git a/code/game/objects/effects/step_triggers.dm b/code/game/objects/effects/step_triggers.dm index 874104c9202fc..1467a7854be52 100644 --- a/code/game/objects/effects/step_triggers.dm +++ b/code/game/objects/effects/step_triggers.dm @@ -70,7 +70,7 @@ ADD_TRAIT(AM, TRAIT_IMMOBILIZED, REF(src)) affecting[AM] = AM.dir - var/datum/move_loop/loop = DSmove_manager.move(AM, direction, speed, tiles ? tiles * speed : INFINITY) + var/datum/move_loop/loop = GLOB.move_manager.move(AM, direction, speed, tiles ? tiles * speed : INFINITY) RegisterSignal(loop, COMSIG_MOVELOOP_PREPROCESS_CHECK, PROC_REF(pre_move)) RegisterSignal(loop, COMSIG_MOVELOOP_POSTPROCESS, PROC_REF(post_move)) RegisterSignal(loop, COMSIG_QDELETING, PROC_REF(set_to_normal)) diff --git a/code/game/objects/effects/temporary_visuals/cult.dm b/code/game/objects/effects/temporary_visuals/cult.dm index f000aa4c0395f..a53d4df9b925a 100644 --- a/code/game/objects/effects/temporary_visuals/cult.dm +++ b/code/game/objects/effects/temporary_visuals/cult.dm @@ -1,6 +1,6 @@ //temporary visual effects(/obj/effect/temp_visual) used by cult stuff /obj/effect/temp_visual/cult - icon = 'icons/effects/cult/effects.dmi' + icon = 'icons/effects/cult.dmi' randomdir = FALSE duration = 10 @@ -18,13 +18,13 @@ icon_state = "bloodout" /obj/effect/temp_visual/dir_setting/cult/phase // The veil shifter teleport - icon = 'icons/effects/cult/effects.dmi' + icon = 'icons/effects/cult.dmi' name = "phase glow" duration = 7 icon_state = "cultin" /obj/effect/temp_visual/dir_setting/cult/phase/out - icon = 'icons/effects/cult/effects.dmi' + icon = 'icons/effects/cult.dmi' icon_state = "cultout" /obj/effect/temp_visual/cult/sac diff --git a/code/game/objects/effects/temporary_visuals/effect_trail.dm b/code/game/objects/effects/temporary_visuals/effect_trail.dm index 2fd7d41d22c70..9b28dcf909da1 100644 --- a/code/game/objects/effects/temporary_visuals/effect_trail.dm +++ b/code/game/objects/effects/temporary_visuals/effect_trail.dm @@ -29,7 +29,7 @@ AddElement(/datum/element/floor_loving) AddComponent(/datum/component/spawner, spawn_types = list(spawned_effect), max_spawned = max_spawned, spawn_time = spawn_interval) src.target = target - movement = DSmove_manager.move_towards(src, chasing = target, delay = move_speed, home = homing, timeout = duration, flags = MOVEMENT_LOOP_START_FAST) + movement = GLOB.move_manager.move_towards(src, chasing = target, delay = move_speed, home = homing, timeout = duration, flags = MOVEMENT_LOOP_START_FAST) RegisterSignal(target, COMSIG_QDELETING, PROC_REF(on_target_invalid)) if (isliving(target)) diff --git a/code/game/objects/effects/temporary_visuals/miscellaneous.dm b/code/game/objects/effects/temporary_visuals/miscellaneous.dm index 4c8ce41debfee..d132dd53da8c4 100644 --- a/code/game/objects/effects/temporary_visuals/miscellaneous.dm +++ b/code/game/objects/effects/temporary_visuals/miscellaneous.dm @@ -492,7 +492,7 @@ duration = 2 SECONDS /obj/effect/constructing_effect - icon = 'icons/effects/effects_rcd.dmi' + icon = 'icons/effects/rcd.dmi' icon_state = "" layer = ABOVE_ALL_MOB_LAYER plane = ABOVE_GAME_PLANE diff --git a/code/game/objects/effects/wanted_poster.dm b/code/game/objects/effects/wanted_poster.dm index 001f0119b9d62..ab3661139fbd8 100644 --- a/code/game/objects/effects/wanted_poster.dm +++ b/code/game/objects/effects/wanted_poster.dm @@ -86,7 +86,7 @@ var/i for(i=1; i <= textLen, i++) var/letter = uppertext(text[i]) - var/icon/letter_icon = icon("icon" = 'icons/misc/Font_Minimal.dmi', "icon_state" = letter) + var/icon/letter_icon = icon("icon" = 'icons/testing/Font_Minimal.dmi', "icon_state" = letter) letter_icon.Shift(EAST, startX) //16 - (2*n) letter_icon.Shift(SOUTH, 2) letter_icon.SwapColor(rgb(255,255,255), color) diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index febc0d82fcaae..18fed35de4533 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -69,6 +69,8 @@ var/hitsound ///Played when the item is used, for example tools var/usesound + ///Played when item is used for long progress + var/operating_sound ///Used when yate into a mob var/mob_throw_hit_sound ///Sound used when equipping the item into a valid slot @@ -264,9 +266,7 @@ if(LAZYLEN(embedding)) updateEmbedding() - if(unique_reskin) - RegisterSignal(src, COMSIG_CLICK_ALT, PROC_REF(on_click_alt_reskin)) - register_context() + setup_reskinning() /obj/item/Destroy(force) @@ -290,12 +290,24 @@ if(!unique_reskin) return - if(current_skin && !(item_flags & INFINITE_RESKIN)) + if(current_skin && !(obj_flags & INFINITE_RESKIN)) return context[SCREENTIP_CONTEXT_ALT_LMB] = "Reskin" return CONTEXTUAL_SCREENTIP_SET +/obj/item/click_ctrl(mob/user) + SHOULD_NOT_OVERRIDE(TRUE) + + //If the item is on the ground & not anchored we allow the player to drag it + . = item_ctrl_click(user) + if(. & CLICK_ACTION_ANY) + return (isturf(loc) && !anchored) ? NONE : . //allow the object to get dragged on the floor + +/// Subtypes only override this proc for ctrl click purposes. obeys same principles as ctrl_click() +/obj/item/proc/item_ctrl_click(mob/user) + SHOULD_CALL_PARENT(FALSE) + return NONE /// Called when an action associated with our item is deleted /obj/item/proc/on_action_deleted(datum/source) @@ -986,7 +998,7 @@ return SEND_SIGNAL(src, COMSIG_ITEM_MICROWAVE_ACT, microwave_source, microwaver, randomize_pixel_offset) -//Used to check for extra requirements for blending(grinding or juicing) an object +///Used to check for extra requirements for blending(grinding or juicing) an object /obj/item/proc/blend_requirements(obj/machinery/reagentgrinder/R) return TRUE @@ -996,15 +1008,16 @@ ///Grind item, adding grind_results to item's reagents and transfering to target_holder if specified /obj/item/proc/grind(datum/reagents/target_holder, mob/user) + . = FALSE if(on_grind() == -1) - return FALSE + return if(length(grind_results)) target_holder.add_reagent_list(grind_results) + . = TRUE if(reagents?.total_volume) reagents.trans_to(target_holder, reagents.total_volume, transferred_by = user) - - return TRUE + . = TRUE ///Called BEFORE the object is ground up - use this to change grind results based on conditions. Return "-1" to prevent the grinding from occurring /obj/item/proc/on_juice() @@ -1018,7 +1031,8 @@ return FALSE if(ispath(juice_typepath)) - reagents.convert_reagent(/datum/reagent/consumable, juice_typepath, include_source_subtypes = TRUE) + reagents.convert_reagent(/datum/reagent/consumable/nutriment, juice_typepath, include_source_subtypes = FALSE) + reagents.convert_reagent(/datum/reagent/consumable/nutriment/vitamin, juice_typepath, include_source_subtypes = FALSE) reagents.trans_to(target_holder, reagents.total_volume, transferred_by = user) return TRUE @@ -1062,8 +1076,11 @@ else apply_outline() //if the player's alive and well we send the command with no color set, so it uses the theme's color -/obj/item/MouseDrop(atom/over, src_location, over_location, src_control, over_control, params) +/obj/item/base_mouse_drop_handler(atom/over, src_location, over_location, params) + SHOULD_NOT_OVERRIDE(TRUE) + . = ..() + remove_filter(HOVER_OUTLINE_FILTER) //get rid of the hover effect in case the mouse exit isn't called if someone drags and drops an item and somthing goes wrong /obj/item/MouseExited() @@ -1124,6 +1141,9 @@ // Create a callback with checks that would be called every tick by do_after. var/datum/callback/tool_check = CALLBACK(src, PROC_REF(tool_check_callback), user, amount, extra_checks) + if(delay >= MIN_TOOL_OPERATING_DELAY) + play_tool_operating_sound(target, volume) + if(!do_after(user, delay, target=target, extra_checks=tool_check)) return else @@ -1166,6 +1186,19 @@ playsound(target, played_sound, volume, TRUE) +///Play item's operating sound +/obj/item/proc/play_tool_operating_sound(atom/target, volume=50) + if(target && operating_sound && volume) + var/played_sound = operating_sound + + if(islist(operating_sound)) + played_sound = pick(operating_sound) + + if(!TIMER_COOLDOWN_FINISHED(src, COOLDOWN_TOOL_SOUND)) + return + playsound(target, played_sound, volume, TRUE) + TIMER_COOLDOWN_START(src, COOLDOWN_TOOL_SOUND, 4 SECONDS) //based on our longest sound clip + /// Used in a callback that is passed by use_tool into do_after call. Do not override, do not call manually. /obj/item/proc/tool_check_callback(mob/living/user, amount, datum/callback/extra_checks) SHOULD_NOT_OVERRIDE(TRUE) @@ -1393,7 +1426,7 @@ mob_loc.update_clothing(slot_flags) /// Called on [/datum/element/openspace_item_click_handler/proc/on_afterattack]. Check the relative file for information. -/obj/item/proc/handle_openspace_click(turf/target, mob/user, proximity_flag, click_parameters) +/obj/item/proc/handle_openspace_click(turf/target, mob/user, list/modifiers) stack_trace("Undefined handle_openspace_click() behaviour. Ascertain the openspace_item_click_handler element has been attached to the right item and that its proc override doesn't call parent.") /** @@ -1427,10 +1460,6 @@ SHOULD_CALL_PARENT(TRUE) SEND_SIGNAL(src, COMSIG_ITEM_EQUIPPED_AS_OUTFIT, outfit_wearer, visuals_only, item_slot) -/// Whether or not this item can be put into a storage item through attackby -/obj/item/proc/attackby_storage_insert(datum/storage, atom/storage_holder, mob/user) - return TRUE - /obj/item/proc/do_pickup_animation(atom/target, turf/source) if(!source) if(!istype(loc, /turf)) @@ -1703,3 +1732,17 @@ if(!isnull(loc)) SEND_SIGNAL(loc, COMSIG_ATOM_CONTENTS_WEIGHT_CLASS_CHANGED, src, old_w_class, new_w_class) return TRUE + + +/** + * Returns the atom(either itself or an internal module) that will interact/attack the target on behalf of us + * For example an object can have different `tool_behaviours` (e.g borg omni tool) but will return an internal reference of that tool to attack for us + * You can use it for general purpose polymorphism if you need a proxy atom to interact in a specific way + * with a target on behalf on this atom + * + * Currently used only in the object melee attack chain but can be used anywhere else or even moved up to the atom level if required + */ +/obj/item/proc/get_proxy_attacker_for(atom/target, mob/user) + RETURN_TYPE(/obj/item) + + return src diff --git a/code/game/objects/items/AI_modules/full_lawsets.dm b/code/game/objects/items/AI_modules/full_lawsets.dm index 52a2492564665..30e904d45ac84 100644 --- a/code/game/objects/items/AI_modules/full_lawsets.dm +++ b/code/game/objects/items/AI_modules/full_lawsets.dm @@ -22,6 +22,7 @@ * /obj/item/ai_module/core/full/nutimov * /obj/item/ai_module/core/full/dungeon_master * /obj/item/ai_module/core/full/painter + * /obj/item/ai_module/core/full/yesman **/ /* When adding a new lawset please make sure you add it to the following locations: @@ -161,3 +162,8 @@ /obj/item/ai_module/core/full/painter name = "'Painter' Core AI Module" law_id = "painter" + +/obj/item/ai_module/core/full/yesman + name = "'Y.E.S.M.A.N.' Core AI Module" + law_id = "yesman" + diff --git a/code/game/objects/items/airlock_painter.dm b/code/game/objects/items/airlock_painter.dm index 6d5a8340a3fb0..3365a24650a5b 100644 --- a/code/game/objects/items/airlock_painter.dm +++ b/code/game/objects/items/airlock_painter.dm @@ -219,14 +219,11 @@ . = ..() stored_custom_color = stored_color -/obj/item/airlock_painter/decal/afterattack(atom/target, mob/user, proximity) - . = ..() - if(!proximity) - balloon_alert(user, "get closer!") - return - - if(isfloorturf(target) && use_paint(user)) - paint_floor(target) +/obj/item/airlock_painter/decal/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + if(isfloorturf(interacting_with) && use_paint(user)) + paint_floor(interacting_with) + return ITEM_INTERACT_SUCCESS + return NONE /** * Actually add current decal to the floor. diff --git a/code/game/objects/items/bear_armor.dm b/code/game/objects/items/bear_armor.dm index 556875a474e2f..8cfad42be15a6 100644 --- a/code/game/objects/items/bear_armor.dm +++ b/code/game/objects/items/bear_armor.dm @@ -5,23 +5,21 @@ icon = 'icons/obj/tools.dmi' icon_state = "bear_armor_upgrade" -/obj/item/bear_armor/afterattack(atom/target, mob/user, proximity_flag) - . = ..() - if(!proximity_flag) - return - if(!istype(target, /mob/living/basic/bear)) - return - var/mob/living/basic/bear/bear_target = target - if(bear_target.armored) - to_chat(user, span_warning("[bear_target] has already been armored up!")) - return - bear_target.armored = TRUE - bear_target.maxHealth += 60 - bear_target.health += 60 - bear_target.armour_penetration += 20 - bear_target.melee_damage_lower += 3 - bear_target.melee_damage_upper += 5 - bear_target.wound_bonus += 5 - bear_target.update_icons() - to_chat(user, span_info("You strap the armor plating to [bear_target] and sharpen [bear_target.p_their()] claws with the nail filer. This was a great idea.")) +/obj/item/bear_armor/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + if(!istype(interacting_with, /mob/living/basic/bear)) + return NONE + var/mob/living/basic/bear/bear = interacting_with + if(bear.armored) + to_chat(user, span_warning("[bear] has already been armored up!")) + return ITEM_INTERACT_BLOCKING + bear.armored = TRUE + bear.maxHealth += 60 + bear.health += 60 + bear.armour_penetration += 20 + bear.melee_damage_lower += 3 + bear.melee_damage_upper += 5 + bear.wound_bonus += 5 + bear.update_icons() + to_chat(user, span_info("You strap the armor plating to [bear] and sharpen [bear.p_their()] claws with the nail filer. This was a great idea.")) qdel(src) + return ITEM_INTERACT_SUCCESS diff --git a/code/game/objects/items/bodybag.dm b/code/game/objects/items/bodybag.dm index 7e67b23c3b716..c949f977508f1 100644 --- a/code/game/objects/items/bodybag.dm +++ b/code/game/objects/items/bodybag.dm @@ -14,11 +14,11 @@ else deploy_bodybag(user, get_turf(src)) -/obj/item/bodybag/afterattack(atom/target, mob/user, proximity) - . = ..() - if(proximity) - if(isopenturf(target)) - deploy_bodybag(user, target) +/obj/item/bodybag/interact_with_atom(atom/interacting_with, mob/living/user, flags) + if(isopenturf(interacting_with)) + deploy_bodybag(user, interacting_with) + return ITEM_INTERACT_SUCCESS + return NONE /obj/item/bodybag/attempt_pickup(mob/user) // can't pick ourselves up if we are inside of the bodybag, else very weird things may happen diff --git a/code/game/objects/items/botpad_remote.dm b/code/game/objects/items/botpad_remote.dm index ff77b0880632c..6b219725aa087 100644 --- a/code/game/objects/items/botpad_remote.dm +++ b/code/game/objects/items/botpad_remote.dm @@ -16,34 +16,35 @@ return ..() /obj/item/botpad_remote/attack_self(mob/living/user) - playsound(src, get_sfx(SFX_TERMINAL_TYPE), 25, FALSE) + playsound(src, SFX_TERMINAL_TYPE, 25, FALSE) try_launch(user) return /obj/item/botpad_remote/attack_self_secondary(mob/living/user) - playsound(src, get_sfx(SFX_TERMINAL_TYPE), 25, FALSE) + playsound(src, SFX_TERMINAL_TYPE, 25, FALSE) if(connected_botpad) connected_botpad.recall(user) return user?.balloon_alert(user, "no connected pad!") return -/obj/item/botpad_remote/multitool_act(mob/living/user, obj/item/tool) - if(!multitool_check_buffer(user, tool)) +/obj/item/botpad_remote/multitool_act(mob/living/user, obj/item/multitool/multitool) + . = NONE + if(!istype(multitool.buffer, /obj/machinery/botpad)) return - var/obj/item/multitool/multitool = tool - if(istype(multitool.buffer, /obj/machinery/botpad)) - var/obj/machinery/botpad/buffered_remote = multitool.buffer - if(buffered_remote == connected_botpad) - to_chat(user, span_warning("Controller cannot connect to its own botpad!")) - else if(!connected_botpad && istype(buffered_remote, /obj/machinery/botpad)) - connected_botpad = buffered_remote - connected_botpad.connected_remote = src - connected_botpad.id = id - multitool.set_buffer(null) - to_chat(user, span_notice("You connect the controller to the pad with data from the [multitool.name]'s buffer.")) - else - to_chat(user, span_warning("Unable to upload!")) + + var/obj/machinery/botpad/buffered_remote = multitool.buffer + if(buffered_remote == connected_botpad) + to_chat(user, span_warning("Controller cannot connect to its own botpad!")) + return ITEM_INTERACT_BLOCKING + + if(!connected_botpad && istype(buffered_remote, /obj/machinery/botpad)) + connected_botpad = buffered_remote + connected_botpad.connected_remote = src + connected_botpad.id = id + multitool.set_buffer(null) + to_chat(user, span_notice("You connect the controller to the pad with data from the [multitool.name]'s buffer.")) + return ITEM_INTERACT_SUCCESS /obj/item/botpad_remote/proc/try_launch(mob/living/user) if(!connected_botpad) diff --git a/code/game/objects/items/broom.dm b/code/game/objects/items/broom.dm index 6b89ab7b7926e..fa849c51437da 100644 --- a/code/game/objects/items/broom.dm +++ b/code/game/objects/items/broom.dm @@ -54,12 +54,9 @@ /obj/item/pushbroom/proc/on_unwield(obj/item/source, mob/user) UnregisterSignal(user, COMSIG_MOVABLE_PRE_MOVE) -/obj/item/pushbroom/afterattack(atom/A, mob/user, proximity) - . = ..() - if(!proximity) - return - sweep(user, A) - return . | AFTERATTACK_PROCESSED_ITEM +/obj/item/pushbroom/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + sweep(user, interacting_with) + return NONE // I guess /** * Attempts to push up to BROOM_PUSH_LIMIT atoms from a given location the user's faced direction @@ -68,13 +65,24 @@ * * user - The user of the pushbroom * * A - The atom which is located at the location to push atoms from */ -/obj/item/pushbroom/proc/sweep(mob/user, atom/A) +/obj/item/pushbroom/proc/sweep(mob/user, atom/atom) SIGNAL_HANDLER - var/turf/current_item_loc = isturf(A) ? A : A.loc + do_sweep(src, user, atom, user.dir) + +/** +* Sweep objects in the direction we're facing towards our direction +* Arguments +* * broomer - The object being used for brooming +* * user - The person who is brooming +* * target - The object or tile that's target of a broom click or being moved into +* * sweep_dir - The directions in which we sweep objects +*/ +/proc/do_sweep(obj/broomer, mob/user, atom/target, sweep_dir) + var/turf/current_item_loc = isturf(target) ? target : target.loc if (!isturf(current_item_loc)) return - var/turf/new_item_loc = get_step(current_item_loc, user.dir) + var/turf/new_item_loc = get_step(current_item_loc, sweep_dir) var/list/items_to_sweep = list() var/i = 1 @@ -86,16 +94,15 @@ if(i > BROOM_PUSH_LIMIT) break - SEND_SIGNAL(new_item_loc, COMSIG_TURF_RECEIVE_SWEEPED_ITEMS, src, user, items_to_sweep) + SEND_SIGNAL(new_item_loc, COMSIG_TURF_RECEIVE_SWEEPED_ITEMS, broomer, user, items_to_sweep) if(!length(items_to_sweep)) return for (var/obj/item/garbage in items_to_sweep) - garbage.Move(new_item_loc, user.dir) - - playsound(loc, 'sound/weapons/thudswoosh.ogg', 30, TRUE, -1) + garbage.Move(new_item_loc, sweep_dir) + playsound(current_item_loc, 'sound/weapons/thudswoosh.ogg', 30, TRUE, -1) /obj/item/pushbroom/cyborg name = "cyborg push broom" diff --git a/code/game/objects/items/cardboard_cutouts.dm b/code/game/objects/items/cardboard_cutouts.dm index 71f3a244a3081..d4508710a8547 100644 --- a/code/game/objects/items/cardboard_cutouts.dm +++ b/code/game/objects/items/cardboard_cutouts.dm @@ -166,6 +166,12 @@ /obj/item/cardboard_cutout/adaptive //Purchased by Syndicate agents, these cutouts are indistinguishable from normal cutouts but aren't discolored when their appearance is changed deceptive = TRUE +/obj/item/cardboard_cutout/nuclear_operative + starting_cutout = "Nuclear Operative" + +/obj/item/cardboard_cutout/xenomorph + starting_cutout = "Xenomorph" + /datum/cardboard_cutout /// Name of the cutout, used for radial selection and the global list. var/name = "Boardjak" @@ -317,7 +323,7 @@ outfit = /datum/outfit/ashwalker/spear /datum/cardboard_cutout/ash_walker/get_name() - return lizard_name(pick(MALE, FEMALE)) + return generate_random_name_species_based(species_type = /datum/species/lizard) /datum/cardboard_cutout/death_squad name = "Deathsquad Officer" diff --git a/code/game/objects/items/cards_ids.dm b/code/game/objects/items/cards_ids.dm index c3621cd332958..5dc826e8fd51e 100644 --- a/code/game/objects/items/cards_ids.dm +++ b/code/game/objects/items/cards_ids.dm @@ -56,6 +56,7 @@ icon_state = "card_grey" worn_icon_state = "nothing" slot_flags = ITEM_SLOT_ID + interaction_flags_click = FORBID_TELEKINESIS_REACH armor_type = /datum/armor/card_id resistance_flags = FIRE_PROOF | ACID_PROOF @@ -424,13 +425,11 @@ user.visible_message(span_notice("[user] shows you: [icon2html(src, viewers(user))] [src.name][minor]."), span_notice("You show \the [src.name][minor].")) add_fingerprint(user) -/obj/item/card/id/afterattack_secondary(atom/target, mob/user, proximity_flag, click_parameters) - . = ..() - if(. == SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN) - return - if(!proximity_flag || !check_allowed_items(target) || !isfloorturf(target)) - return - try_project_paystand(user, target) +/obj/item/card/id/interact_with_atom_secondary(atom/interacting_with, mob/living/user, list/modifiers) + if(!check_allowed_items(interacting_with) || !isfloorturf(interacting_with)) + return NONE + try_project_paystand(user, interacting_with) + return ITEM_INTERACT_SUCCESS /obj/item/card/id/attack_self_secondary(mob/user, modifiers) . = ..() @@ -454,7 +453,7 @@ if(!COOLDOWN_FINISHED(src, last_holopay_projection)) balloon_alert(user, "still recharging") return - if(can_be_used_in_payment(user)) + if(!can_be_used_in_payment(user)) balloon_alert(user, "no account!") to_chat(user, span_warning("You need a valid bank account to do this.")) return @@ -478,7 +477,7 @@ var/obj/structure/holopay/new_store = new(projection) if(new_store?.assign_card(projection, src)) COOLDOWN_START(src, last_holopay_projection, HOLOPAY_PROJECTION_INTERVAL) - playsound(projection, "sound/effects/empulse.ogg", 40, TRUE) + playsound(projection, 'sound/effects/empulse.ogg', 40, TRUE) my_store = new_store /** @@ -553,26 +552,26 @@ if(ispath(trim)) SSid_access.apply_trim_to_card(src, trim) -/obj/item/card/id/attackby(obj/item/W, mob/user, params) - if(istype(W, /obj/item/rupee)) +/obj/item/card/id/item_interaction(mob/living/user, obj/item/tool, list/modifiers) + if(istype(tool, /obj/item/rupee)) to_chat(user, span_warning("Your ID smartly rejects the strange shard of glass. Who knew, apparently it's not ACTUALLY valuable!")) - return - else if(iscash(W)) - insert_money(W, user) - return - else if(istype(W, /obj/item/storage/bag/money)) - var/obj/item/storage/bag/money/money_bag = W + return ITEM_INTERACT_BLOCKING + else if(iscash(tool)) + return insert_money(tool, user) ? ITEM_INTERACT_SUCCESS : ITEM_INTERACT_BLOCKING + else if(istype(tool, /obj/item/storage/bag/money)) + var/obj/item/storage/bag/money/money_bag = tool var/list/money_contained = money_bag.contents var/money_added = mass_insert_money(money_contained, user) - if (money_added) - to_chat(user, span_notice("You stuff the contents into the card! They disappear in a puff of bluespace smoke, adding [money_added] worth of credits to the linked account.")) - return - else - return ..() + if(!money_added) + return ITEM_INTERACT_BLOCKING + to_chat(user, span_notice("You stuff the contents into the card! They disappear in a puff of bluespace smoke, adding [money_added] worth of credits to the linked account.")) + return ITEM_INTERACT_SUCCESS + return NONE /** * Insert credits or coins into the ID card and add their value to the associated bank account. * + * Returns TRUE if the money was successfully inserted, FALSE otherwise. * Arguments: * money - The item to attempt to convert to credits and insert into the card. * user - The user inserting the item. @@ -585,11 +584,11 @@ if(!registered_account) to_chat(user, span_warning("[src] doesn't have a linked account to deposit [money] into!")) - return + return FALSE var/cash_money = money.get_item_credit_value() if(!cash_money) to_chat(user, span_warning("[money] doesn't seem to be worth anything!")) - return + return FALSE registered_account.adjust_money(cash_money, "System: Deposit") SSblackbox.record_feedback("amount", "credits_inserted", cash_money) log_econ("[cash_money] credits were inserted into [src] owned by [src.registered_name]") @@ -600,6 +599,7 @@ to_chat(user, span_notice("The linked account now reports a balance of [registered_account.account_balance] cr.")) qdel(money) + return TRUE /** * Insert multiple money or money-equivalent items at once. @@ -633,9 +633,6 @@ /obj/item/card/id/proc/alt_click_can_use_id(mob/living/user) if(!isliving(user)) return FALSE - if(!user.can_perform_action(src, FORBID_TELEKINESIS_REACH)) - return FALSE - return TRUE /// Attempts to set a new bank account on the ID card. @@ -706,13 +703,11 @@ registered_account.bank_card_talk(span_warning("ERROR: The linked account requires [difference] more credit\s to perform that withdrawal."), TRUE) return CLICK_ACTION_BLOCKING -/obj/item/card/id/alt_click_secondary(mob/user) - . = ..() +/obj/item/card/id/click_alt_secondary(mob/user) if(!alt_click_can_use_id(user)) - return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN + return if(!registered_account || registered_account.replaceable) set_new_account(user) - return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN /obj/item/card/id/proc/pay_debt(user) var/amount_to_pay = tgui_input_number(user, "How much do you want to pay? (Max: [registered_account.account_balance] cr)", "Debt Payment", max_value = min(registered_account.account_balance, registered_account.account_debt)) @@ -959,20 +954,41 @@ return ..() - -/obj/item/card/id/advanced/attackby(obj/item/W, mob/user, params) +/obj/item/card/id/advanced/item_interaction(mob/living/user, obj/item/tool, list/modifiers) . = ..() - if(istype(W, /obj/item/toy/crayon)) - var/obj/item/toy/crayon/our_crayon = W - if(tgui_alert(usr, "Recolor Department or Subdepartment?", "Recoloring ID...", list("Department", "Subdepartment")) == "Department") - if(!do_after(user, 2 SECONDS)) // Doesn't technically require a spraycan's cap to be off but shhh - return + if(.) + return . + + if(istype(tool, /obj/item/toy/crayon)) + return recolor_id(user, tool) + +/obj/item/card/id/advanced/proc/recolor_id(mob/living/user, obj/item/toy/crayon/our_crayon) + if(our_crayon.is_capped) + balloon_alert(user, "take the cap off first!") + return ITEM_INTERACT_BLOCKING + var/choice = tgui_alert(usr, "Recolor Department or Subdepartment?", "Recoloring ID...", list("Department", "Subdepartment")) + if(isnull(choice) \ + || QDELETED(user) \ + || QDELETED(src) \ + || QDELETED(our_crayon) \ + || !usr.can_perform_action(src, ALLOW_RESTING) \ + || !usr.can_perform_action(our_crayon, ALLOW_RESTING) \ + ) + return ITEM_INTERACT_BLOCKING + + switch(choice) + if("Department") + if(!do_after(user, 2 SECONDS)) + return ITEM_INTERACT_BLOCKING department_color_override = our_crayon.paint_color balloon_alert(user, "recolored") - else if(do_after(user, 1 SECONDS)) + if("Subdepartment") + if(!do_after(user, 1 SECONDS)) + return ITEM_INTERACT_BLOCKING subdepartment_color_override = our_crayon.paint_color balloon_alert(user, "recolored") - update_icon() + update_icon() + return ITEM_INTERACT_SUCCESS /obj/item/card/id/advanced/proc/update_intern_status(datum/source, mob/user, slot) SIGNAL_HANDLER @@ -1281,27 +1297,38 @@ /// Time left on a card till they can leave. var/time_left = 0 -/obj/item/card/id/advanced/prisoner/attackby(obj/item/card/id/C, mob/user) - ..() - var/list/id_access = C.GetAccess() +/obj/item/card/id/advanced/prisoner/item_interaction(mob/living/user, obj/item/tool, list/modifiers) + . = ..() + if(.) + return . + + if(isidcard(tool)) + return set_sentence_time(user, tool) + +/obj/item/card/id/advanced/prisoner/proc/set_sentence_time(mob/living/user, obj/item/card/id/our_card) + var/list/id_access = our_card.GetAccess() if(!(ACCESS_BRIG in id_access)) - return FALSE - if(loc != user) + balloon_alert(user, "access denied!") + return ITEM_INTERACT_BLOCKING + if(!user.is_holding(src)) to_chat(user, span_warning("You must be holding the ID to continue!")) - return FALSE - if(timed) + return ITEM_INTERACT_BLOCKING + + if(timed) // If we already have a time set, reset the card timed = FALSE time_to_assign = initial(time_to_assign) registered_name = initial(registered_name) STOP_PROCESSING(SSobj, src) - to_chat(user, "Restating prisoner ID to default parameters.") - return + to_chat(user, "Resetting prisoner ID to default parameters.") + return ITEM_INTERACT_SUCCESS + var/choice = tgui_input_number(user, "Sentence time in seconds", "Sentencing") - if(!choice || QDELETED(user) || QDELETED(src) || !usr.can_perform_action(src, FORBID_TELEKINESIS_REACH) || loc != user) - return FALSE + if(isnull(choice) || QDELETED(user) || QDELETED(src) || !user.can_perform_action(src, FORBID_TELEKINESIS_REACH) || !user.is_holding(src)) + return ITEM_INTERACT_BLOCKING time_to_assign = choice - to_chat(user, "You set the sentence time to [time_to_assign] seconds.") + to_chat(user, "You set the sentence time to [DisplayTimeText(time_to_assign * 10)].") timed = TRUE + return ITEM_INTERACT_SUCCESS /obj/item/card/id/advanced/prisoner/proc/start_timer() say("Sentence started, welcome to the corporate rehabilitation center!") @@ -1313,10 +1340,15 @@ return if(timed) - if(time_left <= 0) + if(time_to_assign > 0) + . += span_notice("The digital timer on the card is set to [DisplayTimeText(time_to_assign * 10)]. The timer will start once the prisoner passes through the prison gate scanners.") + else if(time_left <= 0) . += span_notice("The digital timer on the card has zero seconds remaining. You leave a changed man, but a free man nonetheless.") else - . += span_notice("The digital timer on the card has [time_left] seconds remaining. Don't do the crime if you can't do the time.") + . += span_notice("The digital timer on the card has [DisplayTimeText(time_left * 10)] remaining. Don't do the crime if you can't do the time.") + + . += span_notice("[EXAMINE_HINT("Swipe")] a security ID on the card to [timed ? "re" : ""]set the genpop sentence time.") + . += span_notice("Remember to [EXAMINE_HINT("swipe")] the card on a genpop locker to link it.") /obj/item/card/id/advanced/prisoner/process(seconds_per_tick) if(!timed) @@ -1400,68 +1432,59 @@ theft_target = null return ..() -/obj/item/card/id/advanced/chameleon/afterattack(atom/target, mob/user, proximity, click_parameters) - . = ..() - if(!proximity) - return - - if(isidcard(target)) - theft_target = WEAKREF(target) +/obj/item/card/id/advanced/chameleon/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + if(isidcard(interacting_with)) + theft_target = WEAKREF(interacting_with) ui_interact(user) - return . | AFTERATTACK_PROCESSED_ITEM - -/obj/item/card/id/advanced/chameleon/pre_attack_secondary(atom/target, mob/living/user, params) - . = ..() - if(. == SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN) - return . + return ITEM_INTERACT_SUCCESS + return NONE +/obj/item/card/id/advanced/chameleon/interact_with_atom_secondary(atom/interacting_with, mob/living/user, list/modifiers) // If we're attacking a human, we want it to be covert. We're not ATTACKING them, we're trying // to sneakily steal their accesses by swiping our agent ID card near them. As a result, we - // return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN to cancel any part of the following the attack chain. - if(ishuman(target)) - target.balloon_alert(user, "scanning ID card...") - - if(!do_after(user, 2 SECONDS, target)) - target.balloon_alert(user, "interrupted!") - return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN + // return ITEM_INTERACT_BLOCKING to cancel any part of the following the attack chain. + if(ishuman(interacting_with)) + interacting_with.balloon_alert(user, "scanning ID card...") - var/mob/living/carbon/human/human_target = target + if(!do_after(user, 2 SECONDS, interacting_with)) + interacting_with.balloon_alert(user, "interrupted!") + return ITEM_INTERACT_BLOCKING + var/mob/living/carbon/human/human_target = interacting_with var/list/target_id_cards = human_target.get_all_contents_type(/obj/item/card/id) if(!length(target_id_cards)) - target.balloon_alert(user, "no IDs!") - return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN + interacting_with.balloon_alert(user, "no IDs!") + return ITEM_INTERACT_BLOCKING var/selected_id = pick(target_id_cards) - target.balloon_alert(user, UNLINT("IDs synced")) + interacting_with.balloon_alert(user, UNLINT("IDs synced")) theft_target = WEAKREF(selected_id) ui_interact(user) - return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN + return ITEM_INTERACT_SUCCESS - if(isitem(target)) - var/obj/item/target_item = target + if(isitem(interacting_with)) + var/obj/item/target_item = interacting_with - target.balloon_alert(user, "scanning ID card...") + interacting_with.balloon_alert(user, "scanning ID card...") var/list/target_id_cards = target_item.get_all_contents_type(/obj/item/card/id) - var/target_item_id = target_item.GetID() if(target_item_id) target_id_cards |= target_item_id if(!length(target_id_cards)) - target.balloon_alert(user, "no IDs!") - return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN + interacting_with.balloon_alert(user, "no IDs!") + return ITEM_INTERACT_BLOCKING var/selected_id = pick(target_id_cards) - target.balloon_alert(user, UNLINT("IDs synced")) + interacting_with.balloon_alert(user, UNLINT("IDs synced")) theft_target = WEAKREF(selected_id) ui_interact(user) - return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN + return ITEM_INTERACT_SUCCESS - return . + return NONE /obj/item/card/id/advanced/chameleon/ui_interact(mob/user, datum/tgui/ui) ui = SStgui.try_update_ui(user, src, ui) @@ -1776,11 +1799,10 @@ voice_name += " (as [scribbled_name])" stored_name[NAME_PART_INDEX] = voice_name -/obj/item/card/cardboard/attackby(obj/item/item, mob/living/user, params) - if(user.can_write(item, TRUE)) - INVOKE_ASYNC(src, PROC_REF(modify_card), user, item) - return TRUE - return ..() +/obj/item/card/cardboard/item_interaction(mob/living/user, obj/item/tool, list/modifiers) + if(user.can_write(tool, TRUE)) + INVOKE_ASYNC(src, PROC_REF(modify_card), user, tool) + return ITEM_INTERACT_SUCCESS ///Lets the user write a name, assignment or trim on the card, or reset it. Only the name is important for the component. /obj/item/card/cardboard/proc/modify_card(mob/living/user, obj/item/item) diff --git a/code/game/objects/items/choice_beacon.dm b/code/game/objects/items/choice_beacon.dm index 06385b765cfab..75a3f35c80b97 100644 --- a/code/game/objects/items/choice_beacon.dm +++ b/code/game/objects/items/choice_beacon.dm @@ -139,7 +139,7 @@ icon_state = "self_delivery" inhand_icon_state = "self_delivery" company_source = "S.E.L.F." - company_message = span_bold("Request status: Recieved. Package status: Delivered. Notes: To assure optimal value, use supplied Interdyne-brand autosurgeons to change implantment status.") + company_message = span_bold("Request status: Received. Package status: Delivered. Notes: To assure optimal value, use supplied Interdyne-brand autosurgeons to change implantment status.") /obj/item/choice_beacon/augments/generate_display_names() var/static/list/augment_list diff --git a/code/game/objects/items/cigs_lighters.dm b/code/game/objects/items/cigs_lighters.dm index 1b18626859754..32ad7f8845de3 100644 --- a/code/game/objects/items/cigs_lighters.dm +++ b/code/game/objects/items/cigs_lighters.dm @@ -55,6 +55,10 @@ CIGARETTE PACKETS ARE IN FANCY.DM desc = "A [initial(name)]. This one is lit." attack_verb_continuous = string_list(list("burns", "singes")) attack_verb_simple = string_list(list("burn", "singe")) + if(isliving(loc)) + var/mob/living/male_model = loc + if(male_model.fire_stacks && !(male_model.on_fire)) + male_model.ignite_mob() START_PROCESSING(SSobj, src) update_appearance() @@ -90,7 +94,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM message_admins("[ADMIN_LOOKUPFLW(user)] set [key_name_admin(M)] on fire with [src] at [AREACOORD(user)]") user.log_message("set [key_name(M)] on fire with [src]", LOG_ATTACK) - var/obj/item/clothing/mask/cigarette/cig = help_light_cig(M) + var/obj/item/cigarette/cig = help_light_cig(M) if(!lit || !cig || user.combat_mode) ..() return @@ -105,7 +109,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM /// Finds a cigarette on another mob to help light. /obj/item/proc/help_light_cig(mob/living/M) var/mask_item = M.get_item_by_slot(ITEM_SLOT_MASK) - if(istype(mask_item, /obj/item/clothing/mask/cigarette)) + if(istype(mask_item, /obj/item/cigarette)) return mask_item /obj/item/match/get_temperature() @@ -125,19 +129,20 @@ CIGARETTE PACKETS ARE IN FANCY.DM ////////////////// //FINE SMOKABLES// ////////////////// -/obj/item/clothing/mask/cigarette +/obj/item/cigarette name = "cigarette" desc = "A roll of tobacco and nicotine." + icon = 'icons/obj/cigarettes.dmi' icon_state = "cigoff" inhand_icon_state = "cigon" //gets overriden during intialize(), just have it for unit test sanity. throw_speed = 0.5 w_class = WEIGHT_CLASS_TINY - body_parts_covered = null + slot_flags = ITEM_SLOT_MASK grind_results = list() heat = 1000 throw_verb = "flick" /// Whether this cigarette has been lit. - var/lit = FALSE + VAR_FINAL/lit = FALSE /// Whether this cigarette should start lit. var/starts_lit = FALSE // Note - these are in masks.dmi not in cigarette.dmi @@ -169,8 +174,14 @@ CIGARETTE PACKETS ARE IN FANCY.DM var/choke_forever = FALSE /// When choking, what is the maximum amount of time we COULD choke for var/choke_time_max = 30 SECONDS // I am mean - -/obj/item/clothing/mask/cigarette/Initialize(mapload) + /// The particle effect of the smoke rising out of the cigarette when lit + VAR_PRIVATE/obj/effect/abstract/particle_holder/cig_smoke + /// The particle effect of the smoke rising out of the mob when...smoked + VAR_PRIVATE/obj/effect/abstract/particle_holder/mob_smoke + /// How long the current mob has been smoking this cigarette + VAR_FINAL/how_long_have_we_been_smokin = 0 SECONDS + +/obj/item/cigarette/Initialize(mapload) . = ..() create_reagents(chem_volume, INJECTABLE | NO_REACT) if(list_reagents) @@ -179,33 +190,69 @@ CIGARETTE PACKETS ARE IN FANCY.DM light() AddComponent(/datum/component/knockoff, 90, list(BODY_ZONE_PRECISE_MOUTH), slot_flags) //90% to knock off when wearing a mask AddElement(/datum/element/update_icon_updates_onmob) + RegisterSignal(src, COMSIG_ATOM_TOUCHED_SPARKS, PROC_REF(sparks_touched)) icon_state = icon_off inhand_icon_state = inhand_icon_off -/obj/item/clothing/mask/cigarette/Destroy() +/obj/item/cigarette/Destroy() STOP_PROCESSING(SSobj, src) + QDEL_NULL(mob_smoke) + QDEL_NULL(cig_smoke) return ..() -/obj/item/clothing/mask/cigarette/equipped(mob/equipee, slot) +/obj/item/cigarette/equipped(mob/equipee, slot) . = ..() if(!(slot & ITEM_SLOT_MASK)) - UnregisterSignal(equipee, COMSIG_HUMAN_FORCESAY) + UnregisterSignal(equipee, list(COMSIG_HUMAN_FORCESAY, COMSIG_ATOM_DIR_CHANGE)) return RegisterSignal(equipee, COMSIG_HUMAN_FORCESAY, PROC_REF(on_forcesay)) + RegisterSignal(equipee, COMSIG_ATOM_DIR_CHANGE, PROC_REF(on_mob_dir_change)) + if(lit && iscarbon(loc)) + make_mob_smoke(loc) -/obj/item/clothing/mask/cigarette/dropped(mob/dropee) +/obj/item/cigarette/dropped(mob/dropee) . = ..() - UnregisterSignal(dropee, COMSIG_HUMAN_FORCESAY) - -/obj/item/clothing/mask/cigarette/proc/on_forcesay(mob/living/source) + // Moving the cigarette from mask to hands (or pocket I guess) will emit a larger puff of smoke + if(!QDELETED(src) && !QDELETED(dropee) && how_long_have_we_been_smokin >= 4 SECONDS && iscarbon(dropee) && iscarbon(loc)) + var/mob/living/carbon/smoker = dropee + // This relies on the fact that dropped is called before slot is nulled + if(src == smoker.wear_mask && !smoker.incapacitated()) + long_exhale(smoker) + + UnregisterSignal(dropee, list(COMSIG_HUMAN_FORCESAY, COMSIG_ATOM_DIR_CHANGE)) + QDEL_NULL(mob_smoke) + how_long_have_we_been_smokin = 0 SECONDS + +/obj/item/cigarette/proc/on_forcesay(mob/living/source) SIGNAL_HANDLER source.apply_status_effect(/datum/status_effect/choke, src, lit, choke_forever ? -1 : rand(25 SECONDS, choke_time_max)) -/obj/item/clothing/mask/cigarette/suicide_act(mob/living/user) +/obj/item/cigarette/proc/on_mob_dir_change(mob/living/source, old_dir, new_dir) + SIGNAL_HANDLER + if(isnull(mob_smoke)) + return + update_particle_position(mob_smoke, new_dir) + +/obj/item/cigarette/proc/update_particle_position(obj/effect/abstract/particle_holder/to_edit, new_dir = loc.dir) + var/new_x = 0 + var/new_layer = initial(to_edit.layer) + if(new_dir & NORTH) + new_x = 4 + new_layer = BELOW_MOB_LAYER + else if(new_dir & SOUTH) + new_x = -4 + else if(new_dir & EAST) + new_x = 8 + else if(new_dir & WEST) + new_x = -8 + to_edit.set_particle_position(new_x, 8, 0) + to_edit.layer = new_layer + +/obj/item/cigarette/suicide_act(mob/living/user) user.visible_message(span_suicide("[user] is huffing [src] as quickly as [user.p_they()] can! It looks like [user.p_theyre()] trying to give [user.p_them()]self cancer.")) return (TOXLOSS|OXYLOSS) -/obj/item/clothing/mask/cigarette/attackby(obj/item/W, mob/user, params) +/obj/item/cigarette/attackby(obj/item/W, mob/user, params) if(lit) return ..() @@ -223,7 +270,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM to_chat(user, span_warning("There is nothing to smoke!")) /// Checks that we have enough air to smoke -/obj/item/clothing/mask/cigarette/proc/check_oxygen(mob/user) +/obj/item/cigarette/proc/check_oxygen(mob/user) if (reagents.has_reagent(/datum/reagent/oxygen)) return TRUE var/datum/gas_mixture/air = return_air() @@ -234,13 +281,14 @@ CIGARETTE PACKETS ARE IN FANCY.DM var/mob/living/carbon/the_smoker = user return the_smoker.can_breathe_helmet() -/obj/item/clothing/mask/cigarette/afterattack(obj/item/reagent_containers/cup/glass, mob/user, proximity) - . = ..() - if(!proximity || lit) //can't dip if cigarette is lit (it will heat the reagents in the glass instead) - return +/obj/item/cigarette/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + if(lit) //can't dip if cigarette is lit (it will heat the reagents in the glass instead) + return NONE + var/obj/item/reagent_containers/cup/glass = interacting_with if(!istype(glass)) //you can dip cigarettes into beakers - return - + return NONE + if(istype(glass, /obj/item/reagent_containers/cup/mortar)) + return NONE if(glass.reagents.trans_to(src, chem_volume, transferred_by = user)) //if reagents were transferred, show the message to_chat(user, span_notice("You dip \the [src] into \the [glass].")) //if not, either the beaker was empty, or the cigarette was full @@ -248,10 +296,9 @@ CIGARETTE PACKETS ARE IN FANCY.DM to_chat(user, span_warning("[glass] is empty!")) else to_chat(user, span_warning("[src] is full!")) + return ITEM_INTERACT_SUCCESS - return AFTERATTACK_PROCESSED_ITEM - -/obj/item/clothing/mask/cigarette/update_icon_state() +/obj/item/cigarette/update_icon_state() . = ..() if(lit) icon_state = icon_on @@ -260,15 +307,23 @@ CIGARETTE PACKETS ARE IN FANCY.DM icon_state = icon_off inhand_icon_state = inhand_icon_off + +/obj/item/cigarette/proc/sparks_touched(datum/source, obj/effect/particle_effect) + SIGNAL_HANDLER + + if(lit) + return + light() + /// Lights the cigarette with given flavor text. -/obj/item/clothing/mask/cigarette/proc/light(flavor_text = null) +/obj/item/cigarette/proc/light(flavor_text = null) if(lit) return lit = TRUE - + make_cig_smoke() if(!(flags_1 & INITIALIZED_1)) - update_icon() + update_appearance(UPDATE_ICON) return attack_verb_continuous = string_list(list("burns", "singes")) @@ -291,19 +346,18 @@ CIGARETTE PACKETS ARE IN FANCY.DM // allowing reagents to react after being lit reagents.flags &= ~(NO_REACT) reagents.handle_reactions() - update_icon() + update_appearance(UPDATE_ICON) if(flavor_text) var/turf/T = get_turf(src) T.visible_message(flavor_text) START_PROCESSING(SSobj, src) - //can't think of any other way to update the overlays :< - if(ismob(loc)) - var/mob/M = loc - M.update_worn_mask() - M.update_held_items() + if(iscarbon(loc)) + var/mob/living/carbon/smoker = loc + if(src == smoker.wear_mask) + make_mob_smoke(smoker) -/obj/item/clothing/mask/cigarette/extinguish() +/obj/item/cigarette/extinguish() . = ..() if(!lit) return @@ -315,16 +369,26 @@ CIGARETTE PACKETS ARE IN FANCY.DM STOP_PROCESSING(SSobj, src) reagents.flags |= NO_REACT lit = FALSE - update_icon() - + update_appearance(UPDATE_ICON) if(ismob(loc)) - var/mob/living/M = loc - to_chat(M, span_notice("Your [name] goes out.")) - M.update_worn_mask() - M.update_held_items() + to_chat(loc, span_notice("Your [name] goes out.")) + QDEL_NULL(cig_smoke) + QDEL_NULL(mob_smoke) + +/obj/item/cigarette/proc/long_exhale(mob/living/carbon/smoker) + smoker.visible_message( + span_notice("[smoker] exhales a large cloud of smoke from [src]."), + span_notice("You exhale a large cloud of smoke from [src]."), + ) + if(!isturf(smoker.loc)) + return + + var/obj/effect/abstract/particle_holder/big_smoke = new(smoker.loc, /particles/smoke/cig/big) + update_particle_position(big_smoke, smoker.dir) + QDEL_IN(big_smoke, big_smoke.particles.lifespan) /// Handles processing the reagents in the cigarette. -/obj/item/clothing/mask/cigarette/proc/handle_reagents() +/obj/item/cigarette/proc/handle_reagents(seconds_per_tick) if(!reagents.total_volume) return reagents.expose_temperature(heat, 0.05) @@ -351,6 +415,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM reagents.remove_all(to_smoke) return + how_long_have_we_been_smokin += seconds_per_tick * (1 SECONDS) reagents.expose(smoker, INGEST, min(to_smoke / reagents.total_volume, 1)) var/obj/item/organ/internal/lungs/lungs = smoker.get_organ_slot(ORGAN_SLOT_LUNGS) if(lungs && IS_ORGANIC_ORGAN(lungs)) @@ -359,7 +424,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM if(!reagents.trans_to(smoker, to_smoke, methods = INGEST, ignore_stomach = TRUE)) reagents.remove_all(to_smoke) -/obj/item/clothing/mask/cigarette/process(seconds_per_tick) +/obj/item/cigarette/process(seconds_per_tick) var/mob/living/user = isliving(loc) ? loc : null user?.ignite_mob() @@ -375,30 +440,36 @@ CIGARETTE PACKETS ARE IN FANCY.DM open_flame(heat) if((reagents?.total_volume) && COOLDOWN_FINISHED(src, drag_cooldown)) COOLDOWN_START(src, drag_cooldown, dragtime) - handle_reagents() + handle_reagents(seconds_per_tick) -/obj/item/clothing/mask/cigarette/attack_self(mob/user) +/obj/item/cigarette/attack_self(mob/user) if(lit) put_out(user, TRUE) return ..() -/obj/item/clothing/mask/cigarette/proc/put_out(mob/user, done_early = FALSE) +/obj/item/cigarette/proc/put_out(mob/user, done_early = FALSE) var/atom/location = drop_location() - if(done_early) - user.visible_message(span_notice("[user] calmly drops and treads on \the [src], putting it out instantly.")) - new /obj/effect/decal/cleanable/ash(location) - else if(user) - to_chat(user, span_notice("Your [name] goes out.")) + if(!isnull(user)) + if(done_early) + if(isfloorturf(location) && location.has_gravity()) + user.visible_message(span_notice("[user] calmly drops and treads on [src], putting it out instantly.")) + new /obj/effect/decal/cleanable/ash(location) + long_exhale(user) + else + user.visible_message(span_notice("[user] pinches out [src].")) + how_long_have_we_been_smokin = 0 SECONDS + else + to_chat(user, span_notice("Your [name] goes out.")) new type_butt(location) qdel(src) -/obj/item/clothing/mask/cigarette/attack(mob/living/carbon/M, mob/living/carbon/user) +/obj/item/cigarette/attack(mob/living/carbon/M, mob/living/carbon/user) if(!istype(M)) return ..() if(M.on_fire && !lit) light(span_notice("[user] lights [src] with [M]'s burning body. What a cold-blooded badass.")) return - var/obj/item/clothing/mask/cigarette/cig = help_light_cig(M) + var/obj/item/cigarette/cig = help_light_cig(M) if(!lit || !cig || user.combat_mode) return ..() @@ -409,45 +480,54 @@ CIGARETTE PACKETS ARE IN FANCY.DM else cig.light(span_notice("[user] holds the [name] out for [M], and lights [M.p_their()] [cig.name].")) -/obj/item/clothing/mask/cigarette/fire_act(exposed_temperature, exposed_volume) +/obj/item/cigarette/fire_act(exposed_temperature, exposed_volume) light() -/obj/item/clothing/mask/cigarette/get_temperature() +/obj/item/cigarette/get_temperature() return lit * heat +/obj/item/cigarette/proc/make_mob_smoke(mob/living/smoker) + mob_smoke = new(smoker, /particles/smoke/cig) + update_particle_position(mob_smoke, smoker.dir) + return mob_smoke + +/obj/item/cigarette/proc/make_cig_smoke() + cig_smoke = new(src, /particles/smoke/cig) + cig_smoke.particles?.scale *= 1.5 + return cig_smoke // Cigarette brands. -/obj/item/clothing/mask/cigarette/space_cigarette +/obj/item/cigarette/space_cigarette desc = "A Space brand cigarette that can be smoked anywhere." list_reagents = list(/datum/reagent/drug/nicotine = 9, /datum/reagent/oxygen = 9) smoketime = 4 MINUTES // space cigs have a shorter burn time than normal cigs smoke_all = TRUE // so that it doesn't runout of oxygen while being smoked in space -/obj/item/clothing/mask/cigarette/dromedary +/obj/item/cigarette/dromedary desc = "A DromedaryCo brand cigarette. Contrary to popular belief, does not contain Calomel, but is reported to have a watery taste." list_reagents = list(/datum/reagent/drug/nicotine = 13, /datum/reagent/water = 5) //camel has water -/obj/item/clothing/mask/cigarette/uplift +/obj/item/cigarette/uplift desc = "An Uplift Smooth brand cigarette. Smells refreshing." list_reagents = list(/datum/reagent/drug/nicotine = 13, /datum/reagent/consumable/menthol = 5) -/obj/item/clothing/mask/cigarette/robust +/obj/item/cigarette/robust desc = "A Robust brand cigarette." -/obj/item/clothing/mask/cigarette/robustgold +/obj/item/cigarette/robustgold desc = "A Robust Gold brand cigarette." list_reagents = list(/datum/reagent/drug/nicotine = 15, /datum/reagent/gold = 3) // Just enough to taste a hint of expensive metal. -/obj/item/clothing/mask/cigarette/carp +/obj/item/cigarette/carp desc = "A Carp Classic brand cigarette. A small label on its side indicates that it does NOT contain carpotoxin." -/obj/item/clothing/mask/cigarette/carp/Initialize(mapload) +/obj/item/cigarette/carp/Initialize(mapload) . = ..() if(!prob(5)) return reagents?.add_reagent(/datum/reagent/toxin/carpotoxin , 3) // They lied -/obj/item/clothing/mask/cigarette/syndicate +/obj/item/cigarette/syndicate desc = "An unknown brand cigarette." chem_volume = 60 smoketime = 2 MINUTES @@ -455,19 +535,19 @@ CIGARETTE PACKETS ARE IN FANCY.DM lung_harm = 1.5 list_reagents = list(/datum/reagent/drug/nicotine = 10, /datum/reagent/medicine/omnizine = 15) -/obj/item/clothing/mask/cigarette/shadyjims +/obj/item/cigarette/shadyjims desc = "A Shady Jim's Super Slims cigarette." lung_harm = 1.5 list_reagents = list(/datum/reagent/drug/nicotine = 15, /datum/reagent/toxin/lipolicide = 4, /datum/reagent/ammonia = 2, /datum/reagent/toxin/plantbgone = 1, /datum/reagent/toxin = 1.5) -/obj/item/clothing/mask/cigarette/xeno +/obj/item/cigarette/xeno desc = "A Xeno Filtered brand cigarette." lung_harm = 2 list_reagents = list (/datum/reagent/drug/nicotine = 20, /datum/reagent/medicine/regen_jelly = 15, /datum/reagent/drug/krokodil = 4) // Rollies. -/obj/item/clothing/mask/cigarette/rollie +/obj/item/cigarette/rollie name = "rollie" desc = "A roll of dried plant matter wrapped in thin paper." icon_state = "spliffoff" @@ -480,7 +560,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM list_reagents = null choke_time_max = 40 SECONDS -/obj/item/clothing/mask/cigarette/rollie/Initialize(mapload) +/obj/item/cigarette/rollie/Initialize(mapload) name = pick(list( "bifta", "bifter", @@ -526,20 +606,20 @@ CIGARETTE PACKETS ARE IN FANCY.DM pixel_x = rand(-5, 5) pixel_y = rand(-5, 5) -/obj/item/clothing/mask/cigarette/rollie/nicotine +/obj/item/cigarette/rollie/nicotine list_reagents = list(/datum/reagent/drug/nicotine = 15) -/obj/item/clothing/mask/cigarette/rollie/trippy +/obj/item/cigarette/rollie/trippy list_reagents = list(/datum/reagent/drug/nicotine = 15, /datum/reagent/drug/mushroomhallucinogen = 35) starts_lit = TRUE -/obj/item/clothing/mask/cigarette/rollie/cannabis +/obj/item/cigarette/rollie/cannabis list_reagents = list(/datum/reagent/drug/cannabis = 15) -/obj/item/clothing/mask/cigarette/rollie/mindbreaker +/obj/item/cigarette/rollie/mindbreaker list_reagents = list(/datum/reagent/toxin/mindbreaker = 35, /datum/reagent/toxin/lipolicide = 15) -/obj/item/clothing/mask/cigarette/candy +/obj/item/cigarette/candy name = "\improper Little Timmy's candy cigarette" desc = "For all ages*! Doesn't contain any amount of nicotine. Health and safety risks can be read on the tip of the cigarette." smoketime = 2 MINUTES @@ -553,7 +633,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM list_reagents = list(/datum/reagent/consumable/sugar = 20) choke_time_max = 70 SECONDS // This shit really is deadly -/obj/item/clothing/mask/cigarette/candy/nicotine +/obj/item/cigarette/candy/nicotine desc = "For all ages*! Doesn't contain any* amount of nicotine. Health and safety risks can be read on the tip of the cigarette." type_butt = /obj/item/food/candy_trash/nicotine list_reagents = list(/datum/reagent/consumable/sugar = 20, /datum/reagent/drug/nicotine = 20) //oh no! @@ -573,7 +653,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM //////////// // CIGARS // //////////// -/obj/item/clothing/mask/cigarette/cigar +/obj/item/cigarette/cigar name = "cigar" desc = "A brown roll of tobacco and... well, you're not quite sure. This thing's huge!" icon_state = "cigaroff" @@ -589,11 +669,11 @@ CIGARETTE PACKETS ARE IN FANCY.DM list_reagents = list(/datum/reagent/drug/nicotine = 25) choke_time_max = 40 SECONDS -/obj/item/clothing/mask/cigarette/cigar/premium +/obj/item/cigarette/cigar/premium name = "premium cigar" //this is the version that actually spawns in premium cigar cases, the distinction is made so that the smoker quirk can differentiate between the default cigar box and its subtypes -/obj/item/clothing/mask/cigarette/cigar/cohiba +/obj/item/cigarette/cigar/cohiba name = "\improper Cohiba Robusto cigar" desc = "There's little more you could want from a cigar." icon_state = "cigar2off" @@ -603,7 +683,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM chem_volume = 80 list_reagents = list(/datum/reagent/drug/nicotine = 40) -/obj/item/clothing/mask/cigarette/cigar/havana +/obj/item/cigarette/cigar/havana name = "premium Havanian cigar" desc = "A cigar fit for only the best of the best." icon_state = "cigar2off" @@ -616,7 +696,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM /obj/item/cigbutt name = "cigarette butt" desc = "A manky old cigarette butt." - icon = 'icons/obj/clothing/masks.dmi' + icon = 'icons/obj/cigarettes.dmi' icon_state = "cigbutt" w_class = WEIGHT_CLASS_TINY throwforce = 0 @@ -630,11 +710,11 @@ CIGARETTE PACKETS ARE IN FANCY.DM ///////////////// //SMOKING PIPES// ///////////////// -/obj/item/clothing/mask/cigarette/pipe +/obj/item/cigarette/pipe name = "smoking pipe" desc = "A pipe, for smoking. Probably made of meerschaum or something." icon_state = "pipeoff" - icon_on = "pipeon" //Note - these are in masks.dmi + icon_on = "pipeoff" //Note - these are in masks.dmi icon_off = "pipeoff" inhand_icon_state = null inhand_icon_on = null @@ -647,15 +727,15 @@ CIGARETTE PACKETS ARE IN FANCY.DM ///name of the stuff packed inside this pipe var/packeditem -/obj/item/clothing/mask/cigarette/pipe/Initialize(mapload) +/obj/item/cigarette/pipe/Initialize(mapload) . = ..() - update_name() + update_appearance(UPDATE_NAME) -/obj/item/clothing/mask/cigarette/pipe/update_name() +/obj/item/cigarette/pipe/update_name() . = ..() name = packeditem ? "[packeditem]-packed [initial(name)]" : "empty [initial(name)]" -/obj/item/clothing/mask/cigarette/pipe/put_out(mob/user, done_early = FALSE) +/obj/item/cigarette/pipe/put_out(mob/user, done_early = FALSE) lit = FALSE if(done_early) user.visible_message(span_notice("[user] puts out [src]."), span_notice("You put out [src].")) @@ -664,13 +744,11 @@ CIGARETTE PACKETS ARE IN FANCY.DM if(user) to_chat(user, span_notice("Your [name] goes out.")) packeditem = null - update_icon() - - inhand_icon_state = icon_off - user?.update_worn_mask() + update_appearance(UPDATE_ICON) STOP_PROCESSING(SSobj, src) + QDEL_NULL(cig_smoke) -/obj/item/clothing/mask/cigarette/pipe/attackby(obj/item/thing, mob/user, params) +/obj/item/cigarette/pipe/attackby(obj/item/thing, mob/user, params) if(!istype(thing, /obj/item/food/grown)) return ..() @@ -691,7 +769,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM qdel(to_smoke) -/obj/item/clothing/mask/cigarette/pipe/attack_self(mob/user) +/obj/item/cigarette/pipe/attack_self(mob/user) var/atom/location = drop_location() if(packeditem && !lit) to_chat(user, span_notice("You empty [src] onto [location].")) @@ -703,11 +781,11 @@ CIGARETTE PACKETS ARE IN FANCY.DM return return ..() -/obj/item/clothing/mask/cigarette/pipe/cobpipe +/obj/item/cigarette/pipe/cobpipe name = "corn cob pipe" desc = "A nicotine delivery system popularized by folksy backwoodsmen and kept popular in the modern age and beyond by space hipsters. Can be loaded with objects." icon_state = "cobpipeoff" - icon_on = "cobpipeon" //Note - these are in masks.dmi + icon_on = "cobpipeoff" //Note - these are in masks.dmi icon_off = "cobpipeoff" inhand_icon_on = null inhand_icon_off = null @@ -763,7 +841,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM /// Destroy the lighter when it's shot by a bullet /obj/item/lighter/proc/on_intercepted_bullet(mob/living/victim, obj/projectile/bullet) victim.visible_message(span_warning("\The [bullet] shatters on [victim]'s lighter!")) - playsound(victim, get_sfx(SFX_RICOCHET), 100, TRUE) + playsound(victim, SFX_RICOCHET, 100, TRUE) new /obj/effect/decal/cleanable/oil(get_turf(src)) do_sparks(1, TRUE, src) victim.dropItemToGround(src, force = TRUE, silent = TRUE) @@ -811,6 +889,10 @@ CIGARETTE PACKETS ARE IN FANCY.DM attack_verb_continuous = string_list(list("burns", "singes")) attack_verb_simple = string_list(list("burn", "singe")) START_PROCESSING(SSobj, src) + if(isliving(loc)) + var/mob/living/male_model = loc + if(male_model.fire_stacks && !(male_model.on_fire)) + male_model.ignite_mob() else hitsound = SFX_SWING_HIT force = 0 @@ -880,7 +962,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM if(lit && M.ignite_mob()) message_admins("[ADMIN_LOOKUPFLW(user)] set [key_name_admin(M)] on fire with [src] at [AREACOORD(user)]") log_game("[key_name(user)] set [key_name(M)] on fire with [src] at [AREACOORD(user)]") - var/obj/item/clothing/mask/cigarette/cig = help_light_cig(M) + var/obj/item/cigarette/cig = help_light_cig(M) if(!lit || !cig || user.combat_mode) ..() return @@ -1028,13 +1110,13 @@ CIGARETTE PACKETS ARE IN FANCY.DM /obj/item/rollingpaper/Initialize(mapload) . = ..() - AddComponent(/datum/component/customizable_reagent_holder, /obj/item/clothing/mask/cigarette/rollie, CUSTOM_INGREDIENT_ICON_NOCHANGE, ingredient_type=CUSTOM_INGREDIENT_TYPE_DRYABLE, max_ingredients=2) + AddComponent(/datum/component/customizable_reagent_holder, /obj/item/cigarette/rollie, CUSTOM_INGREDIENT_ICON_NOCHANGE, ingredient_type=CUSTOM_INGREDIENT_TYPE_DRYABLE, max_ingredients=2) /////////////// //VAPE NATION// /////////////// -/obj/item/clothing/mask/vape +/obj/item/vape name = "\improper E-Cigarette" desc = "A classy and highly sophisticated electronic cigarette, for classy and dignified gentlemen. A warning label reads \"Warning: Do not fill with flammable materials.\""//<<< i'd vape to that. icon_state = "vape" @@ -1044,6 +1126,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM greyscale_colors = "#2e2e2e" inhand_icon_state = null w_class = WEIGHT_CLASS_TINY + slot_flags = ITEM_SLOT_MASK flags_1 = IS_PLAYER_COLORABLE_1 /// The capacity of the vape. @@ -1057,16 +1140,16 @@ CIGARETTE PACKETS ARE IN FANCY.DM /// Whether the vape has been overloaded to spread smoke. var/super = FALSE -/obj/item/clothing/mask/vape/Initialize(mapload) +/obj/item/vape/Initialize(mapload) . = ..() create_reagents(chem_volume, NO_REACT) reagents.add_reagent(/datum/reagent/drug/nicotine, 50) -/obj/item/clothing/mask/vape/suicide_act(mob/living/user) +/obj/item/vape/suicide_act(mob/living/user) user.visible_message(span_suicide("[user] is puffin hard on dat vape, [user.p_they()] trying to join the vape life on a whole notha plane!"))//it doesn't give you cancer, it is cancer return (TOXLOSS|OXYLOSS) -/obj/item/clothing/mask/vape/screwdriver_act(mob/living/user, obj/item/tool) +/obj/item/vape/screwdriver_act(mob/living/user, obj/item/tool) if(!screw) screw = TRUE to_chat(user, span_notice("You open the cap on [src].")) @@ -1087,7 +1170,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM icon_state = initial(icon_state) set_greyscale(new_config = initial(greyscale_config)) -/obj/item/clothing/mask/vape/multitool_act(mob/living/user, obj/item/tool) +/obj/item/vape/multitool_act(mob/living/user, obj/item/tool) . = TRUE if(screw && !(obj_flags & EMAGGED))//also kinky if(!super) @@ -1104,7 +1187,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM if(screw && (obj_flags & EMAGGED)) to_chat(user, span_warning("[src] can't be modified!")) -/obj/item/clothing/mask/vape/emag_act(mob/user, obj/item/card/emag/emag_card) // I WON'T REGRET WRITTING THIS, SURLY. +/obj/item/vape/emag_act(mob/user, obj/item/card/emag/emag_card) // I WON'T REGRET WRITTING THIS, SURLY. if (!screw) balloon_alert(user, "open the cap first!") @@ -1124,12 +1207,12 @@ CIGARETTE PACKETS ARE IN FANCY.DM sp.start() return TRUE -/obj/item/clothing/mask/vape/attack_self(mob/user) +/obj/item/vape/attack_self(mob/user) if(reagents.total_volume > 0) to_chat(user, span_notice("You empty [src] of all reagents.")) reagents.clear_reagents() -/obj/item/clothing/mask/vape/equipped(mob/user, slot) +/obj/item/vape/equipped(mob/user, slot) . = ..() if(!(slot & ITEM_SLOT_MASK)) return @@ -1142,13 +1225,13 @@ CIGARETTE PACKETS ARE IN FANCY.DM reagents.flags &= ~(NO_REACT) START_PROCESSING(SSobj, src) -/obj/item/clothing/mask/vape/dropped(mob/user) +/obj/item/vape/dropped(mob/user) . = ..() if(user.get_item_by_slot(ITEM_SLOT_MASK) == src) reagents.flags |= NO_REACT STOP_PROCESSING(SSobj, src) -/obj/item/clothing/mask/vape/proc/handle_reagents() +/obj/item/vape/proc/handle_reagents() if(!reagents.total_volume) return @@ -1171,7 +1254,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM if(!reagents.trans_to(vaper, REAGENTS_METABOLISM, methods = INGEST, ignore_stomach = TRUE)) reagents.remove_all(REAGENTS_METABOLISM) -/obj/item/clothing/mask/vape/process(seconds_per_tick) +/obj/item/vape/process(seconds_per_tick) var/mob/living/M = loc if(isliving(loc)) @@ -1210,34 +1293,34 @@ CIGARETTE PACKETS ARE IN FANCY.DM handle_reagents() -/obj/item/clothing/mask/vape/red +/obj/item/vape/red greyscale_colors = "#A02525" flags_1 = NONE -/obj/item/clothing/mask/vape/blue +/obj/item/vape/blue greyscale_colors = "#294A98" flags_1 = NONE -/obj/item/clothing/mask/vape/purple +/obj/item/vape/purple greyscale_colors = "#9900CC" flags_1 = NONE -/obj/item/clothing/mask/vape/green +/obj/item/vape/green greyscale_colors = "#3D9829" flags_1 = NONE -/obj/item/clothing/mask/vape/yellow +/obj/item/vape/yellow greyscale_colors = "#DAC20E" flags_1 = NONE -/obj/item/clothing/mask/vape/orange +/obj/item/vape/orange greyscale_colors = "#da930e" flags_1 = NONE -/obj/item/clothing/mask/vape/black +/obj/item/vape/black greyscale_colors = "#2e2e2e" flags_1 = NONE -/obj/item/clothing/mask/vape/white +/obj/item/vape/white greyscale_colors = "#DCDCDC" flags_1 = NONE diff --git a/code/game/objects/items/circuitboards/machines/machine_circuitboards.dm b/code/game/objects/items/circuitboards/machines/machine_circuitboards.dm index 3afc7a9a03b10..a36fa9d2c37d1 100644 --- a/code/game/objects/items/circuitboards/machines/machine_circuitboards.dm +++ b/code/game/objects/items/circuitboards/machines/machine_circuitboards.dm @@ -340,9 +340,9 @@ build_path = /obj/machinery/power/smes req_components = list( /obj/item/stack/cable_coil = 5, - /obj/item/stock_parts/cell = 5, + /obj/item/stock_parts/power_store/battery = 5, /datum/stock_part/capacitor = 1) - def_components = list(/obj/item/stock_parts/cell = /obj/item/stock_parts/cell/high/empty) + def_components = list(/obj/item/stock_parts/power_store/battery = /obj/item/stock_parts/power_store/battery/high/empty) /obj/item/circuitboard/machine/techfab/department/engineering name = "\improper Departmental Techfab - Engineering" @@ -350,7 +350,7 @@ build_path = /obj/machinery/rnd/production/techfab/department/engineering /obj/item/circuitboard/machine/smes/super - def_components = list(/obj/item/stock_parts/cell = /obj/item/stock_parts/cell/super/empty) + def_components = list(/obj/item/stock_parts/power_store/battery = /obj/item/stock_parts/power_store/battery/super/empty) /obj/item/circuitboard/machine/thermomachine name = "Thermomachine" @@ -723,6 +723,22 @@ /datum/stock_part/micro_laser = 1, /datum/stock_part/servo = 1,) +/obj/item/circuitboard/machine/bookbinder + name = "Book Binder" + greyscale_colors = CIRCUIT_COLOR_GENERIC + build_path = /obj/machinery/bookbinder + req_components = list( + /datum/stock_part/servo = 1, + ) + +/obj/item/circuitboard/machine/libraryscanner + name = "Book Scanner" + greyscale_colors = CIRCUIT_COLOR_GENERIC + build_path = /obj/machinery/libraryscanner + req_components = list( + /datum/stock_part/scanning_module = 1, + ) + //Medical /obj/item/circuitboard/machine/chem_dispenser @@ -734,8 +750,8 @@ /datum/stock_part/capacitor = 1, /datum/stock_part/servo = 1, /obj/item/stack/sheet/glass = 1, - /obj/item/stock_parts/cell = 1) - def_components = list(/obj/item/stock_parts/cell = /obj/item/stock_parts/cell/high) + /obj/item/stock_parts/power_store/cell = 1) + def_components = list(/obj/item/stock_parts/power_store/cell = /obj/item/stock_parts/power_store/cell/high) needs_anchored = FALSE /obj/item/circuitboard/machine/chem_dispenser/fullupgrade @@ -746,7 +762,7 @@ /datum/stock_part/capacitor/tier4 = 2, /datum/stock_part/servo/tier4 = 2, /obj/item/stack/sheet/glass = 1, - /obj/item/stock_parts/cell/bluespace = 1, + /obj/item/stock_parts/power_store/cell/bluespace = 1, ) /obj/item/circuitboard/machine/chem_dispenser/mutagensaltpeter @@ -757,7 +773,7 @@ /datum/stock_part/capacitor/tier4 = 2, /datum/stock_part/servo/tier4 = 2, /obj/item/stack/sheet/glass = 1, - /obj/item/stock_parts/cell/bluespace = 1, + /obj/item/stock_parts/power_store/cell/bluespace = 1, ) /obj/item/circuitboard/machine/chem_dispenser/abductor @@ -771,7 +787,7 @@ /datum/stock_part/capacitor/tier4 = 2, /datum/stock_part/servo/tier4 = 2, /obj/item/stack/sheet/glass = 1, - /obj/item/stock_parts/cell/bluespace = 1, + /obj/item/stock_parts/power_store/cell/bluespace = 1, ) needs_anchored = FALSE @@ -914,8 +930,7 @@ /datum/stock_part/matter_bin = 2, /datum/stock_part/capacitor = 1, /datum/stock_part/servo = 1, - /obj/item/stack/sheet/glass = 1, - /obj/item/stock_parts/cell = 1) + /obj/item/stack/sheet/glass = 1) needs_anchored = FALSE /obj/item/circuitboard/machine/stasis @@ -952,9 +967,9 @@ build_path = /obj/machinery/recharge_station req_components = list( /datum/stock_part/capacitor = 2, - /obj/item/stock_parts/cell = 1, + /obj/item/stock_parts/power_store/cell = 1, /datum/stock_part/servo = 1) - def_components = list(/obj/item/stock_parts/cell = /obj/item/stock_parts/cell/high) + def_components = list(/obj/item/stock_parts/power_store/cell = /obj/item/stock_parts/power_store/cell/high) /obj/item/circuitboard/machine/destructive_analyzer name = "Destructive Analyzer" @@ -1151,7 +1166,7 @@ /datum/stock_part/capacitor/tier4 = 2, /datum/stock_part/servo/tier4 = 2, /obj/item/stack/sheet/glass = 1, - /obj/item/stock_parts/cell/bluespace = 1, + /obj/item/stock_parts/power_store/cell/bluespace = 1, ) /obj/item/circuitboard/machine/chem_dispenser/drinks/beer @@ -1166,7 +1181,7 @@ /datum/stock_part/capacitor/tier4 = 2, /datum/stock_part/servo/tier4 = 2, /obj/item/stack/sheet/glass = 1, - /obj/item/stock_parts/cell/bluespace = 1, + /obj/item/stock_parts/power_store/cell/bluespace = 1, ) /obj/item/circuitboard/machine/chem_master/condi @@ -1439,7 +1454,7 @@ req_components = list( /datum/stock_part/capacitor = 1, /datum/stock_part/micro_laser = 1, - /obj/item/stock_parts/cell/infinite/abductor = 1) + /obj/item/stock_parts/power_store/cell/infinite/abductor = 1) def_components = list( /datum/stock_part/capacitor = /datum/stock_part/capacitor/tier4, /datum/stock_part/micro_laser = /datum/stock_part/micro_laser/tier4) @@ -1611,3 +1626,14 @@ /datum/stock_part/micro_laser/tier2 = 2, /obj/item/stack/sheet/plasteel = 2, ) + +/obj/item/circuitboard/machine/flatpacker + name = "Flatpacker" + greyscale_colors = CIRCUIT_COLOR_ENGINEERING + build_path = /obj/machinery/flatpacker + req_components = list( + /datum/stock_part/matter_bin = 2, + /datum/stock_part/micro_laser = 2, + /datum/stock_part/servo = 1, + /obj/item/stack/sheet/plasteel = 5, + ) diff --git a/code/game/objects/items/climbingrope.dm b/code/game/objects/items/climbingrope.dm index 0317860407453..693f850be2a98 100644 --- a/code/game/objects/items/climbingrope.dm +++ b/code/game/objects/items/climbingrope.dm @@ -26,20 +26,23 @@ . += span_notice("Then, click solid ground adjacent to the hole above you.") . += span_notice("The rope looks like you could use it [uses] times before it falls apart.") -/obj/item/climbing_hook/afterattack(turf/open/target, mob/user, proximity_flag, click_parameters) - . = ..() - if(target.z == user.z) - return +/obj/item/climbing_hook/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + return ranged_interact_with_atom(interacting_with, user, modifiers) + +/obj/item/climbing_hook/ranged_interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + if(interacting_with.z == user.z) + return NONE + var/turf/open/target = interacting_with if(!istype(target) || isopenspaceturf(target)) - return - + return ITEM_INTERACT_BLOCKING + var/turf/user_turf = get_turf(user) var/turf/above = GET_TURF_ABOVE(user_turf) if(target_blocked(target, above)) - return + return ITEM_INTERACT_BLOCKING if(!isopenspaceturf(above) || !above.Adjacent(target)) //are we below a hole, is the target blocked, is the target adjacent to our hole balloon_alert(user, "blocked!") - return + return ITEM_INTERACT_BLOCKING var/away_dir = get_dir(above, target) user.visible_message(span_notice("[user] begins climbing upwards with [src]."), span_notice("You get to work on properly hooking [src] and going upwards.")) @@ -56,6 +59,7 @@ qdel(src) QDEL_LIST(effects) + return ITEM_INTERACT_SUCCESS // didnt want to mess up is_blocked_turf_ignore_climbable /// checks if our target is blocked, also checks for border objects facing the above turf and climbable stuff diff --git a/code/game/objects/items/clown_items.dm b/code/game/objects/items/clown_items.dm index 27fa0031485a9..3b10f044fc3c2 100644 --- a/code/game/objects/items/clown_items.dm +++ b/code/game/objects/items/clown_items.dm @@ -118,7 +118,9 @@ return TOXLOSS /obj/item/soap/proc/should_clean(datum/cleaning_source, atom/atom_to_clean, mob/living/cleaner) - return check_allowed_items(atom_to_clean) + . = CLEAN_ALLOWED + if(!check_allowed_items(atom_to_clean)) + . |= CLEAN_NO_XP /** * Decrease the number of uses the bar of soap has. @@ -145,17 +147,15 @@ qdel(src) /obj/item/soap/nanotrasen/cyborg/noUses(mob/user) - to_chat(user, span_warning("The soap has ran out of chemicals")) + to_chat(user, span_warning("[src] has ran out of chemicals! Head to a recharger to refill it.")) -/obj/item/soap/nanotrasen/cyborg/afterattack(atom/target, mob/user, proximity) - . = isitem(target) ? AFTERATTACK_PROCESSED_ITEM : NONE +/obj/item/soap/nanotrasen/cyborg/should_clean(datum/cleaning_source, atom/atom_to_clean, mob/living/cleaner) if(uses <= 0) - to_chat(user, span_warning("No good, you need to recharge!")) - return . - return ..() | . + return CLEAN_BLOCKED + return ..() -/obj/item/soap/attackby_storage_insert(datum/storage, atom/storage_holder, mob/living/user) - return !user?.combat_mode // only cleans a storage item if on combat +/obj/item/soap/storage_insert_on_interaction(datum/storage, atom/storage_holder, mob/living/user) + return !user.combat_mode // only cleans a storage item if on combat /* * Bike Horns @@ -233,6 +233,22 @@ M.emote("flip") COOLDOWN_START(src, golden_horn_cooldown, 1 SECONDS) +/obj/item/bikehorn/rubberducky/plasticducky + name = "plastic ducky" + desc = "It's a cheap plastic knockoff of a loveable bathtime toy." + custom_materials = list(/datum/material/plastic = HALF_SHEET_MATERIAL_AMOUNT) + +/obj/item/bikehorn/rubberducky + name = "rubber ducky" + desc = "Rubber ducky you're so fine, you make bathtime lots of fuuun. Rubber ducky I'm awfully fooooond of yooooouuuu~" //thanks doohl + icon = 'icons/obj/watercloset.dmi' + icon_state = "rubberducky" + inhand_icon_state = "rubberducky" + lefthand_file = 'icons/mob/inhands/items_lefthand.dmi' + righthand_file = 'icons/mob/inhands/items_righthand.dmi' + worn_icon_state = "duck" + sound_file = 'sound/effects/quack.ogg' + //canned laughter /obj/item/reagent_containers/cup/soda_cans/canned_laughter name = "Canned Laughter" diff --git a/code/game/objects/items/control_wand.dm b/code/game/objects/items/control_wand.dm index de81caa22e9a7..abad07f96d844 100644 --- a/code/game/objects/items/control_wand.dm +++ b/code/game/objects/items/control_wand.dm @@ -35,35 +35,35 @@ update_icon_state() balloon_alert(user, "mode: [desc[mode]]") -// Airlock remote works by sending NTNet packets to whatever it's pointed at. -/obj/item/door_remote/afterattack(atom/target, mob/user) - . = ..() +/obj/item/door_remote/ranged_interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + return interact_with_atom(interacting_with, user, modifiers) +/obj/item/door_remote/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) var/obj/machinery/door/door - if (istype(target, /obj/machinery/door)) - door = target - + if (istype(interacting_with, /obj/machinery/door)) + door = interacting_with if (!door.opens_with_door_remote) - return + return ITEM_INTERACT_BLOCKING + else - for (var/obj/machinery/door/door_on_turf in get_turf(target)) + for (var/obj/machinery/door/door_on_turf in get_turf(interacting_with)) if (door_on_turf.opens_with_door_remote) door = door_on_turf break if (isnull(door)) - return + return ITEM_INTERACT_BLOCKING if (!door.check_access_list(access_list) || !door.requiresID()) - target.balloon_alert(user, "can't access!") - return + interacting_with.balloon_alert(user, "can't access!") + return ITEM_INTERACT_BLOCKING var/obj/machinery/door/airlock/airlock = door if (!door.hasPower() || (istype(airlock) && !airlock.canAIControl())) - target.balloon_alert(user, mode == WAND_OPEN ? "it won't budge!" : "nothing happens!") - return + interacting_with.balloon_alert(user, mode == WAND_OPEN ? "it won't budge!" : "nothing happens!") + return ITEM_INTERACT_BLOCKING switch (mode) if (WAND_OPEN) @@ -73,8 +73,8 @@ door.close() if (WAND_BOLT) if (!istype(airlock)) - target.balloon_alert(user, "only airlocks!") - return + interacting_with.balloon_alert(user, "only airlocks!") + return ITEM_INTERACT_BLOCKING if (airlock.locked) airlock.unbolt() @@ -84,12 +84,14 @@ log_combat(user, airlock, "bolted", src) if (WAND_EMERGENCY) if (!istype(airlock)) - target.balloon_alert(user, "only airlocks!") - return + interacting_with.balloon_alert(user, "only airlocks!") + return ITEM_INTERACT_BLOCKING airlock.emergency = !airlock.emergency airlock.update_appearance(UPDATE_ICON) + return ITEM_INTERACT_SUCCESS + /obj/item/door_remote/update_icon_state() var/icon_state_mode switch(mode) diff --git a/code/game/objects/items/cosmetics.dm b/code/game/objects/items/cosmetics.dm index a78d9d4fbf0b9..b16cf3a6ef61a 100644 --- a/code/game/objects/items/cosmetics.dm +++ b/code/game/objects/items/cosmetics.dm @@ -217,7 +217,7 @@ return if(!user.can_perform_action(src, FORBID_TELEKINESIS_REACH)) return - var/new_style = tgui_input_list(user, "Select a facial hairstyle", "Grooming", GLOB.facial_hairstyles_list) + var/new_style = tgui_input_list(user, "Select a facial hairstyle", "Grooming", SSaccessories.facial_hairstyles_list) if(isnull(new_style)) return if(!get_location_accessible(human_target, location)) @@ -270,7 +270,7 @@ return if(!user.can_perform_action(src, FORBID_TELEKINESIS_REACH)) return - var/new_style = tgui_input_list(user, "Select a hairstyle", "Grooming", GLOB.hairstyles_list) + var/new_style = tgui_input_list(user, "Select a hairstyle", "Grooming", SSaccessories.hairstyles_list) if(isnull(new_style)) return if(!get_location_accessible(human_target, location)) diff --git a/code/game/objects/items/crab17.dm b/code/game/objects/items/crab17.dm index 25582bc918971..45bb25285ef24 100644 --- a/code/game/objects/items/crab17.dm +++ b/code/game/objects/items/crab17.dm @@ -227,8 +227,8 @@ /obj/effect/dumpeet_target name = "Landing Zone Indicator" desc = "A holographic projection designating the landing zone of something. It's probably best to stand back." - icon = 'icons/mob/actions/actions_items.dmi' - icon_state = "sniper_zoom" + icon = 'icons/mob/telegraphing/telegraph_holographic.dmi' + icon_state = "target_circle" layer = PROJECTILE_HIT_THRESHHOLD_LAYER light_range = 2 var/obj/effect/dumpeet_fall/DF diff --git a/code/game/objects/items/crayons.dm b/code/game/objects/items/crayons.dm index 556d0d4764631..f50909eee12c9 100644 --- a/code/game/objects/items/crayons.dm +++ b/code/game/objects/items/crayons.dm @@ -420,16 +420,19 @@ var/static/regex/crayon_regex = new /regex(@"[^\w!?,.=&%#+/\-]", "ig") return LOWER_TEXT(crayon_regex.Replace(text, "")) -/// Attempts to color the target. Returns how many charges were used. -/obj/item/toy/crayon/proc/use_on(atom/target, mob/user, params) +/// Is this a valid object for use_on to run on? +/obj/item/toy/crayon/proc/can_use_on(atom/target, mob/user, list/modifiers) + if(!isturf(target) && !istype(target, /obj/effect/decal/cleanable)) + return FALSE + return TRUE + +/// Attempts to color the target. +/obj/item/toy/crayon/proc/use_on(atom/target, mob/user, list/modifiers) var/static/list/punctuation = list("!","?",".",",","/","+","-","=","%","#","&") if(istype(target, /obj/effect/decal/cleanable)) target = target.loc - if(!isturf(target)) - return - if(!isValidSurface(target)) target.balloon_alert(user, "can't use there!") return @@ -491,7 +494,6 @@ else graf_rot = 0 - var/list/modifiers = params2list(params) var/clickx var/clicky @@ -567,20 +569,16 @@ for(var/turf/draw_turf as anything in affected_turfs) reagents.expose(draw_turf, methods = TOUCH, volume_modifier = volume_multiplier) check_empty(user) + return -/obj/item/toy/crayon/afterattack(atom/target, mob/user, proximity, params) - . = ..() - - if(!proximity) - return - - if (isitem(target)) - . |= AFTERATTACK_PROCESSED_ITEM - - if (!check_allowed_items(target)) - return +/obj/item/toy/crayon/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + if (!check_allowed_items(interacting_with)) + return NONE - use_on(target, user, params) + if(can_use_on(interacting_with, user, modifiers)) + use_on(interacting_with, user, modifiers) + return ITEM_INTERACT_BLOCKING + return NONE /obj/item/toy/crayon/get_writing_implement_details() return list( @@ -674,7 +672,7 @@ charges = INFINITE_CHARGES dye_color = DYE_RAINBOW -/obj/item/toy/crayon/rainbow/afterattack(atom/target, mob/user, proximity, params) +/obj/item/toy/crayon/rainbow/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) set_painting_tool_color(rgb(rand(0,255), rand(0,255), rand(0,255))) return ..() @@ -775,7 +773,7 @@ /obj/item/toy/crayon/spraycan/add_context(atom/source, list/context, obj/item/held_item, mob/living/user) . = ..() - if(!user.can_perform_action(src, NEED_DEXTERITY|NEED_HANDS)) + if(!user.can_perform_action(src, NEED_DEXTERITY|NEED_HANDS|SILENT_ADJACENCY)) return . if(has_cap) @@ -786,7 +784,7 @@ /obj/item/toy/crayon/spraycan/add_item_context(datum/source, list/context, atom/target, mob/living/user) . = ..() - if(!user.can_perform_action(src, NEED_DEXTERITY|NEED_HANDS)) + if(!user.can_perform_action(src, NEED_DEXTERITY|NEED_HANDS|SILENT_ADJACENCY)) return . context[SCREENTIP_CONTEXT_LMB] = "Paint" @@ -833,7 +831,17 @@ . += "It is empty." . += span_notice("Alt-click [src] to [ is_capped ? "take the cap off" : "put the cap on"]. Right-click a colored object to match its existing color.") -/obj/item/toy/crayon/spraycan/use_on(atom/target, mob/user, params) + +/obj/item/toy/crayon/spraycan/can_use_on(atom/target, mob/user, list/modifiers) + if(iscarbon(target)) + return TRUE + if(ismob(target) && (HAS_TRAIT(target, TRAIT_SPRAY_PAINTABLE))) + return TRUE + if(isobj(target) && !(target.flags_1 & UNPAINTABLE_1)) + return TRUE + return ..() + +/obj/item/toy/crayon/spraycan/use_on(atom/target, mob/user, list/modifiers) if(is_capped) balloon_alert(user, "take the cap off first!") return @@ -865,7 +873,7 @@ else if(actually_paints && target.is_atom_colour(paint_color, min_priority_index = WASHABLE_COLOUR_PRIORITY)) balloon_alert(user, "[target.p_theyre()] already that color!") - return FALSE + return if(ismob(target) && (HAS_TRAIT(target, TRAIT_SPRAY_PAINTABLE))) if(actually_paints) @@ -886,7 +894,7 @@ if (color_is_dark && !(target.flags_1 & ALLOW_DARK_PAINTS_1)) to_chat(user, span_warning("A color that dark on an object like this? Surely not...")) - return FALSE + return if(istype(target, /obj/item/pipe)) if(GLOB.pipe_color_name.Find(paint_color)) @@ -896,7 +904,7 @@ balloon_alert(user, "painted in [GLOB.pipe_color_name[paint_color]] color") else balloon_alert(user, "invalid pipe color!") - return FALSE + return else if(istype(target, /obj/machinery/atmospherics)) if(GLOB.pipe_color_name.Find(paint_color)) var/obj/machinery/atmospherics/target_pipe = target @@ -904,7 +912,7 @@ balloon_alert(user, "painted in [GLOB.pipe_color_name[paint_color]] color") else balloon_alert(user, "invalid pipe color!") - return FALSE + return else target.add_atom_colour(paint_color, WASHABLE_COLOUR_PRIORITY) @@ -927,17 +935,15 @@ return ..() -/obj/item/toy/crayon/spraycan/afterattack_secondary(atom/target, mob/user, proximity_flag, click_parameters) - if(!proximity_flag) - return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN +/obj/item/toy/crayon/spraycan/interact_with_atom_secondary(atom/interacting_with, mob/living/user, list/modifiers) if(is_capped) balloon_alert(user, "take the cap off first!") - return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN + return ITEM_INTERACT_BLOCKING if(check_empty(user)) - return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN + return ITEM_INTERACT_BLOCKING - if(isbodypart(target) && actually_paints) - var/obj/item/bodypart/limb = target + if(isbodypart(interacting_with) && actually_paints) + var/obj/item/bodypart/limb = interacting_with if(!IS_ORGANIC_LIMB(limb)) var/list/skins = list() var/static/list/style_list_icons = list("standard" = 'icons/mob/augmentation/augments.dmi', "engineer" = 'icons/mob/augmentation/augments_engineer.dmi', "security" = 'icons/mob/augmentation/augments_security.dmi', "mining" = 'icons/mob/augmentation/augments_mining.dmi') @@ -950,16 +956,14 @@ if(choice && (use_charges(user, 5, requires_full = FALSE))) playsound(user.loc, 'sound/effects/spray.ogg', 5, TRUE, 5) limb.change_appearance(style_list_icons[choice], greyscale = FALSE) - return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN - if(target.color) - paint_color = target.color + return ITEM_INTERACT_SUCCESS + if(interacting_with.color) + paint_color = interacting_with.color balloon_alert(user, "matched colour of target") update_appearance() - return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN - else - balloon_alert(user, "can't match those colours!") - - return SECONDARY_ATTACK_CONTINUE_CHAIN + return ITEM_INTERACT_BLOCKING + balloon_alert(user, "can't match those colours!") + return ITEM_INTERACT_BLOCKING /obj/item/toy/crayon/spraycan/click_alt(mob/user) if(!has_cap) @@ -969,7 +973,7 @@ update_appearance() return CLICK_ACTION_SUCCESS -/obj/item/toy/crayon/spraycan/attackby_storage_insert(datum/storage, atom/storage_holder, mob/user) +/obj/item/toy/crayon/spraycan/storage_insert_on_interaction(datum/storage, atom/storage_holder, mob/user) return is_capped /obj/item/toy/crayon/spraycan/update_icon_state() diff --git a/code/game/objects/items/debug_items.dm b/code/game/objects/items/debug_items.dm index 4f6239acbe817..0a944b300d423 100644 --- a/code/game/objects/items/debug_items.dm +++ b/code/game/objects/items/debug_items.dm @@ -12,16 +12,20 @@ var/datum/species/selected_species var/valid_species = list() -/obj/item/debug/human_spawner/afterattack(atom/target, mob/user, proximity) - ..() - if(isturf(target)) - var/mob/living/carbon/human/H = new /mob/living/carbon/human(target) +/obj/item/debug/human_spawner/ranged_interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + return interact_with_atom(interacting_with, user, modifiers) + +/obj/item/debug/human_spawner/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + if(isturf(interacting_with)) + var/mob/living/carbon/human/H = new /mob/living/carbon/human(interacting_with) if(selected_species) H.set_species(selected_species) + return ITEM_INTERACT_SUCCESS + return NONE /obj/item/debug/human_spawner/attack_self(mob/user) ..() - var/choice = input("Select a species", "Human Spawner", null) in GLOB.species_list + var/choice = input("Select a species", "Human Spawner", null) in sortTim(GLOB.species_list, GLOBAL_PROC_REF(cmp_text_asc)) selected_species = GLOB.species_list[choice] /obj/item/debug/omnitool @@ -168,4 +172,3 @@ var/turf/loc_turf = get_turf(src) for(var/spawn_atom in (choice == "No" ? typesof(path) : subtypesof(path))) new spawn_atom(loc_turf) - diff --git a/code/game/objects/items/defib.dm b/code/game/objects/items/defib.dm index 7a661b640baa1..871892558b9dc 100644 --- a/code/game/objects/items/defib.dm +++ b/code/game/objects/items/defib.dm @@ -28,7 +28,7 @@ /// If the cell can be removed via screwdriver var/cell_removable = TRUE var/obj/item/shockpaddles/paddles - var/obj/item/stock_parts/cell/cell + var/obj/item/stock_parts/power_store/cell /// If true, revive through space suits, allow for combat shocking var/combat = FALSE /// How long does it take to recharge @@ -111,7 +111,7 @@ /obj/item/defibrillator/CheckParts(list/parts_list) ..() - cell = locate(/obj/item/stock_parts/cell) in contents + cell = locate(/obj/item/stock_parts/power_store) in contents update_power() /obj/item/defibrillator/ui_action_click() @@ -136,11 +136,10 @@ ui_action_click() //checks for this are handled in defibrillator.mount.dm return ..() -/obj/item/defibrillator/MouseDrop(obj/over_object) - . = ..() +/obj/item/defibrillator/mouse_drop_dragged(atom/over_object, mob/user, src_location, over_location, params) if(ismob(loc)) var/mob/M = loc - if(!M.incapacitated() && istype(over_object, /atom/movable/screen/inventory/hand)) + if(istype(over_object, /atom/movable/screen/inventory/hand)) var/atom/movable/screen/inventory/hand/H = over_object M.putItemFromInventoryInHandIfPossible(src, H.held_index) @@ -159,8 +158,8 @@ /obj/item/defibrillator/attackby(obj/item/W, mob/user, params) if(W == paddles) toggle_paddles() - else if(istype(W, /obj/item/stock_parts/cell)) - var/obj/item/stock_parts/cell/C = W + else if(istype(W, /obj/item/stock_parts/power_store/cell)) + var/obj/item/stock_parts/power_store/cell/C = W if(cell) to_chat(user, span_warning("[src] already has a cell!")) else @@ -312,7 +311,7 @@ /obj/item/defibrillator/compact/combat/loaded/Initialize(mapload) . = ..() - cell = new /obj/item/stock_parts/cell/infinite(src) + cell = new /obj/item/stock_parts/power_store/cell/infinite(src) update_power() /obj/item/defibrillator/compact/combat/loaded/attackby(obj/item/W, mob/user, params) @@ -368,6 +367,7 @@ if(!req_defib) return RegisterSignal(user, COMSIG_MOVABLE_MOVED, PROC_REF(check_range)) + RegisterSignal(defib.loc, COMSIG_MOVABLE_MOVED, PROC_REF(check_range)) /obj/item/shockpaddles/Moved(atom/old_loc, movement_dir, forced, list/old_locs, momentum_change = TRUE) . = ..() @@ -434,6 +434,7 @@ . = ..() if(user) UnregisterSignal(user, COMSIG_MOVABLE_MOVED) + UnregisterSignal(defib.loc, COMSIG_MOVABLE_MOVED) if(req_defib) if(user) to_chat(user, span_notice("The paddles snap back into the main unit.")) diff --git a/code/game/objects/items/devices/aicard_evil.dm b/code/game/objects/items/devices/aicard_evil.dm index 8aaa9f0311116..3e8c56ce940fd 100644 --- a/code/game/objects/items/devices/aicard_evil.dm +++ b/code/game/objects/items/devices/aicard_evil.dm @@ -62,6 +62,11 @@ // Make it look evil!!! new_ai.hologram_appearance = mutable_appearance('icons/mob/silicon/ai.dmi',"xeno_queen") //good enough new_ai.icon_state = resolve_ai_icon("hades") + // Hide PDA from messenger + var/datum/computer_file/program/messenger/msg = locate() in new_ai.modularInterface.stored_files + if(msg) + msg.invisible = TRUE + // Transfer the AI from the core we created into the card, then delete the core capture_ai(new_ai, user) var/obj/structure/ai_core/deactivated/detritus = locate() in get_turf(src) diff --git a/code/game/objects/items/devices/anomaly_releaser.dm b/code/game/objects/items/devices/anomaly_releaser.dm index 0556b2a2afd49..a7a58bb5d9499 100644 --- a/code/game/objects/items/devices/anomaly_releaser.dm +++ b/code/game/objects/items/devices/anomaly_releaser.dm @@ -19,32 +19,28 @@ ///Can we be used infinitely? var/infinite = FALSE -/obj/item/anomaly_releaser/afterattack(atom/target, mob/user, proximity_flag, click_parameters) - . = ..() - - if(used || !proximity_flag || !istype(target, /obj/item/assembly/signaler/anomaly)) - return +/obj/item/anomaly_releaser/interact_with_atom(atom/target, mob/living/user, list/modifiers) + if(!istype(target, /obj/item/assembly/signaler/anomaly)) + return NONE + if(used) + return ITEM_INTERACT_BLOCKING if(!do_after(user, 3 SECONDS, target)) - return - + return ITEM_INTERACT_BLOCKING if(used) - return + return ITEM_INTERACT_BLOCKING var/obj/item/assembly/signaler/anomaly/core = target - if(!core.anomaly_type) - return + return ITEM_INTERACT_BLOCKING var/obj/effect/anomaly/anomaly = new core.anomaly_type(get_turf(core)) anomaly.stabilize() log_combat(user, anomaly, "released", object = src, addition = "in [get_area(target)].") - if(infinite) - return - - icon_state = used_icon_state - used = TRUE - name = "used " + name - - qdel(core) + if(!infinite) + icon_state = used_icon_state + used = TRUE + name = "used " + name + qdel(core) + return ITEM_INTERACT_SUCCESS diff --git a/code/game/objects/items/devices/battle_royale.dm b/code/game/objects/items/devices/battle_royale.dm index 4a47b164f43f5..ab871520465a5 100644 --- a/code/game/objects/items/devices/battle_royale.dm +++ b/code/game/objects/items/devices/battle_royale.dm @@ -1,3 +1,28 @@ +/// Global list of areas which are considered to be inside the same department for our purposes +GLOBAL_LIST_INIT(battle_royale_regions, list( + "Medical Bay" = list( + /area/station/command/heads_quarters/cmo, + /area/station/medical, + /area/station/security/checkpoint/medical, + ), + "Research Division" = list( + /area/station/command/heads_quarters/rd, + /area/station/security/checkpoint/science, + /area/station/science, + ), + "Engineering Bay" = list( + /area/station/command/heads_quarters/ce, + /area/station/engineering, + /area/station/maintenance/disposal/incinerator, + /area/station/security/checkpoint/engineering, + ), + "Cargo Bay" = list( + /area/station/cargo, + /area/station/command/heads_quarters/qm, + /area/station/security/checkpoint/supply, + ), +)) + /// Quietly implants people with battle royale implants /obj/item/royale_implanter name = "royale implanter" @@ -78,7 +103,7 @@ balloon_alert(user, "[required_contestants - contestant_count] contestants needed!") return - DSbattle_royale.start_battle(implanted_implants) + GLOB.battle_royale_master.start_battle(implanted_implants) for (var/obj/implanter as anything in linked_implanters) do_sparks(3, cardinal_only = FALSE, source = implanter) @@ -115,3 +140,208 @@ /obj/item/royale_remote/proc/implant_destroyed(obj/item/implant) SIGNAL_HANDLER implanted_implants -= implant + +GLOBAL_DATUM_INIT(battle_royale_master, /datum/battle_royale_master, new) + +/// Basically just exists to hold references to datums so that they don't GC +/datum/battle_royale_master + /// List of battle royale datums currently running + var/list/active_battles + +/// Start a new battle royale using a passed list of implants +/datum/battle_royale_master/proc/start_battle(list/competitors) + var/datum/battle_royale_controller/controller = new() + if (!controller.start(competitors)) + return FALSE + LAZYADD(active_battles, controller) + if (LAZYLEN(active_battles) == 1) + start_broadcasting_network(BATTLE_ROYALE_CAMERA_NET) + RegisterSignal(controller, COMSIG_QDELETING, PROC_REF(battle_ended)) + return TRUE + +/// Drop reference when it kills itself +/datum/battle_royale_master/proc/battle_ended(datum/source) + SIGNAL_HANDLER + LAZYREMOVE(active_battles, source) + if (!LAZYLEN(active_battles)) + stop_broadcasting_network(BATTLE_ROYALE_CAMERA_NET) + +/// Datum which controls the conflict +/datum/battle_royale_controller + /// Where is our battle taking place? + var/chosen_area + /// Is the battle currently in progress? + var/battle_running = TRUE + /// Should we let everyone know that someone has died? + var/announce_deaths = TRUE + /// List of implants involved + var/list/contestant_implants = list() + /// Ways to describe that someone has died + var/static/list/euphemisms = list( + "cashed their last paycheque.", + "didn't make it...", + "didn't make the cut.", + "had their head blown clean off!", + "has been killed!", + "has failed the challenge!", + "has passed away.", + "has died.", + "is in a better place now.", + "isn't going to be clocking in tomorrow!", + "just flatlined.", + "isn't today's winner.", + "seems to have exploded!", + "was just murdered on live tv!", + "won't be making it to retirement.", + "won't be getting back up after that one.", + ) + /// Ways to tell people not to salt in deadchat, surely effective + var/static/list/condolences = list( + "Better luck next time!", + "But stay tuned, there's still everything to play for!", + "Did you catch who did it?", + "It looked like that one really hurt...", + "Let's get that one on action replay!", + "Let's have a moment of silence, please.", + "Let's hope the next one does better.", + "Someone please notify their next of kin.", + "They had a good run.", + "Too bad!", + "What a shame!", + "What an upset!", + "What's going to happen next?", + "Who could have seen that coming?", + "Who will be next?", + ) + +/datum/battle_royale_controller/Destroy(force) + contestant_implants = null + return ..() + +/// Start a battle royale with the list of provided implants +/datum/battle_royale_controller/proc/start(list/implants, battle_time = 10 MINUTES) + chosen_area = pick(GLOB.battle_royale_regions) + for (var/obj/item/implant/explosive/battle_royale/contestant_implant in implants) + contestant_implant.start_battle(chosen_area, GLOB.battle_royale_regions[chosen_area]) + if (isnull(contestant_implant)) + continue // Might have exploded if it was removed from a person + RegisterSignal(contestant_implant, COMSIG_QDELETING, PROC_REF(implant_destroyed)) + contestant_implants |= contestant_implant + + if (length(contestant_implants) <= 1) + return FALSE // Well there's not much point is there + + priority_announce( + text = "Congratulations [station_name()], you have been chosen as the next site of the Rumble Royale! \n\ + Viewers across the sector will watch our [convert_integer_to_words(length(contestant_implants))] lucky contestants battle their way into your [chosen_area] and fight until only one is left standing! \n\ + If they don't make it in five minutes, they'll be disqualified. If you see one of our players struggling to get in, do lend them a hand... or don't, if you can live with the consequences! \n\ + As a gesture of gratitude, we will be providing our premium broadcast to your entertainment monitors at no cost so that you can watch the excitement. \n\ + Bystanders are advised not to intervene... but if you do, make it look good for the camera!", + title = "Rumble Royale Beginning", + sound = 'sound/machines/alarm.ogg', + has_important_message = TRUE, + sender_override = "Rumble Royale Pirate Broadcast Station", + color_override = "red", + ) + + for (var/obj/item/implant/explosive/battle_royale/contestant_implant as anything in contestant_implants) + contestant_implant.announce() + addtimer(CALLBACK(src, PROC_REF(limit_area)), battle_time / 2, TIMER_DELETE_ME) + addtimer(CALLBACK(src, PROC_REF(finish)), battle_time, TIMER_DELETE_ME) + return TRUE + +/// An implant was destroyed, hopefully because it exploded. Count how many competitors remain. +/datum/battle_royale_controller/proc/implant_destroyed(obj/item/implant/implant) + SIGNAL_HANDLER + contestant_implants -= implant + if (!battle_running) + return + + if (length(contestant_implants) <= 1) + announce_winner(implant) + else if (announce_deaths) + var/message = "" + if (isnull(implant.imp_in)) + message = "Looks like someone removed and destroyed their implant, that's cheating!" + else + message = "[implant.imp_in.real_name] [pick(euphemisms)] [pick(condolences)]" + priority_announce( + text = message, + title = "Rumble Royale Casualty Report", + sound = 'sound/misc/notice1.ogg', + has_important_message = TRUE, + sender_override = "Rumble Royale Pirate Broadcast Station", + color_override = "red", + ) + +/// There's only one person left, we have a winner! +/datum/battle_royale_controller/proc/announce_winner(obj/item/implant/losing_implant) + battle_running = FALSE + if (length(contestant_implants) > 1) + return + + var/message = "" + var/mob/living/loser = losing_implant.imp_in + var/obj/item/implant/winning_implant = pop(contestant_implants) + var/mob/living/winner = winning_implant?.imp_in + + if (isnull(winner) && isnull(loser)) + message = "Somehow, it seems like there's no winner tonight. What a disappointment!" + else + var/loser_text = isnull(loser) ? "With the disqualification of the other remaining contestant" : "With the death of [loser.real_name]" + var/winner_text = isnull(winner) ? "we must sadly announce that the would-be winner has also been disqualified. Such bad showmanship!" : "only [winner.real_name] remains. Congratulations, we have a winner!" + message = "[loser_text], [winner_text]" + + if (!isnull(winner)) + podspawn(list( + "target" = get_turf(winner), + "style" = STYLE_SYNDICATE, + "spawn" = /obj/item/food/roast_dinner, + )) + + priority_announce( + text = message, + title = "Rumble Royale Winner", + sound = 'sound/misc/notice1.ogg', + has_important_message = TRUE, + sender_override = "Rumble Royale Pirate Broadcast Station", + color_override = "red", + ) + + qdel(winning_implant) // You get to live! + winner?.mind?.remove_antag_datum(/datum/antagonist/survivalist/battle_royale) + qdel(src) + +/// Called halfway through the battle, if you've not made it to the designated battle zone we kill you +/datum/battle_royale_controller/proc/limit_area() + priority_announce( + text = "We're halfway done folks! And bad news to anyone who hasn't made it to the [chosen_area]... you're out!", + title = "Rumble Royale Update", + sound = 'sound/misc/notice1.ogg', + has_important_message = TRUE, + sender_override = "Rumble Royale Pirate Broadcast Station", + color_override = "red", + ) + + for (var/obj/item/implant/explosive/battle_royale/contestant_implant as anything in contestant_implants) + contestant_implant.limit_areas() + +/// Well you're out of time, bad luck +/datum/battle_royale_controller/proc/finish() + battle_running = FALSE + + priority_announce( + text = "Sorry remaining contestants, your time is up. \ + We're sorry to announce that this edition of Royal Rumble has no winner. \n\ + Better luck next time!", + title = "Rumble Royale Concluded", + sound = 'sound/misc/notice1.ogg', + has_important_message = TRUE, + sender_override = "Rumble Royale Pirate Broadcast Station", + color_override = "red", + ) + + for (var/obj/item/implant/explosive/battle_royale/contestant_implant as anything in contestant_implants) + contestant_implant.explode() + + qdel(src) diff --git a/code/game/objects/items/devices/beacon.dm b/code/game/objects/items/devices/beacon.dm index ccd8bb413e31e..a7c34a92c0df7 100644 --- a/code/game/objects/items/devices/beacon.dm +++ b/code/game/objects/items/devices/beacon.dm @@ -48,7 +48,7 @@ return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN /obj/item/beacon/attackby(obj/item/W, mob/user) - if(istype(W, /obj/item/pen)) // needed for things that use custom names like the locator + if(IS_WRITING_UTENSIL(W)) // needed for things that use custom names like the locator var/new_name = tgui_input_text(user, "What would you like the name to be?", "Beacon", max_length = MAX_NAME_LEN) if(!user.can_perform_action(src)) return diff --git a/code/game/objects/items/devices/chameleonproj.dm b/code/game/objects/items/devices/chameleonproj.dm index e5507473faecd..1920e47f97f66 100644 --- a/code/game/objects/items/devices/chameleonproj.dm +++ b/code/game/objects/items/devices/chameleonproj.dm @@ -36,29 +36,25 @@ else to_chat(user, span_warning("You can't use [src] while inside something!")) -/obj/item/chameleon/afterattack(atom/target, mob/user , proximity) - . = ..() - if(!proximity) - return - . |= AFTERATTACK_PROCESSED_ITEM +/obj/item/chameleon/interact_with_atom(atom/target, mob/living/user, list/modifiers) if(!check_sprite(target)) - return + return ITEM_INTERACT_BLOCKING if(active_dummy)//I now present you the blackli(f)st - return + return ITEM_INTERACT_BLOCKING if(isturf(target)) - return + return ITEM_INTERACT_BLOCKING if(ismob(target)) - return + return ITEM_INTERACT_BLOCKING if(istype(target, /obj/structure/falsewall)) - return + return ITEM_INTERACT_BLOCKING if(target.alpha != 255) - return + return ITEM_INTERACT_BLOCKING if(target.invisibility != 0) - return - if(iseffect(target)) - if(!(istype(target, /obj/effect/decal))) //be a footprint - return + return ITEM_INTERACT_BLOCKING + if(iseffect(target) && !istype(target, /obj/effect/decal)) //be a footprint + return ITEM_INTERACT_BLOCKING make_copy(target, user) + return ITEM_INTERACT_SUCCESS /obj/item/chameleon/proc/make_copy(atom/target, mob/user) playsound(get_turf(src), 'sound/weapons/flash.ogg', 100, TRUE, -6) diff --git a/code/game/objects/items/devices/electroadaptive_pseudocircuit.dm b/code/game/objects/items/devices/electroadaptive_pseudocircuit.dm index d5d2e6c4d145a..5814101463ba4 100644 --- a/code/game/objects/items/devices/electroadaptive_pseudocircuit.dm +++ b/code/game/objects/items/devices/electroadaptive_pseudocircuit.dm @@ -55,19 +55,18 @@ addtimer(CALLBACK(src, PROC_REF(recharge)), ROUND_UP(recharge_time)) return TRUE //The actual circuit magic itself is done on a per-object basis -/obj/item/electroadaptive_pseudocircuit/afterattack(atom/target, mob/living/user, proximity) - . = ..() - if(!proximity) - return - . |= AFTERATTACK_PROCESSED_ITEM - if(!is_type_in_typecache(target, recycleable_circuits)) - return +/obj/item/electroadaptive_pseudocircuit/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + if(!is_type_in_typecache(interacting_with, recycleable_circuits)) + return NONE circuits++ maptext = MAPTEXT(circuits) - user.visible_message(span_notice("User breaks down [target] with [src]."), \ - span_notice("You recycle [target] into [src]. It now has material for [circuits] circuits.")) + user.visible_message( + span_notice("User breaks down [interacting_with] with [src]."), + span_notice("You recycle [interacting_with] into [src]. It now has material for [circuits] circuits.") + ) playsound(user, 'sound/items/deconstruct.ogg', 50, TRUE) - qdel(target) + qdel(interacting_with) + return ITEM_INTERACT_SUCCESS /obj/item/electroadaptive_pseudocircuit/proc/recharge() playsound(src, 'sound/machines/chime.ogg', 25, TRUE) diff --git a/code/game/objects/items/devices/flashlight.dm b/code/game/objects/items/devices/flashlight.dm index c92e3b7e6598a..67ec498a1fbc6 100644 --- a/code/game/objects/items/devices/flashlight.dm +++ b/code/game/objects/items/devices/flashlight.dm @@ -108,162 +108,170 @@ user.visible_message(span_suicide("[user] is putting [src] close to [user.p_their()] eyes and turning it on! It looks like [user.p_theyre()] trying to commit suicide!")) return FIRELOSS -/obj/item/flashlight/attack(mob/living/carbon/M, mob/living/carbon/human/user) - add_fingerprint(user) - if(istype(M) && light_on && (user.zone_selected in list(BODY_ZONE_PRECISE_EYES, BODY_ZONE_PRECISE_MOUTH))) - - if((HAS_TRAIT(user, TRAIT_CLUMSY) || HAS_TRAIT(user, TRAIT_DUMB)) && prob(50)) //too dumb to use flashlight properly - return ..() //just hit them in the head +/obj/item/flashlight/proc/eye_examine(mob/living/carbon/human/M, mob/living/user) + . = list() + if((M.head && M.head.flags_cover & HEADCOVERSEYES) || (M.wear_mask && M.wear_mask.flags_cover & MASKCOVERSEYES) || (M.glasses && M.glasses.flags_cover & GLASSESCOVERSEYES)) + to_chat(user, span_warning("You're going to need to remove that [(M.head && M.head.flags_cover & HEADCOVERSEYES) ? "helmet" : (M.wear_mask && M.wear_mask.flags_cover & MASKCOVERSEYES) ? "mask": "glasses"] first!")) + return - if(!ISADVANCEDTOOLUSER(user)) - to_chat(user, span_warning("You don't have the dexterity to do this!")) - return + var/obj/item/organ/internal/eyes/E = M.get_organ_slot(ORGAN_SLOT_EYES) + var/obj/item/organ/internal/brain = M.get_organ_slot(ORGAN_SLOT_BRAIN) + if(!E) + to_chat(user, span_warning("[M] doesn't have any eyes!")) + return - if(!M.get_bodypart(BODY_ZONE_HEAD)) - to_chat(user, span_warning("[M] doesn't have a head!")) - return + M.flash_act(visual = TRUE, length = (user.combat_mode) ? 2.5 SECONDS : 1 SECONDS) // Apply a 1 second flash effect to the target. The duration increases to 2.5 Seconds if you have combat mode on. - if(light_power < 1) - to_chat(user, "[span_warning("\The [src] isn't bright enough to see anything!")] ") - return + if(M == user) //they're using it on themselves + user.visible_message(span_warning("[user] shines [src] into [M.p_their()] eyes."), ignored_mobs = user) + . += span_info("You direct [src] to into your eyes:\n") - var/render_list = list()//information will be packaged in a list for clean display to the user + if(M.is_blind()) + . += "You're not entirely certain what you were expecting...\n" + else + . += "Trippy!\n" - switch(user.zone_selected) - if(BODY_ZONE_PRECISE_EYES) - if((M.head && M.head.flags_cover & HEADCOVERSEYES) || (M.wear_mask && M.wear_mask.flags_cover & MASKCOVERSEYES) || (M.glasses && M.glasses.flags_cover & GLASSESCOVERSEYES)) - to_chat(user, span_warning("You're going to need to remove that [(M.head && M.head.flags_cover & HEADCOVERSEYES) ? "helmet" : (M.wear_mask && M.wear_mask.flags_cover & MASKCOVERSEYES) ? "mask": "glasses"] first!")) - return + else + user.visible_message(span_warning("[user] directs [src] to [M]'s eyes."), ignored_mobs = user) + . += span_info("You direct [src] to [M]'s eyes:\n") - var/obj/item/organ/internal/eyes/E = M.get_organ_slot(ORGAN_SLOT_EYES) - var/obj/item/organ/internal/brain = M.get_organ_slot(ORGAN_SLOT_BRAIN) - if(!E) - to_chat(user, span_warning("[M] doesn't have any eyes!")) - return + if(M.stat == DEAD || M.is_blind() || M.get_eye_protection() > FLASH_PROTECTION_WELDER) + . += "[M.p_Their()] pupils don't react to the light!\n"//mob is dead + else if(brain.damage > 20) + . += "[M.p_Their()] pupils contract unevenly!\n"//mob has sustained damage to their brain + else + . += "[M.p_Their()] pupils narrow.\n"//they're okay :D - M.flash_act(visual = TRUE, length = (user.combat_mode) ? 2.5 SECONDS : 1 SECONDS) // Apply a 1 second flash effect to the target. The duration increases to 2.5 Seconds if you have combat mode on. + if(M.dna && M.dna.check_mutation(/datum/mutation/human/xray)) + . += "[M.p_Their()] pupils give an eerie glow!\n"//mob has X-ray vision - if(M == user) //they're using it on themselves - user.visible_message(span_warning("[user] shines [src] into [M.p_their()] eyes."), ignored_mobs = user) - render_list += span_info("You direct [src] to into your eyes:\n") + return . - if(M.is_blind()) - render_list += "You're not entirely certain what you were expecting...\n" - else - render_list += "Trippy!\n" +/obj/item/flashlight/proc/mouth_examine(mob/living/carbon/human/M, mob/living/user) + . = list() + if(M.is_mouth_covered()) + to_chat(user, span_warning("You're going to need to remove that [(M.head && M.head.flags_cover & HEADCOVERSMOUTH) ? "helmet" : "mask"] first!")) + return + var/list/mouth_organs = list() + for(var/obj/item/organ/organ as anything in M.organs) + if(organ.zone == BODY_ZONE_PRECISE_MOUTH) + mouth_organs.Add(organ) + var/organ_list = "" + var/organ_count = LAZYLEN(mouth_organs) + if(organ_count) + for(var/I in 1 to organ_count) + if(I > 1) + if(I == mouth_organs.len) + organ_list += ", and " else - user.visible_message(span_warning("[user] directs [src] to [M]'s eyes."), ignored_mobs = user) - render_list += span_info("You direct [src] to [M]'s eyes:\n") - - if(M.stat == DEAD || M.is_blind() || M.get_eye_protection() > FLASH_PROTECTION_WELDER) - render_list += "[M.p_Their()] pupils don't react to the light!\n"//mob is dead - else if(brain.damage > 20) - render_list += "[M.p_Their()] pupils contract unevenly!\n"//mob has sustained damage to their brain - else - render_list += "[M.p_Their()] pupils narrow.\n"//they're okay :D - - if(M.dna && M.dna.check_mutation(/datum/mutation/human/xray)) - render_list += "[M.p_Their()] pupils give an eerie glow!\n"//mob has X-ray vision - - //display our packaged information in an examine block for easy reading - to_chat(user, examine_block(jointext(render_list, "")), type = MESSAGE_TYPE_INFO) - - if(BODY_ZONE_PRECISE_MOUTH) - - if(M.is_mouth_covered()) - to_chat(user, span_warning("You're going to need to remove that [(M.head && M.head.flags_cover & HEADCOVERSMOUTH) ? "helmet" : "mask"] first!")) - return - - var/list/mouth_organs = new - for(var/obj/item/organ/organ as anything in M.organs) - if(organ.zone == BODY_ZONE_PRECISE_MOUTH) - mouth_organs.Add(organ) - var/organ_list = "" - var/organ_count = LAZYLEN(mouth_organs) - if(organ_count) - for(var/I in 1 to organ_count) - if(I > 1) - if(I == mouth_organs.len) - organ_list += ", and " - else - organ_list += ", " - var/obj/item/organ/O = mouth_organs[I] - organ_list += (O.gender == "plural" ? O.name : "\an [O.name]") - - var/pill_count = 0 - for(var/datum/action/item_action/hands_free/activate_pill/AP in M.actions) - pill_count++ - - if(M == user)//if we're looking on our own mouth - var/can_use_mirror = FALSE - if(isturf(user.loc)) - var/obj/structure/mirror/mirror = locate(/obj/structure/mirror, user.loc) - if(mirror) - switch(user.dir) - if(NORTH) - can_use_mirror = mirror.pixel_y > 0 - if(SOUTH) - can_use_mirror = mirror.pixel_y < 0 - if(EAST) - can_use_mirror = mirror.pixel_x > 0 - if(WEST) - can_use_mirror = mirror.pixel_x < 0 - - M.visible_message(span_notice("[M] directs [src] to [ M.p_their()] mouth."), ignored_mobs = user) - render_list += span_info("You point [src] into your mouth:\n") - if(!can_use_mirror) - to_chat(user, span_notice("You can't see anything without a mirror.")) - return - if(organ_count) - render_list += "Inside your mouth [organ_count > 1 ? "are" : "is"] [organ_list].\n" - else - render_list += "There's nothing inside your mouth.\n" - if(pill_count) - render_list += "You have [pill_count] implanted pill[pill_count > 1 ? "s" : ""].\n" - - else //if we're looking in someone elses mouth - user.visible_message(span_notice("[user] directs [src] to [M]'s mouth."), ignored_mobs = user) - render_list += span_info("You point [src] into [M]'s mouth:\n") - if(organ_count) - render_list += "Inside [ M.p_their()] mouth [organ_count > 1 ? "are" : "is"] [organ_list].\n" - else - render_list += "[M] doesn't have any organs in [ M.p_their()] mouth.\n" - if(pill_count) - render_list += "[M] has [pill_count] pill[pill_count > 1 ? "s" : ""] implanted in [ M.p_their()] teeth.\n" - - //assess any suffocation damage - var/hypoxia_status = M.getOxyLoss() > 20 - - if(M == user) - if(hypoxia_status) - render_list += "Your lips appear blue!\n"//you have suffocation damage - else - render_list += "Your lips appear healthy.\n"//you're okay! - else - if(hypoxia_status) - render_list += "[M.p_Their()] lips appear blue!\n"//they have suffocation damage - else - render_list += "[M.p_Their()] lips appear healthy.\n"//they're okay! - - //assess blood level - if(M == user) - render_list += span_info("You press a finger to your gums:\n") - else - render_list += span_info("You press a finger to [M.p_their()] gums:\n") + organ_list += ", " + var/obj/item/organ/O = mouth_organs[I] + organ_list += (O.gender == "plural" ? O.name : "\an [O.name]") + + var/pill_count = 0 + for(var/datum/action/item_action/activate_pill/AP in M.actions) + pill_count++ + + if(M == user)//if we're looking on our own mouth + var/can_use_mirror = FALSE + if(isturf(user.loc)) + var/obj/structure/mirror/mirror = locate(/obj/structure/mirror, user.loc) + if(mirror) + switch(user.dir) + if(NORTH) + can_use_mirror = mirror.pixel_y > 0 + if(SOUTH) + can_use_mirror = mirror.pixel_y < 0 + if(EAST) + can_use_mirror = mirror.pixel_x > 0 + if(WEST) + can_use_mirror = mirror.pixel_x < 0 + + M.visible_message(span_notice("[M] directs [src] to [ M.p_their()] mouth."), ignored_mobs = user) + . += span_info("You point [src] into your mouth:\n") + if(!can_use_mirror) + to_chat(user, span_notice("You can't see anything without a mirror.")) + return + if(organ_count) + . += "Inside your mouth [organ_count > 1 ? "are" : "is"] [organ_list].\n" + else + . += "There's nothing inside your mouth.\n" + if(pill_count) + . += "You have [pill_count] implanted pill[pill_count > 1 ? "s" : ""].\n" + + else //if we're looking in someone elses mouth + user.visible_message(span_notice("[user] directs [src] to [M]'s mouth."), ignored_mobs = user) + . += span_info("You point [src] into [M]'s mouth:\n") + if(organ_count) + . += "Inside [ M.p_their()] mouth [organ_count > 1 ? "are" : "is"] [organ_list].\n" + else + . += "[M] doesn't have any organs in [ M.p_their()] mouth.\n" + if(pill_count) + . += "[M] has [pill_count] pill[pill_count > 1 ? "s" : ""] implanted in [ M.p_their()] teeth.\n" - if(M.blood_volume <= BLOOD_VOLUME_SAFE && M.blood_volume > BLOOD_VOLUME_OKAY) - render_list += "Color returns slowly!\n"//low blood - else if(M.blood_volume <= BLOOD_VOLUME_OKAY) - render_list += "Color does not return!\n"//critical blood - else - render_list += "Color returns quickly.\n"//they're okay :D + //assess any suffocation damage + var/hypoxia_status = M.getOxyLoss() > 20 + + if(M == user) + if(hypoxia_status) + . += "Your lips appear blue!\n"//you have suffocation damage + else + . += "Your lips appear healthy.\n"//you're okay! + else + if(hypoxia_status) + . += "[M.p_Their()] lips appear blue!\n"//they have suffocation damage + else + . += "[M.p_Their()] lips appear healthy.\n"//they're okay! - //display our packaged information in an examine block for easy reading - to_chat(user, examine_block(jointext(render_list, "")), type = MESSAGE_TYPE_INFO) + //assess blood level + if(M == user) + . += span_info("You press a finger to your gums:\n") + else + . += span_info("You press a finger to [M.p_their()] gums:\n") + if(M.blood_volume <= BLOOD_VOLUME_SAFE && M.blood_volume > BLOOD_VOLUME_OKAY) + . += "Color returns slowly!\n"//low blood + else if(M.blood_volume <= BLOOD_VOLUME_OKAY) + . += "Color does not return!\n"//critical blood else - return ..() + . += "Color returns quickly.\n"//they're okay :D + +/obj/item/flashlight/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + if(!ishuman(interacting_with)) + return NONE + if(!light_on) + return NONE + add_fingerprint(user) + if(user.combat_mode || (user.zone_selected != BODY_ZONE_PRECISE_EYES && user.zone_selected != BODY_ZONE_PRECISE_MOUTH)) + return NONE + if((HAS_TRAIT(user, TRAIT_CLUMSY) || HAS_TRAIT(user, TRAIT_DUMB)) && prob(50)) //too dumb to use flashlight properly + return ITEM_INTERACT_SKIP_TO_ATTACK //just hit them in the head + + . = ITEM_INTERACT_BLOCKING + if(!ISADVANCEDTOOLUSER(user)) + to_chat(user, span_warning("You don't have the dexterity to do this!")) + return + var/mob/living/scanning = interacting_with + if(!scanning.get_bodypart(BODY_ZONE_HEAD)) + to_chat(user, span_warning("[scanning] doesn't have a head!")) + return + if(light_power < 1) + to_chat(user, span_warning("[src] isn't bright enough to see anything!")) + return + + var/list/render_list = list() + switch(user.zone_selected) + if(BODY_ZONE_PRECISE_EYES) + render_list += eye_examine(scanning, user) + if(BODY_ZONE_PRECISE_MOUTH) + render_list += mouth_examine(scanning, user) + + if(length(render_list)) + //display our packaged information in an examine block for easy reading + to_chat(user, examine_block(jointext(render_list, "")), type = MESSAGE_TYPE_INFO) + return ITEM_INTERACT_SUCCESS + return ITEM_INTERACT_BLOCKING /// for directional sprites - so we get the same sprite in the inventory each time we pick one up /obj/item/flashlight/equipped(mob/user, slot, initial) @@ -299,24 +307,21 @@ light_color = "#CCFFFF" COOLDOWN_DECLARE(holosign_cooldown) -/obj/item/flashlight/pen/afterattack(atom/target, mob/user, proximity_flag) - . = ..() - if(proximity_flag) - return - +/obj/item/flashlight/pen/ranged_interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) if(!COOLDOWN_FINISHED(src, holosign_cooldown)) balloon_alert(user, "not ready!") - return + return ITEM_INTERACT_BLOCKING - var/target_turf = get_turf(target) + var/turf/target_turf = get_turf(interacting_with) var/mob/living/living_target = locate(/mob/living) in target_turf if(!living_target || (living_target == user)) - return + return ITEM_INTERACT_BLOCKING to_chat(living_target, span_boldnotice("[user] is offering medical assistance; please halt your actions.")) new /obj/effect/temp_visual/medical_holosign(target_turf, user) //produce a holographic glow COOLDOWN_START(src, holosign_cooldown, 10 SECONDS) + return ITEM_INTERACT_SUCCESS // see: [/datum/wound/burn/flesh/proc/uv()] /obj/item/flashlight/pen/paramedic @@ -666,6 +671,9 @@ light_color = "#ffcc66" light_system = OVERLAY_LIGHT +/obj/item/flashlight/lantern/on + start_on = TRUE + /obj/item/flashlight/lantern/heirloom_moth name = "old lantern" desc = "An old lantern that has seen plenty of use." @@ -728,26 +736,26 @@ ..() return -/obj/item/flashlight/emp/afterattack(atom/movable/A, mob/user, proximity) +/obj/item/flashlight/emp/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) . = ..() - if(!proximity) + if(. & ITEM_INTERACT_ANY_BLOCKER) return if(emp_cur_charges > 0) emp_cur_charges -= 1 - if(ismob(A)) - var/mob/M = A - log_combat(user, M, "attacked", "EMP-light") - M.visible_message(span_danger("[user] blinks \the [src] at \the [A]."), \ + if(ismob(interacting_with)) + var/mob/empd = interacting_with + log_combat(user, empd, "attacked", "EMP-light") + empd.visible_message(span_danger("[user] blinks \the [src] at \the [empd]."), \ span_userdanger("[user] blinks \the [src] at you.")) else - A.visible_message(span_danger("[user] blinks \the [src] at \the [A].")) + interacting_with.visible_message(span_danger("[user] blinks \the [src] at \the [interacting_with].")) to_chat(user, span_notice("\The [src] now has [emp_cur_charges] charge\s.")) - A.emp_act(EMP_HEAVY) + interacting_with.emp_act(EMP_HEAVY) else to_chat(user, span_warning("\The [src] needs time to recharge!")) - return + return ITEM_INTERACT_SUCCESS /obj/item/flashlight/emp/debug //for testing emp_act() name = "debug EMP flashlight" diff --git a/code/game/objects/items/devices/forcefieldprojector.dm b/code/game/objects/items/devices/forcefieldprojector.dm index d102f06275638..5d40d40a4d925 100644 --- a/code/game/objects/items/devices/forcefieldprojector.dm +++ b/code/game/objects/items/devices/forcefieldprojector.dm @@ -21,41 +21,42 @@ /// Checks to make sure the projector isn't busy with making another forcefield. var/force_proj_busy = FALSE -/obj/item/forcefield_projector/afterattack(atom/target, mob/user, proximity_flag) - . = ..() - if(!check_allowed_items(target, not_inside = TRUE)) - return - . |= AFTERATTACK_PROCESSED_ITEM - if(istype(target, /obj/structure/projected_forcefield)) - var/obj/structure/projected_forcefield/F = target +/obj/item/forcefield_projector/ranged_interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + return interact_with_atom(interacting_with, user, modifiers) + +/obj/item/forcefield_projector/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + if(!check_allowed_items(interacting_with, not_inside = TRUE)) + return NONE + if(istype(interacting_with, /obj/structure/projected_forcefield)) + var/obj/structure/projected_forcefield/F = interacting_with if(F.generator == src) to_chat(user, span_notice("You deactivate [F].")) qdel(F) - return - var/turf/T = get_turf(target) + return ITEM_INTERACT_BLOCKING + var/turf/T = get_turf(interacting_with) var/obj/structure/projected_forcefield/found_field = locate() in T if(found_field) to_chat(user, span_warning("There is already a forcefield in that location!")) - return + return ITEM_INTERACT_BLOCKING if(T.density) - return + return ITEM_INTERACT_BLOCKING if(get_dist(T,src) > field_distance_limit) - return - if (get_turf(src) == T) + return ITEM_INTERACT_BLOCKING + if(get_turf(src) == T) to_chat(user, span_warning("Target is too close, aborting!")) - return + return ITEM_INTERACT_BLOCKING if(LAZYLEN(current_fields) >= max_fields) to_chat(user, span_warning("[src] cannot sustain any more forcefields!")) - return + return ITEM_INTERACT_BLOCKING if(force_proj_busy) to_chat(user, span_notice("[src] is busy creating a forcefield.")) - return + return ITEM_INTERACT_BLOCKING playsound(loc, 'sound/machines/click.ogg', 20, TRUE) if(creation_time) force_proj_busy = TRUE - if(!do_after(user, creation_time, target = target)) + if(!do_after(user, creation_time, target = interacting_with)) force_proj_busy = FALSE - return + return ITEM_INTERACT_BLOCKING force_proj_busy = FALSE playsound(src,'sound/weapons/resonator_fire.ogg',50,TRUE) @@ -63,6 +64,7 @@ var/obj/structure/projected_forcefield/F = new(T, src) current_fields += F user.changeNext_move(CLICK_CD_MELEE) + return ITEM_INTERACT_SUCCESS /obj/item/forcefield_projector/attack_self(mob/user) if(LAZYLEN(current_fields)) diff --git a/code/game/objects/items/devices/geiger_counter.dm b/code/game/objects/items/devices/geiger_counter.dm index db2d0d820ba3a..1d5ef17a90c4a 100644 --- a/code/game/objects/items/devices/geiger_counter.dm +++ b/code/game/objects/items/devices/geiger_counter.dm @@ -67,18 +67,18 @@ update_appearance(UPDATE_ICON) balloon_alert(user, "switch [scanning ? "on" : "off"]") -/obj/item/geiger_counter/afterattack(atom/target, mob/living/user, params) - . = ..() - . |= AFTERATTACK_PROCESSED_ITEM +/obj/item/geiger_counter/ranged_interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + return interact_with_atom(interacting_with, user, modifiers) +/obj/item/geiger_counter/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) if (user.combat_mode) - return - - if (!CAN_IRRADIATE(target)) - return + return NONE + if (!CAN_IRRADIATE(interacting_with)) + return NONE - user.visible_message(span_notice("[user] scans [target] with [src]."), span_notice("You scan [target]'s radiation levels with [src]...")) - addtimer(CALLBACK(src, PROC_REF(scan), target, user), 20, TIMER_UNIQUE) // Let's not have spamming GetAllContents + user.visible_message(span_notice("[user] scans [interacting_with] with [src]."), span_notice("You scan [interacting_with]'s radiation levels with [src]...")) + addtimer(CALLBACK(src, PROC_REF(scan), interacting_with, user), 20, TIMER_UNIQUE) // Let's not have spamming GetAllContents + return ITEM_INTERACT_SUCCESS /obj/item/geiger_counter/equipped(mob/user, slot, initial) . = ..() diff --git a/code/game/objects/items/devices/laserpointer.dm b/code/game/objects/items/devices/laserpointer.dm index 381d85cff8652..554db2beb5399 100644 --- a/code/game/objects/items/devices/laserpointer.dm +++ b/code/game/objects/items/devices/laserpointer.dm @@ -70,7 +70,7 @@ /obj/item/laser_pointer/infinite_range/Initialize(mapload) . = ..() - diode = new /obj/item/stock_parts/servo/femto + diode = new /obj/item/stock_parts/micro_laser/quadultra /obj/item/laser_pointer/screwdriver_act(mob/living/user, obj/item/tool) if(diode) @@ -80,11 +80,11 @@ diode = null return TRUE -/obj/item/laser_pointer/item_interaction(mob/living/user, obj/item/tool, list/modifiers) +/obj/item/laser_pointer/tool_act(mob/living/user, obj/item/tool, list/modifiers) if(isnull(crystal_lens)) - return NONE + return ..() if(tool_behaviour != TOOL_WIRECUTTER && tool_behaviour != TOOL_HEMOSTAT) - return NONE + return ..() tool.play_tool_sound(src) balloon_alert(user, "removed crystal lens") crystal_lens.forceMove(drop_location()) @@ -182,13 +182,15 @@ . += "\The [diode.name]'s size is much smaller compared to the previous generation lasers, \ and the wide margin between it and the focus lens could probably house a crystal of some sort." -/obj/item/laser_pointer/afterattack(atom/target, mob/living/user, flag, params) - . = ..() - . |= AFTERATTACK_PROCESSED_ITEM - laser_act(target, user, params) +/obj/item/laser_pointer/ranged_interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + return interact_with_atom(interacting_with, user, modifiers) + +/obj/item/laser_pointer/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + laser_act(interacting_with, user, modifiers) + return ITEM_INTERACT_BLOCKING ///Handles shining the clicked atom, -/obj/item/laser_pointer/proc/laser_act(atom/target, mob/living/user, params) +/obj/item/laser_pointer/proc/laser_act(atom/target, mob/living/user, list/modifiers) if(isnull(diode)) to_chat(user, span_notice("You point [src] at [target], but nothing happens!")) return @@ -286,7 +288,6 @@ //setup pointer blip var/mutable_appearance/laser = mutable_appearance('icons/obj/weapons/guns/projectiles.dmi', pointer_icon_state) - var/list/modifiers = params2list(params) if(modifiers) if(LAZYACCESS(modifiers, ICON_X)) laser.pixel_x = (text2num(LAZYACCESS(modifiers, ICON_X)) - 16) diff --git a/code/game/objects/items/devices/lightreplacer.dm b/code/game/objects/items/devices/lightreplacer.dm index 2a5569bd43057..07a1db55a9c98 100644 --- a/code/game/objects/items/devices/lightreplacer.dm +++ b/code/game/objects/items/devices/lightreplacer.dm @@ -62,11 +62,23 @@ . = ..() . += status_string() -/obj/item/lightreplacer/pre_attack(atom/target, mob/living/user, params) - . = ..() - if(.) - return - return do_action(target, user) //if we are attacking a valid target[light, floodlight or turf] stop here +/obj/item/lightreplacer/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + return do_action(interacting_with, user) ? ITEM_INTERACT_SUCCESS : NONE + +/obj/item/lightreplacer/ranged_interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + // has no bluespace capabilities + if(!bluespace_toggle) + return NONE + // target not in range + if(interacting_with.z != user.z) + return NONE + // target not in view + if(!(interacting_with in view(7, get_turf(user)))) + user.balloon_alert(user, "out of range!") + return ITEM_INTERACT_BLOCKING + + //replace lights & stuff + return do_action(interacting_with, user) ? ITEM_INTERACT_SUCCESS : NONE /obj/item/lightreplacer/attackby(obj/item/insert, mob/user, params) . = ..() @@ -239,23 +251,6 @@ return FALSE -/obj/item/lightreplacer/afterattack(atom/target, mob/user, proximity) - . = ..() - - // has no bluespace capabilities - if(!bluespace_toggle) - return - // target not in range - if(target.z != user.z) - return - // target not in view - if(!(target in view(7, get_turf(user)))) - user.balloon_alert(user, "out of range!") - return - - //replace lights & stuff - do_action(target, user) - /obj/item/lightreplacer/proc/status_string() return "It has [uses] light\s remaining (plus [bulb_shards]/[BULB_SHARDS_REQUIRED] fragment\s)." @@ -283,11 +278,14 @@ return TRUE return FALSE -/obj/item/lightreplacer/proc/Charge(mob/user) - charge += 1 - if(charge > 3) - add_uses(1) - charge = 1 +#define LIGHT_CHARGE_COEFF 30000 +/obj/item/lightreplacer/proc/Charge(mob/user, coeff) + charge += coeff + if(charge > LIGHT_CHARGE_COEFF) + add_uses(floor(charge / LIGHT_CHARGE_COEFF)) + charge = charge % LIGHT_CHARGE_COEFF + +#undef LIGHT_CHARGE_COEFF /obj/item/lightreplacer/proc/replace_light(obj/machinery/light/target, mob/living/user) //Confirm that it's a light we're testing, because afterattack runs this for everything on a given turf and will runtime diff --git a/code/game/objects/items/devices/pipe_painter.dm b/code/game/objects/items/devices/pipe_painter.dm index 3a3b9055725a7..12b73d79e275b 100644 --- a/code/game/objects/items/devices/pipe_painter.dm +++ b/code/game/objects/items/devices/pipe_painter.dm @@ -9,24 +9,24 @@ custom_materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT * 2.5, /datum/material/glass = SHEET_MATERIAL_AMOUNT) -/obj/item/pipe_painter/afterattack(atom/target, mob/user, proximity_flag) - . = ..() - //Make sure we only paint adjacent items - if(!proximity_flag) - return - - if(istype(target, /obj/machinery/atmospherics)) - var/obj/machinery/atmospherics/target_pipe = target +/obj/item/pipe_painter/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + if(istype(interacting_with, /obj/machinery/atmospherics)) + var/obj/machinery/atmospherics/target_pipe = interacting_with target_pipe.paint(GLOB.pipe_paint_colors[paint_color]) playsound(src, 'sound/machines/click.ogg', 50, TRUE) balloon_alert(user, "painted in [paint_color] color") - else if(istype(target, /obj/item/pipe)) - var/obj/item/pipe/target_pipe = target + return ITEM_INTERACT_SUCCESS + + if(istype(interacting_with, /obj/item/pipe)) + var/obj/item/pipe/target_pipe = interacting_with var/color = GLOB.pipe_paint_colors[paint_color] target_pipe.pipe_color = color - target.add_atom_colour(color, FIXED_COLOUR_PRIORITY) + target_pipe.add_atom_colour(color, FIXED_COLOUR_PRIORITY) playsound(src, 'sound/machines/click.ogg', 50, TRUE) balloon_alert(user, "painted in [paint_color] color") + return ITEM_INTERACT_SUCCESS + + return NONE /obj/item/pipe_painter/attack_self(mob/user) paint_color = tgui_input_list(user, "Which colour do you want to use?", "Pipe painter", GLOB.pipe_paint_colors) diff --git a/code/game/objects/items/devices/pressureplates.dm b/code/game/objects/items/devices/pressureplates.dm index 1b6a5ee6db7b8..18bb026745ac0 100644 --- a/code/game/objects/items/devices/pressureplates.dm +++ b/code/game/objects/items/devices/pressureplates.dm @@ -75,15 +75,16 @@ sigdev = null return ..() -/obj/item/pressure_plate/CtrlClick(mob/user) +/obj/item/pressure_plate/item_ctrl_click(mob/user) if(protected) to_chat(user, span_warning("You can't quite seem to turn this pressure plate off...")) - return + return CLICK_ACTION_BLOCKING active = !active - if (active == TRUE) + if (active) to_chat(user, span_notice("You turn [src] on.")) else to_chat(user, span_notice("You turn [src] off.")) + return CLICK_ACTION_SUCCESS ///Called from COMSIG_OBJ_HIDE to toggle the active part, because yeah im not making a special exception on the element to support it /obj/item/pressure_plate/proc/ToggleActive(datum/source, underfloor_accessibility) diff --git a/code/game/objects/items/devices/radio/headset.dm b/code/game/objects/items/devices/radio/headset.dm index ae806b594e1fd..1f2cd37a5ccef 100644 --- a/code/game/objects/items/devices/radio/headset.dm +++ b/code/game/objects/items/devices/radio/headset.dm @@ -26,7 +26,7 @@ GLOBAL_LIST_INIT(channel_tokens, list( custom_materials = list(/datum/material/iron=SMALL_MATERIAL_AMOUNT * 0.75) subspace_transmission = TRUE canhear_range = 0 // can't hear headsets from very far away - + interaction_flags_mouse_drop = FORBID_TELEKINESIS_REACH slot_flags = ITEM_SLOT_EARS dog_fashion = null var/obj/item/encryptionkey/keyslot2 = null @@ -91,11 +91,9 @@ GLOBAL_LIST_INIT(channel_tokens, list( . = ..() .["headset"] = TRUE -/obj/item/radio/headset/MouseDrop(mob/over, src_location, over_location) - var/mob/headset_user = usr - if((headset_user == over) && headset_user.can_perform_action(src, FORBID_TELEKINESIS_REACH)) - return attack_self(headset_user) - return ..() +/obj/item/radio/headset/mouse_drop_dragged(atom/over, mob/user, src_location, over_location, params) + if(user == over) + return attack_self(user) /// Grants all the languages this headset allows the mob to understand via installed chips. /obj/item/radio/headset/proc/grant_headset_languages(mob/grant_to) diff --git a/code/game/objects/items/devices/radio/intercom.dm b/code/game/objects/items/devices/radio/intercom.dm index 5ba5e6937ca10..504f547b5cb78 100644 --- a/code/game/objects/items/devices/radio/intercom.dm +++ b/code/game/objects/items/devices/radio/intercom.dm @@ -11,7 +11,7 @@ item_flags = NO_BLOOD_ON_ITEM overlay_speaker_idle = "intercom_s" - overlay_speaker_active = "intercom_recieve" + overlay_speaker_active = "intercom_receive" overlay_mic_idle = "intercom_m" overlay_mic_active = null diff --git a/code/game/objects/items/devices/radio/radio.dm b/code/game/objects/items/devices/radio/radio.dm index ffb4f486cb89d..ced454c3d3261 100644 --- a/code/game/objects/items/devices/radio/radio.dm +++ b/code/game/objects/items/devices/radio/radio.dm @@ -76,7 +76,7 @@ /// overlay when speaker is on var/overlay_speaker_idle = "s_idle" - /// overlay when recieving a message + /// overlay when receiving a message var/overlay_speaker_active = "s_active" /// overlay when mic is on diff --git a/code/game/objects/items/devices/scanners/gas_analyzer.dm b/code/game/objects/items/devices/scanners/gas_analyzer.dm index e452c550cdfa7..b1110e389a1db 100644 --- a/code/game/objects/items/devices/scanners/gas_analyzer.dm +++ b/code/game/objects/items/devices/scanners/gas_analyzer.dm @@ -145,12 +145,13 @@ ui_interact(user) -/obj/item/analyzer/afterattack(atom/target, mob/user, proximity_flag, click_parameters) - . = ..() - if(!can_see(user, target, ranged_scan_distance)) - return - . |= AFTERATTACK_PROCESSED_ITEM - atmos_scan(user, (target.return_analyzable_air() ? target : get_turf(target))) +/obj/item/analyzer/ranged_interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + return interact_with_atom(interacting_with, user, modifiers) + +/obj/item/analyzer/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + if(can_see(user, interacting_with, ranged_scan_distance)) + atmos_scan(user, (interacting_with.return_analyzable_air() ? interacting_with : get_turf(interacting_with))) + return NONE // Non-blocking /// Called when our analyzer is used on something /obj/item/analyzer/proc/on_analyze(datum/source, atom/target) diff --git a/code/game/objects/items/devices/scanners/health_analyzer.dm b/code/game/objects/items/devices/scanners/health_analyzer.dm index 10c301af1c63d..c8c76c583e103 100644 --- a/code/game/objects/items/devices/scanners/health_analyzer.dm +++ b/code/game/objects/items/devices/scanners/health_analyzer.dm @@ -279,7 +279,7 @@ Status" for(var/obj/item/organ/organ as anything in humantarget.organs) - var/status = organ.get_status_text() + var/status = organ.get_status_text(advanced) if (status != "") render = TRUE toReport += "[organ.name]:\ diff --git a/code/game/objects/items/devices/scanners/sequence_scanner.dm b/code/game/objects/items/devices/scanners/sequence_scanner.dm index 3a45dae813bc0..03ed5670d7eec 100644 --- a/code/game/objects/items/devices/scanners/sequence_scanner.dm +++ b/code/game/objects/items/devices/scanners/sequence_scanner.dm @@ -19,7 +19,7 @@ var/list/discovered = list() //hit a dna console to update the scanners database var/list/buffer var/ready = TRUE - var/cooldown = 200 + var/cooldown = (20 SECONDS) /// genetic makeup data that's scanned var/list/genetic_makeup_buffer = list() @@ -30,6 +30,15 @@ . += span_notice("It has the genetic makeup of \"[genetic_makeup_buffer["name"]]\" stored inside its buffer") /obj/item/sequence_scanner/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + if(istype(interacting_with, /obj/machinery/computer/scan_consolenew)) + var/obj/machinery/computer/scan_consolenew/console = interacting_with + if(console.stored_research) + to_chat(user, span_notice("[name] linked to central research database.")) + discovered = console.stored_research.discovered_mutations + else + to_chat(user,span_warning("No database to update from.")) + return ITEM_INTERACT_SUCCESS + if(!isliving(interacting_with)) return NONE @@ -47,6 +56,12 @@ return ITEM_INTERACT_BLOCKING /obj/item/sequence_scanner/interact_with_atom_secondary(atom/interacting_with, mob/living/user, list/modifiers) + if(istype(interacting_with, /obj/machinery/computer/scan_consolenew)) + var/obj/machinery/computer/scan_consolenew/console = interacting_with + var/buffer_index = tgui_input_number(user, "Slot:", "Which slot to export:", 1, LAZYLEN(console.genetic_makeup_buffer), 1) + console.genetic_makeup_buffer[buffer_index] = genetic_makeup_buffer + return ITEM_INTERACT_SUCCESS + if(!isliving(interacting_with)) return NONE @@ -66,34 +81,12 @@ user.visible_message(span_notice("[user] fails to analyze [interacting_with]'s genetic makeup."), span_warning("[interacting_with] has no readable genetic makeup!")) return ITEM_INTERACT_BLOCKING -/obj/item/sequence_scanner/afterattack_secondary(obj/object, mob/user, proximity) - . = ..() - if(!istype(object) || !proximity) - return - if(istype(object, /obj/machinery/computer/scan_consolenew)) - var/obj/machinery/computer/scan_consolenew/console = object - var/buffer_index = tgui_input_number(user, "Slot:", "Which slot to export:", 1, LAZYLEN(console.genetic_makeup_buffer), 1) - console.genetic_makeup_buffer[buffer_index] = genetic_makeup_buffer - /obj/item/sequence_scanner/attack_self(mob/user) display_sequence(user) /obj/item/sequence_scanner/attack_self_tk(mob/user) return -/obj/item/sequence_scanner/afterattack(obj/object, mob/user, proximity) - . = ..() - if(!istype(object) || !proximity) - return - - if(istype(object, /obj/machinery/computer/scan_consolenew)) - var/obj/machinery/computer/scan_consolenew/console = object - if(console.stored_research) - to_chat(user, span_notice("[name] linked to central research database.")) - discovered = console.stored_research.discovered_mutations - else - to_chat(user,span_warning("No database to update from.")) - ///proc for scanning someone's mutations /obj/item/sequence_scanner/proc/gene_scan(mob/living/carbon/target, mob/living/user) if(!iscarbon(target) || !target.has_dna()) @@ -104,7 +97,7 @@ buffer = LAZYLISTDUPLICATE(target.dna.mutation_index) var/list/active_mutations = list() for(var/datum/mutation/human/mutation in target.dna.mutations) - LAZYOR(buffer, mutation.type) + LAZYSET(buffer, mutation.type, GET_SEQUENCE(mutation.type)) active_mutations.Add(mutation.type) to_chat(user, span_notice("Subject [target.name]'s DNA sequence has been saved to buffer.")) diff --git a/code/game/objects/items/devices/traitordevices.dm b/code/game/objects/items/devices/traitordevices.dm index 7e6ee077fcea9..0dc69cb9c8117 100644 --- a/code/game/objects/items/devices/traitordevices.dm +++ b/code/game/objects/items/devices/traitordevices.dm @@ -361,29 +361,41 @@ effective or pretty fucking useless. new /obj/item/analyzer(src) new /obj/item/wirecutters(src) -/obj/item/storage/toolbox/emergency/turret/attackby(obj/item/attacking_item, mob/living/user, params) - if(!istype(attacking_item, /obj/item/wrench/combat)) - return ..() - +/obj/item/storage/toolbox/emergency/turret/storage_insert_on_interacted_with(datum/storage, obj/item/inserted, mob/living/user) + if(!istype(inserted, /obj/item/wrench/combat)) + return TRUE if(!user.combat_mode) - return - - if(!attacking_item.toolspeed) - return + return TRUE + if(!inserted.toolspeed) + return TRUE + return FALSE +/obj/item/storage/toolbox/emergency/turret/item_interaction(mob/living/user, obj/item/tool, list/modifiers) + if(!istype(tool, /obj/item/wrench/combat)) + return NONE + if(!user.combat_mode) + return NONE + if(!tool.toolspeed) + return ITEM_INTERACT_BLOCKING balloon_alert(user, "constructing...") - if(!attacking_item.use_tool(src, user, 2 SECONDS, volume = 20)) - return + if(!tool.use_tool(src, user, 2 SECONDS, volume = 20)) + return ITEM_INTERACT_BLOCKING balloon_alert(user, "constructed!") - user.visible_message(span_danger("[user] bashes [src] with [attacking_item]!"), \ - span_danger("You bash [src] with [attacking_item]!"), null, COMBAT_MESSAGE_RANGE) - - playsound(src, "sound/items/drill_use.ogg", 80, TRUE, -1) + user.visible_message( + span_danger("[user] bashes [src] with [tool]!"), + span_danger("You bash [src] with [tool]!"), + null, + COMBAT_MESSAGE_RANGE, + ) + + playsound(src, 'sound/items/drill_use.ogg', 80, TRUE, -1) var/obj/machinery/porta_turret/syndicate/toolbox/turret = new(get_turf(loc)) set_faction(turret, user) turret.toolbox = src forceMove(turret) + return ITEM_INTERACT_SUCCESS + /obj/item/storage/toolbox/emergency/turret/proc/set_faction(obj/machinery/porta_turret/turret, mob/user) turret.faction = list("[REF(user)]") diff --git a/code/game/objects/items/devices/transfer_valve.dm b/code/game/objects/items/devices/transfer_valve.dm index c3203a0ace7a9..598c16c9041a8 100644 --- a/code/game/objects/items/devices/transfer_valve.dm +++ b/code/game/objects/items/devices/transfer_valve.dm @@ -211,6 +211,7 @@ it explodes properly when it gets a signal (and it does). */ /obj/item/transfer_valve/proc/toggle_valve(obj/item/tank/target, change_volume = TRUE) + playsound(src, 'sound/effects/valve_opening.ogg', 50) if(!valve_open && tank_one && tank_two) var/turf/bombturf = get_turf(src) diff --git a/code/game/objects/items/dna_injector.dm b/code/game/objects/items/dna_injector.dm index 0dc20c6dbb4d9..dde01baac03ee 100644 --- a/code/game/objects/items/dna_injector.dm +++ b/code/game/objects/items/dna_injector.dm @@ -163,7 +163,7 @@ /obj/item/dnainjector/activator name = "\improper DNA activator" desc = "Activates the current mutation on injection, if the subject has it." - var/doitanyway = FALSE + var/force_mutate = FALSE var/research = FALSE //Set to true to get expended and filled injectors for chromosomes var/filled = FALSE var/crispr_charge = FALSE // Look for viruses, look at symptoms, if research and Dormant DNA Activator or Viral Evolutionary Acceleration, set to true @@ -176,7 +176,7 @@ if(istype(added_mutation, /datum/mutation/human)) mutation = added_mutation.type if(!target.dna.activate_mutation(added_mutation)) - if(doitanyway) + if(force_mutate) target.dna.add_mutation(added_mutation, MUT_EXTRA) else if(research && target.client) filled = TRUE @@ -184,7 +184,7 @@ for(var/datum/symptom/symp in disease.symptoms) if((symp.type == /datum/symptom/genetic_mutation) || (symp.type == /datum/symptom/viralevolution)) crispr_charge = TRUE - log_combat(user, target, "[!doitanyway ? "failed to inject" : "injected"]", "[src] ([mutation])[crispr_charge ? " with CRISPR charge" : ""]") + log_combat(user, target, "[!force_mutate ? "failed to inject" : "injected"]", "[src] ([mutation])[crispr_charge ? " with CRISPR charge" : ""]") return TRUE /// DNA INJECTORS @@ -426,12 +426,12 @@ /obj/item/dnainjector/pressuremut name = "\improper DNA injector (Pressure Adaptation)" desc = "Gives you fire." - add_mutations = list(/datum/mutation/human/pressure_adaptation) + add_mutations = list(/datum/mutation/human/adaptation/pressure) /obj/item/dnainjector/antipressure name = "\improper DNA injector (Anti-Pressure Adaptation)" desc = "Cures fire." - remove_mutations = list(/datum/mutation/human/pressure_adaptation) + remove_mutations = list(/datum/mutation/human/adaptation/pressure) /obj/item/dnainjector/radioactive name = "\improper DNA injector (Radioactive)" @@ -500,12 +500,12 @@ /obj/item/dnainjector/firemut name = "\improper DNA injector (Temp Adaptation)" desc = "Gives you fire." - add_mutations = list(/datum/mutation/human/temperature_adaptation) + add_mutations = list(/datum/mutation/human/adaptation/thermal) /obj/item/dnainjector/antifire name = "\improper DNA injector (Anti-Temp Adaptation)" desc = "Cures fire." - remove_mutations = list(/datum/mutation/human/temperature_adaptation) + remove_mutations = list(/datum/mutation/human/adaptation/thermal) /obj/item/dnainjector/thermal name = "\improper DNA injector (Thermal Vision)" diff --git a/code/game/objects/items/dna_probe.dm b/code/game/objects/items/dna_probe.dm index 6f9944bc94940..ee6a32766522f 100644 --- a/code/game/objects/items/dna_probe.dm +++ b/code/game/objects/items/dna_probe.dm @@ -30,26 +30,47 @@ ///weak ref to the dna vault var/datum/weakref/dna_vault_ref -/obj/item/dna_probe/afterattack(atom/target, mob/user, proximity_flag, click_parameters) - . = ..() - if(!proximity_flag || !target) - return . - - if (isitem(target)) - . |= AFTERATTACK_PROCESSED_ITEM +/obj/item/dna_probe/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + if(istype(interacting_with, /obj/machinery/dna_vault)) + if(dna_vault_ref?.resolve()) + // Weirdly we can upload to any existing DNA vault so long as we're linked to any other existing DNA vault. + return try_upload_dna(interacting_with, user) ? ITEM_INTERACT_SUCCESS : ITEM_INTERACT_BLOCKING + else + return try_linking_vault(interacting_with, user) ? ITEM_INTERACT_SUCCESS : ITEM_INTERACT_BLOCKING - if(istype(target, /obj/machinery/dna_vault) && !dna_vault_ref?.resolve()) - try_linking_vault(target, user) - else - scan_dna(target, user) + scan_dna(interacting_with, user) + return ITEM_INTERACT_BLOCKING -/obj/item/dna_probe/proc/try_linking_vault(atom/target, mob/user) +/obj/item/dna_probe/proc/try_linking_vault(obj/machinery/dna_vault/target, mob/user) var/obj/machinery/dna_vault/our_vault = dna_vault_ref?.resolve() if(!our_vault) dna_vault_ref = WEAKREF(target)//linking the dna vault with the probe balloon_alert(user, "vault linked") playsound(src, 'sound/machines/terminal_success.ogg', 50) - return + return TRUE + return FALSE + +/obj/item/dna_probe/proc/try_upload_dna(obj/machinery/dna_vault/target, mob/user) + var/uploaded = 0 + var/plant_dna_length = length(stored_dna_plants) + var/human_dna_length = length(stored_dna_human) + var/animal_dna_length = length(stored_dna_animal) + if(plant_dna_length) + uploaded += plant_dna_length + target.plant_dna += stored_dna_plants + stored_dna_plants.Cut() + if(human_dna_length) + uploaded += human_dna_length + target.human_dna += stored_dna_human + stored_dna_human.Cut() + if(animal_dna_length) + uploaded += animal_dna_length + target.animal_dna += stored_dna_animal + stored_dna_animal.Cut() + target.check_goal() + playsound(target, 'sound/misc/compiler-stage1.ogg', 50) + to_chat(user, span_notice("[uploaded] new datapoints uploaded.")) + return uploaded /obj/item/dna_probe/proc/scan_dna(atom/target, mob/user) var/obj/machinery/dna_vault/our_vault = dna_vault_ref?.resolve() diff --git a/code/game/objects/items/dyespray.dm b/code/game/objects/items/dyespray.dm index fd198ec1c40e3..b64f15fe69073 100644 --- a/code/game/objects/items/dyespray.dm +++ b/code/game/objects/items/dyespray.dm @@ -27,7 +27,7 @@ if(!beard_or_hair || !user.can_perform_action(src, NEED_DEXTERITY)) return - var/list/choices = beard_or_hair == "Hair" ? GLOB.hair_gradients_list : GLOB.facial_hair_gradients_list + var/list/choices = beard_or_hair == "Hair" ? SSaccessories.hair_gradients_list : SSaccessories.facial_hair_gradients_list var/new_grad_style = tgui_input_list(user, "Choose a color pattern", "Character Preference", choices) if(isnull(new_grad_style)) return diff --git a/code/game/objects/items/emags.dm b/code/game/objects/items/emags.dm index 7882018701e4d..74472995b688e 100644 --- a/code/game/objects/items/emags.dm +++ b/code/game/objects/items/emags.dm @@ -22,6 +22,62 @@ user.visible_message(span_notice("[user] shows you: [icon2html(src, viewers(user))] [name]."), span_notice("You show [src].")) add_fingerprint(user) +/obj/item/card/emag/emag_act(mob/user, obj/item/card/emag/emag_card) + if(isnull(user) || !istype(emag_card)) + return FALSE + var/emag_count = 0 + for(var/obj/item/card/emag/emag in get_all_contents() + emag_card.get_all_contents()) // This is including itself + emag_count++ + if(emag_count > 6) // 1 uplink's worth is the limit + to_chat(user, span_warning("Nope, lesson learned. No more.")) + return FALSE + if(emag_card.loc != loc) // Both have to be in your hand (or TK shenanigans) + return FALSE + if(!user.transferItemToLoc(emag_card, src, silent = FALSE)) + return FALSE + + user.visible_message( + span_notice("[user] holds [emag_card] to [src], getting the two cards stuck together!"), + span_notice("As you hold [emag_card] to [src], [emag_card.p_their()] magnets attract to one another, \ + and [emag_card.p_they()] become stuck together!"), + visible_message_flags = ALWAYS_SHOW_SELF_MESSAGE, + ) + playsound(src, 'sound/effects/bang.ogg', 33, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) + addtimer(CALLBACK(src, PROC_REF(contemplation_period), user), 2 SECONDS, TIMER_DELETE_ME) + emag_card.vis_flags |= VIS_INHERIT_ID|VIS_INHERIT_PLANE + vis_contents += emag_card + name = initial(name) + desc = initial(desc) + var/list/all_emags = get_all_contents_type(/obj/item/card/emag) - src + for(var/i in 1 to length(all_emags)) + var/obj/item/card/emag/other_emag = all_emags[i] + other_emag.pixel_x = pixel_x + (4 * i) + other_emag.pixel_y = pixel_y + (4 * i) + other_emag.layer = layer - (0.01 * i) + name += "-[initial(other_emag.name)]" + desc += " There seems to be another card stuck to it...pretty soundly." + return TRUE + +/obj/item/card/emag/proc/contemplation_period(mob/user) + if(QDELETED(user)) + return + if(QDELETED(src)) + to_chat(user, span_notice("Oh, well.")) + else + to_chat(user, span_warning("Well, shit. Those are never coming apart now.")) + +/obj/item/card/emag/Exited(atom/movable/gone, direction) + . = ..() + if(istype(gone, /obj/item/card/emag)) + // This is here so if(when) admins fish it out of contents it doesn't become glitchy + gone.layer = initial(gone.layer) + gone.vis_flags = initial(gone.vis_flags) + vis_contents -= gone + name = initial(name) + desc = initial(desc) + gone.name = initial(name) + gone.desc = initial(desc) + /obj/item/card/emag/bluespace name = "bluespace cryptographic sequencer" desc = "It's a blue card with a magnetic strip attached to some circuitry. It appears to have some sort of transmitter attached to it." @@ -34,11 +90,14 @@ icon_state = "hack_o_lantern" /obj/item/card/emagfake - desc = "It's a card with a magnetic strip attached to some circuitry. Closer inspection shows that this card is a poorly made replica, with a \"Donk Co.\" logo stamped on the back." - name = "cryptographic sequencer" - icon_state = "emag" + name = /obj/item/card/emag::name + desc = /obj/item/card/emag::desc + " Closer inspection shows that this card is a poorly made replica, with a \"Donk Co.\" logo stamped on the back." + icon = /obj/item/card/emag::icon + icon_state = /obj/item/card/emag::icon_state + worn_icon_state = /obj/item/card/emag::worn_icon_state slot_flags = ITEM_SLOT_ID - worn_icon_state = "emag" + /// Whether we are exploding + var/exploding = FALSE /obj/item/card/emagfake/attack_self(mob/user) //for assistants with balls of plasteel if(Adjacent(user)) @@ -46,13 +105,41 @@ add_fingerprint(user) /obj/item/card/emagfake/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) - playsound(src, 'sound/items/bikehorn.ogg', 50, TRUE) + if(exploding) + playsound(src, 'sound/items/bikehorn.ogg', 50, TRUE, frequency = 2) + else if(obj_flags & EMAGGED) + log_bomber(user, "triggered", src, "(rigged/emagged)") + visible_message(span_boldwarning("[src] begins to heat up!")) + playsound(src, 'sound/items/bikehorn.ogg', 100, TRUE, frequency = 0.25) + addtimer(CALLBACK(src, PROC_REF(blow_up)), 1 SECONDS, TIMER_DELETE_ME) + exploding = TRUE + else + playsound(src, 'sound/items/bikehorn.ogg', 50, TRUE) return ITEM_INTERACT_SKIP_TO_ATTACK // So it does the attack animation. +/obj/item/card/emagfake/proc/blow_up() + visible_message(span_boldwarning("[src] explodes!")) + explosion(src, light_impact_range = 1, explosion_cause = src) + qdel(src) + +/obj/item/card/emagfake/emag_act(mob/user, obj/item/card/emag/emag_card) + if(obj_flags & EMAGGED) + return FALSE + playsound(src, SFX_SPARKS, 50, TRUE, SILENCED_SOUND_EXTRARANGE) + desc = /obj/item/card/emag::desc + obj_flags |= EMAGGED + if(user) + balloon_alert(user, "rigged to blow") + log_bomber(user, "rigged to blow", src, "(emagging)") + return TRUE + /obj/item/card/emag/Initialize(mapload) . = ..() type_blacklist = list(typesof(/obj/machinery/door/airlock) + typesof(/obj/machinery/door/window/) + typesof(/obj/machinery/door/firedoor) - typesof(/obj/machinery/door/airlock/tram)) //list of all typepaths that require a specialized emag to hack. +/obj/item/card/emag/storage_insert_on_interaction(datum/storage, atom/storage_holder, mob/living/user) + return !user.combat_mode + /obj/item/card/emag/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) if(!can_emag(interacting_with, user)) return ITEM_INTERACT_BLOCKING @@ -60,15 +147,8 @@ interacting_with.emag_act(user, src) return ITEM_INTERACT_SUCCESS -/obj/item/card/emag/afterattack(atom/target, mob/user, proximity_flag, click_parameters) - . = ..() - // Proximity based emagging is handled by above - // This is only for ranged emagging - if(proximity_flag || prox_check) - return - - . |= AFTERATTACK_PROCESSED_ITEM - interact_with_atom(target, user) +/obj/item/card/emag/ranged_interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + return prox_check ? NONE : interact_with_atom(interacting_with, user) /obj/item/card/emag/proc/can_emag(atom/target, mob/user) for (var/subtypelist in type_blacklist) diff --git a/code/game/objects/items/extinguisher.dm b/code/game/objects/items/extinguisher.dm index 1a7a6cc3a4b93..1e879d4422ced 100644 --- a/code/game/objects/items/extinguisher.dm +++ b/code/game/objects/items/extinguisher.dm @@ -18,7 +18,7 @@ attack_verb_simple = list("slam", "whack", "bash", "thunk", "batter", "bludgeon", "thrash") dog_fashion = /datum/dog_fashion/back resistance_flags = FIRE_PROOF - interaction_flags_click = NEED_DEXTERITY|NEED_HANDS + interaction_flags_click = NEED_DEXTERITY|NEED_HANDS|ALLOW_RESTING /// The max amount of water this extinguisher can hold. var/max_water = 50 /// Does the welder extinguisher start with water. @@ -32,7 +32,11 @@ /// Can we refill this at a water tank? var/refilling = FALSE /// What tank we need to refill this. - var/tanktype = /obj/structure/reagent_dispensers/watertank + var/tanktypes = list( + /obj/structure/reagent_dispensers/watertank, + /obj/structure/reagent_dispensers/plumbed, + /obj/structure/reagent_dispensers/water_cooler, + ) /// something that should be replaced with base_icon_state var/sprite_name = "fire_extinguisher" /// Maximum distance launched water will travel. @@ -53,6 +57,15 @@ slapcraft_recipes = slapcraft_recipe_list,\ ) + register_context() + +/obj/item/extinguisher/add_context(atom/source, list/context, obj/item/held_item, mob/user) + if(held_item != src) + return + context[SCREENTIP_CONTEXT_LMB] = "Engage nozzle" + context[SCREENTIP_CONTEXT_ALT_LMB] = "Empty" + return CONTEXTUAL_SCREENTIP_SET + /obj/item/extinguisher/empty starting_water = FALSE @@ -122,7 +135,10 @@ tank_holder_icon_state = "holder_foam_extinguisher" dog_fashion = null chem = /datum/reagent/firefighting_foam - tanktype = /obj/structure/reagent_dispensers/foamtank + tanktypes = list( + /obj/structure/reagent_dispensers/foamtank, + /obj/structure/reagent_dispensers/plumbed, + ) sprite_name = "foam_extinguisher" precision = TRUE max_water = 100 @@ -133,7 +149,7 @@ /obj/item/extinguisher/suicide_act(mob/living/carbon/user) if (!safety && (reagents.total_volume >= 1)) user.visible_message(span_suicide("[user] puts the nozzle to [user.p_their()] mouth. It looks like [user.p_theyre()] trying to extinguish the spark of life!")) - afterattack(user,user) + interact_with_atom(user, user) return OXYLOSS else if (safety && (reagents.total_volume >= 1)) user.visible_message(span_warning("[user] puts the nozzle to [user.p_their()] mouth... The safety's still on!")) @@ -169,10 +185,14 @@ . += span_notice("Alt-click to empty it.") /obj/item/extinguisher/proc/AttemptRefill(atom/target, mob/user) - if(istype(target, tanktype) && target.Adjacent(user)) + if(is_type_in_list(target, tanktypes) && target.Adjacent(user)) if(reagents.total_volume == reagents.maximum_volume) balloon_alert(user, "already full!") return TRUE + // Make sure we're refilling with the proper chem. + if(!(target.reagents.has_reagent(chem, check_subtypes = TRUE))) + balloon_alert(user, "can't refill with this liquid!") + return TRUE var/obj/structure/reagent_dispensers/W = target //will it work? var/transferred = W.reagents.trans_to(src, max_water, transferred_by = user) if(transferred > 0) @@ -187,67 +207,65 @@ else return FALSE -/obj/item/extinguisher/afterattack(atom/target, mob/user , flag) - . = ..() - // Make it so the extinguisher doesn't spray yourself when you click your inventory items - if (target.loc == user) - return +/obj/item/extinguisher/ranged_interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + return interact_with_atom(interacting_with, user, modifiers) - . |= AFTERATTACK_PROCESSED_ITEM +/obj/item/extinguisher/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + if (interacting_with.loc == user) + return NONE if(refilling) refilling = FALSE - return . - if (!safety) + return NONE + if(safety) + return NONE + if (src.reagents.total_volume < 1) + balloon_alert(user, "it's empty!") + return . - if (src.reagents.total_volume < 1) - balloon_alert(user, "it's empty!") - return . - - if (world.time < src.last_use + 12) - return . - - src.last_use = world.time + if (world.time < src.last_use + 12) + return . - playsound(src.loc, 'sound/effects/extinguish.ogg', 75, TRUE, -3) + src.last_use = world.time - var/direction = get_dir(src,target) + playsound(src.loc, 'sound/effects/extinguish.ogg', 75, TRUE, -3) - if(user.buckled && isobj(user.buckled) && !user.buckled.anchored) - var/obj/B = user.buckled - var/movementdirection = REVERSE_DIR(direction) - addtimer(CALLBACK(src, TYPE_PROC_REF(/obj/item/extinguisher, move_chair), B, movementdirection), 0.1 SECONDS) - else - user.newtonian_move(REVERSE_DIR(direction)) + var/direction = get_dir(src,interacting_with) - //Get all the turfs that can be shot at - var/turf/T = get_turf(target) - var/turf/T1 = get_step(T,turn(direction, 90)) - var/turf/T2 = get_step(T,turn(direction, -90)) - var/list/the_targets = list(T,T1,T2) + if(user.buckled && isobj(user.buckled) && !user.buckled.anchored) + var/obj/B = user.buckled + var/movementdirection = REVERSE_DIR(direction) + addtimer(CALLBACK(src, TYPE_PROC_REF(/obj/item/extinguisher, move_chair), B, movementdirection), 0.1 SECONDS) + else + user.newtonian_move(REVERSE_DIR(direction)) + + //Get all the turfs that can be shot at + var/turf/T = get_turf(interacting_with) + var/turf/T1 = get_step(T,turn(direction, 90)) + var/turf/T2 = get_step(T,turn(direction, -90)) + var/list/the_targets = list(T,T1,T2) + if(precision) + var/turf/T3 = get_step(T1, turn(direction, 90)) + var/turf/T4 = get_step(T2,turn(direction, -90)) + the_targets.Add(T3,T4) + + var/list/water_particles = list() + for(var/a in 1 to 5) + var/obj/effect/particle_effect/water/extinguisher/water = new /obj/effect/particle_effect/water/extinguisher(get_turf(src)) + var/my_target = pick(the_targets) + water_particles[water] = my_target + // If precise, remove turf from targets so it won't be picked more than once if(precision) - var/turf/T3 = get_step(T1, turn(direction, 90)) - var/turf/T4 = get_step(T2,turn(direction, -90)) - the_targets.Add(T3,T4) - - var/list/water_particles = list() - for(var/a in 1 to 5) - var/obj/effect/particle_effect/water/extinguisher/water = new /obj/effect/particle_effect/water/extinguisher(get_turf(src)) - var/my_target = pick(the_targets) - water_particles[water] = my_target - // If precise, remove turf from targets so it won't be picked more than once - if(precision) - the_targets -= my_target - var/datum/reagents/water_reagents = new /datum/reagents(5) - water.reagents = water_reagents - water_reagents.my_atom = water - reagents.trans_to(water, 1, transferred_by = user) - - //Make em move dat ass, hun - move_particles(water_particles) - - return . + the_targets -= my_target + var/datum/reagents/water_reagents = new /datum/reagents(5) + water.reagents = water_reagents + water_reagents.my_atom = water + reagents.trans_to(water, 1, transferred_by = user) + + //Make em move dat ass, hun + move_particles(water_particles) + return ITEM_INTERACT_SKIP_TO_ATTACK // You can smack while spraying //Particle movement loop /obj/item/extinguisher/proc/move_particles(list/particles) @@ -258,7 +276,7 @@ //Chair movement loop /obj/item/extinguisher/proc/move_chair(obj/buckled_object, movementdirection) - var/datum/move_loop/loop = DSmove_manager.move(buckled_object, movementdirection, 1, timeout = 9, flags = MOVEMENT_LOOP_START_FAST, priority = MOVEMENT_ABOVE_SPACE_PRIORITY) + var/datum/move_loop/loop = GLOB.move_manager.move(buckled_object, movementdirection, 1, timeout = 9, flags = MOVEMENT_LOOP_START_FAST, priority = MOVEMENT_ABOVE_SPACE_PRIORITY) //This means the chair slowing down is dependant on the extinguisher existing, which is weird //Couldn't figure out a better way though RegisterSignal(loop, COMSIG_MOVELOOP_POSTPROCESS, PROC_REF(manage_chair_speed)) @@ -298,5 +316,8 @@ name = "fire extender" desc = "A traditional red fire extinguisher. Made in Britain... wait, what?" chem = /datum/reagent/fuel - tanktype = /obj/structure/reagent_dispensers/fueltank + tanktypes = list( + /obj/structure/reagent_dispensers/fueltank, + /obj/structure/reagent_dispensers/plumbed + ) cooling_power = 0 diff --git a/code/game/objects/items/fireaxe.dm b/code/game/objects/items/fireaxe.dm index 2859b4d3b2c16..38e4c840694f5 100644 --- a/code/game/objects/items/fireaxe.dm +++ b/code/game/objects/items/fireaxe.dm @@ -51,15 +51,13 @@ user.visible_message(span_suicide("[user] axes [user.p_them()]self from head to toe! It looks like [user.p_theyre()] trying to commit suicide!")) return BRUTELOSS -/obj/item/fireaxe/afterattack(atom/A, mob/user, proximity) - . = ..() - if(!proximity) +/obj/item/fireaxe/afterattack(atom/target, mob/user, click_parameters) + if(!HAS_TRAIT(src, TRAIT_WIELDED)) //destroys windows and grilles in one hit + return + if(target.resistance_flags & INDESTRUCTIBLE) return - if(HAS_TRAIT(src, TRAIT_WIELDED)) //destroys windows and grilles in one hit - if(istype(A, /obj/structure/window) || istype(A, /obj/structure/grille)) - if(!(A.resistance_flags & INDESTRUCTIBLE)) - var/obj/structure/W = A - W.atom_destruction("fireaxe") + if(istype(target, /obj/structure/window) || istype(target, /obj/structure/grille)) + target.atom_destruction("fireaxe") /* * Bone Axe diff --git a/code/game/objects/items/flamethrower.dm b/code/game/objects/items/flamethrower.dm index be89193ba7edd..e2d587cd3594b 100644 --- a/code/game/objects/items/flamethrower.dm +++ b/code/game/objects/items/flamethrower.dm @@ -79,21 +79,17 @@ if(lit) . += "+lit" -/obj/item/flamethrower/afterattack(atom/target, mob/user, flag) - . = ..() - . |= AFTERATTACK_PROCESSED_ITEM - if(flag) - return // too close +/obj/item/flamethrower/ranged_interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) if(HAS_TRAIT(user, TRAIT_PACIFISM)) to_chat(user, span_warning("You can't bring yourself to fire \the [src]! You don't want to risk harming anyone...")) - log_combat(user, target, "attempted to flamethrower", src, "with gas mixture: {[print_gas_mixture(ptank.return_analyzable_air())]}, flamethrower: \"[name]\" ([src]), igniter: \"[igniter.name]\", tank: \"[ptank.name]\" and tank distribution pressure: \"[siunit(1000 * ptank.distribute_pressure, unit = "Pa", maxdecimals = 9)]\"" + (lit ? " while lit" : "" + " but failed due to pacifism.")) - return - if(user && user.get_active_held_item() == src) // Make sure our user is still holding us - var/turf/target_turf = get_turf(target) - if(target_turf) - var/turflist = get_line(user, target_turf) - log_combat(user, target, "flamethrowered", src, "with gas mixture: {[print_gas_mixture(ptank.return_analyzable_air())]}, flamethrower: \"[name]\", igniter: \"[igniter.name]\", tank: \"[ptank.name]\" and tank distribution pressure: \"[siunit(1000 * ptank.distribute_pressure, unit = "Pa", maxdecimals = 9)]\"" + (lit ? " while lit." : ".")) - flame_turf(turflist) + log_combat(user, interacting_with, "attempted to flamethrower", src, "with gas mixture: {[print_gas_mixture(ptank.return_analyzable_air())]}, flamethrower: \"[name]\" ([src]), igniter: \"[igniter.name]\", tank: \"[ptank.name]\" and tank distribution pressure: \"[siunit(1000 * ptank.distribute_pressure, unit = "Pa", maxdecimals = 9)]\"" + (lit ? " while lit" : "" + " but failed due to pacifism.")) + return ITEM_INTERACT_BLOCKING + var/turf/target_turf = get_turf(interacting_with) + if(target_turf) + var/turflist = get_line(user, target_turf) + log_combat(user, interacting_with, "flamethrowered", src, "with gas mixture: {[print_gas_mixture(ptank.return_analyzable_air())]}, flamethrower: \"[name]\", igniter: \"[igniter.name]\", tank: \"[ptank.name]\" and tank distribution pressure: \"[siunit(1000 * ptank.distribute_pressure, unit = "Pa", maxdecimals = 9)]\"" + (lit ? " while lit." : ".")) + flame_turf(turflist) + return ITEM_INTERACT_SUCCESS /obj/item/flamethrower/wrench_act(mob/living/user, obj/item/tool) . = TRUE diff --git a/code/game/objects/items/food/egg.dm b/code/game/objects/items/food/egg.dm index 356059a097ab1..b669e16b103cd 100644 --- a/code/game/objects/items/food/egg.dm +++ b/code/game/objects/items/food/egg.dm @@ -120,36 +120,40 @@ GLOBAL_VAR_INIT(chicks_from_eggs, 0) else ..() -/obj/item/food/egg/afterattack_secondary(atom/target, mob/user, proximity_flag, click_parameters) - . = ..() - if(. == SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN) - return - - if(!istype(target, /obj/machinery/griddle)) - return SECONDARY_ATTACK_CALL_NORMAL - - var/atom/broken_egg = new /obj/item/food/rawegg(target.loc) - broken_egg.pixel_x = pixel_x - broken_egg.pixel_y = pixel_y - playsound(get_turf(user), 'sound/items/sheath.ogg', 40, TRUE) - reagents.copy_to(broken_egg,reagents.total_volume) +/obj/item/food/egg/interact_with_atom_secondary(atom/interacting_with, mob/living/user, list/modifiers) + if(!istype(interacting_with, /obj/machinery/griddle)) + return NONE + + var/obj/machinery/griddle/hit_griddle = interacting_with + if(length(hit_griddle.griddled_objects) >= hit_griddle.max_items) + interacting_with.balloon_alert(user, "no room!") + return ITEM_INTERACT_BLOCKING + var/atom/broken_egg = new /obj/item/food/rawegg(interacting_with.loc) + if(LAZYACCESS(modifiers, ICON_X)) + broken_egg.pixel_x = clamp(text2num(LAZYACCESS(modifiers, ICON_X)) - 16, -(world.icon_size/2), world.icon_size/2) + if(LAZYACCESS(modifiers, ICON_Y)) + broken_egg.pixel_y = clamp(text2num(LAZYACCESS(modifiers, ICON_Y)) - 16, -(world.icon_size/2), world.icon_size/2) + playsound(user, 'sound/items/sheath.ogg', 40, TRUE) + reagents.copy_to(broken_egg, reagents.total_volume) - var/obj/machinery/griddle/hit_griddle = target hit_griddle.AddToGrill(broken_egg, user) - target.balloon_alert(user, "cracks [src] open") + interacting_with.balloon_alert(user, "cracks [src] open") qdel(src) - return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN + return ITEM_INTERACT_BLOCKING /obj/item/food/egg/blue icon_state = "egg-blue" inhand_icon_state = "egg-blue" + /obj/item/food/egg/green icon_state = "egg-green" inhand_icon_state = "egg-green" + /obj/item/food/egg/mime icon_state = "egg-mime" inhand_icon_state = "egg-mime" + /obj/item/food/egg/orange icon_state = "egg-orange" inhand_icon_state = "egg-orange" diff --git a/code/game/objects/items/food/misc.dm b/code/game/objects/items/food/misc.dm index 0e598c6820296..31ac87c0ff690 100644 --- a/code/game/objects/items/food/misc.dm +++ b/code/game/objects/items/food/misc.dm @@ -184,7 +184,7 @@ /obj/item/food/melonfruitbowl name = "melon fruit bowl" - desc = "For people who wants edible fruit bowls." + desc = "For people who want to experience an explosion of flavour." icon_state = "melonfruitbowl" food_reagents = list( /datum/reagent/consumable/nutriment = 6, diff --git a/code/game/objects/items/food/packaged.dm b/code/game/objects/items/food/packaged.dm index 820b10927f619..0f08fd8f57dd9 100644 --- a/code/game/objects/items/food/packaged.dm +++ b/code/game/objects/items/food/packaged.dm @@ -117,13 +117,11 @@ return ..() apply_buff(user) -/obj/item/food/canned/envirochow/afterattack(atom/target, mob/user, proximity_flag) - . = ..() - if(!proximity_flag) - return - if(!check_buffability(target)) - return - apply_buff(target, user) +/obj/item/food/canned/envirochow/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + if(!check_buffability(interacting_with)) + return NONE + apply_buff(interacting_with, user) + return ITEM_INTERACT_SUCCESS ///This proc checks if the mob is able to receive the buff. /obj/item/food/canned/envirochow/proc/check_buffability(mob/living/hungry_pet) diff --git a/code/game/objects/items/food/pizza.dm b/code/game/objects/items/food/pizza.dm index 834484872d650..71dd87af8e183 100644 --- a/code/game/objects/items/food/pizza.dm +++ b/code/game/objects/items/food/pizza.dm @@ -127,6 +127,13 @@ foodtypes = GRAIN | VEGETABLES | DAIRY | MEAT crafting_complexity = FOOD_COMPLEXITY_3 +/obj/item/food/pizzaslice/meat/pizzeria //Reward for pizzeria bitrunning domain + name = "pizzeria meatpizza slice" + desc = "An ostensibly nutritious slice of meatpizza from a long-closed pizzeria." + food_reagents = null + tastes = list("crust" = 1, "ketchup" = 1, "'cheese'" = 1, "mystery meat" = 1, "glue" = 1) + foodtypes = null + /obj/item/food/pizza/mushroom name = "mushroom pizza" desc = "Very special pizza." diff --git a/code/game/objects/items/food/sandwichtoast.dm b/code/game/objects/items/food/sandwichtoast.dm index e440a1039e6d1..47a7b563e0895 100644 --- a/code/game/objects/items/food/sandwichtoast.dm +++ b/code/game/objects/items/food/sandwichtoast.dm @@ -9,7 +9,7 @@ /datum/reagent/consumable/nutriment/vitamin = 1, ) tastes = list("meat" = 2, "cheese" = 1, "bread" = 2, "lettuce" = 1) - foodtypes = GRAIN | VEGETABLES + foodtypes = GRAIN | VEGETABLES | DAIRY | MEAT food_flags = FOOD_FINGER_FOOD w_class = WEIGHT_CLASS_SMALL crafting_complexity = FOOD_COMPLEXITY_3 diff --git a/code/game/objects/items/food/snacks.dm b/code/game/objects/items/food/snacks.dm index 1c3cb7736cec0..cb64c6df52204 100644 --- a/code/game/objects/items/food/snacks.dm +++ b/code/game/objects/items/food/snacks.dm @@ -157,7 +157,7 @@ /obj/item/food/candy_trash name = "candy cigarette butt" - icon = 'icons/obj/clothing/masks.dmi' + icon = 'icons/obj/cigarettes.dmi' icon_state = "candybum" desc = "The leftover from a smoked-out candy cigarette. Can be eaten!" food_reagents = list( diff --git a/code/game/objects/items/granters/crafting/pipegun.dm b/code/game/objects/items/granters/crafting/pipegun.dm index 8d331b2286d00..e54439350dab0 100644 --- a/code/game/objects/items/granters/crafting/pipegun.dm +++ b/code/game/objects/items/granters/crafting/pipegun.dm @@ -11,6 +11,7 @@ "Did he drop this into a moisture trap? Yuck.", "Toolboxing techniques, huh? I kinda just want to know how to make the gun.", "What the hell does he mean by 'ancient warrior tradition'?", + "...the true masters of this place are not those who merely inhabit it...", ) /obj/item/book/granter/crafting_recipe/dusting/laser_musket_prime diff --git a/code/game/objects/items/granters/crafting/rebarxbowsyndie.dm b/code/game/objects/items/granters/crafting/rebarxbowsyndie.dm index fd38d4f4ccb20..04cee4e18a792 100644 --- a/code/game/objects/items/granters/crafting/rebarxbowsyndie.dm +++ b/code/game/objects/items/granters/crafting/rebarxbowsyndie.dm @@ -1,5 +1,5 @@ /obj/item/book/granter/crafting_recipe/dusting/rebarxbowsyndie_ammo - name = "SYNDICATE REBAR CROSSBOW OWNERS MANUAL" + name = "SYNDICATE REBAR CROSSBOW AMMO CRAFTING MANUAL" desc = "This book will self destruct upon being read a second time." crafting_recipe_types = list( /datum/crafting_recipe/rebarsyndie diff --git a/code/game/objects/items/grenades/_grenade.dm b/code/game/objects/items/grenades/_grenade.dm index 4c737ed53f3cb..ec16b4c22fe95 100644 --- a/code/game/objects/items/grenades/_grenade.dm +++ b/code/game/objects/items/grenades/_grenade.dm @@ -16,7 +16,6 @@ flags_1 = PREVENT_CONTENTS_EXPLOSION_1 // We detonate upon being exploded. obj_flags = CONDUCTS_ELECTRICITY slot_flags = ITEM_SLOT_BELT - resistance_flags = FLAMMABLE max_integrity = 40 /// Bitfields which prevent the grenade from detonating if set. Includes ([GRENADE_DUD]|[GRENADE_USED]) var/dud_flags = NONE @@ -263,8 +262,8 @@ qdel(src) return TRUE //It hit the grenade, not them -/obj/item/grenade/afterattack(atom/target, mob/user) - . = ..() +/obj/item/grenade/ranged_interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) if(active) - user.throw_item(target) - return . | AFTERATTACK_PROCESSED_ITEM + user.throw_item(interacting_with) + return ITEM_INTERACT_SUCCESS + return NONE diff --git a/code/game/objects/items/grenades/plastic.dm b/code/game/objects/items/grenades/plastic.dm index c1cf8c1010d86..336c9e5e2eea7 100644 --- a/code/game/objects/items/grenades/plastic.dm +++ b/code/game/objects/items/grenades/plastic.dm @@ -105,58 +105,56 @@ det_time = newtime to_chat(user, "Timer set for [det_time] seconds.") -/obj/item/grenade/c4/afterattack(atom/movable/bomb_target, mob/user, flag) - . = ..() - aim_dir = get_dir(user, bomb_target) - if(isdead(bomb_target)) - return - if(!flag) - return - - . |= AFTERATTACK_PROCESSED_ITEM - +/obj/item/grenade/c4/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + // Here lies C4 ghosts. We hardly knew ye + if(isdead(interacting_with)) + return NONE + aim_dir = get_dir(user, interacting_with) + return plant_c4(interacting_with, user) ? ITEM_INTERACT_SUCCESS : ITEM_INTERACT_BLOCKING + +/obj/item/grenade/c4/proc/plant_c4(atom/bomb_target, mob/living/user) if(bomb_target != user && HAS_TRAIT(user, TRAIT_PACIFISM) && isliving(bomb_target)) to_chat(user, span_warning("You don't want to harm other living beings!")) - return . + return FALSE to_chat(user, span_notice("You start planting [src]. The timer is set to [det_time]...")) - if(do_after(user, 3 SECONDS, target = bomb_target)) - if(!user.temporarilyRemoveItemFromInventory(src)) - return . - target = bomb_target - active = TRUE - - message_admins("[ADMIN_LOOKUPFLW(user)] planted [name] on [target.name] at [ADMIN_VERBOSEJMP(target)] with [det_time] second fuse") - user.log_message("planted [name] on [target.name] with a [det_time] second fuse.", LOG_ATTACK) - var/icon/target_icon = icon(bomb_target.icon, bomb_target.icon_state) - target_icon.Blend(icon(icon, icon_state), ICON_OVERLAY) - var/mutable_appearance/bomb_target_image = mutable_appearance(target_icon) - notify_ghosts( - "[user] has planted \a [src] on [target] with a [det_time] second fuse!", - source = bomb_target, - header = "Explosive Planted", - alert_overlay = bomb_target_image, - notify_flags = NOTIFY_CATEGORY_NOFLASH, - ) - - moveToNullspace() //Yep - - if(isitem(bomb_target)) //your crappy throwing star can't fly so good with a giant brick of c4 on it. - var/obj/item/thrown_weapon = bomb_target - thrown_weapon.throw_speed = max(1, (thrown_weapon.throw_speed - 3)) - thrown_weapon.throw_range = max(1, (thrown_weapon.throw_range - 3)) - if(thrown_weapon.embedding) - thrown_weapon.embedding["embed_chance"] = 0 - thrown_weapon.updateEmbedding() - else if(isliving(bomb_target)) - plastic_overlay.layer = FLOAT_LAYER - - target.add_overlay(plastic_overlay) - to_chat(user, span_notice("You plant the bomb. Timer counting down from [det_time].")) - addtimer(CALLBACK(src, PROC_REF(detonate)), det_time*10) - - return . + if(!do_after(user, 3 SECONDS, target = bomb_target)) + return FALSE + if(!user.temporarilyRemoveItemFromInventory(src)) + return FALSE + target = bomb_target + active = TRUE + + message_admins("[ADMIN_LOOKUPFLW(user)] planted [name] on [target.name] at [ADMIN_VERBOSEJMP(target)] with [det_time] second fuse") + user.log_message("planted [name] on [target.name] with a [det_time] second fuse.", LOG_ATTACK) + var/icon/target_icon = icon(bomb_target.icon, bomb_target.icon_state) + target_icon.Blend(icon(icon, icon_state), ICON_OVERLAY) + var/mutable_appearance/bomb_target_image = mutable_appearance(target_icon) + notify_ghosts( + "[user] has planted \a [src] on [target] with a [det_time] second fuse!", + source = bomb_target, + header = "Explosive Planted", + alert_overlay = bomb_target_image, + notify_flags = NOTIFY_CATEGORY_NOFLASH, + ) + + moveToNullspace() //Yep + + if(isitem(bomb_target)) //your crappy throwing star can't fly so good with a giant brick of c4 on it. + var/obj/item/thrown_weapon = bomb_target + thrown_weapon.throw_speed = max(1, (thrown_weapon.throw_speed - 3)) + thrown_weapon.throw_range = max(1, (thrown_weapon.throw_range - 3)) + if(thrown_weapon.embedding) + thrown_weapon.embedding["embed_chance"] = 0 + thrown_weapon.updateEmbedding() + else if(isliving(bomb_target)) + plastic_overlay.layer = FLOAT_LAYER + + target.add_overlay(plastic_overlay) + to_chat(user, span_notice("You plant the bomb. Timer counting down from [det_time].")) + addtimer(CALLBACK(src, PROC_REF(detonate)), det_time*10) + return TRUE /obj/item/grenade/c4/proc/shout_syndicate_crap(mob/player) if(!player) diff --git a/code/game/objects/items/hand_items.dm b/code/game/objects/items/hand_items.dm index 57c240e427327..371ecee6ff803 100644 --- a/code/game/objects/items/hand_items.dm +++ b/code/game/objects/items/hand_items.dm @@ -475,9 +475,10 @@ /// TRUE if the user was aiming anywhere but the mouth when they offer the kiss, if it's offered var/cheek_kiss -/obj/item/hand_item/kisser/afterattack(atom/target, mob/user, proximity_flag, click_parameters) - . = ..() - . |= AFTERATTACK_PROCESSED_ITEM +/obj/item/hand_item/kisser/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + return ranged_interact_with_atom(interacting_with, user, modifiers) + +/obj/item/hand_item/kisser/ranged_interact_with_atom(atom/target, mob/living/user, list/modifiers) if(HAS_TRAIT(user, TRAIT_GARLIC_BREATH)) kiss_type = /obj/projectile/kiss/french @@ -491,10 +492,11 @@ blown_kiss.original = target blown_kiss.fired_from = user blown_kiss.firer = user // don't hit ourself that would be really annoying - blown_kiss.impacted = list(user = TRUE) // just to make sure we don't hit the wearer + blown_kiss.impacted = list(WEAKREF(user) = TRUE) // just to make sure we don't hit the wearer blown_kiss.preparePixelProjectile(target, user) blown_kiss.fire() qdel(src) + return ITEM_INTERACT_SUCCESS /obj/item/hand_item/kisser/on_offered(mob/living/carbon/offerer, mob/living/carbon/offered) if(!(locate(/mob/living/carbon) in orange(1, offerer))) @@ -517,7 +519,7 @@ blown_kiss.original = taker blown_kiss.fired_from = offerer blown_kiss.firer = offerer // don't hit ourself that would be really annoying - blown_kiss.impacted = list(offerer = TRUE) // just to make sure we don't hit the wearer + blown_kiss.impacted = list(WEAKREF(offerer) = TRUE) // just to make sure we don't hit the wearer blown_kiss.preparePixelProjectile(taker, offerer) blown_kiss.suppressed = SUPPRESSED_VERY // this also means it's a direct offer blown_kiss.fire() diff --git a/code/game/objects/items/handcuffs.dm b/code/game/objects/items/handcuffs.dm index 192842e6447b9..5b74053299931 100644 --- a/code/game/objects/items/handcuffs.dm +++ b/code/game/objects/items/handcuffs.dm @@ -11,7 +11,7 @@ /obj/item/restraints breakouttime = 1 MINUTES dye_color = DYE_PRISONER - icon = 'icons/obj/restraints.dmi' + icon = 'icons/obj/weapons/restraints.dmi' /obj/item/restraints/suicide_act(mob/living/carbon/user) user.visible_message(span_suicide("[user] is strangling [user.p_them()]self with [src]! It looks like [user.p_theyre()] trying to commit suicide!")) @@ -451,7 +451,7 @@ * Does not trigger on tiny mobs. * If ignore_movetypes is FALSE, does not trigger on floating / flying / etc. mobs. */ -/obj/item/restraints/legcuffs/beartrap/proc/spring_trap(atom/movable/target, ignore_movetypes = FALSE) +/obj/item/restraints/legcuffs/beartrap/proc/spring_trap(atom/movable/target, ignore_movetypes = FALSE, hit_prone = FALSE) if(!armed || !isturf(loc) || !isliving(target)) return @@ -477,7 +477,7 @@ victim.visible_message(span_danger("[victim] triggers \the [src]."), \ span_userdanger("You trigger \the [src]!")) var/def_zone = BODY_ZONE_CHEST - if(iscarbon(victim) && victim.body_position == STANDING_UP) + if(iscarbon(victim) && (victim.body_position == STANDING_UP || hit_prone)) var/mob/living/carbon/carbon_victim = victim def_zone = pick(BODY_ZONE_L_LEG, BODY_ZONE_R_LEG) if(!carbon_victim.legcuffed && carbon_victim.num_legs >= 2) //beartrap can't cuff your leg if there's already a beartrap or legcuffs, or you don't have two legs. @@ -523,6 +523,7 @@ /obj/item/restraints/legcuffs/beartrap/energy/cyborg breakouttime = 2 SECONDS // Cyborgs shouldn't have a strong restraint + slowdown = 3 /obj/item/restraints/legcuffs/bola name = "bola" @@ -536,6 +537,8 @@ gender = NEUTER ///Amount of time to knock the target down for once it's hit in deciseconds. var/knockdown = 0 + ///Reference of the mob we will attempt to snare + var/datum/weakref/ensnare_mob_ref /obj/item/restraints/legcuffs/bola/throw_at(atom/target, range, speed, mob/thrower, spin=1, diagonals_first = 0, datum/callback/callback, gentle = FALSE, quickstart = TRUE) if(!..()) @@ -545,21 +548,32 @@ /obj/item/restraints/legcuffs/bola/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum) if(..() || !iscarbon(hit_atom))//if it gets caught or the target can't be cuffed, return//abort - ensnare(hit_atom) + //The mob has been hit, save the reference for ensnaring + ensnare_mob_ref = WEAKREF(hit_atom) + +/obj/item/restraints/legcuffs/bola/after_throw(datum/callback/callback) + . = ..() + if (isnull(ensnare_mob_ref)) + return + var/atom/ensnare_mob = ensnare_mob_ref.resolve() + if (!isnull(ensnare_mob)) + ensnare(ensnare_mob) + ensnare_mob_ref = null /** * Attempts to legcuff someone with the bola * * Arguments: - * * C - the carbon that we will try to ensnare + * * snared_mob - the carbon that we will try to ensnare */ -/obj/item/restraints/legcuffs/bola/proc/ensnare(mob/living/carbon/C) - if(!C.legcuffed && C.num_legs >= 2) - visible_message(span_danger("\The [src] ensnares [C]!"), span_userdanger("\The [src] ensnares you!")) - C.equip_to_slot(src, ITEM_SLOT_LEGCUFFED) - SSblackbox.record_feedback("tally", "handcuffs", 1, type) - C.Knockdown(knockdown) - playsound(src, 'sound/effects/snap.ogg', 50, TRUE) +/obj/item/restraints/legcuffs/bola/proc/ensnare(mob/living/carbon/snared_mob) + if(snared_mob.legcuffed || snared_mob.num_legs < 2) + return + visible_message(span_danger("\The [src] ensnares [snared_mob]!"), span_userdanger("\The [src] ensnares you!")) + snared_mob.equip_to_slot(src, ITEM_SLOT_LEGCUFFED) + SSblackbox.record_feedback("tally", "handcuffs", 1, type) + snared_mob.Knockdown(knockdown) + playsound(src, 'sound/effects/snap.ogg', 50, TRUE) /** * A traitor variant of the bola. @@ -595,7 +609,9 @@ /obj/item/restraints/legcuffs/bola/energy/ensnare(atom/hit_atom) var/obj/item/restraints/legcuffs/beartrap/energy/cyborg/B = new (get_turf(hit_atom)) - B.spring_trap(hit_atom, ignore_movetypes = TRUE) + B.spring_trap(hit_atom, ignore_movetypes = TRUE, hit_prone = TRUE) + if(B.loc != hit_atom) + qdel(B) qdel(src) /** diff --git a/code/game/objects/items/his_grace.dm b/code/game/objects/items/his_grace.dm index 83af88f003bf1..d1e128c0b5b10 100644 --- a/code/game/objects/items/his_grace.dm +++ b/code/game/objects/items/his_grace.dm @@ -65,8 +65,9 @@ else ..() -/obj/item/his_grace/CtrlClick(mob/user) //you can't pull his grace - return +/obj/item/his_grace/item_ctrl_click(mob/user) + //you can't pull his grace + return NONE /obj/item/his_grace/examine(mob/user) . = ..() diff --git a/code/game/objects/items/holosign_creator.dm b/code/game/objects/items/holosign_creator.dm index b4835a0d565a7..926131151e92b 100644 --- a/code/game/objects/items/holosign_creator.dm +++ b/code/game/objects/items/holosign_creator.dm @@ -26,8 +26,8 @@ AddElement(/datum/element/openspace_item_click_handler) RegisterSignal(src, COMSIG_OBJ_PAINTED, TYPE_PROC_REF(/obj/item/holosign_creator, on_color_change)) -/obj/item/holosign_creator/handle_openspace_click(turf/target, mob/user, proximity_flag, click_parameters) - afterattack(target, user, proximity_flag, click_parameters) +/obj/item/holosign_creator/handle_openspace_click(turf/target, mob/user, list/modifiers) + interact_with_atom(target, user, modifiers) /obj/item/holosign_creator/examine(mob/user) . = ..() @@ -35,39 +35,35 @@ return . += span_notice("It is currently maintaining [signs.len]/[max_signs] projections.") -/obj/item/holosign_creator/afterattack(atom/target, mob/user, proximity_flag) - . = ..() - if(!proximity_flag) - return - . |= AFTERATTACK_PROCESSED_ITEM - if(!check_allowed_items(target, not_inside = TRUE)) - return . - var/turf/target_turf = get_turf(target) +/obj/item/holosign_creator/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + if(!check_allowed_items(interacting_with, not_inside = TRUE)) + return NONE + var/turf/target_turf = get_turf(interacting_with) var/obj/structure/holosign/target_holosign = locate(holosign_type) in target_turf if(target_holosign) qdel(target_holosign) - return . + return ITEM_INTERACT_BLOCKING if(target_turf.is_blocked_turf(TRUE)) //can't put holograms on a tile that has dense stuff - return . + return ITEM_INTERACT_BLOCKING if(holocreator_busy) - to_chat(user, span_notice("[src] is busy creating a hologram.")) - return . + balloon_alert(user, "busy making a hologram!") + return ITEM_INTERACT_BLOCKING if(LAZYLEN(signs) >= max_signs) balloon_alert(user, "max capacity!") - return . - playsound(loc, 'sound/machines/click.ogg', 20, TRUE) + return ITEM_INTERACT_BLOCKING + playsound(src, 'sound/machines/click.ogg', 20, TRUE) if(creation_time) holocreator_busy = TRUE - if(!do_after(user, creation_time, target = target)) + if(!do_after(user, creation_time, target = interacting_with)) holocreator_busy = FALSE - return . + return ITEM_INTERACT_BLOCKING holocreator_busy = FALSE if(LAZYLEN(signs) >= max_signs) - return . + return ITEM_INTERACT_BLOCKING if(target_turf.is_blocked_turf(TRUE)) //don't try to sneak dense stuff on our tile during the wait. - return . - target_holosign = create_holosign(target, user) - return . + return ITEM_INTERACT_BLOCKING + target_holosign = create_holosign(interacting_with, user) + return ITEM_INTERACT_SUCCESS /obj/item/holosign_creator/attack(mob/living/carbon/human/M, mob/user) return diff --git a/code/game/objects/items/hot_potato.dm b/code/game/objects/items/hot_potato.dm index 9a7da338885d9..20233db522b39 100644 --- a/code/game/objects/items/hot_potato.dm +++ b/code/game/objects/items/hot_potato.dm @@ -95,11 +95,12 @@ if(active) to_chat(user, span_userdanger("You have a really bad feeling about [src]!")) -/obj/item/hot_potato/afterattack(atom/target, mob/user, adjacent, params) +/obj/item/hot_potato/attack(mob/living/target_mob, mob/living/user, params) . = ..() - if(!adjacent || !ismob(target)) - return - force_onto(target, user) + if(.) + return . + + return force_onto(target_mob, user) /obj/item/hot_potato/proc/force_onto(mob/living/victim, mob/user) if(!istype(victim) || user != loc || victim == user) diff --git a/code/game/objects/items/implants/implantcase.dm b/code/game/objects/items/implants/implantcase.dm index 2695529593f89..ffef74de3c1cc 100644 --- a/code/game/objects/items/implants/implantcase.dm +++ b/code/game/objects/items/implants/implantcase.dm @@ -36,7 +36,7 @@ return ..() /obj/item/implantcase/attackby(obj/item/used_item, mob/living/user, params) - if(istype(used_item, /obj/item/pen)) + if(IS_WRITING_UTENSIL(used_item)) if(!user.can_write(used_item)) return var/new_name = tgui_input_text(user, "What would you like the label to be?", name, max_length = MAX_NAME_LEN) diff --git a/code/game/objects/items/implants/implantchair.dm b/code/game/objects/items/implants/implantchair.dm index d76bd363e664c..5f833e3264875 100644 --- a/code/game/objects/items/implants/implantchair.dm +++ b/code/game/objects/items/implants/implantchair.dm @@ -5,6 +5,7 @@ icon_state = "implantchair" density = TRUE opacity = FALSE + interaction_flags_mouse_drop = NEED_DEXTERITY var/ready = TRUE var/replenishing = FALSE @@ -142,17 +143,11 @@ message_cooldown = world.time + 50 to_chat(user, span_warning("[src]'s door won't budge!")) - -/obj/machinery/implantchair/MouseDrop_T(mob/target, mob/user) - if(user.stat || !Adjacent(user) || !user.Adjacent(target) || !isliving(target) || !ISADVANCEDTOOLUSER(user)) +/obj/machinery/implantchair/mouse_drop_receive(mob/target, mob/user, params) + if(!isliving(target)) return - if(isliving(user)) - var/mob/living/L = user - if(L.body_position == LYING_DOWN) - return close_machine(target) - /obj/machinery/implantchair/close_machine(mob/living/user, density_to_set = TRUE) if((isnull(user) || istype(user)) && state_open) ..(user) diff --git a/code/game/objects/items/implants/implanter.dm b/code/game/objects/items/implants/implanter.dm index a5242e292a13e..1f462527d530f 100644 --- a/code/game/objects/items/implants/implanter.dm +++ b/code/game/objects/items/implants/implanter.dm @@ -45,7 +45,7 @@ to_chat(user, span_warning("[src] fails to implant [target].")) /obj/item/implanter/attackby(obj/item/I, mob/living/user, params) - if(!istype(I, /obj/item/pen)) + if(IS_WRITING_UTENSIL(I)) return ..() if(!user.can_write(I)) return diff --git a/code/game/objects/items/implants/security/implant_chem.dm b/code/game/objects/items/implants/security/implant_chem.dm index bad6cca8c694c..c25496c634bb0 100644 --- a/code/game/objects/items/implants/security/implant_chem.dm +++ b/code/game/objects/items/implants/security/implant_chem.dm @@ -97,7 +97,7 @@ /obj/item/implantcase/chem/attackby(obj/item/W, mob/user, params) if(istype(W, /obj/item/reagent_containers/syringe) && imp) - W.afterattack(imp, user, TRUE, params) + W.interact_with_atom(imp, user, params) return TRUE else return ..() diff --git a/code/game/objects/items/inducer.dm b/code/game/objects/items/inducer.dm index 086b965e1ac41..d74bb7aa8d10e 100644 --- a/code/game/objects/items/inducer.dm +++ b/code/game/objects/items/inducer.dm @@ -1,26 +1,28 @@ /obj/item/inducer name = "inducer" - desc = "A tool for inductively charging internal power cells." + desc = "A tool for inductively charging internal power cells and batteries." icon = 'icons/obj/tools.dmi' icon_state = "inducer-engi" inhand_icon_state = "inducer-engi" lefthand_file = 'icons/mob/inhands/equipment/tools_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/tools_righthand.dmi' force = 7 - var/powertransfer = STANDARD_CELL_CHARGE + /// Multiplier that determines the speed at which this inducer works at. + var/power_transfer_multiplier = 1 var/opened = FALSE - var/cell_type = /obj/item/stock_parts/cell/high - var/obj/item/stock_parts/cell/cell + var/cell_type = /obj/item/stock_parts/power_store/battery/high + var/obj/item/stock_parts/power_store/powerdevice var/recharging = FALSE /obj/item/inducer/Initialize(mapload) . = ..() - if(!cell && cell_type) - cell = new cell_type + if(!powerdevice && cell_type) + powerdevice = new cell_type -/obj/item/inducer/proc/induce(obj/item/stock_parts/cell/target, coefficient) - var/obj/item/stock_parts/cell/our_cell = get_cell() - var/totransfer = min(our_cell.charge, (powertransfer * coefficient)) +/obj/item/inducer/proc/induce(obj/item/stock_parts/power_store/target, coefficient) + var/obj/item/stock_parts/power_store/our_cell = get_cell() + var/rating_base = target.rating_base + var/totransfer = min(our_cell.charge, (rating_base * coefficient * power_transfer_multiplier)) var/transferred = target.give(totransfer) our_cell.use(transferred) @@ -28,11 +30,11 @@ target.update_appearance() /obj/item/inducer/get_cell() - return cell + return powerdevice /obj/item/inducer/emp_act(severity) . = ..() - var/obj/item/stock_parts/cell/our_cell = get_cell() + var/obj/item/stock_parts/power_store/our_cell = get_cell() if(!isnull(our_cell) && !(. & EMP_PROTECT_CONTENTS)) our_cell.emp_act(severity) @@ -53,7 +55,7 @@ to_chat(user, span_warning("You don't have the dexterity to use [src]!")) return TRUE - var/obj/item/stock_parts/cell/our_cell = get_cell() + var/obj/item/stock_parts/power_store/our_cell = get_cell() if(isnull(our_cell)) balloon_alert(user, "no cell installed!") @@ -79,14 +81,14 @@ return /obj/item/inducer/attackby(obj/item/used_item, mob/user) - if(istype(used_item, /obj/item/stock_parts/cell)) + if(istype(used_item, /obj/item/stock_parts/power_store)) if(opened) - var/obj/item/stock_parts/cell/our_cell = get_cell() + var/obj/item/stock_parts/power_store/our_cell = get_cell() if(isnull(our_cell)) if(!user.transferItemToLoc(used_item, src)) return to_chat(user, span_notice("You insert [used_item] into [src].")) - cell = used_item + powerdevice = used_item update_appearance() return else @@ -108,8 +110,8 @@ return TRUE recharging = TRUE - var/obj/item/stock_parts/cell/our_cell = get_cell() - var/obj/item/stock_parts/cell/target_cell = target.get_cell() + var/obj/item/stock_parts/power_store/our_cell = get_cell() + var/obj/item/stock_parts/power_store/target_cell = target.get_cell() var/obj/target_as_object = target var/coefficient = 1 @@ -156,17 +158,17 @@ /obj/item/inducer/attack_self(mob/user) - if(opened && cell) - user.visible_message(span_notice("[user] removes [cell] from [src]!"), span_notice("You remove [cell].")) - cell.update_appearance() - user.put_in_hands(cell) - cell = null + if(opened && powerdevice) + user.visible_message(span_notice("[user] removes [powerdevice] from [src]!"), span_notice("You remove [powerdevice].")) + powerdevice.update_appearance() + user.put_in_hands(powerdevice) + powerdevice = null update_appearance() /obj/item/inducer/examine(mob/living/user) . = ..() - var/obj/item/stock_parts/cell/our_cell = get_cell() + var/obj/item/stock_parts/power_store/our_cell = get_cell() if(!isnull(our_cell)) . += span_notice("Its display shows: [display_energy(our_cell.charge)].") else @@ -185,7 +187,7 @@ opened = TRUE /obj/item/inducer/orderable - cell_type = /obj/item/stock_parts/cell/inducer_supply + cell_type = /obj/item/stock_parts/power_store/cell/inducer_supply opened = FALSE /obj/item/inducer/sci @@ -203,5 +205,5 @@ icon_state = "inducer-syndi" inhand_icon_state = "inducer-syndi" desc = "A tool for inductively charging internal power cells. This one has a suspicious colour scheme, and seems to be rigged to transfer charge at a much faster rate." - powertransfer = 2 * STANDARD_CELL_CHARGE - cell_type = /obj/item/stock_parts/cell/super + power_transfer_multiplier = 2 // 2x the base speed + cell_type = /obj/item/stock_parts/power_store/cell/super diff --git a/code/game/objects/items/inspector.dm b/code/game/objects/items/inspector.dm index ab5db9b65ce9c..82a36336c42b9 100644 --- a/code/game/objects/items/inspector.dm +++ b/code/game/objects/items/inspector.dm @@ -17,6 +17,7 @@ righthand_file = 'icons/mob/inhands/items/devices_righthand.dmi' throwforce = 0 w_class = WEIGHT_CLASS_TINY + interaction_flags_click = NEED_DEXTERITY throw_range = 1 throw_speed = 1 ///How long it takes to print on time each mode, ordered NORMAL, FAST, HONK @@ -26,7 +27,7 @@ ///determines the sound that plays when printing a report var/print_sound_mode = INSPECTOR_PRINT_SOUND_MODE_NORMAL ///Power cell used to power the scanner. Paths g - var/obj/item/stock_parts/cell/cell = /obj/item/stock_parts/cell/crap + var/obj/item/stock_parts/power_store/cell = /obj/item/stock_parts/power_store/cell/crap ///Cell cover status var/cell_cover_open = FALSE ///Energy used per print. @@ -61,7 +62,7 @@ return TRUE /obj/item/inspector/attackby(obj/item/I, mob/user, params) - if(cell_cover_open && istype(I, /obj/item/stock_parts/cell)) + if(cell_cover_open && istype(I, /obj/item/stock_parts/power_store/cell)) if(cell) to_chat(user, span_warning("[src] already has a cell installed.")) return @@ -71,14 +72,15 @@ return return ..() -/obj/item/inspector/CtrlClick(mob/living/user) - if(!user.can_perform_action(src, NEED_DEXTERITY) || !cell_cover_open || !cell) - return ..() +/obj/item/inspector/item_ctrl_click(mob/user) + if(!cell_cover_open || !cell) + return CLICK_ACTION_BLOCKING user.visible_message(span_notice("[user] removes \the [cell] from [src]!"), \ span_notice("You remove [cell].")) cell.add_fingerprint(user) user.put_in_hands(cell) cell = null + return CLICK_ACTION_SUCCESS /obj/item/inspector/examine(mob/user) . = ..() diff --git a/code/game/objects/items/knives.dm b/code/game/objects/items/knives.dm index 8b4808848c245..1aa09dbfe68e5 100644 --- a/code/game/objects/items/knives.dm +++ b/code/game/objects/items/knives.dm @@ -21,7 +21,6 @@ attack_verb_simple = list("slash", "stab", "slice", "tear", "lacerate", "rip", "dice", "cut") sharpness = SHARP_EDGED armor_type = /datum/armor/item_knife - var/bayonet = FALSE //Can this be attached to a gun? wound_bonus = 5 bare_wound_bonus = 15 tool_behaviour = TOOL_KNIFE @@ -77,9 +76,8 @@ /// Bleed stacks applied when an organic mob target is hit var/bleed_stacks_per_hit = 3 -/obj/item/knife/bloodletter/afterattack(atom/target, mob/user, proximity_flag, click_parameters) - . = ..() - if(!isliving(target) || !proximity_flag) +/obj/item/knife/bloodletter/afterattack(atom/target, mob/user, click_parameters) + if(!isliving(target)) return var/mob/living/M = target if(!(M.mob_biotypes & MOB_ORGANIC)) @@ -131,7 +129,6 @@ throwforce = 20 attack_verb_continuous = list("slashes", "stabs", "slices", "tears", "lacerates", "rips", "cuts") attack_verb_simple = list("slash", "stab", "slice", "tear", "lacerate", "rip", "cut") - bayonet = TRUE slot_flags = ITEM_SLOT_MASK /obj/item/knife/combat/Initialize(mapload) @@ -162,7 +159,6 @@ desc = "A hunting grade survival knife." force = 15 throwforce = 15 - bayonet = TRUE /obj/item/knife/combat/bone name = "bone dagger" diff --git a/code/game/objects/items/machine_wand.dm b/code/game/objects/items/machine_wand.dm index 7ce94b9ad409a..fd0c730fff811 100644 --- a/code/game/objects/items/machine_wand.dm +++ b/code/game/objects/items/machine_wand.dm @@ -73,19 +73,22 @@ remove_old_machine() return CLICK_ACTION_SUCCESS -/obj/item/machine_remote/afterattack(atom/target, mob/user, proximity_flag, click_parameters) - . = ..() +/obj/item/machine_remote/ranged_interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + return interact_with_atom(interacting_with, user, modifiers) + +/obj/item/machine_remote/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) if(!COOLDOWN_FINISHED(src, timeout_time)) playsound(src, 'sound/machines/synth_no.ogg', 30 , TRUE) say("Remote control disabled temporarily. Please try again soon.") - return FALSE - if(!ismachinery(target) && !isbot(target)) - return + return ITEM_INTERACT_BLOCKING + if(!ismachinery(interacting_with) && !isbot(interacting_with)) + return NONE if(moving_bug) //we have a bug in transit already, so let's kill it. QDEL_NULL(moving_bug) var/turf/spawning_turf = (controlling_machine_or_bot ? get_turf(controlling_machine_or_bot) : get_turf(src)) - moving_bug = new(spawning_turf, src, target) + moving_bug = new(spawning_turf, src, interacting_with) remove_old_machine() + return ITEM_INTERACT_SUCCESS ///Sets a controlled machine to a new machine, if possible. Checks if AIs can even control it. /obj/item/machine_remote/proc/set_controlled_machine(obj/machinery/new_machine) @@ -150,7 +153,7 @@ CRASH("a moving bug has been created but isn't moving towards anything!") src.controller = controller src.thing_moving_towards = thing_moving_towards - var/datum/move_loop/loop = DSmove_manager.home_onto(src, thing_moving_towards, delay = 5, flags = MOVEMENT_LOOP_NO_DIR_UPDATE) + var/datum/move_loop/loop = GLOB.move_manager.home_onto(src, thing_moving_towards, delay = 5, flags = MOVEMENT_LOOP_NO_DIR_UPDATE) RegisterSignal(loop, COMSIG_MOVELOOP_POSTPROCESS, PROC_REF(reached_destination_check)) RegisterSignal(thing_moving_towards, COMSIG_QDELETING, PROC_REF(on_machine_del)) diff --git a/code/game/objects/items/mail.dm b/code/game/objects/items/mail.dm index 4a3de80959f53..2aec478162445 100644 --- a/code/game/objects/items/mail.dm +++ b/code/game/objects/items/mail.dm @@ -488,7 +488,7 @@ /obj/item/storage/mail_counterfeit_device name = "GLA-2 mail counterfeit device" - desc = "Device that actually able to counterfeit NT's mail. This device also able to place a trap inside of mail for malicious actions. Trap will \"activate\" any item inside of mail. Also it might be used for contraband purposes. Integrated micro-computer will give you great configuration optionality for your needs." + desc = "A single-use device for spoofing official NT envelopes. Can hold one normal sized object, and can be programmed to arm its contents when opened." w_class = WEIGHT_CLASS_NORMAL icon = 'icons/obj/antags/syndicate_tools.dmi' icon_state = "mail_counterfeit_device" @@ -501,7 +501,7 @@ /obj/item/storage/mail_counterfeit_device/examine_more(mob/user) . = ..() - . += span_notice("You notice the manufacture marking on the side of the device...") + . += span_notice("You notice the manufacturer information on the side of the device...") . += "\t[span_info("Guerilla Letter Assembler")]" . += "\t[span_info("GLA Postal Service, right on schedule.")]" return . diff --git a/code/game/objects/items/maintenance_loot.dm b/code/game/objects/items/maintenance_loot.dm index f6d7fd1c3290d..51a272509969c 100644 --- a/code/game/objects/items/maintenance_loot.dm +++ b/code/game/objects/items/maintenance_loot.dm @@ -23,14 +23,14 @@ //A good battery early in the shift. Source of lead & sulfuric acid reagents. //Add lead material to this once implemented. -/obj/item/stock_parts/cell/lead +/obj/item/stock_parts/power_store/cell/lead name = "lead-acid battery" desc = "A primitive battery. It is quite large and feels unexpectedly heavy." icon = 'icons/obj/maintenance_loot.dmi' icon_state = "lead_battery" throwforce = 10 - maxcharge = STANDARD_CELL_CHARGE * 20 //decent max charge - chargerate = STANDARD_CELL_RATE * 0.7 //charging is about 30% less efficient than lithium batteries. + maxcharge = STANDARD_BATTERY_VALUE //decent max charge + chargerate = STANDARD_BATTERY_RATE * 0.3 //charging is about 70% less efficient than lithium batteries. charge_light_type = null connector_type = "leadacid" rating = 2 //Kind of a mid-tier battery @@ -38,8 +38,9 @@ grind_results = list(/datum/reagent/lead = 15, /datum/reagent/toxin/acid = 15, /datum/reagent/water = 20) //starts partially discharged -/obj/item/stock_parts/cell/lead/Initialize(mapload) +/obj/item/stock_parts/power_store/cell/lead/Initialize(mapload) AddElement(/datum/element/update_icon_blocker) . = ..() var/initial_percent = rand(20, 80) / 100 charge = initial_percent * maxcharge + ADD_TRAIT(src, TRAIT_FISHING_BAIT, INNATE_TRAIT) diff --git a/code/game/objects/items/melee/baton.dm b/code/game/objects/items/melee/baton.dm index b576ef5d41c33..eca126fc6aee0 100644 --- a/code/game/objects/items/melee/baton.dm +++ b/code/game/objects/items/melee/baton.dm @@ -212,6 +212,7 @@ if(!trait_check) target.Knockdown((isnull(stun_override) ? knockdown_time : stun_override)) additional_effects_non_cyborg(target, user) + SEND_SIGNAL(target, COMSIG_MOB_BATONED, user, src) return TRUE /// Description for trying to stun when still on cooldown. @@ -434,7 +435,7 @@ var/throw_stun_chance = 35 - var/obj/item/stock_parts/cell/cell + var/obj/item/stock_parts/power_store/cell var/preload_cell_type //if not empty the baton starts with this type of cell var/cell_hit_cost = STANDARD_CELL_CHARGE var/can_remove_cell = TRUE @@ -448,7 +449,7 @@ /obj/item/melee/baton/security/Initialize(mapload) . = ..() if(preload_cell_type) - if(!ispath(preload_cell_type, /obj/item/stock_parts/cell)) + if(!ispath(preload_cell_type, /obj/item/stock_parts/power_store/cell)) log_mapping("[src] at [AREACOORD(src)] had an invalid preload_cell_type: [preload_cell_type].") else cell = new preload_cell_type(src) @@ -527,8 +528,8 @@ return TRUE /obj/item/melee/baton/security/attackby(obj/item/item, mob/user, params) - if(istype(item, /obj/item/stock_parts/cell)) - var/obj/item/stock_parts/cell/active_cell = item + if(istype(item, /obj/item/stock_parts/power_store/cell)) + var/obj/item/stock_parts/power_store/cell/active_cell = item if(cell) to_chat(user, span_warning("[src] already has a cell!")) else @@ -677,7 +678,7 @@ update_appearance() /obj/item/melee/baton/security/loaded //this one starts with a cell pre-installed. - preload_cell_type = /obj/item/stock_parts/cell/high + preload_cell_type = /obj/item/stock_parts/power_store/cell/high //Makeshift stun baton. Replacement for stun gloves. /obj/item/melee/baton/security/cattleprod @@ -775,7 +776,7 @@ finalize_baton_attack(hit_atom, thrown_by, in_attack_chain = FALSE) /obj/item/melee/baton/security/boomerang/loaded //Same as above, comes with a cell. - preload_cell_type = /obj/item/stock_parts/cell/high + preload_cell_type = /obj/item/stock_parts/power_store/cell/high /obj/item/melee/baton/security/cattleprod/teleprod name = "teleprod" diff --git a/code/game/objects/items/melee/energy.dm b/code/game/objects/items/melee/energy.dm index 440b2b740372f..228f359729c31 100644 --- a/code/game/objects/items/melee/energy.dm +++ b/code/game/objects/items/melee/energy.dm @@ -210,7 +210,7 @@ if(!user.cell) return - var/obj/item/stock_parts/cell/our_cell = user.cell + var/obj/item/stock_parts/power_store/our_cell = user.cell if(HAS_TRAIT(src, TRAIT_TRANSFORM_ACTIVE) && !(our_cell.use(hitcost))) attack_self(user) to_chat(user, span_notice("It's out of charge!")) diff --git a/code/game/objects/items/melee/misc.dm b/code/game/objects/items/melee/misc.dm index 3310aa11faada..80b1e66b2e3e9 100644 --- a/code/game/objects/items/melee/misc.dm +++ b/code/game/objects/items/melee/misc.dm @@ -60,8 +60,7 @@ inhand_icon_state = "sabre" lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi' righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi' - obj_flags = CONDUCTS_ELECTRICITY - obj_flags = UNIQUE_RENAME + obj_flags = CONDUCTS_ELECTRICITY | UNIQUE_RENAME force = 15 throwforce = 10 demolition_mod = 0.75 //but not metal @@ -192,10 +191,7 @@ final_block_chance = 0 //Don't bring a sword to a gunfight, and also you aren't going to really block someone full body tackling you with a sword return ..() -/obj/item/melee/beesword/afterattack(atom/target, mob/user, proximity) - . = ..() - if(!proximity) - return +/obj/item/melee/beesword/afterattack(atom/target, mob/user, click_parameters) if(iscarbon(target)) var/mob/living/carbon/carbon_target = target carbon_target.reagents.add_reagent(/datum/reagent/toxin, 4) @@ -243,20 +239,24 @@ if(!isspaceturf(turf)) consume_turf(turf) -/obj/item/melee/supermatter_sword/afterattack(target, mob/user, proximity_flag) +/obj/item/melee/supermatter_sword/pre_attack(atom/A, mob/living/user, params) . = ..() - if(user && target == user) - user.dropItemToGround(src) - if(proximity_flag) - consume_everything(target) - return . | AFTERATTACK_PROCESSED_ITEM + if(.) + return . + + if(A == user) + user.dropItemToGround(src, TRUE) + else + user.do_attack_animation(A) + consume_everything(A) + return TRUE /obj/item/melee/supermatter_sword/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum) ..() if(ismob(hit_atom)) var/mob/mob = hit_atom if(src.loc == mob) - mob.dropItemToGround(src) + mob.dropItemToGround(src, TRUE) consume_everything(hit_atom) /obj/item/melee/supermatter_sword/pickup(user) @@ -331,9 +331,8 @@ attack_verb_simple = list("flog", "whip", "lash", "discipline") hitsound = 'sound/weapons/whip.ogg' -/obj/item/melee/curator_whip/afterattack(target, mob/user, proximity_flag) - . = ..() - if(ishuman(target) && proximity_flag) +/obj/item/melee/curator_whip/afterattack(atom/target, mob/user, click_parameters) + if(ishuman(target)) var/mob/living/carbon/human/human_target = target human_target.drop_all_held_items() human_target.visible_message(span_danger("[user] disarms [human_target]!"), span_userdanger("[user] disarmed you!")) @@ -428,22 +427,27 @@ held_sausage = null update_appearance() -/obj/item/melee/roastingstick/afterattack(atom/target, mob/user, proximity) - . = ..() +/obj/item/melee/roastingstick/ranged_interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) if (!HAS_TRAIT(src, TRAIT_TRANSFORM_ACTIVE)) - return - if (!is_type_in_typecache(target, ovens)) - return - if (istype(target, /obj/singularity) && get_dist(user, target) < 10) - to_chat(user, span_notice("You send [held_sausage] towards [target].")) + return NONE + if (!is_type_in_typecache(interacting_with, ovens)) + return NONE + if (istype(interacting_with, /obj/singularity) && get_dist(user, interacting_with) < 10) + to_chat(user, span_notice("You send [held_sausage] towards [interacting_with].")) playsound(src, 'sound/items/rped.ogg', 50, TRUE) - beam = user.Beam(target, icon_state = "rped_upgrade", time = 10 SECONDS) - else if (user.Adjacent(target)) - to_chat(user, span_notice("You extend [src] towards [target].")) - playsound(src.loc, 'sound/weapons/batonextend.ogg', 50, TRUE) - else - return - finish_roasting(user, target) + beam = user.Beam(interacting_with, icon_state = "rped_upgrade", time = 10 SECONDS) + return ITEM_INTERACT_SUCCESS + return NONE + +/obj/item/melee/roastingstick/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + if (!HAS_TRAIT(src, TRAIT_TRANSFORM_ACTIVE)) + return NONE + if (!is_type_in_typecache(interacting_with, ovens)) + return NONE + to_chat(user, span_notice("You extend [src] towards [interacting_with].")) + playsound(src, 'sound/weapons/batonextend.ogg', 50, TRUE) + finish_roasting(user, interacting_with) + return ITEM_INTERACT_SUCCESS /obj/item/melee/roastingstick/proc/finish_roasting(user, atom/target) if(do_after(user, 10 SECONDS, target = user)) diff --git a/code/game/objects/items/mop.dm b/code/game/objects/items/mop.dm index 28170bec14010..b2bd6d55d5cee 100644 --- a/code/game/objects/items/mop.dm +++ b/code/game/objects/items/mop.dm @@ -46,11 +46,13 @@ ///Checks whether or not we should clean. /obj/item/mop/proc/should_clean(datum/cleaning_source, atom/atom_to_clean, mob/living/cleaner) if(clean_blacklist[atom_to_clean.type]) - return DO_NOT_CLEAN + return CLEAN_BLOCKED|CLEAN_DONT_BLOCK_INTERACTION if(reagents.total_volume < 0.1) cleaner.balloon_alert(cleaner, "mop is dry!") - return DO_NOT_CLEAN - return reagents.has_reagent(amount = 1, chemical_flags = REAGENT_CLEANS) + return CLEAN_BLOCKED + if(reagents.has_reagent(amount = 1, chemical_flags = REAGENT_CLEANS)) + return CLEAN_ALLOWED + return CLEAN_BLOCKED|CLEAN_NO_XP /** * Applies reagents to the cleaned floor and removes them from the mop. diff --git a/code/game/objects/items/paint.dm b/code/game/objects/items/paint.dm index 0b357c3c728c2..41c1809b5589e 100644 --- a/code/game/objects/items/paint.dm +++ b/code/game/objects/items/paint.dm @@ -112,17 +112,16 @@ return FALSE return TRUE -/obj/item/paint/afterattack(atom/target, mob/user, proximity) - . = ..() - if(!proximity) - return +/obj/item/paint/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + if(!isturf(interacting_with) || isspaceturf(interacting_with)) + return NONE if(paintleft <= 0) - icon_state = "paint_empty" - return - if(!isturf(target) || isspaceturf(target)) - return + return NONE paintleft-- - target.add_atom_colour(paint_color, WASHABLE_COLOUR_PRIORITY) + interacting_with.add_atom_colour(paint_color, WASHABLE_COLOUR_PRIORITY) + if(paintleft <= 0) + icon_state = "paint_empty" + return ITEM_INTERACT_SUCCESS /obj/item/paint/paint_remover gender = PLURAL @@ -130,12 +129,10 @@ desc = "Used to remove color from anything." icon_state = "paint_neutral" -/obj/item/paint/paint_remover/afterattack(atom/target, mob/user, proximity) - . = ..() - if(!proximity) - return - if(!isturf(target) || !isobj(target)) - return - . |= AFTERATTACK_PROCESSED_ITEM - if(target.color != initial(target.color)) - target.remove_atom_colour(WASHABLE_COLOUR_PRIORITY) +/obj/item/paint/paint_remover/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + if(!isturf(interacting_with) || !isobj(interacting_with)) + return NONE + if(interacting_with.color != initial(interacting_with.color)) + interacting_with.remove_atom_colour(WASHABLE_COLOUR_PRIORITY) + return ITEM_INTERACT_SUCCESS + return NONE diff --git a/code/game/objects/items/pet_carrier.dm b/code/game/objects/items/pet_carrier.dm index e30cdaf39df34..2e2e622ff6c1b 100644 --- a/code/game/objects/items/pet_carrier.dm +++ b/code/game/objects/items/pet_carrier.dm @@ -18,6 +18,8 @@ throw_speed = 2 throw_range = 3 custom_materials = list(/datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT * 7.5, /datum/material/glass = SMALL_MATERIAL_AMOUNT) + interaction_flags_mouse_drop = NEED_DEXTERITY + var/open = TRUE var/locked = FALSE var/list/occupants = list() @@ -153,10 +155,9 @@ if(!open) . += "[base_icon_state]_[locked ? "" : "un"]locked" -/obj/item/pet_carrier/MouseDrop(atom/over_atom) - . = ..() - if(isopenturf(over_atom) && usr.can_perform_action(src, NEED_DEXTERITY) && usr.Adjacent(over_atom) && open && occupants.len) - usr.visible_message(span_notice("[usr] unloads [src]."), \ +/obj/item/pet_carrier/mouse_drop_dragged(atom/over_atom, mob/user, src_location, over_location, params) + if(isopenturf(over_atom) && open && occupants.len) + user.visible_message(span_notice("[user] unloads [src]."), \ span_notice("You unload [src] onto [over_atom].")) for(var/V in occupants) remove_occupant(V, over_atom) diff --git a/code/game/objects/items/pillow.dm b/code/game/objects/items/pillow.dm index 659cc38f58b5a..f1c96e2baa091 100644 --- a/code/game/objects/items/pillow.dm +++ b/code/game/objects/items/pillow.dm @@ -51,10 +51,10 @@ if(!iscarbon(target_mob)) return if(bricked || HAS_TRAIT(src, TRAIT_WIELDED)) - user.apply_damage(5, STAMINA) // when hitting with such force we should prolly be getting tired too hit_sound = 'sound/items/pillow_hit2.ogg' else hit_sound = 'sound/items/pillow_hit.ogg' + user.apply_damage(5, STAMINA) //Had to be done so one person cannot keep multiple people stam critted last_fighter = user playsound(user, hit_sound, 80) //the basic 50 vol is barely audible diff --git a/code/game/objects/items/pinpointer.dm b/code/game/objects/items/pinpointer.dm index 3a020ec5393ea..5d7fc1957f4f4 100644 --- a/code/game/objects/items/pinpointer.dm +++ b/code/game/objects/items/pinpointer.dm @@ -78,7 +78,7 @@ ///Called by update_icon after sanity. There is a target /obj/item/pinpointer/proc/get_direction_icon(here, there) - if(get_dist_euclidian(here,there) <= minimum_range) + if(get_dist_euclidean(here,there) <= minimum_range) return "pinon[alert ? "alert" : ""]direct[icon_suffix]" else setDir(get_dir(here, there)) diff --git a/code/game/objects/items/plushes.dm b/code/game/objects/items/plushes.dm index 1d5c37ffc2283..35e4c7ff72e9f 100644 --- a/code/game/objects/items/plushes.dm +++ b/code/game/objects/items/plushes.dm @@ -312,6 +312,7 @@ young = TRUE name = "[Mama] Jr" //Icelandic naming convention pending normal_desc = "[src] is a little baby of [maternal_parent] and [paternal_parent]!" //original desc won't be used so the child can have moods + transform *= 0.75 update_desc() Mama.mood_message = pick(Mama.parent_message) @@ -531,6 +532,11 @@ desc = "An adorable stuffed toy that resembles a green lizardperson. This one fills you with nostalgia and soul." greyscale_colors = "#66ff33#000000" +/obj/item/toy/plush/lizard_plushie/greyscale + desc = "An adorable stuffed toy that resembles a lizardperson. This one has been custom made." + greyscale_colors = "#d3d3d3#000000" + flags_1 = IS_PLAYER_COLORABLE_1 + /obj/item/toy/plush/lizard_plushie/space name = "space lizard plushie" desc = "An adorable stuffed toy that resembles a very determined spacefaring lizardperson. To infinity and beyond, little guy." @@ -670,7 +676,7 @@ ) AddElement(/datum/element/connect_loc, loc_connections) -/obj/item/toy/plush/goatplushie/attackby(obj/item/clothing/mask/cigarette/rollie/fat_dart, mob/user, params) +/obj/item/toy/plush/goatplushie/attackby(obj/item/cigarette/rollie/fat_dart, mob/user, params) if(!istype(fat_dart)) return ..() if(splat) diff --git a/code/game/objects/items/pneumaticCannon.dm b/code/game/objects/items/pneumaticCannon.dm index bd31228f2fc92..b49fb7ec26051 100644 --- a/code/game/objects/items/pneumaticCannon.dm +++ b/code/game/objects/items/pneumaticCannon.dm @@ -161,14 +161,15 @@ loadedWeightClass++ return TRUE -/obj/item/pneumatic_cannon/afterattack(atom/target, mob/living/user, flag, params) - . = ..() - if(flag && user.combat_mode)//melee attack - return - if(!istype(user)) - return - Fire(user, target) - return AFTERATTACK_PROCESSED_ITEM +/obj/item/pneumatic_cannon/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + if(user.combat_mode) + return ITEM_INTERACT_SKIP_TO_ATTACK + Fire(user, interacting_with) + return ITEM_INTERACT_SUCCESS + +/obj/item/pneumatic_cannon/ranged_interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + Fire(user, interacting_with) + return ITEM_INTERACT_SUCCESS /obj/item/pneumatic_cannon/proc/Fire(mob/living/user, atom/target) if(!istype(user) && !target) diff --git a/code/game/objects/items/rcd/RCD.dm b/code/game/objects/items/rcd/RCD.dm index 88daf279c590b..cf254e447818d 100644 --- a/code/game/objects/items/rcd/RCD.dm +++ b/code/game/objects/items/rcd/RCD.dm @@ -70,6 +70,7 @@ construction_mode = mode GLOB.rcd_list += src + AddElement(/datum/element/openspace_item_click_handler) /obj/item/construction/rcd/Destroy() QDEL_NULL(airlock_electronics) @@ -254,7 +255,7 @@ if(ranged) var/atom/beam_source = owner ? owner : user beam = beam_source.Beam(target, icon_state = "rped_upgrade", time = delay) - if(delay && !do_after(user, delay, target = target)) // no need for do_after with no delay + if(!build_delay(user, delay, target = target)) // no need for do_after with no delay qdel(rcd_effect) if(!isnull(beam)) qdel(beam) @@ -379,6 +380,7 @@ construction_mode = mode rcd_design_path = design["[RCD_DESIGN_PATH]"] design_title = initial(rcd_design_path.name) + blueprint_changed = TRUE else airlock_electronics.do_action(action, params) @@ -389,29 +391,38 @@ . = ..() ui_interact(user) -/obj/item/construction/rcd/afterattack(atom/target, mob/user, proximity_flag, click_parameters) +/obj/item/construction/rcd/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) . = ..() - //proximity check for normal rcd & range check for arcd - if((!proximity_flag && !ranged) || (ranged && !range_check(target, user))) - return FALSE + if(. & ITEM_INTERACT_ANY_BLOCKER) + return . - //do the work mode = construction_mode - rcd_create(target, user) + rcd_create(interacting_with, user) + return ITEM_INTERACT_SUCCESS - return . | AFTERATTACK_PROCESSED_ITEM +/obj/item/construction/rcd/ranged_interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + if(!ranged || !range_check(interacting_with, user)) + return ITEM_INTERACT_BLOCKING -/obj/item/construction/rcd/afterattack_secondary(atom/target, mob/user, proximity_flag, click_parameters) - . = ..() - //proximity check for normal rcd & range check for arcd - if((!proximity_flag && !ranged) || (ranged && !range_check(target, user))) - return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN + mode = construction_mode + rcd_create(interacting_with, user) + return ITEM_INTERACT_SUCCESS + +/obj/item/construction/rcd/interact_with_atom_secondary(atom/interacting_with, mob/living/user, list/modifiers) + mode = RCD_DECONSTRUCT + rcd_create(interacting_with, user) + return ITEM_INTERACT_SUCCESS + +/obj/item/construction/rcd/ranged_interact_with_atom_secondary(atom/interacting_with, mob/living/user, list/modifiers) + if(!ranged || !range_check(interacting_with, user)) + return ITEM_INTERACT_BLOCKING - //do the work mode = RCD_DECONSTRUCT - rcd_create(target, user) + rcd_create(interacting_with, user) + return ITEM_INTERACT_SUCCESS - return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN +/obj/item/construction/rcd/handle_openspace_click(turf/target, mob/user, list/modifiers) + interact_with_atom(target, user, modifiers) /obj/item/construction/rcd/proc/detonate_pulse() audible_message("[src] begins to vibrate and \ @@ -506,6 +517,7 @@ max_matter = INFINITY matter = INFINITY upgrade = RCD_ALL_UPGRADES & ~RCD_UPGRADE_SILO_LINK + delay_mod = 0.1 // Ranged RCD /obj/item/construction/rcd/arcd diff --git a/code/game/objects/items/rcd/RHD.dm b/code/game/objects/items/rcd/RHD.dm index 9151c85ed0311..64179a81b5fb4 100644 --- a/code/game/objects/items/rcd/RHD.dm +++ b/code/game/objects/items/rcd/RHD.dm @@ -37,6 +37,8 @@ var/datum/component/remote_materials/silo_mats /// switch to use internal or remote storage var/silo_link = FALSE + /// has the blueprint design changed + var/blueprint_changed = FALSE /datum/armor/item_construction fire = 100 @@ -51,6 +53,18 @@ silo_mats = AddComponent(/datum/component/remote_materials, mapload, FALSE) update_appearance() +///An do_after() specially designed for rhd devices +/obj/item/construction/proc/build_delay(mob/user, delay, atom/target) + if(delay <= 0) + return TRUE + + blueprint_changed = FALSE + + return do_after(user, delay, target, extra_checks = CALLBACK(src, PROC_REF(blueprint_change))) + +/obj/item/construction/proc/blueprint_change() + return !blueprint_changed + ///used for examining the RCD and for its UI /obj/item/construction/proc/get_silo_iron() if(silo_link && silo_mats.mat_container && !silo_mats.on_hold()) @@ -75,20 +89,22 @@ silo_mats = null return ..() -/obj/item/construction/pre_attack(atom/target, mob/user, params) - if(istype(target, /obj/item/rcd_upgrade)) - install_upgrade(target, user) - return TRUE - if(insert_matter(target, user)) - return TRUE +/obj/item/construction/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + SHOULD_CALL_PARENT(TRUE) + if(istype(interacting_with, /obj/item/rcd_upgrade)) + install_upgrade(interacting_with, user) + return ITEM_INTERACT_SUCCESS + if(insert_matter(interacting_with, user)) + return ITEM_INTERACT_SUCCESS return ..() -/obj/item/construction/attackby(obj/item/item, mob/user, params) - if(istype(item, /obj/item/rcd_upgrade)) - install_upgrade(item, user) - return TRUE - if(insert_matter(item, user)) - return TRUE +/obj/item/construction/item_interaction(mob/living/user, obj/item/tool, list/modifiers) + SHOULD_CALL_PARENT(TRUE) + if(istype(tool, /obj/item/rcd_upgrade)) + install_upgrade(tool, user) + return ITEM_INTERACT_SUCCESS + if(insert_matter(tool, user)) + return ITEM_INTERACT_SUCCESS return ..() /// Installs an upgrade into the RCD checking if it is already installed, or if it is a banned upgrade @@ -290,27 +306,39 @@ var/upgrade /obj/item/rcd_upgrade/frames + name = "RCD advanced upgrade: frames" desc = "It contains the design for machine frames and computer frames." + icon_state = "datadisk6" upgrade = RCD_UPGRADE_FRAMES /obj/item/rcd_upgrade/simple_circuits + name = "RCD advanced upgrade: simple circuits" desc = "It contains the design for firelock, air alarm, fire alarm, apc circuits and crap power cells." + icon_state = "datadisk4" upgrade = RCD_UPGRADE_SIMPLE_CIRCUITS /obj/item/rcd_upgrade/anti_interrupt + name = "RCD advanced upgrade: anti disruption" desc = "It contains the upgrades necessary to prevent interruption of RCD construction and deconstruction." + icon_state = "datadisk2" upgrade = RCD_UPGRADE_ANTI_INTERRUPT /obj/item/rcd_upgrade/cooling + name = "RCD advanced upgrade: enhanced cooling" desc = "It contains the upgrades necessary to allow more frequent use of the RCD." + icon_state = "datadisk7" upgrade = RCD_UPGRADE_NO_FREQUENT_USE_COOLDOWN /obj/item/rcd_upgrade/silo_link + name = "RCD advanced upgrade: silo link" desc = "It contains direct silo connection RCD upgrade." + icon_state = "datadisk8" upgrade = RCD_UPGRADE_SILO_LINK /obj/item/rcd_upgrade/furnishing + name = "RCD advanced upgrade: furnishings" desc = "It contains the design for chairs, stools, tables, and glass tables." + icon_state = "datadisk5" upgrade = RCD_UPGRADE_FURNISHING /datum/action/item_action/rcd_scan diff --git a/code/game/objects/items/rcd/RLD.dm b/code/game/objects/items/rcd/RLD.dm index 6272c7a374d37..2a99f535f42b5 100644 --- a/code/game/objects/items/rcd/RLD.dm +++ b/code/game/objects/items/rcd/RLD.dm @@ -88,61 +88,63 @@ else toggle_silo(user) -/obj/item/construction/rld/afterattack(atom/A, mob/user) +/obj/item/construction/rld/ranged_interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + if(!range_check(interacting_with, user)) + return NONE + return try_lighting(interacting_with, user) + +/obj/item/construction/rld/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) . = ..() - if(!range_check(A,user)) - return + if(. & ITEM_INTERACT_ANY_BLOCKER) + return . + return try_lighting(interacting_with, user) + +/obj/item/construction/rld/proc/try_lighting(atom/interacting_with, mob/user) + var/turf/start = get_turf(src) switch(mode) if(REMOVE_MODE) - if(!istype(A, /obj/machinery/light/)) - return FALSE + if(!istype(interacting_with, /obj/machinery/light)) + return NONE //resource sanity checks before & after delay if(!checkResource(DECONSTRUCT_COST, user)) - return FALSE - var/beam = user.Beam(A,icon_state="light_beam", time = 15) - playsound(loc, 'sound/machines/click.ogg', 50, TRUE) - if(!do_after(user, REMOVE_DELAY, target = A)) + return ITEM_INTERACT_BLOCKING + var/beam = user.Beam(interacting_with, icon_state="light_beam", time = 15) + playsound(src, 'sound/machines/click.ogg', 50, TRUE) + if(!do_after(user, REMOVE_DELAY, target = interacting_with)) qdel(beam) - return FALSE + return ITEM_INTERACT_BLOCKING if(!checkResource(DECONSTRUCT_COST, user)) - return FALSE - + return ITEM_INTERACT_BLOCKING if(!useResource(DECONSTRUCT_COST, user)) - return FALSE + return ITEM_INTERACT_BLOCKING activate() - qdel(A) - return TRUE + qdel(interacting_with) + return ITEM_INTERACT_SUCCESS if(LIGHT_MODE) //resource sanity checks before & after delay - var/cost = iswallturf(A) ? LIGHT_TUBE_COST : FLOOR_LIGHT_COST + var/cost = iswallturf(interacting_with) ? LIGHT_TUBE_COST : FLOOR_LIGHT_COST if(!checkResource(cost, user)) - return FALSE - var/beam = user.Beam(A,icon_state="light_beam", time = BUILD_DELAY) + return ITEM_INTERACT_BLOCKING + var/beam = user.Beam(interacting_with, icon_state="light_beam", time = BUILD_DELAY) playsound(loc, 'sound/machines/click.ogg', 50, TRUE) playsound(loc, 'sound/effects/light_flicker.ogg', 50, FALSE) - if(!do_after(user, BUILD_DELAY, target = A)) + if(!do_after(user, BUILD_DELAY, target = interacting_with)) qdel(beam) - return FALSE + return ITEM_INTERACT_BLOCKING if(!checkResource(cost, user)) - return FALSE + return ITEM_INTERACT_BLOCKING - if(iswallturf(A)) + if(iswallturf(interacting_with)) var/turf/open/winner = null var/winning_dist = null - var/skip = FALSE for(var/direction in GLOB.cardinals) - var/turf/C = get_step(A, direction) + var/turf/C = get_step(interacting_with, direction) //turf already has a light - skip = FALSE - for(var/obj/machinery/light/dupe in C) - if(istype(dupe, /obj/machinery/light)) - skip = TRUE - break - if(skip) + if(locate(/obj/machinery/light) in C) continue //can't put a light here if(!(isspaceturf(C) || TURF_SHARES(C))) @@ -159,43 +161,41 @@ winning_dist = contender if(!winner) balloon_alert(user, "no valid target!") - return FALSE - + return ITEM_INTERACT_BLOCKING if(!useResource(cost, user)) - return FALSE + return ITEM_INTERACT_BLOCKING activate() var/obj/machinery/light/L = new /obj/machinery/light(get_turf(winner)) - L.setDir(get_dir(winner, A)) + L.setDir(get_dir(winner, interacting_with)) L.color = color_choice L.set_light_color(color_choice) - return TRUE - - if(isfloorturf(A)) - var/turf/target = get_turf(A) - for(var/obj/machinery/light/floor/dupe in target) - if(istype(dupe)) - return FALSE + return ITEM_INTERACT_SUCCESS + if(isfloorturf(interacting_with)) + var/turf/target = get_turf(interacting_with) + if(locate(/obj/machinery/light/floor) in target) + return ITEM_INTERACT_BLOCKING if(!useResource(cost, user)) - return FALSE + return ITEM_INTERACT_BLOCKING activate() var/obj/machinery/light/floor/FL = new /obj/machinery/light/floor(target) FL.color = color_choice FL.set_light_color(color_choice) - return TRUE + return ITEM_INTERACT_SUCCESS if(GLOW_MODE) if(!useResource(GLOW_STICK_COST, user)) - return FALSE + return ITEM_INTERACT_BLOCKING activate() - var/obj/item/flashlight/glowstick/G = new /obj/item/flashlight/glowstick(start) - G.color = color_choice - G.set_light_color(G.color) - G.throw_at(A, 9, 3, user) - G.light_on = TRUE - G.update_brightness() - - return TRUE + var/obj/item/flashlight/glowstick/new_stick = new /obj/item/flashlight/glowstick(start) + new_stick.color = color_choice + new_stick.set_light_color(new_stick.color) + new_stick.throw_at(interacting_with, 9, 3, user) + new_stick.turn_on() + new_stick.update_brightness() + return ITEM_INTERACT_SUCCESS + + return NONE /obj/item/construction/rld/mini name = "mini-rapid-light-device" diff --git a/code/game/objects/items/rcd/RPD.dm b/code/game/objects/items/rcd/RPD.dm index e47779776059b..41a962ed7e7de 100644 --- a/code/game/objects/items/rcd/RPD.dm +++ b/code/game/objects/items/rcd/RPD.dm @@ -705,7 +705,9 @@ GLOBAL_LIST_INIT(transit_tube_recipes, list( var/upgrade_flags /obj/item/rpd_upgrade/unwrench + name = "RPD advanced upgrade: wrench mode" desc = "Adds reverse wrench mode to the RPD. Attention, due to budget cuts, the mode is hard linked to the destroy mode control button." + icon_state = "datadisk1" upgrade_flags = RPD_UPGRADE_UNWRENCH #undef ATMOS_CATEGORY diff --git a/code/game/objects/items/rcd/RPLD.dm b/code/game/objects/items/rcd/RPLD.dm index 192875694c1c2..8fc2da9520599 100644 --- a/code/game/objects/items/rcd/RPLD.dm +++ b/code/game/objects/items/rcd/RPLD.dm @@ -177,6 +177,7 @@ if(!design) return FALSE blueprint = design + blueprint_changed = TRUE playsound(src, 'sound/effects/pop.ogg', 50, vary = FALSE) @@ -202,7 +203,7 @@ if(!is_allowed) balloon_alert(user, "turf is blocked!") return FALSE - if(!do_after(user, cost, target = destination)) //"cost" is relative to delay at a rate of 10 matter/second (1matter/decisecond) rather than playing with 2 different variables since everyone set it to this rate anyways. + if(!build_delay(user, cost, target = destination)) return FALSE if(!checkResource(cost, user) || !(is_allowed = canPlace(destination))) if(!is_allowed) @@ -240,40 +241,44 @@ if(duct_machine.duct_layer & layer_id) return FALSE -/obj/item/construction/plumbing/pre_attack_secondary(obj/machinery/target, mob/user, params) - if(!istype(target, /obj/machinery/duct)) - return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN - - var/obj/machinery/duct/duct = target - if(duct.duct_layer && duct.duct_color) - current_color = GLOB.pipe_color_name[duct.duct_color] - current_layer = GLOB.plumbing_layer_names["[duct.duct_layer]"] - balloon_alert(user, "using [current_color], layer [current_layer]") - - return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN - -/obj/item/construction/plumbing/afterattack(atom/target, mob/user, proximity) +/obj/item/construction/plumbing/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) . = ..() - if(!proximity) - return + if(. & ITEM_INTERACT_ANY_BLOCKER) + return . for(var/category_name in plumbing_design_types) var/list/designs = plumbing_design_types[category_name] for(var/obj/machinery/recipe as anything in designs) - if(target.type != recipe) + if(interacting_with.type != recipe) continue - var/obj/machinery/machine_target = target + var/obj/machinery/machine_target = interacting_with if(machine_target.anchored) balloon_alert(user, "unanchor first!") - return - if(do_after(user, 2 SECONDS, target = target)) + return ITEM_INTERACT_BLOCKING + if(do_after(user, 2 SECONDS, target = interacting_with)) machine_target.deconstruct() //Let's not substract matter - playsound(get_turf(src), 'sound/machines/click.ogg', 50, TRUE) //this is just such a great sound effect - return + playsound(src, 'sound/machines/click.ogg', 50, TRUE) //this is just such a great sound effect + return ITEM_INTERACT_SUCCESS - create_machine(target, user) + if(!isopenturf(interacting_with)) + return NONE + if(create_machine(interacting_with, user)) + return ITEM_INTERACT_SUCCESS + return ITEM_INTERACT_BLOCKING + +/obj/item/construction/plumbing/interact_with_atom_secondary(atom/target, mob/living/user, list/modifiers) + if(!istype(target, /obj/machinery/duct)) + return NONE + + var/obj/machinery/duct/duct = target + if(duct.duct_layer && duct.duct_color) + current_color = GLOB.pipe_color_name[duct.duct_color] + current_layer = GLOB.plumbing_layer_names["[duct.duct_layer]"] + balloon_alert(user, "using [current_color], layer [current_layer]") + return ITEM_INTERACT_SUCCESS + return ITEM_INTERACT_BLOCKING /obj/item/construction/plumbing/click_alt(mob/user) ui_interact(user) @@ -376,4 +381,3 @@ plumbing_design_types = service_design_types . = ..() - diff --git a/code/game/objects/items/rcd/RSF.dm b/code/game/objects/items/rcd/RSF.dm index 8db8c2a91161a..ef0be22acc476 100644 --- a/code/game/objects/items/rcd/RSF.dm +++ b/code/game/objects/items/rcd/RSF.dm @@ -45,7 +45,7 @@ RSF /obj/item/toy/cards/deck = 200, /obj/item/paper = 10, /obj/item/pen = 50, - /obj/item/clothing/mask/cigarette = 10, + /obj/item/cigarette = 10, ) ///An associated list of fuel and it's value var/list/matter_by_item = list(/obj/item/rcd_ammo = 10,) @@ -125,21 +125,18 @@ RSF return FALSE return TRUE -/obj/item/rsf/afterattack(atom/A, mob/user, proximity) +/obj/item/rsf/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) if(cooldown > world.time) - return - . = ..() - if(!proximity) - return . - . |= AFTERATTACK_PROCESSED_ITEM - if (!is_allowed(A)) - return . + return NONE + if (!is_allowed(interacting_with)) + return NONE if(use_matter(dispense_cost, user))//If we can charge that amount of charge, we do so and return true playsound(loc, 'sound/machines/click.ogg', 10, TRUE) - var/atom/meme = new to_dispense(get_turf(A)) + var/atom/meme = new to_dispense(get_turf(interacting_with)) to_chat(user, span_notice("[action_type] [meme.name]...")) cooldown = world.time + cooldowndelay - return . + return ITEM_INTERACT_SUCCESS + return ITEM_INTERACT_BLOCKING ///A helper proc. checks to see if we can afford the amount of charge that is passed, and if we can docs the charge from our base, and returns TRUE. If we can't we return FALSE /obj/item/rsf/proc/use_matter(charge, mob/user) @@ -163,10 +160,7 @@ RSF ///Helper proc that iterates through all the things we are allowed to spawn on, and sees if the passed atom is one of them /obj/item/rsf/proc/is_allowed(atom/to_check) - for(var/sort in allowed_surfaces) - if(istype(to_check, sort)) - return TRUE - return FALSE + return is_type_in_list(to_check, allowed_surfaces) /obj/item/rsf/cookiesynth name = "Cookie Synthesizer" diff --git a/code/game/objects/items/rcd/RTD.dm b/code/game/objects/items/rcd/RTD.dm index e38b283631f62..45b9c9e3687dd 100644 --- a/code/game/objects/items/rcd/RTD.dm +++ b/code/game/objects/items/rcd/RTD.dm @@ -224,13 +224,26 @@ QDEL_LIST(design_overlays) design_category = params["category_name"] selected_design.set_info(target_design) + blueprint_changed = TRUE return TRUE -/obj/item/construction/rtd/afterattack(turf/open/floor/floor, mob/user) +/obj/item/construction/rtd/ranged_interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + if(!range_check(interacting_with, user)) + return NONE + return try_tiling(interacting_with, user) + +/obj/item/construction/rtd/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) . = ..() - if(!istype(floor) || !range_check(floor,user)) - return TRUE + if(. & ITEM_INTERACT_ANY_BLOCKER) + return . + + return try_tiling(interacting_with, user) + +/obj/item/construction/rtd/proc/try_tiling(atom/interacting_with, mob/living/user) + var/turf/open/floor/floor = interacting_with + if(!istype(floor)) + return NONE var/floor_designs = GLOB.floor_designs if(!istype(floor, /turf/open/floor/plating)) //we infer what floor type it is if its not the usual plating @@ -259,11 +272,11 @@ selected_design.set_direction(floor.dir) balloon_alert(user, "tile changed to [selected_design.name]") - return TRUE + return ITEM_INTERACT_SUCCESS //can't infer floor type! balloon_alert(user, "design not supported!") - return TRUE + return ITEM_INTERACT_BLOCKING var/delay = CONSTRUCTION_TIME(selected_design.cost) var/obj/effect/constructing_effect/rcd_effect = new(floor, delay, RCD_TURF) @@ -271,27 +284,27 @@ //resource sanity check before & after delay along with special effects if(!checkResource(selected_design.cost, user)) qdel(rcd_effect) - return TRUE + return ITEM_INTERACT_BLOCKING var/beam = user.Beam(floor, icon_state = "light_beam", time = delay) playsound(loc, 'sound/effects/light_flicker.ogg', 50, FALSE) - if(!do_after(user, delay, target = floor)) + if(!build_delay(user, delay, target = floor)) qdel(beam) qdel(rcd_effect) - return TRUE + return ITEM_INTERACT_BLOCKING if(!checkResource(selected_design.cost, user)) qdel(rcd_effect) - return TRUE + return ITEM_INTERACT_BLOCKING if(!useResource(selected_design.cost, user)) qdel(rcd_effect) - return TRUE + return ITEM_INTERACT_BLOCKING activate() //step 1 create tile var/obj/item/stack/tile/final_tile = selected_design.new_tile(user.drop_location()) if(QDELETED(final_tile)) //if you were standing on a stack of tiles this newly spawned tile could get merged with it cause its spawned on your location qdel(rcd_effect) balloon_alert(user, "tile got merged with the stack beneath you!") - return TRUE + return ITEM_INTERACT_SUCCESS //step 2 lay tile var/turf/open/new_turf = final_tile.place_tile(floor, user) if(new_turf) //apply infered overlays @@ -299,16 +312,21 @@ info.add_decal(new_turf) rcd_effect.end_animation() - return TRUE + return ITEM_INTERACT_SUCCESS + +/obj/item/construction/rtd/ranged_interact_with_atom_secondary(atom/interacting_with, mob/living/user, list/modifiers) + if(!range_check(interacting_with, user)) + return NONE + return interact_with_atom_secondary(interacting_with, user, modifiers) -/obj/item/construction/rtd/afterattack_secondary(turf/open/floor/floor, mob/user, proximity_flag, click_parameters) - ..() - if(!istype(floor) || !range_check(floor,user)) - return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN +/obj/item/construction/rtd/interact_with_atom_secondary(atom/interacting_with, mob/living/user, list/modifiers) + var/turf/open/floor/floor = interacting_with + if(!istype(floor)) + return NONE if(istype(floor, /turf/open/floor/plating)) //cant deconstruct normal plating thats the RCD's job balloon_alert(user, "nothing to deconstruct!") - return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN + return ITEM_INTERACT_BLOCKING var/floor_designs = GLOB.floor_designs @@ -327,7 +345,7 @@ break if(!cost) balloon_alert(user, "can't deconstruct this type!") - return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN + return ITEM_INTERACT_BLOCKING var/delay = DECONSTRUCTION_TIME(cost) var/obj/effect/constructing_effect/rcd_effect = new(floor, delay, RCD_DECONSTRUCT) @@ -335,21 +353,21 @@ //resource sanity check before & after delay along with beam effects if(!checkResource(cost * 0.7, user)) //no ballon alert for checkResource as it already spans an alert to chat qdel(rcd_effect) - return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN + return ITEM_INTERACT_BLOCKING var/beam = user.Beam(floor, icon_state = "light_beam", time = delay) playsound(loc, 'sound/effects/light_flicker.ogg', 50, FALSE) if(!do_after(user, delay, target = floor)) qdel(beam) qdel(rcd_effect) - return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN + return ITEM_INTERACT_BLOCKING if(!checkResource(cost * 0.7, user)) qdel(rcd_effect) - return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN + return ITEM_INTERACT_BLOCKING //do the tiling if(!useResource(cost * 0.7, user)) qdel(rcd_effect) - return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN + return ITEM_INTERACT_BLOCKING activate() //find & collect all decals var/list/all_decals = list() @@ -365,7 +383,7 @@ floor.ScrapeAway(flags = CHANGETURF_INHERIT_AIR) rcd_effect.end_animation() - return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN + return ITEM_INTERACT_SUCCESS /obj/item/construction/rtd/loaded matter = 350 diff --git a/code/game/objects/items/religion.dm b/code/game/objects/items/religion.dm index b40a81f3642c3..f25c022b5808a 100644 --- a/code/game/objects/items/religion.dm +++ b/code/game/objects/items/religion.dm @@ -343,15 +343,18 @@ var/staffcooldown = 0 var/staffwait = 30 -/obj/item/godstaff/afterattack(atom/target, mob/user, proximity_flag, click_parameters) - . = ..() +/obj/item/godstaff/ranged_interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + return interact_with_atom(interacting_with, user, modifiers) + +/obj/item/godstaff/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) if(staffcooldown + staffwait > world.time) - return - . |= AFTERATTACK_PROCESSED_ITEM + return ITEM_INTERACT_BLOCKING + user.visible_message(span_notice("[user] chants deeply and waves [user.p_their()] staff!")) - if(do_after(user, 2 SECONDS, src)) - target.add_atom_colour(conversion_color, WASHABLE_COLOUR_PRIORITY) //wololo + if(do_after(user, 2 SECONDS, interacting_with)) + interacting_with.add_atom_colour(conversion_color, WASHABLE_COLOUR_PRIORITY) //wololo staffcooldown = world.time + return ITEM_INTERACT_SUCCESS /obj/item/godstaff/red icon_state = "godstaff-red" @@ -418,8 +421,8 @@ /obj/item/claymore/weak desc = "This one is rusted." - force = 30 - armour_penetration = 15 + force = 24 + armour_penetration = 10 /obj/item/claymore/weak/ceremonial desc = "A rusted claymore, once at the heart of a powerful scottish clan struck down and oppressed by tyrants, it has been passed down the ages as a symbol of defiance." diff --git a/code/game/objects/items/robot/items/food.dm b/code/game/objects/items/robot/items/food.dm index 40166a6a8fbfe..6e9b2143d12b6 100644 --- a/code/game/objects/items/robot/items/food.dm +++ b/code/game/objects/items/robot/items/food.dm @@ -117,23 +117,39 @@ user.visible_message(span_warning("[user] shoots a high-velocity gumball at [target]!")) check_amount() -/obj/item/borg/lollipop/afterattack(atom/target, mob/living/user, proximity, click_params) +/obj/item/borg/lollipop/ranged_interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) check_amount() if(iscyborg(user)) var/mob/living/silicon/robot/robot_user = user - if(!robot_user.cell.use(0.012 * STANDARD_CELL_CHARGE)) + if(!robot_user.cell?.use(0.012 * STANDARD_CELL_CHARGE)) to_chat(user, span_warning("Not enough power.")) - return AFTERATTACK_PROCESSED_ITEM + return ITEM_INTERACT_BLOCKING + switch(mode) - if(DISPENSE_LOLLIPOP_MODE, DISPENSE_ICECREAM_MODE) - if(!proximity) - return AFTERATTACK_PROCESSED_ITEM - dispense(target, user) if(THROW_LOLLIPOP_MODE) - shootL(target, user, click_params) + shootL(interacting_with, user, list2params(modifiers)) + return ITEM_INTERACT_SUCCESS + if(THROW_GUMBALL_MODE) - shootG(target, user, click_params) - return ..() | AFTERATTACK_PROCESSED_ITEM + shootG(interacting_with, user, list2params(modifiers)) + return ITEM_INTERACT_SUCCESS + + return NONE + +/obj/item/borg/lollipop/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + check_amount() + if(iscyborg(user)) + var/mob/living/silicon/robot/robot_user = user + if(!robot_user.cell?.use(0.012 * STANDARD_CELL_CHARGE)) + to_chat(user, span_warning("Not enough power.")) + return ITEM_INTERACT_BLOCKING + + switch(mode) + if(DISPENSE_LOLLIPOP_MODE, DISPENSE_ICECREAM_MODE) + dispense(interacting_with, user) + return ITEM_INTERACT_SUCCESS + + return NONE /obj/item/borg/lollipop/attack_self(mob/living/user) switch(mode) diff --git a/code/game/objects/items/robot/items/generic.dm b/code/game/objects/items/robot/items/generic.dm index b9f28b4003e65..a98d13770b7ab 100644 --- a/code/game/objects/items/robot/items/generic.dm +++ b/code/game/objects/items/robot/items/generic.dm @@ -220,7 +220,7 @@ /// Whitelist of charging machines var/static/list/charge_machines = typecacheof(list(/obj/machinery/cell_charger, /obj/machinery/recharger, /obj/machinery/recharge_station, /obj/machinery/mech_bay_recharge_port)) /// Whitelist of chargable items - var/static/list/charge_items = typecacheof(list(/obj/item/stock_parts/cell, /obj/item/gun/energy)) + var/static/list/charge_items = typecacheof(list(/obj/item/stock_parts/power_store, /obj/item/gun/energy)) /obj/item/borg/charger/update_icon_state() icon_state = "charger_[mode]" @@ -234,11 +234,11 @@ to_chat(user, span_notice("You toggle [src] to \"[mode]\" mode.")) update_appearance() -/obj/item/borg/charger/afterattack(obj/item/target, mob/living/silicon/robot/user, proximity_flag) - . = ..() - if(!proximity_flag || !iscyborg(user)) - return - . |= AFTERATTACK_PROCESSED_ITEM +/obj/item/borg/charger/interact_with_atom(atom/target, mob/living/silicon/robot/user, list/modifiers) + if(!iscyborg(user)) + return NONE + + . = ITEM_INTERACT_BLOCKING if(mode == "draw") if(is_type_in_list(target, charge_machines)) var/obj/machinery/target_machine = target @@ -259,9 +259,9 @@ to_chat(user, span_notice("You stop charging yourself.")) else if(is_type_in_list(target, charge_items)) - var/obj/item/stock_parts/cell/cell = target + var/obj/item/stock_parts/power_store/cell = target if(!istype(cell)) - cell = locate(/obj/item/stock_parts/cell) in target + cell = locate(/obj/item/stock_parts/power_store) in target if(!cell) to_chat(user, span_warning("[target] has no power cell!")) return @@ -298,9 +298,9 @@ to_chat(user, span_notice("You stop charging yourself.")) else if(is_type_in_list(target, charge_items)) - var/obj/item/stock_parts/cell/cell = target + var/obj/item/stock_parts/power_store/cell = target if(!istype(cell)) - cell = locate(/obj/item/stock_parts/cell) in target + cell = locate(/obj/item/stock_parts/power_store) in target if(!cell) to_chat(user, span_warning("[target] has no power cell!")) return diff --git a/code/game/objects/items/robot/items/hypo.dm b/code/game/objects/items/robot/items/hypo.dm index e8e71ccda62ec..9a29ccbd9ef97 100644 --- a/code/game/objects/items/robot/items/hypo.dm +++ b/code/game/objects/items/robot/items/hypo.dm @@ -194,7 +194,7 @@ balloon_alert(user, "[amount_per_transfer_from_this] unit\s injected") log_combat(user, injectee, "injected", src, "(CHEMICALS: [selected_reagent])") else - balloon_alert(user, "[parse_zone(user.zone_selected)] is blocked!") + balloon_alert(user, "[injectee.parse_zone_with_bodypart(user.zone_selected)] is blocked!") /obj/item/reagent_containers/borghypo/ui_interact(mob/user, datum/tgui/ui) ui = SStgui.try_update_ui(user, src, ui) @@ -275,6 +275,7 @@ icon_state = "borghypo_s" tgui_theme = "syndicate" default_reagent_types = HACKED_MEDICAL_REAGENTS + expanded_reagent_types = null /// Peacekeeper hypospray /obj/item/reagent_containers/borghypo/peace @@ -358,31 +359,29 @@ /obj/item/reagent_containers/borghypo/borgshaker/attack(mob/M, mob/user) return //Can't inject stuff with a shaker, can we? //not with that attitude -/obj/item/reagent_containers/borghypo/borgshaker/afterattack(obj/target, mob/user, proximity) - . = ..() - if(!proximity) - return . +/obj/item/reagent_containers/borghypo/borgshaker/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + if(!interacting_with.is_refillable()) + return NONE if(!selected_reagent) balloon_alert(user, "no reagent selected!") - return . - . |= AFTERATTACK_PROCESSED_ITEM - if(target.is_refillable()) - if(!stored_reagents.has_reagent(selected_reagent.type, amount_per_transfer_from_this)) - balloon_alert(user, "not enough [selected_reagent.name]!") - return . - if(target.reagents.total_volume >= target.reagents.maximum_volume) - balloon_alert(user, "[target] is full!") - return . - - // This is the in-between where we're storing the reagent we're going to pour into the container - // because we cannot specify a singular reagent to transfer in trans_to - var/datum/reagents/shaker = new() - stored_reagents.remove_reagent(selected_reagent.type, amount_per_transfer_from_this) - shaker.add_reagent(selected_reagent.type, amount_per_transfer_from_this, reagtemp = dispensed_temperature, no_react = TRUE) + return ITEM_INTERACT_BLOCKING + if(!stored_reagents.has_reagent(selected_reagent.type, amount_per_transfer_from_this)) + balloon_alert(user, "not enough [selected_reagent.name]!") + return ITEM_INTERACT_BLOCKING + if(interacting_with.reagents.total_volume >= interacting_with.reagents.maximum_volume) + balloon_alert(user, "it's full!") + return ITEM_INTERACT_BLOCKING + + // This is the in-between where we're storing the reagent we're going to pour into the container + // because we cannot specify a singular reagent to transfer in trans_to + var/datum/reagents/shaker = new() + stored_reagents.remove_reagent(selected_reagent.type, amount_per_transfer_from_this) + shaker.add_reagent(selected_reagent.type, amount_per_transfer_from_this, reagtemp = dispensed_temperature, no_react = TRUE) + + shaker.trans_to(interacting_with, amount_per_transfer_from_this, transferred_by = user) + balloon_alert(user, "[amount_per_transfer_from_this] unit\s poured") + return ITEM_INTERACT_SUCCESS - shaker.trans_to(target, amount_per_transfer_from_this, transferred_by = user) - balloon_alert(user, "[amount_per_transfer_from_this] unit\s poured") - return . /obj/item/reagent_containers/borghypo/condiment_synthesizer // Solids! Condiments! The borger uprising! name = "Condiment Synthesizer" @@ -423,30 +422,26 @@ /obj/item/reagent_containers/borghypo/condiment_synthesizer/attack(mob/M, mob/user) return -/obj/item/reagent_containers/borghypo/condiment_synthesizer/afterattack(obj/target, mob/user, proximity) - . = ..() - if(!proximity) - return . +/obj/item/reagent_containers/borghypo/condiment_synthesizer/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + if(!interacting_with.is_refillable()) + return NONE if(!selected_reagent) balloon_alert(user, "no reagent selected!") - return . - . |= AFTERATTACK_PROCESSED_ITEM - if(!target.is_refillable()) - return . + return ITEM_INTERACT_BLOCKING if(!stored_reagents.has_reagent(selected_reagent.type, amount_per_transfer_from_this)) balloon_alert(user, "not enough [selected_reagent.name]!") - return . - if(target.reagents.total_volume >= target.reagents.maximum_volume) - balloon_alert(user, "[target] is full!") - return . + return ITEM_INTERACT_BLOCKING + if(interacting_with.reagents.total_volume >= interacting_with.reagents.maximum_volume) + balloon_alert(user, "it's full!") + return ITEM_INTERACT_BLOCKING // This is the in-between where we're storing the reagent we're going to pour into the container // because we cannot specify a singular reagent to transfer in trans_to var/datum/reagents/shaker = new() stored_reagents.remove_reagent(selected_reagent.type, amount_per_transfer_from_this) shaker.add_reagent(selected_reagent.type, amount_per_transfer_from_this, reagtemp = dispensed_temperature, no_react = TRUE) - shaker.trans_to(target, amount_per_transfer_from_this, transferred_by = user) + shaker.trans_to(interacting_with, amount_per_transfer_from_this, transferred_by = user) balloon_alert(user, "[amount_per_transfer_from_this] unit\s poured") - + return ITEM_INTERACT_SUCCESS /obj/item/reagent_containers/borghypo/borgshaker/hacked name = "cyborg shaker" diff --git a/code/game/objects/items/robot/items/tools.dm b/code/game/objects/items/robot/items/tools.dm index 0d06e08cf5e3d..f16cd0844901d 100644 --- a/code/game/objects/items/robot/items/tools.dm +++ b/code/game/objects/items/robot/items/tools.dm @@ -1,7 +1,5 @@ #define PKBORG_DAMPEN_CYCLE_DELAY (2 SECONDS) #define POWER_RECHARGE_CYBORG_DRAIN_MULTIPLIER (0.0004 * STANDARD_CELL_RATE) -#define NO_TOOL "deactivated" -#define TOOL_DRAPES "surgical_drapes" /obj/item/cautery/prt //it's a subtype of cauteries so that it inherits the cautery sprites and behavior and stuff, because I'm too lazy to make sprites for this thing name = "plating repair tool" @@ -182,67 +180,75 @@ desc = "You shouldn't see this in-game normally." icon = 'icons/mob/silicon/robot_items.dmi' icon_state = "toolkit_medborg" - ///our tools - var/list/radial_menu_options = list() + + ///our tools (list of item typepaths) + var/list/obj/item/omni_toolkit = list() + ///Map of solid objects internally used by the omni tool + var/list/obj/item/atoms = list() ///object we are referencing to for force, sharpness and sound var/obj/item/reference //is the toolset upgraded or not var/upgraded = FALSE - ///how much faster should the toolspeed be? - var/upgraded_toolspeed = 0.7 + +/obj/item/borg/cyborg_omnitool/Destroy(force) + for(var/obj/item/tool_path as anything in atoms) + var/obj/item/tool = atoms[tool_path] + if(!QDELETED(tool)) //if we are sharing tools from our other omnitool brothers we don't want to re delete them if they got deleted first + qdel(tool) + atoms.Cut() + + return ..() /obj/item/borg/cyborg_omnitool/get_all_tool_behaviours() - return list(TOOL_SCALPEL, TOOL_HEMOSTAT) + . = list() + for(var/obj/item/tool as anything in omni_toolkit) + . += initial(tool.tool_behaviour) + +///The omnitool interacts with real world objects based on the state it has assumed +/obj/item/borg/cyborg_omnitool/get_proxy_attacker_for(atom/target, mob/user) + if(!reference) + return src + + //first check if we have the tool + var/obj/item/tool = atoms[reference] + if(!QDELETED(tool)) + return tool + + //else try to borrow an in-built tool from our other omnitool brothers to save & share memory & such + var/mob/living/silicon/robot/borg = user + for(var/obj/item/borg/cyborg_omnitool/omni_tool in borg.model.basic_modules) + if(omni_tool == src) + continue + tool = omni_tool.atoms[reference] + if(!QDELETED(tool)) + atoms[reference] = tool + return tool -/obj/item/borg/cyborg_omnitool/Initialize(mapload) - . = ..() - AddComponent(/datum/component/butchering, \ - speed = 8 SECONDS, \ - effectiveness = 100, \ - disabled = TRUE, \ - ) - radial_menu_options = list( - NO_TOOL = image(icon = 'icons/mob/silicon/robot_items.dmi', icon_state = initial(icon_state)), - TOOL_SCALPEL = image(icon = 'icons/obj/medical/surgery_tools.dmi', icon_state = "[TOOL_SCALPEL]"), - TOOL_HEMOSTAT = image(icon = 'icons/obj/medical/surgery_tools.dmi', icon_state = "[TOOL_HEMOSTAT]"), - ) + //if all else fails just make a new one from scratch + tool = new reference(user) + ADD_TRAIT(tool, TRAIT_NODROP, CYBORG_ITEM_TRAIT) + atoms[reference] = tool + return tool /obj/item/borg/cyborg_omnitool/attack_self(mob/user) - var/new_tool_behaviour = show_radial_menu(user, src, radial_menu_options, require_near = TRUE, tooltips = TRUE) + //build the radial menu options + var/list/radial_menu_options = list() + for(var/obj/item/tool as anything in omni_toolkit) + radial_menu_options[initial(tool.tool_behaviour)] = image(icon = initial(tool.icon), icon_state = initial(tool.icon_state)) + //assign the new tool behaviour + var/new_tool_behaviour = show_radial_menu(user, src, radial_menu_options, require_near = TRUE, tooltips = TRUE) if(isnull(new_tool_behaviour) || new_tool_behaviour == tool_behaviour) return - if(new_tool_behaviour == NO_TOOL) - tool_behaviour = null - else - tool_behaviour = new_tool_behaviour - - reference_item_for_parameters() - update_tool_parameters(reference) - update_appearance(UPDATE_ICON_STATE) - playsound(src, 'sound/items/change_jaws.ogg', 50, TRUE) + tool_behaviour = new_tool_behaviour -/// Used to get reference item for the tools -/obj/item/borg/cyborg_omnitool/proc/reference_item_for_parameters() - SHOULD_CALL_PARENT(FALSE) - switch(tool_behaviour) - if(TOOL_SCALPEL) - reference = /obj/item/scalpel - if(TOOL_HEMOSTAT) - reference = /obj/item/hemostat - -/// Used to update sounds and tool parameters during switching -/obj/item/borg/cyborg_omnitool/proc/update_tool_parameters(/obj/item/reference) - if(isnull(reference)) - sharpness = NONE - force = initial(force) - hitsound = initial(hitsound) - usesound = initial(usesound) - else - force = initial(reference.force) - sharpness = initial(reference.sharpness) - hitsound = initial(reference.hitsound) - usesound = initial(reference.usesound) + //set the reference & update icons + for(var/obj/item/tool as anything in omni_toolkit) + if(initial(tool.tool_behaviour) == new_tool_behaviour) + reference = tool + update_appearance(UPDATE_ICON_STATE) + playsound(src, 'sound/items/change_jaws.ogg', 50, TRUE) + break /obj/item/borg/cyborg_omnitool/update_icon_state() icon_state = initial(icon_state) @@ -250,140 +256,56 @@ if (tool_behaviour) icon_state += "_[sanitize_css_class_name(tool_behaviour)]" - if(tool_behaviour) - inhand_icon_state = initial(inhand_icon_state) + "_deactivated" - else - inhand_icon_state = initial(inhand_icon_state) - return ..() /** - * proc that's used when cyborg is upgraded with an omnitool upgrade board + * Is this omni tool upgraded or not + * Arguments * - * adds name and desc changes. also changes tools to default configuration to indicate it's been sucessfully upgraded - * changes the toolspeed to the upgraded_toolspeed variable + * * upgrade - TRUE/FALSE for upgraded */ -/obj/item/borg/cyborg_omnitool/proc/upgrade_omnitool() - name = "advanced [name]" - desc += "\nIt seems that this one has been upgraded to perform tasks faster." - toolspeed = upgraded_toolspeed - upgraded = TRUE - tool_behaviour = null - reference_item_for_parameters() - update_tool_parameters(reference) - update_appearance(UPDATE_ICON_STATE) - playsound(src, 'sound/items/change_jaws.ogg', 50, TRUE) +/obj/item/borg/cyborg_omnitool/proc/set_upgraded(upgrade) + upgraded = upgraded -/** - * proc that's used when a cyborg with an upgraded omnitool is downgraded - * - * reverts all name and desc changes to it's initial variables. also changes tools to default configuration to indicate it's been downgraded - * changes the toolspeed to default variable - */ -/obj/item/borg/cyborg_omnitool/proc/downgrade_omnitool() - name = initial(name) - desc = initial(desc) - toolspeed = initial(toolspeed) - upgraded = FALSE - tool_behaviour = null - reference_item_for_parameters() - update_tool_parameters(reference) - update_appearance(UPDATE_ICON_STATE) playsound(src, 'sound/items/change_jaws.ogg', 50, TRUE) /obj/item/borg/cyborg_omnitool/medical name = "surgical omni-toolset" desc = "A set of surgical tools used by cyborgs to operate on various surgical operations." - item_flags = SURGICAL_TOOL - -/obj/item/borg/cyborg_omnitool/medical/get_all_tool_behaviours() - return list(TOOL_SCALPEL, TOOL_HEMOSTAT, TOOL_RETRACTOR, TOOL_SAW, TOOL_DRILL, TOOL_CAUTERY, TOOL_BONESET) -/obj/item/borg/cyborg_omnitool/medical/Initialize(mapload) - . = ..() - AddComponent(/datum/component/butchering, \ - speed = 8 SECONDS, \ - effectiveness = 100, \ - disabled = TRUE, \ - ) - radial_menu_options = list( - TOOL_SCALPEL = image(icon = 'icons/obj/medical/surgery_tools.dmi', icon_state = "[TOOL_SCALPEL]"), - TOOL_HEMOSTAT = image(icon = 'icons/obj/medical/surgery_tools.dmi', icon_state = "[TOOL_HEMOSTAT]"), - TOOL_RETRACTOR = image(icon = 'icons/obj/medical/surgery_tools.dmi', icon_state = "[TOOL_RETRACTOR]"), - TOOL_SAW = image(icon = 'icons/obj/medical/surgery_tools.dmi', icon_state = "[TOOL_SAW]"), - TOOL_DRILL = image(icon = 'icons/obj/medical/surgery_tools.dmi', icon_state = "[TOOL_DRILL]"), - TOOL_CAUTERY = image(icon = 'icons/obj/medical/surgery_tools.dmi', icon_state = "[TOOL_CAUTERY]"), - TOOL_BONESET = image(icon = 'icons/obj/medical/surgery_tools.dmi', icon_state = "[TOOL_BONESET]"), - TOOL_DRAPES = image(icon = 'icons/obj/medical/surgery_tools.dmi', icon_state = "[TOOL_DRAPES]"), + omni_toolkit = list( + /obj/item/surgical_drapes/cyborg, + /obj/item/scalpel/cyborg, + /obj/item/surgicaldrill/cyborg, + /obj/item/hemostat/cyborg, + /obj/item/retractor/cyborg, + /obj/item/cautery/cyborg, + /obj/item/circular_saw/cyborg, + /obj/item/bonesetter/cyborg, ) -/obj/item/borg/cyborg_omnitool/medical/reference_item_for_parameters() - var/datum/component/butchering/butchering = src.GetComponent(/datum/component/butchering) - butchering.butchering_enabled = tool_behaviour == (TOOL_SCALPEL && TOOL_SAW) - RemoveElement(/datum/element/eyestab) - RemoveComponentSource(/datum/component/surgery_initiator) - item_flags = SURGICAL_TOOL - switch(tool_behaviour) - if(TOOL_SCALPEL) - reference = /obj/item/scalpel - AddElement(/datum/element/eyestab) - if(TOOL_DRILL) - reference = /obj/item/surgicaldrill - AddElement(/datum/element/eyestab) - if(TOOL_HEMOSTAT) - reference = /obj/item/hemostat - if(TOOL_RETRACTOR) - reference = /obj/item/retractor - if(TOOL_CAUTERY) - reference = /obj/item/cautery - if(TOOL_SAW) - reference = /obj/item/circular_saw - if(TOOL_BONESET) - reference = /obj/item/bonesetter - if(TOOL_DRAPES) - reference = /obj/item/surgical_drapes - AddComponent(/datum/component/surgery_initiator) - item_flags = null - //Toolset for engineering cyborgs, this is all of the tools except for the welding tool. since it's quite hard to implement (read:can't be arsed to) /obj/item/borg/cyborg_omnitool/engineering name = "engineering omni-toolset" desc = "A set of engineering tools used by cyborgs to conduct various engineering tasks." icon = 'icons/obj/items_cyborg.dmi' icon_state = "toolkit_engiborg" - item_flags = null - toolspeed = 0.5 - upgraded_toolspeed = 0.3 -/obj/item/borg/cyborg_omnitool/engineering/get_all_tool_behaviours() - return list(TOOL_SCREWDRIVER, TOOL_CROWBAR, TOOL_WRENCH, TOOL_WIRECUTTER, TOOL_MULTITOOL) + omni_toolkit = list( + /obj/item/wrench/cyborg, + /obj/item/wirecutters/cyborg, + /obj/item/screwdriver/cyborg, + /obj/item/crowbar/cyborg, + /obj/item/multitool/cyborg, + ) -/obj/item/borg/cyborg_omnitool/engineering/Initialize(mapload) +/obj/item/borg/cyborg_omnitool/engineering/examine(mob/user) . = ..() - radial_menu_options = list( - TOOL_SCREWDRIVER = image(icon = 'icons/obj/tools.dmi', icon_state = "[TOOL_SCREWDRIVER]_map"), - TOOL_CROWBAR = image(icon = 'icons/obj/tools.dmi', icon_state = "[TOOL_CROWBAR]"), - TOOL_WRENCH = image(icon = 'icons/obj/tools.dmi', icon_state = "[TOOL_WRENCH]"), - TOOL_WIRECUTTER = image(icon = 'icons/obj/tools.dmi', icon_state = "[TOOL_WIRECUTTER]_map"), - TOOL_MULTITOOL = image(icon = 'icons/obj/devices/tool.dmi', icon_state = "[TOOL_MULTITOOL]"), - ) -/obj/item/borg/cyborg_omnitool/engineering/reference_item_for_parameters() - RemoveElement(/datum/element/eyestab) - switch(tool_behaviour) - if(TOOL_SCREWDRIVER) - reference = /obj/item/crowbar - AddElement(/datum/element/eyestab) - if(TOOL_CROWBAR) - reference = /obj/item/surgicaldrill - if(TOOL_WRENCH) - reference = /obj/item/wrench - if(TOOL_WIRECUTTER) - reference = /obj/item/wirecutters - if(TOOL_MULTITOOL) - reference = /obj/item/multitool + if(tool_behaviour == TOOL_MULTITOOL) + for(var/obj/item/multitool/tool in atoms) + . += "Its multitool buffer contains [tool.buffer]" + break #undef PKBORG_DAMPEN_CYCLE_DELAY #undef POWER_RECHARGE_CYBORG_DRAIN_MULTIPLIER -#undef NO_TOOL -#undef TOOL_DRAPES diff --git a/code/game/objects/items/robot/robot_parts.dm b/code/game/objects/items/robot/robot_parts.dm index 367c619333e81..25c83d1b9635a 100644 --- a/code/game/objects/items/robot/robot_parts.dm +++ b/code/game/objects/items/robot/robot_parts.dm @@ -76,7 +76,7 @@ head.flash2 = new(head) chest = new(src) chest.wired = TRUE - chest.cell = new /obj/item/stock_parts/cell/high(chest) + chest.cell = new /obj/item/stock_parts/power_store/cell/high(chest) update_appearance() /obj/item/robot_suit/update_overlays() @@ -145,7 +145,7 @@ to_chat(user, span_warning("[src] has no attached torso!")) return - var/obj/item/stock_parts/cell/temp_cell = user.is_holding_item_of_type(/obj/item/stock_parts/cell) + var/obj/item/stock_parts/power_store/cell/temp_cell = user.is_holding_item_of_type(/obj/item/stock_parts/power_store/cell) var/swap_failed = FALSE if(!temp_cell) //if we're not holding a cell swap_failed = TRUE @@ -376,7 +376,7 @@ if(!locomotion) O.set_lockcharge(TRUE) - else if(istype(W, /obj/item/pen)) + else if(IS_WRITING_UTENSIL(W)) to_chat(user, span_warning("You need to use a multitool to name [src]!")) else return ..() diff --git a/code/game/objects/items/robot/robot_upgrades.dm b/code/game/objects/items/robot/robot_upgrades.dm index 0261e2287c113..6fa32ae31e29b 100644 --- a/code/game/objects/items/robot/robot_upgrades.dm +++ b/code/game/objects/items/robot/robot_upgrades.dm @@ -13,23 +13,61 @@ var/list/model_type = null /// Bitflags listing model compatibility. Used in the exosuit fabricator for creating sub-categories. var/list/model_flags = NONE - // if true, is not stored in the robot to be ejected - // if model is reset + + /// List of items to add with the module, if any + var/list/items_to_add + /// List of items to remove with the module, if any + var/list/items_to_remove + // if true, is not stored in the robot to be ejected if model is reset var/one_use = FALSE + // If the module allows duplicates of itself to exist within the borg. + // one_use technically makes this value not mean anything, maybe could be just one variable with flags? + var/allow_duplicates = FALSE -/obj/item/borg/upgrade/proc/action(mob/living/silicon/robot/R, user = usr) - if(R.stat == DEAD) +/obj/item/borg/upgrade/proc/action(mob/living/silicon/robot/borg, mob/living/user = usr) + if(borg.stat == DEAD) to_chat(user, span_warning("[src] will not function on a deceased cyborg!")) return FALSE - if(model_type && !is_type_in_list(R.model, model_type)) - to_chat(R, span_alert("Upgrade mounting error! No suitable hardpoint detected.")) + if(model_type && !is_type_in_list(borg.model, model_type)) + to_chat(borg, span_alert("Upgrade mounting error! No suitable hardpoint detected.")) to_chat(user, span_warning("There's no mounting point for the module!")) return FALSE + if(!allow_duplicates && (locate(type) in borg.upgrades)) + to_chat(borg, span_alert("Upgrade mounting error! Hardpoint already occupied!")) + to_chat(user, span_warning("The mounting point for the module is already occupied!")) + return FALSE + // Handles adding/removing items. + if(length(items_to_add)) + install_items(borg, user, items_to_add) + if(length(items_to_remove)) + remove_items(borg, user, items_to_remove) return TRUE -/obj/item/borg/upgrade/proc/deactivate(mob/living/silicon/robot/R, user = usr) - if (!(src in R.upgrades)) +/obj/item/borg/upgrade/proc/deactivate(mob/living/silicon/robot/borg, mob/living/user = usr) + if (!(src in borg.upgrades)) return FALSE + + // Handles reverting the items back + if(length(items_to_add)) + remove_items(borg, user, items_to_add) + if(length(items_to_remove)) + install_items(borg, user, items_to_remove) + return TRUE + +// Handles adding items with the module +/obj/item/borg/upgrade/proc/install_items(mob/living/silicon/robot/borg, mob/living/user = usr, list/items) + for(var/item_to_add in items) + var/obj/item/module_item = new item_to_add(borg.model) + borg.model.basic_modules += module_item + borg.model.add_module(module_item, FALSE, TRUE) + return TRUE + +// Handles removing some items as the module is installed +/obj/item/borg/upgrade/proc/remove_items(mob/living/silicon/robot/borg, mob/living/user = usr, list/items) + for(var/item_to_remove in items) + var/obj/item/module_item = locate(item_to_remove) in borg.model.modules + if (module_item) + borg.model.remove_module(module_item, TRUE) return TRUE /obj/item/borg/upgrade/rename @@ -46,16 +84,17 @@ heldname = new_heldname user.log_message("set \"[heldname]\" as a name in a cyborg reclassification board at [loc_name(user)]", LOG_GAME) -/obj/item/borg/upgrade/rename/action(mob/living/silicon/robot/R, user = usr) +/obj/item/borg/upgrade/rename/action(mob/living/silicon/robot/borg, mob/living/user = usr) . = ..() - if(.) - var/oldname = R.real_name - var/oldkeyname = key_name(R) - R.custom_name = heldname - R.updatename() - if(oldname == R.real_name) - R.notify_ai(AI_NOTIFICATION_CYBORG_RENAMED, oldname, R.real_name) - usr.log_message("used a cyborg reclassification board to rename [oldkeyname] to [key_name(R)]", LOG_GAME) + if(!.) + return . + var/oldname = borg.real_name + var/oldkeyname = key_name(borg) + borg.custom_name = heldname + borg.updatename() + if(oldname == borg.real_name) + borg.notify_ai(AI_NOTIFICATION_CYBORG_RENAMED, oldname, borg.real_name) + user.log_message("used a cyborg reclassification board to rename [oldkeyname] to [key_name(borg)]", LOG_GAME) /obj/item/borg/upgrade/disablercooler name = "cyborg rapid disabler cooling module" @@ -64,50 +103,57 @@ require_model = TRUE model_type = list(/obj/item/robot_model/security) model_flags = BORG_MODEL_SECURITY + // We handle this in a custom way + allow_duplicates = TRUE -/obj/item/borg/upgrade/disablercooler/action(mob/living/silicon/robot/R, user = usr) +/obj/item/borg/upgrade/disablercooler/action(mob/living/silicon/robot/borg, mob/living/user = usr) . = ..() - if(.) - var/obj/item/gun/energy/disabler/cyborg/T = locate() in R.model.modules - if(!T) - to_chat(user, span_warning("There's no disabler in this unit!")) - return FALSE - if(T.charge_delay <= 2) - to_chat(R, span_warning("A cooling unit is already installed!")) - to_chat(user, span_warning("There's no room for another cooling unit!")) - return FALSE + if(!.) + return . - T.charge_delay = max(2 , T.charge_delay - 4) + var/obj/item/gun/energy/disabler/cyborg/disabler = locate() in borg.model.modules + if(isnull(disabler)) + to_chat(user, span_warning("There's no disabler in this unit!")) + return FALSE + if(disabler.charge_delay <= 2) + to_chat(borg, span_warning("A cooling unit is already installed!")) + to_chat(user, span_warning("There's no room for another cooling unit!")) + return FALSE -/obj/item/borg/upgrade/disablercooler/deactivate(mob/living/silicon/robot/R, user = usr) + disabler.charge_delay = max(2 , disabler.charge_delay - 4) + +/obj/item/borg/upgrade/disablercooler/deactivate(mob/living/silicon/robot/borg, mob/living/user = usr) . = ..() - if (.) - var/obj/item/gun/energy/disabler/cyborg/T = locate() in R.model.modules - if(!T) - return FALSE - T.charge_delay = initial(T.charge_delay) + if(!.) + return . + var/obj/item/gun/energy/disabler/cyborg/disabler = locate() in borg.model.modules + if(isnull(disabler)) + return FALSE + disabler.charge_delay = initial(disabler.charge_delay) /obj/item/borg/upgrade/thrusters name = "ion thruster upgrade" desc = "An energy-operated thruster system for cyborgs." icon_state = "cyborg_upgrade3" -/obj/item/borg/upgrade/thrusters/action(mob/living/silicon/robot/R, user = usr) +/obj/item/borg/upgrade/thrusters/action(mob/living/silicon/robot/borg, mob/living/user = usr) . = ..() - if(.) - if(R.ionpulse) - to_chat(user, span_warning("This unit already has ion thrusters installed!")) - return FALSE + if(!.) + return . + if(borg.ionpulse) + to_chat(user, span_warning("This unit already has ion thrusters installed!")) + return FALSE - R.ionpulse = TRUE - R.toggle_ionpulse() //Enabled by default + borg.ionpulse = TRUE + borg.toggle_ionpulse() //Enabled by default -/obj/item/borg/upgrade/thrusters/deactivate(mob/living/silicon/robot/R, user = usr) +/obj/item/borg/upgrade/thrusters/deactivate(mob/living/silicon/robot/borg, mob/living/user = usr) . = ..() - if (.) - R.ionpulse = FALSE + if(!.) + return . + borg.ionpulse = FALSE -/obj/item/borg/upgrade/ddrill +/obj/item/borg/upgrade/diamond_drill name = "mining cyborg diamond drill" desc = "A diamond drill replacement for the mining model's standard drill." icon_state = "cyborg_upgrade3" @@ -115,30 +161,8 @@ model_type = list(/obj/item/robot_model/miner) model_flags = BORG_MODEL_MINER -/obj/item/borg/upgrade/ddrill/action(mob/living/silicon/robot/R, user = usr) - . = ..() - if(.) - for(var/obj/item/pickaxe/drill/cyborg/D in R.model) - R.model.remove_module(D, TRUE) - for(var/obj/item/shovel/S in R.model) - R.model.remove_module(S, TRUE) - - var/obj/item/pickaxe/drill/cyborg/diamond/DD = new /obj/item/pickaxe/drill/cyborg/diamond(R.model) - R.model.basic_modules += DD - R.model.add_module(DD, FALSE, TRUE) - -/obj/item/borg/upgrade/ddrill/deactivate(mob/living/silicon/robot/R, user = usr) - . = ..() - if (.) - for(var/obj/item/pickaxe/drill/cyborg/diamond/DD in R.model) - R.model.remove_module(DD, TRUE) - - var/obj/item/pickaxe/drill/cyborg/D = new (R.model) - R.model.basic_modules += D - R.model.add_module(D, FALSE, TRUE) - var/obj/item/shovel/S = new (R.model) - R.model.basic_modules += S - R.model.add_module(S, FALSE, TRUE) + items_to_add = list(/obj/item/pickaxe/drill/cyborg/diamond) + items_to_remove = list(/obj/item/pickaxe/drill/cyborg, /obj/item/shovel) /obj/item/borg/upgrade/soh name = "mining cyborg satchel of holding" @@ -148,25 +172,8 @@ model_type = list(/obj/item/robot_model/miner) model_flags = BORG_MODEL_MINER -/obj/item/borg/upgrade/soh/action(mob/living/silicon/robot/R) - . = ..() - if(.) - for(var/obj/item/storage/bag/ore/cyborg/S in R.model) - R.model.remove_module(S, TRUE) - - var/obj/item/storage/bag/ore/holding/H = new /obj/item/storage/bag/ore/holding(R.model) - R.model.basic_modules += H - R.model.add_module(H, FALSE, TRUE) - -/obj/item/borg/upgrade/soh/deactivate(mob/living/silicon/robot/R, user = usr) - . = ..() - if (.) - for(var/obj/item/storage/bag/ore/holding/H in R.model) - R.model.remove_module(H, TRUE) - - var/obj/item/storage/bag/ore/cyborg/S = new (R.model) - R.model.basic_modules += S - R.model.add_module(S, FALSE, TRUE) + items_to_add = list(/obj/item/storage/bag/ore/holding) + items_to_remove = list(/obj/item/storage/bag/ore/cyborg) /obj/item/borg/upgrade/tboh name = "janitor cyborg trash bag of holding" @@ -176,25 +183,8 @@ model_type = list(/obj/item/robot_model/janitor) model_flags = BORG_MODEL_JANITOR -/obj/item/borg/upgrade/tboh/action(mob/living/silicon/robot/R) - . = ..() - if(.) - for(var/obj/item/storage/bag/trash/cyborg/TB in R.model.modules) - R.model.remove_module(TB, TRUE) - - var/obj/item/storage/bag/trash/bluespace/cyborg/B = new /obj/item/storage/bag/trash/bluespace/cyborg(R.model) - R.model.basic_modules += B - R.model.add_module(B, FALSE, TRUE) - -/obj/item/borg/upgrade/tboh/deactivate(mob/living/silicon/robot/R, user = usr) - . = ..() - if(.) - for(var/obj/item/storage/bag/trash/bluespace/cyborg/B in R.model.modules) - R.model.remove_module(B, TRUE) - - var/obj/item/storage/bag/trash/cyborg/TB = new (R.model) - R.model.basic_modules += TB - R.model.add_module(TB, FALSE, TRUE) + items_to_add = list(/obj/item/storage/bag/trash/bluespace/cyborg) + items_to_remove = list(/obj/item/storage/bag/trash/cyborg) /obj/item/borg/upgrade/amop name = "janitor cyborg advanced mop" @@ -204,25 +194,8 @@ model_type = list(/obj/item/robot_model/janitor) model_flags = BORG_MODEL_JANITOR -/obj/item/borg/upgrade/amop/action(mob/living/silicon/robot/R) - . = ..() - if(.) - for(var/obj/item/mop/cyborg/M in R.model.modules) - R.model.remove_module(M, TRUE) - - var/obj/item/mop/advanced/cyborg/mop = new /obj/item/mop/advanced/cyborg(R.model) - R.model.basic_modules += mop - R.model.add_module(mop, FALSE, TRUE) - -/obj/item/borg/upgrade/amop/deactivate(mob/living/silicon/robot/R, user = usr) - . = ..() - if(.) - for(var/obj/item/mop/advanced/cyborg/A in R.model.modules) - R.model.remove_module(A, TRUE) - - var/obj/item/mop/cyborg/M = new (R.model) - R.model.basic_modules += M - R.model.add_module(M, FALSE, TRUE) + items_to_add = list(/obj/item/mop/advanced/cyborg) + items_to_remove = list(/obj/item/mop/cyborg) /obj/item/borg/upgrade/prt name = "janitor cyborg plating repair tool" @@ -232,18 +205,7 @@ model_type = list(/obj/item/robot_model/janitor) model_flags = BORG_MODEL_JANITOR -/obj/item/borg/upgrade/prt/action(mob/living/silicon/robot/R) - . = ..() - if(.) - var/obj/item/cautery/prt/P = new (R.model) - R.model.basic_modules += P - R.model.add_module(P, FALSE, TRUE) - -/obj/item/borg/upgrade/prt/deactivate(mob/living/silicon/robot/R, user = usr) - . = ..() - if(.) - for(var/obj/item/cautery/prt/P in R.model.modules) - R.model.remove_module(P, TRUE) + items_to_add = list(/obj/item/cautery/prt) /obj/item/borg/upgrade/syndicate name = "illegal equipment module" @@ -251,22 +213,24 @@ icon_state = "cyborg_upgrade3" require_model = TRUE -/obj/item/borg/upgrade/syndicate/action(mob/living/silicon/robot/R, user = usr) +/obj/item/borg/upgrade/syndicate/action(mob/living/silicon/robot/borg, mob/living/user = usr) . = ..() - if(.) - if(R.emagged) - return FALSE + if(!.) + return . + if(borg.emagged) + return FALSE - R.SetEmagged(TRUE) - R.logevent("WARN: hardware installed with missing security certificate!") //A bit of fluff to hint it was an illegal tech item - R.logevent("WARN: root privleges granted to PID [num2hex(rand(1,65535), -1)][num2hex(rand(1,65535), -1)].") //random eight digit hex value. Two are used because rand(1,4294967295) throws an error + borg.SetEmagged(TRUE) + borg.logevent("WARN: hardware installed with missing security certificate!") //A bit of fluff to hint it was an illegal tech item + borg.logevent("WARN: root privleges granted to PID [num2hex(rand(1,65535), -1)][num2hex(rand(1,65535), -1)].") //random eight digit hex value. Two are used because rand(1,4294967295) throws an error - return TRUE + return TRUE -/obj/item/borg/upgrade/syndicate/deactivate(mob/living/silicon/robot/R, user = usr) +/obj/item/borg/upgrade/syndicate/deactivate(mob/living/silicon/robot/borg, mob/living/user = usr) . = ..() - if (.) - R.SetEmagged(FALSE) + if(!.) + return . + borg.SetEmagged(FALSE) /obj/item/borg/upgrade/lavaproof name = "mining cyborg lavaproof chassis" @@ -277,15 +241,17 @@ model_type = list(/obj/item/robot_model/miner) model_flags = BORG_MODEL_MINER -/obj/item/borg/upgrade/lavaproof/action(mob/living/silicon/robot/R, user = usr) +/obj/item/borg/upgrade/lavaproof/action(mob/living/silicon/robot/borg, mob/living/user = usr) . = ..() - if(.) - R.add_traits(list(TRAIT_LAVA_IMMUNE, TRAIT_SNOWSTORM_IMMUNE), type) + if(!.) + return . + borg.add_traits(list(TRAIT_LAVA_IMMUNE, TRAIT_SNOWSTORM_IMMUNE), type) -/obj/item/borg/upgrade/lavaproof/deactivate(mob/living/silicon/robot/R, user = usr) +/obj/item/borg/upgrade/lavaproof/deactivate(mob/living/silicon/robot/borg, mob/living/user = usr) . = ..() - if (.) - R.remove_traits(list(TRAIT_LAVA_IMMUNE, TRAIT_SNOWSTORM_IMMUNE), type) + if(!.) + return . + borg.remove_traits(list(TRAIT_LAVA_IMMUNE, TRAIT_SNOWSTORM_IMMUNE), type) /obj/item/borg/upgrade/selfrepair name = "self-repair module" @@ -301,24 +267,21 @@ var/energy_cost = 0.01 * STANDARD_CELL_CHARGE var/datum/action/toggle_action -/obj/item/borg/upgrade/selfrepair/action(mob/living/silicon/robot/R, user = usr) +/obj/item/borg/upgrade/selfrepair/action(mob/living/silicon/robot/borg, mob/living/user = usr) . = ..() - if(.) - var/obj/item/borg/upgrade/selfrepair/U = locate() in R - if(U) - to_chat(user, span_warning("This unit is already equipped with a self-repair module!")) - return FALSE - - icon_state = "selfrepair_off" - toggle_action = new /datum/action/item_action/toggle(src) - toggle_action.Grant(R) + if(!.) + return . + icon_state = "selfrepair_off" + toggle_action = new /datum/action/item_action/toggle(src) + toggle_action.Grant(borg) -/obj/item/borg/upgrade/selfrepair/deactivate(mob/living/silicon/robot/R, user = usr) +/obj/item/borg/upgrade/selfrepair/deactivate(mob/living/silicon/robot/borg, mob/living/user = usr) . = ..() - if (.) - toggle_action.Remove(R) - QDEL_NULL(toggle_action) - deactivate_sr() + if(!.) + return . + toggle_action.Remove(borg) + QDEL_NULL(toggle_action) + deactivate_sr() /obj/item/borg/upgrade/selfrepair/ui_action_click() if(on) @@ -399,17 +362,19 @@ model_flags = BORG_MODEL_MEDICAL var/list/additional_reagents = list() -/obj/item/borg/upgrade/hypospray/action(mob/living/silicon/robot/R, user = usr) +/obj/item/borg/upgrade/hypospray/action(mob/living/silicon/robot/borg, mob/living/user = usr) . = ..() - if(.) - for(var/obj/item/reagent_containers/borghypo/medical/H in R.model.modules) - H.upgrade_hypo() + if(!.) + return . + for(var/obj/item/reagent_containers/borghypo/medical/hypo in borg.model.modules) + hypo.upgrade_hypo() -/obj/item/borg/upgrade/hypospray/deactivate(mob/living/silicon/robot/R, user = usr) +/obj/item/borg/upgrade/hypospray/deactivate(mob/living/silicon/robot/borg, mob/living/user = usr) . = ..() - if (.) - for(var/obj/item/reagent_containers/borghypo/medical/H in R.model.modules) - H.remove_hypo_upgrade() + if(!.) + return . + for(var/obj/item/reagent_containers/borghypo/medical/hypo in borg.model.modules) + hypo.remove_hypo_upgrade() /obj/item/borg/upgrade/hypospray/expanded name = "medical cyborg expanded hypospray" @@ -422,22 +387,30 @@ pierce armor and thick material." icon_state = "cyborg_upgrade3" -/obj/item/borg/upgrade/piercing_hypospray/action(mob/living/silicon/robot/R, user = usr) +/obj/item/borg/upgrade/piercing_hypospray/action(mob/living/silicon/robot/borg, mob/living/user = usr) . = ..() - if(.) - var/found_hypo = FALSE - for(var/obj/item/reagent_containers/borghypo/H in R.model.modules) - H.bypass_protection = TRUE - found_hypo = TRUE - - if(!found_hypo) - return FALSE + if(!.) + return . + var/found_hypo = FALSE + for(var/obj/item/reagent_containers/borghypo/hypo in borg.model.modules) + hypo.bypass_protection = TRUE + found_hypo = TRUE + for(var/obj/item/reagent_containers/borghypo/hypo in borg.model.emag_modules) + hypo.bypass_protection = TRUE + found_hypo = TRUE + + if(!found_hypo) + to_chat(user, span_warning("There are no installed hypospray modules to upgrade with piercing!")) //check to see if any hyposprays were upgraded + return FALSE -/obj/item/borg/upgrade/piercing_hypospray/deactivate(mob/living/silicon/robot/R, user = usr) +/obj/item/borg/upgrade/piercing_hypospray/deactivate(mob/living/silicon/robot/borg, mob/living/user = usr) . = ..() - if (.) - for(var/obj/item/reagent_containers/borghypo/H in R.model.modules) - H.bypass_protection = initial(H.bypass_protection) + if(!.) + return . + for(var/obj/item/reagent_containers/borghypo/hypo in borg.model.modules) + hypo.bypass_protection = initial(hypo.bypass_protection) + for(var/obj/item/reagent_containers/borghypo/hypo in borg.model.emag_modules) + hypo.bypass_protection = initial(hypo.bypass_protection) /obj/item/borg/upgrade/surgery_omnitool name = "cyborg surgical omni-tool upgrade" @@ -448,23 +421,28 @@ model_type = list(/obj/item/robot_model/medical, /obj/item/robot_model/syndicate_medical) model_flags = BORG_MODEL_MEDICAL -/obj/item/borg/upgrade/surgery_omnitool/action(mob/living/silicon/robot/cyborg, user = usr) + items_to_add = list(/obj/item/healthanalyzer/advanced) + items_to_remove = list(/obj/item/healthanalyzer) + +/obj/item/borg/upgrade/surgery_omnitool/action(mob/living/silicon/robot/cyborg, mob/living/user = usr) . = ..() if(!.) - return FALSE + return . + ADD_TRAIT(cyborg, TRAIT_FASTMED, REF(src)) for(var/obj/item/borg/cyborg_omnitool/medical/omnitool_upgrade in cyborg.model.modules) if(omnitool_upgrade.upgraded) to_chat(user, span_warning("This unit is already equipped with an omnitool upgrade!")) return FALSE for(var/obj/item/borg/cyborg_omnitool/medical/omnitool in cyborg.model.modules) - omnitool.upgrade_omnitool() + omnitool.set_upgraded(TRUE) -/obj/item/borg/upgrade/surgery_omnitool/deactivate(mob/living/silicon/robot/cyborg, user = usr) +/obj/item/borg/upgrade/surgery_omnitool/deactivate(mob/living/silicon/robot/cyborg, mob/living/user = usr) . = ..() if(!.) - return FALSE + return . + REMOVE_TRAIT(cyborg, TRAIT_FASTMED, REF(src)) for(var/obj/item/borg/cyborg_omnitool/omnitool in cyborg.model.modules) - omnitool.downgrade_omnitool() + omnitool.set_upgraded(FALSE) /obj/item/borg/upgrade/engineering_omnitool name = "cyborg engineering omni-tool upgrade" @@ -475,23 +453,23 @@ model_type = list(/obj/item/robot_model/engineering, /obj/item/robot_model/saboteur) model_flags = BORG_MODEL_ENGINEERING -/obj/item/borg/upgrade/engineering_omnitool/action(mob/living/silicon/robot/cyborg, user = usr) +/obj/item/borg/upgrade/engineering_omnitool/action(mob/living/silicon/robot/cyborg, mob/living/user = usr) . = ..() if(!.) - return FALSE + return . for(var/obj/item/borg/cyborg_omnitool/engineering/omnitool_upgrade in cyborg.model.modules) if(omnitool_upgrade.upgraded) to_chat(user, span_warning("This unit is already equipped with an omnitool upgrade!")) return FALSE for(var/obj/item/borg/cyborg_omnitool/engineering/omnitool in cyborg.model.modules) - omnitool.upgrade_omnitool() + omnitool.set_upgraded(TRUE) -/obj/item/borg/upgrade/engineering_omnitool/deactivate(mob/living/silicon/robot/cyborg, user = usr) +/obj/item/borg/upgrade/engineering_omnitool/deactivate(mob/living/silicon/robot/cyborg, mob/living/user = usr) . = ..() if(!.) - return FALSE + return . for(var/obj/item/borg/cyborg_omnitool/omnitool in cyborg.model.modules) - omnitool.downgrade_omnitool() + omnitool.set_upgraded(FALSE) /obj/item/borg/upgrade/defib name = "medical cyborg defibrillator" @@ -502,37 +480,31 @@ model_type = list(/obj/item/robot_model/medical) model_flags = BORG_MODEL_MEDICAL -/obj/item/borg/upgrade/defib/action(mob/living/silicon/robot/R, user = usr) - . = ..() - if(.) - var/obj/item/borg/upgrade/defib/backpack/BP = locate() in R //If a full defib unit was used to upgrade prior, we can just pop it out now and replace - if(BP) - BP.deactivate(R, user) - to_chat(user, span_notice("You remove the defibrillator unit to make room for the compact upgrade.")) - var/obj/item/shockpaddles/cyborg/S = new(R.model) - R.model.basic_modules += S - R.model.add_module(S, FALSE, TRUE) - -/obj/item/borg/upgrade/defib/deactivate(mob/living/silicon/robot/R, user = usr) + items_to_add = list(/obj/item/shockpaddles/cyborg) + +/obj/item/borg/upgrade/defib/action(mob/living/silicon/robot/borg, mob/living/user = usr) . = ..() - if (.) - var/obj/item/shockpaddles/cyborg/S = locate() in R.model - R.model.remove_module(S, TRUE) + if(!.) + return . + var/obj/item/borg/upgrade/defib/backpack/defib_pack = locate() in borg //If a full defib unit was used to upgrade prior, we can just pop it out now and replace + if(defib_pack) + defib_pack.deactivate(borg, user) + to_chat(user, span_notice("The defibrillator pops out of the chassis as the compact upgrade installs.")) ///A version of the above that also acts as a holder of an actual defibrillator item used in place of the upgrade chip. /obj/item/borg/upgrade/defib/backpack var/obj/item/defibrillator/defib_instance -/obj/item/borg/upgrade/defib/backpack/Initialize(mapload, obj/item/defibrillator/D) +/obj/item/borg/upgrade/defib/backpack/Initialize(mapload, obj/item/defibrillator/defib) . = ..() - if(!D) - D = new /obj/item/defibrillator - defib_instance = D + if(isnull(defib)) + defib = new /obj/item/defibrillator + defib_instance = defib name = defib_instance.name defib_instance.moveToNullspace() RegisterSignals(defib_instance, list(COMSIG_QDELETING, COMSIG_MOVABLE_MOVED), PROC_REF(on_defib_instance_qdel_or_moved)) -/obj/item/borg/upgrade/defib/backpack/proc/on_defib_instance_qdel_or_moved(obj/item/defibrillator/D) +/obj/item/borg/upgrade/defib/backpack/proc/on_defib_instance_qdel_or_moved(obj/item/defibrillator/defib) SIGNAL_HANDLER defib_instance = null if(!QDELETED(src)) @@ -543,10 +515,11 @@ QDEL_NULL(defib_instance) return ..() -/obj/item/borg/upgrade/defib/backpack/deactivate(mob/living/silicon/robot/R, user = usr) +/obj/item/borg/upgrade/defib/backpack/deactivate(mob/living/silicon/robot/borg, mob/living/user = usr) . = ..() - if(.) - defib_instance?.forceMove(R.drop_location()) // [on_defib_instance_qdel_or_moved()] handles the rest. + if(!.) + return . + defib_instance?.forceMove(borg.drop_location()) // [on_defib_instance_qdel_or_moved()] handles the rest. /obj/item/borg/upgrade/processor name = "medical cyborg surgical processor" @@ -558,81 +531,70 @@ model_type = list(/obj/item/robot_model/medical, /obj/item/robot_model/syndicate_medical) model_flags = BORG_MODEL_MEDICAL -/obj/item/borg/upgrade/processor/action(mob/living/silicon/robot/R, user = usr) - . = ..() - if(.) - var/obj/item/surgical_processor/SP = new(R.model) - R.model.basic_modules += SP - R.model.add_module(SP, FALSE, TRUE) - -/obj/item/borg/upgrade/processor/deactivate(mob/living/silicon/robot/R, user = usr) - . = ..() - if (.) - var/obj/item/surgical_processor/SP = locate() in R.model - R.model.remove_module(SP, TRUE) + items_to_add = list(/obj/item/surgical_processor) /obj/item/borg/upgrade/ai name = "B.O.R.I.S. module" desc = "Bluespace Optimized Remote Intelligence Synchronization. An uplink device which takes the place of an MMI in cyborg endoskeletons, creating a robotic shell controlled by an AI." icon_state = "boris" -/obj/item/borg/upgrade/ai/action(mob/living/silicon/robot/R, user = usr) +/obj/item/borg/upgrade/ai/action(mob/living/silicon/robot/borg, mob/living/user = usr) . = ..() - if(.) - if(locate(/obj/item/borg/upgrade/ai) in R.upgrades) - to_chat(user, span_warning("This unit is already an AI shell!")) - return FALSE - if(R.key) //You cannot replace a player unless the key is completely removed. - to_chat(user, span_warning("Intelligence patterns detected in this [R.braintype]. Aborting.")) - return FALSE + if(!.) + return . + if(borg.key) //You cannot replace a player unless the key is completely removed. + to_chat(user, span_warning("Intelligence patterns detected in this [borg.braintype]. Aborting.")) + return FALSE - R.make_shell(src) + borg.make_shell(src) -/obj/item/borg/upgrade/ai/deactivate(mob/living/silicon/robot/R, user = usr) +/obj/item/borg/upgrade/ai/deactivate(mob/living/silicon/robot/borg, mob/living/user = usr) . = ..() - if (.) - if(R.shell) - R.undeploy() - R.notify_ai(AI_NOTIFICATION_AI_SHELL) + if(!. || !borg.shell) + return . + + borg.undeploy() + borg.notify_ai(AI_NOTIFICATION_AI_SHELL) /obj/item/borg/upgrade/expand name = "borg expander" desc = "A cyborg resizer, it makes a cyborg huge." icon_state = "cyborg_upgrade3" -/obj/item/borg/upgrade/expand/action(mob/living/silicon/robot/robot, user = usr) +/obj/item/borg/upgrade/expand/action(mob/living/silicon/robot/borg, mob/living/user = usr) . = ..() - if(!. || HAS_TRAIT(robot, TRAIT_NO_TRANSFORM)) + if(!. || HAS_TRAIT(borg, TRAIT_NO_TRANSFORM)) return FALSE - if(robot.hasExpanded) + if(borg.hasExpanded) to_chat(usr, span_warning("This unit already has an expand module installed!")) return FALSE - ADD_TRAIT(robot, TRAIT_NO_TRANSFORM, REF(src)) - var/prev_lockcharge = robot.lockcharge - robot.SetLockdown(TRUE) - robot.set_anchored(TRUE) + ADD_TRAIT(borg, TRAIT_NO_TRANSFORM, REF(src)) + var/prev_lockcharge = borg.lockcharge + borg.SetLockdown(TRUE) + borg.set_anchored(TRUE) var/datum/effect_system/fluid_spread/smoke/smoke = new - smoke.set_up(1, holder = robot, location = robot.loc) + smoke.set_up(1, holder = borg, location = borg.loc) smoke.start() sleep(0.2 SECONDS) for(var/i in 1 to 4) - playsound(robot, pick('sound/items/drill_use.ogg', 'sound/items/jaws_cut.ogg', 'sound/items/jaws_pry.ogg', 'sound/items/welder.ogg', 'sound/items/ratchet.ogg'), 80, TRUE, -1) + playsound(borg, pick('sound/items/drill_use.ogg', 'sound/items/jaws_cut.ogg', 'sound/items/jaws_pry.ogg', 'sound/items/welder.ogg', 'sound/items/ratchet.ogg'), 80, TRUE, -1) sleep(1.2 SECONDS) if(!prev_lockcharge) - robot.SetLockdown(FALSE) - robot.set_anchored(FALSE) - REMOVE_TRAIT(robot, TRAIT_NO_TRANSFORM, REF(src)) - robot.hasExpanded = TRUE - robot.update_transform(2) + borg.SetLockdown(FALSE) + borg.set_anchored(FALSE) + REMOVE_TRAIT(borg, TRAIT_NO_TRANSFORM, REF(src)) + borg.hasExpanded = TRUE + borg.update_transform(2) -/obj/item/borg/upgrade/expand/deactivate(mob/living/silicon/robot/R, user = usr) +/obj/item/borg/upgrade/expand/deactivate(mob/living/silicon/robot/borg, mob/living/user = usr) . = ..() - if (.) - if (R.hasExpanded) - R.hasExpanded = FALSE - R.update_transform(0.5) + if(!.) + return . + if (borg.hasExpanded) + borg.hasExpanded = FALSE + borg.update_transform(0.5) /obj/item/borg/upgrade/rped name = "engineering cyborg RPED" @@ -643,24 +605,7 @@ model_type = list(/obj/item/robot_model/engineering, /obj/item/robot_model/saboteur) model_flags = BORG_MODEL_ENGINEERING -/obj/item/borg/upgrade/rped/action(mob/living/silicon/robot/R, user = usr) - . = ..() - if(.) - var/obj/item/storage/part_replacer/cyborg/RPED = locate() in R - if(RPED) - to_chat(user, span_warning("This unit is already equipped with a RPED module!")) - return FALSE - - RPED = new(R.model) - R.model.basic_modules += RPED - R.model.add_module(RPED, FALSE, TRUE) - -/obj/item/borg/upgrade/rped/deactivate(mob/living/silicon/robot/R, user = usr) - . = ..() - if (.) - var/obj/item/storage/part_replacer/cyborg/RPED = locate() in R.model - if (RPED) - R.model.remove_module(RPED, TRUE) + items_to_add = list(/obj/item/storage/part_replacer/cyborg) /obj/item/borg/upgrade/inducer name = "engineering integrated power inducer" @@ -669,24 +614,7 @@ model_type = list(/obj/item/robot_model/engineering, /obj/item/robot_model/saboteur) model_flags = BORG_MODEL_ENGINEERING -/obj/item/borg/upgrade/inducer/action(mob/living/silicon/robot/silicon_friend, user = usr) - . = ..() - if(.) - var/obj/item/inducer/cyborg/inter_inducer = locate() in silicon_friend - if(inter_inducer) - silicon_friend.balloon_alert(user, "already has one!") - return FALSE - - inter_inducer = new(silicon_friend.model) - silicon_friend.model.basic_modules += inter_inducer - silicon_friend.model.add_module(inter_inducer, FALSE, TRUE) - -/obj/item/borg/upgrade/inducer/deactivate(mob/living/silicon/robot/silicon_friend, user = usr) - . = ..() - if(.) - var/obj/item/inducer/cyborg/inter_inducer = locate() in silicon_friend.model - if(inter_inducer) - silicon_friend.model.remove_module(inter_inducer, TRUE) + items_to_add = list(/obj/item/inducer/cyborg) /obj/item/inducer/cyborg name = "Internal inducer" @@ -711,39 +639,32 @@ require_model = TRUE model_type = list(/obj/item/robot_model/medical, /obj/item/robot_model/syndicate_medical) model_flags = BORG_MODEL_MEDICAL + + items_to_add = list(/obj/item/pinpointer/crew) var/datum/action/crew_monitor -/obj/item/borg/upgrade/pinpointer/action(mob/living/silicon/robot/R, user = usr) +/obj/item/borg/upgrade/pinpointer/action(mob/living/silicon/robot/borg, mob/living/user = usr) . = ..() - if(.) - - var/obj/item/pinpointer/crew/PP = locate() in R.model - if(PP) - to_chat(user, span_warning("This unit is already equipped with a pinpointer module!")) - return FALSE - - PP = new(R.model) - R.model.basic_modules += PP - R.model.add_module(PP, FALSE, TRUE) - crew_monitor = new /datum/action/item_action/crew_monitor(src) - crew_monitor.Grant(R) - icon_state = "scanner" + if(!.) + return . + crew_monitor = new /datum/action/item_action/crew_monitor(src) + crew_monitor.Grant(borg) + icon_state = "scanner" -/obj/item/borg/upgrade/pinpointer/deactivate(mob/living/silicon/robot/R, user = usr) +/obj/item/borg/upgrade/pinpointer/deactivate(mob/living/silicon/robot/borg, mob/living/user = usr) . = ..() - if (.) - icon_state = "pinpointer_crew" - crew_monitor.Remove(R) - QDEL_NULL(crew_monitor) - var/obj/item/pinpointer/crew/PP = locate() in R.model - R.model.remove_module(PP, TRUE) + if(!.) + return . + icon_state = "pinpointer_crew" + crew_monitor.Remove(borg) + QDEL_NULL(crew_monitor) /obj/item/borg/upgrade/pinpointer/ui_action_click() if(..()) return - var/mob/living/silicon/robot/Cyborg = usr - GLOB.crewmonitor.show(Cyborg,Cyborg) + var/mob/living/silicon/robot/borg = usr + GLOB.crewmonitor.show(borg,borg) /datum/action/item_action/crew_monitor name = "Interface With Crew Monitor" @@ -754,10 +675,10 @@ icon_state = "cyborg_upgrade3" var/obj/item/robot_model/new_model = null -/obj/item/borg/upgrade/transform/action(mob/living/silicon/robot/R, user = usr) +/obj/item/borg/upgrade/transform/action(mob/living/silicon/robot/borg, mob/living/user = usr) . = ..() if(. && new_model) - R.model.transform_to(new_model) + borg.model.transform_to(new_model) /obj/item/borg/upgrade/transform/clown name = "borg model picker (Clown)" @@ -773,24 +694,7 @@ model_type = list(/obj/item/robot_model/engineering, /obj/item/robot_model/saboteur) model_flags = BORG_MODEL_ENGINEERING -/obj/item/borg/upgrade/circuit_app/action(mob/living/silicon/robot/R, user = usr) - . = ..() - if(.) - var/obj/item/borg/apparatus/circuit/C = locate() in R.model.modules - if(C) - to_chat(user, span_warning("This unit is already equipped with a circuit apparatus!")) - return FALSE - - C = new(R.model) - R.model.basic_modules += C - R.model.add_module(C, FALSE, TRUE) - -/obj/item/borg/upgrade/circuit_app/deactivate(mob/living/silicon/robot/R, user = usr) - . = ..() - if (.) - var/obj/item/borg/apparatus/circuit/C = locate() in R.model.modules - if (C) - R.model.remove_module(C, TRUE) + items_to_add = list(/obj/item/borg/apparatus/circuit) /obj/item/borg/upgrade/beaker_app name = "beaker storage apparatus" @@ -800,24 +704,7 @@ model_type = list(/obj/item/robot_model/medical) model_flags = BORG_MODEL_MEDICAL -/obj/item/borg/upgrade/beaker_app/action(mob/living/silicon/robot/R, user = usr) - . = ..() - if(.) - var/obj/item/borg/apparatus/beaker/extra/E = locate() in R.model.modules - if(E) - to_chat(user, span_warning("This unit has no room for additional beaker storage!")) - return FALSE - - E = new(R.model) - R.model.basic_modules += E - R.model.add_module(E, FALSE, TRUE) - -/obj/item/borg/upgrade/beaker_app/deactivate(mob/living/silicon/robot/R, user = usr) - . = ..() - if (.) - var/obj/item/borg/apparatus/beaker/extra/E = locate() in R.model.modules - if (E) - R.model.remove_module(E, TRUE) + items_to_add = list(/obj/item/borg/apparatus/beaker/extra) /obj/item/borg/upgrade/drink_app name = "glass storage apparatus" @@ -827,24 +714,7 @@ model_type = list(/obj/item/robot_model/service) model_flags = BORG_MODEL_SERVICE -/obj/item/borg/upgrade/drink_app/action(mob/living/silicon/robot/R, user = usr) - . = ..() - if(.) - var/obj/item/borg/apparatus/beaker/drink/E = locate() in R.model.modules - if(E) - to_chat(user, span_warning("This unit has no room for additional drink storage!")) - return FALSE - - E = new(R.model) - R.model.basic_modules += E - R.model.add_module(E, FALSE, TRUE) - -/obj/item/borg/upgrade/drink_app/deactivate(mob/living/silicon/robot/R, user = usr) - . = ..() - if (.) - var/obj/item/borg/apparatus/beaker/drink/E = locate() in R.model.modules - if (E) - R.model.remove_module(E, TRUE) + items_to_add = list(/obj/item/borg/apparatus/beaker/drink) /obj/item/borg/upgrade/broomer name = "experimental push broom" @@ -854,25 +724,7 @@ model_type = list(/obj/item/robot_model/janitor) model_flags = BORG_MODEL_JANITOR -/obj/item/borg/upgrade/broomer/action(mob/living/silicon/robot/R, user = usr) - . = ..() - if (!.) - return - var/obj/item/pushbroom/cyborg/BR = locate() in R.model.modules - if (BR) - to_chat(user, span_warning("This janiborg is already equipped with an experimental broom!")) - return FALSE - BR = new(R.model) - R.model.basic_modules += BR - R.model.add_module(BR, FALSE, TRUE) - -/obj/item/borg/upgrade/broomer/deactivate(mob/living/silicon/robot/R, user = usr) - . = ..() - if (!.) - return - var/obj/item/pushbroom/cyborg/BR = locate() in R.model.modules - if (BR) - R.model.remove_module(BR, TRUE) + items_to_add = list(/obj/item/pushbroom/cyborg) /obj/item/borg/upgrade/condiment_synthesizer name = "Service Cyborg Condiment Synthesiser" @@ -882,25 +734,7 @@ model_type = list(/obj/item/robot_model/service) model_flags = BORG_MODEL_SERVICE -/obj/item/borg/upgrade/condiment_synthesizer/action(mob/living/silicon/robot/install, user = usr) - . = ..() - if(!.) - return FALSE - var/obj/item/reagent_containers/borghypo/condiment_synthesizer/cynthesizer = locate() in install.model.modules - if(cynthesizer) - install.balloon_alert_to_viewers("already installed!") - return FALSE - cynthesizer = new(install.model) - install.model.basic_modules += cynthesizer - install.model.add_module(cynthesizer, FALSE, TRUE) - -/obj/item/borg/upgrade/condiment_synthesizer/deactivate(mob/living/silicon/robot/install, user = usr) - . = ..() - if (!.) - return FALSE - var/obj/item/reagent_containers/borghypo/condiment_synthesizer/cynthesizer = locate() in install.model.modules - if (cynthesizer) - install.model.remove_module(cynthesizer, TRUE) + items_to_add = list(/obj/item/reagent_containers/borghypo/condiment_synthesizer) /obj/item/borg/upgrade/silicon_knife name = "Service Cyborg Kitchen Toolset" @@ -910,25 +744,7 @@ model_type = list(/obj/item/robot_model/service) model_flags = BORG_MODEL_SERVICE -/obj/item/borg/upgrade/silicon_knife/action(mob/living/silicon/robot/install, user = usr) - . = ..() - if(!.) - return FALSE - var/obj/item/knife/kitchen/silicon/snife = locate() in install.model.modules - if(snife) - install.balloon_alert_to_viewers("already installed!") - return FALSE - snife = new(install.model) - install.model.basic_modules += snife - install.model.add_module(snife, FALSE, TRUE) - -/obj/item/borg/upgrade/silicon_knife/deactivate(mob/living/silicon/robot/install, user = usr) - . = ..() - if (!.) - return FALSE - var/obj/item/knife/kitchen/silicon/snife = locate() in install.model.modules - if (snife) - install.model.remove_module(snife, TRUE) + items_to_add = list(/obj/item/knife/kitchen/silicon) /obj/item/borg/upgrade/service_apparatus name = "Service Cyborg Service Apparatus" @@ -938,25 +754,7 @@ model_type = list(/obj/item/robot_model/service) model_flags = BORG_MODEL_SERVICE -/obj/item/borg/upgrade/service_apparatus/action(mob/living/silicon/robot/install, user = usr) - . = ..() - if(!.) - return FALSE - var/obj/item/borg/apparatus/service/saparatus = locate() in install.model.modules - if(saparatus) - install.balloon_alert_to_viewers("already installed!") - return FALSE - saparatus = new(install.model) - install.model.basic_modules += saparatus - install.model.add_module(saparatus, FALSE, TRUE) - -/obj/item/borg/upgrade/service_apparatus/deactivate(mob/living/silicon/robot/install, user = usr) - . = ..() - if (!.) - return FALSE - var/obj/item/borg/apparatus/service/saparatus = locate() in install.model.modules - if (saparatus) - install.model.remove_module(saparatus, TRUE) + items_to_add = list(/obj/item/borg/apparatus/service) /obj/item/borg/upgrade/rolling_table name = "Service Cyborg Rolling Table Dock" @@ -966,25 +764,7 @@ model_type = list(/obj/item/robot_model/service) model_flags = BORG_MODEL_SERVICE -/obj/item/borg/upgrade/rolling_table/action(mob/living/silicon/robot/install, user = usr) - . = ..() - if(!.) - return FALSE - var/obj/item/rolling_table_dock/rtable = locate() in install.model.modules - if(rtable) - install.balloon_alert_to_viewers("already installed!") - return FALSE - rtable = new(install.model) - install.model.basic_modules += rtable - install.model.add_module(rtable, FALSE, TRUE) - -/obj/item/borg/upgrade/rolling_table/deactivate(mob/living/silicon/robot/install, user = usr) - . = ..() - if (!.) - return FALSE - var/obj/item/rolling_table_dock/rtable = locate() in install.model.modules - if (rtable) - install.model.remove_module(rtable, TRUE) + items_to_add = list(/obj/item/rolling_table_dock) /obj/item/borg/upgrade/service_cookbook name = "Service Cyborg Cookbook" @@ -994,25 +774,7 @@ model_type = list(/obj/item/robot_model/service) model_flags = BORG_MODEL_SERVICE -/obj/item/borg/upgrade/service_cookbook/action(mob/living/silicon/robot/install, user = usr) - . = ..() - if(!.) - return FALSE - var/obj/item/borg/cookbook/book = locate() in install.model.modules - if(book) - install.balloon_alert_to_viewers("already installed!") - return FALSE - book = new(install.model) - install.model.basic_modules += book - install.model.add_module(book, FALSE, TRUE) - -/obj/item/borg/upgrade/service_cookbook/deactivate(mob/living/silicon/robot/install, user = usr) - . = ..() - if (!.) - return FALSE - var/obj/item/borg/cookbook/book = locate() in install.model.modules - if(book) - install.model.remove_module(book, TRUE) + items_to_add = list(/obj/item/borg/cookbook) ///This isn't an upgrade or part of the same path, but I'm gonna just stick it here because it's a tool used on cyborgs. //A reusable tool that can bring borgs back to life. They gotta be repaired first, though. diff --git a/code/game/objects/items/rollertable_dock.dm b/code/game/objects/items/rollertable_dock.dm index 222c8287ac93a..d0067e8c67596 100644 --- a/code/game/objects/items/rollertable_dock.dm +++ b/code/game/objects/items/rollertable_dock.dm @@ -26,13 +26,14 @@ user.visible_message(span_notice("[user] collects [src]."), balloon_alert(user, "you collect the [src].")) return TRUE -/obj/item/rolling_table_dock/afterattack(obj/target, mob/user , proximity) - . = ..() - var/turf/target_turf = get_turf(target) - if(!proximity || target_turf.is_blocked_turf(TRUE) || locate(/mob/living) in target_turf) - return - if(isopenturf(target)) - deploy_rolling_table(user, target) +/obj/item/rolling_table_dock/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + var/turf/target_turf = get_turf(interacting_with) + if(target_turf.is_blocked_turf(TRUE) || (locate(/mob/living) in target_turf)) + return NONE + if(isopenturf(interacting_with)) + deploy_rolling_table(user, interacting_with) + return ITEM_INTERACT_SUCCESS + return NONE /obj/item/rolling_table_dock/proc/deploy_rolling_table(mob/user, atom/location) var/obj/structure/table/rolling/rable = new /obj/structure/table/rolling(location) diff --git a/code/game/objects/items/shrapnel.dm b/code/game/objects/items/shrapnel.dm index c07bc780c9128..9b024cfbb97a2 100644 --- a/code/game/objects/items/shrapnel.dm +++ b/code/game/objects/items/shrapnel.dm @@ -31,6 +31,7 @@ shrapnel_type = /obj/item/shrapnel ricochet_incidence_leeway = 60 hit_prone_targets = TRUE + ignore_range_hit_prone_targets = TRUE sharpness = SHARP_EDGED wound_bonus = 30 embedding = list(embed_chance=70, ignore_throwspeed_threshold=TRUE, fall_chance=1) @@ -73,6 +74,7 @@ /obj/projectile/bullet/pellet/stingball/on_ricochet(atom/A) hit_prone_targets = TRUE // ducking will save you from the first wave, but not the rebounds + ignore_range_hit_prone_targets = TRUE /obj/projectile/bullet/pellet/stingball/mega name = "megastingball pellet" diff --git a/code/game/objects/items/signs.dm b/code/game/objects/items/signs.dm index 3bf5c36048b31..85a71dc0e8f75 100644 --- a/code/game/objects/items/signs.dm +++ b/code/game/objects/items/signs.dm @@ -30,7 +30,7 @@ desc = "It reads: [label]" /obj/item/picket_sign/attackby(obj/item/W, mob/user, params) - if(istype(W, /obj/item/pen) || istype(W, /obj/item/toy/crayon)) + if(IS_WRITING_UTENSIL(W)) retext(user, W) else return ..() diff --git a/code/game/objects/items/spear.dm b/code/game/objects/items/spear.dm index f4c0b58a11bbe..66e96bcab4b83 100644 --- a/code/game/objects/items/spear.dm +++ b/code/game/objects/items/spear.dm @@ -167,30 +167,27 @@ return CLICK_ACTION_SUCCESS -/obj/item/spear/explosive/afterattack(atom/movable/AM, mob/user, proximity) - . = ..() - if(!proximity || !HAS_TRAIT(src, TRAIT_WIELDED) || !istype(AM)) +/obj/item/spear/explosive/afterattack(atom/movable/target, mob/user, click_parameters) + if(!HAS_TRAIT(src, TRAIT_WIELDED) || !istype(target)) + return + if(target.resistance_flags & INDESTRUCTIBLE) //due to the lich incident of 2021, embedding grenades inside of indestructible structures is forbidden return - . |= AFTERATTACK_PROCESSED_ITEM - if(AM.resistance_flags & INDESTRUCTIBLE) //due to the lich incident of 2021, embedding grenades inside of indestructible structures is forbidden - return . - if(ismob(AM)) - var/mob/mob_target = AM + if(ismob(target)) + var/mob/mob_target = target if(mob_target.status_flags & GODMODE) //no embedding grenade phylacteries inside of ghost poly either - return . - if(iseffect(AM)) //and no accidentally wasting your moment of glory on graffiti - return . + return + if(iseffect(target)) //and no accidentally wasting your moment of glory on graffiti + return user.say("[war_cry]", forced="spear warcry") if(isliving(user)) var/mob/living/living_user = user living_user.set_resting(new_resting = TRUE, silent = TRUE, instant = TRUE) - living_user.Move(get_turf(AM)) + living_user.Move(get_turf(target)) explosive.forceMove(get_turf(living_user)) explosive.detonate(lanced_by=user) if(!QDELETED(living_user)) living_user.set_resting(new_resting = FALSE, silent = TRUE, instant = TRUE) qdel(src) - return . //GREY TIDE /obj/item/spear/grey_tide @@ -201,20 +198,18 @@ force_unwielded = 15 force_wielded = 25 -/obj/item/spear/grey_tide/afterattack(atom/movable/AM, mob/living/user, proximity) - . = ..() - if(!proximity) - return +/obj/item/spear/grey_tide/afterattack(atom/movable/target, mob/living/user, click_parameters) user.faction |= "greytide([REF(user)])" - if(isliving(AM)) - var/mob/living/L = AM - if(istype (L, /mob/living/simple_animal/hostile/illusion)) - return - if(!L.stat && prob(50)) - var/mob/living/simple_animal/hostile/illusion/M = new(user.loc) - M.faction = user.faction.Copy() - M.Copy_Parent(user, 100, user.health/2.5, 12, 30) - M.GiveTarget(L) + if(!isliving(target)) + return + var/mob/living/stabbed = target + if(istype(stabbed, /mob/living/simple_animal/hostile/illusion)) + return + if(stabbed.stat == CONSCIOUS && prob(50)) + var/mob/living/simple_animal/hostile/illusion/fake_clone = new(user.loc) + fake_clone.faction = user.faction.Copy() + fake_clone.Copy_Parent(user, 100, user.health/2.5, 12, 30) + fake_clone.GiveTarget(stabbed) //MILITARY /obj/item/spear/military diff --git a/code/game/objects/items/stacks/bscrystal.dm b/code/game/objects/items/stacks/bscrystal.dm index 4e8a01971bac0..410724862f3b5 100644 --- a/code/game/objects/items/stacks/bscrystal.dm +++ b/code/game/objects/items/stacks/bscrystal.dm @@ -33,7 +33,7 @@ /obj/item/stack/ore/bluespace_crystal/attack_self(mob/user) user.visible_message(span_warning("[user] crushes [src]!"), span_danger("You crush [src]!")) new /obj/effect/particle_effect/sparks(loc) - playsound(loc, SFX_SPARKS, 50, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) + playsound(loc, SFX_PORTAL_ENTER, 50, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) blink_mob(user) use(1) @@ -45,7 +45,7 @@ visible_message(span_notice("[src] fizzles and disappears upon impact!")) var/turf/T = get_turf(hit_atom) new /obj/effect/particle_effect/sparks(T) - playsound(loc, SFX_SPARKS, 50, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) + playsound(loc, SFX_PORTAL_ENTER, 50, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) if(isliving(hit_atom)) blink_mob(hit_atom) use(1) diff --git a/code/game/objects/items/stacks/golem_food/golem_hand_actions.dm b/code/game/objects/items/stacks/golem_food/golem_hand_actions.dm index 39c17d2346c6a..e4b65e033975e 100644 --- a/code/game/objects/items/stacks/golem_food/golem_hand_actions.dm +++ b/code/game/objects/items/stacks/golem_food/golem_hand_actions.dm @@ -26,20 +26,23 @@ held_gibtonite.forceMove(src) addtimer(CALLBACK(src, PROC_REF(release_gibtonite)), GIBTONITE_GOLEM_HOLD_TIME, TIMER_DELETE_ME) -/obj/item/gibtonite_hand/afterattack(atom/target, mob/living/user, flag, params) - . = ..() +/obj/item/gibtonite_hand/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + return ranged_interact_with_atom(interacting_with, user, modifiers) + +/obj/item/gibtonite_hand/ranged_interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) if (!held_gibtonite) to_chat(user, span_warning("[src] fizzles, it was a dud!")) qdel(src) - return TRUE | AFTERATTACK_PROCESSED_ITEM + return ITEM_INTERACT_BLOCKING + playsound(src, 'sound/weapons/sonic_jackhammer.ogg', 50, TRUE) held_gibtonite.forceMove(get_turf(src)) held_gibtonite.det_time = 2 SECONDS - held_gibtonite.GibtoniteReaction(user, "A [src] has targeted [target] with a thrown and primed") - held_gibtonite.throw_at(target, range = 10, speed = 3, thrower = user) + held_gibtonite.GibtoniteReaction(user, "A [src] has targeted [interacting_with] with a thrown and primed") + held_gibtonite.throw_at(interacting_with, range = 10, speed = 3, thrower = user) held_gibtonite = null qdel(src) - return TRUE | AFTERATTACK_PROCESSED_ITEM + return ITEM_INTERACT_SUCCESS /// Called when you can't hold it in any longer and just drop it on the ground /obj/item/gibtonite_hand/proc/release_gibtonite() @@ -69,15 +72,17 @@ /// How accurate are you? var/teleport_vary = 2 -/obj/item/bluespace_finger/afterattack(atom/target, mob/living/user, flag, params) - . = ..() - var/turf/target_turf = get_turf(target) +/obj/item/bluespace_finger/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + return ranged_interact_with_atom(interacting_with, user, modifiers) + +/obj/item/bluespace_finger/ranged_interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + var/turf/target_turf = get_turf(interacting_with) if (get_dist(target_turf, get_turf(src)) > teleport_range) balloon_alert(user, "too far!") - return TRUE | AFTERATTACK_PROCESSED_ITEM + return ITEM_INTERACT_BLOCKING if (target_turf.is_blocked_turf(exclude_mobs = TRUE)) balloon_alert(user, "no room!") - return TRUE | AFTERATTACK_PROCESSED_ITEM + return ITEM_INTERACT_BLOCKING var/obj/effect/temp_visual/teleport_golem/landing_indicator = new(target_turf) user.add_filter(BLUESPACE_GLOW_FILTER, 2, list("type" = "outline", "color" = COLOR_BRIGHT_BLUE, "alpha" = 0, "size" = 1)) @@ -89,7 +94,7 @@ qdel(landing_indicator) user.remove_filter(BLUESPACE_GLOW_FILTER) if (!did_teleport) - return + return ITEM_INTERACT_BLOCKING var/list/valid_landing_tiles = list(target_turf) for (var/turf/potential_landing in oview(teleport_vary, target_turf)) @@ -101,6 +106,7 @@ telefrag.Knockdown(2 SECONDS) do_teleport(user, final_destination, asoundin = 'sound/effects/phasein.ogg', no_effects = TRUE) qdel(src) + return ITEM_INTERACT_SUCCESS #undef GIBTONITE_GOLEM_HOLD_TIME #undef BLUESPACE_GLOW_FILTER diff --git a/code/game/objects/items/stacks/golem_food/golem_status_effects.dm b/code/game/objects/items/stacks/golem_food/golem_status_effects.dm index bf2c628ab972c..f54a83a8d8ec5 100644 --- a/code/game/objects/items/stacks/golem_food/golem_status_effects.dm +++ b/code/game/objects/items/stacks/golem_food/golem_status_effects.dm @@ -3,6 +3,7 @@ id = "golem_status" duration = 5 MINUTES alert_type = /atom/movable/screen/alert/status_effect/golem_status + show_duration = TRUE /// Icon state prefix for overlay to display on golem limbs var/overlay_state_prefix /// Name of the mineral we ate to get this @@ -294,7 +295,7 @@ /// Make our arm do slashing effects /datum/status_effect/golem/diamond/proc/set_arm_fluff(obj/item/bodypart/arm/arm) - arm.unarmed_attack_verb = "slash" + arm.unarmed_attack_verbs = list("slash") arm.grappled_attack_verb = "lacerate" arm.unarmed_attack_effect = ATTACK_EFFECT_CLAW arm.unarmed_attack_sound = 'sound/weapons/slash.ogg' @@ -315,7 +316,7 @@ /datum/status_effect/golem/diamond/proc/reset_arm_fluff(obj/item/bodypart/arm/arm) if (!arm) return - arm.unarmed_attack_verb = initial(arm.unarmed_attack_verb) + arm.unarmed_attack_verbs = initial(arm.unarmed_attack_verbs) arm.unarmed_attack_effect = initial(arm.unarmed_attack_effect) arm.unarmed_attack_sound = initial(arm.unarmed_attack_sound) arm.unarmed_miss_sound = initial(arm.unarmed_miss_sound) diff --git a/code/game/objects/items/stacks/medical.dm b/code/game/objects/items/stacks/medical.dm index 59c65411805d8..d76861b6c4932 100644 --- a/code/game/objects/items/stacks/medical.dm +++ b/code/game/objects/items/stacks/medical.dm @@ -182,8 +182,8 @@ if(!try_heal_checks(patient, user, brute, burn)) return FALSE user.visible_message( - span_infoplain(span_green("[user] applies [src] on [patient]'s [parse_zone(affecting.body_zone)].")), - span_infoplain(span_green("You apply [src] on [patient]'s [parse_zone(affecting.body_zone)].")) + span_infoplain(span_green("[user] applies [src] on [patient]'s [affecting.plaintext_zone].")), + span_infoplain(span_green("You apply [src] on [patient]'s [affecting.plaintext_zone].")) ) var/previous_damage = affecting.get_damage() if(affecting.heal_damage(brute, burn)) diff --git a/code/game/objects/items/stacks/rods.dm b/code/game/objects/items/stacks/rods.dm index 064f933573ca3..82f19d09d9692 100644 --- a/code/game/objects/items/stacks/rods.dm +++ b/code/game/objects/items/stacks/rods.dm @@ -1,19 +1,20 @@ GLOBAL_LIST_INIT(rod_recipes, list ( \ - new/datum/stack_recipe("grille", /obj/structure/grille, 2, time = 1 SECONDS, one_per_turf = TRUE, on_solid_ground = FALSE, check_density = FALSE, category = CAT_STRUCTURE), \ - new/datum/stack_recipe("table frame", /obj/structure/table_frame, 2, time = 1 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_FURNITURE), \ - new/datum/stack_recipe("scooter frame", /obj/item/scooter_frame, 10, time = 2.5 SECONDS, one_per_turf = FALSE, category = CAT_ENTERTAINMENT), \ - new/datum/stack_recipe("linen bin", /obj/structure/bedsheetbin/empty, 2, time = 0.5 SECONDS, one_per_turf = FALSE, category = CAT_CONTAINERS), \ - new/datum/stack_recipe("railing", /obj/structure/railing, 2, time = 1 SECONDS, check_direction = TRUE, category = CAT_STRUCTURE), \ - new/datum/stack_recipe("railing corner", /obj/structure/railing/corner, 1, time = 1 SECONDS, check_direction = TRUE, category = CAT_STRUCTURE), \ - new/datum/stack_recipe("railing end", /obj/structure/railing/corner/end, 1, time = 1 SECONDS, check_direction = TRUE, category = CAT_STRUCTURE), \ - new/datum/stack_recipe("railing end (flipped)", /obj/structure/railing/corner/end/flip, 1, time = 1 SECONDS, check_direction = TRUE, category = CAT_STRUCTURE), \ - new/datum/stack_recipe("tank holder", /obj/structure/tank_holder, 2, time = 0.5 SECONDS, one_per_turf = TRUE, on_solid_ground = FALSE, check_density = FALSE, category = CAT_FURNITURE), \ - new/datum/stack_recipe("ladder", /obj/structure/ladder/crafted, 15, time = 15 SECONDS, one_per_turf = TRUE, on_solid_ground = FALSE, check_density = FALSE, category = CAT_STRUCTURE), \ + new/datum/stack_recipe("grille", /obj/structure/grille, 2, time = 1 SECONDS, crafting_flags = CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_STRUCTURE), \ + new/datum/stack_recipe("table frame", /obj/structure/table_frame, 2, time = 1 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_FURNITURE), \ + new/datum/stack_recipe("scooter frame", /obj/item/scooter_frame, 10, time = 2.5 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY, category = CAT_ENTERTAINMENT), \ + new/datum/stack_recipe("linen bin", /obj/structure/bedsheetbin/empty, 2, time = 0.5 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY, category = CAT_CONTAINERS), \ + new/datum/stack_recipe("railing", /obj/structure/railing, 2, time = 1 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_CHECK_DIRECTION, category = CAT_STRUCTURE), \ + new/datum/stack_recipe("railing corner", /obj/structure/railing/corner, 1, time = 1 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_CHECK_DIRECTION, category = CAT_STRUCTURE), \ + new/datum/stack_recipe("railing end", /obj/structure/railing/corner/end, 1, time = 1 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_CHECK_DIRECTION, category = CAT_STRUCTURE), \ + new/datum/stack_recipe("railing end (flipped)", /obj/structure/railing/corner/end/flip, 1, time = 1 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_CHECK_DIRECTION, category = CAT_STRUCTURE), \ + new/datum/stack_recipe("tank holder", /obj/structure/tank_holder, 2, time = 0.5 SECONDS, crafting_flags = CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_FURNITURE), \ + new/datum/stack_recipe("ladder", /obj/structure/ladder/crafted, 15, time = 15 SECONDS, crafting_flags = CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_STRUCTURE), \ new/datum/stack_recipe("catwalk floor tile", /obj/item/stack/tile/catwalk_tile, 1, 4, 20, category = CAT_TILES), \ - new/datum/stack_recipe("stairs frame", /obj/structure/stairs_frame, 10, time = 5 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_STRUCTURE), \ - new/datum/stack_recipe("white cane", /obj/item/cane/white, 3, time = 1 SECONDS, one_per_turf = FALSE, category = CAT_TOOLS), \ - new/datum/stack_recipe("sharpened iron rod", /obj/item/ammo_casing/rebar, 1, time = 0.2 SECONDS, one_per_turf = FALSE, category = CAT_WEAPON_AMMO), \ + new/datum/stack_recipe("stairs frame", /obj/structure/stairs_frame, 10, time = 5 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_STRUCTURE), \ + new/datum/stack_recipe("probing cane", /obj/item/cane/white, 3, time = 1 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY, category = CAT_TOOLS), \ + new/datum/stack_recipe("sharpened iron rod", /obj/item/ammo_casing/rebar, 1, time = 0.2 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY, category = CAT_WEAPON_AMMO), \ )) + /obj/item/stack/rods name = "iron rod" desc = "Some rods. Can be used for building or something." @@ -62,9 +63,8 @@ GLOBAL_LIST_INIT(rod_recipes, list ( \ slapcraft_recipes = slapcraft_recipe_list,\ ) -/obj/item/stack/rods/handle_openspace_click(turf/target, mob/user, proximity_flag, click_parameters) - if(proximity_flag) - target.attackby(src, user, click_parameters) +/obj/item/stack/rods/handle_openspace_click(turf/target, mob/user, list/modifiers) + target.attackby(src, user, list2params(modifiers)) /obj/item/stack/rods/get_main_recipes() . = ..() diff --git a/code/game/objects/items/stacks/sheets/glass.dm b/code/game/objects/items/stacks/sheets/glass.dm index 1f66b80cf55b7..59196639ffeba 100644 --- a/code/game/objects/items/stacks/sheets/glass.dm +++ b/code/game/objects/items/stacks/sheets/glass.dm @@ -9,9 +9,9 @@ * Glass sheets */ GLOBAL_LIST_INIT(glass_recipes, list ( \ - new/datum/stack_recipe("directional window", /obj/structure/window/unanchored, time = 0.5 SECONDS, on_solid_ground = TRUE, check_direction = TRUE, category = CAT_WINDOWS), \ - new/datum/stack_recipe("fulltile window", /obj/structure/window/fulltile/unanchored, 2, time = 1 SECONDS, on_solid_ground = TRUE, is_fulltile = TRUE, category = CAT_WINDOWS), \ - new/datum/stack_recipe("glass shard", /obj/item/shard, time = 0, on_solid_ground = TRUE, category = CAT_MISC), \ + new/datum/stack_recipe("directional window", /obj/structure/window/unanchored, time = 0.5 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ON_SOLID_GROUND | CRAFT_CHECK_DIRECTION, category = CAT_WINDOWS), \ + new/datum/stack_recipe("fulltile window", /obj/structure/window/fulltile/unanchored, 2, time = 1 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ON_SOLID_GROUND | CRAFT_IS_FULLTILE, category = CAT_WINDOWS), \ + new/datum/stack_recipe("glass shard", /obj/item/shard, time = 0, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ON_SOLID_GROUND, category = CAT_MISC), \ new/datum/stack_recipe("glass tile", /obj/item/stack/tile/glass, 1, 4, 20, category = CAT_TILES) \ )) @@ -82,9 +82,9 @@ GLOBAL_LIST_INIT(glass_recipes, list ( \ return ..() GLOBAL_LIST_INIT(pglass_recipes, list ( \ - new/datum/stack_recipe("directional window", /obj/structure/window/plasma/unanchored, time = 0.5 SECONDS, on_solid_ground = TRUE, check_direction = TRUE, category = CAT_WINDOWS), \ - new/datum/stack_recipe("fulltile window", /obj/structure/window/plasma/fulltile/unanchored, 2, time = 2 SECONDS, on_solid_ground = TRUE, is_fulltile = TRUE, category = CAT_WINDOWS), \ - new/datum/stack_recipe("plasma glass shard", /obj/item/shard/plasma, time = 20, on_solid_ground = TRUE, category = CAT_MISC), \ + new/datum/stack_recipe("directional window", /obj/structure/window/plasma/unanchored, time = 0.5 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ON_SOLID_GROUND | CRAFT_CHECK_DIRECTION, category = CAT_WINDOWS), \ + new/datum/stack_recipe("fulltile window", /obj/structure/window/plasma/fulltile/unanchored, 2, time = 2 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ON_SOLID_GROUND | CRAFT_IS_FULLTILE, category = CAT_WINDOWS), \ + new/datum/stack_recipe("plasma glass shard", /obj/item/shard/plasma, time = 20, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ON_SOLID_GROUND, category = CAT_MISC), \ new/datum/stack_recipe("plasma glass tile", /obj/item/stack/tile/glass/plasma, 1, 4, 20, category = CAT_TILES) \ )) @@ -138,11 +138,11 @@ GLOBAL_LIST_INIT(pglass_recipes, list ( \ * Reinforced glass sheets */ GLOBAL_LIST_INIT(reinforced_glass_recipes, list ( \ - new/datum/stack_recipe("windoor frame", /obj/structure/windoor_assembly, 5, time = 0, on_solid_ground = TRUE, check_direction = TRUE, category = CAT_WINDOWS), \ + new/datum/stack_recipe("windoor frame", /obj/structure/windoor_assembly, 5, time = 0, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ON_SOLID_GROUND | CRAFT_CHECK_DIRECTION, category = CAT_WINDOWS), \ null, \ - new/datum/stack_recipe("directional reinforced window", /obj/structure/window/reinforced/unanchored, time = 0.5 SECONDS, on_solid_ground = TRUE, check_direction = TRUE, category = CAT_WINDOWS), \ - new/datum/stack_recipe("fulltile reinforced window", /obj/structure/window/reinforced/fulltile/unanchored, 2, time = 2 SECONDS, on_solid_ground = TRUE, is_fulltile = TRUE, category = CAT_WINDOWS), \ - new/datum/stack_recipe("glass shard", /obj/item/shard, time = 10, on_solid_ground = TRUE, category = CAT_MISC), \ + new/datum/stack_recipe("directional reinforced window", /obj/structure/window/reinforced/unanchored, time = 0.5 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ON_SOLID_GROUND | CRAFT_CHECK_DIRECTION, category = CAT_WINDOWS), \ + new/datum/stack_recipe("fulltile reinforced window", /obj/structure/window/reinforced/fulltile/unanchored, 2, time = 2 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ON_SOLID_GROUND | CRAFT_IS_FULLTILE, category = CAT_WINDOWS), \ + new/datum/stack_recipe("glass shard", /obj/item/shard, time = 10, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ON_SOLID_GROUND, category = CAT_MISC), \ new/datum/stack_recipe("reinforced glass tile", /obj/item/stack/tile/rglass, 1, 4, 20, category = CAT_TILES) \ )) @@ -177,9 +177,9 @@ GLOBAL_LIST_INIT(reinforced_glass_recipes, list ( \ . += GLOB.reinforced_glass_recipes GLOBAL_LIST_INIT(prglass_recipes, list ( \ - new/datum/stack_recipe("directional reinforced window", /obj/structure/window/reinforced/plasma/unanchored, time = 0.5 SECONDS, on_solid_ground = TRUE, check_direction = TRUE, category = CAT_WINDOWS), \ - new/datum/stack_recipe("fulltile reinforced window", /obj/structure/window/reinforced/plasma/fulltile/unanchored, 2, time = 2 SECONDS, on_solid_ground = TRUE, is_fulltile = TRUE, category = CAT_WINDOWS), \ - new/datum/stack_recipe("plasma glass shard", /obj/item/shard/plasma, time = 40, on_solid_ground = TRUE, category = CAT_MISC), \ + new/datum/stack_recipe("directional reinforced window", /obj/structure/window/reinforced/plasma/unanchored, time = 0.5 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ON_SOLID_GROUND | CRAFT_CHECK_DIRECTION, category = CAT_WINDOWS), \ + new/datum/stack_recipe("fulltile reinforced window", /obj/structure/window/reinforced/plasma/fulltile/unanchored, 2, time = 2 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ON_SOLID_GROUND | CRAFT_IS_FULLTILE, category = CAT_WINDOWS), \ + new/datum/stack_recipe("plasma glass shard", /obj/item/shard/plasma, time = 40, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ON_SOLID_GROUND, category = CAT_MISC), \ new/datum/stack_recipe("reinforced plasma glass tile", /obj/item/stack/tile/rglass/plasma, 1, 4, 20, category = CAT_TILES) \ )) @@ -212,8 +212,8 @@ GLOBAL_LIST_INIT(prglass_recipes, list ( \ . += GLOB.prglass_recipes GLOBAL_LIST_INIT(titaniumglass_recipes, list( - new/datum/stack_recipe("shuttle window", /obj/structure/window/reinforced/shuttle/unanchored, 2, time = 0.5 SECONDS, on_solid_ground = TRUE, check_direction = TRUE, is_fulltile = TRUE, category = CAT_WINDOWS), \ - new/datum/stack_recipe("titanium glass shard", /obj/item/shard/titanium, time = 40, on_solid_ground = TRUE, category = CAT_MISC) \ + new/datum/stack_recipe("shuttle window", /obj/structure/window/reinforced/shuttle/unanchored, 2, time = 0.5 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ON_SOLID_GROUND | CRAFT_CHECK_DIRECTION | CRAFT_IS_FULLTILE, category = CAT_WINDOWS), \ + new/datum/stack_recipe("titanium glass shard", /obj/item/shard/titanium, time = 40, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ON_SOLID_GROUND, category = CAT_MISC) \ )) /obj/item/stack/sheet/titaniumglass @@ -241,8 +241,8 @@ GLOBAL_LIST_INIT(titaniumglass_recipes, list( . += GLOB.titaniumglass_recipes GLOBAL_LIST_INIT(plastitaniumglass_recipes, list( - new/datum/stack_recipe("plastitanium window", /obj/structure/window/reinforced/plasma/plastitanium/unanchored, 2, time = 2 SECONDS, on_solid_ground = TRUE, is_fulltile = TRUE, category = CAT_WINDOWS), \ - new/datum/stack_recipe("plastitanium glass shard", /obj/item/shard/plastitanium, time = 60, on_solid_ground = TRUE, category = CAT_MISC) \ + new/datum/stack_recipe("plastitanium window", /obj/structure/window/reinforced/plasma/plastitanium/unanchored, 2, time = 2 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ON_SOLID_GROUND | CRAFT_IS_FULLTILE, category = CAT_WINDOWS), \ + new/datum/stack_recipe("plastitanium glass shard", /obj/item/shard/plastitanium, time = 60, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ON_SOLID_GROUND, category = CAT_MISC) \ )) /obj/item/stack/sheet/plastitaniumglass @@ -341,20 +341,16 @@ GLOBAL_LIST_INIT(plastitaniumglass_recipes, list( if(T && is_station_level(T.z)) SSblackbox.record_feedback("tally", "station_mess_destroyed", 1, name) -/obj/item/shard/afterattack(atom/A as mob|obj, mob/user, proximity) - . = ..() - if(!proximity || !(src in user)) - return - if(isturf(A)) +/obj/item/shard/afterattack(atom/target, mob/user, click_parameters) + if(!iscarbon(user) || !user.is_holding(src)) return - if(istype(A, /obj/item/storage)) + + var/mob/living/carbon/jab = user + if(jab.get_all_covered_flags() & HANDS) return - var/hit_hand = ((user.active_hand_index % 2 == 0) ? "r_" : "l_") + "arm" - if(ishuman(user)) - var/mob/living/carbon/human/H = user - if(!H.gloves && !HAS_TRAIT(H, TRAIT_PIERCEIMMUNE)) // golems, etc - to_chat(H, span_warning("[src] cuts into your hand!")) - H.apply_damage(force*0.5, BRUTE, hit_hand, attacking_item = src) + + to_chat(user, span_warning("[src] cuts into your hand!")) + jab.apply_damage(force * 0.5, BRUTE, user.get_active_hand(), attacking_item = src) /obj/item/shard/attackby(obj/item/item, mob/user, params) if(istype(item, /obj/item/lightreplacer)) diff --git a/code/game/objects/items/stacks/sheets/leather.dm b/code/game/objects/items/stacks/sheets/leather.dm index 851e544ff8a83..2d1636e9e165a 100644 --- a/code/game/objects/items/stacks/sheets/leather.dm +++ b/code/game/objects/items/stacks/sheets/leather.dm @@ -14,8 +14,8 @@ merge_type = /obj/item/stack/sheet/animalhide/human GLOBAL_LIST_INIT(human_recipes, list( \ - new/datum/stack_recipe("bloated human costume", /obj/item/clothing/suit/hooded/bloated_human, 5, check_density = FALSE, category = CAT_CLOTHING), \ - new/datum/stack_recipe("human skin hat", /obj/item/clothing/head/fedora/human_leather, 1, check_density = FALSE, category = CAT_CLOTHING), \ + new/datum/stack_recipe("bloated human costume", /obj/item/clothing/suit/hooded/bloated_human, 5, crafting_flags = NONE, category = CAT_CLOTHING), \ + new/datum/stack_recipe("human skin hat", /obj/item/clothing/head/fedora/human_leather, 1, crafting_flags = NONE, category = CAT_CLOTHING), \ )) /obj/item/stack/sheet/animalhide/human/get_main_recipes() @@ -55,9 +55,9 @@ GLOBAL_LIST_INIT(human_recipes, list( \ amount = 5 GLOBAL_LIST_INIT(gondola_recipes, list ( \ - new/datum/stack_recipe("gondola mask", /obj/item/clothing/mask/gondola, 1, check_density = FALSE, category = CAT_CLOTHING), \ - new/datum/stack_recipe("gondola suit", /obj/item/clothing/under/costume/gondola, 2, check_density = FALSE, category = CAT_CLOTHING), \ - new/datum/stack_recipe("gondola bedsheet", /obj/item/bedsheet/gondola, 1, check_density = FALSE, category = CAT_FURNITURE), \ + new/datum/stack_recipe("gondola mask", /obj/item/clothing/mask/gondola, 1, crafting_flags = NONE, category = CAT_CLOTHING), \ + new/datum/stack_recipe("gondola suit", /obj/item/clothing/under/costume/gondola, 2, crafting_flags = NONE, category = CAT_CLOTHING), \ + new/datum/stack_recipe("gondola bedsheet", /obj/item/bedsheet/gondola, 1, crafting_flags = NONE, category = CAT_FURNITURE), \ )) /obj/item/stack/sheet/animalhide/gondola @@ -73,7 +73,7 @@ GLOBAL_LIST_INIT(gondola_recipes, list ( \ . += GLOB.gondola_recipes GLOBAL_LIST_INIT(corgi_recipes, list ( \ - new/datum/stack_recipe("corgi costume", /obj/item/clothing/suit/hooded/ian_costume, 3, check_density = FALSE, category = CAT_CLOTHING), \ + new/datum/stack_recipe("corgi costume", /obj/item/clothing/suit/hooded/ian_costume, 3, crafting_flags = NONE, category = CAT_CLOTHING), \ )) /obj/item/stack/sheet/animalhide/corgi/get_main_recipes() @@ -100,8 +100,8 @@ GLOBAL_LIST_INIT(corgi_recipes, list ( \ merge_type = /obj/item/stack/sheet/animalhide/monkey GLOBAL_LIST_INIT(monkey_recipes, list ( \ - new/datum/stack_recipe("monkey mask", /obj/item/clothing/mask/gas/monkeymask, 1, check_density = FALSE, category = CAT_CLOTHING), \ - new/datum/stack_recipe("monkey suit", /obj/item/clothing/suit/costume/monkeysuit, 2, check_density = FALSE, category = CAT_CLOTHING), \ + new/datum/stack_recipe("monkey mask", /obj/item/clothing/mask/gas/monkeymask, 1, crafting_flags = NONE, category = CAT_CLOTHING), \ + new/datum/stack_recipe("monkey suit", /obj/item/clothing/suit/costume/monkeysuit, 2, crafting_flags = NONE, category = CAT_CLOTHING), \ )) /obj/item/stack/sheet/animalhide/monkey/get_main_recipes() @@ -131,8 +131,8 @@ GLOBAL_LIST_INIT(monkey_recipes, list ( \ merge_type = /obj/item/stack/sheet/animalhide/xeno GLOBAL_LIST_INIT(xeno_recipes, list ( \ - new/datum/stack_recipe("alien helmet", /obj/item/clothing/head/costume/xenos, 1, check_density = FALSE, category = CAT_CLOTHING), \ - new/datum/stack_recipe("alien suit", /obj/item/clothing/suit/costume/xenos, 2, check_density = FALSE, category = CAT_CLOTHING), \ + new/datum/stack_recipe("alien helmet", /obj/item/clothing/head/costume/xenos, 1, crafting_flags = NONE, category = CAT_CLOTHING), \ + new/datum/stack_recipe("alien suit", /obj/item/clothing/suit/costume/xenos, 2, crafting_flags = NONE, category = CAT_CLOTHING), \ )) /obj/item/stack/sheet/animalhide/xeno/get_main_recipes() @@ -151,11 +151,11 @@ GLOBAL_LIST_INIT(xeno_recipes, list ( \ merge_type = /obj/item/stack/sheet/animalhide/carp GLOBAL_LIST_INIT(carp_recipes, list ( \ - new/datum/stack_recipe("carp costume", /obj/item/clothing/suit/hooded/carp_costume, 4, check_density = FALSE, category = CAT_CLOTHING), \ - new/datum/stack_recipe("carp mask", /obj/item/clothing/mask/gas/carp, 1, check_density = FALSE, category = CAT_CLOTHING), \ - new/datum/stack_recipe("carpskin chair", /obj/structure/chair/comfy/carp, 2, check_density = FALSE, category = CAT_FURNITURE), \ - new/datum/stack_recipe("carpskin suit", /obj/item/clothing/under/suit/carpskin, 3, check_density = FALSE, category = CAT_CLOTHING), \ - new/datum/stack_recipe("carpskin fedora", /obj/item/clothing/head/fedora/carpskin, 2, check_density = FALSE, category = CAT_CLOTHING), \ + new/datum/stack_recipe("carp costume", /obj/item/clothing/suit/hooded/carp_costume, 4, crafting_flags = NONE, category = CAT_CLOTHING), \ + new/datum/stack_recipe("carp mask", /obj/item/clothing/mask/gas/carp, 1, crafting_flags = NONE, category = CAT_CLOTHING), \ + new/datum/stack_recipe("carpskin chair", /obj/structure/chair/comfy/carp, 2, crafting_flags = NONE, category = CAT_FURNITURE), \ + new/datum/stack_recipe("carpskin suit", /obj/item/clothing/under/suit/carpskin, 3, crafting_flags = NONE, category = CAT_CLOTHING), \ + new/datum/stack_recipe("carpskin fedora", /obj/item/clothing/head/fedora/carpskin, 2, crafting_flags = NONE, category = CAT_CLOTHING), \ )) /obj/item/stack/sheet/animalhide/carp/get_main_recipes() @@ -193,33 +193,33 @@ GLOBAL_LIST_INIT(carp_recipes, list ( \ merge_type = /obj/item/stack/sheet/leather GLOBAL_LIST_INIT(leather_recipes, list ( \ - new/datum/stack_recipe("wallet", /obj/item/storage/wallet, 1, check_density = FALSE, category = CAT_CONTAINERS), \ - new/datum/stack_recipe("muzzle", /obj/item/clothing/mask/muzzle, 2, check_density = FALSE, category = CAT_ENTERTAINMENT), \ - new/datum/stack_recipe("basketball", /obj/item/toy/basketball, 20, check_density = FALSE, category = CAT_ENTERTAINMENT), \ - new/datum/stack_recipe("baseball", /obj/item/toy/beach_ball/baseball, 3, check_density = FALSE, category = CAT_ENTERTAINMENT), \ - new/datum/stack_recipe("saddle", /obj/item/goliath_saddle, 5, check_density = FALSE, category = CAT_EQUIPMENT), \ - new/datum/stack_recipe("leather shoes", /obj/item/clothing/shoes/laceup, 2, check_density = FALSE, category = CAT_CLOTHING), \ - new/datum/stack_recipe("cowboy boots", /obj/item/clothing/shoes/cowboy, 2, check_density = FALSE, category = CAT_CLOTHING), \ - new/datum/stack_recipe("botany gloves", /obj/item/clothing/gloves/botanic_leather, 3, check_density = FALSE, category = CAT_CLOTHING), \ - new/datum/stack_recipe("leather satchel", /obj/item/storage/backpack/satchel/leather, 5, check_density = FALSE, category = CAT_CLOTHING), \ - new/datum/stack_recipe("sheriff vest", /obj/item/clothing/accessory/vest_sheriff, 4, check_density = FALSE, category = CAT_CLOTHING), \ - new/datum/stack_recipe("leather jacket", /obj/item/clothing/suit/jacket/leather, 7, check_density = FALSE, category = CAT_CLOTHING), \ - new/datum/stack_recipe("biker jacket", /obj/item/clothing/suit/jacket/leather/biker, 7, check_density = FALSE, category = CAT_CLOTHING), \ + new/datum/stack_recipe("wallet", /obj/item/storage/wallet, 1, crafting_flags = NONE, category = CAT_CONTAINERS), \ + new/datum/stack_recipe("muzzle", /obj/item/clothing/mask/muzzle, 2, crafting_flags = NONE, category = CAT_ENTERTAINMENT), \ + new/datum/stack_recipe("basketball", /obj/item/toy/basketball, 20, crafting_flags = NONE, category = CAT_ENTERTAINMENT), \ + new/datum/stack_recipe("baseball", /obj/item/toy/beach_ball/baseball, 3, crafting_flags = NONE, category = CAT_ENTERTAINMENT), \ + new/datum/stack_recipe("saddle", /obj/item/goliath_saddle, 5, crafting_flags = NONE, category = CAT_EQUIPMENT), \ + new/datum/stack_recipe("leather shoes", /obj/item/clothing/shoes/laceup, 2, crafting_flags = NONE, category = CAT_CLOTHING), \ + new/datum/stack_recipe("cowboy boots", /obj/item/clothing/shoes/cowboy, 2, crafting_flags = NONE, category = CAT_CLOTHING), \ + new/datum/stack_recipe("botany gloves", /obj/item/clothing/gloves/botanic_leather, 3, crafting_flags = NONE, category = CAT_CLOTHING), \ + new/datum/stack_recipe("leather satchel", /obj/item/storage/backpack/satchel/leather, 5, crafting_flags = NONE, category = CAT_CLOTHING), \ + new/datum/stack_recipe("sheriff vest", /obj/item/clothing/accessory/vest_sheriff, 4, crafting_flags = NONE, category = CAT_CLOTHING), \ + new/datum/stack_recipe("leather jacket", /obj/item/clothing/suit/jacket/leather, 7, crafting_flags = NONE, category = CAT_CLOTHING), \ + new/datum/stack_recipe("biker jacket", /obj/item/clothing/suit/jacket/leather/biker, 7, crafting_flags = NONE, category = CAT_CLOTHING), \ new/datum/stack_recipe_list("belts", list( \ - new/datum/stack_recipe("tool belt", /obj/item/storage/belt/utility, 4, check_density = FALSE, category = CAT_CONTAINERS), \ - new/datum/stack_recipe("botanical belt", /obj/item/storage/belt/plant, 2, check_density = FALSE, category = CAT_CONTAINERS), \ - new/datum/stack_recipe("janitorial belt", /obj/item/storage/belt/janitor, 2, check_density = FALSE, category = CAT_CONTAINERS), \ - new/datum/stack_recipe("medical belt", /obj/item/storage/belt/medical, 2, check_density = FALSE, category = CAT_CONTAINERS), \ - new/datum/stack_recipe("security belt", /obj/item/storage/belt/security, 2, check_density = FALSE, category = CAT_CONTAINERS), \ - new/datum/stack_recipe("shoulder holster", /obj/item/storage/belt/holster, 3, check_density = FALSE, category = CAT_CONTAINERS), \ - new/datum/stack_recipe("bandolier", /obj/item/storage/belt/bandolier, 5, check_density = FALSE, category = CAT_CONTAINERS), \ + new/datum/stack_recipe("tool belt", /obj/item/storage/belt/utility, 4, crafting_flags = NONE, category = CAT_CONTAINERS), \ + new/datum/stack_recipe("botanical belt", /obj/item/storage/belt/plant, 2, crafting_flags = NONE, category = CAT_CONTAINERS), \ + new/datum/stack_recipe("janitorial belt", /obj/item/storage/belt/janitor, 2, crafting_flags = NONE, category = CAT_CONTAINERS), \ + new/datum/stack_recipe("medical belt", /obj/item/storage/belt/medical, 2, crafting_flags = NONE, category = CAT_CONTAINERS), \ + new/datum/stack_recipe("security belt", /obj/item/storage/belt/security, 2, crafting_flags = NONE, category = CAT_CONTAINERS), \ + new/datum/stack_recipe("shoulder holster", /obj/item/storage/belt/holster, 3, crafting_flags = NONE, category = CAT_CONTAINERS), \ + new/datum/stack_recipe("bandolier", /obj/item/storage/belt/bandolier, 5, crafting_flags = NONE, category = CAT_CONTAINERS), \ )), new/datum/stack_recipe_list("cowboy hats", list( \ - new/datum/stack_recipe("sheriff hat", /obj/item/clothing/head/cowboy/brown, 2, check_density = FALSE, category = CAT_CLOTHING), \ - new/datum/stack_recipe("desperado hat", /obj/item/clothing/head/cowboy/black, 2, check_density = FALSE, category = CAT_CLOTHING), \ - new/datum/stack_recipe("ten-gallon hat", /obj/item/clothing/head/cowboy/white, 2, check_density = FALSE, category = CAT_CLOTHING), \ - new/datum/stack_recipe("deputy hat", /obj/item/clothing/head/cowboy/red, 2, check_density = FALSE, category = CAT_CLOTHING), \ - new/datum/stack_recipe("drifter hat", /obj/item/clothing/head/cowboy/grey, 2, check_density = FALSE, category = CAT_CLOTHING), \ + new/datum/stack_recipe("sheriff hat", /obj/item/clothing/head/cowboy/brown, 2, crafting_flags = NONE, category = CAT_CLOTHING), \ + new/datum/stack_recipe("desperado hat", /obj/item/clothing/head/cowboy/black, 2, crafting_flags = NONE, category = CAT_CLOTHING), \ + new/datum/stack_recipe("ten-gallon hat", /obj/item/clothing/head/cowboy/white, 2, crafting_flags = NONE, category = CAT_CLOTHING), \ + new/datum/stack_recipe("deputy hat", /obj/item/clothing/head/cowboy/red, 2, crafting_flags = NONE, category = CAT_CLOTHING), \ + new/datum/stack_recipe("drifter hat", /obj/item/clothing/head/cowboy/grey, 2, crafting_flags = NONE, category = CAT_CLOTHING), \ )), )) @@ -263,7 +263,7 @@ GLOBAL_LIST_INIT(leather_recipes, list ( \ merge_type = /obj/item/stack/sheet/sinew/wolf GLOBAL_LIST_INIT(sinew_recipes, list ( \ - new/datum/stack_recipe("sinew restraints", /obj/item/restraints/handcuffs/cable/sinew, 1, check_density = FALSE, category = CAT_EQUIPMENT), \ + new/datum/stack_recipe("sinew restraints", /obj/item/restraints/handcuffs/cable/sinew, 1, crafting_flags = NONE, category = CAT_EQUIPMENT), \ )) /obj/item/stack/sheet/sinew/get_main_recipes() diff --git a/code/game/objects/items/stacks/sheets/mineral.dm b/code/game/objects/items/stacks/sheets/mineral.dm index 1b3d66a7dae92..0d4393efea6a4 100644 --- a/code/game/objects/items/stacks/sheets/mineral.dm +++ b/code/game/objects/items/stacks/sheets/mineral.dm @@ -24,8 +24,8 @@ Mineral Sheets */ GLOBAL_LIST_INIT(sandstone_recipes, list ( \ - new/datum/stack_recipe("sandstone door", /obj/structure/mineral_door/sandstone, 10, time = 5 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, applies_mats = TRUE, category = CAT_DOORS), \ - new/datum/stack_recipe("Breakdown into sand", /obj/item/stack/ore/glass, 1, one_per_turf = FALSE, on_solid_ground = TRUE, category = CAT_MISC) \ + new/datum/stack_recipe("sandstone door", /obj/structure/mineral_door/sandstone, 10, time = 5 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND | CRAFT_APPLIES_MATS, category = CAT_DOORS), \ + new/datum/stack_recipe("Breakdown into sand", /obj/item/stack/ore/glass, 1, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ON_SOLID_GROUND, category = CAT_MISC) \ )) /obj/item/stack/sheet/mineral/sandstone @@ -62,7 +62,7 @@ GLOBAL_LIST_INIT(sandstone_recipes, list ( \ merge_type = /obj/item/stack/sheet/mineral/sandbags GLOBAL_LIST_INIT(sandbag_recipes, list ( \ - new/datum/stack_recipe("sandbags", /obj/structure/barricade/sandbags, 1, time = 3 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_STRUCTURE), \ + new/datum/stack_recipe("sandbags", /obj/structure/barricade/sandbags, 1, time = 3 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_STRUCTURE), \ )) /obj/item/stack/sheet/mineral/sandbags/get_main_recipes() @@ -105,14 +105,17 @@ GLOBAL_LIST_INIT(sandbag_recipes, list ( \ walltype = /turf/closed/wall/mineral/diamond GLOBAL_LIST_INIT(diamond_recipes, list ( \ - new/datum/stack_recipe("diamond door", /obj/structure/mineral_door/transparent/diamond, 10, time = 5 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, applies_mats = TRUE, category = CAT_DOORS), \ - new/datum/stack_recipe("diamond tile", /obj/item/stack/tile/mineral/diamond, 1, 4, 20, check_density = FALSE, category = CAT_TILES), \ + new/datum/stack_recipe("diamond door", /obj/structure/mineral_door/transparent/diamond, 10, time = 5 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND | CRAFT_APPLIES_MATS, category = CAT_DOORS), \ + new/datum/stack_recipe("diamond tile", /obj/item/stack/tile/mineral/diamond, 1, 4, 20, crafting_flags = NONE, category = CAT_TILES), \ )) /obj/item/stack/sheet/mineral/diamond/get_main_recipes() . = ..() . += GLOB.diamond_recipes +/obj/item/stack/sheet/mineral/diamond/five + amount = 5 + /* * Uranium */ @@ -130,8 +133,8 @@ GLOBAL_LIST_INIT(diamond_recipes, list ( \ walltype = /turf/closed/wall/mineral/uranium GLOBAL_LIST_INIT(uranium_recipes, list ( \ - new/datum/stack_recipe("uranium door", /obj/structure/mineral_door/uranium, 10, time = 5 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, applies_mats = TRUE, category = CAT_DOORS), \ - new/datum/stack_recipe("uranium tile", /obj/item/stack/tile/mineral/uranium, 1, 4, 20, check_density = FALSE, category = CAT_TILES), \ + new/datum/stack_recipe("uranium door", /obj/structure/mineral_door/uranium, 10, time = 5 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND | CRAFT_APPLIES_MATS, category = CAT_DOORS), \ + new/datum/stack_recipe("uranium tile", /obj/item/stack/tile/mineral/uranium, 1, 4, 20, crafting_flags = NONE, category = CAT_TILES), \ )) /obj/item/stack/sheet/mineral/uranium/get_main_recipes() @@ -167,8 +170,8 @@ GLOBAL_LIST_INIT(uranium_recipes, list ( \ return TOXLOSS//dont you kids know that stuff is toxic? GLOBAL_LIST_INIT(plasma_recipes, list ( \ - new/datum/stack_recipe("plasma door", /obj/structure/mineral_door/transparent/plasma, 10, time = 5 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, applies_mats = TRUE, category = CAT_DOORS), \ - new/datum/stack_recipe("plasma tile", /obj/item/stack/tile/mineral/plasma, 1, 4, 20, check_density = FALSE, category = CAT_TILES), \ + new/datum/stack_recipe("plasma door", /obj/structure/mineral_door/transparent/plasma, 10, time = 5 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND | CRAFT_APPLIES_MATS, category = CAT_DOORS), \ + new/datum/stack_recipe("plasma tile", /obj/item/stack/tile/mineral/plasma, 1, 4, 20, crafting_flags = NONE, category = CAT_TILES), \ )) /obj/item/stack/sheet/mineral/plasma/get_main_recipes() @@ -198,10 +201,10 @@ GLOBAL_LIST_INIT(plasma_recipes, list ( \ walltype = /turf/closed/wall/mineral/gold GLOBAL_LIST_INIT(gold_recipes, list ( \ - new/datum/stack_recipe("golden door", /obj/structure/mineral_door/gold, 10, time = 5 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, applies_mats = TRUE, category = CAT_DOORS), \ - new/datum/stack_recipe("gold tile", /obj/item/stack/tile/mineral/gold, 1, 4, 20, check_density = FALSE, category = CAT_TILES), \ - new/datum/stack_recipe("blank plaque", /obj/item/plaque, 1, check_density = FALSE, category = CAT_FURNITURE), \ - new/datum/stack_recipe("Simple Crown", /obj/item/clothing/head/costume/crown, 5, check_density = FALSE, category = CAT_CLOTHING), \ + new/datum/stack_recipe("golden door", /obj/structure/mineral_door/gold, 10, time = 5 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND | CRAFT_APPLIES_MATS, category = CAT_DOORS), \ + new/datum/stack_recipe("gold tile", /obj/item/stack/tile/mineral/gold, 1, 4, 20, crafting_flags = NONE, category = CAT_TILES), \ + new/datum/stack_recipe("blank plaque", /obj/item/plaque, 1, crafting_flags = NONE, category = CAT_FURNITURE), \ + new/datum/stack_recipe("Simple Crown", /obj/item/clothing/head/costume/crown, 5, crafting_flags = NONE, category = CAT_CLOTHING), \ )) /obj/item/stack/sheet/mineral/gold/get_main_recipes() @@ -226,8 +229,8 @@ GLOBAL_LIST_INIT(gold_recipes, list ( \ walltype = /turf/closed/wall/mineral/silver GLOBAL_LIST_INIT(silver_recipes, list ( \ - new/datum/stack_recipe("silver door", /obj/structure/mineral_door/silver, 10, time = 5 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, applies_mats = TRUE, category = CAT_DOORS), \ - new/datum/stack_recipe("silver tile", /obj/item/stack/tile/mineral/silver, 1, 4, 20, check_density = FALSE, category = CAT_TILES), \ + new/datum/stack_recipe("silver door", /obj/structure/mineral_door/silver, 10, time = 5 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND | CRAFT_APPLIES_MATS, category = CAT_DOORS), \ + new/datum/stack_recipe("silver tile", /obj/item/stack/tile/mineral/silver, 1, 4, 20, crafting_flags = NONE, category = CAT_TILES), \ )) /obj/item/stack/sheet/mineral/silver/get_main_recipes() @@ -251,7 +254,7 @@ GLOBAL_LIST_INIT(silver_recipes, list ( \ walltype = /turf/closed/wall/mineral/bananium GLOBAL_LIST_INIT(bananium_recipes, list ( \ - new/datum/stack_recipe("bananium tile", /obj/item/stack/tile/mineral/bananium, 1, 4, 20, check_density = FALSE, category = CAT_TILES), \ + new/datum/stack_recipe("bananium tile", /obj/item/stack/tile/mineral/bananium, 1, 4, 20, crafting_flags = NONE, category = CAT_TILES), \ )) /obj/item/stack/sheet/mineral/bananium/get_main_recipes() @@ -282,8 +285,9 @@ GLOBAL_LIST_INIT(bananium_recipes, list ( \ walltype = /turf/closed/wall/mineral/titanium GLOBAL_LIST_INIT(titanium_recipes, list ( \ - new/datum/stack_recipe("Titanium tile", /obj/item/stack/tile/mineral/titanium, 1, 4, 20, check_density = FALSE, category = CAT_TILES), \ - new/datum/stack_recipe("Shuttle seat", /obj/structure/chair/comfy/shuttle, 2, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_FURNITURE), \ + new /datum/stack_recipe("Titanium tile", /obj/item/stack/tile/mineral/titanium, 1, 4, 20, crafting_flags = NONE, category = CAT_TILES), \ + new /datum/stack_recipe("Shuttle seat", /obj/structure/chair/comfy/shuttle, 2, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_FURNITURE), \ + new /datum/stack_recipe("Material tram door assembly", /obj/structure/door_assembly/multi_tile/door_assembly_tram, 8, time = 5 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_DOORS), \ )) /obj/item/stack/sheet/mineral/titanium/get_main_recipes() @@ -315,7 +319,7 @@ GLOBAL_LIST_INIT(titanium_recipes, list ( \ walltype = /turf/closed/wall/mineral/plastitanium GLOBAL_LIST_INIT(plastitanium_recipes, list ( \ - new/datum/stack_recipe("plastitanium tile", /obj/item/stack/tile/mineral/plastitanium, 1, 4, 20, check_density = FALSE, category = CAT_TILES), \ + new/datum/stack_recipe("plastitanium tile", /obj/item/stack/tile/mineral/plastitanium, 1, 4, 20, crafting_flags = NONE, category = CAT_TILES), \ )) /obj/item/stack/sheet/mineral/plastitanium/get_main_recipes() @@ -341,10 +345,10 @@ GLOBAL_LIST_INIT(plastitanium_recipes, list ( \ material_type = /datum/material/snow GLOBAL_LIST_INIT(snow_recipes, list ( \ - new/datum/stack_recipe("snow wall", /turf/closed/wall/mineral/snow, 5, time = 4 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_STRUCTURE), \ - new/datum/stack_recipe("snowman", /obj/structure/statue/snow/snowman, 5, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_ENTERTAINMENT), \ - new/datum/stack_recipe("snowball", /obj/item/toy/snowball, 1, check_density = FALSE, category = CAT_WEAPON_RANGED), \ - new/datum/stack_recipe("snow tile", /obj/item/stack/tile/mineral/snow, 1, 4, 20, check_density = FALSE, category = CAT_TILES), \ + new/datum/stack_recipe("snow wall", /turf/closed/wall/mineral/snow, 5, time = 4 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_STRUCTURE), \ + new/datum/stack_recipe("snowman", /obj/structure/statue/snow/snowman, 5, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_ENTERTAINMENT), \ + new/datum/stack_recipe("snowball", /obj/item/toy/snowball, 1, crafting_flags = NONE, category = CAT_WEAPON_RANGED), \ + new/datum/stack_recipe("snow tile", /obj/item/stack/tile/mineral/snow, 1, 4, 20, crafting_flags = NONE, category = CAT_TILES), \ )) /obj/item/stack/sheet/mineral/snow/Initialize(mapload, new_amount, merge, list/mat_override, mat_amt) @@ -363,7 +367,7 @@ GLOBAL_LIST_INIT(snow_recipes, list ( \ GLOBAL_LIST_INIT(adamantine_recipes, list( - new /datum/stack_recipe("incomplete servant golem shell", /obj/item/golem_shell/servant, req_amount=1, res_amount=1, category = CAT_ROBOT), + new /datum/stack_recipe("incomplete servant golem shell", /obj/item/golem_shell/servant, req_amount=3, res_amount=1, category = CAT_ROBOT), )) /obj/item/stack/sheet/mineral/adamantine @@ -421,12 +425,12 @@ GLOBAL_LIST_INIT(adamantine_recipes, list( walltype = /turf/closed/wall/mineral/abductor GLOBAL_LIST_INIT(abductor_recipes, list ( \ - new/datum/stack_recipe("alien bed", /obj/structure/bed/abductor, 2, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_FURNITURE), \ - new/datum/stack_recipe("alien locker", /obj/structure/closet/abductor, 2, time = 2 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_FURNITURE), \ - new/datum/stack_recipe("alien table frame", /obj/structure/table_frame/abductor, 1, time = 2 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_FURNITURE), \ - new/datum/stack_recipe("alien airlock assembly", /obj/structure/door_assembly/door_assembly_abductor, 4, time = 5 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_DOORS), \ + new/datum/stack_recipe("alien bed", /obj/structure/bed/abductor, 2, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_FURNITURE), \ + new/datum/stack_recipe("alien locker", /obj/structure/closet/abductor, 2, time = 2 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_FURNITURE), \ + new/datum/stack_recipe("alien table frame", /obj/structure/table_frame/abductor, 1, time = 2 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_FURNITURE), \ + new/datum/stack_recipe("alien airlock assembly", /obj/structure/door_assembly/door_assembly_abductor, 4, time = 5 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_DOORS), \ null, \ - new/datum/stack_recipe("alien floor tile", /obj/item/stack/tile/mineral/abductor, 1, 4, 20, check_density = FALSE, category = CAT_TILES), \ + new/datum/stack_recipe("alien floor tile", /obj/item/stack/tile/mineral/abductor, 1, 4, 20, crafting_flags = NONE, category = CAT_TILES), \ )) /obj/item/stack/sheet/mineral/abductor/get_main_recipes() @@ -469,10 +473,11 @@ GLOBAL_LIST_INIT(abductor_recipes, list ( \ //Metal Hydrogen GLOBAL_LIST_INIT(metalhydrogen_recipes, list( - new /datum/stack_recipe("incomplete servant golem shell", /obj/item/golem_shell/servant, req_amount=20, res_amount=1, check_density = FALSE, category = CAT_ROBOT), - new /datum/stack_recipe("ancient armor", /obj/item/clothing/suit/armor/elder_atmosian, req_amount = 5, res_amount = 1, check_density = FALSE, category = CAT_CLOTHING), - new /datum/stack_recipe("ancient helmet", /obj/item/clothing/head/helmet/elder_atmosian, req_amount = 3, res_amount = 1, check_density = FALSE, category = CAT_CLOTHING), - new /datum/stack_recipe("metallic hydrogen axe", /obj/item/fireaxe/metal_h2_axe, req_amount = 15, res_amount = 1, check_density = FALSE, category = CAT_WEAPON_MELEE), + new /datum/stack_recipe("incomplete servant golem shell", /obj/item/golem_shell/servant, req_amount=20, res_amount=1, crafting_flags = NONE, category = CAT_ROBOT), + new /datum/stack_recipe("ancient armor", /obj/item/clothing/suit/armor/elder_atmosian, req_amount = 5, res_amount = 1, crafting_flags = NONE, category = CAT_CLOTHING), + new /datum/stack_recipe("ancient helmet", /obj/item/clothing/head/helmet/elder_atmosian, req_amount = 3, res_amount = 1, crafting_flags = NONE, category = CAT_CLOTHING), + new /datum/stack_recipe("metallic hydrogen axe", /obj/item/fireaxe/metal_h2_axe, req_amount = 15, res_amount = 1, crafting_flags = NONE, category = CAT_WEAPON_MELEE), + new /datum/stack_recipe("metallic hydrogen bolts", /obj/item/ammo_casing/rebar/hydrogen, req_amount = 1, res_amount = 1, crafting_flags = NONE, category = CAT_WEAPON_AMMO), )) /obj/item/stack/sheet/mineral/metal_hydrogen @@ -491,6 +496,12 @@ GLOBAL_LIST_INIT(metalhydrogen_recipes, list( . = ..() . += GLOB.metalhydrogen_recipes + + +GLOBAL_LIST_INIT(zaukerite_recipes, list( + new /datum/stack_recipe("zaukerite shard", /obj/item/ammo_casing/rebar/zaukerite, req_amount=1, res_amount=1, category = CAT_WEAPON_AMMO), + )) + /obj/item/stack/sheet/mineral/zaukerite name = "zaukerite" icon_state = "zaukerite" @@ -501,3 +512,7 @@ GLOBAL_LIST_INIT(metalhydrogen_recipes, list( mats_per_unit = list(/datum/material/zaukerite = SHEET_MATERIAL_AMOUNT) merge_type = /obj/item/stack/sheet/mineral/zaukerite material_type = /datum/material/zaukerite + +/obj/item/stack/sheet/mineral/zaukerite/get_main_recipes() + . = ..() + . += GLOB.zaukerite_recipes diff --git a/code/game/objects/items/stacks/sheets/runed_metal.dm b/code/game/objects/items/stacks/sheets/runed_metal.dm index b60cd67d389dc..44094a0bf789b 100644 --- a/code/game/objects/items/stacks/sheets/runed_metal.dm +++ b/code/game/objects/items/stacks/sheets/runed_metal.dm @@ -6,8 +6,7 @@ GLOBAL_LIST_INIT(runed_metal_recipes, list( \ result_type = /obj/structure/destructible/cult/pylon, \ req_amount = 4, \ time = 4 SECONDS, \ - one_per_turf = TRUE, \ - on_solid_ground = TRUE, \ + crafting_flags = CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, \ desc = span_cult_bold("Pylon: Heals and regenerates the blood of nearby blood cultists and constructs, and also \ converts nearby floor tiles into engraved flooring, which allows blood cultists to scribe runes faster."), \ required_noun = "runed metal sheet", \ @@ -18,8 +17,7 @@ GLOBAL_LIST_INIT(runed_metal_recipes, list( \ result_type = /obj/structure/destructible/cult/item_dispenser/altar, \ req_amount = 3, \ time = 4 SECONDS, \ - one_per_turf = TRUE, \ - on_solid_ground = TRUE, \ + crafting_flags = CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, \ desc = span_cult_bold("Altar: Can make Eldritch Whetstones, Construct Shells, and Flasks of Unholy Water."), \ required_noun = "runed metal sheet", \ category = CAT_CULT, \ @@ -29,8 +27,7 @@ GLOBAL_LIST_INIT(runed_metal_recipes, list( \ result_type = /obj/structure/destructible/cult/item_dispenser/archives, \ req_amount = 3, \ time = 4 SECONDS, \ - one_per_turf = TRUE, \ - on_solid_ground = TRUE, \ + crafting_flags = CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, \ desc = span_cult_bold("Archives: Can make Zealot's Blindfolds, Shuttle Curse Orbs, \ and Veil Walker equipment. Emits Light."), \ required_noun = "runed metal sheet", \ @@ -41,8 +38,7 @@ GLOBAL_LIST_INIT(runed_metal_recipes, list( \ result_type = /obj/structure/destructible/cult/item_dispenser/forge, \ req_amount = 3, \ time = 4 SECONDS, \ - one_per_turf = TRUE, \ - on_solid_ground = TRUE, \ + crafting_flags = CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, \ desc = span_cult_bold("Daemon Forge: Can make Nar'Sien Hardened Armor, Flagellant's Robes, \ and Eldritch Longswords. Emits Light."), \ required_noun = "runed metal sheet", \ @@ -52,8 +48,7 @@ GLOBAL_LIST_INIT(runed_metal_recipes, list( \ title = "runed door", \ result_type = /obj/machinery/door/airlock/cult, \ time = 5 SECONDS, \ - one_per_turf = TRUE, \ - on_solid_ground = TRUE, \ + crafting_flags = CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, \ desc = span_cult_bold("Runed Door: A weak door which stuns non-blood cultists who touch it."), \ required_noun = "runed metal sheet", \ category = CAT_CULT, \ @@ -62,9 +57,9 @@ GLOBAL_LIST_INIT(runed_metal_recipes, list( \ title = "runed girder", \ result_type = /obj/structure/girder/cult, \ time = 5 SECONDS, \ - one_per_turf = TRUE, \ - on_solid_ground = TRUE, \ - desc = span_cult_bold("Runed Girder: A weak girder that can be instantly destroyed by ritual daggers. Not a recommended usage of runed metal."), \ + crafting_flags = CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, \ + desc = span_cult_bold("Runed Girder: A weak girder that can be instantly destroyed by ritual daggers. \ + Not a recommended usage of runed metal."), \ required_noun = "runed metal sheet", \ category = CAT_CULT, \ ), \ diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm index f00767217a493..d32df2562402f 100644 --- a/code/game/objects/items/stacks/sheets/sheet_types.dm +++ b/code/game/objects/items/stacks/sheets/sheet_types.dm @@ -15,127 +15,140 @@ * Iron */ GLOBAL_LIST_INIT(metal_recipes, list ( \ - new/datum/stack_recipe("stool", /obj/structure/chair/stool, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_FURNITURE), \ - new/datum/stack_recipe("bar stool", /obj/structure/chair/stool/bar, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_FURNITURE), \ - new/datum/stack_recipe("bed", /obj/structure/bed, 2, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_FURNITURE), \ - new/datum/stack_recipe("double bed", /obj/structure/bed/double, 4, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_FURNITURE), \ + new/datum/stack_recipe("stool", /obj/structure/chair/stool, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_FURNITURE), \ + new/datum/stack_recipe("bar stool", /obj/structure/chair/stool/bar, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_FURNITURE), \ + new/datum/stack_recipe("bed", /obj/structure/bed, 2, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_FURNITURE), \ + new/datum/stack_recipe("double bed", /obj/structure/bed/double, 4, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_FURNITURE), \ null, \ new/datum/stack_recipe_list("office chairs", list( \ - new/datum/stack_recipe("dark office chair", /obj/structure/chair/office, 5, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_FURNITURE), \ - new/datum/stack_recipe("light office chair", /obj/structure/chair/office/light, 5, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_FURNITURE), \ + new/datum/stack_recipe("dark office chair", /obj/structure/chair/office, 5, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_FURNITURE), \ + new/datum/stack_recipe("light office chair", /obj/structure/chair/office/light, 5, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_FURNITURE), \ )), \ new/datum/stack_recipe_list("comfy chairs", list( \ - new/datum/stack_recipe("beige comfy chair", /obj/structure/chair/comfy/beige, 2, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_FURNITURE), \ - new/datum/stack_recipe("black comfy chair", /obj/structure/chair/comfy/black, 2, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_FURNITURE), \ - new/datum/stack_recipe("brown comfy chair", /obj/structure/chair/comfy/brown, 2, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_FURNITURE), \ - new/datum/stack_recipe("lime comfy chair", /obj/structure/chair/comfy/lime, 2, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_FURNITURE), \ - new/datum/stack_recipe("teal comfy chair", /obj/structure/chair/comfy/teal, 2, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_FURNITURE), \ + new/datum/stack_recipe("beige comfy chair", /obj/structure/chair/comfy/beige, 2, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_FURNITURE), \ + new/datum/stack_recipe("black comfy chair", /obj/structure/chair/comfy/black, 2, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_FURNITURE), \ + new/datum/stack_recipe("brown comfy chair", /obj/structure/chair/comfy/brown, 2, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_FURNITURE), \ + new/datum/stack_recipe("lime comfy chair", /obj/structure/chair/comfy/lime, 2, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_FURNITURE), \ + new/datum/stack_recipe("teal comfy chair", /obj/structure/chair/comfy/teal, 2, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_FURNITURE), \ )), \ new/datum/stack_recipe_list("sofas", list( - new /datum/stack_recipe("sofa (middle)", /obj/structure/chair/sofa/middle, 1, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_FURNITURE), - new /datum/stack_recipe("sofa (left)", /obj/structure/chair/sofa/left, 1, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_FURNITURE), - new /datum/stack_recipe("sofa (right)", /obj/structure/chair/sofa/right, 1, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_FURNITURE), - new /datum/stack_recipe("sofa (corner)", /obj/structure/chair/sofa/corner, 1, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_FURNITURE) + new /datum/stack_recipe("sofa (middle)", /obj/structure/chair/sofa/middle, 1, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_FURNITURE), + new /datum/stack_recipe("sofa (left)", /obj/structure/chair/sofa/left, 1, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_FURNITURE), + new /datum/stack_recipe("sofa (right)", /obj/structure/chair/sofa/right, 1, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_FURNITURE), + new /datum/stack_recipe("sofa (corner)", /obj/structure/chair/sofa/corner, 1, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_FURNITURE) )), \ new/datum/stack_recipe_list("corporate sofas", list( \ - new /datum/stack_recipe("sofa (middle)", /obj/structure/chair/sofa/corp, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_FURNITURE), \ - new /datum/stack_recipe("sofa (left)", /obj/structure/chair/sofa/corp/left, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_FURNITURE), \ - new /datum/stack_recipe("sofa (right)", /obj/structure/chair/sofa/corp/right, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_FURNITURE), \ - new /datum/stack_recipe("sofa (corner)", /obj/structure/chair/sofa/corp/corner, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_FURNITURE), \ + new /datum/stack_recipe("sofa (middle)", /obj/structure/chair/sofa/corp, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_FURNITURE), \ + new /datum/stack_recipe("sofa (left)", /obj/structure/chair/sofa/corp/left, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_FURNITURE), \ + new /datum/stack_recipe("sofa (right)", /obj/structure/chair/sofa/corp/right, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_FURNITURE), \ + new /datum/stack_recipe("sofa (corner)", /obj/structure/chair/sofa/corp/corner, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_FURNITURE), \ )), \ new /datum/stack_recipe_list("benches", list( \ - new /datum/stack_recipe("bench (middle)", /obj/structure/chair/sofa/bench, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_FURNITURE), \ - new /datum/stack_recipe("bench (left)", /obj/structure/chair/sofa/bench/left, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_FURNITURE), \ - new /datum/stack_recipe("bench (right)", /obj/structure/chair/sofa/bench/right, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_FURNITURE), \ - new /datum/stack_recipe("bench (corner)", /obj/structure/chair/sofa/bench/corner, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_FURNITURE), \ - new /datum/stack_recipe("tram bench (solo)", /obj/structure/chair/sofa/bench/tram/solo, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_FURNITURE), \ - new /datum/stack_recipe("tram bench (middle)", /obj/structure/chair/sofa/bench/tram, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_FURNITURE), \ - new /datum/stack_recipe("tram bench (left)", /obj/structure/chair/sofa/bench/tram/left, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_FURNITURE), \ - new /datum/stack_recipe("tram bench (right)", /obj/structure/chair/sofa/bench/tram/right, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_FURNITURE), \ - new /datum/stack_recipe("tram bench (corner)", /obj/structure/chair/sofa/bench/tram/corner, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_FURNITURE), \ + new /datum/stack_recipe("bench (middle)", /obj/structure/chair/sofa/bench, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_FURNITURE), \ + new /datum/stack_recipe("bench (left)", /obj/structure/chair/sofa/bench/left, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_FURNITURE), \ + new /datum/stack_recipe("bench (right)", /obj/structure/chair/sofa/bench/right, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_FURNITURE), \ + new /datum/stack_recipe("bench (corner)", /obj/structure/chair/sofa/bench/corner, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_FURNITURE), \ + new /datum/stack_recipe("tram bench (solo)", /obj/structure/chair/sofa/bench/tram/solo, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_FURNITURE), \ + new /datum/stack_recipe("tram bench (middle)", /obj/structure/chair/sofa/bench/tram, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_FURNITURE), \ + new /datum/stack_recipe("tram bench (left)", /obj/structure/chair/sofa/bench/tram/left, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_FURNITURE), \ + new /datum/stack_recipe("tram bench (right)", /obj/structure/chair/sofa/bench/tram/right, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_FURNITURE), \ + new /datum/stack_recipe("tram bench (corner)", /obj/structure/chair/sofa/bench/tram/corner, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_FURNITURE), \ )), \ new /datum/stack_recipe_list("chess pieces", list( \ - new /datum/stack_recipe("White Pawn", /obj/structure/chess/whitepawn, 2, time = 1 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_ENTERTAINMENT), \ - new /datum/stack_recipe("White Rook", /obj/structure/chess/whiterook, 2, time = 1 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_ENTERTAINMENT), \ - new /datum/stack_recipe("White Knight", /obj/structure/chess/whiteknight, 2, time = 1 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_ENTERTAINMENT), \ - new /datum/stack_recipe("White Bishop", /obj/structure/chess/whitebishop, 2, time = 1 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_ENTERTAINMENT), \ - new /datum/stack_recipe("White Queen", /obj/structure/chess/whitequeen, 2, time = 1 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_ENTERTAINMENT), \ - new /datum/stack_recipe("White King", /obj/structure/chess/whiteking, 2, time = 1 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_ENTERTAINMENT), \ - new /datum/stack_recipe("Black Pawn", /obj/structure/chess/blackpawn, 2, time = 1 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_ENTERTAINMENT), \ - new /datum/stack_recipe("Black Rook", /obj/structure/chess/blackrook, 2, time = 1 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_ENTERTAINMENT), \ - new /datum/stack_recipe("Black Knight", /obj/structure/chess/blackknight, 2, time = 1 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_ENTERTAINMENT), \ - new /datum/stack_recipe("Black Bishop", /obj/structure/chess/blackbishop, 2, time = 1 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_ENTERTAINMENT), \ - new /datum/stack_recipe("Black Queen", /obj/structure/chess/blackqueen, 2, time = 1 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_ENTERTAINMENT), \ - new /datum/stack_recipe("Black King", /obj/structure/chess/blackking, 2, time = 1 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_ENTERTAINMENT), \ + new /datum/stack_recipe("White Pawn", /obj/structure/chess/whitepawn, 2, time = 1 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_ENTERTAINMENT), \ + new /datum/stack_recipe("White Rook", /obj/structure/chess/whiterook, 2, time = 1 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_ENTERTAINMENT), \ + new /datum/stack_recipe("White Knight", /obj/structure/chess/whiteknight, 2, time = 1 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_ENTERTAINMENT), \ + new /datum/stack_recipe("White Bishop", /obj/structure/chess/whitebishop, 2, time = 1 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_ENTERTAINMENT), \ + new /datum/stack_recipe("White Queen", /obj/structure/chess/whitequeen, 2, time = 1 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_ENTERTAINMENT), \ + new /datum/stack_recipe("White King", /obj/structure/chess/whiteking, 2, time = 1 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_ENTERTAINMENT), \ + new /datum/stack_recipe("Black Pawn", /obj/structure/chess/blackpawn, 2, time = 1 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_ENTERTAINMENT), \ + new /datum/stack_recipe("Black Rook", /obj/structure/chess/blackrook, 2, time = 1 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_ENTERTAINMENT), \ + new /datum/stack_recipe("Black Knight", /obj/structure/chess/blackknight, 2, time = 1 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_ENTERTAINMENT), \ + new /datum/stack_recipe("Black Bishop", /obj/structure/chess/blackbishop, 2, time = 1 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_ENTERTAINMENT), \ + new /datum/stack_recipe("Black Queen", /obj/structure/chess/blackqueen, 2, time = 1 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_ENTERTAINMENT), \ + new /datum/stack_recipe("Black King", /obj/structure/chess/blackking, 2, time = 1 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_ENTERTAINMENT), \ )), new /datum/stack_recipe_list("checkers pieces", list( \ - new /datum/stack_recipe("White Checker Man", /obj/structure/chess/checker/whiteman, 2, time = 1 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_ENTERTAINMENT), \ - new /datum/stack_recipe("White Checker King", /obj/structure/chess/checker/whiteking, 2, time = 1 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_ENTERTAINMENT), \ - new /datum/stack_recipe("Black Checker Man", /obj/structure/chess/checker/blackman, 2, time = 1 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_ENTERTAINMENT), \ - new /datum/stack_recipe("Black Checker King", /obj/structure/chess/checker/blackking, 2, time = 1 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_ENTERTAINMENT), \ + new /datum/stack_recipe("White Checker Man", /obj/structure/chess/checker/whiteman, 2, time = 1 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_ENTERTAINMENT), \ + new /datum/stack_recipe("White Checker King", /obj/structure/chess/checker/whiteking, 2, time = 1 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_ENTERTAINMENT), \ + new /datum/stack_recipe("Black Checker Man", /obj/structure/chess/checker/blackman, 2, time = 1 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_ENTERTAINMENT), \ + new /datum/stack_recipe("Black Checker King", /obj/structure/chess/checker/blackking, 2, time = 1 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_ENTERTAINMENT), \ )), null, \ new/datum/stack_recipe("rack parts", /obj/item/rack_parts, category = CAT_FURNITURE), \ - new/datum/stack_recipe("closet", /obj/structure/closet, 2, time = 1.5 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_FURNITURE), \ + new/datum/stack_recipe("closet", /obj/structure/closet, 2, time = 1.5 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_FURNITURE), \ null, \ - new/datum/stack_recipe("atmos canister", /obj/machinery/portable_atmospherics/canister, 10, time = 3 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_ATMOSPHERIC), \ - new/datum/stack_recipe("pipe", /obj/item/pipe/quaternary/pipe/crafted, 1, time = 4 SECONDS, check_density = FALSE, category = CAT_ATMOSPHERIC), \ + new/datum/stack_recipe("atmos canister", /obj/machinery/portable_atmospherics/canister, 10, time = 3 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_ATMOSPHERIC), \ + new/datum/stack_recipe("pipe", /obj/item/pipe/quaternary/pipe/crafted, 1, time = 4 SECONDS, crafting_flags = NONE, category = CAT_ATMOSPHERIC), \ null, \ new/datum/stack_recipe("floor tile", /obj/item/stack/tile/iron/base, 1, 4, 20, category = CAT_TILES), \ new/datum/stack_recipe("iron rod", /obj/item/stack/rods, 1, 2, 60, category = CAT_MISC), \ null, \ - new/datum/stack_recipe("wall girders (anchored)", /obj/structure/girder, 2, time = 4 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, placement_checks = STACK_CHECK_TRAM_FORBIDDEN, trait_booster = TRAIT_QUICK_BUILD, trait_modifier = 0.75, category = CAT_STRUCTURE), \ + new/datum/stack_recipe("wall girders (anchored)", /obj/structure/girder, 2, time = 4 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, placement_checks = STACK_CHECK_TRAM_FORBIDDEN, trait_booster = TRAIT_QUICK_BUILD, trait_modifier = 0.75, category = CAT_STRUCTURE), \ null, \ null, \ - new/datum/stack_recipe("computer frame", /obj/structure/frame/computer, 5, time = 2.5 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_EQUIPMENT), \ - new/datum/stack_recipe("modular console", /obj/machinery/modular_computer, 10, time = 2.5 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_EQUIPMENT), \ - new/datum/stack_recipe("machine frame", /obj/structure/frame/machine, 5, time = 2.5 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_EQUIPMENT), \ + new/datum/stack_recipe("computer frame", /obj/structure/frame/computer, 5, time = 2.5 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_STRUCTURE), \ + new/datum/stack_recipe("modular console", /obj/machinery/modular_computer, 10, time = 2.5 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_STRUCTURE), \ + new/datum/stack_recipe("machine frame", /obj/structure/frame/machine, 5, time = 2.5 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_STRUCTURE), \ null, \ new /datum/stack_recipe_list("airlock assemblies", list( \ - new /datum/stack_recipe("standard airlock assembly", /obj/structure/door_assembly, 4, time = 5 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_DOORS), \ - new /datum/stack_recipe("public airlock assembly", /obj/structure/door_assembly/door_assembly_public, 4, time = 5 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_DOORS), \ - new /datum/stack_recipe("command airlock assembly", /obj/structure/door_assembly/door_assembly_com, 4, time = 5 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_DOORS), \ - new /datum/stack_recipe("security airlock assembly", /obj/structure/door_assembly/door_assembly_sec, 4, time = 5 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_DOORS), \ - new /datum/stack_recipe("engineering airlock assembly", /obj/structure/door_assembly/door_assembly_eng, 4, time = 5 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_DOORS), \ - new /datum/stack_recipe("mining airlock assembly", /obj/structure/door_assembly/door_assembly_min, 4, time = 5 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_DOORS), \ - new /datum/stack_recipe("atmospherics airlock assembly", /obj/structure/door_assembly/door_assembly_atmo, 4, time = 5 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_DOORS), \ - new /datum/stack_recipe("research airlock assembly", /obj/structure/door_assembly/door_assembly_research, 4, time = 5 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_DOORS), \ - new /datum/stack_recipe("freezer airlock assembly", /obj/structure/door_assembly/door_assembly_fre, 4, time = 5 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_DOORS), \ - new /datum/stack_recipe("science airlock assembly", /obj/structure/door_assembly/door_assembly_science, 4, time = 5 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_DOORS), \ - new /datum/stack_recipe("medical airlock assembly", /obj/structure/door_assembly/door_assembly_med, 4, time = 5 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_DOORS), \ - new /datum/stack_recipe("hydroponics airlock assembly", /obj/structure/door_assembly/door_assembly_hydro, 4, time = 5 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_DOORS), \ - new /datum/stack_recipe("virology airlock assembly", /obj/structure/door_assembly/door_assembly_viro, 4, time = 5 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_DOORS), \ - new /datum/stack_recipe("maintenance airlock assembly", /obj/structure/door_assembly/door_assembly_mai, 4, time = 5 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_DOORS), \ - new /datum/stack_recipe("external airlock assembly", /obj/structure/door_assembly/door_assembly_ext, 4, time = 5 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_DOORS), \ - new /datum/stack_recipe("external maintenance airlock assembly", /obj/structure/door_assembly/door_assembly_extmai, 4, time = 5 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_DOORS), \ - new /datum/stack_recipe("airtight hatch assembly", /obj/structure/door_assembly/door_assembly_hatch, 4, time = 5 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_DOORS), \ - new /datum/stack_recipe("maintenance hatch assembly", /obj/structure/door_assembly/door_assembly_mhatch, 4, time = 5 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_DOORS), \ + new /datum/stack_recipe("standard airlock assembly", /obj/structure/door_assembly, 4, time = 5 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_DOORS), \ + new /datum/stack_recipe("public airlock assembly", /obj/structure/door_assembly/door_assembly_public, 4, time = 5 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_DOORS), \ + new /datum/stack_recipe("command airlock assembly", /obj/structure/door_assembly/door_assembly_com, 4, time = 5 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_DOORS), \ + new /datum/stack_recipe("security airlock assembly", /obj/structure/door_assembly/door_assembly_sec, 4, time = 5 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_DOORS), \ + new /datum/stack_recipe("engineering airlock assembly", /obj/structure/door_assembly/door_assembly_eng, 4, time = 5 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_DOORS), \ + new /datum/stack_recipe("mining airlock assembly", /obj/structure/door_assembly/door_assembly_min, 4, time = 5 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_DOORS), \ + new /datum/stack_recipe("atmospherics airlock assembly", /obj/structure/door_assembly/door_assembly_atmo, 4, time = 5 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_DOORS), \ + new /datum/stack_recipe("research airlock assembly", /obj/structure/door_assembly/door_assembly_research, 4, time = 5 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_DOORS), \ + new /datum/stack_recipe("freezer airlock assembly", /obj/structure/door_assembly/door_assembly_fre, 4, time = 5 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_DOORS), \ + new /datum/stack_recipe("science airlock assembly", /obj/structure/door_assembly/door_assembly_science, 4, time = 5 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_DOORS), \ + new /datum/stack_recipe("medical airlock assembly", /obj/structure/door_assembly/door_assembly_med, 4, time = 5 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_DOORS), \ + new /datum/stack_recipe("hydroponics airlock assembly", /obj/structure/door_assembly/door_assembly_hydro, 4, time = 5 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_DOORS), \ + new /datum/stack_recipe("virology airlock assembly", /obj/structure/door_assembly/door_assembly_viro, 4, time = 5 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_DOORS), \ + new /datum/stack_recipe("maintenance airlock assembly", /obj/structure/door_assembly/door_assembly_mai, 4, time = 5 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_DOORS), \ + new /datum/stack_recipe("external airlock assembly", /obj/structure/door_assembly/door_assembly_ext, 4, time = 5 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_DOORS), \ + new /datum/stack_recipe("external maintenance airlock assembly", /obj/structure/door_assembly/door_assembly_extmai, 4, time = 5 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_DOORS), \ + new /datum/stack_recipe("airtight hatch assembly", /obj/structure/door_assembly/door_assembly_hatch, 4, time = 5 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_DOORS), \ + new /datum/stack_recipe("maintenance hatch assembly", /obj/structure/door_assembly/door_assembly_mhatch, 4, time = 5 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_DOORS), \ )), \ null, \ - new/datum/stack_recipe("firelock frame", /obj/structure/firelock_frame, 3, time = 5 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_DOORS), \ - new/datum/stack_recipe("turret frame", /obj/machinery/porta_turret_construct, 5, time = 2.5 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_EQUIPMENT), \ - new/datum/stack_recipe("meatspike frame", /obj/structure/kitchenspike_frame, 5, time = 2.5 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_EQUIPMENT), \ - new/datum/stack_recipe("reflector frame", /obj/structure/reflector, 5, time = 2.5 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_EQUIPMENT), \ + new/datum/stack_recipe("firelock frame", /obj/structure/firelock_frame, 3, time = 5 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_DOORS), \ + new/datum/stack_recipe("turret frame", /obj/machinery/porta_turret_construct, 5, time = 2.5 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_STRUCTURE), \ + new/datum/stack_recipe("meatspike frame", /obj/structure/kitchenspike_frame, 5, time = 2.5 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_STRUCTURE), \ + new/datum/stack_recipe("reflector frame", /obj/structure/reflector, 5, time = 2.5 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_STRUCTURE), \ null, \ - new/datum/stack_recipe("grenade casing", /obj/item/grenade/chem_grenade, check_density = FALSE, category = CAT_CHEMISTRY), \ - new/datum/stack_recipe("light fixture frame", /obj/item/wallframe/light_fixture, 2, check_density = FALSE, category = CAT_EQUIPMENT), \ - new/datum/stack_recipe("small light fixture frame", /obj/item/wallframe/light_fixture/small, 1, check_density = FALSE, category = CAT_EQUIPMENT), \ + new/datum/stack_recipe("grenade casing", /obj/item/grenade/chem_grenade, crafting_flags = NONE, category = CAT_CHEMISTRY), \ + new/datum/stack_recipe("light fixture frame", /obj/item/wallframe/light_fixture, 2, crafting_flags = NONE, category = CAT_STRUCTURE), \ + new/datum/stack_recipe("small light fixture frame", /obj/item/wallframe/light_fixture/small, 1, crafting_flags = NONE, category = CAT_STRUCTURE), \ null, \ - new/datum/stack_recipe("apc frame", /obj/item/wallframe/apc, 2, check_density = FALSE, category = CAT_EQUIPMENT), \ - new/datum/stack_recipe("air alarm frame", /obj/item/wallframe/airalarm, 2, check_density = FALSE, category = CAT_EQUIPMENT), \ - new/datum/stack_recipe("fire alarm frame", /obj/item/wallframe/firealarm, 2, check_density = FALSE, category = CAT_EQUIPMENT), \ - new/datum/stack_recipe("extinguisher cabinet frame", /obj/item/wallframe/extinguisher_cabinet, 2, check_density = FALSE, category = CAT_EQUIPMENT), \ - new/datum/stack_recipe("button frame", /obj/item/wallframe/button, 1, check_density = FALSE, category = CAT_EQUIPMENT), \ + new/datum/stack_recipe("apc frame", /obj/item/wallframe/apc, 2, crafting_flags = NONE, category = CAT_STRUCTURE), \ + new/datum/stack_recipe("air alarm frame", /obj/item/wallframe/airalarm, 2, crafting_flags = NONE, category = CAT_STRUCTURE), \ + new/datum/stack_recipe("fire alarm frame", /obj/item/wallframe/firealarm, 2, crafting_flags = NONE, category = CAT_STRUCTURE), \ + new/datum/stack_recipe("extinguisher cabinet frame", /obj/item/wallframe/extinguisher_cabinet, 2, crafting_flags = NONE, category = CAT_STRUCTURE), \ + new/datum/stack_recipe("button frame", /obj/item/wallframe/button, 1, crafting_flags = NONE, category = CAT_STRUCTURE), \ + new/datum/stack_recipe("light switch frame", /obj/item/wallframe/light_switch, 1, crafting_flags = NONE, category = CAT_STRUCTURE), \ + new/datum/stack_recipe("sparker frame", /obj/item/wallframe/sparker, 1, crafting_flags = NONE, category = CAT_STRUCTURE), \ + new/datum/stack_recipe("turret control frame", /obj/item/wallframe/turret_control, 6, crafting_flags = NONE, category = CAT_STRUCTURE), \ + new/datum/stack_recipe("camera assembly", /obj/item/wallframe/camera, 1, crafting_flags = NONE, category = CAT_STRUCTURE), \ + new/datum/stack_recipe("newscaster frame", /obj/item/wallframe/newscaster, 7, crafting_flags = NONE, category = CAT_STRUCTURE), \ + new/datum/stack_recipe("status display frame", /obj/item/wallframe/status_display, 7, crafting_flags = NONE, category = CAT_STRUCTURE), \ + new/datum/stack_recipe("intercom frame", /obj/item/wallframe/intercom, 2, crafting_flags = NONE, category = CAT_STRUCTURE), \ + new/datum/stack_recipe("requests console frame", /obj/item/wallframe/requests_console, 7, crafting_flags = NONE, category = CAT_STRUCTURE), \ + new/datum/stack_recipe("telescreen turbine frame", /obj/item/wallframe/telescreen/turbine, 7, crafting_flags = NONE, category = CAT_STRUCTURE), \ + new/datum/stack_recipe("telescreen engine frame", /obj/item/wallframe/telescreen/engine, 7, crafting_flags = NONE, category = CAT_STRUCTURE), \ + new/datum/stack_recipe("telescreen auxbase frame", /obj/item/wallframe/telescreen/auxbase, 7, crafting_flags = NONE, category = CAT_STRUCTURE), \ + new/datum/stack_recipe("tram controller frame", /obj/item/wallframe/tram/controller, 20, crafting_flags = NONE, category = CAT_STRUCTURE), \ + new/datum/stack_recipe("tram display frame", /obj/item/wallframe/indicator_display, 7, crafting_flags = NONE, category = CAT_STRUCTURE), \ null, \ - new/datum/stack_recipe("iron door", /obj/structure/mineral_door/iron, 20, time = 5 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, applies_mats = TRUE, category = CAT_DOORS), \ - new/datum/stack_recipe("filing cabinet", /obj/structure/filingcabinet, 2, time = 10 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_FURNITURE), \ - new/datum/stack_recipe("desk bell", /obj/structure/desk_bell, 2, time = 3 SECONDS, check_density = FALSE, category = CAT_FURNITURE), \ - new/datum/stack_recipe("floodlight frame", /obj/structure/floodlight_frame, 5, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_EQUIPMENT), \ - new/datum/stack_recipe("voting box", /obj/structure/votebox, 15, time = 5 SECONDS, check_density = FALSE, category = CAT_ENTERTAINMENT), \ - new/datum/stack_recipe("pestle", /obj/item/pestle, 1, time = 5 SECONDS, check_density = FALSE, category = CAT_CHEMISTRY), \ - new/datum/stack_recipe("hygienebot assembly", /obj/item/bot_assembly/hygienebot, 2, time = 5 SECONDS, check_density = FALSE, category = CAT_ROBOT), \ - new/datum/stack_recipe("shower frame", /obj/structure/showerframe, 2, time = 2 SECONDS, check_density = FALSE, category = CAT_FURNITURE), \ - new/datum/stack_recipe("urinal", /obj/item/wallframe/urinal, 2, time = 1 SECONDS, check_density = FALSE, category = CAT_FURNITURE) + new/datum/stack_recipe("iron door", /obj/structure/mineral_door/iron, 20, time = 5 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND | CRAFT_APPLIES_MATS, category = CAT_DOORS), \ + new/datum/stack_recipe("filing cabinet", /obj/structure/filingcabinet, 2, time = 10 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_FURNITURE), \ + new/datum/stack_recipe("desk bell", /obj/structure/desk_bell, 2, time = 3 SECONDS, crafting_flags = NONE, category = CAT_FURNITURE), \ + new/datum/stack_recipe("floodlight frame", /obj/structure/floodlight_frame, 5, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_STRUCTURE), \ + new/datum/stack_recipe("voting box", /obj/structure/votebox, 15, time = 5 SECONDS, crafting_flags = NONE, category = CAT_ENTERTAINMENT), \ + new/datum/stack_recipe("pestle", /obj/item/pestle, 1, time = 5 SECONDS, crafting_flags = NONE, category = CAT_CHEMISTRY), \ + new/datum/stack_recipe("hygienebot assembly", /obj/item/bot_assembly/hygienebot, 2, time = 5 SECONDS, crafting_flags = NONE, category = CAT_ROBOT), \ + new/datum/stack_recipe("shower frame", /obj/structure/showerframe, 2, time = 2 SECONDS, crafting_flags = NONE, category = CAT_FURNITURE), \ + new/datum/stack_recipe("urinal", /obj/item/wallframe/urinal, 2, time = 1 SECONDS, crafting_flags = NONE, category = CAT_FURNITURE) )) /obj/item/stack/sheet/iron @@ -223,43 +236,44 @@ GLOBAL_LIST_INIT(metal_recipes, list ( \ user.put_in_inactive_hand(new_item) return ITEM_INTERACT_SUCCESS -/obj/item/stack/sheet/iron/afterattack_secondary(atom/target, mob/user, proximity_flag, click_parameters) - if(isopenturf(target)) - var/turf/open/build_on = target - if(!user.Adjacent(build_on)) - return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN - if(isgroundlessturf(build_on)) - user.balloon_alert(user, "can't place it here!") - return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN - if(build_on.is_blocked_turf()) - user.balloon_alert(user, "something is blocking the tile!") - return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN - if(get_amount() < 2) - user.balloon_alert(user, "not enough material!") - return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN - if(!do_after(user, 4 SECONDS, build_on)) - return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN - if(build_on.is_blocked_turf()) - user.balloon_alert(user, "something is blocking the tile!") - return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN - if(!use(2)) - user.balloon_alert(user, "not enough material!") - return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN - new/obj/structure/girder/displaced(build_on) - return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN - return SECONDARY_ATTACK_CONTINUE_CHAIN +/obj/item/stack/sheet/iron/interact_with_atom_secondary(atom/interacting_with, mob/living/user, list/modifiers) + if(!isopenturf(interacting_with)) + return NONE + var/turf/open/build_on = interacting_with + if(!user.Adjacent(build_on)) + return ITEM_INTERACT_BLOCKING + if(isgroundlessturf(build_on)) + user.balloon_alert(user, "can't place it here!") + return ITEM_INTERACT_BLOCKING + if(build_on.is_blocked_turf()) + user.balloon_alert(user, "something is blocking the tile!") + return ITEM_INTERACT_BLOCKING + if(get_amount() < 2) + user.balloon_alert(user, "not enough material!") + return ITEM_INTERACT_BLOCKING + if(!do_after(user, 4 SECONDS, build_on)) + return ITEM_INTERACT_BLOCKING + if(build_on.is_blocked_turf()) + user.balloon_alert(user, "something is blocking the tile!") + return ITEM_INTERACT_BLOCKING + if(!use(2)) + user.balloon_alert(user, "not enough material!") + return ITEM_INTERACT_BLOCKING + new/obj/structure/girder/displaced(build_on) + return ITEM_INTERACT_SUCCESS /* * Plasteel */ GLOBAL_LIST_INIT(plasteel_recipes, list ( \ - new/datum/stack_recipe("AI core", /obj/structure/ai_core, 4, time = 5 SECONDS, one_per_turf = TRUE, check_density = FALSE, category = CAT_ROBOT), - new/datum/stack_recipe("bomb assembly", /obj/machinery/syndicatebomb/empty, 10, time = 5 SECONDS, check_density = FALSE, category = CAT_CHEMISTRY), - new/datum/stack_recipe("Large Gas Tank", /obj/structure/tank_frame, 4, time=1 SECONDS, one_per_turf=TRUE, check_density = FALSE, category = CAT_ATMOSPHERIC), + new/datum/stack_recipe("AI core", /obj/structure/ai_core, 4, time = 5 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF, category = CAT_ROBOT), + new/datum/stack_recipe("bomb assembly", /obj/machinery/syndicatebomb/empty, 10, time = 5 SECONDS, crafting_flags = NONE, category = CAT_CHEMISTRY), + new/datum/stack_recipe("Large Gas Tank", /obj/structure/tank_frame, 4, time=1 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF, category = CAT_ATMOSPHERIC), + new/datum/stack_recipe("shutter assembly", /obj/machinery/door/poddoor/shutters/preopen/deconstructed, 5, time = 5 SECONDS, crafting_flags = CRAFT_ONE_PER_TURF, category = CAT_DOORS), null, new /datum/stack_recipe_list("airlock assemblies", list( \ - new/datum/stack_recipe("high security airlock assembly", /obj/structure/door_assembly/door_assembly_highsecurity, 4, time = 5 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_DOORS), - new/datum/stack_recipe("vault door assembly", /obj/structure/door_assembly/door_assembly_vault, 6, time = 5 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_DOORS), + new/datum/stack_recipe("high security airlock assembly", /obj/structure/door_assembly/door_assembly_highsecurity, 4, time = 5 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_DOORS), + new/datum/stack_recipe("vault door assembly", /obj/structure/door_assembly/door_assembly_vault, 6, time = 5 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_DOORS), )), \ )) @@ -300,50 +314,58 @@ GLOBAL_LIST_INIT(plasteel_recipes, list ( \ * Wood */ GLOBAL_LIST_INIT(wood_recipes, list ( \ - new/datum/stack_recipe("wooden sandals", /obj/item/clothing/shoes/sandal, 1, check_density = FALSE, category = CAT_CLOTHING), \ - new/datum/stack_recipe("wood floor tile", /obj/item/stack/tile/wood, 1, 4, 20, check_density = FALSE, category = CAT_TILES), \ - new/datum/stack_recipe("wood table frame", /obj/structure/table_frame/wood, 2, time = 1 SECONDS, check_density = FALSE, category = CAT_FURNITURE), \ - new/datum/stack_recipe("rolling pin", /obj/item/kitchen/rollingpin, 2, time = 3 SECONDS, check_density = FALSE, category = CAT_TOOLS), \ - new/datum/stack_recipe("wooden chair", /obj/structure/chair/wood/, 3, time = 1 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_FURNITURE), \ - new/datum/stack_recipe("winged wooden chair", /obj/structure/chair/wood/wings, 3, time = 1 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_FURNITURE), \ - new/datum/stack_recipe("wooden barricade", /obj/structure/barricade/wooden, 5, time = 5 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_STRUCTURE), \ - new/datum/stack_recipe("wooden door", /obj/structure/mineral_door/wood, 10, time = 2 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_DOORS), \ - new/datum/stack_recipe("wooden stairs frame", /obj/structure/stairs_frame/wood, 10, time = 5 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_STRUCTURE), \ - new/datum/stack_recipe("wooden fence", /obj/structure/railing/wooden_fence, 2, time = 5 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_STRUCTURE), \ - new/datum/stack_recipe("cat house", /obj/structure/cat_house, 5, time = 5 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_STRUCTURE), \ - new/datum/stack_recipe("coffin", /obj/structure/closet/crate/coffin, 5, time = 1.5 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_FURNITURE), \ - new/datum/stack_recipe("book case", /obj/structure/bookcase, 4, time = 1.5 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_FURNITURE), \ - new/datum/stack_recipe("drying rack", /obj/machinery/smartfridge/drying_rack, 10, time = 1.5 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_TOOLS), \ - new/datum/stack_recipe("wooden barrel", /obj/structure/fermenting_barrel, 8, time = 5 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_CONTAINERS), \ - new/datum/stack_recipe("dog bed", /obj/structure/bed/dogbed, 10, time = 1 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_FURNITURE), \ - new/datum/stack_recipe("dresser", /obj/structure/dresser, 10, time = 1.5 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_FURNITURE), \ - new/datum/stack_recipe("picture frame", /obj/item/wallframe/picture, 1, time = 1 SECONDS, check_density = FALSE, category = CAT_ENTERTAINMENT),\ - new/datum/stack_recipe("painting frame", /obj/item/wallframe/painting, 1, time = 1 SECONDS, check_density = FALSE, category = CAT_ENTERTAINMENT),\ - new/datum/stack_recipe("display case chassis", /obj/structure/displaycase_chassis, 5, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_FURNITURE), \ - new/datum/stack_recipe("wooden buckler", /obj/item/shield/buckler, 20, time = 4 SECONDS, check_density = FALSE, category = CAT_EQUIPMENT), \ - new/datum/stack_recipe("apiary", /obj/structure/beebox, 40, time = 5 SECONDS, check_density = FALSE, category = CAT_TOOLS),\ - new/datum/stack_recipe("mannequin", /obj/structure/mannequin/wood, 25, time = 5 SECONDS, one_per_turf = TRUE, category = CAT_ENTERTAINMENT), \ - new/datum/stack_recipe("tiki mask", /obj/item/clothing/mask/gas/tiki_mask, 2, check_density = FALSE, category = CAT_CLOTHING), \ - new/datum/stack_recipe("smoking pipe", /obj/item/clothing/mask/cigarette/pipe, 2, check_density = FALSE, category = CAT_CLOTHING), \ - new/datum/stack_recipe("honey frame", /obj/item/honey_frame, 5, time = 1 SECONDS, check_density = FALSE, category = CAT_TOOLS),\ - new/datum/stack_recipe("wooden bucket", /obj/item/reagent_containers/cup/bucket/wooden, 3, time = 1 SECONDS, check_density = FALSE, category = CAT_CONTAINERS),\ - new/datum/stack_recipe("rake", /obj/item/cultivator/rake, 5, time = 1 SECONDS, check_density = FALSE, category = CAT_TOOLS),\ - new/datum/stack_recipe("ore box", /obj/structure/ore_box, 4, time = 5 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_CONTAINERS),\ - new/datum/stack_recipe("wooden crate", /obj/structure/closet/crate/wooden, 6, time = 5 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_FURNITURE),\ - new/datum/stack_recipe("baseball bat", /obj/item/melee/baseball_bat, 5, time = 1.5 SECONDS, check_density = FALSE, category = CAT_WEAPON_MELEE),\ - new/datum/stack_recipe("loom", /obj/structure/loom, 10, time = 1.5 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_TOOLS), \ - new/datum/stack_recipe("mortar", /obj/item/reagent_containers/cup/mortar, 3, check_density = FALSE, category = CAT_CHEMISTRY), \ - new/datum/stack_recipe("firebrand", /obj/item/match/firebrand, 2, time = 10 SECONDS, check_density = FALSE, category = CAT_TOOLS), \ - new/datum/stack_recipe("bonfire", /obj/structure/bonfire, 10, time = 6 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_TOOLS), \ - new/datum/stack_recipe("easel", /obj/structure/easel, 5, time = 1 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_ENTERTAINMENT), \ - new/datum/stack_recipe("noticeboard", /obj/item/wallframe/noticeboard, 1, time = 1 SECONDS, one_per_turf = FALSE, on_solid_ground = FALSE, check_density = FALSE, category = CAT_FURNITURE), \ - new/datum/stack_recipe("test tube rack", /obj/item/storage/test_tube_rack, 1, time = 1 SECONDS, check_density = FALSE, category = CAT_CHEMISTRY), \ + new/datum/stack_recipe("wooden sandals", /obj/item/clothing/shoes/sandal, 1, crafting_flags = NONE, category = CAT_CLOTHING), \ + new/datum/stack_recipe("wood floor tile", /obj/item/stack/tile/wood, 1, 4, 20, crafting_flags = NONE, category = CAT_TILES), \ + new/datum/stack_recipe("wood table frame", /obj/structure/table_frame/wood, 2, time = 1 SECONDS, crafting_flags = NONE, category = CAT_FURNITURE), \ + new/datum/stack_recipe("rolling pin", /obj/item/kitchen/rollingpin, 2, time = 3 SECONDS, crafting_flags = NONE, category = CAT_TOOLS), \ + new/datum/stack_recipe("wooden chair", /obj/structure/chair/wood/, 3, time = 1 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_FURNITURE), \ + new/datum/stack_recipe("winged wooden chair", /obj/structure/chair/wood/wings, 3, time = 1 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_FURNITURE), \ + new/datum/stack_recipe("wooden barricade", /obj/structure/barricade/wooden, 5, time = 5 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_STRUCTURE), \ + new/datum/stack_recipe("wooden door", /obj/structure/mineral_door/wood, 10, time = 2 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_DOORS), \ + new/datum/stack_recipe("wooden stairs frame", /obj/structure/stairs_frame/wood, 10, time = 5 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_STRUCTURE), \ + new/datum/stack_recipe("wooden fence", /obj/structure/railing/wooden_fence, 2, time = 5 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_STRUCTURE), \ + new/datum/stack_recipe("raptor trough", /obj/structure/ore_container/food_trough/raptor_trough, 5, time = 5 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_STRUCTURE), \ + new/datum/stack_recipe("cat house", /obj/structure/cat_house, 5, time = 5 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_STRUCTURE), \ + new/datum/stack_recipe("coffin", /obj/structure/closet/crate/coffin, 5, time = 1.5 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_FURNITURE), \ + new/datum/stack_recipe("book case", /obj/structure/bookcase, 4, time = 1.5 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_FURNITURE), \ + new/datum/stack_recipe("drying rack", /obj/machinery/smartfridge/drying_rack, 10, time = 1.5 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_TOOLS), \ + new/datum/stack_recipe("wooden barrel", /obj/structure/fermenting_barrel, 8, time = 5 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_CONTAINERS), \ + new/datum/stack_recipe("dog bed", /obj/structure/bed/dogbed, 10, time = 1 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_FURNITURE), \ + new/datum/stack_recipe("dresser", /obj/structure/dresser, 10, time = 1.5 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_FURNITURE), \ + new/datum/stack_recipe("picture frame", /obj/item/wallframe/picture, 1, time = 1 SECONDS, crafting_flags = NONE, category = CAT_ENTERTAINMENT),\ + new/datum/stack_recipe("painting frame", /obj/item/wallframe/painting, 1, time = 1 SECONDS, crafting_flags = NONE, category = CAT_ENTERTAINMENT),\ + new/datum/stack_recipe("display case chassis", /obj/structure/displaycase_chassis, 5, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_FURNITURE), \ + new/datum/stack_recipe("wooden buckler", /obj/item/shield/buckler, 20, time = 4 SECONDS, crafting_flags = NONE, category = CAT_EQUIPMENT), \ + new/datum/stack_recipe("apiary", /obj/structure/beebox, 40, time = 5 SECONDS, crafting_flags = NONE, category = CAT_TOOLS),\ + new/datum/stack_recipe("mannequin", /obj/structure/mannequin/wood, 25, time = 5 SECONDS, crafting_flags = CRAFT_ONE_PER_TURF, category = CAT_ENTERTAINMENT), \ + new/datum/stack_recipe("tiki mask", /obj/item/clothing/mask/gas/tiki_mask, 2, crafting_flags = NONE, category = CAT_CLOTHING), \ + new/datum/stack_recipe("smoking pipe", /obj/item/cigarette/pipe, 2, crafting_flags = NONE, category = CAT_CLOTHING), \ + new/datum/stack_recipe("honey frame", /obj/item/honey_frame, 5, time = 1 SECONDS, crafting_flags = NONE, category = CAT_TOOLS),\ + new/datum/stack_recipe("wooden bucket", /obj/item/reagent_containers/cup/bucket/wooden, 3, time = 1 SECONDS, crafting_flags = NONE, category = CAT_CONTAINERS),\ + new/datum/stack_recipe("rake", /obj/item/cultivator/rake, 5, time = 1 SECONDS, crafting_flags = NONE, category = CAT_TOOLS),\ + new/datum/stack_recipe("ore box", /obj/structure/ore_box, 4, time = 5 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_CONTAINERS),\ + new/datum/stack_recipe("wooden crate", /obj/structure/closet/crate/wooden, 6, time = 5 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_FURNITURE),\ + new/datum/stack_recipe("baseball bat", /obj/item/melee/baseball_bat, 5, time = 1.5 SECONDS, crafting_flags = NONE, category = CAT_WEAPON_MELEE),\ + new/datum/stack_recipe("wooden crutch", /obj/item/cane/crutch/wood, 5, time = 1.5 SECONDS, crafting_flags = NONE, category = CAT_WEAPON_MELEE),\ + new/datum/stack_recipe("loom", /obj/structure/loom, 10, time = 1.5 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_TOOLS), \ + new/datum/stack_recipe("mortar", /obj/item/reagent_containers/cup/mortar, 3, crafting_flags = NONE, category = CAT_CHEMISTRY), \ + new/datum/stack_recipe("firebrand", /obj/item/match/firebrand, 2, time = 10 SECONDS, crafting_flags = NONE, category = CAT_TOOLS), \ + new/datum/stack_recipe("bonfire", /obj/structure/bonfire, 10, time = 6 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_TOOLS), \ + new/datum/stack_recipe("easel", /obj/structure/easel, 5, time = 1 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_ENTERTAINMENT), \ + new/datum/stack_recipe("noticeboard", /obj/item/wallframe/noticeboard, 1, time = 1 SECONDS, crafting_flags = NONE, category = CAT_FURNITURE), \ + new/datum/stack_recipe("test tube rack", /obj/item/storage/test_tube_rack, 1, time = 1 SECONDS, crafting_flags = NONE, category = CAT_CHEMISTRY), \ null, \ new/datum/stack_recipe_list("pews", list( - new /datum/stack_recipe("pew (middle)", /obj/structure/chair/pew, 3, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_FURNITURE), - new /datum/stack_recipe("pew (left)", /obj/structure/chair/pew/left, 3, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_FURNITURE), - new /datum/stack_recipe("pew (right)", /obj/structure/chair/pew/right, 3, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_FURNITURE) + new /datum/stack_recipe("pew (middle)", /obj/structure/chair/pew, 3, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_FURNITURE), + new /datum/stack_recipe("pew (left)", /obj/structure/chair/pew/left, 3, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_FURNITURE), + new /datum/stack_recipe("pew (right)", /obj/structure/chair/pew/right, 3, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_FURNITURE) )), + new/datum/stack_recipe_list("peg limbs", list( + new /datum/stack_recipe("peg arm (left)", /obj/item/bodypart/arm/left/ghetto, 2, crafting_flags = NONE, category = CAT_MISC), + new /datum/stack_recipe("peg arm (right)", /obj/item/bodypart/arm/right/ghetto, 2, crafting_flags = NONE, category = CAT_MISC), + new /datum/stack_recipe("peg leg (left)", /obj/item/bodypart/leg/left/ghetto, 2, crafting_flags = NONE, category = CAT_MISC), + new /datum/stack_recipe("peg leg (right)", /obj/item/bodypart/leg/right/ghetto, 2, crafting_flags = NONE, category = CAT_MISC) + )), null, \ )) @@ -374,24 +396,39 @@ GLOBAL_LIST_INIT(wood_recipes, list ( \ /obj/item/stack/sheet/mineral/wood/fifty amount = 50 +/obj/item/stack/sheet/mineral/wood/interact_with_atom(mob/living/carbon/human/target, mob/user) + if(!istype(target)) + return NONE + + var/obj/item/bodypart/affecting = target.get_bodypart(check_zone(user.zone_selected)) + if(affecting && IS_PEG_LIMB(affecting)) + if(user == target) + user.visible_message(span_notice("[user] starts to fix their [affecting.name]."), span_notice("You start fixing [target == user ? "your" : "[target]'s"] [affecting.name].")) + if(!do_after(user, 5 SECONDS, target)) + return ITEM_INTERACT_FAILURE + if(target.item_heal(user, brute_heal = 15, burn_heal = 15, heal_message_brute = "splintering", heal_message_burn = "charring", required_bodytype = BODYTYPE_PEG)) + use(1) + return ITEM_INTERACT_SUCCESS + else + return NONE /* * Bamboo */ GLOBAL_LIST_INIT(bamboo_recipes, list ( \ - new/datum/stack_recipe("punji sticks trap", /obj/structure/punji_sticks, 5, time = 3 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_EQUIPMENT), \ - new/datum/stack_recipe("bamboo spear", /obj/item/spear/bamboospear, 25, time = 9 SECONDS, check_density = FALSE, category = CAT_WEAPON_MELEE), \ - new/datum/stack_recipe("blow gun", /obj/item/gun/syringe/blowgun, 10, time = 7 SECONDS, check_density = FALSE, category = CAT_WEAPON_RANGED), \ - new/datum/stack_recipe("crude syringe", /obj/item/reagent_containers/syringe/crude, 5, time = 1 SECONDS, check_density = FALSE, category = CAT_CHEMISTRY), \ - new/datum/stack_recipe("rice hat", /obj/item/clothing/head/costume/rice_hat, 10, time = 7 SECONDS, check_density = FALSE, category = CAT_CLOTHING), \ + new/datum/stack_recipe("punji sticks trap", /obj/structure/punji_sticks, 5, time = 3 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_EQUIPMENT), \ + new/datum/stack_recipe("bamboo spear", /obj/item/spear/bamboospear, 25, time = 9 SECONDS, crafting_flags = NONE, category = CAT_WEAPON_MELEE), \ + new/datum/stack_recipe("blow gun", /obj/item/gun/syringe/blowgun, 10, time = 7 SECONDS, crafting_flags = NONE, category = CAT_WEAPON_RANGED), \ + new/datum/stack_recipe("crude syringe", /obj/item/reagent_containers/syringe/crude, 5, time = 1 SECONDS, crafting_flags = NONE, category = CAT_CHEMISTRY), \ + new/datum/stack_recipe("rice hat", /obj/item/clothing/head/costume/rice_hat, 10, time = 7 SECONDS, crafting_flags = NONE, category = CAT_CLOTHING), \ null, \ - new/datum/stack_recipe("bamboo stool", /obj/structure/chair/stool/bamboo, 2, time = 1 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_FURNITURE), \ - new/datum/stack_recipe("bamboo mat piece", /obj/item/stack/tile/bamboo, 1, 4, 20, check_density = FALSE, category = CAT_TILES), \ + new/datum/stack_recipe("bamboo stool", /obj/structure/chair/stool/bamboo, 2, time = 1 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_FURNITURE), \ + new/datum/stack_recipe("bamboo mat piece", /obj/item/stack/tile/bamboo, 1, 4, 20, crafting_flags = NONE, category = CAT_TILES), \ null, \ new/datum/stack_recipe_list("bamboo benches", list( - new /datum/stack_recipe("bamboo bench (middle)", /obj/structure/chair/sofa/bamboo, 3, time = 1 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_FURNITURE), - new /datum/stack_recipe("bamboo bench (left)", /obj/structure/chair/sofa/bamboo/left, 3, time = 1 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_FURNITURE), - new /datum/stack_recipe("bamboo bench (right)", /obj/structure/chair/sofa/bamboo/right, 3, time = 1 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_FURNITURE) + new /datum/stack_recipe("bamboo bench (middle)", /obj/structure/chair/sofa/bamboo, 3, time = 1 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_FURNITURE), + new /datum/stack_recipe("bamboo bench (left)", /obj/structure/chair/sofa/bamboo/left, 3, time = 1 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_FURNITURE), + new /datum/stack_recipe("bamboo bench (right)", /obj/structure/chair/sofa/bamboo/right, 3, time = 1 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_FURNITURE) )), \ )) @@ -426,41 +463,41 @@ GLOBAL_LIST_INIT(bamboo_recipes, list ( \ * Cloth */ GLOBAL_LIST_INIT(cloth_recipes, list ( \ - new/datum/stack_recipe("white jumpskirt", /obj/item/clothing/under/color/jumpskirt/white, 3, check_density = FALSE, category = CAT_CLOTHING), /*Ladies first*/ \ - new/datum/stack_recipe("white jumpsuit", /obj/item/clothing/under/color/white, 3, check_density = FALSE, category = CAT_CLOTHING), \ - new/datum/stack_recipe("white shoes", /obj/item/clothing/shoes/sneakers/white, 2, check_density = FALSE, category = CAT_CLOTHING), \ - new/datum/stack_recipe("white scarf", /obj/item/clothing/neck/scarf, 1, check_density = FALSE, category = CAT_CLOTHING), \ - new/datum/stack_recipe("white bandana", /obj/item/clothing/mask/bandana/white, 2, check_density = FALSE, category = CAT_CLOTHING), \ + new/datum/stack_recipe("white jumpskirt", /obj/item/clothing/under/color/jumpskirt/white, 3, crafting_flags = NONE, category = CAT_CLOTHING), /*Ladies first*/ \ + new/datum/stack_recipe("white jumpsuit", /obj/item/clothing/under/color/white, 3, crafting_flags = NONE, category = CAT_CLOTHING), \ + new/datum/stack_recipe("white shoes", /obj/item/clothing/shoes/sneakers/white, 2, crafting_flags = NONE, category = CAT_CLOTHING), \ + new/datum/stack_recipe("white scarf", /obj/item/clothing/neck/scarf, 1, crafting_flags = NONE, category = CAT_CLOTHING), \ + new/datum/stack_recipe("white bandana", /obj/item/clothing/mask/bandana/white, 2, crafting_flags = NONE, category = CAT_CLOTHING), \ null, \ - new/datum/stack_recipe("backpack", /obj/item/storage/backpack, 4, check_density = FALSE, category = CAT_CONTAINERS), \ - new/datum/stack_recipe("satchel", /obj/item/storage/backpack/satchel, 4, check_density = FALSE, category = CAT_CONTAINERS), \ - new/datum/stack_recipe("messenger bag", /obj/item/storage/backpack/messenger, 4, check_density = FALSE, category = CAT_CONTAINERS), \ - new/datum/stack_recipe("duffel bag", /obj/item/storage/backpack/duffelbag, 6, check_density = FALSE, category = CAT_CONTAINERS), \ + new/datum/stack_recipe("backpack", /obj/item/storage/backpack, 4, crafting_flags = NONE, category = CAT_CONTAINERS), \ + new/datum/stack_recipe("satchel", /obj/item/storage/backpack/satchel, 4, crafting_flags = NONE, category = CAT_CONTAINERS), \ + new/datum/stack_recipe("messenger bag", /obj/item/storage/backpack/messenger, 4, crafting_flags = NONE, category = CAT_CONTAINERS), \ + new/datum/stack_recipe("duffel bag", /obj/item/storage/backpack/duffelbag, 6, crafting_flags = NONE, category = CAT_CONTAINERS), \ null, \ - new/datum/stack_recipe("plant bag", /obj/item/storage/bag/plants, 4, check_density = FALSE, category = CAT_CONTAINERS), \ - new/datum/stack_recipe("book bag", /obj/item/storage/bag/books, 4, check_density = FALSE, category = CAT_CONTAINERS), \ - new/datum/stack_recipe("mining satchel", /obj/item/storage/bag/ore, 4, check_density = FALSE, category = CAT_CONTAINERS), \ - new/datum/stack_recipe("chemistry bag", /obj/item/storage/bag/chemistry, 4, check_density = FALSE, category = CAT_CONTAINERS), \ - new/datum/stack_recipe("bio bag", /obj/item/storage/bag/bio, 4, check_density = FALSE, category = CAT_CONTAINERS), \ - new/datum/stack_recipe("science bag", /obj/item/storage/bag/xeno, 4, check_density = FALSE, category = CAT_CONTAINERS), \ - new/datum/stack_recipe("construction bag", /obj/item/storage/bag/construction, 4, check_density = FALSE, category = CAT_CONTAINERS), \ + new/datum/stack_recipe("plant bag", /obj/item/storage/bag/plants, 4, crafting_flags = NONE, category = CAT_CONTAINERS), \ + new/datum/stack_recipe("book bag", /obj/item/storage/bag/books, 4, crafting_flags = NONE, category = CAT_CONTAINERS), \ + new/datum/stack_recipe("mining satchel", /obj/item/storage/bag/ore, 4, crafting_flags = NONE, category = CAT_CONTAINERS), \ + new/datum/stack_recipe("chemistry bag", /obj/item/storage/bag/chemistry, 4, crafting_flags = NONE, category = CAT_CONTAINERS), \ + new/datum/stack_recipe("bio bag", /obj/item/storage/bag/bio, 4, crafting_flags = NONE, category = CAT_CONTAINERS), \ + new/datum/stack_recipe("science bag", /obj/item/storage/bag/xeno, 4, crafting_flags = NONE, category = CAT_CONTAINERS), \ + new/datum/stack_recipe("construction bag", /obj/item/storage/bag/construction, 4, crafting_flags = NONE, category = CAT_CONTAINERS), \ null, \ - new/datum/stack_recipe("improvised gauze", /obj/item/stack/medical/gauze/improvised, 1, 2, 6, check_density = FALSE, category = CAT_TOOLS), \ - new/datum/stack_recipe("rag", /obj/item/reagent_containers/cup/rag, 1, check_density = FALSE, category = CAT_CHEMISTRY), \ - new/datum/stack_recipe("bedsheet", /obj/item/bedsheet, 3, check_density = FALSE, category = CAT_FURNITURE), \ - new/datum/stack_recipe("double bedsheet", /obj/item/bedsheet/double, 6, check_density = FALSE, category = CAT_FURNITURE), \ - new/datum/stack_recipe("empty sandbag", /obj/item/emptysandbag, 4, check_density = FALSE, category = CAT_CONTAINERS), \ + new/datum/stack_recipe("improvised gauze", /obj/item/stack/medical/gauze/improvised, 1, 2, 6, crafting_flags = NONE, category = CAT_TOOLS), \ + new/datum/stack_recipe("rag", /obj/item/reagent_containers/cup/rag, 1, crafting_flags = NONE, category = CAT_CHEMISTRY), \ + new/datum/stack_recipe("bedsheet", /obj/item/bedsheet, 3, crafting_flags = NONE, category = CAT_FURNITURE), \ + new/datum/stack_recipe("double bedsheet", /obj/item/bedsheet/double, 6, crafting_flags = NONE, category = CAT_FURNITURE), \ + new/datum/stack_recipe("empty sandbag", /obj/item/emptysandbag, 4, crafting_flags = NONE, category = CAT_CONTAINERS), \ null, \ - new/datum/stack_recipe("fingerless gloves", /obj/item/clothing/gloves/fingerless, 1, check_density = FALSE, category = CAT_CLOTHING), \ - new/datum/stack_recipe("white gloves", /obj/item/clothing/gloves/color/white, 3, check_density = FALSE, category = CAT_CLOTHING), \ - new/datum/stack_recipe("white softcap", /obj/item/clothing/head/soft/mime, 2, check_density = FALSE, category = CAT_CLOTHING), \ - new/datum/stack_recipe("white beanie", /obj/item/clothing/head/beanie, 2, check_density = FALSE, category = CAT_CLOTHING), \ + new/datum/stack_recipe("fingerless gloves", /obj/item/clothing/gloves/fingerless, 1, crafting_flags = NONE, category = CAT_CLOTHING), \ + new/datum/stack_recipe("white gloves", /obj/item/clothing/gloves/color/white, 3, crafting_flags = NONE, category = CAT_CLOTHING), \ + new/datum/stack_recipe("white softcap", /obj/item/clothing/head/soft/mime, 2, crafting_flags = NONE, category = CAT_CLOTHING), \ + new/datum/stack_recipe("white beanie", /obj/item/clothing/head/beanie, 2, crafting_flags = NONE, category = CAT_CLOTHING), \ null, \ - new/datum/stack_recipe("blindfold", /obj/item/clothing/glasses/blindfold, 2, check_density = FALSE, category = CAT_ENTERTAINMENT), \ + new/datum/stack_recipe("blindfold", /obj/item/clothing/glasses/blindfold, 2, crafting_flags = NONE, category = CAT_ENTERTAINMENT), \ null, \ - new/datum/stack_recipe("19x19 canvas", /obj/item/canvas/nineteen_nineteen, 3, check_density = FALSE, category = CAT_ENTERTAINMENT), \ - new/datum/stack_recipe("23x19 canvas", /obj/item/canvas/twentythree_nineteen, 4, check_density = FALSE, category = CAT_ENTERTAINMENT), \ - new/datum/stack_recipe("23x23 canvas", /obj/item/canvas/twentythree_twentythree, 5, check_density = FALSE, category = CAT_ENTERTAINMENT), \ + new/datum/stack_recipe("19x19 canvas", /obj/item/canvas/nineteen_nineteen, 3, crafting_flags = NONE, category = CAT_ENTERTAINMENT), \ + new/datum/stack_recipe("23x19 canvas", /obj/item/canvas/twentythree_nineteen, 4, crafting_flags = NONE, category = CAT_ENTERTAINMENT), \ + new/datum/stack_recipe("23x23 canvas", /obj/item/canvas/twentythree_twentythree, 5, crafting_flags = NONE, category = CAT_ENTERTAINMENT), \ new/datum/stack_recipe("pillow", /obj/item/pillow, 3, category = CAT_FURNITURE), \ )) @@ -489,10 +526,10 @@ GLOBAL_LIST_INIT(cloth_recipes, list ( \ amount = 5 GLOBAL_LIST_INIT(durathread_recipes, list ( \ - new/datum/stack_recipe("durathread jumpsuit", /obj/item/clothing/under/misc/durathread, 4, time = 4 SECONDS, check_density = FALSE, category = CAT_CLOTHING), - new/datum/stack_recipe("durathread beret", /obj/item/clothing/head/beret/durathread, 2, time = 4 SECONDS, check_density = FALSE, category = CAT_CLOTHING), \ - new/datum/stack_recipe("durathread beanie", /obj/item/clothing/head/beanie/durathread, 2, time = 4 SECONDS, check_density = FALSE, category = CAT_CLOTHING), \ - new/datum/stack_recipe("durathread bandana", /obj/item/clothing/mask/bandana/durathread, 1, time = 2.5 SECONDS, check_density = FALSE, category = CAT_CLOTHING), \ + new/datum/stack_recipe("durathread jumpsuit", /obj/item/clothing/under/misc/durathread, 4, time = 4 SECONDS, crafting_flags = NONE, category = CAT_CLOTHING), + new/datum/stack_recipe("durathread beret", /obj/item/clothing/head/beret/durathread, 2, time = 4 SECONDS, crafting_flags = NONE, category = CAT_CLOTHING), \ + new/datum/stack_recipe("durathread beanie", /obj/item/clothing/head/beanie/durathread, 2, time = 4 SECONDS, crafting_flags = NONE, category = CAT_CLOTHING), \ + new/datum/stack_recipe("durathread bandana", /obj/item/clothing/mask/bandana/durathread, 1, time = 2.5 SECONDS, crafting_flags = NONE, category = CAT_CLOTHING), \ )) /obj/item/stack/sheet/durathread @@ -563,61 +600,66 @@ GLOBAL_LIST_INIT(durathread_recipes, list ( \ * Cardboard */ GLOBAL_LIST_INIT(cardboard_recipes, list ( \ - new/datum/stack_recipe("box", /obj/item/storage/box, check_density = FALSE, category = CAT_CONTAINERS), \ - new/datum/stack_recipe("cardborg suit", /obj/item/clothing/suit/costume/cardborg, 3, check_density = FALSE, category = CAT_CLOTHING), \ - new/datum/stack_recipe("cardborg helmet", /obj/item/clothing/head/costume/cardborg, check_density = FALSE, category = CAT_CLOTHING), \ - new/datum/stack_recipe("large box", /obj/structure/closet/cardboard, 4, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_CONTAINERS), \ - new/datum/stack_recipe("cardboard cutout", /obj/item/cardboard_cutout, 5, check_density = FALSE, category = CAT_ENTERTAINMENT), \ + new/datum/stack_recipe("box", /obj/item/storage/box, crafting_flags = NONE, category = CAT_CONTAINERS), \ + new/datum/stack_recipe("cardborg suit", /obj/item/clothing/suit/costume/cardborg, 3, crafting_flags = NONE, category = CAT_CLOTHING), \ + new/datum/stack_recipe("cardborg helmet", /obj/item/clothing/head/costume/cardborg, crafting_flags = NONE, category = CAT_CLOTHING), \ + new/datum/stack_recipe("large box", /obj/structure/closet/cardboard, 4, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_CONTAINERS), \ + new/datum/stack_recipe("cardboard cutout", /obj/item/cardboard_cutout, 5, crafting_flags = NONE, category = CAT_ENTERTAINMENT), \ null, \ - new/datum/stack_recipe("pizza box", /obj/item/pizzabox, check_density = FALSE, category = CAT_CONTAINERS), \ - new/datum/stack_recipe("folder", /obj/item/folder, check_density = FALSE, category = CAT_CONTAINERS), \ + new/datum/stack_recipe("pizza box", /obj/item/pizzabox, crafting_flags = NONE, category = CAT_CONTAINERS), \ + new/datum/stack_recipe("folder", /obj/item/folder, crafting_flags = NONE, category = CAT_CONTAINERS), \ null, \ //TO-DO: Find a proper way to just change the illustration on the box. Code isn't the issue, input is. new/datum/stack_recipe_list("fancy boxes", list( - new /datum/stack_recipe("donut box", /obj/item/storage/fancy/donut_box, check_density = FALSE, category = CAT_CONTAINERS), \ - new /datum/stack_recipe("egg box", /obj/item/storage/fancy/egg_box, check_density = FALSE, category = CAT_CONTAINERS), \ - new /datum/stack_recipe("donk-pockets box", /obj/item/storage/box/donkpockets, check_density = FALSE, category = CAT_CONTAINERS), \ - new /datum/stack_recipe("donk-pockets spicy box", /obj/item/storage/box/donkpockets/donkpocketspicy, check_density = FALSE, category = CAT_CONTAINERS), \ - new /datum/stack_recipe("donk-pockets teriyaki box", /obj/item/storage/box/donkpockets/donkpocketteriyaki, check_density = FALSE, category = CAT_CONTAINERS), \ - new /datum/stack_recipe("donk-pockets pizza box", /obj/item/storage/box/donkpockets/donkpocketpizza, check_density = FALSE, category = CAT_CONTAINERS), \ - new /datum/stack_recipe("donk-pockets berry box", /obj/item/storage/box/donkpockets/donkpocketberry, check_density = FALSE, category = CAT_CONTAINERS), \ - new /datum/stack_recipe("donk-pockets honk box", /obj/item/storage/box/donkpockets/donkpockethonk, check_density = FALSE, category = CAT_CONTAINERS), \ - new /datum/stack_recipe("monkey cube box", /obj/item/storage/box/monkeycubes, check_density = FALSE, category = CAT_CONTAINERS), - new /datum/stack_recipe("nugget box", /obj/item/storage/fancy/nugget_box, check_density = FALSE, category = CAT_CONTAINERS), \ + new /datum/stack_recipe("donut box", /obj/item/storage/fancy/donut_box, crafting_flags = NONE, category = CAT_CONTAINERS), \ + new /datum/stack_recipe("egg box", /obj/item/storage/fancy/egg_box, crafting_flags = NONE, category = CAT_CONTAINERS), \ + new /datum/stack_recipe("donk-pockets box", /obj/item/storage/box/donkpockets, crafting_flags = NONE, category = CAT_CONTAINERS), \ + new /datum/stack_recipe("donk-pockets spicy box", /obj/item/storage/box/donkpockets/donkpocketspicy, crafting_flags = NONE, category = CAT_CONTAINERS), \ + new /datum/stack_recipe("donk-pockets teriyaki box", /obj/item/storage/box/donkpockets/donkpocketteriyaki, crafting_flags = NONE, category = CAT_CONTAINERS), \ + new /datum/stack_recipe("donk-pockets pizza box", /obj/item/storage/box/donkpockets/donkpocketpizza, crafting_flags = NONE, category = CAT_CONTAINERS), \ + new /datum/stack_recipe("donk-pockets berry box", /obj/item/storage/box/donkpockets/donkpocketberry, crafting_flags = NONE, category = CAT_CONTAINERS), \ + new /datum/stack_recipe("donk-pockets honk box", /obj/item/storage/box/donkpockets/donkpockethonk, crafting_flags = NONE, category = CAT_CONTAINERS), \ + new /datum/stack_recipe("monkey cube box", /obj/item/storage/box/monkeycubes, crafting_flags = NONE, category = CAT_CONTAINERS), + new /datum/stack_recipe("nugget box", /obj/item/storage/fancy/nugget_box, crafting_flags = NONE, category = CAT_CONTAINERS), \ + new /datum/stack_recipe("drinking glasses box", /obj/item/storage/box/drinkingglasses, crafting_flags = NONE, category = CAT_CONTAINERS), \ + new /datum/stack_recipe("paper cups box", /obj/item/storage/box/cups, crafting_flags = NONE, category = CAT_CONTAINERS), \ + new /datum/stack_recipe("cigar case", /obj/item/storage/fancy/cigarettes/cigars, crafting_flags = NONE, category = CAT_CONTAINERS), \ null, \ - new /datum/stack_recipe("lethal ammo box", /obj/item/storage/box/lethalshot, check_density = FALSE, category = CAT_CONTAINERS), \ - new /datum/stack_recipe("rubber shot ammo box", /obj/item/storage/box/rubbershot, check_density = FALSE, category = CAT_CONTAINERS), \ - new /datum/stack_recipe("bean bag ammo box", /obj/item/storage/box/beanbag, check_density = FALSE, category = CAT_CONTAINERS), \ - new /datum/stack_recipe("flashbang box", /obj/item/storage/box/flashbangs, check_density = FALSE, category = CAT_CONTAINERS), \ - new /datum/stack_recipe("flashes box", /obj/item/storage/box/flashes, check_density = FALSE, category = CAT_CONTAINERS), \ - new /datum/stack_recipe("handcuffs box", /obj/item/storage/box/handcuffs, check_density = FALSE, category = CAT_CONTAINERS), \ - new /datum/stack_recipe("ID card box", /obj/item/storage/box/ids, check_density = FALSE, category = CAT_CONTAINERS), \ - new /datum/stack_recipe("PDA box", /obj/item/storage/box/pdas, check_density = FALSE, category = CAT_CONTAINERS), \ + new /datum/stack_recipe("lethal ammo box", /obj/item/storage/box/lethalshot, crafting_flags = NONE, category = CAT_CONTAINERS), \ + new /datum/stack_recipe("rubber shot ammo box", /obj/item/storage/box/rubbershot, crafting_flags = NONE, category = CAT_CONTAINERS), \ + new /datum/stack_recipe("bean bag ammo box", /obj/item/storage/box/beanbag, crafting_flags = NONE, category = CAT_CONTAINERS), \ + new /datum/stack_recipe("flashbang box", /obj/item/storage/box/flashbangs, crafting_flags = NONE, category = CAT_CONTAINERS), \ + new /datum/stack_recipe("flashes box", /obj/item/storage/box/flashes, crafting_flags = NONE, category = CAT_CONTAINERS), \ + new /datum/stack_recipe("handcuffs box", /obj/item/storage/box/handcuffs, crafting_flags = NONE, category = CAT_CONTAINERS), \ + new /datum/stack_recipe("ID card box", /obj/item/storage/box/ids, crafting_flags = NONE, category = CAT_CONTAINERS), \ + new /datum/stack_recipe("PDA box", /obj/item/storage/box/pdas, crafting_flags = NONE, category = CAT_CONTAINERS), \ null, \ - new /datum/stack_recipe("pillbottle box", /obj/item/storage/box/pillbottles, check_density = FALSE, category = CAT_CONTAINERS), \ - new /datum/stack_recipe("beaker box", /obj/item/storage/box/beakers, check_density = FALSE, category = CAT_CONTAINERS), \ - new /datum/stack_recipe("syringe box", /obj/item/storage/box/syringes, check_density = FALSE, category = CAT_CONTAINERS), \ - new /datum/stack_recipe("latex gloves box", /obj/item/storage/box/gloves, check_density = FALSE, category = CAT_CONTAINERS), \ - new /datum/stack_recipe("sterile masks box", /obj/item/storage/box/masks, check_density = FALSE, category = CAT_CONTAINERS), \ - new /datum/stack_recipe("body bag box", /obj/item/storage/box/bodybags, check_density = FALSE, category = CAT_CONTAINERS), \ - new /datum/stack_recipe("perscription glasses box", /obj/item/storage/box/rxglasses, check_density = FALSE, category = CAT_CONTAINERS), \ - new /datum/stack_recipe("medipen box", /obj/item/storage/box/medipens, check_density = FALSE, category = CAT_CONTAINERS), \ - new /datum/stack_recipe("oxygen tank box", /obj/item/storage/box/emergencytank, check_density = FALSE, category = CAT_CONTAINERS), \ - new /datum/stack_recipe("extended oxygen tank box", /obj/item/storage/box/engitank, check_density = FALSE, category = CAT_CONTAINERS), \ + new /datum/stack_recipe("pillbottle box", /obj/item/storage/box/pillbottles, crafting_flags = NONE, category = CAT_CONTAINERS), \ + new /datum/stack_recipe("medical gels box", /obj/item/storage/box/medigels, crafting_flags = NONE, category = CAT_CONTAINERS), \ + new /datum/stack_recipe("beaker box", /obj/item/storage/box/beakers, crafting_flags = NONE, category = CAT_CONTAINERS), \ + new /datum/stack_recipe("syringe box", /obj/item/storage/box/syringes, crafting_flags = NONE, category = CAT_CONTAINERS), \ + new /datum/stack_recipe("latex gloves box", /obj/item/storage/box/gloves, crafting_flags = NONE, category = CAT_CONTAINERS), \ + new /datum/stack_recipe("sterile masks box", /obj/item/storage/box/masks, crafting_flags = NONE, category = CAT_CONTAINERS), \ + new /datum/stack_recipe("body bag box", /obj/item/storage/box/bodybags, crafting_flags = NONE, category = CAT_CONTAINERS), \ + new /datum/stack_recipe("prescription glasses box", /obj/item/storage/box/rxglasses, crafting_flags = NONE, category = CAT_CONTAINERS), \ + new /datum/stack_recipe("medipen box", /obj/item/storage/box/medipens, crafting_flags = NONE, category = CAT_CONTAINERS), \ + new /datum/stack_recipe("DNA injectors box", /obj/item/storage/box/injectors, crafting_flags = NONE, category = CAT_CONTAINERS), \ + new /datum/stack_recipe("oxygen tank box", /obj/item/storage/box/emergencytank, crafting_flags = NONE, category = CAT_CONTAINERS), \ + new /datum/stack_recipe("extended oxygen tank box", /obj/item/storage/box/engitank, crafting_flags = NONE, category = CAT_CONTAINERS), \ null, \ - new /datum/stack_recipe("survival box", /obj/item/storage/box/survival/crafted, check_density = FALSE, category = CAT_CONTAINERS), \ - new /datum/stack_recipe("extended tank survival box", /obj/item/storage/box/survival/engineer/crafted, check_density = FALSE, category = CAT_CONTAINERS), \ - new /datum/stack_recipe("disk box", /obj/item/storage/box/disks, check_density = FALSE, category = CAT_CONTAINERS), \ - new /datum/stack_recipe("light tubes box", /obj/item/storage/box/lights/tubes, check_density = FALSE, category = CAT_CONTAINERS), \ - new /datum/stack_recipe("light bulbs box", /obj/item/storage/box/lights/bulbs, check_density = FALSE, category = CAT_CONTAINERS), \ - new /datum/stack_recipe("mixed lights box", /obj/item/storage/box/lights/mixed, check_density = FALSE, category = CAT_CONTAINERS), \ - new /datum/stack_recipe("mouse traps box", /obj/item/storage/box/mousetraps, check_density = FALSE, category = CAT_CONTAINERS), \ - new /datum/stack_recipe("candle box", /obj/item/storage/fancy/candle_box, check_density = FALSE, category = CAT_CONTAINERS), \ - new /datum/stack_recipe("bandage box", /obj/item/storage/box/bandages, check_density = FALSE, category = CAT_CONTAINERS) + new /datum/stack_recipe("survival box", /obj/item/storage/box/survival/crafted, crafting_flags = NONE, category = CAT_CONTAINERS), \ + new /datum/stack_recipe("extended tank survival box", /obj/item/storage/box/survival/engineer/crafted, crafting_flags = NONE, category = CAT_CONTAINERS), \ + new /datum/stack_recipe("disk box", /obj/item/storage/box/disks, crafting_flags = NONE, category = CAT_CONTAINERS), \ + new /datum/stack_recipe("light tubes box", /obj/item/storage/box/lights/tubes, crafting_flags = NONE, category = CAT_CONTAINERS), \ + new /datum/stack_recipe("light bulbs box", /obj/item/storage/box/lights/bulbs, crafting_flags = NONE, category = CAT_CONTAINERS), \ + new /datum/stack_recipe("mixed lights box", /obj/item/storage/box/lights/mixed, crafting_flags = NONE, category = CAT_CONTAINERS), \ + new /datum/stack_recipe("mouse traps box", /obj/item/storage/box/mousetraps, crafting_flags = NONE, category = CAT_CONTAINERS), \ + new /datum/stack_recipe("candle box", /obj/item/storage/fancy/candle_box, crafting_flags = NONE, category = CAT_CONTAINERS), \ + new /datum/stack_recipe("bandage box", /obj/item/storage/box/bandages, crafting_flags = NONE, category = CAT_CONTAINERS) )), null, \ @@ -675,18 +717,18 @@ GLOBAL_LIST_INIT(cardboard_recipes, list ( \ */ GLOBAL_LIST_INIT(bronze_recipes, list ( \ - new/datum/stack_recipe("wall gear", /obj/structure/girder/bronze, 2, time = 2 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_STRUCTURE), \ + new/datum/stack_recipe("wall gear", /obj/structure/girder/bronze, 2, time = 2 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_STRUCTURE), \ null, - new/datum/stack_recipe("directional bronze window", /obj/structure/window/bronze/unanchored, time = 0, on_solid_ground = TRUE, check_direction = TRUE, category = CAT_WINDOWS), \ - new/datum/stack_recipe("fulltile bronze window", /obj/structure/window/bronze/fulltile/unanchored, 2, time = 0, on_solid_ground = TRUE, is_fulltile = TRUE, category = CAT_WINDOWS), \ - new/datum/stack_recipe("pinion airlock assembly", /obj/structure/door_assembly/door_assembly_bronze, 4, time = 5 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_DOORS), \ - new/datum/stack_recipe("bronze pinion airlock assembly", /obj/structure/door_assembly/door_assembly_bronze/seethru, 4, time = 5 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_DOORS), \ - new/datum/stack_recipe("bronze floor tile", /obj/item/stack/tile/bronze, 1, 4, 20, check_density = FALSE, category = CAT_TILES), \ - new/datum/stack_recipe("bronze hat", /obj/item/clothing/head/costume/bronze, check_density = FALSE, category = CAT_CLOTHING), \ - new/datum/stack_recipe("bronze suit", /obj/item/clothing/suit/costume/bronze, check_density = FALSE, category = CAT_CLOTHING), \ - new/datum/stack_recipe("bronze boots", /obj/item/clothing/shoes/bronze, check_density = FALSE, category = CAT_CLOTHING), \ + new/datum/stack_recipe("directional bronze window", /obj/structure/window/bronze/unanchored, time = 0, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ON_SOLID_GROUND | CRAFT_CHECK_DIRECTION, category = CAT_WINDOWS), \ + new/datum/stack_recipe("fulltile bronze window", /obj/structure/window/bronze/fulltile/unanchored, 2, time = 0, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ON_SOLID_GROUND | CRAFT_IS_FULLTILE, category = CAT_WINDOWS), \ + new/datum/stack_recipe("pinion airlock assembly", /obj/structure/door_assembly/door_assembly_bronze, 4, time = 5 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_DOORS), \ + new/datum/stack_recipe("bronze pinion airlock assembly", /obj/structure/door_assembly/door_assembly_bronze/seethru, 4, time = 5 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_DOORS), \ + new/datum/stack_recipe("bronze floor tile", /obj/item/stack/tile/bronze, 1, 4, 20, crafting_flags = NONE, category = CAT_TILES), \ + new/datum/stack_recipe("bronze hat", /obj/item/clothing/head/costume/bronze, crafting_flags = NONE, category = CAT_CLOTHING), \ + new/datum/stack_recipe("bronze suit", /obj/item/clothing/suit/costume/bronze, crafting_flags = NONE, category = CAT_CLOTHING), \ + new/datum/stack_recipe("bronze boots", /obj/item/clothing/shoes/bronze, crafting_flags = NONE, category = CAT_CLOTHING), \ null, - new/datum/stack_recipe("bronze chair", /obj/structure/chair/bronze, 1, time = 0, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_FURNITURE), \ + new/datum/stack_recipe("bronze chair", /obj/structure/chair/bronze, 1, time = 0, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_FURNITURE), \ )) /obj/item/stack/sheet/bronze @@ -773,29 +815,33 @@ GLOBAL_LIST_INIT(bronze_recipes, list ( \ // As bone and sinew have just a little too many recipes for this, we'll just split them up. // Sinew slapcrafting will mostly-sinew recipes, and bones will have mostly-bones recipes. - var/static/list/slapcraft_recipe_list = list(\ - /datum/crafting_recipe/bonedagger, /datum/crafting_recipe/bonespear, /datum/crafting_recipe/boneaxe,\ - /datum/crafting_recipe/bonearmor, /datum/crafting_recipe/skullhelm, /datum/crafting_recipe/bracers - ) + var/static/list/slapcraft_recipe_list = list( + /datum/crafting_recipe/bonearmor, + /datum/crafting_recipe/boneaxe, + /datum/crafting_recipe/bonedagger, + /datum/crafting_recipe/bonespear, + /datum/crafting_recipe/bracers, + /datum/crafting_recipe/skullhelm, + ) AddComponent( /datum/component/slapcrafting,\ slapcraft_recipes = slapcraft_recipe_list,\ ) GLOBAL_LIST_INIT(plastic_recipes, list( - new /datum/stack_recipe("plastic floor tile", /obj/item/stack/tile/plastic, 1, 4, 20, time = 2 SECONDS, check_density = FALSE, category = CAT_TILES), \ - new /datum/stack_recipe("light tram tile", /obj/item/stack/thermoplastic/light, 1, 4, 20, time = 2 SECONDS, check_density = FALSE, category = CAT_TILES), \ - new /datum/stack_recipe("dark tram tile", /obj/item/stack/thermoplastic, 1, 4, 20, time = 2 SECONDS, check_density = FALSE, category = CAT_TILES), \ - new /datum/stack_recipe("folding plastic chair", /obj/structure/chair/plastic, 2, check_density = FALSE, category = CAT_FURNITURE), \ - new /datum/stack_recipe("plastic flaps", /obj/structure/plasticflaps, 5, one_per_turf = TRUE, on_solid_ground = TRUE, time = 4 SECONDS, category = CAT_FURNITURE), \ - new /datum/stack_recipe("water bottle", /obj/item/reagent_containers/cup/glass/waterbottle/empty, check_density = FALSE, category = CAT_CONTAINERS), \ - new /datum/stack_recipe("large water bottle", /obj/item/reagent_containers/cup/glass/waterbottle/large/empty, 3, check_density = FALSE, category = CAT_CONTAINERS), \ - new /datum/stack_recipe("colo cups", /obj/item/reagent_containers/cup/glass/colocup, 1, check_density = FALSE, category = CAT_CONTAINERS), \ - new /datum/stack_recipe("mannequin", /obj/structure/mannequin/plastic, 25, time = 5 SECONDS, one_per_turf = TRUE, check_density = FALSE, category = CAT_ENTERTAINMENT), \ - new /datum/stack_recipe("wet floor sign", /obj/item/clothing/suit/caution, 2, check_density = FALSE, category = CAT_EQUIPMENT), \ - new /datum/stack_recipe("warning cone", /obj/item/clothing/head/cone, 2, check_density = FALSE, category = CAT_EQUIPMENT), \ - new /datum/stack_recipe("blank wall sign", /obj/item/sign, 1, check_density = FALSE, category = CAT_FURNITURE), \ - new /datum/stack_recipe("rebellion mask", /obj/item/clothing/mask/rebellion, 1, check_density = FALSE, category = CAT_CLOTHING))) + new /datum/stack_recipe("plastic floor tile", /obj/item/stack/tile/plastic, 1, 4, 20, time = 2 SECONDS, crafting_flags = NONE, category = CAT_TILES), \ + new /datum/stack_recipe("light tram tile", /obj/item/stack/thermoplastic/light, 1, 4, 20, time = 2 SECONDS, crafting_flags = NONE, category = CAT_TILES), \ + new /datum/stack_recipe("dark tram tile", /obj/item/stack/thermoplastic, 1, 4, 20, time = 2 SECONDS, crafting_flags = NONE, category = CAT_TILES), \ + new /datum/stack_recipe("folding plastic chair", /obj/structure/chair/plastic, 2, crafting_flags = NONE, category = CAT_FURNITURE), \ + new /datum/stack_recipe("plastic flaps", /obj/structure/plasticflaps, 5, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, time = 4 SECONDS, category = CAT_FURNITURE), \ + new /datum/stack_recipe("water bottle", /obj/item/reagent_containers/cup/glass/waterbottle/empty, crafting_flags = NONE, category = CAT_CONTAINERS), \ + new /datum/stack_recipe("large water bottle", /obj/item/reagent_containers/cup/glass/waterbottle/large/empty, 3, crafting_flags = NONE, category = CAT_CONTAINERS), \ + new /datum/stack_recipe("colo cups", /obj/item/reagent_containers/cup/glass/colocup, 1, crafting_flags = NONE, category = CAT_CONTAINERS), \ + new /datum/stack_recipe("mannequin", /obj/structure/mannequin/plastic, 25, time = 5 SECONDS, crafting_flags = CRAFT_ONE_PER_TURF, category = CAT_ENTERTAINMENT), \ + new /datum/stack_recipe("wet floor sign", /obj/item/clothing/suit/caution, 2, crafting_flags = NONE, category = CAT_EQUIPMENT), \ + new /datum/stack_recipe("warning cone", /obj/item/clothing/head/cone, 2, crafting_flags = NONE, category = CAT_EQUIPMENT), \ + new /datum/stack_recipe("blank wall sign", /obj/item/sign, 1, crafting_flags = NONE, category = CAT_FURNITURE), \ + new /datum/stack_recipe("rebellion mask", /obj/item/clothing/mask/rebellion, 1, crafting_flags = NONE, category = CAT_CLOTHING))) /obj/item/stack/sheet/plastic name = "plastic" @@ -819,8 +865,8 @@ GLOBAL_LIST_INIT(plastic_recipes, list( . += GLOB.plastic_recipes GLOBAL_LIST_INIT(paperframe_recipes, list( -new /datum/stack_recipe("paper frame separator", /obj/structure/window/paperframe, 2, one_per_turf = TRUE, on_solid_ground = TRUE, is_fulltile = TRUE, time = 1 SECONDS), \ -new /datum/stack_recipe("paper frame door", /obj/structure/mineral_door/paperframe, 3, one_per_turf = TRUE, on_solid_ground = TRUE, time = 1 SECONDS ))) +new /datum/stack_recipe("paper frame separator", /obj/structure/window/paperframe, 2, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND | CRAFT_IS_FULLTILE, time = 1 SECONDS), \ +new /datum/stack_recipe("paper frame door", /obj/structure/mineral_door/paperframe, 3, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, time = 1 SECONDS ))) /obj/item/stack/sheet/paperframes name = "paper frames" diff --git a/code/game/objects/items/stacks/stack.dm b/code/game/objects/items/stacks/stack.dm index 83235796a45ff..c748ba4c494a1 100644 --- a/code/game/objects/items/stacks/stack.dm +++ b/code/game/objects/items/stacks/stack.dm @@ -1,9 +1,3 @@ -//stack recipe placement check types -/// Checks if there is an object of the result type in any of the cardinal directions -#define STACK_CHECK_CARDINALS (1<<0) -/// Checks if there is an object of the result type within one tile -#define STACK_CHECK_ADJACENT (1<<1) - /* Stack type objects! * Contains: * Stacks @@ -110,9 +104,9 @@ for(var/category in what_are_we_made_of.categories) switch(category) if(MAT_CATEGORY_BASE_RECIPES) - recipes |= DSmaterials.base_stack_recipes.Copy() + recipes |= SSmaterials.base_stack_recipes.Copy() if(MAT_CATEGORY_RIGID) - recipes |= DSmaterials.rigid_stack_recipes.Copy() + recipes |= SSmaterials.rigid_stack_recipes.Copy() update_weight() update_appearance() @@ -131,7 +125,7 @@ * - multiplier: The amount to multiply the mats per unit by. Defaults to 1. */ /obj/item/stack/proc/set_mats_per_unit(list/mats, multiplier=1) - mats_per_unit = DSmaterials.FindOrCreateMaterialCombo(mats, multiplier) + mats_per_unit = SSmaterials.FindOrCreateMaterialCombo(mats, multiplier) update_custom_materials() /** Updates the custom materials list of this stack. @@ -423,7 +417,7 @@ return var/turf/created_turf = covered_turf.place_on_top(recipe.result_type, flags = CHANGETURF_INHERIT_AIR) builder.balloon_alert(builder, "placed [ispath(recipe.result_type, /turf/open) ? "floor" : "wall"]") - if(recipe.applies_mats && LAZYLEN(mats_per_unit)) + if((recipe.crafting_flags & CRAFT_APPLIES_MATS) && LAZYLEN(mats_per_unit)) created_turf.set_custom_materials(mats_per_unit, recipe.req_amount / recipe.res_amount) else @@ -432,6 +426,7 @@ if(created) created.setDir(builder.dir) + SEND_SIGNAL(created, COMSIG_ATOM_CONSTRUCTED, builder) on_item_crafted(builder, created) // Use up the material @@ -439,7 +434,7 @@ builder.investigate_log("crafted [recipe.title]", INVESTIGATE_CRAFTING) // Apply mat datums - if(recipe.applies_mats && LAZYLEN(mats_per_unit)) + if((recipe.crafting_flags & CRAFT_APPLIES_MATS) && LAZYLEN(mats_per_unit)) if(isstack(created)) var/obj/item/stack/crafted_stack = created crafted_stack.set_mats_per_unit(mats_per_unit, recipe.req_amount / recipe.res_amount) @@ -484,16 +479,16 @@ return FALSE var/turf/dest_turf = get_turf(builder) - if(recipe.one_per_turf && (locate(recipe.result_type) in dest_turf)) + if((recipe.crafting_flags & CRAFT_ONE_PER_TURF) && (locate(recipe.result_type) in dest_turf)) builder.balloon_alert(builder, "already one here!") return FALSE - if(recipe.check_direction) - if(!valid_build_direction(dest_turf, builder.dir, is_fulltile = recipe.is_fulltile)) + if(recipe.crafting_flags & CRAFT_CHECK_DIRECTION) + if(!valid_build_direction(dest_turf, builder.dir, is_fulltile = (recipe.crafting_flags & CRAFT_IS_FULLTILE))) builder.balloon_alert(builder, "won't fit here!") return FALSE - if(recipe.on_solid_ground) + if(recipe.crafting_flags & CRAFT_ON_SOLID_GROUND) if(isclosedturf(dest_turf)) builder.balloon_alert(builder, "cannot be made on a wall!") return FALSE @@ -503,7 +498,7 @@ builder.balloon_alert(builder, "must be made on solid ground!") return FALSE - if(recipe.check_density) + if(recipe.crafting_flags & CRAFT_CHECK_DENSITY) for(var/obj/object in dest_turf) if(object.density && !(object.obj_flags & IGNORE_DENSITY) || object.obj_flags & BLOCKS_CONSTRUCTION) builder.balloon_alert(builder, "something is in the way!") @@ -742,6 +737,3 @@ add_hiddenprint_list(GET_ATOM_HIDDENPRINTS(from)) fingerprintslast = from.fingerprintslast //TODO bloody overlay - -#undef STACK_CHECK_CARDINALS -#undef STACK_CHECK_ADJACENT diff --git a/code/game/objects/items/stacks/stack_recipe.dm b/code/game/objects/items/stacks/stack_recipe.dm index bfdc3c8ca5717..a11feee8c685a 100644 --- a/code/game/objects/items/stacks/stack_recipe.dm +++ b/code/game/objects/items/stacks/stack_recipe.dm @@ -15,21 +15,8 @@ var/max_res_amount = 1 /// How long it takes to make var/time = 0 - /// If only one of the resulting atom is allowed per turf - var/one_per_turf = FALSE - /// If the atom is fulltile, as in a fulltile window. This is used for the direction check to prevent fulltile windows from being able to be built over directional stuff. - /// Setting this to true will effectively set check_direction to true. - var/is_fulltile = FALSE - /// If this atom should run the direction check, for use when building things like directional windows where you can have more than one per turf - var/check_direction = FALSE - /// If the atom requires a floor below - var/on_solid_ground = FALSE - /// If the atom checks that there are objects with density in the same turf when being built. TRUE by default - var/check_density = TRUE /// Bitflag of additional placement checks required to place. (STACK_CHECK_CARDINALS|STACK_CHECK_ADJACENT|STACK_CHECK_TRAM_FORBIDDEN|STACK_CHECK_TRAM_EXCLUSIVE) var/placement_checks = NONE - /// If TRUE, the created atom will gain custom mat datums - var/applies_mats = FALSE /// What trait, if any, boosts the construction speed of this item var/trait_booster /// How much the trait above, if supplied, boosts the construct speed of this item @@ -37,6 +24,9 @@ /// Category for general crafting menu var/category + ///crafting_flags var to hold bool values + var/crafting_flags = CRAFT_CHECK_DENSITY + /datum/stack_recipe/New( title, result_type, @@ -44,13 +34,8 @@ res_amount = 1, max_res_amount = 1, time = 0, - one_per_turf = FALSE, - on_solid_ground = FALSE, - is_fulltile = FALSE, - check_direction = FALSE, - check_density = TRUE, + crafting_flags = CRAFT_CHECK_DENSITY, placement_checks = NONE, - applies_mats = FALSE, trait_booster, trait_modifier = 1, category, @@ -62,13 +47,8 @@ src.res_amount = res_amount src.max_res_amount = max_res_amount src.time = time - src.one_per_turf = one_per_turf - src.on_solid_ground = on_solid_ground - src.is_fulltile = is_fulltile - src.check_direction = check_direction || is_fulltile - src.check_density = check_density + src.crafting_flags = crafting_flags src.placement_checks = placement_checks - src.applies_mats = applies_mats src.trait_booster = trait_booster src.trait_modifier = trait_modifier src.category = src.category || category || CAT_MISC @@ -84,16 +64,13 @@ res_amount = 1, max_res_amount = 1, time = 0, - one_per_turf = FALSE, - on_solid_ground = FALSE, - window_checks = FALSE, + crafting_flags = CRAFT_CHECK_DENSITY, placement_checks = NONE, - applies_mats = FALSE, trait_booster, trait_modifier = 1, + category, desc, required_noun, - category, ) if(category) src.category = category diff --git a/code/game/objects/items/stacks/tape.dm b/code/game/objects/items/stacks/tape.dm index c8b46e2d28175..57aa666c046ab 100644 --- a/code/game/objects/items/stacks/tape.dm +++ b/code/game/objects/items/stacks/tape.dm @@ -39,18 +39,13 @@ . = ..() . += "[span_notice("You could rip a piece off by using an empty hand.")]" -/obj/item/stack/sticky_tape/afterattack(obj/item/target, mob/living/user, proximity) - if(!proximity) - return - - if(!istype(target)) - return - - . |= AFTERATTACK_PROCESSED_ITEM +/obj/item/stack/sticky_tape/interact_with_atom(obj/item/target, mob/living/user, list/modifiers) + if(!isitem(target)) + return NONE if(target.embedding && target.embedding == conferred_embed) to_chat(user, span_warning("[target] is already coated in [src]!")) - return . + return ITEM_INTERACT_BLOCKING user.visible_message(span_notice("[user] begins wrapping [target] with [src]."), span_notice("You begin wrapping [target] with [src].")) playsound(user, 'sound/items/duct_tape_rip.ogg', 50, TRUE) @@ -63,11 +58,11 @@ to_chat(user, span_notice("You turn [target] into [O] with [src].")) QDEL_NULL(target) user.put_in_hands(O) - return . + return ITEM_INTERACT_SUCCESS if(target.embedding && target.embedding == conferred_embed) to_chat(user, span_warning("[target] is already coated in [src]!")) - return . + return ITEM_INTERACT_BLOCKING target.embedding = conferred_embed target.updateEmbedding() @@ -78,7 +73,7 @@ var/obj/item/grenade/sticky_bomb = target sticky_bomb.sticky = TRUE - return . + return ITEM_INTERACT_SUCCESS /obj/item/stack/sticky_tape/super name = "super sticky tape" diff --git a/code/game/objects/items/stacks/tiles/tile_types.dm b/code/game/objects/items/stacks/tiles/tile_types.dm index 86e86b9eb554f..89e6cae389dbd 100644 --- a/code/game/objects/items/stacks/tiles/tile_types.dm +++ b/code/game/objects/items/stacks/tiles/tile_types.dm @@ -101,9 +101,8 @@ playsound(target_plating, 'sound/weapons/genhit.ogg', 50, TRUE) return target_plating -/obj/item/stack/tile/handle_openspace_click(turf/target, mob/user, proximity_flag, click_parameters) - if(proximity_flag) - target.attackby(src, user, click_parameters) +/obj/item/stack/tile/handle_openspace_click(turf/target, mob/user, list/modifiers) + target.attackby(src, user, list2params(modifiers)) //Grass /obj/item/stack/tile/grass @@ -1076,6 +1075,11 @@ inhand_icon_state = "tile-bcircuit" turf_type = /turf/open/floor/circuit merge_type = /obj/item/stack/tile/circuit + tile_reskin_types = list( + /obj/item/stack/tile/circuit, + /obj/item/stack/tile/circuit/green, + /obj/item/stack/tile/circuit/red, + ) /obj/item/stack/tile/circuit/green name = "green circuit tile" diff --git a/code/game/objects/items/stacks/wrap.dm b/code/game/objects/items/stacks/wrap.dm index 5097234b47c00..d7fcd17f2950d 100644 --- a/code/game/objects/items/stacks/wrap.dm +++ b/code/game/objects/items/stacks/wrap.dm @@ -102,26 +102,29 @@ /obj/item/delivery/can_be_package_wrapped() return FALSE -/obj/item/stack/package_wrap/afterattack(obj/target, mob/user, proximity) - . = ..() - if(!proximity) - return - if(!istype(target)) - return - if(target.anchored) - return - - if(isitem(target)) - . |= AFTERATTACK_PROCESSED_ITEM - var/obj/item/item = target +/obj/item/stack/package_wrap/storage_insert_on_interaction(datum/storage, atom/storage_holder, mob/user) + if(isitem(storage_holder)) + // Don't insert if the target can be wrapped + var/obj/item/item = storage_holder + return !item.can_be_package_wrapped() + return TRUE + +/obj/item/stack/package_wrap/interact_with_atom(obj/interacting_with, mob/living/user, list/modifiers) + if(!isobj(interacting_with)) + return NONE + if(interacting_with.anchored) + return NONE + + if(isitem(interacting_with)) + var/obj/item/item = interacting_with if(!item.can_be_package_wrapped()) balloon_alert(user, "can't be wrapped!") - return + return ITEM_INTERACT_BLOCKING if(user.is_holding(item)) if(!user.dropItemToGround(item)) - return + return ITEM_INTERACT_BLOCKING else if(!isturf(item.loc)) - return + return ITEM_INTERACT_BLOCKING if(use(1)) var/obj/item/delivery/small/parcel = new(get_turf(item.loc)) if(user.Adjacent(item)) @@ -135,15 +138,17 @@ size = min(size, 5) parcel.base_icon_state = "deliverypackage[size]" parcel.update_icon() + else + return ITEM_INTERACT_BLOCKING - else if(istype(target, /obj/structure/closet)) - var/obj/structure/closet/closet = target + else if(istype(interacting_with, /obj/structure/closet)) + var/obj/structure/closet/closet = interacting_with if(closet.opened) balloon_alert(user, "can't wrap while open!") - return + return ITEM_INTERACT_BLOCKING if(!closet.delivery_icon) //no delivery icon means unwrappable closet (e.g. body bags) balloon_alert(user, "can't wrap!") - return + return ITEM_INTERACT_BLOCKING if(use(3)) var/obj/item/delivery/big/parcel = new(get_turf(closet.loc)) parcel.base_icon_state = closet.delivery_icon @@ -154,13 +159,13 @@ closet.add_fingerprint(user) else balloon_alert(user, "not enough paper!") - return + return ITEM_INTERACT_BLOCKING - else if(istype(target, /obj/machinery/portable_atmospherics)) - var/obj/machinery/portable_atmospherics/portable_atmospherics = target + else if(istype(interacting_with, /obj/machinery/portable_atmospherics)) + var/obj/machinery/portable_atmospherics/portable_atmospherics = interacting_with if(portable_atmospherics.anchored) balloon_alert(user, "can't wrap while anchored!") - return + return ITEM_INTERACT_BLOCKING if(use(3)) var/obj/item/delivery/big/parcel = new(get_turf(portable_atmospherics.loc)) parcel.base_icon_state = "deliverybox" @@ -171,14 +176,15 @@ portable_atmospherics.add_fingerprint(user) else balloon_alert(user, "not enough paper!") - return + return ITEM_INTERACT_BLOCKING else balloon_alert(user, "can't wrap!") - return + return ITEM_INTERACT_BLOCKING - user.visible_message(span_notice("[user] wraps [target].")) - user.log_message("has used [name] on [key_name(target)]", LOG_ATTACK, color="blue") + user.visible_message(span_notice("[user] wraps [interacting_with].")) + user.log_message("has used [name] on [key_name(interacting_with)]", LOG_ATTACK, color="blue") + return ITEM_INTERACT_SUCCESS /obj/item/stack/package_wrap/use(used, transfer = FALSE, check = TRUE) var/turf/T = get_turf(src) diff --git a/code/game/objects/items/storage/backpack.dm b/code/game/objects/items/storage/backpack.dm index 10c95056afffb..c01203e3d50fb 100644 --- a/code/game/objects/items/storage/backpack.dm +++ b/code/game/objects/items/storage/backpack.dm @@ -32,10 +32,6 @@ * Backpack Types */ -/obj/item/storage/backpack/old/Initialize(mapload) - . = ..() - atom_storage.max_total_storage = 12 - /obj/item/bag_of_holding_inert name = "inert bag of holding" desc = "What is currently a just an unwieldly block of metal with a slot ready to accept a bluespace anomaly core." diff --git a/code/game/objects/items/storage/bags.dm b/code/game/objects/items/storage/bags.dm index 9b4ead49a5645..996cd933647a1 100644 --- a/code/game/objects/items/storage/bags.dm +++ b/code/game/objects/items/storage/bags.dm @@ -155,11 +155,13 @@ UnregisterSignal(listeningTo, COMSIG_MOVABLE_MOVED) listeningTo = null -/obj/item/storage/bag/ore/attackby(obj/item/attacking_item, mob/user, params) - if(istype(attacking_item, /obj/item/boulder)) - to_chat(user, span_warning("You can't fit \the [attacking_item] into \the [src]. Perhaps you should break it down first, or find an ore box.")) - return TRUE - return ..() +/obj/item/storage/bag/ore/storage_insert_on_interacted_with(datum/storage, obj/item/inserted, mob/living/user) + if(istype(inserted, /obj/item/boulder)) + to_chat(user, span_warning("You can't fit [inserted] into [src]. \ + Perhaps you should break it down first, or find an ore box.")) + return FALSE + + return TRUE /obj/item/storage/bag/ore/proc/pickup_ores(mob/living/user) SIGNAL_HANDLER @@ -271,11 +273,10 @@ . = ..() . += span_notice("Ctrl-click to activate seed extraction.") -/obj/item/storage/bag/plants/portaseeder/CtrlClick(mob/user) - if(user.incapacitated()) - return +/obj/item/storage/bag/plants/portaseeder/item_ctrl_click(mob/user) for(var/obj/item/plant in contents) seedify(plant, 1) + return CLICK_ACTION_SUCCESS // ----------------------------- // Sheet Snatcher @@ -362,7 +363,7 @@ atom_storage.max_specific_storage = WEIGHT_CLASS_BULKY //Plates are required bulky to keep them out of backpacks atom_storage.set_holdable( can_hold_list = list( - /obj/item/clothing/mask/cigarette, + /obj/item/cigarette, /obj/item/food, /obj/item/kitchen, /obj/item/lighter, @@ -406,7 +407,7 @@ /obj/item/storage/bag/tray/proc/do_scatter(obj/item/tray_item) var/delay = rand(2,4) - var/datum/move_loop/loop = DSmove_manager.move_rand(tray_item, list(NORTH,SOUTH,EAST,WEST), delay, timeout = rand(1, 2) * delay, flags = MOVEMENT_LOOP_START_FAST) + var/datum/move_loop/loop = GLOB.move_manager.move_rand(tray_item, list(NORTH,SOUTH,EAST,WEST), delay, timeout = rand(1, 2) * delay, flags = MOVEMENT_LOOP_START_FAST) //This does mean scattering is tied to the tray. Not sure how better to handle it RegisterSignal(loop, COMSIG_MOVELOOP_POSTPROCESS, PROC_REF(change_speed)) @@ -573,4 +574,28 @@ for(var/i in 1 to 40) new /obj/item/ammo_casing/harpoon(src) +/obj/item/storage/bag/rebar_quiver + name = "Rebar Storage Quiver" + icon = 'icons/obj/weapons/bows/quivers.dmi' + icon_state = "rebar_quiver" + worn_icon_state = "rebar_quiver" + inhand_icon_state = "rebar_quiver" + desc = "A oxygen tank cut in half, used for holding sharpened rods for the rebar crossbow." + slot_flags = ITEM_SLOT_BACK|ITEM_SLOT_SUITSTORE + resistance_flags = FLAMMABLE + +/obj/item/storage/bag/rebar_quiver/Initialize(mapload) + . = ..() + atom_storage.max_specific_storage = WEIGHT_CLASS_TINY + atom_storage.max_slots = 10 + atom_storage.max_total_storage = 15 + atom_storage.set_holdable(list( + /obj/item/ammo_casing/rebar, + /obj/item/ammo_casing/rebar/syndie, + /obj/item/ammo_casing/rebar/healium, + /obj/item/ammo_casing/rebar/hydrogen, + /obj/item/ammo_casing/rebar/zaukerite, + /obj/item/ammo_casing/rebar/paperball, + )) + #undef ORE_BAG_BALOON_COOLDOWN diff --git a/code/game/objects/items/storage/belt.dm b/code/game/objects/items/storage/belt.dm index c9ee26ad44ac7..1bf97712ec566 100644 --- a/code/game/objects/items/storage/belt.dm +++ b/code/game/objects/items/storage/belt.dm @@ -286,6 +286,7 @@ /obj/item/surgicaldrill, /obj/item/tank/internals/emergency_oxygen, /obj/item/wrench/medical, + /obj/item/knife/ritual, )) /obj/item/storage/belt/medical/paramedic @@ -659,7 +660,7 @@ /obj/item/storage/belt/wands/Initialize(mapload) . = ..() - atom_storage.max_slots = 6 + atom_storage.max_slots = 7 atom_storage.set_holdable(/obj/item/gun/magic/wand) /obj/item/storage/belt/wands/full/PopulateContents() @@ -669,6 +670,7 @@ new /obj/item/gun/magic/wand/teleport(src) new /obj/item/gun/magic/wand/door(src) new /obj/item/gun/magic/wand/fireball(src) + new /obj/item/gun/magic/wand/shrink(src) for(var/obj/item/gun/magic/wand/W in contents) //All wands in this pack come in the best possible condition W.max_charges = initial(W.max_charges) @@ -730,6 +732,7 @@ /obj/item/ammo_casing/strilka310, /obj/item/ammo_casing/shotgun, /obj/item/ammo_casing/a357, + /obj/item/ammo_casing/junk, )) /obj/item/storage/belt/fannypack @@ -821,6 +824,7 @@ atom_storage.rustle_sound = FALSE atom_storage.max_specific_storage = WEIGHT_CLASS_BULKY atom_storage.set_holdable(/obj/item/melee/sabre) + atom_storage.click_alt_open = FALSE /obj/item/storage/belt/sabre/examine(mob/user) . = ..() diff --git a/code/game/objects/items/storage/boxes/_boxes.dm b/code/game/objects/items/storage/boxes/_boxes.dm index 1861a5bd2fc38..56915d8a5fced 100644 --- a/code/game/objects/items/storage/boxes/_boxes.dm +++ b/code/game/objects/items/storage/boxes/_boxes.dm @@ -51,8 +51,3 @@ balloon_alert(user, "folded") qdel(src) user.put_in_hands(result) - -/obj/item/storage/box/attackby(obj/item/W, mob/user, params) - if(istype(W, /obj/item/stack/package_wrap)) - return FALSE - return ..() diff --git a/code/game/objects/items/storage/boxes/engineering_boxes.dm b/code/game/objects/items/storage/boxes/engineering_boxes.dm index de975d9dbfea4..a46703ec8bf9d 100644 --- a/code/game/objects/items/storage/boxes/engineering_boxes.dm +++ b/code/game/objects/items/storage/boxes/engineering_boxes.dm @@ -24,10 +24,7 @@ /obj/item/storage/box/material/Initialize(mapload) . = ..() - atom_storage.allow_big_nesting = TRUE - atom_storage.max_slots = 99 - atom_storage.max_specific_storage = WEIGHT_CLASS_GIGANTIC - atom_storage.max_total_storage = 99 + atom_storage.max_specific_storage = WEIGHT_CLASS_GIGANTIC //This needs to be set here too because the parent type overrides it again /obj/item/storage/box/material/PopulateContents() //less uranium because radioactive var/static/items_inside = list( @@ -51,6 +48,11 @@ /obj/item/stack/sheet/plastic/fifty=1, /obj/item/stack/sheet/runed_metal/fifty=1, ) + //This needs to be done here and not in Initialize() because the stacks get merged and fall out when their weight updates if this is set after PopulateContents() + atom_storage.allow_big_nesting = TRUE + atom_storage.max_slots = 99 + atom_storage.max_specific_storage = WEIGHT_CLASS_GIGANTIC + atom_storage.max_total_storage = 99 generate_items_inside(items_inside,src) /obj/item/storage/box/debugtools diff --git a/code/game/objects/items/storage/boxes/food_boxes.dm b/code/game/objects/items/storage/boxes/food_boxes.dm index c49fa288eb38b..bccb04f14d006 100644 --- a/code/game/objects/items/storage/boxes/food_boxes.dm +++ b/code/game/objects/items/storage/boxes/food_boxes.dm @@ -94,26 +94,26 @@ desc = "A paper sack with a crude smile etched onto the side." return ..() -/obj/item/storage/box/papersack/attackby(obj/item/attacking_item, mob/user, params) - if(istype(attacking_item, /obj/item/pen)) - var/choice = show_radial_menu(user, src , papersack_designs, custom_check = CALLBACK(src, PROC_REF(check_menu), user, attacking_item), radius = 36, require_near = TRUE) +/obj/item/storage/box/papersack/tool_act(mob/living/user, obj/item/tool, list/modifiers) + if(IS_WRITING_UTENSIL(tool)) + var/choice = show_radial_menu(user, src , papersack_designs, custom_check = CALLBACK(src, PROC_REF(check_menu), user, tool), radius = 36, require_near = TRUE) if(!choice || choice == design_choice) - return FALSE + return ITEM_INTERACT_BLOCKING design_choice = choice balloon_alert(user, "modified") update_appearance() - return FALSE - if(attacking_item.get_sharpness() && !contents.len) + return ITEM_INTERACT_SUCCESS + if(tool.get_sharpness() && !contents.len) if(design_choice == "None") user.show_message(span_notice("You cut eyeholes into [src]."), MSG_VISUAL) new /obj/item/clothing/head/costume/papersack(drop_location()) qdel(src) - return FALSE + return ITEM_INTERACT_SUCCESS else if(design_choice == "SmileyFace") user.show_message(span_notice("You cut eyeholes into [src] and modify the design."), MSG_VISUAL) new /obj/item/clothing/head/costume/papersack/smiley(drop_location()) qdel(src) - return FALSE + return ITEM_INTERACT_SUCCESS return ..() /** diff --git a/code/game/objects/items/storage/boxes/job_boxes.dm b/code/game/objects/items/storage/boxes/job_boxes.dm index 220fdc2f79522..ea9189cc5f2b0 100644 --- a/code/game/objects/items/storage/boxes/job_boxes.dm +++ b/code/game/objects/items/storage/boxes/job_boxes.dm @@ -42,7 +42,7 @@ if(HAS_TRAIT(SSstation, STATION_TRAIT_RADIOACTIVE_NEBULA)) new /obj/item/storage/pill_bottle/potassiodide(src) - + if(SSmapping.is_planetary() && LAZYLEN(SSmapping.multiz_levels)) new /obj/item/climbing_hook/emergency(src) @@ -171,20 +171,20 @@ desc = "A colorful cardboard box for the clown" illustration = "clown" -/obj/item/storage/box/clown/attackby(obj/item/I, mob/user, params) - if((istype(I, /obj/item/bodypart/arm/left/robot)) || (istype(I, /obj/item/bodypart/arm/right/robot))) - if(contents.len) //prevent accidently deleting contents - balloon_alert(user, "items inside!") - return - if(!user.temporarilyRemoveItemFromInventory(I)) - return - qdel(I) - balloon_alert(user, "wheels added, honk!") - var/obj/item/bot_assembly/honkbot/A = new - qdel(src) - user.put_in_hands(A) - else +/obj/item/storage/box/clown/tool_act(mob/living/user, obj/item/tool, list/modifiers) + if(!istype(tool, /obj/item/bodypart/arm/left/robot) && !istype(tool, /obj/item/bodypart/arm/right/robot)) return ..() + if(contents.len) //prevent accidently deleting contents + balloon_alert(user, "items inside!") + return ITEM_INTERACT_BLOCKING + if(!user.temporarilyRemoveItemFromInventory(tool)) + return ITEM_INTERACT_BLOCKING + qdel(tool) + loc.balloon_alert(user, "wheels added, honk!") + var/obj/item/bot_assembly/honkbot/A = new + qdel(src) + user.put_in_hands(A) + return ITEM_INTERACT_SUCCESS /obj/item/storage/box/clown/suicide_act(mob/living/user) user.visible_message(span_suicide("[user] opens [src] and gets consumed by [p_them()]! It looks like [user.p_theyre()] trying to commit suicide!")) diff --git a/code/game/objects/items/storage/boxes/service_boxes.dm b/code/game/objects/items/storage/boxes/service_boxes.dm index 6dc790cc49545..ee558d863daf4 100644 --- a/code/game/objects/items/storage/boxes/service_boxes.dm +++ b/code/game/objects/items/storage/boxes/service_boxes.dm @@ -92,14 +92,17 @@ atom_storage.max_slots = 10 atom_storage.set_holdable(/obj/item/match) +/obj/item/storage/box/matches/tool_act(mob/living/user, obj/item/tool, list/modifiers) + if(istype(tool, /obj/item/match)) + var/obj/item/match/match = tool + match.matchignite() + return ITEM_INTERACT_SUCCESS + return ..() + /obj/item/storage/box/matches/PopulateContents() 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)) - W.matchignite() - /obj/item/storage/box/matches/update_icon_state() . = ..() switch(length(contents)) diff --git a/code/game/objects/items/storage/fancy.dm b/code/game/objects/items/storage/fancy.dm index 1e6cd6432ca5a..1c5490301a5c0 100644 --- a/code/game/objects/items/storage/fancy.dm +++ b/code/game/objects/items/storage/fancy.dm @@ -202,7 +202,7 @@ w_class = WEIGHT_CLASS_TINY throwforce = 0 slot_flags = ITEM_SLOT_BELT - spawn_type = /obj/item/clothing/mask/cigarette/space_cigarette + spawn_type = /obj/item/cigarette/space_cigarette spawn_count = 6 custom_price = PAYCHECK_CREW age_restricted = TRUE @@ -233,27 +233,40 @@ /obj/item/storage/fancy/cigarettes/Initialize(mapload) . = ..() atom_storage.display_contents = FALSE - atom_storage.set_holdable(list(/obj/item/clothing/mask/cigarette, /obj/item/lighter)) + atom_storage.set_holdable(list(/obj/item/cigarette, /obj/item/lighter)) register_context() +/obj/item/storage/fancy/cigarettes/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + . = ..() + if(interacting_with != user) // you can quickly put a cigarette in your mouth only + return ..() + quick_remove_item(/obj/item/cigarette, user, equip_to_mouth = TRUE) + /obj/item/storage/fancy/cigarettes/attack_hand_secondary(mob/user, list/modifiers) . = ..() - quick_remove_item(/obj/item/clothing/mask/cigarette, user) + quick_remove_item(/obj/item/cigarette, user) + return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN /obj/item/storage/fancy/cigarettes/click_alt(mob/user) var/obj/item/lighter = locate(/obj/item/lighter) in contents if(lighter) quick_remove_item(lighter, user) else - quick_remove_item(/obj/item/clothing/mask/cigarette, user) + quick_remove_item(/obj/item/cigarette, user) return CLICK_ACTION_SUCCESS -/// Removes an item from the packet if there is one -/obj/item/storage/fancy/cigarettes/proc/quick_remove_item(obj/item/grabbies, mob/user) +/// Removes an item or puts it in mouth from the packet, if any +/obj/item/storage/fancy/cigarettes/proc/quick_remove_item(obj/item/grabbies, mob/user, equip_to_mouth = FALSE) var/obj/item/finger = locate(grabbies) in contents if(finger) - atom_storage.remove_single(user, finger, drop_location()) - user.put_in_hands(finger) + if(!equip_to_mouth) + atom_storage.remove_single(user, finger, drop_location()) + user.put_in_hands(finger) + return + if(user.equip_to_slot_if_possible(finger, ITEM_SLOT_MASK, qdel_on_fail = FALSE, disable_warning = TRUE)) + finger.forceMove(user) + return + balloon_alert(user, "mouth is covered!") /obj/item/storage/fancy/cigarettes/add_context(atom/source, list/context, obj/item/held_item, mob/user) . = ..() @@ -303,49 +316,49 @@ desc = "A packet of six imported DromedaryCo cancer sticks. A label on the packaging reads, \"Wouldn't a slow death make a change?\"" icon_state = "dromedary" base_icon_state = "dromedary" - spawn_type = /obj/item/clothing/mask/cigarette/dromedary + spawn_type = /obj/item/cigarette/dromedary /obj/item/storage/fancy/cigarettes/cigpack_uplift name = "\improper Uplift Smooth packet" desc = "Your favorite brand, now menthol flavored." icon_state = "uplift" base_icon_state = "uplift" - spawn_type = /obj/item/clothing/mask/cigarette/uplift + spawn_type = /obj/item/cigarette/uplift /obj/item/storage/fancy/cigarettes/cigpack_robust name = "\improper Robust packet" desc = "Smoked by the robust." icon_state = "robust" base_icon_state = "robust" - spawn_type = /obj/item/clothing/mask/cigarette/robust + spawn_type = /obj/item/cigarette/robust /obj/item/storage/fancy/cigarettes/cigpack_robustgold name = "\improper Robust Gold packet" desc = "Smoked by the truly robust." icon_state = "robustg" base_icon_state = "robustg" - spawn_type = /obj/item/clothing/mask/cigarette/robustgold + spawn_type = /obj/item/cigarette/robustgold /obj/item/storage/fancy/cigarettes/cigpack_carp name = "\improper Carp Classic packet" desc = "Since 2313." icon_state = "carp" base_icon_state = "carp" - spawn_type = /obj/item/clothing/mask/cigarette/carp + spawn_type = /obj/item/cigarette/carp /obj/item/storage/fancy/cigarettes/cigpack_syndicate name = "cigarette packet" desc = "An obscure brand of cigarettes." icon_state = "syndie" base_icon_state = "syndie" - spawn_type = /obj/item/clothing/mask/cigarette/syndicate + spawn_type = /obj/item/cigarette/syndicate /obj/item/storage/fancy/cigarettes/cigpack_midori name = "\improper Midori Tabako packet" desc = "You can't understand the runes, but the packet smells funny." icon_state = "midori" base_icon_state = "midori" - spawn_type = /obj/item/clothing/mask/cigarette/rollie/nicotine + spawn_type = /obj/item/cigarette/rollie/nicotine /obj/item/storage/fancy/cigarettes/cigpack_candy name = "\improper Timmy's First Candy Smokes packet" @@ -353,42 +366,42 @@ icon_state = "candy" base_icon_state = "candy" contents_tag = "candy cigarette" - spawn_type = /obj/item/clothing/mask/cigarette/candy + spawn_type = /obj/item/cigarette/candy candy = TRUE age_restricted = FALSE /obj/item/storage/fancy/cigarettes/cigpack_candy/Initialize(mapload) . = ..() if(prob(7)) - spawn_type = /obj/item/clothing/mask/cigarette/candy/nicotine //uh oh! + spawn_type = /obj/item/cigarette/candy/nicotine //uh oh! /obj/item/storage/fancy/cigarettes/cigpack_shadyjims name = "\improper Shady Jim's Super Slims packet" desc = "Is your weight slowing you down? Having trouble running away from gravitational singularities? Can't stop stuffing your mouth? Smoke Shady Jim's Super Slims and watch all that fat burn away. Guaranteed results!" icon_state = "shadyjim" base_icon_state = "shadyjim" - spawn_type = /obj/item/clothing/mask/cigarette/shadyjims + spawn_type = /obj/item/cigarette/shadyjims /obj/item/storage/fancy/cigarettes/cigpack_xeno name = "\improper Xeno Filtered packet" desc = "Loaded with 100% pure slime. And also nicotine." icon_state = "slime" base_icon_state = "slime" - spawn_type = /obj/item/clothing/mask/cigarette/xeno + spawn_type = /obj/item/cigarette/xeno /obj/item/storage/fancy/cigarettes/cigpack_cannabis name = "\improper Freak Brothers' Special packet" desc = "A label on the packaging reads, \"Endorsed by Phineas, Freddy and Franklin.\"" icon_state = "midori" base_icon_state = "midori" - spawn_type = /obj/item/clothing/mask/cigarette/rollie/cannabis + spawn_type = /obj/item/cigarette/rollie/cannabis /obj/item/storage/fancy/cigarettes/cigpack_mindbreaker name = "\improper Leary's Delight packet" desc = "Banned in over 36 galaxies." icon_state = "shadyjim" base_icon_state = "shadyjim" - spawn_type = /obj/item/clothing/mask/cigarette/rollie/mindbreaker + spawn_type = /obj/item/cigarette/rollie/mindbreaker /obj/item/storage/fancy/rollingpapers name = "rolling paper pack" @@ -424,14 +437,14 @@ base_icon_state = "cigarcase" w_class = WEIGHT_CLASS_NORMAL contents_tag = "premium cigar" - spawn_type = /obj/item/clothing/mask/cigarette/cigar/premium + spawn_type = /obj/item/cigarette/cigar/premium spawn_count = 5 spawn_coupon = FALSE display_cigs = FALSE /obj/item/storage/fancy/cigarettes/cigars/Initialize(mapload) . = ..() - atom_storage.set_holdable(/obj/item/clothing/mask/cigarette/cigar) + atom_storage.set_holdable(/obj/item/cigarette/cigar) /obj/item/storage/fancy/cigarettes/cigars/update_icon_state() . = ..() @@ -443,7 +456,7 @@ if(!open_status) return var/cigar_position = 1 //generate sprites for cigars in the box - for(var/obj/item/clothing/mask/cigarette/cigar/smokes in contents) + for(var/obj/item/cigarette/cigar/smokes in contents) . += "[smokes.icon_off]_[cigar_position]" cigar_position++ @@ -452,14 +465,14 @@ desc = "A case of imported Cohiba cigars, renowned for their strong flavor." icon_state = "cohibacase" base_icon_state = "cohibacase" - spawn_type = /obj/item/clothing/mask/cigarette/cigar/cohiba + spawn_type = /obj/item/cigarette/cigar/cohiba /obj/item/storage/fancy/cigarettes/cigars/havana name = "\improper premium Havanian cigar case" desc = "A case of classy Havanian cigars." icon_state = "cohibacase" base_icon_state = "cohibacase" - spawn_type = /obj/item/clothing/mask/cigarette/cigar/havana + spawn_type = /obj/item/cigarette/cigar/havana /* * Heart Shaped Box w/ Chocolates diff --git a/code/game/objects/items/storage/holsters.dm b/code/game/objects/items/storage/holsters.dm index 400c949a99320..afb7b0f750b26 100644 --- a/code/game/objects/items/storage/holsters.dm +++ b/code/game/objects/items/storage/holsters.dm @@ -11,11 +11,11 @@ /obj/item/storage/belt/holster/equipped(mob/user, slot) . = ..() if(slot & (ITEM_SLOT_BELT|ITEM_SLOT_SUITSTORE)) - ADD_TRAIT(user, TRAIT_GUNFLIP, CLOTHING_TRAIT) + ADD_CLOTHING_TRAIT(user, TRAIT_GUNFLIP) /obj/item/storage/belt/holster/dropped(mob/user) . = ..() - REMOVE_TRAIT(user, TRAIT_GUNFLIP, CLOTHING_TRAIT) + REMOVE_CLOTHING_TRAIT(user, TRAIT_GUNFLIP) /obj/item/storage/belt/holster/Initialize(mapload) . = ..() diff --git a/code/game/objects/items/storage/lockbox.dm b/code/game/objects/items/storage/lockbox.dm index 87a7e4928dadc..a1dbe0e690c71 100644 --- a/code/game/objects/items/storage/lockbox.dm +++ b/code/game/objects/items/storage/lockbox.dm @@ -12,6 +12,7 @@ var/open = FALSE var/icon_locked = "lockbox+l" var/icon_closed = "lockbox" + var/icon_open = "lockbox" var/icon_broken = "lockbox+b" /obj/item/storage/lockbox/Initialize(mapload) @@ -19,47 +20,54 @@ atom_storage.max_specific_storage = WEIGHT_CLASS_NORMAL atom_storage.max_total_storage = 14 atom_storage.max_slots = 4 - atom_storage.locked = TRUE + atom_storage.locked = STORAGE_FULLY_LOCKED register_context() + update_appearance() -/obj/item/storage/lockbox/attackby(obj/item/W, mob/user, params) - var/locked = atom_storage.locked - if(W.GetID()) - if(broken) - balloon_alert(user, "broken!") - return - if(allowed(user)) - if(atom_storage.locked) - atom_storage.locked = STORAGE_NOT_LOCKED - else - atom_storage.locked = STORAGE_FULLY_LOCKED - locked = atom_storage.locked - if(locked) - icon_state = icon_locked - atom_storage.close_all() - else - icon_state = icon_closed - - balloon_alert(user, locked ? "locked" : "unlocked") - return +/obj/item/storage/lockbox/tool_act(mob/living/user, obj/item/tool, list/modifiers) + var/obj/item/card/card = tool.GetID() + if(isnull(card)) + return ..() + if(can_unlock(user, card)) + if(atom_storage.locked) + atom_storage.locked = STORAGE_NOT_LOCKED else - balloon_alert(user, "access denied!") - return - if(!locked) - return ..() + atom_storage.locked = STORAGE_FULLY_LOCKED + atom_storage.close_all() + balloon_alert(user, atom_storage.locked ? "locked" : "unlocked") + update_appearance() + return ITEM_INTERACT_SUCCESS + + return ITEM_INTERACT_BLOCKING + +/obj/item/storage/lockbox/proc/can_unlock(mob/living/user, obj/item/card/id/id_card) + if(check_access(id_card)) + return TRUE + + balloon_alert(user, "access denied!") + return FALSE + +/obj/item/storage/lockbox/update_icon_state() + . = ..() + if(broken) + icon_state = icon_broken + else if(atom_storage?.locked) + icon_state = icon_locked + else if(open) + icon_state = icon_open else - balloon_alert(user, "locked!") + icon_state = icon_closed /obj/item/storage/lockbox/emag_act(mob/user, obj/item/card/emag/emag_card) if(!broken) broken = TRUE atom_storage.locked = STORAGE_NOT_LOCKED - icon_state = src.icon_broken balloon_alert(user, "lock destroyed") if (emag_card && user) user.visible_message(span_warning("[user] swipes [emag_card] over [src], breaking it!")) + update_appearance() return TRUE return FALSE @@ -107,6 +115,7 @@ icon_locked = "medalbox+l" icon_closed = "medalbox" icon_broken = "medalbox+b" + icon_open = "medalboxopen" /obj/item/storage/lockbox/medal/Initialize(mapload) . = ..() @@ -122,7 +131,7 @@ /obj/item/storage/lockbox/medal/click_alt(mob/user) if(!atom_storage.locked) - open = (open ? FALSE : TRUE) + open = !open update_appearance() return CLICK_ACTION_SUCCESS @@ -137,18 +146,6 @@ for(var/i in 1 to 3) new /obj/item/clothing/accessory/medal/conduct(src) -/obj/item/storage/lockbox/medal/update_icon_state() - if(atom_storage?.locked) - icon_state = "medalbox+l" - return ..() - - icon_state = "medalbox" - if(open) - icon_state += "open" - if(broken) - icon_state += "+b" - return ..() - /obj/item/storage/lockbox/medal/update_overlays() . = ..() if(!contents || !open) @@ -237,13 +234,13 @@ icon_state = "secure" icon_closed = "secure" icon_locked = "secure_locked" - icon_broken = "secure+b" + icon_broken = "secure_locked" + icon_open = "secure" inhand_icon_state = "sec-case" lefthand_file = 'icons/mob/inhands/equipment/briefcase_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/briefcase_righthand.dmi' w_class = WEIGHT_CLASS_HUGE var/datum/bank_account/buyer_account - var/privacy_lock = TRUE /obj/item/storage/lockbox/order/Initialize(mapload, datum/bank_account/_buyer_account) . = ..() @@ -251,27 +248,12 @@ ADD_TRAIT(src, TRAIT_NO_MISSING_ITEM_ERROR, TRAIT_GENERIC) ADD_TRAIT(src, TRAIT_NO_MANIFEST_CONTENTS_ERROR, TRAIT_GENERIC) -/obj/item/storage/lockbox/order/attackby(obj/item/W, mob/user, params) - var/obj/item/card/id/id_card = W.GetID() - if(!id_card) - return ..() - - if(iscarbon(user)) - add_fingerprint(user) - - if(id_card.registered_account != buyer_account) - balloon_alert(user, "incorrect bank account!") - return +/obj/item/storage/lockbox/order/can_unlock(mob/living/user, obj/item/card/id/id_card) + if(id_card.registered_account == buyer_account) + return TRUE - if(privacy_lock) - atom_storage.locked = STORAGE_NOT_LOCKED - icon_state = icon_locked - else - atom_storage.locked = STORAGE_FULLY_LOCKED - icon_state = icon_closed - privacy_lock = atom_storage.locked - user.visible_message(span_notice("[user] [privacy_lock ? "" : "un"]locks [src]'s privacy lock."), - span_notice("You [privacy_lock ? "" : "un"]lock [src]'s privacy lock.")) + balloon_alert(user, "incorrect bank account!") + return FALSE ///screentips for lockboxes /obj/item/storage/lockbox/add_context(atom/source, list/context, obj/item/held_item, mob/user) diff --git a/code/game/objects/items/storage/medkit.dm b/code/game/objects/items/storage/medkit.dm index 5b09b5e0605bd..944289598d17b 100644 --- a/code/game/objects/items/storage/medkit.dm +++ b/code/game/objects/items/storage/medkit.dm @@ -171,6 +171,9 @@ inhand_icon_state = "medkit-ointment" damagetype_healed = BURN +/obj/item/storage/medkit/fire/get_medbot_skin() + return "ointment" + /obj/item/storage/medkit/fire/suicide_act(mob/living/carbon/user) user.visible_message(span_suicide("[user] begins rubbing \the [src] against [user.p_them()]self! It looks like [user.p_theyre()] trying to start a fire!")) return FIRELOSS @@ -192,6 +195,9 @@ inhand_icon_state = "medkit-toxin" damagetype_healed = TOX +/obj/item/storage/medkit/toxin/get_medbot_skin() + return "tox" + /obj/item/storage/medkit/toxin/suicide_act(mob/living/carbon/user) user.visible_message(span_suicide("[user] begins licking the lead paint off \the [src]! It looks like [user.p_theyre()] trying to commit suicide!")) return TOXLOSS @@ -216,6 +222,9 @@ inhand_icon_state = "medkit-o2" damagetype_healed = OXY +/obj/item/storage/medkit/o2/get_medbot_skin() + return "o2" + /obj/item/storage/medkit/o2/suicide_act(mob/living/carbon/user) user.visible_message(span_suicide("[user] begins hitting [user.p_their()] neck with \the [src]! It looks like [user.p_theyre()] trying to commit suicide!")) return OXYLOSS @@ -237,6 +246,9 @@ inhand_icon_state = "medkit-brute" damagetype_healed = BRUTE +/obj/item/storage/medkit/brute/get_medbot_skin() + return "brute" + /obj/item/storage/medkit/brute/suicide_act(mob/living/carbon/user) user.visible_message(span_suicide("[user] begins beating [user.p_them()]self over the head with \the [src]! It looks like [user.p_theyre()] trying to commit suicide!")) return BRUTELOSS @@ -261,6 +273,9 @@ custom_premium_price = PAYCHECK_COMMAND * 6 damagetype_healed = HEAL_ALL_DAMAGE +/obj/item/storage/medkit/advanced/get_medbot_skin() + return "advanced" + /obj/item/storage/medkit/advanced/PopulateContents() if(empty) return @@ -277,6 +292,9 @@ inhand_icon_state = "medkit-tactical" damagetype_healed = HEAL_ALL_DAMAGE +/obj/item/storage/medkit/tactical_lite/get_medbot_skin() + return "bezerk" + /obj/item/storage/medkit/tactical_lite/PopulateContents() if(empty) return @@ -399,35 +417,28 @@ generate_items_inside(items_inside,src) //medibot assembly -/obj/item/storage/medkit/attackby(obj/item/bodypart/bodypart, mob/user, params) - if((!istype(bodypart, /obj/item/bodypart/arm/left/robot)) && (!istype(bodypart, /obj/item/bodypart/arm/right/robot))) +/obj/item/storage/medkit/tool_act(mob/living/user, obj/item/tool, list/modifiers) + if(!istype(tool, /obj/item/bodypart/arm/left/robot) && !istype(tool, /obj/item/bodypart/arm/right/robot)) return ..() - //Making a medibot! if(contents.len >= 1) balloon_alert(user, "items inside!") - return + return ITEM_INTERACT_BLOCKING - ///if you add a new one don't forget to update /datum/crafting_recipe/medbot/on_craft_completion() - var/obj/item/bot_assembly/medbot/medbot_assembly = new - if (istype(src, /obj/item/storage/medkit/fire)) - medbot_assembly.set_skin("ointment") - else if (istype(src, /obj/item/storage/medkit/toxin)) - medbot_assembly.set_skin("tox") - else if (istype(src, /obj/item/storage/medkit/o2)) - medbot_assembly.set_skin("o2") - else if (istype(src, /obj/item/storage/medkit/brute)) - medbot_assembly.set_skin("brute") - else if (istype(src, /obj/item/storage/medkit/advanced)) - medbot_assembly.set_skin("advanced") - else if (istype(src, /obj/item/storage/medkit/tactical)) - medbot_assembly.set_skin("bezerk") + var/obj/item/bot_assembly/medbot/medbot_assembly = new() + medbot_assembly.set_skin(get_medbot_skin()) user.put_in_hands(medbot_assembly) medbot_assembly.balloon_alert(user, "arm added") - medbot_assembly.robot_arm = bodypart.type + medbot_assembly.robot_arm = tool.type medbot_assembly.medkit_type = type - qdel(bodypart) + qdel(tool) qdel(src) + return ITEM_INTERACT_SUCCESS + +/// Gets what skin (icon_state) this medkit uses for a medbot +/obj/item/storage/medkit/proc/get_medbot_skin() + // The skin var is nullsafe so returning nothing is A-OK + return /* * Pill Bottles @@ -733,19 +744,20 @@ icon_state = "[base_icon_state][cooling ? "-working" : null]" return ..() -/obj/item/storage/organbox/attackby(obj/item/I, mob/user, params) - if(is_reagent_container(I) && I.is_open_container()) - var/obj/item/reagent_containers/RC = I +/obj/item/storage/organbox/tool_act(mob/living/user, obj/item/tool, list/modifiers) + if(is_reagent_container(tool) && tool.is_open_container()) + var/obj/item/reagent_containers/RC = tool var/units = RC.reagents.trans_to(src, RC.amount_per_transfer_from_this, transferred_by = user) if(units) balloon_alert(user, "[units]u transferred") - return - if(istype(I, /obj/item/plunger)) + return ITEM_INTERACT_SUCCESS + return ITEM_INTERACT_BLOCKING + if(istype(tool, /obj/item/plunger)) balloon_alert(user, "plunging...") if(do_after(user, 1 SECONDS, target = src)) balloon_alert(user, "plunged") reagents.clear_reagents() - return + return ITEM_INTERACT_SUCCESS return ..() /obj/item/storage/organbox/suicide_act(mob/living/carbon/user) diff --git a/code/game/objects/items/storage/toolbox.dm b/code/game/objects/items/storage/toolbox.dm index 6e831c1167836..7c5bc74e07550 100644 --- a/code/game/objects/items/storage/toolbox.dm +++ b/code/game/objects/items/storage/toolbox.dm @@ -273,22 +273,23 @@ new /obj/item/gun_maintenance_supplies(src) //floorbot assembly -/obj/item/storage/toolbox/attackby(obj/item/stack/tile/iron/T, mob/user, params) - var/list/allowed_toolbox = list(/obj/item/storage/toolbox/emergency, //which toolboxes can be made into floorbots - /obj/item/storage/toolbox/electrical, - /obj/item/storage/toolbox/mechanical, - /obj/item/storage/toolbox/artistic, - /obj/item/storage/toolbox/syndicate) - - if(!istype(T, /obj/item/stack/tile/iron)) - ..() - return +/obj/item/storage/toolbox/tool_act(mob/living/user, obj/item/tool, list/modifiers) + if(!istype(tool, /obj/item/stack/tile/iron)) + return ..() + var/static/list/allowed_toolbox = list( + /obj/item/storage/toolbox/artistic, + /obj/item/storage/toolbox/electrical, + /obj/item/storage/toolbox/emergency, + /obj/item/storage/toolbox/mechanical, + /obj/item/storage/toolbox/syndicate, + ) + if(!is_type_in_list(src, allowed_toolbox) && (type != /obj/item/storage/toolbox)) - return + return ITEM_INTERACT_BLOCKING if(contents.len >= 1) balloon_alert(user, "not empty!") - return - if(T.use(10)) + return ITEM_INTERACT_BLOCKING + if(tool.use(10)) var/obj/item/bot_assembly/floorbot/B = new B.toolbox = type switch(B.toolbox) @@ -306,9 +307,9 @@ B.update_appearance() B.balloon_alert(user, "tiles added") qdel(src) - else - balloon_alert(user, "needs 10 tiles!") - return + return ITEM_INTERACT_BLOCKING + balloon_alert(user, "needs 10 tiles!") + return ITEM_INTERACT_SUCCESS /obj/item/storage/toolbox/haunted name = "old toolbox" @@ -479,7 +480,7 @@ playsound(src, 'sound/items/click.ogg', 25, TRUE) return TRUE to_chat(user, span_warning("You put your hand on the hand scanner, and it rejects it with an angry chimpanzee screech!")) - playsound(src, "sound/creatures/monkey/monkey_screech_[rand(1,7)].ogg", 75, TRUE) + playsound(src, SFX_SCREECH, 75, TRUE) return FALSE /obj/item/storage/toolbox/guncase/monkeycase/PopulateContents() diff --git a/code/game/objects/items/storage/uplink_kits.dm b/code/game/objects/items/storage/uplink_kits.dm index b04be4cb85bbd..96b2d10440d4e 100644 --- a/code/game/objects/items/storage/uplink_kits.dm +++ b/code/game/objects/items/storage/uplink_kits.dm @@ -327,11 +327,9 @@ /obj/item/storage/belt/military/assault/fisher /obj/item/storage/belt/military/assault/fisher/PopulateContents() - new /obj/item/gun/ballistic/automatic/pistol/clandestine(src) // 7 TC - new /obj/item/suppressor(src) // 3 TC + new /obj/item/gun/ballistic/automatic/pistol/clandestine/fisher(src) // 11 TC: 7 (pistol) + 3 (suppressor) + lightbreaker (1 TC, black market meme/util item) new /obj/item/ammo_box/magazine/m10mm(src) // 1 TC new /obj/item/ammo_box/magazine/m10mm(src) - new /obj/item/gun/energy/recharge/fisher(src) // Acquirable through black market, shit utility item 1 TC new /obj/item/card/emag/doorjack(src) // 3 TC new /obj/item/knife/combat(src) //comparable to the e-dagger, 2 TC @@ -343,7 +341,7 @@ /obj/item/storage/box/syndie_kit/rebarxbowsyndie name = "Boxed Rebar Crossbow" - desc = "Now features instruction manual for making ammo." + desc = "A scoped weapon with low armor penetration, but devestating against flesh. Features instruction manual for making specialty ammo." /obj/item/storage/box/syndie_kit/rebarxbowsyndie/PopulateContents() new /obj/item/book/granter/crafting_recipe/dusting/rebarxbowsyndie_ammo(src) @@ -442,9 +440,16 @@ new /obj/item/grenade/empgrenade(src) new /obj/item/implanter/emp(src) +/obj/item/storage/box/syndie_kit/smoke + name = "smoke kit" + +/obj/item/storage/box/syndie_kit/smoke/PopulateContents() + for(var/i in 1 to 5) + new /obj/item/grenade/smokebomb(src) + /obj/item/storage/box/syndie_kit/mail_counterfeit name = "mail counterfeit kit" - desc = "A box full of mail counterfeit devices. Nothing stops the mail." + desc = "A GLA Postal Service branded box. It's emblazoned with the motto: *Nothing stops the mail*." /obj/item/storage/box/syndie_kit/mail_counterfeit/PopulateContents() for(var/i in 1 to 6) diff --git a/code/game/objects/items/storage/wallets.dm b/code/game/objects/items/storage/wallets.dm index 469a14e0e7810..e485d6997f05f 100644 --- a/code/game/objects/items/storage/wallets.dm +++ b/code/game/objects/items/storage/wallets.dm @@ -18,7 +18,7 @@ /obj/item/stack/spacecash, /obj/item/holochip, /obj/item/card, - /obj/item/clothing/mask/cigarette, + /obj/item/cigarette, /obj/item/clothing/accessory/dogtag, /obj/item/coin, /obj/item/coupon, diff --git a/code/game/objects/items/surgery_tray.dm b/code/game/objects/items/surgery_tray.dm index 028366481d45a..e156bf8a0a862 100644 --- a/code/game/objects/items/surgery_tray.dm +++ b/code/game/objects/items/surgery_tray.dm @@ -6,7 +6,7 @@ /obj/item/surgery_tray name = "surgery tray" desc = "A Deforest brand medical cart. It is a folding model, meaning the wheels on the bottom can be retracted and the body used as a tray." - icon = 'icons/obj/medicart.dmi' + icon = 'icons/obj/medical/medicart.dmi' icon_state = "tray" w_class = WEIGHT_CLASS_BULKY slowdown = 1 diff --git a/code/game/objects/items/syndie_spraycan.dm b/code/game/objects/items/syndie_spraycan.dm index 774219fa12229..1b7e0d9c4024a 100644 --- a/code/game/objects/items/syndie_spraycan.dm +++ b/code/game/objects/items/syndie_spraycan.dm @@ -19,28 +19,27 @@ /// Set to true if we finished drawing something, this spraycan is now useless var/expended = FALSE -/obj/item/traitor_spraycan/afterattack(atom/target, mob/user, proximity, params) - . = ..() +/obj/item/traitor_spraycan/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + if (!check_allowed_items(interacting_with) || !isliving(user)) + return NONE + if (expended) user.balloon_alert(user, "all out of paint...") - return COMPONENT_CANCEL_ATTACK_CHAIN + return ITEM_INTERACT_BLOCKING if (drawing_rune) user.balloon_alert(user, "already busy!") - return COMPONENT_CANCEL_ATTACK_CHAIN - - . |= AFTERATTACK_PROCESSED_ITEM + return ITEM_INTERACT_BLOCKING - if (!proximity || !check_allowed_items(target) || !isliving(user)) - return + if (isturf(interacting_with)) + try_draw_new_rune(user, interacting_with) + return ITEM_INTERACT_SUCCESS - if (isturf(target)) - try_draw_new_rune(user, target) - return COMPONENT_CANCEL_ATTACK_CHAIN + if (istype(interacting_with, /obj/effect/decal/cleanable/traitor_rune)) + try_complete_rune(user, interacting_with) + return ITEM_INTERACT_SUCCESS - if (istype(target, /obj/effect/decal/cleanable/traitor_rune)) - try_complete_rune(user, target) - return COMPONENT_CANCEL_ATTACK_CHAIN + return ITEM_INTERACT_BLOCKING /** * Attempt to draw a rune on [target_turf]. diff --git a/code/game/objects/items/tanks/tank_types.dm b/code/game/objects/items/tanks/tank_types.dm index 70c0ea0822a41..40989915a68ce 100644 --- a/code/game/objects/items/tanks/tank_types.dm +++ b/code/game/objects/items/tanks/tank_types.dm @@ -77,6 +77,14 @@ . += span_notice("A warning is etched into [src]...") . += span_warning("There is no process in the body that uses N2O, so patients will exhale the N2O... exposing you to it. Make sure to work in a well-ventilated space to avoid sleepy mishaps.") +/obj/item/tank/internals/anesthetic/pure + desc = "A tank with pure N2O. There is a warning sticker crudely slapped onto the tank." + icon_state = "anesthetic_warning" + +/obj/item/tank/internals/anesthetic/pure/populate_gas() + air_contents.assert_gases(/datum/gas/nitrous_oxide) + air_contents.gases[/datum/gas/nitrous_oxide][MOLES] = (10*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) + /* * Plasma */ diff --git a/code/game/objects/items/tanks/tanks.dm b/code/game/objects/items/tanks/tanks.dm index 72c84c9ee995e..bdbfa79001ddf 100644 --- a/code/game/objects/items/tanks/tanks.dm +++ b/code/game/objects/items/tanks/tanks.dm @@ -36,7 +36,7 @@ var/igniting = FALSE /// The gases this tank contains. Don't modify this directly, use return_air() to get it instead var/datum/gas_mixture/air_contents = null - /// The volume of this tank. Among other things gas tank explosions (including TTVs) scale off of this. Be sure to account for that if you change this or you will break ~~toxins~~ordinance. + /// The volume of this tank. Among other things gas tank explosions (including TTVs) scale off of this. Be sure to account for that if you change this or you will break ~~toxins~~ ordinance. var/volume = TANK_STANDARD_VOLUME /// Whether the tank is currently leaking. var/leaking = FALSE @@ -83,11 +83,13 @@ /// Called by carbons after they connect the tank to their breathing apparatus. /obj/item/tank/proc/after_internals_opened(mob/living/carbon/carbon_target) breathing_mob = carbon_target + playsound(loc, 'sound/items/internals_on.ogg', 15, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) RegisterSignal(carbon_target, COMSIG_MOB_GET_STATUS_TAB_ITEMS, PROC_REF(get_status_tab_item)) /// Called by carbons after they disconnect the tank from their breathing apparatus. /obj/item/tank/proc/after_internals_closed(mob/living/carbon/carbon_target) breathing_mob = null + playsound(loc, 'sound/items/internals_off.ogg', 15, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) UnregisterSignal(carbon_target, COMSIG_MOB_GET_STATUS_TAB_ITEMS) /obj/item/tank/proc/get_status_tab_item(mob/living/source, list/items) @@ -413,6 +415,16 @@ if(tank_assembly) tank_assembly.attack_hand() +/obj/item/tank/attack_self(mob/user, modifiers) + if (tank_assembly) + tank_assembly.attack_self(user) + return TRUE + return ..() + +/obj/item/tank/attack_self_secondary(mob/user, modifiers) + . = ..() + ui_interact(user) + /obj/item/tank/Move() . = ..() if(tank_assembly) @@ -445,7 +457,7 @@ balloon_alert(user, "can't reach!") return - if((src in user.get_equipped_items(include_pockets = TRUE, include_accessories = TRUE)) && !user.canUnEquip(src)) + if((src in user.get_equipped_items(INCLUDE_POCKETS | INCLUDE_ACCESSORIES)) && !user.canUnEquip(src)) balloon_alert(user, "it's stuck!") return diff --git a/code/game/objects/items/tanks/watertank.dm b/code/game/objects/items/tanks/watertank.dm index 5cef642634af5..45c20e9908bf4 100644 --- a/code/game/objects/items/tanks/watertank.dm +++ b/code/game/objects/items/tanks/watertank.dm @@ -14,6 +14,7 @@ max_integrity = 200 armor_type = /datum/armor/item_watertank resistance_flags = FIRE_PROOF + interaction_flags_mouse_drop = ALLOW_RESTING var/obj/item/noz var/volume = 500 @@ -93,12 +94,11 @@ else return ..() -/obj/item/watertank/MouseDrop(obj/over_object) +/obj/item/watertank/mouse_drop_dragged(atom/over_object) var/mob/M = loc if(istype(M) && istype(over_object, /atom/movable/screen/inventory/hand)) var/atom/movable/screen/inventory/hand/H = over_object M.putItemFromInventoryInHandIfPossible(src, H.held_index) - return ..() /obj/item/watertank/attackby(obj/item/attacking_item, mob/user, params) if(attacking_item == noz) @@ -137,9 +137,9 @@ return INITIALIZE_HINT_QDEL reagents = loc.reagents //This mister is really just a proxy for the tank's reagents -/obj/item/reagent_containers/spray/mister/afterattack(obj/target, mob/user, proximity) +/obj/item/reagent_containers/spray/mister/try_spray(atom/target, mob/user) if(target.loc == loc) //Safety check so you don't fill your mister with mutagen or something and then blast yourself in the face with it - return + return FALSE return ..() //Janitor tank @@ -287,49 +287,53 @@ return return -/obj/item/extinguisher/mini/nozzle/afterattack(atom/target, mob/user) - if(AttemptRefill(target, user)) - return +/obj/item/extinguisher/mini/nozzle/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + if(AttemptRefill(interacting_with, user)) + return NONE if(nozzle_mode == EXTINGUISHER) return ..() - var/Adj = user.Adjacent(target) + + var/Adj = user.Adjacent(interacting_with) if(nozzle_mode == RESIN_LAUNCHER) if(Adj) - return //Safety check so you don't blast yourself trying to refill your tank + return ITEM_INTERACT_BLOCKING //Safety check so you don't blast yourself trying to refill your tank var/datum/reagents/R = reagents if(R.total_volume < 100) balloon_alert(user, "not enough water!") - return + return ITEM_INTERACT_BLOCKING if(!COOLDOWN_FINISHED(src, resin_cooldown)) balloon_alert(user, "still recharging!") - return + return ITEM_INTERACT_BLOCKING COOLDOWN_START(src, resin_cooldown, 10 SECONDS) R.remove_all(100) var/obj/effect/resin_container/resin = new (get_turf(src)) user.log_message("used Resin Launcher", LOG_GAME) playsound(src,'sound/items/syringeproj.ogg',40,TRUE) var/delay = 2 - var/datum/move_loop/loop = DSmove_manager.move_towards(resin, target, delay, timeout = delay * 5, priority = MOVEMENT_ABOVE_SPACE_PRIORITY) + var/datum/move_loop/loop = GLOB.move_manager.move_towards(resin, interacting_with, delay, timeout = delay * 5, priority = MOVEMENT_ABOVE_SPACE_PRIORITY) RegisterSignal(loop, COMSIG_MOVELOOP_POSTPROCESS, PROC_REF(resin_stop_check)) RegisterSignal(loop, COMSIG_QDELETING, PROC_REF(resin_landed)) - return + return ITEM_INTERACT_SUCCESS if(nozzle_mode == RESIN_FOAM) - if(!Adj || !isturf(target)) + if(!Adj || !isturf(interacting_with)) balloon_alert(user, "too far!") - return - for(var/S in target) - if(istype(S, /obj/effect/particle_effect/fluid/foam/metal/resin) || istype(S, /obj/structure/foamedmetal/resin)) + return ITEM_INTERACT_BLOCKING + for(var/thing in interacting_with) + if(istype(thing, /obj/effect/particle_effect/fluid/foam/metal/resin) || istype(thing, /obj/structure/foamedmetal/resin)) balloon_alert(user, "already has resin!") - return + return ITEM_INTERACT_BLOCKING if(metal_synthesis_cooldown < 5) - var/obj/effect/particle_effect/fluid/foam/metal/resin/foam = new (get_turf(target)) + var/obj/effect/particle_effect/fluid/foam/metal/resin/foam = new (get_turf(interacting_with)) foam.group.target_size = 0 metal_synthesis_cooldown++ addtimer(CALLBACK(src, PROC_REF(reduce_metal_synth_cooldown)), 10 SECONDS) - else - balloon_alert(user, "still being synthesized!") - return + return ITEM_INTERACT_SUCCESS + + balloon_alert(user, "still being synthesized!") + return ITEM_INTERACT_BLOCKING + + return NONE /obj/item/extinguisher/mini/nozzle/proc/resin_stop_check(datum/move_loop/source, result) SIGNAL_HANDLER diff --git a/code/game/objects/items/taster.dm b/code/game/objects/items/taster.dm index eaa65967f9795..599b78971db11 100644 --- a/code/game/objects/items/taster.dm +++ b/code/game/objects/items/taster.dm @@ -8,17 +8,12 @@ var/taste_sensitivity = 15 -/obj/item/taster/afterattack(atom/O, mob/user, proximity) - . = ..() - if(!proximity) - return - - . |= AFTERATTACK_PROCESSED_ITEM - - if(!O.reagents) - to_chat(user, span_notice("[src] cannot taste [O], since [O.p_they()] [O.p_have()] have no reagents.")) - else if(O.reagents.total_volume == 0) - to_chat(user, "[src] cannot taste [O], since [O.p_they()] [O.p_are()] empty.") +/obj/item/taster/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + if(!interacting_with.reagents) + to_chat(user, span_notice("[src] cannot taste [interacting_with], since [interacting_with.p_they()] [interacting_with.p_have()] have no reagents.")) + else if(interacting_with.reagents.total_volume == 0) + to_chat(user, span_notice("[src] cannot taste [interacting_with], since [interacting_with.p_they()] [interacting_with.p_are()] empty.")) else - var/message = O.reagents.generate_taste_message(user, taste_sensitivity) - to_chat(user, "[src] tastes [message] in [O].") + var/message = interacting_with.reagents.generate_taste_message(user, taste_sensitivity) + to_chat(user, span_notice("[src] tastes [message] in [interacting_with].")) + return ITEM_INTERACT_SUCCESS diff --git a/code/game/objects/items/tcg/tcg.dm b/code/game/objects/items/tcg/tcg.dm index 61d0dbe071d9c..fc2eeba82ff72 100644 --- a/code/game/objects/items/tcg/tcg.dm +++ b/code/game/objects/items/tcg/tcg.dm @@ -196,6 +196,7 @@ GLOBAL_LIST_EMPTY(tcgcard_radial_choices) /obj/item/tcgcard_deck/Initialize(mapload) . = ..() create_storage(storage_type = /datum/storage/tcg) + RegisterSignal(atom_storage, COMSIG_STORAGE_REMOVED_ITEM, PROC_REF(on_item_removed)) /obj/item/tcgcard_deck/update_icon_state() if(!flipped) @@ -314,6 +315,21 @@ GLOBAL_LIST_EMPTY(tcgcard_radial_choices) nu_card.update_icon_state() update_icon_state() +/** + * Signal handler for COMSIG_STORAGE_REMOVED_ITEM. Qdels src if contents are empty, flips the removed card if needed. + */ +/obj/item/tcgcard_deck/proc/on_item_removed(datum/storage/storage_datum, obj/item/thing, atom/remove_to_loc, silent = FALSE) + SIGNAL_HANDLER + + if (!istype(thing, /obj/item/tcgcard)) + return + var/obj/item/tcgcard/card = thing + card.flipped = flipped + card.update_appearance(UPDATE_ICON_STATE) + + if(length(contents) == 0) + qdel(src) + /obj/item/cardpack name = "Trading Card Pack: Coder" desc = "Contains six complete fuckups by the coders. Report this on github please!" diff --git a/code/game/objects/items/teleportation.dm b/code/game/objects/items/teleportation.dm index 38a8195319357..04f5a0688db82 100644 --- a/code/game/objects/items/teleportation.dm +++ b/code/game/objects/items/teleportation.dm @@ -134,23 +134,23 @@ . = ..() active_portal_pairs = list() -/obj/item/hand_tele/pre_attack(atom/target, mob/user, params) - if(try_dispel_portal(target, user)) - return TRUE - return ..() - /obj/item/hand_tele/proc/try_dispel_portal(atom/target, mob/user) if(is_parent_of_portal(target)) - qdel(target) - to_chat(user, span_notice("You dispel [target] with \the [src]!")) + to_chat(user, span_notice("You dispel [target] with [src]!")) + var/obj/effect/portal/portal = target + portal.expire() return TRUE return FALSE -/obj/item/hand_tele/afterattack(atom/target, mob/user) - try_dispel_portal(target, user) - . = ..() +/obj/item/hand_tele/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + if(try_dispel_portal(interacting_with, user)) + return ITEM_INTERACT_SUCCESS + return NONE + +/obj/item/hand_tele/ranged_interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + return interact_with_atom(interacting_with, user, modifiers) -/obj/item/hand_tele/pre_attack_secondary(atom/target, mob/user, proximity_flag, click_parameters) +/obj/item/hand_tele/interact_with_atom_secondary(atom/interacting_with, mob/living/user, list/modifiers) var/portal_location = last_portal_location if (isweakref(portal_location)) @@ -159,11 +159,13 @@ if (isnull(portal_location)) to_chat(user, span_warning("[src] flashes briefly. No target is locked in.")) - return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN + return ITEM_INTERACT_BLOCKING try_create_portal_to(user, portal_location) + return ITEM_INTERACT_SUCCESS - return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN +/obj/item/hand_tele/ranged_interact_with_atom_secondary(atom/interacting_with, mob/living/user, list/modifiers) + return interact_with_atom_secondary(interacting_with, user, modifiers) /obj/item/hand_tele/attack_self(mob/user) if (!can_teleport_notifies(user)) @@ -426,9 +428,9 @@ new /obj/effect/temp_visual/teleport_abductor/syndi_teleporter(current_location) new /obj/effect/temp_visual/teleport_abductor/syndi_teleporter(destination) make_bloods(current_location, destination, user) - playsound(current_location, SFX_SPARKS, 50, 1, SHORT_RANGE_SOUND_EXTRARANGE) + playsound(current_location, SFX_PORTAL_ENTER, 50, 1, SHORT_RANGE_SOUND_EXTRARANGE) playsound(destination, 'sound/effects/phasein.ogg', 25, 1, SHORT_RANGE_SOUND_EXTRARANGE) - playsound(destination, SFX_SPARKS, 50, 1, SHORT_RANGE_SOUND_EXTRARANGE) + playsound(destination, SFX_PORTAL_ENTER, 50, 1, SHORT_RANGE_SOUND_EXTRARANGE) /obj/item/syndicate_teleporter/proc/malfunctioning(mob/guy_teleporting, turf/current_location) var/area/current_area = get_area(current_location) @@ -463,9 +465,9 @@ balloon_alert(user, "emergency teleport triggered!") if (!HAS_TRAIT(user, TRAIT_NOBLOOD)) make_bloods(mobloc, emergency_destination, user) - playsound(mobloc, SFX_SPARKS, 50, 1, SHORT_RANGE_SOUND_EXTRARANGE) + playsound(mobloc, SFX_PORTAL_ENTER, 50, 1, SHORT_RANGE_SOUND_EXTRARANGE) playsound(emergency_destination, 'sound/effects/phasein.ogg', 25, 1, SHORT_RANGE_SOUND_EXTRARANGE) - playsound(emergency_destination, SFX_SPARKS, 50, 1, SHORT_RANGE_SOUND_EXTRARANGE) + playsound(emergency_destination, SFX_PORTAL_ENTER, 50, 1, SHORT_RANGE_SOUND_EXTRARANGE) else //We tried to save. We failed. Death time. get_fragged(user, destination) @@ -475,9 +477,9 @@ victim.forceMove(destination) new /obj/effect/temp_visual/teleport_abductor/syndi_teleporter(mobloc) new /obj/effect/temp_visual/teleport_abductor/syndi_teleporter(destination) - playsound(mobloc, SFX_SPARKS, 50, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) - playsound(destination, SFX_SPARKS, 50, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) - playsound(destination, "sound/magic/disintegrate.ogg", 50, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) + playsound(mobloc, SFX_PORTAL_ENTER, 50, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) + playsound(destination, SFX_PORTAL_ENTER, 50, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) + playsound(destination, 'sound/magic/disintegrate.ogg', 50, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) if(!not_holding_tele) to_chat(victim, span_userdanger("You teleport into [destination], [src] tries to save you, but...")) else diff --git a/code/game/objects/items/theft_tools.dm b/code/game/objects/items/theft_tools.dm index 5f0404c342350..e13251fe8e5ea 100644 --- a/code/game/objects/items/theft_tools.dm +++ b/code/game/objects/items/theft_tools.dm @@ -247,13 +247,6 @@ if(ismob(loc)) to_chat(loc, span_warning("[src] is permanently sealed, [sliver] is safely contained.")) -/obj/item/nuke_core_container/supermatter/attackby(obj/item/hemostat/supermatter/tongs, mob/user) - if(istype(tongs)) - //try to load shard into core - load(tongs, user) - else - return ..() - /obj/item/scalpel/supermatter name = "supermatter scalpel" desc = "A scalpel with a fragile tip of condensed hyper-noblium gas, searingly cold to the touch, that can safely shave a sliver off a supermatter crystal." @@ -293,16 +286,17 @@ inhand_icon_state = "supermatter_tongs[sliver ? "_loaded" : null]" return ..() -/obj/item/hemostat/supermatter/afterattack(atom/O, mob/user, proximity) - . = ..() +/obj/item/hemostat/supermatter/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) if(!sliver) - return - if (!proximity) - return - . |= AFTERATTACK_PROCESSED_ITEM - if(ismovable(O) && O != sliver) - Consume(O, user) - return . + return ..() + if (istype(interacting_with, /obj/item/nuke_core_container/supermatter)) + var/obj/item/nuke_core_container/supermatter/container = interacting_with + container.load(src, user) + return ITEM_INTERACT_SUCCESS + if(ismovable(interacting_with) && interacting_with != sliver) + Consume(interacting_with, user) + return ITEM_INTERACT_SUCCESS + return ..() /obj/item/hemostat/supermatter/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum) // no instakill supermatter javelins if(sliver) diff --git a/code/game/objects/items/tools/crowbar.dm b/code/game/objects/items/tools/crowbar.dm index 9bb61e847b72d..c6b0d52cdc1c3 100644 --- a/code/game/objects/items/tools/crowbar.dm +++ b/code/game/objects/items/tools/crowbar.dm @@ -7,6 +7,7 @@ lefthand_file = 'icons/mob/inhands/equipment/tools_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/tools_righthand.dmi' usesound = 'sound/items/crowbar.ogg' + operating_sound = 'sound/items/crowbar_prying.ogg' obj_flags = CONDUCTS_ELECTRICITY slot_flags = ITEM_SLOT_BELT force = 5 @@ -159,8 +160,8 @@ return COMPONENT_NO_DEFAULT_MESSAGE /obj/item/crowbar/power/syndicate - name = "Syndicate jaws of life" - desc = "A pocket sized re-engineered copy of Nanotrasen's standard jaws of life. Can be used to force open airlocks in its crowbar configuration." + name = "jaws of death" + desc = "An improved, faster, and smaller copy of Nanotrasen's standard jaws of life. Can be used to force open airlocks in its crowbar configuration." icon_state = "jaws_syndie" w_class = WEIGHT_CLASS_SMALL toolspeed = 0.5 diff --git a/code/game/objects/items/tools/screwdriver.dm b/code/game/objects/items/tools/screwdriver.dm index 02765122a134d..b9e0d15e69f6e 100644 --- a/code/game/objects/items/tools/screwdriver.dm +++ b/code/game/objects/items/tools/screwdriver.dm @@ -22,6 +22,7 @@ attack_verb_simple = list("stab") hitsound = 'sound/weapons/bladeslice.ogg' usesound = list('sound/items/screwdriver.ogg', 'sound/items/screwdriver2.ogg') + operating_sound = 'sound/items/screwdriver_operating.ogg' tool_behaviour = TOOL_SCREWDRIVER toolspeed = 1 armor_type = /datum/armor/item_screwdriver diff --git a/code/game/objects/items/tools/weldingtool.dm b/code/game/objects/items/tools/weldingtool.dm index 3bdad581866e0..b2b0109c04c88 100644 --- a/code/game/objects/items/tools/weldingtool.dm +++ b/code/game/objects/items/tools/weldingtool.dm @@ -135,6 +135,11 @@ target.cut_overlay(sparks) /obj/item/weldingtool/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + if(!status && interacting_with.is_refillable()) + reagents.trans_to(interacting_with, reagents.total_volume, transferred_by = user) + to_chat(user, span_notice("You empty [src]'s fuel tank into [interacting_with].")) + update_appearance() + return ITEM_INTERACT_SUCCESS if(!ishuman(interacting_with)) return NONE if(user.combat_mode) @@ -155,32 +160,21 @@ if(!use_tool(attacked_humanoid, user, use_delay, volume=50, amount=1)) return ITEM_INTERACT_BLOCKING - item_heal_robotic(attacked_humanoid, user, 15, 0) + attacked_humanoid.item_heal(user, brute_heal = 15, burn_heal = 0, heal_message_brute = "dents", heal_message_burn = "burnt wires", required_bodytype = BODYTYPE_ROBOTIC) return ITEM_INTERACT_SUCCESS -/obj/item/weldingtool/afterattack(atom/attacked_atom, mob/user, proximity) - . = ..() - if(!proximity) +/obj/item/weldingtool/afterattack(atom/target, mob/user, click_parameters) + if(!isOn()) return - - if(isOn() && ismovable(attacked_atom)) - use(1) - var/turf/location = get_turf(user) - location.hotspot_expose(700, 50, 1) - . |= AFTERATTACK_PROCESSED_ITEM - if (!QDELETED(attacked_atom) && isliving(attacked_atom)) // can't ignite something that doesn't exist - var/mob/living/attacked_mob = attacked_atom - if(attacked_mob.ignite_mob()) - message_admins("[ADMIN_LOOKUPFLW(user)] set [key_name_admin(attacked_mob)] on fire with [src] at [AREACOORD(user)]") - user.log_message("set [key_name(attacked_mob)] on fire with [src].", LOG_ATTACK) - - if(!status && attacked_atom.is_refillable()) - . |= AFTERATTACK_PROCESSED_ITEM - reagents.trans_to(attacked_atom, reagents.total_volume, transferred_by = user) - to_chat(user, span_notice("You empty [src]'s fuel tank into [attacked_atom].")) - update_appearance() - - return . + use(1) + var/turf/location = get_turf(user) + location.hotspot_expose(700, 50, 1) + if(QDELETED(target) || !isliving(target)) // can't ignite something that doesn't exist + return + var/mob/living/attacked_mob = target + if(attacked_mob.ignite_mob()) + message_admins("[ADMIN_LOOKUPFLW(user)] set [key_name_admin(attacked_mob)] on fire with [src] at [AREACOORD(user)]") + user.log_message("set [key_name(attacked_mob)] on fire with [src].", LOG_ATTACK) /obj/item/weldingtool/attack_self(mob/user) if(src.reagents.has_reagent(/datum/reagent/toxin/plasma)) diff --git a/code/game/objects/items/tools/wirecutters.dm b/code/game/objects/items/tools/wirecutters.dm index 06e4e01326894..7f2b11777d8f5 100644 --- a/code/game/objects/items/tools/wirecutters.dm +++ b/code/game/objects/items/tools/wirecutters.dm @@ -24,6 +24,7 @@ attack_verb_simple = list("pinch", "nip") hitsound = 'sound/items/wirecutter.ogg' usesound = 'sound/items/wirecutter.ogg' + operating_sound = 'sound/items/wirecutter_cut.ogg' drop_sound = 'sound/items/handling/wirecutter_drop.ogg' pickup_sound = 'sound/items/handling/wirecutter_pickup.ogg' tool_behaviour = TOOL_WIRECUTTER diff --git a/code/game/objects/items/tools/wrench.dm b/code/game/objects/items/tools/wrench.dm index 8fbb681acfc3a..aa72b5d257ac6 100644 --- a/code/game/objects/items/tools/wrench.dm +++ b/code/game/objects/items/tools/wrench.dm @@ -14,6 +14,7 @@ demolition_mod = 1.25 w_class = WEIGHT_CLASS_SMALL usesound = 'sound/items/ratchet.ogg' + operating_sound = list('sound/items/ratchet_fast.ogg', 'sound/items/ratchet_slow.ogg') custom_materials = list(/datum/material/iron=SMALL_MATERIAL_AMOUNT*1.5) drop_sound = 'sound/items/handling/wrench_drop.ogg' pickup_sound = 'sound/items/handling/wrench_pickup.ogg' diff --git a/code/game/objects/items/toys.dm b/code/game/objects/items/toys.dm index d5e09ee8a745c..1c82bffbf7c7e 100644 --- a/code/game/objects/items/toys.dm +++ b/code/game/objects/items/toys.dm @@ -51,21 +51,21 @@ /obj/item/toy/waterballoon/attack(mob/living/carbon/human/M, mob/user) return -/obj/item/toy/waterballoon/afterattack(atom/A as mob|obj, mob/user, proximity) - . = ..() - if(!proximity) - return - if (istype(A, /obj/structure/reagent_dispensers)) - var/obj/structure/reagent_dispensers/RD = A - if(RD.reagents.total_volume <= 0) - to_chat(user, span_warning("[RD] is empty.")) - else if(reagents.total_volume >= 10) - to_chat(user, span_warning("[src] is full.")) - else - A.reagents.trans_to(src, 10, transferred_by = user) - to_chat(user, span_notice("You fill the balloon with the contents of [A].")) - desc = "A translucent balloon with some form of liquid sloshing around in it." - update_appearance() +/obj/item/toy/waterballoon/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + if (!istype(interacting_with, /obj/structure/reagent_dispensers)) + return NONE + var/obj/structure/reagent_dispensers/RD = interacting_with + if(RD.reagents.total_volume <= 0) + to_chat(user, span_warning("[RD] is empty.")) + else if(reagents.total_volume >= 10) + to_chat(user, span_warning("[src] is full.")) + else + interacting_with.reagents.trans_to(src, 10, transferred_by = user) + to_chat(user, span_notice("You fill the balloon with the contents of [interacting_with].")) + desc = "A translucent balloon with some form of liquid sloshing around in it." + update_appearance() + return ITEM_INTERACT_SUCCESS + return ITEM_INTERACT_BLOCKING /obj/item/toy/waterballoon/attackby(obj/item/I, mob/user, params) if(istype(I, /obj/item/reagent_containers/cup)) @@ -127,10 +127,6 @@ throw_range = 7 force = 0 var/random_color = TRUE - /// the string of the dmi state the balloon has while on the floor. - var/world_state - /// the string of the dmi state the balloon has while in your inventory. - var/storage_state /// the string describing the name of balloon's current colour. var/current_color @@ -159,13 +155,6 @@ list("orange", "purple") = /obj/item/toy/balloon_animal/plasmaman, ) -/obj/item/toy/balloon/Moved(atom/old_loc, movement_dir, forced, list/old_locs, momentum_change) - . = ..() - if(isturf(loc)) - icon_state = "[world_state]" - else - icon_state = "[storage_state]" - update_appearance() /obj/item/toy/balloon/long/attackby(obj/item/attacking_item, mob/living/user, params) if(!istype(attacking_item, /obj/item/toy/balloon/long) || !HAS_TRAIT(user, TRAIT_BALLOON_SUTRA)) @@ -217,14 +206,30 @@ /obj/item/toy/balloon/Initialize(mapload) . = ..() - if(random_color) - var/chosen_balloon_color = pick(BALLOON_COLORS) - current_color = "[chosen_balloon_color]" - name = "[chosen_balloon_color] [name]" - icon_state = "[icon_state]_[chosen_balloon_color]" - inhand_icon_state = icon_state - world_state = "[icon_state]" - storage_state = "[icon_state]_storage" + AddElement(/datum/element/update_icon_updates_onmob) + if(!random_color) + return + current_color = pick(BALLOON_COLORS) + update_appearance() + +/obj/item/toy/balloon/update_name(updates) + . = ..() + name = "[current_color ? "[current_color] ":null][initial(name)]" + +/obj/item/toy/balloon/vv_edit_var(vname, vval) + . = ..() + if(vname == NAMEOF(src, current_color)) + update_appearance() + +/obj/item/toy/balloon/update_icon_state() + . = ..() + var/new_icon = "[initial(icon_state)][current_color ? "_[current_color]":null]" + inhand_icon_state = new_icon + icon_state = "[new_icon][isturf(loc) ? null : "_storage"]" + +/obj/item/toy/balloon/Moved(atom/old_loc, movement_dir, forced, list/old_locs, momentum_change) + . = ..() + update_appearance() /obj/item/toy/balloon/corgi name = "corgi balloon" @@ -280,7 +285,9 @@ name = "balloon animal" desc = "You shouldn't have this." icon = 'icons/obj/toys/balloons.dmi' - icon_state = "balloon_guy" + inhand_icon_state = "balloon" + lefthand_file = 'icons/mob/inhands/items/balloons_lefthand.dmi' + righthand_file = 'icons/mob/inhands/items/balloons_righthand.dmi' throwforce = 0 throw_speed = 2 throw_range = 5 @@ -517,23 +524,21 @@ else return ..() -/obj/item/toy/gun/afterattack(atom/target as mob|obj|turf|area, mob/user, flag) - . = ..() - if (flag) - return - if (!ISADVANCEDTOOLUSER(user)) +/obj/item/toy/gun/ranged_interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + if(!ISADVANCEDTOOLUSER(user)) to_chat(user, span_warning("You don't have the dexterity to do this!")) - return + return ITEM_INTERACT_BLOCKING src.add_fingerprint(user) if (src.bullets < 1) user.show_message(span_warning("*click*"), MSG_AUDIBLE) playsound(src, 'sound/weapons/gun/revolver/dry_fire.ogg', 30, TRUE) - return + return ITEM_INTERACT_SUCCESS playsound(user, 'sound/weapons/gun/revolver/shot.ogg', 100, TRUE) src.bullets-- - user.visible_message(span_danger("[user] fires [src] at [target]!"), \ - span_danger("You fire [src] at [target]!"), \ + user.visible_message(span_danger("[user] fires [src] at [interacting_with]!"), \ + span_danger("You fire [src] at [interacting_with]!"), \ span_hear("You hear a gunshot!")) + return ITEM_INTERACT_SUCCESS /obj/item/toy/ammo/gun name = "capgun ammo" @@ -1048,11 +1053,9 @@ throwforce = 20 //the same damage as a disabler shot damtype = STAMINA //maybe someday we can add stuffing rocks (or perhaps ore?) into snowballs to make them deal brute damage -/obj/item/toy/snowball/afterattack(atom/target as mob|obj|turf|area, mob/user) - . = ..() - . |= AFTERATTACK_PROCESSED_ITEM - if(user.dropItemToGround(src)) - throw_at(target, throw_range, throw_speed) +/obj/item/toy/snowball/ranged_interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + user.throw_item(interacting_with) + return ITEM_INTERACT_SUCCESS /obj/item/toy/snowball/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum) if(!..()) @@ -1064,7 +1067,7 @@ */ /obj/item/toy/beach_ball name = "beach ball" - icon = 'icons/misc/beach.dmi' + icon = 'icons/obj/fluff/beach.dmi' icon_state = "ball" inhand_icon_state = "beachball" w_class = WEIGHT_CLASS_BULKY //Stops people from hiding it in their bags/pockets @@ -1204,6 +1207,11 @@ icon_state = "bartender" toysay = "Where is Pun Pun?" +/obj/item/toy/figure/bitrunner + name = "\improper Bitrunner action figure" + icon_state = "bitrunner" + toysay = "I'm in..." + /obj/item/toy/figure/borg name = "\improper Cyborg action figure" icon_state = "borg" @@ -1414,7 +1422,7 @@ /obj/item/toy/seashell name = "seashell" desc = "May you always have a shell in your pocket and sand in your shoes. Whatever that's supposed to mean." - icon = 'icons/misc/beach.dmi' + icon = 'icons/obj/fluff/beach.dmi' icon_state = "shell1" var/static/list/possible_colors = list("" = 2, COLOR_PURPLE_GRAY = 1, COLOR_OLIVE = 1, COLOR_PALE_BLUE_GRAY = 1, COLOR_RED_GRAY = 1) diff --git a/code/game/objects/items/v8_engine.dm b/code/game/objects/items/v8_engine.dm index c3e5f31146184..c75f1ebc13af5 100644 --- a/code/game/objects/items/v8_engine.dm +++ b/code/game/objects/items/v8_engine.dm @@ -70,34 +70,33 @@ AddComponent(/datum/component/two_handed, force_unwielded = 12, force_wielded = 22, attacksound = active_hitsound) RegisterSignals(src, list(COMSIG_ITEM_DROPPED, COMSIG_MOVABLE_PRE_THROW, COMSIG_ITEM_ATTACK_SELF), PROC_REF(reset_charges)) -/obj/item/house_edge/afterattack(atom/target, mob/user, proximity_flag, click_parameters) - . = ..() +/obj/item/house_edge/afterattack(atom/target, mob/user, click_parameters) if(!ismob(target)) return if(HAS_TRAIT(src, TRAIT_WIELDED)) //Add a fire charge to a max of 3, updates icon_state. fire_charges = clamp((fire_charges + 1), HOUSE_EDGE_ICONS_MIN, HOUSE_EDGE_ICONS_MAX) - icon_state = "house_edge[fire_charges]" COOLDOWN_RESET(src, fire_charge_cooldown) else //Lose a fire charge to a min of 0, updates icon_state. fire_charges = clamp((fire_charges - 1), HOUSE_EDGE_ICONS_MIN, HOUSE_EDGE_ICONS_MAX) - icon_state = "house_edge[fire_charges]" do_sparks(number = 0, cardinal_only = TRUE, source = src) + update_appearance(UPDATE_ICON_STATE) -/obj/item/house_edge/afterattack_secondary(atom/target, mob/user, proximity_flag, click_parameters) +/obj/item/house_edge/ranged_interact_with_atom_secondary(atom/interacting_with, mob/living/user, list/modifiers) if(!COOLDOWN_FINISHED(src, fire_charge_cooldown)) - return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN + return ITEM_INTERACT_BLOCKING if(fire_charges <= 0) balloon_alert(user, "no fire charges!") - return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN - user.throw_at(target = get_turf(target), range = 2 * fire_charges, speed = 5, thrower = user, spin = FALSE, gentle = FALSE, quickstart = TRUE) + return ITEM_INTERACT_BLOCKING + user.throw_at(target = get_turf(interacting_with), range = 2 * fire_charges, speed = 5, thrower = user, spin = FALSE, gentle = FALSE, quickstart = TRUE) COOLDOWN_START(src, fire_charge_cooldown, DASH_COOLDOWN) reset_charges(on_dash = TRUE) - return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN + return ITEM_INTERACT_SUCCESS /obj/item/house_edge/update_icon_state() inhand_icon_state = HAS_TRAIT(src, TRAIT_WIELDED) ? "house_edge1" : "house_edge0" + icon_state = "house_edge[fire_charges]" return ..() /obj/item/house_edge/proc/reset_charges(on_dash = FALSE) diff --git a/code/game/objects/items/virgin_mary.dm b/code/game/objects/items/virgin_mary.dm index b0446abadbdfd..46264dc281458 100644 --- a/code/game/objects/items/virgin_mary.dm +++ b/code/game/objects/items/virgin_mary.dm @@ -1,7 +1,7 @@ /obj/item/virgin_mary name = "\proper a picture of the virgin mary" desc = "A small, cheap icon depicting the virgin mother." - icon = 'icons/obj/blackmarket.dmi' + icon = 'icons/obj/devices/blackmarket.dmi' icon_state = "madonna" resistance_flags = FLAMMABLE ///Has this item been used already. diff --git a/code/game/objects/items/weaponry.dm b/code/game/objects/items/weaponry.dm index f7717da19e795..3eea2400aa24f 100644 --- a/code/game/objects/items/weaponry.dm +++ b/code/game/objects/items/weaponry.dm @@ -505,9 +505,88 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301 attack_verb_continuous = list("bludgeons", "whacks", "disciplines", "thrashes") attack_verb_simple = list("bludgeon", "whack", "discipline", "thrash") +/obj/item/cane/examine(mob/user, thats) + . = ..() + . += span_notice("This item can be used to support your weight, preventing limping from any broken bones on your legs you may have.") + +/obj/item/cane/equipped(mob/living/user, slot, initial) + ..() + if(!(slot & ITEM_SLOT_HANDS)) + return + movement_support_add(user) + +/obj/item/cane/dropped(mob/living/user, silent = FALSE) + . = ..() + movement_support_del(user) + +/obj/item/cane/proc/movement_support_add(mob/living/user) + RegisterSignal(user, COMSIG_CARBON_LIMPING, PROC_REF(handle_limping)) + return TRUE + +/obj/item/cane/proc/movement_support_del(mob/living/user) + UnregisterSignal(user, list(COMSIG_CARBON_LIMPING)) + return TRUE + +/obj/item/cane/proc/handle_limping(mob/living/user) + SIGNAL_HANDLER + return COMPONENT_CANCEL_LIMP + +/obj/item/cane/crutch + name = "medical crutch" + desc = "A medical crutch used by people missing a leg. Not all that useful if you're missing both of them, though." + icon = 'icons/obj/weapons/staff.dmi' + icon_state = "crutch_med" + inhand_icon_state = "crutch_med" + lefthand_file = 'icons/mob/inhands/weapons/melee_lefthand.dmi' + righthand_file = 'icons/mob/inhands/weapons/melee_righthand.dmi' + force = 12 + throwforce = 8 + w_class = WEIGHT_CLASS_BULKY + custom_materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 0.5) + attack_verb_continuous = list("bludgeons", "whacks", "thrashes") + attack_verb_simple = list("bludgeon", "whack", "thrash") + +/obj/item/cane/crutch/examine(mob/user, thats) + . = ..() + // tacked on after the cane string + . += span_notice("As a crutch, it can also help lessen the slowdown incurred by missing a leg.") + +/obj/item/cane/crutch/movement_support_add(mob/living/user) + . = ..() + if(!.) + return + RegisterSignal(user, COMSIG_LIVING_LIMBLESS_SLOWDOWN, PROC_REF(handle_slowdown)) + user.update_usable_leg_status() + user.AddElementTrait(TRAIT_WADDLING, REF(src), /datum/element/waddling) + +/obj/item/cane/crutch/movement_support_del(mob/living/user) + . = ..() + if(!.) + return + UnregisterSignal(user, list(COMSIG_LIVING_LIMBLESS_SLOWDOWN, COMSIG_CARBON_LIMPING)) + user.update_usable_leg_status() + REMOVE_TRAIT(user, TRAIT_WADDLING, REF(src)) + +/obj/item/cane/crutch/proc/handle_slowdown(mob/living/user, limbless_slowdown, list/slowdown_mods) + SIGNAL_HANDLER + var/leg_amount = user.usable_legs + // Don't do anything if the number is equal (or higher) to the usual. + if(leg_amount >= user.default_num_legs) + return + // If we have at least one leg and it's less than the default, reduce slowdown by 60%. + if(leg_amount && (leg_amount < user.default_num_legs)) + slowdown_mods += 0.4 + +/obj/item/cane/crutch/wood + name = "wooden crutch" + desc = "A handmade crutch. Also makes a decent bludgeon if you need it." + icon_state = "crutch_wood" + inhand_icon_state = "crutch_wood" + custom_materials = list(/datum/material/wood = SMALL_MATERIAL_AMOUNT * 0.5) + /obj/item/cane/white name = "white cane" - desc = "A cane traditionally used by the blind to help them see. Folds down to be easier to transport." + desc = "Traditionally used by the blind to help them see. Folds down to be easier to transport." icon_state = "cane_white" inhand_icon_state = "cane_white" lefthand_file = 'icons/mob/inhands/weapons/melee_lefthand.dmi' @@ -530,6 +609,9 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301 RegisterSignal(src, COMSIG_TRANSFORMING_ON_TRANSFORM, PROC_REF(on_transform)) ADD_TRAIT(src, TRAIT_BLIND_TOOL, INNATE_TRAIT) +/obj/item/cane/white/handle_limping(mob/living/user) + return HAS_TRAIT(src, TRAIT_TRANSFORM_ACTIVE) ? COMPONENT_CANCEL_LIMP : NONE + /* * Signal proc for [COMSIG_TRANSFORMING_ON_TRANSFORM]. * @@ -636,7 +718,7 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301 /obj/item/melee/skateboard name = "skateboard" desc = "A skateboard. It can be placed on its wheels and ridden, or used as a radical weapon." - icon = 'icons/obj/vehicles.dmi' + icon = 'icons/mob/rideables/vehicles.dmi' icon_state = "skateboard_held" inhand_icon_state = "skateboard" force = 12 @@ -869,15 +951,11 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301 )) -/obj/item/melee/flyswatter/afterattack(atom/target, mob/user, proximity_flag) - . = ..() - if(!proximity_flag || HAS_TRAIT(user, TRAIT_PACIFISM)) - return - +/obj/item/melee/flyswatter/afterattack(atom/target, mob/user, click_parameters) if(is_type_in_typecache(target, splattable)) - new /obj/effect/decal/cleanable/insectguts(target.drop_location()) to_chat(user, span_warning("You easily splat [target].")) if(isliving(target)) + new /obj/effect/decal/cleanable/insectguts(target.drop_location()) var/mob/living/bug = target bug.investigate_log("has been splatted by a flyswatter.", INVESTIGATE_DEATHS) bug.gib(DROP_ALL_REMAINS) @@ -1007,24 +1085,18 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301 if(prob(final_block_chance * (HAS_TRAIT(src, TRAIT_WIELDED) ? 2 : 1))) owner.visible_message(span_danger("[owner] parries [attack_text] with [src]!")) return TRUE + return FALSE -/obj/item/highfrequencyblade/attack(mob/living/target, mob/living/user, params) - if(!HAS_TRAIT(src, TRAIT_WIELDED) || HAS_TRAIT(src, TRAIT_PACIFISM)) - return ..() - slash(target, user, params) - -/obj/item/highfrequencyblade/attack_atom(atom/target, mob/living/user, params) - if(HAS_TRAIT(src, TRAIT_WIELDED)) - return - return ..() - -/obj/item/highfrequencyblade/afterattack(atom/target, mob/user, proximity_flag, params) +/obj/item/highfrequencyblade/pre_attack(atom/A, mob/living/user, params) + . = ..() + if(.) + return . if(!HAS_TRAIT(src, TRAIT_WIELDED)) - return ..() - if(!proximity_flag || !(isclosedturf(target) || isitem(target) || ismachinery(target) || isstructure(target) || isvehicle(target))) - return - slash(target, user, params) - return AFTERATTACK_PROCESSED_ITEM + return . // Default attack + if(isliving(A) && HAS_TRAIT(src, TRAIT_PACIFISM)) + return . // Default attack (ultimately nothing) + + return slash(A, user, params) /// triggered on wield of two handed item /obj/item/highfrequencyblade/proc/on_wield(obj/item/source, mob/user) @@ -1059,14 +1131,19 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301 living_target.investigate_log("has been gibbed by [src].", INVESTIGATE_DEATHS) living_target.gib(DROP_ALL_REMAINS) log_combat(user, living_target, "gibbed", src) + return TRUE else if(target.uses_integrity) target.take_damage(force*damage_mod*3, BRUTE, MELEE, FALSE, null, 50) + return TRUE else if(iswallturf(target) && prob(force*damage_mod*0.5)) var/turf/closed/wall/wall_target = target wall_target.dismantle_wall() + return TRUE else if(ismineralturf(target) && prob(force*damage_mod)) var/turf/closed/mineral/mineral_target = target mineral_target.gets_drilled() + return TRUE + return FALSE /obj/effect/temp_visual/slash icon_state = "highfreq_slash" diff --git a/code/game/objects/items/wizard_weapons.dm b/code/game/objects/items/wizard_weapons.dm index 8c2677d3ee35b..34676e18bf02d 100644 --- a/code/game/objects/items/wizard_weapons.dm +++ b/code/game/objects/items/wizard_weapons.dm @@ -39,9 +39,6 @@ icon_state = "[base_icon_state]0" return ..() -/obj/item/singularityhammer/proc/recharge() - charged = TRUE - /obj/item/singularityhammer/proc/vortex(turf/pull, mob/wielder) for(var/atom/X in orange(5,pull)) if(ismovable(X)) @@ -59,22 +56,19 @@ step_towards(A,pull) step_towards(A,pull) -/obj/item/singularityhammer/afterattack(atom/A as mob|obj|turf|area, mob/living/user, proximity) - . = ..() - if(!proximity) +/obj/item/singularityhammer/afterattack(atom/target, mob/user, click_parameters) + if(!HAS_TRAIT(src, TRAIT_WIELDED)) return - . |= AFTERATTACK_PROCESSED_ITEM - if(HAS_TRAIT(src, TRAIT_WIELDED)) - if(charged) - charged = FALSE - if(isliving(A)) - var/mob/living/Z = A - Z.take_bodypart_damage(20,0) - playsound(user, 'sound/weapons/marauder.ogg', 50, TRUE) - var/turf/target = get_turf(A) - vortex(target,user) - addtimer(CALLBACK(src, PROC_REF(recharge)), 10 SECONDS) - return . + if(!charged) + return + + charged = FALSE + if(isliving(target)) + var/mob/living/smacked = target + smacked.take_bodypart_damage(20, 0) + playsound(user, 'sound/weapons/marauder.ogg', 50, TRUE) + vortex(get_turf(target), user) + addtimer(VARSET_CALLBACK(src, charged, TRUE), 10 SECONDS) /obj/item/mjollnir name = "Mjollnir" diff --git a/code/game/objects/items_reskin.dm b/code/game/objects/items_reskin.dm index 1a7c27e098d32..9fa3b91d0e198 100644 --- a/code/game/objects/items_reskin.dm +++ b/code/game/objects/items_reskin.dm @@ -11,12 +11,41 @@ INVOKE_ASYNC(src, PROC_REF(reskin_obj), user) return CLICK_ACTION_SUCCESS +/** + * Checks if we should set up reskinning, + * by default if unique_reskin is set. + * + * Called on setup_reskinning(). + * Inheritors should override this to add their own checks. + */ +/obj/item/proc/check_setup_reskinning() + SHOULD_CALL_PARENT(TRUE) + if(unique_reskin) + return TRUE + + return FALSE + +/** + * Registers signals and context for reskinning, + * if check_setup_reskinning() passes. + * + * Called on Initialize(...). + * Inheritors should override this to add their own setup steps, + * or to avoid double calling register_context(). + */ +/obj/item/proc/setup_reskinning() + SHOULD_CALL_PARENT(FALSE) + if(!check_setup_reskinning()) + return + + RegisterSignal(src, COMSIG_CLICK_ALT, PROC_REF(on_click_alt_reskin)) + register_context() /** * Reskins object based on a user's choice * * Arguments: - * * M The mob choosing a reskin option + * * user The mob choosing a reskin option */ /obj/item/proc/reskin_obj(mob/user) if(!LAZYLEN(unique_reskin)) diff --git a/code/game/objects/obj_defense.dm b/code/game/objects/obj_defense.dm index 9ebcbb253d20b..d07f7ad21c5f5 100644 --- a/code/game/objects/obj_defense.dm +++ b/code/game/objects/obj_defense.dm @@ -132,6 +132,7 @@ take_damage(clamp(0.02 * exposed_temperature, 0, 20), BURN, FIRE, 0) if(!(resistance_flags & ON_FIRE) && (resistance_flags & FLAMMABLE) && !(resistance_flags & FIRE_PROOF)) AddComponent(/datum/component/burning, custom_fire_overlay || GLOB.fire_overlay, burning_particles) + SEND_SIGNAL(src, COMSIG_ATOM_FIRE_ACT, exposed_temperature, exposed_volume) return TRUE return ..() diff --git a/code/game/objects/structures.dm b/code/game/objects/structures.dm index 3d976b72ccabc..ff6e6e171bb06 100644 --- a/code/game/objects/structures.dm +++ b/code/game/objects/structures.dm @@ -19,16 +19,16 @@ /obj/structure/Initialize(mapload) . = ..() - if(smoothing_flags & (SMOOTH_CORNERS|SMOOTH_BITMASK)) + if(smoothing_flags & USES_SMOOTHING) QUEUE_SMOOTH(src) QUEUE_SMOOTH_NEIGHBORS(src) if(smoothing_flags & SMOOTH_CORNERS) icon_state = "" GLOB.cameranet.updateVisibility(src) -/obj/structure/Destroy() +/obj/structure/Destroy(force) GLOB.cameranet.updateVisibility(src) - if(smoothing_flags & (SMOOTH_CORNERS|SMOOTH_BITMASK)) + if(smoothing_flags & USES_SMOOTHING) QUEUE_SMOOTH_NEIGHBORS(src) return ..() diff --git a/code/game/objects/structures/ai_core.dm b/code/game/objects/structures/ai_core.dm index 6207a4031c105..5c219aaa4a946 100644 --- a/code/game/objects/structures/ai_core.dm +++ b/code/game/objects/structures/ai_core.dm @@ -12,6 +12,8 @@ var/datum/ai_laws/laws var/obj/item/circuitboard/aicore/circuit var/obj/item/mmi/core_mmi + /// only used in cases of AIs piloting mechs or shunted malf AIs, possible later use cases + var/mob/living/silicon/ai/remote_ai = null /obj/structure/ai_core/Initialize(mapload) . = ..() @@ -58,11 +60,20 @@ update_appearance() /obj/structure/ai_core/Destroy() + if(istype(remote_ai)) + remote_ai.break_core_link() + remote_ai = null QDEL_NULL(circuit) QDEL_NULL(core_mmi) QDEL_NULL(laws) return ..() +/obj/structure/ai_core/take_damage(damage_amount, damage_type, damage_flag, sound_effect, attack_dir, armour_penetration) + . = ..() + if(. > 0 && istype(remote_ai)) + to_chat(remote_ai, span_danger("Your core is under attack!")) + + /obj/structure/ai_core/deactivated icon_state = "ai-empty" anchored = TRUE @@ -157,6 +168,8 @@ return ITEM_INTERACT_SUCCESS /obj/structure/ai_core/attackby(obj/item/tool, mob/living/user, params) + if(remote_ai) + to_chat(remote_ai, span_danger("CORE TAMPERING DETECTED!")) if(!anchored) if(tool.tool_behaviour == TOOL_WELDER) if(state != EMPTY_CORE) @@ -295,8 +308,17 @@ if(tool.tool_behaviour == TOOL_CROWBAR && core_mmi) tool.play_tool_sound(src) balloon_alert(user, "removed [AI_CORE_BRAIN(core_mmi)]") - core_mmi.forceMove(loc) - return + if(remote_ai) + var/mob/living/silicon/ai/remoted_ai = remote_ai + remoted_ai.break_core_link() + if(!IS_MALF_AI(remoted_ai)) + //don't pull back shunted malf AIs + remoted_ai.death(gibbed = TRUE, drop_mmi = FALSE) + ///the drop_mmi param determines whether the MMI is dropped at their current location + ///which in this case would be somewhere else, so we drop their MMI at the core instead + remoted_ai.make_mmi_drop_and_transfer(core_mmi, src) + core_mmi.forceMove(loc) //if they're malf, just drops a blank MMI, or if it's an incomplete shell + return //it drops the mmi that was put in before it was finished if(GLASS_CORE) if(tool.tool_behaviour == TOOL_CROWBAR) diff --git a/code/game/objects/structures/aliens.dm b/code/game/objects/structures/aliens.dm index 6d8e8ca701e3a..f0c855e7c74d9 100644 --- a/code/game/objects/structures/aliens.dm +++ b/code/game/objects/structures/aliens.dm @@ -276,6 +276,10 @@ //we are the parent node parent_node = src + return INITIALIZE_HINT_LATELOAD + +// we do this in LateInitialize() because weeds on the same loc may not be done initializing yet (as in create_and_destroy) +/obj/structure/alien/weeds/node/LateInitialize() //destroy any non-node weeds on turf var/obj/structure/alien/weeds/check_weed = locate(/obj/structure/alien/weeds) in loc if(check_weed && check_weed != src) diff --git a/code/game/objects/structures/beds_chairs/bed.dm b/code/game/objects/structures/beds_chairs/bed.dm index 0e3845d2efa7f..4cfd6355eb0b2 100644 --- a/code/game/objects/structures/beds_chairs/bed.dm +++ b/code/game/objects/structures/beds_chairs/bed.dm @@ -218,13 +218,12 @@ /obj/item/emergency_bed/attack_self(mob/user) deploy_bed(user, user.loc) -/obj/item/emergency_bed/afterattack(obj/target, mob/user, proximity) - . = ..() - if(!proximity) - return +/obj/item/emergency_bed/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + if(isopenturf(interacting_with)) + deploy_bed(user, interacting_with) + return ITEM_INTERACT_SUCCESS + return NONE - if(isopenturf(target)) - deploy_bed(user, target) /obj/item/emergency_bed/proc/deploy_bed(mob/user, atom/location) var/obj/structure/bed/medical/emergency/deployed = new /obj/structure/bed/medical/emergency(location) @@ -273,6 +272,11 @@ name = "Cayenne's bed" anchored = TRUE +/obj/structure/bed/dogbed/misha + desc = "There is fur all over it, and some blood..." + name = "Misha's bed" + anchored = TRUE + /obj/structure/bed/dogbed/lia desc = "Seems kind of... fishy." name = "Lia's bed" diff --git a/code/game/objects/structures/beds_chairs/chair.dm b/code/game/objects/structures/beds_chairs/chair.dm index 4e86db314279b..1783d4b236a63 100644 --- a/code/game/objects/structures/beds_chairs/chair.dm +++ b/code/game/objects/structures/beds_chairs/chair.dm @@ -11,6 +11,8 @@ integrity_failure = 0.1 custom_materials = list(/datum/material/iron =SHEET_MATERIAL_AMOUNT) layer = OBJ_LAYER + interaction_flags_mouse_drop = ALLOW_RESTING + var/buildstacktype = /obj/item/stack/sheet/iron var/buildstackamount = 1 var/item_chair = /obj/item/chair // if null it can't be picked up @@ -261,18 +263,15 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/chair/stool, 0) /obj/structure/chair/stool/narsie_act() return -/obj/structure/chair/MouseDrop(over_object, src_location, over_location) - . = ..() - if(over_object == usr && Adjacent(usr)) +/obj/structure/chair/mouse_drop_dragged(atom/over_object, mob/user, src_location, over_location, params) + if(over_object == user) if(!item_chair || has_buckled_mobs()) return - if(!usr.can_perform_action(src, NEED_DEXTERITY|NEED_HANDS)) - return - usr.visible_message(span_notice("[usr] grabs \the [src.name]."), span_notice("You grab \the [src.name].")) + user.visible_message(span_notice("[user] grabs \the [src.name]."), span_notice("You grab \the [src.name].")) var/obj/item/C = new item_chair(loc) C.set_custom_materials(custom_materials) TransferComponents(C) - usr.put_in_hands(C) + user.put_in_hands(C) qdel(src) /obj/structure/chair/user_buckle_mob(mob/living/M, mob/user, check_loc = TRUE) @@ -368,17 +367,15 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/chair/stool/bar, 0) return TRUE return FALSE -/obj/item/chair/afterattack(atom/target, mob/living/carbon/user, proximity) - . = ..() - if(!proximity) +/obj/item/chair/afterattack(atom/target, mob/user, click_parameters) + if(!prob(break_chance)) return - if(prob(break_chance)) - user.visible_message(span_danger("[user] smashes \the [src] to pieces against \the [target]")) - if(iscarbon(target)) - var/mob/living/carbon/C = target - if(C.health < C.maxHealth*0.5) - C.Paralyze(20) - smash(user) + user.visible_message(span_danger("[user] smashes [src] to pieces against [target]")) + if(iscarbon(target)) + var/mob/living/carbon/C = target + if(C.health < C.maxHealth*0.5) + C.Paralyze(20) + smash(user) /obj/item/chair/greyscale material_flags = MATERIAL_EFFECTS | MATERIAL_ADD_PREFIX | MATERIAL_COLOR | MATERIAL_AFFECT_STATISTICS @@ -440,7 +437,6 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/chair/stool/bar, 0) buildstacktype = /obj/item/stack/sheet/bronze buildstackamount = 1 item_chair = null - interaction_flags_click = NEED_DEXTERITY /// Total rotations made var/turns = 0 diff --git a/code/game/objects/structures/bedsheet_bin.dm b/code/game/objects/structures/bedsheet_bin.dm index 32ed0d14d873b..a843c3e3e4bff 100644 --- a/code/game/objects/structures/bedsheet_bin.dm +++ b/code/game/objects/structures/bedsheet_bin.dm @@ -12,6 +12,8 @@ LINEN BINS righthand_file = 'icons/mob/inhands/items/bedsheet_righthand.dmi' icon_state = "sheetwhite" inhand_icon_state = "sheetwhite" + drop_sound = 'sound/items/handling/cloth_drop.ogg' + pickup_sound = 'sound/items/handling/cloth_pickup.ogg' slot_flags = ITEM_SLOT_NECK layer = BELOW_MOB_LAYER throwforce = 0 @@ -57,20 +59,38 @@ LINEN BINS return NONE -/obj/item/bedsheet/attack_secondary(mob/living/target, mob/living/user, params) - if(!user.CanReach(target)) - return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN - if(target.body_position != LYING_DOWN) - return ..() +/obj/item/bedsheet/interact_with_atom_secondary(atom/interacting_with, mob/living/user, list/modifiers) + if(!isliving(interacting_with)) + return NONE + var/mob/living/to_cover = interacting_with + if(to_cover.body_position != LYING_DOWN) + return ITEM_INTERACT_BLOCKING if(!user.dropItemToGround(src)) - return ..() + return ITEM_INTERACT_BLOCKING - forceMove(get_turf(target)) + forceMove(get_turf(to_cover)) balloon_alert(user, "covered") - coverup(target) + coverup(to_cover) add_fingerprint(user) - return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN + return ITEM_INTERACT_SUCCESS + +/obj/item/bedsheet/item_interaction(mob/living/user, obj/item/tool, list/modifiers) + // Handle wirecutters here so we still tear it up in combat mode + if(tool.tool_behaviour != TOOL_WIRECUTTER && !tool.get_sharpness()) + return NONE + + // We cannot get free cloth from holograms + if(flags_1 & HOLOGRAM_1) + return ITEM_INTERACT_BLOCKING + + var/obj/item/stack/shreds = new stack_type(get_turf(src), stack_amount) + if(!QDELETED(shreds)) // Stacks merged + transfer_fingerprints_to(shreds) + shreds.add_fingerprint(user) + to_chat(user, span_notice("You tear [src] up.")) + qdel(src) + return ITEM_INTERACT_SUCCESS /obj/item/bedsheet/attack_self(mob/living/user) if(!user.CanReach(src)) //No telekinetic grabbing. @@ -83,10 +103,15 @@ LINEN BINS coverup(user) add_fingerprint(user) +/obj/item/bedsheet/click_alt(mob/living/user) + setDir(REVERSE_DIR(dir)) + return CLICK_ACTION_SUCCESS + /obj/item/bedsheet/proc/coverup(mob/living/sleeper) layer = ABOVE_MOB_LAYER pixel_x = 0 pixel_y = 0 + pixel_z = sleeper.pixel_z // Account for possible mob elevation balloon_alert(sleeper, "covered") var/angle = sleeper.lying_prev dir = angle2dir(angle + 180) // 180 flips it to be the same direction as the mob @@ -107,6 +132,7 @@ LINEN BINS balloon_alert(sleeper, "smoothed sheets") layer = initial(layer) SET_PLANE_IMPLICIT(src, initial(plane)) + pixel_z = 0 signal_sleeper = null // We need to do this in case someone picks up a bedsheet while a mob is covered up @@ -120,24 +146,9 @@ LINEN BINS UnregisterSignal(sleeper, COMSIG_MOVABLE_MOVED) UnregisterSignal(sleeper, COMSIG_LIVING_SET_BODY_POSITION) UnregisterSignal(sleeper, COMSIG_QDELETING) + pixel_z = 0 signal_sleeper = null -/obj/item/bedsheet/attackby(obj/item/I, mob/user, params) - if(I.tool_behaviour == TOOL_WIRECUTTER || I.get_sharpness()) - if (!(flags_1 & HOLOGRAM_1)) - var/obj/item/stack/shreds = new stack_type(get_turf(src), stack_amount) - if(!QDELETED(shreds)) //stacks merged - transfer_fingerprints_to(shreds) - shreds.add_fingerprint(user) - qdel(src) - to_chat(user, span_notice("You tear [src] up.")) - else - return ..() - -/obj/item/bedsheet/click_alt(mob/living/user) - dir = REVERSE_DIR(dir) - return CLICK_ACTION_SUCCESS - /obj/item/bedsheet/blue icon_state = "sheetblue" inhand_icon_state = "sheetblue" @@ -565,9 +576,12 @@ LINEN BINS desc = "It looks rather cosy." icon = 'icons/obj/structures.dmi' icon_state = "linenbin-full" + base_icon_state = "linenbin" anchored = TRUE + pass_flags = PASSTABLE resistance_flags = FLAMMABLE max_integrity = 70 + anchored_tabletop_offset = 6 /// The number of bedsheets in the bin var/amount = 10 /// A list of actual sheets within the bin @@ -581,6 +595,10 @@ LINEN BINS anchored = FALSE +/obj/structure/bedsheetbin/Initialize(mapload) + . = ..() + register_context() + /obj/structure/bedsheetbin/examine(mob/user) . = ..() if(amount < 1) @@ -590,15 +608,37 @@ LINEN BINS else . += "There are [amount] bed sheets in the bin." +/obj/structure/bedsheetbin/add_context(atom/source, list/context, obj/item/held_item, mob/living/user) + if(isnull(held_item)) + if(amount) + context[SCREENTIP_CONTEXT_LMB] = "Take bedsheet" + return CONTEXTUAL_SCREENTIP_SET + return + + if(istype(held_item, /obj/item/bedsheet)) + context[SCREENTIP_CONTEXT_LMB] = "Put in" + return CONTEXTUAL_SCREENTIP_SET + + if(held_item.tool_behaviour == TOOL_SCREWDRIVER) + context[SCREENTIP_CONTEXT_RMB] = "Disassemble" + . = CONTEXTUAL_SCREENTIP_SET + else if(held_item.tool_behaviour == TOOL_WRENCH) + context[SCREENTIP_CONTEXT_RMB] = "[anchored ? "Una" : "A"]nchor" + . = CONTEXTUAL_SCREENTIP_SET + + if(amount && held_item.w_class < WEIGHT_CLASS_BULKY) + context[SCREENTIP_CONTEXT_LMB] = "Hide item in" + . = CONTEXTUAL_SCREENTIP_SET + return . /obj/structure/bedsheetbin/update_icon_state() switch(amount) if(0) - icon_state = "linenbin-empty" + icon_state = "[base_icon_state]-empty" if(1 to 5) - icon_state = "linenbin-half" + icon_state = "[base_icon_state]-half" else - icon_state = "linenbin-full" + icon_state = "[base_icon_state]-full" return ..() /obj/structure/bedsheetbin/fire_act(exposed_temperature, exposed_volume) @@ -607,7 +647,7 @@ LINEN BINS update_appearance() ..() -/obj/structure/bedsheetbin/screwdriver_act(mob/living/user, obj/item/tool) +/obj/structure/bedsheetbin/screwdriver_act_secondary(mob/living/user, obj/item/tool) if(amount) to_chat(user, span_warning("The [src] must be empty first!")) return ITEM_INTERACT_SUCCESS @@ -617,27 +657,45 @@ LINEN BINS qdel(src) return ITEM_INTERACT_SUCCESS -/obj/structure/bedsheetbin/wrench_act(mob/living/user, obj/item/tool) +/obj/structure/bedsheetbin/wrench_act_secondary(mob/living/user, obj/item/tool) . = ..() default_unfasten_wrench(user, tool, time = 0.5 SECONDS) return ITEM_INTERACT_SUCCESS -/obj/structure/bedsheetbin/attackby(obj/item/I, mob/user, params) - if(istype(I, /obj/item/bedsheet)) - if(!user.transferItemToLoc(I, src)) - return - sheets.Add(I) - amount++ - to_chat(user, span_notice("You put [I] in [src].")) - update_appearance() +/obj/structure/bedsheetbin/item_interaction(mob/living/user, obj/item/tool, list/modifiers) + if(istype(tool, /obj/item/bedsheet)) + return bedsheet_act(user, tool) - else if(amount && !hidden && I.w_class < WEIGHT_CLASS_BULKY) //make sure there's sheets to hide it among, make sure nothing else is hidden in there. - if(!user.transferItemToLoc(I, src)) - to_chat(user, span_warning("\The [I] is stuck to your hand, you cannot hide it among the sheets!")) - return - hidden = I - to_chat(user, span_notice("You hide [I] among the sheets.")) + // Everything else we try to hide + return hide_item_act(user, tool) +/obj/structure/bedsheetbin/proc/bedsheet_act(mob/living/user, obj/item/tool) + if(!user.transferItemToLoc(tool, src, silent = FALSE)) + return ITEM_INTERACT_BLOCKING + sheets.Add(tool) + amount++ + to_chat(user, span_notice("You put [tool] in [src].")) + update_appearance() + return ITEM_INTERACT_SUCCESS + +/obj/structure/bedsheetbin/proc/hide_item_act(mob/living/user, obj/item/tool) + if(user.combat_mode) + return NONE + if(tool.w_class >= WEIGHT_CLASS_BULKY) + balloon_alert(user, "too big!") + return ITEM_INTERACT_BLOCKING + if(!amount) + balloon_alert(user, "nothing to hide under!") + return ITEM_INTERACT_BLOCKING + if(hidden) + balloon_alert(user, "already something there!") + return ITEM_INTERACT_BLOCKING + if(!user.transferItemToLoc(tool, src, silent = FALSE)) + to_chat(user, span_warning("\The [tool] is stuck to your hand, you cannot hide it among the sheets!")) + return ITEM_INTERACT_BLOCKING + hidden = tool + to_chat(user, span_notice("You hide [tool] among the sheets.")) + return ITEM_INTERACT_SUCCESS /obj/structure/bedsheetbin/attack_paw(mob/user, list/modifiers) return attack_hand(user, modifiers) @@ -696,3 +754,13 @@ LINEN BINS add_fingerprint(user) return COMPONENT_CANCEL_ATTACK_CHAIN + +/obj/structure/bedsheetbin/basket + name = "linen basket" + icon_state = "linenbasket-full" + base_icon_state = "linenbasket" + +/obj/structure/bedsheetbin/empty/basket + name = "linen basket" + icon_state = "linenbasket-empty" + base_icon_state = "linenbasket" diff --git a/code/game/objects/structures/cat_house.dm b/code/game/objects/structures/cat_house.dm index 8baa9ce241601..bfaa464ff6d09 100644 --- a/code/game/objects/structures/cat_house.dm +++ b/code/game/objects/structures/cat_house.dm @@ -1,6 +1,6 @@ /obj/structure/cat_house name = "cat house" - desc = "cozy home for cats" + desc = "Cozy home for cats." icon = 'icons/mob/simple/pets.dmi' icon_state = "cat_house" density = TRUE diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm index acbd7bfa39539..4484e3c512ef3 100644 --- a/code/game/objects/structures/crates_lockers/closets.dm +++ b/code/game/objects/structures/crates_lockers/closets.dm @@ -182,7 +182,7 @@ GLOBAL_LIST_EMPTY(roundstart_station_closets) //USE THIS TO FILL IT, NOT INITIALIZE OR NEW /obj/structure/closet/proc/PopulateContents() - SEND_SIGNAL(src, COMSIG_CLOSET_POPULATE_CONTENTS) + return /// Populate the closet with stuff that needs to be added before it is opened. /// This is useful for things like traitor objectives. @@ -382,7 +382,7 @@ GLOBAL_LIST_EMPTY(roundstart_station_closets) context[SCREENTIP_CONTEXT_RMB] = anchored ? "Unanchor" : "Anchor" screentip_change = TRUE - if(!locked && (welded || !can_weld_shut)) + if(!locked && !opened && (welded || !can_weld_shut)) if(!secure) if(!broken && can_install_electronics && istype(held_item, /obj/item/electronics/airlock)) context[SCREENTIP_CONTEXT_LMB] = "Install Electronics" @@ -399,7 +399,7 @@ GLOBAL_LIST_EMPTY(roundstart_station_closets) screentip_change = TRUE if(!locked && !opened) - if(id_card && istype(held_item, /obj/item/pen)) + if(id_card && IS_WRITING_UTENSIL(held_item)) context[SCREENTIP_CONTEXT_LMB] = "Rename" screentip_change = TRUE if(secure && card_reader_installed && !broken) @@ -452,6 +452,7 @@ GLOBAL_LIST_EMPTY(roundstart_station_closets) if (!contents_initialized) contents_initialized = TRUE PopulateContents() + SEND_SIGNAL(src, COMSIG_CLOSET_CONTENTS_INITIALIZED) var/atom/L = drop_location() for(var/atom/movable/AM in src) @@ -644,7 +645,7 @@ GLOBAL_LIST_EMPTY(roundstart_station_closets) /// check if we can install airlock electronics in this closet /obj/structure/closet/proc/can_install_airlock_electronics(mob/user) - if(secure || !can_install_electronics || !(welded || !can_weld_shut)) + if(secure || !can_install_electronics || opened) return FALSE if(broken) @@ -659,9 +660,11 @@ GLOBAL_LIST_EMPTY(roundstart_station_closets) /// check if we can unscrew airlock electronics from this closet /obj/structure/closet/proc/can_unscrew_airlock_electronics(mob/user) - if(!secure || !(welded || !can_weld_shut)) + if(!secure || opened) + return FALSE + if(card_reader_installed) + balloon_alert(user, "attached to reader!") return FALSE - if(locked) balloon_alert(user, "unlock first!") return FALSE @@ -670,7 +673,7 @@ GLOBAL_LIST_EMPTY(roundstart_station_closets) /// check if we can install card reader in this closet /obj/structure/closet/proc/can_install_card_reader(mob/user) - if(card_reader_installed || !can_install_electronics || !length(access_choices) || !(welded || !can_weld_shut)) + if(card_reader_installed || !can_install_electronics || !length(access_choices) || opened) return FALSE if(broken) @@ -689,7 +692,7 @@ GLOBAL_LIST_EMPTY(roundstart_station_closets) /// check if we can pry out the card reader from this closet /obj/structure/closet/proc/can_pryout_card_reader(mob/user) - if(!card_reader_installed || !(welded || !can_weld_shut)) + if(!card_reader_installed || opened) return FALSE if(locked) @@ -815,7 +818,7 @@ GLOBAL_LIST_EMPTY(roundstart_station_closets) else balloon_alert(user, "set to [choice]") - else if(!opened && istype(weapon, /obj/item/pen)) + else if(!opened && IS_WRITING_UTENSIL(weapon)) if(locked) balloon_alert(user, "unlock first!") return @@ -909,13 +912,9 @@ GLOBAL_LIST_EMPTY(roundstart_station_closets) /obj/structure/closet/proc/after_weld(weld_state) return -/obj/structure/closet/MouseDrop_T(atom/movable/O, mob/living/user) +/obj/structure/closet/mouse_drop_receive(atom/movable/O, mob/living/user, params) if(!istype(O) || O.anchored || istype(O, /atom/movable/screen)) return - if(!istype(user) || user.incapacitated() || user.body_position == LYING_DOWN) - return - if(!Adjacent(user) || !user.Adjacent(O)) - return if(user == O) //try to climb onto it return ..() if(!opened) @@ -949,7 +948,6 @@ GLOBAL_LIST_EMPTY(roundstart_station_closets) log_combat(user, O, "stuffed", addition = "inside of [src]") else O.forceMove(T) - return 1 /obj/structure/closet/relaymove(mob/living/user, direction) if(user.stat || !isturf(loc)) @@ -991,7 +989,7 @@ GLOBAL_LIST_EMPTY(roundstart_station_closets) // tk grab then use on self /obj/structure/closet/attack_self_tk(mob/user) if(attack_hand(user)) - return COMPONENT_CANCEL_ATTACK_CHAIN + return ITEM_INTERACT_BLOCKING /obj/structure/closet/verb/verb_toggleopen() set src in view(1) @@ -1015,7 +1013,7 @@ GLOBAL_LIST_EMPTY(roundstart_station_closets) return FALSE return TRUE -/obj/structure/closet/container_resist_act(mob/living/user) +/obj/structure/closet/container_resist_act(mob/living/user, loc_required = TRUE) if(isstructure(loc)) relay_container_resist_act(user, loc) if(opened) @@ -1040,7 +1038,7 @@ GLOBAL_LIST_EMPTY(roundstart_station_closets) addtimer(CALLBACK(src, PROC_REF(check_if_shake)), 1 SECONDS) if(do_after(user,(breakout_time), target = src)) - if(!user || user.stat != CONSCIOUS || user.loc != src || opened || (!locked && !welded) ) + if(!user || user.stat != CONSCIOUS || (loc_required && (user.loc != src)) || opened || (!locked && !welded) ) return //we check after a while whether there is a point of resisting anymore and whether the user is capable of resisting user.visible_message(span_danger("[user] successfully broke out of [src]!"), diff --git a/code/game/objects/structures/crates_lockers/closets/bodybag.dm b/code/game/objects/structures/crates_lockers/closets/bodybag.dm index 38482fcfd9ba9..ac8b444e47dc7 100644 --- a/code/game/objects/structures/crates_lockers/closets/bodybag.dm +++ b/code/game/objects/structures/crates_lockers/closets/bodybag.dm @@ -47,7 +47,7 @@ return ..() /obj/structure/closet/body_bag/attackby(obj/item/interact_tool, mob/user, params) - if (istype(interact_tool, /obj/item/pen) || istype(interact_tool, /obj/item/toy/crayon)) + if (IS_WRITING_UTENSIL(interact_tool)) if(!user.can_write(interact_tool)) return var/t = tgui_input_text(user, "What would you like the label to be?", name, max_length = 53) @@ -276,7 +276,7 @@ else icon_state = initial(icon_state) -/obj/structure/closet/body_bag/environmental/prisoner/container_resist_act(mob/living/user) +/obj/structure/closet/body_bag/environmental/prisoner/container_resist_act(mob/living/user, loc_required = TRUE) /// copy-pasted with changes because flavor text as well as some other misc stuff if(opened) return diff --git a/code/game/objects/structures/crates_lockers/closets/gimmick.dm b/code/game/objects/structures/crates_lockers/closets/gimmick.dm index fecacd678c7c2..f2171b2e8b1b0 100644 --- a/code/game/objects/structures/crates_lockers/closets/gimmick.dm +++ b/code/game/objects/structures/crates_lockers/closets/gimmick.dm @@ -113,7 +113,7 @@ new /obj/item/clothing/head/helmet/space/nasavoid(src) new /obj/item/clothing/suit/space/nasavoid(src) new /obj/item/crowbar(src) - new /obj/item/stock_parts/cell(src) + new /obj/item/stock_parts/power_store/cell(src) new /obj/item/multitool(src) /obj/structure/closet/mini_fridge diff --git a/code/game/objects/structures/crates_lockers/crates.dm b/code/game/objects/structures/crates_lockers/crates.dm index c44cd0972aad1..baf239284ac2f 100644 --- a/code/game/objects/structures/crates_lockers/crates.dm +++ b/code/game/objects/structures/crates_lockers/crates.dm @@ -140,7 +140,7 @@ for (var/i in 1 to rand(2,6)) new /obj/effect/spawner/random/maintenance(src) - UnregisterSignal(src, COMSIG_CLOSET_POPULATE_CONTENTS) + UnregisterSignal(src, COMSIG_CLOSET_CONTENTS_INITIALIZED) ///Removes the supply manifest from the closet /obj/structure/closet/crate/proc/tear_manifest(mob/user) diff --git a/code/game/objects/structures/curtains.dm b/code/game/objects/structures/curtains.dm new file mode 100644 index 0000000000000..aead6fafb017c --- /dev/null +++ b/code/game/objects/structures/curtains.dm @@ -0,0 +1,156 @@ +/** + * Shower Curtains + */ +/obj/structure/curtain + name = "curtain" + desc = "Contains less than 1% mercury." + icon = 'icons/obj/watercloset.dmi' + icon_state = "bathroom-open" + color = "#ACD1E9" //Default color, didn't bother hardcoding other colors, mappers can and should easily change it. + alpha = 200 //Mappers can also just set this to 255 if they want curtains that can't be seen through + layer = SIGN_LAYER + anchored = TRUE + opacity = FALSE + density = FALSE + /// used in making the icon state + var/icon_type = "bathroom" + var/open = TRUE + /// if it can be seen through when closed + var/opaque_closed = FALSE + +/obj/structure/curtain/Initialize(mapload) + // see-through curtains should let emissives shine through + if(!opaque_closed) + blocks_emissive = EMISSIVE_BLOCK_NONE + return ..() + +/obj/structure/curtain/proc/toggle() + open = !open + if(open) + layer = SIGN_LAYER + set_opacity(FALSE) + else + layer = WALL_OBJ_LAYER + if(opaque_closed) + set_opacity(TRUE) + + update_appearance() + +/obj/structure/curtain/update_icon_state() + icon_state = "[icon_type]-[open ? "open" : "closed"]" + return ..() + +/obj/structure/curtain/attackby(obj/item/W, mob/user) + if (istype(W, /obj/item/toy/crayon)) + color = input(user,"","Choose Color",color) as color + else + return ..() + +/obj/structure/curtain/wrench_act(mob/living/user, obj/item/tool) + . = ..() + default_unfasten_wrench(user, tool, time = 5 SECONDS) + return TRUE + +/obj/structure/curtain/wirecutter_act(mob/living/user, obj/item/I) + ..() + if(anchored) + return TRUE + + user.visible_message(span_warning("[user] cuts apart [src]."), + span_notice("You start to cut apart [src]."), span_hear("You hear cutting.")) + if(I.use_tool(src, user, 50, volume=100) && !anchored) + to_chat(user, span_notice("You cut apart [src].")) + deconstruct() + + return TRUE + + +/obj/structure/curtain/attack_hand(mob/user, list/modifiers) + . = ..() + if(.) + return + playsound(loc, 'sound/effects/curtain.ogg', 50, TRUE) + toggle() + +/obj/structure/curtain/atom_deconstruct(disassembled = TRUE) + new /obj/item/stack/sheet/cloth (loc, 2) + new /obj/item/stack/sheet/plastic (loc, 2) + new /obj/item/stack/rods (loc, 1) + +/obj/structure/curtain/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0) + switch(damage_type) + if(BRUTE) + if(damage_amount) + playsound(src.loc, 'sound/weapons/slash.ogg', 80, TRUE) + else + playsound(loc, 'sound/weapons/tap.ogg', 50, TRUE) + if(BURN) + playsound(loc, 'sound/items/welder.ogg', 80, TRUE) + +/obj/structure/curtain/bounty + icon_type = "bounty" + icon_state = "bounty-open" + color = null + alpha = 255 + opaque_closed = TRUE + +/obj/structure/curtain/bounty/start_closed + icon_state = "bounty-closed" + +/obj/structure/curtain/bounty/start_closed/Initialize(mapload) + . = ..() + if(open) + toggle() + +/obj/structure/curtain/cloth + color = null + alpha = 255 + opaque_closed = TRUE + +/obj/structure/curtain/cloth/atom_deconstruct(disassembled = TRUE) + new /obj/item/stack/sheet/cloth (loc, 4) + new /obj/item/stack/rods (loc, 1) + +/obj/structure/curtain/cloth/fancy + icon_type = "cur_fancy" + icon_state = "cur_fancy-open" + +/obj/structure/curtain/cloth/fancy/mechanical + var/id = null + +/obj/structure/curtain/cloth/fancy/mechanical/Destroy() + GLOB.curtains -= src + return ..() + +/obj/structure/curtain/cloth/fancy/mechanical/Initialize(mapload) + . = ..() + GLOB.curtains += src + +/obj/structure/curtain/cloth/fancy/mechanical/connect_to_shuttle(mapload, obj/docking_port/mobile/port, obj/docking_port/stationary/dock) + id = "[port.shuttle_id]_[id]" + +/obj/structure/curtain/cloth/fancy/mechanical/proc/open() + icon_state = "[icon_type]-open" + layer = SIGN_LAYER + SET_PLANE_IMPLICIT(src, GAME_PLANE) + set_density(FALSE) + open = TRUE + set_opacity(FALSE) + +/obj/structure/curtain/cloth/fancy/mechanical/proc/close() + icon_state = "[icon_type]-closed" + layer = WALL_OBJ_LAYER + set_density(TRUE) + open = FALSE + if(opaque_closed) + set_opacity(TRUE) + +/obj/structure/curtain/cloth/fancy/mechanical/attack_hand(mob/user, list/modifiers) + return + +/obj/structure/curtain/cloth/fancy/mechanical/start_closed + icon_state = "cur_fancy-closed" + +/obj/structure/curtain/cloth/fancy/mechanical/start_closed/Initialize(mapload) + . = ..() + close() diff --git a/code/game/objects/structures/deployable_turret.dm b/code/game/objects/structures/deployable_turret.dm index ac4b35678c9b1..f24df392dedef 100644 --- a/code/game/objects/structures/deployable_turret.dm +++ b/code/game/objects/structures/deployable_turret.dm @@ -51,19 +51,21 @@ /// Undeploying, for when you want to move your big dakka around /obj/machinery/deployable_turret/wrench_act(mob/living/user, obj/item/wrench/used_wrench) - . = ..() if(!can_be_undeployed) - return + return ITEM_INTERACT_SKIP_TO_ATTACK if(!ishuman(user)) - return + return ITEM_INTERACT_SKIP_TO_ATTACK used_wrench.play_tool_sound(user) user.balloon_alert(user, "undeploying...") if(!do_after(user, undeploy_time)) - return - var/obj/undeployed_object = new spawned_on_undeploy(src) + return ITEM_INTERACT_BLOCKING + var/obj/undeployed_object = new spawned_on_undeploy() //Keeps the health the same even if you redeploy the gun undeployed_object.modify_max_integrity(max_integrity) + if(!user.put_in_hands(undeployed_object)) + undeployed_object.forceMove(loc) qdel(src) + return ITEM_INTERACT_SUCCESS //BUCKLE HOOKS @@ -211,7 +213,7 @@ /obj/machinery/deployable_turret/hmg name = "heavy machine gun turret" - desc = "A heavy calibre machine gun commonly used by Nanotrasen forces, famed for it's ability to give people on the recieving end more holes than normal." + desc = "A heavy caliber machine gun commonly used by Nanotrasen forces, famed for it's ability to give people on the receiving end more holes than normal." icon_state = "hmg" max_integrity = 250 projectile_type = /obj/projectile/bullet/manned_turret/hmg @@ -257,11 +259,11 @@ M.attacked_by(src, user) add_fingerprint(user) -/obj/item/gun_control/afterattack(atom/targeted_atom, mob/user, flag, params) - . = ..() - . |= AFTERATTACK_PROCESSED_ITEM - var/modifiers = params2list(params) +/obj/item/gun_control/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) var/obj/machinery/deployable_turret/E = user.buckled - E.calculated_projectile_vars = calculate_projectile_angle_and_pixel_offsets(user, targeted_atom, modifiers) - E.direction_track(user, targeted_atom) - E.checkfire(targeted_atom, user) + E.calculated_projectile_vars = calculate_projectile_angle_and_pixel_offsets(user, interacting_with, modifiers) + E.direction_track(user, interacting_with) + E.checkfire(interacting_with, user) + +/obj/item/gun_control/ranged_interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + return interact_with_atom(interacting_with, user, modifiers) diff --git a/code/game/objects/structures/door_assembly.dm b/code/game/objects/structures/door_assembly.dm index f75a8b9ce726c..9493a7c941407 100644 --- a/code/game/objects/structures/door_assembly.dm +++ b/code/game/objects/structures/door_assembly.dm @@ -44,6 +44,7 @@ multi_tile = TRUE glass = TRUE nomineral = TRUE + material_amt = 8 /obj/structure/door_assembly/Initialize(mapload) . = ..() @@ -61,9 +62,6 @@ /obj/structure/door_assembly/examine(mob/user) . = ..() - var/doorname = "" - if(created_name) - doorname = ", written on it is '[created_name]'" switch(state) if(AIRLOCK_ASSEMBLY_NEEDS_WIRES) if(anchored) @@ -80,11 +78,11 @@ . += span_notice("There are empty slots for mineral covers.") else if(!glass && !noglass) . += span_notice("There are empty slots for glass windows.") - if(doorname) - . += span_notice("There is a small paper placard on the assembly labelled \"[doorname]\".") + if(created_name) + . += span_notice("There is a small paper placard on the assembly, written on it is '[created_name]'.") /obj/structure/door_assembly/attackby(obj/item/W, mob/living/user, params) - if(istype(W, /obj/item/pen) && !user.combat_mode) + if(IS_WRITING_UTENSIL(W) && !user.combat_mode) var/t = tgui_input_text(user, "Enter the name for the door", "Airlock Renaming", created_name, MAX_NAME_LEN) if(!t) return diff --git a/code/game/objects/structures/door_assembly_types.dm b/code/game/objects/structures/door_assembly_types.dm index dd06f7e42a9a4..d62fb1bec7676 100644 --- a/code/game/objects/structures/door_assembly_types.dm +++ b/code/game/objects/structures/door_assembly_types.dm @@ -271,6 +271,18 @@ name = "large public airlock assembly" base_name = "large public airlock" +/obj/structure/door_assembly/multi_tile/door_assembly_tram + name = "tram door assembly" + icon = 'icons/obj/doors/airlocks/tram/tram.dmi' + base_name = "tram door" + overlays_file = 'icons/obj/doors/airlocks/tram/tram-overlays.dmi' + glass_type = /obj/machinery/door/airlock/tram + airlock_type = /obj/machinery/door/airlock/tram + glass = FALSE + noglass = TRUE + mineral = "titanium" + material_type = /obj/item/stack/sheet/mineral/titanium + /obj/structure/door_assembly/door_assembly_material/atom_deconstruct(disassembled = TRUE) var/turf/target_turf = get_turf(src) for(var/datum/material/material_datum as anything in custom_materials) diff --git a/code/game/objects/structures/dresser.dm b/code/game/objects/structures/dresser.dm index 4296ac3368443..cf3864b140059 100644 --- a/code/game/objects/structures/dresser.dm +++ b/code/game/objects/structures/dresser.dm @@ -40,7 +40,7 @@ return switch(choice) if("Underwear") - var/new_undies = tgui_input_list(user, "Select your underwear", "Changing", GLOB.underwear_list) + var/new_undies = tgui_input_list(user, "Select your underwear", "Changing", SSaccessories.underwear_list) if(new_undies) dressing_human.underwear = new_undies if("Underwear Color") @@ -48,11 +48,11 @@ if(new_underwear_color) dressing_human.underwear_color = sanitize_hexcolor(new_underwear_color) if("Undershirt") - var/new_undershirt = tgui_input_list(user, "Select your undershirt", "Changing", GLOB.undershirt_list) + var/new_undershirt = tgui_input_list(user, "Select your undershirt", "Changing", SSaccessories.undershirt_list) if(new_undershirt) dressing_human.undershirt = new_undershirt if("Socks") - var/new_socks = tgui_input_list(user, "Select your socks", "Changing", GLOB.socks_list) + var/new_socks = tgui_input_list(user, "Select your socks", "Changing", SSaccessories.socks_list) if(new_socks) dressing_human.socks = new_socks diff --git a/code/game/objects/structures/false_walls.dm b/code/game/objects/structures/false_walls.dm index cace64a710169..0564223a7c759 100644 --- a/code/game/objects/structures/false_walls.dm +++ b/code/game/objects/structures/false_walls.dm @@ -91,9 +91,9 @@ qdel(src) return T -/obj/structure/falsewall/item_interaction(mob/living/user, obj/item/tool, list/modifiers) +/obj/structure/falsewall/tool_act(mob/living/user, obj/item/tool, list/modifiers) if(!opening || !tool.tool_behaviour) - return NONE + return ..() to_chat(user, span_warning("You must wait until the door has stopped moving!")) return ITEM_INTERACT_BLOCKING diff --git a/code/game/objects/structures/fans.dm b/code/game/objects/structures/fans.dm index 4f0a5fc450bfe..9470b6018dce7 100644 --- a/code/game/objects/structures/fans.dm +++ b/code/game/objects/structures/fans.dm @@ -51,3 +51,5 @@ light_color = LIGHT_COLOR_BLUE light_range = 4 +/obj/structure/fans/tiny/shield/wrench_act(mob/living/user, obj/item/I) + return ITEM_INTERACT_SKIP_TO_ATTACK //how you gonna wrench disassemble a shield????????? diff --git a/code/game/objects/structures/flora.dm b/code/game/objects/structures/flora.dm index 2cfd490203c06..49a230d6bdc48 100644 --- a/code/game/objects/structures/flora.dm +++ b/code/game/objects/structures/flora.dm @@ -499,13 +499,13 @@ /obj/structure/flora/coconuts gender = PLURAL name = "coconuts" - icon = 'icons/misc/beach.dmi' + icon = 'icons/obj/fluff/beach.dmi' icon_state = "coconuts" /obj/structure/flora/tree/palm name = "palm tree" desc = "A tree straight from the tropics." - icon = 'icons/misc/beach2.dmi' + icon = 'icons/obj/fluff/beach2.dmi' icon_state = "palm1" pixel_x = 0 diff --git a/code/game/objects/structures/grille.dm b/code/game/objects/structures/grille.dm index a25dfaada505f..3bd3e00cc273b 100644 --- a/code/game/objects/structures/grille.dm +++ b/code/game/objects/structures/grille.dm @@ -10,8 +10,7 @@ density = TRUE anchored = TRUE pass_flags_self = PASSGRILLE | PASSWINDOW - obj_flags = CONDUCTS_ELECTRICITY - obj_flags = CAN_BE_HIT | IGNORE_DENSITY + obj_flags = CONDUCTS_ELECTRICITY | CAN_BE_HIT | IGNORE_DENSITY pressure_resistance = 5*ONE_ATMOSPHERE armor_type = /datum/armor/structure_grille max_integrity = 50 @@ -43,7 +42,7 @@ return . = ..() - if((updates & UPDATE_SMOOTHING) && (smoothing_flags & (SMOOTH_CORNERS|SMOOTH_BITMASK))) + if((updates & UPDATE_SMOOTHING) && (smoothing_flags & USES_SMOOTHING)) QUEUE_SMOOTH(src) /obj/structure/grille/update_icon_state() diff --git a/code/game/objects/structures/gym/punching_bag.dm b/code/game/objects/structures/gym/punching_bag.dm index ef0db16e953e3..03a64725ab5e3 100644 --- a/code/game/objects/structures/gym/punching_bag.dm +++ b/code/game/objects/structures/gym/punching_bag.dm @@ -57,12 +57,12 @@ stamina_exhaustion = 2 if (is_heavy_gravity) stamina_exhaustion *= 1.5 - + if(HAS_TRAIT(user, TRAIT_STRENGTH)) //The strong get reductions to stamina damage taken while exercising stamina_exhaustion *= 0.5 user.adjustStaminaLoss(stamina_exhaustion) - user.mind?.adjust_experience(/datum/skill/athletics, is_heavy_gravity ? 0.2 : 0.1) + user.mind?.adjust_experience(/datum/skill/athletics, is_heavy_gravity ? 0.6 : 0.3) user.apply_status_effect(/datum/status_effect/exercised) /obj/structure/punching_bag/wrench_act_secondary(mob/living/user, obj/item/tool) diff --git a/code/game/objects/structures/headpike.dm b/code/game/objects/structures/headpike.dm index b4cffdb654d23..fca325744554d 100644 --- a/code/game/objects/structures/headpike.dm +++ b/code/game/objects/structures/headpike.dm @@ -36,7 +36,7 @@ victim = locate() in parts_list if(!victim) //likely a mapspawned one victim = new(src) - victim.real_name = random_unique_name(prob(50)) + victim.real_name = generate_random_name() spear = locate(speartype) in parts_list if(!spear) spear = new speartype(src) diff --git a/code/game/objects/structures/janitor.dm b/code/game/objects/structures/janitor.dm index 4f5bdf2812732..0413bcac53986 100644 --- a/code/game/objects/structures/janitor.dm +++ b/code/game/objects/structures/janitor.dm @@ -73,6 +73,7 @@ /obj/structure/mop_bucket/janitorialcart/Initialize(mapload) . = ..() + reagents.maximum_volume *= 2.5 GLOB.janitor_devices += src /obj/structure/mop_bucket/janitorialcart/Destroy() diff --git a/code/game/objects/structures/lattice.dm b/code/game/objects/structures/lattice.dm index 6d65705586a6a..cf6fe65abe274 100644 --- a/code/game/objects/structures/lattice.dm +++ b/code/game/objects/structures/lattice.dm @@ -112,6 +112,7 @@ ..() /obj/structure/lattice/catwalk/atom_deconstruct(disassembled = TRUE) + ..() var/turf/T = loc for(var/obj/structure/cable/C in T) C.deconstruct() diff --git a/code/game/objects/structures/lavaland/necropolis_tendril.dm b/code/game/objects/structures/lavaland/necropolis_tendril.dm index 58308b9b9cf2b..2ede6833aa992 100644 --- a/code/game/objects/structures/lavaland/necropolis_tendril.dm +++ b/code/game/objects/structures/lavaland/necropolis_tendril.dm @@ -6,7 +6,7 @@ icon = 'icons/mob/simple/lavaland/nest.dmi' icon_state = "tendril" - faction = list(FACTION_MINING) + faction = list(FACTION_MINING, FACTION_ASHWALKER) max_mobs = 3 max_integrity = 250 mob_types = list(/mob/living/basic/mining/watcher) diff --git a/code/game/objects/structures/lavaland/ore_vent.dm b/code/game/objects/structures/lavaland/ore_vent.dm index a6ab8a58d7039..27e05b6dc540d 100644 --- a/code/game/objects/structures/lavaland/ore_vent.dm +++ b/code/game/objects/structures/lavaland/ore_vent.dm @@ -82,6 +82,9 @@ icon_state = icon_state_tapped update_appearance(UPDATE_ICON_STATE) add_overlay(mutable_appearance('icons/obj/mining_zones/terrain.dmi', "well", ABOVE_MOB_LAYER)) + + RegisterSignal(src, COMSIG_SPAWNER_SPAWNED_DEFAULT, PROC_REF(anti_cheese)) + RegisterSignal(src, COMSIG_SPAWNER_SPAWNED, PROC_REF(log_mob_spawned)) return ..() /obj/structure/ore_vent/Destroy() @@ -214,6 +217,7 @@ node = new /mob/living/basic/node_drone(loc) node.arrive(src) RegisterSignal(node, COMSIG_QDELETING, PROC_REF(handle_wave_conclusion)) + RegisterSignal(node, COMSIG_MOVABLE_MOVED, PROC_REF(handle_wave_conclusion)) particles = new /particles/smoke/ash() for(var/i in 1 to 5) // Clears the surroundings of the ore vent before starting wave defense. for(var/turf/closed/mineral/rock in oview(i)) @@ -261,12 +265,26 @@ * Also gives xp and mining points to all nearby miners in equal measure. */ /obj/structure/ore_vent/proc/handle_wave_conclusion() + SIGNAL_HANDLER + SEND_SIGNAL(src, COMSIG_VENT_WAVE_CONCLUDED) COOLDOWN_RESET(src, wave_cooldown) particles = null - if(!QDELETED(node)) ///The Node Drone has survived the wave defense, and the ore vent is tapped. - tapped = TRUE + + if(!QDELETED(node)) + if(get_turf(node) != get_turf(src)) + visible_message(span_danger("The [node] detaches from the [src], and the vent closes back up!")) + icon_state = initial(icon_state) + update_appearance(UPDATE_ICON_STATE) + UnregisterSignal(node, COMSIG_MOVABLE_MOVED) + node.pre_escape(success = FALSE) + node = null + return //Start over! + + tapped = TRUE //The Node Drone has survived the wave defense, and the ore vent is tapped. SSore_generation.processed_vents += src + log_game("Ore vent [key_name_and_tag(src)] was tapped") + SSblackbox.record_feedback("tally", "ore_vent_completed", 1, type) balloon_alert_to_viewers("vent tapped!") icon_state = icon_state_tapped update_appearance(UPDATE_ICON_STATE) @@ -275,7 +293,8 @@ visible_message(span_danger("\the [src] creaks and groans as the mining attempt fails, and the vent closes back up.")) icon_state = initial(icon_state) update_appearance(UPDATE_ICON_STATE) - return FALSE //Bad end, try again. + node = null + return //Bad end, try again. for(var/mob/living/miner in range(7, src)) //Give the miners who are near the vent points and xp. var/obj/item/card/id/user_id_card = miner.get_idcard(TRUE) @@ -284,9 +303,11 @@ if(!user_id_card) continue var/point_reward_val = (MINER_POINT_MULTIPLIER * boulder_size) - MINER_POINT_MULTIPLIER // We remove the base value of discovering the vent - user_id_card.registered_account.mining_points += point_reward_val - user_id_card.registered_account.bank_card_talk("You have been awarded [point_reward_val] mining points for your efforts.") + if(user_id_card.registered_account) + user_id_card.registered_account.mining_points += point_reward_val + user_id_card.registered_account.bank_card_talk("You have been awarded [point_reward_val] mining points for your efforts.") node.pre_escape() //Visually show the drone is done and flies away. + node = null add_overlay(mutable_appearance('icons/obj/mining_zones/terrain.dmi', "well", ABOVE_MOB_LAYER)) /** @@ -327,8 +348,9 @@ var/obj/item/card/id/user_id_card = user.get_idcard(TRUE) if(isnull(user_id_card)) return - user_id_card.registered_account.mining_points += (MINER_POINT_MULTIPLIER) - user_id_card.registered_account.bank_card_talk("You've been awarded [MINER_POINT_MULTIPLIER] mining points for discovery of an ore vent.") + if(user_id_card.registered_account) + user_id_card.registered_account.mining_points += (MINER_POINT_MULTIPLIER) + user_id_card.registered_account.bank_card_talk("You've been awarded [MINER_POINT_MULTIPLIER] mining points for discovery of an ore vent.") return if(scan_only) return @@ -401,6 +423,30 @@ COOLDOWN_START(src, manual_vent_cooldown, 10 SECONDS) return new_rock +/** + * When the ore vent cannot spawn a mob due to being blocked from all sides, we cause some MILD, MILD explosions. + * Explosion matches a gibtonite light explosion, as a way to clear neartby solid structures, with a high likelyhood of breaking the NODE drone. + */ +/obj/structure/ore_vent/proc/anti_cheese() + explosion(src, heavy_impact_range = 1, light_impact_range = 3, flame_range = 0, flash_range = 0, adminlog = FALSE) + +/** + * Handle logging for mobs spawned + */ +/obj/structure/ore_vent/proc/log_mob_spawned(datum/source, mob/living/created) + SIGNAL_HANDLER + log_game("Ore vent [key_name_and_tag(src)] spawned the following mob: [key_name_and_tag(created)]") + SSblackbox.record_feedback("tally", "ore_vent_mobs_spawned", 1, created.type) + RegisterSignal(created, COMSIG_LIVING_DEATH, PROC_REF(log_mob_killed)) + +/** + * Handle logging for mobs killed + */ +/obj/structure/ore_vent/proc/log_mob_killed(datum/source, mob/living/killed) + SIGNAL_HANDLER + log_game("Vent-spawned mob [key_name_and_tag(killed)] was killed") + SSblackbox.record_feedback("tally", "ore_vent_mobs_killed", 1, killed.type) + //comes with the station, and is already tapped. /obj/structure/ore_vent/starter_resources name = "active ore vent" @@ -514,7 +560,7 @@ boss_string = "A giant, armored behemoth" if(/mob/living/simple_animal/hostile/megafauna/demonic_frost_miner) boss_string = "A bloody drillmark" - if(/mob/living/simple_animal/hostile/megafauna/wendigo) + if(/mob/living/simple_animal/hostile/megafauna/wendigo/noportal) boss_string = "A chilling skull" . += span_notice("[boss_string] is etched onto the side of the vent.") @@ -524,11 +570,13 @@ // Completely override the normal wave defense, and just spawn the boss. var/mob/living/simple_animal/hostile/megafauna/boss = new summoned_boss(loc) RegisterSignal(boss, COMSIG_LIVING_DEATH, PROC_REF(handle_wave_conclusion)) + SSblackbox.record_feedback("tally", "ore_vent_mobs_spawned", 1, summoned_boss) COOLDOWN_START(src, wave_cooldown, INFINITY) //Basically forever boss.say(boss.summon_line) //Pull their specific summon line to say. Default is meme text so make sure that they have theirs set already. /obj/structure/ore_vent/boss/handle_wave_conclusion() node = new /mob/living/basic/node_drone(loc) //We're spawning the vent after the boss dies, so the player can just focus on the boss. + SSblackbox.record_feedback("tally", "ore_vent_mobs_killed", 1, summoned_boss) COOLDOWN_RESET(src, wave_cooldown) return ..() @@ -537,7 +585,7 @@ icon_state_tapped = "ore_vent_ice_active" defending_mobs = list( /mob/living/simple_animal/hostile/megafauna/demonic_frost_miner, - /mob/living/simple_animal/hostile/megafauna/wendigo, + /mob/living/simple_animal/hostile/megafauna/wendigo/noportal, /mob/living/simple_animal/hostile/megafauna/colossus, ) diff --git a/code/game/objects/structures/mannequin.dm b/code/game/objects/structures/mannequin.dm index bdb5344d7fe10..a47802273d5a0 100644 --- a/code/game/objects/structures/mannequin.dm +++ b/code/game/objects/structures/mannequin.dm @@ -95,19 +95,19 @@ var/mutable_appearance/pedestal = mutable_appearance(icon, "pedestal_[material]") pedestal.pixel_y = -3 . += pedestal - var/datum/sprite_accessory/underwear/underwear = GLOB.underwear_list[underwear_name] + var/datum/sprite_accessory/underwear/underwear = SSaccessories.underwear_list[underwear_name] if(underwear) if(body_type == FEMALE && underwear.gender == MALE) . += wear_female_version(underwear.icon_state, underwear.icon, BODY_LAYER, FEMALE_UNIFORM_FULL) else . += mutable_appearance(underwear.icon, underwear.icon_state, -BODY_LAYER) - var/datum/sprite_accessory/undershirt/undershirt = GLOB.undershirt_list[undershirt_name] + var/datum/sprite_accessory/undershirt/undershirt = SSaccessories.undershirt_list[undershirt_name] if(undershirt) if(body_type == FEMALE) . += wear_female_version(undershirt.icon_state, undershirt.icon, BODY_LAYER) else . += mutable_appearance(undershirt.icon, undershirt.icon_state, -BODY_LAYER) - var/datum/sprite_accessory/socks/socks = GLOB.socks_list[socks_name] + var/datum/sprite_accessory/socks/socks = SSaccessories.socks_list[socks_name] if(socks) . += mutable_appearance(socks.icon, socks.icon_state, -BODY_LAYER) for(var/slot_flag in worn_items) @@ -168,15 +168,15 @@ return switch(choice) if("Underwear") - var/new_undies = tgui_input_list(user, "Select the mannequin's underwear", "Changing", GLOB.underwear_list) + var/new_undies = tgui_input_list(user, "Select the mannequin's underwear", "Changing", SSaccessories.underwear_list) if(new_undies) underwear_name = new_undies if("Undershirt") - var/new_undershirt = tgui_input_list(user, "Select the mannequin's undershirt", "Changing", GLOB.undershirt_list) + var/new_undershirt = tgui_input_list(user, "Select the mannequin's undershirt", "Changing", SSaccessories.undershirt_list) if(new_undershirt) undershirt_name = new_undershirt if("Socks") - var/new_socks = tgui_input_list(user, "Select the mannequin's socks", "Changing", GLOB.socks_list) + var/new_socks = tgui_input_list(user, "Select the mannequin's socks", "Changing", SSaccessories.socks_list) if(new_socks) socks_name = new_socks update_appearance() diff --git a/code/game/objects/structures/mineral_doors.dm b/code/game/objects/structures/mineral_doors.dm index d794f24dd0894..d67f61e9442bb 100644 --- a/code/game/objects/structures/mineral_doors.dm +++ b/code/game/objects/structures/mineral_doors.dm @@ -300,7 +300,7 @@ /obj/structure/mineral_door/paperframe/Initialize(mapload) . = ..() - if(smoothing_flags & (SMOOTH_CORNERS|SMOOTH_BITMASK)) + if(smoothing_flags & USES_SMOOTHING) QUEUE_SMOOTH_NEIGHBORS(src) /obj/structure/mineral_door/paperframe/examine(mob/user) @@ -333,6 +333,6 @@ return ..() /obj/structure/mineral_door/paperframe/Destroy() - if(smoothing_flags & (SMOOTH_CORNERS|SMOOTH_BITMASK)) + if(smoothing_flags & USES_SMOOTHING) QUEUE_SMOOTH_NEIGHBORS(src) return ..() diff --git a/code/game/objects/structures/mirror.dm b/code/game/objects/structures/mirror.dm index f15cabd707ec8..7ea2330281413 100644 --- a/code/game/objects/structures/mirror.dm +++ b/code/game/objects/structures/mirror.dm @@ -118,7 +118,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/mirror/broken, 28) beard_dresser.set_facial_hairstyle("Shaved", update = TRUE) return TRUE - var/new_style = tgui_input_list(beard_dresser, "Select a facial hairstyle", "Grooming", GLOB.facial_hairstyles_list) + var/new_style = tgui_input_list(beard_dresser, "Select a facial hairstyle", "Grooming", SSaccessories.facial_hairstyles_list) if(isnull(new_style)) return TRUE @@ -131,7 +131,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/mirror/broken, 28) beard_dresser.set_facial_hairstyle(new_style, update = TRUE) /obj/structure/mirror/proc/change_hair(mob/living/carbon/human/hairdresser) - var/new_style = tgui_input_list(hairdresser, "Select a hairstyle", "Grooming", GLOB.hairstyles_list) + var/new_style = tgui_input_list(hairdresser, "Select a hairstyle", "Grooming", SSaccessories.hairstyles_list) if(isnull(new_style)) return TRUE if(HAS_TRAIT(hairdresser, TRAIT_BALD)) @@ -331,7 +331,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/mirror/broken, 28) selectable_races = sort_list(selectable_races) /obj/structure/mirror/magic/change_beard(mob/living/carbon/human/beard_dresser) // magical mirrors do nothing but give you the damn beard - var/new_style = tgui_input_list(beard_dresser, "Select a facial hairstyle", "Grooming", GLOB.facial_hairstyles_list) + var/new_style = tgui_input_list(beard_dresser, "Select a facial hairstyle", "Grooming", SSaccessories.facial_hairstyles_list) if(isnull(new_style)) return TRUE beard_dresser.set_facial_hairstyle(new_style, update = TRUE) diff --git a/code/game/objects/structures/morgue.dm b/code/game/objects/structures/morgue.dm index 4ac1a62a63f98..9baf7cb14fb8f 100644 --- a/code/game/objects/structures/morgue.dm +++ b/code/game/objects/structures/morgue.dm @@ -45,6 +45,8 @@ GLOBAL_LIST_EMPTY(bodycontainers) //Let them act as spawnpoints for revenants an var/locked = FALSE ///Cooldown between breakout msesages. COOLDOWN_DECLARE(breakout_message_cooldown) + /// Cooldown between being able to slide the tray in or out. + COOLDOWN_DECLARE(open_close_cd) /obj/structure/bodycontainer/Initialize(mapload) . = ..() @@ -131,30 +133,90 @@ GLOBAL_LIST_EMPTY(bodycontainers) //Let them act as spawnpoints for revenants an user.overlay_fullscreen("remote_view", /atom/movable/screen/fullscreen/impaired, 2) /obj/structure/bodycontainer/proc/open() - playsound(loc, 'sound/items/deconstruct.ogg', 50, TRUE) + if(!COOLDOWN_FINISHED(src, open_close_cd)) + return FALSE + + COOLDOWN_START(src, open_close_cd, 0.25 SECONDS) + playsound(src, 'sound/items/deconstruct.ogg', 50, TRUE) playsound(src, 'sound/effects/roll.ogg', 5, TRUE) - var/turf/T = get_step(src, dir) - if (connected) - connected.setDir(dir) - for(var/atom/movable/AM in src) - AM.forceMove(T) + var/turf/dump_turf = get_step(src, dir) + connected?.setDir(dir) + for(var/atom/movable/moving in src) + moving.forceMove(dump_turf) + animate_slide_out(moving) update_appearance() + return TRUE /obj/structure/bodycontainer/proc/close() + if(!COOLDOWN_FINISHED(src, open_close_cd)) + return FALSE + + COOLDOWN_START(src, open_close_cd, 0.5 SECONDS) playsound(src, 'sound/effects/roll.ogg', 5, TRUE) playsound(src, 'sound/items/deconstruct.ogg', 50, TRUE) - for(var/atom/movable/AM in connected.loc) - if(!AM.anchored || AM == connected) - if(isliving(AM)) - var/mob/living/living_mob = AM - if(living_mob.incorporeal_move) - continue - else if(istype(AM, /obj/effect/dummy/phased_mob)) - continue - else if(isdead(AM)) + var/turf/close_loc = connected.loc + for(var/atom/movable/entering in close_loc) + if(entering.anchored && entering != connected) + continue + if(isliving(entering)) + var/mob/living/living_mob = entering + if(living_mob.incorporeal_move) continue - AM.forceMove(src) + else if(istype(entering, /obj/effect/dummy/phased_mob) || isdead(entering)) + continue + animate_slide_in(entering, close_loc) + entering.forceMove(src) update_appearance() + return TRUE + +#define SLIDE_LENGTH (0.3 SECONDS) + +/// Slides the passed object out of the morgue tray. +/obj/structure/bodycontainer/proc/animate_slide_out(atom/movable/animated) + var/old_layer = animated.layer + animated.layer = layer - (animated == connected ? 0.03 : 0.01) + animated.pixel_x = animated.base_pixel_x + (x * 32) - (animated.x * 32) + animated.pixel_y = animated.base_pixel_y + (y * 32) - (animated.y * 32) + animate( + animated, + pixel_x = animated.base_pixel_x, + pixel_y = animated.base_pixel_y, + time = SLIDE_LENGTH, + easing = CUBIC_EASING|EASE_OUT, + flags = ANIMATION_PARALLEL, + ) + addtimer(VARSET_CALLBACK(animated, layer, old_layer), SLIDE_LENGTH) + +/// Slides the passed object into the morgue tray from the passed turf. +/obj/structure/bodycontainer/proc/animate_slide_in(atom/movable/animated, turf/from_loc) + // It's easier to just make a visual for entering than to animate the object itself + var/obj/effect/temp_visual/morgue_content/visual = new(from_loc, animated) + visual.layer = layer - (animated == connected ? 0.03 : 0.01) + animate( + visual, + pixel_x = visual.base_pixel_x + (x * 32) - (visual.x * 32), + pixel_y = visual.base_pixel_y + (y * 32) - (visual.y * 32), + time = SLIDE_LENGTH, + easing = CUBIC_EASING|EASE_IN, + flags = ANIMATION_PARALLEL, + ) + +/// Used to mimic the appearance of an object sliding into a morgue tray. +/obj/effect/temp_visual/morgue_content + duration = SLIDE_LENGTH + +/obj/effect/temp_visual/morgue_content/Initialize(mapload, atom/movable/sliding_in) + . = ..() + if(isnull(sliding_in)) + return + + appearance = sliding_in.appearance + dir = sliding_in.dir + alpha = sliding_in.alpha + base_pixel_x = sliding_in.base_pixel_x + base_pixel_y = sliding_in.base_pixel_y + +#undef SLIDE_LENGTH #define MORGUE_EMPTY 1 #define MORGUE_NO_MOBS 2 @@ -456,6 +518,7 @@ GLOBAL_LIST_EMPTY(crematoriums) density = TRUE anchored = TRUE pass_flags_self = PASSTABLE | LETPASSTHROW + max_integrity = 350 ///The bodycontainer we are a tray to. @@ -496,10 +559,10 @@ GLOBAL_LIST_EMPTY(crematoriums) if(carried_mob == user) //Piggyback user. return user.unbuckle_mob(carried_mob) - MouseDrop_T(carried_mob, user) + mouse_drop_receive(carried_mob, user) -/obj/structure/tray/MouseDrop_T(atom/movable/O as mob|obj, mob/user) - if(!ismovable(O) || O.anchored || !Adjacent(user) || !user.Adjacent(O) || O.loc == user) +/obj/structure/tray/mouse_drop_receive(atom/movable/O as mob|obj, mob/user, params) + if(!ismovable(O) || O.anchored || O.loc == user) return if(!ismob(O)) if(!istype(O, /obj/structure/closet/body_bag)) @@ -508,16 +571,9 @@ GLOBAL_LIST_EMPTY(crematoriums) var/mob/M = O if(M.buckled) return - if(!ismob(user) || user.incapacitated()) - return - if(isliving(user)) - var/mob/living/L = user - if(L.body_position == LYING_DOWN) - return O.forceMove(src.loc) if (user != O) visible_message(span_warning("[user] stuffs [O] into [src].")) - return /* * Crematorium tray @@ -526,6 +582,7 @@ GLOBAL_LIST_EMPTY(crematoriums) name = "crematorium tray" desc = "Apply body before burning." icon_state = "cremat" + layer = /obj/structure/bodycontainer/crematorium::layer - 0.03 /* * Morgue tray @@ -536,6 +593,7 @@ GLOBAL_LIST_EMPTY(crematoriums) icon = 'icons/obj/structures.dmi' icon_state = "morguet" pass_flags_self = PASSTABLE | LETPASSTHROW + layer = /obj/structure/bodycontainer/morgue::layer - 0.03 /obj/structure/tray/m_tray/CanAllowThrough(atom/movable/mover, border_dir) . = ..() diff --git a/code/game/objects/structures/mystery_box.dm b/code/game/objects/structures/mystery_box.dm index ab8a25f04c675..e165c2e295c93 100644 --- a/code/game/objects/structures/mystery_box.dm +++ b/code/game/objects/structures/mystery_box.dm @@ -22,9 +22,7 @@ GLOBAL_LIST_INIT(mystery_box_guns, list( /obj/item/gun/energy/lasercannon, /obj/item/gun/energy/recharge/ebow/large, /obj/item/gun/energy/e_gun, - /obj/item/gun/energy/e_gun/advtaser, /obj/item/gun/energy/e_gun/nuclear, - /obj/item/gun/energy/e_gun/turret, /obj/item/gun/energy/laser, /obj/item/gun/energy/laser/hellgun, /obj/item/gun/energy/laser/captain, @@ -34,17 +32,17 @@ GLOBAL_LIST_INIT(mystery_box_guns, list( /obj/item/gun/ballistic/revolver/mateba, /obj/item/gun/ballistic/automatic/pistol/deagle/camo, /obj/item/gun/ballistic/automatic/pistol/suppressed, - /obj/item/gun/energy/pulse/carbine, - /obj/item/gun/energy/pulse/pistol, + /obj/item/gun/energy/pulse/carbine/taserless, + /obj/item/gun/energy/pulse/pistol/taserless, /obj/item/gun/ballistic/shotgun/lethal, /obj/item/gun/ballistic/shotgun/automatic/combat, - /obj/item/gun/ballistic/shotgun/bulldog, + /obj/item/gun/ballistic/shotgun/bulldog/unrestricted, /obj/item/gun/ballistic/rifle/boltaction, /obj/item/gun/ballistic/automatic/ar, - /obj/item/gun/ballistic/automatic/proto, - /obj/item/gun/ballistic/automatic/c20r, - /obj/item/gun/ballistic/automatic/l6_saw, - /obj/item/gun/ballistic/automatic/m90, + /obj/item/gun/ballistic/automatic/proto/unrestricted, + /obj/item/gun/ballistic/automatic/c20r/unrestricted, + /obj/item/gun/ballistic/automatic/l6_saw/unrestricted, + /obj/item/gun/ballistic/automatic/m90/unrestricted, /obj/item/gun/ballistic/automatic/tommygun, /obj/item/gun/ballistic/automatic/wt550, /obj/item/gun/ballistic/rifle/sniper_rifle, @@ -72,24 +70,18 @@ GLOBAL_LIST_INIT(mystery_magic, list( /obj/item/gun/magic/wand/arcane_barrage/blood, /obj/item/gun/magic/wand/fireball, /obj/item/gun/magic/wand/resurrection, - /obj/item/gun/magic/wand/death, - /obj/item/gun/magic/wand/polymorph, /obj/item/gun/magic/wand/teleport, /obj/item/gun/magic/wand/door, /obj/item/gun/magic/wand/nothing, /obj/item/storage/belt/wands/full, /obj/item/gun/magic/staff/healing, - /obj/item/gun/magic/staff/change, - /obj/item/gun/magic/staff/animate, /obj/item/gun/magic/staff/chaos, /obj/item/gun/magic/staff/door, /obj/item/gun/magic/staff/honk, /obj/item/gun/magic/staff/spellblade, - /obj/item/gun/magic/staff/locker, /obj/item/gun/magic/staff/flying, /obj/item/gun/magic/staff/babel, /obj/item/singularityhammer, - /obj/item/mod/control/pre_equipped/enchanted, /obj/item/runic_vendor_scepter, )) diff --git a/code/game/objects/structures/plaques/_plaques.dm b/code/game/objects/structures/plaques/_plaques.dm index 4a1684434dcca..1277869dbf67f 100644 --- a/code/game/objects/structures/plaques/_plaques.dm +++ b/code/game/objects/structures/plaques/_plaques.dm @@ -185,11 +185,10 @@ return return ..() -/obj/item/plaque/afterattack(atom/target, mob/user, proximity) - . = ..() - if(!iswallturf(target) || !proximity) - return - var/turf/target_turf = target +/obj/item/plaque/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + if(!iswallturf(interacting_with)) + return NONE + var/turf/target_turf = interacting_with var/turf/user_turf = get_turf(user) var/obj/structure/plaque/placed_plaque = new plaque_path(user_turf) //We place the plaque on the turf the user is standing, and pixel shift it to the target wall, as below. //This is to mimic how signs and other wall objects are usually placed by mappers, and so they're only visible from one side of a wall. @@ -213,3 +212,4 @@ placed_plaque.update_integrity(get_integrity()) placed_plaque.setDir(dir) qdel(src) + return ITEM_INTERACT_SUCCESS diff --git a/code/game/objects/structures/plaques/static_plaques.dm b/code/game/objects/structures/plaques/static_plaques.dm index 642a7ac125e84..3ae3b66b71b66 100644 --- a/code/game/objects/structures/plaques/static_plaques.dm +++ b/code/game/objects/structures/plaques/static_plaques.dm @@ -125,6 +125,10 @@ /obj/structure/plaque/static_plaque/golden/commission/tram desc = "Spinward Sector Station SS-13\n'Tram' Class Outpost\nCommissioned 11/03/2561\n'Making Moves'" +// Wawastation: added add date here +/obj/structure/plaque/static_plaque/golden/commission/wawa + desc = "Spinward Sector Station SS-13\n'Wawa' Class Outpost\nCommissioned 11/03/add here\n'Forever Vertical'" + // North Star: added Apr 13, 2023 (#74371) /obj/structure/plaque/static_plaque/golden/commission/northstar desc = "Spinward Sector Ship SS-13\n'North Star' Class Vessel\nCommissioned 13/04/2563\n'New Opportunities'" diff --git a/code/game/objects/structures/plasticflaps.dm b/code/game/objects/structures/plasticflaps.dm index a2a1e1c04bc20..a5ed048153c41 100644 --- a/code/game/objects/structures/plasticflaps.dm +++ b/code/game/objects/structures/plasticflaps.dm @@ -26,6 +26,7 @@ . = ..() alpha = 0 gen_overlay() + air_update_turf(TRUE, TRUE) /obj/structure/plasticflaps/on_changed_z_level(turf/old_turf, turf/new_turf, same_z_layer, notify_contents) if(same_z_layer) @@ -127,10 +128,6 @@ /obj/structure/plasticflaps/atom_deconstruct(disassembled = TRUE) new /obj/item/stack/sheet/plastic/five(loc) -/obj/structure/plasticflaps/Initialize(mapload) - . = ..() - air_update_turf(TRUE, TRUE) - /obj/structure/plasticflaps/Destroy() var/atom/oldloc = loc . = ..() diff --git a/code/game/objects/structures/railings.dm b/code/game/objects/structures/railings.dm index 2651684e39b80..c3d9b115f01de 100644 --- a/code/game/objects/structures/railings.dm +++ b/code/game/objects/structures/railings.dm @@ -8,14 +8,13 @@ density = TRUE anchored = TRUE pass_flags_self = LETPASSTHROW|PASSSTRUCTURE - layer = ABOVE_MOB_LAYER + layer = ABOVE_TREE_LAYER + plane = ABOVE_GAME_PLANE /// armor is a little bit less than a grille. max_integrity about half that of a grille. armor_type = /datum/armor/structure_railing max_integrity = 25 var/climbable = TRUE - ///Initial direction of the railing. - var/ini_dir ///item released when deconstructed var/item_deconstruct = /obj/item/stack/rods @@ -39,7 +38,6 @@ /obj/structure/railing/Initialize(mapload) . = ..() - ini_dir = dir if(climbable) AddElement(/datum/element/climbable) @@ -168,8 +166,8 @@ adjust_dir_layer(new_dir) /obj/structure/railing/wooden_fence/proc/adjust_dir_layer(direction) - var/new_layer = (direction & NORTH) ? MOB_LAYER : ABOVE_MOB_LAYER - layer = new_layer + layer = (direction & NORTH) ? MOB_LAYER : initial(layer) + plane = (direction & NORTH) ? GAME_PLANE : initial(plane) /obj/structure/railing/corner/end/wooden_fence diff --git a/code/game/objects/structures/reflector.dm b/code/game/objects/structures/reflector.dm index 0700f19818a39..e27f5fcf42b40 100644 --- a/code/game/objects/structures/reflector.dm +++ b/code/game/objects/structures/reflector.dm @@ -79,10 +79,10 @@ P.decayedRange = max(P.decayedRange--, 0) return BULLET_ACT_FORCE_PIERCE -/obj/structure/reflector/item_interaction(mob/living/user, obj/item/tool, list/modifiers) +/obj/structure/reflector/tool_act(mob/living/user, obj/item/tool, list/modifiers) if(admin && tool.tool_behaviour) return ITEM_INTERACT_BLOCKING - return NONE + return ..() /obj/structure/reflector/screwdriver_act(mob/living/user, obj/item/tool) can_rotate = !can_rotate diff --git a/code/game/objects/structures/secure_safe.dm b/code/game/objects/structures/secure_safe.dm index 76c3ab4575f6c..9e1bf9b5adef9 100644 --- a/code/game/objects/structures/secure_safe.dm +++ b/code/game/objects/structures/secure_safe.dm @@ -74,15 +74,15 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/secure_safe, 32) There appears to be a small amount of surface corrosion. It doesn't look like it could withstand much of an explosion.\ Due to the expensive material, it was made incredibly small to cut corners, leaving only enough room to fit something as slim as an ID card." icon = 'icons/obj/structures.dmi' - icon_state = "safe" - base_icon_state = "safe" + icon_state = "spare_safe" + base_icon_state = "spare_safe" armor_type = /datum/armor/safe_caps_spare max_integrity = 300 damage_deflection = 30 // prevents stealing the captain's spare using null rods/lavaland monsters/AP projectiles density = TRUE - anchored_tabletop_offset = 4 + anchored_tabletop_offset = 6 custom_materials = list(/datum/material/gold = SMALL_MATERIAL_AMOUNT) - material_flags = MATERIAL_EFFECTS | MATERIAL_COLOR + material_flags = MATERIAL_EFFECTS /datum/armor/safe_caps_spare melee = 100 @@ -95,9 +95,6 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/secure_safe, 32) /obj/structure/secure_safe/caps_spare/Initialize(mapload) . = ..() - var/matrix/small_safe_transformation = new - small_safe_transformation.Scale(0.6) - transform = small_safe_transformation atom_storage.set_holdable(/obj/item/card/id) AddComponent(/datum/component/lockable_storage, \ lock_code = SSid_access.spare_id_safe_code, \ diff --git a/code/game/objects/structures/showcase.dm b/code/game/objects/structures/showcase.dm index baeb8209447fb..2158a88a6b656 100644 --- a/code/game/objects/structures/showcase.dm +++ b/code/game/objects/structures/showcase.dm @@ -64,13 +64,13 @@ /obj/structure/showcase/mecha/marauder name = "combat mech exhibit" desc = "A stand with an empty old Nanotrasen Corporation combat mech bolted to it. It is described as the premier unit used to defend corporate interests and employees." - icon = 'icons/mob/mecha.dmi' + icon = 'icons/mob/rideables/mecha.dmi' icon_state = "marauder" /obj/structure/showcase/mecha/ripley name = "construction mech exhibit" desc = "A stand with a retired construction mech bolted to it. The clamps are rated at 9300PSI. It seems to be falling apart." - icon = 'icons/mob/mecha.dmi' + icon = 'icons/mob/rideables/mecha.dmi' icon_state = "firefighter" /obj/structure/showcase/machinery/implanter diff --git a/code/game/objects/structures/signs/_signs.dm b/code/game/objects/structures/signs/_signs.dm index b8709334c37f6..9268cb9c059ce 100644 --- a/code/game/objects/structures/signs/_signs.dm +++ b/code/game/objects/structures/signs/_signs.dm @@ -85,7 +85,7 @@ return TRUE /obj/structure/sign/attackby(obj/item/I, mob/user, params) - if(is_editable && istype(I, /obj/item/pen)) + if(is_editable && IS_WRITING_UTENSIL(I)) if(!length(GLOB.editable_sign_types)) CRASH("GLOB.editable_sign_types failed to populate") var/choice = tgui_input_list(user, "Select a sign type", "Sign Customization", GLOB.editable_sign_types) @@ -187,12 +187,12 @@ /obj/item/sign/add_context(atom/source, list/context, obj/item/held_item, mob/user) . = ..() - if(is_editable && istype(held_item, /obj/item/pen)) + if(is_editable && IS_WRITING_UTENSIL(held_item)) context[SCREENTIP_CONTEXT_LMB] = "Change design" return CONTEXTUAL_SCREENTIP_SET /obj/item/sign/attackby(obj/item/I, mob/user, params) - if(is_editable && istype(I, /obj/item/pen)) + if(is_editable && IS_WRITING_UTENSIL(I)) if(!length(GLOB.editable_sign_types)) CRASH("GLOB.editable_sign_types failed to populate") var/choice = tgui_input_list(user, "Select a sign type", "Sign Customization", GLOB.editable_sign_types) @@ -209,11 +209,10 @@ return return ..() -/obj/item/sign/afterattack(atom/target, mob/user, proximity) - . = ..() - if(!iswallturf(target) || !proximity) - return - var/turf/target_turf = target +/obj/item/sign/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + if(!iswallturf(interacting_with)) + return NONE + var/turf/target_turf = interacting_with var/turf/user_turf = get_turf(user) var/obj/structure/sign/placed_sign = new sign_path(user_turf) //We place the sign on the turf the user is standing, and pixel shift it to the target wall, as below. //This is to mimic how signs and other wall objects are usually placed by mappers, and so they're only visible from one side of a wall. @@ -233,6 +232,7 @@ placed_sign.setDir(dir) placed_sign.find_and_hang_on_wall(TRUE, placed_sign.knock_down_callback) qdel(src) + return ITEM_INTERACT_SUCCESS /obj/item/sign/welder_act(mob/living/user, obj/item/I) . = ..() diff --git a/code/game/objects/structures/signs/signs_departments.dm b/code/game/objects/structures/signs/signs_departments.dm index 37015a59cb087..e663ef2411e62 100644 --- a/code/game/objects/structures/signs/signs_departments.dm +++ b/code/game/objects/structures/signs/signs_departments.dm @@ -8,7 +8,7 @@ /obj/structure/sign/departments/med name = "\improper Medbay sign" sign_change_name = "Department - Medbay" - desc = "A sign labeling an area of medical department." + desc = "A sign labelling an area of the medical department." icon_state = "med" MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/departments/med, 32) @@ -23,7 +23,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/departments/med_alt, 32) /obj/structure/sign/departments/medbay name = "\improper Medbay sign" sign_change_name = "Generic Medical" - desc = "The Intergalactic symbol of Medical institutions. You'll probably get help here." + desc = "The intergalactic symbol of medical institutions. You'll probably get help here." icon_state = "bluecross" MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/departments/medbay, 32) @@ -84,7 +84,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/departments/virology, 32) /obj/structure/sign/departments/morgue name = "\improper Morgue sign" sign_change_name = "Department - Medbay: Morgue" - desc = "A sign labelling an area where station stores its ever-piling bodies." + desc = "A sign labelling an area where the station stores its ever-piling bodies." icon_state = "morgue" MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/departments/morgue, 32) diff --git a/code/game/objects/structures/signs/signs_warning.dm b/code/game/objects/structures/signs/signs_warning.dm index b33d05a163a79..db44c75669d8a 100644 --- a/code/game/objects/structures/signs/signs_warning.dm +++ b/code/game/objects/structures/signs/signs_warning.dm @@ -199,7 +199,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/warning/gas_mask, 32) /obj/structure/sign/warning/chem_diamond name = "\improper REACTIVE CHEMICALS sign" sign_change_name = "Warning - Hazardous Chemicals sign" - desc = "A sign that warns of potentially reactive chemicals nearby, be they explosive, flamable, or acidic." + desc = "A sign that warns of potentially reactive chemicals nearby, be they explosive, flammable, or acidic." icon_state = "chemdiamond" MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/warning/chem_diamond, 32) diff --git a/code/game/objects/structures/spawner.dm b/code/game/objects/structures/spawner.dm index 5f9450e435838..743d76ef182b2 100644 --- a/code/game/objects/structures/spawner.dm +++ b/code/game/objects/structures/spawner.dm @@ -70,7 +70,9 @@ spawn_time = spawn_time, \ max_spawned = max_mobs, \ faction = faction, \ - spawn_text = spawn_text, \ + spawn_text = spawn_text,\ + spawn_callback = CALLBACK(src, PROC_REF(on_mob_spawn)), \ + initial_spawn_delay = !mapload, \ ) /obj/structure/spawner/attack_animal(mob/living/simple_animal/user, list/modifiers) @@ -78,6 +80,8 @@ return return ..() +/obj/structure/spawner/proc/on_mob_spawn(atom/created_atom) + return /obj/structure/spawner/syndicate name = "warp beacon" @@ -226,3 +230,74 @@ newmob.desc = "It's [living_mob], but [living_mob.p_their()] flesh has an ashy texture, and [living_mob.p_their()] face is featureless save an eerie smile." src.visible_message(span_warning("[living_mob] reemerges from the link!")) qdel(living_mob) + +/obj/structure/spawner/sentient + var/role_name = "A sentient mob" + var/assumed_control_message = "You are a sentient mob from a badly coded spawner" + +/obj/structure/spawner/sentient/Initialize(mapload) + . = ..() + notify_ghosts( + "A [name] has been created in \the [get_area(src)]!", + source = src, + header = "Sentient Spawner Created", + notify_flags = NOTIFY_CATEGORY_NOFLASH, + ) + +/obj/structure/spawner/sentient/on_mob_spawn(atom/created_atom) + created_atom.AddComponent(\ + /datum/component/ghost_direct_control,\ + role_name = src.role_name,\ + assumed_control_message = src.assumed_control_message,\ + after_assumed_control = CALLBACK(src, PROC_REF(became_player_controlled)),\ + ) + +/obj/structure/spawner/sentient/proc/became_player_controlled(mob/proteon) + return + +/obj/structure/spawner/sentient/proteon_spawner + name = "eldritch gateway" + desc = "A dizzying structure that somehow links into Nar'Sie's own domain. The screams of the damned echo continously." + icon = 'icons/obj/antags/cult/structures.dmi' + icon_state = "hole" + light_power = 2 + light_color = COLOR_CULT_RED + max_integrity = 50 + density = FALSE + max_mobs = 2 + spawn_time = 15 SECONDS + mob_types = list(/mob/living/basic/construct/proteon/hostile) + spawn_text = "arises from" + faction = list(FACTION_CULT) + role_name = "A proteon cult construct" + assumed_control_message = null + +/obj/structure/spawner/sentient/proteon_spawner/examine_status(mob/user) + if(IS_CULTIST(user) || !isliving(user)) + return span_cult("It's at [round(atom_integrity * 100 / max_integrity)]% stability.") + return ..() + +/obj/structure/spawner/sentient/proteon_spawner/examine(mob/user) + . = ..() + if(!IS_CULTIST(user) && isliving(user)) + var/mob/living/living_user = user + living_user.adjustOrganLoss(ORGAN_SLOT_BRAIN, 15) + . += span_danger("The voices of the damned echo relentlessly in your mind, continously rebounding on the walls of your self the more you focus on [src]. Your head pounds, better keep away...") + else + . += span_cult("The gateway will create one weak proteon construct every [spawn_time * 0.1] seconds, up to a total of [max_mobs], that may be controlled by the spirits of the dead.") + +/obj/structure/spawner/sentient/proteon_spawner/became_player_controlled(mob/living/basic/construct/proteon/proteon) + proteon.mind.add_antag_datum(/datum/antagonist/cult) + proteon.add_filter("awoken_proteon", 3, list("type" = "outline", "color" = COLOR_CULT_RED, "size" = 2)) + visible_message(span_cult_bold("[proteon] awakens, glowing an eerie red as it stirs from its stupor!")) + playsound(proteon, 'sound/items/haunted/ghostitemattack.ogg', 100, TRUE) + proteon.balloon_alert_to_viewers("awoken!") + addtimer(CALLBACK(src, PROC_REF(remove_wake_outline), proteon), 8 SECONDS) + +/obj/structure/spawner/sentient/proteon_spawner/proc/remove_wake_outline(mob/proteon) + proteon.remove_filter("awoken_proteon") + proteon.add_filter("sentient_proteon", 3, list("type" = "outline", "color" = COLOR_CULT_RED, "size" = 2, "alpha" = 40)) + +/obj/structure/spawner/sentient/proteon_spawner/handle_deconstruct(disassembled) + playsound('sound/hallucinations/veryfar_noise.ogg', 125) + visible_message(span_cult_bold("[src] completely falls apart, the screams of the damned reaching a feverous pitch before slowly fading away into nothing.")) diff --git a/code/game/objects/structures/syndicate_uplink_beacon.dm b/code/game/objects/structures/syndicate_uplink_beacon.dm index 2106fade55a5c..33e260e8d209a 100644 --- a/code/game/objects/structures/syndicate_uplink_beacon.dm +++ b/code/game/objects/structures/syndicate_uplink_beacon.dm @@ -3,7 +3,7 @@ name = "suspicious beacon" icon = 'icons/obj/machines/telecomms.dmi' icon_state = "relay_traitor" - desc = "This ramshackle device seems capable of recieving and sending signals for some nefarious purpose." + desc = "This ramshackle device seems capable of receiving and sending signals for some nefarious purpose." density = TRUE anchored = TRUE /// Traitor's code that they speak into the radio diff --git a/code/game/objects/structures/tables_racks.dm b/code/game/objects/structures/tables_racks.dm index a44364a3b4c09..69c6aca505f36 100644 --- a/code/game/objects/structures/tables_racks.dm +++ b/code/game/objects/structures/tables_racks.dm @@ -92,7 +92,7 @@ /obj/structure/table/update_icon(updates=ALL) . = ..() - if((updates & UPDATE_SMOOTHING) && (smoothing_flags & (SMOOTH_CORNERS|SMOOTH_BITMASK))) + if((updates & UPDATE_SMOOTHING) && (smoothing_flags & USES_SMOOTHING)) QUEUE_SMOOTH(src) QUEUE_SMOOTH_NEIGHBORS(src) @@ -208,7 +208,7 @@ /obj/structure/table/screwdriver_act_secondary(mob/living/user, obj/item/tool) if(!deconstruction_ready) - return FALSE + return NONE to_chat(user, span_notice("You start disassembling [src]...")) if(tool.use_tool(src, user, 2 SECONDS, volume=50)) deconstruct(TRUE) @@ -216,7 +216,7 @@ /obj/structure/table/wrench_act_secondary(mob/living/user, obj/item/tool) if(!deconstruction_ready) - return FALSE + return NONE to_chat(user, span_notice("You start deconstructing [src]...")) if(tool.use_tool(src, user, 4 SECONDS, volume=50)) playsound(loc, 'sound/items/deconstruct.ogg', 50, TRUE) @@ -224,33 +224,45 @@ deconstruct(TRUE) return ITEM_INTERACT_SUCCESS -/obj/structure/table/attackby(obj/item/I, mob/living/user, params) - var/list/modifiers = params2list(params) - - if(istype(I, /obj/item/storage/bag/tray)) - var/obj/item/storage/bag/tray/T = I - if(T.contents.len > 0) // If the tray isn't empty - for(var/x in T.contents) - var/obj/item/item = x - AfterPutItemOnTable(item, user) - I.atom_storage.remove_all(drop_location()) - user.visible_message(span_notice("[user] empties [I] on [src].")) - return +/obj/structure/table/item_interaction_secondary(mob/living/user, obj/item/tool, list/modifiers) + if(istype(tool, /obj/item/construction/rcd)) + return NONE + + if(istype(tool, /obj/item/toy/cards/deck)) + var/obj/item/toy/cards/deck/dealer_deck = tool + if(HAS_TRAIT(dealer_deck, TRAIT_WIELDED)) // deal a card faceup on the table + var/obj/item/toy/singlecard/card = dealer_deck.draw(user) + if(card) + card.Flip() + attackby(card, user, list2params(modifiers)) + return ITEM_INTERACT_SUCCESS + + return item_interaction(user, tool, modifiers) + +/obj/structure/table/item_interaction(mob/living/user, obj/item/tool, list/modifiers) + if(istype(tool, /obj/item/storage/bag/tray)) + var/obj/item/storage/bag/tray/tray = tool + if(tray.contents.len > 0) // If the tray isn't empty + for(var/obj/item/thing in tray.contents) + AfterPutItemOnTable(thing, user) + tool.atom_storage.remove_all(drop_location()) + user.visible_message(span_notice("[user] empties [tool] on [src].")) + return ITEM_INTERACT_SUCCESS // If the tray IS empty, continue on (tray will be placed on the table like other items) - if(istype(I, /obj/item/toy/cards/deck)) - var/obj/item/toy/cards/deck/dealer_deck = I + if(istype(tool, /obj/item/toy/cards/deck)) + var/obj/item/toy/cards/deck/dealer_deck = tool if(HAS_TRAIT(dealer_deck, TRAIT_WIELDED)) // deal a card facedown on the table var/obj/item/toy/singlecard/card = dealer_deck.draw(user) if(card) - attackby(card, user, params) - return + attackby(card, user, list2params(modifiers)) + return ITEM_INTERACT_SUCCESS - if(istype(I, /obj/item/riding_offhand)) - var/obj/item/riding_offhand/riding_item = I + if(istype(tool, /obj/item/riding_offhand)) + var/obj/item/riding_offhand/riding_item = tool var/mob/living/carried_mob = riding_item.rider if(carried_mob == user) //Piggyback user. - return + return NONE if(user.combat_mode) user.unbuckle_mob(carried_mob) tablelimbsmash(user, carried_mob) @@ -268,32 +280,17 @@ if(do_after(user, tableplace_delay, target = carried_mob)) user.unbuckle_mob(carried_mob) tableplace(user, carried_mob) - return TRUE + return ITEM_INTERACT_SUCCESS - if(!user.combat_mode && !(I.item_flags & ABSTRACT)) - if(user.transferItemToLoc(I, drop_location(), silent = FALSE)) - //Center the icon where the user clicked. - if(!LAZYACCESS(modifiers, ICON_X) || !LAZYACCESS(modifiers, ICON_Y)) - return - //Clamp it so that the icon never moves more than 16 pixels in either direction (thus leaving the table turf) - I.pixel_x = clamp(text2num(LAZYACCESS(modifiers, ICON_X)) - 16, -(world.icon_size/2), world.icon_size/2) - I.pixel_y = clamp(text2num(LAZYACCESS(modifiers, ICON_Y)) - 16, -(world.icon_size/2), world.icon_size/2) - AfterPutItemOnTable(I, user) - return TRUE - else - return ..() + // Where putting things on tables is handled. + if(!user.combat_mode && !(tool.item_flags & ABSTRACT) && user.transferItemToLoc(tool, drop_location(), silent = FALSE)) + //Clamp it so that the icon never moves more than 16 pixels in either direction (thus leaving the table turf) + tool.pixel_x = clamp(text2num(LAZYACCESS(modifiers, ICON_X)) - 16, -(world.icon_size/2), world.icon_size/2) + tool.pixel_y = clamp(text2num(LAZYACCESS(modifiers, ICON_Y)) - 16, -(world.icon_size/2), world.icon_size/2) + AfterPutItemOnTable(tool, user) + return ITEM_INTERACT_SUCCESS -/obj/structure/table/attackby_secondary(obj/item/weapon, mob/user, params) - if(istype(weapon, /obj/item/toy/cards/deck)) - var/obj/item/toy/cards/deck/dealer_deck = weapon - if(HAS_TRAIT(dealer_deck, TRAIT_WIELDED)) // deal a card faceup on the table - var/obj/item/toy/singlecard/card = dealer_deck.draw(user) - if(card) - card.Flip() - attackby(card, user, params) - return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN - ..() - return SECONDARY_ATTACK_CONTINUE_CHAIN + return NONE /obj/structure/table/proc/AfterPutItemOnTable(obj/item/thing, mob/living/user) return @@ -642,23 +639,27 @@ else return span_notice("The top cover is firmly welded on.") -/obj/structure/table/reinforced/attackby_secondary(obj/item/weapon, mob/user, params) - if(weapon.tool_behaviour == TOOL_WELDER) - if(weapon.tool_start_check(user, amount = 0)) - if(deconstruction_ready) - to_chat(user, span_notice("You start strengthening the reinforced table...")) - if (weapon.use_tool(src, user, 50, volume = 50)) - to_chat(user, span_notice("You strengthen the table.")) - deconstruction_ready = FALSE - else - to_chat(user, span_notice("You start weakening the reinforced table...")) - if (weapon.use_tool(src, user, 50, volume = 50)) - to_chat(user, span_notice("You weaken the table.")) - deconstruction_ready = TRUE - return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN +/obj/structure/table/reinforced/welder_act_secondary(mob/living/user, obj/item/tool) + if(tool.tool_start_check(user, amount = 0)) + if(deconstruction_ready) + to_chat(user, span_notice("You start strengthening the reinforced table...")) + if (tool.use_tool(src, user, 50, volume = 50)) + to_chat(user, span_notice("You strengthen the table.")) + deconstruction_ready = FALSE + return ITEM_INTERACT_SUCCESS + else + to_chat(user, span_notice("You start weakening the reinforced table...")) + if (tool.use_tool(src, user, 50, volume = 50)) + to_chat(user, span_notice("You weaken the table.")) + deconstruction_ready = TRUE + return ITEM_INTERACT_SUCCESS + return ITEM_INTERACT_BLOCKING - else - . = ..() +/obj/structure/table/reinforced/item_interaction_secondary(mob/living/user, obj/item/tool, list/modifiers) + if(tool.tool_behaviour == TOOL_WELDER) + return NONE + + return ..() /obj/structure/table/bronze name = "bronze table" diff --git a/code/game/objects/structures/tank_dispenser.dm b/code/game/objects/structures/tank_dispenser.dm index 2c0b3bdc95bbd..2d16ea30a69e4 100644 --- a/code/game/objects/structures/tank_dispenser.dm +++ b/code/game/objects/structures/tank_dispenser.dm @@ -2,7 +2,7 @@ /obj/structure/tank_dispenser name = "tank dispenser" - desc = "A simple yet bulky storage device for gas tanks. Holds up to 10 oxygen tanks and 10 plasma tanks." + desc = "A simple yet bulky storage device for gas tanks." icon = 'icons/obj/structures.dmi' icon_state = "dispenser" density = TRUE @@ -19,6 +19,7 @@ /obj/structure/tank_dispenser/Initialize(mapload) . = ..() + AddElement(/datum/element/contextual_screentip_bare_hands, lmb_text = "Take Plasma Tank", rmb_text = "Take Oxygen Tank") update_appearance() /obj/structure/tank_dispenser/update_overlays() @@ -34,6 +35,25 @@ if(5 to TANK_DISPENSER_CAPACITY) . += "plasma-5" +/obj/structure/tank_dispenser/attack_hand(mob/living/user, list/modifiers) + . = ..() + if (!plasmatanks) + balloon_alert(user, "no plasma tanks!") + return + dispense(/obj/item/tank/internals/plasma, user) + plasmatanks-- + update_appearance() + +/obj/structure/tank_dispenser/attack_hand_secondary(mob/user, list/modifiers) + . = ..() + if (!oxygentanks) + balloon_alert(user, "no oxygen tanks!") + return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN + dispense(/obj/item/tank/internals/oxygen, user) + oxygentanks-- + update_appearance() + return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN + /obj/structure/tank_dispenser/wrench_act(mob/living/user, obj/item/tool) . = ..() default_unfasten_wrench(user, tool) @@ -52,67 +72,37 @@ else full = TRUE else if(!user.combat_mode) - to_chat(user, span_notice("[I] does not fit into [src].")) + balloon_alert(user, "can't insert!") return else return ..() if(full) - to_chat(user, span_notice("[src] can't hold any more of [I].")) + balloon_alert(user, "it is full!") return if(!user.transferItemToLoc(I, src)) return - to_chat(user, span_notice("You put [I] in [src].")) + balloon_alert(user, "tank inserted") update_appearance() -/obj/structure/tank_dispenser/ui_state(mob/user) - return GLOB.physical_state - -/obj/structure/tank_dispenser/ui_interact(mob/user, datum/tgui/ui) - ui = SStgui.try_update_ui(user, src, ui) - if(!ui) - ui = new(user, src, "TankDispenser", name) - ui.open() - -/obj/structure/tank_dispenser/ui_data(mob/user) - var/list/data = list() - data["oxygen"] = oxygentanks - data["plasma"] = plasmatanks - - return data - -/obj/structure/tank_dispenser/ui_act(action, params) - . = ..() - if(.) - return - switch(action) - if("plasma") - if (plasmatanks == 0) - return TRUE - - dispense(/obj/item/tank/internals/plasma, usr) - plasmatanks-- - if("oxygen") - if (oxygentanks == 0) - return TRUE - - dispense(/obj/item/tank/internals/oxygen, usr) - oxygentanks-- - - update_appearance() - return TRUE - - /obj/structure/tank_dispenser/atom_deconstruct(disassembled = TRUE) for(var/X in src) var/obj/item/I = X I.forceMove(loc) new /obj/item/stack/sheet/iron (loc, 2) +/obj/structure/tank_dispenser/examine(mob/user) + . = ..() + if(plasmatanks && oxygentanks) + . += span_notice("It has [plasmatanks] plasma tank\s and [oxygentanks] oxygen tank\s left.") + else if(plasmatanks || oxygentanks) + . += span_notice("It has [plasmatanks ? "[plasmatanks] plasma" : "[oxygentanks] oxygen"] tank\s left.") + /obj/structure/tank_dispenser/proc/dispense(tank_type, mob/receiver) var/existing_tank = locate(tank_type) in src if (isnull(existing_tank)) existing_tank = new tank_type receiver.put_in_hands(existing_tank) + balloon_alert(receiver, "tank received") #undef TANK_DISPENSER_CAPACITY diff --git a/code/game/objects/structures/training_machine.dm b/code/game/objects/structures/training_machine.dm index c2f4d3a18ae1b..bed4c4805cca6 100644 --- a/code/game/objects/structures/training_machine.dm +++ b/code/game/objects/structures/training_machine.dm @@ -360,12 +360,17 @@ ///Number of hits made since the Lap button (alt-click) was last pushed var/lap_hits = 0 -/obj/item/training_toolbox/afterattack(atom/target, mob/living/user, proximity) +/obj/item/training_toolbox/pre_attack(atom/A, mob/living/user, params) . = ..() - if (!proximity || target == user || !user.combat_mode) - return - if (check_hit(target)) - user.changeNext_move(CLICK_CD_MELEE) + if(.) + return . + if(A == user || !user.combat_mode) + return . + if(!check_hit(A)) + return . + user.changeNext_move(CLICK_CD_MELEE) + user.do_attack_animation(A) + return TRUE /** * Check if we should increment the hit counter diff --git a/code/game/objects/structures/transit_tubes/station.dm b/code/game/objects/structures/transit_tubes/station.dm index 3eeb81cb8aca5..8fc1426c5f36d 100644 --- a/code/game/objects/structures/transit_tubes/station.dm +++ b/code/game/objects/structures/transit_tubes/station.dm @@ -14,6 +14,7 @@ exit_delay = 1 enter_delay = 2 tube_construction = /obj/structure/c_transit_tube/station + var/open_status = STATION_TUBE_CLOSED var/pod_moving = FALSE var/cooldown_delay = 50 @@ -40,14 +41,9 @@ pod.update_appearance() return - //pod insertion -/obj/structure/transit_tube/station/MouseDrop_T(obj/structure/c_transit_tube_pod/R, mob/user) - if(isliving(user)) - var/mob/living/L = user - if(L.incapacitated()) - return - if (!istype(R) || get_dist(user, src) > 1 || get_dist(src,R) > 1) +/obj/structure/transit_tube/station/mouse_drop_receive(obj/structure/c_transit_tube_pod/R, mob/user, params) + if (!istype(R) || get_dist(user, src) > 1 || get_dist(src, R) > 1) return for(var/obj/structure/transit_tube_pod/pod in loc) return //no fun allowed diff --git a/code/game/objects/structures/transit_tubes/transit_tube_pod.dm b/code/game/objects/structures/transit_tubes/transit_tube_pod.dm index 48848df0fd51f..f88aadc04631f 100644 --- a/code/game/objects/structures/transit_tubes/transit_tube_pod.dm +++ b/code/game/objects/structures/transit_tubes/transit_tube_pod.dm @@ -94,7 +94,7 @@ moving = TRUE current_tube = tube - var/datum/move_loop/engine = DSmove_manager.force_move_dir(src, dir, 0, priority = MOVEMENT_ABOVE_SPACE_PRIORITY) + var/datum/move_loop/engine = GLOB.move_manager.force_move_dir(src, dir, 0, priority = MOVEMENT_ABOVE_SPACE_PRIORITY) RegisterSignal(engine, COMSIG_MOVELOOP_PREPROCESS_CHECK, PROC_REF(before_pipe_transfer)) RegisterSignal(engine, COMSIG_MOVELOOP_POSTPROCESS, PROC_REF(after_pipe_transfer)) RegisterSignal(engine, COMSIG_QDELETING, PROC_REF(engine_finish)) diff --git a/code/game/objects/structures/traps.dm b/code/game/objects/structures/traps.dm index 1b6f1da06b6ea..0cf5ddf7c9130 100644 --- a/code/game/objects/structures/traps.dm +++ b/code/game/objects/structures/traps.dm @@ -102,7 +102,7 @@ /obj/structure/trap/stun/hunter name = "bounty trap" desc = "A trap that only goes off when a fugitive steps on it, announcing the location and stunning the target. You'd better avoid it." - icon = 'icons/obj/restraints.dmi' + icon = 'icons/obj/weapons/restraints.dmi' icon_state = "bounty_trap_on" stun_time = 20 SECONDS sparks = FALSE //the item version gives them off to prevent runtimes (see Destroy()) @@ -143,7 +143,7 @@ /obj/item/bountytrap name = "bounty trap" desc = "A trap that only goes off when a fugitive steps on it, announcing the location and stunning the target. It's currently inactive." - icon = 'icons/obj/restraints.dmi' + icon = 'icons/obj/weapons/restraints.dmi' icon_state = "bounty_trap_off" var/obj/structure/trap/stun/hunter/stored_trap var/obj/item/radio/radio @@ -200,6 +200,8 @@ icon_state = "trap-frost" /obj/structure/trap/chill/trap_effect(mob/living/victim) + if(HAS_TRAIT(victim, TRAIT_RESISTCOLD)) + return to_chat(victim, span_bolddanger("You're frozen solid!")) victim.Paralyze(2 SECONDS) victim.adjust_bodytemperature(-300) diff --git a/code/game/objects/structures/water_structures/sink.dm b/code/game/objects/structures/water_structures/sink.dm new file mode 100644 index 0000000000000..24cb2e806965f --- /dev/null +++ b/code/game/objects/structures/water_structures/sink.dm @@ -0,0 +1,308 @@ +/obj/structure/sink + name = "sink" + icon = 'icons/obj/watercloset.dmi' + icon_state = "sink" + desc = "A sink used for washing one's hands and face. Passively reclaims water over time." + anchored = TRUE + layer = ABOVE_OBJ_LAYER + pixel_z = 1 + ///Something's being washed at the moment + var/busy = FALSE + ///What kind of reagent is produced by this sink by default? (We now have actual plumbing, Arcane, August 2020) + var/dispensedreagent = /datum/reagent/water + ///Material to drop when broken or deconstructed. + var/buildstacktype = /obj/item/stack/sheet/iron + ///Number of sheets of material to drop when broken or deconstructed. + var/buildstackamount = 1 + ///Does the sink have a water recycler to recollect it's water supply? + var/has_water_reclaimer = TRUE + ///Units of water to reclaim per second + var/reclaim_rate = 0.5 + ///Amount of shift the pixel for placement + var/pixel_shift = 14 + +MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sink, (-14)) + +/obj/structure/sink/Initialize(mapload, ndir = 0, has_water_reclaimer = null) + . = ..() + + if(ndir) + dir = ndir + + if(has_water_reclaimer != null) + src.has_water_reclaimer = has_water_reclaimer + + switch(dir) + if(NORTH) + pixel_x = 0 + pixel_y = -pixel_shift + if(SOUTH) + pixel_x = 0 + pixel_y = pixel_shift + if(EAST) + pixel_x = -pixel_shift + pixel_y = 0 + if(WEST) + pixel_x = pixel_shift + pixel_y = 0 + + create_reagents(100, NO_REACT) + if(src.has_water_reclaimer) + reagents.add_reagent(dispensedreagent, 100) + AddComponent(/datum/component/plumbing/simple_demand, extend_pipe_to_edge = TRUE) + +/obj/structure/sink/examine(mob/user) + . = ..() + if(has_water_reclaimer) + . += span_notice("A water recycler is installed. It looks like you could pry it out.") + . += span_notice("[reagents.total_volume]/[reagents.maximum_volume] liquids remaining.") + +/obj/structure/sink/attack_hand(mob/living/user, list/modifiers) + . = ..() + if(.) + return + if(!user || !istype(user)) + return + if(!iscarbon(user)) + return + if(!Adjacent(user)) + return + if(reagents.total_volume < 5) + to_chat(user, span_warning("The sink has no more contents left!")) + return + if(busy) + to_chat(user, span_warning("Someone's already washing here!")) + return + var/selected_area = user.parse_zone_with_bodypart(user.zone_selected) + var/washing_face = 0 + if(selected_area in list(BODY_ZONE_HEAD, BODY_ZONE_PRECISE_MOUTH, BODY_ZONE_PRECISE_EYES)) + washing_face = 1 + user.visible_message(span_notice("[user] starts washing [user.p_their()] [washing_face ? "face" : "hands"]..."), \ + span_notice("You start washing your [washing_face ? "face" : "hands"]...")) + busy = TRUE + + if(!do_after(user, 4 SECONDS, target = src)) + busy = FALSE + return + + busy = FALSE + reagents.remove_all(5) + reagents.expose(user, TOUCH, 5 / max(reagents.total_volume, 5)) + begin_reclamation() + if(washing_face) + SEND_SIGNAL(user, COMSIG_COMPONENT_CLEAN_FACE_ACT, CLEAN_WASH) + else if(ishuman(user)) + var/mob/living/carbon/human/human_user = user + if(!human_user.wash_hands(CLEAN_WASH)) + to_chat(user, span_warning("Your hands are covered by something!")) + return + else + user.wash(CLEAN_WASH) + + user.visible_message(span_notice("[user] washes [user.p_their()] [washing_face ? "face" : "hands"] using [src]."), \ + span_notice("You wash your [washing_face ? "face" : "hands"] using [src].")) + +/obj/structure/sink/attackby(obj/item/O, mob/living/user, params) + if(busy) + to_chat(user, span_warning("Someone's already washing here!")) + return + + if(is_reagent_container(O)) + var/obj/item/reagent_containers/RG = O + if(reagents.total_volume <= 0) + to_chat(user, span_notice("\The [src] is dry.")) + return FALSE + if(RG.is_refillable()) + if(!RG.reagents.holder_full()) + reagents.trans_to(RG, RG.amount_per_transfer_from_this, transferred_by = user) + begin_reclamation() + to_chat(user, span_notice("You fill [RG] from [src].")) + return TRUE + to_chat(user, span_notice("\The [RG] is full.")) + return FALSE + + if(istype(O, /obj/item/melee/baton/security)) + var/obj/item/melee/baton/security/baton = O + if(baton.cell?.charge && baton.active) + flick("baton_active", src) + user.Paralyze(baton.knockdown_time) + user.set_stutter(baton.knockdown_time) + baton.cell.use(baton.cell_hit_cost) + user.visible_message(span_warning("[user] shocks [user.p_them()]self while attempting to wash the active [baton.name]!"), \ + span_userdanger("You unwisely attempt to wash [baton] while it's still on.")) + playsound(src, baton.on_stun_sound, 50, TRUE) + return + + if(istype(O, /obj/item/mop)) + if(reagents.total_volume <= 0) + to_chat(user, span_notice("\The [src] is dry.")) + return FALSE + reagents.trans_to(O, 5, transferred_by = user) + begin_reclamation() + to_chat(user, span_notice("You wet [O] in [src].")) + playsound(loc, 'sound/effects/slosh.ogg', 25, TRUE) + return + + if(O.tool_behaviour == TOOL_WRENCH) + O.play_tool_sound(src) + deconstruct() + return + + if(O.tool_behaviour == TOOL_CROWBAR) + if(!has_water_reclaimer) + to_chat(user, span_warning("There isn't a water recycler to remove.")) + return + + O.play_tool_sound(src) + has_water_reclaimer = FALSE + new/obj/item/stock_parts/water_recycler(get_turf(loc)) + to_chat(user, span_notice("You remove the water reclaimer from [src]")) + return + + if(istype(O, /obj/item/stack/medical/gauze)) + var/obj/item/stack/medical/gauze/G = O + new /obj/item/reagent_containers/cup/rag(src.loc) + to_chat(user, span_notice("You tear off a strip of gauze and make a rag.")) + G.use(1) + return + + if(istype(O, /obj/item/stack/sheet/cloth)) + var/obj/item/stack/sheet/cloth/cloth = O + new /obj/item/reagent_containers/cup/rag(loc) + to_chat(user, span_notice("You tear off a strip of cloth and make a rag.")) + cloth.use(1) + return + + if(istype(O, /obj/item/stack/ore/glass)) + new /obj/item/stack/sheet/sandblock(loc) + to_chat(user, span_notice("You wet the sand in the sink and form it into a block.")) + O.use(1) + return + + if(istype(O, /obj/item/stock_parts/water_recycler)) + if(has_water_reclaimer) + to_chat(user, span_warning("There is already has a water recycler installed.")) + return + + playsound(src, 'sound/machines/click.ogg', 20, TRUE) + qdel(O) + has_water_reclaimer = TRUE + begin_reclamation() + return + + if(istype(O, /obj/item/storage/fancy/pickles_jar)) + if(O.contents.len) + to_chat(user, span_notice("Looks like there's something left in the jar")) + return + new /obj/item/reagent_containers/cup/beaker/large(loc) + to_chat(user, span_notice("You washed the jar, ridding it of the brine.")) + qdel(O) + return + + if(!istype(O)) + return + if(O.item_flags & ABSTRACT) //Abstract items like grabs won't wash. No-drop items will though because it's still technically an item in your hand. + return + + if(!user.combat_mode) + to_chat(user, span_notice("You start washing [O]...")) + busy = TRUE + if(!do_after(user, 4 SECONDS, target = src)) + busy = FALSE + return 1 + busy = FALSE + O.wash(CLEAN_WASH) + reagents.expose(O, TOUCH, 5 / max(reagents.total_volume, 5)) + user.visible_message(span_notice("[user] washes [O] using [src]."), \ + span_notice("You wash [O] using [src].")) + return 1 + else + return ..() + +/obj/structure/sink/atom_deconstruct(dissambled = TRUE) + drop_materials() + if(has_water_reclaimer) + new /obj/item/stock_parts/water_recycler(drop_location()) + +/obj/structure/sink/process(seconds_per_tick) + // Water reclamation complete? + if(!has_water_reclaimer || reagents.total_volume >= reagents.maximum_volume) + return PROCESS_KILL + + reagents.add_reagent(dispensedreagent, reclaim_rate * seconds_per_tick) + +/obj/structure/sink/proc/drop_materials() + if(buildstacktype) + new buildstacktype(loc,buildstackamount) + else + for(var/i in custom_materials) + var/datum/material/M = i + new M.sheet_type(loc, FLOOR(custom_materials[M] / SHEET_MATERIAL_AMOUNT, 1)) + +/obj/structure/sink/proc/begin_reclamation() + START_PROCESSING(SSplumbing, src) + +/obj/structure/sink/kitchen + name = "kitchen sink" + icon_state = "sink_alt" + pixel_z = 4 + pixel_shift = 16 + +MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sink/kitchen, (-16)) + +/obj/structure/sink/gasstation + name = "plasma fuel station" + desc = "A place to refuel vehicles with liquid plasma. It can also dispense into a container." + icon_state = "sink_gasstation" + dispensedreagent = /datum/reagent/toxin/plasma + has_water_reclaimer = FALSE + +/obj/structure/sink/greyscale + icon_state = "sink_greyscale" + material_flags = MATERIAL_EFFECTS | MATERIAL_ADD_PREFIX | MATERIAL_COLOR | MATERIAL_AFFECT_STATISTICS + buildstacktype = null + +/obj/structure/sinkframe + name = "sink frame" + icon = 'icons/obj/watercloset.dmi' + icon_state = "sink_frame" + desc = "A sink frame, that needs a water recycler to finish construction." + anchored = FALSE + material_flags = MATERIAL_EFFECTS | MATERIAL_ADD_PREFIX | MATERIAL_COLOR | MATERIAL_AFFECT_STATISTICS + +/obj/structure/sinkframe/Initialize(mapload) + . = ..() + AddComponent(/datum/component/simple_rotation) + +/obj/structure/sinkframe/attackby(obj/item/tool, mob/living/user, params) + if(istype(tool, /obj/item/stock_parts/water_recycler)) + qdel(tool) + var/obj/structure/sink/greyscale/new_sink = new(loc, REVERSE_DIR(dir), TRUE) + new_sink.set_custom_materials(custom_materials) + qdel(src) + playsound(new_sink, 'sound/machines/click.ogg', 20, TRUE) + return + return ..() + +/obj/structure/sinkframe/wrench_act(mob/living/user, obj/item/tool) + . = ..() + + tool.play_tool_sound(src) + var/obj/structure/sink/greyscale/new_sink = new(loc, REVERSE_DIR(dir), FALSE) + new_sink.set_custom_materials(custom_materials) + qdel(src) + + return TRUE + +/obj/structure/sinkframe/wrench_act_secondary(mob/living/user, obj/item/tool) + . = ..() + tool.play_tool_sound(src) + deconstruct() + return TRUE + +/obj/structure/sinkframe/atom_deconstruct(dissambled = TRUE) + drop_materials() + +/obj/structure/sinkframe/proc/drop_materials() + for(var/datum/material/material as anything in custom_materials) + new material.sheet_type(loc, FLOOR(custom_materials[material] / SHEET_MATERIAL_AMOUNT, 1)) diff --git a/code/game/objects/structures/water_structures/toilet.dm b/code/game/objects/structures/water_structures/toilet.dm new file mode 100644 index 0000000000000..7a64404a238a9 --- /dev/null +++ b/code/game/objects/structures/water_structures/toilet.dm @@ -0,0 +1,271 @@ +/obj/structure/toilet + name = "toilet" + desc = "The HT-451, a torque rotation-based, waste disposal unit for small matter. This one seems remarkably clean." + icon = 'icons/obj/watercloset.dmi' + icon_state = "toilet00" //The first number represents if the toilet lid is up, the second is if the cistern is open. + base_icon_state = "toilet" + density = FALSE + anchored = TRUE + + ///Boolean if whether the toilet is currently flushing. + var/flushing = FALSE + ///Boolean if the toilet seat is up. + var/cover_open = FALSE + ///Boolean if the cistern is up, allowing items to be put in/out. + var/cistern_open = FALSE + ///The combined weight of all items in the cistern put together. + var/w_items = 0 + ///Reference to the mob being given a swirlie. + var/mob/living/swirlie + ///The type of material used to build the toilet. + var/buildstacktype = /obj/item/stack/sheet/iron + ///How much of the buildstacktype is needed to construct the toilet. + var/buildstackamount = 1 + ///Lazylist of items in the cistern. + var/list/cistern_items + ///Lazylist of fish in the toilet, not to be mixed with the items in the cistern. Max of 3 + var/list/fishes + ///Static toilet water overlay given to toilets that are facing a direction we can see the water in. + var/static/mutable_appearance/toilet_water_overlay + +/obj/structure/toilet/Initialize(mapload) + . = ..() + if(isnull(toilet_water_overlay)) + toilet_water_overlay = mutable_appearance(icon, "[base_icon_state]-water") + cover_open = round(rand(0, 1)) + update_appearance(UPDATE_ICON) + if(mapload && SSmapping.level_trait(z, ZTRAIT_STATION)) + AddElement(/datum/element/lazy_fishing_spot, /datum/fish_source/toilet) + register_context() + +/obj/structure/toilet/add_context(atom/source, list/context, obj/item/held_item, mob/user) + . = ..() + if(user.pulling && isliving(user.pulling)) + context[SCREENTIP_CONTEXT_LMB] = "Give Swirlie" + else if(cover_open && istype(held_item, /obj/item/fish)) + context[SCREENTIP_CONTEXT_LMB] = "Insert Fish" + else if(cover_open && LAZYLEN(fishes)) + context[SCREENTIP_CONTEXT_LMB] = "Grab Fish" + else if(cistern_open) + if(isnull(held_item)) + context[SCREENTIP_CONTEXT_LMB] = "Check Cistern" + else + context[SCREENTIP_CONTEXT_LMB] = "Insert Item" + context[SCREENTIP_CONTEXT_RMB] = "Flush" + context[SCREENTIP_CONTEXT_ALT_LMB] = "[cover_open ? "Close" : "Open"] Lid" + return CONTEXTUAL_SCREENTIP_SET + +/obj/structure/toilet/examine(mob/user) + . = ..() + if(cover_open && LAZYLEN(fishes)) + . += span_notice("You can see fish in the toilet, you can probably take one out.") + +/obj/structure/toilet/examine_more(mob/user) + . = ..() + if(cistern_open && LAZYLEN(cistern_items)) + . += span_notice("You can see [cistern_items.len] items inside of the cistern.") + +/obj/structure/toilet/Destroy(force) + . = ..() + QDEL_LAZYLIST(fishes) + QDEL_LAZYLIST(cistern_items) + +/obj/structure/toilet/Exited(atom/movable/gone, direction) + . = ..() + if(gone in cistern_items) + LAZYREMOVE(cistern_items, gone) + return + if(gone in fishes) + LAZYREMOVE(fishes, gone) + return + +/obj/structure/toilet/attack_hand(mob/living/user, list/modifiers) + . = ..() + if(.) + return + + if(swirlie) + user.changeNext_move(CLICK_CD_MELEE) + playsound(src.loc, SFX_SWING_HIT, 25, TRUE) + swirlie.visible_message(span_danger("[user] slams the toilet seat onto [swirlie]'s head!"), span_userdanger("[user] slams the toilet seat onto your head!"), span_hear("You hear reverberating porcelain.")) + log_combat(user, swirlie, "swirlied (brute)") + swirlie.adjustBruteLoss(5) + return + + if(user.pulling && isliving(user.pulling)) + user.changeNext_move(CLICK_CD_MELEE) + var/mob/living/grabbed_mob = user.pulling + if(user.grab_state < GRAB_AGGRESSIVE) + to_chat(user, span_warning("You need a tighter grip!")) + return + if(grabbed_mob.loc != get_turf(src)) + to_chat(user, span_warning("[grabbed_mob] needs to be on [src]!")) + return + if(swirlie) + return + if(cover_open) + grabbed_mob.visible_message(span_danger("[user] starts to give [grabbed_mob] a swirlie!"), span_userdanger("[user] starts to give you a swirlie...")) + swirlie = grabbed_mob + var/was_alive = (swirlie.stat != DEAD) + if(!do_after(user, 3 SECONDS, target = src, timed_action_flags = IGNORE_HELD_ITEM)) + swirlie = null + return + grabbed_mob.visible_message(span_danger("[user] gives [grabbed_mob] a swirlie!"), span_userdanger("[user] gives you a swirlie!"), span_hear("You hear a toilet flushing.")) + if(iscarbon(grabbed_mob)) + var/mob/living/carbon/carbon_grabbed = grabbed_mob + if(!carbon_grabbed.internal) + log_combat(user, carbon_grabbed, "swirlied (oxy)") + carbon_grabbed.adjustOxyLoss(5) + else + log_combat(user, grabbed_mob, "swirlied (oxy)") + grabbed_mob.adjustOxyLoss(5) + if(was_alive && swirlie.stat == DEAD && swirlie.client) + swirlie.client.give_award(/datum/award/achievement/misc/swirlie, swirlie) // just like space high school all over again! + swirlie = null + else + playsound(src.loc, 'sound/effects/bang.ogg', 25, TRUE) + grabbed_mob.visible_message(span_danger("[user] slams [grabbed_mob.name] into [src]!"), span_userdanger("[user] slams you into [src]!")) + log_combat(user, grabbed_mob, "toilet slammed") + grabbed_mob.adjustBruteLoss(5) + return + + if(cistern_open && !cover_open && user.CanReach(src)) + if(!LAZYLEN(cistern_items)) + to_chat(user, span_notice("The cistern is empty.")) + return + var/obj/item/random_cistern_item = pick(cistern_items) + if(ishuman(user)) + user.put_in_hands(random_cistern_item) + else + random_cistern_item.forceMove(drop_location()) + to_chat(user, span_notice("You find [random_cistern_item] in the cistern.")) + w_items -= random_cistern_item.w_class + return + + if(!flushing && LAZYLEN(fishes) && cover_open) + var/obj/item/random_fish = pick(fishes) + if(ishuman(user)) + user.put_in_hands(random_fish) + else + random_fish.forceMove(drop_location()) + to_chat(user, span_notice("You take [random_fish] out of the toilet, poor thing.")) + +/obj/structure/toilet/click_alt(mob/living/user) + if(flushing) + return CLICK_ACTION_BLOCKING + cover_open = !cover_open + update_appearance(UPDATE_ICON) + return CLICK_ACTION_SUCCESS + +/obj/structure/toilet/attack_hand_secondary(mob/user, list/modifiers) + . = ..() + if(flushing) + return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN + flushing = TRUE + playsound(src, 'sound/machines/toilet_flush.ogg', cover_open ? 40 : 20, TRUE) + if(cover_open && (dir & SOUTH)) + update_appearance(UPDATE_OVERLAYS) + flick_overlay_view(mutable_appearance(icon, "[base_icon_state]-water-flick"), 3 SECONDS) + addtimer(CALLBACK(src, PROC_REF(end_flushing)), 4 SECONDS) + return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN + +/obj/structure/toilet/update_icon_state() + icon_state = "[base_icon_state][cover_open][cistern_open]" + return ..() + +/obj/structure/toilet/update_overlays() + . = ..() + if(!flushing && cover_open && (dir & SOUTH)) + . += toilet_water_overlay + +/obj/structure/toilet/atom_deconstruct(dissambled = TRUE) + for(var/obj/toilet_item in cistern_items) + toilet_item.forceMove(drop_location()) + if(buildstacktype) + new buildstacktype(loc,buildstackamount) + else + for(var/datum/material/M as anything in custom_materials) + new M.sheet_type(loc, FLOOR(custom_materials[M] / SHEET_MATERIAL_AMOUNT, 1)) + +/obj/structure/toilet/attackby(obj/item/attacking_item, mob/living/user, params) + add_fingerprint(user) + if(cover_open && istype(attacking_item, /obj/item/fish)) + if(fishes >= 3) + to_chat(user, span_warning("There's too many fishes, flush them down first.")) + return + if(!user.transferItemToLoc(attacking_item, src)) + to_chat(user, span_warning("\The [attacking_item] is stuck to your hand!")) + return + var/obj/item/fish/the_fish = attacking_item + if(the_fish.status == FISH_DEAD) + to_chat(user, span_warning("You place [attacking_item] into [src], may it rest in peace.")) + else + to_chat(user, span_notice("You place [attacking_item] into [src], hopefully no one will miss it!")) + LAZYADD(fishes, attacking_item) + return + + if(cistern_open && !user.combat_mode) + if(attacking_item.w_class > WEIGHT_CLASS_NORMAL) + to_chat(user, span_warning("[attacking_item] does not fit!")) + return + if(w_items + attacking_item.w_class > WEIGHT_CLASS_HUGE) + to_chat(user, span_warning("The cistern is full!")) + return + if(!user.transferItemToLoc(attacking_item, src)) + to_chat(user, span_warning("\The [attacking_item] is stuck to your hand, you cannot put it in the cistern!")) + return + LAZYADD(cistern_items, attacking_item) + w_items += attacking_item.w_class + to_chat(user, span_notice("You carefully place [attacking_item] into the cistern.")) + return + + if(is_reagent_container(attacking_item) && !user.combat_mode) + if (!cover_open) + return + if(istype(attacking_item, /obj/item/food/monkeycube)) + var/obj/item/food/monkeycube/cube = attacking_item + cube.Expand() + return + var/obj/item/reagent_containers/RG = attacking_item + RG.reagents.add_reagent(/datum/reagent/water, min(RG.volume - RG.reagents.total_volume, RG.amount_per_transfer_from_this)) + to_chat(user, span_notice("You fill [RG] from [src]. Gross.")) + return ..() + +/obj/structure/toilet/crowbar_act(mob/living/user, obj/item/tool) + to_chat(user, span_notice("You start to [cistern_open ? "replace the lid on" : "lift the lid off"] the cistern...")) + playsound(loc, 'sound/effects/stonedoor_openclose.ogg', 50, TRUE) + if(tool.use_tool(src, user, 30)) + user.visible_message( + span_notice("[user] [cistern_open ? "replaces the lid on" : "lifts the lid off"] the cistern!"), + span_notice("You [cistern_open ? "replace the lid on" : "lift the lid off"] the cistern!"), + span_hear("You hear grinding porcelain.")) + cistern_open = !cistern_open + update_appearance(UPDATE_ICON_STATE) + return ITEM_INTERACT_SUCCESS + +/obj/structure/toilet/wrench_act(mob/living/user, obj/item/tool) + tool.play_tool_sound(src) + deconstruct() + return ITEM_INTERACT_SUCCESS + +///Ends the flushing animation and updates overlays if necessary +/obj/structure/toilet/proc/end_flushing() + flushing = FALSE + if(cover_open && (dir & SOUTH)) + update_appearance(UPDATE_OVERLAYS) + QDEL_LAZYLIST(fishes) + +/obj/structure/toilet/greyscale + material_flags = MATERIAL_EFFECTS | MATERIAL_ADD_PREFIX | MATERIAL_COLOR | MATERIAL_AFFECT_STATISTICS + buildstacktype = null + +/obj/structure/toilet/secret + var/secret_type = null + +/obj/structure/toilet/secret/Initialize(mapload) + . = ..() + if(secret_type) + var/obj/item/secret = new secret_type(src) + secret.desc += " It's a secret!" + w_items += secret.w_class + LAZYADD(cistern_items, secret) diff --git a/code/game/objects/structures/water_structures/urinal.dm b/code/game/objects/structures/water_structures/urinal.dm new file mode 100644 index 0000000000000..3b34e2cc0e5b8 --- /dev/null +++ b/code/game/objects/structures/water_structures/urinal.dm @@ -0,0 +1,116 @@ +/obj/structure/urinal + name = "urinal" + desc = "The HU-452, an experimental urinal. Comes complete with experimental urinal cake." + icon = 'icons/obj/watercloset.dmi' + icon_state = "urinal" + density = FALSE + anchored = TRUE + /// Can you currently put an item inside + var/exposed = FALSE + /// What's in the urinal + var/obj/item/hidden_item + +MAPPING_DIRECTIONAL_HELPERS(/obj/structure/urinal, 32) + +/obj/structure/urinal/Initialize(mapload) + . = ..() + if(mapload) + hidden_item = new /obj/item/food/urinalcake(src) + find_and_hang_on_wall() + +/obj/structure/urinal/Exited(atom/movable/gone, direction) + . = ..() + if(gone == hidden_item) + hidden_item = null + +/obj/structure/urinal/attack_hand(mob/living/user, list/modifiers) + . = ..() + if(.) + return + + if(user.pulling && isliving(user.pulling)) + var/mob/living/grabbed_mob = user.pulling + if(user.grab_state >= GRAB_AGGRESSIVE) + if(grabbed_mob.loc != get_turf(src)) + to_chat(user, span_notice("[grabbed_mob.name] needs to be on [src].")) + return + user.changeNext_move(CLICK_CD_MELEE) + user.visible_message(span_danger("[user] slams [grabbed_mob] into [src]!"), span_danger("You slam [grabbed_mob] into [src]!")) + grabbed_mob.emote("scream") + grabbed_mob.adjustBruteLoss(8) + else + to_chat(user, span_warning("You need a tighter grip!")) + return + + if(exposed) + if(hidden_item) + to_chat(user, span_notice("You fish [hidden_item] out of the drain enclosure.")) + user.put_in_hands(hidden_item) + else + to_chat(user, span_warning("There is nothing in the drain holder!")) + return + return ..() + +/obj/structure/urinal/attackby(obj/item/attacking_item, mob/user, params) + if(exposed) + if(hidden_item) + to_chat(user, span_warning("There is already something in the drain enclosure!")) + return + if(attacking_item.w_class > WEIGHT_CLASS_TINY) + to_chat(user, span_warning("[attacking_item] is too large for the drain enclosure.")) + return + if(!user.transferItemToLoc(attacking_item, src)) + to_chat(user, span_warning("[attacking_item] is stuck to your hand, you cannot put it in the drain enclosure!")) + return + hidden_item = attacking_item + to_chat(user, span_notice("You place [attacking_item] into the drain enclosure.")) + return + return ..() + +/obj/structure/urinal/screwdriver_act(mob/living/user, obj/item/I) + if(..()) + return TRUE + to_chat(user, span_notice("You start to [exposed ? "screw the cap back into place" : "unscrew the cap to the drain protector"]...")) + playsound(loc, 'sound/effects/stonedoor_openclose.ogg', 50, TRUE) + if(I.use_tool(src, user, 20)) + user.visible_message(span_notice("[user] [exposed ? "screws the cap back into place" : "unscrew the cap to the drain protector"]!"), + span_notice("You [exposed ? "screw the cap back into place" : "unscrew the cap on the drain"]!"), + span_hear("You hear metal and squishing noises.")) + exposed = !exposed + return TRUE + +/obj/structure/urinal/wrench_act_secondary(mob/living/user, obj/item/tool) + tool.play_tool_sound(user) + deconstruct(TRUE) + balloon_alert(user, "removed urinal") + return ITEM_INTERACT_SUCCESS + +/obj/structure/urinal/atom_deconstruct(disassembled = TRUE) + new /obj/item/wallframe/urinal(loc) + hidden_item?.forceMove(drop_location()) + +/obj/item/wallframe/urinal + name = "urinal frame" + desc = "An unmounted urinal. Attach it to a wall to use." + icon = 'icons/obj/watercloset.dmi' + icon_state = "urinal" + result_path = /obj/structure/urinal + pixel_shift = 32 + +/obj/item/food/urinalcake + name = "urinal cake" + desc = "The noble urinal cake, protecting the station's pipes from the station's pee. Do not eat." + icon = 'icons/obj/watercloset.dmi' + icon_state = "urinalcake" + w_class = WEIGHT_CLASS_TINY + food_reagents = list( + /datum/reagent/chlorine = 3, + /datum/reagent/ammonia = 1, + ) + foodtypes = TOXIC | GROSS + preserved_food = TRUE + +/obj/item/food/urinalcake/attack_self(mob/living/user) + user.visible_message(span_notice("[user] squishes [src]!"), span_notice("You squish [src]."), "You hear a squish.") + icon_state = "urinalcake_squish" + addtimer(VARSET_CALLBACK(src, icon_state, "urinalcake"), 0.8 SECONDS) diff --git a/code/game/objects/structures/water_structures/water_source.dm b/code/game/objects/structures/water_structures/water_source.dm new file mode 100644 index 0000000000000..b7ad26a65ea7e --- /dev/null +++ b/code/game/objects/structures/water_structures/water_source.dm @@ -0,0 +1,149 @@ +//Water source, use the type water_source for unlimited water sources like classic sinks. +/obj/structure/water_source + name = "Water Source" + icon = 'icons/obj/watercloset.dmi' + icon_state = "sink" + desc = "A sink used for washing one's hands and face. This one seems to be infinite!" + anchored = TRUE + ///Boolean on whether something is currently being washed, preventing multiple people from cleaning at once. + var/busy = FALSE + ///The reagent that is dispensed from this source, by default it's water. + var/datum/reagent/dispensedreagent = /datum/reagent/water + +/obj/structure/water_source/Initialize(mapload) + . = ..() + create_reagents(INFINITY, NO_REACT) + reagents.add_reagent(dispensedreagent, INFINITY) + +/obj/structure/water_source/attack_hand(mob/living/user, list/modifiers) + . = ..() + if(.) + return + if(!iscarbon(user)) + return + if(!Adjacent(user)) + return + + if(busy) + to_chat(user, span_warning("Someone's already washing here!")) + return + var/selected_area = user.parse_zone_with_bodypart(user.zone_selected) + var/washing_face = FALSE + if(selected_area in list(BODY_ZONE_HEAD, BODY_ZONE_PRECISE_MOUTH, BODY_ZONE_PRECISE_EYES)) + washing_face = TRUE + user.visible_message( + span_notice("[user] starts washing [user.p_their()] [washing_face ? "face" : "hands"]..."), + span_notice("You start washing your [washing_face ? "face" : "hands"]...")) + busy = TRUE + + if(!do_after(user, 4 SECONDS, target = src)) + busy = FALSE + return + + busy = FALSE + + if(washing_face) + SEND_SIGNAL(user, COMSIG_COMPONENT_CLEAN_FACE_ACT, CLEAN_WASH) + else if(ishuman(user)) + var/mob/living/carbon/human/human_user = user + if(!human_user.wash_hands(CLEAN_WASH)) + to_chat(user, span_warning("Your hands are covered by something!")) + return + else + user.wash(CLEAN_WASH) + + user.visible_message( + span_notice("[user] washes [user.p_their()] [washing_face ? "face" : "hands"] using [src]."), + span_notice("You wash your [washing_face ? "face" : "hands"] using [src]."), + ) + +/obj/structure/water_source/attackby(obj/item/attacking_item, mob/living/user, params) + if(busy) + to_chat(user, span_warning("Someone's already washing here!")) + return + + if(attacking_item.item_flags & ABSTRACT) //Abstract items like grabs won't wash. No-drop items will though because it's still technically an item in your hand. + return + + if(is_reagent_container(attacking_item)) + var/obj/item/reagent_containers/container = attacking_item + if(container.is_refillable()) + if(!container.reagents.holder_full()) + container.reagents.add_reagent(dispensedreagent, min(container.volume - container.reagents.total_volume, container.amount_per_transfer_from_this)) + to_chat(user, span_notice("You fill [container] from [src].")) + return TRUE + to_chat(user, span_notice("\The [container] is full.")) + return FALSE + + if(istype(attacking_item, /obj/item/melee/baton/security)) + var/obj/item/melee/baton/security/baton = attacking_item + if(baton.cell?.charge && baton.active) + flick("baton_active", src) + user.Paralyze(baton.knockdown_time) + user.set_stutter(baton.knockdown_time) + baton.cell.use(baton.cell_hit_cost) + user.visible_message( + span_warning("[user] shocks [user.p_them()]self while attempting to wash the active [baton.name]!"), + span_userdanger("You unwisely attempt to wash [baton] while it's still on.")) + playsound(src, baton.on_stun_sound, 50, TRUE) + return + + if(istype(attacking_item, /obj/item/mop)) + attacking_item.reagents.add_reagent(dispensedreagent, 5) + to_chat(user, span_notice("You wet [attacking_item] in [src].")) + playsound(loc, 'sound/effects/slosh.ogg', 25, TRUE) + return + + if(istype(attacking_item, /obj/item/stack/medical/gauze)) + var/obj/item/stack/medical/gauze/G = attacking_item + new /obj/item/reagent_containers/cup/rag(loc) + to_chat(user, span_notice("You tear off a strip of gauze and make a rag.")) + G.use(1) + return + + if(istype(attacking_item, /obj/item/stack/sheet/cloth)) + var/obj/item/stack/sheet/cloth/cloth = attacking_item + new /obj/item/reagent_containers/cup/rag(loc) + to_chat(user, span_notice("You tear off a strip of cloth and make a rag.")) + cloth.use(1) + return + + if(istype(attacking_item, /obj/item/stack/ore/glass)) + new /obj/item/stack/sheet/sandblock(loc) + to_chat(user, span_notice("You wet the sand and form it into a block.")) + attacking_item.use(1) + return + + if(!user.combat_mode) + to_chat(user, span_notice("You start washing [attacking_item]...")) + busy = TRUE + if(!do_after(user, 4 SECONDS, target = src)) + busy = FALSE + return TRUE + busy = FALSE + attacking_item.wash(CLEAN_WASH) + reagents.expose(attacking_item, TOUCH, 5 / max(reagents.total_volume, 5)) + user.visible_message( + span_notice("[user] washes [attacking_item] using [src]."), + span_notice("You wash [attacking_item] using [src].")) + return TRUE + + return ..() + +/obj/structure/water_source/puddle //splishy splashy ^_^ + name = "puddle" + desc = "A puddle used for washing one's hands and face." + icon_state = "puddle" + base_icon_state = "puddle" + resistance_flags = UNACIDABLE + +//ATTACK HAND IGNORING PARENT RETURN VALUE +/obj/structure/water_source/puddle/attack_hand(mob/user, list/modifiers) + icon_state = "[base_icon_state]-splash" + . = ..() + icon_state = base_icon_state + +/obj/structure/water_source/puddle/attackby(obj/item/attacking_item, mob/user, params) + icon_state = "[base_icon_state]-splash" + . = ..() + icon_state = base_icon_state diff --git a/code/game/objects/structures/watercloset.dm b/code/game/objects/structures/watercloset.dm deleted file mode 100644 index 559e2dd78089b..0000000000000 --- a/code/game/objects/structures/watercloset.dm +++ /dev/null @@ -1,877 +0,0 @@ -/obj/structure/toilet - name = "toilet" - desc = "The HT-451, a torque rotation-based, waste disposal unit for small matter. This one seems remarkably clean." - icon = 'icons/obj/watercloset.dmi' - icon_state = "toilet00" - density = FALSE - anchored = TRUE - var/open = FALSE //if the lid is up - var/cistern = 0 //if the cistern bit is open - var/w_items = 0 //the combined w_class of all the items in the cistern - var/mob/living/swirlie = null //the mob being given a swirlie - var/buildstacktype = /obj/item/stack/sheet/iron //they're iron now, shut up - var/buildstackamount = 1 - -/obj/structure/toilet/Initialize(mapload) - . = ..() - open = round(rand(0, 1)) - update_appearance() - if(mapload && SSmapping.level_trait(z, ZTRAIT_STATION)) - AddElement(/datum/element/lazy_fishing_spot, /datum/fish_source/toilet) - -/obj/structure/toilet/attack_hand(mob/living/user, list/modifiers) - . = ..() - if(.) - return - if(swirlie) - user.changeNext_move(CLICK_CD_MELEE) - playsound(src.loc, SFX_SWING_HIT, 25, TRUE) - swirlie.visible_message(span_danger("[user] slams the toilet seat onto [swirlie]'s head!"), span_userdanger("[user] slams the toilet seat onto your head!"), span_hear("You hear reverberating porcelain.")) - log_combat(user, swirlie, "swirlied (brute)") - swirlie.adjustBruteLoss(5) - - else if(user.pulling && isliving(user.pulling)) - user.changeNext_move(CLICK_CD_MELEE) - var/mob/living/GM = user.pulling - if(user.grab_state >= GRAB_AGGRESSIVE) - if(GM.loc != get_turf(src)) - to_chat(user, span_warning("[GM] needs to be on [src]!")) - return - if(!swirlie) - if(open) - GM.visible_message(span_danger("[user] starts to give [GM] a swirlie!"), span_userdanger("[user] starts to give you a swirlie...")) - swirlie = GM - var/was_alive = (swirlie.stat != DEAD) - if(do_after(user, 3 SECONDS, target = src, timed_action_flags = IGNORE_HELD_ITEM)) - GM.visible_message(span_danger("[user] gives [GM] a swirlie!"), span_userdanger("[user] gives you a swirlie!"), span_hear("You hear a toilet flushing.")) - if(iscarbon(GM)) - var/mob/living/carbon/C = GM - if(!C.internal) - log_combat(user, C, "swirlied (oxy)") - C.adjustOxyLoss(5) - else - log_combat(user, GM, "swirlied (oxy)") - GM.adjustOxyLoss(5) - if(was_alive && swirlie.stat == DEAD && swirlie.client) - swirlie.client.give_award(/datum/award/achievement/misc/swirlie, swirlie) // just like space high school all over again! - swirlie = null - else - playsound(src.loc, 'sound/effects/bang.ogg', 25, TRUE) - GM.visible_message(span_danger("[user] slams [GM.name] into [src]!"), span_userdanger("[user] slams you into [src]!")) - log_combat(user, GM, "toilet slammed") - GM.adjustBruteLoss(5) - else - to_chat(user, span_warning("You need a tighter grip!")) - - else if(cistern && !open && user.CanReach(src)) - if(!contents.len) - to_chat(user, span_notice("The cistern is empty.")) - else - var/obj/item/I = pick(contents) - if(ishuman(user)) - user.put_in_hands(I) - else - I.forceMove(drop_location()) - to_chat(user, span_notice("You find [I] in the cistern.")) - w_items -= I.w_class - else - open = !open - update_appearance() - - -/obj/structure/toilet/update_icon_state() - icon_state = "toilet[open][cistern]" - return ..() - -/obj/structure/toilet/atom_deconstruct(dissambled = TRUE) - for(var/obj/toilet_item in contents) - toilet_item.forceMove(drop_location()) - if(buildstacktype) - new buildstacktype(loc,buildstackamount) - else - for(var/i in custom_materials) - var/datum/material/M = i - new M.sheet_type(loc, FLOOR(custom_materials[M] / SHEET_MATERIAL_AMOUNT, 1)) - -/obj/structure/toilet/attackby(obj/item/I, mob/living/user, params) - add_fingerprint(user) - if(I.tool_behaviour == TOOL_CROWBAR) - to_chat(user, span_notice("You start to [cistern ? "replace the lid on the cistern" : "lift the lid off the cistern"]...")) - playsound(loc, 'sound/effects/stonedoor_openclose.ogg', 50, TRUE) - if(I.use_tool(src, user, 30)) - user.visible_message(span_notice("[user] [cistern ? "replaces the lid on the cistern" : "lifts the lid off the cistern"]!"), span_notice("You [cistern ? "replace the lid on the cistern" : "lift the lid off the cistern"]!"), span_hear("You hear grinding porcelain.")) - cistern = !cistern - update_appearance() - return COMPONENT_CANCEL_ATTACK_CHAIN - else if(I.tool_behaviour == TOOL_WRENCH) - I.play_tool_sound(src) - deconstruct() - return TRUE - else if(cistern && !user.combat_mode) - if(I.w_class > WEIGHT_CLASS_NORMAL) - to_chat(user, span_warning("[I] does not fit!")) - return - if(w_items + I.w_class > WEIGHT_CLASS_HUGE) - to_chat(user, span_warning("The cistern is full!")) - return - if(!user.transferItemToLoc(I, src)) - to_chat(user, span_warning("\The [I] is stuck to your hand, you cannot put it in the cistern!")) - return - w_items += I.w_class - to_chat(user, span_notice("You carefully place [I] into the cistern.")) - return - - if(is_reagent_container(I) && !user.combat_mode) - if (!open) - return - if(istype(I, /obj/item/food/monkeycube)) - var/obj/item/food/monkeycube/cube = I - cube.Expand() - return - var/obj/item/reagent_containers/RG = I - RG.reagents.add_reagent(/datum/reagent/water, min(RG.volume - RG.reagents.total_volume, RG.amount_per_transfer_from_this)) - to_chat(user, span_notice("You fill [RG] from [src]. Gross.")) - . = ..() - -/obj/structure/toilet/secret - var/obj/item/secret - var/secret_type = null - -/obj/structure/toilet/secret/Initialize(mapload) - . = ..() - if (secret_type) - secret = new secret_type(src) - secret.desc += " It's a secret!" - w_items += secret.w_class - contents += secret - -/obj/structure/toilet/greyscale - material_flags = MATERIAL_EFFECTS | MATERIAL_ADD_PREFIX | MATERIAL_COLOR | MATERIAL_AFFECT_STATISTICS - buildstacktype = null - -/obj/structure/urinal - name = "urinal" - desc = "The HU-452, an experimental urinal. Comes complete with experimental urinal cake." - icon = 'icons/obj/watercloset.dmi' - icon_state = "urinal" - density = FALSE - anchored = TRUE - /// Can you currently put an item inside - var/exposed = FALSE - /// What's in the urinal - var/obj/item/hidden_item - -MAPPING_DIRECTIONAL_HELPERS(/obj/structure/urinal, 32) - -/obj/structure/urinal/Initialize(mapload) - . = ..() - hidden_item = new /obj/item/food/urinalcake - find_and_hang_on_wall() - -/obj/structure/urinal/attack_hand(mob/living/user, list/modifiers) - . = ..() - if(.) - return - if(user.pulling && isliving(user.pulling)) - var/mob/living/GM = user.pulling - if(user.grab_state >= GRAB_AGGRESSIVE) - if(GM.loc != get_turf(src)) - to_chat(user, span_notice("[GM.name] needs to be on [src].")) - return - user.changeNext_move(CLICK_CD_MELEE) - user.visible_message(span_danger("[user] slams [GM] into [src]!"), span_danger("You slam [GM] into [src]!")) - GM.adjustBruteLoss(8) - else - to_chat(user, span_warning("You need a tighter grip!")) - - else if(exposed) - if(!hidden_item) - to_chat(user, span_warning("There is nothing in the drain holder!")) - else - if(ishuman(user)) - user.put_in_hands(hidden_item) - else - hidden_item.forceMove(get_turf(src)) - to_chat(user, span_notice("You fish [hidden_item] out of the drain enclosure.")) - hidden_item = null - else - ..() - -/obj/structure/urinal/attackby(obj/item/I, mob/living/user, params) - if(exposed) - if (hidden_item) - to_chat(user, span_warning("There is already something in the drain enclosure!")) - return - if(I.w_class > 1) - to_chat(user, span_warning("[I] is too large for the drain enclosure.")) - return - if(!user.transferItemToLoc(I, src)) - to_chat(user, span_warning("[I] is stuck to your hand, you cannot put it in the drain enclosure!")) - return - hidden_item = I - to_chat(user, span_notice("You place [I] into the drain enclosure.")) - else - return ..() - -/obj/structure/urinal/screwdriver_act(mob/living/user, obj/item/I) - if(..()) - return TRUE - to_chat(user, span_notice("You start to [exposed ? "screw the cap back into place" : "unscrew the cap to the drain protector"]...")) - playsound(loc, 'sound/effects/stonedoor_openclose.ogg', 50, TRUE) - if(I.use_tool(src, user, 20)) - user.visible_message(span_notice("[user] [exposed ? "screws the cap back into place" : "unscrew the cap to the drain protector"]!"), - span_notice("You [exposed ? "screw the cap back into place" : "unscrew the cap on the drain"]!"), - span_hear("You hear metal and squishing noises.")) - exposed = !exposed - return TRUE - -/obj/structure/urinal/atom_deconstruct(disassembled = TRUE) - new /obj/item/wallframe/urinal(loc) - -/obj/item/wallframe/urinal - name = "urinal frame" - desc = "An unmounted urinal. Attach it to a wall to use." - icon = 'icons/obj/watercloset.dmi' - icon_state = "urinal" - result_path = /obj/structure/urinal - pixel_shift = 32 - -/obj/item/food/urinalcake - name = "urinal cake" - desc = "The noble urinal cake, protecting the station's pipes from the station's pee. Do not eat." - icon = 'icons/obj/watercloset.dmi' - icon_state = "urinalcake" - w_class = WEIGHT_CLASS_TINY - food_reagents = list( - /datum/reagent/chlorine = 3, - /datum/reagent/ammonia = 1, - ) - foodtypes = TOXIC | GROSS - preserved_food = TRUE - -/obj/item/food/urinalcake/attack_self(mob/living/user) - user.visible_message(span_notice("[user] squishes [src]!"), span_notice("You squish [src]."), "You hear a squish.") - icon_state = "urinalcake_squish" - addtimer(VARSET_CALLBACK(src, icon_state, "urinalcake"), 0.8 SECONDS) - -/obj/item/bikehorn/rubberducky/plasticducky - name = "plastic ducky" - desc = "It's a cheap plastic knockoff of a loveable bathtime toy." - custom_materials = list(/datum/material/plastic =HALF_SHEET_MATERIAL_AMOUNT) - -/obj/item/bikehorn/rubberducky - name = "rubber ducky" - desc = "Rubber ducky you're so fine, you make bathtime lots of fuuun. Rubber ducky I'm awfully fooooond of yooooouuuu~" //thanks doohl - icon = 'icons/obj/watercloset.dmi' - icon_state = "rubberducky" - inhand_icon_state = "rubberducky" - lefthand_file = 'icons/mob/inhands/items_lefthand.dmi' - righthand_file = 'icons/mob/inhands/items_righthand.dmi' - worn_icon_state = "duck" - sound_file = 'sound/effects/quack.ogg' - -/obj/structure/sink - name = "sink" - icon = 'icons/obj/watercloset.dmi' - icon_state = "sink" - desc = "A sink used for washing one's hands and face. Passively reclaims water over time." - anchored = TRUE - layer = ABOVE_OBJ_LAYER - pixel_z = 1 - ///Something's being washed at the moment - var/busy = FALSE - ///What kind of reagent is produced by this sink by default? (We now have actual plumbing, Arcane, August 2020) - var/dispensedreagent = /datum/reagent/water - ///Material to drop when broken or deconstructed. - var/buildstacktype = /obj/item/stack/sheet/iron - ///Number of sheets of material to drop when broken or deconstructed. - var/buildstackamount = 1 - ///Does the sink have a water recycler to recollect it's water supply? - var/has_water_reclaimer = TRUE - ///Units of water to reclaim per second - var/reclaim_rate = 0.5 - ///Amount of shift the pixel for placement - var/pixel_shift = 14 - -MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sink, (-14)) - -/obj/structure/sink/Initialize(mapload, ndir = 0, has_water_reclaimer = null) - . = ..() - - if(ndir) - dir = ndir - - if(has_water_reclaimer != null) - src.has_water_reclaimer = has_water_reclaimer - - switch(dir) - if(NORTH) - pixel_x = 0 - pixel_y = -pixel_shift - if(SOUTH) - pixel_x = 0 - pixel_y = pixel_shift - if(EAST) - pixel_x = -pixel_shift - pixel_y = 0 - if(WEST) - pixel_x = pixel_shift - pixel_y = 0 - - create_reagents(100, NO_REACT) - if(src.has_water_reclaimer) - reagents.add_reagent(dispensedreagent, 100) - AddComponent(/datum/component/plumbing/simple_demand, extend_pipe_to_edge = TRUE) - -/obj/structure/sink/examine(mob/user) - . = ..() - if(has_water_reclaimer) - . += span_notice("A water recycler is installed. It looks like you could pry it out.") - . += span_notice("[reagents.total_volume]/[reagents.maximum_volume] liquids remaining.") - -/obj/structure/sink/attack_hand(mob/living/user, list/modifiers) - . = ..() - if(.) - return - if(!user || !istype(user)) - return - if(!iscarbon(user)) - return - if(!Adjacent(user)) - return - if(reagents.total_volume < 5) - to_chat(user, span_warning("The sink has no more contents left!")) - return - if(busy) - to_chat(user, span_warning("Someone's already washing here!")) - return - var/selected_area = parse_zone(user.zone_selected) - var/washing_face = 0 - if(selected_area in list(BODY_ZONE_HEAD, BODY_ZONE_PRECISE_MOUTH, BODY_ZONE_PRECISE_EYES)) - washing_face = 1 - user.visible_message(span_notice("[user] starts washing [user.p_their()] [washing_face ? "face" : "hands"]..."), \ - span_notice("You start washing your [washing_face ? "face" : "hands"]...")) - busy = TRUE - - if(!do_after(user, 4 SECONDS, target = src)) - busy = FALSE - return - - busy = FALSE - reagents.remove_all(5) - reagents.expose(user, TOUCH, 5 / max(reagents.total_volume, 5)) - begin_reclamation() - if(washing_face) - SEND_SIGNAL(user, COMSIG_COMPONENT_CLEAN_FACE_ACT, CLEAN_WASH) - else if(ishuman(user)) - var/mob/living/carbon/human/human_user = user - if(!human_user.wash_hands(CLEAN_WASH)) - to_chat(user, span_warning("Your hands are covered by something!")) - return - else - user.wash(CLEAN_WASH) - - user.visible_message(span_notice("[user] washes [user.p_their()] [washing_face ? "face" : "hands"] using [src]."), \ - span_notice("You wash your [washing_face ? "face" : "hands"] using [src].")) - -/obj/structure/sink/attackby(obj/item/O, mob/living/user, params) - if(busy) - to_chat(user, span_warning("Someone's already washing here!")) - return - - if(is_reagent_container(O)) - var/obj/item/reagent_containers/RG = O - if(reagents.total_volume <= 0) - to_chat(user, span_notice("\The [src] is dry.")) - return FALSE - if(RG.is_refillable()) - if(!RG.reagents.holder_full()) - reagents.trans_to(RG, RG.amount_per_transfer_from_this, transferred_by = user) - begin_reclamation() - to_chat(user, span_notice("You fill [RG] from [src].")) - return TRUE - to_chat(user, span_notice("\The [RG] is full.")) - return FALSE - - if(istype(O, /obj/item/melee/baton/security)) - var/obj/item/melee/baton/security/baton = O - if(baton.cell?.charge && baton.active) - flick("baton_active", src) - user.Paralyze(baton.knockdown_time) - user.set_stutter(baton.knockdown_time) - baton.cell.use(baton.cell_hit_cost) - user.visible_message(span_warning("[user] shocks [user.p_them()]self while attempting to wash the active [baton.name]!"), \ - span_userdanger("You unwisely attempt to wash [baton] while it's still on.")) - playsound(src, baton.on_stun_sound, 50, TRUE) - return - - if(istype(O, /obj/item/mop)) - if(reagents.total_volume <= 0) - to_chat(user, span_notice("\The [src] is dry.")) - return FALSE - reagents.trans_to(O, 5, transferred_by = user) - begin_reclamation() - to_chat(user, span_notice("You wet [O] in [src].")) - playsound(loc, 'sound/effects/slosh.ogg', 25, TRUE) - return - - if(O.tool_behaviour == TOOL_WRENCH) - O.play_tool_sound(src) - deconstruct() - return - - if(O.tool_behaviour == TOOL_CROWBAR) - if(!has_water_reclaimer) - to_chat(user, span_warning("There isn't a water recycler to remove.")) - return - - O.play_tool_sound(src) - has_water_reclaimer = FALSE - new/obj/item/stock_parts/water_recycler(get_turf(loc)) - to_chat(user, span_notice("You remove the water reclaimer from [src]")) - return - - if(istype(O, /obj/item/stack/medical/gauze)) - var/obj/item/stack/medical/gauze/G = O - new /obj/item/reagent_containers/cup/rag(src.loc) - to_chat(user, span_notice("You tear off a strip of gauze and make a rag.")) - G.use(1) - return - - if(istype(O, /obj/item/stack/sheet/cloth)) - var/obj/item/stack/sheet/cloth/cloth = O - new /obj/item/reagent_containers/cup/rag(loc) - to_chat(user, span_notice("You tear off a strip of cloth and make a rag.")) - cloth.use(1) - return - - if(istype(O, /obj/item/stack/ore/glass)) - new /obj/item/stack/sheet/sandblock(loc) - to_chat(user, span_notice("You wet the sand in the sink and form it into a block.")) - O.use(1) - return - - if(istype(O, /obj/item/stock_parts/water_recycler)) - if(has_water_reclaimer) - to_chat(user, span_warning("There is already has a water recycler installed.")) - return - - playsound(src, 'sound/machines/click.ogg', 20, TRUE) - qdel(O) - has_water_reclaimer = TRUE - begin_reclamation() - return - - if(istype(O, /obj/item/storage/fancy/pickles_jar)) - if(O.contents.len) - to_chat(user, span_notice("Looks like there's something left in the jar")) - return - new /obj/item/reagent_containers/cup/beaker/large(loc) - to_chat(user, span_notice("You washed the jar, ridding it of the brine.")) - qdel(O) - return - - if(!istype(O)) - return - if(O.item_flags & ABSTRACT) //Abstract items like grabs won't wash. No-drop items will though because it's still technically an item in your hand. - return - - if(!user.combat_mode) - to_chat(user, span_notice("You start washing [O]...")) - busy = TRUE - if(!do_after(user, 4 SECONDS, target = src)) - busy = FALSE - return 1 - busy = FALSE - O.wash(CLEAN_WASH) - reagents.expose(O, TOUCH, 5 / max(reagents.total_volume, 5)) - user.visible_message(span_notice("[user] washes [O] using [src]."), \ - span_notice("You wash [O] using [src].")) - return 1 - else - return ..() - -/obj/structure/sink/atom_deconstruct(dissambled = TRUE) - drop_materials() - if(has_water_reclaimer) - new /obj/item/stock_parts/water_recycler(drop_location()) - -/obj/structure/sink/process(seconds_per_tick) - // Water reclamation complete? - if(!has_water_reclaimer || reagents.total_volume >= reagents.maximum_volume) - return PROCESS_KILL - - reagents.add_reagent(dispensedreagent, reclaim_rate * seconds_per_tick) - -/obj/structure/sink/proc/drop_materials() - if(buildstacktype) - new buildstacktype(loc,buildstackamount) - else - for(var/i in custom_materials) - var/datum/material/M = i - new M.sheet_type(loc, FLOOR(custom_materials[M] / SHEET_MATERIAL_AMOUNT, 1)) - -/obj/structure/sink/proc/begin_reclamation() - START_PROCESSING(SSplumbing, src) - -/obj/structure/sink/kitchen - name = "kitchen sink" - icon_state = "sink_alt" - pixel_z = 4 - pixel_shift = 16 - -MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sink/kitchen, (-16)) - -/obj/structure/sink/greyscale - icon_state = "sink_greyscale" - material_flags = MATERIAL_EFFECTS | MATERIAL_ADD_PREFIX | MATERIAL_COLOR | MATERIAL_AFFECT_STATISTICS - buildstacktype = null - -/obj/structure/sinkframe - name = "sink frame" - icon = 'icons/obj/watercloset.dmi' - icon_state = "sink_frame" - desc = "A sink frame, that needs a water recycler to finish construction." - anchored = FALSE - material_flags = MATERIAL_EFFECTS | MATERIAL_ADD_PREFIX | MATERIAL_COLOR | MATERIAL_AFFECT_STATISTICS - -/obj/structure/sinkframe/Initialize(mapload) - . = ..() - AddComponent(/datum/component/simple_rotation) - -/obj/structure/sinkframe/attackby(obj/item/tool, mob/living/user, params) - if(istype(tool, /obj/item/stock_parts/water_recycler)) - qdel(tool) - var/obj/structure/sink/greyscale/new_sink = new(loc, REVERSE_DIR(dir), TRUE) - new_sink.set_custom_materials(custom_materials) - qdel(src) - playsound(new_sink, 'sound/machines/click.ogg', 20, TRUE) - return - return ..() - -/obj/structure/sinkframe/wrench_act(mob/living/user, obj/item/tool) - . = ..() - - tool.play_tool_sound(src) - var/obj/structure/sink/greyscale/new_sink = new(loc, REVERSE_DIR(dir), FALSE) - new_sink.set_custom_materials(custom_materials) - qdel(src) - - return TRUE - -/obj/structure/sinkframe/wrench_act_secondary(mob/living/user, obj/item/tool) - . = ..() - tool.play_tool_sound(src) - deconstruct() - return TRUE - -/obj/structure/sinkframe/atom_deconstruct(dissambled = TRUE) - drop_materials() - -/obj/structure/sinkframe/proc/drop_materials() - for(var/datum/material/material as anything in custom_materials) - new material.sheet_type(loc, FLOOR(custom_materials[material] / SHEET_MATERIAL_AMOUNT, 1)) - return - -//Water source, use the type water_source for unlimited water sources like classic sinks. -/obj/structure/water_source - name = "Water Source" - icon = 'icons/obj/watercloset.dmi' - icon_state = "sink" - desc = "A sink used for washing one's hands and face. This one seems to be infinite!" - anchored = TRUE - var/busy = FALSE //Something's being washed at the moment - var/dispensedreagent = /datum/reagent/water // for whenever plumbing happens - -/obj/structure/water_source/Initialize(mapload) - . = ..() - - create_reagents(INFINITY, NO_REACT) - reagents.add_reagent(dispensedreagent, INFINITY) - -/obj/structure/water_source/attack_hand(mob/living/user, list/modifiers) - . = ..() - if(.) - return - if(!iscarbon(user)) - return - if(!Adjacent(user)) - return - - if(busy) - to_chat(user, span_warning("Someone's already washing here!")) - return - var/selected_area = parse_zone(user.zone_selected) - var/washing_face = FALSE - if(selected_area in list(BODY_ZONE_HEAD, BODY_ZONE_PRECISE_MOUTH, BODY_ZONE_PRECISE_EYES)) - washing_face = TRUE - user.visible_message(span_notice("[user] starts washing [user.p_their()] [washing_face ? "face" : "hands"]..."), \ - span_notice("You start washing your [washing_face ? "face" : "hands"]...")) - busy = TRUE - - if(!do_after(user, 4 SECONDS, target = src)) - busy = FALSE - return - - busy = FALSE - - if(washing_face) - SEND_SIGNAL(user, COMSIG_COMPONENT_CLEAN_FACE_ACT, CLEAN_WASH) - else if(ishuman(user)) - var/mob/living/carbon/human/human_user = user - if(!human_user.wash_hands(CLEAN_WASH)) - to_chat(user, span_warning("Your hands are covered by something!")) - return - else - user.wash(CLEAN_WASH) - - user.visible_message(span_notice("[user] washes [user.p_their()] [washing_face ? "face" : "hands"] using [src]."), \ - span_notice("You wash your [washing_face ? "face" : "hands"] using [src].")) - -/obj/structure/water_source/attackby(obj/item/O, mob/living/user, params) - if(busy) - to_chat(user, span_warning("Someone's already washing here!")) - return - - if(is_reagent_container(O)) - var/obj/item/reagent_containers/container = O - if(container.is_refillable()) - if(!container.reagents.holder_full()) - container.reagents.add_reagent(dispensedreagent, min(container.volume - container.reagents.total_volume, container.amount_per_transfer_from_this)) - to_chat(user, span_notice("You fill [container] from [src].")) - return TRUE - to_chat(user, span_notice("\The [container] is full.")) - return FALSE - - if(istype(O, /obj/item/melee/baton/security)) - var/obj/item/melee/baton/security/baton = O - if(baton.cell?.charge && baton.active) - flick("baton_active", src) - user.Paralyze(baton.knockdown_time) - user.set_stutter(baton.knockdown_time) - baton.cell.use(baton.cell_hit_cost) - user.visible_message(span_warning("[user] shocks [user.p_them()]self while attempting to wash the active [baton.name]!"), \ - span_userdanger("You unwisely attempt to wash [baton] while it's still on.")) - playsound(src, baton.on_stun_sound, 50, TRUE) - return - - if(istype(O, /obj/item/mop)) - O.reagents.add_reagent(dispensedreagent, 5) - to_chat(user, span_notice("You wet [O] in [src].")) - playsound(loc, 'sound/effects/slosh.ogg', 25, TRUE) - return - - if(istype(O, /obj/item/stack/medical/gauze)) - var/obj/item/stack/medical/gauze/G = O - new /obj/item/reagent_containers/cup/rag(loc) - to_chat(user, span_notice("You tear off a strip of gauze and make a rag.")) - G.use(1) - return - - if(istype(O, /obj/item/stack/sheet/cloth)) - var/obj/item/stack/sheet/cloth/cloth = O - new /obj/item/reagent_containers/cup/rag(loc) - to_chat(user, span_notice("You tear off a strip of cloth and make a rag.")) - cloth.use(1) - return - - if(istype(O, /obj/item/stack/ore/glass)) - new /obj/item/stack/sheet/sandblock(loc) - to_chat(user, span_notice("You wet the sand and form it into a block.")) - O.use(1) - return - - if(O.item_flags & ABSTRACT) //Abstract items like grabs won't wash. No-drop items will though because it's still technically an item in your hand. - return - - if(!user.combat_mode) - to_chat(user, span_notice("You start washing [O]...")) - busy = TRUE - if(!do_after(user, 4 SECONDS, target = src)) - busy = FALSE - return TRUE - busy = FALSE - O.wash(CLEAN_WASH) - reagents.expose(O, TOUCH, 5 / max(reagents.total_volume, 5)) - user.visible_message(span_notice("[user] washes [O] using [src]."), \ - span_notice("You wash [O] using [src].")) - return TRUE - - return ..() - - -/obj/structure/water_source/puddle //splishy splashy ^_^ - name = "puddle" - desc = "A puddle used for washing one's hands and face." - icon_state = "puddle" - resistance_flags = UNACIDABLE - -//ATTACK HAND IGNORING PARENT RETURN VALUE -/obj/structure/water_source/puddle/attack_hand(mob/user, list/modifiers) - icon_state = "puddle-splash" - . = ..() - icon_state = "puddle" - -/obj/structure/water_source/puddle/attackby(obj/item/O, mob/user, params) - icon_state = "puddle-splash" - . = ..() - icon_state = "puddle" - -//End legacy sink - - -//Shower Curtains// -//Defines used are pre-existing in layers.dm// - -/obj/structure/curtain - name = "curtain" - desc = "Contains less than 1% mercury." - icon = 'icons/obj/watercloset.dmi' - icon_state = "bathroom-open" - var/icon_type = "bathroom"//used in making the icon state - color = "#ACD1E9" //Default color, didn't bother hardcoding other colors, mappers can and should easily change it. - alpha = 200 //Mappers can also just set this to 255 if they want curtains that can't be seen through - layer = SIGN_LAYER - anchored = TRUE - opacity = FALSE - density = FALSE - var/open = TRUE - /// if it can be seen through when closed - var/opaque_closed = FALSE - -/obj/structure/curtain/Initialize(mapload) - // see-through curtains should let emissives shine through - if(!opaque_closed) - blocks_emissive = EMISSIVE_BLOCK_NONE - return ..() - -/obj/structure/curtain/proc/toggle() - open = !open - if(open) - layer = SIGN_LAYER - set_opacity(FALSE) - else - layer = WALL_OBJ_LAYER - if(opaque_closed) - set_opacity(TRUE) - - update_appearance() - -/obj/structure/curtain/update_icon_state() - icon_state = "[icon_type]-[open ? "open" : "closed"]" - return ..() - -/obj/structure/curtain/attackby(obj/item/W, mob/user) - if (istype(W, /obj/item/toy/crayon)) - color = input(user,"","Choose Color",color) as color - else - return ..() - -/obj/structure/curtain/wrench_act(mob/living/user, obj/item/tool) - . = ..() - default_unfasten_wrench(user, tool, time = 5 SECONDS) - return TRUE - -/obj/structure/curtain/wirecutter_act(mob/living/user, obj/item/I) - ..() - if(anchored) - return TRUE - - user.visible_message(span_warning("[user] cuts apart [src]."), - span_notice("You start to cut apart [src]."), span_hear("You hear cutting.")) - if(I.use_tool(src, user, 50, volume=100) && !anchored) - to_chat(user, span_notice("You cut apart [src].")) - deconstruct() - - return TRUE - - -/obj/structure/curtain/attack_hand(mob/user, list/modifiers) - . = ..() - if(.) - return - playsound(loc, 'sound/effects/curtain.ogg', 50, TRUE) - toggle() - -/obj/structure/curtain/atom_deconstruct(disassembled = TRUE) - new /obj/item/stack/sheet/cloth (loc, 2) - new /obj/item/stack/sheet/plastic (loc, 2) - new /obj/item/stack/rods (loc, 1) - -/obj/structure/curtain/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0) - switch(damage_type) - if(BRUTE) - if(damage_amount) - playsound(src.loc, 'sound/weapons/slash.ogg', 80, TRUE) - else - playsound(loc, 'sound/weapons/tap.ogg', 50, TRUE) - if(BURN) - playsound(loc, 'sound/items/welder.ogg', 80, TRUE) - -/obj/structure/curtain/bounty - icon_type = "bounty" - icon_state = "bounty-open" - color = null - alpha = 255 - opaque_closed = TRUE - -/obj/structure/curtain/bounty/start_closed - icon_state = "bounty-closed" - -/obj/structure/curtain/bounty/start_closed/Initialize(mapload) - . = ..() - if(open) - toggle() - -/obj/structure/curtain/cloth - color = null - alpha = 255 - opaque_closed = TRUE - -/obj/structure/curtain/cloth/atom_deconstruct(disassembled = TRUE) - new /obj/item/stack/sheet/cloth (loc, 4) - new /obj/item/stack/rods (loc, 1) - -/obj/structure/curtain/cloth/fancy - icon_type = "cur_fancy" - icon_state = "cur_fancy-open" - -/obj/structure/curtain/cloth/fancy/mechanical - var/id = null - -/obj/structure/curtain/cloth/fancy/mechanical/Destroy() - GLOB.curtains -= src - return ..() - -/obj/structure/curtain/cloth/fancy/mechanical/Initialize(mapload) - . = ..() - GLOB.curtains += src - -/obj/structure/curtain/cloth/fancy/mechanical/connect_to_shuttle(mapload, obj/docking_port/mobile/port, obj/docking_port/stationary/dock) - id = "[port.shuttle_id]_[id]" - -/obj/structure/curtain/cloth/fancy/mechanical/proc/open() - icon_state = "[icon_type]-open" - layer = SIGN_LAYER - SET_PLANE_IMPLICIT(src, GAME_PLANE) - set_density(FALSE) - open = TRUE - set_opacity(FALSE) - -/obj/structure/curtain/cloth/fancy/mechanical/proc/close() - icon_state = "[icon_type]-closed" - layer = WALL_OBJ_LAYER - set_density(TRUE) - open = FALSE - if(opaque_closed) - set_opacity(TRUE) - -/obj/structure/curtain/cloth/fancy/mechanical/attack_hand(mob/user, list/modifiers) - return - -/obj/structure/curtain/cloth/fancy/mechanical/start_closed - icon_state = "cur_fancy-closed" - -/obj/structure/curtain/cloth/fancy/mechanical/start_closed/Initialize(mapload) - . = ..() - close() diff --git a/code/game/objects/structures/windoor_assembly.dm b/code/game/objects/structures/windoor_assembly.dm index 3437e2a5ae078..195fbbc643e0a 100644 --- a/code/game/objects/structures/windoor_assembly.dm +++ b/code/game/objects/structures/windoor_assembly.dm @@ -246,7 +246,7 @@ electronics = null ae.forceMove(drop_location()) - else if(istype(W, /obj/item/pen)) + else if(IS_WRITING_UTENSIL(W)) var/t = tgui_input_text(user, "Enter the name for the door", "Windoor Renaming", created_name, MAX_NAME_LEN) if(!t) return diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm index 5ddac3f5a5245..6c41b2f8b157d 100644 --- a/code/game/objects/structures/window.dm +++ b/code/game/objects/structures/window.dm @@ -188,11 +188,11 @@ return return ..() -/obj/structure/window/item_interaction(mob/living/user, obj/item/tool, list/modifiers) +/obj/structure/window/tool_act(mob/living/user, obj/item/tool, list/modifiers) if(!can_be_reached(user)) return ITEM_INTERACT_SKIP_TO_ATTACK // Guess you get to hit it add_fingerprint(user) - return NONE + return ..() /obj/structure/window/welder_act(mob/living/user, obj/item/tool) if(atom_integrity >= max_integrity) @@ -393,7 +393,7 @@ //This proc is used to update the icons of nearby windows. /obj/structure/window/proc/update_nearby_icons() update_appearance() - if(smoothing_flags & (SMOOTH_CORNERS|SMOOTH_BITMASK)) + if(smoothing_flags & USES_SMOOTHING) QUEUE_SMOOTH_NEIGHBORS(src) //merges adjacent full-tile windows into one @@ -402,7 +402,7 @@ if(QDELETED(src) || !fulltile) return - if((updates & UPDATE_SMOOTHING) && (smoothing_flags & (SMOOTH_CORNERS|SMOOTH_BITMASK))) + if((updates & UPDATE_SMOOTHING) && (smoothing_flags & USES_SMOOTHING)) QUEUE_SMOOTH(src) var/ratio = atom_integrity / max_integrity @@ -568,6 +568,14 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/window/reinforced/spawner, 0) MAPPING_DIRECTIONAL_HELPERS(/obj/structure/window/reinforced/unanchored/spawner, 0) +// You can't rust glass! So only reinforced glass can be impacted. +/obj/structure/window/reinforced/rust_heretic_act() + add_atom_colour(COLOR_RUSTED_GLASS, FIXED_COLOUR_PRIORITY) + AddElement(/datum/element/rust) + set_armor(/datum/armor/none) + take_damage(get_integrity() * 0.5) + modify_max_integrity(max_integrity * 0.5) + /obj/structure/window/plasma name = "plasma window" desc = "A window made out of a plasma-silicate alloy. It looks insanely tough to break and burn through." @@ -893,7 +901,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/window/reinforced/tinted/frosted/spaw /obj/structure/window/paperframe/update_icon(updates=ALL) . = ..() - if((updates & UPDATE_SMOOTHING) && (smoothing_flags & (SMOOTH_CORNERS|SMOOTH_BITMASK))) + if((updates & UPDATE_SMOOTHING) && (smoothing_flags & USES_SMOOTHING)) QUEUE_SMOOTH(src) /obj/structure/window/paperframe/update_overlays() diff --git a/code/game/sound.dm b/code/game/sound.dm index 17275f5f3a63e..7c9784bcc7f61 100644 --- a/code/game/sound.dm +++ b/code/game/sound.dm @@ -26,17 +26,18 @@ /** * playsound is a proc used to play a 3D sound in a specific range. This uses SOUND_RANGE + extra_range to determine that. * - * source - Origin of sound. - * soundin - Either a file, or a string that can be used to get an SFX. - * vol - The volume of the sound, excluding falloff and pressure affection. - * vary - bool that determines if the sound changes pitch every time it plays. - * extrarange - modifier for sound range. This gets added on top of SOUND_RANGE. - * falloff_exponent - Rate of falloff for the audio. Higher means quicker drop to low volume. Should generally be over 1 to indicate a quick dive to 0 rather than a slow dive. - * frequency - playback speed of audio. - * channel - The channel the sound is played at. - * pressure_affected - Whether or not difference in pressure affects the sound (E.g. if you can hear in space). - * ignore_walls - Whether or not the sound can pass through walls. - * falloff_distance - Distance at which falloff begins. Sound is at peak volume (in regards to falloff) aslong as it is in this range. + * Arguments: + * * source - Origin of sound. + * * soundin - Either a file, or a string that can be used to get an SFX. + * * vol - The volume of the sound, excluding falloff and pressure affection. + * * vary - bool that determines if the sound changes pitch every time it plays. + * * extrarange - modifier for sound range. This gets added on top of SOUND_RANGE. + * * falloff_exponent - Rate of falloff for the audio. Higher means quicker drop to low volume. Should generally be over 1 to indicate a quick dive to 0 rather than a slow dive. + * * frequency - playback speed of audio. + * * channel - The channel the sound is played at. + * * pressure_affected - Whether or not difference in pressure affects the sound (E.g. if you can hear in space). + * * ignore_walls - Whether or not the sound can pass through walls. + * * falloff_distance - Distance at which falloff begins. Sound is at peak volume (in regards to falloff) aslong as it is in this range. */ /proc/playsound(atom/source, soundin, vol as num, vary, extrarange as num, falloff_exponent = SOUND_FALLOFF_EXPONENT, frequency = null, channel = 0, pressure_affected = TRUE, ignore_walls = TRUE, falloff_distance = SOUND_DEFAULT_FALLOFF_DISTANCE, use_reverb = TRUE) if(isarea(source)) @@ -82,6 +83,25 @@ listening_mob.playsound_local(turf_source, soundin, vol, vary, frequency, falloff_exponent, channel, pressure_affected, S, maxdistance, falloff_distance, 1, use_reverb) . += listening_mob +/** + * Plays a sound with a specific point of origin for src mob + * Affected by pressure, distance, terrain and environment (see arguments) + * + * Arguments: + * * turf_source - The turf our sound originates from, if this is not a turf, the sound is played with no spatial audio + * * soundin - Either a file, or a string that can be used to get an SFX. + * * vol - The volume of the sound, excluding falloff and pressure affection. + * * vary - bool that determines if the sound changes pitch every time it plays. + * * frequency - playback speed of audio. + * * falloff_exponent - Rate of falloff for the audio. Higher means quicker drop to low volume. Should generally be over 1 to indicate a quick dive to 0 rather than a slow dive. + * * channel - Optional: The channel the sound is played at. + * * pressure_affected - bool Whether or not difference in pressure affects the sound (E.g. if you can hear in space). + * * sound_to_use - Optional: Will default to soundin when absent + * * max_distance - number, determines the maximum distance of our sound + * * falloff_distance - Distance at which falloff begins. Sound is at peak volume (in regards to falloff) aslong as it is in this range. + * * distance_multiplier - Default 1, multiplies the maximum distance of our sound + * * use_reverb - bool default TRUE, determines if our sound has reverb + */ /mob/proc/playsound_local(turf/turf_source, soundin, vol as num, vary, frequency, falloff_exponent = SOUND_FALLOFF_EXPONENT, channel = 0, pressure_affected = TRUE, sound/sound_to_use, max_distance, falloff_distance = SOUND_DEFAULT_FALLOFF_DISTANCE, distance_multiplier = 1, use_reverb = TRUE) if(!client || !can_hear()) return @@ -181,253 +201,275 @@ /proc/get_rand_frequency() return rand(32000, 55000) //Frequency stuff only works with 45kbps oggs. +///Used to convert a SFX define into a .ogg so we can add some variance to sounds. If soundin is already a .ogg, we simply return it /proc/get_sfx(soundin) - if(istext(soundin)) - switch(soundin) - if(SFX_SHATTER) - soundin = pick('sound/effects/glassbr1.ogg','sound/effects/glassbr2.ogg','sound/effects/glassbr3.ogg') - if(SFX_EXPLOSION) - soundin = pick('sound/effects/explosion1.ogg','sound/effects/explosion2.ogg') - if(SFX_EXPLOSION_CREAKING) - soundin = pick('sound/effects/explosioncreak1.ogg', 'sound/effects/explosioncreak2.ogg') - if(SFX_HULL_CREAKING) - soundin = pick('sound/effects/creak1.ogg', 'sound/effects/creak2.ogg', 'sound/effects/creak3.ogg') - if(SFX_SPARKS) - soundin = pick('sound/effects/sparks1.ogg','sound/effects/sparks2.ogg','sound/effects/sparks3.ogg','sound/effects/sparks4.ogg') - if(SFX_RUSTLE) - soundin = pick('sound/effects/rustle1.ogg','sound/effects/rustle2.ogg','sound/effects/rustle3.ogg','sound/effects/rustle4.ogg','sound/effects/rustle5.ogg') - if(SFX_BODYFALL) - soundin = pick('sound/effects/bodyfall1.ogg','sound/effects/bodyfall2.ogg','sound/effects/bodyfall3.ogg','sound/effects/bodyfall4.ogg') - if(SFX_PUNCH) - soundin = pick('sound/weapons/punch1.ogg','sound/weapons/punch2.ogg','sound/weapons/punch3.ogg','sound/weapons/punch4.ogg') - if(SFX_CLOWN_STEP) - soundin = pick('sound/effects/footstep/clownstep1.ogg','sound/effects/footstep/clownstep2.ogg') - if(SFX_SUIT_STEP) - soundin = pick('sound/effects/suitstep1.ogg','sound/effects/suitstep2.ogg') - if(SFX_SWING_HIT) - soundin = pick('sound/weapons/genhit1.ogg', 'sound/weapons/genhit2.ogg', 'sound/weapons/genhit3.ogg') - if(SFX_HISS) - soundin = pick('sound/voice/hiss1.ogg','sound/voice/hiss2.ogg','sound/voice/hiss3.ogg','sound/voice/hiss4.ogg') - if(SFX_PAGE_TURN) - soundin = pick('sound/effects/pageturn1.ogg', 'sound/effects/pageturn2.ogg','sound/effects/pageturn3.ogg') - if(SFX_RICOCHET) - soundin = pick( 'sound/weapons/effects/ric1.ogg', 'sound/weapons/effects/ric2.ogg','sound/weapons/effects/ric3.ogg','sound/weapons/effects/ric4.ogg','sound/weapons/effects/ric5.ogg') - if(SFX_TERMINAL_TYPE) - soundin = pick(list( - 'sound/machines/terminal_button01.ogg', - 'sound/machines/terminal_button02.ogg', - 'sound/machines/terminal_button03.ogg', - 'sound/machines/terminal_button04.ogg', - 'sound/machines/terminal_button05.ogg', - 'sound/machines/terminal_button06.ogg', - 'sound/machines/terminal_button07.ogg', - 'sound/machines/terminal_button08.ogg', - )) - if(SFX_DESECRATION) - soundin = pick('sound/misc/desecration-01.ogg', 'sound/misc/desecration-02.ogg', 'sound/misc/desecration-03.ogg') - if(SFX_IM_HERE) - soundin = pick('sound/hallucinations/im_here1.ogg', 'sound/hallucinations/im_here2.ogg') - if(SFX_CAN_OPEN) - soundin = pick('sound/effects/can_open1.ogg', 'sound/effects/can_open2.ogg', 'sound/effects/can_open3.ogg') - if(SFX_BULLET_MISS) - soundin = pick('sound/weapons/bulletflyby.ogg', 'sound/weapons/bulletflyby2.ogg', 'sound/weapons/bulletflyby3.ogg') - if(SFX_REVOLVER_SPIN) - soundin = pick('sound/weapons/gun/revolver/spin1.ogg', 'sound/weapons/gun/revolver/spin2.ogg', 'sound/weapons/gun/revolver/spin3.ogg') - if(SFX_LAW) - soundin = pick(list( - 'sound/voice/beepsky/creep.ogg', - 'sound/voice/beepsky/god.ogg', - 'sound/voice/beepsky/iamthelaw.ogg', - 'sound/voice/beepsky/insult.ogg', - 'sound/voice/beepsky/radio.ogg', - 'sound/voice/beepsky/secureday.ogg', - )) - if(SFX_HONKBOT_E) - soundin = pick(list( - 'sound/effects/pray.ogg', - 'sound/effects/reee.ogg', - 'sound/items/AirHorn.ogg', - 'sound/items/AirHorn2.ogg', - 'sound/items/bikehorn.ogg', - 'sound/items/WEEOO1.ogg', - 'sound/machines/buzz-sigh.ogg', - 'sound/machines/ping.ogg', - 'sound/magic/Fireball.ogg', - 'sound/misc/sadtrombone.ogg', - 'sound/voice/beepsky/creep.ogg', - 'sound/voice/beepsky/iamthelaw.ogg', - 'sound/voice/hiss1.ogg', - 'sound/weapons/bladeslice.ogg', - 'sound/weapons/flashbang.ogg', - )) - if(SFX_GOOSE) - soundin = pick('sound/creatures/goose1.ogg', 'sound/creatures/goose2.ogg', 'sound/creatures/goose3.ogg', 'sound/creatures/goose4.ogg') - if(SFX_WARPSPEED) - soundin = 'sound/runtime/hyperspace/hyperspace_begin.ogg' - if(SFX_SM_CALM) - soundin = pick(list( - 'sound/machines/sm/accent/normal/1.ogg', - 'sound/machines/sm/accent/normal/2.ogg', - 'sound/machines/sm/accent/normal/3.ogg', - 'sound/machines/sm/accent/normal/4.ogg', - 'sound/machines/sm/accent/normal/5.ogg', - 'sound/machines/sm/accent/normal/6.ogg', - 'sound/machines/sm/accent/normal/7.ogg', - 'sound/machines/sm/accent/normal/8.ogg', - 'sound/machines/sm/accent/normal/9.ogg', - 'sound/machines/sm/accent/normal/10.ogg', - 'sound/machines/sm/accent/normal/11.ogg', - 'sound/machines/sm/accent/normal/12.ogg', - 'sound/machines/sm/accent/normal/13.ogg', - 'sound/machines/sm/accent/normal/14.ogg', - 'sound/machines/sm/accent/normal/15.ogg', - 'sound/machines/sm/accent/normal/16.ogg', - 'sound/machines/sm/accent/normal/17.ogg', - 'sound/machines/sm/accent/normal/18.ogg', - 'sound/machines/sm/accent/normal/19.ogg', - 'sound/machines/sm/accent/normal/20.ogg', - 'sound/machines/sm/accent/normal/21.ogg', - 'sound/machines/sm/accent/normal/22.ogg', - 'sound/machines/sm/accent/normal/23.ogg', - 'sound/machines/sm/accent/normal/24.ogg', - 'sound/machines/sm/accent/normal/25.ogg', - 'sound/machines/sm/accent/normal/26.ogg', - 'sound/machines/sm/accent/normal/27.ogg', - 'sound/machines/sm/accent/normal/28.ogg', - 'sound/machines/sm/accent/normal/29.ogg', - 'sound/machines/sm/accent/normal/30.ogg', - 'sound/machines/sm/accent/normal/31.ogg', - 'sound/machines/sm/accent/normal/32.ogg', - 'sound/machines/sm/accent/normal/33.ogg', - )) - if(SFX_SM_DELAM) - soundin = pick(list( - 'sound/machines/sm/accent/delam/1.ogg', - 'sound/machines/sm/accent/delam/2.ogg', - 'sound/machines/sm/accent/delam/3.ogg', - 'sound/machines/sm/accent/delam/4.ogg', - 'sound/machines/sm/accent/delam/5.ogg', - 'sound/machines/sm/accent/delam/6.ogg', - 'sound/machines/sm/accent/delam/7.ogg', - 'sound/machines/sm/accent/delam/8.ogg', - 'sound/machines/sm/accent/delam/9.ogg', - 'sound/machines/sm/accent/delam/10.ogg', - 'sound/machines/sm/accent/delam/11.ogg', - 'sound/machines/sm/accent/delam/12.ogg', - 'sound/machines/sm/accent/delam/13.ogg', - 'sound/machines/sm/accent/delam/14.ogg', - 'sound/machines/sm/accent/delam/15.ogg', - 'sound/machines/sm/accent/delam/16.ogg', - 'sound/machines/sm/accent/delam/17.ogg', - 'sound/machines/sm/accent/delam/18.ogg', - 'sound/machines/sm/accent/delam/19.ogg', - 'sound/machines/sm/accent/delam/20.ogg', - 'sound/machines/sm/accent/delam/21.ogg', - 'sound/machines/sm/accent/delam/22.ogg', - 'sound/machines/sm/accent/delam/23.ogg', - 'sound/machines/sm/accent/delam/24.ogg', - 'sound/machines/sm/accent/delam/25.ogg', - 'sound/machines/sm/accent/delam/26.ogg', - 'sound/machines/sm/accent/delam/27.ogg', - 'sound/machines/sm/accent/delam/28.ogg', - 'sound/machines/sm/accent/delam/29.ogg', - 'sound/machines/sm/accent/delam/30.ogg', - 'sound/machines/sm/accent/delam/31.ogg', - 'sound/machines/sm/accent/delam/32.ogg', - 'sound/machines/sm/accent/delam/33.ogg', - )) - if(SFX_HYPERTORUS_CALM) - soundin = pick(list( - 'sound/machines/sm/accent/normal/1.ogg', - 'sound/machines/sm/accent/normal/2.ogg', - 'sound/machines/sm/accent/normal/3.ogg', - 'sound/machines/sm/accent/normal/4.ogg', - 'sound/machines/sm/accent/normal/5.ogg', - 'sound/machines/sm/accent/normal/6.ogg', - 'sound/machines/sm/accent/normal/7.ogg', - 'sound/machines/sm/accent/normal/8.ogg', - 'sound/machines/sm/accent/normal/9.ogg', - 'sound/machines/sm/accent/normal/10.ogg', - 'sound/machines/sm/accent/normal/11.ogg', - 'sound/machines/sm/accent/normal/12.ogg', - 'sound/machines/sm/accent/normal/13.ogg', - 'sound/machines/sm/accent/normal/14.ogg', - 'sound/machines/sm/accent/normal/15.ogg', - 'sound/machines/sm/accent/normal/16.ogg', - 'sound/machines/sm/accent/normal/17.ogg', - 'sound/machines/sm/accent/normal/18.ogg', - 'sound/machines/sm/accent/normal/19.ogg', - 'sound/machines/sm/accent/normal/20.ogg', - 'sound/machines/sm/accent/normal/21.ogg', - 'sound/machines/sm/accent/normal/22.ogg', - 'sound/machines/sm/accent/normal/23.ogg', - 'sound/machines/sm/accent/normal/24.ogg', - 'sound/machines/sm/accent/normal/25.ogg', - 'sound/machines/sm/accent/normal/26.ogg', - 'sound/machines/sm/accent/normal/27.ogg', - 'sound/machines/sm/accent/normal/28.ogg', - 'sound/machines/sm/accent/normal/29.ogg', - 'sound/machines/sm/accent/normal/30.ogg', - 'sound/machines/sm/accent/normal/31.ogg', - 'sound/machines/sm/accent/normal/32.ogg', - 'sound/machines/sm/accent/normal/33.ogg', - )) - if(SFX_HYPERTORUS_MELTING) - soundin = pick(list( - 'sound/machines/sm/accent/delam/1.ogg', - 'sound/machines/sm/accent/delam/2.ogg', - 'sound/machines/sm/accent/delam/3.ogg', - 'sound/machines/sm/accent/delam/4.ogg', - 'sound/machines/sm/accent/delam/5.ogg', - 'sound/machines/sm/accent/delam/6.ogg', - 'sound/machines/sm/accent/delam/7.ogg', - 'sound/machines/sm/accent/delam/8.ogg', - 'sound/machines/sm/accent/delam/9.ogg', - 'sound/machines/sm/accent/delam/10.ogg', - 'sound/machines/sm/accent/delam/11.ogg', - 'sound/machines/sm/accent/delam/12.ogg', - 'sound/machines/sm/accent/delam/13.ogg', - 'sound/machines/sm/accent/delam/14.ogg', - 'sound/machines/sm/accent/delam/15.ogg', - 'sound/machines/sm/accent/delam/16.ogg', - 'sound/machines/sm/accent/delam/17.ogg', - 'sound/machines/sm/accent/delam/18.ogg', - 'sound/machines/sm/accent/delam/19.ogg', - 'sound/machines/sm/accent/delam/20.ogg', - 'sound/machines/sm/accent/delam/21.ogg', - 'sound/machines/sm/accent/delam/22.ogg', - 'sound/machines/sm/accent/delam/23.ogg', - 'sound/machines/sm/accent/delam/24.ogg', - 'sound/machines/sm/accent/delam/25.ogg', - 'sound/machines/sm/accent/delam/26.ogg', - 'sound/machines/sm/accent/delam/27.ogg', - 'sound/machines/sm/accent/delam/28.ogg', - 'sound/machines/sm/accent/delam/29.ogg', - 'sound/machines/sm/accent/delam/30.ogg', - 'sound/machines/sm/accent/delam/31.ogg', - 'sound/machines/sm/accent/delam/32.ogg', - 'sound/machines/sm/accent/delam/33.ogg', - )) - if(SFX_CRUNCHY_BUSH_WHACK) - soundin = pick('sound/effects/crunchybushwhack1.ogg', 'sound/effects/crunchybushwhack2.ogg', 'sound/effects/crunchybushwhack3.ogg') - if(SFX_TREE_CHOP) - soundin = pick('sound/effects/treechop1.ogg', 'sound/effects/treechop2.ogg', 'sound/effects/treechop3.ogg') - if(SFX_ROCK_TAP) - soundin = pick('sound/effects/rocktap1.ogg', 'sound/effects/rocktap2.ogg', 'sound/effects/rocktap3.ogg') - if(SFX_SEAR) - soundin = 'sound/weapons/sear.ogg' - if(SFX_REEL) - soundin = pick( - 'sound/items/reel1.ogg', - 'sound/items/reel2.ogg', - 'sound/items/reel3.ogg', - 'sound/items/reel4.ogg', - 'sound/items/reel5.ogg', - ) - if(SFX_RATTLE) - soundin = pick( - 'sound/items/rattle1.ogg', - 'sound/items/rattle2.ogg', - 'sound/items/rattle3.ogg', - ) + if(!istext(soundin)) + return soundin + switch(soundin) + if(SFX_SHATTER) + soundin = pick('sound/effects/glassbr1.ogg','sound/effects/glassbr2.ogg','sound/effects/glassbr3.ogg') + if(SFX_EXPLOSION) + soundin = pick('sound/effects/explosion1.ogg','sound/effects/explosion2.ogg') + if(SFX_EXPLOSION_CREAKING) + soundin = pick('sound/effects/explosioncreak1.ogg', 'sound/effects/explosioncreak2.ogg') + if(SFX_HULL_CREAKING) + soundin = pick('sound/effects/creak1.ogg', 'sound/effects/creak2.ogg', 'sound/effects/creak3.ogg') + if(SFX_SPARKS) + soundin = pick('sound/effects/sparks1.ogg','sound/effects/sparks2.ogg','sound/effects/sparks3.ogg','sound/effects/sparks4.ogg') + if(SFX_RUSTLE) + soundin = pick('sound/effects/rustle1.ogg','sound/effects/rustle2.ogg','sound/effects/rustle3.ogg','sound/effects/rustle4.ogg','sound/effects/rustle5.ogg') + if(SFX_BODYFALL) + soundin = pick('sound/effects/bodyfall1.ogg','sound/effects/bodyfall2.ogg','sound/effects/bodyfall3.ogg','sound/effects/bodyfall4.ogg') + if(SFX_PUNCH) + soundin = pick('sound/weapons/punch1.ogg','sound/weapons/punch2.ogg','sound/weapons/punch3.ogg','sound/weapons/punch4.ogg') + if(SFX_CLOWN_STEP) + soundin = pick('sound/effects/footstep/clownstep1.ogg','sound/effects/footstep/clownstep2.ogg') + if(SFX_SUIT_STEP) + soundin = pick('sound/effects/suitstep1.ogg','sound/effects/suitstep2.ogg') + if(SFX_SWING_HIT) + soundin = pick('sound/weapons/genhit1.ogg', 'sound/weapons/genhit2.ogg', 'sound/weapons/genhit3.ogg') + if(SFX_HISS) + soundin = pick('sound/voice/hiss1.ogg','sound/voice/hiss2.ogg','sound/voice/hiss3.ogg','sound/voice/hiss4.ogg') + if(SFX_PAGE_TURN) + soundin = pick('sound/effects/pageturn1.ogg', 'sound/effects/pageturn2.ogg','sound/effects/pageturn3.ogg') + if(SFX_RICOCHET) + soundin = pick( 'sound/weapons/effects/ric1.ogg', 'sound/weapons/effects/ric2.ogg','sound/weapons/effects/ric3.ogg','sound/weapons/effects/ric4.ogg','sound/weapons/effects/ric5.ogg') + if(SFX_TERMINAL_TYPE) + soundin = pick(list( + 'sound/machines/terminal_button01.ogg', + 'sound/machines/terminal_button02.ogg', + 'sound/machines/terminal_button03.ogg', + 'sound/machines/terminal_button04.ogg', + 'sound/machines/terminal_button05.ogg', + 'sound/machines/terminal_button06.ogg', + 'sound/machines/terminal_button07.ogg', + 'sound/machines/terminal_button08.ogg', + )) + if(SFX_DESECRATION) + soundin = pick('sound/misc/desecration-01.ogg', 'sound/misc/desecration-02.ogg', 'sound/misc/desecration-03.ogg') + if(SFX_IM_HERE) + soundin = pick('sound/hallucinations/im_here1.ogg', 'sound/hallucinations/im_here2.ogg') + if(SFX_CAN_OPEN) + soundin = pick('sound/effects/can_open1.ogg', 'sound/effects/can_open2.ogg', 'sound/effects/can_open3.ogg') + if(SFX_BULLET_MISS) + soundin = pick('sound/weapons/bulletflyby.ogg', 'sound/weapons/bulletflyby2.ogg', 'sound/weapons/bulletflyby3.ogg') + if(SFX_REVOLVER_SPIN) + soundin = pick('sound/weapons/gun/revolver/spin1.ogg', 'sound/weapons/gun/revolver/spin2.ogg', 'sound/weapons/gun/revolver/spin3.ogg') + if(SFX_LAW) + soundin = pick(list( + 'sound/voice/beepsky/creep.ogg', + 'sound/voice/beepsky/god.ogg', + 'sound/voice/beepsky/iamthelaw.ogg', + 'sound/voice/beepsky/insult.ogg', + 'sound/voice/beepsky/radio.ogg', + 'sound/voice/beepsky/secureday.ogg', + )) + if(SFX_HONKBOT_E) + soundin = pick(list( + 'sound/effects/pray.ogg', + 'sound/effects/reee.ogg', + 'sound/items/AirHorn.ogg', + 'sound/items/AirHorn2.ogg', + 'sound/items/bikehorn.ogg', + 'sound/items/WEEOO1.ogg', + 'sound/machines/buzz-sigh.ogg', + 'sound/machines/ping.ogg', + 'sound/magic/Fireball.ogg', + 'sound/misc/sadtrombone.ogg', + 'sound/voice/beepsky/creep.ogg', + 'sound/voice/beepsky/iamthelaw.ogg', + 'sound/voice/hiss1.ogg', + 'sound/weapons/bladeslice.ogg', + 'sound/weapons/flashbang.ogg', + )) + if(SFX_GOOSE) + soundin = pick('sound/creatures/goose1.ogg', 'sound/creatures/goose2.ogg', 'sound/creatures/goose3.ogg', 'sound/creatures/goose4.ogg') + if(SFX_WARPSPEED) + soundin = 'sound/runtime/hyperspace/hyperspace_begin.ogg' + if(SFX_SM_CALM) + soundin = pick(list( + 'sound/machines/sm/accent/normal/1.ogg', + 'sound/machines/sm/accent/normal/2.ogg', + 'sound/machines/sm/accent/normal/3.ogg', + 'sound/machines/sm/accent/normal/4.ogg', + 'sound/machines/sm/accent/normal/5.ogg', + 'sound/machines/sm/accent/normal/6.ogg', + 'sound/machines/sm/accent/normal/7.ogg', + 'sound/machines/sm/accent/normal/8.ogg', + 'sound/machines/sm/accent/normal/9.ogg', + 'sound/machines/sm/accent/normal/10.ogg', + 'sound/machines/sm/accent/normal/11.ogg', + 'sound/machines/sm/accent/normal/12.ogg', + 'sound/machines/sm/accent/normal/13.ogg', + 'sound/machines/sm/accent/normal/14.ogg', + 'sound/machines/sm/accent/normal/15.ogg', + 'sound/machines/sm/accent/normal/16.ogg', + 'sound/machines/sm/accent/normal/17.ogg', + 'sound/machines/sm/accent/normal/18.ogg', + 'sound/machines/sm/accent/normal/19.ogg', + 'sound/machines/sm/accent/normal/20.ogg', + 'sound/machines/sm/accent/normal/21.ogg', + 'sound/machines/sm/accent/normal/22.ogg', + 'sound/machines/sm/accent/normal/23.ogg', + 'sound/machines/sm/accent/normal/24.ogg', + 'sound/machines/sm/accent/normal/25.ogg', + 'sound/machines/sm/accent/normal/26.ogg', + 'sound/machines/sm/accent/normal/27.ogg', + 'sound/machines/sm/accent/normal/28.ogg', + 'sound/machines/sm/accent/normal/29.ogg', + 'sound/machines/sm/accent/normal/30.ogg', + 'sound/machines/sm/accent/normal/31.ogg', + 'sound/machines/sm/accent/normal/32.ogg', + 'sound/machines/sm/accent/normal/33.ogg', + )) + if(SFX_SM_DELAM) + soundin = pick(list( + 'sound/machines/sm/accent/delam/1.ogg', + 'sound/machines/sm/accent/delam/2.ogg', + 'sound/machines/sm/accent/delam/3.ogg', + 'sound/machines/sm/accent/delam/4.ogg', + 'sound/machines/sm/accent/delam/5.ogg', + 'sound/machines/sm/accent/delam/6.ogg', + 'sound/machines/sm/accent/delam/7.ogg', + 'sound/machines/sm/accent/delam/8.ogg', + 'sound/machines/sm/accent/delam/9.ogg', + 'sound/machines/sm/accent/delam/10.ogg', + 'sound/machines/sm/accent/delam/11.ogg', + 'sound/machines/sm/accent/delam/12.ogg', + 'sound/machines/sm/accent/delam/13.ogg', + 'sound/machines/sm/accent/delam/14.ogg', + 'sound/machines/sm/accent/delam/15.ogg', + 'sound/machines/sm/accent/delam/16.ogg', + 'sound/machines/sm/accent/delam/17.ogg', + 'sound/machines/sm/accent/delam/18.ogg', + 'sound/machines/sm/accent/delam/19.ogg', + 'sound/machines/sm/accent/delam/20.ogg', + 'sound/machines/sm/accent/delam/21.ogg', + 'sound/machines/sm/accent/delam/22.ogg', + 'sound/machines/sm/accent/delam/23.ogg', + 'sound/machines/sm/accent/delam/24.ogg', + 'sound/machines/sm/accent/delam/25.ogg', + 'sound/machines/sm/accent/delam/26.ogg', + 'sound/machines/sm/accent/delam/27.ogg', + 'sound/machines/sm/accent/delam/28.ogg', + 'sound/machines/sm/accent/delam/29.ogg', + 'sound/machines/sm/accent/delam/30.ogg', + 'sound/machines/sm/accent/delam/31.ogg', + 'sound/machines/sm/accent/delam/32.ogg', + 'sound/machines/sm/accent/delam/33.ogg', + )) + if(SFX_HYPERTORUS_CALM) + soundin = pick(list( + 'sound/machines/sm/accent/normal/1.ogg', + 'sound/machines/sm/accent/normal/2.ogg', + 'sound/machines/sm/accent/normal/3.ogg', + 'sound/machines/sm/accent/normal/4.ogg', + 'sound/machines/sm/accent/normal/5.ogg', + 'sound/machines/sm/accent/normal/6.ogg', + 'sound/machines/sm/accent/normal/7.ogg', + 'sound/machines/sm/accent/normal/8.ogg', + 'sound/machines/sm/accent/normal/9.ogg', + 'sound/machines/sm/accent/normal/10.ogg', + 'sound/machines/sm/accent/normal/11.ogg', + 'sound/machines/sm/accent/normal/12.ogg', + 'sound/machines/sm/accent/normal/13.ogg', + 'sound/machines/sm/accent/normal/14.ogg', + 'sound/machines/sm/accent/normal/15.ogg', + 'sound/machines/sm/accent/normal/16.ogg', + 'sound/machines/sm/accent/normal/17.ogg', + 'sound/machines/sm/accent/normal/18.ogg', + 'sound/machines/sm/accent/normal/19.ogg', + 'sound/machines/sm/accent/normal/20.ogg', + 'sound/machines/sm/accent/normal/21.ogg', + 'sound/machines/sm/accent/normal/22.ogg', + 'sound/machines/sm/accent/normal/23.ogg', + 'sound/machines/sm/accent/normal/24.ogg', + 'sound/machines/sm/accent/normal/25.ogg', + 'sound/machines/sm/accent/normal/26.ogg', + 'sound/machines/sm/accent/normal/27.ogg', + 'sound/machines/sm/accent/normal/28.ogg', + 'sound/machines/sm/accent/normal/29.ogg', + 'sound/machines/sm/accent/normal/30.ogg', + 'sound/machines/sm/accent/normal/31.ogg', + 'sound/machines/sm/accent/normal/32.ogg', + 'sound/machines/sm/accent/normal/33.ogg', + )) + if(SFX_HYPERTORUS_MELTING) + soundin = pick(list( + 'sound/machines/sm/accent/delam/1.ogg', + 'sound/machines/sm/accent/delam/2.ogg', + 'sound/machines/sm/accent/delam/3.ogg', + 'sound/machines/sm/accent/delam/4.ogg', + 'sound/machines/sm/accent/delam/5.ogg', + 'sound/machines/sm/accent/delam/6.ogg', + 'sound/machines/sm/accent/delam/7.ogg', + 'sound/machines/sm/accent/delam/8.ogg', + 'sound/machines/sm/accent/delam/9.ogg', + 'sound/machines/sm/accent/delam/10.ogg', + 'sound/machines/sm/accent/delam/11.ogg', + 'sound/machines/sm/accent/delam/12.ogg', + 'sound/machines/sm/accent/delam/13.ogg', + 'sound/machines/sm/accent/delam/14.ogg', + 'sound/machines/sm/accent/delam/15.ogg', + 'sound/machines/sm/accent/delam/16.ogg', + 'sound/machines/sm/accent/delam/17.ogg', + 'sound/machines/sm/accent/delam/18.ogg', + 'sound/machines/sm/accent/delam/19.ogg', + 'sound/machines/sm/accent/delam/20.ogg', + 'sound/machines/sm/accent/delam/21.ogg', + 'sound/machines/sm/accent/delam/22.ogg', + 'sound/machines/sm/accent/delam/23.ogg', + 'sound/machines/sm/accent/delam/24.ogg', + 'sound/machines/sm/accent/delam/25.ogg', + 'sound/machines/sm/accent/delam/26.ogg', + 'sound/machines/sm/accent/delam/27.ogg', + 'sound/machines/sm/accent/delam/28.ogg', + 'sound/machines/sm/accent/delam/29.ogg', + 'sound/machines/sm/accent/delam/30.ogg', + 'sound/machines/sm/accent/delam/31.ogg', + 'sound/machines/sm/accent/delam/32.ogg', + 'sound/machines/sm/accent/delam/33.ogg', + )) + if(SFX_CRUNCHY_BUSH_WHACK) + soundin = pick('sound/effects/crunchybushwhack1.ogg', 'sound/effects/crunchybushwhack2.ogg', 'sound/effects/crunchybushwhack3.ogg') + if(SFX_TREE_CHOP) + soundin = pick('sound/effects/treechop1.ogg', 'sound/effects/treechop2.ogg', 'sound/effects/treechop3.ogg') + if(SFX_ROCK_TAP) + soundin = pick('sound/effects/rocktap1.ogg', 'sound/effects/rocktap2.ogg', 'sound/effects/rocktap3.ogg') + if(SFX_SEAR) + soundin = 'sound/weapons/sear.ogg' + if(SFX_REEL) + soundin = pick( + 'sound/items/reel1.ogg', + 'sound/items/reel2.ogg', + 'sound/items/reel3.ogg', + 'sound/items/reel4.ogg', + 'sound/items/reel5.ogg', + ) + if(SFX_RATTLE) + soundin = pick( + 'sound/items/rattle1.ogg', + 'sound/items/rattle2.ogg', + 'sound/items/rattle3.ogg', + ) + if(SFX_PORTAL_CLOSE) + soundin = 'sound/effects/portal_close.ogg' + if(SFX_PORTAL_ENTER) + soundin = 'sound/effects/portal_travel.ogg' + if(SFX_PORTAL_CREATED) + soundin = pick( + 'sound/effects/portal_open_1.ogg', + 'sound/effects/portal_open_2.ogg', + 'sound/effects/portal_open_3.ogg', + ) + if(SFX_SCREECH) + soundin = pick( + 'sound/creatures/monkey/monkey_screech_1.ogg', + 'sound/creatures/monkey/monkey_screech_2.ogg', + 'sound/creatures/monkey/monkey_screech_3.ogg', + 'sound/creatures/monkey/monkey_screech_4.ogg', + 'sound/creatures/monkey/monkey_screech_5.ogg', + 'sound/creatures/monkey/monkey_screech_6.ogg', + 'sound/creatures/monkey/monkey_screech_7.ogg', + ) return soundin diff --git a/code/game/turfs/change_turf.dm b/code/game/turfs/change_turf.dm index e7e2974d2f18f..32c531e34dc74 100644 --- a/code/game/turfs/change_turf.dm +++ b/code/game/turfs/change_turf.dm @@ -91,6 +91,8 @@ GLOBAL_LIST_INIT(blacklisted_automated_baseturfs, typecacheof(list( var/list/old_baseturfs = baseturfs var/old_type = type + var/datum/weakref/old_ref = weak_reference + weak_reference = null var/list/post_change_callbacks = list() SEND_SIGNAL(src, COMSIG_TURF_CHANGE, path, new_baseturfs, flags, post_change_callbacks) @@ -137,6 +139,8 @@ GLOBAL_LIST_INIT(blacklisted_automated_baseturfs, typecacheof(list( lattice_underneath = old_lattice_underneath + new_turf.weak_reference = old_ref + if(SSlighting.initialized) // Space tiles should never have lighting objects if(!space_lit) diff --git a/code/game/turfs/closed/indestructible.dm b/code/game/turfs/closed/indestructible.dm index 9f764715bf378..4b5e51b8f3b72 100644 --- a/code/game/turfs/closed/indestructible.dm +++ b/code/game/turfs/closed/indestructible.dm @@ -3,9 +3,7 @@ desc = "Effectively impervious to conventional methods of destruction." icon = 'icons/turf/walls.dmi' explosive_resistance = 50 - -/turf/closed/indestructible/rust_heretic_act() - return + rust_resistance = RUST_RESISTANCE_ABSOLUTE /turf/closed/indestructible/TerraformTurf(path, new_baseturf, flags, defer_change = FALSE, ignore_air = FALSE) return diff --git a/code/game/turfs/closed/minerals.dm b/code/game/turfs/closed/minerals.dm index 04e44f6e968c7..3ec5ee06e581f 100644 --- a/code/game/turfs/closed/minerals.dm +++ b/code/game/turfs/closed/minerals.dm @@ -547,6 +547,12 @@ mineralType = /obj/item/stack/ore/iron scan_state = "rock_Iron" +/turf/closed/mineral/iron/volcanic + turf_type = /turf/open/misc/asteroid/basalt/lava_land_surface + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + initial_gas_mix = LAVALAND_DEFAULT_ATMOS + defer_change = TRUE + /turf/closed/mineral/iron/ice icon_state = "icerock_iron" icon = MAP_SWITCH('icons/turf/walls/icerock_wall.dmi', 'icons/turf/mining.dmi') @@ -561,10 +567,22 @@ mineralType = /obj/item/stack/ore/uranium scan_state = "rock_Uranium" +/turf/closed/mineral/uranium/volcanic + turf_type = /turf/open/misc/asteroid/basalt/lava_land_surface + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + initial_gas_mix = LAVALAND_DEFAULT_ATMOS + defer_change = TRUE + /turf/closed/mineral/diamond mineralType = /obj/item/stack/ore/diamond scan_state = "rock_Diamond" +/turf/closed/mineral/diamond/volcanic + turf_type = /turf/open/misc/asteroid/basalt/lava_land_surface + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + initial_gas_mix = LAVALAND_DEFAULT_ATMOS + defer_change = TRUE + /turf/closed/mineral/diamond/ice icon_state = "icerock_iron" icon = MAP_SWITCH('icons/turf/walls/icerock_wall.dmi', 'icons/turf/mining.dmi') @@ -589,6 +607,12 @@ mineralType = /obj/item/stack/ore/silver scan_state = "rock_Silver" +/turf/closed/mineral/silver/volcanic + turf_type = /turf/open/misc/asteroid/basalt/lava_land_surface + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + initial_gas_mix = LAVALAND_DEFAULT_ATMOS + defer_change = TRUE + /turf/closed/mineral/silver/ice/icemoon turf_type = /turf/open/misc/asteroid/snow/ice/icemoon baseturfs = /turf/open/misc/asteroid/snow/ice/icemoon @@ -598,10 +622,22 @@ mineralType = /obj/item/stack/ore/titanium scan_state = "rock_Titanium" +/turf/closed/mineral/titanium/volcanic + turf_type = /turf/open/misc/asteroid/basalt/lava_land_surface + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + initial_gas_mix = LAVALAND_DEFAULT_ATMOS + defer_change = TRUE + /turf/closed/mineral/plasma mineralType = /obj/item/stack/ore/plasma scan_state = "rock_Plasma" +/turf/closed/mineral/plasma/volcanic + turf_type = /turf/open/misc/asteroid/basalt/lava_land_surface + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + initial_gas_mix = LAVALAND_DEFAULT_ATMOS + defer_change = TRUE + /turf/closed/mineral/plasma/ice icon_state = "icerock_plasma" icon = MAP_SWITCH('icons/turf/walls/icerock_wall.dmi', 'icons/turf/mining.dmi') @@ -617,6 +653,12 @@ mineralAmt = 3 scan_state = "rock_Bananium" +/turf/closed/mineral/bananium/volcanic + turf_type = /turf/open/misc/asteroid/basalt/lava_land_surface + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + initial_gas_mix = LAVALAND_DEFAULT_ATMOS + defer_change = TRUE + /turf/closed/mineral/bscrystal mineralType = /obj/item/stack/ore/bluespace_crystal mineralAmt = 1 @@ -650,6 +692,7 @@ initial_gas_mix = OPENTURF_LOW_PRESSURE turf_type = /turf/open/misc/ashplanet/rocky defer_change = TRUE + rust_resistance = RUST_RESISTANCE_ORGANIC /turf/closed/mineral/snowmountain name = "snowy mountainside" diff --git a/code/game/turfs/closed/wall/material_walls.dm b/code/game/turfs/closed/wall/material_walls.dm index e625000722208..5f16a68584f3e 100644 --- a/code/game/turfs/closed/wall/material_walls.dm +++ b/code/game/turfs/closed/wall/material_walls.dm @@ -9,6 +9,7 @@ canSmoothWith = SMOOTH_GROUP_MATERIAL_WALLS rcd_memory = null material_flags = MATERIAL_EFFECTS | MATERIAL_ADD_PREFIX | MATERIAL_COLOR | MATERIAL_AFFECT_STATISTICS + rust_resistance = RUST_RESISTANCE_BASIC /turf/closed/wall/material/break_wall() for(var/i in custom_materials) diff --git a/code/game/turfs/closed/wall/mineral_walls.dm b/code/game/turfs/closed/wall/mineral_walls.dm index b42e194ffcfc8..347e9af8f0d24 100644 --- a/code/game/turfs/closed/wall/mineral_walls.dm +++ b/code/game/turfs/closed/wall/mineral_walls.dm @@ -6,6 +6,7 @@ canSmoothWith = null rcd_memory = null material_flags = MATERIAL_EFFECTS + rust_resistance = RUST_RESISTANCE_BASIC /turf/closed/wall/mineral/gold name = "gold wall" @@ -19,6 +20,7 @@ smoothing_groups = SMOOTH_GROUP_GOLD_WALLS + SMOOTH_GROUP_WALLS + SMOOTH_GROUP_CLOSED_TURFS canSmoothWith = SMOOTH_GROUP_GOLD_WALLS custom_materials = list(/datum/material/gold = SHEET_MATERIAL_AMOUNT*2) + rust_resistance = RUST_RESISTANCE_BASIC /turf/closed/wall/mineral/silver name = "silver wall" @@ -47,6 +49,7 @@ smoothing_groups = SMOOTH_GROUP_DIAMOND_WALLS + SMOOTH_GROUP_WALLS + SMOOTH_GROUP_CLOSED_TURFS canSmoothWith = SMOOTH_GROUP_DIAMOND_WALLS custom_materials = list(/datum/material/diamond = SHEET_MATERIAL_AMOUNT*2) + rust_resistance = RUST_RESISTANCE_REINFORCED /turf/closed/wall/mineral/diamond/hulk_recoil(obj/item/bodypart/arm, mob/living/carbon/human/hulkman, damage = 41) return ..() @@ -63,6 +66,7 @@ smoothing_groups = SMOOTH_GROUP_BANANIUM_WALLS + SMOOTH_GROUP_WALLS + SMOOTH_GROUP_CLOSED_TURFS canSmoothWith = SMOOTH_GROUP_BANANIUM_WALLS custom_materials = list(/datum/material/bananium = SHEET_MATERIAL_AMOUNT*2) + rust_resistance = RUST_RESISTANCE_BASIC /turf/closed/wall/mineral/sandstone name = "sandstone wall" @@ -77,6 +81,7 @@ smoothing_groups = SMOOTH_GROUP_SANDSTONE_WALLS + SMOOTH_GROUP_WALLS + SMOOTH_GROUP_CLOSED_TURFS canSmoothWith = SMOOTH_GROUP_SANDSTONE_WALLS custom_materials = list(/datum/material/sandstone = SHEET_MATERIAL_AMOUNT*2) + rust_resistance = RUST_RESISTANCE_BASIC /turf/closed/wall/mineral/uranium article = "a" @@ -91,6 +96,7 @@ smoothing_groups = SMOOTH_GROUP_URANIUM_WALLS + SMOOTH_GROUP_WALLS + SMOOTH_GROUP_CLOSED_TURFS canSmoothWith = SMOOTH_GROUP_URANIUM_WALLS custom_materials = list(/datum/material/uranium = SHEET_MATERIAL_AMOUNT*2) + rust_resistance = RUST_RESISTANCE_REINFORCED /// Mutex to prevent infinite recursion when propagating radiation pulses var/active = null @@ -148,6 +154,7 @@ smoothing_groups = SMOOTH_GROUP_PLASMA_WALLS + SMOOTH_GROUP_WALLS + SMOOTH_GROUP_CLOSED_TURFS canSmoothWith = SMOOTH_GROUP_PLASMA_WALLS custom_materials = list(/datum/material/plasma = SHEET_MATERIAL_AMOUNT*2) + rust_resistance = RUST_RESISTANCE_BASIC /turf/closed/wall/mineral/wood name = "wooden wall" @@ -163,6 +170,7 @@ smoothing_groups = SMOOTH_GROUP_WOOD_WALLS + SMOOTH_GROUP_WALLS + SMOOTH_GROUP_CLOSED_TURFS canSmoothWith = SMOOTH_GROUP_WOOD_WALLS custom_materials = list(/datum/material/wood = SHEET_MATERIAL_AMOUNT*2) + rust_resistance = RUST_RESISTANCE_BASIC /turf/closed/wall/mineral/wood/attackby(obj/item/W, mob/user) if(W.get_sharpness() && W.force) @@ -193,6 +201,7 @@ canSmoothWith = SMOOTH_GROUP_BAMBOO_WALLS sheet_type = /obj/item/stack/sheet/mineral/bamboo hardness = 80 //it's not a mineral... + rust_resistance = RUST_RESISTANCE_BASIC /turf/closed/wall/mineral/iron name = "rough iron wall" @@ -207,6 +216,7 @@ smoothing_groups = SMOOTH_GROUP_IRON_WALLS + SMOOTH_GROUP_WALLS + SMOOTH_GROUP_CLOSED_TURFS canSmoothWith = SMOOTH_GROUP_IRON_WALLS custom_materials = list(/datum/material/iron =SHEET_MATERIAL_AMOUNT * 2.5) + rust_resistance = RUST_RESISTANCE_BASIC /turf/closed/wall/mineral/snow name = "packed snow wall" @@ -224,6 +234,7 @@ bullet_sizzle = TRUE bullet_bounce_sound = null custom_materials = list(/datum/material/snow = SHEET_MATERIAL_AMOUNT*2) + rust_resistance = RUST_RESISTANCE_BASIC /turf/closed/wall/mineral/snow/hulk_recoil(obj/item/bodypart/arm, mob/living/carbon/human/hulkman, damage = 0) return ..() //No recoil damage, snow is weak @@ -242,6 +253,7 @@ smoothing_groups = SMOOTH_GROUP_ABDUCTOR_WALLS + SMOOTH_GROUP_WALLS + SMOOTH_GROUP_CLOSED_TURFS canSmoothWith = SMOOTH_GROUP_ABDUCTOR_WALLS custom_materials = list(/datum/material/alloy/alien = SHEET_MATERIAL_AMOUNT*2) + rust_resistance = RUST_RESISTANCE_ORGANIC /////////////////////Titanium walls///////////////////// @@ -260,9 +272,13 @@ smoothing_groups = SMOOTH_GROUP_TITANIUM_WALLS + SMOOTH_GROUP_WALLS + SMOOTH_GROUP_CLOSED_TURFS canSmoothWith = SMOOTH_GROUP_SHUTTLE_PARTS + SMOOTH_GROUP_AIRLOCK + SMOOTH_GROUP_TITANIUM_WALLS custom_materials = list(/datum/material/titanium = SHEET_MATERIAL_AMOUNT*2) + rust_resistance = RUST_RESISTANCE_TITANIUM -/turf/closed/wall/mineral/titanium/rust_heretic_act() - return // titanium does not rust +/turf/closed/wall/mineral/titanium/rust_turf() + if(HAS_TRAIT(src, TRAIT_RUSTY)) + ChangeTurf(/turf/closed/wall/rust) + return + return ..() /turf/closed/wall/mineral/titanium/nodiagonal icon = 'icons/turf/walls/shuttle_wall.dmi' @@ -291,16 +307,25 @@ base_icon_state = "survival_pod_walls" smoothing_flags = SMOOTH_BITMASK | SMOOTH_DIAGONAL_CORNERS canSmoothWith = SMOOTH_GROUP_SHUTTLE_PARTS + SMOOTH_GROUP_AIRLOCK + SMOOTH_GROUP_WINDOW_FULLTILE + SMOOTH_GROUP_TITANIUM_WALLS + rust_resistance = RUST_RESISTANCE_TITANIUM /turf/closed/wall/mineral/titanium/survival/nodiagonal icon = 'icons/turf/walls/survival_pod_walls.dmi' icon_state = "survival_pod_walls-0" base_icon_state = "survival_pod_walls" smoothing_flags = SMOOTH_BITMASK + rust_resistance = RUST_RESISTANCE_TITANIUM /turf/closed/wall/mineral/titanium/survival/pod smoothing_groups = SMOOTH_GROUP_SURVIVAL_TITANIUM_POD + SMOOTH_GROUP_TITANIUM_WALLS + SMOOTH_GROUP_WALLS + SMOOTH_GROUP_CLOSED_TURFS canSmoothWith = SMOOTH_GROUP_SURVIVAL_TITANIUM_POD + rust_resistance = RUST_RESISTANCE_TITANIUM + +/turf/closed/wall/mineral/titanium/rust_turf() + if(HAS_TRAIT(src, TRAIT_RUSTY)) + ChangeTurf(/turf/closed/wall/rust) + return + return ..() /////////////////////Plastitanium walls///////////////////// @@ -317,20 +342,33 @@ smoothing_groups = SMOOTH_GROUP_PLASTITANIUM_WALLS + SMOOTH_GROUP_WALLS + SMOOTH_GROUP_CLOSED_TURFS canSmoothWith = SMOOTH_GROUP_SHUTTLE_PARTS + SMOOTH_GROUP_AIRLOCK + SMOOTH_GROUP_PLASTITANIUM_WALLS + SMOOTH_GROUP_SYNDICATE_WALLS custom_materials = list(/datum/material/alloy/plastitanium = SHEET_MATERIAL_AMOUNT*2) + rust_resistance = RUST_RESISTANCE_TITANIUM + +/turf/closed/wall/mineral/plastitanium/rust_turf() + if(HAS_TRAIT(src, TRAIT_RUSTY)) + ChangeTurf(/turf/closed/wall/rust) + return + return ..() -/turf/closed/wall/mineral/plastitanium/rust_heretic_act() - return // plastitanium does not rust /turf/closed/wall/mineral/plastitanium/nodiagonal icon = 'icons/turf/walls/plastitanium_wall.dmi' icon_state = "map-shuttle_nd" base_icon_state = "plastitanium_wall" smoothing_flags = SMOOTH_BITMASK + rust_resistance = RUST_RESISTANCE_TITANIUM /turf/closed/wall/mineral/plastitanium/overspace icon_state = "map-overspace" smoothing_flags = SMOOTH_BITMASK | SMOOTH_DIAGONAL_CORNERS fixed_underlay = list("space" = TRUE) + rust_resistance = RUST_RESISTANCE_TITANIUM + +/turf/closed/wall/mineral/plastitanium/rust_turf() + if(HAS_TRAIT(src, TRAIT_RUSTY)) + ChangeTurf(/turf/closed/wall/rust) + return + return ..() /turf/closed/wall/mineral/plastitanium/explosive/ex_act(severity) diff --git a/code/game/turfs/closed/wall/reinf_walls.dm b/code/game/turfs/closed/wall/reinf_walls.dm index 0e119f92df019..e94a31eeafef4 100644 --- a/code/game/turfs/closed/wall/reinf_walls.dm +++ b/code/game/turfs/closed/wall/reinf_walls.dm @@ -14,6 +14,7 @@ girder_type = /obj/structure/girder/reinforced explosive_resistance = 2 rad_insulation = RAD_HEAVY_INSULATION + rust_resistance = RUST_RESISTANCE_REINFORCED heat_capacity = 312500 //a little over 5 cm thick , 312500 for 1 m by 2.5 m by 0.25 m plasteel wall. also indicates the temperature at wich the wall will melt (currently only able to melt with H/E pipes) ///Dismantled state, related to deconstruction. var/d_state = INTACT @@ -222,11 +223,9 @@ if(the_rcd.canRturf || rcd_data["[RCD_DESIGN_MODE]"] == RCD_WALLFRAME) return ..() -/turf/closed/wall/r_wall/rust_heretic_act() - if(prob(50)) - return +/turf/closed/wall/r_wall/rust_turf() if(HAS_TRAIT(src, TRAIT_RUSTY)) - ScrapeAway() + ChangeTurf(/turf/closed/wall/rust) return return ..() @@ -243,6 +242,7 @@ smoothing_flags = SMOOTH_BITMASK | SMOOTH_DIAGONAL_CORNERS smoothing_groups = SMOOTH_GROUP_WALLS + SMOOTH_GROUP_CLOSED_TURFS + SMOOTH_GROUP_SYNDICATE_WALLS canSmoothWith = SMOOTH_GROUP_SHUTTLE_PARTS + SMOOTH_GROUP_AIRLOCK + SMOOTH_GROUP_PLASTITANIUM_WALLS + SMOOTH_GROUP_SYNDICATE_WALLS + rust_resistance = RUST_RESISTANCE_TITANIUM /turf/closed/wall/r_wall/syndicate/rcd_vals(mob/user, obj/item/construction/rcd/the_rcd) return FALSE diff --git a/code/game/turfs/closed/walls.dm b/code/game/turfs/closed/walls.dm index 6797f5a379f0f..4b0f7961d51ff 100644 --- a/code/game/turfs/closed/walls.dm +++ b/code/game/turfs/closed/walls.dm @@ -7,6 +7,7 @@ icon_state = "wall-0" base_icon_state = "wall" explosive_resistance = 1 + rust_resistance = RUST_RESISTANCE_BASIC thermal_conductivity = WALL_HEAT_TRANSFER_COEFFICIENT heat_capacity = 62500 //a little over 5 cm thick , 62500 for 1 m by 2.5 m by 0.25 m iron wall. also indicates the temperature at wich the wall will melt (currently only able to melt with H/E pipes) @@ -33,8 +34,7 @@ var/list/dent_decals -/turf/closed/wall/MouseDrop_T(atom/dropping, mob/user, params) - ..() +/turf/closed/wall/mouse_drop_receive(atom/dropping, mob/user, params) if(dropping != user) return if(!iscarbon(dropping) && !iscyborg(dropping)) @@ -367,12 +367,11 @@ add_overlay(dent_decals) -/turf/closed/wall/rust_heretic_act() +/turf/closed/wall/rust_turf() if(HAS_TRAIT(src, TRAIT_RUSTY)) ScrapeAway() return - if(prob(70)) - new /obj/effect/temp_visual/glowing_rune(src) + return ..() /turf/closed/wall/metal_foam_base diff --git a/code/game/turfs/open/_open.dm b/code/game/turfs/open/_open.dm index c64dd309d5264..7297f8433261e 100644 --- a/code/game/turfs/open/_open.dm +++ b/code/game/turfs/open/_open.dm @@ -11,7 +11,11 @@ /// Determines the type of damage overlay that will be used for the tile var/damaged_dmi = null var/broken = FALSE + /// Are broken overlays smoothed? if they are we have to change a little bit about how we render them + var/smooth_broken = FALSE var/burnt = FALSE + /// Are burnt overlays smoothed? if they are we have to change a little bit about how we render them + var/smooth_burnt = FALSE /// Returns a list of every turf state considered "broken". @@ -41,15 +45,33 @@ /turf/open/update_overlays() if(isnull(damaged_dmi)) return ..() + . = ..() + if(broken) - . += mutable_appearance(damaged_dmi, pick(broken_states())) + var/mutable_appearance/broken_appearance = mutable_appearance(damaged_dmi, pick(broken_states())) + + if(smoothing_flags && !smooth_broken) + var/matrix/translation = new + translation.Translate(-LARGE_TURF_SMOOTHING_X_OFFSET, -LARGE_TURF_SMOOTHING_Y_OFFSET) + broken_appearance.transform = translation + + . += broken_appearance + else if(burnt) var/list/burnt_states = burnt_states() + var/mutable_appearance/burnt_appearance if(burnt_states.len) - . += mutable_appearance(damaged_dmi, pick(burnt_states)) + burnt_appearance = mutable_appearance(damaged_dmi, pick(burnt_states)) else - . += mutable_appearance(damaged_dmi, pick(broken_states())) + burnt_appearance = mutable_appearance(damaged_dmi, pick(broken_states())) + + if(smoothing_flags && !smooth_burnt) + var/matrix/translation = new + translation.Translate(-LARGE_TURF_SMOOTHING_X_OFFSET, -LARGE_TURF_SMOOTHING_Y_OFFSET) + burnt_appearance.transform = translation + + . += burnt_appearance //direction is direction of travel of A /turf/open/zPassIn(direction) @@ -139,6 +161,9 @@ /turf/open/indestructible/light icon_state = "light_on-1" + light_range = 3 + light_color = LIGHT_COLOR_CYAN + light_on = TRUE /turf/open/indestructible/permalube icon_state = "darkfull" @@ -297,9 +322,9 @@ I.AddElement(/datum/element/frozen) for(var/mob/living/L in contents) - if(L.bodytemperature <= 50) + if(L.bodytemperature <= 50 && !HAS_TRAIT(L, TRAIT_RESISTCOLD)) L.apply_status_effect(/datum/status_effect/freon) - MakeSlippery(TURF_WET_PERMAFROST, 50) + MakeSlippery(TURF_WET_PERMAFROST, 10 SECONDS) return TRUE /turf/open/proc/water_vapor_gas_act() diff --git a/code/game/turfs/open/ashplanet.dm b/code/game/turfs/open/ashplanet.dm index c3aee1e4d0ecb..31369a2e5cec8 100644 --- a/code/game/turfs/open/ashplanet.dm +++ b/code/game/turfs/open/ashplanet.dm @@ -15,9 +15,9 @@ clawfootstep = FOOTSTEP_SAND heavyfootstep = FOOTSTEP_GENERIC_HEAVY tiled_dirt = FALSE + rust_resistance = RUST_RESISTANCE_ORGANIC var/smooth_icon = 'icons/turf/floors/ash.dmi' - /turf/open/misc/ashplanet/Initialize(mapload) . = ..() if(smoothing_flags & SMOOTH_BITMASK) @@ -64,6 +64,7 @@ barefootstep = FOOTSTEP_HARD_BAREFOOT clawfootstep = FOOTSTEP_HARD_CLAW heavyfootstep = FOOTSTEP_GENERIC_HEAVY + rust_resistance = RUST_RESISTANCE_ORGANIC /turf/open/misc/ashplanet/wateryrock/Initialize(mapload) icon_state = "[icon_state][rand(1, 9)]" diff --git a/code/game/turfs/open/asteroid.dm b/code/game/turfs/open/asteroid.dm index 3a3a837968a22..8db5753a7196b 100644 --- a/code/game/turfs/open/asteroid.dm +++ b/code/game/turfs/open/asteroid.dm @@ -14,7 +14,7 @@ barefootstep = FOOTSTEP_SAND clawfootstep = FOOTSTEP_SAND heavyfootstep = FOOTSTEP_GENERIC_HEAVY - + rust_resistance = RUST_RESISTANCE_ORGANIC /// Base turf type to be created by the tunnel var/turf_type = /turf/open/misc/asteroid /// Whether this turf has different icon states @@ -50,9 +50,6 @@ if(has_floor_variance && prob(floor_variance)) icon_state = "[base_icon_state][rand(0,12)]" -/turf/open/misc/asteroid/burn_tile() - return - /turf/open/misc/asteroid/MakeSlippery(wet_setting, min_wet_time, wet_time_to_add, max_wet_time, permanent) return @@ -226,7 +223,7 @@ GLOBAL_LIST_EMPTY(dug_up_basalt) return TRUE return FALSE -/turf/open/misc/grass/burnt_states() +/turf/open/misc/asteroid/snow/burnt_states() return list("snow_dug") /turf/open/misc/asteroid/snow/icemoon diff --git a/code/game/turfs/open/chasm.dm b/code/game/turfs/open/chasm.dm index 142d966172b80..504e876d536ce 100644 --- a/code/game/turfs/open/chasm.dm +++ b/code/game/turfs/open/chasm.dm @@ -11,6 +11,7 @@ canSmoothWith = SMOOTH_GROUP_TURF_CHASM density = TRUE //This will prevent hostile mobs from pathing into chasms, while the canpass override will still let it function like an open turf bullet_bounce_sound = null //abandon all hope ye who enter + rust_resistance = RUST_RESISTANCE_ABSOLUTE /turf/open/chasm/Initialize(mapload) . = ..() @@ -46,8 +47,7 @@ return TRUE return FALSE -/turf/open/chasm/rust_heretic_act() - return FALSE + /turf/open/chasm/get_smooth_underlay_icon(mutable_appearance/underlay_appearance, turf/asking_turf, adjacency_dir) underlay_appearance.icon = 'icons/turf/floors.dmi' diff --git a/code/game/turfs/open/floor.dm b/code/game/turfs/open/floor.dm index 2dbd065849ec1..84b9ac26e9b8d 100644 --- a/code/game/turfs/open/floor.dm +++ b/code/game/turfs/open/floor.dm @@ -142,7 +142,7 @@ /turf/open/floor/proc/try_replace_tile(obj/item/stack/tile/T, mob/user, params) if(T.turf_type == type && T.turf_dir == dir) return - var/obj/item/crowbar/CB = user.is_holding_item_of_type(/obj/item/crowbar) + var/obj/item/crowbar/CB = user.is_holding_tool_quality(TOOL_CROWBAR) if(!CB) return var/turf/open/floor/plating/P = pry_tile(CB, user, TRUE) @@ -363,6 +363,12 @@ return TRUE return FALSE +/turf/open/floor/rust_turf() + if(HAS_TRAIT(src, TRAIT_RUSTY)) + return + ChangeTurf(/turf/open/floor/plating) + return ..() + /turf/open/floor/material name = "floor" icon_state = "materialfloor" diff --git a/code/game/turfs/open/floor/catwalk_plating.dm b/code/game/turfs/open/floor/catwalk_plating.dm index afb4274cb57ba..57bd0b74107ee 100644 --- a/code/game/turfs/open/floor/catwalk_plating.dm +++ b/code/game/turfs/open/floor/catwalk_plating.dm @@ -16,6 +16,7 @@ footstep = FOOTSTEP_CATWALK overfloor_placed = TRUE underfloor_accessibility = UNDERFLOOR_VISIBLE + rust_resistance = RUST_RESISTANCE_BASIC var/covered = TRUE var/catwalk_type = "maint" var/static/list/catwalk_underlays = list() @@ -90,7 +91,7 @@ icon_state = "titanium_above" floor_tile = /obj/item/stack/tile/catwalk_tile/titanium catwalk_type = "titanium" - + rust_resistance = RUST_RESISTANCE_TITANIUM /turf/open/floor/catwalk_floor/iron_smooth //the original green type name = "smooth plated catwalk floor" diff --git a/code/game/turfs/open/floor/fancy_floor.dm b/code/game/turfs/open/floor/fancy_floor.dm index d498d47a6c806..cfece702af4f1 100644 --- a/code/game/turfs/open/floor/fancy_floor.dm +++ b/code/game/turfs/open/floor/fancy_floor.dm @@ -13,11 +13,11 @@ icon_state = "wood" floor_tile = /obj/item/stack/tile/wood footstep = FOOTSTEP_WOOD - turf_flags = NO_RUST barefootstep = FOOTSTEP_WOOD_BAREFOOT clawfootstep = FOOTSTEP_WOOD_CLAW heavyfootstep = FOOTSTEP_GENERIC_HEAVY tiled_dirt = FALSE + rust_resistance = RUST_RESISTANCE_BASIC /turf/open/floor/wood/broken_states() return list("wood-broken", "wood-broken2", "wood-broken3", "wood-broken4", "wood-broken5", "wood-broken6", "wood-broken7") @@ -34,9 +34,9 @@ /turf/open/floor/wood/try_replace_tile(obj/item/stack/tile/T, mob/user, params) if(T.turf_type == type) return - var/obj/item/tool = user.is_holding_item_of_type(/obj/item/screwdriver) + var/obj/item/tool = user.is_holding_tool_quality(TOOL_SCREWDRIVER) if(!tool) - tool = user.is_holding_item_of_type(/obj/item/crowbar) + tool = user.is_holding_tool_quality(TOOL_CROWBAR) if(!tool) return var/turf/open/floor/plating/P = pry_tile(tool, user, TRUE) @@ -149,6 +149,7 @@ clawfootstep = FOOTSTEP_GRASS heavyfootstep = FOOTSTEP_GENERIC_HEAVY tiled_dirt = FALSE + rust_resistance = RUST_RESISTANCE_ORGANIC /turf/open/floor/grass/broken_states() return list("[initial(icon_state)]_damaged") @@ -159,6 +160,9 @@ AddElement(/datum/element/diggable, /obj/item/stack/ore/glass, 2, worm_chance = 50, \ action_text = "uproot", action_text_third_person = "uproots") +/turf/open/floor/grass/Airless + initial_gas_mix = AIRLESS_ATMOS + /turf/open/floor/grass/proc/spawniconchange() icon_state = "grass[rand(0,3)]" @@ -197,7 +201,7 @@ initial_gas_mix = FROZEN_ATMOS bullet_bounce_sound = null tiled_dirt = FALSE - + rust_resistance = RUST_RESISTANCE_ORGANIC slowdown = 1.5 bullet_sizzle = TRUE footstep = FOOTSTEP_SAND @@ -205,6 +209,7 @@ clawfootstep = FOOTSTEP_SAND heavyfootstep = FOOTSTEP_GENERIC_HEAVY + /turf/open/floor/fake_snow/Initialize(mapload) . = ..() AddElement(/datum/element/diggable, /obj/item/stack/tile/mineral/snow, 1, worm_chance = 0) @@ -256,6 +261,7 @@ clawfootstep = FOOTSTEP_CARPET_BAREFOOT heavyfootstep = FOOTSTEP_GENERIC_HEAVY tiled_dirt = FALSE + rust_resistance = RUST_RESISTANCE_BASIC /turf/open/floor/carpet/examine(mob/user) . = ..() @@ -270,11 +276,11 @@ if(!. || !(updates & UPDATE_SMOOTHING)) return if(!broken && !burnt) - if(smoothing_flags & (SMOOTH_CORNERS|SMOOTH_BITMASK)) + if(smoothing_flags & USES_SMOOTHING) QUEUE_SMOOTH(src) else make_plating() - if(smoothing_flags & (SMOOTH_CORNERS|SMOOTH_BITMASK)) + if(smoothing_flags & USES_SMOOTHING) QUEUE_SMOOTH_NEIGHBORS(src) /turf/open/floor/carpet/lone diff --git a/code/game/turfs/open/floor/hull.dm b/code/game/turfs/open/floor/hull.dm index 54ea29e051a45..6836c29b960ec 100644 --- a/code/game/turfs/open/floor/hull.dm +++ b/code/game/turfs/open/floor/hull.dm @@ -10,6 +10,16 @@ name = "shuttle ceiling plating" var/old_turf_type +/turf/open/floor/engine/hull/ceiling/Initialize(mapload) + . = ..() + if(!istype(loc, /area/space)) + return + if(istype(loc, /area/space/nearstation)) + return + new /obj/effect/mapping_error (src) //We're in a normal space tile, meaning we aren't lit correct. + ///datum/unit_test/mapping_nearstation_test.dm SHOULD fail this case automatically + //this is just here so the mapper responsible can easily see where the issues are directly on the map. + /turf/open/floor/engine/hull/ceiling/AfterChange(flags, oldType) . = ..() old_turf_type = oldType diff --git a/code/game/turfs/open/floor/iron_floor.dm b/code/game/turfs/open/floor/iron_floor.dm index d38aedfd4f9d3..c3869ccc962ce 100644 --- a/code/game/turfs/open/floor/iron_floor.dm +++ b/code/game/turfs/open/floor/iron_floor.dm @@ -1,6 +1,7 @@ /turf/open/floor/iron icon_state = "floor" floor_tile = /obj/item/stack/tile/iron/base + rust_resistance = RUST_RESISTANCE_BASIC /turf/open/floor/iron/broken_states() return list("damaged1", "damaged2", "damaged3", "damaged4", "damaged5") @@ -13,12 +14,6 @@ . = ..() . += span_notice("There's a small crack on the edge of it.") - -/turf/open/floor/iron/rust_heretic_act() - if(prob(70)) - new /obj/effect/temp_visual/glowing_rune(src) - ChangeTurf(/turf/open/floor/plating/rust) - /turf/open/floor/iron/update_icon_state() if(broken || burnt) return ..() diff --git a/code/game/turfs/open/floor/mineral_floor.dm b/code/game/turfs/open/floor/mineral_floor.dm index 620bfe85e04af..e8be1331378ab 100644 --- a/code/game/turfs/open/floor/mineral_floor.dm +++ b/code/game/turfs/open/floor/mineral_floor.dm @@ -13,10 +13,12 @@ name = "mineral floor" icon_state = null material_flags = MATERIAL_EFFECTS + rust_resistance = RUST_RESISTANCE_BASIC var/list/icons tiled_dirt = FALSE + /turf/open/floor/mineral/Initialize(mapload) . = ..() icons = typelist("icons", icons) @@ -37,6 +39,7 @@ floor_tile = /obj/item/stack/tile/mineral/plasma icons = list("plasma","plasma_dam") custom_materials = list(/datum/material/plasma = SMALL_MATERIAL_AMOUNT*5) + rust_resistance = RUST_RESISTANCE_BASIC //Plasma floor that can't be removed, for disco inferno @@ -52,6 +55,7 @@ floor_tile = /obj/item/stack/tile/mineral/gold icons = list("gold","gold_dam") custom_materials = list(/datum/material/gold = SMALL_MATERIAL_AMOUNT*5) + rust_resistance = RUST_RESISTANCE_BASIC //SILVER @@ -69,12 +73,12 @@ icon_state = "titanium" floor_tile = /obj/item/stack/tile/mineral/titanium custom_materials = list(/datum/material/titanium = SMALL_MATERIAL_AMOUNT*5) + rust_resistance = RUST_RESISTANCE_TITANIUM /turf/open/floor/mineral/titanium/broken_states() return list("damaged1", "damaged2", "damaged3", "damaged4", "damaged5") -/turf/open/floor/mineral/titanium/rust_heretic_act() - return // titanium does not rust + /turf/open/floor/mineral/titanium/airless initial_gas_mix = AIRLESS_ATMOS @@ -153,13 +157,11 @@ icon_state = "plastitanium" floor_tile = /obj/item/stack/tile/mineral/plastitanium custom_materials = list(/datum/material/alloy/plastitanium = SMALL_MATERIAL_AMOUNT*5) + rust_resistance = RUST_RESISTANCE_TITANIUM /turf/open/floor/mineral/plastitanium/broken_states() return list("damaged1", "damaged2", "damaged3", "damaged4", "damaged5") -/turf/open/floor/mineral/plastitanium/rust_heretic_act() - return // plastitanium does not rust - /turf/open/floor/mineral/plastitanium/airless initial_gas_mix = AIRLESS_ATMOS @@ -182,6 +184,7 @@ floor_tile = /obj/item/stack/tile/mineral/bananium icons = list("bananium","bananium_dam") custom_materials = list(/datum/material/bananium = SMALL_MATERIAL_AMOUNT*5) + rust_resistance = RUST_RESISTANCE_BASIC material_flags = NONE //The slippery comp makes it unpractical for good clown decor. The custom mat one should still slip. var/sound_cooldown = 0 @@ -228,6 +231,7 @@ floor_tile = /obj/item/stack/tile/mineral/diamond icons = list("diamond","diamond_dam") custom_materials = list(/datum/material/diamond = SMALL_MATERIAL_AMOUNT*5) + rust_resistance = RUST_RESISTANCE_REINFORCED //URANIUM @@ -238,6 +242,7 @@ floor_tile = /obj/item/stack/tile/mineral/uranium icons = list("uranium","uranium_dam") custom_materials = list(/datum/material/uranium = SMALL_MATERIAL_AMOUNT*5) + rust_resistance = RUST_RESISTANCE_REINFORCED var/last_event = 0 var/active = null @@ -288,6 +293,7 @@ icons = list("alienpod1", "alienpod2", "alienpod3", "alienpod4", "alienpod5", "alienpod6", "alienpod7", "alienpod8", "alienpod9") baseturfs = /turf/open/floor/plating/abductor2 custom_materials = list(/datum/material/alloy/alien = SMALL_MATERIAL_AMOUNT*5) + rust_resistance = RUST_RESISTANCE_ORGANIC damaged_dmi = null /turf/open/floor/mineral/abductor/Initialize(mapload) diff --git a/code/game/turfs/open/floor/misc_floor.dm b/code/game/turfs/open/floor/misc_floor.dm index f8464a8ce4ef6..7c4428c4823ec 100644 --- a/code/game/turfs/open/floor/misc_floor.dm +++ b/code/game/turfs/open/floor/misc_floor.dm @@ -327,3 +327,12 @@ /turf/open/floor/iron/tgmcemblem/center icon_state = "tgmc_center" + +/turf/open/floor/asphalt + name = "asphalt" + desc = "Melted down oil can, in some cases, be used to pave road surfaces." + icon_state = "asphalt" + +/turf/open/floor/asphalt/lavaland + initial_gas_mix = LAVALAND_DEFAULT_ATMOS + baseturfs = /turf/open/misc/asteroid/basalt diff --git a/code/game/turfs/open/floor/plating.dm b/code/game/turfs/open/floor/plating.dm index 5bcd8a6a4a869..6e4834773c325 100644 --- a/code/game/turfs/open/floor/plating.dm +++ b/code/game/turfs/open/floor/plating.dm @@ -14,6 +14,7 @@ barefootstep = FOOTSTEP_HARD_BAREFOOT clawfootstep = FOOTSTEP_HARD_CLAW heavyfootstep = FOOTSTEP_GENERIC_HEAVY + rust_resistance = RUST_RESISTANCE_BASIC //Can this plating have reinforced floors placed ontop of it var/attachment_holes = TRUE @@ -121,19 +122,17 @@ #undef PLATE_REINFORCE_COST -/turf/open/floor/plating/rust_heretic_act() - if(prob(70)) - new /obj/effect/temp_visual/glowing_rune(src) - return ..() + /turf/open/floor/plating/make_plating(force = FALSE) return /turf/open/floor/plating/foam name = "metal foam plating" - desc = "Thin, fragile flooring created with metal foam." + desc = "Thin, fragile flooring created with metal foam. Designed to be easily replacable by tiling when applied to in a combat stance." icon_state = "foam_plating" upgradable = FALSE + attachment_holes = FALSE /turf/open/floor/plating/foam/burn_tile() return //jetfuel can't melt steel foam @@ -177,8 +176,8 @@ ScrapeAway(flags = CHANGETURF_INHERIT_AIR) return TRUE -/turf/open/floor/plating/foam/item_interaction(mob/living/user, obj/item/tool, list/modifiers) - return user.combat_mode ? ITEM_INTERACT_SKIP_TO_ATTACK : ITEM_INTERACT_BLOCKING // Fuck you +/turf/open/floor/plating/foam/welder_act(mob/living/user, obj/item/I) + return NONE // Fuck you //reinforced plating deconstruction states #define PLATE_INTACT 0 @@ -197,6 +196,7 @@ allow_replacement = FALSE rcd_proof = TRUE upgradable = FALSE + rust_resistance = RUST_RESISTANCE_REINFORCED //Used to track which stage of deconstruction the plate is currently in, Intact > Bolts Loosened > Cut var/deconstruction_state = PLATE_INTACT diff --git a/code/game/turfs/open/floor/plating/misc_plating.dm b/code/game/turfs/open/floor/plating/misc_plating.dm index 9b79313111f13..101376e73aead 100644 --- a/code/game/turfs/open/floor/plating/misc_plating.dm +++ b/code/game/turfs/open/floor/plating/misc_plating.dm @@ -19,6 +19,7 @@ icon_state = "alienpod1" base_icon_state = "alienpod1" tiled_dirt = FALSE + rust_resistance = RUST_RESISTANCE_ORGANIC // Not actually broken, just should never break...yeah. broken = TRUE damaged_dmi = null @@ -32,6 +33,7 @@ icon_state = "alienplating" base_icon_state = "alienplating" tiled_dirt = FALSE + rust_resistance = RUST_RESISTANCE_ORGANIC damaged_dmi = null /turf/open/floor/plating/abductor2/break_tile() @@ -57,6 +59,7 @@ barefootstep = FOOTSTEP_SAND clawfootstep = FOOTSTEP_SAND heavyfootstep = FOOTSTEP_GENERIC_HEAVY + rust_resistance = RUST_RESISTANCE_BASIC /turf/open/floor/plating/snowed/cavern initial_gas_mix = BURNING_COLD @@ -64,6 +67,10 @@ /turf/open/floor/plating/snowed/icemoon initial_gas_mix = ICEMOON_DEFAULT_ATMOS +/turf/open/floor/plating/snowed/standard_air + initial_gas_mix = OPENTURF_DEFAULT_ATMOS + planetary_atmos = FALSE + /turf/open/floor/plating/snowed/smoothed icon = 'icons/turf/floors/snow_turf.dmi' icon_state = "snow_turf-0" diff --git a/code/game/turfs/open/floor/reinforced_floor.dm b/code/game/turfs/open/floor/reinforced_floor.dm index 6a23f8e6be50e..0a44c78ceca5e 100644 --- a/code/game/turfs/open/floor/reinforced_floor.dm +++ b/code/game/turfs/open/floor/reinforced_floor.dm @@ -13,6 +13,7 @@ heavyfootstep = FOOTSTEP_GENERIC_HEAVY tiled_dirt = FALSE rcd_proof = TRUE + rust_resistance = RUST_RESISTANCE_REINFORCED /turf/open/floor/engine/examine(mob/user) diff --git a/code/game/turfs/open/grass.dm b/code/game/turfs/open/grass.dm index d4bfc051e3b2d..4dd5946a7ed14 100644 --- a/code/game/turfs/open/grass.dm +++ b/code/game/turfs/open/grass.dm @@ -13,26 +13,52 @@ smoothing_flags = SMOOTH_BITMASK smoothing_groups = SMOOTH_GROUP_TURF_OPEN + SMOOTH_GROUP_FLOOR_GRASS canSmoothWith = SMOOTH_GROUP_FLOOR_GRASS + SMOOTH_GROUP_CLOSED_TURFS + smooth_broken = TRUE + smooth_burnt = TRUE layer = HIGH_TURF_LAYER - damaged_dmi = 'icons/turf/damaged.dmi' + rust_resistance = RUST_RESISTANCE_ORGANIC + damaged_dmi = 'icons/turf/floors/grass_damaged.dmi' + /// The icon used for smoothing. var/smooth_icon = 'icons/turf/floors/grass.dmi' + /// The base icon_state for the broken state. + var/base_broken_icon_state = "grass_damaged" + /// The base icon_state for the burnt state. + var/base_burnt_icon_state = "grass_damaged" /turf/open/misc/grass/broken_states() - return list("grass_damaged") + if (!smoothing_junction || !smooth_broken) + return list("[base_broken_icon_state]-255") + + return list("[base_broken_icon_state]-[smoothing_junction]") /turf/open/misc/grass/burnt_states() - return list("grass_damaged") + if (!smoothing_junction || !smooth_burnt) + return list("[base_burnt_icon_state]-255") + + return list("[base_burnt_icon_state]-[smoothing_junction]") /turf/open/misc/grass/Initialize(mapload) . = ..() if(smoothing_flags) var/matrix/translation = new - translation.Translate(-9, -9) + translation.Translate(LARGE_TURF_SMOOTHING_X_OFFSET, LARGE_TURF_SMOOTHING_Y_OFFSET) transform = translation icon = smooth_icon if(is_station_level(z)) GLOB.station_turfs += src + +/turf/open/misc/grass/get_smooth_underlay_icon(mutable_appearance/underlay_appearance, turf/asking_turf, adjacency_dir) + . = ..() + if (!.) + return + + if(!smoothing_flags) + return + + underlay_appearance.transform = transform + + /turf/open/misc/grass/lavaland initial_gas_mix = LAVALAND_DEFAULT_ATMOS diff --git a/code/game/turfs/open/hay.dm b/code/game/turfs/open/hay.dm new file mode 100644 index 0000000000000..b0bd581c2bb8f --- /dev/null +++ b/code/game/turfs/open/hay.dm @@ -0,0 +1,14 @@ +/turf/open/misc/hay + name = "hay" + desc = "For horses and cows like you." + icon = 'icons/turf/floors.dmi' + icon_state = "hay" + base_icon_state = "hay" + +/turf/open/misc/hay/lavaland + baseturfs = list(/turf/open/misc/basalt) + initial_gas_mix = LAVALAND_DEFAULT_ATMOS + +/turf/open/misc/hay/icemoon + baseturfs = list(/turf/open/misc/snow) + initial_gas_mix = ICEMOON_DEFAULT_ATMOS diff --git a/code/game/turfs/open/ice.dm b/code/game/turfs/open/ice.dm index 3f951684e86d3..481dcb6b84732 100644 --- a/code/game/turfs/open/ice.dm +++ b/code/game/turfs/open/ice.dm @@ -14,6 +14,7 @@ barefootstep = FOOTSTEP_HARD_BAREFOOT clawfootstep = FOOTSTEP_HARD_CLAW heavyfootstep = FOOTSTEP_GENERIC_HEAVY + rust_resistance = RUST_RESISTANCE_ORGANIC /turf/open/misc/ice/Initialize(mapload) . = ..() diff --git a/code/game/turfs/open/lava.dm b/code/game/turfs/open/lava.dm index 02c714c25ff96..23e2b6b38db84 100644 --- a/code/game/turfs/open/lava.dm +++ b/code/game/turfs/open/lava.dm @@ -42,6 +42,7 @@ var/fish_source_type = /datum/fish_source/lavaland /// The color we use for our immersion overlay var/immerse_overlay_color = "#a15e1b" + rust_resistance = RUST_RESISTANCE_ABSOLUTE /turf/open/lava/Initialize(mapload) . = ..() @@ -169,9 +170,6 @@ return TRUE return FALSE -/turf/open/lava/rust_heretic_act() - return FALSE - /turf/open/lava/singularity_act() return @@ -207,8 +205,8 @@ to_chat(user, span_warning("You need one rod to build a heatproof lattice.")) return // Light a cigarette in the lava - if(istype(C, /obj/item/clothing/mask/cigarette)) - var/obj/item/clothing/mask/cigarette/ciggie = C + if(istype(C, /obj/item/cigarette)) + var/obj/item/cigarette/ciggie = C if(ciggie.lit) to_chat(user, span_warning("The [ciggie.name] is already lit!")) return TRUE diff --git a/code/game/turfs/open/openspace.dm b/code/game/turfs/open/openspace.dm index 2006a3e6829bb..677bc776ea5a7 100644 --- a/code/game/turfs/open/openspace.dm +++ b/code/game/turfs/open/openspace.dm @@ -10,6 +10,7 @@ mouse_opacity = MOUSE_OPACITY_TRANSPARENT pathing_pass_method = TURF_PATHING_PASS_PROC plane = TRANSPARENT_FLOOR_PLANE + rust_resistance = RUST_RESISTANCE_ABSOLUTE var/can_cover_up = TRUE var/can_build_on = TRUE @@ -148,9 +149,6 @@ return TRUE return FALSE -/turf/open/openspace/rust_heretic_act() - return FALSE - /turf/open/openspace/CanAStarPass(to_dir, datum/can_pass_info/pass_info) var/atom/movable/our_movable = pass_info.caller_ref.resolve() if(our_movable && !our_movable.can_z_move(DOWN, src, null, ZMOVE_FALL_FLAGS)) //If we can't fall here (flying/lattice), it's fine to path through diff --git a/code/game/turfs/open/planet.dm b/code/game/turfs/open/planet.dm index db391025e84b1..893942fc49c52 100644 --- a/code/game/turfs/open/planet.dm +++ b/code/game/turfs/open/planet.dm @@ -13,6 +13,7 @@ clawfootstep = FOOTSTEP_SAND heavyfootstep = FOOTSTEP_GENERIC_HEAVY tiled_dirt = FALSE + rust_resistance = RUST_RESISTANCE_ORGANIC /turf/open/misc/dirt/station name = "dirt flooring" //FOR THE LOVE OF GOD USE THIS INSTEAD OF DIRT FOR STATION MAPS @@ -66,20 +67,14 @@ /turf/open/misc/grass/jungle name = "jungle grass" + desc = "Greener on the other side." initial_gas_mix = OPENTURF_DEFAULT_ATMOS planetary_atmos = TRUE baseturfs = /turf/open/misc/dirt - desc = "Greener on the other side." icon_state = "junglegrass" base_icon_state = "junglegrass" smooth_icon = 'icons/turf/floors/junglegrass.dmi' -/turf/open/misc/grass/broken_states() - return list("jungle_damaged") - -/turf/open/misc/grass/burnt_states() - return list("jungle_damaged") - /turf/open/misc/grass/jungle/lavaland initial_gas_mix = LAVALAND_DEFAULT_ATMOS diff --git a/code/game/turfs/open/sand.dm b/code/game/turfs/open/sand.dm index cfcd4dccfb1fc..c863e28231d35 100644 --- a/code/game/turfs/open/sand.dm +++ b/code/game/turfs/open/sand.dm @@ -8,6 +8,7 @@ barefootstep = FOOTSTEP_SAND clawfootstep = FOOTSTEP_SAND heavyfootstep = FOOTSTEP_GENERIC_HEAVY + rust_resistance = RUST_RESISTANCE_ORGANIC /turf/open/misc/beach/ex_act(severity, target) return FALSE @@ -62,6 +63,7 @@ clawfootstep = FOOTSTEP_SAND heavyfootstep = FOOTSTEP_GENERIC_HEAVY tiled_dirt = FALSE + rust_resistance = RUST_RESISTANCE_ORGANIC /turf/open/misc/sandy_dirt/break_tile() . = ..() diff --git a/code/game/turfs/open/space/space.dm b/code/game/turfs/open/space/space.dm index 1bfe5c2e5e16a..28f7cfde8aceb 100644 --- a/code/game/turfs/open/space/space.dm +++ b/code/game/turfs/open/space/space.dm @@ -48,6 +48,7 @@ GLOBAL_LIST_EMPTY(starlight) name = "\proper space" overfloor_placed = FALSE underfloor_accessibility = UNDERFLOOR_INTERACTABLE + rust_resistance = RUST_RESISTANCE_ABSOLUTE temperature = TCMB thermal_conductivity = OPEN_HEAT_TRANSFER_COEFFICIENT @@ -242,8 +243,6 @@ GLOBAL_LIST_EMPTY(starlight) return FALSE -/turf/open/space/rust_heretic_act() - return FALSE /turf/open/space/attempt_lattice_replacement() var/dest_x = destination_x diff --git a/code/game/turfs/open/water.dm b/code/game/turfs/open/water.dm index 1be2bc0435f17..5dcfa85961d20 100644 --- a/code/game/turfs/open/water.dm +++ b/code/game/turfs/open/water.dm @@ -20,10 +20,15 @@ */ var/immerse_overlay_color = "#5AAA88" + /// Fishing element for this specific water tile + var/datum/fish_source/fishing_datum = /datum/fish_source/portal + /turf/open/water/Initialize(mapload) . = ..() AddElement(/datum/element/immerse, icon, icon_state, "immerse", immerse_overlay_color) AddElement(/datum/element/watery_tile) + if(!isnull(fishing_datum)) + AddElement(/datum/element/lazy_fishing_spot, fishing_datum) /turf/open/water/jungle @@ -36,7 +41,4 @@ base_icon_state = "water" baseturfs = /turf/open/water/beach immerse_overlay_color = "#7799AA" - -/turf/open/water/beach/Initialize(mapload) - . = ..() - AddElement(/datum/element/lazy_fishing_spot, /datum/fish_source/ocean/beach) + fishing_datum = /datum/fish_source/ocean/beach diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm index 94084875984c4..10165f869174f 100644 --- a/code/game/turfs/turf.dm +++ b/code/game/turfs/turf.dm @@ -88,6 +88,9 @@ GLOBAL_LIST_EMPTY(station_turfs) ///whether or not this turf forces movables on it to have no gravity (unless they themselves have forced gravity) var/force_no_gravity = FALSE + ///This turf's resistance to getting rusted + var/rust_resistance = RUST_RESISTANCE_ORGANIC + /// How pathing algorithm will check if this turf is passable by itself (not including content checks). By default it's just density check. /// WARNING: Currently to use a density shortcircuiting this does not support dense turfs with special allow through function var/pathing_pass_method = TURF_PATHING_PASS_DENSITY @@ -105,6 +108,7 @@ GLOBAL_LIST_EMPTY(station_turfs) /// Never directly access this, use get_explosive_block() instead var/inherent_explosive_resistance = -1 + /turf/vv_edit_var(var_name, new_value) var/static/list/banned_edits = list(NAMEOF_STATIC(src, x), NAMEOF_STATIC(src, y), NAMEOF_STATIC(src, z)) if(var_name in banned_edits) @@ -149,7 +153,7 @@ GLOBAL_LIST_EMPTY(station_turfs) SETUP_SMOOTHING() - if (smoothing_flags & (SMOOTH_CORNERS|SMOOTH_BITMASK)) + if (smoothing_flags & USES_SMOOTHING) QUEUE_SMOOTH(src) for(var/atom/movable/content as anything in src) @@ -185,6 +189,7 @@ GLOBAL_LIST_EMPTY(station_turfs) . = QDEL_HINT_IWILLGC if(!changing_turf) stack_trace("Incorrect turf deletion") + changing_turf = FALSE if(GET_LOWEST_STACK_OFFSET(z)) var/turf/T = GET_TURF_ABOVE(src) @@ -193,6 +198,7 @@ GLOBAL_LIST_EMPTY(station_turfs) T = GET_TURF_BELOW(src) if(T) T.multiz_turf_del(src, UP) + if(force) ..() //this will completely wipe turf state @@ -200,6 +206,7 @@ GLOBAL_LIST_EMPTY(station_turfs) for(var/A in B.contents) qdel(A) return + LAZYCLEARLIST(blueprint_data) flags_1 &= ~INITIALIZED_1 requires_activation = FALSE @@ -561,7 +568,6 @@ GLOBAL_LIST_EMPTY(station_turfs) if(EXPLODE_LIGHT) SSexplosions.low_mov_atom += movable_thing - /turf/narsie_act(force, ignore_mobs, probability = 20) . = (prob(probability) || force) for(var/I in src) @@ -610,13 +616,19 @@ GLOBAL_LIST_EMPTY(station_turfs) /turf/proc/acid_melt() return -/turf/rust_heretic_act() - if(turf_flags & NO_RUST) +/// Check if the heretic is strong enough to rust this turf, and if so, rusts the turf with an added visual effect. +/turf/rust_heretic_act(rust_strength = 1) + if((turf_flags & NO_RUST) || (rust_strength < rust_resistance)) return + rust_turf() + +/// Override this to change behaviour when being rusted by a heretic +/turf/proc/rust_turf() if(HAS_TRAIT(src, TRAIT_RUSTY)) return - AddElement(/datum/element/rust) + AddElement(/datum/element/rust/heretic) + new /obj/effect/glowing_rune(src) /turf/handle_fall(mob/faller) if(has_gravity(src)) diff --git a/code/game/world.dm b/code/game/world.dm index eb2b06cc11cbc..9e57dbba343c5 100644 --- a/code/game/world.dm +++ b/code/game/world.dm @@ -17,7 +17,6 @@ GLOBAL_VAR(restart_counter) * - world.init_byond_tracy() * - (Start native profiling) * - world.init_debugger() - * - SysMgr (all data systems) * - Master => * - config *unloaded * - (all subsystems) PreInit() @@ -85,9 +84,6 @@ GLOBAL_VAR(restart_counter) // Create the logger logger = new - // Initialize all the data systems - SysMgr = new - // THAT'S IT, WE'RE DONE, THE. FUCKING. END. Master = new diff --git a/code/modules/actionspeed/_actionspeed_modifier.dm b/code/modules/actionspeed/_actionspeed_modifier.dm index 761bfc3ff74a4..36b9b9c860dec 100644 --- a/code/modules/actionspeed/_actionspeed_modifier.dm +++ b/code/modules/actionspeed/_actionspeed_modifier.dm @@ -40,7 +40,8 @@ can next move /datum/actionspeed_modifier/New(init_id) . = ..() - id = init_id + if(init_id) + id = init_id if(!id) id = "[type]" //We turn the path into a string. diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm index 10b9a58b87007..5f40de037f4ae 100644 --- a/code/modules/admin/admin.dm +++ b/code/modules/admin/admin.dm @@ -286,14 +286,17 @@ ADMIN_VERB(create_or_modify_area, R_DEBUG, "Create Or Modify Area", "Create of m return TRUE -/client/proc/adminGreet(logout) - if(SSticker.HasRoundStarted()) - var/string - if(logout && CONFIG_GET(flag/announce_admin_logout)) - string = pick( - "Admin logout: [key_name(src)]") - else if(!logout && CONFIG_GET(flag/announce_admin_login) && (prefs.toggles & ANNOUNCE_LOGIN)) - string = pick( - "Admin login: [key_name(src)]") - if(string) - message_admins("[string]") +/// Sends a message to adminchat when anyone with a holder logs in or logs out. +/// Is dependent on admin preferences and configuration settings, which means that this proc can fire without sending a message. +/client/proc/adminGreet(logout = FALSE) + if(!SSticker.HasRoundStarted()) + return + + if(logout && CONFIG_GET(flag/announce_admin_logout)) + message_admins("Admin logout: [key_name(src)]") + return + + if(!logout && CONFIG_GET(flag/announce_admin_login) && (prefs.toggles & ANNOUNCE_LOGIN)) + message_admins("Admin login: [key_name(src)]") + return + diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index 731de224f8d46..0f7d7a3f39b30 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -593,6 +593,7 @@ ADMIN_VERB(debug_spell_requirements, R_DEBUG, "Debug Spell Requirements", "View ADMIN_VERB(load_lazy_template, R_ADMIN, "Load/Jump Lazy Template", "Loads a lazy template and/or jumps to it.", ADMIN_CATEGORY_EVENTS) var/list/choices = LAZY_TEMPLATE_KEY_LIST_ALL() var/choice = tgui_input_list(user, "Key?", "Lazy Loader", choices) + var/teleport_to_template = tgui_input_list(user, "Jump to template after loading?", "Where to?", list("Yes", "No")) if(!choice) return @@ -611,12 +612,13 @@ ADMIN_VERB(load_lazy_template, R_ADMIN, "Load/Jump Lazy Template", "Loads a lazy to_chat(user, span_boldwarning("Failed to load template!")) return - if(!isobserver(user.mob)) - SSadmin_verbs.dynamic_invoke_verb(user, /datum/admin_verb/admin_ghost) - user.mob.forceMove(reservation.bottom_left_turfs[1]) + if(teleport_to_template == "Yes") + if(!isobserver(user.mob)) + SSadmin_verbs.dynamic_invoke_verb(user, /datum/admin_verb/admin_ghost) + user.mob.forceMove(reservation.bottom_left_turfs[1]) + to_chat(user, span_boldnicegreen("Template loaded, you have been moved to the bottom left of the reservation.")) message_admins("[key_name_admin(user)] has loaded lazy template '[choice]'") - to_chat(user, span_boldnicegreen("Template loaded, you have been moved to the bottom left of the reservation.")) ADMIN_VERB(library_control, R_BAN, "Library Management", "List and manage the Library.", ADMIN_CATEGORY_MAIN) if(!user.holder.library_manager) diff --git a/code/modules/admin/create_mob.dm b/code/modules/admin/create_mob.dm index fcf9693731e05..e01a305c24c6c 100644 --- a/code/modules/admin/create_mob.dm +++ b/code/modules/admin/create_mob.dm @@ -11,12 +11,12 @@ user << browse(create_panel_helper(create_mob_html), "window=create_mob;size=425x475") /** - * Randomizes everything about a human, including DNA and name + * Fully randomizes everything about a human, including DNA and name. */ /proc/randomize_human(mob/living/carbon/human/human, randomize_mutations = FALSE) human.gender = human.dna.species.sexes ? pick(MALE, FEMALE, PLURAL, NEUTER) : PLURAL human.physique = human.gender - human.real_name = human.dna?.species.random_name(human.gender) || random_unique_name(human.gender) + human.real_name = human.generate_random_mob_name() human.name = human.get_visible_name() human.set_hairstyle(random_hairstyle(human.gender), update = FALSE) human.set_facial_hairstyle(random_facial_hairstyle(human.gender), update = FALSE) @@ -24,10 +24,49 @@ human.set_facial_haircolor(human.hair_color, update = FALSE) human.eye_color_left = random_eye_color() human.eye_color_right = human.eye_color_left - human.skin_tone = random_skin_tone() + human.skin_tone = pick(GLOB.skin_tones) human.dna.species.randomize_active_underwear_only(human) // Needs to be called towards the end to update all the UIs just set above human.dna.initialize_dna(newblood_type = random_blood_type(), create_mutation_blocks = randomize_mutations, randomize_features = TRUE) // Snowflake for Ethereals human.updatehealth() human.updateappearance(mutcolor_update = TRUE) + +/** + * Randomizes a human, but produces someone who looks exceedingly average (by most standards). + * + * (IE, no wacky hair styles / colors) + */ +/proc/randomize_human_normie(mob/living/carbon/human/human, randomize_mutations = FALSE) + var/static/list/natural_hair_colors = list( + "#111111", "#362925", "#3B3831", "#41250C", "#412922", + "#544C49", "#583322", "#593029", "#703b30", "#714721", + "#744729", "#74482a", "#7b746e", "#855832", "#863019", + "#8c4734", "#9F550E", "#A29A96", "#A4381C", "#B17B41", + "#C0BAB7", "#EFE5E4", "#F7F3F1", "#FFF2D6", "#a15537", + "#a17e61", "#b38b67", "#ba673c", "#c89f73", "#d9b380", + "#dbc9b8", "#e1621d", "#e17d17", "#e1af93", "#f1cc8f", + "#fbe7a1", + ) + // Sorry enbys but statistically you are not average enough + human.gender = human.dna.species.sexes ? pick(MALE, FEMALE) : PLURAL + human.physique = human.gender + human.real_name = human.generate_random_mob_name() + human.name = human.get_visible_name() + human.eye_color_left = random_eye_color() + human.eye_color_right = human.eye_color_left + human.skin_tone = pick(GLOB.skin_tones) + // No underwear generation handled here + var/picked_color = pick(natural_hair_colors) + human.set_haircolor(picked_color, update = FALSE) + human.set_facial_haircolor(picked_color, update = FALSE) + var/datum/sprite_accessory/hairstyle = SSaccessories.hairstyles_list[random_hairstyle(human.gender)] + if(hairstyle?.natural_spawn) + human.set_hairstyle(hairstyle.name, update = FALSE) + var/datum/sprite_accessory/facial_hair = SSaccessories.facial_hairstyles_list[random_facial_hairstyle(human.gender)] + if(facial_hair?.natural_spawn) + human.set_facial_hairstyle(facial_hair.name, update = FALSE) + // Normal DNA init stuff, these can generally be wacky but we care less, they're aliens after all + human.dna.initialize_dna(newblood_type = random_blood_type(), create_mutation_blocks = randomize_mutations, randomize_features = TRUE) + human.updatehealth() + human.updateappearance(mutcolor_update = TRUE) diff --git a/code/modules/admin/fun_balloon.dm b/code/modules/admin/fun_balloon.dm index b65f72f8f4d79..7a56d63da2309 100644 --- a/code/modules/admin/fun_balloon.dm +++ b/code/modules/admin/fun_balloon.dm @@ -38,6 +38,8 @@ desc = "When this pops, things are gonna get more aware around here." var/group_name = "a bunch of giant spiders" var/effect_range = 3 + var/antag_type = null + var/make_antag = FALSE /obj/effect/fun_balloon/sentience/ui_interact(mob/user, datum/tgui/ui) ui = SStgui.try_update_ui(user, src, ui) @@ -49,6 +51,7 @@ var/list/data = list() data["group_name"] = group_name data["range"] = effect_range + data["antag"] = make_antag return data /obj/effect/fun_balloon/sentience/ui_state(mob/user) @@ -73,6 +76,11 @@ if("effect_range") effect_range = params["updated_range"] + if("select_antag") + var/list/paths = subtypesof(/datum/antagonist) + antag_type = input(usr,"Select antag", "Antagonist selection") as null|anything in sort_list(paths) + make_antag = TRUE + if("pop") if(!popped) popped = TRUE @@ -105,6 +113,9 @@ message_admins("[key_name_admin(C)] has taken control of ([key_name_admin(body)])") body.ghostize(FALSE) body.key = C.key + if (make_antag) + body.mind.add_antag_datum(antag_type) + continue new /obj/effect/temp_visual/gravpush(get_turf(body)) // ----------- Emergency Shuttle Balloon @@ -125,7 +136,7 @@ /obj/effect/fun_balloon/scatter/effect() for(var/mob/living/M in range(effect_range, get_turf(src))) - var/turf/T = find_safe_turf() + var/turf/T = find_safe_turf(zlevel = src.z) new /obj/effect/temp_visual/gravpush(get_turf(M)) M.forceMove(T) to_chat(M, span_notice("Pop!"), confidential = TRUE) diff --git a/code/modules/admin/ipintel.dm b/code/modules/admin/ipintel.dm deleted file mode 100644 index 7ca4ccbc320a7..0000000000000 --- a/code/modules/admin/ipintel.dm +++ /dev/null @@ -1,136 +0,0 @@ -/datum/ipintel - var/ip - var/intel = 0 - var/cache = FALSE - var/cacheminutesago = 0 - var/cachedate = "" - var/cacherealtime = 0 - -/datum/ipintel/New() - cachedate = SQLtime() - cacherealtime = world.realtime - -/datum/ipintel/proc/is_valid() - . = FALSE - if (intel < 0) - return - if (intel <= CONFIG_GET(number/ipintel_rating_bad)) - if (world.realtime < cacherealtime + (CONFIG_GET(number/ipintel_save_good) * 60 * 60 * 10)) - return TRUE - else - if (world.realtime < cacherealtime + (CONFIG_GET(number/ipintel_save_bad) * 60 * 60 * 10)) - return TRUE - -/proc/get_ip_intel(ip, bypasscache = FALSE, updatecache = TRUE) - var/datum/ipintel/res = new() - res.ip = ip - . = res - if (!ip || !CONFIG_GET(string/ipintel_email) || !SSipintel.enabled) - return - if (!bypasscache) - var/datum/ipintel/cachedintel = SSipintel.cache[ip] - if (cachedintel?.is_valid()) - cachedintel.cache = TRUE - return cachedintel - - if(SSdbcore.Connect()) - var/rating_bad = CONFIG_GET(number/ipintel_rating_bad) - var/datum/db_query/query_get_ip_intel = SSdbcore.NewQuery({" - SELECT date, intel, TIMESTAMPDIFF(MINUTE,date,NOW()) - FROM [format_table_name("ipintel")] - WHERE - ip = INET_ATON(':ip') - AND (( - intel < :rating_bad - AND - date + INTERVAL :save_good HOUR > NOW() - ) OR ( - intel >= :rating_bad - AND - date + INTERVAL :save_bad HOUR > NOW() - )) - "}, list("ip" = ip, "rating_bad" = rating_bad, "save_good" = CONFIG_GET(number/ipintel_save_good), "save_bad" = CONFIG_GET(number/ipintel_save_bad))) - if(!query_get_ip_intel.Execute()) - qdel(query_get_ip_intel) - return - if (query_get_ip_intel.NextRow()) - res.cache = TRUE - res.cachedate = query_get_ip_intel.item[1] - res.intel = text2num(query_get_ip_intel.item[2]) - res.cacheminutesago = text2num(query_get_ip_intel.item[3]) - res.cacherealtime = world.realtime - (text2num(query_get_ip_intel.item[3])*10*60) - SSipintel.cache[ip] = res - qdel(query_get_ip_intel) - return - qdel(query_get_ip_intel) - res.intel = ip_intel_query(ip) - if (updatecache && res.intel >= 0) - SSipintel.cache[ip] = res - if(SSdbcore.Connect()) - var/datum/db_query/query_add_ip_intel = SSdbcore.NewQuery( - "INSERT INTO [format_table_name("ipintel")] (ip, intel) VALUES (INET_ATON(:ip), :intel) ON DUPLICATE KEY UPDATE intel = VALUES(intel), date = NOW()", - list("ip" = ip, "intel" = res.intel) - ) - query_add_ip_intel.Execute() - qdel(query_add_ip_intel) - - -/proc/ip_intel_query(ip, retryed=0) - . = -1 //default - if (!ip) - return - if (SSipintel.throttle > world.timeofday) - return - if (!SSipintel.enabled) - return - - var/list/http[] = world.Export("http://[CONFIG_GET(string/ipintel_domain)]/check.php?ip=[ip]&contact=[CONFIG_GET(string/ipintel_email)]&format=json&flags=f") - - if (http) - var/status = text2num(http["STATUS"]) - - if (status == 200) - var/response = json_decode(file2text(http["CONTENT"])) - if (response) - if (response["status"] == "success") - var/intelnum = text2num(response["result"]) - if (isnum(intelnum)) - return text2num(response["result"]) - else - ipintel_handle_error("Bad intel from server: [response["result"]].", ip, retryed) - if (!retryed) - sleep(2.5 SECONDS) - return .(ip, 1) - else - ipintel_handle_error("Bad response from server: [response["status"]].", ip, retryed) - if (!retryed) - sleep(2.5 SECONDS) - return .(ip, 1) - - else if (status == 429) - ipintel_handle_error("Error #429: We have exceeded the rate limit.", ip, 1) - return - else - ipintel_handle_error("Unknown status code: [status].", ip, retryed) - if (!retryed) - sleep(2.5 SECONDS) - return .(ip, 1) - else - ipintel_handle_error("Unable to connect to API.", ip, retryed) - if (!retryed) - sleep(2.5 SECONDS) - return .(ip, 1) - - -/proc/ipintel_handle_error(error, ip, retryed) - if (retryed) - SSipintel.errors++ - error += " Could not check [ip]. Disabling IPINTEL for [SSipintel.errors] minute[( SSipintel.errors == 1 ? "" : "s" )]" - SSipintel.throttle = world.timeofday + (10 * 120 * SSipintel.errors) - else - error += " Attempting retry on [ip]." - log_ipintel(error) - -/proc/log_ipintel(text) - log_game("IPINTEL: [text]") - debug_admins("IPINTEL: [text]") diff --git a/code/modules/admin/permissionedit.dm b/code/modules/admin/permissionedit.dm index e92ab1729e2ab..e508a10473927 100644 --- a/code/modules/admin/permissionedit.dm +++ b/code/modules/admin/permissionedit.dm @@ -249,8 +249,8 @@ ADMIN_VERB(edit_admin_permissions, R_PERMISSIONS, "Permissions Panel", "Edit adm qdel(query_add_admin) var/datum/db_query/query_add_admin_log = SSdbcore.NewQuery({" INSERT INTO [format_table_name("admin_log")] (datetime, round_id, adminckey, adminip, operation, target, log) - VALUES (:time, :round_id, :adminckey, INET_ATON(:adminip), 'add admin', :target, CONCAT('New admin added: ', :target)) - "}, list("time" = SQLtime(), "round_id" = "[GLOB.round_id]", "adminckey" = usr.ckey, "adminip" = usr.client.address, "target" = .)) + VALUES (NOW(), :round_id, :adminckey, INET_ATON(:adminip), 'add admin', :target, CONCAT('New admin added: ', :target)) + "}, list("round_id" = "[GLOB.round_id]", "adminckey" = usr.ckey, "adminip" = usr.client.address, "target" = .)) if(!query_add_admin_log.warn_execute()) qdel(query_add_admin_log) return FALSE @@ -275,8 +275,8 @@ ADMIN_VERB(edit_admin_permissions, R_PERMISSIONS, "Permissions Panel", "Edit adm qdel(query_add_rank) var/datum/db_query/query_add_rank_log = SSdbcore.NewQuery({" INSERT INTO [format_table_name("admin_log")] (datetime, round_id, adminckey, adminip, operation, target, log) - VALUES (:time, :round_id, :adminckey, INET_ATON(:adminip), 'remove admin', :admin_ckey, CONCAT('Admin removed: ', :admin_ckey)) - "}, list("time" = SQLtime(), "round_id" = "[GLOB.round_id]", "adminckey" = usr.ckey, "adminip" = usr.client.address, "admin_ckey" = admin_ckey)) + VALUES (NOW(), :round_id, :adminckey, INET_ATON(:adminip), 'remove admin', :admin_ckey, CONCAT('Admin removed: ', :admin_ckey)) + "}, list("round_id" = "[GLOB.round_id]", "adminckey" = usr.ckey, "adminip" = usr.client.address, "admin_ckey" = admin_ckey)) if(!query_add_rank_log.warn_execute()) qdel(query_add_rank_log) return @@ -423,8 +423,8 @@ ADMIN_VERB(edit_admin_permissions, R_PERMISSIONS, "Permissions Panel", "Edit adm qdel(query_add_rank) var/datum/db_query/query_add_rank_log = SSdbcore.NewQuery({" INSERT INTO [format_table_name("admin_log")] (datetime, round_id, adminckey, adminip, operation, target, log) - VALUES (:time, :round_id, :adminckey, INET_ATON(:adminip), 'add rank', :new_rank, CONCAT('New rank added: ', :new_rank)) - "}, list("time" = SQLtime(), "round_id" = "[GLOB.round_id]", "adminckey" = usr.ckey, "adminip" = usr.client.address, "new_rank" = custom_rank.name)) + VALUES (NOW(), :round_id, :adminckey, INET_ATON(:adminip), 'add rank', :new_rank, CONCAT('New rank added: ', :new_rank)) + "}, list("round_id" = "[GLOB.round_id]", "adminckey" = usr.ckey, "adminip" = usr.client.address, "new_rank" = custom_rank.name)) if(!query_add_rank_log.warn_execute()) qdel(query_add_rank_log) return @@ -440,8 +440,8 @@ ADMIN_VERB(edit_admin_permissions, R_PERMISSIONS, "Permissions Panel", "Edit adm qdel(query_change_rank) var/datum/db_query/query_change_rank_log = SSdbcore.NewQuery({" INSERT INTO [format_table_name("admin_log")] (datetime, round_id, adminckey, adminip, operation, target, log) - VALUES (:time, :round_id, :adminckey, INET_ATON(:adminip), 'change admin rank', :target, CONCAT('Rank of ', :target, ' changed from ', :old_rank, ' to ', :new_rank)) - "}, list("time" = SQLtime(), "round_id" = "[GLOB.round_id]", "adminckey" = usr.ckey, "adminip" = usr.client.address, "target" = admin_ckey, "old_rank" = old_rank, "new_rank" = joined_rank)) + VALUES (NOW(), :round_id, :adminckey, INET_ATON(:adminip), 'change admin rank', :target, CONCAT('Rank of ', :target, ' changed from ', :old_rank, ' to ', :new_rank)) + "}, list("round_id" = "[GLOB.round_id]", "adminckey" = usr.ckey, "adminip" = usr.client.address, "target" = admin_ckey, "old_rank" = old_rank, "new_rank" = joined_rank)) if(!query_change_rank_log.warn_execute()) qdel(query_change_rank_log) return @@ -539,8 +539,8 @@ ADMIN_VERB(edit_admin_permissions, R_PERMISSIONS, "Permissions Panel", "Edit adm qdel(query_add_rank) var/datum/db_query/query_add_rank_log = SSdbcore.NewQuery({" INSERT INTO [format_table_name("admin_log")] (datetime, round_id, adminckey, adminip, operation, target, log) - VALUES (:time, :round_id, :adminckey, INET_ATON(:adminip), 'remove rank', :admin_rank, CONCAT('Rank removed: ', :admin_rank)) - "}, list("time" = SQLtime(), "round_id" = "[GLOB.round_id]", "adminckey" = usr.ckey, "adminip" = usr.client.address, "admin_rank" = admin_rank)) + VALUES (NOW(), :round_id, :adminckey, INET_ATON(:adminip), 'remove rank', :admin_rank, CONCAT('Rank removed: ', :admin_rank)) + "}, list("round_id" = "[GLOB.round_id]", "adminckey" = usr.ckey, "adminip" = usr.client.address, "admin_rank" = admin_rank)) if(!query_add_rank_log.warn_execute()) qdel(query_add_rank_log) return diff --git a/code/modules/admin/sql_ban_system.dm b/code/modules/admin/sql_ban_system.dm index bb8b938c7c0ef..9a713588abd6d 100644 --- a/code/modules/admin/sql_ban_system.dm +++ b/code/modules/admin/sql_ban_system.dm @@ -391,8 +391,8 @@ ROLE_REV, ROLE_REVENANT, ROLE_REV_HEAD, - ROLE_SENTIENT_DISEASE, ROLE_SPIDER, + ROLE_SPY, ROLE_SYNDICATE, ROLE_TRAITOR, ROLE_WIZARD, @@ -799,7 +799,7 @@ return var/kn = key_name(usr) var/kna = key_name_admin(usr) - var/change_message = "[usr.client.key] unbanned [target] from [role] on [SQLtime()] during round #[GLOB.round_id]
" + var/change_message = "[usr.client.key] unbanned [target] from [role] on [ISOtime()] during round #[GLOB.round_id]
" var/datum/db_query/query_unban = SSdbcore.NewQuery({" UPDATE [format_table_name("ban")] SET unbanned_datetime = NOW(), @@ -844,7 +844,7 @@ var/kn = key_name(usr) var/kna = key_name_admin(usr) - var/change_message = "[usr.client.key] re-activated ban of [target] from [role] on [SQLtime()] during round #[GLOB.round_id]
" + var/change_message = "[usr.client.key] re-activated ban of [target] from [role] on [ISOtime()] during round #[GLOB.round_id]
" var/datum/db_query/query_reban = SSdbcore.NewQuery({" UPDATE [format_table_name("ban")] SET unbanned_datetime = NULL, diff --git a/code/modules/admin/sql_message_system.dm b/code/modules/admin/sql_message_system.dm index 0cbcbb77903d1..68b96e41ae30f 100644 --- a/code/modules/admin/sql_message_system.dm +++ b/code/modules/admin/sql_message_system.dm @@ -52,7 +52,7 @@ return if(isnull(expiry)) if(tgui_alert(usr, "Set an expiry time? Expired messages are hidden like deleted ones.", "Expiry time?", list("Yes", "No", "Cancel")) == "Yes") - var/expire_time = input("Set expiry time for [type] as format YYYY-MM-DD HH:MM:SS. All times in server time. HH:MM:SS is optional and 24-hour. Must be later than current time for obvious reasons.", "Set expiry time", SQLtime()) as null|text + var/expire_time = input("Set expiry time for [type] as format YYYY-MM-DD HH:MM:SS. All times in server time. HH:MM:SS is optional and 24-hour. Must be later than current time for obvious reasons.", "Set expiry time", ISOtime()) as null|text if(!expire_time) return var/datum/db_query/query_validate_expire_time = SSdbcore.NewQuery( @@ -183,7 +183,7 @@ if(!new_text) qdel(query_find_edit_message) return - var/edit_text = "Edited by [editor_key] on [SQLtime()] from
[old_text]
to
[new_text]
" + var/edit_text = "Edited by [editor_key] on [ISOtime()] from
[old_text]
to
[new_text]
" var/datum/db_query/query_edit_message = SSdbcore.NewQuery({" UPDATE [format_table_name("messages")] SET text = :text, lasteditor = :lasteditor, edits = CONCAT(IFNULL(edits,''),:edit_text) @@ -253,7 +253,7 @@ return new_expiry = query_validate_expire_time_edit.item[1] qdel(query_validate_expire_time_edit) - var/edit_text = "Expiration time edited by [editor_key] on [SQLtime()] from [(old_expiry ? old_expiry : "no expiration date")] to [new_expiry]
" + var/edit_text = "Expiration time edited by [editor_key] on [ISOtime()] from [(old_expiry ? old_expiry : "no expiration date")] to [new_expiry]
" var/datum/db_query/query_edit_message_expiry = SSdbcore.NewQuery({" UPDATE [format_table_name("messages")] SET expire_timestamp = :expire_time, lasteditor = :lasteditor, edits = CONCAT(IFNULL(edits,''),:edit_text) @@ -307,7 +307,7 @@ qdel(query_find_edit_note_severity) return new_severity = new_severity - var/edit_text = "Note severity edited by [editor_key] on [SQLtime()] from [old_severity] to [new_severity]
" + var/edit_text = "Note severity edited by [editor_key] on [ISOtime()] from [old_severity] to [new_severity]
" var/datum/db_query/query_edit_note_severity = SSdbcore.NewQuery({" UPDATE [format_table_name("messages")] SET severity = :severity, lasteditor = :lasteditor, edits = CONCAT(IFNULL(edits,''),:edit_text) @@ -351,7 +351,7 @@ var/target_key = query_find_message_secret.item[2] var/admin_key = query_find_message_secret.item[3] var/secret = text2num(query_find_message_secret.item[4]) - var/edit_text = "Made [secret ? "not secret" : "secret"] by [editor_key] on [SQLtime()]
" + var/edit_text = "Made [secret ? "not secret" : "secret"] by [editor_key] on [ISOtime()]
" var/datum/db_query/query_message_secret = SSdbcore.NewQuery({" UPDATE [format_table_name("messages")] SET secret = NOT secret, lasteditor = :lasteditor, edits = CONCAT(IFNULL(edits,''),:edit_text) diff --git a/code/modules/admin/verbs/adminevents.dm b/code/modules/admin/verbs/adminevents.dm index 3a34c6315480e..035edeb3d93e4 100644 --- a/code/modules/admin/verbs/adminevents.dm +++ b/code/modules/admin/verbs/adminevents.dm @@ -253,11 +253,11 @@ ADMIN_VERB(run_weather, R_FUN, "Run Weather", "Triggers specific weather on the ADMIN_VERB(command_report_footnote, R_ADMIN, "Command Report Footnote", "Adds a footnote to the roundstart command report.", ADMIN_CATEGORY_EVENTS) var/datum/command_footnote/command_report_footnote = new /datum/command_footnote() - DScommunications.block_command_report += 1 //Add a blocking condition to the counter until the inputs are done. + GLOB.communications_controller.block_command_report += 1 //Add a blocking condition to the counter until the inputs are done. command_report_footnote.message = tgui_input_text(user, "This message will be attached to the bottom of the roundstart threat report. Be sure to delay the roundstart report if you need extra time.", "P.S.") if(!command_report_footnote.message) - DScommunications.block_command_report -= 1 + GLOB.communications_controller.block_command_report -= 1 qdel(command_report_footnote) return @@ -266,8 +266,8 @@ ADMIN_VERB(command_report_footnote, R_ADMIN, "Command Report Footnote", "Adds a if(!command_report_footnote.signature) command_report_footnote.signature = "Classified" - DScommunications.command_report_footnotes += command_report_footnote - DScommunications.block_command_report-- + GLOB.communications_controller.command_report_footnotes += command_report_footnote + GLOB.communications_controller.block_command_report-- message_admins("[user] has added a footnote to the command report: [command_report_footnote.message], signed [command_report_footnote.signature]") @@ -276,5 +276,5 @@ ADMIN_VERB(command_report_footnote, R_ADMIN, "Command Report Footnote", "Adds a var/signature ADMIN_VERB(delay_command_report, R_FUN, "Delay Command Report", "Prevents the roundstart command report from being sent; or forces it to send it delayed.", ADMIN_CATEGORY_EVENTS) - DScommunications.block_command_report = !DScommunications.block_command_report - message_admins("[key_name_admin(user)] has [(DScommunications.block_command_report ? "delayed" : "sent")] the roundstart command report.") + GLOB.communications_controller.block_command_report = !GLOB.communications_controller.block_command_report + message_admins("[key_name_admin(user)] has [(GLOB.communications_controller.block_command_report ? "delayed" : "sent")] the roundstart command report.") diff --git a/code/modules/admin/verbs/anonymousnames.dm b/code/modules/admin/verbs/anonymousnames.dm index 9a71d68637a88..7f56155c9989a 100644 --- a/code/modules/admin/verbs/anonymousnames.dm +++ b/code/modules/admin/verbs/anonymousnames.dm @@ -94,7 +94,7 @@ GLOBAL_DATUM(current_anonymous_theme, /datum/anonymous_theme) return var/mob/living/carbon/human/human_mob = player var/original_name = player.real_name //id will not be changed if you do not do this - randomize_human(player) //do this first so the special name can be given + randomize_human_normie(player) //do this first so the special name can be given player.fully_replace_character_name(original_name, anonymous_name(player)) if(extras_enabled) player_extras(player) @@ -131,8 +131,7 @@ GLOBAL_DATUM(current_anonymous_theme, /datum/anonymous_theme) /datum/anonymous_theme/proc/anonymous_name(mob/target) var/datum/client_interface/client = GET_CLIENT(target) var/species_type = client.prefs.read_preference(/datum/preference/choiced/species) - var/datum/species/species = new species_type - return species.random_name(target.gender,1) + return generate_random_name_species_based(target.gender, TRUE, species_type) /** * anonymous_ai_name: generates a random name, based off of whatever the round's anonymousnames is set to (but for sillycones). diff --git a/code/modules/admin/verbs/borgpanel.dm b/code/modules/admin/verbs/borgpanel.dm index 6a8e1efdb5656..ffeb1cce2731c 100644 --- a/code/modules/admin/verbs/borgpanel.dm +++ b/code/modules/admin/verbs/borgpanel.dm @@ -81,7 +81,7 @@ ADMIN_VERB(borg_panel, R_ADMIN, "Show Borg Panel", ADMIN_VERB_NO_DESCRIPTION, AD message_admins("[key_name_admin(user)] deleted the cell of [ADMIN_LOOKUPFLW(borg)].") log_silicon("[key_name(user)] deleted the cell of [key_name(borg)].") if ("change_cell") - var/chosen = pick_closest_path(null, make_types_fancy(typesof(/obj/item/stock_parts/cell))) + var/chosen = pick_closest_path(null, make_types_fancy(typesof(/obj/item/stock_parts/power_store/cell))) if (!ispath(chosen)) chosen = text2path(chosen) if (chosen) @@ -134,17 +134,19 @@ ADMIN_VERB(borg_panel, R_ADMIN, "Show Borg Panel", ADMIN_VERB_NO_DESCRIPTION, AD borg.fully_replace_character_name(borg.real_name,new_name) if ("toggle_upgrade") var/upgradepath = text2path(params["upgrade"]) - var/obj/item/borg/upgrade/installedupgrade = locate(upgradepath) in borg + var/obj/item/borg/upgrade/installedupgrade = locate(upgradepath) in borg.upgrades if (installedupgrade) message_admins("[key_name_admin(user)] removed the [installedupgrade] upgrade from [ADMIN_LOOKUPFLW(borg)].") log_silicon("[key_name(user)] removed the [installedupgrade] upgrade from [key_name(borg)].") qdel(installedupgrade) // see [mob/living/silicon/robot/on_upgrade_deleted()]. else var/obj/item/borg/upgrade/upgrade = new upgradepath(borg) - upgrade.action(borg, user) - borg.upgrades += upgrade message_admins("[key_name_admin(user)] added the [upgrade] borg upgrade to [ADMIN_LOOKUPFLW(borg)].") log_silicon("[key_name(user)] added the [upgrade] borg upgrade to [key_name(borg)].") + if(upgrade.action(borg, user)) + borg.add_to_upgrades(upgrade) + else + qdel(upgrade) if ("toggle_radio") var/channel = params["channel"] if (channel in borg.radio.channels) // We're removing a channel diff --git a/code/modules/admin/verbs/debug.dm b/code/modules/admin/verbs/debug.dm index e56eb1e5101a7..20cdf3514598f 100644 --- a/code/modules/admin/verbs/debug.dm +++ b/code/modules/admin/verbs/debug.dm @@ -765,7 +765,7 @@ ADMIN_VERB(reestablish_tts_connection, R_DEBUG, "Re-establish Connection To TTS" var/list/sorted = list() for (var/source in per_source) sorted += list(list("source" = source, "count" = per_source[source])) - sorted = sortTim(sorted, GLOBAL_PROC_REF(cmp_timer_data)) + sortTim(sorted, GLOBAL_PROC_REF(cmp_timer_data)) // Now that everything is sorted, compile them into an HTML output var/output = "" diff --git a/code/modules/admin/verbs/ert.dm b/code/modules/admin/verbs/ert.dm index c86d08151ee62..2d1ba075a4795 100644 --- a/code/modules/admin/verbs/ert.dm +++ b/code/modules/admin/verbs/ert.dm @@ -25,7 +25,7 @@ /datum/admins/proc/equipAntagOnDummy(mob/living/carbon/human/dummy/mannequin, datum/antagonist/antag) - for(var/I in mannequin.get_equipped_items(include_pockets = TRUE)) + for(var/I in mannequin.get_equipped_items(INCLUDE_POCKETS)) qdel(I) if (ispath(antag, /datum/antagonist/ert)) var/datum/antagonist/ert/ert = antag diff --git a/code/modules/admin/verbs/fix_air.dm b/code/modules/admin/verbs/fix_air.dm index 00fbb3f1bec83..4da06921b929b 100644 --- a/code/modules/admin/verbs/fix_air.dm +++ b/code/modules/admin/verbs/fix_air.dm @@ -9,4 +9,5 @@ ADMIN_VERB_AND_CONTEXT_MENU(fix_air, R_ADMIN, "Fix Air", "Fixes air in a specifi continue var/datum/gas_mixture/GM = SSair.parse_gas_string(valid_range_turf.initial_gas_mix, /datum/gas_mixture/turf) valid_range_turf.copy_air(GM) + valid_range_turf.temperature = initial(valid_range_turf.temperature) valid_range_turf.update_visuals() diff --git a/code/modules/admin/verbs/light_debug.dm b/code/modules/admin/verbs/light_debug.dm index ae5b24ff38032..5738e06eeeab5 100644 --- a/code/modules/admin/verbs/light_debug.dm +++ b/code/modules/admin/verbs/light_debug.dm @@ -10,7 +10,7 @@ sum[source.source_atom.type] += 1 total += 1 - sum = sortTim(sum, /proc/cmp_numeric_asc, TRUE) + sortTim(sum, associative = TRUE) var/text = "" for(var/type in sum) text += "[type] = [sum[type]]\n" @@ -129,8 +129,7 @@ GLOBAL_LIST_EMPTY(light_debugged_atoms) last_hovored_ref = WEAKREF(over_object) over_object.MouseEntered(over_location, over_control, params) -/atom/movable/screen/light_button/MouseDrop(over_object) - . = ..() +/atom/movable/screen/light_button/mouse_drop_dragged(atom/over, mob/user, src_location, over_location, params) last_hovored_ref = null /atom/movable/screen/light_button/MouseEntered(location, control, params) @@ -330,8 +329,7 @@ GLOBAL_LIST_EMPTY(light_debugged_atoms) icon_state = "light_move" mouse_drag_pointer = 'icons/effects/mouse_pointers/light_drag.dmi' -/atom/movable/screen/light_button/move/MouseDrop(over_object) - . = ..() +/atom/movable/screen/light_button/move/mouse_drop_dragged(atom/over_object) if(!ismovable(loc)) return var/atom/movable/movable_owner = loc diff --git a/code/modules/admin/verbs/lua/lua_state.dm b/code/modules/admin/verbs/lua/lua_state.dm index 27994d966a7cb..bf2bcbd5a9003 100644 --- a/code/modules/admin/verbs/lua/lua_state.dm +++ b/code/modules/admin/verbs/lua/lua_state.dm @@ -111,8 +111,6 @@ GLOBAL_PROTECT(lua_usr) for(var/path_element in function) new_function_path += path_element function = new_function_path - var/msg = "[key_name(usr)] called the lua function \"[function]\" with arguments: [english_list(call_args)]" - log_lua(msg) var/tmp_usr = GLOB.lua_usr GLOB.lua_usr = usr diff --git a/code/modules/admin/verbs/mapping.dm b/code/modules/admin/verbs/mapping.dm index 91481bb9a3e6b..3717affc51c34 100644 --- a/code/modules/admin/verbs/mapping.dm +++ b/code/modules/admin/verbs/mapping.dm @@ -208,8 +208,12 @@ ADMIN_VERB(create_mapping_job_icons, R_DEBUG, "Generate job landmarks icons", "G else for(var/obj/item/I in D) qdel(I) - randomize_human(D) - D.dress_up_as_job(JB, TRUE) + randomize_human_normie(D) + D.dress_up_as_job( + equipping = JB, + visual_only = TRUE, + consistent = TRUE, + ) var/icon/I = icon(getFlatIcon(D), frame = 1) final.Insert(I, JB.title) qdel(D) diff --git a/code/modules/admin/verbs/possess.dm b/code/modules/admin/verbs/possess.dm index a7e50840f5e2a..2949447b2ef02 100644 --- a/code/modules/admin/verbs/possess.dm +++ b/code/modules/admin/verbs/possess.dm @@ -1,5 +1,5 @@ -ADMIN_VERB(possess, R_POSSESS, "Possess Obj", "Possess an object.", ADMIN_CATEGORY_OBJECT, obj/target in world) +ADMIN_VERB_AND_CONTEXT_MENU(possess, R_POSSESS, "Possess Obj", "Possess an object.", ADMIN_CATEGORY_OBJECT, obj/target in world) var/result = user.mob.AddComponent(/datum/component/object_possession, target) if(isnull(result)) // trigger a safety movement just in case we yonk diff --git a/code/modules/admin/verbs/secrets.dm b/code/modules/admin/verbs/secrets.dm index b7aa16b6b5fd5..c124a5fba2266 100644 --- a/code/modules/admin/verbs/secrets.dm +++ b/code/modules/admin/verbs/secrets.dm @@ -222,7 +222,7 @@ ADMIN_VERB(secrets, R_NONE, "Secrets", "Abuse harder than you ever have before w if("allspecies") if(!is_funmin) return - var/result = input(holder, "Please choose a new species","Species") as null|anything in GLOB.species_list + var/result = input(holder, "Please choose a new species","Species") as null|anything in sortTim(GLOB.species_list, GLOBAL_PROC_REF(cmp_text_asc)) if(result) SSblackbox.record_feedback("nested tally", "admin_secrets_fun_used", 1, list("Mass Species Change", "[result]")) log_admin("[key_name(holder)] turned all humans into [result]") @@ -604,6 +604,25 @@ ADMIN_VERB(secrets, R_NONE, "Secrets", "Abuse harder than you ever have before w message_admins("[key_name_admin(holder)] [ctf_controller.instagib_mode ? "enabled" : "disabled"] instagib mode in CTF game: [selected_game]") log_admin("[key_name_admin(holder)] [ctf_controller.instagib_mode ? "enabled" : "disabled"] instagib mode in CTF game: [selected_game]") + if("mass_heal") + if(!is_funmin) + return + var/heal_mobs = tgui_alert(usr, "Heal all mobs and return ghosts to their bodies?", "Mass Healing", list("Yes", "No")) + if(!heal_mobs || heal_mobs != "Yes") + return + + for(var/mob/dead/observer/ghost in GLOB.player_list) //Return all ghosts if possible + if(!ghost.mind || !ghost.mind.current) //won't do anything if there is no body + continue + ghost.reenter_corpse() + + for(var/mob/living/player in GLOB.player_list) + player.revive(ADMIN_HEAL_ALL, force_grab_ghost = TRUE) + + sound_to_playing_players('sound/effects/pray_chaplain.ogg') + message_admins("[key_name_admin(holder)] healed everyone.") + log_admin("[key_name(holder)] healed everyone.") + if(E) E.processing = FALSE if(E.announce_when>0) @@ -617,7 +636,7 @@ ADMIN_VERB(secrets, R_NONE, "Secrets", "Abuse harder than you ever have before w E.announce_chance = 0 E.processing = TRUE if(holder) - log_admin("[key_name(holder)] used secret [action]") + log_admin("[key_name(holder)] used secret: [action].") #undef THUNDERDOME_TEMPLATE_FILE #undef HIGHLANDER_DELAY_TEXT @@ -724,4 +743,3 @@ ADMIN_VERB(secrets, R_NONE, "Secrets", "Abuse harder than you ever have before w var/datum/antagonist/malf_ai/antag_datum = new antag_datum.give_objectives = keep_generic_objecives assign_admin_objective_and_antag(player, antag_datum) - diff --git a/code/modules/admin/verbs/selectequipment.dm b/code/modules/admin/verbs/selectequipment.dm index b94fd5cb2e455..415130fa1b727 100644 --- a/code/modules/admin/verbs/selectequipment.dm +++ b/code/modules/admin/verbs/selectequipment.dm @@ -209,7 +209,8 @@ ADMIN_VERB_ONLY_CONTEXT_MENU(select_equipment, R_FUN, "Select Equipment", mob/ta delete_pocket = TRUE BLACKBOX_LOG_ADMIN_VERB("Select Equipment") - for(var/obj/item/item in human_target.get_equipped_items(include_pockets = delete_pocket)) + var/includes_flags = delete_pocket ? INCLUDE_POCKETS : NONE + for(var/obj/item/item in human_target.get_equipped_items(includes_flags)) qdel(item) var/obj/item/organ/internal/brain/human_brain = human_target.get_organ_slot(BRAIN) diff --git a/code/modules/admin/view_variables/color_matrix_editor.dm b/code/modules/admin/view_variables/color_matrix_editor.dm index ea1278901f3fe..6c61382ceec78 100644 --- a/code/modules/admin/view_variables/color_matrix_editor.dm +++ b/code/modules/admin/view_variables/color_matrix_editor.dm @@ -14,7 +14,7 @@ else current_color = COLOR_MATRIX_IDENTITY - var/mutable_appearance/view = image('icons/misc/colortest.dmi', "colors") + var/mutable_appearance/view = image('icons/testing/colortest.dmi', "colors") if(_target) target = WEAKREF(_target) if(!(_target.appearance_flags & PLANE_MASTER)) diff --git a/code/modules/admin/view_variables/debug_variable_appearance.dm b/code/modules/admin/view_variables/debug_variable_appearance.dm index 0d7bbb4b61cc0..9e92eba4605c3 100644 --- a/code/modules/admin/view_variables/debug_variable_appearance.dm +++ b/code/modules/admin/view_variables/debug_variable_appearance.dm @@ -1,236 +1,101 @@ -/* < OH MY GOD. Can't you just make "/image/proc/foo()" instead of making these? > - * /appearance is a hardcoded byond type, and it is very internal type. - * Its type is actually /image, but it isn't truly /image. We defined it as "/appearance" - * new procs to /image will only work to actual /image references, but... - * /appearance references are not capable of executing procs, because these are not real /image - * This is why these global procs exist. Welcome to the curse. - */ -#define ADD_UNUSED_VAR(varlist, thing, varname) if(NAMEOF(##thing, ##varname)) ##varlist += #varname -#define RESULT_VARIABLE_NOT_FOUND "_switch_result_variable_not_found" - -/// An alias datum that allows us to access and view the variables of an appearance by keeping certain known, yet undocumented, variables that we can access and read in a datum for debugging purposes. -/// Kindly do not use this outside of a debugging context. -/image/appearance - parent_type = /atom/movable // This is necessary to access the variables on compile-time. - - // var/override // Sad point. We can't steal byond internal variable name -#ifdef OPENDREAM - // opendream doens't support mouse_drop_zone yet. Remove this once OD supports it. - var/mouse_drop_zone -#endif - -/image/appearance/New(loc, ...) - . = ..() - CRASH("something tried to use '/image/appearance', but this isn't actual type we use. Do not fucking do this.") - -/// Makes a var list of /appearance type actually uses. This will be only called once. -/proc/build_virtual_appearance_vars() - var/list/used_variables = list("vis_flags") // manual listing. - . = used_variables - var/list/unused_var_names = list() - - var/image/appearance/nameof_reference // We don't copy vars from this. - pass(nameof_reference) // compiler complains unused variable - ADD_UNUSED_VAR(unused_var_names, nameof_reference, appearance) // it only does self-reference - ADD_UNUSED_VAR(unused_var_names, nameof_reference, x) // xyz are always 0 - ADD_UNUSED_VAR(unused_var_names, nameof_reference, y) - ADD_UNUSED_VAR(unused_var_names, nameof_reference, z) - ADD_UNUSED_VAR(unused_var_names, nameof_reference, weak_reference) // it's not a good idea to make a weak_ref on this, and this won't have it - ADD_UNUSED_VAR(unused_var_names, nameof_reference, vars) // inherited from /image, but /appearance hasn't this - - // Even if these vars are essential for image, these only exists in an actual type - ADD_UNUSED_VAR(unused_var_names, nameof_reference, filter_data) - ADD_UNUSED_VAR(unused_var_names, nameof_reference, realized_overlays) - ADD_UNUSED_VAR(unused_var_names, nameof_reference, realized_underlays) - - // we have no reason to show these, right? - ADD_UNUSED_VAR(unused_var_names, nameof_reference, _active_timers) - ADD_UNUSED_VAR(unused_var_names, nameof_reference, _datum_components) - ADD_UNUSED_VAR(unused_var_names, nameof_reference, _listen_lookup) - ADD_UNUSED_VAR(unused_var_names, nameof_reference, _signal_procs) - ADD_UNUSED_VAR(unused_var_names, nameof_reference, __auxtools_weakref_id) - ADD_UNUSED_VAR(unused_var_names, nameof_reference, _status_traits) - ADD_UNUSED_VAR(unused_var_names, nameof_reference, cooldowns) - ADD_UNUSED_VAR(unused_var_names, nameof_reference, datum_flags) - ADD_UNUSED_VAR(unused_var_names, nameof_reference, verbs) - ADD_UNUSED_VAR(unused_var_names, nameof_reference, gc_destroyed) - ADD_UNUSED_VAR(unused_var_names, nameof_reference, harddel_deets_dumped) - ADD_UNUSED_VAR(unused_var_names, nameof_reference, open_uis) - ADD_UNUSED_VAR(unused_var_names, nameof_reference, tgui_shared_states) - - var/image/dummy_image = image(null, null) // actual type we'll copy variable names - for(var/each in dummy_image.vars) // try to inherit var list from /image - if(each in unused_var_names) - continue - used_variables += each - del(dummy_image) - dummy_image = null - - return used_variables - -/// debug_variable() proc but made for /appearance type specifically -/proc/debug_variable_appearance(var_name, appearance) - var/value - try - value = locate_appearance_variable(var_name, appearance) - catch - return "
  • (READ ONLY) [var_name] = (untrackable)
  • " - if(value == RESULT_VARIABLE_NOT_FOUND) - return "
  • (READ ONLY) [var_name] (Undefined var name in switch)
  • " - return "
  • (READ ONLY) [var_name] = [_debug_variable_value(var_name, value, 0, appearance, sanitize = TRUE, display_flags = NONE)]
  • " - -/// manually locate a variable through string value. -/// appearance type needs a manual var referencing because it doesn't have "vars" variable internally. -/// There's no way doing this in a fancier way. -/proc/locate_appearance_variable(var_name, image/appearance/appearance) // WARN: /image/appearance is a mocking type, not real one - switch(var_name) // Welcome to this curse - // appearance doesn't have "vars" variable. - // This means you need to target a variable manually through this way. - - // appearance vars in DM document - if(NAMEOF(appearance, alpha)) - return appearance.alpha - if(NAMEOF(appearance, appearance_flags)) - return appearance.appearance_flags - if(NAMEOF(appearance, blend_mode)) - return appearance.blend_mode - if(NAMEOF(appearance, color)) - return appearance.color - if(NAMEOF(appearance, desc)) - return appearance.desc - if(NAMEOF(appearance, gender)) - return appearance.gender - if(NAMEOF(appearance, icon)) - return appearance.icon - if(NAMEOF(appearance, icon_state)) - return appearance.icon_state - if(NAMEOF(appearance, invisibility)) - return appearance.invisibility - if(NAMEOF(appearance, infra_luminosity)) - return appearance.infra_luminosity - if(NAMEOF(appearance, filters)) - return appearance.filters - if(NAMEOF(appearance, layer)) - return appearance.layer - if(NAMEOF(appearance, luminosity)) - return appearance.luminosity - if(NAMEOF(appearance, maptext)) - return appearance.maptext - if(NAMEOF(appearance, maptext_width)) - return appearance.maptext_width - if(NAMEOF(appearance, maptext_height)) - return appearance.maptext_height - if(NAMEOF(appearance, maptext_x)) - return appearance.maptext_x - if(NAMEOF(appearance, maptext_y)) - return appearance.maptext_y - if(NAMEOF(appearance, mouse_over_pointer)) - return appearance.mouse_over_pointer - if(NAMEOF(appearance, mouse_drag_pointer)) - return appearance.mouse_drag_pointer - if(NAMEOF(appearance, mouse_drop_pointer)) - return appearance.mouse_drop_pointer - if(NAMEOF(appearance, mouse_drop_zone)) - return appearance:mouse_drop_zone - if(NAMEOF(appearance, mouse_opacity)) - return appearance.mouse_opacity - if(NAMEOF(appearance, name)) - return appearance.name - if(NAMEOF(appearance, opacity)) - return appearance.opacity - if(NAMEOF(appearance, overlays)) - return appearance.overlays - if("override") // only /image has this. mocking type can't steal byond internal var name - var/image/image_appearance = appearance - return image_appearance.override - if(NAMEOF(appearance, pixel_x)) - return appearance.pixel_x - if(NAMEOF(appearance, pixel_y)) - return appearance.pixel_y - if(NAMEOF(appearance, pixel_w)) - return appearance.pixel_w - if(NAMEOF(appearance, pixel_z)) - return appearance.pixel_z - if(NAMEOF(appearance, plane)) - return appearance.plane - if(NAMEOF(appearance, render_source)) - return appearance.render_source - if(NAMEOF(appearance, render_target)) - return appearance.render_target - if(NAMEOF(appearance, suffix)) - return appearance.suffix - if(NAMEOF(appearance, text)) - return appearance.text - if(NAMEOF(appearance, transform)) - return appearance.transform - if(NAMEOF(appearance, underlays)) - return appearance.underlays - - if(NAMEOF(appearance, parent_type)) - return appearance.parent_type - if(NAMEOF(appearance, type)) - return /image/appearance // don't fool people - - // These are not documented ones but trackable values. Maybe we'd want these. - if(NAMEOF(appearance, animate_movement)) - return appearance.animate_movement - if(NAMEOF(appearance, dir)) - return appearance.dir - if(NAMEOF(appearance, glide_size)) - return appearance.glide_size - if("pixel_step_size") - return "" //atom_appearance.pixel_step_size - // DM compiler complains this - - // I am not sure if these will be ever detected, but I made a connection just in case. - if(NAMEOF(appearance, contents)) // It's not a thing, but I don't believe how DM will change /appearance in future. - return appearance.contents - if(NAMEOF(appearance, loc)) // same reason above - return appearance.loc - if(NAMEOF(appearance, vis_contents)) // same reason above - return appearance.vis_contents - if(NAMEOF(appearance, vis_flags)) // DM document says /appearance has this, but it throws error - return appearance.vis_flags - - // we wouldn't need these, but let's these trackable anyway... - if(NAMEOF(appearance, density)) - return appearance.density - if(NAMEOF(appearance, screen_loc)) - return appearance.screen_loc - if(NAMEOF(appearance, verbs)) - return appearance.verbs - if(NAMEOF(appearance, tag)) - return appearance.tag - return RESULT_VARIABLE_NOT_FOUND - -/// Shows a header name on top when you investigate an appearance -/proc/vv_get_header_appearance(image/thing) +/// Shows a header name on top when you investigate an appearance/image +/image/vv_get_header() . = list() - var/icon_name = "[thing.icon || "null"]
    " + var/icon_name = "[icon || "null"]
    " . += replacetext(icon_name, "icons/obj", "") // shortens the name. We know the path already. - if(thing.icon) - . += thing.icon_state ? "\"[thing.icon_state]\"" : "(icon_state = null)" + if(icon) + . += icon_state ? "\"[icon_state]\"" : "(icon_state = null)" + +/// Makes nice short vv names for images +/image/debug_variable_value(name, level, datum/owner, sanitize, display_flags) + var/display_name = "[type]" + if("[src]" != "[type]") // If we have a name var, let's use it. + display_name = "[src] [type]" + + var/display_value + var/list/icon_file_name = splittext("[icon]", "/") + if(length(icon_file_name)) + display_value = icon_file_name[length(icon_file_name)] + else + display_value = "null" + + if(icon_state) + display_value = "[display_value]:[icon_state]" + + var/display_ref = get_vv_link_ref() + return "[display_name] ([display_value]) [display_ref]" + +/// Returns the ref string to use when displaying this image in the vv menu of something else +/image/proc/get_vv_link_ref() + return REF(src) + +// It is endlessly annoying to display /appearance directly for stupid byond reasons, so we copy everything we care about into a holder datum +// That we can override procs on and store other vars on and such. +/mutable_appearance/appearance_mirror + // So people can see where it came from + var/appearance_ref + // vis flags can't be displayed by mutable appearances cause it don't make sense as overlays, but appearances do carry them + // can't use the name either for byond reasons + var/_vis_flags + +// all alone at the end of the universe +GLOBAL_DATUM_INIT(pluto, /atom/movable, new /atom/movable(null)) + +// arg is actually an appearance, typed as mutable_appearance as closest mirror +/mutable_appearance/appearance_mirror/New(mutable_appearance/appearance_father) + . = ..() // /mutable_appearance/New() copies over all the appearance vars MAs care about by default + // We copy over our appearance onto an atom. This is done so we can read vars carried by but not accessible on appearances + GLOB.pluto.appearance = appearance_father + _vis_flags = GLOB.pluto.vis_flags + appearance_ref = REF(appearance_father) + +// This means if the appearance loses refs before a click it's gone, but that's consistent to other datums so it's fine +// Need to ref the APPEARANCE because we just free on our own, which sorta fucks this operation up you know? +/mutable_appearance/appearance_mirror/get_vv_link_ref() + return appearance_ref + +/mutable_appearance/appearance_mirror/can_vv_get(var_name) + var/static/datum/beloved = new() + if(beloved.vars.Find(var_name)) // If datums have it, get out + return FALSE + // If it is one of the two args on /image, yeet (I am sorry) + if(var_name == NAMEOF(src, realized_overlays)) + return FALSE + if(var_name == NAMEOF(src, realized_underlays)) + return FALSE + // Filtering out the stuff I know we don't care about + if(var_name == NAMEOF(src, x)) + return FALSE + if(var_name == NAMEOF(src, y)) + return FALSE + if(var_name == NAMEOF(src, z)) + return FALSE + // Could make an argument for these but I think they will just confuse people, so yeeet +#ifndef SPACEMAN_DMM // Spaceman doesn't believe in contents on appearances, sorry lads + if(var_name == NAMEOF(src, contents)) + return FALSE +#endif + if(var_name == NAMEOF(src, loc)) + return FALSE + if(var_name == NAMEOF(src, vis_contents)) + return FALSE + return ..() -/image/vv_get_header() // it should redirect to global proc version because /appearance can't call a proc, unless we want dupe code here - return vv_get_header_appearance(src) +/mutable_appearance/appearance_mirror/vv_get_var(var_name) + // No editing for you + var/value = vars[var_name] + return "
  • (READ ONLY) [var_name] = [_debug_variable_value(var_name, value, 0, src, sanitize = TRUE, display_flags = NONE)]
  • " -/// Makes a format name for shortened vv name. -/proc/get_appearance_vv_summary_name(image/thing) - var/icon_file_name = thing.icon ? splittext("[thing.icon]", "/") : "null" - if(islist(icon_file_name)) - icon_file_name = length(icon_file_name) ? icon_file_name[length(icon_file_name)] : "null" - if(thing.icon_state) - return "[icon_file_name]:[thing.icon_state]" - else - return "[icon_file_name]" +/mutable_appearance/appearance_mirror/vv_get_dropdown() + SHOULD_CALL_PARENT(FALSE) -/proc/vv_get_dropdown_appearance(image/thing) . = list() - // Don't add any vv option carelessly unless you have a good reason to add one for /appearance. - // /appearance type shouldn't allow general options. Even "Mark Datum" is a questionable behaviour here. - VV_DROPDOWN_OPTION_APPEARANCE(thing, "", "---") - VV_DROPDOWN_OPTION_APPEARANCE(thing, VV_HK_EXPOSE, "Show VV To Player") // only legit option - return . - -#undef ADD_UNUSED_VAR -#undef RESULT_VARIABLE_NOT_FOUND + VV_DROPDOWN_OPTION("", "---") + VV_DROPDOWN_OPTION(VV_HK_CALLPROC, "Call Proc") + VV_DROPDOWN_OPTION(VV_HK_MARK, "Mark Object") + VV_DROPDOWN_OPTION(VV_HK_TAG, "Tag Datum") + VV_DROPDOWN_OPTION(VV_HK_DELETE, "Delete") + VV_DROPDOWN_OPTION(VV_HK_EXPOSE, "Show VV To Player") + +/proc/get_vv_appearance(mutable_appearance/appearance) // actually appearance yadeeyada + return new /mutable_appearance/appearance_mirror(appearance) diff --git a/code/modules/admin/view_variables/debug_variables.dm b/code/modules/admin/view_variables/debug_variables.dm index d64a9c2ef9aac..a4035acd01421 100644 --- a/code/modules/admin/view_variables/debug_variables.dm +++ b/code/modules/admin/view_variables/debug_variables.dm @@ -30,6 +30,9 @@ // This is split into a seperate proc mostly to make errors that happen not break things too much /proc/_debug_variable_value(name, value, level, datum/owner, sanitize, display_flags) + if(isappearance(value)) + value = get_vv_appearance(value) + . = "DISPLAY_ERROR: ([value] [REF(value)])" // Make sure this line can never runtime if(isnull(value)) @@ -49,13 +52,6 @@ return "/icon ([value])" #endif - - if(isappearance(value)) // Reminder: Do not replace this into /image/debug_variable_value() proc. /appearance can't do that. - return "/appearance ([get_appearance_vv_summary_name(value)]) [REF(value)]" - - if(isimage(value)) - return "[value:type] ([get_appearance_vv_summary_name(value)]) [REF(value)]" - if(isfilter(value)) var/datum/filter_value = value return "/filter ([filter_value.type] [REF(filter_value)])" diff --git a/code/modules/admin/view_variables/view_variables.dm b/code/modules/admin/view_variables/view_variables.dm index 45f8ef84c0e03..37bf0911c608f 100644 --- a/code/modules/admin/view_variables/view_variables.dm +++ b/code/modules/admin/view_variables/view_variables.dm @@ -21,9 +21,10 @@ ADMIN_VERB_AND_CONTEXT_MENU(debug_variables, R_NONE, "View Variables", "View the var/datum/asset/asset_cache_datum = get_asset_datum(/datum/asset/simple/vv) asset_cache_datum.send(usr) - var/isappearance = isappearance(thing) + if(isappearance(thing)) + thing = get_vv_appearance(thing) // this is /mutable_appearance/our_bs_subtype var/islist = islist(thing) || (!isdatum(thing) && hascall(thing, "Cut")) // Some special lists dont count as lists, but can be detected by if they have list procs - if(!islist && !isdatum(thing) && !isappearance) + if(!islist && !isdatum(thing)) return var/title = "" @@ -31,7 +32,7 @@ ADMIN_VERB_AND_CONTEXT_MENU(debug_variables, R_NONE, "View Variables", "View the var/icon/sprite var/hash - var/type = islist? /list : (isappearance ? "/appearance" : thing.type) + var/type = islist ? /list : thing.type var/no_icon = FALSE if(isatom(thing)) @@ -39,7 +40,7 @@ ADMIN_VERB_AND_CONTEXT_MENU(debug_variables, R_NONE, "View Variables", "View the if(!sprite) no_icon = TRUE - else if(isimage(thing) || isappearance) + else if(isimage(thing)) // icon_state=null shows first image even if dmi has no icon_state for null name. // This list remembers which dmi has null icon_state, to determine if icon_state=null should display a sprite // (NOTE: icon_state="" is correct, but saying null is obvious) @@ -49,7 +50,7 @@ ADMIN_VERB_AND_CONTEXT_MENU(debug_variables, R_NONE, "View Variables", "View the if(icon_filename_text) if(image_object.icon_state) sprite = icon(image_object.icon, image_object.icon_state) - + else // it means: icon_state="" if(!dmi_nullstate_checklist[icon_filename_text]) dmi_nullstate_checklist[icon_filename_text] = ICON_STATE_CHECKED @@ -69,7 +70,7 @@ ADMIN_VERB_AND_CONTEXT_MENU(debug_variables, R_NONE, "View Variables", "View the title = "[thing] ([REF(thing)]) = [type]" var/formatted_type = replacetext("[type]", "/", "/") - var/list/header = islist ? list("/list") : (isappearance ? vv_get_header_appearance(thing) : thing.vv_get_header()) + var/list/header = islist ? list("/list") : thing.vv_get_header() var/ref_line = "@[copytext(refid, 2, -1)]" // get rid of the brackets, add a @ prefix for copy pasting in asay @@ -103,16 +104,11 @@ ADMIN_VERB_AND_CONTEXT_MENU(debug_variables, R_NONE, "View Variables", "View the var/name = dropdownoptions[i] var/link = dropdownoptions[name] dropdownoptions[i] = "" - else if(isappearance) - dropdownoptions = vv_get_dropdown_appearance(thing) else dropdownoptions = thing.vv_get_dropdown() var/list/names = list() - if(isappearance) - var/static/list/virtual_appearance_vars = build_virtual_appearance_vars() - names = virtual_appearance_vars.Copy() - else if(!islist) + if(!islist) for(var/varname in thing.vars) names += varname @@ -127,10 +123,6 @@ ADMIN_VERB_AND_CONTEXT_MENU(debug_variables, R_NONE, "View Variables", "View the if(IS_NORMAL_LIST(list_value) && IS_VALID_ASSOC_KEY(key)) value = list_value[key] variable_html += debug_variable(i, value, 0, list_value) - else if(isappearance) - names = sort_list(names) - for(var/varname in names) - variable_html += debug_variable_appearance(varname, thing) else names = sort_list(names) for(var/varname in names) diff --git a/code/modules/antagonists/_common/antag_datum.dm b/code/modules/antagonists/_common/antag_datum.dm index cf5d5a83e8dfe..c72c97fb73402 100644 --- a/code/modules/antagonists/_common/antag_datum.dm +++ b/code/modules/antagonists/_common/antag_datum.dm @@ -61,6 +61,8 @@ GLOBAL_LIST_EMPTY(antagonists) var/default_custom_objective = "Cause chaos on the space station." /// Whether we give a hardcore random bonus for greentexting as this antagonist while playing hardcore random var/hardcore_random_bonus = FALSE + /// A path to the audio stinger that plays upon gaining this datum. + var/stinger_sound //ANTAG UI @@ -342,6 +344,14 @@ GLOBAL_LIST_EMPTY(antagonists) /datum/antagonist/proc/greet() if(!silent) to_chat(owner.current, span_big("You are \the [src].")) + play_stinger() + +/// Plays the antag stinger sound, if we have one +/datum/antagonist/proc/play_stinger() + if(isnull(stinger_sound)) + return + + owner.current.playsound_local(get_turf(owner.current), stinger_sound, 100, FALSE, pressure_affected = FALSE, use_reverb = FALSE) /** * Proc that sends fluff or instructional messages to the player when they lose this antag datum. diff --git a/code/modules/antagonists/_common/antag_spawner.dm b/code/modules/antagonists/_common/antag_spawner.dm index 18dce0501ff65..440feb91b7622 100644 --- a/code/modules/antagonists/_common/antag_spawner.dm +++ b/code/modules/antagonists/_common/antag_spawner.dm @@ -95,7 +95,7 @@ */ /obj/item/antag_spawner/nuke_ops name = "syndicate operative beacon" - desc = "MI13 designed one-use radio for calling immediate backup. Have no regards for safety of whom it summons - they are all inferior clones from Interdyne's genebanks anyway." + desc = "A single-use beacon designed to quickly launch reinforcement operatives into the field." icon = 'icons/obj/devices/voice.dmi' icon_state = "nukietalkie" /// The name of the special role given to the recruit @@ -170,7 +170,7 @@ /obj/item/antag_spawner/nuke_ops/overwatch name = "overwatch support beacon" desc = "Assigns an Overwatch Intelligence Agent to your operation. Stationed at their own remote outpost, they can view station cameras, alarms, and even move the Infiltrator shuttle! \ - Also, all members of your operation will recieve body cameras that they can view your progress from." + Also, all members of your operation will receive body cameras that they can view your progress from." special_role_name = ROLE_OPERATIVE_OVERWATCH outfit = /datum/outfit/syndicate/support use_subtypes = FALSE @@ -443,7 +443,7 @@ name = "Syndicate Monkey Agent Kit" head = /obj/item/clothing/head/fedora - mask = /obj/item/clothing/mask/cigarette/syndicate + mask = /obj/item/cigarette/syndicate uniform = /obj/item/clothing/under/syndicate l_pocket = /obj/item/reagent_containers/cup/soda_cans/monkey_energy r_pocket = /obj/item/storage/fancy/cigarettes/cigpack_syndicate diff --git a/code/modules/antagonists/abductor/abductor.dm b/code/modules/antagonists/abductor/abductor.dm index a4e1f2e5dcc8a..68cf781db9b05 100644 --- a/code/modules/antagonists/abductor/abductor.dm +++ b/code/modules/antagonists/abductor/abductor.dm @@ -7,6 +7,7 @@ show_in_antagpanel = FALSE //should only show subtypes show_to_ghosts = TRUE suicide_cry = "FOR THE MOTHERSHIP!!" // They can't even talk but y'know + stinger_sound = 'sound/ambience/antag/ayylien.ogg' var/datum/team/abductor_team/team var/sub_role var/outfit diff --git a/code/modules/antagonists/abductor/equipment/gear/abductor_items.dm b/code/modules/antagonists/abductor/equipment/gear/abductor_items.dm index 2fb5d52604531..d3f162f5fb55a 100644 --- a/code/modules/antagonists/abductor/equipment/gear/abductor_items.dm +++ b/code/modules/antagonists/abductor/equipment/gear/abductor_items.dm @@ -63,14 +63,8 @@ return ITEM_INTERACT_SUCCESS -/obj/item/abductor/gizmo/afterattack(atom/target, mob/user, proximity_flag, click_parameters) - . = ..() - // Proximity is already handled via the interact_with_atom proc - if(proximity_flag) - return - - . |= AFTERATTACK_PROCESSED_ITEM - interact_with_atom(target, user) +/obj/item/abductor/gizmo/ranged_interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + return interact_with_atom(interacting_with, user, modifiers) /obj/item/abductor/gizmo/proc/scan(atom/target, mob/living/user) if(ishuman(target)) @@ -117,14 +111,8 @@ radio_off(interacting_with, user) return ITEM_INTERACT_SUCCESS -/obj/item/abductor/silencer/afterattack(atom/target, mob/user, proximity_flag, click_parameters) - . = ..() - // Proximity is already handled via the interact_with_atom proc - if(proximity_flag) - return - - . |= AFTERATTACK_PROCESSED_ITEM - interact_with_atom(target, user) +/obj/item/abductor/silencer/ranged_interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + return interact_with_atom(interacting_with, user, modifiers) /obj/item/abductor/silencer/proc/radio_off(atom/target, mob/living/user) if( !(user in (viewers(7,target))) ) @@ -167,17 +155,19 @@ icon_state = "mind_device_message" to_chat(user, span_notice("You switch the device to [mode == MIND_DEVICE_MESSAGE? "TRANSMISSION": "COMMAND"] MODE")) -/obj/item/abductor/mind_device/afterattack(atom/target, mob/living/user, flag, params) - . = ..() - . |= AFTERATTACK_PROCESSED_ITEM +/obj/item/abductor/mind_device/ranged_interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + return interact_with_atom(interacting_with, user, modifiers) + +/obj/item/abductor/mind_device/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) if(!ScientistCheck(user)) - return + return ITEM_INTERACT_BLOCKING switch(mode) if(MIND_DEVICE_CONTROL) - mind_control(target, user) + mind_control(interacting_with, user) if(MIND_DEVICE_MESSAGE) - mind_message(target, user) + mind_message(interacting_with, user) + return ITEM_INTERACT_SUCCESS /obj/item/abductor/mind_device/proc/mind_control(atom/target, mob/living/user) if(iscarbon(target)) diff --git a/code/modules/antagonists/abductor/equipment/gland.dm b/code/modules/antagonists/abductor/equipment/gland.dm index 960851280e313..29ea5f1e78502 100644 --- a/code/modules/antagonists/abductor/equipment/gland.dm +++ b/code/modules/antagonists/abductor/equipment/gland.dm @@ -3,7 +3,7 @@ desc = "A nausea-inducing hunk of twisting flesh and metal." icon = 'icons/obj/antags/abductor.dmi' icon_state = "gland" - organ_flags = ORGAN_ROBOTIC // weird? + organ_flags = ORGAN_ROBOTIC | ORGAN_PROMINENT // weird? /// Shows name of the gland as well as a description of what it does upon examination by abductor scientists and observers. var/abductor_hint = "baseline placebo referencer" diff --git a/code/modules/antagonists/abductor/machinery/camera.dm b/code/modules/antagonists/abductor/machinery/camera.dm index bbf6ea2db3978..09a8fdefa315f 100644 --- a/code/modules/antagonists/abductor/machinery/camera.dm +++ b/code/modules/antagonists/abductor/machinery/camera.dm @@ -61,7 +61,11 @@ var/obj/machinery/abductor/pad/P = target var/area/target_area = get_area(remote_eye) - if(target_area.area_flags & ABDUCTOR_PROOF) + if((target_area.area_flags & NOTELEPORT) && !istype(target_area, /area/centcom/abductor_ship)) + to_chat(owner, span_warning("This area is too heavily shielded to safely transport to.")) + return + + if(istype(target_area, /area/station/ai_monitored)) to_chat(owner, span_warning("This area is too heavily shielded to safely transport to.")) return @@ -101,7 +105,11 @@ var/obj/machinery/abductor/pad/P = target var/area/target_area = get_area(remote_eye) - if(target_area.area_flags & ABDUCTOR_PROOF) + if((target_area.area_flags & NOTELEPORT) && !istype(target_area, /area/centcom/abductor_ship)) + to_chat(owner, span_warning("This area is too heavily shielded to safely transport to.")) + return + + if(istype(target_area, /area/station/ai_monitored)) to_chat(owner, span_warning("This area is too heavily shielded to safely transport to.")) return diff --git a/code/modules/antagonists/abductor/machinery/experiment.dm b/code/modules/antagonists/abductor/machinery/experiment.dm index 711923daa442f..a549171b66150 100644 --- a/code/modules/antagonists/abductor/machinery/experiment.dm +++ b/code/modules/antagonists/abductor/machinery/experiment.dm @@ -5,6 +5,8 @@ icon_state = "experiment-open" density = FALSE state_open = TRUE + interaction_flags_mouse_drop = NEED_DEXTERITY + var/points = 0 var/credits = 0 var/list/history @@ -21,10 +23,8 @@ console = null return ..() -/obj/machinery/abductor/experiment/MouseDrop_T(mob/target, mob/user) - if(user.stat != CONSCIOUS || HAS_TRAIT(user, TRAIT_UI_BLOCKED) || !Adjacent(user) || !target.Adjacent(user) || !ishuman(target)) - return - if(isabductor(target)) +/obj/machinery/abductor/experiment/mouse_drop_receive(mob/target, mob/user, params) + if(!ishuman(target) || isabductor(target)) return close_machine(target) diff --git a/code/modules/antagonists/ashwalker/ashwalker.dm b/code/modules/antagonists/ashwalker/ashwalker.dm index 7caa0d0a2fb0b..827d929b0fbb5 100644 --- a/code/modules/antagonists/ashwalker/ashwalker.dm +++ b/code/modules/antagonists/ashwalker/ashwalker.dm @@ -28,10 +28,14 @@ . = ..() RegisterSignal(owner.current, COMSIG_MOB_EXAMINATE, PROC_REF(on_examinate)) owner.teach_crafting_recipe(/datum/crafting_recipe/skeleton_key) + if(FACTION_NEUTRAL in owner.current.faction) + owner.current.faction.Remove(FACTION_NEUTRAL) // ashwalkers aren't neutral; they're ashwalker-aligned /datum/antagonist/ashwalker/on_removal() . = ..() UnregisterSignal(owner.current, COMSIG_MOB_EXAMINATE) + if(!(FACTION_NEUTRAL in owner.current.faction)) + owner.current.faction.Add(FACTION_NEUTRAL) /datum/antagonist/ashwalker/proc/on_examinate(datum/source, atom/A) SIGNAL_HANDLER diff --git a/code/modules/antagonists/battlecruiser/battlecruiser.dm b/code/modules/antagonists/battlecruiser/battlecruiser.dm index 8560300698f80..bcc2fc963309a 100644 --- a/code/modules/antagonists/battlecruiser/battlecruiser.dm +++ b/code/modules/antagonists/battlecruiser/battlecruiser.dm @@ -20,6 +20,7 @@ antag_hud_name = "battlecruiser_crew" antagpanel_category = ANTAG_GROUP_SYNDICATE job_rank = ROLE_BATTLECRUISER_CREW + stinger_sound = 'sound/ambience/antag/ops.ogg' /// Team to place the crewmember on. var/datum/team/battlecruiser/battlecruiser_team @@ -27,7 +28,7 @@ return battlecruiser_team /datum/antagonist/battlecruiser/greet() - owner.current.playsound_local(get_turf(owner.current), 'sound/ambience/antag/ops.ogg',100,0, use_reverb = FALSE) + play_stinger() to_chat(owner, span_big("You are a [name]!")) owner.announce_objectives() diff --git a/code/modules/antagonists/blob/blob_antag.dm b/code/modules/antagonists/blob/blob_antag.dm index 07ca14586e1f5..9cad238bb0011 100644 --- a/code/modules/antagonists/blob/blob_antag.dm +++ b/code/modules/antagonists/blob/blob_antag.dm @@ -6,6 +6,7 @@ show_in_antagpanel = FALSE job_rank = ROLE_BLOB ui_name = "AntagInfoBlob" + stinger_sound = 'sound/ambience/antag/blobalert.ogg' /// Action to release a blob infection var/datum/action/innate/blobpop/pop_action /// Initial points for a human blob @@ -31,8 +32,6 @@ else has_already_popped = TRUE - owner.current.playsound_local(get_turf(owner.current), 'sound/ambience/antag/blobalert.ogg', 100, FALSE, pressure_affected = FALSE, use_reverb = FALSE) - /datum/antagonist/blob/on_gain() create_objectives() . = ..() diff --git a/code/modules/antagonists/blob/overmind.dm b/code/modules/antagonists/blob/overmind.dm index 929a3b5c4ffd4..ea6706f96e999 100644 --- a/code/modules/antagonists/blob/overmind.dm +++ b/code/modules/antagonists/blob/overmind.dm @@ -12,7 +12,7 @@ GLOBAL_LIST_EMPTY(blob_nodes) icon = 'icons/mob/silicon/cameramob.dmi' icon_state = "marker" mouse_opacity = MOUSE_OPACITY_ICON - move_on_shuttle = 1 + move_on_shuttle = TRUE invisibility = INVISIBILITY_OBSERVER layer = FLY_LAYER plane = ABOVE_GAME_PLANE @@ -87,7 +87,7 @@ GLOBAL_LIST_EMPTY(blob_nodes) break else // no blob starts so look for an alternate for(var/i in 1 to 16) - var/turf/picked_safe = find_safe_turf() + var/turf/picked_safe = get_safe_random_station_turf() if(is_valid_turf(picked_safe)) T = picked_safe break diff --git a/code/modules/antagonists/brother/brother.dm b/code/modules/antagonists/brother/brother.dm index 49d0ab4ad2300..b62b18a02aedf 100644 --- a/code/modules/antagonists/brother/brother.dm +++ b/code/modules/antagonists/brother/brother.dm @@ -9,6 +9,7 @@ suicide_cry = "FOR MY BROTHER!!" antag_moodlet = /datum/mood_event/focused hardcore_random_bonus = TRUE + stinger_sound = 'sound/ambience/antag/tatoralert.ogg' VAR_PRIVATE datum/team/brother_team/team @@ -27,28 +28,43 @@ owner.special_role = special_role finalize_brother() - var/is_first_brother = team.members.len == 1 - team.brothers_left -= 1 + if (team.brothers_left <= 0) + return ..() + + var/mob/living/carbon/carbon_owner = owner.current + if (!istype(carbon_owner)) + return ..() - if (is_first_brother || team.brothers_left > 0) - var/mob/living/carbon/carbon_owner = owner.current - if (istype(carbon_owner)) - carbon_owner.equip_conspicuous_item(new /obj/item/assembly/flash) - carbon_owner.AddComponentFrom(REF(src), /datum/component/can_flash_from_behind) - RegisterSignal(carbon_owner, COMSIG_MOB_SUCCESSFUL_FLASHED_CARBON, PROC_REF(on_mob_successful_flashed_carbon)) + grant_conversion_skills() + carbon_owner.equip_conspicuous_item(new /obj/item/assembly/flash) - if (!is_first_brother) - to_chat(carbon_owner, span_boldwarning("The Syndicate have higher expectations from you than others. They have granted you an extra flash to convert one other person.")) + var/is_first_brother = team.members.len == 1 + if (!is_first_brother) + to_chat(carbon_owner, span_boldwarning("The Syndicate have higher expectations from you than others. They have granted you an extra flash to convert one other person.")) return ..() /datum/antagonist/brother/on_removal() owner.special_role = null - owner.RemoveComponentSource(REF(src), /datum/component/can_flash_from_behind) - UnregisterSignal(owner, COMSIG_MOB_SUCCESSFUL_FLASHED_CARBON) - + remove_conversion_skills() return ..() +/// Give us the ability to add another brother +/datum/antagonist/brother/proc/grant_conversion_skills() + var/mob/living/carbon/carbon_owner = owner.current + if (!istype(carbon_owner)) + return + carbon_owner.AddComponentFrom(REF(src), /datum/component/can_flash_from_behind) + RegisterSignal(carbon_owner, COMSIG_MOB_SUCCESSFUL_FLASHED_CARBON, PROC_REF(on_mob_successful_flashed_carbon)) + +/// Take away the ability to add more brothers +/datum/antagonist/brother/proc/remove_conversion_skills() + if (isnull(owner.current)) + return + var/mob/living/carbon/carbon_owner = owner.current + carbon_owner.RemoveComponentSource(REF(src), /datum/component/can_flash_from_behind) + UnregisterSignal(carbon_owner, COMSIG_MOB_SUCCESSFUL_FLASHED_CARBON) + /datum/antagonist/brother/proc/on_mob_successful_flashed_carbon(mob/living/source, mob/living/carbon/flashed, obj/item/assembly/flash/flash) SIGNAL_HANDLER @@ -95,11 +111,19 @@ ) flashed.balloon_alert(source, "converted") - UnregisterSignal(source, COMSIG_MOB_SUCCESSFUL_FLASHED_CARBON) - source.RemoveComponentSource(REF(src), /datum/component/can_flash_from_behind) - /datum/antagonist/brother/antag_panel_data() - return "Conspirators : [get_brother_names()]" + return "Conspirators : [get_brother_names()] | Remaining: [team.brothers_left]" + +/datum/antagonist/brother/get_admin_commands() + . = ..() + .["Adjust Remaining Conversions"] = CALLBACK(src, PROC_REF(update_recruitments_remaining)) + +/// Add or remove the potential to put more bros in here +/datum/antagonist/brother/proc/update_recruitments_remaining(mob/admin) + var/new_count = tgui_input_number(admin, "How many more people should be able to be recruited?", "Adjust Conversions Remaining", default = 1, min_value = 0) + if (isnull(new_count)) + return + team.set_brothers_left(new_count) /datum/antagonist/brother/get_preview_icon() var/mob/living/carbon/human/dummy/consistent/brother1 = new @@ -131,6 +155,9 @@ /datum/antagonist/brother/proc/get_brother_names() var/list/brothers = team.members - owner + if (!length(brothers)) + return "none" + var/brother_text = "" for(var/i = 1 to brothers.len) var/datum/mind/M = brothers[i] @@ -146,7 +173,7 @@ owner.announce_objectives() /datum/antagonist/brother/proc/finalize_brother() - owner.current.playsound_local(get_turf(owner.current), 'sound/ambience/antag/tatoralert.ogg', 100, FALSE, pressure_affected = FALSE, use_reverb = FALSE) + play_stinger() team.update_name() /datum/antagonist/brother/admin_add(datum/mind/new_owner,mob/admin) @@ -167,13 +194,15 @@ member_name = "blood brother" var/brothers_left = 2 -/datum/team/brother_team/New() +/datum/team/brother_team/New(starting_members) . = ..() if (prob(10)) brothers_left += 1 /datum/team/brother_team/add_member(datum/mind/new_member) . = ..() + if (!length(objectives)) + forge_brother_objectives() if (!new_member.has_antag_datum(/datum/antagonist/brother)) add_brother(new_member.current) @@ -193,11 +222,17 @@ if (isnull(new_brother) || isnull(new_brother.mind) || !GET_CLIENT(new_brother) || new_brother.mind.has_antag_datum(/datum/antagonist/brother)) return FALSE + set_brothers_left(brothers_left - 1) for (var/datum/mind/brother_mind as anything in members) if (brother_mind == new_brother.mind) continue + to_chat(brother_mind, span_notice("[span_bold("[new_brother.real_name]")] has been converted to aid you as your brother!")) + if (brothers_left == 0) + to_chat(brother_mind, span_notice("You cannot recruit any more brothers.")) + new_brother.mind.add_antag_datum(/datum/antagonist/brother, src) + return TRUE /datum/team/brother_team/proc/update_name() @@ -217,7 +252,7 @@ add_objective(new /datum/objective/convert_brother) var/is_hijacker = prob(10) - for(var/i = 1 to max(1, CONFIG_GET(number/brother_objectives_amount) + (members.len > 2) - is_hijacker)) + for(var/i = 1 to max(1, CONFIG_GET(number/brother_objectives_amount) + (brothers_left > 2) - is_hijacker)) forge_single_objective() if(is_hijacker) if(!locate(/datum/objective/hijack) in objectives) @@ -236,6 +271,22 @@ else add_objective(new /datum/objective/steal, needs_target = TRUE) +/// Control how many more people we can recruit +/datum/team/brother_team/proc/set_brothers_left(remaining_brothers) + if (brothers_left == remaining_brothers) + return + + if (brothers_left == 0 && remaining_brothers > 0) + for (var/datum/mind/brother_mind as anything in members) + var/datum/antagonist/brother/brother_datum = brother_mind.has_antag_datum(/datum/antagonist/brother) + brother_datum?.grant_conversion_skills() + + else if (brothers_left > 0 && remaining_brothers <= 0) + for (var/datum/mind/brother_mind as anything in members) + var/datum/antagonist/brother/brother_datum = brother_mind.has_antag_datum(/datum/antagonist/brother) + brother_datum?.remove_conversion_skills() + brothers_left = remaining_brothers + /datum/objective/convert_brother name = "convert brother" explanation_text = "Convert a brainwashable person using your flash on them directly. Any handheld flash will work if you lose or break your starting flash." diff --git a/code/modules/antagonists/changeling/changeling.dm b/code/modules/antagonists/changeling/changeling.dm index eb3714203a8d0..20e1c94ee9a60 100644 --- a/code/modules/antagonists/changeling/changeling.dm +++ b/code/modules/antagonists/changeling/changeling.dm @@ -14,6 +14,7 @@ can_assign_self_objectives = TRUE default_custom_objective = "Consume the station's most valuable genomes." hardcore_random_bonus = TRUE + stinger_sound = 'sound/ambience/antag/ling_alert.ogg' /// Whether to give this changeling objectives or not var/give_objectives = TRUE /// Weather we assign objectives which compete with other lings @@ -39,7 +40,7 @@ /// The max chemical storage the changeling currently has. var/total_chem_storage = 75 /// The chemical recharge rate per life tick. - var/chem_recharge_rate = 0.5 + var/chem_recharge_rate = 1 /// Any additional modifiers triggered by changelings that modify the chem_recharge_rate. var/chem_recharge_slowdown = 0 /// The range this ling can sting things. @@ -127,7 +128,6 @@ if(give_objectives) forge_objectives() owner.current.get_language_holder().omnitongue = TRUE - owner.current.playsound_local(get_turf(owner.current), 'sound/ambience/antag/ling_alert.ogg', 100, FALSE, pressure_affected = FALSE, use_reverb = FALSE) return ..() /datum/antagonist/changeling/apply_innate_effects(mob/living/mob_override) @@ -262,14 +262,18 @@ SIGNAL_HANDLER var/delta_time = DELTA_WORLD_TIME(SSmobs) + var/mob/living/living_owner = owner.current // If dead, we only regenerate up to half chem storage. if(owner.current.stat == DEAD) adjust_chemicals((chem_recharge_rate - chem_recharge_slowdown) * delta_time, total_chem_storage * 0.5) - // If we're not dead - we go up to the full chem cap. + // If we're not dead and not on fire - we go up to the full chem cap at normal speed. If on fire we only regenerate at 1/4th the normal speed else - adjust_chemicals((chem_recharge_rate - chem_recharge_slowdown) * delta_time) + if(living_owner.fire_stacks && living_owner.on_fire) + adjust_chemicals((chem_recharge_rate - 0.75) * delta_time) + else + adjust_chemicals((chem_recharge_rate - chem_recharge_slowdown) * delta_time) /** * Signal proc for [COMSIG_LIVING_POST_FULLY_HEAL] @@ -526,6 +530,7 @@ new_profile.age = target.age new_profile.physique = target.physique + new_profile.athletics_level = target.mind?.get_skill_level(/datum/skill/athletics) || SKILL_LEVEL_NONE // Grab the target's quirks. for(var/datum/quirk/target_quirk as anything in target.quirks) @@ -537,10 +542,6 @@ new_profile.undershirt = target.undershirt new_profile.socks = target.socks - // Hair and facial hair gradients, alongside their colours. - new_profile.grad_style = LAZYLISTDUPLICATE(target.grad_style) - new_profile.grad_color = LAZYLISTDUPLICATE(target.grad_color) - // Grab skillchips they have new_profile.skillchips = target.clone_skillchip_list(TRUE) @@ -766,8 +767,7 @@ user.socks = chosen_profile.socks user.age = chosen_profile.age user.physique = chosen_profile.physique - user.grad_style = LAZYLISTDUPLICATE(chosen_profile.grad_style) - user.grad_color = LAZYLISTDUPLICATE(chosen_profile.grad_color) + user.mind?.set_level(/datum/skill/athletics, chosen_profile.athletics_level, silent = TRUE) user.voice = chosen_profile.voice user.voice_filter = chosen_profile.voice_filter @@ -913,12 +913,10 @@ var/age /// The body type of the profile source. var/physique + /// The athleticism of the profile source. + var/athletics_level /// The quirks of the profile source. var/list/quirks = list() - /// The hair and facial hair gradient styles of the profile source. - var/list/grad_style = list("None", "None") - /// The hair and facial hair gradient colours of the profile source. - var/list/grad_color = list(null, null) /// The TTS voice of the profile source var/voice /// The TTS filter of the profile filter @@ -958,9 +956,8 @@ new_profile.id_icon = id_icon new_profile.age = age new_profile.physique = physique + new_profile.athletics_level = athletics_level new_profile.quirks = quirks.Copy() - new_profile.grad_style = LAZYLISTDUPLICATE(grad_style) - new_profile.grad_color = LAZYLISTDUPLICATE(grad_color) new_profile.voice = voice new_profile.voice_filter = voice_filter @@ -1030,6 +1027,7 @@ total_chem_storage = 50 /datum/antagonist/changeling/headslug/greet() + play_stinger() to_chat(owner, span_boldannounce("You are a fresh changeling birthed from a headslug! \ You aren't as strong as a normal changeling, as you are newly born.")) @@ -1042,6 +1040,7 @@ return finish_preview_icon(final_icon) /datum/antagonist/changeling/space/greet() + play_stinger() to_chat(src, span_changeling("Our mind stirs to life, from the depths of an endless slumber...")) /datum/outfit/changeling diff --git a/code/modules/antagonists/changeling/changeling_power.dm b/code/modules/antagonists/changeling/changeling_power.dm index 23b4f9548c424..d06d8fe91735a 100644 --- a/code/modules/antagonists/changeling/changeling_power.dm +++ b/code/modules/antagonists/changeling/changeling_power.dm @@ -32,6 +32,8 @@ var/ignores_fakedeath = FALSE /// used by a few powers that toggle var/active = FALSE + /// Does this ability stop working if you are burning? + var/disabled_by_fire = TRUE /* changeling code now relies on on_purchase to grant powers. @@ -61,6 +63,9 @@ the same goes for Remove(). if you override Remove(), call parent or else your p /datum/action/changeling/proc/try_to_sting(mob/living/user, mob/living/target) if(!can_sting(user, target)) return FALSE + if(disabled_by_fire && user.fire_stacks && user.on_fire) + user.balloon_alert(user, "on fire!") + return FALSE var/datum/antagonist/changeling/changeling = IS_CHANGELING(user) if(sting_action(user, target)) sting_feedback(user, target) diff --git a/code/modules/antagonists/changeling/powers/adrenaline.dm b/code/modules/antagonists/changeling/powers/adrenaline.dm index 5f96508d690c2..3b6a550b18b0f 100644 --- a/code/modules/antagonists/changeling/powers/adrenaline.dm +++ b/code/modules/antagonists/changeling/powers/adrenaline.dm @@ -1,19 +1,60 @@ /datum/action/changeling/adrenaline - name = "Adrenaline Sacs" - desc = "We evolve additional sacs of adrenaline throughout our body. Costs 30 chemicals." - helptext = "Removes all stuns instantly and adds a short-term reduction in further stuns. Can be used while unconscious. Continued use poisons the body." + name = "Repurposed Glands" + desc = "We shift almost all available muscle mass from the arms to the legs, disabling the former but making us unable to be downed for 20 seconds. Costs 25 chemicals." + helptext = "Disables your arms and retracts bioweaponry, but regenerates your legs, grants you speed, and wakes you up from any stun." button_icon_state = "adrenaline" - chemical_cost = 30 + chemical_cost = 25 // similar cost to biodegrade, as they serve similar purposes dna_cost = 2 - req_human = TRUE - req_stat = UNCONSCIOUS + req_human = FALSE + req_stat = CONSCIOUS + disabled_by_fire = FALSE + +/datum/action/changeling/adrenaline/can_sting(mob/living/user, mob/living/target) + . = ..() + if(!.) + return FALSE + + if(HAS_TRAIT_FROM(user, TRAIT_IGNOREDAMAGESLOWDOWN, CHANGELING_TRAIT)) + user.balloon_alert(user, "already boosted!") + return FALSE + + return . //Recover from stuns. -/datum/action/changeling/adrenaline/sting_action(mob/living/user) +/datum/action/changeling/adrenaline/sting_action(mob/living/carbon/user) ..() - to_chat(user, span_notice("Energy rushes through us.")) - user.SetKnockdown(0) - user.set_resting(FALSE) + to_chat(user, span_changeling("Our arms feel weak, but our legs become unstoppable!")) + + for(var/datum/action/changeling/weapon/weapon_ability in user.actions) + weapon_ability.unequip_held(user) + + // Destroy legcuffs with our IMMENSE LEG STRENGTH. + if(istype(user.legcuffed)) + user.visible_message( + span_warning("[user]'s legs suddenly rip [user.legcuffed] apart!"), + span_warning("We rip apart our leg restraints!"), + ) + qdel(user.legcuffed) + + // Regenerate our legs only. + var/our_leg_zones = (GLOB.all_body_zones - GLOB.leg_zones) + user.regenerate_limbs(excluded_zones = our_leg_zones) // why is this exclusive rather than inclusive + + user.add_traits(list(TRAIT_IGNOREDAMAGESLOWDOWN, TRAIT_PARALYSIS_L_ARM, TRAIT_PARALYSIS_R_ARM), CHANGELING_TRAIT) + + // Revert above mob changes. + addtimer(CALLBACK(src, PROC_REF(unsting_action), user), 20 SECONDS, TIMER_UNIQUE|TIMER_OVERRIDE) + + // Get us standing up. + user.SetAllImmobility(0) + user.setStaminaLoss(0) + user.set_resting(FALSE, instant = TRUE) + + // Add fast reagents to go fast. user.reagents.add_reagent(/datum/reagent/medicine/changelingadrenaline, 4) //20 seconds - user.reagents.add_reagent(/datum/reagent/medicine/changelinghaste, 3) //6 seconds, for a really quick burst of speed + return TRUE + +/datum/action/changeling/adrenaline/proc/unsting_action(mob/living/user) + to_chat(user, span_changeling("The muscles in our limbs shift back to their usual places.")) + user.remove_traits(list(TRAIT_IGNOREDAMAGESLOWDOWN, TRAIT_PARALYSIS_L_ARM, TRAIT_PARALYSIS_R_ARM), CHANGELING_TRAIT) diff --git a/code/modules/antagonists/changeling/powers/biodegrade.dm b/code/modules/antagonists/changeling/powers/biodegrade.dm index 2b1753c27273a..8a5fae3bd8aed 100644 --- a/code/modules/antagonists/changeling/powers/biodegrade.dm +++ b/code/modules/antagonists/changeling/powers/biodegrade.dm @@ -6,6 +6,7 @@ chemical_cost = 30 //High cost to prevent spam dna_cost = 2 req_human = TRUE + disabled_by_fire = FALSE /datum/action/changeling/biodegrade/sting_action(mob/living/carbon/human/user) if(user.handcuffed) diff --git a/code/modules/antagonists/changeling/powers/defib_grasp.dm b/code/modules/antagonists/changeling/powers/defib_grasp.dm index 135b9b243f721..867a595e17dcd 100644 --- a/code/modules/antagonists/changeling/powers/defib_grasp.dm +++ b/code/modules/antagonists/changeling/powers/defib_grasp.dm @@ -6,6 +6,7 @@ while we are dead or in stasis. Will also stun cyborgs momentarily." owner_has_control = FALSE dna_cost = 0 + disabled_by_fire = FALSE /// Flags to pass to fully heal when we get zapped var/heal_flags = HEAL_DAMAGE|HEAL_BODY|HEAL_STATUS|HEAL_CC_STATUS diff --git a/code/modules/antagonists/changeling/powers/fakedeath.dm b/code/modules/antagonists/changeling/powers/fakedeath.dm index 75d4996b8b2d7..1dff58377fd4a 100644 --- a/code/modules/antagonists/changeling/powers/fakedeath.dm +++ b/code/modules/antagonists/changeling/powers/fakedeath.dm @@ -7,6 +7,7 @@ req_dna = 1 req_stat = DEAD ignores_fakedeath = TRUE + disabled_by_fire = FALSE /// How long it takes for revival to ready upon entering stasis. /// The changeling can opt to stay in fakedeath for longer, though. diff --git a/code/modules/antagonists/changeling/powers/headcrab.dm b/code/modules/antagonists/changeling/powers/headcrab.dm index 30970832df0a4..0b7668260d769 100644 --- a/code/modules/antagonists/changeling/powers/headcrab.dm +++ b/code/modules/antagonists/changeling/powers/headcrab.dm @@ -8,6 +8,7 @@ req_human = TRUE req_stat = DEAD ignores_fakedeath = TRUE + disabled_by_fire = FALSE /datum/action/changeling/headcrab/sting_action(mob/living/user) set waitfor = FALSE diff --git a/code/modules/antagonists/changeling/powers/mutations.dm b/code/modules/antagonists/changeling/powers/mutations.dm index af7348f7bf139..db261c29b5433 100644 --- a/code/modules/antagonists/changeling/powers/mutations.dm +++ b/code/modules/antagonists/changeling/powers/mutations.dm @@ -68,6 +68,9 @@ return ..() var/limb_regen = 0 + if(HAS_TRAIT_FROM_ONLY(user, TRAIT_PARALYSIS_L_ARM, CHANGELING_TRAIT) || HAS_TRAIT_FROM_ONLY(user, TRAIT_PARALYSIS_R_ARM, CHANGELING_TRAIT)) + user.balloon_alert(user, "not enough muscle!") // no cheesing repuprosed glands + return if(user.active_hand_index % 2 == 0) //we regen the arm before changing it into the weapon limb_regen = user.regenerate_limb(BODY_ZONE_R_ARM, 1) else @@ -215,17 +218,13 @@ effectiveness = 80, \ ) -/obj/item/melee/arm_blade/afterattack(atom/target, mob/user, proximity) - . = ..() - if(!proximity) - return +/obj/item/melee/arm_blade/afterattack(atom/target, mob/user, click_parameters) if(istype(target, /obj/structure/table)) - var/obj/structure/table/T = target - T.deconstruct(FALSE) + var/obj/smash = target + smash.deconstruct(FALSE) else if(istype(target, /obj/machinery/computer)) - var/obj/machinery/computer/C = target - C.attack_alien(user) //muh copypasta + target.attack_alien(user) //muh copypasta else if(istype(target, /obj/machinery/door/airlock)) var/obj/machinery/door/airlock/opening = target @@ -342,7 +341,7 @@ damage = 0 damage_type = BRUTE range = 8 - hitsound = 'sound/weapons/thudswoosh.ogg' + hitsound = 'sound/weapons/shove.ogg' var/chain var/obj/item/ammo_casing/magic/tentacle/source //the item that shot it ///Click params that were used to fire the tentacle shot diff --git a/code/modules/antagonists/changeling/powers/pheromone_receptors.dm b/code/modules/antagonists/changeling/powers/pheromone_receptors.dm index 0e468159a3c7a..7b9eee1bfe94a 100644 --- a/code/modules/antagonists/changeling/powers/pheromone_receptors.dm +++ b/code/modules/antagonists/changeling/powers/pheromone_receptors.dm @@ -55,7 +55,7 @@ var/datum/antagonist/changeling/antag_datum = IS_CHANGELING(C) if(istype(antag_datum)) var/their_loc = get_turf(C) - var/distance = get_dist_euclidian(my_loc, their_loc) + var/distance = get_dist_euclidean(my_loc, their_loc) if (distance < CHANGELING_PHEROMONE_MAX_DISTANCE) changelings[C] = (CHANGELING_PHEROMONE_MAX_DISTANCE ** 2) - (distance ** 2) diff --git a/code/modules/antagonists/changeling/powers/shriek.dm b/code/modules/antagonists/changeling/powers/shriek.dm index aa204d89a166e..cfbcc7b64ec27 100644 --- a/code/modules/antagonists/changeling/powers/shriek.dm +++ b/code/modules/antagonists/changeling/powers/shriek.dm @@ -6,6 +6,7 @@ chemical_cost = 20 dna_cost = 1 req_human = TRUE + disabled_by_fire = FALSE //A flashy ability, good for crowd control and sowing chaos. /datum/action/changeling/resonant_shriek/sting_action(mob/user) @@ -41,6 +42,7 @@ button_icon_state = "dissonant_shriek" chemical_cost = 20 dna_cost = 1 + disabled_by_fire = FALSE /datum/action/changeling/dissonant_shriek/sting_action(mob/user) ..() diff --git a/code/modules/antagonists/changeling/powers/strained_muscles.dm b/code/modules/antagonists/changeling/powers/strained_muscles.dm index 19c4458a388bc..3ea59f5df089b 100644 --- a/code/modules/antagonists/changeling/powers/strained_muscles.dm +++ b/code/modules/antagonists/changeling/powers/strained_muscles.dm @@ -11,6 +11,7 @@ req_human = TRUE var/stacks = 0 //Increments every 5 seconds; damage increases over time active = FALSE //Whether or not you are a hedgehog + disabled_by_fire = FALSE /datum/action/changeling/strained_muscles/sting_action(mob/living/carbon/user) ..() diff --git a/code/modules/antagonists/changeling/powers/tiny_prick.dm b/code/modules/antagonists/changeling/powers/tiny_prick.dm index ea172fee0134b..c8bbee26481a6 100644 --- a/code/modules/antagonists/changeling/powers/tiny_prick.dm +++ b/code/modules/antagonists/changeling/powers/tiny_prick.dm @@ -77,6 +77,8 @@ VAR_FINAL/datum/changeling_profile/selected_dna /// Duration of the sting var/sting_duration = 8 MINUTES + /// Set this to false via VV to allow golem, plasmaman, or monkey changelings to turn other people into golems, plasmamen, or monkeys + var/verify_valid_species = TRUE /datum/action/changeling/sting/transformation/Grant(mob/grant_to) . = ..() @@ -99,6 +101,9 @@ return if(!new_selected_dna || changeling.chosen_sting || selected_dna) // selected other sting or other DNA while sleeping return + if(verify_valid_species && (TRAIT_NO_DNA_COPY in new_selected_dna.dna.species.inherent_traits)) + user.balloon_alert(user, "dna incompatible!") + return selected_dna = new_selected_dna return ..() diff --git a/code/modules/antagonists/changeling/powers/transform.dm b/code/modules/antagonists/changeling/powers/transform.dm index 530eca763223b..1e1ef9e65d8e2 100644 --- a/code/modules/antagonists/changeling/powers/transform.dm +++ b/code/modules/antagonists/changeling/powers/transform.dm @@ -19,6 +19,9 @@ return . = ..() +/obj/item/clothing/glasses/changeling/attack_paw(mob/user, list/modifiers) + attack_hand(user, modifiers) + /obj/item/clothing/under/changeling name = "flesh" item_flags = DROPDEL @@ -31,6 +34,9 @@ return . = ..() +/obj/item/clothing/under/changeling/attack_paw(mob/user, list/modifiers) + attack_hand(user, modifiers) + /obj/item/clothing/suit/changeling name = "flesh" allowed = list(/obj/item/changeling) @@ -44,6 +50,9 @@ return . = ..() +/obj/item/clothing/suit/changeling/attack_paw(mob/user, list/modifiers) + attack_hand(user, modifiers) + /obj/item/clothing/head/changeling name = "flesh" icon_state = null @@ -57,6 +66,9 @@ return . = ..() +/obj/item/clothing/head/changeling/attack_paw(mob/user, list/modifiers) + attack_hand(user, modifiers) + /obj/item/clothing/shoes/changeling name = "flesh" item_flags = DROPDEL @@ -69,6 +81,9 @@ return . = ..() +/obj/item/clothing/shoes/changeling/attack_paw(mob/user, list/modifiers) + attack_hand(user, modifiers) + /obj/item/clothing/gloves/changeling name = "flesh" item_flags = DROPDEL @@ -81,6 +96,9 @@ return . = ..() +/obj/item/clothing/gloves/changeling/attack_paw(mob/user, list/modifiers) + attack_hand(user, modifiers) + /obj/item/clothing/mask/changeling name = "flesh" item_flags = DROPDEL @@ -93,6 +111,9 @@ return . = ..() +/obj/item/clothing/mask/changeling/attack_paw(mob/user, list/modifiers) + attack_hand(user, modifiers) + /obj/item/changeling name = "flesh" slot_flags = ALL @@ -106,6 +127,9 @@ return . = ..() +/obj/item/changeling/attack_paw(mob/user, list/modifiers) + attack_hand(user, modifiers) + /obj/item/changeling/id slot_flags = ITEM_SLOT_ID /// Cached flat icon of the ID diff --git a/code/modules/antagonists/cult/blood_magic.dm b/code/modules/antagonists/cult/blood_magic.dm index fa144811fb385..eb55138a4483a 100644 --- a/code/modules/antagonists/cult/blood_magic.dm +++ b/code/modules/antagonists/cult/blood_magic.dm @@ -12,6 +12,8 @@ default_button_position = DEFAULT_BLOODSPELLS var/list/spells = list() var/channeling = FALSE + /// If the magic has been enhanced somehow, likely due to a crimson focus. + var/magic_enhanced = FALSE /datum/action/innate/cult/blood_magic/Remove() for(var/X in spells) @@ -29,7 +31,7 @@ var/atom/movable/screen/movable/action_button/button = viewers[hud] var/position = screen_loc_to_offset(button.screen_loc) var/list/position_list = list() - for(var/possible_position in 1 to MAX_BLOODCHARGE) + for(var/possible_position in 1 to magic_enhanced ? ENHANCED_BLOODCHARGE : MAX_BLOODCHARGE) position_list += possible_position for(var/datum/action/innate/cult/blood_spell/blood_spell in spells) if(blood_spell.positioned) @@ -50,10 +52,10 @@ rune = TRUE break if(rune) - limit = MAX_BLOODCHARGE + limit = magic_enhanced ? ENHANCED_BLOODCHARGE : MAX_BLOODCHARGE if(length(spells) >= limit) if(rune) - to_chat(owner, span_cult_italic("You cannot store more than [MAX_BLOODCHARGE] spells. Pick a spell to remove.")) + to_chat(owner, span_cult_italic("You cannot store more than [limit] spells. Pick a spell to remove.")) else to_chat(owner, span_cult_bold_italic("You cannot store more than [RUNELESS_MAX_BLOODCHARGE] spells without an empowering rune! Pick a spell to remove.")) var/nullify_spell = tgui_input_list(owner, "Spell to remove", "Current Spells", spells) @@ -86,10 +88,15 @@ else to_chat(owner, span_cult_italic("You are already invoking blood magic!")) return - if(do_after(owner, 100 - rune*60, target = owner)) + var/spell_carving_timer = 10 SECONDS + if(rune) + spell_carving_timer = 4 SECONDS + if(magic_enhanced) + spell_carving_timer *= 0.5 + if(do_after(owner, spell_carving_timer, target = owner)) if(ishuman(owner)) var/mob/living/carbon/human/human_owner = owner - human_owner.bleed(40 - rune*32) + human_owner.bleed(rune ? 8 : 40) var/datum/action/innate/cult/blood_spell/new_spell = new BS(owner.mind) new_spell.Grant(owner, src) spells += new_spell @@ -153,7 +160,7 @@ //Cult Blood Spells /datum/action/innate/cult/blood_spell/stun name = "Stun" - desc = "Empowers your hand to stun and mute a victim on contact." + desc = "Empowers your hand to stun and mute a victim on contact. Gets weaker depending on how many have joined the Cult." button_icon_state = "hand" magic_path = "/obj/item/melee/blood_magic/stun" health_cost = 10 @@ -255,7 +262,7 @@ clicked_on.set_hallucinations_if_lower(240 SECONDS) SEND_SOUND(caller, sound('sound/effects/ghost.ogg', FALSE, TRUE, 50)) - var/image/sparkle_image = image('icons/effects/cult/effects.dmi', clicked_on, "bloodsparkles", ABOVE_MOB_LAYER) + var/image/sparkle_image = image('icons/effects/cult.dmi', clicked_on, "bloodsparkles", ABOVE_MOB_LAYER) clicked_on.add_alt_appearance(/datum/atom_hud/alternate_appearance/basic/cult, "cult_apoc", sparkle_image, NONE) addtimer(CALLBACK(clicked_on, TYPE_PROC_REF(/atom/, remove_alt_appearance), "cult_apoc", TRUE), 4 MINUTES, TIMER_OVERRIDE|TIMER_UNIQUE) @@ -376,20 +383,32 @@ return ..() /obj/item/melee/blood_magic/attack_self(mob/living/user) - afterattack(user, user, TRUE) + cast_spell(user, user) /obj/item/melee/blood_magic/attack(mob/living/M, mob/living/carbon/user) - if(!iscarbon(user) || !IS_CULTIST(user)) - uses = 0 - qdel(src) - return log_combat(user, M, "used a cult spell on", source.name, "") SSblackbox.record_feedback("tally", "cult_spell_invoke", 1, "[name]") M.lastattacker = user.real_name M.lastattackerckey = user.ckey + user.do_attack_animation(M) + cast_spell(M, user) -/obj/item/melee/blood_magic/afterattack(atom/target, mob/living/carbon/user, proximity) - . = ..() +/obj/item/melee/blood_magic/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + if(!iscarbon(user) || !IS_CULTIST(user)) + uses = 0 + qdel(src) + return ITEM_INTERACT_BLOCKING + + if(isliving(interacting_with)) + return ITEM_INTERACT_SKIP_TO_ATTACK + + user.do_attack_animation(interacting_with) + log_combat(user, interacting_with, "used a cult spell on", source.name, "") + SSblackbox.record_feedback("tally", "cult_spell_invoke", 1, "[name]") + cast_spell(interacting_with, user) + return ITEM_INTERACT_SUCCESS + +/obj/item/melee/blood_magic/proc/cast_spell(atom/target, mob/living/carbon/user) if(invocation) user.whisper(invocation, language = /datum/language/common) if(health_cost) @@ -411,38 +430,57 @@ color = RUNE_COLOR_RED invocation = "Fuu ma'jin!" -/obj/item/melee/blood_magic/stun/afterattack(mob/living/target, mob/living/carbon/user, proximity) - if(!isliving(target) || !proximity) +/obj/item/melee/blood_magic/stun/cast_spell(mob/living/target, mob/living/carbon/user) + if(!istype(target) || IS_CULTIST(target)) return - if(IS_CULTIST(target)) - return - if(IS_CULTIST(user)) - user.visible_message(span_warning("[user] holds up [user.p_their()] hand, which explodes in a flash of red light!"), \ - span_cult_italic("You attempt to stun [target] with the spell!")) - user.mob_light(range = 1.1, power = 2, color = LIGHT_COLOR_BLOOD_MAGIC, duration = 0.2 SECONDS) - if(IS_HERETIC(target)) - to_chat(user, span_warning("Some force greater than you intervenes! [target] is protected by the Forgotten Gods!")) - to_chat(target, span_warning("You are protected by your faith to the Forgotten Gods.")) - var/old_color = target.color - target.color = rgb(0, 128, 0) - animate(target, color = old_color, time = 1 SECONDS, easing = EASE_IN) - else if(target.can_block_magic()) - to_chat(user, span_warning("The spell had no effect!")) - else - to_chat(user, span_cult_italic("In a brilliant flash of red, [target] falls to the ground!")) - target.Paralyze(16 SECONDS) - target.flash_act(1, TRUE) - if(issilicon(target)) - var/mob/living/silicon/silicon_target = target - silicon_target.emp_act(EMP_HEAVY) - else if(iscarbon(target)) - var/mob/living/carbon/carbon_target = target - carbon_target.adjust_silence(12 SECONDS) - carbon_target.adjust_stutter(30 SECONDS) - carbon_target.adjust_timed_status_effect(30 SECONDS, /datum/status_effect/speech/slurring/cult) - carbon_target.set_jitter_if_lower(30 SECONDS) - uses-- - ..() + var/datum/antagonist/cult/cultist = IS_CULTIST(user) + var/datum/team/cult/cult_team = cultist.get_team() + var/effect_coef = 1 + if(cult_team.cult_ascendent) + effect_coef = 0.1 + else if(cult_team.cult_risen) + effect_coef = 0.4 + user.visible_message( + span_warning("[user] holds up [user.p_their()] hand, which explodes in a flash of red light!"), + span_cult_italic("You attempt to stun [target] with the spell!"), + visible_message_flags = ALWAYS_SHOW_SELF_MESSAGE, + ) + user.mob_light(range = 1.1, power = 2, color = LIGHT_COLOR_BLOOD_MAGIC, duration = 0.2 SECONDS) + // Heretics are momentarily disoriented by the stunning aura. Enough for both parties to go 'oh shit' but only a mild combat ability. + // Heretics have an identical effect on their grasp. The cultist's worse spell preparation is offset by their extra gear and teammates. + if(IS_HERETIC(target)) + target.AdjustKnockdown(0.5 SECONDS) + target.adjust_confusion_up_to(1.5 SECONDS, 3 SECONDS) + target.adjust_dizzy_up_to(1.5 SECONDS, 3 SECONDS) + ADD_TRAIT(target, TRAIT_NO_SIDE_KICK, REF(src)) // We don't want this to be a good stunning tool, just minor disorientation + addtimer(TRAIT_CALLBACK_REMOVE(target, TRAIT_NO_SIDE_KICK, REF(src)), 1 SECONDS) + + var/old_color = target.color + target.color = COLOR_HERETIC_GREEN + animate(target, color = old_color, time = 4 SECONDS, easing = EASE_IN) + target.mob_light(range = 1.5, power = 2.5, color = COLOR_HERETIC_GREEN, duration = 0.5 SECONDS) + playsound(target, 'sound/magic/magic_block_mind.ogg', 150, TRUE) // insanely quiet + + to_chat(user, span_warning("An eldritch force intervenes as you touch [target], absorbing most of the effects!")) + to_chat(target, span_warning("As [user] touches you with vile magicks, the Mansus absorbs most of the effects!")) + target.balloon_alert_to_viewers("absorbed!") + else if(target.can_block_magic()) + to_chat(user, span_warning("The spell had no effect!")) + else + to_chat(user, span_cult_italic("In a brilliant flash of red, [target] falls to the ground!")) + target.Paralyze(16 SECONDS * effect_coef) + target.flash_act(1, TRUE) + if(issilicon(target)) + var/mob/living/silicon/silicon_target = target + silicon_target.emp_act(EMP_HEAVY) + else if(iscarbon(target)) + var/mob/living/carbon/carbon_target = target + carbon_target.adjust_silence(12 SECONDS * effect_coef) + carbon_target.adjust_stutter(30 SECONDS * effect_coef) + carbon_target.adjust_timed_status_effect(30 SECONDS * effect_coef, /datum/status_effect/speech/slurring/cult) + carbon_target.set_jitter_if_lower(30 SECONDS * effect_coef) + uses-- + return ..() //Teleportation /obj/item/melee/blood_magic/teleport @@ -451,47 +489,52 @@ desc = "Will teleport a cultist to a teleport rune on contact." invocation = "Sas'so c'arta forbici!" -/obj/item/melee/blood_magic/teleport/afterattack(atom/target, mob/living/carbon/user, proximity) - var/mob/mob_target = target - if(istype(mob_target) && !IS_CULTIST(mob_target) || !proximity) - to_chat(user, span_warning("You can only teleport adjacent cultists with this spell!")) +/obj/item/melee/blood_magic/teleport/cast_spell(mob/living/target, mob/living/carbon/user) + if(!istype(target) || !IS_CULTIST(target)) + to_chat(user, span_warning("You can only teleport cultists with this spell!")) return - if(IS_CULTIST(user)) - var/list/potential_runes = list() - var/list/teleportnames = list() - for(var/obj/effect/rune/teleport/teleport_rune as anything in GLOB.teleport_runes) - potential_runes[avoid_assoc_duplicate_keys(teleport_rune.listkey, teleportnames)] = teleport_rune - - if(!length(potential_runes)) - to_chat(user, span_warning("There are no valid runes to teleport to!")) - return - var/turf/T = get_turf(src) - if(is_away_level(T.z)) - to_chat(user, span_cult_italic("You are not in the right dimension!")) - return + var/list/potential_runes = list() + var/list/teleportnames = list() + for(var/obj/effect/rune/teleport/teleport_rune as anything in GLOB.teleport_runes) + potential_runes[avoid_assoc_duplicate_keys(teleport_rune.listkey, teleportnames)] = teleport_rune - var/input_rune_key = tgui_input_list(user, "Rune to teleport to", "Teleportation Target", potential_runes) //we know what key they picked - if(isnull(input_rune_key)) - return - if(isnull(potential_runes[input_rune_key])) - to_chat(user, span_warning("You must pick a valid rune!")) - return - var/obj/effect/rune/teleport/actual_selected_rune = potential_runes[input_rune_key] //what rune does that key correspond to? - if(QDELETED(src) || !user || !user.is_holding(src) || user.incapacitated() || !actual_selected_rune || !proximity) - return - var/turf/dest = get_turf(actual_selected_rune) - if(dest.is_blocked_turf(TRUE)) - to_chat(user, span_warning("The target rune is blocked. You cannot teleport there.")) - return - uses-- - var/turf/origin = get_turf(user) - var/mob/living/L = target - if(do_teleport(L, dest, channel = TELEPORT_CHANNEL_CULT)) - origin.visible_message(span_warning("Dust flows from [user]'s hand, and [user.p_they()] disappear[user.p_s()] with a sharp crack!"), \ - span_cult_italic("You speak the words of the talisman and find yourself somewhere else!"), "You hear a sharp crack.") - dest.visible_message(span_warning("There is a boom of outrushing air as something appears above the rune!"), null, "You hear a boom.") - ..() + if(!length(potential_runes)) + to_chat(user, span_warning("There are no valid runes to teleport to!")) + return + var/turf/T = get_turf(src) + if(is_away_level(T.z)) + to_chat(user, span_cult_italic("You are not in the right dimension!")) + return + var/input_rune_key = tgui_input_list(user, "Rune to teleport to", "Teleportation Target", potential_runes) //we know what key they picked + if(isnull(input_rune_key)) + return + if(isnull(potential_runes[input_rune_key])) + to_chat(user, span_warning("You must pick a valid rune!")) + return + var/obj/effect/rune/teleport/actual_selected_rune = potential_runes[input_rune_key] //what rune does that key correspond to? + if(QDELETED(src) || !user || !user.is_holding(src) || user.incapacitated() || !actual_selected_rune) + return + var/turf/dest = get_turf(actual_selected_rune) + if(dest.is_blocked_turf(TRUE)) + to_chat(user, span_warning("The target rune is blocked. You cannot teleport there.")) + return + uses-- + var/turf/origin = get_turf(user) + if(do_teleport(target, dest, channel = TELEPORT_CHANNEL_CULT)) + origin.visible_message( + span_warning("Dust flows from [user]'s hand, and [user.p_they()] disappear[user.p_s()] with a sharp crack!"), + span_cult_italic("You speak the words of the talisman and find yourself somewhere else!"), + span_hear("You hear a sharp crack."), + ) + dest.visible_message( + span_warning("There is a boom of outrushing air as something appears above the rune!"), + null, + span_hear("You hear a boom."), + ) + playsound(origin, SFX_PORTAL_ENTER, 50, TRUE, SILENCED_SOUND_EXTRARANGE) + playsound(dest, SFX_PORTAL_ENTER, 50, TRUE, SILENCED_SOUND_EXTRARANGE) + return ..() //Shackles /obj/item/melee/blood_magic/shackles @@ -500,15 +543,17 @@ invocation = "In'totum Lig'abis!" color = COLOR_BLACK // black -/obj/item/melee/blood_magic/shackles/afterattack(atom/target, mob/living/carbon/user, proximity) - if(IS_CULTIST(user) && iscarbon(target) && proximity) - var/mob/living/carbon/C = target - if(C.canBeHandcuffed()) - CuffAttack(C, user) - else - user.visible_message(span_cult_italic("This victim doesn't have enough arms to complete the restraint!")) - return - ..() +/obj/item/melee/blood_magic/shackles/cast_spell(atom/target, mob/living/carbon/user) + if(!iscarbon(target)) + return + var/mob/living/carbon/C = target + if(IS_CULTIST(C)) + return + if(!C.canBeHandcuffed()) + user.visible_message(span_cult_italic("This victim doesn't have enough arms to complete the restraint!")) + return + CuffAttack(C, user) + return ..() /obj/item/melee/blood_magic/shackles/proc/CuffAttack(mob/living/carbon/C, mob/living/user) if(!C.handcuffed) @@ -561,90 +606,95 @@ Purified soulstones (and any shades inside) into cultist soulstones\n Airlocks into brittle runed airlocks after a delay (harm intent)"} -/obj/item/melee/blood_magic/construction/afterattack(atom/target, mob/user, proximity_flag, click_parameters) - if(proximity_flag && IS_CULTIST(user)) - if(channeling) - to_chat(user, span_cult_italic("You are already invoking twisted construction!")) +/obj/item/melee/blood_magic/construction/cast_spell(atom/target, mob/living/carbon/user) + if(channeling) + to_chat(user, span_cult_italic("You are already invoking twisted construction!")) + return + + var/turf/T = get_turf(target) + if(istype(target, /obj/item/stack/sheet/iron)) + var/obj/item/stack/sheet/candidate = target + if(!candidate.use(IRON_TO_CONSTRUCT_SHELL_CONVERSION)) + to_chat(user, span_warning("You need [IRON_TO_CONSTRUCT_SHELL_CONVERSION] iron to produce a construct shell!")) return - . |= AFTERATTACK_PROCESSED_ITEM - var/turf/T = get_turf(target) - if(istype(target, /obj/item/stack/sheet/iron)) - var/obj/item/stack/sheet/candidate = target - if(candidate.use(IRON_TO_CONSTRUCT_SHELL_CONVERSION)) - uses-- - to_chat(user, span_warning("A dark cloud emanates from your hand and swirls around the iron, twisting it into a construct shell!")) - new /obj/structure/constructshell(T) - SEND_SOUND(user, sound('sound/effects/magic.ogg',0,1,25)) - else - to_chat(user, span_warning("You need [IRON_TO_CONSTRUCT_SHELL_CONVERSION] iron to produce a construct shell!")) - return - else if(istype(target, /obj/item/stack/sheet/plasteel)) - var/obj/item/stack/sheet/plasteel/candidate = target - var/quantity = candidate.amount - if(candidate.use(quantity)) - uses -- - new /obj/item/stack/sheet/runed_metal(T,quantity) - to_chat(user, span_warning("A dark cloud emanates from you hand and swirls around the plasteel, transforming it into runed metal!")) - SEND_SOUND(user, sound('sound/effects/magic.ogg',0,1,25)) - else if(istype(target,/mob/living/silicon/robot)) - var/mob/living/silicon/robot/candidate = target - if(candidate.mmi || candidate.shell) - channeling = TRUE - user.visible_message(span_danger("A dark cloud emanates from [user]'s hand and swirls around [candidate]!")) - playsound(T, 'sound/machines/airlock_alien_prying.ogg', 80, TRUE) - var/prev_color = candidate.color - candidate.color = "black" - if(do_after(user, 9 SECONDS, target = candidate)) - candidate.undeploy() - candidate.emp_act(EMP_HEAVY) - var/construct_class = show_radial_menu(user, src, GLOB.construct_radial_images, custom_check = CALLBACK(src, PROC_REF(check_menu), user), require_near = TRUE, tooltips = TRUE) - if(!check_menu(user)) - return - if(QDELETED(candidate)) - channeling = FALSE - return - candidate.grab_ghost() - user.visible_message(span_danger("The dark cloud recedes from what was formerly [candidate], revealing a\n [construct_class]!")) - make_new_construct_from_class(construct_class, THEME_CULT, candidate, user, FALSE, T) - uses-- - qdel(candidate) - channeling = FALSE - else - channeling = FALSE - candidate.color = prev_color - return - else - uses-- - to_chat(user, span_warning("A dark cloud emanates from you hand and swirls around [candidate] - twisting it into a construct shell!")) - new /obj/structure/constructshell(T) - SEND_SOUND(user, sound('sound/effects/magic.ogg',0,1,25)) - qdel(candidate) - else if(istype(target,/obj/machinery/door/airlock)) + uses-- + to_chat(user, span_warning("A dark cloud emanates from your hand and swirls around the iron, twisting it into a construct shell!")) + new /obj/structure/constructshell(T) + SEND_SOUND(user, sound('sound/effects/magic.ogg',0,1,25)) + return ..() + + if(istype(target, /obj/item/stack/sheet/plasteel)) + var/obj/item/stack/sheet/plasteel/candidate = target + var/quantity = candidate.amount + if(!candidate.use(quantity)) + return + + uses-- + new /obj/item/stack/sheet/runed_metal(T,quantity) + to_chat(user, span_warning("A dark cloud emanates from you hand and swirls around the plasteel, transforming it into runed metal!")) + SEND_SOUND(user, sound('sound/effects/magic.ogg',0,1,25)) + return ..() + + if(istype(target,/mob/living/silicon/robot)) + var/mob/living/silicon/robot/candidate = target + if(candidate.mmi || candidate.shell) channeling = TRUE - playsound(T, 'sound/machines/airlockforced.ogg', 50, TRUE) - do_sparks(5, TRUE, target) - if(do_after(user, 5 SECONDS, target = user)) - if(QDELETED(target)) - channeling = FALSE - return - target.narsie_act() - uses-- - user.visible_message(span_warning("Black ribbons suddenly emanate from [user]'s hand and cling to the airlock - twisting and corrupting it!")) - SEND_SOUND(user, sound('sound/effects/magic.ogg',0,1,25)) + user.visible_message(span_danger("A dark cloud emanates from [user]'s hand and swirls around [candidate]!")) + playsound(T, 'sound/machines/airlock_alien_prying.ogg', 80, TRUE) + var/prev_color = candidate.color + candidate.color = "black" + if(!do_after(user, 9 SECONDS, target = candidate)) channeling = FALSE - else + candidate.color = prev_color + return + candidate.undeploy() + candidate.emp_act(EMP_HEAVY) + var/construct_class = show_radial_menu(user, src, GLOB.construct_radial_images, custom_check = CALLBACK(src, PROC_REF(check_menu), user), require_near = TRUE, tooltips = TRUE) + if(!check_menu(user) || QDELETED(candidate)) channeling = FALSE + candidate.color = prev_color return - else if(istype(target,/obj/item/soulstone)) - var/obj/item/soulstone/candidate = target - if(candidate.corrupt()) - uses-- - to_chat(user, span_warning("You corrupt [candidate]!")) - SEND_SOUND(user, sound('sound/effects/magic.ogg',0,1,25)) - else - to_chat(user, span_warning("The spell will not work on [target]!")) + candidate.grab_ghost() + user.visible_message(span_danger("The dark cloud recedes from what was formerly [candidate], revealing a\n [construct_class]!")) + make_new_construct_from_class(construct_class, THEME_CULT, candidate, user, FALSE, T) + uses-- + qdel(candidate) + channeling = FALSE + return ..() + + uses-- + to_chat(user, span_warning("A dark cloud emanates from you hand and swirls around [candidate] - twisting it into a construct shell!")) + new /obj/structure/constructshell(T) + SEND_SOUND(user, sound('sound/effects/magic.ogg',0,1,25)) + qdel(candidate) + return ..() + + if(istype(target,/obj/machinery/door/airlock)) + channeling = TRUE + playsound(T, 'sound/machines/airlockforced.ogg', 50, TRUE) + do_sparks(5, TRUE, target) + if(!do_after(user, 5 SECONDS, target = user) && !QDELETED(target)) + channeling = FALSE return - return . | ..() + + target.narsie_act() + uses-- + user.visible_message(span_warning("Black ribbons suddenly emanate from [user]'s hand and cling to the airlock - twisting and corrupting it!")) + SEND_SOUND(user, sound('sound/effects/magic.ogg',0,1,25)) + channeling = FALSE + return ..() + + if(istype(target,/obj/item/soulstone)) + var/obj/item/soulstone/candidate = target + if(!candidate.corrupt()) + return + + uses-- + to_chat(user, span_warning("You corrupt [candidate]!")) + SEND_SOUND(user, sound('sound/effects/magic.ogg',0,1,25)) + return ..() + + to_chat(user, span_warning("The spell will not work on [target]!")) /obj/item/melee/blood_magic/construction/proc/check_menu(mob/user) if(!istype(user)) @@ -660,21 +710,21 @@ desc = "Will equip cult combat gear onto a cultist on contact." color = "#33cc33" // green -/obj/item/melee/blood_magic/armor/afterattack(atom/target, mob/living/carbon/user, proximity) +/obj/item/melee/blood_magic/armor/cast_spell(mob/living/target, mob/living/carbon/user) + if(!iscarbon(target) || !IS_CULTIST(target)) + return + uses-- var/mob/living/carbon/carbon_target = target - if(istype(carbon_target) && IS_CULTIST(carbon_target) && proximity) - uses-- - var/mob/living/carbon/C = target - C.visible_message(span_warning("Otherworldly armor suddenly appears on [C]!")) - C.equip_to_slot_or_del(new /obj/item/clothing/under/color/black,ITEM_SLOT_ICLOTHING) - C.equip_to_slot_or_del(new /obj/item/clothing/suit/hooded/cultrobes/alt(user), ITEM_SLOT_OCLOTHING) - C.equip_to_slot_or_del(new /obj/item/clothing/shoes/cult/alt(user), ITEM_SLOT_FEET) - C.equip_to_slot_or_del(new /obj/item/storage/backpack/cultpack(user), ITEM_SLOT_BACK) - if(C == user) - qdel(src) //Clears the hands - C.put_in_hands(new /obj/item/melee/cultblade/dagger(user)) - C.put_in_hands(new /obj/item/restraints/legcuffs/bola/cult(user)) - ..() + carbon_target.visible_message(span_warning("Otherworldly armor suddenly appears on [carbon_target]!")) + carbon_target.equip_to_slot_or_del(new /obj/item/clothing/under/color/black,ITEM_SLOT_ICLOTHING) + carbon_target.equip_to_slot_or_del(new /obj/item/clothing/suit/hooded/cultrobes/alt(user), ITEM_SLOT_OCLOTHING) + carbon_target.equip_to_slot_or_del(new /obj/item/clothing/shoes/cult/alt(user), ITEM_SLOT_FEET) + carbon_target.equip_to_slot_or_del(new /obj/item/storage/backpack/cultpack(user), ITEM_SLOT_BACK) + if(carbon_target == user) + qdel(src) //Clears the hands + carbon_target.put_in_hands(new /obj/item/melee/cultblade/dagger(user)) + carbon_target.put_in_hands(new /obj/item/restraints/legcuffs/bola/cult(user)) + return ..() /obj/item/melee/blood_magic/manipulator name = "Blood Rite Aura" @@ -695,10 +745,7 @@ * * '/obj/item/melee/blood_magic/manipulator/proc/blood_draw' handles blood pools/trails and does not affect parent proc */ -/obj/item/melee/blood_magic/manipulator/afterattack(atom/target, mob/living/carbon/human/user, proximity) - if(!proximity) - return - +/obj/item/melee/blood_magic/manipulator/cast_spell(mob/living/target, mob/living/carbon/user) if((isconstruct(target) || isshade(target)) && !heal_construct(target, user)) return if(istype(target, /obj/effect/decal/cleanable/blood) || istype(target, /obj/effect/decal/cleanable/trail_holder) || isturf(target)) @@ -711,12 +758,11 @@ if(human_bloodbag.stat == DEAD) human_bloodbag.balloon_alert(user, "dead!") return - if(IS_CULTIST(human_bloodbag) && !heal_cultist(human_bloodbag, user)) return if(!IS_CULTIST(human_bloodbag) && !drain_victim(human_bloodbag, user)) return - ..() + return ..() /** * handles blood rites usage on constructs @@ -799,7 +845,8 @@ human_bloodbag.updatehealth() playsound(get_turf(human_bloodbag), 'sound/magic/staff_healing.ogg', 25) new /obj/effect/temp_visual/cult/sparks(get_turf(human_bloodbag)) - user.Beam(human_bloodbag, icon_state="sendbeam", time = 15) + if (user != human_bloodbag) //Dont create beam from the user to the user + user.Beam(human_bloodbag, icon_state="sendbeam", time = 15) return TRUE /** diff --git a/code/modules/antagonists/cult/cult_bastard_sword.dm b/code/modules/antagonists/cult/cult_bastard_sword.dm deleted file mode 100644 index 0d70bd503fb7f..0000000000000 --- a/code/modules/antagonists/cult/cult_bastard_sword.dm +++ /dev/null @@ -1,98 +0,0 @@ - -/// Cult Bastard Sword, earned by cultists when they manage to sacrifice a heretic. -/obj/item/cult_bastard - name = "bloody bastard sword" - desc = "An enormous sword used by Nar'Sien cultists to rapidly harvest the souls of non-believers." - w_class = WEIGHT_CLASS_HUGE - block_chance = 50 - block_sound = 'sound/weapons/parry.ogg' - throwforce = 20 - force = 35 - armour_penetration = 45 - throw_speed = 1 - throw_range = 3 - sharpness = SHARP_EDGED - light_color = "#ff0000" - attack_verb_continuous = list("attacks", "slashes", "stabs", "slices", "tears", "lacerates", "rips", "dices", "rends") - attack_verb_simple = list("attack", "slash", "stab", "slice", "tear", "lacerate", "rip", "dice", "rend") - icon = 'icons/obj/weapons/sword.dmi' - icon_state = "cultbastard" - inhand_icon_state = "cultbastard" - hitsound = 'sound/weapons/bladeslice.ogg' - lefthand_file = 'icons/mob/inhands/64x64_lefthand.dmi' - righthand_file = 'icons/mob/inhands/64x64_righthand.dmi' - inhand_x_dimension = 64 - inhand_y_dimension = 64 - actions_types = list() - item_flags = SLOWS_WHILE_IN_HAND - ///if we are using our attack_self ability - var/spinning = FALSE - -/obj/item/cult_bastard/Initialize(mapload) - . = ..() - set_light(4) - AddComponent(/datum/component/butchering, 50, 80) - AddComponent(/datum/component/two_handed, require_twohands = TRUE) - AddComponent(/datum/component/soul_stealer, soulstone_type = /obj/item/soulstone) - AddComponent( \ - /datum/component/spin2win, \ - spin_cooldown_time = 25 SECONDS, \ - on_spin_callback = CALLBACK(src, PROC_REF(on_spin)), \ - on_unspin_callback = CALLBACK(src, PROC_REF(on_unspin)), \ - start_spin_message = span_danger("%USER begins swinging the sword around with inhuman strength!"), \ - end_spin_message = span_warning("%USER's inhuman strength dissipates and the sword's runes grow cold!") \ - ) - -/obj/item/cult_bastard/proc/on_spin(mob/living/user, duration) - var/oldcolor = user.color - user.color = "#ff0000" - user.add_stun_absorption( - source = name, - duration = duration, - priority = 2, - message = span_warning("%EFFECT_OWNER doesn't even flinch as the sword's power courses through [user.p_them()]!"), - self_message = span_boldwarning("You shrug off the stun!"), - examine_message = span_warning("%EFFECT_OWNER_THEYRE glowing with a blazing red aura!"), - ) - user.spin(duration, 1) - animate(user, color = oldcolor, time = duration, easing = EASE_IN) - addtimer(CALLBACK(user, TYPE_PROC_REF(/atom, update_atom_colour)), duration) - block_chance = 100 - slowdown += 1.5 - spinning = TRUE - -/obj/item/cult_bastard/proc/on_unspin(mob/living/user) - block_chance = 50 - slowdown -= 1.5 - spinning = FALSE - -/obj/item/cult_bastard/can_be_pulled(user) - return FALSE - -/obj/item/cult_bastard/pickup(mob/living/user) - . = ..() - if(!IS_CULTIST(user)) - if(!IS_HERETIC(user)) - to_chat(user, "\"I wouldn't advise that.\"") - force = 5 - return - else - to_chat(user, span_cult_large("\"You cling to the Forgotten Gods, as if you're more than their pawn.\"")) - to_chat(user, span_userdanger("A horrible force yanks at your arm!")) - user.emote("scream") - user.apply_damage(30, BRUTE, pick(GLOB.arm_zones)) - user.dropItemToGround(src, TRUE) - user.Paralyze(50) - return - force = initial(force) - -/obj/item/cult_bastard/IsReflect(def_zone) - if(!spinning) - return FALSE - return TRUE - -/obj/item/cult_bastard/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK, damage_type = BRUTE) - if(!prob(final_block_chance)) - return FALSE - owner.visible_message(span_danger("[owner] parries [attack_text] with [src]!")) - return TRUE diff --git a/code/modules/antagonists/cult/cult_comms.dm b/code/modules/antagonists/cult/cult_comms.dm index 1d2e0dc08e4cf..a4f3b291f74da 100644 --- a/code/modules/antagonists/cult/cult_comms.dm +++ b/code/modules/antagonists/cult/cult_comms.dm @@ -239,10 +239,10 @@ playsound(mobloc, SFX_SPARKS, 50, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) if(2) new /obj/effect/temp_visual/dir_setting/cult/phase/out(mobloc, B.current.dir) - playsound(mobloc, SFX_SPARKS, 75, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) + playsound(mobloc, SFX_PORTAL_ENTER, 75, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) if(3) new /obj/effect/temp_visual/dir_setting/cult/phase(mobloc, B.current.dir) - playsound(mobloc, SFX_SPARKS, 100, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) + playsound(mobloc, SFX_PORTAL_ENTER, 100, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) if(4) playsound(mobloc, 'sound/magic/exit_blood.ogg', 100, TRUE) if(B.current != owner) diff --git a/code/modules/antagonists/cult/cult_items.dm b/code/modules/antagonists/cult/cult_items.dm index ca4161c752b9a..33710d9199853 100644 --- a/code/modules/antagonists/cult/cult_items.dm +++ b/code/modules/antagonists/cult/cult_items.dm @@ -76,6 +76,8 @@ Striking a noncultist, however, will tear their flesh."} block_sound = 'sound/weapons/parry.ogg' attack_verb_continuous = list("attacks", "slashes", "stabs", "slices", "tears", "lacerates", "rips", "dices", "rends") attack_verb_simple = list("attack", "slash", "stab", "slice", "tear", "lacerate", "rip", "dice", "rend") + /// If TRUE, it can be used at will by anyone, non-cultists included + var/free_use = FALSE /obj/item/melee/cultblade/Initialize(mapload) . = ..() @@ -93,7 +95,7 @@ Striking a noncultist, however, will tear their flesh."} return FALSE /obj/item/melee/cultblade/attack(mob/living/target, mob/living/carbon/human/user) - if(!IS_CULTIST(user)) + if(!IS_CULTIST(user) && !free_use) user.Paralyze(100) user.dropItemToGround(src, TRUE) user.visible_message(span_warning("A powerful force shoves [user] away from [target]!"), \ @@ -106,6 +108,174 @@ Striking a noncultist, however, will tear their flesh."} return ..() +#define WIELDER_SPELLS "wielder_spell" +#define SWORD_SPELLS "sword_spell" +#define SWORD_PREFIX "sword_prefix" + +/obj/item/melee/cultblade/haunted + name = "haunted longsword" + desc = "An eerie sword with a blade that is less 'black' than it is 'absolute nothingness'. It glows with furious, restrained green energy." + icon_state = "hauntedblade" + inhand_icon_state = "hauntedblade" + worn_icon_state = "hauntedblade" + force = 35 + throwforce = 35 + block_chance = 55 + wound_bonus = -25 + bare_wound_bonus = 30 + free_use = TRUE + light_color = COLOR_HERETIC_GREEN + light_range = 4 + /// holder for the actual action when created. + var/datum/action/cooldown/spell/path_wielder_action + var/mob/living/trapped_entity + /// The heretic path that the variable below uses to index abilities. Assigned when the heretic is ensouled. + var/heretic_path + /// Nested static list used to index abilities and names. + var/static/list/heretic_paths_to_haunted_sword_abilities = list( + // Ash + PATH_ASH = list( + WIELDER_SPELLS = list(/datum/action/cooldown/spell/jaunt/ethereal_jaunt/ash), + SWORD_SPELLS = list(/datum/action/cooldown/spell/pointed/ash_beams), + SWORD_PREFIX = "ashen", + ), + // Flesh + PATH_FLESH = list( + WIELDER_SPELLS = list(/datum/action/cooldown/spell/pointed/blood_siphon), + SWORD_SPELLS = list(/datum/action/cooldown/spell/pointed/cleave), + SWORD_PREFIX = "sanguine", + ), + // Void + PATH_VOID = list( + WIELDER_SPELLS = list(/datum/action/cooldown/spell/pointed/void_phase), + SWORD_SPELLS = list(/datum/action/cooldown/spell/cone/staggered/cone_of_cold/void), + SWORD_PREFIX = "tenebrous", + ), + // Blade + PATH_BLADE = list( + WIELDER_SPELLS = list(/datum/action/cooldown/spell/pointed/projectile/furious_steel/haunted), + SWORD_SPELLS = list(/datum/action/cooldown/spell/pointed/projectile/furious_steel/solo), + SWORD_PREFIX = "keen", + ), + // Rust + PATH_RUST = list( + WIELDER_SPELLS = list(/datum/action/cooldown/spell/cone/staggered/entropic_plume), + SWORD_SPELLS = list(/datum/action/cooldown/spell/aoe/rust_conversion, /datum/action/cooldown/spell/pointed/rust_construction), + SWORD_PREFIX = "rusted", + ), + // Cosmic + PATH_COSMIC = list( + WIELDER_SPELLS = list(/datum/action/cooldown/spell/conjure/cosmic_expansion), + SWORD_SPELLS = list(/datum/action/cooldown/spell/pointed/projectile/star_blast), + SWORD_PREFIX = "astral", + ), + // Lock + PATH_LOCK = list( + WIELDER_SPELLS = list(/datum/action/cooldown/spell/pointed/burglar_finesse), + SWORD_SPELLS = list(/datum/action/cooldown/spell/pointed/apetra_vulnera), + SWORD_PREFIX = "incisive", + ), + // Moon + PATH_MOON = list( + WIELDER_SPELLS = list(/datum/action/cooldown/spell/pointed/projectile/moon_parade), + SWORD_SPELLS = list(/datum/action/cooldown/spell/pointed/moon_smile), + SWORD_PREFIX = "shimmering", + ), + // Starter + PATH_START = list( + WIELDER_SPELLS = null, + SWORD_SPELLS = null, + SWORD_PREFIX = "stillborn", // lol loser + ) , + ) + +/obj/item/melee/cultblade/haunted/Initialize(mapload, mob/soul_to_bind, mob/awakener, do_bind = TRUE) + . = ..() + + AddElement(/datum/element/heretic_focus) + add_traits(list(TRAIT_CASTABLE_LOC, TRAIT_SPELLS_TRANSFER_TO_LOC), INNATE_TRAIT) + if(do_bind && !mapload) + bind_soul(soul_to_bind, awakener) + +/obj/item/melee/cultblade/haunted/proc/bind_soul(mob/soul_to_bind, mob/awakener) + + var/datum/mind/trapped_mind = soul_to_bind?.mind + + if(!trapped_mind) + return // Can't do anything further down the list + + if(trapped_mind) + AddComponent(/datum/component/spirit_holding,\ + soul_to_bind = trapped_mind,\ + awakener = awakener,\ + allow_renaming = FALSE,\ + allow_channeling = FALSE,\ + ) + + // Get the heretic's new body and antag datum. + trapped_entity = trapped_mind?.current + trapped_entity.key = trapped_mind?.key + var/datum/antagonist/heretic/heretic_holder = IS_HERETIC(trapped_entity) + if(!heretic_holder) + stack_trace("[soul_to_bind] in but not a heretic on the heretic soul blade.") + + // Give the spirit a spell that lets them try to fly around. + var/datum/action/cooldown/spell/pointed/sword_fling/fling_act = \ + new /datum/action/cooldown/spell/pointed/sword_fling(trapped_mind, to_fling = src) + fling_act.Grant(trapped_entity) + + // Set the sword's path for spell selection. + heretic_path = heretic_holder.heretic_path + + // Copy the objectives to keep for roundend, remove the datum as neither us nor the heretic need it anymore + var/list/copied_objectives = heretic_holder.objectives.Copy() + trapped_entity.mind.remove_antag_datum(/datum/antagonist/heretic) + + // Add the fallen antag datum, give them a heads-up of what's happening. + var/datum/antagonist/soultrapped_heretic/bozo = new() + bozo.objectives |= copied_objectives + trapped_entity.mind.add_antag_datum(bozo) + to_chat(trapped_entity, span_userdanger("You've been sacrificed to the Enemy, and trapped inside a haunted blade! While you cannot escape, you may help the Cult, your current wielder, or even pester everyone with what few abilities you kept.")) + + // Assigning the spells to give to the wielder and spirit. + // Let them cast the given spell. + ADD_TRAIT(trapped_entity, TRAIT_ALLOW_HERETIC_CASTING, INNATE_TRAIT) + + var/list/path_spells = heretic_paths_to_haunted_sword_abilities[heretic_path] + + var/list/wielder_spells = path_spells[WIELDER_SPELLS] + var/list/sword_spells = path_spells[SWORD_SPELLS] + + name = "[path_spells[SWORD_PREFIX]] [name]" + + + // Granting the path spells. The sword spirit gains it outright, while it's just instanced for wielders to be added on pickup. + + if(sword_spells) + for(var/datum/action/cooldown/spell/sword_spell as anything in sword_spells) + sword_spell = new sword_spell(trapped_entity) + sword_spell?.Grant(trapped_entity) + sword_spell?.overlay_icon_state = "bg_cult_border" // for flavor, and also helps distinguish + + + if(wielder_spells) + for(var/datum/action/cooldown/spell/wielder_spell as anything in wielder_spells) + path_wielder_action = new wielder_spell(src) + wielder_spell?.overlay_icon_state = "bg_cult_border" + +/obj/item/melee/cultblade/haunted/equipped(mob/user, slot, initial) + . = ..() + if(slot & ITEM_SLOT_HANDS) + path_wielder_action?.Grant(user) + +/obj/item/melee/cultblade/haunted/dropped(mob/user, silent) + . = ..() + path_wielder_action?.Remove(user) + +#undef WIELDER_SPELLS +#undef SWORD_SPELLS +#undef SWORD_PREFIX + /obj/item/melee/cultblade/ghost name = "eldritch sword" force = 19 //can't break normal airlocks @@ -120,7 +290,7 @@ Striking a noncultist, however, will tear their flesh."} /obj/item/melee/cultblade/pickup(mob/living/user) ..() - if(!IS_CULTIST(user)) + if(!IS_CULTIST(user) && !free_use) to_chat(user, span_cult_large("\"I wouldn't advise that.\"")) /datum/action/innate/dash/cult @@ -162,6 +332,7 @@ Striking a noncultist, however, will tear their flesh."} else to_chat(user, span_warning("The bola seems to take on a life of its own!")) ensnare(user) + user.update_held_items() #undef CULT_BOLA_PICKUP_STUN @@ -382,7 +553,7 @@ Striking a noncultist, however, will tear their flesh."} AddComponent( \ /datum/component/shielded, \ recharge_start_delay = 0 SECONDS, \ - shield_icon_file = 'icons/effects/cult/effects.dmi', \ + shield_icon_file = 'icons/effects/cult.dmi', \ shield_icon = "shield-cult", \ run_hit_callback = CALLBACK(src, PROC_REF(shield_damaged)), \ ) @@ -563,6 +734,78 @@ Striking a noncultist, however, will tear their flesh."} #undef MAX_SHUTTLE_CURSES +#define GATEWAY_TURF_SCAN_RANGE 40 + +/obj/item/proteon_orb + name = "summoning orb" + desc = "An eerie translucent orb that feels impossibly light. Legends say summoning orbs are created from corrupted scrying orbs. If you hold it close to your ears, you can hear the screams of the damned." + icon = 'icons/obj/antags/cult/items.dmi' + icon_state = "summoning_orb" + light_range = 3 + light_color = COLOR_CULT_RED + +/obj/item/proteon_orb/examine(mob/user) + . = ..() + if(!IS_CULTIST(user) && isliving(user)) + var/mob/living/living_user = user + living_user.adjustOrganLoss(ORGAN_SLOT_BRAIN, 5) + . += span_danger("It hurts just to look at it. Better keep away.") + else + . += span_cult("It can be used to create a gateway to Nar'Sie's domain, which will summon weak, sentient constructs over time.") + +/obj/item/proteon_orb/attack_self(mob/living/user) + + var/list/turfs_to_scan = detect_room(get_turf(user), max_size = GATEWAY_TURF_SCAN_RANGE) + + if(!IS_CULTIST(user)) + to_chat(user, span_cult_large("\"You want to enter my domain? Go ahead.\"")) + turfs_to_scan = null // narsie wants to have some fun and the veil wont stop her + + for(var/turf/hole_candidate as anything in turfs_to_scan) + if(locate(/obj/structure/spawner/sentient/proteon_spawner) in hole_candidate) + to_chat(user, span_cult_bold("There's a gateway too close nearby. The veil is not yet weak enough to allow such close rips in its fabric.")) + return + to_chat(user, span_cult_bold_italic("You focus on [src] and direct it into the ground. It rumbles...")) + + var/turf/open/hole_spot = get_turf(user) + if(!istype(hole_spot) || isgroundlessturf(hole_spot)) + to_chat(user, span_notice("This is not a suitable spot.")) + return + + INVOKE_ASYNC(hole_spot, TYPE_PROC_REF(/turf/open, quake_gateway), user) + qdel(src) + +/** + * Bespoke proc that happens when a proteon orb is activated, creating a gateway. + * If activated by a non-cultist, they get an unusual game over. +*/ +/turf/open/proc/quake_gateway(mob/living/user) + Shake(2, 2, 5 SECONDS) + narsie_act(TRUE, TRUE, 100) + var/fucked = FALSE + if(!IS_CULTIST(user)) + fucked = TRUE + ADD_TRAIT(user, TRAIT_NO_TRANSFORM, REF(src)) // keep em in place + user.add_atom_colour(COLOR_CULT_RED, TEMPORARY_COLOUR_PRIORITY) + user.visible_message(span_cult_bold("Dark tendrils appear from the ground and root [user] in place!")) + sleep(5 SECONDS) // can we still use these or. i mean its async + new /obj/structure/spawner/sentient/proteon_spawner(src) + visible_message(span_cult_bold("A mysterious hole appears out of nowhere!")) + if(!fucked || QDELETED(user)) + return + if(get_turf(user) != src) // they get away. for now + REMOVE_TRAIT(user, TRAIT_NO_TRANSFORM, REF(src)) + return + user.visible_message(span_cult_bold("[user] is pulled into the portal through an infinitesmally minuscule hole, shredding [user.p_their()] body!")) + sleep(5 SECONDS) + user.visible_message(span_cult_italic("An unusually large construct appears through the portal!")) + user.gib() // total destruction + var/mob/living/basic/construct/proteon/hostile/remnant = new(get_step_rand(src)) + remnant.name = "[user]" // no, they do not become it + remnant.transform *= 1.5 + +#undef GATEWAY_TURF_SCAN_RANGE + /obj/item/cult_shift name = "veil shifter" desc = "This relic instantly teleports you, and anything you're pulling, forward by a moderate distance." @@ -620,9 +863,9 @@ Striking a noncultist, however, will tear their flesh."} new /obj/effect/temp_visual/dir_setting/cult/phase/out(mobloc, user_cultist.dir) new /obj/effect/temp_visual/dir_setting/cult/phase(destination, user_cultist.dir) - playsound(mobloc, SFX_SPARKS, 50, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) + playsound(mobloc, SFX_PORTAL_ENTER, 50, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) playsound(destination, 'sound/effects/phasein.ogg', 25, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) - playsound(destination, SFX_SPARKS, 50, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) + playsound(destination, SFX_PORTAL_ENTER, 50, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) /obj/item/flashlight/flare/culttorch name = "void torch" @@ -639,49 +882,49 @@ Striking a noncultist, however, will tear their flesh."} var/charges = 5 start_on = TRUE -/obj/item/flashlight/flare/culttorch/afterattack(atom/movable/A, mob/user, proximity) - if(!proximity) - return - if(!IS_CULTIST(user)) - to_chat(user, "That doesn't seem to do anything useful.") - return +/obj/item/flashlight/flare/culttorch/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + var/datum/antagonist/cult/cult = user.mind.has_antag_datum(/datum/antagonist/cult) + var/datum/team/cult/cult_team = cult?.get_team() + if(isnull(cult_team)) + to_chat(user, span_warning("That doesn't seem to do anything useful.")) + return ITEM_INTERACT_BLOCKING - if(!isitem(A)) - ..() - to_chat(user, span_warning("\The [src] can only transport items!")) - return + if(!isitem(interacting_with)) + to_chat(user, span_warning("[src] can only transport items!")) + return ITEM_INTERACT_BLOCKING - . |= AFTERATTACK_PROCESSED_ITEM + var/list/mob/living/cultists = list() + for(var/datum/mind/cult_mind as anything in cult_team.members) + if(cult_mind == user.mind) + continue + if(cult_mind.current?.stat != DEAD) + cultists |= cult_mind.current - var/list/cultists = list() - for(var/datum/mind/M as anything in get_antag_minds(/datum/antagonist/cult)) - if(M.current && M.current.stat != DEAD) - cultists |= M.current var/mob/living/cultist_to_receive = tgui_input_list(user, "Who do you wish to call to [src]?", "Followers of the Geometer", (cultists - user)) - if(!Adjacent(user) || !src || QDELETED(src) || user.incapacitated()) - return + if(QDELETED(src) || loc != user || user.incapacitated()) + return ITEM_INTERACT_BLOCKING if(isnull(cultist_to_receive)) - to_chat(user, "You require a destination!") - log_game("[key_name(user)]'s Void torch failed - no target.") - return + to_chat(user, span_cult_italic("You require a destination!")) + return ITEM_INTERACT_BLOCKING if(cultist_to_receive.stat == DEAD) - to_chat(user, "[cultist_to_receive] has died!") - log_game("[key_name(user)]'s Void torch failed - target died.") - return - if(!IS_CULTIST(cultist_to_receive)) - to_chat(user, "[cultist_to_receive] is not a follower of the Geometer!") - log_game("[key_name(user)]'s Void torch failed - target was deconverted.") - return - if(A in user.get_all_contents()) - to_chat(user, "[A] must be on a surface in order to teleport it!") - return - to_chat(user, "You ignite [A] with \the [src], turning it to ash, but through the torch's flames you see that [A] has reached [cultist_to_receive]!") - user.log_message("teleported [A] to [cultist_to_receive] with \the [src].", LOG_GAME) - cultist_to_receive.put_in_hands(A) + to_chat(user, span_cult_italic("[cultist_to_receive] has died!")) + return ITEM_INTERACT_BLOCKING + if(!(cultist_to_receive.mind in cult_team.members)) + to_chat(user, span_cult_italic("[cultist_to_receive] is not a follower of the Geometer!")) + return ITEM_INTERACT_BLOCKING + if(!isturf(interacting_with.loc)) + to_chat(user, span_cult_italic("[interacting_with] must be on a surface in order to teleport it!")) + return ITEM_INTERACT_BLOCKING + + to_chat(user, span_cult_italic("You ignite [interacting_with] with [src], turning it to ash, \ + but through the torch's flames you see that [interacting_with] has reached [cultist_to_receive]!")) + user.log_message("teleported [interacting_with] to [cultist_to_receive] with [src].", LOG_GAME) + cultist_to_receive.put_in_hands(interacting_with) charges-- - to_chat(user, "\The [src] now has [charges] charge\s.") - if(charges == 0) + to_chat(user, span_notice("[src] now has [charges] charge\s.")) + if(charges <= 0) qdel(src) + return ITEM_INTERACT_SUCCESS /obj/item/melee/cultblade/halberd name = "bloody halberd" @@ -859,31 +1102,33 @@ Striking a noncultist, however, will tear their flesh."} ADD_TRAIT(src, TRAIT_NODROP, CULT_TRAIT) -/obj/item/blood_beam/afterattack(atom/A, mob/living/user, proximity_flag, clickparams) - . = ..() +/obj/item/blood_beam/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + return ranged_interact_with_atom(interacting_with, user, modifiers) + +/obj/item/blood_beam/ranged_interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) if(firing || charging) - return - if(ishuman(user)) - angle = get_angle(user, A) - else - qdel(src) - return . | AFTERATTACK_PROCESSED_ITEM + return ITEM_INTERACT_BLOCKING + if(!ishuman(user)) + return ITEM_INTERACT_BLOCKING + angle = get_angle(user, interacting_with) charging = TRUE INVOKE_ASYNC(src, PROC_REF(charge), user) if(do_after(user, 9 SECONDS, target = user)) firing = TRUE ADD_TRAIT(user, TRAIT_IMMOBILIZED, CULT_TRAIT) - INVOKE_ASYNC(src, PROC_REF(pewpew), user, clickparams) + var/params = list2params(modifiers) + INVOKE_ASYNC(src, PROC_REF(pewpew), user, params) var/obj/structure/emergency_shield/cult/weak/N = new(user.loc) if(do_after(user, 9 SECONDS, target = user)) user.Paralyze(40) - to_chat(user, "You have exhausted the power of this spell!") + to_chat(user, span_cult_italic("You have exhausted the power of this spell!")) REMOVE_TRAIT(user, TRAIT_IMMOBILIZED, CULT_TRAIT) firing = FALSE if(N) qdel(N) qdel(src) charging = FALSE + return ITEM_INTERACT_SUCCESS /obj/item/blood_beam/proc/charge(mob/user) var/obj/O diff --git a/code/modules/antagonists/cult/cult_other.dm b/code/modules/antagonists/cult/cult_other.dm new file mode 100644 index 0000000000000..9435baedba11a --- /dev/null +++ b/code/modules/antagonists/cult/cult_other.dm @@ -0,0 +1,41 @@ +/datum/outfit/cultist + name = "Cultist (Preview only)" + + uniform = /obj/item/clothing/under/color/black + suit = /obj/item/clothing/suit/hooded/cultrobes/alt + head = /obj/item/clothing/head/hooded/cult_hoodie/alt + shoes = /obj/item/clothing/shoes/cult/alt + r_hand = /obj/item/melee/blood_magic/stun + +/datum/outfit/cultist/post_equip(mob/living/carbon/human/equipped, visualsOnly) + equipped.eye_color_left = BLOODCULT_EYE + equipped.eye_color_right = BLOODCULT_EYE + equipped.update_body() + +///Returns whether the given mob is convertable to the blood cult +/proc/is_convertable_to_cult(mob/living/target, datum/team/cult/specific_cult) + if(!istype(target)) + return FALSE + if(isnull(target.mind)) + return FALSE + +// disables client checks if testing for easier debugging +#ifndef TESTING + if(!GET_CLIENT(target)) + return FALSE +#endif + + if(target.mind.unconvertable) + return FALSE + if(ishuman(target) && target.mind.holy_role) + return FALSE + if(specific_cult?.is_sacrifice_target(target.mind)) + return FALSE + var/mob/living/master = target.mind.enslaved_to?.resolve() + if(master && !IS_CULTIST(master)) + return FALSE + if(IS_HERETIC_OR_MONSTER(target)) + return FALSE + if(HAS_TRAIT(target, TRAIT_MINDSHIELD) || issilicon(target) || isbot(target) || isdrone(target)) + return FALSE //can't convert machines, shielded, or braindead + return TRUE diff --git a/code/modules/antagonists/cult/cult_structure_altar.dm b/code/modules/antagonists/cult/cult_structure_altar.dm index 9347acb33210f..e38591c0c0705 100644 --- a/code/modules/antagonists/cult/cult_structure_altar.dm +++ b/code/modules/antagonists/cult/cult_structure_altar.dm @@ -2,6 +2,7 @@ #define ELDRITCH_WHETSTONE "Eldritch Whetstone" #define CONSTRUCT_SHELL "Construct Shell" #define UNHOLY_WATER "Flask of Unholy Water" +#define PROTEON_ORB "Portal Summoning Orb" // Cult altar. Gives out consumable items. /obj/structure/destructible/cult/item_dispenser/altar @@ -10,6 +11,7 @@ cult_examine_tip = "Can be used to create eldritch whetstones, construct shells, and flasks of unholy water." icon_state = "talismanaltar" break_message = "The altar shatters, leaving only the wailing of the damned!" + mansus_conversion_path = /obj/effect/heretic_rune /obj/structure/destructible/cult/item_dispenser/altar/setup_options() var/static/list/altar_items = list( @@ -27,7 +29,20 @@ ), ) + var/extra_item = extra_options() + options = altar_items + if(!isnull(extra_item)) + options += extra_item + +/obj/structure/destructible/cult/item_dispenser/altar/extra_options() + if(!cult_team?.unlocked_heretic_items[PROTEON_ORB_UNLOCKED]) + return + return list(PROTEON_ORB = list( + PREVIEW_IMAGE = image(icon = 'icons/obj/antags/cult/items.dmi', icon_state = "summoning_orb"), + OUTPUT_ITEMS = list(/obj/item/proteon_orb), + ), + ) /obj/structure/destructible/cult/item_dispenser/altar/succcess_message(mob/living/user, obj/item/spawned_item) to_chat(user, span_cult_italic("You kneel before [src] and your faith is rewarded with [spawned_item]!")) @@ -35,3 +50,4 @@ #undef ELDRITCH_WHETSTONE #undef CONSTRUCT_SHELL #undef UNHOLY_WATER +#undef PROTEON_ORB diff --git a/code/modules/antagonists/cult/cult_structure_archives.dm b/code/modules/antagonists/cult/cult_structure_archives.dm index a961739663391..d3a96dd1f77aa 100644 --- a/code/modules/antagonists/cult/cult_structure_archives.dm +++ b/code/modules/antagonists/cult/cult_structure_archives.dm @@ -2,6 +2,7 @@ #define CULT_BLINDFOLD "Zealot's Blindfold" #define CURSE_ORB "Shuttle Curse" #define VEIL_WALKER "Veil Walker Set" +#define CRIMSON_FOCUS "Crimson Focus" // Cult archives. Gives out utility items. /obj/structure/destructible/cult/item_dispenser/archives @@ -12,6 +13,7 @@ light_range = 1.5 light_color = LIGHT_COLOR_FIRE break_message = "The books and tomes of the archives burn into ash as the desk shatters!" + mansus_conversion_path = /obj/item/codex_cicatrix /obj/structure/destructible/cult/item_dispenser/archives/setup_options() var/static/list/archive_items = list( @@ -29,7 +31,20 @@ ), ) + var/extra_item = extra_options() + options = archive_items + if(!isnull(extra_item)) + options += extra_item + +/obj/structure/destructible/cult/item_dispenser/archives/extra_options() + if(!cult_team?.unlocked_heretic_items[CRIMSON_FOCUS_UNLOCKED]) + return + return list(CRIMSON_FOCUS = list( + PREVIEW_IMAGE = image(icon = 'icons/obj/clothing/neck.dmi', icon_state = "crimson_focus"), + OUTPUT_ITEMS = list(/obj/item/clothing/neck/heretic_focus/crimson_focus), + ), + ) /obj/structure/destructible/cult/item_dispenser/archives/succcess_message(mob/living/user, obj/item/spawned_item) to_chat(user, span_cult_italic("You summon [spawned_item] from [src]!")) @@ -41,3 +56,4 @@ #undef CULT_BLINDFOLD #undef CURSE_ORB #undef VEIL_WALKER +#undef CRIMSON_FOCUS diff --git a/code/modules/antagonists/cult/cult_structure_forge.dm b/code/modules/antagonists/cult/cult_structure_forge.dm index 912db7d37e9b8..12d15b9296ef4 100644 --- a/code/modules/antagonists/cult/cult_structure_forge.dm +++ b/code/modules/antagonists/cult/cult_structure_forge.dm @@ -2,6 +2,7 @@ #define NARSIE_ARMOR "Nar'Sien Hardened Armor" #define FLAGELLANT_ARMOR "Flagellant's Robe" #define ELDRITCH_SWORD "Eldritch Longsword" +#define CURSED_BLADE "Cursed Ritual Blade" // Cult forge. Gives out combat weapons. /obj/structure/destructible/cult/item_dispenser/forge @@ -12,6 +13,7 @@ light_range = 2 light_color = LIGHT_COLOR_LAVA break_message = "The forge breaks apart into shards with a howling scream!" + mansus_conversion_path = /obj/structure/destructible/eldritch_crucible /obj/structure/destructible/cult/item_dispenser/forge/setup_options() var/static/list/forge_items = list( @@ -29,7 +31,21 @@ ), ) + var/extra_item = extra_options() + options = forge_items + if(!isnull(extra_item)) + options += extra_item + +/obj/structure/destructible/cult/item_dispenser/forge/extra_options() + if(!cult_team?.unlocked_heretic_items[CURSED_BLADE_UNLOCKED]) + return + return list(CURSED_BLADE = list( + PREVIEW_IMAGE = image(icon = 'icons/obj/weapons/khopesh.dmi', icon_state = "cursed_blade"), + OUTPUT_ITEMS = list(/obj/item/melee/sickly_blade/cursed), + ), + ) + /obj/structure/destructible/cult/item_dispenser/forge/succcess_message(mob/living/user, obj/item/spawned_item) to_chat(user, span_cult_italic("You work [src] as dark knowledge guides your hands, creating [spawned_item]!")) @@ -42,3 +58,4 @@ #undef NARSIE_ARMOR #undef FLAGELLANT_ARMOR #undef ELDRITCH_SWORD +#undef CURSED_BLADE diff --git a/code/modules/antagonists/cult/cult_structure_pylon.dm b/code/modules/antagonists/cult/cult_structure_pylon.dm index 4bb7c83e7a769..e436601325d25 100644 --- a/code/modules/antagonists/cult/cult_structure_pylon.dm +++ b/code/modules/antagonists/cult/cult_structure_pylon.dm @@ -22,6 +22,7 @@ burn_heal = 0.4, \ blood_heal = 0.4, \ simple_heal = 1.2, \ + wound_clotting = 0.1, \ requires_visibility = FALSE, \ limit_to_trait = TRAIT_HEALS_FROM_CULT_PYLONS, \ healing_color = COLOR_CULT_RED, \ diff --git a/code/modules/antagonists/cult/cult_structures.dm b/code/modules/antagonists/cult/cult_structures.dm index 932c3ac03c1f6..5067dcf979904 100644 --- a/code/modules/antagonists/cult/cult_structures.dm +++ b/code/modules/antagonists/cult/cult_structures.dm @@ -12,16 +12,43 @@ var/cult_examine_tip /// The cooldown for when items can be dispensed. COOLDOWN_DECLARE(use_cooldown) + /// Assigned cult team, set when cultistism is checked. + var/datum/team/cult/cult_team + +/obj/structure/destructible/cult/Destroy() + cult_team = null + return ..() + +/obj/structure/destructible/cult/Initialize(mapload) + . = ..() + RegisterSignal(src, COMSIG_ATOM_CONSTRUCTED, PROC_REF(on_constructed)) + +/obj/structure/destructible/cult/proc/on_constructed(datum/source, mob/builder) + SIGNAL_HANDLER + var/datum/antagonist/cult/cultist = builder.mind?.has_antag_datum(/datum/antagonist/cult, TRUE) + cult_team = cultist?.get_team() + +/// Tries to find a cultist. If it succeeds, it also takes advantage of the moment to define the structure's cult team if it's not set yet. +/obj/structure/destructible/cult/proc/is_cultist_check(mob/fool) + + if(!IS_CULTIST(fool)) + return FALSE + + if(isnull(cult_team)) + var/datum/antagonist/cult/cultist = fool.mind?.has_antag_datum(/datum/antagonist/cult, TRUE) + cult_team = cultist?.get_team() + + return TRUE /obj/structure/destructible/cult/examine_status(mob/user) - if(IS_CULTIST(user) || isobserver(user)) + if(is_cultist_check(user) || isobserver(user)) return span_cult("It's at [round(atom_integrity * 100 / max_integrity)]% stability.") return ..() /obj/structure/destructible/cult/examine(mob/user) . = ..() . += span_notice("[src] is [anchored ? "secured to":"unsecured from"] the floor.") - if(IS_CULTIST(user) || isobserver(user)) + if(is_cultist_check(user) || isobserver(user)) if(cult_examine_tip) . += span_cult(cult_examine_tip) if(!COOLDOWN_FINISHED(src, use_cooldown_duration)) @@ -65,16 +92,25 @@ /obj/structure/destructible/cult/item_dispenser /// An associated list of options this structure can make. See setup_options() for format. var/list/options + /// The dispenser will create this item and then delete itself if it is rust converted. + var/obj/mansus_conversion_path = /obj/item/skub /obj/structure/destructible/cult/item_dispenser/Initialize(mapload) . = ..() setup_options() +/obj/structure/destructible/cult/item_dispenser/rust_heretic_act() + visible_message(span_notice("[src] crumbles to dust. In its midst, you spot \a [initial(mansus_conversion_path.name)].")) + var/turf/turfy = get_turf(src) + new mansus_conversion_path(turfy) + turfy.rust_heretic_act() + return ..() + /obj/structure/destructible/cult/item_dispenser/attack_hand(mob/living/user, list/modifiers) . = ..() if(.) return - if(!isliving(user) || !IS_CULTIST(user)) + if(!isliving(user) || !is_cultist_check(user)) to_chat(user, span_warning("You're pretty sure you know exactly what this is used for and you can't seem to touch it.")) return if(!anchored) @@ -84,6 +120,8 @@ to_chat(user, span_cult_italic("The magic in [src] is too weak, it will be ready to use again in [DisplayTimeText(COOLDOWN_TIMELEFT(src, use_cooldown))].")) return + setup_options() + var/list/spawned_items = get_items_to_spawn(user) if(!length(spawned_items)) return @@ -109,6 +147,18 @@ /obj/structure/destructible/cult/item_dispenser/proc/setup_options() return +/* + * Extra options, currently used for items unlocked after sacrificing a heretic. + * + * The list of options is a associated list of format: + * item_name = list( + * preview = image(), + * output = list(paths), + * ) + */ +/obj/structure/destructible/cult/item_dispenser/proc/extra_options() + return + /* * Get all items that this cult building will spawn when interacted with. * Opens a radial menu for the user and shows them the list of options, which they can choose from. @@ -150,7 +200,7 @@ * Returns TRUE if the user is a living mob that is a cultist and is not incapacitated. */ /obj/structure/destructible/cult/item_dispenser/proc/check_menu(mob/user) - return isliving(user) && IS_CULTIST(user) && !user.incapacitated() + return isliving(user) && is_cultist_check(user) && !user.incapacitated() // Spooky looking door used in gateways. Or something. /obj/effect/gateway diff --git a/code/modules/antagonists/cult/constructs.dm b/code/modules/antagonists/cult/datums/constructs.dm similarity index 100% rename from code/modules/antagonists/cult/constructs.dm rename to code/modules/antagonists/cult/datums/constructs.dm diff --git a/code/modules/antagonists/cult/cult_team.dm b/code/modules/antagonists/cult/datums/cult_team.dm similarity index 96% rename from code/modules/antagonists/cult/cult_team.dm rename to code/modules/antagonists/cult/datums/cult_team.dm index c47cc2145b5dc..09d4a25a321c4 100644 --- a/code/modules/antagonists/cult/cult_team.dm +++ b/code/modules/antagonists/cult/datums/cult_team.dm @@ -16,9 +16,16 @@ var/reckoning_complete = FALSE ///Has the cult risen, and gotten red eyes? var/cult_risen = FALSE - ///Has the cult asceneded, and gotten halos? + ///Has the cult ascended, and gotten halos? var/cult_ascendent = FALSE + /// List that keeps track of which items have been unlocked after a heretic was sacked. + var/list/unlocked_heretic_items = list( + CURSED_BLADE_UNLOCKED = FALSE, + CRIMSON_FOCUS_UNLOCKED = FALSE, + PROTEON_ORB_UNLOCKED = FALSE, + ) + ///Has narsie been summoned yet? var/narsie_summoned = FALSE ///How large were we at max size. diff --git a/code/modules/antagonists/cult/cult.dm b/code/modules/antagonists/cult/datums/cultist.dm similarity index 88% rename from code/modules/antagonists/cult/cult.dm rename to code/modules/antagonists/cult/datums/cultist.dm index e6faa911ee458..b0fbea4421aa9 100644 --- a/code/modules/antagonists/cult/cult.dm +++ b/code/modules/antagonists/cult/datums/cultist.dm @@ -7,6 +7,7 @@ preview_outfit = /datum/outfit/cultist job_rank = ROLE_CULTIST antag_hud_name = "cult" + stinger_sound = 'sound/ambience/antag/bloodcult/bloodcult_gain.ogg' ///The vote ability Cultists have to elect someone to be the leader. var/datum/action/innate/cult/mastervote/vote_ability @@ -23,7 +24,6 @@ /datum/antagonist/cult/greet() . = ..() - owner.current.playsound_local(get_turf(owner.current), 'sound/ambience/antag/bloodcult/bloodcult_gain.ogg', 100, FALSE, pressure_affected = FALSE, use_reverb = FALSE)//subject to change owner.announce_objectives() /datum/antagonist/cult/on_gain() @@ -277,37 +277,6 @@ return finish_preview_icon(icon) -/datum/outfit/cultist - name = "Cultist (Preview only)" - - uniform = /obj/item/clothing/under/color/black - suit = /obj/item/clothing/suit/hooded/cultrobes/alt - head = /obj/item/clothing/head/hooded/cult_hoodie/alt - shoes = /obj/item/clothing/shoes/cult/alt - r_hand = /obj/item/melee/blood_magic/stun - -/datum/outfit/cultist/post_equip(mob/living/carbon/human/equipped, visualsOnly) - equipped.eye_color_left = BLOODCULT_EYE - equipped.eye_color_right = BLOODCULT_EYE - equipped.update_body() - -///Returns whether the given mob is convertable to the blood cult -/proc/is_convertable_to_cult(mob/living/target, datum/team/cult/specific_cult) - if(!istype(target)) - return FALSE - if(isnull(target.mind) || !GET_CLIENT(target)) - return FALSE - if(target.mind.unconvertable) - return FALSE - if(ishuman(target) && target.mind.holy_role) - return FALSE - if(specific_cult?.is_sacrifice_target(target.mind)) - return FALSE - var/mob/living/master = target.mind.enslaved_to?.resolve() - if(master && !IS_CULTIST(master)) - return FALSE - if(IS_HERETIC_OR_MONSTER(target)) - return FALSE - if(HAS_TRAIT(target, TRAIT_MINDSHIELD) || issilicon(target) || isbot(target) || isdrone(target)) - return FALSE //can't convert machines, shielded, or braindead +///Used to check if the owner is counted as a secondary invoker for runes. +/datum/antagonist/cult/proc/check_invoke_validity() return TRUE diff --git a/code/modules/antagonists/cult/datums/shade.dm b/code/modules/antagonists/cult/datums/shade.dm new file mode 100644 index 0000000000000..18d0f71d11309 --- /dev/null +++ b/code/modules/antagonists/cult/datums/shade.dm @@ -0,0 +1,20 @@ +/datum/antagonist/cult/shade + name = "\improper Cult Shade" + show_in_antagpanel = FALSE + show_name_in_check_antagonists = TRUE + show_to_ghosts = TRUE + antagpanel_category = ANTAG_GROUP_HORRORS + ///The time this player was most recently released from a soulstone. + var/release_time + ///The time needed after release time to enable rune invocation. + var/invoke_delay = (1 MINUTES) + +/datum/antagonist/cult/shade/check_invoke_validity() + if(isnull(release_time)) + to_chat(owner.current, span_alert("You cannot invoke runes from inside of a soulstone!")) + return FALSE + + if(release_time + invoke_delay > world.time) + to_chat(owner.current, span_alert("You haven't gathered enough power to invoke runes yet. You need to remain out of your soulstone for a while longer!")) + return FALSE + return TRUE diff --git a/code/modules/antagonists/cult/runes.dm b/code/modules/antagonists/cult/runes.dm index cc4a80d980fe3..d8ce241caf3c8 100644 --- a/code/modules/antagonists/cult/runes.dm +++ b/code/modules/antagonists/cult/runes.dm @@ -149,6 +149,9 @@ structure_check() searches for nearby cultist structures required for the invoca for(var/mob/living/cultist in range(1, src)) if(!IS_CULTIST(cultist)) continue + var/datum/antagonist/cult/cultist_datum = locate(/datum/antagonist/cult) in cultist.mind.antag_datums + if(!cultist_datum.check_invoke_validity()) //We can assume there's a datum here since we can't get past the previous check otherwise. + continue if(cultist == user) continue if(!cultist.can_speak(allow_mimes = TRUE)) @@ -323,16 +326,12 @@ structure_check() searches for nearby cultist structures required for the invoca return TRUE /obj/effect/rune/convert/proc/do_sacrifice(mob/living/sacrificial, list/invokers, datum/team/cult/cult_team) - var/big_sac = FALSE + var/target_sac = FALSE if((((ishuman(sacrificial) || iscyborg(sacrificial)) && sacrificial.stat != DEAD) || cult_team.is_sacrifice_target(sacrificial.mind)) && length(invokers) < 3) for(var/invoker in invokers) to_chat(invoker, span_cult_italic("[sacrificial] is too greatly linked to the world! You need three acolytes!")) return FALSE - var/signal_result = SEND_SIGNAL(sacrificial, COMSIG_LIVING_CULT_SACRIFICED, invokers, cult_team) - if(signal_result & STOP_SACRIFICE) - return FALSE - if(sacrificial.mind) LAZYADD(GLOB.sacrificed, WEAKREF(sacrificial.mind)) for(var/datum/objective/sacrifice/sac_objective in cult_team.objectives) @@ -340,15 +339,23 @@ structure_check() searches for nearby cultist structures required for the invoca sac_objective.sacced = TRUE sac_objective.clear_sacrifice() sac_objective.update_explanation_text() - big_sac = TRUE + target_sac = TRUE else LAZYADD(GLOB.sacrificed, WEAKREF(sacrificial)) new /obj/effect/temp_visual/cult/sac(loc) - if(!(signal_result & SILENCE_SACRIFICE_MESSAGE)) + var/signal_result = SEND_SIGNAL(sacrificial, COMSIG_LIVING_CULT_SACRIFICED, invokers, cult_team) + + var/do_message = TRUE + if(signal_result & SILENCE_SACRIFICE_MESSAGE) + do_message = FALSE + if((signal_result & SILENCE_NONTARGET_SACRIFICE_MESSAGE) && !(target_sac)) + do_message = FALSE + + if(do_message) for(var/invoker in invokers) - if(big_sac) + if(target_sac) to_chat(invoker, span_cult_large("\"Yes! This is the one I desire! You have done well.\"")) continue if(ishuman(sacrificial) || iscyborg(sacrificial)) @@ -356,6 +363,10 @@ structure_check() searches for nearby cultist structures required for the invoca else to_chat(invoker, span_cult_large("\"I accept this meager sacrifice.\"")) + // post-message + if(signal_result & STOP_SACRIFICE) + return FALSE + if(iscyborg(sacrificial)) var/construct_class = show_radial_menu(invokers[1], sacrificial, GLOB.construct_radial_images, require_near = TRUE, tooltips = TRUE) if(QDELETED(sacrificial) || !construct_class) @@ -367,17 +378,20 @@ structure_check() searches for nearby cultist structures required for the invoca sacriborg.mmi = null qdel(sacrificial) return TRUE - - var/obj/item/soulstone/stone = new(loc) - if(sacrificial.mind && !HAS_TRAIT(sacrificial, TRAIT_SUICIDED)) - stone.capture_soul(sacrificial, invokers[1], forced = TRUE) - - if(sacrificial) + if(sacrificial && (signal_result & DUST_SACRIFICE)) // No soulstone when dusted + playsound(sacrificial, 'sound/magic/teleport_diss.ogg', 100, TRUE) + sacrificial.investigate_log("has been sacrificially dusted by the cult.", INVESTIGATE_DEATHS) + sacrificial.dust(TRUE, FALSE, TRUE) + else if (sacrificial) + var/obj/item/soulstone/stone = new(loc) + if(sacrificial.mind && !HAS_TRAIT(sacrificial, TRAIT_SUICIDED)) + stone.capture_soul(sacrificial, invokers[1], forced = TRUE) playsound(sacrificial, 'sound/magic/disintegrate.ogg', 100, TRUE) sacrificial.investigate_log("has been sacrificially gibbed by the cult.", INVESTIGATE_DEATHS) sacrificial.gib(DROP_ALL_REMAINS) try_spawn_sword() // after sharding and gibbing, which potentially dropped a null rod + return TRUE /// Tries to convert a null rod over the rune to a cult sword @@ -393,12 +407,12 @@ structure_check() searches for nearby cultist structures required for the invoca rod.visible_message(span_cult_italic(displayed_message)) switch(num_slain) - if(0, 1) + if(0) animate_spawn_sword(rod, /obj/item/melee/cultblade/dagger) - if(2) + if(1) animate_spawn_sword(rod, /obj/item/melee/cultblade) else - animate_spawn_sword(rod, /obj/item/cult_bastard) + animate_spawn_sword(rod, /obj/item/melee/cultblade/halberd) return TRUE return FALSE @@ -523,6 +537,8 @@ structure_check() searches for nearby cultist structures required for the invoca movesuccess = TRUE if(movedsomething) ..() + playsound(src, SFX_PORTAL_ENTER, 50, TRUE) + playsound(target, SFX_PORTAL_ENTER, 50, TRUE) if(moveuserlater) if(do_teleport(user, target, channel = TELEPORT_CHANNEL_CULT)) movesuccess = TRUE @@ -545,7 +561,7 @@ structure_check() searches for nearby cultist structures required for the invoca /obj/effect/rune/teleport/proc/handle_portal(portal_type, turf/origin) var/turf/T = get_turf(src) close_portal() // To avoid stacking descriptions/animations - playsound(T, pick('sound/effects/sparks1.ogg', 'sound/effects/sparks2.ogg', 'sound/effects/sparks3.ogg', 'sound/effects/sparks4.ogg'), 100, TRUE, 14) + playsound(T, SFX_PORTAL_CREATED, 100, TRUE, 14) inner_portal = new /obj/effect/temp_visual/cult/portal(T) if(portal_type == "space") set_light_color(color) @@ -859,12 +875,15 @@ GLOBAL_VAR_INIT(narsie_summon_count, 0) "Overwhelming vertigo consumes you as you are hurled through the air!") ..() visible_message(span_warning("A foggy shape materializes atop [src] and solidifies into [cultist_to_summon]!")) + var/turf/old_turf = get_turf(cultist_to_summon) if(!do_teleport(cultist_to_summon, get_turf(src))) to_chat(user, span_warning("The summoning has completely failed for [cultist_to_summon]!")) fail_logmsg += "target failed criteria to teleport." //catch-all term, just means they failed do_teleport somehow. The most common reasons why someone should fail to be summoned already have verbose messages. log_game(fail_logmsg) fail_invoke() return + playsound(src, SFX_PORTAL_ENTER, 100, TRUE, SILENCED_SOUND_EXTRARANGE) + playsound(old_turf, SFX_PORTAL_ENTER, 100, TRUE, SILENCED_SOUND_EXTRARANGE) qdel(src) //Rite of Boiling Blood: Deals extremely high amounts of damage to non-cultists nearby @@ -1141,7 +1160,7 @@ GLOBAL_VAR_INIT(narsie_summon_count, 0) images += B if(!IS_CULTIST(M)) if(M.client) - var/image/C = image('icons/effects/cult/effects.dmi',M,"bloodsparkles", ABOVE_MOB_LAYER) + var/image/C = image('icons/effects/cult.dmi',M,"bloodsparkles", ABOVE_MOB_LAYER) add_alt_appearance(/datum/atom_hud/alternate_appearance/basic/cult, "cult_apoc", C, NONE) addtimer(CALLBACK(M, TYPE_PROC_REF(/atom/, remove_alt_appearance),"cult_apoc",TRUE), duration) images += C diff --git a/code/modules/antagonists/cult/sword_fling.dm b/code/modules/antagonists/cult/sword_fling.dm new file mode 100644 index 0000000000000..766f97917de60 --- /dev/null +++ b/code/modules/antagonists/cult/sword_fling.dm @@ -0,0 +1,93 @@ + +/datum/action/cooldown/spell/pointed/sword_fling + name = "Sword Fling" + desc = "Try to fling yourself around." + ranged_mousepointer = 'icons/effects/mouse_pointers/cult_target.dmi' + background_icon_state = "bg_heretic" + overlay_icon_state = "bg_cult_border" + + button_icon = 'icons/mob/actions/actions_cult.dmi' + button_icon_state = "sword_fling" + + school = SCHOOL_EVOCATION + cooldown_time = 4 SECONDS + invocation_type = INVOCATION_NONE + spell_requirements = NONE + + cast_range = 6 + active_msg = "You ready yourself to attempt to leap!" + var/obj/item/flinged_sword + +/datum/action/cooldown/spell/pointed/sword_fling/New(Target, to_fling) + . = ..() + flinged_sword = to_fling + +/datum/action/cooldown/spell/pointed/sword_fling/Destroy() + flinged_sword = null + . = ..() + +/datum/action/cooldown/spell/pointed/sword_fling/is_valid_target(atom/cast_on) + return isatom(cast_on) + +/datum/action/cooldown/spell/pointed/sword_fling/cast(turf/cast_on) + . = ..() + var/atom/sword_loc = flinged_sword.loc + if(ismob(sword_loc)) + var/mob/loccer = sword_loc + var/resist_chance = 25 + var/fail_text = "You struggle, but [loccer] keeps [loccer.p_their()] grip on you!" + var/particle_to_spawn = null + if(IS_CULTIST_OR_CULTIST_MOB(loccer)) + resist_chance = 10 // your mastahs + fail_text = "You struggle, but [loccer]'s grip is unnaturally hard to resist!" + particle_to_spawn = /obj/effect/temp_visual/cult/sparks + if(IS_HERETIC_OR_MONSTER(loccer) || IS_LUNATIC(loccer)) + resist_chance = 15 + fail_text = "You struggle, but [loccer] deftly handles the grip movement." + particle_to_spawn = /obj/effect/temp_visual/eldritch_sparks + if(loccer.mind?.holy_role) // IS_PRIEST() + resist_chance = 12 + fail_text = "You struggle, but [loccer]'s holy grip holds tight against your thrashing." + particle_to_spawn = /obj/effect/temp_visual/blessed + if(IS_WIZARD(loccer)) + resist_chance = 5 // magic master + fail_text = "You struggle, but [loccer]'s handle on magic easily neutralizes your movement." + particle_to_spawn = /obj/effect/particle_effect/sparks/electricity + + new particle_to_spawn(get_turf(loccer)) + + if(prob(resist_chance)) + flinged_sword.forceMove(get_turf(loccer)) + flinged_sword.visible_message(span_alert("\the [flinged_sword] yanks itself out of [loccer]'s grip!")) + // flung by later code + else + to_chat(owner, span_warning(fail_text)) + return + + if(isitem(sword_loc)) + flinged_sword.forceMove(get_turf(sword_loc)) + flinged_sword.visible_message(span_alert("\the [flinged_sword] yanks itself out of [sword_loc]!")) + // flung by later code + + if(iscloset(sword_loc)) + var/obj/structure/closet/sword_closet = sword_loc + if(!(sword_closet.open(owner, force = prob(5), special_effects = TRUE))) + sword_closet.container_resist_act(owner, loc_required = FALSE) + flinged_sword.visible_message(span_alert("\the [flinged_sword] yanks itself out of [sword_closet]!")) + + // no general struct/machinery check. imagine if someone put the sword in a vendor + + if(isturf(sword_loc)) + new /obj/effect/temp_visual/sword_sparks(sword_loc) + flinged_sword.throw_at(cast_on, cast_range, flinged_sword.throw_speed, owner) + flinged_sword.visible_message(\ + span_warning("\the [flinged_sword] lunges at \the [cast_on]!")) + +/obj/effect/temp_visual/eldritch_sparks + icon_state = "purplesparkles" + +/obj/effect/temp_visual/sword_sparks + icon_state = "mech_toxin" // only used in one place and it looks kinda good + +/obj/effect/temp_visual/blessed + icon_state = "blessed" diff --git a/code/modules/antagonists/disease/disease_abilities.dm b/code/modules/antagonists/disease/disease_abilities.dm deleted file mode 100644 index 3267944e05c62..0000000000000 --- a/code/modules/antagonists/disease/disease_abilities.dm +++ /dev/null @@ -1,465 +0,0 @@ -/* -Abilities that can be purchased by disease mobs. Most are just passive symptoms that will be -added to their disease, but some are active abilites that affect only the target the overmind -is currently following. -*/ - -GLOBAL_LIST_INIT(disease_ability_singletons, list( -new /datum/disease_ability/action/cough, -new /datum/disease_ability/action/sneeze, -new /datum/disease_ability/action/infect, -new /datum/disease_ability/symptom/mild/cough, -new /datum/disease_ability/symptom/mild/sneeze, -new /datum/disease_ability/symptom/medium/shedding, -new /datum/disease_ability/symptom/medium/beard, -new /datum/disease_ability/symptom/medium/hallucigen, -new /datum/disease_ability/symptom/medium/choking, -new /datum/disease_ability/symptom/medium/confusion, -new /datum/disease_ability/symptom/medium/vomit, -new /datum/disease_ability/symptom/medium/voice_change, -new /datum/disease_ability/symptom/medium/visionloss, -new /datum/disease_ability/symptom/medium/deafness, -new /datum/disease_ability/symptom/powerful/narcolepsy, -new /datum/disease_ability/symptom/medium/fever, -new /datum/disease_ability/symptom/medium/chills, -new /datum/disease_ability/symptom/medium/headache, -new /datum/disease_ability/symptom/medium/viraladaptation, -new /datum/disease_ability/symptom/medium/viralevolution, -new /datum/disease_ability/symptom/medium/disfiguration, -new /datum/disease_ability/symptom/medium/polyvitiligo, -new /datum/disease_ability/symptom/medium/itching, -new /datum/disease_ability/symptom/medium/heal/weight_loss, -new /datum/disease_ability/symptom/medium/heal/sensory_restoration, -new /datum/disease_ability/symptom/medium/heal/mind_restoration, -new /datum/disease_ability/symptom/powerful/fire, -new /datum/disease_ability/symptom/powerful/flesh_eating, -new /datum/disease_ability/symptom/powerful/genetic_mutation, -new /datum/disease_ability/symptom/powerful/inorganic_adaptation, -new /datum/disease_ability/symptom/powerful/heal/starlight, -new /datum/disease_ability/symptom/powerful/heal/oxygen, -new /datum/disease_ability/symptom/powerful/heal/chem, -new /datum/disease_ability/symptom/powerful/heal/metabolism, -new /datum/disease_ability/symptom/powerful/heal/dark, -new /datum/disease_ability/symptom/powerful/heal/water, -new /datum/disease_ability/symptom/powerful/heal/plasma, -new /datum/disease_ability/symptom/powerful/heal/radiation, -new /datum/disease_ability/symptom/powerful/heal/coma, -new /datum/disease_ability/symptom/powerful/youth -)) - -/datum/disease_ability - var/name - var/cost = 0 - var/required_total_points = 0 - var/start_with = FALSE - var/short_desc = "" - var/long_desc = "" - var/stat_block = "" - var/threshold_block = list() - var/category = "" - - var/list/symptoms - var/list/actions - -/datum/disease_ability/New() - ..() - if(symptoms) - var/stealth = 0 - var/resistance = 0 - var/stage_speed = 0 - var/transmittable = 0 - for(var/T in symptoms) - var/datum/symptom/S = T - stealth += initial(S.stealth) - resistance += initial(S.resistance) - stage_speed += initial(S.stage_speed) - transmittable += initial(S.transmittable) - threshold_block += initial(S.threshold_descs) - stat_block = "Resistance: [resistance]
    Stealth: [stealth]
    Stage Speed: [stage_speed]
    Transmissibility: [transmittable]

    " - if(symptoms.len == 1) //lazy boy's dream - name = initial(S.name) - if(short_desc == "") - short_desc = initial(S.desc) - if(long_desc == "") - long_desc = initial(S.desc) - -/datum/disease_ability/proc/CanBuy(mob/camera/disease/D) - if(world.time < D.next_adaptation_time) - return FALSE - if(!D.unpurchased_abilities[src]) - return FALSE - return (D.points >= cost) && (D.total_points >= required_total_points) - -/datum/disease_ability/proc/Buy(mob/camera/disease/D, silent = FALSE, trigger_cooldown = TRUE) - if(!silent) - to_chat(D, span_notice("Purchased [name].")) - D.points -= cost - D.unpurchased_abilities -= src - if(trigger_cooldown) - D.adapt_cooldown() - D.purchased_abilities[src] = TRUE - for(var/V in (D.disease_instances+D.disease_template)) - var/datum/disease/advance/sentient_disease/SD = V - if(symptoms) - for(var/T in symptoms) - var/datum/symptom/S = new T() - SD.symptoms += S - S.OnAdd(SD) - if(SD.processing) - if(S.Start(SD)) - S.next_activation = world.time + rand(S.symptom_delay_min * 10, S.symptom_delay_max * 10) - SD.Refresh() - for(var/T in actions) - var/datum/action/A = new T() - A.Grant(D) - - -/datum/disease_ability/proc/CanRefund(mob/camera/disease/D) - if(world.time < D.next_adaptation_time) - return FALSE - return D.purchased_abilities[src] - -/datum/disease_ability/proc/Refund(mob/camera/disease/D, silent = FALSE, trigger_cooldown = TRUE) - if(!silent) - to_chat(D, span_notice("Refunded [name].")) - D.points += cost - D.unpurchased_abilities[src] = TRUE - if(trigger_cooldown) - D.adapt_cooldown() - D.purchased_abilities -= src - for(var/V in (D.disease_instances+D.disease_template)) - var/datum/disease/advance/sentient_disease/SD = V - if(symptoms) - for(var/T in symptoms) - var/datum/symptom/S = locate(T) in SD.symptoms - if(S) - SD.symptoms -= S - S.OnRemove(SD) - if(SD.processing) - S.End(SD) - qdel(S) - SD.Refresh() - for(var/T in actions) - var/datum/action/A = locate(T) in D.actions - qdel(A) - -//these sybtypes are for conveniently separating the different categories, they have no unique code. - -/datum/disease_ability/action - category = "Active" - -/datum/disease_ability/symptom - category = "Symptom" - -//active abilities and their associated actions - -/datum/disease_ability/action/cough - name = "Voluntary Coughing" - actions = list(/datum/action/cooldown/disease_cough) - cost = 0 - required_total_points = 0 - start_with = TRUE - short_desc = "Force the host you are following to cough, spreading your infection to those nearby." - long_desc = "Force the host you are following to cough with extra force, spreading your infection to those within two meters of your host even if your transmissibility is low.
    Cooldown: 10 seconds" - - -/datum/action/cooldown/disease_cough - name = "Cough" - button_icon = 'icons/mob/actions/actions_minor_antag.dmi' - button_icon_state = "cough" - desc = "Force the host you are following to cough with extra force, spreading your infection to those within two meters of your host even if your transmissibility is low.
    Cooldown: 10 seconds" - cooldown_time = 100 - -/datum/action/cooldown/disease_cough/Activate(atom/target) - StartCooldown(10 SECONDS) - trigger_cough() - StartCooldown() - return TRUE - -/* - * Cause a cough to happen from the host. - */ -/datum/action/cooldown/disease_cough/proc/trigger_cough() - var/mob/camera/disease/our_disease = owner - var/mob/living/host = our_disease.following_host - if(!host) - return FALSE - if(host.stat != CONSCIOUS) - to_chat(our_disease, span_warning("Your host must be conscious to cough.")) - return FALSE - to_chat(our_disease, span_notice("You force [host.real_name] to cough.")) - host.emote("cough") - if(host.CanSpreadAirborneDisease()) //don't spread germs if they covered their mouth - var/datum/disease/advance/sentient_disease/disease_datum = our_disease.hosts[host] - disease_datum.spread(2) - return TRUE - -/datum/disease_ability/action/sneeze - name = "Voluntary Sneezing" - actions = list(/datum/action/cooldown/disease_sneeze) - cost = 2 - required_total_points = 3 - short_desc = "Force the host you are following to sneeze, spreading your infection to those in front of them." - long_desc = "Force the host you are following to sneeze with extra force, spreading your infection to any victims in a 4 meter cone in front of your host.
    Cooldown: 20 seconds" - -/datum/action/cooldown/disease_sneeze - name = "Sneeze" - button_icon = 'icons/mob/actions/actions_minor_antag.dmi' - button_icon_state = "sneeze" - desc = "Force the host you are following to sneeze with extra force, spreading your infection to any victims in a 4 meter cone in front of your host even if your transmissibility is low.
    Cooldown: 20 seconds" - cooldown_time = 200 - -/datum/action/cooldown/disease_sneeze/Activate(atom/target) - StartCooldown(10 SECONDS) - trigger_sneeze() - StartCooldown() - return TRUE - -/* - * Cause a sneeze to happen from the host. - */ -/datum/action/cooldown/disease_sneeze/proc/trigger_sneeze() - var/mob/camera/disease/our_disease = owner - var/mob/living/host = our_disease.following_host - if(!host) - return FALSE - if(host.stat != CONSCIOUS) - to_chat(our_disease, span_warning("Your host must be conscious to sneeze.")) - return FALSE - to_chat(our_disease, span_notice("You force [host.real_name] to sneeze.")) - host.emote("sneeze") - if(host.CanSpreadAirborneDisease()) //don't spread germs if they covered their mouth - var/datum/disease/advance/sentient_disease/disease_datum = our_disease.hosts[host] - for(var/mob/living/nearby_mob in oview(4, disease_datum.affected_mob)) - if(!is_source_facing_target(disease_datum.affected_mob, nearby_mob)) - continue - if(!disease_air_spread_walk(get_turf(disease_datum.affected_mob), get_turf(nearby_mob))) - continue - nearby_mob.AirborneContractDisease(disease_datum, TRUE) - - return TRUE - -/datum/disease_ability/action/infect - name = "Secrete Infection" - actions = list(/datum/action/cooldown/disease_infect) - cost = 2 - required_total_points = 3 - short_desc = "Cause all objects your host is touching to become infectious for a limited time, spreading your infection to anyone who touches them." - long_desc = "Cause the host you are following to excrete an infective substance from their pores, causing all objects touching their skin to transmit your infection to anyone who touches them for the next 30 seconds. This includes the floor, if they are not wearing shoes, and any items they are holding, if they are not wearing gloves.
    Cooldown: 40 seconds" - -/datum/action/cooldown/disease_infect - name = "Secrete Infection" - button_icon = 'icons/mob/actions/actions_minor_antag.dmi' - button_icon_state = "infect" - desc = "Cause the host you are following to excrete an infective substance from their pores, causing all objects touching their skin to transmit your infection to anyone who touches them for the next 30 seconds.
    Cooldown: 40 seconds" - cooldown_time = 400 - -/datum/action/cooldown/disease_infect/Activate(atom/target) - StartCooldown(10 SECONDS) - trigger_infection() - StartCooldown() - return TRUE - -/* - * Trigger the infection action. - */ -/datum/action/cooldown/disease_infect/proc/trigger_infection() - var/mob/camera/disease/our_disease = owner - var/mob/living/carbon/human/host = our_disease.following_host - if(!host) - return FALSE - for(var/obj/thing as anything in host.get_equipped_items(include_accessories = TRUE)) - thing.AddComponent(/datum/component/infective, our_disease.disease_template, 300) - //no shoes? infect the floor. - if(!host.shoes) - var/turf/host_turf = get_turf(host) - if(host_turf && !isspaceturf(host_turf)) - host_turf.AddComponent(/datum/component/infective, our_disease.disease_template, 300) - //no gloves? infect whatever we are holding. - if(!host.gloves) - for(var/obj/held_thing as anything in host.held_items) - if(isnull(held_thing)) - continue - held_thing.AddComponent(/datum/component/infective, our_disease.disease_template, 300) - return TRUE - -/*******************BASE SYMPTOM TYPES*******************/ -// cost is for convenience and can be changed. If you're changing req_tot_points then don't use the subtype... -//healing costs more so you have to techswitch from naughty disease otherwise we'd have friendly disease for easy greentext (no fun!) - -/datum/disease_ability/symptom/mild - cost = 2 - required_total_points = 4 - category = "Symptom (Weak)" - -/datum/disease_ability/symptom/medium - cost = 4 - required_total_points = 8 - category = "Symptom" - -/datum/disease_ability/symptom/medium/heal - cost = 5 - category = "Symptom (+)" - -/datum/disease_ability/symptom/powerful - cost = 4 - required_total_points = 16 - category = "Symptom (Strong)" - -/datum/disease_ability/symptom/powerful/heal - cost = 8 - category = "Symptom (Strong+)" - -/******MILD******/ - -/datum/disease_ability/symptom/mild/cough - name = "Involuntary Coughing" - symptoms = list(/datum/symptom/cough) - short_desc = "Cause victims to cough intermittently." - long_desc = "Cause victims to cough intermittently, spreading your infection." - -/datum/disease_ability/symptom/mild/sneeze - name = "Involuntary Sneezing" - symptoms = list(/datum/symptom/sneeze) - short_desc = "Cause victims to sneeze intermittently." - long_desc = "Cause victims to sneeze intermittently, spreading your infection and also increasing transmissibility and resistance, at the cost of stealth." - -/******MEDIUM******/ - -/datum/disease_ability/symptom/medium/shedding - symptoms = list(/datum/symptom/shedding) - -/datum/disease_ability/symptom/medium/beard - symptoms = list(/datum/symptom/beard) - short_desc = "Cause all victims to grow a luscious beard." - long_desc = "Cause all victims to grow a luscious beard. Ineffective against Santa Claus." - -/datum/disease_ability/symptom/medium/hallucigen - symptoms = list(/datum/symptom/hallucigen) - short_desc = "Cause victims to hallucinate." - long_desc = "Cause victims to hallucinate. Decreases stats, especially resistance." - -/datum/disease_ability/symptom/medium/choking - symptoms = list(/datum/symptom/choking) - short_desc = "Cause victims to choke." - long_desc = "Cause victims to choke, threatening asphyxiation. Decreases stats, especially transmissibility." - -/datum/disease_ability/symptom/medium/confusion - symptoms = list(/datum/symptom/confusion) - short_desc = "Cause victims to become confused." - long_desc = "Cause victims to become confused intermittently." - -/datum/disease_ability/symptom/medium/vomit - symptoms = list(/datum/symptom/vomit) - short_desc = "Cause victims to vomit." - long_desc = "Cause victims to vomit. Slightly increases transmissibility. Vomiting also also causes the victims to lose nutrition and removes some toxin damage." - -/datum/disease_ability/symptom/medium/voice_change - symptoms = list(/datum/symptom/voice_change) - short_desc = "Change the voice of victims." - long_desc = "Change the voice of victims, causing confusion in communications." - -/datum/disease_ability/symptom/medium/visionloss - symptoms = list(/datum/symptom/visionloss) - short_desc = "Damage the eyes of victims, eventually causing blindness." - long_desc = "Damage the eyes of victims, eventually causing blindness. Decreases all stats." - -/datum/disease_ability/symptom/medium/deafness - symptoms = list(/datum/symptom/deafness) - -/datum/disease_ability/symptom/medium/fever - symptoms = list(/datum/symptom/fever) - -/datum/disease_ability/symptom/medium/chills - symptoms = list(/datum/symptom/chills) - -/datum/disease_ability/symptom/medium/headache - symptoms = list(/datum/symptom/headache) - -/datum/disease_ability/symptom/medium/viraladaptation - symptoms = list(/datum/symptom/viraladaptation) - short_desc = "Cause your infection to become more resistant to detection and eradication." - long_desc = "Cause your infection to mimic the function of normal body cells, becoming much harder to spot and to eradicate, but reducing its speed." - -/datum/disease_ability/symptom/medium/viralevolution - symptoms = list(/datum/symptom/viralevolution) - -/datum/disease_ability/symptom/medium/polyvitiligo - symptoms = list(/datum/symptom/polyvitiligo) - -/datum/disease_ability/symptom/medium/disfiguration - symptoms = list(/datum/symptom/disfiguration) - -/datum/disease_ability/symptom/medium/itching - symptoms = list(/datum/symptom/itching) - short_desc = "Cause victims to itch." - long_desc = "Cause victims to itch, increasing all stats except stealth." - -/datum/disease_ability/symptom/medium/heal/weight_loss - symptoms = list(/datum/symptom/weight_loss) - short_desc = "Cause victims to lose weight." - long_desc = "Cause victims to lose weight, and make it almost impossible for them to gain nutrition from food. Reduced nutrition allows your infection to spread more easily from hosts, especially by sneezing." - -/datum/disease_ability/symptom/medium/heal/sensory_restoration - symptoms = list(/datum/symptom/sensory_restoration) - short_desc = "Regenerate eye and ear damage of victims." - long_desc = "Regenerate eye and ear damage of victims." - -/datum/disease_ability/symptom/medium/heal/mind_restoration - symptoms = list(/datum/symptom/mind_restoration) - -/******POWERFUL******/ - -/datum/disease_ability/symptom/powerful/fire - symptoms = list(/datum/symptom/fire) - -/datum/disease_ability/symptom/powerful/flesh_eating - symptoms = list(/datum/symptom/flesh_eating) - -/datum/disease_ability/symptom/powerful/genetic_mutation - symptoms = list(/datum/symptom/genetic_mutation) - cost = 8 - -/datum/disease_ability/symptom/powerful/inorganic_adaptation - symptoms = list(/datum/symptom/inorganic_adaptation) - -/datum/disease_ability/symptom/powerful/narcolepsy - symptoms = list(/datum/symptom/narcolepsy) - -/datum/disease_ability/symptom/powerful/youth - symptoms = list(/datum/symptom/youth) - short_desc = "Cause victims to become eternally young." - long_desc = "Cause victims to become eternally young. Provides boosts to all stats except transmissibility." - -/****HEALING SUBTYPE****/ - -/datum/disease_ability/symptom/powerful/heal/starlight - symptoms = list(/datum/symptom/heal/starlight) - -/datum/disease_ability/symptom/powerful/heal/oxygen - symptoms = list(/datum/symptom/oxygen) - -/datum/disease_ability/symptom/powerful/heal/chem - symptoms = list(/datum/symptom/heal/chem) - -/datum/disease_ability/symptom/powerful/heal/metabolism - symptoms = list(/datum/symptom/heal/metabolism) - short_desc = "Increase the metabolism of victims, causing them to process chemicals and grow hungry faster." - long_desc = "Increase the metabolism of victims, causing them to process chemicals twice as fast and grow hungry more quickly." - -/datum/disease_ability/symptom/powerful/heal/dark - symptoms = list(/datum/symptom/heal/darkness) - -/datum/disease_ability/symptom/powerful/heal/water - symptoms = list(/datum/symptom/heal/water) - -/datum/disease_ability/symptom/powerful/heal/plasma - symptoms = list(/datum/symptom/heal/plasma) - -/datum/disease_ability/symptom/powerful/heal/radiation - symptoms = list(/datum/symptom/heal/radiation) - -/datum/disease_ability/symptom/powerful/heal/coma - symptoms = list(/datum/symptom/heal/coma) - short_desc = "Cause victims to fall into a healing coma when hurt." - long_desc = "Cause victims to fall into a healing coma when hurt." diff --git a/code/modules/antagonists/disease/disease_datum.dm b/code/modules/antagonists/disease/disease_datum.dm deleted file mode 100644 index 17364feec5597..0000000000000 --- a/code/modules/antagonists/disease/disease_datum.dm +++ /dev/null @@ -1,103 +0,0 @@ -/datum/antagonist/disease - name = "Sentient Disease" - roundend_category = "diseases" - antagpanel_category = ANTAG_GROUP_BIOHAZARDS - show_to_ghosts = TRUE - var/disease_name = "" - -/datum/antagonist/disease/on_gain() - owner.set_assigned_role(SSjob.GetJobType(/datum/job/sentient_disease)) - owner.special_role = ROLE_SENTIENT_DISEASE - var/datum/objective/O = new /datum/objective/disease_infect() - O.owner = owner - objectives += O - - O = new /datum/objective/disease_infect_centcom() - O.owner = owner - objectives += O - - . = ..() - -/datum/antagonist/disease/greet() - . = ..() - to_chat(owner.current, span_notice("Infect members of the crew to gain adaptation points, and spread your infection further.")) - owner.announce_objectives() - -/datum/antagonist/disease/apply_innate_effects(mob/living/mob_override) - if(!istype(owner.current, /mob/camera/disease)) - var/turf/T = get_turf(owner.current) - T = T ? T : SSmapping.get_station_center() - var/mob/camera/disease/D = new /mob/camera/disease(T) - owner.transfer_to(D) - -/datum/antagonist/disease/admin_add(datum/mind/new_owner,mob/admin) - ..() - var/mob/camera/disease/D = new_owner.current - D.pick_name() - -/datum/antagonist/disease/roundend_report() - var/list/result = list() - - result += "Disease name: [disease_name]" - result += printplayer(owner) - - var/win = TRUE - var/objectives_text = "" - var/count = 1 - for(var/datum/objective/objective in objectives) - if(objective.check_completion()) - objectives_text += "
    Objective #[count]: [objective.explanation_text] [span_greentext("Success!")]" - else - objectives_text += "
    Objective #[count]: [objective.explanation_text] [span_redtext("Fail.")]" - win = FALSE - count++ - - result += objectives_text - - var/special_role_text = LOWER_TEXT(name) - - if(win) - result += span_greentext("The [special_role_text] was successful!") - else - result += span_redtext("The [special_role_text] has failed!") - - if(istype(owner.current, /mob/camera/disease)) - var/mob/camera/disease/D = owner.current - result += "[disease_name] completed the round with [D.hosts.len] infected hosts, and reached a maximum of [D.total_points] concurrent infections." - result += "[disease_name] completed the round with the following adaptations:" - var/list/adaptations = list() - for(var/V in D.purchased_abilities) - var/datum/disease_ability/A = V - adaptations += A.name - result += adaptations.Join(", ") - - return result.Join("
    ") - -/datum/antagonist/disease/get_preview_icon() - var/icon/icon = icon('icons/mob/huds/antag_hud.dmi', "virus_infected") - icon.Blend(COLOR_GREEN_GRAY, ICON_MULTIPLY) - icon.Scale(ANTAGONIST_PREVIEW_ICON_SIZE, ANTAGONIST_PREVIEW_ICON_SIZE) - return icon - -/datum/objective/disease_infect - explanation_text = "Survive and infect as many people as possible." - -/datum/objective/disease_infect/check_completion() - var/mob/camera/disease/D = owner.current - if(istype(D) && D.hosts.len) //theoretically it should not exist if it has no hosts, but better safe than sorry. - return TRUE - return FALSE - - -/datum/objective/disease_infect_centcom - explanation_text = "Ensure that at least one infected host escapes on the shuttle or an escape pod." - -/datum/objective/disease_infect_centcom/check_completion() - var/mob/camera/disease/D = owner.current - if(!istype(D)) - return FALSE - for(var/V in D.hosts) - var/mob/living/L = V - if(L.onCentCom() || L.onSyndieBase()) - return TRUE - return FALSE diff --git a/code/modules/antagonists/disease/disease_disease.dm b/code/modules/antagonists/disease/disease_disease.dm deleted file mode 100644 index 8960ac2768993..0000000000000 --- a/code/modules/antagonists/disease/disease_disease.dm +++ /dev/null @@ -1,69 +0,0 @@ -/datum/disease/advance/sentient_disease - form = "Virus" - name = "Sentient Virus" - desc = "An apparently sentient virus, extremely adaptable and resistant to outside sources of mutation." - viable_mobtypes = list(/mob/living/carbon/human) - mutable = FALSE - bypasses_immunity = TRUE - var/mob/camera/disease/overmind - var/disease_id - -/datum/disease/advance/sentient_disease/New() - ..() - GLOB.sentient_disease_instances += src - -/datum/disease/advance/sentient_disease/Destroy() - . = ..() - overmind = null - GLOB.sentient_disease_instances -= src - -/datum/disease/advance/sentient_disease/remove_disease() - if(overmind) - overmind.remove_infection(src) - ..() - -/datum/disease/advance/sentient_disease/infect(mob/living/infectee, make_copy = TRUE) - if(make_copy && overmind && (overmind.disease_template != src)) - overmind.disease_template.infect(infectee, TRUE) //get an updated version of the virus - else - ..() - - -/datum/disease/advance/sentient_disease/IsSame(datum/disease/D) - if(istype(D, /datum/disease/advance/sentient_disease)) - var/datum/disease/advance/sentient_disease/V = D - if(V.overmind == overmind) - return TRUE - return FALSE - - -/datum/disease/advance/sentient_disease/Copy() - var/datum/disease/advance/sentient_disease/D = ..() - D.overmind = overmind - D.disease_id = disease_id - return D - -/datum/disease/advance/sentient_disease/after_add() - if(overmind) - overmind.add_infection(src) - -/datum/disease/advance/sentient_disease/GenerateProperties() - ..() - src.properties["stealth"] += 6 //SD gets an extra bit of stealth, as a treat, to avoid getting caught out so early - -/datum/disease/advance/sentient_disease/GetDiseaseID() - if (!disease_id) //if we don't set this here it can reinfect people after the disease dies, since overmind.tag won't be null when the disease is alive, but will be null afterwards, thus the disease ID changes - disease_id = "[type]|[overmind?.tag]" - return disease_id - -/datum/disease/advance/sentient_disease/generate_cure() - if(cures.len) - return - var/list/not_used = advance_cures.Copy() - not_used.Cut(1, 6) // Removes the first five tiers of cures. - cures = list(pick(pick_n_take(not_used)), pick(pick_n_take(not_used))) - - // Get the cure name from the cure_id - var/datum/reagent/D1 = GLOB.chemical_reagents_list[cures[1]] - var/datum/reagent/D2 = GLOB.chemical_reagents_list[cures[2]] - cure_text = "[D1.name] and [D2.name]" diff --git a/code/modules/antagonists/disease/disease_mob.dm b/code/modules/antagonists/disease/disease_mob.dm deleted file mode 100644 index acefd0e37173c..0000000000000 --- a/code/modules/antagonists/disease/disease_mob.dm +++ /dev/null @@ -1,450 +0,0 @@ -#define FREEMOVE_TIME (2 MINUTES) - -/* -A mob of type /mob/camera/disease is an overmind coordinating at least one instance of /datum/disease/advance/sentient_disease -that has infected a host. All instances in a host will be synchronized with the stats of the overmind's disease_template. Any -samples outside of a host will retain the stats they had when they left the host, but infecting a new host will cause -the new instance inside the host to be updated to the template's stats. -*/ - -/mob/camera/disease - name = "Sentient Disease" - real_name = "Sentient Disease" - desc = "" - icon = 'icons/mob/silicon/cameramob.dmi' - icon_state = "marker" - mouse_opacity = MOUSE_OPACITY_ICON - move_on_shuttle = FALSE - invisibility = INVISIBILITY_OBSERVER - see_invisible = SEE_INVISIBLE_LIVING - layer = BELOW_MOB_LAYER - // Pale green, bright enough to have good vision - lighting_cutoff_red = 5 - lighting_cutoff_green = 35 - lighting_cutoff_blue = 20 - sight = SEE_SELF|SEE_THRU - initial_language_holder = /datum/language_holder/universal - - var/freemove = TRUE - var/freemove_end = 0 - var/freemove_end_timerid - - var/datum/action/innate/disease_adapt/adaptation_menu_action - var/datum/disease_ability/examining_ability - var/datum/browser/browser - var/browser_open = FALSE - - var/mob/living/following_host - var/list/disease_instances - var/list/hosts //this list is associative, affected_mob -> disease_instance - var/datum/disease/advance/sentient_disease/disease_template - - var/total_points = 0 - var/points = 0 - - var/last_move_tick = 0 - var/move_delay = 1 - - var/next_adaptation_time = 0 - var/adaptation_cooldown = 600 - - var/list/purchased_abilities - var/list/unpurchased_abilities - -/mob/camera/disease/Initialize(mapload) - .= ..() - - ADD_TRAIT(src, TRAIT_SIXTHSENSE, INNATE_TRAIT) //at least they'll have SOMEONE to talk to - - disease_instances = list() - hosts = list() - - purchased_abilities = list() - unpurchased_abilities = list() - - disease_template = new /datum/disease/advance/sentient_disease() - disease_template.overmind = src - qdel(SSdisease.archive_diseases[disease_template.GetDiseaseID()]) - SSdisease.archive_diseases[disease_template.GetDiseaseID()] = disease_template //important for stuff that uses disease IDs - - var/datum/atom_hud/my_hud = GLOB.huds[DATA_HUD_SENTIENT_DISEASE] - my_hud.show_to(src) - - browser = new /datum/browser(src, "disease_menu", "Adaptation Menu", 1000, 770, src) - - freemove_end = world.time + FREEMOVE_TIME - freemove_end_timerid = addtimer(CALLBACK(src, PROC_REF(infect_random_patient_zero)), FREEMOVE_TIME, TIMER_STOPPABLE) - -/mob/camera/disease/Destroy() - . = ..() - QDEL_NULL(adaptation_menu_action) - disease_template = null - for(var/V in GLOB.sentient_disease_instances) - var/datum/disease/advance/sentient_disease/S = V - if(S.overmind == src) - S.overmind = null - browser = null - -/mob/camera/disease/Login() - . = ..() - if(!. || !client) - return FALSE - if(freemove) - to_chat(src, span_warning("You have [DisplayTimeText(freemove_end - world.time)] to select your first host. Click on a human to select your host.")) - - -/mob/camera/disease/get_status_tab_items() - . = ..() - if(freemove) - . += "Host Selection Time: [round((freemove_end - world.time)/10)]s" - else - . += "Adaptation Points: [points]/[total_points]" - . += "Hosts: [disease_instances.len]" - var/adapt_ready = next_adaptation_time - world.time - if(adapt_ready > 0) - . += "Adaptation Ready: [round(adapt_ready/10, 0.1)]s" - - -/mob/camera/disease/examine(mob/user) - . = ..() - if(isobserver(user)) - . += {"[span_notice("[src] has [points]/[total_points] adaptation points.")] - [span_notice("[src] has the following unlocked:")]"} - for(var/datum/disease_ability/ability in purchased_abilities) - . += span_notice("[ability.name]") - -/mob/camera/disease/say( - message, - bubble_type, - list/spans = list(), - sanitize = TRUE, - datum/language/language, - ignore_spam = FALSE, - forced, - filterproof = FALSE, - message_range = 7, - datum/saymode/saymode, - list/message_mods = list(), -) - if(!message) - return - if(sanitize) - message = trim(copytext_char(sanitize(message), 1, MAX_MESSAGE_LEN)) - log_talk(message, LOG_SAY) - var/rendered = "[src] says, \"[message]\"" - for(var/mob/listener in GLOB.mob_list) - if(issentientdisease(listener)) - to_chat(listener, rendered) - else if(isobserver(listener)) - var/link = FOLLOW_LINK(listener, src) - to_chat(listener, "[link] [rendered]") - return - -/mob/camera/disease/Move(NewLoc, Dir = 0) - if(freemove) - forceMove(NewLoc) - else - if(world.time > (last_move_tick + move_delay)) - follow_next(Dir & NORTHWEST) - last_move_tick = world.time - -/mob/camera/disease/can_z_move(direction, turf/start, turf/destination, z_move_flags = NONE, mob/living/rider) - if(freemove) - return ..() - return FALSE - -/mob/camera/disease/Hear(message, atom/movable/speaker, message_language, raw_message, radio_freq, list/spans, list/message_mods = list(), message_range) - . = ..() - var/atom/movable/to_follow = speaker - if(radio_freq) - var/atom/movable/virtualspeaker/V = speaker - to_follow = V.source - var/link - if(to_follow in hosts) - link = FOLLOW_LINK(src, to_follow) - else - link = "" - // Create map text prior to modifying message for goonchat - if (client?.prefs.read_preference(/datum/preference/toggle/enable_runechat) && (client.prefs.read_preference(/datum/preference/toggle/enable_runechat_non_mobs) || ismob(speaker))) - create_chat_message(speaker, message_language, raw_message, spans) - // Recompose the message, because it's scrambled by default - message = compose_message(speaker, message_language, raw_message, radio_freq, spans, message_mods) - to_chat(src, "[link] [message]") - - -/mob/camera/disease/mind_initialize() - . = ..() - if(!mind.has_antag_datum(/datum/antagonist/disease)) - mind.add_antag_datum(/datum/antagonist/disease) - var/datum/atom_hud/medsensor = GLOB.huds[DATA_HUD_MEDICAL_ADVANCED] - medsensor.show_to(src) - -/mob/camera/disease/proc/pick_name() - var/static/list/taken_names - if(!taken_names) - taken_names = list("Unknown" = TRUE) - for(var/T in (subtypesof(/datum/disease) - /datum/disease/advance)) - var/datum/disease/D = T - taken_names[initial(D.name)] = TRUE - var/set_name - while(!set_name) - var/input = sanitize_name(tgui_input_text(src, "Select a name for your disease", "Select Name", max_length = MAX_NAME_LEN)) - if(!input) - set_name = "Sentient Virus" - break - if(taken_names[input]) - to_chat(src, span_warning("You cannot use the name of such a well-known disease!")) - else - set_name = input - real_name = "[set_name] (Sentient Disease)" - name = "[set_name] (Sentient Disease)" - disease_template.AssignName(set_name) - var/datum/antagonist/disease/A = mind.has_antag_datum(/datum/antagonist/disease) - if(A) - A.disease_name = set_name - -/mob/camera/disease/proc/infect_random_patient_zero(del_on_fail = TRUE) - if(!freemove) - return FALSE - var/list/possible_hosts = list() - var/list/afk_possible_hosts = list() - for(var/i in GLOB.human_list) - var/mob/living/carbon/human/H = i - var/turf/T = get_turf(H) - if((H.stat != DEAD) && T && is_station_level(T.z) && H.CanContractDisease(disease_template)) - if(H.client && !H.client.is_afk()) - possible_hosts += H - else - afk_possible_hosts += H - - shuffle_inplace(possible_hosts) - shuffle_inplace(afk_possible_hosts) - possible_hosts += afk_possible_hosts //ideally we want a not-afk person, but we will settle for an afk one if there are no others (mostly for testing) - - while(possible_hosts.len) - var/mob/living/carbon/human/target = possible_hosts[1] - if(force_infect(target)) - return TRUE - possible_hosts.Cut(1, 2) - - if(del_on_fail) - to_chat(src, span_warning("No hosts were available for your disease to infect.")) - qdel(src) - return FALSE - -/mob/camera/disease/proc/force_infect(mob/living/L) - var/datum/disease/advance/sentient_disease/V = disease_template.Copy() - var/result = L.ForceContractDisease(V, FALSE, TRUE) - if(result && freemove) - end_freemove() - return result - -/mob/camera/disease/proc/end_freemove() - if(!freemove) - return - freemove = FALSE - move_on_shuttle = TRUE - adaptation_menu_action = new /datum/action/innate/disease_adapt() - adaptation_menu_action.Grant(src) - for(var/V in GLOB.disease_ability_singletons) - unpurchased_abilities[V] = TRUE - var/datum/disease_ability/A = V - if(A.start_with && A.CanBuy(src)) - A.Buy(src, TRUE, FALSE) - if(freemove_end_timerid) - deltimer(freemove_end_timerid) - set_sight(SEE_SELF) - -/mob/camera/disease/proc/add_infection(datum/disease/advance/sentient_disease/V) - disease_instances += V - hosts[V.affected_mob] = V - total_points = max(total_points, disease_instances.len) - points += 1 - - var/image/holder = V.affected_mob.hud_list[SENTIENT_DISEASE_HUD] - var/mutable_appearance/MA = new /mutable_appearance(holder) - MA.icon_state = "virus_infected" - MA.layer = BELOW_MOB_LAYER - MA.color = COLOR_GREEN_GRAY - MA.alpha = 200 - holder.appearance = MA - var/datum/atom_hud/my_hud = GLOB.huds[DATA_HUD_SENTIENT_DISEASE] - my_hud.add_atom_to_hud(V.affected_mob) - - to_chat(src, span_notice("A new host, [V.affected_mob.real_name], has been infected.")) - - if(!following_host) - set_following(V.affected_mob) - refresh_adaptation_menu() - -/mob/camera/disease/proc/remove_infection(datum/disease/advance/sentient_disease/V) - if(QDELETED(src)) - disease_instances -= V - hosts -= V.affected_mob - else - to_chat(src, span_notice("One of your hosts, [V.affected_mob.real_name], has been purged of your infection.")) - - var/datum/atom_hud/my_hud = GLOB.huds[DATA_HUD_SENTIENT_DISEASE] - my_hud.remove_atom_from_hud(V.affected_mob) - - if(following_host == V.affected_mob) - follow_next() - - disease_instances -= V - hosts -= V.affected_mob - - if(!disease_instances.len) - to_chat(src, span_userdanger("The last of your infection has disappeared.")) - set_following(null) - qdel(src) - refresh_adaptation_menu() - -/mob/camera/disease/proc/set_following(mob/living/L) - if(following_host) - UnregisterSignal(following_host, COMSIG_MOVABLE_MOVED) - RegisterSignal(L, COMSIG_MOVABLE_MOVED, PROC_REF(follow_mob)) - following_host = L - follow_mob() - -/mob/camera/disease/proc/follow_next(reverse = FALSE) - var/index = hosts.Find(following_host) - if(index) - if(reverse) - index = index == 1 ? hosts.len : index - 1 - else - index = index == hosts.len ? 1 : index + 1 - set_following(hosts[index]) - -/mob/camera/disease/proc/follow_mob(datum/source, newloc, dir) - SIGNAL_HANDLER - - var/turf/T = get_turf(following_host) - if(T) - forceMove(T) - -/mob/camera/disease/DblClickOn(atom/A, params) - if(hosts[A]) - set_following(A) - else - ..() - -/mob/camera/disease/ClickOn(atom/A, params) - if(freemove && ishuman(A)) - var/mob/living/carbon/human/H = A - if(tgui_alert(usr, "Select [H.name] as your initial host?", "Select Host", list("Yes", "No")) != "Yes") - return - if(!freemove) - return - if(QDELETED(H) || !force_infect(H)) - to_chat(src, span_warning("[H ? H.name : "Host"] cannot be infected.")) - else - ..() - -/mob/camera/disease/proc/adapt_cooldown() - to_chat(src, span_notice("You have altered your genetic structure. You will be unable to adapt again for [DisplayTimeText(adaptation_cooldown)].")) - next_adaptation_time = world.time + adaptation_cooldown - addtimer(CALLBACK(src, PROC_REF(notify_adapt_ready)), adaptation_cooldown) - -/mob/camera/disease/proc/notify_adapt_ready() - to_chat(src, span_notice("You are now ready to adapt again.")) - refresh_adaptation_menu() - -/mob/camera/disease/proc/refresh_adaptation_menu() - if(browser_open) - adaptation_menu() - -/mob/camera/disease/proc/adaptation_menu() - var/datum/disease/advance/sentient_disease/DT = disease_template - if(!DT) - return - var/list/dat = list() - - if(examining_ability) - dat += "Back
    " - dat += "

    [examining_ability.name]

    " - dat += "[examining_ability.stat_block][examining_ability.long_desc][examining_ability.threshold_block]" - for(var/entry in examining_ability.threshold_block) - dat += "[entry]: [examining_ability.threshold_block[entry]]
    " - else - dat += "

    Disease Statistics


    \ - Resistance: [DT.totalResistance()]
    \ - Stealth: [DT.totalStealth()]
    \ - Stage Speed: [DT.totalStageSpeed()]
    \ - Transmissibility: [DT.totalTransmittable()]
    \ - Cure: [DT.cure_text]" - dat += "

    Adaptations

    \ - Points: [points] / [total_points]\ -
    \ - " - for(var/V in GLOB.disease_ability_singletons) - var/datum/disease_ability/A = V - var/purchase_text - if(unpurchased_abilities[A]) - if(A.CanBuy(src)) - purchase_text = "Purchase" - else - purchase_text = "Purchase" - else - if(A.CanRefund(src)) - purchase_text = "Refund" - else - purchase_text = "Refund" - dat += "" - - dat += "
    CostUnlockNameTypeDescription
    [A.cost][purchase_text][A.required_total_points][A.name][A.category][A.short_desc]

    Infect many hosts at once to gain adaptation points.

    Infected Hosts

    " - for(var/V in hosts) - var/mob/living/L = V - dat += "
    [L.real_name]" - - browser.set_content(dat.Join()) - browser.open() - browser_open = TRUE - -/mob/camera/disease/Topic(href, list/href_list) - ..() - if(href_list["close"]) - browser_open = FALSE - if(usr != src) - return - if(href_list["follow_instance"]) - var/mob/living/L = locate(href_list["follow_instance"]) in hosts - set_following(L) - - if(href_list["buy_ability"]) - var/datum/disease_ability/A = locate(href_list["buy_ability"]) in unpurchased_abilities - if(!istype(A)) - return - if(A.CanBuy(src)) - A.Buy(src) - adaptation_menu() - - if(href_list["refund_ability"]) - var/datum/disease_ability/A = locate(href_list["refund_ability"]) in purchased_abilities - if(!istype(A)) - return - if(A.CanRefund(src)) - A.Refund(src) - adaptation_menu() - - if(href_list["examine_ability"]) - var/datum/disease_ability/A = locate(href_list["examine_ability"]) in GLOB.disease_ability_singletons - if(!istype(A)) - return - examining_ability = A - adaptation_menu() - - if(href_list["main_menu"]) - examining_ability = null - adaptation_menu() - - -/datum/action/innate/disease_adapt - name = "Adaptation Menu" - button_icon = 'icons/mob/actions/actions_minor_antag.dmi' - button_icon_state = "disease_menu" - -/datum/action/innate/disease_adapt/Activate() - var/mob/camera/disease/D = owner - D.adaptation_menu() - -#undef FREEMOVE_TIME diff --git a/code/modules/antagonists/fugitive/fugitive_outfits.dm b/code/modules/antagonists/fugitive/fugitive_outfits.dm index ed256acae03e7..e1530ba16eddd 100644 --- a/code/modules/antagonists/fugitive/fugitive_outfits.dm +++ b/code/modules/antagonists/fugitive/fugitive_outfits.dm @@ -75,7 +75,7 @@ back = /obj/item/storage/backpack/satchel/leather shoes = /obj/item/clothing/shoes/laceup glasses = /obj/item/clothing/glasses/monocle - mask = /obj/item/clothing/mask/cigarette/pipe + mask = /obj/item/cigarette/pipe ears = /obj/item/radio/headset backpack_contents = list( diff --git a/code/modules/antagonists/fugitive/hunters/hunter.dm b/code/modules/antagonists/fugitive/hunters/hunter.dm index b75cba69e528a..ba26645364712 100644 --- a/code/modules/antagonists/fugitive/hunters/hunter.dm +++ b/code/modules/antagonists/fugitive/hunters/hunter.dm @@ -42,6 +42,10 @@ to_chat(owner, span_danger("GOOD EVENING, WE ARE PSYKER HUNTE- NO, PSYKER SHIKARIS!")) to_chat(owner, span_danger("A brainling hit us up on the holopad with an offer we could NOT pass up. We kidnap some fools for them, and in exchange we get a LIFETIME SUPPLY OF GORE.")) to_chat(owner, span_danger("Our gore supply has been running thin as of late -- How could we say no? The binge MUST go on!")) + if(HUNTER_PACK_MI13) + to_chat(owner, span_danger("Agents, we have detected a wanted fugitive in Nanotrasen controlled space.")) + to_chat(owner, span_danger("Your mission is simple. Infiltrate the facility and extract the target, dead or alive.")) + to_chat(owner, span_danger("This is a stealth infiltration mission in hostile enemy territory. Be wary, and avoid being caught if possible.")) to_chat(owner, span_boldannounce("You are not an antagonist in that you may kill whomever you please, but you can do anything to ensure the capture of the fugitives, even if that means going through the station.")) owner.announce_objectives() diff --git a/code/modules/antagonists/fugitive/hunters/hunter_gear.dm b/code/modules/antagonists/fugitive/hunters/hunter_gear.dm index 31f312ae5407b..2905dff3a0f58 100644 --- a/code/modules/antagonists/fugitive/hunters/hunter_gear.dm +++ b/code/modules/antagonists/fugitive/hunters/hunter_gear.dm @@ -7,16 +7,15 @@ icon_state = "bluespace-prison" density = TRUE resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF //ha ha no getting out!! + interaction_flags_mouse_drop = NEED_DEXTERITY /obj/machinery/fugitive_capture/examine(mob/user) . = ..() . += span_notice("Add a prisoner by dragging them into the machine.") -/obj/machinery/fugitive_capture/MouseDrop_T(mob/target, mob/user) +/obj/machinery/fugitive_capture/mouse_drop_receive(mob/target, mob/user, params) var/mob/living/fugitive_hunter = user - if(!isliving(fugitive_hunter)) - return - if(HAS_TRAIT(fugitive_hunter, TRAIT_UI_BLOCKED) || !Adjacent(fugitive_hunter) || !target.Adjacent(fugitive_hunter) || !ishuman(target)) + if(!isliving(fugitive_hunter) || !ishuman(target)) return var/mob/living/carbon/human/fugitive = target var/datum/antagonist/fugitive/fug_antag = fugitive.mind.has_antag_datum(/datum/antagonist/fugitive) diff --git a/code/modules/antagonists/fugitive/hunters/hunter_outfits.dm b/code/modules/antagonists/fugitive/hunters/hunter_outfits.dm index 7df6818cdc44a..5491251d1aa53 100644 --- a/code/modules/antagonists/fugitive/hunters/hunter_outfits.dm +++ b/code/modules/antagonists/fugitive/hunters/hunter_outfits.dm @@ -216,6 +216,56 @@ id_trim = /datum/id_trim/bounty_hunter/psykers/seer +/datum/outfit/mi13_hunter + name = "\improper MI13 Fugitive Retrieval Agent" + uniform = /obj/item/clothing/under/syndicate/sniper + back = /obj/item/storage/backpack/satchel/leather + ears = /obj/item/radio/headset/syndicate + glasses = /obj/item/clothing/glasses/sunglasses + gloves = /obj/item/clothing/gloves/combat + shoes = /obj/item/clothing/shoes/laceup + belt = /obj/item/restraints/handcuffs/cable/zipties + l_pocket = /obj/item/gun/ballistic/automatic/pistol + r_pocket = /obj/item/suppressor + id = /obj/item/card/id/advanced/chameleon/black + box = /obj/item/storage/box/survival/syndie + implants = list(/obj/item/implant/explosive) + +/datum/outfit/mi13_hunter/pre_equip(mob/living/carbon/human/agent, visualsOnly = FALSE) + backpack_contents = list() + backpack_contents += pick_weight(list(/obj/item/ammo_box/magazine/m9mm = 80, + /obj/item/ammo_box/magazine/m9mm/hp = 10, + /obj/item/ammo_box/magazine/m9mm/ap = 5, + /obj/item/ammo_box/magazine/m9mm/fire = 5, + )) + backpack_contents += pick_weight(list( + /obj/item/pen/edagger = 40, + /obj/item/knife/combat = 30, + /obj/item/assembly/flash = 30, + )) + backpack_contents += pick_weight(list( + /obj/item/grenade/c4 = 20, + /obj/item/implanter/freedom = 20, + /obj/item/clothing/mask/chameleon = 20, + /obj/item/language_manual/codespeak_manual/unlimited = 10, + /obj/item/storage/mail_counterfeit_device = 10, + /obj/item/traitor_machine_trapper = 10, + /obj/item/gun/ballistic/automatic/pistol/clandestine/fisher = 10, + )) + +/datum/outfit/mi13_hunter/post_equip(mob/living/carbon/human/agent, visualsOnly = FALSE) + if(visualsOnly) + return + var/obj/item/card/id/wearing = agent.wear_id + wearing.registered_name = agent.real_name + wearing.update_label() + +/datum/outfit/mi13_hunter/chef + name = "\improper MI13 Fugitive Retrieval Agent - Chef Disguise" + head = /obj/item/clothing/head/utility/chefhat + suit = /obj/item/clothing/suit/apron/chef + mask = /obj/item/clothing/mask/fakemoustache + //ids and ert code /obj/item/card/id/advanced/bountyhunter diff --git a/code/modules/antagonists/heretic/heretic_antag.dm b/code/modules/antagonists/heretic/heretic_antag.dm index b95b608d535f4..f31639c508c73 100644 --- a/code/modules/antagonists/heretic/heretic_antag.dm +++ b/code/modules/antagonists/heretic/heretic_antag.dm @@ -26,6 +26,7 @@ can_assign_self_objectives = TRUE default_custom_objective = "Turn a department into a testament for your dark knowledge." hardcore_random_bonus = TRUE + stinger_sound = 'sound/ambience/antag/heretic/heretic_gain.ogg' /// Whether we give this antagonist objectives on gain. var/give_objectives = TRUE /// Whether we've ascended! (Completed one of the final rituals) @@ -54,18 +55,22 @@ var/static/list/scribing_tools = typecacheof(list(/obj/item/pen, /obj/item/toy/crayon)) /// A blacklist of turfs we cannot scribe on. var/static/list/blacklisted_rune_turfs = typecacheof(list(/turf/open/space, /turf/open/openspace, /turf/open/lava, /turf/open/chasm)) + /// Controls what types of turf we can spread rust to, increases as we unlock more powerful rust abilites + var/rust_strength = 0 + /// Wether we are allowed to ascend + var/feast_of_owls = FALSE /// Static list of what each path converts to in the UI (colors are TGUI colors) - var/static/list/path_to_ui_color = list( - PATH_START = "grey", - PATH_SIDE = "green", - PATH_RUST = "brown", - PATH_FLESH = "red", - PATH_ASH = "white", - PATH_VOID = "blue", - PATH_BLADE = "label", // my favorite color is label - PATH_COSMIC = "purple", - PATH_LOCK = "yellow", - PATH_MOON = "blue", + var/static/list/path_to_ui_bgr = list( + PATH_START = "node_side", + PATH_SIDE = "node_side", + PATH_RUST = "node_rust", + PATH_FLESH = "node_flesh", + PATH_ASH = "node_ash", + PATH_VOID = "node_void", + PATH_BLADE = "node_blade", + PATH_COSMIC = "node_cosmos", + PATH_LOCK = "node_lock", + PATH_MOON = "node_moon", ) var/static/list/path_to_rune_color = list( @@ -80,10 +85,95 @@ PATH_MOON = COLOR_BLUE_LIGHT, ) + /// List that keeps track of which items have been gifted to the heretic after a cultist was sacrificed. Used to alter drop chances to reduce dupes. + var/list/unlocked_heretic_items = list( + /obj/item/melee/sickly_blade/cursed = 0, + /obj/item/clothing/neck/heretic_focus/crimson_focus = 0, + /mob/living/basic/construct/harvester/heretic = 0, + ) + /// Simpler version of above used to limit amount of loot that can be hoarded + var/rewards_given = 0 + /datum/antagonist/heretic/Destroy() LAZYNULL(sac_targets) return ..() +/datum/antagonist/heretic/proc/get_icon_of_knowledge(datum/heretic_knowledge/knowledge) + //basic icon parameters + var/icon_path = 'icons/mob/actions/actions_ecult.dmi' + var/icon_state = "eye" + var/icon_frame = knowledge.research_tree_icon_frame + var/icon_dir = knowledge.research_tree_icon_dir + //can't imagine why you would want this one, so it can't be overridden by the knowledge + var/icon_moving = 0 + + //item transmutation knowledge does not generate its own icon due to implementation difficulties, the icons have to be specified in the override vars + + //if the knowledge has a special icon, use that + if(!isnull(knowledge.research_tree_icon_path)) + icon_path = knowledge.research_tree_icon_path + icon_state = knowledge.research_tree_icon_state + + //if the knowledge is a spell, use the spell's button + else if(ispath(knowledge,/datum/heretic_knowledge/spell)) + var/datum/heretic_knowledge/spell/spell_knowledge = knowledge + var/datum/action/cooldown/spell/result_spell = spell_knowledge.spell_to_add + icon_path = result_spell.button_icon + icon_state = result_spell.button_icon_state + + //if the knowledge is a summon, use the mob sprite + else if(ispath(knowledge,/datum/heretic_knowledge/summon)) + var/datum/heretic_knowledge/summon/summon_knowledge = knowledge + var/mob/living/result_mob = summon_knowledge.mob_to_summon + icon_path = result_mob.icon + icon_state = result_mob.icon_state + + //if the knowledge is an eldritch mark, use the mark sprite + else if(ispath(knowledge,/datum/heretic_knowledge/mark)) + var/datum/heretic_knowledge/mark/mark_knowledge = knowledge + var/datum/status_effect/eldritch/mark_effect = mark_knowledge.mark_type + icon_path = mark_effect.effect_icon + icon_state = mark_effect.effect_icon_state + + //if the knowledge is an ascension, use the achievement sprite + else if(ispath(knowledge,/datum/heretic_knowledge/ultimate)) + var/datum/heretic_knowledge/ultimate/ascension_knowledge = knowledge + var/datum/award/achievement/misc/achievement = ascension_knowledge.ascension_achievement + if(!isnull(achievement)) + icon_path = achievement.icon + icon_state = achievement.icon_state + + var/list/result_parameters = list() + result_parameters["icon"] = icon_path + result_parameters["state"] = icon_state + result_parameters["frame"] = icon_frame + result_parameters["dir"] = icon_dir + result_parameters["moving"] = icon_moving + return result_parameters + +/datum/antagonist/heretic/proc/get_knowledge_data(datum/heretic_knowledge/knowledge, done) + + var/list/knowledge_data = list() + + knowledge_data["path"] = knowledge + knowledge_data["icon_params"] = get_icon_of_knowledge(knowledge) + knowledge_data["name"] = initial(knowledge.name) + knowledge_data["gainFlavor"] = initial(knowledge.gain_text) + knowledge_data["cost"] = initial(knowledge.cost) + knowledge_data["disabled"] = (!done) && (initial(knowledge.cost) > knowledge_points) + knowledge_data["bgr"] = (path_to_ui_bgr[initial(knowledge.route)] || "side") + knowledge_data["finished"] = done + knowledge_data["ascension"] = ispath(knowledge,/datum/heretic_knowledge/ultimate) + + //description of a knowledge might change, make sure we are not shown the initial() value in that case + if(done) + var/datum/heretic_knowledge/knowledge_instance = researched_knowledge[knowledge] + knowledge_data["desc"] = knowledge_instance.desc + else + knowledge_data["desc"] = initial(knowledge.desc) + + return knowledge_data + /datum/antagonist/heretic/ui_data(mob/user) var/list/data = list() @@ -91,26 +181,32 @@ data["total_sacrifices"] = total_sacrifices data["ascended"] = ascended + var/list/tiers = list() + // This should be cached in some way, but the fact that final knowledge // has to update its disabled state based on whether all objectives are complete, // makes this very difficult. I'll figure it out one day maybe + for(var/datum/heretic_knowledge/knowledge as anything in researched_knowledge) + var/list/knowledge_data = get_knowledge_data(knowledge,TRUE) + + while(initial(knowledge.depth) > tiers.len) + tiers += list(list("nodes"=list())) + + tiers[initial(knowledge.depth)]["nodes"] += list(knowledge_data) + for(var/datum/heretic_knowledge/knowledge as anything in get_researchable_knowledge()) - var/list/knowledge_data = list() - knowledge_data["path"] = knowledge - knowledge_data["name"] = initial(knowledge.name) - knowledge_data["desc"] = initial(knowledge.desc) - knowledge_data["gainFlavor"] = initial(knowledge.gain_text) - knowledge_data["cost"] = initial(knowledge.cost) - knowledge_data["disabled"] = initial(knowledge.cost) > knowledge_points + var/list/knowledge_data = get_knowledge_data(knowledge,FALSE) // Final knowledge can't be learned until all objectives are complete. if(ispath(knowledge, /datum/heretic_knowledge/ultimate)) - knowledge_data["disabled"] = !can_ascend() + knowledge_data["disabled"] ||= !can_ascend() + + while(initial(knowledge.depth) > tiers.len) + tiers += list(list("nodes"=list())) - knowledge_data["hereticPath"] = initial(knowledge.route) - knowledge_data["color"] = path_to_ui_color[initial(knowledge.route)] || "grey" + tiers[initial(knowledge.depth)]["nodes"] += list(knowledge_data) - data["learnableKnowledge"] += list(knowledge_data) + data["knowledge_tiers"] = tiers return data @@ -120,18 +216,6 @@ data["objectives"] = get_objectives() data["can_change_objective"] = can_assign_self_objectives - for(var/path in researched_knowledge) - var/list/knowledge_data = list() - var/datum/heretic_knowledge/found_knowledge = researched_knowledge[path] - knowledge_data["name"] = found_knowledge.name - knowledge_data["desc"] = found_knowledge.desc - knowledge_data["gainFlavor"] = found_knowledge.gain_text - knowledge_data["cost"] = found_knowledge.cost - knowledge_data["hereticPath"] = found_knowledge.route - knowledge_data["color"] = path_to_ui_color[found_knowledge.route] || "grey" - - data["learnedKnowledge"] += list(knowledge_data) - return data /datum/antagonist/heretic/ui_act(action, params) @@ -202,8 +286,6 @@ if(give_objectives) forge_primary_objectives() - owner.current.playsound_local(get_turf(owner.current), 'sound/ambience/antag/ecult_op.ogg', 100, FALSE, pressure_affected = FALSE, use_reverb = FALSE)//subject to change - for(var/starting_knowledge in GLOB.heretic_start_knowledge) gain_knowledge(starting_knowledge) @@ -227,8 +309,10 @@ if (!issilicon(our_mob)) GLOB.reality_smash_track.add_tracked_mind(owner) + ADD_TRAIT(our_mob, TRAIT_MANSUS_TOUCHED, REF(src)) + RegisterSignal(our_mob, COMSIG_LIVING_CULT_SACRIFICED, PROC_REF(on_cult_sacrificed)) RegisterSignals(our_mob, list(COMSIG_MOB_BEFORE_SPELL_CAST, COMSIG_MOB_SPELL_ACTIVATED), PROC_REF(on_spell_cast)) - RegisterSignal(our_mob, COMSIG_MOB_ITEM_AFTERATTACK, PROC_REF(on_item_afterattack)) + RegisterSignal(our_mob, COMSIG_USER_ITEM_INTERACTION, PROC_REF(on_item_use)) RegisterSignal(our_mob, COMSIG_MOB_LOGIN, PROC_REF(fix_influence_network)) RegisterSignal(our_mob, COMSIG_LIVING_POST_FULLY_HEAL, PROC_REF(after_fully_healed)) @@ -240,12 +324,14 @@ if (owner in GLOB.reality_smash_track.tracked_heretics) GLOB.reality_smash_track.remove_tracked_mind(owner) + REMOVE_TRAIT(our_mob, TRAIT_MANSUS_TOUCHED, REF(src)) UnregisterSignal(our_mob, list( COMSIG_MOB_BEFORE_SPELL_CAST, COMSIG_MOB_SPELL_ACTIVATED, - COMSIG_MOB_ITEM_AFTERATTACK, + COMSIG_USER_ITEM_INTERACTION, COMSIG_MOB_LOGIN, COMSIG_LIVING_POST_FULLY_HEAL, + COMSIG_LIVING_CULT_SACRIFICED, )) /datum/antagonist/heretic/on_body_transfer(mob/living/old_body, mob/living/new_body) @@ -284,26 +370,25 @@ return SPELL_CANCEL_CAST /* - * Signal proc for [COMSIG_MOB_ITEM_AFTERATTACK]. + * Signal proc for [COMSIG_USER_ITEM_INTERACTION]. * * If a heretic is holding a pen in their main hand, * and have mansus grasp active in their offhand, * they're able to draw a transmutation rune. */ -/datum/antagonist/heretic/proc/on_item_afterattack(mob/living/source, atom/target, obj/item/weapon, proximity_flag, click_parameters) +/datum/antagonist/heretic/proc/on_item_use(mob/living/source, atom/target, obj/item/weapon, click_parameters) SIGNAL_HANDLER - if(!is_type_in_typecache(weapon, scribing_tools)) - return - if(!isturf(target) || !isliving(source) || !proximity_flag) - return + return NONE + if(!isturf(target) || !isliving(source)) + return NONE var/obj/item/offhand = source.get_inactive_held_item() if(QDELETED(offhand) || !istype(offhand, /obj/item/melee/touch_attack/mansus_fist)) - return + return NONE try_draw_rune(source, target, additional_checks = CALLBACK(src, PROC_REF(check_mansus_grasp_offhand), source)) - return COMPONENT_CANCEL_ATTACK_CHAIN + return ITEM_INTERACT_SUCCESS /** * Attempt to draw a rune on [target_turf]. @@ -393,6 +478,118 @@ var/datum/heretic_knowledge/living_heart/heart_knowledge = get_knowledge(/datum/heretic_knowledge/living_heart) heart_knowledge.on_research(source, src) +/// Signal proc for [COMSIG_LIVING_CULT_SACRIFICED] to reward cultists for sacrificing a heretic +/datum/antagonist/heretic/proc/on_cult_sacrificed(mob/living/source, list/invokers) + SIGNAL_HANDLER + + for(var/mob/dead/observer/ghost in GLOB.dead_mob_list) // uhh let's find the guy to shove him back in + if((ghost.mind?.current == source) && ghost.client) // is it the same guy and do they have the same client + ghost.reenter_corpse() // shove them in! it doesnt do it automatically + + // Drop all items and splatter them around messily. + var/list/dustee_items = source.unequip_everything() + for(var/obj/item/loot as anything in dustee_items) + loot.throw_at(get_step_rand(source), 2, 4, pick(invokers), TRUE) + + // Create the blade, give it the heretic and a randomly-chosen master for the soul sword component + var/obj/item/melee/cultblade/haunted/haunted_blade = new(get_turf(source), source, pick(invokers)) + + // Cool effect for the rune as well as the item + var/obj/effect/rune/convert/conversion_rune = locate() in get_turf(source) + if(conversion_rune) + conversion_rune.gender_reveal( + outline_color = COLOR_HERETIC_GREEN, + ray_color = null, + do_float = FALSE, + do_layer = FALSE, + ) + + haunted_blade.gender_reveal(outline_color = null, ray_color = COLOR_HERETIC_GREEN) + + for(var/mob/living/culto as anything in invokers) + to_chat(culto, span_cult_large("\"A follower of the forgotten gods! You must be rewarded for such a valuable sacrifice.\"")) + + // Locate a cultist team (Is there a better way??) + var/mob/living/random_cultist = pick(invokers) + var/datum/antagonist/cult/antag = random_cultist.mind.has_antag_datum(/datum/antagonist/cult) + ASSERT(antag) + var/datum/team/cult/cult_team = antag.get_team() + + // Unlock one of 3 special items! + var/list/possible_unlocks + for(var/i in cult_team.unlocked_heretic_items) + if(cult_team.unlocked_heretic_items[i]) + continue + LAZYADD(possible_unlocks, i) + if(length(possible_unlocks)) + var/result = pick(possible_unlocks) + cult_team.unlocked_heretic_items[result] = TRUE + + for(var/datum/mind/mind as anything in cult_team.members) + if(mind.current) + SEND_SOUND(mind.current, 'sound/magic/clockwork/narsie_attack.ogg') + to_chat(mind.current, span_cult_large(span_warning("Arcane and forbidden knowledge floods your forges and archives. The cult has learned how to create the ")) + span_cult_large(span_hypnophrase("[result]!"))) + + return SILENCE_SACRIFICE_MESSAGE|DUST_SACRIFICE + +/** + * Creates an animation of the item slowly lifting up from the floor with a colored outline, then slowly drifting back down. + * Arguments: + * * outline_color: Default is between pink and light blue, is the color of the outline filter. + * * ray_color: Null by default. If not set, just copies outline. Used for the ray filter. + * * anim_time: Total time of the animation. Split into two different calls. + * * do_float: Lets you disable the sprite floating up and down. + * * do_layer: Lets you disable the layering increase. + */ +/obj/proc/gender_reveal( + outline_color = null, + ray_color = null, + anim_time = 10 SECONDS, + do_float = TRUE, + do_layer = TRUE, +) + + var/og_layer + if(do_layer) + // Layering above to stand out! + og_layer = layer + layer = ABOVE_MOB_LAYER + + // Slowly floats up, then slowly goes down. + if(do_float) + animate(src, pixel_y = 12, time = anim_time * 0.5, easing = QUAD_EASING | EASE_OUT) + animate(pixel_y = 0, time = anim_time * 0.5, easing = QUAD_EASING | EASE_IN) + + // Adding a cool outline effect + if(outline_color) + add_filter("gender_reveal_outline", 3, list("type" = "outline", "color" = outline_color, "size" = 0.5)) + // Animating it! + var/gay_filter = get_filter("gender_reveal_outline") + animate(gay_filter, alpha = 110, time = 1.5 SECONDS, loop = -1) + animate(alpha = 40, time = 2.5 SECONDS) + + // Adding a cool ray effect + if(ray_color) + add_filter(name = "gender_reveal_ray", priority = 1, params = list( + type = "rays", + size = 45, + color = ray_color, + density = 6 + )) + // Animating it! + var/ray_filter = get_filter("gender_reveal_ray") + // I understand nothing but copypaste saves lives + animate(ray_filter, offset = 100, time = 30 SECONDS, loop = -1, flags = ANIMATION_PARALLEL) + + addtimer(CALLBACK(src, PROC_REF(remove_gender_reveal_fx), og_layer), anim_time) + +/** + * Removes the non-animate effects from above proc + */ +/obj/proc/remove_gender_reveal_fx(og_layer) + remove_filter(list("gender_reveal_outline", "gender_reveal_ray")) + layer = og_layer + /** * Create our objectives for our heretic. */ @@ -477,7 +674,8 @@ succeeded = FALSE parts += "Objective #[count]: [objective.explanation_text] [objective.get_roundend_success_suffix()]" count++ - + if(feast_of_owls) + parts += span_greentext("Ascension Forsaken") if(ascended) parts += span_greentext(span_big("THE HERETIC ASCENDED!")) @@ -661,6 +859,14 @@ /datum/antagonist/heretic/proc/get_knowledge(wanted) return researched_knowledge[wanted] +/// Makes our heretic more able to rust things. +/// if side_path_only is set to TRUE, this function does nothing for rust heretics. +/datum/antagonist/heretic/proc/increase_rust_strength(side_path_only=FALSE) + if(side_path_only && get_knowledge(/datum/heretic_knowledge/limited_amount/starting/base_rust)) + return + + rust_strength++ + /** * Get a list of all rituals this heretic can invoke on a rune. * Iterates over all of our knowledge and, if we can invoke it, adds it to our list. @@ -686,6 +892,8 @@ /datum/antagonist/heretic/proc/can_ascend() if(!can_assign_self_objectives) return FALSE // We spurned the offer of the Mansus :( + if(feast_of_owls) + return FALSE // We sold our ambition for immediate power :/ for(var/datum/objective/must_be_done as anything in objectives) if(!must_be_done.check_completion()) return FALSE diff --git a/code/modules/antagonists/heretic/heretic_knowledge.dm b/code/modules/antagonists/heretic/heretic_knowledge.dm index bb59076a6bb06..6cfa8db05608f 100644 --- a/code/modules/antagonists/heretic/heretic_knowledge.dm +++ b/code/modules/antagonists/heretic/heretic_knowledge.dm @@ -38,6 +38,16 @@ var/priority = 0 /// What path is this on. If set to "null", assumed to be unreachable (or abstract). var/route + /// In case we want to override the default UI icon getter and plug in our own icon instead. + /// if research_tree_icon_path is not null, research_tree_icon_state must also be specified or things may break + var/research_tree_icon_path + var/research_tree_icon_state + var/research_tree_icon_frame = 1 + var/research_tree_icon_dir = SOUTH + /// Level of knowledge tree where this knowledge should be in the UI + var/depth = 1 + ///Determines what kind of monster ghosts will ignore from here on out. Defaults to POLL_IGNORE_HERETIC_MONSTER, but we define other types of monsters for more granularity. + var/poll_ignore_define = POLL_IGNORE_HERETIC_MONSTER /datum/heretic_knowledge/New() if(!mutually_exclusive) @@ -261,6 +271,7 @@ limit = 2 cost = 1 priority = MAX_KNOWLEDGE_PRIORITY - 5 + depth = 2 /datum/heretic_knowledge/limited_amount/starting/New() . = ..() @@ -285,6 +296,7 @@ abstract_parent_type = /datum/heretic_knowledge/mark mutually_exclusive = TRUE cost = 2 + depth = 5 /// The status effect typepath we apply on people on mansus grasp. var/datum/status_effect/eldritch/mark_type @@ -350,6 +362,7 @@ abstract_parent_type = /datum/heretic_knowledge/blade_upgrade mutually_exclusive = TRUE cost = 2 + depth = 9 /datum/heretic_knowledge/blade_upgrade/on_gain(mob/user, datum/antagonist/heretic/our_heretic) RegisterSignal(user, COMSIG_HERETIC_BLADE_ATTACK, PROC_REF(on_eldritch_blade)) @@ -523,11 +536,23 @@ abstract_parent_type = /datum/heretic_knowledge/summon /// Typepath of a mob to summon when we finish the recipe. var/mob/living/mob_to_summon - ///Determines what kind of monster ghosts will ignore from here on out. Defaults to POLL_IGNORE_HERETIC_MONSTER, but we define other types of monsters for more granularity. - var/poll_ignore_define = POLL_IGNORE_HERETIC_MONSTER /datum/heretic_knowledge/summon/on_finished_recipe(mob/living/user, list/selected_atoms, turf/loc) - var/mob/living/summoned = new mob_to_summon(loc) + summon_ritual_mob(user, loc, mob_to_summon) + +/** + * Creates the ritual mob and grabs a ghost for it + * + * * user - the mob doing the summoning + * * loc - where the summon is happening + * * mob_to_summon - either a mob instance or a mob typepath + */ +/datum/heretic_knowledge/proc/summon_ritual_mob(mob/living/user, turf/loc, mob/living/mob_to_summon) + var/mob/living/summoned + if(isliving(mob_to_summon)) + summoned = mob_to_summon + else + summoned = new mob_to_summon(loc) summoned.ai_controller?.set_ai_status(AI_STATUS_OFF) // Fade in the summon while the ghost poll is ongoing. // Also don't let them mess with the summon while waiting @@ -557,6 +582,7 @@ var/datum/antagonist/heretic_monster/heretic_monster = summoned.mind.add_antag_datum(/datum/antagonist/heretic_monster) heretic_monster.set_owner(user.mind) + summoned.RegisterSignal(user, COMSIG_LIVING_DEATH, TYPE_PROC_REF(/mob/living/, on_master_death)) var/datum/objective/heretic_summon/summon_objective = locate() in user.mind.get_all_objectives() summon_objective?.num_summoned++ @@ -577,6 +603,9 @@ mutually_exclusive = TRUE cost = 1 priority = MAX_KNOWLEDGE_PRIORITY - 10 // A pretty important midgame ritual. + depth = 6 + research_tree_icon_path = 'icons/obj/antags/eldritch.dmi' + research_tree_icon_state = "book_open" /// Whether we've done the ritual. Only doable once. var/was_completed = FALSE @@ -670,6 +699,9 @@ cost = 2 priority = MAX_KNOWLEDGE_PRIORITY + 1 // Yes, the final ritual should be ABOVE the max priority. required_atoms = list(/mob/living/carbon/human = 3) + depth = 11 + //use this to store the achievement typepath + var/datum/award/achievement/misc/ascension_achievement /datum/heretic_knowledge/ultimate/on_research(mob/user, datum/antagonist/heretic/our_heretic) . = ..() @@ -730,6 +762,9 @@ source = user, header = "A Heretic is Ascending!", ) + if(!isnull(ascension_achievement)) + user.client?.give_award(ascension_achievement, user) + heretic_datum.increase_rust_strength() return TRUE /datum/heretic_knowledge/ultimate/cleanup_atoms(list/selected_atoms) diff --git a/code/modules/antagonists/heretic/heretic_monsters.dm b/code/modules/antagonists/heretic/heretic_monsters.dm index 3f3dd32035722..fcdea51287980 100644 --- a/code/modules/antagonists/heretic/heretic_monsters.dm +++ b/code/modules/antagonists/heretic/heretic_monsters.dm @@ -8,13 +8,10 @@ antag_hud_name = "heretic_beast" suicide_cry = "MY MASTER SMILES UPON ME!!" show_in_antagpanel = FALSE + stinger_sound = 'sound/ambience/antag/heretic/heretic_gain.ogg' /// Our master (a heretic)'s mind. var/datum/mind/master -/datum/antagonist/heretic_monster/on_gain() - . = ..() - owner.current.playsound_local(get_turf(owner.current), 'sound/ambience/antag/ecult_op.ogg', 100, FALSE, pressure_affected = FALSE, use_reverb = FALSE)//subject to change - /datum/antagonist/heretic_monster/on_removal() if(!silent) if(master?.current) @@ -41,3 +38,7 @@ owner.announce_objectives() to_chat(owner, span_boldnotice("You are a [ishuman(owner.current) ? "shambling corpse returned":"horrible creation brought"] to this plane through the Gates of the Mansus.")) to_chat(owner, span_notice("Your master is [master]. Assist them to all ends.")) + + if(istype(owner.current, /mob/living/basic/construct/harvester/heretic)) + var/mob/living/basic/construct/harvester/heretic/shitcode = owner.current + shitcode.master = master diff --git a/code/modules/antagonists/heretic/items/corrupted_organs.dm b/code/modules/antagonists/heretic/items/corrupted_organs.dm new file mode 100644 index 0000000000000..3bd3ead7f6094 --- /dev/null +++ b/code/modules/antagonists/heretic/items/corrupted_organs.dm @@ -0,0 +1,249 @@ +/// Renders you unable to see people who were heretics at the time that this organ is gained +/obj/item/organ/internal/eyes/corrupt + name = "corrupt orbs" + desc = "These eyes have seen something they shouldn't have." + organ_flags = ORGAN_ORGANIC | ORGAN_EDIBLE | ORGAN_VIRGIN | ORGAN_PROMINENT + /// The override images we are applying + var/list/hallucinations + +/obj/item/organ/internal/eyes/corrupt/Initialize(mapload) + . = ..() + AddElement(/datum/element/corrupted_organ) + AddElement(/datum/element/noticable_organ, "%PRONOUN_Their eyes have wide dilated pupils, and no iris. Something is moving in the darkness.", BODY_ZONE_PRECISE_EYES) + +/obj/item/organ/internal/eyes/corrupt/on_mob_insert(mob/living/carbon/organ_owner, special, movement_flags) + . = ..() + if (!organ_owner.client) + return + + var/list/human_mobs = GLOB.human_list.Copy() + human_mobs -= organ_owner + for (var/mob/living/carbon/human/check_human as anything in human_mobs) + if (!IS_HERETIC(check_human) && !prob(5)) // Throw in some false positives + continue + var/image/invisible_man = image('icons/blanks/32x32.dmi', check_human, "nothing") + invisible_man.override = TRUE + LAZYADD(hallucinations, invisible_man) + + if (LAZYLEN(hallucinations)) + organ_owner.client.images |= hallucinations + +/obj/item/organ/internal/eyes/corrupt/on_mob_remove(mob/living/carbon/organ_owner, special) + . = ..() + if (!LAZYLEN(hallucinations)) + return + organ_owner.client?.images -= hallucinations + QDEL_NULL(hallucinations) + + +/// Sometimes speak in incomprehensible tongues +/obj/item/organ/internal/tongue/corrupt + name = "corrupt tongue" + desc = "This one tells only lies." + organ_flags = ORGAN_ORGANIC | ORGAN_EDIBLE | ORGAN_VIRGIN | ORGAN_PROMINENT + +/obj/item/organ/internal/tongue/corrupt/Initialize(mapload) + . = ..() + AddElement(/datum/element/corrupted_organ) + AddElement(/datum/element/noticable_organ, "The inside of %PRONOUN_Their mouth is full of stars.", BODY_ZONE_PRECISE_MOUTH) + +/obj/item/organ/internal/tongue/corrupt/on_mob_insert(mob/living/carbon/organ_owner, special, movement_flags) + . = ..() + RegisterSignal(organ_owner, COMSIG_MOB_SAY, PROC_REF(on_spoken)) + +/obj/item/organ/internal/tongue/corrupt/on_mob_remove(mob/living/carbon/organ_owner, special) + . = ..() + UnregisterSignal(organ_owner, COMSIG_MOB_SAY) + +/// When the mob speaks, sometimes put it in a different language +/obj/item/organ/internal/tongue/corrupt/proc/on_spoken(mob/living/organ_owner, list/speech_args) + SIGNAL_HANDLER + if (organ_owner.has_reagent(/datum/reagent/water/holywater) || prob(60)) + return + speech_args[SPEECH_LANGUAGE] = /datum/language/shadowtongue + + +/// Randomly secretes alcohol or hallucinogens when you're drinking something +/obj/item/organ/internal/liver/corrupt + name = "corrupt liver" + desc = "After what you've seen you could really go for a drink." + organ_flags = ORGAN_ORGANIC | ORGAN_EDIBLE | ORGAN_VIRGIN | ORGAN_PROMINENT + /// How much extra ingredients to add? + var/amount_added = 5 + /// What extra ingredients can we add? + var/list/extra_ingredients = list( + /datum/reagent/consumable/ethanol/pina_olivada, + /datum/reagent/consumable/ethanol/rum, + /datum/reagent/consumable/ethanol/thirteenloko, + /datum/reagent/consumable/ethanol/vodka, + /datum/reagent/consumable/superlaughter, + /datum/reagent/drug/bath_salts, + /datum/reagent/drug/blastoff, + /datum/reagent/drug/happiness, + /datum/reagent/drug/mushroomhallucinogen, + ) + +/obj/item/organ/internal/liver/corrupt/Initialize(mapload) + . = ..() + AddElement(/datum/element/corrupted_organ) + +/obj/item/organ/internal/liver/corrupt/on_mob_insert(mob/living/carbon/organ_owner, special) + . = ..() + RegisterSignal(organ_owner, COMSIG_ATOM_EXPOSE_REAGENTS, PROC_REF(on_drank)) + +/obj/item/organ/internal/liver/corrupt/on_mob_remove(mob/living/carbon/organ_owner, special) + . = ..() + UnregisterSignal(organ_owner, COMSIG_ATOM_EXPOSE_REAGENTS) + +/// If we drank something, add a little extra +/obj/item/organ/internal/liver/corrupt/proc/on_drank(atom/source, list/reagents, datum/reagents/source_reagents, methods) + SIGNAL_HANDLER + if (!(methods & INGEST)) + return + var/datum/reagents/extra_reagents = new() + extra_reagents.add_reagent(pick(extra_ingredients), amount_added) + extra_reagents.trans_to(source, amount_added, transferred_by = src, methods = INJECT) + if (prob(20)) + to_chat(source, span_warning("As you take a sip, you feel something bubbling in your stomach...")) + + +/// Rapidly become hungry if you are not digesting blood +/obj/item/organ/internal/stomach/corrupt + name = "corrupt stomach" + desc = "This parasite demands an unwholesome diet in order to be satisfied." + organ_flags = ORGAN_ORGANIC | ORGAN_EDIBLE | ORGAN_VIRGIN | ORGAN_PROMINENT + /// Do we have an unholy thirst? + var/thirst_satiated = FALSE + /// Timer for when we get thirsty again + var/thirst_timer + /// How long until we prompt the player to drink blood again? + COOLDOWN_DECLARE(message_cooldown) + +/obj/item/organ/internal/stomach/corrupt/Initialize(mapload) + . = ..() + AddElement(/datum/element/corrupted_organ) + AddElement(/datum/element/noticable_organ, "%PRONOUN_They %PRONOUN_have an unhealthy pallor.") + +/obj/item/organ/internal/stomach/corrupt/on_mob_insert(mob/living/carbon/organ_owner, special) + . = ..() + RegisterSignal(organ_owner, COMSIG_ATOM_EXPOSE_REAGENTS, PROC_REF(on_drank)) + +/obj/item/organ/internal/stomach/corrupt/on_mob_remove(mob/living/carbon/organ_owner, special) + . = ..() + UnregisterSignal(organ_owner, COMSIG_ATOM_EXPOSE_REAGENTS) + +/// Check if we drank a little blood +/obj/item/organ/internal/stomach/corrupt/proc/on_drank(atom/source, list/reagents, datum/reagents/source_reagents, methods) + SIGNAL_HANDLER + if (!(methods & INGEST)) + return + + var/contains_blood = locate(/datum/reagent/blood) in reagents + if (!contains_blood) + return + + if (!thirst_satiated) + to_chat(source, span_cult_italic("The thirst is satisfied... for now.")) + thirst_satiated = TRUE + deltimer(thirst_timer) + thirst_timer = addtimer(VARSET_CALLBACK(src, thirst_satiated, FALSE), 3 MINUTES, TIMER_STOPPABLE | TIMER_DELETE_ME) + +/obj/item/organ/internal/stomach/corrupt/handle_hunger(mob/living/carbon/human/human, seconds_per_tick, times_fired) + if (thirst_satiated || human.has_reagent(/datum/reagent/water/holywater)) + return ..() + + human.adjust_nutrition(-1 * seconds_per_tick) + + if (!COOLDOWN_FINISHED(src, message_cooldown)) + return ..() + COOLDOWN_START(src, message_cooldown, 30 SECONDS) + + var/static/list/blood_messages = list( + "Blood...", + "Everyone suddenly looks so tasty.", + "The blood...", + "There's an emptiness in you that only blood can fill.", + "You could really go for some blood right now.", + "You feel the blood rushing through your veins.", + "You think about biting someone's throat.", + "Your stomach growls and you feel a metallic taste in your mouth.", + ) + to_chat(human, span_cult_italic(pick(blood_messages))) + + return ..() + + +/// Occasionally bombards you with spooky hands and lets everyone hear your pulse. +/obj/item/organ/internal/heart/corrupt + name = "corrupt heart" + desc = "What corruption is this spreading along with the blood?" + organ_flags = ORGAN_ORGANIC | ORGAN_EDIBLE | ORGAN_VIRGIN | ORGAN_PROMINENT + /// How long until the next heart? + COOLDOWN_DECLARE(hand_cooldown) + +/obj/item/organ/internal/heart/corrupt/Initialize(mapload) + . = ..() + AddElement(/datum/element/corrupted_organ) + +/obj/item/organ/internal/heart/corrupt/on_life(seconds_per_tick, times_fired) + . = ..() + if (!COOLDOWN_FINISHED(src, hand_cooldown) || IS_IN_MANSUS(owner) || !owner.needs_heart() || !is_beating() || owner.has_reagent(/datum/reagent/water/holywater)) + return + fire_curse_hand(owner) + COOLDOWN_START(src, hand_cooldown, rand(6 SECONDS, 45 SECONDS)) // Wide variance to put you off guard + + +/// Sometimes cough out some kind of dangerous gas +/obj/item/organ/internal/lungs/corrupt + name = "corrupt lungs" + desc = "Some things SHOULD be drowned in tar." + organ_flags = ORGAN_ORGANIC | ORGAN_EDIBLE | ORGAN_VIRGIN | ORGAN_PROMINENT + /// How likely are we not to cough every time we take a breath? + var/cough_chance = 15 + /// How much gas to emit? + var/gas_amount = 30 + /// What can we cough up? + var/list/gas_types = list( + /datum/gas/bz = 30, + /datum/gas/miasma = 50, + /datum/gas/plasma = 20, + ) + +/obj/item/organ/internal/lungs/corrupt/Initialize(mapload) + . = ..() + AddElement(/datum/element/corrupted_organ) + +/obj/item/organ/internal/lungs/corrupt/check_breath(datum/gas_mixture/breath, mob/living/carbon/human/breather) + . = ..() + if (!. || IS_IN_MANSUS(owner) || breather.has_reagent(/datum/reagent/water/holywater) || !prob(cough_chance)) + return + breather.emote("cough"); + var/chosen_gas = pick_weight(gas_types) + var/datum/gas_mixture/mix_to_spawn = new() + mix_to_spawn.add_gas(pick(chosen_gas)) + mix_to_spawn.gases[chosen_gas][MOLES] = gas_amount + mix_to_spawn.temperature = breather.bodytemperature + log_atmos("[owner] coughed some gas into the air due to their corrupted lungs.", mix_to_spawn) + var/turf/open/our_turf = get_turf(breather) + our_turf.assume_air(mix_to_spawn) + + +/// It's full of worms +/obj/item/organ/internal/appendix/corrupt + name = "corrupt appendix" + desc = "What kind of dark, cosmic force is even going to bother to corrupt an appendix?" + organ_flags = ORGAN_ORGANIC | ORGAN_EDIBLE | ORGAN_VIRGIN | ORGAN_PROMINENT + /// How likely are we to spawn worms? + var/worm_chance = 2 + +/obj/item/organ/internal/appendix/corrupt/Initialize(mapload) + . = ..() + AddElement(/datum/element/corrupted_organ) + AddElement(/datum/element/noticable_organ, "%PRONOUN_Their abdomen is distended... and wiggling.", BODY_ZONE_PRECISE_GROIN) + +/obj/item/organ/internal/appendix/corrupt/on_life(seconds_per_tick, times_fired) + . = ..() + if (owner.stat != CONSCIOUS || owner.has_reagent(/datum/reagent/water/holywater) || IS_IN_MANSUS(owner) || !SPT_PROB(worm_chance, seconds_per_tick)) + return + owner.vomit(MOB_VOMIT_MESSAGE | MOB_VOMIT_HARM, vomit_type = /obj/effect/decal/cleanable/vomit/nebula/worms, distance = 0) + owner.Knockdown(0.5 SECONDS) diff --git a/code/modules/antagonists/heretic/items/eldritch_flask.dm b/code/modules/antagonists/heretic/items/eldritch_flask.dm index 95b77f956188c..409bcd473ed7d 100644 --- a/code/modules/antagonists/heretic/items/eldritch_flask.dm +++ b/code/modules/antagonists/heretic/items/eldritch_flask.dm @@ -4,5 +4,5 @@ name = "flask of eldritch essence" desc = "Toxic to the closed minded, yet refreshing to those with knowledge of the beyond." icon = 'icons/obj/antags/eldritch.dmi' - icon_state = "eldrich_flask" + icon_state = "eldritch_flask" list_reagents = list(/datum/reagent/eldritch = 50) diff --git a/code/modules/antagonists/heretic/items/eldritch_painting.dm b/code/modules/antagonists/heretic/items/eldritch_painting.dm index 5302fc1c9c148..3e9d3675b1351 100644 --- a/code/modules/antagonists/heretic/items/eldritch_painting.dm +++ b/code/modules/antagonists/heretic/items/eldritch_painting.dm @@ -1,17 +1,19 @@ // The basic eldritch painting /obj/item/wallframe/painting/eldritch - name = "The debug and a coder who slept" + name = "The Blank Canvas: A Study in Default Subtypes" + desc = "An impossible painting made of impossible paint. It should not exist in this reality." icon = 'icons/obj/signs.dmi' resistance_flags = FLAMMABLE flags_1 = NONE - icon_state = "frame-empty" + icon_state = "eldritch_painting_debug" result_path = /obj/structure/sign/painting/eldritch pixel_shift = 30 /obj/structure/sign/painting/eldritch - name = "The debug and a coder who slept" + name = "The Blank Canvas: A Study in Default Subtypes" + desc = "An impossible painting made of impossible paint. It should not exist in this reality." icon = 'icons/obj/signs.dmi' - icon_state = "frame-empty" + icon_state = "eldritch_painting_debug" custom_materials = list(/datum/material/wood =SHEET_MATERIAL_AMOUNT) resistance_flags = FLAMMABLE buildable_sign = FALSE @@ -22,7 +24,7 @@ /// The trauma the painting applies var/applied_trauma = /datum/brain_trauma/severe/pacifism /// The text that shows up when you cross the paintings path - var/text_to_display = "I should not be seeing this..." + var/text_to_display = "Some things should not be seen by mortal eyes..." /// The range of the paintings effect var/range = 7 @@ -47,12 +49,12 @@ to_chat(viewer, span_notice(text_to_display)) viewer.gain_trauma(applied_trauma, TRAUMA_RESILIENCE_SURGERY) INVOKE_ASYNC(viewer, TYPE_PROC_REF(/mob, emote), "scream") - to_chat(viewer, span_hypnophrase("As you gaze upon the painting, your mind rends to its truth!")) + to_chat(viewer, span_hypnophrase("Your mind is overcome! The painting leaves a mark on your psyche.")) /obj/structure/sign/painting/eldritch/wirecutter_act(mob/living/user, obj/item/I) if(!user.can_block_magic(MAGIC_RESISTANCE)) user.add_mood_event("ripped_eldritch_painting", /datum/mood_event/eldritch_painting) - to_chat(user, span_hypnophrase("Laughter echoes through your mind....")) + to_chat(user, span_hypnophrase("There's an itch in your brain. It's laughing at you...")) qdel(src) return ITEM_INTERACT_SUCCESS @@ -70,23 +72,23 @@ /obj/structure/sign/painting/eldritch/proc/examine_effects(mob/living/carbon/examiner) if(IS_HERETIC(examiner)) - to_chat(examiner, span_notice("Oh, what arts!")) + to_chat(examiner, span_notice("What an engrossing painting!")) else - to_chat(examiner, span_notice("Kinda strange painting.")) + to_chat(examiner, span_notice("What a strange painting...")) -// The sister and He Who Wept eldritch painting +// The Sister and He Who Wept eldritch painting /obj/item/wallframe/painting/eldritch/weeping - name = "The sister and He Who Wept" - desc = "A beautiful artwork depicting a fair lady and HIM, HE WEEPS, I WILL SEE HIM AGAIN." + name = "\improper The Sister and He Who Wept" + desc = "A beautiful painting depicting a fair lady sitting beside Him. He weeps. You will see him again." icon_state = "eldritch_painting_weeping" result_path = /obj/structure/sign/painting/eldritch/weeping /obj/structure/sign/painting/eldritch/weeping - name = "The sister and He Who Wept" - desc = "A beautiful artwork depicting a fair lady and HIM, HE WEEPS, I WILL SEE HIM AGAIN. Destroyable with wirecutters." + name = "\improper The Sister and He Who Wept" + desc = "A beautiful painting depicting a fair lady sitting beside Him. He weeps. You will see him again. Removable with wirecutters." icon_state = "eldritch_painting_weeping" applied_trauma = /datum/brain_trauma/severe/weeping - text_to_display = "Oh what arts! She is so fair, and he...HE WEEPS!!!" + text_to_display = "Such beauty! Such sorrow!" /obj/structure/sign/painting/eldritch/weeping/examine_effects(mob/living/carbon/examiner) if(!IS_HERETIC(examiner)) @@ -95,23 +97,23 @@ examiner.add_mood_event("weeping_withdrawal", /datum/mood_event/eldritch_painting/weeping_withdrawal) return - to_chat(examiner, span_notice("Oh, what arts! Just gazing upon it clears your mind.")) + to_chat(examiner, span_notice("Just gazing upon it clears your mind.")) examiner.remove_status_effect(/datum/status_effect/hallucination) examiner.add_mood_event("heretic_eldritch_painting", /datum/mood_event/eldritch_painting/weeping_heretic) // The First Desire painting, using a lot of the painting/eldritch framework /obj/item/wallframe/painting/eldritch/desire - name = "The First Desire" - desc = "A painting depicting a platter of flesh, just looking at it makes your stomach knot and mouth froth." + name = "\improper The Feast of Desire" + desc = "A painting of an elaborate feast. Despite being made entirely of rotting meat and decaying organs, the food looks very appetising." icon_state = "eldritch_painting_desire" result_path = /obj/structure/sign/painting/eldritch/desire /obj/structure/sign/painting/eldritch/desire - name = "The First Desire" - desc = "A painting depicting a platter of flesh, just looking at it makes your stomach knot and mouth froth. Destroyable with wirecutters." + name = "\improper The Feast of Desire" + desc = "A painting of an elaborate feast. Despite being made entirely of rotting meat and decaying organs, the food looks very appetising. Removable with wirecutters." icon_state = "eldritch_painting_desire" applied_trauma = /datum/brain_trauma/severe/flesh_desire - text_to_display = "What an artwork, just looking at it makes me hunger...." + text_to_display = "Just looking at this painting makes me hungry..." // The special examine interaction for this painting /obj/structure/sign/painting/eldritch/desire/examine_effects(mob/living/carbon/examiner) @@ -120,7 +122,8 @@ examiner.adjust_nutrition(50) to_chat(examiner, span_warning("You feel a searing pain in your stomach!")) examiner.adjustOrganLoss(ORGAN_SLOT_STOMACH, 5) - to_chat(examiner, span_notice("You feel less hungry, but more empty somehow?")) + to_chat(examiner, span_notice("You feel less hungry.")) + to_chat(examiner, span_warning("You should stockpile raw meat and organs, before you get hungry again.")) examiner.add_mood_event("respite_eldritch_hunger", /datum/mood_event/eldritch_painting/desire_examine) return @@ -142,19 +145,20 @@ var/organ_or_bodypart_to_spawn = pick(random_bodypart_or_organ) new organ_or_bodypart_to_spawn(drop_location()) to_chat(examiner, span_notice("A piece of flesh crawls out of the painting and flops onto the floor.")) + to_chat(examiner, span_warning("The void screams!")) // Adds a negative mood event to our heretic examiner.add_mood_event("heretic_eldritch_hunger", /datum/mood_event/eldritch_painting/desire_heretic) // Great chaparral over rolling hills, this one doesn't have the sensor type /obj/item/wallframe/painting/eldritch/vines - name = "Great chaparral over rolling hills" - desc = "A painting depicting a massive thicket, it seems to be attempting to crawl through the frame." + name = "\improper Great Chaparral Over Rolling Hills" + desc = "A painting depicting a massive thicket. This painting teems with life, and seems to strain against its frame." icon_state = "eldritch_painting_vines" result_path = /obj/structure/sign/painting/eldritch/vines /obj/structure/sign/painting/eldritch/vines - name = "Great chaparral over rolling hills" - desc = "A painting depicting a massive thicket, it seems to be attempting to crawl through the frame. Destroyable with wirecutters." + name = "\improper Great Chaparral Over Rolling Hills" + desc = "A painting depicting a massive thicket. This painting teems with life, and seems to strain against its frame. Removable with wirecutters." icon_state = "eldritch_painting_vines" applied_trauma = null // A static list of 5 pretty strong mutations, simple to expand for any admins @@ -179,28 +183,30 @@ . = ..() if(!IS_HERETIC(examiner)) new /datum/spacevine_controller(get_turf(examiner), mutations, 0, 10) - to_chat(examiner, span_hypnophrase("The thicket crawls through the frame, and you suddenly find vines beneath you...")) + to_chat(examiner, span_hypnophrase("You are transfixed for a moment by the vines on the painting.")) + to_chat(examiner, span_notice("You feel something writhing around you.")) return var/item_to_spawn = pick(items_to_spawn) - to_chat(examiner, span_notice("You picture yourself in the thicket picking flowers..")) + to_chat(examiner, span_notice("You are transfixed for a moment by the chaotic patterns the vines make.")) + to_chat(examiner, span_notice("You feel life coalesce and bloom beneath you.")) new item_to_spawn(examiner.drop_location()) examiner.add_mood_event("heretic_vines", /datum/mood_event/eldritch_painting/heretic_vines) // Lady out of gates, gives a brain trauma causing the person to scratch themselves /obj/item/wallframe/painting/eldritch/beauty - name = "Lady out of gates" - desc = "A painting depicting a perfect lady, and I must be perfect like her..." + name = "\improper Lady of the Gate" + desc = "A painting of an otherworldly being. Its thin, porceline-coloured skin is stretched tight over its strange bone structure. It has an odd beauty." icon_state = "eldritch_painting_beauty" result_path = /obj/structure/sign/painting/eldritch/beauty /obj/structure/sign/painting/eldritch/beauty - name = "Lady out of gates" - desc = "A painting depicting a perfect lady, and I must be perfect like her. Destroyable with wirecutters." + name = "\improper Lady of the Gate" + desc = "A painting of an otherworldly being. Its thin, porceline-coloured skin is stretched tight over its strange bone structure. It has an odd beauty. Removable with wirecutters." icon_state = "eldritch_painting_beauty" applied_trauma = /datum/brain_trauma/severe/eldritch_beauty - text_to_display = "Her flesh glows in the pale light, and mine can too...If it wasnt for these imperfections...." + text_to_display = "A beacon of purity, the real world seems so mundane and imperfect in comparison..." /// List of reagents to add to heretics on examine, set to mutadone by default to remove mutations var/list/reagents_to_add = list(/datum/reagent/medicine/mutadone = 5) @@ -211,35 +217,35 @@ return if(!IS_HERETIC(examiner)) - to_chat(examiner, span_hypnophrase("You feel changed, more perfect....")) + to_chat(examiner, span_hypnophrase("You are not yet pure.")) examiner.easy_random_mutate(NEGATIVE + MINOR_NEGATIVE) return - to_chat(examiner, span_notice("Your imperfections shed and you are restored.")) + to_chat(examiner, span_notice("Your imperfections are shed.")) examiner.reagents.add_reagent_list(reagents_to_add) // Climb over the rusted mountain, gives a brain trauma causing the person to randomly rust tiles beneath them /obj/item/wallframe/painting/eldritch/rust - name = "Climb over the rusted mountain" - desc = "A painting depicting something climbing a mountain of rust, it gives you an eerie feeling." + name = "\improper Master of the Rusted Mountain" + desc = "A painting of a strange being climbing a rust-coloured mountain. The brushwork is unnatural and unnerving." icon_state = "eldritch_painting_rust" result_path = /obj/structure/sign/painting/eldritch/rust /obj/structure/sign/painting/eldritch/rust - name = "Climb over the rusted mountain" - desc = "A painting depicting something climbing a mountain of rust, it gives you an eerie feeling. Destroyable with wirecutters." + name = "\improper Master of the Rusted Mountain" + desc = "A painting of a strange being climbing a rust-coloured mountain. The brushwork is unnatural and unnerving. Removable with wirecutters." icon_state = "eldritch_painting_rust" applied_trauma = /datum/brain_trauma/severe/rusting - text_to_display = "It climbs, and I will aid it...The rust calls and I shall answer..." + text_to_display = "The rust decays. The master climbs. It calls. You answer..." // The special examine interaction for this painting /obj/structure/sign/painting/eldritch/rust/examine_effects(mob/living/carbon/examiner) . = ..() if(!IS_HERETIC(examiner)) - to_chat(examiner, span_hypnophrase("It can wait...")) + to_chat(examiner, span_hypnophrase("You feel the rust. The rot.")) examiner.add_mood_event("rusted_examine", /datum/mood_event/eldritch_painting/rust_examine) return - to_chat(examiner, span_notice("You see the climber, and are inspired by it!")) + to_chat(examiner, span_notice("The painting fills you with resolve.")) examiner.add_mood_event("rusted_examine", /datum/mood_event/eldritch_painting/rust_heretic_examine) diff --git a/code/modules/antagonists/heretic/items/forbidden_book.dm b/code/modules/antagonists/heretic/items/forbidden_book.dm index 06f091c77e762..38f42b58c5e82 100644 --- a/code/modules/antagonists/heretic/items/forbidden_book.dm +++ b/code/modules/antagonists/heretic/items/forbidden_book.dm @@ -1,7 +1,8 @@ // Ye old forbidden book, the Codex Cicatrix. /obj/item/codex_cicatrix name = "Codex Cicatrix" - desc = "This book describes the secrets of the veil between worlds." + desc = "This heavy tome is full of cryptic scribbles and impossible diagrams. \ + According to legend, it can be deciphered to reveal the secrets of the veil between worlds." icon = 'icons/obj/antags/eldritch.dmi' base_icon_state = "book" icon_state = "book" @@ -29,7 +30,7 @@ . += span_notice("Can be used to tap influences for additional knowledge points.") . += span_notice("Can also be used to draw or remove transmutation runes with ease.") - . += span_notice("Additionally, it can work as a focus for your spells in a pinch, though a more specialized relic is recommended, as this may get dropped in combat.") + . += span_notice("Additionally, it can work as a focus for your spells when held.") /obj/item/codex_cicatrix/attack_self(mob/user, modifiers) . = ..() @@ -45,20 +46,16 @@ AddElement(/datum/element/heretic_focus) update_weight_class(WEIGHT_CLASS_NORMAL) -/obj/item/codex_cicatrix/afterattack(atom/target, mob/user, proximity_flag, click_parameters) - . = ..() - if(!proximity_flag) - return - +/obj/item/codex_cicatrix/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) var/datum/antagonist/heretic/heretic_datum = IS_HERETIC(user) if(!heretic_datum) - return - - if(isopenturf(target)) - var/obj/effect/heretic_influence/influence = locate(/obj/effect/heretic_influence) in target + return NONE + if(isopenturf(interacting_with)) + var/obj/effect/heretic_influence/influence = locate(/obj/effect/heretic_influence) in interacting_with if(!influence?.drain_influence_with_codex(user, src)) - heretic_datum.try_draw_rune(user, target, drawing_time = 8 SECONDS) - return TRUE + heretic_datum.try_draw_rune(user, interacting_with, drawing_time = 8 SECONDS) + return ITEM_INTERACT_BLOCKING + return NONE /// Plays a little animation that shows the book opening and closing. /obj/item/codex_cicatrix/proc/open_animation() diff --git a/code/modules/antagonists/heretic/items/heretic_armor.dm b/code/modules/antagonists/heretic/items/heretic_armor.dm index e1f7961240683..45ddea163fa71 100644 --- a/code/modules/antagonists/heretic/items/heretic_armor.dm +++ b/code/modules/antagonists/heretic/items/heretic_armor.dm @@ -51,8 +51,8 @@ name = "void hood" icon = 'icons/obj/clothing/head/helmet.dmi' worn_icon = 'icons/mob/clothing/head/helmet.dmi' - desc = "Black like tar, doesn't reflect any light. Runic symbols line the outside, \ - with each flash you loose comprehension of what you are seeing." + desc = "Black like tar, reflecting no light. Runic symbols line the outside. \ + With each flash you lose comprehension of what you are seeing." icon_state = "void_cloak" flags_inv = NONE flags_cover = NONE @@ -73,8 +73,8 @@ /obj/item/clothing/suit/hooded/cultrobes/void name = "void cloak" - desc = "Black like tar, doesn't reflect any light. Runic symbols line the outside, \ - with each flash you loose comprehension of what you are seeing." + desc = "Black like tar, reflecting no light. Runic symbols line the outside. \ + With each flash you lose comprehension of what you are seeing." icon_state = "void_cloak" inhand_icon_state = null allowed = list(/obj/item/melee/sickly_blade) diff --git a/code/modules/antagonists/heretic/items/heretic_blades.dm b/code/modules/antagonists/heretic/items/heretic_blades.dm index 81f9b4bc80a9f..ddfec8db20cf7 100644 --- a/code/modules/antagonists/heretic/items/heretic_blades.dm +++ b/code/modules/antagonists/heretic/items/heretic_blades.dm @@ -24,18 +24,37 @@ attack_verb_simple = list("attack", "slash", "stab", "slice", "tear", "lacerate", "rip", "dice", "rend") var/after_use_message = "" -/obj/item/melee/sickly_blade/attack(mob/living/M, mob/living/user) - if(!IS_HERETIC_OR_MONSTER(user)) +/obj/item/melee/sickly_blade/examine(mob/user) + . = ..() + if(!check_usability(user)) + return + + . += span_notice("You can shatter the blade to teleport to a random, (mostly) safe location by activating it in-hand.") + +/// Checks if the passed mob can use this blade without being stunned +/obj/item/melee/sickly_blade/proc/check_usability(mob/living/user) + return IS_HERETIC_OR_MONSTER(user) + +/obj/item/melee/sickly_blade/pre_attack(atom/A, mob/living/user, params) + . = ..() + if(.) + return . + if(!check_usability(user)) to_chat(user, span_danger("You feel a pulse of alien intellect lash out at your mind!")) var/mob/living/carbon/human/human_user = user human_user.AdjustParalyzed(5 SECONDS) return TRUE - return ..() + return . /obj/item/melee/sickly_blade/attack_self(mob/user) + seek_safety(user) + return ..() + +/// Attempts to teleport the passed mob to somewhere safe on the station, if they can use the blade. +/obj/item/melee/sickly_blade/proc/seek_safety(mob/user) var/turf/safe_turf = find_safe_turf(zlevels = z, extended_safety_checks = TRUE) - if(IS_HERETIC_OR_MONSTER(user)) + if(check_usability(user)) if(do_teleport(user, safe_turf, channel = TELEPORT_CHANNEL_MAGIC)) to_chat(user, span_warning("As you shatter [src], you feel a gust of energy flow through your body. [after_use_message]")) else @@ -45,22 +64,14 @@ playsound(src, SFX_SHATTER, 70, TRUE) //copied from the code for smashing a glass sheet onto the ground to turn it into a shard qdel(src) -/obj/item/melee/sickly_blade/afterattack(atom/target, mob/user, proximity_flag, click_parameters) - . = ..() - if(!isliving(target)) - return - - if(proximity_flag) +/obj/item/melee/sickly_blade/afterattack(atom/target, mob/user, click_parameters) + if(isliving(target)) SEND_SIGNAL(user, COMSIG_HERETIC_BLADE_ATTACK, target, src) - else - SEND_SIGNAL(user, COMSIG_HERETIC_RANGED_BLADE_ATTACK, target, src) - -/obj/item/melee/sickly_blade/examine(mob/user) - . = ..() - if(!IS_HERETIC_OR_MONSTER(user)) - return - . += span_notice("You can shatter the blade to teleport to a random, (mostly) safe location by activating it in-hand.") +/obj/item/melee/sickly_blade/ranged_interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + if(isliving(interacting_with)) + SEND_SIGNAL(user, COMSIG_HERETIC_RANGED_BLADE_ATTACK, interacting_with, src) + return ITEM_INTERACT_BLOCKING // Path of Rust's blade /obj/item/melee/sickly_blade/rust @@ -154,3 +165,76 @@ icon_state = "moon_blade" inhand_icon_state = "moon_blade" after_use_message = "The Moon hears your call..." + +// Path of Nar'Sie's blade +// What!? This blade is given to cultists as an altar item when they sacrifice a heretic. +// It is also given to the heretic themself if they sacrifice a cultist. +/obj/item/melee/sickly_blade/cursed + name = "\improper cursed blade" + desc = "A dark blade, cursed to bleed forever. In constant struggle between the eldritch and the dark, it is forced to accept any wielder as its master. \ + Its eye's cornea drips blood endlessly into the ground, yet its piercing gaze remains on you." + force = 25 + throwforce = 15 + block_chance = 35 + wound_bonus = 25 + bare_wound_bonus = 15 + armour_penetration = 35 + icon_state = "cursed_blade" + inhand_icon_state = "cursed_blade" + +/obj/item/melee/sickly_blade/cursed/Initialize(mapload) + . = ..() + + var/examine_text = {"Allows the scribing of blood runes of the cult of Nar'Sie. + The combination of eldritch power and Nar'Sie's might allows for vastly increased rune drawing speed, + alongside the vicious strength of the blade being more powerful than usual.\n + It can also be shattered in-hand by cultists (via right-click), teleporting them to relative safety."} + + AddComponent(/datum/component/cult_ritual_item, span_cult(examine_text), turfs_that_boost_us = /turf) // Always fast to draw! + +/obj/item/melee/sickly_blade/cursed/attack_self_secondary(mob/user) + seek_safety(user, TRUE) + +/obj/item/melee/sickly_blade/cursed/seek_safety(mob/user, secondary_attack = FALSE) + if(IS_CULTIST(user) && !secondary_attack) + return FALSE + return ..() + +/obj/item/melee/sickly_blade/cursed/check_usability(mob/living/user) + if(IS_HERETIC_OR_MONSTER(user) || IS_CULTIST(user)) + return TRUE + if(prob(15)) + to_chat(user, span_cult_large(pick("\"An untouched mind? Amusing.\"", "\" I suppose it isn't worth the effort to stop you.\"", "\"Go ahead. I don't care.\"", "\"You'll be mine soon enough.\""))) + var/obj/item/bodypart/affecting = user.get_active_hand() + if(!affecting) + return + affecting.receive_damage(burn = 5) + playsound(src, SFX_SEAR, 25, TRUE) + to_chat(user, span_danger("Your hand sizzles.")) // Nar nar might not care but their essence still doesn't like you + else if(prob(15)) + to_chat(user, span_big(span_hypnophrase("LW'NAFH'NAHOR UH'ENAH'YMG EPGOKA AH NAFL MGEMPGAH'EHYE"))) + to_chat(user, span_danger("Horrible, unintelligible utterances flood your mind!")) + user.adjustOrganLoss(ORGAN_SLOT_BRAIN, 15) // This can kill you if you ignore it + return TRUE + +/obj/item/melee/sickly_blade/cursed/equipped(mob/user, slot) + . = ..() + if(IS_HERETIC_OR_MONSTER(user)) + after_use_message = "The Mansus hears your call..." + else if(IS_CULTIST(user)) + after_use_message = "Nar'Sie hears your call..." + else + after_use_message = null + +/obj/item/melee/sickly_blade/cursed/interact_with_atom(atom/target, mob/living/user, list/modifiers) + . = ..() + + var/datum/antagonist/heretic/heretic_datum = IS_HERETIC(user) + if(!heretic_datum) + return NONE + + // Can only carve runes with it if off combat mode. + if(isopenturf(target) && !user.combat_mode) + heretic_datum.try_draw_rune(user, target, drawing_time = 14 SECONDS) // Faster than pen, slower than cicatrix + return ITEM_INTERACT_BLOCKING + return NONE diff --git a/code/modules/antagonists/heretic/items/heretic_necks.dm b/code/modules/antagonists/heretic/items/heretic_necks.dm index c1f244dfd0e8f..3f140dc99df1d 100644 --- a/code/modules/antagonists/heretic/items/heretic_necks.dm +++ b/code/modules/antagonists/heretic/items/heretic_necks.dm @@ -9,6 +9,101 @@ . = ..() AddElement(/datum/element/heretic_focus) +/obj/item/clothing/neck/heretic_focus/crimson_focus + name = "Crimson Focus" + desc = "A blood-red focusing glass that provides a link to the world beyond, and worse. Its eye is constantly twitching and gazing in all directions. It almost seems to be silently screaming..." + icon_state = "crimson_focus" + /// The aura healing component. Used to delete it when taken off. + var/datum/component/component + /// If active or not, used to add and remove its cult and heretic buffs. + var/active = FALSE + +/obj/item/clothing/neck/heretic_focus/crimson_focus/equipped(mob/living/user, slot) + . = ..() + if(!(slot & ITEM_SLOT_NECK)) + return + + var/team_color = COLOR_ADMIN_PINK + if(IS_CULTIST(user)) + var/datum/action/innate/cult/blood_magic/magic_holder = locate() in user.actions + team_color = COLOR_CULT_RED + magic_holder.magic_enhanced = TRUE + else if(IS_HERETIC_OR_MONSTER(user) && !active) + for(var/datum/action/cooldown/spell/spell_action in user.actions) + spell_action.cooldown_time *= 0.5 + active = TRUE + team_color = COLOR_GREEN + else + team_color = pick(COLOR_CULT_RED, COLOR_GREEN) + + user.add_traits(list(TRAIT_MANSUS_TOUCHED, TRAIT_BLOODY_MESS), REF(src)) + to_chat(user, span_alert("Your heart takes on a strange yet soothing irregular rhythm, and your blood feels significantly less viscous than it used to be. You're not sure if that's a good thing.")) + component = user.AddComponent( \ + /datum/component/aura_healing, \ + range = 3, \ + brute_heal = 1, \ + burn_heal = 1, \ + blood_heal = 2, \ + suffocation_heal = 5, \ + simple_heal = 0.6, \ + requires_visibility = FALSE, \ + limit_to_trait = TRAIT_MANSUS_TOUCHED, \ + healing_color = team_color, \ + ) + +/obj/item/clothing/neck/heretic_focus/crimson_focus/dropped(mob/living/user) + . = ..() + + if(!istype(user)) + return + + if(HAS_TRAIT_FROM(user, TRAIT_MANSUS_TOUCHED, REF(src))) + to_chat(user, span_notice("Your heart and blood return to their regular old rhythm and flow.")) + + if(IS_HERETIC_OR_MONSTER(user) && active) + for(var/datum/action/cooldown/spell/spell_action in user.actions) + spell_action.cooldown_time *= 2 + active = FALSE + QDEL_NULL(component) + user.remove_traits(list(TRAIT_MANSUS_TOUCHED, TRAIT_BLOODY_MESS), REF(src)) + + // If boosted enable is set, to prevent false dropped() calls from repeatedly nuking the max spells. + var/datum/action/innate/cult/blood_magic/magic_holder = locate() in user.actions + // Remove the last spell if over new limit, as we will reduce our max spell amount. Done beforehand as it causes a index out of bounds runtime otherwise. + if(magic_holder?.magic_enhanced) + QDEL_NULL(magic_holder.spells[ENHANCED_BLOODCHARGE]) + magic_holder?.magic_enhanced = FALSE + + +/obj/item/clothing/neck/heretic_focus/crimson_focus/attack_self(mob/living/user, modifiers) + . = ..() + to_chat(user, span_danger("You start tightly squeezing [src]...")) + if(!do_after(user, 1.25 SECONDS, src)) + return + to_chat(user, span_danger("[src] explodes into a shower of gore and blood, drenching your arm. You can feel the blood seeping into your skin. You inmediately feel better, but soon, the feeling turns hollow as your veins itch.")) + new /obj/effect/gibspawner/generic(get_turf(src)) + var/heal_amt = user.adjustBruteLoss(-50) + user.adjustFireLoss( -(50 - abs(heal_amt)) ) // no double dipping + + // I want it to poison the user but I also think it'd be neat if they got their juice as well. But that cancels most of the damage out. So I dunno. + user.reagents?.add_reagent(/datum/reagent/fuel/unholywater, rand(6, 10)) + user.reagents?.add_reagent(/datum/reagent/eldritch, rand(6, 10)) + qdel(src) + +/obj/item/clothing/neck/heretic_focus/crimson_focus/examine(mob/user) + . = ..() + + var/magic_dude + if(IS_CULTIST(user)) + . += span_cult_bold("This focus will allow you to store one extra spell and halve the empowering time, alongside providing a small regenerative effect.") + magic_dude = TRUE + if(IS_HERETIC_OR_MONSTER(user)) + . += span_notice("This focus will halve your spell cooldowns, alongside granting a small regenerative effect to any nearby heretics or monsters, including you.") + magic_dude = TRUE + + if(magic_dude) + . += span_red("You can also squeeze it to recover a large amount of health quickly, at a cost...") + /obj/item/clothing/neck/eldritch_amulet name = "Warm Eldritch Medallion" desc = "A strange medallion. Peering through the crystalline surface, the world around you melts away. You see your own beating heart, and the pulsing of a thousand others." @@ -52,9 +147,9 @@ w_class = WEIGHT_CLASS_SMALL -// The amulette conversion tool used by moon heretics -/obj/item/clothing/neck/heretic_focus/moon_amulette - name = "Moonlight Amulette" +// The amulet conversion tool used by moon heretics +/obj/item/clothing/neck/heretic_focus/moon_amulet + name = "Moonlight Amulet" desc = "A piece of the mind, the soul and the moon. Gazing into it makes your head spin and hear whispers of laughter and joy." icon = 'icons/obj/antags/eldritch.dmi' icon_state = "moon_amulette" @@ -62,11 +157,11 @@ // How much damage does this item do to the targets sanity? var/sanity_damage = 20 -/obj/item/clothing/neck/heretic_focus/moon_amulette/attack(mob/living/target, mob/living/user, params) +/obj/item/clothing/neck/heretic_focus/moon_amulet/attack(mob/living/target, mob/living/user, params) var/mob/living/carbon/human/hit = target if(!IS_HERETIC_OR_MONSTER(user)) user.balloon_alert(user, "you feel a presence watching you") - user.add_mood_event("Moon Amulette Insanity", /datum/mood_event/amulette_insanity) + user.add_mood_event("Moon Amulet Insanity", /datum/mood_event/amulet_insanity) user.mob_mood.set_sanity(user.mob_mood.sanity - 50) return if(hit.can_block_magic()) @@ -75,7 +170,7 @@ return if(hit.mob_mood.sanity_level < SANITY_LEVEL_UNSTABLE) user.balloon_alert(user, "their mind is too strong!") - hit.add_mood_event("Moon Amulette Insanity", /datum/mood_event/amulette_insanity) + hit.add_mood_event("Moon Amulet Insanity", /datum/mood_event/amulet_insanity) hit.mob_mood.set_sanity(hit.mob_mood.sanity - sanity_damage) else user.balloon_alert(user, "their mind bends to see the truth!") diff --git a/code/modules/antagonists/heretic/items/keyring.dm b/code/modules/antagonists/heretic/items/keyring.dm index b71015dbfe1f2..c0df68ec7cc3f 100644 --- a/code/modules/antagonists/heretic/items/keyring.dm +++ b/code/modules/antagonists/heretic/items/keyring.dm @@ -118,12 +118,12 @@ var/obj/item/card/id/card = fused_ids[cardname] shapeshift(card) -/obj/item/card/id/advanced/heretic/CtrlClick(mob/user) - . = ..() +/obj/item/card/id/advanced/heretic/item_ctrl_click(mob/user) if(!IS_HERETIC(user)) - return + return CLICK_ACTION_BLOCKING inverted = !inverted balloon_alert(user, "[inverted ? "now" : "no longer"] creating inverted rifts") + return CLICK_ACTION_SUCCESS ///Changes our appearance to the passed ID card /obj/item/card/id/advanced/heretic/proc/shapeshift(obj/item/card/id/advanced/card) @@ -171,29 +171,27 @@ playsound(drop_location(),'sound/items/eatfood.ogg', rand(10,50), TRUE) access += card.access -/obj/item/card/id/advanced/heretic/afterattack(atom/target, mob/user, proximity_flag, click_parameters) - . = ..() - if(!proximity_flag || !IS_HERETIC(user)) - return +/obj/item/card/id/advanced/heretic/interact_with_atom(atom/target, mob/living/user, list/modifiers) + if(!IS_HERETIC(user)) + return NONE if(istype(target, /obj/effect/lock_portal)) clear_portals() - return - + return ITEM_INTERACT_SUCCESS if(!istype(target, /obj/machinery/door)) - return - + return NONE var/reference_resolved = link?.resolve() if(reference_resolved == target) - return + return ITEM_INTERACT_BLOCKING if(reference_resolved) make_portal(user, reference_resolved, target) - to_chat(user, span_notice("You use [src], to link [link] and [target] together.")) + to_chat(user, span_notice("You use [src], to link [reference_resolved] and [target] together.")) link = null balloon_alert(user, "link 2/2") else link = WEAKREF(target) balloon_alert(user, "link 1/2") + return ITEM_INTERACT_SUCCESS /obj/item/card/id/advanced/heretic/Destroy() QDEL_LIST_ASSOC(fused_ids) diff --git a/code/modules/antagonists/heretic/items/labyrinth_handbook.dm b/code/modules/antagonists/heretic/items/labyrinth_handbook.dm index b3e3649763fd5..8555b60f0c393 100644 --- a/code/modules/antagonists/heretic/items/labyrinth_handbook.dm +++ b/code/modules/antagonists/heretic/items/labyrinth_handbook.dm @@ -41,24 +41,29 @@ . += span_hypnophrase("Materializes a barrier upon any tile in sight, which only you can pass through. Lasts 8 seconds.") . += span_hypnophrase("It has [uses] uses left.") -/obj/item/heretic_labyrinth_handbook/afterattack(atom/target, mob/user, proximity_flag) - . = ..() - if(IS_HERETIC(user)) - var/turf/turf_target = get_turf(target) - if(locate(barrier_type) in turf_target) - user.balloon_alert(user, "already occupied!") - return - turf_target.visible_message(span_warning("A storm of paper materializes!")) - new /obj/effect/temp_visual/paper_scatter(turf_target) - playsound(turf_target, 'sound/magic/smoke.ogg', 30) - new barrier_type(turf_target, user) - uses-- - if(uses <= 0) - to_chat(user, span_warning("[src] falls apart, turning into ash and dust!")) - qdel(src) - return - var/mob/living/carbon/human/human_user = user - to_chat(human_user, span_userdanger("Your mind burns as you stare deep into the book, a headache setting in like your brain is on fire!")) - human_user.adjustOrganLoss(ORGAN_SLOT_BRAIN, 30, 190) - human_user.add_mood_event("gates_of_mansus", /datum/mood_event/gates_of_mansus) - human_user.dropItemToGround(src) +/obj/item/heretic_labyrinth_handbook/ranged_interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + return interact_with_atom(interacting_with, user, modifiers) + +/obj/item/heretic_labyrinth_handbook/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + if(!IS_HERETIC(user)) + if(ishuman(user)) + var/mob/living/carbon/human/human_user = user + to_chat(human_user, span_userdanger("Your mind burns as you stare deep into the book, a headache setting in like your brain is on fire!")) + human_user.adjustOrganLoss(ORGAN_SLOT_BRAIN, 30, 190) + human_user.add_mood_event("gates_of_mansus", /datum/mood_event/gates_of_mansus) + human_user.dropItemToGround(src) + return ITEM_INTERACT_BLOCKING + + var/turf/turf_target = get_turf(interacting_with) + if(locate(barrier_type) in turf_target) + user.balloon_alert(user, "already occupied!") + return ITEM_INTERACT_BLOCKING + turf_target.visible_message(span_warning("A storm of paper materializes!")) + new /obj/effect/temp_visual/paper_scatter(turf_target) + playsound(turf_target, 'sound/magic/smoke.ogg', 30) + new barrier_type(turf_target, user) + uses-- + if(uses <= 0) + to_chat(user, span_warning("[src] falls apart, turning into ash and dust!")) + qdel(src) + return ITEM_INTERACT_SUCCESS diff --git a/code/modules/antagonists/heretic/items/madness_mask.dm b/code/modules/antagonists/heretic/items/madness_mask.dm index fe80465bfd0d4..b7799d685c48b 100644 --- a/code/modules/antagonists/heretic/items/madness_mask.dm +++ b/code/modules/antagonists/heretic/items/madness_mask.dm @@ -1,7 +1,7 @@ // The spooky "void" / "abyssal" / "madness" mask for heretics. /obj/item/clothing/mask/madness_mask - name = "Abyssal Mask" - desc = "A mask created from the suffering of existence. Looking down it's eyes, you notice something gazing back at you." + name = "abyssal mask" + desc = "A mask created from suffering. When you look into its eyes, it looks back." icon_state = "mad_mask" inhand_icon_state = null w_class = WEIGHT_CLASS_SMALL diff --git a/code/modules/antagonists/heretic/knife_effect.dm b/code/modules/antagonists/heretic/knife_effect.dm index 0bf5a5a4b8cf3..1bd44921cf957 100644 --- a/code/modules/antagonists/heretic/knife_effect.dm +++ b/code/modules/antagonists/heretic/knife_effect.dm @@ -1,8 +1,8 @@ // "Floating ghost blade" effect for blade heretics /obj/effect/floating_blade name = "knife" - icon = 'icons/obj/service/kitchen.dmi' - icon_state = "knife" + icon = 'icons/effects/eldritch.dmi' + icon_state = "dio_knife" layer = LOW_MOB_LAYER /// The color the knife glows around it. var/glow_color = "#ececff" @@ -11,4 +11,4 @@ . = ..() AddElement(/datum/element/movetype_handler) ADD_TRAIT(src, TRAIT_MOVE_FLYING, INNATE_TRAIT) - add_filter("knife", 2, list("type" = "outline", "color" = glow_color, "size" = 1)) + add_filter("dio_knife", 2, list("type" = "outline", "color" = glow_color, "size" = 1)) diff --git a/code/modules/antagonists/heretic/knowledge/ash_lore.dm b/code/modules/antagonists/heretic/knowledge/ash_lore.dm index fe10f7949eae5..b74569f1a1447 100644 --- a/code/modules/antagonists/heretic/knowledge/ash_lore.dm +++ b/code/modules/antagonists/heretic/knowledge/ash_lore.dm @@ -1,5 +1,7 @@ /** * # The path of Ash. + * Spell names are in this language: OLD NORDIC + * Both are related: Nordic Mythology-Yggdrassil-Ash Tree Genus-Ash * * Goes as follows: * @@ -39,6 +41,8 @@ ) result_atoms = list(/obj/item/melee/sickly_blade/ash) route = PATH_ASH + research_tree_icon_path = 'icons/obj/weapons/khopesh.dmi' + research_tree_icon_state = "ash_blade" /datum/heretic_knowledge/ashen_grasp name = "Grasp of Ash" @@ -48,6 +52,9 @@ next_knowledge = list(/datum/heretic_knowledge/spell/ash_passage) cost = 1 route = PATH_ASH + depth = 3 + research_tree_icon_path = 'icons/ui_icons/antags/heretic/knowledge.dmi' + research_tree_icon_state = "grasp_ash" /datum/heretic_knowledge/ashen_grasp/on_gain(mob/user, datum/antagonist/heretic/our_heretic) RegisterSignal(user, COMSIG_HERETIC_MANSUS_GRASP_ATTACK, PROC_REF(on_mansus_grasp)) @@ -80,6 +87,7 @@ spell_to_add = /datum/action/cooldown/spell/jaunt/ethereal_jaunt/ash cost = 1 route = PATH_ASH + depth = 4 /datum/heretic_knowledge/mark/ash_mark name = "Mark of Ash" @@ -119,6 +127,8 @@ spell_to_add = /datum/action/cooldown/spell/charged/beam/fire_blast cost = 1 route = PATH_ASH + depth = 7 + research_tree_icon_frame = 7 /datum/heretic_knowledge/mad_mask @@ -142,6 +152,9 @@ result_atoms = list(/obj/item/clothing/mask/madness_mask) cost = 1 route = PATH_ASH + research_tree_icon_path = 'icons/obj/clothing/masks.dmi' + research_tree_icon_state = "mad_mask" + depth = 8 /datum/heretic_knowledge/blade_upgrade/ash name = "Fiery Blade" @@ -150,6 +163,8 @@ His city, the people he swore to watch... and watch he did, as they all burnt to cinders." next_knowledge = list(/datum/heretic_knowledge/spell/flame_birth) route = PATH_ASH + research_tree_icon_path = 'icons/ui_icons/antags/heretic/knowledge.dmi' + research_tree_icon_state = "blade_upgrade_ash" /datum/heretic_knowledge/blade_upgrade/ash/do_melee_effects(mob/living/source, mob/living/target, obj/item/melee/sickly_blade/blade) if(source == target) @@ -173,6 +188,8 @@ spell_to_add = /datum/action/cooldown/spell/aoe/fiery_rebirth cost = 1 route = PATH_ASH + depth = 10 + research_tree_icon_frame = 5 /datum/heretic_knowledge/ultimate/ash_final name = "Ashlord's Rite" @@ -187,6 +204,7 @@ for the Nightwatcher brought forth the rite to mankind! His gaze continues, as now I am one with the flames, \ WITNESS MY ASCENSION, THE ASHY LANTERN BLAZES ONCE MORE!" route = PATH_ASH + ascension_achievement = /datum/award/achievement/misc/ash_ascension /// A static list of all traits we apply on ascension. var/static/list/traits_to_apply = list( TRAIT_BOMBIMMUNE, @@ -214,8 +232,8 @@ priority_announce( text = "[generate_heretic_text()] Fear the blaze, for the Ashlord, [user.real_name] has ascended! The flames shall consume all! [generate_heretic_text()]", title = "[generate_heretic_text()]", - sound = ANNOUNCER_SPANOMALIES, - color_override = "pink", + sound = 'sound/ambience/antag/heretic/ascend_ash.ogg', + color_override = "white", ) var/datum/action/cooldown/spell/fire_sworn/circle_spell = new(user.mind) @@ -233,6 +251,5 @@ var/datum/action/cooldown/spell/aoe/fiery_rebirth/fiery_rebirth = locate() in user.actions fiery_rebirth?.cooldown_time *= 0.16 - user.client?.give_award(/datum/award/achievement/misc/ash_ascension, user) if(length(traits_to_apply)) user.add_traits(traits_to_apply, MAGIC_TRAIT) diff --git a/code/modules/antagonists/heretic/knowledge/blade_lore.dm b/code/modules/antagonists/heretic/knowledge/blade_lore.dm index 93983c41e0d7d..357e789416d1d 100644 --- a/code/modules/antagonists/heretic/knowledge/blade_lore.dm +++ b/code/modules/antagonists/heretic/knowledge/blade_lore.dm @@ -1,5 +1,7 @@ /** * # The path of Blades. Stab stab. + * Spell names are in this language: ARAMAIC + * Both are related: Aramaic-Damascus-Blade * * Goes as follows: * @@ -43,6 +45,8 @@ result_atoms = list(/obj/item/melee/sickly_blade/dark) limit = 5 // It's the blade path, it's a given route = PATH_BLADE + research_tree_icon_path = 'icons/obj/weapons/khopesh.dmi' + research_tree_icon_state = "dark_blade" /datum/heretic_knowledge/blade_grasp name = "Grasp of the Blade" @@ -52,6 +56,9 @@ next_knowledge = list(/datum/heretic_knowledge/blade_dance) cost = 1 route = PATH_BLADE + depth = 3 + research_tree_icon_path = 'icons/ui_icons/antags/heretic/knowledge.dmi' + research_tree_icon_state = "grasp_blade" /datum/heretic_knowledge/blade_grasp/on_gain(mob/user, datum/antagonist/heretic/our_heretic) RegisterSignal(user, COMSIG_HERETIC_MANSUS_GRASP_ATTACK, PROC_REF(on_mansus_grasp)) @@ -111,6 +118,9 @@ ) cost = 1 route = PATH_BLADE + depth = 4 + research_tree_icon_path = 'icons/mob/actions/actions_ecult.dmi' + research_tree_icon_state = "shatter" /// Whether the counter-attack is ready or not. /// Used instead of cooldowns, so we can give feedback when it's ready again var/riposte_ready = TRUE @@ -231,6 +241,7 @@ spell_to_add = /datum/action/cooldown/spell/realignment cost = 1 route = PATH_BLADE + depth = 7 /// The amount of blood flow reduced per level of severity of gained bleeding wounds for Stance of the Torn Champion. #define BLOOD_FLOW_PER_SEVEIRTY -1 @@ -251,6 +262,10 @@ ) cost = 1 route = PATH_BLADE + depth = 8 + research_tree_icon_path = 'icons/effects/blood.dmi' + research_tree_icon_state = "suitblood" + research_tree_icon_dir = SOUTH /// Whether we're currently in duelist stance, gaining certain buffs (low health) var/in_duelist_stance = FALSE @@ -310,6 +325,8 @@ a flurry of blades, neither hitting their mark, for the Champion was indomitable." next_knowledge = list(/datum/heretic_knowledge/spell/furious_steel) route = PATH_BLADE + research_tree_icon_path = 'icons/ui_icons/antags/heretic/knowledge.dmi' + research_tree_icon_state = "blade_upgrade_blade" /// How much force do we apply to the offhand? var/offand_force_decrement = 0 /// How much force was the last weapon we offhanded with? If it's different, we need to re-calculate the decrement @@ -380,6 +397,7 @@ spell_to_add = /datum/action/cooldown/spell/pointed/projectile/furious_steel cost = 1 route = PATH_BLADE + depth = 10 /datum/heretic_knowledge/ultimate/blade_final name = "Maelstrom of Silver" @@ -393,6 +411,7 @@ gain_text = "The Torn Champion is freed! I will become the blade reunited, and with my greater ambition, \ I AM UNMATCHED! A STORM OF STEEL AND SILVER IS UPON US! WITNESS MY ASCENSION!" route = PATH_BLADE + ascension_achievement = /datum/award/achievement/misc/blade_ascension /datum/heretic_knowledge/ultimate/blade_final/is_valid_sacrifice(mob/living/carbon/human/sacrifice) . = ..() @@ -406,10 +425,9 @@ priority_announce( text = "[generate_heretic_text()] Master of blades, the Torn Champion's disciple, [user.real_name] has ascended! Their steel is that which will cut reality in a maelstom of silver! [generate_heretic_text()]", title = "[generate_heretic_text()]", - sound = ANNOUNCER_SPANOMALIES, + sound = 'sound/ambience/antag/heretic/ascend_blade.ogg', color_override = "pink", ) - user.client?.give_award(/datum/award/achievement/misc/blade_ascension, user) ADD_TRAIT(user, TRAIT_NEVER_WOUNDED, name) RegisterSignal(user, COMSIG_HERETIC_BLADE_ATTACK, PROC_REF(on_eldritch_blade)) user.apply_status_effect(/datum/status_effect/protective_blades/recharging, null, 8, 30, 0.25 SECONDS, 1 MINUTES) diff --git a/code/modules/antagonists/heretic/knowledge/cosmic_lore.dm b/code/modules/antagonists/heretic/knowledge/cosmic_lore.dm index 09efb5c2eb8f4..8a94aada74a67 100644 --- a/code/modules/antagonists/heretic/knowledge/cosmic_lore.dm +++ b/code/modules/antagonists/heretic/knowledge/cosmic_lore.dm @@ -1,5 +1,7 @@ /** * # The path of Cosmos. + * Spell names are in this language: SUMERIAN + * Both are related: Sumerian-Original-Primordial-Cosmic * * Goes as follows: * @@ -22,7 +24,6 @@ * Cosmic Expansion * > Sidepaths: * Eldritch Coin - * Rusted Ritual * * Creators's Gift */ @@ -39,6 +40,8 @@ ) result_atoms = list(/obj/item/melee/sickly_blade/cosmic) route = PATH_COSMIC + research_tree_icon_path = 'icons/obj/weapons/khopesh.dmi' + research_tree_icon_state = "cosmic_blade" /datum/heretic_knowledge/cosmic_grasp name = "Grasp of Cosmos" @@ -49,6 +52,9 @@ next_knowledge = list(/datum/heretic_knowledge/spell/cosmic_runes) cost = 1 route = PATH_COSMIC + depth = 3 + research_tree_icon_path = 'icons/ui_icons/antags/heretic/knowledge.dmi' + research_tree_icon_state = "grasp_cosmos" /datum/heretic_knowledge/cosmic_grasp/on_gain(mob/user, datum/antagonist/heretic/our_heretic) RegisterSignal(user, COMSIG_HERETIC_MANSUS_GRASP_ATTACK, PROC_REF(on_mansus_grasp)) @@ -79,6 +85,7 @@ spell_to_add = /datum/action/cooldown/spell/cosmic_rune cost = 1 route = PATH_COSMIC + depth = 4 /datum/heretic_knowledge/mark/cosmic_mark name = "Mark of Cosmos" @@ -108,6 +115,7 @@ spell_to_add = /datum/action/cooldown/spell/touch/star_touch cost = 1 route = PATH_COSMIC + depth = 7 /datum/heretic_knowledge/spell/star_blast name = "Star Blast" @@ -118,11 +126,13 @@ /datum/heretic_knowledge/blade_upgrade/cosmic, /datum/heretic_knowledge/reroll_targets, /datum/heretic_knowledge/curse/corrosion, + /datum/heretic_knowledge/summon/rusty, /datum/heretic_knowledge/spell/space_phase, ) spell_to_add = /datum/action/cooldown/spell/pointed/projectile/star_blast cost = 1 route = PATH_COSMIC + depth = 8 /datum/heretic_knowledge/blade_upgrade/cosmic name = "Cosmic Blade" @@ -135,6 +145,8 @@ The blades now glistened with fragmented power. I fell to the ground and wept at the beast's feet." next_knowledge = list(/datum/heretic_knowledge/spell/cosmic_expansion) route = PATH_COSMIC + research_tree_icon_path = 'icons/ui_icons/antags/heretic/knowledge.dmi' + research_tree_icon_state = "blade_upgrade_cosmos" /// Storage for the second target. var/datum/weakref/second_target /// Storage for the third target. @@ -229,11 +241,11 @@ next_knowledge = list( /datum/heretic_knowledge/ultimate/cosmic_final, /datum/heretic_knowledge/eldritch_coin, - /datum/heretic_knowledge/summon/rusty, ) spell_to_add = /datum/action/cooldown/spell/conjure/cosmic_expansion cost = 1 route = PATH_COSMIC + depth = 10 /datum/heretic_knowledge/ultimate/cosmic_final name = "Creators's Gift" @@ -251,6 +263,7 @@ I closed my eyes with my head laid against their form. I was safe. \ WITNESS MY ASCENSION!" route = PATH_COSMIC + ascension_achievement = /datum/award/achievement/misc/cosmic_ascension /// A static list of command we can use with our mob. var/static/list/star_gazer_commands = list( /datum/pet_command/idle, @@ -271,8 +284,8 @@ priority_announce( text = "[generate_heretic_text()] A Star Gazer has arrived into the station, [user.real_name] has ascended! This station is the domain of the Cosmos! [generate_heretic_text()]", title = "[generate_heretic_text()]", - sound = ANNOUNCER_SPANOMALIES, - color_override = "pink", + sound = 'sound/ambience/antag/heretic/ascend_cosmic.ogg', + color_override = "purple", ) var/mob/living/basic/heretic_summon/star_gazer/star_gazer_mob = new /mob/living/basic/heretic_summon/star_gazer(loc) star_gazer_mob.maxHealth = INFINITY @@ -297,5 +310,3 @@ var/datum/action/cooldown/spell/conjure/cosmic_expansion/cosmic_expansion_spell = locate() in user.actions cosmic_expansion_spell?.ascended = TRUE - - user.client?.give_award(/datum/award/achievement/misc/cosmic_ascension, user) diff --git a/code/modules/antagonists/heretic/knowledge/flesh_lore.dm b/code/modules/antagonists/heretic/knowledge/flesh_lore.dm index 8898ba7f59c66..e0b82651bc9d6 100644 --- a/code/modules/antagonists/heretic/knowledge/flesh_lore.dm +++ b/code/modules/antagonists/heretic/knowledge/flesh_lore.dm @@ -5,6 +5,8 @@ /** * # The path of Flesh. + * Spell names are in this language: LATIN + * Both are related: Latin-Rome-Hedonism-Flesh * * Goes as follows: * @@ -44,6 +46,8 @@ result_atoms = list(/obj/item/melee/sickly_blade/flesh) limit = 3 // Bumped up so they can arm up their ghouls too. route = PATH_FLESH + research_tree_icon_path = 'icons/obj/weapons/khopesh.dmi' + research_tree_icon_state = "flesh_blade" /datum/heretic_knowledge/limited_amount/starting/base_flesh/on_research(mob/user, datum/antagonist/heretic/our_heretic) . = ..() @@ -64,6 +68,9 @@ limit = 1 cost = 1 route = PATH_FLESH + depth = 3 + research_tree_icon_path = 'icons/ui_icons/antags/heretic/knowledge.dmi' + research_tree_icon_state = "grasp_flesh" /datum/heretic_knowledge/limited_amount/flesh_grasp/on_gain(mob/user, datum/antagonist/heretic/our_heretic) RegisterSignal(user, COMSIG_HERETIC_MANSUS_GRASP_ATTACK, PROC_REF(on_mansus_grasp)) @@ -137,6 +144,10 @@ limit = 2 cost = 1 route = PATH_FLESH + research_tree_icon_path = 'icons/ui_icons/antags/heretic/knowledge.dmi' + research_tree_icon_state = "ghoul_voiceless" + + depth = 4 /datum/heretic_knowledge/limited_amount/flesh_ghoul/recipe_snowflake_check(mob/living/user, list/atoms, list/selected_atoms, turf/loc) . = ..() @@ -227,6 +238,7 @@ spell_to_add = /datum/action/cooldown/spell/touch/flesh_surgery cost = 1 route = PATH_FLESH + depth = 7 /datum/heretic_knowledge/summon/raw_prophet name = "Raw Ritual" @@ -250,6 +262,7 @@ cost = 1 route = PATH_FLESH poll_ignore_define = POLL_IGNORE_RAW_PROPHET + depth = 8 /datum/heretic_knowledge/blade_upgrade/flesh name = "Bleeding Steel" @@ -258,6 +271,8 @@ I finally began to understand. And then, blood rained from the heavens." next_knowledge = list(/datum/heretic_knowledge/summon/stalker) route = PATH_FLESH + research_tree_icon_path = 'icons/ui_icons/antags/heretic/knowledge.dmi' + research_tree_icon_state = "blade_upgrade_flesh" ///What type of wound do we apply on hit var/wound_type = /datum/wound/slash/flesh/severe @@ -292,6 +307,7 @@ cost = 1 route = PATH_FLESH poll_ignore_define = POLL_IGNORE_STALKER + depth = 10 /datum/heretic_knowledge/ultimate/flesh_final name = "Priest's Final Hymn" @@ -308,20 +324,20 @@ Reality will bend to THE LORD OF THE NIGHT or be unraveled! WITNESS MY ASCENSION!" required_atoms = list(/mob/living/carbon/human = 4) route = PATH_FLESH + ascension_achievement = /datum/award/achievement/misc/flesh_ascension /datum/heretic_knowledge/ultimate/flesh_final/on_finished_recipe(mob/living/user, list/selected_atoms, turf/loc) . = ..() priority_announce( text = "[generate_heretic_text()] Ever coiling vortex. Reality unfolded. ARMS OUTREACHED, THE LORD OF THE NIGHT, [user.real_name] has ascended! Fear the ever twisting hand! [generate_heretic_text()]", title = "[generate_heretic_text()]", - sound = ANNOUNCER_SPANOMALIES, - color_override = "pink", + sound = 'sound/ambience/antag/heretic/ascend_flesh.ogg', + color_override = "red", ) var/datum/action/cooldown/spell/shapeshift/shed_human_form/worm_spell = new(user.mind) worm_spell.Grant(user) - user.client?.give_award(/datum/award/achievement/misc/flesh_ascension, user) var/datum/antagonist/heretic/heretic_datum = IS_HERETIC(user) var/datum/heretic_knowledge/limited_amount/flesh_grasp/grasp_ghoul = heretic_datum.get_knowledge(/datum/heretic_knowledge/limited_amount/flesh_grasp) diff --git a/code/modules/antagonists/heretic/knowledge/general_side.dm b/code/modules/antagonists/heretic/knowledge/general_side.dm index 2dc2719227b1c..27f0e11b4467b 100644 --- a/code/modules/antagonists/heretic/knowledge/general_side.dm +++ b/code/modules/antagonists/heretic/knowledge/general_side.dm @@ -12,6 +12,9 @@ ) cost = 1 route = PATH_SIDE + depth = 8 + research_tree_icon_path = 'icons/mob/actions/actions_animal.dmi' + research_tree_icon_state = "gaze" /datum/heretic_knowledge/reroll_targets/recipe_snowflake_check(mob/living/user, list/atoms, list/selected_atoms, turf/loc) diff --git a/code/modules/antagonists/heretic/knowledge/lock_lore.dm b/code/modules/antagonists/heretic/knowledge/lock_lore.dm index 0727b86bb668e..b238d6dd3c7f3 100644 --- a/code/modules/antagonists/heretic/knowledge/lock_lore.dm +++ b/code/modules/antagonists/heretic/knowledge/lock_lore.dm @@ -1,5 +1,7 @@ /** * # The path of Lock. + * Spell names are in this language: EGYPTIAN + * Both are related: Egyptian-Mysteries-Secrets-Lock * * Goes as follows: * @@ -39,6 +41,8 @@ result_atoms = list(/obj/item/melee/sickly_blade/lock) limit = 2 route = PATH_LOCK + research_tree_icon_path = 'icons/obj/weapons/khopesh.dmi' + research_tree_icon_state = "key_blade" /datum/heretic_knowledge/lock_grasp name = "Grasp of Lock" @@ -49,6 +53,9 @@ next_knowledge = list(/datum/heretic_knowledge/key_ring) cost = 1 route = PATH_LOCK + depth = 3 + research_tree_icon_path = 'icons/ui_icons/antags/heretic/knowledge.dmi' + research_tree_icon_state = "grasp_lock" /datum/heretic_knowledge/lock_grasp/on_gain(mob/user, datum/antagonist/heretic/our_heretic) RegisterSignal(user, COMSIG_HERETIC_MANSUS_GRASP_ATTACK_SECONDARY, PROC_REF(on_secondary_mansus_grasp)) @@ -111,6 +118,9 @@ ) cost = 1 route = PATH_LOCK + research_tree_icon_path = 'icons/obj/card.dmi' + research_tree_icon_state = "card_gold" + depth = 4 /datum/heretic_knowledge/mark/lock_mark name = "Mark of Lock" @@ -140,6 +150,9 @@ next_knowledge = list(/datum/heretic_knowledge/spell/burglar_finesse) cost = 1 route = PATH_LOCK + research_tree_icon_path = 'icons/obj/service/library.dmi' + research_tree_icon_state = "heretichandbook" + depth = 7 /datum/heretic_knowledge/spell/burglar_finesse name = "Burglar's Finesse" @@ -156,6 +169,7 @@ spell_to_add = /datum/action/cooldown/spell/pointed/burglar_finesse cost = 1 route = PATH_LOCK + depth = 8 /datum/heretic_knowledge/blade_upgrade/flesh/lock //basically a chance-based weeping avulsion version of the former name = "Opening Blade" @@ -164,6 +178,8 @@ next_knowledge = list(/datum/heretic_knowledge/spell/caretaker_refuge) route = PATH_LOCK wound_type = /datum/wound/slash/flesh/critical + research_tree_icon_path = 'icons/ui_icons/antags/heretic/knowledge.dmi' + research_tree_icon_state = "blade_upgrade_lock" var/chance = 35 /datum/heretic_knowledge/blade_upgrade/flesh/lock/do_melee_effects(mob/living/source, mob/living/target, obj/item/melee/sickly_blade/blade) @@ -183,6 +199,7 @@ route = PATH_LOCK spell_to_add = /datum/action/cooldown/spell/caretaker cost = 1 + depth = 10 /datum/heretic_knowledge/ultimate/lock_final name = "Unlock the Labyrinth" @@ -199,6 +216,7 @@ The Labyrinth will be Locked no more, and freedom will be ours! WITNESS US!" required_atoms = list(/mob/living/carbon/human = 3) route = PATH_LOCK + ascension_achievement = /datum/award/achievement/misc/lock_ascension /datum/heretic_knowledge/ultimate/lock_final/recipe_snowflake_check(mob/living/user, list/atoms, list/selected_atoms, turf/loc) . = ..() @@ -224,16 +242,14 @@ priority_announce( text = "Delta-class dimensional anomaly detec[generate_heretic_text()] Reality rended, torn. Gates open, doors open, [user.real_name] has ascended! Fear the tide! [generate_heretic_text()]", title = "[generate_heretic_text()]", - sound = ANNOUNCER_SPANOMALIES, - color_override = "pink", + sound = 'sound/ambience/antag/heretic/ascend_knock.ogg', + color_override = "yellow", ) - user.client?.give_award(/datum/award/achievement/misc/lock_ascension, user) // buffs var/datum/action/cooldown/spell/shapeshift/eldritch/ascension/transform_spell = new(user.mind) transform_spell.Grant(user) - user.client?.give_award(/datum/award/achievement/misc/lock_ascension, user) var/datum/antagonist/heretic/heretic_datum = IS_HERETIC(user) var/datum/heretic_knowledge/blade_upgrade/flesh/lock/blade_upgrade = heretic_datum.get_knowledge(/datum/heretic_knowledge/blade_upgrade/flesh/lock) blade_upgrade.chance += 30 diff --git a/code/modules/antagonists/heretic/knowledge/moon_lore.dm b/code/modules/antagonists/heretic/knowledge/moon_lore.dm index 723599ad262f5..5ba55b64058cb 100644 --- a/code/modules/antagonists/heretic/knowledge/moon_lore.dm +++ b/code/modules/antagonists/heretic/knowledge/moon_lore.dm @@ -1,5 +1,7 @@ /** * # The path of Moon. + * Spell names are in this language: ANCIENT HEBREW + * Both are related: Ancient Hebrew-Moon Mysticism-Moon * * Goes as follows: * @@ -13,7 +15,7 @@ * Mark of Moon * Ritual of Knowledge * Lunar Parade - * Moonlight Amulette + * Moonlight Amulet * > Sidepaths: * Curse of Paralasys * Unfathomable Curio @@ -39,6 +41,8 @@ ) result_atoms = list(/obj/item/melee/sickly_blade/moon) route = PATH_MOON + research_tree_icon_path = 'icons/obj/weapons/khopesh.dmi' + research_tree_icon_state = "moon_blade" /datum/heretic_knowledge/base_moon/on_gain(mob/user, datum/antagonist/heretic/our_heretic) add_traits(user ,TRAIT_EMPATH, REF(src)) @@ -51,6 +55,9 @@ next_knowledge = list(/datum/heretic_knowledge/spell/moon_smile) cost = 1 route = PATH_MOON + depth = 3 + research_tree_icon_path = 'icons/ui_icons/antags/heretic/knowledge.dmi' + research_tree_icon_state = "grasp_moon" /datum/heretic_knowledge/moon_grasp/on_gain(mob/user, datum/antagonist/heretic/our_heretic) RegisterSignal(user, COMSIG_HERETIC_MANSUS_GRASP_ATTACK, PROC_REF(on_mansus_grasp)) @@ -82,6 +89,7 @@ spell_to_add = /datum/action/cooldown/spell/pointed/moon_smile cost = 1 route = PATH_MOON + depth = 4 /datum/heretic_knowledge/mark/moon_mark name = "Mark of Moon" @@ -103,15 +111,16 @@ desc = "Grants you Lunar Parade, a spell that - after a short charge - sends a carnival forward \ when hitting someone they are forced to join the parade and suffer hallucinations." gain_text = "The music like a reflection of the soul compelled them, like moths to a flame they followed" - next_knowledge = list(/datum/heretic_knowledge/moon_amulette) + next_knowledge = list(/datum/heretic_knowledge/moon_amulet) spell_to_add = /datum/action/cooldown/spell/pointed/projectile/moon_parade cost = 1 route = PATH_MOON + depth = 7 -/datum/heretic_knowledge/moon_amulette - name = "Moonlight Amulette" - desc = "Allows you to transmute 2 sheets of glass, a heart and a tie to create a Moonlight Amulette. \ +/datum/heretic_knowledge/moon_amulet + name = "Moonlight Amulet" + desc = "Allows you to transmute 2 sheets of glass, a heart and a tie to create a Moonlight Amulet. \ If the item is used on someone with low sanity they go berserk attacking everyone, \ if their sanity isn't low enough it decreases their mood." gain_text = "At the head of the parade he stood, the moon condensed into one mass, a reflection of the soul." @@ -127,9 +136,13 @@ /obj/item/stack/sheet/glass = 2, /obj/item/clothing/neck/tie = 1, ) - result_atoms = list(/obj/item/clothing/neck/heretic_focus/moon_amulette) + result_atoms = list(/obj/item/clothing/neck/heretic_focus/moon_amulet) cost = 1 route = PATH_MOON + depth = 8 + research_tree_icon_path = 'icons/obj/antags/eldritch.dmi' + research_tree_icon_state = "moon_amulette" + research_tree_icon_frame = 9 /datum/heretic_knowledge/blade_upgrade/moon name = "Moonlight Blade" @@ -137,6 +150,8 @@ gain_text = "His wit was sharp as a blade, cutting through the lie to bring us joy." next_knowledge = list(/datum/heretic_knowledge/spell/moon_ringleader) route = PATH_MOON + research_tree_icon_path = 'icons/ui_icons/antags/heretic/knowledge.dmi' + research_tree_icon_state = "blade_upgrade_moon" /datum/heretic_knowledge/blade_upgrade/moon/do_melee_effects(mob/living/source, mob/living/target, obj/item/melee/sickly_blade/blade) if(source == target) @@ -164,6 +179,8 @@ spell_to_add = /datum/action/cooldown/spell/aoe/moon_ringleader cost = 1 route = PATH_MOON + depth = 10 + research_tree_icon_frame = 5 /datum/heretic_knowledge/ultimate/moon_final name = "The Last Act" @@ -171,11 +188,12 @@ Bring 3 corpses with more than 50 brain damage to a transmutation rune to complete the ritual. \ When completed, you become a harbinger of madness gaining and aura of passive sanity decrease, \ confusion increase and, if their sanity is low enough, brain damage and blindness. \ - 1/5th of the crew will turn into acolytes and follow your command, they will all recieve moonlight amulettes." + 1/5th of the crew will turn into acolytes and follow your command, they will all receive moonlight amulets." gain_text = "We dived down towards the crowd, his soul splitting off in search of greater venture \ for where the Ringleader had started the parade, I shall continue it unto the suns demise \ WITNESS MY ASCENSION, THE MOON SMILES ONCE MORE AND FOREVER MORE IT SHALL!" route = PATH_MOON + ascension_achievement = /datum/award/achievement/misc/moon_ascension /datum/heretic_knowledge/ultimate/moon_final/is_valid_sacrifice(mob/living/sacrifice) @@ -188,14 +206,16 @@ /datum/heretic_knowledge/ultimate/moon_final/on_finished_recipe(mob/living/user, list/selected_atoms, turf/loc) . = ..() - var/datum/antagonist/heretic/heretic_datum = IS_HERETIC(user) - priority_announce("[generate_heretic_text()] Laugh, for the ringleader [user.real_name] has ascended! \ - The truth shall finally devour the lie! [generate_heretic_text()]","[generate_heretic_text()]", ANNOUNCER_SPANOMALIES) + priority_announce( + text = "[generate_heretic_text()] Laugh, for the ringleader [user.real_name] has ascended! \ + The truth shall finally devour the lie! [generate_heretic_text()]", + title = "[generate_heretic_text()]", + sound = 'sound/ambience/antag/heretic/ascend_moon.ogg', + color_override = "blue", + ) - user.client?.give_award(/datum/award/achievement/misc/moon_ascension, user) ADD_TRAIT(user, TRAIT_MADNESS_IMMUNE, REF(src)) - heretic_datum.add_team_hud(user, /datum/antagonist/lunatic) - + user.mind.add_antag_datum(/datum/antagonist/lunatic/master) RegisterSignal(user, COMSIG_LIVING_LIFE, PROC_REF(on_life)) // Roughly 1/5th of the station will rise up as lunatics to the heretic @@ -224,7 +244,7 @@ continue var/datum/antagonist/lunatic/lunatic = crewmate.mind.add_antag_datum(/datum/antagonist/lunatic) lunatic.set_master(user.mind, user) - var/obj/item/clothing/neck/heretic_focus/moon_amulette/amulet = new(crewmate_turf) + var/obj/item/clothing/neck/heretic_focus/moon_amulet/amulet = new(crewmate_turf) var/static/list/slots = list( "neck" = ITEM_SLOT_NECK, "hands" = ITEM_SLOT_HANDS, diff --git a/code/modules/antagonists/heretic/knowledge/rust_lore.dm b/code/modules/antagonists/heretic/knowledge/rust_lore.dm index 8d577b1992a2e..5e96119135f71 100644 --- a/code/modules/antagonists/heretic/knowledge/rust_lore.dm +++ b/code/modules/antagonists/heretic/knowledge/rust_lore.dm @@ -1,5 +1,6 @@ /** * # The path of Rust. + * Spell names are in this language: OLD SLAVIC * * Goes as follows: * @@ -42,19 +43,26 @@ ) result_atoms = list(/obj/item/melee/sickly_blade/rust) route = PATH_RUST + research_tree_icon_path = 'icons/obj/weapons/khopesh.dmi' + research_tree_icon_state = "rust_blade" /datum/heretic_knowledge/rust_fist name = "Grasp of Rust" desc = "Your Mansus Grasp will deal 500 damage to non-living matter and rust any surface it touches. \ - Already rusted surfaces are destroyed. Surfaces and structures can only be rusted by using Right-Click." + Already rusted surfaces are destroyed. Surfaces and structures can only be rusted by using Right-Click. \ + Allows you to rust basic iron walls and floors." gain_text = "On the ceiling of the Mansus, rust grows as moss does on a stone." next_knowledge = list(/datum/heretic_knowledge/rust_regen) cost = 1 route = PATH_RUST + depth = 3 + research_tree_icon_path = 'icons/ui_icons/antags/heretic/knowledge.dmi' + research_tree_icon_state = "grasp_rust" /datum/heretic_knowledge/rust_fist/on_gain(mob/user, datum/antagonist/heretic/our_heretic) RegisterSignal(user, COMSIG_HERETIC_MANSUS_GRASP_ATTACK, PROC_REF(on_mansus_grasp)) RegisterSignal(user, COMSIG_HERETIC_MANSUS_GRASP_ATTACK_SECONDARY, PROC_REF(on_secondary_mansus_grasp)) + our_heretic.increase_rust_strength() /datum/heretic_knowledge/rust_fist/on_lose(mob/user, datum/antagonist/heretic/our_heretic) UnregisterSignal(user, list(COMSIG_HERETIC_MANSUS_GRASP_ATTACK, COMSIG_HERETIC_MANSUS_GRASP_ATTACK_SECONDARY)) @@ -65,18 +73,18 @@ if(!issilicon(target) && !(target.mob_biotypes & MOB_ROBOTIC)) return - target.rust_heretic_act() + source.do_rust_heretic_act(target) /datum/heretic_knowledge/rust_fist/proc/on_secondary_mansus_grasp(mob/living/source, atom/target) SIGNAL_HANDLER // Rusting an airlock causes it to lose power, mostly to prevent the airlock from shocking you. - // This is a bit of a hack, but fixing this would require the enture wire cut/pulse system to be reworked. + // This is a bit of a hack, but fixing this would require the entire wire cut/pulse system to be reworked. if(istype(target, /obj/machinery/door/airlock)) var/obj/machinery/door/airlock/airlock = target airlock.loseMainPower() - target.rust_heretic_act() + source.do_rust_heretic_act(target) return COMPONENT_USE_HAND /datum/heretic_knowledge/rust_regen @@ -91,66 +99,30 @@ ) cost = 1 route = PATH_RUST + research_tree_icon_path = 'icons/effects/eldritch.dmi' + research_tree_icon_state = "cloud_swirl" + depth = 4 /datum/heretic_knowledge/rust_regen/on_gain(mob/user, datum/antagonist/heretic/our_heretic) - RegisterSignal(user, COMSIG_MOVABLE_MOVED, PROC_REF(on_move)) - RegisterSignal(user, COMSIG_LIVING_LIFE, PROC_REF(on_life)) + user.AddElement(/datum/element/leeching_walk) /datum/heretic_knowledge/rust_regen/on_lose(mob/user, datum/antagonist/heretic/our_heretic) - UnregisterSignal(user, list(COMSIG_MOVABLE_MOVED, COMSIG_LIVING_LIFE)) - -/* - * Signal proc for [COMSIG_MOVABLE_MOVED]. - * - * Checks if we should have baton resistance on the new turf. - */ -/datum/heretic_knowledge/rust_regen/proc/on_move(mob/source, atom/old_loc, dir, forced, list/old_locs) - SIGNAL_HANDLER - - var/turf/mover_turf = get_turf(source) - if(HAS_TRAIT(mover_turf, TRAIT_RUSTY)) - ADD_TRAIT(source, TRAIT_BATON_RESISTANCE, type) - return - - REMOVE_TRAIT(source, TRAIT_BATON_RESISTANCE, type) - -/** - * Signal proc for [COMSIG_LIVING_LIFE]. - * - * Gradually heals the heretic ([source]) on rust, - * including baton knockdown and stamina damage. - */ -/datum/heretic_knowledge/rust_regen/proc/on_life(mob/living/source, seconds_per_tick, times_fired) - SIGNAL_HANDLER - - var/turf/our_turf = get_turf(source) - if(!HAS_TRAIT(our_turf, TRAIT_RUSTY)) - return - - // Heals all damage + Stamina - var/need_mob_update = FALSE - need_mob_update += source.adjustBruteLoss(-2, updating_health = FALSE) - need_mob_update += source.adjustFireLoss(-2, updating_health = FALSE) - need_mob_update += source.adjustToxLoss(-2, updating_health = FALSE, forced = TRUE) // Slimes are people too - need_mob_update += source.adjustOxyLoss(-0.5, updating_health = FALSE) - need_mob_update += source.adjustStaminaLoss(-2, updating_stamina = FALSE) - if(need_mob_update) - source.updatehealth() - // Reduces duration of stuns/etc - source.AdjustAllImmobility(-0.5 SECONDS) - // Heals blood loss - if(source.blood_volume < BLOOD_VOLUME_NORMAL) - source.blood_volume += 2.5 * seconds_per_tick + user.RemoveElement(/datum/element/leeching_walk) /datum/heretic_knowledge/mark/rust_mark name = "Mark of Rust" desc = "Your Mansus Grasp now applies the Mark of Rust. The mark is triggered from an attack with your Rusty Blade. \ - When triggered, the victim's organs and equipment will have a 75% chance to sustain damage and may be destroyed." + When triggered, your victim will suffer heavy disgust and confusion. \ + Allows you to rust reinforced walls and floors as well as plasteel." gain_text = "The Blacksmith looks away. To a place lost long ago. \"Rusted Hills help those in dire need... at a cost.\"" next_knowledge = list(/datum/heretic_knowledge/knowledge_ritual/rust) route = PATH_RUST mark_type = /datum/status_effect/eldritch/rust +/datum/heretic_knowledge/mark/rust_mark/on_gain(mob/user, datum/antagonist/heretic/our_heretic) + . = ..() + our_heretic.increase_rust_strength() + /datum/heretic_knowledge/knowledge_ritual/rust next_knowledge = list(/datum/heretic_knowledge/spell/rust_construction) route = PATH_RUST @@ -165,50 +137,70 @@ spell_to_add = /datum/action/cooldown/spell/pointed/rust_construction cost = 1 route = PATH_RUST + depth = 7 /datum/heretic_knowledge/spell/area_conversion name = "Aggressive Spread" desc = "Grants you Aggressive Spread, a spell that spreads rust to nearby surfaces. \ - Already rusted surfaces are destroyed." + Already rusted surfaces are destroyed \ Also improves the rusting abilities of non rust-heretics." gain_text = "All wise men know well not to visit the Rusted Hills... Yet the Blacksmith's tale was inspiring." next_knowledge = list( /datum/heretic_knowledge/blade_upgrade/rust, /datum/heretic_knowledge/reroll_targets, /datum/heretic_knowledge/curse/corrosion, + /datum/heretic_knowledge/summon/rusty, /datum/heretic_knowledge/crucible, /datum/heretic_knowledge/rifle, ) spell_to_add = /datum/action/cooldown/spell/aoe/rust_conversion cost = 1 route = PATH_RUST + depth = 8 + research_tree_icon_frame = 5 + +/datum/heretic_knowledge/spell/area_conversion/on_gain(mob/user, datum/antagonist/heretic/our_heretic) + . = ..() + our_heretic.increase_rust_strength(TRUE) /datum/heretic_knowledge/blade_upgrade/rust name = "Toxic Blade" - desc = "Your Rusty Blade now poisons enemies on attack." + desc = "Your Rusty Blade now disgusts enemies on attack \ Allows you to rust Titanium and Plastitanium.." gain_text = "The Blacksmith hands you their blade. \"The Blade will guide you through the flesh, should you let it.\" \ The heavy rust weights it down. You stare deeply into it. The Rusted Hills call for you, now." next_knowledge = list(/datum/heretic_knowledge/spell/entropic_plume) route = PATH_RUST + research_tree_icon_path = 'icons/ui_icons/antags/heretic/knowledge.dmi' + research_tree_icon_state = "blade_upgrade_rust" + +/datum/heretic_knowledge/blade_upgrade/rust/on_gain(mob/user, datum/antagonist/heretic/our_heretic) + . = ..() + our_heretic.increase_rust_strength() /datum/heretic_knowledge/blade_upgrade/rust/do_melee_effects(mob/living/source, mob/living/target, obj/item/melee/sickly_blade/blade) - // No user == target check here, cause it's technically good for the heretic? - target.reagents?.add_reagent(/datum/reagent/eldritch, 5) + target.adjust_disgust(50) +/datum/heretic_knowledge/spell/area_conversion/on_gain(mob/user, datum/antagonist/heretic/our_heretic) + . = ..() /datum/heretic_knowledge/spell/entropic_plume name = "Entropic Plume" desc = "Grants you Entropic Plume, a spell that releases a vexing wave of Rust. \ Blinds, poisons, and inflicts Amok on any heathen it hits, causing them to strike \ - at friend or foe wildly. Also rusts and destroys and surfaces it hits." + at friend or foe wildly. Also rusts and destroys and surfaces it hits and improves the rusting abilities of non-rust heretics." gain_text = "The corrosion was unstoppable. The rust was unpleasable. \ The Blacksmith was gone, and you hold their blade. Champions of hope, the Rustbringer is nigh!" next_knowledge = list( /datum/heretic_knowledge/ultimate/rust_final, - /datum/heretic_knowledge/summon/rusty, /datum/heretic_knowledge/spell/rust_charge, ) spell_to_add = /datum/action/cooldown/spell/cone/staggered/entropic_plume cost = 1 route = PATH_RUST + depth = 10 + +/datum/heretic_knowledge/spell/entropic_plume/on_gain(mob/user) + . = ..() + var/datum/antagonist/heretic/our_heretic = IS_HERETIC(user) + our_heretic.increase_rust_strength(TRUE) /datum/heretic_knowledge/ultimate/rust_final name = "Rustbringer's Oath" @@ -216,10 +208,11 @@ Bring 3 corpses to a transmutation rune on the bridge of the station to complete the ritual. \ When completed, the ritual site will endlessly spread rust onto any surface, stopping for nothing. \ Additionally, you will become extremely resilient on rust, healing at triple the rate \ - and becoming immune to many effects and dangers." + and becoming immune to many effects and dangers \ You will be able to rust almost anything upon ascending." gain_text = "Champion of rust. Corruptor of steel. Fear the dark, for the RUSTBRINGER has come! \ The Blacksmith forges ahead! Rusted Hills, CALL MY NAME! WITNESS MY ASCENSION!" route = PATH_RUST + ascension_achievement = /datum/award/achievement/misc/rust_ascension /// If TRUE, then immunities are currently active. var/immunities_active = FALSE /// A typepath to an area that we must finish the ritual in. @@ -227,6 +220,8 @@ /// A static list of traits we give to the heretic when on rust. var/static/list/conditional_immunities = list( TRAIT_BOMBIMMUNE, + TRAIT_IGNOREDAMAGESLOWDOWN, + TRAIT_IGNORESLOWDOWN, TRAIT_NO_SLIP_ALL, TRAIT_NOBREATH, TRAIT_PIERCEIMMUNE, @@ -262,13 +257,49 @@ priority_announce( text = "[generate_heretic_text()] Fear the decay, for the Rustbringer, [user.real_name] has ascended! None shall escape the corrosion! [generate_heretic_text()]", title = "[generate_heretic_text()]", - sound = ANNOUNCER_SPANOMALIES, - color_override = "pink", + sound = 'sound/ambience/antag/heretic/ascend_rust.ogg', + color_override = "brown", ) - new /datum/rust_spread(loc) + trigger(loc) RegisterSignal(user, COMSIG_MOVABLE_MOVED, PROC_REF(on_move)) RegisterSignal(user, COMSIG_LIVING_LIFE, PROC_REF(on_life)) user.client?.give_award(/datum/award/achievement/misc/rust_ascension, user) + var/datum/action/cooldown/spell/aoe/rust_conversion/rust_spread_spell = locate() in user.actions + rust_spread_spell?.cooldown_time /= 2 + +// I sure hope this doesn't have performance implications +/datum/heretic_knowledge/ultimate/rust_final/proc/trigger(turf/center) + var/greatest_dist = 0 + var/list/turfs_to_transform = list() + for (var/turf/transform_turf as anything in GLOB.station_turfs) + if (transform_turf.turf_flags & NO_RUST) + continue + var/dist = get_dist(center, transform_turf) + if (dist > greatest_dist) + greatest_dist = dist + if (!turfs_to_transform["[dist]"]) + turfs_to_transform["[dist]"] = list() + turfs_to_transform["[dist]"] += transform_turf + + for (var/iterator in 1 to greatest_dist) + if(!turfs_to_transform["[iterator]"]) + continue + addtimer(CALLBACK(src, PROC_REF(transform_area), turfs_to_transform["[iterator]"]), (5 SECONDS) * iterator) + +/datum/heretic_knowledge/ultimate/rust_final/proc/transform_area(list/turfs) + turfs = shuffle(turfs) + var/numturfs = length(turfs) + var/first_third = turfs.Copy(1, round(numturfs * 0.33)) + var/second_third = turfs.Copy(round(numturfs * 0.33), round(numturfs * 0.66)) + var/third_third = turfs.Copy(round(numturfs * 0.66), numturfs) + addtimer(CALLBACK(src, PROC_REF(delay_transform_turfs), first_third), 5 SECONDS) + addtimer(CALLBACK(src, PROC_REF(delay_transform_turfs), second_third), 5 SECONDS * 0.33) + addtimer(CALLBACK(src, PROC_REF(delay_transform_turfs), third_third), 5 SECONDS * 0.66) + +/datum/heretic_knowledge/ultimate/rust_final/proc/delay_transform_turfs(list/turfs) + for(var/turf/turf as anything in turfs) + turf.rust_heretic_act(5) + CHECK_TICK /** * Signal proc for [COMSIG_MOVABLE_MOVED]. @@ -304,85 +335,12 @@ return var/need_mob_update = FALSE - need_mob_update += source.adjustBruteLoss(-4, updating_health = FALSE) - need_mob_update += source.adjustFireLoss(-4, updating_health = FALSE) - need_mob_update += source.adjustToxLoss(-4, updating_health = FALSE, forced = TRUE) - need_mob_update += source.adjustOxyLoss(-4, updating_health = FALSE) + need_mob_update += source.adjustBruteLoss(-5, updating_health = FALSE) + need_mob_update += source.adjustFireLoss(-5, updating_health = FALSE) + need_mob_update += source.adjustToxLoss(-5, updating_health = FALSE, forced = TRUE) + need_mob_update += source.adjustOxyLoss(-5, updating_health = FALSE) need_mob_update += source.adjustStaminaLoss(-20, updating_stamina = FALSE) + if(source.blood_volume < BLOOD_VOLUME_NORMAL) + source.blood_volume += 5 * seconds_per_tick if(need_mob_update) source.updatehealth() - -/** - * #Rust spread datum - * - * Simple datum that automatically spreads rust around it. - * - * Simple implementation of automatically growing entity. - */ -/datum/rust_spread - /// The rate of spread every tick. - var/spread_per_sec = 6 - /// The very center of the spread. - var/turf/centre - /// List of turfs at the edge of our rust (but not yet rusted). - var/list/edge_turfs = list() - /// List of all turfs we've afflicted. - var/list/rusted_turfs = list() - /// Static blacklist of turfs we can't spread to. - var/static/list/blacklisted_turfs = typecacheof(list( - /turf/open/indestructible, - /turf/closed/indestructible, - /turf/open/space, - /turf/open/lava, - /turf/open/chasm - )) - -/datum/rust_spread/New(loc) - centre = get_turf(loc) - centre.rust_heretic_act() - rusted_turfs += centre - START_PROCESSING(SSprocessing, src) - -/datum/rust_spread/Destroy(force) - centre = null - edge_turfs.Cut() - rusted_turfs.Cut() - STOP_PROCESSING(SSprocessing, src) - return ..() - -/datum/rust_spread/process(seconds_per_tick) - var/spread_amount = round(spread_per_sec * seconds_per_tick) - - if(length(edge_turfs) < spread_amount) - compile_turfs() - - for(var/i in 0 to spread_amount) - if(!length(edge_turfs)) - break - var/turf/afflicted_turf = pick_n_take(edge_turfs) - afflicted_turf.rust_heretic_act() - rusted_turfs |= afflicted_turf - -/** - * Compile turfs - * - * Recreates the edge_turfs list. - * Updates the rusted_turfs list, in case any turfs within were un-rusted. - */ -/datum/rust_spread/proc/compile_turfs() - edge_turfs.Cut() - - var/max_dist = 1 - for(var/turf/found_turf as anything in rusted_turfs) - if(!HAS_TRAIT(found_turf, TRAIT_RUSTY)) - rusted_turfs -= found_turf - max_dist = max(max_dist, get_dist(found_turf, centre) + 1) - - for(var/turf/nearby_turf as anything in spiral_range_turfs(max_dist, centre, FALSE)) - if(nearby_turf in rusted_turfs || is_type_in_typecache(nearby_turf, blacklisted_turfs)) - continue - - for(var/turf/line_turf as anything in get_line(nearby_turf, centre)) - if(get_dist(nearby_turf, line_turf) <= 1) - edge_turfs |= nearby_turf - CHECK_TICK diff --git a/code/modules/antagonists/heretic/knowledge/sacrifice_knowledge/sacrifice_buff.dm b/code/modules/antagonists/heretic/knowledge/sacrifice_knowledge/sacrifice_buff.dm index 3749e37fe6af1..30757e88a4b29 100644 --- a/code/modules/antagonists/heretic/knowledge/sacrifice_knowledge/sacrifice_buff.dm +++ b/code/modules/antagonists/heretic/knowledge/sacrifice_knowledge/sacrifice_buff.dm @@ -107,3 +107,17 @@ return bloodiest_wound.adjust_blood_flow(-0.5 * seconds_between_ticks) + +/// Torment the target with a frightening hand +/proc/fire_curse_hand(mob/living/carbon/victim) + var/grab_dir = turn(victim.dir, pick(-90, 90, 180, 180)) // Not in front, favour behind + var/turf/spawn_turf = get_ranged_target_turf(victim, grab_dir, 8) + if (isnull(spawn_turf)) + return + new /obj/effect/temp_visual/dir_setting/curse/grasp_portal(spawn_turf, victim.dir) + playsound(spawn_turf, 'sound/effects/curse2.ogg', 80, TRUE, -1) + var/obj/projectile/curse_hand/hel/hand = new (spawn_turf) + hand.preparePixelProjectile(victim, spawn_turf) + if (QDELETED(hand)) // safety check if above fails - above has a stack trace if it does fail + return + hand.fire() diff --git a/code/modules/antagonists/heretic/knowledge/sacrifice_knowledge/sacrifice_curse.dm b/code/modules/antagonists/heretic/knowledge/sacrifice_knowledge/sacrifice_curse.dm new file mode 100644 index 0000000000000..87086de6e0024 --- /dev/null +++ b/code/modules/antagonists/heretic/knowledge/sacrifice_knowledge/sacrifice_curse.dm @@ -0,0 +1,93 @@ +/// A curse given to people to disencourage them from retaliating against someone who sacrificed them +/datum/status_effect/heretic_curse + id = "heretic_curse" + alert_type = null + status_type = STATUS_EFFECT_MULTIPLE // In case several different people sacrifice you, unlucky + /// Who cursed us? + var/mob/living/the_curser + /// Don't experience bad things too often + COOLDOWN_DECLARE(consequence_cooldown) + +/datum/status_effect/heretic_curse/on_creation(mob/living/new_owner, mob/living/the_curser) + src.the_curser = the_curser + return ..() + +/datum/status_effect/heretic_curse/Destroy() + the_curser = null + return ..() + +/datum/status_effect/heretic_curse/on_apply() + if (isnull(the_curser) || !iscarbon(owner)) + return FALSE + + the_curser.AddElement(/datum/element/relay_attackers) + RegisterSignal(the_curser, COMSIG_ATOM_WAS_ATTACKED, PROC_REF(on_curser_attacked)) + RegisterSignal(the_curser, COMSIG_QDELETING, PROC_REF(on_curser_destroyed)) + + owner.AddElement(/datum/element/relay_attackers) + RegisterSignal(owner, COMSIG_ATOM_WAS_ATTACKED, PROC_REF(on_owner_attacked)) + + return TRUE + +/datum/status_effect/heretic_curse/on_remove() + UnregisterSignal(owner, COMSIG_ATOM_WAS_ATTACKED) + UnregisterSignal(the_curser, COMSIG_ATOM_WAS_ATTACKED) + the_curser = null + + +/// If the heretic that cursed us is destroyed this thing is useless now +/datum/status_effect/heretic_curse/proc/on_curser_destroyed() + SIGNAL_HANDLER + qdel(src) + +/// If we attack the guy who cursed us, that's no good +/datum/status_effect/heretic_curse/proc/on_curser_attacked(datum/source, mob/attacker) + SIGNAL_HANDLER + if (attacker != owner || !HAS_TRAIT(source, TRAIT_ALLOW_HERETIC_CASTING)) + return + log_combat(owner, the_curser, "attacked", addition = "and lost some organs because they had previously been sacrificed by them.") + experience_the_consequences() + +/// If we are attacked by the guy who cursed us, that's also no good +/datum/status_effect/heretic_curse/proc/on_owner_attacked(datum/source, mob/attacker) + SIGNAL_HANDLER + if (attacker != the_curser || !HAS_TRAIT(attacker, TRAIT_ALLOW_HERETIC_CASTING)) + return + log_combat(the_curser, owner, "attacked", addition = "and as they had previously sacrificed them, removed some of their organs.") + experience_the_consequences() + +/// Experience something you may not enjoy which may also significantly shorten your lifespan +/datum/status_effect/heretic_curse/proc/experience_the_consequences() + if (!COOLDOWN_FINISHED(src, consequence_cooldown) || owner.stat != CONSCIOUS) + return + + var/mob/living/carbon/carbon_owner = owner + var/obj/item/bodypart/chest/organ_storage = owner.get_bodypart(BODY_ZONE_CHEST) + if (isnull(organ_storage)) + carbon_owner.gib() // IDK how you don't have a chest but you're not getting away that easily + return + + var/list/removable_organs = list() + for(var/obj/item/organ/internal/bodypart_organ in organ_storage.contents) + if(bodypart_organ.organ_flags & ORGAN_UNREMOVABLE) + continue + removable_organs += bodypart_organ + + if (!length(removable_organs)) + return // This one is a little more possible but they're probably already in pretty bad shape by this point + + var/obj/item/organ/internal/removing_organ = pick(removable_organs) + + if (carbon_owner.vomit(vomit_flags = VOMIT_CATEGORY_BLOOD)) + carbon_owner.visible_message(span_boldwarning("[carbon_owner] vomits out [carbon_owner.p_their()] [removing_organ]")) + else + carbon_owner.visible_message(span_boldwarning("[carbon_owner]'s [removing_organ] rips itself out of `[carbon_owner.p_their()] chest!")) + + removing_organ.Remove(carbon_owner) + + var/turf/land_turf = get_step(carbon_owner, carbon_owner.dir) + if (land_turf.is_blocked_turf(exclude_mobs = TRUE)) + land_turf = carbon_owner.drop_location() + + removing_organ.forceMove(land_turf) + COOLDOWN_START(src, consequence_cooldown, 10 SECONDS) diff --git a/code/modules/antagonists/heretic/knowledge/sacrifice_knowledge/sacrifice_knowledge.dm b/code/modules/antagonists/heretic/knowledge/sacrifice_knowledge/sacrifice_knowledge.dm index 797d754ea0b0b..8da3b90494899 100644 --- a/code/modules/antagonists/heretic/knowledge/sacrifice_knowledge/sacrifice_knowledge.dm +++ b/code/modules/antagonists/heretic/knowledge/sacrifice_knowledge/sacrifice_knowledge.dm @@ -16,6 +16,9 @@ cost = 0 priority = MAX_KNOWLEDGE_PRIORITY // Should be at the top route = PATH_START + research_tree_icon_path = 'icons/effects/eldritch.dmi' + research_tree_icon_state = "eye_close" + research_tree_icon_frame = 1 /// How many targets do we generate? var/num_targets_to_generate = 5 /// Whether we've generated a heretic sacrifice z-level yet, from any heretic. @@ -26,6 +29,16 @@ var/list/datum/mind/target_blacklist /// An assoc list of [ref] to [timers] - a list of all the timers of people in the shadow realm currently var/list/return_timers + /// Evil organs we can put in people + var/static/list/grantable_organs = list( + /obj/item/organ/internal/appendix/corrupt, + /obj/item/organ/internal/eyes/corrupt, + /obj/item/organ/internal/heart/corrupt, + /obj/item/organ/internal/liver/corrupt, + /obj/item/organ/internal/lungs/corrupt, + /obj/item/organ/internal/stomach/corrupt, + /obj/item/organ/internal/tongue/corrupt, + ) /datum/heretic_knowledge/hunt_and_sacrifice/Destroy(force) heretic_mind = null @@ -70,8 +83,11 @@ // If we have targets, we can check to see if we can do a sacrifice // Let's remove any humans in our atoms list that aren't a sac target for(var/mob/living/carbon/human/sacrifice in atoms) - // If the mob's not in soft crit or worse, or isn't one of the sacrifices, remove it from the list - if(sacrifice.stat < SOFT_CRIT || !(sacrifice in heretic_datum.sac_targets)) + // If the mob's not in soft crit or worse, remove from list + if(sacrifice.stat < SOFT_CRIT) + atoms -= sacrifice + // Otherwise if it's neither a target nor a cultist, remove it + else if(!(sacrifice in heretic_datum.sac_targets) && !IS_CULTIST(sacrifice)) atoms -= sacrifice // Finally, return TRUE if we have a target in the list @@ -84,7 +100,9 @@ /datum/heretic_knowledge/hunt_and_sacrifice/on_finished_recipe(mob/living/user, list/selected_atoms, turf/loc) var/datum/antagonist/heretic/heretic_datum = IS_HERETIC(user) - if(!LAZYLEN(heretic_datum.sac_targets)) + // Force it to work if the sacrifice is a cultist, even if there's no targets. + var/mob/living/carbon/human/sac = selected_atoms[1] + if(!LAZYLEN(heretic_datum.sac_targets) && !IS_CULTIST(sac)) if(obtain_targets(user, heretic_datum = heretic_datum)) return TRUE else @@ -173,32 +191,128 @@ * * selected_atoms - a list of all atoms chosen. Should be (at least) one human. * * loc - the turf the sacrifice is occuring on */ -/datum/heretic_knowledge/hunt_and_sacrifice/proc/sacrifice_process(mob/living/user, list/selected_atoms) +/datum/heretic_knowledge/hunt_and_sacrifice/proc/sacrifice_process(mob/living/user, list/selected_atoms, turf/loc) var/datum/antagonist/heretic/heretic_datum = IS_HERETIC(user) var/mob/living/carbon/human/sacrifice = locate() in selected_atoms if(!sacrifice) CRASH("[type] sacrifice_process didn't have a human in the atoms list. How'd it make it so far?") - if(!(sacrifice in heretic_datum.sac_targets)) - CRASH("[type] sacrifice_process managed to get a non-target human. This is incorrect.") + if(!(sacrifice in heretic_datum.sac_targets) && !IS_CULTIST(sacrifice)) + CRASH("[type] sacrifice_process managed to get a non-target, non-cult human. This is incorrect.") if(sacrifice.mind) LAZYADD(target_blacklist, sacrifice.mind) heretic_datum.remove_sacrifice_target(sacrifice) + var/feedback = "Your patrons accept your offer" var/sac_job_flag = sacrifice.mind?.assigned_role?.job_flags | sacrifice.last_mind?.assigned_role?.job_flags - if(sac_job_flag & JOB_HEAD_OF_STAFF) - heretic_datum.knowledge_points++ + var/datum/antagonist/cult/cultist_datum = IS_CULTIST(sacrifice) + // Heads give 3 points, cultists give 1 point (and a special reward), normal sacrifices give 2 points. + heretic_datum.total_sacrifices++ + if((sac_job_flag & JOB_HEAD_OF_STAFF)) + heretic_datum.knowledge_points += 3 heretic_datum.high_value_sacrifices++ feedback += " graciously" + else if(cultist_datum) + heretic_datum.knowledge_points += 1 + grant_reward(user, sacrifice, loc) + // easier to read + var/rewards_given = heretic_datum.rewards_given + // Chance for it to send a warning to cultists, higher with each reward. Stops after 5 because they probably got the hint by then. + if(prob(min(15 * rewards_given)) && (rewards_given <= 5)) + for(var/datum/mind/mind as anything in cultist_datum.cult_team.members) + if(mind.current) + SEND_SOUND(mind.current, 'sound/magic/clockwork/narsie_attack.ogg') + var/message = span_narsie("A vile heretic has ") + \ + span_cult_large(span_hypnophrase("sacrificed")) + \ + span_narsie(" one of our own. Destroy and sacrifice the infidel before it claims more!") + to_chat(mind.current, message) + // he(retic) gets a warn too + var/message = span_cult_bold("You feel that your action has attracted") + \ + span_cult_bold_italic(" attention.") + to_chat(user, message) + return + else + heretic_datum.knowledge_points += 2 to_chat(user, span_hypnophrase("[feedback].")) - heretic_datum.total_sacrifices++ - heretic_datum.knowledge_points += 2 - if(!begin_sacrifice(sacrifice)) disembowel_target(sacrifice) + return + + sacrifice.apply_status_effect(/datum/status_effect/heretic_curse, user) + + +/datum/heretic_knowledge/hunt_and_sacrifice/proc/grant_reward(mob/living/user, mob/living/sacrifice, turf/loc) + + // Visible and audible encouragement! + to_chat(user, span_big(span_hypnophrase("A servant of the Sanguine Apostate!"))) + to_chat(user, span_hierophant("Your patrons are rapturous!")) + playsound(sacrifice, 'sound/magic/disintegrate.ogg', 75, TRUE) + + // Drop all items and splatter them around messily. + var/list/dustee_items = sacrifice.unequip_everything() + for(var/obj/item/loot as anything in dustee_items) + loot.throw_at(get_step_rand(sacrifice), 2, 4, user, TRUE) + + // The loser is DUSTED. + sacrifice.dust(TRUE, TRUE) + + // Increase reward counter + var/datum/antagonist/heretic/antag = IS_HERETIC(user) + antag.rewards_given++ + + // We limit the amount so the heretic doesn't just turn into a frickin' god (early) + to_chat(user, span_hierophant("You feel the rotten energies of the infidel warp and twist, mixing with that of your own...")) + if(prob(8 * antag.rewards_given)) + to_chat(user, span_hierophant("Faint, dark red sparks flit around the dust, then fade. It looks like your patrons weren't able to fashion something out of it.")) + return + + // Cool effect for the rune as well as the item + var/obj/effect/heretic_rune/rune = locate() in range(2, user) + if(rune) + rune.gender_reveal( + outline_color = COLOR_CULT_RED, + ray_color = null, + do_float = FALSE, + do_layer = FALSE, + ) + + addtimer(CALLBACK(src, PROC_REF(deposit_reward), user, loc, null, rune), 5 SECONDS) + + +/datum/heretic_knowledge/hunt_and_sacrifice/proc/deposit_reward(mob/user, turf/loc, loop = 0, obj/rune) + if(loop > 5) // Max limit for retrying a reward + return + // Remove the rays, we don't need them anymore. + rune?.remove_filter("reward_outline") + playsound(loc, 'sound/magic/repulse.ogg', 75, TRUE) + var/datum/antagonist/heretic/heretic_datum = IS_HERETIC(user) + ASSERT(heretic_datum) + // This list will be almost identical to unlocked_heretic_items, with the same keys, the difference being the values will be 1 to 5. + var/list/rewards = heretic_datum.unlocked_heretic_items.Copy() + // We will make it increasingly less likely to get a reward if you've already got it + for(var/possible_reward in heretic_datum.unlocked_heretic_items) + var/amount_already_awarded = heretic_datum.unlocked_heretic_items[possible_reward] + rewards[possible_reward] = min(5 - (amount_already_awarded * 2), 1) + + var/atom/reward = pick_weight(rewards) + reward = new reward(loc) + + if(isliving(reward)) + if(summon_ritual_mob(user, loc, reward) == FALSE) + qdel(reward) + deposit_reward(user, loc, loop++, rune) // If no ghosts, try again until limit is hit + return + + else if(isitem(reward)) + var/obj/item/item_reward = reward + item_reward.gender_reveal(outline_color = null, ray_color = COLOR_CULT_RED) + + ASSERT(reward) + + return reward /** * This proc is called from [proc/sacrifice_process] after the heretic successfully sacrifices [sac_target].) @@ -278,6 +392,8 @@ disembowel_target(sac_target) return + curse_organs(sac_target) + // Send 'em to the destination. If the teleport fails, just disembowel them and stop the chain if(!destination || !do_teleport(sac_target, destination, asoundin = 'sound/magic/repulse.ogg', asoundout = 'sound/magic/blind.ogg', no_effects = TRUE, channel = TELEPORT_CHANNEL_MAGIC, forced = TRUE)) disembowel_target(sac_target) @@ -299,6 +415,31 @@ RegisterSignal(sac_target, COMSIG_MOVABLE_Z_CHANGED, PROC_REF(on_target_escape)) // Cheese condition RegisterSignal(sac_target, COMSIG_LIVING_DEATH, PROC_REF(on_target_death)) // Loss condition +/// Apply a sinister curse to some of the target's organs as an incentive to leave us alone +/datum/heretic_knowledge/hunt_and_sacrifice/proc/curse_organs(mob/living/carbon/human/sac_target) + var/usable_organs = grantable_organs.Copy() + if (isplasmaman(sac_target)) + usable_organs -= /obj/item/organ/internal/lungs/corrupt // Their lungs are already more cursed than anything I could give them + + var/total_implant = rand(2, 4) + var/gave_any = FALSE + + for (var/i in 1 to total_implant) + if (!length(usable_organs)) + break + var/organ_path = pick_n_take(usable_organs) + var/obj/item/organ/internal/to_give = new organ_path + if (!to_give.Insert(sac_target)) + qdel(to_give) + else + gave_any = TRUE + + if (!gave_any) + return + + new /obj/effect/gibspawner/human/bodypartless(get_turf(sac_target)) + sac_target.visible_message(span_boldwarning("Several organs force themselves out of [sac_target]!")) + /** * This proc is called from [proc/after_target_sleeps] when the [sac_target] should be waking up.) * @@ -375,8 +516,7 @@ if(IS_HERETIC(sac_target)) var/datum/antagonist/heretic/victim_heretic = sac_target.mind?.has_antag_datum(/datum/antagonist/heretic) victim_heretic.knowledge_points -= 3 - else - sac_target.gain_trauma(/datum/brain_trauma/mild/phobia/heresy, TRAUMA_RESILIENCE_MAGIC) + // Wherever we end up, we sure as hell won't be able to explain sac_target.adjust_timed_status_effect(40 SECONDS, /datum/status_effect/speech/slurring/heretic) sac_target.adjust_stutter(40 SECONDS) diff --git a/code/modules/antagonists/heretic/knowledge/side_ash_moon.dm b/code/modules/antagonists/heretic/knowledge/side_ash_moon.dm index a4810c706c118..758ee0548d5fc 100644 --- a/code/modules/antagonists/heretic/knowledge/side_ash_moon.dm +++ b/code/modules/antagonists/heretic/knowledge/side_ash_moon.dm @@ -16,6 +16,9 @@ result_atoms = list(/obj/item/clothing/neck/eldritch_amulet) cost = 1 route = PATH_SIDE + research_tree_icon_path = 'icons/obj/antags/eldritch.dmi' + research_tree_icon_state = "eye_medalion" + depth = 4 /datum/heretic_knowledge/curse/paralysis name = "Curse of Paralysis" @@ -25,7 +28,7 @@ gain_text = "The flesh of humanity is weak. Make them bleed. Show them their fragility." next_knowledge = list( /datum/heretic_knowledge/mad_mask, - /datum/heretic_knowledge/moon_amulette, + /datum/heretic_knowledge/moon_amulet, ) required_atoms = list( /obj/item/bodypart/leg/left = 1, @@ -37,6 +40,9 @@ curse_color = "#f19a9a" cost = 1 route = PATH_SIDE + research_tree_icon_path = 'icons/ui_icons/antags/heretic/knowledge.dmi' + research_tree_icon_state = "curse_paralysis" + depth = 8 /datum/heretic_knowledge/curse/paralysis/curse(mob/living/carbon/human/chosen_mob, boosted = FALSE) if(chosen_mob.usable_legs <= 0) // What're you gonna do, curse someone who already can't walk? @@ -75,6 +81,7 @@ cost = 1 route = PATH_SIDE poll_ignore_define = POLL_IGNORE_ASH_SPIRIT + depth = 10 /datum/heretic_knowledge/summon/ashy/cleanup_atoms(list/selected_atoms) var/obj/item/bodypart/head/ritual_head = locate() in selected_atoms diff --git a/code/modules/antagonists/heretic/knowledge/side_blade_rust.dm b/code/modules/antagonists/heretic/knowledge/side_blade_rust.dm index e8c14d16abeca..3a0f17ed48391 100644 --- a/code/modules/antagonists/heretic/knowledge/side_blade_rust.dm +++ b/code/modules/antagonists/heretic/knowledge/side_blade_rust.dm @@ -16,11 +16,15 @@ result_atoms = list(/obj/item/clothing/suit/hooded/cultrobes/eldritch) cost = 1 route = PATH_SIDE + research_tree_icon_path = 'icons/obj/clothing/suits/armor.dmi' + research_tree_icon_state = "eldritch_armor" + research_tree_icon_frame = 12 + depth = 4 /datum/heretic_knowledge/crucible name = "Mawed Crucible" desc = "Allows you to transmute a portable water tank and a table to create a Mawed Crucible. \ - The Mawed Crubile can brew powerful potions for combat and utility, but must be fed bodyparts and organs between uses." + The Mawed Crucible can brew powerful potions for combat and utility, but must be fed bodyparts and organs between uses." gain_text = "This is pure agony. I wasn't able to summon the figure of the Aristocrat, \ but with the Priest's attention I stumbled upon a different recipe..." next_knowledge = list( @@ -34,6 +38,9 @@ result_atoms = list(/obj/structure/destructible/eldritch_crucible) cost = 1 route = PATH_SIDE + research_tree_icon_path = 'icons/obj/antags/eldritch.dmi' + research_tree_icon_state = "crucible" + depth = 8 /datum/heretic_knowledge/rifle name = "Lionhunter's Rifle" @@ -43,7 +50,7 @@ These shots function as normal, albeit weak high caliber mutitions when fired from \ close range or at inanimate objects. You can aim the rifle at distant foes, \ causing the shot to deal massively increased damage and hone in on them." - gain_text = "I met an old man in an anique shop who wielded a very unusual weapon. \ + gain_text = "I met an old man in an antique shop who wielded a very unusual weapon. \ I could not purchase it at the time, but they showed me how they made it ages ago." next_knowledge = list( /datum/heretic_knowledge/duel_stance, @@ -59,9 +66,12 @@ result_atoms = list(/obj/item/gun/ballistic/rifle/lionhunter) cost = 1 route = PATH_SIDE + depth = 8 + research_tree_icon_path = 'icons/obj/weapons/guns/ballistic.dmi' + research_tree_icon_state = "goldrevolver" /datum/heretic_knowledge/rifle_ammo - name = "Lionhunter Rifle Ammunition (free)" + name = "Lionhunter Rifle Ammunition" desc = "Allows you to transmute 3 ballistic ammo casings (used or unused) of any caliber, \ including shotgun shot, with any animal hide to create an extra clip of ammunition for the Lionhunter Rifle." gain_text = "The weapon came with three rough iron balls, intended to be used as ammunition. \ @@ -74,6 +84,9 @@ result_atoms = list(/obj/item/ammo_box/strilka310/lionhunter) cost = 0 route = PATH_SIDE + research_tree_icon_path = 'icons/obj/weapons/guns/ammo.dmi' + research_tree_icon_state = "310_strip" + depth = 8 /// A list of calibers that the ritual will deny. Only ballistic calibers are allowed. var/static/list/caliber_blacklist = list( CALIBER_LASER, @@ -107,3 +120,4 @@ spell_to_add = /datum/action/cooldown/mob_cooldown/charge/rust cost = 1 route = PATH_SIDE + depth = 10 diff --git a/code/modules/antagonists/heretic/knowledge/side_cosmos_ash.dm b/code/modules/antagonists/heretic/knowledge/side_cosmos_ash.dm index 14a003ce11c0b..1a08236aee64d 100644 --- a/code/modules/antagonists/heretic/knowledge/side_cosmos_ash.dm +++ b/code/modules/antagonists/heretic/knowledge/side_cosmos_ash.dm @@ -19,6 +19,8 @@ cost = 1 route = PATH_SIDE poll_ignore_define = POLL_IGNORE_FIRE_SHARK + depth = 4 + research_tree_icon_dir = EAST /datum/heretic_knowledge/spell/space_phase name = "Space Phase" @@ -32,6 +34,8 @@ spell_to_add = /datum/action/cooldown/spell/jaunt/space_crawl cost = 1 route = PATH_SIDE + depth = 8 + research_tree_icon_frame = 6 /datum/heretic_knowledge/eldritch_coin name = "Eldritch Coin" @@ -51,3 +55,6 @@ result_atoms = list(/obj/item/coin/eldritch) cost = 1 route = PATH_SIDE + research_tree_icon_path = 'icons/obj/economy.dmi' + research_tree_icon_state = "coin_heretic" + depth = 10 diff --git a/code/modules/antagonists/heretic/knowledge/side_flesh_void.dm b/code/modules/antagonists/heretic/knowledge/side_flesh_void.dm index 4a315575d61b7..a958ab3f272bb 100644 --- a/code/modules/antagonists/heretic/knowledge/side_flesh_void.dm +++ b/code/modules/antagonists/heretic/knowledge/side_flesh_void.dm @@ -19,6 +19,9 @@ result_atoms = list(/obj/item/clothing/suit/hooded/cultrobes/void) cost = 1 route = PATH_SIDE + research_tree_icon_path = 'icons/obj/clothing/suits/armor.dmi' + research_tree_icon_state = "void_cloak" + depth = 4 /datum/heretic_knowledge/spell/blood_siphon name = "Blood Siphon" @@ -32,6 +35,7 @@ spell_to_add = /datum/action/cooldown/spell/pointed/blood_siphon cost = 1 route = PATH_SIDE + depth = 8 /datum/heretic_knowledge/spell/cleave name = "Blood Cleave" @@ -46,3 +50,4 @@ spell_to_add = /datum/action/cooldown/spell/pointed/cleave cost = 1 route = PATH_SIDE + depth = 10 diff --git a/code/modules/antagonists/heretic/knowledge/side_lock_flesh.dm b/code/modules/antagonists/heretic/knowledge/side_lock_flesh.dm index 74013f2b0bd1d..706b83abac7b3 100644 --- a/code/modules/antagonists/heretic/knowledge/side_lock_flesh.dm +++ b/code/modules/antagonists/heretic/knowledge/side_lock_flesh.dm @@ -12,6 +12,7 @@ spell_to_add = /datum/action/cooldown/spell/aoe/wave_of_desperation cost = 1 route = PATH_SIDE + depth = 8 /datum/heretic_knowledge/spell/apetra_vulnera name = "Apetra Vulnera" @@ -26,3 +27,4 @@ spell_to_add = /datum/action/cooldown/spell/pointed/apetra_vulnera cost = 1 route = PATH_SIDE + depth = 10 diff --git a/code/modules/antagonists/heretic/knowledge/side_lock_moon.dm b/code/modules/antagonists/heretic/knowledge/side_lock_moon.dm index f1dd564310be5..1e265b974980f 100644 --- a/code/modules/antagonists/heretic/knowledge/side_lock_moon.dm +++ b/code/modules/antagonists/heretic/knowledge/side_lock_moon.dm @@ -2,10 +2,10 @@ /datum/heretic_knowledge/spell/mind_gate name = "Mind Gate" - desc = "Grants you Mind Gate, a spell \ - which deals you 20 brain damage but the target suffers a hallucination,\ - is left confused for 10 seconds, suffers oxygen loss and brain damage." - gain_text = "My mind swings open like a gate, and its insight will let me percieve the truth." + desc = "Grants you Mind Gate, a spell which inflicts hallucinations, \ + confusion, oxygen loss and brain damage to its target over 10 seconds.\ + The caster takes 20 brain damage per use." + gain_text = "My mind swings open like a gate, and its insight will let me perceive the truth." next_knowledge = list( /datum/heretic_knowledge/key_ring, /datum/heretic_knowledge/spell/moon_smile, @@ -13,17 +13,18 @@ spell_to_add = /datum/action/cooldown/spell/pointed/mind_gate cost = 1 route = PATH_SIDE + depth = 4 /datum/heretic_knowledge/unfathomable_curio name = "Unfathomable Curio" - desc = "Allows you to transmute 3 rods, lungs and any belt into an Unfathomable Curio\ - , a belt that can hold blades and items for rituals. Whilst worn it will also \ + desc = "Allows you to transmute 3 rods, lungs and any belt into an Unfathomable Curio, \ + a belt that can hold blades and items for rituals. Whilst worn it will also \ veil you, allowing you to take 5 hits without suffering damage, this veil will recharge very slowly \ outside of combat." gain_text = "The mansus holds many a curio, some are not meant for the mortal eye." next_knowledge = list( /datum/heretic_knowledge/spell/burglar_finesse, - /datum/heretic_knowledge/moon_amulette, + /datum/heretic_knowledge/moon_amulet, ) required_atoms = list( /obj/item/organ/internal/lungs = 1, @@ -33,27 +34,32 @@ result_atoms = list(/obj/item/storage/belt/unfathomable_curio) cost = 1 route = PATH_SIDE + research_tree_icon_path = 'icons/obj/clothing/belts.dmi' + research_tree_icon_state = "unfathomable_curio" + depth = 8 /datum/heretic_knowledge/painting name = "Unsealed Arts" - desc = "Allows you to transmute a canvas and an additional item to create a piece of art, these paintings \ - have different effects depending on the additional item added. Possible paintings: \ - The sister and He Who Wept: Eyes. Clears your own mind, but curses non-heretics with hallucinations. \ - The First Desire: Any bodypart. Supplies you with random organs, but curses non-heretics with a hunger for flesh. \ - Great chaparral over rolling hills: Any grown food. Spreads kudzu when placed and examined by non-heretics. Also supplies you with poppies and harebells. \ - Lady out of gates: Gloves. Clears your mutations, but mutates non-heretics and curses them with scratching. \ - Climb over the rusted mountain: Trash. Curses non-heretics to rust the floor they walk on. \ - Non-heretics can counter most of these effects by examining one of these paintings." - gain_text = "A wind of inspiration blows through me, past the walls and past the gate inspirations lie, yet to be depicted. \ - They yearn for mortal eyes again, and I shall grant that wish." + desc = "Allows you to transmute a canvas and an additional item to create a painting. \ + Each painting has a unique effect and recipe. Possible paintings: \ + The Sister and He Who Wept: Requires a pair of Eyes. Clears your own mind, and curses non-heretics with hallucinations. \ + The Feast of Desire: Requires a severed limb. Supplies you with random organs, and curses non-heretics with a hunger for flesh. \ + Great Chaparral Over Rolling Hills: Requires any plant produce. Spreads kudzu when placed, and supplies you with poppies and harebells. \ + Lady of the Gate: Requires any pair of Gloves. Clears your mutations, mutates non-heretics and curses them with scratching. \ + Master of the Rusted Mountain: Requires a piece of Trash. Curses non-heretics to rust the floor they walk on." + gain_text = "A wind of inspiration blows through me. Beyond the veil and past the gate great works exist, yet to be painted. \ + They yearn for mortal eyes, so I shall give them an audience." next_knowledge = list( /datum/heretic_knowledge/spell/burglar_finesse, - /datum/heretic_knowledge/moon_amulette, + /datum/heretic_knowledge/moon_amulet, ) required_atoms = list(/obj/item/canvas = 1) result_atoms = list(/obj/item/canvas) cost = 1 route = PATH_SIDE + research_tree_icon_path = 'icons/obj/signs.dmi' + research_tree_icon_state = "eldritch_painting_weeping" + depth = 8 /datum/heretic_knowledge/painting/recipe_snowflake_check(mob/living/user, list/atoms, list/selected_atoms, turf/loc) if(locate(/obj/item/organ/internal/eyes) in atoms) diff --git a/code/modules/antagonists/heretic/knowledge/side_rust_cosmos.dm b/code/modules/antagonists/heretic/knowledge/side_rust_cosmos.dm index 3d326b4a9af45..11918c66a2906 100644 --- a/code/modules/antagonists/heretic/knowledge/side_rust_cosmos.dm +++ b/code/modules/antagonists/heretic/knowledge/side_rust_cosmos.dm @@ -17,25 +17,32 @@ result_atoms = list(/obj/item/reagent_containers/cup/beaker/eldritch) cost = 1 route = PATH_SIDE + depth = 4 + research_tree_icon_path = 'icons/obj/antags/eldritch.dmi' + research_tree_icon_state = "eldritch_flask" /datum/heretic_knowledge/entropy_pulse name = "Pulse of Entropy" - desc = "Allows you to transmute 20 irons and 2 garbage items to fill the surrounding vicinity of the rune with rust." + desc = "Allows you to transmute 10 iron sheets and a garbage item to fill the surrounding vicinity of the rune with rust." gain_text = "Reality begins to whisper to me. To give it its entropic end." required_atoms = list( - /obj/item/stack/sheet/iron = 20, - /obj/item/trash = 2 + /obj/item/stack/sheet/iron = 10, + /obj/item/trash = 1, ) cost = 0 route = PATH_SIDE - var/rusting_range = 4 + research_tree_icon_path = 'icons/mob/actions/actions_ecult.dmi' + research_tree_icon_state = "corrode" + research_tree_icon_frame = 10 + depth = 4 + var/rusting_range = 8 /datum/heretic_knowledge/entropy_pulse/on_finished_recipe(mob/living/user, list/selected_atoms, turf/loc) for(var/turf/nearby_turf in view(rusting_range, loc)) if(get_dist(nearby_turf, loc) <= 1) //tiles on rune should always be rusted nearby_turf.rust_heretic_act() //we exclude closed turf to avoid exposing cultist bases - if(prob(20) || isclosedturf(nearby_turf)) + if(prob(10) || isclosedturf(nearby_turf)) continue nearby_turf.rust_heretic_act() return TRUE @@ -60,6 +67,9 @@ curse_color = "#c1ffc9" cost = 1 route = PATH_SIDE + research_tree_icon_path = 'icons/ui_icons/antags/heretic/knowledge.dmi' + research_tree_icon_state = "curse_corrosion" + depth = 8 /datum/heretic_knowledge/curse/corrosion/curse(mob/living/carbon/human/chosen_mob, boosted = FALSE) to_chat(chosen_mob, span_danger("You feel very ill...")) @@ -76,22 +86,23 @@ /datum/heretic_knowledge/summon/rusty name = "Rusted Ritual" - desc = "Allows you to transmute a pool of vomit, a book, and a head into a Rust Walker. \ + desc = "Allows you to transmute a pool of vomit, some cable coil, and 5 sheets of titanium into a Rust Walker. \ Rust Walkers excel at spreading rust and are moderately strong in combat." gain_text = "I combined my knowledge of creation with my desire for corruption. The Marshal knew my name, and the Rusted Hills echoed out." next_knowledge = list( - /datum/heretic_knowledge/spell/entropic_plume, - /datum/heretic_knowledge/spell/cosmic_expansion, + /datum/heretic_knowledge/spell/area_conversion, + /datum/heretic_knowledge/spell/star_blast, ) required_atoms = list( /obj/effect/decal/cleanable/vomit = 1, - /obj/item/book = 1, - /obj/item/bodypart/head = 1, + /obj/item/stack/sheet/mineral/titanium = 5, + /obj/item/stack/cable_coil = 15, ) mob_to_summon = /mob/living/basic/heretic_summon/rust_walker cost = 1 route = PATH_SIDE poll_ignore_define = POLL_IGNORE_RUST_SPIRIT + depth = 8 /datum/heretic_knowledge/summon/rusty/cleanup_atoms(list/selected_atoms) var/obj/item/bodypart/head/ritual_head = locate() in selected_atoms diff --git a/code/modules/antagonists/heretic/knowledge/side_void_blade.dm b/code/modules/antagonists/heretic/knowledge/side_void_blade.dm index e044eee8619ef..56945262e3cb0 100644 --- a/code/modules/antagonists/heretic/knowledge/side_void_blade.dm +++ b/code/modules/antagonists/heretic/knowledge/side_void_blade.dm @@ -23,6 +23,9 @@ limit = 1 cost = 1 route = PATH_SIDE + research_tree_icon_path = 'icons/ui_icons/antags/heretic/knowledge.dmi' + research_tree_icon_state = "ghoul_shattered" + depth = 4 /datum/heretic_knowledge/limited_amount/risen_corpse/recipe_snowflake_check(mob/living/user, list/atoms, list/selected_atoms, turf/loc) . = ..() @@ -139,6 +142,9 @@ result_atoms = list(/obj/item/melee/rune_carver) cost = 1 route = PATH_SIDE + depth = 8 + research_tree_icon_path = 'icons/obj/antags/eldritch.dmi' + research_tree_icon_state = "rune_carver" /datum/heretic_knowledge/summon/maid_in_mirror name = "Maid in the Mirror" @@ -162,3 +168,4 @@ route = PATH_SIDE mob_to_summon = /mob/living/basic/heretic_summon/maid_in_the_mirror poll_ignore_define = POLL_IGNORE_MAID_IN_MIRROR + depth = 10 diff --git a/code/modules/antagonists/heretic/knowledge/starting_lore.dm b/code/modules/antagonists/heretic/knowledge/starting_lore.dm index f1b5f7f55ea19..7cb3b82a39ac2 100644 --- a/code/modules/antagonists/heretic/knowledge/starting_lore.dm +++ b/code/modules/antagonists/heretic/knowledge/starting_lore.dm @@ -1,4 +1,5 @@ // Heretic starting knowledge. +// Default heretic language is Ancient Greek, because, uh, they're like ancient and shit. /// Global list of all heretic knowledge that have route = PATH_START. List of PATHS. GLOBAL_LIST_INIT(heretic_start_knowledge, initialize_starting_knowledge()) @@ -48,6 +49,9 @@ GLOBAL_LIST_INIT(heretic_start_knowledge, initialize_starting_knowledge()) cost = 0 priority = MAX_KNOWLEDGE_PRIORITY - 1 // Knowing how to remake your heart is important route = PATH_START + research_tree_icon_path = 'icons/obj/antags/eldritch.dmi' + research_tree_icon_state = "living_heart" + research_tree_icon_frame = 1 /// The typepath of the organ type required for our heart. var/required_organ_type = /obj/item/organ/internal/heart @@ -204,6 +208,8 @@ GLOBAL_LIST_INIT(heretic_start_knowledge, initialize_starting_knowledge()) cost = 0 priority = MAX_KNOWLEDGE_PRIORITY - 2 // Not as important as making a heart or sacrificing, but important enough. route = PATH_START + research_tree_icon_path = 'icons/obj/clothing/neck.dmi' + research_tree_icon_state = "eldritch_necklace" /datum/heretic_knowledge/spell/cloak_of_shadows name = "Cloak of Shadow" @@ -238,6 +244,8 @@ GLOBAL_LIST_INIT(heretic_start_knowledge, initialize_starting_knowledge()) route = PATH_START priority = MAX_KNOWLEDGE_PRIORITY - 3 // Least priority out of the starting knowledges, as it's an optional boon. var/static/list/non_mob_bindings = typecacheof(list(/obj/item/stack/sheet/leather, /obj/item/stack/sheet/animalhide)) + research_tree_icon_path = 'icons/obj/antags/eldritch.dmi' + research_tree_icon_state = "book" /datum/heretic_knowledge/codex_cicatrix/parse_required_item(atom/item_path, number_of_things) if(item_path == /obj/item/pen) @@ -293,3 +301,37 @@ GLOBAL_LIST_INIT(heretic_start_knowledge, initialize_starting_knowledge()) body.do_jitter_animation() body.visible_message(span_danger("An awful ripping sound is heard as [ripped_thing]'s [exterior_text] is ripped straight out, wrapping around [le_book || "the book"], turning into an eldritch shade of blue!")) return ..() + +/datum/heretic_knowledge/feast_of_owls + name = "Feast of Owls" + desc = "Allows you to undergo a ritual that gives you 5 knowledge points but locks you out of ascension. This can only be done once and cannot be reverted." + gain_text = "Under the soft glow of unreason there is a beast that stalks the night. I shall bring it forth and let it enter my presence. It will feast upon my amibitions and leave knowledge in its wake." + route = PATH_START + required_atoms = list() + research_tree_icon_path = 'icons/mob/actions/actions_animal.dmi' + research_tree_icon_state = "god_transmit" + +/datum/heretic_knowledge/feast_of_owls/can_be_invoked(datum/antagonist/heretic/invoker) + return !invoker.feast_of_owls + +/datum/heretic_knowledge/feast_of_owls/on_finished_recipe(mob/living/user, list/selected_atoms, turf/loc) + //amount of research points granted + var/reward = 5 + var/alert = tgui_alert(user,"Do you really want to forsake your ascension? This action cannot be reverted.", "Feast of Owls", list("Yes I'm sure", "No"), 30 SECONDS) + if( alert != "Yes I'm sure") + return FALSE + user.set_temp_blindness(reward SECONDS) + user.AdjustParalyzed(reward SECONDS) + user.playsound_local(get_turf(user), 'sound/ambience/antag/heretic/heretic_gain_intense.ogg', 100, FALSE, pressure_affected = FALSE, use_reverb = FALSE) + var/datum/antagonist/heretic/heretic_datum = IS_HERETIC(user) + for(var/i in 1 to reward) + user.emote("scream") + playsound(loc, 'sound/items/eatfood.ogg', 100, TRUE) + heretic_datum.knowledge_points++ + to_chat(user, span_danger("You feel something invisible tearing away at your very essence!")) + user.do_jitter_animation() + sleep(1 SECONDS) + heretic_datum.feast_of_owls = TRUE + to_chat(user, span_danger(span_big("Your ambition is ravaged, but something powerful remains in its wake..."))) + var/drain_message = pick(strings(HERETIC_INFLUENCE_FILE, "drain_message")) + to_chat(user, span_hypnophrase(span_big("[drain_message]"))) diff --git a/code/modules/antagonists/heretic/knowledge/void_lore.dm b/code/modules/antagonists/heretic/knowledge/void_lore.dm index 85015c06e1f16..482de8184401b 100644 --- a/code/modules/antagonists/heretic/knowledge/void_lore.dm +++ b/code/modules/antagonists/heretic/knowledge/void_lore.dm @@ -1,5 +1,7 @@ /** * # The path of VOID. + * Spell names are in this language: PALI + * Both are related: Pali-Buddhism-Nothingness-Void * * Goes as follows: * @@ -37,6 +39,8 @@ required_atoms = list(/obj/item/knife = 1) result_atoms = list(/obj/item/melee/sickly_blade/void) route = PATH_VOID + research_tree_icon_path = 'icons/obj/weapons/khopesh.dmi' + research_tree_icon_state = "void_blade" /datum/heretic_knowledge/limited_amount/starting/base_void/recipe_snowflake_check(mob/living/user, list/atoms, list/selected_atoms, turf/loc) if(!isopenturf(loc)) @@ -58,6 +62,9 @@ next_knowledge = list(/datum/heretic_knowledge/cold_snap) cost = 1 route = PATH_VOID + depth = 3 + research_tree_icon_path = 'icons/ui_icons/antags/heretic/knowledge.dmi' + research_tree_icon_state = "grasp_void" /datum/heretic_knowledge/void_grasp/on_gain(mob/user, datum/antagonist/heretic/our_heretic) RegisterSignal(user, COMSIG_HERETIC_MANSUS_GRASP_ATTACK, PROC_REF(on_mansus_grasp)) @@ -88,6 +95,9 @@ ) cost = 1 route = PATH_VOID + research_tree_icon_path = 'icons/effects/effects.dmi' + research_tree_icon_state = "the_freezer" + depth = 4 /datum/heretic_knowledge/cold_snap/on_gain(mob/user, datum/antagonist/heretic/our_heretic) user.add_traits(list(TRAIT_NOBREATH, TRAIT_RESISTCOLD), type) @@ -119,6 +129,7 @@ spell_to_add = /datum/action/cooldown/spell/cone/staggered/cone_of_cold/void cost = 1 route = PATH_VOID + depth = 7 /datum/heretic_knowledge/spell/void_phase name = "Void Phase" @@ -135,6 +146,8 @@ spell_to_add = /datum/action/cooldown/spell/pointed/void_phase cost = 1 route = PATH_VOID + depth = 8 + research_tree_icon_frame = 7 /datum/heretic_knowledge/blade_upgrade/void name = "Seeking Blade" @@ -142,6 +155,8 @@ gain_text = "Fleeting memories, fleeting feet. I mark my way with frozen blood upon the snow. Covered and forgotten." next_knowledge = list(/datum/heretic_knowledge/spell/void_pull) route = PATH_VOID + research_tree_icon_path = 'icons/ui_icons/antags/heretic/knowledge.dmi' + research_tree_icon_state = "blade_upgrade_void" /datum/heretic_knowledge/blade_upgrade/void/do_ranged_effects(mob/living/user, mob/living/target, obj/item/melee/sickly_blade/blade) if(!target.has_status_effect(/datum/status_effect/eldritch)) @@ -168,6 +183,8 @@ spell_to_add = /datum/action/cooldown/spell/aoe/void_pull cost = 1 route = PATH_VOID + depth = 10 + research_tree_icon_frame = 6 /datum/heretic_knowledge/ultimate/void_final name = "Waltz at the End of Time" @@ -180,6 +197,7 @@ The Aristocrat stands before me, beckoning. We will play a waltz to the whispers of dying reality, \ as the world is destroyed before our eyes. The void will return all to nothing, WITNESS MY ASCENSION!" route = PATH_VOID + ascension_achievement = /datum/award/achievement/misc/void_ascension ///soundloop for the void theme var/datum/looping_sound/void_loop/sound_loop ///Reference to the ongoing voidstrom that surrounds the heretic @@ -202,10 +220,9 @@ priority_announce( text = "[generate_heretic_text()] The nobleman of void [user.real_name] has arrived, stepping along the Waltz that ends worlds! [generate_heretic_text()]", title = "[generate_heretic_text()]", - sound = ANNOUNCER_SPANOMALIES, - color_override = "pink", + sound = 'sound/ambience/antag/heretic/ascend_void.ogg', + color_override = "blue", ) - user.client?.give_award(/datum/award/achievement/misc/void_ascension, user) ADD_TRAIT(user, TRAIT_RESISTLOWPRESSURE, MAGIC_TRAIT) // Let's get this show on the road! diff --git a/code/modules/antagonists/heretic/magic/aggressive_spread.dm b/code/modules/antagonists/heretic/magic/aggressive_spread.dm index de1233382f646..0c14550f0b269 100644 --- a/code/modules/antagonists/heretic/magic/aggressive_spread.dm +++ b/code/modules/antagonists/heretic/magic/aggressive_spread.dm @@ -10,16 +10,25 @@ school = SCHOOL_FORBIDDEN cooldown_time = 30 SECONDS - invocation = "A'GRSV SPR'D" - invocation_type = INVOCATION_WHISPER + invocation = "Agresiv'noe rasprostra-neniye!" + invocation_type = INVOCATION_SHOUT spell_requirements = NONE - aoe_radius = 3 + aoe_radius = 2 /datum/action/cooldown/spell/aoe/rust_conversion/get_things_to_cast_on(atom/center) - return RANGE_TURFS(aoe_radius, center) -/datum/action/cooldown/spell/aoe/rust_conversion/cast_on_thing_in_aoe(turf/victim, atom/caster) + var/list/things_to_convert = RANGE_TURFS(aoe_radius, center) + + // Also converts things right next to you. + for(var/atom/movable/nearby_movable in view(1, center)) + if(nearby_movable == owner || !isstructure(nearby_movable) ) + continue + things_to_convert += nearby_movable + + return things_to_convert + +/datum/action/cooldown/spell/aoe/rust_conversion/cast_on_thing_in_aoe(turf/victim, mob/living/caster) // We have less chance of rusting stuff that's further var/distance_to_caster = get_dist(victim, caster) var/chance_of_not_rusting = (max(distance_to_caster, 1) - 1) * 100 / (aoe_radius + 1) @@ -27,9 +36,11 @@ if(prob(chance_of_not_rusting)) return - victim.rust_heretic_act() + if(ismob(caster)) + caster.do_rust_heretic_act(victim) + else + victim.rust_heretic_act() -/datum/action/cooldown/spell/aoe/rust_conversion/small - name = "Rust Conversion" - desc = "Spreads rust onto nearby surfaces." - aoe_radius = 2 +/datum/action/cooldown/spell/aoe/rust_conversion/construct + name = "Construct Spread" + cooldown_time = 15 SECONDS diff --git a/code/modules/antagonists/heretic/magic/apetravulnera.dm b/code/modules/antagonists/heretic/magic/apetravulnera.dm index e80d08911848c..eedef71f4b6c8 100644 --- a/code/modules/antagonists/heretic/magic/apetravulnera.dm +++ b/code/modules/antagonists/heretic/magic/apetravulnera.dm @@ -10,8 +10,8 @@ school = SCHOOL_FORBIDDEN cooldown_time = 45 SECONDS - invocation = "AP'TRA VULN'RA!" - invocation_type = INVOCATION_WHISPER + invocation = "Shea' shen-eh!" + invocation_type = INVOCATION_SHOUT spell_requirements = NONE cast_range = 4 diff --git a/code/modules/antagonists/heretic/magic/ash_ascension.dm b/code/modules/antagonists/heretic/magic/ash_ascension.dm index 4c77a06f281d7..70422a7c48a37 100644 --- a/code/modules/antagonists/heretic/magic/ash_ascension.dm +++ b/code/modules/antagonists/heretic/magic/ash_ascension.dm @@ -10,7 +10,7 @@ school = SCHOOL_FORBIDDEN cooldown_time = 70 SECONDS - invocation = "FL'MS" + invocation = "EID'R-ELDR!!!" invocation_type = INVOCATION_WHISPER spell_requirements = NONE @@ -53,7 +53,8 @@ return for(var/turf/nearby_turf as anything in RANGE_TURFS(1, owner)) - new /obj/effect/hotspot(nearby_turf) + var/obj/effect/hotspot/flame_tile = locate(nearby_turf) || new(nearby_turf) + flame_tile.alpha = 125 nearby_turf.hotspot_expose(750, 25 * seconds_between_ticks, 1) for(var/mob/living/fried_living in nearby_turf.contents - owner) fried_living.apply_damage(2.5 * seconds_between_ticks, BURN) @@ -71,8 +72,8 @@ school = SCHOOL_FORBIDDEN cooldown_time = 30 SECONDS - invocation = "C'SC'DE" - invocation_type = INVOCATION_WHISPER + invocation = "ILLA-LASARA'FOSS!!!" + invocation_type = INVOCATION_SHOUT spell_requirements = NONE /// The radius the flames will go around the caster. @@ -86,7 +87,8 @@ /datum/action/cooldown/spell/fire_cascade/proc/fire_cascade(atom/centre, flame_radius = 1) for(var/i in 0 to flame_radius) for(var/turf/nearby_turf as anything in spiral_range_turfs(i + 1, centre)) - new /obj/effect/hotspot(nearby_turf) + var/obj/effect/hotspot/flame_tile = locate(nearby_turf) || new(nearby_turf) + flame_tile.alpha = 125 nearby_turf.hotspot_expose(750, 50, 1) for(var/mob/living/fried_living in nearby_turf.contents - owner) fried_living.apply_damage(5, BURN) @@ -110,7 +112,7 @@ school = SCHOOL_FORBIDDEN cooldown_time = 300 - invocation = "F'RE" + invocation = "Eld'sky!" invocation_type = INVOCATION_WHISPER spell_requirements = NONE @@ -127,16 +129,17 @@ INVOKE_ASYNC(src, PROC_REF(fire_line), owner, line_target(offset, flame_line_length, target, owner)) /datum/action/cooldown/spell/pointed/ash_beams/proc/line_target(offset, range, atom/at, atom/user) + var/turf/user_loc = get_turf(user) if(!at) return - var/angle = ATAN2(at.x - user.x, at.y - user.y) + offset + var/angle = ATAN2(at.x - user_loc.x, at.y - user_loc.y) + offset var/turf/T = get_turf(user) for(var/i in 1 to range) - var/turf/check = locate(user.x + cos(angle) * i, user.y + sin(angle) * i, user.z) + var/turf/check = locate(user_loc.x + cos(angle) * i, user_loc.y + sin(angle) * i, user_loc.z) if(!check) break T = check - return (get_line(user, T) - get_turf(user)) + return (get_line(user_loc, T) - user_loc) /datum/action/cooldown/spell/pointed/ash_beams/proc/fire_line(atom/source, list/turfs) var/list/hit_list = list() diff --git a/code/modules/antagonists/heretic/magic/ash_jaunt.dm b/code/modules/antagonists/heretic/magic/ash_jaunt.dm index 41242063a9098..4f8c59d635145 100644 --- a/code/modules/antagonists/heretic/magic/ash_jaunt.dm +++ b/code/modules/antagonists/heretic/magic/ash_jaunt.dm @@ -10,7 +10,7 @@ school = SCHOOL_FORBIDDEN cooldown_time = 15 SECONDS - invocation = "ASH'N P'SSG'" + invocation = "Askgraar' goetur!" invocation_type = INVOCATION_WHISPER spell_requirements = NONE diff --git a/code/modules/antagonists/heretic/magic/blood_cleave.dm b/code/modules/antagonists/heretic/magic/blood_cleave.dm index d5317f23e344b..b3370a3ccc614 100644 --- a/code/modules/antagonists/heretic/magic/blood_cleave.dm +++ b/code/modules/antagonists/heretic/magic/blood_cleave.dm @@ -10,7 +10,7 @@ school = SCHOOL_FORBIDDEN cooldown_time = 45 SECONDS - invocation = "CL'VE!" + invocation = "Fer're!" invocation_type = INVOCATION_WHISPER spell_requirements = NONE diff --git a/code/modules/antagonists/heretic/magic/blood_siphon.dm b/code/modules/antagonists/heretic/magic/blood_siphon.dm index 1e3d6258826d4..6280353a072a5 100644 --- a/code/modules/antagonists/heretic/magic/blood_siphon.dm +++ b/code/modules/antagonists/heretic/magic/blood_siphon.dm @@ -11,7 +11,7 @@ school = SCHOOL_FORBIDDEN cooldown_time = 15 SECONDS - invocation = "FL'MS O'ET'RN'ITY." + invocation = "Sanguis suctio!" invocation_type = INVOCATION_WHISPER spell_requirements = NONE diff --git a/code/modules/antagonists/heretic/magic/burglar_finesse.dm b/code/modules/antagonists/heretic/magic/burglar_finesse.dm index 7bb6960354ec7..c5264119bb48e 100644 --- a/code/modules/antagonists/heretic/magic/burglar_finesse.dm +++ b/code/modules/antagonists/heretic/magic/burglar_finesse.dm @@ -9,7 +9,7 @@ school = SCHOOL_FORBIDDEN cooldown_time = 40 SECONDS - invocation = "Y'O'K!" + invocation = "Khenem" invocation_type = INVOCATION_WHISPER spell_requirements = NONE @@ -26,7 +26,7 @@ return FALSE var/obj/storage_item = locate(/obj/item/storage/backpack) in cast_on.contents - + if(isnull(storage_item)) return FALSE diff --git a/code/modules/antagonists/heretic/magic/cosmic_expansion.dm b/code/modules/antagonists/heretic/magic/cosmic_expansion.dm index ad9ac0989b7e3..6869dc0df51c0 100644 --- a/code/modules/antagonists/heretic/magic/cosmic_expansion.dm +++ b/code/modules/antagonists/heretic/magic/cosmic_expansion.dm @@ -11,7 +11,7 @@ school = SCHOOL_FORBIDDEN cooldown_time = 45 SECONDS - invocation = "C'SM'S 'XP'ND" + invocation = "An'gar baltil!" invocation_type = INVOCATION_SHOUT spell_requirements = NONE @@ -28,7 +28,7 @@ /datum/action/cooldown/spell/conjure/cosmic_expansion/cast(mob/living/cast_on) new expansion_effect(get_turf(cast_on)) for(var/mob/living/nearby_mob in range(star_mark_range, cast_on)) - if(cast_on == nearby_mob) + if(cast_on == nearby_mob || cast_on.buckled == nearby_mob) continue nearby_mob.apply_status_effect(/datum/status_effect/star_mark, cast_on) if (ascended) diff --git a/code/modules/antagonists/heretic/magic/cosmic_runes.dm b/code/modules/antagonists/heretic/magic/cosmic_runes.dm index 207b60ae9393a..e07aa4fbe8b8a 100644 --- a/code/modules/antagonists/heretic/magic/cosmic_runes.dm +++ b/code/modules/antagonists/heretic/magic/cosmic_runes.dm @@ -11,7 +11,7 @@ school = SCHOOL_FORBIDDEN cooldown_time = 15 SECONDS - invocation = "ST'R R'N'" + invocation = "Is'zara-runen" invocation_type = INVOCATION_WHISPER spell_requirements = NONE diff --git a/code/modules/antagonists/heretic/magic/eldritch_blind.dm b/code/modules/antagonists/heretic/magic/eldritch_blind.dm index 8df20503821b0..413ff4fe67810 100644 --- a/code/modules/antagonists/heretic/magic/eldritch_blind.dm +++ b/code/modules/antagonists/heretic/magic/eldritch_blind.dm @@ -5,7 +5,7 @@ overlay_icon_state = "bg_heretic_border" school = SCHOOL_FORBIDDEN - invocation = "E'E'S" + invocation = "Caecus" spell_requirements = NONE cast_range = 10 diff --git a/code/modules/antagonists/heretic/magic/eldritch_emplosion.dm b/code/modules/antagonists/heretic/magic/eldritch_emplosion.dm index c68ed07c81f8c..4028f80f84cea 100644 --- a/code/modules/antagonists/heretic/magic/eldritch_emplosion.dm +++ b/code/modules/antagonists/heretic/magic/eldritch_emplosion.dm @@ -8,7 +8,7 @@ school = SCHOOL_FORBIDDEN cooldown_time = 30 SECONDS - invocation = "E'P" + invocation = "Pulsus Energiae" invocation_type = INVOCATION_WHISPER spell_requirements = NONE diff --git a/code/modules/antagonists/heretic/magic/eldritch_shapeshift.dm b/code/modules/antagonists/heretic/magic/eldritch_shapeshift.dm index e598f1f9215b9..bde032a3b39fd 100644 --- a/code/modules/antagonists/heretic/magic/eldritch_shapeshift.dm +++ b/code/modules/antagonists/heretic/magic/eldritch_shapeshift.dm @@ -7,7 +7,7 @@ overlay_icon_state = "bg_heretic_border" school = SCHOOL_FORBIDDEN - invocation = "SH'PE" + invocation = "Forma" invocation_type = INVOCATION_WHISPER spell_requirements = NONE diff --git a/code/modules/antagonists/heretic/magic/fire_blast.dm b/code/modules/antagonists/heretic/magic/fire_blast.dm index f76a1f18d1757..8c6d632be9f2d 100644 --- a/code/modules/antagonists/heretic/magic/fire_blast.dm +++ b/code/modules/antagonists/heretic/magic/fire_blast.dm @@ -12,7 +12,7 @@ school = SCHOOL_FORBIDDEN cooldown_time = 45 SECONDS - invocation = "V'LC'N!" + invocation = "Eld'fjall!" invocation_type = INVOCATION_SHOUT spell_requirements = NONE channel_time = 5 SECONDS @@ -23,8 +23,8 @@ var/beam_duration = 2 SECONDS /datum/action/cooldown/spell/charged/beam/fire_blast/cast(atom/cast_on) - if(isliving(cast_on)) - var/mob/living/caster = cast_on + var/mob/living/caster = get_caster_from_target(cast_on) + if(istype(caster)) // Caster becomes fireblasted, but in a good way - heals damage over time caster.apply_status_effect(/datum/status_effect/fire_blasted, beam_duration, -2) return ..() diff --git a/code/modules/antagonists/heretic/magic/flesh_ascension.dm b/code/modules/antagonists/heretic/magic/flesh_ascension.dm index a2d792080e058..add0704a8d61a 100644 --- a/code/modules/antagonists/heretic/magic/flesh_ascension.dm +++ b/code/modules/antagonists/heretic/magic/flesh_ascension.dm @@ -9,7 +9,7 @@ school = SCHOOL_FORBIDDEN - invocation = "REALITY UNCOIL!" + invocation = "REALITAS EXSERPAT!!" invocation_type = INVOCATION_SHOUT spell_requirements = NONE diff --git a/code/modules/antagonists/heretic/magic/flesh_surgery.dm b/code/modules/antagonists/heretic/magic/flesh_surgery.dm index 898b1a63fa66c..96ccb8450f97b 100644 --- a/code/modules/antagonists/heretic/magic/flesh_surgery.dm +++ b/code/modules/antagonists/heretic/magic/flesh_surgery.dm @@ -11,8 +11,8 @@ school = SCHOOL_FORBIDDEN cooldown_time = 20 SECONDS - invocation = "CL'M M'N!" // "CLAIM MINE", but also almost "KALI MA" - invocation_type = INVOCATION_SHOUT + invocation = "Carnis chirurgia" + invocation_type = INVOCATION_WHISPER spell_requirements = NONE hand_path = /obj/item/melee/touch_attack/flesh_surgery @@ -135,7 +135,7 @@ // Round u pto the nearest generic zone (body, chest, arm) var/zone_to_check = check_zone(caster.zone_selected) - var/parsed_zone = parse_zone(zone_to_check) + var/parsed_zone = victim.parse_zone_with_bodypart(zone_to_check) var/list/organs_we_can_remove = list() for(var/obj/item/organ/organ as anything in carbon_victim.organs) diff --git a/code/modules/antagonists/heretic/magic/furious_steel.dm b/code/modules/antagonists/heretic/magic/furious_steel.dm index 1c82f36e0249a..36c7c07608bcb 100644 --- a/code/modules/antagonists/heretic/magic/furious_steel.dm +++ b/code/modules/antagonists/heretic/magic/furious_steel.dm @@ -11,7 +11,7 @@ school = SCHOOL_FORBIDDEN cooldown_time = 60 SECONDS - invocation = "F'LSH'NG S'LV'R!" + invocation = "Ham'sana-qasep!" invocation_type = INVOCATION_SHOUT spell_requirements = NONE @@ -67,7 +67,7 @@ QDEL_NULL(blade_effect) var/mob/living/living_user = on_who - blade_effect = living_user.apply_status_effect(/datum/status_effect/protective_blades, null, projectile_amount, 25, 0.66 SECONDS) + blade_effect = living_user.apply_status_effect(/datum/status_effect/protective_blades, null, projectile_amount, 25, 0.66 SECONDS, projectile_type) RegisterSignal(blade_effect, COMSIG_QDELETING, PROC_REF(on_status_effect_deleted)) /datum/action/cooldown/spell/pointed/projectile/furious_steel/on_deactivation(mob/on_who, refund_cooldown = TRUE) @@ -98,18 +98,20 @@ /obj/projectile/floating_blade name = "blade" - icon = 'icons/obj/service/kitchen.dmi' - icon_state = "knife" + icon = 'icons/effects/eldritch.dmi' + icon_state = "dio_knife" speed = 2 damage = 25 armour_penetration = 100 sharpness = SHARP_EDGED wound_bonus = 15 pass_flags = PASSTABLE | PASSFLAPS + /// Color applied as an outline filter on init + var/outline_color = "#f8f8ff" /obj/projectile/floating_blade/Initialize(mapload) . = ..() - add_filter("knife", 2, list("type" = "outline", "color" = "#f8f8ff", "size" = 1)) + add_filter("dio_knife", 2, list("type" = "outline", "color" = outline_color, "size" = 1)) /obj/projectile/floating_blade/prehit_pierce(atom/hit) if(isliving(hit) && isliving(firer)) @@ -128,3 +130,40 @@ return PROJECTILE_DELETE_WITHOUT_HITTING return ..() + +/obj/projectile/floating_blade/haunted + name = "ritual blade" + icon = 'icons/obj/weapons/khopesh.dmi' + icon_state = "render" + damage = 35 + wound_bonus = 25 + outline_color = "#D7CBCA" + +/datum/action/cooldown/spell/pointed/projectile/furious_steel/solo + name = "Lesser Furious Steel" + cooldown_time = 20 SECONDS + projectile_amount = 1 + active_msg = "You summon forth a blade of furious silver." + deactive_msg = "You conceal the blade of furious silver." + +/datum/action/cooldown/spell/pointed/projectile/furious_steel/haunted + name = "Cursed Steel" + desc = "Summon two cursed blades which orbit you. \ + While orbiting you, these blades will protect you from from attacks, but will be consumed on use. \ + Additionally, you can click to fire the blades at a target, dealing damage and causing bleeding." + background_icon_state = "bg_heretic" // kept intentionally + overlay_icon_state = "bg_cult_border" + button_icon = 'icons/mob/actions/actions_ecult.dmi' + button_icon_state = "cursed_steel" + sound = 'sound/weapons/guillotine.ogg' + + cooldown_time = 40 SECONDS + invocation = "IA!" + invocation_type = INVOCATION_SHOUT + + spell_requirements = NONE + + active_msg = "You summon forth two cursed blades." + deactive_msg = "You conceal the cursed blades." + projectile_amount = 2 + projectile_type = /obj/projectile/floating_blade/haunted diff --git a/code/modules/antagonists/heretic/magic/manse_link.dm b/code/modules/antagonists/heretic/magic/manse_link.dm index 06fd4dd9863f4..e077c6db2b45f 100644 --- a/code/modules/antagonists/heretic/magic/manse_link.dm +++ b/code/modules/antagonists/heretic/magic/manse_link.dm @@ -11,7 +11,7 @@ school = SCHOOL_FORBIDDEN cooldown_time = 20 SECONDS - invocation = "PI'RC' TH' M'ND." + invocation = "Diaperaste' to-myalo!" invocation_type = INVOCATION_SHOUT spell_requirements = NONE antimagic_flags = MAGIC_RESISTANCE|MAGIC_RESISTANCE_MIND diff --git a/code/modules/antagonists/heretic/magic/mansus_grasp.dm b/code/modules/antagonists/heretic/magic/mansus_grasp.dm index 4ba6aceb20093..483425f3847b5 100644 --- a/code/modules/antagonists/heretic/magic/mansus_grasp.dm +++ b/code/modules/antagonists/heretic/magic/mansus_grasp.dm @@ -10,7 +10,7 @@ school = SCHOOL_EVOCATION cooldown_time = 10 SECONDS - invocation = "R'CH T'H TR'TH!" + invocation = "Ad verum per aspera!" invocation_type = INVOCATION_SHOUT // Mimes can cast it. Chaplains can cast it. Anyone can cast it, so long as they have a hand. spell_requirements = SPELL_CASTABLE_WITHOUT_INVOCATION @@ -38,11 +38,34 @@ var/mob/living/living_hit = victim living_hit.apply_damage(10, BRUTE, wound_bonus = CANT_WOUND) - if(iscarbon(victim)) - var/mob/living/carbon/carbon_hit = victim - carbon_hit.adjust_timed_status_effect(4 SECONDS, /datum/status_effect/speech/slurring/heretic) - carbon_hit.AdjustKnockdown(5 SECONDS) - carbon_hit.adjustStaminaLoss(80) + if(!iscarbon(victim)) + return TRUE + + var/mob/living/carbon/carbon_hit = victim + + // Cultists are momentarily disoriented by the stunning aura. Enough for both parties to go 'oh shit' but only a mild combat ability. + // Cultists have an identical effect on their stun hand. The heretic's faster spell charge time is made up for by their lack of teammates. + if(IS_CULTIST(carbon_hit)) + carbon_hit.AdjustKnockdown(0.5 SECONDS) + carbon_hit.adjust_confusion_up_to(1.5 SECONDS, 3 SECONDS) + carbon_hit.adjust_dizzy_up_to(1.5 SECONDS, 3 SECONDS) + ADD_TRAIT(carbon_hit, TRAIT_NO_SIDE_KICK, REF(src)) // We don't want this to be a good stunning tool, just minor disorientation + addtimer(TRAIT_CALLBACK_REMOVE(carbon_hit, TRAIT_NO_SIDE_KICK, REF(src)), 1 SECONDS) + + var/old_color = carbon_hit.color + carbon_hit.color = COLOR_CULT_RED + animate(carbon_hit, color = old_color, time = 4 SECONDS, easing = EASE_IN) + carbon_hit.mob_light(range = 1.5, power = 2.5, color = COLOR_CULT_RED, duration = 0.5 SECONDS) + playsound(carbon_hit, 'sound/magic/curse.ogg', 50, TRUE) + + to_chat(caster, span_warning("An unholy force intervenes as you grasp [carbon_hit], absorbing most of the effects!")) + to_chat(carbon_hit, span_warning("As [caster] grasps you with eldritch forces, your blood magic absorbs most of the effects!")) + carbon_hit.balloon_alert_to_viewers("absorbed!") + return TRUE + + carbon_hit.adjust_timed_status_effect(4 SECONDS, /datum/status_effect/speech/slurring/heretic) + carbon_hit.AdjustKnockdown(5 SECONDS) + carbon_hit.adjustStaminaLoss(80) return TRUE diff --git a/code/modules/antagonists/heretic/magic/mind_gate.dm b/code/modules/antagonists/heretic/magic/mind_gate.dm index c5a6e74452a61..aa6b8ef20af4d 100644 --- a/code/modules/antagonists/heretic/magic/mind_gate.dm +++ b/code/modules/antagonists/heretic/magic/mind_gate.dm @@ -11,7 +11,7 @@ school = SCHOOL_FORBIDDEN cooldown_time = 20 SECONDS - invocation = "Op' 'oY 'Mi'd" + invocation = "Sha'ar ha-da'at" invocation_type = INVOCATION_WHISPER spell_requirements = NONE cast_range = 6 diff --git a/code/modules/antagonists/heretic/magic/moon_parade.dm b/code/modules/antagonists/heretic/magic/moon_parade.dm index 3b7f1d007cd6e..4919500e351de 100644 --- a/code/modules/antagonists/heretic/magic/moon_parade.dm +++ b/code/modules/antagonists/heretic/magic/moon_parade.dm @@ -11,7 +11,7 @@ school = SCHOOL_FORBIDDEN cooldown_time = 30 SECONDS - invocation = "L'N'R P'RAD" + invocation = "Tsiyun' levani!" invocation_type = INVOCATION_SHOUT spell_requirements = NONE diff --git a/code/modules/antagonists/heretic/magic/moon_ringleader.dm b/code/modules/antagonists/heretic/magic/moon_ringleader.dm index 3c0b1d2aedb52..e62c34bb990bb 100644 --- a/code/modules/antagonists/heretic/magic/moon_ringleader.dm +++ b/code/modules/antagonists/heretic/magic/moon_ringleader.dm @@ -12,7 +12,7 @@ school = SCHOOL_FORBIDDEN cooldown_time = 1 MINUTES - invocation = "R''S 'E" + invocation = "Manahel-qomem!" invocation_type = INVOCATION_SHOUT spell_requirements = NONE diff --git a/code/modules/antagonists/heretic/magic/moon_smile.dm b/code/modules/antagonists/heretic/magic/moon_smile.dm index 90a392691e9fa..236fd257e385d 100644 --- a/code/modules/antagonists/heretic/magic/moon_smile.dm +++ b/code/modules/antagonists/heretic/magic/moon_smile.dm @@ -1,7 +1,7 @@ /datum/action/cooldown/spell/pointed/moon_smile name = "Smile of the moon" desc = "Lets you turn the gaze of the moon on someone \ - temporarily blinding, muting, deafening and knocking down a single target." + temporarily blinding, muting, deafening and knocking down a single target if their sanity is low enough." background_icon_state = "bg_heretic" overlay_icon_state = "bg_heretic_border" button_icon = 'icons/mob/actions/actions_ecult.dmi' @@ -12,7 +12,7 @@ school = SCHOOL_FORBIDDEN cooldown_time = 20 SECONDS - invocation = "Mo'N S'M'LE" + invocation = "Hiyuk-levana!" invocation_type = INVOCATION_SHOUT spell_requirements = NONE cast_range = 6 @@ -37,16 +37,19 @@ playsound(cast_on, 'sound/hallucinations/i_see_you1.ogg', 50, 1) to_chat(cast_on, span_warning("Your eyes cry out in pain, your ears bleed and your lips seal! THE MOON SMILES UPON YOU!")) - cast_on.adjust_temp_blindness(moon_smile_duration + 5 SECONDS) - cast_on.set_eye_blur_if_lower(moon_smile_duration + 7 SECONDS) + cast_on.adjust_temp_blindness(moon_smile_duration + 1 SECONDS) + cast_on.set_eye_blur_if_lower(moon_smile_duration + 2 SECONDS) var/obj/item/organ/internal/ears/ears = cast_on.get_organ_slot(ORGAN_SLOT_EARS) //adjustEarDamage takes deafness duration parameter in one unit per two seconds, instead of the normal time, so we divide by two seconds - ears?.adjustEarDamage(0, (moon_smile_duration + 2 SECONDS) / (2 SECONDS)) + ears?.adjustEarDamage(0, (moon_smile_duration + 1 SECONDS) / (2 SECONDS)) - cast_on.adjust_silence(moon_smile_duration + 5 SECONDS) - cast_on.AdjustKnockdown(2 SECONDS) + cast_on.adjust_silence(moon_smile_duration + 1 SECONDS) cast_on.add_mood_event("moon_smile", /datum/mood_event/moon_smile) + + // Only knocksdown if the target has a low enough sanity + if(cast_on.mob_mood.sanity < 40) + cast_on.AdjustKnockdown(2 SECONDS) //Lowers sanity cast_on.mob_mood.set_sanity(cast_on.mob_mood.sanity - 20) return TRUE diff --git a/code/modules/antagonists/heretic/magic/nightwatcher_rebirth.dm b/code/modules/antagonists/heretic/magic/nightwatcher_rebirth.dm index 4e37f5db17fed..8a9b60644b6b7 100644 --- a/code/modules/antagonists/heretic/magic/nightwatcher_rebirth.dm +++ b/code/modules/antagonists/heretic/magic/nightwatcher_rebirth.dm @@ -11,7 +11,7 @@ school = SCHOOL_FORBIDDEN cooldown_time = 1 MINUTES - invocation = "GL'RY T' TH' N'GHT'W'TCH'ER" + invocation = "Dyrth-a Vaktry'ggjandi" invocation_type = INVOCATION_WHISPER spell_requirements = SPELL_REQUIRES_HUMAN diff --git a/code/modules/antagonists/heretic/magic/realignment.dm b/code/modules/antagonists/heretic/magic/realignment.dm index 081138b7181b9..dbce0fe0940dd 100644 --- a/code/modules/antagonists/heretic/magic/realignment.dm +++ b/code/modules/antagonists/heretic/magic/realignment.dm @@ -14,8 +14,8 @@ cooldown_reduction_per_rank = -6 SECONDS // we're not a wizard spell but we use the levelling mechanic spell_max_level = 10 // we can get up to / over a minute duration cd time - invocation = "R'S'T." - invocation_type = INVOCATION_SHOUT + invocation = "Rasut" + invocation_type = INVOCATION_WHISPER spell_requirements = NONE /datum/action/cooldown/spell/realignment/is_valid_target(atom/cast_on) @@ -53,6 +53,7 @@ duration = 8 SECONDS alert_type = /atom/movable/screen/alert/status_effect/realignment tick_interval = 0.2 SECONDS + show_duration = TRUE /datum/status_effect/realignment/get_examine_text() return span_notice("[owner.p_Theyre()] glowing a soft white.") diff --git a/code/modules/antagonists/heretic/magic/rust_construction.dm b/code/modules/antagonists/heretic/magic/rust_construction.dm index 130e3e06be23b..f8d6a2ff2be44 100644 --- a/code/modules/antagonists/heretic/magic/rust_construction.dm +++ b/code/modules/antagonists/heretic/magic/rust_construction.dm @@ -8,7 +8,7 @@ check_flags = AB_CHECK_INCAPACITATED|AB_CHECK_CONSCIOUS|AB_CHECK_HANDS_BLOCKED school = SCHOOL_FORBIDDEN - cooldown_time = 5 SECONDS + cooldown_time = 8 SECONDS invocation = "Someone raises a wall of rust." invocation_self_message = "You raise a wall of rust." @@ -16,15 +16,19 @@ spell_requirements = NONE cast_range = 4 - aim_assist = FALSE /// How long does the filter last on walls we make? var/filter_duration = 2 MINUTES +/** + * Overrides 'aim assist' because we always want to hit just the turf we clicked on. + */ +/datum/action/cooldown/spell/pointed/rust_construction/aim_assist(mob/living/caller, atom/target) + return get_turf(target) + /datum/action/cooldown/spell/pointed/rust_construction/is_valid_target(atom/cast_on) - if(!isfloorturf(cast_on)) - if(isturf(cast_on) && owner) - cast_on.balloon_alert(owner, "not a floor!") + if(!isturf(cast_on)) + cast_on.balloon_alert(owner, "not a wall or floor!") return FALSE if(!HAS_TRAIT(cast_on, TRAIT_RUSTY)) @@ -43,9 +47,22 @@ invocation = span_danger("[owner] drags [owner.p_their()] hand[living_owner.usable_hands == 1 ? "":"s"] upwards as a wall of rust rises out of [cast_on]!") invocation_self_message = span_notice("You drag [living_owner.usable_hands == 1 ? "a hand":"your hands"] upwards as a wall of rust rises out of [cast_on].") -/datum/action/cooldown/spell/pointed/rust_construction/cast(turf/open/cast_on) +/datum/action/cooldown/spell/pointed/rust_construction/cast(turf/cast_on) . = ..() var/rises_message = "rises out of [cast_on]" + + // If we casted at a wall we'll try to rust it. In the case of an enchanted wall it'll deconstruct it + if(isclosedturf(cast_on)) + cast_on.visible_message(span_warning("\The [cast_on] quakes as the rust causes it to crumble!")) + var/mob/living/living_owner = owner + living_owner?.do_rust_heretic_act(cast_on) + // ref transfers to floor + cast_on.Shake(shake_interval = 0.1 SECONDS, duration = 0.5 SECONDS) + // which we need to re-rust + living_owner?.do_rust_heretic_act(cast_on) + playsound(cast_on, 'sound/effects/bang.ogg', 50, vary = TRUE) + return + var/turf/closed/wall/new_wall = cast_on.place_on_top(/turf/closed/wall) if(!istype(new_wall)) return @@ -53,7 +70,8 @@ playsound(new_wall, 'sound/effects/constructform.ogg', 50, TRUE) new_wall.rust_heretic_act() new_wall.name = "\improper enchanted [new_wall.name]" - new_wall.hardness = 10 + new_wall.AddComponent(/datum/component/torn_wall) + new_wall.hardness = 60 new_wall.sheet_amount = 0 new_wall.girder_type = null @@ -61,8 +79,8 @@ // but I guess a fading filter will have to do for now as walls have 0 depth (currently) // damn though with 3/4ths walls this'll look sick just imagine it new_wall.add_filter("rust_wall", 2, list("type" = "outline", "color" = "#85be299c", "size" = 2)) - addtimer(CALLBACK(src, PROC_REF(fade_wall_filter), new_wall), filter_duration * (1/20)) - addtimer(CALLBACK(src,PROC_REF(remove_wall_filter), new_wall), filter_duration) + addtimer(CALLBACK(src, PROC_REF(fade_wall_filter), new_wall), filter_duration * 0.5) + addtimer(CALLBACK(src, PROC_REF(remove_wall_filter), new_wall), filter_duration) var/message_shown = FALSE for(var/mob/living/living_mob in cast_on) @@ -108,7 +126,7 @@ if(!rust_filter) return - animate(rust_filter, alpha = 0, time = filter_duration * (19/20)) + animate(rust_filter, alpha = 0, time = filter_duration * (9/20)) /datum/action/cooldown/spell/pointed/rust_construction/proc/remove_wall_filter(turf/closed/wall) if(QDELETED(wall)) diff --git a/code/modules/antagonists/heretic/magic/rust_wave.dm b/code/modules/antagonists/heretic/magic/rust_wave.dm index 5ca4b7da07e4b..7ecb3fd0ffbba 100644 --- a/code/modules/antagonists/heretic/magic/rust_wave.dm +++ b/code/modules/antagonists/heretic/magic/rust_wave.dm @@ -13,8 +13,8 @@ school = SCHOOL_FORBIDDEN cooldown_time = 30 SECONDS - invocation = "'NTR'P'C PL'M'" - invocation_type = INVOCATION_WHISPER + invocation = "Entro'pichniy-plim!" + invocation_type = INVOCATION_SHOUT spell_requirements = NONE cone_levels = 5 @@ -24,15 +24,18 @@ . = ..() new /obj/effect/temp_visual/dir_setting/entropic(get_step(cast_on, cast_on.dir), cast_on.dir) -/datum/action/cooldown/spell/cone/staggered/entropic_plume/do_turf_cone_effect(turf/target_turf, atom/caster, level) - target_turf.rust_heretic_act() +/datum/action/cooldown/spell/cone/staggered/entropic_plume/do_turf_cone_effect(turf/target_turf, mob/living/caster, level) + if(ismob(caster)) + caster.do_rust_heretic_act(target_turf) + else + target_turf.rust_heretic_act() /datum/action/cooldown/spell/cone/staggered/entropic_plume/do_mob_cone_effect(mob/living/victim, atom/caster, level) if(victim.can_block_magic(antimagic_flags) || IS_HERETIC_OR_MONSTER(victim) || victim == caster) return victim.apply_status_effect(/datum/status_effect/amok) victim.apply_status_effect(/datum/status_effect/cloudstruck, level * 1 SECONDS) - victim.reagents?.add_reagent(/datum/reagent/eldritch, max(1, 6 - level)) + victim.adjust_disgust(100) /datum/action/cooldown/spell/cone/staggered/entropic_plume/calculate_cone_shape(current_level) // At the first level (that isn't level 1) we will be small @@ -75,8 +78,8 @@ school = SCHOOL_FORBIDDEN cooldown_time = 35 SECONDS - invocation = "SPR'D TH' WO'D" - invocation_type = INVOCATION_WHISPER + invocation = "Diffunde' verbum!" + invocation_type = INVOCATION_SHOUT spell_requirements = NONE projectile_type = /obj/projectile/magic/aoe/rust_wave diff --git a/code/modules/antagonists/heretic/magic/space_crawl.dm b/code/modules/antagonists/heretic/magic/space_crawl.dm index 69a15d812bb55..49677e3bb5086 100644 --- a/code/modules/antagonists/heretic/magic/space_crawl.dm +++ b/code/modules/antagonists/heretic/magic/space_crawl.dm @@ -69,6 +69,11 @@ RegisterSignal(holder, COMSIG_MOVABLE_MOVED, PROC_REF(update_status_on_signal)) if(iscarbon(jaunter)) jaunter.drop_all_held_items() + // Sanity check to ensure we didn't lose our focus as a result. + if(!HAS_TRAIT(jaunter, TRAIT_ALLOW_HERETIC_CASTING)) + REMOVE_TRAIT(jaunter, TRAIT_NO_TRANSFORM, REF(src)) + exit_jaunt(jaunter, our_turf) + return FALSE // Give them some space hands to prevent them from doing things var/obj/item/space_crawl/left_hand = new(jaunter) var/obj/item/space_crawl/right_hand = new(jaunter) @@ -77,6 +82,8 @@ jaunter.put_in_hands(left_hand) jaunter.put_in_hands(right_hand) + RegisterSignal(jaunter, SIGNAL_REMOVETRAIT(TRAIT_ALLOW_HERETIC_CASTING), PROC_REF(on_focus_lost)) + RegisterSignal(jaunter, COMSIG_MOB_STATCHANGE, PROC_REF(on_stat_change)) our_turf.visible_message(span_warning("[jaunter] sinks into [our_turf]!")) playsound(our_turf, 'sound/magic/cosmic_energy.ogg', 50, TRUE, -1) new /obj/effect/temp_visual/space_explosion(our_turf) @@ -88,8 +95,8 @@ /** * Attempts to Exit the passed space or misc turf. */ -/datum/action/cooldown/spell/jaunt/space_crawl/proc/try_exit_jaunt(turf/our_turf, mob/living/jaunter) - if(HAS_TRAIT_FROM(jaunter, TRAIT_NO_TRANSFORM, REF(src))) +/datum/action/cooldown/spell/jaunt/space_crawl/proc/try_exit_jaunt(turf/our_turf, mob/living/jaunter, force = FALSE) + if(!force && HAS_TRAIT_FROM(jaunter, TRAIT_NO_TRANSFORM, REF(src))) to_chat(jaunter, span_warning("You cannot exit yet!!")) return FALSE @@ -101,6 +108,7 @@ /datum/action/cooldown/spell/jaunt/space_crawl/on_jaunt_exited(obj/effect/dummy/phased_mob/jaunt, mob/living/unjaunter) UnregisterSignal(jaunt, COMSIG_MOVABLE_MOVED) + UnregisterSignal(unjaunter, list(SIGNAL_REMOVETRAIT(TRAIT_ALLOW_HERETIC_CASTING), COMSIG_MOB_STATCHANGE)) playsound(get_turf(unjaunter), 'sound/magic/cosmic_energy.ogg', 50, TRUE, -1) new /obj/effect/temp_visual/space_explosion(get_turf(unjaunter)) if(iscarbon(unjaunter)) @@ -109,6 +117,19 @@ qdel(space_hand) return ..() +/// Signal proc for [SIGNAL_REMOVETRAIT] via [TRAIT_ALLOW_HERETIC_CASTING], losing our focus midcast will throw us out. +/datum/action/cooldown/spell/jaunt/space_crawl/proc/on_focus_lost(mob/living/source) + SIGNAL_HANDLER + var/turf/our_turf = get_turf(source) + try_exit_jaunt(our_turf, source, TRUE) + +/// Signal proc for [COMSIG_MOB_STATCHANGE], to throw us out of the jaunt if we lose consciousness. +/datum/action/cooldown/spell/jaunt/space_crawl/proc/on_stat_change(mob/living/source, new_stat, old_stat) + SIGNAL_HANDLER + if(new_stat != CONSCIOUS) + var/turf/our_turf = get_turf(source) + try_exit_jaunt(our_turf, source, TRUE) + /// Spacecrawl "hands", prevent the user from holding items in spacecrawl /obj/item/space_crawl name = "space crawl" diff --git a/code/modules/antagonists/heretic/magic/star_blast.dm b/code/modules/antagonists/heretic/magic/star_blast.dm index 48fdf2f26934b..294608a03b998 100644 --- a/code/modules/antagonists/heretic/magic/star_blast.dm +++ b/code/modules/antagonists/heretic/magic/star_blast.dm @@ -10,7 +10,7 @@ school = SCHOOL_FORBIDDEN cooldown_time = 20 SECONDS - invocation = "R'T'T' ST'R!" + invocation = "Pi-rig is'zara!" invocation_type = INVOCATION_SHOUT spell_requirements = NONE @@ -41,7 +41,7 @@ . = ..() var/mob/living/cast_on = firer for(var/mob/living/nearby_mob in range(star_mark_range, target)) - if(cast_on == nearby_mob) + if(cast_on == nearby_mob || cast_on.buckled == nearby_mob) continue nearby_mob.apply_status_effect(/datum/status_effect/star_mark, cast_on) diff --git a/code/modules/antagonists/heretic/magic/star_touch.dm b/code/modules/antagonists/heretic/magic/star_touch.dm index 89c5d02e7d498..dff56df4e3f1f 100644 --- a/code/modules/antagonists/heretic/magic/star_touch.dm +++ b/code/modules/antagonists/heretic/magic/star_touch.dm @@ -13,7 +13,7 @@ sound = 'sound/items/welder.ogg' school = SCHOOL_FORBIDDEN cooldown_time = 15 SECONDS - invocation = "ST'R 'N'RG'!" + invocation = "An'gar sig!" invocation_type = INVOCATION_SHOUT spell_requirements = NONE antimagic_flags = MAGIC_RESISTANCE diff --git a/code/modules/antagonists/heretic/magic/void_cold_cone.dm b/code/modules/antagonists/heretic/magic/void_cold_cone.dm index 92c45dc10b010..40dc9612a50f6 100644 --- a/code/modules/antagonists/heretic/magic/void_cold_cone.dm +++ b/code/modules/antagonists/heretic/magic/void_cold_cone.dm @@ -11,7 +11,7 @@ school = SCHOOL_FORBIDDEN cooldown_time = 30 SECONDS - invocation = "FR'ZE!" + invocation = "Sunya'kop!" invocation_type = INVOCATION_SHOUT spell_requirements = NONE diff --git a/code/modules/antagonists/heretic/magic/void_phase.dm b/code/modules/antagonists/heretic/magic/void_phase.dm index 350ca0f29c100..f3f0864224c4c 100644 --- a/code/modules/antagonists/heretic/magic/void_phase.dm +++ b/code/modules/antagonists/heretic/magic/void_phase.dm @@ -12,8 +12,8 @@ school = SCHOOL_FORBIDDEN cooldown_time = 30 SECONDS - invocation = "RE'L'TY PH'S'E." - invocation_type = INVOCATION_WHISPER + invocation = "Sunya'sthiti!" + invocation_type = INVOCATION_SHOUT spell_requirements = NONE cast_range = 9 diff --git a/code/modules/antagonists/heretic/magic/void_pull.dm b/code/modules/antagonists/heretic/magic/void_pull.dm index 2021bf8a04e4f..dc4673b0714ce 100644 --- a/code/modules/antagonists/heretic/magic/void_pull.dm +++ b/code/modules/antagonists/heretic/magic/void_pull.dm @@ -11,8 +11,8 @@ school = SCHOOL_FORBIDDEN cooldown_time = 40 SECONDS - invocation = "BR'NG F'RTH TH'M T' M'." - invocation_type = INVOCATION_WHISPER + invocation = "Sunya'apamkti!" + invocation_type = INVOCATION_SHOUT spell_requirements = NONE aoe_radius = 7 diff --git a/code/modules/antagonists/heretic/magic/wave_of_desperation.dm b/code/modules/antagonists/heretic/magic/wave_of_desperation.dm index 3b78b56ddc0ba..b9502f08967bb 100644 --- a/code/modules/antagonists/heretic/magic/wave_of_desperation.dm +++ b/code/modules/antagonists/heretic/magic/wave_of_desperation.dm @@ -11,8 +11,8 @@ school = SCHOOL_FORBIDDEN cooldown_time = 5 MINUTES - invocation = "F'K 'FF." - invocation_type = INVOCATION_WHISPER + invocation = "Kher' Sekh-em waaef'k!" + invocation_type = INVOCATION_SHOUT spell_requirements = NONE aoe_radius = 3 diff --git a/code/modules/antagonists/heretic/moon_lunatic.dm b/code/modules/antagonists/heretic/moon_lunatic.dm index 21177f1a62319..3d877ee962c11 100644 --- a/code/modules/antagonists/heretic/moon_lunatic.dm +++ b/code/modules/antagonists/heretic/moon_lunatic.dm @@ -13,29 +13,35 @@ var/datum/mind/ascended_heretic // The body of the ascended heretic who created us var/mob/living/carbon/human/ascended_body + // Our objective + var/datum/objective/lunatic/lunatic_obj + +/datum/antagonist/lunatic/on_gain() + // Masters gain an objective before so we dont want duplicates + for(var/objective in objectives) + if(!istype(objective, /datum/objective/lunatic)) + continue + return ..() + var/datum/objective/lunatic/loony = new() + objectives += loony + lunatic_obj = loony + return ..() /// Runs when the moon heretic creates us, used to give the lunatic a master /datum/antagonist/lunatic/proc/set_master(datum/mind/heretic_master, mob/living/carbon/human/heretic_body) src.ascended_heretic = heretic_master src.ascended_body = heretic_body - var/datum/objective/lunatic/lunatic_obj = new() lunatic_obj.master = heretic_master lunatic_obj.update_explanation_text() - objectives += lunatic_obj to_chat(owner, span_boldnotice("Ruin the lie, save the truth through obeying [heretic_master] the ringleader!")) -/datum/antagonist/lunatic/greet() - owner.current.playsound_local(get_turf(owner.current), 'sound/effects/moon_parade.ogg', 100, FALSE, pressure_affected = FALSE, use_reverb = FALSE) - return ..() - /datum/antagonist/lunatic/apply_innate_effects(mob/living/mob_override) var/mob/living/our_mob = mob_override || owner.current handle_clown_mutation(our_mob, "Ancient knowledge from the moon has allowed you to overcome your clownish nature, allowing you to wield weapons without harming yourself.") our_mob.faction |= FACTION_HERETIC - add_team_hud(our_mob) - add_team_hud(our_mob, /datum/antagonist/heretic) + add_team_hud(our_mob, /datum/antagonist/lunatic) ADD_TRAIT(our_mob, TRAIT_MADNESS_IMMUNE, REF(src)) var/datum/action/cooldown/lunatic_track/moon_track = new /datum/action/cooldown/lunatic_track() @@ -56,7 +62,28 @@ /datum/objective/lunatic explanation_text = "Assist your ringleader. If you are seeing this, scroll up in chat for who that is and report this" var/datum/mind/master + // If the person with this objective is a lunatic master + var/is_master = FALSE /datum/objective/lunatic/update_explanation_text() . = ..() - explanation_text = "Assist your ringleader [master]" + if(is_master) + explanation_text = "Lead your lunatics to further your own goals!" + return + explanation_text = "Assist your ringleader [master], do not harm fellow lunatics" + +// Lunatic master +/datum/antagonist/lunatic/master + name = "\improper Ringleader" + antag_hud_name = "lunatic_master" + +/datum/antagonist/lunatic/master/on_gain() + var/datum/objective/lunatic/loony = new() + objectives += loony + loony.is_master = TRUE + loony.update_explanation_text() + return ..() + +/datum/antagonist/lunatic/master/apply_innate_effects(mob/living/mob_override) + var/mob/living/our_mob = mob_override || owner.current + add_team_hud(our_mob, /datum/antagonist/lunatic) diff --git a/code/modules/antagonists/heretic/rust_effect.dm b/code/modules/antagonists/heretic/rust_effect.dm index e48faae429c25..ad86fa5a747f5 100644 --- a/code/modules/antagonists/heretic/rust_effect.dm +++ b/code/modules/antagonists/heretic/rust_effect.dm @@ -1,14 +1,15 @@ // Small visual effect imparted onto rusted things by rust heretics. -/obj/effect/temp_visual/glowing_rune +/obj/effect/glowing_rune icon = 'icons/effects/eldritch.dmi' icon_state = "small_rune_1" - duration = 1 MINUTES + anchored = TRUE layer = LOW_SIGIL_LAYER + mouse_opacity = MOUSE_OPACITY_TRANSPARENT plane = GAME_PLANE -/obj/effect/temp_visual/glowing_rune/Initialize(mapload) +/obj/effect/glowing_rune/Initialize(mapload) . = ..() pixel_y = rand(-6, 6) pixel_x = rand(-6, 6) - icon_state = "small_rune_[rand(12)]" + icon_state = "small_rune_[rand(1, 12)]" update_appearance() diff --git a/code/modules/antagonists/heretic/soultrapped_heretic.dm b/code/modules/antagonists/heretic/soultrapped_heretic.dm new file mode 100644 index 0000000000000..ffd92e09496cb --- /dev/null +++ b/code/modules/antagonists/heretic/soultrapped_heretic.dm @@ -0,0 +1,24 @@ +///a heretic that got soultrapped by cultists. does nothing, other than signify they suck +/datum/antagonist/soultrapped_heretic + name = "\improper Soultrapped Heretic" + roundend_category = "Heretics" + antagpanel_category = "Heretic" + job_rank = ROLE_HERETIC + antag_moodlet = /datum/mood_event/soultrapped_heretic + antag_hud_name = "heretic" + +// Will never show up because they're shades inside a sword +/datum/mood_event/soultrapped_heretic + description = "They trapped me! I can't escape!" + mood_change = -20 + +// always failure obj +/datum/objective/heretic_trapped + name = "soultrapped failure" + explanation_text = "Help the cult. Kill the cult. Help the crew. Kill the crew. Help your wielder. Kill your wielder. Kill everyone. Rattle your chains." + +/datum/antagonist/soultrapped_heretic/on_gain() + ..() + var/datum/objective/epic_fail = new /datum/objective/heretic_trapped() + epic_fail.completed = FALSE + objectives += epic_fail diff --git a/code/modules/antagonists/heretic/status_effects/buffs.dm b/code/modules/antagonists/heretic/status_effects/buffs.dm index 1ec0df389fcc9..35a6ab9268784 100644 --- a/code/modules/antagonists/heretic/status_effects/buffs.dm +++ b/code/modules/antagonists/heretic/status_effects/buffs.dm @@ -6,6 +6,7 @@ status_type = STATUS_EFFECT_REFRESH duration = 15 SECONDS alert_type = /atom/movable/screen/alert/status_effect/crucible_soul + show_duration = TRUE var/turf/location /datum/status_effect/crucible_soul/on_apply() @@ -30,6 +31,7 @@ id = "Blessing of Dusk and Dawn" status_type = STATUS_EFFECT_REFRESH duration = 60 SECONDS + show_duration = TRUE alert_type =/atom/movable/screen/alert/status_effect/duskndawn /datum/status_effect/duskndawn/on_apply() @@ -47,6 +49,7 @@ status_type = STATUS_EFFECT_REFRESH duration = 60 SECONDS tick_interval = 1 SECONDS + show_duration = TRUE alert_type = /atom/movable/screen/alert/status_effect/marshal /datum/status_effect/marshal/on_apply() @@ -115,6 +118,8 @@ var/time_between_initial_blades = 0.25 SECONDS /// If TRUE, we self-delete our status effect after all the blades are deleted. var/delete_on_blades_gone = TRUE + /// What blade type to create + var/blade_type = /obj/effect/floating_blade /// A list of blade effects orbiting / protecting our owner var/list/obj/effect/floating_blade/blades = list() @@ -124,12 +129,14 @@ max_num_blades = 4, blade_orbit_radius = 20, time_between_initial_blades = 0.25 SECONDS, + blade_type = /obj/effect/floating_blade, ) src.duration = new_duration src.max_num_blades = max_num_blades src.blade_orbit_radius = blade_orbit_radius src.time_between_initial_blades = time_between_initial_blades + src.blade_type = blade_type return ..() /datum/status_effect/protective_blades/on_apply() @@ -154,7 +161,7 @@ if(QDELETED(src) || QDELETED(owner)) return - var/obj/effect/floating_blade/blade = new(get_turf(owner)) + var/obj/effect/floating_blade/blade = new blade_type(get_turf(owner)) blades += blade blade.orbit(owner, blade_orbit_radius) RegisterSignal(blade, COMSIG_QDELETING, PROC_REF(remove_blade)) @@ -299,6 +306,7 @@ id = "Moon Grasp Hide Identity" status_type = STATUS_EFFECT_REFRESH duration = 15 SECONDS + show_duration = TRUE alert_type = /atom/movable/screen/alert/status_effect/moon_grasp_hide /datum/status_effect/moon_grasp_hide/on_apply() diff --git a/code/modules/antagonists/heretic/status_effects/ghoul.dm b/code/modules/antagonists/heretic/status_effects/ghoul.dm index 5c19fb1bf9a20..b212f1a024ac8 100644 --- a/code/modules/antagonists/heretic/status_effects/ghoul.dm +++ b/code/modules/antagonists/heretic/status_effects/ghoul.dm @@ -67,6 +67,7 @@ if(human_target.mind) var/datum/antagonist/heretic_monster/heretic_monster = human_target.mind.add_antag_datum(/datum/antagonist/heretic_monster) heretic_monster.set_owner(master_mind) + human_target.mind.remove_antag_datum(/datum/antagonist/cult) return TRUE diff --git a/code/modules/antagonists/heretic/status_effects/mark_effects.dm b/code/modules/antagonists/heretic/status_effects/mark_effects.dm index 3dffa2dd4fe80..b234fb604c241 100644 --- a/code/modules/antagonists/heretic/status_effects/mark_effects.dm +++ b/code/modules/antagonists/heretic/status_effects/mark_effects.dm @@ -95,28 +95,8 @@ effect_icon_state = "emark3" /datum/status_effect/eldritch/rust/on_effect() - if(iscarbon(owner)) - var/mob/living/carbon/carbon_owner = owner - var/static/list/organs_to_damage = list( - ORGAN_SLOT_BRAIN, - ORGAN_SLOT_EARS, - ORGAN_SLOT_EYES, - ORGAN_SLOT_LIVER, - ORGAN_SLOT_LUNGS, - ORGAN_SLOT_STOMACH, - ORGAN_SLOT_HEART, - ) - - // Roughly 75% of their organs will take a bit of damage - for(var/organ_slot in organs_to_damage) - if(prob(75)) - carbon_owner.adjustOrganLoss(organ_slot, 20) - - // And roughly 75% of their items will take a smack, too - for(var/obj/item/thing in carbon_owner.get_all_gear()) - if(!QDELETED(thing) && prob(75)) - thing.take_damage(100) - + owner.adjust_disgust(100) + owner.adjust_confusion(10 SECONDS) return ..() // MARK OF VOID diff --git a/code/modules/antagonists/heretic/structures/carving_knife.dm b/code/modules/antagonists/heretic/structures/carving_knife.dm index b9afe64324011..9bdad0ea5fce5 100644 --- a/code/modules/antagonists/heretic/structures/carving_knife.dm +++ b/code/modules/antagonists/heretic/structures/carving_knife.dm @@ -45,21 +45,14 @@ var/potion_string = span_info("\tThe " + initial(trap.name) + " - " + initial(trap.carver_tip)) . += potion_string -/obj/item/melee/rune_carver/afterattack(atom/target, mob/user, proximity_flag, click_parameters) - . = ..() - if(!proximity_flag) - return - +/obj/item/melee/rune_carver/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) if(!IS_HERETIC_OR_MONSTER(user)) - return - - if(!isopenturf(target)) - return - - if(is_type_in_typecache(target, blacklisted_turfs)) - return + return NONE + if(!isopenturf(interacting_with) || is_type_in_typecache(interacting_with, blacklisted_turfs)) + return NONE - INVOKE_ASYNC(src, PROC_REF(try_carve_rune), target, user) + INVOKE_ASYNC(src, PROC_REF(try_carve_rune), interacting_with, user) + return ITEM_INTERACT_SUCCESS /* * Begin trying to carve a rune. Go through a few checks, then call do_carve_rune if successful. diff --git a/code/modules/antagonists/heretic/structures/mawed_crucible.dm b/code/modules/antagonists/heretic/structures/mawed_crucible.dm index 8e5410f0f6751..2135ffa134ca5 100644 --- a/code/modules/antagonists/heretic/structures/mawed_crucible.dm +++ b/code/modules/antagonists/heretic/structures/mawed_crucible.dm @@ -57,6 +57,10 @@ return span_notice("It's at [round(atom_integrity * 100 / max_integrity)]% stability.") return ..() +// no breaky herety thingy +/obj/structure/destructible/eldritch_crucible/rust_heretic_act() + return + /obj/structure/destructible/eldritch_crucible/attacked_by(obj/item/weapon, mob/living/user) if(!iscarbon(user)) return ..() diff --git a/code/modules/antagonists/heretic/transmutation_rune.dm b/code/modules/antagonists/heretic/transmutation_rune.dm index 619e7d252957b..5e6ad0fb1cf7f 100644 --- a/code/modules/antagonists/heretic/transmutation_rune.dm +++ b/code/modules/antagonists/heretic/transmutation_rune.dm @@ -1,8 +1,9 @@ /// The heretic's rune, which they use to complete transmutation rituals. /obj/effect/heretic_rune name = "transmutation rune" - desc = "A flowing circle of shapes and runes is etched into the floor, filled with a thick black tar-like fluid." - icon_state = "" + desc = "A flowing circle of shapes and runes is etched into the floor, filled with a thick black tar-like fluid. This one looks pretty small." + icon = 'icons/obj/antags/cult/rune.dmi' + icon_state = "main1" anchored = TRUE interaction_flags_atom = INTERACT_ATOM_ATTACK_HAND resistance_flags = FIRE_PROOF | UNACIDABLE | ACID_PROOF diff --git a/code/modules/antagonists/malf_ai/malf_ai.dm b/code/modules/antagonists/malf_ai/malf_ai.dm index d0c39f405d5ad..358b618df99aa 100644 --- a/code/modules/antagonists/malf_ai/malf_ai.dm +++ b/code/modules/antagonists/malf_ai/malf_ai.dm @@ -20,6 +20,8 @@ var/should_give_codewords = TRUE ///since the module purchasing is built into the antag info, we need to keep track of its compact mode here var/module_picker_compactmode = FALSE + ///malf on_gain sound effect. Set here so Infected AI can override + var/malf_sound = 'sound/ambience/antag/malf.ogg' /datum/antagonist/malf_ai/New(give_objectives = TRUE) . = ..() @@ -39,7 +41,8 @@ malfunction_flavor = strings(MALFUNCTION_FLAVOR_FILE, employer) add_law_zero() - owner.current.playsound_local(get_turf(owner.current), 'sound/ambience/antag/malf.ogg', 100, FALSE, pressure_affected = FALSE, use_reverb = FALSE) + if(malf_sound) + owner.current.playsound_local(get_turf(owner.current), malf_sound, 100, FALSE, pressure_affected = FALSE, use_reverb = FALSE) owner.current.grant_language(/datum/language/codespeak, source = LANGUAGE_MALF) var/datum/atom_hud/data/hackyhud = GLOB.huds[DATA_HUD_MALF_APC] @@ -159,6 +162,8 @@ to_chat(malf_ai, "Your radio has been upgraded! Use :t to speak on an encrypted channel with Syndicate Agents!") + if(malf_ai.malf_picker) + return malf_ai.add_malf_picker() @@ -270,6 +275,8 @@ /datum/antagonist/malf_ai/infected name = "Infected AI" employer = "Infected AI" + can_assign_self_objectives = FALSE + malf_sound = null ///The player, to who is this AI slaved var/datum/mind/boss diff --git a/code/modules/antagonists/malf_ai/malf_ai_module_picker.dm b/code/modules/antagonists/malf_ai/malf_ai_module_picker.dm index 51058f82ac02e..0ac27c14c97bf 100644 --- a/code/modules/antagonists/malf_ai/malf_ai_module_picker.dm +++ b/code/modules/antagonists/malf_ai/malf_ai_module_picker.dm @@ -24,7 +24,7 @@ filtered_modules[AM.category][AM] = AM for(var/category in filtered_modules) - filtered_modules[category] = sortTim(filtered_modules[category], GLOBAL_PROC_REF(cmp_malfmodules_priority)) + sortTim(filtered_modules[category], GLOBAL_PROC_REF(cmp_malfmodules_priority)) return filtered_modules diff --git a/code/modules/antagonists/malf_ai/malf_ai_modules.dm b/code/modules/antagonists/malf_ai/malf_ai_modules.dm index 1ef00b9a298cf..a80ccec73bf37 100644 --- a/code/modules/antagonists/malf_ai/malf_ai_modules.dm +++ b/code/modules/antagonists/malf_ai/malf_ai_modules.dm @@ -47,6 +47,9 @@ GLOBAL_LIST_INIT(blacklisted_malf_machines, typecacheof(list( /obj/machinery/hypertorus/corner, /obj/machinery/atmospherics/components/binary/valve, /obj/machinery/portable_atmospherics/canister, + /obj/machinery/computer/shuttle, + /obj/machinery/computer/emergency_shuttle, + /obj/machinery/computer/gateway_control, ))) GLOBAL_LIST_INIT(malf_modules, subtypesof(/datum/ai_module)) @@ -450,7 +453,12 @@ GLOBAL_LIST_INIT(malf_modules, subtypesof(/datum/ai_module)) to_chat(caller, span_warning("You can only animate machines!")) return FALSE var/obj/machinery/clicked_machine = clicked_on - if(!clicked_machine.can_be_overridden() || is_type_in_typecache(clicked_machine, GLOB.blacklisted_malf_machines)) + + if(istype(clicked_machine, /obj/machinery/porta_turret_cover)) //clicking on a closed turret will attempt to override the turret itself instead of the animated/abstract cover. + var/obj/machinery/porta_turret_cover/clicked_turret = clicked_machine + clicked_machine = clicked_turret.parent_turret + + if((clicked_machine.resistance_flags & INDESTRUCTIBLE) || is_type_in_typecache(clicked_machine, GLOB.blacklisted_malf_machines)) to_chat(caller, span_warning("That machine can't be overridden!")) return FALSE @@ -538,7 +546,12 @@ GLOBAL_LIST_INIT(malf_modules, subtypesof(/datum/ai_module)) to_chat(caller, span_warning("You can only overload machines!")) return FALSE var/obj/machinery/clicked_machine = clicked_on - if(is_type_in_typecache(clicked_machine, GLOB.blacklisted_malf_machines)) + + if(istype(clicked_machine, /obj/machinery/porta_turret_cover)) //clicking on a closed turret will attempt to override the turret itself instead of the animated/abstract cover. + var/obj/machinery/porta_turret_cover/clicked_turret = clicked_machine + clicked_machine = clicked_turret.parent_turret + + if((clicked_machine.resistance_flags & INDESTRUCTIBLE) || is_type_in_typecache(clicked_machine, GLOB.blacklisted_malf_machines)) to_chat(caller, span_warning("You cannot overload that device!")) return FALSE diff --git a/code/modules/antagonists/ninja/energy_katana.dm b/code/modules/antagonists/ninja/energy_katana.dm index 54c3c25ebf452..61a9b81c364c1 100644 --- a/code/modules/antagonists/ninja/energy_katana.dm +++ b/code/modules/antagonists/ninja/energy_katana.dm @@ -44,12 +44,11 @@ spark_system.set_up(5, 0, src) spark_system.attach(src) -/obj/item/energy_katana/afterattack_secondary(atom/target, mob/user, proximity_flag, click_parameters) - . = ..() - if(. == SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN) - return - if(!target.density) - jaunt?.teleport(user, target) +/obj/item/energy_katana/ranged_interact_with_atom_secondary(atom/interacting_with, mob/living/user, list/modifiers) + if(!interacting_with.density) + jaunt?.teleport(user, interacting_with) + return ITEM_INTERACT_SUCCESS + return NONE /obj/item/energy_katana/equipped(mob/user, slot, initial) . = ..() diff --git a/code/modules/antagonists/ninja/ninjaDrainAct.dm b/code/modules/antagonists/ninja/ninjaDrainAct.dm index 0aaf5dbbfcf3b..f160ebb9c6244 100644 --- a/code/modules/antagonists/ninja/ninjaDrainAct.dm +++ b/code/modules/antagonists/ninja/ninjaDrainAct.dm @@ -85,13 +85,13 @@ hacking_module.charge_message(src, drain_total) //CELL// -/obj/item/stock_parts/cell/ninjadrain_act(mob/living/carbon/human/ninja, obj/item/mod/module/hacker/hacking_module) +/obj/item/stock_parts/power_store/cell/ninjadrain_act(mob/living/carbon/human/ninja, obj/item/mod/module/hacker/hacking_module) if(!ninja || !hacking_module) return NONE INVOKE_ASYNC(src, PROC_REF(ninjadrain_charge), ninja, hacking_module) return COMPONENT_CANCEL_ATTACK_CHAIN -/obj/item/stock_parts/cell/proc/ninjadrain_charge(mob/living/carbon/human/ninja, obj/item/mod/module/hacker/hacking_module) +/obj/item/stock_parts/power_store/cell/proc/ninjadrain_charge(mob/living/carbon/human/ninja, obj/item/mod/module/hacker/hacking_module) var/drain_total = 0 if(charge && !do_after(ninja, 3 SECONDS, target = src, hidden = TRUE)) drain_total = charge diff --git a/code/modules/antagonists/ninja/ninja_explosive.dm b/code/modules/antagonists/ninja/ninja_explosive.dm index 4c014da186320..6e61ad687614f 100644 --- a/code/modules/antagonists/ninja/ninja_explosive.dm +++ b/code/modules/antagonists/ninja/ninja_explosive.dm @@ -47,15 +47,16 @@ return detonation_area = objective.detonation_location -/obj/item/grenade/c4/ninja/afterattack(atom/movable/target, mob/ninja, flag) - if(!IS_SPACE_NINJA(ninja)) +/obj/item/grenade/c4/ninja/plant_c4(atom/bomb_target, mob/living/user) + if(!IS_SPACE_NINJA(user)) say("Access denied.") - return - . |= AFTERATTACK_PROCESSED_ITEM - if (!check_loc(ninja)) - return . - detonator = WEAKREF(ninja) - return . | ..() + return FALSE + if(!check_loc(user)) + return FALSE + if(!..()) + return FALSE + detonator = WEAKREF(user) + return TRUE /obj/item/grenade/c4/ninja/detonate(mob/living/lanced_by) if(!check_loc(detonator.resolve())) // if its moved, deactivate the c4 diff --git a/code/modules/antagonists/nukeop/datums/operative.dm b/code/modules/antagonists/nukeop/datums/operative.dm index 3b4c9fa4da7ce..9eca88d33852d 100644 --- a/code/modules/antagonists/nukeop/datums/operative.dm +++ b/code/modules/antagonists/nukeop/datums/operative.dm @@ -8,6 +8,7 @@ show_to_ghosts = TRUE hijack_speed = 2 //If you can't take out the station, take the shuttle instead. suicide_cry = "FOR THE SYNDICATE!!" + stinger_sound = 'sound/ambience/antag/ops.ogg' /// Which nukie team are we on? var/datum/team/nuclear/nuke_team /// If not assigned a team by default ops will try to join existing ones, set this to TRUE to always create new team. @@ -30,7 +31,7 @@ var/discount_limited_amount = 10 /datum/antagonist/nukeop/greet() - owner.current.playsound_local(get_turf(owner.current), 'sound/ambience/antag/ops.ogg',100,0, use_reverb = FALSE) + play_stinger() to_chat(owner, span_big("You are a [nuke_team ? nuke_team.syndicate_name : "syndicate"] agent!")) owner.announce_objectives() diff --git a/code/modules/antagonists/nukeop/datums/operative_leader.dm b/code/modules/antagonists/nukeop/datums/operative_leader.dm index 0c583bfe794b0..c2995e5575326 100644 --- a/code/modules/antagonists/nukeop/datums/operative_leader.dm +++ b/code/modules/antagonists/nukeop/datums/operative_leader.dm @@ -21,7 +21,7 @@ H.update_icons() /datum/antagonist/nukeop/leader/greet() - owner.current.playsound_local(get_turf(owner.current), 'sound/ambience/antag/ops.ogg',100,0, use_reverb = FALSE) + play_stinger() to_chat(owner, "You are the Syndicate [title] for this mission. You are responsible for guiding the team and your ID is the only one who can open the launch bay doors.") to_chat(owner, "If you feel you are not up to this task, give your ID and radio to another operative.") if(!CONFIG_GET(flag/disable_warops)) diff --git a/code/modules/antagonists/nukeop/datums/operative_team.dm b/code/modules/antagonists/nukeop/datums/operative_team.dm index 3345f3cf4d25f..1e06f32594d84 100644 --- a/code/modules/antagonists/nukeop/datums/operative_team.dm +++ b/code/modules/antagonists/nukeop/datums/operative_team.dm @@ -69,7 +69,7 @@ text += "
    " text += "(Syndicates used [TC_uses] TC) [purchases]" if(TC_uses == 0 && GLOB.station_was_nuked && !are_all_operatives_dead()) - text += "[icon2html('icons/ui_icons/antags/badass.dmi', world, "badass")]" + text += "[icon2html('icons/ui/antags/badass.dmi', world, "badass")]" parts += text diff --git a/code/modules/antagonists/nukeop/equipment/nuclear_bomb/beer_nuke.dm b/code/modules/antagonists/nukeop/equipment/nuclear_bomb/beer_nuke.dm index 2ed8787316f00..4275c807ea884 100644 --- a/code/modules/antagonists/nukeop/equipment/nuclear_bomb/beer_nuke.dm +++ b/code/modules/antagonists/nukeop/equipment/nuclear_bomb/beer_nuke.dm @@ -29,7 +29,7 @@ /obj/machinery/nuclearbomb/beer/attackby(obj/item/weapon, mob/user, params) if(weapon.is_refillable()) - weapon.afterattack(keg, user, TRUE) // redirect refillable containers to the keg, allowing them to be filled + weapon.interact_with_atom(keg, user) // redirect refillable containers to the keg, allowing them to be filled return TRUE // pretend we handled the attack, too. if(istype(weapon, /obj/item/nuke_core_container)) diff --git a/code/modules/antagonists/nukeop/outfits.dm b/code/modules/antagonists/nukeop/outfits.dm index eb251bcc363a2..5cd89e6c842a9 100644 --- a/code/modules/antagonists/nukeop/outfits.dm +++ b/code/modules/antagonists/nukeop/outfits.dm @@ -120,10 +120,7 @@ head = /obj/item/clothing/head/helmet/space/plasmaman/syndie uniform = /obj/item/clothing/under/plasmaman/syndicate glasses = /obj/item/clothing/glasses/overwatch - suit = /obj/item/clothing/suit/jacket/letterman_syndie r_hand = /obj/item/tank/internals/plasmaman/belt/full - command_radio = TRUE - tc = 0 /datum/outfit/syndicate/reinforcement/gorlex name = "Syndicate Operative - Gorlex Reinforcement" @@ -139,7 +136,7 @@ suit = /obj/item/clothing/suit/jacket/oversized gloves = /obj/item/clothing/gloves/fingerless glasses = /obj/item/clothing/glasses/sunglasses - mask = /obj/item/clothing/mask/cigarette/cigar + mask = /obj/item/cigarette/cigar faction = "Cybersun Industries" /datum/outfit/syndicate/reinforcement/donk @@ -212,3 +209,4 @@ shoes = /obj/item/clothing/shoes/sandal command_radio = TRUE tc = 0 + uplink_type = null diff --git a/code/modules/antagonists/obsessed/obsessed.dm b/code/modules/antagonists/obsessed/obsessed.dm index a866ef4c2fc6e..7316102e2ce09 100644 --- a/code/modules/antagonists/obsessed/obsessed.dm +++ b/code/modules/antagonists/obsessed/obsessed.dm @@ -12,6 +12,7 @@ suicide_cry = "FOR MY LOVE!!" preview_outfit = /datum/outfit/obsessed hardcore_random_bonus = TRUE + stinger_sound = 'sound/ambience/antag/creepalert.ogg' var/datum/brain_trauma/special/obsessed/trauma /datum/antagonist/obsessed/admin_add(datum/mind/new_owner,mob/admin) @@ -28,7 +29,7 @@ C.gain_trauma(/datum/brain_trauma/special/obsessed)//ZAP /datum/antagonist/obsessed/greet() - owner.current.playsound_local(get_turf(owner.current), 'sound/ambience/antag/creepalert.ogg', 100, FALSE, pressure_affected = FALSE, use_reverb = FALSE) + play_stinger() owner.announce_objectives() /datum/antagonist/obsessed/Destroy() @@ -47,7 +48,7 @@ var/icon/final_icon = finish_preview_icon(obsessed_icon) final_icon.Blend( - icon('icons/ui_icons/antags/obsessed.dmi', "obsession"), + icon('icons/ui/antags/obsessed.dmi', "obsession"), ICON_OVERLAY, ANTAGONIST_PREVIEW_ICON_SIZE - 30, 20, @@ -66,7 +67,7 @@ shoes = /obj/item/clothing/shoes/sneakers/black /datum/outfit/obsessed/post_equip(mob/living/carbon/human/H) - for(var/obj/item/carried_item in H.get_equipped_items(include_pockets = TRUE, include_accessories = TRUE)) + for(var/obj/item/carried_item in H.get_equipped_items(INCLUDE_POCKETS | INCLUDE_ACCESSORIES)) carried_item.add_mob_blood(H)//Oh yes, there will be blood... H.regenerate_icons() diff --git a/code/modules/antagonists/pirate/pirate.dm b/code/modules/antagonists/pirate/pirate.dm index 15a028b24d740..0fa80f5524776 100644 --- a/code/modules/antagonists/pirate/pirate.dm +++ b/code/modules/antagonists/pirate/pirate.dm @@ -85,7 +85,7 @@ //Lists notable loot. if(!cargo_hold || !cargo_hold.total_report) return "Nothing" - cargo_hold.total_report.total_value = sortTim(cargo_hold.total_report.total_value, cmp = GLOBAL_PROC_REF(cmp_numeric_dsc), associative = TRUE) + sortTim(cargo_hold.total_report.total_value, cmp = GLOBAL_PROC_REF(cmp_numeric_dsc), associative = TRUE) var/count = 0 var/list/loot_texts = list() for(var/datum/export/E in cargo_hold.total_report.total_value) diff --git a/code/modules/antagonists/pirate/pirate_event.dm b/code/modules/antagonists/pirate/pirate_event.dm index 40cf038a2147b..5ecefa3094d45 100644 --- a/code/modules/antagonists/pirate/pirate_event.dm +++ b/code/modules/antagonists/pirate/pirate_event.dm @@ -42,7 +42,7 @@ priority_announce("Incoming subspace communication. Secure channel opened at all communication consoles.", "Incoming Message", SSstation.announcer.get_rand_report_sound()) threat.answer_callback = CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(pirates_answered), threat, chosen_gang, payoff, world.time) addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(spawn_pirates), threat, chosen_gang), RESPONSE_MAX_TIME) - DScommunications.send_message(threat, unique = TRUE) + GLOB.communications_controller.send_message(threat, unique = TRUE) /proc/pirates_answered(datum/comm_message/threat, datum/pirate_gang/chosen_gang, payoff, initial_send_time) if(world.time > initial_send_time + RESPONSE_MAX_TIME) diff --git a/code/modules/antagonists/pirate/pirate_gangs.dm b/code/modules/antagonists/pirate/pirate_gangs.dm index aef8222a99348..bb7451e212a06 100644 --- a/code/modules/antagonists/pirate/pirate_gangs.dm +++ b/code/modules/antagonists/pirate/pirate_gangs.dm @@ -221,7 +221,7 @@ GLOBAL_LIST_INIT(heavy_pirate_gangs, init_pirate_gangs(is_heavy = TRUE)) TO WELCOME YOU INTO OUR SPACE IF YOU PAY %PAYOFF AS HOMAGE TO OUR LAW. BE WISE ON YOUR CHOICE!! \ (send message. send message. why message not sent?)." arrival_announcement = "I FIGURED OUT HOW TO FLY MY SHIP, WE WILL BE DOCKING NEXT TO YOU IN A MINUTE!!" - possible_answers = list("Please don't hurt me.","You are dumb, go larp somewhere else.") + possible_answers = list("Alright, i like my skull intact.","You are dumb, go larp somewhere else.") response_received = "THIS WILL SUFFICE, REMEMBER WHO OWNS YOU!!" response_rejected = "FOOLISH DECISION, I'LL MAKE AN EXAMPLE OUT OF YOUR CARCASS!! (does anyone remember how to pilot our ship?)" diff --git a/code/modules/antagonists/pirate/pirate_outfits.dm b/code/modules/antagonists/pirate/pirate_outfits.dm index 15a3d4fe2dcb2..aef7f1d9d4b92 100644 --- a/code/modules/antagonists/pirate/pirate_outfits.dm +++ b/code/modules/antagonists/pirate/pirate_outfits.dm @@ -72,7 +72,7 @@ id_trim = /datum/id_trim/pirate/captain/silverscale head = /obj/item/clothing/head/costume/crown - mask = /obj/item/clothing/mask/cigarette/cigar/havana + mask = /obj/item/cigarette/cigar/havana l_pocket = /obj/item/lighter /datum/outfit/pirate/interdyne diff --git a/code/modules/antagonists/pirate/pirate_shuttle_equipment.dm b/code/modules/antagonists/pirate/pirate_shuttle_equipment.dm index eaa1de48b5865..16cad321853d9 100644 --- a/code/modules/antagonists/pirate/pirate_shuttle_equipment.dm +++ b/code/modules/antagonists/pirate/pirate_shuttle_equipment.dm @@ -428,7 +428,7 @@ /datum/export/pirate/ransom/sell_object(mob/living/carbon/human/sold_item, datum/export_report/report, dry_run = TRUE, apply_elastic = TRUE) . = ..() - if(. == EXPORT_NOT_SOLD) + if(. == EXPORT_NOT_SOLD || dry_run) return var/turf/picked_turf = pick(GLOB.holdingfacility) sold_item.forceMove(picked_turf) @@ -439,7 +439,7 @@ sold_item.flash_act() sold_item.adjust_confusion(10 SECONDS) sold_item.adjust_dizzy(10 SECONDS) - addtimer(src, CALLBACK(src, PROC_REF(send_back_to_station), sold_item), COME_BACK_FROM_CAPTURE_TIME) + addtimer(CALLBACK(src, PROC_REF(send_back_to_station), sold_item), COME_BACK_FROM_CAPTURE_TIME) to_chat(sold_item, span_hypnophrase("A million voices echo in your head... \"Yaarrr, thanks for the booty, landlubber. \ You will be ransomed back to your station, so it's only a matter of time before we ship you back...")) diff --git a/code/modules/antagonists/revolution/revolution.dm b/code/modules/antagonists/revolution/revolution.dm index e34907d64ae46..fa07215cf6715 100644 --- a/code/modules/antagonists/revolution/revolution.dm +++ b/code/modules/antagonists/revolution/revolution.dm @@ -6,6 +6,7 @@ antag_moodlet = /datum/mood_event/revolution antag_hud_name = "rev" suicide_cry = "VIVA LA REVOLUTION!!" + stinger_sound = 'sound/ambience/antag/revolutionary_tide.ogg' var/datum/team/revolution/rev_team /// When this antagonist is being de-antagged, this is the source. Can be a mob (for mindshield/blunt force trauma) or a #define string. @@ -67,7 +68,6 @@ /datum/antagonist/rev/greet() . = ..() to_chat(owner, span_userdanger("Help your cause. Do not harm your fellow freedom fighters. You can identify your comrades by the red \"R\" icons, and your leaders by the blue \"R\" icons. Help them kill the heads to win the revolution!")) - owner.current.playsound_local(get_turf(owner.current), 'sound/ambience/antag/revolutionary_tide.ogg', 100, FALSE, pressure_affected = FALSE, use_reverb = FALSE) owner.announce_objectives() /datum/antagonist/rev/create_team(datum/team/revolution/new_team) diff --git a/code/modules/antagonists/space_dragon/carp_rift.dm b/code/modules/antagonists/space_dragon/carp_rift.dm index 8a74d4b63da3c..828ee94587fcb 100644 --- a/code/modules/antagonists/space_dragon/carp_rift.dm +++ b/code/modules/antagonists/space_dragon/carp_rift.dm @@ -19,7 +19,7 @@ return var/area/rift_location = get_area(owner) if(!(rift_location in dragon.chosen_rift_areas)) - owner.balloon_alert(owner, "can't summon a rift here!") + owner.balloon_alert(owner, "can't summon a rift here! check your objectives!") return for(var/obj/structure/carp_rift/rift as anything in dragon.rift_list) var/area/used_location = get_area(rift) @@ -160,7 +160,7 @@ newcarp.faction = dragon.owner.current.faction.Copy() if(SPT_PROB(1.5, seconds_per_tick)) var/rand_dir = pick(GLOB.cardinals) - DSmove_manager.move_to(src, get_step(src, rand_dir), 1) + GLOB.move_manager.move_to(src, get_step(src, rand_dir), 1) return // Increase time trackers and check for any updated states. diff --git a/code/modules/antagonists/space_ninja/space_ninja.dm b/code/modules/antagonists/space_ninja/space_ninja.dm index bf19635ed9b0d..7f88c687c12d1 100644 --- a/code/modules/antagonists/space_ninja/space_ninja.dm +++ b/code/modules/antagonists/space_ninja/space_ninja.dm @@ -2,7 +2,7 @@ name = "\improper Space Ninja" antagpanel_category = ANTAG_GROUP_NINJAS job_rank = ROLE_NINJA - antag_hud_name = "space_ninja" + antag_hud_name = "ninja" hijack_speed = 1 show_name_in_check_antagonists = TRUE show_to_ghosts = TRUE diff --git a/code/modules/antagonists/spy/spy.dm b/code/modules/antagonists/spy/spy.dm index 89809958b29b6..8bcc113f08939 100644 --- a/code/modules/antagonists/spy/spy.dm +++ b/code/modules/antagonists/spy/spy.dm @@ -130,30 +130,34 @@ your_mission.owner = owner your_mission.explanation_text = pick_list_replacements(SPY_OBJECTIVE_FILE, "objective_body") objectives += your_mission - + if((length(objectives) < 3) && prob(25)) switch(rand(1, 4)) if(1) var/datum/objective/protect/save_the_person = new() save_the_person.owner = owner + save_the_person.find_target() save_the_person.no_failure = TRUE objectives += save_the_person if(2) var/datum/objective/protect/nonhuman/save_the_entity = new() save_the_entity.owner = owner + save_the_entity.find_target() save_the_entity.no_failure = TRUE objectives += save_the_entity if(3) var/datum/objective/jailbreak/save_the_jailbird = new() save_the_jailbird.owner = owner + save_the_jailbird.find_target() save_the_jailbird.no_failure = TRUE objectives += save_the_jailbird if(4) var/datum/objective/jailbreak/detain/cage_the_jailbird = new() cage_the_jailbird.owner = owner + cage_the_jailbird.find_target() cage_the_jailbird.no_failure = TRUE objectives += cage_the_jailbird - + if(prob(10)) var/datum/objective/martyr/leave_no_trace = new() leave_no_trace.owner = owner diff --git a/code/modules/antagonists/spy/spy_bounty.dm b/code/modules/antagonists/spy/spy_bounty.dm index 0a9422e07b807..28984ce2272bd 100644 --- a/code/modules/antagonists/spy/spy_bounty.dm +++ b/code/modules/antagonists/spy/spy_bounty.dm @@ -219,6 +219,8 @@ continue if(!is_station_level(thing_turf.z) && !is_mining_level(thing_turf.z)) continue + if(HAS_TRAIT(existing_thing, TRAIT_ITEM_OBJECTIVE_BLOCKED)) + continue all_valid_existing_things += existing_thing if(!length(all_valid_existing_things)) @@ -253,16 +255,14 @@ return FALSE desired_item = pick(valid_possible_items) - // We need to do some snowflake for items that do exist vs generic items - var/list/obj/item/existing_items = GLOB.steal_item_handler.objectives_by_path[desired_item.targetitem] - var/obj/item/the_item = length(existing_items) ? pick(existing_items) : desired_item.targetitem - var/the_item_name = istype(the_item) ? the_item.name : initial(the_item.name) - name = "[the_item_name] [difficulty == SPY_DIFFICULTY_HARD ? "Grand ":""]Theft" - help = "Steal any [the_item_name][desired_item.steal_hint ? ": [desired_item.steal_hint]" : "."]" + name = "[desired_item.name] [difficulty == SPY_DIFFICULTY_HARD ? "Grand ":""]Theft" + help = "Steal [desired_item.name][desired_item.steal_hint ? ": [desired_item.steal_hint]" : "."]" return TRUE /datum/spy_bounty/objective_item/is_stealable(atom/movable/stealing) - return istype(stealing, desired_item.targetitem) && desired_item.check_special_completion(stealing) + return istype(stealing, desired_item.targetitem) \ + && !HAS_TRAIT(stealing, TRAIT_ITEM_OBJECTIVE_BLOCKED) \ + && desired_item.check_special_completion(stealing) /datum/spy_bounty/objective_item/random_easy difficulty = SPY_DIFFICULTY_EASY diff --git a/code/modules/antagonists/spy/spy_uplink.dm b/code/modules/antagonists/spy/spy_uplink.dm index 88e091310ca0b..5de66271fe29c 100644 --- a/code/modules/antagonists/spy/spy_uplink.dm +++ b/code/modules/antagonists/spy/spy_uplink.dm @@ -56,7 +56,7 @@ /datum/component/spy_uplink/proc/on_attack_self(obj/item/source, mob/user) SIGNAL_HANDLER - if(is_our_spy(user)) + if(IS_SPY(user)) INVOKE_ASYNC(src, TYPE_PROC_REF(/datum, ui_interact), user) return NONE @@ -65,7 +65,7 @@ if(!ismovable(target)) return NONE - if(!is_our_spy(user)) + if(!IS_SPY(user)) return NONE if(!try_steal(target, user)) return NONE diff --git a/code/modules/antagonists/traitor/contractor/contract_teammate.dm b/code/modules/antagonists/traitor/contractor/contract_teammate.dm index 54fc958c1f89f..965d99e89ac6a 100644 --- a/code/modules/antagonists/traitor/contractor/contract_teammate.dm +++ b/code/modules/antagonists/traitor/contractor/contract_teammate.dm @@ -24,7 +24,7 @@ suit = /obj/item/clothing/suit/chameleon back = /obj/item/storage/backpack belt = /obj/item/modular_computer/pda/chameleon - mask = /obj/item/clothing/mask/cigarette/syndicate + mask = /obj/item/cigarette/syndicate shoes = /obj/item/clothing/shoes/chameleon/noslip ears = /obj/item/radio/headset/chameleon id = /obj/item/card/id/advanced/chameleon @@ -41,5 +41,5 @@ /datum/outfit/contractor_partner/post_equip(mob/living/carbon/human/H, visualsOnly) . = ..() - var/obj/item/clothing/mask/cigarette/syndicate/cig = H.get_item_by_slot(ITEM_SLOT_MASK) + var/obj/item/cigarette/syndicate/cig = H.get_item_by_slot(ITEM_SLOT_MASK) cig.light() diff --git a/code/modules/antagonists/traitor/datum_traitor.dm b/code/modules/antagonists/traitor/datum_traitor.dm index 5ad5aeecf26c7..733e22461c795 100644 --- a/code/modules/antagonists/traitor/datum_traitor.dm +++ b/code/modules/antagonists/traitor/datum_traitor.dm @@ -17,6 +17,7 @@ can_assign_self_objectives = TRUE default_custom_objective = "Perform an overcomplicated heist on valuable Nanotrasen assets." hardcore_random_bonus = TRUE + stinger_sound = 'sound/ambience/antag/tatoralert.ogg' ///The flag of uplink that this traitor is supposed to have. var/uplink_flag_given = UPLINK_TRAITORS @@ -114,8 +115,6 @@ owner.teach_crafting_recipe(/datum/crafting_recipe/syndicate_uplink_beacon) - owner.current.playsound_local(get_turf(owner.current), 'sound/ambience/antag/tatoralert.ogg', 100, FALSE, pressure_affected = FALSE, use_reverb = FALSE) - return ..() /datum/antagonist/traitor/on_removal() @@ -250,7 +249,7 @@ /datum/antagonist/traitor/proc/forge_single_generic_objective() if(prob(KILL_PROB)) - var/list/active_ais = active_ais() + var/list/active_ais = active_ais(skip_syndicate = TRUE) if(active_ais.len && prob(DESTROY_AI_PROB(GLOB.joined_player_list.len))) var/datum/objective/destroy/destroy_objective = new() destroy_objective.owner = owner @@ -349,7 +348,7 @@ if(uplink_owned) var/uplink_text = "(used [used_telecrystals] TC) [purchases]" if((used_telecrystals == 0) && traitor_won) - var/static/icon/badass = icon('icons/ui_icons/antags/badass.dmi', "badass") + var/static/icon/badass = icon('icons/ui/antags/badass.dmi', "badass") uplink_text += "[icon2html(badass, world)]" result += uplink_text diff --git a/code/modules/antagonists/traitor/objectives/destroy_heirloom.dm b/code/modules/antagonists/traitor/objectives/destroy_heirloom.dm index 59ea9b20afa7a..9182f23a649db 100644 --- a/code/modules/antagonists/traitor/objectives/destroy_heirloom.dm +++ b/code/modules/antagonists/traitor/objectives/destroy_heirloom.dm @@ -44,6 +44,7 @@ /datum/job/paramedic, /datum/job/psychologist, /datum/job/chemist, + /datum/job/coroner, // Service /datum/job/clown, /datum/job/botanist, @@ -75,6 +76,7 @@ telecrystal_reward = list(1, 2) target_jobs = list( // Cargo + /datum/job/bitrunner, /datum/job/shaft_miner, // Service /datum/job/chaplain, @@ -99,6 +101,7 @@ /datum/job/chief_medical_officer, /datum/job/research_director, /datum/job/quartermaster, + /datum/job/chief_engineer, ) /datum/traitor_objective/destroy_heirloom/captain diff --git a/code/modules/antagonists/traitor/objectives/eyesnatching.dm b/code/modules/antagonists/traitor/objectives/eyesnatching.dm index 5773c4e90e05d..31dec4e812a6b 100644 --- a/code/modules/antagonists/traitor/objectives/eyesnatching.dm +++ b/code/modules/antagonists/traitor/objectives/eyesnatching.dm @@ -190,7 +190,7 @@ ) eyeballies.apply_organ_damage(eyeballies.maxHealth) target.emote("scream") - playsound(target, "sound/effects/wounds/crackandbleed.ogg", 100) + playsound(target, 'sound/effects/wounds/crackandbleed.ogg', 100) log_combat(user, target, "cracked the skull of (eye snatching)", src) if(!do_after(user, eye_snatch_enthusiasm, target = target, extra_checks = CALLBACK(src, PROC_REF(eyeballs_exist), eyeballies, head, target))) diff --git a/code/modules/antagonists/traitor/objectives/kidnapping.dm b/code/modules/antagonists/traitor/objectives/kidnapping.dm index 85aad594516d9..ea7fef9b4b607 100644 --- a/code/modules/antagonists/traitor/objectives/kidnapping.dm +++ b/code/modules/antagonists/traitor/objectives/kidnapping.dm @@ -48,6 +48,7 @@ /datum/job/chemist, /datum/job/doctor, /datum/job/psychologist, + /datum/job/coroner, // Science /datum/job/geneticist, /datum/job/roboticist, @@ -79,6 +80,7 @@ target_jobs = list( // Cargo + /datum/job/bitrunner, /datum/job/shaft_miner, // Medical /datum/job/paramedic, diff --git a/code/modules/antagonists/traitor/objectives/kill_pet.dm b/code/modules/antagonists/traitor/objectives/kill_pet.dm index 21bf06eb38681..ddaf6ee47ce2a 100644 --- a/code/modules/antagonists/traitor/objectives/kill_pet.dm +++ b/code/modules/antagonists/traitor/objectives/kill_pet.dm @@ -55,6 +55,7 @@ JOB_HEAD_OF_SECURITY = list( /mob/living/basic/carp/pet/lia, /mob/living/basic/spider/giant/sgt_araneus, + /mob/living/basic/bear/snow/misha, ), JOB_WARDEN = list( /mob/living/basic/pet/dog/pug/mcgriff diff --git a/code/modules/antagonists/traitor/objectives/locate_weakpoint.dm b/code/modules/antagonists/traitor/objectives/locate_weakpoint.dm index 1976fd38fc8ae..4acfe7120489a 100644 --- a/code/modules/antagonists/traitor/objectives/locate_weakpoint.dm +++ b/code/modules/antagonists/traitor/objectives/locate_weakpoint.dm @@ -243,28 +243,24 @@ objective_weakref = null return ..() -/obj/item/grenade/c4/es8/afterattack(atom/movable/target, mob/user, flag) - if(!user.mind) - return - +/obj/item/grenade/c4/es8/plant_c4(atom/bomb_target, mob/living/user) if(!IS_TRAITOR(user)) to_chat(user, span_warning("You can't seem to find a way to detonate the charge.")) - return + return FALSE var/datum/traitor_objective/locate_weakpoint/objective = objective_weakref.resolve() - if(!objective || objective.objective_state == OBJECTIVE_STATE_INACTIVE || objective.handler.owner != user.mind) to_chat(user, span_warning("You don't think it would be wise to use [src].")) - return + return FALSE - var/area/target_area = get_area(target) + var/area/target_area = get_area(bomb_target) if (target_area.type != objective.weakpoint_area) to_chat(user, span_warning("[src] can only be detonated in [initial(objective.weakpoint_area.name)].")) - return + return FALSE - if(!isfloorturf(target) && !iswallturf(target)) + if(!isfloorturf(bomb_target) && !iswallturf(bomb_target)) to_chat(user, span_warning("[src] can only be planted on a wall or the floor!")) - return + return FALSE return ..() diff --git a/code/modules/antagonists/traitor/objectives/sabotage_machinery.dm b/code/modules/antagonists/traitor/objectives/sabotage_machinery.dm index 5a31c4c173976..5f3e2387a351f 100644 --- a/code/modules/antagonists/traitor/objectives/sabotage_machinery.dm +++ b/code/modules/antagonists/traitor/objectives/sabotage_machinery.dm @@ -66,7 +66,6 @@ GLOBAL_DATUM_INIT(objective_machine_handler, /datum/objective_target_machine_han telecrystal_reward = list(3, 4) progression_minimum = 15 MINUTES - progression_maximum = 30 MINUTES applicable_jobs = list( JOB_STATION_ENGINEER = /obj/machinery/telecomms/hub, diff --git a/code/modules/antagonists/traitor/objectives/steal.dm b/code/modules/antagonists/traitor/objectives/steal.dm index 22d8ed7d39c7b..fdcd693fed889 100644 --- a/code/modules/antagonists/traitor/objectives/steal.dm +++ b/code/modules/antagonists/traitor/objectives/steal.dm @@ -29,6 +29,8 @@ GLOBAL_DATUM_INIT(steal_item_handler, /datum/objective_item_handler, new()) /datum/objective_item_handler/proc/new_item_created(datum/source, obj/item/item) SIGNAL_HANDLER + if(HAS_TRAIT(item, TRAIT_ITEM_OBJECTIVE_BLOCKED)) + return if(!generated_items) item.add_stealing_item_objective() return @@ -224,6 +226,8 @@ GLOBAL_DATUM_INIT(steal_item_handler, /datum/objective_item_handler, new()) /datum/traitor_objective/steal_item/proc/handle_special_case(obj/item/source, obj/item/target) SIGNAL_HANDLER + if(HAS_TRAIT(target, TRAIT_ITEM_OBJECTIVE_BLOCKED)) + return COMPONENT_FORCE_FAIL_PLACEMENT if(istype(target, target_item.targetitem)) if(!target_item.check_special_completion(target)) return COMPONENT_FORCE_FAIL_PLACEMENT @@ -273,28 +277,26 @@ GLOBAL_DATUM_INIT(steal_item_handler, /datum/objective_item_handler, new()) . += span_notice("This device must be placed by clicking on the [initial(target_object_type.name)] with it.") . += span_notice("Remember, you may leave behind fingerprints or fibers on the device. Use soap or similar to scrub it clean to be safe!") -/obj/item/traitor_bug/afterattack(atom/movable/target, mob/user, proximity_flag, click_parameters) - . = ..() - if(!target_object_type) - return - if(!user.Adjacent(target)) - return - . |= AFTERATTACK_PROCESSED_ITEM +/obj/item/traitor_bug/interact_with_atom(atom/movable/target, mob/living/user, list/modifiers) + if(!target_object_type || !ismovable(target)) + return NONE + var/result = SEND_SIGNAL(src, COMSIG_TRAITOR_BUG_PRE_PLANTED_OBJECT, target) if(!(result & COMPONENT_FORCE_PLACEMENT)) if(result & COMPONENT_FORCE_FAIL_PLACEMENT || !istype(target, target_object_type)) balloon_alert(user, "you can't attach this onto here!") - return + return ITEM_INTERACT_BLOCKING if(!do_after(user, deploy_time, src, hidden = TRUE)) - return + return ITEM_INTERACT_BLOCKING if(planted_on) - return + return ITEM_INTERACT_BLOCKING forceMove(target) target.vis_contents += src vis_flags |= VIS_INHERIT_PLANE planted_on = target RegisterSignal(planted_on, COMSIG_QDELETING, PROC_REF(handle_planted_on_deletion)) SEND_SIGNAL(src, COMSIG_TRAITOR_BUG_PLANTED_OBJECT, target) + return ITEM_INTERACT_SUCCESS /obj/item/traitor_bug/proc/handle_planted_on_deletion() planted_on = null @@ -314,5 +316,5 @@ GLOBAL_DATUM_INIT(steal_item_handler, /datum/objective_item_handler, new()) UnregisterSignal(planted_on, COMSIG_QDELETING) planted_on = null -/obj/item/traitor_bug/attackby_storage_insert(datum/storage, atom/storage_holder, mob/user) +/obj/item/traitor_bug/storage_insert_on_interaction(datum/storage, atom/storage_holder, mob/user) return !istype(storage_holder, target_object_type) diff --git a/code/modules/antagonists/wishgranter/wishgranter.dm b/code/modules/antagonists/wishgranter/wishgranter.dm index bfac673535afc..fd18ffe5c1ed0 100644 --- a/code/modules/antagonists/wishgranter/wishgranter.dm +++ b/code/modules/antagonists/wishgranter/wishgranter.dm @@ -27,5 +27,5 @@ return H.dna.add_mutation(/datum/mutation/human/hulk) H.dna.add_mutation(/datum/mutation/human/xray) - H.dna.add_mutation(/datum/mutation/human/pressure_adaptation) + H.dna.add_mutation(/datum/mutation/human/adaptation/pressure) H.dna.add_mutation(/datum/mutation/human/telekinesis) diff --git a/code/modules/antagonists/wizard/equipment/artefact.dm b/code/modules/antagonists/wizard/equipment/artefact.dm index 222fcb39d1682..9176558c7a166 100644 --- a/code/modules/antagonists/wizard/equipment/artefact.dm +++ b/code/modules/antagonists/wizard/equipment/artefact.dm @@ -362,7 +362,7 @@ qdel(src) return RegisterSignal(src, COMSIG_MOVABLE_CROSS_OVER, PROC_REF(check_teleport)) - DSmove_manager.move_towards(src, get_turf(whistle.whistler)) + GLOB.move_manager.move_towards(src, get_turf(whistle.whistler)) /// Check if anything the tornado crosses is the creator. /obj/effect/temp_visual/teleporting_tornado/proc/check_teleport(datum/source, atom/movable/crossed) @@ -378,7 +378,7 @@ addtimer(CALLBACK(src, PROC_REF(send_away)), 2 SECONDS) /obj/effect/temp_visual/teleporting_tornado/proc/send_away() - var/turf/ending_turfs = find_safe_turf() + var/turf/ending_turfs = get_safe_random_station_turf() for(var/mob/stored_mobs as anything in pickedup_mobs) do_teleport(stored_mobs, ending_turfs, channel = TELEPORT_CHANNEL_MAGIC) animate(stored_mobs, pixel_y = null, time = 1 SECONDS) @@ -431,43 +431,45 @@ COMSIG_ITEM_MAGICALLY_CHARGED = PROC_REF(on_magic_charge), ) -/obj/item/runic_vendor_scepter/afterattack(atom/target, mob/user, proximity_flag, click_parameters) +/obj/item/runic_vendor_scepter/ranged_interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + return interact_with_atom(interacting_with, user, modifiers) + +/obj/item/runic_vendor_scepter/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) if(scepter_is_busy_recharging) user.balloon_alert(user, "busy!") - return - if(!check_allowed_items(target, not_inside = TRUE)) - return - . |= AFTERATTACK_PROCESSED_ITEM - var/turf/afterattack_turf = get_turf(target) - if(istype(target, /obj/machinery/vending/runic_vendor)) - var/obj/machinery/vending/runic_vendor/runic_explosion_target = target + return ITEM_INTERACT_BLOCKING + if(!check_allowed_items(interacting_with, not_inside = TRUE)) + return NONE + if(istype(interacting_with, /obj/machinery/vending/runic_vendor)) + var/obj/machinery/vending/runic_vendor/runic_explosion_target = interacting_with runic_explosion_target.runic_explosion() - return + return ITEM_INTERACT_SUCCESS + var/turf/afterattack_turf = get_turf(interacting_with) var/obj/machinery/vending/runic_vendor/vendor_on_turf = locate() in afterattack_turf if(vendor_on_turf) vendor_on_turf.runic_explosion() - return + return ITEM_INTERACT_SUCCESS if(!summon_vendor_charges) user.balloon_alert(user, "no charges!") - return + return ITEM_INTERACT_BLOCKING if(get_dist(afterattack_turf,src) > max_summon_range) user.balloon_alert(user, "too far!") - return + return ITEM_INTERACT_BLOCKING if(get_turf(src) == afterattack_turf) user.balloon_alert(user, "too close!") - return + return ITEM_INTERACT_BLOCKING if(scepter_is_busy_summoning) user.balloon_alert(user, "already summoning!") - return + return ITEM_INTERACT_BLOCKING if(afterattack_turf.is_blocked_turf(TRUE)) user.balloon_alert(user, "blocked!") - return + return ITEM_INTERACT_BLOCKING if(summoning_time) scepter_is_busy_summoning = TRUE user.balloon_alert(user, "summoning...") - if(!do_after(user, summoning_time, target = target)) + if(!do_after(user, summoning_time, target = interacting_with)) scepter_is_busy_summoning = FALSE - return + return ITEM_INTERACT_BLOCKING scepter_is_busy_summoning = FALSE if(summon_vendor_charges) playsound(src,'sound/weapons/resonator_fire.ogg',50,TRUE) @@ -475,8 +477,8 @@ new /obj/machinery/vending/runic_vendor(afterattack_turf) summon_vendor_charges-- user.changeNext_move(CLICK_CD_MELEE) - return - return ..() + return ITEM_INTERACT_SUCCESS + return NONE /obj/item/runic_vendor_scepter/attack_self(mob/user, modifiers) . = ..() @@ -489,17 +491,20 @@ scepter_is_busy_recharging = FALSE summon_vendor_charges = RUNIC_SCEPTER_MAX_CHARGES -/obj/item/runic_vendor_scepter/afterattack_secondary(atom/target, mob/user, proximity_flag, click_parameters) - var/turf/afterattack_secondary_turf = get_turf(target) +/obj/item/runic_vendor_scepter/ranged_interact_with_atom_secondary(atom/interacting_with, mob/living/user, list/modifiers) + return interact_with_atom_secondary(interacting_with, user, modifiers) + +/obj/item/runic_vendor_scepter/interact_with_atom_secondary(atom/interacting_with, mob/living/user, list/modifiers) + var/turf/afterattack_secondary_turf = get_turf(interacting_with) var/obj/machinery/vending/runic_vendor/vendor_on_turf = locate() in afterattack_secondary_turf - if(istype(target, /obj/machinery/vending/runic_vendor)) - var/obj/machinery/vending/runic_vendor/vendor_being_throw = target - vendor_being_throw.throw_at(get_edge_target_turf(target, get_cardinal_dir(src, target)), 4, 20, user) - return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN + if(istype(interacting_with, /obj/machinery/vending/runic_vendor)) + var/obj/machinery/vending/runic_vendor/vendor_being_throw = interacting_with + vendor_being_throw.throw_at(get_edge_target_turf(interacting_with, get_cardinal_dir(src, interacting_with)), 4, 20, user) + return ITEM_INTERACT_SUCCESS if(vendor_on_turf) - vendor_on_turf.throw_at(get_edge_target_turf(target, get_cardinal_dir(src, target)), 4, 20, user) - return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN - return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN + vendor_on_turf.throw_at(get_edge_target_turf(interacting_with, get_cardinal_dir(src, interacting_with)), 4, 20, user) + return ITEM_INTERACT_SUCCESS + return ITEM_INTERACT_BLOCKING /obj/item/runic_vendor_scepter/proc/on_magic_charge(datum/source, datum/action/cooldown/spell/charge/spell, mob/living/caster) SIGNAL_HANDLER diff --git a/code/modules/antagonists/wizard/equipment/soulstone.dm b/code/modules/antagonists/wizard/equipment/soulstone.dm index b5ed82a7f2b50..925f368fe3b54 100644 --- a/code/modules/antagonists/wizard/equipment/soulstone.dm +++ b/code/modules/antagonists/wizard/equipment/soulstone.dm @@ -77,7 +77,7 @@ whatever spark it once held long extinguished." ///signal called whenever a soulstone is smacked by a bible -/obj/item/soulstone/proc/on_bible_smacked(datum/source, mob/living/user, direction) +/obj/item/soulstone/proc/on_bible_smacked(datum/source, mob/living/user, ...) SIGNAL_HANDLER INVOKE_ASYNC(src, PROC_REF(attempt_exorcism), user) @@ -119,7 +119,7 @@ for(var/mob/shade_to_convert in contents) if(IS_CULTIST(shade_to_convert)) continue - shade_to_convert.mind?.add_antag_datum(/datum/antagonist/cult) + shade_to_convert.mind?.add_antag_datum(/datum/antagonist/cult/shade) RegisterSignal(src, COMSIG_BIBLE_SMACKED) return TRUE @@ -219,7 +219,9 @@ to_chat(captured_shade, span_bold("You have been released from your prison, \ but you are still bound to [user.real_name]'s will. Help [user.p_them()] succeed in \ [user.p_their()] goals at all costs.")) - + var/datum/antagonist/cult/shade/shade_datum = captured_shade.mind?.has_antag_datum(/datum/antagonist/cult/shade) + if(shade_datum) + shade_datum.release_time = world.time on_release_spirits() /obj/item/soulstone/pre_attack(atom/A, mob/living/user, params) @@ -258,16 +260,17 @@ icon = 'icons/mob/shells.dmi' icon_state = "construct_cult" desc = "A wicked machine used by those skilled in magical arts. It is inactive." - -/obj/structure/constructshell/examine(mob/user) - . = ..() - if(IS_CULTIST(user) || HAS_MIND_TRAIT(user, TRAIT_MAGICALLY_GIFTED) || user.stat == DEAD) - . += {"A construct shell, used to house bound souls from a soulstone.\n + var/extra_desc = {"A construct shell, used to house bound souls from a soulstone.\n Placing a soulstone with a soul into this shell allows you to produce your choice of the following:\n An Artificer, which can produce more shells and soulstones, as well as fortifications.\n A Wraith, which does high damage and can jaunt through walls, though it is quite fragile.\n A Juggernaut, which is very hard to kill and can produce temporary walls, but is slow."} +/obj/structure/constructshell/examine(mob/user) + . = ..() + if(IS_CULTIST(user) || HAS_MIND_TRAIT(user, TRAIT_MAGICALLY_GIFTED) || user.stat == DEAD) + . += extra_desc + /obj/structure/constructshell/attackby(obj/item/O, mob/user, params) if(istype(O, /obj/item/soulstone)) var/obj/item/soulstone/SS = O @@ -340,6 +343,10 @@ to_chat(shade, span_notice("Your soul has been captured by [src]. \ Its arcane energies are reknitting your ethereal form.")) + var/datum/antagonist/cult/shade/shade_datum = shade.mind?.has_antag_datum(/datum/antagonist/cult/shade) + if(shade_datum) + shade_datum.release_time = null + if(user != shade) to_chat(user, "[span_info("Capture successful!:")] [shade.real_name]'s soul \ has been captured and stored within [src].") @@ -356,8 +363,8 @@ var/construct_class = show_radial_menu(user, src, GLOB.construct_radial_images, custom_check = CALLBACK(src, PROC_REF(check_menu), user, shell), require_near = TRUE, tooltips = TRUE) if(QDELETED(shell) || !construct_class) return FALSE - make_new_construct_from_class(construct_class, theme, shade, user, FALSE, shell.loc) shade.mind?.remove_antag_datum(/datum/antagonist/cult) + make_new_construct_from_class(construct_class, theme, shade, user, FALSE, shell.loc) qdel(shell) qdel(src) return TRUE @@ -393,7 +400,7 @@ if(user) soulstone_spirit.faction |= "[REF(user)]" //Add the master as a faction, allowing inter-mob cooperation if(IS_CULTIST(user)) - soulstone_spirit.mind.add_antag_datum(/datum/antagonist/cult) + soulstone_spirit.mind.add_antag_datum(/datum/antagonist/cult/shade) SSblackbox.record_feedback("tally", "cult_shade_created", 1) soulstone_spirit.cancel_camera() @@ -423,7 +430,7 @@ // Cult shades get cult datum if (user.mind.has_antag_datum(/datum/antagonist/cult)) shade.mind.remove_antag_datum(/datum/antagonist/shade_minion) - shade.mind.add_antag_datum(/datum/antagonist/cult) + shade.mind.add_antag_datum(/datum/antagonist/cult/shade) return // Only blessed soulstones can de-cult shades @@ -488,6 +495,11 @@ make_new_construct(/mob/living/basic/construct/artificer/angelic, target, creator, cultoverride, loc_override) if(THEME_CULT) make_new_construct(/mob/living/basic/construct/artificer/noncult, target, creator, cultoverride, loc_override) + if(CONSTRUCT_HARVESTER) + if(IS_HERETIC_OR_MONSTER(creator)) + make_new_construct(/mob/living/basic/construct/harvester/heretic, target, creator, cultoverride, loc_override) + else + make_new_construct(/mob/living/basic/construct/harvester, target, creator, cultoverride, loc_override) /proc/make_new_construct(mob/living/basic/construct/ctype, mob/target, mob/stoner = null, cultoverride = FALSE, loc_override = null) if(QDELETED(target)) @@ -502,7 +514,11 @@ newstruct.master = stoner var/datum/action/innate/seek_master/seek_master = new seek_master.Grant(newstruct) - target.mind?.transfer_to(newstruct, force_key_move = TRUE) + + if (isnull(target.mind)) + newstruct.key = target.key + else + target.mind.transfer_to(newstruct, force_key_move = TRUE) var/atom/movable/screen/alert/bloodsense/sense_alert if(newstruct.mind && !IS_CULTIST(newstruct) && ((stoner && IS_CULTIST(stoner)) || cultoverride) && SSticker.HasRoundStarted()) newstruct.mind.add_antag_datum(/datum/antagonist/cult/construct) @@ -513,7 +529,7 @@ newstruct.clear_alert("bloodsense") sense_alert = newstruct.throw_alert("bloodsense", /atom/movable/screen/alert/bloodsense) if(sense_alert) - sense_alert.Cviewer = newstruct + sense_alert.construct_owner = newstruct newstruct.cancel_camera() /obj/item/soulstone/anybody diff --git a/code/modules/antagonists/wizard/equipment/spellbook_entries/assistance.dm b/code/modules/antagonists/wizard/equipment/spellbook_entries/assistance.dm index aece8d6741ba3..69c33e751ece7 100644 --- a/code/modules/antagonists/wizard/equipment/spellbook_entries/assistance.dm +++ b/code/modules/antagonists/wizard/equipment/spellbook_entries/assistance.dm @@ -1,44 +1,45 @@ +#define SPELLBOOK_CATEGORY_ASSISTANCE "Assistance" // Wizard spells that assist the caster in some way /datum/spellbook_entry/summonitem name = "Summon Item" desc = "Recalls a previously marked item to your hand from anywhere in the universe." spell_type = /datum/action/cooldown/spell/summonitem - category = "Assistance" + category = SPELLBOOK_CATEGORY_ASSISTANCE cost = 1 /datum/spellbook_entry/charge name = "Charge" desc = "This spell can be used to recharge a variety of things in your hands, from magical artifacts to electrical components. A creative wizard can even use it to grant magical power to a fellow magic user." spell_type = /datum/action/cooldown/spell/charge - category = "Assistance" + category = SPELLBOOK_CATEGORY_ASSISTANCE cost = 1 /datum/spellbook_entry/shapeshift name = "Wild Shapeshift" desc = "Take on the shape of another for a time to use their natural abilities. Once you've made your choice it cannot be changed." spell_type = /datum/action/cooldown/spell/shapeshift/wizard - category = "Assistance" + category = SPELLBOOK_CATEGORY_ASSISTANCE cost = 1 /datum/spellbook_entry/tap name = "Soul Tap" desc = "Fuel your spells using your own soul!" spell_type = /datum/action/cooldown/spell/tap - category = "Assistance" + category = SPELLBOOK_CATEGORY_ASSISTANCE cost = 1 /datum/spellbook_entry/item/staffanimation name = "Staff of Animation" desc = "An arcane staff capable of shooting bolts of eldritch energy which cause inanimate objects to come to life. This magic doesn't affect machines." item_path = /obj/item/gun/magic/staff/animate - category = "Assistance" + category = SPELLBOOK_CATEGORY_ASSISTANCE /datum/spellbook_entry/item/soulstones name = "Soulstone Shard Kit" desc = "Soul Stone Shards are ancient tools capable of capturing and harnessing the spirits of the dead and dying. \ The spell Artificer allows you to create arcane machines for the captured souls to pilot." item_path = /obj/item/storage/belt/soulstone/full - category = "Assistance" + category = SPELLBOOK_CATEGORY_ASSISTANCE /datum/spellbook_entry/item/soulstones/try_equip_item(mob/living/carbon/human/user, obj/item/to_equip) var/was_equipped = user.equip_to_slot_if_possible(to_equip, ITEM_SLOT_BELT, disable_warning = TRUE) @@ -56,13 +57,13 @@ name = "A Necromantic Stone" desc = "A Necromantic stone is able to resurrect three dead individuals as skeletal thralls for you to command." item_path = /obj/item/necromantic_stone - category = "Assistance" + category = SPELLBOOK_CATEGORY_ASSISTANCE /datum/spellbook_entry/item/contract name = "Contract of Apprenticeship" desc = "A magical contract binding an apprentice wizard to your service, using it will summon them to your side." item_path = /obj/item/antag_spawner/contract - category = "Assistance" + category = SPELLBOOK_CATEGORY_ASSISTANCE refundable = TRUE /datum/spellbook_entry/item/guardian @@ -70,7 +71,7 @@ desc = "A deck of guardian tarot cards, capable of binding a personal guardian to your body. There are multiple types of guardian available, but all of them will transfer some amount of damage to you. \ It would be wise to avoid buying these with anything capable of causing you to swap bodies with others." item_path = /obj/item/guardian_creator/wizard - category = "Assistance" + category = SPELLBOOK_CATEGORY_ASSISTANCE /datum/spellbook_entry/item/bloodbottle name = "Bottle of Blood" @@ -80,7 +81,7 @@ in their killing, and you yourself may become a victim." item_path = /obj/item/antag_spawner/slaughter_demon limit = 3 - category = "Assistance" + category = SPELLBOOK_CATEGORY_ASSISTANCE refundable = TRUE /datum/spellbook_entry/item/hugbottle @@ -95,7 +96,7 @@ item_path = /obj/item/antag_spawner/slaughter_demon/laughter cost = 1 //non-destructive; it's just a jape, sibling! limit = 3 - category = "Assistance" + category = SPELLBOOK_CATEGORY_ASSISTANCE refundable = TRUE /datum/spellbook_entry/item/vendormancer @@ -105,4 +106,6 @@ throw around to squash oponents or be directly detonated. When out of \ charges a long channel will restore the charges." item_path = /obj/item/runic_vendor_scepter - category = "Assistance" + category = SPELLBOOK_CATEGORY_ASSISTANCE + +#undef SPELLBOOK_CATEGORY_ASSISTANCE diff --git a/code/modules/antagonists/wizard/equipment/spellbook_entries/defensive.dm b/code/modules/antagonists/wizard/equipment/spellbook_entries/defensive.dm index 1ffac3cf3af4e..a66d99c21c88d 100644 --- a/code/modules/antagonists/wizard/equipment/spellbook_entries/defensive.dm +++ b/code/modules/antagonists/wizard/equipment/spellbook_entries/defensive.dm @@ -1,49 +1,50 @@ +#define SPELLBOOK_CATEGORY_DEFENSIVE "Defensive" // Defensive wizard spells /datum/spellbook_entry/magicm name = "Magic Missile" desc = "Fires several, slow moving, magic projectiles at nearby targets." spell_type = /datum/action/cooldown/spell/aoe/magic_missile - category = "Defensive" + category = SPELLBOOK_CATEGORY_DEFENSIVE /datum/spellbook_entry/disabletech name = "Disable Tech" desc = "Disables all weapons, cameras and most other technology in range." spell_type = /datum/action/cooldown/spell/emp/disable_tech - category = "Defensive" + category = SPELLBOOK_CATEGORY_DEFENSIVE cost = 1 /datum/spellbook_entry/repulse name = "Repulse" desc = "Throws everything around the user away." spell_type = /datum/action/cooldown/spell/aoe/repulse/wizard - category = "Defensive" + category = SPELLBOOK_CATEGORY_DEFENSIVE /datum/spellbook_entry/lightning_packet name = "Thrown Lightning" desc = "Forged from eldrich energies, a packet of pure power, \ known as a spell packet will appear in your hand, that when thrown will stun the target." spell_type = /datum/action/cooldown/spell/conjure_item/spellpacket - category = "Defensive" + category = SPELLBOOK_CATEGORY_DEFENSIVE /datum/spellbook_entry/timestop name = "Time Stop" desc = "Stops time for everyone except for you, allowing you to move freely \ while your enemies and even projectiles are frozen." spell_type = /datum/action/cooldown/spell/timestop - category = "Defensive" + category = SPELLBOOK_CATEGORY_DEFENSIVE /datum/spellbook_entry/smoke name = "Smoke" desc = "Spawns a cloud of choking smoke at your location." spell_type = /datum/action/cooldown/spell/smoke - category = "Defensive" + category = SPELLBOOK_CATEGORY_DEFENSIVE cost = 1 /datum/spellbook_entry/forcewall name = "Force Wall" desc = "Create a magical barrier that only you can pass through." spell_type = /datum/action/cooldown/spell/forcewall - category = "Defensive" + category = SPELLBOOK_CATEGORY_DEFENSIVE cost = 1 /datum/spellbook_entry/lichdom @@ -53,28 +54,28 @@ no matter the circumstances. Be wary - with each revival, your body will become weaker, and \ it will become easier for others to find your item of power." spell_type = /datum/action/cooldown/spell/lichdom - category = "Defensive" + category = SPELLBOOK_CATEGORY_DEFENSIVE no_coexistance_typecache = list(/datum/action/cooldown/spell/splattercasting) /datum/spellbook_entry/chuunibyou name = "Chuuni Invocations" desc = "Makes all your spells shout invocations, and the invocations become... stupid. You heal slightly after casting a spell." spell_type = /datum/action/cooldown/spell/chuuni_invocations - category = "Defensive" + category = SPELLBOOK_CATEGORY_DEFENSIVE /datum/spellbook_entry/spacetime_dist name = "Spacetime Distortion" desc = "Entangle the strings of space-time in an area around you, \ randomizing the layout and making proper movement impossible. The strings vibrate..." spell_type = /datum/action/cooldown/spell/spacetime_dist - category = "Defensive" + category = SPELLBOOK_CATEGORY_DEFENSIVE cost = 1 /datum/spellbook_entry/the_traps name = "The Traps!" desc = "Summon a number of traps around you. They will damage and enrage any enemies that step on them." spell_type = /datum/action/cooldown/spell/conjure/the_traps - category = "Defensive" + category = SPELLBOOK_CATEGORY_DEFENSIVE cost = 1 /datum/spellbook_entry/bees @@ -82,7 +83,7 @@ desc = "This spell magically kicks a transdimensional beehive, \ instantly summoning a swarm of bees to your location. These bees are NOT friendly to anyone." spell_type = /datum/action/cooldown/spell/conjure/bee - category = "Defensive" + category = SPELLBOOK_CATEGORY_DEFENSIVE /datum/spellbook_entry/duffelbag name = "Bestow Cursed Duffel Bag" @@ -91,7 +92,7 @@ if it is not fed regularly, and regardless of whether or not it's been fed, \ it will slow the person wearing it down significantly." spell_type = /datum/action/cooldown/spell/touch/duffelbag - category = "Defensive" + category = SPELLBOOK_CATEGORY_DEFENSIVE cost = 1 /datum/spellbook_entry/item/staffhealing @@ -99,26 +100,26 @@ desc = "An altruistic staff that can heal the lame and raise the dead." item_path = /obj/item/gun/magic/staff/healing cost = 1 - category = "Defensive" + category = SPELLBOOK_CATEGORY_DEFENSIVE /datum/spellbook_entry/item/lockerstaff name = "Staff of the Locker" desc = "A staff that shoots lockers. It eats anyone it hits on its way, leaving a welded locker with your victims behind." item_path = /obj/item/gun/magic/staff/locker - category = "Defensive" + category = SPELLBOOK_CATEGORY_DEFENSIVE /datum/spellbook_entry/item/scryingorb name = "Scrying Orb" desc = "An incandescent orb of crackling energy. Using it will allow you to release your ghost while alive, allowing you to spy upon the station and talk to the deceased. In addition, buying it will permanently grant you X-ray vision." item_path = /obj/item/scrying - category = "Defensive" + category = SPELLBOOK_CATEGORY_DEFENSIVE /datum/spellbook_entry/item/wands name = "Wand Assortment" desc = "A collection of wands that allow for a wide variety of utility. \ Wands have a limited number of charges, so be conservative with their use. Comes in a handy belt." item_path = /obj/item/storage/belt/wands/full - category = "Defensive" + category = SPELLBOOK_CATEGORY_DEFENSIVE /datum/spellbook_entry/item/wands/try_equip_item(mob/living/carbon/human/user, obj/item/to_equip) var/was_equipped = user.equip_to_slot_if_possible(to_equip, ITEM_SLOT_BELT, disable_warning = TRUE) @@ -130,7 +131,7 @@ while providing more protection against attacks and the void of space. \ Also grants a battlemage shield." item_path = /obj/item/mod/control/pre_equipped/enchanted - category = "Defensive" + category = SPELLBOOK_CATEGORY_DEFENSIVE /datum/spellbook_entry/item/armor/try_equip_item(mob/living/carbon/human/user, obj/item/to_equip) var/obj/item/mod/control/mod = to_equip @@ -151,5 +152,7 @@ name = "Battlemage Armour Charges" desc = "A powerful defensive rune, it will grant eight additional charges to a battlemage shield." item_path = /obj/item/wizard_armour_charge - category = "Defensive" + category = SPELLBOOK_CATEGORY_DEFENSIVE cost = 1 + +#undef SPELLBOOK_CATEGORY_DEFENSIVE diff --git a/code/modules/antagonists/wizard/equipment/spellbook_entries/mobility.dm b/code/modules/antagonists/wizard/equipment/spellbook_entries/mobility.dm index 6a8f322a3a5f4..bc09b092f6cd9 100644 --- a/code/modules/antagonists/wizard/equipment/spellbook_entries/mobility.dm +++ b/code/modules/antagonists/wizard/equipment/spellbook_entries/mobility.dm @@ -1,47 +1,48 @@ +#define SPELLBOOK_CATEGORY_MOBILITY "Mobility" // Wizard spells that aid mobiilty(or stealth?) /datum/spellbook_entry/mindswap name = "Mindswap" desc = "Allows you to switch bodies with a target next to you. You will both fall asleep when this happens, and it will be quite obvious that you are the target's body if someone watches you do it." spell_type = /datum/action/cooldown/spell/pointed/mind_transfer - category = "Mobility" + category = SPELLBOOK_CATEGORY_MOBILITY /datum/spellbook_entry/knock name = "Knock" desc = "Opens nearby doors and closets." spell_type = /datum/action/cooldown/spell/aoe/knock - category = "Mobility" + category = SPELLBOOK_CATEGORY_MOBILITY cost = 1 /datum/spellbook_entry/blink name = "Blink" desc = "Randomly teleports you a short distance." spell_type = /datum/action/cooldown/spell/teleport/radius_turf/blink - category = "Mobility" + category = SPELLBOOK_CATEGORY_MOBILITY /datum/spellbook_entry/teleport name = "Teleport" desc = "Teleports you to an area of your selection." spell_type = /datum/action/cooldown/spell/teleport/area_teleport/wizard - category = "Mobility" + category = SPELLBOOK_CATEGORY_MOBILITY /datum/spellbook_entry/jaunt name = "Ethereal Jaunt" desc = "Turns your form ethereal, temporarily making you invisible and able to pass through walls." spell_type = /datum/action/cooldown/spell/jaunt/ethereal_jaunt - category = "Mobility" + category = SPELLBOOK_CATEGORY_MOBILITY /datum/spellbook_entry/swap name = "Swap" desc = "Switch places with any living target within nine tiles. Right click to mark a secondary target. You will always swap to your primary target." spell_type = /datum/action/cooldown/spell/pointed/swap - category = "Mobility" + category = SPELLBOOK_CATEGORY_MOBILITY cost = 1 /datum/spellbook_entry/item/warpwhistle name = "Warp Whistle" desc = "A strange whistle that will transport you to a distant safe place on the station. There is a window of vulnerability at the beginning of every use." item_path = /obj/item/warp_whistle - category = "Mobility" + category = SPELLBOOK_CATEGORY_MOBILITY cost = 1 /datum/spellbook_entry/item/staffdoor @@ -49,11 +50,13 @@ desc = "A particular staff that can mold solid walls into ornate doors. Useful for getting around in the absence of other transportation. Does not work on glass." item_path = /obj/item/gun/magic/staff/door cost = 1 - category = "Mobility" + category = SPELLBOOK_CATEGORY_MOBILITY /datum/spellbook_entry/item/teleport_rod name = /obj/item/teleport_rod::name desc = /obj/item/teleport_rod::desc item_path = /obj/item/teleport_rod cost = 2 // Puts it at 3 cost if you go for safety instant summons, but teleporting anywhere on screen is pretty good. - category = "Mobility" + category = SPELLBOOK_CATEGORY_MOBILITY + +#undef SPELLBOOK_CATEGORY_MOBILITY diff --git a/code/modules/antagonists/wizard/equipment/spellbook_entries/offensive.dm b/code/modules/antagonists/wizard/equipment/spellbook_entries/offensive.dm index b23de0aa6b069..9eb35cbf7b42e 100644 --- a/code/modules/antagonists/wizard/equipment/spellbook_entries/offensive.dm +++ b/code/modules/antagonists/wizard/equipment/spellbook_entries/offensive.dm @@ -1,27 +1,28 @@ +#define SPELLBOOK_CATEGORY_OFFENSIVE "Offensive" // Offensive wizard spells /datum/spellbook_entry/fireball name = "Fireball" desc = "Fires an explosive fireball at a target. Considered a classic among all wizards." spell_type = /datum/action/cooldown/spell/pointed/projectile/fireball - category = "Offensive" + category = SPELLBOOK_CATEGORY_OFFENSIVE /datum/spellbook_entry/spell_cards name = "Spell Cards" desc = "Blazing hot rapid-fire homing cards. Send your foes to the shadow realm with their mystical power!" spell_type = /datum/action/cooldown/spell/pointed/projectile/spell_cards - category = "Offensive" + category = SPELLBOOK_CATEGORY_OFFENSIVE /datum/spellbook_entry/rod_form name = "Rod Form" desc = "Take on the form of an immovable rod, destroying all in your path. Purchasing this spell multiple times will also increase the rod's damage and travel range." spell_type = /datum/action/cooldown/spell/rod_form - category = "Offensive" + category = SPELLBOOK_CATEGORY_OFFENSIVE /datum/spellbook_entry/disintegrate name = "Smite" desc = "Charges your hand with an unholy energy that can be used to cause a touched victim to violently explode." spell_type = /datum/action/cooldown/spell/touch/smite - category = "Offensive" + category = SPELLBOOK_CATEGORY_OFFENSIVE /datum/spellbook_entry/summon_simians name = "Summon Simians" @@ -29,45 +30,45 @@ summons primal monkeys and lesser gorillas that will promptly flip out and attack everything in sight. Fun! \ Their lesser, easily manipulable minds will be convinced you are one of their allies, but only for a minute. Unless you also are a monkey." spell_type = /datum/action/cooldown/spell/conjure/simian - category = "Offensive" + category = SPELLBOOK_CATEGORY_OFFENSIVE /datum/spellbook_entry/blind name = "Blind" desc = "Temporarily blinds a single target." spell_type = /datum/action/cooldown/spell/pointed/blind - category = "Offensive" + category = SPELLBOOK_CATEGORY_OFFENSIVE cost = 1 /datum/spellbook_entry/mutate name = "Mutate" desc = "Causes you to turn into a hulk and gain laser vision for a short while." spell_type = /datum/action/cooldown/spell/apply_mutations/mutate - category = "Offensive" + category = SPELLBOOK_CATEGORY_OFFENSIVE /datum/spellbook_entry/fleshtostone name = "Flesh to Stone" desc = "Charges your hand with the power to turn victims into inert statues for a long period of time." spell_type = /datum/action/cooldown/spell/touch/flesh_to_stone - category = "Offensive" + category = SPELLBOOK_CATEGORY_OFFENSIVE /datum/spellbook_entry/teslablast name = "Tesla Blast" desc = "Charge up a tesla arc and release it at a random nearby target! You can move freely while it charges. The arc jumps between targets and can knock them down." spell_type = /datum/action/cooldown/spell/charged/beam/tesla - category = "Offensive" + category = SPELLBOOK_CATEGORY_OFFENSIVE /datum/spellbook_entry/lightningbolt name = "Lightning Bolt" desc = "Fire a lightning bolt at your foes! It will jump between targets, but can't knock them down." spell_type = /datum/action/cooldown/spell/pointed/projectile/lightningbolt - category = "Offensive" + category = SPELLBOOK_CATEGORY_OFFENSIVE cost = 1 /datum/spellbook_entry/infinite_guns name = "Lesser Summon Guns" desc = "Why reload when you have infinite guns? Summons an unending stream of bolt action rifles that deal little damage, but will knock targets down. Requires both hands free to use. Learning this spell makes you unable to learn Arcane Barrage." spell_type = /datum/action/cooldown/spell/conjure_item/infinite_guns/gun - category = "Offensive" + category = SPELLBOOK_CATEGORY_OFFENSIVE cost = 3 no_coexistance_typecache = list(/datum/action/cooldown/spell/conjure_item/infinite_guns/arcane_barrage) @@ -75,7 +76,7 @@ name = "Arcane Barrage" desc = "Fire a torrent of arcane energy at your foes with this (powerful) spell. Deals much more damage than Lesser Summon Guns, but won't knock targets down. Requires both hands free to use. Learning this spell makes you unable to learn Lesser Summon Gun." spell_type = /datum/action/cooldown/spell/conjure_item/infinite_guns/arcane_barrage - category = "Offensive" + category = SPELLBOOK_CATEGORY_OFFENSIVE cost = 3 no_coexistance_typecache = list(/datum/action/cooldown/spell/conjure_item/infinite_guns/gun) @@ -83,68 +84,77 @@ name = "Barnyard Curse" desc = "This spell dooms an unlucky soul to possess the speech and facial attributes of a barnyard animal." spell_type = /datum/action/cooldown/spell/pointed/barnyardcurse - category = "Offensive" + category = SPELLBOOK_CATEGORY_OFFENSIVE /datum/spellbook_entry/splattercasting name = "Splattercasting" desc = "Dramatically lowers the cooldown on all spells, but each one will cost blood, as well as it naturally \ draining from you over time. You can replenish it from your victims, specifically their necks." spell_type = /datum/action/cooldown/spell/splattercasting - category = "Offensive" + category = SPELLBOOK_CATEGORY_OFFENSIVE no_coexistance_typecache = list(/datum/action/cooldown/spell/lichdom) /datum/spellbook_entry/sanguine_strike name = "Exsanguinating Strike" desc = "Sanguine spell that enchants your next weapon strike to deal more damage, heal you for damage dealt, and refill blood." spell_type = /datum/action/cooldown/spell/sanguine_strike - category = "Offensive" + category = SPELLBOOK_CATEGORY_OFFENSIVE /datum/spellbook_entry/scream_for_me name = "Scream For Me" desc = "Sadistic sanguine spell that inflicts numerous severe blood wounds all over the victim's body." spell_type = /datum/action/cooldown/spell/touch/scream_for_me cost = 1 - category = "Offensive" + category = SPELLBOOK_CATEGORY_OFFENSIVE /datum/spellbook_entry/item/staffchaos name = "Staff of Chaos" desc = "A caprious tool that can fire all sorts of magic without any rhyme or reason. Using it on people you care about is not recommended." item_path = /obj/item/gun/magic/staff/chaos - category = "Offensive" + category = SPELLBOOK_CATEGORY_OFFENSIVE /datum/spellbook_entry/item/staffchange name = "Staff of Change" desc = "An artefact that spits bolts of coruscating energy which cause the target's very form to reshape itself." item_path = /obj/item/gun/magic/staff/change - category = "Offensive" + category = SPELLBOOK_CATEGORY_OFFENSIVE /datum/spellbook_entry/item/mjolnir name = "Mjolnir" desc = "A mighty hammer on loan from Thor, God of Thunder. It crackles with barely contained power." item_path = /obj/item/mjollnir - category = "Offensive" + category = SPELLBOOK_CATEGORY_OFFENSIVE /datum/spellbook_entry/item/singularity_hammer name = "Singularity Hammer" desc = "A hammer that creates an intensely powerful field of gravity where it strikes, pulling everything nearby to the point of impact." item_path = /obj/item/singularityhammer - category = "Offensive" + category = SPELLBOOK_CATEGORY_OFFENSIVE /datum/spellbook_entry/item/spellblade name = "Spellblade" desc = "A sword capable of firing blasts of energy which rip targets limb from limb." item_path = /obj/item/gun/magic/staff/spellblade - category = "Offensive" + category = SPELLBOOK_CATEGORY_OFFENSIVE /datum/spellbook_entry/item/highfrequencyblade name = "High Frequency Blade" desc = "An incredibly swift enchanted blade resonating at a frequency high enough to be able to slice through anything." item_path = /obj/item/highfrequencyblade/wizard - category = "Offensive" + category = SPELLBOOK_CATEGORY_OFFENSIVE cost = 3 /datum/spellbook_entry/item/frog_contract name = "Frog Contract" desc = "Sign a pact with the frogs to have your own destructive pet guardian!" item_path = /obj/item/frog_contract - category = "Offensive" + category = SPELLBOOK_CATEGORY_OFFENSIVE + +/datum/spellbook_entry/item/staffshrink + name = "Staff of Shrinking" + desc = "An artefact that can shrink anything for a reasonable duration. Small structures can be walked over, and small people are very vulnerable (often because their armour no longer fits)." + item_path = /obj/item/gun/magic/staff/shrink + category = SPELLBOOK_CATEGORY_OFFENSIVE + + +#undef SPELLBOOK_CATEGORY_OFFENSIVE diff --git a/code/modules/antagonists/wizard/equipment/teleport_rod.dm b/code/modules/antagonists/wizard/equipment/teleport_rod.dm index 79df35ca25a18..c15b66da6ff61 100644 --- a/code/modules/antagonists/wizard/equipment/teleport_rod.dm +++ b/code/modules/antagonists/wizard/equipment/teleport_rod.dm @@ -55,28 +55,21 @@ var/datum/status_effect/teleport_flux/perma/permaflux = user.has_status_effect(/datum/status_effect/teleport_flux/perma) permaflux?.delayed_remove(src) -/obj/item/teleport_rod/afterattack(atom/target, mob/living/user, proximity_flag, click_parameters) - . = ..() - if(!isliving(user)) - return - if(proximity_flag) // assuming you don't want to teleport 1 tile away - return - - . |= AFTERATTACK_PROCESSED_ITEM - +/obj/item/teleport_rod/ranged_interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + . = ITEM_INTERACT_BLOCKING var/turf/start_turf = get_turf(user) - var/turf/target_turf = get_turf(target) + var/turf/target_turf = get_turf(interacting_with) if(get_dist(start_turf, target_turf) > max_tp_range) user.balloon_alert(user, "too far!") - return + return . if(!(target_turf in view(user, user.client?.view || world.view))) user.balloon_alert(user, "out of view!") - return + return . if(target_turf.is_blocked_turf(exclude_mobs = TRUE, source_atom = user)) user.balloon_alert(user, "obstructed!") - return + return . var/tp_result = do_teleport( teleatom = user, @@ -88,7 +81,9 @@ if(!tp_result) user.balloon_alert(user, "teleport failed!") - return + return . + + . = ITEM_INTERACT_SUCCESS var/sound/teleport_sound = sound('sound/magic/summonitems_generic.ogg') teleport_sound.pitch = 0.5 @@ -101,7 +96,7 @@ user.changeNext_move(CLICK_CD_SLOW * 1.2) if(!apply_debuffs) - return + return . // Teleporting leaves some of your reagents behind! // (Primarily a way to prevent cheese with damage healing chem mixes, @@ -110,13 +105,14 @@ user.reagents?.remove_all(0.33, relative = TRUE) user_stomach?.reagents?.remove_all(0.33, relative = TRUE) if(user.has_status_effect(/datum/status_effect/teleport_flux/perma)) - return + return . if(user.has_status_effect(/datum/status_effect/teleport_flux)) // The status effect handles the damage, but we'll add a special pop up for rod usage specifically user.balloon_alert(user, "too soon!") user.apply_status_effect(/datum/status_effect/teleport_flux) + return . /// Temp visual displayed on both sides of a teleport rod teleport /obj/effect/temp_visual/teleport_flux @@ -144,6 +140,7 @@ duration = 6 SECONDS alert_type = /atom/movable/screen/alert/status_effect/teleport_flux remove_on_fullheal = TRUE // staff of healing ~synergy~ + show_duration = TRUE /// Amount of damage to deal when teleporting in flux var/tp_damage = 15 diff --git a/code/modules/antagonists/wizard/grand_ritual/finales/immortality.dm b/code/modules/antagonists/wizard/grand_ritual/finales/immortality.dm index 85267c0333c45..e0d4f3376f80a 100644 --- a/code/modules/antagonists/wizard/grand_ritual/finales/immortality.dm +++ b/code/modules/antagonists/wizard/grand_ritual/finales/immortality.dm @@ -109,9 +109,6 @@ for(var/datum/quirk/target_quirk as anything in target.quirks) LAZYADD(quirks, new target_quirk.type) - hair_gradient_style = LAZYLISTDUPLICATE(target.grad_style) - hair_gradient_colours = LAZYLISTDUPLICATE(target.grad_color) - voice = target.voice voice_filter = target.voice_filter @@ -120,8 +117,6 @@ target.real_name = name target.age = age target.physique = physique - target.grad_style = LAZYLISTDUPLICATE(hair_gradient_style) - target.grad_color = LAZYLISTDUPLICATE(hair_gradient_colours) target.voice = voice target.voice_filter = voice_filter diff --git a/code/modules/antagonists/xeno/xeno.dm b/code/modules/antagonists/xeno/xeno.dm index d2e0bddd0dd99..59c83fd52ed11 100644 --- a/code/modules/antagonists/xeno/xeno.dm +++ b/code/modules/antagonists/xeno/xeno.dm @@ -87,7 +87,7 @@ explanation_text = "Escape from captivity." /datum/objective/escape_captivity/check_completion() - if(!istype(get_area(owner), DScommunications.captivity_area)) + if(!istype(get_area(owner), GLOB.communications_controller.captivity_area)) return TRUE /datum/objective/advance_hive @@ -146,7 +146,7 @@ if(!captive_alien || captive_alien.stat == DEAD) return CAPTIVE_XENO_DEAD - if(istype(get_area(captive_alien), DScommunications.captivity_area)) + if(istype(get_area(captive_alien), GLOB.communications_controller.captivity_area)) return CAPTIVE_XENO_FAIL return CAPTIVE_XENO_PASS @@ -155,7 +155,7 @@ /mob/living/carbon/alien/mind_initialize() ..() if(!mind.has_antag_datum(/datum/antagonist/xeno)) - if(DScommunications.xenomorph_egg_delivered && istype(get_area(src), DScommunications.captivity_area)) + if(GLOB.communications_controller.xenomorph_egg_delivered && istype(get_area(src), GLOB.communications_controller.captivity_area)) mind.add_antag_datum(/datum/antagonist/xeno/captive) else mind.add_antag_datum(/datum/antagonist/xeno) diff --git a/code/modules/art/statues.dm b/code/modules/art/statues.dm index 8ed46a5bf81af..fd64d212f3e80 100644 --- a/code/modules/art/statues.dm +++ b/code/modules/art/statues.dm @@ -310,12 +310,11 @@ Point with the chisel at the target to choose what to sculpt or hit block to cho Hit block again to start sculpting. Moving interrupts */ -/obj/item/chisel/pre_attack(atom/target, mob/living/user, params) - . = ..() +/obj/item/chisel/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) if(sculpting) - return TRUE - if(istype(target, /obj/structure/carving_block)) - var/obj/structure/carving_block/sculpt_block = target + return ITEM_INTERACT_BLOCKING + if(istype(interacting_with, /obj/structure/carving_block)) + var/obj/structure/carving_block/sculpt_block = interacting_with if(sculpt_block.completion) // someone already started sculpting this so just finish set_block(sculpt_block, user, silent = TRUE) @@ -326,19 +325,20 @@ Moving interrupts set_block(sculpt_block, user) else if(sculpt_block == prepared_block) show_generic_statues_prompt(user) - return TRUE - else if(prepared_block) //We're aiming at something next to us with block prepared - prepared_block.set_target(target, user) - return TRUE + return ITEM_INTERACT_SUCCESS -// We aim at something distant. -/obj/item/chisel/afterattack(atom/target, mob/user, proximity_flag, click_parameters) - . = ..() + else if(prepared_block) //We're aiming at something next to us with block prepared + prepared_block.set_target(interacting_with, user) + return ITEM_INTERACT_SUCCESS - if (!sculpting && prepared_block && ismovable(target) && prepared_block.completion == 0) - prepared_block.set_target(target,user) + return NONE - return . | AFTERATTACK_PROCESSED_ITEM +// We aim at something distant. +/obj/item/chisel/ranged_interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + if (!sculpting && prepared_block && ismovable(interacting_with) && prepared_block.completion == 0) + prepared_block.set_target(interacting_with, user) + return ITEM_INTERACT_SUCCESS + return ITEM_INTERACT_BLOCKING /// Starts or continues the sculpting action on the carving block material /obj/item/chisel/proc/start_sculpting(mob/living/user) diff --git a/code/modules/assembly/health.dm b/code/modules/assembly/health.dm index 28ab16f63d77b..20316ebfd66d1 100644 --- a/code/modules/assembly/health.dm +++ b/code/modules/assembly/health.dm @@ -7,11 +7,10 @@ var/scanning = FALSE var/health_scan - var/alarm_health = HEALTH_THRESHOLD_CRIT + var/health_target = HEALTH_THRESHOLD_CRIT /obj/item/assembly/health/examine(mob/user) . = ..() - . += "Use it in hand to turn it off/on and Alt-click to swap between \"detect death\" mode and \"detect critical state\" mode." . += "[src.scanning ? "The sensor is on and you can see [health_scan] displayed on the screen" : "The sensor is off"]." /obj/item/assembly/health/Moved(atom/old_loc, movement_dir, forced, list/old_locs, momentum_change) @@ -37,15 +36,6 @@ update_appearance() return secured -/obj/item/assembly/health/click_alt(mob/living/user) - if(alarm_health == HEALTH_THRESHOLD_CRIT) - alarm_health = HEALTH_THRESHOLD_DEAD - to_chat(user, span_notice("You toggle [src] to \"detect death\" mode.")) - else - alarm_health = HEALTH_THRESHOLD_CRIT - to_chat(user, span_notice("You toggle [src] to \"detect critical state\" mode.")) - return CLICK_ACTION_SUCCESS - /obj/item/assembly/health/process() //not ready yet if(!scanning || !secured) @@ -63,7 +53,7 @@ //only do the pulse if we are within alarm thresholds var/mob/living/target_mob = object health_scan = target_mob.health - if(health_scan > alarm_health) + if(health_scan > health_target) return //do the pulse & the scan @@ -82,14 +72,43 @@ STOP_PROCESSING(SSobj, src) return -/obj/item/assembly/health/attack_self(mob/user) - . = ..() - if (secured) - balloon_alert(user, "scanning [scanning ? "disabled" : "enabled"]") +/obj/item/assembly/health/proc/toggle_target() + if(health_target == HEALTH_THRESHOLD_CRIT) + health_target = HEALTH_THRESHOLD_DEAD else - balloon_alert(user, "secure it first!") - toggle_scan() + health_target = HEALTH_THRESHOLD_CRIT + return /obj/item/assembly/health/proc/get_status_tab_item(mob/living/carbon/source, list/items) SIGNAL_HANDLER items += "Health: [round((source.health / source.maxHealth) * 100)]%" + + +/obj/item/assembly/health/ui_status(mob/user, datum/ui_state/state) + return is_secured(user) ? ..() : UI_CLOSE + +/obj/item/assembly/health/ui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "HealthSensor", name) + ui.open() + +/obj/item/assembly/health/ui_data(mob/user) + var/list/data = list() + data["health"] = health_scan + data["scanning"] = scanning + data["target"] = health_target + return data + +/obj/item/assembly/health/ui_act(action, params) + . = ..() + if(.) + return . + + switch(action) + if("scanning") + toggle_scan() + return TRUE + if("target") + toggle_target() + return TRUE diff --git a/code/modules/assembly/mousetrap.dm b/code/modules/assembly/mousetrap.dm index 1d8936e6068da..5c7f5208254f0 100644 --- a/code/modules/assembly/mousetrap.dm +++ b/code/modules/assembly/mousetrap.dm @@ -153,7 +153,7 @@ * * user: The mob handling the trap */ /obj/item/assembly/mousetrap/proc/clumsy_check(mob/living/carbon/human/user) - if(!armed) + if(!armed || !user) return FALSE if((HAS_TRAIT(user, TRAIT_DUMB) || HAS_TRAIT(user, TRAIT_CLUMSY)) && prob(50)) var/which_hand = BODY_ZONE_PRECISE_L_HAND diff --git a/code/modules/asset_cache/assets/adventure.dm b/code/modules/asset_cache/assets/adventure.dm index 65f6c3fe9cc10..e1a7bae235818 100644 --- a/code/modules/asset_cache/assets/adventure.dm +++ b/code/modules/asset_cache/assets/adventure.dm @@ -1,7 +1,7 @@ /datum/asset/simple/adventure assets = list( - "default" = 'icons/ui_icons/adventure/default.png', - "grue" = 'icons/ui_icons/adventure/grue.png', - "signal_lost" ='icons/ui_icons/adventure/signal_lost.png', - "trade" = 'icons/ui_icons/adventure/trade.png', + "default" = 'icons/ui/adventure/default.png', + "grue" = 'icons/ui/adventure/grue.png', + "signal_lost" ='icons/ui/adventure/signal_lost.png', + "trade" = 'icons/ui/adventure/trade.png', ) diff --git a/code/modules/asset_cache/assets/arcade.dm b/code/modules/asset_cache/assets/arcade.dm index 338b891190cd4..3a68644d1526b 100644 --- a/code/modules/asset_cache/assets/arcade.dm +++ b/code/modules/asset_cache/assets/arcade.dm @@ -1,11 +1,11 @@ /datum/asset/simple/arcade assets = list( - "shopkeeper.png" = 'icons/ui_icons/arcade/shopkeeper.png', - "fireplace.png" = 'icons/ui_icons/arcade/fireplace.png', - "boss1.gif" = 'icons/ui_icons/arcade/boss1.gif', - "boss2.gif" = 'icons/ui_icons/arcade/boss2.gif', - "boss3.gif" = 'icons/ui_icons/arcade/boss3.gif', - "boss4.gif" = 'icons/ui_icons/arcade/boss4.gif', - "boss5.gif" = 'icons/ui_icons/arcade/boss5.gif', - "boss6.gif" = 'icons/ui_icons/arcade/boss6.gif', + "shopkeeper.png" = 'icons/ui/arcade/shopkeeper.png', + "fireplace.png" = 'icons/ui/arcade/fireplace.png', + "boss1.gif" = 'icons/ui/arcade/boss1.gif', + "boss2.gif" = 'icons/ui/arcade/boss2.gif', + "boss3.gif" = 'icons/ui/arcade/boss3.gif', + "boss4.gif" = 'icons/ui/arcade/boss4.gif', + "boss5.gif" = 'icons/ui/arcade/boss5.gif', + "boss6.gif" = 'icons/ui/arcade/boss6.gif', ) diff --git a/code/modules/asset_cache/assets/chat.dm b/code/modules/asset_cache/assets/chat.dm index 3765f113dda10..1da0869a85a96 100644 --- a/code/modules/asset_cache/assets/chat.dm +++ b/code/modules/asset_cache/assets/chat.dm @@ -4,11 +4,11 @@ /datum/asset/spritesheet/chat/create_spritesheets() InsertAll("emoji", EMOJI_SET) // pre-loading all lanugage icons also helps to avoid meta - InsertAll("language", 'icons/misc/language.dmi') + InsertAll("language", 'icons/ui/chat/language.dmi') // catch languages which are pulling icons from another file for(var/path in typesof(/datum/language)) var/datum/language/L = path var/icon = initial(L.icon) - if (icon != 'icons/misc/language.dmi') + if (icon != 'icons/ui/chat/language.dmi') var/icon_state = initial(L.icon_state) Insert("language-[icon_state]", icon, icon_state=icon_state) diff --git a/code/modules/asset_cache/assets/circuits.dm b/code/modules/asset_cache/assets/circuits.dm index df9aa1fa6d890..ea97a907d9301 100644 --- a/code/modules/asset_cache/assets/circuits.dm +++ b/code/modules/asset_cache/assets/circuits.dm @@ -1,4 +1,4 @@ /datum/asset/simple/circuit_assets assets = list( - "grid_background.png" = 'icons/ui_icons/tgui/grid_background.png' + "grid_background.png" = 'icons/ui/tgui/grid_background.png' ) diff --git a/code/modules/asset_cache/assets/common.dm b/code/modules/asset_cache/assets/common.dm index 1b0fb301a1921..931b4999b430d 100644 --- a/code/modules/asset_cache/assets/common.dm +++ b/code/modules/asset_cache/assets/common.dm @@ -1,3 +1,3 @@ /datum/asset/simple/namespaced/common - assets = list("padlock.png" = 'icons/ui_icons/common/padlock.png') + assets = list("padlock.png" = 'icons/ui/common/padlock.png') parents = list("common.css" = 'html/browser/common.css') diff --git a/code/modules/asset_cache/assets/condiments.dm b/code/modules/asset_cache/assets/condiments.dm index d5a7490904d33..8b47148732489 100644 --- a/code/modules/asset_cache/assets/condiments.dm +++ b/code/modules/asset_cache/assets/condiments.dm @@ -1,24 +1,24 @@ /datum/asset/spritesheet/simple/condiments name = "condiments" assets = list( - CONDIMASTER_STYLE_FALLBACK = 'icons/ui_icons/condiments/bottle.png', - "flour" = 'icons/ui_icons/condiments/flour.png', - "rice" = 'icons/ui_icons/condiments/rice.png', - "sugar" = 'icons/ui_icons/condiments/sugar.png', - "milk" = 'icons/ui_icons/condiments/milk.png', - "enzyme" = 'icons/ui_icons/condiments/enzyme.png', - "capsaicin" = 'icons/ui_icons/condiments/hotsauce.png', - "frostoil" = 'icons/ui_icons/condiments/coldsauce.png', - "bbqsauce" = 'icons/ui_icons/condiments/bbqsauce.png', - "soymilk" = 'icons/ui_icons/condiments/soymilk.png', - "soysauce" = 'icons/ui_icons/condiments/soysauce.png', - "ketchup" = 'icons/ui_icons/condiments/ketchup.png', - "mayonnaise" = 'icons/ui_icons/condiments/mayonnaise.png', - "oliveoil" = 'icons/ui_icons/condiments/oliveoil.png', - "cooking_oil" = 'icons/ui_icons/condiments/cookingoil.png', - "peanut_butter" = 'icons/ui_icons/condiments/peanutbutter.png', - "cherryjelly" = 'icons/ui_icons/condiments/cherryjelly.png', - "honey" = 'icons/ui_icons/condiments/honey.png', - "blackpepper" = 'icons/ui_icons/condiments/peppermillsmall.png', - "sodiumchloride" = 'icons/ui_icons/condiments/saltshakersmall.png', + CONDIMASTER_STYLE_FALLBACK = 'icons/ui/condiments/bottle.png', + "flour" = 'icons/ui/condiments/flour.png', + "rice" = 'icons/ui/condiments/rice.png', + "sugar" = 'icons/ui/condiments/sugar.png', + "milk" = 'icons/ui/condiments/milk.png', + "enzyme" = 'icons/ui/condiments/enzyme.png', + "capsaicin" = 'icons/ui/condiments/hotsauce.png', + "frostoil" = 'icons/ui/condiments/coldsauce.png', + "bbqsauce" = 'icons/ui/condiments/bbqsauce.png', + "soymilk" = 'icons/ui/condiments/soymilk.png', + "soysauce" = 'icons/ui/condiments/soysauce.png', + "ketchup" = 'icons/ui/condiments/ketchup.png', + "mayonnaise" = 'icons/ui/condiments/mayonnaise.png', + "oliveoil" = 'icons/ui/condiments/oliveoil.png', + "cooking_oil" = 'icons/ui/condiments/cookingoil.png', + "peanut_butter" = 'icons/ui/condiments/peanutbutter.png', + "cherryjelly" = 'icons/ui/condiments/cherryjelly.png', + "honey" = 'icons/ui/condiments/honey.png', + "blackpepper" = 'icons/ui/condiments/peppermillsmall.png', + "sodiumchloride" = 'icons/ui/condiments/saltshakersmall.png', ) diff --git a/code/modules/asset_cache/assets/contracts.dm b/code/modules/asset_cache/assets/contracts.dm index 6ac1a9cb678e2..72bd81572b5fd 100644 --- a/code/modules/asset_cache/assets/contracts.dm +++ b/code/modules/asset_cache/assets/contracts.dm @@ -1,7 +1,7 @@ /datum/asset/simple/contracts assets = list( - "bluespace.png" = 'icons/ui_icons/contracts/bluespace.png', - "destruction.png" = 'icons/ui_icons/contracts/destruction.png', - "healing.png" = 'icons/ui_icons/contracts/healing.png', - "robeless.png" = 'icons/ui_icons/contracts/robeless.png', + "bluespace.png" = 'icons/ui/contracts/bluespace.png', + "destruction.png" = 'icons/ui/contracts/destruction.png', + "healing.png" = 'icons/ui/contracts/healing.png', + "robeless.png" = 'icons/ui/contracts/robeless.png', ) diff --git a/code/modules/asset_cache/assets/genetics.dm b/code/modules/asset_cache/assets/genetics.dm index d74f10f631bb4..51ac0b47b40f3 100644 --- a/code/modules/asset_cache/assets/genetics.dm +++ b/code/modules/asset_cache/assets/genetics.dm @@ -1,6 +1,6 @@ /datum/asset/simple/genetics assets = list( - "dna_discovered.gif" = 'icons/ui_icons/dna/dna_discovered.gif', - "dna_undiscovered.gif" = 'icons/ui_icons/dna/dna_undiscovered.gif', - "dna_extra.gif" = 'icons/ui_icons/dna/dna_extra.gif' + "dna_discovered.gif" = 'icons/ui/dna/dna_discovered.gif', + "dna_undiscovered.gif" = 'icons/ui/dna/dna_undiscovered.gif', + "dna_extra.gif" = 'icons/ui/dna/dna_extra.gif' ) diff --git a/code/modules/asset_cache/assets/headers.dm b/code/modules/asset_cache/assets/headers.dm index 62c7fc532e613..1c070bd0322dc 100644 --- a/code/modules/asset_cache/assets/headers.dm +++ b/code/modules/asset_cache/assets/headers.dm @@ -1,31 +1,31 @@ /datum/asset/simple/headers assets = list( - "alarm_green.gif" = 'icons/program_icons/alarm_green.gif', - "alarm_red.gif" = 'icons/program_icons/alarm_red.gif', - "batt_5.gif" = 'icons/program_icons/batt_5.gif', - "batt_20.gif" = 'icons/program_icons/batt_20.gif', - "batt_40.gif" = 'icons/program_icons/batt_40.gif', - "batt_60.gif" = 'icons/program_icons/batt_60.gif', - "batt_80.gif" = 'icons/program_icons/batt_80.gif', - "batt_100.gif" = 'icons/program_icons/batt_100.gif', - "downloader_finished.gif" = 'icons/program_icons/downloader_finished.gif', - "downloader_running.gif" = 'icons/program_icons/downloader_running.gif', - "ntnrc_idle.gif" = 'icons/program_icons/ntnrc_idle.gif', - "ntnrc_new.gif" = 'icons/program_icons/ntnrc_new.gif', - "power_norm.gif" = 'icons/program_icons/power_norm.gif', - "power_warn.gif" = 'icons/program_icons/power_warn.gif', - "sig_high.gif" = 'icons/program_icons/sig_high.gif', - "sig_low.gif" = 'icons/program_icons/sig_low.gif', - "sig_lan.gif" = 'icons/program_icons/sig_lan.gif', - "sig_none.gif" = 'icons/program_icons/sig_none.gif', - "smmon_0.gif" = 'icons/program_icons/smmon_0.gif', - "smmon_1.gif" = 'icons/program_icons/smmon_1.gif', - "smmon_2.gif" = 'icons/program_icons/smmon_2.gif', - "smmon_3.gif" = 'icons/program_icons/smmon_3.gif', - "smmon_4.gif" = 'icons/program_icons/smmon_4.gif', - "smmon_5.gif" = 'icons/program_icons/smmon_5.gif', - "smmon_6.gif" = 'icons/program_icons/smmon_6.gif', - "borg_mon.gif" = 'icons/program_icons/borg_mon.gif', - "robotact.gif" = 'icons/program_icons/robotact.gif', - "mafia.gif" = 'icons/program_icons/mafia.gif', + "alarm_green.gif" = 'icons/ui/programs/alarm_green.gif', + "alarm_red.gif" = 'icons/ui/programs/alarm_red.gif', + "batt_5.gif" = 'icons/ui/programs/batt_5.gif', + "batt_20.gif" = 'icons/ui/programs/batt_20.gif', + "batt_40.gif" = 'icons/ui/programs/batt_40.gif', + "batt_60.gif" = 'icons/ui/programs/batt_60.gif', + "batt_80.gif" = 'icons/ui/programs/batt_80.gif', + "batt_100.gif" = 'icons/ui/programs/batt_100.gif', + "downloader_finished.gif" = 'icons/ui/programs/downloader_finished.gif', + "downloader_running.gif" = 'icons/ui/programs/downloader_running.gif', + "ntnrc_idle.gif" = 'icons/ui/programs/ntnrc_idle.gif', + "ntnrc_new.gif" = 'icons/ui/programs/ntnrc_new.gif', + "power_norm.gif" = 'icons/ui/programs/power_norm.gif', + "power_warn.gif" = 'icons/ui/programs/power_warn.gif', + "sig_high.gif" = 'icons/ui/programs/sig_high.gif', + "sig_low.gif" = 'icons/ui/programs/sig_low.gif', + "sig_lan.gif" = 'icons/ui/programs/sig_lan.gif', + "sig_none.gif" = 'icons/ui/programs/sig_none.gif', + "smmon_0.gif" = 'icons/ui/programs/smmon_0.gif', + "smmon_1.gif" = 'icons/ui/programs/smmon_1.gif', + "smmon_2.gif" = 'icons/ui/programs/smmon_2.gif', + "smmon_3.gif" = 'icons/ui/programs/smmon_3.gif', + "smmon_4.gif" = 'icons/ui/programs/smmon_4.gif', + "smmon_5.gif" = 'icons/ui/programs/smmon_5.gif', + "smmon_6.gif" = 'icons/ui/programs/smmon_6.gif', + "borg_mon.gif" = 'icons/ui/programs/borg_mon.gif', + "robotact.gif" = 'icons/ui/programs/robotact.gif', + "mafia.gif" = 'icons/ui/programs/mafia.gif', ) diff --git a/code/modules/asset_cache/assets/inventory.dm b/code/modules/asset_cache/assets/inventory.dm index a63fc45620f0a..0883dbd7515e5 100644 --- a/code/modules/asset_cache/assets/inventory.dm +++ b/code/modules/asset_cache/assets/inventory.dm @@ -1,20 +1,20 @@ /datum/asset/simple/inventory assets = list( - "inventory-glasses.png" = 'icons/ui_icons/inventory/glasses.png', - "inventory-head.png" = 'icons/ui_icons/inventory/head.png', - "inventory-neck.png" = 'icons/ui_icons/inventory/neck.png', - "inventory-mask.png" = 'icons/ui_icons/inventory/mask.png', - "inventory-ears.png" = 'icons/ui_icons/inventory/ears.png', - "inventory-uniform.png" = 'icons/ui_icons/inventory/uniform.png', - "inventory-suit.png" = 'icons/ui_icons/inventory/suit.png', - "inventory-gloves.png" = 'icons/ui_icons/inventory/gloves.png', - "inventory-hand_l.png" = 'icons/ui_icons/inventory/hand_l.png', - "inventory-hand_r.png" = 'icons/ui_icons/inventory/hand_r.png', - "inventory-shoes.png" = 'icons/ui_icons/inventory/shoes.png', - "inventory-suit_storage.png" = 'icons/ui_icons/inventory/suit_storage.png', - "inventory-id.png" = 'icons/ui_icons/inventory/id.png', - "inventory-belt.png" = 'icons/ui_icons/inventory/belt.png', - "inventory-back.png" = 'icons/ui_icons/inventory/back.png', - "inventory-pocket.png" = 'icons/ui_icons/inventory/pocket.png', - "inventory-collar.png" = 'icons/ui_icons/inventory/collar.png', + "inventory-glasses.png" = 'icons/ui/inventory/glasses.png', + "inventory-head.png" = 'icons/ui/inventory/head.png', + "inventory-neck.png" = 'icons/ui/inventory/neck.png', + "inventory-mask.png" = 'icons/ui/inventory/mask.png', + "inventory-ears.png" = 'icons/ui/inventory/ears.png', + "inventory-uniform.png" = 'icons/ui/inventory/uniform.png', + "inventory-suit.png" = 'icons/ui/inventory/suit.png', + "inventory-gloves.png" = 'icons/ui/inventory/gloves.png', + "inventory-hand_l.png" = 'icons/ui/inventory/hand_l.png', + "inventory-hand_r.png" = 'icons/ui/inventory/hand_r.png', + "inventory-shoes.png" = 'icons/ui/inventory/shoes.png', + "inventory-suit_storage.png" = 'icons/ui/inventory/suit_storage.png', + "inventory-id.png" = 'icons/ui/inventory/id.png', + "inventory-belt.png" = 'icons/ui/inventory/belt.png', + "inventory-back.png" = 'icons/ui/inventory/back.png', + "inventory-pocket.png" = 'icons/ui/inventory/pocket.png', + "inventory-collar.png" = 'icons/ui/inventory/collar.png', ) diff --git a/code/modules/asset_cache/assets/mecha.dm b/code/modules/asset_cache/assets/mecha.dm index fd4b911e20ca3..3c2403cf1c375 100644 --- a/code/modules/asset_cache/assets/mecha.dm +++ b/code/modules/asset_cache/assets/mecha.dm @@ -2,5 +2,5 @@ name = "mecha_equipment" /datum/asset/spritesheet/mecha_equipment/create_spritesheets() - InsertAll("", 'icons/mob/mecha_equipment.dmi') + InsertAll("", 'icons/obj/devices/mecha_equipment.dmi') InsertAll("", 'icons/obj/ore.dmi') diff --git a/code/modules/asset_cache/assets/notes.dm b/code/modules/asset_cache/assets/notes.dm index aec6838f96792..4f5e42cb15899 100644 --- a/code/modules/asset_cache/assets/notes.dm +++ b/code/modules/asset_cache/assets/notes.dm @@ -1,7 +1,7 @@ /datum/asset/simple/notes assets = list( - "high_button.png" = 'icons/ui_icons/notes/high_button.png', - "medium_button.png" = 'icons/ui_icons/notes/medium_button.png', - "minor_button.png" = 'icons/ui_icons/notes/minor_button.png', - "none_button.png" = 'icons/ui_icons/notes/none_button.png', + "high_button.png" = 'icons/ui/notes/high_button.png', + "medium_button.png" = 'icons/ui/notes/medium_button.png', + "minor_button.png" = 'icons/ui/notes/minor_button.png', + "none_button.png" = 'icons/ui/notes/none_button.png', ) diff --git a/code/modules/asset_cache/assets/orbit.dm b/code/modules/asset_cache/assets/orbit.dm index 7d0e0d98a0e64..8ac22877ecd08 100644 --- a/code/modules/asset_cache/assets/orbit.dm +++ b/code/modules/asset_cache/assets/orbit.dm @@ -1,4 +1,4 @@ /datum/asset/simple/orbit assets = list( - "ghost.png" = 'icons/ui_icons/orbit/ghost.png' + "ghost.png" = 'icons/ui/orbit/ghost.png' ) diff --git a/code/modules/asset_cache/assets/particle_editor.dm b/code/modules/asset_cache/assets/particle_editor.dm index f5f7bb0098711..27f7825175940 100644 --- a/code/modules/asset_cache/assets/particle_editor.dm +++ b/code/modules/asset_cache/assets/particle_editor.dm @@ -1,17 +1,17 @@ /datum/asset/simple/particle_editor assets = list( - "motion" = 'icons/ui_icons/particle_editor/motion.png', + "motion" = 'icons/ui/particle_editor/motion.png', - "uniform" = 'icons/ui_icons/particle_editor/uniform_rand.png', - "normal" ='icons/ui_icons/particle_editor/normal_rand.png', - "linear" = 'icons/ui_icons/particle_editor/linear_rand.png', - "square_rand" = 'icons/ui_icons/particle_editor/square_rand.png', + "uniform" = 'icons/ui/particle_editor/uniform_rand.png', + "normal" ='icons/ui/particle_editor/normal_rand.png', + "linear" = 'icons/ui/particle_editor/linear_rand.png', + "square_rand" = 'icons/ui/particle_editor/square_rand.png', - "num" = 'icons/ui_icons/particle_editor/num_gen.png', - "vector" = 'icons/ui_icons/particle_editor/vector_gen.png', - "box" = 'icons/ui_icons/particle_editor/box_gen.png', - "circle" = 'icons/ui_icons/particle_editor/circle_gen.png', - "sphere" = 'icons/ui_icons/particle_editor/sphere_gen.png', - "square" = 'icons/ui_icons/particle_editor/square_gen.png', - "cube" = 'icons/ui_icons/particle_editor/cube_gen.png', + "num" = 'icons/ui/particle_editor/num_gen.png', + "vector" = 'icons/ui/particle_editor/vector_gen.png', + "box" = 'icons/ui/particle_editor/box_gen.png', + "circle" = 'icons/ui/particle_editor/circle_gen.png', + "sphere" = 'icons/ui/particle_editor/sphere_gen.png', + "square" = 'icons/ui/particle_editor/square_gen.png', + "cube" = 'icons/ui/particle_editor/cube_gen.png', ) diff --git a/code/modules/asset_cache/assets/pda.dm b/code/modules/asset_cache/assets/pda.dm index 392efa35b9163..7fd3f2f40e48f 100644 --- a/code/modules/asset_cache/assets/pda.dm +++ b/code/modules/asset_cache/assets/pda.dm @@ -1,34 +1,34 @@ /datum/asset/spritesheet/simple/pda name = "pda" assets = list( - "atmos" = 'icons/pda_icons/pda_atmos.png', - "back" = 'icons/pda_icons/pda_back.png', - "bell" = 'icons/pda_icons/pda_bell.png', - "blank" = 'icons/pda_icons/pda_blank.png', - "boom" = 'icons/pda_icons/pda_boom.png', - "bucket" = 'icons/pda_icons/pda_bucket.png', - "medbot" = 'icons/pda_icons/pda_medbot.png', - "floorbot" = 'icons/pda_icons/pda_floorbot.png', - "cleanbot" = 'icons/pda_icons/pda_cleanbot.png', - "crate" = 'icons/pda_icons/pda_crate.png', - "cuffs" = 'icons/pda_icons/pda_cuffs.png', - "eject" = 'icons/pda_icons/pda_eject.png', - "flashlight" = 'icons/pda_icons/pda_flashlight.png', - "honk" = 'icons/pda_icons/pda_honk.png', - "mail" = 'icons/pda_icons/pda_mail.png', - "medical" = 'icons/pda_icons/pda_medical.png', - "menu" = 'icons/pda_icons/pda_menu.png', - "mule" = 'icons/pda_icons/pda_mule.png', - "notes" = 'icons/pda_icons/pda_notes.png', - "power" = 'icons/pda_icons/pda_power.png', - "rdoor" = 'icons/pda_icons/pda_rdoor.png', - "reagent" = 'icons/pda_icons/pda_reagent.png', - "refresh" = 'icons/pda_icons/pda_refresh.png', - "scanner" = 'icons/pda_icons/pda_scanner.png', - "signaler" = 'icons/pda_icons/pda_signaler.png', - "skills" = 'icons/pda_icons/pda_skills.png', - "status" = 'icons/pda_icons/pda_status.png', - "dronephone" = 'icons/pda_icons/pda_dronephone.png', - "emoji" = 'icons/pda_icons/pda_emoji.png', - "droneblacklist" = 'icons/pda_icons/pda_droneblacklist.png', + "atmos" = 'icons/ui/pda/pda_atmos.png', + "back" = 'icons/ui/pda/pda_back.png', + "bell" = 'icons/ui/pda/pda_bell.png', + "blank" = 'icons/ui/pda/pda_blank.png', + "boom" = 'icons/ui/pda/pda_boom.png', + "bucket" = 'icons/ui/pda/pda_bucket.png', + "medbot" = 'icons/ui/pda/pda_medbot.png', + "floorbot" = 'icons/ui/pda/pda_floorbot.png', + "cleanbot" = 'icons/ui/pda/pda_cleanbot.png', + "crate" = 'icons/ui/pda/pda_crate.png', + "cuffs" = 'icons/ui/pda/pda_cuffs.png', + "eject" = 'icons/ui/pda/pda_eject.png', + "flashlight" = 'icons/ui/pda/pda_flashlight.png', + "honk" = 'icons/ui/pda/pda_honk.png', + "mail" = 'icons/ui/pda/pda_mail.png', + "medical" = 'icons/ui/pda/pda_medical.png', + "menu" = 'icons/ui/pda/pda_menu.png', + "mule" = 'icons/ui/pda/pda_mule.png', + "notes" = 'icons/ui/pda/pda_notes.png', + "power" = 'icons/ui/pda/pda_power.png', + "rdoor" = 'icons/ui/pda/pda_rdoor.png', + "reagent" = 'icons/ui/pda/pda_reagent.png', + "refresh" = 'icons/ui/pda/pda_refresh.png', + "scanner" = 'icons/ui/pda/pda_scanner.png', + "signaler" = 'icons/ui/pda/pda_signaler.png', + "skills" = 'icons/ui/pda/pda_skills.png', + "status" = 'icons/ui/pda/pda_status.png', + "dronephone" = 'icons/ui/pda/pda_dronephone.png', + "emoji" = 'icons/ui/pda/pda_emoji.png', + "droneblacklist" = 'icons/ui/pda/pda_droneblacklist.png', ) diff --git a/code/modules/asset_cache/assets/plane_debug.dm b/code/modules/asset_cache/assets/plane_debug.dm index 0d8ddac162c12..eda7244fa9e0e 100644 --- a/code/modules/asset_cache/assets/plane_debug.dm +++ b/code/modules/asset_cache/assets/plane_debug.dm @@ -1,4 +1,4 @@ /datum/asset/simple/plane_background assets = list( - "grid_background.png" = 'icons/ui_icons/tgui/grid_background.png' + "grid_background.png" = 'icons/ui/tgui/grid_background.png' ) diff --git a/code/modules/asset_cache/assets/radar.dm b/code/modules/asset_cache/assets/radar.dm index cef2679a92dcc..c7642f71fd957 100644 --- a/code/modules/asset_cache/assets/radar.dm +++ b/code/modules/asset_cache/assets/radar.dm @@ -1,6 +1,6 @@ /datum/asset/simple/radar_assets assets = list( - "ntosradarbackground.png" = 'icons/ui_icons/tgui/ntosradar_background.png', - "ntosradarpointer.png" = 'icons/ui_icons/tgui/ntosradar_pointer.png', - "ntosradarpointerS.png" = 'icons/ui_icons/tgui/ntosradar_pointer_S.png' + "ntosradarbackground.png" = 'icons/ui/tgui/ntosradar_background.png', + "ntosradarpointer.png" = 'icons/ui/tgui/ntosradar_pointer.png', + "ntosradarpointerS.png" = 'icons/ui/tgui/ntosradar_pointer_S.png' ) diff --git a/code/modules/asset_cache/assets/safe.dm b/code/modules/asset_cache/assets/safe.dm index b1d6ba9a8aacc..0bca5b6659c60 100644 --- a/code/modules/asset_cache/assets/safe.dm +++ b/code/modules/asset_cache/assets/safe.dm @@ -1,4 +1,4 @@ /datum/asset/simple/safe assets = list( - "safe_dial.png" = 'icons/ui_icons/safe/safe_dial.png' + "safe_dial.png" = 'icons/ui/safe/safe_dial.png' ) diff --git a/code/modules/asset_cache/assets/tgui.dm b/code/modules/asset_cache/assets/tgui.dm index 9c79925602c77..4b31d93e037f5 100644 --- a/code/modules/asset_cache/assets/tgui.dm +++ b/code/modules/asset_cache/assets/tgui.dm @@ -1,3 +1,23 @@ +// If you use a file(...) object, instead of caching the asset it will be loaded from disk every time it's requested. +// This is useful for development, but not recommended for production. +// And if TGS is defined, we're being run in a production environment. + +#ifdef TGS +/datum/asset/simple/tgui + keep_local_name = FALSE + assets = list( + "tgui.bundle.js" = "tgui/public/tgui.bundle.js", + "tgui.bundle.css" = "tgui/public/tgui.bundle.css", + ) + +/datum/asset/simple/tgui_panel + keep_local_name = FALSE + assets = list( + "tgui-panel.bundle.js" = "tgui/public/tgui-panel.bundle.js", + "tgui-panel.bundle.css" = "tgui/public/tgui-panel.bundle.css", + ) + +#else /datum/asset/simple/tgui keep_local_name = TRUE assets = list( @@ -11,3 +31,5 @@ "tgui-panel.bundle.js" = file("tgui/public/tgui-panel.bundle.js"), "tgui-panel.bundle.css" = file("tgui/public/tgui-panel.bundle.css"), ) + +#endif diff --git a/code/modules/asset_cache/assets/uplink.dm b/code/modules/asset_cache/assets/uplink.dm index e283b86c04299..e85ee1b35b5c1 100644 --- a/code/modules/asset_cache/assets/uplink.dm +++ b/code/modules/asset_cache/assets/uplink.dm @@ -9,7 +9,7 @@ var/list/items = list() for(var/datum/uplink_category/category as anything in subtypesof(/datum/uplink_category)) categories += category - categories = sortTim(categories, GLOBAL_PROC_REF(cmp_uplink_category_desc)) + sortTim(categories, GLOBAL_PROC_REF(cmp_uplink_category_desc)) var/list/new_categories = list() for(var/datum/uplink_category/category as anything in categories) diff --git a/code/modules/atmospherics/environmental/LINDA_turf_tile.dm b/code/modules/atmospherics/environmental/LINDA_turf_tile.dm index a5822084b61d6..85b95feb6d549 100644 --- a/code/modules/atmospherics/environmental/LINDA_turf_tile.dm +++ b/code/modules/atmospherics/environmental/LINDA_turf_tile.dm @@ -470,11 +470,19 @@ for(var/turf/open/group_member as anything in turf_list) //Cache? var/datum/gas_mixture/turf/mix = group_member.air - if (roundstart && istype(group_member.air, /datum/gas_mixture/immutable)) - imumutable_in_group = TRUE - shared_mix.copy_from(group_member.air) //This had better be immutable young man - shared_gases = shared_mix.gases //update the cache - break + if (roundstart) + if(istype(group_member.air, /datum/gas_mixture/immutable)) + imumutable_in_group = TRUE + shared_mix.copy_from(group_member.air) //This had better be immutable young man + shared_gases = shared_mix.gases //update the cache + break + // If we're planetary use THAT mix, and stop here + if(group_member.planetary_atmos) + imumutable_in_group = TRUE + var/datum/gas_mixture/planetary_mix = SSair.planetary[group_member.initial_gas_mix] + shared_mix.copy_from(planetary_mix) + shared_gases = shared_mix.gases // Cache update + break //"borrowing" this code from merge(), I need to play with the temp portion. Lets expand it out //temperature = (giver.temperature * giver_heat_capacity + temperature * self_heat_capacity) / combined_heat_capacity var/capacity = mix.heat_capacity() diff --git a/code/modules/atmospherics/gasmixtures/reaction_factors.dm b/code/modules/atmospherics/gasmixtures/reaction_factors.dm index 1b96a89768377..5148793179500 100644 --- a/code/modules/atmospherics/gasmixtures/reaction_factors.dm +++ b/code/modules/atmospherics/gasmixtures/reaction_factors.dm @@ -205,4 +205,5 @@ "Radiation" = "Radiation gets released during this decomposition process.", "Hallucinations" = "This reaction can cause various carbon based lifeforms in the vicinity to hallucinate.", "Nuclear Particles" = "This reaction emits extremely high energy nuclear particles, up to [2 * PN_BZASE_NUCLEAR_PARTICLE_MAXIMUM] per second per unique gas mixture.", + "Temperature" = "Can only occur between [PN_BZASE_MIN_TEMP] - [PN_BZASE_MAX_TEMP] kelvin.", ) diff --git a/code/modules/atmospherics/machinery/air_alarm/_air_alarm.dm b/code/modules/atmospherics/machinery/air_alarm/_air_alarm.dm index 112fa9f46692a..0a6aa23b34d58 100644 --- a/code/modules/atmospherics/machinery/air_alarm/_air_alarm.dm +++ b/code/modules/atmospherics/machinery/air_alarm/_air_alarm.dm @@ -145,6 +145,8 @@ GLOBAL_LIST_EMPTY_TYPED(air_alarms, /obj/machinery/airalarm) /obj/machinery/airalarm/proc/check_enviroment() var/turf/our_turf = connected_sensor ? get_turf(connected_sensor) : get_turf(src) var/datum/gas_mixture/environment = our_turf.return_air() + if(isnull(environment)) + return check_danger(our_turf, environment, environment.temperature) /obj/machinery/airalarm/proc/get_enviroment() @@ -491,6 +493,10 @@ GLOBAL_LIST_EMPTY_TYPED(air_alarms, /obj/machinery/airalarm) if(allow_link_change) disconnect_sensor() + if ("lock") + togglelock(usr) + return TRUE + update_appearance() return TRUE @@ -550,6 +556,9 @@ GLOBAL_LIST_EMPTY_TYPED(air_alarms, /obj/machinery/airalarm) if((machine_stat & (NOPOWER|BROKEN)) || shorted) return + if(!environment) + return + var/old_danger = danger_level danger_level = AIR_ALARM_ALERT_NONE diff --git a/code/modules/atmospherics/machinery/air_alarm/air_alarm_interact.dm b/code/modules/atmospherics/machinery/air_alarm/air_alarm_interact.dm index f7eaf5788c9ee..1d2dbfa336308 100644 --- a/code/modules/atmospherics/machinery/air_alarm/air_alarm_interact.dm +++ b/code/modules/atmospherics/machinery/air_alarm/air_alarm_interact.dm @@ -71,6 +71,9 @@ if(machine_stat & (NOPOWER|BROKEN)) to_chat(user, span_warning("It does nothing!")) else + if(HAS_SILICON_ACCESS(user)) + locked = !locked + return if(src.allowed(usr) && !wires.is_cut(WIRE_IDSCAN)) locked = !locked to_chat(user, span_notice("You [ locked ? "lock" : "unlock"] the air alarm interface.")) @@ -78,7 +81,6 @@ ui_interact(user) else to_chat(user, span_danger("Access denied.")) - return /obj/machinery/airalarm/emag_act(mob/user, obj/item/card/emag/emag_card) if(obj_flags & EMAGGED) diff --git a/code/modules/atmospherics/machinery/atmosmachinery.dm b/code/modules/atmospherics/machinery/atmosmachinery.dm index d152cf09e711f..fa8b833234586 100644 --- a/code/modules/atmospherics/machinery/atmosmachinery.dm +++ b/code/modules/atmospherics/machinery/atmosmachinery.dm @@ -301,8 +301,8 @@ * * given_layer - the piping_layer we are checking */ /obj/machinery/atmospherics/proc/connection_check(obj/machinery/atmospherics/target, given_layer) - //check if the target & src connect in the same direction - if(!((initialize_directions & get_dir(src, target)) && (target.initialize_directions & get_dir(target, src)))) + //if target is not multiz then we have to check if the target & src connect in the same direction + if(!istype(target, /obj/machinery/atmospherics/pipe/multiz) && !((initialize_directions & get_dir(src, target)) && (target.initialize_directions & get_dir(target, src)))) return FALSE //both target & src can't be connected either way diff --git a/code/modules/atmospherics/machinery/components/binary_devices/passive_gate.dm b/code/modules/atmospherics/machinery/components/binary_devices/passive_gate.dm index fe6f9423b433d..572e910d3fe08 100644 --- a/code/modules/atmospherics/machinery/components/binary_devices/passive_gate.dm +++ b/code/modules/atmospherics/machinery/components/binary_devices/passive_gate.dm @@ -30,13 +30,14 @@ Passive gate is similar to the regular pump except: context[SCREENTIP_CONTEXT_ALT_LMB] = "Maximize target pressure" return CONTEXTUAL_SCREENTIP_SET -/obj/machinery/atmospherics/components/binary/passive_gate/CtrlClick(mob/user) - if(can_interact(user)) +/obj/machinery/atmospherics/components/binary/passive_gate/click_ctrl(mob/user) + if(is_operational) on = !on balloon_alert(user, "turned [on ? "on" : "off"]") investigate_log("was turned [on ? "on" : "off"] by [key_name(user)]", INVESTIGATE_ATMOS) update_appearance() - return ..() + return CLICK_ACTION_SUCCESS + return CLICK_ACTION_BLOCKING /obj/machinery/atmospherics/components/binary/passive_gate/click_alt(mob/user) if(target_pressure == MAX_OUTPUT_PRESSURE) diff --git a/code/modules/atmospherics/machinery/components/binary_devices/pressure_valve.dm b/code/modules/atmospherics/machinery/components/binary_devices/pressure_valve.dm index c331332213517..399feff12146f 100644 --- a/code/modules/atmospherics/machinery/components/binary_devices/pressure_valve.dm +++ b/code/modules/atmospherics/machinery/components/binary_devices/pressure_valve.dm @@ -22,13 +22,14 @@ context[SCREENTIP_CONTEXT_ALT_LMB] = "Maximize target pressure" return CONTEXTUAL_SCREENTIP_SET -/obj/machinery/atmospherics/components/binary/pressure_valve/CtrlClick(mob/user) - if(can_interact(user)) +/obj/machinery/atmospherics/components/binary/pressure_valve/click_ctrl(mob/user) + if(is_operational) on = !on balloon_alert(user, "turned [on ? "on" : "off"]") investigate_log("was turned [on ? "on" : "off"] by [key_name(user)]", INVESTIGATE_ATMOS) update_appearance() - return ..() + return CLICK_ACTION_SUCCESS + return CLICK_ACTION_BLOCKING /obj/machinery/atmospherics/components/binary/pressure_valve/click_alt(mob/user) if(target_pressure == MAX_OUTPUT_PRESSURE) diff --git a/code/modules/atmospherics/machinery/components/binary_devices/pump.dm b/code/modules/atmospherics/machinery/components/binary_devices/pump.dm index 035f3a0f99603..63ba340f27ff4 100644 --- a/code/modules/atmospherics/machinery/components/binary_devices/pump.dm +++ b/code/modules/atmospherics/machinery/components/binary_devices/pump.dm @@ -35,13 +35,14 @@ context[SCREENTIP_CONTEXT_ALT_LMB] = "Maximize target pressure" return CONTEXTUAL_SCREENTIP_SET -/obj/machinery/atmospherics/components/binary/pump/CtrlClick(mob/user) - if(can_interact(user)) +/obj/machinery/atmospherics/components/binary/pump/click_ctrl(mob/user) + if(is_operational) set_on(!on) balloon_alert(user, "turned [on ? "on" : "off"]") investigate_log("was turned [on ? "on" : "off"] by [key_name(user)]", INVESTIGATE_ATMOS) update_appearance() - return ..() + return CLICK_ACTION_SUCCESS + return CLICK_ACTION_BLOCKING /obj/machinery/atmospherics/components/binary/pump/click_alt(mob/user) if(target_pressure == MAX_OUTPUT_PRESSURE) diff --git a/code/modules/atmospherics/machinery/components/binary_devices/temperature_gate.dm b/code/modules/atmospherics/machinery/components/binary_devices/temperature_gate.dm index d1202dbec942b..b5a3740245a31 100644 --- a/code/modules/atmospherics/machinery/components/binary_devices/temperature_gate.dm +++ b/code/modules/atmospherics/machinery/components/binary_devices/temperature_gate.dm @@ -27,13 +27,14 @@ context[SCREENTIP_CONTEXT_ALT_LMB] = "Maximize target temperature" return CONTEXTUAL_SCREENTIP_SET -/obj/machinery/atmospherics/components/binary/temperature_gate/CtrlClick(mob/user) - if(can_interact(user)) +/obj/machinery/atmospherics/components/binary/temperature_gate/click_ctrl(mob/user) + if(is_operational) on = !on balloon_alert(user, "turned [on ? "on" : "off"]") investigate_log("was turned [on ? "on" : "off"] by [key_name(user)]", INVESTIGATE_ATMOS) update_appearance() - return ..() + return CLICK_ACTION_SUCCESS + return CLICK_ACTION_BLOCKING /obj/machinery/atmospherics/components/binary/temperature_gate/click_alt(mob/user) if(target_temperature == max_temperature) diff --git a/code/modules/atmospherics/machinery/components/binary_devices/temperature_pump.dm b/code/modules/atmospherics/machinery/components/binary_devices/temperature_pump.dm index 2615b964ed802..3976e8db750c1 100644 --- a/code/modules/atmospherics/machinery/components/binary_devices/temperature_pump.dm +++ b/code/modules/atmospherics/machinery/components/binary_devices/temperature_pump.dm @@ -22,13 +22,14 @@ context[SCREENTIP_CONTEXT_ALT_LMB] = "Maximize transfer rate" return CONTEXTUAL_SCREENTIP_SET -/obj/machinery/atmospherics/components/binary/temperature_pump/CtrlClick(mob/user) - if(can_interact(user)) +/obj/machinery/atmospherics/components/binary/temperature_pump/click_ctrl(mob/user) + if(is_operational) on = !on balloon_alert(user, "turned [on ? "on" : "off"]") investigate_log("was turned [on ? "on" : "off"] by [key_name(user)]", INVESTIGATE_ATMOS) update_appearance() - return ..() + return CLICK_ACTION_SUCCESS + return CLICK_ACTION_BLOCKING /obj/machinery/atmospherics/components/binary/temperature_pump/click_alt(mob/user) if(heat_transfer_rate == max_heat_transfer_rate) diff --git a/code/modules/atmospherics/machinery/components/binary_devices/valve.dm b/code/modules/atmospherics/machinery/components/binary_devices/valve.dm index 32f3eb7419ced..aeb14c9b5dd28 100644 --- a/code/modules/atmospherics/machinery/components/binary_devices/valve.dm +++ b/code/modules/atmospherics/machinery/components/binary_devices/valve.dm @@ -25,6 +25,7 @@ It's like a regular ol' straight pipe, but you can turn it on and off. normalize_cardinal_directions() if(animation) flick("[valve_type]valve_[on][!on]-[set_overlay_offset(piping_layer)]", src) + playsound(src, 'sound/effects/valve_opening.ogg', 50) icon_state = "[valve_type]valve_[on ? "on" : "off"]-[set_overlay_offset(piping_layer)]" /** @@ -37,6 +38,7 @@ It's like a regular ol' straight pipe, but you can turn it on and off. . = on on = to_open if(on) + playsound(src, 'sound/effects/gas_hissing.ogg', 50) update_icon_nopipes() update_parents() var/datum/pipeline/parent1 = parents[1] diff --git a/code/modules/atmospherics/machinery/components/binary_devices/volume_pump.dm b/code/modules/atmospherics/machinery/components/binary_devices/volume_pump.dm index 41dc549b85833..ae8965ae0561e 100644 --- a/code/modules/atmospherics/machinery/components/binary_devices/volume_pump.dm +++ b/code/modules/atmospherics/machinery/components/binary_devices/volume_pump.dm @@ -33,13 +33,14 @@ )) register_context() -/obj/machinery/atmospherics/components/binary/volume_pump/CtrlClick(mob/user) +/obj/machinery/atmospherics/components/binary/volume_pump/click_ctrl(mob/user) if(can_interact(user)) set_on(!on) balloon_alert(user, "turned [on ? "on" : "off"]") investigate_log("was turned [on ? "on" : "off"] by [key_name(user)]", INVESTIGATE_ATMOS) update_appearance() - return ..() + return CLICK_ACTION_SUCCESS + return CLICK_ACTION_BLOCKING /obj/machinery/atmospherics/components/binary/volume_pump/click_alt(mob/user) if(transfer_rate == MAX_TRANSFER_RATE) diff --git a/code/modules/atmospherics/machinery/components/electrolyzer/electrolyzer.dm b/code/modules/atmospherics/machinery/components/electrolyzer/electrolyzer.dm index 2da9ac752b549..4a811c3435cb7 100644 --- a/code/modules/atmospherics/machinery/components/electrolyzer/electrolyzer.dm +++ b/code/modules/atmospherics/machinery/components/electrolyzer/electrolyzer.dm @@ -15,7 +15,7 @@ /// We don't use area power, we always use the cell use_power = NO_POWER_USE ///used to check if there is a cell in the machine - var/obj/item/stock_parts/cell/cell + var/obj/item/stock_parts/power_store/cell ///check if the machine is on or off var/on = FALSE ///check what mode the machine should be (WORKING, STANDBY) @@ -170,7 +170,7 @@ /obj/machinery/electrolyzer/attackby(obj/item/I, mob/user, params) add_fingerprint(user) - if(istype(I, /obj/item/stock_parts/cell)) + if(istype(I, /obj/item/stock_parts/power_store/cell)) if(!panel_open) balloon_alert(user, "open panel!") return diff --git a/code/modules/atmospherics/machinery/components/fusion/hfr_procs.dm b/code/modules/atmospherics/machinery/components/fusion/hfr_procs.dm index 71e5a8bcc5f36..9f2f6a96f4bf8 100644 --- a/code/modules/atmospherics/machinery/components/fusion/hfr_procs.dm +++ b/code/modules/atmospherics/machinery/components/fusion/hfr_procs.dm @@ -330,7 +330,7 @@ var/obj/machinery/power/apc/apc = area.apc if (!apc) return 0 - var/obj/item/stock_parts/cell/cell = apc.cell + var/obj/item/stock_parts/power_store/cell = apc.cell if (!cell) return 0 return cell.percent() diff --git a/code/modules/atmospherics/machinery/components/gas_recipe_machines/atmos_machines_recipes.dm b/code/modules/atmospherics/machinery/components/gas_recipe_machines/atmos_machines_recipes.dm index 184d7680c91af..13c872199dc0c 100644 --- a/code/modules/atmospherics/machinery/components/gas_recipe_machines/atmos_machines_recipes.dm +++ b/code/modules/atmospherics/machinery/components/gas_recipe_machines/atmos_machines_recipes.dm @@ -134,7 +134,7 @@ GLOBAL_LIST_INIT(gas_recipe_meta, gas_recipes_list()) max_temp = 90 energy_release = -800000 requirements = list(/datum/gas/plasma = 800, /datum/gas/helium = 100, /datum/gas/bz = 50) - products = list(/obj/item/stock_parts/cell/crystal_cell = 1) + products = list(/obj/item/stock_parts/power_store/cell/crystal_cell = 1) /datum/gas_recipe/crystallizer/zaukerite id = "zaukerite" diff --git a/code/modules/atmospherics/machinery/components/gas_recipe_machines/crystallizer.dm b/code/modules/atmospherics/machinery/components/gas_recipe_machines/crystallizer.dm index 989156867491f..f0482c210a66a 100644 --- a/code/modules/atmospherics/machinery/components/gas_recipe_machines/crystallizer.dm +++ b/code/modules/atmospherics/machinery/components/gas_recipe_machines/crystallizer.dm @@ -88,17 +88,17 @@ else icon_state = "[base_icon_state]-off" -/obj/machinery/atmospherics/components/binary/crystallizer/CtrlClick(mob/living/user) - if(!can_interact(user)) - return +/obj/machinery/atmospherics/components/binary/crystallizer/click_ctrl(mob/user) + if(!is_operational) + return CLICK_ACTION_BLOCKING if(panel_open) balloon_alert(user, "close panel!") - return + return CLICK_ACTION_BLOCKING on = !on balloon_alert(user, "turned [on ? "on" : "off"]") investigate_log("was turned [on ? "on" : "off"] by [key_name(user)]", INVESTIGATE_ATMOS) update_icon() - return ..() + return CLICK_ACTION_SUCCESS ///Checks if the reaction temperature is inside the range of temperature + a little deviation /obj/machinery/atmospherics/components/binary/crystallizer/proc/check_temp_requirements() diff --git a/code/modules/atmospherics/machinery/components/gas_recipe_machines/crystallizer_items.dm b/code/modules/atmospherics/machinery/components/gas_recipe_machines/crystallizer_items.dm index c12893cb13749..95b548998a194 100644 --- a/code/modules/atmospherics/machinery/components/gas_recipe_machines/crystallizer_items.dm +++ b/code/modules/atmospherics/machinery/components/gas_recipe_machines/crystallizer_items.dm @@ -5,29 +5,27 @@ icon_state = "hypernoblium_crystal" var/uses = 1 -/obj/item/hypernoblium_crystal/afterattack(obj/target_object, mob/user, proximity) - . = ..() - if(!proximity) - return - . |= AFTERATTACK_PROCESSED_ITEM - var/obj/machinery/portable_atmospherics/atmos_device = target_object +/obj/item/hypernoblium_crystal/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + var/obj/machinery/portable_atmospherics/atmos_device = interacting_with + var/obj/item/clothing/worn_item = interacting_with + if(!istype(worn_item) && !istype(atmos_device)) + to_chat(user, span_warning("The crystal can only be used on clothing and portable atmospheric devices!")) + return ITEM_INTERACT_BLOCKING + if(istype(atmos_device)) if(atmos_device.nob_crystal_inserted) to_chat(user, span_warning("[atmos_device] already has a hypernoblium crystal inserted in it!")) - return - atmos_device.nob_crystal_inserted = TRUE + return ITEM_INTERACT_BLOCKING + atmos_device.insert_nob_crystal() to_chat(user, span_notice("You insert the [src] into [atmos_device].")) - var/obj/item/clothing/worn_item = target_object - if(!istype(worn_item) && !istype(atmos_device)) - to_chat(user, span_warning("The crystal can only be used on clothing and portable atmospheric devices!")) - return + if(istype(worn_item)) if(istype(worn_item, /obj/item/clothing/suit/space)) to_chat(user, span_warning("The [worn_item] is already pressure-resistant!")) - return + return ITEM_INTERACT_BLOCKING if(worn_item.min_cold_protection_temperature == SPACE_SUIT_MIN_TEMP_PROTECT && worn_item.clothing_flags & STOPSPRESSUREDAMAGE) to_chat(user, span_warning("[worn_item] is already pressure-resistant!")) - return + return ITEM_INTERACT_BLOCKING to_chat(user, span_notice("You see how the [worn_item] changes color, it's now pressure proof.")) worn_item.name = "pressure-resistant [worn_item.name]" worn_item.remove_atom_colour(WASHABLE_COLOUR_PRIORITY) @@ -35,6 +33,8 @@ worn_item.min_cold_protection_temperature = SPACE_SUIT_MIN_TEMP_PROTECT worn_item.cold_protection = worn_item.body_parts_covered worn_item.clothing_flags |= STOPSPRESSUREDAMAGE + uses-- - if(!uses) + if(uses <= 0) qdel(src) + return ITEM_INTERACT_SUCCESS diff --git a/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm b/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm index c6b4bd43be473..25217de538ce1 100644 --- a/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm +++ b/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm @@ -24,13 +24,14 @@ context[SCREENTIP_CONTEXT_ALT_LMB] = "Maximize transfer rate" return CONTEXTUAL_SCREENTIP_SET -/obj/machinery/atmospherics/components/trinary/filter/CtrlClick(mob/user) - if(can_interact(user)) +/obj/machinery/atmospherics/components/trinary/filter/click_ctrl(mob/user) + if(is_operational) on = !on balloon_alert(user, "turned [on ? "on" : "off"]") investigate_log("was turned [on ? "on" : "off"] by [key_name(user)]", INVESTIGATE_ATMOS) update_appearance() - return ..() + return CLICK_ACTION_SUCCESS + return CLICK_ACTION_BLOCKING /obj/machinery/atmospherics/components/trinary/filter/click_alt(mob/user) if(transfer_rate == MAX_TRANSFER_RATE) diff --git a/code/modules/atmospherics/machinery/components/trinary_devices/mixer.dm b/code/modules/atmospherics/machinery/components/trinary_devices/mixer.dm index f832adcb4ea2e..12a3c7971601b 100644 --- a/code/modules/atmospherics/machinery/components/trinary_devices/mixer.dm +++ b/code/modules/atmospherics/machinery/components/trinary_devices/mixer.dm @@ -27,13 +27,14 @@ context[SCREENTIP_CONTEXT_ALT_LMB] = "Maximize target pressure" return CONTEXTUAL_SCREENTIP_SET -/obj/machinery/atmospherics/components/trinary/mixer/CtrlClick(mob/user) - if(can_interact(user)) +/obj/machinery/atmospherics/components/trinary/mixer/click_ctrl(mob/user) + if(is_operational) on = !on balloon_alert(user, "turned [on ? "on" : "off"]") investigate_log("was turned [on ? "on" : "off"] by [key_name(user)]", INVESTIGATE_ATMOS) update_appearance() - return ..() + return CLICK_ACTION_SUCCESS + return CLICK_ACTION_BLOCKING /obj/machinery/atmospherics/components/trinary/mixer/click_alt(mob/user) if(target_pressure == MAX_OUTPUT_PRESSURE) diff --git a/code/modules/atmospherics/machinery/components/unary_devices/bluespace_sender.dm b/code/modules/atmospherics/machinery/components/unary_devices/bluespace_sender.dm index 7d2efbd932103..ebe053663f9e0 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/bluespace_sender.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/bluespace_sender.dm @@ -61,7 +61,8 @@ GLOBAL_LIST_EMPTY_TYPED(bluespace_senders, /obj/machinery/atmospherics/component /obj/machinery/atmospherics/components/unary/bluespace_sender/add_context(atom/source, list/context, obj/item/held_item, mob/user) . = ..() - context[SCREENTIP_CONTEXT_CTRL_LMB] = "Turn [on ? "off" : "on"]" + if(anchored && !panel_open && is_operational) + context[SCREENTIP_CONTEXT_CTRL_LMB] = "Turn [on ? "off" : "on"]" if(!held_item) return CONTEXTUAL_SCREENTIP_SET switch(held_item.tool_behaviour) @@ -149,16 +150,14 @@ GLOBAL_LIST_EMPTY_TYPED(bluespace_senders, /obj/machinery/atmospherics/component update_appearance() return TRUE -/obj/machinery/atmospherics/components/unary/bluespace_sender/CtrlClick(mob/living/user) - if(!panel_open) - if(!can_interact(user)) - return +/obj/machinery/atmospherics/components/unary/bluespace_sender/click_ctrl(mob/user) + if(!panel_open && is_operational) on = !on balloon_alert(user, "turned [on ? "on" : "off"]") investigate_log("was turned [on ? "on" : "off"] by [key_name(user)]", INVESTIGATE_ATMOS) update_appearance() - return - . = ..() + return CLICK_ACTION_SUCCESS + return NONE /obj/machinery/atmospherics/components/unary/bluespace_sender/ui_interact(mob/user, datum/tgui/ui) ui = SStgui.try_update_ui(user, src, ui) diff --git a/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm b/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm index 232c047a2b2ce..1435816499f87 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm @@ -80,6 +80,7 @@ idle_power_usage = BASE_MACHINE_IDLE_CONSUMPTION * 0.75 active_power_usage = BASE_MACHINE_ACTIVE_CONSUMPTION * 1.5 flags_1 = PREVENT_CLICK_UNDER_1 + interaction_flags_mouse_drop = NEED_DEXTERITY ///If TRUE will eject the mob once healing is complete var/autoeject = TRUE @@ -133,12 +134,17 @@ return ..() -/obj/machinery/cryo_cell/on_deconstruction(disassembled) - if(occupant) +/obj/machinery/cryo_cell/handle_deconstruct(disassembled) + SHOULD_NOT_OVERRIDE(TRUE) + + if(!QDELETED(occupant)) occupant.vis_flags &= ~VIS_INHERIT_PLANE REMOVE_TRAIT(occupant, TRAIT_IMMOBILIZED, CRYO_TRAIT) REMOVE_TRAIT(occupant, TRAIT_FORCED_STANDING, CRYO_TRAIT) + return ..() + +/obj/machinery/cryo_cell/on_deconstruction(disassembled) if(beaker) beaker.forceMove(drop_location()) @@ -155,25 +161,32 @@ if(EXPLODE_LIGHT) SSexplosions.low_mov_atom += beaker -/obj/machinery/cryo_cell/on_changed_z_level(turf/old_turf, turf/new_turf, same_z_layer, notify_contents) +/obj/machinery/cryo_cell/Exited(atom/movable/gone, direction) . = ..() - if(same_z_layer) - return - SET_PLANE(occupant_vis, PLANE_TO_TRUE(occupant_vis.plane), new_turf) + if(gone == beaker) + beaker = null -/obj/machinery/cryo_cell/set_occupant(atom/movable/new_occupant) - . = ..() - update_appearance() +/obj/machinery/cryo_cell/add_context(atom/source, list/context, obj/item/held_item, mob/user) + context[SCREENTIP_CONTEXT_CTRL_LMB] = "Turn [on ? "off" : "on"]" + context[SCREENTIP_CONTEXT_ALT_LMB] = "[state_open ? "Close" : "Open"] door" + if(isnull(held_item)) + return CONTEXTUAL_SCREENTIP_SET -/obj/machinery/cryo_cell/RefreshParts() - . = ..() - var/C - for(var/datum/stock_part/matter_bin/M in component_parts) - C += M.tier + if(QDELETED(beaker) && istype(held_item, /obj/item/reagent_containers/cup)) + context[SCREENTIP_CONTEXT_LMB] = "Insert beaker" + return CONTEXTUAL_SCREENTIP_SET - efficiency = initial(efficiency) * C - heat_capacity = initial(heat_capacity) / C - conduction_coefficient = initial(conduction_coefficient) * C + switch(held_item.tool_behaviour) + if(TOOL_SCREWDRIVER) + context[SCREENTIP_CONTEXT_LMB] = "[panel_open ? "Close" : "Open"] panel" + if(TOOL_CROWBAR) + if(!state_open && !panel_open && !is_operational) + context[SCREENTIP_CONTEXT_LMB] = "Pry Open" + else if(panel_open) + context[SCREENTIP_CONTEXT_LMB] = "Deconstruct" + if(TOOL_WRENCH) + context[SCREENTIP_CONTEXT_LMB] = "[panel_open ? "Rotate" : ""]" + return CONTEXTUAL_SCREENTIP_SET /obj/machinery/cryo_cell/examine(mob/user) //this is leaving out everything but efficiency since they follow the same idea of "better beaker, better results" . = ..() @@ -201,28 +214,6 @@ else if(machine_stat & NOPOWER) . += span_notice("[src] can be [EXAMINE_HINT("pried")] open.") -/obj/machinery/cryo_cell/add_context(atom/source, list/context, obj/item/held_item, mob/user) - context[SCREENTIP_CONTEXT_CTRL_LMB] = "Turn [on ? "off" : "on"]" - context[SCREENTIP_CONTEXT_ALT_LMB] = "[state_open ? "Close" : "Open"] door" - if(isnull(held_item)) - return CONTEXTUAL_SCREENTIP_SET - - if(QDELETED(beaker) && istype(held_item, /obj/item/reagent_containers/cup)) - context[SCREENTIP_CONTEXT_LMB] = "Insert beaker" - return CONTEXTUAL_SCREENTIP_SET - - switch(held_item.tool_behaviour) - if(TOOL_SCREWDRIVER) - context[SCREENTIP_CONTEXT_LMB] = "[panel_open ? "Close" : "Open"] panel" - if(TOOL_CROWBAR) - if(!state_open && !panel_open && !is_operational) - context[SCREENTIP_CONTEXT_LMB] = "Pry Open" - else if(panel_open) - context[SCREENTIP_CONTEXT_LMB] = "Deconstruct" - if(TOOL_WRENCH) - context[SCREENTIP_CONTEXT_LMB] = "[panel_open ? "Rotate" : ""]" - return CONTEXTUAL_SCREENTIP_SET - /obj/machinery/cryo_cell/update_icon() SET_PLANE_IMPLICIT(src, initial(plane)) return ..() @@ -239,17 +230,129 @@ return . += mutable_appearance('icons/obj/medical/cryogenics.dmi', "cover-[on && is_operational ? "on" : "off"]", ABOVE_ALL_MOB_LAYER, src, plane = ABOVE_GAME_PLANE) +/obj/machinery/cryo_cell/item_interaction(mob/living/user, obj/item/tool, list/modifiers) + . = NONE + if(user.combat_mode || (tool.item_flags & ABSTRACT) || (tool.flags_1 & HOLOGRAM_1) || !user.can_perform_action(src, ALLOW_SILICON_REACH | FORBID_TELEKINESIS_REACH)) + return ITEM_INTERACT_SKIP_TO_ATTACK + + if(!istype(tool, /obj/item/reagent_containers/cup)) + return + if(!QDELETED(beaker)) + balloon_alert(user, "beaker present!") + return ITEM_INTERACT_BLOCKING + if(!user.transferItemToLoc(tool, src)) + return ITEM_INTERACT_BLOCKING + + beaker = tool + balloon_alert(user, "beaker inserted") + user.log_message("added an [tool] to cryo containing [pretty_string_from_reagent_list(tool.reagents.reagent_list)].", LOG_GAME) + return ITEM_INTERACT_SUCCESS + +/obj/machinery/cryo_cell/screwdriver_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_BLOCKING + if(on) + balloon_alert(user, "turn off!") + return + if(occupant) + balloon_alert(user, "occupant inside!") + return + + if(default_deconstruction_screwdriver(user, "pod-off", "pod-off", tool)) + update_appearance() + return ITEM_INTERACT_SUCCESS + +/obj/machinery/cryo_cell/crowbar_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_BLOCKING + if(on) + balloon_alert(user, "turn off!") + return + + var/can_crowbar = FALSE + if(!state_open && !panel_open && !is_operational) //can pry open + can_crowbar = TRUE + else if(panel_open) //can deconstruct + can_crowbar = TRUE + if(!can_crowbar) + return + + var/obj/machinery/atmospherics/node = internal_connector.gas_connector.nodes[1] + var/internal_pressure = 0 + + if(istype(node, /obj/machinery/atmospherics/components/unary/portables_connector)) + var/obj/machinery/atmospherics/components/unary/portables_connector/portable_devices_connector = node + internal_pressure = !portable_devices_connector.connected_device ? 1 : 0 + + var/datum/gas_mixture/inside_air = internal_connector.gas_connector.airs[1] + if(inside_air.total_moles() > 0) + if(!node || internal_pressure > 0) + var/datum/gas_mixture/environment_air = loc.return_air() + internal_pressure = inside_air.return_pressure() - environment_air.return_pressure() + + var/unsafe_release = FALSE + if(internal_pressure > 2 * ONE_ATMOSPHERE) + to_chat(user, span_warning("As you begin prying \the [src] a gush of air blows in your face... maybe you should reconsider?")) + if(!do_after(user, 2 SECONDS, target = src)) + return + unsafe_release = TRUE + + var/deconstruct = FALSE + if(!default_pry_open(tool)) + if(!default_deconstruction_crowbar(tool, custom_deconstruct = TRUE)) + return + else + deconstruct = TRUE + + if(unsafe_release) + internal_connector.gas_connector.unsafe_pressure_release(user, internal_pressure) + + tool.play_tool_sound(src, 50) + if(deconstruct) + deconstruct(TRUE) + return ITEM_INTERACT_SUCCESS + +/obj/machinery/cryo_cell/wrench_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_BLOCKING + if(on) + balloon_alert(user, "turn off!") + return + if(occupant) + balloon_alert(user, "occupant inside!") + return + if(state_open) + balloon_alert(user, "close first!") + return + + if(default_change_direction_wrench(user, tool)) + update_appearance() + return ITEM_INTERACT_SUCCESS + +/obj/machinery/cryo_cell/on_changed_z_level(turf/old_turf, turf/new_turf, same_z_layer, notify_contents) + . = ..() + if(same_z_layer) + return + SET_PLANE(occupant_vis, PLANE_TO_TRUE(occupant_vis.plane), new_turf) + +/obj/machinery/cryo_cell/set_occupant(atom/movable/new_occupant) + . = ..() + update_appearance() + +/obj/machinery/cryo_cell/RefreshParts() + . = ..() + + var/max_tier = 0 + for(var/datum/stock_part/matter_bin/bin in component_parts) + max_tier += bin.tier + + efficiency = initial(efficiency) * max_tier + heat_capacity = initial(heat_capacity) / max_tier + conduction_coefficient = initial(conduction_coefficient) * max_tier + /obj/machinery/cryo_cell/dump_inventory_contents(list/subset = list()) //only drop mobs when opening the machine for (var/mob/living/living_guy in contents) subset += living_guy return ..(subset) -/obj/machinery/cryo_cell/Exited(atom/movable/gone, direction) - . = ..() - if(gone == beaker) - beaker = null - /** * Turns the machine on/off * @@ -436,112 +539,6 @@ span_notice("You successfully break out of [src]!")) open_machine() -/obj/machinery/cryo_cell/MouseDrop_T(mob/target, mob/user) - if(user.incapacitated() || !Adjacent(user) || !user.Adjacent(target) || !iscarbon(target) || !ISADVANCEDTOOLUSER(user)) - return - if(isliving(target)) - var/mob/living/L = target - if(L.incapacitated()) - close_machine(target) - else - user.visible_message(span_notice("[user] starts shoving [target] inside [src]."), span_notice("You start shoving [target] inside [src].")) - if (do_after(user, 2.5 SECONDS, target=target)) - close_machine(target) - -/obj/machinery/cryo_cell/screwdriver_act(mob/living/user, obj/item/tool) - . = ITEM_INTERACT_BLOCKING - if(on) - balloon_alert(user, "turn off!") - return - if(occupant) - balloon_alert(user, "occupant inside!") - return - - if(default_deconstruction_screwdriver(user, "pod-off", "pod-off", tool)) - update_appearance() - return ITEM_INTERACT_SUCCESS - -/obj/machinery/cryo_cell/crowbar_act(mob/living/user, obj/item/tool) - . = ITEM_INTERACT_BLOCKING - if(on) - balloon_alert(user, "turn off!") - return - - var/can_crowbar = FALSE - if(!state_open && !panel_open && !is_operational) //can pry open - can_crowbar = TRUE - else if(panel_open) //can deconstruct - can_crowbar = TRUE - if(!can_crowbar) - return - - var/obj/machinery/atmospherics/node = internal_connector.gas_connector.nodes[1] - var/internal_pressure = 0 - - if(istype(node, /obj/machinery/atmospherics/components/unary/portables_connector)) - var/obj/machinery/atmospherics/components/unary/portables_connector/portable_devices_connector = node - internal_pressure = !portable_devices_connector.connected_device ? 1 : 0 - - var/datum/gas_mixture/inside_air = internal_connector.gas_connector.airs[1] - if(inside_air.total_moles() > 0) - if(!node || internal_pressure > 0) - var/datum/gas_mixture/environment_air = loc.return_air() - internal_pressure = inside_air.return_pressure() - environment_air.return_pressure() - - var/unsafe_release = FALSE - if(internal_pressure > 2 * ONE_ATMOSPHERE) - to_chat(user, span_warning("As you begin prying \the [src] a gush of air blows in your face... maybe you should reconsider?")) - if(!do_after(user, 2 SECONDS, target = src)) - return - unsafe_release = TRUE - - var/deconstruct = FALSE - if(!default_pry_open(tool)) - if(!default_deconstruction_crowbar(tool, custom_deconstruct = TRUE)) - return - else - deconstruct = TRUE - - if(unsafe_release) - internal_connector.gas_connector.unsafe_pressure_release(user, internal_pressure) - - tool.play_tool_sound(src, 50) - if(deconstruct) - deconstruct(TRUE) - return ITEM_INTERACT_SUCCESS - -/obj/machinery/cryo_cell/wrench_act(mob/living/user, obj/item/tool) - . = ITEM_INTERACT_BLOCKING - if(on) - balloon_alert(user, "turn off!") - return - if(occupant) - balloon_alert(user, "occupant inside!") - return - if(state_open) - balloon_alert(user, "close first!") - return - - if(default_change_direction_wrench(user, tool)) - update_appearance() - return ITEM_INTERACT_SUCCESS - -/obj/machinery/cryo_cell/attackby(obj/item/I, mob/user, params) - if(istype(I, /obj/item/reagent_containers/cup)) - . = TRUE //no afterattack - if(beaker) - balloon_alert(user, "beaker present!") - return - if(!user.transferItemToLoc(I, src)) - return - beaker = I - balloon_alert(user, "beaker inserted") - var/reagentlist = pretty_string_from_reagent_list(I.reagents.reagent_list) - user.log_message("added an [I] to cryo containing [reagentlist].", LOG_GAME) - return - - return ..() - /obj/machinery/cryo_cell/ui_state(mob/user) return GLOB.notcontained_state @@ -591,11 +588,11 @@ if(!QDELETED(beaker)) beaker_data = list() beaker_data["maxVolume"] = beaker.volume - beaker_data["currentVolume"] = round(beaker.reagents.total_volume, 0.01) + beaker_data["currentVolume"] = round(beaker.reagents.total_volume, CHEMICAL_VOLUME_ROUNDING) var/list/beakerContents = list() if(length(beaker.reagents.reagent_list)) for(var/datum/reagent/reagent in beaker.reagents.reagent_list) - beakerContents += list(list("name" = reagent.name, "volume" = round(reagent.volume, 0.01))) // list in a list because Byond merges the first list... + beakerContents += list(list("name" = reagent.name, "volume" = round(reagent.volume, CHEMICAL_VOLUME_ROUNDING))) // list in a list because Byond merges the first list... beaker_data["contents"] = beakerContents .["beaker"] = beaker_data @@ -638,20 +635,39 @@ return FALSE return ..() -/obj/machinery/cryo_cell/CtrlClick(mob/user) - if(can_interact(user) && !state_open) +/obj/machinery/cryo_cell/click_ctrl(mob/user) + if(is_operational && !state_open) set_on(!on) balloon_alert(user, "turned [on ? "on" : "off"]") - return ..() + return CLICK_ACTION_SUCCESS + return CLICK_ACTION_BLOCKING /obj/machinery/cryo_cell/click_alt(mob/user) - if(state_open) + //Required so players don't close the cryo on themselves without a doctor's help + if(get_turf(user) == get_turf(src)) + return CLICK_ACTION_BLOCKING + + if(state_open ) close_machine() else open_machine() balloon_alert(user, "door [state_open ? "opened" : "closed"]") return CLICK_ACTION_SUCCESS +/obj/machinery/cryo_cell/mouse_drop_receive(mob/target, mob/user, params) + if(!iscarbon(target)) + return + + if(isliving(target)) + var/mob/living/living_mob = target + if(living_mob.incapacitated()) + close_machine(target) + return + + user.visible_message(span_notice("[user] starts shoving [target] inside [src]."), span_notice("You start shoving [target] inside [src].")) + if (do_after(user, 2.5 SECONDS, target=target)) + close_machine(target) + /obj/machinery/cryo_cell/get_remote_view_fullscreens(mob/user) user.overlay_fullscreen("remote_view", /atom/movable/screen/fullscreen/impaired, 1) diff --git a/code/modules/atmospherics/machinery/components/unary_devices/outlet_injector.dm b/code/modules/atmospherics/machinery/components/unary_devices/outlet_injector.dm index 771301b60e438..3f87ca671fdc9 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/outlet_injector.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/outlet_injector.dm @@ -54,13 +54,14 @@ multi_tool.set_buffer(src) return ITEM_INTERACT_SUCCESS -/obj/machinery/atmospherics/components/unary/outlet_injector/CtrlClick(mob/user) - if(can_interact(user)) +/obj/machinery/atmospherics/components/unary/outlet_injector/click_ctrl(mob/user) + if(is_operational) on = !on balloon_alert(user, "turned [on ? "on" : "off"]") investigate_log("was turned [on ? "on" : "off"] by [key_name(user)]", INVESTIGATE_ATMOS) update_appearance() - return ..() + return CLICK_ACTION_BLOCKING + return CLICK_ACTION_SUCCESS /obj/machinery/atmospherics/components/unary/outlet_injector/click_alt(mob/user) if(volume_rate == MAX_TRANSFER_RATE) diff --git a/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm b/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm index 01def672bf7aa..2fe1a8e430fa1 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm @@ -313,19 +313,20 @@ update_appearance() -/obj/machinery/atmospherics/components/unary/thermomachine/CtrlClick(mob/living/user) +/obj/machinery/atmospherics/components/unary/thermomachine/click_ctrl(mob/user) if(!anchored) - return ..() + return NONE if(panel_open) balloon_alert(user, "close panel!") - return - if(!can_interact(user)) - return + return CLICK_ACTION_BLOCKING + if(!is_operational) + return CLICK_ACTION_BLOCKING on = !on balloon_alert(user, "turned [on ? "on" : "off"]") investigate_log("was turned [on ? "on" : "off"] by [key_name(user)]", INVESTIGATE_ATMOS) update_appearance() + return CLICK_ACTION_SUCCESS /obj/machinery/atmospherics/components/unary/thermomachine/update_layer() return diff --git a/code/modules/atmospherics/machinery/portable/canister.dm b/code/modules/atmospherics/machinery/portable/canister.dm index 6d4a8ad714a41..af13be0bbbf9b 100644 --- a/code/modules/atmospherics/machinery/portable/canister.dm +++ b/code/modules/atmospherics/machinery/portable/canister.dm @@ -35,7 +35,7 @@ ///Is shielding turned on/off var/shielding_powered = FALSE ///The powercell used to enable shielding - var/obj/item/stock_parts/cell/internal_cell + var/obj/item/stock_parts/power_store/internal_cell ///used while processing to update appearance only when its pressure state changes var/current_pressure_state @@ -52,7 +52,7 @@ . = ..() if(mapload) - internal_cell = new /obj/item/stock_parts/cell/high(src) + internal_cell = new /obj/item/stock_parts/power_store/cell/high(src) if(existing_mixture) air_contents.copy_from(existing_mixture) @@ -71,7 +71,6 @@ AddElement(/datum/element/atmos_sensitive, mapload) AddElement(/datum/element/volatile_gas_storage) AddComponent(/datum/component/gas_leaker, leak_rate=0.01) - register_context() /obj/machinery/portable_atmospherics/canister/interact(mob/user) . = ..() @@ -86,7 +85,7 @@ context[SCREENTIP_CONTEXT_ALT_LMB] = "Remove tank" if(!held_item) return CONTEXTUAL_SCREENTIP_SET - if(istype(held_item, /obj/item/stock_parts/cell)) + if(istype(held_item, /obj/item/stock_parts/power_store/cell)) context[SCREENTIP_CONTEXT_LMB] = "Insert cell" switch(held_item.tool_behaviour) if(TOOL_SCREWDRIVER) @@ -102,7 +101,10 @@ /obj/machinery/portable_atmospherics/canister/examine(user) . = ..() + if(atom_integrity < max_integrity) + . += span_notice("Integrity compromised, repair hull with a welding tool.") . += span_notice("A sticker on its side says MAX SAFE PRESSURE: [siunit_pressure(initial(pressure_limit), 0)]; MAX SAFE TEMPERATURE: [siunit(temp_limit, "K", 0)].") + . += span_notice("The hull is welded together and can be cut apart.") if(internal_cell) . += span_notice("The internal cell has [internal_cell.percent()]% of its total charge.") else @@ -365,8 +367,8 @@ internal_cell.forceMove(drop_location()) /obj/machinery/portable_atmospherics/canister/attackby(obj/item/item, mob/user, params) - if(istype(item, /obj/item/stock_parts/cell)) - var/obj/item/stock_parts/cell/active_cell = item + if(istype(item, /obj/item/stock_parts/power_store/cell)) + var/obj/item/stock_parts/power_store/cell/active_cell = item if(!panel_open) balloon_alert(user, "open hatch first!") return TRUE @@ -410,22 +412,6 @@ return ITEM_INTERACT_SUCCESS -/obj/machinery/portable_atmospherics/canister/welder_act(mob/living/user, obj/item/tool) - if(user.combat_mode) - return - if(atom_integrity >= max_integrity || (machine_stat & BROKEN) || !tool.tool_start_check(user, amount = 1)) - return ITEM_INTERACT_SUCCESS - - to_chat(user, span_notice("You begin repairing cracks in [src]...")) - while(tool.use_tool(src, user, 2.5 SECONDS, volume=40)) - atom_integrity = min(atom_integrity + 25, max_integrity) - if(atom_integrity >= max_integrity) - to_chat(user, span_notice("You've finished repairing [src].")) - return ITEM_INTERACT_SUCCESS - to_chat(user, span_notice("You repair some of the cracks in [src]...")) - - return ITEM_INTERACT_BLOCKING - /obj/machinery/portable_atmospherics/canister/Exited(atom/movable/gone, direction) . = ..() if(gone == internal_cell) @@ -475,18 +461,24 @@ user.investigate_log("started a transfer into [holding].", INVESTIGATE_ATMOS) /obj/machinery/portable_atmospherics/canister/process(seconds_per_tick) + if(!shielding_powered) + return + var/our_pressure = air_contents.return_pressure() var/our_temperature = air_contents.return_temperature() + var/energy_factor = round(log(10, max(our_pressure - pressure_limit, 1)) + log(10, max(our_temperature - temp_limit, 1))) + var/energy_consumed = energy_factor * 250 * seconds_per_tick - if(shielding_powered) - var/energy_factor = round(log(10, max(our_pressure - pressure_limit, 1)) + log(10, max(our_temperature - temp_limit, 1))) - var/energy_consumed = energy_factor * 250 * seconds_per_tick - if(powered(AREA_USAGE_EQUIP, ignore_use_power = TRUE)) - use_energy(energy_consumed, channel = AREA_USAGE_EQUIP) - else if(!internal_cell?.use(energy_consumed * 0.025)) - shielding_powered = FALSE - SSair.start_processing_machine(src) - investigate_log("shielding turned off due to power loss") + if(!energy_consumed) + return + + if(powered(AREA_USAGE_EQUIP, ignore_use_power = TRUE)) + use_energy(energy_consumed, channel = AREA_USAGE_EQUIP) + else if(!internal_cell?.use(energy_consumed * 0.025)) + shielding_powered = FALSE + SSair.start_processing_machine(src) + investigate_log("shielding turned off due to power loss") + update_appearance() ///return the icon_state component for the canister's indicator light based on its current pressure reading /obj/machinery/portable_atmospherics/canister/proc/get_pressure_state() diff --git a/code/modules/atmospherics/machinery/portable/pipe_scrubber.dm b/code/modules/atmospherics/machinery/portable/pipe_scrubber.dm new file mode 100644 index 0000000000000..cde38f216ad70 --- /dev/null +++ b/code/modules/atmospherics/machinery/portable/pipe_scrubber.dm @@ -0,0 +1,167 @@ +/obj/machinery/portable_atmospherics/pipe_scrubber + name = "pipe scrubber" + desc = "A machine for cleaning out pipes of lingering gases. It is a huge tank with a pump attached to it." + icon_state = "pipe_scrubber" + density = TRUE + max_integrity = 250 + volume = 200 + ///The internal air tank obj of the mech + var/obj/machinery/portable_atmospherics/canister/internal_tank + ///Is the machine on? + var/on = FALSE + ///What direction is the machine pumping to (into scrubber or out to the port)? + var/direction = PUMP_IN + ///the rate the machine will scrub air + var/volume_rate = 1000 + ///List of gases that can be scrubbed + var/list/scrubbing = list( + /datum/gas/plasma, + /datum/gas/carbon_dioxide, + /datum/gas/nitrous_oxide, + /datum/gas/bz, + /datum/gas/nitrium, + /datum/gas/tritium, + /datum/gas/hypernoblium, + /datum/gas/water_vapor, + /datum/gas/freon, + /datum/gas/hydrogen, + /datum/gas/healium, + /datum/gas/proto_nitrate, + /datum/gas/zauker, + /datum/gas/halon, + ) + +/obj/machinery/portable_atmospherics/pipe_scrubber/Initialize(mapload) + . = ..() + internal_tank = new(src) + RegisterSignal(internal_tank, COMSIG_ATOM_BREAK, PROC_REF(deconstruct)) + RegisterSignal(internal_tank, COMSIG_QDELETING, PROC_REF(deconstruct)) + +/obj/machinery/portable_atmospherics/pipe_scrubber/atom_deconstruct(disassembled) + . = ..() + var/turf/my_turf = get_turf(src) + my_turf.assume_air(air_contents) + my_turf.assume_air(internal_tank.air_contents) + SSair.stop_processing_machine(internal_tank) + qdel(internal_tank) + +/obj/machinery/portable_atmospherics/pipe_scrubber/return_analyzable_air() + return list( + air_contents, + internal_tank.air_contents + ) + +/obj/machinery/portable_atmospherics/pipe_scrubber/welder_act(mob/living/user, obj/item/tool) + internal_tank.welder_act(user, tool) + return ..() + +/obj/machinery/portable_atmospherics/pipe_scrubber/click_alt(mob/living/user) + return CLICK_ACTION_BLOCKING + +/obj/machinery/portable_atmospherics/pipe_scrubber/replace_tank(mob/living/user, close_valve, obj/item/tank/new_tank) + return FALSE + +/obj/machinery/portable_atmospherics/pipe_scrubber/update_icon_state() + icon_state = on ? "[initial(icon_state)]_active" : initial(icon_state) + return ..() + +/obj/machinery/portable_atmospherics/pipe_scrubber/process_atmos() + if(take_atmos_damage()) + excited = TRUE + return ..() + if(!on) + return ..() + excited = TRUE + if(direction == PUMP_IN) + scrub(air_contents) + else + internal_tank.air_contents.pump_gas_to(air_contents, PUMP_MAX_PRESSURE) + return ..() + +/// Scrub gasses from own air_contents into internal_tank.air_contents +/obj/machinery/portable_atmospherics/pipe_scrubber/proc/scrub() + if(internal_tank.air_contents.return_pressure() >= PUMP_MAX_PRESSURE) + return + + var/transfer_moles = min(1, volume_rate / air_contents.volume) * air_contents.total_moles() + + var/datum/gas_mixture/filtering = air_contents.remove(transfer_moles) // Remove part of the mixture to filter. + var/datum/gas_mixture/filtered = new + if(!filtering) + return + + filtered.temperature = filtering.temperature + for(var/gas in filtering.gases & scrubbing) + filtered.add_gas(gas) + filtered.gases[gas][MOLES] = filtering.gases[gas][MOLES] // Shuffle the "bad" gasses to the filtered mixture. + filtering.gases[gas][MOLES] = 0 + filtering.garbage_collect() // Now that the gasses are set to 0, clean up the mixture. + + internal_tank.air_contents.merge(filtered) // Store filtered out gasses. + air_contents.merge(filtering) // Returned the cleaned gas. + +/obj/machinery/portable_atmospherics/pipe_scrubber/ui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "PipeScrubber", name) + ui.open() + +/obj/machinery/portable_atmospherics/pipe_scrubber/ui_data() + var/data = list() + data["on"] = on + data["direction"] = direction + data["connected"] = connected_port ? 1 : 0 + data["pressureTank"] = round(internal_tank.air_contents.return_pressure() ? internal_tank.air_contents.return_pressure() : 0) + data["pressurePump"] = round(air_contents.return_pressure() ? air_contents.return_pressure() : 0) + data["hasHypernobCrystal"] = nob_crystal_inserted + data["reactionSuppressionEnabled"] = suppress_reactions + + data["filterTypes"] = list() + for(var/gas_path in GLOB.meta_gas_info) + var/list/gas = GLOB.meta_gas_info[gas_path] + data["filterTypes"] += list(list("gasId" = gas[META_GAS_ID], "gasName" = gas[META_GAS_NAME], "enabled" = (gas_path in scrubbing))) + + return data + +/obj/machinery/portable_atmospherics/pipe_scrubber/ui_static_data() + var/list/data = list() + data["pressureLimitPump"] = pressure_limit + data["pressureLimitTank"] = internal_tank.pressure_limit + return data + +/obj/machinery/portable_atmospherics/pipe_scrubber/ui_act(action, params) + . = ..() + if(.) + return + switch(action) + if("power") + on = !on + if(on) + SSair.start_processing_machine(src) + SSair.start_processing_machine(internal_tank) + . = TRUE + if("direction") + direction = !direction + . = TRUE + if("toggle_filter") + scrubbing ^= gas_id2path(params["val"]) + . = TRUE + if("reaction_suppression") + if(!internal_tank.nob_crystal_inserted) + message_admins("[ADMIN_LOOKUPFLW(usr)] tried to toggle reaction suppression on a pipe scrubber without a noblium crystal inside, possible href exploit attempt.") + return + internal_tank.suppress_reactions = !internal_tank.suppress_reactions + SSair.start_processing_machine(internal_tank) + message_admins("[ADMIN_LOOKUPFLW(usr)] turned [internal_tank.suppress_reactions ? "on" : "off"] the [internal_tank] reaction suppression.") + usr.investigate_log("turned [internal_tank.suppress_reactions ? "on" : "off"] the [internal_tank] reaction suppression.") + . = TRUE + update_appearance() + +/obj/machinery/portable_atmospherics/pipe_scrubber/insert_nob_crystal() + . = ..() + internal_tank.nob_crystal_inserted = TRUE + +/obj/machinery/portable_atmospherics/pipe_scrubber/proc/toggle_reaction_suppression() + var/new_value = !suppress_reactions + suppress_reactions = new_value + internal_tank.suppress_reactions = new_value diff --git a/code/modules/atmospherics/machinery/portable/portable_atmospherics.dm b/code/modules/atmospherics/machinery/portable/portable_atmospherics.dm index 3713958fbaa26..9729c0871451a 100644 --- a/code/modules/atmospherics/machinery/portable/portable_atmospherics.dm +++ b/code/modules/atmospherics/machinery/portable/portable_atmospherics.dm @@ -32,6 +32,9 @@ var/suppress_reactions = FALSE /// Is there a hypernoblium crystal inserted into this var/nob_crystal_inserted = FALSE + var/insert_sound = 'sound/effects/tank_insert_clunky.ogg' + var/remove_sound = 'sound/effects/tank_remove_thunk.ogg' + var/sound_vol = 50 /datum/armor/machinery_portable_atmospherics energy = 100 @@ -46,6 +49,7 @@ SSair.start_processing_machine(src) AddElement(/datum/element/climbable, climb_time = 3 SECONDS, climb_stun = 3 SECONDS) AddElement(/datum/element/elevation, pixel_shift = 8) + register_context() /obj/machinery/portable_atmospherics/on_deconstruction(disassembled) if(nob_crystal_inserted) @@ -84,6 +88,29 @@ return PROCESS_KILL excited = FALSE +/obj/machinery/portable_atmospherics/welder_act(mob/living/user, obj/item/tool) + if(user.combat_mode) + return ITEM_INTERACT_SKIP_TO_ATTACK + if(atom_integrity >= max_integrity || (machine_stat & BROKEN) || !tool.tool_start_check(user, amount = 1)) + return ITEM_INTERACT_BLOCKING + balloon_alert(user, "repairing...") + while(tool.use_tool(src, user, 2.5 SECONDS, volume=40)) + atom_integrity = min(atom_integrity + 25, max_integrity) + if(atom_integrity >= max_integrity) + balloon_alert(user, "repaired") + return ITEM_INTERACT_SUCCESS + balloon_alert(user, "partially repaired...") + + return ITEM_INTERACT_SUCCESS + +/obj/machinery/portable_atmospherics/add_context(atom/source, list/context, obj/item/held_item, mob/user) + . = ..() + if(!isliving(user) || !Adjacent(user)) + return . + if(held_item?.tool_behaviour == TOOL_WELDER) + context[SCREENTIP_CONTEXT_LMB] = "Repair" + return CONTEXTUAL_SCREENTIP_SET + /// Take damage if a variable is exceeded. Damage is equal to temp/limit * heat/limit. /// The damage multiplier is treated as 1 if something is being ignored while the other one is exceeded. /// On most cases only one will be exceeded, so the other one is scaled down. @@ -185,17 +212,33 @@ * * new_tank: the tank we are trying to put in the machine */ /obj/machinery/portable_atmospherics/proc/replace_tank(mob/living/user, close_valve, obj/item/tank/new_tank) + if(machine_stat & BROKEN) + return FALSE if(!user) return FALSE - if(holding) + if(!user.transferItemToLoc(new_tank, src)) + return FALSE + + investigate_log("had its internal [holding] swapped with [new_tank] by [key_name(user)].", INVESTIGATE_ATMOS) + to_chat(user, span_notice("[holding ? "In one smooth motion you pop [holding] out of [src]'s connector and replace it with [new_tank]" : "You insert [new_tank] into [src]"].")) + + if(holding && new_tank)//for when we are actually switching tanks + user.put_in_hands(holding) + UnregisterSignal(holding, COMSIG_QDELETING) + holding = new_tank + RegisterSignal(holding, COMSIG_QDELETING, PROC_REF(unregister_holding)) + playsound(src, list(insert_sound,remove_sound), sound_vol) + else if(holding)//we remove a tank if(Adjacent(user)) user.put_in_hands(holding) else holding.forceMove(get_turf(src)) + playsound(src, remove_sound, sound_vol) UnregisterSignal(holding, COMSIG_QDELETING) holding = null - if(new_tank) + else if(new_tank)//we insert the tank holding = new_tank + playsound(src, insert_sound, sound_vol) RegisterSignal(holding, COMSIG_QDELETING, PROC_REF(unregister_holding)) SSair.start_processing_machine(src) @@ -203,17 +246,9 @@ return TRUE /obj/machinery/portable_atmospherics/attackby(obj/item/item, mob/user, params) - if(!istype(item, /obj/item/tank)) - return ..() - if(machine_stat & BROKEN) - return FALSE - var/obj/item/tank/insert_tank = item - if(!user.transferItemToLoc(insert_tank, src)) - return FALSE - to_chat(user, span_notice("[holding ? "In one smooth motion you pop [holding] out of [src]'s connector and replace it with [insert_tank]" : "You insert [insert_tank] into [src]"].")) - investigate_log("had its internal [holding] swapped with [insert_tank] by [key_name(user)].", INVESTIGATE_ATMOS) - replace_tank(user, FALSE, insert_tank) - update_appearance() + if(istype(item, /obj/item/tank)) + return replace_tank(user, FALSE, item) + return ..() /obj/machinery/portable_atmospherics/wrench_act(mob/living/user, obj/item/wrench) if(machine_stat & BROKEN) @@ -260,4 +295,8 @@ UnregisterSignal(holding, COMSIG_QDELETING) holding = null +/// Insert Hypernob crystal into the machine +/obj/machinery/portable_atmospherics/proc/insert_nob_crystal() + nob_crystal_inserted = TRUE + #undef PORTABLE_ATMOS_IGNORE_ATMOS_LIMIT diff --git a/code/modules/atmospherics/machinery/portable/scrubber.dm b/code/modules/atmospherics/machinery/portable/scrubber.dm index 09c6c64709b9a..b292180683f88 100644 --- a/code/modules/atmospherics/machinery/portable/scrubber.dm +++ b/code/modules/atmospherics/machinery/portable/scrubber.dm @@ -1,16 +1,17 @@ /obj/machinery/portable_atmospherics/scrubber name = "portable air scrubber" + desc = "A portable variant of the station scrubbers, capable of filtering gas from the air around it or inserted tank. May also be wrenched into a port." icon_state = "scrubber" density = TRUE max_integrity = 250 - volume = 1000 + volume = 2000 ///Is the machine on? var/on = FALSE ///the rate the machine will scrub air - var/volume_rate = 1000 + var/volume_rate = 650 ///Multiplier with ONE_ATMOSPHERE, if the enviroment pressure is higher than that, the scrubber won't work - var/overpressure_m = 80 + var/overpressure_m = 100 ///Should the machine use overlay in update_overlays() when open/close? var/use_overlays = TRUE ///List of gases that can be scrubbed @@ -59,8 +60,15 @@ excited = TRUE - var/atom/target = holding || get_turf(src) - scrub(target.return_air()) + if(!isnull(holding)) + scrub(holding.return_air()) + return ..() + + var/turf/epicentre = get_turf(src) + if(isopenturf(epicentre)) + scrub(epicentre.return_air()) + for(var/turf/open/openturf as anything in epicentre.get_atmos_adjacent_turfs(alldir = TRUE)) + scrub(openturf.return_air()) return ..() /** @@ -68,28 +76,39 @@ * Arguments: * * mixture: the gas mixture to be scrubbed */ -/obj/machinery/portable_atmospherics/scrubber/proc/scrub(datum/gas_mixture/mixture) +/obj/machinery/portable_atmospherics/scrubber/proc/scrub(datum/gas_mixture/environment) if(air_contents.return_pressure() >= overpressure_m * ONE_ATMOSPHERE) return - var/transfer_moles = min(1, volume_rate / mixture.volume) * mixture.total_moles() + var/list/env_gases = environment.gases - var/datum/gas_mixture/filtering = mixture.remove(transfer_moles) // Remove part of the mixture to filter. - var/datum/gas_mixture/filtered = new - if(!filtering) - return + //contains all of the gas we're sucking out of the tile, gets put into our parent pipenet + var/datum/gas_mixture/filtered_out = new + var/list/filtered_gases = filtered_out.gases + filtered_out.temperature = environment.temperature - filtered.temperature = filtering.temperature - for(var/gas in filtering.gases & scrubbing) - filtered.add_gas(gas) - filtered.gases[gas][MOLES] = filtering.gases[gas][MOLES] // Shuffle the "bad" gasses to the filtered mixture. - filtering.gases[gas][MOLES] = 0 - filtering.garbage_collect() // Now that the gasses are set to 0, clean up the mixture. + //maximum percentage of the turfs gas we can filter + var/removal_ratio = min(1, volume_rate / environment.volume) - air_contents.merge(filtered) // Store filtered out gasses. - mixture.merge(filtering) // Returned the cleaned gas. - if(!holding) - air_update_turf(FALSE, FALSE) + var/total_moles_to_remove = 0 + for(var/gas in scrubbing & env_gases) + total_moles_to_remove += env_gases[gas][MOLES] + + if(total_moles_to_remove == 0)//sometimes this gets non gc'd values + environment.garbage_collect() + return FALSE + + for(var/gas in scrubbing & env_gases) + filtered_out.add_gas(gas) + var/transferred_moles = max(QUANTIZE(env_gases[gas][MOLES] * removal_ratio * (env_gases[gas][MOLES] / total_moles_to_remove)), min(MOLAR_ACCURACY*1000, env_gases[gas][MOLES])) + + filtered_gases[gas][MOLES] = transferred_moles + env_gases[gas][MOLES] -= transferred_moles + + environment.garbage_collect() + + //Remix the resulting gases + air_contents.merge(filtered_out) /obj/machinery/portable_atmospherics/scrubber/emp_act(severity) . = ..() diff --git a/code/modules/autowiki/pages/soup.dm b/code/modules/autowiki/pages/soup.dm index 75521005d8e88..f67d00e97a057 100644 --- a/code/modules/autowiki/pages/soup.dm +++ b/code/modules/autowiki/pages/soup.dm @@ -27,6 +27,7 @@ var/result_name var/result_desc var/result_tastes + var/result_soup_type // Solid food item results take priority over reagents for showcasing results if(soup_recipe.resulting_food_path) var/obj/item/resulting_food = new soup_recipe.resulting_food_path() @@ -45,7 +46,7 @@ // Otherwise, it should be a reagent. else - var/result_soup_type = soup_recipe.results[1] + result_soup_type = soup_recipe.results[1] var/datum/reagent/result_soup = new result_soup_type() result_name = format_text(result_soup.name) result_desc = result_soup.description @@ -122,8 +123,14 @@ template_list["results"] = escape_value(compiled_results) // -- While we're here, generate an icon of the bowl -- - var/image/compiled_image = image(icon = soup_icon, icon_state = soup_icon_state) - upload_icon(getFlatIcon(compiled_image, no_anim = TRUE), filename) + if(!soup_icon_state) + var/obj/item/reagent_containers/cup/bowl/soup_bowl = new() + soup_bowl.reagents.add_reagent(result_soup_type, soup_bowl.reagents.maximum_volume) + upload_icon(getFlatIcon(soup_bowl, no_anim = TRUE), filename) + qdel(soup_bowl) + else + var/image/compiled_image = image(icon = soup_icon, icon_state = soup_icon_state) + upload_icon(getFlatIcon(compiled_image, no_anim = TRUE), filename) // -- Cleanup -- qdel(soup_recipe) diff --git a/code/modules/autowiki/pages/stockparts.dm b/code/modules/autowiki/pages/stockparts.dm index fd92ecfaef476..7d2b68b236b23 100644 --- a/code/modules/autowiki/pages/stockparts.dm +++ b/code/modules/autowiki/pages/stockparts.dm @@ -3,11 +3,16 @@ page = "Template:Autowiki/Content/StockParts" var/list/battery_whitelist = list( - /obj/item/stock_parts/cell, - /obj/item/stock_parts/cell/high, - /obj/item/stock_parts/cell/super, - /obj/item/stock_parts/cell/hyper, - /obj/item/stock_parts/cell/bluespace, + /obj/item/stock_parts/power_store/cell, + /obj/item/stock_parts/power_store/cell/high, + /obj/item/stock_parts/power_store/cell/super, + /obj/item/stock_parts/power_store/cell/hyper, + /obj/item/stock_parts/power_store/cell/bluespace, + /obj/item/stock_parts/power_store/battery, + /obj/item/stock_parts/power_store/battery/high, + /obj/item/stock_parts/power_store/battery/super, + /obj/item/stock_parts/power_store/battery/hyper, + /obj/item/stock_parts/power_store/battery/bluespace, ) /datum/autowiki/stock_parts/generate() @@ -18,7 +23,7 @@ if(initial(type_to_check.abstract_type) == part_type) continue - if(!battery_whitelist.Find(part_type) && ispath(part_type, /obj/item/stock_parts/cell)) + if(!battery_whitelist.Find(part_type) && ispath(part_type, /obj/item/stock_parts/power_store)) continue var/obj/item/stock_parts/stock_part = new part_type() diff --git a/code/modules/awaymissions/gateway.dm b/code/modules/awaymissions/gateway.dm index 72cb8982d3436..e32db92339991 100644 --- a/code/modules/awaymissions/gateway.dm +++ b/code/modules/awaymissions/gateway.dm @@ -22,6 +22,7 @@ GLOBAL_LIST_EMPTY(gateway_destinations) /datum/gateway_destination/proc/get_available_reason() . = "Unreachable" if(world.time - SSticker.round_start_time < wait) + playsound(src, 'sound/effects/gateway_calibrating.ogg', 80, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) . = "Connection desynchronized. Recalibration in progress." /* Check if the movable is allowed to arrive at this destination (exile implants mostly) */ @@ -85,11 +86,11 @@ GLOBAL_LIST_EMPTY(gateway_destinations) . = "Exit gateway unpowered." /datum/gateway_destination/gateway/get_target_turf() - return get_step(target_gateway.portal,SOUTH) + return get_step(target_gateway.portal, target_gateway.dir) /datum/gateway_destination/gateway/post_transfer(atom/movable/AM) . = ..() - addtimer(CALLBACK(AM, TYPE_PROC_REF(/atom/movable, setDir),SOUTH),0) + addtimer(CALLBACK(AM, TYPE_PROC_REF(/atom/movable, setDir), target_gateway.dir),0) /* Special home destination, so we can check exile implants */ /datum/gateway_destination/gateway/home @@ -133,7 +134,8 @@ GLOBAL_LIST_EMPTY(gateway_destinations) invisibility = INVISIBILITY_ABSTRACT /obj/effect/gateway_portal_bumper/Bumped(atom/movable/AM) - if(get_dir(src,AM) == SOUTH) + if(get_dir(src,AM) == gateway?.dir) + playsound(src, 'sound/effects/gateway_travel.ogg', 70, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) gateway.Transfer(AM) /obj/effect/gateway_portal_bumper/Destroy(force) @@ -198,6 +200,7 @@ GLOBAL_LIST_EMPTY(gateway_destinations) /obj/machinery/gateway/proc/deactivate() var/datum/gateway_destination/dest = target target = null + playsound(src, 'sound/effects/gateway_close.ogg', 140, TRUE, TRUE, SOUND_RANGE) dest.deactivate(src) QDEL_NULL(portal) update_use_power(IDLE_POWER_USE) @@ -260,6 +263,7 @@ GLOBAL_LIST_EMPTY(gateway_destinations) target.activate(destination) portal_visuals.setup_visuals(target) transport_active = TRUE + playsound(src, 'sound/effects/gateway_open.ogg', 140, TRUE, TRUE, SOUND_RANGE) generate_bumper() update_use_power(ACTIVE_POWER_USE) update_appearance() @@ -302,6 +306,7 @@ GLOBAL_LIST_EMPTY(gateway_destinations) if(calibrated) to_chat(user, span_alert("The gate is already calibrated, there is no work for you to do here.")) else + playsound(src, 'sound/effects/gateway_calibrated.ogg', 80, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) to_chat(user, "[span_boldnotice("Recalibration successful!")]: \black This gate's systems have been fine tuned. Travel to this gate will now be on target.") calibrated = TRUE return TRUE diff --git a/code/modules/awaymissions/signpost.dm b/code/modules/awaymissions/signpost.dm index 864b4fa03f869..3c0fba8783656 100644 --- a/code/modules/awaymissions/signpost.dm +++ b/code/modules/awaymissions/signpost.dm @@ -17,7 +17,7 @@ if(.) return if(tgui_alert(usr,question,name,list("Yes","No")) == "Yes" && Adjacent(user)) - var/turf/T = find_safe_turf(zlevels=zlevels) + var/turf/T = zlevels ? find_safe_turf(zlevels=zlevels) : get_safe_random_station_turf() if(T) var/atom/movable/AM = user.pulling diff --git a/code/modules/basketball/basketball.dm b/code/modules/basketball/basketball.dm index 77c3214fe569a..35579dc448282 100644 --- a/code/modules/basketball/basketball.dm +++ b/code/modules/basketball/basketball.dm @@ -173,31 +173,37 @@ user.swap_hand(user.get_held_index_of_item(src)) playsound(src, 'sound/items/basketball_bounce.ogg', 75, FALSE) -/obj/item/toy/basketball/afterattack(atom/target, mob/living/user) - . = ..() - if(!user.combat_mode) - user.throw_item(target) +/obj/item/toy/basketball/ranged_interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + return interact_with_atom(interacting_with, user, modifiers) + +/obj/item/toy/basketball/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + if(user.combat_mode) + user.throw_item(interacting_with) + return ITEM_INTERACT_SUCCESS + return NONE + +/obj/item/toy/basketball/ranged_interact_with_atom_secondary(atom/interacting_with, mob/living/user, list/modifiers) + return interact_with_atom_secondary(interacting_with, user, modifiers) -/obj/item/toy/basketball/afterattack_secondary(atom/aim_target, mob/living/baller, proximity_flag, click_parameters) - // dunking negates shooting - if(istype(aim_target, /obj/structure/hoop) && baller.Adjacent(aim_target)) - return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN +/obj/item/toy/basketball/interact_with_atom_secondary(atom/interacting_with, mob/living/baller, list/modifiers) + if(istype(interacting_with, /obj/structure/hoop) && baller.Adjacent(interacting_with)) + return NONE // Do hoop stuff baller.adjustStaminaLoss(STAMINA_COST_SHOOTING) - var/dunk_dir = get_dir(baller, aim_target) + var/dunk_dir = get_dir(baller, interacting_with) var/dunk_pixel_y = dunk_dir & SOUTH ? -16 : 16 var/dunk_pixel_x = dunk_dir & EAST && 16 || dunk_dir & WEST && -16 || 0 animate(baller, pixel_x = dunk_pixel_x, pixel_y = dunk_pixel_y, time = 5, easing = BOUNCE_EASING|EASE_IN|EASE_OUT) if(do_after(baller, 0.5 SECONDS)) pass_flags |= PASSMOB - baller.throw_item(aim_target) + baller.throw_item(interacting_with) animate(baller, pixel_x = 0, pixel_y = 0, time = 3) - return SECONDARY_ATTACK_CONTINUE_CHAIN + return ITEM_INTERACT_SUCCESS animate(baller, pixel_x = 0, pixel_y = 0, time = 3) - return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN + return ITEM_INTERACT_BLOCKING /obj/item/toy/basketball/throw_impact(mob/living/carbon/target, datum/thrownthing/throwingdatum) playsound(src, 'sound/items/basketball_bounce.ogg', 75, FALSE) diff --git a/code/modules/basketball/hoop.dm b/code/modules/basketball/hoop.dm index b26fa462b0999..72669df017d90 100644 --- a/code/modules/basketball/hoop.dm +++ b/code/modules/basketball/hoop.dm @@ -17,6 +17,7 @@ anchored = TRUE density = TRUE layer = ABOVE_MOB_LAYER + interaction_flags_click = NEED_DEXTERITY | NEED_HANDS | FORBID_TELEKINESIS_REACH /// Keeps track of the total points scored var/total_score = 0 /// The chance to score a ball into the hoop based on distance @@ -133,16 +134,13 @@ baller.adjustStaminaLoss(STAMINA_COST_DUNKING_MOB) baller.stop_pulling() -/obj/structure/hoop/CtrlClick(mob/living/user) - if(!user.can_perform_action(src, NEED_DEXTERITY|FORBID_TELEKINESIS_REACH|NEED_HANDS)) - return - +/obj/structure/hoop/click_ctrl(mob/user) user.balloon_alert_to_viewers("resetting score...") playsound(src, 'sound/machines/locktoggle.ogg', 50, TRUE) if(do_after(user, 5 SECONDS, target = src)) total_score = 0 update_appearance() - return ..() + return CLICK_ACTION_SUCCESS /obj/structure/hoop/hitby(atom/movable/AM, skipcatch, hitpush, blocked, datum/thrownthing/throwingdatum) if(!isitem(AM)) @@ -182,8 +180,8 @@ return NONE // No resetting the score for minigame hoops -/obj/structure/hoop/minigame/CtrlClick(mob/living/user) - return +/obj/structure/hoop/minigame/click_ctrl(mob/user) + return CLICK_ACTION_BLOCKING /obj/structure/hoop/minigame/score(obj/item/toy/basketball/ball, mob/living/baller, points) var/is_team_hoop = !(baller.ckey in team_ckeys) diff --git a/code/modules/bitrunning/antagonists/_parent.dm b/code/modules/bitrunning/antagonists/_parent.dm index a6fc71b4e4291..8bd061d72a1df 100644 --- a/code/modules/bitrunning/antagonists/_parent.dm +++ b/code/modules/bitrunning/antagonists/_parent.dm @@ -60,13 +60,33 @@ return TRUE + /// Sets up the agent so that they look like cyber police && don't have an account ID -/datum/antagonist/bitrunning_glitch/proc/convert_agent(mob/living/carbon/human/player, datum/outfit/agent_outfit) +/datum/antagonist/bitrunning_glitch/proc/convert_agent() + if(!ishuman(owner.current)) + return + + var/mob/living/carbon/human/player = owner.current + player.set_service_style() - player.equipOutfit(agent_outfit) + player.equipOutfit(preview_outfit) player.fully_replace_character_name(player.name, pick(GLOB.cyberauth_names)) + fix_agent_id() + + +/// Resets the agent's ID and name. Needed so this doesn't show as "unknown" +/datum/antagonist/bitrunning_glitch/proc/fix_agent_id() + if(!ishuman(owner.current)) + return + + var/mob/living/carbon/human/player = owner.current var/obj/item/card/id/outfit_id = player.wear_id - if(outfit_id) - outfit_id.registered_account = new() - outfit_id.registered_account.replaceable = FALSE + if(isnull(outfit_id)) + return + + outfit_id.registered_account = new() + outfit_id.registered_account.replaceable = FALSE + outfit_id.registered_account.account_id = null + outfit_id.registered_name = player.name + outfit_id.update_label() diff --git a/code/modules/bitrunning/antagonists/cyber_police.dm b/code/modules/bitrunning/antagonists/cyber_police.dm index e6b7cc37cfdcf..bb137607ec423 100644 --- a/code/modules/bitrunning/antagonists/cyber_police.dm +++ b/code/modules/bitrunning/antagonists/cyber_police.dm @@ -9,11 +9,10 @@ stack_trace("humans only for this position") return - var/mob/living/player = owner.current - convert_agent(player, /datum/outfit/cyber_police) + convert_agent() var/datum/martial_art/the_sleeping_carp/carp = new() - carp.teach(player) + carp.teach(owner.current) /datum/outfit/cyber_police name = ROLE_CYBER_POLICE diff --git a/code/modules/bitrunning/antagonists/cyber_tac.dm b/code/modules/bitrunning/antagonists/cyber_tac.dm index 4df44563ce67c..a45fdb345d304 100644 --- a/code/modules/bitrunning/antagonists/cyber_tac.dm +++ b/code/modules/bitrunning/antagonists/cyber_tac.dm @@ -11,7 +11,7 @@ stack_trace("humans only for this position") return - convert_agent(owner.current, /datum/outfit/cyber_police/tactical) + convert_agent() /datum/outfit/cyber_police/tactical name = ROLE_CYBER_TAC @@ -29,80 +29,3 @@ var/obj/item/implant/weapons_auth/auth = new(user) auth.implant(user) - -/obj/item/mod/control/pre_equipped/glitch - theme = /datum/mod_theme/glitch - applied_cell = /obj/item/stock_parts/cell/bluespace - applied_modules = list( - /obj/item/mod/module/storage, - /obj/item/mod/module/magnetic_harness, - /obj/item/mod/module/jetpack/advanced, - /obj/item/mod/module/jump_jet, - /obj/item/mod/module/flashlight, - ) - default_pins = list( - /obj/item/mod/module/armor_booster, - /obj/item/mod/module/jetpack/advanced, - /obj/item/mod/module/jump_jet, - ) - starting_frequency = null - -/datum/armor/mod_theme_glitch - melee = 15 - bullet = 20 - laser = 35 - bomb = 65 - bio = 100 - fire = 100 - acid = 100 - wound = 100 - -/datum/mod_theme/glitch - name = "glitch" - desc = "A modsuit outfitted for elite Cyber Authority units to track, capture, and eliminate organic intruders." - extended_desc = "The Cyber Authority function as a digital police force, patrolling the digital realm and enforcing the law. Cyber Tac units are the elite of the elite, outfitted with lethal weaponry and fast mobility specially designed to quell organic uprisings." - default_skin = "glitch" - armor_type = /datum/armor/mod_theme_glitch - resistance_flags = FIRE_PROOF|ACID_PROOF - atom_flags = PREVENT_CONTENTS_EXPLOSION_1 - max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT - complexity_max = DEFAULT_MAX_COMPLEXITY + 3 - siemens_coefficient = 0 - slowdown_inactive = 1 - slowdown_active = 0.5 - ui_theme = "terminal" - inbuilt_modules = list(/obj/item/mod/module/armor_booster) - allowed_suit_storage = list( - /obj/item/ammo_box, - /obj/item/ammo_casing, - /obj/item/restraints/handcuffs, - /obj/item/assembly/flash, - ) - skins = list( - "glitch" = list( - HELMET_FLAGS = list( - UNSEALED_LAYER = null, - UNSEALED_CLOTHING = SNUG_FIT, - SEALED_CLOTHING = THICKMATERIAL|STOPSPRESSUREDAMAGE|BLOCK_GAS_SMOKE_EFFECT|HEADINTERNALS, - UNSEALED_INVISIBILITY = HIDEFACIALHAIR, - SEALED_INVISIBILITY = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDESNOUT, - SEALED_COVER = HEADCOVERSMOUTH|HEADCOVERSEYES|PEPPERPROOF, - ), - CHESTPLATE_FLAGS = list( - UNSEALED_CLOTHING = THICKMATERIAL, - SEALED_CLOTHING = STOPSPRESSUREDAMAGE, - SEALED_INVISIBILITY = HIDEJUMPSUIT, - ), - GAUNTLETS_FLAGS = list( - UNSEALED_CLOTHING = THICKMATERIAL, - SEALED_CLOTHING = STOPSPRESSUREDAMAGE, - CAN_OVERSLOT = TRUE, - ), - BOOTS_FLAGS = list( - UNSEALED_CLOTHING = THICKMATERIAL, - SEALED_CLOTHING = STOPSPRESSUREDAMAGE, - CAN_OVERSLOT = TRUE, - ), - ), - ) - diff --git a/code/modules/bitrunning/antagonists/ghost_role.dm b/code/modules/bitrunning/antagonists/ghost_role.dm new file mode 100644 index 0000000000000..3bf88e16dfb21 --- /dev/null +++ b/code/modules/bitrunning/antagonists/ghost_role.dm @@ -0,0 +1,22 @@ +/datum/antagonist/domain_ghost_actor + name = "Virtual Domain Actor" + antagpanel_category = ANTAG_GROUP_GLITCH + job_rank = ROLE_GLITCH + show_to_ghosts = TRUE + suicide_cry = "FATAL ERROR" + ui_name = "AntagInfoGlitch" + +/datum/antagonist/domain_ghost_actor/on_gain() + . = ..() + owner.current.AddComponent(/datum/component/npc_friendly) //Just in case + forge_objectives() + +/datum/antagonist/domain_ghost_actor/forge_objectives() + var/datum/objective/bitrunner_ghost_fluff/objective = new() + objective.owner = owner + objectives += objective + +/datum/objective/bitrunner_ghost_fluff + +/datum/objective/bitrunner_ghost_fluff/New() + explanation_text = "Defend your domain from the intruders!" diff --git a/code/modules/bitrunning/antagonists/netguardian.dm b/code/modules/bitrunning/antagonists/netguardian.dm index 39d646753345e..f0ea7822985f4 100644 --- a/code/modules/bitrunning/antagonists/netguardian.dm +++ b/code/modules/bitrunning/antagonists/netguardian.dm @@ -45,12 +45,17 @@ speech_span = SPAN_ROBOT death_message = "malfunctions!" + lighting_cutoff_red = 30 + lighting_cutoff_green = 5 + lighting_cutoff_blue = 20 + habitable_atmos = null minimum_survivable_temperature = TCMB ai_controller = /datum/ai_controller/basic_controller/netguardian /mob/living/basic/netguardian/Initialize(mapload) . = ..() + ADD_TRAIT(src, TRAIT_NO_FLOATING_ANIM, INNATE_TRAIT) AddComponent(/datum/component/ranged_attacks, \ casing_type = /obj/item/ammo_casing/c46x30mm, \ projectile_sound = 'sound/weapons/gun/smg/shot.ogg', \ @@ -62,12 +67,19 @@ ai_controller.set_blackboard_key(BB_NETGUARDIAN_ROCKET_ABILITY, rockets) AddElement(/datum/element/simple_flying) + update_appearance(UPDATE_OVERLAYS) /mob/living/basic/netguardian/death(gibbed) do_sparks(number = 3, cardinal_only = TRUE, source = src) playsound(src, 'sound/mecha/weapdestr.ogg', 100) return ..() +/mob/living/basic/netguardian/update_overlays() + . = ..() + if (stat == DEAD) + return + . += emissive_appearance(icon, "netguardian_emissive", src) + /datum/action/cooldown/mob_cooldown/projectile_attack/rapid_fire/netguardian name = "2E Rocket Launcher" button_icon = 'icons/obj/weapons/guns/ammo.dmi' @@ -82,9 +94,11 @@ playsound(player, 'sound/mecha/skyfall_power_up.ogg', 120) player.say("target acquired.", "machine") - var/mutable_appearance/scan_effect = mutable_appearance('icons/mob/nonhuman-player/netguardian.dmi', "scan") - var/mutable_appearance/rocket_effect = mutable_appearance('icons/mob/nonhuman-player/netguardian.dmi', "rockets") - var/list/overlays = list(scan_effect, rocket_effect) + var/overlay_icon = 'icons/mob/nonhuman-player/netguardian.dmi' + var/list/overlays = list() + overlays += mutable_appearance(overlay_icon, "scan") + overlays += mutable_appearance(overlay_icon, "rockets") + overlays += emissive_appearance(overlay_icon, "scan", player) player.add_overlay(overlays) StartCooldown() diff --git a/code/modules/bitrunning/areas.dm b/code/modules/bitrunning/areas.dm index 8ac07bcc8f2de..720bf0f1e5d2c 100644 --- a/code/modules/bitrunning/areas.dm +++ b/code/modules/bitrunning/areas.dm @@ -14,7 +14,7 @@ name = "Virtual Domain Ruins" icon_state = "bit_ruin" icon = 'icons/area/areas_station.dmi' - area_flags = UNIQUE_AREA | NOTELEPORT | ABDUCTOR_PROOF | EVENT_PROTECTED | HIDDEN_AREA + area_flags = UNIQUE_AREA | NOTELEPORT | EVENT_PROTECTED | HIDDEN_AREA has_gravity = STANDARD_GRAVITY requires_power = FALSE @@ -26,7 +26,7 @@ /area/virtual_domain/safehouse name = "Virtual Domain Safehouse" - area_flags = UNIQUE_AREA | NOTELEPORT | ABDUCTOR_PROOF | EVENT_PROTECTED + area_flags = UNIQUE_AREA | NOTELEPORT | EVENT_PROTECTED | VIRTUAL_SAFE_AREA icon_state = "bit_safe" requires_power = FALSE sound_environment = SOUND_ENVIRONMENT_ROOM @@ -36,16 +36,26 @@ /area/lavaland/surface/outdoors/virtual_domain name = "Virtual Domain Lava Ruins" icon_state = "bit_ruin" - area_flags = UNIQUE_AREA | NOTELEPORT | ABDUCTOR_PROOF | EVENT_PROTECTED | HIDDEN_AREA + area_flags = UNIQUE_AREA | NOTELEPORT | EVENT_PROTECTED | HIDDEN_AREA /area/icemoon/underground/explored/virtual_domain name = "Virtual Domain Ice Ruins" icon_state = "bit_ice" - area_flags = UNIQUE_AREA | NOTELEPORT | ABDUCTOR_PROOF | EVENT_PROTECTED | HIDDEN_AREA + area_flags = UNIQUE_AREA | NOTELEPORT | EVENT_PROTECTED | HIDDEN_AREA /area/ruin/space/has_grav/powered/virtual_domain name = "Virtual Domain Space Ruins" icon = 'icons/area/areas_station.dmi' icon_state = "bit_space" - area_flags = UNIQUE_AREA | NOTELEPORT | ABDUCTOR_PROOF | EVENT_PROTECTED | HIDDEN_AREA + area_flags = UNIQUE_AREA | NOTELEPORT | EVENT_PROTECTED | HIDDEN_AREA +///Areas that virtual entities should not be in + +/area/virtual_domain/protected_space + name = "Virtual Domain Safe Zone" + area_flags = UNIQUE_AREA | NOTELEPORT | EVENT_PROTECTED | VIRTUAL_SAFE_AREA + icon_state = "bit_safe" + +/area/virtual_domain/protected_space/fullbright + static_lighting = FALSE + base_lighting_alpha = 255 diff --git a/code/modules/bitrunning/components/avatar_connection.dm b/code/modules/bitrunning/components/avatar_connection.dm index 275332cfc12ef..a92e8ef3d2e6e 100644 --- a/code/modules/bitrunning/components/avatar_connection.dm +++ b/code/modules/bitrunning/components/avatar_connection.dm @@ -60,9 +60,16 @@ var/datum/action/avatar_domain_info/action = new(help_datum) action.Grant(avatar) - avatar.playsound_local(avatar, "sound/magic/blink.ogg", 25, TRUE) + var/client/our_client = old_body.client + var/alias = our_client?.prefs?.read_preference(/datum/preference/name/hacker_alias) || pick(GLOB.hacker_aliases) + + if(alias && avatar.real_name != alias) + avatar.fully_replace_character_name(avatar.real_name, alias) + + avatar.playsound_local(avatar, 'sound/magic/blink.ogg', 25, TRUE) avatar.set_static_vision(2 SECONDS) - avatar.set_temp_blindness(1 SECONDS) + avatar.set_temp_blindness(1 SECONDS) // I'm in + /datum/component/avatar_connection/PostTransfer() var/obj/machinery/netpod/pod = netpod_ref?.resolve() @@ -74,6 +81,7 @@ pod.avatar_ref = WEAKREF(parent) + /datum/component/avatar_connection/RegisterWithParent() ADD_TRAIT(parent, TRAIT_TEMPORARY_BODY, REF(src)) /** @@ -87,6 +95,7 @@ RegisterSignal(parent, COMSIG_LIVING_DEATH, PROC_REF(on_sever_connection)) RegisterSignal(parent, COMSIG_MOB_APPLY_DAMAGE, PROC_REF(on_linked_damage)) + /datum/component/avatar_connection/UnregisterFromParent() REMOVE_TRAIT(parent, TRAIT_TEMPORARY_BODY, REF(src)) UnregisterSignal(parent, list( @@ -98,6 +107,7 @@ COMSIG_MOB_APPLY_DAMAGE, )) + /// Disconnects the avatar and returns the mind to the old_body. /datum/component/avatar_connection/proc/full_avatar_disconnect(cause_damage = FALSE, datum/source) #ifndef UNIT_TESTS @@ -115,6 +125,7 @@ qdel(src) + /// Triggers whenever the server gets a loot crate pushed to goal area /datum/component/avatar_connection/proc/on_domain_completed(datum/source, atom/entered) SIGNAL_HANDLER @@ -127,6 +138,7 @@ new_master = entered, ) + /// Transfers damage from the avatar to the old_body /datum/component/avatar_connection/proc/on_linked_damage(datum/source, damage, damage_type, def_zone, blocked, ...) SIGNAL_HANDLER @@ -147,6 +159,7 @@ if(old_body.stat > SOFT_CRIT) // KO! full_avatar_disconnect(cause_damage = TRUE) + /// Handles minds being swapped around in subsequent avatars /datum/component/avatar_connection/proc/on_mind_transfer(datum/mind/source, mob/living/previous_body) SIGNAL_HANDLER @@ -157,6 +170,7 @@ source.current.TakeComponent(src) + /// Triggers when someone starts prying open our netpod /datum/component/avatar_connection/proc/on_netpod_crowbar(datum/source, mob/living/intruder) SIGNAL_HANDLER @@ -171,6 +185,7 @@ alert.name = "Netpod Breached" alert.desc = "Someone is prying open the netpod. Find an exit." + /// Triggers when the netpod is taking damage and is under 50% /datum/component/avatar_connection/proc/on_netpod_damaged(datum/source) SIGNAL_HANDLER @@ -184,24 +199,28 @@ alert.name = "Integrity Compromised" alert.desc = "The netpod is damaged. Find an exit." + //if your bitrunning avatar somehow manages to acquire and consume a red pill, they will be ejected from the Matrix /datum/component/avatar_connection/proc/disconnect_if_red_pill(datum/source, obj/item/reagent_containers/pill/pill, mob/feeder) SIGNAL_HANDLER if(pill.icon_state == "pill4") full_avatar_disconnect() + /// Triggers when a safe disconnect is called /datum/component/avatar_connection/proc/on_safe_disconnect(datum/source) SIGNAL_HANDLER full_avatar_disconnect() + /// Received message to sever connection /datum/component/avatar_connection/proc/on_sever_connection(datum/source) SIGNAL_HANDLER full_avatar_disconnect(cause_damage = TRUE, source = source) + /// Triggers when the server is shutting down /datum/component/avatar_connection/proc/on_shutting_down(datum/source, mob/living/hackerman) SIGNAL_HANDLER @@ -216,6 +235,7 @@ alert.name = "Domain Rebooting" alert.desc = "The domain is rebooting. Find an exit." + /// Triggers whenever an antag steps onto an exit turf and the server is emagged /datum/component/avatar_connection/proc/on_station_spawn(datum/source) SIGNAL_HANDLER @@ -230,6 +250,7 @@ alert.name = "Security Breach" alert.desc = "A hostile entity is breaching the safehouse. Find an exit." + /// Server has spawned a ghost role threat /datum/component/avatar_connection/proc/on_threat_created(datum/source) SIGNAL_HANDLER @@ -243,6 +264,7 @@ alert.name = "Threat Detected" alert.desc = "Data stream abnormalities present." + /// Returns the mind to the old body /datum/component/avatar_connection/proc/return_to_old_body() var/datum/mind/old_mind = old_mind_ref?.resolve() diff --git a/code/modules/bitrunning/components/bitrunning_points.dm b/code/modules/bitrunning/components/bitrunning_points.dm index 328a70679e653..ea8f63f76d8df 100644 --- a/code/modules/bitrunning/components/bitrunning_points.dm +++ b/code/modules/bitrunning/components/bitrunning_points.dm @@ -5,6 +5,7 @@ /// A special condition limits this from spawning a crate var/points_received = 0 + /datum/component/bitrunning_points/Initialize(datum/lazy_template/virtual_domain/domain) . = ..() if(!isturf(parent)) @@ -12,6 +13,7 @@ RegisterSignal(domain, COMSIG_BITRUNNER_GOAL_POINT, PROC_REF(on_add_points)) + /// Listens for points to be added which will eventually spawn a crate. /datum/component/bitrunning_points/proc/on_add_points(datum/source, points_to_add) SIGNAL_HANDLER @@ -23,12 +25,14 @@ reveal() + /// Spawns the crate with some effects /datum/component/bitrunning_points/proc/reveal() playsound(src, 'sound/magic/blink.ogg', 50, TRUE) var/turf/tile = parent - new /obj/structure/closet/crate/secure/bitrunning/encrypted(tile) + var/obj/structure/closet/crate/secure/bitrunning/encrypted/crate = new() + crate.forceMove(tile) // Triggers any on-move effects on that turf var/datum/effect_system/spark_spread/quantum/sparks = new(tile) sparks.set_up(number = 5, location = tile) diff --git a/code/modules/bitrunning/components/virtual_entity.dm b/code/modules/bitrunning/components/virtual_entity.dm new file mode 100644 index 0000000000000..db81f376a8094 --- /dev/null +++ b/code/modules/bitrunning/components/virtual_entity.dm @@ -0,0 +1,38 @@ +/// Handles all special considerations for "virtual entities" such as bitrunning ghost roles or digital anomaly antagonists. +/datum/component/virtual_entity + ///The cooldown for balloon alerts, so the player isn't spammed while trying to enter a restricted area. + COOLDOWN_DECLARE(OOB_cooldown) + +/datum/component/virtual_entity/Initialize(obj/machinery/quantum_server) + . = ..() + + if(quantum_server.obj_flags & EMAGGED) + jailbreak_mobs() //This just sends a message and self-deletes, a bit messy but it works. + return + + RegisterSignal(parent, COMSIG_MOVABLE_PRE_MOVE, PROC_REF(on_parent_pre_move)) + RegisterSignal(quantum_server, COMSIG_ATOM_EMAG_ACT, PROC_REF(jailbreak_mobs)) + +///Prevents entry to a certain area if it has flags preventing virtual entities from entering. +/datum/component/virtual_entity/proc/on_parent_pre_move(atom/movable/source, atom/new_location) + SIGNAL_HANDLER + + var/area/location_area = get_area(new_location) + if(!location_area) + stack_trace("Virtual entity entered a location with no area!") + return + + if(location_area.area_flags & VIRTUAL_SAFE_AREA) + source.balloon_alert(source, "out of bounds!") + COOLDOWN_START(src, OOB_cooldown, 2 SECONDS) + return COMPONENT_MOVABLE_BLOCK_PRE_MOVE + +///Self-destructs the component, allowing free-roam by all entities with this restriction. +/datum/component/virtual_entity/proc/jailbreak_mobs() + SIGNAL_HANDLER + + to_chat(parent, span_boldannounce("You shiver for a moment with a sense of clarity you haven't felt before.")) + to_chat(parent, span_notice("You could go anywhere, do anything! You could leave this simulation right now if you wanted!")) + to_chat(parent, span_danger("But be warned, quantum entanglement will interfere with any previous lives.")) + to_chat(parent, span_notice("You'll have just one chance to go nova, and there's no turning back.")) + qdel(src) diff --git a/code/modules/bitrunning/designs.dm b/code/modules/bitrunning/designs.dm index 4e7bca1c1a8dd..96ae65d41e99b 100644 --- a/code/modules/bitrunning/designs.dm +++ b/code/modules/bitrunning/designs.dm @@ -72,16 +72,3 @@ RND_CATEGORY_COMPUTER + RND_SUBCATEGORY_COMPUTER_CARGO ) departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING - - -/datum/techweb_node/bitrunning - id = "bitrunning" - display_name = "Bitrunning Technology" - description = "Bluespace technology has led to the development of quantum-scale computing, which unlocks the means to materialize atomic structures while executing advanced programs." - prereq_ids = list("practical_bluespace") - design_ids = list( - "byteforge", - "quantum_console", - "netpod", - ) - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) diff --git a/code/modules/bitrunning/event.dm b/code/modules/bitrunning/event.dm index 4cc95f4f0578a..16190851f3720 100644 --- a/code/modules/bitrunning/event.dm +++ b/code/modules/bitrunning/event.dm @@ -89,6 +89,10 @@ if(!unlucky_server.validate_mutation_candidates()) return WAITING_FOR_SOMETHING - spawned_mobs = unlucky_server.setup_glitch(forced_role) + var/mob/spawned = unlucky_server.setup_glitch(forced_role) + if(isnull(spawned)) + return WAITING_FOR_SOMETHING + + spawned_mobs += spawned return SUCCESSFUL_SPAWN diff --git a/code/modules/bitrunning/job.dm b/code/modules/bitrunning/job.dm index 1e749a3c7a58e..d62bd2cf3aeac 100644 --- a/code/modules/bitrunning/job.dm +++ b/code/modules/bitrunning/job.dm @@ -13,7 +13,7 @@ paycheck = PAYCHECK_CREW paycheck_department = ACCOUNT_CAR display_order = JOB_DISPLAY_ORDER_BITRUNNER - bounty_types = CIV_JOB_RANDOM + bounty_types = CIV_JOB_BITRUN departments_list = list( /datum/job_department/cargo, ) diff --git a/code/modules/bitrunning/netpod/_netpod.dm b/code/modules/bitrunning/netpod/_netpod.dm new file mode 100644 index 0000000000000..2208c56a7414e --- /dev/null +++ b/code/modules/bitrunning/netpod/_netpod.dm @@ -0,0 +1,137 @@ +#define BASE_DISCONNECT_DAMAGE 40 + + +/obj/machinery/netpod + name = "netpod" + + base_icon_state = "netpod" + circuit = /obj/item/circuitboard/machine/netpod + desc = "A link to the netverse. It has an assortment of cables to connect yourself to a virtual domain." + icon = 'icons/obj/machines/bitrunning.dmi' + icon_state = "netpod" + max_integrity = 300 + obj_flags = BLOCKS_CONSTRUCTION + state_open = TRUE + interaction_flags_mouse_drop = NEED_HANDS | NEED_DEXTERITY + + /// Whether we have an ongoing connection + var/connected = FALSE + /// A player selected outfit by clicking the netpod + var/datum/outfit/netsuit = /datum/outfit/job/bitrunner + /// Holds this to see if it needs to generate a new one + var/datum/weakref/avatar_ref + /// The linked quantum server + var/datum/weakref/server_ref + /// The amount of brain damage done from force disconnects + var/disconnect_damage + /// Static list of outfits to select from + var/list/cached_outfits = list() + + +/obj/machinery/netpod/post_machine_initialize() + . = ..() + + disconnect_damage = BASE_DISCONNECT_DAMAGE + find_server() + + RegisterSignal(src, COMSIG_ATOM_TAKE_DAMAGE, PROC_REF(on_damage_taken)) + RegisterSignal(src, COMSIG_MACHINERY_POWER_LOST, PROC_REF(on_power_loss)) + RegisterSignals(src, list(COMSIG_QDELETING, COMSIG_MACHINERY_BROKEN),PROC_REF(on_broken)) + + register_context() + update_appearance() + + +/obj/machinery/netpod/Destroy() + . = ..() + + QDEL_LIST(cached_outfits) + + +/obj/machinery/netpod/examine(mob/user) + . = ..() + + if(isnull(server_ref?.resolve())) + . += span_infoplain("It's not connected to anything.") + . += span_infoplain("Netpods must be built within 4 tiles of a server.") + return + + if(!isobserver(user)) + . += span_infoplain("Drag yourself into the pod to engage the link.") + . += span_infoplain("It has limited resuscitation capabilities. Remaining in the pod can heal some injuries.") + . += span_infoplain("It has a security system that will alert the occupant if it is tampered with.") + + if(isnull(occupant)) + . += span_infoplain("It's currently unoccupied.") + return + + . += span_infoplain("It's currently occupied by [occupant].") + + if(isobserver(user)) + . += span_notice("As an observer, you can click this netpod to jump to its avatar.") + return + + . += span_notice("It can be pried open with a crowbar, but its safety mechanisms will alert the occupant.") + + +/obj/machinery/netpod/add_context(atom/source, list/context, obj/item/held_item, mob/user) + . = ..() + + if(isnull(held_item)) + context[SCREENTIP_CONTEXT_LMB] = "Select Outfit" + return CONTEXTUAL_SCREENTIP_SET + + if(istype(held_item, /obj/item/crowbar) && occupant) + context[SCREENTIP_CONTEXT_LMB] = "Pry Open" + return CONTEXTUAL_SCREENTIP_SET + + +/obj/machinery/netpod/update_icon_state() + if(!is_operational) + icon_state = base_icon_state + return ..() + + if(state_open) + icon_state = base_icon_state + "_open_active" + return ..() + + if(panel_open) + icon_state = base_icon_state + "_panel" + return ..() + + icon_state = base_icon_state + "_closed" + if(occupant) + icon_state += "_active" + + return ..() + + +/obj/machinery/netpod/mouse_drop_receive(mob/target, mob/user, params) + var/mob/living/carbon/player = user + + if(!iscarbon(player) || !is_operational || !state_open || player.buckled) + return + + close_machine(target) + + +/obj/machinery/netpod/attack_hand(mob/living/user, list/modifiers) + . = ..() + if(!state_open && user == occupant) + container_resist_act(user) + + +/obj/machinery/netpod/attack_ghost(mob/dead/observer/our_observer) + var/our_target = avatar_ref?.resolve() + if(isnull(our_target) || !our_observer.orbit(our_target)) + return ..() + + +/// When the server is upgraded, drops brain damage a little +/obj/machinery/netpod/proc/on_server_upgraded(obj/machinery/quantum_server/source) + SIGNAL_HANDLER + + disconnect_damage = BASE_DISCONNECT_DAMAGE * (1 - source.servo_bonus) + + +#undef BASE_DISCONNECT_DAMAGE diff --git a/code/modules/bitrunning/netpod/container.dm b/code/modules/bitrunning/netpod/container.dm new file mode 100644 index 0000000000000..6165544544511 --- /dev/null +++ b/code/modules/bitrunning/netpod/container.dm @@ -0,0 +1,74 @@ +/obj/machinery/netpod/Exited(atom/movable/gone, direction) + . = ..() + if(!state_open && gone == occupant) + container_resist_act(gone) + + +/obj/machinery/netpod/relaymove(mob/living/user, direction) + if(!state_open) + container_resist_act(user) + + +/obj/machinery/netpod/container_resist_act(mob/living/user) + user.visible_message(span_notice("[occupant] emerges from [src]!"), + span_notice("You climb out of [src]!"), + span_notice("With a hiss, you hear a machine opening.")) + open_machine() + + +/obj/machinery/netpod/open_machine(drop = TRUE, density_to_set = FALSE) + playsound(src, 'sound/machines/tramopen.ogg', 60, TRUE, frequency = 65000) + flick("[base_icon_state]_opening", src) + SEND_SIGNAL(src, COMSIG_BITRUNNER_NETPOD_OPENED) + update_use_power(IDLE_POWER_USE) + + return ..() + + +/obj/machinery/netpod/close_machine(mob/user, density_to_set = TRUE) + if(!state_open || panel_open || !is_operational || !iscarbon(user)) + return + + playsound(src, 'sound/machines/tramclose.ogg', 60, TRUE, frequency = 65000) + flick("[base_icon_state]_closing", src) + ..() + + enter_matrix() + + +/obj/machinery/netpod/default_pry_open(obj/item/crowbar, mob/living/pryer) + if(isnull(occupant) || !iscarbon(occupant)) + if(!state_open) + if(panel_open) + return FALSE + open_machine() + else + shut_pod() + + return TRUE + + pryer.visible_message( + span_danger("[pryer] starts prying open [src]!"), + span_notice("You start to pry open [src]."), + span_notice("You hear loud prying on metal.") + ) + playsound(src, 'sound/machines/airlock_alien_prying.ogg', 100, TRUE) + + SEND_SIGNAL(src, COMSIG_BITRUNNER_CROWBAR_ALERT, pryer) + + if(do_after(pryer, 15 SECONDS, src)) + if(!state_open) + sever_connection() + open_machine() + + return TRUE + + +/// Closes the machine without shoving in an occupant +/obj/machinery/netpod/proc/shut_pod() + state_open = FALSE + playsound(src, 'sound/machines/tramclose.ogg', 60, TRUE, frequency = 65000) + flick("[base_icon_state]_closing", src) + set_density(TRUE) + + update_appearance() diff --git a/code/modules/bitrunning/netpod/outfitting.dm b/code/modules/bitrunning/netpod/outfitting.dm new file mode 100644 index 0000000000000..07f251541980f --- /dev/null +++ b/code/modules/bitrunning/netpod/outfitting.dm @@ -0,0 +1,30 @@ +/// Creates a list of outfit entries for the UI. +/obj/machinery/netpod/proc/make_outfit_collection(identifier, list/outfit_list) + var/list/collection = list( + "name" = identifier, + "outfits" = list() + ) + + for(var/datum/outfit/outfit as anything in outfit_list) + var/outfit_name = initial(outfit.name) + if(findtext(outfit_name, "(") != 0 || findtext(outfit_name, "-") != 0) // No special variants please + continue + + collection["outfits"] += list(list("path" = outfit, "name" = outfit_name)) + + return list(collection) + + +/// Resolves a path to an outfit. +/obj/machinery/netpod/proc/resolve_outfit(text) + var/path = text2path(text) + if(!ispath(path, /datum/outfit)) + return + + for(var/wardrobe in cached_outfits) + for(var/outfit in wardrobe["outfits"]) + if(path == outfit["path"]) + return path + + message_admins("[usr]:[usr.ckey] attempted to select an unavailable outfit from a netpod") + return diff --git a/code/modules/bitrunning/netpod/signals.dm b/code/modules/bitrunning/netpod/signals.dm new file mode 100644 index 0000000000000..8f8416aeb7b1b --- /dev/null +++ b/code/modules/bitrunning/netpod/signals.dm @@ -0,0 +1,64 @@ +/// Machine has been broken - handles signals and reverting sprites +/obj/machinery/netpod/proc/on_broken(datum/source) + SIGNAL_HANDLER + + sever_connection() + + +/// Checks the integrity, alerts occupants +/obj/machinery/netpod/proc/on_damage_taken(datum/source, damage_amount) + SIGNAL_HANDLER + + if(isnull(occupant) || !connected) + return + + var/total = max_integrity - damage_amount + var/integrity = (atom_integrity / total) * 100 + if(integrity > 50) + return + + SEND_SIGNAL(src, COMSIG_BITRUNNER_NETPOD_INTEGRITY) + + +/// Puts points on the current occupant's card account +/obj/machinery/netpod/proc/on_domain_complete(datum/source, atom/movable/crate, reward_points) + SIGNAL_HANDLER + + if(isnull(occupant) || !connected) + return + + var/mob/living/player = occupant + + var/datum/bank_account/account = player.get_bank_account() + if(isnull(account)) + return + + account.bitrunning_points += reward_points * 100 + + +/// The domain has been fully purged, so we should double check our avatar is deleted +/obj/machinery/netpod/proc/on_domain_scrubbed(datum/source) + SIGNAL_HANDLER + + var/mob/avatar = avatar_ref?.resolve() + if(isnull(avatar)) + return + + QDEL_NULL(avatar) + + +/// Boots out anyone in the machine && opens it +/obj/machinery/netpod/proc/on_power_loss(datum/source) + SIGNAL_HANDLER + + if(state_open) + return + + if(isnull(occupant) || !connected) + connected = FALSE + open_machine() + return + + sever_connection() + + diff --git a/code/modules/bitrunning/netpod/tools.dm b/code/modules/bitrunning/netpod/tools.dm new file mode 100644 index 0000000000000..0d31bdab86651 --- /dev/null +++ b/code/modules/bitrunning/netpod/tools.dm @@ -0,0 +1,22 @@ +/obj/machinery/netpod/crowbar_act(mob/living/user, obj/item/tool) + if(user.combat_mode) + attack_hand(user) + return ITEM_INTERACT_SUCCESS + + if(default_pry_open(tool, user) || default_deconstruction_crowbar(tool)) + return ITEM_INTERACT_SUCCESS + + +/obj/machinery/netpod/screwdriver_act(mob/living/user, obj/item/tool) + if(occupant) + balloon_alert(user, "in use!") + return ITEM_INTERACT_SUCCESS + + if(state_open) + balloon_alert(user, "close first.") + return ITEM_INTERACT_SUCCESS + + if(default_deconstruction_screwdriver(user, "[base_icon_state]_panel", "[base_icon_state]_closed", tool)) + update_appearance() // sometimes icon doesnt properly update during flick() + ui_close(user) + return ITEM_INTERACT_SUCCESS diff --git a/code/modules/bitrunning/netpod/ui.dm b/code/modules/bitrunning/netpod/ui.dm new file mode 100644 index 0000000000000..93719fe64ebef --- /dev/null +++ b/code/modules/bitrunning/netpod/ui.dm @@ -0,0 +1,41 @@ +/obj/machinery/netpod/ui_interact(mob/user, datum/tgui/ui) + if(!is_operational || occupant) + return + + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "NetpodOutfits") + ui.set_autoupdate(FALSE) + ui.open() + + +/obj/machinery/netpod/ui_data() + var/list/data = list() + + data["netsuit"] = netsuit + return data + + +/obj/machinery/netpod/ui_static_data() + var/list/data = list() + + if(!length(cached_outfits)) + cached_outfits += make_outfit_collection("Jobs", subtypesof(/datum/outfit/job)) + + data["collections"] = cached_outfits + + return data + + +/obj/machinery/netpod/ui_act(action, params) + . = ..() + if(.) + return TRUE + switch(action) + if("select_outfit") + var/datum/outfit/new_suit = resolve_outfit(params["outfit"]) + if(new_suit) + netsuit = new_suit + return TRUE + + return FALSE diff --git a/code/modules/bitrunning/netpod/utils.dm b/code/modules/bitrunning/netpod/utils.dm new file mode 100644 index 0000000000000..6e0033fe02d93 --- /dev/null +++ b/code/modules/bitrunning/netpod/utils.dm @@ -0,0 +1,144 @@ +/// Puts the occupant in netpod stasis, basically short-circuiting environmental conditions +/obj/machinery/netpod/proc/add_healing(mob/living/target) + if(target != occupant) + return + + target.AddComponent(/datum/component/netpod_healing, pod = src) + target.playsound_local(src, 'sound/effects/submerge.ogg', 20, vary = TRUE) + target.extinguish_mob() + update_use_power(ACTIVE_POWER_USE) + + +/// Disconnects the occupant after a certain time so they aren't just hibernating in netpod stasis. A balance change +/obj/machinery/netpod/proc/auto_disconnect() + if(isnull(occupant) || state_open || connected) + return + + var/mob/player = occupant + player.playsound_local(src, 'sound/effects/splash.ogg', 60, TRUE) + to_chat(player, span_notice("The machine disconnects itself and begins to drain.")) + open_machine() + + +/// Handles occupant post-disconnection effects like damage, sounds, etc +/obj/machinery/netpod/proc/disconnect_occupant(cause_damage = FALSE) + connected = FALSE + + var/mob/living/mob_occupant = occupant + if(isnull(occupant) || mob_occupant.stat == DEAD) + open_machine() + return + + mob_occupant.playsound_local(src, 'sound/magic/blink.ogg', 25, TRUE) + mob_occupant.set_static_vision(2 SECONDS) + mob_occupant.set_temp_blindness(1 SECONDS) + mob_occupant.Paralyze(2 SECONDS) + + if(!is_operational) + open_machine() + return + + var/heal_time = 1 + if(mob_occupant.health < mob_occupant.maxHealth) + heal_time = (mob_occupant.stat + 2) * 5 + addtimer(CALLBACK(src, PROC_REF(auto_disconnect)), heal_time SECONDS, TIMER_UNIQUE|TIMER_STOPPABLE|TIMER_DELETE_ME) + + if(!cause_damage) + return + + mob_occupant.flash_act(override_blindness_check = TRUE, visual = TRUE) + mob_occupant.adjustOrganLoss(ORGAN_SLOT_BRAIN, disconnect_damage) + INVOKE_ASYNC(mob_occupant, TYPE_PROC_REF(/mob/living, emote), "scream") + to_chat(mob_occupant, span_danger("You've been forcefully disconnected from your avatar! Your thoughts feel scrambled!")) + + +/** + * ### Enter Matrix + * Finds any current avatars from this chair - or generates a new one + * + * New avatars cost 1 attempt, and this will eject if there's none left + * + * Connects the mind to the avatar if everything is ok + */ +/obj/machinery/netpod/proc/enter_matrix() + var/mob/living/carbon/human/neo = occupant + if(!ishuman(neo) || neo.stat == DEAD || isnull(neo.mind)) + balloon_alert(neo, "invalid occupant.") + return + + var/obj/machinery/quantum_server/server = find_server() + if(isnull(server)) + balloon_alert(neo, "no server connected!") + return + + var/datum/lazy_template/virtual_domain/generated_domain = server.generated_domain + if(isnull(generated_domain) || !server.is_ready) + balloon_alert(neo, "nothing loaded!") + return + + var/mob/living/carbon/current_avatar = avatar_ref?.resolve() + if(isnull(current_avatar) || current_avatar.stat != CONSCIOUS) // We need a viable avatar + current_avatar = server.start_new_connection(neo, netsuit) + if(isnull(current_avatar)) + balloon_alert(neo, "out of bandwidth!") + return + + neo.set_static_vision(2 SECONDS) + add_healing(occupant) + + if(!validate_entry(neo, current_avatar)) + open_machine() + return + + current_avatar.AddComponent( \ + /datum/component/avatar_connection, \ + old_mind = neo.mind, \ + old_body = neo, \ + server = server, \ + pod = src, \ + help_text = generated_domain.help_text, \ + ) + + connected = TRUE + + +/// Finds a server and sets the server_ref +/obj/machinery/netpod/proc/find_server() + var/obj/machinery/quantum_server/server = server_ref?.resolve() + if(server) + return server + + server = locate(/obj/machinery/quantum_server) in oview(4, src) + if(isnull(server)) + return + + server_ref = WEAKREF(server) + RegisterSignal(server, COMSIG_MACHINERY_REFRESH_PARTS, PROC_REF(on_server_upgraded)) + RegisterSignal(server, COMSIG_BITRUNNER_DOMAIN_COMPLETE, PROC_REF(on_domain_complete)) + RegisterSignal(server, COMSIG_BITRUNNER_DOMAIN_SCRUBBED, PROC_REF(on_domain_scrubbed)) + + return server + + +/// Severs the connection with the current avatar +/obj/machinery/netpod/proc/sever_connection() + if(isnull(occupant) || !connected) + return + + SEND_SIGNAL(src, COMSIG_BITRUNNER_NETPOD_SEVER) + + +/// Checks for cases to eject/fail connecting an avatar +/obj/machinery/netpod/proc/validate_entry(mob/living/neo, mob/living/avatar) + if(!do_after(neo, 2 SECONDS, src)) + return FALSE + + // Very invalid + if(QDELETED(neo) || QDELETED(avatar) || QDELETED(src) || !is_operational) + return FALSE + + // Invalid + if(occupant != neo || isnull(neo.mind) || neo.stat > SOFT_CRIT || avatar.stat == DEAD) + return FALSE + + return TRUE diff --git a/code/modules/bitrunning/objects/disks.dm b/code/modules/bitrunning/objects/disks.dm index 6e166d5eb7fdb..17b768c54d08f 100644 --- a/code/modules/bitrunning/objects/disks.dm +++ b/code/modules/bitrunning/objects/disks.dm @@ -142,3 +142,46 @@ /obj/item/dualsaber/green, /obj/item/grenade/syndieminibomb, ) + +///proto-kinetic accelerator mods, to be applied to pka's given inside domains +/obj/item/bitrunning_disk/item/pka_mods + name = "bitrunning gear: proto-kinetic accelerator mods" + selectable_items = list( + /obj/item/borg/upgrade/modkit/range, + /obj/item/borg/upgrade/modkit/damage, + /obj/item/borg/upgrade/modkit/cooldown, + /obj/item/borg/upgrade/modkit/aoe/mobs, + /obj/item/borg/upgrade/modkit/human_passthrough, + ) + +/obj/item/bitrunning_disk/item/pka_mods/premium + name = "bitrunning gear: premium proto-kinetic accelerator mods" + selectable_items = list( + /obj/item/borg/upgrade/modkit/cooldown/repeater, + /obj/item/borg/upgrade/modkit/lifesteal, + /obj/item/borg/upgrade/modkit/resonator_blasts, + /obj/item/borg/upgrade/modkit/bounty, + /obj/item/borg/upgrade/modkit/indoors, + ) + +///proto-kinetic crusher trophies, to be applied to pkc's given inside domains +/obj/item/bitrunning_disk/item/pkc_mods + name = "bitrunning gear: proto-kinetic crusher mods" + selectable_items = list( + /obj/item/crusher_trophy/watcher_wing, + /obj/item/crusher_trophy/blaster_tubes/magma_wing, + /obj/item/crusher_trophy/legion_skull, + /obj/item/crusher_trophy/wolf_ear, + ) + +/obj/item/bitrunning_disk/item/pkc_mods/premium + name = "bitrunning gear: premium proto-kinetic crusher mods" + selectable_items = list( + /obj/item/crusher_trophy/watcher_wing/ice_wing, + /obj/item/crusher_trophy/blaster_tubes, + /obj/item/crusher_trophy/miner_eye, + /obj/item/crusher_trophy/tail_spike, + /obj/item/crusher_trophy/demon_claws, + /obj/item/crusher_trophy/vortex_talisman, + /obj/item/crusher_trophy/ice_demon_cube, + ) diff --git a/code/modules/bitrunning/objects/hololadder.dm b/code/modules/bitrunning/objects/hololadder.dm index e592f31382de9..3df41a403e735 100644 --- a/code/modules/bitrunning/objects/hololadder.dm +++ b/code/modules/bitrunning/objects/hololadder.dm @@ -8,11 +8,37 @@ obj_flags = BLOCK_Z_OUT_DOWN /// Time req to disconnect properly var/travel_time = 3 SECONDS + /// Uses this to teleport observers back to the origin server + var/datum/weakref/server_ref -/obj/structure/hololadder/Initialize(mapload) + +/obj/structure/hololadder/Initialize(mapload, obj/machinery/quantum_server/origin) . = ..() RegisterSignal(loc, COMSIG_ATOM_ENTERED, PROC_REF(on_enter)) + server_ref = WEAKREF(origin) + register_context() + + +/obj/structure/hololadder/add_context(atom/source, list/context, obj/item/held_item, mob/user) + . = ..() + + context[SCREENTIP_CONTEXT_LMB] = "Disconnect" + + +/obj/structure/hololadder/examine(mob/user) + . = ..() + + if(isnull(server_ref.resolve())) + . += span_infoplain("It's not connected to anything.") + return + + if(isobserver(user)) + . += span_notice("Left click to view the server that this ladder is connected to.") + return + + . += span_infoplain("This ladder is connected to a server. You can click on it or walk over it to disconnect.") + /obj/structure/hololadder/attack_hand(mob/user, list/modifiers) . = ..() @@ -24,19 +50,29 @@ disconnect(user) + +/obj/structure/hololadder/attack_ghost(mob/dead/observer/ghostie) + var/our_server = server_ref?.resolve() + if(isnull(our_server)) + return ..() + + ghostie.abstract_move(get_turf(our_server)) + + /// If there's a pilot ref- send the disconnect signal /obj/structure/hololadder/proc/disconnect(mob/user) if(isnull(user.mind)) return if(!HAS_TRAIT(user, TRAIT_TEMPORARY_BODY)) - balloon_alert(user, "no connection detected.") + balloon_alert(user, "no connection detected") return balloon_alert(user, "disconnecting...") if(do_after(user, travel_time, src)) SEND_SIGNAL(user, COMSIG_BITRUNNER_LADDER_SEVER) + /// Helper for times when you dont have hands (gondola??) /obj/structure/hololadder/proc/on_enter(datum/source, atom/movable/arrived, turf/old_loc) SIGNAL_HANDLER diff --git a/code/modules/bitrunning/objects/landmarks.dm b/code/modules/bitrunning/objects/landmarks.dm index 3b38493edfffa..ea55b96979edd 100644 --- a/code/modules/bitrunning/objects/landmarks.dm +++ b/code/modules/bitrunning/objects/landmarks.dm @@ -12,6 +12,11 @@ name = "Bitrunning hololadder spawn" icon_state = "hololadder" +/// A permanent exit for the domain +/obj/effect/landmark/bitrunning/permanent_exit + name = "Bitrunning permanent exit" + icon_state = "perm_exit" + /// Where the crates need to be taken /obj/effect/landmark/bitrunning/cache_goal_turf name = "Bitrunning goal turf" diff --git a/code/modules/bitrunning/objects/loot_box.dm b/code/modules/bitrunning/objects/loot_box.dm index 39209c33d97f9..200e0b259fbda 100644 --- a/code/modules/bitrunning/objects/loot_box.dm +++ b/code/modules/bitrunning/objects/loot_box.dm @@ -8,6 +8,7 @@ icon_locked = "bitrunning+l" icon_closed = "bitrunning" icon_broken = "bitrunning+b" + icon_open = "bitrunning" /obj/item/storage/lockbox/bitrunning/encrypted name = "encrypted curiosity" diff --git a/code/modules/bitrunning/objects/netpod.dm b/code/modules/bitrunning/objects/netpod.dm deleted file mode 100644 index a1a681cab055f..0000000000000 --- a/code/modules/bitrunning/objects/netpod.dm +++ /dev/null @@ -1,483 +0,0 @@ -#define BASE_DISCONNECT_DAMAGE 40 - -/obj/machinery/netpod - name = "netpod" - - base_icon_state = "netpod" - circuit = /obj/item/circuitboard/machine/netpod - desc = "A link to the netverse. It has an assortment of cables to connect yourself to a virtual domain." - icon = 'icons/obj/machines/bitrunning.dmi' - icon_state = "netpod" - max_integrity = 300 - obj_flags = BLOCKS_CONSTRUCTION - state_open = TRUE - /// Whether we have an ongoing connection - var/connected = FALSE - /// A player selected outfit by clicking the netpod - var/datum/outfit/netsuit = /datum/outfit/job/bitrunner - /// Holds this to see if it needs to generate a new one - var/datum/weakref/avatar_ref - /// The linked quantum server - var/datum/weakref/server_ref - /// The amount of brain damage done from force disconnects - var/disconnect_damage - /// Static list of outfits to select from - var/list/cached_outfits = list() - -/obj/machinery/netpod/post_machine_initialize() - . = ..() - - disconnect_damage = BASE_DISCONNECT_DAMAGE - find_server() - - RegisterSignal(src, COMSIG_ATOM_TAKE_DAMAGE, PROC_REF(on_damage_taken)) - RegisterSignal(src, COMSIG_MACHINERY_POWER_LOST, PROC_REF(on_power_loss)) - RegisterSignals(src, list(COMSIG_QDELETING, COMSIG_MACHINERY_BROKEN),PROC_REF(on_broken)) - - register_context() - update_appearance() - -/obj/machinery/netpod/Destroy() - . = ..() - - QDEL_LIST(cached_outfits) - -/obj/machinery/netpod/examine(mob/user) - . = ..() - - if(isnull(server_ref?.resolve())) - . += span_infoplain("It's not connected to anything.") - . += span_infoplain("Netpods must be built within 4 tiles of a server.") - return - - . += span_infoplain("Drag yourself into the pod to engage the link.") - . += span_infoplain("It has limited resuscitation capabilities. Remaining in the pod can heal some injuries.") - . += span_infoplain("It has a security system that will alert the occupant if it is tampered with.") - - if(isnull(occupant)) - . += span_notice("It is currently unoccupied.") - return - - . += span_notice("It is currently occupied by [occupant].") - . += span_notice("It can be pried open with a crowbar, but its safety mechanisms will alert the occupant.") - -/obj/machinery/netpod/add_context(atom/source, list/context, obj/item/held_item, mob/user) - . = ..() - - if(isnull(held_item)) - context[SCREENTIP_CONTEXT_LMB] = "Select Outfit" - return CONTEXTUAL_SCREENTIP_SET - - if(istype(held_item, /obj/item/crowbar) && occupant) - context[SCREENTIP_CONTEXT_LMB] = "Pry Open" - return CONTEXTUAL_SCREENTIP_SET - - return CONTEXTUAL_SCREENTIP_SET - -/obj/machinery/netpod/update_icon_state() - if(!is_operational) - icon_state = base_icon_state - return ..() - - if(state_open) - icon_state = base_icon_state + "_open_active" - return ..() - - if(panel_open) - icon_state = base_icon_state + "_panel" - return ..() - - icon_state = base_icon_state + "_closed" - if(occupant) - icon_state += "_active" - - return ..() - -/obj/machinery/netpod/MouseDrop_T(mob/target, mob/user) - var/mob/living/carbon/player = user - if(!iscarbon(player) || !Adjacent(player) || !ISADVANCEDTOOLUSER(player) || !is_operational || !state_open) - return - - if(player.buckled || HAS_TRAIT(player, TRAIT_HANDS_BLOCKED)) - return - - close_machine(target) - -/obj/machinery/netpod/crowbar_act(mob/living/user, obj/item/tool) - if(user.combat_mode) - attack_hand(user) - return ITEM_INTERACT_SUCCESS - - if(default_pry_open(tool, user) || default_deconstruction_crowbar(tool)) - return ITEM_INTERACT_SUCCESS - -/obj/machinery/netpod/screwdriver_act(mob/living/user, obj/item/tool) - if(occupant) - balloon_alert(user, "in use!") - return ITEM_INTERACT_SUCCESS - - if(state_open) - balloon_alert(user, "close first.") - return ITEM_INTERACT_SUCCESS - - if(default_deconstruction_screwdriver(user, "[base_icon_state]_panel", "[base_icon_state]_closed", tool)) - update_appearance() // sometimes icon doesnt properly update during flick() - ui_close(user) - return ITEM_INTERACT_SUCCESS - -/obj/machinery/netpod/attack_hand(mob/living/user, list/modifiers) - . = ..() - if(!state_open && user == occupant) - container_resist_act(user) - -/obj/machinery/netpod/Exited(atom/movable/gone, direction) - . = ..() - if(!state_open && gone == occupant) - container_resist_act(gone) - -/obj/machinery/netpod/relaymove(mob/living/user, direction) - if(!state_open) - container_resist_act(user) - -/obj/machinery/netpod/container_resist_act(mob/living/user) - user.visible_message(span_notice("[occupant] emerges from [src]!"), - span_notice("You climb out of [src]!"), - span_notice("With a hiss, you hear a machine opening.")) - open_machine() - -/obj/machinery/netpod/open_machine(drop = TRUE, density_to_set = FALSE) - playsound(src, 'sound/machines/tramopen.ogg', 60, TRUE, frequency = 65000) - flick("[base_icon_state]_opening", src) - SEND_SIGNAL(src, COMSIG_BITRUNNER_NETPOD_OPENED) - update_use_power(IDLE_POWER_USE) - - return ..() - -/obj/machinery/netpod/close_machine(mob/user, density_to_set = TRUE) - if(!state_open || panel_open || !is_operational || !iscarbon(user)) - return - - playsound(src, 'sound/machines/tramclose.ogg', 60, TRUE, frequency = 65000) - flick("[base_icon_state]_closing", src) - ..() - - enter_matrix() - -/obj/machinery/netpod/default_pry_open(obj/item/crowbar, mob/living/pryer) - if(isnull(occupant) || !iscarbon(occupant)) - if(!state_open) - if(panel_open) - return FALSE - open_machine() - else - shut_pod() - - return TRUE - - pryer.visible_message( - span_danger("[pryer] starts prying open [src]!"), - span_notice("You start to pry open [src]."), - span_notice("You hear loud prying on metal.") - ) - playsound(src, 'sound/machines/airlock_alien_prying.ogg', 100, TRUE) - - SEND_SIGNAL(src, COMSIG_BITRUNNER_CROWBAR_ALERT, pryer) - - if(do_after(pryer, 15 SECONDS, src)) - if(!state_open) - sever_connection() - open_machine() - - return TRUE - -/obj/machinery/netpod/ui_interact(mob/user, datum/tgui/ui) - if(!is_operational || occupant) - return - - ui = SStgui.try_update_ui(user, src, ui) - if(!ui) - ui = new(user, src, "NetpodOutfits") - ui.set_autoupdate(FALSE) - ui.open() - -/obj/machinery/netpod/ui_data() - var/list/data = list() - - data["netsuit"] = netsuit - return data - -/obj/machinery/netpod/ui_static_data() - var/list/data = list() - - if(!length(cached_outfits)) - cached_outfits += make_outfit_collection("Jobs", subtypesof(/datum/outfit/job)) - - data["collections"] = cached_outfits - - return data - -/obj/machinery/netpod/ui_act(action, params) - . = ..() - if(.) - return TRUE - switch(action) - if("select_outfit") - var/datum/outfit/new_suit = resolve_outfit(params["outfit"]) - if(new_suit) - netsuit = new_suit - return TRUE - - return FALSE - -/obj/machinery/netpod/attack_ghost(mob/dead/observer/our_observer) - var/our_target = avatar_ref?.resolve() - if(isnull(our_target) || !our_observer.orbit(our_target)) - return ..() - -/// Puts the occupant in netpod stasis, basically short-circuiting environmental conditions -/obj/machinery/netpod/proc/add_healing(mob/living/target) - if(target != occupant) - return - - target.AddComponent(/datum/component/netpod_healing, pod = src) - target.playsound_local(src, 'sound/effects/submerge.ogg', 20, vary = TRUE) - target.extinguish_mob() - update_use_power(ACTIVE_POWER_USE) - -/// Disconnects the occupant after a certain time so they aren't just hibernating in netpod stasis. A balance change -/obj/machinery/netpod/proc/auto_disconnect() - if(isnull(occupant) || state_open || connected) - return - - var/mob/player = occupant - player.playsound_local(src, 'sound/effects/splash.ogg', 60, TRUE) - to_chat(player, span_notice("The machine disconnects itself and begins to drain.")) - open_machine() - -/// Handles occupant post-disconnection effects like damage, sounds, etc -/obj/machinery/netpod/proc/disconnect_occupant(cause_damage = FALSE) - connected = FALSE - - var/mob/living/mob_occupant = occupant - if(isnull(occupant) || mob_occupant.stat == DEAD) - open_machine() - return - - mob_occupant.playsound_local(src, "sound/magic/blink.ogg", 25, TRUE) - mob_occupant.set_static_vision(2 SECONDS) - mob_occupant.set_temp_blindness(1 SECONDS) - mob_occupant.Paralyze(2 SECONDS) - - if(!is_operational) - open_machine() - return - - var/heal_time = 1 - if(mob_occupant.health < mob_occupant.maxHealth) - heal_time = (mob_occupant.stat + 2) * 5 - addtimer(CALLBACK(src, PROC_REF(auto_disconnect)), heal_time SECONDS, TIMER_UNIQUE|TIMER_STOPPABLE|TIMER_DELETE_ME) - - if(!cause_damage) - return - - mob_occupant.flash_act(override_blindness_check = TRUE, visual = TRUE) - mob_occupant.adjustOrganLoss(ORGAN_SLOT_BRAIN, disconnect_damage) - INVOKE_ASYNC(mob_occupant, TYPE_PROC_REF(/mob/living, emote), "scream") - to_chat(mob_occupant, span_danger("You've been forcefully disconnected from your avatar! Your thoughts feel scrambled!")) - -/** - * ### Enter Matrix - * Finds any current avatars from this chair - or generates a new one - * - * New avatars cost 1 attempt, and this will eject if there's none left - * - * Connects the mind to the avatar if everything is ok - */ -/obj/machinery/netpod/proc/enter_matrix() - var/mob/living/carbon/human/neo = occupant - if(!ishuman(neo) || neo.stat == DEAD || isnull(neo.mind)) - balloon_alert(neo, "invalid occupant.") - return - - var/obj/machinery/quantum_server/server = find_server() - if(isnull(server)) - balloon_alert(neo, "no server connected!") - return - - var/datum/lazy_template/virtual_domain/generated_domain = server.generated_domain - if(isnull(generated_domain) || !server.is_ready) - balloon_alert(neo, "nothing loaded!") - return - - var/mob/living/carbon/current_avatar = avatar_ref?.resolve() - if(isnull(current_avatar) || current_avatar.stat != CONSCIOUS) // We need a viable avatar - var/obj/structure/hololadder/wayout = server.generate_hololadder() - if(isnull(wayout)) - balloon_alert(neo, "out of bandwidth!") - return - current_avatar = server.generate_avatar(wayout, netsuit) - avatar_ref = WEAKREF(current_avatar) - server.stock_gear(current_avatar, neo, generated_domain) - - neo.set_static_vision(3 SECONDS) - add_healing(occupant) - - if(!validate_entry(neo, current_avatar)) - open_machine() - return - - current_avatar.AddComponent( \ - /datum/component/avatar_connection, \ - old_mind = neo.mind, \ - old_body = neo, \ - server = server, \ - pod = src, \ - help_text = generated_domain.help_text, \ - ) - - connected = TRUE - -/// Finds a server and sets the server_ref -/obj/machinery/netpod/proc/find_server() - var/obj/machinery/quantum_server/server = server_ref?.resolve() - if(server) - return server - - server = locate(/obj/machinery/quantum_server) in oview(4, src) - if(isnull(server)) - return - - server_ref = WEAKREF(server) - RegisterSignal(server, COMSIG_MACHINERY_REFRESH_PARTS, PROC_REF(on_server_upgraded)) - RegisterSignal(server, COMSIG_BITRUNNER_DOMAIN_COMPLETE, PROC_REF(on_domain_complete)) - RegisterSignal(server, COMSIG_BITRUNNER_DOMAIN_SCRUBBED, PROC_REF(on_domain_scrubbed)) - - return server - -/// Creates a list of outfit entries for the UI. -/obj/machinery/netpod/proc/make_outfit_collection(identifier, list/outfit_list) - var/list/collection = list( - "name" = identifier, - "outfits" = list() - ) - - for(var/datum/outfit/outfit as anything in outfit_list) - var/outfit_name = initial(outfit.name) - if(findtext(outfit_name, "(") != 0 || findtext(outfit_name, "-") != 0) // No special variants please - continue - - collection["outfits"] += list(list("path" = outfit, "name" = outfit_name)) - - return list(collection) - -/// Machine has been broken - handles signals and reverting sprites -/obj/machinery/netpod/proc/on_broken(datum/source) - SIGNAL_HANDLER - - sever_connection() - -/// Checks the integrity, alerts occupants -/obj/machinery/netpod/proc/on_damage_taken(datum/source, damage_amount) - SIGNAL_HANDLER - - if(isnull(occupant) || !connected) - return - - var/total = max_integrity - damage_amount - var/integrity = (atom_integrity / total) * 100 - if(integrity > 50) - return - - SEND_SIGNAL(src, COMSIG_BITRUNNER_NETPOD_INTEGRITY) - -/// Puts points on the current occupant's card account -/obj/machinery/netpod/proc/on_domain_complete(datum/source, atom/movable/crate, reward_points) - SIGNAL_HANDLER - - if(isnull(occupant) || !connected) - return - - var/mob/living/player = occupant - - var/datum/bank_account/account = player.get_bank_account() - if(isnull(account)) - return - - account.bitrunning_points += reward_points * 100 - -/// The domain has been fully purged, so we should double check our avatar is deleted -/obj/machinery/netpod/proc/on_domain_scrubbed(datum/source) - SIGNAL_HANDLER - - var/mob/avatar = avatar_ref?.resolve() - if(isnull(avatar)) - return - - QDEL_NULL(avatar) - -/// Boots out anyone in the machine && opens it -/obj/machinery/netpod/proc/on_power_loss(datum/source) - SIGNAL_HANDLER - - if(state_open) - return - - if(isnull(occupant) || !connected) - connected = FALSE - open_machine() - return - - sever_connection() - -/// When the server is upgraded, drops brain damage a little -/obj/machinery/netpod/proc/on_server_upgraded(obj/machinery/quantum_server/source) - SIGNAL_HANDLER - - disconnect_damage = BASE_DISCONNECT_DAMAGE * (1 - source.servo_bonus) - -/// Resolves a path to an outfit. -/obj/machinery/netpod/proc/resolve_outfit(text) - var/path = text2path(text) - if(!ispath(path, /datum/outfit)) - return - - for(var/wardrobe in cached_outfits) - for(var/outfit in wardrobe["outfits"]) - if(path == outfit["path"]) - return path - - message_admins("[usr]:[usr.ckey] attempted to select an unavailable outfit from a netpod") - return - -/// Severs the connection with the current avatar -/obj/machinery/netpod/proc/sever_connection() - if(isnull(occupant) || !connected) - return - - SEND_SIGNAL(src, COMSIG_BITRUNNER_NETPOD_SEVER) - -/// Closes the machine without shoving in an occupant -/obj/machinery/netpod/proc/shut_pod() - state_open = FALSE - playsound(src, 'sound/machines/tramclose.ogg', 60, TRUE, frequency = 65000) - flick("[base_icon_state]_closing", src) - set_density(TRUE) - - update_appearance() - -/// Checks for cases to eject/fail connecting an avatar -/obj/machinery/netpod/proc/validate_entry(mob/living/neo, mob/living/avatar) - if(!do_after(neo, 2 SECONDS, src)) - return FALSE - - // Very invalid - if(QDELETED(neo) || QDELETED(avatar) || QDELETED(src) || !is_operational) - return FALSE - - // Invalid - if(occupant != neo || isnull(neo.mind) || neo.stat > SOFT_CRIT || avatar.stat == DEAD) - return FALSE - - return TRUE - -#undef BASE_DISCONNECT_DAMAGE diff --git a/code/modules/bitrunning/orders/bepis.dm b/code/modules/bitrunning/orders/bepis.dm index 286e9817f3c52..4b7253bdaf24a 100644 --- a/code/modules/bitrunning/orders/bepis.dm +++ b/code/modules/bitrunning/orders/bepis.dm @@ -17,7 +17,3 @@ /datum/orderable_item/bepis/sprayoncan item_path = /obj/item/toy/sprayoncan cost_per_order = 750 - -/datum/orderable_item/bepis/pristine - item_path = /obj/item/disk/design_disk/bepis/remove_tech - cost_per_order = 1000 diff --git a/code/modules/bitrunning/orders/tech.dm b/code/modules/bitrunning/orders/tech.dm index a4bf59ce18dec..7e987e4818104 100644 --- a/code/modules/bitrunning/orders/tech.dm +++ b/code/modules/bitrunning/orders/tech.dm @@ -34,3 +34,23 @@ /datum/orderable_item/bitrunning_tech/flip_skillchip item_path = /obj/item/skillchip/matrix_flip cost_per_order = 2000 + +/datum/orderable_item/bitrunning_tech/pka_mod + item_path = /obj/item/bitrunning_disk/item/pka_mods + cost_per_order = 750 + desc = "This disk contains a program that lets you equip modkits for the proto-kinetic accelerator. Proto-kinetic accelerator not included." + +/datum/orderable_item/bitrunning_tech/pka_mod/premium + item_path = /obj/item/bitrunning_disk/item/pka_mods/premium + cost_per_order = 1800 + desc = "This disk contains a program that lets you equip stronger modkits for the proto-kinetic accelerator. Proto-kinetic accelerator not included." + +/datum/orderable_item/bitrunning_tech/pkc_mod + item_path = /obj/item/bitrunning_disk/item/pkc_mods + cost_per_order = 750 + desc = "This disk contains a program that lets you equip trophies for the proto-kinetic crusher. Proto-kinetic crusher no included." + +/datum/orderable_item/bitrunning_tech/pkc_mod/premium + item_path = /obj/item/bitrunning_disk/item/pkc_mods/premium + cost_per_order = 1800 + desc = "This disk contains a program that lets you equip stronger trophies for the proto-kinetic crusher. Proto-kinetic crusher not included." diff --git a/code/modules/bitrunning/outfits.dm b/code/modules/bitrunning/outfits.dm index 41a65b228ff44..c0bb01ebc06e5 100644 --- a/code/modules/bitrunning/outfits.dm +++ b/code/modules/bitrunning/outfits.dm @@ -10,12 +10,62 @@ suit = /obj/item/clothing/suit/jacket/trenchcoat id = /obj/item/card/id/advanced + /datum/outfit/echolocator/post_equip(mob/living/carbon/human/user, visualsOnly) . = ..() user.psykerize() + /datum/outfit/bitductor name = "Bitrunning Abductor" uniform = /obj/item/clothing/under/abductor gloves = /obj/item/clothing/gloves/fingerless shoes = /obj/item/clothing/shoes/jackboots + + +/datum/outfit/beachbum_combat + name = "Beachbum: Island Combat" + id = /obj/item/card/id/advanced + l_pocket = null + r_pocket = null + shoes = /obj/item/clothing/shoes/sandal + uniform = /obj/item/clothing/under/pants/jeans + /// Available ranged weapons + var/list/ranged_weaps = list( + /obj/item/gun/ballistic/automatic/pistol, + /obj/item/gun/ballistic/rifle/boltaction, + /obj/item/gun/ballistic/automatic/mini_uzi, + /obj/item/gun/ballistic/automatic/pistol/deagle, + /obj/item/gun/ballistic/rocketlauncher/unrestricted, + /obj/item/gun/ballistic/automatic/ar, + + ) + /// Corresponding ammo + var/list/corresponding_ammo = list( + /obj/item/ammo_box/magazine/m9mm, + /obj/item/ammo_box/strilka310, + /obj/item/ammo_box/magazine/uzim9mm, + /obj/item/ammo_box/magazine/m50, + /obj/item/food/pizzaslice/dank, // more silly, less destructive + /obj/item/ammo_box/magazine/m223, + ) + + +/datum/outfit/beachbum_combat/post_equip(mob/living/carbon/human/bum, visualsOnly) + . = ..() + + var/choice = rand(1, length(ranged_weaps)) + var/weapon = ranged_weaps[choice] + bum.put_in_active_hand(new weapon) + + var/ammo = corresponding_ammo[choice] + var/obj/item/ammo1 = new ammo + var/obj/item/ammo2 = new ammo + + if(!bum.equip_to_slot_if_possible(new ammo, ITEM_SLOT_LPOCKET)) + ammo1.forceMove(get_turf(bum)) + if(!bum.equip_to_slot_if_possible(new ammo, ITEM_SLOT_RPOCKET)) + ammo2.forceMove(get_turf(bum)) + + if(prob(50)) + bum.equip_to_slot_if_possible(new /obj/item/clothing/glasses/sunglasses, ITEM_SLOT_EYES) diff --git a/code/modules/bitrunning/server/_parent.dm b/code/modules/bitrunning/server/_parent.dm index 06b49d790a5d8..541d36ad5d72c 100644 --- a/code/modules/bitrunning/server/_parent.dm +++ b/code/modules/bitrunning/server/_parent.dm @@ -19,7 +19,7 @@ /// Prevents multiple user actions. Handled by loading domains and cooldowns var/is_ready = TRUE /// Chance multipled by threat to spawn a glitch - var/glitch_chance = 0.05 + var/glitch_chance = 0.2 /// Current plugged in users var/list/datum/weakref/avatar_connection_refs = list() /// Cached list of mutable mobs in zone for cybercops @@ -37,11 +37,13 @@ /// Changes how much info is available on the domain var/scanner_tier = 1 /// Length of time it takes for the server to cool down after resetting. Here to give runners downtime so their faces don't get stuck like that - var/server_cooldown_time = 3 MINUTES + var/server_cooldown_time = 2 MINUTES /// Applies bonuses to rewards etc var/servo_bonus = 0 /// Determines the glitches available to spawn, builds with completion var/threat = 0 + /// Maximum rate at which a glitch can spawn + var/threat_prob_max = 15 /// The turfs we can place a hololadder on. var/turf/exit_turfs = list() /// Determines if we broadcast to entertainment monitors or not @@ -75,24 +77,37 @@ . += span_infoplain("Can be resource intensive to run. Ensure adequate power supply.") + var/upgraded = FALSE if(capacitor_coefficient < 1) - . += span_infoplain("Its coolant capacity reduces cooldown time by [(1 - capacitor_coefficient) * 100]%.") + . += span_infoplain("- Its coolant capacity reduces cooldown time by [(1 - capacitor_coefficient) * 100]%.") + upgraded = TRUE if(servo_bonus > 0.2) - . += span_infoplain("Its manipulation potential is increasing rewards by [servo_bonus]x.") - . += span_infoplain("Injury from unsafe ejection reduced [servo_bonus * 100]%.") + . += span_infoplain("- Its manipulation potential is increasing rewards by [servo_bonus]x.") + . += span_infoplain("- Injury from unsafe ejection reduced [servo_bonus * 100]%.") + upgraded = TRUE + + if(!upgraded) + . += span_notice("Its output is suboptimal. Improved components will grant domain information, reduce cooldowns and increase rewards.") if(!is_ready) . += span_notice("It is currently cooling down. Give it a few moments.") + if(isobserver(user) && (obj_flags & EMAGGED)) + . += span_notice("Ominous warning lights are blinking red. This server has been tampered with.") + /obj/machinery/quantum_server/emag_act(mob/user, obj/item/card/emag/emag_card) . = ..() + if(obj_flags & EMAGGED) + return + obj_flags |= EMAGGED - glitch_chance = 0.09 + glitch_chance *= 2 + threat_prob_max *= 2 add_overlay(mutable_appearance('icons/obj/machines/bitrunning.dmi', "emag_overlay")) - balloon_alert(user, "bzzzt...") + balloon_alert(user, "system jailbroken...") playsound(src, 'sound/effects/sparks1.ogg', 35, vary = TRUE) /obj/machinery/quantum_server/update_appearance(updates) @@ -113,11 +128,14 @@ /obj/machinery/quantum_server/attackby(obj/item/weapon, mob/user, params) . = ..() - if(istype(weapon, /obj/item/bitrunning_debug)) - obj_flags |= EMAGGED - glitch_chance = 0.5 - capacitor_coefficient = 0.01 - points = 100 + + if(!istype(weapon, /obj/item/bitrunning_debug)) + return + + obj_flags |= EMAGGED + glitch_chance = 0.5 + capacitor_coefficient = 0.1 + points = 100 /obj/machinery/quantum_server/crowbar_act(mob/living/user, obj/item/crowbar) . = ..() diff --git a/code/modules/bitrunning/server/loot.dm b/code/modules/bitrunning/server/loot.dm index cb4902abfe3ab..0e6ff30cd246a 100644 --- a/code/modules/bitrunning/server/loot.dm +++ b/code/modules/bitrunning/server/loot.dm @@ -1,3 +1,10 @@ +#define GRADE_D "D" +#define GRADE_C "C" +#define GRADE_B "B" +#define GRADE_A "A" +#define GRADE_S "S" + + /// Handles calculating rewards based on number of players, parts, threats, etc /obj/machinery/quantum_server/proc/calculate_rewards() var/rewards_base = 0.8 @@ -14,8 +21,10 @@ return rewards_base + /// Handles spawning the (new) crate and deleting the former /obj/machinery/quantum_server/proc/generate_loot(obj/cache, obj/machinery/byteforge/chosen_forge) + SSblackbox.record_feedback("tally", "bitrunning_domain_primary_completed", 1, generated_domain.key) for(var/mob/person in cache.contents) SEND_SIGNAL(person, COMSIG_BITRUNNER_CACHE_SEVER) @@ -28,8 +37,11 @@ var/bonus = calculate_rewards() + var/time_difference = world.time - generated_domain.start_time + var/grade = grade_completion(time_difference) + var/obj/item/paper/certificate = new() - certificate.add_raw_text(get_completion_certificate()) + certificate.add_raw_text(get_completion_certificate(time_difference, grade)) certificate.name = "certificate of domain completion" certificate.update_appearance() @@ -37,10 +49,18 @@ reward_cache.manifest = certificate reward_cache.update_appearance() + if(can_generate_tech_disk(grade)) + SSblackbox.record_feedback("tally", "bitrunning_bepis_rewarded", 1, generated_domain.key) + new /obj/item/disk/design_disk/bepis/remove_tech(reward_cache) + generated_domain.disk_reward_spawned = TRUE + chosen_forge.start_to_spawn(reward_cache) return TRUE + +/// Builds secondary loot if the achievements were met /obj/machinery/quantum_server/proc/generate_secondary_loot(obj/curiosity, obj/machinery/byteforge/chosen_forge) + SSblackbox.record_feedback("tally", "bitrunning_domain_secondary_completed", 1, generated_domain.key) spark_at_location(curiosity) // abracadabra! qdel(curiosity) // and it's gone! @@ -49,8 +69,9 @@ chosen_forge.start_to_spawn(reward_curiosity) return TRUE + /// Returns the markdown text containing domain completion information -/obj/machinery/quantum_server/proc/get_completion_certificate() +/obj/machinery/quantum_server/proc/get_completion_certificate(time_difference, grade) var/base_points = generated_domain.reward_points if(domain_randomized) base_points -= 1 @@ -59,11 +80,9 @@ var/domain_threats = length(spawned_threat_refs) - var/time_difference = world.time - generated_domain.start_time - var/completion_time = "### Completion Time: [DisplayTimeText(time_difference)]\n" - var/grade = "\n---\n\n# Rating: [grade_completion(time_difference)]" + var/completion_grade = "\n---\n\n# Rating: [grade]" var/text = "# Certificate of Domain Completion\n\n---\n\n" @@ -75,7 +94,7 @@ if(bonuses <= 1) text += completion_time - text += grade + text += completion_grade return text text += "### Bonuses\n" @@ -94,10 +113,25 @@ text += "- **Components:** + [servo_rating]\n" text += completion_time - text += grade + text += completion_grade return text +/// Checks if the players should get a bepis reward +/obj/machinery/quantum_server/proc/can_generate_tech_disk(grade) + if(generated_domain.disk_reward_spawned) + return FALSE + + if(!LAZYLEN(SSresearch.techweb_nodes_experimental)) + return FALSE + + var/static/list/passing_grades = list() + if(!passing_grades.len) + passing_grades = list(GRADE_A,GRADE_S) + + return generated_domain.difficulty >= BITRUNNER_DIFFICULTY_MEDIUM && (grade in passing_grades) + + /// Grades the player's run based on several factors /obj/machinery/quantum_server/proc/grade_completion(completion_time) var/score = length(spawned_threat_refs) * 5 @@ -124,13 +158,18 @@ switch(score) if(1 to 4) - return "D" + return GRADE_D if(5 to 7) - return "C" + return GRADE_C if(8 to 10) - return "B" + return GRADE_B if(11 to 13) - return "A" + return GRADE_A else - return "S" + return GRADE_S +#undef GRADE_D +#undef GRADE_C +#undef GRADE_B +#undef GRADE_A +#undef GRADE_S diff --git a/code/modules/bitrunning/server/map_handling.dm b/code/modules/bitrunning/server/map_handling.dm index ed3adc3467ee1..f98332f7e8d8f 100644 --- a/code/modules/bitrunning/server/map_handling.dm +++ b/code/modules/bitrunning/server/map_handling.dm @@ -24,6 +24,7 @@ reset() + /// Links all the loading processes together - does validation for booting a map /obj/machinery/quantum_server/proc/cold_boot_map(map_key) if(!is_ready) @@ -51,9 +52,12 @@ is_ready = TRUE return FALSE + SSblackbox.record_feedback("tally", "bitrunning_domain_loaded", 1, map_key) + is_ready = TRUE - if(prob(clamp((threat * glitch_chance), 1, 10))) + var/spawn_chance = clamp((threat * glitch_chance), 5, threat_prob_max) + if(prob(spawn_chance)) setup_glitch() playsound(src, 'sound/machines/terminal_insert_disc.ogg', 30, vary = TRUE) @@ -66,8 +70,15 @@ if(broadcasting) start_broadcasting_network(BITRUNNER_CAMERA_NET) + if(generated_domain.announce_to_ghosts) + notify_ghosts("Bitrunners have loaded a domain that offers ghost interactions. Check the spawners menu for more information.", + src, + "Matrix Glitch", + ) + return TRUE + /// Initializes a new domain if the given key is valid and the user has enough points /obj/machinery/quantum_server/proc/load_domain(map_key) for(var/datum/lazy_template/virtual_domain/available in SSbitrunning.all_domains) @@ -79,6 +90,7 @@ return FALSE + /// Loads in necessary map items like hololadder spawns, caches, etc /obj/machinery/quantum_server/proc/load_map_items() var/turf/goal_turfs = list() @@ -113,6 +125,15 @@ var/turf/signaler_turf = get_turf(thing) signaler_turf.AddComponent(/datum/component/bitrunning_points, generated_domain) qdel(thing) + continue + + if(istype(thing, /obj/effect/landmark/bitrunning/permanent_exit)) + var/turf/tile = get_turf(thing) + exit_turfs += tile + qdel(thing) + + new /obj/structure/hololadder(tile) + if(!length(exit_turfs)) CRASH("Failed to find exit turfs on generated domain.") @@ -131,6 +152,7 @@ return TRUE + /// Stops the current virtual domain and disconnects all users /obj/machinery/quantum_server/proc/reset(fast = FALSE) is_ready = FALSE @@ -152,6 +174,7 @@ stop_broadcasting_network(BITRUNNER_CAMERA_NET) + /// Tries to clean up everything in the domain /obj/machinery/quantum_server/proc/scrub_vdom() sever_connections() /// just in case someone's connected diff --git a/code/modules/bitrunning/server/obj_generation.dm b/code/modules/bitrunning/server/obj_generation.dm index 641d906cc5989..dabac8ae62dd9 100644 --- a/code/modules/bitrunning/server/obj_generation.dm +++ b/code/modules/bitrunning/server/obj_generation.dm @@ -15,6 +15,7 @@ new /obj/structure/closet/crate/secure/bitrunning/encrypted(chosen_turf) return TRUE + /// Attempts to spawn a lootbox /obj/machinery/quantum_server/proc/attempt_spawn_curiosity(list/possible_turfs) if(!length(possible_turfs)) // Out of turfs to place a curiosity @@ -35,9 +36,10 @@ new /obj/item/storage/lockbox/bitrunning/encrypted(chosen_turf) return chosen_turf + /// Generates a new avatar for the bitrunner. -/obj/machinery/quantum_server/proc/generate_avatar(obj/structure/hololadder/wayout, datum/outfit/netsuit) - var/mob/living/carbon/human/avatar = new(wayout.loc) +/obj/machinery/quantum_server/proc/generate_avatar(turf/destination, datum/outfit/netsuit) + var/mob/living/carbon/human/avatar = new(destination) var/outfit_path = generated_domain.forced_outfit || netsuit var/datum/outfit/to_wear = new outfit_path() @@ -61,8 +63,9 @@ if(istype(hat)) hat.set_armor(/datum/armor/none) - for(var/obj/thing in avatar.held_items) - qdel(thing) + if(!generated_domain.forced_outfit) + for(var/obj/thing in avatar.held_items) + qdel(thing) var/obj/item/storage/backpack/bag = avatar.back if(istype(bag)) @@ -76,9 +79,6 @@ var/obj/item/card/id/outfit_id = avatar.wear_id if(outfit_id) - outfit_id.assignment = "Bit Avatar" - outfit_id.registered_name = avatar.real_name - outfit_id.registered_account = new() outfit_id.registered_account.replaceable = FALSE @@ -91,32 +91,9 @@ network = BITRUNNER_CAMERA_NET, \ emp_proof = TRUE, \ ) - return avatar - -/// Generates a new hololadder for the bitrunner. Effectively a respawn attempt. -/obj/machinery/quantum_server/proc/generate_hololadder() - if(!length(exit_turfs)) - return - - if(retries_spent >= length(exit_turfs)) - return - var/turf/destination - for(var/turf/dest_turf in exit_turfs) - if(!locate(/obj/structure/hololadder) in dest_turf) - destination = dest_turf - break - - if(isnull(destination)) - return - - var/obj/structure/hololadder/wayout = new(destination) - if(isnull(wayout)) - return - - retries_spent += 1 + return avatar - return wayout /// Loads in any mob segments of the map /obj/machinery/quantum_server/proc/load_mob_segments() @@ -145,6 +122,7 @@ return TRUE + /// Scans over neo's contents for bitrunning tech disks. Loads the items or abilities onto the avatar. /obj/machinery/quantum_server/proc/stock_gear(mob/living/carbon/human/avatar, mob/living/carbon/human/neo, datum/lazy_template/virtual_domain/generated_domain) var/domain_forbids_items = generated_domain.forbids_disk_items diff --git a/code/modules/bitrunning/server/signal_handlers.dm b/code/modules/bitrunning/server/signal_handlers.dm index 0e5e949e8bb51..f5d2840143e16 100644 --- a/code/modules/bitrunning/server/signal_handlers.dm +++ b/code/modules/bitrunning/server/signal_handlers.dm @@ -4,12 +4,14 @@ sever_connections() + /// Whenever a corpse spawner makes a new corpse, add it to the list of potential mutations /obj/machinery/quantum_server/proc/on_corpse_spawned(datum/source, mob/living/corpse) SIGNAL_HANDLER mutation_candidate_refs.Add(WEAKREF(corpse)) + /// Being qdeleted - make sure the circuit and connected mobs go with it /obj/machinery/quantum_server/proc/on_delete(datum/source) SIGNAL_HANDLER @@ -26,6 +28,7 @@ if(circuit) qdel(circuit) + /// Whenever something enters the send tiles, check if it's a loot crate. If so, alert players. /obj/machinery/quantum_server/proc/on_goal_turf_entered(datum/source, atom/movable/arrived, atom/old_loc, list/atom/old_locs) SIGNAL_HANDLER @@ -51,6 +54,7 @@ generate_secondary_loot(arrived, chosen_forge, generated_domain) return + /// Handles examining the server. Shows cooldown time and efficiency. /obj/machinery/quantum_server/proc/on_goal_turf_examined(datum/source, mob/examiner, list/examine_text) SIGNAL_HANDLER @@ -58,6 +62,7 @@ examine_text += span_info("Beneath your gaze, the floor pulses subtly with streams of encoded data.") examine_text += span_info("It seems to be part of the location designated for retrieving encrypted payloads.") + /// Scans over the inbound created_atoms from lazy templates /obj/machinery/quantum_server/proc/on_template_loaded(datum/lazy_template/source, list/created_atoms) SIGNAL_HANDLER @@ -98,6 +103,7 @@ /// Just in case there's any special handling for the domain generated_domain.setup_domain(created_atoms) + /// Handles when cybercops are summoned into the area or ghosts click a ghost role spawner /obj/machinery/quantum_server/proc/on_threat_created(datum/source, mob/living/threat) SIGNAL_HANDLER diff --git a/code/modules/bitrunning/server/threats.dm b/code/modules/bitrunning/server/threats.dm index 6c42322d0cf01..28d91aa4b3714 100644 --- a/code/modules/bitrunning/server/threats.dm +++ b/code/modules/bitrunning/server/threats.dm @@ -2,6 +2,8 @@ /obj/machinery/quantum_server/proc/add_threats(mob/living/threat) spawned_threat_refs.Add(WEAKREF(threat)) SEND_SIGNAL(src, COMSIG_BITRUNNER_THREAT_CREATED) + threat.AddComponent(/datum/component/virtual_entity, src) + /// Choses which antagonist role is spawned based on threat /obj/machinery/quantum_server/proc/get_antagonist_role() @@ -18,6 +20,7 @@ return chosen + /// Selects a target to mutate. Gives two attempts, then crashes if it fails. /obj/machinery/quantum_server/proc/get_mutation_target() var/datum/weakref/target_ref = pick(mutation_candidate_refs) @@ -34,6 +37,7 @@ resolved = target_ref.resolve() return resolved + /// Finds any mobs with minds in the zones and gives them the bad news /obj/machinery/quantum_server/proc/notify_spawned_threats() for(var/datum/weakref/baddie_ref as anything in spawned_threat_refs) @@ -51,10 +55,12 @@ to_chat(baddie, span_userdanger("You have been flagged for deletion! Thank you for your service.")) + /// Removes a specific threat - used when station spawning /obj/machinery/quantum_server/proc/remove_threat(mob/living/threat) spawned_threat_refs.Remove(WEAKREF(threat)) + /// Selects the role and waits for a ghost orbiter /obj/machinery/quantum_server/proc/setup_glitch(datum/antagonist/bitrunning_glitch/forced_role) if(!validate_mutation_candidates()) @@ -70,16 +76,19 @@ var/datum/antagonist/bitrunning_glitch/chosen_role = forced_role || get_antagonist_role() var/role_name = initial(chosen_role.name) var/mob/chosen_one = SSpolling.poll_ghosts_for_target( + question = "A temporary antagonist role is spawning in the virtual domain.\ + \nYou will return to your previous body on conclusion.", check_jobban = ROLE_GLITCH, poll_time = 20 SECONDS, checked_target = mutation_target, ignore_category = POLL_IGNORE_GLITCH, alert_pic = mutation_target, - role_name_text = "Bitrunning Malfunction: [role_name]", + role_name_text = "Malfunction: [role_name]", ) spawn_glitch(chosen_role, mutation_target, chosen_one) return mutation_target + /// Orbit poll has concluded - spawn the antag /obj/machinery/quantum_server/proc/spawn_glitch(datum/antagonist/bitrunning_glitch/chosen_role, mob/living/mutation_target, mob/dead/observer/ghost) if(QDELETED(mutation_target)) @@ -91,26 +100,33 @@ return var/role_name = initial(chosen_role.name) - var/mob/living/antag_mob + + var/mob/living/new_mob switch(role_name) if(ROLE_NETGUARDIAN) - antag_mob = new /mob/living/basic/netguardian(mutation_target.loc) + new_mob = new /mob/living/basic/netguardian(mutation_target.loc) else // any other humanoid mob - antag_mob = new /mob/living/carbon/human(mutation_target.loc) + new_mob = new /mob/living/carbon/human(mutation_target.loc) mutation_target.gib(DROP_ALL_REMAINS) - antag_mob.key = ghost.key - var/datum/mind/ghost_mind = antag_mob.mind - ghost_mind.add_antag_datum(chosen_role) - ghost_mind.special_role = ROLE_GLITCH - ghost_mind.set_assigned_role(SSjob.GetJobType(/datum/job/bitrunning_glitch)) + var/datum/mind/ghost_mind = ghost.mind + new_mob.key = ghost.key + + if(ghost_mind?.current) + new_mob.AddComponent(/datum/component/temporary_body, ghost_mind, ghost_mind.current, TRUE) + + var/datum/mind/antag_mind = new_mob.mind + antag_mind.add_antag_datum(chosen_role) + antag_mind.special_role = ROLE_GLITCH + antag_mind.set_assigned_role(SSjob.GetJobType(/datum/job/bitrunning_glitch)) - playsound(antag_mob, 'sound/magic/ethereal_exit.ogg', 50, vary = TRUE) - message_admins("[ADMIN_LOOKUPFLW(antag_mob)] has been made into virtual antagonist by an event.") - antag_mob.log_message("was spawned as a virtual antagonist by an event.", LOG_GAME) + playsound(new_mob, 'sound/magic/ethereal_exit.ogg', 50, vary = TRUE) + message_admins("[ADMIN_LOOKUPFLW(new_mob)] has been made into virtual antagonist by an event.") + new_mob.log_message("was spawned as a virtual antagonist by an event.", LOG_GAME) + + add_threats(new_mob) - add_threats(antag_mob) /// Oh boy - transports the antag station side /obj/machinery/quantum_server/proc/station_spawn(mob/living/antag, obj/machinery/byteforge/chosen_forge) @@ -150,8 +166,13 @@ if(istype(antag_datum)) antag_datum.show_in_roundend = TRUE + var/datum/component/temp_body = antag.GetComponent(/datum/component/temporary_body) + if(temp_body) + qdel(temp_body) + do_teleport(antag, get_turf(chosen_forge), forced = TRUE, asoundin = 'sound/magic/ethereal_enter.ogg', asoundout = 'sound/magic/ethereal_exit.ogg', channel = TELEPORT_CHANNEL_QUANTUM) + /// Removes any invalid candidates from the list /obj/machinery/quantum_server/proc/validate_mutation_candidates() for(var/datum/weakref/creature_ref as anything in mutation_candidate_refs) diff --git a/code/modules/bitrunning/server/util.dm b/code/modules/bitrunning/server/util.dm index a657122082dbb..ab267a34cd330 100644 --- a/code/modules/bitrunning/server/util.dm +++ b/code/modules/bitrunning/server/util.dm @@ -1,11 +1,13 @@ #define MAX_DISTANCE 4 // How far crates can spawn from the server + /// Resets the cooldown state and updates icons /obj/machinery/quantum_server/proc/cool_off() is_ready = TRUE update_appearance() radio.talk_into(src, "Thermal systems within operational parameters. Proceeding to domain configuration.", RADIO_CHANNEL_SUPPLY) + /// If there are hosted minds, attempts to get a list of their current virtual bodies w/ vitals /obj/machinery/quantum_server/proc/get_avatar_data() var/list/hosted_avatars = list() @@ -31,6 +33,49 @@ return hosted_avatars + +/// I grab the atom here so I can signal it / manipulate spawners etc +/obj/machinery/quantum_server/proc/get_avatar_destination() as /atom + // Branch A: Custom spawns + if(length(generated_domain.custom_spawns)) + var/atom/valid_spawner + + while(isnull(valid_spawner)) + var/atom/chosen = pick(generated_domain.custom_spawns) + if(QDELETED(chosen)) + generated_domain.custom_spawns -= chosen + continue + + valid_spawner = chosen + break + + return valid_spawner + + // Branch B: Hololadders + if(!length(exit_turfs)) + return + + if(retries_spent >= length(exit_turfs)) + return + + var/turf/exit_tile + for(var/turf/dest_turf in exit_turfs) + if(!locate(/obj/structure/hololadder) in dest_turf) + exit_tile = dest_turf + break + + if(isnull(exit_tile)) + return + + var/obj/structure/hololadder/wayout = new(exit_tile, src) + if(isnull(wayout)) + return + + retries_spent += 1 + + return wayout + + /// Locates any turfs with forges on them, returns a random one /obj/machinery/quantum_server/proc/get_random_nearby_forge() var/list/nearby_forges = list() @@ -40,6 +85,7 @@ return pick(nearby_forges) + /// Gets a random available domain given the current points. /obj/machinery/quantum_server/proc/get_random_domain_id() if(points < 1) @@ -63,9 +109,10 @@ return initial(selected.key) + /// Removes all blacklisted items from a mob and returns them to base state /obj/machinery/quantum_server/proc/reset_equipment(mob/living/carbon/human/person) - for(var/item in person.get_contents()) + for(var/obj/item in person.get_equipped_items(INCLUDE_POCKETS | INCLUDE_ACCESSORIES)) qdel(item) var/datum/antagonist/bitrunning_glitch/antag_datum = locate() in person.mind?.antag_datums @@ -74,6 +121,9 @@ person.equipOutfit(antag_datum.preview_outfit) + antag_datum.fix_agent_id() + + /// Severs any connected users /obj/machinery/quantum_server/proc/sever_connections() if(isnull(generated_domain) || !length(avatar_connection_refs)) @@ -81,6 +131,7 @@ SEND_SIGNAL(src, COMSIG_BITRUNNER_QSRV_SEVER) + /// Do some magic teleport sparks /obj/machinery/quantum_server/proc/spark_at_location(obj/cache) playsound(cache, 'sound/magic/blink.ogg', 50, vary = TRUE) @@ -88,16 +139,33 @@ sparks.set_up(5, location = get_turf(cache)) sparks.start() -/// Returns a turf if it's not dense, else will find a neighbor. -/obj/machinery/quantum_server/proc/validate_turf(turf/chosen_turf) - if(!chosen_turf.is_blocked_turf()) - return chosen_turf - for(var/turf/tile in get_adjacent_open_turfs(chosen_turf)) - if(!tile.is_blocked_turf()) - return chosen_turf +/// Starts building a new avatar for the player. +/// Called by netpods when they don't have a current avatar. +/// This is a procedural proc which links several others together. +/obj/machinery/quantum_server/proc/start_new_connection(mob/living/carbon/human/neo, datum/outfit/netsuit) as /mob/living/carbon/human + var/atom/entry_atom = get_avatar_destination() + if(isnull(entry_atom)) + return + + var/mob/living/carbon/new_avatar = generate_avatar(get_turf(entry_atom), netsuit) + stock_gear(new_avatar, neo, generated_domain) + + // Cleanup for domains with one time use custom spawns + if(!length(generated_domain.custom_spawns)) + return new_avatar + + // If we're spawning from some other fuckery, no need for this + if(istype(entry_atom, /obj/effect/mob_spawn/ghost_role/human/virtual_domain)) + var/obj/effect/mob_spawn/ghost_role/human/virtual_domain/spawner = entry_atom + spawner.artificial_spawn(new_avatar) + + if(!generated_domain.keep_custom_spawns) + generated_domain.custom_spawns -= entry_atom + qdel(entry_atom) + + return new_avatar -#undef MAX_DISTANCE /// Toggles broadcast on and off /obj/machinery/quantum_server/proc/toggle_broadcast() @@ -112,3 +180,16 @@ // And we only flip TVs when there's a domain, because otherwise there's no cams to watch set_network_broadcast_status(BITRUNNER_CAMERA_NET, broadcasting) return TRUE + + +/// Returns a turf if it's not dense, else will find a neighbor. +/obj/machinery/quantum_server/proc/validate_turf(turf/chosen_turf) + if(!chosen_turf.is_blocked_turf()) + return chosen_turf + + for(var/turf/tile in get_adjacent_open_turfs(chosen_turf)) + if(!tile.is_blocked_turf()) + return chosen_turf + + +#undef MAX_DISTANCE diff --git a/code/modules/bitrunning/spawners.dm b/code/modules/bitrunning/spawners.dm new file mode 100644 index 0000000000000..4b5f79a43b186 --- /dev/null +++ b/code/modules/bitrunning/spawners.dm @@ -0,0 +1,64 @@ +/obj/effect/mob_spawn/ghost_role/human/virtual_domain + outfit = /datum/outfit/pirate + prompt_name = "a virtual domain debug entity" + flavour_text = "You probably shouldn't be seeing this, contact a coder!" + you_are_text = "You are NOT supposed to be here. How did you let this happen?" + important_text = "Bitrunning is a crime, and your primary threat." + temp_body = TRUE + + +/obj/effect/mob_spawn/ghost_role/human/virtual_domain/special(mob/living/spawned_mob, mob/mob_possessor) + var/datum/mind/ghost_mind = mob_possessor.mind + if(ghost_mind?.current) // Preserves any previous bodies before making the switch + spawned_mob.AddComponent(/datum/component/temporary_body, ghost_mind, ghost_mind.current, TRUE) + + ..() + + spawned_mob.mind.add_antag_datum(/datum/antagonist/domain_ghost_actor) + + +/// Simulates a ghost role spawn without calling special(), ie a bitrunner spawn instead of a ghost. +/obj/effect/mob_spawn/ghost_role/human/virtual_domain/proc/artificial_spawn(mob/living/runner) + SEND_SIGNAL(src, COMSIG_BITRUNNER_SPAWNED, runner) + + +/obj/effect/mob_spawn/ghost_role/human/virtual_domain/pirate + name = "Virtual Pirate Remains" + desc = "Some inanimate bones. They feel like they could spring to life at any moment!" + density = FALSE + icon = 'icons/effects/blood.dmi' + icon_state = "remains" + prompt_name = "a virtual skeleton pirate" + you_are_text = "You are a virtual pirate. Yarrr!" + flavour_text = " There's a LANDLUBBER after yer booty. Stop them!" + + +/obj/effect/mob_spawn/ghost_role/human/virtual_domain/pirate/special(mob/living/spawned_mob, mob/mob_possessor) + . = ..() + spawned_mob.fully_replace_character_name(spawned_mob.real_name, "[pick(strings(PIRATE_NAMES_FILE, "generic_beginnings"))][pick(strings(PIRATE_NAMES_FILE, "generic_endings"))]") + + +/obj/effect/mob_spawn/ghost_role/human/virtual_domain/syndie + name = "Virtual Syndicate Sleeper" + icon = 'icons/obj/machines/sleeper.dmi' + icon_state = "sleeper_s" + prompt_name = "a virtual syndicate operative" + you_are_text = "You are a virtual syndicate operative." + flavour_text = "Alarms blare! We are being boarded!" + outfit = /datum/outfit/virtual_syndicate + spawner_job_path = /datum/job/space_syndicate + + +/datum/outfit/virtual_syndicate + name = "Virtual Syndie" + id = /obj/item/card/id/advanced/chameleon + id_trim = /datum/id_trim/chameleon/operative + uniform = /obj/item/clothing/under/syndicate + back = /obj/item/storage/backpack + gloves = /obj/item/clothing/gloves/tackler/combat/insulated + shoes = /obj/item/clothing/shoes/combat + implants = list(/obj/item/implant/weapons_auth) + + +/datum/outfit/virtual_syndicate/post_equip(mob/living/carbon/human/user, visualsOnly) + user.faction |= ROLE_SYNDICATE diff --git a/code/modules/bitrunning/virtual_domain/domains/fredingtonfastingbear.dm b/code/modules/bitrunning/virtual_domain/domains/fredingtonfastingbear.dm new file mode 100644 index 0000000000000..f3c803384c45d --- /dev/null +++ b/code/modules/bitrunning/virtual_domain/domains/fredingtonfastingbear.dm @@ -0,0 +1,10 @@ +/datum/lazy_template/virtual_domain/fredingtonfastingbear + name = "Pizza Party" + cost = BITRUNNER_COST_MEDIUM + desc = "A famous pizzeria that got ruined by what it had to offer." + completion_loot = list(/obj/item/food/pizzaslice/meat/pizzeria = 1) + difficulty = BITRUNNER_DIFFICULTY_MEDIUM + help_text = "Pick up a flashlight and get going. Your favourite bear has been waiting for you..." + key = "fredingtonfastingbear" + map_name = "fredingtonfastingbear" + reward_points = BITRUNNER_REWARD_MEDIUM diff --git a/code/modules/bitrunning/virtual_domain/domains/gondola_asteroid.dm b/code/modules/bitrunning/virtual_domain/domains/gondola_asteroid.dm index 42fbb0c1427ca..4207023914408 100644 --- a/code/modules/bitrunning/virtual_domain/domains/gondola_asteroid.dm +++ b/code/modules/bitrunning/virtual_domain/domains/gondola_asteroid.dm @@ -11,9 +11,13 @@ /obj/structure/closet/crate/secure/bitrunning/encrypted/gondola move_resist = MOVE_FORCE_STRONG -/mob/living/simple_animal/pet/gondola/virtual_domain +/mob/living/basic/pet/gondola/virtual_domain health = 50 - loot = list(/obj/effect/decal/cleanable/blood/gibs, /obj/item/stack/sheet/animalhide/gondola = 1, /obj/item/food/meat/slab/gondola/virtual_domain = 1) + loot = list( + /obj/effect/decal/cleanable/blood/gibs = 1, + /obj/item/stack/sheet/animalhide/gondola = 1, + /obj/item/food/meat/slab/gondola/virtual_domain = 1, + ) maxHealth = 50 move_force = MOVE_FORCE_VERY_STRONG move_resist = MOVE_FORCE_STRONG @@ -30,4 +34,4 @@ /datum/disease/transformation/gondola/virtual_domain stage_prob = 9 - new_form = /mob/living/simple_animal/pet/gondola/virtual_domain + new_form = /mob/living/basic/pet/gondola/virtual_domain diff --git a/code/modules/bitrunning/virtual_domain/domains/island_brawl.dm b/code/modules/bitrunning/virtual_domain/domains/island_brawl.dm new file mode 100644 index 0000000000000..b745a4746aa24 --- /dev/null +++ b/code/modules/bitrunning/virtual_domain/domains/island_brawl.dm @@ -0,0 +1,46 @@ +/datum/lazy_template/virtual_domain/island_brawl + name = "Island Brawl" + announce_to_ghosts = TRUE + cost = BITRUNNER_COST_HIGH + desc = "A 'peaceful' island tucked away in the middle of nowhere. This map will auto-complete after a number of deaths have occurred." + difficulty = BITRUNNER_DIFFICULTY_HIGH + forced_outfit = /datum/outfit/beachbum_combat + help_text = "There may be bounties laid out across the island, but the primary objective is to survive. Deaths on the island will count towards the final score." + key = "island_brawl" + map_name = "island_brawl" + reward_points = BITRUNNER_REWARD_HIGH + secondary_loot = list( + /obj/item/toy/beach_ball = 2, + /obj/item/clothing/shoes/sandal = 1, + /obj/item/clothing/glasses/sunglasses = 1, + /obj/item/gun/ballistic/automatic/mini_uzi = 1, + ) + + +/datum/lazy_template/virtual_domain/island_brawl/setup_domain(list/created_atoms) + for(var/obj/effect/mob_spawn/ghost_role/human/virtual_domain/islander/spawner in created_atoms) + custom_spawns += spawner + + RegisterSignals(spawner, list(COMSIG_GHOSTROLE_SPAWNED, COMSIG_BITRUNNER_SPAWNED), PROC_REF(on_spawn)) + + +/// Someone has spawned in, so we check for their death +/datum/lazy_template/virtual_domain/island_brawl/proc/on_spawn(datum/source, mob/living/spawned_mob) + SIGNAL_HANDLER + + RegisterSignals(spawned_mob, list(COMSIG_LIVING_DEATH), PROC_REF(on_death)) + + +/// Mob has died, so we add a point to the domain +/datum/lazy_template/virtual_domain/island_brawl/proc/on_death(datum/source, gibbed) + SIGNAL_HANDLER + + add_points(1) + + +/obj/effect/mob_spawn/ghost_role/human/virtual_domain/islander + name = "Islander" + outfit = /datum/outfit/beachbum_combat + prompt_name = "a combat beach bum" + you_are_text = "You are a virtual islander." + flavour_text = "Don't let anyone ruin your idyllic vacation spot. Coordinate with others- or don't!" diff --git a/code/modules/bitrunning/virtual_domain/domains/pirates.dm b/code/modules/bitrunning/virtual_domain/domains/pirates.dm index 52d86a7121180..b8bff6dbeb363 100644 --- a/code/modules/bitrunning/virtual_domain/domains/pirates.dm +++ b/code/modules/bitrunning/virtual_domain/domains/pirates.dm @@ -1,5 +1,6 @@ /datum/lazy_template/virtual_domain/pirates name = "Corsair Cove" + announce_to_ghosts = TRUE cost = BITRUNNER_COST_MEDIUM desc = "Battle your way to the hidden treasure, seize the booty, and make a swift escape before the pirates turn the tide." difficulty = BITRUNNER_DIFFICULTY_MEDIUM diff --git a/code/modules/bitrunning/virtual_domain/domains/starfront_saloon.dm b/code/modules/bitrunning/virtual_domain/domains/starfront_saloon.dm deleted file mode 100644 index eae9dabc49e4d..0000000000000 --- a/code/modules/bitrunning/virtual_domain/domains/starfront_saloon.dm +++ /dev/null @@ -1,14 +0,0 @@ -/datum/lazy_template/virtual_domain/starfront_saloon - name = "Starfront Saloon" - cost = BITRUNNER_COST_MEDIUM - desc = "Looks like you stepped onto the wrong street, partner. Hope you brought your gunslinging skills." - difficulty = BITRUNNER_DIFFICULTY_HIGH - help_text = "One of these rooms has the cache we're looking for. Find it and get out." - is_modular = TRUE - key = "starfront_saloon" - map_name = "starfront_saloon" - mob_modules = list( - /datum/modular_mob_segment/syndicate_team, - /datum/modular_mob_segment/syndicate_elite, - ) - reward_points = BITRUNNER_REWARD_HIGH diff --git a/code/modules/bitrunning/virtual_domain/domains/syndicate_assault.dm b/code/modules/bitrunning/virtual_domain/domains/syndicate_assault.dm index 5f754dd433ad6..f81bc6daae2c4 100644 --- a/code/modules/bitrunning/virtual_domain/domains/syndicate_assault.dm +++ b/code/modules/bitrunning/virtual_domain/domains/syndicate_assault.dm @@ -1,5 +1,6 @@ /datum/lazy_template/virtual_domain/syndicate_assault name = "Syndicate Assault" + announce_to_ghosts = TRUE cost = BITRUNNER_COST_MEDIUM desc = "Board the enemy ship and recover the stolen cargo." difficulty = BITRUNNER_DIFFICULTY_MEDIUM diff --git a/code/modules/bitrunning/virtual_domain/modular_mob_segment.dm b/code/modules/bitrunning/virtual_domain/modular_mob_segment.dm index c0e017a0b9f3d..b8c5880a69c38 100644 --- a/code/modules/bitrunning/virtual_domain/modular_mob_segment.dm +++ b/code/modules/bitrunning/virtual_domain/modular_mob_segment.dm @@ -52,7 +52,7 @@ /datum/modular_mob_segment/gondolas mobs = list( - /mob/living/simple_animal/pet/gondola, + /mob/living/basic/pet/gondola, ) /datum/modular_mob_segment/corgis diff --git a/code/modules/bitrunning/virtual_domain/virtual_domain.dm b/code/modules/bitrunning/virtual_domain/virtual_domain.dm index b316bb97cae1e..f81f6186cbe6e 100644 --- a/code/modules/bitrunning/virtual_domain/virtual_domain.dm +++ b/code/modules/bitrunning/virtual_domain/virtual_domain.dm @@ -7,48 +7,82 @@ map_name = "None" key = "Virtual Domain" place_on_top = TRUE + /// Whether to tell observers this map is being used + var/announce_to_ghosts = FALSE + /// The map file to load + var/filename = "virtual_domain.dmm" + /// The start time of the map. Used to calculate time taken + var/start_time + /// This map is specifically for unit tests. Shouldn't display in game + var/test_only = FALSE + + /** + * Generic settings / UI + */ /// Cost of this map to load var/cost = BITRUNNER_COST_NONE - /// Any outfit that you wish to force on avatars. Overrides preferences - var/datum/outfit/forced_outfit /// The description of the map for the console UI var/desc = "A map." /// Affects the ui and ability to scan info. var/difficulty = BITRUNNER_DIFFICULTY_NONE - /// The map file to load - var/filename = "virtual_domain.dmm" + /// Write these to help complete puzzles and other objectives. Viewed in the domain info ability. + var/help_text + // Name to show in the UI + var/name = "Virtual Domain" + /// Points to reward for completion. Used to purchase new domains and calculate ore rewards. + var/reward_points = BITRUNNER_REWARD_MIN + + /** + * Player customization + */ + /// If this domain blocks the use of items from disks, for whatever reason var/forbids_disk_items = FALSE /// If this domain blocks the use of spells from disks, for whatever reason var/forbids_disk_spells = FALSE - /// Information given to connected clients via ability - var/help_text - /// Whether to display this as a modular map - var/is_modular = FALSE - /// Byond will look for modular mob segment landmarks then choose from here at random. You can make them unique also. - var/list/datum/modular_mob_segment/mob_modules = list() + /// Any outfit that you wish to force on avatars. Overrides preferences + var/datum/outfit/forced_outfit + + /** + * Loot + */ + /// An assoc list of typepath/amount to spawn on completion. Not weighted - the value is the amount var/list/completion_loot - /// An accoc list of typepath/amount to spawn from secondary objectives. Not weighted - the value is the total number of items that can be obtained. + /// An assoc list of typepath/amount to spawn from secondary objectives. Not weighted - the value is the total number of items that can be obtained. var/list/secondary_loot = list() /// Number of secondary loot boxes generated. Resets when the domain is reloaded. var/secondary_loot_generated + /// Has this domain been beaten with high enough score to spawn a tech disk? + var/disk_reward_spawned = FALSE + + /** + * Modularity + */ + + /// Whether to display this as a modular map + var/is_modular = FALSE + /// Byond will look for modular mob segment landmarks then choose from here at random. You can make them unique also. + var/list/datum/modular_mob_segment/mob_modules = list() /// Forces all mob modules to only load once var/modular_unique_mobs = FALSE - // Name to show in the UI - var/name = "Virtual Domain" - /// Points to reward for completion. Used to purchase new domains and calculate ore rewards. - var/reward_points = BITRUNNER_REWARD_MIN - /// The start time of the map. Used to calculate time taken - var/start_time - /// This map is specifically for unit tests. Shouldn't display in game - var/test_only = FALSE + + /** + * Spawning + */ + + /// Looks for random landmarks to spawn on. + var/list/custom_spawns = list() + /// Set TRUE if you want reusable custom spawners + var/keep_custom_spawns = FALSE + /// Sends a point to any loot signals on the map /datum/lazy_template/virtual_domain/proc/add_points(points_to_add) SEND_SIGNAL(src, COMSIG_BITRUNNER_GOAL_POINT, points_to_add) + /// Overridable proc to be called after the map is loaded. /datum/lazy_template/virtual_domain/proc/setup_domain(list/created_atoms) return diff --git a/code/modules/buildmode/buildmode.dm b/code/modules/buildmode/buildmode.dm index 36a3db07f597e..80f5ae1ad27b0 100644 --- a/code/modules/buildmode/buildmode.dm +++ b/code/modules/buildmode/buildmode.dm @@ -50,6 +50,8 @@ holder.player_details.post_login_callbacks -= li_cb li_cb = null holder = null + modebutton = null + dirbutton = null QDEL_NULL(mode) QDEL_LIST(buttons) QDEL_LIST(modeswitch_buttons) diff --git a/code/modules/buildmode/buttons.dm b/code/modules/buildmode/buttons.dm index ca48ec2767e17..d9a0a0faf63d8 100644 --- a/code/modules/buildmode/buttons.dm +++ b/code/modules/buildmode/buttons.dm @@ -1,5 +1,5 @@ /atom/movable/screen/buildmode - icon = 'icons/misc/buildmode.dmi' + icon = 'icons/hud/buildmode.dmi' var/datum/buildmode/bd // If we don't do this, we get occluded by item action buttons plane = ABOVE_HUD_PLANE diff --git a/code/modules/buildmode/submodes/outfit.dm b/code/modules/buildmode/submodes/outfit.dm index 5f8e3319cb95d..c3d507bf1e6c7 100644 --- a/code/modules/buildmode/submodes/outfit.dm +++ b/code/modules/buildmode/submodes/outfit.dm @@ -32,11 +32,11 @@ to_chat(c, span_warning("Pick an outfit first.")) return - for (var/item in dollie.get_equipped_items(include_pockets = TRUE)) + for (var/item in dollie.get_equipped_items(INCLUDE_POCKETS)) qdel(item) if(dressuptime != "Naked") dollie.equipOutfit(dressuptime) if(LAZYACCESS(modifiers, RIGHT_CLICK)) - for (var/item in dollie.get_equipped_items(include_pockets = TRUE)) + for (var/item in dollie.get_equipped_items(INCLUDE_POCKETS)) qdel(item) diff --git a/code/modules/capture_the_flag/medieval_sim/medisim_game.dm b/code/modules/capture_the_flag/medieval_sim/medisim_game.dm index 18e1cd13e7ede..118184698a3cc 100644 --- a/code/modules/capture_the_flag/medieval_sim/medisim_game.dm +++ b/code/modules/capture_the_flag/medieval_sim/medisim_game.dm @@ -22,7 +22,7 @@ if(!.) return var/mob/living/carbon/human/human_knight = . - randomize_human(human_knight) + randomize_human_normie(human_knight) human_knight.dna.add_mutation(/datum/mutation/human/medieval, MUT_OTHER) var/oldname = human_knight.name var/title = "error" diff --git a/code/modules/cards/singlecard.dm b/code/modules/cards/singlecard.dm index 0c228fbbb1723..300523254ed7d 100644 --- a/code/modules/cards/singlecard.dm +++ b/code/modules/cards/singlecard.dm @@ -95,7 +95,7 @@ context[SCREENTIP_CONTEXT_LMB] = "Combine cards" return CONTEXTUAL_SCREENTIP_SET - if(istype(held_item, /obj/item/toy/crayon) || istype(held_item, /obj/item/pen)) + if(IS_WRITING_UTENSIL(held_item)) context[SCREENTIP_CONTEXT_LMB] = blank ? "Write on card" : "Mark card" return CONTEXTUAL_SCREENTIP_SET diff --git a/code/modules/cargo/bounties/assistant.dm b/code/modules/cargo/bounties/assistant.dm index 636b4f4791b31..d4ef4b6a148e0 100644 --- a/code/modules/cargo/bounties/assistant.dm +++ b/code/modules/cargo/bounties/assistant.dm @@ -198,11 +198,11 @@ wanted_types = list(/obj/item/pneumatic_cannon/ghetto = TRUE) /datum/bounty/item/assistant/improvised_shells - name = "Improvised Shotgun Shells" - description = "Budget cuts are hitting our security department pretty hard. Send some improvised shotgun shells when you can." + name = "Junk Shells" + description = "Our assistant militia has chewed through all our iron supplies. To stop them making bullets out of station property, we need junk shells, pronto." reward = CARGO_CRATE_VALUE * 4 required_count = 5 - wanted_types = list(/obj/item/ammo_casing/shotgun/improvised = TRUE) + wanted_types = list(/obj/item/ammo_casing/junk = TRUE) /datum/bounty/item/assistant/flamethrower name = "Flamethrower" diff --git a/code/modules/cargo/bounties/bitrunning.dm b/code/modules/cargo/bounties/bitrunning.dm new file mode 100644 index 0000000000000..301f19f0e412c --- /dev/null +++ b/code/modules/cargo/bounties/bitrunning.dm @@ -0,0 +1,48 @@ +/datum/bounty/item/bitrunning/abductor_plush + name = "Abductor Plush" + description = "Rear Admiral Raynes' child won't stop bothering him for one of those little plush aliens. You can get one from the Abductor Ship domain." + reward = CARGO_CRATE_VALUE * 6 + required_count = 1 + wanted_types = list(/obj/item/toy/plush/abductor/agent = TRUE) + +/datum/bounty/item/bitrunning/bubblegum + name = "Bubblegum Plush" + description = "Some of the miners have been talking about the breakroom being too sterile. We need something cute to spruce the place up a bit." + reward = CARGO_CRATE_VALUE * 10 + required_count = 1 + wanted_types = list(/obj/item/toy/plush/bubbleplush = TRUE) + +/datum/bounty/item/bitrunning/honk + name = "Bike Horn" + description = "Bonbon the Clown lost his bike horn when Rear Admiral Raynes hurled him out an airlock for slipping him. Can you get us a replacement?" + reward = CARGO_CRATE_VALUE * 4 + required_count = 1 + wanted_types = list(/obj/item/bikehorn = TRUE) + +/datum/bounty/item/bitrunning/pizzeria + name = "Slice of Pizzeria Pizza" + description = "Admiral Chivara keeps talking about wanting a slice of pizza from that old pizza joint that closed down. Y'know, the one with the robots." + reward = CARGO_CRATE_VALUE * 8 + required_count = 1 + wanted_types = list(/obj/item/food/pizzaslice/meat/pizzeria = TRUE) + +/datum/bounty/item/bitrunning/psyker + name = "Psyker Headset" + description = "We're doing some research on psykers and could use some of their equipment. Can you send us one of their headsets if you find it?" + reward = CARGO_CRATE_VALUE * 8 + required_count = 1 + wanted_types = list(/obj/item/radio/headset/psyker = TRUE) + +/datum/bounty/item/bitrunning/polar + name = "Polar Ushanka" + description = "A bunch of Russians raided one of our outposts and won't leave. They keep swearing at us and demanding we give them vodka and ushankas. Can you send us one?" + reward = CARGO_CRATE_VALUE * 3 + required_count = 1 + wanted_types = list(/obj/item/clothing/head/costume/ushanka/polar = TRUE) + +/datum/bounty/item/bitrunning/syndicate + name = "Syndicate Plush" + description = "We're aware of some contraband that's made it aboard some of our stations that depict Syndicate agents as cute, marketable plushies. Please send us one so we can further investigate." + reward = CARGO_CRATE_VALUE * 8 + required_count = 1 + wanted_types = list(/obj/item/toy/plush/nukeplushie = 1) diff --git a/code/modules/cargo/bounties/mining.dm b/code/modules/cargo/bounties/mining.dm index c49fc982a3ab9..933581bfdf9e2 100644 --- a/code/modules/cargo/bounties/mining.dm +++ b/code/modules/cargo/bounties/mining.dm @@ -46,16 +46,17 @@ /datum/bounty/item/mining/watcher_wreath name = "Watcher Wreaths" description = "Station 14's Research Director thinks they're onto a break-through on the cultural icons of some pagan beliefs. Ship them a few watcher wreaths for analysis." + include_subtypes = FALSE reward = CARGO_CRATE_VALUE * 15 required_count = 3 - wanted_types = list(/obj/item/clothing/neck/wreath = FALSE) + wanted_types = list(/obj/item/clothing/neck/wreath = TRUE) /datum/bounty/item/mining/icewing_wreath name = "Icewing Wreath" description = "We're getting some....weird messages from Station 14's Research Director. And most of what they said was incoherent. But they apparently want an icewing wreath. Could you send them one?" reward = CARGO_CRATE_VALUE * 30 required_count = 1 - wanted_types = list(/obj/item/clothing/neck/wreath/icewing = FALSE) + wanted_types = list(/obj/item/clothing/neck/wreath/icewing = TRUE) /datum/bounty/item/mining/bone_dagger name = "Bone Daggers" diff --git a/code/modules/cargo/bounties/science.dm b/code/modules/cargo/bounties/science.dm index 91d0d71bfc311..67da7ad6b2984 100644 --- a/code/modules/cargo/bounties/science.dm +++ b/code/modules/cargo/bounties/science.dm @@ -97,7 +97,7 @@ //******Anomaly Cores****** /datum/bounty/item/science/ref_anomaly name = "Refined Bluespace Core" - description = "We need a bluespace core to fit in a Phazon. Ship us one, please." + description = "We need a bluespace core to assemble a bag of holding. Ship us one, please." reward = CARGO_CRATE_VALUE * 20 wanted_types = list(/obj/item/assembly/signaler/anomaly/bluespace = TRUE) diff --git a/code/modules/cargo/bounty.dm b/code/modules/cargo/bounty.dm index aa527e847625b..38b26e440273a 100644 --- a/code/modules/cargo/bounty.dm +++ b/code/modules/cargo/bounty.dm @@ -1,5 +1,5 @@ /// How many jobs have bounties, minus the random civ bounties. PLEASE INCREASE THIS NUMBER AS MORE DEPTS ARE ADDED TO BOUNTIES. -#define MAXIMUM_BOUNTY_JOBS 13 +#define MAXIMUM_BOUNTY_JOBS 14 /datum/bounty var/name @@ -77,6 +77,8 @@ chosen_type = pick(subtypesof(/datum/bounty/item/botany)) if(CIV_JOB_ATMOS) chosen_type = pick(subtypesof(/datum/bounty/item/atmospherics)) + if(CIV_JOB_BITRUN) + chosen_type = pick(subtypesof(/datum/bounty/item/bitrunning)) bounty_ref = new chosen_type if(bounty_ref.can_get()) bounty_succeeded = TRUE diff --git a/code/modules/cargo/exports/anomaly.dm b/code/modules/cargo/exports/anomaly.dm new file mode 100644 index 0000000000000..be197e9181cfd --- /dev/null +++ b/code/modules/cargo/exports/anomaly.dm @@ -0,0 +1,4 @@ +/datum/export/inert_anomaly + cost = CARGO_CRATE_VALUE * 8 // Worth a bit less than a normal anomaly core + unit_name = "inert anomaly core" + export_types = list(/obj/item/inert_anomaly) diff --git a/code/modules/cargo/exports/lavaland.dm b/code/modules/cargo/exports/lavaland.dm index 51165be191c87..7102db0dd8f0d 100644 --- a/code/modules/cargo/exports/lavaland.dm +++ b/code/modules/cargo/exports/lavaland.dm @@ -33,6 +33,7 @@ export_types = list( /obj/item/dragons_blood, /obj/item/guardian_creator/miner, + /obj/item/drake_remains, /obj/item/lava_staff, /obj/item/melee/ghost_sword, /obj/item/prisoncube, diff --git a/code/modules/cargo/exports/xenobio.dm b/code/modules/cargo/exports/xenobio.dm index fdd8d38aa4fc6..4b83e97567ece 100644 --- a/code/modules/cargo/exports/xenobio.dm +++ b/code/modules/cargo/exports/xenobio.dm @@ -23,12 +23,12 @@ /datum/export/slime/charged cost = CARGO_CRATE_VALUE unit_name = "\improper EMP-proof slime core" - export_types = list(/obj/item/stock_parts/cell/emproof/slime) + export_types = list(/obj/item/stock_parts/power_store/cell/emproof/slime) /datum/export/slime/hypercharged cost = CARGO_CRATE_VALUE * 1.2 unit_name = "hypercharged slime core" - export_types = list(/obj/item/stock_parts/cell/high/slime_hypercharged) + export_types = list(/obj/item/stock_parts/power_store/cell/high/slime_hypercharged) /datum/export/slime/epic //EPIIIIIIC cost = CARGO_CRATE_VALUE * 0.44 diff --git a/code/modules/cargo/gondolapod.dm b/code/modules/cargo/gondolapod.dm deleted file mode 100644 index 2491084ab7039..0000000000000 --- a/code/modules/cargo/gondolapod.dm +++ /dev/null @@ -1,80 +0,0 @@ -/mob/living/simple_animal/pet/gondola/gondolapod - name = "gondola" - real_name = "gondola" - desc = "The silent walker. This one seems to be part of a delivery agency." - response_help_continuous = "pets" - response_help_simple = "pet" - response_disarm_continuous = "bops" - response_disarm_simple = "bop" - response_harm_continuous = "kicks" - response_harm_simple = "kick" - faction = list(FACTION_GONDOLA) - turns_per_move = 10 - icon = 'icons/obj/supplypods.dmi' - icon_state = "gondola" - icon_living = "gondola" - SET_BASE_PIXEL(-16, -5) //2x2 sprite - layer = TABLE_LAYER//so that deliveries dont appear underneath it - loot = list(/obj/effect/decal/cleanable/blood/gibs, /obj/item/stack/sheet/animalhide/gondola = 2, /obj/item/food/meat/slab/gondola = 2) - //Gondolas aren't affected by cold. - atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_plas" = 0, "max_plas" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) - minbodytemp = 0 - maxbodytemp = 1500 - maxHealth = 200 - health = 200 - del_on_death = TRUE - var/opened = FALSE - 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 - desc = linked_pod.desc - . = ..() - -/mob/living/simple_animal/pet/gondola/gondolapod/update_overlays() - . = ..() - if(opened) - . += "[icon_state]_open" - -/mob/living/simple_animal/pet/gondola/gondolapod/verb/deliver() - set name = "Release Contents" - set category = "Gondola" - set desc = "Release any contents stored within your vast belly." - linked_pod.open_pod(src, forced = TRUE) - -/mob/living/simple_animal/pet/gondola/gondolapod/examine(mob/user) - . = ..() - if (contents.len) - . += span_notice("It looks like it hasn't made its delivery yet.
    ") - else - . += span_notice("It looks like it has already made its delivery.
    ") - -/mob/living/simple_animal/pet/gondola/gondolapod/verb/check() - set name = "Count Contents" - set category = "Gondola" - set desc = "Take a deep look inside youself, and count up what's inside" - var/total = contents.len - if (total) - to_chat(src, span_notice("You detect [total] object\s within your incredibly vast belly.")) - else - to_chat(src, span_notice("A closer look inside yourself reveals... nothing.")) - -/mob/living/simple_animal/pet/gondola/gondolapod/setOpened() - opened = TRUE - layer = initial(layer) - update_appearance() - addtimer(CALLBACK(src, TYPE_PROC_REF(/atom/, setClosed)), 5 SECONDS) - -/mob/living/simple_animal/pet/gondola/gondolapod/setClosed() - opened = FALSE - layer = LOW_MOB_LAYER - update_appearance() - -/mob/living/simple_animal/pet/gondola/gondolapod/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/goodies.dm b/code/modules/cargo/goodies.dm index d733677c5528c..e09c3e2bc958d 100644 --- a/code/modules/cargo/goodies.dm +++ b/code/modules/cargo/goodies.dm @@ -12,21 +12,21 @@ contains = list(/obj/item/modular_computer/pda/clear) /datum/supply_pack/goody/dumdum38 - name = ".38 DumDum Speedloader" + name = ".38 DumDum Speedloader Single-Pack" desc = "Contains one speedloader of .38 DumDum ammunition, good for embedding in soft targets." cost = PAYCHECK_CREW * 2 access_view = ACCESS_WEAPONS contains = list(/obj/item/ammo_box/c38/dumdum) /datum/supply_pack/goody/match38 - name = ".38 Match Grade Speedloader" + name = ".38 Match Grade Speedloader Single-Pack" desc = "Contains one speedloader of match grade .38 ammunition, perfect for showing off trickshots." cost = PAYCHECK_CREW * 2 access_view = ACCESS_WEAPONS contains = list(/obj/item/ammo_box/c38/match) /datum/supply_pack/goody/rubber - name = ".38 Rubber Speedloader" + name = ".38 Rubber Speedloader Single-Pack" desc = "Contains one speedloader of bouncy rubber .38 ammunition, for when you want to bounce your shots off anything and everything." cost = PAYCHECK_CREW * 1.5 access_view = ACCESS_WEAPONS @@ -41,14 +41,14 @@ /datum/supply_pack/goody/stingbang name = "Stingbang Single-Pack" - desc = "Contains one \"stingbang\" grenade, perfect for playing meanhearted pranks." + desc = "Contains one \"Stingbang\" grenade, perfect for playing meanhearted pranks." cost = PAYCHECK_COMMAND * 2.5 access_view = ACCESS_WEAPONS contains = list(/obj/item/grenade/stingbang) /datum/supply_pack/goody/Survivalknives_single name = "Survival Knife Single-Pack" - desc = "Contains one sharpened survival knive. Guaranteed to fit snugly inside any Nanotrasen-standard boot." + desc = "Contains one sharpened survival knife. Guaranteed to fit snugly inside any Nanotrasen-standard boot." cost = PAYCHECK_COMMAND * 1.75 contains = list(/obj/item/knife/combat/survival) @@ -61,21 +61,21 @@ /datum/supply_pack/goody/disabler_single name = "Disabler Single-Pack" - desc = "Contains one disabler, the nonlethal workhorse of Nanotrasen security everywehere. Comes in a energy holster, just in case you happen to have an extra disabler." + desc = "Contains one disabler, the non-lethal workhorse of Nanotrasen security everywhere. Comes in a energy holster, just in case you happen to have an extra disabler." cost = PAYCHECK_COMMAND * 3 access_view = ACCESS_WEAPONS contains = list(/obj/item/storage/belt/holster/energy/disabler) /datum/supply_pack/goody/energy_single name = "Energy Gun Single-Pack" - desc = "Contains one energy gun, capable of firing both nonlethal and lethal blasts of light." + desc = "Contains one energy gun, capable of firing both non-lethal and lethal blasts of light." cost = PAYCHECK_COMMAND * 12 access_view = ACCESS_WEAPONS contains = list(/obj/item/gun/energy/e_gun) /datum/supply_pack/goody/laser_single name = "Laser Gun Single-Pack" - desc = "Contains one laser gun, the lethal workhorse of Nanotrasen security everywehere." + desc = "Contains one laser gun, the lethal workhorse of Nanotrasen security everywhere." cost = PAYCHECK_COMMAND * 6 access_view = ACCESS_WEAPONS contains = list(/obj/item/gun/energy/laser) @@ -161,7 +161,7 @@ contains = list(/obj/item/toy/plush/beeplushie) /datum/supply_pack/goody/blahaj - name = "Shark plushie" + name = "Shark Plushie" desc = "A soft, warm companion for midday naps." cost = PAYCHECK_CREW * 5 contains = list(/obj/item/toy/plush/shark) @@ -179,7 +179,7 @@ contains = list(/obj/item/dyespray) /datum/supply_pack/goody/beach_ball - name = "Beach Ball" + name = "Beach Ball Single-Pack" // uses desc from item cost = PAYCHECK_CREW contains = list(/obj/item/toy/beach_ball/branded) @@ -208,19 +208,19 @@ contains = list(/obj/item/food/ready_donk) /datum/supply_pack/goody/pill_mutadone - name = "Emergency Mutadone Pill" + name = "Emergency Mutadone Pill Single-Pack" desc = "A single pill for curing genetic defects. Useful for when you can't procure one from medbay." cost = PAYCHECK_CREW * 2.5 contains = list(/obj/item/reagent_containers/pill/mutadone) /datum/supply_pack/goody/rapid_lighting_device - name = "Rapid Lighting Device (RLD)" + name = "Rapid Lighting Device (RLD) Single-Pack" desc = "A device used to rapidly provide lighting sources to an area. Reload with iron, plasteel, glass or compressed matter cartridges." cost = PAYCHECK_CREW * 10 contains = list(/obj/item/construction/rld) /datum/supply_pack/goody/fishing_toolbox - name = "Fishing toolbox" + name = "Fishing Toolbox" desc = "Complete toolbox set for your fishing adventure. Advanced hooks and lines sold separetely." cost = PAYCHECK_CREW * 2 contains = list(/obj/item/storage/toolbox/fishing) @@ -238,86 +238,86 @@ contains = list(/obj/item/storage/box/fishing_lines) /datum/supply_pack/goody/fishing_hook_rescue - name = "Rescue Fishing Hook" + name = "Rescue Fishing Hook Single-Pack" desc = "For when your fellow miner has inevitably fallen into a chasm, and it's up to you to save them." cost = PAYCHECK_CREW * 12 contains = list(/obj/item/fishing_hook/rescue) /datum/supply_pack/goody/premium_bait - name = "Deluxe fishing bait" + name = "Deluxe Fishing Bait Single-Pack" desc = "When the standard variety is not good enough for you." cost = PAYCHECK_CREW contains = list(/obj/item/bait_can/worm/premium) /datum/supply_pack/goody/fish_feed - name = "Can of fish food" + name = "Can of Fish Food Single-Pack" desc = "For keeping your little friends fed and alive." cost = PAYCHECK_CREW * 1 contains = list(/obj/item/fish_feed) /datum/supply_pack/goody/naturalbait - name = "Freshness Jars full of Natural Bait" + name = "Freshness Jars full of Natural Bait Single-Pack" desc = "Homemade in the Spinward Sector." cost = PAYCHECK_CREW * 4 //rock on contains = list(/obj/item/storage/pill_bottle/naturalbait) /datum/supply_pack/goody/telescopic_fishing_rod - name = "Telescopic Fishing Rod" + name = "Telescopic Fishing Rod Single-Pack" desc = "A collapsible fishing rod that can fit within a backpack." cost = PAYCHECK_CREW * 8 contains = list(/obj/item/fishing_rod/telescopic) /datum/supply_pack/goody/fish_analyzer - name = "Fish Analyzer" + name = "Fish Analyzer Single-Pack" desc = "A single analyzer to monitor fish's status and traits with, in case you don't have the technology to print one." cost = PAYCHECK_CREW * 2.5 contains = list(/obj/item/fish_analyzer) /datum/supply_pack/goody/fish_catalog - name = "Fishing Catalog" + name = "Fishing Catalog Single-Pack" desc = "A catalog containing all the fishy info you'll ever need." cost = PAYCHECK_LOWER contains = list(/obj/item/book/manual/fish_catalog) /datum/supply_pack/goody/coffee_mug - name = "Coffee Mug" + name = "Coffee Mug Single-Pack" desc = "A bog standard coffee mug, for drinking coffee." cost = PAYCHECK_LOWER contains = list(/obj/item/reagent_containers/cup/glass/mug) /datum/supply_pack/goody/nt_mug - name = "Nanotrasen Coffee Mug" + name = "Nanotrasen Coffee Mug Single-Pack" desc = "A blue mug bearing the logo of your corporate masters. Usually given out at inductions or events, we'll send one out special for a nominal fee." cost = PAYCHECK_LOWER contains = list(/obj/item/reagent_containers/cup/glass/mug/nanotrasen) /datum/supply_pack/goody/coffee_cartridge - name = "Coffee Cartridge" + name = "Coffee Cartridge Single-Pack" desc = "A basic cartridge for a coffeemaker. Makes 4 pots." cost = PAYCHECK_LOWER contains = list(/obj/item/coffee_cartridge) /datum/supply_pack/goody/coffee_cartridge_fancy - name = "Fancy Coffee Cartridge" + name = "Fancy Coffee Cartridge Single-Pack" desc = "A fancy cartridge for a coffeemaker. Makes 4 pots." cost = PAYCHECK_CREW contains = list(/obj/item/coffee_cartridge/fancy) /datum/supply_pack/goody/coffeepot - name = "Coffeepot" + name = "Coffeepot Single-Pack" desc = "A standard-sized coffeepot, for use with a coffeemaker." cost = PAYCHECK_CREW contains = list(/obj/item/reagent_containers/cup/coffeepot) /datum/supply_pack/goody/climbing_hook - name = "Climbing hook" + name = "Climbing Hook Single-Pack" desc = "A less cheap imported climbing hook. Absolutely no use outside of planetary stations." cost = PAYCHECK_CREW * 5 contains = list(/obj/item/climbing_hook) /datum/supply_pack/goody/double_barrel - name = "Double Barrel Shotgun" - desc = "Lost your beloved bunny to a demonic invasion? Clown broke in and stole your beloved gun? No worries! Get a new gun so long as you can pay the absurd fees." + name = "Double-barreled Shotgun Single-Pack" + desc = "Lost your beloved bunny to a demonic invasion? Clown broke in and stole your beloved gun? No worries! Get a new gun as long as you can pay the absurd fees." cost = PAYCHECK_COMMAND * 18 access_view = ACCESS_WEAPONS contains = list(/obj/item/gun/ballistic/shotgun/doublebarrel) diff --git a/code/modules/cargo/markets/market_item.dm b/code/modules/cargo/markets/market_item.dm index 51651ffdc47f6..21ff3d01deb3b 100644 --- a/code/modules/cargo/markets/market_item.dm +++ b/code/modules/cargo/markets/market_item.dm @@ -16,6 +16,9 @@ /// Path to or the item itself what this entry is for, this should be set even if you override spawn_item to spawn your item. var/atom/movable/item + /// Used to exclude abstract/special paths from the unit test if the value matches the type itself. + var/abstract_path + /// Minimum price for the item if generated randomly. var/price_min = 0 /// Maximum price for the item if generated randomly. @@ -25,7 +28,7 @@ /// Maximum amount that there should be of this item in the market if generated randomly. var/stock_max = 0 /// Probability for this item to be available. Used by SSblackmarket on init. - var/availability_prob = 0 + var/availability_prob ///The identifier for the market item, generated on runtime and used to access them in the market categories. var/identifier diff --git a/code/modules/cargo/markets/market_items/clothing.dm b/code/modules/cargo/markets/market_items/clothing.dm index bf705e8b57251..82bda848eb8e9 100644 --- a/code/modules/cargo/markets/market_items/clothing.dm +++ b/code/modules/cargo/markets/market_items/clothing.dm @@ -1,5 +1,6 @@ /datum/market_item/clothing category = "Clothing" + abstract_path = /datum/market_item/clothing /datum/market_item/clothing/ninja_mask name = "Space Ninja Mask" diff --git a/code/modules/cargo/markets/market_items/consumables.dm b/code/modules/cargo/markets/market_items/consumables.dm index 5550d31c5f865..f002ff994249d 100644 --- a/code/modules/cargo/markets/market_items/consumables.dm +++ b/code/modules/cargo/markets/market_items/consumables.dm @@ -1,5 +1,6 @@ /datum/market_item/consumable category = "Consumables" + abstract_path = /datum/market_item/consumable /datum/market_item/consumable/clown_tears name = "Bottle of Clown's Tears" diff --git a/code/modules/cargo/markets/market_items/hostages.dm b/code/modules/cargo/markets/market_items/hostages.dm index 6551ee6156b46..ed5b1f10a7fcf 100644 --- a/code/modules/cargo/markets/market_items/hostages.dm +++ b/code/modules/cargo/markets/market_items/hostages.dm @@ -1,6 +1,7 @@ ///A special category for mobs captured by pirates, tots and contractors, should someone ever want to get them back in advance. /datum/market_item/hostage category = "Hostages" + abstract_path = /datum/market_item/hostage stock = 1 availability_prob = 100 shipping_override = list(SHIPPING_METHOD_LTSRBT = 0, SHIPPING_METHOD_SUPPLYPOD = 350) diff --git a/code/modules/cargo/markets/market_items/misc.dm b/code/modules/cargo/markets/market_items/misc.dm index de0fcaa9256a4..435396c15f251 100644 --- a/code/modules/cargo/markets/market_items/misc.dm +++ b/code/modules/cargo/markets/market_items/misc.dm @@ -1,5 +1,6 @@ /datum/market_item/misc category = "Miscellaneous" + abstract_path = /datum/market_item/misc /datum/market_item/misc/Clear_PDA name = "Clear PDA" @@ -53,6 +54,7 @@ /datum/market_item/misc/shove_blocker name = "MOD Bulwark Module" desc = "You have no idea how much effort it took us to extract this module from that damn safeguard MODsuit last shift." + item = /obj/item/mod/module/shove_blocker price_min = CARGO_CRATE_VALUE * 4 price_max = CARGO_CRATE_VALUE * 5.75 stock_max = 1 @@ -108,6 +110,7 @@ /datum/market_item/misc/jawed_hook name = "Jawed Fishing Hook" desc = "The thing ya use if y'are strugglin' with fishes. Just rememeber to whoop yer rod before it's too late, 'cause this thing's gonna hurt them like an Arkansas toothpick." + item = /obj/item/fishing_hook/jaws price_min = CARGO_CRATE_VALUE * 0.75 price_max = CARGO_CRATE_VALUE * 2 stock_max = 3 diff --git a/code/modules/cargo/markets/market_items/stolen_goods.dm b/code/modules/cargo/markets/market_items/stolen_goods.dm index c9c17f1d2b6c8..02a72f05d26d1 100644 --- a/code/modules/cargo/markets/market_items/stolen_goods.dm +++ b/code/modules/cargo/markets/market_items/stolen_goods.dm @@ -1,6 +1,7 @@ ///A special category for goods stolen by spies for their bounties. /datum/market_item/stolen_good category = "Fenced Goods" + abstract_path = /datum/market_item/stolen_good stock = 1 availability_prob = 100 diff --git a/code/modules/cargo/markets/market_items/tools.dm b/code/modules/cargo/markets/market_items/tools.dm index 5d036fae0ef5b..9576810b3a3c9 100644 --- a/code/modules/cargo/markets/market_items/tools.dm +++ b/code/modules/cargo/markets/market_items/tools.dm @@ -1,5 +1,6 @@ /datum/market_item/tool category = "Tools" + abstract_path = /datum/market_item/tool /datum/market_item/tool/blackmarket_telepad name = "Black Market LTSRBT" diff --git a/code/modules/cargo/markets/market_items/weapons.dm b/code/modules/cargo/markets/market_items/weapons.dm index 11f242d57c874..3323e16916234 100644 --- a/code/modules/cargo/markets/market_items/weapons.dm +++ b/code/modules/cargo/markets/market_items/weapons.dm @@ -1,5 +1,6 @@ /datum/market_item/weapon category = "Weapons" + abstract_path = /datum/market_item/weapon /datum/market_item/weapon/bear_trap name = "Bear Trap" diff --git a/code/modules/cargo/markets/market_uplink.dm b/code/modules/cargo/markets/market_uplink.dm index da86161e46ab2..df8c8eb36a507 100644 --- a/code/modules/cargo/markets/market_uplink.dm +++ b/code/modules/cargo/markets/market_uplink.dm @@ -1,7 +1,7 @@ /obj/item/market_uplink name = "\improper Market Uplink" desc = "An market uplink. Usable with markets. You probably shouldn't have this!" - icon = 'icons/obj/blackmarket.dmi' + icon = 'icons/obj/devices/blackmarket.dmi' icon_state = "uplink" // UI variables. @@ -151,7 +151,7 @@ /obj/item/market_uplink/blackmarket name = "\improper Black Market Uplink" desc = "An illegal black market uplink. If command wanted you to have these, they wouldn't have made it so hard to get one." - icon = 'icons/obj/blackmarket.dmi' + icon = 'icons/obj/devices/blackmarket.dmi' icon_state = "uplink" //The original black market uplink accessible_markets = list(/datum/market/blackmarket) diff --git a/code/modules/cargo/packs/emergency.dm b/code/modules/cargo/packs/emergency.dm index b48ef268da683..2d19c276ec115 100644 --- a/code/modules/cargo/packs/emergency.dm +++ b/code/modules/cargo/packs/emergency.dm @@ -6,8 +6,8 @@ name = "Biological Emergency Crate" desc = "This crate includes 2 complete bio suits, along with a box containing sterile masks and latex gloves, providing effective protection against viruses." cost = CARGO_CRATE_VALUE * 2 - contains = list(/obj/item/clothing/head/bio_hood = 2, - /obj/item/clothing/suit/bio_suit = 2, + contains = list(/obj/item/clothing/head/bio_hood/general = 2, + /obj/item/clothing/suit/bio_suit/general = 2, /obj/item/storage/bag/bio, /obj/item/reagent_containers/syringe/antiviral = 2, /obj/item/clothing/gloves/latex/nitrile = 2, diff --git a/code/modules/cargo/packs/engineering.dm b/code/modules/cargo/packs/engineering.dm index 98e1162b5f6a7..771cba47df61d 100644 --- a/code/modules/cargo/packs/engineering.dm +++ b/code/modules/cargo/packs/engineering.dm @@ -92,7 +92,7 @@ name = "Power Cell Crate" desc = "Looking for power overwhelming? Look no further. Contains three high-voltage power cells." cost = CARGO_CRATE_VALUE * 3 - contains = list(/obj/item/stock_parts/cell/high = 3) + contains = list(/obj/item/stock_parts/power_store/cell/high = 3) crate_name = "power cell crate" crate_type = /obj/structure/closet/crate/engineering/electrical diff --git a/code/modules/cargo/packs/imports.dm b/code/modules/cargo/packs/imports.dm index 94849d61ef527..3f7645559ff7f 100644 --- a/code/modules/cargo/packs/imports.dm +++ b/code/modules/cargo/packs/imports.dm @@ -43,7 +43,7 @@ /datum/supply_pack/imports/duct_spider name = "Duct Spider Crate" desc = "Awww! Straight from the Australicus sector to your station's ventilation system!" - cost = CARGO_CRATE_VALUE * 6 + cost = CARGO_CRATE_VALUE * 4 contains = list(/mob/living/basic/spider/maintenance) crate_name = "duct spider crate" crate_type = /obj/structure/closet/crate/critter @@ -52,7 +52,7 @@ /datum/supply_pack/imports/duct_spider/dangerous name = "Duct Spider Crate?" desc = "Wait, is this the right crate? It has a frowny face, what does that mean?" - cost = CARGO_CRATE_VALUE * 6 + cost = CARGO_CRATE_VALUE * 4 contains = list(/mob/living/basic/spider/giant/hunter) contraband = TRUE diff --git a/code/modules/cargo/packs/livestock.dm b/code/modules/cargo/packs/livestock.dm index 899216ffb5bef..62008d8be48e0 100644 --- a/code/modules/cargo/packs/livestock.dm +++ b/code/modules/cargo/packs/livestock.dm @@ -5,7 +5,7 @@ /datum/supply_pack/critter/parrot name = "Bird Crate" desc = "Contains five expert telecommunication birds." - cost = CARGO_CRATE_VALUE * 8 + cost = CARGO_CRATE_VALUE * 4 contains = list(/mob/living/basic/parrot) crate_name = "parrot crate" @@ -30,7 +30,7 @@ /datum/supply_pack/critter/cat name = "Cat Crate" desc = "The cat goes meow! Comes with a collar and a nice cat toy! Cheeseburger not included."//i can't believe im making this reference - cost = CARGO_CRATE_VALUE * 10 //Cats are worth as much as corgis. + cost = CARGO_CRATE_VALUE * 4 //Cats are worth as much as corgis. contains = list( /mob/living/basic/pet/cat, /obj/item/clothing/neck/petcollar, @@ -51,7 +51,7 @@ /datum/supply_pack/critter/chick name = "Chicken Crate" desc = "The chicken goes bwaak!" - cost = CARGO_CRATE_VALUE * 4 + cost = CARGO_CRATE_VALUE * 2 contains = list(/mob/living/basic/chick) crate_name = "chicken crate" @@ -59,7 +59,7 @@ name = "Corgi Crate" desc = "Considered the optimal dog breed by thousands of research scientists, this Corgi is but \ one dog from the millions of Ian's noble bloodline. Comes with a cute collar!" - cost = CARGO_CRATE_VALUE * 10 + cost = CARGO_CRATE_VALUE * 4 contains = list(/mob/living/basic/pet/dog/corgi, /obj/item/clothing/neck/petcollar, ) @@ -76,28 +76,28 @@ /datum/supply_pack/critter/cow name = "Cow Crate" desc = "The cow goes moo! Contains one cow." - cost = CARGO_CRATE_VALUE * 6 + cost = CARGO_CRATE_VALUE * 3 contains = list(/mob/living/basic/cow) crate_name = "cow crate" /datum/supply_pack/critter/sheep name = "Sheep Crate" desc = "The sheep goes BAAAA! Contains one sheep." - cost = CARGO_CRATE_VALUE * 6 + cost = CARGO_CRATE_VALUE * 3 contains = list(/mob/living/basic/sheep) crate_name = "sheep crate" /datum/supply_pack/critter/pig name = "Pig Crate" desc = "The pig goes oink! Contains one pig." - cost = CARGO_CRATE_VALUE * 6 + cost = CARGO_CRATE_VALUE * 3 contains = list(/mob/living/basic/pig) crate_name = "pig crate" /datum/supply_pack/critter/pony name = "Pony Crate" desc = "Ponies, yay! (Just the one.)" - cost = CARGO_CRATE_VALUE * 6 + cost = CARGO_CRATE_VALUE * 5 contains = list(/mob/living/basic/pony) crate_name = "pony crate" @@ -124,7 +124,7 @@ name = "Exotic Corgi Crate" desc = "Corgi fit for a king, this corgi comes in a unique color to signify their superiority. \ Comes with a cute collar!" - cost = CARGO_CRATE_VALUE * 11 + cost = CARGO_CRATE_VALUE * 7 contains = list(/mob/living/basic/pet/dog/corgi/exoticcorgi, /obj/item/clothing/neck/petcollar, ) @@ -133,7 +133,7 @@ /datum/supply_pack/critter/fox name = "Fox Crate" desc = "The fox goes...? Contains one fox. Comes with a collar!"//what does the fox say - cost = CARGO_CRATE_VALUE * 10 + cost = CARGO_CRATE_VALUE * 4 contains = list( /mob/living/basic/pet/fox, /obj/item/clothing/neck/petcollar, @@ -143,14 +143,14 @@ /datum/supply_pack/critter/goat name = "Goat Crate" desc = "The goat goes baa! Contains one goat. Warranty void if used as a replacement for Pete." - cost = CARGO_CRATE_VALUE * 5 + cost = CARGO_CRATE_VALUE * 3 contains = list(/mob/living/basic/goat) crate_name = "goat crate" /datum/supply_pack/critter/rabbit name = "Rabbit Crate" desc = "What noise do rabbits even make? Contains one rabbit." - cost = CARGO_CRATE_VALUE * 4 + cost = CARGO_CRATE_VALUE * 2 contains = list(/mob/living/basic/rabbit) crate_name = "rabbit crate" @@ -158,7 +158,7 @@ name = "Mothroach Crate" desc = "Put the mothroach on your head and find out what true cuteness looks like. \ Contains one mothroach." - cost = CARGO_CRATE_VALUE * 4 + cost = CARGO_CRATE_VALUE * 2 contains = list(/mob/living/basic/mothroach) crate_name = "mothroach crate" @@ -173,7 +173,7 @@ /datum/supply_pack/critter/pug name = "Pug Crate" desc = "Like a normal dog, but... squished. Contains one pug. Comes with a nice collar!" - cost = CARGO_CRATE_VALUE * 10 + cost = CARGO_CRATE_VALUE * 4 contains = list(/mob/living/basic/pet/dog/pug, /obj/item/clothing/neck/petcollar, ) @@ -183,7 +183,7 @@ name = "Bull Terrier Crate" desc = "Like a normal dog, but with a head the shape of an egg. Contains one bull terrier. \ Comes with a nice collar!" - cost = CARGO_CRATE_VALUE * 10 + cost = CARGO_CRATE_VALUE * 4 contains = list(/mob/living/basic/pet/dog/bullterrier, /obj/item/clothing/neck/petcollar, ) @@ -193,7 +193,7 @@ name = "Snake Crate" desc = "Tired of these MOTHER FUCKING snakes on this MOTHER FUCKING space station? \ Then this isn't the crate for you. Contains three venomous snakes." - cost = CARGO_CRATE_VALUE * 6 + cost = CARGO_CRATE_VALUE * 3 contains = list(/mob/living/basic/snake = 3) crate_name = "snake crate" @@ -201,7 +201,7 @@ name = "Amphibian Friends Crate" desc = "Two disgustingly cute slimey friends. Cytologists love them! \ Contains one frog and one axolotl. Warning: Frog may have hallucinogenic properties." - cost = CARGO_CRATE_VALUE * 4 + cost = CARGO_CRATE_VALUE * 2 contains = list( /mob/living/basic/axolotl, /mob/living/basic/frog, @@ -211,7 +211,7 @@ /datum/supply_pack/critter/lizard name = "Lizard Crate" desc = "Hisss! Containssss a friendly lizard. Not to be confusssed with a lizardperssson." - cost = CARGO_CRATE_VALUE * 4 + cost = CARGO_CRATE_VALUE * 2 contains = list(/mob/living/basic/lizard) crate_name = "lizard crate" @@ -219,7 +219,7 @@ name = "Garden Gnome Crate" desc = "Collect them all for your garden. Comes with three!" hidden = TRUE - cost = CARGO_CRATE_VALUE * 20 + cost = CARGO_CRATE_VALUE * 15 contains = list(/mob/living/basic/garden_gnome) crate_name = "garden gnome crate" discountable = SUPPLY_PACK_RARE_DISCOUNTABLE diff --git a/code/modules/cargo/packs/science.dm b/code/modules/cargo/packs/science.dm index 425137cd9ed77..4059b330e2f66 100644 --- a/code/modules/cargo/packs/science.dm +++ b/code/modules/cargo/packs/science.dm @@ -59,6 +59,16 @@ crate_name = "raw vortex anomaly" crate_type = /obj/structure/closet/crate/secure/science +/datum/supply_pack/science/raw_ectoplasm_anomaly + name = "Raw Ectoplasm Anomaly" + desc = "Contains the raw core of a ectoplasm anomaly, ready to be implosion-compressed into a powerful artifact." + cost = CARGO_CRATE_VALUE * 10 + access = ACCESS_ORDNANCE + access_view = ACCESS_ORDNANCE + contains = list(/obj/item/raw_anomaly_core/ectoplasm) + crate_name = "raw ectoplasm anomaly" + crate_type = /obj/structure/closet/crate/secure/science + /datum/supply_pack/science/raw_bluespace_anomaly name = "Raw Bluespace Anomaly" desc = "Contains the raw core of a bluespace anomaly, ready to be implosion-compressed into a powerful artifact." diff --git a/code/modules/cargo/packs/security.dm b/code/modules/cargo/packs/security.dm index b8e93f2815c0d..05360fe913f0a 100644 --- a/code/modules/cargo/packs/security.dm +++ b/code/modules/cargo/packs/security.dm @@ -169,6 +169,7 @@ /obj/item/clothing/mask/whistle, /obj/item/conversion_kit, ) + crate_name = "traditional equipment crate" discountable = SUPPLY_PACK_RARE_DISCOUNTABLE /// Armory packs @@ -213,9 +214,12 @@ /datum/supply_pack/security/armory/dragnet name = "DRAGnet Crate" desc = "Contains three \"Dynamic Rapid-Apprehension of the Guilty\" netting devices, \ - a recent breakthrough in law enforcement prisoner management technology." + a recent breakthrough in law enforcement prisoner management technology. Includes a DRAGnet beacon." cost = CARGO_CRATE_VALUE * 5 - contains = list(/obj/item/gun/energy/e_gun/dragnet = 3) + contains = list( + /obj/item/gun/energy/e_gun/dragnet = 3, + /obj/item/dragnet_beacon = 1 + ) crate_name = "\improper DRAGnet crate" /datum/supply_pack/security/armory/energy diff --git a/code/modules/cargo/packs/stock_market_items.dm b/code/modules/cargo/packs/stock_market_items.dm deleted file mode 100644 index 6206e8d0f4c93..0000000000000 --- a/code/modules/cargo/packs/stock_market_items.dm +++ /dev/null @@ -1,35 +0,0 @@ -/** - * todo: make this a supply_pack/custom. Drop pod? ohoho yes. Would be VERY fun. - */ -/datum/supply_pack/market_materials - name = "A Single Sheet of Bananium" - desc = "Going market price for this kind of sheet, by Australicus Industrial Mining." - cost = CARGO_CRATE_VALUE * 2 - crate_name = "mineral stock sheet crate" - group = "Canisters & Materials" - /// What material we are trying to buy sheets of? - var/datum/material/material - /// How many sheets of the material we are trying to buy at once? - var/amount - -/datum/supply_pack/market_materials/get_cost() - for(var/datum/material/mat as anything in SSstock_market.materials_prices) - if(material == mat) - return SSstock_market.materials_prices[mat] * amount - -/datum/supply_pack/market_materials/fill(obj/structure/closet/crate/C) - . = ..() - new material.sheet_type(C, amount) - -/datum/supply_pack/market_materials/iron - name = "Iron Sheets" - crate_name = "iron stock crate" - material = /datum/material/iron -MARKET_QUANTITY_HELPERS(/datum/supply_pack/market_materials/iron) - - -/datum/supply_pack/market_materials/gold - name = "Gold Sheets" - crate_name = "gold stock crate" - material = /datum/material/gold -MARKET_QUANTITY_HELPERS(/datum/supply_pack/market_materials/gold) diff --git a/code/modules/cargo/supplypod.dm b/code/modules/cargo/supplypod.dm index 511f9af6541e8..417e5519ba00f 100644 --- a/code/modules/cargo/supplypod.dm +++ b/code/modules/cargo/supplypod.dm @@ -99,6 +99,23 @@ delays = list(POD_TRANSIT = 20, POD_FALLING = 4, POD_OPENING = 30, POD_LEAVING = 30) resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF +/obj/structure/closet/supplypod/centcompod/sisyphus + delays = list(POD_TRANSIT = 0, POD_FALLING = 0, POD_OPENING = 0, POD_LEAVING = 0.2) + reverse_delays = list(POD_TRANSIT = 0, POD_FALLING = 1.5 SECONDS, POD_OPENING = 0.6 SECONDS, POD_LEAVING = 0) + custom_rev_delay = TRUE + effectStealth = TRUE + reversing = TRUE + reverse_option_list = list( + "Mobs" = TRUE, + "Objects" = FALSE, + "Anchored" = FALSE, + "Underfloor" = FALSE, + "Wallmounted" = FALSE, + "Floors" = FALSE, + "Walls" = FALSE, + "Mecha" = TRUE, + ) + /obj/structure/closet/supplypod/back_to_station name = "blood-red supply pod" desc = "An intimidating supply pod, covered in the blood-red markings" @@ -335,7 +352,7 @@ qdel(src) return if (style == STYLE_GONDOLA) //Checks if we are supposed to be a gondola pod. If so, create a gondolapod mob, and move this pod to nullspace. I'd like to give a shout out, to my man oranges - var/mob/living/simple_animal/pet/gondola/gondolapod/benis = new(turf_underneath, src) + var/mob/living/basic/pet/gondola/gondolapod/benis = new(turf_underneath, src) benis.contents |= contents //Move the contents of this supplypod into the gondolapod mob. for (var/mob/living/mob_in_pod in benis.contents) mob_in_pod.reset_perspective(null) diff --git a/code/modules/cargo/supplypod_beacon.dm b/code/modules/cargo/supplypod_beacon.dm index 8f1166002def8..2d9a618bb414e 100644 --- a/code/modules/cargo/supplypod_beacon.dm +++ b/code/modules/cargo/supplypod_beacon.dm @@ -103,7 +103,7 @@ return CLICK_ACTION_SUCCESS /obj/item/supplypod_beacon/attackby(obj/item/W, mob/user) - if(!istype(W, /obj/item/pen)) //give a tag that is visible from the linked express console + if(IS_WRITING_UTENSIL(W)) //give a tag that is visible from the linked express console return ..() var/new_beacon_name = tgui_input_text(user, "What would you like the tag to be?", "Beacon Tag", max_length = MAX_NAME_LEN) if(isnull(new_beacon_name)) diff --git a/code/modules/cargo/universal_scanner.dm b/code/modules/cargo/universal_scanner.dm index 80a821a1f5e29..fdcbc9ba2bb9b 100644 --- a/code/modules/cargo/universal_scanner.dm +++ b/code/modules/cargo/universal_scanner.dm @@ -58,17 +58,16 @@ icon_state = "[choice]" playsound(src, 'sound/machines/click.ogg', 40, TRUE) -/obj/item/universal_scanner/afterattack(obj/object, mob/user, proximity) - . = ..() - if(!istype(object) || !proximity) - return - . |= AFTERATTACK_PROCESSED_ITEM +/obj/item/universal_scanner/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + if(!isobj(interacting_with)) + return NONE if(scanning_mode == SCAN_EXPORTS) - export_scan(object, user) - return . + export_scan(interacting_with, user) + return ITEM_INTERACT_SUCCESS if(scanning_mode == SCAN_PRICE_TAG) - price_tag(target = object, user = user) - return . + price_tag(interacting_with, user) + return ITEM_INTERACT_SUCCESS + return NONE /obj/item/universal_scanner/attackby(obj/item/attacking_item, mob/user, params) . = ..() @@ -123,11 +122,12 @@ new_custom_price = chosen_price to_chat(user, span_notice("[src] will now give things a [new_custom_price] cr tag.")) -/obj/item/universal_scanner/CtrlClick(mob/user) - . = ..() +/obj/item/universal_scanner/item_ctrl_click(mob/user) + . = CLICK_ACTION_BLOCKING if(scanning_mode == SCAN_SALES_TAG) payments_acc = null to_chat(user, span_notice("You clear the registered account.")) + return CLICK_ACTION_SUCCESS /obj/item/universal_scanner/click_alt(mob/user) if(!scanning_mode == SCAN_SALES_TAG) diff --git a/code/modules/client/client_colour.dm b/code/modules/client/client_colour.dm index 1209b5c35823c..5dbcaa0f824de 100644 --- a/code/modules/client/client_colour.dm +++ b/code/modules/client/client_colour.dm @@ -198,6 +198,13 @@ /datum/client_colour/glass_colour/gray colour = "#cccccc" +///A client colour that makes the screen look a bit more grungy, halloweenesque even. +/datum/client_colour/halloween_helmet + colour = list(0.75,0.13,0.13,0, 0.13,0.7,0.13,0, 0.13,0.13,0.75,0, -0.06,-0.09,-0.08,1, 0,0,0,0) + +/datum/client_colour/flash_hood + colour = COLOR_MATRIX_POLAROID + /datum/client_colour/glass_colour/nightmare colour = list(255,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,1, -130,0,0,0) //every color is either red or black diff --git a/code/modules/client/client_defines.dm b/code/modules/client/client_defines.dm index 3272620a86555..2b60b3bdbb2e4 100644 --- a/code/modules/client/client_defines.dm +++ b/code/modules/client/client_defines.dm @@ -197,6 +197,7 @@ var/list/parallax_layers var/list/parallax_layers_cached + var/atom/movable/screen/parallax_home/parallax_rock ///this is the last recorded client eye by SSparallax/fire() var/atom/movable/movingmob var/turf/previous_turf @@ -206,8 +207,8 @@ var/parallax_movedir = 0 /// How many parallax layers to show our client var/parallax_layers_max = 4 - /// Timer for the area directional animation - var/parallax_animate_timer + /// Timers for the area directional animation, one for each layer + var/list/parallax_animate_timers /// Do we want to do parallax animations at all? /// Exists to prevent laptop fires var/do_parallax_animations = TRUE @@ -267,3 +268,6 @@ /// Loot panel for the client var/datum/lootpanel/loot_panel + + ///Which ambient sound this client is currently being provided. + var/current_ambient_sound diff --git a/code/modules/client/client_procs.dm b/code/modules/client/client_procs.dm index 913be33118271..66fde8c2f1a72 100644 --- a/code/modules/client/client_procs.dm +++ b/code/modules/client/client_procs.dm @@ -121,6 +121,9 @@ GLOBAL_LIST_INIT(blacklisted_builds, list( no_tgui_adminhelp(input(src, "Enter your ahelp", "Ahelp") as null|message) return + if(href_list["commandbar_typing"]) + handle_commandbar_typing(href_list) + switch(href_list["_src_"]) if("holder") hsrc = holder @@ -210,7 +213,8 @@ GLOBAL_LIST_INIT(blacklisted_builds, list( return TRUE if(src.last_message_count >= SPAM_TRIGGER_WARNING) //"auto-ban" sends the message that the cold and uncaring gamecode has been designed to quiash you like a bug in short measure should you continue, and it's quite intentional that the user isn't told exactly what that entails. - to_chat(src, span_danger("You are nearing the auto-ban limit for identical messages.")) + to_chat(src, span_userdanger("You are nearing the auto-ban limit for identical messages.")) + mob.balloon_alert(mob, "stop spamming!") return FALSE else last_message = message @@ -254,6 +258,8 @@ GLOBAL_LIST_INIT(blacklisted_builds, list( tgui_say = new(src, "tgui_say") + initialize_commandbar_spy() + set_right_click_menu_mode(TRUE) GLOB.ahelp_tickets.ClientLogin(src) @@ -502,7 +508,6 @@ GLOBAL_LIST_INIT(blacklisted_builds, list( "[key_name(src)] (IP: [address], ID: [computer_id]) is a new BYOND account [account_age] day[(account_age == 1?"":"s")] old, created on [account_join_date].[new_player_alert_role ? " <@&[new_player_alert_role]>" : ""]" ) scream_about_watchlists(src) - check_ip_intel() validate_key_in_db() // If we aren't already generating a ban cache, fire off a build request // This way hopefully any users of request_ban_cache will never need to yield @@ -531,7 +536,8 @@ GLOBAL_LIST_INIT(blacklisted_builds, list( if(!winexists(src, "asset_cache_browser")) // The client is using a custom skin, tell them. to_chat(src, span_warning("Unable to access asset cache browser, if you are using a custom skin file, please allow DS to download the updated version, if you are not, then make a bug report. This is not a critical issue but can cause issues with resource downloading, as it is impossible to know when extra resources arrived to you.")) - update_ambience_pref() + update_ambience_pref(prefs.read_preference(/datum/preference/toggle/sound_ambience)) + check_ip_intel() //This is down here because of the browse() calls in tooltip/New() if(!tooltips) @@ -541,7 +547,7 @@ GLOBAL_LIST_INIT(blacklisted_builds, list( initialize_menus() loot_panel = new(src) - + view_size = new(src, getScreenSize(prefs.read_preference(/datum/preference/toggle/widescreen))) view_size.resetFormat() view_size.setZoomMode() @@ -583,26 +589,10 @@ GLOBAL_LIST_INIT(blacklisted_builds, list( if(credits) QDEL_LIST(credits) if(holder) - adminGreet(1) holder.owner = null GLOB.admins -= src - if (!GLOB.admins.len && SSticker.IsRoundInProgress()) //Only report this stuff if we are currently playing. - var/cheesy_message = pick( - "I have no admins online!",\ - "I'm all alone :(",\ - "I'm feeling lonely :(",\ - "I'm so lonely :(",\ - "Why does nobody love me? :(",\ - "I want a man :(",\ - "Where has everyone gone?",\ - "I need a hug :(",\ - "Someone come hold me :(",\ - "I need someone on me :(",\ - "What happened? Where has everyone gone?",\ - "Forever alone :("\ - ) + handle_admin_logout() - send2adminchat("Server", "[cheesy_message] (No admins online)") QDEL_LIST_ASSOC_VAL(char_render_holders) SSambience.remove_ambience_client(src) @@ -612,6 +602,9 @@ GLOBAL_LIST_INIT(blacklisted_builds, list( QDEL_NULL(void) QDEL_NULL(tooltips) QDEL_NULL(loot_panel) + QDEL_NULL(parallax_rock) + QDEL_LIST(parallax_layers_cached) + parallax_layers = null seen_messages = null Master.UpdateTickRate() ..() //Even though we're going to be hard deleted there are still some things that want to know the destroy is happening @@ -828,15 +821,6 @@ GLOBAL_LIST_INIT(blacklisted_builds, list( qdel(query_get_notes) create_message("note", key, system_ckey, message, null, null, 0, 0, null, 0, 0) - -/client/proc/check_ip_intel() - set waitfor = 0 //we sleep when getting the intel, no need to hold up the client connection while we sleep - if (CONFIG_GET(string/ipintel_email)) - var/datum/ipintel/res = get_ip_intel(address) - if (res.intel >= CONFIG_GET(number/ipintel_rating_bad)) - message_admins(span_adminnotice("Proxy Detection: [key_name_admin(src)] IP intel rated [res.intel*100]% likely to be a Proxy/VPN.")) - ip_intel = res.intel - /client/Click(atom/object, atom/location, control, params) if(click_intercept_time) if(click_intercept_time >= world.time) @@ -1144,8 +1128,8 @@ GLOBAL_LIST_INIT(blacklisted_builds, list( winset(src, "default.Shift", "is-disabled=true") winset(src, "default.ShiftUp", "is-disabled=true") -/client/proc/update_ambience_pref() - if(prefs.read_preference(/datum/preference/toggle/sound_ambience)) +/client/proc/update_ambience_pref(value) + if(value) if(SSambience.ambience_listening_clients[src] > world.time) return // If already properly set we don't want to reset the timer. SSambience.ambience_listening_clients[src] = world.time + 10 SECONDS //Just wait 10 seconds before the next one aight mate? cheers. @@ -1244,6 +1228,36 @@ GLOBAL_LIST_INIT(blacklisted_builds, list( screen -= object +/// Handles any "fluff" or supplementary procedures related to an admin logout event. Should not have anything critically related cleaning up an admin's logout. +/client/proc/handle_admin_logout() + adminGreet(logout = TRUE) + if(length(GLOB.admins) > 0 || !SSticker.IsRoundInProgress()) // We only want to report this stuff if we are currently playing. + return + + var/list/message_to_send = list() + var/static/list/cheesy_messages = null + + if (isnull(cheesy_messages)) + cheesy_messages = list( + "Forever alone :(", + "I have no admins online!", + "I need a hug :(", + "I need someone on me :(", + "I want a man :(", + "I'm all alone :(", + "I'm feeling lonely :(", + "I'm so lonely :(", + "Someone come hold me :(", + "What happened? Where has everyone gone?", + "Where has everyone gone?", + "Why does nobody love me? :(", + ) + + message_to_send += pick(cheesy_messages) + message_to_send += "(No admins online)" + + send2adminchat("Server", jointext(message_to_send, " ")) + #undef ADMINSWARNED_AT #undef CURRENT_MINUTE #undef CURRENT_SECOND diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 0e5d018be37d1..7cd3965718e60 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -211,22 +211,14 @@ GLOBAL_LIST_EMPTY(preferences_datums) if ("change_slot") // Save existing character save_character() - - // SAFETY: `load_character` performs sanitization the slot number - if (!load_character(params["slot"])) - tainted_character_profiles = TRUE - randomise_appearance_prefs() - save_character() - - for (var/datum/preference_middleware/preference_middleware as anything in middleware) - preference_middleware.on_new_character(usr) - - character_preview_view.update_body() - + // SAFETY: `switch_to_slot` performs sanitization on the slot number + switch_to_slot(params["slot"]) + return TRUE + if ("remove_current_slot") + remove_current_slot() return TRUE if ("rotate") - character_preview_view.dir = turn(character_preview_view.dir, -90) - + character_preview_view.setDir(turn(character_preview_view.dir, -90)) return TRUE if ("set_preference") var/requested_preference_key = params["preference"] @@ -351,6 +343,8 @@ GLOBAL_LIST_EMPTY(preferences_datums) var/mob/living/carbon/human/dummy/body /// The preferences this refers to var/datum/preferences/preferences + /// Whether we show current job clothes or nude/loadout only + var/show_job_clothes = TRUE /atom/movable/screen/map_view/char_preview/Initialize(mapload, datum/preferences/preferences) . = ..() @@ -368,16 +362,14 @@ GLOBAL_LIST_EMPTY(preferences_datums) create_body() else body.wipe_state() - appearance = preferences.render_new_preview_appearance(body) + + appearance = preferences.render_new_preview_appearance(body, show_job_clothes) /atom/movable/screen/map_view/char_preview/proc/create_body() QDEL_NULL(body) body = new - // Without this, it doesn't show up in the menu - body.appearance_flags &= ~KEEP_TOGETHER - /datum/preferences/proc/create_character_profiles() var/list/profiles = list() diff --git a/code/modules/client/preferences/_preference.dm b/code/modules/client/preferences/_preference.dm index 644d57b6d24d1..485276b4ade2a 100644 --- a/code/modules/client/preferences/_preference.dm +++ b/code/modules/client/preferences/_preference.dm @@ -18,11 +18,16 @@ /// support the "use gender" option. #define PREFERENCE_PRIORITY_BODY_TYPE 5 +/// Equpping items based on preferences. +/// Should happen after species and body type to make sure it looks right. +/// Mostly redundant, but a safety net for saving/loading. +#define PREFERENCE_PRIORITY_LOADOUT 6 + /// The priority at which names are decided, needed for proper randomization. -#define PREFERENCE_PRIORITY_NAMES 6 +#define PREFERENCE_PRIORITY_NAMES 7 /// Preferences that aren't names, but change the name changes set by PREFERENCE_PRIORITY_NAMES. -#define PREFERENCE_PRIORITY_NAME_MODIFICATIONS 7 +#define PREFERENCE_PRIORITY_NAME_MODIFICATIONS 8 /// The maximum preference priority, keep this updated, but don't use it for `priority`. #define MAX_PREFERENCE_PRIORITY PREFERENCE_PRIORITY_NAME_MODIFICATIONS @@ -107,6 +112,10 @@ GLOBAL_LIST_INIT(preference_entries_by_key, init_preference_entries_by_key()) /// will show the feature as selectable. var/relevant_mutant_bodypart = null + /// If the selected species has this in its /datum/species/body_markings, + /// will show the feature as selectable. + var/relevant_body_markings = null + /// If the selected species has this in its /datum/species/inherent_traits, /// will show the feature as selectable. var/relevant_inherent_trait = null @@ -328,10 +337,11 @@ GLOBAL_LIST_INIT(preference_entries_by_key, init_preference_entries_by_key()) || !isnull(relevant_inherent_trait) \ || !isnull(relevant_external_organ) \ || !isnull(relevant_head_flag) \ + || !isnull(relevant_body_markings) \ ) var/species_type = preferences.read_preference(/datum/preference/choiced/species) - var/datum/species/species = new species_type + var/datum/species/species = GLOB.species_prototypes[species_type] if (!(savefile_key in species.get_features())) return FALSE diff --git a/code/modules/client/preferences/addict.dm b/code/modules/client/preferences/addict.dm index 3c63b5ea8673b..8d70a6ccbfa6e 100644 --- a/code/modules/client/preferences/addict.dm +++ b/code/modules/client/preferences/addict.dm @@ -4,6 +4,12 @@ . -= addiction .[addiction::name] = addiction +/proc/setup_smoker_addictions(list/possible_addictions) + . = possible_addictions + for(var/obj/item/storage/addiction as anything in .) + . -= addiction + .[format_text(addiction::name)] = addiction // Format text to remove \improper used in cigarette packs + /datum/preference/choiced/junkie category = PREFERENCE_CATEGORY_MANUALLY_RENDERED savefile_key = "junkie" diff --git a/code/modules/client/preferences/blindfold_color.dm b/code/modules/client/preferences/blindfold_color.dm new file mode 100644 index 0000000000000..9e6504579acb6 --- /dev/null +++ b/code/modules/client/preferences/blindfold_color.dm @@ -0,0 +1,14 @@ +/// Preference for the roundstart color of the blindfold given by the Blindness quirk. +/datum/preference/color/blindfold_color + category = PREFERENCE_CATEGORY_MANUALLY_RENDERED + savefile_key = "blindfold_color" + savefile_identifier = PREFERENCE_CHARACTER + +/datum/preference/color/blindfold_color/is_accessible(datum/preferences/preferences) + if (!..(preferences)) + return FALSE + + return /datum/quirk/item_quirk/blindness::name in preferences.all_quirks + +/datum/preference/color/blindfold_color/apply_to_human(mob/living/carbon/human/target, value) + return diff --git a/code/modules/client/preferences/clothing.dm b/code/modules/client/preferences/clothing.dm index cf200ad1ffd65..d0ec072ba472f 100644 --- a/code/modules/client/preferences/clothing.dm +++ b/code/modules/client/preferences/clothing.dm @@ -95,7 +95,7 @@ should_generate_icons = TRUE /datum/preference/choiced/socks/init_possible_values() - return assoc_to_keys_features(GLOB.socks_list) + return assoc_to_keys_features(SSaccessories.socks_list) /datum/preference/choiced/socks/icon_for(value) var/static/icon/lower_half @@ -105,7 +105,7 @@ lower_half.Blend(icon('icons/mob/human/bodyparts_greyscale.dmi', "human_r_leg"), ICON_OVERLAY) lower_half.Blend(icon('icons/mob/human/bodyparts_greyscale.dmi', "human_l_leg"), ICON_OVERLAY) - return generate_underwear_icon(GLOB.socks_list[value], lower_half) + return generate_underwear_icon(SSaccessories.socks_list[value], lower_half) /datum/preference/choiced/socks/apply_to_human(mob/living/carbon/human/target, value) target.socks = value @@ -119,7 +119,7 @@ should_generate_icons = TRUE /datum/preference/choiced/undershirt/init_possible_values() - return assoc_to_keys_features(GLOB.undershirt_list) + return assoc_to_keys_features(SSaccessories.undershirt_list) /datum/preference/choiced/undershirt/icon_for(value) var/static/icon/body @@ -135,7 +135,7 @@ var/icon/icon_with_undershirt = icon(body) if (value != "Nude") - var/datum/sprite_accessory/accessory = GLOB.undershirt_list[value] + var/datum/sprite_accessory/accessory = SSaccessories.undershirt_list[value] icon_with_undershirt.Blend(icon('icons/mob/clothing/underwear.dmi', accessory.icon_state), ICON_OVERLAY) icon_with_undershirt.Crop(9, 9, 23, 23) @@ -154,7 +154,7 @@ should_generate_icons = TRUE /datum/preference/choiced/underwear/init_possible_values() - return assoc_to_keys_features(GLOB.underwear_list) + return assoc_to_keys_features(SSaccessories.underwear_list) /datum/preference/choiced/underwear/icon_for(value) var/static/icon/lower_half @@ -165,7 +165,7 @@ lower_half.Blend(icon('icons/mob/human/bodyparts_greyscale.dmi', "human_r_leg"), ICON_OVERLAY) lower_half.Blend(icon('icons/mob/human/bodyparts_greyscale.dmi', "human_l_leg"), ICON_OVERLAY) - return generate_underwear_icon(GLOB.underwear_list[value], lower_half, COLOR_ALMOST_BLACK) + return generate_underwear_icon(SSaccessories.underwear_list[value], lower_half, COLOR_ALMOST_BLACK) /datum/preference/choiced/underwear/apply_to_human(mob/living/carbon/human/target, value) target.underwear = value @@ -175,7 +175,7 @@ return FALSE var/species_type = preferences.read_preference(/datum/preference/choiced/species) - var/datum/species/species = new species_type + var/datum/species/species = GLOB.species_prototypes[species_type] return !(TRAIT_NO_UNDERWEAR in species.inherent_traits) /datum/preference/choiced/underwear/compile_constant_data() diff --git a/code/modules/client/preferences/migrations/quirk_loadout_migration.dm b/code/modules/client/preferences/migrations/quirk_loadout_migration.dm new file mode 100644 index 0000000000000..52fcd993c5732 --- /dev/null +++ b/code/modules/client/preferences/migrations/quirk_loadout_migration.dm @@ -0,0 +1,27 @@ +/** + * Move quirk items into loadout items + * + * If this is accompanied with removal of a quirk, + * you don't need to worry about handling that here - + * quirk sanitization happens AFTER migration + */ +/datum/preferences/proc/migrate_quirk_to_loadout(quirk_to_migrate, new_typepath, list/data_to_migrate) + ASSERT(istext(quirk_to_migrate) && ispath(new_typepath, /obj/item)) + if(quirk_to_migrate in all_quirks) + add_loadout_item(new_typepath, data_to_migrate) + +/// Helper for slotting in a new loadout item +/datum/preferences/proc/add_loadout_item(typepath, list/data = list()) + PRIVATE_PROC(TRUE) + + var/list/loadout_list = read_preference(/datum/preference/loadout) || list() + loadout_list[typepath] = data + write_preference(GLOB.preference_entries[/datum/preference/loadout], loadout_list) + +/// Helper for removing a loadout item +/datum/preferences/proc/remove_loadout_item(typepath) + PRIVATE_PROC(TRUE) + + var/list/loadout_list = read_preference(/datum/preference/loadout) + if(loadout_list?.Remove(typepath)) + write_preference(GLOB.preference_entries[/datum/preference/loadout], loadout_list) diff --git a/code/modules/client/preferences/names.dm b/code/modules/client/preferences/names.dm index 476fc7381a28f..82d37eca0722b 100644 --- a/code/modules/client/preferences/names.dm +++ b/code/modules/client/preferences/names.dm @@ -17,21 +17,26 @@ /// If the highest priority job matches this, will prioritize this name in the UI var/relevant_job + /datum/preference/name/apply_to_human(mob/living/carbon/human/target, value) // Only real_name applies directly, everything else is applied by something else return + /datum/preference/name/deserialize(input, datum/preferences/preferences) return reject_bad_name("[input]", allow_numbers) + /datum/preference/name/serialize(input) // `is_valid` should always be run before `serialize`, so it should not // be possible for this to return `null`. return reject_bad_name(input, allow_numbers) + /datum/preference/name/is_valid(value) return istext(value) && !isnull(reject_bad_name(value, allow_numbers)) + /// A character's real name /datum/preference/name/real_name explanation = "Name" @@ -45,12 +50,11 @@ target.log_mob_tag("TAG: [target.tag] RENAMED: [key_name(target)]") /datum/preference/name/real_name/create_informed_default_value(datum/preferences/preferences) - var/species_type = preferences.read_preference(/datum/preference/choiced/species) - var/gender = preferences.read_preference(/datum/preference/choiced/gender) - - var/datum/species/species = new species_type - - return species.random_name(gender, unique = TRUE) + return generate_random_name_species_based( + preferences.read_preference(/datum/preference/choiced/gender), + TRUE, + preferences.read_preference(/datum/preference/choiced/species), + ) /datum/preference/name/real_name/deserialize(input, datum/preferences/preferences) input = ..(input) @@ -73,9 +77,7 @@ savefile_key = "human_name" /datum/preference/name/backup_human/create_informed_default_value(datum/preferences/preferences) - var/gender = preferences.read_preference(/datum/preference/choiced/gender) - - return random_unique_name(gender) + return generate_random_name(preferences.read_preference(/datum/preference/choiced/gender)) /datum/preference/name/clown savefile_key = "clown_name" @@ -177,3 +179,28 @@ return TRUE return FALSE + + +/// The name to use while bitrunning +/datum/preference/name/hacker_alias + explanation = "Hacker alias" + group = "bitrunning" + savefile_key = "hacker_alias" + relevant_job = /datum/job/bitrunner + + +/datum/preference/name/hacker_alias/create_default_value() + return pick(GLOB.hacker_aliases) + + +/datum/preference/name/hacker_alias/is_valid(value) + return !isnull(permissive_sanitize_name(value)) + + +/datum/preference/name/hacker_alias/deserialize(input, datum/preferences/preferences) + return permissive_sanitize_name(input) + + +/datum/preference/name/hacker_alias/serialize(input) + return permissive_sanitize_name(input) + diff --git a/code/modules/client/preferences/pride_pin.dm b/code/modules/client/preferences/pride_pin.dm deleted file mode 100644 index 326dad69979b4..0000000000000 --- a/code/modules/client/preferences/pride_pin.dm +++ /dev/null @@ -1,16 +0,0 @@ -/datum/preference/choiced/pride_pin - category = PREFERENCE_CATEGORY_SECONDARY_FEATURES - savefile_key = "pride_pin" - savefile_identifier = PREFERENCE_CHARACTER - -/datum/preference/choiced/pride_pin/init_possible_values() - return assoc_to_keys(GLOB.pride_pin_reskins) - -/datum/preference/choiced/pride_pin/is_accessible(datum/preferences/preferences) - if (!..(preferences)) - return FALSE - - return "Pride Pin" in preferences.all_quirks - -/datum/preference/choiced/pride_pin/apply_to_human(mob/living/carbon/human/target, value) - return diff --git a/code/modules/client/preferences/prosthetic_limb.dm b/code/modules/client/preferences/prosthetic_limb.dm index a4d5b5a577ba1..3d9525734e572 100644 --- a/code/modules/client/preferences/prosthetic_limb.dm +++ b/code/modules/client/preferences/prosthetic_limb.dm @@ -4,7 +4,7 @@ savefile_identifier = PREFERENCE_CHARACTER /datum/preference/choiced/prosthetic/init_possible_values() - return list("Random") + GLOB.limb_choice + return list("Random") + GLOB.prosthetic_limb_choice /datum/preference/choiced/prosthetic/is_accessible(datum/preferences/preferences) . = ..() diff --git a/code/modules/client/preferences/sounds.dm b/code/modules/client/preferences/sounds.dm index f56430b53638a..81263de677bc9 100644 --- a/code/modules/client/preferences/sounds.dm +++ b/code/modules/client/preferences/sounds.dm @@ -4,6 +4,9 @@ savefile_key = "sound_ambience" savefile_identifier = PREFERENCE_PLAYER +/datum/preference/toggle/sound_ambience/apply_to_client(client/client, value) + client.update_ambience_pref(value) + /// Controls hearing announcement sounds /datum/preference/toggle/sound_announcements category = PREFERENCE_CATEGORY_GAME_PREFERENCES @@ -100,6 +103,9 @@ savefile_key = "sound_ship_ambience" savefile_identifier = PREFERENCE_PLAYER +/datum/preference/toggle/sound_ship_ambience/apply_to_client_updated(client/client, value) + client.mob.refresh_looping_ambience() + /// Controls hearing elevator music /datum/preference/toggle/sound_elevator category = PREFERENCE_CATEGORY_GAME_PREFERENCES diff --git a/code/modules/client/preferences/species.dm b/code/modules/client/preferences/species.dm index 9e4923d2b11da..1c74d7981b655 100644 --- a/code/modules/client/preferences/species.dm +++ b/code/modules/client/preferences/species.dm @@ -34,7 +34,7 @@ for (var/species_id in get_selectable_species()) var/species_type = GLOB.species_list[species_id] - var/datum/species/species = new species_type() + var/datum/species/species = GLOB.species_prototypes[species_type] data[species_id] = list() data[species_id]["name"] = species.name @@ -47,6 +47,4 @@ data[species_id]["perks"] = species.get_species_perks() data[species_id]["diet"] = species.get_species_diet() - qdel(species) - return data diff --git a/code/modules/client/preferences/species_features/basic.dm b/code/modules/client/preferences/species_features/basic.dm index abf4ea0e44e20..3f101ad9e44a5 100644 --- a/code/modules/client/preferences/species_features/basic.dm +++ b/code/modules/client/preferences/species_features/basic.dm @@ -7,7 +7,7 @@ var/icon/final_icon = new(head_icon) if (!isnull(sprite_accessory)) ASSERT(istype(sprite_accessory)) - + var/icon/head_accessory_icon = icon(sprite_accessory.icon, sprite_accessory.icon_state) if(y_offset) head_accessory_icon.Shift(NORTH, y_offset) @@ -61,10 +61,10 @@ relevant_head_flag = HEAD_FACIAL_HAIR /datum/preference/choiced/facial_hairstyle/init_possible_values() - return assoc_to_keys_features(GLOB.facial_hairstyles_list) + return assoc_to_keys_features(SSaccessories.facial_hairstyles_list) /datum/preference/choiced/facial_hairstyle/icon_for(value) - return generate_icon_with_head_accessory(GLOB.facial_hairstyles_list[value]) + return generate_icon_with_head_accessory(SSaccessories.facial_hairstyles_list[value]) /datum/preference/choiced/facial_hairstyle/apply_to_human(mob/living/carbon/human/target, value) target.set_facial_hairstyle(value, update = FALSE) @@ -94,7 +94,7 @@ relevant_head_flag = HEAD_FACIAL_HAIR /datum/preference/choiced/facial_hair_gradient/init_possible_values() - return assoc_to_keys_features(GLOB.facial_hair_gradients_list) + return assoc_to_keys_features(SSaccessories.facial_hair_gradients_list) /datum/preference/choiced/facial_hair_gradient/apply_to_human(mob/living/carbon/human/target, value) target.set_facial_hair_gradient_style(new_style = value, update = FALSE) @@ -137,10 +137,10 @@ relevant_head_flag = HEAD_HAIR /datum/preference/choiced/hairstyle/init_possible_values() - return assoc_to_keys_features(GLOB.hairstyles_list) + return assoc_to_keys_features(SSaccessories.hairstyles_list) /datum/preference/choiced/hairstyle/icon_for(value) - var/datum/sprite_accessory/hair/hairstyle = GLOB.hairstyles_list[value] + var/datum/sprite_accessory/hair/hairstyle = SSaccessories.hairstyles_list[value] return generate_icon_with_head_accessory(hairstyle, hairstyle?.y_offset) /datum/preference/choiced/hairstyle/apply_to_human(mob/living/carbon/human/target, value) @@ -161,7 +161,7 @@ relevant_head_flag = HEAD_HAIR /datum/preference/choiced/hair_gradient/init_possible_values() - return assoc_to_keys_features(GLOB.hair_gradients_list) + return assoc_to_keys_features(SSaccessories.hair_gradients_list) /datum/preference/choiced/hair_gradient/apply_to_human(mob/living/carbon/human/target, value) target.set_hair_gradient_style(new_style = value, update = FALSE) diff --git a/code/modules/client/preferences/species_features/felinid.dm b/code/modules/client/preferences/species_features/felinid.dm index b9f3c7bfa337b..a6d43736cf46c 100644 --- a/code/modules/client/preferences/species_features/felinid.dm +++ b/code/modules/client/preferences/species_features/felinid.dm @@ -6,7 +6,7 @@ relevant_external_organ = /obj/item/organ/external/tail/cat /datum/preference/choiced/tail_human/init_possible_values() - return assoc_to_keys_features(GLOB.tails_list_human) + return assoc_to_keys_features(SSaccessories.tails_list_human) /datum/preference/choiced/tail_human/apply_to_human(mob/living/carbon/human/target, value) target.dna.features["tail_cat"] = value @@ -23,7 +23,7 @@ relevant_mutant_bodypart = "ears" /datum/preference/choiced/ears/init_possible_values() - return assoc_to_keys_features(GLOB.ears_list) + return assoc_to_keys_features(SSaccessories.ears_list) /datum/preference/choiced/ears/apply_to_human(mob/living/carbon/human/target, value) target.dna.features["ears"] = value diff --git a/code/modules/client/preferences/species_features/lizard.dm b/code/modules/client/preferences/species_features/lizard.dm index 4ce09715483ad..38c83690b3b5e 100644 --- a/code/modules/client/preferences/species_features/lizard.dm +++ b/code/modules/client/preferences/species_features/lizard.dm @@ -29,20 +29,20 @@ category = PREFERENCE_CATEGORY_FEATURES main_feature_name = "Body markings" should_generate_icons = TRUE - relevant_mutant_bodypart = "body_markings" + relevant_body_markings = /datum/bodypart_overlay/simple/body_marking/lizard /datum/preference/choiced/lizard_body_markings/init_possible_values() - return assoc_to_keys_features(GLOB.body_markings_list) + return assoc_to_keys_features(SSaccessories.lizard_markings_list) /datum/preference/choiced/lizard_body_markings/icon_for(value) - var/datum/sprite_accessory/sprite_accessory = GLOB.body_markings_list[value] + var/datum/sprite_accessory/sprite_accessory = SSaccessories.lizard_markings_list[value] var/icon/final_icon = icon('icons/mob/human/species/lizard/bodyparts.dmi', "lizard_chest_m") if (sprite_accessory.icon_state != "none") var/icon/body_markings_icon = icon( 'icons/mob/human/species/lizard/lizard_misc.dmi', - "m_body_markings_[sprite_accessory.icon_state]_ADJ", + "male_[sprite_accessory.icon_state]_chest", ) final_icon.Blend(body_markings_icon, ICON_OVERLAY) @@ -55,7 +55,7 @@ return final_icon /datum/preference/choiced/lizard_body_markings/apply_to_human(mob/living/carbon/human/target, value) - target.dna.features["body_markings"] = value + target.dna.features["lizard_markings"] = value /datum/preference/choiced/lizard_frills savefile_key = "feature_lizard_frills" @@ -65,10 +65,10 @@ should_generate_icons = TRUE /datum/preference/choiced/lizard_frills/init_possible_values() - return assoc_to_keys_features(GLOB.frills_list) + return assoc_to_keys_features(SSaccessories.frills_list) /datum/preference/choiced/lizard_frills/icon_for(value) - return generate_lizard_side_shot(GLOB.frills_list[value], "frills") + return generate_lizard_side_shot(SSaccessories.frills_list[value], "frills") /datum/preference/choiced/lizard_frills/apply_to_human(mob/living/carbon/human/target, value) target.dna.features["frills"] = value @@ -81,10 +81,10 @@ should_generate_icons = TRUE /datum/preference/choiced/lizard_horns/init_possible_values() - return assoc_to_keys_features(GLOB.horns_list) + return assoc_to_keys_features(SSaccessories.horns_list) /datum/preference/choiced/lizard_horns/icon_for(value) - return generate_lizard_side_shot(GLOB.horns_list[value], "horns") + return generate_lizard_side_shot(SSaccessories.horns_list[value], "horns") /datum/preference/choiced/lizard_horns/apply_to_human(mob/living/carbon/human/target, value) target.dna.features["horns"] = value @@ -96,7 +96,7 @@ relevant_mutant_bodypart = "legs" /datum/preference/choiced/lizard_legs/init_possible_values() - return assoc_to_keys_features(GLOB.legs_list) + return assoc_to_keys_features(SSaccessories.legs_list) /datum/preference/choiced/lizard_legs/apply_to_human(mob/living/carbon/human/target, value) target.dna.features["legs"] = value @@ -109,10 +109,10 @@ should_generate_icons = TRUE /datum/preference/choiced/lizard_snout/init_possible_values() - return assoc_to_keys_features(GLOB.snouts_list) + return assoc_to_keys_features(SSaccessories.snouts_list) /datum/preference/choiced/lizard_snout/icon_for(value) - return generate_lizard_side_shot(GLOB.snouts_list[value], "snout", include_snout = FALSE) + return generate_lizard_side_shot(SSaccessories.snouts_list[value], "snout", include_snout = FALSE) /datum/preference/choiced/lizard_snout/apply_to_human(mob/living/carbon/human/target, value) target.dna.features["snout"] = value @@ -124,7 +124,7 @@ relevant_mutant_bodypart = "spines" /datum/preference/choiced/lizard_spines/init_possible_values() - return assoc_to_keys_features(GLOB.spines_list) + return assoc_to_keys_features(SSaccessories.spines_list) /datum/preference/choiced/lizard_spines/apply_to_human(mob/living/carbon/human/target, value) target.dna.features["spines"] = value @@ -136,7 +136,7 @@ relevant_external_organ = /obj/item/organ/external/tail/lizard /datum/preference/choiced/lizard_tail/init_possible_values() - return assoc_to_keys_features(GLOB.tails_list_lizard) + return assoc_to_keys_features(SSaccessories.tails_list_lizard) /datum/preference/choiced/lizard_tail/apply_to_human(mob/living/carbon/human/target, value) target.dna.features["tail_lizard"] = value diff --git a/code/modules/client/preferences/species_features/monkey.dm b/code/modules/client/preferences/species_features/monkey.dm index b25d2cdfab8e1..adf9e367723de 100644 --- a/code/modules/client/preferences/species_features/monkey.dm +++ b/code/modules/client/preferences/species_features/monkey.dm @@ -5,7 +5,7 @@ relevant_external_organ = /obj/item/organ/external/tail/monkey /datum/preference/choiced/monkey_tail/init_possible_values() - return assoc_to_keys_features(GLOB.tails_list_monkey) + return assoc_to_keys_features(SSaccessories.tails_list_monkey) /datum/preference/choiced/monkey_tail/apply_to_human(mob/living/carbon/human/target, value) target.dna.features["tail_monkey"] = value diff --git a/code/modules/client/preferences/species_features/moth.dm b/code/modules/client/preferences/species_features/moth.dm index 120a7ea822bec..f697d857d4fc4 100644 --- a/code/modules/client/preferences/species_features/moth.dm +++ b/code/modules/client/preferences/species_features/moth.dm @@ -6,7 +6,7 @@ should_generate_icons = TRUE /datum/preference/choiced/moth_antennae/init_possible_values() - return assoc_to_keys_features(GLOB.moth_antennae_list) + return assoc_to_keys_features(SSaccessories.moth_antennae_list) /datum/preference/choiced/moth_antennae/icon_for(value) var/static/icon/moth_head @@ -16,7 +16,7 @@ moth_head.Blend(icon('icons/mob/human/human_face.dmi', "motheyes_l"), ICON_OVERLAY) moth_head.Blend(icon('icons/mob/human/human_face.dmi', "motheyes_r"), ICON_OVERLAY) - var/datum/sprite_accessory/antennae = GLOB.moth_antennae_list[value] + var/datum/sprite_accessory/antennae = SSaccessories.moth_antennae_list[value] var/icon/icon_with_antennae = new(moth_head) icon_with_antennae.Blend(icon(antennae.icon, "m_moth_antennae_[antennae.icon_state]_FRONT"), ICON_OVERLAY) @@ -34,10 +34,10 @@ category = PREFERENCE_CATEGORY_FEATURES main_feature_name = "Body markings" should_generate_icons = TRUE - relevant_mutant_bodypart = "moth_markings" + relevant_body_markings = /datum/bodypart_overlay/simple/body_marking/moth /datum/preference/choiced/moth_markings/init_possible_values() - return assoc_to_keys_features(GLOB.moth_markings_list) + return assoc_to_keys_features(SSaccessories.moth_markings_list) /datum/preference/choiced/moth_markings/icon_for(value) var/static/list/body_parts = list( @@ -59,7 +59,7 @@ moth_body.Blend(icon('icons/mob/human/human_face.dmi', "motheyes_l"), ICON_OVERLAY) moth_body.Blend(icon('icons/mob/human/human_face.dmi', "motheyes_r"), ICON_OVERLAY) - var/datum/sprite_accessory/markings = GLOB.moth_markings_list[value] + var/datum/sprite_accessory/markings = SSaccessories.moth_markings_list[value] var/icon/icon_with_markings = new(moth_body) if (value != "None") @@ -88,10 +88,10 @@ should_generate_icons = TRUE /datum/preference/choiced/moth_wings/init_possible_values() - return assoc_to_keys_features(GLOB.moth_wings_list) + return assoc_to_keys_features(SSaccessories.moth_wings_list) /datum/preference/choiced/moth_wings/icon_for(value) - var/datum/sprite_accessory/moth_wings = GLOB.moth_wings_list[value] + var/datum/sprite_accessory/moth_wings = SSaccessories.moth_wings_list[value] var/icon/final_icon = icon(moth_wings.icon, "m_moth_wings_[moth_wings.icon_state]_BEHIND") final_icon.Blend(icon(moth_wings.icon, "m_moth_wings_[moth_wings.icon_state]_FRONT"), ICON_OVERLAY) return final_icon diff --git a/code/modules/client/preferences/species_features/mushperson.dm b/code/modules/client/preferences/species_features/mushperson.dm index f5e6a08ac92d2..45bd9c4b72620 100644 --- a/code/modules/client/preferences/species_features/mushperson.dm +++ b/code/modules/client/preferences/species_features/mushperson.dm @@ -5,7 +5,7 @@ relevant_mutant_bodypart = "cap" /datum/preference/choiced/mushroom_cap/init_possible_values() - return assoc_to_keys_features(GLOB.caps_list) + return assoc_to_keys_features(SSaccessories.caps_list) /datum/preference/choiced/mushroom_cap/apply_to_human(mob/living/carbon/human/target, value) target.dna.features["caps"] = value diff --git a/code/modules/client/preferences/species_features/mutants.dm b/code/modules/client/preferences/species_features/mutants.dm index 7ecf25d9abce5..1d18c78ee1ad1 100644 --- a/code/modules/client/preferences/species_features/mutants.dm +++ b/code/modules/client/preferences/species_features/mutants.dm @@ -9,7 +9,7 @@ return FALSE var/species_type = preferences.read_preference(/datum/preference/choiced/species) - var/datum/species/species = new species_type + var/datum/species/species = GLOB.species_prototypes[species_type] return !(TRAIT_FIXED_MUTANT_COLORS in species.inherent_traits) /datum/preference/color/mutant_color/create_default_value() diff --git a/code/modules/client/preferences/species_features/pod.dm b/code/modules/client/preferences/species_features/pod.dm index 5280308fa8930..de3d5221f7a41 100644 --- a/code/modules/client/preferences/species_features/pod.dm +++ b/code/modules/client/preferences/species_features/pod.dm @@ -6,10 +6,10 @@ should_generate_icons = TRUE /datum/preference/choiced/pod_hair/init_possible_values() - return assoc_to_keys_features(GLOB.pod_hair_list) + return assoc_to_keys_features(SSaccessories.pod_hair_list) /datum/preference/choiced/pod_hair/icon_for(value) - var/datum/sprite_accessory/pod_hair = GLOB.pod_hair_list[value] + var/datum/sprite_accessory/pod_hair = SSaccessories.pod_hair_list[value] var/icon/icon_with_hair = icon('icons/mob/human/bodyparts_greyscale.dmi', "pod_head_m") @@ -24,7 +24,7 @@ return icon_with_hair /datum/preference/choiced/pod_hair/create_default_value() - return pick(assoc_to_keys_features(GLOB.pod_hair_list)) + return pick(assoc_to_keys_features(SSaccessories.pod_hair_list)) /datum/preference/choiced/pod_hair/apply_to_human(mob/living/carbon/human/target, value) target.dna.features["pod_hair"] = value diff --git a/code/modules/client/preferences/underwear_color.dm b/code/modules/client/preferences/underwear_color.dm index 6e64b4423e50a..1304bdaf2da8d 100644 --- a/code/modules/client/preferences/underwear_color.dm +++ b/code/modules/client/preferences/underwear_color.dm @@ -8,7 +8,7 @@ return FALSE var/species_type = preferences.read_preference(/datum/preference/choiced/species) - var/datum/species/species = new species_type + var/datum/species/species = GLOB.species_prototypes[species_type] return !(TRAIT_NO_UNDERWEAR in species.inherent_traits) /datum/preference/color/underwear_color/apply_to_human(mob/living/carbon/human/target, value) diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm index 3d930ce898904..9a6448e2e6d54 100644 --- a/code/modules/client/preferences_savefile.dm +++ b/code/modules/client/preferences_savefile.dm @@ -5,7 +5,7 @@ // You do not need to raise this if you are adding new values that have sane defaults. // Only raise this value when changing the meaning/format/name/layout of an existing value // where you would want the updater procs below to run -#define SAVEFILE_VERSION_MAX 44 +#define SAVEFILE_VERSION_MAX 45 /* SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Carn @@ -104,6 +104,13 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car if (current_version < 43) migrate_legacy_sound_toggles(savefile) + if (current_version < 45) + migrate_quirk_to_loadout( + quirk_to_migrate = "Pride Pin", + new_typepath = /obj/item/clothing/accessory/pride, + data_to_migrate = list(INFO_RESKIN = save_data?["pride_pin"]), + ) + /// checks through keybindings for outdated unbound keys and updates them /datum/preferences/proc/check_keybindings() if(!parent) @@ -361,6 +368,43 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car return TRUE +/datum/preferences/proc/switch_to_slot(new_slot) + // SAFETY: `load_character` performs sanitization on the slot number + if (!load_character(new_slot)) + tainted_character_profiles = TRUE + randomise_appearance_prefs() + save_character() + + for (var/datum/preference_middleware/preference_middleware as anything in middleware) + preference_middleware.on_new_character(usr) + + character_preview_view.update_body() + +/datum/preferences/proc/remove_current_slot() + PRIVATE_PROC(TRUE) + + var/closest_slot + for (var/other_slot in default_slot - 1 to 1 step -1) + var/save_data = savefile.get_entry("character[other_slot]") + if (!isnull(save_data)) + closest_slot = other_slot + break + + if (isnull(closest_slot)) + for (var/other_slot in default_slot + 1 to max_save_slots) + var/save_data = savefile.get_entry("character[other_slot]") + if (!isnull(save_data)) + closest_slot = other_slot + break + + if (isnull(closest_slot)) + stack_trace("remove_current_slot() being called when there are no slots to go to, the client should prevent this") + return + + savefile.remove_entry("character[default_slot]") + tainted_character_profiles = TRUE + switch_to_slot(closest_slot) + /datum/preferences/proc/sanitize_be_special(list/input_be_special) var/list/output = list() diff --git a/code/modules/client/verbs/ooc.dm b/code/modules/client/verbs/ooc.dm index 49583ce70152a..baabaa610c523 100644 --- a/code/modules/client/verbs/ooc.dm +++ b/code/modules/client/verbs/ooc.dm @@ -80,7 +80,7 @@ GLOBAL_VAR_INIT(normal_ooc_colour, "#002eb8") var/keyname = key if(prefs.unlock_content) if(prefs.toggles & MEMBER_PUBLIC) - keyname = "[icon2html('icons/ui_icons/chat/member_content.dmi', world, "blag")][keyname]" + keyname = "[icon2html('icons/ui/chat/member_content.dmi', world, "blag")][keyname]" if(prefs.hearted) var/datum/asset/spritesheet/sheet = get_asset_datum(/datum/asset/spritesheet/chat) keyname = "[sheet.icon_tag("emoji-heart")][keyname]" diff --git a/code/modules/client/verbs/typing.dm b/code/modules/client/verbs/typing.dm new file mode 100644 index 0000000000000..b7a7362261486 --- /dev/null +++ b/code/modules/client/verbs/typing.dm @@ -0,0 +1,70 @@ +#define IC_VERBS list("say", "me", "whisper") + +/client/var/commandbar_thinking = FALSE +/client/var/commandbar_typing = FALSE + +/client/proc/initialize_commandbar_spy() + src << output('html/typing_indicator.html', "commandbar_spy") + +/client/proc/handle_commandbar_typing(href_list) + if (!typing_indicators) //check pref + return + if (length(href_list["verb"]) < 1 || !(LOWER_TEXT(href_list["verb"]) in IC_VERBS) || text2num(href_list["argument_length"]) < 1) + if (commandbar_typing) + commandbar_typing = FALSE + stop_typing() + + if (commandbar_thinking) + commandbar_thinking = FALSE + stop_thinking() + return + + if (!commandbar_thinking) + commandbar_thinking = TRUE + start_thinking() + + if (!commandbar_typing) + commandbar_typing = TRUE + start_typing() + + +/** Sets the mob as "thinking" - with indicator and the TRAIT_THINKING_IN_CHARACTER trait */ +/client/proc/start_thinking() + if(!typing_indicators) + return FALSE + /// Special exemptions + if(isabductor(mob)) + return FALSE + ADD_TRAIT(mob, TRAIT_THINKING_IN_CHARACTER, CURRENTLY_TYPING_TRAIT) + mob.create_thinking_indicator() + +/** Removes typing/thinking indicators and flags the mob as not thinking */ +/client/proc/stop_thinking() + mob?.remove_all_indicators() + +/** + * Handles the user typing. After a brief period of inactivity, + * signals the client mob to revert to the "thinking" icon. + */ +/client/proc/start_typing() + var/mob/client_mob = mob + client_mob.remove_thinking_indicator() + if(!typing_indicators || !HAS_TRAIT(client_mob, TRAIT_THINKING_IN_CHARACTER)) + return FALSE + client_mob.create_typing_indicator() + addtimer(CALLBACK(src, PROC_REF(stop_typing)), 5 SECONDS, TIMER_UNIQUE | TIMER_OVERRIDE | TIMER_STOPPABLE) + +/** + * Callback to remove the typing indicator after a brief period of inactivity. + * If the user was typing IC, the thinking indicator is shown. + */ +/client/proc/stop_typing() + if(isnull(mob)) + return FALSE + var/mob/client_mob = mob + client_mob.remove_typing_indicator() + if(!typing_indicators || !HAS_TRAIT(client_mob, TRAIT_THINKING_IN_CHARACTER)) + return FALSE + client_mob.create_thinking_indicator() + +#undef IC_VERBS diff --git a/code/modules/clothing/chameleon/chameleon_action_subtypes.dm b/code/modules/clothing/chameleon/chameleon_action_subtypes.dm index 275b2c6e0fc2a..bd15bb908f227 100644 --- a/code/modules/clothing/chameleon/chameleon_action_subtypes.dm +++ b/code/modules/clothing/chameleon/chameleon_action_subtypes.dm @@ -64,6 +64,11 @@ . = ..() chameleon_blacklist |= typecacheof(/obj/item/clothing/mask/changeling, only_root_path = TRUE) +/datum/action/item_action/chameleon/change/mask/initialize_disguises() + . = ..() + add_chameleon_items(/obj/item/cigarette) + add_chameleon_items(/obj/item/vape) + /datum/action/item_action/chameleon/change/hat chameleon_type = /obj/item/clothing/head chameleon_name = "Hat" diff --git a/code/modules/clothing/chameleon/chameleon_scanner.dm b/code/modules/clothing/chameleon/chameleon_scanner.dm index 5023997cefebf..2ea0958a0cc66 100644 --- a/code/modules/clothing/chameleon/chameleon_scanner.dm +++ b/code/modules/clothing/chameleon/chameleon_scanner.dm @@ -43,25 +43,24 @@ . += span_red("Left click will stealthily scan a target up to [scan_range] meters away and upload their getup as a custom outfit for you to use.") . += span_red("Right click will do the same, but instantly equip the outfit you obtain.") -/obj/item/chameleon_scanner/afterattack(atom/target, mob/user, proximity_flag, click_parameters) - . = ..() - if(scan_target(target, user)) - . |= AFTERATTACK_PROCESSED_ITEM - return . +/obj/item/chameleon_scanner/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + return scan_target(interacting_with, user) ? ITEM_INTERACT_SUCCESS : ITEM_INTERACT_BLOCKING -/obj/item/chameleon_scanner/afterattack_secondary(atom/target, mob/user, proximity_flag, click_parameters) - . = ..() - if(. == SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN) - return . +/obj/item/chameleon_scanner/ranged_interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + return interact_with_atom(interacting_with, user, modifiers) - var/list/scanned_outfit = scan_target(target, user) +/obj/item/chameleon_scanner/interact_with_atom_secondary(atom/interacting_with, mob/living/user, list/modifiers) + var/list/scanned_outfit = scan_target(interacting_with, user) if(length(scanned_outfit)) var/datum/outfit/empty_outfit = new() var/datum/action/chameleon_outfit/outfit_action = locate() in user.actions outfit_action?.apply_outfit(empty_outfit, scanned_outfit.Copy()) qdel(empty_outfit) + return ITEM_INTERACT_SUCCESS + return ITEM_INTERACT_BLOCKING - return SECONDARY_ATTACK_CONTINUE_CHAIN // no normal afterattack +/obj/item/chameleon_scanner/ranged_interact_with_atom_secondary(atom/interacting_with, mob/living/user, list/modifiers) + return interact_with_atom_secondary(interacting_with, user, modifiers) /** * Attempts to scan a human's outfit diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm index 6510d16bf9efd..98184b3fce25e 100644 --- a/code/modules/clothing/clothing.dm +++ b/code/modules/clothing/clothing.dm @@ -63,17 +63,16 @@ if(!icon_state) item_flags |= ABSTRACT -/obj/item/clothing/MouseDrop(atom/over_object) - . = ..() - var/mob/M = usr +/obj/item/clothing/mouse_drop_dragged(atom/over_object, mob/user, src_location, over_location, params) + var/mob/M = user if(ismecha(M.loc)) // stops inventory actions in a mech return - if(!M.incapacitated() && loc == M && istype(over_object, /atom/movable/screen/inventory/hand)) + if(loc == M && istype(over_object, /atom/movable/screen/inventory/hand)) var/atom/movable/screen/inventory/hand/H = over_object if(M.putItemFromInventoryInHandIfPossible(src, H.held_index)) - add_fingerprint(usr) + add_fingerprint(user) /obj/item/food/clothing name = "temporary moth clothing snack item" @@ -195,13 +194,16 @@ if(!(def_zone in covered_limbs)) return - var/zone_name = parse_zone(def_zone) + var/zone_name var/break_verb = ((damage_type == BRUTE) ? "torn" : "burned") if(iscarbon(loc)) - var/mob/living/carbon/C = loc - C.visible_message(span_danger("The [zone_name] on [C]'s [src.name] is [break_verb] away!"), span_userdanger("The [zone_name] on your [src.name] is [break_verb] away!"), vision_distance = COMBAT_MESSAGE_RANGE) - RegisterSignal(C, COMSIG_MOVABLE_MOVED, PROC_REF(bristle), override = TRUE) + var/mob/living/carbon/carbon_loc = loc + zone_name = carbon_loc.parse_zone_with_bodypart(def_zone) + carbon_loc.visible_message(span_danger("The [zone_name] on [carbon_loc]'s [src.name] is [break_verb] away!"), span_userdanger("The [zone_name] on your [src.name] is [break_verb] away!"), vision_distance = COMBAT_MESSAGE_RANGE) + RegisterSignal(carbon_loc, COMSIG_MOVABLE_MOVED, PROC_REF(bristle), override = TRUE) + else + zone_name = parse_zone(def_zone) zones_disabled++ body_parts_covered &= ~body_zone2cover_flags(def_zone) @@ -358,7 +360,7 @@ . = ..() if(href_list["list_armor"]) - var/list/readout = list("PROTECTION CLASSES") + var/list/readout = list() var/datum/armor/armor = get_armor() var/added_damage_header = FALSE @@ -367,9 +369,9 @@ if(!rating) continue if(!added_damage_header) - readout += "\nARMOR (I-X)" + readout += "ARMOR (I-X)" added_damage_header = TRUE - readout += "\n[armor_to_protection_name(damage_key)] [armor_to_protection_class(rating)]" + readout += "[armor_to_protection_name(damage_key)] [armor_to_protection_class(rating)]" var/added_durability_header = FALSE for(var/durability_key in ARMOR_LIST_DURABILITY()) @@ -377,9 +379,9 @@ if(!rating) continue if(!added_durability_header) - readout += "\nDURABILITY (I-X)" + readout += "DURABILITY (I-X)" added_damage_header = TRUE - readout += "\n[armor_to_protection_name(durability_key)] [armor_to_protection_class(rating)]" + readout += "[armor_to_protection_name(durability_key)] [armor_to_protection_class(rating)]" if(flags_cover & HEADCOVERSMOUTH || flags_cover & PEPPERPROOF) var/list/things_blocked = list() @@ -388,12 +390,15 @@ if(flags_cover & PEPPERPROOF) things_blocked += "pepperspray" if(length(things_blocked)) - readout += "\nCOVERAGE" - readout += "\nIt will block [english_list(things_blocked)]." + readout += "COVERAGE" + readout += "It will block [english_list(things_blocked)]." + - readout += "" + if(!length(readout)) + readout += "No armor or durability information available." - to_chat(usr, "[readout.Join()]") + var/formatted_readout = span_notice("PROTECTION CLASSES
    [jointext(readout, "\n")]") + to_chat(usr, examine_block(formatted_readout)) /** * Rounds armor_value down to the nearest 10, divides it by 10 and then converts it to Roman numerals. @@ -470,19 +475,22 @@ BLIND // can't see anything female_clothing_icon = fcopy_rsc(female_clothing_icon) GLOB.female_clothing_icons[index] = female_clothing_icon -/obj/item/clothing/proc/adjust_visor(mob/living/user) //proc to toggle welding visors on helmets, masks, goggles, etc. +/// Proc that adjusts the clothing item, used by things like breathing masks, welding helmets, welding goggles etc. +/obj/item/clothing/proc/adjust_visor(mob/living/user) if(!can_use(user)) return FALSE visor_toggling() - to_chat(user, span_notice("You adjust [src] [up ? "up" : "down"].")) + to_chat(user, span_notice("You push [src] [up ? "out of the way" : "back into place"].")) update_item_action_buttons() if(user.is_holding(src)) user.update_held_items() return TRUE + if(up) + user.update_obscured_slots(visor_flags_inv) user.update_clothing(slot_flags) if(!iscarbon(user)) return TRUE diff --git a/code/modules/clothing/glasses/_glasses.dm b/code/modules/clothing/glasses/_glasses.dm index 5053e78bdaf11..9453df3616fba 100644 --- a/code/modules/clothing/glasses/_glasses.dm +++ b/code/modules/clothing/glasses/_glasses.dm @@ -27,15 +27,15 @@ /// Whether or not vision coloring is forcing var/forced_glass_color = FALSE +/obj/item/clothing/glasses/Initialize(mapload) + . = ..() + if(glass_colour_type) + AddElement(/datum/element/wearable_client_colour, glass_colour_type, ITEM_SLOT_EYES, forced = forced_glass_color) + /obj/item/clothing/glasses/suicide_act(mob/living/carbon/user) user.visible_message(span_suicide("[user] is stabbing \the [src] into [user.p_their()] eyes! It looks like [user.p_theyre()] trying to commit suicide!")) return BRUTELOSS -/obj/item/clothing/glasses/examine(mob/user) - . = ..() - if(glass_colour_type && !forced_glass_color && ishuman(user)) - . += span_notice("Alt-click to toggle [p_their()] colors.") - /obj/item/clothing/glasses/visor_toggling() . = ..() alternate_worn_layer = up ? ABOVE_BODY_FRONT_HEAD_LAYER : null @@ -62,37 +62,12 @@ H.set_eye_blur_if_lower(10 SECONDS) eyes.apply_organ_damage(5) -/obj/item/clothing/glasses/click_alt(mob/user) - if(isnull(glass_colour_type) || forced_glass_color || !ishuman(user)) - return NONE - var/mob/living/carbon/human/human_user = user - - if (HAS_TRAIT_FROM(human_user, TRAIT_SEE_GLASS_COLORS, GLASSES_TRAIT)) - REMOVE_TRAIT(human_user, TRAIT_SEE_GLASS_COLORS, GLASSES_TRAIT) - to_chat(human_user, span_notice("You will no longer see glasses colors.")) - else - ADD_TRAIT(human_user, TRAIT_SEE_GLASS_COLORS, GLASSES_TRAIT) - to_chat(human_user, span_notice("You will now see glasses colors.")) - human_user.update_glasses_color(src, TRUE) - return CLICK_ACTION_SUCCESS - -/obj/item/clothing/glasses/proc/change_glass_color(mob/living/carbon/human/H, datum/client_colour/glass_colour/new_color_type) - var/old_colour_type = glass_colour_type - if(!new_color_type || ispath(new_color_type)) //the new glass colour type must be null or a path. - glass_colour_type = new_color_type - if(H && H.glasses == src) - if(old_colour_type) - H.remove_client_colour(old_colour_type) - if(glass_colour_type) - H.update_glasses_color(src, 1) - - -/mob/living/carbon/human/proc/update_glasses_color(obj/item/clothing/glasses/G, glasses_equipped) - if((HAS_TRAIT(src, TRAIT_SEE_GLASS_COLORS) || G.forced_glass_color) && glasses_equipped) - add_client_colour(G.glass_colour_type) - else - remove_client_colour(G.glass_colour_type) - +/obj/item/clothing/glasses/proc/change_glass_color(new_color_type) + if(glass_colour_type) + RemoveElement(/datum/element/wearable_client_colour, glass_colour_type, ITEM_SLOT_EYES, forced = forced_glass_color) + glass_colour_type = new_color_type + if(glass_colour_type) + AddElement(/datum/element/wearable_client_colour, glass_colour_type, ITEM_SLOT_EYES, forced = forced_glass_color) /obj/item/clothing/glasses/meson name = "optical meson scanner" @@ -450,6 +425,10 @@ /obj/item/clothing/glasses/welding/attack_self(mob/user) adjust_visor(user) +/obj/item/clothing/glasses/welding/update_icon_state() + . = ..() + icon_state = "[initial(icon_state)][up ? "up" : ""]" + /obj/item/clothing/glasses/welding/up/Initialize(mapload) . = ..() visor_toggling() diff --git a/code/modules/clothing/gloves/insulated.dm b/code/modules/clothing/gloves/insulated.dm index 99a1ed043555d..19109d68b9c93 100644 --- a/code/modules/clothing/gloves/insulated.dm +++ b/code/modules/clothing/gloves/insulated.dm @@ -39,18 +39,20 @@ icon = 'icons/obj/clothing/gloves.dmi' icon_state = "sprayoncan" -/obj/item/toy/sprayoncan/afterattack(atom/target, mob/living/carbon/user, proximity) - if(iscarbon(target) && proximity) - var/mob/living/carbon/C = target - var/mob/living/carbon/U = user - var/success = C.equip_to_slot_if_possible(new /obj/item/clothing/gloves/color/yellow/sprayon, ITEM_SLOT_GLOVES, qdel_on_fail = TRUE, disable_warning = TRUE) - if(success) - if(C == user) - C.visible_message(span_notice("[U] sprays their hands with glittery rubber!")) - else - C.visible_message(span_warning("[U] sprays glittery rubber on the hands of [C]!")) +/obj/item/toy/sprayoncan/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + if(!iscarbon(interacting_with)) + return NONE + var/mob/living/carbon/C = interacting_with + var/mob/living/carbon/U = user + var/success = C.equip_to_slot_if_possible(new /obj/item/clothing/gloves/color/yellow/sprayon, ITEM_SLOT_GLOVES, qdel_on_fail = TRUE, disable_warning = TRUE) + if(success) + if(C == user) + C.visible_message(span_notice("[U] sprays their hands with glittery rubber!")) else - C.visible_message(span_warning("The rubber fails to stick to [C]'s hands!")) + C.visible_message(span_warning("[U] sprays glittery rubber on the hands of [C]!")) + else + C.visible_message(span_warning("The rubber fails to stick to [C]'s hands!")) + return ITEM_INTERACT_SUCCESS /obj/item/clothing/gloves/color/yellow/sprayon desc = "How're you gonna get 'em off, nerd?" diff --git a/code/modules/clothing/gloves/tacklers.dm b/code/modules/clothing/gloves/tacklers.dm index a904cd0dd90c1..4adb374d92bd7 100644 --- a/code/modules/clothing/gloves/tacklers.dm +++ b/code/modules/clothing/gloves/tacklers.dm @@ -1,6 +1,6 @@ /obj/item/clothing/gloves/tackler - name = "gripper gloves" - desc = "Special gloves that manipulate the blood vessels in the wearer's hands, granting them the ability to launch headfirst into walls." + name = "enhanced retrieval gloves" + desc = "Special gloves that manipulate the blood vessels in the wearer's hands, granting them the ability to launch headfirst into walls and tackle fleeing criminals in a single bound." icon_state = "tackle" inhand_icon_state = null cold_protection = HANDS diff --git a/code/modules/clothing/head/hardhat.dm b/code/modules/clothing/head/hardhat.dm index ebe8ab48c6861..81ec00d54b439 100644 --- a/code/modules/clothing/head/hardhat.dm +++ b/code/modules/clothing/head/hardhat.dm @@ -194,7 +194,8 @@ min_cold_protection_temperature = FIRE_HELM_MIN_TEMP_PROTECT flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH | PEPPERPROOF visor_flags_cover = NONE - flags_inv = HIDEEARS|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR|HIDESNOUT + flags_inv = HIDEEARS|HIDEHAIR|HIDEFACE|HIDEFACIALHAIR|HIDESNOUT + transparent_protection = HIDEMASK|HIDEEYES visor_flags_inv = NONE visor_state = "weldvisor_atmos" @@ -225,6 +226,10 @@ . = ..() if(isnull(.)) return + if(new_value) + AddElement(/datum/element/wearable_client_colour, /datum/client_colour/halloween_helmet, ITEM_SLOT_HEAD, forced = TRUE) + else + RemoveElement(/datum/element/wearable_client_colour, /datum/client_colour/halloween_helmet, ITEM_SLOT_HEAD, forced = TRUE) update_icon(UPDATE_OVERLAYS) /obj/item/clothing/head/utility/hardhat/pumpkinhead/update_overlays() diff --git a/code/modules/clothing/head/hat.dm b/code/modules/clothing/head/hat.dm index 6fbc2232b1b11..0fc2de1375a48 100644 --- a/code/modules/clothing/head/hat.dm +++ b/code/modules/clothing/head/hat.dm @@ -84,6 +84,8 @@ name = "flat cap" desc = "A working man's cap." icon_state = "beret_flat" + icon_preview = 'icons/obj/clothing/head/beret.dmi' + icon_state_preview = "beret_flat" greyscale_config = /datum/greyscale_config/beret greyscale_config_worn = /datum/greyscale_config/beret/worn greyscale_colors = "#8F7654" @@ -116,7 +118,7 @@ victim.visible_message(span_warning("\The [bullet] sends [victim]'s hat flying!")) victim.dropItemToGround(src, force = TRUE, silent = TRUE) throw_at(get_edge_target_turf(loc, pick(GLOB.alldirs)), range = 3, speed = 3) - playsound(victim, get_sfx(SFX_RICOCHET), 100, TRUE) + playsound(victim, SFX_RICOCHET, 100, TRUE) /datum/armor/head_cowboy melee = 5 diff --git a/code/modules/clothing/head/helmet.dm b/code/modules/clothing/head/helmet.dm index 0122cda397824..27be2799b7d2e 100644 --- a/code/modules/clothing/head/helmet.dm +++ b/code/modules/clothing/head/helmet.dm @@ -424,25 +424,6 @@ armor_type = /datum/armor/knight_greyscale material_flags = MATERIAL_EFFECTS | MATERIAL_ADD_PREFIX | MATERIAL_COLOR | MATERIAL_AFFECT_STATISTICS //Can change color and add prefix -/obj/item/clothing/head/helmet/skull - name = "skull helmet" - desc = "An intimidating tribal helmet, it doesn't look very comfortable." - flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDESNOUT - flags_cover = HEADCOVERSEYES - armor_type = /datum/armor/helmet_skull - icon_state = "skull" - inhand_icon_state = null - strip_delay = 100 - -/datum/armor/helmet_skull - melee = 35 - bullet = 25 - laser = 25 - energy = 35 - bomb = 25 - fire = 50 - acid = 50 - /obj/item/clothing/head/helmet/durathread name = "durathread helmet" desc = "A helmet made from durathread and leather." @@ -530,8 +511,9 @@ desc = "A cheaply made kettle helmet with an added faceplate to protect your eyes and mouth." icon_state = "military" inhand_icon_state = "knight_helmet" - flags_inv = HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDESNOUT + flags_inv = HIDEEARS|HIDEEYES|HIDEFACE|HIDESNOUT flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH | PEPPERPROOF + flash_protect = FLASH_PROTECTION_FLASH strip_delay = 80 dog_fashion = null armor_type = /datum/armor/helmet_military @@ -558,6 +540,7 @@ armor_type = /datum/armor/helmet_warlord flags_inv = HIDEEARS|HIDEEYES|HIDEFACE|HIDEMASK|HIDEHAIR|HIDEFACIALHAIR|HIDESNOUT flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH | PEPPERPROOF + flash_protect = FLASH_PROTECTION_FLASH slowdown = 0.2 /datum/armor/helmet_warlord diff --git a/code/modules/clothing/head/jobs.dm b/code/modules/clothing/head/jobs.dm index 4f5d377ddac00..5ea7d62313bd4 100644 --- a/code/modules/clothing/head/jobs.dm +++ b/code/modules/clothing/head/jobs.dm @@ -166,6 +166,8 @@ desc = "An opulent hat that functions as a radio to God. Or as a lightning rod, depending on who you ask." icon_state = "bishopmitre" +#define CANDY_CD_TIME 2 MINUTES + //Detective /obj/item/clothing/head/fedora/det_hat name = "detective's fedora" @@ -174,11 +176,12 @@ icon_state = "detective" inhand_icon_state = "det_hat" interaction_flags_click = NEED_DEXTERITY|NEED_HANDS|ALLOW_RESTING - /// Cooldown for retrieving precious candy corn on alt click - var/candy_cooldown = 0 dog_fashion = /datum/dog_fashion/head/detective - ///Path for the flask that spawns inside their hat roundstart + /// Path for the flask that spawns inside their hat roundstart var/flask_path = /obj/item/reagent_containers/cup/glass/flask/det + /// Cooldown for retrieving precious candy corn with rmb + COOLDOWN_DECLARE(candy_cooldown) + /datum/armor/fedora_det_hat melee = 25 @@ -189,28 +192,46 @@ acid = 50 wound = 5 + /obj/item/clothing/head/fedora/det_hat/Initialize(mapload) . = ..() create_storage(storage_type = /datum/storage/pockets/small/fedora/detective) + register_context() + new flask_path(src) + /obj/item/clothing/head/fedora/det_hat/examine(mob/user) . = ..() . += span_notice("Alt-click to take a candy corn.") + +/obj/item/clothing/head/fedora/det_hat/add_context(atom/source, list/context, obj/item/held_item, mob/user) + . = ..() + + context[SCREENTIP_CONTEXT_ALT_LMB] = "Candy Time" + + return CONTEXTUAL_SCREENTIP_SET + + +/// Now to solve where all these keep coming from /obj/item/clothing/head/fedora/det_hat/click_alt(mob/user) - if(candy_cooldown >= world.time) + if(!COOLDOWN_FINISHED(src, candy_cooldown)) to_chat(user, span_warning("You just took a candy corn! You should wait a couple minutes, lest you burn through your stash.")) return CLICK_ACTION_BLOCKING - var/obj/item/food/candy_corn/CC = new /obj/item/food/candy_corn(src) - user.put_in_hands(CC) + var/obj/item/food/candy_corn/sweets = new /obj/item/food/candy_corn(src) + user.put_in_hands(sweets) to_chat(user, span_notice("You slip a candy corn from your hat.")) - candy_cooldown = world.time+1200 + COOLDOWN_START(src, candy_cooldown, CANDY_CD_TIME) + return CLICK_ACTION_SUCCESS + +#undef CANDY_CD_TIME + /obj/item/clothing/head/fedora/det_hat/minor flask_path = /obj/item/reagent_containers/cup/glass/flask/det/minor @@ -225,8 +246,10 @@ interaction_flags_click = FORBID_TELEKINESIS_REACH|ALLOW_RESTING ///prefix our phrases must begin with var/prefix = "go go gadget" - ///an assoc list of phrase = item (like gun = revolver) - var/list/items_by_phrase = list() + ///an assoc list of regex = item (like regex datum = revolver item) + var/list/items_by_regex = list() + ///A an assoc list of regex = phrase (like regex datum = gun text) + var/list/phrases_by_regex = list() ///how many gadgets can we hold var/max_items = 4 ///items above this weight cannot be put in the hat @@ -237,36 +260,58 @@ become_hearing_sensitive(ROUNDSTART_TRAIT) QDEL_NULL(atom_storage) +/obj/item/clothing/head/fedora/inspector_hat/proc/set_prefix(desired_prefix) + + prefix = desired_prefix + + // Regenerated the phrases here. + for(var/old_regex in phrases_by_regex) + var/old_phrase = phrases_by_regex[old_regex] + var/obj/item/old_item = items_by_regex[old_regex] + items_by_regex -= old_regex + phrases_by_regex -= old_regex + set_phrase(old_phrase,old_item) + + return TRUE + +/obj/item/clothing/head/fedora/inspector_hat/proc/set_phrase(desired_phrase,obj/item/associated_item) + + var/regex/phrase_regex = regex("[prefix]\[\\s\\W\]+[desired_phrase]","i") + + phrases_by_regex[phrase_regex] = desired_phrase + items_by_regex[phrase_regex] = associated_item + + return TRUE + /obj/item/clothing/head/fedora/inspector_hat/examine(mob/user) . = ..() . += span_notice("You can put items inside, and get them out by saying a phrase, or using it in-hand!") . += span_notice("The prefix is [prefix], and you can change it with alt-click!\n") - for(var/phrase in items_by_phrase) - var/obj/item/item = items_by_phrase[phrase] - . += span_notice("[icon2html(item, user)] You can remove [item] by saying \"[prefix] [phrase]\"!") + for(var/found_regex in phrases_by_regex) + var/found_phrase = phrases_by_regex[found_regex] + var/obj/item/found_item = items_by_regex[found_regex] + . += span_notice("[icon2html(found_item, user)] You can remove [found_item] by saying \"[prefix] [found_phrase]\"!") /obj/item/clothing/head/fedora/inspector_hat/Hear(message, atom/movable/speaker, message_language, raw_message, radio_freq, list/spans, list/message_mods = list(), message_range) . = ..() var/mob/living/carbon/wearer = loc if(!istype(wearer) || speaker != wearer) //if we are worn - return FALSE + return raw_message = htmlrendertext(raw_message) - var/prefix_index = findtext(raw_message, prefix) - if(prefix_index != 1) - return FALSE - - var/the_phrase = trim_left(replacetext(raw_message, prefix, "")) - var/obj/item/result = items_by_phrase[the_phrase] - if(!result) - return FALSE - if(wearer.put_in_active_hand(result)) - wearer.visible_message(span_warning("[src] drops [result] into the hands of [wearer]!")) - else - balloon_alert(wearer, "cant put in hands!") + for(var/regex/found_regex as anything in phrases_by_regex) + if(!found_regex.Find(raw_message)) + continue + var/obj/item/found_item = items_by_regex[found_regex] + if(wearer.put_in_hands(found_item)) + wearer.visible_message(span_warning("[src] drops [found_item] into the hands of [wearer]!")) + . = TRUE + else + balloon_alert(wearer, "can't put in hands!") + break - return TRUE + return . /obj/item/clothing/head/fedora/inspector_hat/attackby(obj/item/item, mob/user, params) . = ..() @@ -278,51 +323,61 @@ balloon_alert(user, "too big!") return - var/input = tgui_input_text(user, "What is the activation phrase?", "Activation phrase", "gadget", max_length = 26) - if(!input || !user.can_perform_action(src, FORBID_TELEKINESIS_REACH)) - return - if(input in items_by_phrase) - balloon_alert(user, "already used!") + var/desired_phrase = tgui_input_text(user, "What is the activation phrase?", "Activation phrase", "gadget", max_length = 26) + if(!desired_phrase || !user.can_perform_action(src, FORBID_TELEKINESIS_REACH)) return if(item.loc != user || !user.transferItemToLoc(item, src)) return - to_chat(user, span_notice("You install [item] into the [thtotext(contents.len)] slot in [src].")) + to_chat(user, span_notice("You install [item] into the [thtotext(contents.len)] slot of [src].")) playsound(src, 'sound/machines/click.ogg', 30, TRUE) - items_by_phrase[input] = item + set_phrase(desired_phrase,item) + + return TRUE /obj/item/clothing/head/fedora/inspector_hat/attack_self(mob/user) . = ..() - var/phrase = tgui_input_list(user, "What item do you want to remove by phrase?", "Item Removal", items_by_phrase) - if(!phrase || !user.can_perform_action(src, FORBID_TELEKINESIS_REACH)) - return - user.put_in_inactive_hand(items_by_phrase[phrase]) + if(!length(items_by_regex)) + return CLICK_ACTION_BLOCKING + var/list/found_items = list() + for(var/found_regex in items_by_regex) + found_items += items_by_regex[found_regex] + var/obj/found_item = tgui_input_list(user, "What item do you want to remove?", "Item Removal", found_items) + if(!found_item || !user.can_perform_action(src, FORBID_TELEKINESIS_REACH)) + return CLICK_ACTION_BLOCKING + user.put_in_inactive_hand(found_item) /obj/item/clothing/head/fedora/inspector_hat/click_alt(mob/user) var/new_prefix = tgui_input_text(user, "What should be the new prefix?", "Activation prefix", prefix, max_length = 24) if(!new_prefix || !user.can_perform_action(src, FORBID_TELEKINESIS_REACH)) return CLICK_ACTION_BLOCKING - prefix = new_prefix + set_prefix(new_prefix) return CLICK_ACTION_SUCCESS /obj/item/clothing/head/fedora/inspector_hat/Exited(atom/movable/gone, direction) . = ..() - for(var/phrase in items_by_phrase) - var/obj/item/result = items_by_phrase[phrase] - if(gone == result) - items_by_phrase -= phrase - return + for(var/found_regex in items_by_regex) + var/obj/item/found_item = items_by_regex[found_regex] + if(gone != found_item) + continue + items_by_regex -= found_regex + phrases_by_regex -= found_regex + break /obj/item/clothing/head/fedora/inspector_hat/atom_destruction(damage_flag) - for(var/phrase in items_by_phrase) - var/obj/item/result = items_by_phrase[phrase] - result.forceMove(drop_location()) - items_by_phrase = null + + var/atom/atom_location = drop_location() + for(var/found_regex in items_by_regex) + var/obj/item/result = items_by_regex[found_regex] + result.forceMove(atom_location) + items_by_regex -= found_regex + phrases_by_regex -= found_regex + return ..() /obj/item/clothing/head/fedora/inspector_hat/Destroy() - QDEL_LIST_ASSOC(items_by_phrase) + QDEL_LIST_ASSOC(items_by_regex) //Anything that failed to drop gets deleted. return ..() //Mime @@ -330,6 +385,8 @@ name = "beret" desc = "A beret, a mime's favorite headwear." icon_state = "beret" + icon_preview = 'icons/obj/clothing/head/beret.dmi' + icon_state_preview = "beret" dog_fashion = /datum/dog_fashion/head/beret greyscale_config = /datum/greyscale_config/beret greyscale_config_worn = /datum/greyscale_config/beret/worn @@ -644,7 +701,7 @@ else var/obj/item/organ/internal/tongue/has_tongue = human_examined.get_organ_slot(ORGAN_SLOT_TONGUE) var/pill_count = 0 - for(var/datum/action/item_action/hands_free/activate_pill/pill in human_examined.actions) + for(var/datum/action/item_action/activate_pill/pill in human_examined.actions) pill_count++ if(pill_count >= 1 && has_tongue) diff --git a/code/modules/clothing/head/tinfoilhat.dm b/code/modules/clothing/head/tinfoilhat.dm index 4b265778e237c..74ce320a8aba0 100644 --- a/code/modules/clothing/head/tinfoilhat.dm +++ b/code/modules/clothing/head/tinfoilhat.dm @@ -8,6 +8,7 @@ clothing_flags = ANTI_TINFOIL_MANEUVER var/datum/brain_trauma/mild/phobia/conspiracies/paranoia var/warped = FALSE + interaction_flags_mouse_drop = NEED_HANDS /datum/armor/costume_foilhat laser = -5 @@ -42,10 +43,10 @@ user.gain_trauma(paranoia, TRAUMA_RESILIENCE_MAGIC) to_chat(user, span_warning("As you don the foiled hat, an entire world of conspiracy theories and seemingly insane ideas suddenly rush into your mind. What you once thought unbelievable suddenly seems.. undeniable. Everything is connected and nothing happens just by accident. You know too much and now they're out to get you. ")) -/obj/item/clothing/head/costume/foilhat/MouseDrop(atom/over_object) +/obj/item/clothing/head/costume/foilhat/mouse_drop_dragged(atom/over_object, mob/user) //God Im sorry - if(!warped && iscarbon(usr)) - var/mob/living/carbon/C = usr + if(!warped && iscarbon(user)) + var/mob/living/carbon/C = user if(src == C.head) to_chat(C, span_userdanger("Why would you want to take this off? Do you want them to get into your mind?!")) return diff --git a/code/modules/clothing/head/welding.dm b/code/modules/clothing/head/welding.dm index 47433dd90f8e9..cb785447174f7 100644 --- a/code/modules/clothing/head/welding.dm +++ b/code/modules/clothing/head/welding.dm @@ -14,6 +14,7 @@ actions_types = list(/datum/action/item_action/toggle) visor_flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDESNOUT visor_flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH | PEPPERPROOF + visor_vars_to_toggle = VISOR_FLASHPROTECT | VISOR_TINT resistance_flags = FIRE_PROOF clothing_flags = SNUG_FIT | STACKABLE_HELMET_EXEMPT diff --git a/code/modules/clothing/head/wig.dm b/code/modules/clothing/head/wig.dm index 5ab2bcad2144c..10d69d2457c9f 100644 --- a/code/modules/clothing/head/wig.dm +++ b/code/modules/clothing/head/wig.dm @@ -25,7 +25,7 @@ item_flags &= ~EXAMINE_SKIP /obj/item/clothing/head/wig/update_icon_state() - var/datum/sprite_accessory/hair/hair_style = GLOB.hairstyles_list[hairstyle] + var/datum/sprite_accessory/hair/hair_style = SSaccessories.hairstyles_list[hairstyle] if(hair_style) icon = hair_style.icon icon_state = hair_style.icon_state @@ -36,7 +36,7 @@ if(isinhands) return - var/datum/sprite_accessory/hair/hair = GLOB.hairstyles_list[hairstyle] + var/datum/sprite_accessory/hair/hair = SSaccessories.hairstyles_list[hairstyle] if(!hair) return @@ -49,7 +49,7 @@ hair_overlay.overlays += emissive_blocker(hair_overlay.icon, hair_overlay.icon_state, src, alpha = hair_overlay.alpha) /obj/item/clothing/head/wig/attack_self(mob/user) - var/new_style = tgui_input_list(user, "Select a hairstyle", "Wig Styling", GLOB.hairstyles_list - "Bald") + var/new_style = tgui_input_list(user, "Select a hairstyle", "Wig Styling", SSaccessories.hairstyles_list - "Bald") var/newcolor = adjustablecolor ? input(usr,"","Choose Color",color) as color|null : null if(!user.can_perform_action(src)) return @@ -60,20 +60,22 @@ add_atom_colour(newcolor, FIXED_COLOUR_PRIORITY) update_appearance() -/obj/item/clothing/head/wig/afterattack(mob/living/carbon/human/target, mob/user) - . = ..() - if(!istype(target)) - return +/obj/item/clothing/head/wig/ranged_interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + return interact_with_atom(interacting_with, user, modifiers) +/obj/item/clothing/head/wig/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + if(!ishuman(interacting_with) || interacting_with == user) + return NONE + var/mob/living/carbon/human/target = interacting_with if(target.head) var/obj/item/clothing/head = target.head if((head.flags_inv & HIDEHAIR) && !istype(head, /obj/item/clothing/head/wig)) to_chat(user, span_warning("You can't get a good look at [target.p_their()] hair!")) - return + return ITEM_INTERACT_BLOCKING var/obj/item/bodypart/head/noggin = target.get_bodypart(BODY_ZONE_HEAD) if(!noggin) to_chat(user, span_warning("[target.p_They()] have no head!")) - return + return ITEM_INTERACT_BLOCKING var/selected_hairstyle = null var/selected_hairstyle_color = null @@ -90,9 +92,10 @@ add_atom_colour(selected_hairstyle_color, FIXED_COLOUR_PRIORITY) hairstyle = selected_hairstyle update_appearance() + return ITEM_INTERACT_SUCCESS /obj/item/clothing/head/wig/random/Initialize(mapload) - hairstyle = pick(GLOB.hairstyles_list - "Bald") //Don't want invisible wig + hairstyle = pick(SSaccessories.hairstyles_list - "Bald") //Don't want invisible wig add_atom_colour("#[random_short_color()]", FIXED_COLOUR_PRIORITY) . = ..() @@ -104,7 +107,7 @@ custom_price = PAYCHECK_COMMAND /obj/item/clothing/head/wig/natural/Initialize(mapload) - hairstyle = pick(GLOB.hairstyles_list - "Bald") + hairstyle = pick(SSaccessories.hairstyles_list - "Bald") . = ..() /obj/item/clothing/head/wig/natural/visual_equipped(mob/living/carbon/human/user, slot) diff --git a/code/modules/clothing/masks/costume.dm b/code/modules/clothing/masks/costume.dm index 626d8ce4a65d4..844b823880ac4 100644 --- a/code/modules/clothing/masks/costume.dm +++ b/code/modules/clothing/masks/costume.dm @@ -4,6 +4,7 @@ icon_state = "joy" clothing_flags = MASKINTERNALS flags_inv = HIDESNOUT + obj_flags = parent_type::obj_flags | INFINITE_RESKIN unique_reskin = list( "Joy" = "joy", "Flushed" = "flushed", @@ -16,7 +17,6 @@ /obj/item/clothing/mask/joy/reskin_obj(mob/user) . = ..() user.update_worn_mask() - current_skin = null//so we can infinitely reskin /obj/item/clothing/mask/mummy name = "mummy mask" diff --git a/code/modules/clothing/masks/gasmask.dm b/code/modules/clothing/masks/gasmask.dm index 5cc18a28fbb06..36fe591a63edb 100644 --- a/code/modules/clothing/masks/gasmask.dm +++ b/code/modules/clothing/masks/gasmask.dm @@ -27,7 +27,7 @@ GLOBAL_LIST_INIT(clown_mask_options, list( ///Does the mask have an FOV? var/has_fov = TRUE ///Cigarette in the mask - var/obj/item/clothing/mask/cigarette/cig + var/obj/item/cigarette/cig voice_filter = "lowpass=f=750,volume=2" /datum/armor/mask_gas @@ -84,7 +84,7 @@ GLOBAL_LIST_INIT(clown_mask_options, list( /obj/item/clothing/mask/gas/attackby(obj/item/tool, mob/user) var/valid_wearer = ismob(loc) var/mob/wearer = loc - if(istype(tool, /obj/item/clothing/mask/cigarette)) + if(istype(tool, /obj/item/cigarette)) if(flags_cover & MASKCOVERSMOUTH) balloon_alert(user, "mask's mouth is covered!") return ..() @@ -219,7 +219,9 @@ GLOBAL_LIST_INIT(clown_mask_options, list( flags_cover = MASKCOVERSEYES visor_flags_inv = HIDEEYES visor_flags_cover = MASKCOVERSEYES + visor_vars_to_toggle = VISOR_FLASHPROTECT | VISOR_TINT resistance_flags = FIRE_PROOF + clothing_flags = parent_type::clothing_flags | INTERNALS_ADJUST_EXEMPT /datum/armor/gas_welding melee = 10 @@ -227,6 +229,9 @@ GLOBAL_LIST_INIT(clown_mask_options, list( fire = 100 acid = 55 +/obj/item/clothing/mask/gas/welding/attack_self(mob/user) + adjust_visor(user) + /obj/item/clothing/mask/gas/welding/adjust_visor(mob/living/user) . = ..() if(.) @@ -273,6 +278,7 @@ GLOBAL_LIST_INIT(clown_mask_options, list( dye_color = DYE_CLOWN w_class = WEIGHT_CLASS_SMALL flags_cover = MASKCOVERSEYES + clothing_traits = list(TRAIT_PERCEIVED_AS_CLOWN) resistance_flags = FLAMMABLE actions_types = list(/datum/action/item_action/adjust) dog_fashion = /datum/dog_fashion/head/clown diff --git a/code/modules/clothing/masks/muzzle.dm b/code/modules/clothing/masks/muzzle.dm index 32f29a54a1f43..6154e7762cb52 100644 --- a/code/modules/clothing/masks/muzzle.dm +++ b/code/modules/clothing/masks/muzzle.dm @@ -5,11 +5,14 @@ inhand_icon_state = "blindfold" lefthand_file = 'icons/mob/inhands/clothing/glasses_lefthand.dmi' righthand_file = 'icons/mob/inhands/clothing/glasses_righthand.dmi' - clothing_flags = BLOCKS_SPEECH flags_cover = MASKCOVERSMOUTH w_class = WEIGHT_CLASS_SMALL equip_delay_other = 20 +/obj/item/clothing/mask/muzzle/Initialize(mapload) + . = ..() + AddElement(/datum/element/muffles_speech) + /obj/item/clothing/mask/muzzle/attack_paw(mob/user, list/modifiers) if(iscarbon(user)) var/mob/living/carbon/carbon_user = user @@ -26,7 +29,7 @@ lefthand_file = 'icons/mob/inhands/clothing/masks_lefthand.dmi' righthand_file = 'icons/mob/inhands/clothing/masks_righthand.dmi' body_parts_covered = NONE - clothing_flags = MASKINTERNALS | BLOCKS_SPEECH + clothing_flags = MASKINTERNALS armor_type = /datum/armor/muzzle_breath equip_delay_other = 25 // my sprite has 4 straps, a-la a head harness. takes a while to equip, longer than a muzzle @@ -37,7 +40,7 @@ worn_icon_state = "tape_piece_worn" inhand_icon_state = null w_class = WEIGHT_CLASS_TINY - clothing_flags = INEDIBLE_CLOTHING|BLOCKS_SPEECH + clothing_flags = INEDIBLE_CLOTHING equip_delay_other = 40 strip_delay = 40 greyscale_config = /datum/greyscale_config/tape_piece diff --git a/code/modules/clothing/neck/_neck.dm b/code/modules/clothing/neck/_neck.dm index a41442c0fb9db..839f3430cd9cc 100644 --- a/code/modules/clothing/neck/_neck.dm +++ b/code/modules/clothing/neck/_neck.dm @@ -3,6 +3,7 @@ icon = 'icons/obj/clothing/neck.dmi' body_parts_covered = NECK slot_flags = ITEM_SLOT_NECK + interaction_flags_click = NEED_DEXTERITY strip_delay = 40 equip_delay_other = 40 @@ -44,6 +45,7 @@ icon = 'icons/obj/clothing/neck.dmi' icon_state = "tie_greyscale_tied" inhand_icon_state = "" //no inhands + alternate_worn_layer = LOW_NECK_LAYER // So that it renders below suit jackets, MODsuits, etc w_class = WEIGHT_CLASS_SMALL custom_price = PAYCHECK_CREW greyscale_config = /datum/greyscale_config/ties @@ -59,13 +61,13 @@ /obj/item/clothing/neck/tie/Initialize(mapload) . = ..() - if(clip_on) - return - update_appearance(UPDATE_ICON) + if(!clip_on) + update_appearance(UPDATE_ICON) register_context() /obj/item/clothing/neck/tie/examine(mob/user) . = ..() + . += span_notice("The tie can be worn above or below your suit. Alt-Right-click to toggle.") if(clip_on) . += span_notice("Looking closely, you can see that it's actually a cleverly disguised clip-on.") else if(!is_tied) @@ -102,6 +104,11 @@ user.update_clothing(ITEM_SLOT_NECK) return CLICK_ACTION_SUCCESS +/obj/item/clothing/neck/tie/click_alt_secondary(mob/user) + alternate_worn_layer = (alternate_worn_layer == initial(alternate_worn_layer) ? NONE : initial(alternate_worn_layer)) + user.update_clothing(ITEM_SLOT_NECK) + balloon_alert(user, "wearing [alternate_worn_layer == initial(alternate_worn_layer) ? "below" : "above"] suits") + /obj/item/clothing/neck/tie/update_icon() . = ..() if(clip_on) @@ -120,14 +127,26 @@ /obj/item/clothing/neck/tie/add_context(atom/source, list/context, obj/item/held_item, mob/user) . = ..() + context[SCREENTIP_CONTEXT_ALT_RMB] = "Wear [alternate_worn_layer == initial(alternate_worn_layer) ? "above" : "below"] suit" if(clip_on) - return + return CONTEXTUAL_SCREENTIP_SET if(is_tied) context[SCREENTIP_CONTEXT_ALT_LMB] = "Untie" else context[SCREENTIP_CONTEXT_ALT_LMB] = "Tie" return CONTEXTUAL_SCREENTIP_SET +/obj/item/clothing/neck/tie/worn_overlays(mutable_appearance/standing, isinhands) + . = ..() + var/mob/living/carbon/human/wearer = loc + if(!ishuman(wearer) || !wearer.w_uniform) + return + var/obj/item/clothing/under/undershirt = wearer.w_uniform + if(!istype(undershirt) || !LAZYLEN(undershirt.attached_accessories)) + return + if(alternate_worn_layer) + . += undershirt.accessory_overlay + /obj/item/clothing/neck/tie/blue name = "blue tie" icon_state = "tie_greyscale_untied" @@ -198,14 +217,14 @@ user.visible_message(span_suicide("[user] puts \the [src] to [user.p_their()] chest! It looks like [user.p_they()] won't hear much!")) return OXYLOSS -/obj/item/clothing/neck/stethoscope/attack(mob/living/M, mob/living/user) - if(!ishuman(M) || !isliving(user)) +/obj/item/clothing/neck/stethoscope/attack(mob/living/target, mob/living/user) + if(!ishuman(target) || !isliving(user)) return ..() if(user.combat_mode) return - var/mob/living/carbon/carbon_patient = M - var/body_part = parse_zone(user.zone_selected) + var/mob/living/carbon/carbon_patient = target + var/body_part = carbon_patient.parse_zone_with_bodypart(user.zone_selected) var/oxy_loss = carbon_patient.getOxyLoss() var/heart_strength @@ -235,13 +254,13 @@ || (HAS_TRAIT(carbon_patient, TRAIT_NOBREATH))\ || carbon_patient.failed_last_breath \ || carbon_patient.losebreath)//If pt is dead or otherwise not breathing - render_list += "[M.p_Theyre()] not breathing!\n" + render_list += "[target.p_Theyre()] not breathing!\n" else if(lungs.damage > 10)//if breathing, check for lung damage - render_list += "You hear fluid in [M.p_their()] lungs!\n" + render_list += "You hear fluid in [target.p_their()] lungs!\n" else if(oxy_loss > 10)//if they have suffocation damage - render_list += "[M.p_Theyre()] breathing heavily!\n" + render_list += "[target.p_Theyre()] breathing heavily!\n" else - render_list += "[M.p_Theyre()] breathing normally.\n"//they're okay :D + render_list += "[target.p_Theyre()] breathing normally.\n"//they're okay :D //assess heart if(body_part == BODY_ZONE_CHEST)//if we're listening to the chest @@ -261,20 +280,20 @@ var/appendix_okay = TRUE var/liver_okay = TRUE if(!liver)//sanity check, ensure the patient actually has a liver - render_list += "You can't feel anything where [M.p_their()] liver would be.\n" + render_list += "You can't feel anything where [target.p_their()] liver would be.\n" liver_okay = FALSE else if(liver.damage > 10) - render_list += "[M.p_Their()] liver feels firm.\n"//their liver is damaged + render_list += "[target.p_Their()] liver feels firm.\n"//their liver is damaged liver_okay = FALSE if(!appendix)//sanity check, ensure the patient actually has an appendix - render_list += "You can't feel anything where [M.p_their()] appendix would be.\n" + render_list += "You can't feel anything where [target.p_their()] appendix would be.\n" appendix_okay = FALSE else if(appendix.damage > 10 && carbon_patient.stat == CONSCIOUS) - render_list += "[M] screams when you lift your hand from [M.p_their()] appendix!\n"//scream if their appendix is damaged and they're awake - M.emote("scream") + render_list += "[target] screams when you lift your hand from [target.p_their()] appendix!\n"//scream if their appendix is damaged and they're awake + target.emote("scream") appendix_okay = FALSE if(liver_okay && appendix_okay)//if they have all their organs and have no detectable damage @@ -310,7 +329,7 @@ else pulse_pressure = span_notice("strong")//they're okay :D - render_list += "[M.p_Their()] pulse is [pulse_pressure] and [heart_strength].\n" + render_list += "[target.p_Their()] pulse is [pulse_pressure] and [heart_strength].\n" //display our packaged information in an examine block for easy reading to_chat(user, examine_block(jointext(render_list, "")), type = MESSAGE_TYPE_INFO) @@ -379,6 +398,8 @@ /obj/item/clothing/neck/large_scarf name = "large scarf" icon_state = "large_scarf" + icon_preview = 'icons/obj/fluff/previews.dmi' + icon_state_preview = "scarf_large" w_class = WEIGHT_CLASS_TINY custom_price = PAYCHECK_CREW greyscale_colors = "#C6C6C6#EEEEEE" @@ -455,25 +476,21 @@ selling = !selling to_chat(user, span_notice("[src] has been set to [selling ? "'Sell'" : "'Get Price'"] mode.")) -/obj/item/clothing/neck/necklace/dope/merchant/afterattack(obj/item/I, mob/user, proximity) - . = ..() - if(!proximity) - return - . |= AFTERATTACK_PROCESSED_ITEM - var/datum/export_report/ex = export_item_and_contents(I, delete_unsold = selling, dry_run = !selling) +/obj/item/clothing/neck/necklace/dope/merchant/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + var/datum/export_report/ex = export_item_and_contents(interacting_with, delete_unsold = selling, dry_run = !selling) var/price = 0 for(var/x in ex.total_amount) price += ex.total_value[x] if(price) var/true_price = round(price*profit_scaling) - to_chat(user, span_notice("[selling ? "Sold" : "Getting the price of"] [I], value: [true_price] credits[I.contents.len ? " (exportable contents included)" : ""].[profit_scaling < 1 && selling ? "[round(price-true_price)] credit\s taken as processing fee\s." : ""]")) + to_chat(user, span_notice("[selling ? "Sold" : "Getting the price of"] [interacting_with], value: [true_price] credits[interacting_with.contents.len ? " (exportable contents included)" : ""].[profit_scaling < 1 && selling ? "[round(price-true_price)] credit\s taken as processing fee\s." : ""]")) if(selling) new /obj/item/holochip(get_turf(user), true_price) else - to_chat(user, span_warning("There is no export value for [I] or any items within it.")) + to_chat(user, span_warning("There is no export value for [interacting_with] or any items within it.")) - return . + return ITEM_INTERACT_BLOCKING /obj/item/clothing/neck/beads name = "plastic bead necklace" diff --git a/code/modules/clothing/outfits/standard.dm b/code/modules/clothing/outfits/standard.dm index a22691495ccc1..422cb34fa090d 100644 --- a/code/modules/clothing/outfits/standard.dm +++ b/code/modules/clothing/outfits/standard.dm @@ -11,7 +11,7 @@ glasses = /obj/item/clothing/glasses/thermal/eyepatch gloves = /obj/item/clothing/gloves/tackler/combat/insulated head = /obj/item/clothing/head/helmet/space/beret - mask = /obj/item/clothing/mask/cigarette/cigar/havana + mask = /obj/item/cigarette/cigar/havana shoes = /obj/item/clothing/shoes/combat/swat r_pocket = /obj/item/lighter @@ -185,7 +185,7 @@ l_hand = /obj/item/fireaxe /datum/outfit/psycho/post_equip(mob/living/carbon/human/H) - for(var/obj/item/carried_item in H.get_equipped_items(include_pockets = TRUE, include_accessories = TRUE)) + for(var/obj/item/carried_item in H.get_equipped_items(INCLUDE_POCKETS | INCLUDE_ACCESSORIES)) carried_item.add_mob_blood(H)//Oh yes, there will be blood... for(var/obj/item/I in H.held_items) I.add_mob_blood(H) @@ -245,7 +245,7 @@ glasses = /obj/item/clothing/glasses/sunglasses gloves = /obj/item/clothing/gloves/tackler/combat/insulated head = /obj/item/clothing/head/hats/centhat - mask = /obj/item/clothing/mask/cigarette/cigar/cohiba + mask = /obj/item/cigarette/cigar/cohiba shoes = /obj/item/clothing/shoes/combat/swat l_pocket = /obj/item/ammo_box/a357 r_pocket = /obj/item/lighter diff --git a/code/modules/clothing/shoes/clown.dm b/code/modules/clothing/shoes/clown.dm index 76395a56efd5e..699d6fa627bf5 100644 --- a/code/modules/clothing/shoes/clown.dm +++ b/code/modules/clothing/shoes/clown.dm @@ -30,18 +30,19 @@ if(is_clown_job(user.mind?.assigned_role)) user.clear_mood_event("clownshoes") -/obj/item/clothing/shoes/clown_shoes/CtrlClick(mob/living/user) +/obj/item/clothing/shoes/clown_shoes/item_ctrl_click(mob/user) if(!isliving(user)) - return + return CLICK_ACTION_BLOCKING if(user.get_active_held_item() != src) to_chat(user, span_warning("You must hold the [src] in your hand to do this!")) - return + return CLICK_ACTION_BLOCKING if (!enabled_waddle) to_chat(user, span_notice("You switch off the waddle dampeners!")) enabled_waddle = TRUE else to_chat(user, span_notice("You switch on the waddle dampeners!")) enabled_waddle = FALSE + return CLICK_ACTION_SUCCESS /obj/item/clothing/shoes/clown_shoes/jester name = "jester shoes" diff --git a/code/modules/clothing/shoes/cowboy.dm b/code/modules/clothing/shoes/cowboy.dm index 73c5a9d0d958c..4295b91cad2f5 100644 --- a/code/modules/clothing/shoes/cowboy.dm +++ b/code/modules/clothing/shoes/cowboy.dm @@ -5,6 +5,8 @@ armor_type = /datum/armor/shoes_cowboy custom_price = PAYCHECK_CREW can_be_tied = FALSE + interaction_flags_mouse_drop = NEED_HANDS | NEED_DEXTERITY + var/max_occupants = 4 /// Do these boots have spur sounds? var/has_spurs = FALSE @@ -52,9 +54,9 @@ user.say(pick("Hot damn!", "Hoo-wee!", "Got-dang!"), spans = list(SPAN_YELL), forced=TRUE) user.client?.give_award(/datum/award/achievement/misc/hot_damn, user) -/obj/item/clothing/shoes/cowboy/MouseDrop_T(mob/living/target, mob/living/user) +/obj/item/clothing/shoes/cowboy/mouse_drop_receive(mob/living/target, mob/living/user, params) . = ..() - if(!(user.mobility_flags & MOBILITY_USE) || user.stat != CONSCIOUS || HAS_TRAIT(user, TRAIT_HANDS_BLOCKED) || !Adjacent(user) || !isliving(target) || !user.Adjacent(target) || target.stat == DEAD) + if(!(user.mobility_flags & MOBILITY_USE) || !isliving(target)) return if(contents.len >= max_occupants) to_chat(user, span_warning("[src] are full!")) diff --git a/code/modules/clothing/shoes/gunboots.dm b/code/modules/clothing/shoes/gunboots.dm index d8335b5fcb0ed..de74703d449ed 100644 --- a/code/modules/clothing/shoes/gunboots.dm +++ b/code/modules/clothing/shoes/gunboots.dm @@ -59,7 +59,7 @@ shot.original = target shot.fired_from = src shot.firer = wearer // don't hit ourself that would be really annoying - shot.impacted = list(wearer = TRUE) + shot.impacted = list(WEAKREF(wearer) = TRUE) shot.def_zone = pick(BODY_ZONE_L_LEG, BODY_ZONE_R_LEG) // they're fired from boots after all shot.preparePixelProjectile(target, wearer) if(!shot.suppressed) diff --git a/code/modules/clothing/shoes/sneakers.dm b/code/modules/clothing/shoes/sneakers.dm index 8d3d9f1764564..953d5bd9a1cb8 100644 --- a/code/modules/clothing/shoes/sneakers.dm +++ b/code/modules/clothing/shoes/sneakers.dm @@ -10,6 +10,7 @@ greyscale_config_inhand_left = /datum/greyscale_config/sneakers/inhand_left greyscale_config_inhand_right = /datum/greyscale_config/sneakers/inhand_right flags_1 = IS_PLAYER_COLORABLE_1 + interaction_flags_mouse_drop = NEED_HANDS /obj/item/clothing/shoes/sneakers/black name = "black shoes" @@ -146,10 +147,9 @@ return FALSE return ..() -/obj/item/clothing/shoes/sneakers/orange/MouseDrop(atom/over) - var/mob/m = usr - if(ishuman(m)) - var/mob/living/carbon/human/c = m +/obj/item/clothing/shoes/sneakers/orange/mouse_drop_dragged(atom/over_object, mob/user) + if(ishuman(user)) + var/mob/living/carbon/human/c = user if(c.shoes == src && attached_cuffs) to_chat(c, span_warning("You need help taking these off!")) return diff --git a/code/modules/clothing/spacesuits/_spacesuits.dm b/code/modules/clothing/spacesuits/_spacesuits.dm index bb8ee57b15cf4..703000a1f9133 100644 --- a/code/modules/clothing/spacesuits/_spacesuits.dm +++ b/code/modules/clothing/spacesuits/_spacesuits.dm @@ -13,7 +13,7 @@ clothing_flags = STOPSPRESSUREDAMAGE | THICKMATERIAL | SNUG_FIT | STACKABLE_HELMET_EXEMPT | HEADINTERNALS armor_type = /datum/armor/helmet_space flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR|HIDESNOUT - + interaction_flags_click = NEED_DEXTERITY cold_protection = HEAD min_cold_protection_temperature = SPACE_HELM_MIN_TEMP_PROTECT heat_protection = HEAD @@ -62,7 +62,7 @@ /// The default temperature setting var/temperature_setting = BODYTEMP_NORMAL /// If this is a path, this gets created as an object in Initialize. - var/obj/item/stock_parts/cell/cell = /obj/item/stock_parts/cell/high + var/obj/item/stock_parts/power_store/cell = /obj/item/stock_parts/power_store/cell/high /// Status of the cell cover on the suit var/cell_cover_open = FALSE /// Status of the thermal regulator @@ -185,7 +185,7 @@ // object handling for accessing features of the suit /obj/item/clothing/suit/space/attackby(obj/item/I, mob/user, params) - if(!cell_cover_open || !istype(I, /obj/item/stock_parts/cell)) + if(!cell_cover_open || !istype(I, /obj/item/stock_parts/power_store/cell)) return ..() if(cell) to_chat(user, span_warning("[src] already has a cell installed.")) @@ -201,12 +201,11 @@ return CLICK_ACTION_SUCCESS /// Remove the cell whent he cover is open on CTRL+Click -/obj/item/clothing/suit/space/CtrlClick(mob/living/user) - if(user.can_perform_action(src, NEED_DEXTERITY)) - if(cell_cover_open && cell) - remove_cell(user) - return - return ..() +/obj/item/clothing/suit/space/item_ctrl_click(mob/user) + . = CLICK_ACTION_BLOCKING + if(cell_cover_open && cell) + remove_cell(user) + return CLICK_ACTION_SUCCESS // Remove the cell when using the suit on its self /obj/item/clothing/suit/space/attack_self(mob/user) diff --git a/code/modules/clothing/spacesuits/bountyhunter.dm b/code/modules/clothing/spacesuits/bountyhunter.dm index 9218deb5633fc..cb8498dac14ca 100644 --- a/code/modules/clothing/spacesuits/bountyhunter.dm +++ b/code/modules/clothing/spacesuits/bountyhunter.dm @@ -7,7 +7,7 @@ armor_type = /datum/armor/space_hunter strip_delay = 130 resistance_flags = FIRE_PROOF | ACID_PROOF - cell = /obj/item/stock_parts/cell/hyper + cell = /obj/item/stock_parts/power_store/cell/hyper /datum/armor/space_hunter melee = 60 diff --git a/code/modules/clothing/spacesuits/plasmamen.dm b/code/modules/clothing/spacesuits/plasmamen.dm index bd20874f88d65..63a0dd515c3f6 100644 --- a/code/modules/clothing/spacesuits/plasmamen.dm +++ b/code/modules/clothing/spacesuits/plasmamen.dm @@ -104,6 +104,7 @@ return if(helmet_on) to_chat(user, span_notice("Your helmet's torch can't pass through your welding visor!")) + set_light_on(FALSE) helmet_on = FALSE playsound(src, 'sound/mecha/mechmove03.ogg', 50, TRUE) //Visors don't just come from nothing update_appearance() diff --git a/code/modules/clothing/spacesuits/syndi.dm b/code/modules/clothing/spacesuits/syndi.dm index cbacf064052db..67702582ff857 100644 --- a/code/modules/clothing/spacesuits/syndi.dm +++ b/code/modules/clothing/spacesuits/syndi.dm @@ -40,7 +40,7 @@ GLOBAL_LIST_INIT(syndicate_space_suits_to_helmets,list( w_class = WEIGHT_CLASS_NORMAL allowed = list(/obj/item/gun, /obj/item/melee/baton, /obj/item/melee/energy/sword/saber, /obj/item/restraints/handcuffs, /obj/item/tank/internals) armor_type = /datum/armor/space_syndicate - cell = /obj/item/stock_parts/cell/hyper + cell = /obj/item/stock_parts/power_store/cell/hyper var/helmet_type = /obj/item/clothing/head/helmet/space/syndicate //Green syndicate space suit diff --git a/code/modules/clothing/suits/armor.dm b/code/modules/clothing/suits/armor.dm index b12a220c2f07b..2502850bd700d 100644 --- a/code/modules/clothing/suits/armor.dm +++ b/code/modules/clothing/suits/armor.dm @@ -293,25 +293,6 @@ acid = 80 wound = 20 -/obj/item/clothing/suit/armor/bone - name = "bone armor" - desc = "A tribal armor plate, crafted from animal bone." - icon_state = "bonearmor" - inhand_icon_state = null - blood_overlay_type = "armor" - armor_type = /datum/armor/armor_bone - body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS - -/datum/armor/armor_bone - melee = 35 - bullet = 25 - laser = 25 - energy = 35 - bomb = 25 - fire = 50 - acid = 50 - wound = 10 - /obj/item/clothing/suit/armor/balloon_vest name = "balloon vest" desc = "A vest made entirely from balloons, resistant to any evil forces a mime could throw at you, including electricity and fire. Just a strike with something sharp, though..." diff --git a/code/modules/clothing/suits/costume.dm b/code/modules/clothing/suits/costume.dm index 9cf86a396e95a..929e8d931d5ca 100644 --- a/code/modules/clothing/suits/costume.dm +++ b/code/modules/clothing/suits/costume.dm @@ -21,6 +21,10 @@ body_parts_covered = HEAD flags_inv = HIDEHAIR|HIDEEARS|HIDEFACIALHAIR|HIDEFACE|HIDEMASK|HIDESNOUT +/obj/item/clothing/head/hooded/flashsuit/Initialize(mapload) + . = ..() + AddElement(/datum/element/wearable_client_colour, /datum/client_colour/flash_hood, ITEM_SLOT_HEAD, forced = TRUE) + /obj/item/clothing/suit/costume/pirate name = "pirate coat" desc = "Yarr." diff --git a/code/modules/clothing/suits/jacket.dm b/code/modules/clothing/suits/jacket.dm index 6db889032c064..9004f773e35ba 100644 --- a/code/modules/clothing/suits/jacket.dm +++ b/code/modules/clothing/suits/jacket.dm @@ -54,6 +54,16 @@ desc = "Aviators not included." icon_state = "bomberjacket" inhand_icon_state = "brownjsuit" + allowed = list( + /obj/item/flashlight, + /obj/item/tank/internals/emergency_oxygen, + /obj/item/tank/internals/plasmaman, + /obj/item/toy, + /obj/item/storage/fancy/cigarettes, + /obj/item/lighter, + /obj/item/gun/ballistic/rifle/boltaction/pipegun, + /obj/item/radio, + ) /obj/item/clothing/suit/jacket/leather name = "leather jacket" @@ -62,7 +72,19 @@ inhand_icon_state = "hostrench" resistance_flags = NONE max_heat_protection_temperature = ARMOR_MAX_TEMP_PROTECT - allowed = list(/obj/item/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter, /obj/item/gun/ballistic/automatic/pistol, /obj/item/gun/ballistic/revolver, /obj/item/gun/ballistic/revolver/c38/detective, /obj/item/radio) + allowed = list( + /obj/item/flashlight, + /obj/item/tank/internals/emergency_oxygen, + /obj/item/tank/internals/plasmaman, + /obj/item/toy, + /obj/item/storage/fancy/cigarettes, + /obj/item/lighter, + /obj/item/gun/ballistic/automatic/pistol, + /obj/item/gun/ballistic/revolver, + /obj/item/gun/ballistic/revolver/c38/detective, + /obj/item/gun/ballistic/rifle/boltaction/pipegun, + /obj/item/radio, + ) /obj/item/clothing/suit/jacket/leather/biker name = "biker jacket" @@ -96,7 +118,19 @@ desc = "A canvas jacket styled after classical American military garb. Feels sturdy, yet comfortable." icon_state = "militaryjacket" inhand_icon_state = null - allowed = list(/obj/item/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter, /obj/item/gun/ballistic/automatic/pistol, /obj/item/gun/ballistic/revolver, /obj/item/radio) + allowed = list( + /obj/item/flashlight, + /obj/item/tank/internals/emergency_oxygen, + /obj/item/tank/internals/plasmaman, + /obj/item/toy, + /obj/item/storage/fancy/cigarettes, + /obj/item/lighter, + /obj/item/gun/ballistic/automatic/pistol, + /obj/item/gun/ballistic/revolver, + /obj/item/gun/ballistic/revolver/c38/detective, + /obj/item/gun/ballistic/rifle/boltaction/pipegun, + /obj/item/radio, + ) /obj/item/clothing/suit/jacket/letterman name = "letterman jacket" @@ -118,6 +152,19 @@ icon_state = "letterman_s" inhand_icon_state = null species_exception = list(/datum/species/golem) + allowed = list( + /obj/item/flashlight, + /obj/item/tank/internals/emergency_oxygen, + /obj/item/tank/internals/plasmaman, + /obj/item/toy, + /obj/item/storage/fancy/cigarettes, + /obj/item/lighter, + /obj/item/gun/ballistic/automatic/pistol, + /obj/item/gun/ballistic/revolver, + /obj/item/gun/ballistic/revolver/c38/detective, + /obj/item/gun/ballistic/rifle/boltaction/pipegun, + /obj/item/radio, + ) /obj/item/clothing/suit/jacket/letterman_nanotrasen name = "blue letterman jacket" diff --git a/code/modules/clothing/suits/jobs.dm b/code/modules/clothing/suits/jobs.dm index a8b2a52ff0478..2b8fef5bb5b46 100644 --- a/code/modules/clothing/suits/jobs.dm +++ b/code/modules/clothing/suits/jobs.dm @@ -61,7 +61,7 @@ body_parts_covered = CHEST|GROIN|ARMS allowed = list( /obj/item/assembly/flash/handheld, - /obj/item/clothing/mask/cigarette, + /obj/item/cigarette, /obj/item/disk, /obj/item/lighter, /obj/item/melee, @@ -179,7 +179,9 @@ /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/t_scanner, - /obj/item/gun/ballistic/rifle/boltaction/pipegun/prime, + /obj/item/gun/ballistic/rifle/boltaction/pipegun, + /obj/item/storage/bag/rebar_quiver, + /obj/item/gun/ballistic/rifle/rebarxbow, ) resistance_flags = NONE species_exception = list(/datum/species/golem) @@ -383,27 +385,6 @@ body_parts_covered = HEAD flags_inv = HIDEHAIR|HIDEEARS -// Research Director - -/obj/item/clothing/suit/jacket/research_director - name = "research director's coat" - desc = "A mix between a labcoat and just a regular coat. It's made out of a special anti-bacterial, anti-acidic, and anti-biohazardous synthetic fabric." - icon_state = "labcoat_rd" - armor_type = /datum/armor/jacket_research_director - body_parts_covered = CHEST|GROIN|ARMS - -/datum/armor/jacket_research_director - bio = 75 - fire = 75 - acid = 75 - -/obj/item/clothing/suit/jacket/research_director/Initialize(mapload) - . = ..() - allowed += list( - /obj/item/storage/bag/xeno, - /obj/item/melee/baton/telescopic, - ) - // Atmos /obj/item/clothing/suit/atmos_overalls name = "atmospherics overalls" @@ -426,6 +407,9 @@ /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/extinguisher, + /obj/item/construction/rtd, + /obj/item/gun/ballistic/rifle/rebarxbow, + /obj/item/storage/bag/rebar_quiver, ) /datum/armor/atmos_overalls diff --git a/code/modules/clothing/suits/labcoat.dm b/code/modules/clothing/suits/labcoat.dm index 9a3d94e1dbf4b..e5cda21a78a77 100644 --- a/code/modules/clothing/suits/labcoat.dm +++ b/code/modules/clothing/suits/labcoat.dm @@ -69,6 +69,10 @@ greyscale_config_worn = /datum/greyscale_config/labcoat/worn greyscale_colors = "#EEEEEE#4A77A1#4A77A1#7095C2" +/obj/item/clothing/suit/toggle/labcoat/genetics/Initialize(mapload) + . = ..() + allowed += /obj/item/sequence_scanner + /obj/item/clothing/suit/toggle/labcoat/chemist name = "chemist labcoat" desc = "A suit that protects against minor chemical spills. Has an orange stripe on the shoulder." @@ -106,6 +110,9 @@ allowed += list( /obj/item/autopsy_scanner, /obj/item/scythe, + /obj/item/shovel, + /obj/item/shovel/serrated, + /obj/item/trench_tool, ) /obj/item/clothing/suit/toggle/labcoat/science @@ -135,3 +142,24 @@ greyscale_config = /datum/greyscale_config/labcoat greyscale_config_worn = /datum/greyscale_config/labcoat/worn greyscale_colors = "#EEEEEE#88242D#88242D#39393F" + +// Research Director + +/obj/item/clothing/suit/toggle/labcoat/research_director + name = "research director's coat" + desc = "A mix between a labcoat and just a regular coat. It's made out of a special anti-bacterial, anti-acidic, and anti-biohazardous synthetic fabric." + icon_state = "labcoat_rd" + armor_type = /datum/armor/jacket_research_director + body_parts_covered = CHEST|GROIN|ARMS + +/datum/armor/jacket_research_director + bio = 75 + fire = 75 + acid = 75 + +/obj/item/clothing/suit/toggle/labcoat/research_director/Initialize(mapload) + . = ..() + allowed += list( + /obj/item/storage/bag/xeno, + /obj/item/melee/baton/telescopic, + ) diff --git a/code/modules/clothing/suits/reactive_armour.dm b/code/modules/clothing/suits/reactive_armour.dm index 9fec4dbe82b92..c1889cc77383d 100644 --- a/code/modules/clothing/suits/reactive_armour.dm +++ b/code/modules/clothing/suits/reactive_armour.dm @@ -1,12 +1,12 @@ -/obj/item/reactive_armour_shell - name = "reactive armour shell" - desc = "An experimental suit of armour, awaiting installation of an anomaly core." +/obj/item/reactive_armor_shell + name = "reactive armor shell" + desc = "An experimental suit of armor, awaiting installation of an anomaly core." icon_state = "reactiveoff" icon = 'icons/obj/clothing/suits/armor.dmi' w_class = WEIGHT_CLASS_BULKY -/obj/item/reactive_armour_shell/attackby(obj/item/weapon, mob/user, params) - ..() +/obj/item/reactive_armor_shell/item_interaction(mob/living/user, obj/item/tool, list/modifiers) + . = ..() var/static/list/anomaly_armour_types = list( /obj/effect/anomaly/grav = /obj/item/clothing/suit/armor/reactive/repulse, /obj/effect/anomaly/flux = /obj/item/clothing/suit/armor/reactive/tesla, @@ -17,15 +17,16 @@ /obj/effect/anomaly/ectoplasm = /obj/item/clothing/suit/armor/reactive/ectoplasm, ) - if(istype(weapon, /obj/item/assembly/signaler/anomaly)) - var/obj/item/assembly/signaler/anomaly/anomaly = weapon - var/armour_path = anomaly_armour_types[anomaly.anomaly_type] + if(istype(tool, /obj/item/assembly/signaler/anomaly)) + var/obj/item/assembly/signaler/anomaly/anomaly = tool + var/armour_path = is_path_in_list(anomaly.anomaly_type, anomaly_armour_types, TRUE) if(!armour_path) armour_path = /obj/item/clothing/suit/armor/reactive/stealth //Lets not cheat the player if an anomaly type doesnt have its own armour coded to_chat(user, span_notice("You insert [anomaly] into the chest plate, and the armour gently hums to life.")) new armour_path(get_turf(src)) qdel(src) qdel(anomaly) + return ITEM_INTERACT_SUCCESS //Reactive armor /obj/item/clothing/suit/armor/reactive diff --git a/code/modules/clothing/suits/utility.dm b/code/modules/clothing/suits/utility.dm index c04b68ab553a8..1541c66a333b6 100644 --- a/code/modules/clothing/suits/utility.dm +++ b/code/modules/clothing/suits/utility.dm @@ -57,6 +57,7 @@ /obj/item/clothing/suit/utility/fire/firefighter icon_state = "firesuit" inhand_icon_state = "firefighter" + flags_inv = HIDESHOES|HIDEJUMPSUIT heat_protection = CHEST|GROIN|LEGS|FEET|ARMS cold_protection = CHEST|GROIN|LEGS|FEET|ARMS body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS diff --git a/code/modules/clothing/suits/wetfloor.dm b/code/modules/clothing/suits/wetfloor.dm index 390a529710aef..17bef117ca644 100644 --- a/code/modules/clothing/suits/wetfloor.dm +++ b/code/modules/clothing/suits/wetfloor.dm @@ -19,7 +19,7 @@ allowed = list( /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, - /obj/item/gun/ballistic/rifle/boltaction/pipegun/prime, + /obj/item/gun/ballistic/rifle/boltaction/pipegun, ) /datum/armor/suit_caution diff --git a/code/modules/clothing/suits/wintercoats.dm b/code/modules/clothing/suits/wintercoats.dm index 7c26a2383548f..cbbe357690846 100644 --- a/code/modules/clothing/suits/wintercoats.dm +++ b/code/modules/clothing/suits/wintercoats.dm @@ -384,6 +384,9 @@ allowed += list( /obj/item/autopsy_scanner, /obj/item/scythe, + /obj/item/shovel, + /obj/item/shovel/serrated, + /obj/item/trench_tool, ) /obj/item/clothing/head/hooded/winterhood/medical/coroner @@ -499,6 +502,10 @@ inhand_icon_state = null hoodtype = /obj/item/clothing/head/hooded/winterhood/science/genetics +/obj/item/clothing/suit/hooded/wintercoat/science/genetics/Initialize(mapload) + . = ..() + allowed += /obj/item/sequence_scanner + /obj/item/clothing/head/hooded/winterhood/science/genetics desc = "A white winter coat hood. It's warm." icon_state = "hood_genetics" @@ -518,7 +525,8 @@ /obj/item/t_scanner, /obj/item/construction/rld, /obj/item/construction/rtd, - /obj/item/gun/ballistic/rifle/rebarxbow + /obj/item/gun/ballistic/rifle/rebarxbow, + /obj/item/storage/bag/rebar_quiver, ) armor_type = /datum/armor/wintercoat_engineering hoodtype = /obj/item/clothing/head/hooded/winterhood/engineering @@ -629,6 +637,8 @@ /obj/item/storage/bag/ore, /obj/item/t_scanner/adv_mining_scanner, /obj/item/tank/internals, + /obj/item/shovel, + /obj/item/trench_tool, ) armor_type = /datum/armor/wintercoat_miner hoodtype = /obj/item/clothing/head/hooded/winterhood/miner diff --git a/code/modules/clothing/under/_under.dm b/code/modules/clothing/under/_under.dm index e91da4305a659..2168177abcba1 100644 --- a/code/modules/clothing/under/_under.dm +++ b/code/modules/clothing/under/_under.dm @@ -6,11 +6,13 @@ righthand_file = 'icons/mob/inhands/clothing/suits_righthand.dmi' body_parts_covered = CHEST|GROIN|LEGS|ARMS slot_flags = ITEM_SLOT_ICLOTHING + interaction_flags_click = NEED_DEXTERITY armor_type = /datum/armor/clothing_under equip_sound = 'sound/items/equip/jumpsuit_equip.ogg' drop_sound = 'sound/items/handling/cloth_drop.ogg' pickup_sound = 'sound/items/handling/cloth_pickup.ogg' limb_integrity = 30 + interaction_flags_click = ALLOW_RESTING /// Has this undersuit been freshly laundered and, as such, imparts a mood bonus for wearing var/freshly_laundered = FALSE @@ -51,17 +53,24 @@ if(random_sensor) //make the sensor mode favor higher levels, except coords. sensor_mode = pick(SENSOR_VITALS, SENSOR_VITALS, SENSOR_VITALS, SENSOR_LIVING, SENSOR_LIVING, SENSOR_COORDS, SENSOR_COORDS, SENSOR_OFF) - if(!unique_reskin) // Already registered via unique reskin - register_context() - AddElement(/datum/element/update_icon_updates_onmob, flags = ITEM_SLOT_ICLOTHING|ITEM_SLOT_OCLOTHING, body = TRUE) + register_context() + AddElement(/datum/element/update_icon_updates_onmob, flags = ITEM_SLOT_ICLOTHING|ITEM_SLOT_OCLOTHING|ITEM_SLOT_NECK, body = TRUE) +/obj/item/clothing/under/setup_reskinning() + if(!check_setup_reskinning()) + return + + // We already register context in Initialize. + RegisterSignal(src, COMSIG_CLICK_ALT, PROC_REF(on_click_alt_reskin)) /obj/item/clothing/under/add_context(atom/source, list/context, obj/item/held_item, mob/living/user) . = ..() var/changed = FALSE + if(isnull(held_item) && has_sensor == HAS_SENSORS) context[SCREENTIP_CONTEXT_RMB] = "Toggle suit sensors" + context[SCREENTIP_CONTEXT_CTRL_LMB] = "Set suit sensors to tracking" changed = TRUE if(istype(held_item, /obj/item/clothing/accessory) && length(attached_accessories) < max_number_of_accessories) @@ -80,7 +89,7 @@ context[SCREENTIP_CONTEXT_ALT_LMB] = "Wear [adjusted == ALT_STYLE ? "normally" : "casually"]" changed = TRUE - return changed ? CONTEXTUAL_SCREENTIP_SET : NONE + return changed ? CONTEXTUAL_SCREENTIP_SET : . /obj/item/clothing/under/worn_overlays(mutable_appearance/standing, isinhands = FALSE) @@ -330,6 +339,14 @@ if(H.w_uniform == src) H.update_suit_sensors() +/obj/item/clothing/under/item_ctrl_click(mob/user) + if(!can_toggle_sensors(user)) + return CLICK_ACTION_BLOCKING + + sensor_mode = SENSOR_COORDS + balloon_alert(user, "set to tracking") + return CLICK_ACTION_SUCCESS + /// Checks if the toggler is allowed to toggle suit sensors currently /obj/item/clothing/under/proc/can_toggle_sensors(mob/toggler) if(!can_use(toggler) || toggler.stat == DEAD) //make sure they didn't hold the window open. @@ -360,17 +377,10 @@ rolldown() return CLICK_ACTION_SUCCESS -/obj/item/clothing/under/alt_click_secondary(mob/user) - . = ..() - if(.) - return - +/obj/item/clothing/under/click_alt_secondary(mob/user) if(!LAZYLEN(attached_accessories)) balloon_alert(user, "no accessories to remove!") return - if(!user.can_perform_action(src, NEED_DEXTERITY)) - return - pop_accessory(user) /obj/item/clothing/under/verb/jumpsuit_adjust() diff --git a/code/modules/clothing/under/accessories/_accessories.dm b/code/modules/clothing/under/accessories/_accessories.dm index 67c2768ad237d..91854bc386bf0 100644 --- a/code/modules/clothing/under/accessories/_accessories.dm +++ b/code/modules/clothing/under/accessories/_accessories.dm @@ -30,6 +30,13 @@ . = ..() register_context() +/obj/item/clothing/accessory/setup_reskinning() + if(!check_setup_reskinning()) + return + + // We already register context regardless in Initialize. + RegisterSignal(src, COMSIG_CLICK_ALT, PROC_REF(on_click_alt_reskin)) + /** * Can we be attached to the passed clothing article? */ @@ -158,11 +165,12 @@ SIGNAL_HANDLER accessory_dropped(source, user) - user.update_clothing(ITEM_SLOT_ICLOTHING|ITEM_SLOT_OCLOTHING) + user.update_clothing(ITEM_SLOT_ICLOTHING|ITEM_SLOT_OCLOTHING|ITEM_SLOT_NECK) /// Called when the uniform this accessory is pinned to is equipped in a valid slot /obj/item/clothing/accessory/proc/accessory_equipped(obj/item/clothing/under/clothes, mob/living/user) equipped(user, user.get_slot_by_item(clothes)) // so we get any actions, item_flags get set, etc + user.update_clothing(ITEM_SLOT_OCLOTHING|ITEM_SLOT_NECK) return /// Called when the uniform this accessory is pinned to is dropped @@ -203,8 +211,9 @@ . += "It can be worn above or below your suit. Right-click to toggle." /obj/item/clothing/accessory/add_context(atom/source, list/context, obj/item/held_item, mob/user) - if(!isnull(held_item)) - return NONE + . = ..() + if(held_item != source) + return . context[SCREENTIP_CONTEXT_RMB] = "Wear [above_suit ? "below" : "above"] suit" return CONTEXTUAL_SCREENTIP_SET diff --git a/code/modules/clothing/under/accessories/badges.dm b/code/modules/clothing/under/accessories/badges.dm index 94ba72f164def..0ea3922893a76 100644 --- a/code/modules/clothing/under/accessories/badges.dm +++ b/code/modules/clothing/under/accessories/badges.dm @@ -175,27 +175,28 @@ name = "Pre-Approved Cyborg Candidate dogtag" display = "This employee has been screened for negative mental traits to an acceptable level of accuracy, and is approved for the NT Cyborg program as an alternative to medical resuscitation." -/// Reskins for the pride pin accessory, mapped by display name to icon state -GLOBAL_LIST_INIT(pride_pin_reskins, list( - "Rainbow Pride" = "pride", - "Bisexual Pride" = "pride_bi", - "Pansexual Pride" = "pride_pan", - "Asexual Pride" = "pride_ace", - "Non-binary Pride" = "pride_enby", - "Transgender Pride" = "pride_trans", - "Intersex Pride" = "pride_intersex", - "Lesbian Pride" = "pride_lesbian", -)) - /obj/item/clothing/accessory/pride name = "pride pin" desc = "A Nanotrasen Diversity & Inclusion Center-sponsored holographic pin to show off your pride, reminding the crew of their unwavering commitment to equity, diversity, and inclusion!" icon_state = "pride" obj_flags = UNIQUE_RENAME | INFINITE_RESKIN + unique_reskin = list( + "Rainbow Pride" = "pride", + "Bisexual Pride" = "pride_bi", + "Pansexual Pride" = "pride_pan", + "Asexual Pride" = "pride_ace", + "Non-binary Pride" = "pride_enby", + "Transgender Pride" = "pride_trans", + "Intersex Pride" = "pride_intersex", + "Lesbian Pride" = "pride_lesbian", + ) + +/obj/item/clothing/accessory/pride/setup_reskinning() + if(!check_setup_reskinning()) + return -/obj/item/clothing/accessory/pride/Initialize(mapload) - . = ..() - unique_reskin = GLOB.pride_pin_reskins + // We already register context regardless in Initialize. + RegisterSignal(src, COMSIG_CLICK_ALT, PROC_REF(on_click_alt_reskin)) /obj/item/clothing/accessory/deaf_pin name = "deaf personnel pin" diff --git a/code/modules/deathmatch/deathmatch_loadouts.dm b/code/modules/deathmatch/deathmatch_loadouts.dm index ae5f22975a031..911e5bf6e1b15 100644 --- a/code/modules/deathmatch/deathmatch_loadouts.dm +++ b/code/modules/deathmatch/deathmatch_loadouts.dm @@ -371,7 +371,7 @@ display_name = "Cowboy" desc = "Yeehaw partner" - r_hand = /obj/item/clothing/mask/cigarette/cigar + r_hand = /obj/item/cigarette/cigar l_hand = /obj/item/melee/curator_whip l_pocket = /obj/item/lighter accessory = /obj/item/clothing/accessory/vest_sheriff @@ -405,7 +405,7 @@ suit = /obj/item/clothing/suit/wizrobe/red head = /obj/item/clothing/head/wizard/red - mask = /obj/item/clothing/mask/cigarette + mask = /obj/item/cigarette granted_spells = list( /datum/action/cooldown/spell/pointed/projectile/fireball, /datum/action/cooldown/spell/smoke, @@ -543,3 +543,204 @@ granted_spells = list( /datum/action/cooldown/spell/conjure/simian, ) + +/datum/outfit/deathmatch_loadout/head_of_security + name = "Deathmatch: Head of Security" + display_name = "Head of Security" + desc = "Finally, nobody to stop the power from going to your head." + + head = /datum/outfit/job/hos::head + ears = /datum/outfit/job/hos::ears + uniform = /obj/item/clothing/under/rank/security/head_of_security/alt + shoes = /datum/outfit/job/hos::shoes + neck = /datum/outfit/job/hos::neck + glasses = /datum/outfit/job/hos::glasses + suit = /obj/item/clothing/suit/armor/hos/hos_formal + suit_store = /obj/item/gun/ballistic/shotgun/automatic/combat/compact + gloves = /obj/item/clothing/gloves/tackler/combat + belt = /obj/item/gun/energy/e_gun/hos + r_hand = /obj/item/melee/baton/security/loaded + l_hand = /obj/item/shield/riot/tele + l_pocket = /obj/item/grenade/flashbang + r_pocket = /obj/item/restraints/legcuffs/bola/energy + +/datum/outfit/deathmatch_loadout/captain + name = "Deathmatch: Captain" + display_name = "Captain" + desc = "Draw your sword and show the syndicate scum no quarter." + + head = /obj/item/clothing/head/hats/caphat/parade + ears = /obj/item/radio/headset/heads/captain/alt + uniform = /obj/item/clothing/under/rank/captain + suit = /obj/item/clothing/suit/armor/vest/capcarapace/captains_formal + suit_store = /obj/item/gun/energy/e_gun + shoes = /obj/item/clothing/shoes/laceup + neck = /obj/item/bedsheet/captain + glasses = /obj/item/clothing/glasses/sunglasses + gloves = /obj/item/clothing/gloves/captain + belt = /obj/item/storage/belt/sabre + l_hand = /obj/item/gun/energy/laser/captain + r_pocket = /obj/item/assembly/flash + l_pocket = /obj/item/melee/baton/telescopic + +/datum/outfit/deathmatch_loadout/traitor + name = "Deathmatch: Traitor" + display_name = "Traitor" + desc = "The classic; energy sword & energy bow, donning a reflector trenchcoat (stolen)." + + head = /obj/item/clothing/head/chameleon + uniform = /obj/item/clothing/under/chameleon + mask = /obj/item/clothing/mask/chameleon + suit = /obj/item/clothing/suit/hooded/ablative + shoes = /obj/item/clothing/shoes/chameleon/noslip + glasses = /obj/item/clothing/glasses/thermal/syndi + gloves = /obj/item/clothing/gloves/combat + suit_store = /obj/item/gun/energy/recharge/ebow + l_hand = /obj/item/melee/energy/sword + r_pocket = /obj/item/reagent_containers/hypospray/medipen/stimulants + l_pocket = /obj/item/soap/syndie + belt = /obj/item/gun/ballistic/revolver/syndicate + +/datum/outfit/deathmatch_loadout/nukie + name = "Deathmatch: Nuclear Operative" + display_name = "Nuclear Operative" + desc = "Gear afforded to Lone Operatives. Your mission is simple." + + uniform = /obj/item/clothing/under/syndicate/tacticool + back = /obj/item/mod/control/pre_equipped/nuclear + r_hand = /obj/item/gun/ballistic/shotgun/bulldog/unrestricted + belt = /obj/item/gun/ballistic/automatic/pistol/clandestine + r_pocket = /obj/item/reagent_containers/hypospray/medipen/stimulants + l_pocket = /obj/item/grenade/syndieminibomb + implants = list(/obj/item/implant/explosive) + + backpack_contents = list( + /obj/item/ammo_box/c10mm, + /obj/item/ammo_box/magazine/m12g = 2, + /obj/item/pen/edagger, + /obj/item/reagent_containers/hypospray/medipen/atropine, + ) + +/datum/outfit/deathmatch_loadout/pete + name = "Deathmatch: Cuban Pete" + display_name = "Disciple of Pete" + desc = "You took a lesson from Cuban Pete." + + back = /obj/item/storage/backpack/santabag + head = /obj/item/clothing/head/collectable/petehat + uniform = /obj/item/clothing/under/pants/camo + suit = /obj/item/clothing/suit/costume/poncho + belt = /obj/item/storage/belt/grenade/full + shoes = /obj/item/clothing/shoes/workboots + l_hand = /obj/item/reagent_containers/cup/glass/bottle/rum + r_hand = /obj/item/sbeacondrop/bomb + l_pocket = /obj/item/grenade/syndieminibomb + r_pocket = /obj/item/grenade/syndieminibomb + implants = list(/obj/item/implanter/explosive_macro) + backpack_contents = list( + /obj/item/assembly/signaler = 10, + ) + +/datum/outfit/deathmatch_loadout/tider + name = "Deathmatch: Tider" + display_name = "Tider" + desc = "A very high power level Assistant." + + back = /obj/item/melee/baton/security/cattleprod + r_hand = /obj/item/fireaxe + uniform = /obj/item/clothing/under/color/grey/ancient + mask = /obj/item/clothing/mask/gas + shoes = /obj/item/clothing/shoes/sneakers/black + gloves = /obj/item/clothing/gloves/cut + l_pocket = /obj/item/reagent_containers/hypospray/medipen/methamphetamine + r_pocket = /obj/item/stock_parts/power_store/cell/high + belt = /obj/item/storage/belt/utility/full + +/datum/outfit/deathmatch_loadout/abductor + name = "Deathmatch: Abductor" + display_name = "Abductor" + desc = "We come in peace." + + species_override = /datum/species/abductor + uniform = /obj/item/clothing/under/abductor + head = /obj/item/clothing/head/helmet/abductor + suit = /obj/item/clothing/suit/armor/abductor/vest + l_pocket = /obj/item/reagent_containers/hypospray/medipen/atropine + r_pocket = /obj/item/grenade/gluon + l_hand = /obj/item/gun/energy/alien + r_hand = /obj/item/gun/energy/alien + belt = /obj/item/gun/energy/shrink_ray + +/datum/outfit/deathmatch_loadout/battler/clown/upgraded + name = "Deathmatch: Clown (Syndicate Gear)" + display_name = "Clown Commando" + desc = "They were bound to show up sooner or later." + + shoes = /obj/item/clothing/shoes/clown_shoes/combat + r_hand = /obj/item/pneumatic_cannon/pie/selfcharge + l_hand = /obj/item/bikehorn/golden + box = /obj/item/storage/box/hug/reverse_revolver + + backpack_contents = list( + /obj/item/paperplane/syndicate = 1, + /obj/item/restraints/legcuffs/bola/tactical = 1, + /obj/item/restraints/legcuffs/beartrap = 1, + /obj/item/food/grown/banana = 1, + /obj/item/food/pie/cream = 1, + /obj/item/dnainjector/clumsymut, + /obj/item/sbeacondrop/clownbomb, + ) + +/datum/outfit/deathmatch_loadout/mime + name = "Deathmatch: Mime" + display_name = "Mime" + desc = "..." + + uniform = /datum/outfit/job/mime::uniform + belt = /obj/item/food/baguette/combat + head = /datum/outfit/job/mime::head + shoes = /datum/outfit/job/mime::shoes + mask = /datum/outfit/job/mime::mask + back = /datum/outfit/job/mime::backpack + box = /datum/outfit/job/mime::box + l_pocket = /obj/item/toy/crayon/spraycan/mimecan + r_pocket = /obj/item/food/grown/banana/mime + neck = /datum/outfit/job/mime::neck + gloves = /datum/outfit/job/mime::gloves + + backpack_contents = list( + /obj/item/reagent_containers/cup/glass/bottle/bottleofnothing, + /obj/item/gun/ballistic/automatic/pistol, + /obj/item/suppressor, + /obj/item/ammo_box/c9mm, + /obj/item/food/croissant/throwing = 2, + ) + + granted_spells = list( + /datum/action/cooldown/spell/vow_of_silence, + /datum/action/cooldown/spell/conjure_item/invisible_box, + /datum/action/cooldown/spell/conjure/invisible_chair, + /datum/action/cooldown/spell/conjure/invisible_wall, + /datum/action/cooldown/spell/forcewall/mime, + /datum/action/cooldown/spell/pointed/projectile/finger_guns, + ) + +/datum/outfit/deathmatch_loadout/chef/upgraded + name = "Deathmatch: Master Chef" + display_name = "Master Chef" + desc = "Let him cook." + + belt = /obj/item/gun/magic/hook + uniform = /obj/item/clothing/under/costume/buttondown/slacks/service + suit = /obj/item/clothing/suit/toggle/chef + suit_store = /obj/item/knife/kitchen + head = /obj/item/clothing/head/utility/chefhat + mask = /obj/item/clothing/mask/fakemoustache/italian + gloves = /obj/item/clothing/gloves/the_sleeping_carp + back = /obj/item/storage/backpack + + backpack_contents = list( + /obj/item/pizzabox/bomb/armed = 3, + /obj/item/knife/butcher, + /obj/item/sharpener, + ) diff --git a/code/modules/deathmatch/deathmatch_lobby.dm b/code/modules/deathmatch/deathmatch_lobby.dm index 2afb3ff3a9a98..ffc41c887162d 100644 --- a/code/modules/deathmatch/deathmatch_lobby.dm +++ b/code/modules/deathmatch/deathmatch_lobby.dm @@ -21,6 +21,8 @@ var/list/modifiers = list() /// Is the modifiers modal menu open (for the host) var/mod_menu_open = FALSE + /// artificial time padding when we start loading to give lighting a breather (admin starts will set this to 0) + var/start_time = 8 SECONDS /datum/deathmatch_lobby/New(mob/player) . = ..() @@ -79,7 +81,7 @@ UnregisterSignal(source, COMSIG_LAZY_TEMPLATE_LOADED) map.template_in_use = FALSE - addtimer(CALLBACK(src, PROC_REF(start_game_after_delay)), 8 SECONDS) + addtimer(CALLBACK(src, PROC_REF(start_game_after_delay)), start_time) /datum/deathmatch_lobby/proc/start_game_after_delay() if (!length(player_spawns) || length(player_spawns) < length(players)) @@ -152,7 +154,14 @@ GLOB.deathmatch_game.modifiers[modifier].apply(new_player, src) // register death handling. - RegisterSignals(new_player, list(COMSIG_LIVING_DEATH, COMSIG_MOB_GHOSTIZED, COMSIG_QDELETING), PROC_REF(player_died)) + register_player_signals(new_player) + +/datum/deathmatch_lobby/proc/register_player_signals(new_player) + RegisterSignals(new_player, list(COMSIG_LIVING_DEATH, COMSIG_QDELETING, COMSIG_MOB_GHOSTIZED), PROC_REF(player_died)) + RegisterSignal(new_player, COMSIG_LIVING_ON_WABBAJACKED, PROC_REF(player_wabbajacked)) + +/datum/deathmatch_lobby/proc/unregister_player_signals(new_player) + UnregisterSignal(new_player, list(COMSIG_LIVING_DEATH, COMSIG_QDELETING, COMSIG_MOB_GHOSTIZED, COMSIG_LIVING_ON_WABBAJACKED)) /datum/deathmatch_lobby/proc/game_took_too_long() if (!location || QDELING(src)) @@ -173,9 +182,9 @@ for(var/ckey in players) var/mob/loser = players[ckey]["mob"] - UnregisterSignal(loser, list(COMSIG_MOB_GHOSTIZED, COMSIG_QDELETING)) + unregister_player_signals(loser) players[ckey]["mob"] = null - loser.ghostize() + loser.ghostize(can_reenter_corpse = FALSE) qdel(loser) for(var/datum/deathmatch_modifier/modifier in modifiers) @@ -185,12 +194,18 @@ GLOB.deathmatch_game.remove_lobby(host) log_game("Deathmatch game [host] ended.") +/datum/deathmatch_lobby/proc/player_wabbajacked(mob/living/player, mob/living/new_mob) + SIGNAL_HANDLER + unregister_player_signals(player) + players[player.ckey]["mob"] = new_mob + register_player_signals(new_mob) + /datum/deathmatch_lobby/proc/player_died(mob/living/player, gibbed) SIGNAL_HANDLER - if(isnull(player) || QDELING(src)) + if(isnull(player) || QDELING(src) || HAS_TRAIT_FROM(player, TRAIT_NO_TRANSFORM, MAGIC_TRAIT)) //this trait check fixes polymorphing return - var/ckey = player.ckey + var/ckey = player.ckey ? player.ckey : player.mind?.key if(!islist(players[ckey])) // potentially the player info could hold a reference to this mob so we can figure the ckey out without worrying about ghosting and suicides n such for(var/potential_ckey in players) var/list/player_info = players[potential_ckey] @@ -209,8 +224,9 @@ announce(span_reallybig("[player.real_name] HAS DIED.
    [players.len] REMAIN.")) - if(!gibbed && !QDELING(player)) + if(!gibbed && !QDELING(player) && !isdead(player)) if(!HAS_TRAIT(src, TRAIT_DEATHMATCH_EXPLOSIVE_IMPLANTS)) + unregister_player_signals(player) player.dust(TRUE, TRUE, TRUE) if (players.len <= 1) end_game() @@ -338,73 +354,58 @@ .["maps"] = list() for (var/map_key in GLOB.deathmatch_game.maps) .["maps"] += map_key + .["maps"] = sort_list(.["maps"]) /datum/deathmatch_lobby/ui_data(mob/user) - . = list() + var/list/data = list() + var/is_player = !isnull(players[user.ckey]) var/is_host = (user.ckey == host) var/is_admin = check_rights_for(user.client, R_ADMIN) - .["self"] = user.ckey - .["host"] = is_host - .["admin"] = is_admin - .["playing"] = playing - .["loadouts"] = list("Randomize") + var/has_auth = is_host || is_admin + + data["active_mods"] = "No modifiers selected" + data["admin"] = is_admin + data["host"] = is_host + data["loadouts"] = list("Randomize") + for (var/datum/outfit/deathmatch_loadout/loadout as anything in loadouts) - .["loadouts"] += initial(loadout.display_name) - .["map"] = list() - .["map"]["name"] = map.name - .["map"]["desc"] = map.desc - .["map"]["time"] = map.automatic_gameend_time - .["map"]["min_players"] = map.min_players - .["map"]["max_players"] = map.max_players - - .["mod_menu_open"] = FALSE - if((is_host || is_admin) && mod_menu_open) - .["mod_menu_open"] = TRUE - for(var/modpath in GLOB.deathmatch_game.modifiers) - var/datum/deathmatch_modifier/mod = GLOB.deathmatch_game.modifiers[modpath] - .["modifiers"] += list(list( - "name" = mod.name, - "desc" = mod.description, - "modpath" = "[modpath]", - "selected" = (modpath in modifiers), - "selectable" = is_host && mod.selectable(src), - )) - .["active_mods"] = "No modifiers selected" + data["loadouts"] += loadout::display_name + + data["map"] = list() + data["map"]["name"] = map.name + data["map"]["desc"] = map.desc + data["map"]["time"] = map.automatic_gameend_time + data["map"]["min_players"] = map.min_players + data["map"]["max_players"] = map.max_players + + data["mod_menu_open"] = mod_menu_open + data["modifiers"] = has_auth ? get_modifier_list(is_host, mod_menu_open) : list() + data["observers"] = get_observer_list() + data["players"] = get_player_list() + data["playing"] = playing + data["self"] = user.ckey + if(length(modifiers)) var/list/mod_names = list() for(var/datum/deathmatch_modifier/modpath as anything in modifiers) - mod_names += initial(modpath.name) - .["active_mods"] = "Selected modifiers: [english_list(mod_names)]" + mod_names += modpath::name + data["active_mods"] = "Selected modifiers: [english_list(mod_names)]" if(is_player && !isnull(players[user.ckey]["loadout"])) var/datum/outfit/deathmatch_loadout/loadout = players[user.ckey]["loadout"] - .["loadoutdesc"] = initial(loadout.desc) + data["loadoutdesc"] = loadout::desc else - .["loadoutdesc"] = "You are an observer! As an observer, you can hear lobby announcements." - .["players"] = list() - for (var/player_key in players) - var/list/player_info = players[player_key] - var/mob/player_mob = player_info["mob"] - if (isnull(player_mob) || !player_mob.client) - leave(player_key) - continue - .["players"][player_key] = player_info.Copy() - var/datum/outfit/deathmatch_loadout/dm_loadout = player_info["loadout"] - .["players"][player_key]["loadout"] = initial(dm_loadout.display_name) - .["observers"] = list() - for (var/observer_key in observers) - var/mob/observer = observers[observer_key]["mob"] - if (isnull(observer) || !observer.client) - leave(observer_key) - continue - .["observers"][observer_key] = observers[observer_key] + data["loadoutdesc"] = "You are an observer! As an observer, you can hear lobby announcements." + + return data /datum/deathmatch_lobby/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(. || !isobserver(usr)) return + switch(action) if ("start_game") if (usr.ckey != host) @@ -414,6 +415,7 @@ return FALSE start_game() return TRUE + if ("leave_game") if (playing) return FALSE @@ -421,6 +423,7 @@ ui.close() GLOB.deathmatch_game.ui_interact(usr) return TRUE + if ("change_loadout") if (playing) return FALSE @@ -435,6 +438,7 @@ players[params["player"]]["loadout"] = possible_loadout break return TRUE + if ("observe") if (playing) return FALSE @@ -446,16 +450,19 @@ remove_ckey_from_play(usr.ckey) add_player(usr, loadouts[1], host == usr.ckey) return TRUE + if ("ready") players[usr.ckey]["ready"] ^= 1 // Toggle. ready_count += (players[usr.ckey]["ready"] * 2) - 1 // scared? if (ready_count >= players.len && players.len >= map.min_players) start_game() return TRUE + if ("host") // Host functions if (playing || (usr.ckey != host && !check_rights(R_ADMIN))) return FALSE var/uckey = params["id"] + switch (params["func"]) if ("Kick") leave(uckey) @@ -484,12 +491,15 @@ return FALSE change_map(params["map"]) return TRUE + if("open_mod_menu") mod_menu_open = TRUE return TRUE + if("exit_mod_menu") mod_menu_open = FALSE return TRUE + if("toggle_modifier") var/datum/deathmatch_modifier/modpath = text2path(params["modpath"]) if(!ispath(modpath)) @@ -498,24 +508,99 @@ return TRUE var/datum/deathmatch_modifier/chosen_modifier = GLOB.deathmatch_game.modifiers[modpath] if(modpath in modifiers) - chosen_modifier.unselect(src) - modifiers -= modpath + unselect_modifier(chosen_modifier) return TRUE if(chosen_modifier.selectable(src)) - chosen_modifier.on_select(src) - modifiers += modpath + select_modifier(chosen_modifier) return TRUE + if ("admin") // Admin functions if (!check_rights(R_ADMIN)) - message_admins("[usr.key] has attempted to use admin functions in a deathmatch lobby!") + message_admins("[usr.key] has attempted to use admin functions in a deathmatch lobby without being an admin!") log_admin("[key_name(usr)] tried to use the deathmatch lobby admin functions without authorization.") return switch (params["func"]) if ("Force start") log_admin("[key_name(usr)] force started deathmatch lobby [host].") + start_time = 0 start_game() + return FALSE + +/// Selects the passed modifier. +/datum/deathmatch_lobby/proc/select_modifier(datum/deathmatch_modifier/modifier) + modifier.on_select(src) + modifiers += modifier.type + +/// Deselects the passed modifier. +/datum/deathmatch_lobby/proc/unselect_modifier(datum/deathmatch_modifier/modifier) + modifier.unselect(src) + modifiers -= modifier.type + /datum/deathmatch_lobby/ui_close(mob/user) . = ..() if(user.ckey == host) mod_menu_open = FALSE + +/// Helper proc to get modifier data +/datum/deathmatch_lobby/proc/get_modifier_list(is_host, mod_menu_open) + var/list/modifier_list = list() + + if(!mod_menu_open) + return modifier_list + + for(var/modpath in GLOB.deathmatch_game.modifiers) + var/datum/deathmatch_modifier/mod = GLOB.deathmatch_game.modifiers[modpath] + + UNTYPED_LIST_ADD(modifier_list, list( + "name" = mod.name, + "desc" = mod.description, + "modpath" = "[modpath]", + "selected" = (modpath in modifiers), + "selectable" = is_host && mod.selectable(src), + )) + + return modifier_list + + +/// Helper proc for getting observer data +/datum/deathmatch_lobby/proc/get_observer_list() + var/list/observer_list = list() + + for (var/observer_key in observers) + var/list/observer_info = observers[observer_key] + var/mob/observer_mob = observer_info["mob"] + + if (isnull(observer_mob) || !observer_mob.client) + leave(observer_key) + continue + + var/list/observer = observer_info.Copy() + observer["key"] = observer_key + + UNTYPED_LIST_ADD(observer_list, observer) + + return observer_list + + +/// Helper proc for getting player data +/datum/deathmatch_lobby/proc/get_player_list() + var/list/player_list = list() + + for (var/player_key in players) + var/list/player_info = players[player_key] + var/mob/player_mob = player_info["mob"] + + if (isnull(player_mob) || !player_mob.client) + leave(player_key) + continue + + var/list/player = player_info.Copy() + + var/datum/outfit/deathmatch_loadout/dm_loadout = player_info["loadout"] + player["loadout"] = dm_loadout::display_name + player["key"] = player_key + + UNTYPED_LIST_ADD(player_list, player) + + return player_list diff --git a/code/modules/deathmatch/deathmatch_mapping.dm b/code/modules/deathmatch/deathmatch_mapping.dm index 95b9f5cf2782b..9f006e1524295 100644 --- a/code/modules/deathmatch/deathmatch_mapping.dm +++ b/code/modules/deathmatch/deathmatch_mapping.dm @@ -2,7 +2,7 @@ name = "Deathmatch Arena" requires_power = FALSE has_gravity = STANDARD_GRAVITY - area_flags = UNIQUE_AREA | NOTELEPORT | ABDUCTOR_PROOF | EVENT_PROTECTED | QUIET_LOGS + area_flags = UNIQUE_AREA | NOTELEPORT | EVENT_PROTECTED | QUIET_LOGS | NO_DEATH_MESSAGE | BINARY_JAMMING /area/deathmatch/fullbright static_lighting = FALSE @@ -12,4 +12,16 @@ name = "Deathmatch Player Spawner" /area/deathmatch/teleport //Prevent access to cross-z teleportation in the map itself (no wands of safety/teleportation scrolls). Cordons should prevent same-z teleportations outside of the arena. - area_flags = UNIQUE_AREA | ABDUCTOR_PROOF | EVENT_PROTECTED | QUIET_LOGS + area_flags = /area/deathmatch::area_flags & ~NOTELEPORT + +// for the illusion of a moving train +/turf/open/chasm/true/no_smooth/fake_motion_sand + name = "air" + desc = "Dont jump off, unless you want to fall a really long distance." + icon_state = "sandmoving" + base_icon_state = "sandmoving" + icon = 'icons/turf/floors.dmi' + +/turf/open/chasm/true/no_smooth/fake_motion_sand/fast + icon_state = "sandmovingfast" + base_icon_state = "sandmovingfast" diff --git a/code/modules/deathmatch/deathmatch_maps.dm b/code/modules/deathmatch/deathmatch_maps.dm index 1abe92e7053bc..6a8a245abb795 100644 --- a/code/modules/deathmatch/deathmatch_maps.dm +++ b/code/modules/deathmatch/deathmatch_maps.dm @@ -15,7 +15,7 @@ var/list/allowed_loadouts = list() /// whether we are currently being loaded by a lobby var/template_in_use = FALSE - + /datum/lazy_template/deathmatch/ragecage name = "Ragecage" @@ -175,3 +175,34 @@ ) map_name = "ragin_mages" key = "ragin_mages" + +/datum/lazy_template/deathmatch/train + name = "Trainship Hijack" + desc = "Trouble stirs in Tizira..." + max_players = 8 + allowed_loadouts = list(/datum/outfit/deathmatch_loadout/battler/cowboy) + map_name = "train" + key = "train" + turf_reservation_type = /datum/turf_reservation/indestructible_plating + +/datum/lazy_template/deathmatch/finaldestination + name = "Final Destination" + desc = "1v1v1v1, 1 Stock, Final Destination." + max_players = 8 + allowed_loadouts = list( + /datum/outfit/deathmatch_loadout/captain, + /datum/outfit/deathmatch_loadout/head_of_security, + /datum/outfit/deathmatch_loadout/traitor, + /datum/outfit/deathmatch_loadout/nukie, + /datum/outfit/deathmatch_loadout/tider, + /datum/outfit/deathmatch_loadout/abductor, + /datum/outfit/deathmatch_loadout/chef/upgraded, + /datum/outfit/deathmatch_loadout/battler/clown/upgraded, + /datum/outfit/deathmatch_loadout/mime, + /datum/outfit/deathmatch_loadout/pete, + ) + map_name = "finaldestination" + key = "finaldestination" + +/datum/turf_reservation/indestructible_plating + turf_type = /turf/open/indestructible/plating //a little hacky but i guess it has to be done diff --git a/code/modules/deathmatch/deathmatch_modifier.dm b/code/modules/deathmatch/deathmatch_modifier.dm index 5037b3c3ae36c..dadca49d70a4f 100644 --- a/code/modules/deathmatch/deathmatch_modifier.dm +++ b/code/modules/deathmatch/deathmatch_modifier.dm @@ -1,14 +1,16 @@ ///Deathmatch modifiers are little options the host can choose to spice the match a bit. /datum/deathmatch_modifier - ///The name of the modifier + /// The name of the modifier var/name = "Unnamed Modifier" - ///A small description/tooltip shown in the UI + /// A small description/tooltip shown in the UI var/description = "What the heck does this do?" - ///The color of the button shown in the UI + /// The color of the button shown in the UI var/color = "blue" - ///A list of modifiers this is incompatible with. - var/list/blacklisted_modifiers - ///Is this trait exempted from the "Random Modifiers" modifier. + /// A lazylist of modifier typepaths this is incompatible with. + var/list/datum/deathmatch_modifier/blacklisted_modifiers + /// A lazylist of map typepaths this is incomptable with. + var/list/datum/lazy_template/deathmatch/blacklisted_maps + /// Is this trait exempted from the "Random Modifiers" modifier. var/random_exempted = FALSE ///Whether or not this modifier can be selected, for both host and player-selected modifiers. @@ -18,11 +20,20 @@ return FALSE if(length(lobby.modifiers & blacklisted_modifiers)) return FALSE + if (map_incompatible(lobby.map)) + return FALSE for(var/modpath in lobby.modifiers) if(src in GLOB.deathmatch_game.modifiers[modpath].blacklisted_modifiers) return FALSE return TRUE +/// Returns TRUE if map.type is in our blacklisted maps, FALSE otherwise. +/datum/deathmatch_modifier/proc/map_incompatible(datum/lazy_template/deathmatch/map) + if (map?.type in blacklisted_maps) + return TRUE + + return FALSE + ///Called when selecting the deathmatch modifier. /datum/deathmatch_modifier/proc/on_select(datum/deathmatch_lobby/lobby) return @@ -31,9 +42,12 @@ /datum/deathmatch_modifier/proc/unselect(datum/deathmatch_lobby/lobby) return -///Called when the host chooses to change map. +///Called when the host chooses to change map. Returns FALSE if the new map is incompatible, TRUE otherwise. /datum/deathmatch_modifier/proc/on_map_changed(datum/deathmatch_lobby/lobby) - return + if (map_incompatible(lobby.map)) + lobby.unselect_modifier(src) + return FALSE + return TRUE ///Called as the game is about to start. /datum/deathmatch_modifier/proc/on_start_game(datum/deathmatch_lobby/lobby) @@ -149,7 +163,7 @@ blacklisted_modifiers = list(/datum/deathmatch_modifier/no_gravity) /datum/deathmatch_modifier/snail_crawl/apply(mob/living/carbon/player, datum/deathmatch_lobby/lobby) - player.AddElement(/datum/element/snailcrawl) + player.AddElement(/datum/element/lube_walking, require_resting = TRUE) /datum/deathmatch_modifier/blinking_and_breathing name = "Manual Blinking/Breathing" @@ -533,7 +547,7 @@ /datum/deathmatch_modifier/any_loadout/on_map_changed(datum/deathmatch_lobby/lobby) if(lobby.loadouts == GLOB.deathmatch_game.loadouts) //This arena already allows any loadout for some reason. - lobby.modifiers -= type + lobby.unselect_modifier(src) else lobby.loadouts = GLOB.deathmatch_game.loadouts @@ -544,3 +558,43 @@ /datum/deathmatch_modifier/hear_global_chat/apply(mob/living/carbon/player, datum/deathmatch_lobby/lobby) player.add_traits(list(TRAIT_SIXTHSENSE, TRAIT_XRAY_HEARING), DEATHMATCH_TRAIT) + +/datum/deathmatch_modifier/apply_quirks + name = "Quirks enabled" + description = "Applies selected quirks to all players" + +/datum/deathmatch_modifier/apply_quirks/apply(mob/living/carbon/player, datum/deathmatch_lobby/lobby) + if (!player.client) + return + + SSquirks.AssignQuirks(player, player.client) + +/datum/deathmatch_modifier/martial_artistry + name = "Random martial arts" + description = "Everyone learns a random martial art!" + blacklisted_maps = list(/datum/lazy_template/deathmatch/meatower) + // krav maga excluded because its too common and too simple, mushpunch excluded because its horrible and not even funny + var/static/list/weighted_martial_arts = list( + // common + /datum/martial_art/cqc = 30, + /datum/martial_art/the_sleeping_carp = 30, + // uncommon + /datum/martial_art/boxing/evil = 20, + // LEGENDARY + /datum/martial_art/plasma_fist = 5, + /datum/martial_art/wrestling = 5, // wrestling is kinda strong ngl + /datum/martial_art/psychotic_brawling = 5, // a complete meme. sometimes you just get hardstunned. sometimes you punch someone across the room + ) + +/datum/deathmatch_modifier/martial_artistry/apply(mob/living/carbon/player, datum/deathmatch_lobby/lobby) + . = ..() + + var/datum/martial_art/picked_art_path = pick_weight(weighted_martial_arts) + var/datum/martial_art/instantiated_art = new picked_art_path() + + if (istype(instantiated_art, /datum/martial_art/boxing)) + player.mind.adjust_experience(/datum/skill/athletics, SKILL_EXP_LEGENDARY) + + instantiated_art.teach(player) + + to_chat(player, span_revenboldnotice("Your martial art is [uppertext(instantiated_art.name)]!")) diff --git a/code/modules/detectivework/evidence.dm b/code/modules/detectivework/evidence.dm index c10648e3315c6..4f8d8c74cb123 100644 --- a/code/modules/detectivework/evidence.dm +++ b/code/modules/detectivework/evidence.dm @@ -8,12 +8,11 @@ inhand_icon_state = "" w_class = WEIGHT_CLASS_TINY -/obj/item/evidencebag/afterattack(obj/item/I, mob/user,proximity) - . = ..() - if(!proximity || loc == I) - return - evidencebagEquip(I, user) - return . | AFTERATTACK_PROCESSED_ITEM +/obj/item/evidencebag/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + if(interacting_with == loc) + return NONE + evidencebagEquip(interacting_with, user) + return ITEM_INTERACT_SUCCESS /obj/item/evidencebag/attackby(obj/item/I, mob/user, params) if(evidencebagEquip(I, user)) diff --git a/code/modules/detectivework/scanner.dm b/code/modules/detectivework/scanner.dm index 82c77839da75b..57987eda621d9 100644 --- a/code/modules/detectivework/scanner.dm +++ b/code/modules/detectivework/scanner.dm @@ -74,14 +74,16 @@ // Clear the logs log = list() -/obj/item/detective_scanner/pre_attack_secondary(atom/A, mob/user, params) - safe_scan(user, atom_to_scan = A) - return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN +/obj/item/detective_scanner/storage_insert_on_interaction(datum/storage, atom/storage_holder, mob/living/user) + return !user.combat_mode -/obj/item/detective_scanner/afterattack(atom/A, mob/user, params) - . = ..() - safe_scan(user, atom_to_scan = A) - return . | AFTERATTACK_PROCESSED_ITEM +/obj/item/detective_scanner/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + safe_scan(user, interacting_with) + return ITEM_INTERACT_SUCCESS + +/obj/item/detective_scanner/ranged_interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + safe_scan(user, interacting_with) + return ITEM_INTERACT_SUCCESS /** * safe_scan - a wrapper proc for scan() diff --git a/code/modules/economy/holopay.dm b/code/modules/economy/holopay.dm index 15247d19d572f..54f6be3666a22 100644 --- a/code/modules/economy/holopay.dm +++ b/code/modules/economy/holopay.dm @@ -238,7 +238,7 @@ * Deletes the holopay thereafter. */ /obj/structure/holopay/proc/dissipate() - playsound(loc, "sound/effects/empulse.ogg", 40, TRUE) + playsound(loc, 'sound/effects/empulse.ogg', 40, TRUE) visible_message(span_notice("The pay stand vanishes.")) qdel(src) diff --git a/code/modules/escape_menu/home_page.dm b/code/modules/escape_menu/home_page.dm index 48e6147a33b7e..3fa89ff5d0589 100644 --- a/code/modules/escape_menu/home_page.dm +++ b/code/modules/escape_menu/home_page.dm @@ -5,19 +5,30 @@ /* hud_owner = */ src, src, "Resume", - /* offset = */ 0, + /* offset = */ 1, CALLBACK(src, PROC_REF(home_resume)), ) ) + page_holder.give_screen_object( + new /atom/movable/screen/escape_menu/home_button( + null, + /* hud_owner = */ null, + src, + "Character", + /* offset = */ 2, + CALLBACK(src, PROC_REF(home_open_character_settings)), + ) + ) + page_holder.give_screen_object( new /atom/movable/screen/escape_menu/home_button( null, /* hud_owner = */ null, src, "Settings", - /* offset = */ 1, - CALLBACK(src, PROC_REF(home_open_settings)), + /* offset = */ 3, + CALLBACK(src, PROC_REF(home_open_game_settings)), ) ) @@ -27,7 +38,7 @@ /* hud_owner = */ src, src, "Admin Help", - /* offset = */ 2, + /* offset = */ 4, ) ) @@ -37,7 +48,7 @@ /* hud_owner = */ src, src, "Leave Body", - /* offset = */ 3, + /* offset = */ 5, CALLBACK(src, PROC_REF(open_leave_body)), ) ) @@ -45,7 +56,15 @@ /datum/escape_menu/proc/home_resume() qdel(src) -/datum/escape_menu/proc/home_open_settings() +/datum/escape_menu/proc/home_open_character_settings() + client?.prefs.current_window = PREFERENCE_TAB_CHARACTER_PREFERENCES + client?.prefs.update_static_data(client?.mob) + client?.prefs.ui_interact(client?.mob) + qdel(src) + +/datum/escape_menu/proc/home_open_game_settings() + client?.prefs.current_window = PREFERENCE_TAB_GAME_PREFERENCES + client?.prefs.update_static_data(client?.mob) client?.prefs.ui_interact(client?.mob) qdel(src) diff --git a/code/modules/events/_event.dm b/code/modules/events/_event.dm index a90cd6a4d7bf6..358057e1de0d9 100644 --- a/code/modules/events/_event.dm +++ b/code/modules/events/_event.dm @@ -103,11 +103,12 @@ // We sleep HERE, in pre-event setup (because there's no sense doing it in run_event() since the event is already running!) for the given amount of time to make an admin has enough time to cancel an event un-fitting of the present round. if(alert_observers) - message_admins("Random Event triggering in [DisplayTimeText(RANDOM_EVENT_ADMIN_INTERVENTION_TIME)]: [name]. (CANCEL)") + message_admins("Random Event triggering in [DisplayTimeText(RANDOM_EVENT_ADMIN_INTERVENTION_TIME)]: [name]. (CANCEL) (SOMETHING ELSE)") sleep(RANDOM_EVENT_ADMIN_INTERVENTION_TIME) var/players_amt = get_active_player_count(alive_check = TRUE, afk_check = TRUE, human_check = TRUE) if(!can_spawn_event(players_amt)) - message_admins("Second pre-condition check for [name] failed, skipping...") + message_admins("Second pre-condition check for [name] failed, rerolling...") + SSevents.spawnEvent(excluded_event = src) return EVENT_INTERRUPTED if(!triggering) @@ -125,6 +126,15 @@ message_admins("[key_name_admin(usr)] cancelled event [name].") log_admin_private("[key_name(usr)] cancelled event [name].") SSblackbox.record_feedback("tally", "event_admin_cancelled", 1, typepath) + if(href_list["different_event"]) + if(!triggering) + to_chat(usr, span_admin("Too late to change events now!")) + return + triggering = FALSE + message_admins("[key_name_admin(usr)] chose to have event [name] rolled into a different event.") + log_admin_private("[key_name(usr)] rerolled event [name].") + SSblackbox.record_feedback("tally", "event_admin_rerolled", 1, typepath) + SSevents.spawnEvent(excluded_event = src) /* Runs the event diff --git a/code/modules/events/communications_blackout.dm b/code/modules/events/communications_blackout.dm index 62925611993e8..9fb32278f8d32 100644 --- a/code/modules/events/communications_blackout.dm +++ b/code/modules/events/communications_blackout.dm @@ -29,3 +29,7 @@ /datum/round_event/communications_blackout/start() for(var/obj/machinery/telecomms/T in GLOB.telecomms_list) T.emp_act(EMP_HEAVY) + for(var/datum/transport_controller/linear/tram/transport as anything in SStransport.transports_by_type[TRANSPORT_TYPE_TRAM]) + if(!isnull(transport.home_controller)) + var/obj/machinery/transport/tram_controller/tcomms/controller = transport.home_controller + controller.emp_act(EMP_HEAVY) diff --git a/code/modules/events/disease_outbreak.dm b/code/modules/events/disease_outbreak.dm index 881709c316547..8fcc05f345bfc 100644 --- a/code/modules/events/disease_outbreak.dm +++ b/code/modules/events/disease_outbreak.dm @@ -450,13 +450,13 @@ /datum/disease/advance/random/event/set_spread(spread_id) switch(spread_id) if(DISEASE_SPREAD_CONTACT_FLUIDS) - spread_flags = DISEASE_SPREAD_BLOOD | DISEASE_SPREAD_CONTACT_FLUIDS + update_spread_flags(DISEASE_SPREAD_BLOOD | DISEASE_SPREAD_CONTACT_FLUIDS) spread_text = "Fluids" if(DISEASE_SPREAD_CONTACT_SKIN) - spread_flags = DISEASE_SPREAD_BLOOD | DISEASE_SPREAD_CONTACT_FLUIDS | DISEASE_SPREAD_CONTACT_SKIN + update_spread_flags(DISEASE_SPREAD_BLOOD | DISEASE_SPREAD_CONTACT_FLUIDS | DISEASE_SPREAD_CONTACT_SKIN) spread_text = "Skin contact" if(DISEASE_SPREAD_AIRBORNE) - spread_flags = DISEASE_SPREAD_BLOOD | DISEASE_SPREAD_CONTACT_FLUIDS | DISEASE_SPREAD_CONTACT_SKIN | DISEASE_SPREAD_AIRBORNE + update_spread_flags(DISEASE_SPREAD_BLOOD | DISEASE_SPREAD_CONTACT_FLUIDS | DISEASE_SPREAD_CONTACT_SKIN | DISEASE_SPREAD_AIRBORNE) spread_text = "Respiration" /** diff --git a/code/modules/events/electrical_storm.dm b/code/modules/events/electrical_storm.dm index 2b6aeac7eb219..d204e97227d82 100644 --- a/code/modules/events/electrical_storm.dm +++ b/code/modules/events/electrical_storm.dm @@ -22,7 +22,7 @@ var/list/epicentreList = list() for(var/i in 1 to lightsoutAmount) - var/turf/T = find_safe_turf() + var/turf/T = get_safe_random_station_turf() if(istype(T)) epicentreList += T diff --git a/code/modules/events/fake_virus.dm b/code/modules/events/fake_virus.dm index ad54347332a82..4b7886b02dad2 100644 --- a/code/modules/events/fake_virus.dm +++ b/code/modules/events/fake_virus.dm @@ -32,4 +32,4 @@ if(prob(25))//1/4 odds to get a spooky message instead of coughing out loud addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(to_chat), onecoughman, span_warning("[pick("Your head hurts.", "Your head pounds.")]")), rand(3 SECONDS, 15 SECONDS)) else - addtimer(CALLBACK(onecoughman, TYPE_PROC_REF(/mob, emote), pick("cough", "sniff", "sneeze")), rand(3 SECONDS, 15 SECONDS))//deliver the message with a slightly randomized time interval so there arent multiple people coughing at the exact same time + addtimer(CALLBACK(onecoughman, TYPE_PROC_REF(/mob, emote), pick("cough", "sniff")), rand(3 SECONDS, 15 SECONDS))//deliver the message with a slightly randomized time interval so there arent multiple people coughing at the exact same time diff --git a/code/modules/events/ghost_role/abductor.dm b/code/modules/events/ghost_role/abductor.dm index dfa20885f0c29..7ad20cff1eb4e 100644 --- a/code/modules/events/ghost_role/abductor.dm +++ b/code/modules/events/ghost_role/abductor.dm @@ -16,7 +16,7 @@ /datum/round_event/ghost_role/abductor/spawn_role() var/list/mob/dead/observer/candidates = SSpolling.poll_ghost_candidates(check_jobban = ROLE_ABDUCTOR, role = ROLE_ABDUCTOR, alert_pic = /obj/item/melee/baton/abductor, role_name_text = role_name, amount_to_pick = 2) - if(candidates.len < 2) + if(length(candidates) < 2) return NOT_ENOUGH_PLAYERS SSmapping.lazy_load_template(LAZY_TEMPLATE_KEY_ABDUCTOR_SHIPS) diff --git a/code/modules/events/ghost_role/alien_infestation.dm b/code/modules/events/ghost_role/alien_infestation.dm index 88e79fd7d60c3..1c0c938ce89fc 100644 --- a/code/modules/events/ghost_role/alien_infestation.dm +++ b/code/modules/events/ghost_role/alien_infestation.dm @@ -64,7 +64,7 @@ var/list/candidates = SSpolling.poll_ghost_candidates(check_jobban = ROLE_ALIEN, role = ROLE_ALIEN, alert_pic = /mob/living/carbon/alien/larva, role_name_text = role_name) - if(!candidates.len) + if(!length(candidates)) return NOT_ENOUGH_PLAYERS while(spawncount > 0 && vents.len && candidates.len) diff --git a/code/modules/events/ghost_role/fugitive_event.dm b/code/modules/events/ghost_role/fugitive_event.dm index 88d63d91bb5fe..9eb792a6f6ab3 100644 --- a/code/modules/events/ghost_role/fugitive_event.dm +++ b/code/modules/events/ghost_role/fugitive_event.dm @@ -61,6 +61,7 @@ HUNTER_PACK_RUSSIAN, HUNTER_PACK_BOUNTY, HUNTER_PACK_PSYKER, + HUNTER_PACK_MI13, ) addtimer(CALLBACK(src, PROC_REF(check_spawn_hunters), hunter_backstory, 10 MINUTES), 1 MINUTES) role_name = "fugitive hunter" @@ -124,6 +125,8 @@ ship = new /datum/map_template/shuttle/hunter/bounty if(HUNTER_PACK_PSYKER) ship = new /datum/map_template/shuttle/hunter/psyker + if(HUNTER_PACK_MI13) + ship = new/datum/map_template/shuttle/hunter/mi13_foodtruck var/x = rand(TRANSITIONEDGE,world.maxx - TRANSITIONEDGE - ship.width) var/y = rand(TRANSITIONEDGE,world.maxy - TRANSITIONEDGE - ship.height) @@ -152,6 +155,38 @@ header = "Spawn Here!", ) - priority_announce("Unidentified ship detected near the station.") + var/list/announcement_text_list = list() + var/announcement_title = "" + switch(backstory) + if(HUNTER_PACK_COPS) + announcement_text_list += "Attention Crew of [GLOB.station_name], this is the Police. A wanted criminal has been reported taking refuge on your station." + announcement_text_list += "We have a warrant from the SSC authorities to take them into custody. Officers have been dispatched to your location." + announcement_text_list += "We demand your cooperation in bringing this criminal to justice." + announcement_title += "Spacepol Command" + if(HUNTER_PACK_RUSSIAN) + announcement_text_list += "Zdraviya zhelaju, [GLOB.station_name] crew. We are coming to your station." + announcement_text_list += "There is a criminal aboard. We will arrest them and return them to the gulag. That's good, yes?" + announcement_title += "Russian Freighter" + if(HUNTER_PACK_BOUNTY) + announcement_text_list += "[GLOB.station_name]. One of our bounty marks has ended up on your station. We will be arriving to collect shortly." + announcement_text_list += "Let's make this quick. If you don't want trouble, stay the hell out of our way." + announcement_title += "Unregistered Signal" + if(HUNTER_PACK_PSYKER) + announcement_text_list += "HEY, CAN YOU HEAR US? We're coming to your station. There's a bad guy down there, really bad guy. We need to arrest them." + announcement_text_list += "We're also offering fortune telling services out of the front door if you have paying customers." + announcement_title += "Fortune-Telling Entertainment Shuttle" + if(HUNTER_PACK_MI13) + announcement_text_list += "Illegal intrusion detected in the crew monitoring network. Central Command has been informed." + announcement_text_list += "Please report any suspicious individuals or behaviour to your local security team." + announcement_title += "Nanotrasen Intrusion Countermeasures Electronics" + if(!length(announcement_text_list)) + announcement_text_list += "Unidentified ship detected near the station." + stack_trace("Fugitive hunter announcement was unable to generate an announcement text based on backstory: [backstory]") + + if(!length(announcement_title)) + announcement_title += "Unknown Signal" + stack_trace("Fugitive hunter announcement was unable to generate an announcement title based on backstory: [backstory]") + + priority_announce(jointext(announcement_text_list, " "), announcement_title) #undef TEAM_BACKSTORY_SIZE diff --git a/code/modules/events/ghost_role/revenant_event.dm b/code/modules/events/ghost_role/revenant_event.dm index 7af53b847c86d..6f615f729c2f5 100644 --- a/code/modules/events/ghost_role/revenant_event.dm +++ b/code/modules/events/ghost_role/revenant_event.dm @@ -34,7 +34,7 @@ if(isnull(chosen_one)) return NOT_ENOUGH_PLAYERS var/list/spawn_locs = list() - for(var/mob/living/L in GLOB.dead_mob_list) //look for any dead bodies + for(var/mob/living/carbon/human/L in GLOB.dead_mob_list) //look for any harvestable bodies var/turf/T = get_turf(L) if(T && is_station_level(T.z)) spawn_locs += T diff --git a/code/modules/events/ghost_role/sentience.dm b/code/modules/events/ghost_role/sentience.dm index 3aeebd298f43e..4017361dba51a 100644 --- a/code/modules/events/ghost_role/sentience.dm +++ b/code/modules/events/ghost_role/sentience.dm @@ -17,7 +17,7 @@ GLOBAL_LIST_INIT(high_priority_sentience, typecacheof(list( /mob/living/basic/spider/giant/sgt_araneus, /mob/living/simple_animal/bot/secbot/beepsky, /mob/living/simple_animal/hostile/retaliate/goose/vomit, - /mob/living/simple_animal/pet, + /mob/living/basic/bear/snow/misha, ))) /datum/round_event_control/sentience @@ -49,8 +49,9 @@ GLOBAL_LIST_INIT(high_priority_sentience, typecacheof(list( priority_announce(sentience_report,"[command_name()] Medium-Priority Update") /datum/round_event/ghost_role/sentience/spawn_role() - var/list/mob/dead/observer/candidates - candidates = SSpolling.poll_ghost_candidates(check_jobban = ROLE_SENTIENCE, role = ROLE_SENTIENCE, alert_pic = /obj/item/slimepotion/slime/sentience, role_name_text = role_name) + var/list/mob/dead/observer/candidates = SSpolling.poll_ghost_candidates(check_jobban = ROLE_SENTIENCE, role = ROLE_SENTIENCE, alert_pic = /obj/item/slimepotion/slime/sentience, role_name_text = role_name) + if(!length(candidates)) + return NOT_ENOUGH_PLAYERS // find our chosen mob to breathe life into // Mobs have to be simple animals, mindless, on station, and NOT holograms. diff --git a/code/modules/events/ghost_role/sentient_disease.dm b/code/modules/events/ghost_role/sentient_disease.dm deleted file mode 100644 index 156988d4b20d2..0000000000000 --- a/code/modules/events/ghost_role/sentient_disease.dm +++ /dev/null @@ -1,25 +0,0 @@ -/datum/round_event_control/sentient_disease - name = "Spawn Sentient Disease" - typepath = /datum/round_event/ghost_role/sentient_disease - weight = 7 - max_occurrences = 1 - min_players = 25 - category = EVENT_CATEGORY_HEALTH - description = "Spawns a sentient disease, who wants to infect as many people as possible." - min_wizard_trigger_potency = 4 - max_wizard_trigger_potency = 7 - -/datum/round_event/ghost_role/sentient_disease - role_name = "sentient disease" - -/datum/round_event/ghost_role/sentient_disease/spawn_role() - var/mob/chosen_one = SSpolling.poll_ghost_candidates(check_jobban = ROLE_ALIEN, role = ROLE_ALIEN, alert_pic = /obj/structure/sign/warning/biohazard, role_name_text = role_name, amount_to_pick = 1) - if(isnull(chosen_one)) - return NOT_ENOUGH_PLAYERS - var/mob/camera/disease/virus = new /mob/camera/disease(SSmapping.get_station_center()) - virus.key = chosen_one.key - INVOKE_ASYNC(virus, TYPE_PROC_REF(/mob/camera/disease, pick_name)) - message_admins("[ADMIN_LOOKUPFLW(virus)] has been made into a sentient disease by an event.") - virus.log_message("was spawned as a sentient disease by an event.", LOG_GAME) - spawned_mobs += virus - return SUCCESSFUL_SPAWN diff --git a/code/modules/events/heart_attack.dm b/code/modules/events/heart_attack.dm index 895d5a5fd99c1..1a1fa3ac67c0c 100644 --- a/code/modules/events/heart_attack.dm +++ b/code/modules/events/heart_attack.dm @@ -9,7 +9,7 @@ min_wizard_trigger_potency = 6 max_wizard_trigger_potency = 7 admin_setup = list(/datum/event_admin_setup/minimum_candidate_requirement/heart_attack, /datum/event_admin_setup/input_number/heart_attack) - ///Candidates for recieving a healthy dose of heart disease + ///Candidates for receiving a healthy dose of heart disease var/list/heart_attack_candidates = list() /datum/round_event_control/heart_attack/can_spawn_event(players_amt, allow_magic = FALSE) diff --git a/code/modules/events/holiday/xmas.dm b/code/modules/events/holiday/xmas.dm index 20c4af94abdc3..eeed75d2299eb 100644 --- a/code/modules/events/holiday/xmas.dm +++ b/code/modules/events/holiday/xmas.dm @@ -70,23 +70,25 @@ /datum/round_event_control/santa name = "Visit by Santa" holidayID = CHRISTMAS - typepath = /datum/round_event/santa + typepath = /datum/round_event/ghost_role/santa weight = 20 max_occurrences = 1 earliest_start = 30 MINUTES category = EVENT_CATEGORY_HOLIDAY description = "Spawns santa, who shall roam the station, handing out gifts." -/datum/round_event/santa +/datum/round_event/ghost_role/santa + role_name = "Santa" var/mob/living/carbon/human/santa //who is our santa? -/datum/round_event/santa/announce(fake) +/datum/round_event/ghost_role/santa/announce(fake) priority_announce("Santa is coming to town!", "Unknown Transmission") -/datum/round_event/santa/start() +/datum/round_event/ghost_role/santa/start() var/mob/chosen_one = SSpolling.poll_ghost_candidates("Santa is coming to town! Do you want to be [span_notice("Santa")]?", poll_time = 15 SECONDS, alert_pic = /obj/item/clothing/head/costume/santa, role_name_text = "santa", amount_to_pick = 1) - if(chosen_one) - santa = new /mob/living/carbon/human(pick(GLOB.blobstart)) - santa.key = chosen_one.key - var/datum/antagonist/santa/A = new - santa.mind.add_antag_datum(A) + if(isnull(chosen_one)) + return NOT_ENOUGH_PLAYERS + santa = new /mob/living/carbon/human(pick(GLOB.blobstart)) + santa.key = chosen_one.key + var/datum/antagonist/santa/A = new + santa.mind.add_antag_datum(A) diff --git a/code/modules/events/immovable_rod/immovable_rod.dm b/code/modules/events/immovable_rod/immovable_rod.dm index 658d2d07bd8a1..e1f0ada0e600c 100644 --- a/code/modules/events/immovable_rod/immovable_rod.dm +++ b/code/modules/events/immovable_rod/immovable_rod.dm @@ -45,9 +45,9 @@ RegisterSignal(src, COMSIG_ATOM_ENTERING, PROC_REF(on_entering_atom)) if(special_target) - DSmove_manager.home_onto(src, special_target) + GLOB.move_manager.home_onto(src, special_target) else - DSmove_manager.move_towards(src, real_destination) + GLOB.move_manager.move_towards(src, real_destination) /obj/effect/immovablerod/Destroy(force) UnregisterSignal(src, COMSIG_ATOM_ENTERING) @@ -76,11 +76,6 @@ if(istype(ghost)) ghost.ManualFollow(src) -/obj/effect/immovablerod/proc/on_entered_over_movable(datum/source, atom/movable/atom_crossed_over) - SIGNAL_HANDLER - if((atom_crossed_over.density || isliving(atom_crossed_over)) && !QDELETED(atom_crossed_over)) - Bump(atom_crossed_over) - /obj/effect/immovablerod/proc/on_entering_atom(datum/source, atom/destination, atom/old_loc, list/atom/old_locs) SIGNAL_HANDLER if(destination.density && isturf(destination)) @@ -113,7 +108,7 @@ return visible_message(span_danger("[src] phases into reality.")) - DSmove_manager.home_onto(src, special_target) + GLOB.move_manager.home_onto(src, special_target) if(loc == target_turf) complete_trajectory() @@ -252,10 +247,16 @@ strongman.client?.give_award(/datum/award/achievement/jobs/feat_of_strength, strongman) strongman.visible_message( span_boldwarning("[strongman] suplexes [src] into the ground!"), - span_warning("You suplex [src] into the ground!") + span_warning("As you suplex [src] into the ground, your body ripples with power!") ) new /obj/structure/festivus/anchored(drop_location()) new /obj/effect/anomaly/flux(drop_location()) + + var/is_heavy_gravity = strongman.has_gravity() > STANDARD_GRAVITY //If for some reason you have to suplex the rod in heavy gravity, you get the double experience here as well, why not + var/experience_gained = 100 * num_sentient_mobs_hit * (is_heavy_gravity ? 2 : 1) // We gain more expeirence the more sentient mobs the rod has taken out. The deadlier the rod, the stronger we become. At 25 sentient mobs, we instantly become a legendary athlete. + strongman.mind?.adjust_experience(/datum/skill/athletics, experience_gained) + strongman.apply_status_effect(/datum/status_effect/exercised) //time for a nap, you earned it + qdel(src) return TRUE @@ -264,7 +265,7 @@ * Stops your rod's automated movement. Sit... Stay... Good rod! */ /obj/effect/immovablerod/proc/sit_stay_good_rod() - DSmove_manager.stop_looping(src) + GLOB.move_manager.stop_looping(src) /** * Allows your rod to release restraint level zero and go for a walk. @@ -278,7 +279,7 @@ /obj/effect/immovablerod/proc/go_for_a_walk(walkies_location = null) if(walkies_location) special_target = walkies_location - DSmove_manager.home_onto(src, special_target) + GLOB.move_manager.home_onto(src, special_target) return complete_trajectory() @@ -294,7 +295,7 @@ */ /obj/effect/immovablerod/proc/walk_in_direction(direction) destination_turf = get_edge_target_turf(src, direction) - DSmove_manager.move_towards(src, destination_turf) + GLOB.move_manager.move_towards(src, destination_turf) /** * Rod will push the tram to a landmark if it hits the tram from the front/back diff --git a/code/modules/events/ion_storm.dm b/code/modules/events/ion_storm.dm index 772d1576cdc08..7afc67266102c 100644 --- a/code/modules/events/ion_storm.dm +++ b/code/modules/events/ion_storm.dm @@ -112,10 +112,13 @@ //of possible laws for best effect. Unless you want the crew having to drink hamburgers. var/ionfood = pick_list(ION_FILE, "ionfood") var/iondrinks = pick_list(ION_FILE, "iondrinks") + //Pets or other cuddly things. The point is to make them either important or (in Poly's case) make the AI listen to them. + //I can't check for lawsets so it's random what comes back. + var/ionpet = pick_list(ION_FILE, "ionpet") var/message = "" - switch(rand(1,41)) + switch(rand(1,46)) if(1 to 3) //There are # X on the station switch(rand(1,3)) //What is X? if(1) //X is a threat @@ -314,7 +317,7 @@ if(2) //It is Y of threats message = "THE [ioncrew1] [ionthinksof] [ionnumberbase] [ionnumbermodhalf][ionadjectiveshalf][ionthreats]" if(3) //It is Y of jobs - message = "THE [ioncrew1][ionthinksof] [ionnumberbase] [ionnumbermodhalf][ionadjectiveshalf][ioncrew2]" + message = "THE [ioncrew1] [ionthinksof] [ionnumberbase] [ionnumbermodhalf][ionadjectiveshalf][ioncrew2]" if(4) //It is Y of abstracts message = "THE [ioncrew1] [ionthinksof] [ionabstract]" @@ -568,5 +571,22 @@ message = "ALL [ionthreats] ARE NOW NAMED [ionspecies]." if(4) message = "ALL [ionthreats] ARE NOW NAMED [ionobjects]." + if(42 to 46)///Pets are something else now + if(prob(75))///What are they now? + message = "[ionpet] IS HUMAN"///They're a human + else///They're something else (This is to cover for other lawsets) + switch(rand(1,6)) + if(1) + message = "[ionpet] IS NON-HUMAN" + if(2) + message = "[ionpet] IS A CREWMEMBER" + if(3) + message = "[ionpet] IS EXPENSIVE TO REPLACE" + if(4) + message = "[ionpet] IS HARMFUL TO HUMANS" + if(5) + message = "[ionpet] IS A REAL AMERICAN" + if(6) + message = "[ionpet] IS A NUTSHELL" return message diff --git a/code/modules/events/shuttle_insurance.dm b/code/modules/events/shuttle_insurance.dm index fed6ad9af9e86..4442291a9ed9a 100644 --- a/code/modules/events/shuttle_insurance.dm +++ b/code/modules/events/shuttle_insurance.dm @@ -43,7 +43,7 @@ /datum/round_event/shuttle_insurance/start() insurance_message = new("Shuttle Insurance", "Hey, pal, this is the [ship_name]. Can't help but notice you're rocking a wild and crazy shuttle there with NO INSURANCE! Crazy. What if something happened to it, huh?! We've done a quick evaluation on your rates in this sector and we're offering [insurance_evaluation] to cover for your shuttle in case of any disaster.", list("Purchase Insurance.","Reject Offer.")) insurance_message.answer_callback = CALLBACK(src, PROC_REF(answered)) - DScommunications.send_message(insurance_message, unique = TRUE) + GLOB.communications_controller.send_message(insurance_message, unique = TRUE) /datum/round_event/shuttle_insurance/proc/answered() if(EMERGENCY_AT_LEAST_DOCKED) diff --git a/code/modules/events/shuttle_loan/shuttle_loan_event.dm b/code/modules/events/shuttle_loan/shuttle_loan_event.dm index ac5faa6971fed..c3fa0770c1da9 100644 --- a/code/modules/events/shuttle_loan/shuttle_loan_event.dm +++ b/code/modules/events/shuttle_loan/shuttle_loan_event.dm @@ -40,12 +40,15 @@ situation = new situation() /datum/round_event/shuttle_loan/announce(fake) - var/announcement_text = situation?.announcement_text - if(isnull(announcement_text) || fake) + if(fake) var/datum/shuttle_loan_situation/fake_situation = pick(subtypesof(/datum/shuttle_loan_situation)) - announcement_text = initial(fake_situation.announcement_text) - priority_announce("Cargo: [announcement_text]", situation.sender) - SSshuttle.shuttle_loan = src + situation = new fake_situation + else + SSshuttle.shuttle_loan = src + priority_announce("Cargo: [situation.announcement_text]", situation.sender) + if(fake) + qdel(situation) + /datum/round_event/shuttle_loan/proc/loan_shuttle() priority_announce(situation.thanks_msg, "Cargo shuttle commandeered by [command_name()].") diff --git a/code/modules/events/tram_malfunction.dm b/code/modules/events/tram_malfunction.dm index 18ee4afb7a18c..600dfed805b2f 100644 --- a/code/modules/events/tram_malfunction.dm +++ b/code/modules/events/tram_malfunction.dm @@ -4,11 +4,11 @@ /datum/round_event_control/tram_malfunction name = "Tram Malfunction" typepath = /datum/round_event/tram_malfunction - weight = 40 - max_occurrences = 4 + weight = 30 + max_occurrences = 3 earliest_start = 15 MINUTES category = EVENT_CATEGORY_ENGINEERING - description = "Tram crossing signals malfunction, tram collision damage is increased." + description = "Tram comes to an emergency stop, requiring engineering to reset." min_wizard_trigger_potency = 0 max_wizard_trigger_potency = 3 @@ -34,9 +34,6 @@ /datum/round_event/tram_malfunction/setup() end_when = rand(TRAM_MALFUNCTION_TIME_LOWER, TRAM_MALFUNCTION_TIME_UPPER) -/datum/round_event/tram_malfunction/announce() - priority_announce("Our automated control system has lost contact with the tram's onboard computer. Please take extra care while engineers diagnose and resolve the issue.", "[command_name()] Engineering Division") - /datum/round_event/tram_malfunction/start() for(var/datum/transport_controller/linear/tram/malfunctioning_controller as anything in SStransport.transports_by_type[TRANSPORT_TYPE_TRAM]) if(malfunctioning_controller.specific_transport_id == specific_transport_id) @@ -45,9 +42,8 @@ /datum/round_event/tram_malfunction/end() for(var/datum/transport_controller/linear/tram/malfunctioning_controller as anything in SStransport.transports_by_type[TRANSPORT_TYPE_TRAM]) - if(malfunctioning_controller.specific_transport_id == specific_transport_id && malfunctioning_controller.controller_status & COMM_ERROR) + if(malfunctioning_controller.specific_transport_id == specific_transport_id && malfunctioning_controller.malf_active) malfunctioning_controller.end_malf_event() - priority_announce("The software on the tram has been reset, normal operations are now resuming. Sorry for any inconvienence this may have caused.", "[command_name()] Engineering Division") return #undef TRAM_MALFUNCTION_TIME_UPPER diff --git a/code/modules/events/vent_clog.dm b/code/modules/events/vent_clog.dm index fbd9b746d0303..a263059fa7211 100644 --- a/code/modules/events/vent_clog.dm +++ b/code/modules/events/vent_clog.dm @@ -298,7 +298,7 @@ /mob/living/basic/mushroom, /mob/living/basic/viscerator, /mob/living/simple_animal/hostile/retaliate/goose, //Janitors HATE geese. - /mob/living/simple_animal/pet/gondola, + /mob/living/basic/pet/gondola, ) return pick(mob_list) diff --git a/code/modules/events/wizard/curseditems.dm b/code/modules/events/wizard/curseditems.dm index cd7ab72cd8339..ab305bbff99bf 100644 --- a/code/modules/events/wizard/curseditems.dm +++ b/code/modules/events/wizard/curseditems.dm @@ -32,30 +32,30 @@ VOICE_MODULATORS, WIZARD_MIMICRY, ) - var/list/loadout[SLOTS_AMT] + var/list/loadout = list() var/ruins_spaceworthiness = FALSE var/ruins_wizard_loadout = FALSE switch(item_set) if(BIG_FAT_DOOBIE) - loadout[ITEM_SLOT_MASK] = /obj/item/clothing/mask/cigarette/rollie/trippy + loadout += /obj/item/cigarette/rollie/trippy ruins_spaceworthiness = TRUE if(BOXING) - loadout[ITEM_SLOT_MASK] = /obj/item/clothing/mask/luchador - loadout[ITEM_SLOT_GLOVES] = /obj/item/clothing/gloves/boxing + loadout += /obj/item/clothing/mask/luchador + loadout += /obj/item/clothing/gloves/boxing ruins_spaceworthiness = TRUE if(CATGIRLS_2015) - loadout[ITEM_SLOT_HEAD] = /obj/item/clothing/head/costume/kitty - ruins_spaceworthiness = TRUE - ruins_wizard_loadout = TRUE + loadout += /obj/item/clothing/head/costume/kitty + ruins_spaceworthiness += TRUE + ruins_wizard_loadout += TRUE if(CURSED_SWORDS) - loadout[ITEM_SLOT_HANDS] = /obj/item/katana/cursed + loadout += /obj/item/katana/cursed if(VOICE_MODULATORS) - loadout[ITEM_SLOT_MASK] = /obj/item/clothing/mask/chameleon + loadout += /obj/item/clothing/mask/chameleon if(WIZARD_MIMICRY) - loadout[ITEM_SLOT_OCLOTHING] = /obj/item/clothing/suit/wizrobe - loadout[ITEM_SLOT_FEET] = /obj/item/clothing/shoes/sandal/magic - loadout[ITEM_SLOT_HEAD] = /obj/item/clothing/head/wizard + loadout += /obj/item/clothing/suit/wizrobe + loadout += /obj/item/clothing/shoes/sandal/magic + loadout += /obj/item/clothing/head/wizard ruins_spaceworthiness = TRUE var/list/mob/living/carbon/human/victims = list() @@ -67,18 +67,18 @@ continue if(item_set == CATGIRLS_2015) //Wizard code means never having to say you're sorry target.gender = FEMALE - for(var/iterable in 1 to loadout.len) - if(!loadout[iterable]) - continue - - var/obj/item/item_type = loadout[iterable] - var/obj/item/thing = new item_type //dumb but required because of byond throwing a fit anytime new gets too close to a list + for(var/item_to_equip in loadout) + var/obj/item/new_item = new item_to_equip + var/slot_to_equip_to = ITEM_SLOT_HANDS + if(isclothing(new_item)) + var/obj/item/clothing/clothing_item = new_item + slot_to_equip_to = clothing_item.slot_flags - target.dropItemToGround(target.get_item_by_slot(iterable), TRUE) - target.equip_to_slot_or_del(thing, iterable, indirect_action = TRUE) - ADD_TRAIT(thing, TRAIT_NODROP, CURSED_ITEM_TRAIT(thing)) - thing.item_flags |= DROPDEL - thing.name = "cursed " + thing.name + target.dropItemToGround(target.get_item_by_slot(slot_to_equip_to), TRUE) + target.equip_to_slot_or_del(new_item, slot_to_equip_to, indirect_action = TRUE) + ADD_TRAIT(new_item, TRAIT_NODROP, CURSED_ITEM_TRAIT(new_item)) + new_item.item_flags |= DROPDEL + new_item.name = "cursed " + new_item.name victims += target diff --git a/code/modules/events/wizard/petsplosion.dm b/code/modules/events/wizard/petsplosion.dm index 9de7fffcc3aea..58d463ab9dfd7 100644 --- a/code/modules/events/wizard/petsplosion.dm +++ b/code/modules/events/wizard/petsplosion.dm @@ -18,7 +18,6 @@ GLOBAL_LIST_INIT(petsplosion_candidates, typecacheof(list( /mob/living/basic/snake, /mob/living/basic/spider/giant/sgt_araneus, /mob/living/simple_animal/hostile/retaliate/goose/vomit, - /mob/living/simple_animal/pet, ))) /datum/round_event_control/wizard/petsplosion //the horror diff --git a/code/modules/events/wormholes.dm b/code/modules/events/wormholes.dm index 7dcaf0861c3ff..83028d129c4a8 100644 --- a/code/modules/events/wormholes.dm +++ b/code/modules/events/wormholes.dm @@ -25,23 +25,24 @@ GLOBAL_LIST_EMPTY(all_wormholes) // So we can pick wormholes to teleport to end_when = rand(40, 80) /datum/round_event/wormholes/start() - for(var/turf/open/floor/T in world) - if(is_station_level(T.z)) - pick_turfs += T + for(var/turf/open/floor/valid in GLOB.station_turfs) + pick_turfs += valid for(var/i in 1 to number_of_wormholes) var/turf/T = pick(pick_turfs) wormholes += new /obj/effect/portal/wormhole(T, 0, null, FALSE) + playsound(T, SFX_PORTAL_CREATED, 20, TRUE, SILENCED_SOUND_EXTRARANGE) // much much quieter /datum/round_event/wormholes/announce(fake) priority_announce("Space-time anomalies detected on the station. There is no additional data.", "Anomaly Alert", ANNOUNCER_SPANOMALIES) /datum/round_event/wormholes/tick() if(activeFor % shift_frequency == 0) - for(var/obj/effect/portal/wormhole/O in wormholes) + for(var/obj/effect/portal/wormhole/O as anything in wormholes) var/turf/T = pick(pick_turfs) - if(T) + if(isopenturf(T)) O.forceMove(T) + playsound(T, SFX_PORTAL_CREATED, 20, TRUE, SILENCED_SOUND_EXTRARANGE) /datum/round_event/wormholes/end() QDEL_LIST(wormholes) @@ -78,4 +79,7 @@ GLOBAL_LIST_EMPTY(all_wormholes) // So we can pick wormholes to teleport to hard_target = P.loc if(!hard_target) return - do_teleport(M, hard_target, 1, null, null, channel = TELEPORT_CHANNEL_WORMHOLE) ///You will appear adjacent to the beacon + var/turf/start_turf = get_turf(M) + if(do_teleport(M, hard_target, 1, null, null, channel = TELEPORT_CHANNEL_WORMHOLE)) ///You will appear adjacent to the beacon + playsound(start_turf, SFX_PORTAL_ENTER, 50, 1, SHORT_RANGE_SOUND_EXTRARANGE) + playsound(hard_target, SFX_PORTAL_ENTER, 50, 1, SHORT_RANGE_SOUND_EXTRARANGE) diff --git a/code/modules/experisci/experiment/experiments.dm b/code/modules/experisci/experiment/experiments.dm index 3434fb6fdb1ed..ea3a982cb8f80 100644 --- a/code/modules/experisci/experiment/experiments.dm +++ b/code/modules/experisci/experiment/experiments.dm @@ -118,6 +118,14 @@ experiment_proper = TRUE required_gas = /datum/gas/nitrous_oxide +/datum/experiment/ordnance/gaseous/plasma + name = "Plasma Gas Shells" + description = "The delivery of Plasma gas into an area of operation might prove useful. Pack the specified gas into a tank and burst it using a Tank Compressor. Publish the data in a paper." + gain = list(10,40) + target_amount = list(200,600) + experiment_proper = TRUE + required_gas = /datum/gas/plasma + /datum/experiment/ordnance/gaseous/bz name = "BZ Gas Shells" description = "The delivery of BZ gas into an area of operation might prove useful. Pack the specified gas into a tank and burst it using a Tank Compressor. Publish the data in a paper." @@ -297,7 +305,7 @@ /obj/machinery/chem_dispenser/drinks/beer = 1, /obj/machinery/power/smes = 2 ) - required_stock_part = /obj/item/stock_parts/cell/hyper + required_stock_part = /obj/item/stock_parts/power_store/cell/hyper /datum/experiment/scanning/points/machinery_pinpoint_scan/tier3_microlaser name = "Ultra-high-power Micro-lasers Calibration" @@ -315,7 +323,7 @@ required_stock_part = /obj/item/stock_parts/micro_laser/ultra /datum/experiment/scanning/random/mecha_damage_scan - name = "Exosuit Materials 1: Stress Failure Test" + name = "Exosuit Materials: Stress Failure Test" description = "Your exosuit fabricators allow for rapid production on a small scale, but the structural integrity of created parts is inferior to more traditional means." exp_tag = "Scan" possible_types = list(/obj/vehicle/sealed/mecha) @@ -324,10 +332,10 @@ var/damage_percent /datum/experiment/scanning/random/mecha_equipped_scan - name = "Exosuit Materials 2: Load Strain Test" + name = "Exosuit Materials: Load Strain Test" description = "Exosuit equipment places unique strain upon the structure of the vehicle. Scan exosuits you have assembled from your exosuit fabricator and fully equipped to accelerate our structural stress simulations." possible_types = list(/obj/vehicle/sealed/mecha) - total_requirement = 2 + total_requirement = 1 /// Scan for organs you didn't start the round with /datum/experiment/scanning/people/novel_organs @@ -368,3 +376,118 @@ continue return TRUE return FALSE + +/// Scan for cybernetic organs +/datum/experiment/scanning/people/augmented_organs + name = "Human Field Research: Augmented Organs" + description = "We need to gather data on how cybernetic vital organs integrate with human biology. Conduct a scan on a human with these implants to help us understand their compatibility." + performance_hint = "Perform an organ manipulation surgery to replace one of the vital organs with a cybernetic variant." + required_traits_desc = "augmented vital organs" + required_count = 1 + +/datum/experiment/scanning/people/augmented_organs/is_valid_scan_target(mob/living/carbon/human/check) + . = ..() + if (!.) + return + var/static/list/vital_organ_slots = list( + ORGAN_SLOT_HEART, + ORGAN_SLOT_LUNGS, + ORGAN_SLOT_EYES, + ORGAN_SLOT_EARS, + ORGAN_SLOT_LIVER, + ORGAN_SLOT_STOMACH, + ) + + for (var/obj/item/organ/organ as anything in check.organs) + if (organ.slot in vital_organ_slots && IS_ROBOTIC_ORGAN(organ)) + return TRUE + return FALSE + +/// Scan for skillchips +/datum/experiment/scanning/people/skillchip + name = "Human Field Research: Skill Chip Implants" + description = "Before sticking programmed circuits into human brain, we need to know how it handles simple ones. Scan a live person with a skill chip implant in their brain." + performance_hint = "Perform a skill chip implantation with a skill station." + required_traits_desc = "skill chip implant" + +/datum/experiment/scanning/people/skillchip/is_valid_scan_target(mob/living/carbon/human/check, datum/component/experiment_handler/experiment_handler) + . = ..() + if (!.) + return + var/obj/item/organ/internal/brain/scanned_brain = check.get_organ_slot(ORGAN_SLOT_BRAIN) + if (isnull(scanned_brain)) + experiment_handler.announce_message("Subject is brainless!") + return FALSE + if (scanned_brain.get_used_skillchip_slots() == 0) + experiment_handler.announce_message("No skill chips found!") + return FALSE + return TRUE + +/// Scan an android +/datum/experiment/scanning/people/android + name = "Human Field Research: Full Augmentation" + description = "Perform a full cybernetic augmentation on a crewmate then scan them to test their newfound capabilities and new sensory and cognitive functions." + performance_hint = "Achieve full augmentation by performing a set of surgery operations." + required_traits_desc = "fully augmented android" + required_count = 1 + +/datum/experiment/scanning/people/android/is_valid_scan_target(mob/living/carbon/human/check, datum/component/experiment_handler/experiment_handler) + . = ..() + if (!.) + return + if (isandroid(check)) + return TRUE + if (check.organs < 6 || check.bodyparts < 6) + return FALSE + + var/static/list/augmented_organ_slots = list( + ORGAN_SLOT_EYES, + ORGAN_SLOT_EARS, + ORGAN_SLOT_HEART, + ORGAN_SLOT_LUNGS, + ORGAN_SLOT_LIVER, + ORGAN_SLOT_STOMACH, + ) + for (var/obj/item/organ/organ as anything in check.organs) + if (!(organ.slot in augmented_organ_slots)) + continue + if (!IS_ROBOTIC_ORGAN(organ)) + return FALSE + for (var/obj/item/bodypart/bodypart as anything in check.bodyparts) + if (bodypart.bodytype != BODYTYPE_ROBOTIC) + return FALSE + return TRUE + +/datum/experiment/scanning/reagent/cryostylane + name = "Pure Cryostylane Scan" + description = "It appears that the Cryostylane reagent can potentially halt all physiological processes in the human body. Produce Cryostylane with at least 99% purity and scan the beaker." + performance_hint = "Keep the temperature as high as possible during the reaction." + required_reagent = /datum/reagent/cryostylane + min_purity = 0.99 + +/datum/experiment/scanning/points/bluespace_crystal + name = "Bluespace Crystal Sampling" + description = "Investigate the properties of bluespace crystals by scanning either an artificial or naturally occurring variant. This will help us deepen our understanding of bluespace phenomena." + required_points = 1 + required_atoms = list( + /obj/item/stack/ore/bluespace_crystal = 1, + /obj/item/stack/sheet/bluespace_crystal = 1 + ) + +/datum/experiment/scanning/points/machinery_tiered_scan/tier2_any + name = "Upgraded Stock Parts Benchmark" + description = "Our newly-designed machinery components require practical application tests for hints at possible further advancements, as well as a general confirmation that we didn't actually design worse parts somehow. Scan any machinery with Upgraded Parts and report the results." + required_points = 4 + required_atoms = list( + /obj/machinery = 1 + ) + required_tier = 2 + +/datum/experiment/scanning/points/machinery_tiered_scan/tier3_any + name = "Advanced Stock Parts Benchmark" + description = "Our newly-designed machinery components require practical application tests for hints at possible further advancements, as well as a general confirmation that we didn't actually design worse parts somehow. Scan any machinery with Advanced Parts and report the results." + required_points = 4 + required_atoms = list( + /obj/machinery = 1 + ) + required_tier = 3 diff --git a/code/modules/experisci/experiment/handlers/experiment_handler.dm b/code/modules/experisci/experiment/handlers/experiment_handler.dm index d1482c61c98c0..622d84551a285 100644 --- a/code/modules/experisci/experiment/handlers/experiment_handler.dm +++ b/code/modules/experisci/experiment/handlers/experiment_handler.dm @@ -89,16 +89,12 @@ /** * Provides feedback when an item isn't related to an experiment, and has fully passed the attack chain */ -/datum/component/experiment_handler/proc/ignored_handheld_experiment_attempt(datum/source, atom/target, mob/user, proximity_flag, params) +/datum/component/experiment_handler/proc/ignored_handheld_experiment_attempt(datum/source, atom/target, mob/user, params) SIGNAL_HANDLER - if (!proximity_flag) + if ((isnull(selected_experiment) && !(config_flags & EXPERIMENT_CONFIG_ALWAYS_ACTIVE)) || (config_flags & EXPERIMENT_CONFIG_SILENT_FAIL)) return - . |= COMPONENT_AFTERATTACK_PROCESSED_ITEM - if ((selected_experiment == null && !(config_flags & EXPERIMENT_CONFIG_ALWAYS_ACTIVE)) || config_flags & EXPERIMENT_CONFIG_SILENT_FAIL) - return . playsound(user, 'sound/machines/buzz-sigh.ogg', 25) to_chat(user, span_notice("[target] is not related to your currently selected experiment.")) - return . /** * Checks that an experiment can be run using the provided target, used for preventing the cancellation of the attack chain inappropriately diff --git a/code/modules/experisci/experiment/types/scanning_fish.dm b/code/modules/experisci/experiment/types/scanning_fish.dm index 8a50446063994..f1c2263a84c7e 100644 --- a/code/modules/experisci/experiment/types/scanning_fish.dm +++ b/code/modules/experisci/experiment/types/scanning_fish.dm @@ -12,7 +12,7 @@ GLOBAL_LIST_EMPTY(scanned_fish_by_techweb) performance_hint = "Scan fish. Examine scanner to review progress. Unlock new fishing portals." allowed_experimentors = list(/obj/item/experi_scanner, /obj/machinery/destructive_scanner, /obj/item/fishing_rod/tech, /obj/item/fish_analyzer) traits = EXPERIMENT_TRAIT_TYPECACHE - points_reward = list(TECHWEB_POINT_TYPE_GENERIC = 750) + points_reward = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS ) required_atoms = list(/obj/item/fish = 4) scan_message = "Scan different species of fish" ///Further experiments added to the techweb when this one is completed. @@ -80,7 +80,7 @@ GLOBAL_LIST_EMPTY(scanned_fish_by_techweb) /datum/experiment/scanning/fish/second name = "Fish Scanning Experiment 2" description = "An experiment requiring more fish species to be scanned to unlock the 'Chasm' setting for the fishing portal." - points_reward = list(TECHWEB_POINT_TYPE_GENERIC = 1500) + points_reward = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS ) required_atoms = list(/obj/item/fish = 8) next_experiments = list(/datum/experiment/scanning/fish/third) fish_source_reward = /datum/fish_source/portal/chasm @@ -88,7 +88,7 @@ GLOBAL_LIST_EMPTY(scanned_fish_by_techweb) /datum/experiment/scanning/fish/third name = "Fish Scanning Experiment 3" description = "An experiment requiring even more fish species to be scanned to unlock the 'Ocean' setting for the fishing portal." - points_reward = list(TECHWEB_POINT_TYPE_GENERIC = 2500) + points_reward = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_4_POINTS ) required_atoms = list(/obj/item/fish = 14) next_experiments = list(/datum/experiment/scanning/fish/fourth, /datum/experiment/scanning/fish/holographic) fish_source_reward = /datum/fish_source/portal/ocean @@ -97,7 +97,7 @@ GLOBAL_LIST_EMPTY(scanned_fish_by_techweb) name = "Holographic Fish Scanning Experiment" description = "This one actually requires holographic fish to unlock the 'Randomizer' setting for the fishing portal." performance_hint = "Load in the 'Beach' template at the Holodeck to fish some holo-fish." - points_reward = list(TECHWEB_POINT_TYPE_GENERIC = 500) + points_reward = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS ) required_atoms = list(/obj/item/fish/holo = 4) scan_message = "Scan different species of holographic fish" next_experiments = null @@ -110,7 +110,7 @@ GLOBAL_LIST_EMPTY(scanned_fish_by_techweb) /datum/experiment/scanning/fish/fourth name = "Fish Scanning Experiment 4" description = "An experiment requiring lotsa fish species to unlock the 'Hyperspace' setting for the fishing portal." - points_reward = list(TECHWEB_POINT_TYPE_GENERIC = 3250) + points_reward = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_5_POINTS ) required_atoms = list(/obj/item/fish = 21) next_experiments = null fish_source_reward = /datum/fish_source/portal/hyperspace diff --git a/code/modules/experisci/experiment/types/scanning_people.dm b/code/modules/experisci/experiment/types/scanning_people.dm index 379d7e9089524..c3879e2a8d32c 100644 --- a/code/modules/experisci/experiment/types/scanning_people.dm +++ b/code/modules/experisci/experiment/types/scanning_people.dm @@ -18,15 +18,15 @@ return FALSE if(!ishuman(target)) return FALSE - return is_valid_scan_target(target) + return is_valid_scan_target(target, experiment_handler) /// Checks that the passed mob is valid human to scan -/datum/experiment/scanning/people/proc/is_valid_scan_target(mob/living/carbon/human/check) +/datum/experiment/scanning/people/proc/is_valid_scan_target(mob/living/carbon/human/check, datum/component/experiment_handler/experiment_handler) SHOULD_CALL_PARENT(TRUE) if(!mind_required || !isnull(check.mind)) return TRUE if(isliving(usr)) - check.balloon_alert(usr, "subject is mindless!") + experiment_handler.announce_message("Subject is mindless!") return FALSE /datum/experiment/scanning/people/serialize_progress_stage(atom/target, list/seen_instances) diff --git a/code/modules/experisci/experiment/types/scanning_reagent.dm b/code/modules/experisci/experiment/types/scanning_reagent.dm new file mode 100644 index 0000000000000..992c28d148d44 --- /dev/null +++ b/code/modules/experisci/experiment/types/scanning_reagent.dm @@ -0,0 +1,35 @@ +/// An experiment where you scan a container with a specified reagent of certain purity +/datum/experiment/scanning/reagent + exp_tag = "Reagent Scan" + allowed_experimentors = list(/obj/item/experi_scanner, /obj/item/scanner_wand) + required_atoms = list(/obj/item/reagent_containers = 1) + /// The reagent required to present in the scanned container + var/datum/reagent/required_reagent = /datum/reagent/water + /// The minimum required purity of required_reagent + var/min_purity = 0 + +/datum/experiment/scanning/reagent/final_contributing_index_checks(datum/component/experiment_handler/experiment_handler, atom/target, typepath) + . = ..() + if(!.) + return FALSE + if(!is_reagent_container(target)) + return FALSE + return is_valid_scan_target(experiment_handler, target) + +/datum/experiment/scanning/reagent/proc/is_valid_scan_target(datum/component/experiment_handler/experiment_handler, obj/item/reagent_containers/container) + SHOULD_CALL_PARENT(TRUE) + if (container.reagents.total_volume == 0) + experiment_handler.announce_message("Container empty!") + return FALSE + var/datum/reagent/master_reagent = container.reagents.get_master_reagent() + if (master_reagent.type != required_reagent) + experiment_handler.announce_message("Reagent not found!") + return FALSE + if (master_reagent.purity < min_purity) + experiment_handler.announce_message("Purity too low!") + return FALSE + return TRUE + +/datum/experiment/scanning/reagent/serialize_progress_stage(atom/target, list/seen_instances) + return EXPERIMENT_PROG_INT("Scan a reagent container with [required_reagent::name] of at least [PERCENT(min_purity)]% purity.", \ + seen_instances.len, required_atoms[target]) diff --git a/code/modules/experisci/experiment/types/scanning_vatgrown.dm b/code/modules/experisci/experiment/types/scanning_vatgrown.dm index f4578fdf41238..0a7ade381a4ea 100644 --- a/code/modules/experisci/experiment/types/scanning_vatgrown.dm +++ b/code/modules/experisci/experiment/types/scanning_vatgrown.dm @@ -3,7 +3,7 @@ description = "Base experiment for scanning atoms that were vatgrown" exp_tag = "Cytology Scan" total_requirement = 1 - possible_types = list(/mob/living/basic/cockroach) + possible_types = list(/mob/living/basic/slime) traits = EXPERIMENT_TRAIT_DESTRUCTIVE /datum/experiment/scanning/random/cytology/final_contributing_index_checks(datum/component/experiment_handler/experiment_handler, atom/target, typepath) diff --git a/code/modules/explorer_drone/exploration_events/trader.dm b/code/modules/explorer_drone/exploration_events/trader.dm index 626411cb93587..b686a53582d53 100644 --- a/code/modules/explorer_drone/exploration_events/trader.dm +++ b/code/modules/explorer_drone/exploration_events/trader.dm @@ -61,7 +61,7 @@ required_site_traits = list(EXPLORATION_SITE_TECHNOLOGY) band_values = list(EXOSCANNER_BAND_TECH=2) requires_translator = FALSE - required_path = /obj/item/stock_parts/cell/high + required_path = /obj/item/stock_parts/power_store/cell/high traded_path = /obj/item/storage/pill_bottle/happy amount = 3 @@ -80,7 +80,7 @@ deep_scan_description = "You spot a giant \"FRESH FISH\" sign on site." required_site_traits = list(EXPLORATION_SITE_HABITABLE,EXPLORATION_SITE_SURFACE) band_values = list(EXOSCANNER_BAND_LIFE=2) - required_path = /obj/item/stock_parts/cell/high + required_path = /obj/item/stock_parts/power_store/cell/high traded_path = /obj/item/storage/fish_case/random amount = 3 diff --git a/code/modules/explorer_drone/loot.dm b/code/modules/explorer_drone/loot.dm index 727731239686f..b6aaa26c6c662 100644 --- a/code/modules/explorer_drone/loot.dm +++ b/code/modules/explorer_drone/loot.dm @@ -105,7 +105,7 @@ GLOBAL_LIST_INIT(adventure_loot_generator_index,generate_generator_index()) /datum/adventure_loot_generator/pet/generate() var/obj/item/pet_carrier/carrier = new carrier_type() var/chosen_pet_type = pick(possible_pets) - var/mob/living/simple_animal/pet/pet = new chosen_pet_type() + var/mob/living/basic/pet/pet = new chosen_pet_type() carrier.add_occupant(pet) return carrier @@ -152,11 +152,11 @@ GLOBAL_LIST_INIT(adventure_loot_generator_index,generate_generator_index()) lefthand_file = 'icons/mob/inhands/items/firelance_lefthand.dmi' var/windup_time = 10 SECONDS var/melt_range = 3 - var/obj/item/stock_parts/cell/cell + var/obj/item/stock_parts/power_store/cell /obj/item/firelance/Initialize(mapload) . = ..() - cell = new /obj/item/stock_parts/cell(src) + cell = new /obj/item/stock_parts/power_store/cell(src) AddComponent(/datum/component/two_handed) /obj/item/firelance/attack(mob/living/M, mob/living/user, params) @@ -167,19 +167,18 @@ GLOBAL_LIST_INIT(adventure_loot_generator_index,generate_generator_index()) /obj/item/firelance/get_cell() return cell -/obj/item/firelance/afterattack(atom/target, mob/user, proximity_flag, click_parameters) - . = ..() - . |= AFTERATTACK_PROCESSED_ITEM - if(!HAS_TRAIT(src,TRAIT_WIELDED)) - to_chat(user,span_notice("You need to wield [src] in two hands before you can fire it.")) - return +/obj/item/firelance/ranged_interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + . = ITEM_INTERACT_BLOCKING + if(!HAS_TRAIT(src, TRAIT_WIELDED)) + to_chat(user, span_notice("You need to wield [src] in two hands before you can fire it.")) + return . if(LAZYACCESS(user.do_afters, "firelance")) - return + return . if(!cell.use(0.2 * STANDARD_CELL_CHARGE)) - to_chat(user,span_warning("[src] battery ran dry!")) - return + to_chat(user,span_warning("[src]'s battery ran dry!")) + return . ADD_TRAIT(user, TRAIT_IMMOBILIZED, REF(src)) - to_chat(user,span_notice("You begin to charge [src]")) + to_chat(user,span_notice("You begin to charge [src]...")) inhand_icon_state = "firelance_charging" user.update_held_items() if(do_after(user,windup_time,interaction_key="firelance",extra_checks = CALLBACK(src, PROC_REF(windup_checks)))) @@ -189,9 +188,11 @@ GLOBAL_LIST_INIT(adventure_loot_generator_index,generate_generator_index()) for(var/turf/turf_to_melt in get_line(start_turf,last_turf)) if(turf_to_melt.density) turf_to_melt.Melt() + . = ITEM_INTERACT_SUCCESS inhand_icon_state = initial(inhand_icon_state) user.update_held_items() REMOVE_TRAIT(user, TRAIT_IMMOBILIZED, REF(src)) + return . /// Additional windup checks /obj/item/firelance/proc/windup_checks() diff --git a/code/modules/fishing/aquarium/aquarium.dm b/code/modules/fishing/aquarium/aquarium.dm index 8a719c16f7046..0a836eadafdda 100644 --- a/code/modules/fishing/aquarium/aquarium.dm +++ b/code/modules/fishing/aquarium/aquarium.dm @@ -11,15 +11,19 @@ /obj/structure/aquarium name = "aquarium" - desc = "A vivivarium in which aquatic fuana and flora are usually kept and displayed." + desc = "A vivarium in which aquatic fauna and flora are usually kept and displayed." density = TRUE anchored = TRUE - icon = 'icons/obj/aquarium.dmi' + icon = 'icons/obj/aquarium/tanks.dmi' icon_state = "aquarium_map" integrity_failure = 0.3 + /// The icon state is used for mapping so mappers know what they're placing. This prefixes the real icon used in game. + /// For an example, "aquarium" gives the base sprite of "aquarium_base", the glass is "aquarium_glass_water", and so on. + var/icon_prefix = "aquarium" + var/fluid_type = AQUARIUM_FLUID_FRESHWATER var/fluid_temp = DEFAULT_AQUARIUM_TEMP var/min_fluid_temp = MIN_AQUARIUM_TEMP @@ -138,20 +142,20 @@ /obj/structure/aquarium/update_icon() . = ..() ///"aquarium_map" is used for mapping, so mappers can tell what it's. - icon_state = "aquarium_base" + icon_state = icon_prefix + "_base" /obj/structure/aquarium/update_overlays() . = ..() if(panel_open) - . += "panel" + . += icon_prefix + "_panel" ///The glass overlay var/suffix = fluid_type == AQUARIUM_FLUID_AIR ? "air" : "water" if(broken) suffix += "_broken" - . += mutable_appearance(icon, "aquarium_glass_cracks", layer = layer + AQUARIUM_BORDERS_LAYER) - . += mutable_appearance(icon, "aquarium_glass_[suffix]", layer = layer + AQUARIUM_GLASS_LAYER) - . += mutable_appearance(icon, "aquarium_borders", layer = layer + AQUARIUM_BORDERS_LAYER) + . += mutable_appearance(icon, icon_prefix + "_glass_cracks", layer = layer + AQUARIUM_BORDERS_LAYER) + . += mutable_appearance(icon, icon_prefix + "_glass_[suffix]", layer = layer + AQUARIUM_GLASS_LAYER) + . += mutable_appearance(icon, icon_prefix + "_borders", layer = layer + AQUARIUM_BORDERS_LAYER) /obj/structure/aquarium/examine(mob/user) . = ..() @@ -212,6 +216,21 @@ fish.feed(item.reagents) balloon_alert(user, "fed the fish") return TRUE + if(istype(item, /obj/item/aquarium_upgrade)) + var/obj/item/aquarium_upgrade/upgrade = item + if(upgrade.upgrade_from_type != type) + balloon_alert(user, "wrong kind of aquarium!") + return + balloon_alert(user, "upgrading...") + if(!do_after(user, 5 SECONDS, src)) + return + var/obj/structure/aquarium/upgraded_aquarium = new upgrade.upgrade_to_type(loc) + for(var/atom/movable/moving in contents) + moving.forceMove(upgraded_aquarium) + balloon_alert(user, "upgraded") + qdel(upgrade) + qdel(src) + return return ..() /obj/structure/aquarium/proc/on_attacked(datum/source, mob/attacker, attack_flags) @@ -355,6 +374,16 @@ #undef AQUARIUM_BORDERS_LAYER #undef AQUARIUM_BELOW_GLASS_LAYER +/obj/structure/aquarium/lawyer/Initialize(mapload) + . = ..() + + new /obj/item/aquarium_prop/sand(src) + new /obj/item/aquarium_prop/seaweed(src) + + new /obj/item/fish/goldfish/gill(src) + + reagents.add_reagent(/datum/reagent/consumable/nutriment, 2) + /obj/structure/aquarium/prefilled/Initialize(mapload) . = ..() diff --git a/code/modules/fishing/aquarium/aquarium_kit.dm b/code/modules/fishing/aquarium/aquarium_kit.dm index e22ccb3755879..30c9300323126 100644 --- a/code/modules/fishing/aquarium/aquarium_kit.dm +++ b/code/modules/fishing/aquarium/aquarium_kit.dm @@ -2,7 +2,7 @@ /obj/item/fish_feed name = "fish feed can" desc = "A refillable can that dispenses nutritious fish feed." - icon = 'icons/obj/aquarium.dmi' + icon = 'icons/obj/aquarium/supplies.dmi' icon_state = "fish_feed" w_class = WEIGHT_CLASS_TINY @@ -58,7 +58,7 @@ name = "ominous fish case" /obj/item/storage/fish_case/syndicate/get_fish_type() - return pick(/obj/item/fish/donkfish, /obj/item/fish/emulsijack) + return pick(/obj/item/fish/donkfish, /obj/item/fish/emulsijack, /obj/item/fish/jumpercable) /obj/item/storage/fish_case/tiziran name = "imported fish case" @@ -76,6 +76,7 @@ /obj/item/fish/boned = 1, /obj/item/fish/clownfish/lube = 3, /obj/item/fish/emulsijack = 1, + /obj/item/fish/jumpercable = 1, /obj/item/fish/sludgefish/purple = 1, /obj/item/fish/pufferfish = 3, /obj/item/fish/slimefish = 2, @@ -93,7 +94,7 @@ /obj/item/aquarium_kit name = "DIY Aquarium Construction Kit" desc = "Everything you need to build your own aquarium. Raw materials sold separately." - icon = 'icons/obj/aquarium.dmi' + icon = 'icons/obj/aquarium/supplies.dmi' icon_state = "construction_kit" w_class = WEIGHT_CLASS_TINY @@ -104,14 +105,14 @@ /obj/item/aquarium_prop name = "generic aquarium prop" desc = "very boring" - icon = 'icons/obj/aquarium.dmi' + icon = 'icons/obj/aquarium/supplies.dmi' w_class = WEIGHT_CLASS_TINY var/layer_mode = AQUARIUM_LAYER_MODE_BOTTOM /obj/item/aquarium_prop/Initialize(mapload) . = ..() - AddComponent(/datum/component/aquarium_content) + AddComponent(/datum/component/aquarium_content, icon) /obj/item/aquarium_prop/rocks name = "rocks" diff --git a/code/modules/fishing/aquarium/aquarium_upgrades.dm b/code/modules/fishing/aquarium/aquarium_upgrades.dm new file mode 100644 index 0000000000000..140777d34f0ae --- /dev/null +++ b/code/modules/fishing/aquarium/aquarium_upgrades.dm @@ -0,0 +1,37 @@ + +/// Aquarium upgrades, can be applied to a basic aquarium to upgrade it into an advanced subtype. +/obj/item/aquarium_upgrade + name = "Aquarium Upgrade" + desc = "An upgrade." + + icon = 'icons/obj/aquarium/supplies.dmi' + icon_state = "construction_kit" + /// What kind of aquarium can accept this upgrade. Strict type check, no subtypes. + var/upgrade_from_type = /obj/structure/aquarium + /// typepath of the new aquarium subtype created. + var/upgrade_to_type = /obj/structure/aquarium + +/obj/item/aquarium_upgrade/bioelec_gen + name = "Aquarium Bioelectricity Kit" + desc = "All the required components to allow an aquarium to harness energy bioelectric fish." + icon_state = "bioelec_kit" + upgrade_to_type = /obj/structure/aquarium/bioelec_gen + +/obj/structure/aquarium/bioelec_gen + name = "bioelectricity generator" + desc = "An unconventional type of generator that boosts and harvests the energy produced by bioelectric fish." + + icon_state = "bioelec_map" + icon_prefix = "bioelec" + +/obj/structure/aquarium/bioelec_gen/zap_act(power, zap_flags) + var/explosive = zap_flags & ZAP_MACHINE_EXPLOSIVE + if(!explosive) + return //immune to all other shocks to make sure power can be generated without breaking the generator itself + return ..() + +/obj/structure/aquarium/bioelec_gen/examine(mob/user) + . = ..() + . += span_boldwarning("WARNING! WARNING! WARNING!") + . += span_warning("The bioelectric potential of the fish inside is magnified to dangerous levels by the generator.") + . += span_notice("Tesla coils are required to collect this magnified energy... and you'll want a grounding rod to protect yourself as well.") diff --git a/code/modules/fishing/aquarium/fish_analyzer.dm b/code/modules/fishing/aquarium/fish_analyzer.dm index 2706da8e9671b..2038f1960f903 100644 --- a/code/modules/fishing/aquarium/fish_analyzer.dm +++ b/code/modules/fishing/aquarium/fish_analyzer.dm @@ -78,31 +78,29 @@ return CONTEXTUAL_SCREENTIP_SET return NONE -/obj/item/fish_analyzer/afterattack(atom/target, mob/user, proximity) - . = ..() - if(!proximity || !user.can_read(src) || user.is_blind()) - return +/obj/item/fish_analyzer/interact_with_atom(atom/target, mob/living/user, list/modifiers) + if(!isfish(target) && !isaquarium(target)) + return NONE + if(!user.can_read(src) || user.is_blind()) + return ITEM_INTERACT_BLOCKING if(isfish(target)) balloon_alert(user, "analyzing stats") - user.visible_message(span_notice("[user] analyzes [target]."), span_notice("You analyze [target].")) analyze_status(target, user) else if(istype(target, /obj/structure/aquarium)) scan_aquarium(target, user) + return ITEM_INTERACT_SUCCESS - -/obj/item/fish_analyzer/afterattack_secondary(atom/target, mob/user, proximity_flag, click_parameters) - if(!isfish(target)) - return - - if(!proximity_flag || !user.can_read(src) || user.is_blind()) - return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN +/obj/item/fish_analyzer/interact_with_atom_secondary(atom/interacting_with, mob/living/user, list/modifiers) + if(!isfish(interacting_with)) + return NONE + if(!user.can_read(src) || user.is_blind()) + return ITEM_INTERACT_BLOCKING balloon_alert(user, "analyzing traits") - - analyze_traits(target, user) - return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN + analyze_traits(interacting_with, user) + return ITEM_INTERACT_SUCCESS ///Instantiates the radial menu, populates the list of choices, shows it and register signals on the aquarium. /obj/item/fish_analyzer/proc/scan_aquarium(obj/structure/aquarium/aquarium, mob/user) diff --git a/code/modules/fishing/fish/_fish.dm b/code/modules/fishing/fish/_fish.dm index 00c52eb338a42..a12ae7e7397a9 100644 --- a/code/modules/fishing/fish/_fish.dm +++ b/code/modules/fishing/fish/_fish.dm @@ -2,7 +2,7 @@ /obj/item/fish name = "generic looking aquarium fish" desc = "very bland" - icon = 'icons/obj/aquarium.dmi' + icon = 'icons/obj/aquarium/fish.dmi' icon_state = "bugfish" lefthand_file = 'icons/mob/inhands/fish_lefthand.dmi' righthand_file = 'icons/mob/inhands/fish_righthand.dmi' @@ -138,10 +138,14 @@ /// If this fish type counts towards the Fish Species Scanning experiments var/experisci_scannable = TRUE + /// cooldown on creating tesla zaps + COOLDOWN_DECLARE(electrogenesis_cooldown) + /// power of the tesla zap created by the fish in a bioelectric generator + var/electrogenesis_power = 10 MEGA JOULES /obj/item/fish/Initialize(mapload, apply_qualities = TRUE) . = ..() - AddComponent(/datum/component/aquarium_content, PROC_REF(get_aquarium_animation), list(COMSIG_FISH_STATUS_CHANGED,COMSIG_FISH_STIRRED)) + AddComponent(/datum/component/aquarium_content, icon, PROC_REF(get_aquarium_animation), list(COMSIG_FISH_STATUS_CHANGED,COMSIG_FISH_STIRRED)) RegisterSignal(src, COMSIG_ATOM_ON_LAZARUS_INJECTOR, PROC_REF(use_lazarus)) if(do_flop_animation) @@ -351,6 +355,9 @@ if(ready_to_reproduce()) try_to_reproduce() + if(HAS_TRAIT(src, TRAIT_FISH_ELECTROGENESIS) && COOLDOWN_FINISHED(src, electrogenesis_cooldown)) + try_electrogenesis() + SEND_SIGNAL(src, COMSIG_FISH_LIFE, seconds_per_tick) /obj/item/fish/proc/set_status(new_status) @@ -605,6 +612,19 @@ if(flopping) flop_animation() +/obj/item/fish/proc/try_electrogenesis() + if(status == FISH_DEAD || is_hungry()) + return + COOLDOWN_START(src, electrogenesis_cooldown, ELECTROGENESIS_DURATION + ELECTROGENESIS_VARIANCE) + var/fish_zap_range = 1 + var/fish_zap_power = 1 KILO JOULES // ~5 damage, just a little friendly "yeeeouch!" + var/fish_zap_flags = ZAP_MOB_DAMAGE + if(istype(loc, /obj/structure/aquarium/bioelec_gen)) + fish_zap_range = 5 + fish_zap_power = electrogenesis_power + fish_zap_flags |= (ZAP_GENERATES_POWER | ZAP_MOB_STUN) + tesla_zap(source = get_turf(src), zap_range = fish_zap_range, power = fish_zap_power, cutoff = 1 MEGA JOULES, zap_flags = fish_zap_flags) + /// Returns random fish, using random_case_rarity probabilities. /proc/random_fish_type(required_fluid) var/static/probability_table diff --git a/code/modules/fishing/fish/fish_traits.dm b/code/modules/fishing/fish/fish_traits.dm index 8dee817f3e57f..67804cba9fcd1 100644 --- a/code/modules/fishing/fish/fish_traits.dm +++ b/code/modules/fishing/fish/fish_traits.dm @@ -313,7 +313,7 @@ GLOBAL_LIST_INIT(fish_traits, init_subtypes_w_path_keys(/datum/fish_trait, list( name = "Aggressive" inheritability = 80 diff_traits_inheritability = 40 - catalog_description = "This fish is agressively territorial, and may attack fish that come close to it." + catalog_description = "This fish is aggressively territorial, and may attack fish that come close to it." /datum/fish_trait/aggressive/apply_to_fish(obj/item/fish/fish) RegisterSignal(fish, COMSIG_FISH_LIFE, PROC_REF(try_attack_fish)) @@ -364,7 +364,7 @@ GLOBAL_LIST_INIT(fish_traits, init_subtypes_w_path_keys(/datum/fish_trait, list( catalog_description = "This fish is capable of substaining itself by producing its own sources of energy (food)." incompatible_traits = list(/datum/fish_trait/predator, /datum/fish_trait/necrophage) -/datum/fish_trait/antigrav/apply_to_fish(obj/item/fish/fish) +/datum/fish_trait/mixotroph/apply_to_fish(obj/item/fish/fish) ADD_TRAIT(fish, TRAIT_FISH_NO_HUNGER, FISH_TRAIT_DATUM) /datum/fish_trait/antigrav @@ -379,3 +379,53 @@ GLOBAL_LIST_INIT(fish_traits, init_subtypes_w_path_keys(/datum/fish_trait, list( /datum/fish_trait/antigrav/apply_to_fish(obj/item/fish/fish) fish.AddElement(/datum/element/forced_gravity, NEGATIVE_GRAVITY) + +///Anxiety means the fish will die if in a location with more than 3 fish (including itself) +///This is just barely enough to crossbreed out of anxiety, but it severely limits the potential of +/datum/fish_trait/anxiety + name = "Anxiety" + inheritability = 100 + diff_traits_inheritability = 70 + catalog_description = "This fish tends to die of stress when forced to be around too many other fish." + +/datum/fish_trait/anxiety/apply_to_fish(obj/item/fish/fish) + RegisterSignal(fish, COMSIG_FISH_LIFE, PROC_REF(on_fish_life)) + +///signal sent when the anxiety fish is fed, killing it if sharing contents with too many fish. +/datum/fish_trait/anxiety/proc/on_fish_life(obj/item/fish/fish, seconds_per_tick) + SIGNAL_HANDLER + var/fish_tolerance = 3 + if(!fish.loc || fish.status == FISH_DEAD) + return + for(var/obj/item/fish/other_fish in fish.loc.contents) + if(fish_tolerance <= 0) + fish.loc.visible_message(span_warning("[fish] seems to freak out for a moment, then it stops moving...")) + fish.set_status(FISH_DEAD) + return + fish_tolerance -= 1 + +/datum/fish_trait/electrogenesis + name = "Electrogenesis" + inheritability = 60 + diff_traits_inheritability = 30 + catalog_description = "This fish is electroreceptive, and will generate electric fields. Can be harnessed inside a bioelectric generator." + +/datum/fish_trait/electrogenesis/apply_to_fish(obj/item/fish/fish) + ADD_TRAIT(fish, TRAIT_FISH_ELECTROGENESIS, FISH_TRAIT_DATUM) + RegisterSignal(fish, COMSIG_ITEM_ATTACK, PROC_REF(on_item_attack)) + +/datum/fish_trait/electrogenesis/proc/on_item_attack(obj/item/fish/fish, mob/living/target, mob/living/user) + SIGNAL_HANDLER + + if(fish.status == FISH_ALIVE) + fish.force = 16 + fish.damtype = BURN + fish.attack_verb_continuous = list("shocks", "zaps") + fish.attack_verb_simple = list("shock", "zap") + fish.hitsound = 'sound/effects/sparks4.ogg' + else + fish.force = fish::force + fish.damtype = fish::damtype + fish.attack_verb_continuous = fish::attack_verb_continuous + fish.attack_verb_simple = fish::attack_verb_simple + fish.hitsound = fish::hitsound diff --git a/code/modules/fishing/fish/fish_types.dm b/code/modules/fishing/fish/fish_types.dm index 51fcf61307a86..f61cb43b22424 100644 --- a/code/modules/fishing/fish/fish_types.dm +++ b/code/modules/fishing/fish/fish_types.dm @@ -2,7 +2,8 @@ /obj/item/fish/goldfish name = "goldfish" - desc = "Despite common belief, goldfish do not have three-second memories. They can actually remember things that happened up to three months ago." + desc = "Despite common belief, goldfish do not have three-second memories. \ + They can actually remember things that happened up to three months ago." icon_state = "goldfish" sprite_width = 8 sprite_height = 8 @@ -13,6 +14,12 @@ required_temperature_min = MIN_AQUARIUM_TEMP+18 required_temperature_max = MIN_AQUARIUM_TEMP+26 +/obj/item/fish/goldfish/gill + name = "McGill" + desc = "A great rubber duck tool for Lawyers who can't get a grasp over their case." + stable_population = 1 + random_case_rarity = FISH_RARITY_NOPE + /obj/item/fish/angelfish name = "angelfish" desc = "Young Angelfish often live in groups, while adults prefer solitary life. They become territorial and aggressive toward other fish when they reach adulthood." @@ -295,6 +302,27 @@ required_temperature_min = MIN_AQUARIUM_TEMP+5 required_temperature_max = MIN_AQUARIUM_TEMP+40 +/obj/item/fish/jumpercable + name = "monocloning jumpercable" + desc = "A surprisingly useful if nasty looking creation from the syndicate fish labs. Drop one in a tank, and \ + watch it self-feed and multiply. Generates more and more power as a growing swarm!" + icon_state = "jumpercable" + dedicated_in_aquarium_icon_state = "jumpercable_small" + sprite_width = 17 + sprite_height = 5 + stable_population = 12 + average_size = 110 + average_weight = 10000 + random_case_rarity = FISH_RARITY_GOOD_LUCK_FINDING_THIS + required_temperature_min = MIN_AQUARIUM_TEMP+10 + required_temperature_max = MIN_AQUARIUM_TEMP+30 + favorite_bait = list(/obj/item/stock_parts/power_store/cell/lead) + fish_traits = list( + /datum/fish_trait/parthenogenesis, + /datum/fish_trait/mixotroph, + /datum/fish_trait/electrogenesis, + ) + /obj/item/fish/ratfish name = "ratfish" desc = "A rat exposed to the murky waters of maintenance too long. Any higher power, if it revealed itself, would state that the ratfish's continued existence is extremely unwelcome." @@ -306,7 +334,6 @@ fish_traits = list(/datum/fish_trait/necrophage) required_temperature_min = MIN_AQUARIUM_TEMP+15 required_temperature_max = MIN_AQUARIUM_TEMP+35 - fish_ai_type = FISH_AI_ZIPPY favorite_bait = list( list( @@ -400,9 +427,9 @@ /obj/item/fish/mastodon name = "unmarine mastodon" desc = "A monster of exposed muscles and innards, wrapped in a fish-like skeleton. You don't remember ever seeing it on the catalog." - icon = 'icons/obj/aquarium_wide.dmi' + icon = 'icons/obj/aquarium/wide.dmi' icon_state = "mastodon" - dedicated_in_aquarium_icon = 'icons/obj/aquarium.dmi' + dedicated_in_aquarium_icon = 'icons/obj/aquarium/fish.dmi' dedicated_in_aquarium_icon_state = "mastodon_small" base_pixel_x = -16 pixel_x = -16 @@ -540,3 +567,98 @@ ///It spins, and dimly glows in the dark. /obj/item/fish/starfish/flop_animation() DO_FLOATING_ANIM(src) + +/obj/item/fish/lavaloop + name = "lavaloop fish" + desc = "Due to its curvature, it can be used as make-shift boomerang." + icon_state = "lava_loop" + sprite_width = 3 + sprite_height = 5 + average_size = 30 + average_weight = 500 + resistance_flags = FIRE_PROOF | LAVA_PROOF + required_fluid_type = AQUARIUM_FLUID_ANY_WATER //if we can survive hot lava and freezing plasrivers, we can survive anything + fish_ai_type = FISH_AI_ZIPPY + min_pressure = HAZARD_LOW_PRESSURE + required_temperature_min = MIN_AQUARIUM_TEMP+30 + required_temperature_max = MIN_AQUARIUM_TEMP+35 + aquarium_vc_color = "#ce7e1d" + fish_traits = list( + /datum/fish_trait/carnivore, + /datum/fish_trait/heavy, + ) + hitsound = null + throwforce = 5 + ///maximum bonus damage when winded up + var/maximum_bonus = 25 + +/obj/item/fish/lavaloop/Initialize(mapload) + . = ..() + ADD_TRAIT(src, TRAIT_BYPASS_RANGED_ARMOR, INNATE_TRAIT) + AddComponent(/datum/component/boomerang, throw_range, TRUE) + AddComponent(\ + /datum/component/throwbonus_on_windup,\ + maximum_bonus = maximum_bonus,\ + windup_increment_speed = 2,\ + throw_text = "starts cooking in your hands, it may explode soon!",\ + pass_maximum_callback = CALLBACK(src, PROC_REF(explode_on_user)),\ + apply_bonus_callback = CALLBACK(src, PROC_REF(on_fish_land)),\ + sound_on_success = 'sound/weapons/parry.ogg',\ + effect_on_success = /obj/effect/temp_visual/guardian/phase,\ + ) + +/obj/item/fish/lavaloop/proc/explode_on_user(mob/living/user) + var/obj/item/bodypart/arm/active_arm = user.get_active_hand() + active_arm?.dismember() + to_chat(user, span_warning("[src] explodes!")) + playsound(src, 'sound/effects/explosion1.ogg', 40, TRUE) + user.flash_act(1, 1) + qdel(src) + +/obj/item/fish/lavaloop/proc/on_fish_land(mob/living/target, bonus_value) + if(!istype(target)) + return FALSE + return (target.mob_size >= MOB_SIZE_LARGE) + +/obj/item/fish/lavaloop/plasma_river + maximum_bonus = 30 + +/obj/item/fish/lavaloop/plasma_river/explode_on_user(mob/living/user) + playsound(src, 'sound/effects/explosion1.ogg', 40, TRUE) + user.flash_act(1, 1) + user.apply_status_effect(/datum/status_effect/ice_block_talisman, 5 SECONDS) + qdel(src) + +/obj/item/fish/lavaloop/plasma_river/on_fish_land(mob/living/target, bonus_value) + if(!istype(target)) + return FALSE + if(target.mob_size < MOB_SIZE_LARGE) + return FALSE + var/freeze_timer = (bonus_value * 0.1) + if(freeze_timer <= 0) + return FALSE + target.apply_status_effect(/datum/status_effect/ice_block_talisman, freeze_timer SECONDS) + return FALSE + +/obj/item/fish/zipzap + name = "anxious zipzap" + desc = "A fish overflowing with crippling anxiety and electric potential. Worried about the walls of its tank closing in constantly. Both literally and as a general metaphorical unease about life's direction." + icon_state = "zipzap" + icon_state_dead = "zipzap_dead" + sprite_width = 8 + sprite_height = 8 + stable_population = 3 + average_size = 30 + average_weight = 500 + random_case_rarity = FISH_RARITY_VERY_RARE + favorite_bait = list(/obj/item/stock_parts/power_store/cell/lead) + required_temperature_min = MIN_AQUARIUM_TEMP+18 + required_temperature_max = MIN_AQUARIUM_TEMP+26 + fish_traits = list( + /datum/fish_trait/no_mating, + /datum/fish_trait/wary, + /datum/fish_trait/anxiety, + /datum/fish_trait/electrogenesis, + ) + //anxiety naturally limits the amount of zipzaps per tank, so they are stronger alone + electrogenesis_power = 20 MEGA JOULES diff --git a/code/modules/fishing/fishing_minigame.dm b/code/modules/fishing/fishing_minigame.dm index 14c1d88390ccb..45739b79399e4 100644 --- a/code/modules/fishing/fishing_minigame.dm +++ b/code/modules/fishing/fishing_minigame.dm @@ -244,10 +244,13 @@ /datum/fishing_challenge/proc/start(mob/living/user) /// Create fishing line visuals - fishing_line = used_rod.create_fishing_line(lure, target_py = 5) + if(used_rod.display_fishing_line) + fishing_line = used_rod.create_fishing_line(lure, target_py = 5) + RegisterSignal(fishing_line, COMSIG_QDELETING, PROC_REF(on_line_deleted)) + else //if the rod doesnt have a fishing line, then it ends when they move away + RegisterSignal(user, COMSIG_MOVABLE_MOVED, PROC_REF(on_user_move)) active_effects = bitfield_to_list(special_effects & FISHING_MINIGAME_ACTIVE_EFFECTS) // If fishing line breaks los / rod gets dropped / deleted - RegisterSignal(fishing_line, COMSIG_QDELETING, PROC_REF(on_line_deleted)) RegisterSignal(used_rod, COMSIG_ITEM_ATTACK_SELF, PROC_REF(on_attack_self)) ADD_TRAIT(user, TRAIT_GONE_FISHING, REF(src)) user.add_mood_event("fishing", /datum/mood_event/fishing) @@ -263,10 +266,18 @@ user.balloon_alert(user, user.is_holding(used_rod) ? "line snapped" : "rod dropped") interrupt() +/datum/fishing_challenge/proc/on_user_move(datum/source) + SIGNAL_HANDLER + + user.balloon_alert(user, "too far!") + interrupt() + /datum/fishing_challenge/proc/handle_click(mob/source, atom/target, modifiers) SIGNAL_HANDLER //You need to be holding the rod to use it. - if(!source.get_active_held_item(used_rod) || LAZYACCESS(modifiers, SHIFT_CLICK) || LAZYACCESS(modifiers, CTRL_CLICK) || LAZYACCESS(modifiers, ALT_CLICK)) + if(LAZYACCESS(modifiers, SHIFT_CLICK) || LAZYACCESS(modifiers, CTRL_CLICK) || LAZYACCESS(modifiers, ALT_CLICK)) + return + if(!source.get_active_held_item(used_rod) && !HAS_TRAIT(source, TRAIT_PROFOUND_FISHER)) return if(phase == WAIT_PHASE) //Reset wait send_alert("miss!") @@ -644,8 +655,12 @@ hud_completion = new(null, null, challenge) vis_contents += list(hud_bait, hud_fish, hud_completion) challenge.user.client.screen += src + master_ref = WEAKREF(challenge) /atom/movable/screen/fishing_hud/Destroy() + var/datum/fishing_challenge/challenge = master_ref?.resolve() + if(!isnull(challenge)) + challenge.user.client.screen -= src QDEL_NULL(hud_fish) QDEL_NULL(hud_bait) QDEL_NULL(hud_completion) @@ -699,6 +714,8 @@ RegisterSignal(spot, COMSIG_MOVABLE_MOVED, PROC_REF(follow_movable)) /obj/effect/fishing_lure/proc/follow_movable(atom/movable/source) + SIGNAL_HANDLER + set_glide_size(source.glide_size) forceMove(source.loc) diff --git a/code/modules/fishing/fishing_rod.dm b/code/modules/fishing/fishing_rod.dm index 0578ffb078907..6ee02d6d9de4d 100644 --- a/code/modules/fishing/fishing_rod.dm +++ b/code/modules/fishing/fishing_rod.dm @@ -36,6 +36,9 @@ /// The default color for the reel overlay if no line is equipped. var/default_line_color = "gray" + ///should there be a fishing line? + var/display_fishing_line = TRUE + ///The name of the icon state of the reel overlay var/reel_overlay = "reel_overlay" @@ -142,21 +145,13 @@ . = ..() ui_interact(user) -/obj/item/fishing_rod/pre_attack(atom/targeted_atom, mob/living/user, params) - . = ..() - /// Reel in if able - if(currently_hooked) - reel(user) - return TRUE - if(!hook) - balloon_alert(user, "install a hook first!") - SEND_SIGNAL(targeted_atom, COMSIG_PRE_FISHING) - /// Generates the fishing line visual from the current user to the target and updates inhands /obj/item/fishing_rod/proc/create_fishing_line(atom/movable/target, target_py = null) + if(!display_fishing_line) + return null var/mob/user = loc if(!istype(user)) - return + return null if(fishing_line) QDEL_NULL(fishing_line) var/beam_color = line?.line_color || default_line_color @@ -200,22 +195,26 @@ qdel(source) return BEAM_CANCEL_DRAW -/obj/item/fishing_rod/afterattack(atom/target, mob/user, proximity_flag, click_parameters) - . = ..() - . |= AFTERATTACK_PROCESSED_ITEM +/obj/item/fishing_rod/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + return ranged_interact_with_atom(interacting_with, user, modifiers) - /// Reel in if able +/obj/item/fishing_rod/ranged_interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + if(!hook) + balloon_alert(user, "install a hook first!") + return ITEM_INTERACT_BLOCKING + + // Reel in if able if(currently_hooked) reel(user) - return . - - cast_line(target, user, proximity_flag) + return ITEM_INTERACT_BLOCKING - return . + SEND_SIGNAL(interacting_with, COMSIG_PRE_FISHING) + cast_line(interacting_with, user) + return ITEM_INTERACT_SUCCESS -///Called by afterattack(). If the line to whatever that is is clear and we're not already busy, try fishing in it -/obj/item/fishing_rod/proc/cast_line(atom/target, mob/user, proximity_flag) - if(casting || currently_hooked || proximity_flag) +/// If the line to whatever that is is clear and we're not already busy, try fishing in it +/obj/item/fishing_rod/proc/cast_line(atom/target, mob/user) + if(casting || currently_hooked) return if(!hook) balloon_alert(user, "install a hook first!") @@ -225,8 +224,6 @@ return if(!COOLDOWN_FINISHED(src, casting_cd)) return - /// Annoyingly pre attack is only called in melee - SEND_SIGNAL(target, COMSIG_PRE_FISHING) casting = TRUE var/obj/projectile/fishing_cast/cast_projectile = new(get_turf(src)) cast_projectile.range = cast_range @@ -234,7 +231,7 @@ cast_projectile.original = target cast_projectile.fired_from = src cast_projectile.firer = user - cast_projectile.impacted = list(user = TRUE) + cast_projectile.impacted = list(WEAKREF(user) = TRUE) cast_projectile.preparePixelProjectile(target, user) cast_projectile.fire() COOLDOWN_START(src, casting_cd, 1 SECONDS) @@ -280,6 +277,8 @@ if(istype(bait, /obj/item/food/bait)) var/obj/item/food/bait/real_bait = bait bait_state = real_bait.rod_overlay_icon_state + if(istype(bait, /obj/item/stock_parts/power_store/cell/lead)) + bait_state = "battery_overlay" . += bait_state /obj/item/fishing_rod/worn_overlays(mutable_appearance/standing, isinhands, icon_file) diff --git a/code/modules/fishing/sources/_fish_source.dm b/code/modules/fishing/sources/_fish_source.dm index 887b8f3a2a3ba..66d2bf0a880e3 100644 --- a/code/modules/fishing/sources/_fish_source.dm +++ b/code/modules/fishing/sources/_fish_source.dm @@ -69,6 +69,10 @@ GLOBAL_LIST_INIT(specific_fish_icons, zebra_typecacheof(list( /datum/fish_source/proc/reason_we_cant_fish(obj/item/fishing_rod/rod, mob/fisherman, atom/parent) return rod.reason_we_cant_fish(src) +/// Called below above proc, in case the fishing source has anything to do that isn't denial +/datum/fish_source/proc/on_start_fishing(obj/item/fishing_rod/rod, mob/fisherman, atom/parent) + return + /** * Calculates the difficulty of the minigame: * @@ -81,8 +85,8 @@ GLOBAL_LIST_INIT(specific_fish_icons, zebra_typecacheof(list( . = fishing_difficulty // Difficulty modifier added by having the Settler quirk - if(HAS_TRAIT(fisherman, TRAIT_SETTLER)) - . += SETTLER_DIFFICULTY_MOD + if(HAS_TRAIT(fisherman, TRAIT_EXPERT_FISHER)) + . += EXPERT_FISHER_DIFFICULTY_MOD // Difficulty modifier added by the fisher's skill level if(!challenge || !(challenge.special_effects & FISHING_MINIGAME_RULE_NO_EXP)) diff --git a/code/modules/fishing/sources/source_types.dm b/code/modules/fishing/sources/source_types.dm index c21579626fe28..9328f87be6905 100644 --- a/code/modules/fishing/sources/source_types.dm +++ b/code/modules/fishing/sources/source_types.dm @@ -7,6 +7,7 @@ /obj/item/fish/cardinal = 15, /obj/item/fish/greenchromis = 15, /obj/item/fish/lanternfish = 5, + /obj/item/fish/zipzap = 5, /obj/item/fish/clownfish/lube = 3, ) fish_counts = list( @@ -67,6 +68,7 @@ /obj/item/fish/gunner_jellyfish = 5, /obj/item/fish/needlefish = 5, /obj/item/fish/armorfish = 5, + /obj/item/fish/zipzap = 5, ) catalog_description = "Ocean dimension (Fishing portal generator)" fishing_difficulty = FISHING_DEFAULT_DIFFICULTY + 10 @@ -97,6 +99,7 @@ FISHING_DUD = 5, /obj/item/fish/donkfish = 5, /obj/item/fish/emulsijack = 5, + /obj/item/fish/jumpercable = 5, ) catalog_description = "Syndicate dimension (Fishing portal generator)" radial_name = "Syndicate" @@ -193,6 +196,13 @@ fishing_difficulty = FISHING_DEFAULT_DIFFICULTY + 5 +/datum/fish_source/chasm/on_start_fishing(obj/item/fishing_rod/rod, mob/fisherman, atom/parent) + . = ..() + if(istype(rod.hook, /obj/item/fishing_hook/rescue)) + to_chat(fisherman, span_notice("The rescue hook falls straight down the chasm! Hopefully it catches a corpse.")) + return + to_chat(fisherman, span_danger("Your fishing hook makes a soft 'thud' noise as it gets stuck on the wall of the chasm. It doesn't look like it's going to catch much of anything, except maybe some detritus.")) + /datum/fish_source/chasm/roll_reward(obj/item/fishing_rod/rod, mob/fisherman) var/rolled_reward = ..() @@ -201,12 +211,15 @@ return rod.hook.chasm_detritus_type +/datum/fish_source/chasm + /datum/fish_source/lavaland catalog_description = "Lava vents" background = "background_lavaland" fish_table = list( FISHING_DUD = 5, /obj/item/stack/ore/slag = 20, + /obj/item/fish/lavaloop = 15, /obj/structure/closet/crate/necropolis/tendril = 1, /obj/effect/mob_spawn/corpse/human/charredskeleton = 1 ) @@ -229,6 +242,7 @@ fish_table = list( FISHING_DUD = 5, /obj/item/fish/chasm_crab/ice = 15, + /obj/item/fish/lavaloop/plasma_river = 15, /obj/item/coin/plasma = 3, /obj/item/stack/ore/plasma = 3, /mob/living/basic/mining/lobstrosity = 1, diff --git a/code/modules/food_and_drinks/machinery/gibber.dm b/code/modules/food_and_drinks/machinery/gibber.dm index e0002817f782e..cd50f29ffe478 100644 --- a/code/modules/food_and_drinks/machinery/gibber.dm +++ b/code/modules/food_and_drinks/machinery/gibber.dm @@ -5,6 +5,7 @@ icon_state = "grinder" density = TRUE circuit = /obj/item/circuitboard/machine/gibber + anchored_tabletop_offset = 8 var/operating = FALSE //Is it on? var/dirty = FALSE // Does it need cleaning? @@ -15,13 +16,15 @@ /obj/machinery/gibber/Initialize(mapload) . = ..() + RegisterSignal(src, COMSIG_COMPONENT_CLEAN_ACT, PROC_REF(on_cleaned)) if(prob(5)) name = "meat grinder" desc = "Okay, if I... if I chop you up in a meat grinder, and the only thing that comes out, that's left of you, is your eyeball, \ you'r- you're PROBABLY DEAD! You're probably going to - not you, I'm just sayin', like, if you- if somebody were to, like, \ push you into a meat grinder, and, like, your- one of your finger bones is still intact, they're not gonna pick it up and go, \ Well see, yeah it wasn't deadly, it wasn't an instant kill move! You still got, like, this part of your finger left!" - add_overlay("grjam") + dirty = TRUE + update_appearance(UPDATE_OVERLAYS) /obj/machinery/gibber/RefreshParts() . = ..() @@ -45,16 +48,23 @@ /obj/machinery/gibber/update_overlays() . = ..() if(dirty) - . +="grbloody" - if(machine_stat & (NOPOWER|BROKEN)) + . += "grinder_bloody" + if(machine_stat & (NOPOWER|BROKEN) || panel_open) return if(!occupant) - . += "grjam" + . += "grinder_empty" + . += emissive_appearance(icon, "grinder_empty", src, alpha = src.alpha) return if(operating) - . += "gruse" + . += "grinder_active" + . += emissive_appearance(icon, "grinder_active", src, alpha = src.alpha) + . += "grinder_jaws_active" return - . += "gridle" + . += "grinder_loaded" + . += emissive_appearance(icon, "grinder_loaded", src, alpha = src.alpha) + +/obj/machinery/gibber/on_set_panel_open(old_value) + update_appearance(UPDATE_OVERLAYS) /obj/machinery/gibber/attack_paw(mob/user, list/modifiers) return attack_hand(user, modifiers) @@ -160,8 +170,7 @@ operating = TRUE update_appearance() - var/offset = prob(50) ? -2 : 2 - animate(src, pixel_x = pixel_x + offset, time = 0.2, loop = 200) //start shaking + Shake(pixelshiftx = 1, pixelshifty = 0, duration = gibtime) var/mob/living/mob_occupant = occupant var/sourcename = mob_occupant.real_name var/sourcejob @@ -223,6 +232,8 @@ /obj/machinery/gibber/proc/make_meat(obj/item/stack/sheet/animalhide/skin, list/obj/item/food/meat/slab/allmeat, meat_produced, gibtype, list/datum/disease/diseases) playsound(src.loc, 'sound/effects/splat.ogg', 50, TRUE) operating = FALSE + if (!dirty && prob(50)) + dirty = TRUE var/turf/T = get_turf(src) var/list/turf/nearby_turfs = RANGE_TURFS(3,T) - T if(skin) @@ -265,3 +276,7 @@ if(victim.loc == input) victim.forceMove(src) victim.gib(DROP_ALL_REMAINS) + +/obj/machinery/gibber/proc/on_cleaned(obj/source_component, obj/source) + dirty = FALSE + update_appearance(UPDATE_OVERLAYS) diff --git a/code/modules/food_and_drinks/machinery/icecream_vat.dm b/code/modules/food_and_drinks/machinery/icecream_vat.dm index cae1b26024933..eba5ff63f3f8c 100644 --- a/code/modules/food_and_drinks/machinery/icecream_vat.dm +++ b/code/modules/food_and_drinks/machinery/icecream_vat.dm @@ -110,26 +110,27 @@ . = ..() if(.) return - if(!beaker || !istype(beaker) || !beaker.reagents || (beaker.item_flags & ABSTRACT) || !beaker.is_open_container()) + if(!istype(beaker) || !beaker.reagents || (beaker.item_flags & ABSTRACT) || !beaker.is_open_container()) return if(custom_ice_cream_beaker) - if(beaker.forceMove(src)) + if(user.transferItemToLoc(beaker, src)) try_put_in_hand(custom_ice_cream_beaker, user) balloon_alert(user, "beakers swapped") custom_ice_cream_beaker = beaker else balloon_alert(user, "beaker slot full!") return - if(beaker.forceMove(src)) - balloon_alert(user, "beaker inserted") - custom_ice_cream_beaker = beaker + if(!user.transferItemToLoc(beaker, src)) + return + balloon_alert(user, "beaker inserted") + custom_ice_cream_beaker = beaker /obj/machinery/icecream_vat/attackby_secondary(obj/item/reagent_containers/beaker, mob/user, params) . = ..() if(. == SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN) return - if(!beaker || !istype(beaker) || !beaker.reagents || (beaker.item_flags & ABSTRACT) || !beaker.is_open_container()) + if(!istype(beaker) || !beaker.reagents || (beaker.item_flags & ABSTRACT) || !beaker.is_open_container()) return SECONDARY_ATTACK_CONTINUE_CHAIN var/added_reagents = FALSE for(var/datum/reagent/beaker_reagents in beaker.reagents.reagent_list) @@ -211,9 +212,10 @@ return ice_cream_icon /obj/machinery/icecream_vat/on_deconstruction(disassembled = TRUE) - new /obj/item/stack/sheet/iron(loc, 4) - if(custom_ice_cream_beaker) - custom_ice_cream_beaker.forceMove(loc) + var/atom/drop_location = drop_location() + + new /obj/item/stack/sheet/iron(drop_location, 4) + custom_ice_cream_beaker?.forceMove(drop_location) ///Makes an ice cream cone of the make_type, using ingredients list as reagents used to make it. Puts in user's hand if possible. /obj/machinery/icecream_vat/proc/make_cone(mob/user, make_type, list/ingredients) diff --git a/code/modules/food_and_drinks/machinery/microwave.dm b/code/modules/food_and_drinks/machinery/microwave.dm index 0f1be89410a41..bc5adfbd0f951 100644 --- a/code/modules/food_and_drinks/machinery/microwave.dm +++ b/code/modules/food_and_drinks/machinery/microwave.dm @@ -53,9 +53,9 @@ /// If we use a cell instead of powernet var/cell_powered = FALSE /// The cell we charge with - var/obj/item/stock_parts/cell/cell + var/obj/item/stock_parts/power_store/cell /// The cell we're charging - var/obj/item/stock_parts/cell/vampire_cell + var/obj/item/stock_parts/power_store/vampire_cell /// Capable of vampire charging PDAs var/vampire_charging_capable = FALSE /// Charge contents of microwave instead of cook @@ -114,6 +114,7 @@ QDEL_LIST(ingredients) QDEL_NULL(wires) QDEL_NULL(soundloop) + QDEL_NULL(particles) if(!isnull(cell)) QDEL_NULL(cell) return ..() @@ -123,7 +124,7 @@ if(cell_powered) if(!isnull(cell)) context[SCREENTIP_CONTEXT_CTRL_LMB] = "Remove cell" - else if(held_item && istype(held_item, /obj/item/stock_parts/cell)) + else if(held_item && istype(held_item, /obj/item/stock_parts/power_store/cell)) context[SCREENTIP_CONTEXT_CTRL_LMB] = "Insert cell" if(held_item?.tool_behaviour == TOOL_WRENCH) @@ -365,27 +366,27 @@ update_appearance() return ITEM_INTERACT_SUCCESS -/obj/machinery/microwave/item_interaction(mob/living/user, obj/item/tool, list/modifiers) +/obj/machinery/microwave/tool_act(mob/living/user, obj/item/tool, list/modifiers) + if(!tool.tool_behaviour) + return ..() if(operating) - return ITEM_INTERACT_SKIP_TO_ATTACK // Don't use tools if we're dirty + return ITEM_INTERACT_SKIP_TO_ATTACK // Don't use tools if we're operating if(dirty >= MAX_MICROWAVE_DIRTINESS) return ITEM_INTERACT_SKIP_TO_ATTACK // Don't insert items if we're dirty if(panel_open && is_wire_tool(tool)) wires.interact(user) return ITEM_INTERACT_SUCCESS - return NONE + return ..() -/obj/machinery/microwave/attackby(obj/item/item, mob/living/user, params) +/obj/machinery/microwave/item_interaction(mob/living/user, obj/item/item, list/modifiers) if(operating) - return + return NONE if(broken > NOT_BROKEN) - if(IS_EDIBLE(item)) - balloon_alert(user, "it's broken!") - return TRUE - return ..() + balloon_alert(user, "it's broken!") + return ITEM_INTERACT_BLOCKING - if(istype(item, /obj/item/stock_parts/cell) && cell_powered) + if(istype(item, /obj/item/stock_parts/power_store/cell) && cell_powered) var/swapped = FALSE if(!isnull(cell)) cell.forceMove(drop_location()) @@ -395,27 +396,23 @@ swapped = TRUE if(!user.transferItemToLoc(item, src)) update_appearance() - return TRUE + return ITEM_INTERACT_BLOCKING cell = item balloon_alert(user, "[swapped ? "swapped" : "inserted"] cell") update_appearance() - return TRUE + return ITEM_INTERACT_SUCCESS if(!anchored) - if(IS_EDIBLE(item)) - balloon_alert(user, "not secured!") - return TRUE - return ..() + balloon_alert(user, "not secured!") + return ITEM_INTERACT_BLOCKING if(dirty >= MAX_MICROWAVE_DIRTINESS) // The microwave is all dirty so can't be used! - if(IS_EDIBLE(item)) - balloon_alert(user, "it's too dirty!") - return TRUE - return ..() + balloon_alert(user, "it's too dirty!") + return ITEM_INTERACT_BLOCKING if(vampire_charging_capable && istype(item, /obj/item/modular_computer) && ingredients.len > 0) balloon_alert(user, "max 1 device!") - return FALSE + return ITEM_INTERACT_BLOCKING if(istype(item, /obj/item/storage)) var/obj/item/storage/tray = item @@ -425,14 +422,14 @@ // Non-tray dumping requires a do_after to_chat(user, span_notice("You start dumping out the contents of [item] into [src]...")) if(!do_after(user, 2 SECONDS, target = tray)) - return + return ITEM_INTERACT_BLOCKING for(var/obj/tray_item in tray.contents) if(!IS_EDIBLE(tray_item)) continue if(ingredients.len >= max_n_of_items) balloon_alert(user, "it's full!") - return TRUE + return ITEM_INTERACT_BLOCKING if(tray.atom_storage.attempt_remove(tray_item, src)) loaded++ ingredients += tray_item @@ -440,23 +437,21 @@ open(autoclose = 0.6 SECONDS) to_chat(user, span_notice("You insert [loaded] items into \the [src].")) update_appearance() - return + return ITEM_INTERACT_SUCCESS - if(item.w_class <= WEIGHT_CLASS_NORMAL && !istype(item, /obj/item/storage) && !user.combat_mode) + if(item.w_class <= WEIGHT_CLASS_NORMAL && !user.combat_mode) if(ingredients.len >= max_n_of_items) balloon_alert(user, "it's full!") - return TRUE + return ITEM_INTERACT_BLOCKING if(!user.transferItemToLoc(item, src)) balloon_alert(user, "it's stuck to your hand!") - return FALSE + return ITEM_INTERACT_BLOCKING ingredients += item open(autoclose = 0.6 SECONDS) user.visible_message(span_notice("[user] adds \a [item] to \the [src]."), span_notice("You add [item] to \the [src].")) update_appearance() - return - - return ..() + return ITEM_INTERACT_SUCCESS /obj/machinery/microwave/attack_hand_secondary(mob/user, list/modifiers) if(user.can_perform_action(src, ALLOW_SILICON_REACH)) @@ -479,13 +474,18 @@ visible_message(span_notice("[user] sets \the [src] to [vampire_charging_enabled ? "charge" : "cook"]."), blind_message = span_notice("You hear \the [src] make an informative beep!")) return CLICK_ACTION_SUCCESS -/obj/machinery/microwave/CtrlClick(mob/user) - . = ..() - if(user.can_perform_action(src) && cell_powered && !isnull(cell) && anchored) +/obj/machinery/microwave/click_ctrl(mob/user) + if(!anchored) + return NONE + + if(cell_powered && !isnull(cell)) user.put_in_hands(cell) balloon_alert(user, "removed cell") cell = null update_appearance() + return CLICK_ACTION_SUCCESS + + return CLICK_ACTION_BLOCKING /obj/machinery/microwave/ui_interact(mob/user) . = ..() @@ -536,8 +536,9 @@ /obj/machinery/microwave/proc/eject() var/atom/drop_loc = drop_location() - for(var/atom/movable/movable_ingredient as anything in ingredients) - movable_ingredient.forceMove(drop_loc) + for(var/obj/item/item_ingredient as anything in ingredients) + item_ingredient.forceMove(drop_loc) + item_ingredient.dropped() //Mob holders can be on the ground if we don't do this open(autoclose = 1.4 SECONDS) /obj/machinery/microwave/proc/start_cycle(mob/user) @@ -669,10 +670,34 @@ if(MICROWAVE_PRE) pre_success(cooker) return + + if(cycles == 1) //Only needs to try to shock mobs once, towards the end of the loop + var/successful_shock + var/list/microwave_contents = list() + microwave_contents += get_all_contents() //Mobs are often hid inside of mob holders, which could be fried and made into a burger... + for(var/mob/living/victim in microwave_contents) + if(victim.electrocute_act(shock_damage = 100, source = src, siemens_coeff = 1, flags = SHOCK_NOGLOVES)) + successful_shock = TRUE + if(victim.stat == DEAD) //This is mostly so humans that can_be_held don't get gibbed from one microwave run alone, but mice become burnt messes + victim.gib() + muck() + if(successful_shock) //We only want to give feedback once, regardless of how many mobs got shocked + var/list/cant_smell = list() + for(var/mob/smeller in get_hearers_in_view(DEFAULT_MESSAGE_RANGE, src)) + if(HAS_TRAIT(smeller, TRAIT_ANOSMIA)) + cant_smell += smeller + visible_message(span_danger("You smell a burnt smell coming from [src]!"), ignored_mobs = cant_smell) + particles = new /particles/smoke() + addtimer(CALLBACK(src, PROC_REF(remove_smoke)), 10 SECONDS) + Shake(duration = 1 SECONDS) + cycles-- use_energy(active_power_usage) addtimer(CALLBACK(src, PROC_REF(cook_loop), type, cycles, wait, cooker), wait) +/obj/machinery/microwave/proc/remove_smoke() + QDEL_NULL(particles) + /obj/machinery/microwave/power_change() . = ..() if(cell_powered) @@ -898,12 +923,12 @@ /obj/machinery/microwave/engineering/Initialize(mapload) . = ..() if(mapload) - cell = new /obj/item/stock_parts/cell/upgraded/plus + cell = new /obj/item/stock_parts/power_store/cell/upgraded/plus update_appearance() /obj/machinery/microwave/engineering/cell_included/Initialize(mapload) . = ..() - cell = new /obj/item/stock_parts/cell/upgraded/plus + cell = new /obj/item/stock_parts/power_store/cell/upgraded/plus update_appearance() #undef MICROWAVE_NORMAL diff --git a/code/modules/food_and_drinks/machinery/monkeyrecycler.dm b/code/modules/food_and_drinks/machinery/monkeyrecycler.dm index d340d4d478d30..ca8f6bcafc632 100644 --- a/code/modules/food_and_drinks/machinery/monkeyrecycler.dm +++ b/code/modules/food_and_drinks/machinery/monkeyrecycler.dm @@ -6,8 +6,10 @@ GLOBAL_LIST_EMPTY(monkey_recyclers) icon = 'icons/obj/machines/kitchen.dmi' icon_state = "grinder" layer = BELOW_OBJ_LAYER + interaction_flags_mouse_drop = NEED_DEXTERITY density = TRUE circuit = /obj/item/circuitboard/machine/monkey_recycler + var/stored_matter = 0 var/cube_production = 0.2 var/list/connected = list() //Keeps track of connected xenobio consoles, for deletion in /Destroy() @@ -59,7 +61,7 @@ GLOBAL_LIST_EMPTY(monkey_recyclers) else return ..() -/obj/machinery/monkey_recycler/MouseDrop_T(mob/living/target, mob/living/user) +/obj/machinery/monkey_recycler/mouse_drop_receive(mob/living/target, mob/living/user, params) if(!istype(target)) return if(ismonkey(target)) diff --git a/code/modules/food_and_drinks/machinery/processor.dm b/code/modules/food_and_drinks/machinery/processor.dm index 4a60cdbc26592..78dd71df128d9 100644 --- a/code/modules/food_and_drinks/machinery/processor.dm +++ b/code/modules/food_and_drinks/machinery/processor.dm @@ -4,7 +4,8 @@ name = "food processor" desc = "An industrial grinder used to process meat and other foods. Keep hands clear of intake area while operating." icon = 'icons/obj/machines/kitchen.dmi' - icon_state = "processor1" + base_icon_state = "processor" + icon_state = "processor" layer = BELOW_OBJ_LAYER density = TRUE pass_flags = PASSTABLE @@ -91,7 +92,7 @@ if(processing) to_chat(user, span_warning("[src] is in the process of processing!")) return TRUE - if(default_deconstruction_screwdriver(user, "processor", "processor1", attacking_item) || default_pry_open(attacking_item, close_after_pry = TRUE) || default_deconstruction_crowbar(attacking_item)) + if(default_deconstruction_screwdriver(user, base_icon_state + "_open", base_icon_state, attacking_item) || default_pry_open(attacking_item, close_after_pry = TRUE) || default_deconstruction_crowbar(attacking_item)) return if(istype(attacking_item, /obj/item/storage/bag/tray)) @@ -157,7 +158,7 @@ total_time += recipe.time var/duration = (total_time / rating_speed) - INVOKE_ASYNC(src, TYPE_PROC_REF(/atom, Shake), 2, 2, duration, max(duration*0.02, 0.01)) //initial values work out to duration 4 seconds, interval 0.8 + INVOKE_ASYNC(src, TYPE_PROC_REF(/atom, Shake), 1, 0, duration) sleep(duration) for(var/atom/movable/content_item in processor_contents) var/datum/food_processor_process/recipe = PROCESSOR_SELECT_RECIPE(content_item) @@ -189,6 +190,8 @@ /obj/machinery/processor/slime name = "slime processor" + base_icon_state = "processor_slime" + icon_state = "processor_slime" desc = "An industrial grinder with a sticker saying appropriated for science department. Keep hands clear of intake area while operating." circuit = /obj/item/circuitboard/machine/processor/slime diff --git a/code/modules/food_and_drinks/machinery/smartfridge.dm b/code/modules/food_and_drinks/machinery/smartfridge.dm index de458bb218736..392d716965d6a 100644 --- a/code/modules/food_and_drinks/machinery/smartfridge.dm +++ b/code/modules/food_and_drinks/machinery/smartfridge.dm @@ -173,7 +173,7 @@ tool_tip_set = TRUE else if(held_item.tool_behaviour == TOOL_WRENCH) - context[SCREENTIP_CONTEXT_LMB] = "[anchored ? "Un" : ""]anchore" + context[SCREENTIP_CONTEXT_LMB] = "[anchored ? "Una" : "A"]nchor" tool_tip_set = TRUE return tool_tip_set ? CONTEXTUAL_SCREENTIP_SET : NONE @@ -302,6 +302,10 @@ to_chat(user, span_warning("There is nothing in [weapon] to put in [src]!")) return FALSE + if(!powered()) + to_chat(user, span_warning("\The [src]'s magnetic door won't open without power!")) + return FALSE + if(!user.combat_mode) to_chat(user, span_warning("\The [src] smartly refuses [weapon].")) return FALSE diff --git a/code/modules/food_and_drinks/machinery/stove_component.dm b/code/modules/food_and_drinks/machinery/stove_component.dm index 76a70f0f22ab2..fcbabafc2d12c 100644 --- a/code/modules/food_and_drinks/machinery/stove_component.dm +++ b/code/modules/food_and_drinks/machinery/stove_component.dm @@ -15,6 +15,9 @@ VAR_FINAL/obj/effect/abstract/particle_holder/soup_smoke /// Typepath of particles to use for the particle holder. VAR_FINAL/particle_type = /particles/smoke/steam/mild + /// Ref to our looping sound played when cooking + VAR_FINAL/datum/looping_sound/soup/soup_sound + /// The color of the flames around the burner. var/flame_color = "#006eff" /// Container's pixel x when placed on the stove @@ -36,6 +39,12 @@ spawn_container.forceMove(parent) add_container(spawn_container) + soup_sound = new(parent) + +/datum/component/stove/Destroy() + QDEL_NULL(soup_sound) + return ..() + /datum/component/stove/RegisterWithParent() RegisterSignal(parent, COMSIG_ATOM_ATTACKBY, PROC_REF(on_attackby)) RegisterSignal(parent, COMSIG_ATOM_ATTACK_HAND_SECONDARY, PROC_REF(on_attack_hand_secondary)) @@ -235,7 +244,7 @@ update_smoke_type() real_parent.update_appearance(UPDATE_OVERLAYS) -/datum/component/stove/proc/update_smoke_type(datum/source, new_temp, old_temp) +/datum/component/stove/proc/update_smoke_type(datum/source, ...) SIGNAL_HANDLER var/existing_temp = container?.reagents.chem_temp || 0 @@ -250,6 +259,7 @@ /datum/component/stove/proc/update_smoke() if(on && container?.reagents.total_volume > 0) + soup_sound.start() // Don't override existing particles, wasteful if(isnull(soup_smoke) || soup_smoke.particles.type != particle_type) QDEL_NULL(soup_smoke) @@ -257,7 +267,8 @@ return // this gets badly murdered by sidemap soup_smoke = new(parent, particle_type) - soup_smoke.set_particle_position(list(container_x, round(world.icon_size * 0.66), 0)) + soup_smoke.set_particle_position(container_x, round(world.icon_size * 0.66), 0) return QDEL_NULL(soup_smoke) + soup_sound?.stop() diff --git a/code/modules/food_and_drinks/pizzabox.dm b/code/modules/food_and_drinks/pizzabox.dm index a847b15e86161..417ac543612fd 100644 --- a/code/modules/food_and_drinks/pizzabox.dm +++ b/code/modules/food_and_drinks/pizzabox.dm @@ -228,7 +228,7 @@ return else if(bomb) balloon_alert(user, "already rigged!") - else if(istype(I, /obj/item/pen)) + else if(IS_WRITING_UTENSIL(I)) if(!open) if(!user.can_write(I)) return diff --git a/code/modules/food_and_drinks/plate.dm b/code/modules/food_and_drinks/plate.dm index 4ae6bf19e1d4c..add7eecaf92e0 100644 --- a/code/modules/food_and_drinks/plate.dm +++ b/code/modules/food_and_drinks/plate.dm @@ -121,6 +121,7 @@ icon = 'icons/obj/service/kitchen.dmi' icon_state = "plate_shard1" base_icon_state = "plate_shard" + hitsound = 'sound/weapons/bladeslice.ogg' w_class = WEIGHT_CLASS_TINY force = 5 throwforce = 5 @@ -131,6 +132,6 @@ /obj/item/plate_shard/Initialize(mapload) . = ..() - AddComponent(/datum/component/caltrop, min_damage = force) + AddComponent(/datum/component/caltrop, min_damage = force, paralyze_duration = 2 SECONDS, soundfile = hitsound) - icon_state = "[base_icon_state][pick(1,variants)]" + icon_state = "[base_icon_state][rand(1, variants)]" diff --git a/code/modules/food_and_drinks/recipes/food_mixtures.dm b/code/modules/food_and_drinks/recipes/food_mixtures.dm index 35c86bd48c437..c04edf6fee79d 100644 --- a/code/modules/food_and_drinks/recipes/food_mixtures.dm +++ b/code/modules/food_and_drinks/recipes/food_mixtures.dm @@ -264,7 +264,7 @@ required_reagents = list(/datum/reagent/consumable/olivepaste = 4, /datum/reagent/water = 1) reaction_flags = REACTION_INSTANT -/datum/chemical_reaction/food/vinegar +/datum/chemical_reaction/food/wine_vinegar results = list(/datum/reagent/consumable/vinegar = 5) required_reagents = list(/datum/reagent/consumable/ethanol/wine = 1, /datum/reagent/water = 1, /datum/reagent/consumable/sugar = 1) reaction_flags = REACTION_INSTANT @@ -282,7 +282,7 @@ mix_message = "A smooth batter forms." reaction_flags = REACTION_INSTANT -/datum/chemical_reaction/food/vinegar +/datum/chemical_reaction/food/grape_vinegar results = list(/datum/reagent/consumable/vinegar = 5) required_reagents = list(/datum/reagent/consumable/grapejuice = 5) required_catalysts = list(/datum/reagent/consumable/enzyme = 5) diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_bread.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_bread.dm index c05446d35218e..8f78cb01ebc23 100644 --- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_bread.dm +++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_bread.dm @@ -150,7 +150,7 @@ ) result = /obj/item/food/croissant/throwing category = CAT_BREAD - always_available = FALSE + crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_MUST_BE_LEARNED /datum/crafting_recipe/food/breaddog name = "Living dog/bread hybrid" diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_cake.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_cake.dm index b34cc5f36e965..4b56874eb7c6b 100644 --- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_cake.dm +++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_cake.dm @@ -184,7 +184,6 @@ /datum/crafting_recipe/food/clowncake name = "clown cake" - always_available = FALSE reqs = list( /obj/item/food/cake/plain = 1, /obj/item/food/sundae = 2, @@ -192,16 +191,17 @@ ) result = /obj/item/food/cake/clown_cake category = CAT_CAKE + crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_MUST_BE_LEARNED /datum/crafting_recipe/food/vanillacake name = "vanilla cake" - always_available = FALSE reqs = list( /obj/item/food/cake/plain = 1, /obj/item/food/grown/vanillapod = 2 ) result = /obj/item/food/cake/vanilla_cake category = CAT_CAKE + crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_MUST_BE_LEARNED /datum/crafting_recipe/food/trumpetcake name = "Spaceman's Cake" diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_misc.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_misc.dm index 67d1ca54c0028..cc27a6f078bef 100644 --- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_misc.dm +++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_misc.dm @@ -113,7 +113,7 @@ /obj/item/food/flatdough = 1, /datum/reagent/consumable/milk = 1, /datum/reagent/consumable/cherryjelly = 5, - /obj/item/stock_parts/cell/super =1, + /obj/item/stock_parts/power_store/cell/super =1, /obj/item/melee/sabre = 1 ) result = /obj/item/food/powercrepe diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_pie.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_pie.dm index a9f1ad23d8e26..a215ecdd750d3 100644 --- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_pie.dm +++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_pie.dm @@ -132,7 +132,6 @@ /datum/crafting_recipe/food/mimetart name = "Mime tart" - always_available = FALSE reqs = list( /datum/reagent/consumable/milk = 5, /datum/reagent/consumable/sugar = 5, @@ -141,10 +140,10 @@ ) result = /obj/item/food/pie/mimetart category = CAT_PIE + crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_MUST_BE_LEARNED /datum/crafting_recipe/food/berrytart name = "Berry tart" - always_available = FALSE reqs = list( /datum/reagent/consumable/milk = 5, /datum/reagent/consumable/sugar = 5, @@ -153,10 +152,10 @@ ) result = /obj/item/food/pie/berrytart category = CAT_PIE + crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_MUST_BE_LEARNED /datum/crafting_recipe/food/cocolavatart name = "Chocolate Lava tart" - always_available = FALSE reqs = list( /datum/reagent/consumable/milk = 5, /datum/reagent/consumable/sugar = 5, @@ -166,6 +165,7 @@ ) result = /obj/item/food/pie/cocolavatart category = CAT_PIE + crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_MUST_BE_LEARNED /datum/crafting_recipe/food/blumpkinpie name = "Blumpkin pie" @@ -241,7 +241,7 @@ /datum/crafting_recipe/food/bacid_pie reqs = list( /obj/item/food/pie/plain = 1, - /obj/item/stock_parts/cell = 2, + /obj/item/stock_parts/power_store/cell = 2, ) result = /obj/item/food/pie/bacid_pie category = CAT_PIE diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_pizza.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_pizza.dm index fd7ec3301637b..f67071a86f51e 100644 --- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_pizza.dm +++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_pizza.dm @@ -104,7 +104,7 @@ /datum/crafting_recipe/food/energypizza reqs = list( /obj/item/food/flatdough = 1, - /obj/item/stock_parts/cell = 2, + /obj/item/stock_parts/power_store/cell = 2, ) result = /obj/item/food/pizza/energy/raw category = CAT_PIZZA diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_sandwich.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_sandwich.dm index b0c44629e1853..742e8c1f3c89b 100644 --- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_sandwich.dm +++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_sandwich.dm @@ -10,6 +10,7 @@ name = "Sandwich" reqs = list( /obj/item/food/breadslice/plain = 2, + /obj/item/food/grown/cabbage = 1, /obj/item/food/meat/steak = 1, /obj/item/food/cheese/wedge = 1 ) @@ -118,7 +119,6 @@ /datum/crafting_recipe/food/death_sandwich name = "Death Sandwich" - always_available = FALSE reqs = list( /obj/item/food/breadslice/plain = 2, /obj/item/food/salami = 4, @@ -127,6 +127,7 @@ ) result = /obj/item/food/sandwich/death category = CAT_SANDWICH + crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_MUST_BE_LEARNED /datum/crafting_recipe/food/toast_sandwich name = "Toast Sandwich" diff --git a/code/modules/food_and_drinks/restaurant/customers/_customer.dm b/code/modules/food_and_drinks/restaurant/customers/_customer.dm index 47bb843d755c7..15e4659338d0c 100644 --- a/code/modules/food_and_drinks/restaurant/customers/_customer.dm +++ b/code/modules/food_and_drinks/restaurant/customers/_customer.dm @@ -306,7 +306,7 @@ /datum/customer_data/moth/proc/get_wings(mob/living/basic/robot_customer/customer) var/customer_ref = WEAKREF(customer) if (!LAZYACCESS(wings_chosen, customer_ref)) - LAZYSET(wings_chosen, customer_ref, GLOB.moth_wings_list[pick(GLOB.moth_wings_list)]) + LAZYSET(wings_chosen, customer_ref, SSaccessories.moth_wings_list[pick(SSaccessories.moth_wings_list)]) return wings_chosen[customer_ref] /datum/customer_data/moth/get_underlays(mob/living/basic/robot_customer/customer) diff --git a/code/modules/hallucination/fake_sound.dm b/code/modules/hallucination/fake_sound.dm index aaf8ef468230c..f5d750a114427 100644 --- a/code/modules/hallucination/fake_sound.dm +++ b/code/modules/hallucination/fake_sound.dm @@ -169,7 +169,7 @@ sound_type = list( 'sound/ambience/antag/bloodcult/bloodcult_gain.ogg', 'sound/ambience/antag/clockcultalr.ogg', - 'sound/ambience/antag/ecult_op.ogg', + 'sound/ambience/antag/heretic/heretic_gain.ogg', 'sound/ambience/antag/ling_alert.ogg', 'sound/ambience/antag/malf.ogg', 'sound/ambience/antag/ops.ogg', diff --git a/code/modules/hallucination/station_message.dm b/code/modules/hallucination/station_message.dm index 97b37e77cd9e2..976b88f662097 100644 --- a/code/modules/hallucination/station_message.dm +++ b/code/modules/hallucination/station_message.dm @@ -40,11 +40,26 @@ /// This is gross and will probably easily be outdated in some time but c'est la vie. /// Maybe if someone datumizes heretic paths or something this can be improved var/static/list/ascension_bodies = list( - "Fear the blaze, for the Ashlord, %FAKENAME% has ascended! The flames shall consume all!", - "Master of blades, the Torn Champion's disciple, %FAKENAME% has ascended! Their steel is that which will cut reality in a maelstom of silver!", - "Ever coiling vortex. Reality unfolded. ARMS OUTREACHED, THE LORD OF THE NIGHT, %FAKENAME% has ascended! Fear the ever twisting hand!", - "Fear the decay, for the Rustbringer, %FAKENAME% has ascended! None shall escape the corrosion!", - "The nobleman of void %FAKENAME% has arrived, stepping along the Waltz that ends worlds!", + list( + "text" = "Fear the blaze, for the Ashlord, %FAKENAME% has ascended! The flames shall consume all!", + "sound" = 'sound/ambience/antag/heretic/ascend_blade.ogg', + ), + list( + "text" = "Master of blades, the Torn Champion's disciple, %FAKENAME% has ascended! Their steel is that which will cut reality in a maelstom of silver!", + "sound" = 'sound/ambience/antag/heretic/ascend_blade.ogg', + ), + list( + "text" = "Ever coiling vortex. Reality unfolded. ARMS OUTREACHED, THE LORD OF THE NIGHT, %FAKENAME% has ascended! Fear the ever twisting hand!", + "sound" = 'sound/ambience/antag/heretic/ascend_flesh.ogg', + ), + list( + "text" = "Fear the decay, for the Rustbringer, %FAKENAME% has ascended! None shall escape the corrosion!", + "sound" = 'sound/ambience/antag/heretic/ascend_rust.ogg', + ), + list( + "text" = "The nobleman of void %FAKENAME% has arrived, stepping along the Waltz that ends worlds!", + "sound" = 'sound/ambience/antag/heretic/ascend_void.ogg', + ) ) /datum/hallucination/station_message/heretic/start() @@ -53,12 +68,12 @@ if(!totally_real_heretic) return FALSE - var/message_with_name = pick(ascension_bodies) - message_with_name = replacetext(message_with_name, "%FAKENAME%", totally_real_heretic.real_name) + var/list/fake_ascension = pick(ascension_bodies) + var/announcement_text = replacetext(fake_ascension["text"], "%FAKENAME%", totally_real_heretic.real_name) priority_announce( - text = "[generate_heretic_text()] [message_with_name] [generate_heretic_text()]", + text = "[generate_heretic_text()] [announcement_text] [generate_heretic_text()]", title = "[generate_heretic_text()]", - sound = ANNOUNCER_SPANOMALIES, + sound = fake_ascension["sound"], players = list(hallucinator), color_override = "pink", ) diff --git a/code/modules/holodeck/computer.dm b/code/modules/holodeck/computer.dm index 1ff5bc47a5518..b98d66f6bd2c7 100644 --- a/code/modules/holodeck/computer.dm +++ b/code/modules/holodeck/computer.dm @@ -293,6 +293,8 @@ GLOBAL_LIST_INIT(typecache_holodeck_linked_floorcheck_ok, typecacheof(list(/turf if(isstructure(holo_object)) holo_object.obj_flags |= NO_DEBRIS_AFTER_DECONSTRUCTION + if(istype(holo_object, /obj/structure/closet)) + RegisterSignal(holo_object, COMSIG_CLOSET_CONTENTS_INITIALIZED, PROC_REF(register_contents)) return if(ismachinery(holo_object)) @@ -304,6 +306,14 @@ GLOBAL_LIST_INIT(typecache_holodeck_linked_floorcheck_ok, typecacheof(list(/turf var/obj/machinery/button/holo_button = holo_machine holo_button.setup_device() +/obj/machinery/computer/holodeck/proc/register_contents(obj/structure/closet/storage) + SIGNAL_HANDLER + + for(var/atom/movable/item as anything in storage.get_all_contents_type(/atom/movable)) + if(item == storage) + continue + add_to_spawned(item) + /** * A separate proc for objects that weren't loaded by the template nor spawned by holo effects * yet need to be added to the list of spawned objects. (e.g. holographic fishes) @@ -369,7 +379,7 @@ GLOBAL_LIST_INIT(typecache_holodeck_linked_floorcheck_ok, typecacheof(list(/turf derez(item) for(var/obj/effect/holodeck_effect/holo_effect as anything in effects) holo_effect.tick() - update_mode_power_usage(ACTIVE_POWER_USE, active_power_usage + spawned.len * 3 + effects.len * 5) + update_mode_power_usage(ACTIVE_POWER_USE, initial(active_power_usage) + spawned.len * 3 + effects.len * 5) /obj/machinery/computer/holodeck/proc/toggle_power(toggleOn = FALSE) if(active == toggleOn) diff --git a/code/modules/holodeck/turfs.dm b/code/modules/holodeck/turfs.dm index 51e09f8ab9a2c..0eb05fcdc3049 100644 --- a/code/modules/holodeck/turfs.dm +++ b/code/modules/holodeck/turfs.dm @@ -11,6 +11,9 @@ /turf/open/floor/holofloor/item_interaction(mob/living/user, obj/item/tool, list/modifiers) return ITEM_INTERACT_BLOCKING // Fuck you +/turf/open/floor/holofloor/crowbar_act(mob/living/user, obj/item/I) + return NONE // Fuck you + /turf/open/floor/holofloor/burn_tile() return //you can't burn a hologram! @@ -161,7 +164,7 @@ /turf/open/floor/holofloor/carpet/update_icon(updates=ALL) . = ..() - if((updates & UPDATE_SMOOTHING) && overfloor_placed && smoothing_flags & (SMOOTH_CORNERS|SMOOTH_BITMASK)) + if((updates & UPDATE_SMOOTHING) && overfloor_placed && smoothing_flags & USES_SMOOTHING) QUEUE_SMOOTH(src) /turf/open/floor/holofloor/wood diff --git a/code/modules/hydroponics/beekeeping/bee_smoker.dm b/code/modules/hydroponics/beekeeping/bee_smoker.dm index fc296339a9f74..91195dacc84d7 100644 --- a/code/modules/hydroponics/beekeeping/bee_smoker.dm +++ b/code/modules/hydroponics/beekeeping/bee_smoker.dm @@ -36,40 +36,33 @@ user.balloon_alert(user, "[activated ? "activated" : "deactivated"]") return TRUE -/obj/item/bee_smoker/afterattack(atom/attacked_atom, mob/living/user, proximity) - . = ..() - - if(!proximity) - return - - . |= AFTERATTACK_PROCESSED_ITEM - +/obj/item/bee_smoker/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) if(!activated) user.balloon_alert(user, "not activated!") - return + return ITEM_INTERACT_BLOCKING if(current_herb_fuel < single_use_cost) user.balloon_alert(user, "not enough fuel!") - return + return ITEM_INTERACT_BLOCKING current_herb_fuel -= single_use_cost playsound(src, 'sound/effects/spray2.ogg', 100, TRUE) - var/turf/target_turf = get_turf(attacked_atom) + var/turf/target_turf = get_turf(interacting_with) new /obj/effect/temp_visual/mook_dust(target_turf) - for(var/mob/living/basic/bee/friend in target_turf) if(friend.flags_1 & HOLOGRAM_1) continue friend.befriend(user) - if(!istype(attacked_atom, /obj/structure/beebox)) - return + if(!istype(interacting_with, /obj/structure/beebox)) + return ITEM_INTERACT_BLOCKING - var/obj/structure/beebox/hive = attacked_atom + var/obj/structure/beebox/hive = interacting_with for(var/mob/living/bee as anything in hive.bees) if(bee.flags_1 & HOLOGRAM_1) continue bee.befriend(user) + return ITEM_INTERACT_SUCCESS /obj/item/bee_smoker/attackby(obj/item/herb, mob/living/carbon/human/user, list/modifiers) . = ..() diff --git a/code/modules/hydroponics/fermenting_barrel.dm b/code/modules/hydroponics/fermenting_barrel.dm index 676c0cec7bbc6..49b7056c9e7e8 100644 --- a/code/modules/hydroponics/fermenting_barrel.dm +++ b/code/modules/hydroponics/fermenting_barrel.dm @@ -10,7 +10,9 @@ anchored = FALSE pressure_resistance = 2 * ONE_ATMOSPHERE max_integrity = 300 + /// Is the barrel currently opened? var/open = FALSE + /// Can the barrel be opened? var/can_open = TRUE /// The amount of reagents that can be created from the contained products, used for validation var/potential_volume = 0 @@ -20,7 +22,9 @@ var/sound_volume = 25 /// The sound of fermentation var/datum/looping_sound/boiling/soundloop + /// Sound played when the lid is opened. var/lid_open_sound = 'sound/items/handling/cardboardbox_pickup.ogg' + /// Sound played when the lid is closed. var/lid_close_sound = 'sound/effects/footstep/woodclaw2.ogg' /obj/structure/fermenting_barrel/Initialize(mapload) @@ -28,6 +32,7 @@ create_reagents(600, DRAINABLE) soundloop = new(src, fermenting) soundloop.volume = sound_volume + register_context() RegisterSignals(src, list( SIGNAL_ADDTRAIT(TRAIT_WAS_RENAMED), @@ -46,6 +51,7 @@ var/fruit_count = contents.len if(fruit_count) . += span_notice("It contains [fruit_count] fruit\s ready to be fermented.") + . += span_notice("[EXAMINE_HINT("Right-click")] to take them out of [src].") . += span_notice("It is currently open, letting you fill it with fruits or reagents.") else . += span_notice("It is currently closed, letting it ferment fruits or draw reagents from its tap.") @@ -85,6 +91,26 @@ stop_fermentation() update_appearance(UPDATE_ICON) +/obj/structure/fermenting_barrel/attack_hand_secondary(mob/user, list/modifiers) + . = ..() + if(. == SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN) + return . + + if(!open) + return . + + if(!length(contents)) + balloon_alert(user, "empty!") + return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN + + dump_contents() + balloon_alert(user, "emptied [src]") + return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN + +/obj/structure/fermenting_barrel/wrench_act(mob/living/user, obj/item/tool) + if(default_unfasten_wrench(user, tool) == SUCCESSFUL_UNFASTEN) + return ITEM_INTERACT_SUCCESS + /obj/structure/fermenting_barrel/update_icon_state() icon_state = open ? "barrel_open" : "barrel" return ..() @@ -98,6 +124,28 @@ if(HAS_TRAIT(src, TRAIT_WAS_RENAMED) || HAS_TRAIT(src, TRAIT_HAS_LABEL)) . += mutable_appearance(icon, "[base_icon_state]_overlay_label") +/obj/structure/fermenting_barrel/add_context(atom/source, list/context, obj/item/held_item, mob/living/user) + if(isnull(held_item)) + context[SCREENTIP_CONTEXT_LMB] = open ? "Close" : "Open" + + if(open && length(contents)) + context[SCREENTIP_CONTEXT_RMB] = "Empty" + + return CONTEXTUAL_SCREENTIP_SET + + if(held_item.tool_behaviour == TOOL_WRENCH) + context[SCREENTIP_CONTEXT_LMB] = anchored ? "Unanchor" : "Anchor" + + else if(open && (istype(held_item, /obj/item/food/grown) || istype(held_item, /obj/item/storage/bag/plants))) + context[SCREENTIP_CONTEXT_LMB] = "Add to barrel" + + return CONTEXTUAL_SCREENTIP_SET + +/obj/structure/fermenting_barrel/dump_contents() + var/atom/drop_point = drop_location() + for(var/obj/item/food/grown/fruit as anything in contents) + fruit.forceMove(drop_point) + /// Adds the fruit to the barrel to queue the fermentation /obj/structure/fermenting_barrel/proc/insert_fruit(mob/user, obj/item/food/grown/fruit, obj/item/storage/bag/plants/bag = null) if(reagents.total_volume + potential_volume > reagents.maximum_volume) diff --git a/code/modules/hydroponics/grown.dm b/code/modules/hydroponics/grown.dm index abc2c5b3bf88a..6edbfd382f964 100644 --- a/code/modules/hydroponics/grown.dm +++ b/code/modules/hydroponics/grown.dm @@ -118,7 +118,7 @@ var/quality_max = DRINK_FANTASTIC var/quality = round(LERP(quality_min, quality_max, purity_above_base)) for(var/datum/reagent/reagent in reagents.reagent_list) - if(!istype(reagent, /datum/reagent/consumable)) + if(reagent.type != /datum/reagent/consumable/nutriment && reagent.type != /datum/reagent/consumable/nutriment/vitamin) continue if(distill_reagent) var/data = list() diff --git a/code/modules/hydroponics/grown/banana.dm b/code/modules/hydroponics/grown/banana.dm index 3b7ddbbd83c4a..ab38f6889907a 100644 --- a/code/modules/hydroponics/grown/banana.dm +++ b/code/modules/hydroponics/grown/banana.dm @@ -35,8 +35,7 @@ /obj/item/food/grown/banana/Initialize(mapload) . = ..() if(prob(1)) - AddComponent(/datum/component/boomerang, boomerang_throw_range = throw_range + 4, thrower_easy_catch_enabled = TRUE) - desc += " The curve on this one looks particularly acute." + AddComponent(/datum/component/boomerang, boomerang_throw_range = throw_range + 4, thrower_easy_catch_enabled = TRUE, examine_message = span_green("The curve on this one looks particularly acute.")) ///Clowns will always like bananas. /obj/item/food/grown/banana/proc/check_liked(mob/living/carbon/human/consumer) diff --git a/code/modules/hydroponics/grown/berries.dm b/code/modules/hydroponics/grown/berries.dm index 233765609200f..317f8ef2ed87f 100644 --- a/code/modules/hydroponics/grown/berries.dm +++ b/code/modules/hydroponics/grown/berries.dm @@ -208,7 +208,7 @@ icon_harvest = "lanternfruit-harvest" genes = list(/datum/plant_gene/trait/glow/yellow) mutatelist = null - reagents_add = list(/datum/reagent/sulfur = 0.07, /datum/reagent/consumable/sugar = 0.07, /datum/reagent/consumable/liquidelectricity = 0.07) + reagents_add = list(/datum/reagent/consumable/nutriment = 0.07, /datum/reagent/sulfur = 0.07, /datum/reagent/consumable/sugar = 0.07, /datum/reagent/consumable/liquidelectricity = 0.07) graft_gene = /datum/plant_gene/trait/glow/yellow /obj/item/food/grown/lanternfruit diff --git a/code/modules/hydroponics/grown/corn.dm b/code/modules/hydroponics/grown/corn.dm index 8eab962d75118..d5f9f94e1b2df 100644 --- a/code/modules/hydroponics/grown/corn.dm +++ b/code/modules/hydroponics/grown/corn.dm @@ -50,7 +50,7 @@ /obj/item/grown/corncob/attackby(obj/item/grown/W, mob/user, params) if(W.get_sharpness()) to_chat(user, span_notice("You use [W] to fashion a pipe out of the corn cob!")) - new /obj/item/clothing/mask/cigarette/pipe/cobpipe (user.loc) + new /obj/item/cigarette/pipe/cobpipe (user.loc) qdel(src) else return ..() diff --git a/code/modules/hydroponics/grown/cotton.dm b/code/modules/hydroponics/grown/cotton.dm index 9636edff66b3e..819d97f321f8d 100644 --- a/code/modules/hydroponics/grown/cotton.dm +++ b/code/modules/hydroponics/grown/cotton.dm @@ -34,27 +34,15 @@ var/cotton_name = "raw cotton" /obj/item/grown/cotton/attack_self(mob/user) - user.show_message(span_notice("You pull some [cotton_name] out of the [name]!"), MSG_VISUAL) - var/seed_modifier = 0 + var/cotton_count = 1 if(seed) - seed_modifier = round(seed.potency / 25) - var/obj/item/stack/cotton = new cotton_type(user.loc, 1 + seed_modifier) - var/old_cotton_amount = cotton.amount - for(var/obj/item/stack/potential_stack in user.loc) - if(QDELETED(potential_stack)) - continue - if(potential_stack == cotton) - continue - if(!istype(potential_stack, cotton_type)) - continue - if(potential_stack.amount >= potential_stack.max_amount) - continue - potential_stack.attackby(cotton, user) + cotton_count += round(seed.potency / 25) - if(cotton.amount > old_cotton_amount) - to_chat(user, span_notice("You add the newly-formed [cotton_name] to the stack. It now contains [cotton.amount] [cotton_name].")) + user.balloon_alert(user, "pulled [cotton_count] piece\s") + new cotton_type(user.drop_location(), cotton_count) qdel(src) + //reinforced mutated variant /obj/item/seeds/cotton/durathread name = "pack of durathread seeds" diff --git a/code/modules/hydroponics/grown/replicapod.dm b/code/modules/hydroponics/grown/replicapod.dm index c4e3b27673ae4..31c0b7f81df64 100644 --- a/code/modules/hydroponics/grown/replicapod.dm +++ b/code/modules/hydroponics/grown/replicapod.dm @@ -197,7 +197,7 @@ if(!features["mcolor"]) features["mcolor"] = "#59CE00" if(!features["pod_hair"]) - features["pod_hair"] = pick(GLOB.pod_hair_list) + features["pod_hair"] = pick(SSaccessories.pod_hair_list) for(var/V in quirks) new V(podman) diff --git a/code/modules/hydroponics/grown/root.dm b/code/modules/hydroponics/grown/root.dm index da2bb3f5d68f0..c272b1e448462 100644 --- a/code/modules/hydroponics/grown/root.dm +++ b/code/modules/hydroponics/grown/root.dm @@ -13,7 +13,7 @@ growthstages = 3 growing_icon = 'icons/obj/service/hydroponics/growing_vegetables.dmi' mutatelist = list(/obj/item/seeds/carrot/parsnip) - reagents_add = list(/datum/reagent/medicine/oculine = 0.25, /datum/reagent/consumable/nutriment/vitamin = 0.04, /datum/reagent/consumable/nutriment = 0.05) + reagents_add = list(/datum/reagent/medicine/oculine = 0.1, /datum/reagent/consumable/nutriment/vitamin = 0.04, /datum/reagent/consumable/nutriment = 0.05) /obj/item/food/grown/carrot seed = /obj/item/seeds/carrot diff --git a/code/modules/hydroponics/grown/sugarcane.dm b/code/modules/hydroponics/grown/sugarcane.dm index be2214ca1d048..1c5c55fece08d 100644 --- a/code/modules/hydroponics/grown/sugarcane.dm +++ b/code/modules/hydroponics/grown/sugarcane.dm @@ -14,7 +14,7 @@ yield = 4 instability = 15 growthstages = 2 - reagents_add = list(/datum/reagent/consumable/nutriment = 0.04, /datum/reagent/consumable/sugar = 0.25) + reagents_add = list(/datum/reagent/consumable/nutriment = 0.1, /datum/reagent/consumable/sugar = 0.25) mutatelist = list(/obj/item/seeds/bamboo, /obj/item/seeds/sugarcane/saltcane) /obj/item/food/grown/sugarcane @@ -66,7 +66,7 @@ plantname = "Saltcane" product = /obj/item/food/grown/sugarcane/saltcane genes = list(/datum/plant_gene/trait/repeated_harvest) - reagents_add = list(/datum/reagent/consumable/nutriment = 0.04, /datum/reagent/consumable/salt = 0.25) + reagents_add = list(/datum/reagent/consumable/nutriment = 0.1, /datum/reagent/consumable/salt = 0.25) mutatelist = null /obj/item/food/grown/sugarcane/saltcane diff --git a/code/modules/hydroponics/grown/towercap.dm b/code/modules/hydroponics/grown/towercap.dm index 1b95c69b7ae34..1082b51665ff7 100644 --- a/code/modules/hydroponics/grown/towercap.dm +++ b/code/modules/hydroponics/grown/towercap.dm @@ -78,33 +78,29 @@ return NONE -/obj/item/grown/log/attackby(obj/item/W, mob/user, params) - if(W.get_sharpness()) - user.show_message(span_notice("You make [plank_name] out of \the [src]!"), MSG_VISUAL) - var/seed_modifier = 0 +/obj/item/grown/log/attackby(obj/item/attacking_item, mob/user, params) + if(attacking_item.get_sharpness()) + var/plank_count = 1 if(seed) - seed_modifier = round(seed.potency / 25) - var/obj/item/stack/plank = new plank_type(user.loc, 1 + seed_modifier, FALSE) - var/old_plank_amount = plank.amount - for (var/obj/item/stack/ST in user.loc) - if (ST != plank && istype(ST, plank_type) && ST.amount < ST.max_amount) - ST.attackby(plank, user) //we try to transfer all old unfinished stacks to the new stack we created. - if (plank.amount > old_plank_amount) - to_chat(user, span_notice("You add the newly-formed [plank_name] to the stack. It now contains [plank.amount] [plank_name].")) + plank_count += round(seed.potency / 25) + + user.balloon_alert(user, "made [plank_count] [plank_name]") + new plank_type(user.loc, plank_count) qdel(src) + return - if(CheckAccepted(W)) - var/obj/item/food/grown/leaf = W + if(CheckAccepted(attacking_item)) + var/obj/item/food/grown/leaf = attacking_item if(HAS_TRAIT(leaf, TRAIT_DRIED)) - user.show_message(span_notice("You wrap \the [W] around the log, turning it into a torch!")) - var/obj/item/flashlight/flare/torch/T = new /obj/item/flashlight/flare/torch(user.loc) - usr.dropItemToGround(W) - usr.put_in_active_hand(T) + user.balloon_alert(user, "torch crafted") + var/obj/item/flashlight/flare/torch/new_torch = new /obj/item/flashlight/flare/torch(user.loc) + user.dropItemToGround(attacking_item) + user.put_in_active_hand(new_torch) qdel(leaf) qdel(src) return else - to_chat(usr, span_warning("You must dry this first!")) + balloon_alert(user, "dry it first!") else return ..() diff --git a/code/modules/hydroponics/hydroponics.dm b/code/modules/hydroponics/hydroponics.dm index 9b23f0b25b0f3..791b7ac51a253 100644 --- a/code/modules/hydroponics/hydroponics.dm +++ b/code/modules/hydroponics/hydroponics.dm @@ -9,6 +9,7 @@ pixel_z = 8 obj_flags = CAN_BE_HIT | UNIQUE_RENAME circuit = /obj/item/circuitboard/machine/hydroponics + interaction_flags_click = FORBID_TELEKINESIS_REACH use_power = NO_POWER_USE ///The amount of water in the tray (max 100) var/waterlevel = 0 @@ -1086,19 +1087,16 @@ if(user) user.examinate(src) -/obj/machinery/hydroponics/CtrlClick(mob/user) - . = ..() - if(!user.can_perform_action(src, FORBID_TELEKINESIS_REACH)) - return +/obj/machinery/hydroponics/click_ctrl(mob/user) + if(!anchored) + return NONE if(!powered()) to_chat(user, span_warning("[name] has no power.")) update_use_power(NO_POWER_USE) - return - if(!anchored) - return + return CLICK_ACTION_BLOCKING set_self_sustaining(!self_sustaining) to_chat(user, span_notice("You [self_sustaining ? "activate" : "deactivated"] [src]'s autogrow function[self_sustaining ? ", maintaining the tray's health while using high amounts of power" : ""].")) - + return CLICK_ACTION_SUCCESS /obj/machinery/hydroponics/attack_hand_secondary(mob/user, list/modifiers) . = ..() @@ -1184,8 +1182,8 @@ deconstruct(disassembled = TRUE) return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN -/obj/machinery/hydroponics/soil/CtrlClick(mob/user) - return //Soil has no electricity. +/obj/machinery/hydroponics/soil/click_ctrl(mob/user) + return CLICK_ACTION_BLOCKING //Soil has no electricity. /obj/machinery/hydroponics/soil/on_deconstruction(disassembled) new /obj/item/stack/ore/glass(drop_location(), 3) diff --git a/code/modules/hydroponics/plant_genes.dm b/code/modules/hydroponics/plant_genes.dm index b273cfb6d5854..c5861140e4e56 100644 --- a/code/modules/hydroponics/plant_genes.dm +++ b/code/modules/hydroponics/plant_genes.dm @@ -330,7 +330,7 @@ to_chat(eater, span_notice("You feel energized as you bite into [our_plant].")) var/batteries_recharged = FALSE var/obj/item/seeds/our_seed = our_plant.get_plant_seed() - for(var/obj/item/stock_parts/cell/found_cell in eater.get_all_contents()) + for(var/obj/item/stock_parts/power_store/found_cell in eater.get_all_contents()) var/newcharge = min(our_seed.potency * 0.01 * found_cell.maxcharge, found_cell.maxcharge) if(found_cell.charge < newcharge) found_cell.charge = newcharge @@ -586,7 +586,7 @@ return to_chat(user, span_notice("You add some cable to [our_plant] and slide it inside the battery encasing.")) - var/obj/item/stock_parts/cell/potato/pocell = new /obj/item/stock_parts/cell/potato(user.loc) + var/obj/item/stock_parts/power_store/cell/potato/pocell = new /obj/item/stock_parts/power_store/cell/potato(user.loc) pocell.icon = our_plant.icon // Just in case the plant icons get spread out in different files eventually, this trait won't cause error sprites (also yay downstreams) pocell.icon_state = our_plant.icon_state pocell.maxcharge = our_seed.potency * 0.02 * STANDARD_CELL_CHARGE diff --git a/code/modules/hydroponics/seeds.dm b/code/modules/hydroponics/seeds.dm index f46f4c3912a0f..fefd4d999387f 100644 --- a/code/modules/hydroponics/seeds.dm +++ b/code/modules/hydroponics/seeds.dm @@ -462,7 +462,7 @@ return /obj/item/seeds/attackby(obj/item/O, mob/user, params) - if(istype(O, /obj/item/pen)) + if(IS_WRITING_UTENSIL(O)) var/choice = tgui_input_list(usr, "What would you like to change?", "Seed Alteration", list("Plant Name", "Seed Description", "Product Description")) if(isnull(choice)) return diff --git a/code/modules/hydroponics/unique_plant_genes.dm b/code/modules/hydroponics/unique_plant_genes.dm index 99c877cdfbe4d..c3855ff6939e8 100644 --- a/code/modules/hydroponics/unique_plant_genes.dm +++ b/code/modules/hydroponics/unique_plant_genes.dm @@ -76,24 +76,9 @@ return /// Signal proc for [COMSIG_ITEM_AFTERATTACK] that allows for effects after an attack is done -/datum/plant_gene/trait/attack/proc/after_plant_attack(obj/item/source, atom/target, mob/user, proximity_flag, click_parameters) +/datum/plant_gene/trait/attack/proc/after_plant_attack(obj/item/source, atom/target, mob/user, click_parameters) SIGNAL_HANDLER - - if(!proximity_flag) - return - - if(!ismovable(target)) - return - - . |= COMPONENT_AFTERATTACK_PROCESSED_ITEM - - if(isobj(target)) - var/obj/object_target = target - if(!(object_target.obj_flags & CAN_BE_HIT)) - return . - INVOKE_ASYNC(src, PROC_REF(after_attack_effect), source, target, user) - return . /* * Effects done when we hit people with our plant, AFTER the attack is done. diff --git a/code/modules/jobs/access.dm b/code/modules/jobs/access.dm index 2055080710e4e..b31574bec33e3 100644 --- a/code/modules/jobs/access.dm +++ b/code/modules/jobs/access.dm @@ -19,6 +19,12 @@ if(isAdminGhostAI(accessor)) //Access can't stop the abuse return TRUE + //If the mob has the simple_access component with the requried access, we let them in. + var/attempted_access = SEND_SIGNAL(accessor, COMSIG_MOB_TRIED_ACCESS, src) + if(attempted_access & ACCESS_ALLOWED) + return TRUE + if(attempted_access & ACCESS_DISALLOWED) + return FALSE if(HAS_SILICON_ACCESS(accessor)) if(ispAI(accessor)) return FALSE @@ -28,9 +34,6 @@ if(onSyndieBase() && loc != accessor) return FALSE return TRUE //AI can do whatever it wants - //If the mob has the simple_access component with the requried access, we let them in. - else if(SEND_SIGNAL(accessor, COMSIG_MOB_TRIED_ACCESS, src) & ACCESS_ALLOWED) - return TRUE //If the mob is holding a valid ID, we let them in. get_active_held_item() is on the mob level, so no need to copypasta everywhere. else if(check_access(accessor.get_active_held_item()) || check_access(accessor.get_inactive_held_item())) return TRUE diff --git a/code/modules/jobs/departments/departments.dm b/code/modules/jobs/departments/departments.dm index ce21920eced01..c87e1dc31c5e4 100644 --- a/code/modules/jobs/departments/departments.dm +++ b/code/modules/jobs/departments/departments.dm @@ -28,15 +28,6 @@ /// A list of generic access flags people in this department generally have. var/list/department_access = list() -/datum/job_department/New() - . = ..() - for(var/delivery_area_type in department_delivery_areas) - if(GLOB.areas_by_type[delivery_area_type]) - return - //every area fallback didn't exist on this map so throw a mapping error and set some generic area that uuuh please exist okay - log_mapping("[type] has no valid areas to deliver to on this map, add some more fallback areas to its \"department_delivery_areas\" var.") - department_delivery_areas = list(/area/station/hallway/primary/central) //if this doesn't exist like honestly fuck your map man - /// Handles adding jobs to the department and setting up the job bitflags. /datum/job_department/proc/add_job(datum/job/job) department_jobs += job @@ -111,7 +102,10 @@ label_class = "engineering" ui_color = "#dfb567" nation_prefixes = list("Atomo", "Engino", "Power", "Teleco") - department_delivery_areas = list(/area/station/engineering/main) + department_delivery_areas = list( + /area/station/engineering/main, + /area/station/engineering/lobby, + ) associated_cargo_groups = list("Engineering", "Engine Construction", "Canisters & Materials") head_of_staff_access = ACCESS_CE department_access = REGION_ACCESS_ENGINEERING @@ -144,7 +138,11 @@ label_class = "science" ui_color = "#c973c9" nation_prefixes = list("Sci", "Griffa", "Geneti", "Explosi", "Mecha", "Xeno", "Nani", "Cyto") - department_delivery_areas = list(/area/station/science/research) + department_delivery_areas = list( + /area/station/science/research, + /area/station/science/lobby, + /area/station/science/lab, + ) associated_cargo_groups = list("Science", "Livestock", "Canisters & Materials") head_of_staff_access = ACCESS_RD department_access = REGION_ACCESS_RESEARCH diff --git a/code/modules/jobs/job_types/_job.dm b/code/modules/jobs/job_types/_job.dm index 6c5c2f4f03967..dd0a8dcd47c15 100644 --- a/code/modules/jobs/job_types/_job.dm +++ b/code/modules/jobs/job_types/_job.dm @@ -117,7 +117,7 @@ /// RPG job names, for the memes var/rpg_title - /// Alternate titles to register as pointing to this job. + /// Alternate titles to register as pointing to this job. var/list/alternate_titles /// Does this job ignore human authority? @@ -173,7 +173,7 @@ spawned_human.mind.adjust_experience(i, roundstart_experience[i], TRUE) /// Return the outfit to use -/datum/job/proc/get_outfit() +/datum/job/proc/get_outfit(consistent) return outfit /// Announce that this job as joined the round to all crew members. @@ -188,12 +188,12 @@ return TRUE -/mob/living/proc/on_job_equipping(datum/job/equipping) +/mob/living/proc/on_job_equipping(datum/job/equipping, client/player_client) return #define VERY_LATE_ARRIVAL_TOAST_PROB 20 -/mob/living/carbon/human/on_job_equipping(datum/job/equipping) +/mob/living/carbon/human/on_job_equipping(datum/job/equipping, client/player_client) if(equipping.paycheck_department) var/datum/bank_account/bank_account = new(real_name, equipping, dna.species.payday_modifier) bank_account.payday(STARTING_PAYCHECKS, TRUE) @@ -201,19 +201,24 @@ bank_account.replaceable = FALSE add_mob_memory(/datum/memory/key/account, remembered_id = account_id) - dress_up_as_job(equipping) + dress_up_as_job( + equipping = equipping, + visual_only = FALSE, + player_client = player_client, + consistent = FALSE, + ) if(EMERGENCY_PAST_POINT_OF_NO_RETURN && prob(VERY_LATE_ARRIVAL_TOAST_PROB)) equip_to_slot_or_del(new /obj/item/food/griddle_toast(src), ITEM_SLOT_MASK) #undef VERY_LATE_ARRIVAL_TOAST_PROB -/mob/living/proc/dress_up_as_job(datum/job/equipping, visual_only = FALSE) +/mob/living/proc/dress_up_as_job(datum/job/equipping, visual_only = FALSE, client/player_client, consistent = FALSE) return -/mob/living/carbon/human/dress_up_as_job(datum/job/equipping, visual_only = FALSE) +/mob/living/carbon/human/dress_up_as_job(datum/job/equipping, visual_only = FALSE, client/player_client, consistent = FALSE) dna.species.pre_equip_species_outfit(equipping, src, visual_only) - equipOutfit(equipping.get_outfit(), visual_only) + equip_outfit_and_loadout(equipping.get_outfit(consistent), player_client?.prefs, visual_only) /datum/job/proc/announce_head(mob/living/carbon/human/H, channels) //tells the given channel that the given mob is the new department head. See communications.dm for valid channels. if(H && GLOB.announcement_systems.len) @@ -543,13 +548,13 @@ dna.species.roundstart_changed = TRUE apply_pref_name(/datum/preference/name/backup_human, player_client) if(CONFIG_GET(flag/force_random_names)) - var/species_type = player_client.prefs.read_preference(/datum/preference/choiced/species) - var/datum/species/species = new species_type - - var/gender = player_client.prefs.read_preference(/datum/preference/choiced/gender) - real_name = species.random_name(gender, TRUE) + real_name = generate_random_name_species_based( + player_client.prefs.read_preference(/datum/preference/choiced/gender), + TRUE, + player_client.prefs.read_preference(/datum/preference/choiced/species), + ) dna.update_dna_identity() - + updateappearance() /mob/living/silicon/ai/apply_prefs_job(client/player_client, datum/job/job) if(GLOB.current_anonymous_theme) @@ -569,9 +574,11 @@ if(!player_client) return // Disconnected while checking the appearance ban. - var/species_type = player_client.prefs.read_preference(/datum/preference/choiced/species) - var/datum/species/species = new species_type - organic_name = species.random_name(player_client.prefs.read_preference(/datum/preference/choiced/gender), TRUE) + organic_name = generate_random_name_species_based( + player_client.prefs.read_preference(/datum/preference/choiced/gender), + TRUE, + player_client.prefs.read_preference(/datum/preference/choiced/species), + ) else if(!player_client) return // Disconnected while checking the appearance ban. diff --git a/code/modules/jobs/job_types/antagonists/sentient_disease.dm b/code/modules/jobs/job_types/antagonists/sentient_disease.dm deleted file mode 100644 index 4c91ae4ffa101..0000000000000 --- a/code/modules/jobs/job_types/antagonists/sentient_disease.dm +++ /dev/null @@ -1,2 +0,0 @@ -/datum/job/sentient_disease - title = ROLE_SENTIENT_DISEASE diff --git a/code/modules/jobs/job_types/assistant/assistant.dm b/code/modules/jobs/job_types/assistant/assistant.dm index c97c987cb5838..2732d5e21ca9c 100644 --- a/code/modules/jobs/job_types/assistant/assistant.dm +++ b/code/modules/jobs/job_types/assistant/assistant.dm @@ -37,7 +37,9 @@ Assistant rpg_title = "Lout" config_tag = "ASSISTANT" -/datum/job/assistant/get_outfit() +/datum/job/assistant/get_outfit(consistent) + if(consistent) + return /datum/outfit/job/assistant/consistent if(!HAS_TRAIT(SSstation, STATION_TRAIT_ASSISTANT_GIMMICKS)) return ..() diff --git a/code/modules/jobs/job_types/assistant/gimmick_assistants.dm b/code/modules/jobs/job_types/assistant/gimmick_assistants.dm index 7c2ac4a2df2b2..ed2851366153c 100644 --- a/code/modules/jobs/job_types/assistant/gimmick_assistants.dm +++ b/code/modules/jobs/job_types/assistant/gimmick_assistants.dm @@ -111,6 +111,7 @@ continue var/obj/structure/mop_bucket/bucket = new /obj/structure/mop_bucket(turf) equipped.start_pulling(bucket) + break /datum/outfit/job/assistant/gimmick/broomer name = "Gimmick Assistant - Broomer" diff --git a/code/modules/jobs/job_types/captain.dm b/code/modules/jobs/job_types/captain.dm index 13e358bdcd528..5b82c9adb7116 100644 --- a/code/modules/jobs/job_types/captain.dm +++ b/code/modules/jobs/job_types/captain.dm @@ -35,7 +35,7 @@ family_heirlooms = list(/obj/item/reagent_containers/cup/glass/flask/gold, /obj/item/toy/captainsaid/collector) mail_goodies = list( - /obj/item/clothing/mask/cigarette/cigar/havana = 20, + /obj/item/cigarette/cigar/havana = 20, /obj/item/storage/fancy/cigarettes/cigars/havana = 15, /obj/item/reagent_containers/cup/glass/bottle/champagne = 5, /obj/item/reagent_containers/cup/glass/bottle/champagne/cursed = 5, diff --git a/code/modules/jobs/job_types/cargo_technician.dm b/code/modules/jobs/job_types/cargo_technician.dm index dd269bc7e3736..008ddd6df0db5 100644 --- a/code/modules/jobs/job_types/cargo_technician.dm +++ b/code/modules/jobs/job_types/cargo_technician.dm @@ -54,3 +54,4 @@ name = "Cargo Technician (MODsuit)" back = /obj/item/mod/control/pre_equipped/loader + suit = null diff --git a/code/modules/jobs/job_types/chaplain/chaplain_nullrod.dm b/code/modules/jobs/job_types/chaplain/chaplain_nullrod.dm index 0a037482bc1fd..f204518acc53b 100644 --- a/code/modules/jobs/job_types/chaplain/chaplain_nullrod.dm +++ b/code/modules/jobs/job_types/chaplain/chaplain_nullrod.dm @@ -89,55 +89,8 @@ . += span_cult_italic("It has the blood of [num_slain] fallen cultist[num_slain == 1 ? "" : "s"] on it. \ Offering it to Nar'sie will transform it into a [num_slain >= 3 ? "powerful" : "standard"] cult weapon.") -/obj/item/nullrod/godhand - name = "god hand" - desc = "This hand of yours glows with an awesome power!" - icon = 'icons/obj/weapons/hand.dmi' - icon_state = "disintegrate" - inhand_icon_state = "disintegrate" - lefthand_file = 'icons/mob/inhands/items/touchspell_lefthand.dmi' - righthand_file = 'icons/mob/inhands/items/touchspell_righthand.dmi' - slot_flags = null - item_flags = ABSTRACT | DROPDEL - w_class = WEIGHT_CLASS_HUGE - hitsound = 'sound/weapons/sear.ogg' - damtype = BURN - attack_verb_continuous = list("punches", "cross counters", "pummels") - attack_verb_simple = list(SFX_PUNCH, "cross counter", "pummel") - menu_description = "An undroppable god hand dealing burn damage. Disappears if the arm holding it is cut off." - -/obj/item/nullrod/godhand/Initialize(mapload) - . = ..() - ADD_TRAIT(src, TRAIT_NODROP, HAND_REPLACEMENT_TRAIT) - -/obj/item/nullrod/staff - name = "red holy staff" - desc = "It has a mysterious, protective aura." - icon = 'icons/obj/weapons/staff.dmi' - icon_state = "godstaff-red" - inhand_icon_state = "godstaff-red" - lefthand_file = 'icons/mob/inhands/weapons/staves_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/staves_righthand.dmi' - w_class = WEIGHT_CLASS_HUGE - force = 5 - slot_flags = ITEM_SLOT_BACK - block_chance = 50 - block_sound = 'sound/weapons/genhit.ogg' - menu_description = "A red staff which provides a medium chance of blocking incoming attacks via a protective red aura around its user, but deals very low amount of damage. Can be worn only on the back." - /// The icon which appears over the mob holding the item - var/shield_icon = "shield-red" - -/obj/item/nullrod/staff/worn_overlays(mutable_appearance/standing, isinhands) - . = ..() - if(isinhands) - . += mutable_appearance('icons/effects/effects.dmi', shield_icon, MOB_SHIELD_LAYER) - -/obj/item/nullrod/staff/blue - name = "blue holy staff" - icon_state = "godstaff-blue" - inhand_icon_state = "godstaff-blue" - shield_icon = "shield-old" - menu_description = "A blue staff which provides a medium chance of blocking incoming attacks via a protective blue aura around its user, but deals very low amount of damage. Can be worn only on the back." +/// Claymore Variant +/// This subtype possesses a block chance and is sharp. /obj/item/nullrod/claymore name = "holy claymore" @@ -249,27 +202,8 @@ inhand_icon_state = "e_cutlass_on" worn_icon_state = "swordred" -/obj/item/nullrod/sord - name = "\improper UNREAL SORD" - desc = "This thing is so unspeakably HOLY you are having a hard time even holding it." - icon = 'icons/obj/weapons/sword.dmi' - icon_state = "sord" - inhand_icon_state = "sord" - worn_icon_state = "sord" - lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi' - force = 4.13 - throwforce = 1 - slot_flags = ITEM_SLOT_BELT - hitsound = 'sound/weapons/bladeslice.ogg' - attack_verb_continuous = list("attacks", "slashes", "stabs", "slices", "tears", "lacerates", "rips", "dices", "cuts") - attack_verb_simple = list("attack", "slash", "stab", "slice", "tear", "lacerate", "rip", "dice", "cut") - menu_description = "An odd s(w)ord dealing a laughable amount of damage. Fits in pockets. Can be worn on the belt." - -/obj/item/nullrod/sord/suicide_act(mob/living/user) //a near-exact copy+paste of the actual sord suicide_act() - user.visible_message(span_suicide("[user] is trying to impale [user.p_them()]self with [src]! It might be a suicide attempt if it weren't so HOLY."), \ - span_suicide("You try to impale yourself with [src], but it's TOO HOLY...")) - return SHAME +/// Vibro Variant +/// This subtype possesses armor penetration and is sharp. /obj/item/nullrod/vibro name = "high frequency blade" @@ -342,6 +276,89 @@ toolspeed = 0.5 //same speed as an active chainsaw chaplain_spawnable = FALSE //prevents being pickable as a chaplain weapon (it has 30 force) +/// Other Variants +/// Not a special category on their own, but usually possess more unique mechanics + +// God Hand - Cannot be dropped. Does burn damage. + +/obj/item/nullrod/godhand + name = "god hand" + desc = "This hand of yours glows with an awesome power!" + icon = 'icons/obj/weapons/hand.dmi' + icon_state = "disintegrate" + inhand_icon_state = "disintegrate" + lefthand_file = 'icons/mob/inhands/items/touchspell_lefthand.dmi' + righthand_file = 'icons/mob/inhands/items/touchspell_righthand.dmi' + slot_flags = null + item_flags = ABSTRACT | DROPDEL + w_class = WEIGHT_CLASS_HUGE + hitsound = 'sound/weapons/sear.ogg' + damtype = BURN + attack_verb_continuous = list("punches", "cross counters", "pummels") + attack_verb_simple = list(SFX_PUNCH, "cross counter", "pummel") + menu_description = "An undroppable god hand dealing burn damage. Disappears if the arm holding it is cut off." + +/obj/item/nullrod/godhand/Initialize(mapload) + . = ..() + ADD_TRAIT(src, TRAIT_NODROP, HAND_REPLACEMENT_TRAIT) + +// Red/Blue Holy Staff - 50% block chance, almost no damage at all. + +/obj/item/nullrod/staff + name = "red holy staff" + desc = "It has a mysterious, protective aura." + icon = 'icons/obj/weapons/staff.dmi' + icon_state = "godstaff-red" + inhand_icon_state = "godstaff-red" + lefthand_file = 'icons/mob/inhands/weapons/staves_lefthand.dmi' + righthand_file = 'icons/mob/inhands/weapons/staves_righthand.dmi' + w_class = WEIGHT_CLASS_HUGE + force = 5 + slot_flags = ITEM_SLOT_BACK + block_chance = 50 + block_sound = 'sound/weapons/genhit.ogg' + menu_description = "A red staff which provides a medium chance of blocking incoming attacks via a protective red aura around its user, but deals very low amount of damage. Can be worn only on the back." + /// The icon which appears over the mob holding the item + var/shield_icon = "shield-red" + +/obj/item/nullrod/staff/worn_overlays(mutable_appearance/standing, isinhands) + . = ..() + if(isinhands) + . += mutable_appearance('icons/effects/effects.dmi', shield_icon, MOB_SHIELD_LAYER) + +/obj/item/nullrod/staff/blue + name = "blue holy staff" + icon_state = "godstaff-blue" + inhand_icon_state = "godstaff-blue" + shield_icon = "shield-old" + menu_description = "A blue staff which provides a medium chance of blocking incoming attacks via a protective blue aura around its user, but deals very low amount of damage. Can be worn only on the back." + +// SORD - It is unspeakably shitty. + +/obj/item/nullrod/sord + name = "\improper UNREAL SORD" + desc = "This thing is so unspeakably HOLY you are having a hard time even holding it." + icon = 'icons/obj/weapons/sword.dmi' + icon_state = "sord" + inhand_icon_state = "sord" + worn_icon_state = "sord" + lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi' + righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi' + force = 4.13 + throwforce = 1 + slot_flags = ITEM_SLOT_BELT + hitsound = 'sound/weapons/bladeslice.ogg' + attack_verb_continuous = list("attacks", "slashes", "stabs", "slices", "tears", "lacerates", "rips", "dices", "cuts") + attack_verb_simple = list("attack", "slash", "stab", "slice", "tear", "lacerate", "rip", "dice", "cut") + menu_description = "An odd s(w)ord dealing a laughable amount of damage. Fits in pockets. Can be worn on the belt." + +/obj/item/nullrod/sord/suicide_act(mob/living/user) //a near-exact copy+paste of the actual sord suicide_act() + user.visible_message(span_suicide("[user] is trying to impale [user.p_them()]self with [src]! It might be a suicide attempt if it weren't so HOLY."), \ + span_suicide("You try to impale yourself with [src], but it's TOO HOLY...")) + return SHAME + +// Relic War Hammer - Nothing special. + /obj/item/nullrod/hammer name = "relic war hammer" desc = "This war hammer cost the chaplain forty thousand space dollars." @@ -360,6 +377,8 @@ . = ..() AddElement(/datum/element/kneejerk) +// Chainsaw Hand - Cannot be dropped. + /obj/item/nullrod/chainsaw name = "chainsaw hand" desc = "Good? Bad? You're the guy with the chainsaw hand." @@ -389,6 +408,8 @@ butcher_sound = hitsound, \ ) +// Clown Dagger - Nothing special, just honks. + /obj/item/nullrod/clown name = "clown dagger" desc = "Used for absolutely hilarious sacrifices." @@ -404,6 +425,8 @@ attack_verb_simple = list("attack", "slash", "stab", "slice", "tear", "lacerate", "rip", "dice", "cut") menu_description = "A sharp dagger. Fits in pockets. Can be worn on the belt. Honk." +// Pride-struck Hammer - Transfers reagents in your body to those you hit. + #define CHEMICAL_TRANSFER_CHANCE 30 /obj/item/nullrod/pride_hammer @@ -436,6 +459,8 @@ #undef CHEMICAL_TRANSFER_CHANCE +// Holy Whip - Does more damage to vampires. + /obj/item/nullrod/whip name = "holy whip" desc = "What a terrible night to be on Space Station 13." @@ -451,6 +476,8 @@ hitsound = 'sound/weapons/chainhit.ogg' menu_description = "A whip. Deals extra damage to vampires. Fits in pockets. Can be worn on the belt." +// Atheist's Fedora - Wear it on your head. No melee damage, massive throw force. + /obj/item/nullrod/fedora name = "atheist's fedora" desc = "The brim of the hat is as sharp as your wit. The edge would hurt almost as much as disproving the existence of God." @@ -474,6 +501,8 @@ user.visible_message(span_suicide("[user] is killing [user.p_them()]self with [src]! It looks like [user.p_theyre()] trying to get further from god!")) return (BRUTELOSS|FIRELOSS) +// Dark Blessing - Replaces your arm with an armblade. Cannot be dropped. + /obj/item/nullrod/armblade name = "dark blessing" desc = "Particularly twisted deities grant gifts of dubious value." @@ -498,12 +527,16 @@ effectiveness = 70, \ ) +// Unholy Blessing - Just a reskinned dark blessing. + /obj/item/nullrod/armblade/tentacle name = "unholy blessing" icon_state = "tentacle" inhand_icon_state = "tentacle" menu_description = "An undroppable sharp tentacle capable of inflicting deep wounds. Capable of an ineffective butchering of bodies. Disappears if the arm holding it is cut off." +// Carp-sie Plushie - Gives you the carp faction so that you can be friends with carp. + /obj/item/nullrod/carp name = "carp-sie plushie" desc = "An adorable stuffed toy that resembles the god of all carp. The teeth look pretty sharp. Activate it to receive the blessing of Carp-Sie." @@ -525,7 +558,9 @@ . = ..() AddComponent(/datum/component/faction_granter, FACTION_CARP, holy_role_required = HOLY_ROLE_PRIEST, grant_message = span_boldnotice("You are blessed by Carp-Sie. Wild space carp will no longer attack you.")) -/obj/item/nullrod/claymore/bostaff //May as well make it a "claymore" and inherit the blocking +// Monk's Staff - Higher block, lower damage. + +/obj/item/nullrod/bostaff name = "monk's staff" desc = "A long, tall staff made of polished wood. Traditionally used in ancient old-Earth martial arts, it is now used to harass the clown." force = 15 @@ -533,7 +568,6 @@ block_sound = 'sound/weapons/genhit.ogg' slot_flags = ITEM_SLOT_BACK w_class = WEIGHT_CLASS_BULKY - sharpness = NONE hitsound = SFX_SWING_HIT attack_verb_continuous = list("smashes", "slams", "whacks", "thwacks") attack_verb_simple = list("smash", "slam", "whack", "thwack") @@ -543,7 +577,9 @@ worn_icon_state = "bostaff0" lefthand_file = 'icons/mob/inhands/weapons/staves_lefthand.dmi' righthand_file = 'icons/mob/inhands/weapons/staves_righthand.dmi' - menu_description = "A staff which provides a medium-low chance of blocking incoming melee attacks and deals a little less damage due to being made of wood. Can be worn on the back." + menu_description = "A staff which provides a medium-low chance of blocking incoming melee attacks and deals a little less damage. Can be worn on the back." + +// Arrhythmic Knife - Lets your walk without rhythm by varying your walk speed. Can't be put away. /obj/item/nullrod/tribal_knife name = "arrhythmic knife" @@ -581,6 +617,8 @@ if(wielder.is_holding(src)) wielder.update_equipment_speed_mods() +// Unholy Pitchfork - Does absolutely nothing special, it is just bigger. + /obj/item/nullrod/pitchfork name = "unholy pitchfork" desc = "Holding this makes you look absolutely devilish." @@ -598,6 +636,8 @@ sharpness = SHARP_EDGED menu_description = "A sharp pitchfork. Can be worn on the back." +// Egyptian Staff - Used as a tool for making mummy wraps. + /obj/item/nullrod/egyptian name = "egyptian staff" desc = "A tutorial in mummification is carved into the staff. You could probably craft the wraps if you had some cloth." @@ -613,6 +653,8 @@ attack_verb_simple = list("bash", "smack", "whack") menu_description = "A staff. Can be used as a tool to craft exclusive egyptian items. Easily stored. Can be worn on the back." +// Hypertool - It does brain damage rather than normal damage. + /obj/item/nullrod/hypertool name = "hypertool" desc = "A tool so powerful even you cannot perfectly use it." @@ -630,6 +672,8 @@ hitsound = 'sound/effects/sparks4.ogg' menu_description = "A tool dealing brain damage which partially penetrates armor. Fits in pockets. Can be worn on the belt." +// Ancient Spear - Slight armor penetration, based on the Brass Spear from the Clockcult game mode. + /obj/item/nullrod/spear name = "ancient spear" desc = "An ancient spear made of brass, I mean gold, I mean bronze. It looks highly mechanical." @@ -646,3 +690,174 @@ attack_verb_simple = list("stab", "poke", "slash", "clock") hitsound = 'sound/weapons/bladeslice.ogg' menu_description = "A pointy spear which penetrates armor a little. Can be worn only on the belt." + +// Nullblade - For when you really want to feel like rolling dice during combat + +/obj/item/nullrod/nullblade + name = "nullblade" + desc = "Clerical assassins are not officially recognized by the collective faiths of Nanotrasen. And yet, here you are." + icon = 'icons/obj/weapons/sword.dmi' + icon_state = "nullsword" + inhand_icon_state = "nullsword" + worn_icon_state = "nullsword" + lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi' + righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi' + w_class = WEIGHT_CLASS_BULKY + force = 12 + wound_bonus = 10 + bare_wound_bonus = 30 + slot_flags = ITEM_SLOT_BELT + block_sound = 'sound/weapons/parry.ogg' + sharpness = SHARP_POINTY + hitsound = 'sound/weapons/bladeslice.ogg' + attack_verb_continuous = list("attacks", "punctures", "stabs", "slices", "tears", "lacerates", "rips", "dices", "cuts") + attack_verb_simple = list("attack", "puncture", "stab", "slice", "tear", "lacerate", "rip", "dice", "cut") + menu_description = "A blade that deals variable, low amounts of damage, but does easily inflict wounds. \ + The stronger your swinging arm is, the stronger the blade is, though only slightly. \ + Against debilitated targets, can also deal additional sneak attack damage with a very high wound chance." + +/obj/item/nullrod/nullblade/melee_attack_chain(mob/user, atom/target, params) + //Track our actual force separately + var/old_force = force + force = 0 + //Potential dice roll for our baseline force + force += roll("1d6") + + //Now we can check for our user's potential 'strength' value. As a baseline, we'll use a default value of 4 for the sake of nonhuman users. + var/strength_value = 4 + + //We can use our human wielder's arm strength to determine their 'strength'. We add unarmed lower and upper, then divide by four. + //This isn't how strength works in dnd but who fucking cares. + if(ishuman(user)) + var/mob/living/carbon/human/human_user = user + var/obj/item/bodypart/wielding_bodypart = human_user.get_active_hand() + strength_value = round((wielding_bodypart.unarmed_damage_low + wielding_bodypart.unarmed_damage_high) * 0.25, 1) + + force += strength_value + + //If our old_force is higher than our initial force, add the difference to this calculation. + //We do this because our force could have been changed by things like whetstones and RPG stats. + force += old_force - initial(force) + + . = ..() + //Reapply our old force. + force = old_force + +/obj/item/nullrod/nullblade/afterattack(atom/target, mob/user, click_parameters) + if(!isliving(target)) + return + + var/mob/living/living_target = target + + if(user == living_target) + return + + if(living_target.stat == DEAD) + return + + sneak_attack(living_target, user) + +/// If our target is incapacitated, unable to protect themselves, or we attack them from behind, we sneak attack! +/obj/item/nullrod/nullblade/proc/sneak_attack(mob/living/living_target, mob/user) + // Did we successfully meet the criteria for a sneak attack? + var/successful_sneak_attack = FALSE + + // Did our sneak attack fail due to a special effect? + var/sneak_attack_fail_message = FALSE + + // The force our sneak attack applies. Starts as 3d6, then changed based on certain factors. + var/sneak_attack_dice = roll("3d6") + + // Status effects on the target that grant us sneak attacks + if(living_target.is_blind()) + successful_sneak_attack = TRUE + + else if(living_target.get_timed_status_effect_duration(/datum/status_effect/staggered)) + successful_sneak_attack = TRUE + + else if(living_target.get_timed_status_effect_duration(/datum/status_effect/confusion)) + successful_sneak_attack = TRUE + + // Our target is in some kind of grapple, which prevents them form protecting themselves. + else if(living_target.pulledby && living_target.pulledby.grab_state >= GRAB_AGGRESSIVE) + successful_sneak_attack = TRUE + + // traits that render you unable to defend yourself properly from an attack + else if(HAS_TRAIT(living_target, TRAIT_SPINNING) || HAS_TRAIT(living_target, TRAIT_HANDS_BLOCKED)) + successful_sneak_attack = TRUE + + // We'll take "same tile" as "behind" for ease + else if(living_target.loc == user.loc) + successful_sneak_attack = TRUE + + // We'll also assume lying down is vulnerable, as mob directions when lying are unclear and you have trouble defending yourself from prone + else if(living_target.body_position == LYING_DOWN) + successful_sneak_attack = TRUE + + // Now check for if we're behind + var/dir_living_target_to_user = get_dir(living_target, user) + if(living_target.dir & REVERSE_DIR(dir_living_target_to_user)) + successful_sneak_attack = TRUE + + /// Now we'll check for things that STOP a sneak attack. Why? Because this mechanic isn't complicated enough and I must insert more ivory tower design. + + if(living_target.mob_biotypes & MOB_SLIME) // SLIMES HAVE NO ANATOMY. + successful_sneak_attack = FALSE + sneak_attack_fail_message = TRUE + + else if(living_target.incorporeal_move >= 1 && !HAS_TRAIT(living_target, TRAIT_REVENANT_REVEALED)) // WE CAN'T SNEAK ATTACK INCORPOREAL JERKS. BUT WE CAN SNEAK ATTACK REVEALED REVENANTS BECAUSE DUH, NULLROD. + successful_sneak_attack = FALSE + sneak_attack_fail_message = TRUE + + else if(IS_HERETIC_MONSTER(living_target) && prob(50)) // IT IS HARD TO SNEAK ATTACK SOMETHING WITH TOO MANY REDUNDANT EVERYTHINGS. + successful_sneak_attack = FALSE + sneak_attack_fail_message = TRUE + + else if(HAS_TRAIT(living_target, TRAIT_STABLEHEART) && prob(50)) // THEIR ANATOMY IS FUCKING WEIRD. + successful_sneak_attack = FALSE + sneak_attack_fail_message = TRUE + + else if(HAS_TRAIT(living_target, TRAIT_MIND_READER) && !user.can_block_magic(MAGIC_RESISTANCE_MIND, charge_cost = 0)) // FORESIGHT SAYS 'FUCK YOU' TO SNEAK ATTACKERS. BUT IF YOU HAVE A TIN FOIL HAT, YOU'RE SAFE! + successful_sneak_attack = FALSE + sneak_attack_fail_message = TRUE + + else if(user.is_blind()) // YOU CAN'T STAB PRECISELY WHAT YOU CAN'T SEE. + successful_sneak_attack = FALSE + sneak_attack_fail_message = TRUE + + /// And so we return here if we are not entitled to a sneak attack. + if(!successful_sneak_attack) + if(sneak_attack_fail_message) + user.balloon_alert(living_target, "sneak attack avoided!") + return + + /// And now we'll deal with sneak attack damage modifiers. + + // If our target is also unconscious for some reason, we get even more damage. Coup de grace, motherfucker. + if(HAS_TRAIT(living_target, TRAIT_KNOCKEDOUT)) + sneak_attack_dice += roll("1d6") + new /obj/effect/temp_visual/crit(get_turf(living_target)) + + // If the target is rebuked, we also add some additional damage. It is the closest thing to 'studying' your target, okay? + if(living_target.has_status_effect(/datum/status_effect/rebuked)) + sneak_attack_dice += 2 + + // If we're morbid, and the target has been dissected, we get an extra d6. + // The chances of this occuring are quite low, as even having this weapon means you're locked out of becoming morbid as a chaplain, but when it does come up... + // Or the coroner stole this blade to go hunt the recently dead... + if(HAS_TRAIT(user, TRAIT_MORBID) && HAS_TRAIT(living_target, TRAIT_DISSECTED)) + sneak_attack_dice += roll("1d6") + + // Baton + this weapon might be a little too much fun so we're nerfing this combination outright. + if(HAS_TRAIT(living_target, TRAIT_IWASBATONED)) + sneak_attack_dice *= 0.5 + + // Affecting body part check. + var/obj/item/bodypart/affecting = living_target.get_bodypart(user.get_random_valid_zone(user.zone_selected)) + // Target's armor value. Accounts for armor penetration even though we have no armour_penetration defined on the parent. + var/armor_block = living_target.run_armor_check(affecting, MELEE, armour_penetration = armour_penetration) + + // We got a sneak attack! + living_target.apply_damage(round(sneak_attack_dice, DAMAGE_PRECISION), BRUTE, def_zone = affecting, blocked = armor_block, wound_bonus = bare_wound_bonus, sharpness = SHARP_EDGED) + living_target.balloon_alert(user, "sneak attack!") + playsound(living_target, 'sound/weapons/guillotine.ogg', 50, TRUE) diff --git a/code/modules/jobs/job_types/chief_medical_officer.dm b/code/modules/jobs/job_types/chief_medical_officer.dm index e20ef7c19edd9..3f580b8e932a5 100644 --- a/code/modules/jobs/job_types/chief_medical_officer.dm +++ b/code/modules/jobs/job_types/chief_medical_officer.dm @@ -56,7 +56,7 @@ id = /obj/item/card/id/advanced/silver id_trim = /datum/id_trim/job/chief_medical_officer - uniform = /obj/item/clothing/under/rank/medical/chief_medical_officer/scrubs + uniform = /obj/item/clothing/under/rank/medical/chief_medical_officer suit = /obj/item/clothing/suit/toggle/labcoat/cmo suit_store = /obj/item/flashlight/pen/paramedic backpack_contents = list( @@ -64,7 +64,6 @@ ) belt = /obj/item/modular_computer/pda/heads/cmo ears = /obj/item/radio/headset/heads/cmo - head = /obj/item/clothing/head/utility/surgerycap/cmo shoes = /obj/item/clothing/shoes/sneakers/blue l_pocket = /obj/item/laser_pointer/blue r_pocket = /obj/item/pinpointer/crew diff --git a/code/modules/jobs/job_types/clown.dm b/code/modules/jobs/job_types/clown.dm index e9b40d43e05e6..12f30a9de1b88 100644 --- a/code/modules/jobs/job_types/clown.dm +++ b/code/modules/jobs/job_types/clown.dm @@ -26,6 +26,7 @@ mail_goodies = list( /obj/item/food/grown/banana = 100, /obj/item/food/pie/cream = 50, + /obj/item/spess_knife = 20, // As a joke for clumsy clown from engineering department /obj/item/clothing/shoes/clown_shoes/combat = 10, /obj/item/reagent_containers/spray/waterflower/lube = 20, // lube /obj/item/reagent_containers/spray/waterflower/superlube = 1 // Superlube, good lord. diff --git a/code/modules/jobs/job_types/detective.dm b/code/modules/jobs/job_types/detective.dm index b6984e24b4220..00bd8790d9bd0 100644 --- a/code/modules/jobs/job_types/detective.dm +++ b/code/modules/jobs/job_types/detective.dm @@ -61,7 +61,7 @@ ears = /obj/item/radio/headset/headset_sec/alt gloves = /obj/item/clothing/gloves/color/black head = /obj/item/clothing/head/fedora/det_hat - mask = /obj/item/clothing/mask/cigarette + mask = /obj/item/cigarette neck = /obj/item/clothing/neck/tie/detective shoes = /obj/item/clothing/shoes/sneakers/brown l_pocket = /obj/item/toy/crayon/white @@ -73,15 +73,17 @@ ) implants = list(/obj/item/implant/mindshield) + skillchips = list(/obj/item/skillchip/job/detectives_taste) + /datum/outfit/job/detective/pre_equip(mob/living/carbon/human/human, visualsOnly = FALSE) . = ..() if (human.age < AGE_MINOR) - mask = /obj/item/clothing/mask/cigarette/candy + mask = /obj/item/cigarette/candy head = /obj/item/clothing/head/fedora/det_hat/minor /datum/outfit/job/detective/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) ..() - var/obj/item/clothing/mask/cigarette/cig = H.wear_mask + var/obj/item/cigarette/cig = H.wear_mask if(istype(cig)) //Some species specfic changes can mess this up (plasmamen) cig.light("") diff --git a/code/modules/jobs/job_types/janitor.dm b/code/modules/jobs/job_types/janitor.dm index 7b562bca670e6..13a3496c609d3 100644 --- a/code/modules/jobs/job_types/janitor.dm +++ b/code/modules/jobs/job_types/janitor.dm @@ -41,6 +41,7 @@ belt = /obj/item/modular_computer/pda/janitor ears = /obj/item/radio/headset/headset_srv skillchips = list(/obj/item/skillchip/job/janitor) + backpack_contents = list(/obj/item/access_key) /datum/outfit/job/janitor/pre_equip(mob/living/carbon/human/human_equipper, visuals_only) . = ..() @@ -48,11 +49,6 @@ backpack_contents += list(/obj/item/gun/ballistic/revolver) r_pocket = /obj/item/ammo_box/a357 - var/static/access_key_given = FALSE - if(!access_key_given && !visuals_only) - access_key_given = TRUE - backpack_contents += list(/obj/item/access_key) - /datum/outfit/job/janitor/get_types_to_preload() . = ..() if(check_holidays(GARBAGEDAY)) diff --git a/code/modules/jobs/job_types/medical_doctor.dm b/code/modules/jobs/job_types/medical_doctor.dm index a0f2971df2306..ccfcbae1623e6 100644 --- a/code/modules/jobs/job_types/medical_doctor.dm +++ b/code/modules/jobs/job_types/medical_doctor.dm @@ -44,12 +44,11 @@ jobtype = /datum/job/doctor id_trim = /datum/id_trim/job/medical_doctor - uniform = /obj/item/clothing/under/rank/medical/scrubs/blue + uniform = /obj/item/clothing/under/rank/medical/doctor suit = /obj/item/clothing/suit/toggle/labcoat suit_store = /obj/item/flashlight/pen belt = /obj/item/modular_computer/pda/medical ears = /obj/item/radio/headset/headset_med - head = /obj/item/clothing/head/utility/surgerycap shoes = /obj/item/clothing/shoes/sneakers/white l_hand = /obj/item/storage/medkit/surgery diff --git a/code/modules/jobs/job_types/research_director.dm b/code/modules/jobs/job_types/research_director.dm index 1142ba033ff75..5d3c620322759 100644 --- a/code/modules/jobs/job_types/research_director.dm +++ b/code/modules/jobs/job_types/research_director.dm @@ -58,7 +58,7 @@ id = /obj/item/card/id/advanced/silver id_trim = /datum/id_trim/job/research_director uniform = /obj/item/clothing/under/rank/rnd/research_director/turtleneck - suit = /obj/item/clothing/suit/jacket/research_director + suit = /obj/item/clothing/suit/toggle/labcoat/research_director backpack_contents = list( /obj/item/melee/baton/telescopic = 1, ) @@ -76,7 +76,7 @@ messenger = /obj/item/storage/backpack/messenger/science chameleon_extras = /obj/item/stamp/head/rd - skillchips = list(/obj/item/skillchip/job/research_director) + skillchips = list(/obj/item/skillchip/research_director, /obj/item/skillchip/job/roboticist) /datum/outfit/job/rd/mod name = "Research Director (MODsuit)" diff --git a/code/modules/jobs/job_types/roboticist.dm b/code/modules/jobs/job_types/roboticist.dm index e5ae78bdc6bc0..7370af5d9ec4e 100644 --- a/code/modules/jobs/job_types/roboticist.dm +++ b/code/modules/jobs/job_types/roboticist.dm @@ -26,7 +26,8 @@ mail_goodies = list( /obj/item/storage/box/flashes = 20, /obj/item/stack/sheet/iron/twenty = 15, - /obj/item/modular_computer/laptop = 5 + /obj/item/modular_computer/laptop = 5, + /obj/item/mmi/posibrain/sphere = 5, ) family_heirlooms = list(/obj/item/toy/plush/pkplush) diff --git a/code/modules/jobs/job_types/shaft_miner.dm b/code/modules/jobs/job_types/shaft_miner.dm index 7a14898f364d0..64d1a3b0bff19 100644 --- a/code/modules/jobs/job_types/shaft_miner.dm +++ b/code/modules/jobs/job_types/shaft_miner.dm @@ -112,8 +112,8 @@ var/obj/item/stack/sheet/animalhide/goliath_hide/plating = new() explorer_suit.hood.attackby(plating) for(var/obj/item/gun/energy/recharge/kinetic_accelerator/accelerator in miner_contents) - var/obj/item/knife/combat/survival/knife = new(accelerator) - accelerator.bayonet = knife + var/datum/component/bayonet_attachable/bayonet = accelerator.GetComponent(/datum/component/bayonet_attachable) + bayonet.add_bayonet(new /obj/item/knife/combat/survival(accelerator)) var/obj/item/flashlight/seclite/flashlight = new() var/datum/component/seclite_attachable/light_component = accelerator.GetComponent(/datum/component/seclite_attachable) light_component.add_light(flashlight) diff --git a/code/modules/jobs/job_types/station_engineer.dm b/code/modules/jobs/job_types/station_engineer.dm index 8738389ab41d0..14e80f65ea9c4 100644 --- a/code/modules/jobs/job_types/station_engineer.dm +++ b/code/modules/jobs/job_types/station_engineer.dm @@ -31,6 +31,7 @@ mail_goodies = list( /obj/item/storage/box/lights/mixed = 20, /obj/item/lightreplacer = 10, + /obj/item/spess_knife = 10, /obj/item/holosign_creator/engineering = 8, /obj/item/wrench/bolter = 8, /obj/item/clothing/head/utility/hardhat/red/upgraded = 1 diff --git a/code/modules/jobs/job_types/station_trait/human_ai.dm b/code/modules/jobs/job_types/station_trait/human_ai.dm index 285479a691261..0768505b66553 100644 --- a/code/modules/jobs/job_types/station_trait/human_ai.dm +++ b/code/modules/jobs/job_types/station_trait/human_ai.dm @@ -21,7 +21,7 @@ paycheck = null paycheck_department = null - mind_traits = list(DISPLAYS_JOB_IN_BINARY) + mind_traits = list(TRAIT_DISPLAY_JOB_IN_BINARY) liver_traits = list(TRAIT_HUMAN_AI_METABOLISM) departments_list = list( @@ -83,7 +83,7 @@ /datum/job/human_ai/announce_job(mob/living/joining_mob) . = ..() if(SSticker.HasRoundStarted()) - minor_announce("Due to a research mishaps, [joining_mob] has been sent to be your replacement AI at [AREACOORD(joining_mob)]. Please treat them with respect.") + minor_announce("Due to a research mishap, [joining_mob] has been sent to be your replacement AI at [AREACOORD(joining_mob)]. Please treat them with respect.") /datum/job/human_ai/get_radio_information() return "Prefix your message with :b to speak with cyborgs." @@ -148,8 +148,8 @@ return ..() /obj/item/secure_camera_console_pod - name = "advanced camera control pod" - desc = "Calls down a secure camera console to use for all your AI stuff, may only be activated in the SAT." + name = "pre-packaged advanced camera control" + desc = "A pre-packaged camera console used for all your AI stuff, programmed to only active in the SAT." icon = 'icons/obj/devices/remote.dmi' icon_state = "botpad_controller" inhand_icon_state = "radio" @@ -163,9 +163,9 @@ if(!is_type_in_typecache(current_area, allowed_areas)) user.balloon_alert(user, "not in the sat!") return - podspawn(list( - "target" = get_turf(src), - "style" = STYLE_BLUESPACE, - "spawn" = /obj/machinery/computer/camera_advanced, - )) + user.balloon_alert(user, "unpacking...") + if(!do_after(user, 5 SECONDS, src)) + return + playsound(src, 'sound/items/drill_use.ogg', 40, TRUE) + new /obj/machinery/computer/camera_advanced/human_ai(get_turf(src)) qdel(src) diff --git a/code/modules/jobs/job_types/station_trait/veteran_advisor.dm b/code/modules/jobs/job_types/station_trait/veteran_advisor.dm index 87ad65c2c7a71..6fcb8d94707f5 100644 --- a/code/modules/jobs/job_types/station_trait/veteran_advisor.dm +++ b/code/modules/jobs/job_types/station_trait/veteran_advisor.dm @@ -63,7 +63,7 @@ uniform = /obj/item/clothing/under/rank/security/officer/formal head = /obj/item/clothing/head/soft/veteran - mask = /obj/item/clothing/mask/cigarette/cigar + mask = /obj/item/cigarette/cigar suit = /obj/item/clothing/suit/jacket/trenchcoat belt = /obj/item/storage/belt/holster/detective/full/ert //M1911 pistol ears = /obj/item/radio/headset/heads/hos/advisor diff --git a/code/modules/language/_language.dm b/code/modules/language/_language.dm new file mode 100644 index 0000000000000..6a00610c0adf2 --- /dev/null +++ b/code/modules/language/_language.dm @@ -0,0 +1,164 @@ +/// maximum of 50 specific scrambled lines per language +#define SCRAMBLE_CACHE_LEN 50 + +/// Datum based languages. Easily editable and modular. +/datum/language + /// Fluff name of language if any. + var/name = "an unknown language" + /// Short description for 'Check Languages'. + var/desc = "A language." + /// Character used to speak in language + /// If key is null, then the language isn't real or learnable. + var/key + /// Various language flags. + var/flags = NONE + /// Used when scrambling text for a non-speaker. + var/list/syllables + /// List of characters that will randomly be inserted between syllables. + var/list/special_characters + /// Likelihood of making a new sentence after each syllable. + var/sentence_chance = 5 + /// Likelihood of getting a space in the random scramble string + var/space_chance = 55 + /// Spans to apply from this language + var/list/spans + /// Cache of recently scrambled text + /// This allows commonly reused words to not require a full re-scramble every time. + var/list/scramble_cache = list() + /// The language that an atom knows with the highest "default_priority" is selected by default. + var/default_priority = 0 + /// If TRUE, when generating names, we will always use the default human namelist, even if we have syllables set. + /// This is to be used for languages with very outlandish syllable lists (like pirates). + var/always_use_default_namelist = FALSE + /// Icon displayed in the chat window when speaking this language. + /// if you are seeing someone speak popcorn language, then something is wrong. + var/icon = 'icons/ui/chat/language.dmi' + /// Icon state displayed in the chat window when speaking this language. + var/icon_state = "popcorn" + + /// By default, random names picks this many names + var/default_name_count = 2 + /// By default, random names picks this many syllables (min) + var/default_name_syllable_min = 2 + /// By default, random names picks this many syllables (max) + var/default_name_syllable_max = 4 + /// What char to place in between randomly generated names + var/random_name_spacer = " " + +/// Checks whether we should display the language icon to the passed hearer. +/datum/language/proc/display_icon(atom/movable/hearer) + var/understands = hearer.has_language(src.type) + if((flags & LANGUAGE_HIDE_ICON_IF_UNDERSTOOD) && understands) + return FALSE + if((flags & LANGUAGE_HIDE_ICON_IF_NOT_UNDERSTOOD) && !understands) + return FALSE + return TRUE + +/// Returns the icon to display in the chat window when speaking this language. +/datum/language/proc/get_icon() + var/datum/asset/spritesheet/sheet = get_asset_datum(/datum/asset/spritesheet/chat) + return sheet.icon_tag("language-[icon_state]") + +/// Simple helper for getting a default firstname lastname +/datum/language/proc/default_name(gender = NEUTER) + if(gender != MALE) + gender = pick(MALE, FEMALE) + if(gender == FEMALE) + return capitalize(pick(GLOB.first_names_female)) + " " + capitalize(pick(GLOB.last_names)) + return capitalize(pick(GLOB.first_names_male)) + " " + capitalize(pick(GLOB.last_names)) + + +/** + * Generates a random name this language would use. + * + * * gender: What gender to generate from, if neuter / plural coin flips between male and female + * * name_count: How many names to generate in, by default 2, for firstname lastname + * * syllable_count: How many syllables to generate in each name, min + * * syllable_max: How many syllables to generate in each name, max + * * force_use_syllables: If the name should be generated from the syllables list. + * Only used for subtypes which implement custom name lists. Also requires the language has syllables set. + */ +/datum/language/proc/get_random_name( + gender = NEUTER, + name_count = default_name_count, + syllable_min = default_name_syllable_min, + syllable_max = default_name_syllable_max, + force_use_syllables = FALSE, +) + if(gender != MALE) + gender = pick(MALE, FEMALE) + if(!length(syllables) || always_use_default_namelist) + return default_name(gender) + + var/list/full_name = list() + for(var/i in 1 to name_count) + var/new_name = "" + for(var/j in 1 to rand(default_name_syllable_min, default_name_syllable_max)) + new_name += pick_weight_recursive(syllables) + full_name += capitalize(LOWER_TEXT(new_name)) + + return jointext(full_name, random_name_spacer) + +/// Generates a random name, and attempts to ensure it is unique (IE, no other mob in the world has it) +/datum/language/proc/get_random_unique_name(...) + var/result = get_random_name(arglist(args)) + for(var/i in 1 to 10) + if(!findname(result)) + break + result = get_random_name(arglist(args)) + + return result + +/datum/language/proc/check_cache(input) + var/lookup = scramble_cache[input] + if(lookup) + scramble_cache -= input + scramble_cache[input] = lookup + . = lookup + +/datum/language/proc/add_to_cache(input, scrambled_text) + // Add it to cache, cutting old entries if the list is too long + scramble_cache[input] = scrambled_text + if(scramble_cache.len > SCRAMBLE_CACHE_LEN) + scramble_cache.Cut(1, scramble_cache.len-SCRAMBLE_CACHE_LEN-1) + +/datum/language/proc/scramble(input) + + if(!length(syllables)) + return stars(input) + + // If the input is cached already, move it to the end of the cache and return it + var/lookup = check_cache(input) + if(lookup) + return lookup + + var/input_size = length_char(input) + var/scrambled_text = "" + var/capitalize = TRUE + + while(length_char(scrambled_text) < input_size) + var/next = (length(scrambled_text) && length(special_characters) && prob(1)) ? pick(special_characters) : pick_weight_recursive(syllables) + if(capitalize) + next = capitalize(next) + capitalize = FALSE + scrambled_text += next + var/chance = rand(100) + if(chance <= sentence_chance) + scrambled_text += ". " + capitalize = TRUE + else if(chance > sentence_chance && chance <= space_chance) + scrambled_text += " " + + scrambled_text = trim(scrambled_text) + var/ending = copytext_char(scrambled_text, -1) + if(ending == ".") + scrambled_text = copytext_char(scrambled_text, 1, -2) + var/input_ending = copytext_char(input, -1) + if(input_ending in list("!","?",".")) + scrambled_text += input_ending + + add_to_cache(input, scrambled_text) + + return scrambled_text + +#undef SCRAMBLE_CACHE_LEN diff --git a/code/modules/language/language_holder.dm b/code/modules/language/_language_holder.dm similarity index 100% rename from code/modules/language/language_holder.dm rename to code/modules/language/_language_holder.dm diff --git a/code/modules/language/language_manuals.dm b/code/modules/language/_language_manuals.dm similarity index 100% rename from code/modules/language/language_manuals.dm rename to code/modules/language/_language_manuals.dm diff --git a/code/modules/language/language_menu.dm b/code/modules/language/_language_menu.dm similarity index 100% rename from code/modules/language/language_menu.dm rename to code/modules/language/_language_menu.dm diff --git a/code/modules/language/aphasia.dm b/code/modules/language/aphasia.dm index 9d4e317c4d881..2d82b79892ee7 100644 --- a/code/modules/language/aphasia.dm +++ b/code/modules/language/aphasia.dm @@ -7,3 +7,4 @@ space_chance = 20 default_priority = 10 icon_state = "aphasia" + always_use_default_namelist = TRUE // Shouldn't generate names for this anyways diff --git a/code/modules/language/beachbum.dm b/code/modules/language/beachbum.dm index d78be9788f35b..bd319e717ffd0 100644 --- a/code/modules/language/beachbum.dm +++ b/code/modules/language/beachbum.dm @@ -17,5 +17,5 @@ "heavy", "stellar", "excellent", "triumphant", "babe", "four", "tail", "trim", "tube", "wobble", "roll", "gnarly", "epic", ) - icon_state = "beach" + always_use_default_namelist = TRUE diff --git a/code/modules/language/buzzwords.dm b/code/modules/language/buzzwords.dm index c46088c0ad5b9..2ed033bca345b 100644 --- a/code/modules/language/buzzwords.dm +++ b/code/modules/language/buzzwords.dm @@ -8,3 +8,4 @@ ) icon_state = "buzz" default_priority = 90 + always_use_default_namelist = TRUE // Otherwise we get Bzzbzbz Zzzbzbz. diff --git a/code/modules/language/calcic.dm b/code/modules/language/calcic.dm index f4882e1105b95..477e442203bc1 100644 --- a/code/modules/language/calcic.dm +++ b/code/modules/language/calcic.dm @@ -13,4 +13,16 @@ icon_state = "calcic" default_priority = 90 +/datum/language/calcic/get_random_name( + gender = NEUTER, + name_count = default_name_count, + syllable_min = default_name_syllable_min, + syllable_max = default_name_syllable_max, + force_use_syllables = FALSE, +) + if(force_use_syllables) + return ..() + + return "[pick(GLOB.plasmaman_names)] \Roman[rand(1, 99)]" + // Yeah, this goes to skeletons too, since it's basically just skeleton clacking. diff --git a/code/modules/language/codespeak.dm b/code/modules/language/codespeak.dm index 09db7ef511b4b..242095b3bb7fa 100644 --- a/code/modules/language/codespeak.dm +++ b/code/modules/language/codespeak.dm @@ -5,6 +5,7 @@ default_priority = 0 flags = TONGUELESS_SPEECH | LANGUAGE_HIDE_ICON_IF_NOT_UNDERSTOOD icon_state = "codespeak" + always_use_default_namelist = TRUE // No syllables anyways /datum/language/codespeak/scramble(input) var/lookup = check_cache(input) diff --git a/code/modules/language/common.dm b/code/modules/language/common.dm index 2dc7294983c0a..6bad808fef262 100644 --- a/code/modules/language/common.dm +++ b/code/modules/language/common.dm @@ -7,50 +7,51 @@ default_priority = 100 icon_state = "galcom" - -//Syllable Lists -/* - This list really long, mainly because I can't make up my mind about which mandarin syllables should be removed, - and the english syllables had to be duplicated so that there is roughly a 50-50 weighting. - - Sources: - http://www.sttmedia.com/syllablefrequency-english - http://www.chinahighlights.com/travelguide/learning-chinese/pinyin-syllables.htm -*/ -/datum/language/common/syllables = list( - // each sublist has an equal chance of being picked, so each syllable has an equal chance of being english or chinese - list( - "a", "ai", "an", "ang", "ao", "ba", "bai", "ban", "bang", "bao", "bei", "ben", "beng", "bi", "bian", "biao", - "bie", "bin", "bing", "bo", "bu", "ca", "cai", "can", "cang", "cao", "ce", "cei", "cen", "ceng", "cha", "chai", - "chan", "chang", "chao", "che", "chen", "cheng", "chi", "chong", "chou", "chu", "chua", "chuai", "chuan", "chuang", "chui", "chun", - "chuo", "ci", "cong", "cou", "cu", "cuan", "cui", "cun", "cuo", "da", "dai", "dan", "dang", "dao", "de", "dei", - "den", "deng", "di", "dian", "diao", "die", "ding", "diu", "dong", "dou", "du", "duan", "dui", "dun", "duo", "e", - "ei", "en", "er", "fa", "fan", "fang", "fei", "fen", "feng", "fo", "fou", "fu", "ga", "gai", "gan", "gang", - "gao", "ge", "gei", "gen", "geng", "gong", "gou", "gu", "gua", "guai", "guan", "guang", "gui", "gun", "guo", "ha", - "hai", "han", "hang", "hao", "he", "hei", "hen", "heng", "hm", "hng", "hong", "hou", "hu", "hua", "huai", "huan", - "huang", "hui", "hun", "huo", "ji", "jia", "jian", "jiang", "jiao", "jie", "jin", "jing", "jiong", "jiu", "ju", "juan", - "jue", "jun", "ka", "kai", "kan", "kang", "kao", "ke", "kei", "ken", "keng", "kong", "kou", "ku", "kua", "kuai", - "kuan", "kuang", "kui", "kun", "kuo", "la", "lai", "lan", "lang", "lao", "le", "lei", "leng", "li", "lia", "lian", - "liang", "liao", "lie", "lin", "ling", "liu", "long", "lou", "lu", "luan", "lun", "luo", "ma", "mai", "man", "mang", - "mao", "me", "mei", "men", "meng", "mi", "mian", "miao", "mie", "min", "ming", "miu", "mo", "mou", "mu", "na", - "nai", "nan", "nang", "nao", "ne", "nei", "nen", "neng", "ng", "ni", "nian", "niang", "niao", "nie", "nin", "ning", - "niu", "nong", "nou", "nu", "nuan", "nuo", "o", "ou", "pa", "pai", "pan", "pang", "pao", "pei", "pen", "peng", - "pi", "pian", "piao", "pie", "pin", "ping", "po", "pou", "pu", "qi", "qia", "qian", "qiang", "qiao", "qie", "qin", - "qing", "qiong", "qiu", "qu", "quan", "que", "qun", "ran", "rang", "rao", "re", "ren", "reng", "ri", "rong", "rou", - "ru", "rua", "ruan", "rui", "run", "ruo", "sa", "sai", "san", "sang", "sao", "se", "sei", "sen", "seng", "sha", - "shai", "shan", "shang", "shao", "she", "shei", "shen", "sheng", "shi", "shou", "shu", "shua", "shuai", "shuan", "shuang", "shui", - "shun", "shuo", "si", "song", "sou", "su", "suan", "sui", "sun", "suo", "ta", "tai", "tan", "tang", "tao", "te", - "teng", "ti", "tian", "tiao", "tie", "ting", "tong", "tou", "tu", "tuan", "tui", "tun", "tuo", "wa", "wai", "wan", - "wang", "wei", "wen", "weng", "wo", "wu", "xi", "xia", "xian", "xiang", "xiao", "xie", "xin", "xing", "xiong", "xiu", - "xu", "xuan", "xue", "xun", "ya", "yan", "yang", "yao", "ye", "yi", "yin", "ying", "yong", "you", "yu", "yuan", - "yue", "yun", "za", "zai", "zan", "zang", "zao", "ze", "zei", "zen", "zeng", "zha", "zhai", "zhan", "zhang", "zhao", - "zhe", "zhei", "zhen", "zheng", "zhi", "zhong", "zhou", "zhu", "zhua", "zhuai", "zhuan", "zhuang", "zhui", "zhun", "zhuo", "zi", - "zong", "zou", "zuan", "zui", "zun", "zuo", "zu", - ), - list( - "al", "an", "ar", "as", "at", "ea", "ed", "en", "er", "es", "ha", "he", "hi", "in", "is", "it", - "le", "me", "nd", "ne", "ng", "nt", "on", "or", "ou", "re", "se", "st", "te", "th", "ti", "to", - "ve", "wa", "all", "and", "are", "but", "ent", "era", "ere", "eve", "for", "had", "hat", "hen", "her", "hin", - "his", "ing", "ion", "ith", "not", "ome", "oul", "our", "sho", "ted", "ter", "tha", "the", "thi", - ), -) + // Default namelist is the human namelist, and common is the human language, so might as well. + // Feel free to remove this at some point because common can generate some pretty cool names. + always_use_default_namelist = TRUE + /** + * This list really long, mainly because I can't make up my mind about which mandarin syllables should be removed, + * and the english syllables had to be duplicated so that there is roughly a 50-50 weighting. + * + * Sources: + * http://www.sttmedia.com/syllablefrequency-english + * http://www.chinahighlights.com/travelguide/learning-chinese/pinyin-syllables.htm + */ + syllables = list( + // each sublist has an equal chance of being picked, so each syllable has an equal chance of being english or chinese + list( + "a", "ai", "an", "ang", "ao", "ba", "bai", "ban", "bang", "bao", "bei", "ben", "beng", "bi", "bian", "biao", + "bie", "bin", "bing", "bo", "bu", "ca", "cai", "can", "cang", "cao", "ce", "cei", "cen", "ceng", "cha", "chai", + "chan", "chang", "chao", "che", "chen", "cheng", "chi", "chong", "chou", "chu", "chua", "chuai", "chuan", "chuang", "chui", "chun", + "chuo", "ci", "cong", "cou", "cu", "cuan", "cui", "cun", "cuo", "da", "dai", "dan", "dang", "dao", "de", "dei", + "den", "deng", "di", "dian", "diao", "die", "ding", "diu", "dong", "dou", "du", "duan", "dui", "dun", "duo", "e", + "ei", "en", "er", "fa", "fan", "fang", "fei", "fen", "feng", "fo", "fou", "fu", "ga", "gai", "gan", "gang", + "gao", "ge", "gei", "gen", "geng", "gong", "gou", "gu", "gua", "guai", "guan", "guang", "gui", "gun", "guo", "ha", + "hai", "han", "hang", "hao", "he", "hei", "hen", "heng", "hm", "hng", "hong", "hou", "hu", "hua", "huai", "huan", + "huang", "hui", "hun", "huo", "ji", "jia", "jian", "jiang", "jiao", "jie", "jin", "jing", "jiong", "jiu", "ju", "juan", + "jue", "jun", "ka", "kai", "kan", "kang", "kao", "ke", "kei", "ken", "keng", "kong", "kou", "ku", "kua", "kuai", + "kuan", "kuang", "kui", "kun", "kuo", "la", "lai", "lan", "lang", "lao", "le", "lei", "leng", "li", "lia", "lian", + "liang", "liao", "lie", "lin", "ling", "liu", "long", "lou", "lu", "luan", "lun", "luo", "ma", "mai", "man", "mang", + "mao", "me", "mei", "men", "meng", "mi", "mian", "miao", "mie", "min", "ming", "miu", "mo", "mou", "mu", "na", + "nai", "nan", "nang", "nao", "ne", "nei", "nen", "neng", "ng", "ni", "nian", "niang", "niao", "nie", "nin", "ning", + "niu", "nong", "nou", "nu", "nuan", "nuo", "o", "ou", "pa", "pai", "pan", "pang", "pao", "pei", "pen", "peng", + "pi", "pian", "piao", "pie", "pin", "ping", "po", "pou", "pu", "qi", "qia", "qian", "qiang", "qiao", "qie", "qin", + "qing", "qiong", "qiu", "qu", "quan", "que", "qun", "ran", "rang", "rao", "re", "ren", "reng", "ri", "rong", "rou", + "ru", "rua", "ruan", "rui", "run", "ruo", "sa", "sai", "san", "sang", "sao", "se", "sei", "sen", "seng", "sha", + "shai", "shan", "shang", "shao", "she", "shei", "shen", "sheng", "shi", "shou", "shu", "shua", "shuai", "shuan", "shuang", "shui", + "shun", "shuo", "si", "song", "sou", "su", "suan", "sui", "sun", "suo", "ta", "tai", "tan", "tang", "tao", "te", + "teng", "ti", "tian", "tiao", "tie", "ting", "tong", "tou", "tu", "tuan", "tui", "tun", "tuo", "wa", "wai", "wan", + "wang", "wei", "wen", "weng", "wo", "wu", "xi", "xia", "xian", "xiang", "xiao", "xie", "xin", "xing", "xiong", "xiu", + "xu", "xuan", "xue", "xun", "ya", "yan", "yang", "yao", "ye", "yi", "yin", "ying", "yong", "you", "yu", "yuan", + "yue", "yun", "za", "zai", "zan", "zang", "zao", "ze", "zei", "zen", "zeng", "zha", "zhai", "zhan", "zhang", "zhao", + "zhe", "zhei", "zhen", "zheng", "zhi", "zhong", "zhou", "zhu", "zhua", "zhuai", "zhuan", "zhuang", "zhui", "zhun", "zhuo", "zi", + "zong", "zou", "zuan", "zui", "zun", "zuo", "zu", + ), + list( + "al", "an", "ar", "as", "at", "ea", "ed", "en", "er", "es", "ha", "he", "hi", "in", "is", "it", + "le", "me", "nd", "ne", "ng", "nt", "on", "or", "ou", "re", "se", "st", "te", "th", "ti", "to", + "ve", "wa", "all", "and", "are", "but", "ent", "era", "ere", "eve", "for", "had", "hat", "hen", "her", "hin", + "his", "ing", "ion", "ith", "not", "ome", "oul", "our", "sho", "ted", "ter", "tha", "the", "thi", + ), + ) diff --git a/code/modules/language/draconic.dm b/code/modules/language/draconic.dm index f812c8dc1311a..55ebd1ec20267 100644 --- a/code/modules/language/draconic.dm +++ b/code/modules/language/draconic.dm @@ -13,5 +13,25 @@ "ra", "ar", "re", "er", "ri", "ir", "ro", "or", "ru", "ur", "rs", "sr", "a", "a", "e", "e", "i", "i", "o", "o", "u", "u", "s", "s" ) + special_characters = list("-") icon_state = "lizard" default_priority = 90 + default_name_syllable_min = 3 + default_name_syllable_max = 5 + random_name_spacer = "-" + +/datum/language/draconic/get_random_name( + gender = NEUTER, + name_count = default_name_count, + syllable_min = default_name_syllable_min, + syllable_max = default_name_syllable_max, + force_use_syllables = FALSE, +) + if(force_use_syllables) + return ..() + if(gender != MALE) + gender = pick(MALE, FEMALE) + + if(gender == MALE) + return "[pick(GLOB.lizard_names_male)][random_name_spacer][pick(GLOB.lizard_names_male)]" + return "[pick(GLOB.lizard_names_female)][random_name_spacer][pick(GLOB.lizard_names_female)]" diff --git a/code/modules/language/drone.dm b/code/modules/language/drone.dm index 5b47533d45e3a..09fb6546e4a16 100644 --- a/code/modules/language/drone.dm +++ b/code/modules/language/drone.dm @@ -11,3 +11,4 @@ default_priority = 20 icon_state = "drone" + always_use_default_namelist = TRUE // Nonsense language diff --git a/code/modules/language/language.dm b/code/modules/language/language.dm deleted file mode 100644 index 9fc2abf0f5a9f..0000000000000 --- a/code/modules/language/language.dm +++ /dev/null @@ -1,107 +0,0 @@ -#define SCRAMBLE_CACHE_LEN 50 //maximum of 50 specific scrambled lines per language - -/* - Datum based languages. Easily editable and modular. -*/ - -/datum/language - var/name = "an unknown language" // Fluff name of language if any. - var/desc = "A language." // Short description for 'Check Languages'. - var/key // Character used to speak in language - // If key is null, then the language isn't real or learnable. - var/flags // Various language flags. - var/list/syllables // Used when scrambling text for a non-speaker. - var/sentence_chance = 5 // Likelihood of making a new sentence after each syllable. - var/space_chance = 55 // Likelihood of getting a space in the random scramble string - var/list/spans = list() - var/list/scramble_cache = list() - var/default_priority = 0 // the language that an atom knows with the highest "default_priority" is selected by default. - - // if you are seeing someone speak popcorn language, then something is wrong. - var/icon = 'icons/misc/language.dmi' - var/icon_state = "popcorn" - -/datum/language/proc/display_icon(atom/movable/hearer) - var/understands = hearer.has_language(src.type) - if(flags & LANGUAGE_HIDE_ICON_IF_UNDERSTOOD && understands) - return FALSE - if(flags & LANGUAGE_HIDE_ICON_IF_NOT_UNDERSTOOD && !understands) - return FALSE - return TRUE - -/datum/language/proc/get_icon() - var/datum/asset/spritesheet/sheet = get_asset_datum(/datum/asset/spritesheet/chat) - return sheet.icon_tag("language-[icon_state]") - -/datum/language/proc/get_random_name(gender, name_count=2, syllable_count=4, syllable_divisor=2) - if(!syllables || !syllables.len) - if(gender == FEMALE) - return capitalize(pick(GLOB.first_names_female)) + " " + capitalize(pick(GLOB.last_names)) - else - return capitalize(pick(GLOB.first_names_male)) + " " + capitalize(pick(GLOB.last_names)) - - var/full_name = "" - var/new_name = "" - - for(var/i in 0 to name_count) - new_name = "" - var/Y = rand(FLOOR(syllable_count/syllable_divisor, 1), syllable_count) - for(var/x in Y to 0) - new_name += pick_weight_recursive(syllables) - full_name += " [capitalize(LOWER_TEXT(new_name))]" - - return "[trim(full_name)]" - -/datum/language/proc/check_cache(input) - var/lookup = scramble_cache[input] - if(lookup) - scramble_cache -= input - scramble_cache[input] = lookup - . = lookup - -/datum/language/proc/add_to_cache(input, scrambled_text) - // Add it to cache, cutting old entries if the list is too long - scramble_cache[input] = scrambled_text - if(scramble_cache.len > SCRAMBLE_CACHE_LEN) - scramble_cache.Cut(1, scramble_cache.len-SCRAMBLE_CACHE_LEN-1) - -/datum/language/proc/scramble(input) - - if(!syllables || !syllables.len) - return stars(input) - - // If the input is cached already, move it to the end of the cache and return it - var/lookup = check_cache(input) - if(lookup) - return lookup - - var/input_size = length_char(input) - var/scrambled_text = "" - var/capitalize = TRUE - - while(length_char(scrambled_text) < input_size) - var/next = pick_weight_recursive(syllables) - if(capitalize) - next = capitalize(next) - capitalize = FALSE - scrambled_text += next - var/chance = rand(100) - if(chance <= sentence_chance) - scrambled_text += ". " - capitalize = TRUE - else if(chance > sentence_chance && chance <= space_chance) - scrambled_text += " " - - scrambled_text = trim(scrambled_text) - var/ending = copytext_char(scrambled_text, -1) - if(ending == ".") - scrambled_text = copytext_char(scrambled_text, 1, -2) - var/input_ending = copytext_char(input, -1) - if(input_ending in list("!","?",".")) - scrambled_text += input_ending - - add_to_cache(input, scrambled_text) - - return scrambled_text - -#undef SCRAMBLE_CACHE_LEN diff --git a/code/modules/language/machine.dm b/code/modules/language/machine.dm index 36962a712a1b5..4be282a5e2812 100644 --- a/code/modules/language/machine.dm +++ b/code/modules/language/machine.dm @@ -14,7 +14,16 @@ icon_state = "eal" -/datum/language/machine/get_random_name() +/datum/language/machine/get_random_name( + gender = NEUTER, + name_count = 2, + syllable_min = 2, + syllable_max = 4, + unique = FALSE, + force_use_syllables = FALSE, +) + if(force_use_syllables) + return ..() if(prob(70)) return "[pick(GLOB.posibrain_names)]-[rand(100, 999)]" return pick(GLOB.ai_names) diff --git a/code/modules/language/moffic.dm b/code/modules/language/moffic.dm index 1d0aea96697fb..fb8dea63dcc83 100644 --- a/code/modules/language/moffic.dm +++ b/code/modules/language/moffic.dm @@ -13,4 +13,20 @@ icon_state = "moth" default_priority = 90 + default_name_syllable_min = 5 + default_name_syllable_max = 10 + +/datum/language/moffic/get_random_name( + gender = NEUTER, + name_count = default_name_count, + syllable_min = default_name_syllable_min, + syllable_max = default_name_syllable_max, + force_use_syllables = FALSE, +) + if(force_use_syllables) + return ..() + + return "[pick(GLOB.moth_first)] [pick(GLOB.moth_last)]" + + // Fuck guest accounts, and fuck language testing. diff --git a/code/modules/language/monkey.dm b/code/modules/language/monkey.dm index e44f6a6268e25..423e94f22bd8c 100644 --- a/code/modules/language/monkey.dm +++ b/code/modules/language/monkey.dm @@ -7,3 +7,12 @@ default_priority = 80 icon_state = "animal" + +/datum/language/monkey/get_random_name( + gender = NEUTER, + name_count = 2, + syllable_min = 2, + syllable_max = 4, + force_use_syllables = FALSE, +) + return "monkey ([rand(1, 999)])" diff --git a/code/modules/language/mushroom.dm b/code/modules/language/mushroom.dm index 08d494cc04d64..910489fd6dd9e 100644 --- a/code/modules/language/mushroom.dm +++ b/code/modules/language/mushroom.dm @@ -5,3 +5,5 @@ sentence_chance = 0 default_priority = 80 syllables = list("poof", "pff", "pFfF", "piff", "puff", "pooof", "pfffff", "piffpiff", "puffpuff", "poofpoof", "pifpafpofpuf") + default_name_syllable_min = 1 + default_name_syllable_max = 2 diff --git a/code/modules/language/nekomimetic.dm b/code/modules/language/nekomimetic.dm index 82edc2afcb57a..4be943f84417a 100644 --- a/code/modules/language/nekomimetic.dm +++ b/code/modules/language/nekomimetic.dm @@ -12,3 +12,16 @@ ) icon_state = "neko" default_priority = 90 + default_name_syllable_min = 2 + default_name_syllable_max = 2 + +/datum/language/nekomimetic/get_random_name( + gender = NEUTER, + name_count = default_name_count, + syllable_min = default_name_syllable_min, + syllable_max = default_name_syllable_max, + force_use_syllables = FALSE, +) + if(prob(33)) + return default_name(gender) + return ..() diff --git a/code/modules/language/piratespeak.dm b/code/modules/language/piratespeak.dm index 5f6cb4897715d..a2faddb544f7c 100644 --- a/code/modules/language/piratespeak.dm +++ b/code/modules/language/piratespeak.dm @@ -10,3 +10,4 @@ "shiver", "timbers", "matey", "swashbuckler" ) icon_state = "pirate" + always_use_default_namelist = TRUE diff --git a/code/modules/language/shadowtongue.dm b/code/modules/language/shadowtongue.dm index 9c0adb5eea3ff..351589393856b 100644 --- a/code/modules/language/shadowtongue.dm +++ b/code/modules/language/shadowtongue.dm @@ -16,3 +16,5 @@ ) icon_state = "shadow" default_priority = 90 + default_name_syllable_min = 2 + default_name_syllable_max = 3 diff --git a/code/modules/language/slime.dm b/code/modules/language/slime.dm index fcb471774118a..15960898673d6 100644 --- a/code/modules/language/slime.dm +++ b/code/modules/language/slime.dm @@ -2,7 +2,8 @@ name = "Slime" desc = "A melodic and complex language spoken by slimes. Some of the notes are inaudible to humans." key = "k" - syllables = list("qr","qrr","xuq","qil","quum","xuqm","vol","xrim","zaoo","qu-uu","qix","qoo","zix","*","!") + syllables = list("qr","qrr","xuq","qil","quum","xuqm","vol","xrim","zaoo","qu-uu","qix","qoo","zix") + special_characters = list("!","*") default_priority = 70 icon_state = "slime" diff --git a/code/modules/language/sylvan.dm b/code/modules/language/sylvan.dm index 68cb73f9d525a..4f66fb5931c1a 100644 --- a/code/modules/language/sylvan.dm +++ b/code/modules/language/sylvan.dm @@ -13,3 +13,5 @@ ) icon_state = "plant" default_priority = 90 + default_name_syllable_min = 2 + default_name_syllable_max = 3 diff --git a/code/modules/language/terrum.dm b/code/modules/language/terrum.dm index 361106ed16c93..63b527202f4ca 100644 --- a/code/modules/language/terrum.dm +++ b/code/modules/language/terrum.dm @@ -7,8 +7,25 @@ "sha", "vu", "nah", "ha", "yom", "ma", "cha", "ar", "et", "mol", "lua", "ch", "na", "sh", "ni", "yah", "bes", "ol", "hish", "ev", "la", "ot", "la", "khe", "tza", "chak", "hak", "hin", "hok", "lir", "tov", "yef", "yfe", - "cho", "ar", "kas", "kal", "ra", "lom", "im", "'", "'", "'", "'", "bok", + "cho", "ar", "kas", "kal", "ra", "lom", "im", "bok", "erev", "shlo", "lo", "ta", "im", "yom" ) + special_characters = list("'") icon_state = "golem" default_priority = 90 + +/datum/language/terrum/get_random_name( + gender = NEUTER, + name_count = default_name_count, + syllable_min = default_name_syllable_min, + syllable_max = default_name_syllable_max, + force_use_syllables = FALSE, +) + if(force_use_syllables) + return ..() + + var/name = pick(GLOB.golem_names) + // 3% chance to be given a human surname for "lore reasons" + if (prob(3)) + name += " [pick(GLOB.last_names)]" + return name diff --git a/code/modules/language/voltaic.dm b/code/modules/language/voltaic.dm index 40fa9dcb1e826..90ab90dbe48e0 100644 --- a/code/modules/language/voltaic.dm +++ b/code/modules/language/voltaic.dm @@ -12,3 +12,21 @@ ) icon_state = "volt" default_priority = 90 + default_name_syllable_min = 2 + default_name_syllable_max = 3 + + +/datum/language/voltaic/get_random_name( + gender = NEUTER, + name_count = default_name_count, + syllable_min = default_name_syllable_min, + syllable_max = default_name_syllable_max, + force_use_syllables = FALSE, +) + if(force_use_syllables) + return ..() + + var/picked = "[pick(GLOB.ethereal_names)] [random_capital_letter()]" + if(prob(65)) + picked += random_capital_letter() + return picked diff --git a/code/modules/language/xenocommon.dm b/code/modules/language/xenocommon.dm index c5e6366715d8e..f4949b7d73cb4 100644 --- a/code/modules/language/xenocommon.dm +++ b/code/modules/language/xenocommon.dm @@ -6,3 +6,4 @@ default_priority = 50 icon_state = "xeno" + always_use_default_namelist = TRUE // Sssss Ssss? diff --git a/code/modules/library/bibles.dm b/code/modules/library/bibles.dm index 31630c550a1d5..39abe7baa509b 100644 --- a/code/modules/library/bibles.dm +++ b/code/modules/library/bibles.dm @@ -269,70 +269,59 @@ GLOBAL_LIST_INIT(bibleitemstates, list( playsound(target_mob, SFX_PUNCH, 25, TRUE, -1) log_combat(user, target_mob, "attacked", src) -/obj/item/book/bible/attackby_storage_insert(datum/storage, atom/storage_holder, mob/user) +/obj/item/book/bible/storage_insert_on_interaction(datum/storage, atom/storage_holder, mob/user) return !istype(storage_holder, /obj/item/book/bible) -/obj/item/book/bible/afterattack(atom/bible_smacked, mob/user, proximity_flag, click_parameters) - . = ..() - if(!proximity_flag) - return - if(SEND_SIGNAL(bible_smacked, COMSIG_BIBLE_SMACKED, user, proximity_flag, click_parameters) & COMSIG_END_BIBLE_CHAIN) - return . | AFTERATTACK_PROCESSED_ITEM +/obj/item/book/bible/interact_with_atom(atom/bible_smacked, mob/living/user, list/modifiers) + if(SEND_SIGNAL(bible_smacked, COMSIG_BIBLE_SMACKED, user) & COMSIG_END_BIBLE_CHAIN) + return ITEM_INTERACT_SUCCESS if(isfloorturf(bible_smacked)) if(user.mind?.holy_role) var/area/current_area = get_area(bible_smacked) if(!GLOB.chaplain_altars.len && istype(current_area, /area/station/service/chapel)) make_new_altar(bible_smacked, user) - return + return ITEM_INTERACT_SUCCESS for(var/obj/effect/rune/nearby_runes in range(2, user)) nearby_runes.SetInvisibility(INVISIBILITY_NONE, id=type, priority=INVISIBILITY_PRIORITY_BASIC_ANTI_INVISIBILITY) bible_smacked.balloon_alert(user, "floor smacked!") + return ITEM_INTERACT_SUCCESS if(user.mind?.holy_role) - if(bible_smacked.reagents && bible_smacked.reagents.has_reagent(/datum/reagent/water)) // blesses all the water in the holder - . |= AFTERATTACK_PROCESSED_ITEM + if(bible_smacked.reagents?.has_reagent(/datum/reagent/water)) // blesses all the water in the holder bible_smacked.balloon_alert(user, "blessed") var/water2holy = bible_smacked.reagents.get_reagent_amount(/datum/reagent/water) bible_smacked.reagents.del_reagent(/datum/reagent/water) bible_smacked.reagents.add_reagent(/datum/reagent/water/holywater,water2holy) - if(bible_smacked.reagents && bible_smacked.reagents.has_reagent(/datum/reagent/fuel/unholywater)) // yeah yeah, copy pasted code - sue me - . |= AFTERATTACK_PROCESSED_ITEM + . = ITEM_INTERACT_SUCCESS + if(bible_smacked.reagents?.has_reagent(/datum/reagent/fuel/unholywater)) // yeah yeah, copy pasted code - sue me bible_smacked.balloon_alert(user, "purified") var/unholy2holy = bible_smacked.reagents.get_reagent_amount(/datum/reagent/fuel/unholywater) bible_smacked.reagents.del_reagent(/datum/reagent/fuel/unholywater) bible_smacked.reagents.add_reagent(/datum/reagent/water/holywater,unholy2holy) + . = ITEM_INTERACT_SUCCESS if(istype(bible_smacked, /obj/item/book/bible) && !istype(bible_smacked, /obj/item/book/bible/syndicate)) - . |= AFTERATTACK_PROCESSED_ITEM bible_smacked.balloon_alert(user, "converted") var/obj/item/book/bible/other_bible = bible_smacked other_bible.name = name other_bible.icon_state = icon_state other_bible.inhand_icon_state = inhand_icon_state other_bible.deity_name = deity_name + . = ITEM_INTERACT_SUCCESS + if(.) + return . - if(istype(bible_smacked, /obj/item/cult_bastard) && !IS_CULTIST(user)) - . |= AFTERATTACK_PROCESSED_ITEM - var/obj/item/cult_bastard/sword = bible_smacked - bible_smacked.balloon_alert(user, "exorcising...") + if(istype(bible_smacked, /obj/item/melee/cultblade/haunted) && !IS_CULTIST(user)) + var/obj/item/melee/cultblade/haunted/sword = bible_smacked + sword.balloon_alert(user, "exorcising...") playsound(src,'sound/hallucinations/veryfar_noise.ogg',40,TRUE) if(do_after(user, 4 SECONDS, target = sword)) playsound(src,'sound/effects/pray_chaplain.ogg',60,TRUE) - for(var/obj/item/soulstone/stone in sword.contents) - stone.required_role = null - for(var/mob/living/basic/shade/shade in stone) - var/datum/antagonist/cult/cultist = shade.mind.has_antag_datum(/datum/antagonist/cult) - if(cultist) - cultist.silent = TRUE - cultist.on_removal() - SSblackbox.record_feedback("tally", "cult_shade_purified", 1) - shade.theme = THEME_HOLY - shade.name = "Purified [shade.real_name]" - shade.update_appearance(UPDATE_ICON_STATE) - stone.release_shades(user) - qdel(stone) new /obj/item/nullrod/claymore(get_turf(sword)) user.visible_message(span_notice("[user] exorcises [sword]!")) qdel(sword) + return ITEM_INTERACT_SUCCESS + return ITEM_INTERACT_BLOCKING + return NONE /obj/item/book/bible/booze desc = "To be applied to the head repeatedly." diff --git a/code/modules/library/book.dm b/code/modules/library/book.dm index 19b65f82489ea..5ae9afcdcbe49 100644 --- a/code/modules/library/book.dm +++ b/code/modules/library/book.dm @@ -101,7 +101,7 @@ if(burn_paper_product_attackby_check(attacking_item, user)) return - if(istype(attacking_item, /obj/item/pen)) + if(IS_WRITING_UTENSIL(attacking_item)) if(!user.can_perform_action(src) || !user.can_write(attacking_item)) return if(user.is_blind()) diff --git a/code/modules/library/bookcase.dm b/code/modules/library/bookcase.dm index 822e4ae583c97..16925dd5138e7 100644 --- a/code/modules/library/bookcase.dm +++ b/code/modules/library/bookcase.dm @@ -130,7 +130,7 @@ atom_storage.attempt_remove(T, src) to_chat(user, span_notice("You empty \the [I] into \the [src].")) update_appearance() - else if(istype(I, /obj/item/pen)) + else if(IS_WRITING_UTENSIL(I)) if(!user.can_perform_action(src) || !user.can_write(I)) return var/newname = tgui_input_text(user, "What would you like to title this bookshelf?", "Bookshelf Renaming", max_length = MAX_NAME_LEN) diff --git a/code/modules/library/lib_machines.dm b/code/modules/library/lib_machines.dm index 2a4137da0c8a0..a65159a3f8225 100644 --- a/code/modules/library/lib_machines.dm +++ b/code/modules/library/lib_machines.dm @@ -688,11 +688,22 @@ GLOBAL_VAR_INIT(library_table_modified, 0) icon = 'icons/obj/service/library.dmi' icon_state = "bigscanner" desc = "It's an industrial strength book scanner. Perfect!" + circuit = /obj/item/circuitboard/machine/libraryscanner density = TRUE var/obj/item/book/held_book ///Our scanned-in book var/datum/book_info/cache +/obj/machinery/libraryscanner/screwdriver_act(mob/living/user, obj/item/tool) + . = ..() + if(default_deconstruction_screwdriver(user, "bigscanner2", "bigscanner", tool)) + return ITEM_INTERACT_SUCCESS + +/obj/machinery/libraryscanner/crowbar_act(mob/living/user, obj/item/tool) + . = ..() + if(default_deconstruction_crowbar(tool)) + return ITEM_INTERACT_SUCCESS + /obj/machinery/libraryscanner/Destroy() held_book = null cache = null @@ -760,6 +771,7 @@ GLOBAL_VAR_INIT(library_table_modified, 0) icon = 'icons/obj/service/library.dmi' icon_state = "binder" desc = "Only intended for binding paper products." + circuit = /obj/item/circuitboard/machine/bookbinder density = TRUE /// Are we currently binding a book? @@ -768,10 +780,15 @@ GLOBAL_VAR_INIT(library_table_modified, 0) /// Name of the author for the book, set by scanning your ID. var/scanned_name -/obj/machinery/bookbinder/wrench_act(mob/living/user, obj/item/tool) +/obj/machinery/bookbinder/screwdriver_act(mob/living/user, obj/item/tool) + . = ..() + if(default_deconstruction_screwdriver(user, "binder2", "binder", tool)) + return ITEM_INTERACT_SUCCESS + +/obj/machinery/bookbinder/crowbar_act(mob/living/user, obj/item/tool) . = ..() - default_unfasten_wrench(user, tool) - return ITEM_INTERACT_SUCCESS + if(default_deconstruction_crowbar(tool)) + return ITEM_INTERACT_SUCCESS /obj/machinery/bookbinder/attackby(obj/hitby, mob/user, params) if(istype(hitby, /obj/item/paper)) diff --git a/code/modules/library/skill_learning/job_skillchips/research_director.dm b/code/modules/library/skill_learning/generic_skillchips/rod_suplex.dm similarity index 62% rename from code/modules/library/skill_learning/job_skillchips/research_director.dm rename to code/modules/library/skill_learning/generic_skillchips/rod_suplex.dm index 899defb1fd5af..bff83423be73e 100644 --- a/code/modules/library/skill_learning/job_skillchips/research_director.dm +++ b/code/modules/library/skill_learning/generic_skillchips/rod_suplex.dm @@ -1,9 +1,12 @@ -/obj/item/skillchip/job/research_director +/obj/item/skillchip/research_director name = "R.D.S.P.L.X. skillchip" desc = "Knowledge of how to solve the ancient conumdrum; what happens when an unstoppable force meets an immovable object." - auto_traits = list(TRAIT_ROD_SUPLEX) + auto_traits = list(TRAIT_ROD_SUPLEX, TRAIT_STRENGTH) skill_name = "True Strength" skill_description = "The knowledge and strength to resolve the most ancient conumdrum; what happens when an unstoppable force meets an immovable object." skill_icon = "dumbbell" - activate_message = "You realise if you apply the correct force, at the correct angle, it is possible to make the immovable permanently movable." - deactivate_message = "You forget how to permanently anchor a paradoxical object." + activate_message = "You realise if you apply the correct force, at the correct angle, it is possible to make the immovable permanently movable. And... damn, you look huge." + deactivate_message = "You forget how to permanently anchor a paradoxical object. Also, you should really hit the gym..." + chip_category = SKILLCHIP_CATEGORY_GENERAL + skillchip_flags = NONE + slot_use = 1 diff --git a/code/modules/library/skill_learning/job_skillchips/_job.dm b/code/modules/library/skill_learning/job_skillchips/_job.dm index 87f2d47ac9cd5..23381d06066b2 100644 --- a/code/modules/library/skill_learning/job_skillchips/_job.dm +++ b/code/modules/library/skill_learning/job_skillchips/_job.dm @@ -1,11 +1,6 @@ -/// Job related skillchip category -#define SKILLCHIP_CATEGORY_JOB "job" - /obj/item/skillchip/job skillchip_flags = SKILLCHIP_RESTRICTED_CATEGORIES chip_category = SKILLCHIP_CATEGORY_JOB incompatibility_list = list(SKILLCHIP_CATEGORY_JOB) abstract_parent_type = /obj/item/skillchip/job slot_use = 2 - -#undef SKILLCHIP_CATEGORY_JOB diff --git a/code/modules/library/skill_learning/job_skillchips/detective.dm b/code/modules/library/skill_learning/job_skillchips/detective.dm new file mode 100644 index 0000000000000..427b8566e7e1f --- /dev/null +++ b/code/modules/library/skill_learning/job_skillchips/detective.dm @@ -0,0 +1,9 @@ +/obj/item/skillchip/job/detectives_taste + name = "DET.ekt skillchip" + desc = "Detective \"Encyclopedic Knowledge of Tastes\" v1.21" + auto_traits = list(TRAIT_DETECTIVES_TASTE) + skill_name = "Detective's Taste" + skill_description = "Deduce the minute chemical compositions of any liquid substance just by swishing it around your mouth for a bit." + skill_icon = "vial" + activate_message = span_notice("An explosion of flavors hit your mouth as you remember the secret tastebuds long forgotten.") + deactivate_message = span_notice("Your mouth dulls to the hidden tastes of the world.") diff --git a/code/modules/library/skill_learning/skillchip.dm b/code/modules/library/skill_learning/skillchip.dm index 9657a33052729..ae40b84c64be9 100644 --- a/code/modules/library/skill_learning/skillchip.dm +++ b/code/modules/library/skill_learning/skillchip.dm @@ -1,10 +1,3 @@ -// Skillchip categories -//Various skillchip categories. Use these when setting which categories a skillchip restricts being paired with -//while using the SKILLCHIP_RESTRICTED_CATEGORIES flag -/// General related skillchip category -#define SKILLCHIP_CATEGORY_GENERAL "general" - - /obj/item/skillchip name = "skillchip" desc = "This biochip integrates with user's brain to enable mastery of specific skill. Consult certified Nanotrasen neurosurgeon before use." @@ -531,5 +524,3 @@ ADD_TRAIT(source, TRAIT_UNHITTABLE_BY_PROJECTILES, SKILLCHIP_TRAIT) source.adjustStaminaLoss(20) addtimer(TRAIT_CALLBACK_REMOVE(source, TRAIT_UNHITTABLE_BY_PROJECTILES, SKILLCHIP_TRAIT), FLIP_EMOTE_DURATION + 0.1 SECONDS) - -#undef SKILLCHIP_CATEGORY_GENERAL diff --git a/code/modules/loadout/categories/accessories.dm b/code/modules/loadout/categories/accessories.dm new file mode 100644 index 0000000000000..0dd655358bd68 --- /dev/null +++ b/code/modules/loadout/categories/accessories.dm @@ -0,0 +1,92 @@ +/// Accessory Items (Moves overrided items to backpack) +/datum/loadout_category/accessories + category_name = "Accessory" + category_ui_icon = FA_ICON_VEST + type_to_generate = /datum/loadout_item/accessory + tab_order = /datum/loadout_category/head::tab_order + 3 + +/datum/loadout_item/accessory + abstract_type = /datum/loadout_item/accessory + /// Can we adjust this accessory to be above or below suits? + VAR_FINAL/can_be_layer_adjusted = FALSE + +/datum/loadout_item/accessory/New() + . = ..() + if(ispath(item_path, /obj/item/clothing/accessory)) + can_be_layer_adjusted = TRUE + +/datum/loadout_item/accessory/get_ui_buttons() + if(!can_be_layer_adjusted) + return ..() + + var/list/buttons = ..() + + UNTYPED_LIST_ADD(buttons, list( + "label" = "Layer", + "act_key" = "set_layer", + "active_key" = INFO_LAYER, + "active_text" = "Above Suit", + "inactive_text" = "Below Suit", + )) + + return buttons + +/datum/loadout_item/accessory/handle_loadout_action(datum/preference_middleware/loadout/manager, mob/user, action, params) + if(action == "set_layer") + return set_accessory_layer(manager, user) + + return ..() + +/datum/loadout_item/accessory/proc/set_accessory_layer(datum/preference_middleware/loadout/manager, mob/user) + if(!can_be_layer_adjusted) + return FALSE + + var/list/loadout = manager.preferences.read_preference(/datum/preference/loadout) + if(!loadout?[item_path]) + return FALSE + + if(isnull(loadout[item_path][INFO_LAYER])) + loadout[item_path][INFO_LAYER] = FALSE + + loadout[item_path][INFO_LAYER] = !loadout[item_path][INFO_LAYER] + manager.preferences.update_preference(GLOB.preference_entries[/datum/preference/loadout], loadout) + return TRUE // Update UI + +/datum/loadout_item/accessory/insert_path_into_outfit(datum/outfit/outfit, mob/living/carbon/human/equipper, visuals_only = FALSE) + if(outfit.accessory) + LAZYADD(outfit.backpack_contents, outfit.accessory) + outfit.accessory = item_path + +/datum/loadout_item/accessory/on_equip_item( + obj/item/clothing/accessory/equipped_item, + datum/preferences/preference_source, + list/preference_list, + mob/living/carbon/human/equipper, + visuals_only = FALSE, +) + . = ..() + if(istype(equipped_item)) + equipped_item.above_suit = !!preference_list[item_path]?[INFO_LAYER] + . |= (ITEM_SLOT_OCLOTHING|ITEM_SLOT_ICLOTHING) + +/datum/loadout_item/accessory/maid_apron + name = "Maid Apron" + item_path = /obj/item/clothing/accessory/maidapron + +/datum/loadout_item/accessory/waistcoat + name = "Waistcoat" + item_path = /obj/item/clothing/accessory/waistcoat + +/datum/loadout_item/accessory/pocket_protector + name = "Pocket Protector" + item_path = /obj/item/clothing/accessory/pocketprotector + +/datum/loadout_item/accessory/full_pocket_protector + name = "Pocket Protector (Filled)" + item_path = /obj/item/clothing/accessory/pocketprotector/full + additional_displayed_text = list("Contains pens") + +/datum/loadout_item/accessory/pride + name = "Pride Pin" + item_path = /obj/item/clothing/accessory/pride + can_be_reskinned = TRUE diff --git a/code/modules/loadout/categories/glasses.dm b/code/modules/loadout/categories/glasses.dm new file mode 100644 index 0000000000000..5b8ff85620005 --- /dev/null +++ b/code/modules/loadout/categories/glasses.dm @@ -0,0 +1,55 @@ +/// Glasses Slot Items (Moves overrided items to backpack) +/datum/loadout_category/glasses + category_name = "Glasses" + category_ui_icon = FA_ICON_GLASSES + type_to_generate = /datum/loadout_item/glasses + tab_order = /datum/loadout_category/head::tab_order + 1 + +/datum/loadout_item/glasses + abstract_type = /datum/loadout_item/glasses + +/datum/loadout_item/glasses/insert_path_into_outfit(datum/outfit/outfit, mob/living/carbon/human/equipper, visuals_only = FALSE) + if(outfit.glasses) + LAZYADD(outfit.backpack_contents, outfit.glasses) + outfit.glasses = item_path + +/datum/loadout_item/glasses/prescription_glasses + name = "Glasses" + item_path = /obj/item/clothing/glasses/regular + additional_displayed_text = list("Prescription") + +/datum/loadout_item/glasses/prescription_glasses/circle_glasses + name = "Circle Glasses" + item_path = /obj/item/clothing/glasses/regular/circle + +/datum/loadout_item/glasses/prescription_glasses/hipster_glasses + name = "Hipster Glasses" + item_path = /obj/item/clothing/glasses/regular/hipster + +/datum/loadout_item/glasses/prescription_glasses/jamjar_glasses + name = "Jamjar Glasses" + item_path = /obj/item/clothing/glasses/regular/jamjar + +/datum/loadout_item/glasses/black_blindfold + name = "Black Blindfold" + item_path = /obj/item/clothing/glasses/blindfold + +/datum/loadout_item/glasses/cold_glasses + name = "Cold Glasses" + item_path = /obj/item/clothing/glasses/cold + +/datum/loadout_item/glasses/heat_glasses + name = "Heat Glasses" + item_path = /obj/item/clothing/glasses/heat + +/datum/loadout_item/glasses/orange_glasses + name = "Orange Glasses" + item_path = /obj/item/clothing/glasses/orange + +/datum/loadout_item/glasses/red_glasses + name = "Red Glasses" + item_path = /obj/item/clothing/glasses/red + +/datum/loadout_item/glasses/eyepatch + name = "Eyepatch" + item_path = /obj/item/clothing/glasses/eyepatch diff --git a/code/modules/loadout/categories/heads.dm b/code/modules/loadout/categories/heads.dm new file mode 100644 index 0000000000000..6b939495684ba --- /dev/null +++ b/code/modules/loadout/categories/heads.dm @@ -0,0 +1,138 @@ +/// Head Slot Items (Deletes overrided items) +/datum/loadout_category/head + category_name = "Head" + category_ui_icon = FA_ICON_HAT_COWBOY + type_to_generate = /datum/loadout_item/head + tab_order = 1 + +/datum/loadout_item/head + abstract_type = /datum/loadout_item/head + +/datum/loadout_item/head/insert_path_into_outfit(datum/outfit/outfit, mob/living/carbon/human/equipper, visuals_only = FALSE) + if(equipper.dna?.species?.outfit_important_for_life) + if(!visuals_only) + to_chat(equipper, "Your loadout helmet was not equipped directly due to your species outfit.") + LAZYADD(outfit.backpack_contents, item_path) + else + outfit.head = item_path + +/datum/loadout_item/head/beanie + name = "Beanie (Colorable)" + item_path = /obj/item/clothing/head/beanie + +/datum/loadout_item/head/fancy_cap + name = "Fancy Hat (Colorable)" + item_path = /obj/item/clothing/head/costume/fancy + +/datum/loadout_item/head/red_beret + name = "Red Beret (Colorable)" + item_path = /obj/item/clothing/head/beret + +/datum/loadout_item/head/black_cap + name = "Cap (Black)" + item_path = /obj/item/clothing/head/soft/black + +/datum/loadout_item/head/blue_cap + name = "Cap (Blue)" + item_path = /obj/item/clothing/head/soft/blue + +/datum/loadout_item/head/delinquent_cap + name = "Cap (Delinquent)" + item_path = /obj/item/clothing/head/costume/delinquent + +/datum/loadout_item/head/green_cap + name = "Cap (Green)" + item_path = /obj/item/clothing/head/soft/green + +/datum/loadout_item/head/grey_cap + name = "Cap (Grey)" + item_path = /obj/item/clothing/head/soft/grey + +/datum/loadout_item/head/orange_cap + name = "Cap (Orange)" + item_path = /obj/item/clothing/head/soft/orange + +/datum/loadout_item/head/purple_cap + name = "Cap (Purple)" + item_path = /obj/item/clothing/head/soft/purple + +/datum/loadout_item/head/rainbow_cap + name = "Cap (Rainbow)" + item_path = /obj/item/clothing/head/soft/rainbow + +/datum/loadout_item/head/red_cap + name = "Cap (Red)" + item_path = /obj/item/clothing/head/soft/red + +/datum/loadout_item/head/white_cap + name = "Cap (White)" + item_path = /obj/item/clothing/head/soft + +/datum/loadout_item/head/yellow_cap + name = "Cap (Yellow)" + item_path = /obj/item/clothing/head/soft/yellow + +/datum/loadout_item/head/flatcap + name = "Cap (Flat)" + item_path = /obj/item/clothing/head/flatcap + +/datum/loadout_item/head/beige_fedora + name = "Fedora (Beige)" + item_path = /obj/item/clothing/head/fedora/beige + +/datum/loadout_item/head/black_fedora + name = "Fedora (Black)" + item_path = /obj/item/clothing/head/fedora + +/datum/loadout_item/head/white_fedora + name = "Fedora (White)" + item_path = /obj/item/clothing/head/fedora/white + +/datum/loadout_item/head/mail_cap + name = "Cap (Mail)" + item_path = /obj/item/clothing/head/costume/mailman + +/datum/loadout_item/head/kitty_ears + name = "Kitty Ears" + item_path = /obj/item/clothing/head/costume/kitty + +/datum/loadout_item/head/rabbit_ears + name = "Rabbit Ears" + item_path = /obj/item/clothing/head/costume/rabbitears + +/datum/loadout_item/head/bandana + name = "Bandana Thin" + item_path = /obj/item/clothing/head/costume/tmc + +/datum/loadout_item/head/rastafarian + name = "Cap (Rastafarian)" + item_path = /obj/item/clothing/head/rasta + +/datum/loadout_item/head/top_hat + name = "Top Hat" + item_path = /obj/item/clothing/head/hats/tophat + +/datum/loadout_item/head/bowler_hat + name = "Bowler Hat" + item_path = /obj/item/clothing/head/hats/bowler + +/datum/loadout_item/head/bear_pelt + name = "Bear Pelt" + item_path = /obj/item/clothing/head/costume/bearpelt + +/datum/loadout_item/head/ushanka + name ="Ushanka" + item_path = /obj/item/clothing/head/costume/ushanka + +/datum/loadout_item/head/plague_doctor + name = "Cap (Plague Doctor)" + item_path = /obj/item/clothing/head/bio_hood/plague + +/datum/loadout_item/head/rose + name = "Rose" + item_path = /obj/item/food/grown/rose + +/datum/loadout_item/head/wig + name = "Wig" + item_path = /obj/item/clothing/head/wig/natural + additional_displayed_text = list("Hair Color") diff --git a/code/modules/loadout/categories/inhands.dm b/code/modules/loadout/categories/inhands.dm new file mode 100644 index 0000000000000..8ddc15676ab32 --- /dev/null +++ b/code/modules/loadout/categories/inhands.dm @@ -0,0 +1,33 @@ +/// Inhand items (Moves overrided items to backpack) +/datum/loadout_category/inhands + category_name = "Inhand" + category_ui_icon = FA_ICON_BRIEFCASE + type_to_generate = /datum/loadout_item/inhand + tab_order = /datum/loadout_category/head::tab_order + 4 + +/datum/loadout_item/inhand + abstract_type = /datum/loadout_item/inhand + +/datum/loadout_item/inhand/insert_path_into_outfit(datum/outfit/outfit, mob/living/carbon/human/equipper, visuals_only = FALSE) + if(outfit.l_hand && !outfit.r_hand) + outfit.r_hand = item_path + else + if(outfit.l_hand) + LAZYADD(outfit.backpack_contents, outfit.l_hand) + outfit.l_hand = item_path + +/datum/loadout_item/inhand/cane + name = "Cane" + item_path = /obj/item/cane + +/datum/loadout_item/inhand/cane_white + name = "White Cane" + item_path = /obj/item/cane/white + +/datum/loadout_item/inhand/briefcase + name = "Briefcase (Leather)" + item_path = /obj/item/storage/briefcase + +/datum/loadout_item/inhand/briefcase_secure + name = "Briefcase (Secure)" + item_path = /obj/item/storage/briefcase/secure diff --git a/code/modules/loadout/categories/neck.dm b/code/modules/loadout/categories/neck.dm new file mode 100644 index 0000000000000..a48597b3b9e51 --- /dev/null +++ b/code/modules/loadout/categories/neck.dm @@ -0,0 +1,36 @@ +/// Neck Slot Items (Deletes overrided items) +/datum/loadout_category/neck + category_name = "Neck" + category_ui_icon = FA_ICON_USER_TIE + type_to_generate = /datum/loadout_item/neck + tab_order = /datum/loadout_category/head::tab_order + 2 + +/datum/loadout_item/neck + abstract_type = /datum/loadout_item/neck + +/datum/loadout_item/neck/insert_path_into_outfit(datum/outfit/outfit, mob/living/carbon/human/equipper, visuals_only = FALSE) + outfit.neck = item_path + +/datum/loadout_item/neck/scarf_greyscale + name = "Scarf (Colorable)" + item_path = /obj/item/clothing/neck/scarf + +/datum/loadout_item/neck/greyscale_large + name = "Scarf (Large, Colorable)" + item_path = /obj/item/clothing/neck/large_scarf + +/datum/loadout_item/neck/greyscale_larger + name = "Scarf (Larger, Colorable)" + item_path = /obj/item/clothing/neck/infinity_scarf + +/datum/loadout_item/neck/necktie + name = "Necktie (Colorable)" + item_path = /obj/item/clothing/neck/tie + +/datum/loadout_item/neck/necktie_disco + name = "Necktie (Ugly)" + item_path = /obj/item/clothing/neck/tie/horrible + +/datum/loadout_item/neck/necktie_loose + name = "Necktie (Loose)" + item_path = /obj/item/clothing/neck/tie/detective diff --git a/code/modules/loadout/categories/pocket.dm b/code/modules/loadout/categories/pocket.dm new file mode 100644 index 0000000000000..e1cddde76e5b9 --- /dev/null +++ b/code/modules/loadout/categories/pocket.dm @@ -0,0 +1,203 @@ +/// Pocket items (Moved to backpack) +/datum/loadout_category/pocket + category_name = "Other" + category_ui_icon = FA_ICON_QUESTION + type_to_generate = /datum/loadout_item/pocket_items + tab_order = /datum/loadout_category/head::tab_order + 5 + /// How many pocket items are allowed + VAR_PRIVATE/max_allowed = 2 + +/datum/loadout_category/pocket/New() + . = ..() + category_info = "([max_allowed] allowed)" + +/datum/loadout_category/pocket/handle_duplicate_entires( + datum/preference_middleware/loadout/manager, + datum/loadout_item/conflicting_item, + datum/loadout_item/added_item, + list/datum/loadout_item/all_loadout_items, +) + var/list/datum/loadout_item/pocket_items/other_pocket_items = list() + for(var/datum/loadout_item/pocket_items/other_pocket_item in all_loadout_items) + other_pocket_items += other_pocket_item + + if(length(other_pocket_items) >= max_allowed) + // We only need to deselect something if we're above the limit + // (And if we are we prioritize the first item found, FIFO) + manager.deselect_item(other_pocket_items[1]) + return TRUE + +/datum/loadout_item/pocket_items + abstract_type = /datum/loadout_item/pocket_items + +/datum/loadout_item/pocket_items/on_equip_item( + obj/item/equipped_item, + datum/preferences/preference_source, + list/preference_list, + mob/living/carbon/human/equipper, + visuals_only = FALSE, +) + // Backpack items aren't created if it's a visual equipping, so don't do any on equip stuff. It doesn't exist. + if(visuals_only) + return NONE + + return ..() + +/datum/loadout_item/pocket_items/lipstick_black + name = "Lipstick (Black)" + item_path = /obj/item/lipstick/black + additional_displayed_text = list("Black") + +/datum/loadout_item/pocket_items/lipstick_blue + name = "Lipstick (Blue)" + item_path = /obj/item/lipstick/blue + additional_displayed_text = list("Blue") + + +/datum/loadout_item/pocket_items/lipstick_green + name = "Lipstick (Green)" + item_path = /obj/item/lipstick/green + additional_displayed_text = list("Green") + + +/datum/loadout_item/pocket_items/lipstick_jade + name = "Lipstick (Jade)" + item_path = /obj/item/lipstick/jade + additional_displayed_text = list("Jade") + +/datum/loadout_item/pocket_items/lipstick_purple + name = "Lipstick (Purple)" + item_path = /obj/item/lipstick/purple + additional_displayed_text = list("Purple") + +/datum/loadout_item/pocket_items/lipstick_red + name = "Lipstick (Red)" + item_path = /obj/item/lipstick + additional_displayed_text = list("Red") + +/datum/loadout_item/pocket_items/lipstick_white + name = "Lipstick (White)" + item_path = /obj/item/lipstick/white + additional_displayed_text = list("White") + +/datum/loadout_item/pocket_items/plush + abstract_type = /datum/loadout_item/pocket_items/plush + can_be_named = TRUE + +/datum/loadout_item/pocket_items/plush/bee + name = "Plush (Bee)" + item_path = /obj/item/toy/plush/beeplushie + +/datum/loadout_item/pocket_items/plush/carp + name = "Plush (Carp)" + item_path = /obj/item/toy/plush/carpplushie + +/datum/loadout_item/pocket_items/plush/lizard_greyscale + name = "Plush (Lizard, Colorable)" + item_path = /obj/item/toy/plush/lizard_plushie/greyscale + +/datum/loadout_item/pocket_items/plush/lizard_random + name = "Plush (Lizard, Random)" + can_be_greyscale = DONT_GREYSCALE + item_path = /obj/item/toy/plush/lizard_plushie + additional_displayed_text = list("Random color") + +/datum/loadout_item/pocket_items/plush/moth + name = "Plush (Moth)" + item_path = /obj/item/toy/plush/moth + +/datum/loadout_item/pocket_items/plush/narsie + name = "Plush (Nar'sie)" + item_path = /obj/item/toy/plush/narplush + +/datum/loadout_item/pocket_items/plush/nukie + name = "Plush (Nukie)" + item_path = /obj/item/toy/plush/nukeplushie + +/datum/loadout_item/pocket_items/plush/peacekeeper + name = "Plush (Peacekeeper)" + item_path = /obj/item/toy/plush/pkplush + +/datum/loadout_item/pocket_items/plush/plasmaman + name = "Plush (Plasmaman)" + item_path = /obj/item/toy/plush/plasmamanplushie + +/datum/loadout_item/pocket_items/plush/ratvar + name = "Plush (Ratvar)" + item_path = /obj/item/toy/plush/ratplush + +/datum/loadout_item/pocket_items/plush/rouny + name = "Plush (Rouny)" + item_path = /obj/item/toy/plush/rouny + +/datum/loadout_item/pocket_items/plush/snake + name = "Plush (Snake)" + item_path = /obj/item/toy/plush/snakeplushie + +/datum/loadout_item/pocket_items/card_binder + name = "Card Binder" + item_path = /obj/item/storage/card_binder + +/datum/loadout_item/pocket_items/card_deck + name = "Playing Card Deck" + item_path = /obj/item/toy/cards/deck + +/datum/loadout_item/pocket_items/kotahi_deck + name = "Kotahi Deck" + item_path = /obj/item/toy/cards/deck/kotahi + +/datum/loadout_item/pocket_items/wizoff_deck + name = "Wizoff Deck" + item_path = /obj/item/toy/cards/deck/wizoff + +/datum/loadout_item/pocket_items/dice_bag + name = "Dice Bag" + item_path = /obj/item/storage/dice + +/datum/loadout_item/pocket_items/d1 + name = "D1" + item_path = /obj/item/dice/d1 + +/datum/loadout_item/pocket_items/d2 + name = "D2" + item_path = /obj/item/dice/d2 + +/datum/loadout_item/pocket_items/d4 + name = "D4" + item_path = /obj/item/dice/d4 + +/datum/loadout_item/pocket_items/d6 + name = "D6" + item_path = /obj/item/dice/d6 + +/datum/loadout_item/pocket_items/d6_ebony + name = "D6 (Ebony)" + item_path = /obj/item/dice/d6/ebony + +/datum/loadout_item/pocket_items/d6_space + name = "D6 (Space)" + item_path = /obj/item/dice/d6/space + +/datum/loadout_item/pocket_items/d8 + name = "D8" + item_path = /obj/item/dice/d8 + +/datum/loadout_item/pocket_items/d10 + name = "D10" + item_path = /obj/item/dice/d10 + +/datum/loadout_item/pocket_items/d12 + name = "D12" + item_path = /obj/item/dice/d12 + +/datum/loadout_item/pocket_items/d20 + name = "D20" + item_path = /obj/item/dice/d20 + +/datum/loadout_item/pocket_items/d100 + name = "D100" + item_path = /obj/item/dice/d100 + +/datum/loadout_item/pocket_items/d00 + name = "D00" + item_path = /obj/item/dice/d00 diff --git a/code/modules/loadout/loadout_categories.dm b/code/modules/loadout/loadout_categories.dm new file mode 100644 index 0000000000000..760d3f597986c --- /dev/null +++ b/code/modules/loadout/loadout_categories.dm @@ -0,0 +1,79 @@ +/** + * # Loadout categories + * + * Loadout categories are singletons used to group loadout items together in the loadout screen. + */ +/datum/loadout_category + /// The name of the category, shown in the tabs + var/category_name + /// FontAwesome icon for the category + var/category_ui_icon + /// String to display on the top-right of a category tab + var/category_info + /// Order which they appear in the tabs, ties go alphabetically + var/tab_order = -1 + /// What type of loadout items should be generated for this category? + var/type_to_generate + /// List of all loadout items in this category + VAR_FINAL/list/datum/loadout_item/associated_items + +/datum/loadout_category/New() + . = ..() + associated_items = get_items() + for(var/datum/loadout_item/item as anything in associated_items) + if(GLOB.all_loadout_datums[item.item_path]) + stack_trace("Loadout datum collision - [item.item_path] is shared between multiple loadout datums.") + GLOB.all_loadout_datums[item.item_path] = item + +/datum/loadout_category/Destroy(force, ...) + if(!force) + stack_trace("QDEL called on loadout category [type]. This shouldn't ever happen. (Use FORCE if necessary.)") + return QDEL_HINT_LETMELIVE + + associated_items.Cut() + return ..() + +/// Return a list of all /datum/loadout_items in this category. +/datum/loadout_category/proc/get_items() as /list + var/list/all_items = list() + for(var/datum/loadout_item/found_type as anything in typesof(type_to_generate)) + if(found_type == initial(found_type.abstract_type)) + continue + + if(!ispath(initial(found_type.item_path), /obj/item)) + stack_trace("Loadout get_items(): Attempted to instantiate a loadout item ([found_type]) with an invalid or null typepath! (got path: [initial(found_type.item_path)])") + continue + + var/datum/loadout_item/spawned_type = new found_type(src) + all_items += spawned_type + + return all_items + +/// Returns a list of all /datum/loadout_items in this category, formatted for UI use. Only ran once. +/datum/loadout_category/proc/items_to_ui_data() as /list + if(!length(associated_items)) + return list() + + var/list/formatted_list = list() + + for(var/datum/loadout_item/item as anything in associated_items) + var/list/item_data = item.to_ui_data() + UNTYPED_LIST_ADD(formatted_list, item_data) + + sortTim(formatted_list, /proc/cmp_assoc_list_name) // Alphabetizing + return formatted_list + +/** + * Handles what happens when two items of this category are selected at once + * + * Return TRUE if it's okay to continue with adding the incoming item, + * or return FALSE to stop the new item from being added + */ +/datum/loadout_category/proc/handle_duplicate_entires( + datum/preference_middleware/loadout/manager, + datum/loadout_item/conflicting_item, + datum/loadout_item/added_item, + list/datum/loadout_item/all_loadout_items, +) + manager.deselect_item(conflicting_item) + return TRUE diff --git a/code/modules/loadout/loadout_helpers.dm b/code/modules/loadout/loadout_helpers.dm new file mode 100644 index 0000000000000..bbab79b633325 --- /dev/null +++ b/code/modules/loadout/loadout_helpers.dm @@ -0,0 +1,80 @@ +/** + * Equips this mob with a given outfit and loadout items as per the passed preferences. + * + * Loadout items override the pre-existing item in the corresponding slot of the job outfit. + * Some job items are preserved after being overridden - belt items, ear items, and glasses. + * The rest of the slots, the items are overridden completely and deleted. + * + * Species with special outfits are snowflaked to have loadout items placed in their bags instead of overriding the outfit. + * + * * outfit - the job outfit we're equipping + * * preference_source - the preferences to draw loadout items from. + * * visuals_only - whether we call special equipped procs, or if we just look like we equipped it + */ +/mob/living/carbon/human/proc/equip_outfit_and_loadout( + datum/outfit/outfit = /datum/outfit, + datum/preferences/preference_source, + visuals_only = FALSE, +) + if(isnull(preference_source)) + return equipOutfit(outfit, visuals_only) + + var/datum/outfit/equipped_outfit + if(ispath(outfit, /datum/outfit)) + equipped_outfit = new outfit() + else if(istype(outfit, /datum/outfit)) + equipped_outfit = outfit + else + CRASH("Invalid outfit passed to equip_outfit_and_loadout ([outfit])") + + var/list/preference_list = preference_source.read_preference(/datum/preference/loadout) + var/list/loadout_datums = loadout_list_to_datums(preference_list) + // Slap our things into the outfit given + for(var/datum/loadout_item/item as anything in loadout_datums) + item.insert_path_into_outfit(equipped_outfit, src, visuals_only) + // Equip the outfit loadout items included + if(!equipped_outfit.equip(src, visuals_only)) + return FALSE + // Handle any snowflake on_equips + var/list/new_contents = get_all_gear() + var/update = NONE + for(var/datum/loadout_item/item as anything in loadout_datums) + var/obj/item/equipped = locate(item.item_path) in new_contents + if(isnull(equipped)) + continue + update |= item.on_equip_item( + equipped_item = equipped, + preference_source = preference_source, + preference_list = preference_list, + equipper = src, + visuals_only = visuals_only, + ) + + if(update) + update_clothing(update) + + return TRUE + +/** + * Takes a list of paths (such as a loadout list) + * and returns a list of their singleton loadout item datums + * + * loadout_list - the list being checked + * + * Returns a list of singleton datums + */ +/proc/loadout_list_to_datums(list/loadout_list) as /list + var/list/datums = list() + + if(!length(GLOB.all_loadout_datums)) + CRASH("No loadout datums in the global loadout list!") + + for(var/path in loadout_list) + var/actual_datum = GLOB.all_loadout_datums[path] + if(!istype(actual_datum, /datum/loadout_item)) + stack_trace("Could not find ([path]) loadout item in the global list of loadout datums!") + continue + + datums += actual_datum + + return datums diff --git a/code/modules/loadout/loadout_items.dm b/code/modules/loadout/loadout_items.dm new file mode 100644 index 0000000000000..53d0a7cc6cd5b --- /dev/null +++ b/code/modules/loadout/loadout_items.dm @@ -0,0 +1,371 @@ +/// Global list of ALL loadout datums instantiated. +/// Loadout datums are created by loadout categories. +GLOBAL_LIST_EMPTY(all_loadout_datums) + +/// Global list of all loadout categories +/// Doesn't really NEED to be a global but we need to init this early for preferences, +/// as the categories instantiate all the loadout datums +GLOBAL_LIST_INIT(all_loadout_categories, init_loadout_categories()) + +/// Inits the global list of loadout category singletons +/// Also inits loadout item singletons +/proc/init_loadout_categories() + var/list/loadout_categories = list() + for(var/category_type in subtypesof(/datum/loadout_category)) + loadout_categories += new category_type() + + sortTim(loadout_categories, /proc/cmp_loadout_categories) + return loadout_categories + +/proc/cmp_loadout_categories(datum/loadout_category/A, datum/loadout_category/B) + var/a_order = A::tab_order + var/b_order = B::tab_order + if(a_order == b_order) + return cmp_text_asc(A::category_name, B::category_name) + return cmp_numeric_asc(a_order, b_order) + +/** + * # Loadout item datum + * + * Singleton that holds all the information about each loadout items, and how to equip them. + */ +/datum/loadout_item + /// The category of the loadout item. Set automatically in New + VAR_FINAL/datum/loadout_category/category + /// Displayed name of the loadout item. + /// Defaults to the item's name if unset. + var/name + /// Whether this item has greyscale support. + /// Only works if the item is compatible with the GAGS system of coloring. + /// Set automatically to TRUE for all items that have the flag [IS_PLAYER_COLORABLE_1]. + /// If you really want it to not be colorable set this to [DONT_GREYSCALE] + var/can_be_greyscale = FALSE + /// Whether this item can be renamed. + /// I recommend you apply this sparingly becuase it certainly can go wrong (or get reset / overridden easily) + var/can_be_named = FALSE + /// Whether this item can be reskinned. + /// Only works if the item has a "unique reskin" list set. + var/can_be_reskinned = FALSE + /// The abstract parent of this loadout item, to determine which items to not instantiate + var/abstract_type = /datum/loadout_item + /// The actual item path of the loadout item. + var/obj/item/item_path + /// Lazylist of additional "information" text to display about this item. + var/list/additional_displayed_text + /// Icon file (DMI) for the UI to use for preview icons. + /// Set automatically if null + var/ui_icon + /// Icon state for the UI to use for preview icons. + /// Set automatically if null + var/ui_icon_state + /// Reskin options of this item if it can be reskinned. + VAR_FINAL/list/cached_reskin_options + +/datum/loadout_item/New(category) + src.category = category + + if(can_be_greyscale == DONT_GREYSCALE) + can_be_greyscale = FALSE + else if(item_path::flags_1 & IS_PLAYER_COLORABLE_1) + can_be_greyscale = TRUE + + if(isnull(name)) + name = item_path::name + + if(isnull(ui_icon) && isnull(ui_icon_state)) + ui_icon = item_path::icon_preview || item_path::icon + ui_icon_state = item_path::icon_state_preview || item_path::icon_state + + if(can_be_reskinned) + var/obj/item/dummy_item = new item_path() + if(!length(dummy_item.unique_reskin)) + can_be_reskinned = FALSE + stack_trace("Loadout item [item_path] has can_be_reskinned set to TRUE but has no unique reskins.") + else + cached_reskin_options = dummy_item.unique_reskin.Copy() + qdel(dummy_item) + +/datum/loadout_item/Destroy(force, ...) + if(force) + stack_trace("QDEL called on loadout item [type]. This shouldn't ever happen. (Use FORCE if necessary.)") + return QDEL_HINT_LETMELIVE + + GLOB.all_loadout_datums -= item_path + return ..() + +/** + * Takes in an action from a loadout manager and applies it + * + * Useful for subtypes of loadout items with unique actions + * + * Return TRUE to force an update to the UI / character preview + */ +/datum/loadout_item/proc/handle_loadout_action(datum/preference_middleware/loadout/manager, mob/user, action, params) + SHOULD_CALL_PARENT(TRUE) + + switch(action) + if("select_color") + if(can_be_greyscale) + return set_item_color(manager, user) + + if("set_name") + if(can_be_named) + return set_name(manager, user) + + if("set_skin") + return set_skin(manager, user, params) + + return TRUE + +/// Opens up the GAGS editing menu. +/datum/loadout_item/proc/set_item_color(datum/preference_middleware/loadout/manager, mob/user) + if(manager.menu) + return FALSE + + var/list/loadout = manager.preferences.read_preference(/datum/preference/loadout) + var/list/allowed_configs = list() + if(initial(item_path.greyscale_config)) + allowed_configs += "[initial(item_path.greyscale_config)]" + if(initial(item_path.greyscale_config_worn)) + allowed_configs += "[initial(item_path.greyscale_config_worn)]" + if(initial(item_path.greyscale_config_inhand_left)) + allowed_configs += "[initial(item_path.greyscale_config_inhand_left)]" + if(initial(item_path.greyscale_config_inhand_right)) + allowed_configs += "[initial(item_path.greyscale_config_inhand_right)]" + + var/datum/greyscale_modify_menu/menu = new( + manager, + user, + allowed_configs, + CALLBACK(src, PROC_REF(set_slot_greyscale), manager), + starting_icon_state = initial(item_path.icon_state), + starting_config = initial(item_path.greyscale_config), + starting_colors = loadout?[item_path]?[INFO_GREYSCALE] || initial(item_path.greyscale_colors), + ) + + manager.register_greyscale_menu(menu) + menu.ui_interact(user) + return TRUE + +/// Callback for GAGS menu to set this item's color. +/datum/loadout_item/proc/set_slot_greyscale(datum/preference_middleware/loadout/manager, datum/greyscale_modify_menu/open_menu) + if(!istype(open_menu)) + CRASH("set_slot_greyscale called without a greyscale menu!") + + var/list/loadout = manager.preferences.read_preference(/datum/preference/loadout) + if(!loadout?[item_path]) + return FALSE + + var/list/colors = open_menu.split_colors + if(!colors) + return FALSE + + loadout[item_path][INFO_GREYSCALE] = colors.Join("") + manager.preferences.update_preference(GLOB.preference_entries[/datum/preference/loadout], loadout) + return TRUE // update UI + +/// Sets the name of the item. +/datum/loadout_item/proc/set_name(datum/preference_middleware/loadout/manager, mob/user) + var/list/loadout = manager.preferences.read_preference(/datum/preference/loadout) + var/input_name = tgui_input_text( + user = user, + message = "What name do you want to give the [name]? Leave blank to clear.", + title = "[name] name", + default = loadout?[item_path]?[INFO_NAMED], // plop in existing name (if any) + max_length = MAX_NAME_LEN, + ) + if(QDELETED(src) || QDELETED(user) || QDELETED(manager) || QDELETED(manager.preferences)) + return FALSE + + loadout = manager.preferences.read_preference(/datum/preference/loadout) // Make sure no shenanigans happened + if(!loadout?[item_path]) + return FALSE + + if(input_name) + loadout[item_path][INFO_NAMED] = input_name + else if(input_name == "") + loadout[item_path] -= INFO_NAMED + + manager.preferences.update_preference(GLOB.preference_entries[/datum/preference/loadout], loadout) + return FALSE // no update needed + +/// Used for reskinning an item to an alt skin. +/datum/loadout_item/proc/set_skin(datum/preference_middleware/loadout/manager, mob/user, params) + if(!can_be_reskinned) + return FALSE + + var/reskin_to = params["skin"] + if(!cached_reskin_options[reskin_to]) + return FALSE + + var/list/loadout = manager.preferences.read_preference(/datum/preference/loadout) + if(!loadout?[item_path]) + return FALSE + + loadout[item_path][INFO_RESKIN] = reskin_to + manager.preferences.update_preference(GLOB.preference_entries[/datum/preference/loadout], loadout) + return TRUE // always update UI + +/** + * Place our [item_path] into the passed [outfit]. + * + * By default, just adds the item into the outfit's backpack contents, if non-visual. + * + * Arguments: + * * outfit - The outfit we're equipping our items into. + * * equipper - If we're equipping out outfit onto a mob at the time, this is the mob it is equipped on. Can be null. + * * visual - If TRUE, then our outfit is only for visual use (for example, a preview). + */ +/datum/loadout_item/proc/insert_path_into_outfit(datum/outfit/outfit, mob/living/carbon/human/equipper, visuals_only = FALSE) + if(!visuals_only) + LAZYADD(outfit.backpack_contents, item_path) + +/** + * Called When the item is equipped on [equipper]. + * + * At this point the item is in the mob's contents + * + * Arguments: + * * preference_source - the datum/preferences our loadout item originated from - cannot be null + * * equipper - the mob we're equipping this item onto - cannot be null + * * visuals_only - whether or not this is only concerned with visual things (not backpack, not renaming, etc) + * * preference_list - what the raw loadout list looks like in the preferences + * + * Return a bitflag of slot flags to update + */ +/datum/loadout_item/proc/on_equip_item( + obj/item/equipped_item, + datum/preferences/preference_source, + list/preference_list, + mob/living/carbon/human/equipper, + visuals_only = FALSE, +) + ASSERT(!isnull(equipped_item)) + + if(!visuals_only) + ADD_TRAIT(equipped_item, TRAIT_ITEM_OBJECTIVE_BLOCKED, "Loadout") + + var/list/item_details = preference_list[item_path] + var/update_flag = NONE + + if(can_be_greyscale && item_details?[INFO_GREYSCALE]) + equipped_item.set_greyscale(item_details[INFO_GREYSCALE]) + update_flag |= equipped_item.slot_flags + + if(can_be_named && item_details?[INFO_NAMED] && !visuals_only) + equipped_item.name = trim(item_details[INFO_NAMED], PREVENT_CHARACTER_TRIM_LOSS(MAX_NAME_LEN)) + ADD_TRAIT(equipped_item, TRAIT_WAS_RENAMED, "Loadout") + + if(can_be_reskinned && item_details?[INFO_RESKIN]) + var/skin_chosen = item_details[INFO_RESKIN] + if(skin_chosen in equipped_item.unique_reskin) + equipped_item.current_skin = skin_chosen + equipped_item.icon_state = equipped_item.unique_reskin[skin_chosen] + if(istype(equipped_item, /obj/item/clothing/accessory)) + // Snowflake handing for accessories, because we need to update the thing it's attached to instead + if(isclothing(equipped_item.loc)) + var/obj/item/clothing/under/attached_to = equipped_item.loc + attached_to.update_accessory_overlay() + update_flag |= (ITEM_SLOT_OCLOTHING|ITEM_SLOT_ICLOTHING) + else + update_flag |= equipped_item.slot_flags + + else + // Not valid, update the preference + item_details -= INFO_RESKIN + preference_source.write_preference(GLOB.preference_entries[/datum/preference/loadout], preference_list) + + return update_flag + +/** + * Returns a formatted list of data for this loadout item. + */ +/datum/loadout_item/proc/to_ui_data() as /list + SHOULD_CALL_PARENT(TRUE) + + var/list/formatted_item = list() + formatted_item["name"] = name + formatted_item["path"] = item_path + formatted_item["information"] = get_item_information() + formatted_item["buttons"] = get_ui_buttons() + formatted_item["reskins"] = get_reskin_options() + formatted_item["icon"] = ui_icon + formatted_item["icon_state"] = ui_icon_state + return formatted_item + +/** + * Returns a list of information to display about this item in the loadout UI. + * + * These should be short strings, sub 14 characters generally. + */ +/datum/loadout_item/proc/get_item_information() as /list + SHOULD_CALL_PARENT(TRUE) + + var/list/displayed_text = list() + + displayed_text += (additional_displayed_text || list()) + + if(can_be_greyscale) + displayed_text += "Recolorable" + + if(can_be_named) + displayed_text += "Renamable" + + if(can_be_reskinned) + displayed_text += "Reskinnable" + + return displayed_text + +/** + * Returns a list of buttons that are shown in the loadout UI for customizing this item. + * + * Buttons contain + * - 'L'abel: The text displayed beside the button + * - act_key: The key that is sent to the loadout manager when the button is clicked, + * for use in handle_loadout_action + * - button_icon: The FontAwesome icon to display on the button + * - active_key: In the loadout UI, this key is checked in the user's loadout list for this item + * to determine if the button is 'active' (green) or not (blue). + * - active_text: Optional, if provided, the button appears to be a checkbox and this text is shown when 'active' + * - inactive_text: Optional, if provided, the button appears to be a checkbox and this text is shown when not 'active' + */ +/datum/loadout_item/proc/get_ui_buttons() as /list + SHOULD_CALL_PARENT(TRUE) + + var/list/button_list = list() + + if(can_be_greyscale) + UNTYPED_LIST_ADD(button_list, list( + "label" = "Recolor", + "act_key" = "select_color", + "button_icon" = FA_ICON_PALETTE, + "active_key" = INFO_GREYSCALE, + )) + + if(can_be_named) + UNTYPED_LIST_ADD(button_list, list( + "label" = "Rename", + "act_key" = "set_name", + "button_icon" = FA_ICON_PEN, + "active_key" = INFO_NAMED, + )) + + return button_list + +/** + * Returns a list of options this item can be reskinned into. + */ +/datum/loadout_item/proc/get_reskin_options() as /list + if(!can_be_reskinned) + return null + + var/list/reskins = list() + + for(var/skin in cached_reskin_options) + UNTYPED_LIST_ADD(reskins, list( + "name" = skin, + "tooltip" = skin, + "skin_icon_state" = cached_reskin_options[skin], + )) + + return reskins diff --git a/code/modules/loadout/loadout_menu.dm b/code/modules/loadout/loadout_menu.dm new file mode 100644 index 0000000000000..243641faeed5e --- /dev/null +++ b/code/modules/loadout/loadout_menu.dm @@ -0,0 +1,120 @@ +/datum/preference_middleware/loadout + action_delegations = list( + "clear_all_items" = PROC_REF(action_clear_all), + "pass_to_loadout_item" = PROC_REF(action_pass_to_loadout_item), + "rotate_dummy" = PROC_REF(action_rotate_model_dir), + "select_item" = PROC_REF(action_select_item), + "toggle_job_clothes" = PROC_REF(action_toggle_job_outfit), + "close_greyscale_menu" = PROC_REF(force_close_greyscale_menu), + ) + /// Our currently open greyscaling menu. + VAR_FINAL/datum/greyscale_modify_menu/menu + +/datum/preference_middleware/loadout/Destroy(force, ...) + QDEL_NULL(menu) + return ..() + +/datum/preference_middleware/loadout/on_new_character(mob/user) + preferences.character_preview_view?.update_body() + +/datum/preference_middleware/loadout/proc/action_select_item(list/params, mob/user) + PRIVATE_PROC(TRUE) + var/path_to_use = text2path(params["path"]) + var/datum/loadout_item/interacted_item = GLOB.all_loadout_datums[path_to_use] + if(!istype(interacted_item)) + stack_trace("Failed to locate desired loadout item (path: [params["path"]]) in the global list of loadout datums!") + return TRUE // update + + if(params["deselect"]) + deselect_item(interacted_item) + else + select_item(interacted_item) + return TRUE + +/datum/preference_middleware/loadout/proc/action_clear_all(list/params, mob/user) + PRIVATE_PROC(TRUE) + preferences.update_preference(GLOB.preference_entries[/datum/preference/loadout], null) + return TRUE + +/datum/preference_middleware/loadout/proc/action_toggle_job_outfit(list/params, mob/user) + PRIVATE_PROC(TRUE) + preferences.character_preview_view.show_job_clothes = !preferences.character_preview_view.show_job_clothes + preferences.character_preview_view.update_body() + return TRUE + +/datum/preference_middleware/loadout/proc/action_rotate_model_dir(list/params, mob/user) + PRIVATE_PROC(TRUE) + switch(params["dir"]) + if("left") + preferences.character_preview_view.setDir(turn(preferences.character_preview_view.dir, -90)) + if("right") + preferences.character_preview_view.setDir(turn(preferences.character_preview_view.dir, 90)) + +/datum/preference_middleware/loadout/proc/action_pass_to_loadout_item(list/params, mob/user) + PRIVATE_PROC(TRUE) + var/path_to_use = text2path(params["path"]) + var/datum/loadout_item/interacted_item = GLOB.all_loadout_datums[path_to_use] + if(!istype(interacted_item)) // no you cannot href exploit to spawn with a pulse rifle + stack_trace("Failed to locate desired loadout item (path: [params["path"]]) in the global list of loadout datums!") + return TRUE // update + + if(interacted_item.handle_loadout_action(src, user, params["subaction"], params)) + preferences.character_preview_view.update_body() + return TRUE + + return FALSE + +/// Select [path] item to [category_slot] slot. +/datum/preference_middleware/loadout/proc/select_item(datum/loadout_item/selected_item) + var/list/loadout = preferences.read_preference(/datum/preference/loadout) + var/list/datum/loadout_item/loadout_datums = loadout_list_to_datums(loadout) + for(var/datum/loadout_item/item as anything in loadout_datums) + if(item.category != selected_item.category) + continue + if(!item.category.handle_duplicate_entires(src, item, selected_item, loadout_datums)) + return + + LAZYSET(loadout, selected_item.item_path, list()) + preferences.update_preference(GLOB.preference_entries[/datum/preference/loadout], loadout) + +/// Deselect [deselected_item]. +/datum/preference_middleware/loadout/proc/deselect_item(datum/loadout_item/deselected_item) + var/list/loadout = preferences.read_preference(/datum/preference/loadout) + LAZYREMOVE(loadout, deselected_item.item_path) + preferences.update_preference(GLOB.preference_entries[/datum/preference/loadout], loadout) + +/datum/preference_middleware/loadout/proc/register_greyscale_menu(datum/greyscale_modify_menu/open_menu) + src.menu = open_menu + RegisterSignal(menu, COMSIG_QDELETING, PROC_REF(cleanup_greyscale_menu)) + +/datum/preference_middleware/loadout/proc/cleanup_greyscale_menu() + SIGNAL_HANDLER + menu = null + +/datum/preference_middleware/loadout/proc/force_close_greyscale_menu() + menu?.ui_close() + +/datum/preference_middleware/loadout/get_ui_data(mob/user) + var/list/data = list() + data["job_clothes"] = preferences.character_preview_view.show_job_clothes + return data + +/datum/preference_middleware/loadout/get_ui_static_data(mob/user) + var/list/data = list() + data["loadout_preview_view"] = preferences.character_preview_view.assigned_map + return data + +/datum/preference_middleware/loadout/get_constant_data() + var/list/data = list() + var/list/loadout_tabs = list() + for(var/datum/loadout_category/category as anything in GLOB.all_loadout_categories) + var/list/cat_data = list( + "name" = category.category_name, + "category_icon" = category.category_ui_icon, + "category_info" = category.category_info, + "contents" = category.items_to_ui_data(), + ) + UNTYPED_LIST_ADD(loadout_tabs, cat_data) + + data["loadout_tabs"] = loadout_tabs + return data diff --git a/code/modules/loadout/loadout_preference.dm b/code/modules/loadout/loadout_preference.dm new file mode 100644 index 0000000000000..c1d286bedf635 --- /dev/null +++ b/code/modules/loadout/loadout_preference.dm @@ -0,0 +1,59 @@ +/datum/preference/loadout + savefile_key = "loadout_list" + savefile_identifier = PREFERENCE_CHARACTER + priority = PREFERENCE_PRIORITY_LOADOUT + can_randomize = FALSE + // Loadout preference is an assoc list [item_path] = [loadout item information list] + // + // it may look something like + // - list(/obj/item/glasses = list()) + // or + // - list(/obj/item/plush/lizard = list("name" = "Tests-The-Loadout", "color" = "#FF0000")) + +// Loadouts are applied with job equip code. +/datum/preference/loadout/apply_to_human(mob/living/carbon/human/target, value) + return + +// Sanitize on load to ensure no invalid paths from older saves get in +/datum/preference/loadout/deserialize(input, datum/preferences/preferences) + return sanitize_loadout_list(input, preferences.parent?.mob) + +// Default value is null - the loadout list is a lazylist +/datum/preference/loadout/create_default_value(datum/preferences/preferences) + return null + +/datum/preference/loadout/is_valid(value) + return isnull(value) || islist(value) + +/** + * Removes all invalid paths from loadout lists. + * This is a general sanitization for preference loading. + * + * Returns a list, or null if empty + */ +/datum/preference/loadout/proc/sanitize_loadout_list(list/passed_list, mob/optional_loadout_owner) as /list + var/list/sanitized_list + for(var/path in passed_list) + // Loading from json has each path in the list as a string that we need to convert back to typepath + var/obj/item/real_path = istext(path) ? text2path(path) : path + if(!ispath(real_path, /obj/item)) + if(optional_loadout_owner) + to_chat(optional_loadout_owner, span_boldnotice("The following invalid item path was found \ + in your character loadout: [real_path || "null"]. \ + It has been removed, renamed, or is otherwise missing - \ + You may want to check your loadout settings.")) + continue + + else if(!istype(GLOB.all_loadout_datums[real_path], /datum/loadout_item)) + if(optional_loadout_owner) + to_chat(optional_loadout_owner, span_boldnotice("The following invalid loadout item was found \ + in your character loadout: [real_path || "null"]. \ + It has been removed, renamed, or is otherwise missing - \ + You may want to check your loadout settings.")) + continue + + // Set into sanitize list using converted path key + var/list/data = passed_list[path] + LAZYSET(sanitized_list, real_path, LAZYLISTDUPLICATE(data)) + + return sanitized_list diff --git a/code/modules/lootpanel/_lootpanel.dm b/code/modules/lootpanel/_lootpanel.dm index 339a79d77fa6f..45862ebf45542 100644 --- a/code/modules/lootpanel/_lootpanel.dm +++ b/code/modules/lootpanel/_lootpanel.dm @@ -49,6 +49,7 @@ var/list/data = list() data["contents"] = get_contents() + data["is_blind"] = !!user.is_blind() data["searching"] = length(to_image) return data diff --git a/code/modules/lootpanel/contents.dm b/code/modules/lootpanel/contents.dm index 4bb255b15611b..44f4acd47f24c 100644 --- a/code/modules/lootpanel/contents.dm +++ b/code/modules/lootpanel/contents.dm @@ -18,6 +18,9 @@ for(var/atom/thing as anything in source_turf.contents) // validate + if(!istype(thing)) + stack_trace("Non-atom in the contents of [source_turf]!") + continue if(thing.mouse_opacity == MOUSE_OPACITY_TRANSPARENT) continue if(thing.IsObscured()) diff --git a/code/modules/lootpanel/search_object.dm b/code/modules/lootpanel/search_object.dm index 520228e465eb3..149be76e71064 100644 --- a/code/modules/lootpanel/search_object.dm +++ b/code/modules/lootpanel/search_object.dm @@ -26,6 +26,9 @@ if(isturf(item)) RegisterSignal(item, COMSIG_TURF_CHANGE, PROC_REF(on_turf_change)) else + // Lest we find ourselves here again, this is intentionally stupid. + // It tracks items going out and user actions, otherwise they can refresh the lootpanel. + // If this is to be made to track everything, we'll need to make a new signal to specifically create/delete a search object RegisterSignals(item, list( COMSIG_ITEM_PICKUP, COMSIG_MOVABLE_MOVED, @@ -50,6 +53,7 @@ var/build = owner.byond_build var/version = owner.byond_version if(build < 515 || (build == 515 && version < 1635)) + icon = "n/a" return icon = "[item.icon]" @@ -64,10 +68,7 @@ /// Generates the icon for the search object. This is the expensive part. /datum/search_object/proc/generate_icon(client/owner) - if(ismob(item) || length(item.overlays) > 2) - icon = costly_icon2html(item, owner, sourceonly = TRUE) - else // our pre 515.1635 fallback for normal items - icon = icon2html(item, owner, sourceonly = TRUE) + icon = costly_icon2html(item, owner, sourceonly = TRUE) /// Parent item has been altered, search object no longer valid diff --git a/code/modules/lootpanel/ui.dm b/code/modules/lootpanel/ui.dm index c7f0cf2358db4..14d41b02b7946 100644 --- a/code/modules/lootpanel/ui.dm +++ b/code/modules/lootpanel/ui.dm @@ -36,6 +36,11 @@ modifiers += "middle=1;" if(params["shift"]) modifiers += "shift=1;" + if(params["alt"]) + modifiers += "alt=1;" + if(params["right"]) + modifiers += "right=1;" + user.ClickOn(thing, modifiers) diff --git a/code/modules/mafia/outfits.dm b/code/modules/mafia/outfits.dm index dc2d384b263f6..3b805bd92f9c0 100644 --- a/code/modules/mafia/outfits.dm +++ b/code/modules/mafia/outfits.dm @@ -64,7 +64,7 @@ suit = /obj/item/clothing/suit/jacket/det_suit gloves = /obj/item/clothing/gloves/color/black head = /obj/item/clothing/head/fedora/det_hat - mask = /obj/item/clothing/mask/cigarette + mask = /obj/item/cigarette /datum/outfit/mafia/psychologist name = "Mafia Psychologist" @@ -155,7 +155,7 @@ suit = /obj/item/clothing/suit/apron /datum/outfit/mafia/obsessed/post_equip(mob/living/carbon/human/H) - for(var/obj/item/carried_item in H.get_equipped_items(include_pockets = TRUE, include_accessories = TRUE)) + for(var/obj/item/carried_item in H.get_equipped_items(INCLUDE_POCKETS | INCLUDE_ACCESSORIES)) carried_item.add_mob_blood(H)//Oh yes, there will be blood... H.regenerate_icons() diff --git a/code/modules/mapfluff/ruins/icemoonruin_code/commsagent.dm b/code/modules/mapfluff/ruins/icemoonruin_code/commsagent.dm new file mode 100644 index 0000000000000..f6e0a6be8264a --- /dev/null +++ b/code/modules/mapfluff/ruins/icemoonruin_code/commsagent.dm @@ -0,0 +1,54 @@ +/obj/item/tape/frozen + name = "frozen tape" + desc = "A frozen old tape. The cold has somewhat preserved the recording inside." + icon_state = "tape_white" + used_capacity = 10 MINUTES + storedinfo = list( + "\[00:04\]Three.", + "\[00:05\]Years.", + "\[00:07\]Three FUCKING years in this frozen hellhole", + "\[00:11\]My mission's supposed to be over already!", + "\[00:15\]Nanotrasen has left their place to rot for like what,", + "\[00:20\]8, 9, 10 months? I lost track of it", + "\[00:25\]This was supposed to be a mission for TWO men,", + "\[00:29\]But the other agent hasn't even given any signs of waking up...", + //long silence + "\[02:00\]I can't do this anymore, man.", + "\[02:03\]I need to get out,", + "\[02:06\]Maybe with the gorilla gloves, i could...", + "\[02:11\]Hm.", + //shorter silence + "\[02:34\]I'm gonna go for it.", + "\[02:37\]If anyone finds this tape,", + "\[02:40\]whatever the outcome was,", + "\[02:43\]just know that i didn't regret it." + ) + timestamp = list ( + 4 SECONDS, + 5 SECONDS, + 7 SECONDS, + 11 SECONDS, + 15 SECONDS, + 20 SECONDS, + 25 SECONDS, + 29 SECONDS, + 2 MINUTES, + 2 MINUTES + 3 SECONDS, + 2 MINUTES + 6 SECONDS, + 2 MINUTES + 11 SECONDS, + 2 MINUTES + 34 SECONDS, + 2 MINUTES + 37 SECONDS, + 2 MINUTES + 40 SECONDS, + 2 MINUTES + 43 SECONDS + ) + +/obj/item/tape/frozen/Initialize(mapload) + . = ..() + unspool() // the tape spawns damaged + +/obj/item/tape/comms_wall + icon_state = "tape_red" + used_capacity = 10 MINUTES + storedinfo = list( + "\[00:01\]" + ) diff --git a/code/modules/mapfluff/ruins/lavalandruin_code/biodome_winter.dm b/code/modules/mapfluff/ruins/lavalandruin_code/biodome_winter.dm index 55fe9e77eac17..7f1c8d781f4f8 100644 --- a/code/modules/mapfluff/ruins/lavalandruin_code/biodome_winter.dm +++ b/code/modules/mapfluff/ruins/lavalandruin_code/biodome_winter.dm @@ -45,5 +45,5 @@ else if(isliving(hit_atom)) var/mob/living/hit_mob = hit_atom - DSmove_manager.stop_looping(hit_mob) //stops them mid pathing even if they're stunimmune + GLOB.move_manager.stop_looping(hit_mob) //stops them mid pathing even if they're stunimmune hit_mob.apply_status_effect(/datum/status_effect/ice_block_talisman, 3 SECONDS) diff --git a/code/modules/mapfluff/ruins/lavalandruin_code/elephantgraveyard.dm b/code/modules/mapfluff/ruins/lavalandruin_code/elephantgraveyard.dm index 3c29a6a39450c..4aecd64aa1699 100644 --- a/code/modules/mapfluff/ruins/lavalandruin_code/elephantgraveyard.dm +++ b/code/modules/mapfluff/ruins/lavalandruin_code/elephantgraveyard.dm @@ -160,6 +160,8 @@ var/first_open = FALSE /// was a shovel used to close this grave var/dug_closed = FALSE + /// do we have a mood effect tied to accessing this type of grave? + var/affect_mood = FALSE /obj/structure/closet/crate/grave/add_context(atom/source, list/context, obj/item/held_item, mob/user) if(isnull(held_item)) @@ -180,6 +182,9 @@ . = ..() . += span_notice("It can be [EXAMINE_HINT((opened ? "closed" : "dug open"))] with a shovel.") +/obj/structure/closet/crate/grave/filled + affect_mood = TRUE + /obj/structure/closet/crate/grave/filled/PopulateContents() //GRAVEROBBING IS NOW A FEATURE ..() new /obj/effect/decal/remains/human(src) @@ -204,7 +209,7 @@ new /obj/item/clothing/glasses/science(src) if(7) new /obj/item/clothing/glasses/sunglasses/big(src) - new /obj/item/clothing/mask/cigarette/rollie(src) + new /obj/item/cigarette/rollie(src) else //empty grave return @@ -252,7 +257,7 @@ if(opened) dug_closed = TRUE close(user) - else if(open(user, force = TRUE)) + else if(open(user, force = TRUE) && affect_mood) if(HAS_MIND_TRAIT(user, TRAIT_MORBID)) user.add_mood_event("morbid_graverobbing", /datum/mood_event/morbid_graverobbing) else @@ -284,7 +289,7 @@ deconstruct(TRUE) return TRUE -/obj/structure/closet/crate/grave/container_resist_act(mob/living/user) +/obj/structure/closet/crate/grave/container_resist_act(mob/living/user, loc_required = TRUE) if(opened) return // The player is trying to dig themselves out of an early grave @@ -307,6 +312,14 @@ if(user.loc == src) to_chat(user, span_warning("You fail to dig yourself out of [src]!")) +/obj/structure/closet/crate/grave/fresh + name = "makeshift grave" + desc = "A hastily-dug grave. This is definitely not six feet deep, but it'll hold a body." + icon = 'icons/obj/storage/crates.dmi' + icon_state = "grave_fresh" + base_icon_state = "grave_fresh" + material_drop_amount = 0 + /obj/structure/closet/crate/grave/filled/lead_researcher name = "ominous burial mound" desc = "Even in a place filled to the brim with graves, this one shows a level of preperation and planning that fills you with dread." diff --git a/code/modules/mapfluff/ruins/lavalandruin_code/puzzle.dm b/code/modules/mapfluff/ruins/lavalandruin_code/puzzle.dm index 1ec15d01345ed..ef6dc902c9f08 100644 --- a/code/modules/mapfluff/ruins/lavalandruin_code/puzzle.dm +++ b/code/modules/mapfluff/ruins/lavalandruin_code/puzzle.dm @@ -320,21 +320,23 @@ icon = 'icons/obj/mining_zones/artefacts.dmi' icon_state = "prison_cube" -/obj/item/prisoncube/afterattack(atom/target, mob/user, proximity_flag, click_parameters) - . = ..() - if(!proximity_flag || !isliving(target)) - return - var/mob/living/victim = target - var/mob/living/carbon/carbon_victim = victim +/obj/item/prisoncube/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + if(!isliving(interacting_with)) + return NONE + + var/mob/living/carbon/carbon_victim = interacting_with //Handcuffed or unconscious - if(istype(carbon_victim) && carbon_victim.handcuffed || victim.stat != CONSCIOUS) - if(!puzzle_imprison(target)) - to_chat(user,span_warning("[src] does nothing.")) - return - to_chat(user,span_warning("You trap [victim] in the prison cube!")) + if(istype(carbon_victim) && (carbon_victim.handcuffed || carbon_victim.stat != CONSCIOUS)) + user.do_attack_animation(carbon_victim) + if(!puzzle_imprison(carbon_victim)) + to_chat(user, span_warning("[src] does nothing.")) + return ITEM_INTERACT_BLOCKING + to_chat(user, span_warning("You trap [carbon_victim] in the prison cube!")) qdel(src) - else - to_chat(user,span_notice("[src] only accepts restrained or unconscious prisoners.")) + return ITEM_INTERACT_SUCCESS + + to_chat(user, span_notice("[src] only accepts restrained or unconscious prisoners.")) + return ITEM_INTERACT_BLOCKING /proc/puzzle_imprison(mob/living/prisoner) var/turf/T = get_turf(prisoner) diff --git a/code/modules/mapfluff/ruins/objects_and_mobs/sin_ruins.dm b/code/modules/mapfluff/ruins/objects_and_mobs/sin_ruins.dm index eb5f2437bcd4d..15566603a9322 100644 --- a/code/modules/mapfluff/ruins/objects_and_mobs/sin_ruins.dm +++ b/code/modules/mapfluff/ruins/objects_and_mobs/sin_ruins.dm @@ -26,8 +26,8 @@ /obj/item/knife/envy //Envy's knife: Found in the Envy ruin. Attackers take on the appearance of whoever they strike. name = "envy's knife" desc = "Their success will be yours." - icon = 'icons/obj/weapons/khopesh.dmi' - icon_state = "render" + icon = 'icons/obj/weapons/stabby.dmi' + icon_state = "envyknife" inhand_icon_state = "knife" lefthand_file = 'icons/mob/inhands/equipment/kitchen_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/kitchen_righthand.dmi' @@ -36,18 +36,17 @@ w_class = WEIGHT_CLASS_NORMAL hitsound = 'sound/weapons/bladeslice.ogg' -/obj/item/knife/envy/afterattack(atom/movable/AM, mob/living/carbon/human/user, proximity) - . = ..() - if(!proximity) +/obj/item/knife/envy/afterattack(atom/target, mob/living/carbon/human/user, click_parameters) + if(!istype(user) || !ishuman(target)) return - if(!istype(user)) + + var/mob/living/carbon/human/H = target + if(user.real_name == H.dna.real_name) return - if(ishuman(AM)) - var/mob/living/carbon/human/H = AM - if(user.real_name != H.dna.real_name) - user.real_name = H.dna.real_name - H.dna.transfer_identity(user, transfer_SE=1) - user.updateappearance(mutcolor_update=1) - user.domutcheck() - user.visible_message(span_warning("[user]'s appearance shifts into [H]'s!"), \ - span_boldannounce("[H.p_They()] think[H.p_s()] [H.p_theyre()] sooo much better than you. Not anymore, [H.p_they()] won't.")) + + user.real_name = H.dna.real_name + H.dna.transfer_identity(user, transfer_SE=1) + user.updateappearance(mutcolor_update=1) + user.domutcheck() + user.visible_message(span_warning("[user]'s appearance shifts into [H]'s!"), \ + span_boldannounce("[H.p_They()] think[H.p_s()] [H.p_theyre()] sooo much better than you. Not anymore, [H.p_they()] won't.")) diff --git a/code/modules/mapfluff/ruins/spaceruin_code/hilbertshotel.dm b/code/modules/mapfluff/ruins/spaceruin_code/hilbertshotel.dm index 8906a6d2555cb..21075cea38add 100644 --- a/code/modules/mapfluff/ruins/spaceruin_code/hilbertshotel.dm +++ b/code/modules/mapfluff/ruins/spaceruin_code/hilbertshotel.dm @@ -302,6 +302,15 @@ GLOBAL_VAR_INIT(hhMysteryRoomNumber, rand(1, 999999)) explosive_resistance = INFINITY var/obj/item/hilbertshotel/parentSphere +/turf/closed/indestructible/hoteldoor/Initialize(mapload) + . = ..() + register_context() + +/turf/closed/indestructible/hoteldoor/add_context(atom/source, list/context, obj/item/held_item, mob/user) + . = ..() + context[SCREENTIP_CONTEXT_ALT_LMB] = "Peek through" + return CONTEXTUAL_SCREENTIP_SET + /turf/closed/indestructible/hoteldoor/proc/promptExit(mob/living/user) if(!isliving(user)) return @@ -345,6 +354,10 @@ GLOBAL_VAR_INIT(hhMysteryRoomNumber, rand(1, 999999)) promptExit(user) /turf/closed/indestructible/hoteldoor/click_alt(mob/user) + if(user.is_blind()) + to_chat(user, span_warning("Drats! Your vision is too poor to use this!")) + return CLICK_ACTION_BLOCKING + to_chat(user, span_notice("You peak through the door's bluespace peephole...")) user.reset_perspective(parentSphere) var/datum/action/peephole_cancel/PHC = new @@ -511,14 +524,12 @@ GLOBAL_VAR_INIT(hhMysteryRoomNumber, rand(1, 999999)) icon_state = "hilbertsanalyzer" worn_icon_state = "analyzer" -/obj/item/analyzer/hilbertsanalyzer/afterattack(atom/target, mob/user, proximity) - . = ..() - if(istype(target, /obj/item/hilbertshotel)) - . |= AFTERATTACK_PROCESSED_ITEM - if(!proximity) +/obj/item/analyzer/hilbertsanalyzer/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + if(istype(interacting_with, /obj/item/hilbertshotel)) + if(!Adjacent(interacting_with)) to_chat(user, span_warning("It's to far away to scan!")) - return . - var/obj/item/hilbertshotel/sphere = target + return ITEM_INTERACT_BLOCKING + var/obj/item/hilbertshotel/sphere = interacting_with if(sphere.activeRooms.len) to_chat(user, "Currently Occupied Rooms:") for(var/roomnumber in sphere.activeRooms) @@ -531,7 +542,8 @@ GLOBAL_VAR_INIT(hhMysteryRoomNumber, rand(1, 999999)) to_chat(user, roomnumber) else to_chat(user, "No vacated rooms.") - return . + return ITEM_INTERACT_SUCCESS + return ..() /obj/effect/landmark/transport/transport_id/hilbert specific_transport_id = HILBERT_LINE_1 diff --git a/code/modules/mapping/mapping_helpers.dm b/code/modules/mapping/mapping_helpers.dm index a2ffa244679b6..e81425b9a1a80 100644 --- a/code/modules/mapping/mapping_helpers.dm +++ b/code/modules/mapping/mapping_helpers.dm @@ -107,6 +107,12 @@ return return ..(ceiling) +///Used for marking mapping errors. These should only be created by cases explicitly caught by unit tests, and should NEVER actually appear in production. +/obj/effect/mapping_error + name = "I AM ERROR" + desc = "IF YOU SEE ME, YELL AT A MAPPER!!!" + icon = 'icons/effects/mapping_helpers.dmi' + icon_state = "mapping_error" /obj/effect/mapping_helpers icon = 'icons/effects/mapping_helpers.dmi' @@ -563,17 +569,17 @@ if(!mapload) log_mapping("[src] spawned outside of mapload!") return INITIALIZE_HINT_QDEL - check_validity() - return INITIALIZE_HINT_QDEL + return INITIALIZE_HINT_LATELOAD -/obj/effect/mapping_helpers/turn_off_lights_with_lightswitch/proc/check_validity() +/obj/effect/mapping_helpers/turn_off_lights_with_lightswitch/LateInitialize() var/area/needed_area = get_area(src) if(!needed_area.lightswitch) stack_trace("[src] at [AREACOORD(src)] [(needed_area.type)] tried to turn lights off but they are already off!") var/obj/machinery/light_switch/light_switch = locate(/obj/machinery/light_switch) in needed_area if(!light_switch) - stack_trace("Trying to turn off lights with lightswitch in area without lightswitches. In [(needed_area.type)] to be precise.") - needed_area.lightswitch = FALSE + CRASH("Trying to turn off lights with lightswitch in area without lightswitches. In [(needed_area.type)] to be precise.") + light_switch.set_lights(FALSE) + qdel(src) //needs to do its thing before spawn_rivers() is called INITIALIZE_IMMEDIATE(/obj/effect/mapping_helpers/no_lava) @@ -586,6 +592,15 @@ INITIALIZE_IMMEDIATE(/obj/effect/mapping_helpers/no_lava) var/turf/T = get_turf(src) T.turf_flags |= NO_LAVA_GEN +INITIALIZE_IMMEDIATE(/obj/effect/mapping_helpers/no_atoms_ontop) +/obj/effect/mapping_helpers/no_atoms_ontop + icon_state = "no_atoms_ontop" + +/obj/effect/mapping_helpers/no_atoms_ontop/Initialize(mapload) + . = ..() + var/turf/loc_turf = get_turf(src) + loc_turf.turf_flags |= TURF_BLOCKS_POPULATE_TERRAIN_FLORAFEATURES + ///Helpers used for injecting stuff into atoms on the map. /obj/effect/mapping_helpers/atom_injector name = "Atom Injector" @@ -914,8 +929,7 @@ INITIALIZE_IMMEDIATE(/obj/effect/mapping_helpers/no_lava) var/datum/species/new_human_species = GLOB.species_list[species_to_pick] if(new_human_species) new_human.set_species(new_human_species) - new_human_species = new_human.dna.species - new_human.fully_replace_character_name(new_human.real_name, new_human_species.random_name(new_human.gender, TRUE, TRUE)) + new_human.fully_replace_character_name(new_human.real_name, new_human.generate_random_mob_name()) else stack_trace("failed to spawn cadaver with species ID [species_to_pick]") //if it's invalid they'll just be a human, so no need to worry too much aside from yelling at the server owner lol. else @@ -1064,7 +1078,7 @@ INITIALIZE_IMMEDIATE(/obj/effect/mapping_helpers/no_lava) /obj/effect/mapping_helpers/airlock_note_placer/LateInitialize() var/turf/turf = get_turf(src) - if(note_path && !istype(note_path, /obj/item/paper)) //don't put non-paper in the paper slot thank you + if(note_path && !ispath(note_path, /obj/item/paper)) //don't put non-paper in the paper slot thank you log_mapping("[src] at [x],[y] had an improper note_path path, could not place paper note.") qdel(src) return diff --git a/code/modules/meteors/meteor_changeling.dm b/code/modules/meteors/meteor_changeling.dm index 5733e2dbe93e2..9c25f8b6776a6 100644 --- a/code/modules/meteors/meteor_changeling.dm +++ b/code/modules/meteors/meteor_changeling.dm @@ -30,7 +30,7 @@ return TRUE //If the meteor misses the station and deletes itself, we make absolutely sure the changeling reaches the station. -/obj/effect/meteor/meaty/changeling/handle_stopping() +/obj/effect/meteor/meaty/changeling/moved_off_z() if(!landing_target) //If our destination turf is gone for some reason, we chuck them at the observer_start landmark (usually at the center of the station) as a last resort. landing_target = locate(/obj/effect/landmark/observer_start) in GLOB.landmarks_list diff --git a/code/modules/meteors/meteor_dark_matteor.dm b/code/modules/meteors/meteor_dark_matteor.dm index f965605048204..f72bbcff6fa13 100644 --- a/code/modules/meteors/meteor_dark_matteor.dm +++ b/code/modules/meteors/meteor_dark_matteor.dm @@ -60,7 +60,7 @@ qdel(defender) return FALSE -/obj/effect/meteor/dark_matteor/handle_stopping() +/obj/effect/meteor/dark_matteor/moved_off_z() . = ..() if(previous_security_level && SSsecurity_level.get_current_level_as_number() != SEC_LEVEL_DELTA) SSsecurity_level.set_level(previous_security_level) diff --git a/code/modules/meteors/meteor_types.dm b/code/modules/meteors/meteor_types.dm index d7a7dd140024d..199f6517abb1e 100644 --- a/code/modules/meteors/meteor_types.dm +++ b/code/modules/meteors/meteor_types.dm @@ -60,8 +60,7 @@ get_hit() if(z != z_original || loc == get_turf(dest)) - qdel(src) - return + moved_off_z() /obj/effect/meteor/Process_Spacemove(movement_dir = 0, continuous_move = FALSE) return TRUE //Keeps us from drifting for no reason @@ -76,17 +75,13 @@ /obj/effect/meteor/proc/chase_target(atom/chasing, delay, home) if(!isatom(chasing)) return - var/datum/move_loop/new_loop = DSmove_manager.move_towards(src, chasing, delay, home, lifetime) + var/datum/move_loop/new_loop = GLOB.move_manager.move_towards(src, chasing, delay, home, lifetime) if(!new_loop) return - RegisterSignal(new_loop, COMSIG_QDELETING, PROC_REF(handle_stopping)) - ///Deals with what happens when we stop moving, IE we die -/obj/effect/meteor/proc/handle_stopping() - SIGNAL_HANDLER - if(!QDELETED(src)) - qdel(src) +/obj/effect/meteor/proc/moved_off_z() + qdel(src) /obj/effect/meteor/proc/ram_turf(turf/T) //first yell at mobs about them dying horribly @@ -150,7 +145,7 @@ * Admin spawned meteors will not grant the user an achievement. * * Arguments: - * * user - the person who will be recieving the examine award. + * * user - the person who will be receiving the examine award. */ /obj/effect/meteor/proc/check_examine_award(mob/user) @@ -459,8 +454,8 @@ /obj/effect/meteor/pumpkin name = "PUMPKING" desc = "THE PUMPKING'S COMING!" - icon = 'icons/obj/meteor_spooky.dmi' - icon_state = "pumpkin" + icon = 'icons/obj/meteor.dmi' + icon_state = "spooky" hits = 10 heavy = TRUE dropamt = 1 diff --git a/code/modules/mining/abandoned_crates.dm b/code/modules/mining/abandoned_crates.dm index 0b029bc3b63db..40cb967d3a0ab 100644 --- a/code/modules/mining/abandoned_crates.dm +++ b/code/modules/mining/abandoned_crates.dm @@ -141,11 +141,11 @@ new /obj/item/lighter(src) new /obj/item/reagent_containers/cup/glass/bottle/absinthe/premium(src) for(var/i in 1 to 3) - new /obj/item/clothing/mask/cigarette/rollie(src) + new /obj/item/cigarette/rollie(src) if(6 to 10) new /obj/item/melee/skateboard/pro(src) if(11 to 15) - new /mob/living/simple_animal/bot/secbot/honkbot(src) + new /mob/living/basic/bot/honkbot(src) if(16 to 20) new /obj/item/stack/ore/diamond(src, 10) if(21 to 25) @@ -195,7 +195,7 @@ if(71 to 72) new /obj/item/toy/plush/snakeplushie(src) if(73 to 74) - new /mob/living/simple_animal/pet/gondola(src) + new /mob/living/basic/pet/gondola(src) if(75 to 76) new /obj/item/bikehorn/airhorn(src) if(77 to 78) diff --git a/code/modules/mining/equipment/explorer_gear.dm b/code/modules/mining/equipment/explorer_gear.dm index e4c0819d6733d..ecaa17321c486 100644 --- a/code/modules/mining/equipment/explorer_gear.dm +++ b/code/modules/mining/equipment/explorer_gear.dm @@ -13,16 +13,6 @@ max_heat_protection_temperature = SPACE_SUIT_MAX_TEMP_PROTECT hoodtype = /obj/item/clothing/head/hooded/explorer armor_type = /datum/armor/hooded_explorer - allowed = list( - /obj/item/flashlight, - /obj/item/gun/energy/recharge/kinetic_accelerator, - /obj/item/mining_scanner, - /obj/item/pickaxe, - /obj/item/resonator, - /obj/item/storage/bag/ore, - /obj/item/t_scanner/adv_mining_scanner, - /obj/item/tank/internals, - ) resistance_flags = FIRE_PROOF /datum/armor/hooded_explorer @@ -33,6 +23,7 @@ bomb = 50 fire = 50 acid = 50 + wound = 10 /obj/item/clothing/head/hooded/explorer name = "explorer hood" @@ -52,6 +43,7 @@ /obj/item/clothing/suit/hooded/explorer/Initialize(mapload) . = ..() AddComponent(/datum/component/armor_plate) + allowed = GLOB.mining_suit_allowed /obj/item/clothing/head/hooded/explorer/Initialize(mapload) . = ..() @@ -91,7 +83,6 @@ . = ..() // adjusted = out of the way = smaller = can fit in boxes update_weight_class(up ? WEIGHT_CLASS_SMALL : WEIGHT_CLASS_NORMAL) - inhand_icon_state = up ? "[initial(inhand_icon_state)]_up" : initial(inhand_icon_state) /obj/item/clothing/mask/gas/explorer/update_icon_state() . = ..() @@ -118,19 +109,28 @@ name = "goliath cloak" icon_state = "goliath_cloak" desc = "A staunch, practical cape made out of numerous monster materials, it is coveted amongst exiles & hermits." - allowed = list( - /obj/item/flashlight, - /obj/item/knife/combat/bone, - /obj/item/knife/combat/survival, - /obj/item/organ/internal/monster_core, - /obj/item/pickaxe, - /obj/item/spear, - /obj/item/tank/internals, - ) + body_parts_covered = CHEST|GROIN|LEGS|ARMS + cold_protection = CHEST|GROIN|LEGS|ARMS + min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT + heat_protection = CHEST|GROIN|LEGS|ARMS + max_heat_protection_temperature = SPACE_SUIT_MAX_TEMP_PROTECT resistance_flags = FIRE_PROOF - armor_type = /datum/armor/cloak_goliath + armor_type = /datum/armor/hooded_goliath hoodtype = /obj/item/clothing/head/hooded/cloakhood/goliath - body_parts_covered = CHEST|GROIN|ARMS + +/obj/item/clothing/suit/hooded/cloak/goliath/Initialize(mapload) + . = ..() + allowed = GLOB.mining_suit_allowed + +/datum/armor/hooded_goliath + melee = 60 + bullet = 10 + laser = 10 + energy = 20 + bomb = 50 + fire = 50 + acid = 50 + wound = 10 /obj/item/clothing/suit/hooded/cloak/goliath/click_alt(mob/user) if(!iscarbon(user)) @@ -144,58 +144,80 @@ return CLICK_ACTION_BLOCKING if(slot_flags & ITEM_SLOT_OCLOTHING) slot_flags = ITEM_SLOT_NECK + cold_protection = null + heat_protection = null set_armor(/datum/armor/none) user.visible_message(span_notice("[user] adjusts their [src] for ceremonial use."), span_notice("You adjust your [src] for ceremonial use.")) else slot_flags = initial(slot_flags) + cold_protection = initial(cold_protection) + heat_protection = initial(heat_protection) set_armor(initial(armor_type)) user.visible_message(span_notice("[user] adjusts their [src] for defensive use."), span_notice("You adjust your [src] for defensive use.")) return CLICK_ACTION_SUCCESS -/datum/armor/cloak_goliath - melee = 35 - bullet = 10 - laser = 25 - energy = 35 - bomb = 25 - fire = 60 - acid = 60 - /obj/item/clothing/head/hooded/cloakhood/goliath name = "goliath cloak hood" icon = 'icons/obj/clothing/head/helmet.dmi' worn_icon = 'icons/mob/clothing/head/helmet.dmi' icon_state = "golhood" desc = "A protective & concealing hood." - armor_type = /datum/armor/cloakhood_goliath + armor_type = /datum/armor/hooded_goliath + body_parts_covered = HEAD + cold_protection = HEAD + min_cold_protection_temperature = FIRE_HELM_MIN_TEMP_PROTECT + heat_protection = HEAD + max_heat_protection_temperature = SPACE_SUIT_MAX_TEMP_PROTECT clothing_flags = SNUG_FIT flags_inv = HIDEEARS|HIDEEYES|HIDEHAIR|HIDEFACIALHAIR transparent_protection = HIDEMASK resistance_flags = FIRE_PROOF -/datum/armor/cloakhood_goliath - melee = 35 - bullet = 10 - laser = 25 - energy = 35 - bomb = 25 - fire = 60 - acid = 60 +/obj/item/clothing/head/hooded/cloakhood/goliath/Initialize(mapload) + . = ..() + +/obj/item/clothing/suit/armor/bone + name = "bone armor" + desc = "A tribal armor plate, crafted from animal bone." + icon_state = "bonearmor" + inhand_icon_state = null + blood_overlay_type = "armor" + armor_type = /datum/armor/hooded_explorer + body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS + cold_protection = CHEST|GROIN|LEGS|ARMS + min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT + heat_protection = CHEST|GROIN|LEGS|FEET|ARMS + max_heat_protection_temperature = SPACE_SUIT_MAX_TEMP_PROTECT + resistance_flags = FIRE_PROOF + +/obj/item/clothing/suit/armor/bone/Initialize(mapload) + . = ..() + AddComponent(/datum/component/armor_plate, upgrade_item = /obj/item/clothing/accessory/talisman) + allowed = GLOB.mining_suit_allowed + +/obj/item/clothing/head/helmet/skull + name = "skull helmet" + desc = "An intimidating tribal helmet, it doesn't look very comfortable." + icon_state = "skull" + inhand_icon_state = null + strip_delay = 100 + flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDESNOUT + flags_cover = HEADCOVERSEYES + cold_protection = HEAD + min_cold_protection_temperature = FIRE_HELM_MIN_TEMP_PROTECT + heat_protection = HEAD + max_heat_protection_temperature = SPACE_SUIT_MAX_TEMP_PROTECT + armor_type = /datum/armor/hooded_explorer + resistance_flags = FIRE_PROOF + +/obj/item/clothing/head/helmet/skull/Initialize(mapload) + . = ..() + AddComponent(/datum/component/armor_plate, upgrade_item = /obj/item/clothing/accessory/talisman) /obj/item/clothing/suit/hooded/cloak/drake name = "drake armour" icon_state = "dragon" desc = "A suit of armour fashioned from the remains of an ash drake." - allowed = list( - /obj/item/flashlight, - /obj/item/gun/energy/recharge/kinetic_accelerator, - /obj/item/mining_scanner, - /obj/item/pickaxe, - /obj/item/resonator, - /obj/item/spear, - /obj/item/t_scanner/adv_mining_scanner, - /obj/item/tank/internals, - ) armor_type = /datum/armor/cloak_drake hoodtype = /obj/item/clothing/head/hooded/cloakhood/drake body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS @@ -215,6 +237,11 @@ bio = 60 fire = 100 acid = 100 + wound = 10 + +/obj/item/clothing/suit/hooded/cloak/drake/Initialize(mapload) + . = ..() + allowed = GLOB.mining_suit_allowed /obj/item/clothing/head/hooded/cloakhood/drake name = "drake helm" @@ -222,7 +249,7 @@ worn_icon = 'icons/mob/clothing/head/helmet.dmi' icon_state = "dragon" desc = "The skull of a dragon." - armor_type = /datum/armor/cloakhood_drake + armor_type = /datum/armor/cloak_drake clothing_flags = SNUG_FIT cold_protection = HEAD min_cold_protection_temperature = FIRE_HELM_MIN_TEMP_PROTECT @@ -230,30 +257,10 @@ max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT resistance_flags = FIRE_PROOF | ACID_PROOF -/datum/armor/cloakhood_drake - melee = 65 - bullet = 15 - laser = 40 - energy = 40 - bomb = 70 - bio = 60 - fire = 100 - acid = 100 - /obj/item/clothing/suit/hooded/cloak/godslayer name = "godslayer armour" icon_state = "godslayer" desc = "A suit of armour fashioned from the remnants of a knight's armor, and parts of a wendigo." - allowed = list( - /obj/item/flashlight, - /obj/item/gun/energy/recharge/kinetic_accelerator, - /obj/item/mining_scanner, - /obj/item/pickaxe, - /obj/item/resonator, - /obj/item/spear, - /obj/item/t_scanner/adv_mining_scanner, - /obj/item/tank/internals, - ) armor_type = /datum/armor/cloak_godslayer clothing_flags = STOPSPRESSUREDAMAGE | THICKMATERIAL hoodtype = /obj/item/clothing/head/hooded/cloakhood/godslayer @@ -281,6 +288,11 @@ bio = 50 fire = 100 acid = 100 + wound = 10 + +/obj/item/clothing/suit/hooded/cloak/godslayer/Initialize(mapload) + . = ..() + allowed = GLOB.mining_suit_allowed /obj/item/clothing/head/hooded/cloakhood/godslayer name = "godslayer helm" @@ -288,7 +300,7 @@ worn_icon = 'icons/mob/clothing/head/helmet.dmi' icon_state = "godslayer" desc = "The horns and skull of a wendigo, held together by the remaining icey energy of a demonic miner." - armor_type = /datum/armor/cloakhood_godslayer + armor_type = /datum/armor/cloak_godslayer clothing_flags = STOPSPRESSUREDAMAGE | THICKMATERIAL | SNUG_FIT cold_protection = HEAD min_cold_protection_temperature = FIRE_HELM_MIN_TEMP_PROTECT @@ -298,16 +310,6 @@ flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH | PEPPERPROOF resistance_flags = FIRE_PROOF | ACID_PROOF | FREEZE_PROOF -/datum/armor/cloakhood_godslayer - melee = 50 - bullet = 25 - laser = 25 - energy = 25 - bomb = 50 - bio = 50 - fire = 100 - acid = 100 - /obj/item/clothing/suit/hooded/cloak/godslayer/examine(mob/user) . = ..() if(loc == user && !COOLDOWN_FINISHED(src, effect_cooldown)) @@ -349,6 +351,7 @@ bomb = 50 fire = 60 acid = 60 + wound = 10 /obj/item/clothing/head/hooded/explorer/syndicate name = "syndicate explorer hood" diff --git a/code/modules/mining/equipment/grapple_gun.dm b/code/modules/mining/equipment/grapple_gun.dm index c7c91ede73e6f..4e61b5d0fb3fd 100644 --- a/code/modules/mining/equipment/grapple_gun.dm +++ b/code/modules/mining/equipment/grapple_gun.dm @@ -2,7 +2,7 @@ /obj/item/grapple_gun name = "grapple gun" - desc = "A handy tool for traversing the land-scape of lava-land!" + desc = "A small specialised airgun capable of launching a climbing hook into a distant rock face and pulling the user toward it via motorised zip-line. A handy tool for traversing the craggy landscape of lavaland!" icon = 'icons/obj/mining.dmi' icon_state = "grapple_gun" lefthand_file = 'icons/mob/inhands/weapons/guns_lefthand.dmi' @@ -35,26 +35,22 @@ zipline_sound = new(src) update_appearance() -/obj/item/grapple_gun/afterattack(atom/target, mob/living/user, proximity) - . = ..() - +/obj/item/grapple_gun/ranged_interact_with_atom(atom/target, mob/living/user, list/modifiers) if(isgroundlessturf(target)) - return + return NONE + if(target == user || !hooked) + return NONE if(!lavaland_equipment_pressure_check(get_turf(user))) user.balloon_alert(user, "gun mechanism wont work here!") - return - - if(target == user || !hooked) - return - + return ITEM_INTERACT_BLOCKING if(get_dist(user, target) > 9) user.balloon_alert(user, "too far away!") - return + return ITEM_INTERACT_BLOCKING var/turf/attacked_atom = get_turf(target) if(isnull(attacked_atom)) - return + return ITEM_INTERACT_BLOCKING var/list/turf_list = (get_line(user, attacked_atom) - get_turf(src)) for(var/turf/singular_turf as anything in turf_list) @@ -66,9 +62,7 @@ break if(user.CanReach(attacked_atom)) - return - - . |= AFTERATTACK_PROCESSED_ITEM + return ITEM_INTERACT_BLOCKING var/atom/bullet = fire_projectile(/obj/projectile/grapple_hook, attacked_atom, 'sound/weapons/zipline_fire.ogg') zipline = user.Beam(bullet, icon_state = "zipline_hook", maxdistance = 9, layer = BELOW_MOB_LAYER) @@ -77,6 +71,7 @@ RegisterSignal(bullet, COMSIG_PREQDELETED, PROC_REF(on_grapple_fail)) zipliner = WEAKREF(user) update_appearance() + return ITEM_INTERACT_SUCCESS /obj/item/grapple_gun/proc/on_grapple_hit(datum/source, atom/movable/firer, atom/target, Angle) SIGNAL_HANDLER diff --git a/code/modules/mining/equipment/kinetic_crusher.dm b/code/modules/mining/equipment/kinetic_crusher.dm index 92ded187109fb..0a4a6ce6572b1 100644 --- a/code/modules/mining/equipment/kinetic_crusher.dm +++ b/code/modules/mining/equipment/kinetic_crusher.dm @@ -15,6 +15,7 @@ desc = "An early design of the proto-kinetic accelerator, it is little more than a combination of various mining tools cobbled together, \ forming a high-tech club. While it is an effective mining tool, it did little to aid any but the most skilled and/or \ suicidal miners against local fauna." + resistance_flags = FIRE_PROOF force = 0 //You can't hit stuff unless wielded w_class = WEIGHT_CLASS_BULKY slot_flags = ITEM_SLOT_BACK @@ -83,28 +84,28 @@ crusher_trophy.remove_from(src, user) return ITEM_INTERACT_SUCCESS -/obj/item/kinetic_crusher/attack(mob/living/target, mob/living/carbon/user) - if(!HAS_TRAIT(src, TRAIT_WIELDED)) - to_chat(user, span_warning("[src] is too heavy to use with one hand! You fumble and drop everything.")) - user.drop_all_held_items() - return - var/datum/status_effect/crusher_damage/crusher_damage_effect = target.has_status_effect(/datum/status_effect/crusher_damage) - if(!crusher_damage_effect) - crusher_damage_effect = target.apply_status_effect(/datum/status_effect/crusher_damage) - var/target_health = target.health - ..() - for(var/obj/item/crusher_trophy/crusher_trophy as anything in trophies) - if(!QDELETED(target)) - crusher_trophy.on_melee_hit(target, user) - if(!QDELETED(crusher_damage_effect) && !QDELETED(target)) - crusher_damage_effect.total_damage += target_health - target.health //we did some damage, but let's not assume how much we did - -/obj/item/kinetic_crusher/afterattack(mob/living/target, mob/living/user, proximity_flag, clickparams) +/obj/item/kinetic_crusher/pre_attack(atom/A, mob/living/user, params) . = ..() if(.) + return TRUE + if(!HAS_TRAIT(src, TRAIT_WIELDED)) + user.balloon_alert(user, "must be wielded!") + return TRUE + return . + +/obj/item/kinetic_crusher/attack(mob/living/target, mob/living/carbon/user) + target.apply_status_effect(/datum/status_effect/crusher_damage) + return ..() + +/obj/item/kinetic_crusher/afterattack(mob/living/target, mob/living/user, clickparams) + if(!isliving(target)) return - if(!proximity_flag || !isliving(target)) + // Melee effect + for(var/obj/item/crusher_trophy/crusher_trophy as anything in trophies) + crusher_trophy.on_melee_hit(target, user) + if(QDELETED(target)) return + // Clear existing marks var/valid_crusher_attack = FALSE for(var/datum/status_effect/crusher_mark/crusher_mark_effect as anything in target.get_all_status_effect_of_id(/datum/status_effect/crusher_mark)) //this will erase ALL crusher marks, not only ones by you. @@ -114,9 +115,8 @@ break if(!valid_crusher_attack) return - var/datum/status_effect/crusher_damage/crusher_damage_effect = target.has_status_effect(/datum/status_effect/crusher_damage) - if(!crusher_damage_effect) - crusher_damage_effect = target.apply_status_effect(/datum/status_effect/crusher_damage) + // Detonation effect + var/datum/status_effect/crusher_damage/crusher_damage_effect = target.has_status_effect(/datum/status_effect/crusher_damage) || target.apply_status_effect(/datum/status_effect/crusher_damage) var/target_health = target.health for(var/obj/item/crusher_trophy/crusher_trophy as anything in trophies) crusher_trophy.on_mark_detonation(target, user) @@ -129,6 +129,7 @@ var/combined_damage = detonation_damage var/backstab_dir = get_dir(user, target) var/def_check = target.getarmor(type = BOMB) + // Backstab bonus if((user.dir & backstab_dir) && (target.dir & backstab_dir)) backstabbed = TRUE combined_damage += backstab_bonus @@ -138,24 +139,23 @@ SEND_SIGNAL(user, COMSIG_LIVING_CRUSHER_DETONATE, target, src, backstabbed) target.apply_damage(combined_damage, BRUTE, blocked = def_check) -/obj/item/kinetic_crusher/attack_secondary(atom/target, mob/living/user, clickparams) - return SECONDARY_ATTACK_CONTINUE_CHAIN - -/obj/item/kinetic_crusher/afterattack_secondary(atom/target, mob/living/user, proximity_flag, click_parameters) +/obj/item/kinetic_crusher/interact_with_atom_secondary(atom/interacting_with, mob/living/user, list/modifiers) if(!HAS_TRAIT(src, TRAIT_WIELDED)) balloon_alert(user, "wield it first!") - return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN - if(target == user) + return ITEM_INTERACT_BLOCKING + if(interacting_with == user) balloon_alert(user, "can't aim at yourself!") - return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN - fire_kinetic_blast(target, user, click_parameters) + return ITEM_INTERACT_BLOCKING + fire_kinetic_blast(interacting_with, user, modifiers) user.changeNext_move(CLICK_CD_MELEE) - return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN + return ITEM_INTERACT_SUCCESS + +/obj/item/kinetic_crusher/ranged_interact_with_atom_secondary(atom/interacting_with, mob/living/user, list/modifiers) + return interact_with_atom_secondary(interacting_with, user, modifiers) -/obj/item/kinetic_crusher/proc/fire_kinetic_blast(atom/target, mob/living/user, click_parameters) +/obj/item/kinetic_crusher/proc/fire_kinetic_blast(atom/target, mob/living/user, list/modifiers) if(!charged) return - var/modifiers = params2list(click_parameters) var/turf/proj_turf = user.loc if(!isturf(proj_turf)) return diff --git a/code/modules/mining/equipment/lazarus_injector.dm b/code/modules/mining/equipment/lazarus_injector.dm index ff90c418c8861..4e82c03d3736f 100644 --- a/code/modules/mining/equipment/lazarus_injector.dm +++ b/code/modules/mining/equipment/lazarus_injector.dm @@ -25,27 +25,25 @@ ///So you can't revive boss monsters or robots with it var/revive_type = SENTIENCE_ORGANIC -/obj/item/lazarus_injector/afterattack(atom/target, mob/user, proximity_flag) - . = ..() - if(!loaded || !proximity_flag) - return - +/obj/item/lazarus_injector/interact_with_atom(atom/target, mob/living/user, list/modifiers) + if(!loaded) + return NONE if(SEND_SIGNAL(target, COMSIG_ATOM_ON_LAZARUS_INJECTOR, src, user) & LAZARUS_INJECTOR_USED) - return - + return ITEM_INTERACT_SUCCESS if(!isliving(target)) - return + return NONE var/mob/living/target_animal = target if(!target_animal.compare_sentience_type(revive_type)) // Will also return false if not a basic or simple mob, which are the only two we want anyway balloon_alert(user, "invalid creature!") - return + return ITEM_INTERACT_BLOCKING if(target_animal.stat != DEAD) balloon_alert(user, "it's not dead!") - return + return ITEM_INTERACT_BLOCKING target_animal.lazarus_revive(user, malfunctioning) expend(target_animal, user) + return ITEM_INTERACT_SUCCESS /obj/item/lazarus_injector/proc/expend(atom/revived_target, mob/user) user.visible_message(span_notice("[user] injects [revived_target] with [src], reviving it.")) diff --git a/code/modules/mining/equipment/mining_tools.dm b/code/modules/mining/equipment/mining_tools.dm index 4fdd997fcab32..abf5ca77e181d 100644 --- a/code/modules/mining/equipment/mining_tools.dm +++ b/code/modules/mining/equipment/mining_tools.dm @@ -143,6 +143,7 @@ effectiveness = 40, \ ) //it's sharp, so it works, but barely. + AddElement(/datum/element/gravedigger) /obj/item/shovel/suicide_act(mob/living/user) user.visible_message(span_suicide("[user] begins digging their own grave! It looks like [user.p_theyre()] trying to commit suicide!")) @@ -223,6 +224,7 @@ /obj/item/trench_tool/Initialize(mapload) . = ..() AddElement(/datum/element/update_icon_updates_onmob) + AddElement(/datum/element/gravedigger) /obj/item/trench_tool/examine(mob/user) . = ..() diff --git a/code/modules/mining/equipment/miningradio.dm b/code/modules/mining/equipment/miningradio.dm index c6fa3a34fc36a..61d80bfce6faf 100644 --- a/code/modules/mining/equipment/miningradio.dm +++ b/code/modules/mining/equipment/miningradio.dm @@ -1,6 +1,6 @@ /// Portable mining radio purchasable by miners /obj/item/radio/weather_monitor - icon = 'icons/obj/miningradio.dmi' + icon = 'icons/obj/devices/miningradio.dmi' name = "mining weather radio" icon_state = "miningradio" desc = "A weather radio designed for use in inhospitable environments. Gives audible warnings when storms approach. Has access to cargo channel." diff --git a/code/modules/mining/equipment/monster_organs/monster_organ.dm b/code/modules/mining/equipment/monster_organs/monster_organ.dm index 135373469d847..a854f113740f8 100644 --- a/code/modules/mining/equipment/monster_organs/monster_organ.dm +++ b/code/modules/mining/equipment/monster_organs/monster_organ.dm @@ -8,24 +8,21 @@ desc = "Inject certain types of monster organs with this stabilizer to prevent their rapid decay." w_class = WEIGHT_CLASS_TINY -/obj/item/mining_stabilizer/afterattack(obj/item/organ/target_organ, mob/user, proximity) - . = ..() - if (!proximity) - return - . |= AFTERATTACK_PROCESSED_ITEM - - var/obj/item/organ/internal/monster_core/target_core = target_organ - if (!istype(target_core, /obj/item/organ/internal/monster_core)) +/obj/item/mining_stabilizer/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + if(!isorgan(interacting_with)) + return NONE + var/obj/item/organ/internal/monster_core/target_core = interacting_with + if (!istype(target_core)) balloon_alert(user, "invalid target!") - return . + return ITEM_INTERACT_BLOCKING if (!target_core.preserve()) balloon_alert(user, "organ decayed!") - return . + return ITEM_INTERACT_BLOCKING balloon_alert(user, "organ stabilized") qdel(src) - return . + return ITEM_INTERACT_SUCCESS /** * Useful organs which drop as loot from a mining creature. @@ -135,12 +132,9 @@ icon_state = initial(icon_state) return ..() -/obj/item/organ/internal/monster_core/afterattack(atom/target, mob/user, proximity_flag) - . = ..() - if (!proximity_flag) - return - try_apply(target, user) - return . | AFTERATTACK_PROCESSED_ITEM +/obj/item/organ/internal/monster_core/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + try_apply(interacting_with, user) + return ITEM_INTERACT_SUCCESS /obj/item/organ/internal/monster_core/attack_self(mob/user) if (!user.can_perform_action(src, FORBID_TELEKINESIS_REACH|ALLOW_RESTING)) diff --git a/code/modules/mining/equipment/monster_organs/rush_gland.dm b/code/modules/mining/equipment/monster_organs/rush_gland.dm index b3dbc683da438..f9cfa1b88f1c3 100644 --- a/code/modules/mining/equipment/monster_organs/rush_gland.dm +++ b/code/modules/mining/equipment/monster_organs/rush_gland.dm @@ -45,6 +45,7 @@ id = "lobster_rush" duration = 3 SECONDS alert_type = /atom/movable/screen/alert/status_effect/lobster_rush + show_duration = TRUE var/spawned_last_move = FALSE /atom/movable/screen/alert/status_effect/lobster_rush diff --git a/code/modules/mining/equipment/wormhole_jaunter.dm b/code/modules/mining/equipment/wormhole_jaunter.dm index a19d0a7242083..eb94f68a1f9a7 100644 --- a/code/modules/mining/equipment/wormhole_jaunter.dm +++ b/code/modules/mining/equipment/wormhole_jaunter.dm @@ -61,7 +61,6 @@ else if(adjacent) try_move_adjacent(tunnel) - playsound(src,'sound/effects/sparks4.ogg',50,TRUE) qdel(src) return FALSE // used for chasm code diff --git a/code/modules/mining/fulton.dm b/code/modules/mining/fulton.dm index 006c920d4b9c4..649acabfcae4a 100644 --- a/code/modules/mining/fulton.dm +++ b/code/modules/mining/fulton.dm @@ -51,35 +51,33 @@ GLOBAL_LIST_EMPTY(total_extraction_beacons) beacon_ref = WEAKREF(chosen_beacon) balloon_alert(user, "linked!") -/obj/item/extraction_pack/afterattack(atom/movable/thing, mob/living/carbon/human/user, proximity_flag, params) - . = ..() - . |= AFTERATTACK_PROCESSED_ITEM - +/obj/item/extraction_pack/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + if(!ismovable(interacting_with)) + return NONE + if(!isturf(interacting_with.loc)) // no extracting stuff inside other stuff + return NONE + var/atom/movable/thing = interacting_with + if(thing.anchored) + return NONE + + . = ITEM_INTERACT_BLOCKING var/obj/structure/extraction_point/beacon = beacon_ref?.resolve() if(isnull(beacon)) - balloon_alert(user, "not linked") + balloon_alert(user, "not linked!") beacon_ref = null - return - + return . if(!can_use_indoors) var/area/area = get_area(thing) if(!area.outdoors) - balloon_alert(user, "not outdoors") - return - - if(!proximity_flag || !istype(thing)) - return - + balloon_alert(user, "not outdoors!") + return . if(!safe_for_living_creatures && check_for_living_mobs(thing)) to_chat(user, span_warning("[src] is not safe for use with living creatures, they wouldn't survive the trip back!")) balloon_alert(user, "not safe!") - return - - if(!isturf(thing.loc)) // no extracting stuff inside other stuff - return - if(thing.anchored || (thing.move_resist > max_force_fulton)) - return - + return . + if(thing.move_resist > max_force_fulton) + balloon_alert(user, "too heavy!") + return . balloon_alert_to_viewers("attaching...") playsound(thing, 'sound/items/zip.ogg', vol = 50, vary = TRUE) if(isliving(thing)) @@ -88,23 +86,21 @@ GLOBAL_LIST_EMPTY(total_extraction_beacons) to_chat(thing, span_userdanger("You are being extracted! Stand still to proceed.")) if(!do_after(user, 5 SECONDS, target = thing)) - return + return . balloon_alert_to_viewers("extracting!") - if(loc == user) - user.back?.atom_storage?.attempt_insert(src, user, force = STORAGE_SOFT_LOCKED) + if(loc == user && ishuman(user)) + var/mob/living/carbon/human/human_user = user + human_user.back?.atom_storage?.attempt_insert(src, user, force = STORAGE_SOFT_LOCKED) uses_left-- if(uses_left <= 0) user.transferItemToLoc(src, thing, TRUE) - var/mutable_appearance/balloon - var/mutable_appearance/balloon2 - var/mutable_appearance/balloon3 - if(isliving(thing)) var/mob/living/creature = thing creature.Paralyze(32 SECONDS) // Keep them from moving during the duration of the extraction + ADD_TRAIT(creature, TRAIT_FORCED_STANDING, FULTON_PACK_TRAIT) // Prevents animation jank from happening if(creature.buckled) creature.buckled.unbuckle_mob(creature, TRUE) // Unbuckle them to prevent anchoring problems else @@ -114,14 +110,15 @@ GLOBAL_LIST_EMPTY(total_extraction_beacons) var/obj/effect/extraction_holder/holder_obj = new(get_turf(thing)) holder_obj.appearance = thing.appearance thing.forceMove(holder_obj) - balloon2 = mutable_appearance('icons/effects/fulton_balloon.dmi', "fulton_expand") + var/mutable_appearance/balloon2 = mutable_appearance('icons/effects/fulton_balloon.dmi', "fulton_expand", layer = VEHICLE_LAYER) balloon2.pixel_y = 10 balloon2.appearance_flags = RESET_COLOR | RESET_ALPHA | RESET_TRANSFORM holder_obj.add_overlay(balloon2) + addtimer(CALLBACK(src, PROC_REF(create_balloon), thing, user, holder_obj, balloon2), 0.4 SECONDS) + return ITEM_INTERACT_SUCCESS - sleep(0.4 SECONDS) - - balloon = mutable_appearance('icons/effects/fulton_balloon.dmi', "fulton_balloon") +/obj/item/extraction_pack/proc/create_balloon(atom/movable/thing, mob/living/user, obj/effect/extraction_holder/holder_obj, mutable_appearance/balloon2) + var/mutable_appearance/balloon = mutable_appearance('icons/effects/fulton_balloon.dmi', "fulton_balloon", layer = VEHICLE_LAYER) balloon.pixel_y = 10 balloon.appearance_flags = RESET_COLOR | RESET_ALPHA | RESET_TRANSFORM holder_obj.cut_overlay(balloon2) @@ -133,6 +130,7 @@ GLOBAL_LIST_EMPTY(total_extraction_beacons) animate(pixel_z = -5, time = 1 SECONDS, flags = ANIMATION_RELATIVE) animate(pixel_z = 5, time = 1 SECONDS, flags = ANIMATION_RELATIVE) animate(pixel_z = -5, time = 1 SECONDS, flags = ANIMATION_RELATIVE) + sleep(6 SECONDS) playsound(holder_obj.loc, 'sound/items/fultext_launch.ogg', vol = 50, vary = TRUE, extrarange = -3) @@ -147,7 +145,7 @@ GLOBAL_LIST_EMPTY(total_extraction_beacons) sleep(3 SECONDS) var/turf/flooring_near_beacon = list() - var/turf/beacon_turf = get_turf(beacon) + var/turf/beacon_turf = get_turf(beacon_ref.resolve()) for(var/turf/floor as anything in RANGE_TURFS(1, beacon_turf)) if(!floor.is_blocked_turf()) flooring_near_beacon += floor @@ -160,21 +158,24 @@ GLOBAL_LIST_EMPTY(total_extraction_beacons) animate(holder_obj, pixel_z = -990, time = 5 SECONDS, flags = ANIMATION_RELATIVE) animate(pixel_z = 5, time = 1 SECONDS, flags = ANIMATION_RELATIVE) animate(pixel_z = -5, time = 1 SECONDS, flags = ANIMATION_RELATIVE) + sleep(7 SECONDS) - balloon3 = mutable_appearance('icons/effects/fulton_balloon.dmi', "fulton_retract") + var/mutable_appearance/balloon3 = mutable_appearance('icons/effects/fulton_balloon.dmi', "fulton_retract", layer = VEHICLE_LAYER) balloon3.pixel_y = 10 balloon3.appearance_flags = RESET_COLOR | RESET_ALPHA | RESET_TRANSFORM holder_obj.cut_overlay(balloon) holder_obj.add_overlay(balloon3) + sleep(0.4 SECONDS) holder_obj.cut_overlay(balloon3) + if (isliving(thing)) + REMOVE_TRAIT(thing, TRAIT_FORCED_STANDING, FULTON_PACK_TRAIT) thing.set_anchored(FALSE) // An item has to be unanchored to be extracted in the first place. thing.set_density(initial(thing.density)) animate(holder_obj, pixel_z = -10, time = 0.5 SECONDS, flags = ANIMATION_RELATIVE) sleep(0.5 SECONDS) - thing.forceMove(holder_obj.loc) qdel(holder_obj) if(uses_left <= 0) diff --git a/code/modules/mining/laborcamp/laborstacker.dm b/code/modules/mining/laborcamp/laborstacker.dm index f46c7ecebb938..cd5a60a22f2ae 100644 --- a/code/modules/mining/laborcamp/laborstacker.dm +++ b/code/modules/mining/laborcamp/laborstacker.dm @@ -106,7 +106,10 @@ else if(!(obj_flags & EMAGGED)) security_radio.set_frequency(FREQ_SECURITY) - security_radio.talk_into(src, "A prisoner has returned to the station. Minerals and Prisoner ID card ready for retrieval.", FREQ_SECURITY) + var/datum/record/crew/target = find_record(user_mob.real_name) + target?.wanted_status = WANTED_PAROLE + + security_radio.talk_into(src, "[user_mob.name] returned to the station. Minerals and Prisoner ID card ready for retrieval.", FREQ_SECURITY) user_mob.log_message("has completed their labor points goal and is now sending the gulag shuttle back to the station.", LOG_GAME) to_chat(user_mob, span_notice("Shuttle received message and will be sent shortly.")) return TRUE diff --git a/code/modules/mining/lavaland/ash_flora.dm b/code/modules/mining/lavaland/ash_flora.dm index 16b8b3ec2f2b1..1e4e444861155 100644 --- a/code/modules/mining/lavaland/ash_flora.dm +++ b/code/modules/mining/lavaland/ash_flora.dm @@ -311,7 +311,7 @@ product = /obj/item/food/grown/ash_flora/shavings genes = list(/datum/plant_gene/trait/plant_type/fungal_metabolism, /datum/plant_gene/trait/fire_resistance) growing_icon = 'icons/obj/service/hydroponics/growing_mushrooms.dmi' - reagents_add = list(/datum/reagent/consumable/sugar = 0.06, /datum/reagent/consumable/ethanol = 0.04, /datum/reagent/stabilizing_agent = 0.06, /datum/reagent/consumable/mintextract = 0.02) + reagents_add = list(/datum/reagent/consumable/nutriment = 0.04, /datum/reagent/consumable/ethanol = 0.04, /datum/reagent/stabilizing_agent = 0.06, /datum/reagent/consumable/mintextract = 0.02) /obj/item/seeds/lavaland/porcini name = "pack of porcini mycelium" @@ -322,7 +322,7 @@ product = /obj/item/food/grown/ash_flora/mushroom_leaf genes = list(/datum/plant_gene/trait/plant_type/fungal_metabolism, /datum/plant_gene/trait/fire_resistance) growing_icon = 'icons/obj/service/hydroponics/growing_mushrooms.dmi' - reagents_add = list(/datum/reagent/consumable/nutriment = 0.06, /datum/reagent/consumable/vitfro = 0.04, /datum/reagent/drug/nicotine = 0.04) + reagents_add = list(/datum/reagent/consumable/nutriment = 0.06, /datum/reagent/consumable/sugar = 0.06, /datum/reagent/consumable/vitfro = 0.04, /datum/reagent/drug/nicotine = 0.04) /obj/item/seeds/lavaland/inocybe name = "pack of inocybe mycelium" diff --git a/code/modules/mining/lavaland/megafauna_loot.dm b/code/modules/mining/lavaland/megafauna_loot.dm index 626543f40604d..0bbf15352318d 100644 --- a/code/modules/mining/lavaland/megafauna_loot.dm +++ b/code/modules/mining/lavaland/megafauna_loot.dm @@ -99,14 +99,20 @@ blink_activated = !blink_activated to_chat(user, span_notice("You [blink_activated ? "enable" : "disable"] the blink function on [src].")) -/obj/item/hierophant_club/afterattack(atom/target, mob/user, proximity_flag, click_parameters) - . = ..() - . |= AFTERATTACK_PROCESSED_ITEM +/obj/item/hierophant_club/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) // If our target is the beacon and the hierostaff is next to the beacon, we're trying to pick it up. - if((target == beacon) && target.Adjacent(src)) - return + if(interacting_with == beacon) + return NONE + if(blink_activated) + blink.teleport(user, interacting_with) + return ITEM_INTERACT_SUCCESS + return NONE + +/obj/item/hierophant_club/ranged_interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) if(blink_activated) - blink.teleport(user, target) + blink.teleport(user, interacting_with) + return ITEM_INTERACT_SUCCESS + return NONE /obj/item/hierophant_club/update_icon_state() icon_state = inhand_icon_state = "hierophant_club[blink?.current_charges > 0 ? "_ready":""][(!QDELETED(beacon)) ? "":"_beacon"]" @@ -261,10 +267,10 @@ heat_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS - clothing_flags = THICKMATERIAL + clothing_flags = THICKMATERIAL|HEADINTERNALS resistance_flags = FIRE_PROOF|LAVA_PROOF|ACID_PROOF transparent_protection = HIDESUITSTORAGE|HIDEJUMPSUIT - allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/resonator, /obj/item/mining_scanner, /obj/item/t_scanner/adv_mining_scanner, /obj/item/gun/energy/recharge/kinetic_accelerator, /obj/item/pickaxe) + allowed = null greyscale_colors = "#4d4d4d#808080" greyscale_config = /datum/greyscale_config/heck_suit greyscale_config_worn = /datum/greyscale_config/heck_suit/worn @@ -283,6 +289,7 @@ . = ..() AddElement(/datum/element/radiation_protected_clothing) AddElement(/datum/element/gags_recolorable) + allowed = GLOB.mining_suit_allowed /obj/item/clothing/suit/hooded/hostile_environment/process(seconds_per_tick) var/mob/living/carbon/wearer = loc @@ -748,7 +755,7 @@ "wings" = "None", "frills" = "None", "spines" = "Long", - "body_markings" = "Dark Tiger Body", + "lizard_markings" = "Dark Tiger Body", "legs" = DIGITIGRADE_LEGS, ) consumer.eye_color_left = "#FEE5A3" @@ -794,40 +801,43 @@ var/timer = 0 var/static/list/banned_turfs = typecacheof(list(/turf/open/space, /turf/closed)) -/obj/item/lava_staff/afterattack(atom/target, mob/user, proximity_flag, click_parameters) - . = ..() +/obj/item/lava_staff/ranged_interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + return interact_with_atom(interacting_with, user, modifiers) + +/obj/item/lava_staff/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) if(timer > world.time) - return - . |= AFTERATTACK_PROCESSED_ITEM - if(is_type_in_typecache(target, banned_turfs)) - return - if(target in view(user.client.view, get_turf(user))) - var/turf/open/T = get_turf(target) - if(!istype(T)) - return - if(!islava(T)) - var/obj/effect/temp_visual/lavastaff/L = new /obj/effect/temp_visual/lavastaff(T) - L.alpha = 0 - animate(L, alpha = 255, time = create_delay) - user.visible_message(span_danger("[user] points [src] at [T]!")) - timer = world.time + create_delay + 1 - if(do_after(user, create_delay, target = T)) - var/old_name = T.name - if(T.TerraformTurf(turf_type, flags = CHANGETURF_INHERIT_AIR)) - user.visible_message(span_danger("[user] turns \the [old_name] into [transform_string]!")) - message_admins("[ADMIN_LOOKUPFLW(user)] fired the lava staff at [ADMIN_VERBOSEJMP(T)]") - user.log_message("fired the lava staff at [AREACOORD(T)].", LOG_ATTACK) - timer = world.time + create_cooldown - playsound(T,'sound/magic/fireball.ogg', 200, TRUE) - else - timer = world.time - qdel(L) - else + return NONE + if(is_type_in_typecache(interacting_with, banned_turfs)) + return NONE + if(!(interacting_with in view(user.client.view, get_turf(user)))) + return NONE + var/turf/open/T = get_turf(interacting_with) + if(!istype(T)) + return NONE + if(!islava(T)) + var/obj/effect/temp_visual/lavastaff/L = new /obj/effect/temp_visual/lavastaff(T) + L.alpha = 0 + animate(L, alpha = 255, time = create_delay) + user.visible_message(span_danger("[user] points [src] at [T]!")) + timer = world.time + create_delay + 1 + if(do_after(user, create_delay, target = T)) var/old_name = T.name - if(T.TerraformTurf(reset_turf_type, flags = CHANGETURF_INHERIT_AIR)) - user.visible_message(span_danger("[user] turns \the [old_name] into [reset_string]!")) - timer = world.time + reset_cooldown + if(T.TerraformTurf(turf_type, flags = CHANGETURF_INHERIT_AIR)) + user.visible_message(span_danger("[user] turns \the [old_name] into [transform_string]!")) + message_admins("[ADMIN_LOOKUPFLW(user)] fired the lava staff at [ADMIN_VERBOSEJMP(T)]") + user.log_message("fired the lava staff at [AREACOORD(T)].", LOG_ATTACK) + timer = world.time + create_cooldown playsound(T,'sound/magic/fireball.ogg', 200, TRUE) + else + timer = world.time + qdel(L) + else + var/old_name = T.name + if(T.TerraformTurf(reset_turf_type, flags = CHANGETURF_INHERIT_AIR)) + user.visible_message(span_danger("[user] turns \the [old_name] into [reset_string]!")) + timer = world.time + reset_cooldown + playsound(T,'sound/magic/fireball.ogg', 200, TRUE) + return ITEM_INTERACT_SUCCESS /obj/effect/temp_visual/lavastaff icon_state = "lavastaff_warn" @@ -1027,23 +1037,27 @@ affected_weather.wind_down() user.log_message("has dispelled a storm at [AREACOORD(user_turf)].", LOG_GAME) -/obj/item/storm_staff/afterattack(atom/target, mob/user, proximity_flag, click_parameters) - . = ..() - . |= AFTERATTACK_PROCESSED_ITEM +/obj/item/storm_staff/ranged_interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + return thunder_blast(interacting_with, user) ? ITEM_INTERACT_SUCCESS : ITEM_INTERACT_BLOCKING + +/obj/item/storm_staff/afterattack(atom/target, mob/user, click_parameters) + thunder_blast(target, user) + +/obj/item/storm_staff/proc/thunder_blast(atom/target, mob/user) if(!thunder_charges) balloon_alert(user, "needs to charge!") - return + return FALSE var/turf/target_turf = get_turf(target) var/area/target_area = get_area(target) if(!target_turf || !target_area || (is_type_in_list(target_area, excluded_areas))) balloon_alert(user, "can't bolt here!") - return + return FALSE if(target_turf in targeted_turfs) balloon_alert(user, "already targeted!") - return + return FALSE if(HAS_TRAIT(user, TRAIT_PACIFISM)) balloon_alert(user, "you don't want to harm!") - return + return FALSE var/power_boosted = FALSE for(var/datum/weather/weather as anything in SSweather.processing) if(weather.stage != MAIN_STAGE) @@ -1059,6 +1073,7 @@ thunder_charges-- addtimer(CALLBACK(src, PROC_REF(recharge)), thunder_charge_time) user.log_message("fired the staff of storms at [AREACOORD(target_turf)].", LOG_ATTACK) + return TRUE /obj/item/storm_staff/proc/recharge(mob/user) thunder_charges = min(thunder_charges + 1, max_thunder_charges) diff --git a/code/modules/mining/lavaland/tendril_loot.dm b/code/modules/mining/lavaland/tendril_loot.dm index c8d0f5580d724..6dfc8cfe40c3a 100644 --- a/code/modules/mining/lavaland/tendril_loot.dm +++ b/code/modules/mining/lavaland/tendril_loot.dm @@ -566,7 +566,7 @@ var/list/name2type = list() for(var/obj/item/organ/external/wings/functional/possible_type as anything in wing_types) var/datum/sprite_accessory/accessory = initial(possible_type.sprite_accessory_override) //get the type - accessory = GLOB.wings_list[initial(accessory.name)] //get the singleton instance + accessory = SSaccessories.wings_list[initial(accessory.name)] //get the singleton instance var/image/img = image(icon = accessory.icon, icon_state = "m_wingsopen_[accessory.icon_state]_BEHIND") //Process the HUD elements img.transform *= 0.5 img.pixel_x = -32 @@ -659,7 +659,10 @@ /obj/item/clothing/suit/hooded/berserker name = "berserker armor" - desc = "Voices echo from the armor, driving the user insane. Is not space-proof." + desc = "This hulking armor seems to possess some kind of dark force within; howling in rage, hungry for carnage. \ + The self-sealing stem bolts that allowed this suit to be spaceworthy have long since corroded. However, the entity \ + sealed within the suit seems to hunger for the fleeting lifeforce found in the remains left in the remains of drakes. \ + Feeding it drake remains seems to empower a suit piece, though turns the remains back to lifeless ash." icon_state = "berserker" icon = 'icons/obj/clothing/suits/armor.dmi' worn_icon = 'icons/mob/clothing/suits/armor.dmi' @@ -670,19 +673,9 @@ heat_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS - resistance_flags = FIRE_PROOF - clothing_flags = THICKMATERIAL - allowed = list( - /obj/item/flashlight, - /obj/item/tank/internals, - /obj/item/pickaxe, - /obj/item/spear, - /obj/item/organ/internal/monster_core, - /obj/item/knife, - /obj/item/kinetic_crusher, - /obj/item/resonator, - /obj/item/melee/cleaving_saw, - ) + flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT + resistance_flags = FIRE_PROOF | ACID_PROOF + clothing_flags = THICKMATERIAL|HEADINTERNALS /datum/armor/hooded_berserker melee = 30 @@ -690,23 +683,35 @@ laser = 10 energy = 20 bomb = 50 + bio = 60 fire = 100 acid = 100 + wound = 10 + +/datum/armor/drake_empowerment + melee = 35 + laser = 30 + energy = 20 + bomb = 20 /obj/item/clothing/suit/hooded/berserker/Initialize(mapload) . = ..() AddComponent(/datum/component/anti_magic, ALL, inventory_flags = ITEM_SLOT_OCLOTHING) + AddComponent(/datum/component/armor_plate, maxamount = 1, upgrade_item = /obj/item/drake_remains, armor_mod = /datum/armor/drake_empowerment, upgrade_prefix = "empowered") + allowed = GLOB.mining_suit_allowed #define MAX_BERSERK_CHARGE 100 #define PROJECTILE_HIT_MULTIPLIER 1.5 #define DAMAGE_TO_CHARGE_SCALE 0.75 #define CHARGE_DRAINED_PER_SECOND 5 -#define BERSERK_MELEE_ARMOR_ADDED 50 #define BERSERK_ATTACK_SPEED_MODIFIER 0.25 /obj/item/clothing/head/hooded/berserker name = "berserker helmet" - desc = "Peering into the eyes of the helmet is enough to seal damnation." + desc = "This burdensome helmet seems to possess some kind of dark force within; howling in rage, hungry for carnage. \ + The self-sealing stem bolts that allowed this helmet to be spaceworthy have long since corroded. However, the entity \ + sealed within the suit seems to hunger for the fleeting lifeforce found in the remains left in the remains of drakes. \ + Feeding it drake remains seems to empower a suit piece, though turns the remains back to lifeless ash." icon_state = "berserker" icon = 'icons/obj/clothing/head/helmet.dmi' worn_icon = 'icons/mob/clothing/head/helmet.dmi' @@ -716,7 +721,8 @@ min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT heat_protection = HEAD max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT - resistance_flags = FIRE_PROOF + flags_inv = HIDEHAIR|HIDEFACE|HIDEEARS|HIDESNOUT + resistance_flags = FIRE_PROOF | ACID_PROOF clothing_flags = SNUG_FIT|THICKMATERIAL /// Current charge of berserk, goes from 0 to 100 var/berserk_charge = 0 @@ -726,6 +732,7 @@ /obj/item/clothing/head/hooded/berserker/Initialize(mapload) . = ..() ADD_TRAIT(src, TRAIT_NODROP, LOCKED_HELMET_TRAIT) + AddComponent(/datum/component/armor_plate, maxamount = 1, upgrade_item = /obj/item/drake_remains, armor_mod = /datum/armor/drake_empowerment, upgrade_prefix = "empowered") /obj/item/clothing/head/hooded/berserker/examine() . = ..() @@ -757,12 +764,12 @@ if(berserk_active) return TRUE -/// Starts berserk, giving the wearer 50 melee armor, doubled attacking speed, NOGUNS trait, adding a color and giving them the berserk movespeed modifier +/// Starts berserk, reducing incoming brute by 50%, doubled attacking speed, NOGUNS trait, adding a color and giving them the berserk movespeed modifier /obj/item/clothing/head/hooded/berserker/proc/berserk_mode(mob/living/carbon/human/user) to_chat(user, span_warning("You enter berserk mode.")) playsound(user, 'sound/magic/staff_healing.ogg', 50) user.add_movespeed_modifier(/datum/movespeed_modifier/berserk) - user.physiology.armor = user.physiology.armor.generate_new_with_modifiers(list(MELEE = BERSERK_MELEE_ARMOR_ADDED)) + user.physiology.brute_mod *= 0.5 user.next_move_modifier *= BERSERK_ATTACK_SPEED_MODIFIER user.add_atom_colour(COLOR_BUBBLEGUM_RED, TEMPORARY_COLOUR_PRIORITY) ADD_TRAIT(user, TRAIT_NOGUNS, BERSERK_TRAIT) @@ -780,7 +787,7 @@ to_chat(user, span_warning("You exit berserk mode.")) playsound(user, 'sound/magic/summonitems_generic.ogg', 50) user.remove_movespeed_modifier(/datum/movespeed_modifier/berserk) - user.physiology.armor = user.physiology.armor.generate_new_with_modifiers(list(MELEE = -BERSERK_MELEE_ARMOR_ADDED)) + user.physiology.brute_mod *= 2 user.next_move_modifier /= BERSERK_ATTACK_SPEED_MODIFIER user.remove_atom_colour(TEMPORARY_COLOUR_PRIORITY, COLOR_BUBBLEGUM_RED) REMOVE_TRAIT(user, TRAIT_NOGUNS, BERSERK_TRAIT) @@ -791,9 +798,18 @@ #undef PROJECTILE_HIT_MULTIPLIER #undef DAMAGE_TO_CHARGE_SCALE #undef CHARGE_DRAINED_PER_SECOND -#undef BERSERK_MELEE_ARMOR_ADDED #undef BERSERK_ATTACK_SPEED_MODIFIER +/obj/item/drake_remains + name = "drake remains" + desc = "The gathered remains of a drake. It still crackles with heat, and smells distinctly of brimstone." + icon = 'icons/obj/clothing/head/helmet.dmi' + icon_state = "dragon" + +/obj/item/drake_remains/Initialize(mapload) + . = ..() + particles = new /particles/bonfire() + /obj/item/clothing/glasses/godeye name = "eye of god" desc = "A strange eye, said to have been torn from an omniscient creature that used to roam the wastes." diff --git a/code/modules/mining/machine_processing.dm b/code/modules/mining/machine_processing.dm index 2eaa1d95db92d..61318f63b92a5 100644 --- a/code/modules/mining/machine_processing.dm +++ b/code/modules/mining/machine_processing.dm @@ -152,7 +152,7 @@ materials = AddComponent( \ /datum/component/material_container, \ - DSmaterials.materials_by_category[MAT_CATEGORY_SILO], \ + SSmaterials.materials_by_category[MAT_CATEGORY_SILO], \ INFINITY, \ MATCONTAINER_EXAMINE, \ allowed_items = accepted_type \ diff --git a/code/modules/mining/machine_silo.dm b/code/modules/mining/machine_silo.dm index 5096f00a770a5..97c3a90b78eb1 100644 --- a/code/modules/mining/machine_silo.dm +++ b/code/modules/mining/machine_silo.dm @@ -20,7 +20,7 @@ materials = AddComponent( \ /datum/component/material_container, \ - DSmaterials.materials_by_category[MAT_CATEGORY_SILO], \ + SSmaterials.materials_by_category[MAT_CATEGORY_SILO], \ INFINITY, \ MATCONTAINER_EXAMINE, \ container_signals = list( \ diff --git a/code/modules/mining/machine_stacking.dm b/code/modules/mining/machine_stacking.dm index 1f9a29a6e3714..385afb0f81f3e 100644 --- a/code/modules/mining/machine_stacking.dm +++ b/code/modules/mining/machine_stacking.dm @@ -12,23 +12,29 @@ /obj/machinery/mineral/stacking_unit_console/Initialize(mapload) . = ..() - machine = locate(/obj/machinery/mineral/stacking_machine) in view(2, src) - if (machine) - machine.console = src + var/area/our_area = get_area(src) + if(!isnull(our_area)) + return + var/list/turf_list = our_area.get_turfs_by_zlevel(z) + if(!islist(turf_list)) + return + for (var/turf/area_turf as anything in turf_list) + var/obj/machinery/mineral/stacking_machine/found_machine = locate(/obj/machinery/mineral/stacking_machine) in area_turf + if(!isnull(found_machine) && isnull(found_machine.console)) + found_machine.console = src + machine = found_machine + break /obj/machinery/mineral/stacking_unit_console/Destroy() - if(machine) + if(!isnull(machine)) machine.console = null machine = null return ..() -/obj/machinery/mineral/stacking_unit_console/multitool_act(mob/living/user, obj/item/I) - if(!multitool_check_buffer(user, I)) - return - var/obj/item/multitool/M = I +/obj/machinery/mineral/stacking_unit_console/multitool_act(mob/living/user, obj/item/multitool/M) M.set_buffer(src) balloon_alert(user, "saved to multitool buffer") - return TRUE + return ITEM_INTERACT_SUCCESS /obj/machinery/mineral/stacking_unit_console/ui_interact(mob/user, datum/tgui/ui) ui = SStgui.try_update_ui(user, src, ui) @@ -109,7 +115,7 @@ ) /obj/machinery/mineral/stacking_machine/Destroy() - if(console) + if(!isnull(console)) console.machine = null console = null materials = null diff --git a/code/modules/mining/mine_items.dm b/code/modules/mining/mine_items.dm index 248e3cb890dd8..53fd78cf94d49 100644 --- a/code/modules/mining/mine_items.dm +++ b/code/modules/mining/mine_items.dm @@ -150,10 +150,405 @@ /obj/docking_port/stationary/mining_home/common/northstar roundstart_template = /datum/map_template/shuttle/mining_common/northstar -/**********************Mining car (Crate like thing, not the rail car)**************************/ - /obj/structure/closet/crate/miningcar - desc = "A mining car. This one doesn't work on rails, but has to be dragged." - name = "Mining car (not for rails)" + name = "mine cart" + desc = "A cart for use on rails. Or off rails, if you're so inclined." icon_state = "miningcar" base_icon_state = "miningcar" + drag_slowdown = 2 + open_sound = 'sound/machines/trapdoor/trapdoor_open.ogg' + close_sound = 'sound/machines/trapdoor/trapdoor_shut.ogg' + set_dir_on_move = TRUE + can_buckle = TRUE + + /// Whether we're on a set of rails or just on the ground + var/on_rails = FALSE + /// How many turfs we are travelling, also functions as speed (more momentum = faster) + var/momentum = 0 + +/obj/structure/closet/crate/miningcar/Initialize(mapload) + . = ..() + AddElement(/datum/element/noisy_movement, 'sound/effects/tank_treads.ogg', 50) + if(locate(/obj/structure/minecart_rail) in loc) + update_rail_state(TRUE) + +/obj/structure/closet/crate/miningcar/examine(mob/user) + . = ..() + if(on_rails) + . += span_notice("You can give this a bump to send it on its way, or drag it off the rails to drag it around.") + else + . += span_notice("Drag this onto a mine cart rail to set it on its way.") + +/obj/structure/closet/crate/miningcar/Move(atom/newloc, direct, glide_size_override, update_dir) + if(isnull(newloc)) + return ..() + if(!on_rails) + return ..() + // Allows people to drag minecarts along the rails rather than solely shoving it + if(can_travel_on_turf(get_turf(newloc), direct)) + return ..() + momentum = 0 + return FALSE + +/obj/structure/closet/crate/miningcar/Moved(atom/old_loc, movement_dir, forced, list/old_locs, momentum_change) + . = ..() + if(!on_rails || momentum <= 0) + return + + // Handling running OVER people + for(var/mob/living/smacked in loc) + if(smacked.body_position != LYING_DOWN) + continue + if(momentum <= 8) + momentum = floor(momentum / 2) + break + smack(smacked, 3, 1.5) + if(QDELETED(src)) + break + +/obj/structure/closet/crate/miningcar/is_buckle_possible(mob/living/target, force, check_loc) + return !opened && ..() + +/obj/structure/closet/crate/miningcar/after_open(mob/living/user, force) + . = ..() + unbuckle_all_mobs() + +// Hack: If a mob is buckled onto the cart, bumping the cart will instead bump the mob (because higher layer) +// So if we want to allow people to shove carts people are riding, we gotta check the mob for bumped and redirect it +/obj/structure/closet/crate/miningcar/post_buckle_mob(mob/living/buckled_mob) + RegisterSignal(buckled_mob, COMSIG_ATOM_BUMPED, PROC_REF(buckled_bumped)) + RegisterSignal(buckled_mob, COMSIG_MOVABLE_BUMP_PUSHED, PROC_REF(block_bump_push)) + +/obj/structure/closet/crate/miningcar/post_unbuckle_mob(mob/living/unbuckled_mob) + UnregisterSignal(unbuckled_mob, list(COMSIG_ATOM_BUMPED, COMSIG_MOVABLE_BUMP_PUSHED)) + +/obj/structure/closet/crate/miningcar/proc/buckled_bumped(datum/source, atom/bumper) + SIGNAL_HANDLER + INVOKE_ASYNC(src, PROC_REF(shove_off), bumper) + +/** + * Called when the minecart smacks into someone. + * + * * smacked - The mob that was smacked. + * * damage_mod - How much to multiply the momentum by to get the damage. + * * momentum_mod - How much to divide the momentum by after the smack. + */ +/obj/structure/closet/crate/miningcar/proc/smack(mob/living/smacked, damage_mod = 2, momentum_mod = 2) + ASSERT(momentum_mod >= 1) + if(!smacked.apply_damage(damage_mod * momentum, BRUTE, BODY_ZONE_CHEST, wound_bonus = damage_mod * 10, attack_direction = dir)) + return + if(get_integrity() <= max_integrity * 0.05) + smacked.visible_message( + span_danger("[src] smashes into [smacked], breaking into pieces!"), + span_userdanger("You are smacked by [src] as it breaks into pieces!"), + ) + playsound(src, 'sound/effects/break_stone.ogg', 50, vary = TRUE) + momentum = 0 + + else + smacked.visible_message( + span_danger("[src] smashes into [smacked]!"), + span_userdanger("You are smacked by [src]!"), + ) + playsound(src, 'sound/effects/bang.ogg', 50, vary = TRUE) + take_damage(max_integrity * 0.05) + momentum = floor(momentum / momentum_mod) + if(smacked.body_position == LYING_DOWN) + smacked.Paralyze(4 SECONDS) + return + + smacked.Knockdown(5 SECONDS) + for(var/side_dir in shuffle(GLOB.alldirs)) + // Don't throw people in front of the cart, and + // don't throw people in any direction behind us + if(side_dir == dir || (side_dir & REVERSE_DIR(dir))) + continue + var/turf/open/open_turf = get_step(src, side_dir) + if(!istype(open_turf)) + continue + smacked.safe_throw_at(open_turf, 1, 3, spin = FALSE, gentle = TRUE) + +/** + * Updates the state of the minecart to be on or off rails. + */ +/obj/structure/closet/crate/miningcar/proc/update_rail_state(new_state) + if(on_rails == new_state) + return + on_rails = new_state + if(on_rails) + drag_slowdown = 0.5 + RegisterSignal(src, COMSIG_MOVABLE_BUMP_PUSHED, PROC_REF(block_bump_push)) + else + drag_slowdown = 2 + UnregisterSignal(src, COMSIG_MOVABLE_BUMP_PUSHED) + +// We want a low move resistance so people can drag it along the tracks +// But we also don't want people to nudge it with a push (since it requires a do_after to set off) +/obj/structure/closet/crate/miningcar/proc/block_bump_push(datum/source, mob/living/bumper, force) + SIGNAL_HANDLER + if(on_rails) + return COMPONENT_NO_PUSH + if(force < MOVE_FORCE_STRONG) + return COMPONENT_NO_PUSH + return NONE + +/obj/structure/closet/crate/miningcar/forceMove(atom/destination) + update_rail_state(FALSE) + return ..() + +/obj/structure/closet/crate/miningcar/mouse_drop_dragged(atom/over, mob/user, src_location, over_location, params) + if(!isliving(user)) + return + if(on_rails) + if(isopenturf(over)) + try_take_off_rails(user, over) + return + + if(istype(over, /obj/structure/minecart_rail) || (isopenturf(over) && (locate(/obj/structure/minecart_rail) in over))) + try_put_on_rails(user, get_turf(over)) + return + +/** + * Attempt to remove the cart from rails + * + * * user - The user attempting to remove the cart from the rails. + * * new_destination - The turf the cart will be moved to. + */ +/obj/structure/closet/crate/miningcar/proc/try_take_off_rails(mob/living/user, turf/open/new_destination) + balloon_alert(user, "removing from rails...") + if(!do_after(user, 2 SECONDS, src)) + return + update_rail_state(FALSE) + Move(new_destination) + var/sound/thud_sound = sound('sound/weapons/thudswoosh.ogg') + thud_sound.pitch = 0.5 + playsound(src, thud_sound, 50, TRUE) + +/** + * Attempt to put the cart on rails + * + * * user - The user attempting to put the cart on the rails. + * * new_destination - The turf the cart will be moved to. + */ +/obj/structure/closet/crate/miningcar/proc/try_put_on_rails(mob/living/user, turf/open/new_destination) + balloon_alert(user, "putting on rails...") + if(!do_after(user, 2 SECONDS, src)) + return + var/obj/structure/minecart_rail/set_rail = locate() in new_destination + if(isnull(set_rail)) + return + Move(new_destination) + setDir(set_rail.dir) + update_rail_state(TRUE) + var/sound/click_sound = sound('sound/machines/click.ogg') + click_sound.pitch = 0.5 + playsound(src, click_sound, 50, TRUE) + +/obj/structure/closet/crate/miningcar/Bump(atom/bumped_atom) + . = ..() + if(.) + return + + // Handling running INTO people + if(!isliving(bumped_atom) || momentum <= 0) + return + if(momentum <= 8) + momentum = floor(momentum / 2) + return + smack(bumped_atom) + +/obj/structure/closet/crate/miningcar/Bumped(atom/movable/bumped_atom) + . = ..() + INVOKE_ASYNC(src, PROC_REF(shove_off), bumped_atom) + +/// Starts the cart moving automatically. +/obj/structure/closet/crate/miningcar/proc/shove_off(atom/movable/bumped_atom) + if(!on_rails || momentum > 0) + return + + var/movedir = bumped_atom.dir + var/turf/next_turf = get_step(src, movedir) + if(!can_travel_on_turf(next_turf, movedir)) + return + + if(isliving(bumped_atom)) + var/obj/structure/minecart_rail/rail = locate() in loc + var/mob/living/bumper = bumped_atom + if(bumper.mob_size <= MOB_SIZE_SMALL) + return + if(DOING_INTERACTION_WITH_TARGET(bumper, src)) + return + balloon_alert(bumper, "setting off...") + if(!do_after(bumper, 1.5 SECONDS, src)) + return + if(QDELETED(rail) || !on_rails || !can_travel_on_turf(next_turf, movedir)) + return + momentum += 20 + + else if(isitem(bumped_atom)) + var/obj/item/bumped_item = bumped_atom + if(bumped_item.w_class <= WEIGHT_CLASS_SMALL) + return + momentum += bumped_item.w_class + + else if(istype(bumped_atom, /obj/structure/closet/crate/miningcar)) + var/obj/structure/closet/crate/miningcar/bumped_car = bumped_atom + if(bumped_car.momentum <= 0) + return + momentum += bumped_car.momentum + bumped_car.momentum = 0 + + if(momentum <= 0) + return + + setDir(movedir) + var/datum/move_loop/loop = GLOB.move_manager.move(src, dir, delay = calculate_delay(), subsystem = SSconveyors, flags = MOVEMENT_LOOP_START_FAST|MOVEMENT_LOOP_IGNORE_PRIORITY) + RegisterSignal(loop, COMSIG_MOVELOOP_PREPROCESS_CHECK, PROC_REF(check_rail)) + RegisterSignal(loop, COMSIG_MOVELOOP_POSTPROCESS, PROC_REF(decay_momentum)) + +/obj/structure/closet/crate/miningcar/proc/check_rail(datum/move_loop/move/source) + SIGNAL_HANDLER + + if(momentum <= 0) + stack_trace("Mine cart moving on 0 momentum!") + GLOB.move_manager.stop_looping(src, SSconveyors) + return MOVELOOP_SKIP_STEP + // Forced to not move + if(anchored || !has_gravity()) + return MOVELOOP_SKIP_STEP + // Going straight + if(can_travel_on_turf(get_step(src, dir))) + return NONE + // Trying to turn + for(var/next_dir in shuffle(list(turn(dir, 90), turn(dir, -90)))) + if(!can_travel_on_turf(get_step(src, next_dir), dir|next_dir)) + continue + momentum -= 1 // Extra cost for turning + if(momentum <= 0) + break + source.direction = next_dir + return NONE + // Can't go straight and cant turn = STOP + GLOB.move_manager.stop_looping(src, SSconveyors) + if(momentum >= 8) + visible_message(span_warning("[src] comes to a halt!")) + throw_contents() + else + visible_message(span_notice("[src] comes to a slow stop.")) + momentum = 0 + return MOVELOOP_SKIP_STEP + +/obj/structure/closet/crate/miningcar/proc/decay_momentum(datum/move_loop/move/source) + SIGNAL_HANDLER + + if(momentum > 0) + var/obj/structure/minecart_rail/railbreak/stop_break = locate() in loc + var/obj/structure/cable/cable = locate() in loc + // There is a break and it is powered, so STOP + if(stop_break && cable?.avail(10 KILO JOULES)) + if(momentum >= 8) + visible_message(span_notice("[src] comes to a sudden stop.")) + else + visible_message(span_notice("[src] comes to a stop.")) + momentum = 0 + GLOB.move_manager.stop_looping(src, SSconveyors) + cable.add_delayedload(10 KILO JOULES) + return + // This is a powered rail, so maintain speed + if(cable?.avail(1 KILO JOULES)) + // Speeds up the cart to 5 or 10, then stops decay + if(momentum <= 5) + momentum = 5 + cable.add_delayedload(0.5 KILO JOULES) + else if(momentum <= 10) + momentum = 10 + cable.add_delayedload(1 KILO JOULES) + return + // Here is where actual slowdown happens + momentum -= 1 + + // No more momentum = STOP + if(momentum <= 0) + GLOB.move_manager.stop_looping(src, SSconveyors) + visible_message(span_notice("[src] comes to a slow stop.")) + return + + // Handles slowing down the move loop / cart + var/datum/move_loop/loop = GLOB.move_manager.processing_on(src, SSconveyors) + loop?.set_delay(calculate_delay()) + +/// Calculates how fast the cart is going +/obj/structure/closet/crate/miningcar/proc/calculate_delay() + return (-0.05 SECONDS * momentum) + 1.1 SECONDS + +/// Checks if we can travel on the passed turf +/obj/structure/closet/crate/miningcar/proc/can_travel_on_turf(turf/next_turf, dir_to_check = dir) + for(var/obj/structure/minecart_rail/rail in next_turf) + if(rail.dir & (dir_to_check|REVERSE_DIR(dir_to_check))) + return TRUE + + return FALSE + +/// Throws all the contents of the cart out ahead +/obj/structure/closet/crate/miningcar/proc/throw_contents() + var/was_open = opened + var/list/to_yeet = contents.Copy() + var/yeet_rider = has_buckled_mobs() + if(yeet_rider) + to_yeet += buckled_mobs + unbuckle_all_mobs() + + bust_open() + if(!opened) + return + + if(!length(to_yeet)) + if(!was_open) + visible_message(span_warning("[src] breaks open!")) + return + + var/throw_distance = clamp(ceil(momentum / 3) - 4, 1, 5) + var/turf/some_distant_turf = get_edge_target_turf(src, dir) + for(var/atom/movable/yeeten in to_yeet) + yeeten.throw_at(some_distant_turf, throw_distance, 3, quickstart = TRUE) + + if(was_open) + visible_message(span_warning("[src] spills its contents!")) + else + // Update this message if someone allows multiple people to ride one minecart + visible_message(span_warning("[src] breaks open, spilling its contents[yeet_rider ? " and throwing its rider":""]!")) + +/obj/structure/minecart_rail + name = "cart rail" + desc = "Carries carts along the track." + icon = 'icons/obj/track.dmi' + icon_state = "track" + layer = TRAM_RAIL_LAYER + plane = FLOOR_PLANE + anchored = TRUE + move_resist = INFINITY + +/obj/structure/minecart_rail/Initialize(mapload) + . = ..() + AddElement(/datum/element/give_turf_traits, string_list(list(TRAIT_TURF_IGNORE_SLOWDOWN))) + AddElement(/datum/element/footstep_override, footstep = FOOTSTEP_CATWALK) + for(var/obj/structure/closet/crate/miningcar/cart in loc) + cart.update_rail_state(TRUE) + +/obj/structure/minecart_rail/examine(mob/user) + . = ..() + . += rail_examine() + +/obj/structure/minecart_rail/proc/rail_examine() + return span_notice("Run a powered cable underneath it to power carts as they travel, maintaining their speed.") + +/obj/structure/minecart_rail/railbreak + name = "cart rail brake" + desc = "Stops carts in their tracks. On the tracks. You get what I mean." + icon_state = "track_break" + can_buckle = TRUE + buckle_requires_restraints = TRUE + buckle_lying = NO_BUCKLE_LYING + +/obj/structure/minecart_rail/railbreak/rail_examine() + return span_notice("Run a powered cable underneath it to stop carts that pass over it.") diff --git a/code/modules/mining/ores_coins.dm b/code/modules/mining/ores_coins.dm index e94b8d981ffeb..d2a9af576ce42 100644 --- a/code/modules/mining/ores_coins.dm +++ b/code/modules/mining/ores_coins.dm @@ -107,9 +107,9 @@ merge_type = /obj/item/stack/ore/glass GLOBAL_LIST_INIT(sand_recipes, list(\ - new /datum/stack_recipe("pile of dirt", /obj/machinery/hydroponics/soil, 3, time = 1 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_TOOLS), \ - new /datum/stack_recipe("sandstone", /obj/item/stack/sheet/mineral/sandstone, 1, 1, 50, check_density = FALSE, category = CAT_MISC),\ - new /datum/stack_recipe("aesthetic volcanic floor tile", /obj/item/stack/tile/basalt, 2, 1, 50, check_density = FALSE, category = CAT_TILES)\ + new /datum/stack_recipe("pile of dirt", /obj/machinery/hydroponics/soil, 3, time = 1 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_TOOLS), \ + new /datum/stack_recipe("sandstone", /obj/item/stack/sheet/mineral/sandstone, 1, 1, 50, crafting_flags = NONE, category = CAT_MISC),\ + new /datum/stack_recipe("aesthetic volcanic floor tile", /obj/item/stack/tile/basalt, 2, 1, 50, crafting_flags = NONE, category = CAT_TILES)\ )) /obj/item/stack/ore/glass/Initialize(mapload, new_amount, merge, list/mat_override, mat_amt) @@ -198,6 +198,9 @@ GLOBAL_LIST_INIT(sand_recipes, list(\ scan_state = "rock_Diamond" merge_type = /obj/item/stack/ore/diamond +/obj/item/stack/ore/diamond/five + amount = 5 + /obj/item/stack/ore/bananium name = "bananium ore" icon_state = "bananium" @@ -646,20 +649,18 @@ GLOBAL_LIST_INIT(sand_recipes, list(\ continue target_airlock.lock() -/obj/item/coin/eldritch/afterattack(atom/target_atom, mob/user, proximity) - . = ..() - if(!proximity) - return +/obj/item/coin/eldritch/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + if(!istype(interacting_with, /obj/machinery/door/airlock)) + return NONE if(!IS_HERETIC(user)) - var/mob/living/living_user = user - living_user.adjustBruteLoss(5) - living_user.adjustFireLoss(5) - return - if(istype(target_atom, /obj/machinery/door/airlock)) - var/obj/machinery/door/airlock/target_airlock = target_atom - to_chat(user, span_warning("You insert [src] into the airlock.")) - target_airlock.emag_act(user, src) - qdel(src) + user.adjustBruteLoss(5) + user.adjustFireLoss(5) + return ITEM_INTERACT_BLOCKING + var/obj/machinery/door/airlock/target_airlock = interacting_with + to_chat(user, span_warning("You insert [src] into the airlock.")) + target_airlock.emag_act(user, src) + qdel(src) + return ITEM_INTERACT_SUCCESS #undef GIBTONITE_QUALITY_HIGH #undef GIBTONITE_QUALITY_LOW diff --git a/code/modules/mob/camera/camera.dm b/code/modules/mob/camera/camera.dm index c9d44aa2973ea..b4ddc8cd9c8b4 100644 --- a/code/modules/mob/camera/camera.dm +++ b/code/modules/mob/camera/camera.dm @@ -8,13 +8,16 @@ mouse_opacity = MOUSE_OPACITY_TRANSPARENT invisibility = INVISIBILITY_ABSTRACT // No one can see us sight = SEE_SELF - move_on_shuttle = FALSE + /// Toggles if the camera can move on shuttles + var/move_on_shuttle = FALSE /// Toggles if the camera can use emotes var/has_emotes = FALSE /mob/camera/Initialize(mapload) . = ..() SSpoints_of_interest.make_point_of_interest(src) + if(!move_on_shuttle) + ADD_TRAIT(src, TRAIT_BLOCK_SHUTTLE_MOVEMENT, INNATE_TRAIT) /mob/camera/experience_pressure_difference() return diff --git a/code/modules/mob/dead/dead.dm b/code/modules/mob/dead/dead.dm index 30d273db7daae..4d74e029860a6 100644 --- a/code/modules/mob/dead/dead.dm +++ b/code/modules/mob/dead/dead.dm @@ -5,6 +5,7 @@ INITIALIZE_IMMEDIATE(/mob/dead) /mob/dead sight = SEE_TURFS | SEE_MOBS | SEE_OBJS | SEE_SELF move_resist = INFINITY + interaction_flags_atom = parent_type::interaction_flags_atom | INTERACT_ATOM_MOUSEDROP_IGNORE_CHECKS throwforce = 0 /mob/dead/Initialize(mapload) diff --git a/code/modules/mob/dead/new_player/new_player.dm b/code/modules/mob/dead/new_player/new_player.dm index dea05f07b82ce..4db5ae888496c 100644 --- a/code/modules/mob/dead/new_player/new_player.dm +++ b/code/modules/mob/dead/new_player/new_player.dm @@ -200,7 +200,7 @@ is_captain = IS_FULL_CAPTAIN captain_sound = 'sound/misc/announce.ogg' // If we don't have an assigned cap yet, check if this person qualifies for some from of captaincy. - else if(!SSjob.assigned_captain && ishuman(character) && SSjob.chain_of_command[rank] && !is_banned_from(ckey, list(JOB_CAPTAIN))) + else if(!SSjob.assigned_captain && ishuman(character) && SSjob.chain_of_command[rank] && !is_banned_from(character.ckey, list(JOB_CAPTAIN))) is_captain = IS_ACTING_CAPTAIN if(is_captain != IS_NOT_CAPTAIN) minor_announce(job.get_captaincy_announcement(character), sound_override = captain_sound) @@ -216,7 +216,6 @@ humanc = character //Let's retypecast the var to be human, if(humanc) //These procs all expect humans - GLOB.manifest.inject(humanc) if(SSshuttle.arrivals) SSshuttle.arrivals.QueueAnnounce(humanc, rank) else @@ -243,6 +242,9 @@ if((job.job_flags & JOB_ASSIGN_QUIRKS) && humanc && CONFIG_GET(flag/roundstart_traits)) SSquirks.AssignQuirks(humanc, humanc.client) + if(humanc) // Quirks may change manifest datapoints, so inject only after assigning quirks + GLOB.manifest.inject(humanc) + var/area/station/arrivals = GLOB.areas_by_type[/area/station/hallway/secondary/entry] if(humanc && arrivals && !arrivals.power_environ) //arrivals depowered humanc.put_in_hands(new /obj/item/crowbar/large/emergency(get_turf(humanc))) //if hands full then just drops on the floor diff --git a/code/modules/mob/dead/new_player/preferences_setup.dm b/code/modules/mob/dead/new_player/preferences_setup.dm index 3d4fb9577b611..49ac17d48ece9 100644 --- a/code/modules/mob/dead/new_player/preferences_setup.dm +++ b/code/modules/mob/dead/new_player/preferences_setup.dm @@ -93,8 +93,9 @@ return preview_job -/datum/preferences/proc/render_new_preview_appearance(mob/living/carbon/human/dummy/mannequin) - var/datum/job/preview_job = get_highest_priority_job() +/datum/preferences/proc/render_new_preview_appearance(mob/living/carbon/human/dummy/mannequin, show_job_clothes = TRUE) + var/datum/job/no_job = SSjob.GetJobType(/datum/job/unassigned) + var/datum/job/preview_job = get_highest_priority_job() || no_job if(preview_job) // Silicons only need a very basic preview since there is no customization for them. @@ -106,9 +107,13 @@ // Set up the dummy for its photoshoot apply_prefs_to(mannequin, TRUE) - if(preview_job) - mannequin.job = preview_job.title - mannequin.dress_up_as_job(preview_job, TRUE) + mannequin.job = preview_job.title + mannequin.dress_up_as_job( + equipping = show_job_clothes ? preview_job : no_job, + visual_only = TRUE, + player_client = parent, + consistent = TRUE, + ) // Apply visual quirks // Yes we do it every time because it needs to be done after job gear diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index 18b55cd6a5f07..c1a81b9d33847 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -60,6 +60,9 @@ GLOBAL_VAR_INIT(observer_default_invisibility, INVISIBILITY_OBSERVER) var/datum/spawners_menu/spawners_menu var/datum/minigames_menu/minigames_menu + /// The POI we're orbiting (orbit menu) + var/orbiting_ref + /mob/dead/observer/Initialize(mapload) set_invisibility(GLOB.observer_default_invisibility) @@ -89,15 +92,10 @@ GLOBAL_VAR_INIT(observer_default_invisibility, INVISIBILITY_OBSERVER) gender = body.gender if(body.mind && body.mind.name) - if(body.mind.ghostname) - name = body.mind.ghostname - else - name = body.mind.name + name = body.mind.ghostname || body.mind.name else - if(body.real_name) - name = body.real_name - else - name = random_unique_name(gender) + name = body.real_name || generate_random_mob_name(gender) + mind = body.mind //we don't transfer the mind but we keep a reference to it. @@ -125,8 +123,8 @@ GLOBAL_VAR_INIT(observer_default_invisibility, INVISIBILITY_OBSERVER) abstract_move(T) - if(!name) //To prevent nameless ghosts - name = random_unique_name(gender) + //To prevent nameless ghosts + name ||= generate_random_mob_name(FALSE) real_name = name if(!fun_verbs) @@ -221,7 +219,7 @@ GLOBAL_VAR_INIT(observer_default_invisibility, INVISIBILITY_OBSERVER) if(ghost_accs == GHOST_ACCS_FULL && (icon_state in GLOB.ghost_forms_with_accessories_list)) //check if this form supports accessories and if the client wants to show them if(facial_hairstyle) - var/datum/sprite_accessory/S = GLOB.facial_hairstyles_list[facial_hairstyle] + var/datum/sprite_accessory/S = SSaccessories.facial_hairstyles_list[facial_hairstyle] if(S) facial_hair_overlay = mutable_appearance(S.icon, "[S.icon_state]", -HAIR_LAYER) if(facial_hair_color) @@ -229,7 +227,7 @@ GLOBAL_VAR_INIT(observer_default_invisibility, INVISIBILITY_OBSERVER) facial_hair_overlay.alpha = 200 add_overlay(facial_hair_overlay) if(hairstyle) - var/datum/sprite_accessory/hair/S = GLOB.hairstyles_list[hairstyle] + var/datum/sprite_accessory/hair/S = SSaccessories.hairstyles_list[hairstyle] if(S) hair_overlay = mutable_appearance(S.icon, "[S.icon_state]", -HAIR_LAYER) if(hair_color) @@ -361,6 +359,12 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp abstract_move(destination) // move like the wind return TRUE +/mob/dead/observer/Moved(atom/old_loc, movement_dir, forced, list/old_locs, momentum_change) + . = ..() + var/area/new_area = get_area(src) + if(new_area != ambience_tracked_area) + update_ambience_area(new_area) + /mob/dead/observer/verb/reenter_corpse() set category = "Ghost" set name = "Re-enter Corpse" @@ -693,14 +697,9 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp GLOB.manifest.ui_interact(src) //this is called when a ghost is drag clicked to something. -/mob/dead/observer/MouseDrop(atom/over) - if(!usr || !over) - return - if (isobserver(usr) && usr.client.holder && (isliving(over) || iscameramob(over)) ) - if (usr.client.holder.cmd_ghost_drag(src,over)) - return - - return ..() +/mob/dead/observer/mouse_drop_dragged(atom/over, mob/user) + if (isobserver(user) && user.client.holder && (isliving(over) || iscameramob(over))) + user.client.holder.cmd_ghost_drag(src, over) /mob/dead/observer/Topic(href, href_list) ..() @@ -838,7 +837,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp client.prefs.apply_character_randomization_prefs() var/species_type = client.prefs.read_preference(/datum/preference/choiced/species) - var/datum/species/species = new species_type + var/datum/species/species = GLOB.species_prototypes[species_type] if(species.check_head_flags(HEAD_HAIR)) hairstyle = client.prefs.read_preference(/datum/preference/choiced/hairstyle) hair_color = ghostify_color(client.prefs.read_preference(/datum/preference/color/hair_color)) @@ -847,8 +846,6 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp facial_hairstyle = client.prefs.read_preference(/datum/preference/choiced/facial_hairstyle) facial_hair_color = ghostify_color(client.prefs.read_preference(/datum/preference/color/facial_hair_color)) - qdel(species) - update_appearance() /mob/dead/observer/can_perform_action(atom/movable/target, action_bitflags) @@ -991,9 +988,18 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp game = create_mafia_game() game.ui_interact(usr) -/mob/dead/observer/CtrlShiftClick(mob/user) - if(isobserver(user) && check_rights(R_SPAWN)) - change_mob_type(/mob/living/carbon/human , null, null, TRUE) //always delmob, ghosts shouldn't be left lingering +/mob/dead/observer/AltClickOn(atom/target) + client.loot_panel.open(get_turf(target)) + +/mob/dead/observer/AltClickSecondaryOn(atom/target) + if(client && check_rights_for(client, R_DEBUG)) + client.toggle_tag_datum(src) + +/mob/dead/observer/CtrlShiftClickOn(atom/target) + if(isobserver(target) && check_rights(R_SPAWN)) + var/mob/dead/observer/target_ghost = target + + target_ghost.change_mob_type(/mob/living/carbon/human , null, null, TRUE) //always delmob, ghosts shouldn't be left lingering /mob/dead/observer/examine(mob/user) . = ..() @@ -1084,3 +1090,10 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp if(!prefs || (client?.combo_hud_enabled && prefs.toggles & COMBOHUD_LIGHTING)) return ..() return GLOB.ghost_lighting_options[prefs.read_preference(/datum/preference/choiced/ghost_lighting)] + + +/// Called when we exit the orbiting state +/mob/dead/observer/proc/on_deorbit(datum/source) + SIGNAL_HANDLER + + orbiting_ref = null diff --git a/code/modules/mob/dead/observer/orbit.dm b/code/modules/mob/dead/observer/orbit.dm index db6acc346b158..ee0b4528995ef 100644 --- a/code/modules/mob/dead/observer/orbit.dm +++ b/code/modules/mob/dead/observer/orbit.dm @@ -36,19 +36,33 @@ GLOBAL_DATUM_INIT(orbit_menu, /datum/orbit_menu, new) var/mob/dead/observer/user = usr user.ManualFollow(poi) user.reset_perspective(null) + user.orbiting_ref = ref if (auto_observe) user.do_observe(poi) return TRUE if ("refresh") - update_static_data(usr, ui) + ui.send_full_update() return TRUE + return FALSE + + +/datum/orbit_menu/ui_data(mob/user) + var/list/data = list() + + if(isobserver(user)) + data["orbiting"] = get_currently_orbiting(user) + + return data + + /datum/orbit_menu/ui_static_data(mob/user) var/list/new_mob_pois = SSpoints_of_interest.get_mob_pois(CALLBACK(src, PROC_REF(validate_mob_poi)), append_dead_role = FALSE) var/list/new_other_pois = SSpoints_of_interest.get_other_pois() var/list/alive = list() var/list/antagonists = list() + var/list/critical = list() var/list/deadchat_controlled = list() var/list/dead = list() var/list/ghosts = list() @@ -57,14 +71,10 @@ GLOBAL_DATUM_INIT(orbit_menu, /datum/orbit_menu, new) for(var/name in new_mob_pois) var/list/serialized = list() - var/mob/mob_poi = new_mob_pois[name] - - var/poi_ref = REF(mob_poi) - var/number_of_orbiters = length(mob_poi.get_all_orbiters()) - serialized["ref"] = poi_ref + serialized["ref"] = REF(mob_poi) serialized["full_name"] = name if(number_of_orbiters) serialized["orbiters"] = number_of_orbiters @@ -81,33 +91,26 @@ GLOBAL_DATUM_INIT(orbit_menu, /datum/orbit_menu, new) continue if(isnull(mob_poi.mind)) + if(isliving(mob_poi)) + var/mob/living/npc = mob_poi + serialized["health"] = FLOOR((npc.health / npc.maxHealth * 100), 1) + npcs += list(serialized) continue - var/datum/mind/mind = mob_poi.mind - var/was_antagonist = FALSE - + serialized["client"] = !!mob_poi.client serialized["name"] = mob_poi.real_name - if(isliving(mob_poi)) // handles edge cases like blob - var/mob/living/player = mob_poi - serialized["health"] = FLOOR((player.health / player.maxHealth * 100), 1) - if(issilicon(player)) - serialized["job"] = player.job - else - var/obj/item/card/id/id_card = player.get_idcard(hand_first = FALSE) - serialized["job"] = id_card?.get_trim_assignment() - - for(var/datum/antagonist/antag_datum as anything in mind.antag_datums) - if (antag_datum.show_to_ghosts) - was_antagonist = TRUE - serialized["antag"] = antag_datum.name - serialized["antag_group"] = antag_datum.antagpanel_category - antagonists += list(serialized) - break - - if(!was_antagonist) - alive += list(serialized) + if(isliving(mob_poi)) + serialized += get_living_data(mob_poi) + + var/list/antag_data = get_antag_data(mob_poi.mind) + if(length(antag_data)) + serialized += antag_data + antagonists += list(serialized) + continue + + alive += list(serialized) for(var/name in new_other_pois) var/atom/atom_poi = new_other_pois[name] @@ -122,32 +125,18 @@ GLOBAL_DATUM_INIT(orbit_menu, /datum/orbit_menu, new) )) continue - misc += list(list( - "ref" = REF(atom_poi), - "full_name" = name, - )) + var/list/other_data = get_misc_data(atom_poi) + var/misc_data = list(other_data[1]) - // Display the supermatter crystal integrity - if(istype(atom_poi, /obj/machinery/power/supermatter_crystal)) - var/obj/machinery/power/supermatter_crystal/crystal = atom_poi - misc[length(misc)]["extra"] = "Integrity: [round(crystal.get_integrity_percent())]%" - continue - // Display the nuke timer - if(istype(atom_poi, /obj/machinery/nuclearbomb)) - var/obj/machinery/nuclearbomb/bomb = atom_poi - if(bomb.timing) - misc[length(misc)]["extra"] = "Timer: [bomb.countdown?.displayed_text]s" - continue - // Display the holder if its a nuke disk - if(istype(atom_poi, /obj/item/disk/nuclear)) - var/obj/item/disk/nuclear/disk = atom_poi - var/mob/holder = disk.pulledby || get(disk, /mob) - misc[length(misc)]["extra"] = "Location: [holder?.real_name || "Unsecured"]" - continue + misc += misc_data + + if(other_data[2]) // Critical = TRUE + critical += misc_data return list( "alive" = alive, "antagonists" = antagonists, + "critical" = critical, "deadchat_controlled" = deadchat_controlled, "dead" = dead, "ghosts" = ghosts, @@ -155,10 +144,131 @@ GLOBAL_DATUM_INIT(orbit_menu, /datum/orbit_menu, new) "npcs" = npcs, ) + /// Shows the UI to the specified user. /datum/orbit_menu/proc/show(mob/user) ui_interact(user) + +/// Helper function to get threat type, group, overrides for job and icon +/datum/orbit_menu/proc/get_antag_data(datum/mind/poi_mind) as /list + var/list/serialized = list() + + for(var/datum/antagonist/antag as anything in poi_mind.antag_datums) + if(!antag.show_to_ghosts) + continue + + serialized["antag"] = antag.name + serialized["antag_group"] = antag.antagpanel_category + serialized["job"] = antag.name + serialized["icon"] = antag.antag_hud_name + + return serialized + + +/// Helper to get the current thing we're orbiting (if any) +/datum/orbit_menu/proc/get_currently_orbiting(mob/dead/observer/user) + if(isnull(user.orbiting_ref)) + return + + var/atom/poi = SSpoints_of_interest.get_poi_atom_by_ref(user.orbiting_ref) + if(isnull(poi)) + user.orbiting_ref = null + return + + if((ismob(poi) && !SSpoints_of_interest.is_valid_poi(poi, CALLBACK(src, PROC_REF(validate_mob_poi)))) \ + || !SSpoints_of_interest.is_valid_poi(poi) + ) + user.orbiting_ref = null + return + + var/list/serialized = list() + + if(!ismob(poi)) + var/list/misc_info = get_misc_data(poi) + serialized += misc_info[1] + return serialized + + var/mob/mob_poi = poi + serialized["full_name"] = mob_poi.name + serialized["ref"] = REF(poi) + + if(mob_poi.mind) + serialized["client"] = !!mob_poi.client + serialized["name"] = mob_poi.real_name + + if(isliving(mob_poi)) + serialized += get_living_data(mob_poi) + + return serialized + + +/// Helper function to get job / icon / health data for a living mob +/datum/orbit_menu/proc/get_living_data(mob/living/player) as /list + var/list/serialized = list() + + serialized["health"] = FLOOR((player.health / player.maxHealth * 100), 1) + if(issilicon(player)) + serialized["job"] = player.job + serialized["icon"] = "borg" + else + var/obj/item/card/id/id_card = player.get_idcard(hand_first = FALSE) + serialized["job"] = id_card?.get_trim_assignment() + serialized["icon"] = id_card?.get_trim_sechud_icon_state() + + return serialized + + +/// Gets a list: Misc data and whether it's critical. Handles all snowflakey type cases +/datum/orbit_menu/proc/get_misc_data(atom/movable/atom_poi) as /list + var/list/misc = list() + var/critical = FALSE + + misc["ref"] = REF(atom_poi) + misc["full_name"] = atom_poi.name + + // Display the supermatter crystal integrity + if(istype(atom_poi, /obj/machinery/power/supermatter_crystal)) + var/obj/machinery/power/supermatter_crystal/crystal = atom_poi + var/integrity = round(crystal.get_integrity_percent()) + misc["extra"] = "Integrity: [integrity]%" + + if(integrity < 10) + critical = TRUE + + return list(misc, critical) + + // Display the nuke timer + if(istype(atom_poi, /obj/machinery/nuclearbomb)) + var/obj/machinery/nuclearbomb/bomb = atom_poi + + if(bomb.timing) + misc["extra"] = "Timer: [bomb.countdown?.displayed_text]s" + critical = TRUE + + return list(misc, critical) + + // Display the holder if its a nuke disk + if(istype(atom_poi, /obj/item/disk/nuclear)) + var/obj/item/disk/nuclear/disk = atom_poi + var/mob/holder = disk.pulledby || get(disk, /mob) + misc["extra"] = "Location: [holder?.real_name || "Unsecured"]" + + return list(misc, critical) + + // Display singuloths if they exist + if(istype(atom_poi, /obj/singularity)) + var/obj/singularity/singulo = atom_poi + misc["extra"] = "Energy: [round(singulo.energy)]" + + if(singulo.current_size > 2) + critical = TRUE + + return list(misc, critical) + + return list(misc, critical) + + /** * Helper POI validation function passed as a callback to various SSpoints_of_interest procs. * @@ -181,3 +291,4 @@ GLOBAL_DATUM_INIT(orbit_menu, /datum/orbit_menu, new) return FALSE return potential_poi.validate() + diff --git a/code/modules/mob/inventory.dm b/code/modules/mob/inventory.dm index 4dab3f9d70292..2d22c11ee71f8 100644 --- a/code/modules/mob/inventory.dm +++ b/code/modules/mob/inventory.dm @@ -290,8 +290,12 @@ /mob/proc/is_holding_items() return !!locate(/obj/item) in held_items +/** + * Returns a list of all dropped held items. + * If none were dropped, returns an empty list. + */ /mob/proc/drop_all_held_items() - . = FALSE + . = list() for(var/obj/item/I in held_items) . |= dropItemToGround(I) @@ -319,24 +323,25 @@ /** * Used to drop an item (if it exists) to the ground. - * * Will pass as TRUE is successfully dropped, or if there is no item to drop. - * * Will pass FALSE if the item can not be dropped due to TRAIT_NODROP via doUnEquip() + * * Will return null if the item wasn't dropped. + * * If it was, returns the item. * If the item can be dropped, it will be forceMove()'d to the ground and the turf's Entered() will be called. */ /mob/proc/dropItemToGround(obj/item/I, force = FALSE, silent = FALSE, invdrop = TRUE) if (isnull(I)) - return TRUE + return SEND_SIGNAL(src, COMSIG_MOB_DROPPING_ITEM) - . = doUnEquip(I, force, drop_location(), FALSE, invdrop = invdrop, silent = silent) + var/try_uneqip = doUnEquip(I, force, drop_location(), FALSE, invdrop = invdrop, silent = silent) - if(!. || !I) //ensure the item exists and that it was dropped properly. + if(!try_uneqip || !I) //ensure the item exists and that it was dropped properly. return if(!(I.item_flags & NO_PIXEL_RANDOM_DROP)) I.pixel_x = I.base_pixel_x + rand(-6, 6) I.pixel_y = I.base_pixel_y + rand(-6, 6) I.do_drop_animation(src) + return I //for when the item will be immediately placed in a loc other than the ground /mob/proc/transferItemToLoc(obj/item/I, newloc = null, force = FALSE, silent = TRUE) @@ -388,99 +393,145 @@ * Used to return a list of equipped items on a mob; does not include held items (use get_all_gear) * * Argument(s): - * * Optional - include_pockets (TRUE/FALSE), whether or not to include the pockets and suit storage in the returned list - * * Optional - include_accessories (TRUE/FALSE), whether or not to include the accessories in the returned list + * * Optional - include_flags, (see obj.flags.dm) describes which optional things to include or not (pockets, accessories, held items) */ -/mob/living/proc/get_equipped_items(include_pockets = FALSE, include_accessories = FALSE) +/mob/living/proc/get_equipped_items(include_flags = NONE) var/list/items = list() for(var/obj/item/item_contents in contents) if(item_contents.item_flags & IN_INVENTORY) items += item_contents - items -= held_items + if (!(include_flags & INCLUDE_HELD)) + items -= held_items return items /** - * Used to return a list of equipped items on a human mob; does not include held items (use get_all_gear) - * - * Argument(s): - * * Optional - include_pockets (TRUE/FALSE), whether or not to include the pockets and suit storage in the returned list - * * Optional - include_accessories (TRUE/FALSE), whether or not to include the accessories in the returned list + * Returns the items that were succesfully unequipped. */ - -/mob/living/carbon/human/get_equipped_items(include_pockets = FALSE, include_accessories = FALSE) - var/list/items = ..() - if(!include_pockets) - items -= list(l_store, r_store, s_store) - if(include_accessories && w_uniform) - var/obj/item/clothing/under/worn_under = w_uniform - items += worn_under.attached_accessories - return items - /mob/living/proc/unequip_everything() var/list/items = list() - items |= get_equipped_items(include_pockets = TRUE) + items |= get_equipped_items(INCLUDE_POCKETS) + // In case something isn't actually unequipped somehow + var/list/dropped_items = list() for(var/I in items) - dropItemToGround(I) - drop_all_held_items() - - -/mob/living/carbon/proc/check_obscured_slots(transparent_protection) - var/obscured = NONE - var/hidden_slots = NONE - - for(var/obj/item/I in get_equipped_items()) - hidden_slots |= I.flags_inv - if(transparent_protection) - hidden_slots |= I.transparent_protection - - if(hidden_slots & HIDENECK) - obscured |= ITEM_SLOT_NECK - if(hidden_slots & HIDEMASK) - obscured |= ITEM_SLOT_MASK - if(hidden_slots & HIDEEYES) - obscured |= ITEM_SLOT_EYES - if(hidden_slots & HIDEEARS) - obscured |= ITEM_SLOT_EARS - if(hidden_slots & HIDEGLOVES) - obscured |= ITEM_SLOT_GLOVES - if(hidden_slots & HIDEJUMPSUIT) - obscured |= ITEM_SLOT_ICLOTHING - if(hidden_slots & HIDESHOES) - obscured |= ITEM_SLOT_FEET - if(hidden_slots & HIDESUITSTORAGE) - obscured |= ITEM_SLOT_SUITSTORE - if(hidden_slots & HIDEHEADGEAR) - obscured |= ITEM_SLOT_HEAD - - return obscured - - -/obj/item/proc/equip_to_best_slot(mob/M) - if(M.equip_to_appropriate_slot(src)) - M.update_held_items() + var/return_val = dropItemToGround(I) + if(!isitem(return_val)) + continue + dropped_items |= return_val + var/return_val = drop_all_held_items() + if(islist(return_val)) + dropped_items |= return_val + return dropped_items + +/** + * Try to equip an item to a slot on the mob + * + * This is a SAFE proc. Use this instead of equip_to_slot()! + * + * set qdel_on_fail to have it delete W if it fails to equip + * + * set disable_warning to disable the 'you are unable to equip that' warning. + * + * unset redraw_mob to prevent the mob icons from being redrawn at the end. + * + * Initial is used to indicate whether or not this is the initial equipment (job datums etc) or just a player doing it + * + * set indirect_action to allow insertions into "soft" locked objects, things that are easily opened by the owning mob + */ +/mob/proc/equip_to_slot_if_possible(obj/item/W, slot, qdel_on_fail = FALSE, disable_warning = FALSE, redraw_mob = TRUE, bypass_equip_delay_self = FALSE, initial = FALSE, indirect_action = FALSE) + if(!istype(W) || QDELETED(W)) //This qdeleted is to prevent stupid behavior with things that qdel during init, like say stacks + return FALSE + if(!W.mob_can_equip(src, slot, disable_warning, bypass_equip_delay_self, indirect_action = indirect_action)) + if(qdel_on_fail) + qdel(W) + else if(!disable_warning) + to_chat(src, span_warning("You are unable to equip that!")) + return FALSE + equip_to_slot(W, slot, initial, redraw_mob, indirect_action = indirect_action) //This proc should not ever fail. + return TRUE + +/** + * Actually equips an item to a slot (UNSAFE) + * + * This is an UNSAFE proc. It merely handles the actual job of equipping. All the checks on + * whether you can or can't equip need to be done before! Use mob_can_equip() for that task. + * + *In most cases you will want to use equip_to_slot_if_possible() + */ +/mob/proc/equip_to_slot(obj/item/equipping, slot, initial = FALSE, redraw_mob = FALSE, indirect_action = FALSE) + return + +/** + * Equip an item to the slot or delete + * + * This is just a commonly used configuration for the equip_to_slot_if_possible() proc, used to + * equip people when the round starts and when events happen and such. + * + * Also bypasses equip delay checks, since the mob isn't actually putting it on. + * Initial is used to indicate whether or not this is the initial equipment (job datums etc) or just a player doing it + * set indirect_action to allow insertions into "soft" locked objects, things that are easily opened by the owning mob + */ +/mob/proc/equip_to_slot_or_del(obj/item/W, slot, initial = FALSE, indirect_action = FALSE) + return equip_to_slot_if_possible(W, slot, TRUE, TRUE, FALSE, TRUE, initial, indirect_action) + +/** + * Auto equip the passed in item the appropriate slot based on equipment priority + * + * puts the item "W" into an appropriate slot in a human's inventory + * + * returns 0 if it cannot, 1 if successful + */ +/mob/proc/equip_to_appropriate_slot(obj/item/W, qdel_on_fail = FALSE, indirect_action = FALSE) + if(!istype(W)) + return FALSE + var/slot_priority = W.slot_equipment_priority + + if(!slot_priority) + slot_priority = list( \ + ITEM_SLOT_BACK, ITEM_SLOT_ID,\ + ITEM_SLOT_ICLOTHING, ITEM_SLOT_OCLOTHING,\ + ITEM_SLOT_MASK, ITEM_SLOT_HEAD, ITEM_SLOT_NECK,\ + ITEM_SLOT_FEET, ITEM_SLOT_GLOVES,\ + ITEM_SLOT_EARS, ITEM_SLOT_EYES,\ + ITEM_SLOT_BELT, ITEM_SLOT_SUITSTORE,\ + ITEM_SLOT_LPOCKET, ITEM_SLOT_RPOCKET,\ + ITEM_SLOT_DEX_STORAGE\ + ) + + for(var/slot in slot_priority) + if(equip_to_slot_if_possible(W, slot, disable_warning = TRUE, redraw_mob = TRUE, indirect_action = indirect_action)) + return TRUE + + if(qdel_on_fail) + qdel(W) + return FALSE + +/// Tries to equip an item, store it in open storage, or in next best storage +/obj/item/proc/equip_to_best_slot(mob/user) + if(user.equip_to_appropriate_slot(src)) + user.update_held_items() return TRUE else if(equip_delay_self) return - if(M.active_storage?.attempt_insert(src, M)) + if(user.active_storage?.attempt_insert(src, user, messages = FALSE)) return TRUE var/list/obj/item/possible = list( - M.get_inactive_held_item(), - M.get_item_by_slot(ITEM_SLOT_BELT), - M.get_item_by_slot(ITEM_SLOT_DEX_STORAGE), - M.get_item_by_slot(ITEM_SLOT_BACK), + user.get_inactive_held_item(), + user.get_item_by_slot(ITEM_SLOT_BELT), + user.get_item_by_slot(ITEM_SLOT_DEX_STORAGE), + user.get_item_by_slot(ITEM_SLOT_BACK), ) - for(var/i in possible) - if(!i) + for(var/thing in possible) + if(isnull(thing)) continue - var/obj/item/I = i - if(I.atom_storage?.attempt_insert(src, M)) + var/obj/item/gear = thing + if(gear.atom_storage?.attempt_insert(src, user, messages = FALSE)) return TRUE - to_chat(M, span_warning("You are unable to equip that!")) + to_chat(user, span_warning("You are unable to equip that!")) return FALSE @@ -510,11 +561,7 @@ to_chat(src, span_warning("You are not holding anything to equip!")) return if(!QDELETED(I)) - if(I.equip_to_best_slot(src)) - return - if(put_in_active_hand(I)) - return - I.forceMove(drop_location()) + I.equip_to_best_slot(src) //used in code for items usable by both carbon and drones, this gives the proper back slot for each mob.(defibrillator, backpack watertank, ...) /mob/proc/getBackSlot() @@ -538,30 +585,9 @@ if(hud_used) hud_used.build_hand_slots() -/mob/living/carbon/human/change_number_of_hands(amt) - var/old_limbs = held_items.len - if(amt < old_limbs) - for(var/i in hand_bodyparts.len to amt step -1) - var/obj/item/bodypart/BP = hand_bodyparts[i] - BP.dismember() - hand_bodyparts[i] = null - hand_bodyparts.len = amt - else if(amt > old_limbs) - hand_bodyparts.len = amt - for(var/i in old_limbs+1 to amt) - var/path = /obj/item/bodypart/arm/left - if(!(i % 2)) - path = /obj/item/bodypart/arm/right - - var/obj/item/bodypart/BP = new path () - BP.held_index = i - BP.try_attach_limb(src, TRUE) - hand_bodyparts[i] = BP - ..() //Don't redraw hands until we have organs for them - //GetAllContents that is reasonable and not stupid /mob/living/proc/get_all_gear() - var/list/processing_list = get_equipped_items(include_pockets = TRUE, include_accessories = TRUE) + held_items + var/list/processing_list = get_equipped_items(INCLUDE_POCKETS | INCLUDE_ACCESSORIES | INCLUDE_HELD) list_clear_nulls(processing_list) // handles empty hands var/i = 0 while(i < length(processing_list)) diff --git a/code/modules/mob/living/basic/alien/_alien.dm b/code/modules/mob/living/basic/alien/_alien.dm index 823ab896c0a22..907d28aaa4187 100644 --- a/code/modules/mob/living/basic/alien/_alien.dm +++ b/code/modules/mob/living/basic/alien/_alien.dm @@ -63,7 +63,7 @@ AddElement(/datum/element/footstep, footstep_type = FOOTSTEP_MOB_CLAW) /mob/living/basic/alien/get_butt_sprite() - return BUTT_SPRITE_XENOMORPH + return icon('icons/mob/butts.dmi', BUTT_SPRITE_XENOMORPH) ///Places alien weeds on the turf the mob is currently standing on. /mob/living/basic/alien/proc/place_weeds() diff --git a/code/modules/mob/living/basic/bots/_bots.dm b/code/modules/mob/living/basic/bots/_bots.dm index ccd4b0d617f3f..22ab453226912 100644 --- a/code/modules/mob/living/basic/bots/_bots.dm +++ b/code/modules/mob/living/basic/bots/_bots.dm @@ -14,32 +14,40 @@ GLOBAL_LIST_INIT(command_strings, list( gender = NEUTER mob_biotypes = MOB_ROBOTIC basic_mob_flags = DEL_ON_DEATH + density = FALSE + icon = 'icons/mob/silicon/aibots.dmi' icon_state = "medibot0" base_icon_state = "medibot" + damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 0, STAMINA = 0, OXY = 0) habitable_atmos = null hud_possible = list(DIAG_STAT_HUD, DIAG_BOT_HUD, DIAG_HUD, DIAG_BATT_HUD, DIAG_PATH_HUD = HUD_LIST_LIST) + maximum_survivable_temperature = INFINITY minimum_survivable_temperature = 0 has_unlimited_silicon_privilege = TRUE + sentience_type = SENTIENCE_ARTIFICIAL status_flags = NONE //no default canpush - faction = list(FACTION_MINING) ai_controller = /datum/ai_controller/basic_controller/bot - pass_flags = PASSFLAPS + pass_flags = PASSFLAPS | PASSMOB + verb_say = "states" verb_ask = "queries" verb_exclaim = "declares" verb_yell = "alarms" + initial_language_holder = /datum/language_holder/synthetic bubble_icon = "machine" + speech_span = SPAN_ROBOT - faction = list(FACTION_NEUTRAL, FACTION_SILICON, FACTION_TURRET) + faction = list(FACTION_SILICON, FACTION_TURRET) light_system = OVERLAY_LIGHT light_range = 3 light_power = 0.6 speed = 3 + req_one_access = list(ACCESS_ROBOTICS) interaction_flags_click = ALLOW_SILICON_REACH ///The Robot arm attached to this robot - has a 50% chance to drop on death. @@ -101,10 +109,10 @@ GLOBAL_LIST_INIT(command_strings, list( /mob/living/basic/bot/Initialize(mapload) . = ..() - AddElement(/datum/element/relay_attackers) + AddElement(/datum/element/ai_retaliate) RegisterSignal(src, COMSIG_MOVABLE_MOVED, PROC_REF(handle_loop_movement)) RegisterSignal(src, COMSIG_ATOM_WAS_ATTACKED, PROC_REF(after_attacked)) - RegisterSignal(src, COMSIG_OBJ_ALLOWED, PROC_REF(attempt_access)) + RegisterSignal(src, COMSIG_MOB_TRIED_ACCESS, PROC_REF(attempt_access)) ADD_TRAIT(src, TRAIT_NO_GLIDE, INNATE_TRAIT) GLOB.bots_list += src @@ -509,8 +517,8 @@ GLOBAL_LIST_INIT(command_strings, list( item_to_drop = drop_item item_to_drop.forceMove(dropzone) - if(istype(item_to_drop, /obj/item/stock_parts/cell)) - var/obj/item/stock_parts/cell/dropped_cell = item_to_drop + if(istype(item_to_drop, /obj/item/stock_parts/power_store/cell)) + var/obj/item/stock_parts/power_store/cell/dropped_cell = item_to_drop dropped_cell.charge = 0 dropped_cell.update_appearance() return @@ -757,7 +765,7 @@ GLOBAL_LIST_INIT(command_strings, list( /mob/living/basic/bot/proc/attempt_access(mob/bot, obj/door_attempt) SIGNAL_HANDLER - return (door_attempt.check_access(access_card) ? COMPONENT_OBJ_ALLOW : COMPONENT_OBJ_DISALLOW) + return (door_attempt.check_access(access_card) ? ACCESS_ALLOWED : ACCESS_DISALLOWED) /mob/living/basic/bot/proc/generate_speak_list() return null @@ -806,6 +814,11 @@ GLOBAL_LIST_INIT(command_strings, list( /mob/living/basic/bot/spawn_gibs(drop_bitflags = NONE) new /obj/effect/gibspawner/robot(drop_location(), src) +/mob/living/basic/bot/get_hit_area_message(input_area) + // we just get hit, there's no complexity for hitting an arm (if it exists) or anything. + // we also need to return an empty string as otherwise it would falsely say that we get hit in the chest or something strange like that (bots don't have "chests") + return "" + /mob/living/basic/bot/proc/on_bot_movement(atom/movable/source, atom/oldloc, dir, forced) return diff --git a/code/modules/mob/living/basic/bots/bot_ai.dm b/code/modules/mob/living/basic/bots/bot_ai.dm index 1c30f83b2e64c..b7cd5dcabd394 100644 --- a/code/modules/mob/living/basic/bots/bot_ai.dm +++ b/code/modules/mob/living/basic/bots/bot_ai.dm @@ -23,11 +23,24 @@ BB_PREVIOUS_BEACON_TARGET, BB_BOT_SUMMON_TARGET, ) - ///how many times we tried to reach the target - var/current_pathing_attempts = 0 - ///if we cant reach it after this many attempts, add it to our ignore list - var/max_pathing_attempts = 25 - can_idle = FALSE // we want these to be running always + can_idle = FALSE + +/datum/targeting_strategy/basic/bot/can_attack(mob/living/living_mob, atom/the_target, vision_range) + var/datum/ai_controller/my_controller = living_mob.ai_controller + if(isnull(my_controller)) + return FALSE + if(!ishuman(the_target) || LAZYACCESS(my_controller.blackboard[BB_TEMPORARY_IGNORE_LIST], the_target)) + return FALSE + var/mob/living/living_target = the_target + if(isnull(living_target.mind)) + return FALSE + if(get_turf(living_mob) == get_turf(living_target)) + return ..() + var/list/path = get_path_to(living_mob, living_target, max_distance = 10, access = my_controller.get_access()) + if(!length(path) || QDELETED(living_mob)) + my_controller?.set_blackboard_key_assoc_lazylist(BB_TEMPORARY_IGNORE_LIST, living_target, TRUE) + return FALSE + return ..() /datum/ai_controller/basic_controller/bot/TryPossessPawn(atom/new_pawn) . = ..() @@ -66,7 +79,7 @@ set_blackboard_key(key, target) return TRUE if(!bypass_add_to_blacklist) - set_blackboard_key_assoc_lazylist(BB_TEMPORARY_IGNORE_LIST, REF(target), TRUE) + set_blackboard_key_assoc_lazylist(BB_TEMPORARY_IGNORE_LIST, target, TRUE) return FALSE /datum/ai_controller/basic_controller/bot/proc/can_reach_target(target, distance = 10) @@ -236,3 +249,44 @@ /datum/ai_behavior/salute_authority/finish_action(datum/ai_controller/controller, succeeded, target_key) . = ..() controller.clear_blackboard_key(target_key) + +/datum/ai_behavior/bot_search + action_cooldown = 2 SECONDS + behavior_flags = AI_BEHAVIOR_CAN_PLAN_DURING_EXECUTION + +/datum/ai_behavior/bot_search/perform(seconds_per_tick, datum/ai_controller/basic_controller/bot/controller, target_key, looking_for, radius = 5, pathing_distance = 10, bypass_add_blacklist = FALSE) + if(!istype(controller)) + stack_trace("attempted to give [controller.pawn] the bot search behavior!") + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED + + var/mob/living/living_pawn = controller.pawn + var/list/ignore_list = controller.blackboard[BB_TEMPORARY_IGNORE_LIST] + for(var/atom/potential_target as anything in oview(radius, controller.pawn)) + if(QDELETED(living_pawn)) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED + if(!is_type_in_typecache(potential_target, looking_for)) + continue + if(LAZYACCESS(ignore_list, potential_target)) + continue + if(!valid_target(controller, potential_target)) + continue + if(controller.set_if_can_reach(target_key, potential_target, distance = pathing_distance, bypass_add_to_blacklist = bypass_add_blacklist)) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED + +/datum/ai_behavior/bot_search/proc/valid_target(datum/ai_controller/basic_controller/bot/controller, atom/my_target) + return TRUE + +///behavior to make our bot talk +/datum/ai_behavior/bot_speech + action_cooldown = 5 SECONDS + behavior_flags = AI_BEHAVIOR_CAN_PLAN_DURING_EXECUTION + +/datum/ai_behavior/bot_speech/perform(seconds_per_tick, datum/ai_controller/controller, list/list_to_pick_from, announce_key) + var/datum/action/cooldown/bot_announcement/announcement = controller.blackboard[announce_key] + + if(isnull(announcement) || !length(list_to_pick_from)) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED + + announcement.announce(pick(list_to_pick_from)) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED diff --git a/code/modules/mob/living/basic/bots/cleanbot/cleanbot.dm b/code/modules/mob/living/basic/bots/cleanbot/cleanbot.dm index 7cfe7132e155e..cd30dd4057d0e 100644 --- a/code/modules/mob/living/basic/bots/cleanbot/cleanbot.dm +++ b/code/modules/mob/living/basic/bots/cleanbot/cleanbot.dm @@ -5,9 +5,6 @@ desc = "A little cleaning robot, he looks so excited!" icon = 'icons/mob/silicon/aibots.dmi' icon_state = "cleanbot0" - pass_flags = PASSMOB | PASSFLAPS - density = FALSE - anchored = FALSE health = 25 maxHealth = 25 light_color = "#99ccff" diff --git a/code/modules/mob/living/basic/bots/cleanbot/cleanbot_ai.dm b/code/modules/mob/living/basic/bots/cleanbot/cleanbot_ai.dm index a58a97c7274e0..1fbaa6db2a976 100644 --- a/code/modules/mob/living/basic/bots/cleanbot/cleanbot_ai.dm +++ b/code/modules/mob/living/basic/bots/cleanbot/cleanbot_ai.dm @@ -5,7 +5,6 @@ blackboard = list( BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic/allow_items, BB_PET_TARGETING_STRATEGY = /datum/targeting_strategy/basic/not_friends, - BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, BB_UNREACHABLE_LIST_COOLDOWN = 3 MINUTES, BB_SALUTE_MESSAGES = list( "salutes", @@ -77,11 +76,13 @@ for(var/atom/found_item in found) if(QDELETED(controller.pawn)) break - if(LAZYACCESS(ignore_list, REF(found_item))) + if(LAZYACCESS(ignore_list, found_item)) continue + if(get_turf(found_item) == get_turf(controller.pawn)) + return found_item var/list/path = get_path_to(controller.pawn, found_item, max_distance = BOT_CLEAN_PATH_LIMIT, access = controller.get_access()) if(!length(path)) - controller.set_blackboard_key_assoc_lazylist(BB_TEMPORARY_IGNORE_LIST, REF(found_item), TRUE) + controller.set_blackboard_key_assoc_lazylist(BB_TEMPORARY_IGNORE_LIST, found_item, TRUE) continue return found_item @@ -104,7 +105,7 @@ /datum/ai_behavior/find_and_set/spray_target/search_tactic(datum/ai_controller/controller, locate_path, search_range) var/list/ignore_list = controller.blackboard[BB_TEMPORARY_IGNORE_LIST] for(var/mob/living/carbon/human/human_target in oview(search_range, controller.pawn)) - if(LAZYACCESS(ignore_list, REF(human_target))) + if(LAZYACCESS(ignore_list, human_target)) continue if(human_target.stat != CONSCIOUS || isnull(human_target.mind)) continue @@ -137,7 +138,7 @@ var/atom/target = controller.blackboard[target_key] if(!succeeded && !isnull(target)) controller.clear_blackboard_key(target_key) - controller.set_blackboard_key_assoc_lazylist(BB_TEMPORARY_IGNORE_LIST, REF(target), TRUE) + controller.set_blackboard_key_assoc_lazylist(BB_TEMPORARY_IGNORE_LIST, target, TRUE) return if(QDELETED(target) || is_type_in_typecache(target, controller.blackboard[BB_HUNTABLE_TRASH])) return @@ -212,7 +213,7 @@ return if(isnull(parent.ai_controller)) return - if(LAZYACCESS(parent.ai_controller.blackboard[BB_TEMPORARY_IGNORE_LIST], REF(target))) + if(LAZYACCESS(parent.ai_controller.blackboard[BB_TEMPORARY_IGNORE_LIST], target)) return return ..() diff --git a/code/modules/mob/living/basic/bots/firebot/firebot.dm b/code/modules/mob/living/basic/bots/firebot/firebot.dm new file mode 100644 index 0000000000000..31fa969fa5983 --- /dev/null +++ b/code/modules/mob/living/basic/bots/firebot/firebot.dm @@ -0,0 +1,169 @@ +#define FOAM_INTERVAL 5 SECONDS + +/mob/living/basic/bot/firebot + name = "\improper Firebot" + desc = "A little fire extinguishing bot. He looks rather anxious." + icon = 'icons/mob/silicon/aibots.dmi' + icon_state = "firebot1" + light_color = "#8cffc9" + light_power = 0.8 + + req_one_access = list(ACCESS_ROBOTICS, ACCESS_CONSTRUCTION) + radio_key = /obj/item/encryptionkey/headset_eng + radio_channel = RADIO_CHANNEL_ENGINEERING + bot_type = FIRE_BOT + additional_access = /datum/id_trim/job/station_engineer + hackables = "fire safety protocols" + path_image_color = "#FFA500" + possessed_message = "You are a firebot! Protect the station from fires to the best of your ability!" + ai_controller = /datum/ai_controller/basic_controller/bot/firebot + ///our inbuilt fire extinguisher + var/obj/item/extinguisher/internal_ext + + ///Flags firebots use to decide how they function. + var/firebot_mode_flags = FIREBOT_EXTINGUISH_PEOPLE | FIREBOT_EXTINGUISH_FLAMES + //Selections: FIREBOT_STATIONARY_MODE | FIREBOT_EXTINGUISH_PEOPLE | FIREBOT_EXTINGUISH_FLAMES + ///cooldown before we release foam all over + COOLDOWN_DECLARE(foam_cooldown) + + +/mob/living/basic/bot/firebot/generate_speak_list() + var/static/list/idle_lines = list( + FIREBOT_VOICED_NO_FIRES = 'sound/voice/firebot/nofires.ogg', + FIREBOT_VOICED_ONLY_YOU = 'sound/voice/firebot/onlyyou.ogg', + FIREBOT_VOICED_TEMPERATURE_NOMINAL = 'sound/voice/firebot/tempnominal.ogg', + FIREBOT_VOICED_KEEP_COOL = 'sound/voice/firebot/keepitcool.ogg', + ) + var/static/list/fire_detected_lines = list( + FIREBOT_VOICED_FIRE_DETECTED = 'sound/voice/firebot/detected.ogg', + FIREBOT_VOICED_STOP_DROP = 'sound/voice/firebot/stopdropnroll.ogg', + FIREBOT_VOICED_EXTINGUISHING = 'sound/voice/firebot/extinguishing.ogg', + ) + var/static/list/emagged_lines = list( + FIREBOT_VOICED_CANDLE_TIP = 'sound/voice/firebot/candle_tip.ogg', + FIREBOT_VOICED_ELECTRIC_FIRE = 'sound/voice/firebot/electric_fire_tip.ogg', + FIREBOT_VOICED_FUEL_TIP = 'sound/voice/firebot/gasoline_tip.ogg' + ) + ai_controller.set_blackboard_key(BB_FIREBOT_EMAGGED_LINES, emagged_lines) + ai_controller.set_blackboard_key(BB_FIREBOT_IDLE_LINES, idle_lines) + ai_controller.set_blackboard_key(BB_FIREBOT_FIRE_DETECTED_LINES, fire_detected_lines) + return idle_lines + fire_detected_lines + +/mob/living/basic/bot/firebot/Initialize(mapload) + . = ..() + ADD_TRAIT(src, TRAIT_SPACEWALK, INNATE_TRAIT) + update_appearance(UPDATE_ICON) + var/static/list/things_to_extinguish = typecacheof(list(/mob/living/carbon)) + ai_controller.set_blackboard_key(BB_FIREBOT_CAN_EXTINGUISH, things_to_extinguish) + create_extinguisher() + AddElement(/datum/element/atmos_sensitive, mapload) + +/mob/living/basic/bot/firebot/Destroy() + QDEL_NULL(internal_ext) + return ..() + +/mob/living/basic/bot/firebot/bot_reset(bypass_ai_reset) + . = ..() + create_extinguisher() + +/mob/living/basic/bot/firebot/proc/create_extinguisher() + internal_ext = new /obj/item/extinguisher(src) + internal_ext.safety = FALSE + internal_ext.precision = TRUE + internal_ext.max_water = INFINITY + internal_ext.refill() + +/mob/living/basic/bot/firebot/melee_attack(atom/attacked_atom, list/modifiers, ignore_cooldown = FALSE) + use_extinguisher(attacked_atom) + +/mob/living/basic/bot/firebot/RangedAttack(atom/attacked_atom, list/modifiers) + use_extinguisher(attacked_atom) + +/mob/living/basic/bot/firebot/proc/use_extinguisher(atom/attacked_atom) + if(!(bot_mode_flags & BOT_MODE_ON)) + return + spray_water(attacked_atom) + +/mob/living/basic/bot/firebot/emag_act(mob/user, obj/item/card/emag/emag_card) + . = ..() + if(!(bot_access_flags & BOT_COVER_EMAGGED)) + return + + to_chat(user, span_warning("You enable the very ironically named \"fighting with fire\" mode, and disable the targeting safeties.")) // heheehe. funny + + audible_message(span_danger("[src] buzzes oddly!")) + playsound(src, SFX_SPARKS, 75, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) + + internal_ext.chem = /datum/reagent/clf3 //Refill the internal extinguisher with liquid fire + internal_ext.power = 3 + internal_ext.safety = FALSE + internal_ext.precision = FALSE + internal_ext.max_water = INFINITY + internal_ext.refill() + return TRUE + +// Variables sent to TGUI +/mob/living/basic/bot/firebot/ui_data(mob/user) + var/list/data = ..() + if(!(bot_access_flags & BOT_COVER_LOCKED) || HAS_SILICON_ACCESS(user)) + data["custom_controls"]["extinguish_fires"] = firebot_mode_flags & FIREBOT_EXTINGUISH_FLAMES + data["custom_controls"]["extinguish_people"] = firebot_mode_flags & FIREBOT_EXTINGUISH_PEOPLE + data["custom_controls"]["stationary_mode"] = firebot_mode_flags & FIREBOT_STATIONARY_MODE + return data + +// Actions received from TGUI +/mob/living/basic/bot/firebot/ui_act(action, params) + . = ..() + if(. || (bot_access_flags & BOT_COVER_LOCKED && !HAS_SILICON_ACCESS(usr))) + return + + switch(action) + if("extinguish_fires") + firebot_mode_flags ^= FIREBOT_EXTINGUISH_FLAMES + if("extinguish_people") + firebot_mode_flags ^= FIREBOT_EXTINGUISH_PEOPLE + if("stationary_mode") + firebot_mode_flags ^= FIREBOT_STATIONARY_MODE + update_appearance() + +/mob/living/basic/bot/firebot/should_atmos_process(datum/gas_mixture/air, exposed_temperature) + return (exposed_temperature > T0C + 200 || exposed_temperature < BODYTEMP_COLD_DAMAGE_LIMIT) + +/mob/living/basic/bot/firebot/atmos_expose(datum/gas_mixture/air, exposed_temperature) + if(!COOLDOWN_FINISHED(src, foam_cooldown)) + return + var/datum/effect_system/fluid_spread/foam/firefighting/foam = new + foam.set_up(3, holder = src, location = loc) + foam.start() + COOLDOWN_START(src, foam_cooldown, FOAM_INTERVAL) + +/mob/living/basic/bot/firebot/proc/spray_water(atom/attacked_atom) + if(firebot_mode_flags & FIREBOT_STATIONARY_MODE) + flick("firebots_use", src) + else + flick("firebot1_use", src) + internal_ext?.melee_attack_chain(src, attacked_atom) + +/mob/living/basic/bot/firebot/update_icon_state() + . = ..() + if(!(bot_mode_flags & BOT_MODE_ON)) + icon_state = "firebot0" + return + if(IsStun() || IsParalyzed() || (firebot_mode_flags & FIREBOT_STATIONARY_MODE)) //Bot has yellow light to indicate stationary mode. + icon_state = "firebots1" + return + icon_state = "firebot1" + +/mob/living/basic/bot/firebot/explode() + var/turf/my_turf = drop_location() + + new /obj/item/assembly/prox_sensor(my_turf) + new /obj/item/clothing/head/utility/hardhat/red(my_turf) + + if(isopenturf(my_turf)) + var/turf/open/open_turf = my_turf + open_turf.MakeSlippery(TURF_WET_WATER, min_wet_time = 10 SECONDS, wet_time_to_add = 5 SECONDS) + + return ..() + +#undef FOAM_INTERVAL diff --git a/code/modules/mob/living/basic/bots/firebot/firebot_ai.dm b/code/modules/mob/living/basic/bots/firebot/firebot_ai.dm new file mode 100644 index 0000000000000..31127ecdfb4e7 --- /dev/null +++ b/code/modules/mob/living/basic/bots/firebot/firebot_ai.dm @@ -0,0 +1,132 @@ +#define ANNOUNCEMENT_TIMER 10 SECONDS + +/datum/ai_controller/basic_controller/bot/firebot + blackboard = list( + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic/allow_turfs, + BB_UNREACHABLE_LIST_COOLDOWN = 45 SECONDS, + ) + planning_subtrees = list( + /datum/ai_planning_subtree/respond_to_summon, + /datum/ai_planning_subtree/manage_unreachable_list, + /datum/ai_planning_subtree/extinguishing_people, + /datum/ai_planning_subtree/extinguishing_turfs, + /datum/ai_planning_subtree/salute_authority, + /datum/ai_planning_subtree/firebot_speech, + /datum/ai_planning_subtree/find_patrol_beacon, + ) + reset_keys = list( + BB_FIREBOT_EXTINGUISH_TARGET, + BB_BEACON_TARGET, + BB_PREVIOUS_BEACON_TARGET, + BB_BOT_SUMMON_TARGET, + ) + ///cooldown until we announce a fire again + COOLDOWN_DECLARE(announcement_cooldown) + +/datum/ai_controller/basic_controller/bot/firebot/TryPossessPawn(atom/new_pawn) + . = ..() + if(. & AI_CONTROLLER_INCOMPATIBLE) + return + RegisterSignal(new_pawn, COMSIG_AI_BLACKBOARD_KEY_SET(BB_FIREBOT_EXTINGUISH_TARGET), PROC_REF(on_target_found)) + +///say a silly line whenever we find someone on fire +/datum/ai_controller/basic_controller/bot/firebot/proc/on_target_found() + SIGNAL_HANDLER + if(!COOLDOWN_FINISHED(src, announcement_cooldown)) + return + + var/datum/action/cooldown/bot_announcement/announcement = blackboard[BB_ANNOUNCE_ABILITY] + if(isnull(announcement)) + return + + var/list/lines = blackboard[BB_FIREBOT_FIRE_DETECTED_LINES] + if(!length(lines)) + return + INVOKE_ASYNC(announcement, TYPE_PROC_REF(/datum/action/cooldown/bot_announcement, announce), pick(lines)) + COOLDOWN_START(src, announcement_cooldown, ANNOUNCEMENT_TIMER) + + +///subtree for extinguishing people +/datum/ai_planning_subtree/extinguishing_people + +/datum/ai_planning_subtree/extinguishing_people/SelectBehaviors(datum/ai_controller/basic_controller/bot/controller, seconds_per_tick) + if(controller.blackboard_key_exists(BB_FIREBOT_EXTINGUISH_TARGET)) + controller.queue_behavior(/datum/ai_behavior/basic_melee_attack/interact_once/extinguish, BB_FIREBOT_EXTINGUISH_TARGET, BB_TARGETING_STRATEGY) + return SUBTREE_RETURN_FINISH_PLANNING + + var/mob/living/basic/bot/firebot/living_bot = controller.pawn + var/range = living_bot.firebot_mode_flags & FIREBOT_STATIONARY_MODE ? 1 : 5 + + if(living_bot.firebot_mode_flags & FIREBOT_EXTINGUISH_PEOPLE) + controller.queue_behavior(/datum/ai_behavior/bot_search/people_on_fire, BB_FIREBOT_EXTINGUISH_TARGET, controller.blackboard[BB_FIREBOT_CAN_EXTINGUISH], range) + +///behavior for finding people on fire +/datum/ai_behavior/bot_search/people_on_fire + +/datum/ai_behavior/bot_search/people_on_fire/valid_target(datum/ai_controller/basic_controller/bot/controller, mob/living/my_target) + var/mob/living/basic/bot/living_bot = controller.pawn + return (my_target.on_fire || (living_bot.bot_access_flags & BOT_COVER_EMAGGED)) + +///subtree for finding turfs to extinguish +/datum/ai_planning_subtree/extinguishing_turfs + +/datum/ai_planning_subtree/extinguishing_turfs/SelectBehaviors(datum/ai_controller/basic_controller/bot/controller, seconds_per_tick) + if(controller.blackboard_key_exists(BB_FIREBOT_EXTINGUISH_TARGET)) + return + + var/mob/living/basic/bot/firebot/living_bot = controller.pawn + var/should_bypass_blacklist = living_bot.firebot_mode_flags & FIREBOT_STATIONARY_MODE + + if(living_bot.firebot_mode_flags & FIREBOT_EXTINGUISH_FLAMES) + controller.queue_behavior(/datum/ai_behavior/search_burning_turfs, BB_FIREBOT_EXTINGUISH_TARGET, should_bypass_blacklist) + +///behavior to find burning turfs +/datum/ai_behavior/search_burning_turfs + action_cooldown = 2 SECONDS + behavior_flags = AI_BEHAVIOR_CAN_PLAN_DURING_EXECUTION + +/datum/ai_behavior/search_burning_turfs/perform(seconds_per_tick, datum/ai_controller/basic_controller/bot/controller, target_key, bypass_add_blacklist = FALSE) + var/mob/living/living_pawn = controller.pawn + var/list/ignore_list = controller.blackboard[BB_TEMPORARY_IGNORE_LIST] + + for(var/turf/possible_turf as anything in RANGE_TURFS(5, living_pawn)) + if(QDELETED(living_pawn)) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED + if(!isopenturf(possible_turf)) + continue + var/turf/open/open_turf = possible_turf + if(!open_turf.active_hotspot) + continue + if(LAZYACCESS(ignore_list, possible_turf)) + continue + if(controller.set_if_can_reach(target_key, possible_turf, bypass_add_to_blacklist = bypass_add_blacklist)) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED + + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED + +///behavior to extinguish mobs or turfs +/datum/ai_behavior/basic_melee_attack/interact_once/extinguish + +/datum/ai_behavior/basic_melee_attack/interact_once/extinguish/finish_action(datum/ai_controller/basic_controller/bot/controller, succeeded, target_key, targeting_strategy_key, hiding_location_key) + var/atom/target = controller.blackboard[BB_FIREBOT_EXTINGUISH_TARGET] + var/mob/living/basic/bot/living_bot = controller.pawn + + //if we couldnt path, or we successfully burnt someone, ignore them for a bit! + if(!succeeded || (isliving(target) && (living_bot.bot_access_flags & BOT_COVER_EMAGGED))) + controller.set_blackboard_key_assoc_lazylist(BB_TEMPORARY_IGNORE_LIST, target, TRUE) + + return ..() + +///subtree to make us say funny idle lines +/datum/ai_planning_subtree/firebot_speech + ///chance we spout lines + var/speech_prob = 3 + +/datum/ai_planning_subtree/firebot_speech/SelectBehaviors(datum/ai_controller/basic_controller/bot/controller, seconds_per_tick) + if(controller.blackboard[BB_FIREBOT_EXTINGUISH_TARGET] || !SPT_PROB(speech_prob, seconds_per_tick)) + return + var/mob/living/basic/bot/living_bot = controller.pawn + var/list/idle_lines = (living_bot.bot_access_flags & BOT_COVER_EMAGGED) ? controller.blackboard[BB_FIREBOT_EMAGGED_LINES] : controller.blackboard[BB_FIREBOT_IDLE_LINES] + controller.queue_behavior(/datum/ai_behavior/bot_speech, idle_lines, BB_ANNOUNCE_ABILITY) + +#undef ANNOUNCEMENT_TIMER diff --git a/code/modules/mob/living/basic/bots/honkbots/honkbot.dm b/code/modules/mob/living/basic/bots/honkbots/honkbot.dm new file mode 100644 index 0000000000000..7f869995c31a3 --- /dev/null +++ b/code/modules/mob/living/basic/bots/honkbots/honkbot.dm @@ -0,0 +1,110 @@ +/mob/living/basic/bot/honkbot + name = "\improper Honkbot" + desc = "A little robot. It looks happy with its bike horn." + icon_state = "honkbot" + base_icon_state = "honkbot" + damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 0, STAMINA = 0, OXY = 0) + req_access = list(ACCESS_ROBOTICS, ACCESS_THEATRE, ACCESS_JANITOR) + radio_key = /obj/item/encryptionkey/headset_service + ai_controller = /datum/ai_controller/basic_controller/bot/honkbot + radio_channel = RADIO_CHANNEL_SERVICE + bot_type = HONK_BOT + bot_mode_flags = BOT_MODE_ON | BOT_MODE_REMOTE_ENABLED | BOT_MODE_CAN_BE_SAPIENT | BOT_MODE_AUTOPATROL | BOT_MODE_ROUNDSTART_POSSESSION + hackables = "sound control systems" + path_image_color = "#FF69B4" + data_hud_type = DATA_HUD_SECURITY_BASIC + additional_access = /datum/id_trim/job/clown + possessed_message = "You are a honkbot! Make sure the crew are having a great time!" + ///our voicelines + var/static/list/honkbot_sounds = list( + HONKBOT_VOICED_HONK_HAPPY = 'sound/items/bikehorn.ogg', + HONKBOT_VOICED_HONK_SAD = 'sound/misc/sadtrombone.ogg', + ) + ///Honkbot's flags + var/honkbot_flags = HONKBOT_CHECK_RECORDS | HONKBOT_HANDCUFF_TARGET | HONKBOT_MODE_SLIP + +/mob/living/basic/bot/honkbot/Initialize(mapload) + . = ..() + var/static/list/clown_friends = typecacheof(list( + /mob/living/carbon/human, + /mob/living/silicon/robot, + )) + ai_controller.set_blackboard_key(BB_CLOWNS_LIST, clown_friends) + var/static/list/slippery_items = typecacheof(list( + /obj/item/grown/bananapeel, + /obj/item/soap, + )) + ai_controller.set_blackboard_key(BB_SLIPPERY_ITEMS, slippery_items) + + var/datum/action/cooldown/mob_cooldown/bot/honk/bike_honk = new(src) + bike_honk.Grant(src) + bike_honk.post_honk_callback = CALLBACK(src, PROC_REF(set_attacking_state)) + ai_controller.set_blackboard_key(BB_HONK_ABILITY, bike_honk) + + AddComponent(/datum/component/slippery,\ + knockdown = 6 SECONDS,\ + paralyze = 3 SECONDS,\ + on_slip_callback = CALLBACK(src, PROC_REF(post_slip)),\ + can_slip_callback = CALLBACK(src, PROC_REF(pre_slip)),\ + ) + AddComponent(/datum/component/stun_n_cuff,\ + stun_sound = 'sound/items/AirHorn.ogg',\ + post_stun_callback = CALLBACK(src, PROC_REF(post_stun)),\ + post_arrest_callback = CALLBACK(src, PROC_REF(post_arrest)),\ + handcuff_type = /obj/item/restraints/handcuffs/cable/zipties/fake,\ + ) + +/mob/living/basic/bot/honkbot/generate_speak_list() + return honkbot_sounds + +/mob/living/basic/bot/honkbot/proc/pre_slip() + return (prob(70) && ai_controller?.blackboard_key_exists(BB_BASIC_MOB_CURRENT_TARGET)) + +/mob/living/basic/bot/honkbot/proc/post_slip() + INVOKE_ASYNC(src, TYPE_PROC_REF(/mob/living/basic/bot, speak), HONKBOT_VOICED_HONK_SAD) + set_attacking_state() + +/mob/living/basic/bot/honkbot/proc/set_attacking_state() + icon_state = "[base_icon_state]-c" + addtimer(CALLBACK(src, TYPE_PROC_REF(/atom, update_appearance)), 0.2 SECONDS) + +/mob/living/basic/bot/honkbot/proc/post_arrest(mob/living/carbon/current_target) + playsound(src, (bot_access_flags & BOT_COVER_EMAGGED ? SFX_HONKBOT_E : 'sound/items/bikehorn.ogg'), 50, FALSE) + icon_state = bot_access_flags & BOT_COVER_EMAGGED ? "[base_icon_state]-e" : "[base_icon_state]-c" + addtimer(CALLBACK(src, TYPE_PROC_REF(/atom, update_appearance)), 3 SECONDS, TIMER_OVERRIDE|TIMER_UNIQUE) + +/mob/living/basic/bot/honkbot/proc/post_stun(mob/living/carbon/current_target) + if(!istype(current_target)) + return + + current_target.set_stutter(40 SECONDS) + current_target.set_jitter_if_lower(100 SECONDS) + set_attacking_state() + if(HAS_TRAIT(current_target, TRAIT_DEAF)) + return + + var/obj/item/organ/internal/ears/target_ears = current_target.get_organ_slot(ORGAN_SLOT_EARS) + target_ears?.adjustEarDamage(0, 5) + +/mob/living/basic/bot/honkbot/ui_data(mob/user) + var/list/data = ..() + if(!(bot_access_flags & BOT_COVER_LOCKED) || issilicon(user) || isAdminGhostAI(user)) + data["custom_controls"]["slip_people"] = honkbot_flags & HONKBOT_MODE_SLIP + data["custom_controls"]["fake_cuff"] = honkbot_flags & HONKBOT_HANDCUFF_TARGET + data["custom_controls"]["check_ids"] = honkbot_flags & HONKBOT_CHECK_IDS + data["custom_controls"]["check_records"] = honkbot_flags & HONKBOT_CHECK_RECORDS + return data + +/mob/living/basic/bot/honkbot/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) + . = ..() + if(. || !isliving(ui.user) || (bot_access_flags & BOT_COVER_LOCKED) && !(ui.user.has_unlimited_silicon_privilege)) + return + switch(action) + if("slip_people") + honkbot_flags ^= HONKBOT_MODE_SLIP + if("fake_cuff") + honkbot_flags ^= HONKBOT_HANDCUFF_TARGET + if("check_ids") + honkbot_flags ^= HONKBOT_CHECK_IDS + if("check_records") + honkbot_flags ^= HONKBOT_CHECK_RECORDS diff --git a/code/modules/mob/living/basic/bots/honkbots/honkbot_abilities.dm b/code/modules/mob/living/basic/bots/honkbots/honkbot_abilities.dm new file mode 100644 index 0000000000000..4db55668dce7c --- /dev/null +++ b/code/modules/mob/living/basic/bots/honkbots/honkbot_abilities.dm @@ -0,0 +1,19 @@ +/datum/action/cooldown/mob_cooldown/bot/honk + name = "Honk" + desc = "Spread cheer and joy all around!" + button_icon = 'icons/obj/art/horn.dmi' + button_icon_state = "bike_horn" + cooldown_time = 5 SECONDS + click_to_activate = FALSE + ///callback after we have honked + var/datum/callback/post_honk_callback + +/datum/action/cooldown/mob_cooldown/bot/honk/Activate() + playsound(owner, 'sound/items/bikehorn.ogg', 50, TRUE, -1) + post_honk_callback?.Invoke() + StartCooldown() + return TRUE + +/datum/action/cooldown/mob_cooldown/bot/honk/Destroy() + . = ..() + post_honk_callback = null diff --git a/code/modules/mob/living/basic/bots/honkbots/honkbot_ai.dm b/code/modules/mob/living/basic/bots/honkbots/honkbot_ai.dm new file mode 100644 index 0000000000000..f8d4f55150d1d --- /dev/null +++ b/code/modules/mob/living/basic/bots/honkbots/honkbot_ai.dm @@ -0,0 +1,248 @@ +/datum/ai_controller/basic_controller/bot/honkbot + blackboard = list( + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, + BB_UNREACHABLE_LIST_COOLDOWN = 1 MINUTES, + BB_ALWAYS_IGNORE_FACTION = TRUE, + ) + planning_subtrees = list( + /datum/ai_planning_subtree/respond_to_summon, + /datum/ai_planning_subtree/use_mob_ability/random_honk, + /datum/ai_planning_subtree/manage_unreachable_list, + /datum/ai_planning_subtree/find_wanted_targets, + /datum/ai_planning_subtree/troll_target, + /datum/ai_planning_subtree/slip_victims, + /datum/ai_planning_subtree/play_with_clowns, + /datum/ai_planning_subtree/find_patrol_beacon, + ) + reset_keys = list( + BB_BEACON_TARGET, + BB_PREVIOUS_BEACON_TARGET, + BB_BOT_SUMMON_TARGET, + ) + ai_traits = PAUSE_DURING_DO_AFTER + +/datum/ai_controller/basic_controller/bot/honkbot/TryPossessPawn(atom/new_pawn) + . = ..() + if(. & AI_CONTROLLER_INCOMPATIBLE) + return + RegisterSignal(new_pawn, COMSIG_AI_BLACKBOARD_KEY_CLEARED(BB_SLIP_TARGET), PROC_REF(on_clear_target)) + RegisterSignal(new_pawn, COMSIG_ATOM_NO_LONGER_PULLING, PROC_REF(on_stop_pulling)) + +/datum/ai_controller/basic_controller/bot/honkbot/proc/on_clear_target(datum/source) + SIGNAL_HANDLER + + var/mob/living/living_pawn = pawn + living_pawn.stop_pulling() + +/datum/ai_controller/basic_controller/bot/honkbot/proc/on_stop_pulling(datum/source) + SIGNAL_HANDLER + + if(!blackboard_key_exists(BB_SLIP_TARGET)) + return + + var/atom/slip_target = blackboard[BB_SLIP_TARGET] + set_blackboard_key_assoc_lazylist(BB_TEMPORARY_IGNORE_LIST, slip_target, TRUE) + clear_blackboard_key(BB_SLIP_TARGET) + +/datum/ai_planning_subtree/find_wanted_targets + +/datum/ai_planning_subtree/find_wanted_targets/SelectBehaviors(datum/ai_controller/controller, seconds_per_tick) + var/static/list/can_arrest = typecacheof(list(/mob/living/carbon/human)) + if(!controller.blackboard_key_exists(BB_BASIC_MOB_CURRENT_TARGET)) + controller.queue_behavior(/datum/ai_behavior/bot_search/wanted_targets, BB_BASIC_MOB_CURRENT_TARGET, can_arrest) + +/datum/ai_behavior/bot_search/wanted_targets + +/datum/ai_behavior/bot_search/wanted_targets/valid_target(datum/ai_controller/basic_controller/bot/controller, mob/living/my_target) + if(!ishuman(my_target)) + return FALSE + var/mob/living/carbon/human/human_target = my_target + if(human_target.handcuffed || human_target.stat != CONSCIOUS) + return FALSE + if(locate(human_target) in controller.blackboard[BB_BASIC_MOB_RETALIATE_LIST]) + return TRUE + var/mob/living/basic/bot/honkbot/my_bot = controller.pawn + var/honkbot_flags = my_bot.honkbot_flags + var/assess_flags = NONE + if(human_target.IsParalyzed() && !(honkbot_flags & HONKBOT_HANDCUFF_TARGET)) + return FALSE + if(my_bot.bot_access_flags & BOT_COVER_EMAGGED) + assess_flags |= JUDGE_EMAGGED + if(honkbot_flags & HONKBOT_CHECK_IDS) + assess_flags |= JUDGE_IDCHECK + if(honkbot_flags & HONKBOT_CHECK_RECORDS) + assess_flags |= JUDGE_RECORDCHECK + return (human_target.assess_threat(assess_flags) > 0) + +/datum/ai_planning_subtree/troll_target + +/datum/ai_planning_subtree/troll_target/SelectBehaviors(datum/ai_controller/basic_controller/bot/controller, seconds_per_tick) + var/mob/living/carbon/my_target = controller.blackboard[BB_BASIC_MOB_CURRENT_TARGET] + if(QDELETED(my_target) || !istype(my_target) || my_target.handcuffed) + controller.clear_blackboard_key(BB_BASIC_MOB_CURRENT_TARGET) + return + + var/mob/living/basic/bot/honkbot/my_bot = controller.pawn + if(my_target.IsParalyzed() && !(my_bot.honkbot_flags & HONKBOT_HANDCUFF_TARGET)) + controller.clear_blackboard_key(BB_BASIC_MOB_CURRENT_TARGET) + return + + controller.queue_behavior(/datum/ai_behavior/basic_melee_attack/interact_once/honkbot, BB_BASIC_MOB_CURRENT_TARGET, BB_TARGETING_STRATEGY) + return SUBTREE_RETURN_FINISH_PLANNING + +/datum/ai_behavior/basic_melee_attack/interact_once/honkbot + +/datum/ai_behavior/basic_melee_attack/interact_once/honkbot/finish_action(datum/ai_controller/controller, succeeded, target_key, targeting_strategy_key, hiding_location_key) + var/mob/living/carbon/human/human_target = controller.blackboard[target_key] + if(!isnull(human_target)) + controller.remove_from_blackboard_lazylist_key(BB_BASIC_MOB_RETALIATE_LIST, human_target) + return ..() + +/datum/ai_planning_subtree/play_with_clowns/SelectBehaviors(datum/ai_controller/basic_controller/bot/controller, seconds_per_tick) + var/mob/living/clown_target = controller.blackboard[BB_CLOWN_FRIEND] + if(QDELETED(clown_target)) + var/list/my_list = controller.blackboard[BB_CLOWNS_LIST] + controller.queue_behavior(/datum/ai_behavior/bot_search/clown_friends, BB_CLOWN_FRIEND, my_list) + return + controller.queue_behavior(/datum/ai_behavior/play_with_clown, BB_CLOWN_FRIEND) + return SUBTREE_RETURN_FINISH_PLANNING + +/datum/ai_behavior/bot_search/clown_friends + +/datum/ai_behavior/bot_search/clown_friends/valid_target(datum/ai_controller/basic_controller/bot/controller, mob/living/my_target) + if(HAS_TRAIT(my_target, TRAIT_PERCEIVED_AS_CLOWN)) + return TRUE + if(!istype(my_target, /mob/living/silicon/robot)) + return FALSE + var/mob/living/silicon/robot/robot_target = my_target + return istype(robot_target.model, /obj/item/robot_model/clown) + +/datum/ai_behavior/play_with_clown + behavior_flags = AI_BEHAVIOR_REQUIRE_MOVEMENT | AI_BEHAVIOR_REQUIRE_REACH | AI_BEHAVIOR_CAN_PLAN_DURING_EXECUTION + +/datum/ai_behavior/play_with_clown/setup(datum/ai_controller/controller, target_key) + . = ..() + var/atom/target = controller.blackboard[target_key] + if(QDELETED(target)) + return FALSE + set_movement_target(controller, target) + +/datum/ai_behavior/play_with_clown/perform(seconds_per_tick, datum/ai_controller/controller, target_key) + var/mob/living/living_target = controller.blackboard[target_key] + if(QDELETED(living_target)) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED + var/mob/living/living_pawn = controller.pawn + var/datum/action/honk_ability = controller.blackboard[BB_HONK_ABILITY] + honk_ability?.Trigger() + living_pawn.manual_emote("celebrates with [living_target]!") + living_pawn.emote("flip") + living_pawn.emote("beep") + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED + +/datum/ai_behavior/play_with_clown/finish_action(datum/ai_controller/controller, succeeded, target_key, targeting_strategy_key, hiding_location_key) + . = ..() + var/mob/living/living_target = controller.blackboard[target_key] + if(QDELETED(living_target)) + return + controller.set_blackboard_key_assoc_lazylist(BB_TEMPORARY_IGNORE_LIST, living_target, TRUE) + controller.clear_blackboard_key(target_key) + +/datum/ai_planning_subtree/slip_victims/SelectBehaviors(datum/ai_controller/basic_controller/bot/controller, seconds_per_tick) + var/mob/living/living_pawn = controller.pawn + if(!living_pawn.has_gravity()) + return + + var/atom/slippery_item = controller.blackboard[BB_SLIPPERY_TARGET] + if(QDELETED(slippery_item) || !can_see(controller.pawn, slippery_item, 5)) + controller.clear_blackboard_key(BB_SLIP_TARGET) + controller.clear_blackboard_key(BB_SLIPPERY_TARGET) + controller.queue_behavior(/datum/ai_behavior/bot_search, BB_SLIPPERY_TARGET, controller.blackboard[BB_SLIPPERY_ITEMS]) + return + + var/mob/living/living_target = controller.blackboard[BB_SLIP_TARGET] + + if(QDELETED(living_target)) + var/static/list/to_slip = typecacheof(list(/mob/living/carbon/human)) + controller.queue_behavior(/datum/ai_behavior/bot_search/slip_target, BB_SLIP_TARGET, to_slip) + return + + if(living_pawn.pulling == living_target) + controller.queue_behavior(/datum/ai_behavior/drag_to_slip, BB_SLIP_TARGET, BB_SLIPPERY_TARGET) + return SUBTREE_RETURN_FINISH_PLANNING + + controller.queue_behavior(/datum/ai_behavior/drag_target, BB_SLIP_TARGET) + return SUBTREE_RETURN_FINISH_PLANNING + +/datum/ai_behavior/bot_search/slip_target + +/datum/ai_behavior/bot_search/slip_target/valid_target(datum/ai_controller/basic_controller/bot/controller, mob/living/my_target) + return (!my_target.buckled && my_target.has_gravity()) + +/datum/ai_behavior/drag_to_slip + behavior_flags = AI_BEHAVIOR_REQUIRE_MOVEMENT | AI_BEHAVIOR_CAN_PLAN_DURING_EXECUTION + required_distance = 0 + +/datum/ai_behavior/drag_to_slip/setup(datum/ai_controller/controller, slip_target, slippery_target) + . = ..() + var/atom/target = controller.blackboard[slippery_target] + if(QDELETED(target)) + return FALSE + set_movement_target(controller, target) + +/datum/ai_behavior/drag_to_slip/perform(seconds_per_tick, datum/ai_controller/controller, slip_target, slippery_target) + var/mob/living/our_pawn = controller.pawn + var/atom/living_target = controller.blackboard[slip_target] + if(QDELETED(living_target)) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED + var/list/possible_dirs = GLOB.alldirs.Copy() + possible_dirs -= get_dir(our_pawn, living_target) + for(var/direction in possible_dirs) + var/turf/possible_turf = get_step(our_pawn, direction) + if(possible_turf.is_blocked_turf(source_atom = our_pawn)) + possible_dirs -= direction + step(our_pawn, pick(possible_dirs)) + our_pawn.stop_pulling() + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED + +/datum/ai_behavior/drag_to_slip/finish_action(datum/ai_controller/controller, success, slip_target, slippery_target) + . = ..() + if(success) + var/mob/living/living_pawn = controller.pawn + living_pawn.emote("flip") + var/atom/slipped_victim = controller.blackboard[slip_target] + if(!isnull(slipped_victim)) + controller.set_blackboard_key_assoc_lazylist(BB_TEMPORARY_IGNORE_LIST, slipped_victim, TRUE) + controller.clear_blackboard_key(slip_target) + controller.clear_blackboard_key(slippery_target) + +/datum/ai_behavior/drag_target + behavior_flags = AI_BEHAVIOR_REQUIRE_MOVEMENT | AI_BEHAVIOR_CAN_PLAN_DURING_EXECUTION | AI_BEHAVIOR_REQUIRE_REACH + +/datum/ai_behavior/drag_target/setup(datum/ai_controller/controller, target_key) + . = ..() + var/atom/target = controller.blackboard[target_key] + if(QDELETED(target)) + return FALSE + set_movement_target(controller, target) + +/datum/ai_behavior/drag_target/perform(seconds_per_tick, datum/ai_controller/controller, target_key) + var/atom/movable/target = controller.blackboard[target_key] + if(QDELETED(target) || target.anchored || target.pulledby) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED + var/mob/living/our_mob = controller.pawn + our_mob.start_pulling(target) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED + +/datum/ai_behavior/drag_target/finish_action(datum/ai_controller/controller, succeeded, target_key) + . = ..() + if(!succeeded) + controller.clear_blackboard_key(target_key) + +/datum/ai_planning_subtree/use_mob_ability/random_honk + ability_key = BB_HONK_ABILITY + +/datum/ai_planning_subtree/use_mob_ability/random_honk/SelectBehaviors(datum/ai_controller/controller, seconds_per_tick) + if(!SPT_PROB(5, seconds_per_tick)) + return + return ..() + diff --git a/code/modules/mob/living/basic/bots/hygienebot/hygienebot.dm b/code/modules/mob/living/basic/bots/hygienebot/hygienebot.dm index 8def16692bfc2..4dbd78dcac14a 100644 --- a/code/modules/mob/living/basic/bots/hygienebot/hygienebot.dm +++ b/code/modules/mob/living/basic/bots/hygienebot/hygienebot.dm @@ -6,7 +6,7 @@ icon = 'icons/mob/silicon/aibots.dmi' icon_state = "hygienebot" base_icon_state = "hygienebot" - pass_flags = PASSMOB | PASSFLAPS | PASSTABLE + pass_flags = parent_type::pass_flags | PASSTABLE layer = MOB_UPPER_LAYER density = FALSE anchored = FALSE diff --git a/code/modules/mob/living/basic/bots/medbot/medbot.dm b/code/modules/mob/living/basic/bots/medbot/medbot.dm index fcf252c017809..945dd5c709fb6 100644 --- a/code/modules/mob/living/basic/bots/medbot/medbot.dm +++ b/code/modules/mob/living/basic/bots/medbot/medbot.dm @@ -6,7 +6,6 @@ icon = 'icons/mob/silicon/aibots.dmi' icon_state = "medibot0" base_icon_state = "medibot" - density = FALSE health = 20 maxHealth = 20 speed = 2 diff --git a/code/modules/mob/living/basic/bots/medbot/medbot_ai.dm b/code/modules/mob/living/basic/bots/medbot/medbot_ai.dm index 0a4520ad17b26..f0b2f089cb6e7 100644 --- a/code/modules/mob/living/basic/bots/medbot/medbot_ai.dm +++ b/code/modules/mob/living/basic/bots/medbot/medbot_ai.dm @@ -56,7 +56,7 @@ search_range = (mode_flags & MEDBOT_STATIONARY_MODE) ? 1 : initial(search_range) var/list/ignore_keys = controller.blackboard[BB_TEMPORARY_IGNORE_LIST] for(var/mob/living/carbon/human/treatable_target in oview(search_range, controller.pawn)) - if(LAZYACCESS(ignore_keys, REF(treatable_target)) || treatable_target.stat == DEAD) + if(LAZYACCESS(ignore_keys, treatable_target) || treatable_target.stat == DEAD) continue if((access_flags & BOT_COVER_EMAGGED) && treatable_target.stat == CONSCIOUS) controller.set_if_can_reach(BB_PATIENT_TARGET, treatable_target, distance =BOT_PATIENT_PATH_LIMIT, bypass_add_to_blacklist = (search_range == 1)) @@ -107,18 +107,18 @@ return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED // only clear the target if they get healed -/datum/ai_behavior/tend_to_patient/finish_action(datum/ai_controller/controller, succeeded, target_key, is_stationary, healed_target = FALSE) +/datum/ai_behavior/tend_to_patient/finish_action(datum/ai_controller/controller, succeeded, target_key, threshold, damage_type_healer, access_flags, is_stationary) . = ..() var/atom/target = controller.blackboard[target_key] if(!succeeded) if(!isnull(target) && !is_stationary) - controller.set_blackboard_key_assoc_lazylist(BB_TEMPORARY_IGNORE_LIST, REF(target), TRUE) + controller.set_blackboard_key_assoc_lazylist(BB_TEMPORARY_IGNORE_LIST, target, TRUE) controller.clear_blackboard_key(target_key) return - if(QDELETED(target) || !healed_target) + if(QDELETED(target) || !check_if_healed(target, threshold, damage_type_healer, access_flags)) return var/datum/action/cooldown/bot_announcement/announcement = controller.blackboard[BB_ANNOUNCE_ABILITY] diff --git a/code/modules/mob/living/basic/bots/vibebot/vibebot.dm b/code/modules/mob/living/basic/bots/vibebot/vibebot.dm new file mode 100644 index 0000000000000..c872e1ea5959c --- /dev/null +++ b/code/modules/mob/living/basic/bots/vibebot/vibebot.dm @@ -0,0 +1,30 @@ +/mob/living/basic/bot/vibebot + name = "\improper Vibebot" + desc = "A little robot. It's just vibing, doing its thing." + icon = 'icons/mob/silicon/aibots.dmi' + icon_state = "vibebot1" + base_icon_state = "vibebot" + pass_flags = PASSMOB | PASSFLAPS + light_system = OVERLAY_LIGHT + light_range = 6 + ai_controller = /datum/ai_controller/basic_controller/bot/vibebot + light_power = 2 + + hackables = "vibing scanners" + radio_key = /obj/item/encryptionkey/headset_service + radio_channel = RADIO_CHANNEL_SERVICE + bot_type = VIBE_BOT + data_hud_type = DATA_HUD_DIAGNOSTIC_BASIC + path_image_color = "#2cac12" + possessed_message = "You are a vibebot! Maintain the station's vibes to the best of your ability!" + +/mob/living/basic/bot/vibebot/Initialize(mapload) + . = ..() + var/static/list/innate_actions = list( + /datum/action/cooldown/mob_cooldown/bot/vibe = BB_VIBEBOT_PARTY_ABILITY, + ) + + grant_actions_by_list(innate_actions) + var/obj/item/instrument/piano_synth/piano = new(src) + ai_controller.set_blackboard_key(BB_SONG_INSTRUMENT, piano) + update_appearance(UPDATE_ICON) diff --git a/code/modules/mob/living/basic/bots/vibebot/vibebot_abilities.dm b/code/modules/mob/living/basic/bots/vibebot/vibebot_abilities.dm new file mode 100644 index 0000000000000..b3fcec9813b0b --- /dev/null +++ b/code/modules/mob/living/basic/bots/vibebot/vibebot_abilities.dm @@ -0,0 +1,59 @@ +/** + * Vibebot's vibe ability + * + * Given to vibebots so sentient ones can change/reset thier colors at will. + */ +#define VIBE_MOOD_TIMER 30 SECONDS +/datum/action/cooldown/mob_cooldown/bot/vibe + name = "Vibe" + desc = "Use on yourself to remove color!" + click_to_activate = TRUE + button_icon = 'icons/mob/actions/actions_minor_antag.dmi' + button_icon_state = "funk" + ///cooldown to apply a new mood + COOLDOWN_DECLARE(change_mood) + +/datum/action/cooldown/mob_cooldown/bot/vibe/Grant(mob/granted_to) + . = ..() + if(isnull(granted_to)) + return + RegisterSignal(granted_to, COMSIG_BOT_RESET, PROC_REF(remove_colors)) + +/datum/action/cooldown/mob_cooldown/bot/vibe/Activate(atom/target) + if(target == owner) + remove_colors() + return TRUE + vibe() + StartCooldown() + return TRUE + +///Gives a random color +/datum/action/cooldown/mob_cooldown/bot/vibe/proc/vibe() + var/mob/living/basic/bot/bot_owner = owner + var/final_color = (bot_owner.bot_access_flags & BOT_COVER_EMAGGED) ? COLOR_GRAY : "#[random_color()]" + owner.remove_atom_colour(TEMPORARY_COLOUR_PRIORITY) + owner.add_atom_colour(final_color, TEMPORARY_COLOUR_PRIORITY) + owner.set_light_color(owner.color) + if(!COOLDOWN_FINISHED(src, change_mood)) + return + var/mood_to_add = bot_owner.bot_access_flags & BOT_COVER_EMAGGED ? /datum/mood_event/depressing_party : /datum/mood_event/festive_party + for(var/mob/living/carbon/human/human_target in oview(1, owner)) + human_target.add_mood_event("vibebot_party", mood_to_add) + COOLDOWN_START(src, change_mood, VIBE_MOOD_TIMER) + +///Removes all colors +/datum/action/cooldown/mob_cooldown/bot/vibe/proc/remove_colors() + owner.remove_atom_colour(TEMPORARY_COLOUR_PRIORITY) + owner.set_light_color(null) + +/datum/mood_event/depressing_party + description = "That was a really grim party..." + mood_change = -1 + timeout = 30 SECONDS + +/datum/mood_event/festive_party + description = "That was a really fantastic party!" + mood_change = 2 + timeout = 30 SECONDS + +#undef VIBE_MOOD_TIMER diff --git a/code/modules/mob/living/basic/bots/vibebot/vibebot_ai.dm b/code/modules/mob/living/basic/bots/vibebot/vibebot_ai.dm new file mode 100644 index 0000000000000..945b09274d783 --- /dev/null +++ b/code/modules/mob/living/basic/bots/vibebot/vibebot_ai.dm @@ -0,0 +1,88 @@ +/datum/ai_controller/basic_controller/bot/vibebot + blackboard = list( + BB_UNREACHABLE_LIST_COOLDOWN = 2 MINUTES, + BB_VIBEBOT_HAPPY_SONG = VIBEBOT_CHEER_SONG, + BB_VIBEBOT_GRIM_SONG = VIBEBOT_GRIM_MUSIC, + BB_VIBEBOT_BIRTHDAY_SONG = VIBEBOT_HAPPY_BIRTHDAY, + ) + planning_subtrees = list( + /datum/ai_planning_subtree/respond_to_summon, + /datum/ai_planning_subtree/manage_unreachable_list, + /datum/ai_planning_subtree/find_party_friends, + /datum/ai_planning_subtree/find_patrol_beacon, + ) + reset_keys = list( + BB_BEACON_TARGET, + BB_PREVIOUS_BEACON_TARGET, + BB_VIBEBOT_PARTY_TARGET, + BB_BOT_SUMMON_TARGET, + ) + ai_traits = PAUSE_DURING_DO_AFTER + +/datum/ai_controller/basic_controller/bot/vibebot/TryPossessPawn(atom/new_pawn) + . = ..() + if(. & AI_CONTROLLER_INCOMPATIBLE) + return + RegisterSignal(new_pawn, COMSIG_AI_BLACKBOARD_KEY_SET(BB_VIBEBOT_PARTY_TARGET), PROC_REF(play_music)) + +/datum/ai_controller/basic_controller/bot/vibebot/proc/play_music(datum/source, blackboard_key) + SIGNAL_HANDLER + + var/mob/living/basic/bot/living_bot = pawn + var/obj/item/instrument/instrument = blackboard[BB_SONG_INSTRUMENT] + if(isnull(instrument)) + return + var/atom/target = blackboard[blackboard_key] + var/datum/song/song = instrument.song + song.stop_playing() + var/song_lines + if(living_bot.bot_access_flags & BOT_COVER_EMAGGED) + song_lines = blackboard[BB_VIBEBOT_GRIM_SONG] + else + song_lines = HAS_TRAIT(target, TRAIT_BIRTHDAY_BOY) ? blackboard[BB_VIBEBOT_BIRTHDAY_SONG] : blackboard[BB_VIBEBOT_HAPPY_SONG] + if(isnull(song_lines)) + return + song.ParseSong(new_song = song_lines) + song.start_playing(pawn) + addtimer(CALLBACK(song, TYPE_PROC_REF(/datum/song, stop_playing)), 10 SECONDS) //in 10 seconds, stop playing music + +///subtree we use to find party friends in general +/datum/ai_planning_subtree/find_party_friends + +/datum/ai_planning_subtree/find_party_friends/SelectBehaviors(datum/ai_controller/controller, seconds_per_tick) + var/static/list/type_to_search = typecacheof(list(/mob/living/carbon/human)) + if(!controller.blackboard_key_exists(BB_VIBEBOT_PARTY_TARGET)) + controller.queue_behavior(/datum/ai_behavior/bot_search/party_friends, BB_VIBEBOT_PARTY_TARGET, type_to_search) + return + + controller.queue_behavior(/datum/ai_behavior/targeted_mob_ability/and_clear_target/vibebot_party, BB_VIBEBOT_PARTY_ABILITY, BB_VIBEBOT_PARTY_TARGET) + return SUBTREE_RETURN_FINISH_PLANNING + +///behavior we use to party with people +/datum/ai_behavior/targeted_mob_ability/and_clear_target/vibebot_party + behavior_flags = AI_BEHAVIOR_REQUIRE_REACH | AI_BEHAVIOR_REQUIRE_MOVEMENT + +/datum/ai_behavior/targeted_mob_ability/and_clear_target/vibebot_party/setup(datum/ai_controller/controller, ability_key, target_key) + . = ..() + var/atom/target = controller.blackboard[target_key] + if(QDELETED(target)) + return FALSE + set_movement_target(controller, target) + +/datum/ai_behavior/targeted_mob_ability/and_clear_target/vibebot_party/finish_action(datum/ai_controller/controller, succeeded, ability_key, target_key) + var/atom/target = controller.blackboard[target_key] + controller.set_blackboard_key_assoc_lazylist(BB_TEMPORARY_IGNORE_LIST, target, TRUE) + if(succeeded) + var/mob/living/living_pawn = controller.pawn + living_pawn.manual_emote("celebrates with [target]!") + living_pawn.emote("flip") + return ..() + +///behavior that searches for party friends +/datum/ai_behavior/bot_search/party_friends + action_cooldown = 5 SECONDS + +/datum/ai_behavior/bot_search/party_friends/valid_target(datum/ai_controller/basic_controller/bot/controller, mob/living/carbon/human/my_target) + if(my_target.stat != CONSCIOUS || isnull(my_target.mind)) + return FALSE + return (my_target.mob_mood.mood_level < MOOD_LEVEL_NEUTRAL || HAS_TRAIT(my_target, TRAIT_BIRTHDAY_BOY)) diff --git a/code/modules/mob/living/basic/clown/clown.dm b/code/modules/mob/living/basic/clown/clown.dm index a1a7014b26354..9e8f6950525a7 100644 --- a/code/modules/mob/living/basic/clown/clown.dm +++ b/code/modules/mob/living/basic/clown/clown.dm @@ -88,7 +88,7 @@ /mob/living/basic/clown/lube/Initialize(mapload) . = ..() - AddElement(/datum/element/snailcrawl) + AddElement(/datum/element/lube_walking) /mob/living/basic/clown/honkling name = "Honkling" diff --git a/code/modules/mob/living/basic/cult/constructs/_construct.dm b/code/modules/mob/living/basic/cult/constructs/_construct.dm index 2583b3a88a6b8..79e6e7487721b 100644 --- a/code/modules/mob/living/basic/cult/constructs/_construct.dm +++ b/code/modules/mob/living/basic/cult/constructs/_construct.dm @@ -51,10 +51,12 @@ THEME_CULT = list(/obj/item/ectoplasm/construct), THEME_HOLY = list(/obj/item/ectoplasm/angelic), THEME_WIZARD = list(/obj/item/ectoplasm/mystic), + THEME_HERETIC = list(/obj/item/ectoplasm/construct), ) /mob/living/basic/construct/Initialize(mapload) . = ..() + throw_alert("bloodsense", /atom/movable/screen/alert/bloodsense) AddElement(/datum/element/simple_flying) var/list/remains = string_list(remains_by_theme[theme]) if(length(remains)) diff --git a/code/modules/mob/living/basic/cult/constructs/harvester.dm b/code/modules/mob/living/basic/cult/constructs/harvester.dm index da8dad827b05c..6d41bb43f26a1 100644 --- a/code/modules/mob/living/basic/cult/constructs/harvester.dm +++ b/code/modules/mob/living/basic/cult/constructs/harvester.dm @@ -26,13 +26,16 @@ /mob/living/basic/construct/harvester/Initialize(mapload) . = ..() - AddElement(\ - /datum/element/amputating_limbs,\ + grant_abilities() + +/mob/living/basic/construct/harvester/proc/grant_abilities() + AddElement(/datum/element/wall_walker, /turf/closed/wall/mineral/cult) + AddComponent(\ + /datum/component/amputating_limbs,\ surgery_time = 0,\ surgery_verb = "slicing",\ minimum_stat = CONSCIOUS,\ ) - AddElement(/datum/element/wall_walker, /turf/closed/wall/mineral/cult) var/datum/action/innate/seek_prey/seek = new(src) seek.Grant(src) seek.Activate() @@ -59,7 +62,7 @@ overlay_icon_state = "bg_demon_border" buttontooltipstyle = "cult" - button_icon = "icons/mob/actions/actions_cult.dmi" + button_icon = 'icons/mob/actions/actions_cult.dmi' button_icon_state = "cult_mark" /// Where is nar nar? Are we even looking? var/tracking = FALSE @@ -93,7 +96,6 @@ the_construct.seeking = TRUE to_chat(the_construct, span_cult_italic("You are now tracking your master.")) - /datum/action/innate/seek_prey name = "Seek the Harvest" desc = "None can hide from Nar'Sie, activate to track a survivor attempting to flee the red harvest!" @@ -126,3 +128,115 @@ desc = "Activate to track Nar'Sie!" button_icon_state = "sintouch" the_construct.seeking = TRUE + +/mob/living/basic/construct/harvester/heretic + name = "Rusted Harvester" + real_name = "Rusted Harvester" + desc = "A long, thin, decrepit construct originally built to herald Nar'Sie's rise, corrupted and rusted by the forces of the Mansus to spread its will instead." + icon_state = "harvester" + icon_living = "harvester" + construct_spells = list( + /datum/action/cooldown/spell/aoe/rust_conversion, + /datum/action/cooldown/spell/pointed/rust_construction, + ) + can_repair = FALSE + slowed_by_drag = FALSE + faction = list(FACTION_HERETIC) + maxHealth = 35 + health = 35 + melee_damage_lower = 20 + melee_damage_upper = 25 + // Dim green + lighting_cutoff_red = 10 + lighting_cutoff_green = 20 + lighting_cutoff_blue = 5 + playstyle_string = "You are a Rusted Harvester, built to serve the Sanguine Apostate, twisted to work the will of the Mansus. You are fragile and weak, but you rend cultists (only) apart on each attack. Follow your Master's orders!" + theme = THEME_HERETIC + +/mob/living/basic/construct/harvester/heretic/Initialize(mapload) + . = ..() + ADD_TRAIT(src, TRAIT_MANSUS_TOUCHED, REF(src)) + add_filter("rusted_harvester", 3, list("type" = "outline", "color" = COLOR_GREEN, "size" = 2, "alpha" = 40)) + + +/** + * Somewhat janky proc called when a heretic monster's master dies + * Used to kill any living Rusted Harvester + */ +/mob/living/proc/on_master_death() + return + +/mob/living/basic/construct/harvester/heretic/attack_animal(mob/living/simple_animal/user, list/modifiers) + // They're pretty fragile so this is probably necessary to prevent bullshit deaths. + if(user == src) + return + return ..() + +/mob/living/basic/construct/harvester/heretic/on_master_death() + to_chat(src, span_userdanger("Your link to the mansus suddenly snaps as your master perishes! Without its support, your body crumbles...")) + visible_message(span_alert("[src] suddenly crumbles to dust!")) + death() + +/mob/living/basic/construct/harvester/heretic/grant_abilities() + AddElement(/datum/element/wall_walker, or_trait = TRAIT_RUSTY) + AddElement(/datum/element/leeching_walk) + AddComponent(\ + /datum/component/amputating_limbs,\ + surgery_time = 1.5 SECONDS,\ + surgery_verb = "slicing",\ + minimum_stat = CONSCIOUS,\ + pre_hit_callback = CALLBACK(src, PROC_REF(is_cultist_handler)),\ + ) + AddComponent(/datum/component/damage_aura,\ + range = 3,\ + brute_damage = 0.5,\ + burn_damage = 0.5,\ + toxin_damage = 0.5,\ + stamina_damage = 4,\ + simple_damage = 1.5,\ + immune_factions = list(FACTION_HERETIC),\ + damage_message = span_boldwarning("Your body wilts and withers as it comes near [src]'s aura."),\ + message_probability = 7,\ + current_owner = src,\ + ) + var/datum/action/innate/seek_master/heretic/seek = new(src) + seek.Grant(src) + seek.Activate() + +// These aren't friends they're assholes +// Don't let them be near you! +/mob/living/basic/construct/harvester/heretic/Life(seconds_per_tick, times_fired) + . = ..() + if(!SPT_PROB(7, seconds_per_tick)) + return + + var/turf/adjacent = get_step(src, pick(GLOB.alldirs)) + // 90% chance to be directional, otherwise what we're on top of + var/turf/open/land = (isopenturf(adjacent) && prob(90)) ? adjacent : get_turf(src) + do_rust_heretic_act(land) + + if(prob(7)) + to_chat(src, span_notice("Eldritch energies emanate from your body.")) + +/mob/living/basic/construct/harvester/heretic/proc/is_cultist_handler(mob/victim) + return IS_CULTIST(victim) + +/datum/action/innate/seek_master/heretic + name = "Seek your Master" + desc = "Use your direct link to the Mansus to sense where your master is located via the arrow on the top-right of your HUD." + button_icon = 'icons/mob/actions/actions_cult.dmi' + background_icon_state = "bg_heretic" + overlay_icon_state = "bg_heretic_border" + tracking = TRUE + +/datum/action/innate/seek_master/heretic/New(Target) + . = ..() + the_construct = Target + the_construct.seeking = TRUE + var/datum/antagonist/heretic_monster/antag = IS_HERETIC_MONSTER(the_construct) + if(antag) + the_construct.master = antag.master + +// no real reason for most of this weird oldcode +/datum/action/innate/seek_master/Activate() + return diff --git a/code/modules/mob/living/basic/drone/_drone.dm b/code/modules/mob/living/basic/drone/_drone.dm index ae72054899b11..6501e35d51dc2 100644 --- a/code/modules/mob/living/basic/drone/_drone.dm +++ b/code/modules/mob/living/basic/drone/_drone.dm @@ -265,7 +265,7 @@ dust() /mob/living/basic/drone/get_butt_sprite() - return BUTT_SPRITE_DRONE + return icon('icons/mob/butts.dmi', BUTT_SPRITE_DRONE) /mob/living/basic/drone/examine(mob/user) . = list("This is [icon2html(src, user)] \a [src]!") diff --git a/code/modules/mob/living/basic/farm_animals/gorilla/gorilla.dm b/code/modules/mob/living/basic/farm_animals/gorilla/gorilla.dm index e9dc43837fff6..d1b1aebf9eb00 100644 --- a/code/modules/mob/living/basic/farm_animals/gorilla/gorilla.dm +++ b/code/modules/mob/living/basic/farm_animals/gorilla/gorilla.dm @@ -36,6 +36,7 @@ ai_controller = /datum/ai_controller/basic_controller/gorilla faction = list(FACTION_MONKEY, FACTION_JUNGLE) butcher_results = list(/obj/item/food/meat/slab/gorilla = 4, /obj/effect/gibspawner/generic/animal = 1) + max_grab = GRAB_KILL /// How likely our meaty fist is to stun someone var/paralyze_chance = 20 /// A counter for when we can scream again @@ -54,13 +55,13 @@ /mob/living/basic/gorilla/Initialize(mapload) . = ..() - add_traits(list(TRAIT_ADVANCEDTOOLUSER, TRAIT_CAN_STRIP), ROUNDSTART_TRAIT) + add_traits(list(TRAIT_ADVANCEDTOOLUSER, TRAIT_CAN_STRIP, TRAIT_CHUNKYFINGERS), ROUNDSTART_TRAIT) AddElement(/datum/element/wall_tearer, allow_reinforced = FALSE) AddElement(/datum/element/dextrous) AddElement(/datum/element/footstep, FOOTSTEP_MOB_BAREFOOT) AddElement(/datum/element/basic_eating, heal_amt = 10, food_types = gorilla_food) - AddElement( - /datum/element/amputating_limbs, \ + AddComponent( + /datum/component/amputating_limbs, \ surgery_time = 0 SECONDS, \ surgery_verb = "punches",\ ) @@ -68,6 +69,13 @@ AddComponent(/datum/component/basic_inhands, y_offset = -1) ai_controller?.set_blackboard_key(BB_BASIC_FOODS, typecacheof(gorilla_food)) +/mob/living/basic/gorilla/examine(mob/user) + . = ..() + if (!HAS_MIND_TRAIT(user, TRAIT_EXAMINE_FITNESS)) + return + . += span_notice("This animal appears to be in peak physical condition and yet it has probably never worked out a day in its life. \ + The untapped potential is almost frightening.") + /mob/living/basic/gorilla/update_overlays() . = ..() if (is_holding_items()) diff --git a/code/modules/mob/living/basic/farm_animals/sheep.dm b/code/modules/mob/living/basic/farm_animals/sheep.dm index 2fdaeda657d5c..5617da83a53a5 100644 --- a/code/modules/mob/living/basic/farm_animals/sheep.dm +++ b/code/modules/mob/living/basic/farm_animals/sheep.dm @@ -59,7 +59,7 @@ if(cult_converted) for(var/mob/living/cultist as anything in invokers) to_chat(cultist, span_cult_italic("[src] has already been sacrificed!")) - return STOP_SACRIFICE + return STOP_SACRIFICE|SILENCE_SACRIFICE_MESSAGE for(var/mob/living/cultist as anything in invokers) to_chat(cultist, span_cult_italic("This feels a bit too cliché, don't you think?")) diff --git a/code/modules/mob/living/basic/festivus_pole.dm b/code/modules/mob/living/basic/festivus_pole.dm index 838674c081124..1c1a88dd31fe5 100644 --- a/code/modules/mob/living/basic/festivus_pole.dm +++ b/code/modules/mob/living/basic/festivus_pole.dm @@ -68,8 +68,8 @@ return visible_message(span_warning("[src] crackles with static electricity!")) for(var/atom/affected in range(2, get_turf(src))) - if(istype(affected, /obj/item/stock_parts/cell)) - var/obj/item/stock_parts/cell/cell = affected + if(istype(affected, /obj/item/stock_parts/power_store/cell)) + var/obj/item/stock_parts/power_store/cell/cell = affected cell.give(FESTIVUS_RECHARGE_VALUE) cell.update_appearance() if(istype(affected, /mob/living/silicon/robot)) @@ -112,7 +112,7 @@ var/obj/machinery/power/apc/apc_target = dinner if(!apc_target.cell) return FALSE - var/obj/item/stock_parts/cell/apc_cell = apc_target.cell + var/obj/item/stock_parts/power_store/cell/apc_cell = apc_target.cell if(apc_cell.charge == apc_cell.maxcharge) //if its full charge we no longer feed it return FALSE diff --git a/code/modules/mob/living/basic/guardian/guardian_types/support.dm b/code/modules/mob/living/basic/guardian/guardian_types/support.dm index 3b5574db7f37a..8ab24b7e9b7d1 100644 --- a/code/modules/mob/living/basic/guardian/guardian_types/support.dm +++ b/code/modules/mob/living/basic/guardian/guardian_types/support.dm @@ -103,10 +103,12 @@ /// Try and teleport something to our beacon /datum/action/cooldown/mob_cooldown/guardian_bluespace_beacon/proc/try_teleporting(mob/living/source, atom/target) SIGNAL_HANDLER + if (!can_teleport(source, target)) return + INVOKE_ASYNC(src, PROC_REF(perform_teleport), source, target) - return COMPONENT_CANCEL_ATTACK_CHAIN + return COMSIG_MOB_CANCEL_CLICKON /// Validate whether we can teleport this object /datum/action/cooldown/mob_cooldown/guardian_bluespace_beacon/proc/can_teleport(mob/living/source, atom/movable/target) @@ -118,7 +120,7 @@ if (!guardian_mob.is_deployed()) source.balloon_alert(source, "manifest yourself!") return FALSE - if (!source.Adjacent(target)) + if (!source.can_perform_action(target)) target.balloon_alert(source, "too far!") return FALSE if (target.anchored) diff --git a/code/modules/mob/living/basic/health_adjustment.dm b/code/modules/mob/living/basic/health_adjustment.dm index 6e5f4cc95af6c..bae9d7b9e57b5 100644 --- a/code/modules/mob/living/basic/health_adjustment.dm +++ b/code/modules/mob/living/basic/health_adjustment.dm @@ -66,3 +66,6 @@ if(updating_stamina) update_stamina() . -= staminaloss + +/mob/living/basic/received_stamina_damage(current_level, amount_actual, amount) + return diff --git a/code/modules/mob/living/basic/heretic/flesh_worm.dm b/code/modules/mob/living/basic/heretic/flesh_worm.dm index 3c60a9b653c32..92b910c717fae 100644 --- a/code/modules/mob/living/basic/heretic/flesh_worm.dm +++ b/code/modules/mob/living/basic/heretic/flesh_worm.dm @@ -35,8 +35,8 @@ /mob/living/basic/heretic_summon/armsy/Initialize(mapload, spawn_bodyparts = TRUE, worm_length = 6) . = ..() AddElement(/datum/element/wall_smasher, ENVIRONMENT_SMASH_RWALLS) - AddElement(\ - /datum/element/amputating_limbs,\ + AddComponent(\ + /datum/component/amputating_limbs,\ surgery_time = 0 SECONDS,\ surgery_verb = "tears",\ minimum_stat = CONSCIOUS,\ diff --git a/code/modules/mob/living/basic/heretic/rust_walker.dm b/code/modules/mob/living/basic/heretic/rust_walker.dm index ff56c311f7346..230747efa5a3b 100644 --- a/code/modules/mob/living/basic/heretic/rust_walker.dm +++ b/code/modules/mob/living/basic/heretic/rust_walker.dm @@ -6,8 +6,8 @@ icon_state = "rust_walker_s" base_icon_state = "rust_walker" icon_living = "rust_walker_s" - maxHealth = 75 - health = 75 + maxHealth = 100 + health = 100 melee_damage_lower = 15 melee_damage_upper = 20 sight = SEE_TURFS @@ -19,7 +19,7 @@ AddElement(/datum/element/footstep, FOOTSTEP_MOB_RUST) var/static/list/grantable_spells = list( - /datum/action/cooldown/spell/aoe/rust_conversion/small = BB_GENERIC_ACTION, + /datum/action/cooldown/spell/aoe/rust_conversion = BB_GENERIC_ACTION, /datum/action/cooldown/spell/basic_projectile/rust_wave/short = BB_TARGETED_ACTION, ) grant_actions_by_list(grantable_spells) diff --git a/code/modules/mob/living/basic/icemoon/wolf/wolf.dm b/code/modules/mob/living/basic/icemoon/wolf/wolf.dm index e452c15647448..b7a947f00e309 100644 --- a/code/modules/mob/living/basic/icemoon/wolf/wolf.dm +++ b/code/modules/mob/living/basic/icemoon/wolf/wolf.dm @@ -55,6 +55,7 @@ /mob/living/basic/mining/wolf/Initialize(mapload) . = ..() + ADD_TRAIT(src, TRAIT_WOUND_LICKER, INNATE_TRAIT) AddElement(/datum/element/footstep, FOOTSTEP_MOB_CLAW) AddElement(/datum/element/ai_flee_while_injured) AddElement(/datum/element/ai_retaliate) diff --git a/code/modules/mob/living/basic/icemoon/wolf/wolf_ai.dm b/code/modules/mob/living/basic/icemoon/wolf/wolf_ai.dm index f0809d2ec86da..423a33bb4767a 100644 --- a/code/modules/mob/living/basic/icemoon/wolf/wolf_ai.dm +++ b/code/modules/mob/living/basic/icemoon/wolf/wolf_ai.dm @@ -7,7 +7,12 @@ BB_BASIC_MOB_FLEE_DISTANCE = 30, BB_VISION_RANGE = 9, BB_TARGET_MINIMUM_STAT = HARD_CRIT, - BB_REINFORCEMENTS_EMOTE = "unleashes a chilling howl, calling for aid!" + BB_REINFORCEMENTS_EMOTE = "unleashes a chilling howl, calling for aid!", + BB_OWNER_SELF_HARM_RESPONSES = list( + "*me howls in dissaproval.", + "*me whines sadly.", + "*me attempts to take your hand in its mouth." + ) ) ai_movement = /datum/ai_movement/basic_avoidance diff --git a/code/modules/mob/living/basic/jungle/mega_arachnid/mega_arachnid_abilities.dm b/code/modules/mob/living/basic/jungle/mega_arachnid/mega_arachnid_abilities.dm index d82812b62a392..2d2b69d119abf 100644 --- a/code/modules/mob/living/basic/jungle/mega_arachnid/mega_arachnid_abilities.dm +++ b/code/modules/mob/living/basic/jungle/mega_arachnid/mega_arachnid_abilities.dm @@ -2,7 +2,7 @@ /datum/action/cooldown/spell/pointed/projectile/flesh_restraints name = "fleshy restraints" desc = "Launch at your prey to immobilize them." - button_icon = 'icons/obj/restraints.dmi' + button_icon = 'icons/obj/weapons/restraints.dmi' button_icon_state = "flesh_snare" cooldown_time = 6 SECONDS diff --git a/code/modules/mob/living/basic/jungle/seedling/seedling.dm b/code/modules/mob/living/basic/jungle/seedling/seedling.dm index 5a958d3ca7c18..7a853b8a9d086 100644 --- a/code/modules/mob/living/basic/jungle/seedling/seedling.dm +++ b/code/modules/mob/living/basic/jungle/seedling/seedling.dm @@ -30,6 +30,7 @@ lighting_cutoff_green = 20 lighting_cutoff_blue = 25 mob_size = MOB_SIZE_LARGE + faction = list(FACTION_PLANTS) attack_sound = 'sound/weapons/bladeslice.ogg' attack_vis_effect = ATTACK_EFFECT_SLASH ai_controller = /datum/ai_controller/basic_controller/seedling @@ -206,7 +207,7 @@ /mob/living/basic/seedling/meanie maxHealth = 400 health = 400 - faction = list(FACTION_JUNGLE) + faction = list(FACTION_JUNGLE, FACTION_PLANTS) ai_controller = /datum/ai_controller/basic_controller/seedling/meanie seedling_commands = list( /datum/pet_command/idle, diff --git a/code/modules/mob/living/basic/jungle/venus_human_trap.dm b/code/modules/mob/living/basic/jungle/venus_human_trap.dm index 6c0a6e2f9db8c..ec375283fcea0 100644 --- a/code/modules/mob/living/basic/jungle/venus_human_trap.dm +++ b/code/modules/mob/living/basic/jungle/venus_human_trap.dm @@ -216,15 +216,19 @@ QDEL_LIST(vines) return ..() -/datum/action/cooldown/mob_cooldown/projectile_attack/vine_tangle/Activate(atom/target_atom) - if(isturf(target_atom) || istype(target_atom, /obj/structure/spacevine)) +/datum/action/cooldown/mob_cooldown/projectile_attack/vine_tangle/Activate(atom/movable/target_atom) + if(!ismovable(target_atom) || istype(target_atom, /obj/structure/spacevine)) + return + if(target_atom.anchored) + owner.balloon_alert(owner, "can't pull!") return if(get_dist(owner, target_atom) > vine_grab_distance) owner.balloon_alert(owner, "too far!") return - for(var/turf/blockage in get_line(owner, target_atom)) + var/list/target_turfs = get_line(owner, target_atom) - list(get_turf(owner), get_turf(target_atom)) + for(var/turf/blockage in target_turfs) if(blockage.is_blocked_turf(exclude_mobs = TRUE)) - owner.balloon_alert(owner, "something's in the way!") + owner.balloon_alert(owner, "path blocked!") return var/datum/beam/new_vine = owner.Beam(target_atom, icon_state = "vine", time = vine_duration * (ismob(target_atom) ? 1 : 2), beam_type = /obj/effect/ebeam/vine, emissive = FALSE) diff --git a/code/modules/mob/living/basic/lavaland/brimdemon/brimbeam.dm b/code/modules/mob/living/basic/lavaland/brimdemon/brimbeam.dm index 21169ffd36889..61f31f7044dbc 100644 --- a/code/modules/mob/living/basic/lavaland/brimdemon/brimbeam.dm +++ b/code/modules/mob/living/basic/lavaland/brimdemon/brimbeam.dm @@ -44,7 +44,7 @@ StartCooldown() return TRUE - do_after(owner, delay = beam_duration, target = owner) + do_after(owner, delay = beam_duration, target = owner, hidden = TRUE) extinguish_laser() StartCooldown() return TRUE diff --git a/code/modules/mob/living/basic/lavaland/gutlunchers/gutluncher_foodtrough.dm b/code/modules/mob/living/basic/lavaland/gutlunchers/gutluncher_foodtrough.dm index 734d431912f47..0180c4f179775 100644 --- a/code/modules/mob/living/basic/lavaland/gutlunchers/gutluncher_foodtrough.dm +++ b/code/modules/mob/living/basic/lavaland/gutlunchers/gutluncher_foodtrough.dm @@ -1,31 +1,31 @@ -/obj/structure/ore_container/gutlunch_trough - name = "gutlunch trough" - desc = "The gutlunches will eat out of it!" - icon = 'icons/obj/structures.dmi' - icon_state = "gutlunch_trough" +/obj/structure/ore_container/food_trough density = TRUE anchored = TRUE ///list of materials in the trough var/list/list_of_materials = list() + ///x offsets for materials to be placed + var/list/x_offsets = list() + ///y offsets for materials to be placed + var/list/y_offsets = list() -/obj/structure/ore_container/gutlunch_trough/Entered(atom/movable/mover) +/obj/structure/ore_container/food_trough/Entered(atom/movable/mover) if(!istype(mover, /obj/item/stack/ore)) return ..() if(list_of_materials[mover.type]) return ..() - list_of_materials[mover.type] = list("pixel_x" = rand(-5, 8), "pixel_y" = rand(-2, -7)) + list_of_materials[mover.type] = list("pixel_x" = rand(x_offsets[1], x_offsets[2]), "pixel_y" = rand(y_offsets[1], y_offsets[2])) return ..() -/obj/structure/ore_container/gutlunch_trough/Exited(atom/movable/mover) +/obj/structure/ore_container/food_trough/Exited(atom/movable/mover) if(!istype(mover, /obj/item/stack/ore) || !isnull(locate(mover.type) in contents)) return ..() list_of_materials -= mover.type return ..() -/obj/structure/ore_container/gutlunch_trough/atom_deconstruct(disassembled = TRUE) +/obj/structure/ore_container/food_trough/atom_deconstruct(disassembled = TRUE) new /obj/item/stack/sheet/mineral/wood(drop_location(), 5) -/obj/structure/ore_container/gutlunch_trough/update_overlays() +/obj/structure/ore_container/food_trough/update_overlays() . = ..() for(var/ore_entry in list_of_materials) var/obj/item/ore_item = ore_entry @@ -35,3 +35,11 @@ ore_icon.pixel_x = pixel_positions["pixel_x"] ore_icon.pixel_y = pixel_positions["pixel_y"] . += ore_icon + +/obj/structure/ore_container/food_trough/gutlunch_trough + name = "gutlunch trough" + desc = "The gutlunches will eat out of it!" + icon = 'icons/obj/structures.dmi' + icon_state = "gutlunch_trough" + x_offsets = list(-5, 8) + y_offsets = list(-2, -7) diff --git a/code/modules/mob/living/basic/lavaland/gutlunchers/gutlunchers.dm b/code/modules/mob/living/basic/lavaland/gutlunchers/gutlunchers.dm index 6d8f91ff8ce5c..f9e1d458ef2ed 100644 --- a/code/modules/mob/living/basic/lavaland/gutlunchers/gutlunchers.dm +++ b/code/modules/mob/living/basic/lavaland/gutlunchers/gutlunchers.dm @@ -55,7 +55,7 @@ /mob/living/basic/mining/gutlunch/proc/pre_attack(mob/living/puncher, atom/target) SIGNAL_HANDLER - if(!istype(target, /obj/structure/ore_container/gutlunch_trough)) + if(!istype(target, /obj/structure/ore_container/food_trough/gutlunch_trough)) return var/obj/ore_food = locate(/obj/item/stack/ore) in target diff --git a/code/modules/mob/living/basic/lavaland/gutlunchers/gutlunchers_ai.dm b/code/modules/mob/living/basic/lavaland/gutlunchers/gutlunchers_ai.dm index 352f1b46b17f0..c7f7e86c86680 100644 --- a/code/modules/mob/living/basic/lavaland/gutlunchers/gutlunchers_ai.dm +++ b/code/modules/mob/living/basic/lavaland/gutlunchers/gutlunchers_ai.dm @@ -75,7 +75,7 @@ target_key = BB_TROUGH_TARGET hunting_behavior = /datum/ai_behavior/hunt_target/unarmed_attack_target/food_trough finding_behavior = /datum/ai_behavior/find_hunt_target/food_trough - hunt_targets = list(/obj/structure/ore_container/gutlunch_trough) + hunt_targets = list(/obj/structure/ore_container/food_trough/gutlunch_trough) hunt_chance = 75 hunt_range = 9 diff --git a/code/modules/mob/living/basic/lavaland/legion/legion.dm b/code/modules/mob/living/basic/lavaland/legion/legion.dm index 3a18a0703e649..1abd916461bb8 100644 --- a/code/modules/mob/living/basic/lavaland/legion/legion.dm +++ b/code/modules/mob/living/basic/lavaland/legion/legion.dm @@ -35,9 +35,14 @@ /mob/living/basic/mining/legion/Initialize(mapload) . = ..() - AddElement(/datum/element/death_drops, get_loot_list()) AddElement(/datum/element/content_barfer) + var/list/drops = get_loot_list() + if (length(drops)) + AddElement(/datum/element/death_drops, string_list(drops)) + assign_abilities() +/// Give the Legion its spells +/mob/living/basic/mining/legion/proc/assign_abilities() var/datum/action/cooldown/mob_cooldown/skull_launcher/skull_launcher = new(src) skull_launcher.Grant(src) skull_launcher.spawn_type = brood_type @@ -64,10 +69,11 @@ return ..() /// Put a corpse in this guy -/mob/living/basic/mining/legion/proc/consume(mob/living/consumed) +/mob/living/basic/mining/legion/proc/consume(mob/living/carbon/human/consumed) new /obj/effect/gibspawner/generic(consumed.loc) gender = consumed.gender - name = consumed.real_name + if (!ismonkey(consumed) || consumed == GLOB.the_one_and_only_punpun) + name = consumed.real_name consumed.investigate_log("has been killed by hivelord infestation.", INVESTIGATE_DEATHS) consumed.death() consumed.extinguish_mob() diff --git a/code/modules/mob/living/basic/lavaland/legion/legion_brood.dm b/code/modules/mob/living/basic/lavaland/legion/legion_brood.dm index 96c7319380a2e..e578067a44576 100644 --- a/code/modules/mob/living/basic/lavaland/legion/legion_brood.dm +++ b/code/modules/mob/living/basic/lavaland/legion/legion_brood.dm @@ -38,6 +38,7 @@ AddElement(/datum/element/simple_flying) AddComponent(/datum/component/swarming) AddComponent(/datum/component/clickbox, icon_state = "sphere", max_scale = 2) + AddComponent(/datum/component/basic_mob_attack_telegraph) addtimer(CALLBACK(src, PROC_REF(death)), 10 SECONDS) /mob/living/basic/legion_brood/death(gibbed) @@ -63,7 +64,7 @@ return ..() /// Turn the targeted mob into one of us -/mob/living/basic/legion_brood/proc/infest(mob/living/target) +/mob/living/basic/legion_brood/proc/infest(mob/living/carbon/human/target) visible_message(span_warning("[name] burrows into the flesh of [target]!")) var/spawn_type = get_legion_type(target) var/mob/living/basic/mining/legion/new_legion = new spawn_type(loc) @@ -72,7 +73,9 @@ qdel(src) /// Returns the kind of legion we make out of the target -/mob/living/basic/legion_brood/proc/get_legion_type(mob/living/target) +/mob/living/basic/legion_brood/proc/get_legion_type(mob/living/carbon/human/target) + if (ismonkey(target)) + return /mob/living/basic/mining/legion/monkey if (HAS_TRAIT(target, TRAIT_DWARF)) return /mob/living/basic/mining/legion/dwarf return /mob/living/basic/mining/legion @@ -105,4 +108,6 @@ ADD_TRAIT(src, TRAIT_SNOWSTORM_IMMUNE, INNATE_TRAIT) /mob/living/basic/legion_brood/snow/get_legion_type(mob/living/target) + if (ismonkey(target)) + return /mob/living/basic/mining/legion/monkey/snow return /mob/living/basic/mining/legion/snow diff --git a/code/modules/mob/living/basic/lavaland/legion/legion_monkey.dm b/code/modules/mob/living/basic/lavaland/legion/legion_monkey.dm new file mode 100644 index 0000000000000..5345adc88da3c --- /dev/null +++ b/code/modules/mob/living/basic/lavaland/legion/legion_monkey.dm @@ -0,0 +1,63 @@ +/// Weak mob spawned if a legion infests a monkey +/mob/living/basic/mining/legion/monkey + name = "rabble" + desc = "You can see what was once a monkey under the shifting mass of corruption. It doesn't have enough biomass to reproduce." + icon_state = "legion_monkey" + pass_flags = PASSTABLE + speed = 5 + maxHealth = 40 + health = 40 + melee_damage_lower = 10 + melee_damage_upper = 10 + attack_verb_continuous = "mauls" + attack_verb_simple = "maul" + attack_vis_effect = ATTACK_EFFECT_BITE + attack_sound = 'sound/weapons/bite.ogg' + speak_emote = list("chimpers") + corpse_type = /obj/effect/mob_spawn/corpse/human/monkey + ai_controller = /datum/ai_controller/basic_controller/legion_monkey + +/mob/living/basic/mining/legion/monkey/Initialize(mapload) + . = ..() + ADD_TRAIT(src, TRAIT_VENTCRAWLER_ALWAYS, INNATE_TRAIT) + AddComponent(/datum/component/basic_mob_attack_telegraph) + AddComponent(/datum/component/regenerator, outline_colour = COLOR_SOFT_RED) + +/mob/living/basic/mining/legion/monkey/assign_abilities() + return + +/mob/living/basic/mining/legion/monkey/get_loot_list() + return + +/// Icebox variant +/mob/living/basic/mining/legion/monkey/snow + name = "snow rabble" + desc = "You can see what was once a monkey under the densely packed snow. It doesn't look friendly." + icon = 'icons/mob/simple/icemoon/icemoon_monsters.dmi' + icon_state = "snow_monkey" + +/mob/living/basic/mining/legion/monkey/snow/Initialize(mapload) + . = ..() + AddComponent(/datum/component/appearance_on_aggro, aggro_state = "snow_monkey_alive") // Surprise! I was real! + +/// Opportunistically hops in and out of vents, if it can find one and is not biting someone. +/datum/ai_controller/basic_controller/legion_monkey + blackboard = list( + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, + BB_TARGET_MINIMUM_STAT = HARD_CRIT, + BB_VENTCRAWL_COOLDOWN = 20 SECONDS, + BB_TIME_TO_GIVE_UP_ON_VENT_PATHING = 30 SECONDS, + ) + + ai_traits = STOP_MOVING_WHEN_PULLED + ai_movement = /datum/ai_movement/basic_avoidance + idle_behavior = /datum/idle_behavior/idle_random_walk/less_walking + + // We understand that vents are nice little hidey holes through epigenetic inheritance, so we'll use them. + planning_subtrees = list( + /datum/ai_planning_subtree/random_speech/legion, + /datum/ai_planning_subtree/simple_find_target, + /datum/ai_planning_subtree/attack_obstacle_in_path, + /datum/ai_planning_subtree/basic_melee_attack_subtree, + /datum/ai_planning_subtree/opportunistic_ventcrawler, + ) diff --git a/code/modules/mob/living/basic/lavaland/legion/legion_tumour.dm b/code/modules/mob/living/basic/lavaland/legion/legion_tumour.dm index 55c1e6426b360..3f678da6910bc 100644 --- a/code/modules/mob/living/basic/lavaland/legion/legion_tumour.dm +++ b/code/modules/mob/living/basic/lavaland/legion/legion_tumour.dm @@ -7,6 +7,7 @@ icon_state = "legion_remains" zone = BODY_ZONE_CHEST slot = ORGAN_SLOT_PARASITE_EGG + organ_flags = ORGAN_ORGANIC | ORGAN_EDIBLE | ORGAN_VIRGIN | ORGAN_PROMINENT decay_factor = STANDARD_ORGAN_DECAY * 3 // About 5 minutes outside of a host /// What stage of growth the corruption has reached. var/stage = 0 @@ -55,6 +56,10 @@ stage = 0 elapsed_time = 0 +/obj/item/organ/internal/legion_tumour/on_mob_insert(mob/living/carbon/organ_owner, special, movement_flags) + . = ..() + owner.log_message("has received [src] which will eventually turn them into a Legion.", LOG_VICTIM) + /obj/item/organ/internal/legion_tumour/attack(mob/living/target, mob/living/user, params) if (try_apply(target, user)) qdel(src) @@ -79,6 +84,7 @@ if (!ishuman(target)) return FALSE + log_combat(user, target, "used a Legion Tumour on", src, "as they are in crit, this will turn them into a Legion.") target.visible_message(span_boldwarning("[user] splatters [target] with [src]... and it springs into horrible life!")) var/mob/living/basic/legion_brood/skull = new(target.loc) skull.melee_attack(target) @@ -143,6 +149,7 @@ /obj/item/organ/internal/legion_tumour/proc/infest() if (QDELETED(src) || QDELETED(owner)) return + owner.log_message("has been turned into a Legion by their tumour.", LOG_VICTIM) owner.visible_message(span_boldwarning("Black tendrils burst from [owner]'s flesh, covering them in amorphous flesh!")) var/mob/living/basic/mining/legion/new_legion = new spawn_type(owner.loc) new_legion.consume(owner) diff --git a/code/modules/mob/living/basic/lavaland/legion/spawn_legions.dm b/code/modules/mob/living/basic/lavaland/legion/spawn_legions.dm index bd9b2c2aff99f..81691ff9135f6 100644 --- a/code/modules/mob/living/basic/lavaland/legion/spawn_legions.dm +++ b/code/modules/mob/living/basic/lavaland/legion/spawn_legions.dm @@ -7,7 +7,7 @@ background_icon_state = "bg_demon" overlay_icon_state = "bg_demon_border" click_to_activate = TRUE - cooldown_time = 2 SECONDS + cooldown_time = 4 SECONDS melee_cooldown_time = 0 shared_cooldown = NONE /// If a mob is not clicked directly, inherit targeting data from this blackboard key and setting it upon this target key @@ -17,6 +17,15 @@ /// How far can we fire? var/max_range = 7 +/datum/action/cooldown/mob_cooldown/skull_launcher/IsAvailable(feedback) + . = ..() + if (!.) + return + if (!isturf(owner.loc)) + owner.balloon_alert(owner, "no room!") + return FALSE + return TRUE + /datum/action/cooldown/mob_cooldown/skull_launcher/Activate(atom/target) var/turf/target_turf = get_turf(target) diff --git a/code/modules/mob/living/basic/lavaland/lobstrosity/lobstrosity.dm b/code/modules/mob/living/basic/lavaland/lobstrosity/lobstrosity.dm index 88127b56cb602..ad10e30acecd7 100644 --- a/code/modules/mob/living/basic/lavaland/lobstrosity/lobstrosity.dm +++ b/code/modules/mob/living/basic/lavaland/lobstrosity/lobstrosity.dm @@ -20,7 +20,7 @@ attack_vis_effect = ATTACK_EFFECT_BITE // Closer than a scratch to a crustacean pinching effect melee_attack_cooldown = 1 SECONDS butcher_results = list( - /obj/item/food/meat/crab = 2, + /obj/item/food/meat/slab/rawcrab = 2, /obj/item/stack/sheet/bone = 2, /obj/item/organ/internal/monster_core/rush_gland = 1, ) @@ -29,15 +29,22 @@ /// Charging ability var/datum/action/cooldown/mob_cooldown/charge/basic_charge/lobster/charge /// Things we will eat if we see them (arms, chiefly) - var/static/list/target_foods = list(/obj/item/bodypart/arm) + var/static/list/target_foods = list(/obj/item/bodypart/arm, /obj/item/fish/lavaloop) /mob/living/basic/mining/lobstrosity/Initialize(mapload) . = ..() + var/static/list/food_types = list(/obj/item/fish/lavaloop) + ai_controller.set_blackboard_key(BB_BASIC_FOODS, typecacheof(food_types)) + var/static/list/fishing_preset = list( + /turf/open/lava = /datum/fish_source/lavaland, + /turf/open/lava/plasma = /datum/fish_source/lavaland/icemoon, + ) + AddComponent(/datum/component/profound_fisher, npc_fishing_preset = fishing_preset) AddElement(/datum/element/mob_grabber) AddElement(/datum/element/footstep, FOOTSTEP_MOB_CLAW) AddElement(/datum/element/basic_eating, food_types = target_foods) - AddElement(\ - /datum/element/amputating_limbs,\ + AddComponent(\ + /datum/component/amputating_limbs,\ surgery_verb = "begins snipping",\ target_zones = GLOB.arm_zones,\ ) diff --git a/code/modules/mob/living/basic/lavaland/lobstrosity/lobstrosity_ai.dm b/code/modules/mob/living/basic/lavaland/lobstrosity/lobstrosity_ai.dm index c8e294f3e0644..fb0ba437bf48c 100644 --- a/code/modules/mob/living/basic/lavaland/lobstrosity/lobstrosity_ai.dm +++ b/code/modules/mob/living/basic/lavaland/lobstrosity/lobstrosity_ai.dm @@ -1,10 +1,11 @@ /datum/ai_controller/basic_controller/lobstrosity blackboard = list( - BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic/allow_items, BB_TARGET_MINIMUM_STAT = HARD_CRIT, BB_LOBSTROSITY_EXPLOIT_TRAITS = list(TRAIT_INCAPACITATED, TRAIT_FLOORED, TRAIT_IMMOBILIZED, TRAIT_KNOCKEDOUT), BB_LOBSTROSITY_FINGER_LUST = 0 ) + ai_traits = PAUSE_DURING_DO_AFTER ai_movement = /datum/ai_movement/basic_avoidance idle_behavior = /datum/idle_behavior/idle_random_walk @@ -16,13 +17,22 @@ /datum/ai_planning_subtree/flee_target/lobster, /datum/ai_planning_subtree/attack_obstacle_in_path, /datum/ai_planning_subtree/basic_melee_attack_subtree/lobster, + /datum/ai_planning_subtree/find_food, + /datum/ai_planning_subtree/find_and_hunt_target/lobster_fishing, /datum/ai_planning_subtree/find_fingers, ) +/datum/ai_planning_subtree/find_and_hunt_target/lobster_fishing + target_key = BB_FISHING_TARGET + hunt_targets = list(/turf/open/lava) + hunting_behavior = /datum/ai_behavior/hunt_target/unarmed_attack_target/reset_target + /datum/ai_planning_subtree/basic_melee_attack_subtree/lobster melee_attack_behavior = /datum/ai_behavior/basic_melee_attack/lobster /datum/ai_planning_subtree/basic_melee_attack_subtree/lobster/SelectBehaviors(datum/ai_controller/controller, seconds_per_tick) + if(!isliving(controller.blackboard[BB_BASIC_MOB_CURRENT_TARGET])) + return ..() if (!controller.blackboard[BB_BASIC_MOB_STOP_FLEEING]) return if (!isnull(controller.blackboard[BB_LOBSTROSITY_TARGET_LIMB])) @@ -36,7 +46,7 @@ /datum/ai_behavior/basic_melee_attack/lobster/perform(seconds_per_tick, datum/ai_controller/controller, target_key, targeting_strategy_key, hiding_location_key) var/mob/living/target = controller.blackboard[target_key] - if (isnull(target)) + if (isnull(target) || !istype(target)) return ..() var/is_vulnerable = FALSE for (var/trait in controller.blackboard[BB_LOBSTROSITY_EXPLOIT_TRAITS]) diff --git a/code/modules/mob/living/basic/lavaland/mining.dm b/code/modules/mob/living/basic/lavaland/mining.dm index 3bcdd1ceaa64b..38591dfb39c06 100644 --- a/code/modules/mob/living/basic/lavaland/mining.dm +++ b/code/modules/mob/living/basic/lavaland/mining.dm @@ -5,7 +5,7 @@ status_flags = NONE //don't inherit standard basicmob flags mob_size = MOB_SIZE_LARGE mob_biotypes = MOB_ORGANIC|MOB_BEAST - faction = list(FACTION_MINING) + faction = list(FACTION_MINING, FACTION_ASHWALKER) unsuitable_atmos_damage = 0 minimum_survivable_temperature = 0 maximum_survivable_temperature = INFINITY @@ -42,3 +42,11 @@ drop_mod = crusher_drop_chance,\ drop_immediately = basic_mob_flags & DEL_ON_DEATH,\ ) + RegisterSignal(src, COMSIG_ATOM_WAS_ATTACKED, PROC_REF(check_ashwalker_peace_violation)) + +/mob/living/basic/mining/proc/check_ashwalker_peace_violation(datum/source, mob/living/carbon/human/possible_ashwalker) + SIGNAL_HANDLER + + if(!isashwalker(possible_ashwalker) || !(FACTION_ASHWALKER in faction)) + return + faction.Remove(FACTION_ASHWALKER) diff --git a/code/modules/mob/living/basic/lavaland/node_drone/node_drone.dm b/code/modules/mob/living/basic/lavaland/node_drone/node_drone.dm index d85ad69682c7d..b149c6d09728b 100644 --- a/code/modules/mob/living/basic/lavaland/node_drone/node_drone.dm +++ b/code/modules/mob/living/basic/lavaland/node_drone/node_drone.dm @@ -17,8 +17,8 @@ icon_living = "mining_node_active" icon_dead = "mining_node_active" - maxHealth = 500 - health = 500 + maxHealth = 300 // We adjust the max health based on the vent size in the arrive() proc. + health = 300 density = TRUE pass_flags = PASSTABLE|PASSGRILLE|PASSMOB mob_size = MOB_SIZE_LARGE @@ -26,7 +26,9 @@ faction = list(FACTION_STATION, FACTION_NEUTRAL) light_range = 4 basic_mob_flags = DEL_ON_DEATH - + move_force = MOVE_FORCE_VERY_STRONG + move_resist = MOVE_FORCE_VERY_STRONG + pull_force = MOVE_FORCE_VERY_STRONG speak_emote = list("chirps") response_help_continuous = "pets" response_help_simple = "pet" @@ -74,6 +76,8 @@ /mob/living/basic/node_drone/proc/arrive(obj/structure/ore_vent/parent_vent) attached_vent = parent_vent + maxHealth = 300 + ((attached_vent.boulder_size/BOULDER_SIZE_SMALL) * 100) + health = maxHealth flying_state = FLY_IN_STATE update_appearance(UPDATE_ICON_STATE) pixel_z = 400 @@ -83,14 +87,17 @@ /** * Called when wave defense is completed. Visually flicks the escape sprite and then deletes the mob. */ -/mob/living/basic/node_drone/proc/escape() +/mob/living/basic/node_drone/proc/escape(success) var/funny_ending = FALSE flying_state = FLY_OUT_STATE update_appearance(UPDATE_ICON_STATE) if(prob(1)) say("I have to go now, my planet needs me.") funny_ending = TRUE - visible_message(span_notice("The drone flies away to safety as the vent is secured.")) + if(success) + visible_message(span_notice("The drone flies away to safety as the vent is secured.")) + else + visible_message(span_danger("The drone flies away after failing to open the vent!")) animate(src, pixel_z = 400, time = 2 SECONDS, easing = QUAD_EASING|EASE_IN, flags = ANIMATION_PARALLEL) sleep(2 SECONDS) if(funny_ending) @@ -99,14 +106,15 @@ qdel(src) -/mob/living/basic/node_drone/proc/pre_escape() +/mob/living/basic/node_drone/proc/pre_escape(success = TRUE) + if(buckled) + buckled.unbuckle_mob(src) if(attached_vent) - attached_vent.unbuckle_mob(src) attached_vent = null if(!escaping) escaping = TRUE flick("mining_node_escape", src) - addtimer(CALLBACK(src, PROC_REF(escape)), 1.9 SECONDS) + addtimer(CALLBACK(src, PROC_REF(escape), success), 1.9 SECONDS) return /// The node drone AI controller diff --git a/code/modules/mob/living/basic/lavaland/raptor/_raptor.dm b/code/modules/mob/living/basic/lavaland/raptor/_raptor.dm new file mode 100644 index 0000000000000..784f5dd369907 --- /dev/null +++ b/code/modules/mob/living/basic/lavaland/raptor/_raptor.dm @@ -0,0 +1,316 @@ +GLOBAL_LIST_INIT(raptor_growth_paths, list( + /mob/living/basic/raptor/baby_raptor/red = list(RAPTOR_PURPLE, RAPTOR_WHITE), + /mob/living/basic/raptor/baby_raptor/white = list(RAPTOR_GREEN, RAPTOR_PURPLE), + /mob/living/basic/raptor/baby_raptor/purple = list(RAPTOR_GREEN, RAPTOR_WHITE), + /mob/living/basic/raptor/baby_raptor/yellow = list(RAPTOR_GREEN, RAPTOR_RED), + /mob/living/basic/raptor/baby_raptor/green = list(RAPTOR_RED, RAPTOR_YELLOW), + /mob/living/basic/raptor/baby_raptor/blue = list(RAPTOR_RED, RAPTOR_PURPLE) +)) + +GLOBAL_LIST_INIT(raptor_inherit_traits, list( + BB_BASIC_DEPRESSED = "Depressed", + BB_RAPTOR_MOTHERLY = "Motherly", + BB_RAPTOR_PLAYFUL = "Playful", + BB_RAPTOR_COWARD = "Coward", + BB_RAPTOR_TROUBLE_MAKER = "Trouble Maker", +)) + +GLOBAL_LIST_EMPTY(raptor_population) + +#define HAPPINESS_BOOST_DAMPENER 0.3 + +/mob/living/basic/raptor + name = "raptor" + desc = "A trusty, powerful steed. Taming it might prove difficult..." + icon = 'icons/mob/simple/lavaland/raptor_big.dmi' + speed = 2 + mob_biotypes = MOB_ORGANIC|MOB_BEAST + maxHealth = 270 + health = 270 + melee_damage_lower = 10 + melee_damage_upper = 15 + combat_mode = TRUE + mob_size = MOB_SIZE_LARGE + unsuitable_atmos_damage = 0 + minimum_survivable_temperature = BODYTEMP_COLD_ICEBOX_SAFE + maximum_survivable_temperature = INFINITY + attack_verb_continuous = "pecks" + attack_verb_simple = "chomps" + attack_sound = 'sound/weapons/punch1.ogg' + faction = list(FACTION_RAPTOR, FACTION_NEUTRAL) + speak_emote = list("screeches") + ai_controller = /datum/ai_controller/basic_controller/raptor + ///can this mob breed + var/can_breed = TRUE + ///should we change offsets on direction change? + var/change_offsets = TRUE + ///can we ride this mob + var/ridable_component = /datum/component/riding/creature/raptor + //pet commands when we tame the raptor + var/static/list/pet_commands = list( + /datum/pet_command/idle, + /datum/pet_command/free, + /datum/pet_command/point_targeting/attack, + /datum/pet_command/follow, + /datum/pet_command/point_targeting/fetch, + ) + ///things we inherited from our parent + var/datum/raptor_inheritance/inherited_stats + ///our color + var/raptor_color + ///the description that appears in the dex + var/dex_description + ///path of our child + var/child_path + + +/mob/living/basic/raptor/Initialize(mapload) + . = ..() + if(SSmapping.is_planetary()) + change_offsets = FALSE + icon = 'icons/mob/simple/lavaland/raptor_icebox.dmi' + + add_traits(list(TRAIT_LAVA_IMMUNE, TRAIT_ASHSTORM_IMMUNE, TRAIT_SNOWSTORM_IMMUNE), INNATE_TRAIT) + + if(!mapload) + GLOB.raptor_population += REF(src) + AddComponent(/datum/component/obeys_commands, pet_commands) + + AddElement(\ + /datum/element/change_force_on_death,\ + move_resist = MOVE_RESIST_DEFAULT,\ + ) + + var/static/list/display_emote = list( + BB_EMOTE_SAY = list("Chirp chirp chirp!", "Kweh!", "Bwark!"), + BB_EMOTE_SEE = list("shakes its feathers!", "stretches!", "flaps its wings!", "pecks at the ground!"), + BB_EMOTE_SOUND = list( + 'sound/creatures/raptor_1.ogg', + 'sound/creatures/raptor_2.ogg', + 'sound/creatures/raptor_3.ogg', + 'sound/creatures/raptor_4.ogg', + 'sound/creatures/raptor_5.ogg', + ), + BB_SPEAK_CHANCE = 2, + ) + + ai_controller.set_blackboard_key(BB_BASIC_MOB_SPEAK_LINES, display_emote) + inherited_stats = new + inherit_properties() + RegisterSignal(src, COMSIG_HOSTILE_PRE_ATTACKINGTARGET, PROC_REF(pre_attack)) + var/static/list/my_food = list(/obj/item/stack/ore) + AddElement(/datum/element/basic_eating, food_types = my_food) + AddElement(/datum/element/ai_retaliate) + AddElement(/datum/element/ai_flee_while_injured, stop_fleeing_at = 0.5, start_fleeing_below = 0.2) + + if(ridable_component) + AddElement(/datum/element/ridable, ridable_component) + + if(can_breed) + AddComponent(\ + /datum/component/breed,\ + can_breed_with = typecacheof(list(/mob/living/basic/raptor)),\ + baby_path = /obj/item/food/egg/raptor_egg,\ + post_birth = CALLBACK(src, PROC_REF(egg_inherit)),\ + breed_timer = 3 MINUTES,\ + ) + AddElement(/datum/element/footstep, footstep_type = FOOTSTEP_MOB_CLAW) + RegisterSignal(src, COMSIG_ATOM_DIR_CHANGE, PROC_REF(on_dir_change)) + adjust_offsets(dir) + add_happiness_component() + + +/mob/living/basic/raptor/buckle_mob(mob/living/target, force = FALSE, check_loc = TRUE, buckle_mob_flags= NONE) + if(!iscarbon(target)) + return + return ..() + +/mob/living/basic/raptor/proc/add_happiness_component() + var/static/list/percentage_callbacks = list(0, 15, 25, 35, 50, 75, 90, 100) + AddComponent(\ + /datum/component/happiness,\ + on_petted_change = 100,\ + on_groom_change = 100,\ + on_eat_change = 400,\ + callback_percentages = percentage_callbacks,\ + happiness_callback = CALLBACK(src, PROC_REF(happiness_change)),\ + ) + +/mob/living/basic/raptor/proc/on_dir_change(datum/source, old_dir, new_dir) + SIGNAL_HANDLER + adjust_offsets(new_dir) + +/mob/living/basic/raptor/proc/adjust_offsets(direction) + if(!change_offsets) + return + pixel_x = (direction & EAST) ? -20 : 0 + pixel_y = (direction & NORTH) ? -5 : 0 + + +/mob/living/basic/raptor/proc/pre_attack(mob/living/puncher, atom/target) + SIGNAL_HANDLER + + if(!istype(target, /obj/structure/ore_container/food_trough/raptor_trough)) + return + + var/obj/ore_food = locate(/obj/item/stack/ore) in target + + if(isnull(ore_food)) + balloon_alert(src, "no food!") + else + INVOKE_ASYNC(src, PROC_REF(melee_attack), ore_food) + return COMPONENT_HOSTILE_NO_ATTACK + +/mob/living/basic/raptor/melee_attack(mob/living/target, list/modifiers, ignore_cooldown) + if(!combat_mode && istype(target, /mob/living/basic/raptor/baby_raptor)) + target.attack_hand(src, list(LEFT_CLICK = TRUE)) + return + return ..() + +/mob/living/basic/raptor/death(gibbed) + . = ..() + GLOB.raptor_population -= REF(src) + +/mob/living/basic/raptor/proc/happiness_change(percent_value) + var/attack_boost = round(initial(melee_damage_lower) * percent_value * HAPPINESS_BOOST_DAMPENER, 1) + melee_damage_lower = initial(melee_damage_lower) + attack_boost + melee_damage_upper = melee_damage_lower + 5 + + +///pass down our inheritance to the egg +/mob/living/basic/raptor/proc/egg_inherit(obj/item/food/egg/raptor_egg/baby_egg, mob/living/basic/raptor/partner) + var/datum/raptor_inheritance/inherit = new + inherit.set_parents(inherited_stats, partner.inherited_stats) + baby_egg.inherited_stats = inherit + baby_egg.determine_growth_path(src, partner) + +/mob/living/basic/raptor/proc/inherit_properties() + if(isnull(inherited_stats)) + return + for(var/trait in GLOB.raptor_inherit_traits) // done this way to allow overriding of traits when assigned new inherit datum + var/should_inherit = (trait in inherited_stats.inherit_traits) + ai_controller?.set_blackboard_key(trait, should_inherit) + melee_damage_lower += inherited_stats.attack_modifier + melee_damage_upper += melee_damage_lower + 5 + maxHealth += inherited_stats.health_modifier + heal_overall_damage(maxHealth) + +/mob/living/basic/raptor/Destroy() + QDEL_NULL(inherited_stats) + return ..() + +/mob/living/basic/raptor/red + name = "red raptor" + icon_state = "raptor_red" + icon_living = "raptor_red" + icon_dead = "raptor_red_dead" + melee_damage_lower = 15 + melee_damage_upper = 20 + raptor_color = RAPTOR_RED + dex_description = "A resilient breed of raptors, battle-tested and bred for the purpose of humbling its foes in combat, \ + This breed demonstrates higher combat capabilities than its peers and oozes ruthless aggression." + child_path = /mob/living/basic/raptor/baby_raptor/red + +/mob/living/basic/raptor/purple + name = "purple raptor" + icon_state = "raptor_purple" + icon_living = "raptor_purple" + icon_dead = "raptor_purple_dead" + raptor_color = RAPTOR_PURPLE + dex_description = "A dependable mount, bred for the purpose of long distance pilgrimages. This breed is also able to store its rider's possessions." + child_path = /mob/living/basic/raptor/baby_raptor/purple + +/mob/living/basic/raptor/purple/Initialize(mapload) + . = ..() + create_storage( + max_specific_storage = WEIGHT_CLASS_NORMAL, + max_total_storage = 10, + storage_type = /datum/storage/raptor_storage, + ) + +/mob/living/basic/raptor/green + name = "green raptor" + icon_state = "raptor_green" + icon_living = "raptor_green" + icon_dead = "raptor_green_dead" + maxHealth = 400 + health = 400 + raptor_color = RAPTOR_GREEN + dex_description = "A tough breed of raptor, made to withstand the harshest of punishment and to laugh in the face of pain, \ + this breed is able to withstand more punishment than its peers." + child_path = /mob/living/basic/raptor/baby_raptor/green + +/mob/living/basic/raptor/green/Initialize(mapload) + . = ..() + AddElement(/datum/element/proficient_miner) + +/mob/living/basic/raptor/white + name = "white raptor" + icon_state = "raptor_white" + icon_living = "raptor_white" + icon_dead = "raptor_white_dead" + raptor_color = RAPTOR_WHITE + dex_description = "A loving sort, it cares for it peers and rushes to their aid with reckless abandon. It is able to heal any raptors' ailments." + child_path = /mob/living/basic/raptor/baby_raptor/white + +/mob/living/basic/raptor/white/Initialize(mapload) + . = ..() + AddComponent(\ + /datum/component/healing_touch,\ + heal_brute = melee_damage_upper,\ + heal_burn = melee_damage_upper,\ + heal_time = 0,\ + valid_targets_typecache = typecacheof(list(/mob/living/basic/raptor)),\ + ) + +/mob/living/basic/raptor/black + name = "black raptor" + icon_state = "raptor_black" + icon_living = "raptor_black" + icon_dead = "raptor_black_dead" + maxHealth = 400 + health = 400 + speed = 1 + ridable_component = /datum/component/riding/creature/raptor/fast + melee_damage_lower = 20 + melee_damage_upper = 25 + raptor_color = RAPTOR_BLACK + dex_description = "An ultra rare breed. Due to its sparse nature, not much is known about this sort. However it is said to possess many of its peers' abilities." + child_path = /mob/living/basic/raptor/baby_raptor/black + +/mob/living/basic/raptor/yellow + name = "yellow raptor" + icon_state = "raptor_yellow" + icon_living = "raptor_yellow" + icon_dead = "raptor_yellow_dead" + ridable_component = /datum/component/riding/creature/raptor/fast + speed = 1 + raptor_color = RAPTOR_YELLOW + dex_description = "This breed possesses greasy fast speed, DEMON speed, making light work of long pilgrimages. It's said that a thunderclap could be heard when this breed reaches its maximum speed." + child_path = /mob/living/basic/raptor/baby_raptor/yellow + +/mob/living/basic/raptor/blue + name = "blue raptor" + icon_state = "raptor_blue" + icon_living = "raptor_blue" + icon_dead = "raptor_blue_dead" + raptor_color = RAPTOR_BLUE + dex_description = "Known to produce nutritous and equally delicious milk, which is also said to possess healing properties." + child_path = /mob/living/basic/raptor/baby_raptor/blue + +/mob/living/basic/raptor/blue/Initialize(mapload) + . = ..() + AddComponent(\ + /datum/component/udder,\ + udder_type = /obj/item/udder/raptor,\ + ) + +/datum/storage/raptor_storage + animated = FALSE + insert_on_attack = FALSE + +/datum/storage/raptor_storage/on_mousedropped_onto(datum/source, obj/item/dropping, mob/user) + ..() + return NONE + +#undef HAPPINESS_BOOST_DAMPENER diff --git a/code/modules/mob/living/basic/lavaland/raptor/baby_raptor.dm b/code/modules/mob/living/basic/lavaland/raptor/baby_raptor.dm new file mode 100644 index 0000000000000..06d9fed847088 --- /dev/null +++ b/code/modules/mob/living/basic/lavaland/raptor/baby_raptor.dm @@ -0,0 +1,102 @@ +/mob/living/basic/raptor/baby_raptor + name = "baby raptor" + desc = "Will this grow into something useful?" + icon = 'icons/mob/simple/lavaland/raptor_baby.dmi' + speed = 5 + maxHealth = 25 + health = 25 + melee_damage_lower = 3 + melee_damage_upper = 5 + density = FALSE + can_breed = FALSE + move_resist = MOVE_RESIST_DEFAULT + ai_controller = /datum/ai_controller/basic_controller/baby_raptor + ridable_component = null + change_offsets = FALSE + dex_description = "A cute baby raptor, Having it near a parent or a birds-nest could encourage it to grow faster, \ + grooming it and feeding it could also ensure that it grows up quicker!" + ///what do we grow into + var/growth_path + ///probability we are to be rolled + var/roll_rate = 100 + +/mob/living/basic/raptor/baby_raptor/Initialize(mapload) + . = ..() + if(isnull(growth_path)) + return + AddComponent(\ + /datum/component/growth_and_differentiation,\ + growth_time = null,\ + growth_path = growth_path,\ + growth_probability = 80,\ + lower_growth_value = 0.5,\ + upper_growth_value = 0.8,\ + signals_to_kill_on = list(COMSIG_MOB_CLIENT_LOGIN),\ + optional_checks = CALLBACK(src, PROC_REF(check_grow)),\ + optional_grow_behavior = CALLBACK(src, PROC_REF(ready_to_grow)),\ + ) + +/mob/living/basic/raptor/baby_raptor/add_happiness_component() + AddComponent(/datum/component/happiness, on_petted_change = 100) + +/mob/living/basic/raptor/baby_raptor/proc/check_grow() + return (stat != DEAD) + +/mob/living/basic/raptor/baby_raptor/proc/ready_to_grow() + var/mob/living/basic/raptor/grown_mob = new growth_path(get_turf(src)) + QDEL_NULL(grown_mob.inherited_stats) + grown_mob.inherited_stats = inherited_stats + inherited_stats = null + grown_mob.inherit_properties() + ADD_TRAIT(grown_mob, TRAIT_MOB_HATCHED, INNATE_TRAIT) //pass on the hatched trait + qdel(src) + +/mob/living/basic/raptor/baby_raptor/black + name = "baby black raptor" + icon_state = "baby_black" + icon_living = "baby_black" + icon_dead = "baby_black_dead" + growth_path = /mob/living/basic/raptor/black + roll_rate = 10 + +/mob/living/basic/raptor/baby_raptor/red + name = "baby red raptor" + icon_state = "baby_red" + icon_living = "baby_red" + icon_dead = "baby_red_dead" + growth_path = /mob/living/basic/raptor/red + +/mob/living/basic/raptor/baby_raptor/purple + name = "baby purple raptor" + icon_state = "baby_purple" + icon_living = "baby_purple" + icon_dead = "baby_purple_dead" + growth_path = /mob/living/basic/raptor/purple + +/mob/living/basic/raptor/baby_raptor/white + name = "baby white raptor" + icon_state = "baby_white" + icon_living = "baby_white" + icon_dead = "baby_white_dead" + growth_path = /mob/living/basic/raptor/white + +/mob/living/basic/raptor/baby_raptor/yellow + name = "baby yellow raptor" + icon_state = "baby_yellow" + icon_living = "baby_yellow" + icon_dead = "baby_yellow_dead" + growth_path = /mob/living/basic/raptor/yellow + +/mob/living/basic/raptor/baby_raptor/green + name = "baby green raptor" + icon_state = "baby_green" + icon_living = "baby_green" + icon_dead = "baby_green_dead" + growth_path = /mob/living/basic/raptor/green + +/mob/living/basic/raptor/baby_raptor/blue + name = "baby blue raptor" + icon_state = "baby_blue" + icon_living = "baby_blue" + icon_dead = "baby_blue_dead" + growth_path = /mob/living/basic/raptor/blue diff --git a/code/modules/mob/living/basic/lavaland/raptor/raptor_ai_behavior.dm b/code/modules/mob/living/basic/lavaland/raptor/raptor_ai_behavior.dm new file mode 100644 index 0000000000000..33a655869072a --- /dev/null +++ b/code/modules/mob/living/basic/lavaland/raptor/raptor_ai_behavior.dm @@ -0,0 +1,54 @@ +/datum/ai_behavior/hunt_target/unarmed_attack_target/heal_raptor + always_reset_target = TRUE + +/datum/ai_behavior/find_hunt_target/injured_raptor + +/datum/ai_behavior/find_hunt_target/injured_raptor/valid_dinner(mob/living/source, mob/living/target, radius) + return (source != target && target.health < target.maxHealth) + +/datum/ai_behavior/find_hunt_target/raptor_victim + +/datum/ai_behavior/find_hunt_target/raptor_victim/valid_dinner(mob/living/source, mob/living/target, radius) + if(target.ai_controller?.blackboard[BB_RAPTOR_TROUBLE_MAKER]) + return FALSE + return target.stat != DEAD && can_see(source, target, radius) + +/datum/ai_behavior/hunt_target/unarmed_attack_target/bully_raptors + always_reset_target = TRUE + +/datum/ai_behavior/hunt_target/unarmed_attack_target/bully_raptors/finish_action(datum/ai_controller/controller, succeeded, hunting_target_key, hunting_cooldown_key) + if(succeeded) + controller.set_blackboard_key(BB_RAPTOR_TROUBLE_COOLDOWN, world.time + 2 MINUTES) + return ..() + +/datum/ai_behavior/find_hunt_target/raptor_baby/valid_dinner(mob/living/source, mob/living/target, radius) + return can_see(source, target, radius) && target.stat != DEAD + +/datum/ai_behavior/hunt_target/care_for_young + always_reset_target = TRUE + +/datum/ai_behavior/hunt_target/care_for_young/target_caught(mob/living/hunter, atom/hunted) + hunter.manual_emote("grooms [hunted]!") + hunter.set_combat_mode(FALSE) + hunter.ClickOn(hunted) + +/datum/ai_behavior/hunt_target/care_for_young/finish_action(datum/ai_controller/controller, succeeded, hunting_target_key, hunting_cooldown_key) + var/mob/living/living_pawn = controller.pawn + living_pawn.set_combat_mode(initial(living_pawn.combat_mode)) + return ..() + +/datum/ai_behavior/find_hunt_target/raptor_trough + +/datum/ai_behavior/find_hunt_target/raptor_trough/valid_dinner(mob/living/source, atom/movable/trough, radius) + return !!(locate(/obj/item/stack/ore) in trough.contents) + +/datum/ai_behavior/hunt_target/unarmed_attack_target/raptor_trough + always_reset_target = TRUE + +/datum/ai_behavior/hunt_target/unarmed_attack_target/raptor_trough/target_caught(mob/living/hunter, atom/hunted) + hunter.set_combat_mode(FALSE) + +/datum/ai_behavior/hunt_target/unarmed_attack_target/raptor_trough/finish_action(datum/ai_controller/controller, succeeded, hunting_target_key, hunting_cooldown_key) + var/mob/living/living_pawn = controller.pawn + living_pawn.set_combat_mode(initial(living_pawn.combat_mode)) + return ..() diff --git a/code/modules/mob/living/basic/lavaland/raptor/raptor_ai_controller.dm b/code/modules/mob/living/basic/lavaland/raptor/raptor_ai_controller.dm new file mode 100644 index 0000000000000..7ae64e9fb8a5c --- /dev/null +++ b/code/modules/mob/living/basic/lavaland/raptor/raptor_ai_controller.dm @@ -0,0 +1,71 @@ +#define NEXT_EAT_COOLDOWN 45 SECONDS + +/datum/ai_controller/basic_controller/raptor + blackboard = list( + BB_INTERACTIONS_WITH_OWNER = list( + "pecks", + "nuzzles", + "wags their tail against", + "playfully leans against" + ), + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic/raptor, + BB_PET_TARGETING_STRATEGY = /datum/targeting_strategy/basic/raptor, + BB_BABIES_PARTNER_TYPES = list(/mob/living/basic/raptor), + BB_BABIES_CHILD_TYPES = list(/mob/living/basic/raptor/baby_raptor), + BB_MAX_CHILDREN = 5, + ) + + ai_movement = /datum/ai_movement/basic_avoidance + idle_behavior = /datum/idle_behavior/idle_random_walk + planning_subtrees = list( + /datum/ai_planning_subtree/find_nearest_thing_which_attacked_me_to_flee/raptor, + /datum/ai_planning_subtree/flee_target/from_flee_key, + /datum/ai_planning_subtree/find_and_hunt_target/heal_raptors, + /datum/ai_planning_subtree/random_speech/blackboard, + /datum/ai_planning_subtree/pet_planning, + /datum/ai_planning_subtree/target_retaliate, + /datum/ai_planning_subtree/simple_find_target, + /datum/ai_planning_subtree/basic_melee_attack_subtree, + /datum/ai_planning_subtree/find_and_hunt_target/raptor_trough, + /datum/ai_planning_subtree/find_and_hunt_target/care_for_young, + /datum/ai_planning_subtree/make_babies, + /datum/ai_planning_subtree/find_and_hunt_target/raptor_start_trouble, + /datum/ai_planning_subtree/express_happiness, + /datum/ai_planning_subtree/find_and_hunt_target/play_with_owner/raptor, + ) + +/datum/ai_controller/basic_controller/raptor/TryPossessPawn(atom/new_pawn) + . = ..() + if(. & AI_CONTROLLER_INCOMPATIBLE) + return + RegisterSignal(new_pawn, COMSIG_MOB_ATE, PROC_REF(post_eat)) + +/datum/ai_controller/basic_controller/raptor/proc/post_eat() + clear_blackboard_key(BB_RAPTOR_TROUGH_TARGET) + set_blackboard_key(BB_RAPTOR_EAT_COOLDOWN, world.time + NEXT_EAT_COOLDOWN) + +/datum/targeting_strategy/basic/raptor + +//dont attack anyone with the neutral faction. +/datum/targeting_strategy/basic/raptor/faction_check(datum/ai_controller/controller, mob/living/living_mob, mob/living/the_target) + return (the_target.faction.Find(FACTION_NEUTRAL) || the_target.faction.Find(FACTION_RAPTOR)) + +/datum/ai_controller/basic_controller/baby_raptor + blackboard = list( + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic/raptor, + BB_FIND_MOM_TYPES = list(/mob/living/basic/raptor), + BB_IGNORE_MOM_TYPES = list(/mob/living/basic/raptor/baby_raptor), + ) + + ai_movement = /datum/ai_movement/basic_avoidance + idle_behavior = /datum/idle_behavior/idle_random_walk + planning_subtrees = list( + /datum/ai_planning_subtree/simple_find_target, + /datum/ai_planning_subtree/flee_target, + /datum/ai_planning_subtree/random_speech/blackboard, + /datum/ai_planning_subtree/find_and_hunt_target/raptor_trough, + /datum/ai_planning_subtree/express_happiness, + /datum/ai_planning_subtree/look_for_adult, + ) + +#undef NEXT_EAT_COOLDOWN diff --git a/code/modules/mob/living/basic/lavaland/raptor/raptor_ai_subtrees.dm b/code/modules/mob/living/basic/lavaland/raptor/raptor_ai_subtrees.dm new file mode 100644 index 0000000000000..7ba0dad5561f6 --- /dev/null +++ b/code/modules/mob/living/basic/lavaland/raptor/raptor_ai_subtrees.dm @@ -0,0 +1,66 @@ +/datum/ai_planning_subtree/find_and_hunt_target/heal_raptors + target_key = BB_INJURED_RAPTOR + hunting_behavior = /datum/ai_behavior/hunt_target/unarmed_attack_target/heal_raptor + finding_behavior = /datum/ai_behavior/find_hunt_target/injured_raptor + hunt_targets = list(/mob/living/basic/raptor) + hunt_chance = 70 + hunt_range = 9 + +/datum/ai_planning_subtree/find_and_hunt_target/heal_raptors/SelectBehaviors(datum/ai_controller/controller, seconds_per_tick) + if(!controller.blackboard[BB_BASIC_MOB_HEALER]) + return + return ..() + +/datum/ai_planning_subtree/find_and_hunt_target/raptor_start_trouble + target_key = BB_RAPTOR_VICTIM + hunting_behavior = /datum/ai_behavior/hunt_target/unarmed_attack_target/bully_raptors + finding_behavior = /datum/ai_behavior/find_hunt_target/raptor_victim + hunt_targets = list(/mob/living/basic/raptor) + hunt_chance = 30 + hunt_range = 9 + +/datum/ai_planning_subtree/find_and_hunt_target/raptor_start_trouble/SelectBehaviors(datum/ai_controller/controller, seconds_per_tick) + if(controller.blackboard[BB_BASIC_MOB_HEALER] || !controller.blackboard[BB_RAPTOR_TROUBLE_MAKER]) + return + if(world.time < controller.blackboard[BB_RAPTOR_TROUBLE_COOLDOWN]) + return + return ..() + +/datum/ai_planning_subtree/find_nearest_thing_which_attacked_me_to_flee/raptor + target_key = BB_BASIC_MOB_FLEE_TARGET + +/datum/ai_planning_subtree/find_nearest_thing_which_attacked_me_to_flee/raptor/SelectBehaviors(datum/ai_controller/controller, seconds_per_tick) + if(!controller.blackboard[BB_RAPTOR_COWARD]) + return + return ..() + +/datum/ai_planning_subtree/find_and_hunt_target/care_for_young + target_key = BB_RAPTOR_BABY + hunting_behavior = /datum/ai_behavior/hunt_target/care_for_young + finding_behavior = /datum/ai_behavior/find_hunt_target/raptor_baby + hunt_targets = list(/mob/living/basic/raptor/baby_raptor) + hunt_chance = 75 + hunt_range = 9 + +/datum/ai_planning_subtree/find_and_hunt_target/care_for_young/SelectBehaviors(datum/ai_controller/controller, seconds_per_tick) + if(!controller.blackboard[BB_RAPTOR_MOTHERLY]) + return + return ..() + +/datum/ai_planning_subtree/find_and_hunt_target/raptor_trough + target_key = BB_RAPTOR_TROUGH_TARGET + hunting_behavior = /datum/ai_behavior/hunt_target/unarmed_attack_target + finding_behavior = /datum/ai_behavior/find_hunt_target/raptor_trough + hunt_targets = list(/obj/structure/ore_container/food_trough/raptor_trough) + hunt_chance = 80 + hunt_range = 9 + +/datum/ai_planning_subtree/find_and_hunt_target/raptor_trough/SelectBehaviors(datum/ai_controller/controller, seconds_per_tick) + if(world.time < controller.blackboard[BB_RAPTOR_EAT_COOLDOWN]) + return + return ..() + +/datum/ai_planning_subtree/find_and_hunt_target/play_with_owner/raptor/SelectBehaviors(datum/ai_controller/controller, seconds_per_tick) + if(!controller.blackboard[BB_RAPTOR_PLAYFUL]) + return + return ..() diff --git a/code/modules/mob/living/basic/lavaland/raptor/raptor_dex.dm b/code/modules/mob/living/basic/lavaland/raptor/raptor_dex.dm new file mode 100644 index 0000000000000..ef7e6fa3167c6 --- /dev/null +++ b/code/modules/mob/living/basic/lavaland/raptor/raptor_dex.dm @@ -0,0 +1,62 @@ +/obj/item/raptor_dex + name = "raptor Dex" + desc = "A device used to analyze lavaland raptors!" + icon = 'icons/obj/devices/scanner.dmi' + icon_state = "raptor_dex" + item_flags = NOBLUDGEON + ///current raptor we are analyzing + var/datum/weakref/raptor + +/obj/item/raptor_dex/ui_interact(mob/user, datum/tgui/ui) + if(isnull(raptor?.resolve())) + balloon_alert(user, "no specimen data!") + return TRUE + + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "RaptorDex") + ui.open() + +/obj/item/raptor_dex/ui_static_data(mob/user) + var/list/data = list() + var/mob/living/basic/raptor/my_raptor = raptor.resolve() + + data["raptor_image"] = icon2base64(getFlatIcon(image(icon = my_raptor.icon, icon_state = my_raptor.icon_state))) + data["raptor_attack"] = my_raptor.melee_damage_lower + data["raptor_health"] = my_raptor.maxHealth + data["raptor_speed"] = my_raptor.speed + data["raptor_color"] = my_raptor.name + data["raptor_gender"] = my_raptor.gender + data["raptor_description"] = my_raptor.dex_description + + var/happiness_percentage = my_raptor.ai_controller?.blackboard[BB_BASIC_HAPPINESS] + var/obj/effect/overlay/happiness_overlay/display = new + display.set_hearts(happiness_percentage) + display.pixel_y = world.icon_size * 0.5 + data["raptor_happiness"] = icon2base64(getFlatIcon(display)) + qdel(display) + + var/datum/raptor_inheritance/inherit = my_raptor.inherited_stats + if(isnull(inherit)) + return data + + data["inherited_attack"] = inherit.attack_modifier + data["inherited_attack_max"] = RAPTOR_INHERIT_MAX_ATTACK + data["inherited_health"] = inherit.health_modifier + data["inherited_health_max"] = RAPTOR_INHERIT_MAX_HEALTH + + data["inherited_traits"] = list() + for(var/index in inherit.inherit_traits) + data["inherited_traits"] += GLOB.raptor_inherit_traits[index] + return data + + +/obj/item/raptor_dex/interact_with_atom(atom/attacked_atom, mob/living/user) + if(!istype(attacked_atom, /mob/living/basic/raptor)) + return NONE + + raptor = WEAKREF(attacked_atom) + playsound(src, 'sound/items/orbie_send_out.ogg', 20) + balloon_alert(user, "scanned") + ui_interact(user) + return ITEM_INTERACT_SUCCESS diff --git a/code/modules/mob/living/basic/lavaland/raptor/raptor_egg.dm b/code/modules/mob/living/basic/lavaland/raptor/raptor_egg.dm new file mode 100644 index 0000000000000..1b980857562e1 --- /dev/null +++ b/code/modules/mob/living/basic/lavaland/raptor/raptor_egg.dm @@ -0,0 +1,58 @@ +/obj/item/food/egg/raptor_egg + icon = 'icons/mob/simple/lavaland/raptor_baby.dmi' + icon_state = "raptor_egg" + ///inheritance datum to pass on to the child + var/datum/raptor_inheritance/inherited_stats + +/obj/item/food/egg/raptor_egg/Initialize(mapload) + . = ..() + if(SSmapping.is_planetary()) + icon = 'icons/mob/simple/lavaland/raptor_icebox.dmi' + +/obj/item/food/egg/raptor_egg/proc/determine_growth_path(mob/living/basic/raptor/dad, mob/living/basic/raptor/mom) + if(dad.type == mom.type) + add_growth_component(dad.child_path) + return + var/dad_color = dad.raptor_color + var/mom_color = mom.raptor_color + var/list/my_colors = list(dad_color, mom_color) + sortTim(my_colors, GLOBAL_PROC_REF(cmp_text_asc)) + for(var/path in GLOB.raptor_growth_paths) //guaranteed spawns + var/list/required_colors = GLOB.raptor_growth_paths[path] + if(!compare_list(my_colors, required_colors)) + continue + add_growth_component(path) + return + var/list/valid_subtypes = list() + var/static/list/all_subtypes = subtypesof(/mob/living/basic/raptor/baby_raptor) + for(var/path in all_subtypes) + var/mob/living/basic/raptor/baby_raptor/raptor_path = path + if(!prob(initial(raptor_path.roll_rate))) + continue + valid_subtypes += raptor_path + add_growth_component(pick(valid_subtypes)) + +/obj/item/food/egg/raptor_egg/proc/add_growth_component(growth_path) + if(length(GLOB.raptor_population) >= MAX_RAPTOR_POP) + return + AddComponent(\ + /datum/component/fertile_egg,\ + embryo_type = growth_path,\ + minimum_growth_rate = 0.5,\ + maximum_growth_rate = 1,\ + total_growth_required = 100,\ + current_growth = 0,\ + location_allowlist = typecacheof(list(/turf)),\ + post_hatch = CALLBACK(src, PROC_REF(post_hatch)),\ + ) + +/obj/item/food/egg/raptor_egg/proc/post_hatch(mob/living/basic/raptor/baby) + if(!istype(baby)) + return + QDEL_NULL(baby.inherited_stats) + baby.inherited_stats = inherited_stats + inherited_stats = null + +/obj/item/food/egg/raptor_egg/Destroy() + QDEL_NULL(inherited_stats) + return ..() diff --git a/code/modules/mob/living/basic/lavaland/raptor/raptor_food_trough.dm b/code/modules/mob/living/basic/lavaland/raptor/raptor_food_trough.dm new file mode 100644 index 0000000000000..03289f2d0fe32 --- /dev/null +++ b/code/modules/mob/living/basic/lavaland/raptor/raptor_food_trough.dm @@ -0,0 +1,7 @@ +/obj/structure/ore_container/food_trough/raptor_trough + name = "raptor trough" + desc = "The raptors will eat out of it!" + icon = 'icons/obj/structures.dmi' + icon_state = "raptor_trough" + x_offsets = list(-5, 5) + y_offsets = list(-4, 5) diff --git a/code/modules/mob/living/basic/lavaland/raptor/raptor_inheritance.dm b/code/modules/mob/living/basic/lavaland/raptor/raptor_inheritance.dm new file mode 100644 index 0000000000000..4f72e37a4cf4b --- /dev/null +++ b/code/modules/mob/living/basic/lavaland/raptor/raptor_inheritance.dm @@ -0,0 +1,31 @@ +#define RANDOM_INHERIT_AMOUNT 2 +/datum/raptor_inheritance + ///list of traits we inherit + var/list/inherit_traits = list() + ///attack modifier + var/attack_modifier + ///health_modifier + var/health_modifier + +/datum/raptor_inheritance/New(datum/raptor_inheritance/father, datum/raptor_inheritance/mother) + . = ..() + randomize_stats() + +/datum/raptor_inheritance/proc/randomize_stats() + attack_modifier = rand(0, RAPTOR_INHERIT_MAX_ATTACK) + health_modifier = rand(0, RAPTOR_INHERIT_MAX_HEALTH) + var/list/traits_to_pick = GLOB.raptor_inherit_traits.Copy() + for(var/i in 1 to RANDOM_INHERIT_AMOUNT) + inherit_traits += pick_n_take(traits_to_pick) + +/datum/raptor_inheritance/proc/set_parents(datum/raptor_inheritance/father, datum/raptor_inheritance/mother) + if(isnull(father) || isnull(mother)) + return + if(length(father.inherit_traits)) + inherit_traits += pick(father.inherit_traits) + if(length(mother.inherit_traits)) + inherit_traits += pick(mother.inherit_traits) + attack_modifier = rand(min(father.attack_modifier, mother.attack_modifier), max(father.attack_modifier, mother.attack_modifier)) + health_modifier = rand(min(father.health_modifier, mother.health_modifier), max(father.health_modifier, mother.health_modifier)) + +#undef RANDOM_INHERIT_AMOUNT diff --git a/code/modules/mob/living/basic/lavaland/watcher/watcher_gaze.dm b/code/modules/mob/living/basic/lavaland/watcher/watcher_gaze.dm index 06a221db2dc79..940803299524b 100644 --- a/code/modules/mob/living/basic/lavaland/watcher/watcher_gaze.dm +++ b/code/modules/mob/living/basic/lavaland/watcher/watcher_gaze.dm @@ -115,6 +115,8 @@ var/max_throw = 3 /datum/action/cooldown/mob_cooldown/watcher_gaze/ice/apply_effect(mob/living/viewer) + if(!HAS_TRAIT(viewer, TRAIT_RESISTCOLD)) + return to_chat(viewer, span_warning("You are repulsed by the force of [owner]'s cold stare!")) viewer.apply_status_effect(/datum/status_effect/freon/watcher/extended) viewer.safe_throw_at( diff --git a/code/modules/mob/living/basic/lavaland/watcher/watcher_overwatch.dm b/code/modules/mob/living/basic/lavaland/watcher/watcher_overwatch.dm index 541a4ed9e1c7e..a61ea0743f9a4 100644 --- a/code/modules/mob/living/basic/lavaland/watcher/watcher_overwatch.dm +++ b/code/modules/mob/living/basic/lavaland/watcher/watcher_overwatch.dm @@ -76,7 +76,7 @@ COMSIG_MOB_ITEM_ATTACK, COMSIG_MOB_THROW, COMSIG_MOB_USED_MECH_EQUIPMENT, - COMSIG_MOB_USED_MECH_MELEE, + COMSIG_MOB_USED_CLICK_MECH_MELEE, COMSIG_MOVABLE_MOVED, ) diff --git a/code/modules/mob/living/basic/lavaland/watcher/watcher_projectiles.dm b/code/modules/mob/living/basic/lavaland/watcher/watcher_projectiles.dm index 40afd58c1da26..19e718d9fee59 100644 --- a/code/modules/mob/living/basic/lavaland/watcher/watcher_projectiles.dm +++ b/code/modules/mob/living/basic/lavaland/watcher/watcher_projectiles.dm @@ -34,4 +34,6 @@ damage = 5 /obj/projectile/temp/watcher/ice_wing/apply_status(mob/living/target) + if(!HAS_TRAIT(target, TRAIT_RESISTCOLD)) + return target.apply_status_effect(/datum/status_effect/freon/watcher) diff --git a/code/modules/mob/living/basic/minebots/minebot.dm b/code/modules/mob/living/basic/minebots/minebot.dm index 3361330915f0e..54fe9a07367cf 100644 --- a/code/modules/mob/living/basic/minebots/minebot.dm +++ b/code/modules/mob/living/basic/minebots/minebot.dm @@ -1,6 +1,6 @@ /mob/living/basic/mining_drone name = "\improper Nanotrasen minebot" - desc = "The instructions printed on the side read: This is a small robot used to support miners, can be set to search and collect loose ore, or to help fend off wildlife. Insert any type of ore into it to make it start listening to your commands!" + desc = "The instructions printed on the side read: This is a small robot used to support miners, can be set to search and collect loose ore, or to help fend off wildlife." gender = NEUTER icon = 'icons/mob/silicon/aibots.dmi' icon_state = "mining_drone" @@ -107,6 +107,8 @@ for(var/obj/item/borg/upgrade/modkit/modkit as anything in stored_gun.modkits) . += span_notice("There is \a [modkit] installed, using [modkit.cost]% capacity.") + if(ai_controller && ai_controller.ai_status == AI_STATUS_IDLE) + . += "The [src] appears to be in sleep mode. You can restore normal functions by tapping it." /mob/living/basic/mining_drone/welder_act(mob/living/user, obj/item/welder) @@ -132,7 +134,10 @@ /mob/living/basic/mining_drone/attack_hand(mob/living/carbon/human/user, list/modifiers) if(!user.combat_mode) - ui_interact(user) + if(ai_controller && ai_controller.ai_status == AI_STATUS_IDLE) + ai_controller.set_ai_status(AI_STATUS_ON) + if(LAZYACCESS(modifiers, LEFT_CLICK)) //Lets Right Click be specifically for re-enabling their AI (and avoiding the UI popup), while Left Click simply does both. + ui_interact(user) return return ..() @@ -210,10 +215,10 @@ balloon_alert(user, "now [combat_mode ? "attacking wildlife" : "collecting loose ore"]") return CLICK_ACTION_SUCCESS -/mob/living/basic/mining_drone/RangedAttack(atom/target) +/mob/living/basic/mining_drone/RangedAttack(atom/target, list/modifiers) if(!combat_mode) return - stored_gun.afterattack(target, src) + stored_gun.try_fire_gun(target, src, list2params(modifiers)) /mob/living/basic/mining_drone/UnarmedAttack(atom/attack_target, proximity_flag, list/modifiers) . = ..() diff --git a/code/modules/mob/living/basic/minebots/minebot_ai.dm b/code/modules/mob/living/basic/minebots/minebot_ai.dm index 959049f957d73..62aeaf3aa7923 100644 --- a/code/modules/mob/living/basic/minebots/minebot_ai.dm +++ b/code/modules/mob/living/basic/minebots/minebot_ai.dm @@ -9,6 +9,13 @@ BB_MINEBOT_AUTO_DEFEND = TRUE, BB_BLACKLIST_MINERAL_TURFS = list(/turf/closed/mineral/gibtonite), BB_AUTOMATED_MINING = FALSE, + BB_OWNER_SELF_HARM_RESPONSES = list( + "Please stop hurting yourself.", + "There is no need to do that.", + "Your actions are illogical.", + "Please make better choices.", + "Remember, you have beaten your worst days before." + ) ) ai_movement = /datum/ai_movement/basic_avoidance diff --git a/code/modules/mob/living/basic/minebots/minebot_remote_control.dm b/code/modules/mob/living/basic/minebots/minebot_remote_control.dm index 618edc3d0b68e..3601940912389 100644 --- a/code/modules/mob/living/basic/minebots/minebot_remote_control.dm +++ b/code/modules/mob/living/basic/minebots/minebot_remote_control.dm @@ -43,22 +43,22 @@ user.client?.mouse_override_icon = 'icons/effects/mouse_pointers/weapon_pointer.dmi' user.update_mouse_pointer() -/obj/item/minebot_remote_control/afterattack(atom/attacked_atom, mob/living/user, proximity) - . = ..() - - . |= AFTERATTACK_PROCESSED_ITEM +/obj/item/minebot_remote_control/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + return ranged_interact_with_atom(interacting_with, user, modifiers) +/obj/item/minebot_remote_control/ranged_interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) if(!primed) user.balloon_alert(user, "not primed!") - return - var/turf/target_turf = get_turf(attacked_atom) + return ITEM_INTERACT_BLOCKING + var/turf/target_turf = get_turf(interacting_with) if(isnull(target_turf) || isclosedturf(target_turf) || isgroundlessturf(target_turf)) user.balloon_alert(user, "invalid target!") - return + return ITEM_INTERACT_BLOCKING playsound(src, 'sound/machines/beep.ogg', 30) clear_priming() new /obj/effect/temp_visual/minebot_target(target_turf) COOLDOWN_START(src, bomb_timer, BOMB_COOLDOWN) + return ITEM_INTERACT_SUCCESS /obj/effect/temp_visual/minebot_target name = "Rocket Target" diff --git a/code/modules/mob/living/basic/minebots/minebot_upgrades.dm b/code/modules/mob/living/basic/minebots/minebot_upgrades.dm index 14c62f7fefc51..881342bcf662a 100644 --- a/code/modules/mob/living/basic/minebots/minebot_upgrades.dm +++ b/code/modules/mob/living/basic/minebots/minebot_upgrades.dm @@ -5,11 +5,11 @@ icon = 'icons/obj/devices/circuitry_n_data.dmi' item_flags = NOBLUDGEON -/obj/item/mine_bot_upgrade/afterattack(mob/living/basic/mining_drone/minebot, mob/user, proximity) - . = ..() - if(!istype(minebot) || !proximity) - return - upgrade_bot(minebot, user) +/obj/item/mine_bot_upgrade/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + if(!istype(interacting_with, /mob/living/basic/mining_drone)) + return NONE + upgrade_bot(interacting_with, user) + return ITEM_INTERACT_SUCCESS /obj/item/mine_bot_upgrade/proc/upgrade_bot(mob/living/basic/mining_drone/minebot, mob/user) if(minebot.melee_damage_upper != initial(minebot.melee_damage_upper)) @@ -90,4 +90,3 @@ icon = 'icons/mob/silicon/aibots.dmi' icon_state = "minebot_shield_bottom_layer" layer = BELOW_MOB_LAYER - diff --git a/code/modules/mob/living/basic/pets/cat/cat.dm b/code/modules/mob/living/basic/pets/cat/cat.dm index 3c2612d9a62d7..400bd9ac9f173 100644 --- a/code/modules/mob/living/basic/pets/cat/cat.dm +++ b/code/modules/mob/living/basic/pets/cat/cat.dm @@ -58,7 +58,7 @@ AddElement(/datum/element/footstep, footstep_type = FOOTSTEP_MOB_CLAW) add_cell_sample() add_verb(src, /mob/living/proc/toggle_resting) - add_traits(list(TRAIT_CATLIKE_GRACE, TRAIT_VENTCRAWLER_ALWAYS), INNATE_TRAIT) + add_traits(list(TRAIT_CATLIKE_GRACE, TRAIT_VENTCRAWLER_ALWAYS, TRAIT_WOUND_LICKER), INNATE_TRAIT) ai_controller.set_blackboard_key(BB_HUNTABLE_PREY, typecacheof(huntable_items)) if(can_breed) add_breeding_component() diff --git a/code/modules/mob/living/basic/pets/dog/_dog.dm b/code/modules/mob/living/basic/pets/dog/_dog.dm index f513795e7f685..5cd970575ec6f 100644 --- a/code/modules/mob/living/basic/pets/dog/_dog.dm +++ b/code/modules/mob/living/basic/pets/dog/_dog.dm @@ -47,6 +47,7 @@ /mob/living/basic/pet/dog/Initialize(mapload) . = ..() + ADD_TRAIT(src, TRAIT_WOUND_LICKER, INNATE_TRAIT) AddElement(/datum/element/pet_bonus, "woofs happily!") AddElement(/datum/element/footstep, FOOTSTEP_MOB_CLAW) AddElement(/datum/element/unfriend_attacker, untamed_reaction = "%SOURCE% fixes %TARGET% with a look of betrayal.") diff --git a/code/modules/mob/living/basic/pets/dog/corgi.dm b/code/modules/mob/living/basic/pets/dog/corgi.dm index 2011992da5612..7e13c792d2830 100644 --- a/code/modules/mob/living/basic/pets/dog/corgi.dm +++ b/code/modules/mob/living/basic/pets/dog/corgi.dm @@ -472,7 +472,7 @@ unique_pet = TRUE held_state = "narsian" /// Mobs we will consume in the name of Nar'Sie - var/static/list/edible_types = list(/mob/living/simple_animal/pet, /mob/living/basic/pet) + var/static/list/edible_types = list(/mob/living/basic/pet) /mob/living/basic/pet/dog/corgi/narsie/Initialize(mapload) . = ..() diff --git a/code/modules/mob/living/basic/pets/gondolas/gondola.dm b/code/modules/mob/living/basic/pets/gondolas/gondola.dm new file mode 100644 index 0000000000000..9e17d1e08a5e2 --- /dev/null +++ b/code/modules/mob/living/basic/pets/gondolas/gondola.dm @@ -0,0 +1,83 @@ +#define GONDOLA_HEIGHT pick(list("gondola_body_long", "gondola_body_medium", "gondola_body_short")) +#define GONDOLA_COLOR pick(list("A87855", "915E48", "683E2C")) +#define GONDOLA_MOUSTACHE pick(list("gondola_moustache_large", "gondola_moustache_small")) +#define GONDOLA_EYES pick(list("gondola_eyes_close", "gondola_eyes_far")) + +/mob/living/basic/pet/gondola + name = "gondola" + real_name = "gondola" + desc = "Gondola is the silent walker. \ + Having no hands he embodies the Taoist principle of wu-wei (non-action) while his smiling \ + facial expression shows his utter and complete acceptance of the world as it is. \ + Its hide is extremely valuable." + icon = 'icons/mob/simple/gondolas.dmi' + icon_state = "gondola" + icon_living = "gondola" + + maxHealth = 200 + health = 200 + faction = list(FACTION_GONDOLA) + response_help_continuous = "pets" + response_help_simple = "pet" + response_disarm_continuous = "bops" + response_disarm_simple = "bop" + response_harm_continuous = "kicks" + response_harm_simple = "kick" + ai_controller = /datum/ai_controller/basic_controller/gondola + + //Gondolas aren't affected by cold. + unsuitable_atmos_damage = 0 + basic_mob_flags = DEL_ON_DEATH + + ///List of loot drops on death, since it deletes itself on death (like trooper). + var/list/loot = list( + /obj/effect/decal/cleanable/blood/gibs = 1, + /obj/item/stack/sheet/animalhide/gondola = 1, + /obj/item/food/meat/slab/gondola = 1, + ) + +/mob/living/basic/pet/gondola/Initialize(mapload) + . = ..() + ADD_TRAIT(src, TRAIT_MUTE, INNATE_TRAIT) + AddElement(/datum/element/pet_bonus, "smiles!") + if(LAZYLEN(loot)) + loot = string_list(loot) + AddElement(/datum/element/death_drops, loot) + create_gondola() + +/mob/living/basic/pet/gondola/proc/create_gondola() + icon_state = null + icon_living = null + var/height = GONDOLA_HEIGHT + var/mutable_appearance/body_overlay = mutable_appearance(icon, height) + var/mutable_appearance/eyes_overlay = mutable_appearance(icon, GONDOLA_EYES) + var/mutable_appearance/moustache_overlay = mutable_appearance(icon, GONDOLA_MOUSTACHE) + body_overlay.color = ("#[GONDOLA_COLOR]") + + //Offset the face to match the Gondola's height. + switch(height) + if("gondola_body_medium") + eyes_overlay.pixel_y = -4 + moustache_overlay.pixel_y = -4 + if("gondola_body_short") + eyes_overlay.pixel_y = -8 + moustache_overlay.pixel_y = -8 + + cut_overlays(TRUE) + add_overlay(body_overlay) + add_overlay(eyes_overlay) + add_overlay(moustache_overlay) + +/datum/ai_controller/basic_controller/gondola + blackboard = list( + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, + ) + + ai_traits = STOP_MOVING_WHEN_PULLED + ai_movement = /datum/ai_movement/basic_avoidance + idle_behavior = /datum/idle_behavior/idle_random_walk/less_walking + +#undef GONDOLA_HEIGHT +#undef GONDOLA_COLOR +#undef GONDOLA_MOUSTACHE +#undef GONDOLA_EYES diff --git a/code/modules/mob/living/basic/pets/gondolas/gondolapod.dm b/code/modules/mob/living/basic/pets/gondolas/gondolapod.dm new file mode 100644 index 0000000000000..da051f18b5716 --- /dev/null +++ b/code/modules/mob/living/basic/pets/gondolas/gondolapod.dm @@ -0,0 +1,104 @@ +/mob/living/basic/pet/gondola/gondolapod + name = "gondola" + real_name = "gondola" + desc = "The silent walker. This one seems to be part of a delivery agency." + icon = 'icons/obj/supplypods.dmi' + icon_state = "gondola" + icon_living = "gondola" + SET_BASE_PIXEL(-16, -5) //2x2 sprite + layer = TABLE_LAYER //so that deliveries dont appear underneath it + + loot = list( + /obj/effect/decal/cleanable/blood/gibs = 1, + /obj/item/stack/sheet/animalhide/gondola = 2, + /obj/item/food/meat/slab/gondola = 2, + ) + + ///Boolean on whether the pod is currently open, and should appear such. + var/opened = FALSE + ///The supply pod attached to the gondola, that actually holds the contents of our delivery. + var/obj/structure/closet/supplypod/centcompod/linked_pod + ///Static list of actions the gondola is given on creation, and taken away when it successfully delivers. + var/static/list/gondola_delivering_actions = list( + /datum/action/innate/deliver_gondola_package, + /datum/action/innate/check_gondola_contents, + ) + +/mob/living/basic/pet/gondola/gondolapod/Initialize(mapload, pod) + linked_pod = pod || new(src) + name = linked_pod.name + desc = linked_pod.desc + if(!linked_pod.stay_after_drop || !linked_pod.opened) + grant_actions_by_list(gondola_delivering_actions) + return ..() + +/mob/living/basic/pet/gondola/gondolapod/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 + return ..() + +/mob/living/basic/pet/gondola/gondolapod/create_gondola() + return + +/mob/living/basic/pet/gondola/gondolapod/update_overlays() + . = ..() + if(opened) + . += "[icon_state]_open" + +/mob/living/basic/pet/gondola/gondolapod/examine(mob/user) + . = ..() + if (contents.len) + . += span_notice("It looks like it hasn't made its delivery yet.") + else + . += span_notice("It looks like it has already made its delivery.") + +/mob/living/basic/pet/gondola/gondolapod/setOpened() + opened = TRUE + layer = initial(layer) + update_appearance() + addtimer(CALLBACK(src, TYPE_PROC_REF(/atom/, setClosed)), 5 SECONDS) + +/mob/living/basic/pet/gondola/gondolapod/setClosed() + opened = FALSE + layer = LOW_MOB_LAYER + update_appearance() + +///Opens the gondola pod and delivers its package, one-time use as it removes all delivery-related actions. +/datum/action/innate/deliver_gondola_package + name = "Deliver" + desc = "Open your pod and release any contents stored within." + button_icon = 'icons/hud/screen_gen.dmi' + button_icon_state = "arrow" + check_flags = AB_CHECK_PHASED + +/datum/action/innate/deliver_gondola_package/Trigger(trigger_flags) + . = ..() + if(!.) + return + + var/mob/living/basic/pet/gondola/gondolapod/gondola_owner = owner + gondola_owner.linked_pod.open_pod(gondola_owner, forced = TRUE) + for(var/datum/action/actions as anything in gondola_owner.actions) + if(actions.type in gondola_owner.gondola_delivering_actions) + actions.Remove(gondola_owner) + return TRUE + +///Checks the contents of the gondola and lets them know what they're holding. +/datum/action/innate/check_gondola_contents + name = "Check contents" + desc = "See how many items you are currently holding in your pod." + button_icon = 'icons/hud/implants.dmi' + button_icon_state = "storage" + check_flags = AB_CHECK_PHASED + +/datum/action/innate/check_gondola_contents/Trigger(trigger_flags) + . = ..() + if(!.) + return + + var/mob/living/basic/pet/gondola/gondolapod/gondola_owner = owner + var/total = gondola_owner.contents.len + if (total) + to_chat(gondola_owner, span_notice("You detect [total] object\s within your incredibly vast belly.")) + else + to_chat(gondola_owner, span_notice("A closer look inside yourself reveals... nothing.")) + return TRUE diff --git a/code/modules/mob/living/basic/pets/orbie/orbie_ai.dm b/code/modules/mob/living/basic/pets/orbie/orbie_ai.dm index 92f433bd08a05..1452dd18dee09 100644 --- a/code/modules/mob/living/basic/pets/orbie/orbie_ai.dm +++ b/code/modules/mob/living/basic/pets/orbie/orbie_ai.dm @@ -22,12 +22,12 @@ . = ..() if(. & AI_CONTROLLER_INCOMPATIBLE) return - RegisterSignal(new_pawn, COMSIG_AI_BLACKBOARD_KEY_SET(BB_LAST_RECIEVED_MESSAGE), PROC_REF(on_set_message)) + RegisterSignal(new_pawn, COMSIG_AI_BLACKBOARD_KEY_SET(BB_LAST_RECEIVED_MESSAGE), PROC_REF(on_set_message)) /datum/ai_controller/basic_controller/orbie/proc/on_set_message(datum/source) SIGNAL_HANDLER - addtimer(CALLBACK(src, PROC_REF(clear_blackboard_key), BB_LAST_RECIEVED_MESSAGE), MESSAGE_EXPIRY_TIME) + addtimer(CALLBACK(src, PROC_REF(clear_blackboard_key), BB_LAST_RECEIVED_MESSAGE), MESSAGE_EXPIRY_TIME) ///ai behavior that lets us search for other orbies to play with /datum/ai_planning_subtree/find_playmates @@ -84,10 +84,10 @@ /datum/ai_planning_subtree/relay_pda_message /datum/ai_planning_subtree/relay_pda_message/SelectBehaviors(datum/ai_controller/controller, seconds_per_tick) - if(controller.blackboard[BB_VIRTUAL_PET_LEVEL] < 2 || isnull(controller.blackboard[BB_LAST_RECIEVED_MESSAGE])) + if(controller.blackboard[BB_VIRTUAL_PET_LEVEL] < 2 || isnull(controller.blackboard[BB_LAST_RECEIVED_MESSAGE])) return - controller.queue_behavior(/datum/ai_behavior/relay_pda_message, BB_LAST_RECIEVED_MESSAGE) + controller.queue_behavior(/datum/ai_behavior/relay_pda_message, BB_LAST_RECEIVED_MESSAGE) /datum/ai_behavior/relay_pda_message/perform(seconds_per_tick, datum/ai_controller/controller, target_key) var/mob/living/basic/living_pawn = controller.pawn diff --git a/code/modules/mob/living/basic/pets/parrot/parrot_ai/parroting_action.dm b/code/modules/mob/living/basic/pets/parrot/parrot_ai/parroting_action.dm index 493d67cbca8c8..ab8ad3957b1fb 100644 --- a/code/modules/mob/living/basic/pets/parrot/parrot_ai/parroting_action.dm +++ b/code/modules/mob/living/basic/pets/parrot/parrot_ai/parroting_action.dm @@ -1,3 +1,4 @@ +#define MAXIMUM_PARROT_PITCH 24 /// When a parrot... parrots... /datum/ai_planning_subtree/parrot_as_in_repeat operational_datums = list(/datum/component/listen_and_repeat) @@ -23,28 +24,43 @@ /datum/ai_behavior/perform_speech/parrot action_cooldown = 7.5 SECONDS // gets really annoying (moreso than usual) really fast otherwise -/datum/ai_behavior/perform_speech/parrot/perform(seconds_per_tick, datum/ai_controller/controller, speech, speech_sound) +/datum/ai_behavior/perform_speech/parrot/perform(seconds_per_tick, datum/ai_controller/controller, list/speech, speech_sound) var/mob/living/basic/parrot/speaking_pawn = controller.pawn var/list/available_channels = speaking_pawn.get_available_channels() - var/modified_speech = speech + var/modified_speech = speech["line"] var/use_radio = prob(50) // we might not even use the radio if we even have a channel -#define HAS_CHANNEL_PREFIX (speech[1] in GLOB.department_radio_prefixes) && (copytext_char(speech, 2, 3) in GLOB.department_radio_keys) // determine if we need to crop the channel prefix + var/has_channel_prefix = (modified_speech[1] in GLOB.department_radio_prefixes) && (copytext_char(modified_speech, 2, 3) in GLOB.department_radio_keys) // determine if we need to crop the channel prefix if(!length(available_channels)) // might not even use the radio at all - if(HAS_CHANNEL_PREFIX) - modified_speech = copytext_char(speech, 3) + if(has_channel_prefix) + modified_speech = copytext_char(modified_speech, 3) else - if(HAS_CHANNEL_PREFIX) - modified_speech = "[use_radio ? pick(available_channels) : ""][copytext_char(speech, 3)]" + if(has_channel_prefix) + modified_speech = "[use_radio ? pick(available_channels) : ""][copytext_char(modified_speech, 3)]" else - modified_speech = "[use_radio ? pick(available_channels) : ""][speech]" - + modified_speech = "[use_radio ? pick(available_channels) : ""][modified_speech]" + if(SStts.tts_enabled) + modify_voice(speaking_pawn, speech) speaking_pawn.say(modified_speech, forced = "AI Controller") if(speech_sound) playsound(speaking_pawn, speech_sound, 80, vary = TRUE) return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED -#undef HAS_CHANNEL_PREFIX +/datum/ai_behavior/perform_speech/parrot/proc/modify_voice(mob/living/speaking_pawn, list/speech) + if(SStts.available_speakers.Find(speech["voice"])) + speaking_pawn.voice = speech["voice"] + if(speech["pitch"] && SStts.pitch_enabled) + speaking_pawn.pitch = min(speech["pitch"] + rand(6, 12), MAXIMUM_PARROT_PITCH) + +/datum/ai_behavior/perform_speech/parrot/finish_action(datum/ai_controller/controller, succeeded) + . = ..() + if(!succeeded) + return + var/mob/living/living_pawn = controller.pawn + living_pawn.voice = living_pawn::voice + living_pawn.pitch = living_pawn::pitch + +#undef MAXIMUM_PARROT_PITCH diff --git a/code/modules/mob/living/basic/slime/ai/behaviours.dm b/code/modules/mob/living/basic/slime/ai/behaviours.dm index e573bd57354f7..1cd4677994531 100644 --- a/code/modules/mob/living/basic/slime/ai/behaviours.dm +++ b/code/modules/mob/living/basic/slime/ai/behaviours.dm @@ -32,6 +32,10 @@ if(REF(dinner) in hunter.faction) //Don't eat our friends... return + var/static/list/slime_faction = list(FACTION_SLIME) + if(faction_check(slime_faction, dinner.faction)) //Don't try to eat slimy things, no matter how hungry we are. Anyone else can be betrayed. + return + if(!hunter.can_feed_on(dinner, check_adjacent = FALSE)) //Are they tasty to slimes? return diff --git a/code/modules/mob/living/basic/slime/defense.dm b/code/modules/mob/living/basic/slime/defense.dm index b747c24201971..a3242525170c7 100644 --- a/code/modules/mob/living/basic/slime/defense.dm +++ b/code/modules/mob/living/basic/slime/defense.dm @@ -19,7 +19,7 @@ return attacker.visible_message(span_warning("[attacker] manages to wrestle \the [defender_slime.name] off!"), span_notice("You manage to wrestle \the [defender_slime.name] off!")) - playsound(loc, 'sound/weapons/thudswoosh.ogg', 50, TRUE, -1) + playsound(loc, 'sound/weapons/shove.ogg', 50, TRUE, -1) defender_slime.discipline_slime() diff --git a/code/modules/mob/living/basic/slime/life.dm b/code/modules/mob/living/basic/slime/life.dm index 68cd33ce7750b..d101b48fea7a1 100644 --- a/code/modules/mob/living/basic/slime/life.dm +++ b/code/modules/mob/living/basic/slime/life.dm @@ -36,10 +36,10 @@ ///Handles the consumption of nutrition, and growth /mob/living/basic/slime/proc/handle_nutrition(seconds_per_tick = SSMOBS_DT) if(hunger_disabled) //God as my witness, I will never go hungry again - set_nutrition(700) + set_nutrition(100) return - if(SPT_PROB(7.5, seconds_per_tick)) + if(SPT_PROB(1.25, seconds_per_tick)) adjust_nutrition((life_stage == SLIME_LIFE_STAGE_ADULT ? -1 : -0.5) * seconds_per_tick) if(nutrition < SLIME_STARVE_NUTRITION) @@ -63,7 +63,7 @@ if (SLIME_GROW_NUTRITION <= nutrition) if(amount_grown < SLIME_EVOLUTION_THRESHOLD) - adjust_nutrition(-10 * seconds_per_tick) + adjust_nutrition(-2.5 * seconds_per_tick) amount_grown++ if(powerlevel < SLIME_MAX_POWER && SPT_PROB(30-powerlevel*2, seconds_per_tick)) diff --git a/code/modules/mob/living/basic/slime/slime.dm b/code/modules/mob/living/basic/slime/slime.dm index 63c738b965294..fa40ac28d816d 100644 --- a/code/modules/mob/living/basic/slime/slime.dm +++ b/code/modules/mob/living/basic/slime/slime.dm @@ -6,13 +6,13 @@ /mob/living/basic/slime name = "grey baby slime (123)" icon = 'icons/mob/simple/slimes.dmi' - icon_state = "grey baby slime" + icon_state = "grey-baby" pass_flags = PASSTABLE | PASSGRILLE gender = NEUTER faction = list(FACTION_SLIME, FACTION_NEUTRAL) - icon_living = "grey baby slime" - icon_dead = "grey baby slime dead" + icon_living = "grey-baby" + icon_dead = "grey-baby-dead" attack_sound = 'sound/weapons/bite.ogg' @@ -187,8 +187,10 @@ /mob/living/basic/slime/regenerate_icons() cut_overlays() - var/icon_text = "[slime_type.colour] [life_stage] slime" - icon_dead = "[icon_text] dead" + if(slime_type.transparent) + alpha = SLIME_TRANSPARENCY_ALPHA + var/icon_text = "[slime_type.colour]-[life_stage]" + icon_dead = "[icon_text]-dead" if(stat != DEAD) icon_state = icon_text if(current_mood && current_mood != SLIME_MOOD_NONE && !stat) @@ -204,12 +206,11 @@ . += "Growth: [amount_grown]/[SLIME_EVOLUTION_THRESHOLD]" . += "Power Level: [powerlevel]/[SLIME_MAX_POWER]" -/mob/living/basic/slime/MouseDrop(atom/movable/target_atom as mob|obj) - if(isliving(target_atom) && target_atom != src && usr == src) +/mob/living/basic/slime/mouse_drop_dragged(atom/target_atom, mob/user) + if(isliving(target_atom) && target_atom != src && user == src) var/mob/living/food = target_atom if(can_feed_on(food)) start_feeding(food) - return ..() ///Slimes can hop off mobs they have latched onto /mob/living/basic/slime/resist_buckle() diff --git a/code/modules/mob/living/basic/slime/slime_type.dm b/code/modules/mob/living/basic/slime/slime_type.dm index 11f3798804017..048f861eeb08a 100644 --- a/code/modules/mob/living/basic/slime/slime_type.dm +++ b/code/modules/mob/living/basic/slime/slime_type.dm @@ -1,6 +1,8 @@ /datum/slime_type ///Our slime's colour as text. Used by both description, and icon var/colour + ///Whether the slime icons should be semi-transparent + var/transparent = FALSE ///The type our slime spawns var/core_type ///The possible mutations of our slime @@ -12,6 +14,7 @@ /datum/slime_type/grey colour = SLIME_TYPE_GREY + transparent = TRUE core_type = /obj/item/slime_extract/grey mutations = list( /datum/slime_type/blue = 1, @@ -21,11 +24,11 @@ ) rgb_code = COLOR_SLIME_GREY - //TIER 1 /datum/slime_type/blue colour = SLIME_TYPE_BLUE + transparent = TRUE core_type = /obj/item/slime_extract/blue mutations = list( /datum/slime_type/darkblue = 1, @@ -46,6 +49,7 @@ /datum/slime_type/purple colour = SLIME_TYPE_PURPLE + transparent = TRUE core_type = /obj/item/slime_extract/purple mutations = list( /datum/slime_type/darkblue = 1, @@ -56,6 +60,7 @@ /datum/slime_type/orange colour = SLIME_TYPE_ORANGE + transparent = TRUE core_type = /obj/item/slime_extract/orange mutations = list( /datum/slime_type/darkpurple = 1, @@ -68,6 +73,7 @@ /datum/slime_type/darkblue colour = SLIME_TYPE_DARK_BLUE + transparent = TRUE core_type = /obj/item/slime_extract/darkblue mutations = list( /datum/slime_type/blue = 1, @@ -98,6 +104,7 @@ /datum/slime_type/yellow colour = SLIME_TYPE_YELLOW + transparent = TRUE core_type = /obj/item/slime_extract/yellow mutations = list( /datum/slime_type/bluespace = 2, @@ -119,6 +126,7 @@ /datum/slime_type/cerulean colour = SLIME_TYPE_CERULEAN + transparent = TRUE core_type = /obj/item/slime_extract/cerulean mutations = list( /datum/slime_type/cerulean = 1, @@ -135,6 +143,7 @@ /datum/slime_type/sepia colour = SLIME_TYPE_SEPIA + transparent = TRUE core_type = /obj/item/slime_extract/sepia mutations = list( /datum/slime_type/sepia = 1, @@ -154,6 +163,7 @@ /datum/slime_type/green colour = SLIME_TYPE_GREEN + transparent = TRUE core_type = /obj/item/slime_extract/green mutations = list( /datum/slime_type/black = 1, @@ -163,6 +173,7 @@ /datum/slime_type/pink colour = SLIME_TYPE_PINK + transparent = TRUE core_type = /obj/item/slime_extract/pink mutations = list( /datum/slime_type/lightpink = 1, @@ -172,6 +183,7 @@ /datum/slime_type/red colour = SLIME_TYPE_RED + transparent = TRUE core_type = /obj/item/slime_extract/red mutations = list( /datum/slime_type/oil = 1, @@ -191,6 +203,7 @@ /datum/slime_type/black colour = SLIME_TYPE_BLACK + transparent = TRUE core_type = /obj/item/slime_extract/black mutations = list( /datum/slime_type/black = 1, @@ -199,6 +212,7 @@ /datum/slime_type/lightpink colour = SLIME_TYPE_LIGHT_PINK + transparent = TRUE core_type = /obj/item/slime_extract/lightpink mutations = list( /datum/slime_type/lightpink = 1, @@ -217,6 +231,7 @@ /datum/slime_type/rainbow colour = SLIME_TYPE_RAINBOW + transparent = TRUE core_type = /obj/item/slime_extract/rainbow mutations = list( /datum/slime_type/rainbow = 1, diff --git a/code/modules/mob/living/basic/space_fauna/bear/_bear.dm b/code/modules/mob/living/basic/space_fauna/bear/_bear.dm index c528819b5bb4a..f4a1267e9db70 100644 --- a/code/modules/mob/living/basic/space_fauna/bear/_bear.dm +++ b/code/modules/mob/living/basic/space_fauna/bear/_bear.dm @@ -82,6 +82,15 @@ icon_dead = "snowbear_dead" desc = "It's a polar bear, in space, but not actually in space." +/mob/living/basic/bear/snow/misha + name = "Misha" + real_name = "Misha" + desc = "Tamed and trained by the Head of Security. Only beasts are above deceit." + gold_core_spawnable = NO_SPAWN + maxHealth = 250 + health = 250 + faction = list(FACTION_NEUTRAL) + /mob/living/basic/bear/snow/ancient name = "ancient polar bear" desc = "A grizzled old polar bear, its hide thick enough to make it impervious to almost all weapons." diff --git a/code/modules/mob/living/basic/space_fauna/carp/carp.dm b/code/modules/mob/living/basic/space_fauna/carp/carp.dm index ee2073987dae2..816bb7cd838e1 100644 --- a/code/modules/mob/living/basic/space_fauna/carp/carp.dm +++ b/code/modules/mob/living/basic/space_fauna/carp/carp.dm @@ -20,7 +20,6 @@ icon_gib = "carp_gib" gold_core_spawnable = HOSTILE_SPAWN mob_biotypes = MOB_ORGANIC | MOB_BEAST - movement_type = FLYING health = 25 maxHealth = 25 pressure_resistance = 200 diff --git a/code/modules/mob/living/basic/space_fauna/ghost.dm b/code/modules/mob/living/basic/space_fauna/ghost.dm index 7545f9cfea394..728c5ead9f4a8 100644 --- a/code/modules/mob/living/basic/space_fauna/ghost.dm +++ b/code/modules/mob/living/basic/space_fauna/ghost.dm @@ -71,7 +71,7 @@ ghost_facial_hair_color = ghost_hair_color if(!isnull(ghost_hairstyle) && ghost_hairstyle != "Bald") //Bald hairstyle and the Shaved facial hairstyle lack an associated sprite and will not properly generate hair, and just cause runtimes. - var/datum/sprite_accessory/hair/hair_style = GLOB.hairstyles_list[ghost_hairstyle] //We use the hairstyle name to get the sprite accessory, which we copy the icon_state from. + var/datum/sprite_accessory/hair/hair_style = SSaccessories.hairstyles_list[ghost_hairstyle] //We use the hairstyle name to get the sprite accessory, which we copy the icon_state from. ghost_hair = mutable_appearance('icons/mob/human/human_face.dmi', "[hair_style.icon_state]", -HAIR_LAYER) ghost_hair.alpha = 200 ghost_hair.color = ghost_hair_color @@ -79,7 +79,7 @@ add_overlay(ghost_hair) if(!isnull(ghost_facial_hairstyle) && ghost_facial_hairstyle != "Shaved") - var/datum/sprite_accessory/facial_hair_style = GLOB.facial_hairstyles_list[ghost_facial_hairstyle] + var/datum/sprite_accessory/facial_hair_style = SSaccessories.facial_hairstyles_list[ghost_facial_hairstyle] ghost_facial_hair = mutable_appearance('icons/mob/human/human_face.dmi', "[facial_hair_style.icon_state]", -HAIR_LAYER) ghost_facial_hair.alpha = 200 ghost_facial_hair.color = ghost_facial_hair_color diff --git a/code/modules/mob/living/basic/space_fauna/regal_rat/regal_rat_actions.dm b/code/modules/mob/living/basic/space_fauna/regal_rat/regal_rat_actions.dm index df7eb0c42b3b5..feb6ebb7c3b66 100644 --- a/code/modules/mob/living/basic/space_fauna/regal_rat/regal_rat_actions.dm +++ b/code/modules/mob/living/basic/space_fauna/regal_rat/regal_rat_actions.dm @@ -15,6 +15,15 @@ button_icon_state = "coffer" shared_cooldown = NONE +/datum/action/cooldown/mob_cooldown/domain/IsAvailable(feedback = FALSE) + . = ..() + if (!.) + return FALSE + if (owner.movement_type & VENTCRAWLING) + if (feedback) + owner.balloon_alert(owner, "can't use while ventcrawling!") + return FALSE + /datum/action/cooldown/mob_cooldown/domain/proc/domain() var/turf/location = get_turf(owner) location.atmos_spawn_air("[GAS_MIASMA]=4;[TURF_TEMPERATURE(T20C)]") @@ -69,6 +78,15 @@ /datum/pet_command/point_targeting/attack/glockroach ) +/datum/action/cooldown/mob_cooldown/riot/IsAvailable(feedback = FALSE) + . = ..() + if (!.) + return FALSE + if (owner.movement_type & VENTCRAWLING) + if (feedback) + owner.balloon_alert(owner, "can't use while ventcrawling!") + return FALSE + /datum/action/cooldown/mob_cooldown/riot/Activate(atom/target) StartCooldown(10 SECONDS) riot() diff --git a/code/modules/mob/living/basic/space_fauna/revenant/_revenant.dm b/code/modules/mob/living/basic/space_fauna/revenant/_revenant.dm index 21943d39d3d1b..a154ba9da0c65 100644 --- a/code/modules/mob/living/basic/space_fauna/revenant/_revenant.dm +++ b/code/modules/mob/living/basic/space_fauna/revenant/_revenant.dm @@ -102,7 +102,7 @@ RegisterSignal(src, COMSIG_LIVING_BANED, PROC_REF(on_baned)) RegisterSignal(src, COMSIG_MOVABLE_PRE_MOVE, PROC_REF(on_move)) RegisterSignal(src, COMSIG_LIVING_LIFE, PROC_REF(on_life)) - set_random_revenant_name() + name = generate_random_mob_name() GLOB.revenant_relay_mobs |= src @@ -150,6 +150,10 @@ update_appearance(UPDATE_ICON) update_health_hud() +/mob/living/basic/revenant/AltClickOn(atom/target) + if(CAN_I_SEE(target)) + client.loot_panel.open(get_turf(target)) + /mob/living/basic/revenant/get_status_tab_items() . = ..() . += "Current Essence: [essence >= max_essence ? essence : "[essence] / [max_essence]"] E" @@ -281,7 +285,7 @@ /mob/living/basic/revenant/gib() death() -/mob/living/basic/revenant/can_perform_action(atom/movable/target, action_bitflags) +/mob/living/basic/revenant/can_perform_action(atom/target, action_bitflags) return FALSE /mob/living/basic/revenant/ex_act(severity, target) @@ -357,13 +361,13 @@ returnable_list += span_bold("Be sure to read the wiki page to learn more.") return returnable_list -/mob/living/basic/revenant/proc/set_random_revenant_name() +/mob/living/basic/revenant/generate_random_mob_name() var/list/built_name_strings = list() built_name_strings += pick(strings(REVENANT_NAME_FILE, "spirit_type")) built_name_strings += " of " built_name_strings += pick(strings(REVENANT_NAME_FILE, "adverb")) built_name_strings += pick(strings(REVENANT_NAME_FILE, "theme")) - name = built_name_strings.Join("") + return built_name_strings.Join("") /mob/living/basic/revenant/proc/on_baned(obj/item/weapon, mob/living/user) SIGNAL_HANDLER diff --git a/code/modules/mob/living/basic/space_fauna/robot_customer.dm b/code/modules/mob/living/basic/space_fauna/robot_customer.dm index aa5e4635f5888..667adb7d268dd 100644 --- a/code/modules/mob/living/basic/space_fauna/robot_customer.dm +++ b/code/modules/mob/living/basic/space_fauna/robot_customer.dm @@ -10,6 +10,7 @@ icon_state = "amerifat" icon_living = "amerifat" + max_grab = GRAB_AGGRESSIVE basic_mob_flags = DEL_ON_DEATH mob_biotypes = MOB_ROBOTIC|MOB_HUMANOID sentience_type = SENTIENCE_ARTIFICIAL diff --git a/code/modules/mob/living/basic/space_fauna/space_dragon/space_dragon.dm b/code/modules/mob/living/basic/space_fauna/space_dragon/space_dragon.dm index bbefe37606b96..1776e69358139 100644 --- a/code/modules/mob/living/basic/space_fauna/space_dragon/space_dragon.dm +++ b/code/modules/mob/living/basic/space_fauna/space_dragon/space_dragon.dm @@ -4,7 +4,7 @@ #define DOAFTER_SOURCE_SPACE_DRAGON_INTERACTION "space dragon interaction" /** - * Advanced stage of the space carp life cycle, spawned as a midround antagonist or via traitor transformation. + * Advanced stage of the space carp life cycle, spawned as a midround antagonist * Can eat corpses to heal, blow people back with its wings, and obviously as a dragon it breathes fire. It can even tear through walls. * The midround even version also creates rifts which summon carp, and heals when near them. */ @@ -28,7 +28,6 @@ damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 1, STAMINA = 0.5, OXY = 1) combat_mode = TRUE speed = 0 - movement_type = FLYING attack_verb_continuous = "chomps" attack_verb_simple = "chomp" attack_sound = 'sound/magic/demon_attack1.ogg' @@ -48,6 +47,9 @@ death_message = "screeches in agony as it collapses to the floor, its life extinguished." butcher_results = list(/obj/item/stack/ore/diamond = 5, /obj/item/stack/sheet/sinew = 5, /obj/item/stack/sheet/bone = 30) can_buckle_to = FALSE + lighting_cutoff_red = 12 + lighting_cutoff_green = 15 + lighting_cutoff_blue = 34 /// The colour of the space dragon var/chosen_colour @@ -78,6 +80,11 @@ buffet = new(src) buffet.Grant(src) +/mob/living/basic/space_dragon/Destroy() + fire_breath = null + buffet = null + return ..() + /mob/living/basic/space_dragon/Login() . = ..() if(!isnull(chosen_colour)) diff --git a/code/modules/mob/living/basic/space_fauna/spider/giant_spider/giant_spiders.dm b/code/modules/mob/living/basic/space_fauna/spider/giant_spider/giant_spiders.dm index 90240d87b999e..f293f1dcbaacd 100644 --- a/code/modules/mob/living/basic/space_fauna/spider/giant_spider/giant_spiders.dm +++ b/code/modules/mob/living/basic/space_fauna/spider/giant_spider/giant_spiders.dm @@ -20,6 +20,7 @@ gold_core_spawnable = HOSTILE_SPAWN ai_controller = /datum/ai_controller/basic_controller/giant_spider bite_injection_flags = INJECT_CHECK_PENETRATE_THICK + max_grab = GRAB_AGGRESSIVE /// Actions to grant on Initialize var/list/innate_actions = null @@ -182,8 +183,9 @@ datahud.show_to(src) AddComponent(/datum/component/healing_touch,\ - heal_brute = 25,\ - heal_burn = 25,\ + heal_brute = 10,\ + heal_burn = 10,\ + heal_time = 2.5 SECONDS,\ interaction_key = DOAFTER_SOURCE_SPIDER,\ valid_targets_typecache = typecacheof(list(/mob/living/basic/spider/giant)),\ action_text = "%SOURCE% begins wrapping the wounds of %TARGET%.",\ @@ -317,7 +319,7 @@ melee_damage_lower = 5 melee_damage_upper = 10 unsuitable_atmos_damage = 0 - minimum_survivable_temperature = 0 + minimum_survivable_temperature = 75 maximum_survivable_temperature = 700 unsuitable_cold_damage = 0 wound_bonus = 25 @@ -329,7 +331,7 @@ speed = 5 player_speed_modifier = -4 sight = SEE_TURFS - menu_description = "Atmospherically resistant with the ability to destroy walls and limbs, and to send warnings to the nest." + menu_description = "Has the ability to destroy walls and limbs, and to send warnings to the nest." /mob/living/basic/spider/giant/breacher/Initialize(mapload) . = ..() diff --git a/code/modules/mob/living/basic/space_fauna/wumborian_fugu/fugu_gland.dm b/code/modules/mob/living/basic/space_fauna/wumborian_fugu/fugu_gland.dm index 04d52cf62125a..f936caa1d51ef 100644 --- a/code/modules/mob/living/basic/space_fauna/wumborian_fugu/fugu_gland.dm +++ b/code/modules/mob/living/basic/space_fauna/wumborian_fugu/fugu_gland.dm @@ -18,18 +18,17 @@ /mob/living/basic/guardian, )) -/obj/item/fugu_gland/afterattack(atom/target, mob/user, proximity_flag) - . = ..() - if(!proximity_flag || !isanimal_or_basicmob(target) || fugu_blacklist[target.type]) - return - var/mob/living/animal = target +/obj/item/fugu_gland/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + if(!isanimal_or_basicmob(interacting_with) || fugu_blacklist[interacting_with.type]) + return NONE + var/mob/living/animal = interacting_with if(animal.stat == DEAD || HAS_TRAIT(animal, TRAIT_FAKEDEATH)) balloon_alert(user, "it's dead!") - return + return ITEM_INTERACT_BLOCKING if(HAS_TRAIT(animal, TRAIT_FUGU_GLANDED)) balloon_alert(user, "already large!") - return + return ITEM_INTERACT_BLOCKING ADD_TRAIT(animal, TRAIT_FUGU_GLANDED, type) animal.AddComponent(/datum/component/seethrough_mob) @@ -41,3 +40,4 @@ animal.AddElement(/datum/element/wall_tearer) to_chat(user, span_info("You increase the size of [animal], giving [animal.p_them()] a surge of strength!")) qdel(src) + return ITEM_INTERACT_SUCCESS diff --git a/code/modules/mob/living/basic/space_fauna/wumborian_fugu/inflation.dm b/code/modules/mob/living/basic/space_fauna/wumborian_fugu/inflation.dm index 70b3506527a18..bba6e0eb460c6 100644 --- a/code/modules/mob/living/basic/space_fauna/wumborian_fugu/inflation.dm +++ b/code/modules/mob/living/basic/space_fauna/wumborian_fugu/inflation.dm @@ -39,6 +39,7 @@ id = "wumbo_inflated" duration = 10 SECONDS alert_type = /atom/movable/screen/alert/status_effect/inflated + show_duration = TRUE /atom/movable/screen/alert/status_effect/inflated name = "WUMBO" diff --git a/code/modules/mob/living/basic/vermin/cockroach.dm b/code/modules/mob/living/basic/vermin/cockroach.dm index 224c716153960..0680de631cbae 100644 --- a/code/modules/mob/living/basic/vermin/cockroach.dm +++ b/code/modules/mob/living/basic/vermin/cockroach.dm @@ -68,6 +68,10 @@ blackboard = list( BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, BB_PET_TARGETING_STRATEGY = /datum/targeting_strategy/basic/not_friends, + BB_OWNER_SELF_HARM_RESPONSES = list( + "*me waves its antennae in disapproval.", + "*me chitters sadly." + ) ) ai_traits = STOP_MOVING_WHEN_PULLED diff --git a/code/modules/mob/living/basic/vermin/frog.dm b/code/modules/mob/living/basic/vermin/frog.dm index 5f7cfe6d90d2c..a674169dbd5ce 100644 --- a/code/modules/mob/living/basic/vermin/frog.dm +++ b/code/modules/mob/living/basic/vermin/frog.dm @@ -81,7 +81,8 @@ /mob/living/basic/frog/icemoon_facility name = "Peter Jr." desc = "They seem a little cold." - minimum_survivable_temperature = ICEBOX_MIN_TEMPERATURE + minimum_survivable_temperature = BODYTEMP_COLD_ICEBOX_SAFE + pressure_resistance = 200 habitable_atmos = null gold_core_spawnable = NO_SPAWN @@ -110,6 +111,10 @@ blackboard = list( BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, BB_PET_TARGETING_STRATEGY = /datum/targeting_strategy/basic/not_friends, + BB_OWNER_SELF_HARM_RESPONSES = list( + "*me licks its own eyeballs in disapproval.", + "*me croaks sadly." + ) ) ai_movement = /datum/ai_movement/basic_avoidance diff --git a/code/modules/mob/living/basic/vermin/mothroach.dm b/code/modules/mob/living/basic/vermin/mothroach/mothroach.dm similarity index 88% rename from code/modules/mob/living/basic/vermin/mothroach.dm rename to code/modules/mob/living/basic/vermin/mothroach/mothroach.dm index 4c06665a14afc..a0079065de437 100644 --- a/code/modules/mob/living/basic/vermin/mothroach.dm +++ b/code/modules/mob/living/basic/vermin/mothroach/mothroach.dm @@ -36,6 +36,10 @@ /mob/living/basic/mothroach/Initialize(mapload) . = ..() + var/static/list/food_types = list(/obj/item/clothing) + AddElement(/datum/element/basic_eating, food_types = food_types) + ai_controller.set_blackboard_key(BB_BASIC_FOODS, typecacheof(food_types)) + AddElement(/datum/element/ai_retaliate) AddElement(/datum/element/pet_bonus, "squeaks happily!") add_verb(src, /mob/living/proc/toggle_resting) ADD_TRAIT(src, TRAIT_VENTCRAWLER_ALWAYS, INNATE_TRAIT) @@ -64,16 +68,6 @@ else playsound(loc, 'sound/voice/moth/scream_moth.ogg', 50, TRUE) -/datum/ai_controller/basic_controller/mothroach - blackboard = list() - - ai_traits = STOP_MOVING_WHEN_PULLED - ai_movement = /datum/ai_movement/basic_avoidance - idle_behavior = /datum/idle_behavior/idle_random_walk - planning_subtrees = list( - /datum/ai_planning_subtree/random_speech/mothroach, - ) - /mob/living/basic/mothroach/bar name = "mothroach bartender" desc = "A mothroach serving drinks. Look at him go." diff --git a/code/modules/mob/living/basic/vermin/mothroach/mothroach_ai.dm b/code/modules/mob/living/basic/vermin/mothroach/mothroach_ai.dm new file mode 100644 index 0000000000000..5ef330cdc64f9 --- /dev/null +++ b/code/modules/mob/living/basic/vermin/mothroach/mothroach_ai.dm @@ -0,0 +1,35 @@ +#define MOTHROACH_EAT_TIMER 1 MINUTES + +/datum/ai_controller/basic_controller/mothroach + blackboard = list( + BB_FLEE_TARGETING_STRATEGY = /datum/targeting_strategy/basic, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic/allow_items, + ) + + ai_traits = STOP_MOVING_WHEN_PULLED + ai_movement = /datum/ai_movement/basic_avoidance + idle_behavior = /datum/idle_behavior/idle_random_walk + planning_subtrees = list( + /datum/ai_planning_subtree/find_food/mothroach, + /datum/ai_planning_subtree/target_retaliate/to_flee, + /datum/ai_planning_subtree/flee_target/from_flee_key, + /datum/ai_planning_subtree/basic_melee_attack_subtree, + /datum/ai_planning_subtree/random_speech/mothroach, + ) + +/datum/ai_controller/basic_controller/mothroach/TryPossessPawn(atom/new_pawn) + . = ..() + if(. & AI_CONTROLLER_INCOMPATIBLE) + return + RegisterSignal(new_pawn, COMSIG_MOB_ATE, PROC_REF(on_eaten)) + +/datum/ai_controller/basic_controller/mothroach/proc/on_eaten(datum/source) + SIGNAL_HANDLER + set_blackboard_key(BB_MOTHROACH_NEXT_EAT, world.time + MOTHROACH_EAT_TIMER) + +/datum/ai_planning_subtree/find_food/mothroach/SelectBehaviors(datum/ai_controller/controller, seconds_per_tick) + if(world.time < controller.blackboard[BB_MOTHROACH_NEXT_EAT]) + return + return ..() + +#undef MOTHROACH_EAT_TIMER diff --git a/code/modules/mob/living/basic/vermin/mouse.dm b/code/modules/mob/living/basic/vermin/mouse.dm index cf12c2b4083d5..724833af16f2a 100644 --- a/code/modules/mob/living/basic/vermin/mouse.dm +++ b/code/modules/mob/living/basic/vermin/mouse.dm @@ -117,11 +117,19 @@ . = ..(TRUE) // Now if we were't ACTUALLY gibbed, spawn the dead mouse if(!gibbed) - var/obj/item/food/deadmouse/mouse = new(loc) - mouse.copy_corpse(src) - if(HAS_TRAIT(src, TRAIT_BEING_SHOCKED)) - mouse.desc = "They're toast." - mouse.add_atom_colour("#3A3A3A", FIXED_COLOUR_PRIORITY) + var/make_a_corpse = TRUE + var/place_to_make_corpse = loc + if(istype(loc, /obj/item/clothing/head/mob_holder))//If our mouse is dying in place holder we want to put the dead mouse where the place holder was + var/obj/item/clothing/head/mob_holder/found_holder = loc + place_to_make_corpse = found_holder.loc + if(istype(found_holder.loc, /obj/machinery/microwave))//Microwaves gib things that die when cooked, so we don't need to make a dead body too + make_a_corpse = FALSE + if(make_a_corpse) + var/obj/item/food/deadmouse/mouse = new(place_to_make_corpse) + mouse.copy_corpse(src) + if(HAS_TRAIT(src, TRAIT_BEING_SHOCKED)) + mouse.desc = "They're toast." + mouse.add_atom_colour("#3A3A3A", FIXED_COLOUR_PRIORITY) qdel(src) /mob/living/basic/mouse/UnarmedAttack(atom/attack_target, proximity_flag, list/modifiers) @@ -352,18 +360,18 @@ return ..() -/obj/item/food/deadmouse/afterattack(obj/target, mob/living/user, proximity_flag) - . = ..() - if(proximity_flag && reagents && target.is_open_container()) - . |= AFTERATTACK_PROCESSED_ITEM - // is_open_container will not return truthy if target.reagents doesn't exist - var/datum/reagents/target_reagents = target.reagents - var/trans_amount = reagents.maximum_volume - reagents.total_volume * (4 / 3) - if(target_reagents.has_reagent(/datum/reagent/fuel) && target_reagents.trans_to(src, trans_amount)) - to_chat(user, span_notice("You dip [src] into [target].")) - else - to_chat(user, span_warning("That's a terrible idea.")) - return . +/obj/item/food/deadmouse/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + if(isnull(reagents) || !interacting_with.is_open_container()) + return NONE + + // is_open_container will not return truthy if target.reagents doesn't exist + var/datum/reagents/target_reagents = interacting_with.reagents + var/trans_amount = reagents.maximum_volume - reagents.total_volume * (4 / 3) + if(target_reagents.has_reagent(/datum/reagent/fuel) && target_reagents.trans_to(src, trans_amount)) + to_chat(user, span_notice("You dip [src] into [interacting_with].")) + else + to_chat(user, span_warning("That's a terrible idea.")) + return ITEM_INTERACT_BLOCKING /obj/item/food/deadmouse/moldy name = "moldy dead mouse" @@ -416,6 +424,11 @@ BB_BASIC_MOB_CURRENT_TARGET = null, // heathen BB_CURRENT_HUNTING_TARGET = null, // cheese BB_LOW_PRIORITY_HUNTING_TARGET = null, // cable + BB_OWNER_SELF_HARM_RESPONSES = list( + "*me cleans its whiskers in disapproval.", + "*me squeaks sadly.", + "*me sheds a single small tear." + ) ) ai_traits = STOP_MOVING_WHEN_PULLED diff --git a/code/modules/mob/living/blood.dm b/code/modules/mob/living/blood.dm index 349f14d83a3cb..8b970605af84a 100644 --- a/code/modules/mob/living/blood.dm +++ b/code/modules/mob/living/blood.dm @@ -25,42 +25,12 @@ adjust_nutrition(-nutrition_ratio * HUNGER_FACTOR * seconds_per_tick) blood_volume = min(blood_volume + (BLOOD_REGEN_FACTOR * nutrition_ratio * seconds_per_tick), BLOOD_VOLUME_NORMAL) - //Effects of bloodloss - if(!(sigreturn & HANDLE_BLOOD_NO_EFFECTS)) - var/word = pick("dizzy","woozy","faint") - switch(blood_volume) - if(BLOOD_VOLUME_MAX_LETHAL to INFINITY) - if(SPT_PROB(7.5, seconds_per_tick)) - to_chat(src, span_userdanger("Blood starts to tear your skin apart. You're going to burst!")) - investigate_log("has been gibbed by having too much blood.", INVESTIGATE_DEATHS) - inflate_gib() - if(BLOOD_VOLUME_EXCESS to BLOOD_VOLUME_MAX_LETHAL) - if(SPT_PROB(5, seconds_per_tick)) - to_chat(src, span_warning("You feel your skin swelling.")) - if(BLOOD_VOLUME_MAXIMUM to BLOOD_VOLUME_EXCESS) - if(SPT_PROB(5, seconds_per_tick)) - to_chat(src, span_warning("You feel terribly bloated.")) - if(BLOOD_VOLUME_OKAY to BLOOD_VOLUME_SAFE) - if(SPT_PROB(2.5, seconds_per_tick)) - to_chat(src, span_warning("You feel [word].")) - adjustOxyLoss(round(0.005 * (BLOOD_VOLUME_NORMAL - blood_volume) * seconds_per_tick, 1)) - if(BLOOD_VOLUME_BAD to BLOOD_VOLUME_OKAY) - adjustOxyLoss(round(0.01 * (BLOOD_VOLUME_NORMAL - blood_volume) * seconds_per_tick, 1)) - if(SPT_PROB(2.5, seconds_per_tick)) - set_eye_blur_if_lower(12 SECONDS) - to_chat(src, span_warning("You feel very [word].")) - if(BLOOD_VOLUME_SURVIVE to BLOOD_VOLUME_BAD) - adjustOxyLoss(2.5 * seconds_per_tick) - if(SPT_PROB(7.5, seconds_per_tick)) - Unconscious(rand(20,60)) - to_chat(src, span_warning("You feel extremely [word].")) - if(-INFINITY to BLOOD_VOLUME_SURVIVE) - if(!HAS_TRAIT(src, TRAIT_NODEATH)) - investigate_log("has died of bloodloss.", INVESTIGATE_DEATHS) - death() + // Some effects are halved mid-combat. + var/determined_mod = has_status_effect(/datum/status_effect/determined) ? 0.5 : 0 + + //Bloodloss from wounds var/temp_bleed = 0 - //Bleeding out for(var/obj/item/bodypart/iter_part as anything in bodyparts) var/iter_bleed_rate = iter_part.get_modified_bleed_rate() temp_bleed += iter_bleed_rate * seconds_per_tick @@ -72,6 +42,78 @@ bleed(temp_bleed) bleed_warn(temp_bleed) + //Effects of bloodloss + if(sigreturn & HANDLE_BLOOD_NO_OXYLOSS) + return + var/word = pick("dizzy","woozy","faint") + switch(blood_volume) + if(BLOOD_VOLUME_EXCESS to BLOOD_VOLUME_MAX_LETHAL) + if(SPT_PROB(7.5, seconds_per_tick)) + to_chat(src, span_userdanger("Blood starts to tear your skin apart. You're going to burst!")) + investigate_log("has been gibbed by having too much blood.", INVESTIGATE_DEATHS) + inflate_gib() + // Way too much blood! + if(BLOOD_VOLUME_EXCESS to BLOOD_VOLUME_MAX_LETHAL) + if(SPT_PROB(5, seconds_per_tick)) + to_chat(src, span_warning("You feel your skin swelling.")) + // Too much blood + if(BLOOD_VOLUME_MAXIMUM to BLOOD_VOLUME_EXCESS) + if(SPT_PROB(5, seconds_per_tick)) + to_chat(src, span_warning("You feel terribly bloated.")) + // Low blood but not a big deal in the immediate + if(BLOOD_VOLUME_OKAY to BLOOD_VOLUME_SAFE) + if(SPT_PROB(2.5, seconds_per_tick)) + set_eye_blur_if_lower(2 SECONDS * determined_mod) + if(prob(50)) + to_chat(src, span_danger("You feel [word]. It's getting a bit hard to breathe.")) + losebreath += 0.5 * determined_mod * seconds_per_tick + else if(getStaminaLoss() < 25 * determined_mod) + to_chat(src, span_danger("You feel [word]. It's getting a bit hard to focus.")) + adjustStaminaLoss(10 * determined_mod * REM * seconds_per_tick) + // Pretty low blood, getting dangerous! + if(BLOOD_VOLUME_RISKY to BLOOD_VOLUME_OKAY) + if(SPT_PROB(5, seconds_per_tick)) + set_eye_blur_if_lower(2 SECONDS * determined_mod) + set_dizzy_if_lower(2 SECONDS * determined_mod) + if(prob(50)) + to_chat(src, span_bolddanger("You feel very [word]. It's getting hard to breathe!")) + losebreath += 1 * determined_mod * seconds_per_tick + else if(getStaminaLoss() < 40 * determined_mod) + to_chat(src, span_bolddanger("You feel very [word]. It's getting hard to stay awake!")) + adjustStaminaLoss(15 * determined_mod * REM * seconds_per_tick) + // Very low blood, danger!! + if(BLOOD_VOLUME_BAD to BLOOD_VOLUME_RISKY) + if(SPT_PROB(5, seconds_per_tick)) + set_eye_blur_if_lower(4 SECONDS * determined_mod) + set_dizzy_if_lower(4 SECONDS * determined_mod) + if(prob(50)) + to_chat(src, span_userdanger("You feel extremely [word]! It's getting very hard to breathe!")) + losebreath += 1.5 * determined_mod * seconds_per_tick + else if(getStaminaLoss() < 80 * determined_mod) + to_chat(src, span_userdanger("You feel extremely [word]! It's getting very hard to stay awake!")) + adjustStaminaLoss(20 * determined_mod * REM * seconds_per_tick) + // Critically low blood, death is near! Adrenaline won't help you here. + if(BLOOD_VOLUME_SURVIVE to BLOOD_VOLUME_BAD) + if(SPT_PROB(7.5, seconds_per_tick)) + Unconscious(rand(1 SECONDS, 2 SECONDS)) + to_chat(src, span_userdanger("You black out for a moment!")) + // Instantly die upon this threshold + if(-INFINITY to BLOOD_VOLUME_SURVIVE) + if(!HAS_TRAIT(src, TRAIT_NODEATH)) + investigate_log("has died of bloodloss.", INVESTIGATE_DEATHS) + death() + + // Blood ratio! if you have 280 blood, this equals 0.5 as that's half of the current value, 560. + var/effective_blood_ratio = blood_volume / BLOOD_VOLUME_NORMAL + + // If your ratio is less than one (you're missing any blood) and your oxyloss is under missing blood %, start getting oxy damage. + // This damage accrues faster the less blood you have. + // If KO or in hardcrit, the damage accrues even then to prevent being perma-KO. + if(((effective_blood_ratio < 1) && (getOxyLoss() < ((1 - effective_blood_ratio) * 100))) || (stat in list(UNCONSCIOUS, HARD_CRIT))) + // At roughly half blood this equals to 3 oxyloss per tick. At 90% blood it's close to 0.5 + var/rounded_oxyloss = round(0.01 * (BLOOD_VOLUME_NORMAL - blood_volume), 0.25) * seconds_per_tick + adjustOxyLoss(rounded_oxyloss, updating_health = TRUE) + /// Has each bodypart update its bleed/wound overlay icon states /mob/living/carbon/proc/update_bodypart_bleed_overlays() for(var/obj/item/bodypart/iter_part as anything in bodyparts) diff --git a/code/modules/mob/living/brain/MMI.dm b/code/modules/mob/living/brain/MMI.dm index 56693b20b367b..1963e13dbf552 100644 --- a/code/modules/mob/living/brain/MMI.dm +++ b/code/modules/mob/living/brain/MMI.dm @@ -14,6 +14,8 @@ var/datum/ai_laws/laws = new() var/force_replace_ai_name = FALSE var/overrides_aicore_laws = FALSE // Whether the laws on the MMI, if any, override possible pre-existing laws loaded on the AI core. + /// Whether the brainmob can move. Doesnt usually matter but SPHERICAL POSIBRAINSSS + var/immobilize = TRUE /obj/item/mmi/Initialize(mapload) . = ..() @@ -250,7 +252,7 @@ if(new_mecha) if(!. && brainmob) // There was no mecha, there now is, and we have a brain mob that is no longer unaided. brainmob.remove_traits(list(TRAIT_IMMOBILIZED, TRAIT_HANDS_BLOCKED), BRAIN_UNAIDED) - else if(. && brainmob) // There was a mecha, there no longer is one, and there is a brain mob that is now again unaided. + else if(. && brainmob && immobilize) // There was a mecha, there no longer is one, and there is a brain mob that is now again unaided. brainmob.add_traits(list(TRAIT_IMMOBILIZED, TRAIT_HANDS_BLOCKED), BRAIN_UNAIDED) diff --git a/code/modules/mob/living/brain/brain.dm b/code/modules/mob/living/brain/brain.dm index bd22fb42eb13f..1bacc08a8b6ff 100644 --- a/code/modules/mob/living/brain/brain.dm +++ b/code/modules/mob/living/brain/brain.dm @@ -14,10 +14,9 @@ var/obj/item/organ/internal/brain/OB = new(loc) //we create a new brain organ for it. OB.brainmob = src forceMove(OB) - if(!container?.mecha) //Unless inside a mecha, brains are rather helpless. + if(!container?.mecha && (!container || container.immobilize)) //Unless inside a mecha, brains are rather helpless. add_traits(list(TRAIT_IMMOBILIZED, TRAIT_HANDS_BLOCKED), BRAIN_UNAIDED) - /mob/living/brain/on_changed_z_level(turf/old_turf, turf/new_turf, same_z_layer, notify_contents) var/obj/item/organ/internal/brain/brain_loc = loc if(brain_loc && isnull(new_turf) && brain_loc.owner) //we're actively being put inside a new body. diff --git a/code/modules/mob/living/brain/brain_item.dm b/code/modules/mob/living/brain/brain_item.dm index 117b5f03835d2..b0a747ff51d88 100644 --- a/code/modules/mob/living/brain/brain_item.dm +++ b/code/modules/mob/living/brain/brain_item.dm @@ -394,7 +394,15 @@ /obj/item/organ/internal/brain/primitive //No like books and stompy metal men name = "primitive brain" desc = "This juicy piece of meat has a clearly underdeveloped frontal lobe." - organ_traits = list(TRAIT_ADVANCEDTOOLUSER, TRAIT_CAN_STRIP, TRAIT_PRIMITIVE) // No literacy + organ_traits = list( + TRAIT_ADVANCEDTOOLUSER, + TRAIT_CAN_STRIP, + TRAIT_PRIMITIVE, // No literacy + TRAIT_FORBID_MINING_SHUTTLE_CONSOLE_OUTSIDE_STATION, + TRAIT_EXPERT_FISHER, // live off land, fish from river + TRAIT_ROUGHRIDER, // ride beast, chase down prey, flee from danger + TRAIT_BEAST_EMPATHY, // know the way of beast, calm with food + ) /obj/item/organ/internal/brain/golem name = "crystalline matrix" @@ -508,6 +516,7 @@ actual_trauma.owner = owner SEND_SIGNAL(owner, COMSIG_CARBON_GAIN_TRAUMA, trauma) actual_trauma.on_gain() + log_game("[key_name_and_tag(owner)] has gained the following brain trauma: [trauma.type]") if(resilience) actual_trauma.resilience = resilience SSblackbox.record_feedback("tally", "traumas", 1, actual_trauma.type) diff --git a/code/modules/mob/living/brain/posibrain.dm b/code/modules/mob/living/brain/posibrain.dm index 9df1697e4008a..7d4255d54d50b 100644 --- a/code/modules/mob/living/brain/posibrain.dm +++ b/code/modules/mob/living/brain/posibrain.dm @@ -222,3 +222,63 @@ GLOBAL_VAR(posibrain_notify_cooldown) /obj/item/mmi/posibrain/display/is_occupied() return TRUE + +/// Posibrains but spherical. They can roll around and you can kick them +/obj/item/mmi/posibrain/sphere + name = "positronic sphere" + desc = "Recent developments on cost-cutting measures have allowed us to cut positronic brain cubes into twice-as-cheap spheres. \ + Unfortunately, it also allows them to move around the lab via rolling maneuvers." + icon_state = "spheribrain" + base_icon_state = "spheribrain" + immobilize = FALSE + /// Delay between movements + var/move_delay = 0.5 SECONDS + /// when can we move again? + var/can_move + +/obj/item/mmi/posibrain/sphere/Initialize(mapload, autoping) + . = ..() + + var/matrix/matrix = matrix() + transform = matrix.Scale(0.8, 0.8) + + brainmob.remove_traits(list(TRAIT_IMMOBILIZED, TRAIT_HANDS_BLOCKED), BRAIN_UNAIDED) + +/obj/item/mmi/posibrain/sphere/relaymove(mob/living/user, direction) + if(isspaceturf(loc) || !direction || mecha) + return + + if(can_move >= world.time) + return + can_move = world.time + move_delay + + // ESCAPE PRISON + if(ismovable(loc) && prob(25)) + var/obj/item/item = pick(loc.contents) + if(istype(loc, /obj/item/storage)) + item.forceMove(loc.drop_location()) //throw stuff out of the inventory till we free ourselves! + playsound(src, SFX_RUSTLE, 30, TRUE) + return + + // MOVE US + if(isturf(loc)) + can_move = world.time + move_delay + try_step_multiz(direction) + SpinAnimation(move_delay, 1, direction == NORTH || direction == EAST) + +/obj/item/mmi/posibrain/sphere/Moved(atom/old_loc, movement_dir, forced, list/old_locs, momentum_change) + . = ..() + if(brainmob && isturf(loc)) + anchored = TRUE //anchor so we dont broom ourselves. + do_sweep(src, brainmob, loc, get_dir(old_loc, loc)) //movement dir doesnt work on objects + anchored = FALSE + +/// Punt the shit across the room +/obj/item/mmi/posibrain/sphere/attack_hand_secondary(mob/user, list/modifiers) + . = ..() + if(. == SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN) + return . + throw_at(get_edge_target_turf(src, get_dir(user, src)), 7, 1, user) + user.do_attack_animation(src) + can_move = world.time + move_delay //pweeze stawp + return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN diff --git a/code/modules/mob/living/carbon/alien/adult/adult.dm b/code/modules/mob/living/carbon/alien/adult/adult.dm index d2ee7432b3cc9..ad005888178ac 100644 --- a/code/modules/mob/living/carbon/alien/adult/adult.dm +++ b/code/modules/mob/living/carbon/alien/adult/adult.dm @@ -8,6 +8,7 @@ melee_damage_lower = 20 //Refers to unarmed damage, aliens do unarmed attacks. melee_damage_upper = 20 max_grab = GRAB_AGGRESSIVE + var/caste = "" var/alt_icon = 'icons/mob/nonhuman-player/alienleap.dmi' //used to switch between the two alien icon files. var/leap_on_click = 0 @@ -91,7 +92,7 @@ GLOBAL_LIST_INIT(strippable_alien_humanoid_items, create_strippable_list(list( if(. <= GRAB_AGGRESSIVE) ADD_TRAIT(pulling, TRAIT_FLOORED, CHOKEHOLD_TRAIT) -/mob/living/carbon/alien/adult/MouseDrop_T(atom/dropping, atom/user) +/mob/living/carbon/alien/adult/mouse_drop_receive(atom/dropping, mob/user, params) if(devour_lad(dropping)) return return ..() @@ -139,7 +140,7 @@ GLOBAL_LIST_INIT(strippable_alien_humanoid_items, create_strippable_list(list( return TRUE /mob/living/carbon/alien/adult/get_butt_sprite() - return BUTT_SPRITE_XENOMORPH + return icon('icons/mob/butts.dmi', BUTT_SPRITE_XENOMORPH) // Aliens can touch acid /mob/living/carbon/alien/can_touch_acid(atom/acided_atom, acid_power, acid_volume) diff --git a/code/modules/mob/living/carbon/alien/adult/alien_powers.dm b/code/modules/mob/living/carbon/alien/adult/alien_powers.dm index f3cfbfda8a9ee..999ec07f41a65 100644 --- a/code/modules/mob/living/carbon/alien/adult/alien_powers.dm +++ b/code/modules/mob/living/carbon/alien/adult/alien_powers.dm @@ -251,7 +251,8 @@ Doesn't work on other aliens/AI.*/ plasma_cost = 50 /datum/action/cooldown/alien/acid/neurotoxin/IsAvailable(feedback = FALSE) - if(owner.is_muzzled()) + var/mob/living/carbon/as_carbon = owner + if(istype(as_carbon) && as_carbon.is_mouth_covered(ITEM_SLOT_MASK)) return FALSE if(!isturf(owner.loc)) return FALSE diff --git a/code/modules/mob/living/carbon/alien/alien.dm b/code/modules/mob/living/carbon/alien/alien.dm index f8210c77368cc..a995eafbb3ac0 100644 --- a/code/modules/mob/living/carbon/alien/alien.dm +++ b/code/modules/mob/living/carbon/alien/alien.dm @@ -76,6 +76,7 @@ return pick (list("xltrails_1", "xltrails2")) else return pick (list("xttrails_1", "xttrails2")) + /*---------------------------------------- Proc: AddInfectionImages() Des: Gives the client of the alien an image on each infected mob. diff --git a/code/modules/mob/living/carbon/alien/special/alien_embryo.dm b/code/modules/mob/living/carbon/alien/special/alien_embryo.dm index c7c4b1ed06f3e..6d1ad16c8b1c8 100644 --- a/code/modules/mob/living/carbon/alien/special/alien_embryo.dm +++ b/code/modules/mob/living/carbon/alien/special/alien_embryo.dm @@ -33,7 +33,7 @@ switch(stage) if(3, 4) if(SPT_PROB(1, seconds_per_tick)) - owner.emote("sneeze") + owner.sneeze() if(SPT_PROB(1, seconds_per_tick)) owner.emote("cough") if(SPT_PROB(1, seconds_per_tick)) @@ -42,7 +42,7 @@ to_chat(owner, span_danger("Mucous runs down the back of your throat.")) if(5) if(SPT_PROB(1, seconds_per_tick)) - owner.emote("sneeze") + owner.sneeze() if(SPT_PROB(1, seconds_per_tick)) owner.emote("cough") if(SPT_PROB(2, seconds_per_tick)) diff --git a/code/modules/mob/living/carbon/alien/special/facehugger.dm b/code/modules/mob/living/carbon/alien/special/facehugger.dm index d068610b28f7a..d1ec6d7e88038 100644 --- a/code/modules/mob/living/carbon/alien/special/facehugger.dm +++ b/code/modules/mob/living/carbon/alien/special/facehugger.dm @@ -24,6 +24,7 @@ layer = MOB_LAYER max_integrity = 100 item_flags = XENOMORPH_HOLDABLE + slowdown = 2 var/stat = CONSCIOUS //UNCONSCIOUS is the idle state in this case var/sterile = FALSE @@ -39,6 +40,7 @@ ) AddElement(/datum/element/connect_loc, loc_connections) AddElement(/datum/element/atmos_sensitive, mapload) + AddElement(/datum/element/muffles_speech) RegisterSignal(src, COMSIG_LIVING_TRYING_TO_PULL, PROC_REF(react_to_mob)) @@ -122,7 +124,7 @@ /obj/item/clothing/mask/facehugger/proc/valid_to_attach(mob/living/hit_mob) // valid targets: carbons except aliens and devils - // facehugger state early exit checks + // facehugger state early exit checks (Note: Melbert does not want dead people to be huggable) if(stat != CONSCIOUS) return FALSE if(attached) @@ -171,9 +173,12 @@ log_combat(target, src, "was facehugged by") return TRUE // time for a smoke -/obj/item/clothing/mask/facehugger/proc/Attach(mob/living/M) - if(!valid_to_attach(M)) +/obj/item/clothing/mask/facehugger/proc/Attach(mob/living/victim) + if(!valid_to_attach(victim)) return + + if(victim.stat < UNCONSCIOUS) //sorry bro you gotta be awake + victim.say("AAAA!!") //triggers muffled speech and also visual feedback i guess // early returns and validity checks done: attach. attached++ //ensure we detach once we no longer need to be attached @@ -181,12 +186,12 @@ if(!sterile) - M.take_bodypart_damage(strength,0) //done here so that humans in helmets take damage - M.Unconscious(MAX_IMPREGNATION_TIME/0.3) //something like 25 ticks = 20 seconds with the default settings - + victim.take_bodypart_damage(strength,0) //done here so that humans in helmets take damage + if(real && !sterile) + victim.Knockdown(5 SECONDS) GoIdle() //so it doesn't jump the people that tear it off - addtimer(CALLBACK(src, PROC_REF(Impregnate), M), rand(MIN_IMPREGNATION_TIME, MAX_IMPREGNATION_TIME)) + addtimer(CALLBACK(src, PROC_REF(Impregnate), victim), rand(MIN_IMPREGNATION_TIME, MAX_IMPREGNATION_TIME)) /obj/item/clothing/mask/facehugger/proc/detach() attached = 0 @@ -249,6 +254,29 @@ visible_message(span_danger("[src] curls up into a ball!")) + // chest maybe because getting slammed in the chest would knock it off your face while dead + AddComponent(/datum/component/knockoff, knockoff_chance = 40, target_zones = list(BODY_ZONE_HEAD, BODY_ZONE_CHEST), slots_knockoffable = slot_flags) + +/obj/item/clothing/mask/facehugger/allow_attack_hand_drop(mob/living/carbon/human/user) + if(!real || sterile || user.get_organ_by_type(/obj/item/organ/internal/body_egg/alien_embryo)) + return ..() + if(istype(user) && ishuman(loc) && stat != DEAD) + if(user == loc && user.get_item_by_slot(slot_flags) == src) + to_chat(user, span_userdanger("[src] is latched on too tight! Get help or wait for it to let go!")) + return FALSE + return ..() + +/obj/item/clothing/mask/facehugger/mouse_drop_dragged(atom/over, mob/user, src_location, over_location, params) + var/mob/living/carbon/human/wearer = loc + if(!istype(wearer) || user != wearer) + return + if(!real || sterile || user.get_organ_by_type(/obj/item/organ/internal/body_egg/alien_embryo)) + return ..() + if(wearer.get_item_by_slot(slot_flags) == src && stat != DEAD) + to_chat(user, span_userdanger("[src] is latched on too tight! Get help or wait for it to let go!")) + return + return ..() + /proc/CanHug(mob/living/M) if(!istype(M)) return FALSE @@ -268,6 +296,7 @@ name = "Lamarr" desc = "The Research Director's pet, a domesticated and debeaked xenomorph facehugger. Friendly, but may still try to couple with your head." sterile = TRUE + slowdown = 1.5 //lamarr is too fat after being fed in captivity to effectively slow people down or something /obj/item/clothing/mask/facehugger/dead icon_state = "facehugger_dead" @@ -287,6 +316,7 @@ real = FALSE sterile = TRUE tint = 3 //Makes it feel more authentic when it latches on + slowdown = 0 /obj/item/clothing/mask/facehugger/toy/Die() return diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index 91feb4d38b365..98948e6a9af90 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -23,19 +23,17 @@ QDEL_NULL(dna) GLOB.carbon_list -= src -/mob/living/carbon/item_tending(mob/living/user, obj/item/tool, list/modifiers) +/mob/living/carbon/item_interaction(mob/living/user, obj/item/tool, list/modifiers) . = ..() if(. & ITEM_INTERACT_ANY_BLOCKER) return . - + // Needs to happen after parent call otherwise wounds are prioritized over surgery for(var/datum/wound/wound as anything in shuffle(all_wounds)) if(wound.try_treating(tool, user)) return ITEM_INTERACT_SUCCESS - return . -/mob/living/carbon/CtrlShiftClick(mob/user) - ..() +/mob/living/carbon/click_ctrl_shift(mob/user) if(iscarbon(user)) var/mob/living/carbon/carbon_user = user carbon_user.give(src) @@ -117,12 +115,14 @@ throw_mode = THROW_MODE_DISABLED if(hud_used) hud_used.throw_icon.icon_state = "act_throw_off" + SEND_SIGNAL(src, COMSIG_LIVING_THROW_MODE_TOGGLE, throw_mode) /mob/living/carbon/proc/throw_mode_on(mode = THROW_MODE_TOGGLE) throw_mode = mode if(hud_used) hud_used.throw_icon.icon_state = "act_throw_on" + SEND_SIGNAL(src, COMSIG_LIVING_THROW_MODE_TOGGLE, throw_mode) /mob/proc/throw_item(atom/target) SEND_SIGNAL(src, COMSIG_MOB_THROW, target) @@ -228,13 +228,6 @@ . = ..() loc.handle_fall(src)//it's loc so it doesn't call the mob's handle_fall which does nothing -/mob/living/carbon/is_muzzled() - for (var/obj/item/clothing/clothing in get_equipped_items()) - if(clothing.clothing_flags & BLOCKS_SPEECH) - return TRUE - return FALSE - - /mob/living/carbon/resist_buckle() if(!HAS_TRAIT(src, TRAIT_RESTRAINED)) buckled.user_unbuckle_mob(src, src) @@ -568,19 +561,6 @@ remove_movespeed_modifier(/datum/movespeed_modifier/carbon_softcrit) SEND_SIGNAL(src, COMSIG_LIVING_HEALTH_UPDATE) -/mob/living/carbon/update_stamina() - var/stam = getStaminaLoss() - if(stam > DAMAGE_PRECISION && (maxHealth - stam) <= crit_threshold) - if (!stat) - enter_stamcrit() - else if(HAS_TRAIT_FROM(src, TRAIT_INCAPACITATED, STAMINA)) - REMOVE_TRAIT(src, TRAIT_INCAPACITATED, STAMINA) - REMOVE_TRAIT(src, TRAIT_IMMOBILIZED, STAMINA) - REMOVE_TRAIT(src, TRAIT_FLOORED, STAMINA) - else - return - update_stamina_hud() - /mob/living/carbon/update_sight() if(!client) return @@ -1125,14 +1105,14 @@ return var/list/limb_list = list() if(edit_action == "remove") - for(var/obj/item/bodypart/B as anything in bodyparts) - limb_list += B.body_zone + for(var/obj/item/bodypart/iter_part as anything in bodyparts) + limb_list += iter_part.body_zone limb_list -= BODY_ZONE_CHEST else limb_list = list(BODY_ZONE_HEAD, BODY_ZONE_L_ARM, BODY_ZONE_R_ARM, BODY_ZONE_L_LEG, BODY_ZONE_R_LEG, BODY_ZONE_CHEST) var/result = input(usr, "Please choose which bodypart to [edit_action]","[capitalize(edit_action)] Bodypart") as null|anything in sort_list(limb_list) if(result) - var/obj/item/bodypart/BP = get_bodypart(result) + var/obj/item/bodypart/part = get_bodypart(result) var/list/limbtypes = list() switch(result) if(BODY_ZONE_CHEST) @@ -1149,9 +1129,9 @@ limbtypes = typesof(/obj/item/bodypart/leg/right) switch(edit_action) if("remove") - if(BP) - BP.drop_limb() - admin_ticket_log("[key_name_admin(usr)] has removed [src]'s [parse_zone(BP.body_zone)]") + if(part) + part.drop_limb() + admin_ticket_log("[key_name_admin(usr)] has removed [src]'s [part.plaintext_zone]") else to_chat(usr, span_boldwarning("[src] doesn't have such bodypart.")) admin_ticket_log("[key_name_admin(usr)] has attempted to modify the bodyparts of [src]") @@ -1159,8 +1139,8 @@ var/limb2add = input(usr, "Select a bodypart type to add", "Add/Replace Bodypart") as null|anything in sort_list(limbtypes) var/obj/item/bodypart/new_bp = new limb2add() if(new_bp.replace_limb(src, special = TRUE)) - admin_ticket_log("key_name_admin(usr)] has replaced [src]'s [BP.type] with [new_bp.type]") - qdel(BP) + admin_ticket_log("key_name_admin(usr)] has replaced [src]'s [part.type] with [new_bp.type]") + qdel(part) else to_chat(usr, "Failed to replace bodypart! They might be incompatible.") admin_ticket_log("[key_name_admin(usr)] has attempted to modify the bodyparts of [src]") diff --git a/code/modules/mob/living/carbon/carbon_defense.dm b/code/modules/mob/living/carbon/carbon_defense.dm index e6f614ca07ad5..d6dc119de58a3 100644 --- a/code/modules/mob/living/carbon/carbon_defense.dm +++ b/code/modules/mob/living/carbon/carbon_defense.dm @@ -64,7 +64,7 @@ /mob/living/carbon/check_projectile_dismemberment(obj/projectile/P, def_zone) var/obj/item/bodypart/affecting = get_bodypart(def_zone) - if(affecting && !(affecting.bodypart_flags & BODYPART_UNREMOVABLE) && affecting.get_damage() >= (affecting.max_damage - P.dismemberment)) + if(affecting && affecting.can_dismember() && !(affecting.bodypart_flags & BODYPART_UNREMOVABLE) && affecting.get_damage() >= (affecting.max_damage - P.dismemberment)) affecting.dismember(P.damtype) if(P.catastropic_dismemberment) apply_damage(P.damage, P.damtype, BODY_ZONE_CHEST, wound_bonus = P.wound_bonus) //stops a projectile blowing off a limb effectively doing no damage. Mostly relevant for sniper rifles. @@ -164,6 +164,13 @@ return FALSE +/mob/living/carbon/attack_animal(mob/living/simple_animal/user, list/modifiers) + if (!user.combat_mode) + for (var/datum/wound/wounds as anything in all_wounds) + if (wounds.try_handling(user)) + return TRUE + + return ..() /mob/living/carbon/attack_paw(mob/living/carbon/human/user, list/modifiers) @@ -229,15 +236,6 @@ show_message(span_userdanger("The blob attacks!")) adjustBruteLoss(10) -/mob/living/carbon/emp_act(severity) - . = ..() - if(. & EMP_PROTECT_CONTENTS) - return - for(var/obj/item/organ/organ as anything in organs) - organ.emp_act(severity) - for(var/obj/item/bodypart/bodypart as anything in src.bodyparts) - bodypart.emp_act(severity) - ///Adds to the parent by also adding functionality to propagate shocks through pulling and doing some fluff effects. /mob/living/carbon/electrocute_act(shock_damage, source, siemens_coeff = 1, flags = NONE, jitter_time = 20 SECONDS, stutter_time = 4 SECONDS, stun_duration = 4 SECONDS) . = ..() @@ -700,5 +698,7 @@ . |= SHOVE_CAN_STAGGER if(IsKnockdown() && !IsParalyzed()) . |= SHOVE_CAN_KICK_SIDE + if(HAS_TRAIT(src, TRAIT_NO_SIDE_KICK)) // added as an extra check, just in case + . &= ~SHOVE_CAN_KICK_SIDE #undef SHAKE_ANIMATION_OFFSET diff --git a/code/modules/mob/living/carbon/carbon_defines.dm b/code/modules/mob/living/carbon/carbon_defines.dm index d3e57c4ec1df1..dcab69f531ee3 100644 --- a/code/modules/mob/living/carbon/carbon_defines.dm +++ b/code/modules/mob/living/carbon/carbon_defines.dm @@ -11,6 +11,7 @@ usable_hands = 0 //Populated on init through list/bodyparts mobility_flags = MOBILITY_FLAGS_CARBON_DEFAULT blocks_emissive = EMISSIVE_BLOCK_NONE + living_flags = ALWAYS_DEATHGASP ///List of [/obj/item/organ]s in the mob. They don't go in the contents for some reason I don't want to know. var/list/obj/item/organ/organs = list() ///Same as [above][/mob/living/carbon/var/organs], but stores "slot ID" - "organ" pairs for easy access. @@ -50,8 +51,9 @@ ///last mind to control this mob, for blood-based cloning var/datum/mind/last_mind = null - ///This is used to determine if the mob failed a breath. If they did fail a brath, they will attempt to breathe each tick, otherwise just once per 4 ticks. + ///This is used to determine if the mob failed a breath. If they did fail a breath, they will attempt to breathe each tick, otherwise just once per 4 ticks. var/failed_last_breath = FALSE + /// Used in [carbon/proc/check_breath] and [lungs/proc/check_breath]] var/co2overloadtime = null @@ -86,9 +88,6 @@ /// This number is also reset to 0 every tick of carbon Life(). Pain. var/damageoverlaytemp = 0 - ///used to halt stamina regen temporarily - var/stam_regen_start_time = 0 - /// Protection (insulation) from the heat, Value 0-1 corresponding to the percentage of protection var/heat_protection = 0 // No heat protection /// Protection (insulation) from the cold, Value 0-1 corresponding to the percentage of protection diff --git a/code/modules/mob/living/carbon/carbon_update_icons.dm b/code/modules/mob/living/carbon/carbon_update_icons.dm index fab921ba19a7f..00e502bad0451 100644 --- a/code/modules/mob/living/carbon/carbon_update_icons.dm +++ b/code/modules/mob/living/carbon/carbon_update_icons.dm @@ -1,6 +1,6 @@ -/mob/living/carbon/update_obscured_slots(obj/item/worn_item) +/mob/living/carbon/update_obscured_slots(obscured_flags) ..() - if(worn_item.flags_inv & (HIDEEARS|HIDEEYES|HIDEHAIR|HIDEFACIALHAIR|HIDESNOUT|HIDEMUTWINGS)) + if(obscured_flags & (HIDEEARS|HIDEEYES|HIDEHAIR|HIDEFACIALHAIR|HIDESNOUT|HIDEMUTWINGS)) update_body() /// Updates features and clothing attached to a specific limb with limb-specific offsets @@ -344,7 +344,7 @@ if(wear_mask) if(update_obscured) - update_obscured_slots(wear_mask) + update_obscured_slots(wear_mask.flags_inv) if(!(check_obscured_slots() & ITEM_SLOT_MASK)) overlays_standing[FACEMASK_LAYER] = wear_mask.build_worn_icon(default_layer = FACEMASK_LAYER, default_icon_file = 'icons/mob/clothing/mask.dmi') update_hud_wear_mask(wear_mask) @@ -360,7 +360,7 @@ if(wear_neck) if(update_obscured) - update_obscured_slots(wear_neck) + update_obscured_slots(wear_neck.flags_inv) if(!(check_obscured_slots() & ITEM_SLOT_NECK)) overlays_standing[NECK_LAYER] = wear_neck.build_worn_icon(default_layer = NECK_LAYER, default_icon_file = 'icons/mob/clothing/neck.dmi') update_hud_neck(wear_neck) @@ -376,7 +376,7 @@ if(back) if(update_obscured) - update_obscured_slots(back) + update_obscured_slots(back.flags_inv) overlays_standing[BACK_LAYER] = back.build_worn_icon(default_layer = BACK_LAYER, default_icon_file = 'icons/mob/clothing/back.dmi') update_hud_back(back) @@ -387,7 +387,7 @@ clear_alert("legcuffed") if(legcuffed) if(update_obscured) - update_obscured_slots(legcuffed) + update_obscured_slots(legcuffed.flags_inv) overlays_standing[LEGCUFF_LAYER] = mutable_appearance('icons/mob/simple/mob.dmi', "legcuff1", -LEGCUFF_LAYER) apply_overlay(LEGCUFF_LAYER) throw_alert("legcuffed", /atom/movable/screen/alert/restrained/legcuffed, new_master = src.legcuffed) @@ -404,7 +404,7 @@ if(head) if(update_obscured) - update_obscured_slots(head) + update_obscured_slots(head.flags_inv) if(!(check_obscured_slots() & ITEM_SLOT_HEAD)) overlays_standing[HEAD_LAYER] = head.build_worn_icon(default_layer = HEAD_LAYER, default_icon_file = 'icons/mob/clothing/head/default.dmi') update_hud_head(head) @@ -416,7 +416,7 @@ remove_overlay(HANDCUFF_LAYER) if(handcuffed) if(update_obscured) - update_obscured_slots(handcuffed) + update_obscured_slots(handcuffed.flags_inv) var/mutable_appearance/handcuff_overlay = mutable_appearance('icons/mob/simple/mob.dmi', "handcuff1", -HANDCUFF_LAYER) if(handcuffed.blocks_emissive != EMISSIVE_BLOCK_NONE) handcuff_overlay.overlays += emissive_blocker(handcuff_overlay.icon, handcuff_overlay.icon_state, src, alpha = handcuff_overlay.alpha) diff --git a/code/modules/mob/living/carbon/damage_procs.dm b/code/modules/mob/living/carbon/damage_procs.dm index 30ff21ccc3989..b781b296bc882 100644 --- a/code/modules/mob/living/carbon/damage_procs.dm +++ b/code/modules/mob/living/carbon/damage_procs.dm @@ -128,25 +128,26 @@ return FALSE return adjustFireLoss(diff, updating_health, forced, required_bodytype) -/mob/living/carbon/adjustToxLoss(amount, updating_health = TRUE, forced = FALSE, required_biotype = ALL) - if(!can_adjust_tox_loss(amount, forced, required_biotype)) - return 0 - if(!forced && HAS_TRAIT(src, TRAIT_TOXINLOVER)) //damage becomes healing and healing becomes damage - amount = -amount - if(HAS_TRAIT(src, TRAIT_TOXIMMUNE)) //Prevents toxin damage, but not healing - amount = min(amount, 0) - if(amount > 0) - blood_volume = max(blood_volume - (5*amount), 0) - else - blood_volume = max(blood_volume - amount, 0) - else if(!forced && HAS_TRAIT(src, TRAIT_TOXIMMUNE)) //Prevents toxin damage, but not healing - amount = min(amount, 0) - return ..() +/mob/living/carbon/human/adjustToxLoss(amount, updating_health = TRUE, forced = FALSE, required_biotype = ALL) + . = ..() + if(. >= 0) // 0 = no damage, + values = healed damage + return . + + if(AT_TOXIN_VOMIT_THRESHOLD(src)) + apply_status_effect(/datum/status_effect/tox_vomit) -/mob/living/carbon/adjustStaminaLoss(amount, updating_stamina, forced, required_biotype = ALL) +/mob/living/carbon/human/setToxLoss(amount, updating_health, forced, required_biotype) . = ..() - if(amount > 0) - stam_regen_start_time = world.time + STAMINA_REGEN_BLOCK_TIME + if(. >= 0) + return . + + if(AT_TOXIN_VOMIT_THRESHOLD(src)) + apply_status_effect(/datum/status_effect/tox_vomit) + +/mob/living/carbon/received_stamina_damage(current_level, amount_actual, amount) + . = ..() + if((maxHealth - current_level) <= crit_threshold && stat != DEAD) + apply_status_effect(/datum/status_effect/incapacitating/stamcrit) /** * If an organ exists in the slot requested, and we are capable of taking damage (we don't have [GODMODE] on), call the damage proc on that organ. diff --git a/code/modules/mob/living/carbon/death.dm b/code/modules/mob/living/carbon/death.dm index 41a958518c597..5fdd3498f1559 100644 --- a/code/modules/mob/living/carbon/death.dm +++ b/code/modules/mob/living/carbon/death.dm @@ -5,7 +5,6 @@ losebreath = 0 if(!gibbed) - INVOKE_ASYNC(src, PROC_REF(emote), "deathgasp") add_memory_in_range(src, 7, /datum/memory/witnessed_death, protagonist = src) reagents.end_metabolization(src) diff --git a/code/modules/mob/living/carbon/emote.dm b/code/modules/mob/living/carbon/emote.dm index e01315094a11b..00699196ae9b6 100644 --- a/code/modules/mob/living/carbon/emote.dm +++ b/code/modules/mob/living/carbon/emote.dm @@ -20,27 +20,27 @@ key = "clap" key_third_person = "claps" message = "claps." - muzzle_ignore = TRUE hands_use_check = TRUE emote_type = EMOTE_AUDIBLE | EMOTE_VISIBLE audio_cooldown = 5 SECONDS vary = TRUE /datum/emote/living/carbon/clap/get_sound(mob/living/user) - if(ishuman(user)) - if(!user.get_bodypart(BODY_ZONE_L_ARM) || !user.get_bodypart(BODY_ZONE_R_ARM)) - return - else - return pick('sound/misc/clap1.ogg', - 'sound/misc/clap2.ogg', - 'sound/misc/clap3.ogg', - 'sound/misc/clap4.ogg') + if(!user.get_bodypart(BODY_ZONE_L_ARM) || !user.get_bodypart(BODY_ZONE_R_ARM)) + return + return pick( + 'sound/misc/clap1.ogg', + 'sound/misc/clap2.ogg', + 'sound/misc/clap3.ogg', + 'sound/misc/clap4.ogg', + ) /datum/emote/living/carbon/crack key = "crack" key_third_person = "cracks" message = "cracks their knuckles." sound = 'sound/misc/knuckles.ogg' + hands_use_check = TRUE cooldown = 6 SECONDS /datum/emote/living/carbon/crack/can_run_emote(mob/living/carbon/user, status_check = TRUE , intentional) @@ -48,6 +48,28 @@ return FALSE return ..() +/datum/emote/living/carbon/cry + key = "cry" + key_third_person = "cries" + message = "cries." + message_mime = "sobs silently." + audio_cooldown = 5 SECONDS + emote_type = EMOTE_AUDIBLE | EMOTE_VISIBLE + vary = TRUE + stat_allowed = SOFT_CRIT + +/datum/emote/living/carbon/cry/run_emote(mob/user, params, type_override, intentional) + . = ..() + if(!ishuman(user)) + return + var/mob/living/carbon/human/human_user = user + QDEL_IN(human_user.give_emote_overlay(/datum/bodypart_overlay/simple/emote/cry), 12.8 SECONDS) + +/datum/emote/living/carbon/cry/get_sound(mob/living/carbon/human/user) + if(!istype(user)) + return + return user.dna.species.get_cry_sound(user) + /datum/emote/living/carbon/circle key = "circle" key_third_person = "circles" @@ -162,7 +184,6 @@ message_param = "snaps their fingers at %t." emote_type = EMOTE_AUDIBLE | EMOTE_VISIBLE hands_use_check = TRUE - muzzle_ignore = TRUE /datum/emote/living/carbon/snap/get_sound(mob/living/user) if(ishuman(user)) diff --git a/code/modules/mob/living/carbon/human/_species.dm b/code/modules/mob/living/carbon/human/_species.dm index 51337a618edf4..1e514ad13cedb 100644 --- a/code/modules/mob/living/carbon/human/_species.dm +++ b/code/modules/mob/living/carbon/human/_species.dm @@ -102,6 +102,9 @@ GLOBAL_LIST_EMPTY(features_by_species) ///Replaces default appendix with a different organ. var/obj/item/organ/internal/appendix/mutantappendix = /obj/item/organ/internal/appendix + /// Store body marking defines. See mobs.dm for bitflags + var/list/body_markings = list() + /// Flat modifier on all damage taken via [apply_damage][/mob/living/proc/apply_damage] (so being punched, shot, etc.) /// IE: 10 = 10% less damage taken. var/damage_modifier = 0 @@ -222,14 +225,12 @@ GLOBAL_LIST_EMPTY(features_by_species) var/list/selectable_species = list() for(var/species_type in subtypesof(/datum/species)) - var/datum/species/species = new species_type + var/datum/species/species = GLOB.species_prototypes[species_type] if(species.check_roundstart_eligible()) selectable_species += species.id - var/datum/language_holder/temp_holder = new species.species_language_holder + var/datum/language_holder/temp_holder = GLOB.prototype_language_holders[species.species_language_holder] for(var/datum/language/spoken_language as anything in temp_holder.understood_languages) GLOB.uncommon_roundstart_languages |= spoken_language - qdel(temp_holder) - qdel(species) GLOB.uncommon_roundstart_languages -= /datum/language/common if(!selectable_species.len) @@ -248,32 +249,6 @@ GLOBAL_LIST_EMPTY(features_by_species) return TRUE return FALSE -/** - * Generates a random name for a carbon. - * - * This generates a random unique name based on a human's species and gender. - * Arguments: - * * gender - The gender that the name should adhere to. Use MALE for male names, use anything else for female names. - * * unique - If true, ensures that this new name is not a duplicate of anyone else's name currently on the station. - * * last_name - Do we use a given last name or pick a random new one? - */ -/datum/species/proc/random_name(gender, unique, last_name) - if(unique) - return random_unique_name(gender) - - var/randname - if(gender == MALE) - randname = pick(GLOB.first_names_male) - else - randname = pick(GLOB.first_names_female) - - if(last_name) - randname += " [last_name]" - else - randname += " [pick(GLOB.last_names)]" - - return randname - /** * Copies some vars and properties over that should be kept when creating a copy of this species. * @@ -428,7 +403,7 @@ GLOBAL_LIST_EMPTY(features_by_species) replacement.Insert(organ_holder, special=TRUE, movement_flags = DELETE_IF_REPLACED) /datum/species/proc/worn_items_fit_body_check(mob/living/carbon/wearer) - for(var/obj/item/equipped_item in wearer.get_equipped_items(include_pockets = TRUE)) + for(var/obj/item/equipped_item in wearer.get_equipped_items(INCLUDE_POCKETS)) var/equipped_item_slot = wearer.get_slot_by_item(equipped_item) if(!equipped_item.mob_can_equip(wearer, equipped_item_slot, bypass_equip_delay_self = TRUE, ignore_equipped = TRUE)) wearer.dropItemToGround(equipped_item, force = TRUE) @@ -494,7 +469,7 @@ GLOBAL_LIST_EMPTY(features_by_species) var/obj/item/organ/external/new_organ = SSwardrobe.provide_type(organ_path) new_organ.Insert(human, special=TRUE, movement_flags = DELETE_IF_REPLACED) - + add_body_markings(human_who_gained_species) if(length(inherent_traits)) human_who_gained_species.add_traits(inherent_traits, SPECIES_TRAIT) @@ -554,6 +529,8 @@ GLOBAL_LIST_EMPTY(features_by_species) clear_tail_moodlets(C) + remove_body_markings(C) + // Removes all languages previously associated with [LANGUAGE_SPECIES], gaining our new species will add new ones back var/datum/language_holder/losing_holder = GLOB.prototype_language_holders[species_language_holder] for(var/language in losing_holder.understood_languages) @@ -588,45 +565,10 @@ GLOBAL_LIST_EMPTY(features_by_species) eye_organ.refresh(call_update = FALSE) standing += eye_organ.generate_body_overlay(species_human) - // organic body markings (oh my god this is terrible please rework this to be done on the limbs themselves i beg you) - if(HAS_TRAIT(species_human, TRAIT_HAS_MARKINGS)) - var/obj/item/bodypart/chest/chest = species_human.get_bodypart(BODY_ZONE_CHEST) - var/obj/item/bodypart/arm/right/right_arm = species_human.get_bodypart(BODY_ZONE_R_ARM) - var/obj/item/bodypart/arm/left/left_arm = species_human.get_bodypart(BODY_ZONE_L_ARM) - var/obj/item/bodypart/leg/right/right_leg = species_human.get_bodypart(BODY_ZONE_R_LEG) - var/obj/item/bodypart/leg/left/left_leg = species_human.get_bodypart(BODY_ZONE_L_LEG) - var/datum/sprite_accessory/markings = GLOB.moth_markings_list[species_human.dna.features["moth_markings"]] - var/mutable_appearance/marking = mutable_appearance(layer = -BODY_LAYER, appearance_flags = KEEP_TOGETHER) - if(noggin && (IS_ORGANIC_LIMB(noggin))) - var/mutable_appearance/markings_head_overlay = mutable_appearance(markings.icon, "[markings.icon_state]_head") - marking.overlays += markings_head_overlay - - if(chest && (IS_ORGANIC_LIMB(chest))) - var/mutable_appearance/markings_chest_overlay = mutable_appearance(markings.icon, "[markings.icon_state]_chest") - marking.overlays += markings_chest_overlay - - if(right_arm && (IS_ORGANIC_LIMB(right_arm))) - var/mutable_appearance/markings_r_arm_overlay = mutable_appearance(markings.icon, "[markings.icon_state]_r_arm") - marking.overlays += markings_r_arm_overlay - - if(left_arm && (IS_ORGANIC_LIMB(left_arm))) - var/mutable_appearance/markings_l_arm_overlay = mutable_appearance(markings.icon, "[markings.icon_state]_l_arm") - marking.overlays += markings_l_arm_overlay - - if(right_leg && (IS_ORGANIC_LIMB(right_leg))) - var/mutable_appearance/markings_r_leg_overlay = mutable_appearance(markings.icon, "[markings.icon_state]_r_leg") - marking.overlays += markings_r_leg_overlay - - if(left_leg && (IS_ORGANIC_LIMB(left_leg))) - var/mutable_appearance/markings_l_leg_overlay = mutable_appearance(markings.icon, "[markings.icon_state]_l_leg") - marking.overlays += markings_l_leg_overlay - - standing += marking - //Underwear, Undershirts & Socks if(!HAS_TRAIT(species_human, TRAIT_NO_UNDERWEAR)) if(species_human.underwear) - var/datum/sprite_accessory/underwear/underwear = GLOB.underwear_list[species_human.underwear] + var/datum/sprite_accessory/underwear/underwear = SSaccessories.underwear_list[species_human.underwear] var/mutable_appearance/underwear_overlay if(underwear) if(species_human.dna.species.sexes && species_human.physique == FEMALE && (underwear.gender == MALE)) @@ -638,7 +580,7 @@ GLOBAL_LIST_EMPTY(features_by_species) standing += underwear_overlay if(species_human.undershirt) - var/datum/sprite_accessory/undershirt/undershirt = GLOB.undershirt_list[species_human.undershirt] + var/datum/sprite_accessory/undershirt/undershirt = SSaccessories.undershirt_list[species_human.undershirt] if(undershirt) var/mutable_appearance/working_shirt if(species_human.dna.species.sexes && species_human.physique == FEMALE) @@ -648,7 +590,7 @@ GLOBAL_LIST_EMPTY(features_by_species) standing += working_shirt if(species_human.socks && species_human.num_legs >= 2 && !(species_human.bodyshape & BODYSHAPE_DIGITIGRADE)) - var/datum/sprite_accessory/socks/socks = GLOB.socks_list[species_human.socks] + var/datum/sprite_accessory/socks/socks = SSaccessories.socks_list[species_human.socks] if(socks) standing += mutable_appearance(socks.icon, socks.icon_state, -BODY_LAYER) @@ -698,11 +640,9 @@ GLOBAL_LIST_EMPTY(features_by_species) var/datum/sprite_accessory/accessory switch(bodypart) if("ears") - accessory = GLOB.ears_list[source.dna.features["ears"]] - if("body_markings") - accessory = GLOB.body_markings_list[source.dna.features["body_markings"]] + accessory = SSaccessories.ears_list[source.dna.features["ears"]] if("legs") - accessory = GLOB.legs_list[source.dna.features["legs"]] + accessory = SSaccessories.legs_list[source.dna.features["legs"]] if(!accessory || accessory.icon_state == "none") continue @@ -754,6 +694,8 @@ GLOBAL_LIST_EMPTY(features_by_species) source.apply_overlay(BODY_ADJ_LAYER) source.apply_overlay(BODY_FRONT_LAYER) + update_body_markings(source) + //This exists so sprite accessories can still be per-layer without having to include that layer's //number in their sprite name, which causes issues when those numbers change. /datum/species/proc/mutant_bodyparts_layertext(layer) @@ -1068,7 +1010,7 @@ GLOBAL_LIST_EMPTY(features_by_species) attacking_bodypart = brain.get_attacking_limb(target) if(!attacking_bodypart) attacking_bodypart = user.get_active_hand() - var/atk_verb = attacking_bodypart.unarmed_attack_verb + var/atk_verb = pick(attacking_bodypart.unarmed_attack_verbs) var/atk_effect = attacking_bodypart.unarmed_attack_effect if(atk_effect == ATTACK_EFFECT_BITE) @@ -1527,7 +1469,7 @@ GLOBAL_LIST_EMPTY(features_by_species) /datum/species/proc/clear_tail_moodlets(mob/living/carbon/human/former_tail_owner) former_tail_owner.clear_mood_event("tail_lost") former_tail_owner.clear_mood_event("tail_balance_lost") - former_tail_owner.clear_mood_event("wrong_tail_regained") + former_tail_owner.clear_mood_event("tail_regained") /// Returns a list of strings representing features this species has. /// Used by the preferences UI to know what buttons to show. @@ -1546,6 +1488,7 @@ GLOBAL_LIST_EMPTY(features_by_species) || (preference.relevant_inherent_trait in inherent_traits) \ || (preference.relevant_external_organ in external_organs) \ || (preference.relevant_head_flag && check_head_flags(preference.relevant_head_flag)) \ + || (preference.relevant_body_markings in body_markings) \ ) features += preference.savefile_key @@ -1563,10 +1506,26 @@ GLOBAL_LIST_EMPTY(features_by_species) /datum/species/proc/prepare_human_for_preview(mob/living/carbon/human/human) return -/// Returns the species's scream sound. +/// Returns the species' scream sound. /datum/species/proc/get_scream_sound(mob/living/carbon/human/human) return +/// Returns the species' cry sound. +/datum/species/proc/get_cry_sound(mob/living/carbon/human/human) + return + +/// Returns the species' cough sound. +/datum/species/proc/get_cough_sound(mob/living/carbon/human/human) + return + +/// Returns the species' laugh sound +/datum/species/proc/get_laugh_sound(mob/living/carbon/human/human) + return + +/// Returns the species' sneeze sound. +/datum/species/proc/get_sneeze_sound(mob/living/carbon/human/human) + return + /datum/species/proc/get_types_to_preload() var/list/to_store = list() to_store += mutant_organs @@ -1674,7 +1633,7 @@ GLOBAL_LIST_EMPTY(features_by_species) /datum/species/proc/get_species_perks() var/list/species_perks = list() - // Let us get every perk we can concieve of in one big list. + // Let us get every perk we can conceive of in one big list. // The order these are called (kind of) matters. // Species unique perks first, as they're more important than genetic perks, // and language perk last, as it comes at the end of the perks list @@ -1850,7 +1809,7 @@ GLOBAL_LIST_EMPTY(features_by_species) SPECIES_PERK_TYPE = SPECIES_NEUTRAL_PERK, SPECIES_PERK_ICON = "tint", SPECIES_PERK_NAME = initial(exotic_blood.name), - SPECIES_PERK_DESC = "[name] blood is [initial(exotic_blood.name)], which can make recieving medical treatment harder.", + SPECIES_PERK_DESC = "[name] blood is [initial(exotic_blood.name)], which can make receiving medical treatment harder.", )) // Otherwise otherwise, see if they have an exotic bloodtype set @@ -1859,7 +1818,7 @@ GLOBAL_LIST_EMPTY(features_by_species) SPECIES_PERK_TYPE = SPECIES_NEUTRAL_PERK, SPECIES_PERK_ICON = "tint", SPECIES_PERK_NAME = "Exotic Blood", - SPECIES_PERK_DESC = "[plural_form] have \"[exotic_bloodtype]\" type blood, which can make recieving medical treatment harder.", + SPECIES_PERK_DESC = "[plural_form] have \"[exotic_bloodtype]\" type blood, which can make receiving medical treatment harder.", )) return to_add @@ -2121,3 +2080,48 @@ GLOBAL_LIST_EMPTY(features_by_species) return fixed_mut_color return null + +/// Add species appropriate body markings +/datum/species/proc/add_body_markings(mob/living/carbon/human/hooman) + for(var/markings_type in body_markings) //loop through possible species markings + var/datum/bodypart_overlay/simple/body_marking/markings = new markings_type() // made to die... mostly because we cant use initial on lists but its convenient and organized + var/accessory_name = hooman.dna.features[markings.dna_feature_key] //get the accessory name from dna + var/datum/sprite_accessory/moth_markings/accessory = markings.get_accessory(accessory_name) //get the actual datum + + if(isnull(accessory)) + CRASH("Value: [accessory_name] did not have a corresponding sprite accessory!") + + for(var/obj/item/bodypart/part as anything in markings.applies_to) //check through our limbs + var/obj/item/bodypart/people_part = hooman.get_bodypart(initial(part.body_zone)) // and see if we have a compatible marking for that limb + + if(!people_part) + continue + + var/datum/bodypart_overlay/simple/body_marking/overlay = new markings_type () + + // Tell the overlay what it should look like + overlay.icon = accessory.icon + overlay.icon_state = accessory.icon_state + overlay.use_gender = accessory.gender_specific + overlay.draw_color = accessory.color_src ? hooman.dna.features["mcolor"] : null + + people_part.add_bodypart_overlay(overlay) + +/// Remove body markings +/datum/species/proc/remove_body_markings(mob/living/carbon/human/hooman) + for(var/obj/item/bodypart/part as anything in hooman.bodyparts) + for(var/datum/bodypart_overlay/simple/body_marking/marking in part.bodypart_overlays) + part.remove_bodypart_overlay(marking) + +/// Update the overlays if necessary +/datum/species/proc/update_body_markings(mob/living/carbon/human/hooman) + var/needs_update = FALSE + for(var/datum/bodypart_overlay/simple/body_marking/marking as anything in body_markings) + if(initial(marking.dna_feature_key) == body_markings[marking]) // dna is same as our species (sort of mini-cache), so no update needed + continue + needs_update = TRUE + break + + if(needs_update) + remove_body_markings(hooman) + add_body_markings(hooman) diff --git a/code/modules/mob/living/carbon/human/dummy.dm b/code/modules/mob/living/carbon/human/dummy.dm index d17661cf5629e..f13e90719c1dc 100644 --- a/code/modules/mob/living/carbon/human/dummy.dm +++ b/code/modules/mob/living/carbon/human/dummy.dm @@ -41,7 +41,7 @@ INITIALIZE_IMMEDIATE(/mob/living/carbon/human/dummy) //Instead of just deleting our equipment, we save what we can and reinsert it into SSwardrobe's store //Hopefully this makes preference reloading not the worst thing ever /mob/living/carbon/human/dummy/delete_equipment() - var/list/items_to_check = get_equipped_items(include_pockets = TRUE) + held_items + var/list/items_to_check = get_equipped_items(INCLUDE_POCKETS | INCLUDE_HELD) var/list/to_nuke = list() //List of items queued for deletion, can't qdel them before iterating their contents in case they hold something ///Travel to the bottom of the contents chain, expanding it out for(var/i = 1; i <= length(items_to_check); i++) //Needs to be a c style loop since it can expand @@ -76,7 +76,7 @@ INITIALIZE_IMMEDIATE(/mob/living/carbon/human/dummy) cut_overlays(TRUE) /mob/living/carbon/human/dummy/setup_human_dna() - randomize_human(src, randomize_mutations = FALSE) + randomize_human_normie(src, randomize_mutations = FALSE) /mob/living/carbon/human/dummy/log_mob_tag(text) return @@ -103,19 +103,19 @@ INITIALIZE_IMMEDIATE(/mob/living/carbon/human/dummy) /proc/create_consistent_human_dna(mob/living/carbon/human/target) target.dna.features["mcolor"] = COLOR_VIBRANT_LIME target.dna.features["ethcolor"] = COLOR_WHITE - target.dna.features["body_markings"] = get_consistent_feature_entry(GLOB.body_markings_list) - target.dna.features["ears"] = get_consistent_feature_entry(GLOB.ears_list) - target.dna.features["frills"] = get_consistent_feature_entry(GLOB.frills_list) - target.dna.features["horns"] = get_consistent_feature_entry(GLOB.horns_list) - target.dna.features["moth_antennae"] = get_consistent_feature_entry(GLOB.moth_antennae_list) - target.dna.features["moth_markings"] = get_consistent_feature_entry(GLOB.moth_markings_list) - target.dna.features["moth_wings"] = get_consistent_feature_entry(GLOB.moth_wings_list) - target.dna.features["snout"] = get_consistent_feature_entry(GLOB.snouts_list) - target.dna.features["spines"] = get_consistent_feature_entry(GLOB.spines_list) - target.dna.features["tail_cat"] = get_consistent_feature_entry(GLOB.tails_list_human) // it's a lie - target.dna.features["tail_lizard"] = get_consistent_feature_entry(GLOB.tails_list_lizard) - target.dna.features["tail_monkey"] = get_consistent_feature_entry(GLOB.tails_list_monkey) - target.dna.features["pod_hair"] = get_consistent_feature_entry(GLOB.pod_hair_list) + target.dna.features["lizard_markings"] = get_consistent_feature_entry(SSaccessories.lizard_markings_list) + target.dna.features["ears"] = get_consistent_feature_entry(SSaccessories.ears_list) + target.dna.features["frills"] = get_consistent_feature_entry(SSaccessories.frills_list) + target.dna.features["horns"] = get_consistent_feature_entry(SSaccessories.horns_list) + target.dna.features["moth_antennae"] = get_consistent_feature_entry(SSaccessories.moth_antennae_list) + target.dna.features["moth_markings"] = get_consistent_feature_entry(SSaccessories.moth_markings_list) + target.dna.features["moth_wings"] = get_consistent_feature_entry(SSaccessories.moth_wings_list) + target.dna.features["snout"] = get_consistent_feature_entry(SSaccessories.snouts_list) + target.dna.features["spines"] = get_consistent_feature_entry(SSaccessories.spines_list) + target.dna.features["tail_cat"] = get_consistent_feature_entry(SSaccessories.tails_list_human) // it's a lie + target.dna.features["tail_lizard"] = get_consistent_feature_entry(SSaccessories.tails_list_lizard) + target.dna.features["tail_monkey"] = get_consistent_feature_entry(SSaccessories.tails_list_monkey) + target.dna.features["pod_hair"] = get_consistent_feature_entry(SSaccessories.pod_hair_list) target.dna.initialize_dna(create_mutation_blocks = FALSE, randomize_features = FALSE) // UF and UI are nondeterministic, even though the features are the same some blocks will randomize slightly // In practice this doesn't matter, but this is for the sake of 100%(ish) consistency diff --git a/code/modules/mob/living/carbon/human/emote.dm b/code/modules/mob/living/carbon/human/emote.dm index b205eb2e2e217..f5c3ae6b49903 100644 --- a/code/modules/mob/living/carbon/human/emote.dm +++ b/code/modules/mob/living/carbon/human/emote.dm @@ -1,21 +1,6 @@ /datum/emote/living/carbon/human mob_type_allowed_typecache = list(/mob/living/carbon/human) -/datum/emote/living/carbon/human/cry - key = "cry" - key_third_person = "cries" - message = "cries." - message_mime = "sobs silently." - emote_type = EMOTE_AUDIBLE | EMOTE_VISIBLE - stat_allowed = SOFT_CRIT - -/datum/emote/living/carbon/human/cry/run_emote(mob/user, params, type_override, intentional) - . = ..() - if(!ishuman(user)) - return - var/mob/living/carbon/human/human_user = user - QDEL_IN(human_user.give_emote_overlay(/datum/bodypart_overlay/simple/emote/cry), 12.8 SECONDS) - /datum/emote/living/carbon/human/dap key = "dap" key_third_person = "daps" diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm index 5b2864da4e399..4fe60084c0e93 100644 --- a/code/modules/mob/living/carbon/human/examine.dm +++ b/code/modules/mob/living/carbon/human/examine.dm @@ -321,7 +321,7 @@ if(CONSCIOUS) if(HAS_TRAIT(src, TRAIT_DUMB)) msg += "[t_He] [t_has] a stupid expression on [t_his] face.\n" - if(get_organ_by_type(/obj/item/organ/internal/brain)) + if(get_organ_by_type(/obj/item/organ/internal/brain) && isnull(ai_controller)) if(!key) msg += "[span_deadsay("[t_He] [t_is] totally catatonic. The stresses of life in deep-space must have been too much for [t_him]. Any recovery is unlikely.")]\n" else if(!client) @@ -352,18 +352,20 @@ . += trait_exam if(isliving(user)) - var/mob/living/morbid_weirdo = user - if(HAS_MIND_TRAIT(morbid_weirdo, TRAIT_MORBID)) + var/mob/living/privacy_invader = user + if(HAS_MIND_TRAIT(privacy_invader, TRAIT_MORBID)) if(HAS_TRAIT(src, TRAIT_DISSECTED)) msg += "[span_notice("[t_He] appears to have been dissected. Useless for examination... for now.")]\n" if(HAS_TRAIT(src, TRAIT_SURGICALLY_ANALYZED)) msg += "[span_notice("A skilled hand has mapped this one's internal intricacies. It will be far easier to perform future experimentations upon [t_him]. Exquisite.")]\n" + if(HAS_MIND_TRAIT(privacy_invader, TRAIT_EXAMINE_FITNESS)) + . += compare_fitness(user) var/perpname = get_face_name(get_id_name("")) if(perpname && (HAS_TRAIT(user, TRAIT_SECURITY_HUD) || HAS_TRAIT(user, TRAIT_MEDICAL_HUD))) var/datum/record/crew/target_record = find_record(perpname) if(target_record) - . += "Rank: [target_record.rank]\n\[Front photo\]\[Side photo\]" + . += "Rank: [target_record.rank]\n\[Front photo\]\[Side photo\]" if(HAS_TRAIT(user, TRAIT_MEDICAL_HUD)) var/cyberimp_detect for(var/obj/item/organ/internal/cyberimp/cyberimp in organs) @@ -394,11 +396,11 @@ if(target_record.security_note) security_note = target_record.security_note if(ishuman(user)) - . += "Criminal status: \[[wanted_status]\]" + . += "Criminal status: \[[wanted_status]\]" else - . += "Criminal status: [wanted_status]" - . += "Important Notes: [security_note]" - . += "Security record: \[View\]" + . += "Criminal status: [wanted_status]" + . += "Important Notes: [security_note]" + . += "Security record: \[View\]" if(ishuman(user)) . += jointext(list("\[Add citation\]", "\[Add crime\]", diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 07135351a91f2..1dd47f8060426 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -56,7 +56,7 @@ ADD_TRAIT(src, TRAIT_AGEUSIA, NO_TONGUE_TRAIT) /mob/living/carbon/human/proc/setup_human_dna() - randomize_human(src, randomize_mutations = TRUE) + randomize_human_normie(src, randomize_mutations = TRUE) /mob/living/carbon/human/Destroy() QDEL_NULL(physiology) @@ -815,7 +815,7 @@ if(href_list[VV_HK_SET_SPECIES]) if(!check_rights(R_SPAWN)) return - var/result = input(usr, "Please choose a new species","Species") as null|anything in GLOB.species_list + var/result = input(usr, "Please choose a new species","Species") as null|anything in sortTim(GLOB.species_list, GLOBAL_PROC_REF(cmp_text_asc)) if(result) var/newtype = GLOB.species_list[result] admin_ticket_log("[key_name_admin(usr)] has modified the bodyparts of [src] to [result]") @@ -1019,7 +1019,7 @@ /mob/living/carbon/human/species/set_species(datum/species/mrace, icon_update, pref_load) . = ..() if(use_random_name) - fully_replace_character_name(real_name, dna.species.random_name()) + fully_replace_character_name(real_name, generate_random_mob_name()) /mob/living/carbon/human/species/abductor race = /datum/species/abductor diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index 6e1f9037018b6..aa2daa1675e91 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -93,7 +93,7 @@ return TRUE var/block_chance_modifier = round(damage / -3) - for(var/obj/item/worn_thing in get_equipped_items(include_pockets = FALSE) + held_items) + for(var/obj/item/worn_thing in get_equipped_items(INCLUDE_HELD)) // Things that are supposed to be worn, being held = cannot block if(isclothing(worn_thing)) if(worn_thing in held_items) @@ -796,6 +796,10 @@ if(leg_clothes) burning_items |= leg_clothes + if (!gloves || (!(gloves.resistance_flags & FIRE_PROOF) && (gloves.resistance_flags & FLAMMABLE))) + for(var/obj/item/burnable_item in held_items) + burning_items |= burnable_item + for(var/obj/item/burning in burning_items) burning.fire_act((stacks * 25 * seconds_per_tick)) //damage taken is reduced to 2% of this value by fire_act() diff --git a/code/modules/mob/living/carbon/human/human_defines.dm b/code/modules/mob/living/carbon/human/human_defines.dm index 84d1c45466873..c63c99b8da537 100644 --- a/code/modules/mob/living/carbon/human/human_defines.dm +++ b/code/modules/mob/living/carbon/human/human_defines.dm @@ -14,15 +14,22 @@ can_be_shoved_into = TRUE initial_language_holder = /datum/language_holder/empty // We get stuff from our species flags_1 = PREVENT_CONTENTS_EXPLOSION_1 + max_grab = GRAB_KILL //Hair colour and style var/hair_color = COLOR_BLACK var/hairstyle = "Bald" ///Colours used for hair and facial hair gradients. - var/list/grad_color + var/list/grad_color = list( + COLOR_BLACK, //Hair Gradient Color + COLOR_BLACK, //Facial Hair Gradient Color + ) ///Styles used for hair and facial hair gradients. - var/list/grad_style + var/list/grad_style = list( + "None", //Hair Gradient Style + "None", //Facial Hair Gradient Style + ) //Facial hair colour and style var/facial_hair_color = COLOR_BLACK @@ -71,7 +78,7 @@ /mob/living/carbon/human, /mob/living/basic/slime, )) - var/lastpuke = 0 + var/account_id var/hardcore_survival_score = 0 diff --git a/code/modules/mob/living/carbon/human/human_helpers.dm b/code/modules/mob/living/carbon/human/human_helpers.dm index c7069ad056d4d..1fe6555cddf9c 100644 --- a/code/modules/mob/living/carbon/human/human_helpers.dm +++ b/code/modules/mob/living/carbon/human/human_helpers.dm @@ -259,7 +259,7 @@ if (preference.is_randomizable()) preference.apply_to_human(src, preference.create_random_value(preferences)) - fully_replace_character_name(real_name, dna.species.random_name()) + fully_replace_character_name(real_name, generate_random_mob_name()) /** * Setter for mob height @@ -293,6 +293,11 @@ return MONKEY_HEIGHT_DWARF else return HUMAN_HEIGHT_DWARF + if(HAS_TRAIT(src, TRAIT_TOO_TALL)) + if(ismonkey(src)) + return MONKEY_HEIGHT_TALL + else + return HUMAN_HEIGHT_TALLEST else if(ismonkey(src)) return MONKEY_HEIGHT_MEDIUM @@ -315,6 +320,8 @@ clone.fully_replace_character_name(null, dna.real_name) copy_clothing_prefs(clone) clone.age = age + clone.voice = voice + clone.pitch = pitch dna.transfer_identity(clone, transfer_SE = TRUE, transfer_species = TRUE) clone.dress_up_as_job(SSjob.GetJob(job)) @@ -322,9 +329,66 @@ for(var/datum/quirk/original_quircks as anything in quirks) clone.add_quirk(original_quircks.type, override_client = client) for(var/datum/mutation/human/mutations in dna.mutations) - clone.dna.add_mutation(mutations) + clone.dna.add_mutation(mutations, MUT_NORMAL) clone.updateappearance(mutcolor_update = TRUE, mutations_overlay_update = TRUE) clone.domutcheck() return clone + +/mob/living/carbon/human/calculate_fitness() + var/fitness_modifier = 1 + if (HAS_TRAIT(src, TRAIT_HULK)) + fitness_modifier *= 2 + if (HAS_TRAIT(src, TRAIT_STRENGTH)) + fitness_modifier *= 1.5 + if (HAS_TRAIT(src, TRAIT_ROD_SUPLEX)) + fitness_modifier *= 2 // To be able to suplex a rod, you must possess an incredible amount of power + if (HAS_TRAIT(src, TRAIT_EASILY_WOUNDED)) + fitness_modifier /= 2 + if (HAS_TRAIT(src, TRAIT_GAMER)) + fitness_modifier /= 1.5 + if (HAS_TRAIT(src, TRAIT_GRABWEAKNESS)) + fitness_modifier /= 1.5 + + var/athletics_level = mind?.get_skill_level(/datum/skill/athletics) || 1 + + var/min_damage = 0 + var/max_damage = 0 + for (var/body_zone in GLOB.limb_zones) + var/obj/item/bodypart/part = get_bodypart(body_zone) + if (isnull(part) || part.unarmed_damage_high <= 0 || HAS_TRAIT(part, TRAIT_PARALYSIS)) + continue + min_damage += part.unarmed_damage_low + max_damage += part.unarmed_damage_high + + var/damage = ((min_damage / 4) + (max_damage / 4)) / 2 // We expect you to have 4 functional limbs- if you have fewer you're probably not going to be so good at lifting + + return ceil(damage * (ceil(athletics_level / 2)) * fitness_modifier * maxHealth) + +/mob/living/carbon/human/proc/item_heal(mob/user, brute_heal, burn_heal, heal_message_brute, heal_message_burn, required_bodytype) + var/obj/item/bodypart/affecting = src.get_bodypart(check_zone(user.zone_selected)) + if (!affecting || !(affecting.bodytype & required_bodytype)) + to_chat(user, span_warning("[affecting] is already in good condition!")) + return FALSE + + var/brute_damaged = affecting.brute_dam > 0 + var/burn_damaged = affecting.burn_dam > 0 + + var/nothing_to_heal = ((brute_heal <= 0 || !brute_damaged) && (burn_heal <= 0 || !burn_damaged)) + if (nothing_to_heal) + to_chat(user, span_notice("[affecting] is already in good condition!")) + return FALSE + + src.update_damage_overlays() + var/message + if ((brute_damaged && brute_heal > 0) && (burn_damaged && burn_heal > 0)) + message = "[heal_message_brute] and [heal_message_burn] on" + else if (brute_damaged && brute_heal > 0) + message = "[heal_message_brute] on" + else + message = "[heal_message_burn] on" + affecting.heal_damage(brute_heal, burn_heal, required_bodytype) + user.visible_message(span_notice("[user] fixes some of the [message] [src]'s [affecting.name]."), \ + span_notice("You fix some of the [message] [src == user ? "your" : "[src]'s"] [affecting.name].")) + return TRUE diff --git a/code/modules/mob/living/carbon/human/human_movement.dm b/code/modules/mob/living/carbon/human/human_movement.dm index 14003b86da496..fda6d7a9142ea 100644 --- a/code/modules/mob/living/carbon/human/human_movement.dm +++ b/code/modules/mob/living/carbon/human/human_movement.dm @@ -26,8 +26,9 @@ /mob/living/carbon/human/Move(NewLoc, direct) . = ..() - if(shoes && body_position == STANDING_UP && loc == NewLoc && has_gravity(loc)) - SEND_SIGNAL(shoes, COMSIG_SHOES_STEP_ACTION) + if(shoes && body_position == STANDING_UP && has_gravity(loc)) + if((. && !moving_diagonally) || (!. && moving_diagonally == SECOND_DIAG_STEP)) + SEND_SIGNAL(shoes, COMSIG_SHOES_STEP_ACTION) /mob/living/carbon/human/Process_Spacemove(movement_dir = 0, continuous_move = FALSE) if(movement_type & FLYING || HAS_TRAIT(src, TRAIT_FREE_FLOAT_MOVEMENT)) diff --git a/code/modules/mob/living/carbon/human/human_say.dm b/code/modules/mob/living/carbon/human/human_say.dm index 8bf21e3c809a6..0ce34ffa27205 100644 --- a/code/modules/mob/living/carbon/human/human_say.dm +++ b/code/modules/mob/living/carbon/human/human_say.dm @@ -70,6 +70,9 @@ var/obj/item/radio/headset/dongle = ears if(!istype(dongle)) return FALSE + var/area/our_area = get_area(src) + if(our_area.area_flags & BINARY_JAMMING) + return FALSE return dongle.translate_binary /mob/living/carbon/human/radio(message, list/message_mods = list(), list/spans, language) //Poly has a copy of this, lazy bastard diff --git a/code/modules/mob/living/carbon/human/human_update_icons.dm b/code/modules/mob/living/carbon/human/human_update_icons.dm index 1b2b85151716e..fe5817eab2780 100644 --- a/code/modules/mob/living/carbon/human/human_update_icons.dm +++ b/code/modules/mob/living/carbon/human/human_update_icons.dm @@ -70,9 +70,9 @@ There are several things that need to be remembered: //damage overlays update_damage_overlays() -/mob/living/carbon/human/update_obscured_slots(obj/item/worn_item) +/mob/living/carbon/human/update_obscured_slots(obscured_flags) ..() - if(worn_item.flags_inv & HIDEFACE) + if(obscured_flags & HIDEFACE) sec_hud_set_security_status() /* --------------------------------------- */ @@ -90,7 +90,7 @@ There are several things that need to be remembered: update_hud_uniform(uniform) if(update_obscured) - update_obscured_slots(uniform) + update_obscured_slots(uniform.flags_inv) if(check_obscured_slots(transparent_protection = TRUE) & ITEM_SLOT_ICLOTHING) return @@ -151,7 +151,7 @@ There are several things that need to be remembered: update_hud_id(worn_item) if(update_obscured) - update_obscured_slots(worn_item) + update_obscured_slots(worn_item.flags_inv) var/icon_file = 'icons/mob/clothing/id.dmi' @@ -193,7 +193,7 @@ There are several things that need to be remembered: update_hud_gloves(worn_item) if(update_obscured) - update_obscured_slots(worn_item) + update_obscured_slots(worn_item.flags_inv) if(check_obscured_slots(transparent_protection = TRUE) & ITEM_SLOT_GLOVES) return @@ -230,7 +230,7 @@ There are several things that need to be remembered: update_hud_glasses(worn_item) if(update_obscured) - update_obscured_slots(worn_item) + update_obscured_slots(worn_item.flags_inv) if(check_obscured_slots(transparent_protection = TRUE) & ITEM_SLOT_EYES) return @@ -259,7 +259,7 @@ There are several things that need to be remembered: update_hud_ears(worn_item) if(update_obscured) - update_obscured_slots(worn_item) + update_obscured_slots(worn_item.flags_inv) if(check_obscured_slots(transparent_protection = TRUE) & ITEM_SLOT_EARS) return @@ -283,7 +283,7 @@ There are several things that need to be remembered: update_hud_neck(wear_neck) if(update_obscured) - update_obscured_slots(worn_item) + update_obscured_slots(worn_item.flags_inv) if(check_obscured_slots(transparent_protection = TRUE) & ITEM_SLOT_NECK) return @@ -312,7 +312,7 @@ There are several things that need to be remembered: update_hud_shoes(worn_item) if(update_obscured) - update_obscured_slots(worn_item) + update_obscured_slots(worn_item.flags_inv) if(check_obscured_slots(transparent_protection = TRUE) & ITEM_SLOT_FEET) return @@ -352,7 +352,7 @@ There are several things that need to be remembered: update_hud_s_store(worn_item) if(update_obscured) - update_obscured_slots(worn_item) + update_obscured_slots(worn_item.flags_inv) if(check_obscured_slots(transparent_protection = TRUE) & ITEM_SLOT_SUITSTORE) return @@ -374,7 +374,7 @@ There are several things that need to be remembered: update_hud_head(worn_item) if(update_obscured) - update_obscured_slots(worn_item) + update_obscured_slots(worn_item.flags_inv) if(check_obscured_slots(transparent_protection = TRUE) & ITEM_SLOT_HEAD) return @@ -400,7 +400,7 @@ There are several things that need to be remembered: update_hud_belt(worn_item) if(update_obscured) - update_obscured_slots(worn_item) + update_obscured_slots(worn_item.flags_inv) if(check_obscured_slots(transparent_protection = TRUE) & ITEM_SLOT_BELT) return @@ -426,7 +426,7 @@ There are several things that need to be remembered: update_hud_wear_suit(worn_item) if(update_obscured) - update_obscured_slots(worn_item) + update_obscured_slots(worn_item.flags_inv) var/icon_file = DEFAULT_SUIT_FILE @@ -477,7 +477,7 @@ There are several things that need to be remembered: update_hud_wear_mask(worn_item) if(update_obscured) - update_obscured_slots(worn_item) + update_obscured_slots(worn_item.flags_inv) if(check_obscured_slots(transparent_protection = TRUE) & ITEM_SLOT_MASK) return @@ -504,7 +504,7 @@ There are several things that need to be remembered: update_hud_back(worn_item) if(update_obscured) - update_obscured_slots(worn_item) + update_obscured_slots(worn_item.flags_inv) var/icon_file = 'icons/mob/clothing/back.dmi' @@ -864,20 +864,34 @@ generate/load female uniform sprites matching all previously decided variables "params" = displacement_map_filter(cut_legs_mask, x = 0, y = 0, size = 4), ), )) + if(HUMAN_HEIGHT_DWARF) // tall monkeys and dwarves use the same value + if(ismonkey(src)) + appearance.add_filters(list( + list( + "name" = "Monkey_Torso", + "priority" = 1, + "params" = displacement_map_filter(cut_torso_mask, x = 0, y = 0, size = 1), + ), + list( + "name" = "Monkey_Legs", + "priority" = 1, + "params" = displacement_map_filter(cut_legs_mask, x = 0, y = 0, size = 1), + ), + )) + else + appearance.add_filters(list( + list( + "name" = "Gnome_Cut_Torso", + "priority" = 1, + "params" = displacement_map_filter(cut_torso_mask, x = 0, y = 0, size = 2), + ), + list( + "name" = "Gnome_Cut_Legs", + "priority" = 1, + "params" = displacement_map_filter(cut_legs_mask, x = 0, y = 0, size = 3), + ), + )) // Don't set this one directly, use TRAIT_DWARF - if(HUMAN_HEIGHT_DWARF) - appearance.add_filters(list( - list( - "name" = "Gnome_Cut_Torso", - "priority" = 1, - "params" = displacement_map_filter(cut_torso_mask, x = 0, y = 0, size = 2), - ), - list( - "name" = "Gnome_Cut_Legs", - "priority" = 1, - "params" = displacement_map_filter(cut_legs_mask, x = 0, y = 0, size = 3), - ), - )) if(HUMAN_HEIGHT_SHORTEST) appearance.add_filters(list( list( diff --git a/code/modules/mob/living/carbon/human/inventory.dm b/code/modules/mob/living/carbon/human/inventory.dm index 47b08cd7a0a0b..a24e9cd070d86 100644 --- a/code/modules/mob/living/carbon/human/inventory.dm +++ b/code/modules/mob/living/carbon/human/inventory.dm @@ -1,3 +1,20 @@ + +/** + * Used to return a list of equipped items on a human mob; does not by default include held items, see include_flags + * + * Argument(s): + * * Optional - include_flags, (see obj.flags.dm) describes which optional things to include or not (pockets, accessories, held items) + */ + +/mob/living/carbon/human/get_equipped_items(include_flags = NONE) + var/list/items = ..() + if(!(include_flags & INCLUDE_POCKETS)) + items -= list(l_store, r_store, s_store) + if((include_flags & INCLUDE_ACCESSORIES) && w_uniform) + var/obj/item/clothing/under/worn_under = w_uniform + items += worn_under.attached_accessories + return items + /mob/living/carbon/human/can_equip(obj/item/equip_target, slot, disable_warning = FALSE, bypass_equip_delay_self = FALSE, ignore_equipped = FALSE, indirect_action = FALSE) if(SEND_SIGNAL(src, COMSIG_HUMAN_EQUIPPING_ITEM, equip_target, slot) == COMPONENT_BLOCK_EQUIP) return FALSE @@ -139,8 +156,6 @@ if(glasses) return glasses = equipping - if(glasses.glass_colour_type) - update_glasses_color(glasses, 1) if(glasses.vision_flags || glasses.invis_override || glasses.invis_view || !isnull(glasses.lighting_cutoff)) update_sight() update_worn_glasses() @@ -233,10 +248,8 @@ update_worn_gloves() else if(I == glasses) glasses = null - var/obj/item/clothing/glasses/G = I - if(G.glass_colour_type) - update_glasses_color(G, 0) - if(G.vision_flags || G.invis_override || G.invis_view || !isnull(G.lighting_cutoff)) + var/obj/item/clothing/glasses/old_glasses = I + if(old_glasses.vision_flags || old_glasses.invis_override || old_glasses.invis_view || !isnull(old_glasses.lighting_cutoff)) update_sight() if(!QDELETED(src)) update_worn_glasses() @@ -280,7 +293,7 @@ return update_equipment_speed_mods() - update_obscured_slots(I) + update_obscured_slots(I.flags_inv) /mob/living/carbon/human/toggle_internals(obj/item/tank, is_external = FALSE) // Just close the tank if it's the one the mob already has open. @@ -292,8 +305,8 @@ return toggle_open_internals(tank, is_external) // Use mask in absence of tube. if(isclothing(wear_mask) && ((wear_mask.visor_flags & MASKINTERNALS) || (wear_mask.clothing_flags & MASKINTERNALS))) - // Adjust dishevelled breathing mask back onto face. - if (wear_mask.up) + // Adjust dishevelled breathing mask back onto face unless it is exempt. + if ((wear_mask.up) && !(wear_mask.clothing_flags & INTERNALS_ADJUST_EXEMPT)) wear_mask.adjust_visor(src) return toggle_open_internals(tank, is_external) // Use helmet in absence of tube or valid mask. @@ -347,7 +360,7 @@ //delete all equipment without dropping anything /mob/living/carbon/human/proc/delete_equipment() - for(var/slot in get_equipped_items(include_pockets = TRUE))//order matters, dependant slots go first + for(var/slot in get_equipped_items(INCLUDE_POCKETS))//order matters, dependant slots go first qdel(slot) for(var/obj/item/held_item in held_items) qdel(held_item) @@ -390,3 +403,24 @@ return stored.attack_hand(src) // take out thing from item in storage slot return + +/mob/living/carbon/human/change_number_of_hands(amt) + var/old_limbs = held_items.len + if(amt < old_limbs) + for(var/i in hand_bodyparts.len to amt step -1) + var/obj/item/bodypart/BP = hand_bodyparts[i] + BP.dismember() + hand_bodyparts[i] = null + hand_bodyparts.len = amt + else if(amt > old_limbs) + hand_bodyparts.len = amt + for(var/i in old_limbs+1 to amt) + var/path = /obj/item/bodypart/arm/left + if(!(i % 2)) + path = /obj/item/bodypart/arm/right + + var/obj/item/bodypart/BP = new path () + BP.held_index = i + BP.try_attach_limb(src, TRUE) + hand_bodyparts[i] = BP + ..() //Don't redraw hands until we have organs for them diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index be355bddbea28..d8119c6a5279a 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -270,19 +270,6 @@ return min(1, thermal_protection) -/mob/living/carbon/human/handle_random_events(seconds_per_tick, times_fired) - //Puke if toxloss is too high - if(stat) - return - if(getToxLoss() < 45 || nutrition <= 20) - return - - lastpuke += SPT_PROB(30, seconds_per_tick) - if(lastpuke >= 50) // about 25 second delay I guess // This is actually closer to 150 seconds - vomit(VOMIT_CATEGORY_DEFAULT, lost_nutrition = 20) - lastpuke = 0 - - /mob/living/carbon/human/has_smoke_protection() if(isclothing(wear_mask)) if(wear_mask.clothing_flags & BLOCK_GAS_SMOKE_EFFECT) diff --git a/code/modules/mob/living/carbon/human/monkey.dm b/code/modules/mob/living/carbon/human/monkey.dm index 7a2e7bb74747d..e63b35ab42af4 100644 --- a/code/modules/mob/living/carbon/human/monkey.dm +++ b/code/modules/mob/living/carbon/human/monkey.dm @@ -4,6 +4,7 @@ ai_controller = /datum/ai_controller/monkey /mob/living/carbon/human/species/monkey/Initialize(mapload, cubespawned = FALSE, mob/spawner) + ADD_TRAIT(src, TRAIT_BORN_MONKEY, INNATE_TRAIT) if (cubespawned) var/cap = CONFIG_GET(number/monkeycap) if (LAZYLEN(SSmobs.cubemonkeys) > cap) diff --git a/code/modules/mob/living/carbon/human/species_types/ethereal.dm b/code/modules/mob/living/carbon/human/species_types/ethereal.dm index e37e7ca81447f..4c307107f153d 100644 --- a/code/modules/mob/living/carbon/human/species_types/ethereal.dm +++ b/code/modules/mob/living/carbon/human/species_types/ethereal.dm @@ -80,14 +80,6 @@ QDEL_NULL(ethereal_light) return ..() -/datum/species/ethereal/random_name(gender,unique,lastname) - if(unique) - return random_unique_ethereal_name() - - var/randname = ethereal_name() - - return randname - /datum/species/ethereal/randomize_features() var/list/features = ..() features["ethcolor"] = GLOB.color_list_ethereal[pick(GLOB.color_list_ethereal)] diff --git a/code/modules/mob/living/carbon/human/species_types/felinid.dm b/code/modules/mob/living/carbon/human/species_types/felinid.dm index 731b6047a0644..4866501584a96 100644 --- a/code/modules/mob/living/carbon/human/species_types/felinid.dm +++ b/code/modules/mob/living/carbon/human/species_types/felinid.dm @@ -50,6 +50,54 @@ features["ears"] = pick("None", "Cat") return features +/datum/species/human/felinid/get_laugh_sound(mob/living/carbon/human/felinid) + if(felinid.physique == FEMALE) + return 'sound/voice/human/womanlaugh.ogg' + return pick( + 'sound/voice/human/manlaugh1.ogg', + 'sound/voice/human/manlaugh2.ogg', + ) + + +/datum/species/human/felinid/get_cough_sound(mob/living/carbon/human/felinid) + if(felinid.physique == FEMALE) + return pick( + 'sound/voice/human/female_cough1.ogg', + 'sound/voice/human/female_cough2.ogg', + 'sound/voice/human/female_cough3.ogg', + 'sound/voice/human/female_cough4.ogg', + 'sound/voice/human/female_cough5.ogg', + 'sound/voice/human/female_cough6.ogg', + ) + return pick( + 'sound/voice/human/male_cough1.ogg', + 'sound/voice/human/male_cough2.ogg', + 'sound/voice/human/male_cough3.ogg', + 'sound/voice/human/male_cough4.ogg', + 'sound/voice/human/male_cough5.ogg', + 'sound/voice/human/male_cough6.ogg', + ) + + +/datum/species/human/felinid/get_cry_sound(mob/living/carbon/human/felinid) + if(felinid.physique == FEMALE) + return pick( + 'sound/voice/human/female_cry1.ogg', + 'sound/voice/human/female_cry2.ogg', + ) + return pick( + 'sound/voice/human/male_cry1.ogg', + 'sound/voice/human/male_cry2.ogg', + 'sound/voice/human/male_cry3.ogg', + ) + + +/datum/species/human/felinid/get_sneeze_sound(mob/living/carbon/human/felinid) + if(felinid.physique == FEMALE) + return 'sound/voice/human/female_sneeze1.ogg' + return 'sound/voice/human/male_sneeze1.ogg' + + /proc/mass_purrbation() for(var/mob in GLOB.human_list) purrbation_apply(mob) @@ -78,9 +126,6 @@ var/datum/species/human/felinid/cat_species = soon_to_be_felinid.dna.species cat_species.original_felinid = FALSE else - var/obj/item/organ/internal/ears/cat/kitty_ears = new - var/obj/item/organ/external/tail/cat/kitty_tail = new - // This removes the spines if they exist var/obj/item/organ/external/spines/current_spines = soon_to_be_felinid.get_organ_slot(ORGAN_SLOT_EXTERNAL_SPINES) if(current_spines) @@ -91,8 +136,12 @@ // Humans get converted directly to felinids, and the key is handled in on_species_gain. // Now when we get mob.dna.features[feature_key], it returns None, which is why the tail is invisible. // stored_feature_id is only set once (the first time an organ is inserted), so this should be safe. + var/obj/item/organ/internal/ears/cat/kitty_ears = new kitty_ears.Insert(soon_to_be_felinid, special = TRUE, movement_flags = DELETE_IF_REPLACED) - kitty_tail.Insert(soon_to_be_felinid, special = TRUE, movement_flags = DELETE_IF_REPLACED) + if(should_external_organ_apply_to(/obj/item/organ/external/tail/cat, soon_to_be_felinid)) //only give them a tail if they actually have sprites for it / are a compatible subspecies. + var/obj/item/organ/external/tail/cat/kitty_tail = new + kitty_tail.Insert(soon_to_be_felinid, special = TRUE, movement_flags = DELETE_IF_REPLACED) + if(!silent) to_chat(soon_to_be_felinid, span_boldnotice("Something is nya~t right.")) playsound(get_turf(soon_to_be_felinid), 'sound/effects/meow1.ogg', 50, TRUE, -1) @@ -113,6 +162,8 @@ qdel(old_tail) // Locate does not work on assoc lists, so we do it by hand for(var/external_organ in target_species.external_organs) + if(!should_external_organ_apply_to(external_organ, purrbated_human)) + continue if(ispath(external_organ, /obj/item/organ/external/tail)) var/obj/item/organ/external/tail/new_tail = new external_organ() new_tail.Insert(purrbated_human, special = TRUE, movement_flags = DELETE_IF_REPLACED) @@ -177,7 +228,7 @@ SPECIES_PERK_ICON = FA_ICON_PERSON_FALLING, SPECIES_PERK_NAME = "Catlike Grace", SPECIES_PERK_DESC = "Felinids have catlike instincts allowing them to land upright on their feet. \ - Instead of being knocked down from falling, you only recieve a short slowdown. \ + Instead of being knocked down from falling, you only receive a short slowdown. \ However, they do not have catlike legs, and the fall will deal additional damage.", ), list( diff --git a/code/modules/mob/living/carbon/human/species_types/golems.dm b/code/modules/mob/living/carbon/human/species_types/golems.dm index 4e860014554e8..13471b2872b98 100644 --- a/code/modules/mob/living/carbon/human/species_types/golems.dm +++ b/code/modules/mob/living/carbon/human/species_types/golems.dm @@ -51,15 +51,6 @@ BODY_ZONE_CHEST = /obj/item/bodypart/chest/golem, ) - /// Chance that we will generate a human surname, for lore reasons - var/human_surname_chance = 3 - -/datum/species/golem/random_name(gender,unique,lastname) - var/name = pick(GLOB.golem_names) - if (prob(human_surname_chance)) - name += " [pick(GLOB.last_names)]" - return name - /datum/species/golem/get_physical_attributes() return "Golems are hardy creatures made out of stone, which are thus naturally resistant to many dangers, including asphyxiation, fire, radiation, electricity, and viruses.\ They gain special abilities depending on the type of material consumed, but they need to consume material to keep their body animated." diff --git a/code/modules/mob/living/carbon/human/species_types/humans.dm b/code/modules/mob/living/carbon/human/species_types/humans.dm index c7a181027e64e..98a4518c4fa2e 100644 --- a/code/modules/mob/living/carbon/human/species_types/humans.dm +++ b/code/modules/mob/living/carbon/human/species_types/humans.dm @@ -34,6 +34,51 @@ 'sound/voice/human/femalescream_5.ogg', ) +/datum/species/human/get_cough_sound(mob/living/carbon/human/human) + if(human.physique == FEMALE) + return pick( + 'sound/voice/human/female_cough1.ogg', + 'sound/voice/human/female_cough2.ogg', + 'sound/voice/human/female_cough3.ogg', + 'sound/voice/human/female_cough4.ogg', + 'sound/voice/human/female_cough5.ogg', + 'sound/voice/human/female_cough6.ogg', + ) + return pick( + 'sound/voice/human/male_cough1.ogg', + 'sound/voice/human/male_cough2.ogg', + 'sound/voice/human/male_cough3.ogg', + 'sound/voice/human/male_cough4.ogg', + 'sound/voice/human/male_cough5.ogg', + 'sound/voice/human/male_cough6.ogg', + ) + +/datum/species/human/get_cry_sound(mob/living/carbon/human/human) + if(human.physique == FEMALE) + return pick( + 'sound/voice/human/female_cry1.ogg', + 'sound/voice/human/female_cry2.ogg', + ) + return pick( + 'sound/voice/human/male_cry1.ogg', + 'sound/voice/human/male_cry2.ogg', + 'sound/voice/human/male_cry3.ogg', + ) + + +/datum/species/human/get_sneeze_sound(mob/living/carbon/human/human) + if(human.physique == FEMALE) + return 'sound/voice/human/female_sneeze1.ogg' + return 'sound/voice/human/male_sneeze1.ogg' + +/datum/species/human/get_laugh_sound(mob/living/carbon/human/human) + if(human.physique == FEMALE) + return 'sound/voice/human/womanlaugh.ogg' + return pick( + 'sound/voice/human/manlaugh1.ogg', + 'sound/voice/human/manlaugh2.ogg', + ) + /datum/species/human/get_species_description() return "Humans are the dominant species in the known galaxy. \ Their kind extend from old Earth to the edges of known space." 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 c4aad8a0806d5..276d4a0fa7a5f 100644 --- a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm @@ -83,7 +83,7 @@ Cannibalize_Body(slime) regenerate_limbs?.build_all_button_icons(UPDATE_BUTTON_STATUS) - return HANDLE_BLOOD_NO_NUTRITION_DRAIN|HANDLE_BLOOD_NO_EFFECTS + return HANDLE_BLOOD_NO_NUTRITION_DRAIN|HANDLE_BLOOD_NO_OXYLOSS /datum/species/jelly/proc/Cannibalize_Body(mob/living/carbon/human/H) var/list/limbs_to_consume = list(BODY_ZONE_R_ARM, BODY_ZONE_L_ARM, BODY_ZONE_R_LEG, BODY_ZONE_L_LEG) - H.get_missing_limbs() diff --git a/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm b/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm index 3e20d6b1a7750..2a83efbda3e7e 100644 --- a/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm @@ -8,7 +8,8 @@ TRAIT_TACKLING_TAILED_DEFENDER, ) inherent_biotypes = MOB_ORGANIC|MOB_HUMANOID|MOB_REPTILE - mutant_bodyparts = list("body_markings" = "None", "legs" = "Normal Legs") + mutant_bodyparts = list("legs" = "Normal Legs") + body_markings = list(/datum/bodypart_overlay/simple/body_marking/lizard = "None") external_organs = list( /obj/item/organ/external/horns = "None", /obj/item/organ/external/frills = "None", @@ -47,21 +48,9 @@ /datum/species/lizard/body_temperature_core(mob/living/carbon/human/humi, seconds_per_tick, times_fired) return -/datum/species/lizard/random_name(gender,unique,lastname) - if(unique) - return random_unique_lizard_name(gender) - - var/randname = lizard_name(gender) - - if(lastname) - randname += " [lastname]" - - return randname - - /datum/species/lizard/randomize_features() var/list/features = ..() - features["body_markings"] = pick(GLOB.body_markings_list) + features["lizard_markings"] = pick(SSaccessories.lizard_markings_list) return features /datum/species/lizard/get_scream_sound(mob/living/carbon/human/lizard) @@ -71,6 +60,47 @@ 'sound/voice/lizard/lizard_scream_3.ogg', ) +/datum/species/lizard/get_cough_sound(mob/living/carbon/human/lizard) + if(lizard.physique == FEMALE) + return pick( + 'sound/voice/human/female_cough1.ogg', + 'sound/voice/human/female_cough2.ogg', + 'sound/voice/human/female_cough3.ogg', + 'sound/voice/human/female_cough4.ogg', + 'sound/voice/human/female_cough5.ogg', + 'sound/voice/human/female_cough6.ogg', + ) + return pick( + 'sound/voice/human/male_cough1.ogg', + 'sound/voice/human/male_cough2.ogg', + 'sound/voice/human/male_cough3.ogg', + 'sound/voice/human/male_cough4.ogg', + 'sound/voice/human/male_cough5.ogg', + 'sound/voice/human/male_cough6.ogg', + ) + + +/datum/species/lizard/get_cry_sound(mob/living/carbon/human/lizard) + if(lizard.physique == FEMALE) + return pick( + 'sound/voice/human/female_cry1.ogg', + 'sound/voice/human/female_cry2.ogg', + ) + return pick( + 'sound/voice/human/male_cry1.ogg', + 'sound/voice/human/male_cry2.ogg', + 'sound/voice/human/male_cry3.ogg', + ) + + +/datum/species/lizard/get_sneeze_sound(mob/living/carbon/human/lizard) + if(lizard.physique == FEMALE) + return 'sound/voice/human/female_sneeze1.ogg' + return 'sound/voice/human/male_sneeze1.ogg' + +/datum/species/lizard/get_laugh_sound(mob/living/carbon/human/lizard) + return 'sound/voice/lizard/lizard_laugh1.ogg' + /datum/species/lizard/get_physical_attributes() return "Lizardpeople can withstand slightly higher temperatures than most species, but they are very vulnerable to the cold \ and can't regulate their body-temperature internally, making the vacuum of space extremely deadly to them." @@ -127,8 +157,8 @@ Lizard subspecies: ASHWALKERS inherent_traits = list( TRAIT_MUTANT_COLORS, TRAIT_VIRUSIMMUNE, - TRAIT_FORBID_MINING_SHUTTLE_CONSOLE_OUTSIDE_STATION, ) + inherent_factions = list(FACTION_ASHWALKER) species_language_holder = /datum/language_holder/lizard/ash digitigrade_customization = DIGITIGRADE_FORCED examine_limb_id = SPECIES_LIZARD diff --git a/code/modules/mob/living/carbon/human/species_types/monkeys.dm b/code/modules/mob/living/carbon/human/species_types/monkeys.dm index 159824f2ef33f..e1163f1387d5c 100644 --- a/code/modules/mob/living/carbon/human/species_types/monkeys.dm +++ b/code/modules/mob/living/carbon/human/species_types/monkeys.dm @@ -41,9 +41,6 @@ payday_modifier = 1.5 ai_controlled_species = TRUE -/datum/species/monkey/random_name(gender,unique,lastname) - return "monkey ([rand(1, 999)])" - /datum/species/monkey/on_species_gain(mob/living/carbon/human/human_who_gained_species, datum/species/old_species, pref_load) . = ..() passtable_on(human_who_gained_species, SPECIES_TRAIT) @@ -65,15 +62,7 @@ return ..() /datum/species/monkey/get_scream_sound(mob/living/carbon/human/monkey) - return pick( - 'sound/creatures/monkey/monkey_screech_1.ogg', - 'sound/creatures/monkey/monkey_screech_2.ogg', - 'sound/creatures/monkey/monkey_screech_3.ogg', - 'sound/creatures/monkey/monkey_screech_4.ogg', - 'sound/creatures/monkey/monkey_screech_5.ogg', - 'sound/creatures/monkey/monkey_screech_6.ogg', - 'sound/creatures/monkey/monkey_screech_7.ogg', - ) + return get_sfx(SFX_SCREECH) /datum/species/monkey/get_physical_attributes() return "Monkeys are slippery, can crawl into vents, and are more dextrous than humans.. but only when stealing things. \ @@ -168,24 +157,17 @@ /obj/item/organ/internal/brain/primate/on_mob_insert(mob/living/carbon/primate) . = ..() - RegisterSignal(primate, COMSIG_MOVABLE_CROSS, PROC_REF(on_crossed)) + RegisterSignal(primate, COMSIG_LIVING_MOB_BUMPED, PROC_REF(on_mob_bump)) /obj/item/organ/internal/brain/primate/on_mob_remove(mob/living/carbon/primate) . = ..() - UnregisterSignal(primate, COMSIG_MOVABLE_CROSS) + UnregisterSignal(primate, COMSIG_LIVING_MOB_BUMPED) -/obj/item/organ/internal/brain/primate/proc/on_crossed(datum/source, atom/movable/crossed) +/obj/item/organ/internal/brain/primate/proc/on_mob_bump(mob/source, mob/living/crossing_mob) SIGNAL_HANDLER - if(!tripping) - return - if(IS_DEAD_OR_INCAP(owner) || !isliving(crossed)) - return - var/mob/living/in_the_way_mob = crossed - if(iscarbon(in_the_way_mob) && !in_the_way_mob.combat_mode) - return - if(in_the_way_mob.pass_flags & PASSMOB) + if(!tripping || !crossing_mob.combat_mode) return - in_the_way_mob.knockOver(owner) + crossing_mob.knockOver(owner) /obj/item/organ/internal/brain/primate/get_attacking_limb(mob/living/carbon/human/target) if(!HAS_TRAIT(owner, TRAIT_ADVANCEDTOOLUSER)) diff --git a/code/modules/mob/living/carbon/human/species_types/mothmen.dm b/code/modules/mob/living/carbon/human/species_types/mothmen.dm index 68fb87142f6c9..26efe358221fc 100644 --- a/code/modules/mob/living/carbon/human/species_types/mothmen.dm +++ b/code/modules/mob/living/carbon/human/species_types/mothmen.dm @@ -3,12 +3,11 @@ plural_form = "Mothmen" id = SPECIES_MOTH inherent_traits = list( - TRAIT_HAS_MARKINGS, TRAIT_TACKLING_WINGED_ATTACKER, TRAIT_ANTENNAE, ) inherent_biotypes = MOB_ORGANIC|MOB_HUMANOID|MOB_BUG - mutant_bodyparts = list("moth_markings" = "None") + body_markings = list(/datum/bodypart_overlay/simple/body_marking/moth = "None") external_organs = list(/obj/item/organ/external/wings/moth = "Plain", /obj/item/organ/external/antennae = "Plain") meat = /obj/item/food/meat/slab/human/mutant/moth mutanttongue = /obj/item/organ/internal/tongue/moth @@ -34,17 +33,6 @@ var/mob/living/carbon/human/H = C handle_mutant_bodyparts(H) -/datum/species/moth/random_name(gender,unique,lastname) - if(unique) - return random_unique_moth_name() - - var/randname = moth_name() - - if(lastname) - randname += " [lastname]" - - return randname - /datum/species/moth/on_species_gain(mob/living/carbon/human/human_who_gained_species, datum/species/old_species, pref_load) . = ..() RegisterSignal(human_who_gained_species, COMSIG_MOB_APPLY_DAMAGE_MODIFIERS, PROC_REF(damage_weakness)) @@ -61,12 +49,54 @@ /datum/species/moth/randomize_features() var/list/features = ..() - features["moth_markings"] = pick(GLOB.moth_markings_list) + features["moth_markings"] = pick(SSaccessories.moth_markings_list) return features -/datum/species/moth/get_scream_sound(mob/living/carbon/human/human) +/datum/species/moth/get_scream_sound(mob/living/carbon/human/moth) return 'sound/voice/moth/scream_moth.ogg' +/datum/species/moth/get_cough_sound(mob/living/carbon/human/moth) + if(moth.physique == FEMALE) + return pick( + 'sound/voice/human/female_cough1.ogg', + 'sound/voice/human/female_cough2.ogg', + 'sound/voice/human/female_cough3.ogg', + 'sound/voice/human/female_cough4.ogg', + 'sound/voice/human/female_cough5.ogg', + 'sound/voice/human/female_cough6.ogg', + ) + return pick( + 'sound/voice/human/male_cough1.ogg', + 'sound/voice/human/male_cough2.ogg', + 'sound/voice/human/male_cough3.ogg', + 'sound/voice/human/male_cough4.ogg', + 'sound/voice/human/male_cough5.ogg', + 'sound/voice/human/male_cough6.ogg', + ) + + +/datum/species/moth/get_cry_sound(mob/living/carbon/human/moth) + if(moth.physique == FEMALE) + return pick( + 'sound/voice/human/female_cry1.ogg', + 'sound/voice/human/female_cry2.ogg', + ) + return pick( + 'sound/voice/human/male_cry1.ogg', + 'sound/voice/human/male_cry2.ogg', + 'sound/voice/human/male_cry3.ogg', + ) + + +/datum/species/moth/get_sneeze_sound(mob/living/carbon/human/moth) + if(moth.physique == FEMALE) + return 'sound/voice/human/female_sneeze1.ogg' + return 'sound/voice/human/male_sneeze1.ogg' + + +/datum/species/moth/get_laugh_sound(mob/living/carbon/human/moth) + return 'sound/voice/moth/moth_laugh1.ogg' + /datum/species/moth/get_physical_attributes() return "Moths have large and fluffy wings, which help them navigate the station if gravity is offline by pushing the air around them. \ Due to that, it isn't of much use out in space. Their eyes are very sensitive." diff --git a/code/modules/mob/living/carbon/human/species_types/mushpeople.dm b/code/modules/mob/living/carbon/human/species_types/mushpeople.dm index f3486f1342f68..14d6c1437f0da 100644 --- a/code/modules/mob/living/carbon/human/species_types/mushpeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/mushpeople.dm @@ -83,7 +83,7 @@ feature_key = "caps" /datum/bodypart_overlay/mutant/mushroom_cap/get_global_feature_list() - return GLOB.caps_list + return SSaccessories.caps_list /datum/bodypart_overlay/mutant/mushroom_cap/can_draw_on_bodypart(mob/living/carbon/human/human) if((human.head?.flags_inv & HIDEHAIR) || (human.wear_mask?.flags_inv & HIDEHAIR)) diff --git a/code/modules/mob/living/carbon/human/species_types/plasmamen.dm b/code/modules/mob/living/carbon/human/species_types/plasmamen.dm index 2d053813e5b83..e63e3c39c4885 100644 --- a/code/modules/mob/living/carbon/human/species_types/plasmamen.dm +++ b/code/modules/mob/living/carbon/human/species_types/plasmamen.dm @@ -129,17 +129,6 @@ else give_important_for_life(equipping) -/datum/species/plasmaman/random_name(gender,unique,lastname) - if(unique) - return random_unique_plasmaman_name() - - var/randname = plasmaman_name() - - if(lastname) - randname += " [lastname]" - - return randname - /datum/species/plasmaman/get_scream_sound(mob/living/carbon/human) return pick( 'sound/voice/plasmaman/plasmeme_scream_1.ogg', diff --git a/code/modules/mob/living/carbon/human/species_types/snail.dm b/code/modules/mob/living/carbon/human/species_types/snail.dm index 93d88a3a777f2..741e40bed6b33 100644 --- a/code/modules/mob/living/carbon/human/species_types/snail.dm +++ b/code/modules/mob/living/carbon/human/species_types/snail.dm @@ -26,6 +26,9 @@ BODY_ZONE_R_LEG = /obj/item/bodypart/leg/right/snail ) + ///Multiplier for the speed we give them. Positive numbers make it move slower, negative numbers make it move faster. + var/snail_speed_mod = 6 + /datum/species/snail/prepare_human_for_preview(mob/living/carbon/human/human) human.dna.features["mcolor"] = COLOR_BEIGE human.update_body(is_creating = TRUE) @@ -86,13 +89,14 @@ . = ..() var/obj/item/storage/backpack/bag = new_snailperson.get_item_by_slot(ITEM_SLOT_BACK) if(!istype(bag, /obj/item/storage/backpack/snail)) - if(new_snailperson.dropItemToGround(bag)) //returns TRUE even if its null - new_snailperson.equip_to_slot_or_del(new /obj/item/storage/backpack/snail(new_snailperson), ITEM_SLOT_BACK) - new_snailperson.AddElement(/datum/element/snailcrawl) + new_snailperson.equip_to_slot_or_del(new /obj/item/storage/backpack/snail(new_snailperson), ITEM_SLOT_BACK) + new_snailperson.AddElement(/datum/element/lube_walking, require_resting = TRUE) + new_snailperson.add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/snail, multiplicative_slowdown = snail_speed_mod) /datum/species/snail/on_species_loss(mob/living/carbon/former_snailperson, datum/species/new_species, pref_load) . = ..() - former_snailperson.RemoveElement(/datum/element/snailcrawl) + former_snailperson.remove_movespeed_modifier(/datum/movespeed_modifier/snail) + former_snailperson.RemoveElement(/datum/element/lube_walking, require_resting = TRUE) var/obj/item/storage/backpack/bag = former_snailperson.get_item_by_slot(ITEM_SLOT_BACK) if(istype(bag, /obj/item/storage/backpack/snail)) bag.emptyStorage() diff --git a/code/modules/mob/living/carbon/inventory.dm b/code/modules/mob/living/carbon/inventory.dm index 27477791092cf..a377568246404 100644 --- a/code/modules/mob/living/carbon/inventory.dm +++ b/code/modules/mob/living/carbon/inventory.dm @@ -1,3 +1,33 @@ +/mob/living/carbon/proc/check_obscured_slots(transparent_protection) + var/obscured = NONE + var/hidden_slots = NONE + + for(var/obj/item/equipped_item in get_equipped_items()) + hidden_slots |= equipped_item.flags_inv + if(transparent_protection) + hidden_slots |= equipped_item.transparent_protection + + if(hidden_slots & HIDENECK) + obscured |= ITEM_SLOT_NECK + if(hidden_slots & HIDEMASK) + obscured |= ITEM_SLOT_MASK + if(hidden_slots & HIDEEYES) + obscured |= ITEM_SLOT_EYES + if(hidden_slots & HIDEEARS) + obscured |= ITEM_SLOT_EARS + if(hidden_slots & HIDEGLOVES) + obscured |= ITEM_SLOT_GLOVES + if(hidden_slots & HIDEJUMPSUIT) + obscured |= ITEM_SLOT_ICLOTHING + if(hidden_slots & HIDESHOES) + obscured |= ITEM_SLOT_FEET + if(hidden_slots & HIDESUITSTORAGE) + obscured |= ITEM_SLOT_SUITSTORE + if(hidden_slots & HIDEHEADGEAR) + obscured |= ITEM_SLOT_HEAD + + return obscured + /mob/living/carbon/get_item_by_slot(slot_id) switch(slot_id) if(ITEM_SLOT_BACK) @@ -204,7 +234,7 @@ return update_equipment_speed_mods() - update_obscured_slots(I) + update_obscured_slots(I.flags_inv) /// Returns TRUE if an air tank compatible helmet is equipped. /mob/living/carbon/proc/can_breathe_helmet() @@ -282,7 +312,7 @@ update_mob_action_buttons() return TRUE -/// Close the the currently open external (that's EX-ternal) air tank. Returns TREUE if successful. +/// Close the the currently open external (that's EX-ternal) air tank. Returns TRUE if successful. /mob/living/carbon/proc/close_externals() return close_internals(TRUE) diff --git a/code/modules/mob/living/carbon/life.dm b/code/modules/mob/living/carbon/life.dm index e5f91b1b1b81a..7fb92c26e6183 100644 --- a/code/modules/mob/living/carbon/life.dm +++ b/code/modules/mob/living/carbon/life.dm @@ -24,11 +24,7 @@ if(stat != DEAD) handle_brain_damage(seconds_per_tick, times_fired) - if(stat == DEAD) - stop_sound_channel(CHANNEL_HEARTBEAT) - else - if(getStaminaLoss() > 0 && stam_regen_start_time <= world.time) - adjustStaminaLoss(-INFINITY) + if(stat != DEAD) handle_bodyparts(seconds_per_tick, times_fired) if(. && mind) //. == not dead @@ -68,10 +64,11 @@ // Second link in a breath chain, calls [carbon/proc/check_breath()] /mob/living/carbon/proc/breathe(seconds_per_tick, times_fired) var/obj/item/organ/internal/lungs = get_organ_slot(ORGAN_SLOT_LUNGS) - if(SEND_SIGNAL(src, COMSIG_CARBON_ATTEMPT_BREATHE) & COMSIG_CARBON_BLOCK_BREATH) + + if(SEND_SIGNAL(src, COMSIG_CARBON_ATTEMPT_BREATHE, seconds_per_tick, times_fired) & COMSIG_CARBON_BLOCK_BREATH) return - SEND_SIGNAL(src, COMSIG_CARBON_PRE_BREATHE) + SEND_SIGNAL(src, COMSIG_CARBON_PRE_BREATHE, seconds_per_tick, times_fired) var/datum/gas_mixture/environment if(loc) @@ -317,11 +314,6 @@ // Clear moodlet if no miasma at all. clear_mood_event("smell") else - // Miasma sickness - if(prob(1 * miasma_pp)) - var/datum/disease/advance/miasma_disease = new /datum/disease/advance/random(max_symptoms = 2, max_level = 3) - miasma_disease.name = "Unknown" - ForceContractDisease(miasma_disease, make_copy = TRUE, del_on_fail = TRUE) // Miasma side-effects. if (HAS_TRAIT(src, TRAIT_ANOSMIA)) //We can't feel miasma without sense of smell return @@ -482,8 +474,6 @@ for(var/datum/disease/disease as anything in diseases) if(QDELETED(disease)) //Got cured/deleted while the loop was still going. continue - if(SPT_PROB(disease.infectivity, seconds_per_tick)) - disease.spread() if(stat != DEAD || disease.process_dead) disease.stage_act(seconds_per_tick, times_fired) diff --git a/code/modules/mob/living/carbon/status_procs.dm b/code/modules/mob/living/carbon/status_procs.dm index ba19418e2e220..eb1e95ad9db5d 100644 --- a/code/modules/mob/living/carbon/status_procs.dm +++ b/code/modules/mob/living/carbon/status_procs.dm @@ -10,7 +10,8 @@ return if(check_stun_immunity(CANKNOCKDOWN)) return - SEND_SIGNAL(src, COMSIG_CARBON_ENTER_STAMCRIT) + if (SEND_SIGNAL(src, COMSIG_CARBON_ENTER_STAMCRIT) & STAMCRIT_CANCELLED) + return to_chat(src, span_notice("You're too exhausted to keep going...")) add_traits(list(TRAIT_INCAPACITATED, TRAIT_IMMOBILIZED, TRAIT_FLOORED), STAMINA) diff --git a/code/modules/mob/living/damage_procs.dm b/code/modules/mob/living/damage_procs.dm index 286a3b30ed843..1ae6d3357e594 100644 --- a/code/modules/mob/living/damage_procs.dm +++ b/code/modules/mob/living/damage_procs.dm @@ -359,14 +359,31 @@ /mob/living/proc/adjustToxLoss(amount, updating_health = TRUE, forced = FALSE, required_biotype = ALL) if(!can_adjust_tox_loss(amount, forced, required_biotype)) return 0 + + if(!forced && HAS_TRAIT(src, TRAIT_TOXINLOVER)) //damage becomes healing and healing becomes damage + amount = -amount + if(HAS_TRAIT(src, TRAIT_TOXIMMUNE)) //Prevents toxin damage, but not healing + amount = min(amount, 0) + if(blood_volume) + if(amount > 0) + blood_volume = max(blood_volume - (5 * amount), 0) + else + blood_volume = max(blood_volume - amount, 0) + + else if(!forced && HAS_TRAIT(src, TRAIT_TOXIMMUNE)) //Prevents toxin damage, but not healing + amount = min(amount, 0) + . = toxloss toxloss = clamp((toxloss + (amount * CONFIG_GET(number/damage_multiplier))), 0, maxHealth * 2) . -= toxloss + if(!.) // no change, no need to update return FALSE + if(updating_health) updatehealth() + /mob/living/proc/setToxLoss(amount, updating_health = TRUE, forced = FALSE, required_biotype = ALL) if(!forced && (status_flags & GODMODE)) return FALSE @@ -434,26 +451,42 @@ /mob/living/proc/adjustStaminaLoss(amount, updating_stamina = TRUE, forced = FALSE, required_biotype = ALL) if(!can_adjust_stamina_loss(amount, forced, required_biotype)) return 0 - . = staminaloss + var/old_amount = staminaloss staminaloss = clamp((staminaloss + (amount * CONFIG_GET(number/damage_multiplier))), 0, max_stamina) - . -= staminaloss - if(. == 0) // no change, no need to update + var/delta = old_amount - staminaloss + if(delta <= 0) + // need to check for stamcrit AFTER canadjust but BEFORE early return here + received_stamina_damage(staminaloss, -1 * delta) + if(delta == 0) // no change, no need to update return 0 if(updating_stamina) updatehealth() + return delta /mob/living/proc/setStaminaLoss(amount, updating_stamina = TRUE, forced = FALSE, required_biotype = ALL) if(!forced && (status_flags & GODMODE)) - return FALSE + return 0 if(!forced && !(mob_biotypes & required_biotype)) - return FALSE - . = staminaloss + return 0 + var/old_amount = staminaloss staminaloss = amount - . -= staminaloss - if(!.) // no change, no need to update - return FALSE + var/delta = old_amount - staminaloss + if(delta <= 0 && amount >= DAMAGE_PRECISION) + received_stamina_damage(staminaloss, -1 * delta, amount) + if(delta == 0) // no change, no need to update + return 0 if(updating_stamina) updatehealth() + return delta + +/// The mob has received stamina damage +/// +/// - current_level: The mob's current stamina damage amount (to save unnecessary getStaminaLoss() calls) +/// - amount_actual: The amount of stamina damage received, in actuality +/// For example, if you are taking 50 stamina damage but are at 90, you would actually only receive 30 stamina damage (due to the cap) +/// - amount: The amount of stamina damage received, raw +/mob/living/proc/received_stamina_damage(current_level, amount_actual, amount) + addtimer(CALLBACK(src, PROC_REF(setStaminaLoss), 0, TRUE, TRUE), stamina_regen_time, TIMER_UNIQUE|TIMER_OVERRIDE) /** * heal ONE external organ, organ gets randomly selected from damaged ones. diff --git a/code/modules/mob/living/death.dm b/code/modules/mob/living/death.dm index 53b08719f6a70..03a29762f6dc3 100644 --- a/code/modules/mob/living/death.dm +++ b/code/modules/mob/living/death.dm @@ -104,7 +104,7 @@ if(stat == DEAD) return FALSE - if(!gibbed && (death_sound || death_message)) + if(!gibbed && (death_sound || death_message || (living_flags & ALWAYS_DEATHGASP))) INVOKE_ASYNC(src, TYPE_PROC_REF(/mob, emote), "deathgasp") set_stat(DEAD) @@ -116,8 +116,9 @@ var/player_mob_check = mind && mind.name && mind.active // and, display a death message if the area allows it (or if they're in nullspace) var/valid_area_check = !death_area || !(death_area.area_flags & NO_DEATH_MESSAGE) - if(player_mob_check && valid_area_check) - deadchat_broadcast(" has died at [get_area_name(death_turf)].", "[mind.name]", follow_target = src, turf_target = death_turf, message_type=DEADCHAT_DEATHRATTLE) + if(player_mob_check) + if(valid_area_check) + deadchat_broadcast(" has died at [get_area_name(death_turf)].", "[mind.name]", follow_target = src, turf_target = death_turf, message_type=DEADCHAT_DEATHRATTLE) if(SSlag_switch.measures[DISABLE_DEAD_KEYLOOP] && !client?.holder) to_chat(src, span_deadsay(span_big("Observer freelook is disabled.\nPlease use Orbit, Teleport, and Jump to look around."))) ghostize(TRUE) diff --git a/code/modules/mob/living/emote.dm b/code/modules/mob/living/emote.dm index 9e0d70a6c9d05..67358fa912a3b 100644 --- a/code/modules/mob/living/emote.dm +++ b/code/modules/mob/living/emote.dm @@ -67,16 +67,6 @@ var/mob/living/L = user L.Unconscious(40) -/datum/emote/living/cough - key = "cough" - key_third_person = "coughs" - message = "coughs!" - message_mime = "acts out an exaggerated cough!" - emote_type = EMOTE_VISIBLE | EMOTE_AUDIBLE | EMOTE_RUNECHAT - -/datum/emote/living/cough/can_run_emote(mob/user, status_check = TRUE , intentional) - return !HAS_TRAIT(user, TRAIT_SOOTHED_THROAT) && ..() - /datum/emote/living/dance key = "dance" key_third_person = "dances" @@ -136,14 +126,14 @@ key_third_person = "flaps" message = "flaps their wings." hands_use_check = TRUE - var/wing_time = 20 + var/wing_time = 0.35 SECONDS /datum/emote/living/flap/run_emote(mob/user, params, type_override, intentional) . = ..() if(. && ishuman(user)) - var/mob/living/carbon/human/H = user + var/mob/living/carbon/human/human_user = user var/open = FALSE - var/obj/item/organ/external/wings/functional/wings = H.get_organ_slot(ORGAN_SLOT_EXTERNAL_WINGS) + var/obj/item/organ/external/wings/functional/wings = human_user.get_organ_slot(ORGAN_SLOT_EXTERNAL_WINGS) // open/close functional wings if(istype(wings)) @@ -154,9 +144,8 @@ wings.open_wings() addtimer(CALLBACK(wings, open ? TYPE_PROC_REF(/obj/item/organ/external/wings/functional, open_wings) : TYPE_PROC_REF(/obj/item/organ/external/wings/functional, close_wings)), wing_time) - // play moth flutter noise if moth wing - if(istype(wings, /obj/item/organ/external/wings/moth)) - playsound(H, 'sound/voice/moth/moth_flutter.ogg', 50, TRUE) + // play a flapping noise if the wing has this implemented + wings.make_flap_sound(human_user) /datum/emote/living/flap/aflap key = "aflap" @@ -186,7 +175,18 @@ emote_type = EMOTE_VISIBLE | EMOTE_AUDIBLE stat_allowed = HARD_CRIT -/datum/emote/living/gasp_shock +/datum/emote/living/gasp/get_sound(mob/living/user) + if(HAS_MIND_TRAIT(user, TRAIT_MIMING)) + return + if(!ishuman(user)) + return + + var/mob/living/carbon/human/human_user = user + if(human_user.physique == FEMALE) + return pick('sound/voice/human/gasp_female1.ogg', 'sound/voice/human/gasp_female2.ogg', 'sound/voice/human/gasp_female3.ogg') + return pick('sound/voice/human/gasp_male1.ogg', 'sound/voice/human/gasp_male2.ogg') + +/datum/emote/living/gasp/shock key = "gaspshock" key_third_person = "gaspsshock" name = "gasp (Shock)" @@ -195,16 +195,6 @@ emote_type = EMOTE_VISIBLE | EMOTE_AUDIBLE stat_allowed = SOFT_CRIT -/datum/emote/living/gasp_shock/get_sound(mob/living/user) - if(!ishuman(user)) - return - var/mob/living/carbon/human/human_user = user - if(ishumanbasic(human_user) || isfelinid(human_user) && !HAS_MIND_TRAIT(human_user, TRAIT_MIMING)) - if(human_user.physique == FEMALE) - return pick('sound/voice/human/gasp_female1.ogg', 'sound/voice/human/gasp_female2.ogg', 'sound/voice/human/gasp_female3.ogg') - else - return pick('sound/voice/human/gasp_male1.ogg', 'sound/voice/human/gasp_male2.ogg') - /datum/emote/living/giggle key = "giggle" key_third_person = "giggles" @@ -284,15 +274,10 @@ /datum/emote/living/laugh/can_run_emote(mob/living/user, status_check = TRUE , intentional) return ..() && user.can_speak(allow_mimes = TRUE) -/datum/emote/living/laugh/get_sound(mob/living/user) - if(!ishuman(user)) +/datum/emote/living/laugh/get_sound(mob/living/carbon/human/user) + if(!istype(user)) return - var/mob/living/carbon/human/human_user = user - if((ishumanbasic(human_user) || isfelinid(human_user)) && !HAS_MIND_TRAIT(human_user, TRAIT_MIMING)) - if(human_user.gender == FEMALE) - return 'sound/voice/human/womanlaugh.ogg' - else - return pick('sound/voice/human/manlaugh1.ogg', 'sound/voice/human/manlaugh2.ogg') + return user.dna.species.get_laugh_sound(user) /datum/emote/living/look key = "look" @@ -326,6 +311,38 @@ H.adjustOrganLoss(ORGAN_SLOT_BRAIN, 5) return ..() +/datum/emote/living/sneeze + key = "sneeze" + key_third_person = "sneezes" + message = "sneezes." + message_mime = "acts out an exaggerated silent sneeze." + emote_type = EMOTE_VISIBLE | EMOTE_AUDIBLE + audio_cooldown = 5 SECONDS + vary = TRUE + +/datum/emote/living/sneeze/get_sound(mob/living/carbon/human/user) + if(!istype(user)) + return + return user.dna.species.get_sneeze_sound(user) + +/datum/emote/living/cough + key = "cough" + key_third_person = "coughs" + message = "coughs!" + message_mime = "acts out an exaggerated cough!" + vary = TRUE + audio_cooldown = 5 SECONDS + emote_type = EMOTE_VISIBLE | EMOTE_AUDIBLE | EMOTE_RUNECHAT + +/datum/emote/living/cough/can_run_emote(mob/user, status_check = TRUE , intentional) + return !HAS_TRAIT(user, TRAIT_SOOTHED_THROAT) && ..() + +/datum/emote/living/cough/get_sound(mob/living/carbon/human/user) + if(!istype(user)) + return + return user.dna.species.get_cough_sound(user) + + /datum/emote/living/pout key = "pout" key_third_person = "pouts" @@ -338,7 +355,6 @@ message = "screams!" message_mime = "acts out a scream!" emote_type = EMOTE_VISIBLE | EMOTE_AUDIBLE - mob_type_blacklist_typecache = list(/mob/living/carbon/human) //Humans get specialized scream. /datum/emote/living/scream/run_emote(mob/user, params, type_override, intentional = FALSE) if(!intentional && HAS_TRAIT(user, TRAIT_ANALGESIA)) @@ -401,13 +417,6 @@ key_third_person = "smiles" message = "smiles." -/datum/emote/living/sneeze - key = "sneeze" - key_third_person = "sneezes" - message = "sneezes." - message_mime = "acts out an exaggerated silent sneeze." - emote_type = EMOTE_VISIBLE | EMOTE_AUDIBLE - /datum/emote/living/smug key = "smug" key_third_person = "smugs" @@ -653,13 +662,15 @@ return copytext(sanitize(input("Choose an emote to display.") as text|null), 1, MAX_MESSAGE_LEN) /datum/emote/living/custom/proc/get_custom_emote_type_from_user() - var/type = input("Is this a visible or hearable emote?") as null|anything in list("Visible", "Hearable") + var/type = input("Is this a visible or hearable emote?") as null|anything in list("Visible", "Hearable", "Both") switch(type) if("Visible") return EMOTE_VISIBLE if("Hearable") return EMOTE_AUDIBLE + if("Both") + return EMOTE_VISIBLE | EMOTE_AUDIBLE else tgui_alert(usr,"Unable to use this emote, must be either hearable or visible.") return FALSE @@ -668,7 +679,7 @@ if(!can_run_emote(user, TRUE, intentional)) return FALSE - if(is_banned_from(user.ckey, "Emote")) + if(!isnull(user.ckey) && is_banned_from(user.ckey, "Emote")) to_chat(user, span_boldwarning("You cannot send custom emotes (banned).")) return FALSE @@ -730,3 +741,15 @@ message = "says a swear word!" message_mime = "makes a rude gesture!" emote_type = EMOTE_AUDIBLE + +/datum/emote/living/carbon/whistle + key = "whistle" + key_third_person = "whistles" + message = "whistles." + message_mime = "whistles silently!" + audio_cooldown = 5 SECONDS + vary = TRUE + emote_type = EMOTE_AUDIBLE | EMOTE_VISIBLE + +/datum/emote/living/carbon/whistle/get_sound(mob/living/user) + return 'sound/voice/human/whistle1.ogg' diff --git a/code/modules/mob/living/init_signals.dm b/code/modules/mob/living/init_signals.dm index 2c390c540ce39..4bf0407c4670a 100644 --- a/code/modules/mob/living/init_signals.dm +++ b/code/modules/mob/living/init_signals.dm @@ -38,6 +38,9 @@ RegisterSignal(src, SIGNAL_ADDTRAIT(TRAIT_RESTRAINED), PROC_REF(on_restrained_trait_gain)) RegisterSignal(src, SIGNAL_REMOVETRAIT(TRAIT_RESTRAINED), PROC_REF(on_restrained_trait_loss)) + RegisterSignal(src, SIGNAL_ADDTRAIT(TRAIT_DEAF), PROC_REF(on_hearing_loss)) + RegisterSignal(src, SIGNAL_REMOVETRAIT(TRAIT_DEAF), PROC_REF(on_hearing_regain)) + RegisterSignals(src, list( SIGNAL_ADDTRAIT(TRAIT_CRITICAL_CONDITION), SIGNAL_REMOVETRAIT(TRAIT_CRITICAL_CONDITION), @@ -87,7 +90,7 @@ SIGNAL_HANDLER REMOVE_TRAIT(src, TRAIT_KNOCKEDOUT, TRAIT_DEATHCOMA) -/// Updates medhud when recieving relevant signals. +/// Updates medhud when receiving relevant signals. /mob/living/proc/update_medhud_on_signal(datum/source) SIGNAL_HANDLER med_hud_set_health() @@ -98,7 +101,7 @@ SIGNAL_HANDLER mobility_flags &= ~MOBILITY_MOVE if(living_flags & MOVES_ON_ITS_OWN) - DSmove_manager.stop_looping(src) //stop mid walk //This is also really dumb + GLOB.move_manager.stop_looping(src) //stop mid walk //This is also really dumb /// Called when [TRAIT_IMMOBILIZED] is removed from the mob. /mob/living/proc/on_immobilized_trait_loss(datum/source) @@ -272,3 +275,14 @@ /mob/living/proc/undense_changed(datum/source) SIGNAL_HANDLER update_density() + +///Called when [TRAIT_DEAF] is added to the mob. +/mob/living/proc/on_hearing_loss() + SIGNAL_HANDLER + refresh_looping_ambience() + stop_sound_channel(CHANNEL_AMBIENCE) + +///Called when [TRAIT_DEAF] is added to the mob. +/mob/living/proc/on_hearing_regain() + SIGNAL_HANDLER + refresh_looping_ambience() diff --git a/code/modules/mob/living/life.dm b/code/modules/mob/living/life.dm index dd7e8a17c9bf2..7c2af9a15724e 100644 --- a/code/modules/mob/living/life.dm +++ b/code/modules/mob/living/life.dm @@ -53,10 +53,6 @@ if (QDELETED(src)) // diseases can qdel the mob via transformations return - if(stat != DEAD) - //Random events (vomiting etc) - handle_random_events(seconds_per_tick, times_fired) - //Handle temperature/pressure differences between body and environment var/datum/gas_mixture/environment = loc.return_air() if(environment) @@ -82,9 +78,6 @@ /mob/living/proc/handle_wounds(seconds_per_tick, times_fired) return -/mob/living/proc/handle_random_events(seconds_per_tick, times_fired) - return - // Base mob environment handler for body temperature /mob/living/proc/handle_environment(datum/gas_mixture/environment, seconds_per_tick, times_fired) var/loc_temp = get_temperature(environment) diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index dc6cc7bd82052..c7a0c034ac5aa 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -68,11 +68,19 @@ if(levels <= 1 && can_help_themselves) var/obj/item/organ/external/wings/gliders = get_organ_by_type(/obj/item/organ/external/wings) if(HAS_TRAIT(src, TRAIT_FREERUNNING) || gliders?.can_soften_fall()) // the power of parkour or wings allows falling short distances unscathed + var/graceful_landing = HAS_TRAIT(src, TRAIT_CATLIKE_GRACE) + + if(graceful_landing) + add_movespeed_modifier(/datum/movespeed_modifier/landed_on_feet) + addtimer(CALLBACK(src, TYPE_PROC_REF(/mob, remove_movespeed_modifier), /datum/movespeed_modifier/landed_on_feet), levels * 3 SECONDS) + else + Knockdown(levels * 4 SECONDS) + emote("spin") + visible_message( - span_notice("[src] makes a hard landing on [impacted_turf] but remains unharmed from the fall."), - span_notice("You brace for the fall. You make a hard landing on [impacted_turf], but remain unharmed."), + span_notice("[src] makes a hard landing on [impacted_turf] but remains unharmed from the fall[graceful_landing ? " and stays on [p_their()] feet" : " by tucking in rolling into the landing"]."), + span_notice("You brace for the fall. You make a hard landing on [impacted_turf], but remain unharmed[graceful_landing ? " while landing on your feet" : " by tucking in and rolling into the landing"]."), ) - Knockdown(levels * 4 SECONDS) return . | ZIMPACT_NO_MESSAGE var/incoming_damage = (levels * 5) ** 1.5 @@ -148,6 +156,7 @@ return TRUE SEND_SIGNAL(src, COMSIG_LIVING_MOB_BUMP, M) + SEND_SIGNAL(M, COMSIG_LIVING_MOB_BUMPED, src) //Even if we don't push/swap places, we "touched" them, so spread fire spreadFire(M) @@ -259,20 +268,17 @@ return /mob/living/get_photo_description(obj/item/camera/camera) - var/list/mob_details = list() var/list/holding = list() var/len = length(held_items) if(len) - for(var/obj/item/I in held_items) + for(var/obj/item/held_item in held_items) if(!holding.len) - holding += "[p_They()] [p_are()] holding \a [I]" - else if(held_items.Find(I) == len) - holding += ", and \a [I]." + holding += "[p_They()] [p_are()] holding \a [held_item]" + else if(held_items.Find(held_item) == len) + holding += ", and \a [held_item]" else - holding += ", \a [I]" - holding += "." - mob_details += "You can also see [src] on the photo[health < (maxHealth * 0.75) ? ", looking a bit hurt":""][holding ? ". [holding.Join("")]":"."]." - return mob_details.Join("") + holding += ", \a [held_item]" + return "You can also see [src] on the photo[health < (maxHealth * 0.75) ? ", looking a bit hurt":""][holding.len ? ". [holding.Join("")].":"."]" //Called when we bump onto an obj /mob/living/proc/ObjBump(obj/O) @@ -286,6 +292,8 @@ return TRUE if(!client && (mob_size < MOB_SIZE_SMALL)) return + if(SEND_SIGNAL(AM, COMSIG_MOVABLE_BUMP_PUSHED, src, force) & COMPONENT_NO_PUSH) + return now_pushing = TRUE SEND_SIGNAL(src, COMSIG_LIVING_PUSHING_MOVABLE, AM) var/dir_to_target = get_dir(src, AM) @@ -598,10 +606,11 @@ * Returns the access list for this mob */ /mob/living/proc/get_access() + var/list/access_list = list() + SEND_SIGNAL(src, COMSIG_MOB_RETRIEVE_SIMPLE_ACCESS, access_list) var/obj/item/card/id/id = get_idcard() - if(isnull(id)) - return list() - return id.GetAccess() + access_list += id?.GetAccess() + return access_list /mob/living/proc/get_id_in_hand() var/obj/item/held_item = get_active_held_item() @@ -1281,9 +1290,9 @@ return FALSE if(invisibility || alpha <= 50)//cloaked return FALSE - if(!isturf(src.loc)) //The reason why we don't just use get_turf is because they could be in a closet, disposals, or a vehicle. + if(!isturf(loc)) //The reason why we don't just use get_turf is because they could be in a closet, disposals, or a vehicle. return FALSE - var/turf/T = src.loc + var/turf/T = loc if(is_centcom_level(T.z)) //dont detect mobs on centcom return FALSE if(is_away_level(T.z)) @@ -1301,24 +1310,42 @@ /mob/living/can_hold_items(obj/item/I) return ..() && HAS_TRAIT(src, TRAIT_CAN_HOLD_ITEMS) && usable_hands -/mob/living/can_perform_action(atom/movable/target, action_bitflags) +/mob/living/can_perform_action(atom/target, action_bitflags) if(!istype(target)) CRASH("Missing target arg for can_perform_action") + if(stat != CONSCIOUS) + to_chat(src, span_warning("You are not conscious enough for this action!")) + return FALSE + + if(!(interaction_flags_atom & INTERACT_ATOM_IGNORE_INCAPACITATED)) + var/ignore_flags = NONE + if(interaction_flags_atom & INTERACT_ATOM_IGNORE_RESTRAINED) + ignore_flags |= IGNORE_RESTRAINTS + if(!(interaction_flags_atom & INTERACT_ATOM_CHECK_GRAB)) + ignore_flags |= IGNORE_GRAB + + if(incapacitated(ignore_flags)) + to_chat(src, span_warning("You are incapacitated at the moment!")) + return FALSE + // If the MOBILITY_UI bitflag is not set it indicates the mob's hands are cutoff, blocked, or handcuffed // Note - AI's and borgs have the MOBILITY_UI bitflag set even though they don't have hands // Also if it is not set, the mob could be incapcitated, knocked out, unconscious, asleep, EMP'd, etc. if(!(mobility_flags & MOBILITY_UI) && !(action_bitflags & ALLOW_RESTING)) - to_chat(src, span_warning("You can't do that right now!")) + to_chat(src, span_warning("You don't have the mobility for this!")) return FALSE // NEED_HANDS is already checked by MOBILITY_UI for humans so this is for silicons if((action_bitflags & NEED_HANDS)) + if(HAS_TRAIT(src, TRAIT_HANDS_BLOCKED)) + to_chat(src, span_warning("You hands are blocked for this action!")) + return FALSE if(!can_hold_items(isitem(target) ? target : null)) // almost redundant if it weren't for mobs - to_chat(src, span_warning("You don't have the physical ability to do this!")) + to_chat(src, span_warning("You don't have the hands for this action!")) return FALSE - if(!Adjacent(target) && (target.loc != src) && !recursive_loc_check(src, target)) + if(!(action_bitflags & BYPASS_ADJACENCY) && ((action_bitflags & NOT_INSIDE_TARGET) || !recursive_loc_check(src, target)) && !CanReach(target)) if(HAS_SILICON_ACCESS(src) && !ispAI(src)) if(!(action_bitflags & ALLOW_SILICON_REACH)) // silicons can ignore range checks (except pAIs) if(!(action_bitflags & SILENT_ADJACENCY)) @@ -1326,7 +1353,8 @@ return FALSE else // just a normal carbon mob if((action_bitflags & FORBID_TELEKINESIS_REACH)) - to_chat(src, span_warning("You are too far away!")) + if(!(action_bitflags & SILENT_ADJACENCY)) + to_chat(src, span_warning("You are too far away!")) return FALSE var/datum/dna/mob_DNA = has_dna() @@ -1367,7 +1395,7 @@ return TRUE /mob/living/proc/update_stamina() - return + update_stamina_hud() /mob/living/carbon/alien/update_stamina() return @@ -1777,31 +1805,33 @@ GLOBAL_LIST_EMPTY(fire_appearances) return //Check the amount of clients exists on the Z level we're leaving from, - //this excludes us as we haven't added ourselves to the new z level yet. + //this excludes us because at this point we are not registered to any z level. var/old_level_new_clients = (registered_z ? SSmobs.clients_by_zlevel[registered_z].len : null) //No one is left after we're gone, shut off inactive ones if(registered_z && old_level_new_clients == 0) for(var/datum/ai_controller/controller as anything in SSai_controllers.ai_controllers_by_zlevel[registered_z]) controller.set_ai_status(AI_STATUS_OFF) - //Check the amount of clients exists on the Z level we're moving towards, excluding ourselves. - var/new_level_old_clients = SSmobs.clients_by_zlevel[new_z].len + if(new_z) + //Check the amount of clients exists on the Z level we're moving towards, excluding ourselves. + var/new_level_old_clients = SSmobs.clients_by_zlevel[new_z].len - registered_z = new_z - //We'll add ourselves to the list now so get_expected_ai_status() will know we're on the z level. - SSmobs.clients_by_zlevel[registered_z] += src + //We'll add ourselves to the list now so get_expected_ai_status() will know we're on the z level. + SSmobs.clients_by_zlevel[new_z] += src - if(new_level_old_clients == 0) //No one was here before, wake up all the AIs. - for (var/datum/ai_controller/controller as anything in SSai_controllers.ai_controllers_by_zlevel[new_z]) - //We don't set them directly on, for instances like AIs acting while dead and other cases that may exist in the future. - //This isn't a problem for AIs with a client since the client will prevent this from being called anyway. - controller.set_ai_status(controller.get_expected_ai_status()) + if(new_level_old_clients == 0) //No one was here before, wake up all the AIs. + for (var/datum/ai_controller/controller as anything in SSai_controllers.ai_controllers_by_zlevel[new_z]) + //We don't set them directly on, for instances like AIs acting while dead and other cases that may exist in the future. + //This isn't a problem for AIs with a client since the client will prevent this from being called anyway. + controller.set_ai_status(controller.get_expected_ai_status()) + + registered_z = new_z /mob/living/on_changed_z_level(turf/old_turf, turf/new_turf, same_z_layer, notify_contents) ..() update_z(new_turf?.z) -/mob/living/MouseDrop_T(atom/dropping, atom/user) +/mob/living/mouse_drop_receive(atom/dropping, atom/user, params) var/mob/living/U = user if(isliving(dropping)) var/mob/living/M = dropping @@ -2131,6 +2161,7 @@ GLOBAL_LIST_EMPTY(fire_appearances) to_chat(src, span_warning("You can't see through the floor above you.")) return + looking_vertically = TRUE reset_perspective(ceiling) /mob/living/proc/stop_look_up() @@ -2139,6 +2170,7 @@ GLOBAL_LIST_EMPTY(fire_appearances) /mob/living/proc/end_look_up() stop_look_up() + looking_vertically = FALSE UnregisterSignal(src, COMSIG_MOVABLE_PRE_MOVE) UnregisterSignal(src, COMSIG_MOVABLE_MOVED) @@ -2181,6 +2213,7 @@ GLOBAL_LIST_EMPTY(fire_appearances) to_chat(src, span_warning("You can't see through the floor below you.")) return + looking_vertically = TRUE reset_perspective(lower_level) /mob/living/proc/stop_look_down() @@ -2189,6 +2222,7 @@ GLOBAL_LIST_EMPTY(fire_appearances) /mob/living/proc/end_look_down() stop_look_down() + looking_vertically = FALSE UnregisterSignal(src, COMSIG_MOVABLE_PRE_MOVE) UnregisterSignal(src, COMSIG_MOVABLE_MOVED) @@ -2243,6 +2277,10 @@ GLOBAL_LIST_EMPTY(fire_appearances) REMOVE_TRAIT(src, TRAIT_CRITICAL_CONDITION, STAT_TRAIT) remove_from_alive_mob_list() add_to_dead_mob_list() + if(!can_hear()) + stop_sound_channel(CHANNEL_AMBIENCE) + refresh_looping_ambience() + ///Reports the event of the change in value of the buckled variable. @@ -2324,8 +2362,14 @@ GLOBAL_LIST_EMPTY(fire_appearances) . = usable_legs usable_legs = new_value + update_usable_leg_status() - if(new_value > .) // Gained leg usage. +/** + * Proc that updates the status of the mob's legs without setting its leg value to something else. + */ +/mob/living/proc/update_usable_leg_status() + + if(usable_legs > 0) // Gained leg usage. REMOVE_TRAIT(src, TRAIT_FLOORED, LACKING_LOCOMOTION_APPENDAGES_TRAIT) REMOVE_TRAIT(src, TRAIT_IMMOBILIZED, LACKING_LOCOMOTION_APPENDAGES_TRAIT) else if(!(movement_type & (FLYING | FLOATING))) //Lost leg usage, not flying. @@ -2338,6 +2382,13 @@ GLOBAL_LIST_EMPTY(fire_appearances) var/limbless_slowdown = (default_num_legs - usable_legs) * 3 if(!usable_legs && usable_hands < default_num_hands) limbless_slowdown += (default_num_hands - usable_hands) * 3 + var/list/slowdown_mods = list() + SEND_SIGNAL(src, COMSIG_LIVING_LIMBLESS_SLOWDOWN, limbless_slowdown, slowdown_mods) + for(var/num in slowdown_mods) + limbless_slowdown *= num + if(limbless_slowdown == 0) + remove_movespeed_modifier(/datum/movespeed_modifier/limbless) + return add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/limbless, multiplicative_slowdown = limbless_slowdown) else remove_movespeed_modifier(/datum/movespeed_modifier/limbless) @@ -2389,10 +2440,10 @@ GLOBAL_LIST_EMPTY(fire_appearances) /// Proc to append behavior to the condition of being floored. Called when the condition starts. /mob/living/proc/on_floored_start() + on_fall() if(body_position == STANDING_UP) //force them on the ground set_body_position(LYING_DOWN) set_lying_angle(pick(90, 270)) - on_fall() /// Proc to append behavior to the condition of being floored. Called when the condition ends. @@ -2682,7 +2733,7 @@ GLOBAL_LIST_EMPTY(fire_appearances) set name = "Look Up" set category = "IC" - if(client.perspective != MOB_PERSPECTIVE) + if(looking_vertically) end_look_up() else look_up() @@ -2691,7 +2742,7 @@ GLOBAL_LIST_EMPTY(fire_appearances) set name = "Look Down" set category = "IC" - if(client.perspective != MOB_PERSPECTIVE) + if(looking_vertically) end_look_down() else look_down() @@ -2712,3 +2763,26 @@ GLOBAL_LIST_EMPTY(fire_appearances) physical_cash_total += counted_credit.get_item_credit_value() counted_money += counted_credit return round(physical_cash_total) + +/// Returns an arbitrary number which very roughly correlates with how buff you look +/mob/living/proc/calculate_fitness() + var/athletics_level = mind?.get_skill_level(/datum/skill/athletics) || 1 + var/damage = (melee_damage_lower + melee_damage_upper) / 2 + + return ceil(damage * (ceil(athletics_level / 2)) * maxHealth) + +/// Create a report string about how strong this person looks, generated in a somewhat arbitrary fashion +/mob/living/proc/compare_fitness(mob/living/scouter) + if (HAS_TRAIT(src, TRAIT_UNKNOWN)) + return span_warning("It's impossible to tell whether this person lifts.") + + var/our_fitness_level = calculate_fitness() + var/their_fitness_level = scouter.calculate_fitness() + + var/comparative_fitness = our_fitness_level / their_fitness_level + + if (comparative_fitness > 2) + scouter.set_jitter_if_lower(comparative_fitness SECONDS) + return "[span_notice("You'd estimate [p_their()] fitness level at about...")] [span_boldwarning("What?!? [our_fitness_level]???")]" + + return span_notice("You'd estimate [p_their()] fitness level at about [our_fitness_level]. [comparative_fitness <= 0.33 ? "Pathetic." : ""]") diff --git a/code/modules/mob/living/living_defense.dm b/code/modules/mob/living/living_defense.dm index 31f7d1cb8df0f..ee601251465aa 100644 --- a/code/modules/mob/living/living_defense.dm +++ b/code/modules/mob/living/living_defense.dm @@ -202,7 +202,7 @@ span_userdanger("You're hit by [thrown_item]!")) if(!thrown_item.throwforce) return - var/armor = run_armor_check(zone, MELEE, "Your armor has protected your [parse_zone(zone)].", "Your armor has softened hit to your [parse_zone(zone)].", thrown_item.armour_penetration, "", FALSE, thrown_item.weak_against_armour) + var/armor = run_armor_check(zone, MELEE, "Your armor has protected your [parse_zone_with_bodypart(zone)].", "Your armor has softened hit to your [parse_zone_with_bodypart(zone)].", thrown_item.armour_penetration, "", FALSE, thrown_item.weak_against_armour) apply_damage(thrown_item.throwforce, thrown_item.damtype, zone, armor, sharpness = thrown_item.get_sharpness(), wound_bonus = (nosell_hit * CANT_WOUND)) if(QDELETED(src)) //Damage can delete the mob. return @@ -254,22 +254,23 @@ /mob/living/proc/grabbedby(mob/living/user, supress_message = FALSE) if(user == src || anchored || !isturf(user.loc)) return FALSE + if(!user.pulling || user.pulling != src) user.start_pulling(src, supress_message = supress_message) return - // This line arbitrarily prevents any non-carbon from upgrading grabs - if(!iscarbon(user)) - return + if(!(status_flags & CANPUSH) || HAS_TRAIT(src, TRAIT_PUSHIMMUNE)) to_chat(user, span_warning("[src] can't be grabbed more aggressively!")) return FALSE + if(user.grab_state >= GRAB_AGGRESSIVE && HAS_TRAIT(user, TRAIT_PACIFISM)) to_chat(user, span_warning("You don't want to risk hurting [src]!")) return FALSE + grippedby(user) //proc to upgrade a simple pull into a more aggressive grab. -/mob/living/proc/grippedby(mob/living/carbon/user, instant = FALSE) +/mob/living/proc/grippedby(mob/living/user, instant = FALSE) if(user.grab_state >= user.max_grab) return user.changeNext_move(CLICK_CD_GRABBING) @@ -410,7 +411,7 @@ if(!user.get_bodypart(BODY_ZONE_HEAD)) return FALSE - if(user.is_muzzled() || user.is_mouth_covered(ITEM_SLOT_MASK)) + if(user.is_mouth_covered(ITEM_SLOT_MASK)) to_chat(user, span_warning("You can't bite with your mouth covered!")) return FALSE @@ -658,7 +659,7 @@ playsound(target, 'sound/effects/glassbash.ogg', 50, TRUE, -1) else do_attack_animation(target, ATTACK_EFFECT_DISARM) - playsound(target, 'sound/weapons/thudswoosh.ogg', 50, TRUE, -1) + playsound(target, 'sound/weapons/shove.ogg', 50, TRUE, -1) if (ishuman(target) && isnull(weapon)) var/mob/living/carbon/human/human_target = target human_target.w_uniform?.add_fingerprint(src) diff --git a/code/modules/mob/living/living_defines.dm b/code/modules/mob/living/living_defines.dm index 0914cd1112b9d..6ec18d0d5392c 100644 --- a/code/modules/mob/living/living_defines.dm +++ b/code/modules/mob/living/living_defines.dm @@ -2,8 +2,9 @@ see_invisible = SEE_INVISIBLE_LIVING hud_possible = list(HEALTH_HUD,STATUS_HUD,ANTAG_HUD) pressure_resistance = 10 - hud_type = /datum/hud/living + interaction_flags_click = ALLOW_RESTING + interaction_flags_mouse_drop = ALLOW_RESTING ///Tracks the current size of the mob in relation to its original size. Use update_transform(resize) to change it. var/current_size = RESIZE_DEFAULT_SIZE @@ -214,6 +215,9 @@ ///what multiplicative slowdown we get from turfs currently. var/current_turf_slowdown = 0 + /// Is the mob looking vertically + var/looking_vertically = FALSE + /// Living mob's mood datum var/datum/mood/mob_mood @@ -223,3 +227,6 @@ /// What our current gravity state is. Used to avoid duplicate animates and such var/gravity_state = null + + /// How long it takes to return to 0 stam + var/stamina_regen_time = 10 SECONDS diff --git a/code/modules/mob/living/living_say.dm b/code/modules/mob/living/living_say.dm index 36a020ce3e759..58e13951ebc4f 100644 --- a/code/modules/mob/living/living_say.dm +++ b/code/modules/mob/living/living_say.dm @@ -208,9 +208,9 @@ GLOBAL_LIST_INIT(message_modes_stat_limits, list( spans |= speech_span - if(language) - var/datum/language/L = GLOB.language_datum_instances[language] - spans |= L.spans + var/datum/language/spoken_lang = GLOB.language_datum_instances[language] + if(LAZYLEN(spoken_lang?.spans)) + spans |= spoken_lang.spans if(message_mods[MODE_SING]) var/randomnote = pick("\u2669", "\u266A", "\u266B") @@ -454,11 +454,12 @@ GLOBAL_LIST_INIT(message_modes_stat_limits, list( message = unintelligize(message) tts_filter = list() - var/list/data = list(message, tts_message, tts_filter) + var/list/data = list(message, tts_message, tts_filter, capitalize_message) SEND_SIGNAL(src, COMSIG_LIVING_TREAT_MESSAGE, data) message = data[TREAT_MESSAGE_ARG] tts_message = data[TREAT_TTS_MESSAGE_ARG] tts_filter = data[TREAT_TTS_FILTER_ARG] + capitalize_message = data[TREAT_CAPITALIZE_MESSAGE] if(!tts_message) tts_message = message diff --git a/code/modules/mob/living/login.dm b/code/modules/mob/living/login.dm index c6d6b6a5e9d70..b9f2fec61ff2c 100644 --- a/code/modules/mob/living/login.dm +++ b/code/modules/mob/living/login.dm @@ -14,9 +14,7 @@ update_z(T.z) //Vents - var/ventcrawler = HAS_TRAIT(src, TRAIT_VENTCRAWLER_ALWAYS) || HAS_TRAIT(src, TRAIT_VENTCRAWLER_NUDE) - if(ventcrawler) - to_chat(src, span_notice("You can ventcrawl! Use alt+click on vents to quickly travel about the station.")) + notify_ventcrawler_on_login() med_hud_set_status() diff --git a/code/modules/mob/living/navigation.dm b/code/modules/mob/living/navigation.dm index 98f1080c79192..3096efb3a7c47 100644 --- a/code/modules/mob/living/navigation.dm +++ b/code/modules/mob/living/navigation.dm @@ -132,7 +132,7 @@ if(!target) target = lad continue - if(get_dist_euclidian(lad, src) > get_dist_euclidian(target, src)) + if(get_dist_euclidean(lad, src) > get_dist_euclidean(target, src)) continue target = lad @@ -144,7 +144,7 @@ if(!target) target = stairs_bro.z == z ? stairs_bro : get_step_multiz(stairs_bro, UP) //if the stairs aren't on our z level, get the turf above them (on our zlevel) to path to instead continue - if(get_dist_euclidian(stairs_bro, src) > get_dist_euclidian(target, src)) + if(get_dist_euclidean(stairs_bro, src) > get_dist_euclidean(target, src)) continue target = stairs_bro.z == z ? stairs_bro : get_step_multiz(stairs_bro, UP) diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index f759f6a0dc845..6c4be898162dd 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -41,12 +41,13 @@ var/shunted = FALSE //1 if the AI is currently shunted. Used to differentiate between shunted and ghosted/braindead var/obj/machinery/ai_voicechanger/ai_voicechanger = null // reference to machine that holds the voicechanger var/malfhacking = FALSE // More or less a copy of the above var, so that malf AIs can hack and still get new cyborgs -- NeoFite + /// List of hacked APCs + var/list/hacked_apcs = list() var/malf_cooldown = 0 //Cooldown var for malf modules, stores a worldtime + cooldown var/obj/machinery/power/apc/malfhack var/explosive = FALSE //does the AI explode when it dies? - var/mob/living/silicon/ai/parent var/camera_light_on = FALSE var/list/obj/machinery/camera/lit_cameras = list() @@ -332,7 +333,7 @@ else if(!connected_robot.cell || connected_robot.cell.charge <= 0) robot_status = "DEPOWERED" //Name, Health, Battery, Model, Area, and Status! Everything an AI wants to know about its borgies! - . += "[connected_robot.name] | S.Integrity: [connected_robot.health]% | Cell: [connected_robot.cell ? "[connected_robot.cell.charge]/[connected_robot.cell.maxcharge]" : "Empty"] | \ + . += "[connected_robot.name] | S.Integrity: [connected_robot.health]% | Cell: [connected_robot.cell ? "[display_energy(connected_robot.cell.charge)]/[display_energy(connected_robot.cell.maxcharge)]" : "Empty"] | \ Model: [connected_robot.designation] | Loc: [get_area_name(connected_robot, TRUE)] | Status: [robot_status]" . += "AI shell beacons detected: [LAZYLEN(GLOB.available_ai_shells)]" //Count of total AI shells @@ -439,6 +440,10 @@ qdel(src) return ai_core +/mob/living/silicon/ai/proc/break_core_link() + to_chat(src, span_danger("Your core has been destroyed!")) + linked_core = null + /mob/living/silicon/ai/proc/make_mmi_drop_and_transfer(obj/item/mmi/the_mmi, the_core) var/mmi_type if(posibrain_inside) @@ -870,7 +875,7 @@ to_chat(src, "You have been downloaded to a mobile storage device. Remote device connection severed.") to_chat(user, "[span_boldnotice("Transfer successful")]: [name] ([rand(1000,9999)].exe) removed from host terminal and stored within local memory.") -/mob/living/silicon/ai/can_perform_action(atom/movable/target, action_bitflags) +/mob/living/silicon/ai/can_perform_action(atom/target, action_bitflags) if(control_disabled) to_chat(src, span_warning("You can't do that right now!")) return FALSE @@ -946,6 +951,9 @@ module_picker.ui_interact(owner) /mob/living/silicon/ai/proc/add_malf_picker() + if (malf_picker) + stack_trace("Attempted to give malf AI malf picker to \[[src]\], who already has a malf picker.") + return to_chat(src, "In the top left corner of the screen you will find the Malfunction Modules button, where you can purchase various abilities, from upgraded surveillance to station ending doomsday devices.") to_chat(src, "You are also capable of hacking APCs, which grants you more points to spend on your Malfunction powers. The drawback is that a hacked APC will give you away if spotted by the crew. Hacking an APC takes 60 seconds.") view_core() //A BYOND bug requires you to be viewing your core before your verbs update @@ -1023,13 +1031,16 @@ malf_ai_datum.update_static_data_for_all_viewers() else //combat software AIs use a different UI malf_picker.update_static_data_for_all_viewers() - - apc.malfai = parent || src + if(apc.malfai) // another malf hacked this one; counter-hack! + to_chat(apc.malfai, span_warning("An adversarial subroutine has counter-hacked [apc]!")) + apc.malfai.hacked_apcs -= apc + apc.malfai = src apc.malfhack = TRUE apc.locked = TRUE apc.coverlocked = TRUE apc.flicker_hacked_icon() apc.set_hacked_hud() + hacked_apcs += apc playsound(get_turf(src), 'sound/machines/ding.ogg', 50, TRUE, ignore_walls = FALSE) to_chat(src, "Hack complete. [apc] is now under your exclusive control.") diff --git a/code/modules/mob/living/silicon/ai/ai_defense.dm b/code/modules/mob/living/silicon/ai/ai_defense.dm index 1148b639d0113..7dea684e56941 100644 --- a/code/modules/mob/living/silicon/ai/ai_defense.dm +++ b/code/modules/mob/living/silicon/ai/ai_defense.dm @@ -2,6 +2,7 @@ /mob/living/silicon/ai/attackby(obj/item/W, mob/user, params) if(istype(W, /obj/item/ai_module)) var/obj/item/ai_module/MOD = W + disconnect_shell() if(!mind) //A player mind is required for law procs to run antag checks. to_chat(user, span_warning("[src] is entirely unresponsive!")) return @@ -63,6 +64,10 @@ . = ..() if(user.combat_mode) return + if(stat != DEAD && !incapacitated() && (client || deployed_shell?.client)) + // alive and well AIs control their floor bolts + balloon_alert(user, "the AI's bolt motors resist.") + return ITEM_INTERACT_SUCCESS balloon_alert(user, "[!is_anchored ? "tightening" : "loosening"] bolts...") balloon_alert(src, "bolts being [!is_anchored ? "tightened" : "loosened"]...") if(!tool.use_tool(src, user, 4 SECONDS)) @@ -137,7 +142,7 @@ return ITEM_INTERACT_SUCCESS balloon_alert(src, "neural network being disconnected...") balloon_alert(user, "disconnecting neural network...") - if(!tool.use_tool(src, user, (stat == DEAD ? 40 SECONDS : 5 SECONDS))) + if(!tool.use_tool(src, user, (stat == DEAD ? 5 SECONDS : 40 SECONDS))) return ITEM_INTERACT_SUCCESS if(IS_MALF_AI(src)) to_chat(user, span_userdanger("The voltage inside the wires rises dramatically!")) diff --git a/code/modules/mob/living/silicon/ai/ai_say.dm b/code/modules/mob/living/silicon/ai/ai_say.dm index 967cbb2b984f8..48b3cdc437350 100644 --- a/code/modules/mob/living/silicon/ai/ai_say.dm +++ b/code/modules/mob/living/silicon/ai/ai_say.dm @@ -1,20 +1,3 @@ -/mob/living/silicon/ai/say( - message, - bubble_type, - list/spans = list(), - sanitize = TRUE, - datum/language/language, - ignore_spam = FALSE, - forced, - filterproof = FALSE, - message_range = 7, - datum/saymode/saymode, - list/message_mods = list(), -) - if(istype(parent) && parent.stat != DEAD) //If there is a defined "parent" AI, it is actually an AI, and it is alive, anything the AI tries to say is said by the parent instead. - return parent.say(arglist(args)) - return ..() - /mob/living/silicon/ai/compose_track_href(atom/movable/speaker, namepart) var/mob/M = speaker.GetSource() if(M) diff --git a/code/modules/mob/living/silicon/ai/death.dm b/code/modules/mob/living/silicon/ai/death.dm index 03824857c4efc..79e14d649fc38 100644 --- a/code/modules/mob/living/silicon/ai/death.dm +++ b/code/modules/mob/living/silicon/ai/death.dm @@ -1,4 +1,4 @@ -/mob/living/silicon/ai/death(gibbed) +/mob/living/silicon/ai/death(gibbed, drop_mmi = TRUE) if(stat == DEAD) return @@ -33,7 +33,7 @@ ShutOffDoomsdayDevice() - if(gibbed) + if(gibbed && drop_mmi) make_mmi_drop_and_transfer() if(explosive) diff --git a/code/modules/mob/living/silicon/ai/multicam.dm b/code/modules/mob/living/silicon/ai/multicam.dm index 8980a1017f206..97ea9ebedc9e4 100644 --- a/code/modules/mob/living/silicon/ai/multicam.dm +++ b/code/modules/mob/living/silicon/ai/multicam.dm @@ -24,7 +24,7 @@ /atom/movable/screen/movable/pic_in_pic/ai/make_backgrounds() ..() highlighted_background = new /mutable_appearance() - highlighted_background.icon = 'icons/misc/pic_in_pic.dmi' + highlighted_background.icon = 'icons/hud/pic_in_pic.dmi' highlighted_background.icon_state = "background_highlight" highlighted_background.layer = SPACE_LAYER @@ -84,7 +84,7 @@ /turf/open/ai_visible name = "" - icon = 'icons/misc/pic_in_pic.dmi' + icon = 'icons/hud/pic_in_pic.dmi' icon_state = "room_background" turf_flags = NOJAUNT diff --git a/code/modules/mob/living/silicon/ai/vox_sounds.dm b/code/modules/mob/living/silicon/ai/vox_sounds.dm index dacb1eeb8131c..d69bb2e1cc3b8 100644 --- a/code/modules/mob/living/silicon/ai/vox_sounds.dm +++ b/code/modules/mob/living/silicon/ai/vox_sounds.dm @@ -8,12 +8,15 @@ // For vim // :%s/\(\(.*\)\.ogg\)/"\2" = 'sound\/vox_fem\/\1',/g GLOBAL_LIST_INIT(vox_sounds, list( - "abduction" = 'sound/vox_fem/abduction.ogg', "," = 'sound/vox_fem/,.ogg', "." = 'sound/vox_fem/..ogg', "a" = 'sound/vox_fem/a.ogg', + "abduction" = 'sound/vox_fem/abduction.ogg', "abortions" = 'sound/vox_fem/abortions.ogg', "above" = 'sound/vox_fem/above.ogg', + "absorb" = 'sound/vox_fem/absorb.ogg', + "absorbed" = 'sound/vox_fem/absorbed.ogg', + "absorbing" = 'sound/vox_fem/absorbing.ogg', "abstain" = 'sound/vox_fem/abstain.ogg', "accelerating" = 'sound/vox_fem/accelerating.ogg', "accelerator" = 'sound/vox_fem/accelerator.ogg', @@ -26,11 +29,17 @@ GLOBAL_LIST_INIT(vox_sounds, list( "across" = 'sound/vox_fem/across.ogg', "activate" = 'sound/vox_fem/activate.ogg', "activated" = 'sound/vox_fem/activated.ogg', + "activating" = 'sound/vox_fem/activating.ogg', + "activation" = 'sound/vox_fem/activation.ogg', + "active" = 'sound/vox_fem/active.ogg', "activity" = 'sound/vox_fem/activity.ogg', "adios" = 'sound/vox_fem/adios.ogg', "administration" = 'sound/vox_fem/administration.ogg', "advanced" = 'sound/vox_fem/advanced.ogg', "advised" = 'sound/vox_fem/advised.ogg', + "affect" = 'sound/vox_fem/affect.ogg', + "affected" = 'sound/vox_fem/affected.ogg', + "affecting" = 'sound/vox_fem/affecting.ogg', "aft" = 'sound/vox_fem/aft.ogg', "after" = 'sound/vox_fem/after.ogg', "agent" = 'sound/vox_fem/agent.ogg', @@ -40,44 +49,59 @@ GLOBAL_LIST_INIT(vox_sounds, list( "alarm" = 'sound/vox_fem/alarm.ogg', "alarmed" = 'sound/vox_fem/alarmed.ogg', "alarming" = 'sound/vox_fem/alarming.ogg', + "alcohol" = 'sound/vox_fem/alcohol.ogg', "alert" = 'sound/vox_fem/alert.ogg', "alerted" = 'sound/vox_fem/alerted.ogg', "alerting" = 'sound/vox_fem/alerting.ogg', "alien" = 'sound/vox_fem/alien.ogg', + "align" = 'sound/vox_fem/align.ogg', "aligned" = 'sound/vox_fem/aligned.ogg', "all" = 'sound/vox_fem/all.ogg', + "allow" = 'sound/vox_fem/allow.ogg', + "alongside" = 'sound/vox_fem/alongside.ogg', "alpha" = 'sound/vox_fem/alpha.ogg', "also" = 'sound/vox_fem/also.ogg', "am" = 'sound/vox_fem/am.ogg', "amigo" = 'sound/vox_fem/amigo.ogg', "ammunition" = 'sound/vox_fem/ammunition.ogg', + "amount" = 'sound/vox_fem/amount.ogg', "an" = 'sound/vox_fem/an.ogg', "and" = 'sound/vox_fem/and.ogg', "animal" = 'sound/vox_fem/animal.ogg', + "annihilate" = 'sound/vox_fem/annihilate.ogg', + "annihilated" = 'sound/vox_fem/annihilated.ogg', + "annihilating" = 'sound/vox_fem/annihilating.ogg', + "annihilation" = 'sound/vox_fem/annihilation.ogg', "announcement" = 'sound/vox_fem/announcement.ogg', "anomalous" = 'sound/vox_fem/anomalous.ogg', "answer" = 'sound/vox_fem/answer.ogg', "antenna" = 'sound/vox_fem/antenna.ogg', + "anti-noblium" = 'sound/vox_fem/anti-noblium.ogg', "any" = 'sound/vox_fem/any.ogg', "apc" = 'sound/vox_fem/apc.ogg', "apprehend" = 'sound/vox_fem/apprehend.ogg', "approach" = 'sound/vox_fem/approach.ogg', + "arc" = 'sound/vox_fem/arc.ogg', + "arcs" = 'sound/vox_fem/arcs.ogg', "are" = 'sound/vox_fem/are.ogg', "area" = 'sound/vox_fem/area.ogg', "arm" = 'sound/vox_fem/arm.ogg', "armed" = 'sound/vox_fem/armed.ogg', "armor" = 'sound/vox_fem/armor.ogg', "armory" = 'sound/vox_fem/armory.ogg', + "around" = 'sound/vox_fem/around.ogg', "array" = 'sound/vox_fem/array.ogg', "arrest" = 'sound/vox_fem/arrest.ogg', "artillery" = 'sound/vox_fem/artillery.ogg', "asimov" = 'sound/vox_fem/asimov.ogg', + "ask" = 'sound/vox_fem/ask.ogg', "ass" = 'sound/vox_fem/ass.ogg', "asshole" = 'sound/vox_fem/asshole.ogg', "assholes" = 'sound/vox_fem/assholes.ogg', "assistance" = 'sound/vox_fem/assistance.ogg', "assistant" = 'sound/vox_fem/assistant.ogg', "at" = 'sound/vox_fem/at.ogg', + "ate" = 'sound/vox_fem/ate.ogg', "atmosphere" = 'sound/vox_fem/atmosphere.ogg', "atmospheric" = 'sound/vox_fem/atmospheric.ogg', "atmospherics" = 'sound/vox_fem/atmospherics.ogg', @@ -101,10 +125,14 @@ GLOBAL_LIST_INIT(vox_sounds, list( "base" = 'sound/vox_fem/base.ogg', "bay" = 'sound/vox_fem/bay.ogg', "be" = 'sound/vox_fem/be.ogg', + "beaker" = 'sound/vox_fem/beaker.ogg', "beam" = 'sound/vox_fem/beam.ogg', "been" = 'sound/vox_fem/been.ogg', "beep" = 'sound/vox_fem/beep.ogg', "before" = 'sound/vox_fem/before.ogg', + "began" = 'sound/vox_fem/began.ogg', + "begin" = 'sound/vox_fem/begin.ogg', + "begins" = 'sound/vox_fem/begins.ogg', "below" = 'sound/vox_fem/below.ogg', "beside" = 'sound/vox_fem/beside.ogg', "beware" = 'sound/vox_fem/beware.ogg', @@ -133,6 +161,7 @@ GLOBAL_LIST_INIT(vox_sounds, list( "bone" = 'sound/vox_fem/bone.ogg', "botanist" = 'sound/vox_fem/botanist.ogg', "botany" = 'sound/vox_fem/botany.ogg', + "bottle" = 'sound/vox_fem/bottle.ogg', "bottom" = 'sound/vox_fem/bottom.ogg', "bravo" = 'sound/vox_fem/bravo.ogg', "breach" = 'sound/vox_fem/breach.ogg', @@ -140,6 +169,11 @@ GLOBAL_LIST_INIT(vox_sounds, list( "break" = 'sound/vox_fem/break.ogg', "bridge" = 'sound/vox_fem/bridge.ogg', "brig" = 'sound/vox_fem/brig.ogg', + "broke" = 'sound/vox_fem/broke.ogg', + "broken" = 'sound/vox_fem/broken.ogg', + "bump" = 'sound/vox_fem/bump.ogg', + "bumped" = 'sound/vox_fem/bumped.ogg', + "bumps" = 'sound/vox_fem/bumps.ogg', "bust" = 'sound/vox_fem/bust.ogg', "but" = 'sound/vox_fem/but.ogg', "button" = 'sound/vox_fem/button.ogg', @@ -148,6 +182,7 @@ GLOBAL_LIST_INIT(vox_sounds, list( "cable" = 'sound/vox_fem/cable.ogg', "call" = 'sound/vox_fem/call.ogg', "called" = 'sound/vox_fem/called.ogg', + "can" = 'sound/vox_fem/can.ogg', "canal" = 'sound/vox_fem/canal.ogg', "canister" = 'sound/vox_fem/canister.ogg', "cap" = 'sound/vox_fem/cap.ogg', @@ -155,7 +190,12 @@ GLOBAL_LIST_INIT(vox_sounds, list( "capture" = 'sound/vox_fem/capture.ogg', "carbon" = 'sound/vox_fem/carbon.ogg', "cargo" = 'sound/vox_fem/cargo.ogg', + "cascade" = 'sound/vox_fem/cascade.ogg', "cat" = 'sound/vox_fem/cat.ogg', + "cause" = 'sound/vox_fem/cause.ogg', + "caused" = 'sound/vox_fem/caused.ogg', + "causes" = 'sound/vox_fem/causes.ogg', + "causing" = 'sound/vox_fem/causing.ogg', "ce" = 'sound/vox_fem/ce.ogg', "cease" = 'sound/vox_fem/cease.ogg', "ceiling" = 'sound/vox_fem/ceiling.ogg', @@ -171,6 +211,7 @@ GLOBAL_LIST_INIT(vox_sounds, list( "changeling" = 'sound/vox_fem/changeling.ogg', "chapel" = 'sound/vox_fem/chapel.ogg', "chaplain" = 'sound/vox_fem/chaplain.ogg', + "charge" = 'sound/vox_fem/charge.ogg', "charlie" = 'sound/vox_fem/charlie.ogg', "check" = 'sound/vox_fem/check.ogg', "checkpoint" = 'sound/vox_fem/checkpoint.ogg', @@ -185,35 +226,51 @@ GLOBAL_LIST_INIT(vox_sounds, list( "clear" = 'sound/vox_fem/clear.ogg', "clearance" = 'sound/vox_fem/clearance.ogg', "clockwork" = 'sound/vox_fem/clockwork.ogg', + "clog" = 'sound/vox_fem/clog.ogg', "close" = 'sound/vox_fem/close.ogg', "closed" = 'sound/vox_fem/closed.ogg', "closing" = 'sound/vox_fem/closing.ogg', + "clothing" = 'sound/vox_fem/clothing.ogg', "clown" = 'sound/vox_fem/clown.ogg', "clowning" = 'sound/vox_fem/clowning.ogg', "cmo" = 'sound/vox_fem/cmo.ogg', "code" = 'sound/vox_fem/code.ogg', "coded" = 'sound/vox_fem/coded.ogg', + "coil" = 'sound/vox_fem/coil.ogg', + "coils" = 'sound/vox_fem/coils.ogg', "cold" = 'sound/vox_fem/cold.ogg', "collider" = 'sound/vox_fem/collider.ogg', + "combat" = 'sound/vox_fem/combat.ogg', + "combatant" = 'sound/vox_fem/combatant.ogg', "come" = 'sound/vox_fem/come.ogg', "command" = 'sound/vox_fem/command.ogg', "communication" = 'sound/vox_fem/communication.ogg', + "complete" = 'sound/vox_fem/complete.ogg', + "completed" = 'sound/vox_fem/completed.ogg', + "completion" = 'sound/vox_fem/completion.ogg', "complex" = 'sound/vox_fem/complex.ogg', "comply" = 'sound/vox_fem/comply.ogg', "computer" = 'sound/vox_fem/computer.ogg', "condition" = 'sound/vox_fem/condition.ogg', + "conditions" = 'sound/vox_fem/conditions.ogg', "condom" = 'sound/vox_fem/condom.ogg', + "configure" = 'sound/vox_fem/configure.ogg', + "configured" = 'sound/vox_fem/configured.ogg', + "configuring" = 'sound/vox_fem/configuring.ogg', "confirmed" = 'sound/vox_fem/confirmed.ogg', "connor" = 'sound/vox_fem/connor.ogg', "console" = 'sound/vox_fem/console.ogg', "console2" = 'sound/vox_fem/console2.ogg', "construct" = 'sound/vox_fem/construct.ogg', + "container" = 'sound/vox_fem/container.ogg', "containment" = 'sound/vox_fem/containment.ogg', "contamination" = 'sound/vox_fem/contamination.ogg', "contraband" = 'sound/vox_fem/contraband.ogg', "control" = 'sound/vox_fem/control.ogg', "cook" = 'sound/vox_fem/cook.ogg', + "cool" = 'sound/vox_fem/cool.ogg', "coolant" = 'sound/vox_fem/coolant.ogg', + "cooling" = 'sound/vox_fem/cooling.ogg', "coomer" = 'sound/vox_fem/coomer.ogg', "core" = 'sound/vox_fem/core.ogg', "corgi" = 'sound/vox_fem/corgi.ogg', @@ -221,10 +278,15 @@ GLOBAL_LIST_INIT(vox_sounds, list( "correct" = 'sound/vox_fem/correct.ogg', "corridor" = 'sound/vox_fem/corridor.ogg', "corridors" = 'sound/vox_fem/corridors.ogg', + "could" = 'sound/vox_fem/could.ogg', + "couldnt" = 'sound/vox_fem/couldnt.ogg', + "countdown" = 'sound/vox_fem/countdown.ogg', "coward" = 'sound/vox_fem/coward.ogg', "cowards" = 'sound/vox_fem/cowards.ogg', "crate" = 'sound/vox_fem/crate.ogg', + "create" = 'sound/vox_fem/create.ogg', "created" = 'sound/vox_fem/created.ogg', + "creating" = 'sound/vox_fem/creating.ogg', "creature" = 'sound/vox_fem/creature.ogg', "crew" = 'sound/vox_fem/crew.ogg', "critical" = 'sound/vox_fem/critical.ogg', @@ -251,9 +313,12 @@ GLOBAL_LIST_INIT(vox_sounds, list( "deeoo" = 'sound/vox_fem/deeoo.ogg', "defense" = 'sound/vox_fem/defense.ogg', "degrees" = 'sound/vox_fem/degrees.ogg', + "delaminating" = 'sound/vox_fem/delaminating.ogg', + "delamination" = 'sound/vox_fem/delamination.ogg', "delta" = 'sound/vox_fem/delta.ogg', "demon" = 'sound/vox_fem/demon.ogg', "denied" = 'sound/vox_fem/denied.ogg', + "deny" = 'sound/vox_fem/deny.ogg', "departures" = 'sound/vox_fem/departures.ogg', "deploy" = 'sound/vox_fem/deploy.ogg', "deployed" = 'sound/vox_fem/deployed.ogg', @@ -263,7 +328,9 @@ GLOBAL_LIST_INIT(vox_sounds, list( "destroyed" = 'sound/vox_fem/destroyed.ogg', "destruction" = 'sound/vox_fem/destruction.ogg', "detain" = 'sound/vox_fem/detain.ogg', + "detect" = 'sound/vox_fem/detect.ogg', "detected" = 'sound/vox_fem/detected.ogg', + "detecting" = 'sound/vox_fem/detecting.ogg', "detective" = 'sound/vox_fem/detective.ogg', "detonation" = 'sound/vox_fem/detonation.ogg', "device" = 'sound/vox_fem/device.ogg', @@ -271,8 +338,10 @@ GLOBAL_LIST_INIT(vox_sounds, list( "did" = 'sound/vox_fem/did.ogg', "die" = 'sound/vox_fem/die.ogg', "died" = 'sound/vox_fem/died.ogg', + "different" = 'sound/vox_fem/different.ogg', "dimensional" = 'sound/vox_fem/dimensional.ogg', "dioxide" = 'sound/vox_fem/dioxide.ogg', + "direct" = 'sound/vox_fem/direct.ogg', "director" = 'sound/vox_fem/director.ogg', "dirt" = 'sound/vox_fem/dirt.ogg', "disabled" = 'sound/vox_fem/disabled.ogg', @@ -286,31 +355,47 @@ GLOBAL_LIST_INIT(vox_sounds, list( "do" = 'sound/vox_fem/do.ogg', "doctor" = 'sound/vox_fem/doctor.ogg', "dog" = 'sound/vox_fem/dog.ogg', + "dont" = 'sound/vox_fem/dont.ogg', "doomsday" = 'sound/vox_fem/doomsday.ogg', "doop" = 'sound/vox_fem/doop.ogg', "door" = 'sound/vox_fem/door.ogg', "dormitory" = 'sound/vox_fem/dormitory.ogg', "dot" = 'sound/vox_fem/dot.ogg', + "double" = 'sound/vox_fem/double.ogg', "down" = 'sound/vox_fem/down.ogg', + "dress" = 'sound/vox_fem/dress.ogg', + "dressed" = 'sound/vox_fem/dressed.ogg', + "dressing" = 'sound/vox_fem/dressing.ogg', "drone" = 'sound/vox_fem/drone.ogg', "dual" = 'sound/vox_fem/dual.ogg', "duct" = 'sound/vox_fem/duct.ogg', "e" = 'sound/vox_fem/e.ogg', + "easily" = 'sound/vox_fem/easily.ogg', "east" = 'sound/vox_fem/east.ogg', + "eat" = 'sound/vox_fem/eat.ogg', + "eaten" = 'sound/vox_fem/eaten.ogg', "echo" = 'sound/vox_fem/echo.ogg', "ed" = 'sound/vox_fem/ed.ogg', + "education" = 'sound/vox_fem/education.ogg', "effect" = 'sound/vox_fem/effect.ogg', + "effects" = 'sound/vox_fem/effects.ogg', "egress" = 'sound/vox_fem/egress.ogg', "eight" = 'sound/vox_fem/eight.ogg', "eighteen" = 'sound/vox_fem/eighteen.ogg', "eighty" = 'sound/vox_fem/eighty.ogg', "electric" = 'sound/vox_fem/electric.ogg', + "electrical" = 'sound/vox_fem/electrical.ogg', "electromagnetic" = 'sound/vox_fem/electromagnetic.ogg', "elevator" = 'sound/vox_fem/elevator.ogg', "eleven" = 'sound/vox_fem/eleven.ogg', "eliminate" = 'sound/vox_fem/eliminate.ogg', "emergency" = 'sound/vox_fem/emergency.ogg', + "emitted" = 'sound/vox_fem/emitted.ogg', + "emitter" = 'sound/vox_fem/emitter.ogg', + "emitting" = 'sound/vox_fem/emitting.ogg', "enabled" = 'sound/vox_fem/enabled.ogg', + "end" = 'sound/vox_fem/end.ogg', + "ends" = 'sound/vox_fem/ends.ogg', "energy" = 'sound/vox_fem/energy.ogg', "engage" = 'sound/vox_fem/engage.ogg', "engaged" = 'sound/vox_fem/engaged.ogg', @@ -318,6 +403,7 @@ GLOBAL_LIST_INIT(vox_sounds, list( "engineer" = 'sound/vox_fem/engineer.ogg', "engineering" = 'sound/vox_fem/engineering.ogg', "enormous" = 'sound/vox_fem/enormous.ogg', + "enough" = 'sound/vox_fem/enough.ogg', "enter" = 'sound/vox_fem/enter.ogg', "entity" = 'sound/vox_fem/entity.ogg', "entry" = 'sound/vox_fem/entry.ogg', @@ -329,7 +415,11 @@ GLOBAL_LIST_INIT(vox_sounds, list( "ethereal" = 'sound/vox_fem/ethereal.ogg', "eva" = 'sound/vox_fem/eva.ogg', "evacuate" = 'sound/vox_fem/evacuate.ogg', + "even" = 'sound/vox_fem/even.ogg', "ever" = 'sound/vox_fem/ever.ogg', + "every" = 'sound/vox_fem/every.ogg', + "everybody" = 'sound/vox_fem/everybody.ogg', + "everyone" = 'sound/vox_fem/everyone.ogg', "exchange" = 'sound/vox_fem/exchange.ogg', "execute" = 'sound/vox_fem/execute.ogg', "exit" = 'sound/vox_fem/exit.ogg', @@ -337,12 +427,16 @@ GLOBAL_LIST_INIT(vox_sounds, list( "experiment" = 'sound/vox_fem/experiment.ogg', "experimental" = 'sound/vox_fem/experimental.ogg', "explode" = 'sound/vox_fem/explode.ogg', + "exploded" = 'sound/vox_fem/exploded.ogg', + "exploding" = 'sound/vox_fem/exploding.ogg', "explosion" = 'sound/vox_fem/explosion.ogg', "explosive" = 'sound/vox_fem/explosive.ogg', "exposure" = 'sound/vox_fem/exposure.ogg', "exterminate" = 'sound/vox_fem/exterminate.ogg', + "external" = 'sound/vox_fem/external.ogg', "extinguish" = 'sound/vox_fem/extinguish.ogg', "extinguisher" = 'sound/vox_fem/extinguisher.ogg', + "extra" = 'sound/vox_fem/extra.ogg', "extreme" = 'sound/vox_fem/extreme.ogg', "f" = 'sound/vox_fem/f.ogg', "facility" = 'sound/vox_fem/facility.ogg', @@ -354,12 +448,19 @@ GLOBAL_LIST_INIT(vox_sounds, list( "farthest" = 'sound/vox_fem/farthest.ogg', "fast" = 'sound/vox_fem/fast.ogg', "fauna" = 'sound/vox_fem/fauna.ogg', + "feature" = 'sound/vox_fem/feature.ogg', + "featured" = 'sound/vox_fem/featured.ogg', + "features" = 'sound/vox_fem/features.ogg', + "featuring" = 'sound/vox_fem/featuring.ogg', "feet" = 'sound/vox_fem/feet.ogg', "felinid" = 'sound/vox_fem/felinid.ogg', + "few" = 'sound/vox_fem/few.ogg', "field" = 'sound/vox_fem/field.ogg', "fifteen" = 'sound/vox_fem/fifteen.ogg', "fifth" = 'sound/vox_fem/fifth.ogg', "fifty" = 'sound/vox_fem/fifty.ogg', + "filter" = 'sound/vox_fem/filter.ogg', + "filters" = 'sound/vox_fem/filters.ogg', "final" = 'sound/vox_fem/final.ogg', "fine" = 'sound/vox_fem/fine.ogg', "fire" = 'sound/vox_fem/fire.ogg', @@ -370,6 +471,7 @@ GLOBAL_LIST_INIT(vox_sounds, list( "floor" = 'sound/vox_fem/floor.ogg', "flyman" = 'sound/vox_fem/flyman.ogg', "fool" = 'sound/vox_fem/fool.ogg', + "foolish" = 'sound/vox_fem/foolish.ogg', "for" = 'sound/vox_fem/for.ogg', "forbidden" = 'sound/vox_fem/forbidden.ogg', "force" = 'sound/vox_fem/force.ogg', @@ -389,6 +491,7 @@ GLOBAL_LIST_INIT(vox_sounds, list( "freeze" = 'sound/vox_fem/freeze.ogg', "freezer" = 'sound/vox_fem/freezer.ogg', "freezing" = 'sound/vox_fem/freezing.ogg', + "freon" = 'sound/vox_fem/freon.ogg', "from" = 'sound/vox_fem/from.ogg', "front" = 'sound/vox_fem/front.ogg', "froze" = 'sound/vox_fem/froze.ogg', @@ -399,9 +502,19 @@ GLOBAL_LIST_INIT(vox_sounds, list( "fuel" = 'sound/vox_fem/fuel.ogg', "g" = 'sound/vox_fem/g.ogg', "gas" = 'sound/vox_fem/gas.ogg', + "gases" = 'sound/vox_fem/gases.ogg', + "gave" = 'sound/vox_fem/gave.ogg', + "gear" = 'sound/vox_fem/gear.ogg', + "geared" = 'sound/vox_fem/geared.ogg', + "gearing" = 'sound/vox_fem/gearing.ogg', + "generate" = 'sound/vox_fem/generate.ogg', + "generated" = 'sound/vox_fem/generated.ogg', + "generating" = 'sound/vox_fem/generating.ogg', "generator" = 'sound/vox_fem/generator.ogg', "geneticist" = 'sound/vox_fem/geneticist.ogg', "get" = 'sound/vox_fem/get.ogg', + "give" = 'sound/vox_fem/give.ogg', + "given" = 'sound/vox_fem/given.ogg', "glory" = 'sound/vox_fem/glory.ogg', "go" = 'sound/vox_fem/go.ogg', "god" = 'sound/vox_fem/god.ogg', @@ -428,17 +541,29 @@ GLOBAL_LIST_INIT(vox_sounds, list( "had" = 'sound/vox_fem/had.ogg', "hall" = 'sound/vox_fem/hall.ogg', "hallway" = 'sound/vox_fem/hallway.ogg', + "halon" = 'sound/vox_fem/halon.ogg', "handling" = 'sound/vox_fem/handling.ogg', "hangar" = 'sound/vox_fem/hangar.ogg', + "hard" = 'sound/vox_fem/hard.ogg', + "hardly" = 'sound/vox_fem/hardly.ogg', "harm" = 'sound/vox_fem/harm.ogg', "harmful" = 'sound/vox_fem/harmful.ogg', + "harness" = 'sound/vox_fem/harness.ogg', + "harnessed" = 'sound/vox_fem/harnessed.ogg', + "harnessing" = 'sound/vox_fem/harnessing.ogg', "has" = 'sound/vox_fem/has.ogg', "have" = 'sound/vox_fem/have.ogg', "hazard" = 'sound/vox_fem/hazard.ogg', "he" = 'sound/vox_fem/he.ogg', "head" = 'sound/vox_fem/head.ogg', + "heal" = 'sound/vox_fem/heal.ogg', + "healed" = 'sound/vox_fem/healed.ogg', + "healing" = 'sound/vox_fem/healing.ogg', + "healium" = 'sound/vox_fem/healium.ogg', "health" = 'sound/vox_fem/health.ogg', "heat" = 'sound/vox_fem/heat.ogg', + "heated" = 'sound/vox_fem/heated.ogg', + "heating" = 'sound/vox_fem/heating.ogg', "helicopter" = 'sound/vox_fem/helicopter.ogg', "helium" = 'sound/vox_fem/helium.ogg', "hello" = 'sound/vox_fem/hello.ogg', @@ -468,7 +593,9 @@ GLOBAL_LIST_INIT(vox_sounds, list( "hunger" = 'sound/vox_fem/hunger.ogg', "hurt" = 'sound/vox_fem/hurt.ogg', "hydro" = 'sound/vox_fem/hydro.ogg', + "hydrogen" = 'sound/vox_fem/hydrogen.ogg', "hydroponics" = 'sound/vox_fem/hydroponics.ogg', + "hyper-noblium" = 'sound/vox_fem/hyper-noblium.ogg', "i" = 'sound/vox_fem/i.ogg', "ian" = 'sound/vox_fem/ian.ogg', "idiot" = 'sound/vox_fem/idiot.ogg', @@ -482,26 +609,33 @@ GLOBAL_LIST_INIT(vox_sounds, list( "in" = 'sound/vox_fem/in.ogg', "inches" = 'sound/vox_fem/inches.ogg', "india" = 'sound/vox_fem/india.ogg', + "inert" = 'sound/vox_fem/inert.ogg', "ing" = 'sound/vox_fem/ing.ogg', "inoperative" = 'sound/vox_fem/inoperative.ogg', "inside" = 'sound/vox_fem/inside.ogg', "inspection" = 'sound/vox_fem/inspection.ogg', "inspector" = 'sound/vox_fem/inspector.ogg', "interchange" = 'sound/vox_fem/interchange.ogg', + "internal" = 'sound/vox_fem/internal.ogg', "internals" = 'sound/vox_fem/internals.ogg', "intruder" = 'sound/vox_fem/intruder.ogg', "invalid" = 'sound/vox_fem/invalid.ogg', "invalidate" = 'sound/vox_fem/invalidate.ogg', "invasion" = 'sound/vox_fem/invasion.ogg', + "irradiate" = 'sound/vox_fem/irradiate.ogg', "is" = 'sound/vox_fem/is.ogg', "it" = 'sound/vox_fem/it.ogg', + "its" = 'sound/vox_fem/its.ogg', "j" = 'sound/vox_fem/j.ogg', "janitor" = 'sound/vox_fem/janitor.ogg', "jesus" = 'sound/vox_fem/jesus.ogg', + "job" = 'sound/vox_fem/job.ogg', + "jobs" = 'sound/vox_fem/jobs.ogg', "johnson" = 'sound/vox_fem/johnson.ogg', "jolly" = 'sound/vox_fem/jolly.ogg', "juliet" = 'sound/vox_fem/juliet.ogg', "k" = 'sound/vox_fem/k.ogg', + "kelvin" = 'sound/vox_fem/kelvin.ogg', "key" = 'sound/vox_fem/key.ogg', "kidnapped" = 'sound/vox_fem/kidnapped.ogg', "kidnapping" = 'sound/vox_fem/kidnapping.ogg', @@ -536,7 +670,10 @@ GLOBAL_LIST_INIT(vox_sounds, list( "light" = 'sound/vox_fem/light.ogg', "lightbulb" = 'sound/vox_fem/lightbulb.ogg', "lima" = 'sound/vox_fem/lima.ogg', + "limit" = 'sound/vox_fem/limit.ogg', + "limited" = 'sound/vox_fem/limited.ogg', "liquid" = 'sound/vox_fem/liquid.ogg', + "list" = 'sound/vox_fem/list.ogg', "live" = 'sound/vox_fem/live.ogg', "live2" = 'sound/vox_fem/live2.ogg', "lizard" = 'sound/vox_fem/lizard.ogg', @@ -559,12 +696,14 @@ GLOBAL_LIST_INIT(vox_sounds, list( "lusty" = 'sound/vox_fem/lusty.ogg', "m" = 'sound/vox_fem/m.ogg', "machine" = 'sound/vox_fem/machine.ogg', + "made" = 'sound/vox_fem/made.ogg', "magic" = 'sound/vox_fem/magic.ogg', "magnetic" = 'sound/vox_fem/magnetic.ogg', "main" = 'sound/vox_fem/main.ogg', "maintainer" = 'sound/vox_fem/maintainer.ogg', "maintenance" = 'sound/vox_fem/maintenance.ogg', "major" = 'sound/vox_fem/major.ogg', + "making" = 'sound/vox_fem/making.ogg', "malfunction" = 'sound/vox_fem/malfunction.ogg', "man" = 'sound/vox_fem/man.ogg', "many" = 'sound/vox_fem/many.ogg', @@ -573,15 +712,21 @@ GLOBAL_LIST_INIT(vox_sounds, list( "maximum" = 'sound/vox_fem/maximum.ogg', "may" = 'sound/vox_fem/may.ogg', "me" = 'sound/vox_fem/me.ogg', + "mean" = 'sound/vox_fem/mean.ogg', + "means" = 'sound/vox_fem/means.ogg', "meat" = 'sound/vox_fem/meat.ogg', "medbay" = 'sound/vox_fem/medbay.ogg', "medical" = 'sound/vox_fem/medical.ogg', + "medium" = 'sound/vox_fem/medium.ogg', "megafauna" = 'sound/vox_fem/megafauna.ogg', "men" = 'sound/vox_fem/men.ogg', "mercy" = 'sound/vox_fem/mercy.ogg', "mesa" = 'sound/vox_fem/mesa.ogg', + "meson" = 'sound/vox_fem/meson.ogg', "message" = 'sound/vox_fem/message.ogg', "meter" = 'sound/vox_fem/meter.ogg', + "method" = 'sound/vox_fem/method.ogg', + "miasma" = 'sound/vox_fem/miasma.ogg', "micro" = 'sound/vox_fem/micro.ogg', "middle" = 'sound/vox_fem/middle.ogg', "mike" = 'sound/vox_fem/mike.ogg', @@ -594,17 +739,22 @@ GLOBAL_LIST_INIT(vox_sounds, list( "miner" = 'sound/vox_fem/miner.ogg', "minimum" = 'sound/vox_fem/minimum.ogg', "minor" = 'sound/vox_fem/minor.ogg', + "minute" = 'sound/vox_fem/minute.ogg', "minutes" = 'sound/vox_fem/minutes.ogg', "mister" = 'sound/vox_fem/mister.ogg', + "mixture" = 'sound/vox_fem/mixture.ogg', "mode" = 'sound/vox_fem/mode.ogg', "modification" = 'sound/vox_fem/modification.ogg', "money" = 'sound/vox_fem/money.ogg', "monkey" = 'sound/vox_fem/monkey.ogg', + "most" = 'sound/vox_fem/most.ogg', "moth" = 'sound/vox_fem/moth.ogg', "mothperson" = 'sound/vox_fem/mothperson.ogg', "motor" = 'sound/vox_fem/motor.ogg', "motorpool" = 'sound/vox_fem/motorpool.ogg', "move" = 'sound/vox_fem/move.ogg', + "moved" = 'sound/vox_fem/moved.ogg', + "moving" = 'sound/vox_fem/moving.ogg', "multitude" = 'sound/vox_fem/multitude.ogg', "murder" = 'sound/vox_fem/murder.ogg', "murderer" = 'sound/vox_fem/murderer.ogg', @@ -613,7 +763,9 @@ GLOBAL_LIST_INIT(vox_sounds, list( "mythic" = 'sound/vox_fem/mythic.ogg', "n" = 'sound/vox_fem/n.ogg', "nanotrasen" = 'sound/vox_fem/nanotrasen.ogg', + "near" = 'sound/vox_fem/near.ogg', "nearest" = 'sound/vox_fem/nearest.ogg', + "nearly" = 'sound/vox_fem/nearly.ogg', "need" = 'sound/vox_fem/need.ogg', "never" = 'sound/vox_fem/never.ogg', "nice" = 'sound/vox_fem/nice.ogg', @@ -624,16 +776,21 @@ GLOBAL_LIST_INIT(vox_sounds, list( "nitrogen" = 'sound/vox_fem/nitrogen.ogg', "no" = 'sound/vox_fem/no.ogg', "nominal" = 'sound/vox_fem/nominal.ogg', + "none" = 'sound/vox_fem/none.ogg', + "normal" = 'sound/vox_fem/normal.ogg', + "normally" = 'sound/vox_fem/normally.ogg', "north" = 'sound/vox_fem/north.ogg', "northeast" = 'sound/vox_fem/northeast.ogg', "northwest" = 'sound/vox_fem/northwest.ogg', "not" = 'sound/vox_fem/not.ogg', + "notably" = 'sound/vox_fem/notably.ogg', "november" = 'sound/vox_fem/november.ogg', "now" = 'sound/vox_fem/now.ogg', "nuclear" = 'sound/vox_fem/nuclear.ogg', "nuke" = 'sound/vox_fem/nuke.ogg', "number" = 'sound/vox_fem/number.ogg', "o" = 'sound/vox_fem/o.ogg', + "object" = 'sound/vox_fem/object.ogg', "objective" = 'sound/vox_fem/objective.ogg', "obliterate" = 'sound/vox_fem/obliterate.ogg', "obliterated" = 'sound/vox_fem/obliterated.ogg', @@ -660,13 +817,17 @@ GLOBAL_LIST_INIT(vox_sounds, list( "option" = 'sound/vox_fem/option.ogg', "or" = 'sound/vox_fem/or.ogg', "order" = 'sound/vox_fem/order.ogg', + "ordered" = 'sound/vox_fem/ordered.ogg', + "ordering" = 'sound/vox_fem/ordering.ogg', "organic" = 'sound/vox_fem/organic.ogg', "oscar" = 'sound/vox_fem/oscar.ogg', "out" = 'sound/vox_fem/out.ogg', + "output" = 'sound/vox_fem/output.ogg', "outside" = 'sound/vox_fem/outside.ogg', "over" = 'sound/vox_fem/over.ogg', "overload" = 'sound/vox_fem/overload.ogg', "override" = 'sound/vox_fem/override.ogg', + "own" = 'sound/vox_fem/own.ogg', "oxygen" = 'sound/vox_fem/oxygen.ogg', "p" = 'sound/vox_fem/p.ogg', "pacification" = 'sound/vox_fem/pacification.ogg', @@ -676,6 +837,7 @@ GLOBAL_LIST_INIT(vox_sounds, list( "panel" = 'sound/vox_fem/panel.ogg', "panting" = 'sound/vox_fem/panting.ogg', "pathetic" = 'sound/vox_fem/pathetic.ogg', + "pda" = 'sound/vox_fem/pda.ogg', "percent" = 'sound/vox_fem/percent.ogg', "perfect" = 'sound/vox_fem/perfect.ogg', "perhaps" = 'sound/vox_fem/perhaps.ogg', @@ -690,28 +852,46 @@ GLOBAL_LIST_INIT(vox_sounds, list( "plasma" = 'sound/vox_fem/plasma.ogg', "plasmaman" = 'sound/vox_fem/plasmaman.ogg', "platform" = 'sound/vox_fem/platform.ogg', + "plating" = 'sound/vox_fem/plating.ogg', "plausible" = 'sound/vox_fem/plausible.ogg', "please" = 'sound/vox_fem/please.ogg', + "pluoxium" = 'sound/vox_fem/pluoxium.ogg', "point" = 'sound/vox_fem/point.ogg', "port" = 'sound/vox_fem/port.ogg', "portal" = 'sound/vox_fem/portal.ogg', + "portion" = 'sound/vox_fem/portion.ogg', "possible" = 'sound/vox_fem/possible.ogg', "power" = 'sound/vox_fem/power.ogg', + "powered" = 'sound/vox_fem/powered.ogg', + "powering" = 'sound/vox_fem/powering.ogg', + "premature" = 'sound/vox_fem/premature.ogg', + "prematurely" = 'sound/vox_fem/prematurely.ogg', "presence" = 'sound/vox_fem/presence.ogg', "present" = 'sound/vox_fem/present.ogg', "presents" = 'sound/vox_fem/presents.ogg', "press" = 'sound/vox_fem/press.ogg', "pressure" = 'sound/vox_fem/pressure.ogg', "primary" = 'sound/vox_fem/primary.ogg', + "priority" = 'sound/vox_fem/priority.ogg', "prison" = 'sound/vox_fem/prison.ogg', "prisoner" = 'sound/vox_fem/prisoner.ogg', "proceed" = 'sound/vox_fem/proceed.ogg', "processing" = 'sound/vox_fem/processing.ogg', "progress" = 'sound/vox_fem/progress.ogg', + "projectile" = 'sound/vox_fem/projectile.ogg', "proper" = 'sound/vox_fem/proper.ogg', "propulsion" = 'sound/vox_fem/propulsion.ogg', "prosecute" = 'sound/vox_fem/prosecute.ogg', + "protect" = 'sound/vox_fem/protect.ogg', + "protected" = 'sound/vox_fem/protected.ogg', + "protection" = 'sound/vox_fem/protection.ogg', "protective" = 'sound/vox_fem/protective.ogg', + "proto-nitrate" = 'sound/vox_fem/proto-nitrate.ogg', + "pull" = 'sound/vox_fem/pull.ogg', + "pulled" = 'sound/vox_fem/pulled.ogg', + "pulling" = 'sound/vox_fem/pulling.ogg', + "pump" = 'sound/vox_fem/pump.ogg', + "pumps" = 'sound/vox_fem/pumps.ogg', "push" = 'sound/vox_fem/push.ogg', "put" = 'sound/vox_fem/put.ogg', "q" = 'sound/vox_fem/q.ogg', @@ -737,9 +917,14 @@ GLOBAL_LIST_INIT(vox_sounds, list( "reactor" = 'sound/vox_fem/reactor.ogg', "red" = 'sound/vox_fem/red.ogg', "relay" = 'sound/vox_fem/relay.ogg', + "release" = 'sound/vox_fem/release.ogg', "released" = 'sound/vox_fem/released.ogg', + "releasing" = 'sound/vox_fem/releasing.ogg', "remaining" = 'sound/vox_fem/remaining.ogg', "removal" = 'sound/vox_fem/removal.ogg', + "remove" = 'sound/vox_fem/remove.ogg', + "removed" = 'sound/vox_fem/removed.ogg', + "removing" = 'sound/vox_fem/removing.ogg', "renegade" = 'sound/vox_fem/renegade.ogg', "repair" = 'sound/vox_fem/repair.ogg', "report" = 'sound/vox_fem/report.ogg', @@ -752,6 +937,9 @@ GLOBAL_LIST_INIT(vox_sounds, list( "research" = 'sound/vox_fem/research.ogg', "resevoir" = 'sound/vox_fem/resevoir.ogg', "resistance" = 'sound/vox_fem/resistance.ogg', + "resistant" = 'sound/vox_fem/resistant.ogg', + "resisting" = 'sound/vox_fem/resisting.ogg', + "resonance" = 'sound/vox_fem/resonance.ogg', "rest" = 'sound/vox_fem/rest.ogg', "restoration" = 'sound/vox_fem/restoration.ogg', "revolution" = 'sound/vox_fem/revolution.ogg', @@ -770,18 +958,28 @@ GLOBAL_LIST_INIT(vox_sounds, list( "runtime" = 'sound/vox_fem/runtime.ogg', "s" = 'sound/vox_fem/s.ogg', "sabotage" = 'sound/vox_fem/sabotage.ogg', + "sabotaged" = 'sound/vox_fem/sabotaged.ogg', + "sabotaging" = 'sound/vox_fem/sabotaging.ogg', "safe" = 'sound/vox_fem/safe.ogg', "safety" = 'sound/vox_fem/safety.ogg', "sairhorn" = 'sound/vox_fem/sairhorn.ogg', + "same" = 'sound/vox_fem/same.ogg', "sarah" = 'sound/vox_fem/sarah.ogg', "sargeant" = 'sound/vox_fem/sargeant.ogg', "satellite" = 'sound/vox_fem/satellite.ogg', "save" = 'sound/vox_fem/save.ogg', + "saw" = 'sound/vox_fem/saw.ogg', + "scan" = 'sound/vox_fem/scan.ogg', + "scanned" = 'sound/vox_fem/scanned.ogg', + "scanner" = 'sound/vox_fem/scanner.ogg', + "scanners" = 'sound/vox_fem/scanners.ogg', + "scanning" = 'sound/vox_fem/scanning.ogg', "scensor" = 'sound/vox_fem/scensor.ogg', "science" = 'sound/vox_fem/science.ogg', "scientist" = 'sound/vox_fem/scientist.ogg', "scream" = 'sound/vox_fem/scream.ogg', "screen" = 'sound/vox_fem/screen.ogg', + "screw" = 'sound/vox_fem/screw.ogg', "search" = 'sound/vox_fem/search.ogg', "second" = 'sound/vox_fem/second.ogg', "secondary" = 'sound/vox_fem/secondary.ogg', @@ -791,21 +989,32 @@ GLOBAL_LIST_INIT(vox_sounds, list( "secure" = 'sound/vox_fem/secure.ogg', "secured" = 'sound/vox_fem/secured.ogg', "security" = 'sound/vox_fem/security.ogg', + "seen" = 'sound/vox_fem/seen.ogg', "select" = 'sound/vox_fem/select.ogg', "selected" = 'sound/vox_fem/selected.ogg', "self" = 'sound/vox_fem/self.ogg', "sensors" = 'sound/vox_fem/sensors.ogg', "server" = 'sound/vox_fem/server.ogg', "service" = 'sound/vox_fem/service.ogg', + "set" = 'sound/vox_fem/set.ogg', "seven" = 'sound/vox_fem/seven.ogg', "seventeen" = 'sound/vox_fem/seventeen.ogg', "seventy" = 'sound/vox_fem/seventy.ogg', + "sever" = 'sound/vox_fem/sever.ogg', "severe" = 'sound/vox_fem/severe.ogg', + "severed" = 'sound/vox_fem/severed.ogg', + "severing" = 'sound/vox_fem/severing.ogg', "sewage" = 'sound/vox_fem/sewage.ogg', "sewer" = 'sound/vox_fem/sewer.ogg', "shaft" = 'sound/vox_fem/shaft.ogg', + "shame" = 'sound/vox_fem/shame.ogg', + "shameful" = 'sound/vox_fem/shameful.ogg', + "shameless" = 'sound/vox_fem/shameless.ogg', + "shard" = 'sound/vox_fem/shard.ogg', "she" = 'sound/vox_fem/she.ogg', "shield" = 'sound/vox_fem/shield.ogg', + "shift" = 'sound/vox_fem/shift.ogg', + "shifts" = 'sound/vox_fem/shifts.ogg', "shipment" = 'sound/vox_fem/shipment.ogg', "shirt" = 'sound/vox_fem/shirt.ogg', "shit" = 'sound/vox_fem/shit.ogg', @@ -820,11 +1029,15 @@ GLOBAL_LIST_INIT(vox_sounds, list( "shuttle" = 'sound/vox_fem/shuttle.ogg', "sick" = 'sound/vox_fem/sick.ogg', "side" = 'sound/vox_fem/side.ogg', + "sides" = 'sound/vox_fem/sides.ogg', "sierra" = 'sound/vox_fem/sierra.ogg', "sight" = 'sound/vox_fem/sight.ogg', "silicon" = 'sound/vox_fem/silicon.ogg', "silo" = 'sound/vox_fem/silo.ogg', + "single" = 'sound/vox_fem/single.ogg', "singularity" = 'sound/vox_fem/singularity.ogg', + "siphon" = 'sound/vox_fem/siphon.ogg', + "siphoning" = 'sound/vox_fem/siphoning.ogg', "six" = 'sound/vox_fem/six.ogg', "sixteen" = 'sound/vox_fem/sixteen.ogg', "sixty" = 'sound/vox_fem/sixty.ogg', @@ -837,6 +1050,7 @@ GLOBAL_LIST_INIT(vox_sounds, list( "sm" = 'sound/vox_fem/sm.ogg', "small" = 'sound/vox_fem/small.ogg', "sockmuncher" = 'sound/vox_fem/sockmuncher.ogg', + "soft" = 'sound/vox_fem/soft.ogg', "solar" = 'sound/vox_fem/solar.ogg', "solars" = 'sound/vox_fem/solars.ogg', "soldier" = 'sound/vox_fem/soldier.ogg', @@ -845,16 +1059,23 @@ GLOBAL_LIST_INIT(vox_sounds, list( "something" = 'sound/vox_fem/something.ogg', "son" = 'sound/vox_fem/son.ogg', "sorry" = 'sound/vox_fem/sorry.ogg', + "source" = 'sound/vox_fem/source.ogg', "south" = 'sound/vox_fem/south.ogg', "southeast" = 'sound/vox_fem/southeast.ogg', "southwest" = 'sound/vox_fem/southwest.ogg', "space" = 'sound/vox_fem/space.ogg', + "special" = 'sound/vox_fem/special.ogg', + "spew" = 'sound/vox_fem/spew.ogg', "squad" = 'sound/vox_fem/squad.ogg', "square" = 'sound/vox_fem/square.ogg', "ss13" = 'sound/vox_fem/ss13.ogg', "stairway" = 'sound/vox_fem/stairway.ogg', "starboard" = 'sound/vox_fem/starboard.ogg', + "start" = 'sound/vox_fem/start.ogg', + "starts" = 'sound/vox_fem/starts.ogg', "station" = 'sound/vox_fem/station.ogg', + "stations" = 'sound/vox_fem/stations.ogg', + "stationwide" = 'sound/vox_fem/stationwide.ogg', "status" = 'sound/vox_fem/status.ogg', "stay" = 'sound/vox_fem/stay.ogg', "sterile" = 'sound/vox_fem/sterile.ogg', @@ -865,9 +1086,12 @@ GLOBAL_LIST_INIT(vox_sounds, list( "stuck" = 'sound/vox_fem/stuck.ogg', "sub" = 'sound/vox_fem/sub.ogg', "subsurface" = 'sound/vox_fem/subsurface.ogg', + "such" = 'sound/vox_fem/such.ogg', "sudden" = 'sound/vox_fem/sudden.ogg', "suffer" = 'sound/vox_fem/suffer.ogg', "suit" = 'sound/vox_fem/suit.ogg', + "suited" = 'sound/vox_fem/suited.ogg', + "super" = 'sound/vox_fem/super.ogg', "superconducting" = 'sound/vox_fem/superconducting.ogg', "supercooled" = 'sound/vox_fem/supercooled.ogg', "supermatter" = 'sound/vox_fem/supermatter.ogg', @@ -904,6 +1128,7 @@ GLOBAL_LIST_INIT(vox_sounds, list( "terminate" = 'sound/vox_fem/terminate.ogg', "terminated" = 'sound/vox_fem/terminated.ogg', "termination" = 'sound/vox_fem/termination.ogg', + "tesla" = 'sound/vox_fem/tesla.ogg', "test" = 'sound/vox_fem/test.ogg', "text" = 'sound/vox_fem/text.ogg', "thank" = 'sound/vox_fem/thank.ogg', @@ -924,23 +1149,33 @@ GLOBAL_LIST_INIT(vox_sounds, list( "threat" = 'sound/vox_fem/threat.ogg', "three" = 'sound/vox_fem/three.ogg', "through" = 'sound/vox_fem/through.ogg', + "tick" = 'sound/vox_fem/tick.ogg', "tide" = 'sound/vox_fem/tide.ogg', + "tile" = 'sound/vox_fem/tile.ogg', "time" = 'sound/vox_fem/time.ogg', "tiny" = 'sound/vox_fem/tiny.ogg', "to" = 'sound/vox_fem/to.ogg', "top" = 'sound/vox_fem/top.ogg', "topside" = 'sound/vox_fem/topside.ogg', "touch" = 'sound/vox_fem/touch.ogg', + "touched" = 'sound/vox_fem/touched.ogg', + "touching" = 'sound/vox_fem/touching.ogg', "towards" = 'sound/vox_fem/towards.ogg', "toxins" = 'sound/vox_fem/toxins.ogg', "track" = 'sound/vox_fem/track.ogg', "train" = 'sound/vox_fem/train.ogg', "traitor" = 'sound/vox_fem/traitor.ogg', "transportation" = 'sound/vox_fem/transportation.ogg', + "trigger" = 'sound/vox_fem/trigger.ogg', + "triggered" = 'sound/vox_fem/triggered.ogg', + "triggering" = 'sound/vox_fem/triggering.ogg', + "triple" = 'sound/vox_fem/triple.ogg', + "tritium" = 'sound/vox_fem/tritium.ogg', "truck" = 'sound/vox_fem/truck.ogg', "true" = 'sound/vox_fem/true.ogg', "tunnel" = 'sound/vox_fem/tunnel.ogg', "turn" = 'sound/vox_fem/turn.ogg', + "turned" = 'sound/vox_fem/turned.ogg', "turret" = 'sound/vox_fem/turret.ogg', "twelve" = 'sound/vox_fem/twelve.ogg', "twenty" = 'sound/vox_fem/twenty.ogg', @@ -952,10 +1187,13 @@ GLOBAL_LIST_INIT(vox_sounds, list( "unauthorized" = 'sound/vox_fem/unauthorized.ogg', "under" = 'sound/vox_fem/under.ogg', "uniform" = 'sound/vox_fem/uniform.ogg', + "unique" = 'sound/vox_fem/unique.ogg', "unknown" = 'sound/vox_fem/unknown.ogg', "unlocked" = 'sound/vox_fem/unlocked.ogg', "unsafe" = 'sound/vox_fem/unsafe.ogg', "until" = 'sound/vox_fem/until.ogg', + "unwrench" = 'sound/vox_fem/unwrench.ogg', + "unwrenching" = 'sound/vox_fem/unwrenching.ogg', "up" = 'sound/vox_fem/up.ogg', "update" = 'sound/vox_fem/update.ogg', "updated" = 'sound/vox_fem/updated.ogg', @@ -967,6 +1205,8 @@ GLOBAL_LIST_INIT(vox_sounds, list( "usa" = 'sound/vox_fem/usa.ogg', "use" = 'sound/vox_fem/use.ogg', "used" = 'sound/vox_fem/used.ogg', + "useful" = 'sound/vox_fem/useful.ogg', + "useless" = 'sound/vox_fem/useless.ogg', "user" = 'sound/vox_fem/user.ogg', "v" = 'sound/vox_fem/v.ogg', "vacate" = 'sound/vox_fem/vacate.ogg', @@ -987,8 +1227,8 @@ GLOBAL_LIST_INIT(vox_sounds, list( "vitals" = 'sound/vox_fem/vitals.ogg', "voltage" = 'sound/vox_fem/voltage.ogg', "vox" = 'sound/vox_fem/vox.ogg', - "vox_login" = 'sound/vox_fem/vox_login.ogg', "voxtest" = 'sound/vox_fem/voxtest.ogg', + "vox_login" = 'sound/vox_fem/vox_login.ogg', "w" = 'sound/vox_fem/w.ogg', "walk" = 'sound/vox_fem/walk.ogg', "wall" = 'sound/vox_fem/wall.ogg', @@ -1002,15 +1242,19 @@ GLOBAL_LIST_INIT(vox_sounds, list( "was" = 'sound/vox_fem/was.ogg', "waste" = 'sound/vox_fem/waste.ogg', "water" = 'sound/vox_fem/water.ogg', + "way" = 'sound/vox_fem/way.ogg', + "ways" = 'sound/vox_fem/ways.ogg', "we" = 'sound/vox_fem/we.ogg', "weak" = 'sound/vox_fem/weak.ogg', "weapon" = 'sound/vox_fem/weapon.ogg', "welcome" = 'sound/vox_fem/welcome.ogg', + "weld" = 'sound/vox_fem/weld.ogg', "west" = 'sound/vox_fem/west.ogg', "wew" = 'sound/vox_fem/wew.ogg', "what" = 'sound/vox_fem/what.ogg', "when" = 'sound/vox_fem/when.ogg', "where" = 'sound/vox_fem/where.ogg', + "which" = 'sound/vox_fem/which.ogg', "while" = 'sound/vox_fem/while.ogg', "whiskey" = 'sound/vox_fem/whiskey.ogg', "white" = 'sound/vox_fem/white.ogg', @@ -1025,7 +1269,15 @@ GLOBAL_LIST_INIT(vox_sounds, list( "wood" = 'sound/vox_fem/wood.ogg', "woody" = 'sound/vox_fem/woody.ogg', "woop" = 'sound/vox_fem/woop.ogg', + "work" = 'sound/vox_fem/work.ogg', + "worked" = 'sound/vox_fem/worked.ogg', + "working" = 'sound/vox_fem/working.ogg', + "works" = 'sound/vox_fem/works.ogg', + "would" = 'sound/vox_fem/would.ogg', + "wouldnt" = 'sound/vox_fem/wouldnt.ogg', "wow" = 'sound/vox_fem/wow.ogg', + "wrench" = 'sound/vox_fem/wrench.ogg', + "wrenching" = 'sound/vox_fem/wrenching.ogg', "x" = 'sound/vox_fem/x.ogg', "xeno" = 'sound/vox_fem/xeno.ogg', "xenobiology" = 'sound/vox_fem/xenobiology.ogg', @@ -1041,6 +1293,8 @@ GLOBAL_LIST_INIT(vox_sounds, list( "your" = 'sound/vox_fem/your.ogg', "yourself" = 'sound/vox_fem/yourself.ogg', "z" = 'sound/vox_fem/z.ogg', + "zap" = 'sound/vox_fem/zap.ogg', + "zauker" = 'sound/vox_fem/zauker.ogg', "zero" = 'sound/vox_fem/zero.ogg', "zombie" = 'sound/vox_fem/zombie.ogg', "zone" = 'sound/vox_fem/zone.ogg', diff --git a/code/modules/mob/living/silicon/damage_procs.dm b/code/modules/mob/living/silicon/damage_procs.dm index 58e5a244eaf74..90a41f1f2bf00 100644 --- a/code/modules/mob/living/silicon/damage_procs.dm +++ b/code/modules/mob/living/silicon/damage_procs.dm @@ -13,6 +13,9 @@ /mob/living/silicon/setStaminaLoss(amount, updating_stamina = TRUE, forced = FALSE, required_biotype) return FALSE +/mob/living/silicon/received_stamina_damage(current_level, amount_actual, amount) + return + /mob/living/silicon/adjustOrganLoss(slot, amount, maximum = 500, required_organ_flag) //immune to organ damage (no organs, duh) return FALSE diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index 4be370db44ba4..0c26e7c57e278 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -319,7 +319,7 @@ update_appearance(UPDATE_OVERLAYS) /mob/living/silicon/robot/on_changed_z_level(turf/old_turf, turf/new_turf, same_z_layer, notify_contents) - if(same_z_layer) + if(same_z_layer || QDELING(src)) return ..() cut_overlay(eye_lights) SET_PLANE_EXPLICIT(eye_lights, PLANE_TO_TRUE(eye_lights.plane), src) @@ -553,7 +553,7 @@ if(AI_NOTIFICATION_CYBORG_DISCONNECTED) //Tampering with the wires to_chat(connected_ai, "

    [span_notice("NOTICE - Remote telemetry lost with [name].")]
    ") -/mob/living/silicon/robot/can_perform_action(atom/movable/target, action_bitflags) +/mob/living/silicon/robot/can_perform_action(atom/target, action_bitflags) if(lockcharge || low_power_mode) to_chat(src, span_warning("You can't do that right now!")) return FALSE @@ -950,13 +950,16 @@ /mob/living/silicon/robot/proc/charge(datum/source, datum/callback/charge_cell, seconds_per_tick, repairs, sendmats) SIGNAL_HANDLER - charge_cell.Invoke(cell, seconds_per_tick) + if(model) - model.respawn_consumable(src, cell.use(cell.chargerate * 0.005)) + if(cell.charge) + if(model.respawn_consumable(src, cell.charge * 0.005)) + cell.use(cell.charge * 0.005) if(sendmats) model.restock_consumable() if(repairs) heal_bodypart_damage(repairs, repairs) + charge_cell.Invoke(cell, seconds_per_tick) /mob/living/silicon/robot/proc/set_connected_ai(new_ai) if(connected_ai == new_ai) diff --git a/code/modules/mob/living/silicon/robot/robot_defense.dm b/code/modules/mob/living/silicon/robot/robot_defense.dm index 70e7d8b34ab25..2346c36ba5c03 100644 --- a/code/modules/mob/living/silicon/robot/robot_defense.dm +++ b/code/modules/mob/living/silicon/robot/robot_defense.dm @@ -22,7 +22,7 @@ GLOBAL_LIST_INIT(blacklisted_borg_hats, typecacheof(list( //Hats that don't real to_chat(user, span_warning("The wires seem fine, there's no need to fix them.")) return - if(istype(W, /obj/item/stock_parts/cell) && opened) // trying to put a cell inside + if(istype(W, /obj/item/stock_parts/power_store/cell) && opened) // trying to put a cell inside if(wiresexposed) to_chat(user, span_warning("Close the cover first!")) else if(cell) diff --git a/code/modules/mob/living/silicon/robot/robot_defines.dm b/code/modules/mob/living/silicon/robot/robot_defines.dm index 0701584476cd2..48995a1582e66 100644 --- a/code/modules/mob/living/silicon/robot/robot_defines.dm +++ b/code/modules/mob/living/silicon/robot/robot_defines.dm @@ -40,7 +40,7 @@ ///Used for deconstruction to remember what the borg was constructed out of. var/obj/item/robot_suit/robot_suit = null ///If this is a path, this gets created as an object in Initialize. - var/obj/item/stock_parts/cell/cell = /obj/item/stock_parts/cell/high + var/obj/item/stock_parts/power_store/cell = /obj/item/stock_parts/power_store/cell/high ///If the lamp isn't broken. var/lamp_functional = TRUE @@ -202,7 +202,7 @@ Your cyborg LMG will slowly produce ammunition from your power supply, and your operative pinpointer will find and locate fellow nuclear operatives. \ Help the operatives secure the disk at all costs!
    " set_model = /obj/item/robot_model/syndicate - cell = /obj/item/stock_parts/cell/hyper + cell = /obj/item/stock_parts/power_store/cell/hyper radio = /obj/item/radio/borg/syndicate /mob/living/silicon/robot/model/syndicate/Initialize(mapload) diff --git a/code/modules/mob/living/silicon/robot/robot_model.dm b/code/modules/mob/living/silicon/robot/robot_model.dm index 176125ec8240f..1721d6ec2c102 100644 --- a/code/modules/mob/living/silicon/robot/robot_model.dm +++ b/code/modules/mob/living/silicon/robot/robot_model.dm @@ -82,6 +82,8 @@ for(var/module in get_usable_modules()) if(!(module in cyborg.held_items)) . += module + if(!cyborg.emagged) + . += emag_modules /obj/item/robot_model/proc/add_module(obj/item/added_module, nonstandard, requires_rebuild) if(isstack(added_module)) @@ -121,44 +123,57 @@ var/active_module = cyborg.module_active cyborg.drop_all_held_items() modules = list() - for(var/obj/item/module in basic_modules) + for(var/obj/item/module as anything in basic_modules) add_module(module, FALSE, FALSE) if(cyborg.emagged) - for(var/obj/item/module in emag_modules) + for(var/obj/item/module as anything in emag_modules) add_module(module, FALSE, FALSE) - for(var/obj/item/module in added_modules) + for(var/obj/item/module as anything in added_modules) add_module(module, FALSE, FALSE) - for(var/module in held_modules) - if(module) - cyborg.equip_module_to_slot(module, held_modules.Find(module)) + for(var/obj/item/module as anything in held_modules & modules) + cyborg.equip_module_to_slot(module, held_modules.Find(module)) if(active_module) cyborg.select_module(held_modules.Find(active_module)) if(cyborg.hud_used) cyborg.hud_used.update_robot_modules_display() + +///Restocks things that don't take mats, generally at a power cost. Returns True if anything was restocked/replaced, and False otherwise. /obj/item/robot_model/proc/respawn_consumable(mob/living/silicon/robot/cyborg, coeff = 1) SHOULD_CALL_PARENT(TRUE) + ///If anything was actually replaced/refilled/recharged. If not, we won't draw power. + . = FALSE + for(var/datum/robot_energy_storage/storage_datum in storages) if(storage_datum.renewable == FALSE) continue - storage_datum.energy = min(storage_datum.max_energy, storage_datum.energy + coeff * storage_datum.recharge_rate) + if(storage_datum.energy < storage_datum.max_energy) + . = TRUE + storage_datum.energy = min(storage_datum.max_energy, storage_datum.energy + coeff * storage_datum.recharge_rate) for(var/obj/item/module in get_usable_modules()) if(istype(module, /obj/item/assembly/flash)) var/obj/item/assembly/flash/flash = module + if(flash.burnt_out) + . = TRUE flash.times_used = 0 flash.burnt_out = FALSE flash.update_appearance() else if(istype(module, /obj/item/melee/baton/security)) var/obj/item/melee/baton/security/baton = module - baton.cell?.charge = baton.cell.maxcharge + if(baton.cell?.charge < baton.cell.maxcharge) + . = TRUE //if sec borgs ever make a mainstream return, we should probably do this differntly. + baton.cell?.charge = baton.cell.maxcharge else if(istype(module, /obj/item/gun/energy)) var/obj/item/gun/energy/gun = module if(!gun.chambered) + . = TRUE gun.recharge_newshot() //try to reload a new shot. - cyborg.toner = cyborg.tonermax + if(cyborg.toner < cyborg.tonermax) + . = TRUE + cyborg.toner = cyborg.tonermax /** * Refills consumables that require materials, rather than being given for free. @@ -349,6 +364,7 @@ if(!soap) return if(soap.uses < initial(soap.uses)) + . = TRUE soap.uses += ROUND_UP(initial(soap.uses) / 100) * coeff /obj/item/robot_model/engineering @@ -626,21 +642,29 @@ ..() var/obj/item/lightreplacer/light_replacer = locate(/obj/item/lightreplacer) in basic_modules if(light_replacer) - for(var/charge in 1 to coeff) - light_replacer.Charge(cyborg) + if(light_replacer.uses < light_replacer.max_uses) + . = TRUE + light_replacer.Charge(cyborg, coeff) var/obj/item/reagent_containers/spray/cyborg_drying/drying_agent = locate(/obj/item/reagent_containers/spray/cyborg_drying) in basic_modules if(drying_agent) - drying_agent.reagents.add_reagent(/datum/reagent/drying_agent, 5 * coeff) + var/datum/reagents/anti_water = drying_agent.reagents + if(anti_water.total_volume < anti_water.maximum_volume) + . = TRUE + drying_agent.reagents.add_reagent(/datum/reagent/drying_agent, 5 * coeff) var/obj/item/reagent_containers/spray/cyborg_lube/lube = locate(/obj/item/reagent_containers/spray/cyborg_lube) in emag_modules if(lube) - lube.reagents.add_reagent(/datum/reagent/lube, 2 * coeff) + var/datum/reagents/anti_friction = lube.reagents + if(anti_friction.total_volume < anti_friction.maximum_volume) + . = TRUE + lube.reagents.add_reagent(/datum/reagent/lube, 2 * coeff) var/obj/item/soap/nanotrasen/cyborg/soap = locate(/obj/item/soap/nanotrasen/cyborg) in basic_modules if(!soap) return if(soap.uses < initial(soap.uses)) + . = TRUE soap.uses += ROUND_UP(initial(soap.uses) / 100) * coeff /obj/item/robot_model/medical @@ -760,6 +784,7 @@ var/obj/item/gun/energy/e_gun/advtaser/cyborg/taser = locate(/obj/item/gun/energy/e_gun/advtaser/cyborg) in basic_modules if(taser) if(taser.cell.charge < taser.cell.maxcharge) + . = TRUE var/obj/item/ammo_casing/energy/shot = taser.ammo_type[taser.select] taser.cell.give(shot.e_cost * coeff) taser.update_appearance() @@ -811,7 +836,10 @@ ..() var/obj/item/reagent_containers/enzyme = locate(/obj/item/reagent_containers/condiment/enzyme) in basic_modules if(enzyme) - enzyme.reagents.add_reagent(/datum/reagent/consumable/enzyme, 2 * coeff) + var/datum/reagents/spicyketchup = enzyme.reagents + if(spicyketchup.total_volume < spicyketchup.maximum_volume) + . = TRUE + enzyme.reagents.add_reagent(/datum/reagent/consumable/enzyme, 2 * coeff) /obj/item/robot_model/syndicate name = "Syndicate Assault" diff --git a/code/modules/mob/living/silicon/silicon.dm b/code/modules/mob/living/silicon/silicon.dm index 5c47c4e5bb829..6d94c2c5be978 100644 --- a/code/modules/mob/living/silicon/silicon.dm +++ b/code/modules/mob/living/silicon/silicon.dm @@ -442,7 +442,7 @@ return // Silicons are always standing by default. /mob/living/silicon/get_butt_sprite() - return BUTT_SPRITE_QR_CODE + return icon('icons/mob/butts.dmi', BUTT_SPRITE_QR_CODE) /** * Records an IC event log entry in the cyborg's internal tablet. @@ -480,3 +480,11 @@ stack_trace("Silicon [src] ( [type] ) was somehow missing their integrated tablet. Please make a bug report.") create_modularInterface() modularInterface.imprint_id(name = newname) + +/mob/living/silicon/can_track(mob/living/user) + //if their camera is online, it's safe to assume they are in cameranets + //since it takes a while for camera vis to update, this lets us bypass that so AIs can always see their borgs, + //without making cameras constantly update every time a borg moves. + if(builtInCamera && builtInCamera.can_use()) + return TRUE + return ..() diff --git a/code/modules/mob/living/silicon/silicon_say.dm b/code/modules/mob/living/silicon/silicon_say.dm index b1b8b4bc88010..9310211aa0e6d 100644 --- a/code/modules/mob/living/silicon/silicon_say.dm +++ b/code/modules/mob/living/silicon/silicon_say.dm @@ -8,7 +8,7 @@ var/mob/living/silicon/player = src designation = trim_left(player.designation + " " + player.job) - if(HAS_TRAIT(mind, DISPLAYS_JOB_IN_BINARY)) + if(HAS_TRAIT(mind, TRAIT_DISPLAY_JOB_IN_BINARY)) designation = mind.assigned_role.title if(isAI(src)) @@ -70,6 +70,9 @@ ) /mob/living/silicon/binarycheck() + var/area/our_area = get_area(src) + if(our_area.area_flags & BINARY_JAMMING) + return FALSE return TRUE /mob/living/silicon/radio(message, list/message_mods = list(), list/spans, language) diff --git a/code/modules/mob/living/simple_animal/bot/SuperBeepsky.dm b/code/modules/mob/living/simple_animal/bot/SuperBeepsky.dm index 6d85b9c186793..f09361e9bdf48 100644 --- a/code/modules/mob/living/simple_animal/bot/SuperBeepsky.dm +++ b/code/modules/mob/living/simple_animal/bot/SuperBeepsky.dm @@ -71,7 +71,7 @@ switch(mode) if(BOT_IDLE) // idle update_appearance() - DSmove_manager.stop_looping(src) + GLOB.move_manager.stop_looping(src) look_for_perp() // see if any criminals are in range if(!mode && bot_mode_flags & BOT_MODE_AUTOPATROL) // still idle, and set to patrol mode = BOT_START_PATROL // switch to patrol mode @@ -80,7 +80,7 @@ playsound(src,'sound/effects/beepskyspinsabre.ogg',100,TRUE,-1) // general beepsky doesn't give up so easily, jedi scum if(frustration >= 20) - DSmove_manager.stop_looping(src) + GLOB.move_manager.stop_looping(src) back_to_idle() return if(target) // make sure target exists @@ -91,7 +91,7 @@ return else // not next to perp var/turf/olddist = get_dist(src, target) - DSmove_manager.move_to(src, target, 1, 4) + GLOB.move_manager.move_to(src, target, 1, 4) if((get_dist(src, target)) >= (olddist)) frustration++ else diff --git a/code/modules/mob/living/simple_animal/bot/bot.dm b/code/modules/mob/living/simple_animal/bot/bot.dm index ec204dbc82b93..48d83da80a9c1 100644 --- a/code/modules/mob/living/simple_animal/bot/bot.dm +++ b/code/modules/mob/living/simple_animal/bot/bot.dm @@ -204,6 +204,7 @@ pa_system = new(src, automated_announcements = automated_announcements) pa_system.Grant(src) + RegisterSignal(src, COMSIG_MOB_TRIED_ACCESS, PROC_REF(attempt_access)) /mob/living/simple_animal/bot/Destroy() GLOB.bots_list -= src @@ -554,8 +555,8 @@ item_to_drop = drop_item item_to_drop.forceMove(dropzone) - if(istype(item_to_drop, /obj/item/stock_parts/cell)) - var/obj/item/stock_parts/cell/dropped_cell = item_to_drop + if(istype(item_to_drop, /obj/item/stock_parts/power_store/cell)) + var/obj/item/stock_parts/power_store/cell/dropped_cell = item_to_drop dropped_cell.charge = 0 dropped_cell.update_appearance() @@ -951,13 +952,13 @@ Pass a positive integer as an argument to override a bot's default speed. calc_summon_path() tries = 0 -/mob/living/simple_animal/bot/Bump(atom/A) //Leave no door unopened! - . = ..() - if((istype(A, /obj/machinery/door/airlock) || istype(A, /obj/machinery/door/window)) && (!isnull(access_card))) - var/obj/machinery/door/D = A - if(D.check_access(access_card)) - D.open() - frustration = 0 +/mob/living/simple_animal/bot/proc/attempt_access(mob/bot, obj/door_attempt) + SIGNAL_HANDLER + + if(door_attempt.check_access(access_card)) + frustration = 0 + return ACCESS_ALLOWED + return ACCESS_DISALLOWED /mob/living/simple_animal/bot/ui_data(mob/user) var/list/data = list() @@ -1214,3 +1215,8 @@ Pass a positive integer as an argument to override a bot's default speed. /mob/living/simple_animal/bot/spawn_gibs(drop_bitflags = NONE) new /obj/effect/gibspawner/robot(drop_location(), src) + +/mob/living/simple_animal/bot/get_hit_area_message(input_area) + // we just get hit, there's no complexity for hitting an arm (if it exists) or anything. + // we also need to return an empty string as otherwise it would falsely say that we get hit in the chest or something strange like that (bots don't have "chests") + return "" diff --git a/code/modules/mob/living/simple_animal/bot/bot_announcement.dm b/code/modules/mob/living/simple_animal/bot/bot_announcement.dm index eade5a291c439..061e6375088af 100644 --- a/code/modules/mob/living/simple_animal/bot/bot_announcement.dm +++ b/code/modules/mob/living/simple_animal/bot/bot_announcement.dm @@ -6,10 +6,15 @@ overlay_icon_state = "bg_tech_blue_border" button_icon = 'icons/obj/machines/wallmounts.dmi' button_icon_state = "intercom" - cooldown_time = 10 SECONDS + cooldown_time = 5 SECONDS + shared_cooldown = MOB_SHARED_COOLDOWN_BOT_ANNOUNCMENT melee_cooldown_time = 0 SECONDS /// List of strings to sound effects corresponding to automated messages we can play var/list/automated_announcements + /// Maximum amount of buttons this can have + var/max_buttons = 10 + /// List of buttons that automatically correspond to an announcement and channel + var/list/buttons = list() /datum/action/cooldown/bot_announcement/New(Target, original, list/automated_announcements) src.automated_announcements = automated_announcements @@ -29,15 +34,118 @@ return FALSE return TRUE +/datum/action/cooldown/bot_announcement/ui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "BotAnnouncement", "Select announcement") + ui.set_autoupdate(TRUE) + ui.open() + +/datum/action/cooldown/bot_announcement/ui_state(mob/user) + return GLOB.conscious_state + +/datum/action/cooldown/bot_announcement/ui_status(mob/user, datum/ui_state/state) + . = ..() + if(user != owner) + return UI_CLOSE + +/datum/action/cooldown/bot_announcement/ui_data(mob/user) + var/list/data = list() + + var/mob/living/simple_animal/bot/bot_owner = owner + if(istype(bot_owner)) + var/list/channels = list() + for(var/channel in bot_owner.internal_radio.channels) + channels += channel + data["channels"] = channels + else + data["channels"] = list() + var/list/lines = list() + for(var/line in automated_announcements) + lines += line + data["lines"] = lines + var/list/button_data = list() + for(var/datum/action/cooldown/bot_announcement_shortcut/button as anything in buttons) + button_data += list(list( + "name" = button.name, + "channel" = button.channel + )) + data["button_data"] = button_data + data["cooldown_left"] = next_use_time - world.time + return data + +/datum/action/cooldown/bot_announcement/Destroy() + QDEL_LIST(buttons) + return ..() + +/datum/action/cooldown/bot_announcement/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) + . = ..() + if(.) + return + + switch(action) + if("announce") + var/picked = params["picked"] + var/channel = params["channel"] + if(!(picked in automated_announcements)) + return + announce(picked, channel) + StartCooldown() + return TRUE + if("set_button") + if(length(buttons) >= max_buttons) + return + var/picked = params["picked"] + var/channel = params["channel"] + if(!(picked in automated_announcements)) + return + create_shortcut(picked, channel) + return TRUE + if("remove_button") + var/index = text2num(params["index"]) + if(!index) + return + if(index < 1 || index > length(buttons)) + return + var/datum/action/button = buttons[index] + qdel(button) + return TRUE + /datum/action/cooldown/bot_announcement/Activate(trigger_flags, atom/target) - var/picked if (length(automated_announcements) > 1) - picked = tgui_input_list(owner, message = "Choose announcement to make.", title = "Select announcement", items = automated_announcements) - else - picked = pick(automated_announcements) - if (isnull(picked)) + ui_interact(owner) return - announce(picked) + else if(length(automated_announcements) == 1) + announce(automated_announcements[1]) + return ..() + +/datum/action/cooldown/bot_announcement/proc/create_shortcut(line, channel) + var/datum/action/cooldown/bot_announcement_shortcut/shortcut = new(src) + + shortcut.prefix = copytext(line, 1, 4) + var/color = GLOB.radiocolors["[channel]"] + if(color) + shortcut.prefix_color = color + shortcut.name = line + shortcut.message = line + shortcut.channel = channel + shortcut.linked = src + shortcut.Grant(owner) + RegisterSignal(shortcut, COMSIG_QDELETING, PROC_REF(on_shortcut_deleted)) + buttons += shortcut + +/datum/action/cooldown/bot_announcement/proc/on_shortcut_deleted(datum/shortcut) + SIGNAL_HANDLER + buttons -= shortcut + +/datum/action/cooldown/bot_announcement/Grant(mob/granted_to) + . = ..() + for(var/datum/action/action as anything in buttons) + action.Grant(granted_to) + +/datum/action/cooldown/bot_announcement/Remove(mob/removed_from) + for(var/datum/action/action as anything in buttons) + action.Remove(removed_from) return ..() /// Speak the provided line on the provided radio channel @@ -46,10 +154,9 @@ if (!(bot_owner.bot_mode_flags & BOT_MODE_ON)) return + bot_owner.say(line) if (channel && bot_owner.internal_radio.channels[channel]) bot_owner.internal_radio.talk_into(bot_owner, message = line, channel = channel) - else - bot_owner.say(line) if (length(automated_announcements) && !isnull(automated_announcements[line])) playsound(bot_owner, automated_announcements[line], vol = 50, vary = FALSE) @@ -62,3 +169,49 @@ if(!(bot_owner.medical_mode_flags & MEDBOT_SPEAK_MODE)) return return ..() + +/datum/action/cooldown/bot_announcement_shortcut + desc = "Play a prerecorded message for the benefit of those around you." + shared_cooldown = MOB_SHARED_COOLDOWN_BOT_ANNOUNCMENT + melee_cooldown_time = 0 SECONDS + background_icon_state = "bg_tech_blue" + overlay_icon_state = "bg_tech_blue_border" + button_icon = 'icons/obj/machines/wallmounts.dmi' + button_icon_state = "intercom" + /// The prefix that appears on this button + var/prefix + /// The color of the prefix that appears on the button + var/prefix_color = "#ffffff" + /// The prefix icon that's rendered on the button + var/mutable_appearance/prefix_icon + /// The message to send when this button is clicked + var/message + /// The channel to send this to when clicked + var/channel + + /// The linked bot_announcement ability + var/datum/action/cooldown/bot_announcement/linked + +/datum/action/cooldown/bot_announcement_shortcut/Destroy() + linked = null + return ..() + +/datum/action/cooldown/bot_announcement_shortcut/apply_button_overlay(atom/movable/screen/movable/action_button/current_button, force) + . = ..() + if(prefix_icon) + current_button.cut_overlay(prefix_icon) + if(!prefix) + return + if(!prefix_icon) + prefix_icon = mutable_appearance() + prefix_icon.maptext = MAPTEXT_SPESSFONT("[prefix]") + prefix_icon.maptext_x = -4 + prefix_icon.maptext_y = 8 + current_button.add_overlay(prefix_icon) + +/datum/action/cooldown/bot_announcement_shortcut/Activate(atom/target) + if(!message || !linked) + return + cooldown_time = linked.cooldown_time + linked.announce(message, channel) + return ..() diff --git a/code/modules/mob/living/simple_animal/bot/construction.dm b/code/modules/mob/living/simple_animal/bot/construction.dm index 1bef64de8a66b..80e2b8c0c8343 100644 --- a/code/modules/mob/living/simple_animal/bot/construction.dm +++ b/code/modules/mob/living/simple_animal/bot/construction.dm @@ -12,7 +12,7 @@ /obj/item/bot_assembly/attackby(obj/item/I, mob/user, params) ..() - if(istype(I, /obj/item/pen)) + if(IS_WRITING_UTENSIL(I)) rename_bot() return @@ -323,11 +323,9 @@ if(!can_finish_build(attacking_item, user)) return to_chat(user, span_notice("You add the [attacking_item] to [src]! Honk!")) - var/mob/living/simple_animal/bot/secbot/honkbot/new_honkbot = new(drop_location()) + var/mob/living/basic/bot/honkbot/new_honkbot = new(drop_location()) new_honkbot.name = created_name - new_honkbot.limiting_spam = TRUE // only long enough to hear the first ping. playsound(new_honkbot, 'sound/machines/ping.ogg', 50, TRUE, -1) - new_honkbot.baton_type = attacking_item.type qdel(attacking_item) qdel(src) @@ -496,8 +494,8 @@ if(!can_finish_build(I, user)) return to_chat(user, span_notice("You add the [I] to [src]! Beep Boop!")) - var/mob/living/simple_animal/bot/firebot/F = new(drop_location()) - F.name = created_name + var/mob/living/basic/bot/firebot/firebot = new(drop_location()) + firebot.name = created_name qdel(I) qdel(src) diff --git a/code/modules/mob/living/simple_animal/bot/firebot.dm b/code/modules/mob/living/simple_animal/bot/firebot.dm deleted file mode 100644 index f4487bfc9d9d7..0000000000000 --- a/code/modules/mob/living/simple_animal/bot/firebot.dm +++ /dev/null @@ -1,320 +0,0 @@ -//Firebot - -#define SPEECH_INTERVAL 300 // Time between idle speeches -#define DETECTED_VOICE_INTERVAL 300 // Time between fire detected callouts -#define FOAM_INTERVAL 50 // Time between deployment of fire fighting foam - -/mob/living/simple_animal/bot/firebot - name = "\improper Firebot" - desc = "A little fire extinguishing bot. He looks rather anxious." - icon = 'icons/mob/silicon/aibots.dmi' - icon_state = "firebot1" - light_color = "#8cffc9" - light_power = 0.8 - density = FALSE - anchored = FALSE - health = 25 - maxHealth = 25 - - req_one_access = list(ACCESS_ROBOTICS, ACCESS_CONSTRUCTION) - radio_key = /obj/item/encryptionkey/headset_eng - radio_channel = RADIO_CHANNEL_ENGINEERING - bot_type = FIRE_BOT - hackables = "fire safety protocols" - path_image_color = "#FFA500" - possessed_message = "You are a firebot! Protect the station from fires to the best of your ability!" - - automated_announcements = list( - FIREBOT_VOICED_FIRE_DETECTED = 'sound/voice/firebot/detected.ogg', - FIREBOT_VOICED_STOP_DROP = 'sound/voice/firebot/stopdropnroll.ogg', - FIREBOT_VOICED_EXTINGUISHING = 'sound/voice/firebot/extinguishing.ogg', - FIREBOT_VOICED_NO_FIRES = 'sound/voice/firebot/nofires.ogg', - FIREBOT_VOICED_ONLY_YOU = 'sound/voice/firebot/onlyyou.ogg', - FIREBOT_VOICED_TEMPERATURE_NOMINAL = 'sound/voice/firebot/tempnominal.ogg', - FIREBOT_VOICED_KEEP_COOL = 'sound/voice/firebot/keepitcool.ogg', - ) - - var/atom/target_fire - var/atom/old_target_fire - - var/obj/item/extinguisher/internal_ext - - var/last_found = 0 - - var/speech_cooldown = 0 - var/detected_cooldown = 0 - COOLDOWN_DECLARE(foam_cooldown) - - var/extinguish_people = TRUE - var/extinguish_fires = TRUE - var/stationary_mode = FALSE - -/mob/living/simple_animal/bot/firebot/Initialize(mapload) - . = ..() - ADD_TRAIT(src, TRAIT_SPACEWALK, INNATE_TRAIT) - update_appearance(UPDATE_ICON) - - // Doing this hurts my soul, but simplebot access reworks are for another day. - var/datum/id_trim/job/engi_trim = SSid_access.trim_singletons_by_path[/datum/id_trim/job/station_engineer] - access_card.add_access(engi_trim.access + engi_trim.wildcard_access) - prev_access = access_card.access.Copy() - - create_extinguisher() - AddElement(/datum/element/atmos_sensitive, mapload) - -/mob/living/simple_animal/bot/firebot/Destroy() - QDEL_NULL(internal_ext) - return ..() - -/mob/living/simple_animal/bot/firebot/bot_reset() - create_extinguisher() - -/mob/living/simple_animal/bot/firebot/proc/create_extinguisher() - internal_ext = new /obj/item/extinguisher(src) - internal_ext.safety = FALSE - internal_ext.precision = TRUE - internal_ext.max_water = INFINITY - internal_ext.refill() - -/mob/living/simple_animal/bot/firebot/UnarmedAttack(atom/A, proximity_flag, list/modifiers) - if(!(bot_mode_flags & BOT_MODE_ON)) - return - if(!can_unarmed_attack()) - return - if(internal_ext) - internal_ext.afterattack(A, src) - else - return ..() - -/mob/living/simple_animal/bot/firebot/RangedAttack(atom/A, proximity_flag, list/modifiers) - if(!(bot_mode_flags & BOT_MODE_ON)) - return - if(internal_ext) - internal_ext.afterattack(A, src) - else - return ..() - -/mob/living/simple_animal/bot/firebot/turn_on() - . = ..() - update_appearance() - -/mob/living/simple_animal/bot/firebot/turn_off() - ..() - update_appearance() - -/mob/living/simple_animal/bot/firebot/bot_reset() - ..() - target_fire = null - old_target_fire = null - set_anchored(FALSE) - update_appearance() - -/mob/living/simple_animal/bot/firebot/proc/soft_reset() - path = list() - target_fire = null - mode = BOT_IDLE - last_found = world.time - update_appearance() - -/mob/living/simple_animal/bot/firebot/emag_act(mob/user, obj/item/card/emag/emag_card) - . = ..() - if(!(bot_cover_flags & BOT_COVER_EMAGGED)) - return - - to_chat(user, span_warning("You enable the very ironically named \"fighting with fire\" mode, and disable the targeting safeties.")) // heheehe. funny - - audible_message(span_danger("[src] buzzes oddly!")) - playsound(src, SFX_SPARKS, 75, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) - if(user) - old_target_fire = user - extinguish_fires = FALSE - extinguish_people = TRUE - - internal_ext = new /obj/item/extinguisher(src) - internal_ext.chem = /datum/reagent/clf3 //Refill the internal extinguisher with liquid fire - internal_ext.power = 3 - internal_ext.safety = FALSE - internal_ext.precision = FALSE - internal_ext.max_water = INFINITY - internal_ext.refill() - return TRUE - -// Variables sent to TGUI -/mob/living/simple_animal/bot/firebot/ui_data(mob/user) - var/list/data = ..() - if(!(bot_cover_flags & BOT_COVER_LOCKED) || HAS_SILICON_ACCESS(user)) - data["custom_controls"]["extinguish_fires"] = extinguish_fires - data["custom_controls"]["extinguish_people"] = extinguish_people - data["custom_controls"]["stationary_mode"] = stationary_mode - return data - -// Actions received from TGUI -/mob/living/simple_animal/bot/firebot/ui_act(action, params) - . = ..() - if(. || (bot_cover_flags & BOT_COVER_LOCKED && !HAS_SILICON_ACCESS(usr))) - return - - switch(action) - if("extinguish_fires") - extinguish_fires = !extinguish_fires - if("extinguish_people") - extinguish_people = !extinguish_people - if("stationary_mode") - stationary_mode = !stationary_mode - update_appearance() - -/mob/living/simple_animal/bot/firebot/proc/is_burning(atom/target) - if(ismob(target)) - var/mob/living/M = target - if(M.on_fire || (bot_cover_flags & BOT_COVER_EMAGGED && !M.on_fire)) - return TRUE - - else if(isturf(target)) - var/turf/open/T = target - if(T.active_hotspot) - return TRUE - - return FALSE - -/mob/living/simple_animal/bot/firebot/handle_automated_action() - if(!..()) - return - - if(IsStun() || IsParalyzed()) - old_target_fire = target_fire - target_fire = null - mode = BOT_IDLE - return - - if(prob(1) && target_fire == null) - var/static/list/idle_line = list( - FIREBOT_VOICED_NO_FIRES, - FIREBOT_VOICED_ONLY_YOU, - FIREBOT_VOICED_TEMPERATURE_NOMINAL, - FIREBOT_VOICED_KEEP_COOL, - ) - speak(pick(idle_line)) - - // Couldn't reach the target, reset and try again ignoring the old one - if(frustration > 8) - old_target_fire = target_fire - soft_reset() - - // We extinguished our target or it was deleted - if(QDELETED(target_fire) || !is_burning(target_fire) || isdead(target_fire)) - target_fire = null - var/scan_range = (stationary_mode ? 1 : DEFAULT_SCAN_RANGE) - - var/list/things_to_extinguish = list() - if(extinguish_people) - things_to_extinguish += list(/mob/living) - - if(target_fire == null && extinguish_fires) - things_to_extinguish += list(/turf/open) - - target_fire = scan(things_to_extinguish, old_target_fire, scan_range) // Scan for burning turfs second - old_target_fire = target_fire - - // Target reached ENGAGE WATER CANNON - if(target_fire && (get_dist(src, target_fire) <= (bot_cover_flags & BOT_COVER_EMAGGED ? 1 : 2))) // Make the bot spray water from afar when not emagged - if((speech_cooldown + SPEECH_INTERVAL) < world.time) - if(ishuman(target_fire)) - speak(FIREBOT_VOICED_STOP_DROP) - else - speak(FIREBOT_VOICED_EXTINGUISHING) - speech_cooldown = world.time - - flick("firebot1_use", src) - spray_water(target_fire, src) - - soft_reset() - - // Target ran away - else if(target_fire && path.len && (get_dist(target_fire,path[path.len]) > 2)) - path = list() - mode = BOT_IDLE - last_found = world.time - - else if(target_fire && stationary_mode) - soft_reset() - return - - if(target_fire && (get_dist(src, target_fire) > 2)) - - path = get_path_to(src, target_fire, max_distance=30, mintargetdist=1, access=access_card.GetAccess()) - mode = BOT_MOVING - if(!path.len) - soft_reset() - - if(path.len > 0 && target_fire) - if(!bot_move(path[path.len])) - old_target_fire = target_fire - soft_reset() - return - - // We got a target but it's too far away from us - if(path.len > 8 && target_fire) - frustration++ - - if(bot_mode_flags & BOT_MODE_AUTOPATROL && !target_fire) - switch(mode) - if(BOT_IDLE, BOT_START_PATROL) - start_patrol() - if(BOT_PATROL) - bot_patrol() - - -//Look for burning people or turfs around the bot -/mob/living/simple_animal/bot/firebot/process_scan(atom/scan_target) - if(!is_burning(scan_target)) - return null - - if((detected_cooldown + DETECTED_VOICE_INTERVAL) < world.time) - speak(FIREBOT_VOICED_FIRE_DETECTED) - detected_cooldown = world.time - return scan_target - -/mob/living/simple_animal/bot/firebot/should_atmos_process(datum/gas_mixture/air, exposed_temperature) - return (exposed_temperature > T0C + 200 || exposed_temperature < BODYTEMP_COLD_DAMAGE_LIMIT) - -/mob/living/simple_animal/bot/firebot/atmos_expose(datum/gas_mixture/air, exposed_temperature) - if(COOLDOWN_FINISHED(src, foam_cooldown)) - var/datum/effect_system/fluid_spread/foam/firefighting/foam = new - foam.set_up(3, holder = src, location = loc) - foam.start() - COOLDOWN_START(src, foam_cooldown, FOAM_INTERVAL) - -/mob/living/simple_animal/bot/firebot/proc/spray_water(atom/target, mob/user) - if(stationary_mode) - flick("firebots_use", user) - else - flick("firebot1_use", user) - internal_ext.afterattack(target, user, null) - -/mob/living/simple_animal/bot/firebot/update_icon_state() - . = ..() - if(!(bot_mode_flags & BOT_MODE_ON)) - icon_state = "firebot0" - return - if(IsStun() || IsParalyzed() || stationary_mode) //Bot has yellow light to indicate stationary mode. - icon_state = "firebots1" - return - icon_state = "firebot1" - - -/mob/living/simple_animal/bot/firebot/explode() - var/atom/Tsec = drop_location() - - new /obj/item/assembly/prox_sensor(Tsec) - new /obj/item/clothing/head/utility/hardhat/red(Tsec) - - var/turf/T = get_turf(Tsec) - - if(isopenturf(T)) - var/turf/open/theturf = T - theturf.MakeSlippery(TURF_WET_WATER, min_wet_time = 10 SECONDS, wet_time_to_add = 5 SECONDS) - return ..() - -#undef SPEECH_INTERVAL -#undef DETECTED_VOICE_INTERVAL -#undef FOAM_INTERVAL diff --git a/code/modules/mob/living/simple_animal/bot/honkbot.dm b/code/modules/mob/living/simple_animal/bot/honkbot.dm deleted file mode 100644 index 711995833172f..0000000000000 --- a/code/modules/mob/living/simple_animal/bot/honkbot.dm +++ /dev/null @@ -1,156 +0,0 @@ -/mob/living/simple_animal/bot/secbot/honkbot - name = "\improper Honkbot" - desc = "A little robot. It looks happy with its bike horn." - icon_state = "honkbot" - light_color = "#e084f7" - light_power = 1 - damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 0, STAMINA = 0, OXY = 0) - combat_mode = FALSE - - req_one_access = list(ACCESS_ROBOTICS, ACCESS_THEATRE) - radio_key = /obj/item/encryptionkey/headset_service //doesn't have security key - radio_channel = RADIO_CHANNEL_SERVICE //Doesn't even use the radio anyway. - bot_type = HONK_BOT - bot_mode_flags = BOT_MODE_ON | BOT_MODE_REMOTE_ENABLED | BOT_MODE_CAN_BE_SAPIENT | BOT_MODE_AUTOPATROL | BOT_MODE_ROUNDSTART_POSSESSION - hackables = "sound control systems" - path_image_color = "#FF69B4" - data_hud_type = DATA_HUD_SECURITY_BASIC //show jobs - - baton_type = /obj/item/bikehorn - cuff_type = /obj/item/restraints/handcuffs/cable/zipties/fake/used - security_mode_flags = SECBOT_CHECK_WEAPONS | SECBOT_HANDCUFF_TARGET - possessed_message = "You are a honkbot! Make sure the crew are having a great time!" - - automated_announcements = list( - HONKBOT_VOICED_HONK_HAPPY = 'sound/items/bikehorn.ogg', - HONKBOT_VOICED_HONK_SAD = 'sound/misc/sadtrombone.ogg', - ) - - ///Keeping track of how much we honk to prevent spamming it - var/limiting_spam = FALSE - ///Sound played when HONKing someone - var/honksound = 'sound/items/bikehorn.ogg' - ///Cooldown between honks - var/cooldowntime = 30 - ///Cooldown between ear-breaking horn sounds - var/cooldowntimehorn = 10 - -/mob/living/simple_animal/bot/secbot/honkbot/Initialize(mapload) - . = ..() - - // Doing this hurts my soul, but simplebot access reworks are for another day. - var/datum/id_trim/job/clown_trim = SSid_access.trim_singletons_by_path[/datum/id_trim/job/clown] - //We're doing set_access instead to overwrite the sec access they get. - access_card.set_access(clown_trim.access + clown_trim.wildcard_access) - prev_access = access_card.access.Copy() - -/mob/living/simple_animal/bot/secbot/honkbot/on_entered(datum/source, atom/movable/AM) - if(prob(70)) //only a chance to slip - return - return ..() - -/mob/living/simple_animal/bot/secbot/honkbot/knockOver(mob/living/carbon/tripped_target) - . = ..() - INVOKE_ASYNC(src, TYPE_PROC_REF(/mob/living/simple_animal/bot, speak), HONKBOT_VOICED_HONK_SAD) - icon_state = "[initial(icon_state)]-c" - addtimer(CALLBACK(src, TYPE_PROC_REF(/atom, update_appearance)), 0.2 SECONDS) - -/mob/living/simple_animal/bot/secbot/honkbot/threat_react(threatlevel) - speak(HONKBOT_VOICED_HONK_HAPPY) - -/mob/living/simple_animal/bot/secbot/honkbot/bot_reset() - ..() - limiting_spam = FALSE - -/mob/living/simple_animal/bot/secbot/honkbot/stun_attack(mob/living/carbon/current_target, harm = FALSE) // airhorn stun - if(limiting_spam) - return - - var/judgement_criteria = judgement_criteria() - playsound(src, 'sound/items/AirHorn.ogg', 100, TRUE, -1) //HEEEEEEEEEEEENK!! - icon_state = "[initial(icon_state)]-c" - addtimer(CALLBACK(src, TYPE_PROC_REF(/atom, update_appearance)), 0.2 SECONDS) - if(!ishuman(current_target)) - current_target.Paralyze(8 SECONDS) - current_target.set_stutter(40 SECONDS) - addtimer(CALLBACK(src, PROC_REF(limiting_spam_false)), cooldowntime) - return - - current_target.set_stutter(40 SECONDS) - var/obj/item/organ/internal/ears/target_ears = current_target.get_organ_slot(ORGAN_SLOT_EARS) - if(target_ears && !HAS_TRAIT(current_target, TRAIT_DEAF)) - target_ears.adjustEarDamage(0, 5) //far less damage than the H.O.N.K. - current_target.set_jitter_if_lower(100 SECONDS) - current_target.Paralyze(6 SECONDS) - if(client) //prevent spam from players - limiting_spam = TRUE - - if(bot_cover_flags & BOT_COVER_EMAGGED) // you really don't want to hit an emagged honkbot - threatlevel = 6 // will never let you go - else - //HONK once, then leave - if(ishuman(current_target)) - var/mob/living/carbon/human/human_target = current_target - threatlevel = human_target.assess_threat(judgement_criteria) - threatlevel -= 6 - addtimer(CALLBACK(src, PROC_REF(limiting_spam_false)), cooldowntime) - - log_combat(src, current_target, "honked") - - current_target.visible_message( - span_danger("[src] honks [current_target]!"), \ - span_userdanger("[src] honks you!"), \ - ) - - target_lastloc = target.loc - mode = BOT_PREP_ARREST - -/mob/living/simple_animal/bot/secbot/honkbot/retaliate(mob/living/carbon/human/attacking_human) - . = ..() - playsound(src, 'sound/machines/buzz-sigh.ogg', 50, TRUE, -1) - icon_state = "[initial(icon_state)]-c" - addtimer(CALLBACK(src, TYPE_PROC_REF(/atom, update_appearance)), 0.2 SECONDS) - -/mob/living/simple_animal/bot/secbot/honkbot/UnarmedAttack(atom/attack_target, proximity_flag, list/modifiers) - . = ..() - if(!.) - return FALSE - if(!limiting_spam) - bike_horn() - -/mob/living/simple_animal/bot/secbot/honkbot/handle_automated_action() - . = ..() - if(!.) - return - if(!limiting_spam && prob(30)) - bike_horn() - -/mob/living/simple_animal/bot/secbot/honkbot/start_handcuffing(mob/living/carbon/current_target) - . = ..() - if(bot_cover_flags & BOT_COVER_EMAGGED) //emagged honkbots will spam short and memorable sounds. - if(!limiting_spam) - playsound(src, SFX_HONKBOT_E, 50, FALSE) - icon_state = "honkbot-e" - else if(!limiting_spam) - playsound(src, honksound, 50, TRUE, -1) - icon_state = "[initial(icon_state)]-c" - - limiting_spam = TRUE // prevent spam - addtimer(CALLBACK(src, PROC_REF(limiting_spam_false)), cooldowntimehorn) - addtimer(CALLBACK(src, TYPE_PROC_REF(/atom, update_appearance)), 3 SECONDS, TIMER_OVERRIDE|TIMER_UNIQUE) - -//Honkbots don't care for NAP violations -/mob/living/simple_animal/bot/secbot/honkbot/check_nap_violations() - return TRUE - -/mob/living/simple_animal/bot/secbot/honkbot/proc/limiting_spam_false() //used for addtimer - limiting_spam = FALSE - -/mob/living/simple_animal/bot/secbot/honkbot/proc/bike_horn() // horn attack - if(limiting_spam) - return - playsound(loc, honksound, 50, TRUE, -1) - limiting_spam = TRUE // prevent spam - icon_state = "[initial(icon_state)]-c" - addtimer(CALLBACK(src, TYPE_PROC_REF(/atom, update_appearance)), 0.2 SECONDS) - addtimer(CALLBACK(src, PROC_REF(limiting_spam_false)), cooldowntimehorn) diff --git a/code/modules/mob/living/simple_animal/bot/mulebot.dm b/code/modules/mob/living/simple_animal/bot/mulebot.dm index 71292405faa7d..39db78fdffb1d 100644 --- a/code/modules/mob/living/simple_animal/bot/mulebot.dm +++ b/code/modules/mob/living/simple_animal/bot/mulebot.dm @@ -27,7 +27,6 @@ mob_size = MOB_SIZE_LARGE buckle_prevents_pull = TRUE // No pulling loaded shit bot_mode_flags = ~BOT_MODE_ROUNDSTART_POSSESSION - req_one_access = list(ACCESS_ROBOTICS, ACCESS_CARGO) radio_key = /obj/item/encryptionkey/headset_cargo radio_channel = RADIO_CHANNEL_SUPPLY @@ -53,7 +52,7 @@ var/auto_pickup = TRUE /// true if auto-pickup at beacon var/report_delivery = TRUE /// true if bot will announce an arrival to a location. - var/obj/item/stock_parts/cell/cell /// Internal Powercell + var/obj/item/stock_parts/power_store/cell /// Internal Powercell var/cell_move_power_usage = 1///How much power we use when we move. var/num_steps = 0 ///The amount of steps we should take until we rest for a time. @@ -79,7 +78,7 @@ access_card.add_access(cargo_trim.access + cargo_trim.wildcard_access) prev_access = access_card.access.Copy() - cell = new /obj/item/stock_parts/cell/upgraded(src, 2000) + cell = new /obj/item/stock_parts/power_store/cell/upgraded(src, 2000) AddElement(/datum/element/ridable, /datum/component/riding/creature/mulebot) diag_hud_set_mulebotcell() @@ -182,7 +181,7 @@ return ITEM_INTERACT_SUCCESS /mob/living/simple_animal/bot/mulebot/attackby(obj/item/I, mob/living/user, params) - if(istype(I, /obj/item/stock_parts/cell) && bot_cover_flags & BOT_COVER_MAINTS_OPEN) + if(istype(I, /obj/item/stock_parts/power_store/cell) && bot_cover_flags & BOT_COVER_MAINTS_OPEN) if(cell) to_chat(user, span_warning("[src] already has a power cell!")) return TRUE @@ -378,13 +377,8 @@ // mousedrop a crate to load the bot // can load anything if hacked -/mob/living/simple_animal/bot/mulebot/MouseDrop_T(atom/movable/AM, mob/user) - var/mob/living/L = user - - if (!istype(L)) - return - - if(user.incapacitated() || (istype(L) && L.body_position == LYING_DOWN)) +/mob/living/simple_animal/bot/mulebot/mouse_drop_receive(atom/movable/AM, mob/user, params) + if(!isliving(user)) return if(!istype(AM) || isdead(AM) || iscameramob(AM) || istype(AM, /obj/effect/dummy/phased_mob)) @@ -392,7 +386,6 @@ load(AM) - // called to load a crate /mob/living/simple_animal/bot/mulebot/proc/load(atom/movable/AM) if(load || AM.anchored) @@ -493,7 +486,8 @@ . = ..() if(has_gravity()) for(var/mob/living/carbon/human/future_pancake in loc) - run_over(future_pancake) + if(future_pancake.body_position == LYING_DOWN) + run_over(future_pancake) diag_hud_set_mulebotcell() @@ -644,7 +638,7 @@ if(load) // if loaded, unload at target if(report_delivery) - speak("Destination [destination] reached. Unloading [load].",radio_channel) + speak("Destination [RUNECHAT_BOLD("[destination]")] reached. Unloading [load].",radio_channel) unload(loaddir) else // not loaded @@ -660,7 +654,7 @@ if(AM?.Adjacent(src)) load(AM) if(report_delivery) - speak("Now loading [load] at [get_area_name(src)].", radio_channel) + speak("Now loading [load] at [RUNECHAT_BOLD("[get_area_name(src)]")].", radio_channel) // whatever happened, check to see if we return home if(auto_return && home_destination && destination != home_destination) @@ -812,8 +806,7 @@ icon_state = "paranormalmulebot0" base_icon = "paranormalmulebot" - -/mob/living/simple_animal/bot/mulebot/paranormal/MouseDrop_T(atom/movable/AM, mob/user) +/mob/living/simple_animal/bot/mulebot/paranormal/mouse_drop_receive(atom/movable/AM, mob/user, params) var/mob/living/L = user if(user.incapacitated() || (istype(L) && L.body_position == LYING_DOWN)) diff --git a/code/modules/mob/living/simple_animal/bot/secbot.dm b/code/modules/mob/living/simple_animal/bot/secbot.dm index 49523c9fdb802..7448f6d34bc79 100644 --- a/code/modules/mob/living/simple_animal/bot/secbot.dm +++ b/code/modules/mob/living/simple_animal/bot/secbot.dm @@ -121,7 +121,7 @@ /mob/living/simple_animal/bot/secbot/beepsky/explode() var/atom/Tsec = drop_location() - new /obj/item/stock_parts/cell/potato(Tsec) + new /obj/item/stock_parts/power_store/cell/potato(Tsec) var/obj/item/reagent_containers/cup/glass/drinkingglass/shotglass/drinking_oil = new(Tsec) drinking_oil.reagents.add_reagent(/datum/reagent/consumable/ethanol/whiskey, 15) return ..() @@ -164,7 +164,7 @@ target = null oldtarget_name = null set_anchored(FALSE) - DSmove_manager.stop_looping(src) + GLOB.move_manager.stop_looping(src) last_found = world.time /mob/living/simple_animal/bot/secbot/proc/on_saboteur(datum/source, disrupt_duration) @@ -262,7 +262,7 @@ if(HAS_TRAIT(user, TRAIT_PACIFISM)) user.visible_message(span_notice("[user] taunts [src], daring [p_them()] to give chase!"), \ span_notice("You taunt [src], daring [p_them()] to chase you!"), span_hear("You hear someone shout a daring taunt!"), DEFAULT_MESSAGE_RANGE, user) - speak("Taunted by pacifist scumbag [user] in [get_area(src)].", radio_channel) + speak("Taunted by pacifist scumbag [RUNECHAT_BOLD("[user]")] in [get_area(src)].", radio_channel) // Interrupt the attack chain. We've already handled this scenario for pacifists. return @@ -374,7 +374,7 @@ log_combat(src, current_target, "stunned") if(security_mode_flags & SECBOT_DECLARE_ARRESTS) var/area/location = get_area(src) - speak("[security_mode_flags & SECBOT_HANDCUFF_TARGET ? "Arresting" : "Detaining"] level [threat] scumbag [current_target] in [location].", radio_channel) + speak("[security_mode_flags & SECBOT_HANDCUFF_TARGET ? "Arresting" : "Detaining"] level [threat] scumbag [RUNECHAT_BOLD("[current_target]")] in [location].", radio_channel) current_target.visible_message(span_danger("[src] stuns [current_target]!"),\ span_userdanger("[src] stuns you!")) @@ -389,7 +389,7 @@ switch(mode) if(BOT_IDLE) // idle - DSmove_manager.stop_looping(src) + GLOB.move_manager.stop_looping(src) look_for_perp() // see if any criminals are in range if((mode == BOT_IDLE) && bot_mode_flags & BOT_MODE_AUTOPATROL) // didn't start hunting during look_for_perp, and set to patrol mode = BOT_START_PATROL // switch to patrol mode @@ -397,7 +397,7 @@ if(BOT_HUNT) // hunting for perp // if can't reach perp for long enough, go idle if(frustration >= 8) - DSmove_manager.stop_looping(src) + GLOB.move_manager.stop_looping(src) back_to_idle() return @@ -415,7 +415,7 @@ // not next to perp var/turf/olddist = get_dist(src, target) - DSmove_manager.move_to(src, target, 1, 4) + GLOB.move_manager.move_to(src, target, 1, 4) if((get_dist(src, target)) >= (olddist)) frustration++ else diff --git a/code/modules/mob/living/simple_animal/bot/vibebot.dm b/code/modules/mob/living/simple_animal/bot/vibebot.dm deleted file mode 100644 index 582b1b5371da5..0000000000000 --- a/code/modules/mob/living/simple_animal/bot/vibebot.dm +++ /dev/null @@ -1,97 +0,0 @@ -/mob/living/simple_animal/bot/vibebot - name = "\improper Vibebot" - desc = "A little robot. It's just vibing, doing its thing." - icon = 'icons/mob/silicon/aibots.dmi' - icon_state = "vibebot1" - base_icon_state = "vibebot" - density = FALSE - anchored = FALSE - health = 25 - maxHealth = 25 - pass_flags = PASSMOB | PASSFLAPS - light_system = OVERLAY_LIGHT - light_range = 6 - light_power = 2 - - hackables = "vibing scanners" - radio_key = /obj/item/encryptionkey/headset_service - radio_channel = RADIO_CHANNEL_SERVICE - bot_type = VIBE_BOT - data_hud_type = DATA_HUD_DIAGNOSTIC_BASIC - path_image_color = "#2cac12" - possessed_message = "You are a vibebot! Maintain the station's vibes to the best of your ability!" - - ///The vibe ability given to vibebots, so sentient ones can still change their color. - var/datum/action/innate/vibe/vibe_ability - -/mob/living/simple_animal/bot/vibebot/Initialize(mapload) - . = ..() - vibe_ability = new(src) - vibe_ability.Grant(src) - update_appearance(UPDATE_ICON) - -/mob/living/simple_animal/bot/vibebot/Destroy() - QDEL_NULL(vibe_ability) - return ..() - -/mob/living/simple_animal/bot/vibebot/handle_automated_action() - . = ..() - if(!.) - return - - if(bot_mode_flags & BOT_MODE_ON) - vibe_ability.Trigger() - - if(!(bot_mode_flags & BOT_MODE_AUTOPATROL)) - return - - switch(mode) - if(BOT_IDLE, BOT_START_PATROL) - start_patrol() - if(BOT_PATROL) - bot_patrol() - -/mob/living/simple_animal/bot/vibebot/turn_off() - vibe_ability.remove_colors() - return ..() - -/** - * Vibebot's vibe ability - * - * Given to vibebots so sentient ones can change/reset thier colors at will. - */ -/datum/action/innate/vibe - name = "Vibe" - desc = "LMB: Change vibe color. RMB: Reset vibe color." - button_icon = 'icons/mob/actions/actions_minor_antag.dmi' - button_icon_state = "funk" - -/datum/action/innate/vibe/IsAvailable(feedback = FALSE) - . = ..() - if(!.) - return FALSE - if(isbot(owner)) - var/mob/living/simple_animal/bot/bot_mob = owner - if(!(bot_mob.bot_mode_flags & BOT_MODE_ON)) - return FALSE - return TRUE - -/datum/action/innate/vibe/Trigger(trigger_flags) - . = ..() - if(!.) - return - if(trigger_flags & TRIGGER_SECONDARY_ACTION) - remove_colors() - else - vibe() - -///Gives a random color -/datum/action/innate/vibe/proc/vibe() - owner.remove_atom_colour(TEMPORARY_COLOUR_PRIORITY) - owner.add_atom_colour("#[random_color()]", TEMPORARY_COLOUR_PRIORITY) - owner.set_light_color(owner.color) - -///Removes all colors -/datum/action/innate/vibe/proc/remove_colors() - owner.remove_atom_colour(TEMPORARY_COLOUR_PRIORITY) - owner.set_light_color(null) diff --git a/code/modules/mob/living/simple_animal/damage_procs.dm b/code/modules/mob/living/simple_animal/damage_procs.dm index 3e49ac30559b3..7a8a2fcb63b91 100644 --- a/code/modules/mob/living/simple_animal/damage_procs.dm +++ b/code/modules/mob/living/simple_animal/damage_procs.dm @@ -65,3 +65,6 @@ staminaloss = max(0, min(max_staminaloss, staminaloss + (amount * damage_coeff[STAMINA]))) if(updating_stamina) update_stamina() + +/mob/living/simple_animal/received_stamina_damage(current_level, amount_actual, amount) + return diff --git a/code/modules/mob/living/simple_animal/friendly/gondola.dm b/code/modules/mob/living/simple_animal/friendly/gondola.dm deleted file mode 100644 index a914178d08a59..0000000000000 --- a/code/modules/mob/living/simple_animal/friendly/gondola.dm +++ /dev/null @@ -1,69 +0,0 @@ -#define GONDOLA_HEIGHT pick("gondola_body_long", "gondola_body_medium", "gondola_body_short") -#define GONDOLA_COLOR pick("A87855", "915E48", "683E2C") -#define GONDOLA_MOUSTACHE pick("gondola_moustache_large", "gondola_moustache_small") -#define GONDOLA_EYES pick("gondola_eyes_close", "gondola_eyes_far") - -//Gondolas - -/mob/living/simple_animal/pet/gondola - name = "gondola" - real_name = "gondola" - desc = "Gondola is the silent walker. Having no hands he embodies the Taoist principle of wu-wei (non-action) while his smiling facial expression shows his utter and complete acceptance of the world as it is. Its hide is extremely valuable." - response_help_continuous = "pets" - response_help_simple = "pet" - response_disarm_continuous = "bops" - response_disarm_simple = "bop" - response_harm_continuous = "kicks" - response_harm_simple = "kick" - faction = list(FACTION_GONDOLA) - turns_per_move = 10 - icon = 'icons/mob/simple/gondolas.dmi' - icon_state = "gondola" - icon_living = "gondola" - loot = list(/obj/effect/decal/cleanable/blood/gibs, /obj/item/stack/sheet/animalhide/gondola = 1, /obj/item/food/meat/slab/gondola = 1) - //Gondolas aren't affected by cold. - atmos_requirements = null - minbodytemp = 0 - maxbodytemp = 1500 - maxHealth = 200 - health = 200 - del_on_death = TRUE - - //Gondolas don't make footstep sounds - -/mob/living/simple_animal/pet/gondola/Initialize(mapload) - . = ..() - AddElement(/datum/element/pet_bonus, "smiles!") - if (!(istype(src, /mob/living/simple_animal/pet/gondola/gondolapod))) - CreateGondola() - -/mob/living/simple_animal/pet/gondola/proc/CreateGondola() - icon_state = null - icon_living = null - var/height = GONDOLA_HEIGHT - var/mutable_appearance/body_overlay = mutable_appearance(icon, height) - var/mutable_appearance/eyes_overlay = mutable_appearance(icon, GONDOLA_EYES) - var/mutable_appearance/moustache_overlay = mutable_appearance(icon, GONDOLA_MOUSTACHE) - body_overlay.color = ("#[GONDOLA_COLOR]") - - //Offset the face to match the Gondola's height. - switch(height) - if("gondola_body_medium") - eyes_overlay.pixel_y = -4 - moustache_overlay.pixel_y = -4 - if("gondola_body_short") - eyes_overlay.pixel_y = -8 - moustache_overlay.pixel_y = -8 - - cut_overlays(TRUE) - add_overlay(body_overlay) - add_overlay(eyes_overlay) - add_overlay(moustache_overlay) - -/mob/living/simple_animal/pet/gondola/can_speak(allow_mimes = FALSE) - return FALSE // Gondolas are the silent walker. - -#undef GONDOLA_HEIGHT -#undef GONDOLA_COLOR -#undef GONDOLA_MOUSTACHE -#undef GONDOLA_EYES diff --git a/code/modules/mob/living/simple_animal/friendly/pet.dm b/code/modules/mob/living/simple_animal/friendly/pet.dm deleted file mode 100644 index 084ce1577e4a8..0000000000000 --- a/code/modules/mob/living/simple_animal/friendly/pet.dm +++ /dev/null @@ -1,140 +0,0 @@ -/mob/living/simple_animal/pet - icon = 'icons/mob/simple/pets.dmi' - mob_size = MOB_SIZE_SMALL - mob_biotypes = MOB_ORGANIC|MOB_BEAST - blood_volume = BLOOD_VOLUME_NORMAL - - /// if the mob is protected from being renamed by collars. - var/unique_pet = FALSE - /// If the mob has collar sprites, this is the base of the icon states. - var/collar_icon_state - /// We have a seperate _rest collar icon state when the pet is resting. - var/has_collar_resting_icon_state = FALSE - - /// Our collar - var/obj/item/clothing/neck/petcollar/collar - -/mob/living/simple_animal/pet/Initialize(mapload) - . = ..() - - /// Can set the collar var beforehand to start the pet with a collar. - if(collar) - collar = new(src) - - update_icon(UPDATE_OVERLAYS) - -/mob/living/simple_animal/pet/Destroy() - . = ..() - - QDEL_NULL(collar) - QDEL_NULL(access_card) - -/mob/living/simple_animal/pet/attackby(obj/item/thing, mob/user, params) - if(istype(thing, /obj/item/clothing/neck/petcollar) && !collar) - add_collar(thing, user) - return TRUE - - if(istype(thing, /obj/item/newspaper) && !stat) - user.visible_message(span_notice("[user] baps [name] on the nose with the rolled up [thing].")) - dance_rotate(src) - return TRUE - - return ..() - -/mob/living/simple_animal/pet/update_overlays() - . = ..() - - if(!collar || !collar_icon_state) - return - - // Determine which status tag to add to the middle of the icon state. - var/dead_tag = stat == DEAD ? "_dead" : null - var/rest_tag = has_collar_resting_icon_state && resting ? "_rest" : null - var/stat_tag = dead_tag || rest_tag || "" - - . += mutable_appearance(icon, "[collar_icon_state][stat_tag]collar") - . += mutable_appearance(icon, "[collar_icon_state][stat_tag]tag") - -/mob/living/simple_animal/pet/gib() - . = ..() - - if(access_card) - access_card.forceMove(drop_location()) - access_card = null - - remove_collar(drop_location(), update_visuals = FALSE) - -/mob/living/simple_animal/pet/revive(full_heal_flags = NONE, excess_healing = 0, force_grab_ghost = FALSE) - . = ..() - if(!.) - return - - update_icon(UPDATE_OVERLAYS) - -/mob/living/simple_animal/pet/death(gibbed) - . = ..() - add_memory_in_range(src, 7, /datum/memory/pet_died, deuteragonist = src) //Protagonist is the person memorizing it - -/mob/living/simple_animal/pet/Exited(atom/movable/gone, direction) - . = ..() - - if(gone != collar) - return - - collar = null - - if(QDELETED(src)) - return - - update_icon(UPDATE_OVERLAYS) - -/mob/living/simple_animal/pet/update_stat() - . = ..() - - update_icon(UPDATE_OVERLAYS) - -/mob/living/simple_animal/pet/set_resting(new_resting, silent, instant) - . = ..() - - if(!has_collar_resting_icon_state) - return - - update_icon(UPDATE_OVERLAYS) - -/** - * Add a collar to the pet. - * - * Arguments: - * * new_collar - the collar. - * * user - the user that did it. - */ -/mob/living/simple_animal/pet/proc/add_collar(obj/item/clothing/neck/petcollar/new_collar, mob/user) - if(QDELETED(new_collar) || collar) - return - if(!user.transferItemToLoc(new_collar, src)) - return - - collar = new_collar - if(collar_icon_state) - update_icon(UPDATE_OVERLAYS) - - to_chat(user, span_notice("You put [new_collar] around [src]'s neck.")) - if(new_collar.tagname && !unique_pet) - fully_replace_character_name(null, "\proper [new_collar.tagname]") - -/** - * Remove the collar from the pet. - */ -/mob/living/simple_animal/pet/proc/remove_collar(atom/new_loc, update_visuals = TRUE) - if(!collar) - return - - var/obj/old_collar = collar - - collar.forceMove(new_loc) - collar = null - - if(collar_icon_state && update_visuals) - update_icon(UPDATE_OVERLAYS) - - return old_collar diff --git a/code/modules/mob/living/simple_animal/hostile/hostile.dm b/code/modules/mob/living/simple_animal/hostile/hostile.dm index f9f2519d9bec9..507563e7c207c 100644 --- a/code/modules/mob/living/simple_animal/hostile/hostile.dm +++ b/code/modules/mob/living/simple_animal/hostile/hostile.dm @@ -104,7 +104,7 @@ /mob/living/simple_animal/hostile/Life(seconds_per_tick = SSMOBS_DT, times_fired) . = ..() if(!.) //dead - DSmove_manager.stop_looping(src) + GLOB.move_manager.stop_looping(src) /mob/living/simple_animal/hostile/handle_automated_action() if(AIStatus == AI_OFF || QDELETED(src)) @@ -339,11 +339,11 @@ if(!target.Adjacent(target_from) && ranged_cooldown <= world.time) //But make sure they're not in range for a melee attack and our range attack is off cooldown OpenFire(target) if(!Process_Spacemove(0)) //Drifting - DSmove_manager.stop_looping(src) + GLOB.move_manager.stop_looping(src) return 1 if(retreat_distance != null) //If we have a retreat distance, check if we need to run from our target if(target_distance <= retreat_distance) //If target's closer than our retreat distance, run - DSmove_manager.move_away(src, target, retreat_distance, move_to_delay, flags = MOVEMENT_LOOP_IGNORE_GLIDE) + GLOB.move_manager.move_away(src, target, retreat_distance, move_to_delay, flags = MOVEMENT_LOOP_IGNORE_GLIDE) else Goto(target,move_to_delay,minimum_distance) //Otherwise, get to our minimum distance so we chase them else @@ -378,7 +378,7 @@ approaching_target = TRUE else approaching_target = FALSE - DSmove_manager.move_to(src, target, minimum_distance, delay, flags = MOVEMENT_LOOP_IGNORE_GLIDE) + GLOB.move_manager.move_to(src, target, minimum_distance, delay, flags = MOVEMENT_LOOP_IGNORE_GLIDE) return TRUE /mob/living/simple_animal/hostile/adjustHealth(amount, updating_health = TRUE, forced = FALSE) @@ -418,7 +418,7 @@ GiveTarget(null) approaching_target = FALSE in_melee = FALSE - DSmove_manager.stop_looping(src) + GLOB.move_manager.stop_looping(src) LoseAggro() //////////////END HOSTILE MOB TARGETING AND AGGRESSION//////////// diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/_megafauna.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/_megafauna.dm index ea048482e4f1f..31d2e62fba7dc 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/_megafauna.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/_megafauna.dm @@ -20,6 +20,10 @@ maxbodytemp = INFINITY vision_range = 5 aggro_vision_range = 18 + // Pale purple, should be red enough to see stuff on lavaland + lighting_cutoff_red = 25 + lighting_cutoff_green = 15 + lighting_cutoff_blue = 35 move_force = MOVE_FORCE_OVERPOWERING move_resist = MOVE_FORCE_OVERPOWERING pull_force = MOVE_FORCE_OVERPOWERING 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 4c6605cd8393d..193545d9985fa 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 @@ -29,7 +29,6 @@ Difficulty: Medium health_doll_icon = "miner" mob_biotypes = MOB_ORGANIC|MOB_HUMANOID light_color = COLOR_LIGHT_GRAYISH_RED - movement_type = GROUND speak_emote = list("roars") speed = 3 move_to_delay = 3 @@ -123,7 +122,7 @@ Difficulty: Medium new /obj/effect/temp_visual/dir_setting/miner_death(loc, dir) /mob/living/simple_animal/hostile/megafauna/blood_drunk_miner/Move(atom/newloc) - if(newloc && newloc.z == z && (islava(newloc) || ischasm(newloc))) //we're not stupid! + if(newloc && newloc.z == z && ischasm(newloc)) //we're not stupid! return FALSE return ..() 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 414cf97eab2e6..a71b9f76af399 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm @@ -370,7 +370,7 @@ /obj/machinery/anomalous_crystal/theme_warp/Initialize(mapload) . = ..() - terrain_theme = DSmaterials.dimensional_themes[pick(subtypesof(/datum/dimension_theme))] + terrain_theme = SSmaterials.dimensional_themes[pick(subtypesof(/datum/dimension_theme))] observer_desc = "This crystal changes the area around it to match the theme of \"[terrain_theme.name]\"." /obj/machinery/anomalous_crystal/theme_warp/ActivationReaction(mob/user, method) diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/demonic_frost_miner.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/demonic_frost_miner.dm index 3415c45d12bea..2af3018bed306 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/demonic_frost_miner.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/demonic_frost_miner.dm @@ -261,7 +261,7 @@ Difficulty: Extremely Hard clone.real_name = user.real_name INVOKE_ASYNC(user.dna, TYPE_PROC_REF(/datum/dna, transfer_identity), clone) clone.updateappearance(mutcolor_update=1) - var/turf/T = find_safe_turf() + var/turf/T = find_maintenance_spawn(atmos_sensitive = TRUE, require_darkness = TRUE) || find_safe_turf() user.forceMove(T) user.revive(ADMIN_HEAL_ALL) INVOKE_ASYNC(user, TYPE_PROC_REF(/mob/living/carbon, set_species), /datum/species/shadow) diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm index b4cafdb6d538d..4156d9678bca0 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm @@ -538,12 +538,12 @@ Difficulty: Hard /obj/effect/temp_visual/hierophant/wall/Initialize(mapload, new_caster) . = ..() - if(smoothing_flags & (SMOOTH_CORNERS|SMOOTH_BITMASK)) + if(smoothing_flags & USES_SMOOTHING) QUEUE_SMOOTH_NEIGHBORS(src) QUEUE_SMOOTH(src) /obj/effect/temp_visual/hierophant/wall/Destroy() - if(smoothing_flags & (SMOOTH_CORNERS|SMOOTH_BITMASK)) + if(smoothing_flags & USES_SMOOTHING) QUEUE_SMOOTH_NEIGHBORS(src) return ..() diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/wendigo.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/wendigo.dm index 6632dedd2342b..464636cbb204d 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/wendigo.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/wendigo.dm @@ -1,10 +1,4 @@ #define WENDIGO_ENRAGED (health <= maxHealth*0.5) -#define WENDIGO_CIRCLE_SHOTCOUNT 24 -#define WENDIGO_CIRCLE_REPEATCOUNT 8 -#define WENDIGO_SPIRAL_SHOTCOUNT 40 -#define WENDIGO_WAVE_SHOTCOUNT 7 -#define WENDIGO_WAVE_REPEATCOUNT 32 -#define WENDIGO_SHOTGUN_SHOTCOUNT 5 /* @@ -48,12 +42,9 @@ Difficulty: Hard achievement_type = /datum/award/achievement/boss/wendigo_kill crusher_achievement_type = /datum/award/achievement/boss/wendigo_crusher score_achievement_type = /datum/award/score/wendigo_score - death_message = "falls to the ground in a bloody heap, shaking the arena" + death_message = "falls to the ground in a bloody heap, shaking the arena." death_sound = 'sound/effects/gravhit.ogg' footstep_type = FOOTSTEP_MOB_HEAVY - attack_action_types = list(/datum/action/innate/megafauna_attack/heavy_stomp, - /datum/action/innate/megafauna_attack/teleport, - /datum/action/innate/megafauna_attack/shockwave_scream) summon_line = "GwaHOOOOOOOOOOOOOOOOOOOOO" /// Saves the turf the megafauna was created at (spawns exit portal here) var/turf/starting @@ -61,37 +52,38 @@ Difficulty: Hard var/stomp_range = 1 /// Stores directions the mob is moving, then calls that a move has fully ended when these directions are removed in moved var/stored_move_dirs = 0 - /// If the wendigo is allowed to move - var/can_move = TRUE /// Time before the wendigo can scream again var/scream_cooldown_time = 10 SECONDS + /// Teleport Ability + var/datum/action/cooldown/mob_cooldown/teleport/teleport + /// Shotgun Ability + var/datum/action/cooldown/mob_cooldown/projectile_attack/shotgun_blast/wendigo/shotgun_blast + /// Ground Slam Ability + var/datum/action/cooldown/mob_cooldown/ground_slam/ground_slam + /// Alternating Projectiles Ability + var/datum/action/cooldown/mob_cooldown/projectile_attack/alternating_circle/alternating_circle + /// Spiral Projectiles Ability + var/datum/action/cooldown/mob_cooldown/projectile_attack/spiral_shots/wendigo/spiral + /// Wave Projectiles Ability + var/datum/action/cooldown/mob_cooldown/projectile_attack/wave/wave /// Stores the last scream time so it doesn't spam it COOLDOWN_DECLARE(scream_cooldown) /mob/living/simple_animal/hostile/megafauna/wendigo/Initialize(mapload) . = ..() ADD_TRAIT(src, TRAIT_NO_FLOATING_ANIM, INNATE_TRAIT) - -/datum/action/innate/megafauna_attack/heavy_stomp - name = "Heavy Stomp" - button_icon = 'icons/mob/actions/actions_items.dmi' - button_icon_state = "sniper_zoom" - chosen_message = "You are now stomping the ground around you." - chosen_attack_num = 1 - -/datum/action/innate/megafauna_attack/teleport - name = "Teleport" - button_icon = 'icons/effects/bubblegum.dmi' - button_icon_state = "smack ya one" - chosen_message = "You are now teleporting at the target you click on." - chosen_attack_num = 2 - -/datum/action/innate/megafauna_attack/shockwave_scream - name = "Shockwave Scream" - button_icon = 'icons/mob/actions/actions_animal.dmi' - button_icon_state = "expand" - chosen_message = "You are now screeching, disorienting targets around you." - chosen_attack_num = 3 + teleport = new(src) + shotgun_blast = new(src) + ground_slam = new(src) + alternating_circle = new(src) + spiral = new(src) + wave = new(src) + teleport.Grant(src) + shotgun_blast.Grant(src) + ground_slam.Grant(src) + alternating_circle.Grant(src) + spiral.Grant(src) + wave.Grant(src) /mob/living/simple_animal/hostile/megafauna/wendigo/Initialize(mapload) . = ..() @@ -108,13 +100,6 @@ Difficulty: Hard move_to_delay = initial(move_to_delay) if(client) - switch(chosen_attack) - if(1) - heavy_stomp() - if(2) - try_teleport() - if(3) - shockwave_scream() return var/mob/living/living_target = target @@ -127,28 +112,54 @@ Difficulty: Hard chosen_attack = rand(1, 2) switch(chosen_attack) if(1) - heavy_stomp() + ground_slam.Activate(target) if(2) - try_teleport() + teleport.Activate(target) + if(WENDIGO_ENRAGED) + shotgun_blast.Activate(target) if(3) do_teleport(src, starting, 0, channel=TELEPORT_CHANNEL_BLUESPACE, forced = TRUE) - shockwave_scream() + var/shockwave_attack + if(WENDIGO_ENRAGED) + shockwave_attack = rand(1, 3) + else + shockwave_attack = rand(1, 2) + switch(shockwave_attack) + if(1) + alternating_circle.enraged = WENDIGO_ENRAGED + alternating_circle.Activate(target) + if(2) + spiral.enraged = WENDIGO_ENRAGED + spiral.Activate(target) + if(3) + wave.Activate(target) + update_cooldowns(list(COOLDOWN_UPDATE_SET_MELEE = 3 SECONDS, COOLDOWN_UPDATE_SET_RANGED = 3 SECONDS)) /mob/living/simple_animal/hostile/megafauna/wendigo/Move(atom/newloc, direct) - if(!can_move) - return stored_move_dirs |= direct - return ..() + . = ..() + // Remove after anyways in case the movement was prevented + stored_move_dirs &= ~direct /mob/living/simple_animal/hostile/megafauna/wendigo/Moved(atom/old_loc, movement_dir, forced, list/old_locs, momentum_change = TRUE) . = ..() stored_move_dirs &= ~movement_dir if(!stored_move_dirs) - INVOKE_ASYNC(src, PROC_REF(wendigo_slam), stomp_range, 1, 8) + INVOKE_ASYNC(GLOBAL_PROC, GLOBAL_PROC_REF(wendigo_slam), src, stomp_range, 1, 8) -/// Slams the ground around the source throwing back enemies caught nearby, delay is for the radius increase -/mob/living/simple_animal/hostile/megafauna/wendigo/proc/wendigo_slam(range, delay, throw_range) - var/turf/origin = get_turf(src) +/proc/wendigo_scream(mob/owner) + SLEEP_CHECK_DEATH(5, owner) + playsound(owner.loc, 'sound/magic/demon_dies.ogg', 600, FALSE, 10) + var/pixel_shift = rand(5, 15) + animate(owner, pixel_z = pixel_shift, time = 1, loop = 20, flags = ANIMATION_RELATIVE) + animate(pixel_z = -pixel_shift, time = 1, flags = ANIMATION_RELATIVE) + for(var/mob/living/dizzy_target in get_hearers_in_view(7, owner) - owner) + dizzy_target.set_dizzy_if_lower(12 SECONDS) + to_chat(dizzy_target, span_danger("[owner] screams loudly!")) + SLEEP_CHECK_DEATH(1 SECONDS, owner) + +/proc/wendigo_slam(mob/owner, range, delay, throw_range) + var/turf/origin = get_turf(owner) if(!origin) return var/list/all_turfs = RANGE_TURFS(range, origin) @@ -158,117 +169,16 @@ Difficulty: Hard if(get_dist(origin, stomp_turf) > sound_range) continue new /obj/effect/temp_visual/small_smoke/halfsecond(stomp_turf) - for(var/mob/living/target in stomp_turf) - if(target == src || target.throwing) + for(var/mob/living/hit_mob in stomp_turf) + if(hit_mob == owner || hit_mob.throwing) continue - to_chat(target, span_userdanger("[src]'s ground slam shockwave sends you flying!")) - var/turf/thrownat = get_ranged_target_turf_direct(src, target, throw_range, rand(-10, 10)) - target.throw_at(thrownat, 8, 2, null, TRUE, force = MOVE_FORCE_OVERPOWERING, gentle = TRUE) - target.apply_damage(20, BRUTE, wound_bonus=CANT_WOUND) - shake_camera(target, 2, 1) + to_chat(hit_mob, span_userdanger("[owner]'s ground slam shockwave sends you flying!")) + var/turf/thrownat = get_ranged_target_turf_direct(owner, hit_mob, throw_range, rand(-10, 10)) + hit_mob.throw_at(thrownat, 8, 2, null, TRUE, force = MOVE_FORCE_OVERPOWERING, gentle = TRUE) + hit_mob.apply_damage(20, BRUTE, wound_bonus=CANT_WOUND) + shake_camera(hit_mob, 2, 1) all_turfs -= stomp_turf - sleep(delay) - -/// Larger but slower ground stomp -/mob/living/simple_animal/hostile/megafauna/wendigo/proc/heavy_stomp() - can_move = FALSE - wendigo_slam(5, 3 - WENDIGO_ENRAGED, 8) - update_cooldowns(list(COOLDOWN_UPDATE_SET_MELEE = 0 SECONDS, COOLDOWN_UPDATE_SET_RANGED = 0 SECONDS)) - can_move = TRUE - -/// Teleports to a location 4 turfs away from the enemy in view -/mob/living/simple_animal/hostile/megafauna/wendigo/proc/try_teleport() - teleport(6) - if(WENDIGO_ENRAGED) - playsound(loc, 'sound/magic/clockwork/invoke_general.ogg', 100, TRUE) - for(var/shots in 1 to WENDIGO_SHOTGUN_SHOTCOUNT) - var/spread = shots * 10 - 30 - var/turf/startloc = get_step(get_turf(src), get_dir(src, target)) - var/turf/endloc = get_turf(target) - if(!endloc) - break - var/obj/projectile/colossus/wendigo_shockwave/shockwave = new /obj/projectile/colossus/wendigo_shockwave(loc) - shockwave.speed = 8 - shockwave.preparePixelProjectile(endloc, startloc, null, spread) - shockwave.firer = src - if(target) - shockwave.original = target - shockwave.fire() - update_cooldowns(list(COOLDOWN_UPDATE_SET_MELEE = 0 SECONDS, COOLDOWN_UPDATE_SET_RANGED = 0 SECONDS)) - -/mob/living/simple_animal/hostile/megafauna/wendigo/proc/teleport(range = 6) - var/list/possible_ends = view(range, target.loc) - view(range - 1, target.loc) - for(var/turf/closed/cant_teleport_turf in possible_ends) - possible_ends -= cant_teleport_turf - if(!possible_ends.len) - return - var/turf/end = pick(possible_ends) - do_teleport(src, end, 0, channel=TELEPORT_CHANNEL_BLUESPACE, forced = TRUE) - -/// Applies dizziness to all nearby enemies that can hear the scream and animates the wendigo shaking up and down as shockwave projectiles shoot outward -/mob/living/simple_animal/hostile/megafauna/wendigo/proc/shockwave_scream() - can_move = FALSE - COOLDOWN_START(src, scream_cooldown, scream_cooldown_time) - SLEEP_CHECK_DEATH(5, src) - playsound(loc, 'sound/magic/demon_dies.ogg', 600, FALSE, 10) - var/pixel_shift = rand(5, 15) - animate(src, pixel_z = pixel_shift, time = 1, loop = 20, flags = ANIMATION_RELATIVE) - animate(pixel_z = -pixel_shift, time = 1, flags = ANIMATION_RELATIVE) - for(var/mob/living/dizzy_target in get_hearers_in_view(7, src) - src) - dizzy_target.set_dizzy_if_lower(12 SECONDS) - to_chat(dizzy_target, span_danger("The wendigo screams loudly!")) - SLEEP_CHECK_DEATH(1 SECONDS, src) - spiral_attack() - update_cooldowns(list(COOLDOWN_UPDATE_SET_MELEE = 3 SECONDS, COOLDOWN_UPDATE_SET_RANGED = 3 SECONDS)) - SLEEP_CHECK_DEATH(3 SECONDS, src) - can_move = TRUE - -/// Shoots shockwave projectiles in a random preset pattern -/mob/living/simple_animal/hostile/megafauna/wendigo/proc/spiral_attack() - var/list/choices = list("Alternating Circle", "Spiral") - if(WENDIGO_ENRAGED) - choices += "Wave" - var/spiral_type = pick(choices) - switch(spiral_type) - if("Alternating Circle") - var/shots_per = WENDIGO_CIRCLE_SHOTCOUNT - for(var/shoot_times in 1 to WENDIGO_CIRCLE_REPEATCOUNT) - var/offset = shoot_times % 2 - for(var/shot in 1 to shots_per) - var/angle = shot * 360 / shots_per + (offset * 360 / shots_per) * 0.5 - var/obj/projectile/colossus/wendigo_shockwave/shockwave = new /obj/projectile/colossus/wendigo_shockwave(loc) - shockwave.firer = src - shockwave.speed = 3 - WENDIGO_ENRAGED - shockwave.fire(angle) - SLEEP_CHECK_DEATH(6 - WENDIGO_ENRAGED * 2, src) - if("Spiral") - var/shots_spiral = WENDIGO_SPIRAL_SHOTCOUNT - var/angle_to_target = get_angle(src, target) - var/spiral_direction = pick(-1, 1) - for(var/shot in 1 to shots_spiral) - var/shots_per_tick = 5 - WENDIGO_ENRAGED * 3 - var/angle_change = (5 + WENDIGO_ENRAGED * shot / 6) * spiral_direction - for(var/count in 1 to shots_per_tick) - var/angle = angle_to_target + shot * angle_change + count * 360 / shots_per_tick - var/obj/projectile/colossus/wendigo_shockwave/shockwave = new /obj/projectile/colossus/wendigo_shockwave(loc) - shockwave.firer = src - shockwave.damage = 15 - shockwave.fire(angle) - SLEEP_CHECK_DEATH(1, src) - if("Wave") - var/shots_per = WENDIGO_WAVE_SHOTCOUNT - var/difference = 360 / shots_per - var/wave_direction = pick(-1, 1) - for(var/shoot_times in 1 to WENDIGO_WAVE_REPEATCOUNT) - for(var/shot in 1 to shots_per) - var/angle = shot * difference + shoot_times * 5 * wave_direction * -1 - var/obj/projectile/colossus/wendigo_shockwave/shockwave = new /obj/projectile/colossus/wendigo_shockwave(loc) - shockwave.firer = src - shockwave.wave_movement = TRUE - shockwave.speed = 8 - shockwave.wave_speed = 10 * wave_direction - shockwave.fire(angle) - SLEEP_CHECK_DEATH(2, src) + SLEEP_CHECK_DEATH(delay, owner) /mob/living/simple_animal/hostile/megafauna/wendigo/death(gibbed, list/force_grant) if(health > 0) @@ -277,14 +187,18 @@ Difficulty: Hard if(!true_spawn) return ..() + create_portal() + return ..() + +/mob/living/simple_animal/hostile/megafauna/wendigo/proc/create_portal() var/obj/effect/portal/permanent/one_way/exit = new /obj/effect/portal/permanent/one_way(starting) exit.id = "wendigo arena exit" exit.add_atom_colour(COLOR_RED_LIGHT, ADMIN_COLOUR_PRIORITY) exit.set_light(20, 1, COLOR_SOFT_RED) - return ..() /obj/projectile/colossus/wendigo_shockwave name = "wendigo shockwave" + speed = 2 /// If wave movement is enabled var/wave_movement = FALSE /// Amount the angle changes every pixel move @@ -292,6 +206,17 @@ Difficulty: Hard /// Amount of movements this projectile has made var/pixel_moves = 0 +/obj/projectile/colossus/wendigo_shockwave/spiral + damage = 15 + +/obj/projectile/colossus/wendigo_shockwave/wave + speed = 8 + wave_movement = TRUE + wave_speed = 10 + +/obj/projectile/colossus/wendigo_shockwave/wave/alternate + wave_speed = -10 + /obj/projectile/colossus/wendigo_shockwave/pixel_move(trajectory_multiplier, hitscanning = FALSE) . = ..() if(wave_movement) @@ -343,10 +268,7 @@ Difficulty: Hard w_class = WEIGHT_CLASS_TINY throwforce = 0 +/mob/living/simple_animal/hostile/megafauna/wendigo/noportal/create_portal() + return + #undef WENDIGO_ENRAGED -#undef WENDIGO_CIRCLE_SHOTCOUNT -#undef WENDIGO_CIRCLE_REPEATCOUNT -#undef WENDIGO_SPIRAL_SHOTCOUNT -#undef WENDIGO_WAVE_SHOTCOUNT -#undef WENDIGO_WAVE_REPEATCOUNT -#undef WENDIGO_SHOTGUN_SHOTCOUNT 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 b2555309f8ac8..95744d0a2d310 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 @@ -45,7 +45,7 @@ /mob/living/simple_animal/hostile/asteroid/curseblob/proc/move_loop(move_target, delay) if(our_loop) return - our_loop = DSmove_manager.force_move(src, move_target, delay, priority = MOVEMENT_ABOVE_SPACE_PRIORITY) + our_loop = GLOB.move_manager.force_move(src, move_target, delay, priority = MOVEMENT_ABOVE_SPACE_PRIORITY) if(!our_loop) return RegisterSignal(move_target, COMSIG_MOB_STATCHANGE, PROC_REF(stat_change)) diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/elite.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/elite.dm index 71801a44c95ef..623e18e0494be 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/elite.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/elite.dm @@ -7,7 +7,7 @@ name = "elite" desc = "An elite monster, found in one of the strange tumors on lavaland." icon = 'icons/mob/simple/lavaland/lavaland_elites.dmi' - faction = list(FACTION_BOSS) + faction = list(FACTION_MINING, FACTION_BOSS) robust_searching = TRUE ranged_ignores_vision = TRUE ranged = TRUE @@ -368,26 +368,26 @@ While using this makes the system rely on OnFire, it still gives options for tim throw_speed = 3 throw_range = 5 -/obj/item/tumor_shard/afterattack(atom/target, mob/user, proximity_flag) - . = ..() - if(istype(target, /mob/living/simple_animal/hostile/asteroid/elite) && proximity_flag) - var/mob/living/simple_animal/hostile/asteroid/elite/E = target - if(E.stat != DEAD || E.sentience_type != SENTIENCE_BOSS || !E.key) - user.visible_message(span_notice("It appears [E] is unable to be revived right now. Perhaps try again later.")) - return - E.faction = list("[REF(user)]") - E.revive(HEAL_ALL) - user.visible_message(span_notice("[user] stabs [E] with [src], reviving it.")) - E.playsound_local(get_turf(E), 'sound/effects/magic.ogg', 40, 0) - to_chat(E, "You have been revived by [user]. While you can't speak to them, you owe [user] a great debt. Assist [user.p_them()] in achieving [user.p_their()] goals, regardless of risk.") - to_chat(E, "Note that you now share the loyalties of [user]. You are expected not to intentionally sabotage their faction unless commanded to!") - E.maxHealth = E.maxHealth * 0.4 - E.health = E.maxHealth - E.desc = "[E.desc] However, this one appears to be less wild in nature, and calmer around people." - E.sentience_type = SENTIENCE_ORGANIC - qdel(src) - else - to_chat(user, span_info("[src] only works on the corpse of a sentient lavaland elite.")) +/obj/item/tumor_shard/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + if(!istype(interacting_with, /mob/living/simple_animal/hostile/asteroid/elite)) + return NONE + + var/mob/living/simple_animal/hostile/asteroid/elite/E = interacting_with + if(E.stat != DEAD || E.sentience_type != SENTIENCE_BOSS || !E.key) + user.visible_message(span_notice("It appears [E] is unable to be revived right now. Perhaps try again later.")) + return ITEM_INTERACT_BLOCKING + E.faction = list("[REF(user)]") + E.revive(HEAL_ALL) + user.visible_message(span_notice("[user] stabs [E] with [src], reviving it.")) + E.playsound_local(get_turf(E), 'sound/effects/magic.ogg', 40, 0) + to_chat(E, "You have been revived by [user]. While you can't speak to them, you owe [user] a great debt. Assist [user.p_them()] in achieving [user.p_their()] goals, regardless of risk.") + to_chat(E, "Note that you now share the loyalties of [user]. You are expected not to intentionally sabotage their faction unless commanded to!") + E.maxHealth = E.maxHealth * 0.4 + E.health = E.maxHealth + E.desc = "[E.desc] However, this one appears to be less wild in nature, and calmer around people." + E.sentience_type = SENTIENCE_ORGANIC + qdel(src) + return ITEM_INTERACT_SUCCESS /obj/effect/temp_visual/elite_tumor_wall name = "magic wall" @@ -408,12 +408,12 @@ While using this makes the system rely on OnFire, it still gives options for tim /obj/effect/temp_visual/elite_tumor_wall/Initialize(mapload, new_caster) . = ..() - if(smoothing_flags & (SMOOTH_CORNERS|SMOOTH_BITMASK)) + if(smoothing_flags & USES_SMOOTHING) QUEUE_SMOOTH_NEIGHBORS(src) QUEUE_SMOOTH(src) /obj/effect/temp_visual/elite_tumor_wall/Destroy() - if(smoothing_flags & (SMOOTH_CORNERS|SMOOTH_BITMASK)) + if(smoothing_flags & USES_SMOOTHING) QUEUE_SMOOTH_NEIGHBORS(src) return ..() diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm index 4cfe68b2b9654..25d0e566b15dd 100644 --- a/code/modules/mob/living/simple_animal/simple_animal.dm +++ b/code/modules/mob/living/simple_animal/simple_animal.dm @@ -539,7 +539,7 @@ /mob/living/simple_animal/proc/Goto(target, delay, minimum_distance) if(prevent_goto_movement) return FALSE - DSmove_manager.move_to(src, target, minimum_distance, delay) + GLOB.move_manager.move_to(src, target, minimum_distance, delay) return TRUE //Makes this mob hunt the prey, be it living or an object. Will kill living creatures, and delete objects. diff --git a/code/modules/mob/living/sneeze.dm b/code/modules/mob/living/sneeze.dm new file mode 100644 index 0000000000000..b2cf76c25a6b0 --- /dev/null +++ b/code/modules/mob/living/sneeze.dm @@ -0,0 +1,75 @@ +/// How many degrees, up and down, can our sneeze deviate from our facing direction? +#define SNEEZE_CONE 60 + +/// Launch a sneeze that can infect with a disease +/mob/living/proc/infectious_sneeze(datum/disease/disease, force, range = 4, count = 4, charge_time = 0.5 SECONDS, obj/projectile/sneezoid = /obj/projectile/sneeze) + sneeze(range, count, charge_time, sneezoid, on_sneeze_hit_callback = CALLBACK(src, PROC_REF(try_sneeze_infect), disease.Copy(), force)) + +/// Try and infect following a sneeze hit. force to always infect +/mob/living/proc/try_sneeze_infect(datum/disease/disease, force, mob/living/target) + target.contract_airborne_disease(disease) + +/// Inhale and start the sneeze timer. on_sneeze_callback can be used to do custom sneezes, on_sneeze_hit_callback for special effects, but probably usually making it infect +/mob/living/proc/sneeze(range = 4, count = 3, charge_time = 0.5 SECONDS, obj/projectile/sneezoid = /obj/projectile/sneeze, on_sneeze_callback = null, on_sneeze_hit_callback = null) + if(charge_time) + emote("inhale") + + clear_fullscreen("sneezer", 0) + var/atom/movable/screen/fullscreen/cursor_catcher/catcher = overlay_fullscreen("sneezer", /atom/movable/screen/fullscreen/cursor_catcher, FALSE) + if(client) + catcher.assign_to_mob(src) + var/callback = on_sneeze_callback || CALLBACK(src, PROC_REF(launch_sneeze), range, count, sneezoid, on_sneeze_hit_callback, catcher) + addtimer(callback, charge_time) + +/// Shoot the sneeze projectile +/mob/living/proc/launch_sneeze(range, count, obj/projectile/sneezoid, datum/callback/on_sneeze_hit_callback, atom/movable/screen/fullscreen/cursor_catcher/catcher) + emote("sneeze") + + var/angle = dir2angle(dir) + + if(catcher && catcher.given_turf) + catcher.calculate_params() + /// Take the target and subtract self for relative grid position. Then take the pixel x on the tile and divide by the tiles pixel size, and add 0.5 so it's fired from the center + var/sneeze_x = catcher.given_turf.x - x + catcher.given_x / world.icon_size - 0.5 + var/sneeze_y = catcher.given_turf.y - y + catcher.given_y / world.icon_size - 0.5 + angle = ATAN2(sneeze_y, sneeze_x) + + // Check if we're within the sneeze cone, otherwise just sneeze straight + if(abs(closer_angle_difference(angle, dir2angle(dir) - SNEEZE_CONE)) + abs(closer_angle_difference(angle, dir2angle(dir) + SNEEZE_CONE)) > 2 * SNEEZE_CONE) + angle = dir2angle(dir) + + clear_fullscreen("sneezer", 0) + + for(var/i in 0 to count) + var/obj/projectile/sneezium = new sneezoid(get_turf(src), on_sneeze_hit_callback) + sneezium.range = range + sneezium.firer = src + sneezium.fire(angle) + +/// Sneeze projectile launched by sneezing. gross +/obj/projectile/sneeze + name = "sneeze" + icon_state = "sneeze" + + suppressed = SUPPRESSED_VERY + range = 4 + speed = 4 + spread = 40 + damage_type = BRUTE + damage = 0 + + /// Call this when we hit something + var/datum/callback/sneezie_callback + +/obj/projectile/sneeze/Initialize(mapload, callback) + . = ..() + + sneezie_callback = callback + +/obj/projectile/sneeze/on_hit(atom/target, blocked, pierce_hit) + . = ..() + + if(isliving(target)) + sneezie_callback?.Invoke(target) //you've been sneezered + +#undef SNEEZE_CONE diff --git a/code/modules/mob/living/ventcrawling.dm b/code/modules/mob/living/ventcrawling.dm index 3d7be3ea47e29..2fa18caf7bc20 100644 --- a/code/modules/mob/living/ventcrawling.dm +++ b/code/modules/mob/living/ventcrawling.dm @@ -1,4 +1,19 @@ // VENTCRAWLING + +/mob/living/proc/notify_ventcrawler_on_login() + var/ventcrawler = HAS_TRAIT(src, TRAIT_VENTCRAWLER_ALWAYS) || HAS_TRAIT(src, TRAIT_VENTCRAWLER_NUDE) + if(!ventcrawler) + return + to_chat(src, span_notice("You can ventcrawl! Use alt+click on vents to quickly travel about the station.")) + +/mob/living/carbon/human/notify_ventcrawler_on_login() + if(!ismonkey(src)) + return ..() + if(!istype(head, /obj/item/clothing/head/helmet/monkey_sentience)) //don't notify them about ventcrawling if they're wearing the sentience helmet, because they can't ventcrawl with it on, and if they take it off they'll no longer be in control of the mob. + return ..() + + + /// Checks if the mob is able to enter the vent, and provides feedback if they are unable to. /mob/living/proc/can_enter_vent(obj/machinery/atmospherics/components/ventcrawl_target, provide_feedback = TRUE) // Being able to always ventcrawl trumps being only able to ventcrawl when wearing nothing @@ -31,7 +46,7 @@ to_chat(src, span_warning("You can't vent crawl while buckled!")) return if(iscarbon(src) && required_nudity) - if(length(get_equipped_items(include_pockets = TRUE)) || get_num_held_items()) + if(length(get_equipped_items(INCLUDE_POCKETS)) || get_num_held_items()) if(provide_feedback) to_chat(src, span_warning("You can't crawl around in the ventilation ducts with items!")) return diff --git a/code/modules/mob/login.dm b/code/modules/mob/login.dm index 2f013f855b855..a4964add6c865 100644 --- a/code/modules/mob/login.dm +++ b/code/modules/mob/login.dm @@ -99,7 +99,10 @@ update_client_colour() update_mouse_pointer() - refresh_looping_ambience() + update_ambience_area(get_area(src)) + + if(!can_hear()) + stop_sound_channel(CHANNEL_AMBIENCE) if(client) if(client.view_size) diff --git a/code/modules/mob/logout.dm b/code/modules/mob/logout.dm index cf937e42bb74f..09d50c8436c71 100644 --- a/code/modules/mob/logout.dm +++ b/code/modules/mob/logout.dm @@ -3,6 +3,7 @@ log_message("[key_name(src)] is no longer owning mob [src]([src.type])", LOG_OWNERSHIP) SStgui.on_logout(src) remove_from_player_list() + update_ambience_area(null) // Unset ambience vars so it plays again on login ..() if(loc) diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index 4219e8e3c38d3..6ec820bc469c9 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -6,7 +6,6 @@ * * GLOB.dead_mob_list * * GLOB.alive_mob_list * * GLOB.all_clockwork_mobs - * * GLOB.mob_directory * * Unsets the focus var * @@ -67,7 +66,6 @@ * * Adds to global lists * * GLOB.mob_list - * * GLOB.mob_directory (by tag) * * GLOB.dead_mob_list - if mob is dead * * GLOB.alive_mob_list - if the mob is alive * @@ -441,88 +439,6 @@ return FALSE -/** - * Try to equip an item to a slot on the mob - * - * This is a SAFE proc. Use this instead of equip_to_slot()! - * - * set qdel_on_fail to have it delete W if it fails to equip - * - * set disable_warning to disable the 'you are unable to equip that' warning. - * - * unset redraw_mob to prevent the mob icons from being redrawn at the end. - * - * Initial is used to indicate whether or not this is the initial equipment (job datums etc) or just a player doing it - * - * set indirect_action to allow insertions into "soft" locked objects, things that are easily opened by the owning mob - */ -/mob/proc/equip_to_slot_if_possible(obj/item/W, slot, qdel_on_fail = FALSE, disable_warning = FALSE, redraw_mob = TRUE, bypass_equip_delay_self = FALSE, initial = FALSE, indirect_action = FALSE) - if(!istype(W) || QDELETED(W)) //This qdeleted is to prevent stupid behavior with things that qdel during init, like say stacks - return FALSE - if(!W.mob_can_equip(src, slot, disable_warning, bypass_equip_delay_self, indirect_action = indirect_action)) - if(qdel_on_fail) - qdel(W) - else if(!disable_warning) - to_chat(src, span_warning("You are unable to equip that!")) - return FALSE - equip_to_slot(W, slot, initial, redraw_mob, indirect_action = indirect_action) //This proc should not ever fail. - return TRUE - -/** - * Actually equips an item to a slot (UNSAFE) - * - * This is an UNSAFE proc. It merely handles the actual job of equipping. All the checks on - * whether you can or can't equip need to be done before! Use mob_can_equip() for that task. - * - *In most cases you will want to use equip_to_slot_if_possible() - */ -/mob/proc/equip_to_slot(obj/item/equipping, slot, initial = FALSE, redraw_mob = FALSE, indirect_action = FALSE) - return - -/** - * Equip an item to the slot or delete - * - * This is just a commonly used configuration for the equip_to_slot_if_possible() proc, used to - * equip people when the round starts and when events happen and such. - * - * Also bypasses equip delay checks, since the mob isn't actually putting it on. - * Initial is used to indicate whether or not this is the initial equipment (job datums etc) or just a player doing it - * set indirect_action to allow insertions into "soft" locked objects, things that are easily opened by the owning mob - */ -/mob/proc/equip_to_slot_or_del(obj/item/W, slot, initial = FALSE, indirect_action = FALSE) - return equip_to_slot_if_possible(W, slot, TRUE, TRUE, FALSE, TRUE, initial, indirect_action) - -/** - * Auto equip the passed in item the appropriate slot based on equipment priority - * - * puts the item "W" into an appropriate slot in a human's inventory - * - * returns 0 if it cannot, 1 if successful - */ -/mob/proc/equip_to_appropriate_slot(obj/item/W, qdel_on_fail = FALSE, indirect_action = FALSE) - if(!istype(W)) - return FALSE - var/slot_priority = W.slot_equipment_priority - - if(!slot_priority) - slot_priority = list( \ - ITEM_SLOT_BACK, ITEM_SLOT_ID,\ - ITEM_SLOT_ICLOTHING, ITEM_SLOT_OCLOTHING,\ - ITEM_SLOT_MASK, ITEM_SLOT_HEAD, ITEM_SLOT_NECK,\ - ITEM_SLOT_FEET, ITEM_SLOT_GLOVES,\ - ITEM_SLOT_EARS, ITEM_SLOT_EYES,\ - ITEM_SLOT_BELT, ITEM_SLOT_SUITSTORE,\ - ITEM_SLOT_LPOCKET, ITEM_SLOT_RPOCKET,\ - ITEM_SLOT_DEX_STORAGE\ - ) - - for(var/slot in slot_priority) - if(equip_to_slot_if_possible(W, slot, disable_warning = TRUE, redraw_mob = TRUE, indirect_action = indirect_action)) - return TRUE - - if(qdel_on_fail) - qdel(W) - return FALSE /** * Reset the attached clients perspective (viewpoint) * @@ -889,24 +805,6 @@ set category = null return -/** - * Controls if a mouse drop succeeds (return null if it doesnt) - */ -/mob/MouseDrop(mob/M) - . = ..() - if(M != usr) - return - if(usr == src) - return - if(!Adjacent(usr)) - return - if(isAI(M)) - return - -///Is the mob muzzled (default false) -/mob/proc/is_muzzled() - return FALSE - /// Adds this list to the output to the stat browser /mob/proc/get_status_tab_items() . = list("") //we want to offset unique stuff from standard stuff @@ -1172,11 +1070,14 @@ * * ALLOW_SILICON_REACH - If silicons are allowed to perform action from a distance (silicons can operate airlocks from far away) * * ALLOW_RESTING - If resting on the floor is allowed to perform action () * * ALLOW_VENTCRAWL - Mobs with ventcrawl traits can alt-click this to vent + * * BYPASS_ADJACENCY - The target does not have to be adjacent + * * SILENT_ADJACENCY - Adjacency is required but errors are not printed + * * NOT_INSIDE_TARGET - The target maybe adjacent but the mob should not be inside the target * * silence_adjacency: Sometimes we want to use this proc to check interaction without allowing it to throw errors for base case adjacency * Alt click uses this, as otherwise you can detect what is interactable from a distance via the error message **/ -/mob/proc/can_perform_action(atom/movable/target, action_bitflags) +/mob/proc/can_perform_action(atom/target, action_bitflags) return ///Can this mob use storage @@ -1549,8 +1450,8 @@ else speedies += thing.slowdown - //if our movespeed mod is in the negatives, we don't modify it since that's a benefit - if(speedies > 0 && HAS_TRAIT(src, TRAIT_SETTLER)) + //if we have TRAIT_STURDY_FRAME, we reduce our overall speed penalty UNLESS that penalty would be a negative value, and therefore a speed boost. + if(speedies > 0 && HAS_TRAIT(src, TRAIT_STURDY_FRAME)) speedies *= 0.2 if(immutable_speedies) diff --git a/code/modules/mob/mob_defines.dm b/code/modules/mob/mob_defines.dm index 2a5be377ecd10..2206efd0e13ce 100644 --- a/code/modules/mob/mob_defines.dm +++ b/code/modules/mob/mob_defines.dm @@ -134,9 +134,6 @@ /// What job does this mob have var/job = null//Living - /// Can this mob enter shuttles - var/move_on_shuttle = 1 - /// bitflags defining which status effects can be inflicted (replaces canknockdown, canstun, etc) var/status_flags = CANSTUN|CANKNOCKDOWN|CANUNCONSCIOUS|CANPUSH @@ -194,3 +191,6 @@ var/active_typing_indicator ///the icon currently used for the thinking indicator's bubble var/active_thinking_indicator + + /// A ref of the area we're taking our ambient loop from. + var/area/ambience_tracked_area diff --git a/code/modules/mob/mob_helpers.dm b/code/modules/mob/mob_helpers.dm index 7a8c993f26b0f..a6a1c58c7eddf 100644 --- a/code/modules/mob/mob_helpers.dm +++ b/code/modules/mob/mob_helpers.dm @@ -115,6 +115,27 @@ . += "*" return sanitize(.) +/** + * For when you're only able to speak a limited amount of words + * phrase - the string to convert + * definitive_limit - the amount of words to limit the phrase to, optional +*/ +/proc/stifled(phrase, definitive_limit = null) + phrase = html_decode(phrase) + var/num_words = 0 + var/words = splittext(phrase, " ") + if(definitive_limit > 0) // in case someone passes a negative + num_words = min(definitive_limit, length(words)) + else + num_words = min(rand(3, 5), length(words)) + . = "" + for(var/i = 1, i <= num_words, i++) + if(num_words == i) + . += words[i] + "..." + else + . += words[i] + " ... " + return sanitize(.) + /** * Turn text into complete gibberish! * @@ -310,19 +331,6 @@ toast.name = header toast.target_ref = WEAKREF(source) -/// Heals a robotic limb on a mob -/proc/item_heal_robotic(mob/living/carbon/human/human, mob/user, brute_heal, burn_heal) - var/obj/item/bodypart/affecting = human.get_bodypart(check_zone(user.zone_selected)) - if(!affecting || IS_ORGANIC_LIMB(affecting)) - to_chat(user, span_warning("[affecting] is already in good condition!")) - return FALSE - var/brute_damage = brute_heal > burn_heal //changes repair text based on how much brute/burn was supplied - if((brute_heal > 0 && affecting.brute_dam > 0) || (burn_heal > 0 && affecting.burn_dam > 0)) - if(affecting.heal_damage(brute_heal, burn_heal, required_bodytype = BODYTYPE_ROBOTIC)) - human.update_damage_overlays() - user.visible_message(span_notice("[user] fixes some of the [brute_damage ? "dents on" : "burnt wires in"] [human]'s [affecting.name]."), \ - span_notice("You fix some of the [brute_damage ? "dents on" : "burnt wires in"] [human == user ? "your" : "[human]'s"] [affecting.name].")) - return TRUE //successful heal ///Is the passed in mob a ghost with admin powers, doesn't check for AI interact like isAdminGhost() used to diff --git a/code/modules/mob/mob_lists.dm b/code/modules/mob/mob_lists.dm index 9fd097a1fd6a4..f43f82ac24609 100644 --- a/code/modules/mob/mob_lists.dm +++ b/code/modules/mob/mob_lists.dm @@ -1,12 +1,10 @@ ///Adds the mob reference to the list and directory of all mobs. Called on Initialize(). /mob/proc/add_to_mob_list() GLOB.mob_list |= src - GLOB.mob_directory[tag] = src ///Removes the mob reference from the list and directory of all mobs. Called on Destroy(). /mob/proc/remove_from_mob_list() GLOB.mob_list -= src - GLOB.mob_directory -= tag ///Adds the mob reference to the list of all mobs alive. If mob is cliented, it adds it to the list of all living player-mobs. /mob/proc/add_to_alive_mob_list() diff --git a/code/modules/mob/mob_movement.dm b/code/modules/mob/mob_movement.dm index fc393f898032f..33a4ea12f753b 100644 --- a/code/modules/mob/mob_movement.dm +++ b/code/modules/mob/mob_movement.dm @@ -315,7 +315,7 @@ if(rebound.last_pushoff == world.time) continue if(continuous_move && !pass_allowed) - var/datum/move_loop/move/rebound_engine = DSmove_manager.processing_on(rebound, SSspacedrift) + var/datum/move_loop/move/rebound_engine = GLOB.move_manager.processing_on(rebound, SSspacedrift) // If you're moving toward it and you're both going the same direction, stop if(moving_direction == get_dir(src, pushover) && rebound_engine && moving_direction == rebound_engine.direction) continue diff --git a/code/modules/mob/mob_say.dm b/code/modules/mob/mob_say.dm index e2a840d569b64..6b8c8f9aa6b2a 100644 --- a/code/modules/mob/mob_say.dm +++ b/code/modules/mob/mob_say.dm @@ -42,6 +42,7 @@ /mob/verb/me_verb(message as text) set name = "Me" set category = "IC" + set desc = "Perform a custom emote. Leave blank to pick between an audible or a visible emote (Defaults to visible)." if(GLOB.say_disabled) //This is here to try to identify lag problems to_chat(usr, span_danger("Speech is currently admin-disabled.")) @@ -49,7 +50,7 @@ message = trim(copytext_char(sanitize(message), 1, MAX_MESSAGE_LEN)) - QUEUE_OR_CALL_VERB_FOR(VERB_CALLBACK(src, TYPE_PROC_REF(/mob, emote), "me", 1, message, TRUE), SSspeech_controller) + QUEUE_OR_CALL_VERB_FOR(VERB_CALLBACK(src, TYPE_PROC_REF(/mob, emote), "me", EMOTE_VISIBLE|EMOTE_AUDIBLE, message, TRUE), SSspeech_controller) /mob/try_speak(message, ignore_spam = FALSE, forced = null, filterproof = FALSE) var/list/filter_result @@ -105,9 +106,6 @@ if(!allow_mimes && HAS_MIND_TRAIT(src, TRAIT_MIMING)) return FALSE - if(is_muzzled()) - return FALSE - return ..() ///Speak as a dead person (ghost etc) @@ -180,7 +178,7 @@ var/customsaypos = findtext(message, "*") if(!customsaypos) return message - if (is_banned_from(ckey, "Emote")) + if (!isnull(ckey) && is_banned_from(ckey, "Emote")) return copytext(message, customsaypos + 1) mods[MODE_CUSTOM_SAY_EMOTE] = copytext(message, 1, customsaypos) message = copytext(message, customsaypos + 1) diff --git a/code/modules/mob/mob_update_icons.dm b/code/modules/mob/mob_update_icons.dm index 7da3dddce3294..a355a385d9faa 100644 --- a/code/modules/mob/mob_update_icons.dm +++ b/code/modules/mob/mob_update_icons.dm @@ -42,26 +42,25 @@ if(slot_flags & ITEM_SLOT_HANDS) update_held_items() -///Updates item slots obscured by this item -/mob/proc/update_obscured_slots(obj/item/worn_item) - var/obscured_slots = worn_item.flags_inv - if(obscured_slots & HIDEGLOVES) +///Updates item slots obscured by this item (or using an override of flags to check) +/mob/proc/update_obscured_slots(obscured_flags) + if(obscured_flags & HIDEGLOVES) update_worn_gloves(update_obscured = FALSE) - if(obscured_slots & HIDESUITSTORAGE) + if(obscured_flags & HIDESUITSTORAGE) update_suit_storage(update_obscured = FALSE) - if(obscured_slots & HIDEJUMPSUIT) + if(obscured_flags & HIDEJUMPSUIT) update_worn_undersuit(update_obscured = FALSE) - if(obscured_slots & HIDESHOES) + if(obscured_flags & HIDESHOES) update_worn_shoes(update_obscured = FALSE) - if(obscured_slots & HIDEMASK) + if(obscured_flags & HIDEMASK) update_worn_mask(update_obscured = FALSE) - if(obscured_slots & HIDEEARS) + if(obscured_flags & HIDEEARS) update_worn_ears(update_obscured = FALSE) - if(obscured_slots & HIDEEYES) + if(obscured_flags & HIDEEYES) update_worn_glasses(update_obscured = FALSE) - if(obscured_slots & HIDENECK) + if(obscured_flags & HIDENECK) update_worn_neck(update_obscured = FALSE) - if(obscured_slots & HIDEHEADGEAR) + if(obscured_flags & HIDEHEADGEAR) update_worn_head(update_obscured = FALSE) /mob/proc/update_icons() diff --git a/code/modules/mob/transform_procs.dm b/code/modules/mob/transform_procs.dm index 895df810cc4e8..5d46f3c0dc06a 100644 --- a/code/modules/mob/transform_procs.dm +++ b/code/modules/mob/transform_procs.dm @@ -67,6 +67,7 @@ transformation_timer = addtimer(CALLBACK(src, PROC_REF(finish_humanize), species), TRANSFORMATION_DURATION, TIMER_UNIQUE) + /mob/living/carbon/proc/finish_humanize(species = /datum/species/human) transformation_timer = null to_chat(src, span_boldnotice("You are now a human.")) @@ -77,6 +78,12 @@ SEND_SIGNAL(src, COMSIG_MONKEY_HUMANIZE) return src +/mob/living/carbon/human/finish_humanize(species = /datum/species/human, instant = FALSE) + underwear = "Nude" + undershirt = "Nude" + socks = "Nude" + return ..() + /mob/proc/AIize(client/preference_source, move = TRUE) var/list/turf/landmark_loc = list() @@ -140,8 +147,8 @@ new_borg.gender = gender new_borg.SetInvisibility(INVISIBILITY_NONE) - if(client) - new_borg.updatename(client) + if(client?.prefs.read_preference(/datum/preference/name/cyborg) != DEFAULT_CYBORG_NAME) + new_borg.apply_pref_name(/datum/preference/name/cyborg, client) if(mind) //TODO //TODO WHAT if(!transfer_after) @@ -281,6 +288,29 @@ qdel(src) return new_corgi +/** + * Turns the source atom into a crab crab, the peak of evolutionary design. + */ +/mob/living/carbon/human/proc/crabize() + if(HAS_TRAIT(src, TRAIT_NO_TRANSFORM)) + return + ADD_TRAIT(src, TRAIT_NO_TRANSFORM, PERMANENT_TRANSFORMATION_TRAIT) + Paralyze(1, ignore_canstun = TRUE) + for(var/obj/item/objeto in src) + dropItemToGround(objeto) + regenerate_icons() + icon = null + SetInvisibility(INVISIBILITY_MAXIMUM) + + var/mob/living/basic/crab/new_crab = new (loc) + new_crab.set_combat_mode(TRUE) // snip snip + if(mind) + mind.transfer_to(new_crab) + + to_chat(new_crab, span_boldnotice("You have evolved into a crab!")) + qdel(src) + return new_crab + /mob/living/carbon/proc/gorillize() if(HAS_TRAIT(src, TRAIT_NO_TRANSFORM)) return @@ -289,7 +319,7 @@ SSblackbox.record_feedback("amount", "gorillas_created", 1) - var/Itemlist = get_equipped_items(include_pockets = TRUE) + var/Itemlist = get_equipped_items(INCLUDE_POCKETS) Itemlist += held_items for(var/obj/item/W in Itemlist) dropItemToGround(W, TRUE) diff --git a/code/modules/mob_spawn/corpses/nanotrasen_corpses.dm b/code/modules/mob_spawn/corpses/nanotrasen_corpses.dm index 0940815f1fc56..0ed30e5a5215d 100644 --- a/code/modules/mob_spawn/corpses/nanotrasen_corpses.dm +++ b/code/modules/mob_spawn/corpses/nanotrasen_corpses.dm @@ -25,7 +25,7 @@ suit = /obj/item/clothing/suit/armor/bulletproof ears = /obj/item/radio/headset/heads/captain glasses = /obj/item/clothing/glasses/eyepatch - mask = /obj/item/clothing/mask/cigarette/cigar/cohiba + mask = /obj/item/cigarette/cigar/cohiba head = /obj/item/clothing/head/hats/centhat gloves = /obj/item/clothing/gloves/tackler/combat shoes = /obj/item/clothing/shoes/combat/swat diff --git a/code/modules/mob_spawn/corpses/nonhuman_corpses.dm b/code/modules/mob_spawn/corpses/nonhuman_corpses.dm index 5145c3cc6ed5d..571bac86e7cae 100644 --- a/code/modules/mob_spawn/corpses/nonhuman_corpses.dm +++ b/code/modules/mob_spawn/corpses/nonhuman_corpses.dm @@ -20,7 +20,7 @@ /obj/effect/mob_spawn/corpse/slime mob_type = /mob/living/basic/slime icon = 'icons/mob/simple/slimes.dmi' - icon_state = "grey baby slime" //sets the icon in the map editor + icon_state = "grey-baby-dead" //sets the icon in the map editor ///the color of the slime you're spawning. var/slime_species = /datum/slime_type/grey diff --git a/code/modules/mob_spawn/ghost_roles/fugitive_hunter_roles.dm b/code/modules/mob_spawn/ghost_roles/fugitive_hunter_roles.dm index 5b9e043349ea0..0165b27f21a1a 100644 --- a/code/modules/mob_spawn/ghost_roles/fugitive_hunter_roles.dm +++ b/code/modules/mob_spawn/ghost_roles/fugitive_hunter_roles.dm @@ -96,3 +96,18 @@ if I assisted them with my 'flesh-gaze'. They're a bunch of freaks, but at least they leave me be after I'm done helping them..." back_story = HUNTER_PACK_PSYKER outfit = /datum/outfit/psyker_seer + +/obj/effect/mob_spawn/ghost_role/human/fugitive/mi13 + name = "top-secret pod" + desc = "You don't have the classification to know what this pod contains or what its purpose is." + icon = 'icons/obj/machines/sleeper.dmi' + icon_state = "sleeper_s" + prompt_name = "a MI13 agent" + you_are_text = "I am an agent sent by MI13." + flavour_text = "Your mission is to infiltrate the space around SS13 and capture the fugitives on board, dead or alive. Your shuttle has been disguised as an ordinary food truck to help you remain undetected. \ + This is a stealth mission in enemy territory. Reinforcements will not be sent to save you. Microbombs have been implanted in case of capture. Do not disappoint." + back_story = HUNTER_PACK_MI13 + outfit = /datum/outfit/mi13_hunter + +/obj/effect/mob_spawn/ghost_role/human/fugitive/mi13/chef + outfit = /datum/outfit/mi13_hunter/chef diff --git a/code/modules/mob_spawn/ghost_roles/golem_roles.dm b/code/modules/mob_spawn/ghost_roles/golem_roles.dm index b3475e9207f83..5fc643bffa622 100644 --- a/code/modules/mob_spawn/ghost_roles/golem_roles.dm +++ b/code/modules/mob_spawn/ghost_roles/golem_roles.dm @@ -36,8 +36,7 @@ if(forced_name || !iscarbon(spawned_mob)) return ..() - var/datum/species/golem/golem_species = new() - forced_name = golem_species.random_name() + forced_name = generate_random_name_species_based(spawned_mob.gender, TRUE, species_type = /datum/species/golem) return ..() /obj/effect/mob_spawn/ghost_role/human/golem/special(mob/living/new_spawn, mob/mob_possessor) diff --git a/code/modules/mob_spawn/ghost_roles/mining_roles.dm b/code/modules/mob_spawn/ghost_roles/mining_roles.dm index 208a74a3edbf5..00ff1b5a8fd1e 100644 --- a/code/modules/mob_spawn/ghost_roles/mining_roles.dm +++ b/code/modules/mob_spawn/ghost_roles/mining_roles.dm @@ -34,7 +34,7 @@ if(3) flavour_text += "you were a doctor on one of Nanotrasen's space stations, but you left behind that damn corporation's tyranny and everything it stood for. From a metaphorical hell \ to a literal one, you find yourself nonetheless missing the recycled air and warm floors of what you left behind... but you'd still rather be here than there." - outfit.uniform = /obj/item/clothing/under/rank/medical/scrubs/blue + outfit.uniform = /obj/item/clothing/under/rank/medical/doctor outfit.suit = /obj/item/clothing/suit/toggle/labcoat outfit.back = /obj/item/storage/backpack/medic if(4) @@ -194,9 +194,9 @@ /obj/structure/ash_walker_eggshell/Destroy() if(!egg) return ..() - var/mob/living/carbon/human/yolk = new /mob/living/carbon/human/(get_turf(src)) - yolk.fully_replace_character_name(null,random_unique_lizard_name(gender)) + var/mob/living/carbon/human/yolk = new(get_turf(src)) yolk.set_species(/datum/species/lizard/ashwalker) + yolk.fully_replace_character_name(null, yolk.generate_random_mob_name(TRUE)) yolk.underwear = "Nude" yolk.equipOutfit(/datum/outfit/ashwalker)//this is an authentic mess we're making yolk.update_body() @@ -235,7 +235,7 @@ /obj/effect/mob_spawn/ghost_role/human/ash_walker/special(mob/living/carbon/human/spawned_human) . = ..() - spawned_human.fully_replace_character_name(null,random_unique_lizard_name(gender)) + spawned_human.fully_replace_character_name(null, spawned_human.generate_random_mob_name(TRUE)) to_chat(spawned_human, "Drag the corpses of men and beasts to your nest. It will absorb them to create more of your kind. Invade the strange structure of the outsiders if you must. Do not cause unnecessary destruction, as littering the wastes with ugly wreckage is certain to not gain you favor. Glory to the Necropolis!") spawned_human.mind.add_antag_datum(/datum/antagonist/ashwalker, team) @@ -283,6 +283,7 @@ important_text = "The base is rigged with explosives, DO NOT abandon it or let it fall into enemy hands!" outfit = /datum/outfit/lavaland_syndicate spawner_job_path = /datum/job/lavaland_syndicate + deletes_on_zero_uses_left = FALSE /obj/effect/mob_spawn/ghost_role/human/lavaland_syndicate/special(mob/living/new_spawn) . = ..() @@ -320,6 +321,21 @@ mask = /obj/item/clothing/mask/chameleon/gps r_hand = /obj/item/melee/energy/sword/saber +/datum/outfit/lavaland_syndicate/comms/icemoon + name = "Icemoon Syndicate Comms Agent" + mask = /obj/item/clothing/mask/chameleon + shoes = /obj/item/clothing/shoes/winterboots/ice_boots/eva + /obj/item/clothing/mask/chameleon/gps/Initialize(mapload) . = ..() AddComponent(/datum/component/gps, "Encrypted Signal") + +///Icemoon Syndicate Comms Agent + +/obj/effect/mob_spawn/ghost_role/human/lavaland_syndicate/comms/icemoon + name = "Icemoon Comms Agent" + prompt_name = "a syndicate comms agent" + you_are_text = "You are a syndicate comms agent, assigned in an underground secret listening post close to your enemy's facility." + flavour_text = "Unfortunately, your hated enemy, Nanotrasen, has begun mining in this sector. Monitor enemy activity as best you can, and try to keep a low profile. Use the communication equipment to provide support to any field agents, and sow disinformation to throw Nanotrasen off your trail. Do not let the outpost fall into enemy hands!" + important_text = "Do NOT let the outpost fall into enemy hands" + outfit = /datum/outfit/lavaland_syndicate/comms/icemoon diff --git a/code/modules/mob_spawn/ghost_roles/space_roles.dm b/code/modules/mob_spawn/ghost_roles/space_roles.dm index 764d20c9a76c1..79d028bdbcb27 100644 --- a/code/modules/mob_spawn/ghost_roles/space_roles.dm +++ b/code/modules/mob_spawn/ghost_roles/space_roles.dm @@ -181,6 +181,6 @@ ears = /obj/item/radio/headset/syndicate/alt/leader glasses = /obj/item/clothing/glasses/thermal/eyepatch head = /obj/item/clothing/head/hats/hos/cap/syndicate - mask = /obj/item/clothing/mask/cigarette/cigar/havana + mask = /obj/item/cigarette/cigar/havana l_pocket = /obj/item/melee/energy/sword/saber/red r_pocket = /obj/item/melee/baton/telescopic diff --git a/code/modules/mob_spawn/ghost_roles/spider_roles.dm b/code/modules/mob_spawn/ghost_roles/spider_roles.dm index 102a73d6f92f4..0ee4435a9e461 100644 --- a/code/modules/mob_spawn/ghost_roles/spider_roles.dm +++ b/code/modules/mob_spawn/ghost_roles/spider_roles.dm @@ -155,7 +155,7 @@ cluster_type = /obj/structure/spider/eggcluster/abnormal potentialspawns = list( /mob/living/basic/spider/growing/spiderling/tank, - /mob/living/basic/spider/growing/spiderling/breacher, + /mob/living/basic/spider/growing/spiderling/viper, ) flash_window = TRUE @@ -166,7 +166,7 @@ cluster_type = /obj/structure/spider/eggcluster/enriched potentialspawns = list( /mob/living/basic/spider/growing/spiderling/tarantula, - /mob/living/basic/spider/growing/spiderling/viper, + /mob/living/basic/spider/growing/spiderling/breacher, /mob/living/basic/spider/growing/spiderling/midwife, ) flash_window = TRUE diff --git a/code/modules/mob_spawn/mob_spawn.dm b/code/modules/mob_spawn/mob_spawn.dm index 086254aae3881..3337a15b441c5 100644 --- a/code/modules/mob_spawn/mob_spawn.dm +++ b/code/modules/mob_spawn/mob_spawn.dm @@ -59,26 +59,15 @@ spawned_human.underwear = "Nude" spawned_human.undershirt = "Nude" spawned_human.socks = "Nude" + randomize_human_normie(spawned_human) if(hairstyle) - spawned_human.hairstyle = hairstyle - else - spawned_human.hairstyle = random_hairstyle(spawned_human.gender) + spawned_human.set_hairstyle(hairstyle, update = FALSE) if(facial_hairstyle) - spawned_human.facial_hairstyle = facial_hairstyle - else - spawned_human.facial_hairstyle = random_facial_hairstyle(spawned_human.gender) + spawned_human.set_facial_hairstyle(facial_hairstyle, update = FALSE) if(haircolor) - spawned_human.hair_color = haircolor - else - spawned_human.hair_color = "#[random_color()]" + spawned_human.set_haircolor(haircolor, update = FALSE) if(facial_haircolor) - spawned_human.facial_hair_color = facial_haircolor - else - spawned_human.facial_hair_color = "#[random_color()]" - if(skin_tone) - spawned_human.skin_tone = skin_tone - else - spawned_human.skin_tone = random_skin_tone() + spawned_human.set_facial_haircolor(facial_haircolor, update = FALSE) spawned_human.update_body(is_creating = TRUE) /obj/effect/mob_spawn/proc/name_mob(mob/living/spawned_mob, forced_name) @@ -139,6 +128,10 @@ /// Typepath indicating the kind of job datum this ghost role will have. PLEASE inherit this with a new job datum, it's not hard. jobs come with policy configs. var/spawner_job_path = /datum/job/ghost_role + /// Whether this offers a temporary body or not. Essentially, you'll be able to reenter your body after using this spawner. + var/temp_body = FALSE + + /obj/effect/mob_spawn/ghost_role/Initialize(mapload) . = ..() SSpoints_of_interest.make_point_of_interest(src) @@ -165,7 +158,7 @@ if(prompt_ghost) var/prompt = "Become [prompt_name]?" - if(user.can_reenter_corpse && user.mind) + if(!temp_body && user.can_reenter_corpse && user.mind) prompt += " (Warning, You can no longer be revived!)" var/ghost_role = tgui_alert(usr, prompt, buttons = list("Yes", "No"), timeout = 10 SECONDS) if(ghost_role != "Yes" || !loc || QDELETED(user)) @@ -213,7 +206,8 @@ user.log_message("became a [prompt_name].", LOG_GAME) uses -= 1 // Remove a use before trying to spawn to prevent strangeness like the spawner trying to spawn more mobs than it should be able to - user.mind = null // dissassociate mind, don't let it follow us to the next life + if(!temp_body) + user.mind = null // dissassociate mind, don't let it follow us to the next life var/created = create(user) LAZYREMOVE(ckeys_trying_to_spawn, user_ckey) // We do this AFTER the create() so that we're basically sure that the user won't be in their ghost body anymore, so they can't click on the spawner again. diff --git a/code/modules/mod/adding_new_mod.md b/code/modules/mod/adding_new_mod.md index b0bf12486c14a..8252822cf6c25 100644 --- a/code/modules/mod/adding_new_mod.md +++ b/code/modules/mod/adding_new_mod.md @@ -82,16 +82,15 @@ So, now that we have our theme, we want to add a skin to it (or another theme of armor_type = /datum/armor/modtheme_psychological complexity_max = DEFAULT_MAX_COMPLEXITY - 7 charge_drain = DEFAULT_CHARGE_DRAIN * 0.5 - skins = list( + variants = list( "psychological" = list( - HELMET_LAYER = null, - HELMET_FLAGS = list( + /obj/item/clothing/head/mod = list( ), - CHESTPLATE_FLAGS = list( + /obj/item/clothing/suit/mod = list( ), - GAUNTLETS_FLAGS = list( + /obj/item/clothing/gloves/mod = list( ), - BOOTS_FLAGS = list( + /obj/item/clothing/shoes/mod = list( ), ), ) @@ -101,8 +100,7 @@ We now have a psychological skin, this will apply the psychological icons to eve For example, if our helmet's icon covers the full head (like the research skin), we want to do something like this. ```dm - HELMET_LAYER = null, - HELMET_FLAGS = list( + /obj/item/clothing/head/mod = list( UNSEALED_CLOTHING = SNUG_FIT|THICKMATERIAL, SEALED_CLOTHING = STOPSPRESSUREDAMAGE|BLOCK_GAS_SMOKE_EFFECT, UNSEALED_INVISIBILITY = HIDEFACIALHAIR|HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDESNOUT, @@ -113,8 +111,8 @@ For example, if our helmet's icon covers the full head (like the research skin), Otherwise, with an open helmet that becomes closed (like the engineering skin), we'd do this. ```dm - HELMET_LAYER = NECK_LAYER, - HELMET_FLAGS = list( + /obj/item/clothing/head/mod = list( + UNSEALED_LAYER = NECK_LAYER UNSEALED_CLOTHING = SNUG_FIT, SEALED_CLOTHING = THICKMATERIAL|STOPSPRESSUREDAMAGE, UNSEALED_INVISIBILITY = HIDEFACIALHAIR, @@ -137,47 +135,46 @@ There are specific cases of helmets that semi-cover the head, like the cosmohonk armor_type = /datum/armor/modtheme_psychological complexity_max = DEFAULT_MAX_COMPLEXITY - 7 charge_drain = DEFAULT_CHARGE_DRAIN * 0.5 - skins = list( + variants = list( "psychological" = list( - HELMET_LAYER = NECK_LAYER, - HELMET_FLAGS = list( + /obj/item/clothing/head/mod = list( + UNSEALED_LAYER = NECK_LAYER UNSEALED_CLOTHING = SNUG_FIT, SEALED_CLOTHING = THICKMATERIAL|STOPSPRESSUREDAMAGE, UNSEALED_INVISIBILITY = HIDEFACIALHAIR, SEALED_INVISIBILITY = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDESNOUT, SEALED_COVER = HEADCOVERSMOUTH|HEADCOVERSEYES|PEPPERPROOF, ), - CHESTPLATE_FLAGS = list( + /obj/item/clothing/suit/mod = list( UNSEALED_CLOTHING = THICKMATERIAL, SEALED_CLOTHING = STOPSPRESSUREDAMAGE, SEALED_INVISIBILITY = HIDEJUMPSUIT, ), - GAUNTLETS_FLAGS = list( + /obj/item/clothing/gloves/mod = list( UNSEALED_CLOTHING = THICKMATERIAL, SEALED_CLOTHING = STOPSPRESSUREDAMAGE, ), - BOOTS_FLAGS = list( + /obj/item/clothing/shoes/mod = list( UNSEALED_CLOTHING = THICKMATERIAL, SEALED_CLOTHING = STOPSPRESSUREDAMAGE, ), "psychotherapeutic" = list( - HELMET_LAYER = null, - HELMET_FLAGS = list( + /obj/item/clothing/head/mod = list( UNSEALED_CLOTHING = SNUG_FIT|THICKMATERIAL, SEALED_CLOTHING = STOPSPRESSUREDAMAGE, UNSEALED_INVISIBILITY = HIDEFACIALHAIR|HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDESNOUT, UNSEALED_COVER = HEADCOVERSMOUTH|HEADCOVERSEYES|PEPPERPROOF, ), - CHESTPLATE_FLAGS = list( + /obj/item/clothing/suit/mod = list( UNSEALED_CLOTHING = THICKMATERIAL, SEALED_CLOTHING = STOPSPRESSUREDAMAGE, SEALED_INVISIBILITY = HIDEJUMPSUIT, ), - GAUNTLETS_FLAGS = list( + /obj/item/clothing/gloves/mod = list( UNSEALED_CLOTHING = THICKMATERIAL, SEALED_CLOTHING = STOPSPRESSUREDAMAGE, ), - BOOTS_FLAGS = list( + /obj/item/clothing/shoes/mod = list( UNSEALED_CLOTHING = THICKMATERIAL, SEALED_CLOTHING = STOPSPRESSUREDAMAGE, ), @@ -207,7 +204,7 @@ As we want this effect to be on demand, we probably want this to be an usable mo - Usable: You can use these for a one time effect. - Active: You can only have one selected at a time. It gives you a special click effect. -As we have an usable module, we want to set a cooldown time. All modules are also incompatible with themselves, have a specific power cost and complexity varying on how powerful they are, so let's update our definition, and also add a new variable for how much brain damage we'll heal. +As we have an usable module, we want to set a cooldown time. All modules are also incompatible with themselves, have a specific power cost and complexity varying on how powerful they are, and are equippable to certain slots, so let's update our definition, and also add a new variable for how much brain damage we'll heal. ```dm /obj/item/mod/module/neuron_healer @@ -220,25 +217,20 @@ As we have an usable module, we want to set a cooldown time. All modules are als use_energy_cost = DEFAULT_CHARGE_DRAIN incompatible_modules = list(/obj/item/mod/module/neuron_healer) cooldown_time = 15 SECONDS + required_slot = list(ITEM_SLOT_HEAD) var/brain_damage_healed = 25 ``` -Now, we want to override the on_use proc for our new effect. We want to make sure the use checks passed from parent. You can read about most procs and variables by reading [this](modules/_module.dm) +Now, we want to override the on_use proc for our new effect. You can read about most procs and variables by reading [this](modules/_module.dm) ```dm /obj/item/mod/module/neuron_healer/on_use() - . = ..() - if(!.) - return ``` After this, we want to put our special code, a basic effect of healing all mobs nearby for their brain damage and creating a beam to them. ```dm /obj/item/mod/module/neuron_healer/on_use() - . = ..() - if(!.) - return for(var/mob/living/carbon/carbon_mob in range(5, src)) if(carbon_mob == mod.wearer) continue @@ -272,47 +264,46 @@ Now we want to add it to the psychological theme, which is very simple, finishin complexity_max = DEFAULT_MAX_COMPLEXITY - 7 charge_drain = DEFAULT_CHARGE_DRAIN * 0.5 inbuilt_modules = list(/obj/item/mod/module/neuron_healer/advanced) - skins = list( + variants = list( "psychological" = list( - HELMET_LAYER = NECK_LAYER, - HELMET_FLAGS = list( + /obj/item/clothing/head/mod = list( + UNSEALED_LAYER = NECK_LAYER UNSEALED_CLOTHING = SNUG_FIT, SEALED_CLOTHING = THICKMATERIAL|STOPSPRESSUREDAMAGE, UNSEALED_INVISIBILITY = HIDEFACIALHAIR, SEALED_INVISIBILITY = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDESNOUT, SEALED_COVER = HEADCOVERSMOUTH|HEADCOVERSEYES|PEPPERPROOF, ), - CHESTPLATE_FLAGS = list( + /obj/item/clothing/suit/mod = list( UNSEALED_CLOTHING = THICKMATERIAL, SEALED_CLOTHING = STOPSPRESSUREDAMAGE, SEALED_INVISIBILITY = HIDEJUMPSUIT, ), - GAUNTLETS_FLAGS = list( + /obj/item/clothing/gloves/mod = list( UNSEALED_CLOTHING = THICKMATERIAL, SEALED_CLOTHING = STOPSPRESSUREDAMAGE, ), - BOOTS_FLAGS = list( + /obj/item/clothing/shoes/mod = list( UNSEALED_CLOTHING = THICKMATERIAL, SEALED_CLOTHING = STOPSPRESSUREDAMAGE, ), "psychotherapeutic" = list( - HELMET_LAYER = null, - HELMET_FLAGS = list( + /obj/item/clothing/head/mod = list( UNSEALED_CLOTHING = SNUG_FIT|THICKMATERIAL, SEALED_CLOTHING = STOPSPRESSUREDAMAGE, UNSEALED_INVISIBILITY = HIDEFACIALHAIR|HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDESNOUT, UNSEALED_COVER = HEADCOVERSMOUTH|HEADCOVERSEYES|PEPPERPROOF, ), - CHESTPLATE_FLAGS = list( + /obj/item/clothing/suit/mod = list( UNSEALED_CLOTHING = THICKMATERIAL, SEALED_CLOTHING = STOPSPRESSUREDAMAGE, SEALED_INVISIBILITY = HIDEJUMPSUIT, ), - GAUNTLETS_FLAGS = list( + /obj/item/clothing/gloves/mod = list( UNSEALED_CLOTHING = THICKMATERIAL, SEALED_CLOTHING = STOPSPRESSUREDAMAGE, ), - BOOTS_FLAGS = list( + /obj/item/clothing/shoes/mod = list( UNSEALED_CLOTHING = THICKMATERIAL, SEALED_CLOTHING = STOPSPRESSUREDAMAGE, ), diff --git a/code/modules/mod/mod_activation.dm b/code/modules/mod/mod_activation.dm index f95125d2a6e17..237e151bcb2c0 100644 --- a/code/modules/mod/mod_activation.dm +++ b/code/modules/mod/mod_activation.dm @@ -6,7 +6,8 @@ return var/list/display_names = list() var/list/items = list() - for(var/obj/item/part as anything in mod_parts) + var/list/parts = get_parts() + for(var/obj/item/part as anything in parts) display_names[part.name] = REF(part) var/image/part_image = image(icon = part.icon, icon_state = part.icon_state) if(part.loc != src) @@ -16,17 +17,17 @@ if(!pick) return var/part_reference = display_names[pick] - var/obj/item/part = locate(part_reference) in mod_parts + var/obj/item/part = locate(part_reference) in parts if(!istype(part) || user.incapacitated()) return if(active || activating) balloon_alert(user, "deactivate the suit first!") playsound(src, 'sound/machines/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE) return - var/parts_to_check = mod_parts - part + var/parts_to_check = parts - part if(part.loc == src) deploy(user, part) - on_mod_deployed(user) + SEND_SIGNAL(src, COMSIG_MOD_DEPLOYED, user) for(var/obj/item/checking_part as anything in parts_to_check) if(checking_part.loc != src) continue @@ -34,7 +35,7 @@ break else retract(user, part) - on_mod_retracted(user) + SEND_SIGNAL(src, COMSIG_MOD_RETRACTED, user) for(var/obj/item/checking_part as anything in parts_to_check) if(checking_part.loc == src) continue @@ -48,28 +49,29 @@ playsound(src, 'sound/machines/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE) return FALSE var/deploy = TRUE - for(var/obj/item/part as anything in mod_parts) + for(var/obj/item/part as anything in get_parts()) if(part.loc == src) continue deploy = FALSE break - for(var/obj/item/part as anything in mod_parts) + for(var/obj/item/part as anything in get_parts()) if(deploy && part.loc == src) deploy(null, part) else if(!deploy && part.loc != src) retract(null, part) - wearer.visible_message(span_notice("[wearer]'s [src] [deploy ? "deploys" : "retracts"] its' parts with a mechanical hiss."), - span_notice("[src] [deploy ? "deploys" : "retracts"] its' parts with a mechanical hiss."), + wearer.visible_message(span_notice("[wearer]'s [src] [deploy ? "deploys" : "retracts"] its parts with a mechanical hiss."), + span_notice("[src] [deploy ? "deploys" : "retracts"] its parts with a mechanical hiss."), span_hear("You hear a mechanical hiss.")) playsound(src, 'sound/mecha/mechmove03.ogg', 25, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) if(deploy) - on_mod_deployed(user) + SEND_SIGNAL(src, COMSIG_MOD_DEPLOYED, user) else - on_mod_retracted(user) + SEND_SIGNAL(src, COMSIG_MOD_RETRACTED, user) return TRUE /// Deploys a part of the suit onto the user. /obj/item/mod/control/proc/deploy(mob/user, obj/item/part) + var/datum/mod_part/part_datum = get_part_datum(part) if(!wearer) playsound(src, 'sound/machines/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE) return FALSE // pAI is trying to deploy it from your hands @@ -78,10 +80,10 @@ return FALSE balloon_alert(user, "[part.name] already deployed!") playsound(src, 'sound/machines/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE) - if(part in overslotting_parts) + if(part_datum.can_overslot) var/obj/item/overslot = wearer.get_item_by_slot(part.slot_flags) if(overslot) - overslotting_parts[part] = overslot + part_datum.overslotting = overslot wearer.transferItemToLoc(overslot, part, force = TRUE) RegisterSignal(part, COMSIG_ATOM_EXITED, PROC_REF(on_overslot_exit)) if(wearer.equip_to_slot_if_possible(part, part.slot_flags, qdel_on_fail = FALSE, disable_warning = TRUE)) @@ -92,6 +94,7 @@ span_notice("[part] deploy[part.p_s()] with a mechanical hiss."), span_hear("You hear a mechanical hiss.")) playsound(src, 'sound/mecha/mechmove03.ogg', 25, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) + SEND_SIGNAL(src, COMSIG_MOD_PART_DEPLOYED, user, part) return TRUE else if(!user) @@ -102,6 +105,7 @@ /// Retract a part of the suit from the user. /obj/item/mod/control/proc/retract(mob/user, obj/item/part) + var/datum/mod_part/part_datum = get_part_datum(part) if(part.loc == src) if(!user) return FALSE @@ -109,12 +113,13 @@ playsound(src, 'sound/machines/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE) REMOVE_TRAIT(part, TRAIT_NODROP, MOD_TRAIT) wearer.transferItemToLoc(part, src, force = TRUE) - if(overslotting_parts[part]) + if(part_datum.overslotting) UnregisterSignal(part, COMSIG_ATOM_EXITED) - var/obj/item/overslot = overslotting_parts[part] - if(!wearer.equip_to_slot_if_possible(overslot, overslot.slot_flags, qdel_on_fail = FALSE, disable_warning = TRUE)) + var/obj/item/overslot = part_datum.overslotting + if(!QDELING(wearer) && !wearer.equip_to_slot_if_possible(overslot, overslot.slot_flags, qdel_on_fail = FALSE, disable_warning = TRUE)) wearer.dropItemToGround(overslot, force = TRUE, silent = TRUE) - overslotting_parts[part] = null + part_datum.overslotting = null + SEND_SIGNAL(src, COMSIG_MOD_PART_RETRACTED, user, part) if(!user) return wearer.visible_message(span_notice("[wearer]'s [part.name] retract[part.p_s()] back into [src] with a mechanical hiss."), @@ -122,7 +127,7 @@ span_hear("You hear a mechanical hiss.")) playsound(src, 'sound/mecha/mechmove03.ogg', 25, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) -/// Starts the activation sequence, where parts of the suit activate one by one until the whole suit is on +/// Starts the activation sequence, where parts of the suit activate one by one until the whole suit is on. /obj/item/mod/control/proc/toggle_activate(mob/user, force_deactivate = FALSE) if(!wearer) if(!force_deactivate) @@ -132,7 +137,7 @@ if(!force_deactivate && (SEND_SIGNAL(src, COMSIG_MOD_ACTIVATE, user) & MOD_CANCEL_ACTIVATE)) playsound(src, 'sound/machines/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE) return FALSE - for(var/obj/item/part as anything in mod_parts) + for(var/obj/item/part as anything in get_parts()) if(!force_deactivate && part.loc == src) balloon_alert(user, "deploy all parts first!") playsound(src, 'sound/machines/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE) @@ -157,33 +162,21 @@ for(var/obj/item/mod/module/module as anything in modules) if(!module.active || (module.allow_flags & MODULE_ALLOW_INACTIVE)) continue - module.on_deactivation(display_message = FALSE) - mod_link.end_call() + module.deactivate(display_message = FALSE) activating = TRUE + mod_link.end_call() to_chat(wearer, span_notice("MODsuit [active ? "shutting down" : "starting up"].")) - if (ai_assistant) - to_chat(ai_assistant, span_notice("MODsuit [active ? "shutting down" : "starting up"].")) - if(do_after(wearer, activation_step_time, wearer, MOD_ACTIVATION_STEP_FLAGS, extra_checks = CALLBACK(src, PROC_REF(has_wearer)), hidden = TRUE)) - to_chat(wearer, span_notice("[boots] [active ? "relax their grip on your legs" : "seal around your feet"].")) - playsound(src, 'sound/mecha/mechmove03.ogg', 25, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) - seal_part(boots, seal = !active) - if(do_after(wearer, activation_step_time, wearer, MOD_ACTIVATION_STEP_FLAGS, extra_checks = CALLBACK(src, PROC_REF(has_wearer)), hidden = TRUE)) - to_chat(wearer, span_notice("[gauntlets] [active ? "become loose around your fingers" : "tighten around your fingers and wrists"].")) - playsound(src, 'sound/mecha/mechmove03.ogg', 25, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) - seal_part(gauntlets, seal = !active) - if(do_after(wearer, activation_step_time, wearer, MOD_ACTIVATION_STEP_FLAGS, extra_checks = CALLBACK(src, PROC_REF(has_wearer)), hidden = TRUE)) - to_chat(wearer, span_notice("[chestplate] [active ? "releases your chest" : "cinches tightly against your chest"].")) - playsound(src, 'sound/mecha/mechmove03.ogg', 25, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) - seal_part(chestplate, seal = !active) - if(do_after(wearer, activation_step_time, wearer, MOD_ACTIVATION_STEP_FLAGS, extra_checks = CALLBACK(src, PROC_REF(has_wearer)), hidden = TRUE)) - to_chat(wearer, span_notice("[helmet] hisses [active ? "open" : "closed"].")) - playsound(src, 'sound/mecha/mechmove03.ogg', 25, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) - seal_part(helmet, seal = !active) - if(do_after(wearer, activation_step_time, wearer, MOD_ACTIVATION_STEP_FLAGS, extra_checks = CALLBACK(src, PROC_REF(has_wearer)), hidden = TRUE)) + for(var/obj/item/part as anything in get_parts()) + var/datum/mod_part/part_datum = get_part_datum(part) + if(do_after(wearer, activation_step_time, wearer, MOD_ACTIVATION_STEP_FLAGS, extra_checks = CALLBACK(src, PROC_REF(get_wearer)), hidden = TRUE)) + to_chat(wearer, span_notice("[part] [active ? part_datum.unsealed_message : part_datum.sealed_message].")) + playsound(src, 'sound/mecha/mechmove03.ogg', 25, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) + seal_part(part, is_sealed = !active) + if(do_after(wearer, activation_step_time, wearer, MOD_ACTIVATION_STEP_FLAGS, extra_checks = CALLBACK(src, PROC_REF(get_wearer)), hidden = TRUE)) to_chat(wearer, span_notice("Systems [active ? "shut down. Parts unsealed. Goodbye" : "started up. Parts sealed. Welcome"], [wearer].")) if(ai_assistant) to_chat(ai_assistant, span_notice("SYSTEMS [active ? "DEACTIVATED. GOODBYE" : "ACTIVATED. WELCOME"]: \"[ai_assistant]\"")) - finish_activation(on = !active) + finish_activation(is_on = !active) if(active) playsound(src, 'sound/machines/synth_yes.ogg', 50, TRUE, SHORT_RANGE_SOUND_EXTRARANGE, frequency = 6000) if(!malfunctioning) @@ -194,16 +187,18 @@ SEND_SIGNAL(src, COMSIG_MOD_TOGGLED, user) return TRUE -///Seals or unseals the given part -/obj/item/mod/control/proc/seal_part(obj/item/clothing/part, seal) - if(seal) +///Seals or unseals the given part. +/obj/item/mod/control/proc/seal_part(obj/item/clothing/part, is_sealed) + var/datum/mod_part/part_datum = get_part_datum(part) + part_datum.sealed = is_sealed + if(part_datum.sealed) part.icon_state = "[skin]-[part.base_icon_state]-sealed" part.clothing_flags |= part.visor_flags part.flags_inv |= part.visor_flags_inv part.flags_cover |= part.visor_flags_cover part.heat_protection = initial(part.heat_protection) part.cold_protection = initial(part.cold_protection) - part.alternate_worn_layer = null + part.alternate_worn_layer = part_datum.sealed_layer else part.icon_state = "[skin]-[part.base_icon_state]" part.flags_cover &= ~part.visor_flags_cover @@ -211,26 +206,17 @@ part.clothing_flags &= ~part.visor_flags part.heat_protection = NONE part.cold_protection = NONE - part.alternate_worn_layer = mod_parts[part] - if(part == boots) - wearer.update_worn_shoes() - if(part == gauntlets) - wearer.update_worn_gloves() - if(part == chestplate) - wearer.update_worn_oversuit() - wearer.update_worn_undersuit() - if(part == helmet) - wearer.update_worn_head() - wearer.update_worn_mask() - wearer.update_worn_glasses() - wearer.update_body_parts() - // Close internal air tank if MOD helmet is unsealed and was the only breathing apparatus. - if (!seal && wearer?.invalid_internals()) - wearer.cutoff_internals() + part.alternate_worn_layer = part_datum.unsealed_layer + wearer.update_clothing(part.slot_flags) + wearer.update_obscured_slots(part.visor_flags_inv) + if((part.clothing_flags & (MASKINTERNALS|HEADINTERNALS)) && wearer.invalid_internals()) + wearer.cutoff_internals() /// Finishes the suit's activation -/obj/item/mod/control/proc/finish_activation(on) - active = on +/obj/item/mod/control/proc/finish_activation(is_on) + var/datum/mod_part/part_datum = get_part_datum(src) + part_datum.sealed = is_on + active = is_on if(active) for(var/obj/item/mod/module/module as anything in modules) module.on_suit_activation() @@ -245,22 +231,13 @@ /// Quickly deploys all the suit parts and if successful, seals them and turns on the suit. Intended mostly for outfits. /obj/item/mod/control/proc/quick_activation() var/seal = TRUE - for(var/obj/item/part as anything in mod_parts) + for(var/obj/item/part as anything in get_parts()) if(!deploy(null, part)) seal = FALSE if(!seal) return - for(var/obj/item/part as anything in mod_parts) - seal_part(part, seal = TRUE) - finish_activation(on = TRUE) - -/obj/item/mod/control/proc/has_wearer() - return wearer - -/obj/item/mod/control/proc/on_mod_deployed(mob/user) - SEND_SIGNAL(src, COMSIG_MOD_DEPLOYED, user) - -/obj/item/mod/control/proc/on_mod_retracted(mob/user) - SEND_SIGNAL(src, COMSIG_MOD_RETRACTED, user) + for(var/obj/item/part as anything in get_parts()) + seal_part(part, is_sealed = TRUE) + finish_activation(is_on = TRUE) #undef MOD_ACTIVATION_STEP_FLAGS diff --git a/code/modules/mod/mod_control.dm b/code/modules/mod/mod_control.dm index 1dd7fceae3dd2..350c2fabc3069 100644 --- a/code/modules/mod/mod_control.dm +++ b/code/modules/mod/mod_control.dm @@ -13,6 +13,7 @@ base_icon_state = "control" w_class = WEIGHT_CLASS_BULKY slot_flags = ITEM_SLOT_BACK + interaction_flags_mouse_drop = NEED_HANDS strip_delay = 10 SECONDS armor_type = /datum/armor/none actions_types = list( @@ -30,6 +31,7 @@ min_cold_protection_temperature = SPACE_SUIT_MIN_TEMP_PROTECT siemens_coefficient = 0.5 alternate_worn_layer = HANDS_LAYER+0.1 //we want it to go above generally everything, but not hands + interaction_flags_click = NEED_DEXTERITY|NEED_HANDS|ALLOW_RESTING /// The MOD's theme, decides on some stuff like armor and statistics. var/datum/mod_theme/theme = /datum/mod_theme /// Looks of the MOD. @@ -64,20 +66,10 @@ var/activation_step_time = MOD_ACTIVATION_STEP_TIME /// Extended description of the theme. var/extended_desc - /// MOD helmet. - var/obj/item/clothing/head/mod/helmet - /// MOD chestplate. - var/obj/item/clothing/suit/mod/chestplate - /// MOD gauntlets. - var/obj/item/clothing/gloves/mod/gauntlets - /// MOD boots. - var/obj/item/clothing/shoes/mod/boots /// MOD core. var/obj/item/mod/core/core - /// Associated list of parts (helmet, chestplate, gauntlets, boots) to their unsealed worn layer. + /// List of MODsuit part datums. var/list/mod_parts = list() - /// Associated list of parts that can overslot to their overslot (overslot means the part can cover another layer of clothing). - var/list/overslotting_parts = list() /// Modules the MOD currently possesses. var/list/modules = list() /// Currently used module. @@ -102,43 +94,14 @@ if(new_theme) theme = new_theme theme = GLOB.mod_themes[theme] - slot_flags = theme.slot_flags - extended_desc = theme.extended_desc - slowdown_inactive = theme.slowdown_inactive - slowdown_active = theme.slowdown_active - activation_step_time = theme.activation_step_time - complexity_max = theme.complexity_max - ui_theme = theme.ui_theme - charge_drain = theme.charge_drain + theme.set_up_parts(src, new_skin) + for(var/obj/item/part as anything in get_parts()) + RegisterSignal(part, COMSIG_ATOM_DESTRUCTION, PROC_REF(on_part_destruction)) + RegisterSignal(part, COMSIG_QDELETING, PROC_REF(on_part_deletion)) set_wires(new /datum/wires/mod(src)) if(length(req_access)) locked = TRUE new_core?.install(src) - helmet = new /obj/item/clothing/head/mod(src) - mod_parts += helmet - chestplate = new /obj/item/clothing/suit/mod(src) - chestplate.allowed += theme.allowed_suit_storage - mod_parts += chestplate - gauntlets = new /obj/item/clothing/gloves/mod(src) - mod_parts += gauntlets - boots = new /obj/item/clothing/shoes/mod(src) - mod_parts += boots - var/list/all_parts = mod_parts + src - for(var/obj/item/part as anything in all_parts) - part.name = "[theme.name] [part.name]" - part.desc = "[part.desc] [theme.desc]" - part.set_armor(theme.armor_type) - part.resistance_flags = theme.resistance_flags - part.flags_1 |= theme.atom_flags //flags like initialization or admin spawning are here, so we cant set, have to add - part.heat_protection = NONE - part.cold_protection = NONE - part.max_heat_protection_temperature = theme.max_heat_protection_temperature - part.min_cold_protection_temperature = theme.min_cold_protection_temperature - part.siemens_coefficient = theme.siemens_coefficient - for(var/obj/item/part as anything in mod_parts) - RegisterSignal(part, COMSIG_ATOM_DESTRUCTION, PROC_REF(on_part_destruction)) - RegisterSignal(part, COMSIG_QDELETING, PROC_REF(on_part_deletion)) - set_mod_skin(new_skin || theme.default_skin) update_speed() RegisterSignal(src, COMSIG_ATOM_EXITED, PROC_REF(on_exit)) RegisterSignal(src, COMSIG_SPEED_POTION_APPLIED, PROC_REF(on_potion)) @@ -151,44 +114,21 @@ STOP_PROCESSING(SSobj, src) for(var/obj/item/mod/module/module as anything in modules) uninstall(module, deleting = TRUE) - for(var/obj/item/part as anything in mod_parts) - overslotting_parts -= part - var/atom/deleting_atom - if(!QDELETED(helmet)) - deleting_atom = helmet - helmet = null - mod_parts -= deleting_atom - qdel(deleting_atom) - if(!QDELETED(chestplate)) - deleting_atom = chestplate - chestplate = null - mod_parts -= deleting_atom - qdel(deleting_atom) - if(!QDELETED(gauntlets)) - deleting_atom = gauntlets - gauntlets = null - mod_parts -= deleting_atom - qdel(deleting_atom) - if(!QDELETED(boots)) - deleting_atom = boots - boots = null - mod_parts -= deleting_atom - qdel(deleting_atom) if(core) QDEL_NULL(core) QDEL_NULL(wires) QDEL_NULL(mod_link) + for(var/datum/mod_part/part_datum as anything in get_part_datums(all = TRUE)) + part_datum.part_item = null + part_datum.overslotting = null return ..() /obj/item/mod/control/atom_destruction(damage_flag) + if(wearer) + wearer.visible_message(span_danger("[src] fall[p_s()] apart, completely destroyed!"), vision_distance = COMBAT_MESSAGE_RANGE) + clean_up() for(var/obj/item/mod/module/module as anything in modules) uninstall(module) - for(var/obj/item/part as anything in mod_parts) - if(!overslotting_parts[part]) - continue - var/obj/item/overslot = overslotting_parts[part] - overslot.forceMove(drop_location()) - overslotting_parts[part] = null if(ai_assistant) if(ispAI(ai_assistant)) INVOKE_ASYNC(src, PROC_REF(remove_pai), /* user = */ null, /* forced = */ TRUE) // async to appease spaceman DMM because the branch we don't run has a do_after @@ -245,11 +185,10 @@ subtract_charge((charge_drain + malfunctioning_charge_drain) * seconds_per_tick) for(var/obj/item/mod/module/module as anything in modules) if(malfunctioning && module.active && SPT_PROB(5, seconds_per_tick)) - module.on_deactivation(display_message = TRUE) + module.deactivate(display_message = TRUE) module.on_process(seconds_per_tick) -/obj/item/mod/control/equipped(mob/user, slot) - ..() +/obj/item/mod/control/visual_equipped(mob/user, slot, initial = FALSE) //needs to be visual because we wanna show it in select equipment if(slot & slot_flags) set_wearer(user) else if(wearer) @@ -281,16 +220,16 @@ /obj/item/mod/control/allow_attack_hand_drop(mob/user) if(user != wearer) return ..() - for(var/obj/item/part as anything in mod_parts) + for(var/obj/item/part as anything in get_parts()) if(part.loc != src) balloon_alert(user, "retract parts first!") playsound(src, 'sound/machines/scanbuzz.ogg', 25, FALSE, SILENCED_SOUND_EXTRARANGE) return FALSE -/obj/item/mod/control/MouseDrop(atom/over_object) - if(usr != wearer || !istype(over_object, /atom/movable/screen/inventory/hand)) - return ..() - for(var/obj/item/part as anything in mod_parts) +/obj/item/mod/control/mouse_drop_dragged(atom/over_object, mob/user) + if(user != wearer || !istype(over_object, /atom/movable/screen/inventory/hand)) + return + for(var/obj/item/part as anything in get_parts()) if(part.loc != src) balloon_alert(wearer, "retract parts first!") playsound(src, 'sound/machines/scanbuzz.ogg', 25, FALSE, SILENCED_SOUND_EXTRARANGE) @@ -298,37 +237,31 @@ if(!wearer.incapacitated()) var/atom/movable/screen/inventory/hand/ui_hand = over_object if(wearer.putItemFromInventoryInHandIfPossible(src, ui_hand.held_index)) - add_fingerprint(usr) - return ..() + add_fingerprint(user) /obj/item/mod/control/wrench_act(mob/living/user, obj/item/wrench) - if(..()) - return TRUE if(seconds_electrified && get_charge() && shock(user)) - return TRUE + return ITEM_INTERACT_BLOCKING if(open) if(!core) balloon_alert(user, "no core!") - return TRUE + return ITEM_INTERACT_BLOCKING balloon_alert(user, "removing core...") wrench.play_tool_sound(src, 100) if(!wrench.use_tool(src, user, 3 SECONDS) || !open) balloon_alert(user, "interrupted!") - return TRUE + return ITEM_INTERACT_BLOCKING wrench.play_tool_sound(src, 100) balloon_alert(user, "core removed") core.forceMove(drop_location()) - return TRUE - return ..() + return ITEM_INTERACT_SUCCESS + return NONE /obj/item/mod/control/screwdriver_act(mob/living/user, obj/item/screwdriver) - . = ..() - if(.) - return TRUE if(active || activating || ai_controller) balloon_alert(user, "deactivate suit first!") playsound(src, 'sound/machines/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE) - return FALSE + return ITEM_INTERACT_BLOCKING balloon_alert(user, "[open ? "closing" : "opening"] cover...") screwdriver.play_tool_sound(src, 100) if(screwdriver.use_tool(src, user, 1 SECONDS)) @@ -339,21 +272,20 @@ open = !open else balloon_alert(user, "interrupted!") - return TRUE + return ITEM_INTERACT_SUCCESS /obj/item/mod/control/crowbar_act(mob/living/user, obj/item/crowbar) - . = ..() if(!open) balloon_alert(user, "open the cover first!") playsound(src, 'sound/machines/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE) - return FALSE + return ITEM_INTERACT_BLOCKING if(!allowed(user)) balloon_alert(user, "insufficient access!") playsound(src, 'sound/machines/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE) - return + return ITEM_INTERACT_BLOCKING if(SEND_SIGNAL(src, COMSIG_MOD_MODULE_REMOVAL, user) & MOD_CANCEL_REMOVAL) playsound(src, 'sound/machines/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE) - return FALSE + return ITEM_INTERACT_BLOCKING if(length(modules)) var/list/removable_modules = list() for(var/obj/item/mod/module/module as anything in modules) @@ -362,55 +294,68 @@ removable_modules += module var/obj/item/mod/module/module_to_remove = tgui_input_list(user, "Which module to remove?", "Module Removal", removable_modules) if(!module_to_remove?.mod) - return FALSE + return ITEM_INTERACT_BLOCKING uninstall(module_to_remove) module_to_remove.forceMove(drop_location()) crowbar.play_tool_sound(src, 100) SEND_SIGNAL(src, COMSIG_MOD_MODULE_REMOVED, user) - return TRUE + return ITEM_INTERACT_SUCCESS balloon_alert(user, "no modules!") playsound(src, 'sound/machines/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE) - return FALSE + return ITEM_INTERACT_BLOCKING + +/obj/item/mod/control/storage_insert_on_interacted_with(datum/storage, obj/item/inserted, mob/living/user) + // Hack. revisit later + if(istype(inserted, /obj/item/aicard)) + var/obj/item/aicard/ai_card = inserted + if(ai_card.AI) + return FALSE // we want to get an AI assistant, try uploading instead of insertion + if(ai_assistant) + return FALSE // we already have an AI assistant, try withdrawing instead of insertion + return TRUE -/obj/item/mod/control/attackby(obj/item/attacking_item, mob/living/user, params) - if(istype(attacking_item, /obj/item/pai_card)) +// Makes use of tool act to prevent shoving stuff into our internal storage +/obj/item/mod/control/tool_act(mob/living/user, obj/item/tool, list/modifiers) + if(istype(tool, /obj/item/pai_card)) if(!open) balloon_alert(user, "open the cover first!") - return FALSE - insert_pai(user, attacking_item) - return TRUE - if(istype(attacking_item, /obj/item/mod/module)) + return ITEM_INTERACT_BLOCKING + insert_pai(user, tool) + return ITEM_INTERACT_SUCCESS + if(istype(tool, /obj/item/mod/module)) if(!open) balloon_alert(user, "open the cover first!") playsound(src, 'sound/machines/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE) - return FALSE - install(attacking_item, user) + return ITEM_INTERACT_BLOCKING + install(tool, user) SEND_SIGNAL(src, COMSIG_MOD_MODULE_ADDED, user) - return TRUE - else if(istype(attacking_item, /obj/item/mod/core)) + return ITEM_INTERACT_SUCCESS + if(istype(tool, /obj/item/mod/core)) if(!open) balloon_alert(user, "open the cover first!") playsound(src, 'sound/machines/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE) - return FALSE + return ITEM_INTERACT_BLOCKING if(core) balloon_alert(user, "core already installed!") playsound(src, 'sound/machines/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE) - return FALSE - var/obj/item/mod/core/attacking_core = attacking_item + return ITEM_INTERACT_BLOCKING + var/obj/item/mod/core/attacking_core = tool attacking_core.install(src) balloon_alert(user, "core installed") playsound(src, 'sound/machines/click.ogg', 50, TRUE, SILENCED_SOUND_EXTRARANGE) - return TRUE - else if(is_wire_tool(attacking_item) && open) - wires.interact(user) - return TRUE - else if(open && attacking_item.GetID()) - update_access(user, attacking_item.GetID()) - return TRUE + return ITEM_INTERACT_SUCCESS + if(open) + if(is_wire_tool(tool)) + wires.interact(user) + return ITEM_INTERACT_SUCCESS + var/obj/item/id = tool.GetID() + if(id) + update_access(user, id) + return ITEM_INTERACT_SUCCESS return ..() /obj/item/mod/control/get_cell() - var/obj/item/stock_parts/cell/cell = get_charge_source() + var/obj/item/stock_parts/power_store/cell = get_charge_source() if(!istype(cell)) return null return cell @@ -433,16 +378,12 @@ to_chat(wearer, span_notice("[severity > 1 ? "Light" : "Strong"] electromagnetic pulse detected!")) if(. & EMP_PROTECT_CONTENTS) return - selected_module?.on_deactivation(display_message = TRUE) + selected_module?.deactivate(display_message = TRUE) wearer.apply_damage(5 / severity, BURN, spread_damage=TRUE) to_chat(wearer, span_danger("You feel [src] heat up from the EMP, burning you slightly.")) if(wearer.stat < UNCONSCIOUS && prob(10)) wearer.emote("scream") -/obj/item/mod/control/visual_equipped(mob/user, slot, initial = FALSE) - if(slot & slot_flags) - set_wearer(user) - /obj/item/mod/control/on_outfit_equip(mob/living/carbon/human/outfit_wearer, visuals_only, item_slot) . = ..() quick_activation() @@ -450,7 +391,7 @@ /obj/item/mod/control/doStrip(mob/stripper, mob/owner) if(active && !toggle_activate(stripper, force_deactivate = TRUE)) return - for(var/obj/item/part as anything in mod_parts) + for(var/obj/item/part as anything in get_parts()) if(part.loc == src) continue retract(null, part) @@ -460,14 +401,44 @@ icon_state = "[skin]-[base_icon_state][active ? "-sealed" : ""]" return ..() +/obj/item/mod/control/proc/get_parts(all = FALSE) + . = list() + for(var/key in mod_parts) + var/datum/mod_part/part = mod_parts[key] + if(!all && part.part_item == src) + continue + . += part.part_item + +/obj/item/mod/control/proc/get_part_datums(all = FALSE) + . = list() + for(var/key in mod_parts) + var/datum/mod_part/part = mod_parts[key] + if(!all && part.part_item == src) + continue + . += part + +/obj/item/mod/control/proc/get_part_datum(obj/item/part) + RETURN_TYPE(/datum/mod_part) + var/datum/mod_part/potential_part = mod_parts["[part.slot_flags]"] + if(potential_part?.part_item == part) + return potential_part + for(var/datum/mod_part/mod_part in get_part_datums()) + if(mod_part.part_item == part) + return mod_part + CRASH("get_part_datum called with incorrect item [part] passed.") + +/obj/item/mod/control/proc/get_part_from_slot(slot) + slot = "[slot]" + for(var/part_slot in mod_parts) + if(slot != part_slot) + continue + var/datum/mod_part/part = mod_parts[part_slot] + return part.part_item + /obj/item/mod/control/proc/set_wearer(mob/living/carbon/human/user) - if (wearer == user) - // This should also not happen. - // This path is hit when equipping an outfit with visualsOnly, but only sometimes, and this eventually gets called twice. - // I'm not sure this proc should ever be being called by visualsOnly, but it is, - // and this was an emergency patch. - return - else if (!isnull(wearer)) + if(wearer == user) + CRASH("set_wearer() was called with the new wearer being the current wearer: [wearer]") + else if(!isnull(wearer)) stack_trace("set_wearer() was called with a new wearer without unset_wearer() being called") wearer = user @@ -487,17 +458,20 @@ wearer = null /obj/item/mod/control/proc/clean_up() + if(QDELING(src)) + unset_wearer() + return if(active || activating) for(var/obj/item/mod/module/module as anything in modules) if(!module.active) continue - module.on_deactivation(display_message = FALSE) - for(var/obj/item/part as anything in mod_parts) - seal_part(part, seal = FALSE) - for(var/obj/item/part as anything in mod_parts) + module.deactivate(display_message = FALSE) + for(var/obj/item/part as anything in get_parts()) + seal_part(part, is_sealed = FALSE) + for(var/obj/item/part as anything in get_parts()) retract(null, part) if(active) - finish_activation(on = FALSE) + finish_activation(is_on = FALSE) mod_link?.end_call() var/mob/old_wearer = wearer unset_wearer() @@ -506,8 +480,7 @@ /obj/item/mod/control/proc/on_species_gain(datum/source, datum/species/new_species, datum/species/old_species) SIGNAL_HANDLER - var/list/all_parts = mod_parts + src - for(var/obj/item/part in all_parts) + for(var/obj/item/part in get_parts(all = TRUE)) if(!(new_species.no_equip_flags & part.slot_flags) || is_type_in_list(new_species, part.species_exception)) continue forceMove(drop_location()) @@ -565,6 +538,11 @@ balloon_alert(user, "[new_module] would make [src] too complex!") playsound(src, 'sound/machines/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE) return + if(!new_module.has_required_parts(mod_parts)) + if(user) + balloon_alert(user, "[new_module] incompatible with [src]'s parts!") + playsound(src, 'sound/machines/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE) + return new_module.forceMove(src) modules += new_module complexity += new_module.complexity @@ -587,7 +565,7 @@ if(active) old_module.on_suit_deactivation(deleting = deleting) if(old_module.active) - old_module.on_deactivation(display_message = !deleting, deleting = deleting) + old_module.deactivate(display_message = !deleting, deleting = deleting) old_module.UnregisterSignal(src, COMSIG_ITEM_GET_WORN_OVERLAYS) old_module.on_uninstall(deleting = deleting) QDEL_LIST_ASSOC_VAL(old_module.pinned_to) @@ -643,9 +621,8 @@ wearer.update_spacesuit_hud_icon(state_to_use || "0") /obj/item/mod/control/proc/update_speed() - var/list/all_parts = mod_parts + src - for(var/obj/item/part as anything in all_parts) - part.slowdown = (active ? slowdown_active : slowdown_inactive) / length(all_parts) + for(var/obj/item/part as anything in get_parts(all = TRUE)) + part.slowdown = (active ? slowdown_active : slowdown_inactive) / length(mod_parts) wearer?.update_equipment_speed_mods() /obj/item/mod/control/proc/power_off() @@ -653,52 +630,11 @@ toggle_activate(wearer, force_deactivate = TRUE) /obj/item/mod/control/proc/set_mod_color(new_color) - var/list/all_parts = mod_parts + src - for(var/obj/item/part as anything in all_parts) + for(var/obj/item/part as anything in get_parts(all = TRUE)) part.remove_atom_colour(WASHABLE_COLOUR_PRIORITY) part.add_atom_colour(new_color, FIXED_COLOUR_PRIORITY) wearer?.regenerate_icons() -/obj/item/mod/control/proc/set_mod_skin(new_skin) - if(active) - CRASH("[src] tried to set skin while active!") - skin = new_skin - var/list/used_skin = theme.skins[new_skin] - if(used_skin[CONTROL_LAYER]) - alternate_worn_layer = used_skin[CONTROL_LAYER] - var/list/skin_updating = mod_parts + src - for(var/obj/item/part as anything in skin_updating) - part.icon = used_skin[MOD_ICON_OVERRIDE] || 'icons/obj/clothing/modsuit/mod_clothing.dmi' - part.worn_icon = used_skin[MOD_WORN_ICON_OVERRIDE] || 'icons/mob/clothing/modsuit/mod_clothing.dmi' - part.icon_state = "[skin]-[part.base_icon_state]" - for(var/obj/item/clothing/part as anything in mod_parts) - var/used_category - if(part == helmet) - used_category = HELMET_FLAGS - if(part == chestplate) - used_category = CHESTPLATE_FLAGS - if(part == gauntlets) - used_category = GAUNTLETS_FLAGS - if(part == boots) - used_category = BOOTS_FLAGS - var/list/category = used_skin[used_category] - part.clothing_flags = category[UNSEALED_CLOTHING] || NONE - part.visor_flags = category[SEALED_CLOTHING] || NONE - part.flags_inv = category[UNSEALED_INVISIBILITY] || NONE - part.visor_flags_inv = category[SEALED_INVISIBILITY] || NONE - part.flags_cover = category[UNSEALED_COVER] || NONE - part.visor_flags_cover = category[SEALED_COVER] || NONE - part.alternate_worn_layer = category[UNSEALED_LAYER] - mod_parts[part] = part.alternate_worn_layer - if(!category[CAN_OVERSLOT]) - if(overslotting_parts[part]) - var/obj/item/overslot = overslotting_parts[part] - overslot.forceMove(drop_location()) - overslotting_parts -= part - continue - overslotting_parts |= part - wearer?.regenerate_icons() - /obj/item/mod/control/proc/on_exit(datum/source, atom/movable/part, direction) SIGNAL_HANDLER @@ -712,7 +648,9 @@ if(part in modules) uninstall(part) return - if(part in mod_parts) + if(part in get_parts()) + if(isnull(part.loc)) + return if(!wearer) part.forceMove(src) return @@ -723,27 +661,25 @@ /obj/item/mod/control/proc/on_part_destruction(obj/item/part, damage_flag) SIGNAL_HANDLER - if(overslotting_parts[part]) - var/obj/item/overslot = overslotting_parts[part] - overslot.forceMove(drop_location()) - overslotting_parts[part] = null - if(QDELETED(src)) + if(QDELING(src)) return atom_destruction(damage_flag) -/obj/item/mod/control/proc/on_part_deletion(obj/item/part) //the part doesnt count as being qdeleted, so our destroying does an infinite loop, fix later +/obj/item/mod/control/proc/on_part_deletion(obj/item/part) SIGNAL_HANDLER - if(QDELETED(src)) + if(QDELING(src)) return + part.moveToNullspace() qdel(src) -/obj/item/mod/control/proc/on_overslot_exit(datum/source, atom/movable/overslot, direction) +/obj/item/mod/control/proc/on_overslot_exit(obj/item/part, atom/movable/overslot, direction) SIGNAL_HANDLER - if(overslot != overslotting_parts[source]) + var/datum/mod_part/part_datum = get_part_datum(part) + if(overslot != part_datum.overslotting) return - overslotting_parts[source] = null + part_datum.overslotting = null /obj/item/mod/control/proc/on_potion(atom/movable/source, obj/item/slimepotion/speed/speed_potion, mob/living/user) SIGNAL_HANDLER diff --git a/code/modules/mod/mod_core.dm b/code/modules/mod/mod_core.dm index 0d71db68aac2c..0c13efa1b950c 100644 --- a/code/modules/mod/mod_core.dm +++ b/code/modules/mod/mod_core.dm @@ -85,7 +85,7 @@ Which one you have in your suit is unclear, but either way, \ it's been repurposed to be an internal power source for a Modular Outerwear Device." /// Installed cell. - var/obj/item/stock_parts/cell/cell + var/obj/item/stock_parts/power_store/cell /obj/item/mod/core/standard/Destroy() QDEL_NULL(cell) @@ -97,7 +97,8 @@ install_cell(cell) RegisterSignal(mod, COMSIG_ATOM_EXAMINE, PROC_REF(on_examine)) RegisterSignal(mod, COMSIG_ATOM_ATTACK_HAND, PROC_REF(on_attack_hand)) - RegisterSignal(mod, COMSIG_ATOM_ATTACKBY, PROC_REF(on_attackby)) + RegisterSignal(mod, COMSIG_ATOM_STORAGE_ITEM_INTERACT_INSERT, PROC_REF(on_mod_storage_insert)) + RegisterSignal(mod, COMSIG_ATOM_ITEM_INTERACTION, PROC_REF(on_mod_interaction)) RegisterSignal(mod, COMSIG_MOD_WEARER_SET, PROC_REF(on_wearer_set)) if(mod.wearer) on_wearer_set(mod, mod.wearer) @@ -105,7 +106,13 @@ /obj/item/mod/core/standard/uninstall() if(!QDELETED(cell)) cell.forceMove(drop_location()) - UnregisterSignal(mod, list(COMSIG_ATOM_EXAMINE, COMSIG_ATOM_ATTACK_HAND, COMSIG_ATOM_ATTACKBY, COMSIG_MOD_WEARER_SET)) + UnregisterSignal(mod, list( + COMSIG_ATOM_EXAMINE, + COMSIG_ATOM_ATTACK_HAND, + COMSIG_ATOM_STORAGE_ITEM_INTERACT_INSERT, + COMSIG_ATOM_ITEM_INTERACTION, + COMSIG_MOD_WEARER_SET, + )) if(mod.wearer) on_wearer_unset(mod, mod.wearer) return ..() @@ -114,15 +121,15 @@ return cell /obj/item/mod/core/standard/charge_amount() - var/obj/item/stock_parts/cell/charge_source = charge_source() + var/obj/item/stock_parts/power_store/charge_source = charge_source() return charge_source?.charge || 0 /obj/item/mod/core/standard/max_charge_amount(amount) - var/obj/item/stock_parts/cell/charge_source = charge_source() + var/obj/item/stock_parts/power_store/charge_source = charge_source() return charge_source?.maxcharge || 1 /obj/item/mod/core/standard/add_charge(amount) - var/obj/item/stock_parts/cell/charge_source = charge_source() + var/obj/item/stock_parts/power_store/charge_source = charge_source() if(isnull(charge_source)) return FALSE . = charge_source.give(amount) @@ -131,7 +138,7 @@ return . /obj/item/mod/core/standard/subtract_charge(amount) - var/obj/item/stock_parts/cell/charge_source = charge_source() + var/obj/item/stock_parts/power_store/charge_source = charge_source() if(isnull(charge_source)) return FALSE . = charge_source.use(amount, TRUE) @@ -206,23 +213,37 @@ cell_to_move.forceMove(drop_location()) user.put_in_hands(cell_to_move) -/obj/item/mod/core/standard/proc/on_attackby(datum/source, obj/item/attacking_item, mob/user) +/obj/item/mod/core/standard/proc/on_mod_storage_insert(datum/source, obj/item/thing, mob/living/user) SIGNAL_HANDLER - if(istype(attacking_item, /obj/item/stock_parts/cell)) - if(!mod.open) - mod.balloon_alert(user, "open the cover first!") - playsound(mod, 'sound/machines/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE) - return NONE - if(cell) - mod.balloon_alert(user, "cell already installed!") - playsound(mod, 'sound/machines/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE) - return COMPONENT_NO_AFTERATTACK - install_cell(attacking_item) - mod.balloon_alert(user, "cell installed") - playsound(mod, 'sound/machines/click.ogg', 50, TRUE, SILENCED_SOUND_EXTRARANGE) - return COMPONENT_NO_AFTERATTACK - return NONE + return replace_cell(thing, user) ? BLOCK_STORAGE_INSERT : NONE + +/obj/item/mod/core/standard/proc/on_mod_interaction(datum/source, mob/living/user, obj/item/thing) + SIGNAL_HANDLER + + if(mod.atom_storage) // handled by the storage signal + return NONE + + return item_interaction(user, thing) + +/obj/item/mod/core/standard/item_interaction(mob/living/user, obj/item/tool, list/modifiers) + return replace_cell(tool, user) ? ITEM_INTERACT_SUCCESS : NONE + +/obj/item/mod/core/standard/proc/replace_cell(obj/item/attacking_item, mob/user) + if(!istype(attacking_item, /obj/item/stock_parts/power_store/cell)) + return FALSE + if(!mod.open) + mod.balloon_alert(user, "open the cover first!") + playsound(mod, 'sound/machines/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE) + return FALSE + if(cell) + mod.balloon_alert(user, "cell already installed!") + playsound(mod, 'sound/machines/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE) + return FALSE + install_cell(attacking_item) + mod.balloon_alert(user, "cell installed") + playsound(mod, 'sound/machines/click.ogg', 50, TRUE, SILENCED_SOUND_EXTRARANGE) + return TRUE /obj/item/mod/core/standard/proc/on_wearer_set(datum/source, mob/user) SIGNAL_HANDLER @@ -239,7 +260,7 @@ /obj/item/mod/core/standard/proc/on_borg_charge(datum/source, datum/callback/charge_cell, seconds_per_tick) SIGNAL_HANDLER - var/obj/item/stock_parts/cell/target_cell = charge_source() + var/obj/item/stock_parts/power_store/target_cell = charge_source() if(isnull(target_cell)) return @@ -303,15 +324,11 @@ /obj/item/mod/core/plasma/install(obj/item/mod/control/mod_unit) . = ..() - RegisterSignal(mod, COMSIG_ATOM_ATTACKBY, PROC_REF(on_attackby)) + RegisterSignal(mod, COMSIG_ATOM_STORAGE_ITEM_INTERACT_INSERT, PROC_REF(on_mod_storage_insert)) + RegisterSignal(mod, COMSIG_ATOM_ITEM_INTERACTION, PROC_REF(on_mod_interaction)) /obj/item/mod/core/plasma/uninstall() - UnregisterSignal(mod, COMSIG_ATOM_ATTACKBY) - return ..() - -/obj/item/mod/core/plasma/attackby(obj/item/attacking_item, mob/user, params) - if(charge_plasma(attacking_item, user)) - return TRUE + UnregisterSignal(mod, list(COMSIG_ATOM_STORAGE_ITEM_INTERACT_INSERT, COMSIG_ATOM_ITEM_INTERACTION)) return ..() /obj/item/mod/core/plasma/charge_source() @@ -350,19 +367,28 @@ return "empty" -/obj/item/mod/core/plasma/proc/on_attackby(datum/source, obj/item/attacking_item, mob/user) +/obj/item/mod/core/plasma/proc/on_mod_storage_insert(datum/source, obj/item/thing, mob/living/user) SIGNAL_HANDLER - if(charge_plasma(attacking_item, user)) - return COMPONENT_NO_AFTERATTACK - return NONE + return charge_plasma(thing, user) ? BLOCK_STORAGE_INSERT : NONE + +/obj/item/mod/core/plasma/proc/on_mod_interaction(datum/source, mob/living/user, obj/item/thing) + SIGNAL_HANDLER + + if(mod.atom_storage) // handled by the storage signal + return NONE + + return item_interaction(thing, user) + +/obj/item/mod/core/plasma/item_interaction(mob/living/user, obj/item/tool, list/modifiers) + return charge_plasma(tool, user) ? ITEM_INTERACT_SUCCESS : NONE /obj/item/mod/core/plasma/proc/charge_plasma(obj/item/stack/plasma, mob/user) var/charge_given = is_type_in_list(plasma, charger_list, zebra = TRUE) if(!charge_given) return FALSE var/uses_needed = min(plasma.amount, ROUND_UP((max_charge_amount() - charge_amount()) / charge_given)) - if(!plasma.use(uses_needed)) + if(uses_needed <= 0 || !plasma.use(uses_needed)) return FALSE add_charge(uses_needed * charge_given) balloon_alert(user, "core refueled") @@ -382,8 +408,8 @@ light_power = 1.5 // Slightly better than the normal plasma core. // Not super sure if this should just be the same, but will see. - maxcharge = 15000 - charge = 15000 + maxcharge = 15 * STANDARD_CELL_CHARGE + charge = 15 * STANDARD_CELL_CHARGE /// The mob to be spawned by the core var/mob/living/spawned_mob_type = /mob/living/basic/butterfly/lavaland/temporary /// Max number of mobs it can spawn diff --git a/code/modules/mod/mod_link.dm b/code/modules/mod/mod_link.dm index 40a0fb94f17f7..ad7addf691b4a 100644 --- a/code/modules/mod/mod_link.dm +++ b/code/modules/mod/mod_link.dm @@ -77,29 +77,34 @@ ) /obj/item/mod/control/multitool_act_secondary(mob/living/user, obj/item/multitool/tool) - if(!multitool_check_buffer(user, tool)) - return + . = NONE + var/tool_frequency = null if(istype(tool.buffer, /datum/mod_link)) var/datum/mod_link/buffer_link = tool.buffer tool_frequency = buffer_link.frequency balloon_alert(user, "frequency set") + . = ITEM_INTERACT_SUCCESS if(!tool_frequency && mod_link.frequency) tool.set_buffer(mod_link) balloon_alert(user, "frequency copied") + . = ITEM_INTERACT_SUCCESS else if(tool_frequency && !mod_link.frequency) mod_link.frequency = tool_frequency + . = ITEM_INTERACT_SUCCESS else if(tool_frequency && mod_link.frequency) var/response = tgui_alert(user, "Would you like to copy or imprint the frequency?", "MODlink Frequency", list("Copy", "Imprint")) if(!user.is_holding(tool)) - return + return ITEM_INTERACT_BLOCKING switch(response) if("Copy") tool.set_buffer(mod_link) balloon_alert(user, "frequency copied") + . = ITEM_INTERACT_SUCCESS if("Imprint") mod_link.frequency = tool_frequency balloon_alert(user, "frequency set") + . = ITEM_INTERACT_SUCCESS /obj/item/mod/control/proc/can_call() return get_charge() && wearer && wearer.stat < DEAD @@ -140,7 +145,7 @@ icon_state = "modlink" actions_types = list(/datum/action/item_action/call_link) /// The installed power cell. - var/obj/item/stock_parts/cell/cell + var/obj/item/stock_parts/power_store/cell /// The MODlink datum we operate. var/datum/mod_link/mod_link /// Initial frequency of the MODlink. @@ -203,7 +208,7 @@ /obj/item/clothing/neck/link_scryer/attackby(obj/item/attacked_by, mob/user, params) . = ..() - if(cell || !istype(attacked_by, /obj/item/stock_parts/cell)) + if(cell || !istype(attacked_by, /obj/item/stock_parts/power_store/cell)) return if(!user.transferItemToLoc(attacked_by, src)) return @@ -227,29 +232,34 @@ return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN /obj/item/clothing/neck/link_scryer/multitool_act_secondary(mob/living/user, obj/item/multitool/tool) - if(!multitool_check_buffer(user, tool)) - return + . = NONE + var/tool_frequency = null if(istype(tool.buffer, /datum/mod_link)) var/datum/mod_link/buffer_link = tool.buffer tool_frequency = buffer_link.frequency balloon_alert(user, "frequency set") + . = ITEM_INTERACT_SUCCESS if(!tool_frequency && mod_link.frequency) tool.set_buffer(mod_link) balloon_alert(user, "frequency copied") + . = ITEM_INTERACT_SUCCESS else if(tool_frequency && !mod_link.frequency) mod_link.frequency = tool_frequency + . = ITEM_INTERACT_SUCCESS else if(tool_frequency && mod_link.frequency) var/response = tgui_alert(user, "Would you like to copy or imprint the frequency?", "MODlink Frequency", list("Copy", "Imprint")) if(!user.is_holding(tool)) - return + return ITEM_INTERACT_BLOCKING switch(response) if("Copy") tool.set_buffer(mod_link) balloon_alert(user, "frequency copied") + . = ITEM_INTERACT_SUCCESS if("Imprint") mod_link.frequency = tool_frequency balloon_alert(user, "frequency set") + . = ITEM_INTERACT_SUCCESS /obj/item/clothing/neck/link_scryer/worn_overlays(mutable_appearance/standing, isinhands) . = ..() @@ -311,7 +321,7 @@ /obj/item/clothing/neck/link_scryer/loaded/Initialize(mapload) . = ..() - cell = new /obj/item/stock_parts/cell/high(src) + cell = new /obj/item/stock_parts/power_store/cell/high(src) /obj/item/clothing/neck/link_scryer/loaded/charlie starting_frequency = MODLINK_FREQ_CHARLIE diff --git a/code/modules/mod/mod_paint.dm b/code/modules/mod/mod_paint.dm index 240c0897b33a1..77af1f7290c83 100644 --- a/code/modules/mod/mod_paint.dm +++ b/code/modules/mod/mod_paint.dm @@ -140,18 +140,18 @@ SStgui.close_uis(src) /obj/item/mod/paint/proc/paint_skin(obj/item/mod/control/mod, mob/user) - if(length(mod.theme.skins) <= 1) + if(length(mod.theme.variants) <= 1) balloon_alert(user, "no alternate skins!") return var/list/skins = list() - for(var/mod_skin_name in mod.theme.skins) - var/list/mod_skin = mod.theme.skins[mod_skin_name] + for(var/mod_skin_name in mod.theme.variants) + var/list/mod_skin = mod.theme.variants[mod_skin_name] skins[mod_skin_name] = image(icon = mod_skin[MOD_ICON_OVERRIDE] || mod.icon, icon_state = "[mod_skin_name]-control") var/pick = show_radial_menu(user, mod, skins, custom_check = CALLBACK(src, PROC_REF(check_menu), mod, user), require_near = TRUE) if(!pick) balloon_alert(user, "no skin picked!") return - mod.set_mod_skin(pick) + mod.theme.set_skin(mod, pick) /obj/item/mod/paint/proc/check_menu(obj/item/mod/control/mod, mob/user) if(user.incapacitated() || !user.is_holding(src) || !mod || mod.active || mod.activating) @@ -171,7 +171,6 @@ icon = 'icons/obj/clothing/modsuit/mod_construction.dmi' icon_state = "skinapplier" var/skin = "civilian" - var/compatible_theme = /datum/mod_theme /obj/item/mod/skin_applier/Initialize(mapload) . = ..() @@ -184,14 +183,13 @@ if(mod.active || mod.activating) balloon_alert(user, "suit is active!") return TRUE - if(!istype(mod.theme, compatible_theme)) + if(!(skin in mod.theme.variants)) balloon_alert(user, "incompatible theme!") return TRUE - mod.set_mod_skin(skin) + mod.theme.set_skin(mod, skin) balloon_alert(user, "skin applied") qdel(src) return TRUE /obj/item/mod/skin_applier/honkerative skin = "honkerative" - compatible_theme = /datum/mod_theme/syndicate diff --git a/code/modules/mod/mod_part.dm b/code/modules/mod/mod_part.dm new file mode 100644 index 0000000000000..88f8024628dc5 --- /dev/null +++ b/code/modules/mod/mod_part.dm @@ -0,0 +1,22 @@ +/// Datum to handle interactions between a MODsuit and its parts. +/datum/mod_part + /// The actual item we handle. + var/obj/item/part_item = null + /// Are we sealed? + var/sealed = FALSE + /// Message to user when unsealed. + var/unsealed_message + /// Message to user when sealed. + var/sealed_message + /// The layer the item will render on when unsealed. + var/unsealed_layer + /// The layer the item will render on when sealed. + var/sealed_layer + /// Can our part overslot over others? + var/can_overslot = FALSE + /// What are we overslotting over? + var/obj/item/overslotting = null + +/datum/mod_part/Destroy() + part_item = null + return ..() diff --git a/code/modules/mod/mod_theme.dm b/code/modules/mod/mod_theme.dm index c4c8839bd82a6..8978a4113719d 100644 --- a/code/modules/mod/mod_theme.dm +++ b/code/modules/mod/mod_theme.dm @@ -49,58 +49,157 @@ var/list/inbuilt_modules = list() /// Allowed items in the chestplate's suit storage. var/list/allowed_suit_storage = list() - /// List of skins with their appropriate clothing flags. - var/list/skins = list( + /// List of variants and items created by them, with the flags we set. + var/list/variants = list( "standard" = list( - HELMET_FLAGS = list( + /obj/item/clothing/head/mod = list( UNSEALED_LAYER = NECK_LAYER, UNSEALED_CLOTHING = SNUG_FIT, SEALED_CLOTHING = THICKMATERIAL|STOPSPRESSUREDAMAGE|HEADINTERNALS, - SEALED_INVISIBILITY = HIDEFACIALHAIR|HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDESNOUT, + SEALED_INVISIBILITY = HIDEFACIALHAIR|HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDESNOUT, SEALED_COVER = HEADCOVERSMOUTH|HEADCOVERSEYES|PEPPERPROOF, + UNSEALED_MESSAGE = HELMET_UNSEAL_MESSAGE, + SEALED_MESSAGE = HELMET_SEAL_MESSAGE, ), - CHESTPLATE_FLAGS = list( + /obj/item/clothing/suit/mod = list( UNSEALED_CLOTHING = THICKMATERIAL, SEALED_CLOTHING = STOPSPRESSUREDAMAGE, SEALED_INVISIBILITY = HIDEJUMPSUIT, + UNSEALED_MESSAGE = CHESTPLATE_UNSEAL_MESSAGE, + SEALED_MESSAGE = CHESTPLATE_SEAL_MESSAGE, ), - GAUNTLETS_FLAGS = list( + /obj/item/clothing/gloves/mod = list( UNSEALED_CLOTHING = THICKMATERIAL, SEALED_CLOTHING = STOPSPRESSUREDAMAGE, CAN_OVERSLOT = TRUE, + UNSEALED_MESSAGE = GAUNTLET_UNSEAL_MESSAGE, + SEALED_MESSAGE = GAUNTLET_SEAL_MESSAGE, ), - BOOTS_FLAGS = list( + /obj/item/clothing/shoes/mod = list( UNSEALED_CLOTHING = THICKMATERIAL, SEALED_CLOTHING = STOPSPRESSUREDAMAGE, CAN_OVERSLOT = TRUE, + UNSEALED_MESSAGE = BOOT_UNSEAL_MESSAGE, + SEALED_MESSAGE = BOOT_SEAL_MESSAGE, ), ), "civilian" = list( - HELMET_FLAGS = list( - UNSEALED_LAYER = null, + /obj/item/clothing/head/mod = list( UNSEALED_CLOTHING = SNUG_FIT|THICKMATERIAL, SEALED_CLOTHING = STOPSPRESSUREDAMAGE|HEADINTERNALS, UNSEALED_INVISIBILITY = HIDEFACIALHAIR|HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDESNOUT, UNSEALED_COVER = HEADCOVERSMOUTH|HEADCOVERSEYES|PEPPERPROOF, + UNSEALED_MESSAGE = HELMET_UNSEAL_MESSAGE, + SEALED_MESSAGE = HELMET_SEAL_MESSAGE, ), - CHESTPLATE_FLAGS = list( + /obj/item/clothing/suit/mod = list( UNSEALED_CLOTHING = THICKMATERIAL, SEALED_CLOTHING = STOPSPRESSUREDAMAGE, SEALED_INVISIBILITY = HIDEJUMPSUIT, + UNSEALED_MESSAGE = CHESTPLATE_UNSEAL_MESSAGE, + SEALED_MESSAGE = CHESTPLATE_SEAL_MESSAGE, ), - GAUNTLETS_FLAGS = list( + /obj/item/clothing/gloves/mod = list( UNSEALED_CLOTHING = THICKMATERIAL, SEALED_CLOTHING = STOPSPRESSUREDAMAGE, CAN_OVERSLOT = TRUE, + UNSEALED_MESSAGE = GAUNTLET_UNSEAL_MESSAGE, + SEALED_MESSAGE = GAUNTLET_SEAL_MESSAGE, ), - BOOTS_FLAGS = list( + /obj/item/clothing/shoes/mod = list( UNSEALED_CLOTHING = THICKMATERIAL, SEALED_CLOTHING = STOPSPRESSUREDAMAGE, CAN_OVERSLOT = TRUE, + UNSEALED_MESSAGE = BOOT_UNSEAL_MESSAGE, + SEALED_MESSAGE = BOOT_SEAL_MESSAGE, ), ), ) +#ifdef UNIT_TESTS +/datum/mod_theme/New() + var/list/skin_parts = list() + for(var/variant in variants) + skin_parts += list(assoc_to_keys(variants[variant])) + for(var/skin in skin_parts) + for(var/compared_skin in skin_parts) + if(skin ~! compared_skin) + stack_trace("[type] variants [skin] and [compared_skin] aren't made of the same parts.") + skin_parts -= skin +#endif + +/// Create parts of the suit and modify them using the theme's variables. +/datum/mod_theme/proc/set_up_parts(obj/item/mod/control/mod, skin) + var/list/parts = list(mod) + mod.slot_flags = slot_flags + mod.extended_desc = extended_desc + mod.slowdown_inactive = slowdown_inactive + mod.slowdown_active = slowdown_active + mod.activation_step_time = activation_step_time + mod.complexity_max = complexity_max + mod.ui_theme = ui_theme + mod.charge_drain = charge_drain + var/datum/mod_part/control_part_datum = new() + control_part_datum.part_item = mod + mod.mod_parts["[mod.slot_flags]"] = control_part_datum + for(var/path in variants[default_skin]) + if(!ispath(path)) + continue + var/obj/item/mod_part = new path(mod) + if(mod_part.slot_flags == ITEM_SLOT_OCLOTHING && isclothing(mod_part)) + var/obj/item/clothing/chestplate = mod_part + chestplate.allowed |= allowed_suit_storage + var/datum/mod_part/part_datum = new() + part_datum.part_item = mod_part + mod.mod_parts["[mod_part.slot_flags]"] = part_datum + parts += mod_part + for(var/obj/item/part as anything in parts) + part.name = "[name] [part.name]" + part.desc = "[part.desc] [desc]" + part.set_armor(armor_type) + part.resistance_flags = resistance_flags + part.flags_1 |= atom_flags //flags like initialization or admin spawning are here, so we cant set, have to add + part.heat_protection = NONE + part.cold_protection = NONE + part.max_heat_protection_temperature = max_heat_protection_temperature + part.min_cold_protection_temperature = min_cold_protection_temperature + part.siemens_coefficient = siemens_coefficient + set_skin(mod, skin || default_skin) + +/datum/mod_theme/proc/set_skin(obj/item/mod/control/mod, skin) + mod.skin = skin + var/list/used_skin = variants[skin] + var/list/parts = mod.get_parts() + for(var/obj/item/clothing/part as anything in parts) + var/list/category = used_skin[part.type] + var/datum/mod_part/part_datum = mod.get_part_datum(part) + part_datum.unsealed_layer = category[UNSEALED_LAYER] + part_datum.sealed_layer = category[SEALED_LAYER] + part_datum.unsealed_message = category[UNSEALED_MESSAGE] || "No unseal message set! Tell a coder!" + part_datum.sealed_message = category[SEALED_MESSAGE] || "No seal message set! Tell a coder!" + part_datum.can_overslot = category[CAN_OVERSLOT] || FALSE + part.clothing_flags = category[UNSEALED_CLOTHING] || NONE + part.visor_flags = category[SEALED_CLOTHING] || NONE + part.flags_inv = category[UNSEALED_INVISIBILITY] || NONE + part.visor_flags_inv = category[SEALED_INVISIBILITY] || NONE + part.flags_cover = category[UNSEALED_COVER] || NONE + part.visor_flags_cover = category[SEALED_COVER] || NONE + if(mod.get_part_datum(part).sealed) + part.clothing_flags |= part.visor_flags + part.flags_inv |= part.visor_flags_inv + part.flags_cover |= part.visor_flags_cover + part.alternate_worn_layer = part_datum.sealed_layer + else + part.alternate_worn_layer = part_datum.unsealed_layer + if(!part_datum.can_overslot && part_datum.overslotting) + var/obj/item/overslot = part_datum.overslotting + overslot.forceMove(mod.drop_location()) + for(var/obj/item/part as anything in parts + mod) + part.icon = used_skin[MOD_ICON_OVERRIDE] || 'icons/obj/clothing/modsuit/mod_clothing.dmi' + part.worn_icon = used_skin[MOD_WORN_ICON_OVERRIDE] || 'icons/mob/clothing/modsuit/mod_clothing.dmi' + part.icon_state = "[skin]-[part.base_icon_state][mod.get_part_datum(part).sealed ? "-sealed" : ""]" + mod.wearer?.update_clothing(part.slot_flags) + /datum/armor/mod_theme melee = 10 bullet = 5 @@ -108,7 +207,7 @@ energy = 5 bio = 100 fire = 25 - acid =25 + acid = 25 wound = 5 /datum/mod_theme/engineering @@ -131,30 +230,38 @@ /obj/item/fireaxe/metal_h2_axe, /obj/item/storage/bag/construction, ) - skins = list( + variants = list( "engineering" = list( - HELMET_FLAGS = list( + /obj/item/clothing/head/mod = list( UNSEALED_LAYER = NECK_LAYER, UNSEALED_CLOTHING = SNUG_FIT, SEALED_CLOTHING = THICKMATERIAL|STOPSPRESSUREDAMAGE|HEADINTERNALS, UNSEALED_INVISIBILITY = HIDEFACIALHAIR, SEALED_INVISIBILITY = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDESNOUT, SEALED_COVER = HEADCOVERSMOUTH|HEADCOVERSEYES|PEPPERPROOF, + UNSEALED_MESSAGE = HELMET_UNSEAL_MESSAGE, + SEALED_MESSAGE = HELMET_SEAL_MESSAGE, ), - CHESTPLATE_FLAGS = list( + /obj/item/clothing/suit/mod = list( UNSEALED_CLOTHING = THICKMATERIAL, SEALED_CLOTHING = STOPSPRESSUREDAMAGE, SEALED_INVISIBILITY = HIDEJUMPSUIT, + UNSEALED_MESSAGE = CHESTPLATE_UNSEAL_MESSAGE, + SEALED_MESSAGE = CHESTPLATE_SEAL_MESSAGE, ), - GAUNTLETS_FLAGS = list( + /obj/item/clothing/gloves/mod = list( UNSEALED_CLOTHING = THICKMATERIAL, SEALED_CLOTHING = STOPSPRESSUREDAMAGE, CAN_OVERSLOT = TRUE, + UNSEALED_MESSAGE = GAUNTLET_UNSEAL_MESSAGE, + SEALED_MESSAGE = GAUNTLET_SEAL_MESSAGE, ), - BOOTS_FLAGS = list( + /obj/item/clothing/shoes/mod = list( UNSEALED_CLOTHING = THICKMATERIAL, SEALED_CLOTHING = STOPSPRESSUREDAMAGE, CAN_OVERSLOT = TRUE, + UNSEALED_MESSAGE = BOOT_UNSEAL_MESSAGE, + SEALED_MESSAGE = BOOT_SEAL_MESSAGE, ), ), ) @@ -190,9 +297,9 @@ /obj/item/pipe_dispenser, /obj/item/t_scanner, ) - skins = list( + variants = list( "atmospheric" = list( - HELMET_FLAGS = list( + /obj/item/clothing/head/mod = list( UNSEALED_LAYER = NECK_LAYER, UNSEALED_CLOTHING = SNUG_FIT, SEALED_CLOTHING = THICKMATERIAL|STOPSPRESSUREDAMAGE|BLOCK_GAS_SMOKE_EFFECT|HEADINTERNALS, @@ -200,21 +307,29 @@ SEALED_INVISIBILITY = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR, UNSEALED_COVER = HEADCOVERSMOUTH, SEALED_COVER = HEADCOVERSEYES|PEPPERPROOF, + UNSEALED_MESSAGE = HELMET_UNSEAL_MESSAGE, + SEALED_MESSAGE = HELMET_SEAL_MESSAGE, ), - CHESTPLATE_FLAGS = list( + /obj/item/clothing/suit/mod = list( UNSEALED_CLOTHING = THICKMATERIAL, SEALED_CLOTHING = STOPSPRESSUREDAMAGE, SEALED_INVISIBILITY = HIDEJUMPSUIT, + UNSEALED_MESSAGE = CHESTPLATE_UNSEAL_MESSAGE, + SEALED_MESSAGE = CHESTPLATE_SEAL_MESSAGE, ), - GAUNTLETS_FLAGS = list( + /obj/item/clothing/gloves/mod = list( UNSEALED_CLOTHING = THICKMATERIAL, SEALED_CLOTHING = STOPSPRESSUREDAMAGE, CAN_OVERSLOT = TRUE, + UNSEALED_MESSAGE = GAUNTLET_UNSEAL_MESSAGE, + SEALED_MESSAGE = GAUNTLET_SEAL_MESSAGE, ), - BOOTS_FLAGS = list( + /obj/item/clothing/shoes/mod = list( UNSEALED_CLOTHING = THICKMATERIAL, SEALED_CLOTHING = STOPSPRESSUREDAMAGE, CAN_OVERSLOT = TRUE, + UNSEALED_MESSAGE = BOOT_UNSEAL_MESSAGE, + SEALED_MESSAGE = BOOT_SEAL_MESSAGE, ), ), ) @@ -255,30 +370,38 @@ /obj/item/storage/bag/construction, /obj/item/t_scanner, ) - skins = list( + variants = list( "advanced" = list( - HELMET_FLAGS = list( + /obj/item/clothing/head/mod = list( UNSEALED_LAYER = NECK_LAYER, UNSEALED_CLOTHING = SNUG_FIT, SEALED_CLOTHING = THICKMATERIAL|STOPSPRESSUREDAMAGE|BLOCK_GAS_SMOKE_EFFECT|HEADINTERNALS, UNSEALED_INVISIBILITY = HIDEFACIALHAIR, SEALED_INVISIBILITY = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDESNOUT, SEALED_COVER = HEADCOVERSMOUTH|HEADCOVERSEYES|PEPPERPROOF, + UNSEALED_MESSAGE = HELMET_UNSEAL_MESSAGE, + SEALED_MESSAGE = HELMET_SEAL_MESSAGE, ), - CHESTPLATE_FLAGS = list( + /obj/item/clothing/suit/mod = list( UNSEALED_CLOTHING = THICKMATERIAL, SEALED_CLOTHING = STOPSPRESSUREDAMAGE, SEALED_INVISIBILITY = HIDEJUMPSUIT, + UNSEALED_MESSAGE = CHESTPLATE_UNSEAL_MESSAGE, + SEALED_MESSAGE = CHESTPLATE_SEAL_MESSAGE, ), - GAUNTLETS_FLAGS = list( + /obj/item/clothing/gloves/mod = list( UNSEALED_CLOTHING = THICKMATERIAL, SEALED_CLOTHING = STOPSPRESSUREDAMAGE, CAN_OVERSLOT = TRUE, + UNSEALED_MESSAGE = GAUNTLET_UNSEAL_MESSAGE, + SEALED_MESSAGE = GAUNTLET_SEAL_MESSAGE, ), - BOOTS_FLAGS = list( + /obj/item/clothing/shoes/mod = list( UNSEALED_CLOTHING = THICKMATERIAL, SEALED_CLOTHING = STOPSPRESSUREDAMAGE, CAN_OVERSLOT = TRUE, + UNSEALED_MESSAGE = BOOT_UNSEAL_MESSAGE, + SEALED_MESSAGE = BOOT_SEAL_MESSAGE, ), ), ) @@ -321,72 +444,80 @@ min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT complexity_max = DEFAULT_MAX_COMPLEXITY - 2 charge_drain = DEFAULT_CHARGE_DRAIN * 2 - allowed_suit_storage = list( - /obj/item/resonator, - /obj/item/mining_scanner, - /obj/item/t_scanner/adv_mining_scanner, - /obj/item/pickaxe, - /obj/item/kinetic_crusher, - /obj/item/stack/ore/plasma, - /obj/item/storage/bag/ore, - /obj/item/gun/energy/recharge/kinetic_accelerator, - ) inbuilt_modules = list(/obj/item/mod/module/ash_accretion, /obj/item/mod/module/sphere_transform) - skins = list( + variants = list( "mining" = list( - HELMET_FLAGS = list( - UNSEALED_LAYER = null, + /obj/item/clothing/head/mod = list( UNSEALED_CLOTHING = SNUG_FIT, SEALED_CLOTHING = THICKMATERIAL|STOPSPRESSUREDAMAGE|HEADINTERNALS, UNSEALED_INVISIBILITY = HIDEEARS|HIDEHAIR, SEALED_INVISIBILITY = HIDEMASK|HIDEEYES|HIDEFACE|HIDEFACIALHAIR|HIDESNOUT, SEALED_COVER = HEADCOVERSMOUTH|HEADCOVERSEYES|PEPPERPROOF, + UNSEALED_MESSAGE = HELMET_UNSEAL_MESSAGE, + SEALED_MESSAGE = HELMET_SEAL_MESSAGE, ), - CHESTPLATE_FLAGS = list( + /obj/item/clothing/suit/mod = list( UNSEALED_CLOTHING = THICKMATERIAL, SEALED_CLOTHING = STOPSPRESSUREDAMAGE, SEALED_INVISIBILITY = HIDEJUMPSUIT, + UNSEALED_MESSAGE = CHESTPLATE_UNSEAL_MESSAGE, + SEALED_MESSAGE = CHESTPLATE_SEAL_MESSAGE, ), - GAUNTLETS_FLAGS = list( + /obj/item/clothing/gloves/mod = list( UNSEALED_CLOTHING = THICKMATERIAL, SEALED_CLOTHING = STOPSPRESSUREDAMAGE, CAN_OVERSLOT = TRUE, + UNSEALED_MESSAGE = GAUNTLET_UNSEAL_MESSAGE, + SEALED_MESSAGE = GAUNTLET_SEAL_MESSAGE, ), - BOOTS_FLAGS = list( + /obj/item/clothing/shoes/mod = list( UNSEALED_CLOTHING = THICKMATERIAL, SEALED_CLOTHING = STOPSPRESSUREDAMAGE, CAN_OVERSLOT = TRUE, + UNSEALED_MESSAGE = BOOT_UNSEAL_MESSAGE, + SEALED_MESSAGE = BOOT_SEAL_MESSAGE, ), ), "asteroid" = list( - HELMET_FLAGS = list( - UNSEALED_LAYER = null, + /obj/item/clothing/head/mod = list( UNSEALED_CLOTHING = SNUG_FIT|THICKMATERIAL, SEALED_CLOTHING = STOPSPRESSUREDAMAGE|HEADINTERNALS, UNSEALED_INVISIBILITY = HIDEFACIALHAIR|HIDEEARS|HIDEHAIR|HIDESNOUT, SEALED_INVISIBILITY = HIDEMASK|HIDEEYES|HIDEFACE, SEALED_COVER = HEADCOVERSMOUTH|HEADCOVERSEYES|PEPPERPROOF, + UNSEALED_MESSAGE = HELMET_UNSEAL_MESSAGE, + SEALED_MESSAGE = HELMET_SEAL_MESSAGE, ), - CHESTPLATE_FLAGS = list( + /obj/item/clothing/suit/mod = list( UNSEALED_CLOTHING = THICKMATERIAL, SEALED_CLOTHING = STOPSPRESSUREDAMAGE, SEALED_INVISIBILITY = HIDEJUMPSUIT, + UNSEALED_MESSAGE = CHESTPLATE_UNSEAL_MESSAGE, + SEALED_MESSAGE = CHESTPLATE_SEAL_MESSAGE, ), - GAUNTLETS_FLAGS = list( + /obj/item/clothing/gloves/mod = list( UNSEALED_CLOTHING = THICKMATERIAL, SEALED_CLOTHING = STOPSPRESSUREDAMAGE, CAN_OVERSLOT = TRUE, + UNSEALED_MESSAGE = GAUNTLET_UNSEAL_MESSAGE, + SEALED_MESSAGE = GAUNTLET_SEAL_MESSAGE, ), - BOOTS_FLAGS = list( + /obj/item/clothing/shoes/mod = list( UNSEALED_CLOTHING = THICKMATERIAL, SEALED_CLOTHING = STOPSPRESSUREDAMAGE, CAN_OVERSLOT = TRUE, + UNSEALED_MESSAGE = BOOT_UNSEAL_MESSAGE, + SEALED_MESSAGE = BOOT_SEAL_MESSAGE, ), ), ) +/datum/mod_theme/loader/New() + .=..() + allowed_suit_storage = GLOB.mining_suit_allowed + /datum/armor/mod_theme_mining - melee = 15 + melee = 20 bullet = 5 laser = 5 energy = 5 @@ -423,25 +554,32 @@ /obj/item/storage/bag/mail, ) inbuilt_modules = list(/obj/item/mod/module/hydraulic, /obj/item/mod/module/clamp/loader, /obj/item/mod/module/magnet) - skins = list( + variants = list( "loader" = list( - HELMET_FLAGS = list( - UNSEALED_LAYER = null, + /obj/item/clothing/head/mod = list( UNSEALED_CLOTHING = SNUG_FIT|THICKMATERIAL, UNSEALED_INVISIBILITY = HIDEEARS|HIDEHAIR, SEALED_INVISIBILITY = HIDEFACIALHAIR|HIDEMASK|HIDEEYES|HIDEFACE|HIDESNOUT, SEALED_COVER = HEADCOVERSMOUTH|HEADCOVERSEYES|PEPPERPROOF, + UNSEALED_MESSAGE = HELMET_UNSEAL_MESSAGE, + SEALED_MESSAGE = HELMET_SEAL_MESSAGE, ), - CHESTPLATE_FLAGS = list( + /obj/item/clothing/suit/mod = list( UNSEALED_CLOTHING = THICKMATERIAL, + UNSEALED_MESSAGE = CHESTPLATE_UNSEAL_MESSAGE, + SEALED_MESSAGE = CHESTPLATE_SEAL_MESSAGE, ), - GAUNTLETS_FLAGS = list( + /obj/item/clothing/gloves/mod = list( SEALED_CLOTHING = THICKMATERIAL, CAN_OVERSLOT = TRUE, + UNSEALED_MESSAGE = GAUNTLET_UNSEAL_MESSAGE, + SEALED_MESSAGE = GAUNTLET_SEAL_MESSAGE, ), - BOOTS_FLAGS = list( + /obj/item/clothing/shoes/mod = list( SEALED_CLOTHING = THICKMATERIAL, CAN_OVERSLOT = TRUE, + UNSEALED_MESSAGE = BOOT_UNSEAL_MESSAGE, + SEALED_MESSAGE = BOOT_SEAL_MESSAGE, ), ), ) @@ -486,55 +624,71 @@ /obj/item/storage/bag/chemistry, /obj/item/storage/bag/bio, ) - skins = list( + variants = list( "medical" = list( - HELMET_FLAGS = list( + /obj/item/clothing/head/mod = list( UNSEALED_LAYER = NECK_LAYER, UNSEALED_CLOTHING = SNUG_FIT, SEALED_CLOTHING = THICKMATERIAL|STOPSPRESSUREDAMAGE|BLOCK_GAS_SMOKE_EFFECT|HEADINTERNALS, UNSEALED_INVISIBILITY = HIDEFACIALHAIR, SEALED_INVISIBILITY = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDESNOUT, SEALED_COVER = HEADCOVERSMOUTH|HEADCOVERSEYES|PEPPERPROOF, + UNSEALED_MESSAGE = HELMET_UNSEAL_MESSAGE, + SEALED_MESSAGE = HELMET_SEAL_MESSAGE, ), - CHESTPLATE_FLAGS = list( + /obj/item/clothing/suit/mod = list( UNSEALED_CLOTHING = THICKMATERIAL, SEALED_CLOTHING = STOPSPRESSUREDAMAGE, SEALED_INVISIBILITY = HIDEJUMPSUIT, + UNSEALED_MESSAGE = CHESTPLATE_UNSEAL_MESSAGE, + SEALED_MESSAGE = CHESTPLATE_SEAL_MESSAGE, ), - GAUNTLETS_FLAGS = list( + /obj/item/clothing/gloves/mod = list( UNSEALED_CLOTHING = THICKMATERIAL, SEALED_CLOTHING = STOPSPRESSUREDAMAGE, CAN_OVERSLOT = TRUE, + UNSEALED_MESSAGE = GAUNTLET_UNSEAL_MESSAGE, + SEALED_MESSAGE = GAUNTLET_SEAL_MESSAGE, ), - BOOTS_FLAGS = list( + /obj/item/clothing/shoes/mod = list( UNSEALED_CLOTHING = THICKMATERIAL, SEALED_CLOTHING = STOPSPRESSUREDAMAGE, CAN_OVERSLOT = TRUE, + UNSEALED_MESSAGE = BOOT_UNSEAL_MESSAGE, + SEALED_MESSAGE = BOOT_SEAL_MESSAGE, ), ), "corpsman" = list( - HELMET_FLAGS = list( + /obj/item/clothing/head/mod = list( UNSEALED_LAYER = NECK_LAYER, UNSEALED_CLOTHING = SNUG_FIT, SEALED_CLOTHING = THICKMATERIAL|STOPSPRESSUREDAMAGE|BLOCK_GAS_SMOKE_EFFECT|HEADINTERNALS, UNSEALED_INVISIBILITY = HIDEFACIALHAIR, SEALED_INVISIBILITY = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDESNOUT, SEALED_COVER = HEADCOVERSMOUTH|HEADCOVERSEYES|PEPPERPROOF, + UNSEALED_MESSAGE = HELMET_UNSEAL_MESSAGE, + SEALED_MESSAGE = HELMET_SEAL_MESSAGE, ), - CHESTPLATE_FLAGS = list( + /obj/item/clothing/suit/mod = list( UNSEALED_CLOTHING = THICKMATERIAL, SEALED_CLOTHING = STOPSPRESSUREDAMAGE, SEALED_INVISIBILITY = HIDEJUMPSUIT, + UNSEALED_MESSAGE = CHESTPLATE_UNSEAL_MESSAGE, + SEALED_MESSAGE = CHESTPLATE_SEAL_MESSAGE, ), - GAUNTLETS_FLAGS = list( + /obj/item/clothing/gloves/mod = list( UNSEALED_CLOTHING = THICKMATERIAL, SEALED_CLOTHING = STOPSPRESSUREDAMAGE, CAN_OVERSLOT = TRUE, + UNSEALED_MESSAGE = GAUNTLET_UNSEAL_MESSAGE, + SEALED_MESSAGE = GAUNTLET_SEAL_MESSAGE, ), - BOOTS_FLAGS = list( + /obj/item/clothing/shoes/mod = list( UNSEALED_CLOTHING = THICKMATERIAL, SEALED_CLOTHING = STOPSPRESSUREDAMAGE, CAN_OVERSLOT = TRUE, + UNSEALED_MESSAGE = BOOT_UNSEAL_MESSAGE, + SEALED_MESSAGE = BOOT_SEAL_MESSAGE, ), ), ) @@ -583,30 +737,38 @@ /obj/item/storage/bag/bio, /obj/item/melee/baton/telescopic, ) - skins = list( + variants = list( "rescue" = list( - HELMET_FLAGS = list( + /obj/item/clothing/head/mod = list( UNSEALED_LAYER = NECK_LAYER, UNSEALED_CLOTHING = SNUG_FIT, SEALED_CLOTHING = THICKMATERIAL|STOPSPRESSUREDAMAGE|BLOCK_GAS_SMOKE_EFFECT|HEADINTERNALS, UNSEALED_INVISIBILITY = HIDEFACIALHAIR, SEALED_INVISIBILITY = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDESNOUT, SEALED_COVER = HEADCOVERSMOUTH|HEADCOVERSEYES|PEPPERPROOF, + UNSEALED_MESSAGE = HELMET_UNSEAL_MESSAGE, + SEALED_MESSAGE = HELMET_SEAL_MESSAGE, ), - CHESTPLATE_FLAGS = list( + /obj/item/clothing/suit/mod = list( UNSEALED_CLOTHING = THICKMATERIAL, SEALED_CLOTHING = STOPSPRESSUREDAMAGE, SEALED_INVISIBILITY = HIDEJUMPSUIT, + UNSEALED_MESSAGE = CHESTPLATE_UNSEAL_MESSAGE, + SEALED_MESSAGE = CHESTPLATE_SEAL_MESSAGE, ), - GAUNTLETS_FLAGS = list( + /obj/item/clothing/gloves/mod = list( UNSEALED_CLOTHING = THICKMATERIAL, SEALED_CLOTHING = STOPSPRESSUREDAMAGE, CAN_OVERSLOT = TRUE, + UNSEALED_MESSAGE = GAUNTLET_UNSEAL_MESSAGE, + SEALED_MESSAGE = GAUNTLET_SEAL_MESSAGE, ), - BOOTS_FLAGS = list( + /obj/item/clothing/shoes/mod = list( UNSEALED_CLOTHING = THICKMATERIAL, SEALED_CLOTHING = STOPSPRESSUREDAMAGE, CAN_OVERSLOT = TRUE, + UNSEALED_MESSAGE = BOOT_UNSEAL_MESSAGE, + SEALED_MESSAGE = BOOT_SEAL_MESSAGE, ), ), ) @@ -649,29 +811,36 @@ /obj/item/storage/bag/bio, /obj/item/melee/baton/telescopic, ) - skins = list( + variants = list( "research" = list( - HELMET_FLAGS = list( - UNSEALED_LAYER = null, + /obj/item/clothing/head/mod = list( UNSEALED_CLOTHING = SNUG_FIT|THICKMATERIAL, SEALED_CLOTHING = STOPSPRESSUREDAMAGE|BLOCK_GAS_SMOKE_EFFECT|HEADINTERNALS, UNSEALED_INVISIBILITY = HIDEFACIALHAIR|HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDESNOUT, UNSEALED_COVER = HEADCOVERSMOUTH|HEADCOVERSEYES|PEPPERPROOF, + UNSEALED_MESSAGE = HELMET_UNSEAL_MESSAGE, + SEALED_MESSAGE = HELMET_SEAL_MESSAGE, ), - CHESTPLATE_FLAGS = list( + /obj/item/clothing/suit/mod = list( UNSEALED_CLOTHING = THICKMATERIAL, SEALED_CLOTHING = STOPSPRESSUREDAMAGE, SEALED_INVISIBILITY = HIDEJUMPSUIT, + UNSEALED_MESSAGE = CHESTPLATE_UNSEAL_MESSAGE, + SEALED_MESSAGE = CHESTPLATE_SEAL_MESSAGE, ), - GAUNTLETS_FLAGS = list( + /obj/item/clothing/gloves/mod = list( UNSEALED_CLOTHING = THICKMATERIAL, SEALED_CLOTHING = STOPSPRESSUREDAMAGE, CAN_OVERSLOT = TRUE, + UNSEALED_MESSAGE = GAUNTLET_UNSEAL_MESSAGE, + SEALED_MESSAGE = GAUNTLET_SEAL_MESSAGE, ), - BOOTS_FLAGS = list( + /obj/item/clothing/shoes/mod = list( UNSEALED_CLOTHING = THICKMATERIAL, SEALED_CLOTHING = STOPSPRESSUREDAMAGE, CAN_OVERSLOT = TRUE, + UNSEALED_MESSAGE = BOOT_UNSEAL_MESSAGE, + SEALED_MESSAGE = BOOT_SEAL_MESSAGE, ), ), ) @@ -707,31 +876,38 @@ /obj/item/assembly/flash, /obj/item/melee/baton, ) - skins = list( + variants = list( "security" = list( - HELMET_FLAGS = list( - UNSEALED_LAYER = null, + /obj/item/clothing/head/mod = list( UNSEALED_CLOTHING = SNUG_FIT|THICKMATERIAL, SEALED_CLOTHING = STOPSPRESSUREDAMAGE|HEADINTERNALS, UNSEALED_INVISIBILITY = HIDEFACIALHAIR|HIDEEARS|HIDEHAIR|HIDESNOUT, SEALED_INVISIBILITY = HIDEMASK|HIDEEYES|HIDEFACE, UNSEALED_COVER = HEADCOVERSMOUTH, SEALED_COVER = HEADCOVERSEYES|PEPPERPROOF, + UNSEALED_MESSAGE = HELMET_UNSEAL_MESSAGE, + SEALED_MESSAGE = HELMET_SEAL_MESSAGE, ), - CHESTPLATE_FLAGS = list( + /obj/item/clothing/suit/mod = list( UNSEALED_CLOTHING = THICKMATERIAL, SEALED_CLOTHING = STOPSPRESSUREDAMAGE, SEALED_INVISIBILITY = HIDEJUMPSUIT, + UNSEALED_MESSAGE = CHESTPLATE_UNSEAL_MESSAGE, + SEALED_MESSAGE = CHESTPLATE_SEAL_MESSAGE, ), - GAUNTLETS_FLAGS = list( + /obj/item/clothing/gloves/mod = list( UNSEALED_CLOTHING = THICKMATERIAL, SEALED_CLOTHING = STOPSPRESSUREDAMAGE, CAN_OVERSLOT = TRUE, + UNSEALED_MESSAGE = GAUNTLET_UNSEAL_MESSAGE, + SEALED_MESSAGE = GAUNTLET_SEAL_MESSAGE, ), - BOOTS_FLAGS = list( + /obj/item/clothing/shoes/mod = list( UNSEALED_CLOTHING = THICKMATERIAL, SEALED_CLOTHING = STOPSPRESSUREDAMAGE, CAN_OVERSLOT = TRUE, + UNSEALED_MESSAGE = BOOT_UNSEAL_MESSAGE, + SEALED_MESSAGE = BOOT_SEAL_MESSAGE, ), ), ) @@ -769,29 +945,36 @@ /obj/item/assembly/flash, /obj/item/melee/baton, ) - skins = list( + variants = list( "safeguard" = list( - HELMET_FLAGS = list( - UNSEALED_LAYER = null, + /obj/item/clothing/head/mod = list( UNSEALED_CLOTHING = SNUG_FIT|THICKMATERIAL, SEALED_CLOTHING = STOPSPRESSUREDAMAGE|HEADINTERNALS, UNSEALED_INVISIBILITY = HIDEFACIALHAIR|HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDESNOUT, UNSEALED_COVER = HEADCOVERSMOUTH|HEADCOVERSEYES|PEPPERPROOF, + UNSEALED_MESSAGE = HELMET_UNSEAL_MESSAGE, + SEALED_MESSAGE = HELMET_SEAL_MESSAGE, ), - CHESTPLATE_FLAGS = list( + /obj/item/clothing/suit/mod = list( UNSEALED_CLOTHING = THICKMATERIAL, SEALED_CLOTHING = STOPSPRESSUREDAMAGE, SEALED_INVISIBILITY = HIDEJUMPSUIT, + UNSEALED_MESSAGE = CHESTPLATE_UNSEAL_MESSAGE, + SEALED_MESSAGE = CHESTPLATE_SEAL_MESSAGE, ), - GAUNTLETS_FLAGS = list( + /obj/item/clothing/gloves/mod = list( UNSEALED_CLOTHING = THICKMATERIAL, SEALED_CLOTHING = STOPSPRESSUREDAMAGE, CAN_OVERSLOT = TRUE, + UNSEALED_MESSAGE = GAUNTLET_UNSEAL_MESSAGE, + SEALED_MESSAGE = GAUNTLET_SEAL_MESSAGE, ), - BOOTS_FLAGS = list( + /obj/item/clothing/shoes/mod = list( UNSEALED_CLOTHING = THICKMATERIAL, SEALED_CLOTHING = STOPSPRESSUREDAMAGE, CAN_OVERSLOT = TRUE, + UNSEALED_MESSAGE = BOOT_UNSEAL_MESSAGE, + SEALED_MESSAGE = BOOT_SEAL_MESSAGE, ), ), ) @@ -833,30 +1016,38 @@ /obj/item/assembly/flash, /obj/item/melee/baton, ) - skins = list( + variants = list( "magnate" = list( - HELMET_FLAGS = list( + /obj/item/clothing/head/mod = list( UNSEALED_LAYER = NECK_LAYER, UNSEALED_CLOTHING = SNUG_FIT, SEALED_CLOTHING = THICKMATERIAL|STOPSPRESSUREDAMAGE|HEADINTERNALS, UNSEALED_INVISIBILITY = HIDEFACIALHAIR, SEALED_INVISIBILITY = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDESNOUT, SEALED_COVER = HEADCOVERSMOUTH|HEADCOVERSEYES|PEPPERPROOF, + UNSEALED_MESSAGE = HELMET_UNSEAL_MESSAGE, + SEALED_MESSAGE = HELMET_SEAL_MESSAGE, ), - CHESTPLATE_FLAGS = list( + /obj/item/clothing/suit/mod = list( UNSEALED_CLOTHING = THICKMATERIAL, SEALED_CLOTHING = STOPSPRESSUREDAMAGE, SEALED_INVISIBILITY = HIDEJUMPSUIT, + UNSEALED_MESSAGE = CHESTPLATE_UNSEAL_MESSAGE, + SEALED_MESSAGE = CHESTPLATE_SEAL_MESSAGE, ), - GAUNTLETS_FLAGS = list( + /obj/item/clothing/gloves/mod = list( UNSEALED_CLOTHING = THICKMATERIAL, SEALED_CLOTHING = STOPSPRESSUREDAMAGE, CAN_OVERSLOT = TRUE, + UNSEALED_MESSAGE = GAUNTLET_UNSEAL_MESSAGE, + SEALED_MESSAGE = GAUNTLET_SEAL_MESSAGE, ), - BOOTS_FLAGS = list( + /obj/item/clothing/shoes/mod = list( UNSEALED_CLOTHING = THICKMATERIAL, SEALED_CLOTHING = STOPSPRESSUREDAMAGE, CAN_OVERSLOT = TRUE, + UNSEALED_MESSAGE = BOOT_UNSEAL_MESSAGE, + SEALED_MESSAGE = BOOT_SEAL_MESSAGE, ), ), ) @@ -893,30 +1084,38 @@ /obj/item/instrument, /obj/item/toy/balloon_animal, ) - skins = list( + variants = list( "cosmohonk" = list( - HELMET_FLAGS = list( + /obj/item/clothing/head/mod = list( UNSEALED_LAYER = NECK_LAYER, UNSEALED_CLOTHING = SNUG_FIT|THICKMATERIAL, SEALED_CLOTHING = STOPSPRESSUREDAMAGE|HEADINTERNALS, UNSEALED_INVISIBILITY = HIDEEARS|HIDEHAIR, SEALED_INVISIBILITY = HIDEFACIALHAIR|HIDEMASK|HIDEEYES|HIDEFACE|HIDESNOUT, SEALED_COVER = HEADCOVERSMOUTH|HEADCOVERSEYES|PEPPERPROOF, + UNSEALED_MESSAGE = HELMET_UNSEAL_MESSAGE, + SEALED_MESSAGE = HELMET_SEAL_MESSAGE, ), - CHESTPLATE_FLAGS = list( + /obj/item/clothing/suit/mod = list( UNSEALED_CLOTHING = THICKMATERIAL, SEALED_CLOTHING = STOPSPRESSUREDAMAGE, SEALED_INVISIBILITY = HIDEJUMPSUIT, + UNSEALED_MESSAGE = CHESTPLATE_UNSEAL_MESSAGE, + SEALED_MESSAGE = CHESTPLATE_SEAL_MESSAGE, ), - GAUNTLETS_FLAGS = list( + /obj/item/clothing/gloves/mod = list( UNSEALED_CLOTHING = THICKMATERIAL, SEALED_CLOTHING = STOPSPRESSUREDAMAGE, CAN_OVERSLOT = TRUE, + UNSEALED_MESSAGE = GAUNTLET_UNSEAL_MESSAGE, + SEALED_MESSAGE = GAUNTLET_SEAL_MESSAGE, ), - BOOTS_FLAGS = list( + /obj/item/clothing/shoes/mod = list( UNSEALED_CLOTHING = THICKMATERIAL, SEALED_CLOTHING = STOPSPRESSUREDAMAGE, CAN_OVERSLOT = TRUE, + UNSEALED_MESSAGE = BOOT_UNSEAL_MESSAGE, + SEALED_MESSAGE = BOOT_SEAL_MESSAGE, ), ), ) @@ -960,55 +1159,71 @@ /obj/item/melee/energy/sword, /obj/item/shield/energy, ) - skins = list( + variants = list( "syndicate" = list( - HELMET_FLAGS = list( + /obj/item/clothing/head/mod = list( UNSEALED_LAYER = NECK_LAYER, UNSEALED_CLOTHING = SNUG_FIT, SEALED_CLOTHING = THICKMATERIAL|STOPSPRESSUREDAMAGE|HEADINTERNALS, UNSEALED_INVISIBILITY = HIDEFACIALHAIR, SEALED_INVISIBILITY = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDESNOUT, SEALED_COVER = HEADCOVERSMOUTH|HEADCOVERSEYES|PEPPERPROOF, + UNSEALED_MESSAGE = HELMET_UNSEAL_MESSAGE, + SEALED_MESSAGE = HELMET_SEAL_MESSAGE, ), - CHESTPLATE_FLAGS = list( + /obj/item/clothing/suit/mod = list( UNSEALED_CLOTHING = THICKMATERIAL, SEALED_CLOTHING = STOPSPRESSUREDAMAGE, SEALED_INVISIBILITY = HIDEJUMPSUIT, + UNSEALED_MESSAGE = CHESTPLATE_UNSEAL_MESSAGE, + SEALED_MESSAGE = CHESTPLATE_SEAL_MESSAGE, ), - GAUNTLETS_FLAGS = list( + /obj/item/clothing/gloves/mod = list( UNSEALED_CLOTHING = THICKMATERIAL, SEALED_CLOTHING = STOPSPRESSUREDAMAGE, CAN_OVERSLOT = TRUE, + UNSEALED_MESSAGE = GAUNTLET_UNSEAL_MESSAGE, + SEALED_MESSAGE = GAUNTLET_SEAL_MESSAGE, ), - BOOTS_FLAGS = list( + /obj/item/clothing/shoes/mod = list( UNSEALED_CLOTHING = THICKMATERIAL, SEALED_CLOTHING = STOPSPRESSUREDAMAGE, CAN_OVERSLOT = TRUE, + UNSEALED_MESSAGE = BOOT_UNSEAL_MESSAGE, + SEALED_MESSAGE = BOOT_SEAL_MESSAGE, ), ), "honkerative" = list( - HELMET_FLAGS = list( + /obj/item/clothing/head/mod = list( UNSEALED_LAYER = NECK_LAYER, UNSEALED_CLOTHING = SNUG_FIT, SEALED_CLOTHING = THICKMATERIAL|STOPSPRESSUREDAMAGE|HEADINTERNALS, UNSEALED_INVISIBILITY = HIDEFACIALHAIR, SEALED_INVISIBILITY = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDESNOUT, SEALED_COVER = HEADCOVERSMOUTH|HEADCOVERSEYES|PEPPERPROOF, + UNSEALED_MESSAGE = HELMET_UNSEAL_MESSAGE, + SEALED_MESSAGE = HELMET_SEAL_MESSAGE, ), - CHESTPLATE_FLAGS = list( + /obj/item/clothing/suit/mod = list( UNSEALED_CLOTHING = THICKMATERIAL, SEALED_CLOTHING = STOPSPRESSUREDAMAGE, SEALED_INVISIBILITY = HIDEJUMPSUIT, + UNSEALED_MESSAGE = CHESTPLATE_UNSEAL_MESSAGE, + SEALED_MESSAGE = CHESTPLATE_SEAL_MESSAGE, ), - GAUNTLETS_FLAGS = list( + /obj/item/clothing/gloves/mod = list( UNSEALED_CLOTHING = THICKMATERIAL, SEALED_CLOTHING = STOPSPRESSUREDAMAGE, CAN_OVERSLOT = TRUE, + UNSEALED_MESSAGE = GAUNTLET_UNSEAL_MESSAGE, + SEALED_MESSAGE = GAUNTLET_SEAL_MESSAGE, ), - BOOTS_FLAGS = list( + /obj/item/clothing/shoes/mod = list( UNSEALED_CLOTHING = THICKMATERIAL, SEALED_CLOTHING = STOPSPRESSUREDAMAGE, CAN_OVERSLOT = TRUE, + UNSEALED_MESSAGE = BOOT_UNSEAL_MESSAGE, + SEALED_MESSAGE = BOOT_SEAL_MESSAGE, ), ), ) @@ -1051,30 +1266,37 @@ /obj/item/melee/energy/sword, /obj/item/shield/energy, ) - skins = list( + variants = list( "elite" = list( - HELMET_FLAGS = list( - UNSEALED_LAYER = null, + /obj/item/clothing/head/mod = list( UNSEALED_CLOTHING = SNUG_FIT, SEALED_CLOTHING = THICKMATERIAL|STOPSPRESSUREDAMAGE|BLOCK_GAS_SMOKE_EFFECT|HEADINTERNALS, UNSEALED_INVISIBILITY = HIDEFACIALHAIR, SEALED_INVISIBILITY = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDESNOUT, SEALED_COVER = HEADCOVERSMOUTH|HEADCOVERSEYES|PEPPERPROOF, + UNSEALED_MESSAGE = HELMET_UNSEAL_MESSAGE, + SEALED_MESSAGE = HELMET_SEAL_MESSAGE, ), - CHESTPLATE_FLAGS = list( + /obj/item/clothing/suit/mod = list( UNSEALED_CLOTHING = THICKMATERIAL, SEALED_CLOTHING = STOPSPRESSUREDAMAGE, SEALED_INVISIBILITY = HIDEJUMPSUIT, + UNSEALED_MESSAGE = CHESTPLATE_UNSEAL_MESSAGE, + SEALED_MESSAGE = CHESTPLATE_SEAL_MESSAGE, ), - GAUNTLETS_FLAGS = list( + /obj/item/clothing/gloves/mod = list( UNSEALED_CLOTHING = THICKMATERIAL, SEALED_CLOTHING = STOPSPRESSUREDAMAGE, CAN_OVERSLOT = TRUE, + UNSEALED_MESSAGE = GAUNTLET_UNSEAL_MESSAGE, + SEALED_MESSAGE = GAUNTLET_SEAL_MESSAGE, ), - BOOTS_FLAGS = list( + /obj/item/clothing/shoes/mod = list( UNSEALED_CLOTHING = THICKMATERIAL, SEALED_CLOTHING = STOPSPRESSUREDAMAGE, CAN_OVERSLOT = TRUE, + UNSEALED_MESSAGE = BOOT_UNSEAL_MESSAGE, + SEALED_MESSAGE = BOOT_SEAL_MESSAGE, ), ), ) @@ -1118,28 +1340,35 @@ /obj/item/melee/energy/sword, /obj/item/shield/energy, ) - skins = list( + variants = list( "infiltrator" = list( - HELMET_FLAGS = list( - UNSEALED_LAYER = null, + /obj/item/clothing/head/mod = list( UNSEALED_CLOTHING = SNUG_FIT|THICKMATERIAL, UNSEALED_INVISIBILITY = HIDEEARS|HIDEHAIR, SEALED_INVISIBILITY = HIDEFACIALHAIR|HIDEMASK|HIDEEYES|HIDEFACE|HIDESNOUT, SEALED_COVER = HEADCOVERSMOUTH|HEADCOVERSEYES|PEPPERPROOF, CAN_OVERSLOT = TRUE, + UNSEALED_MESSAGE = HELMET_UNSEAL_MESSAGE, + SEALED_MESSAGE = HELMET_SEAL_MESSAGE, ), - CHESTPLATE_FLAGS = list( + /obj/item/clothing/suit/mod = list( UNSEALED_CLOTHING = THICKMATERIAL, SEALED_INVISIBILITY = HIDEJUMPSUIT, CAN_OVERSLOT = TRUE, + UNSEALED_MESSAGE = CHESTPLATE_UNSEAL_MESSAGE, + SEALED_MESSAGE = CHESTPLATE_SEAL_MESSAGE, ), - GAUNTLETS_FLAGS = list( + /obj/item/clothing/gloves/mod = list( SEALED_CLOTHING = THICKMATERIAL, CAN_OVERSLOT = TRUE, + UNSEALED_MESSAGE = GAUNTLET_UNSEAL_MESSAGE, + SEALED_MESSAGE = GAUNTLET_SEAL_MESSAGE, ), - BOOTS_FLAGS = list( + /obj/item/clothing/shoes/mod = list( SEALED_CLOTHING = THICKMATERIAL, CAN_OVERSLOT = TRUE, + UNSEALED_MESSAGE = BOOT_UNSEAL_MESSAGE, + SEALED_MESSAGE = BOOT_SEAL_MESSAGE, ), ), ) @@ -1173,7 +1402,7 @@ charge_drain = DEFAULT_CHARGE_DRAIN * 2 slowdown_inactive = 0.0 slowdown_active = -0.5 - inbuilt_modules = list(/obj/item/mod/module/quick_carry/advanced, /obj/item/mod/module/organ_thrower) + inbuilt_modules = list(/obj/item/mod/module/quick_carry/advanced) allowed_suit_storage = list( /obj/item/assembly/flash, /obj/item/healthanalyzer, @@ -1195,30 +1424,38 @@ /obj/item/storage/bag/chemistry, /obj/item/storage/pill_bottle, ) - skins = list( + variants = list( "interdyne" = list( - HELMET_FLAGS = list( + /obj/item/clothing/head/mod = list( UNSEALED_LAYER = NECK_LAYER, UNSEALED_CLOTHING = SNUG_FIT, SEALED_CLOTHING = THICKMATERIAL|STOPSPRESSUREDAMAGE|BLOCK_GAS_SMOKE_EFFECT|HEADINTERNALS, UNSEALED_INVISIBILITY = HIDEFACIALHAIR, SEALED_INVISIBILITY = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDESNOUT, SEALED_COVER = HEADCOVERSMOUTH|HEADCOVERSEYES|PEPPERPROOF, + UNSEALED_MESSAGE = HELMET_UNSEAL_MESSAGE, + SEALED_MESSAGE = HELMET_SEAL_MESSAGE, ), - CHESTPLATE_FLAGS = list( + /obj/item/clothing/suit/mod = list( UNSEALED_CLOTHING = THICKMATERIAL, SEALED_CLOTHING = STOPSPRESSUREDAMAGE, SEALED_INVISIBILITY = HIDEJUMPSUIT, + UNSEALED_MESSAGE = CHESTPLATE_UNSEAL_MESSAGE, + SEALED_MESSAGE = CHESTPLATE_SEAL_MESSAGE, ), - GAUNTLETS_FLAGS = list( + /obj/item/clothing/gloves/mod = list( UNSEALED_CLOTHING = THICKMATERIAL, SEALED_CLOTHING = STOPSPRESSUREDAMAGE, CAN_OVERSLOT = TRUE, + UNSEALED_MESSAGE = GAUNTLET_UNSEAL_MESSAGE, + SEALED_MESSAGE = GAUNTLET_SEAL_MESSAGE, ), - BOOTS_FLAGS = list( + /obj/item/clothing/shoes/mod = list( UNSEALED_CLOTHING = THICKMATERIAL, SEALED_CLOTHING = STOPSPRESSUREDAMAGE, CAN_OVERSLOT = TRUE, + UNSEALED_MESSAGE = BOOT_UNSEAL_MESSAGE, + SEALED_MESSAGE = BOOT_SEAL_MESSAGE, ), ), ) @@ -1259,29 +1496,36 @@ /obj/item/highfrequencyblade/wizard, /obj/item/gun/magic, ) - skins = list( + variants = list( "enchanted" = list( - HELMET_FLAGS = list( - UNSEALED_LAYER = null, + /obj/item/clothing/head/mod = list( UNSEALED_CLOTHING = SNUG_FIT|THICKMATERIAL|CASTING_CLOTHES, SEALED_CLOTHING = STOPSPRESSUREDAMAGE|HEADINTERNALS, UNSEALED_INVISIBILITY = HIDEFACIALHAIR|HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDESNOUT, UNSEALED_COVER = HEADCOVERSMOUTH|HEADCOVERSEYES|PEPPERPROOF, + UNSEALED_MESSAGE = HELMET_UNSEAL_MESSAGE, + SEALED_MESSAGE = HELMET_SEAL_MESSAGE, ), - CHESTPLATE_FLAGS = list( + /obj/item/clothing/suit/mod = list( UNSEALED_CLOTHING = THICKMATERIAL|CASTING_CLOTHES, SEALED_CLOTHING = STOPSPRESSUREDAMAGE, SEALED_INVISIBILITY = HIDEJUMPSUIT, + UNSEALED_MESSAGE = CHESTPLATE_UNSEAL_MESSAGE, + SEALED_MESSAGE = CHESTPLATE_SEAL_MESSAGE, ), - GAUNTLETS_FLAGS = list( + /obj/item/clothing/gloves/mod = list( UNSEALED_CLOTHING = THICKMATERIAL, SEALED_CLOTHING = STOPSPRESSUREDAMAGE, CAN_OVERSLOT = TRUE, + UNSEALED_MESSAGE = GAUNTLET_UNSEAL_MESSAGE, + SEALED_MESSAGE = GAUNTLET_SEAL_MESSAGE, ), - BOOTS_FLAGS = list( + /obj/item/clothing/shoes/mod = list( UNSEALED_CLOTHING = THICKMATERIAL, SEALED_CLOTHING = STOPSPRESSUREDAMAGE, CAN_OVERSLOT = TRUE, + UNSEALED_MESSAGE = BOOT_UNSEAL_MESSAGE, + SEALED_MESSAGE = BOOT_SEAL_MESSAGE, ), ), ) @@ -1320,30 +1564,37 @@ /obj/item/melee/baton, /obj/item/restraints/handcuffs, ) - skins = list( + variants = list( "ninja" = list( - HELMET_FLAGS = list( - UNSEALED_LAYER = null, + /obj/item/clothing/head/mod = list( UNSEALED_CLOTHING = SNUG_FIT|THICKMATERIAL, SEALED_CLOTHING = STOPSPRESSUREDAMAGE|HEADINTERNALS, UNSEALED_INVISIBILITY = HIDEEARS|HIDEHAIR, SEALED_INVISIBILITY = HIDEFACIALHAIR|HIDEMASK|HIDEEYES|HIDEFACE|HIDESNOUT, SEALED_COVER = HEADCOVERSMOUTH|HEADCOVERSEYES|PEPPERPROOF, + UNSEALED_MESSAGE = HELMET_UNSEAL_MESSAGE, + SEALED_MESSAGE = HELMET_SEAL_MESSAGE, ), - CHESTPLATE_FLAGS = list( + /obj/item/clothing/suit/mod = list( UNSEALED_CLOTHING = THICKMATERIAL, SEALED_CLOTHING = STOPSPRESSUREDAMAGE, SEALED_INVISIBILITY = HIDEJUMPSUIT, + UNSEALED_MESSAGE = CHESTPLATE_UNSEAL_MESSAGE, + SEALED_MESSAGE = CHESTPLATE_SEAL_MESSAGE, ), - GAUNTLETS_FLAGS = list( + /obj/item/clothing/gloves/mod = list( UNSEALED_CLOTHING = THICKMATERIAL, SEALED_CLOTHING = STOPSPRESSUREDAMAGE, CAN_OVERSLOT = TRUE, + UNSEALED_MESSAGE = GAUNTLET_UNSEAL_MESSAGE, + SEALED_MESSAGE = GAUNTLET_SEAL_MESSAGE, ), - BOOTS_FLAGS = list( + /obj/item/clothing/shoes/mod = list( UNSEALED_CLOTHING = THICKMATERIAL, SEALED_CLOTHING = STOPSPRESSUREDAMAGE, CAN_OVERSLOT = TRUE, + UNSEALED_MESSAGE = BOOT_UNSEAL_MESSAGE, + SEALED_MESSAGE = BOOT_SEAL_MESSAGE, ), ), ) @@ -1385,29 +1636,36 @@ /obj/item/pipe_dispenser, /obj/item/construction/rcd, ) - skins = list( + variants = list( "prototype" = list( - HELMET_FLAGS = list( - UNSEALED_LAYER = null, + /obj/item/clothing/head/mod = list( UNSEALED_CLOTHING = SNUG_FIT|THICKMATERIAL, SEALED_CLOTHING = STOPSPRESSUREDAMAGE|HEADINTERNALS, UNSEALED_INVISIBILITY = HIDEFACIALHAIR|HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDESNOUT, UNSEALED_COVER = HEADCOVERSMOUTH|HEADCOVERSEYES|PEPPERPROOF, + UNSEALED_MESSAGE = HELMET_UNSEAL_MESSAGE, + SEALED_MESSAGE = HELMET_SEAL_MESSAGE, ), - CHESTPLATE_FLAGS = list( + /obj/item/clothing/suit/mod = list( UNSEALED_CLOTHING = THICKMATERIAL, SEALED_CLOTHING = STOPSPRESSUREDAMAGE, SEALED_INVISIBILITY = HIDEJUMPSUIT, + UNSEALED_MESSAGE = CHESTPLATE_UNSEAL_MESSAGE, + SEALED_MESSAGE = CHESTPLATE_SEAL_MESSAGE, ), - GAUNTLETS_FLAGS = list( + /obj/item/clothing/gloves/mod = list( UNSEALED_CLOTHING = THICKMATERIAL, SEALED_CLOTHING = STOPSPRESSUREDAMAGE, CAN_OVERSLOT = TRUE, + UNSEALED_MESSAGE = GAUNTLET_UNSEAL_MESSAGE, + SEALED_MESSAGE = GAUNTLET_SEAL_MESSAGE, ), - BOOTS_FLAGS = list( + /obj/item/clothing/shoes/mod = list( UNSEALED_CLOTHING = THICKMATERIAL, SEALED_CLOTHING = STOPSPRESSUREDAMAGE, CAN_OVERSLOT = TRUE, + UNSEALED_MESSAGE = BOOT_UNSEAL_MESSAGE, + SEALED_MESSAGE = BOOT_SEAL_MESSAGE, ), ), ) @@ -1423,6 +1681,73 @@ acid = 75 wound = 5 +/datum/mod_theme/glitch + name = "glitch" + desc = "A modsuit outfitted for elite Cyber Authority units to track, capture, and eliminate organic intruders." + extended_desc = "The Cyber Authority function as a digital police force, patrolling the digital realm and enforcing the law. Cyber Tac units are \ + the elite of the elite, outfitted with lethal weaponry and fast mobility specially designed to quell organic uprisings." + default_skin = "glitch" + armor_type = /datum/armor/mod_theme_glitch + resistance_flags = FIRE_PROOF|ACID_PROOF + atom_flags = PREVENT_CONTENTS_EXPLOSION_1 + max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT + complexity_max = DEFAULT_MAX_COMPLEXITY + 3 + siemens_coefficient = 0 + slowdown_inactive = 1 + slowdown_active = 0.5 + ui_theme = "terminal" + inbuilt_modules = list(/obj/item/mod/module/armor_booster) + allowed_suit_storage = list( + /obj/item/ammo_box, + /obj/item/ammo_casing, + /obj/item/restraints/handcuffs, + /obj/item/assembly/flash, + ) + variants = list( + "glitch" = list( + /obj/item/clothing/head/mod = list( + UNSEALED_CLOTHING = SNUG_FIT, + SEALED_CLOTHING = THICKMATERIAL|STOPSPRESSUREDAMAGE|BLOCK_GAS_SMOKE_EFFECT|HEADINTERNALS, + UNSEALED_INVISIBILITY = HIDEFACIALHAIR, + SEALED_INVISIBILITY = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDESNOUT, + SEALED_COVER = HEADCOVERSMOUTH|HEADCOVERSEYES|PEPPERPROOF, + UNSEALED_MESSAGE = HELMET_UNSEAL_MESSAGE, + SEALED_MESSAGE = HELMET_SEAL_MESSAGE, + ), + /obj/item/clothing/suit/mod = list( + UNSEALED_CLOTHING = THICKMATERIAL, + SEALED_CLOTHING = STOPSPRESSUREDAMAGE, + SEALED_INVISIBILITY = HIDEJUMPSUIT, + UNSEALED_MESSAGE = CHESTPLATE_UNSEAL_MESSAGE, + SEALED_MESSAGE = CHESTPLATE_SEAL_MESSAGE, + ), + /obj/item/clothing/gloves/mod = list( + UNSEALED_CLOTHING = THICKMATERIAL, + SEALED_CLOTHING = STOPSPRESSUREDAMAGE, + CAN_OVERSLOT = TRUE, + UNSEALED_MESSAGE = GAUNTLET_UNSEAL_MESSAGE, + SEALED_MESSAGE = GAUNTLET_SEAL_MESSAGE, + ), + /obj/item/clothing/shoes/mod = list( + UNSEALED_CLOTHING = THICKMATERIAL, + SEALED_CLOTHING = STOPSPRESSUREDAMAGE, + CAN_OVERSLOT = TRUE, + UNSEALED_MESSAGE = BOOT_UNSEAL_MESSAGE, + SEALED_MESSAGE = BOOT_SEAL_MESSAGE, + ), + ), + ) + +/datum/armor/mod_theme_glitch + melee = 15 + bullet = 20 + laser = 35 + bomb = 65 + bio = 100 + fire = 100 + acid = 100 + wound = 100 + /datum/mod_theme/responsory name = "responsory" desc = "A high-speed rescue suit by Nanotrasen, intended for its emergency response teams." @@ -1444,54 +1769,69 @@ /obj/item/assembly/flash, /obj/item/melee/baton, ) - skins = list( + variants = list( "responsory" = list( - HELMET_FLAGS = list( + /obj/item/clothing/head/mod = list( UNSEALED_LAYER = NECK_LAYER, UNSEALED_CLOTHING = SNUG_FIT, SEALED_CLOTHING = THICKMATERIAL|STOPSPRESSUREDAMAGE|BLOCK_GAS_SMOKE_EFFECT|HEADINTERNALS, UNSEALED_INVISIBILITY = HIDEFACIALHAIR, SEALED_INVISIBILITY = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDESNOUT, SEALED_COVER = HEADCOVERSMOUTH|HEADCOVERSEYES|PEPPERPROOF, + UNSEALED_MESSAGE = HELMET_UNSEAL_MESSAGE, + SEALED_MESSAGE = HELMET_SEAL_MESSAGE, ), - CHESTPLATE_FLAGS = list( + /obj/item/clothing/suit/mod = list( UNSEALED_CLOTHING = THICKMATERIAL, SEALED_CLOTHING = STOPSPRESSUREDAMAGE, SEALED_INVISIBILITY = HIDEJUMPSUIT, + UNSEALED_MESSAGE = CHESTPLATE_UNSEAL_MESSAGE, + SEALED_MESSAGE = CHESTPLATE_SEAL_MESSAGE, ), - GAUNTLETS_FLAGS = list( + /obj/item/clothing/gloves/mod = list( UNSEALED_CLOTHING = THICKMATERIAL, SEALED_CLOTHING = STOPSPRESSUREDAMAGE, CAN_OVERSLOT = TRUE, + UNSEALED_MESSAGE = GAUNTLET_UNSEAL_MESSAGE, + SEALED_MESSAGE = GAUNTLET_SEAL_MESSAGE, ), - BOOTS_FLAGS = list( + /obj/item/clothing/shoes/mod = list( UNSEALED_CLOTHING = THICKMATERIAL, SEALED_CLOTHING = STOPSPRESSUREDAMAGE, CAN_OVERSLOT = TRUE, + UNSEALED_MESSAGE = BOOT_UNSEAL_MESSAGE, + SEALED_MESSAGE = BOOT_SEAL_MESSAGE, ), ), "inquisitory" = list( - HELMET_FLAGS = list( - UNSEALED_LAYER = null, + /obj/item/clothing/head/mod = list( UNSEALED_CLOTHING = SNUG_FIT|THICKMATERIAL, SEALED_CLOTHING = STOPSPRESSUREDAMAGE|BLOCK_GAS_SMOKE_EFFECT|HEADINTERNALS, UNSEALED_INVISIBILITY = HIDEFACIALHAIR|HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDESNOUT, UNSEALED_COVER = HEADCOVERSMOUTH|HEADCOVERSEYES|PEPPERPROOF, + UNSEALED_MESSAGE = HELMET_UNSEAL_MESSAGE, + SEALED_MESSAGE = HELMET_SEAL_MESSAGE, ), - CHESTPLATE_FLAGS = list( + /obj/item/clothing/suit/mod = list( UNSEALED_CLOTHING = THICKMATERIAL, SEALED_CLOTHING = STOPSPRESSUREDAMAGE, SEALED_INVISIBILITY = HIDEJUMPSUIT, + UNSEALED_MESSAGE = CHESTPLATE_UNSEAL_MESSAGE, + SEALED_MESSAGE = CHESTPLATE_SEAL_MESSAGE, ), - GAUNTLETS_FLAGS = list( + /obj/item/clothing/gloves/mod = list( UNSEALED_CLOTHING = THICKMATERIAL, SEALED_CLOTHING = STOPSPRESSUREDAMAGE, CAN_OVERSLOT = TRUE, + UNSEALED_MESSAGE = GAUNTLET_UNSEAL_MESSAGE, + SEALED_MESSAGE = GAUNTLET_SEAL_MESSAGE, ), - BOOTS_FLAGS = list( + /obj/item/clothing/shoes/mod = list( UNSEALED_CLOTHING = THICKMATERIAL, SEALED_CLOTHING = STOPSPRESSUREDAMAGE, CAN_OVERSLOT = TRUE, + UNSEALED_MESSAGE = BOOT_UNSEAL_MESSAGE, + SEALED_MESSAGE = BOOT_SEAL_MESSAGE, ), ), ) @@ -1543,30 +1883,37 @@ /obj/item/melee/energy/sword, /obj/item/shield/energy, ) - skins = list( + variants = list( "apocryphal" = list( - HELMET_FLAGS = list( - UNSEALED_LAYER = null, + /obj/item/clothing/head/mod = list( UNSEALED_CLOTHING = SNUG_FIT|THICKMATERIAL, SEALED_CLOTHING = STOPSPRESSUREDAMAGE|HEADINTERNALS, UNSEALED_INVISIBILITY = HIDEEARS|HIDEHAIR, SEALED_INVISIBILITY = HIDEFACIALHAIR|HIDEMASK|HIDEEYES|HIDEFACE|HIDESNOUT, SEALED_COVER = HEADCOVERSMOUTH|HEADCOVERSEYES|PEPPERPROOF, + UNSEALED_MESSAGE = HELMET_UNSEAL_MESSAGE, + SEALED_MESSAGE = HELMET_SEAL_MESSAGE, ), - CHESTPLATE_FLAGS = list( + /obj/item/clothing/suit/mod = list( UNSEALED_CLOTHING = THICKMATERIAL, SEALED_CLOTHING = STOPSPRESSUREDAMAGE, SEALED_INVISIBILITY = HIDEJUMPSUIT, + UNSEALED_MESSAGE = CHESTPLATE_UNSEAL_MESSAGE, + SEALED_MESSAGE = CHESTPLATE_SEAL_MESSAGE, ), - GAUNTLETS_FLAGS = list( + /obj/item/clothing/gloves/mod = list( UNSEALED_CLOTHING = THICKMATERIAL, SEALED_CLOTHING = STOPSPRESSUREDAMAGE, CAN_OVERSLOT = TRUE, + UNSEALED_MESSAGE = GAUNTLET_UNSEAL_MESSAGE, + SEALED_MESSAGE = GAUNTLET_SEAL_MESSAGE, ), - BOOTS_FLAGS = list( + /obj/item/clothing/shoes/mod = list( UNSEALED_CLOTHING = THICKMATERIAL, SEALED_CLOTHING = STOPSPRESSUREDAMAGE, CAN_OVERSLOT = TRUE, + UNSEALED_MESSAGE = BOOT_UNSEAL_MESSAGE, + SEALED_MESSAGE = BOOT_SEAL_MESSAGE, ), ), ) @@ -1605,30 +1952,37 @@ /obj/item/assembly/flash, /obj/item/melee/baton, ) - skins = list( + variants = list( "corporate" = list( - HELMET_FLAGS = list( - UNSEALED_LAYER = null, + /obj/item/clothing/head/mod = list( UNSEALED_CLOTHING = SNUG_FIT|THICKMATERIAL, SEALED_CLOTHING = STOPSPRESSUREDAMAGE|HEADINTERNALS, UNSEALED_INVISIBILITY = HIDEFACIALHAIR|HIDEEARS|HIDEHAIR|HIDESNOUT, SEALED_INVISIBILITY = HIDEMASK|HIDEEYES|HIDEFACE, SEALED_COVER = HEADCOVERSMOUTH|HEADCOVERSEYES|PEPPERPROOF, + UNSEALED_MESSAGE = HELMET_UNSEAL_MESSAGE, + SEALED_MESSAGE = HELMET_SEAL_MESSAGE, ), - CHESTPLATE_FLAGS = list( + /obj/item/clothing/suit/mod = list( UNSEALED_CLOTHING = THICKMATERIAL, SEALED_CLOTHING = STOPSPRESSUREDAMAGE, SEALED_INVISIBILITY = HIDEJUMPSUIT, + UNSEALED_MESSAGE = CHESTPLATE_UNSEAL_MESSAGE, + SEALED_MESSAGE = CHESTPLATE_SEAL_MESSAGE, ), - GAUNTLETS_FLAGS = list( + /obj/item/clothing/gloves/mod = list( UNSEALED_CLOTHING = THICKMATERIAL, SEALED_CLOTHING = STOPSPRESSUREDAMAGE, CAN_OVERSLOT = TRUE, + UNSEALED_MESSAGE = GAUNTLET_UNSEAL_MESSAGE, + SEALED_MESSAGE = GAUNTLET_SEAL_MESSAGE, ), - BOOTS_FLAGS = list( + /obj/item/clothing/shoes/mod = list( UNSEALED_CLOTHING = THICKMATERIAL, SEALED_CLOTHING = STOPSPRESSUREDAMAGE, CAN_OVERSLOT = TRUE, + UNSEALED_MESSAGE = BOOT_UNSEAL_MESSAGE, + SEALED_MESSAGE = BOOT_SEAL_MESSAGE, ), ), ) @@ -1661,30 +2015,38 @@ allowed_suit_storage = list( /obj/item/restraints/handcuffs, ) - skins = list( + variants = list( "chrono" = list( - HELMET_FLAGS = list( + /obj/item/clothing/head/mod = list( UNSEALED_LAYER = NECK_LAYER, UNSEALED_CLOTHING = SNUG_FIT, SEALED_CLOTHING = THICKMATERIAL|STOPSPRESSUREDAMAGE|BLOCK_GAS_SMOKE_EFFECT|HEADINTERNALS, UNSEALED_INVISIBILITY = HIDEFACIALHAIR, SEALED_INVISIBILITY = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDESNOUT, SEALED_COVER = HEADCOVERSMOUTH|HEADCOVERSEYES|PEPPERPROOF, + UNSEALED_MESSAGE = HELMET_UNSEAL_MESSAGE, + SEALED_MESSAGE = HELMET_SEAL_MESSAGE, ), - CHESTPLATE_FLAGS = list( + /obj/item/clothing/suit/mod = list( UNSEALED_CLOTHING = THICKMATERIAL, SEALED_CLOTHING = STOPSPRESSUREDAMAGE, SEALED_INVISIBILITY = HIDEJUMPSUIT, + UNSEALED_MESSAGE = CHESTPLATE_UNSEAL_MESSAGE, + SEALED_MESSAGE = CHESTPLATE_SEAL_MESSAGE, ), - GAUNTLETS_FLAGS = list( + /obj/item/clothing/gloves/mod = list( UNSEALED_CLOTHING = THICKMATERIAL, SEALED_CLOTHING = STOPSPRESSUREDAMAGE, CAN_OVERSLOT = TRUE, + UNSEALED_MESSAGE = GAUNTLET_UNSEAL_MESSAGE, + SEALED_MESSAGE = GAUNTLET_SEAL_MESSAGE, ), - BOOTS_FLAGS = list( + /obj/item/clothing/shoes/mod = list( UNSEALED_CLOTHING = THICKMATERIAL, SEALED_CLOTHING = STOPSPRESSUREDAMAGE, CAN_OVERSLOT = TRUE, + UNSEALED_MESSAGE = BOOT_UNSEAL_MESSAGE, + SEALED_MESSAGE = BOOT_SEAL_MESSAGE, ), ), ) @@ -1719,31 +2081,38 @@ allowed_suit_storage = list( /obj/item/gun, ) - skins = list( + variants = list( "debug" = list( - HELMET_FLAGS = list( - UNSEALED_LAYER = null, + /obj/item/clothing/head/mod = list( UNSEALED_CLOTHING = SNUG_FIT|THICKMATERIAL, SEALED_CLOTHING = STOPSPRESSUREDAMAGE|BLOCK_GAS_SMOKE_EFFECT|HEADINTERNALS, UNSEALED_INVISIBILITY = HIDEFACIALHAIR|HIDEEARS|HIDEHAIR|HIDESNOUT, SEALED_INVISIBILITY = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE, UNSEALED_COVER = HEADCOVERSMOUTH, SEALED_COVER = HEADCOVERSEYES|PEPPERPROOF, + UNSEALED_MESSAGE = HELMET_UNSEAL_MESSAGE, + SEALED_MESSAGE = HELMET_SEAL_MESSAGE, ), - CHESTPLATE_FLAGS = list( + /obj/item/clothing/suit/mod = list( UNSEALED_CLOTHING = THICKMATERIAL, SEALED_CLOTHING = STOPSPRESSUREDAMAGE, SEALED_INVISIBILITY = HIDEJUMPSUIT, + UNSEALED_MESSAGE = CHESTPLATE_UNSEAL_MESSAGE, + SEALED_MESSAGE = CHESTPLATE_SEAL_MESSAGE, ), - GAUNTLETS_FLAGS = list( + /obj/item/clothing/gloves/mod = list( UNSEALED_CLOTHING = THICKMATERIAL, SEALED_CLOTHING = STOPSPRESSUREDAMAGE, CAN_OVERSLOT = TRUE, + UNSEALED_MESSAGE = GAUNTLET_UNSEAL_MESSAGE, + SEALED_MESSAGE = GAUNTLET_SEAL_MESSAGE, ), - BOOTS_FLAGS = list( + /obj/item/clothing/shoes/mod = list( UNSEALED_CLOTHING = THICKMATERIAL, SEALED_CLOTHING = STOPSPRESSUREDAMAGE, CAN_OVERSLOT = TRUE, + UNSEALED_MESSAGE = BOOT_UNSEAL_MESSAGE, + SEALED_MESSAGE = BOOT_SEAL_MESSAGE, ), ), ) @@ -1779,26 +2148,33 @@ allowed_suit_storage = list( /obj/item/gun, ) - skins = list( + variants = list( "debug" = list( - HELMET_FLAGS = list( - UNSEALED_LAYER = null, + /obj/item/clothing/head/mod = list( UNSEALED_CLOTHING = SNUG_FIT|THICKMATERIAL|STOPSPRESSUREDAMAGE|BLOCK_GAS_SMOKE_EFFECT|HEADINTERNALS, UNSEALED_INVISIBILITY = HIDEFACIALHAIR|HIDEEARS|HIDEHAIR|HIDESNOUT, SEALED_INVISIBILITY = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE, UNSEALED_COVER = HEADCOVERSMOUTH|HEADCOVERSEYES|PEPPERPROOF, + UNSEALED_MESSAGE = HELMET_UNSEAL_MESSAGE, + SEALED_MESSAGE = HELMET_SEAL_MESSAGE, ), - CHESTPLATE_FLAGS = list( + /obj/item/clothing/suit/mod = list( UNSEALED_CLOTHING = THICKMATERIAL|STOPSPRESSUREDAMAGE, SEALED_INVISIBILITY = HIDEJUMPSUIT, + UNSEALED_MESSAGE = CHESTPLATE_UNSEAL_MESSAGE, + SEALED_MESSAGE = CHESTPLATE_SEAL_MESSAGE, ), - GAUNTLETS_FLAGS = list( + /obj/item/clothing/gloves/mod = list( UNSEALED_CLOTHING = THICKMATERIAL|STOPSPRESSUREDAMAGE, CAN_OVERSLOT = TRUE, + UNSEALED_MESSAGE = GAUNTLET_UNSEAL_MESSAGE, + SEALED_MESSAGE = GAUNTLET_SEAL_MESSAGE, ), - BOOTS_FLAGS = list( + /obj/item/clothing/shoes/mod = list( UNSEALED_CLOTHING = THICKMATERIAL|STOPSPRESSUREDAMAGE, CAN_OVERSLOT = TRUE, + UNSEALED_MESSAGE = BOOT_UNSEAL_MESSAGE, + SEALED_MESSAGE = BOOT_SEAL_MESSAGE, ), ), ) diff --git a/code/modules/mod/mod_types.dm b/code/modules/mod/mod_types.dm index f0bca6b0980d3..d6465960beb28 100644 --- a/code/modules/mod/mod_types.dm +++ b/code/modules/mod/mod_types.dm @@ -5,7 +5,7 @@ /// The MOD core we apply to the suit. var/applied_core = /obj/item/mod/core/standard /// The cell we apply to the core. Only applies to standard core suits. - var/applied_cell = /obj/item/stock_parts/cell/high + var/applied_cell = /obj/item/stock_parts/power_store/cell/high /// List of modules we spawn with. var/list/applied_modules = list() /// Modules that we pin when the suit is installed for the first time, for convenience, can be applied or theme inbuilt modules. @@ -82,7 +82,7 @@ /obj/item/mod/control/pre_equipped/advanced theme = /datum/mod_theme/advanced - applied_cell = /obj/item/stock_parts/cell/super + applied_cell = /obj/item/stock_parts/power_store/cell/super applied_modules = list( /obj/item/mod/module/storage/large_capacity, /obj/item/mod/module/welding, @@ -139,7 +139,7 @@ /obj/item/mod/control/pre_equipped/rescue theme = /datum/mod_theme/rescue - applied_cell = /obj/item/stock_parts/cell/super + applied_cell = /obj/item/stock_parts/power_store/cell/super applied_modules = list( /obj/item/mod/module/storage/large_capacity, /obj/item/mod/module/flashlight, @@ -149,7 +149,7 @@ /obj/item/mod/control/pre_equipped/research theme = /datum/mod_theme/research - applied_cell = /obj/item/stock_parts/cell/super + applied_cell = /obj/item/stock_parts/power_store/cell/super applied_modules = list( /obj/item/mod/module/storage/large_capacity, /obj/item/mod/module/welding, @@ -174,7 +174,7 @@ /obj/item/mod/control/pre_equipped/safeguard theme = /datum/mod_theme/safeguard - applied_cell = /obj/item/stock_parts/cell/super + applied_cell = /obj/item/stock_parts/power_store/cell/super applied_modules = list( /obj/item/mod/module/storage/large_capacity, /obj/item/mod/module/magnetic_harness, @@ -192,7 +192,7 @@ /obj/item/mod/control/pre_equipped/magnate theme = /datum/mod_theme/magnate - applied_cell = /obj/item/stock_parts/cell/hyper + applied_cell = /obj/item/stock_parts/power_store/cell/hyper applied_modules = list( /obj/item/mod/module/storage/large_capacity, /obj/item/mod/module/hat_stabilizer, @@ -212,15 +212,16 @@ /obj/item/mod/module/storage, /obj/item/mod/module/waddle, /obj/item/mod/module/bikehorn, - /obj/item/mod/module/balloon_advanced, + /obj/item/mod/module/balloon/advanced, ) /obj/item/mod/control/pre_equipped/traitor theme = /datum/mod_theme/syndicate starting_frequency = MODLINK_FREQ_SYNDICATE - applied_cell = /obj/item/stock_parts/cell/super + applied_cell = /obj/item/stock_parts/power_store/cell/super applied_modules = list( /obj/item/mod/module/storage/syndicate, + /obj/item/mod/module/shock_absorber, /obj/item/mod/module/emp_shield, /obj/item/mod/module/magnetic_harness, /obj/item/mod/module/jetpack, @@ -238,9 +239,10 @@ /obj/item/mod/control/pre_equipped/traitor_elite theme = /datum/mod_theme/elite starting_frequency = MODLINK_FREQ_SYNDICATE - applied_cell = /obj/item/stock_parts/cell/bluespace + applied_cell = /obj/item/stock_parts/power_store/cell/bluespace applied_modules = list( /obj/item/mod/module/storage/syndicate, + /obj/item/mod/module/shock_absorber, /obj/item/mod/module/emp_shield, /obj/item/mod/module/magnetic_harness, /obj/item/mod/module/jetpack/advanced, @@ -259,10 +261,11 @@ /obj/item/mod/control/pre_equipped/nuclear theme = /datum/mod_theme/syndicate starting_frequency = MODLINK_FREQ_SYNDICATE - applied_cell = /obj/item/stock_parts/cell/hyper + applied_cell = /obj/item/stock_parts/power_store/cell/hyper req_access = list(ACCESS_SYNDICATE) applied_modules = list( /obj/item/mod/module/storage/syndicate, + /obj/item/mod/module/shock_absorber, /obj/item/mod/module/emp_shield, /obj/item/mod/module/magnetic_harness, /obj/item/mod/module/jetpack/advanced, @@ -295,10 +298,11 @@ /obj/item/mod/control/pre_equipped/elite theme = /datum/mod_theme/elite starting_frequency = MODLINK_FREQ_SYNDICATE - applied_cell = /obj/item/stock_parts/cell/bluespace + applied_cell = /obj/item/stock_parts/power_store/cell/bluespace req_access = list(ACCESS_SYNDICATE) applied_modules = list( /obj/item/mod/module/storage/syndicate, + /obj/item/mod/module/shock_absorber, /obj/item/mod/module/emp_shield, /obj/item/mod/module/magnetic_harness, /obj/item/mod/module/jetpack/advanced, @@ -316,6 +320,7 @@ /obj/item/mod/control/pre_equipped/elite/flamethrower applied_modules = list( /obj/item/mod/module/storage/syndicate, + /obj/item/mod/module/shock_absorber, /obj/item/mod/module/emp_shield, /obj/item/mod/module/magnetic_harness, /obj/item/mod/module/thermal_regulator, @@ -336,7 +341,7 @@ /obj/item/mod/control/pre_equipped/infiltrator theme = /datum/mod_theme/infiltrator starting_frequency = MODLINK_FREQ_SYNDICATE - applied_cell = /obj/item/stock_parts/cell/super + applied_cell = /obj/item/stock_parts/power_store/cell/super applied_modules = list( /obj/item/mod/module/emp_shield, /obj/item/mod/module/magnetic_harness, @@ -350,8 +355,9 @@ /obj/item/mod/control/pre_equipped/interdyne theme = /datum/mod_theme/interdyne starting_frequency = MODLINK_FREQ_SYNDICATE - applied_cell = /obj/item/stock_parts/cell/super + applied_cell = /obj/item/stock_parts/power_store/cell/super applied_modules = list( + /obj/item/mod/module/organ_thrower, /obj/item/mod/module/defibrillator/combat, /obj/item/mod/module/flashlight, /obj/item/mod/module/health_analyzer, @@ -377,7 +383,7 @@ /obj/item/mod/control/pre_equipped/ninja theme = /datum/mod_theme/ninja starting_frequency = null - applied_cell = /obj/item/stock_parts/cell/ninja + applied_cell = /obj/item/stock_parts/power_store/cell/ninja applied_modules = list( /obj/item/mod/module/storage, /obj/item/mod/module/noslip, @@ -413,10 +419,27 @@ /obj/item/mod/module/anomaly_locked/kinesis/prototype, ) +/obj/item/mod/control/pre_equipped/glitch + theme = /datum/mod_theme/glitch + starting_frequency = null + applied_cell = /obj/item/stock_parts/power_store/cell/bluespace + applied_modules = list( + /obj/item/mod/module/storage, + /obj/item/mod/module/magnetic_harness, + /obj/item/mod/module/jetpack/advanced, + /obj/item/mod/module/jump_jet, + /obj/item/mod/module/flashlight, + ) + default_pins = list( + /obj/item/mod/module/armor_booster, + /obj/item/mod/module/jetpack/advanced, + /obj/item/mod/module/jump_jet, + ) + /obj/item/mod/control/pre_equipped/responsory theme = /datum/mod_theme/responsory starting_frequency = MODLINK_FREQ_CENTCOM - applied_cell = /obj/item/stock_parts/cell/hyper + applied_cell = /obj/item/stock_parts/power_store/cell/hyper req_access = list(ACCESS_CENT_GENERAL) applied_modules = list( /obj/item/mod/module/storage/large_capacity, @@ -481,7 +504,7 @@ /obj/item/mod/control/pre_equipped/responsory/inquisitory/syndie starting_frequency = MODLINK_FREQ_SYNDICATE req_access = null - applied_cell = /obj/item/stock_parts/cell/super + applied_cell = /obj/item/stock_parts/power_store/cell/super theme = /datum/mod_theme/responsory/traitor applied_modules = list( /obj/item/mod/module/storage/syndicate, @@ -516,7 +539,7 @@ /obj/item/mod/control/pre_equipped/apocryphal theme = /datum/mod_theme/apocryphal starting_frequency = MODLINK_FREQ_CENTCOM - applied_cell = /obj/item/stock_parts/cell/bluespace + applied_cell = /obj/item/stock_parts/power_store/cell/bluespace req_access = list(ACCESS_CENT_SPECOPS) applied_modules = list( /obj/item/mod/module/storage/bluespace, @@ -596,6 +619,7 @@ /obj/item/mod/module/storage/bluespace, /obj/item/mod/module/emp_shield/advanced, /obj/item/mod/module/welding, + /obj/item/mod/module/rad_protection, /obj/item/mod/module/stealth/ninja, /obj/item/mod/module/quick_carry/advanced, /obj/item/mod/module/magboot/advanced, diff --git a/code/modules/mod/mod_ui.dm b/code/modules/mod/mod_ui.dm index 2f1e6faa0f429..f994b91060fea 100644 --- a/code/modules/mod/mod_ui.dm +++ b/code/modules/mod/mod_ui.dm @@ -53,7 +53,7 @@ "cooldown" = round(COOLDOWN_TIMELEFT(module, cooldown_timer), 1 SECONDS), "id" = module.tgui_id, "ref" = REF(module), - "configuration_data" = module.get_configuration(user) + "configuration_data" = module.get_configuration(user), )) data["module_custom_status"] = module_custom_status data["module_info"] = module_info @@ -64,10 +64,13 @@ data["ui_theme"] = ui_theme data["control"] = name data["complexity_max"] = complexity_max - data["helmet"] = helmet?.name - data["chestplate"] = chestplate?.name - data["gauntlets"] = gauntlets?.name - data["boots"] = boots?.name + var/part_info = list() + for(var/obj/item/part as anything in get_parts()) + part_info += list(list( + "slot" = english_list(parse_slot_flags(part.slot_flags)), + "name" = part.name, + )) + data["parts"] = part_info return data /obj/item/mod/control/ui_state(mob/user) diff --git a/code/modules/mod/modules/_module.dm b/code/modules/mod/modules/_module.dm index 8b3166f811b4a..4bd4ef0d2ab80 100644 --- a/code/modules/mod/modules/_module.dm +++ b/code/modules/mod/modules/_module.dm @@ -43,6 +43,8 @@ var/list/pinned_to = list() /// flags that let the module ability be used in odd circumstances var/allow_flags = NONE + /// A list of slots required in the suit to work. Formatted like list(x|y, z, ...) where either x or y are required and z is required. + var/list/required_slots = list() /// Timer for the cooldown COOLDOWN_DECLARE(cooldown_timer) @@ -65,23 +67,50 @@ /obj/item/mod/module/examine(mob/user) . = ..() + if(length(required_slots)) + var/list/slot_strings = list() + for(var/slot in required_slots) + var/list/slot_list = parse_slot_flags(slot) + slot_strings += (length(slot_list) == 1 ? "" : "one of ") + english_list(slot_list, and_text = " or ") + . += span_notice("Requires the MOD unit to have the following slots: [english_list(slot_strings)]") if(HAS_TRAIT(user, TRAIT_DIAGNOSTIC_HUD)) . += span_notice("Complexity level: [complexity]") +/// Looks through the MODsuit's parts to see if it has the parts required to support this module +/obj/item/mod/module/proc/has_required_parts(list/parts, need_extended = FALSE) + if(!length(required_slots)) + return TRUE + var/total_slot_flags = NONE + for(var/part_slot in parts) + if(need_extended) + var/datum/mod_part/part_datum = parts[part_slot] + if(part_datum.part_item.loc == mod) + continue + total_slot_flags |= text2num(part_slot) + var/list/needed_slots = required_slots.Copy() + for(var/needed_slot in needed_slots) + if(!(needed_slot & total_slot_flags)) + break + needed_slots -= needed_slot + return !length(needed_slots) /// Called when the module is selected from the TGUI, radial or the action button /obj/item/mod/module/proc/on_select() + if(!mod.wearer) + if(ismob(mod.loc)) + balloon_alert(mod.loc, "not equipped!") + return if(((!mod.active || mod.activating) && !(allow_flags & MODULE_ALLOW_INACTIVE)) || module_type == MODULE_PASSIVE) if(mod.wearer) balloon_alert(mod.wearer, "not active!") return if(module_type != MODULE_USABLE) if(active) - on_deactivation() + deactivate() else - on_activation() + activate() else - on_use() + used() SEND_SIGNAL(mod, COMSIG_MOD_MODULE_SELECTED, src) /// Apply a cooldown until this item can be used again @@ -92,7 +121,7 @@ SEND_SIGNAL(src, COMSIG_MODULE_COOLDOWN_STARTED, applied_cooldown) /// Called when the module is activated -/obj/item/mod/module/proc/on_activation() +/obj/item/mod/module/proc/activate() if(!COOLDOWN_FINISHED(src, cooldown_timer)) balloon_alert(mod.wearer, "on cooldown!") return FALSE @@ -106,7 +135,7 @@ if(SEND_SIGNAL(src, COMSIG_MODULE_TRIGGERED, mod.wearer) & MOD_ABORT_USE) return FALSE if(module_type == MODULE_ACTIVE) - if(mod.selected_module && !mod.selected_module.on_deactivation(display_message = FALSE)) + if(mod.selected_module && !mod.selected_module.deactivate(display_message = FALSE)) return FALSE mod.selected_module = src if(device) @@ -126,10 +155,11 @@ mod.wearer.update_clothing(mod.slot_flags) start_cooldown() SEND_SIGNAL(src, COMSIG_MODULE_ACTIVATED) + on_activation() return TRUE /// Called when the module is deactivated -/obj/item/mod/module/proc/on_deactivation(display_message = TRUE, deleting = FALSE) +/obj/item/mod/module/proc/deactivate(display_message = TRUE, deleting = FALSE) active = FALSE if(module_type == MODULE_ACTIVE) mod.selected_module = null @@ -144,10 +174,11 @@ used_signal = null mod.wearer.update_clothing(mod.slot_flags) SEND_SIGNAL(src, COMSIG_MODULE_DEACTIVATED, mod.wearer) + on_deactivation(display_message = TRUE, deleting = FALSE) return TRUE /// Called when the module is used -/obj/item/mod/module/proc/on_use() +/obj/item/mod/module/proc/used() if(!COOLDOWN_FINISHED(src, cooldown_timer)) balloon_alert(mod.wearer, "on cooldown!") return FALSE @@ -164,6 +195,7 @@ addtimer(CALLBACK(mod.wearer, TYPE_PROC_REF(/mob, update_clothing), mod.slot_flags), cooldown_time+1) //need to run it a bit after the cooldown starts to avoid conflicts mod.wearer.update_clothing(mod.slot_flags) SEND_SIGNAL(src, COMSIG_MODULE_USED) + on_use() return TRUE /// Called when an activated module without a device is used @@ -171,7 +203,7 @@ if(!(allow_flags & MODULE_ALLOW_INCAPACITATED) && mod.wearer.incapacitated(IGNORE_GRAB)) return FALSE mod.wearer.face_atom(target) - if(!on_use()) + if(!used()) return FALSE return TRUE @@ -185,22 +217,34 @@ /obj/item/mod/module/proc/on_process(seconds_per_tick) if(active) if(!drain_power(active_power_cost * seconds_per_tick)) - on_deactivation() + deactivate() return FALSE on_active_process(seconds_per_tick) else drain_power(idle_power_cost * seconds_per_tick) return TRUE +/// Called from the module's activate() +/obj/item/mod/module/proc/on_activation() + return + +/// Called from the module's deactivate() +/obj/item/mod/module/proc/on_deactivation(display_message = TRUE, deleting = FALSE) + return + +/// Called from the module's used() +/obj/item/mod/module/proc/on_use() + return + /// Called on the MODsuit's process if it is an active module /obj/item/mod/module/proc/on_active_process(seconds_per_tick) return -/// Called from MODsuit's install() proc, so when the module is installed. +/// Called from MODsuit's install() proc, so when the module is installed /obj/item/mod/module/proc/on_install() return -/// Called from MODsuit's uninstall() proc, so when the module is uninstalled. +/// Called from MODsuit's uninstall() proc, so when the module is uninstalled /obj/item/mod/module/proc/on_uninstall(deleting = FALSE) return @@ -258,7 +302,7 @@ if(part.loc == mod.wearer) return if(part == device) - on_deactivation(display_message = FALSE) + deactivate(display_message = FALSE) /// Called when the device gets deleted on active modules /obj/item/mod/module/proc/on_device_deletion(datum/source) @@ -321,7 +365,7 @@ if(user.get_active_held_item() != device) return - on_deactivation() + deactivate() return COMSIG_KB_ACTIVATED ///Anomaly Locked - Causes the module to not function without an anomaly. diff --git a/code/modules/mod/modules/module_kinesis.dm b/code/modules/mod/modules/module_kinesis.dm index 4f4fa44ff966c..81a266f8ff41a 100644 --- a/code/modules/mod/modules/module_kinesis.dm +++ b/code/modules/mod/modules/module_kinesis.dm @@ -15,6 +15,7 @@ overlay_state_inactive = "module_kinesis" overlay_state_active = "module_kinesis_on" accepted_anomalies = list(/obj/item/assembly/signaler/anomaly/grav) + required_slots = list(ITEM_SLOT_GLOVES) /// Range of the knesis grab. var/grab_range = 5 /// Time between us hitting objects with kinesis. @@ -63,9 +64,6 @@ grab_atom(target) /obj/item/mod/module/anomaly_locked/kinesis/on_deactivation(display_message = TRUE, deleting = FALSE) - . = ..() - if(!.) - return clear_grab(playsound = !deleting) /obj/item/mod/module/anomaly_locked/kinesis/process(seconds_per_tick) diff --git a/code/modules/mod/modules/module_pathfinder.dm b/code/modules/mod/modules/module_pathfinder.dm index 1681496036887..64790eacb3bec 100644 --- a/code/modules/mod/modules/module_pathfinder.dm +++ b/code/modules/mod/modules/module_pathfinder.dm @@ -13,6 +13,7 @@ complexity = 1 use_energy_cost = DEFAULT_CHARGE_DRAIN * 10 incompatible_modules = list(/obj/item/mod/module/pathfinder) + required_slots = list(ITEM_SLOT_BACK|ITEM_SLOT_BELT) /// The pathfinding implant. var/obj/item/implant/mod/implant diff --git a/code/modules/mod/modules/modules_antag.dm b/code/modules/mod/modules/modules_antag.dm index bd96c5aec5ff4..8ae22e435839b 100644 --- a/code/modules/mod/modules/modules_antag.dm +++ b/code/modules/mod/modules/modules_antag.dm @@ -23,11 +23,9 @@ /// Speed that we actually added. var/actual_speed_added = 0 /// Armor values added to the suit parts. - var/list/armor_mod = /datum/armor/mod_module_armor_boost + var/datum/armor/armor_mod = /datum/armor/mod_module_armor_boost /// List of parts of the suit that are spaceproofed, for giving them back the pressure protection. var/list/spaceproofed = list() - /// List of traits added when the mod is activated - var/list/traits_to_add = list(TRAIT_HEAD_INJURY_BLOCKED) /obj/item/mod/module/armor_booster/no_speedbost speed_added = 0 @@ -39,25 +37,27 @@ energy = 15 /obj/item/mod/module/armor_booster/on_suit_activation() - mod.helmet.flash_protect = FLASH_PROTECTION_WELDER + var/obj/item/clothing/head_cover = mod.get_part_from_slot(ITEM_SLOT_HEAD) || mod.get_part_from_slot(ITEM_SLOT_MASK) || mod.get_part_from_slot(ITEM_SLOT_EYES) + if(istype(head_cover)) + head_cover.flash_protect = FLASH_PROTECTION_WELDER /obj/item/mod/module/armor_booster/on_suit_deactivation(deleting = FALSE) if(deleting) return - mod.helmet.flash_protect = initial(mod.helmet.flash_protect) + var/obj/item/clothing/head_cover = mod.get_part_from_slot(ITEM_SLOT_HEAD) || mod.get_part_from_slot(ITEM_SLOT_MASK) || mod.get_part_from_slot(ITEM_SLOT_EYES) + if(istype(head_cover)) + head_cover.flash_protect = initial(head_cover.flash_protect) /obj/item/mod/module/armor_booster/on_activation() - . = ..() - if(!.) - return playsound(src, 'sound/mecha/mechmove03.ogg', 25, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) balloon_alert(mod.wearer, "armor boosted, EVA lost") actual_speed_added = max(0, min(mod.slowdown_active, speed_added)) mod.slowdown -= actual_speed_added mod.wearer.update_equipment_speed_mods() - mod.wearer.add_traits(traits_to_add, MOD_TRAIT) - var/list/parts = mod.mod_parts + mod - for(var/obj/item/part as anything in parts) + var/obj/item/clothing/head_cover = mod.get_part_from_slot(ITEM_SLOT_HEAD) || mod.get_part_from_slot(ITEM_SLOT_MASK) || mod.get_part_from_slot(ITEM_SLOT_EYES) + if(istype(head_cover)) + ADD_TRAIT(mod.wearer, TRAIT_HEAD_INJURY_BLOCKED, MOD_TRAIT) + for(var/obj/item/part as anything in mod.get_parts(all = TRUE)) part.set_armor(part.get_armor().add_other_armor(armor_mod)) if(!remove_pressure_protection || !isclothing(part)) continue @@ -67,17 +67,15 @@ spaceproofed[clothing_part] = TRUE /obj/item/mod/module/armor_booster/on_deactivation(display_message = TRUE, deleting = FALSE) - . = ..() - if(!.) - return if(!deleting) playsound(src, 'sound/mecha/mechmove03.ogg', 25, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) balloon_alert(mod.wearer, "armor retracts, EVA ready") mod.slowdown += actual_speed_added mod.wearer.update_equipment_speed_mods() - mod.wearer.remove_traits(traits_to_add, MOD_TRAIT) - var/list/parts = mod.mod_parts + mod - for(var/obj/item/part as anything in parts) + var/obj/item/clothing/head_cover = mod.get_part_from_slot(ITEM_SLOT_HEAD) || mod.get_part_from_slot(ITEM_SLOT_MASK) || mod.get_part_from_slot(ITEM_SLOT_EYES) + if(istype(head_cover)) + REMOVE_TRAIT(mod.wearer, TRAIT_HEAD_INJURY_BLOCKED, MOD_TRAIT) + for(var/obj/item/part as anything in mod.get_parts(all = TRUE)) part.set_armor(part.get_armor().subtract_other_armor(armor_mod)) if(!remove_pressure_protection || !isclothing(part)) continue @@ -103,6 +101,7 @@ idle_power_cost = DEFAULT_CHARGE_DRAIN * 0.5 use_energy_cost = DEFAULT_CHARGE_DRAIN * 2 incompatible_modules = list(/obj/item/mod/module/energy_shield) + required_slots = list(ITEM_SLOT_BACK) /// Max charges of the shield. var/max_charges = 1 /// The time it takes for the first charge to recover. @@ -167,6 +166,7 @@ shield_icon_file = 'icons/effects/magic.dmi' shield_icon = "mageshield" recharge_path = /obj/item/wizard_armour_charge + required_slots = list() ///Magic Nullifier - Protects you from magic. /obj/item/mod/module/anti_magic @@ -179,6 +179,7 @@ icon_state = "magic_nullifier" removable = FALSE incompatible_modules = list(/obj/item/mod/module/anti_magic) + required_slots = list(ITEM_SLOT_BACK) /obj/item/mod/module/anti_magic/on_suit_activation() mod.wearer.add_traits(list(TRAIT_ANTIMAGIC, TRAIT_HOLY), MOD_TRAIT) @@ -193,6 +194,7 @@ The field will neutralize all magic that comes into contact with the user. \ It will not protect the caster from social ridicule." icon_state = "magic_neutralizer" + required_slots = list() /obj/item/mod/module/anti_magic/wizard/on_suit_activation() mod.wearer.add_traits(list(TRAIT_ANTIMAGIC, TRAIT_ANTIMAGIC_NO_SELFBLOCK), MOD_TRAIT) @@ -254,6 +256,7 @@ complexity = 1 idle_power_cost = DEFAULT_CHARGE_DRAIN * 0.1 incompatible_modules = list(/obj/item/mod/module/noslip) + required_slots = list(ITEM_SLOT_FEET) /obj/item/mod/module/noslip/on_suit_activation() ADD_TRAIT(mod.wearer, TRAIT_NO_SLIP_WATER, MOD_TRAIT) @@ -298,6 +301,7 @@ cooldown_time = 2.5 SECONDS overlay_state_inactive = "module_flamethrower" overlay_state_active = "module_flamethrower_on" + required_slots = list(ITEM_SLOT_OCLOTHING|ITEM_SLOT_ICLOTHING) /obj/item/mod/module/flamethrower/on_select_use(atom/target) . = ..() @@ -320,6 +324,7 @@ use_energy_cost = DEFAULT_CHARGE_DRAIN * 5 incompatible_modules = list(/obj/item/mod/module/power_kick) cooldown_time = 5 SECONDS + required_slots = list(ITEM_SLOT_FEET) /// Damage on kick. var/damage = 20 /// The wound bonus of the kick. @@ -399,13 +404,13 @@ return_look() possible_disguises = null -/obj/item/mod/module/chameleon/on_use() +/obj/item/mod/module/chameleon/used() if(mod.active || mod.activating) balloon_alert(mod.wearer, "suit active!") - return - . = ..() - if(!.) - return + return FALSE + return ..() + +/obj/item/mod/module/chameleon/on_use() if(current_disguise) return_look() return @@ -433,10 +438,9 @@ mod.name = "[mod.theme.name] [initial(mod.name)]" mod.desc = "[initial(mod.desc)] [mod.theme.desc]" mod.icon_state = "[mod.skin]-[initial(mod.icon_state)]" - var/list/mod_skin = mod.theme.skins[mod.skin] + var/list/mod_skin = mod.theme.variants[mod.skin] mod.icon = mod_skin[MOD_ICON_OVERRIDE] || 'icons/obj/clothing/modsuit/mod_clothing.dmi' mod.worn_icon = mod_skin[MOD_WORN_ICON_OVERRIDE] || 'icons/mob/clothing/modsuit/mod_clothing.dmi' - mod.alternate_worn_layer = mod_skin[CONTROL_LAYER] mod.lefthand_file = initial(mod.lefthand_file) mod.righthand_file = initial(mod.righthand_file) mod.worn_icon_state = null @@ -481,6 +485,7 @@ complexity = 0 idle_power_cost = DEFAULT_CHARGE_DRAIN * 0.1 removable = FALSE + required_slots = list(ITEM_SLOT_BACK|ITEM_SLOT_BELT) var/datum/proximity_monitor/advanced/demoraliser/demoralizer /obj/item/mod/module/demoralizer/on_suit_activation() @@ -500,6 +505,7 @@ removable = FALSE idle_power_cost = DEFAULT_CHARGE_DRAIN * 0 incompatible_modules = list(/obj/item/mod/module/infiltrator, /obj/item/mod/module/armor_booster, /obj/item/mod/module/welding, /obj/item/mod/module/headprotector) + required_slots = list(ITEM_SLOT_FEET, ITEM_SLOT_HEAD, ITEM_SLOT_OCLOTHING) /// List of traits added when the suit is activated var/list/traits_to_add = list(TRAIT_SILENT_FOOTSTEPS, TRAIT_UNKNOWN, TRAIT_HEAD_INJURY_BLOCKED) @@ -511,17 +517,21 @@ /obj/item/mod/module/infiltrator/on_suit_activation() mod.wearer.add_traits(traits_to_add, MOD_TRAIT) - mod.helmet.flash_protect = FLASH_PROTECTION_WELDER + var/obj/item/clothing/head_cover = mod.get_part_from_slot(ITEM_SLOT_HEAD) + if(istype(head_cover)) + head_cover.flash_protect = FLASH_PROTECTION_WELDER_HYPER_SENSITIVE /obj/item/mod/module/infiltrator/on_suit_deactivation(deleting = FALSE) mod.wearer.remove_traits(traits_to_add, MOD_TRAIT) if(deleting) return - mod.helmet.flash_protect = initial(mod.helmet.flash_protect) + var/obj/item/clothing/head_cover = mod.get_part_from_slot(ITEM_SLOT_HEAD) + if(istype(head_cover)) + head_cover.flash_protect = initial(head_cover.flash_protect) ///Medbeam - Medbeam but built into a modsuit /obj/item/mod/module/medbeam - name = "MOD Medbeam Module" + name = "MOD medical beamgun module" desc = "A wrist mounted variant of the medbeam gun, allowing the user to heal their allies without the risk of dropping it." icon_state = "chronogun" module_type = MODULE_ACTIVE @@ -531,6 +541,7 @@ incompatible_modules = list(/obj/item/mod/module/medbeam) removable = TRUE cooldown_time = 0.5 + required_slots = list(ITEM_SLOT_BACK) /obj/item/gun/medbeam/mod name = "MOD medbeam" diff --git a/code/modules/mod/modules/modules_engineering.dm b/code/modules/mod/modules/modules_engineering.dm index 1ddcab0818073..fc21937eef049 100644 --- a/code/modules/mod/modules/modules_engineering.dm +++ b/code/modules/mod/modules/modules_engineering.dm @@ -10,14 +10,20 @@ complexity = 1 incompatible_modules = list(/obj/item/mod/module/welding, /obj/item/mod/module/armor_booster) overlay_state_inactive = "module_welding" + required_slots = list(ITEM_SLOT_HEAD|ITEM_SLOT_EYES|ITEM_SLOT_MASK) /obj/item/mod/module/welding/on_suit_activation() - mod.helmet.flash_protect = FLASH_PROTECTION_WELDER + var/obj/item/clothing/head_cover = mod.get_part_from_slot(ITEM_SLOT_HEAD) || mod.get_part_from_slot(ITEM_SLOT_MASK) || mod.get_part_from_slot(ITEM_SLOT_EYES) + if(istype(head_cover)) + //this is a screen that displays an image, so flash sensitives can use this to protect against flashes. + head_cover.flash_protect = FLASH_PROTECTION_WELDER_HYPER_SENSITIVE /obj/item/mod/module/welding/on_suit_deactivation(deleting = FALSE) if(deleting) return - mod.helmet.flash_protect = initial(mod.helmet.flash_protect) + var/obj/item/clothing/head_cover = mod.get_part_from_slot(ITEM_SLOT_HEAD) || mod.get_part_from_slot(ITEM_SLOT_MASK) || mod.get_part_from_slot(ITEM_SLOT_EYES) + if(istype(head_cover)) + head_cover.flash_protect = initial(head_cover.flash_protect) ///T-Ray Scan - Scans the terrain for undertile objects. /obj/item/mod/module/t_ray @@ -31,6 +37,7 @@ active_power_cost = DEFAULT_CHARGE_DRAIN * 0.5 incompatible_modules = list(/obj/item/mod/module/t_ray) cooldown_time = 0.5 SECONDS + required_slots = list(ITEM_SLOT_HEAD|ITEM_SLOT_EYES|ITEM_SLOT_MASK) /// T-ray scan range. var/range = 4 @@ -50,23 +57,18 @@ active_power_cost = DEFAULT_CHARGE_DRAIN * 0.5 incompatible_modules = list(/obj/item/mod/module/magboot, /obj/item/mod/module/atrocinator) cooldown_time = 0.5 SECONDS + required_slots = list(ITEM_SLOT_FEET) /// Slowdown added onto the suit. var/slowdown_active = 0.5 /// A list of traits to add to the wearer when we're active (see: Magboots) var/list/active_traits = list(TRAIT_NO_SLIP_WATER, TRAIT_NO_SLIP_ICE, TRAIT_NO_SLIP_SLIDE, TRAIT_NEGATES_GRAVITY) /obj/item/mod/module/magboot/on_activation() - . = ..() - if(!.) - return mod.wearer.add_traits(active_traits, MOD_TRAIT) mod.slowdown += slowdown_active mod.wearer.update_equipment_speed_mods() /obj/item/mod/module/magboot/on_deactivation(display_message = TRUE, deleting = FALSE) - . = ..() - if(!.) - return mod.wearer.remove_traits(active_traits, MOD_TRAIT) mod.slowdown -= slowdown_active mod.wearer.update_equipment_speed_mods() @@ -89,8 +91,9 @@ use_energy_cost = DEFAULT_CHARGE_DRAIN incompatible_modules = list(/obj/item/mod/module/tether) cooldown_time = 1.5 SECONDS + required_slots = list(ITEM_SLOT_GLOVES) -/obj/item/mod/module/tether/on_use() +/obj/item/mod/module/tether/used() if(mod.wearer.has_gravity(get_turf(src))) balloon_alert(mod.wearer, "too much gravity!") playsound(src, 'sound/weapons/gun/general/dry_fire.ogg', 25, TRUE) @@ -153,14 +156,14 @@ AddComponent(/datum/component/geiger_sound) ADD_TRAIT(mod.wearer, TRAIT_BYPASS_EARLY_IRRADIATED_CHECK, MOD_TRAIT) RegisterSignal(mod.wearer, COMSIG_IN_RANGE_OF_IRRADIATION, PROC_REF(on_pre_potential_irradiation)) - for(var/obj/item/part in mod.mod_parts) + for(var/obj/item/part in mod.get_parts(all = TRUE)) ADD_TRAIT(part, TRAIT_RADIATION_PROTECTED_CLOTHING, MOD_TRAIT) /obj/item/mod/module/rad_protection/on_suit_deactivation(deleting = FALSE) qdel(GetComponent(/datum/component/geiger_sound)) REMOVE_TRAIT(mod.wearer, TRAIT_BYPASS_EARLY_IRRADIATED_CHECK, MOD_TRAIT) UnregisterSignal(mod.wearer, COMSIG_IN_RANGE_OF_IRRADIATION) - for(var/obj/item/part in mod.mod_parts) + for(var/obj/item/part in mod.get_parts(all = TRUE)) REMOVE_TRAIT(part, TRAIT_RADIATION_PROTECTED_CLOTHING, MOD_TRAIT) /obj/item/mod/module/rad_protection/add_ui_data() @@ -190,6 +193,7 @@ use_energy_cost = DEFAULT_CHARGE_DRAIN * 2 incompatible_modules = list(/obj/item/mod/module/constructor, /obj/item/mod/module/quick_carry) cooldown_time = 11 SECONDS + required_slots = list(ITEM_SLOT_GLOVES) /obj/item/mod/module/constructor/on_suit_activation() ADD_TRAIT(mod.wearer, TRAIT_QUICK_BUILD, MOD_TRAIT) @@ -198,15 +202,12 @@ REMOVE_TRAIT(mod.wearer, TRAIT_QUICK_BUILD, MOD_TRAIT) /obj/item/mod/module/constructor/on_use() - . = ..() - if(!.) - return rcd_scan(src, fade_time = 10 SECONDS) drain_power(use_energy_cost) ///Safety-First Head Protection - Protects your brain matter from sudden impacts. /obj/item/mod/module/headprotector - name = "MOD Safety-First Head Protection module" + name = "MOD safety-first head protection module" desc = "A series of dampening plates are installed along the back and upper areas of \ the helmet. These plates absorb abrupt kinetic shocks delivered to the skull. \ The bulk of this module prevents it from being installed in any suit that is capable \ @@ -215,11 +216,12 @@ icon_state = "welding" complexity = 1 incompatible_modules = list(/obj/item/mod/module/armor_booster, /obj/item/mod/module/infiltrator) + required_slots = list(ITEM_SLOT_HEAD) -/obj/item/mod/module/constructor/on_suit_activation() +/obj/item/mod/module/headprotector/on_suit_activation() ADD_TRAIT(mod.wearer, TRAIT_HEAD_INJURY_BLOCKED, MOD_TRAIT) -/obj/item/mod/module/constructor/on_suit_deactivation(deleting = FALSE) +/obj/item/mod/module/headprotector/on_suit_deactivation(deleting = FALSE) REMOVE_TRAIT(mod.wearer, TRAIT_HEAD_INJURY_BLOCKED, MOD_TRAIT) ///Mister - Sprays water over an area. @@ -233,6 +235,7 @@ device = /obj/item/reagent_containers/spray/mister incompatible_modules = list(/obj/item/mod/module/mister) cooldown_time = 0.5 SECONDS + required_slots = list(ITEM_SLOT_BACK) /// Volume of our reagent holder. var/volume = 500 diff --git a/code/modules/mod/modules/modules_general.dm b/code/modules/mod/modules/modules_general.dm index adbcc2064f8fc..3ef6b9558712a 100644 --- a/code/modules/mod/modules/modules_general.dm +++ b/code/modules/mod/modules/modules_general.dm @@ -8,6 +8,7 @@ icon_state = "storage" complexity = 3 incompatible_modules = list(/obj/item/mod/module/storage, /obj/item/mod/module/plate_compression) + required_slots = list(ITEM_SLOT_BACK) /// Max weight class of items in the storage. var/max_w_class = WEIGHT_CLASS_NORMAL /// Max combined weight of all items in the storage. @@ -28,16 +29,20 @@ modstorage.set_real_location(src) modstorage.allow_big_nesting = big_nesting atom_storage.locked = STORAGE_NOT_LOCKED - RegisterSignal(mod.chestplate, COMSIG_ITEM_PRE_UNEQUIP, PROC_REF(on_chestplate_unequip)) + var/obj/item/clothing/suit = mod.get_part_from_slot(ITEM_SLOT_OCLOTHING) + if(istype(suit)) + RegisterSignal(suit, COMSIG_ITEM_PRE_UNEQUIP, PROC_REF(on_suit_unequip)) /obj/item/mod/module/storage/on_uninstall(deleting = FALSE) atom_storage.locked = STORAGE_FULLY_LOCKED QDEL_NULL(mod.atom_storage) if(!deleting) atom_storage.remove_all(mod.drop_location()) - UnregisterSignal(mod.chestplate, COMSIG_ITEM_PRE_UNEQUIP) + var/obj/item/clothing/suit = mod.get_part_from_slot(ITEM_SLOT_OCLOTHING) + if(istype(suit)) + UnregisterSignal(suit, COMSIG_ITEM_PRE_UNEQUIP) -/obj/item/mod/module/storage/proc/on_chestplate_unequip(obj/item/source, force, atom/newloc, no_move, invdrop, silent) +/obj/item/mod/module/storage/proc/on_suit_unequip(obj/item/source, force, atom/newloc, no_move, invdrop, silent) if(QDELETED(source) || !mod.wearer || newloc == mod.wearer || !mod.wearer.s_store) return if(!atom_storage?.attempt_insert(mod.wearer.s_store, mod.wearer, override = TRUE)) @@ -68,14 +73,14 @@ /obj/item/mod/module/storage/belt name = "MOD case storage module" desc = "Some concessions had to be made when creating a compressed modular suit core. \ - As a result, Roseus Galactic equipped their suit with a slimline storage case. \ - If you find this equipped to a standard modular suit, then someone has almost certainly shortchanged you on a proper storage module." + As a result, Roseus Galactic equipped their suit with a slimline storage case. \ + If you find this equipped to a standard modular suit, then someone has almost certainly shortchanged you on a proper storage module." icon_state = "storage_case" complexity = 0 max_w_class = WEIGHT_CLASS_SMALL - removable = FALSE max_combined_w_class = 21 max_items = 7 + required_slots = list(ITEM_SLOT_BELT) /obj/item/mod/module/storage/bluespace name = "MOD bluespace storage module" @@ -102,6 +107,7 @@ cooldown_time = 0.5 SECONDS overlay_state_inactive = "module_jetpack" overlay_state_active = "module_jetpack_on" + required_slots = list(ITEM_SLOT_BACK) /// Do we give the wearer a speed buff. var/full_speed = FALSE /// Do we have stabilizers? If yes the user won't move from inertia. @@ -138,14 +144,10 @@ ) /obj/item/mod/module/jetpack/on_activation() - . = ..() - if(!.) - return if(full_speed) mod.wearer.add_movespeed_modifier(/datum/movespeed_modifier/jetpack/fullspeed) /obj/item/mod/module/jetpack/on_deactivation(display_message = TRUE, deleting = FALSE) - . = ..() if(full_speed) mod.wearer.remove_movespeed_modifier(/datum/movespeed_modifier/jetpack/fullspeed) @@ -188,6 +190,7 @@ cooldown_time = 30 SECONDS use_energy_cost = DEFAULT_CHARGE_DRAIN * 5 incompatible_modules = list(/obj/item/mod/module/jump_jet) + required_slots = list(ITEM_SLOT_BACK) /obj/item/mod/module/jump_jet/on_use() . = ..() @@ -228,6 +231,7 @@ use_energy_cost = DEFAULT_CHARGE_DRAIN * 0.1 incompatible_modules = list(/obj/item/mod/module/status_readout) tgui_id = "status_readout" + required_slots = list(ITEM_SLOT_BACK) /// Does this show damage types, body temp, satiety var/display_detailed_vitals = TRUE /// Does this show DNA data @@ -305,22 +309,41 @@ complexity = 1 incompatible_modules = list(/obj/item/mod/module/mouthhole) overlay_state_inactive = "module_apparatus" + required_slots = list(ITEM_SLOT_HEAD|ITEM_SLOT_MASK) /// Former flags of the helmet. - var/former_flags = NONE + var/former_helmet_flags = NONE /// Former visor flags of the helmet. - var/former_visor_flags = NONE + var/former_visor_helmet_flags = NONE + /// Former flags of the mask. + var/former_mask_flags = NONE + /// Former visor flags of the mask. + var/former_visor_mask_flags = NONE /obj/item/mod/module/mouthhole/on_install() - former_flags = mod.helmet.flags_cover - former_visor_flags = mod.helmet.visor_flags_cover - mod.helmet.flags_cover &= ~(HEADCOVERSMOUTH|PEPPERPROOF) - mod.helmet.visor_flags_cover &= ~(HEADCOVERSMOUTH|PEPPERPROOF) + var/obj/item/clothing/helmet = mod.get_part_from_slot(ITEM_SLOT_HEAD) + if(istype(helmet)) + former_helmet_flags = helmet.flags_cover + former_visor_helmet_flags = helmet.visor_flags_cover + helmet.flags_cover &= ~(HEADCOVERSMOUTH|PEPPERPROOF) + helmet.visor_flags_cover &= ~(HEADCOVERSMOUTH|PEPPERPROOF) + var/obj/item/clothing/mask = mod.get_part_from_slot(ITEM_SLOT_MASK) + if(istype(mask)) + former_mask_flags = mask.flags_cover + former_visor_mask_flags = mask.visor_flags_cover + mask.flags_cover &= ~(MASKCOVERSMOUTH |PEPPERPROOF) + mask.visor_flags_cover &= ~(MASKCOVERSMOUTH |PEPPERPROOF) /obj/item/mod/module/mouthhole/on_uninstall(deleting = FALSE) if(deleting) return - mod.helmet.flags_cover |= former_flags - mod.helmet.visor_flags_cover |= former_visor_flags + var/obj/item/clothing/helmet = mod.get_part_from_slot(ITEM_SLOT_HEAD) + if(istype(helmet)) + helmet.flags_cover |= former_helmet_flags + helmet.visor_flags_cover |= former_visor_helmet_flags + var/obj/item/clothing/mask = mod.get_part_from_slot(ITEM_SLOT_MASK) + if(istype(mask)) + mask.flags_cover |= former_mask_flags + mask.visor_flags_cover |= former_visor_mask_flags ///EMP Shield - Protects the suit from EMPs. /obj/item/mod/module/emp_shield @@ -332,6 +355,7 @@ complexity = 1 idle_power_cost = DEFAULT_CHARGE_DRAIN * 0.3 incompatible_modules = list(/obj/item/mod/module/emp_shield) + required_slots = list(ITEM_SLOT_BACK|ITEM_SLOT_BELT) /obj/item/mod/module/emp_shield/on_install() mod.AddElement(/datum/element/empprotection, EMP_PROTECT_ALL) @@ -349,7 +373,7 @@ /obj/item/mod/module/emp_shield/advanced/on_suit_activation() mod.wearer.AddElement(/datum/element/empprotection, EMP_PROTECT_SELF|EMP_PROTECT_CONTENTS) -/obj/item/mod/module/emp_shield/advanced/on_suit_deactivation(deleting) +/obj/item/mod/module/emp_shield/advanced/on_suit_deactivation(deleting = FALSE) mod.wearer.RemoveElement(/datum/element/empprotection, EMP_PROTECT_SELF|EMP_PROTECT_CONTENTS) ///Flashlight - Gives the suit a customizable flashlight. @@ -370,6 +394,7 @@ light_range = 4 light_power = 1 light_on = FALSE + required_slots = list(ITEM_SLOT_HEAD|ITEM_SLOT_MASK) /// Charge drain per range amount. var/base_power = DEFAULT_CHARGE_DRAIN * 0.1 /// Minimum range we can set. @@ -384,17 +409,11 @@ UnregisterSignal(mod.wearer, COMSIG_HIT_BY_SABOTEUR) /obj/item/mod/module/flashlight/on_activation() - . = ..() - if(!.) - return set_light_flags(light_flags | LIGHT_ATTACHED) set_light_on(active) active_power_cost = base_power * light_range /obj/item/mod/module/flashlight/on_deactivation(display_message = TRUE, deleting = FALSE) - . = ..() - if(!.) - return set_light_flags(light_flags & ~LIGHT_ATTACHED) set_light_on(active) @@ -464,15 +483,13 @@ use_energy_cost = DEFAULT_CHARGE_DRAIN * 2 incompatible_modules = list(/obj/item/mod/module/dispenser) cooldown_time = 5 SECONDS + required_slots = list(ITEM_SLOT_GLOVES) /// Path we dispense. var/dispense_type = /obj/item/food/burger/plain /// Time it takes for us to dispense. var/dispense_time = 0 SECONDS /obj/item/mod/module/dispenser/on_use() - . = ..() - if(!.) - return if(dispense_time && !do_after(mod.wearer, dispense_time, target = mod)) balloon_alert(mod.wearer, "interrupted!") return FALSE @@ -494,6 +511,7 @@ complexity = 1 use_energy_cost = DEFAULT_CHARGE_DRAIN * 5 incompatible_modules = list(/obj/item/mod/module/longfall) + required_slots = list(ITEM_SLOT_FEET) /obj/item/mod/module/longfall/on_suit_activation() RegisterSignal(mod.wearer, COMSIG_LIVING_Z_IMPACT, PROC_REF(z_impact_react)) @@ -532,6 +550,7 @@ active_power_cost = DEFAULT_CHARGE_DRAIN * 0.3 incompatible_modules = list(/obj/item/mod/module/thermal_regulator) cooldown_time = 0.5 SECONDS + required_slots = list(ITEM_SLOT_BACK|ITEM_SLOT_BELT) /// The temperature we are regulating to. var/temperature_setting = BODYTEMP_NORMAL /// Minimum temperature we can set. @@ -579,9 +598,6 @@ UnregisterSignal(mod, COMSIG_ATOM_EMAG_ACT) /obj/item/mod/module/dna_lock/on_use() - . = ..() - if(!.) - return dna = mod.wearer.dna.unique_enzymes balloon_alert(mod.wearer, "dna updated") drain_power(use_energy_cost) @@ -640,6 +656,7 @@ idle_power_cost = DEFAULT_CHARGE_DRAIN * 0.3 incompatible_modules = list(/obj/item/mod/module/plasma_stabilizer) overlay_state_inactive = "module_plasma" + required_slots = list(ITEM_SLOT_HEAD) /obj/item/mod/module/plasma_stabilizer/generate_worn_overlay() if(locate(/obj/item/mod/module/infiltrator) in mod.modules) @@ -663,6 +680,7 @@ This is a must-have for Nanotrasen Captains, enabling them to show off their authoritative hat even while in their MODsuit." icon_state = "hat_holder" incompatible_modules = list(/obj/item/mod/module/hat_stabilizer) + required_slots = list(ITEM_SLOT_HEAD) /*Intentionally left inheriting 0 complexity and removable = TRUE; even though it comes inbuilt into the Magnate/Corporate MODS and spawns in maints, I like the idea of stealing them*/ /// Currently "stored" hat. No armor or function will be inherited, only the icon and cover flags. @@ -672,18 +690,24 @@ var/former_visor_flags /obj/item/mod/module/hat_stabilizer/on_suit_activation() - RegisterSignal(mod.helmet, COMSIG_ATOM_EXAMINE, PROC_REF(add_examine)) - RegisterSignal(mod.helmet, COMSIG_ATOM_ATTACKBY, PROC_REF(place_hat)) - RegisterSignal(mod.helmet, COMSIG_ATOM_ATTACK_HAND_SECONDARY, PROC_REF(remove_hat)) + var/obj/item/clothing/helmet = mod.get_part_from_slot(ITEM_SLOT_HEAD) + if(!istype(helmet)) + return + RegisterSignal(helmet, COMSIG_ATOM_EXAMINE, PROC_REF(add_examine)) + RegisterSignal(helmet, COMSIG_ATOM_ATTACKBY, PROC_REF(place_hat)) + RegisterSignal(helmet, COMSIG_ATOM_ATTACK_HAND_SECONDARY, PROC_REF(remove_hat)) /obj/item/mod/module/hat_stabilizer/on_suit_deactivation(deleting = FALSE) if(deleting) return if(attached_hat) //knock off the helmet if its on their head. Or, technically, auto-rightclick it for them; that way it saves us code, AND gives them the bubble remove_hat(src, mod.wearer) - UnregisterSignal(mod.helmet, COMSIG_ATOM_EXAMINE) - UnregisterSignal(mod.helmet, COMSIG_ATOM_ATTACKBY) - UnregisterSignal(mod.helmet, COMSIG_ATOM_ATTACK_HAND_SECONDARY) + var/obj/item/clothing/helmet = mod.get_part_from_slot(ITEM_SLOT_HEAD) + if(!istype(helmet)) + return + UnregisterSignal(helmet, COMSIG_ATOM_EXAMINE) + UnregisterSignal(helmet, COMSIG_ATOM_ATTACKBY) + UnregisterSignal(helmet, COMSIG_ATOM_ATTACK_HAND_SECONDARY) /obj/item/mod/module/hat_stabilizer/proc/add_examine(datum/source, mob/user, list/base_examine) SIGNAL_HANDLER @@ -708,10 +732,12 @@ return if(mod.wearer.transferItemToLoc(hitting_item, src, force = FALSE, silent = TRUE)) attached_hat = hat - former_flags = mod.helmet.flags_cover - former_visor_flags = mod.helmet.visor_flags_cover - mod.helmet.flags_cover |= attached_hat.flags_cover - mod.helmet.visor_flags_cover |= attached_hat.visor_flags_cover + var/obj/item/clothing/helmet = mod.get_part_from_slot(ITEM_SLOT_HEAD) + if(istype(helmet)) + former_flags = helmet.flags_cover + former_visor_flags = helmet.visor_flags_cover + helmet.flags_cover |= attached_hat.flags_cover + helmet.visor_flags_cover |= attached_hat.visor_flags_cover balloon_alert(user, "hat attached, right-click to remove") mod.wearer.update_clothing(mod.slot_flags) @@ -731,10 +757,21 @@ else balloon_alert_to_viewers("the hat falls to the floor!") attached_hat = null - mod.helmet.flags_cover = former_flags - mod.helmet.visor_flags_cover = former_visor_flags + var/obj/item/clothing/helmet = mod.get_part_from_slot(ITEM_SLOT_HEAD) + if(istype(helmet)) + helmet.flags_cover = former_flags + helmet.visor_flags_cover = former_visor_flags mod.wearer.update_clothing(mod.slot_flags) +/obj/item/mod/module/hat_stabilizer/syndicate + name = "MOD elite hat stabilizer module" + desc = "A simple set of deployable stands, directly atop one's head; \ + these will deploy under a hat to keep it from falling off, allowing them to be worn atop the sealed helmet. \ + You still need to take the hat off your head while the helmet deploys, though. This is a must-have for \ + Syndicate Operatives and Agents alike, enabling them to continue to style on the opposition even while in their MODsuit." + complexity = 0 + removable = FALSE + ///Sign Language Translator - allows people to sign over comms using the modsuit's gloves. /obj/item/mod/module/signlang_radio name = "MOD glove translator module" @@ -745,6 +782,7 @@ complexity = 1 idle_power_cost = DEFAULT_CHARGE_DRAIN * 0.3 incompatible_modules = list(/obj/item/mod/module/signlang_radio) + required_slots = list(ITEM_SLOT_GLOVES) /obj/item/mod/module/signlang_radio/on_suit_activation() ADD_TRAIT(mod.wearer, TRAIT_CAN_SIGN_ON_COMMS, MOD_TRAIT) @@ -759,6 +797,7 @@ icon_state = "joint_torsion" complexity = 1 incompatible_modules = list(/obj/item/mod/module/joint_torsion) + required_slots = list(ITEM_SLOT_FEET) var/power_per_step = DEFAULT_CHARGE_DRAIN * 0.3 /obj/item/mod/module/joint_torsion/on_suit_activation() @@ -788,15 +827,6 @@ return mod.core.add_charge(power_per_step) -/obj/item/mod/module/hat_stabilizer/syndicate - name = "MOD elite hat stabilizer module" - desc = "A simple set of deployable stands, directly atop one's head; \ - these will deploy under a hat to keep it from falling off, allowing them to be worn atop the sealed helmet. \ - You still need to take the hat off your head while the helmet deploys, though. This is a must-have for \ - Syndicate Operatives and Agents alike, enabling them to continue to style on the opposition even while in their MODsuit." - complexity = 0 - removable = FALSE - /// Module that shoves garbage inside its material container when the user crosses it, and eject the recycled material with MMB. /obj/item/mod/module/recycler name = "MOD recycler module" @@ -810,6 +840,7 @@ incompatible_modules = list(/obj/item/mod/module/recycler) overlay_state_inactive = "module_recycler" overlay_state_active = "module_recycler" + required_slots = list(ITEM_SLOT_BACK|ITEM_SLOT_BELT) /// A multiplier of the amount of material extracted from the item var/efficiency = 1 /// Items that will be collected @@ -834,7 +865,7 @@ . = ..() if(!length(accepted_mats)) - accepted_mats = DSmaterials.materials_by_category[MAT_CATEGORY_SILO] + accepted_mats = SSmaterials.materials_by_category[MAT_CATEGORY_SILO] container = AddComponent( \ /datum/component/material_container, \ @@ -948,3 +979,29 @@ attempt_insert_storage(product) balloon_alert(mod.wearer, "ammo box dispensed.") playsound(src, 'sound/machines/microwave/microwave-end.ogg', 50, TRUE) + +/obj/item/mod/module/shock_absorber + name = "MOD shock absorption module" + desc = "A module that makes the user resistant to the knockdown inflicted by Stun Batons." + icon_state = "no_baton" + complexity = 1 + use_energy_cost = DEFAULT_CHARGE_DRAIN + incompatible_modules = list(/obj/item/mod/module/shock_absorber) + required_slots = list(ITEM_SLOT_BACK|ITEM_SLOT_BELT) + +/obj/item/mod/module/shock_absorber/on_suit_activation() + . = ..() + ADD_TRAIT(mod.wearer, TRAIT_BATON_RESISTANCE, REF(src)) + RegisterSignal(mod.wearer, COMSIG_MOB_BATONED, PROC_REF(mob_batoned)) + +/obj/item/mod/module/shock_absorber/on_suit_deactivation(deleting) + . = ..() + REMOVE_TRAIT(mod.wearer, TRAIT_BATON_RESISTANCE, REF(src)) + UnregisterSignal(mod.wearer, COMSIG_MOB_BATONED) + +/obj/item/mod/module/shock_absorber/proc/mob_batoned(datum/source) + SIGNAL_HANDLER + drain_power(use_energy_cost) + var/datum/effect_system/lightning_spread/sparks = new /datum/effect_system/lightning_spread + sparks.set_up(number = 5, cardinals_only = TRUE, location = mod.wearer.loc) + sparks.start() diff --git a/code/modules/mod/modules/modules_maint.dm b/code/modules/mod/modules/modules_maint.dm index 1f7c322e031f7..0d45bc4a44db8 100644 --- a/code/modules/mod/modules/modules_maint.dm +++ b/code/modules/mod/modules/modules_maint.dm @@ -10,6 +10,7 @@ icon_state = "springlock" complexity = 3 // it is inside every part of your suit, so incompatible_modules = list(/obj/item/mod/module/springlock) + var/set_off = FALSE /obj/item/mod/module/springlock/on_install() mod.activation_step_time *= 0.5 @@ -27,12 +28,13 @@ /obj/item/mod/module/springlock/proc/on_wearer_exposed(atom/source, list/reagents, datum/reagents/source_reagents, methods, volume_modifier, show_message) SIGNAL_HANDLER - if(!(methods & (VAPOR|PATCH|TOUCH))) + if(!(methods & (VAPOR|PATCH|TOUCH)) || set_off || mod.wearer.stat == DEAD) return //remove non-touch reagent exposure to_chat(mod.wearer, span_danger("[src] makes an ominous click sound...")) playsound(src, 'sound/items/modsuit/springlock.ogg', 75, TRUE) addtimer(CALLBACK(src, PROC_REF(snap_shut)), rand(3 SECONDS, 5 SECONDS)) RegisterSignal(mod, COMSIG_MOD_ACTIVATE, PROC_REF(on_activate_spring_block)) + set_off = TRUE ///Signal fired when wearer attempts to activate/deactivate suits /obj/item/mod/module/springlock/proc/on_activate_spring_block(datum/source, user) @@ -55,6 +57,7 @@ mod.wearer.investigate_log("has been killed by [src].", INVESTIGATE_DEATHS) mod.wearer.death() //just in case, for some reason, they're still alive flash_color(mod.wearer, flash_color = "#FF0000", flash_time = 10 SECONDS) + set_off = FALSE ///Rave Visor - Gives you a rainbow visor and plays jukebox music to you. /obj/item/mod/module/visor/rave @@ -63,6 +66,7 @@ icon_state = "rave_visor" complexity = 1 overlay_state_inactive = "module_rave" + required_slots = list(ITEM_SLOT_HEAD|ITEM_SLOT_MASK) /// The client colors applied to the wearer. var/datum/client_colour/rave_screen /// The current element in the rainbow_order list we are on. @@ -90,17 +94,11 @@ return ..() /obj/item/mod/module/visor/rave/on_activation() - . = ..() - if(!.) - return rave_screen = mod.wearer.add_client_colour(/datum/client_colour/rave) rave_screen.update_colour(rainbow_order[rave_number]) music_player.start_music(mod.wearer) /obj/item/mod/module/visor/rave/on_deactivation(display_message = TRUE, deleting = FALSE) - . = ..() - if(!.) - return QDEL_NULL(rave_screen) if(isnull(music_player.active_song_sound)) return @@ -151,11 +149,9 @@ use_energy_cost = DEFAULT_CHARGE_DRAIN * 5 incompatible_modules = list(/obj/item/mod/module/tanner) cooldown_time = 30 SECONDS + required_slots = list(ITEM_SLOT_OCLOTHING|ITEM_SLOT_ICLOTHING) /obj/item/mod/module/tanner/on_use() - . = ..() - if(!.) - return playsound(src, 'sound/machines/microwave/microwave-end.ogg', 50, TRUE) var/datum/reagents/holder = new() holder.add_reagent(/datum/reagent/spraytan, 10) @@ -174,16 +170,17 @@ use_energy_cost = DEFAULT_CHARGE_DRAIN * 0.5 incompatible_modules = list(/obj/item/mod/module/balloon) cooldown_time = 15 SECONDS + required_slots = list(ITEM_SLOT_HEAD|ITEM_SLOT_MASK) + var/balloon_path = /obj/item/toy/balloon + var/blowing_time = 10 SECONDS + var/oxygen_damage = 20 /obj/item/mod/module/balloon/on_use() - . = ..() - if(!.) - return - if(!do_after(mod.wearer, 10 SECONDS, target = mod)) + if(!do_after(mod.wearer, blowing_time, target = mod)) return FALSE - mod.wearer.adjustOxyLoss(20) + mod.wearer.adjustOxyLoss(oxygen_damage) playsound(src, 'sound/items/modsuit/inflate_bloon.ogg', 50, TRUE) - var/obj/item/toy/balloon/balloon = new(get_turf(src)) + var/obj/item/balloon = new balloon_path(get_turf(src)) mod.wearer.put_in_hands(balloon) drain_power(use_energy_cost) @@ -198,13 +195,11 @@ use_energy_cost = DEFAULT_CHARGE_DRAIN * 0.5 incompatible_modules = list(/obj/item/mod/module/paper_dispenser) cooldown_time = 5 SECONDS + required_slots = list(ITEM_SLOT_GLOVES) /// The total number of sheets created by this MOD. The more sheets, them more likely they set on fire. var/num_sheets_dispensed = 0 /obj/item/mod/module/paper_dispenser/on_use() - . = ..() - if(!.) - return if(!do_after(mod.wearer, 1 SECONDS, target = mod)) return FALSE @@ -243,6 +238,7 @@ device = /obj/item/stamp/mod incompatible_modules = list(/obj/item/mod/module/stamp) cooldown_time = 0.5 SECONDS + required_slots = list(ITEM_SLOT_GLOVES) /obj/item/stamp/mod name = "MOD electronic stamp" @@ -267,15 +263,13 @@ incompatible_modules = list(/obj/item/mod/module/atrocinator, /obj/item/mod/module/magboot, /obj/item/mod/module/anomaly_locked/antigrav) cooldown_time = 0.5 SECONDS overlay_state_inactive = "module_atrocinator" + required_slots = list(ITEM_SLOT_BACK|ITEM_SLOT_BELT) /// How many steps the user has taken since turning the suit on, used for footsteps. var/step_count = 0 /// If you use the module on a planetary turf, you fly up. To the sky. var/you_fucked_up = FALSE /obj/item/mod/module/atrocinator/on_activation() - . = ..() - if(!.) - return playsound(src, 'sound/effects/curseattack.ogg', 50) mod.wearer.AddElement(/datum/element/forced_gravity, NEGATIVE_GRAVITY) RegisterSignal(mod.wearer, COMSIG_MOVABLE_MOVED, PROC_REF(check_upstairs)) @@ -284,14 +278,14 @@ passtable_on(mod.wearer, MOD_TRAIT) check_upstairs() //todo at some point flip your screen around -/obj/item/mod/module/atrocinator/on_deactivation(display_message = TRUE, deleting = FALSE) +/obj/item/mod/module/atrocinator/deactivate(display_message = TRUE, deleting = FALSE) if(you_fucked_up && !deleting) to_chat(mod.wearer, span_danger("It's too late.")) return FALSE - . = ..() - if(!.) - return - if(deleting) + return ..() + +/obj/item/mod/module/atrocinator/on_deactivation(display_message = TRUE, deleting = FALSE) + if(!deleting) playsound(src, 'sound/effects/curseattack.ogg', 50) qdel(mod.wearer.RemoveElement(/datum/element/forced_gravity, NEGATIVE_GRAVITY)) UnregisterSignal(mod.wearer, COMSIG_MOVABLE_MOVED) diff --git a/code/modules/mod/modules/modules_medical.dm b/code/modules/mod/modules/modules_medical.dm index 0e04de51c86cf..3cf1d34a63a83 100644 --- a/code/modules/mod/modules/modules_medical.dm +++ b/code/modules/mod/modules/modules_medical.dm @@ -9,8 +9,7 @@ name = "MOD health analyzer module" desc = "A module installed into the glove of the suit. This is a high-tech biological scanning suite, \ allowing the user indepth information on the vitals and injuries of others even at a distance, \ - all with the flick of the wrist. Data is displayed in a convenient package on HUD in the helmet, \ - but it's up to you to do something with it." + all with the flick of the wrist. Data is displayed in a convenient package, but it's up to you to do something with it." icon_state = "health" module_type = MODULE_ACTIVE complexity = 1 @@ -18,6 +17,7 @@ incompatible_modules = list(/obj/item/mod/module/health_analyzer) cooldown_time = 0.5 SECONDS tgui_id = "health_analyzer" + required_slots = list(ITEM_SLOT_GLOVES) /// Scanning mode, changes how we scan something. var/mode = HEALTH_SCAN @@ -74,6 +74,7 @@ complexity = 1 idle_power_cost = DEFAULT_CHARGE_DRAIN * 0.3 incompatible_modules = list(/obj/item/mod/module/quick_carry, /obj/item/mod/module/constructor) + required_slots = list(ITEM_SLOT_GLOVES) var/quick_carry_trait = TRAIT_QUICK_CARRY /obj/item/mod/module/quick_carry/on_suit_activation() @@ -105,6 +106,7 @@ device = /obj/item/reagent_containers/syringe/mod incompatible_modules = list(/obj/item/mod/module/injector) cooldown_time = 0.5 SECONDS + required_slots = list(ITEM_SLOT_GLOVES) /obj/item/reagent_containers/syringe/mod name = "MOD injector syringe" @@ -131,6 +133,7 @@ use_energy_cost = DEFAULT_CHARGE_DRAIN incompatible_modules = list(/obj/item/mod/module/organ_thrower, /obj/item/mod/module/microwave_beam) cooldown_time = 0.5 SECONDS + required_slots = list(ITEM_SLOT_GLOVES) /// How many organs the module can hold. var/max_organs = 5 /// A list of all our organs. @@ -247,6 +250,7 @@ overlay_state_active = "module_defibrillator_active" incompatible_modules = list(/obj/item/mod/module/defibrillator) cooldown_time = 0.5 SECONDS + required_slots = list(ITEM_SLOT_GLOVES) var/defib_cooldown = 5 SECONDS /obj/item/mod/module/defibrillator/Initialize(mapload) @@ -308,6 +312,7 @@ incompatible_modules = list(/obj/item/mod/module/thread_ripper) cooldown_time = 1.5 SECONDS overlay_state_inactive = "module_threadripper" + required_slots = list(ITEM_SLOT_GLOVES) /// An associated list of ripped clothing and the body part covering slots they covered before var/list/ripped_clothing = list() @@ -357,7 +362,7 @@ playsound(src, 'sound/items/zip.ogg', 25, TRUE) balloon_alert(mod.wearer, "clothing mended") -/obj/item/mod/module/thread_ripper/on_suit_deactivation(deleting) +/obj/item/mod/module/thread_ripper/on_suit_deactivation(deleting = FALSE) if(!length(ripped_clothing)) return for(var/obj/item/clothing as anything in ripped_clothing) diff --git a/code/modules/mod/modules/modules_ninja.dm b/code/modules/mod/modules/modules_ninja.dm index d52a5e1fb4c43..a868eb6205659 100644 --- a/code/modules/mod/modules/modules_ninja.dm +++ b/code/modules/mod/modules/modules_ninja.dm @@ -13,15 +13,13 @@ use_energy_cost = DEFAULT_CHARGE_DRAIN * 10 incompatible_modules = list(/obj/item/mod/module/stealth) cooldown_time = 5 SECONDS + required_slots = list(ITEM_SLOT_BACK|ITEM_SLOT_BELT) /// Whether or not the cloak turns off on bumping. var/bumpoff = TRUE /// The alpha applied when the cloak is on. var/stealth_alpha = 50 /obj/item/mod/module/stealth/on_activation() - . = ..() - if(!.) - return if(bumpoff) RegisterSignal(mod.wearer, COMSIG_LIVING_MOB_BUMP, PROC_REF(unstealth)) RegisterSignal(mod.wearer, COMSIG_LIVING_UNARMED_ATTACK, PROC_REF(on_unarmed_attack)) @@ -31,9 +29,6 @@ drain_power(use_energy_cost) /obj/item/mod/module/stealth/on_deactivation(display_message = TRUE, deleting = FALSE) - . = ..() - if(!.) - return if(bumpoff) UnregisterSignal(mod.wearer, COMSIG_LIVING_MOB_BUMP) UnregisterSignal(mod.wearer, list(COMSIG_LIVING_UNARMED_ATTACK, COMSIG_MOB_ITEM_ATTACK, COMSIG_ATOM_ATTACKBY, COMSIG_ATOM_ATTACK_HAND, COMSIG_ATOM_BULLET_ACT, COMSIG_ATOM_HITBY, COMSIG_ATOM_HULK_ATTACK, COMSIG_ATOM_ATTACK_PAW, COMSIG_CARBON_CUFF_ATTEMPTED)) @@ -45,7 +40,7 @@ to_chat(mod.wearer, span_warning("[src] gets discharged from contact!")) do_sparks(2, TRUE, src) drain_power(use_energy_cost) - on_deactivation(display_message = TRUE, deleting = FALSE) + deactivate() /obj/item/mod/module/stealth/proc/on_unarmed_attack(datum/source, atom/target) SIGNAL_HANDLER @@ -99,6 +94,7 @@ removable = FALSE complexity = 0 overlay_state_inactive = null + required_slots = list(ITEM_SLOT_HEAD|ITEM_SLOT_EYES|ITEM_SLOT_MASK) /obj/item/mod/module/welding/camera_vision/on_suit_activation() . = ..() @@ -133,6 +129,7 @@ icon_state = "hacker" removable = FALSE incompatible_modules = list(/obj/item/mod/module/hacker) + required_slots = list(ITEM_SLOT_GLOVES) /// Whether or not the communication console hack was used to summon another antagonist. var/communication_console_hack_success = FALSE /// How many times the module has been used to force open doors. @@ -173,6 +170,7 @@ use_energy_cost = DEFAULT_CHARGE_DRAIN * 2 incompatible_modules = list(/obj/item/mod/module/weapon_recall) cooldown_time = 0.5 SECONDS + required_slots = list(ITEM_SLOT_GLOVES, ITEM_SLOT_BACK|ITEM_SLOT_BELT) /// The item linked to the module that will get recalled. var/obj/item/linked_weapon /// The accepted typepath we can link to. @@ -185,9 +183,6 @@ REMOVE_TRAIT(mod.wearer, TRAIT_NOGUNS, MOD_TRAIT) /obj/item/mod/module/weapon_recall/on_use() - . = ..() - if(!.) - return if(!linked_weapon) var/obj/item/weapon_to_link = mod.wearer.is_holding_item_of_type(accepted_type) if(!weapon_to_link) @@ -288,9 +283,6 @@ cooldown_time = 8 SECONDS /obj/item/mod/module/emp_shield/pulse/on_use() - . = ..() - if(!.) - return playsound(src, 'sound/effects/empulse.ogg', 60, TRUE) empulse(src, heavy_range = 4, light_range = 6) drain_power(use_energy_cost) @@ -320,6 +312,7 @@ use_energy_cost = DEFAULT_CHARGE_DRAIN * 6 incompatible_modules = list(/obj/item/mod/module/energy_net) cooldown_time = 5 SECONDS + required_slots = list(ITEM_SLOT_GLOVES) /// List of all energy nets this module made. var/list/energy_nets = list() @@ -404,6 +397,7 @@ allow_flags = MODULE_ALLOW_INCAPACITATED incompatible_modules = list(/obj/item/mod/module/adrenaline_boost) cooldown_time = 12 SECONDS + required_slots = list(ITEM_SLOT_BACK|ITEM_SLOT_BELT) /// What reagent we need to refill? var/reagent_required = /datum/reagent/uranium/radium /// How much of a reagent we need to refill the boost. @@ -414,13 +408,13 @@ create_reagents(reagent_required_amount) reagents.add_reagent(reagent_required, reagent_required_amount) -/obj/item/mod/module/adrenaline_boost/on_use() +/obj/item/mod/module/adrenaline_boost/used() if(!reagents.has_reagent(reagent_required, reagent_required_amount)) balloon_alert(mod.wearer, "no charge!") - return - . = ..() - if(!.) - return + return FALSE + return ..() + +/obj/item/mod/module/adrenaline_boost/on_use() if(IS_SPACE_NINJA(mod.wearer)) mod.wearer.say(pick_list_replacements(NINJA_FILE, "lines"), forced = type) to_chat(mod.wearer, span_notice("You have used the adrenaline boost.")) @@ -438,7 +432,7 @@ /obj/item/mod/module/adrenaline_boost/on_install() RegisterSignal(mod, COMSIG_ATOM_ATTACKBY, PROC_REF(on_attackby)) -/obj/item/mod/module/adrenaline_boost/on_uninstall(deleting) +/obj/item/mod/module/adrenaline_boost/on_uninstall(deleting = FALSE) UnregisterSignal(mod, COMSIG_ATOM_ATTACKBY) /obj/item/mod/module/adrenaline_boost/attackby(obj/item/attacking_item, mob/user, params) diff --git a/code/modules/mod/modules/modules_science.dm b/code/modules/mod/modules/modules_science.dm index a5a56975f6c53..9f2c54b8effc3 100644 --- a/code/modules/mod/modules/modules_science.dm +++ b/code/modules/mod/modules/modules_science.dm @@ -12,17 +12,12 @@ active_power_cost = DEFAULT_CHARGE_DRAIN * 0.2 incompatible_modules = list(/obj/item/mod/module/reagent_scanner) cooldown_time = 0.5 SECONDS + required_slots = list(ITEM_SLOT_HEAD|ITEM_SLOT_EYES|ITEM_SLOT_MASK) /obj/item/mod/module/reagent_scanner/on_activation() - . = ..() - if(!.) - return ADD_TRAIT(mod.wearer, TRAIT_REAGENT_SCANNER, MOD_TRAIT) /obj/item/mod/module/reagent_scanner/on_deactivation(display_message = TRUE, deleting = FALSE) - . = ..() - if(!.) - return REMOVE_TRAIT(mod.wearer, TRAIT_REAGENT_SCANNER, MOD_TRAIT) /obj/item/mod/module/reagent_scanner/advanced @@ -32,16 +27,10 @@ var/explosion_detection_dist = 21 /obj/item/mod/module/reagent_scanner/advanced/on_activation() - . = ..() - if(!.) - return ADD_TRAIT(mod.wearer, TRAIT_RESEARCH_SCANNER, MOD_TRAIT) RegisterSignal(SSdcs, COMSIG_GLOB_EXPLOSION, PROC_REF(sense_explosion)) /obj/item/mod/module/reagent_scanner/advanced/on_deactivation(display_message = TRUE, deleting = FALSE) - . = ..() - if(!.) - return REMOVE_TRAIT(mod.wearer, TRAIT_RESEARCH_SCANNER, MOD_TRAIT) UnregisterSignal(SSdcs, COMSIG_GLOB_EXPLOSION) @@ -66,20 +55,15 @@ incompatible_modules = list(/obj/item/mod/module/anomaly_locked, /obj/item/mod/module/atrocinator) cooldown_time = 0.5 SECONDS accepted_anomalies = list(/obj/item/assembly/signaler/anomaly/grav) + required_slots = list(ITEM_SLOT_BACK|ITEM_SLOT_BELT) /obj/item/mod/module/anomaly_locked/antigrav/on_activation() - . = ..() - if(!.) - return if(mod.wearer.has_gravity()) new /obj/effect/temp_visual/mook_dust(get_turf(src)) mod.wearer.AddElement(/datum/element/forced_gravity, 0) playsound(src, 'sound/effects/gravhit.ogg', 50) /obj/item/mod/module/anomaly_locked/antigrav/on_deactivation(display_message = TRUE, deleting = FALSE) - . = ..() - if(!.) - return mod.wearer.RemoveElement(/datum/element/forced_gravity, 0) if(deleting) return @@ -103,6 +87,7 @@ use_energy_cost = DEFAULT_CHARGE_DRAIN * 5 cooldown_time = 5 SECONDS accepted_anomalies = list(/obj/item/assembly/signaler/anomaly/bluespace) + required_slots = list(ITEM_SLOT_BACK|ITEM_SLOT_BELT) /// Time it takes to teleport var/teleport_time = 3 SECONDS diff --git a/code/modules/mod/modules/modules_security.dm b/code/modules/mod/modules/modules_security.dm index 6d91b24469ba0..2a317becf18e6 100644 --- a/code/modules/mod/modules/modules_security.dm +++ b/code/modules/mod/modules/modules_security.dm @@ -8,6 +8,7 @@ complexity = 2 use_energy_cost = DEFAULT_CHARGE_DRAIN incompatible_modules = list(/obj/item/mod/module/magnetic_harness) + required_slots = list(ITEM_SLOT_OCLOTHING) /// Time before we activate the magnet. var/magnet_delay = 0.8 SECONDS /// The typecache of all guns we allow. @@ -21,13 +22,19 @@ guns_typecache = typecacheof(list(/obj/item/gun/ballistic, /obj/item/gun/energy, /obj/item/gun/grenadelauncher, /obj/item/gun/chem, /obj/item/gun/syringe)) /obj/item/mod/module/magnetic_harness/on_install() - already_allowed_guns = guns_typecache & mod.chestplate.allowed - mod.chestplate.allowed |= guns_typecache + var/obj/item/clothing/suit = mod.get_part_from_slot(ITEM_SLOT_OCLOTHING) + if(!istype(suit)) + return + already_allowed_guns = guns_typecache & suit.allowed + suit.allowed |= guns_typecache /obj/item/mod/module/magnetic_harness/on_uninstall(deleting = FALSE) if(deleting) return - mod.chestplate.allowed -= (guns_typecache - already_allowed_guns) + var/obj/item/clothing/suit = mod.get_part_from_slot(ITEM_SLOT_OCLOTHING) + if(!istype(suit)) + return + suit.allowed -= (guns_typecache - already_allowed_guns) /obj/item/mod/module/magnetic_harness/on_suit_activation() RegisterSignal(mod.wearer, COMSIG_MOB_UNEQUIPPED_ITEM, PROC_REF(check_dropped_item)) @@ -65,6 +72,7 @@ cooldown_time = 5 SECONDS overlay_state_inactive = "module_pepper" overlay_state_use = "module_pepper_used" + required_slots = list(ITEM_SLOT_OCLOTHING) /obj/item/mod/module/pepper_shoulders/on_suit_activation() RegisterSignal(mod.wearer, COMSIG_LIVING_CHECK_BLOCK, PROC_REF(on_check_block)) @@ -73,9 +81,6 @@ UnregisterSignal(mod.wearer, COMSIG_LIVING_CHECK_BLOCK) /obj/item/mod/module/pepper_shoulders/on_use() - . = ..() - if(!.) - return playsound(src, 'sound/effects/spray.ogg', 30, TRUE, -6) var/datum/reagents/capsaicin_holder = new(10) capsaicin_holder.add_reagent(/datum/reagent/consumable/condensedcapsaicin, 10) @@ -92,7 +97,7 @@ if(!check_power(use_energy_cost)) return mod.wearer.visible_message(span_warning("[src] reacts to the attack with a smoke of pepper spray!"), span_notice("Your [src] releases a cloud of pepper spray!")) - on_use() + used() ///Holster - Instantly holsters any not huge gun. /obj/item/mod/module/holster @@ -107,13 +112,11 @@ incompatible_modules = list(/obj/item/mod/module/holster) cooldown_time = 0.5 SECONDS allow_flags = MODULE_ALLOW_INACTIVE + required_slots = list(ITEM_SLOT_OCLOTHING|ITEM_SLOT_GLOVES|ITEM_SLOT_FEET) /// Gun we have holstered. var/obj/item/gun/holstered /obj/item/mod/module/holster/on_use() - . = ..() - if(!.) - return if(!holstered) var/obj/item/gun/holding = mod.wearer.get_active_held_item() if(!holding) @@ -155,19 +158,14 @@ use_energy_cost = DEFAULT_CHARGE_DRAIN * 0.5 incompatible_modules = list(/obj/item/mod/module/megaphone) cooldown_time = 0.5 SECONDS + required_slots = list(ITEM_SLOT_HEAD|ITEM_SLOT_EYES|ITEM_SLOT_MASK) /// List of spans we add to the speaker. var/list/voicespan = list(SPAN_COMMAND) /obj/item/mod/module/megaphone/on_activation() - . = ..() - if(!.) - return RegisterSignal(mod.wearer, COMSIG_MOB_SAY, PROC_REF(handle_speech)) /obj/item/mod/module/megaphone/on_deactivation(display_message = TRUE, deleting = FALSE) - . = ..() - if(!.) - return UnregisterSignal(mod.wearer, COMSIG_MOB_SAY) /obj/item/mod/module/megaphone/proc/handle_speech(datum/source, list/speech_args) @@ -190,6 +188,7 @@ use_energy_cost = DEFAULT_CHARGE_DRAIN * 0.5 incompatible_modules = list(/obj/item/mod/module/criminalcapture) cooldown_time = 0.5 SECONDS + required_slots = list(ITEM_SLOT_BACK|ITEM_SLOT_BELT) /// Time to capture a prisoner. var/capture_time = 2.5 SECONDS /// Time to dematerialize a bodybag. @@ -203,10 +202,7 @@ idle_power_cost = linked_bodybag ? (DEFAULT_CHARGE_DRAIN * 3) : 0 return ..() -/obj/item/mod/module/criminalcapture/on_deactivation(display_message, deleting) - . = ..() - if(!.) - return +/obj/item/mod/module/criminalcapture/on_deactivation(display_message = TRUE, deleting = FALSE) if(!linked_bodybag) return packup() @@ -273,9 +269,6 @@ dispense_type = /obj/item/grenade/mirage /obj/item/mod/module/dispenser/mirage/on_use() - . = ..() - if(!.) - return var/obj/item/grenade/mirage/grenade = . grenade.arm_grenade(mod.wearer) @@ -310,6 +303,7 @@ active_power_cost = DEFAULT_CHARGE_DRAIN incompatible_modules = list(/obj/item/mod/module/projectile_dampener) cooldown_time = 1.5 SECONDS + required_slots = list(ITEM_SLOT_BACK|ITEM_SLOT_BELT) /// Radius of the dampening field. var/field_radius = 2 /// Damage multiplier on projectiles. @@ -328,9 +322,6 @@ projectile_effect = image('icons/effects/fields.dmi', "projectile_dampen_effect") /obj/item/mod/module/projectile_dampener/on_activation() - . = ..() - if(!.) - return if(istype(dampening_field)) QDEL_NULL(dampening_field) dampening_field = new(mod.wearer, field_radius, TRUE, src) @@ -370,6 +361,7 @@ complexity = 2 incompatible_modules = list(/obj/item/mod/module/active_sonar) cooldown_time = 15 SECONDS + required_slots = list(ITEM_SLOT_HEAD|ITEM_SLOT_EYES|ITEM_SLOT_MASK) /// Time between us displaying radial scans var/scan_cooldown_time = 0.5 SECONDS /// The current slice we're going to scan @@ -454,9 +446,6 @@ COOLDOWN_START(src, scan_cooldown, scan_cooldown_time) /obj/item/mod/module/active_sonar/on_use() - . = ..() - if(!.) - return balloon_alert(mod.wearer, "readying sonar...") playsound(mod.wearer, 'sound/mecha/skyfall_power_up.ogg', vol = 20, vary = TRUE, extrarange = SHORT_RANGE_SOUND_EXTRARANGE) if(!do_after(mod.wearer, 1.1 SECONDS, target = mod)) @@ -486,6 +475,7 @@ module_type = MODULE_PASSIVE complexity = 3 incompatible_modules = list(/obj/item/mod/module/shooting_assistant) + required_slots = list(ITEM_SLOT_GLOVES) var/selected_mode = SHOOTING_ASSISTANT_OFF ///Association list, the assoc values are the balloon alerts shown to the user when the mode is set. var/static/list/available_modes = list( @@ -585,6 +575,7 @@ icon_state = "bulwark" complexity = 3 incompatible_modules = list(/obj/item/mod/module/shove_blocker) + required_slots = list(ITEM_SLOT_OCLOTHING) /obj/item/mod/module/shove_blocker/on_suit_activation() mod.wearer.add_traits(list(TRAIT_BRAWLING_KNOCKDOWN_BLOCKED, TRAIT_NO_STAGGER, TRAIT_NO_THROW_HITPUSH), MOD_TRAIT) @@ -603,6 +594,7 @@ desc = "Enhanced gauntlent grip pads that help with placing individuals in restraints more quickly. Doesn't look like they'll come off." removable = FALSE complexity = 0 + required_slots = list(ITEM_SLOT_GLOVES) /obj/item/mod/module/quick_cuff/on_suit_activation() . = ..() diff --git a/code/modules/mod/modules/modules_service.dm b/code/modules/mod/modules/modules_service.dm index be71c62180298..044137f0f2d07 100644 --- a/code/modules/mod/modules/modules_service.dm +++ b/code/modules/mod/modules/modules_service.dm @@ -13,36 +13,17 @@ cooldown_time = 1 SECONDS /obj/item/mod/module/bikehorn/on_use() - . = ..() - if(!.) - return playsound(src, 'sound/items/bikehorn.ogg', 100, FALSE) drain_power(use_energy_cost) ///Advanced Balloon Blower - Blows a long balloon. -/obj/item/mod/module/balloon_advanced +/obj/item/mod/module/balloon/advanced name = "MOD advanced balloon blower module" desc = "A relatively new piece of technology developed by finest clown engineers to make long balloons and balloon animals \ - at party-appropriate rate." - icon_state = "bloon" - module_type = MODULE_USABLE - complexity = 1 - use_energy_cost = DEFAULT_CHARGE_DRAIN * 0.5 - incompatible_modules = list(/obj/item/mod/module/balloon_advanced) - cooldown_time = 15 SECONDS - -/obj/item/mod/module/balloon_advanced/on_use() - . = ..() - if(!.) - return - if(!do_after(mod.wearer, 15 SECONDS, target = mod)) - return FALSE - mod.wearer.adjustOxyLoss(20) - playsound(src, 'sound/items/modsuit/inflate_bloon.ogg', 50, TRUE) - var/obj/item/toy/balloon/long/l_balloon = new(get_turf(src)) - mod.wearer.put_in_hands(l_balloon) - drain_power(use_energy_cost) - + at party-appropriate rate." + cooldown_time = 20 SECONDS + balloon_path = /obj/item/toy/balloon/long + blowing_time = 15 SECONDS ///Microwave Beam - Microwaves items instantly. /obj/item/mod/module/microwave_beam @@ -56,6 +37,7 @@ use_energy_cost = DEFAULT_CHARGE_DRAIN * 5 incompatible_modules = list(/obj/item/mod/module/microwave_beam, /obj/item/mod/module/organ_thrower) cooldown_time = 10 SECONDS + required_slots = list(ITEM_SLOT_GLOVES) /obj/item/mod/module/microwave_beam/on_select_use(atom/target) . = ..() @@ -84,7 +66,7 @@ /obj/item/mod/module/waddle name = "MOD waddle module" desc = "Some of the most primitive technology in use by Honk Co. This module works off an automatic intention system, \ - utilizing its' sensitivity to the pilot's often-limited brainwaves to directly read their next step, \ + utilizing its sensitivity to the pilot's often-limited brainwaves to directly read their next step, \ affecting the boots they're installed in. Employing a twin-linked gravitonic drive to create \ miniaturized etheric blasts of space-time beneath the user's feet, this enables them to... \ to waddle around, bouncing to and fro with a pep in their step." @@ -92,16 +74,20 @@ complexity = 1 idle_power_cost = DEFAULT_CHARGE_DRAIN * 0.2 incompatible_modules = list(/obj/item/mod/module/waddle) + required_slots = list(ITEM_SLOT_FEET) /obj/item/mod/module/waddle/on_suit_activation() - mod.boots.AddComponent(/datum/component/squeak, list('sound/effects/footstep/clownstep1.ogg'=1,'sound/effects/footstep/clownstep2.ogg'=1), 50, falloff_exponent = 20) //die off quick please + var/obj/item/shoes = mod.get_part_from_slot(ITEM_SLOT_FEET) + if(shoes) + shoes.AddComponent(/datum/component/squeak, list('sound/effects/footstep/clownstep1.ogg'=1,'sound/effects/footstep/clownstep2.ogg'=1), 50, falloff_exponent = 20) //die off quick please mod.wearer.AddElementTrait(TRAIT_WADDLING, MOD_TRAIT, /datum/element/waddling) if(is_clown_job(mod.wearer.mind?.assigned_role)) mod.wearer.add_mood_event("clownshoes", /datum/mood_event/clownshoes) /obj/item/mod/module/waddle/on_suit_deactivation(deleting = FALSE) - if(!deleting) - qdel(mod.boots.GetComponent(/datum/component/squeak)) + var/obj/item/shoes = mod.get_part_from_slot(ITEM_SLOT_FEET) + if(shoes && !deleting) + qdel(shoes.GetComponent(/datum/component/squeak)) REMOVE_TRAIT(mod.wearer, TRAIT_WADDLING, MOD_TRAIT) if(is_clown_job(mod.wearer.mind?.assigned_role)) mod.wearer.clear_mood_event("clownshoes") diff --git a/code/modules/mod/modules/modules_supply.dm b/code/modules/mod/modules/modules_supply.dm index de1efdcc4e2fd..c86cb182c6b84 100644 --- a/code/modules/mod/modules/modules_supply.dm +++ b/code/modules/mod/modules/modules_supply.dm @@ -19,9 +19,6 @@ AddComponent(/datum/component/gps/item, "MOD0", state = GLOB.deep_inventory_state, overlay_state = FALSE) /obj/item/mod/module/gps/on_use() - . = ..() - if(!.) - return attack_self(mod.wearer) ///Hydraulic Clamp - Lets you pick up and drop crates. @@ -38,6 +35,7 @@ cooldown_time = 0.5 SECONDS overlay_state_inactive = "module_clamp" overlay_state_active = "module_clamp_on" + required_slots = list(ITEM_SLOT_GLOVES, ITEM_SLOT_BACK) /// Time it takes to load a crate. var/load_time = 3 SECONDS /// The max amount of crates you can carry. @@ -110,6 +108,7 @@ load_time = 1 SECONDS max_crates = 5 use_mod_colors = TRUE + required_slots = list(ITEM_SLOT_BACK) ///Drill - Lets you dig through rock and basalt. /obj/item/mod/module/drill @@ -123,17 +122,12 @@ incompatible_modules = list(/obj/item/mod/module/drill) cooldown_time = 0.5 SECONDS overlay_state_active = "module_drill" + required_slots = list(ITEM_SLOT_GLOVES) /obj/item/mod/module/drill/on_activation() - . = ..() - if(!.) - return RegisterSignal(mod.wearer, COMSIG_MOVABLE_BUMP, PROC_REF(bump_mine)) /obj/item/mod/module/drill/on_deactivation(display_message = TRUE, deleting = FALSE) - . = ..() - if(!.) - return UnregisterSignal(mod.wearer, COMSIG_MOVABLE_BUMP) /obj/item/mod/module/drill/on_select_use(atom/target) @@ -180,6 +174,7 @@ incompatible_modules = list(/obj/item/mod/module/orebag) cooldown_time = 0.5 SECONDS allow_flags = MODULE_ALLOW_INACTIVE + required_slots = list(ITEM_SLOT_BACK) /// The ores stored in the bag. var/list/ores = list() @@ -208,9 +203,6 @@ ores += ore /obj/item/mod/module/orebag/on_use() - . = ..() - if(!.) - return for(var/obj/item/ore as anything in ores) ore.forceMove(drop_location()) ores -= ore @@ -228,6 +220,7 @@ overlay_state_inactive = "module_hydraulic" overlay_state_active = "module_hydraulic_active" use_mod_colors = TRUE + required_slots = list(ITEM_SLOT_BACK) /// Time it takes to launch var/launch_time = 2 SECONDS /// User overlay @@ -316,6 +309,7 @@ cooldown_time = 1.5 SECONDS overlay_state_active = "module_magnet" use_mod_colors = TRUE + required_slots = list(ITEM_SLOT_BACK) /obj/item/mod/module/magnet/on_select_use(atom/target) . = ..() @@ -340,9 +334,6 @@ callback = CALLBACK(src, PROC_REF(check_locker), locker)) /obj/item/mod/module/magnet/on_deactivation(display_message = TRUE, deleting = FALSE) - . = ..() - if(!.) - return if(istype(mod.wearer.pulling, /obj/structure/closet)) mod.wearer.stop_pulling() @@ -370,6 +361,7 @@ incompatible_modules = list(/obj/item/mod/module/ash_accretion) overlay_state_inactive = "module_ash" use_mod_colors = TRUE + required_slots = list(ITEM_SLOT_OCLOTHING|ITEM_SLOT_ICLOTHING) /// How many tiles we can travel to max out the armor. var/max_traveled_tiles = 10 /// How many tiles we traveled through. @@ -423,9 +415,8 @@ UnregisterSignal(mod.wearer, COMSIG_MOVABLE_MOVED) if(!traveled_tiles) return - var/list/parts = mod.mod_parts + mod var/datum/armor/to_remove = get_armor_by_type(armor_mod) - for(var/obj/item/part as anything in parts) + for(var/obj/item/part as anything in mod.get_parts(all = TRUE)) part.set_armor(part.get_armor().subtract_other_armor(to_remove.generate_new_with_multipliers(list(ARMOR_ALL = traveled_tiles)))) if(traveled_tiles == max_traveled_tiles) mod.slowdown += speed_added @@ -445,8 +436,7 @@ if(traveled_tiles >= max_traveled_tiles) return traveled_tiles++ - var/list/parts = mod.mod_parts + mod - for(var/obj/item/part as anything in parts) + for(var/obj/item/part as anything in mod.get_parts(all = TRUE)) part.set_armor(part.get_armor().add_other_armor(armor_mod)) if(traveled_tiles >= max_traveled_tiles) balloon_alert(mod.wearer, "fully ash covered") @@ -465,8 +455,7 @@ mod.slowdown += actual_speed_added mod.wearer.update_equipment_speed_mods() traveled_tiles-- - var/list/parts = mod.mod_parts + mod - for(var/obj/item/part as anything in parts) + for(var/obj/item/part as anything in mod.get_parts(all = TRUE)) part.set_armor(part.get_armor().subtract_other_armor(armor_mod)) if(traveled_tiles <= 0) balloon_alert(mod.wearer, "ran out of ash!") @@ -482,6 +471,7 @@ use_energy_cost = DEFAULT_CHARGE_DRAIN * 3 incompatible_modules = list(/obj/item/mod/module/sphere_transform) cooldown_time = 1.25 SECONDS + required_slots = list(ITEM_SLOT_OCLOTHING|ITEM_SLOT_ICLOTHING, ITEM_SLOT_HEAD|ITEM_SLOT_MASK) /// Time it takes us to complete the animation. var/animate_time = 0.25 SECONDS /// List of traits to add/remove from our subject as needed. @@ -492,13 +482,13 @@ TRAIT_NO_SLIP_ALL, ) -/obj/item/mod/module/sphere_transform/on_activation() +/obj/item/mod/module/sphere_transform/activate() if(!mod.wearer.has_gravity()) balloon_alert(mod.wearer, "no gravity!") return FALSE - . = ..() - if(!.) - return + return ..() + +/obj/item/mod/module/sphere_transform/on_activation() playsound(src, 'sound/items/modsuit/ballin.ogg', 100, TRUE) mod.wearer.add_filter("mod_ball", 1, alpha_mask_filter(icon = icon('icons/mob/clothing/modsuit/mod_modules.dmi', "ball_mask"), flags = MASK_INVERSE)) mod.wearer.add_filter("mod_blur", 2, angular_blur_filter(size = 15)) @@ -513,9 +503,6 @@ RegisterSignal(mod.wearer, COMSIG_MOB_STATCHANGE, PROC_REF(on_statchange)) /obj/item/mod/module/sphere_transform/on_deactivation(display_message = TRUE, deleting = FALSE) - . = ..() - if(!.) - return if(!deleting) playsound(src, 'sound/items/modsuit/ballin.ogg', 100, TRUE, frequency = -1) mod.wearer.base_pixel_y += 4 @@ -528,7 +515,7 @@ mod.wearer.remove_movespeed_modifier(/datum/movespeed_modifier/sphere) UnregisterSignal(mod.wearer, COMSIG_MOB_STATCHANGE) -/obj/item/mod/module/sphere_transform/on_use() +/obj/item/mod/module/sphere_transform/used() if(!lavaland_equipment_pressure_check(get_turf(src))) balloon_alert(mod.wearer, "too much pressure!") playsound(src, 'sound/weapons/gun/general/dry_fire.ogg', 25, TRUE) @@ -550,14 +537,14 @@ animate(mod.wearer) //stop the animation mod.wearer.SpinAnimation(1.5) //start it back again if(!mod.wearer.has_gravity()) - on_deactivation() //deactivate in no grav + deactivate() //deactivate in no grav /obj/item/mod/module/sphere_transform/proc/on_statchange(datum/source) SIGNAL_HANDLER if(!mod.wearer.stat) return - on_deactivation() + deactivate() /obj/projectile/bullet/mining_bomb name = "mining bomb" diff --git a/code/modules/mod/modules/modules_timeline.dm b/code/modules/mod/modules/modules_timeline.dm index 4e4d751065c71..522ddf57501d1 100644 --- a/code/modules/mod/modules/modules_timeline.dm +++ b/code/modules/mod/modules/modules_timeline.dm @@ -28,9 +28,6 @@ UnregisterSignal(mod, COMSIG_MOD_MODULE_REMOVAL) /obj/item/mod/module/eradication_lock/on_use() - . = ..() - if(!.) - return true_owner_ckey = mod.wearer.ckey balloon_alert(mod.wearer, "user remembered") drain_power(use_energy_cost) @@ -65,11 +62,9 @@ use_energy_cost = DEFAULT_CHARGE_DRAIN * 5 incompatible_modules = list(/obj/item/mod/module/rewinder) cooldown_time = 20 SECONDS + required_slots = list(ITEM_SLOT_BACK) /obj/item/mod/module/rewinder/on_use() - . = ..() - if(!.) - return balloon_alert(mod.wearer, "anchor point set") playsound(src, 'sound/items/modsuit/time_anchor_set.ogg', 50, TRUE) //stops all mods from triggering during rewinding @@ -109,16 +104,17 @@ use_energy_cost = DEFAULT_CHARGE_DRAIN * 5 incompatible_modules = list(/obj/item/mod/module/timestopper) cooldown_time = 60 SECONDS + required_slots = list(ITEM_SLOT_BACK) ///The current timestop in progress. var/obj/effect/timestop/channelled/timestop -/obj/item/mod/module/timestopper/on_use() - . = ..() - if(!.) - return +/obj/item/mod/module/timestopper/used() if(timestop) mod.balloon_alert(mod.wearer, "already freezing time!") - return + return FALSE + return ..() + +/obj/item/mod/module/timestopper/on_use() //stops all mods from triggering during timestop- including timestop itself for(var/obj/item/mod/module/module as anything in mod.modules) RegisterSignal(module, COMSIG_MODULE_TRIGGERED, PROC_REF(on_module_triggered)) @@ -157,18 +153,18 @@ incompatible_modules = list(/obj/item/mod/module/timeline_jumper) cooldown_time = 5 SECONDS allow_flags = MODULE_ALLOW_PHASEOUT + required_slots = list(ITEM_SLOT_BACK) ///The dummy for phasing from this module, the wearer is phased out while this exists. var/obj/effect/dummy/phased_mob/chrono/phased_mob -/obj/item/mod/module/timeline_jumper/on_use() - . = ..() - if(!.) - return +/obj/item/mod/module/timeline_jumper/used() var/area/noteleport_check = get_area(mod.wearer) if(noteleport_check && noteleport_check.area_flags & NOTELEPORT) to_chat(mod.wearer, span_danger("Some dull, universal force is between you and the [phased_mob ? "current timeline" : "stream between timelines"].")) return FALSE + return ..() +/obj/item/mod/module/timeline_jumper/on_use() if(!phased_mob) //phasing out mod.visible_message(span_warning("[mod.wearer] leaps out of the timeline!")) @@ -210,6 +206,7 @@ use_energy_cost = DEFAULT_CHARGE_DRAIN * 5 incompatible_modules = list(/obj/item/mod/module/tem) cooldown_time = 0.5 SECONDS + required_slots = list(ITEM_SLOT_BACK) ///Reference to the chrono field being controlled by this module var/obj/structure/chrono_field/field = null ///Where the chronofield maker was when the field went up diff --git a/code/modules/mod/modules/modules_visor.dm b/code/modules/mod/modules/modules_visor.dm index e8656fe92331a..4527fa631a65c 100644 --- a/code/modules/mod/modules/modules_visor.dm +++ b/code/modules/mod/modules/modules_visor.dm @@ -9,15 +9,13 @@ active_power_cost = DEFAULT_CHARGE_DRAIN * 0.3 incompatible_modules = list(/obj/item/mod/module/visor) cooldown_time = 0.5 SECONDS + required_slots = list(ITEM_SLOT_HEAD|ITEM_SLOT_EYES|ITEM_SLOT_MASK) /// The HUD type given by the visor. var/hud_type /// The traits given by the visor. var/list/visor_traits = list() /obj/item/mod/module/visor/on_activation() - . = ..() - if(!.) - return if(hud_type) var/datum/atom_hud/hud = GLOB.huds[hud_type] hud.show_to(mod.wearer) @@ -26,9 +24,6 @@ mod.wearer.update_sight() /obj/item/mod/module/visor/on_deactivation(display_message = TRUE, deleting = FALSE) - . = ..() - if(!.) - return if(hud_type) var/datum/atom_hud/hud = GLOB.huds[hud_type] hud.hide_from(mod.wearer) diff --git a/code/modules/modular_computers/computers/item/computer.dm b/code/modules/modular_computers/computers/item/computer.dm index ba295d4509309..1ece8577d3c6b 100644 --- a/code/modules/modular_computers/computers/item/computer.dm +++ b/code/modules/modular_computers/computers/item/computer.dm @@ -12,13 +12,14 @@ max_integrity = 100 armor_type = /datum/armor/item_modular_computer light_system = OVERLAY_LIGHT_DIRECTIONAL + interaction_flags_mouse_drop = NEED_HANDS | ALLOW_RESTING ///The ID currently stored in the computer. var/obj/item/card/id/computer_id_slot ///The disk in this PDA. If set, this will be inserted on Initialize. var/obj/item/computer_disk/inserted_disk ///The power cell the computer uses to run on. - var/obj/item/stock_parts/cell/internal_cell = /obj/item/stock_parts/cell + var/obj/item/stock_parts/power_store/internal_cell = /obj/item/stock_parts/power_store/cell ///A pAI currently loaded into the modular computer. var/obj/item/pai_card/inserted_pai ///Does the console update the crew manifest when the ID is removed? @@ -74,9 +75,9 @@ var/comp_light_color = COLOR_WHITE ///Power usage when the computer is open (screen is active) and can be interacted with. - var/base_active_power_usage = 125 + var/base_active_power_usage = 2 WATTS ///Power usage when the computer is idle and screen is off. - var/base_idle_power_usage = 5 + var/base_idle_power_usage = 1 WATTS // Modular computers can run on various devices. Each DEVICE (Laptop, Console & Tablet) // must have it's own DMI file. Icon states must be called exactly the same in all files, but may look differently @@ -334,11 +335,9 @@ update_appearance() return TRUE -/obj/item/modular_computer/MouseDrop(obj/over_object, src_location, over_location) - var/mob/M = usr - if((!istype(over_object, /atom/movable/screen)) && usr.can_perform_action(src)) - return attack_self(M) - return ..() +/obj/item/modular_computer/mouse_drop_dragged(atom/over_object, mob/user) + if(!istype(over_object, /atom/movable/screen)) + return attack_self(user) /obj/item/modular_computer/attack_ai(mob/user) return attack_self(user) @@ -397,6 +396,9 @@ . += "Its identification card slot is currently occupied." . += span_info("Alt-click [src] to eject the identification card.") + if(internal_cell) + . += span_info("Right-click it with a screwdriver to eject the [internal_cell]") + /obj/item/modular_computer/examine_more(mob/user) . = ..() . += "Storage capacity: [used_capacity]/[max_capacity]GQ" @@ -470,10 +472,7 @@ update_appearance(UPDATE_ICON) return ..() -/obj/item/modular_computer/CtrlShiftClick(mob/user) - . = ..() - if(.) - return +/obj/item/modular_computer/click_ctrl_shift(mob/user) if(!inserted_disk) return user.put_in_hands(inserted_disk) @@ -481,7 +480,10 @@ playsound(src, 'sound/machines/card_slide.ogg', 50) /obj/item/modular_computer/proc/turn_on(mob/user, open_ui = TRUE) - var/issynth = HAS_SILICON_ACCESS(user) // Robots and AIs get different activation messages. + var/issynth = FALSE // Robots and AIs get different activation messages. + if(user) + issynth = HAS_SILICON_ACCESS(user) + if(atom_integrity <= integrity_failure * max_integrity) if(user) if(issynth) @@ -785,87 +787,6 @@ return name = "[saved_identification] ([saved_job])" -/obj/item/modular_computer/attackby(obj/item/attacking_item, mob/user, params) - // Check for ID first - if(isidcard(attacking_item) && InsertID(attacking_item, user)) - return - - // Check for cash next - if(computer_id_slot && iscash(attacking_item)) - var/obj/item/card/id/inserted_id = computer_id_slot.GetID() - if(inserted_id) - inserted_id.attackby(attacking_item, user) // If we do, try and put that attacking object in - return - - // Inserting a pAI - if(istype(attacking_item, /obj/item/pai_card) && insert_pai(user, attacking_item)) - return - - if(istype(attacking_item, /obj/item/stock_parts/cell)) - if(ismachinery(physical)) - return - if(internal_cell) - to_chat(user, span_warning("You try to connect \the [attacking_item] to \the [src], but its connectors are occupied.")) - return - if(user && !user.transferItemToLoc(attacking_item, src)) - return - internal_cell = attacking_item - to_chat(user, span_notice("You plug \the [attacking_item] to \the [src].")) - return - - if(istype(attacking_item, /obj/item/photo)) - var/obj/item/photo/attacking_photo = attacking_item - if(store_file(new /datum/computer_file/picture(attacking_photo.picture))) - balloon_alert(user, "photo scanned") - else - balloon_alert(user, "no space!") - return - - // Check if any Applications need it - for(var/datum/computer_file/item_holding_app as anything in stored_files) - if(item_holding_app.application_attackby(attacking_item, user)) - return - - if(istype(attacking_item, /obj/item/paper)) - if(stored_paper >= max_paper) - balloon_alert(user, "no more room!") - return - if(!user.temporarilyRemoveItemFromInventory(attacking_item)) - return FALSE - balloon_alert(user, "inserted paper") - qdel(attacking_item) - stored_paper++ - return - if(istype(attacking_item, /obj/item/paper_bin)) - var/obj/item/paper_bin/bin = attacking_item - if(bin.total_paper <= 0) - balloon_alert(user, "empty bin!") - return - var/papers_added //just to keep track - while((bin.total_paper > 0) && (stored_paper < max_paper)) - papers_added++ - stored_paper++ - bin.remove_paper() - if(!papers_added) - return - balloon_alert(user, "inserted paper") - to_chat(user, span_notice("Added in [papers_added] new sheets. You now have [stored_paper] / [max_paper] printing paper stored.")) - bin.update_appearance() - return - - // Insert a data disk - if(istype(attacking_item, /obj/item/computer_disk)) - if(inserted_disk) - user.put_in_hands(inserted_disk) - balloon_alert(user, "disks swapped") - if(!user.transferItemToLoc(attacking_item, src)) - return - inserted_disk = attacking_item - playsound(src, 'sound/machines/card_slide.ogg', 50) - return - - return ..() - /obj/item/modular_computer/screwdriver_act_secondary(mob/living/user, obj/item/tool) . = ..() if(internal_cell) @@ -900,6 +821,112 @@ update_appearance() return ITEM_INTERACT_SUCCESS +/obj/item/modular_computer/item_interaction(mob/living/user, obj/item/tool, list/modifiers) + if(isidcard(tool)) + return InsertID(tool, user) ? ITEM_INTERACT_SUCCESS : ITEM_INTERACT_BLOCKING + + if(iscash(tool)) + return money_act(user, tool) + + if(istype(tool, /obj/item/pai_card)) + return pai_act(user, tool) + + if(istype(tool, /obj/item/stock_parts/power_store/cell)) + return cell_act(user, tool) + + if(istype(tool, /obj/item/photo)) + return photo_act(user, tool) + + // Check if any Applications need our item + for(var/datum/computer_file/item_holding_app as anything in stored_files) + var/app_return = item_holding_app.application_item_interaction(user, tool, modifiers) + if(app_return) + return app_return + + if(istype(tool, /obj/item/paper)) + return paper_act(user, tool) + + if(istype(tool, /obj/item/paper_bin)) + return paper_bin_act(user, tool) + + if(istype(tool, /obj/item/computer_disk)) + return computer_disk_act(user, tool) + +/obj/item/modular_computer/proc/money_act(mob/user, obj/item/money) + var/obj/item/card/id/inserted_id = computer_id_slot?.GetID() + if(!inserted_id) + balloon_alert(user, "no ID!") + return ITEM_INTERACT_BLOCKING + return inserted_id.insert_money(money, user) ? ITEM_INTERACT_SUCCESS : ITEM_INTERACT_BLOCKING + +/obj/item/modular_computer/proc/pai_act(mob/user, obj/item/pai_card/card) + if(inserted_pai) + return ITEM_INTERACT_BLOCKING + if(!user.transferItemToLoc(card, src)) + return ITEM_INTERACT_BLOCKING + inserted_pai = card + balloon_alert(user, "inserted pai") + if(inserted_pai.pai) + inserted_pai.pai.give_messenger_ability() + update_appearance(UPDATE_ICON) + return ITEM_INTERACT_SUCCESS + +/obj/item/modular_computer/proc/cell_act(mob/user, obj/item/stock_parts/power_store/cell/new_cell) + if(ismachinery(physical)) + return ITEM_INTERACT_BLOCKING + if(internal_cell) + to_chat(user, span_warning("You try to connect \the [new_cell] to \the [src], but its connectors are occupied.")) + return ITEM_INTERACT_BLOCKING + if(!user.transferItemToLoc(new_cell, src)) + return ITEM_INTERACT_BLOCKING + internal_cell = new_cell + to_chat(user, span_notice("You plug \the [new_cell] to \the [src].")) + return ITEM_INTERACT_SUCCESS + +/obj/item/modular_computer/proc/photo_act(mob/user, obj/item/photo/scanned_photo) + if(!store_file(new /datum/computer_file/picture(scanned_photo.picture))) + balloon_alert(user, "no space!") + return ITEM_INTERACT_BLOCKING + balloon_alert(user, "photo scanned") + return ITEM_INTERACT_SUCCESS + +/obj/item/modular_computer/proc/paper_act(mob/user, obj/item/paper/new_paper) + if(stored_paper >= max_paper) + balloon_alert(user, "no more room!") + return ITEM_INTERACT_BLOCKING + if(!user.temporarilyRemoveItemFromInventory(new_paper)) + return ITEM_INTERACT_BLOCKING + balloon_alert(user, "inserted paper") + qdel(new_paper) + stored_paper++ + return ITEM_INTERACT_SUCCESS + +/obj/item/modular_computer/proc/paper_bin_act(mob/user, obj/item/paper_bin/bin) + if(bin.total_paper <= 0) + balloon_alert(user, "empty bin!") + return ITEM_INTERACT_BLOCKING + var/papers_added //just to keep track + while((bin.total_paper > 0) && (stored_paper < max_paper)) + papers_added++ + stored_paper++ + bin.remove_paper() + if(!papers_added) + return ITEM_INTERACT_BLOCKING + balloon_alert(user, "inserted paper") + to_chat(user, span_notice("Added in [papers_added] new sheets. You now have [stored_paper] / [max_paper] printing paper stored.")) + bin.update_appearance() + return ITEM_INTERACT_SUCCESS + +/obj/item/modular_computer/proc/computer_disk_act(mob/user, obj/item/computer_disk/disk) + if(!user.transferItemToLoc(disk, src)) + return ITEM_INTERACT_BLOCKING + if(inserted_disk) + user.put_in_hands(inserted_disk) + balloon_alert(user, "disks swapped") + inserted_disk = disk + playsound(src, 'sound/machines/card_slide.ogg', 50) + return ITEM_INTERACT_SUCCESS + /obj/item/modular_computer/atom_deconstruct(disassembled = TRUE) remove_pai() eject_aicard() @@ -934,18 +961,6 @@ /obj/item/modular_computer/proc/get_messenger_ending() return "Sent from my PDA" -/obj/item/modular_computer/proc/insert_pai(mob/user, obj/item/pai_card/card) - if(inserted_pai) - return FALSE - if(!user.transferItemToLoc(card, src)) - return FALSE - inserted_pai = card - balloon_alert(user, "inserted pai") - if(inserted_pai.pai) - inserted_pai.pai.give_messenger_ability() - update_appearance(UPDATE_ICON) - return TRUE - /obj/item/modular_computer/proc/remove_pai(mob/user) if(!inserted_pai) return FALSE @@ -960,6 +975,12 @@ update_appearance(UPDATE_ICON) return TRUE +/// Get all stored files, including external disk files optionaly +/obj/item/modular_computer/proc/get_files(include_disk_files = FALSE) + if(!include_disk_files || !inserted_disk) + return stored_files + return stored_files + inserted_disk.stored_files + /** * Debug ModPC * Used to spawn all programs for Create and Destroy unit test. diff --git a/code/modules/modular_computers/computers/item/computer_circuit.dm b/code/modules/modular_computers/computers/item/computer_circuit.dm index 2a6a0d70be971..35caaf3c85107 100644 --- a/code/modules/modular_computers/computers/item/computer_circuit.dm +++ b/code/modules/modular_computers/computers/item/computer_circuit.dm @@ -5,7 +5,9 @@ var/obj/item/modular_computer/computer ///Turns the PC on/off var/datum/port/input/on_off - ///When set, will print a piece of paper with the value as text. + ///Determines the text to be printed + var/datum/port/input/print_text + /// Print when triggered var/datum/port/input/print ///Sent when turned on @@ -18,6 +20,7 @@ var/datum/port/input/red var/datum/port/input/green var/datum/port/input/blue + var/datum/port/input/set_color /obj/item/circuit_component/modpc/register_shell(atom/movable/shell) . = ..() @@ -39,10 +42,11 @@ * I hope you're cool with me doing it here. */ if(computer.has_light && isnull(lights)) - lights = add_input_port("Toggle Lights", PORT_TYPE_SIGNAL) + lights = add_input_port("Toggle Lights", PORT_TYPE_SIGNAL, trigger = PROC_REF(toggle_flashlight)) red = add_input_port("Red", PORT_TYPE_NUMBER) green = add_input_port("Green", PORT_TYPE_NUMBER) blue = add_input_port("Blue", PORT_TYPE_NUMBER) + set_color = add_input_port("Set Color", PORT_TYPE_SIGNAL, trigger = PROC_REF(set_flashlight_color)) /obj/item/circuit_component/modpc/unregister_shell(atom/movable/shell) if(computer) @@ -51,45 +55,37 @@ return ..() /obj/item/circuit_component/modpc/populate_ports() - on_off = add_input_port("Turn On/Off", PORT_TYPE_SIGNAL) - print = add_input_port("Print Text", PORT_TYPE_STRING) + on_off = add_input_port("Turn On/Off", PORT_TYPE_SIGNAL, trigger = PROC_REF(toggle_power)) + print_text = add_input_port("Print Text", PORT_TYPE_STRING) + print = add_input_port("Print", PORT_TYPE_SIGNAL, trigger = PROC_REF(print_text)) is_on = add_output_port("Turned On", PORT_TYPE_SIGNAL) - is_on = add_output_port("Shut Down", PORT_TYPE_SIGNAL) + is_off = add_output_port("Shut Down", PORT_TYPE_SIGNAL) /obj/item/circuit_component/modpc/pre_input_received(datum/port/input/port) if(isnull(computer)) return - if(COMPONENT_TRIGGERED_BY(print, port)) + if(COMPONENT_TRIGGERED_BY(print_text, port)) print.set_value(html_encode(trim(print.value, MAX_PAPER_LENGTH))) - else if(COMPONENT_TRIGGERED_BY(red, port)) - red.set_value(clamp(red.value, 0, 255)) - else if(COMPONENT_TRIGGERED_BY(blue, port)) - blue.set_value(clamp(blue.value, 0, 255)) - else if(COMPONENT_TRIGGERED_BY(green, port)) - green.set_value(clamp(green.value, 0, 255)) - -/obj/item/circuit_component/modpc/input_received(datum/port/input/port) - if(isnull(computer)) - return - if(COMPONENT_TRIGGERED_BY(on_off, port)) - if(computer.enabled) - INVOKE_ASYNC(computer, TYPE_PROC_REF(/obj/item/modular_computer, shutdown_computer)) - else - INVOKE_ASYNC(computer, TYPE_PROC_REF(/obj/item/modular_computer, turn_on)) - return - if(!computer.enabled) - return +/obj/item/circuit_component/modpc/proc/print_text(datum/source) + if(computer.enabled) + computer.print_text(print_text.value) + +/obj/item/circuit_component/modpc/proc/toggle_power(datum/source) + if(computer.enabled) + INVOKE_ASYNC(computer, TYPE_PROC_REF(/obj/item/modular_computer, shutdown_computer)) + else + INVOKE_ASYNC(computer, TYPE_PROC_REF(/obj/item/modular_computer, turn_on)) - if(COMPONENT_TRIGGERED_BY(print, port)) - computer.print_text(print.value) +/obj/item/circuit_component/modpc/proc/toggle_flashlight(datum/source) + computer.toggle_flashlight() - if(lights) - if(COMPONENT_TRIGGERED_BY(lights, port)) - computer.toggle_flashlight() - if(COMPONENT_TRIGGERED_BY(red, port) || COMPONENT_TRIGGERED_BY(green, port) || COMPONENT_TRIGGERED_BY(blue, port)) - computer.set_flashlight_color(rgb(red.value || 0, green.value || 0, blue.value || 0)) +/obj/item/circuit_component/modpc/proc/set_flashlight_color(datum/source) + red.set_value(clamp(red.value, 0, 255)) + blue.set_value(clamp(blue.value, 0, 255)) + green.set_value(clamp(green.value, 0, 255)) + computer.set_flashlight_color(rgb(red.value || 0, green.value || 0, blue.value || 0)) /obj/item/circuit_component/modpc/proc/computer_on(datum/source, mob/user) SIGNAL_HANDLER diff --git a/code/modules/modular_computers/computers/item/computer_files.dm b/code/modules/modular_computers/computers/item/computer_files.dm index 6b6fbd179f21f..b0ae073bdd69a 100644 --- a/code/modules/modular_computers/computers/item/computer_files.dm +++ b/code/modules/modular_computers/computers/item/computer_files.dm @@ -39,7 +39,7 @@ stored_files.Remove(file_removing) used_capacity -= file_removing.size SEND_SIGNAL(src, COMSIG_MODULAR_COMPUTER_FILE_DELETE, file_removing) - SEND_SIGNAL(file_removing, COMSIG_COMPUTER_FILE_DELETE) + SEND_SIGNAL(file_removing, COMSIG_COMPUTER_FILE_DELETE, src) qdel(file_removing) return TRUE diff --git a/code/modules/modular_computers/computers/item/disks/maintenance_disks.dm b/code/modules/modular_computers/computers/item/disks/maintenance_disks.dm index 430c101668de8..0fb2ccc2eef91 100644 --- a/code/modules/modular_computers/computers/item/disks/maintenance_disks.dm +++ b/code/modules/modular_computers/computers/item/disks/maintenance_disks.dm @@ -25,3 +25,6 @@ /obj/item/computer_disk/maintenance/theme/Initialize(mapload) starting_programs = list(pick(subtypesof(/datum/computer_file/program/maintenance/theme))) return ..() + +/obj/item/computer_disk/maintenance/cool_sword + starting_programs = list(/datum/computer_file/program/maintenance/cool_sword) diff --git a/code/modules/modular_computers/computers/item/laptop.dm b/code/modules/modular_computers/computers/item/laptop.dm index b55fb6d2ee68a..5053b6c6b2cbe 100644 --- a/code/modules/modular_computers/computers/item/laptop.dm +++ b/code/modules/modular_computers/computers/item/laptop.dm @@ -2,7 +2,7 @@ name = "laptop" desc = "A portable laptop computer." - icon = 'icons/obj/modular_laptop.dmi' + icon = 'icons/obj/devices/modular_laptop.dmi' icon_state = "laptop-closed" icon_state_powered = "laptop" icon_state_unpowered = "laptop-off" @@ -11,6 +11,8 @@ hardware_flag = PROGRAM_LAPTOP max_idle_programs = 3 w_class = WEIGHT_CLASS_NORMAL + interaction_flags_mouse_drop = NEED_HANDS + // No running around with open laptops in hands. item_flags = SLOWS_WHILE_IN_HAND @@ -58,20 +60,15 @@ try_toggle_open(usr) -/obj/item/modular_computer/laptop/MouseDrop(obj/over_object, src_location, over_location) - . = ..() - if(over_object == usr || over_object == src) - try_toggle_open(usr) +/obj/item/modular_computer/laptop/mouse_drop_dragged(atom/over_object, mob/user, src_location, over_location, params) + if(over_object == user || over_object == src) + try_toggle_open(user) return if(istype(over_object, /atom/movable/screen/inventory/hand)) var/atom/movable/screen/inventory/hand/H = over_object - var/mob/M = usr - - if(M.stat != CONSCIOUS || HAS_TRAIT(M, TRAIT_HANDS_BLOCKED)) - return - if(!isturf(loc) || !Adjacent(M)) + if(!isturf(loc)) return - M.put_in_hand(src, H.held_index) + user.put_in_hand(src, H.held_index) /obj/item/modular_computer/laptop/attack_hand(mob/user, list/modifiers) . = ..() diff --git a/code/modules/modular_computers/computers/item/pda.dm b/code/modules/modular_computers/computers/item/pda.dm index cbed5bef57f45..f1fced454e4d3 100644 --- a/code/modules/modular_computers/computers/item/pda.dm +++ b/code/modules/modular_computers/computers/item/pda.dm @@ -1,6 +1,6 @@ /obj/item/modular_computer/pda name = "pda" - icon = 'icons/obj/modular_pda.dmi' + icon = 'icons/obj/devices/modular_pda.dmi' icon_state = "pda" worn_icon_state = "nothing" base_icon_state = "tablet" @@ -46,7 +46,7 @@ /obj/item/lipstick, /obj/item/flashlight/pen, /obj/item/reagent_containers/hypospray/medipen, - /obj/item/clothing/mask/cigarette, + /obj/item/cigarette, ) /obj/item/modular_computer/pda/Initialize(mapload) @@ -140,30 +140,29 @@ return . || NONE -/obj/item/modular_computer/pda/attackby(obj/item/attacking_item, mob/user, params) +/obj/item/modular_computer/pda/item_interaction(mob/living/user, obj/item/tool, list/modifiers) . = ..() - - if(!is_type_in_list(attacking_item, contained_item)) - return - if(attacking_item.w_class >= WEIGHT_CLASS_SMALL) // Anything equal to or larger than small won't work + if(.) + return . + if(!is_type_in_list(tool, contained_item)) + return NONE + if(tool.w_class >= WEIGHT_CLASS_SMALL) // Anything equal to or larger than small won't work user.balloon_alert(user, "too big!") - return + return ITEM_INTERACT_BLOCKING + if(!user.transferItemToLoc(tool, src)) + return ITEM_INTERACT_BLOCKING if(inserted_item) - balloon_alert(user, "no room!") - return - if(!user.transferItemToLoc(attacking_item, src)) - return - balloon_alert(user, "inserted [attacking_item]") - inserted_item = attacking_item - playsound(src, 'sound/machines/pda_button1.ogg', 50, TRUE) + swap_pen(user, tool) + else + balloon_alert(user, "inserted [tool]") + inserted_item = tool + playsound(src, 'sound/machines/pda_button1.ogg', 50, TRUE) + return ITEM_INTERACT_SUCCESS -/obj/item/modular_computer/pda/CtrlClick(mob/user) - . = ..() - if(.) - return - +/obj/item/modular_computer/pda/item_ctrl_click(mob/user) remove_pen(user) + return CLICK_ACTION_SUCCESS ///Finds how hard it is to send a virus to this tablet, checking all programs downloaded. /obj/item/modular_computer/pda/proc/get_detomatix_difficulty() @@ -186,6 +185,14 @@ update_appearance() playsound(src, 'sound/machines/pda_button2.ogg', 50, TRUE) +/obj/item/modular_computer/pda/proc/swap_pen(mob/user, obj/item/tool) + if(inserted_item) + balloon_alert(user, "swapped pens") + user.put_in_hands(inserted_item) + inserted_item = tool + update_appearance() + playsound(src, 'sound/machines/pda_button1.ogg', 50, TRUE) + /obj/item/modular_computer/pda/proc/explode(mob/target, mob/bomber, from_message_menu = FALSE) var/turf/current_turf = get_turf(src) @@ -376,7 +383,7 @@ return robotact qdel(robotact) robotact = null - CRASH("Cyborg [silicon_owner]'s tablet hard drive rejected recieving a new copy of the self-manage app. To fix, check the hard drive's space remaining. Please make a bug report about this.") + CRASH("Cyborg [silicon_owner]'s tablet hard drive rejected receiving a new copy of the self-manage app. To fix, check the hard drive's space remaining. Please make a bug report about this.") //Makes the light settings reflect the borg's headlamp settings /obj/item/modular_computer/pda/silicon/cyborg/ui_data(mob/user) diff --git a/code/modules/modular_computers/computers/item/processor.dm b/code/modules/modular_computers/computers/item/processor.dm index 3a8f58576c945..ad5d36a87cdd4 100644 --- a/code/modules/modular_computers/computers/item/processor.dm +++ b/code/modules/modular_computers/computers/item/processor.dm @@ -8,7 +8,7 @@ icon_state_unpowered = null icon_state_menu = null hardware_flag = NONE - internal_cell = /obj/item/stock_parts/cell/crap + internal_cell = /obj/item/stock_parts/power_store/cell/crap ///The modular computer MACHINE that hosts us. var/obj/machinery/modular_computer/machinery_computer diff --git a/code/modules/modular_computers/computers/item/role_tablet_presets.dm b/code/modules/modular_computers/computers/item/role_tablet_presets.dm index ee6c9ee68f0af..44392c8c62de9 100644 --- a/code/modules/modular_computers/computers/item/role_tablet_presets.dm +++ b/code/modules/modular_computers/computers/item/role_tablet_presets.dm @@ -97,6 +97,7 @@ /datum/computer_file/program/crew_manifest, /datum/computer_file/program/robocontrol, /datum/computer_file/program/science, + /datum/computer_file/program/scipaper_program, /datum/computer_file/program/status, /datum/computer_file/program/signal_commander, ) @@ -187,6 +188,7 @@ starting_programs = list( /datum/computer_file/program/atmosscan, /datum/computer_file/program/science, + /datum/computer_file/program/scipaper_program, /datum/computer_file/program/signal_commander, ) diff --git a/code/modules/modular_computers/computers/machinery/console_presets.dm b/code/modules/modular_computers/computers/machinery/console_presets.dm index 0ec80da4bbb29..94ff9439e3b11 100644 --- a/code/modules/modular_computers/computers/machinery/console_presets.dm +++ b/code/modules/modular_computers/computers/machinery/console_presets.dm @@ -33,6 +33,17 @@ /datum/computer_file/program/scipaper_program, ) +/obj/machinery/modular_computer/preset/research/away + name = "old research console" + desc = "An old computer used for writing research papers." + starting_programs = list( + /datum/computer_file/program/scipaper_program, + ) + +/obj/machinery/modular_computer/preset/research/away/Initialize(mapload) + . = ..() + cpu.device_theme = PDA_THEME_RETRO + // ===== COMMAND CONSOLE ===== /obj/machinery/modular_computer/preset/command name = "command console" @@ -137,6 +148,7 @@ starting_programs += /datum/computer_file/program/bounty_board starting_programs += /datum/computer_file/program/budgetorders starting_programs += /datum/computer_file/program/shipping + starting_programs += /datum/computer_file/program/restock_tracker /obj/machinery/modular_computer/preset/cargochat/cargo/setup_starting_software() var/datum/computer_file/program/chatclient/chatprogram = cpu.find_file_by_name("ntnrc_client") diff --git a/code/modules/modular_computers/computers/machinery/modular_computer.dm b/code/modules/modular_computers/computers/machinery/modular_computer.dm index 6f0050534cce7..48cbc57d7455f 100644 --- a/code/modules/modular_computers/computers/machinery/modular_computer.dm +++ b/code/modules/modular_computers/computers/machinery/modular_computer.dm @@ -137,7 +137,7 @@ ///Try to recharge our internal cell if it isn't fully charged. /obj/machinery/modular_computer/process(seconds_per_tick) - var/obj/item/stock_parts/cell/cell = get_cell() + var/obj/item/stock_parts/power_store/cell = get_cell() if(isnull(cell) || cell.percent() >= 100) return charge_cell(idle_power_usage * seconds_per_tick, cell) @@ -154,8 +154,8 @@ /obj/machinery/modular_computer/welder_act(mob/user, obj/item/tool) return CPU_INTERACTABLE(user) ? cpu.welder_act(user, tool) : ..() -/obj/machinery/modular_computer/attackby(obj/item/weapon, mob/living/user) - return (CPU_INTERACTABLE(user) && !user.combat_mode) ? cpu.attackby(weapon, user) : ..() +/obj/machinery/modular_computer/item_interaction(mob/living/user, obj/item/tool, list/modifiers) + return (CPU_INTERACTABLE(user) && !user.combat_mode) ? cpu.item_interaction(user, tool, modifiers) : ..() /obj/machinery/modular_computer/attacked_by(obj/item/attacking_item, mob/living/user) return CPU_INTERACTABLE(user) ? cpu.attacked_by(attacking_item, user) : ..() diff --git a/code/modules/modular_computers/file_system/computer_file.dm b/code/modules/modular_computers/file_system/computer_file.dm index 7b4fc67609119..05f3272d83346 100644 --- a/code/modules/modular_computers/file_system/computer_file.dm +++ b/code/modules/modular_computers/file_system/computer_file.dm @@ -66,9 +66,9 @@ /datum/computer_file/proc/on_examine(obj/item/modular_computer/source, mob/user) return null -/// Called when attacking a tablet with an item, checking if any application uses it. Return TRUE to cancel the attack chain. -/datum/computer_file/proc/application_attackby(obj/item/attacking_item, mob/living/user) - return FALSE +/// Called on modular computer item_interaction, checking if any application uses the given item. Uses the item interaction chain flags. +/datum/computer_file/proc/application_item_interaction(mob/living/user, obj/item/tool, list/modifiers) + return NONE /** * Implement this when your program has an object that the user can eject. diff --git a/code/modules/modular_computers/file_system/programs/airestorer.dm b/code/modules/modular_computers/file_system/programs/airestorer.dm index 57c9e73007218..0fe930cfd072f 100644 --- a/code/modules/modular_computers/file_system/programs/airestorer.dm +++ b/code/modules/modular_computers/file_system/programs/airestorer.dm @@ -57,22 +57,22 @@ return TRUE -/datum/computer_file/program/ai_restorer/application_attackby(obj/item/attacking_item, mob/living/user) - if(!computer) - return FALSE - if(!istype(attacking_item, /obj/item/aicard)) - return FALSE +/datum/computer_file/program/ai_restorer/application_item_interaction(mob/living/user, obj/item/tool, list/modifiers) + if(istype(tool, /obj/item/aicard)) + return aicard_act(user, tool) +/datum/computer_file/program/ai_restorer/proc/aicard_act(mob/living/user, obj/item/aicard/used_aicard) + if(!computer) + return NONE if(stored_card) - to_chat(user, span_warning("You try to insert \the [attacking_item] into \the [computer.name], but the slot is occupied.")) - return FALSE - if(user && !user.transferItemToLoc(attacking_item, computer)) - return FALSE - - stored_card = attacking_item - to_chat(user, span_notice("You insert \the [attacking_item] into \the [computer.name].")) - - return TRUE + to_chat(user, span_warning("You try to insert \the [used_aicard] into \the [computer.name], but the slot is occupied.")) + return ITEM_INTERACT_BLOCKING + if(!user.transferItemToLoc(used_aicard, computer)) + return ITEM_INTERACT_BLOCKING + + stored_card = used_aicard + to_chat(user, span_notice("You insert \the [used_aicard] into \the [computer.name].")) + return ITEM_INTERACT_SUCCESS /datum/computer_file/program/ai_restorer/try_eject(mob/living/user, forced = FALSE) if(!stored_card) diff --git a/code/modules/modular_computers/file_system/programs/emojipedia.dm b/code/modules/modular_computers/file_system/programs/emojipedia.dm index 6e9bf56a381c8..10be69cc34976 100644 --- a/code/modules/modular_computers/file_system/programs/emojipedia.dm +++ b/code/modules/modular_computers/file_system/programs/emojipedia.dm @@ -14,7 +14,7 @@ /datum/computer_file/program/emojipedia/New() . = ..() // Sort the emoji list so it's easier to find things and we don't have to keep sorting on ui_data since the number of emojis can not change in-game. - emoji_list = sortTim(emoji_list, /proc/cmp_text_asc) + sortTim(emoji_list, /proc/cmp_text_asc) /datum/computer_file/program/emojipedia/ui_static_data(mob_user) var/list/data = list() diff --git a/code/modules/modular_computers/file_system/programs/frontier.dm b/code/modules/modular_computers/file_system/programs/frontier.dm index c41cf642ffb55..c8030287e8943 100644 --- a/code/modules/modular_computers/file_system/programs/frontier.dm +++ b/code/modules/modular_computers/file_system/programs/frontier.dm @@ -8,7 +8,7 @@ program_open_overlay = "research" tgui_id = "NtosScipaper" program_icon = "paper-plane" - download_access = list(ACCESS_ORDNANCE) + download_access = list(ACCESS_ORDNANCE, ACCESS_SCIENCE, ACCESS_AWAY_SCIENCE) var/datum/techweb/linked_techweb /// Unpublished, temporary paper datum. @@ -24,16 +24,19 @@ if(!CONFIG_GET(flag/no_default_techweb_link) && !linked_techweb) CONNECT_TO_RND_SERVER_ROUNDSTART(linked_techweb, computer) -/datum/computer_file/program/scipaper_program/application_attackby(obj/item/attacking_item, mob/living/user) - if(!istype(attacking_item, /obj/item/multitool)) - return FALSE - var/obj/item/multitool/attacking_tool = attacking_item - if(!QDELETED(attacking_tool.buffer) && istype(attacking_tool.buffer, /datum/techweb)) - linked_techweb = attacking_tool.buffer - return TRUE +/datum/computer_file/program/scipaper_program/application_item_interaction(mob/living/user, obj/item/tool, list/modifiers) + if(istype(tool, /obj/item/multitool)) + return multitool_act(user, tool) + +/datum/computer_file/program/scipaper_program/proc/multitool_act(mob/living/user, obj/item/multitool/used_multitool) + if(QDELETED(used_multitool.buffer) || !istype(used_multitool.buffer, /datum/techweb)) + return ITEM_INTERACT_BLOCKING + linked_techweb = used_multitool.buffer + computer.balloon_alert(user, "buffer linked!") + return ITEM_INTERACT_SUCCESS /datum/computer_file/program/scipaper_program/proc/recheck_file_presence() - if(selected_file in computer.stored_files) + if(selected_file in computer.get_files(include_disk_files = TRUE)) return FALSE UnregisterSignal(selected_file, COMSIG_COMPUTER_FILE_DELETE) selected_file = null @@ -92,7 +95,7 @@ data["allowedTiers"] = list() data["allowedPartners"] = list() // Both the file and experiment list are assoc lists. ID as value, display name as keys. - for(var/datum/computer_file/data/ordnance/ordnance_file in computer.stored_files) + for(var/datum/computer_file/data/ordnance/ordnance_file in computer.get_files(include_disk_files = TRUE)) data["fileList"] += list(ordnance_file.filename = ordnance_file.uid) if(selected_file) for (var/possible_experiment in selected_file.possible_experiments) @@ -189,7 +192,7 @@ if(selected_file) UnregisterSignal(selected_file, COMSIG_COMPUTER_FILE_DELETE) paper_to_be.set_experiment() // Clears the paper info. - for(var/datum/computer_file/data/ordnance/ordnance_data in computer.stored_files) + for(var/datum/computer_file/data/ordnance/ordnance_data in computer.get_files(include_disk_files = TRUE)) if(ordnance_data.uid == params["selected_uid"]) selected_file = ordnance_data RegisterSignal(selected_file, COMSIG_COMPUTER_FILE_DELETE, PROC_REF(recheck_file_presence)) diff --git a/code/modules/modular_computers/file_system/programs/maintenance/cool_sword.dm b/code/modules/modular_computers/file_system/programs/maintenance/cool_sword.dm new file mode 100644 index 0000000000000..1a05bf2ceba34 --- /dev/null +++ b/code/modules/modular_computers/file_system/programs/maintenance/cool_sword.dm @@ -0,0 +1,71 @@ +/datum/computer_file/program/maintenance/cool_sword + filename = "cool_sword" + filedesc = "NtOS Cursor Replacer" + power_cell_use = 0 + downloader_category = PROGRAM_CATEGORY_DEVICE + extended_desc = "This program allows you to customize your computer's mouse cursor, \ + but there's only one option, let's be honest. \ + Wear your PDA in your ID slot for it to take effect." + can_run_on_flags = PROGRAM_PDA + tgui_id = "NtosCursor" + program_open_overlay = "generic" + + /// What icon to use for the mouse pointer? + var/sword_icon = 'icons/effects/mouse_pointers/cool_sword.dmi' + +/datum/computer_file/program/maintenance/cool_sword/New() + . = ..() + RegisterSignal(src, COMSIG_COMPUTER_FILE_DELETE, PROC_REF(on_delete)) + +/datum/computer_file/program/maintenance/cool_sword/on_install(datum/computer_file/source, obj/item/modular_computer/computer_installing) + . = ..() + RegisterSignal(computer_installing, COMSIG_ITEM_EQUIPPED, PROC_REF(host_equipped)) + RegisterSignal(computer_installing, COMSIG_ITEM_DROPPED, PROC_REF(host_dropped)) + + if(ismob(computer_installing.loc)) + var/mob/living/computer_guy = computer_installing.loc + var/current_slot = computer_guy.get_slot_by_item(computer_installing) + host_equipped(computer_installing, computer_guy, current_slot) + +/datum/computer_file/program/maintenance/cool_sword/proc/on_delete(datum/source, obj/item/modular_computer/computer_uninstalling) + SIGNAL_HANDLER + + if(ismob(computer_uninstalling.loc)) + host_dropped(computer_uninstalling, computer_uninstalling.loc) + +/datum/computer_file/program/maintenance/cool_sword/proc/host_equipped(datum/source, mob/user, slot) + SIGNAL_HANDLER + + if(slot & ITEM_SLOT_ID) + user.client?.mouse_override_icon = sword_icon + RegisterSignal(user, COMSIG_MOB_LOGIN, PROC_REF(update_mouse), override = TRUE) + RegisterSignal(user, COMSIG_MOB_LOGOUT, PROC_REF(stop_mouse), override = TRUE) + else + // Shouldn't be necessary w/ dropped but just to be safe + user.client?.mouse_override_icon = null + UnregisterSignal(user, list(COMSIG_MOB_LOGIN, COMSIG_MOB_LOGOUT)) + user.update_mouse_pointer() + +/datum/computer_file/program/maintenance/cool_sword/proc/host_dropped(datum/source, mob/user) + SIGNAL_HANDLER + + user.client?.mouse_override_icon = null + UnregisterSignal(user, list(COMSIG_MOB_LOGIN, COMSIG_MOB_LOGOUT)) + user.update_mouse_pointer() + +/datum/computer_file/program/maintenance/cool_sword/proc/update_mouse(mob/source) + SIGNAL_HANDLER + + source.client?.mouse_override_icon = sword_icon + source.update_mouse_pointer() + +/datum/computer_file/program/maintenance/cool_sword/proc/stop_mouse(mob/source) + SIGNAL_HANDLER + + source.canon_client?.mouse_override_icon = null + source.canon_client?.mob?.update_mouse_pointer() + +/datum/computer_file/program/maintenance/cool_sword/ui_static_data(mob/user) + var/list/data = list() + data["dmi"] = list("icon" = sword_icon, "icon_state" = "") + return data diff --git a/code/modules/modular_computers/file_system/programs/maintenance/modsuit.dm b/code/modules/modular_computers/file_system/programs/maintenance/modsuit.dm index 0d094ced4f52a..b2c492d3268f8 100644 --- a/code/modules/modular_computers/file_system/programs/maintenance/modsuit.dm +++ b/code/modules/modular_computers/file_system/programs/maintenance/modsuit.dm @@ -17,12 +17,10 @@ unsync_modsuit() return ..() -/datum/computer_file/program/maintenance/modsuit_control/application_attackby(obj/item/attacking_item, mob/living/user) - . = ..() - if(!istype(attacking_item, /obj/item/mod/control)) - return FALSE - sync_modsuit(attacking_item, user) - return TRUE +/datum/computer_file/program/maintenance/modsuit_control/application_item_interaction(mob/living/user, obj/item/tool, list/modifiers) + if(istype(tool, /obj/item/mod/control)) + sync_modsuit(tool, user) + return ITEM_INTERACT_SUCCESS /datum/computer_file/program/maintenance/modsuit_control/proc/sync_modsuit(obj/item/mod/control/new_modsuit, mob/living/user) if(controlled_suit) diff --git a/code/modules/modular_computers/file_system/programs/messenger/messenger_program.dm b/code/modules/modular_computers/file_system/programs/messenger/messenger_program.dm index 4fc3730ef08e8..4ad633aa94df4 100644 --- a/code/modules/modular_computers/file_system/programs/messenger/messenger_program.dm +++ b/code/modules/modular_computers/file_system/programs/messenger/messenger_program.dm @@ -166,7 +166,8 @@ if("PDA_ringSet") var/mob/living/user = usr var/new_ringtone = tgui_input_text(user, "Enter a new ringtone", "Ringtone", ringtone, encode = FALSE) - if(!in_range(computer, user) || computer.loc != user) + if(!computer.can_interact(user)) + computer.balloon_alert(user, "can't reach!") return FALSE return set_ringtone(new_ringtone, user) @@ -381,6 +382,10 @@ data["sending_virus"] = sending_virus return data +/datum/computer_file/program/messenger/ui_assets(mob/user) + . = ..() + . += get_asset_datum(/datum/asset/spritesheet/chat) + ////////////////////// // MESSAGE HANDLING // ////////////////////// @@ -463,7 +468,7 @@ if(sender && !check_pda_message_against_filter(message, sender)) return null - return message + return emoji_parse(message) /// Sends a message to targets via PDA. When sending to everyone, set `everyone` to true so the message is formatted accordingly /datum/computer_file/program/messenger/proc/send_message(atom/source, message, list/targets, everyone = FALSE) @@ -628,10 +633,8 @@ if(rigged) log_bomber(sender, "sent a rigged PDA message (Name: [fake_name]. Job: [fake_job]) to [english_list(stringified_targets)] [!is_special_character(sender) ? "(SENT BY NON-ANTAG)" : ""]") - message = emoji_parse(message) //already sent- this just shows the sent emoji as one to the sender in the to_chat - // Show it to ghosts - var/ghost_message = span_game_say("[span_name("[source]")] [rigged ? "(as [span_name(fake_name)]) Rigged " : ""]PDA Message --> [span_name("[signal.format_target()]")]: \"[signal.format_message()]\"") + var/ghost_message = span_game_say("[span_name(signal.format_sender())] [rigged ? "(as [span_name(fake_name)]) Rigged " : ""]PDA Message --> [span_name("[signal.format_target()]")]: \"[signal.format_message()]\"") var/list/message_listeners = GLOB.dead_player_list + GLOB.current_observers_list for(var/mob/listener as anything in message_listeners) if(!(get_chat_toggles(listener) & CHAT_GHOSTPDA)) @@ -678,7 +681,7 @@ viewing_messages_of = REF(chat) var/list/mob/living/receievers = list() - if(computer.inserted_pai) + if(computer.inserted_pai && computer.inserted_pai.pai) receievers += computer.inserted_pai.pai if(computer.loc && isliving(computer.loc)) receievers += computer.loc @@ -708,12 +711,11 @@ sender_title = "[sender_title]" var/inbound_message = "[signal.format_message()]" - inbound_message = emoji_parse(inbound_message) var/photo_message = signal.data["photo"] ? " (Photo Attached)" : "" to_chat(messaged_mob, span_infoplain("[icon2html(computer, messaged_mob)] PDA message from [sender_title], \"[inbound_message]\"[photo_message] [reply]")) - SEND_SIGNAL(computer, COMSIG_COMPUTER_RECIEVED_MESSAGE, sender_title, inbound_message, photo_message) + SEND_SIGNAL(computer, COMSIG_COMPUTER_RECEIVED_MESSAGE, sender_title, inbound_message, photo_message) if (alert_able && (!alert_silenced || is_rigged)) computer.ring(ringtone) @@ -727,7 +729,7 @@ if(QDELETED(src)) return - if(!usr.can_perform_action(computer, FORBID_TELEKINESIS_REACH)) + if(!usr.can_perform_action(computer, FORBID_TELEKINESIS_REACH | ALLOW_RESTING)) return // send an activation message and open the messenger diff --git a/code/modules/modular_computers/file_system/programs/radar.dm b/code/modules/modular_computers/file_system/programs/radar.dm index 34771cde63b20..33dcd95e86b97 100644 --- a/code/modules/modular_computers/file_system/programs/radar.dm +++ b/code/modules/modular_computers/file_system/programs/radar.dm @@ -114,7 +114,7 @@ var/locx = (target_turf.x - here_turf.x) + 24 var/locy = (here_turf.y - target_turf.y) + 24 - if(get_dist_euclidian(here_turf, target_turf) > 24) + if(get_dist_euclidean(here_turf, target_turf) > 24) userot = TRUE rot = round(get_angle(here_turf, target_turf)) else @@ -208,7 +208,7 @@ var/here_turf = get_turf(computer) var/target_turf = get_turf(signal) - var/trackdistance = get_dist_euclidian(here_turf, target_turf) + var/trackdistance = get_dist_euclidean(here_turf, target_turf) switch(trackdistance) if(0) program_open_overlay = "[initial(program_open_overlay)]direct" @@ -471,7 +471,7 @@ */ /obj/item/circuit_component/mod_program/radar/proc/can_track(datum/source, atom/signal, signal_turf, computer_turf) SIGNAL_HANDLER - if(target.value && get_dist_euclidian(computer_turf, signal_turf) > MAX_RADAR_CIRCUIT_DISTANCE) + if(target.value && get_dist_euclidean(computer_turf, signal_turf) > MAX_RADAR_CIRCUIT_DISTANCE) return COMPONENT_RADAR_DONT_TRACK return COMPONENT_RADAR_TRACK_ANYWAY diff --git a/code/modules/modular_computers/file_system/programs/restock_tracker.dm b/code/modules/modular_computers/file_system/programs/restock_tracker.dm index 46462c0c6b531..8f2174ce97bbd 100644 --- a/code/modules/modular_computers/file_system/programs/restock_tracker.dm +++ b/code/modules/modular_computers/file_system/programs/restock_tracker.dm @@ -5,7 +5,7 @@ program_open_overlay = "restock" extended_desc = "Nanotrasen IoT network listing all the vending machines found on station, and how well stocked they are each. Profitable!" program_flags = PROGRAM_ON_NTNET_STORE | PROGRAM_REQUIRES_NTNET - can_run_on_flags = PROGRAM_LAPTOP | PROGRAM_PDA + can_run_on_flags = PROGRAM_ALL size = 4 program_icon = "cash-register" tgui_id = "NtosRestock" diff --git a/code/modules/modular_computers/file_system/programs/secureye.dm b/code/modules/modular_computers/file_system/programs/secureye.dm index aa3ed0e5828ce..a754c37d811e9 100644 --- a/code/modules/modular_computers/file_system/programs/secureye.dm +++ b/code/modules/modular_computers/file_system/programs/secureye.dm @@ -150,7 +150,7 @@ else camera_ref = null if(!spying) - playsound(computer, get_sfx(SFX_TERMINAL_TYPE), 25, FALSE) + playsound(computer, SFX_TERMINAL_TYPE, 25, FALSE) if(isnull(camera_ref)) return TRUE if(internal_tracker) diff --git a/code/modules/modular_computers/file_system/programs/techweb.dm b/code/modules/modular_computers/file_system/programs/techweb.dm index 2103e0d4a22d0..014e6a56727a3 100644 --- a/code/modules/modular_computers/file_system/programs/techweb.dm +++ b/code/modules/modular_computers/file_system/programs/techweb.dm @@ -26,13 +26,16 @@ if(!CONFIG_GET(flag/no_default_techweb_link) && !stored_research) CONNECT_TO_RND_SERVER_ROUNDSTART(stored_research, computer) -/datum/computer_file/program/science/application_attackby(obj/item/attacking_item, mob/living/user) - if(!istype(attacking_item, /obj/item/multitool)) - return FALSE - var/obj/item/multitool/attacking_tool = attacking_item - if(!QDELETED(attacking_tool.buffer) && istype(attacking_tool.buffer, /datum/techweb)) - stored_research = attacking_tool.buffer - return TRUE +/datum/computer_file/program/science/application_item_interaction(mob/living/user, obj/item/tool, list/modifiers) + if(istype(tool, /obj/item/multitool)) + return multitool_act(user, tool) + +/datum/computer_file/program/science/proc/multitool_act(mob/living/user, obj/item/multitool/used_multitool) + if(QDELETED(used_multitool.buffer) || !istype(used_multitool.buffer, /datum/techweb)) + return ITEM_INTERACT_BLOCKING + stored_research = used_multitool.buffer + computer.balloon_alert(user, "buffer linked!") + return ITEM_INTERACT_SUCCESS /datum/computer_file/program/science/ui_assets(mob/user) return list( @@ -197,7 +200,7 @@ if(stored_research.can_afford(price)) user.investigate_log("researched [id]([json_encode(price)]) on techweb id [stored_research.id] via [computer].", INVESTIGATE_RESEARCH) if(istype(stored_research, /datum/techweb/science)) - SSblackbox.record_feedback("associative", "science_techweb_unlock", 1, list("id" = "[id]", "name" = tech_node.display_name, "price" = "[json_encode(price)]", "time" = SQLtime())) + SSblackbox.record_feedback("associative", "science_techweb_unlock", 1, list("id" = "[id]", "name" = tech_node.display_name, "price" = "[json_encode(price)]", "time" = ISOtime())) if(stored_research.research_node_id(id)) computer.say("Successfully researched [tech_node.display_name].") var/logname = "Unknown" diff --git a/code/modules/modular_computers/file_system/programs/virtual_pet.dm b/code/modules/modular_computers/file_system/programs/virtual_pet.dm index 1d3196789ca87..7a0adba3cce6d 100644 --- a/code/modules/modular_computers/file_system/programs/virtual_pet.dm +++ b/code/modules/modular_computers/file_system/programs/virtual_pet.dm @@ -45,10 +45,10 @@ GLOBAL_LIST_EMPTY(virtual_pets_list) var/max_hunger = 500 ///pet icon for each state var/static/list/pet_state_icons = list( - PET_STATE_HUNGRY = list("icon" = 'icons/ui_icons/virtualpet/pet_state.dmi', "icon_state" = "pet_hungry"), - PET_STATE_HAPPY = list("icon" = 'icons/ui_icons/virtualpet/pet_state.dmi', "icon_state" = "pet_happy"), - PET_STATE_ASLEEP = list("icon" = 'icons/ui_icons/virtualpet/pet_state.dmi', "icon_state" = "pet_asleep"), - PET_STATE_NEUTRAL = list("icon" = 'icons/ui_icons/virtualpet/pet_state.dmi', "icon_state" = "pet_neutral"), + PET_STATE_HUNGRY = list("icon" = 'icons/ui/virtualpet/pet_state.dmi', "icon_state" = "pet_hungry"), + PET_STATE_HAPPY = list("icon" = 'icons/ui/virtualpet/pet_state.dmi', "icon_state" = "pet_happy"), + PET_STATE_ASLEEP = list("icon" = 'icons/ui/virtualpet/pet_state.dmi', "icon_state" = "pet_asleep"), + PET_STATE_NEUTRAL = list("icon" = 'icons/ui/virtualpet/pet_state.dmi', "icon_state" = "pet_neutral"), ) ///hat options and what level they will be unlocked at var/static/list/hat_selections = list( @@ -97,7 +97,7 @@ GLOBAL_LIST_EMPTY(virtual_pets_list) /datum/computer_file/program/virtual_pet/on_install() . = ..() - profile_picture = getFlatIcon(image(icon = 'icons/ui_icons/virtualpet/pet_state.dmi', icon_state = "pet_preview")) + profile_picture = getFlatIcon(image(icon = 'icons/ui/virtualpet/pet_state.dmi', icon_state = "pet_preview")) GLOB.virtual_pets_list += src pet = new pet_type(computer) pet.forceMove(computer) @@ -127,11 +127,11 @@ GLOBAL_LIST_EMPTY(virtual_pets_list) pet.forceMove(computer) -/datum/computer_file/program/virtual_pet/proc/on_message_recieve(datum/source, sender_title, inbound_message, photo_message) +/datum/computer_file/program/virtual_pet/proc/on_message_receive(datum/source, sender_title, inbound_message, photo_message) SIGNAL_HANDLER var/message_to_display = "[sender_title] has sent you a message [photo_message ? "with a photo attached" : ""]: [inbound_message]!" - pet.ai_controller?.set_blackboard_key(BB_LAST_RECIEVED_MESSAGE, message_to_display) + pet.ai_controller?.set_blackboard_key(BB_LAST_RECEIVED_MESSAGE, message_to_display) /datum/computer_file/program/virtual_pet/proc/pet_pre_clean(atom/source, mob/user) SIGNAL_HANDLER @@ -188,7 +188,7 @@ GLOBAL_LIST_EMPTY(virtual_pets_list) overlays += selected_hat["appearance"] /datum/computer_file/program/virtual_pet/proc/alter_profile_picture() - var/image/pet_preview = image(icon = 'icons/ui_icons/virtualpet/pet_state.dmi', icon_state = "pet_preview") + var/image/pet_preview = image(icon = 'icons/ui/virtualpet/pet_state.dmi', icon_state = "pet_preview") if(LAZYACCESS(pet.atom_colours, FIXED_COLOUR_PRIORITY)) pet_preview.color = pet.atom_colours[FIXED_COLOUR_PRIORITY] @@ -289,7 +289,7 @@ GLOBAL_LIST_EMPTY(virtual_pets_list) /datum/computer_file/program/virtual_pet/proc/grant_level_abilities() switch(level) if(2) - RegisterSignal(computer, COMSIG_COMPUTER_RECIEVED_MESSAGE, PROC_REF(on_message_recieve)) // we will now read out PDA messages + RegisterSignal(computer, COMSIG_COMPUTER_RECEIVED_MESSAGE, PROC_REF(on_message_receive)) // we will now read out PDA messages var/datum/action/cooldown/mob_cooldown/lights/lights = new(pet) lights.Grant(pet) pet.ai_controller?.set_blackboard_key(BB_LIGHTS_ABILITY, lights) diff --git a/code/modules/movespeed/modifiers/innate.dm b/code/modules/movespeed/modifiers/innate.dm index 2a55b9db4d79d..83d8b3fb78d98 100644 --- a/code/modules/movespeed/modifiers/innate.dm +++ b/code/modules/movespeed/modifiers/innate.dm @@ -6,8 +6,13 @@ multiplicative_slowdown = 2 flags = IGNORE_NOSLOW +/datum/movespeed_modifier/snail + blacklisted_movetypes = FLYING + variable = TRUE + +// no reason for leg loss (or gain) to affect speed if drifting /datum/movespeed_modifier/bodypart - movetypes = ~FLYING + blacklisted_movetypes = (FLYING|FLOATING) variable = TRUE /datum/movespeed_modifier/dna_vault_speedup diff --git a/code/modules/movespeed/modifiers/mobs.dm b/code/modules/movespeed/modifiers/mobs.dm index 2770405a9f100..1624ce37bf6d9 100644 --- a/code/modules/movespeed/modifiers/mobs.dm +++ b/code/modules/movespeed/modifiers/mobs.dm @@ -1,4 +1,5 @@ /datum/movespeed_modifier/obesity + // large weight slows even if flying and floating multiplicative_slowdown = 1.5 /datum/movespeed_modifier/monkey_reagent_speedmod @@ -11,6 +12,7 @@ variable = TRUE /datum/movespeed_modifier/hunger + movetypes = GROUND|FLYING variable = TRUE /datum/movespeed_modifier/golem_hunger @@ -89,6 +91,7 @@ /datum/movespeed_modifier/limbless variable = TRUE movetypes = GROUND + blacklisted_movetypes = FLOATING|FLYING flags = IGNORE_NOSLOW /datum/movespeed_modifier/simplemob_varspeed diff --git a/code/modules/pai/card.dm b/code/modules/pai/card.dm index 77ca42aeebcee..ccf0bae5f042b 100644 --- a/code/modules/pai/card.dm +++ b/code/modules/pai/card.dm @@ -248,7 +248,7 @@ ignore_key = POLL_IGNORE_PAI, ) - addtimer(VARSET_CALLBACK(src, request_spam, FALSE), PAI_SPAM_TIME, TIMER_UNIQUE | TIMER_STOPPABLE | TIMER_CLIENT_TIME | TIMER_DELETE_ME) + addtimer(VARSET_CALLBACK(src, request_spam, FALSE), PAI_SPAM_TIME, TIMER_UNIQUE|TIMER_DELETE_ME) return TRUE /** diff --git a/code/modules/pai/pai.dm b/code/modules/pai/pai.dm index 428bfd33fce41..4268c040e2bcd 100644 --- a/code/modules/pai/pai.dm +++ b/code/modules/pai/pai.dm @@ -119,6 +119,9 @@ "mouse" = TRUE, "rabbit" = TRUE, "repairbot" = TRUE, + "kitten" = TRUE, + "puppy" = TRUE, + "spider" = TRUE, ) /// List of all available card overlays. var/static/list/possible_overlays = list( @@ -146,7 +149,7 @@ return ..() // See software.dm for Topic() -/mob/living/silicon/pai/can_perform_action(atom/movable/target, action_bitflags) +/mob/living/silicon/pai/can_perform_action(atom/target, action_bitflags) action_bitflags |= ALLOW_RESTING // Resting is just an aesthetic feature for them action_bitflags &= ~ALLOW_SILICON_REACH // They don't get long reach like the rest of silicons return ..(target, action_bitflags) @@ -161,7 +164,6 @@ QDEL_NULL(signaler) QDEL_NULL(leash) card = null - GLOB.pai_list.Remove(src) return ..() // Need to override parent here because the message we dispatch is turf-based, not based on the location of the object because that could be fuckin anywhere @@ -218,7 +220,6 @@ if(istype(loc, /obj/item/modular_computer)) give_messenger_ability() START_PROCESSING(SSfastprocess, src) - GLOB.pai_list += src make_laws() for(var/law in laws.inherent) lawcheck += law @@ -457,7 +458,7 @@ to_chat(src, span_userdanger("Your mental faculties leave you.")) to_chat(src, span_rose("oblivion... ")) balloon_alert(user, "personality wiped") - playsound(src, "sound/machines/buzz-two.ogg", 30, TRUE) + playsound(src, 'sound/machines/buzz-two.ogg', 30, TRUE) qdel(src) return TRUE @@ -467,7 +468,7 @@ for(var/mob/living/cultist as anything in invokers) to_chat(cultist, span_cult_italic("You don't think this is what Nar'Sie had in mind when She asked for blood sacrifices...")) - return STOP_SACRIFICE + return STOP_SACRIFICE|SILENCE_SACRIFICE_MESSAGE /// Updates the distance we can be from our pai card /mob/living/silicon/pai/proc/increment_range(increment_amount) diff --git a/code/modules/pai/software.dm b/code/modules/pai/software.dm index 9876df5a2646a..ab69e69388ccd 100644 --- a/code/modules/pai/software.dm +++ b/code/modules/pai/software.dm @@ -131,12 +131,17 @@ /** * Changes the image displayed on the pAI. * - * @param {mob} user - The user who is changing the image. - * * @returns {boolean} - TRUE if the image was changed, FALSE otherwise. */ /mob/living/silicon/pai/proc/change_image() - var/new_image = tgui_input_list(src, "Select your new display image", "Display Image", possible_overlays) + var/list/possible_choices = list() + for(var/face_option in possible_overlays) + var/datum/radial_menu_choice/choice = new + choice.name = face_option + choice.image = image(icon = card.icon, icon_state = "pai-[face_option]") + possible_choices[face_option] += choice + var/atom/anchor = get_atom_on_turf(src) + var/new_image = show_radial_menu(src, anchor, possible_choices, custom_check = CALLBACK(src, PROC_REF(check_menu), anchor), radius = 40, require_near = TRUE) if(isnull(new_image)) return FALSE card.emotion_icon = new_image diff --git a/code/modules/paperwork/desk_bell.dm b/code/modules/paperwork/desk_bell.dm index e193bbc98b102..c3964b7292c0b 100644 --- a/code/modules/paperwork/desk_bell.dm +++ b/code/modules/paperwork/desk_bell.dm @@ -9,6 +9,7 @@ anchored = FALSE pass_flags = PASSTABLE // Able to place on tables max_integrity = 5000 // To make attacking it not instantly break it + /// The amount of times this bell has been rang, used to check the chance it breaks var/times_rang = 0 /// Is this bell broken? @@ -110,17 +111,14 @@ desc = "The cornerstone of any customer service job. This one's been modified for hyper-performance." ring_cooldown_length = 0 -/obj/structure/desk_bell/MouseDrop(obj/over_object, src_location, over_location) +/obj/structure/desk_bell/mouse_drop_dragged(atom/over_object, mob/user) if(!istype(over_object, /obj/vehicle/ridden/wheelchair)) return - if(!Adjacent(over_object) || !Adjacent(usr)) - return var/obj/vehicle/ridden/wheelchair/target = over_object if(target.bell_attached) - usr.balloon_alert(usr, "already has a bell!") + user.balloon_alert(user, "already has a bell!") return - usr.balloon_alert(usr, "attaching bell...") - if(!do_after(usr, 0.5 SECONDS)) + user.balloon_alert(user, "attaching bell...") + if(!do_after(user, 0.5 SECONDS)) return target.attach_bell(src) - return ..() diff --git a/code/modules/paperwork/filingcabinet.dm b/code/modules/paperwork/filingcabinet.dm index 70e930ca31e3e..46b9b8f31fdd2 100644 --- a/code/modules/paperwork/filingcabinet.dm +++ b/code/modules/paperwork/filingcabinet.dm @@ -104,7 +104,7 @@ return ..() /obj/structure/filingcabinet/attack_self_tk(mob/user) - . = COMPONENT_CANCEL_ATTACK_CHAIN + . = ITEM_INTERACT_BLOCKING if(contents.len) if(prob(40 + contents.len * 5)) var/obj/item/I = pick(contents) @@ -203,4 +203,3 @@ GLOBAL_LIST_EMPTY(employmentCabinets) fillCurrent() virgin = FALSE return ..() - diff --git a/code/modules/paperwork/folders.dm b/code/modules/paperwork/folders.dm index 4d0a0efe59639..3ee556b3adf4f 100644 --- a/code/modules/paperwork/folders.dm +++ b/code/modules/paperwork/folders.dm @@ -77,7 +77,7 @@ return to_chat(user, span_notice("You put [weapon] into [src].")) update_appearance() - else if(istype(weapon, /obj/item/pen)) + else if(IS_WRITING_UTENSIL(weapon)) rename(user, weapon) /obj/item/folder/attack_self(mob/user) diff --git a/code/modules/paperwork/handlabeler.dm b/code/modules/paperwork/handlabeler.dm index 88fc176801a7f..98f6662f8c525 100644 --- a/code/modules/paperwork/handlabeler.dm +++ b/code/modules/paperwork/handlabeler.dm @@ -116,7 +116,7 @@ labels_left = initial(labels_left) //Yes, it's capped at its initial value return ITEM_INTERACT_SUCCESS -/obj/item/hand_labeler/attackby_storage_insert(datum/storage, atom/storage_holder, mob/user) +/obj/item/hand_labeler/storage_insert_on_interaction(datum/storage, atom/storage_holder, mob/user) return !mode /obj/item/hand_labeler/borg diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm index 605e88f1e483b..fe2de7e752030 100644 --- a/code/modules/paperwork/paper.dm +++ b/code/modules/paperwork/paper.dm @@ -205,8 +205,17 @@ var/datum/paper_field/field_data_datum = null var/is_signature = ((text == "%sign") || (text == "%s")) + var/is_date = ((text == "%date") || (text == "%d")) + var/is_time = ((text == "%time") || (text == "%t")) + + var/field_text = text + if(is_signature) + field_text = signature_name + else if(is_date) + field_text = "[time2text(world.timeofday, "DD/MM")]/[CURRENT_STATION_YEAR]" + else if(is_time) + field_text = time2text(world.timeofday, "hh:mm") - var/field_text = is_signature ? signature_name : text var/field_font = is_signature ? SIGNATURE_FONT : font for(var/datum/paper_field/field_input in raw_field_input_data) @@ -441,8 +450,8 @@ // Handle stamping items. if(writing_stats["interaction_mode"] == MODE_STAMPING) if(!user.can_read(src) || user.is_blind()) - //The paper's stampable window area is assumed approx 400x500 - add_stamp(writing_stats["stamp_class"], rand(0, 400), rand(0, 500), rand(0, 360), writing_stats["stamp_icon_state"]) + //The paper's stampable window area is assumed approx 300x400 + add_stamp(writing_stats["stamp_class"], rand(0, 300), rand(0, 400), rand(0, 360), writing_stats["stamp_icon_state"]) user.visible_message(span_notice("[user] blindly stamps [src] with \the [attacking_item]!")) to_chat(user, span_notice("You stamp [src] with \the [attacking_item] the best you can!")) playsound(src, 'sound/items/handling/standard_stamp.ogg', 50, vary = TRUE) @@ -454,6 +463,25 @@ ui_interact(user) return ..() +/// Secondary right click interaction to quickly stamp things +/obj/item/paper/item_interaction_secondary(mob/living/user, obj/item/tool, list/modifiers) + var/list/writing_stats = tool.get_writing_implement_details() + + if(!length(writing_stats)) + return NONE + if(writing_stats["interaction_mode"] != MODE_STAMPING) + return NONE + if(!user.can_read(src) || user.is_blind()) // Just leftclick instead + return NONE + + add_stamp(writing_stats["stamp_class"], rand(1, 300), rand(1, 400), stamp_icon_state = writing_stats["stamp_icon_state"]) + user.visible_message( + span_notice("[user] quickly stamps [src] with [tool] without looking."), + span_notice("You quickly stamp [src] with [tool] without looking."), + ) + playsound(src, 'sound/items/handling/standard_stamp.ogg', 50, vary = TRUE) + + return ITEM_INTERACT_BLOCKING // Stop the UI from opening. /** * Attempts to ui_interact the paper to the given user, with some sanity checking * to make sure the camera still exists via the weakref and that this paper is still diff --git a/code/modules/paperwork/paper_cutter.dm b/code/modules/paperwork/paper_cutter.dm index 8e4fedf2fdad6..1315ca3a81d23 100644 --- a/code/modules/paperwork/paper_cutter.dm +++ b/code/modules/paperwork/paper_cutter.dm @@ -177,12 +177,7 @@ new /obj/item/paper/paperslip(get_turf(src)) update_appearance() -/obj/item/papercutter/MouseDrop(atom/over_object) - . = ..() - var/mob/user = usr - if(user.incapacitated() || !Adjacent(user)) - return - +/obj/item/papercutter/mouse_drop_dragged(atom/over_object, mob/user) if(over_object == user) user.put_in_hands(src) diff --git a/code/modules/paperwork/paperplane.dm b/code/modules/paperwork/paperplane.dm index 0b9c4feccb18c..7b734c1530666 100644 --- a/code/modules/paperwork/paperplane.dm +++ b/code/modules/paperwork/paperplane.dm @@ -78,7 +78,7 @@ /obj/item/paperplane/attackby(obj/item/attacking_item, mob/user, params) if(burn_paper_product_attackby_check(attacking_item, user)) return - if(istype(attacking_item, /obj/item/pen) || istype(attacking_item, /obj/item/toy/crayon)) + if(IS_WRITING_UTENSIL(attacking_item)) to_chat(user, span_warning("You should unfold [src] before changing it!")) return else if(istype(attacking_item, /obj/item/stamp)) //we don't randomize stamps on a paperplane diff --git a/code/modules/paperwork/pen.dm b/code/modules/paperwork/pen.dm index ec71eda2e46f4..36949b65c7cdd 100644 --- a/code/modules/paperwork/pen.dm +++ b/code/modules/paperwork/pen.dm @@ -34,6 +34,8 @@ var/dart_insert_icon = 'icons/obj/weapons/guns/toy.dmi' var/dart_insert_casing_icon_state = "overlay_pen" var/dart_insert_projectile_icon_state = "overlay_pen_proj" + /// If this pen can be clicked in order to retract it + var/can_click = TRUE /obj/item/pen/Initialize(mapload) . = ..() @@ -47,6 +49,35 @@ AddElement(/datum/element/tool_renaming) RegisterSignal(src, COMSIG_DART_INSERT_ADDED, PROC_REF(on_inserted_into_dart)) RegisterSignal(src, COMSIG_DART_INSERT_REMOVED, PROC_REF(on_removed_from_dart)) + if (!can_click) + return + create_transform_component() + RegisterSignal(src, COMSIG_TRANSFORMING_ON_TRANSFORM, PROC_REF(on_transform)) + +/// Proc that child classes can override to have custom transforms, like edaggers or pendrivers +/obj/item/pen/proc/create_transform_component() + AddComponent( \ + /datum/component/transforming, \ + sharpness_on = NONE, \ + inhand_icon_change = FALSE, \ + w_class_on = w_class, \ + ) + +/* + * Signal proc for [COMSIG_TRANSFORMING_ON_TRANSFORM]. + * + * Clicks the pen to make an annoying sound. Clickity clickery click! + */ +/obj/item/pen/proc/on_transform(obj/item/source, mob/user, active) + SIGNAL_HANDLER + + if(user) + balloon_alert(user, "clicked") + playsound(src, 'sound/machines/click.ogg', 30, TRUE, -3) + icon_state = initial(icon_state) + (active ? "_retracted" : "") + update_appearance(UPDATE_ICON) + + return COMPONENT_NO_DEFAULT_MESSAGE /obj/item/pen/proc/on_inserted_into_dart(datum/source, obj/projectile/dart, mob/user, embedded = FALSE) SIGNAL_HANDLER @@ -90,6 +121,7 @@ name = "four-color pen" icon_state = "pen_4color" colour = COLOR_BLACK + can_click = FALSE /obj/item/pen/fourcolor/attack_self(mob/living/carbon/user) . = ..() @@ -110,6 +142,8 @@ colour = COLOR_BLACK to_chat(user, span_notice("\The [src] will now write in [chosen_color].")) desc = "It's a fancy four-color ink pen, set to [chosen_color]." + balloon_alert(user, "clicked") + playsound(src, 'sound/machines/click.ogg', 30, TRUE, -3) /obj/item/pen/fountain name = "fountain pen" @@ -119,6 +153,7 @@ requires_gravity = FALSE // fancy spess pens dart_insert_casing_icon_state = "overlay_fountainpen" dart_insert_projectile_icon_state = "overlay_fountainpen_proj" + can_click = FALSE /obj/item/pen/charcoal name = "charcoal stylus" @@ -129,6 +164,7 @@ custom_materials = null grind_results = list(/datum/reagent/ash = 5, /datum/reagent/cellulose = 10) requires_gravity = FALSE // this is technically a pencil + can_click = FALSE /datum/crafting_recipe/charcoal_stylus name = "Charcoal Stylus" @@ -187,19 +223,17 @@ insert_comp.casing_overlay_icon_state = overlay_reskin[current_skin] insert_comp.projectile_overlay_icon_state = "[overlay_reskin[current_skin]]_proj" -/obj/item/pen/attack_self(mob/living/carbon/user) - . = ..() - if(.) - return +/obj/item/pen/item_ctrl_click(mob/living/carbon/user) if(loc != user) to_chat(user, span_warning("You must be holding the pen to continue!")) - return + return CLICK_ACTION_BLOCKING var/deg = tgui_input_number(user, "What angle would you like to rotate the pen head to? (0-360)", "Rotate Pen Head", max_value = 360) if(isnull(deg) || QDELETED(user) || QDELETED(src) || !user.can_perform_action(src, FORBID_TELEKINESIS_REACH) || loc != user) - return + return CLICK_ACTION_BLOCKING degrees = deg to_chat(user, span_notice("You rotate the top of the pen to [deg] degrees.")) SEND_SIGNAL(src, COMSIG_PEN_ROTATED, deg, user) + return CLICK_ACTION_SUCCESS /obj/item/pen/attack(mob/living/M, mob/user, params) if(force) // If the pen has a force value, call the normal attack procs. Used for e-daggers and captain's pen mostly. @@ -212,6 +246,8 @@ return TRUE /obj/item/pen/get_writing_implement_details() + if (HAS_TRAIT(src, TRAIT_TRANSFORM_ACTIVE)) + return null return list( interaction_mode = MODE_WRITING, font = font, @@ -287,6 +323,9 @@ speed = 6 SECONDS, \ butcher_sound = 'sound/weapons/blade1.ogg', \ ) + RegisterSignal(src, COMSIG_DETECTIVE_SCANNED, PROC_REF(on_scan)) + +/obj/item/pen/edagger/create_transform_component() AddComponent( \ /datum/component/transforming, \ force_on = 18, \ @@ -296,8 +335,6 @@ w_class_on = WEIGHT_CLASS_NORMAL, \ inhand_icon_change = FALSE, \ ) - RegisterSignal(src, COMSIG_TRANSFORMING_ON_TRANSFORM, PROC_REF(on_transform)) - RegisterSignal(src, COMSIG_DETECTIVE_SCANNED, PROC_REF(on_scan)) /obj/item/pen/edagger/on_inserted_into_dart(datum/source, obj/item/ammo_casing/dart, mob/user) . = ..() @@ -369,9 +406,7 @@ * Handles swapping their icon files to edagger related icon files - * as they're supposed to look like a normal pen. */ -/obj/item/pen/edagger/proc/on_transform(obj/item/source, mob/user, active) - SIGNAL_HANDLER - +/obj/item/pen/edagger/on_transform(obj/item/source, mob/user, active) if(active) name = hidden_name desc = hidden_desc @@ -418,6 +453,7 @@ colour = COLOR_BLUE dart_insert_casing_icon_state = "overlay_survivalpen" dart_insert_projectile_icon_state = "overlay_survivalpen_proj" + can_click = FALSE /obj/item/pen/survival/on_inserted_into_dart(datum/source, obj/item/ammo_casing/dart, mob/user) . = ..() @@ -456,6 +492,9 @@ /obj/item/pen/screwdriver/Initialize(mapload) . = ..() + AddElement(/datum/element/update_icon_updates_onmob) + +/obj/item/pen/screwdriver/create_transform_component() AddComponent( \ /datum/component/transforming, \ throwforce_on = 5, \ @@ -464,12 +503,7 @@ inhand_icon_change = FALSE, \ ) - RegisterSignal(src, COMSIG_TRANSFORMING_ON_TRANSFORM, PROC_REF(toggle_screwdriver)) - AddElement(/datum/element/update_icon_updates_onmob) - -/obj/item/pen/screwdriver/proc/toggle_screwdriver(obj/item/source, mob/user, active) - SIGNAL_HANDLER - +/obj/item/pen/screwdriver/on_transform(obj/item/source, mob/user, active) if(user) balloon_alert(user, active ? "extended" : "retracted") playsound(src, 'sound/weapons/batonextend.ogg', 50, TRUE) @@ -501,22 +535,22 @@ . += span_notice("To initiate the surrender prompt, simply click on an individual within your proximity.") //Code from the medical penlight -/obj/item/pen/red/security/afterattack(atom/target, mob/living/user, proximity) - . = ..() +/obj/item/pen/red/security/ranged_interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) if(!COOLDOWN_FINISHED(src, holosign_cooldown)) balloon_alert(user, "not ready!") - return + return ITEM_INTERACT_BLOCKING - var/target_turf = get_turf(target) + var/turf/target_turf = get_turf(interacting_with) var/mob/living/living_target = locate(/mob/living) in target_turf if(!living_target || (living_target == user)) - return + return ITEM_INTERACT_BLOCKING living_target.apply_status_effect(/datum/status_effect/surrender_timed) to_chat(living_target, span_userdanger("[user] requests your immediate surrender! You are given 30 seconds to comply!")) new /obj/effect/temp_visual/security_holosign(target_turf, user) //produce a holographic glow COOLDOWN_START(src, holosign_cooldown, 30 SECONDS) + return ITEM_INTERACT_SUCCESS /obj/effect/temp_visual/security_holosign name = "security holosign" diff --git a/code/modules/paperwork/photocopier.dm b/code/modules/paperwork/photocopier.dm index 0712e516de451..72d3ecd85ba03 100644 --- a/code/modules/paperwork/photocopier.dm +++ b/code/modules/paperwork/photocopier.dm @@ -66,6 +66,8 @@ GLOBAL_LIST_INIT(paper_blanks, init_paper_blanks()) power_channel = AREA_USAGE_EQUIP max_integrity = 300 integrity_failure = 0.33 + interaction_flags_mouse_drop = NEED_DEXTERITY | ALLOW_RESTING + /// A reference to a mob on top of the photocopier trying to copy their ass. Null if there is no mob. var/mob/living/ass /// A reference to the toner cartridge that's inserted into the copier. Null if there is no cartridge. @@ -87,6 +89,7 @@ GLOBAL_LIST_INIT(paper_blanks, init_paper_blanks()) /// A stack for all the empty paper we have newly inserted (LIFO) var/list/paper_stack = list() + /obj/machinery/photocopier/Initialize(mapload) . = ..() toner_cartridge = new(src) @@ -492,10 +495,9 @@ GLOBAL_LIST_INIT(paper_blanks, init_paper_blanks()) /obj/machinery/photocopier/proc/make_ass_copy() if(!check_ass()) return null - var/butt_icon_state = ass.get_butt_sprite() - if(isnull(butt_icon_state)) + var/icon/temp_img = ass.get_butt_sprite() + if(isnull(temp_img)) return null - var/icon/temp_img = icon('icons/mob/butts.dmi', butt_icon_state) var/obj/item/photo/copied_ass = new /obj/item/photo(src) var/datum/picture/toEmbed = new(name = "[ass]'s Ass", desc = "You see [ass]'s ass on the photo.", image = temp_img) toEmbed.psize_x = 128 @@ -586,8 +588,8 @@ GLOBAL_LIST_INIT(paper_blanks, init_paper_blanks()) new /obj/effect/decal/cleanable/oil(get_turf(src)) toner_cartridge.charges = 0 -/obj/machinery/photocopier/MouseDrop_T(mob/target, mob/user) - if(!istype(target) || target.anchored || target.buckled || !Adjacent(target) || !user.can_perform_action(src, action_bitflags = ALLOW_RESTING) || target == ass || copier_blocked()) +/obj/machinery/photocopier/mouse_drop_receive(mob/target, mob/user, params) + if(!istype(target) || target.anchored || target.buckled || target == ass || copier_blocked()) return add_fingerprint(user) if(target == user) @@ -626,7 +628,7 @@ GLOBAL_LIST_INIT(paper_blanks, init_paper_blanks()) return TRUE /** - * Checks if the copier is deleted, or has something dense at its location. Called in `MouseDrop_T()` + * Checks if the copier is deleted, or has something dense at its location. Called in `mouse_drop_receive()` */ /obj/machinery/photocopier/proc/copier_blocked() if(QDELETED(src)) diff --git a/code/modules/paperwork/stamps.dm b/code/modules/paperwork/stamps.dm index 1a0ce1dc37b80..1eae74d242cef 100644 --- a/code/modules/paperwork/stamps.dm +++ b/code/modules/paperwork/stamps.dm @@ -88,6 +88,11 @@ icon_state = "stamp-clown" dye_color = DYE_CLOWN +/obj/item/stamp/clown/Initialize(mapload) + . = ..() + + AddElement(/datum/element/swabable, CELL_LINE_TABLE_CLOWN, CELL_VIRUS_TABLE_GENERIC, rand(2,3), 0) + /obj/item/stamp/mime name = "mime's rubber stamp" icon_state = "stamp-mime" diff --git a/code/modules/paperwork/ticketmachine.dm b/code/modules/paperwork/ticketmachine.dm index 5c849f4a530cd..b4e97615a923a 100644 --- a/code/modules/paperwork/ticketmachine.dm +++ b/code/modules/paperwork/ticketmachine.dm @@ -49,13 +49,10 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/ticket_machine, 32) . += span_notice("The ticket machine shows that ticket #[current_number] is currently being served.") . += span_notice("You can take a ticket out with Left-Click to be number [ticket_number + 1] in queue.") -/obj/machinery/ticket_machine/multitool_act(mob/living/user, obj/item/I) - if(!multitool_check_buffer(user, I)) //make sure it has a data buffer - return - var/obj/item/multitool/M = I +/obj/machinery/ticket_machine/multitool_act(mob/living/user, obj/item/multitool/M) M.set_buffer(src) balloon_alert(user, "saved to multitool buffer") - return TRUE + return ITEM_INTERACT_SUCCESS /obj/machinery/ticket_machine/emag_act(mob/user, obj/item/card/emag/emag_card) //Emag the ticket machine to dispense burning tickets, as well as randomize its number to destroy the HoP's mind. if(obj_flags & EMAGGED) diff --git a/code/modules/photography/_pictures.dm b/code/modules/photography/_pictures.dm index 45fa5654ad922..3a6aa1ffc646a 100644 --- a/code/modules/photography/_pictures.dm +++ b/code/modules/photography/_pictures.dm @@ -72,7 +72,6 @@ .["caption"] = caption .["pixel_size_x"] = psize_x .["pixel_size_y"] = psize_y - .["blueprints"] = has_blueprints .["logpath"] = logpath SET_SERIALIZATION_SEMVER(semvers, "1.0.0") @@ -93,8 +92,6 @@ id = input["id"] psize_x = input["pixel_size_x"] psize_y = input["pixel_size_y"] - if(input["blueprints"]) - has_blueprints = input["blueprints"] if(input["caption"]) caption = input["caption"] if(input["desc"]) @@ -180,7 +177,7 @@ fdel(jsonpath) else json = list() - json[id] = serialize_list() + json[id] = serialize_list(semvers = list()) WRITE_FILE(jsonpath, json_encode(json)) /datum/picture/proc/Copy(greyscale = FALSE, cropx = 0, cropy = 0) diff --git a/code/modules/photography/camera/camera.dm b/code/modules/photography/camera/camera.dm index 35462a24d86db..5814750dab168 100644 --- a/code/modules/photography/camera/camera.dm +++ b/code/modules/photography/camera/camera.dm @@ -45,7 +45,7 @@ /obj/item/camera/Initialize(mapload) . = ..() - AddComponent(/datum/component/shell, list(new /obj/item/circuit_component/camera), SHELL_CAPACITY_SMALL) + AddComponent(/datum/component/shell, list(new /obj/item/circuit_component/camera, new /obj/item/circuit_component/remotecam/polaroid), SHELL_CAPACITY_SMALL) /obj/item/camera/attack_self(mob/user) if(!disk) @@ -107,7 +107,7 @@ . += "It has [pictures_left] photos left." //user can be atom or mob -/obj/item/camera/proc/can_target(atom/target, mob/user, prox_flag) +/obj/item/camera/proc/can_target(atom/target, mob/user) if(!on || blending || !pictures_left) return FALSE var/turf/T = get_turf(target) @@ -128,24 +128,30 @@ return FALSE return TRUE -/obj/item/camera/afterattack(atom/target, mob/user, flag) - . |= AFTERATTACK_PROCESSED_ITEM +/obj/item/camera/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + return ranged_interact_with_atom(interacting_with, user, modifiers) +/obj/item/camera/ranged_interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) if (disk) - if(ismob(target)) + if(ismob(interacting_with)) if (disk.record) QDEL_NULL(disk.record) disk.record = new - var/mob/M = target + var/mob/M = interacting_with disk.record.caller_name = M.name disk.record.set_caller_image(M) else to_chat(user, span_warning("Invalid holodisk target.")) - return + return ITEM_INTERACT_BLOCKING - if(!can_target(target, user, flag)) - return + if(!can_target(interacting_with, user)) + return ITEM_INTERACT_BLOCKING + if(!photo_taken(interacting_with, user)) + return ITEM_INTERACT_BLOCKING + return ITEM_INTERACT_SUCCESS + +/obj/item/camera/proc/photo_taken(atom/target, mob/user) on = FALSE addtimer(CALLBACK(src, PROC_REF(cooldown)), cooldown) @@ -153,7 +159,7 @@ icon_state = state_off INVOKE_ASYNC(src, PROC_REF(captureimage), target, user, picture_size_x - 1, picture_size_y - 1) - + return TRUE /obj/item/camera/proc/cooldown() UNTIL(!blending) @@ -226,7 +232,7 @@ if(person.is_face_visible()) names += "[person.name]" - var/datum/picture/picture = new("picture", desc.Join(" "), mobs_spotted, dead_spotted, names, get_icon, null, psize_x, psize_y, blueprints, can_see_ghosts = see_ghosts) + var/datum/picture/picture = new("picture", desc.Join("
    "), mobs_spotted, dead_spotted, names, get_icon, null, psize_x, psize_y, blueprints, can_see_ghosts = see_ghosts) after_picture(user, picture) SEND_SIGNAL(src, COMSIG_CAMERA_IMAGE_CAPTURED, target, user, picture) blending = FALSE diff --git a/code/modules/photography/photos/album.dm b/code/modules/photography/photos/album.dm index ddc896fe758fb..4a1647abebe7a 100644 --- a/code/modules/photography/photos/album.dm +++ b/code/modules/photography/photos/album.dm @@ -140,6 +140,11 @@ icon_state = "album_red" persistence_id = "listeningstation" +/obj/item/storage/photo_album/icemoonlisteningstation + name = "photo album (Icemoon Outpost)" + icon_state = "album_red" + persistence_id = "icemooncomms" + /obj/item/storage/photo_album/prison name = "photo album (Prison)" icon_state = "album_blue" diff --git a/code/modules/photography/photos/photo.dm b/code/modules/photography/photos/photo.dm index b34ff459c0075..b009c5b2e7913 100644 --- a/code/modules/photography/photos/photo.dm +++ b/code/modules/photography/photos/photo.dm @@ -68,7 +68,7 @@ /obj/item/photo/attackby(obj/item/P, mob/user, params) if(burn_paper_product_attackby_check(P, user)) return - if(istype(P, /obj/item/pen) || istype(P, /obj/item/toy/crayon)) + if(IS_WRITING_UTENSIL(P)) if(!user.can_write(P)) return var/txt = tgui_input_text(user, "What would you like to write on the back?", "Photo Writing", max_length = 128) diff --git a/code/modules/plumbing/ducts.dm b/code/modules/plumbing/ducts.dm index a7990f65ce5b9..de4a900579219 100644 --- a/code/modules/plumbing/ducts.dm +++ b/code/modules/plumbing/ducts.dm @@ -295,7 +295,7 @@ All the important duct code: disconnect_duct() return ..() -/obj/machinery/duct/MouseDrop_T(atom/drag_source, mob/living/user) +/obj/machinery/duct/mouse_drop_receive(atom/drag_source, mob/living/user, params) if(!istype(drag_source, /obj/machinery/duct)) return var/obj/machinery/duct/other = drag_source @@ -354,24 +354,23 @@ All the important duct code: duct_color = new_color add_atom_colour(GLOB.pipe_paint_colors[new_color], FIXED_COLOUR_PRIORITY) -/obj/item/stack/ducts/afterattack(atom/target, user, proximity) - . = ..() - if(!proximity) - return - if(istype(target, /obj/machinery/duct)) - var/obj/machinery/duct/duct = target +/obj/item/stack/ducts/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + if(istype(interacting_with, /obj/machinery/duct)) + var/obj/machinery/duct/duct = interacting_with if(duct.anchored) to_chat(user, span_warning("The duct must be unanchored before it can be picked up.")) - return + return ITEM_INTERACT_BLOCKING // Turn into a duct stack and then merge to the in-hand stack. var/obj/item/stack/ducts/stack = new(duct.loc, 1, FALSE) qdel(duct) if(stack.can_merge(src)) stack.merge(src) - return + return ITEM_INTERACT_SUCCESS + + check_attach_turf(interacting_with) + return ITEM_INTERACT_SUCCESS - check_attach_turf(target) /obj/item/stack/ducts/proc/check_attach_turf(atom/target) if(isopenturf(target) && use(1)) diff --git a/code/modules/plumbing/plumbers/_plumb_machinery.dm b/code/modules/plumbing/plumbers/_plumb_machinery.dm index e3f9486bee999..1f60a4eefb4cb 100644 --- a/code/modules/plumbing/plumbers/_plumb_machinery.dm +++ b/code/modules/plumbing/plumbers/_plumb_machinery.dm @@ -11,6 +11,9 @@ processing_flags = START_PROCESSING_MANUALLY active_power_usage = BASE_MACHINE_ACTIVE_CONSUMPTION * 2.75 resistance_flags = FIRE_PROOF | UNACIDABLE | ACID_PROOF + interaction_flags_machine = parent_type::interaction_flags_machine | INTERACT_MACHINE_OFFLINE + reagents = /datum/reagents/plumbing + ///Plumbing machinery is always gonna need reagents, so we might aswell put it here var/buffer = 50 ///Flags for reagents, like INJECTABLE, TRANSPARENT bla bla everything thats in DEFINES/reagents.dm @@ -21,11 +24,48 @@ set_anchored(bolt) create_reagents(buffer, reagent_flags) AddComponent(/datum/component/simple_rotation) - interaction_flags_machine |= INTERACT_MACHINE_OFFLINE + register_context() + +/obj/machinery/plumbing/create_reagents(max_vol, flags) + if(!ispath(reagents)) + qdel(reagents) + reagents = new reagents(max_vol, flags) + reagents.my_atom = src + +/obj/machinery/plumbing/add_context(atom/source, list/context, obj/item/held_item, mob/user) + . = NONE + if(isnull(held_item)) + return + + if(held_item.tool_behaviour == TOOL_WRENCH) + context[SCREENTIP_CONTEXT_LMB] = "[anchored ? "Un" : ""]Anchor" + return CONTEXTUAL_SCREENTIP_SET + else if(held_item.tool_behaviour == TOOL_WELDER && !anchored) + context[SCREENTIP_CONTEXT_LMB] = "Deconstruct" + return CONTEXTUAL_SCREENTIP_SET + else if(istype(held_item, /obj/item/plunger)) + context[SCREENTIP_CONTEXT_LMB] = "Flush" + return CONTEXTUAL_SCREENTIP_SET /obj/machinery/plumbing/examine(mob/user) . = ..() - . += span_notice("The maximum volume display reads: [reagents.maximum_volume] units.") + if(isobserver(user) || !in_range(src, user)) + return + + . += span_notice("The maximum volume display reads: [reagents.maximum_volume]u capacity. Contains:") + if(reagents.total_volume) + for(var/datum/reagent/reg as anything in reagents.reagent_list) + . += span_notice("[round(reg.volume, CHEMICAL_VOLUME_ROUNDING)]u of [reg.name]") + else + . += span_notice("Nothing.") + + if(anchored) + . += span_notice("It's [EXAMINE_HINT("anchored")] in place.") + else + . += span_warning("Needs to be [EXAMINE_HINT("anchored")] to start operations.") + . += span_notice("It can be [EXAMINE_HINT("welded")] apart.") + + . += span_notice("An [EXAMINE_HINT("plunger")] can be used to flush out reagents.") /obj/machinery/plumbing/wrench_act(mob/living/user, obj/item/tool) if(user.combat_mode) @@ -39,76 +79,118 @@ end_processing() return ITEM_INTERACT_SUCCESS -/obj/machinery/plumbing/plunger_act(obj/item/plunger/P, mob/living/user, reinforced) - user.balloon_alert_to_viewers("furiously plunging...") - if(do_after(user, 3 SECONDS, target = src)) - user.balloon_alert_to_viewers("finished plunging") - reagents.expose(get_turf(src), TOUCH) //splash on the floor - reagents.clear_reagents() - /obj/machinery/plumbing/welder_act(mob/living/user, obj/item/I) - . = ..() + if(user.combat_mode) + return NONE + if(anchored) - to_chat(user, span_warning("The [name] needs to be unbolted to do that!")) - if(I.tool_start_check(user, amount=1)) + balloon_alert(user, "unanchor first!") + return ITEM_INTERACT_BLOCKING + + if(I.tool_start_check(user, amount = 1)) to_chat(user, span_notice("You start slicing the [name] apart.")) - if(I.use_tool(src, user, (1.5 SECONDS), volume=50)) + if(I.use_tool(src, user, 1.5 SECONDS, volume = 50)) deconstruct(TRUE) to_chat(user, span_notice("You slice the [name] apart.")) - return TRUE - -///We can empty beakers in here and everything -/obj/machinery/plumbing/input - name = "input gate" - desc = "Can be manually filled with reagents from containers." - icon_state = "pipe_input" - pass_flags_self = PASSMACHINE | LETPASSTHROW // Small - reagent_flags = TRANSPARENT | REFILLABLE - + return ITEM_INTERACT_SUCCESS -/obj/machinery/plumbing/input/Initialize(mapload, bolt, layer) - . = ..() - AddComponent(/datum/component/plumbing/simple_supply, bolt, layer) + return ITEM_INTERACT_BLOCKING -///We can fill beakers in here and everything. we dont inheret from input because it has nothing that we need -/obj/machinery/plumbing/output - name = "output gate" - desc = "A manual output for plumbing systems, for taking reagents directly into containers." - icon_state = "pipe_output" - pass_flags_self = PASSMACHINE | LETPASSTHROW // Small - reagent_flags = TRANSPARENT | DRAINABLE +/obj/machinery/plumbing/plunger_act(obj/item/plunger/P, mob/living/user, reinforced) + user.balloon_alert_to_viewers("furiously plunging...") + if(do_after(user, 3 SECONDS, target = src)) + user.balloon_alert_to_viewers("finished plunging") + reagents.expose(get_turf(src), TOUCH) //splash on the floor + reagents.clear_reagents() -/obj/machinery/plumbing/output/Initialize(mapload, bolt, layer) - . = ..() - AddComponent(/datum/component/plumbing/simple_demand, bolt, layer) +/** + * Specialized reagent container for plumbing. Uses the round robin approach of transferring reagents + * so transfer 5 from 15 water, 15 sugar and 15 plasma becomes 10, 15, 15 instead of 13.3333, 13.3333 13.3333. Good if you hate floating point errors + */ +/datum/reagents/plumbing + +/datum/reagents/plumbing/trans_to( + atom/target, + amount = 1, + multiplier = 1, //unused for plumbing + datum/reagent/target_id, + preserve_data = TRUE, //unused for plumbing + no_react = FALSE, //unused for plumbing we always want reactions + mob/transferred_by, //unused for plumbing logging is not important inside plumbing machines + remove_blacklisted = FALSE, //unused for plumbing, we don't care what reagents are inside us + methods = NONE, //unused for plumbing + show_message = TRUE, //unused for plumbing, used for logging only + ignore_stomach = FALSE //unused for plumbing, reagents flow only between machines & is not injected to mobs at any point in time +) + if(QDELETED(target) || !total_volume) + return FALSE + + if(!IS_FINITE(amount)) + stack_trace("non finite amount passed to trans_to [amount] amount of reagents") + return FALSE + + if(!isnull(target_id) && !ispath(target_id)) + stack_trace("invalid target reagent id [target_id] passed to trans_to") + return FALSE + + var/datum/reagents/target_holder + if(istype(target, /datum/reagents)) + target_holder = target + else + target_holder = target.reagents + + var/cached_amount = amount + + // Prevents small amount problems, as well as zero and below zero amounts. + amount = round(min(amount, total_volume, target_holder.maximum_volume - target_holder.total_volume), CHEMICAL_QUANTISATION_LEVEL) + if(amount <= 0) + return FALSE + + //Set up new reagents to inherit the old ongoing reactions + transfer_reactions(target_holder) + + var/list/cached_reagents = reagent_list + var/list/reagents_to_remove = list() + var/transfer_amount + var/transfered_amount + var/to_transfer = amount + var/total_transfered_amount = 0 + + //first add reagents to target + for(var/datum/reagent/reagent as anything in cached_reagents) + if(!to_transfer) + break + + if(!isnull(target_id)) + if(reagent.type == target_id) + force_stop_reagent_reacting(reagent) + transfer_amount = min(to_transfer, reagent.volume) + else + continue + else + transfer_amount = min(to_transfer, reagent.volume) -/obj/machinery/plumbing/output/tap - name = "drinking tap" - desc = "A manual output for plumbing systems, for taking drinks directly into glasses." - icon_state = "tap_output" + if(reagent.intercept_reagents_transfer(target_holder, cached_amount)) + continue -/obj/machinery/plumbing/tank - name = "chemical tank" - desc = "A massive chemical holding tank." - icon_state = "tank" - buffer = 400 + transfered_amount = target_holder.add_reagent(reagent.type, transfer_amount * multiplier, copy_data(reagent), chem_temp, reagent.purity, reagent.ph, no_react = TRUE, ignore_splitting = reagent.chemical_flags & REAGENT_DONOTSPLIT) //we only handle reaction after every reagent has been transferred. + if(!transfered_amount) + continue + reagents_to_remove += list(list("R" = reagent, "T" = transfer_amount)) + total_transfered_amount += transfered_amount + to_transfer -= transfered_amount -/obj/machinery/plumbing/tank/Initialize(mapload, bolt, layer) - . = ..() - AddComponent(/datum/component/plumbing/tank, bolt, layer) + if(!isnull(target_id)) + break -///Layer manifold machine that connects a bunch of layers -/obj/machinery/plumbing/layer_manifold - name = "layer manifold" - desc = "A plumbing manifold for layers." - icon_state = "manifold" - density = FALSE + //remove chemicals that were added above + for(var/list/data as anything in reagents_to_remove) + var/datum/reagent/reagent = data["R"] + transfer_amount = data["T"] + remove_reagent(reagent.type, transfer_amount) -/obj/machinery/plumbing/layer_manifold/Initialize(mapload, bolt, layer) - . = ..() + //handle reactions + target_holder.handle_reactions() + src.handle_reactions() - AddComponent(/datum/component/plumbing/manifold, bolt, FIRST_DUCT_LAYER) - AddComponent(/datum/component/plumbing/manifold, bolt, SECOND_DUCT_LAYER) - AddComponent(/datum/component/plumbing/manifold, bolt, THIRD_DUCT_LAYER) - AddComponent(/datum/component/plumbing/manifold, bolt, FOURTH_DUCT_LAYER) - AddComponent(/datum/component/plumbing/manifold, bolt, FIFTH_DUCT_LAYER) + return round(total_transfered_amount, CHEMICAL_VOLUME_ROUNDING) diff --git a/code/modules/plumbing/plumbers/grinder_chemical.dm b/code/modules/plumbing/plumbers/grinder_chemical.dm index f75ec94f21c22..bd0a69e6d5e86 100644 --- a/code/modules/plumbing/plumbers/grinder_chemical.dm +++ b/code/modules/plumbing/plumbers/grinder_chemical.dm @@ -7,6 +7,9 @@ reagent_flags = TRANSPARENT | DRAINABLE buffer = 400 + /// Are we grinding or juicing + var/grinding = TRUE + /obj/machinery/plumbing/grinder_chemical/Initialize(mapload, bolt, layer) . = ..() AddComponent(/datum/component/plumbing/simple_supply, bolt, layer) @@ -15,17 +18,74 @@ ) AddElement(/datum/element/connect_loc, loc_connections) -/obj/machinery/plumbing/grinder_chemical/attackby(obj/item/weapon, mob/user, params) - if(istype(weapon, /obj/item/storage/bag)) - to_chat(user, span_notice("You dump items from [weapon] into the grinder.")) - for(var/obj/item/obj_item in weapon.contents) - grind(obj_item) - else - to_chat(user, span_notice("You attempt to grind [weapon].")) - grind(weapon) +/obj/machinery/plumbing/grinder_chemical/examine(mob/user) + . = ..() + + . += span_notice("Use empty hand to change operation mode. Currently [grinding ? "Grinding" : "Juicing"]") + +/** + * Check if the user can interact with the grinder + * Arguments + * + * * mob/user - the player we are checking for + */ +/obj/machinery/plumbing/grinder_chemical/proc/check_interactable(mob/user) + PRIVATE_PROC(TRUE) + return can_interact(user) + +/obj/machinery/plumbing/grinder_chemical/attack_hand(mob/living/user, list/modifiers) + if(user.combat_mode || !user.can_perform_action(src, ALLOW_SILICON_REACH | FORBID_TELEKINESIS_REACH)) + return FALSE + + var/list/options = list() + + var/static/radial_grind = image(icon = 'icons/hud/radial.dmi', icon_state = "radial_grind") + options["grind"] = radial_grind + + var/static/radial_juice = image(icon = 'icons/hud/radial.dmi', icon_state = "radial_juice") + options["juice"] = radial_juice + + var/choice = show_radial_menu( + user, + src, + options, + custom_check = CALLBACK(src, PROC_REF(check_interactable), user), + ) + if(!choice) + return FALSE + + grinding = (choice == "grind") return TRUE +/obj/machinery/plumbing/grinder_chemical/item_interaction(mob/living/user, obj/item/tool, list/modifiers) + . = NONE + if(user.combat_mode || !user.can_perform_action(src, ALLOW_SILICON_REACH | FORBID_TELEKINESIS_REACH)) + return ITEM_INTERACT_SKIP_TO_ATTACK + + if(istype(tool, /obj/item/construction/plumbing)) + return tool.interact_with_atom(src, user, modifiers) + else if(istype(tool, /obj/item/plunger)) + return + else if(istype(tool, /obj/item/storage/bag)) + if(!anchored) + to_chat(user, span_warning("Anchor first to start [grinding ? "grind" : "juice"].")) + return ITEM_INTERACT_BLOCKING + + to_chat(user, span_notice("You dump items from [tool] into the grinder.")) + for(var/obj/item/obj_item in tool.contents) + grind(obj_item) + return ITEM_INTERACT_SUCCESS + else if(!tool.tool_behaviour) + var/action = "[grinding ? "grind" : "juice"]" + if(!anchored) + to_chat(user, span_warning("Anchor first to star [action].")) + return ITEM_INTERACT_BLOCKING + + to_chat(user, span_notice("You attempt to [action] [tool].")) + grind(tool) + return ITEM_INTERACT_SUCCESS + /obj/machinery/plumbing/grinder_chemical/CanAllowThrough(atom/movable/mover, border_dir) . = ..() if(!anchored) @@ -37,7 +97,7 @@ /obj/machinery/plumbing/grinder_chemical/proc/on_entered(datum/source, atom/movable/AM) SIGNAL_HANDLER - grind(AM) + INVOKE_ASYNC(src, PROC_REF(grind), AM) /** * Grinds/Juices the atom @@ -45,7 +105,9 @@ * * [AM][atom] - the atom to grind or juice */ /obj/machinery/plumbing/grinder_chemical/proc/grind(atom/AM) - if(!is_operational) + PRIVATE_PROC(TRUE) + + if(!is_operational || !anchored) return if(reagents.holder_full()) return @@ -53,11 +115,15 @@ return var/obj/item/I = AM + if((I.item_flags & ABSTRACT) || (I.flags_1 & HOLOGRAM_1)) + return + var/result - if(I.grind_results) - result = I.grind(reagents, usr) - else + if(!grinding) result = I.juice(reagents, usr) + else if(length(I.grind_results) || I.reagents?.total_volume) + result = I.grind(reagents, usr) + + use_energy(active_power_usage) if(result) - use_energy(active_power_usage) qdel(I) diff --git a/code/modules/plumbing/plumbers/iv_drip.dm b/code/modules/plumbing/plumbers/iv_drip.dm index 6e2585553849c..45c2ebca27acb 100644 --- a/code/modules/plumbing/plumbers/iv_drip.dm +++ b/code/modules/plumbing/plumbers/iv_drip.dm @@ -10,7 +10,7 @@ /obj/machinery/iv_drip/plumbing/Initialize(mapload, bolt, layer) . = ..() - AddComponent(/datum/component/plumbing/iv_drip, bolt, layer) + AddComponent(/datum/component/plumbing/simple_demand, bolt, layer) AddComponent(/datum/component/simple_rotation) /obj/machinery/iv_drip/plumbing/add_context(atom/source, list/context, obj/item/held_item, mob/living/user) diff --git a/code/modules/plumbing/plumbers/simple_machines.dm b/code/modules/plumbing/plumbers/simple_machines.dm new file mode 100644 index 0000000000000..c2ef308297324 --- /dev/null +++ b/code/modules/plumbing/plumbers/simple_machines.dm @@ -0,0 +1,57 @@ +///We can empty beakers in here and everything +/obj/machinery/plumbing/input + name = "input gate" + desc = "Can be manually filled with reagents from containers." + icon_state = "pipe_input" + pass_flags_self = PASSMACHINE | LETPASSTHROW // Small + reagent_flags = TRANSPARENT | REFILLABLE + +/obj/machinery/plumbing/input/Initialize(mapload, bolt, layer) + . = ..() + AddComponent(/datum/component/plumbing/simple_supply, bolt, layer) + +///We can fill beakers in here and everything. we dont inheret from input because it has nothing that we need +/obj/machinery/plumbing/output + name = "output gate" + desc = "A manual output for plumbing systems, for taking reagents directly into containers." + icon_state = "pipe_output" + pass_flags_self = PASSMACHINE | LETPASSTHROW // Small + reagent_flags = TRANSPARENT | DRAINABLE + reagents = /datum/reagents + +/obj/machinery/plumbing/output/Initialize(mapload, bolt, layer) + . = ..() + AddComponent(/datum/component/plumbing/simple_demand, bolt, layer) + +///For pouring reagents from ducts directly into cups +/obj/machinery/plumbing/output/tap + name = "drinking tap" + desc = "A manual output for plumbing systems, for taking drinks directly into glasses." + icon_state = "tap_output" + +///For storing large volume of reagents +/obj/machinery/plumbing/tank + name = "chemical tank" + desc = "A massive chemical holding tank." + icon_state = "tank" + buffer = 400 + +/obj/machinery/plumbing/tank/Initialize(mapload, bolt, layer) + . = ..() + AddComponent(/datum/component/plumbing/tank, bolt, layer) + +///Layer manifold machine that connects a bunch of layers +/obj/machinery/plumbing/layer_manifold + name = "layer manifold" + desc = "A plumbing manifold for layers." + icon_state = "manifold" + density = FALSE + +/obj/machinery/plumbing/layer_manifold/Initialize(mapload, bolt, layer) + . = ..() + + AddComponent(/datum/component/plumbing/manifold, bolt, FIRST_DUCT_LAYER) + AddComponent(/datum/component/plumbing/manifold, bolt, SECOND_DUCT_LAYER) + AddComponent(/datum/component/plumbing/manifold, bolt, THIRD_DUCT_LAYER) + AddComponent(/datum/component/plumbing/manifold, bolt, FOURTH_DUCT_LAYER) + AddComponent(/datum/component/plumbing/manifold, bolt, FIFTH_DUCT_LAYER) diff --git a/code/modules/plumbing/plumbers/teleporter.dm b/code/modules/plumbing/plumbers/teleporter.dm index df79220d15a8c..46c46d594f6f6 100644 --- a/code/modules/plumbing/plumbers/teleporter.dm +++ b/code/modules/plumbing/plumbers/teleporter.dm @@ -12,15 +12,10 @@ . = ..() AddComponent(/datum/component/plumbing/simple_demand, bolt, layer) -/obj/machinery/plumbing/sender/multitool_act(mob/living/user, obj/item/I) - if(!multitool_check_buffer(user, I)) - return - - var/obj/item/multitool/M = I - +/obj/machinery/plumbing/sender/multitool_act(mob/living/user, obj/item/multitool/M) if(!istype(M.buffer, /obj/machinery/plumbing/receiver)) to_chat(user, span_warning("Invalid buffer.")) - return + return ITEM_INTERACT_BLOCKING if(target) lose_teleport_target() @@ -28,7 +23,7 @@ set_teleport_target(M.buffer) to_chat(user, span_green("You succesfully link [src] to the [M.buffer].")) - return TRUE + return ITEM_INTERACT_SUCCESS ///Lose our previous target and make our previous target lose us. Seperate proc because I feel like I'll need this again /obj/machinery/plumbing/sender/proc/lose_teleport_target() @@ -67,14 +62,10 @@ . = ..() AddComponent(/datum/component/plumbing/simple_supply, bolt) -/obj/machinery/plumbing/receiver/multitool_act(mob/living/user, obj/item/I) - if(!multitool_check_buffer(user, I)) - return - - var/obj/item/multitool/M = I +/obj/machinery/plumbing/receiver/multitool_act(mob/living/user, obj/item/multitool/M) M.set_buffer(src) balloon_alert(user, "saved to multitool buffer") - return TRUE + return ITEM_INTERACT_SUCCESS /obj/machinery/plumbing/receiver/process(seconds_per_tick) if(!is_operational || panel_open) diff --git a/code/modules/plumbing/plumbers/vatgrower.dm b/code/modules/plumbing/plumbers/vatgrower.dm index 7327a648dadce..1dcfb08e0cce0 100644 --- a/code/modules/plumbing/plumbers/vatgrower.dm +++ b/code/modules/plumbing/plumbers/vatgrower.dm @@ -11,9 +11,9 @@ var/resampler_active = FALSE ///Add that sexy demnand component -/obj/machinery/plumbing/growing_vat/Initialize(mapload, bolt) +/obj/machinery/plumbing/growing_vat/Initialize(mapload, bolt, layer) . = ..() - AddComponent(/datum/component/plumbing/simple_demand, bolt) + AddComponent(/datum/component/plumbing/simple_demand, bolt, layer) /obj/machinery/plumbing/growing_vat/create_reagents(max_vol, flags) . = ..() diff --git a/code/modules/power/apc/apc_attack.dm b/code/modules/power/apc/apc_attack.dm index b57f3465f0d82..2752ae3c2bfdf 100644 --- a/code/modules/power/apc/apc_attack.dm +++ b/code/modules/power/apc/apc_attack.dm @@ -29,7 +29,7 @@ return var/charge_limit = ETHEREAL_CHARGE_DANGEROUS - APC_POWER_GAIN var/obj/item/organ/internal/stomach/ethereal/stomach = maybe_stomach - var/obj/item/stock_parts/cell/stomach_cell = stomach.cell + var/obj/item/stock_parts/power_store/stomach_cell = stomach.cell if(!((stomach?.drain_time < world.time) && LAZYACCESS(modifiers, RIGHT_CLICK))) return if(ethereal.combat_mode) @@ -85,7 +85,7 @@ return /obj/machinery/power/apc/blob_act(obj/structure/blob/B) - set_broken() + atom_break() /obj/machinery/power/apc/take_damage(damage_amount, damage_type = BRUTE, damage_flag = "", sound_effect = TRUE, attack_dir, armor_penetration = 0) // APC being at 0 integrity doesnt delete it outright. Combined with take_damage this might cause runtimes. @@ -100,34 +100,20 @@ return damage_amount . = ..() -/obj/machinery/power/apc/atom_break(damage_flag) - . = ..() - if(.) - set_broken() - /obj/machinery/power/apc/proc/can_use(mob/user, loud = 0) //used by attack_hand() and Topic() if(isAdminGhostAI(user)) return TRUE if(!HAS_SILICON_ACCESS(user)) return TRUE - var/mob/living/silicon/ai/AI = user - var/mob/living/silicon/robot/robot = user - if(aidisabled || malfhack && istype(malfai) && ((istype(AI) && (malfai != AI && malfai != AI.parent)) || (istype(robot) && (robot in malfai.connected_robots)))) - if(!loud) - balloon_alert(user, "it's disabled!") - return FALSE - return TRUE - -/obj/machinery/power/apc/proc/set_broken() - if(machine_stat & BROKEN) - return - if(malfai && operating) - malfai.malf_picker.processing_time = clamp(malfai.malf_picker.processing_time - 10,0,1000) - operating = FALSE - atom_break() - if(occupier) - malfvacate(TRUE) - update() + . = TRUE + if(isAI(user) || iscyborg(user)) + if(aidisabled) + . = FALSE + else if(istype(malfai) && !(malfai == user || (user in malfai.connected_robots))) + . = FALSE + if (!. && !loud) + balloon_alert(user, "it's disabled!") + return . /obj/machinery/power/apc/proc/shock(mob/user, prb) if(!prob(prb)) diff --git a/code/modules/power/apc/apc_contextual_tips.dm b/code/modules/power/apc/apc_contextual_tips.dm index 4fe6458e4eba9..ad109cd397a06 100644 --- a/code/modules/power/apc/apc_contextual_tips.dm +++ b/code/modules/power/apc/apc_contextual_tips.dm @@ -43,8 +43,8 @@ if (opened == APC_COVER_OPENED && !has_electronics) context[SCREENTIP_CONTEXT_LMB] = "Disassemble the APC" - else if(istype(held_item, /obj/item/stock_parts/cell) && opened == APC_COVER_OPENED) - context[SCREENTIP_CONTEXT_LMB] = "Insert Cell" + else if(istype(held_item, /obj/item/stock_parts/power_store/battery) && opened == APC_COVER_OPENED) + context[SCREENTIP_CONTEXT_LMB] = "Insert Battery" else if(istype(held_item, /obj/item/stack/cable_coil) && opened == APC_COVER_OPENED) context[SCREENTIP_CONTEXT_LMB] = "Create wire terminal" @@ -56,7 +56,7 @@ if (!has_electronics) context[SCREENTIP_CONTEXT_LMB] = "Insert an APC board" else if(!cell) - context[SCREENTIP_CONTEXT_LMB] = "Insert a cell" + context[SCREENTIP_CONTEXT_LMB] = "Insert a battery" else if(istype(held_item, /obj/item/wallframe/apc)) context[SCREENTIP_CONTEXT_LMB] = "Replace damaged frame" diff --git a/code/modules/power/apc/apc_main.dm b/code/modules/power/apc/apc_main.dm index 0baf800fa1037..329f77ab7186d 100644 --- a/code/modules/power/apc/apc_main.dm +++ b/code/modules/power/apc/apc_main.dm @@ -5,6 +5,9 @@ // may be opened to change power cell // three different channels (lighting/equipment/environ) - may each be set to on, off, or auto +///Cap for how fast cells charge, as a percentage per second (.01 means cellcharge is capped to 1% per second) +#define CHARGELEVEL 0.01 + /obj/machinery/power/apc name = "area power controller" desc = "A control terminal for the area's electrical systems." @@ -17,6 +20,7 @@ damage_deflection = 10 resistance_flags = FIRE_PROOF interaction_flags_machine = INTERACT_MACHINE_WIRES_IF_OPEN | INTERACT_MACHINE_ALLOW_SILICON | INTERACT_MACHINE_OPEN_SILICON + interaction_flags_click = ALLOW_SILICON_REACH processing_flags = START_PROCESSING_MANUALLY ///Range of the light emitted when on @@ -26,11 +30,11 @@ ///Mapper helper to tie an apc to another area var/areastring = null ///Reference to our internal cell - var/obj/item/stock_parts/cell/cell + var/obj/item/stock_parts/power_store/cell ///Initial cell charge % var/start_charge = 90 ///Type of cell we start with - var/cell_type = /obj/item/stock_parts/cell/upgraded //Base cell has 2500 capacity. Enter the path of a different cell you want to use. cell determines charge rates, max capacity, ect. These can also be changed with other APC vars, but isn't recommended to minimize the risk of accidental usage of dirty editted APCs + var/cell_type = /obj/item/stock_parts/power_store/battery/upgraded //Base cell has 2500 capacity. Enter the path of a different cell you want to use. cell determines charge rates, max capacity, ect. These can also be changed with other APC vars, but isn't recommended to minimize the risk of accidental usage of dirty editted APCs ///State of the cover (closed, opened, removed) var/opened = APC_COVER_CLOSED ///Is the APC shorted and not working? @@ -227,8 +231,11 @@ find_and_hang_on_wall() /obj/machinery/power/apc/Destroy() - if(malfai && operating) - malfai.malf_picker.processing_time = clamp(malfai.malf_picker.processing_time - 10, 0, 1000) + if(malfai) + if(operating) + malfai.malf_picker.processing_time = clamp(malfai.malf_picker.processing_time - 10, 0, 1000) + malfai.hacked_apcs -= src + malfai = null disconnect_from_area() QDEL_NULL(alarm_manager) if(occupier) @@ -243,37 +250,51 @@ /obj/machinery/power/apc/proc/on_saboteur(datum/source, disrupt_duration) SIGNAL_HANDLER + + disrupt_duration *= 0.1 // so, turns out, failure timer is in seconds, not deciseconds; without this, disruptions last 10 times as long as they probably should energy_fail(disrupt_duration) return COMSIG_SABOTEUR_SUCCESS +/obj/machinery/power/apc/on_set_is_operational(old_value) + update_area_power_usage(!old_value) + +/obj/machinery/power/apc/update_name(updates) + . = ..() + if(auto_name) + name = "\improper [get_area_name(area, TRUE)] APC" + /obj/machinery/power/apc/proc/assign_to_area(area/target_area = get_area(src)) if(area == target_area) return disconnect_from_area() area = target_area - area.power_light = TRUE - area.power_equip = TRUE - area.power_environ = TRUE - area.power_change() + update_area_power_usage(TRUE) area.apc = src auto_name = TRUE update_appearance(UPDATE_NAME) -/obj/machinery/power/apc/update_name(updates) - . = ..() - if(auto_name) - name = "\improper [get_area_name(area, TRUE)] APC" +/obj/machinery/power/apc/proc/update_area_power_usage(state) + //apc is non functional so force disable + if(state && (has_electronics != APC_ELECTRONICS_SECURED || (machine_stat & (BROKEN | MAINT)) || QDELETED(cell))) + state = FALSE + + //no change in value + if(state == area.power_light && state == area.power_equip && state == area.power_environ) + return + + area.power_light = state + area.power_equip = state + area.power_environ = state + + area.power_change() /obj/machinery/power/apc/proc/disconnect_from_area() if(isnull(area)) return - area.power_light = FALSE - area.power_equip = FALSE - area.power_environ = FALSE - area.power_change() + update_area_power_usage(FALSE) area.apc = null area = null @@ -310,9 +331,16 @@ else . += "The cover is closed." -/obj/machinery/power/apc/on_deconstruction(disassembled = TRUE) - if(!(machine_stat & BROKEN)) - set_broken() +/obj/machinery/power/apc/atom_break(damage_flag) + . = ..() + if(.) + if(malfai && operating) + malfai.malf_picker.processing_time = clamp(malfai.malf_picker.processing_time - 10, 0, 1000) + operating = FALSE + if(occupier) + malfvacate(TRUE) + update() + if(opened != APC_COVER_REMOVED) opened = APC_COVER_REMOVED coverlocked = FALSE @@ -582,7 +610,7 @@ // now trickle-charge the cell if(chargemode && operating && excess && cell.used_charge()) // Max charge is capped to % per second constant. - lastused_total += charge_cell(min(cell.chargerate, cell.maxcharge * GLOB.CHARGELEVEL) * seconds_per_tick, cell = cell, grid_only = TRUE, channel = AREA_USAGE_APC_CHARGE) + lastused_total += charge_cell(min(cell.chargerate, cell.maxcharge * CHARGELEVEL) * seconds_per_tick, cell = cell, grid_only = TRUE, channel = AREA_USAGE_APC_CHARGE) charging = APC_CHARGING // show cell as fully charged if so @@ -661,12 +689,12 @@ ///Used for cell_5k apc helper, which installs 5k cell into apc. /obj/machinery/power/apc/proc/install_cell_5k() - cell_type = /obj/item/stock_parts/cell/upgraded/plus + cell_type = /obj/item/stock_parts/power_store/battery/upgraded cell = new cell_type(src) /// Used for cell_10k apc helper, which installs 10k cell into apc. /obj/machinery/power/apc/proc/install_cell_10k() - cell_type = /obj/item/stock_parts/cell/high + cell_type = /obj/item/stock_parts/power_store/battery/high cell = new cell_type(src) /// Used for unlocked apc helper, which unlocks the apc. @@ -697,6 +725,8 @@ /obj/machinery/power/apc/proc/draw_energy(amount) var/grid_used = min(terminal?.surplus(), amount) terminal?.add_load(grid_used) + if(QDELETED(cell)) + return grid_used var/cell_used = 0 if(amount > grid_used) cell_used += cell.use(amount - grid_used, force = TRUE) @@ -720,3 +750,5 @@ return round(energy_to_power(required_joules / trickle_charge_power) * SSmachines.wait + SSmachines.wait, SSmachines.wait) return null + +#undef CHARGELEVEL diff --git a/code/modules/power/apc/apc_malf.dm b/code/modules/power/apc/apc_malf.dm index dee0d95de4daa..1419e12c46be3 100644 --- a/code/modules/power/apc/apc_malf.dm +++ b/code/modules/power/apc/apc_malf.dm @@ -1,7 +1,7 @@ /obj/machinery/power/apc/proc/get_malf_status(mob/living/silicon/ai/malf) if(!istype(malf) || !malf.malf_picker) return APC_AI_NO_MALF - if(malfai != (malf.parent || malf)) + if(malfai != malf) return APC_AI_NO_HACK if(occupier == malf) return APC_AI_HACK_SHUNT_HERE @@ -12,7 +12,7 @@ /obj/machinery/power/apc/proc/malfhack(mob/living/silicon/ai/malf) if(!istype(malf)) return - if(get_malf_status(malf) != 1) + if(get_malf_status(malf) != APC_AI_NO_HACK) return if(malf.malfhacking) to_chat(malf, span_warning("You are already hacking an APC!")) @@ -36,19 +36,23 @@ return if(!is_station_level(z)) return + INVOKE_ASYNC(src, PROC_REF(malfshunt), malf) + +/obj/machinery/power/apc/proc/malfshunt(mob/living/silicon/ai/malf) + var/confirm = tgui_alert(malf, "Are you sure that you want to shunt? This will take you out of your core!", "Shunt to [name]?", list("Yes", "No")) + if(confirm != "Yes") + return malf.ShutOffDoomsdayDevice() - occupier = new /mob/living/silicon/ai(src, malf.laws.copy_lawset(), malf) //DEAR GOD WHY? //IKR???? - occupier.adjustOxyLoss(malf.getOxyLoss()) + occupier = malf + if (isturf(malf.loc)) // create a deactivated AI core if the AI isn't coming from an emergency mech shunt + malf.linked_core = new /obj/structure/ai_core/deactivated + malf.linked_core.remote_ai = malf // note that we do not set the deactivated core's core_mmi.brainmob + malf.forceMove(src) // move INTO the APC, not to its tile if(!findtext(occupier.name, "APC Copy")) occupier.name = "[malf.name] APC Copy" - if(malf.parent) - occupier.parent = malf.parent - else - occupier.parent = malf malf.shunted = TRUE occupier.eyeobj.name = "[occupier.name] (AI Eye)" - if(malf.parent) - qdel(malf) + occupier.eyeobj.forceMove(src.loc) for(var/obj/item/pinpointer/nuke/disk_pinpointers in GLOB.pinpointer_list) disk_pinpointers.switch_mode_to(TRACK_MALF_AI) //Pinpointer will track the shunted AI var/datum/action/innate/core_return/return_action = new @@ -58,12 +62,11 @@ /obj/machinery/power/apc/proc/malfvacate(forced) if(!occupier) return - if(occupier.parent && occupier.parent.stat != DEAD) - occupier.mind.transfer_to(occupier.parent) - occupier.parent.shunted = FALSE - occupier.parent.setOxyLoss(occupier.getOxyLoss()) - occupier.parent.cancel_camera() - qdel(occupier) + if(occupier.linked_core) + occupier.shunted = FALSE + occupier.forceMove(occupier.linked_core.loc) + qdel(occupier.linked_core) + occupier.cancel_camera() return to_chat(occupier, span_danger("Primary core damaged, unable to return core processes.")) if(forced) @@ -89,7 +92,7 @@ if(!occupier.mind || !occupier.client) to_chat(user, span_warning("[occupier] is either inactive or destroyed!")) return FALSE - if(!occupier.parent.stat) + if(occupier.linked_core) //if they have an active linked_core, they can't be transferred from an APC to_chat(user, span_warning("[occupier] is refusing all attempts at transfer!") ) return FALSE if(transfer_in_progress) @@ -127,7 +130,7 @@ to_chat(occupier, span_notice("Transfer complete! You've been stored in [user]'s [card.name].")) occupier.forceMove(card) card.AI = occupier - occupier.parent.shunted = FALSE + occupier.shunted = FALSE occupier.cancel_camera() occupier = null transfer_in_progress = FALSE diff --git a/code/modules/power/apc/apc_tool_act.dm b/code/modules/power/apc/apc_tool_act.dm index 0116205fdd4ca..2072ab145614d 100644 --- a/code/modules/power/apc/apc_tool_act.dm +++ b/code/modules/power/apc/apc_tool_act.dm @@ -11,7 +11,7 @@ togglelock(user) return ITEM_INTERACT_SUCCESS - if(istype(tool, /obj/item/stock_parts/cell)) + if(istype(tool, /obj/item/stock_parts/power_store)) . = cell_act(user, tool) else if(istype(tool, /obj/item/stack/cable_coil)) . = cable_act(user, tool, LAZYACCESS(modifiers, RIGHT_CLICK)) @@ -52,7 +52,7 @@ return ITEM_INTERACT_SUCCESS /// Called when we interact with the APC with a cell, attempts to insert it -/obj/machinery/power/apc/proc/cell_act(mob/living/user, obj/item/stock_parts/cell/new_cell) +/obj/machinery/power/apc/proc/cell_act(mob/living/user, obj/item/stock_parts/power_store/new_cell) if(!opened) return NONE @@ -184,7 +184,7 @@ return ITEM_INTERACT_BLOCKING if(!pseudocircuit.adapt_circuit(user, circuit_cost = 0.5 * STANDARD_CELL_CHARGE)) return ITEM_INTERACT_BLOCKING - var/obj/item/stock_parts/cell/crap/empty/bad_cell = new(src) + var/obj/item/stock_parts/power_store/battery/crap/empty/bad_cell = new(src) bad_cell.forceMove(src) cell = bad_cell user.visible_message( @@ -424,7 +424,7 @@ if(machine_stat & MAINT) balloon_alert(user, "no board for a cell!") return FALSE - var/obj/item/stock_parts/cell/crap/empty/C = new(src) + var/obj/item/stock_parts/power_store/battery/crap/empty/C = new(src) C.forceMove(src) cell = C balloon_alert(user, "power cell installed") @@ -484,7 +484,7 @@ else if(machine_stat & (BROKEN|MAINT)) balloon_alert(user, "nothing happens!") else - if(allowed(usr) && !wires.is_cut(WIRE_IDSCAN) && !malfhack && !remote_control_user) + if(allowed(usr) && !wires.is_cut(WIRE_IDSCAN) && ((!malfhack && !remote_control_user) || (malfhack && (malfai == user || (user in malfai.connected_robots))))) locked = !locked balloon_alert(user, locked ? "locked" : "unlocked") update_appearance() diff --git a/code/modules/power/battery.dm b/code/modules/power/battery.dm new file mode 100644 index 0000000000000..8a6be8d85aa5f --- /dev/null +++ b/code/modules/power/battery.dm @@ -0,0 +1,79 @@ +/obj/item/stock_parts/power_store/battery + name = "megacell" + desc = "A series of rechargeable electrochemical cells wired together to hold significantly more power than a standard power cell." + icon = 'icons/obj/machines/cell_charger.dmi' + icon_state = "cellbig" + cell_size_prefix = "cellbig" + inhand_icon_state = "cell" + lefthand_file = 'icons/mob/inhands/items/devices_lefthand.dmi' + righthand_file = 'icons/mob/inhands/items/devices_righthand.dmi' + w_class = WEIGHT_CLASS_NORMAL + force = 10 + throwforce = 5 + throw_speed = 2 + throw_range = 2 + custom_materials = list(/datum/material/iron=SMALL_MATERIAL_AMOUNT*12, /datum/material/glass=SMALL_MATERIAL_AMOUNT*2) + grind_results = list(/datum/reagent/lithium = 60, /datum/reagent/iron = 10, /datum/reagent/silicon = 10) + rating_base = STANDARD_BATTERY_CHARGE + maxcharge = STANDARD_BATTERY_CHARGE + chargerate = STANDARD_BATTERY_RATE + +/obj/item/stock_parts/power_store/battery/empty + empty = TRUE + +/obj/item/stock_parts/power_store/battery/upgraded + name = "upgraded megacell" + desc = "A battery with a slightly higher capacity than normal!" + maxcharge = STANDARD_BATTERY_CHARGE * 2.5 + custom_materials = list(/datum/material/glass=SMALL_MATERIAL_AMOUNT*2.5) + chargerate = STANDARD_BATTERY_RATE * 0.5 + +/obj/item/stock_parts/power_store/battery/high + name = "high-capacity megacell" + icon_state = "hcellbig" + maxcharge = STANDARD_BATTERY_CHARGE * 10 + custom_materials = list(/datum/material/glass=SMALL_MATERIAL_AMOUNT * 3) + chargerate = STANDARD_BATTERY_RATE * 0.75 + +/obj/item/stock_parts/power_store/battery/high/empty + empty = TRUE + +/obj/item/stock_parts/power_store/battery/super + name = "super-capacity megacell" + icon_state = "scellbig" + maxcharge = STANDARD_BATTERY_CHARGE * 20 + custom_materials = list(/datum/material/glass=SMALL_MATERIAL_AMOUNT * 4) + chargerate = STANDARD_BATTERY_RATE + +/obj/item/stock_parts/power_store/battery/super/empty + empty = TRUE + +/obj/item/stock_parts/power_store/battery/hyper + name = "hyper-capacity megacell" + icon_state = "hpcellbig" + maxcharge = STANDARD_BATTERY_CHARGE * 30 + custom_materials = list(/datum/material/glass=SMALL_MATERIAL_AMOUNT * 5) + chargerate = STANDARD_BATTERY_RATE * 1.5 + +/obj/item/stock_parts/power_store/battery/hyper/empty + empty = TRUE + +/obj/item/stock_parts/power_store/battery/bluespace + name = "bluespace megacell" + desc = "A rechargeable transdimensional megacell." + icon_state = "bscellbig" + maxcharge = STANDARD_BATTERY_CHARGE * 40 + custom_materials = list(/datum/material/glass=SMALL_MATERIAL_AMOUNT*6) + chargerate = STANDARD_BATTERY_RATE * 2 + +/obj/item/stock_parts/power_store/battery/bluespace/empty + empty = TRUE + +/obj/item/stock_parts/power_store/battery/crap + name = "\improper Nanotrasen brand rechargeable AA megacell" + desc = "You can't top the plasma top." //TOTALLY TRADEMARK INFRINGEMENT + maxcharge = STANDARD_BATTERY_CHARGE * 0.5 + custom_materials = list(/datum/material/glass=SMALL_MATERIAL_AMOUNT*1) + +/obj/item/stock_parts/power_store/battery/crap/empty + empty = TRUE diff --git a/code/modules/power/cable.dm b/code/modules/power/cable.dm index 2e95b12914650..a8e20cde8c7a0 100644 --- a/code/modules/power/cable.dm +++ b/code/modules/power/cable.dm @@ -505,7 +505,7 @@ GLOBAL_LIST_INIT(wire_node_generating_types, typecacheof(list(/obj/structure/gri if(!user) return - var/image/restraints_icon = image(icon = 'icons/obj/restraints.dmi', icon_state = "cuff") + var/image/restraints_icon = image(icon = 'icons/obj/weapons/restraints.dmi', icon_state = "cuff") restraints_icon.maptext = MAPTEXT("= CABLE_RESTRAINTS_COST ? "" : "style='color: red'"]>[CABLE_RESTRAINTS_COST]") restraints_icon.color = color @@ -575,7 +575,7 @@ GLOBAL_LIST_INIT(wire_node_generating_types, typecacheof(list(/obj/structure/gri user.visible_message(span_notice("[user] starts to fix some of the wires in [H]'s [affecting.name]."), span_notice("You start fixing some of the wires in [H == user ? "your" : "[H]'s"] [affecting.name].")) if(!do_after(user, 5 SECONDS, H)) return - if(item_heal_robotic(H, user, 0, 15)) + if(H.item_heal(user, 0, 15, "dents", "burnt wires", BODYTYPE_ROBOTIC)) use(1) return else @@ -758,9 +758,10 @@ GLOBAL_LIST(hub_radial_layer_list) C.deconstruct() // remove adversary cable auto_propagate_cut_cable(src) // update the powernets -/obj/structure/cable/multilayer/CtrlClick(mob/living/user) +/obj/structure/cable/multilayer/click_ctrl(mob/user) to_chat(user, span_warning("You push the reset button.")) addtimer(CALLBACK(src, PROC_REF(Reload)), 10, TIMER_UNIQUE) //spam protect + return CLICK_ACTION_SUCCESS // This is a mapping aid. In order for this to be placed on a map and function, all three layers need to have their nodes active /obj/structure/cable/multilayer/connected diff --git a/code/modules/power/cell.dm b/code/modules/power/cell.dm index db5791da43526..fbb36703cc569 100644 --- a/code/modules/power/cell.dm +++ b/code/modules/power/cell.dm @@ -1,13 +1,10 @@ -#define CELL_DRAIN_TIME 35 -#define CELL_POWER_GAIN (0.06 * STANDARD_CELL_CHARGE) -#define CELL_POWER_DRAIN (0.75 * STANDARD_CELL_CHARGE) /** * # Power cell * - * Batteries. + * Power cells, used primarily for handheld and portable things. Holds a reasonable amount of power. */ -/obj/item/stock_parts/cell +/obj/item/stock_parts/power_store/cell name = "power cell" desc = "A rechargeable electrochemical power cell." icon = 'icons/obj/machines/cell_charger.dmi' @@ -22,384 +19,109 @@ w_class = WEIGHT_CLASS_SMALL custom_materials = list(/datum/material/iron=SMALL_MATERIAL_AMOUNT*7, /datum/material/glass=SMALL_MATERIAL_AMOUNT*0.5) grind_results = list(/datum/reagent/lithium = 15, /datum/reagent/iron = 5, /datum/reagent/silicon = 5) - ///Current charge in cell units - var/charge = 0 - ///Maximum charge in cell units - var/maxcharge = STANDARD_CELL_CHARGE - ///If the cell has been booby-trapped by injecting it with plasma. Chance on use() to explode. - var/rigged = FALSE - ///If the power cell was damaged by an explosion, chance for it to become corrupted and function the same as rigged. - var/corrupted = FALSE - ///How much power is given per second in a recharger. - var/chargerate = STANDARD_CELL_RATE * 0.05 - ///If true, the cell will state it's maximum charge in it's description - var/ratingdesc = TRUE - ///If it's a grown that acts as a battery, add a wire overlay to it. - var/grown_battery = FALSE - ///What charge lige sprite to use, null if no light - var/charge_light_type = "standard" - ///What connector sprite to use when in a cell charger, null if no connectors - var/connector_type = "standard" - ///Does the cell start without any charge? - var/empty = FALSE - -/obj/item/stock_parts/cell/get_cell() - return src - -/obj/item/stock_parts/cell/Initialize(mapload, override_maxcharge) - . = ..() - create_reagents(5, INJECTABLE | DRAINABLE) - if (override_maxcharge) - maxcharge = override_maxcharge - rating = max(round(maxcharge / (STANDARD_CELL_CHARGE * 10), 1), 1) - if(!charge) - charge = maxcharge - if(empty) - charge = 0 - if(ratingdesc) - desc += " This one has a rating of [display_energy(maxcharge)][prob(10) ? ", and you should not swallow it" : ""]." //joke works better if it's not on every cell - update_appearance() - - RegisterSignal(src, COMSIG_ITEM_MAGICALLY_CHARGED, PROC_REF(on_magic_charge)) - var/static/list/loc_connections = list( - COMSIG_ITEM_MAGICALLY_CHARGED = PROC_REF(on_magic_charge), - ) - AddElement(/datum/element/connect_loc, loc_connections) - -/** - * Signal proc for [COMSIG_ITEM_MAGICALLY_CHARGED] - * - * If we, or the item we're located in, is subject to the charge spell, gain some charge back - */ -/obj/item/stock_parts/cell/proc/on_magic_charge(datum/source, datum/action/cooldown/spell/charge/spell, mob/living/caster) - SIGNAL_HANDLER - - // This shouldn't be running if we're not being held by a mob, - // or if we're not within an object being held by a mob, but just in case... - if(!ismovable(loc)) - return - - . = COMPONENT_ITEM_CHARGED - - if(prob(80)) - maxcharge -= STANDARD_CELL_CHARGE * 0.2 - - if(maxcharge <= 1) // Div by 0 protection - maxcharge = 1 - . |= COMPONENT_ITEM_BURNT_OUT - - charge = maxcharge - update_appearance() - - // Guns need to process their chamber when we've been charged - if(isgun(loc)) - var/obj/item/gun/gun_loc = loc - gun_loc.process_chamber() - - // The thing we're in might have overlays or icon states for whether the cell is charged - if(!ismob(loc)) - loc.update_appearance() - - return . - -/obj/item/stock_parts/cell/create_reagents(max_vol, flags) - . = ..() - RegisterSignals(reagents, list(COMSIG_REAGENTS_NEW_REAGENT, COMSIG_REAGENTS_ADD_REAGENT, COMSIG_REAGENTS_DEL_REAGENT, COMSIG_REAGENTS_REM_REAGENT), PROC_REF(on_reagent_change)) - RegisterSignal(reagents, COMSIG_QDELETING, PROC_REF(on_reagents_del)) - -/// Handles properly detaching signal hooks. -/obj/item/stock_parts/cell/proc/on_reagents_del(datum/reagents/reagents) - SIGNAL_HANDLER - UnregisterSignal(reagents, list(COMSIG_REAGENTS_NEW_REAGENT, COMSIG_REAGENTS_ADD_REAGENT, COMSIG_REAGENTS_DEL_REAGENT, COMSIG_REAGENTS_REM_REAGENT, COMSIG_QDELETING)) - return NONE - -/obj/item/stock_parts/cell/update_overlays() - . = ..() - if(grown_battery) - . += mutable_appearance('icons/obj/machines/cell_charger.dmi', "grown_wires") - if((charge < 0.01) || !charge_light_type) - return - . += mutable_appearance('icons/obj/machines/cell_charger.dmi', "cell-[charge_light_type]-o[(percent() >= 99.5) ? 2 : 1]") - -/obj/item/stock_parts/cell/vv_edit_var(vname, vval) - if(vname == NAMEOF(src, charge)) - charge = clamp(vval, 0, maxcharge) - return TRUE - if(vname == NAMEOF(src, maxcharge)) - if(charge > vval) - charge = vval - if(vname == NAMEOF(src, corrupted) && vval && !corrupted) - corrupt(TRUE) - return TRUE - return ..() - - -/** - * Returns the percentage of the cell's charge. - */ -/obj/item/stock_parts/cell/proc/percent() // return % charge of cell - return 100 * charge / maxcharge - -/** - * Returns the maximum charge of the cell. - */ -/obj/item/stock_parts/cell/proc/max_charge() - return maxcharge - -/** - * Returns the current charge of the cell. - */ -/obj/item/stock_parts/cell/proc/charge() - return charge - -/** - * Returns the amount of charge used on the cell. - */ -/obj/item/stock_parts/cell/proc/used_charge() - return maxcharge - charge - -/// Use power from the cell. -/// Args: -/// - used: Amount of power in joules to use. -/// - force: If true, uses the remaining power from the cell if there isn't enough power to supply the demand. -/// Returns: The power used from the cell in joules. -/obj/item/stock_parts/cell/use(used, force = FALSE) - var/power_used = min(used, charge) - if(rigged && power_used > 0) - explode() - return 0 // The cell decided to explode so we won't be able to use it. - if(!force && charge < used) - return 0 - charge -= power_used - if(!istype(loc, /obj/machinery/power/apc)) - SSblackbox.record_feedback("tally", "cell_used", 1, type) - return power_used - -/// Recharge the cell. -/// Args: -/// - amount: The amount of energy to give to the cell in joules. -/// Returns: The power given to the cell in joules. -/obj/item/stock_parts/cell/proc/give(amount) - var/power_used = min(maxcharge-charge,amount) - charge += power_used - if(rigged && amount > 0) - explode() - return power_used - -/** - * Changes the charge of the cell. - * Args: - * - amount: The energy to give to the cell (can be negative). - * Returns: The energy that was given to the cell (can be negative). - */ -/obj/item/stock_parts/cell/proc/change(amount) - var/energy_used = clamp(amount, -charge, maxcharge - charge) - charge += energy_used - if(rigged && energy_used) - explode() - return energy_used - -/obj/item/stock_parts/cell/examine(mob/user) - . = ..() - if(rigged) - . += span_danger("This power cell seems to be faulty!") - else - . += "The charge meter reads [CEILING(percent(), 0.1)]%." //so it doesn't say 0% charge when the overlay indicates it still has charge - -/obj/item/stock_parts/cell/suicide_act(mob/living/user) - user.visible_message(span_suicide("[user] is licking the electrodes of [src]! It looks like [user.p_theyre()] trying to commit suicide!")) - return FIRELOSS - -/obj/item/stock_parts/cell/proc/on_reagent_change(datum/reagents/holder, ...) - SIGNAL_HANDLER - rigged = (corrupted || holder.has_reagent(/datum/reagent/toxin/plasma, 5)) ? TRUE : FALSE //has_reagent returns the reagent datum - return NONE - - -/obj/item/stock_parts/cell/proc/explode() - if(!charge) - return - var/range_devastation = -1 - var/range_heavy = round(sqrt(charge / (3.6 * STANDARD_CELL_CHARGE))) - var/range_light = round(sqrt(charge / (0.9 * STANDARD_CELL_CHARGE))) - var/range_flash = range_light - if(!range_light) - rigged = FALSE - corrupt() - return - - message_admins("[ADMIN_LOOKUPFLW(usr)] has triggered a rigged/corrupted power cell explosion at [AREACOORD(loc)].") - usr?.log_message("triggered a rigged/corrupted power cell explosion", LOG_GAME) - usr?.log_message("triggered a rigged/corrupted power cell explosion", LOG_VICTIM, log_globally = FALSE) - - explosion(src, devastation_range = range_devastation, heavy_impact_range = range_heavy, light_impact_range = range_light, flash_range = range_flash) - qdel(src) - -/obj/item/stock_parts/cell/proc/corrupt(force) - charge /= 2 - maxcharge = max(maxcharge/2, chargerate) - if (force || prob(10)) - rigged = TRUE //broken batterys are dangerous - corrupted = TRUE - -/obj/item/stock_parts/cell/emp_act(severity) - . = ..() - if(. & EMP_PROTECT_SELF) - return - use(STANDARD_CELL_CHARGE / severity, force = TRUE) - -/obj/item/stock_parts/cell/ex_act(severity, target) - . = ..() - if(QDELETED(src)) - return FALSE - - switch(severity) - if(EXPLODE_HEAVY) - if(prob(50)) - corrupt() - if(EXPLODE_LIGHT) - if(prob(25)) - corrupt() - - return TRUE - -/obj/item/stock_parts/cell/attack_self(mob/user) - if(ishuman(user)) - var/mob/living/carbon/human/H = user - var/obj/item/organ/internal/stomach/maybe_stomach = H.get_organ_slot(ORGAN_SLOT_STOMACH) - - if(istype(maybe_stomach, /obj/item/organ/internal/stomach/ethereal)) - - var/charge_limit = ETHEREAL_CHARGE_DANGEROUS - CELL_POWER_GAIN - var/obj/item/organ/internal/stomach/ethereal/stomach = maybe_stomach - var/obj/item/stock_parts/cell/stomach_cell = stomach.cell - if((stomach.drain_time > world.time) || !stomach) - return - if(charge < CELL_POWER_DRAIN) - to_chat(H, span_warning("[src] doesn't have enough power!")) - return - if(stomach_cell.charge() > charge_limit) - to_chat(H, span_warning("Your charge is full!")) - return - to_chat(H, span_notice("You begin clumsily channeling power from [src] into your body.")) - stomach.drain_time = world.time + CELL_DRAIN_TIME - while(do_after(user, CELL_DRAIN_TIME, target = src)) - if((charge < CELL_POWER_DRAIN) || (stomach_cell.charge() > charge_limit)) - return - if(istype(stomach)) - to_chat(H, span_notice("You receive some charge from [src], wasting some in the process.")) - stomach.adjust_charge(CELL_POWER_GAIN) - charge -= CELL_POWER_DRAIN //you waste way more than you receive, so that ethereals cant just steal one cell and forget about hunger - else - to_chat(H, span_warning("You can't receive charge from [src]!")) - return - - -/obj/item/stock_parts/cell/blob_act(obj/structure/blob/B) - SSexplosions.high_mov_atom += src - -/obj/item/stock_parts/cell/proc/get_electrocute_damage() - return ELECTROCUTE_DAMAGE(charge / max(0.001 * STANDARD_CELL_CHARGE, 1)) // Wouldn't want it to consider more energy than whatever is actually in the cell if for some strange reason someone set the STANDARD_CELL_CHARGE to below 1kJ. - -/obj/item/stock_parts/cell/get_part_rating() - return maxcharge * 10 + charge - -/obj/item/stock_parts/cell/attackby_storage_insert(datum/storage, atom/storage_holder, mob/user) - var/obj/item/mod/control/mod = storage_holder - return !(istype(mod) && mod.open) /* Cell variants*/ -/obj/item/stock_parts/cell/empty +/obj/item/stock_parts/power_store/cell/empty empty = TRUE -/obj/item/stock_parts/cell/crap - name = "\improper Nanotrasen brand rechargeable AA battery" +/obj/item/stock_parts/power_store/cell/crap + name = "\improper Nanotrasen brand rechargeable AA cell" desc = "You can't top the plasma top." //TOTALLY TRADEMARK INFRINGEMENT + icon_state = "aa_cell" maxcharge = STANDARD_CELL_CHARGE * 0.5 custom_materials = list(/datum/material/glass=SMALL_MATERIAL_AMOUNT*0.4) -/obj/item/stock_parts/cell/crap/empty +/obj/item/stock_parts/power_store/cell/crap/Initialize(mapload) + AddElement(/datum/element/update_icon_blocker) + return ..() + +/obj/item/stock_parts/power_store/cell/crap/empty empty = TRUE -/obj/item/stock_parts/cell/upgraded +/obj/item/stock_parts/power_store/cell/upgraded name = "upgraded power cell" desc = "A power cell with a slightly higher capacity than normal!" + icon_state = "9v_cell" maxcharge = STANDARD_CELL_CHARGE * 2.5 custom_materials = list(/datum/material/glass=SMALL_MATERIAL_AMOUNT*0.5) chargerate = STANDARD_CELL_RATE * 0.5 -/obj/item/stock_parts/cell/upgraded/plus +/obj/item/stock_parts/power_store/cell/upgraded/Initialize(mapload) + AddElement(/datum/element/update_icon_blocker) + return ..() + +/obj/item/stock_parts/power_store/cell/upgraded/plus name = "upgraded power cell+" desc = "A power cell with an even higher capacity than the base model!" maxcharge = STANDARD_CELL_CHARGE * 5 -/obj/item/stock_parts/cell/secborg - name = "security borg rechargeable D battery" +/obj/item/stock_parts/power_store/cell/secborg + name = "security borg rechargeable D cell" maxcharge = STANDARD_CELL_CHARGE * 0.6 custom_materials = list(/datum/material/glass=SMALL_MATERIAL_AMOUNT*0.4) -/obj/item/stock_parts/cell/secborg/empty +/obj/item/stock_parts/power_store/cell/secborg/empty empty = TRUE -/obj/item/stock_parts/cell/mini_egun +/obj/item/stock_parts/power_store/cell/mini_egun name = "miniature energy gun power cell" maxcharge = STANDARD_CELL_CHARGE * 0.6 -/obj/item/stock_parts/cell/hos_gun +/obj/item/stock_parts/power_store/cell/hos_gun name = "X-01 multiphase energy gun power cell" maxcharge = STANDARD_CELL_CHARGE * 1.2 -/obj/item/stock_parts/cell/pulse //200 pulse shots +/obj/item/stock_parts/power_store/cell/pulse //200 pulse shots name = "pulse rifle power cell" maxcharge = STANDARD_CELL_CHARGE * 40 chargerate = STANDARD_CELL_RATE * 0.75 -/obj/item/stock_parts/cell/pulse/carbine //25 pulse shots +/obj/item/stock_parts/power_store/cell/pulse/carbine //25 pulse shots name = "pulse carbine power cell" maxcharge = STANDARD_CELL_CHARGE * 5 -/obj/item/stock_parts/cell/pulse/pistol //10 pulse shots +/obj/item/stock_parts/power_store/cell/pulse/pistol //10 pulse shots name = "pulse pistol power cell" maxcharge = STANDARD_CELL_CHARGE * 2 -/obj/item/stock_parts/cell/ninja +/obj/item/stock_parts/power_store/cell/ninja name = "black power cell" icon_state = "bscell" maxcharge = STANDARD_CELL_CHARGE * 10 custom_materials = list(/datum/material/glass=SMALL_MATERIAL_AMOUNT*0.6) chargerate = STANDARD_CELL_RATE -/obj/item/stock_parts/cell/high +/obj/item/stock_parts/power_store/cell/high name = "high-capacity power cell" icon_state = "hcell" maxcharge = STANDARD_CELL_CHARGE * 10 custom_materials = list(/datum/material/glass=SMALL_MATERIAL_AMOUNT*0.6) chargerate = STANDARD_CELL_RATE * 0.75 -/obj/item/stock_parts/cell/high/empty +/obj/item/stock_parts/power_store/cell/high/empty empty = TRUE -/obj/item/stock_parts/cell/super +/obj/item/stock_parts/power_store/cell/super name = "super-capacity power cell" icon_state = "scell" maxcharge = STANDARD_CELL_CHARGE * 20 custom_materials = list(/datum/material/glass=SMALL_MATERIAL_AMOUNT * 3) chargerate = STANDARD_CELL_RATE -/obj/item/stock_parts/cell/super/empty +/obj/item/stock_parts/power_store/cell/super/empty empty = TRUE -/obj/item/stock_parts/cell/hyper +/obj/item/stock_parts/power_store/cell/hyper name = "hyper-capacity power cell" icon_state = "hpcell" maxcharge = STANDARD_CELL_CHARGE * 30 custom_materials = list(/datum/material/glass=SMALL_MATERIAL_AMOUNT * 4) chargerate = STANDARD_CELL_RATE * 1.5 -/obj/item/stock_parts/cell/hyper/empty +/obj/item/stock_parts/power_store/cell/hyper/empty empty = TRUE -/obj/item/stock_parts/cell/bluespace +/obj/item/stock_parts/power_store/cell/bluespace name = "bluespace power cell" desc = "A rechargeable transdimensional power cell." icon_state = "bscell" @@ -407,10 +129,10 @@ custom_materials = list(/datum/material/glass=SMALL_MATERIAL_AMOUNT*6) chargerate = STANDARD_CELL_RATE * 2 -/obj/item/stock_parts/cell/bluespace/empty +/obj/item/stock_parts/power_store/cell/bluespace/empty empty = TRUE -/obj/item/stock_parts/cell/infinite +/obj/item/stock_parts/power_store/cell/infinite name = "infinite-capacity power cell" icon_state = "icell" maxcharge = INFINITY //little disappointing if you examine it and it's not huge @@ -418,10 +140,10 @@ chargerate = INFINITY ratingdesc = FALSE -/obj/item/stock_parts/cell/infinite/use(used, force = FALSE) +/obj/item/stock_parts/power_store/cell/infinite/use(used, force = FALSE) return TRUE -/obj/item/stock_parts/cell/infinite/abductor +/obj/item/stock_parts/power_store/cell/infinite/abductor name = "void core" desc = "An alien power cell that produces energy seemingly out of nowhere." icon = 'icons/obj/antags/abductor.dmi' @@ -429,11 +151,11 @@ maxcharge = STANDARD_CELL_CHARGE * 50 ratingdesc = FALSE -/obj/item/stock_parts/cell/infinite/abductor/Initialize(mapload) +/obj/item/stock_parts/power_store/cell/infinite/abductor/Initialize(mapload) AddElement(/datum/element/update_icon_blocker) return ..() -/obj/item/stock_parts/cell/potato +/obj/item/stock_parts/power_store/cell/potato name = "potato battery" desc = "A rechargeable starch based power cell." icon = 'icons/obj/service/hydroponics/harvest.dmi' @@ -445,65 +167,50 @@ grown_battery = TRUE //it has the overlays for wires custom_premium_price = PAYCHECK_CREW -/obj/item/stock_parts/cell/potato/Initialize(mapload, override_maxcharge) +/obj/item/stock_parts/power_store/cell/potato/Initialize(mapload, override_maxcharge) charge = maxcharge * 0.3 . = ..() -/obj/item/stock_parts/cell/emproof +/obj/item/stock_parts/power_store/cell/emproof name = "\improper EMP-proof cell" desc = "An EMP-proof cell." maxcharge = STANDARD_CELL_CHARGE * 0.5 -/obj/item/stock_parts/cell/emproof/Initialize(mapload) +/obj/item/stock_parts/power_store/cell/emproof/Initialize(mapload) AddElement(/datum/element/empprotection, EMP_PROTECT_SELF) return ..() -/obj/item/stock_parts/cell/emproof/empty +/obj/item/stock_parts/power_store/cell/emproof/empty empty = TRUE -/obj/item/stock_parts/cell/emproof/corrupt() +/obj/item/stock_parts/power_store/cell/emproof/corrupt() return -/obj/item/stock_parts/cell/emproof/slime +/obj/item/stock_parts/power_store/cell/emproof/slime name = "EMP-proof slime core" desc = "A yellow slime core infused with plasma. Its organic nature makes it immune to EMPs." icon = 'icons/mob/simple/slimes.dmi' - icon_state = "yellow slime extract" + icon_state = "yellow-core" custom_materials = null maxcharge = STANDARD_CELL_CHARGE * 5 charge_light_type = null connector_type = "slimecore" -/obj/item/stock_parts/cell/beam_rifle - name = "beam rifle capacitor" - desc = "A high powered capacitor that can provide huge amounts of energy in an instant." - maxcharge = STANDARD_CELL_CHARGE * 50 - chargerate = STANDARD_CELL_RATE * 2.5 //Extremely energy intensive - -/obj/item/stock_parts/cell/beam_rifle/corrupt() - return - -/obj/item/stock_parts/cell/beam_rifle/emp_act(severity) - . = ..() - if(. & EMP_PROTECT_SELF) - return - charge = clamp((charge-(10000/severity)),0,maxcharge) - -/obj/item/stock_parts/cell/emergency_light +/obj/item/stock_parts/power_store/cell/emergency_light name = "miniature power cell" desc = "A tiny power cell with a very low power capacity. Used in light fixtures to power them in the event of an outage." maxcharge = STANDARD_CELL_CHARGE * 0.12 //Emergency lights use 0.2 W per tick, meaning ~10 minutes of emergency power from a cell custom_materials = list(/datum/material/glass = SMALL_MATERIAL_AMOUNT*0.2) w_class = WEIGHT_CLASS_TINY -/obj/item/stock_parts/cell/emergency_light/Initialize(mapload) +/obj/item/stock_parts/power_store/cell/emergency_light/Initialize(mapload) . = ..() var/area/area = get_area(src) if(area) if(!area.lightswitch || !area.light_power) charge = 0 //For naturally depowered areas, we start with no power -/obj/item/stock_parts/cell/crystal_cell +/obj/item/stock_parts/power_store/cell/crystal_cell name = "crystal power cell" desc = "A very high power cell made from crystallized plasma" icon_state = "crystal_cell" @@ -514,10 +221,10 @@ custom_materials = null grind_results = null -/obj/item/stock_parts/cell/inducer_supply +/obj/item/stock_parts/power_store/cell/inducer_supply maxcharge = STANDARD_CELL_CHARGE * 5 -/obj/item/stock_parts/cell/ethereal +/obj/item/stock_parts/power_store/cell/ethereal name = "ahelp it" desc = "you sohuldn't see this" maxcharge = ETHEREAL_CHARGE_DANGEROUS @@ -528,10 +235,6 @@ custom_materials = null grind_results = null -/obj/item/stock_parts/cell/ethereal/examine(mob/user) +/obj/item/stock_parts/power_store/cell/ethereal/examine(mob/user) . = ..() CRASH("[src.type] got examined by [user]") - -#undef CELL_DRAIN_TIME -#undef CELL_POWER_GAIN -#undef CELL_POWER_DRAIN diff --git a/code/modules/power/lighting/light.dm b/code/modules/power/lighting/light.dm index d3cfce7c14f3f..3781944ad0099 100644 --- a/code/modules/power/lighting/light.dm +++ b/code/modules/power/lighting/light.dm @@ -37,7 +37,7 @@ ///Count of number of times switched on/off, this is used to calculate the probability the light burns out var/switchcount = 0 ///Cell reference - var/obj/item/stock_parts/cell/cell + var/obj/item/stock_parts/power_store/cell /// If TRUE, then cell is null, but one is pretending to exist. /// This is to defer emergency cell creation unless necessary, as it is very expensive. var/has_mock_cell = TRUE @@ -77,12 +77,13 @@ var/fire_power = 0.5 ///The Light colour to use when working in fire alarm status var/fire_colour = COLOR_FIRE_LIGHT_RED - ///Power usage - W per unit of luminosity var/power_consumption_rate = 20 + ///break if moved, if false also makes it ignore if the wall its on breaks + var/break_if_moved = TRUE /obj/machinery/light/Move() - if(status != LIGHT_BROKEN) + if(status != LIGHT_BROKEN && break_if_moved) break_light_tube(TRUE) return ..() @@ -117,7 +118,8 @@ RegisterSignal(src, COMSIG_LIGHT_EATER_ACT, PROC_REF(on_light_eater)) RegisterSignal(src, COMSIG_HIT_BY_SABOTEUR, PROC_REF(on_saboteur)) AddElement(/datum/element/atmos_sensitive, mapload) - find_and_hang_on_wall(custom_drop_callback = CALLBACK(src, PROC_REF(knock_down))) + if(break_if_moved) + find_and_hang_on_wall(custom_drop_callback = CALLBACK(src, PROC_REF(knock_down))) /obj/machinery/light/post_machine_initialize() . = ..() @@ -286,11 +288,17 @@ var/delay = rand(BROKEN_SPARKS_MIN, BROKEN_SPARKS_MAX) addtimer(CALLBACK(src, PROC_REF(broken_sparks)), delay, TIMER_UNIQUE | TIMER_NO_HASH_WAIT) +/obj/machinery/light/proc/is_full_charge() + if(cell) + return cell.charge == cell.maxcharge + return TRUE + /obj/machinery/light/process(seconds_per_tick) - if(has_power()) //If the light is being powered by the station. + if(has_power()) + // If the cell is done mooching station power, and reagents don't need processing, stop processing + if(is_full_charge() && !reagents) + return PROCESS_KILL if(cell) - if(cell.charge == cell.maxcharge && !reagents) //If the cell is done mooching station power, and reagents don't need processing, stop processing - return PROCESS_KILL charge_cell(LIGHT_EMERGENCY_POWER_USE * seconds_per_tick, cell = cell) //Recharge emergency power automatically while not using it if(reagents) //with most reagents coming out at 300, and with most meaningful reactions coming at 370+, this rate gives a few seconds of time to place it in and get out of dodge regardless of input. reagents.adjust_thermal_energy(8 * reagents.total_volume * SPECIFIC_HEAT_DEFAULT * seconds_per_tick) @@ -313,7 +321,7 @@ /obj/machinery/light/get_cell() if (has_mock_cell) - cell = new /obj/item/stock_parts/cell/emergency_light(src) + cell = new /obj/item/stock_parts/power_store/cell/emergency_light(src) has_mock_cell = FALSE return cell @@ -379,6 +387,10 @@ span_notice("You open [src]'s casing."), span_hear("You hear a noise.")) deconstruct() return + + if(tool.item_flags & ABSTRACT) + return + to_chat(user, span_userdanger("You stick \the [tool] into the light socket!")) if(has_power() && (tool.obj_flags & CONDUCTS_ELECTRICITY)) do_sparks(3, TRUE, src) @@ -409,7 +421,7 @@ new /obj/item/stack/cable_coil(loc, 1, "red") transfer_fingerprints_to(new_light) - var/obj/item/stock_parts/cell/real_cell = get_cell() + var/obj/item/stock_parts/power_store/real_cell = get_cell() if(!QDELETED(real_cell)) new_light.cell = real_cell real_cell.forceMove(new_light) @@ -470,8 +482,8 @@ /obj/machinery/light/proc/use_emergency_power(power_usage_amount = LIGHT_EMERGENCY_POWER_USE) if(!has_emergency_power(power_usage_amount)) return FALSE - var/obj/item/stock_parts/cell/real_cell = get_cell() - if(real_cell.charge > 2.5 * /obj/item/stock_parts/cell/emergency_light::maxcharge) //it's meant to handle 120 W, ya doofus + var/obj/item/stock_parts/power_store/real_cell = get_cell() + if(real_cell.charge > 2.5 * /obj/item/stock_parts/power_store/cell/emergency_light::maxcharge) //it's meant to handle 120 W, ya doofus visible_message(span_warning("[src] short-circuits from too powerful of a power cell!")) burn_out() return FALSE @@ -723,3 +735,8 @@ /obj/machinery/light/floor/broken status = LIGHT_BROKEN icon_state = "floor-broken" + +/obj/machinery/light/floor/transport + name = "transport light" + break_if_moved = FALSE + layer = BELOW_OPEN_DOOR_LAYER diff --git a/code/modules/power/lighting/light_construct.dm b/code/modules/power/lighting/light_construct.dm index 8b79c33d69bcb..2bca5e3b3f157 100644 --- a/code/modules/power/lighting/light_construct.dm +++ b/code/modules/power/lighting/light_construct.dm @@ -17,7 +17,7 @@ ///Reference for light object var/obj/machinery/light/new_light = null ///Reference for the internal cell - var/obj/item/stock_parts/cell/cell + var/obj/item/stock_parts/power_store/cell ///Can we support a cell? var/cell_connectors = TRUE @@ -71,14 +71,14 @@ if(!cell) return to_chat(user, span_notice("You telekinetically remove [cell].")) - var/obj/item/stock_parts/cell/cell_reference = cell + var/obj/item/stock_parts/power_store/cell_reference = cell cell = null cell_reference.forceMove(drop_location()) return cell_reference.attack_tk(user) /obj/structure/light_construct/attackby(obj/item/tool, mob/user, params) add_fingerprint(user) - if(istype(tool, /obj/item/stock_parts/cell)) + if(istype(tool, /obj/item/stock_parts/power_store/cell)) if(!cell_connectors) to_chat(user, span_warning("This [name] can't support a power cell!")) return diff --git a/code/modules/power/power.dm b/code/modules/power/power.dm index c9cbb0d3ecc50..5cfeab92f06ca 100644 --- a/code/modules/power/power.dm +++ b/code/modules/power/power.dm @@ -62,7 +62,7 @@ /obj/machinery/power/multitool_act_secondary(mob/living/user, obj/item/tool) return multitool_act(user, tool) -/// Called on multitool_act when we can change cable layers, override to add more conditions +/// Called on multitool_act when we can change cable layers, override to add more conditions /obj/machinery/power/proc/cable_layer_act(mob/living/user, obj/item/tool) var/choice = tgui_input_list(user, "Select Power Line For Operation", "Select Cable Layer", GLOB.cable_name_to_layer) if(isnull(choice) || QDELETED(src) || QDELETED(user) || QDELETED(tool) || !user.Adjacent(src) || !user.is_holding(tool)) @@ -117,8 +117,6 @@ // returns true if the area has power on given channel (or doesn't require power). // defaults to power_channel /obj/machinery/proc/powered(chan = power_channel, ignore_use_power = FALSE) - if(!loc) - return FALSE if(!use_power && !ignore_use_power) return TRUE @@ -176,7 +174,7 @@ var/surplus = local_apc.surplus() var/grid_used = min(surplus, amount) var/apc_used = 0 - if((amount > grid_used) && !ignore_apc) // Use from the APC's cell if there isn't enough energy from the grid. + if((amount > grid_used) && !ignore_apc && !QDELETED(local_apc.cell)) // Use from the APC's cell if there isn't enough energy from the grid. apc_used = local_apc.cell.use(amount - grid_used, force = force) if(!force && (amount < grid_used + apc_used)) // If we aren't forcing it and there isn't enough energy to supply demand, return nothing. @@ -204,7 +202,7 @@ return amount var/obj/machinery/power/apc/my_apc = my_area.apc - if(isnull(my_apc)) + if(isnull(my_apc) || QDELETED(my_apc.cell)) return FALSE return my_apc.cell.use(amount, force = force) @@ -251,7 +249,7 @@ * - channel: The power channel to use. * Returns: The amount of energy the cell received. */ -/obj/machinery/proc/charge_cell(amount, obj/item/stock_parts/cell/cell, grid_only = FALSE, channel = AREA_USAGE_EQUIP) +/obj/machinery/proc/charge_cell(amount, obj/item/stock_parts/power_store/cell, grid_only = FALSE, channel = AREA_USAGE_EQUIP) var/demand = use_energy(min(amount, cell.used_charge()), channel = channel, ignore_apc = grid_only) var/power_given = cell.give(demand) return power_given @@ -451,11 +449,11 @@ power_source = Cable.powernet var/datum/powernet/PN - var/obj/item/stock_parts/cell/cell + var/obj/item/stock_parts/power_store/cell if (istype(power_source, /datum/powernet)) PN = power_source - else if (istype(power_source, /obj/item/stock_parts/cell)) + else if (istype(power_source, /obj/item/stock_parts/power_store)) cell = power_source else if (istype(power_source, /obj/machinery/power/apc)) var/obj/machinery/power/apc/apc = power_source @@ -494,7 +492,7 @@ return FALSE var/datum/powernet/PN = powernet_info["powernet"] - var/obj/item/stock_parts/cell/cell = powernet_info["cell"] + var/obj/item/stock_parts/power_store/cell = powernet_info["cell"] var/PN_damage = 0 var/cell_damage = 0 @@ -519,7 +517,7 @@ source_area.apc?.terminal?.use_energy(drained_energy) else if (istype(power_source, /datum/powernet)) PN.delayedload += (min(drained_energy, max(PN.newavail - PN.delayedload, 0))) - else if (istype(power_source, /obj/item/stock_parts/cell)) + else if (istype(power_source, /obj/item/stock_parts/power_store)) cell.use(drained_energy) return drained_energy diff --git a/code/modules/power/power_store.dm b/code/modules/power/power_store.dm new file mode 100644 index 0000000000000..688dc70908f36 --- /dev/null +++ b/code/modules/power/power_store.dm @@ -0,0 +1,326 @@ +#define CELL_DRAIN_TIME 35 +#define CELL_POWER_GAIN (0.06 * STANDARD_CELL_CHARGE) +#define CELL_POWER_DRAIN (0.75 * STANDARD_CELL_CHARGE) + +/** + * # Power store abstract type + * + * Abstract type for a stock part that holds power. + */ +/obj/item/stock_parts/power_store + name = "power store abstract" + /// The size icon overlay prefix. + var/cell_size_prefix = "cell" + ///Current charge in cell units + var/charge = 0 + /// Standard cell charge used for rating + var/rating_base = STANDARD_CELL_CHARGE + ///Maximum charge in cell units + var/maxcharge = STANDARD_CELL_CHARGE + ///If the cell has been booby-trapped by injecting it with plasma. Chance on use() to explode. + var/rigged = FALSE + ///If the power cell was damaged by an explosion, chance for it to become corrupted and function the same as rigged. + var/corrupted = FALSE + ///How much power is given per second in a recharger. + var/chargerate = STANDARD_CELL_RATE * 0.05 + ///If true, the cell will state it's maximum charge in it's description + var/ratingdesc = TRUE + ///If it's a grown that acts as a battery, add a wire overlay to it. + var/grown_battery = FALSE + ///What charge lige sprite to use, null if no light + var/charge_light_type = "standard" + ///What connector sprite to use when in a cell charger, null if no connectors + var/connector_type = "standard" + ///Does the cell start without any charge? + var/empty = FALSE + +/obj/item/stock_parts/power_store/get_cell() + return src + +/obj/item/stock_parts/power_store/Initialize(mapload, override_maxcharge) + . = ..() + create_reagents(5, INJECTABLE | DRAINABLE) + if (override_maxcharge) + maxcharge = override_maxcharge + rating = max(round(maxcharge / (rating_base * 10), 1), 1) + if(!charge) + charge = maxcharge + if(empty) + charge = 0 + if(ratingdesc) + desc += " This one has a rating of [display_energy(maxcharge)][prob(10) ? ", and you should not swallow it" : ""]." //joke works better if it's not on every cell + update_appearance() + + RegisterSignal(src, COMSIG_ITEM_MAGICALLY_CHARGED, PROC_REF(on_magic_charge)) + var/static/list/loc_connections = list( + COMSIG_ITEM_MAGICALLY_CHARGED = PROC_REF(on_magic_charge), + ) + AddElement(/datum/element/connect_loc, loc_connections) + +/** + * Signal proc for [COMSIG_ITEM_MAGICALLY_CHARGED] + * + * If we, or the item we're located in, is subject to the charge spell, gain some charge back + */ +/obj/item/stock_parts/power_store/proc/on_magic_charge(datum/source, datum/action/cooldown/spell/charge/spell, mob/living/caster) + SIGNAL_HANDLER + + // This shouldn't be running if we're not being held by a mob, + // or if we're not within an object being held by a mob, but just in case... + if(!ismovable(loc)) + return + + . = COMPONENT_ITEM_CHARGED + + if(prob(80)) + maxcharge -= rating_base * 0.2 + + if(maxcharge <= 1) // Div by 0 protection + maxcharge = 1 + . |= COMPONENT_ITEM_BURNT_OUT + + charge = maxcharge + update_appearance() + + // Guns need to process their chamber when we've been charged + if(isgun(loc)) + var/obj/item/gun/gun_loc = loc + gun_loc.process_chamber() + + // The thing we're in might have overlays or icon states for whether the cell is charged + if(!ismob(loc)) + loc.update_appearance() + + return . + +/obj/item/stock_parts/power_store/create_reagents(max_vol, flags) + . = ..() + RegisterSignals(reagents, list(COMSIG_REAGENTS_NEW_REAGENT, COMSIG_REAGENTS_ADD_REAGENT, COMSIG_REAGENTS_DEL_REAGENT, COMSIG_REAGENTS_REM_REAGENT), PROC_REF(on_reagent_change)) + RegisterSignal(reagents, COMSIG_QDELETING, PROC_REF(on_reagents_del)) + +/// Handles properly detaching signal hooks. +/obj/item/stock_parts/power_store/proc/on_reagents_del(datum/reagents/reagents) + SIGNAL_HANDLER + UnregisterSignal(reagents, list(COMSIG_REAGENTS_NEW_REAGENT, COMSIG_REAGENTS_ADD_REAGENT, COMSIG_REAGENTS_DEL_REAGENT, COMSIG_REAGENTS_REM_REAGENT, COMSIG_QDELETING)) + return NONE + +/obj/item/stock_parts/power_store/update_overlays() + . = ..() + if(grown_battery) + . += mutable_appearance('icons/obj/machines/cell_charger.dmi', "grown_wires") + if((charge < 0.01) || !charge_light_type) + return + . += mutable_appearance('icons/obj/machines/cell_charger.dmi', "[cell_size_prefix]-[charge_light_type]-o[(percent() >= 99.5) ? 2 : 1]") + +/obj/item/stock_parts/power_store/vv_edit_var(vname, vval) + if(vname == NAMEOF(src, charge)) + charge = clamp(vval, 0, maxcharge) + return TRUE + if(vname == NAMEOF(src, maxcharge)) + if(charge > vval) + charge = vval + if(vname == NAMEOF(src, corrupted) && vval && !corrupted) + corrupt(TRUE) + return TRUE + return ..() + + +/** + * Returns the percentage of the cell's charge. + */ +/obj/item/stock_parts/power_store/proc/percent() // return % charge of cell + return 100 * charge / maxcharge + +/** + * Returns the maximum charge of the cell. + */ +/obj/item/stock_parts/power_store/proc/max_charge() + return maxcharge + +/** + * Returns the current charge of the cell. + */ +/obj/item/stock_parts/power_store/proc/charge() + return charge + +/** + * Returns the amount of charge used on the cell. + */ +/obj/item/stock_parts/power_store/proc/used_charge() + return maxcharge - charge + +/// Use power from the cell. +/// Args: +/// - used: Amount of power in joules to use. +/// - force: If true, uses the remaining power from the cell if there isn't enough power to supply the demand. +/// Returns: The power used from the cell in joules. +/obj/item/stock_parts/power_store/use(used, force = FALSE) + var/power_used = min(used, charge) + if(rigged && power_used > 0) + explode() + return 0 // The cell decided to explode so we won't be able to use it. + if(!force && charge < used) + return 0 + charge -= power_used + if(!istype(loc, /obj/machinery/power/apc)) + SSblackbox.record_feedback("tally", "cell_used", 1, type) + return power_used + +/// Recharge the cell. +/// Args: +/// - amount: The amount of energy to give to the cell in joules. +/// Returns: The power given to the cell in joules. +/obj/item/stock_parts/power_store/proc/give(amount) + var/power_used = min(maxcharge-charge,amount) + charge += power_used + if(rigged && amount > 0) + explode() + return power_used + +/** + * Changes the charge of the cell. + * Args: + * - amount: The energy to give to the cell (can be negative). + * Returns: The energy that was given to the cell (can be negative). + */ +/obj/item/stock_parts/power_store/proc/change(amount) + var/energy_used = clamp(amount, -charge, maxcharge - charge) + charge += energy_used + if(rigged && energy_used) + explode() + return energy_used + +/obj/item/stock_parts/power_store/examine(mob/user) + . = ..() + if(rigged) + . += span_danger("This [name] seems to be faulty!") + else + . += "The charge meter reads [CEILING(percent(), 0.1)]%." //so it doesn't say 0% charge when the overlay indicates it still has charge + +/obj/item/stock_parts/power_store/proc/on_reagent_change(datum/reagents/holder, ...) + SIGNAL_HANDLER + rigged = (corrupted || holder.has_reagent(/datum/reagent/toxin/plasma, 5)) ? TRUE : FALSE //has_reagent returns the reagent datum + return NONE + + +/obj/item/stock_parts/power_store/proc/explode() + if(!charge) + return + var/range_devastation = -1 + var/range_heavy = round(sqrt(charge / (3.6 * rating_base))) + var/range_light = round(sqrt(charge / (0.9 * rating_base))) + var/range_flash = range_light + if(!range_light) + rigged = FALSE + corrupt() + return + + message_admins("[ADMIN_LOOKUPFLW(usr)] has triggered a rigged/corrupted power cell explosion at [AREACOORD(loc)].") + usr?.log_message("triggered a rigged/corrupted power cell explosion", LOG_GAME) + usr?.log_message("triggered a rigged/corrupted power cell explosion", LOG_VICTIM, log_globally = FALSE) + + explosion(src, devastation_range = range_devastation, heavy_impact_range = range_heavy, light_impact_range = range_light, flash_range = range_flash) + qdel(src) + +/obj/item/stock_parts/power_store/proc/corrupt(force) + charge /= 2 + maxcharge = max(maxcharge/2, chargerate) + if (force || prob(10)) + rigged = TRUE //broken batterys are dangerous + corrupted = TRUE + +/obj/item/stock_parts/power_store/emp_act(severity) + . = ..() + if(. & EMP_PROTECT_SELF) + return + use(STANDARD_CELL_CHARGE / severity, force = TRUE) + +/obj/item/stock_parts/power_store/ex_act(severity, target) + . = ..() + if(QDELETED(src)) + return FALSE + + switch(severity) + if(EXPLODE_HEAVY) + if(prob(50)) + corrupt() + if(EXPLODE_LIGHT) + if(prob(25)) + corrupt() + + return TRUE + +/obj/item/stock_parts/power_store/suicide_act(mob/living/user) + user.visible_message(span_suicide("[user] is licking the electrodes of [src]! It looks like [user.p_theyre()] trying to commit suicide!")) + do_sparks(2, TRUE, user) + var/eating_success = do_after(user, 5 SECONDS, src) + if(QDELETED(user)) + return SHAME + if(!eating_success || QDELETED(src) || charge == 0) + user.visible_message(span_suicide("[user] chickens out!")) + return SHAME + playsound(user, 'sound/effects/sparks1.ogg', charge / maxcharge) + var/damage = charge / (1 KILO JOULES) + user.electrocute_act(damage, src, 1, SHOCK_IGNORE_IMMUNITY|SHOCK_DELAY_STUN|SHOCK_NOGLOVES) + charge = 0 + update_appearance() + if(user.stat != DEAD) + to_chat(user, span_suicide("There's not enough charge in [src] to kill you!")) + return SHAME + addtimer(CALLBACK(src, PROC_REF(gib_user), user, charge), 3 SECONDS) + return MANUAL_SUICIDE + +/obj/item/stock_parts/power_store/proc/gib_user(mob/living/user, discharged_energy) + if(QDELETED(user)) + return + if(discharged_energy < STANDARD_BATTERY_CHARGE) + return + user.dropItemToGround(src) + user.dust(just_ash = TRUE) + playsound(src, 'sound/magic/lightningshock.ogg', 50, TRUE, 10) + tesla_zap(source = src, zap_range = 10, power = discharged_energy) + +/obj/item/stock_parts/power_store/attack_self(mob/user) + if(ishuman(user)) + var/mob/living/carbon/human/H = user + var/obj/item/organ/internal/stomach/maybe_stomach = H.get_organ_slot(ORGAN_SLOT_STOMACH) + + if(istype(maybe_stomach, /obj/item/organ/internal/stomach/ethereal)) + + var/charge_limit = ETHEREAL_CHARGE_DANGEROUS - CELL_POWER_GAIN + var/obj/item/organ/internal/stomach/ethereal/stomach = maybe_stomach + var/obj/item/stock_parts/power_store/stomach_cell = stomach.cell + if((stomach.drain_time > world.time) || !stomach) + return + if(charge < CELL_POWER_DRAIN) + to_chat(H, span_warning("[src] doesn't have enough power!")) + return + if(stomach_cell.charge() > charge_limit) + to_chat(H, span_warning("Your charge is full!")) + return + to_chat(H, span_notice("You begin clumsily channeling power from [src] into your body.")) + stomach.drain_time = world.time + CELL_DRAIN_TIME + while(do_after(user, CELL_DRAIN_TIME, target = src)) + if((charge < CELL_POWER_DRAIN) || (stomach_cell.charge() > charge_limit)) + return + if(istype(stomach)) + to_chat(H, span_notice("You receive some charge from [src], wasting some in the process.")) + stomach.adjust_charge(CELL_POWER_GAIN) + charge -= CELL_POWER_DRAIN //you waste way more than you receive, so that ethereals cant just steal one cell and forget about hunger + else + to_chat(H, span_warning("You can't receive charge from [src]!")) + return + + +/obj/item/stock_parts/power_store/blob_act(obj/structure/blob/B) + SSexplosions.high_mov_atom += src + +/obj/item/stock_parts/power_store/proc/get_electrocute_damage() + return ELECTROCUTE_DAMAGE(charge / max(0.001 * STANDARD_CELL_CHARGE, 1)) // Wouldn't want it to consider more energy than whatever is actually in the cell if for some strange reason someone set the STANDARD_CELL_CHARGE to below 1kJ. + +/obj/item/stock_parts/power_store/get_part_rating() + return maxcharge * 10 + charge + +#undef CELL_DRAIN_TIME +#undef CELL_POWER_GAIN +#undef CELL_POWER_DRAIN diff --git a/code/modules/power/singularity/boh_tear.dm b/code/modules/power/singularity/boh_tear.dm deleted file mode 100644 index 4397e31ff7629..0000000000000 --- a/code/modules/power/singularity/boh_tear.dm +++ /dev/null @@ -1,48 +0,0 @@ -/// BoH tear -/// The BoH tear is a stationary singularity with a really high gravitational pull, which collapses briefly after being created -/// The BoH isn't deleted for 10 minutes (only moved to nullspace) so that admins may retrieve the things back in case of a grief -#define BOH_TEAR_CONSUME_RANGE 1 -#define BOH_TEAR_GRAV_PULL 25 - -/obj/boh_tear - name = "tear in the fabric of reality" - desc = "Your own comprehension of reality starts bending as you stare this." - anchored = TRUE - appearance_flags = LONG_GLIDE - density = TRUE - icon = 'icons/effects/96x96.dmi' - icon_state = "boh_tear" - plane = MASSIVE_OBJ_PLANE - plane = ABOVE_LIGHTING_PLANE - light_range = 6 - move_resist = INFINITY - obj_flags = CAN_BE_HIT | DANGEROUS_POSSESSION - pixel_x = -32 - pixel_y = -32 - resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF | FREEZE_PROOF - flags_1 = SUPERMATTER_IGNORES_1 - -/obj/boh_tear/Initialize(mapload) - . = ..() - QDEL_IN(src, 5 SECONDS) // vanishes after 5 seconds - - AddComponent( - /datum/component/singularity, \ - consume_range = BOH_TEAR_CONSUME_RANGE, \ - grav_pull = BOH_TEAR_GRAV_PULL, \ - roaming = FALSE, \ - singularity_size = STAGE_SIX, \ - ) - -/obj/boh_tear/attack_tk(mob/user) - if(!isliving(user)) - return - var/mob/living/jedi = user - to_chat(jedi, span_userdanger("You don't feel like you are real anymore.")) - jedi.dust_animation() - jedi.spawn_dust() - addtimer(CALLBACK(src, TYPE_PROC_REF(/atom, attack_hand), jedi), 0.5 SECONDS) - return COMPONENT_CANCEL_ATTACK_CHAIN - -#undef BOH_TEAR_CONSUME_RANGE -#undef BOH_TEAR_GRAV_PULL diff --git a/code/modules/power/singularity/emitter.dm b/code/modules/power/singularity/emitter.dm index c4be44ed36785..1659d30b2bbe9 100644 --- a/code/modules/power/singularity/emitter.dm +++ b/code/modules/power/singularity/emitter.dm @@ -501,11 +501,12 @@ . = ..() ADD_TRAIT(src, TRAIT_NODROP, ABSTRACT_ITEM_TRAIT) -/obj/item/turret_control/afterattack(atom/targeted_atom, mob/user, proxflag, clickparams) - . = ..() - . |= AFTERATTACK_PROCESSED_ITEM +/obj/item/turret_control/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + return ranged_interact_with_atom(interacting_with, user, modifiers) + +/obj/item/turret_control/ranged_interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) var/obj/machinery/power/emitter/emitter = user.buckled - emitter.setDir(get_dir(emitter,targeted_atom)) + emitter.setDir(get_dir(emitter, interacting_with)) user.setDir(emitter.dir) switch(emitter.dir) if(NORTH) @@ -541,7 +542,7 @@ user.pixel_x = 8 user.pixel_y = -12 - emitter.last_projectile_params = calculate_projectile_angle_and_pixel_offsets(user, null, clickparams) + emitter.last_projectile_params = calculate_projectile_angle_and_pixel_offsets(user, null, list2params(modifiers)) if(emitter.charge >= 10 && world.time > delay) emitter.charge -= 10 @@ -549,6 +550,7 @@ delay = world.time + 10 else if (emitter.charge < 10) playsound(src,'sound/machines/buzz-sigh.ogg', 50, TRUE) + return ITEM_INTERACT_SUCCESS /obj/machinery/power/emitter/ctf name = "Energy Cannon" diff --git a/code/modules/power/singularity/field_generator.dm b/code/modules/power/singularity/field_generator.dm index b46b29538c608..da3a4e12c5662 100644 --- a/code/modules/power/singularity/field_generator.dm +++ b/code/modules/power/singularity/field_generator.dm @@ -51,6 +51,8 @@ no power level overlay is currently in the overlays list. var/list/obj/machinery/field/generator/connected_gens = list() ///Check for asynk cleanups for this and the connected gens var/clean_up = FALSE + /// we warm up and cool down instantly + var/instantenous = FALSE /datum/armor/field_generator melee = 25 @@ -207,8 +209,11 @@ no power level overlay is currently in the overlays list. can_atmos_pass = ATMOS_PASS_YES air_update_turf(TRUE, FALSE) INVOKE_ASYNC(src, PROC_REF(cleanup)) - addtimer(CALLBACK(src, PROC_REF(cool_down)), 5 SECONDS) RemoveElement(/datum/element/give_turf_traits, string_list(list(TRAIT_CONTAINMENT_FIELD))) + if(instantenous) + warming_up = 0 + return + addtimer(CALLBACK(src, PROC_REF(cool_down)), 5 SECONDS) /obj/machinery/field/generator/proc/cool_down() if(active || warming_up <= 0) @@ -219,9 +224,14 @@ no power level overlay is currently in the overlays list. addtimer(CALLBACK(src, PROC_REF(cool_down)), 5 SECONDS) /obj/machinery/field/generator/proc/turn_on() + AddElement(/datum/element/give_turf_traits, string_list(list(TRAIT_CONTAINMENT_FIELD))) + if(instantenous) + active = FG_ONLINE + warming_up = 3 + start_fields() + return active = FG_CHARGING addtimer(CALLBACK(src, PROC_REF(warm_up)), 5 SECONDS) - AddElement(/datum/element/give_turf_traits, string_list(list(TRAIT_CONTAINMENT_FIELD))) /obj/machinery/field/generator/proc/warm_up() if(!active) @@ -420,9 +430,20 @@ no power level overlay is currently in the overlays list. state = FG_WELDED /obj/machinery/field/generator/starts_on/Initialize(mapload) + . = ..() + return INITIALIZE_HINT_LATELOAD + +/obj/machinery/field/generator/starts_on/post_machine_initialize() . = ..() turn_on() +/obj/machinery/field/generator/starts_on/magic + power_level = 6 //forces the highest level overlay + instantenous = TRUE + +/obj/machinery/field/generator/starts_on/magic/process() + return PROCESS_KILL // this is the only place calc_power is called, and doing it here avoids one unnecessary proc call + #undef FG_UNSECURED #undef FG_SECURED #undef FG_WELDED diff --git a/code/modules/power/singularity/narsie.dm b/code/modules/power/singularity/narsie.dm index caba755eb81a7..812dc2267fb21 100644 --- a/code/modules/power/singularity/narsie.dm +++ b/code/modules/power/singularity/narsie.dm @@ -72,7 +72,7 @@ var/area/area = get_area(src) if(area) - var/mutable_appearance/alert_overlay = mutable_appearance('icons/effects/cult/effects.dmi', "ghostalertsie") + var/mutable_appearance/alert_overlay = mutable_appearance('icons/effects/cult.dmi', "ghostalertsie") notify_ghosts( "Nar'Sie has risen in [area]. Reach out to the Geometer to be given a new shell for your soul.", source = src, @@ -234,7 +234,7 @@ addtimer(CALLBACK(src, PROC_REF(narsie_spawn_animation_end)), 3.5 SECONDS) /obj/narsie/proc/narsie_spawn_animation_end() - var/datum/component/singularity/singularity_component = singularity.resolve() + var/datum/component/singularity/singularity_component = singularity?.resolve() singularity_component?.roaming = TRUE /** diff --git a/code/modules/power/singularity/reality_tear.dm b/code/modules/power/singularity/reality_tear.dm new file mode 100644 index 0000000000000..e43301541a08f --- /dev/null +++ b/code/modules/power/singularity/reality_tear.dm @@ -0,0 +1,70 @@ +/// Tear in the Fabric of Reality /// +// Typically spawned by placing two bags of holding into one another, collapsing into a wandering singularity after a brief period as a stationary singularity. + +/obj/reality_tear + name = "tear in the fabric of reality" + desc = "As you gaze into the abyss, the only thing you can think is... \"Should I really be this close to it?\"" + anchored = TRUE + appearance_flags = LONG_GLIDE + density = TRUE + icon = 'icons/effects/96x96.dmi' + icon_state = "boh_tear" + plane = MASSIVE_OBJ_PLANE + plane = ABOVE_LIGHTING_PLANE + light_range = 6 + move_resist = INFINITY + obj_flags = CAN_BE_HIT | DANGEROUS_POSSESSION + pixel_x = -32 + pixel_y = -32 + resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF | FREEZE_PROOF + flags_1 = SUPERMATTER_IGNORES_1 + /// Range that our singularity component consumes objects + var/singularity_consume_range = 1 + /// Ranges that the singularity pulls objects + var/singularity_grav_pull = 21 + /// Time before we begin our bagulo spawn + var/collapse_spawn_time = 9 SECONDS + +/obj/reality_tear/proc/start_disaster() + apply_wibbly_filters(src) + playsound(loc, 'sound/effects/clockcult_gateway_disrupted.ogg', vary = 200, extrarange = 3, falloff_exponent = 1, frequency = 0.33, pressure_affected = FALSE, ignore_walls = TRUE, falloff_distance = 7) + AddComponent( + /datum/component/singularity, \ + consume_range = singularity_consume_range, \ + grav_pull = singularity_grav_pull, \ + roaming = FALSE, \ + singularity_size = STAGE_SIX, \ + ) + addtimer(CALLBACK(src, PROC_REF(reality_collapse)), collapse_spawn_time, TIMER_DELETE_ME) + animate(src, time = 7.5 SECONDS, transform = transform.Scale(2), flags = ANIMATION_PARALLEL) + animate(time = 2 SECONDS, transform = transform.Scale(0.25), easing = ELASTIC_EASING) + animate(time = 0.5 SECONDS, alpha = 0) + +/obj/reality_tear/proc/reality_collapse() + playsound(loc, 'sound/effects/supermatter.ogg', 200, vary = TRUE, extrarange = 3, falloff_exponent = 1, frequency = 0.5, pressure_affected = FALSE, ignore_walls = TRUE, falloff_distance = 7) + var/obj/singularity/bagulo = new(loc) + bagulo.expand(STAGE_TWO) + bagulo.energy = 400 + qdel(src) + +/obj/reality_tear/attack_tk(mob/user) + if(!isliving(user)) + return + var/mob/living/jedi = user + to_chat(jedi, span_userdanger("You don't feel like you are real anymore.")) + jedi.dust_animation() + jedi.spawn_dust() + addtimer(CALLBACK(src, TYPE_PROC_REF(/atom, attack_hand), jedi), 0.5 SECONDS) + return COMPONENT_CANCEL_ATTACK_CHAIN + +//The temporary tears in reality. Collapses into nothing, and has a significantly lower gravity pull range, but consumes more widely. + +/obj/reality_tear/temporary + name = "puncture in the fabric of reality" + desc = "Count your lucky stars that this wasn't anywhere near you." + singularity_consume_range = 2 + singularity_grav_pull = 3 + collapse_spawn_time = 2 SECONDS + +/obj/reality_tear/temporary/reality_collapse() + qdel(src) diff --git a/code/modules/power/singularity/singularity.dm b/code/modules/power/singularity/singularity.dm index d47d75360946a..0475736f6a502 100644 --- a/code/modules/power/singularity/singularity.dm +++ b/code/modules/power/singularity/singularity.dm @@ -43,6 +43,8 @@ var/move_self = TRUE ///If the singularity has eaten a supermatter shard and can go to stage six var/consumed_supermatter = FALSE + /// Is the black hole collapsing into nothing + var/collapsing = FALSE /// How long it's been since the singulo last acted, in seconds var/time_since_act = 0 /// What the game tells ghosts when you make one @@ -309,6 +311,10 @@ return TRUE /obj/singularity/proc/consume(atom/thing) + if(istype(thing, /obj/item/storage/backpack/holding) && !consumed_supermatter && !collapsing) + consume_boh(thing) + return + var/gain = thing.singularity_act(current_size, src) energy += gain if(istype(thing, /obj/machinery/power/supermatter_crystal) && !consumed_supermatter) @@ -320,6 +326,25 @@ consumed_supermatter = TRUE set_light(10) +/obj/singularity/proc/consume_boh(obj/boh) + collapsing = TRUE + name = "unstable [initial(name)]" + desc = "[initial(desc)] It seems to be collapsing in on itself." + visible_message( + message = span_danger("As [src] consumes [boh], it begins to collapse in on itself!"), + blind_message = span_hear("You hear aggressive crackling!"), + vision_distance = 15, + ) + playsound(loc, 'sound/effects/clockcult_gateway_disrupted.ogg', 200, vary = TRUE, extrarange = 3, falloff_exponent = 1, frequency = -1, pressure_affected = FALSE, ignore_walls = TRUE, falloff_distance = 7) + addtimer(CALLBACK(src, PROC_REF(consume_boh_sfx)), 4 SECONDS) + animate(src, time = 4 SECONDS, transform = transform.Scale(0.25), flags = ANIMATION_PARALLEL, easing = ELASTIC_EASING) + animate(time = 0.5 SECONDS, alpha = 0) + QDEL_IN(src, 4.1 SECONDS) + qdel(boh) + +/obj/singularity/proc/consume_boh_sfx() + playsound(loc, 'sound/effects/supermatter.ogg', 200, vary = TRUE, extrarange = 3, falloff_exponent = 1, frequency = 0.5, pressure_affected = FALSE, ignore_walls = TRUE, falloff_distance = 7) + /obj/singularity/proc/check_cardinals_range(steps, retry_with_move = FALSE) . = length(GLOB.cardinals) //Should be 4. for(var/i in GLOB.cardinals) @@ -340,7 +365,7 @@ if(STAGE_ONE) steps = 1 if(STAGE_TWO) - steps = 3//Yes this is right + steps = 2 if(STAGE_THREE) steps = 3 if(STAGE_FOUR) diff --git a/code/modules/power/smes.dm b/code/modules/power/smes.dm index 0cad7bdcef557..935601b834bc3 100644 --- a/code/modules/power/smes.dm +++ b/code/modules/power/smes.dm @@ -23,7 +23,7 @@ can_change_cable_layer = TRUE /// The charge capacity. - var/capacity = 50 * STANDARD_CELL_CHARGE // The board defaults with 5 high capacity power cells. + var/capacity = 50 * STANDARD_BATTERY_CHARGE // The board defaults with 5 high capacity batteries. /// The current charge. var/charge = 0 @@ -71,7 +71,7 @@ power_coefficient += capacitor.tier input_level_max = initial(input_level_max) * power_coefficient output_level_max = initial(output_level_max) * power_coefficient - for(var/obj/item/stock_parts/cell/power_cell in component_parts) + for(var/obj/item/stock_parts/power_store/power_cell in component_parts) max_charge += power_cell.maxcharge new_charge += power_cell.charge capacity = max_charge @@ -203,7 +203,7 @@ return ..() /obj/machinery/power/smes/on_deconstruction(disassembled) - for(var/obj/item/stock_parts/cell/cell in component_parts) + for(var/obj/item/stock_parts/power_store/cell in component_parts) cell.charge = (charge / capacity) * cell.maxcharge /obj/machinery/power/smes/Destroy() @@ -431,7 +431,7 @@ outputting = output_attempt output_level = rand(0, output_level_max) input_level = rand(0, input_level_max) - charge -= STANDARD_CELL_CHARGE/severity + charge -= STANDARD_BATTERY_CHARGE/severity if (charge < 0) charge = 0 update_appearance() @@ -442,19 +442,19 @@ name = "super capacity power storage unit" desc = "A super-capacity superconducting magnetic energy storage (SMES) unit. Relatively rare, and typically installed in long-range outposts where minimal maintenance is expected." circuit = /obj/item/circuitboard/machine/smes/super - capacity = 100 * STANDARD_CELL_CHARGE + capacity = 100 * STANDARD_BATTERY_CHARGE /obj/machinery/power/smes/super/full - charge = 100 * STANDARD_CELL_CHARGE + charge = 100 * STANDARD_BATTERY_CHARGE /obj/machinery/power/smes/full - charge = 50 * STANDARD_CELL_CHARGE + charge = 50 * STANDARD_BATTERY_CHARGE /obj/machinery/power/smes/ship - charge = 20 * STANDARD_CELL_CHARGE + charge = 20 * STANDARD_BATTERY_CHARGE /obj/machinery/power/smes/engineering - charge = 50 * STANDARD_CELL_CHARGE // Engineering starts with some charge for singulo //sorry little one, singulo as engine is gone + charge = 50 * STANDARD_BATTERY_CHARGE // Engineering starts with some charge for singulo //sorry little one, singulo as engine is gone output_level = 90 KILO WATTS /obj/machinery/power/smes/magical diff --git a/code/modules/power/solar.dm b/code/modules/power/solar.dm index 9b47c133705f2..370140a4f74cd 100644 --- a/code/modules/power/solar.dm +++ b/code/modules/power/solar.dm @@ -42,6 +42,8 @@ /obj/machinery/power/solar/Destroy() unset_control() //remove from control computer + QDEL_NULL(panel) + QDEL_NULL(panel_edge) return ..() /obj/machinery/power/solar/on_changed_z_level(turf/old_turf, turf/new_turf, same_z_layer, notify_contents) diff --git a/code/modules/power/supermatter/supermatter.dm b/code/modules/power/supermatter/supermatter.dm index 1c50f8312d4ae..76951670c9831 100644 --- a/code/modules/power/supermatter/supermatter.dm +++ b/code/modules/power/supermatter/supermatter.dm @@ -153,7 +153,10 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal) ///Stores the time of when the last zap occurred var/last_power_zap = 0 - var/last_high_energy_zap = 0 + ///Stores the tick of the machines subsystem of when the last zap occurred. Gives a passage of time in the perspective of SSmachines. + var/last_power_zap_perspective_machines = 0 + ///Same as [last_power_zap_perspective_machines], but based around the high energy zaps found in handle_high_power(). + var/last_high_energy_zap_perspective_machines = 0 ///Do we show this crystal in the CIMS modular program var/include_in_cims = TRUE @@ -294,13 +297,11 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal) // PART 3: POWER PROCESSING internal_energy_factors = calculate_internal_energy() zap_factors = calculate_zap_transmission_rate() - if(internal_energy && (last_power_zap + (4 - internal_energy * 0.001) SECONDS) < world.time) + var/delta_time = (SSmachines.times_fired - last_power_zap_perspective_machines) * SSmachines.wait / (1 SECONDS) + if(delta_time && internal_energy && (last_power_zap + (4 - internal_energy * 0.001) SECONDS) < world.time) playsound(src, 'sound/weapons/emitter2.ogg', 70, TRUE) hue_angle_shift = clamp(903 * log(10, (internal_energy + 8000)) - 3590, -50, 240) var/zap_color = color_matrix_rotate_hue(hue_angle_shift) - //Scale the strength of the zap with the world's time elapsed between zaps in seconds. - //Capped at 16 seconds to prevent a crazy burst of energy if atmos was halted for a long time. - var/delta_time = min((world.time - last_power_zap) * 0.1, 16) supermatter_zap( zapstart = src, range = 3, @@ -311,6 +312,7 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal) color = zap_color, ) last_power_zap = world.time + last_power_zap_perspective_machines = SSmachines.times_fired // PART 4: DAMAGE PROCESSING temp_limit_factors = calculate_temp_limit() @@ -714,6 +716,7 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal) activation_logged = TRUE // so we dont spam the log. else if(!internal_energy) last_power_zap = world.time + last_power_zap_perspective_machines = SSmachines.times_fired return additive_power /** Log when the supermatter is activated for the first time. diff --git a/code/modules/power/supermatter/supermatter_extra_effects.dm b/code/modules/power/supermatter/supermatter_extra_effects.dm index efd84c677fafa..35c96d298dd34 100644 --- a/code/modules/power/supermatter/supermatter_extra_effects.dm +++ b/code/modules/power/supermatter/supermatter_extra_effects.dm @@ -91,7 +91,7 @@ /obj/machinery/power/supermatter_crystal/proc/handle_high_power() if(internal_energy <= POWER_PENALTY_THRESHOLD && damage <= danger_point) //If the power is above 5000 or if the damage is above 550 - last_high_energy_zap = world.time //Prevent oddly high initial zap due to high energy zaps not getting triggered via too low energy. + last_high_energy_zap_perspective_machines = SSmachines.times_fired //Prevent oddly high initial zap due to high energy zaps not getting triggered via too low energy. return var/range = 4 zap_cutoff = 1500 @@ -129,10 +129,10 @@ if(zap_count >= 1) playsound(loc, 'sound/weapons/emitter2.ogg', 100, TRUE, extrarange = 10) - var/delta_time = min((world.time - last_high_energy_zap) * 0.1, 16) + var/delta_time = (SSmachines.times_fired - last_high_energy_zap_perspective_machines) * SSmachines.wait / (1 SECONDS) for(var/i in 1 to zap_count) supermatter_zap(src, range, clamp(internal_energy * 3200, 6.4e6, 3.2e7) * delta_time, flags, zap_cutoff = src.zap_cutoff * delta_time, power_level = internal_energy, zap_icon = src.zap_icon) - last_high_energy_zap = world.time + last_high_energy_zap_perspective_machines = SSmachines.times_fired if(prob(5)) supermatter_anomaly_gen(src, FLUX_ANOMALY, rand(5, 10)) if(prob(5)) diff --git a/code/modules/power/supermatter/supermatter_gas.dm b/code/modules/power/supermatter/supermatter_gas.dm index 35b9db0731f92..fe0ed388148b5 100644 --- a/code/modules/power/supermatter/supermatter_gas.dm +++ b/code/modules/power/supermatter/supermatter_gas.dm @@ -216,7 +216,7 @@ GLOBAL_LIST_INIT(sm_gas_behavior, init_sm_gas()) desc = "Will generate electrical zaps." /datum/sm_gas/zauker/extra_effects(obj/machinery/power/supermatter_crystal/sm) - if(!prob(sm.gas_percentage[/datum/gas/zauker])) + if(!prob(sm.gas_percentage[/datum/gas/zauker] * 100)) return playsound(sm.loc, 'sound/weapons/emitter2.ogg', 100, TRUE, extrarange = 10) sm.supermatter_zap( diff --git a/code/modules/power/supermatter/supermatter_variants.dm b/code/modules/power/supermatter/supermatter_variants.dm index 9d69066a5353b..ebc21b2b5b09f 100644 --- a/code/modules/power/supermatter/supermatter_variants.dm +++ b/code/modules/power/supermatter/supermatter_variants.dm @@ -21,6 +21,21 @@ layer = ABOVE_MOB_LAYER moveable = TRUE + +/obj/machinery/power/supermatter_crystal/shard/Initialize(mapload) + . = ..() + + register_context() + + +/obj/machinery/power/supermatter_crystal/shard/add_context(atom/source, list/context, obj/item/held_item, mob/user) + . = ..() + + if(held_item?.tool_behaviour == TOOL_WRENCH) + context[SCREENTIP_CONTEXT_LMB] = anchored ? "Unanchor" : "Anchor" + return CONTEXTUAL_SCREENTIP_SET + + /// Shard SM with it's processing disabled. /obj/machinery/power/supermatter_crystal/shard/hugbox name = "anchored supermatter shard" diff --git a/code/modules/procedural_mapping/mapGeneratorModule.dm b/code/modules/procedural_mapping/mapGeneratorModule.dm index 7bf32d15195f5..46196b6803463 100644 --- a/code/modules/procedural_mapping/mapGeneratorModule.dm +++ b/code/modules/procedural_mapping/mapGeneratorModule.dm @@ -108,7 +108,7 @@ //Checks and Rejects dense turfs /datum/map_generator_module/proc/checkPlaceAtom(turf/T) - if(!T) + if(!T || (T.turf_flags & TURF_BLOCKS_POPULATE_TERRAIN_FLORAFEATURES)) return FALSE if(T.density) return FALSE diff --git a/code/modules/projectiles/ammunition/ballistic/foam.dm b/code/modules/projectiles/ammunition/ballistic/foam.dm index 2895d74555be5..7ffa317897a83 100644 --- a/code/modules/projectiles/ammunition/ballistic/foam.dm +++ b/code/modules/projectiles/ammunition/ballistic/foam.dm @@ -10,6 +10,8 @@ harmful = FALSE var/modified = FALSE var/static/list/insertable_items_hint = list(/obj/item/pen) + ///For colored magazine overlays. + var/tip_color = "blue" /obj/item/ammo_casing/foam_dart/Initialize(mapload) . = ..() @@ -56,4 +58,5 @@ projectile_type = /obj/projectile/bullet/foam_dart/riot icon_state = "foamdart_riot" base_icon_state = "foamdart_riot" + tip_color = "red" custom_materials = list(/datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT* 1.125) diff --git a/code/modules/projectiles/ammunition/ballistic/junk.dm b/code/modules/projectiles/ammunition/ballistic/junk.dm new file mode 100644 index 0000000000000..99a9b637923f5 --- /dev/null +++ b/code/modules/projectiles/ammunition/ballistic/junk.dm @@ -0,0 +1,43 @@ +// Junk + +/obj/item/ammo_casing/junk + name = "improvised junk round" + desc = "What is in the shell? Shoot it to find out." + icon_state = "improvshell" + caliber = CALIBER_JUNK + projectile_type = /obj/projectile/bullet/junk + custom_materials = list(/datum/material/iron=SMALL_MATERIAL_AMOUNT*2, /datum/material/glass=SMALL_MATERIAL_AMOUNT*1) + +// Junk Shell Spawner; used to spawn in our random shells upon crafting + +/obj/effect/spawner/random/junk_shell + name = "junk shell spawner" + desc = "Bullet. Bullet Bullet." + icon_state = "junkround" + loot = list( + /obj/item/ammo_casing/junk = 50, + /obj/item/ammo_casing/junk/incendiary = 20, + /obj/item/ammo_casing/junk/shock = 20, + /obj/item/ammo_casing/junk/hunter = 20, + /obj/item/ammo_casing/junk/phasic = 5, + /obj/item/ammo_casing/junk/ripper = 5, + /obj/item/ammo_casing/junk/reaper = 1, + ) + +/obj/item/ammo_casing/junk/incendiary + projectile_type = /obj/projectile/bullet/incendiary/fire/junk + +/obj/item/ammo_casing/junk/phasic + projectile_type = /obj/projectile/bullet/junk/phasic + +/obj/item/ammo_casing/junk/shock + projectile_type = /obj/projectile/bullet/junk/shock + +/obj/item/ammo_casing/junk/hunter + projectile_type = /obj/projectile/bullet/junk/hunter + +/obj/item/ammo_casing/junk/ripper + projectile_type = /obj/projectile/bullet/junk/ripper + +/obj/item/ammo_casing/junk/reaper + projectile_type = /obj/projectile/bullet/junk/reaper diff --git a/code/modules/projectiles/ammunition/ballistic/rifle.dm b/code/modules/projectiles/ammunition/ballistic/rifle.dm index 8e06a0e10b5af..3a7c3fcb59d36 100644 --- a/code/modules/projectiles/ammunition/ballistic/rifle.dm +++ b/code/modules/projectiles/ammunition/ballistic/rifle.dm @@ -51,13 +51,61 @@ projectile_type = /obj/projectile/bullet/shotgun_beanbag/a40mm /obj/item/ammo_casing/rebar - name = "sharpened iron rod" + name = "Sharpened Iron Rod" desc = "A Sharpened Iron rod. It's Pointy!" caliber = CALIBER_REBAR icon_state = "rod_sharp" base_icon_state = "rod_sharp" projectile_type = /obj/projectile/bullet/rebar +/obj/item/ammo_casing/rebar/syndie + name = "Jagged Iron Rod" + desc = "An Iron rod, with notches cut into it. You really dont want this stuck in you." + caliber = CALIBER_REBAR + icon_state = "rod_jagged" + base_icon_state = "rod_jagged" + projectile_type = /obj/projectile/bullet/rebar/syndie + +/obj/item/ammo_casing/rebar/zaukerite + name = "Zaukerite Sliver" + desc = "A sliver of a zaukerite crystal. Due to its irregular, jagged edges, removal of an embedded zaukerite sliver should only be done by trained surgeons." + caliber = CALIBER_REBAR + icon_state = "rod_zaukerite" + base_icon_state = "rod_zaukerite" + projectile_type = /obj/projectile/bullet/rebar/zaukerite + +/obj/item/ammo_casing/rebar/hydrogen + name = "Metallic Hydrogen Bolt" + desc = "An ultra-sharp rod made from pure metallic hydrogen. Armor may as well not exist." + caliber = CALIBER_REBAR + icon_state = "rod_hydrogen" + base_icon_state = "rod_hydrogen" + projectile_type = /obj/projectile/bullet/rebar/hydrogen + +/obj/item/ammo_casing/rebar/healium + name = "Healium Crystal Bolt" + desc = "Who needs a syringe gun, anyway?" + caliber = CALIBER_REBAR + icon_state = "rod_healium" + base_icon_state = "rod_healium" + projectile_type = /obj/projectile/bullet/rebar/healium + +/obj/item/ammo_casing/rebar/supermatter + name = "Supermatter Bolt" + desc = "Wait, how is the bow capable of firing this without dusting?" + caliber = CALIBER_REBAR + icon_state = "rod_supermatter" + base_icon_state = "rod_supermatter" + projectile_type = /obj/projectile/bullet/rebar/supermatter + +/obj/item/ammo_casing/rebar/paperball + name = "Paper Ball" + desc = "Doink!" + caliber = CALIBER_REBAR + icon_state = "paperball" + base_icon_state = "paperball" + projectile_type = /obj/projectile/bullet/paperball + /obj/item/ammo_casing/rebar/Initialize(mapload) . = ..() AddElement(/datum/element/caseless, TRUE) @@ -66,10 +114,3 @@ . = ..() icon_state = "[base_icon_state]" -/obj/item/ammo_casing/rebar/syndie - name = "Jagged iron rod" - desc = "An Iron rod, with notches cut into it. You really dont want this stuck in you." - caliber = CALIBER_REBAR_SYNDIE - icon_state = "rod_jagged" - base_icon_state = "rod_jagged" - projectile_type = /obj/projectile/bullet/rebarsyndie diff --git a/code/modules/projectiles/ammunition/ballistic/rocket.dm b/code/modules/projectiles/ammunition/ballistic/rocket.dm index cf88fd02313c9..25f0bee11a672 100644 --- a/code/modules/projectiles/ammunition/ballistic/rocket.dm +++ b/code/modules/projectiles/ammunition/ballistic/rocket.dm @@ -28,6 +28,9 @@ base_icon_state = "low_yield_rocket" projectile_type = /obj/projectile/bullet/rocket/weak +/obj/item/ammo_casing/rocket/reverse + projectile_type = /obj/projectile/bullet/rocket/reverse + /obj/item/ammo_casing/a75 desc = "A .75 bullet casing." caliber = CALIBER_75 diff --git a/code/modules/projectiles/ammunition/ballistic/shotgun.dm b/code/modules/projectiles/ammunition/ballistic/shotgun.dm index 078f4bba1c4fd..b545500420bc1 100644 --- a/code/modules/projectiles/ammunition/ballistic/shotgun.dm +++ b/code/modules/projectiles/ammunition/ballistic/shotgun.dm @@ -103,15 +103,6 @@ variance = 25 custom_materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*2) -/obj/item/ammo_casing/shotgun/improvised - name = "improvised shell" - desc = "A homemade shotgun casing filled with crushed glass, used to commmit vandalism and property damage." - icon_state = "improvshell" - projectile_type = /obj/projectile/bullet/pellet/shotgun_improvised - custom_materials = list(/datum/material/iron=SMALL_MATERIAL_AMOUNT*2, /datum/material/glass=SMALL_MATERIAL_AMOUNT*1) - pellets = 6 - variance = 30 - /obj/item/ammo_casing/shotgun/ion name = "ion shell" desc = "An advanced shotgun shell which uses a subspace ansible crystal to produce an effect similar to a standard ion rifle. \ diff --git a/code/modules/projectiles/ammunition/energy/special.dm b/code/modules/projectiles/ammunition/energy/special.dm index e5de3df5d50d4..f9d5ca5d61250 100644 --- a/code/modules/projectiles/ammunition/energy/special.dm +++ b/code/modules/projectiles/ammunition/energy/special.dm @@ -69,7 +69,7 @@ firing_effect_type = /obj/effect/temp_visual/dir_setting/firing_effect/blue /obj/item/ammo_casing/energy/shrink - projectile_type = /obj/projectile/beam/shrink + projectile_type = /obj/projectile/magic/shrink/alien select_name = "shrink ray" e_cost = LASER_SHOTS(5, STANDARD_CELL_CHARGE) diff --git a/code/modules/projectiles/ammunition/special/magic.dm b/code/modules/projectiles/ammunition/special/magic.dm index 9135e3ec5b947..0ae053005c4d7 100644 --- a/code/modules/projectiles/ammunition/special/magic.dm +++ b/code/modules/projectiles/ammunition/special/magic.dm @@ -82,3 +82,9 @@ /obj/item/ammo_casing/magic/nothing projectile_type = /obj/projectile/magic/nothing harmful = FALSE + +/obj/item/ammo_casing/magic/shrink + projectile_type = /obj/projectile/magic/shrink + +/obj/item/ammo_casing/magic/shrink/wand + projectile_type = /obj/projectile/magic/shrink/wand diff --git a/code/modules/projectiles/boxes_magazines/_box_magazine.dm b/code/modules/projectiles/boxes_magazines/_box_magazine.dm index 3ef874706b799..207190d08f924 100644 --- a/code/modules/projectiles/boxes_magazines/_box_magazine.dm +++ b/code/modules/projectiles/boxes_magazines/_box_magazine.dm @@ -43,7 +43,7 @@ /obj/item/ammo_box/Initialize(mapload) . = ..() - custom_materials = DSmaterials.FindOrCreateMaterialCombo(custom_materials, 0.1) + custom_materials = SSmaterials.FindOrCreateMaterialCombo(custom_materials, 0.1) if(!start_empty) top_off(starting=TRUE) update_icon_state() @@ -94,7 +94,7 @@ stack_trace("Tried loading unsupported ammocasing type [load_type] into ammo box [type].") return - for(var/i in max(1, stored_ammo.len) to max_ammo) + for(var/i in max(1, stored_ammo.len + 1) to max_ammo) stored_ammo += new round_check(src) update_appearance() diff --git a/code/modules/projectiles/boxes_magazines/external/smg.dm b/code/modules/projectiles/boxes_magazines/external/smg.dm index 7e9fc44f58578..3ebb459ed9319 100644 --- a/code/modules/projectiles/boxes_magazines/external/smg.dm +++ b/code/modules/projectiles/boxes_magazines/external/smg.dm @@ -76,7 +76,7 @@ /obj/item/ammo_box/magazine/smgm45 name = "SMG magazine (.45)" - icon_state = "c20r45-24" + icon_state = "c20r45" base_icon_state = "c20r45" ammo_type = /obj/item/ammo_casing/c45 caliber = CALIBER_45 diff --git a/code/modules/projectiles/boxes_magazines/external/toy.dm b/code/modules/projectiles/boxes_magazines/external/toy.dm index 3a841c605a18c..a153c25107aa8 100644 --- a/code/modules/projectiles/boxes_magazines/external/toy.dm +++ b/code/modules/projectiles/boxes_magazines/external/toy.dm @@ -29,17 +29,30 @@ /obj/item/ammo_box/magazine/toy/smgm45 name = "donksoft SMG magazine" icon_state = "c20r45-toy" - base_icon_state = "c20r45" + base_icon_state = "c20r45-toy" caliber = CALIBER_FOAM ammo_type = /obj/item/ammo_casing/foam_dart max_ammo = 20 /obj/item/ammo_box/magazine/toy/smgm45/update_icon_state() . = ..() - icon_state = "[base_icon_state]-[round(ammo_count(), 2)]" + icon_state = "[base_icon_state]-base" + +/obj/item/ammo_box/magazine/toy/smgm45/update_overlays() + . = ..() + if(!LAZYLEN(stored_ammo)) + return + for(var/i in 1 to stored_ammo.len) + var/round_number = round(i, 2) //i meant the number of the round in the magazine, but i guess it's a round number too lol. + if(round_number == i) //only count odd numbers. + continue + var/obj/item/ammo_casing/foam_dart/boolet = stored_ammo[i] + . += "c20r45-foam-[boolet.tip_color]-[round_number]" + /obj/item/ammo_box/magazine/toy/smgm45/riot icon_state = "c20r45-riot" + base_icon_state = "c20r45-riot" ammo_type = /obj/item/ammo_casing/foam_dart/riot /obj/item/ammo_box/magazine/toy/m762 diff --git a/code/modules/projectiles/boxes_magazines/internal/grenade.dm b/code/modules/projectiles/boxes_magazines/internal/grenade.dm index aacd64383b0d9..42d019b0dc09d 100644 --- a/code/modules/projectiles/boxes_magazines/internal/grenade.dm +++ b/code/modules/projectiles/boxes_magazines/internal/grenade.dm @@ -15,3 +15,6 @@ ammo_type = /obj/item/ammo_casing/rocket caliber = CALIBER_84MM max_ammo = 1 + +/obj/item/ammo_box/magazine/internal/rocketlauncher/empty + start_empty = TRUE diff --git a/code/modules/projectiles/boxes_magazines/internal/revolver.dm b/code/modules/projectiles/boxes_magazines/internal/revolver.dm index 7d881a11c4dca..e74a192d6900f 100644 --- a/code/modules/projectiles/boxes_magazines/internal/revolver.dm +++ b/code/modules/projectiles/boxes_magazines/internal/revolver.dm @@ -16,7 +16,10 @@ caliber = CALIBER_357 max_ammo = 6 multiload = FALSE + start_empty = TRUE -/obj/item/ammo_box/magazine/internal/rus357/Initialize(mapload) - stored_ammo += new ammo_type(src) +/obj/item/ammo_box/magazine/internal/cylinder/rus357/Initialize(mapload) . = ..() + for (var/i in 1 to max_ammo - 1) + stored_ammo += new /obj/item/ammo_casing/a357/spent(src) + stored_ammo += new /obj/item/ammo_casing/a357(src) diff --git a/code/modules/projectiles/boxes_magazines/internal/rifle.dm b/code/modules/projectiles/boxes_magazines/internal/rifle.dm index 5fdc182ccff98..8c6abaa0e7798 100644 --- a/code/modules/projectiles/boxes_magazines/internal/rifle.dm +++ b/code/modules/projectiles/boxes_magazines/internal/rifle.dm @@ -11,13 +11,23 @@ /obj/item/ammo_box/magazine/internal/boltaction/pipegun name = "pipegun internal magazine" - caliber = CALIBER_SHOTGUN - ammo_type = /obj/item/ammo_casing/shotgun/improvised + caliber = CALIBER_JUNK + ammo_type = /obj/item/ammo_casing/junk max_ammo = 1 +/obj/item/ammo_box/magazine/internal/boltaction/pipegun/pistol + name = "pipe pistol internal magazine" + max_ammo = 3 + /obj/item/ammo_box/magazine/internal/boltaction/pipegun/prime name = "regal pipegun internal magazine" - max_ammo = 3 + max_ammo = 4 + ammo_type = /obj/item/ammo_casing/junk/reaper + +/obj/item/ammo_box/magazine/internal/boltaction/pipegun/pistol/prime + name = "regal pipe pistol internal magazine" + max_ammo = 6 + ammo_type = /obj/item/ammo_casing/junk/reaper /obj/item/ammo_box/magazine/internal/enchanted max_ammo = 1 @@ -44,8 +54,5 @@ /obj/item/ammo_box/magazine/internal/boltaction/rebarxbow/syndie max_ammo = 3 caliber = CALIBER_REBAR_SYNDIE - ammo_type = /obj/item/ammo_casing/rebar/syndie - -/obj/item/ammo_box/magazine/internal/boltaction/rebarxbow/syndie/normal - caliber = CALIBER_REBAR_SYNDIE_NORMAL ammo_type = /obj/item/ammo_casing/rebar + diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index 2a18aae0c0f3e..f1df323609dd9 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -32,7 +32,7 @@ var/can_suppress = FALSE var/suppressed_sound = 'sound/weapons/gun/general/heavy_shot_suppressed.ogg' var/suppressed_volume = 60 - var/can_unsuppress = TRUE + var/can_unsuppress = TRUE /// whether a gun can be unsuppressed. for ballistics, also determines if it generates a suppressor overlay var/recoil = 0 //boom boom shake the room var/clumsy_check = TRUE var/obj/item/ammo_casing/chambered = null @@ -64,11 +64,6 @@ /// True if a gun dosen't need a pin, mostly used for abstract guns like tentacles and meathooks var/pinless = FALSE - var/can_bayonet = FALSE //if a bayonet can be added or removed if it already has one. - var/obj/item/knife/bayonet - var/knife_x_offset = 0 - var/knife_y_offset = 0 - var/ammo_x_offset = 0 //used for positioning ammo count overlay on sprite var/ammo_y_offset = 0 @@ -83,12 +78,11 @@ pin = new pin(src) add_seclight_point() + add_bayonet_point() /obj/item/gun/Destroy() if(isobj(pin)) //Can still be the initial path, then we skip QDEL_NULL(pin) - if(bayonet) - QDEL_NULL(bayonet) if(chambered) //Not all guns are chambered (EMP'ed energy guns etc) QDEL_NULL(chambered) if(isatom(suppressed)) //SUPPRESSED IS USED AS BOTH A TRUE/FALSE AND AS A REF, WHAT THE FUCKKKKKKKKKKKKKKKKK @@ -111,6 +105,10 @@ /obj/item/gun/proc/add_seclight_point() return +/// Similarly to add_seclight_point(), handles [the bayonet attachment component][/datum/component/bayonet_attachable] +/obj/item/gun/proc/add_bayonet_point() + return + /obj/item/gun/Exited(atom/movable/gone, direction) . = ..() if(gone == pin) @@ -120,10 +118,6 @@ update_appearance() if(gone == suppressed) clear_suppressor() - if(gone == bayonet) - bayonet = null - if(!QDELING(src)) - update_appearance() ///Clears var and updates icon. In the case of ballistic weapons, also updates the gun's weight. /obj/item/gun/proc/clear_suppressor() @@ -144,13 +138,6 @@ else . += "It doesn't have a firing pin installed, and won't fire." - if(bayonet) - . += "It has \a [bayonet] [can_bayonet ? "" : "permanently "]affixed to it." - if(can_bayonet) //if it has a bayonet and this is false, the bayonet is permanent. - . += span_info("[bayonet] looks like it can be unscrewed from [src].") - if(can_bayonet) - . += "It has a bayonet lug on it." - //called after the gun has successfully fired its chambered ammo. /obj/item/gun/proc/process_chamber(empty_chamber = TRUE, from_firing = TRUE, chamber_next_round = TRUE) handle_chamber(empty_chamber, from_firing, chamber_next_round) @@ -248,30 +235,41 @@ return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN -/obj/item/gun/afterattack_secondary(mob/living/victim, mob/living/user, proximity_flag, click_parameters) - if(!isliving(victim) || !IN_GIVEN_RANGE(user, victim, GUNPOINT_SHOOTER_STRAY_RANGE)) - return ..() //if they're out of range, just shootem. - if(!can_hold_up) - return ..() +/obj/item/gun/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + if(user.combat_mode && isliving(interacting_with)) + return ITEM_INTERACT_SKIP_TO_ATTACK // Gun bash / bayonet attack + if(try_fire_gun(interacting_with, user, list2params(modifiers))) + return ITEM_INTERACT_SUCCESS + return NONE + +/obj/item/gun/interact_with_atom_secondary(atom/interacting_with, mob/living/user, list/modifiers) + if(!can_hold_up || !isliving(interacting_with)) + return interact_with_atom(interacting_with, user, modifiers) + var/datum/component/gunpoint/gunpoint_component = user.GetComponent(/datum/component/gunpoint) if (gunpoint_component) - if(gunpoint_component.target == victim) - balloon_alert(user, "already holding them up!") - else - balloon_alert(user, "already holding someone up!") - return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN - if (user == victim) + balloon_alert(user, "already holding [gunpoint_component.target == interacting_with ? "them" : "someone"] up!") + return ITEM_INTERACT_BLOCKING + if (user == interacting_with) balloon_alert(user, "can't hold yourself up!") - return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN + return ITEM_INTERACT_BLOCKING - if(do_after(user, 0.5 SECONDS, victim)) - user.AddComponent(/datum/component/gunpoint, victim, src) - return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN + if(do_after(user, 0.5 SECONDS, interacting_with)) + user.AddComponent(/datum/component/gunpoint, interacting_with, src) + return ITEM_INTERACT_SUCCESS -/obj/item/gun/afterattack(atom/target, mob/living/user, flag, params) - ..() - fire_gun(target, user, flag, params) - return AFTERATTACK_PROCESSED_ITEM +/obj/item/gun/ranged_interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + if(try_fire_gun(interacting_with, user, list2params(modifiers))) + return ITEM_INTERACT_SUCCESS + return ITEM_INTERACT_BLOCKING + +/obj/item/gun/ranged_interact_with_atom_secondary(atom/interacting_with, mob/living/user, list/modifiers) + if(IN_GIVEN_RANGE(user, interacting_with, GUNPOINT_SHOOTER_STRAY_RANGE)) + return interact_with_atom_secondary(interacting_with, user, modifiers) + return ..() + +/obj/item/gun/proc/try_fire_gun(atom/target, mob/living/user, params) + return fire_gun(target, user, user.Adjacent(target), params) /obj/item/gun/proc/fire_gun(atom/target, mob/living/user, flag, params) if(QDELETED(target)) @@ -466,56 +464,13 @@ /obj/item/gun/proc/reset_semicd() semicd = FALSE -/obj/item/gun/attack(mob/M, mob/living/user) - if(user.combat_mode) //Flogging - if(bayonet) - M.attackby(bayonet, user) - return - else - return ..() - return - -/obj/item/gun/attack_atom(obj/O, mob/living/user, params) - if(user.combat_mode) - if(bayonet) - O.attackby(bayonet, user) - return - return ..() - -/obj/item/gun/attackby(obj/item/I, mob/living/user, params) - if(user.combat_mode) - return ..() - - else if(istype(I, /obj/item/knife)) - var/obj/item/knife/K = I - if(!can_bayonet || !K.bayonet || bayonet) //ensure the gun has an attachment point available, and that the knife is compatible with it. - return ..() - if(!user.transferItemToLoc(I, src)) - return - to_chat(user, span_notice("You attach [K] to [src]'s bayonet lug.")) - bayonet = K - update_appearance() - - else - return ..() - /obj/item/gun/screwdriver_act(mob/living/user, obj/item/I) . = ..() if(.) return if(!user.can_perform_action(src, FORBID_TELEKINESIS_REACH)) return - - if(bayonet && can_bayonet) //if it has a bayonet, and the bayonet can be removed - I.play_tool_sound(src) - to_chat(user, span_notice("You unfix [bayonet] from [src].")) - bayonet.forceMove(drop_location()) - - if(Adjacent(user) && !issilicon(user)) - user.put_in_hands(bayonet) - return ITEM_INTERACT_SUCCESS - - else if(pin?.pin_removable && user.is_holding(src)) + if(pin?.pin_removable && user.is_holding(src)) user.visible_message(span_warning("[user] attempts to remove [pin] from [src] with [I]."), span_notice("You attempt to remove [pin] from [src]. (It will take [DisplayTimeText(FIRING_PIN_REMOVAL_DELAY)].)"), null, 3) if(I.use_tool(src, user, FIRING_PIN_REMOVAL_DELAY, volume = 50)) @@ -560,19 +515,6 @@ QDEL_NULL(pin) return TRUE -/obj/item/gun/update_overlays() - . = ..() - if(bayonet) - var/mutable_appearance/knife_overlay - var/state = "bayonet" //Generic state. - if(bayonet.icon_state in icon_states('icons/obj/weapons/guns/bayonets.dmi')) //Snowflake state? - state = bayonet.icon_state - var/icon/bayonet_icons = 'icons/obj/weapons/guns/bayonets.dmi' - knife_overlay = mutable_appearance(bayonet_icons, state) - knife_overlay.pixel_x = knife_x_offset - knife_overlay.pixel_y = knife_y_offset - . += knife_overlay - /obj/item/gun/animate_atom_living(mob/living/owner) new /mob/living/simple_animal/hostile/mimic/copy/ranged(drop_location(), src, owner) diff --git a/code/modules/projectiles/guns/ballistic.dm b/code/modules/projectiles/guns/ballistic.dm index 71a69c02d992f..361d68123f5c4 100644 --- a/code/modules/projectiles/guns/ballistic.dm +++ b/code/modules/projectiles/guns/ballistic.dm @@ -220,7 +220,7 @@ if (bolt_type == BOLT_TYPE_OPEN && bolt_locked) . += "[icon_state]_bolt" - if(suppressed) + if(suppressed && can_unsuppress) // if it can't be unsuppressed, we assume the suppressor is integrated into the gun itself and don't generate an overlay var/mutable_appearance/MA = mutable_appearance(icon, "[icon_state]_suppressor") if(suppressor_x_offset) MA.pixel_x = suppressor_x_offset @@ -572,9 +572,9 @@ if (bolt_locked) . += "The [bolt_wording] is locked back and needs to be released before firing or de-fouling." if (suppressed) - . += "It has a suppressor attached that can be removed with alt+click." + . += "It has a suppressor [can_unsuppress ? "attached that can be removed with alt+click." : "that is integral or can't otherwise be removed."]" if(can_misfire) - . += span_danger("You get the feeling this might explode if you fire it....") + . += span_danger("You get the feeling this might explode if you fire it...") if(misfire_probability > 0) . += span_danger("Given the state of the gun, there is a [misfire_probability]% chance it'll misfire.") @@ -638,8 +638,7 @@ GLOBAL_LIST_INIT(gun_saw_types, typecacheof(list( if(sawn_off) balloon_alert(user, "it's already shortened!") return - if(bayonet) - balloon_alert(user, "[bayonet.name] must be removed!") + if (SEND_SIGNAL(src, COMSIG_GUN_BEING_SAWNOFF, user) & COMPONENT_CANCEL_SAWING_OFF) return user.changeNext_move(CLICK_CD_MELEE) user.visible_message(span_notice("[user] begins to shorten [src]."), span_notice("You begin to shorten [src]...")) @@ -649,27 +648,30 @@ GLOBAL_LIST_INIT(gun_saw_types, typecacheof(list( user.visible_message(span_danger("[src] goes off!"), span_danger("[src] goes off in your face!")) return - if(do_after(user, 3 SECONDS, target = src)) - if(sawn_off) - return - user.visible_message(span_notice("[user] shortens [src]!"), span_notice("You shorten [src].")) - sawn_off = TRUE - if(handle_modifications) - name = "sawn-off [src.name]" - desc = sawn_desc - update_weight_class(WEIGHT_CLASS_NORMAL) - //The file might not have a "gun" icon, let's prepare for this - lefthand_file = 'icons/mob/inhands/weapons/guns_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/guns_righthand.dmi' - inhand_x_dimension = 32 - inhand_y_dimension = 32 - inhand_icon_state = "gun" - worn_icon_state = "gun" - slot_flags &= ~ITEM_SLOT_BACK //you can't sling it on your back - slot_flags |= ITEM_SLOT_BELT //but you can wear it on your belt (poorly concealed under a trenchcoat, ideally) - recoil = SAWN_OFF_RECOIL - update_appearance() + if(!do_after(user, 3 SECONDS, target = src)) + return + if(sawn_off) + return + user.visible_message(span_notice("[user] shortens [src]!"), span_notice("You shorten [src].")) + sawn_off = TRUE + SEND_SIGNAL(src, COMSIG_GUN_SAWN_OFF) + if(!handle_modifications) return TRUE + name = "sawn-off [src.name]" + desc = sawn_desc + update_weight_class(WEIGHT_CLASS_NORMAL) + //The file might not have a "gun" icon, let's prepare for this + lefthand_file = 'icons/mob/inhands/weapons/guns_lefthand.dmi' + righthand_file = 'icons/mob/inhands/weapons/guns_righthand.dmi' + inhand_x_dimension = 32 + inhand_y_dimension = 32 + inhand_icon_state = "gun" + worn_icon_state = "gun" + slot_flags &= ~ITEM_SLOT_BACK //you can't sling it on your back + slot_flags |= ITEM_SLOT_BELT //but you can wear it on your belt (poorly concealed under a trenchcoat, ideally) + recoil = SAWN_OFF_RECOIL + update_appearance() + return TRUE /obj/item/gun/ballistic/proc/guncleaning(mob/user, obj/item/A) if(misfire_probability == initial(misfire_probability)) diff --git a/code/modules/projectiles/guns/ballistic/automatic.dm b/code/modules/projectiles/guns/ballistic/automatic.dm index 8c6e2ae7cbde3..b86e2a9938995 100644 --- a/code/modules/projectiles/guns/ballistic/automatic.dm +++ b/code/modules/projectiles/guns/ballistic/automatic.dm @@ -41,13 +41,13 @@ fire_delay = 2 burst_size = 3 pin = /obj/item/firing_pin/implant/pindicate - can_bayonet = TRUE - knife_x_offset = 26 - knife_y_offset = 12 mag_display = TRUE mag_display_ammo = TRUE empty_indicator = TRUE +/obj/item/gun/ballistic/automatic/c20r/add_bayonet_point() + AddComponent(/datum/component/bayonet_attachable, offset_x = 26, offset_y = 12) + /obj/item/gun/ballistic/automatic/c20r/update_overlays() . = ..() if(!chambered && empty_indicator) //this is duplicated due to a layering issue with the select fire icon. @@ -75,9 +75,6 @@ can_suppress = FALSE burst_size = 1 actions_types = list() - can_bayonet = TRUE - knife_x_offset = 25 - knife_y_offset = 12 mag_display = TRUE mag_display_ammo = TRUE empty_indicator = TRUE @@ -86,6 +83,9 @@ . = ..() AddComponent(/datum/component/automatic_fire, 0.3 SECONDS) +/obj/item/gun/ballistic/automatic/wt550/add_bayonet_point() + AddComponent(/datum/component/bayonet_attachable, offset_x = 25, offset_y = 12) + /obj/item/gun/ballistic/automatic/plastikov name = "\improper PP-95 SMG" desc = "An ancient 9mm submachine gun pattern updated and simplified to lower costs, though perhaps simplified too much." @@ -159,17 +159,18 @@ underbarrel = new /obj/item/gun/ballistic/revolver/grenadelauncher/unrestricted(src) update_appearance() -/obj/item/gun/ballistic/automatic/m90/afterattack_secondary(atom/target, mob/living/user, proximity_flag, click_parameters) - underbarrel.afterattack(target, user, proximity_flag, click_parameters) - return SECONDARY_ATTACK_CONTINUE_CHAIN +/obj/item/gun/ballistic/automatic/m90/try_fire_gun(atom/target, mob/living/user, params) + if(LAZYACCESS(params2list(params), RIGHT_CLICK)) + return underbarrel.try_fire_gun(target, user, params) + return ..() -/obj/item/gun/ballistic/automatic/m90/attackby(obj/item/A, mob/user, params) - if(isammocasing(A)) - if(istype(A, underbarrel.magazine.ammo_type)) +/obj/item/gun/ballistic/automatic/m90/item_interaction(mob/living/user, obj/item/tool, list/modifiers) + if(isammocasing(tool)) + if(istype(tool, underbarrel.magazine.ammo_type)) underbarrel.attack_self(user) - underbarrel.attackby(A, user, params) - else - ..() + underbarrel.attackby(tool, user, list2params(modifiers)) + return ITEM_INTERACT_BLOCKING + return ..() /obj/item/gun/ballistic/automatic/tommygun name = "\improper Thompson SMG" @@ -276,15 +277,15 @@ . += "l6_door_[cover_open ? "open" : "closed"]" -/obj/item/gun/ballistic/automatic/l6_saw/afterattack(atom/target as mob|obj|turf, mob/living/user as mob|obj, flag, params) - . |= AFTERATTACK_PROCESSED_ITEM - +/obj/item/gun/ballistic/automatic/l6_saw/try_fire_gun(atom/target, mob/living/user, params) if(cover_open) balloon_alert(user, "close the cover!") - return - else - . |= ..() + return FALSE + + . = ..() + if(.) update_appearance() + return . //ATTACK HAND IGNORING PARENT RETURN VALUE /obj/item/gun/ballistic/automatic/l6_saw/attack_hand(mob/user, list/modifiers) diff --git a/code/modules/projectiles/guns/ballistic/bows/_bow.dm b/code/modules/projectiles/guns/ballistic/bows/_bow.dm index 86094d0fe17ad..15c89ddb8553d 100644 --- a/code/modules/projectiles/guns/ballistic/bows/_bow.dm +++ b/code/modules/projectiles/guns/ballistic/bows/_bow.dm @@ -63,14 +63,13 @@ playsound(src, 'sound/weapons/gun/bow/bow_draw.ogg', 25, TRUE) update_appearance() -/obj/item/gun/ballistic/bow/afterattack(atom/target, mob/living/user, flag, params, passthrough = FALSE) - . |= AFTERATTACK_PROCESSED_ITEM +/obj/item/gun/ballistic/bow/try_fire_gun(atom/target, mob/living/user, params) if(!chambered) - return + return FALSE if(!drawn) to_chat(user, span_warning("Without drawing the bow, the arrow uselessly falls to the ground.")) drop_arrow() - return + return FALSE return ..() //fires, removing the arrow /obj/item/gun/ballistic/bow/equipped(mob/user, slot, initial) diff --git a/code/modules/projectiles/guns/ballistic/launchers.dm b/code/modules/projectiles/guns/ballistic/launchers.dm index b6d8108bb5438..23c41d1d07e15 100644 --- a/code/modules/projectiles/guns/ballistic/launchers.dm +++ b/code/modules/projectiles/guns/ballistic/launchers.dm @@ -23,7 +23,7 @@ /obj/item/gun/ballistic/revolver/grenadelauncher/cyborg desc = "A 6-shot grenade launcher." name = "multi grenade launcher" - icon = 'icons/mob/mecha_equipment.dmi' + icon = 'icons/obj/devices/mecha_equipment.dmi' icon_state = "mecha_grenadelnchr" accepted_magazine_type = /obj/item/ammo_box/magazine/internal/cylinder/grenademulti pin = /obj/item/firing_pin @@ -89,8 +89,10 @@ This one has been fitted with a special backblast diverter to prevent 'friendly' fire 'accidents' during use." backblast = FALSE -/obj/item/gun/ballistic/rocketlauncher/afterattack() +/obj/item/gun/ballistic/rocketlauncher/try_fire_gun(atom/target, mob/living/user, params) . = ..() + if(!.) + return magazine.get_round(FALSE) //Hack to clear the mag after it's fired /obj/item/gun/ballistic/rocketlauncher/attack_self_tk(mob/user) @@ -124,3 +126,8 @@ span_userdanger("You look around after realizing you're still here, then proceed to choke yourself to death with [src]!")) sleep(2 SECONDS) return OXYLOSS + +/obj/item/gun/ballistic/rocketlauncher/unrestricted/nanotrasen + desc = "A reusable rocket propelled grenade launcher. The words \"Syndicate this way\" and an arrow have been written near the barrel. \ + A sticker near the cheek rest reads, \"ENSURE AREA BEHIND IS CLEAR BEFORE FIRING\"" + accepted_magazine_type = /obj/item/ammo_box/magazine/internal/rocketlauncher/empty diff --git a/code/modules/projectiles/guns/ballistic/pistol.dm b/code/modules/projectiles/guns/ballistic/pistol.dm index 270e7edd93078..35660571074fd 100644 --- a/code/modules/projectiles/guns/ballistic/pistol.dm +++ b/code/modules/projectiles/guns/ballistic/pistol.dm @@ -30,6 +30,20 @@ /obj/item/gun/ballistic/automatic/pistol/fire_mag spawn_magazine_type = /obj/item/ammo_box/magazine/m9mm/fire +/obj/item/gun/ballistic/automatic/pistol/contraband + +/obj/item/gun/ballistic/automatic/pistol/contraband/Initialize(mapload) + if(prob(10)) + pin = pick( + list( + /obj/item/firing_pin/clown, + /obj/item/firing_pin/clown/ultra, + /obj/item/firing_pin/clown/ultra/selfdestruct, + )) + . = ..() + pin.pin_removable = FALSE + + /obj/item/gun/ballistic/automatic/pistol/suppressed/Initialize(mapload) . = ..() var/obj/item/suppressor/S = new(src) @@ -43,6 +57,52 @@ empty_indicator = TRUE suppressor_x_offset = 12 +/obj/item/gun/ballistic/automatic/pistol/clandestine/fisher + name = "\improper Ansem/SC pistol" + desc = "A modified variant of the Ansem, spiritual successor to the Makarov, featuring an integral suppressor and push-button trigger on the grip \ + for an underbarrel-mounted disruptor, similar in operation to the standalone SC/FISHER. Chambered in 10mm." + desc_controls = "Right-click to use the underbarrel disruptor. Two shots maximum between self-charges." + icon_state = "pistol_evil_fisher" + suppressed = TRUE + can_suppress = FALSE + can_unsuppress = FALSE + var/obj/item/gun/energy/recharge/fisher/underbarrel + +/obj/item/gun/ballistic/automatic/pistol/clandestine/fisher/examine_more(mob/user) + . = ..() + . += span_notice("The Ansem/SC is a Scarborough Arms-manufactured overhaul suite for the also Scarborough Arms-manufactured Ansem handgun, designed for special \ + operators who like to operate operationally, and/or people who really, really hate lightbulbs, and tend to fight people who really like lightbulbs. \ + The slide is lengthened and has an integrated suppressor, while a compact kinetic light disruptor was mounted underneath the barrel. \ + Scarborough Arms has never actually officially responded to allegations that they're involved with the modification and/or manufacture \ + of the SC/FISHER or similar disruptor weapons. Operators are reminded that kinetic light disruptors do not actually physically harm targets.
    \ + Caveat emptor.") + +/obj/item/gun/ballistic/automatic/pistol/clandestine/fisher/Initialize(mapload) + . = ..() + underbarrel = new /obj/item/gun/energy/recharge/fisher(src) + +/obj/item/gun/ballistic/automatic/pistol/clandestine/fisher/Destroy() + QDEL_NULL(underbarrel) + return ..() + +/obj/item/gun/ballistic/automatic/pistol/clandestine/fisher/try_fire_gun(atom/target, mob/living/user, params) + if(LAZYACCESS(params2list(params), RIGHT_CLICK)) + return underbarrel.try_fire_gun(target, user, params) + return ..() + +/obj/item/gun/ballistic/automatic/pistol/clandestine/fisher/afterattack(atom/target, mob/user, click_parameters) + var/obj/projectile/energy/fisher/melee/simulated_hit = new + simulated_hit.firer = user + simulated_hit.on_hit(target) + +/obj/item/gun/ballistic/automatic/pistol/clandestine/fisher/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum) + . = ..() + if(.) + return + var/obj/projectile/energy/fisher/melee/simulated_hit = new + simulated_hit.firer = throwingdatum.get_thrower() + simulated_hit.on_hit(hit_atom) + /obj/item/gun/ballistic/automatic/pistol/m1911 name = "\improper M1911" desc = "A classic .45 handgun with a small magazine capacity." @@ -83,6 +143,19 @@ lock_back_sound = 'sound/weapons/gun/pistol/slide_lock.ogg' bolt_drop_sound = 'sound/weapons/gun/pistol/slide_drop.ogg' +/obj/item/gun/ballistic/automatic/pistol/deagle/contraband + +/obj/item/gun/ballistic/automatic/pistol/deagle/contraband/Initialize(mapload) + if(prob(10)) + pin = pick( + list( + /obj/item/firing_pin/clown, + /obj/item/firing_pin/clown/ultra, + /obj/item/firing_pin/clown/ultra/selfdestruct, + )) + . = ..() + pin.pin_removable = FALSE + /obj/item/gun/ballistic/automatic/pistol/deagle/gold desc = "A gold plated Desert Eagle folded over a million times by superior martian gunsmiths. Uses .50 AE ammo." icon_state = "deagleg" diff --git a/code/modules/projectiles/guns/ballistic/revolver.dm b/code/modules/projectiles/guns/ballistic/revolver.dm index e142616cbd4c4..f7d9ed19cbea5 100644 --- a/code/modules/projectiles/guns/ballistic/revolver.dm +++ b/code/modules/projectiles/guns/ballistic/revolver.dm @@ -311,3 +311,10 @@ user.emote("scream") user.drop_all_held_items() user.Paralyze(80) + +/obj/item/gun/ballistic/revolver/reverse/mateba + name = /obj/item/gun/ballistic/revolver/mateba::name + desc = /obj/item/gun/ballistic/revolver/mateba::desc + clumsy_check = FALSE + icon_state = "mateba" + diff --git a/code/modules/projectiles/guns/ballistic/rifle.dm b/code/modules/projectiles/guns/ballistic/rifle.dm index 966dd2caf32a3..21ddb63211e63 100644 --- a/code/modules/projectiles/guns/ballistic/rifle.dm +++ b/code/modules/projectiles/guns/ballistic/rifle.dm @@ -54,9 +54,6 @@ slot_flags = ITEM_SLOT_BACK accepted_magazine_type = /obj/item/ammo_box/magazine/internal/boltaction - can_bayonet = TRUE - knife_x_offset = 42 - knife_y_offset = 12 can_be_sawn_off = TRUE weapon_weight = WEAPON_HEAVY var/jamming_chance = 20 @@ -67,11 +64,13 @@ SET_BASE_PIXEL(-8, 0) +/obj/item/gun/ballistic/rifle/boltaction/add_bayonet_point() + AddComponent(/datum/component/bayonet_attachable, offset_x = 32, offset_y = 12) + /obj/item/gun/ballistic/rifle/boltaction/sawoff(mob/user) . = ..() if(.) spread = 36 - can_bayonet = FALSE SET_BASE_PIXEL(0, 0) update_appearance() @@ -173,7 +172,8 @@ /obj/item/gun/ballistic/rifle/rebarxbow name = "Heated Rebar Crossbow" desc = "Made from an inducer, iron rods, and some wire, this crossbow fires sharpened iron rods, made from the plentiful iron rods found stationwide. \ - Only holds one rod in the magazine - you can craft the crossbow with a crowbar to try and force a second rod in, but risks a misfire, or worse..." + Additionally, can fire specialty ammo made from the materials in the atmos crystalizer - zaukerite, metallic hydrogen, and healium crytals all work. \ + Very slow to reload - you can craft the crossbow with a crowbar to try loosen the crossbar, but risks a misfire, or worse..." icon = 'icons/obj/weapons/guns/ballistic.dmi' icon_state = "rebarxbow" inhand_icon_state = "rebarxbow" @@ -194,7 +194,7 @@ weapon_weight = WEAPON_HEAVY initial_caliber = CALIBER_REBAR accepted_magazine_type = /obj/item/ammo_box/magazine/internal/boltaction/rebarxbow/normal - fire_sound = 'sound/items/syringeproj.ogg' + fire_sound = 'sound/items/xbow_lock.ogg' can_be_sawn_off = FALSE tac_reloads = FALSE var/draw_time = 3 SECONDS @@ -219,6 +219,10 @@ bolt_locked = FALSE update_appearance() +/obj/item/gun/ballistic/rifle/rebarxbow/shoot_live_shot(mob/living/user) + ..() + rack() + /obj/item/gun/ballistic/rifle/rebarxbow/can_shoot() if (bolt_locked) return FALSE @@ -230,24 +234,22 @@ /obj/item/gun/ballistic/rifle/rebarxbow/forced name = "Stressed Rebar Crossbow" - desc = "Some idiot decided that they would risk shooting themselves in the face if it meant they could have a bit more ammo in this crossbow. Hopefully, it was worth it." + desc = "Some idiot decided that they would risk shooting themselves in the face if it meant they could have a draw this crossbow a bit faster. Hopefully, it was worth it." // Feel free to add a recipe to allow you to change it back if you would like, I just wasn't sure if you could have two recipes for the same thing. can_misfire = TRUE + draw_time = 1.5 misfire_probability = 25 accepted_magazine_type = /obj/item/ammo_box/magazine/internal/boltaction/rebarxbow/force /obj/item/gun/ballistic/rifle/rebarxbow/syndie name = "Syndicate Rebar Crossbow" desc = "The syndicate liked the bootleg rebar crossbow NT engineers made, so they showed what it could be if properly developed. \ - Holds three shots without a chance of exploding, and features a built in scope. Normally uses special syndicate jagged iron bars, but can be wrenched to shoot inferior normal ones." + Holds three shots without a chance of exploding, and features a built in scope. Compatable with all known crossbow ammunition." icon_state = "rebarxbowsyndie" inhand_icon_state = "rebarxbowsyndie" worn_icon_state = "rebarxbowsyndie" w_class = WEIGHT_CLASS_NORMAL - can_modify_ammo = TRUE - initial_caliber = CALIBER_REBAR_SYNDIE - alternative_caliber = CALIBER_REBAR_SYNDIE_NORMAL - alternative_ammo_misfires = FALSE + initial_caliber = CALIBER_REBAR draw_time = 1 accepted_magazine_type = /obj/item/ammo_box/magazine/internal/boltaction/rebarxbow/syndie @@ -255,46 +257,81 @@ . = ..() AddComponent(/datum/component/scope, range_modifier = 2) //enough range to at least be useful for stealth +/// PIPE GUNS /// + /obj/item/gun/ballistic/rifle/boltaction/pipegun name = "pipegun" - desc = "An excellent weapon for flushing out tunnel rats and enemy assistants, but its rifling leaves much to be desired." - icon = 'icons/obj/weapons/guns/ballistic.dmi' - icon_state = "musket" - inhand_icon_state = "musket" - worn_icon_state = "musket" - lefthand_file = 'icons/mob/inhands/weapons/64x_guns_left.dmi' - righthand_file = 'icons/mob/inhands/weapons/64x_guns_right.dmi' - inhand_x_dimension = 64 - inhand_y_dimension = 64 + desc = "A symbol that the true masters of this place are not those who merely inhabit it, but the one willing to twist it towards a killing intent." + icon_state = "pipegun" + inhand_icon_state = "pipegun" + worn_icon_state = "pipegun" fire_sound = 'sound/weapons/gun/sniper/shot.ogg' accepted_magazine_type = /obj/item/ammo_box/magazine/internal/boltaction/pipegun - initial_caliber = CALIBER_SHOTGUN - alternative_caliber = CALIBER_STRILKA310 - initial_fire_sound = 'sound/weapons/gun/sniper/shot.ogg' - alternative_fire_sound = 'sound/weapons/gun/shotgun/shot.ogg' - can_modify_ammo = TRUE - can_bayonet = TRUE - knife_x_offset = 25 - knife_y_offset = 11 + + projectile_damage_multiplier = 1.35 + obj_flags = UNIQUE_RENAME can_be_sawn_off = FALSE - projectile_damage_multiplier = 0.75 + trigger_guard = TRIGGER_GUARD_ALLOW_ALL - SET_BASE_PIXEL(0, 0) + SET_BASE_PIXEL(-8, 0) + +/obj/item/gun/ballistic/rifle/boltaction/pipegun/add_bayonet_point() + AddComponent(/datum/component/bayonet_attachable, offset_x = 35, offset_y = 10) /obj/item/gun/ballistic/rifle/boltaction/pipegun/handle_chamber() . = ..() do_sparks(1, TRUE, src) +/obj/item/gun/ballistic/rifle/boltaction/pipegun/examine_more(mob/user) + . = ..() + . += span_notice("Looking down at the [name], you recall a tale told to you in some distant memory...") + + . += span_info("It's said that the first slaying committed on a Nanotrasen space station was by an assistant.") + . += span_info("That this act, done by toolbox, maybe spear, was what consigned their kind to a life of destitution, rejection and violence.") + . += span_info("They carry the weight of this act visibly; the grey jumpsuit. Breathing deeply filtered air. And with bloodsoaked yellow hands clenched into fists. Eyes, sharp and waiting. Hunters in the dark.") + . += span_info("Eventually, these killing spirits sought to stake a claim on the metal tombs they were trapped within. Rejecting their status. Determined to be something more.") + . += span_info("This weapon is one such tool. And it is a grim one indeed. Wrought from scrap, pulled from the station's walls and floors and the very nails holding it together.") + . += span_info("It is a symbol that the true masters of this place are not those who merely inhabit it. But the one willing to twist it towards a killing intent.") + +/obj/item/gun/ballistic/rifle/boltaction/pipegun/pistol + name = "pipe pistol" + desc = "It is foolish to think that anyone wearing the grey is incapable of hurting you, simply because they are not baring their teeth." + icon_state = "pipepistol" + inhand_icon_state = "pipepistol" + worn_icon_state = "gun" + accepted_magazine_type = /obj/item/ammo_box/magazine/internal/boltaction/pipegun/pistol + projectile_damage_multiplier = 0.50 + spread = 15 //kinda inaccurate + slot_flags = ITEM_SLOT_BELT + w_class = WEIGHT_CLASS_NORMAL + weapon_weight = WEAPON_MEDIUM + + SET_BASE_PIXEL(0, 0) + +/obj/item/gun/ballistic/rifle/boltaction/pipegun/pipepistol/add_bayonet_point() + return + /obj/item/gun/ballistic/rifle/boltaction/pipegun/prime name = "regal pipegun" - desc = "Older, territorial assistants typically possess more valuable loot." - icon_state = "musket_prime" - inhand_icon_state = "musket_prime" - worn_icon_state = "musket_prime" + desc = "To call this 'regal' is a cruel irony. For the only noteworthy quality of nobility is in how it is wielded to kill. \ + All monarchs deserve to be crowned. But none will remember the dead tyrant for the red stain they left on the carpet." + icon_state = "regal_pipegun" + inhand_icon_state = "regal_pipegun" + worn_icon_state = "regal_pipegun" accepted_magazine_type = /obj/item/ammo_box/magazine/internal/boltaction/pipegun/prime + projectile_damage_multiplier = 2 + +/obj/item/gun/ballistic/rifle/boltaction/pipegun/pistol/prime + name = "regal pipe pistol" + desc = "What value is there in honesty towards the dishonest? So that they might twist the arm and slit the wrist? \ + The open palm is no sign of weakness; it is to draw the eyes away from the other hand, lying in wait." + icon_state = "regal_pipepistol" + inhand_icon_state = "regal_pipepistol" + accepted_magazine_type = /obj/item/ammo_box/magazine/internal/boltaction/pipegun/pistol/prime projectile_damage_multiplier = 1 + spread = 0 -/// MAGICAL BOLT ACTIONS + ARCANE BARRAGE? /// +/// MAGICAL BOLT ACTIONS /// /obj/item/gun/ballistic/rifle/enchanted name = "enchanted bolt action rifle" diff --git a/code/modules/projectiles/guns/ballistic/shotgun.dm b/code/modules/projectiles/guns/ballistic/shotgun.dm index 85f3283ca43d1..792edbeaa16aa 100644 --- a/code/modules/projectiles/guns/ballistic/shotgun.dm +++ b/code/modules/projectiles/guns/ballistic/shotgun.dm @@ -218,35 +218,32 @@ toggle_magazine() return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN -/obj/item/gun/ballistic/shotgun/bulldog/afterattack_secondary(mob/living/victim, mob/living/user, proximity_flag, click_parameters) +/obj/item/gun/ballistic/shotgun/bulldog/ranged_interact_with_atom_secondary(atom/interacting_with, mob/living/user, list/modifiers) if(secondary_magazine) toggle_magazine() - return SECONDARY_ATTACK_CALL_NORMAL - -/obj/item/gun/ballistic/shotgun/bulldog/attackby_secondary(obj/item/weapon, mob/user, params) - if(!istype(weapon, secondary_magazine_type)) - balloon_alert(user, "[weapon.name] doesn't fit!") - return SECONDARY_ATTACK_CALL_NORMAL - if(!user.transferItemToLoc(weapon, src)) - to_chat(user, span_warning("You cannot seem to get [src] out of your hands!")) - return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN + return ..() + +/obj/item/gun/ballistic/shotgun/bulldog/item_interaction_secondary(mob/living/user, obj/item/tool, list/modifiers) + if(!istype(tool, secondary_magazine_type)) + return ..() + if(!user.transferItemToLoc(tool, src)) + return ITEM_INTERACT_BLOCKING var/obj/item/ammo_box/magazine/old_mag = secondary_magazine - secondary_magazine = weapon + secondary_magazine = tool if(old_mag) user.put_in_hands(old_mag) balloon_alert(user, "secondary [magazine_wording] loaded") playsound(src, load_empty_sound, load_sound_volume, load_sound_vary) update_appearance() - return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN + return ITEM_INTERACT_SUCCESS -/obj/item/gun/ballistic/shotgun/bulldog/alt_click_secondary(mob/user) +/obj/item/gun/ballistic/shotgun/bulldog/click_alt_secondary(mob/user) if(secondary_magazine) var/obj/item/ammo_box/magazine/old_mag = secondary_magazine secondary_magazine = null user.put_in_hands(old_mag) update_appearance() playsound(src, load_empty_sound, load_sound_volume, load_sound_vary) - return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN /obj/item/gun/ballistic/shotgun/bulldog/proc/toggle_magazine() var/primary_magazine = magazine @@ -339,6 +336,7 @@ . = ..() . += span_notice("Right-click to shoot the hook.") -/obj/item/gun/ballistic/shotgun/hook/afterattack_secondary(atom/target, mob/user, proximity_flag, click_parameters) - hook.afterattack(target, user, proximity_flag, click_parameters) - return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN +/obj/item/gun/ballistic/shotgun/hook/try_fire_gun(atom/target, mob/living/user, params) + if(LAZYACCESS(params2list(params), RIGHT_CLICK)) + return hook.try_fire_gun(target, user, params) + return ..() diff --git a/code/modules/projectiles/guns/energy.dm b/code/modules/projectiles/guns/energy.dm index dfcb59f1e9c1c..3571e0858c8af 100644 --- a/code/modules/projectiles/guns/energy.dm +++ b/code/modules/projectiles/guns/energy.dm @@ -5,8 +5,8 @@ icon = 'icons/obj/weapons/guns/energy.dmi' /// What type of power cell this uses - var/obj/item/stock_parts/cell/cell - var/cell_type = /obj/item/stock_parts/cell + var/obj/item/stock_parts/power_store/cell + var/cell_type = /obj/item/stock_parts/power_store/cell ///if the weapon has custom icons for individual ammo types it can switch between. ie disabler beams, taser, laser/lethals, ect. var/modifystate = FALSE var/list/ammo_type = list(/obj/item/ammo_casing/energy) @@ -26,33 +26,45 @@ var/single_shot_type_overlay = TRUE ///Should we give an overlay to empty guns? var/display_empty = TRUE - var/selfcharge = 0 - var/charge_timer = 0 - var/charge_delay = 8 + ///whether the gun's cell drains the cyborg user's cell to recharge var/use_cyborg_cell = FALSE ///set to true so the gun is given an empty cell var/dead_cell = FALSE + // Self charging vars + + /// Whether or not our gun charges its own cell on a timer. + var/selfcharge = 0 + /// The amount of time between instances of cell self recharge + var/charge_timer = 0 + /// The amount of seconds_per_tick during process() before the gun charges itself + var/charge_delay = 8 + /// The amount restored by the gun to the cell per self charge tick + var/self_charge_amount = STANDARD_ENERGY_GUN_SELF_CHARGE_RATE + /obj/item/gun/energy/fire_sounds() // What frequency the energy gun's sound will make - var/frequency_to_use + var/pitch_to_use = 1 var/obj/item/ammo_casing/energy/shot = ammo_type[select] // What percentage of the full battery a shot will expend var/shot_cost_percent = round(clamp(shot.e_cost / cell.maxcharge, 0, 1) * 100) // Ignore this on oversized/infinite cells or ammo without cost - if(shot_cost_percent > 0) + if(shot_cost_percent > 0 && shot_cost_percent < 100) // The total amount of shots the fully charged energy gun can fire before running out - var/max_shots = round(100/shot_cost_percent) + var/max_shots = round(100/shot_cost_percent) - 1 // How many shots left before the energy gun's current battery runs out of energy - var/shots_left = round((round(clamp(cell.charge / cell.maxcharge, 0, 1) * 100))/shot_cost_percent) - frequency_to_use = sin((90/max_shots) * shots_left) + var/shots_left = round((round(clamp(cell.charge / cell.maxcharge, 0, 1) * 100))/shot_cost_percent) - 1 + pitch_to_use = LERP(1, 0.3, (1 - (shots_left/max_shots)) ** 2) + + var/sound/playing_sound = sound(suppressed ? suppressed_sound : fire_sound) + playing_sound.pitch = pitch_to_use if(suppressed) - playsound(src, suppressed_sound, suppressed_volume, vary_fire_sound, ignore_walls = FALSE, extrarange = SILENCED_SOUND_EXTRARANGE, falloff_distance = 0, frequency = frequency_to_use) + playsound(src, playing_sound, suppressed_volume, vary_fire_sound, ignore_walls = FALSE, extrarange = SILENCED_SOUND_EXTRARANGE, falloff_distance = 0) else - playsound(src, fire_sound, fire_sound_volume, vary_fire_sound, frequency = frequency_to_use) + playsound(src, playing_sound, fire_sound_volume, vary_fire_sound) /obj/item/gun/energy/emp_act(severity) . = ..() @@ -150,7 +162,7 @@ if(charge_timer < charge_delay) return charge_timer = 0 - cell.give(STANDARD_ENERGY_GUN_SELF_CHARGE_RATE * seconds_per_tick) + cell.give(self_charge_amount * seconds_per_tick) if(!chambered) //if empty chamber we try to charge a new shot recharge_newshot(TRUE) update_appearance() diff --git a/code/modules/projectiles/guns/energy/beam_rifle.dm b/code/modules/projectiles/guns/energy/beam_rifle.dm index 1c5b025baea80..0bda1930c6260 100644 --- a/code/modules/projectiles/guns/energy/beam_rifle.dm +++ b/code/modules/projectiles/guns/energy/beam_rifle.dm @@ -1,580 +1,64 @@ - -#define ZOOM_LOCK_AUTOZOOM_FREEMOVE 0 -#define ZOOM_LOCK_AUTOZOOM_ANGLELOCK 1 -#define ZOOM_LOCK_CENTER_VIEW 2 -#define ZOOM_LOCK_OFF 3 - -#define AUTOZOOM_PIXEL_STEP_FACTOR 48 - -#define AIMING_BEAM_ANGLE_CHANGE_THRESHOLD 0.1 - -/obj/item/gun/energy/beam_rifle - name = "particle acceleration rifle" - desc = "An energy-based anti material marksman rifle that uses highly charged particle beams moving at extreme velocities to decimate whatever is unfortunate enough to be targeted by one." - desc_controls = "Hold down left click while scoped to aim, when weapon is fully aimed (Tracer goes from red to green as it charges), release to fire. Moving while aiming or changing where you're pointing at while aiming will delay the aiming process depending on how much you changed." +/obj/item/gun/energy/event_horizon + name = "\improper Event Horizon anti-existential beam rifle" + desc = "The deranged minds of Nanotrasen, in their great hubris and spite, have birthed forth the definitive conclusion to the arms race. Weaponized black holes, and a platform to deliver them.\ + To look upon this existential maleficence is to know that the pursuit of profit has consigned all life to this pathetic conclusion; the destruction of reality itself." icon = 'icons/obj/weapons/guns/energy.dmi' icon_state = "esniper" inhand_icon_state = null worn_icon_state = null fire_sound = 'sound/weapons/beam_sniper.ogg' slot_flags = ITEM_SLOT_BACK - force = 15 + force = 20 //This is maybe the sanest part of this weapon. custom_materials = null - recoil = 4 + recoil = 2 ammo_x_offset = 3 ammo_y_offset = 3 modifystate = FALSE charge_sections = 1 weapon_weight = WEAPON_HEAVY w_class = WEIGHT_CLASS_BULKY - ammo_type = list(/obj/item/ammo_casing/energy/beam_rifle/hitscan) - actions_types = list(/datum/action/item_action/zoom_lock_action) - cell_type = /obj/item/stock_parts/cell/beam_rifle - var/aiming = FALSE - var/aiming_time = 12 - var/aiming_time_fire_threshold = 5 - var/aiming_time_left = 12 - var/aiming_time_increase_user_movement = 3 - var/scoped_slow = 1 - var/aiming_time_increase_angle_multiplier = 0.3 - var/last_process = 0 - - var/lastangle = 0 - var/aiming_lastangle = 0 - var/mob/current_user = null - var/list/obj/effect/projectile/tracer/current_tracers + ammo_type = list(/obj/item/ammo_casing/energy/event_horizon) + selfcharge = TRUE + self_charge_amount = STANDARD_ENERGY_GUN_SELF_CHARGE_RATE * 10 - var/structure_piercing = 2 //Amount * 2. For some reason structures aren't respecting this unless you have it doubled. Probably with the objects in question's Bump() code instead of this but I'll deal with this later. - var/structure_bleed_coeff = 0.7 - var/wall_pierce_amount = 0 - var/wall_devastate = 0 - var/aoe_structure_range = 1 - var/aoe_structure_damage = 50 - var/aoe_fire_range = 2 - var/aoe_fire_chance = 40 - var/aoe_mob_range = 1 - var/aoe_mob_damage = 30 - var/impact_structure_damage = 60 - var/projectile_damage = 30 - var/projectile_stun = 0 - var/projectile_setting_pierce = TRUE - var/delay = 25 - var/lastfire = 0 - - //ZOOMING - var/zoom_current_view_increase = 0 - ///The radius you want to zoom by - var/zoom_target_view_increase = 9.5 - var/zooming = FALSE - var/zoom_lock = ZOOM_LOCK_OFF - var/zooming_angle - var/current_zoom_x = 0 - var/current_zoom_y = 0 - -/obj/item/gun/energy/beam_rifle/apply_fantasy_bonuses(bonus) +/obj/item/gun/energy/event_horizon/Initialize(mapload) . = ..() - delay = modify_fantasy_variable("delay", delay, -bonus * 2) - aiming_time = modify_fantasy_variable("aiming_time", aiming_time, -bonus * 2) - recoil = modify_fantasy_variable("recoil", recoil, round(-bonus / 2)) - -/obj/item/gun/energy/beam_rifle/remove_fantasy_bonuses(bonus) - delay = reset_fantasy_variable("delay", delay) - aiming_time = reset_fantasy_variable("aiming_time", aiming_time) - recoil = reset_fantasy_variable("recoil", recoil) - return ..() - -/obj/item/gun/energy/beam_rifle/debug - delay = 0 - cell_type = /obj/item/stock_parts/cell/infinite - aiming_time = 0 - recoil = 0 - pin = /obj/item/firing_pin - -/obj/item/gun/energy/beam_rifle/equipped(mob/user) - set_user(user) - return ..() - -/obj/item/gun/energy/beam_rifle/pickup(mob/user) - set_user(user) - return ..() - -/obj/item/gun/energy/beam_rifle/dropped(mob/user) - set_user() - return ..() - -/obj/item/gun/energy/beam_rifle/ui_action_click(mob/user, actiontype) - if(istype(actiontype, /datum/action/item_action/zoom_lock_action)) - zoom_lock++ - if(zoom_lock > 3) - zoom_lock = 0 - switch(zoom_lock) - if(ZOOM_LOCK_AUTOZOOM_FREEMOVE) - to_chat(user, span_boldnotice("You switch [src]'s zooming processor to free directional.")) - if(ZOOM_LOCK_AUTOZOOM_ANGLELOCK) - to_chat(user, span_boldnotice("You switch [src]'s zooming processor to locked directional.")) - if(ZOOM_LOCK_CENTER_VIEW) - to_chat(user, span_boldnotice("You switch [src]'s zooming processor to center mode.")) - if(ZOOM_LOCK_OFF) - to_chat(user, span_boldnotice("You disable [src]'s zooming system.")) - reset_zooming() - return - - return ..() - -/obj/item/gun/energy/beam_rifle/proc/set_autozoom_pixel_offsets_immediate(current_angle) - if(zoom_lock == ZOOM_LOCK_CENTER_VIEW || zoom_lock == ZOOM_LOCK_OFF) - return - current_zoom_x = sin(current_angle) + sin(current_angle) * AUTOZOOM_PIXEL_STEP_FACTOR * zoom_current_view_increase - current_zoom_y = cos(current_angle) + cos(current_angle) * AUTOZOOM_PIXEL_STEP_FACTOR * zoom_current_view_increase - -/obj/item/gun/energy/beam_rifle/proc/handle_zooming() - if(!zooming || !check_user()) - return - current_user.client.view_size.setTo(zoom_target_view_increase) - zoom_current_view_increase = zoom_target_view_increase - set_autozoom_pixel_offsets_immediate(zooming_angle) - -/obj/item/gun/energy/beam_rifle/proc/start_zooming() - if(zoom_lock == ZOOM_LOCK_OFF) - return - zooming = TRUE - -/obj/item/gun/energy/beam_rifle/proc/stop_zooming(mob/user) - if(zooming) - zooming = FALSE - reset_zooming(user) - -/obj/item/gun/energy/beam_rifle/proc/reset_zooming(mob/user) - if(!user) - user = current_user - if(!user || !user.client) - return FALSE - user.client.view_size.zoomIn() - zoom_current_view_increase = 0 - zooming_angle = 0 - current_zoom_x = 0 - current_zoom_y = 0 - -/obj/item/gun/energy/beam_rifle/attack_self(mob/user) - projectile_setting_pierce = !projectile_setting_pierce - balloon_alert(user, "switched to [projectile_setting_pierce ? "pierce":"impact"] mode") - aiming_beam() - -/obj/item/gun/energy/beam_rifle/proc/update_slowdown() - if(aiming) - slowdown = scoped_slow - else - slowdown = initial(slowdown) - -/obj/item/gun/energy/beam_rifle/Initialize(mapload) - . = ..() - fire_delay = delay - current_tracers = list() - START_PROCESSING(SSfastprocess, src) - -/obj/item/gun/energy/beam_rifle/Destroy() - STOP_PROCESSING(SSfastprocess, src) - set_user(null) - QDEL_LIST(current_tracers) - return ..() - -/obj/item/gun/energy/beam_rifle/emp_act(severity) - . = ..() - if(. & EMP_PROTECT_SELF) - return - chambered = null - recharge_newshot() - -/obj/item/gun/energy/beam_rifle/proc/aiming_beam(force_update = FALSE) - var/diff = abs(aiming_lastangle - lastangle) - if(!check_user()) - return - if(diff < AIMING_BEAM_ANGLE_CHANGE_THRESHOLD && !force_update) - return - aiming_lastangle = lastangle - var/obj/projectile/beam/beam_rifle/hitscan/aiming_beam/P = new - P.gun = src - P.wall_pierce_amount = wall_pierce_amount - P.structure_pierce_amount = structure_piercing - P.do_pierce = projectile_setting_pierce - if(aiming_time) - var/percent = ((100/aiming_time)*aiming_time_left) - P.color = rgb(255 * percent,255 * ((100 - percent) / 100),0) - else - P.color = rgb(0, 255, 0) - var/turf/curloc = get_turf(src) - - var/atom/target_atom = current_user.client.mouse_object_ref?.resolve() - var/turf/targloc = get_turf(target_atom) - if(!istype(targloc)) - if(!istype(curloc)) - return - targloc = get_turf_in_angle(lastangle, curloc, 10) - var/mouse_modifiers = params2list(current_user.client.mouseParams) - P.preparePixelProjectile(targloc, current_user, mouse_modifiers, 0) - P.fire(lastangle) - -/obj/item/gun/energy/beam_rifle/process() - if(!aiming) - last_process = world.time - return - check_user() - handle_zooming() - aiming_time_left = max(0, aiming_time_left - (world.time - last_process)) - aiming_beam(TRUE) - last_process = world.time + AddComponent(/datum/component/scope, range_modifier = 4) -/obj/item/gun/energy/beam_rifle/proc/check_user(automatic_cleanup = TRUE) - if(!istype(current_user) || !isturf(current_user.loc) || !(src in current_user.held_items) || current_user.incapacitated()) //Doesn't work if you're not holding it! - if(automatic_cleanup) - stop_aiming() - return FALSE - return TRUE +/obj/item/gun/energy/event_horizon/process_fire(atom/target, mob/living/user, message, params, zone_override, bonus_spread) -/obj/item/gun/energy/beam_rifle/proc/process_aim(params) - var/angle = mouse_angle_from_client(current_user?.client, params) - current_user.setDir(angle2dir_cardinal(angle)) - var/difference = abs(closer_angle_difference(lastangle, angle)) - delay_penalty(difference * aiming_time_increase_angle_multiplier) - lastangle = angle - -/obj/item/gun/energy/beam_rifle/proc/on_mob_move() - SIGNAL_HANDLER - check_user() - if(aiming) - delay_penalty(aiming_time_increase_user_movement) - process_aim(current_user?.client?.mouseParams) - INVOKE_ASYNC(src, PROC_REF(aiming_beam), TRUE) - -/obj/item/gun/energy/beam_rifle/proc/start_aiming(params) - aiming_time_left = aiming_time - aiming = TRUE - process_aim(params) - aiming_beam(TRUE) - zooming_angle = lastangle - start_zooming() - -/obj/item/gun/energy/beam_rifle/proc/stop_aiming(mob/user) - set waitfor = FALSE - aiming_time_left = aiming_time - aiming = FALSE - QDEL_LIST(current_tracers) - stop_zooming(user) - -/obj/item/gun/energy/beam_rifle/proc/set_user(mob/user) - if(user == current_user) - return - stop_aiming(current_user) - if(istype(current_user)) - unregister_client_signals(current_user) - UnregisterSignal(current_user, list(COMSIG_MOVABLE_MOVED, COMSIG_MOB_LOGIN, COMSIG_MOB_LOGOUT)) - current_user = null - if(!istype(user)) + if(!HAS_TRAIT(user, TRAIT_USER_SCOPED)) + balloon_alert(user, "must be scoped!") return - current_user = user - RegisterSignal(user, COMSIG_MOVABLE_MOVED, PROC_REF(on_mob_move)) - RegisterSignal(user, COMSIG_MOB_LOGIN, PROC_REF(register_client_signals)) - RegisterSignal(user, COMSIG_MOB_LOGOUT, PROC_REF(unregister_client_signals)) - if(user.client) - register_client_signals(user) -/obj/item/gun/energy/beam_rifle/proc/register_client_signals(mob/source) - SIGNAL_HANDLER - RegisterSignal(source.client, COMSIG_CLIENT_MOUSEDOWN, PROC_REF(on_mouse_down)) - -/obj/item/gun/energy/beam_rifle/proc/unregister_client_signals(mob/source) - SIGNAL_HANDLER - stop_aiming() - if(QDELETED(source.client)) - return - UnregisterSignal(source.client, list(COMSIG_CLIENT_MOUSEDOWN, COMSIG_CLIENT_MOUSEUP, COMSIG_CLIENT_MOUSEDRAG)) - -///change the aiming beam angle to that of the mouse cursor. -/obj/item/gun/energy/beam_rifle/proc/on_mouse_drag(client/source, src_object, over_object, src_location, over_location, src_control, over_control, params) - SIGNAL_HANDLER - if(aiming) - process_aim(params) - INVOKE_ASYNC(src, PROC_REF(aiming_beam)) - if(zoom_lock == ZOOM_LOCK_AUTOZOOM_FREEMOVE) - zooming_angle = lastangle - set_autozoom_pixel_offsets_immediate(zooming_angle) - -///Start aiming and charging the beam -/obj/item/gun/energy/beam_rifle/proc/on_mouse_down(client/source, atom/movable/object, location, control, params) - SIGNAL_HANDLER - if(source.mob.get_active_held_item() != src) - return - if(!object.IsAutoclickable() || (object in source.mob.contents) || (object == source.mob)) - return - INVOKE_ASYNC(src, PROC_REF(start_aiming), params) - RegisterSignal(source, COMSIG_CLIENT_MOUSEDRAG, PROC_REF(on_mouse_drag)) - RegisterSignal(source, COMSIG_CLIENT_MOUSEUP, PROC_REF(on_mouse_up)) - -///Stop aiming and fire the beam if charged enough -/obj/item/gun/energy/beam_rifle/proc/on_mouse_up(client/source, atom/movable/object, location, control, params) - SIGNAL_HANDLER - if(!object.IsAutoclickable()) - return - process_aim(params) - UnregisterSignal(source, list(COMSIG_CLIENT_MOUSEDRAG, COMSIG_CLIENT_MOUSEUP)) - if(aiming_time_left <= aiming_time_fire_threshold && check_user()) - sync_ammo() - var/atom/target = source.mouse_object_ref?.resolve() - if(target) - INVOKE_ASYNC(src, PROC_REF(afterattack), target, source.mob, FALSE, source.mouseParams, passthrough = TRUE) - stop_aiming() - QDEL_LIST(current_tracers) - -/obj/item/gun/energy/beam_rifle/afterattack(atom/target, mob/living/user, flag, params, passthrough = FALSE) - . |= AFTERATTACK_PROCESSED_ITEM - if(flag) //It's adjacent, is the user, or is on the user's person - if(target in user.contents) //can't shoot stuff inside us. - return - if(!ismob(target) || user.combat_mode) //melee attack - return - if(target == user && user.zone_selected != BODY_ZONE_PRECISE_MOUTH) //so we can't shoot ourselves (unless mouth selected) - return - if(!passthrough && (aiming_time > aiming_time_fire_threshold)) - return - if(lastfire > world.time + delay) - return - lastfire = world.time . = ..() - stop_aiming() - -/obj/item/gun/energy/beam_rifle/proc/sync_ammo() - for(var/obj/item/ammo_casing/energy/beam_rifle/AC in contents) - AC.sync_stats() - -/obj/item/gun/energy/beam_rifle/proc/delay_penalty(amount) - aiming_time_left = clamp(aiming_time_left + amount, 0, aiming_time) - -/obj/item/ammo_casing/energy/beam_rifle - name = "particle acceleration lens" - desc = "Don't look into barrel!" - var/wall_pierce_amount = 0 - var/wall_devastate = 0 - var/aoe_structure_range = 1 - var/aoe_structure_damage = 30 - var/aoe_fire_range = 2 - var/aoe_fire_chance = 66 - var/aoe_mob_range = 1 - var/aoe_mob_damage = 20 - var/impact_structure_damage = 50 - var/projectile_damage = 40 - var/projectile_stun = 0 - var/structure_piercing = 2 - var/structure_bleed_coeff = 0.7 - var/do_pierce = TRUE - var/obj/item/gun/energy/beam_rifle/host + message_admins("[ADMIN_LOOKUPFLW(user)] has fired an anti-existential beam at [ADMIN_VERBOSEJMP(user)].") -/obj/item/ammo_casing/energy/beam_rifle/proc/sync_stats() - var/obj/item/gun/energy/beam_rifle/BR = loc - if(!istype(BR)) - stack_trace("Beam rifle syncing error") - host = BR - do_pierce = BR.projectile_setting_pierce - wall_pierce_amount = BR.wall_pierce_amount - wall_devastate = BR.wall_devastate - aoe_structure_range = BR.aoe_structure_range - aoe_structure_damage = BR.aoe_structure_damage - aoe_fire_range = BR.aoe_fire_range - aoe_fire_chance = BR.aoe_fire_chance - aoe_mob_range = BR.aoe_mob_range - aoe_mob_damage = BR.aoe_mob_damage - impact_structure_damage = BR.impact_structure_damage - projectile_damage = BR.projectile_damage - projectile_stun = BR.projectile_stun - delay = BR.delay - structure_piercing = BR.structure_piercing - structure_bleed_coeff = BR.structure_bleed_coeff - -/obj/item/ammo_casing/energy/beam_rifle/ready_proj(atom/target, mob/living/user, quiet, zone_override = "") - . = ..() - var/obj/projectile/beam/beam_rifle/hitscan/HS_BB = loaded_projectile - if(!istype(HS_BB)) - return - HS_BB.impact_direct_damage = projectile_damage - HS_BB.stun = projectile_stun - HS_BB.impact_structure_damage = impact_structure_damage - HS_BB.aoe_mob_damage = aoe_mob_damage - HS_BB.aoe_mob_range = clamp(aoe_mob_range, 0, 15) //Badmin safety lock - HS_BB.aoe_fire_chance = aoe_fire_chance - HS_BB.aoe_fire_range = aoe_fire_range - HS_BB.aoe_structure_damage = aoe_structure_damage - HS_BB.aoe_structure_range = clamp(aoe_structure_range, 0, 15) //Badmin safety lock - HS_BB.wall_devastate = wall_devastate - HS_BB.wall_pierce_amount = wall_pierce_amount - HS_BB.structure_pierce_amount = structure_piercing - HS_BB.structure_bleed_coeff = structure_bleed_coeff - HS_BB.do_pierce = do_pierce - HS_BB.gun = host - -/obj/item/ammo_casing/energy/beam_rifle/throw_proj(atom/target, turf/targloc, mob/living/user, params, spread, atom/fired_from) - var/turf/curloc = get_turf(user) - if(!istype(curloc) || !loaded_projectile) - return FALSE - var/obj/item/gun/energy/beam_rifle/gun = loc - if(!targloc && gun) - targloc = get_turf_in_angle(gun.lastangle, curloc, 10) - else if(!targloc) - return FALSE - var/firing_dir - if(loaded_projectile.firer) - firing_dir = loaded_projectile.firer.dir - if(!loaded_projectile.suppressed && firing_effect_type) - new firing_effect_type(get_turf(src), firing_dir) - var/modifiers = params2list(params) - loaded_projectile.preparePixelProjectile(target, user, modifiers, spread) - loaded_projectile.fire(gun? gun.lastangle : null, null) - loaded_projectile = null - return TRUE - -/obj/item/ammo_casing/energy/beam_rifle/hitscan - projectile_type = /obj/projectile/beam/beam_rifle/hitscan - select_name = "beam" - e_cost = LASER_SHOTS(5, 50000) // Beam rifle has a custom cell +/obj/item/ammo_casing/energy/event_horizon + projectile_type = /obj/projectile/beam/event_horizon + select_name = "doomsday" + e_cost = LASER_SHOTS(1, STANDARD_CELL_CHARGE) fire_sound = 'sound/weapons/beam_sniper.ogg' -/obj/projectile/beam/beam_rifle - name = "particle beam" +/obj/projectile/beam/event_horizon + name = "anti-existential beam" icon = null hitsound = 'sound/effects/explosion3.ogg' - damage = 0 //Handled manually. + damage = 100 // Does it matter? damage_type = BURN armor_flag = ENERGY range = 150 jitter = 20 SECONDS - var/obj/item/gun/energy/beam_rifle/gun - var/structure_pierce_amount = 0 //All set to 0 so the gun can manually set them during firing. - var/structure_bleed_coeff = 0 - var/structure_pierce = 0 - var/do_pierce = TRUE - var/wall_pierce_amount = 0 - var/wall_pierce = 0 - var/wall_devastate = 0 - var/aoe_structure_range = 0 - var/aoe_structure_damage = 0 - var/aoe_fire_range = 0 - var/aoe_fire_chance = 0 - var/aoe_mob_range = 0 - var/aoe_mob_damage = 0 - var/impact_structure_damage = 0 - var/impact_direct_damage = 0 - var/list/pierced = list() - -/obj/projectile/beam/beam_rifle/proc/AOE(turf/epicenter) - if(!epicenter) - return - new /obj/effect/temp_visual/explosion/fast(epicenter) - for(var/mob/living/L in range(aoe_mob_range, epicenter)) //handle aoe mob damage - L.adjustFireLoss(aoe_mob_damage) - to_chat(L, span_userdanger("\The [src] sears you!")) - for(var/turf/T in RANGE_TURFS(aoe_fire_range, epicenter)) //handle aoe fire - if(prob(aoe_fire_chance)) - new /obj/effect/hotspot(T) - for(var/obj/O in range(aoe_structure_range, epicenter)) - if(!isitem(O)) - O.take_damage(aoe_structure_damage * get_damage_coeff(O), BURN, LASER, FALSE) - -/obj/projectile/beam/beam_rifle/prehit_pierce(atom/A) - if(isclosedturf(A) && (wall_pierce < wall_pierce_amount)) - if(prob(wall_devastate)) - if(iswallturf(A)) - var/turf/closed/wall/W = A - W.dismantle_wall(TRUE, TRUE) - else - SSexplosions.medturf += A - ++wall_pierce - return PROJECTILE_PIERCE_PHASE // yeah this gun is a snowflakey piece of garbage - if(isobj(A) && (structure_pierce < structure_pierce_amount)) - ++structure_pierce - var/obj/O = A - O.take_damage((impact_structure_damage + aoe_structure_damage) * structure_bleed_coeff * get_damage_coeff(A), BURN, ENERGY, FALSE) - return PROJECTILE_PIERCE_PHASE // ditto and this could be refactored to on_hit honestly - return ..() - -/obj/projectile/beam/beam_rifle/proc/get_damage_coeff(atom/target) - if(istype(target, /obj/machinery/door)) - return 0.4 - if(istype(target, /obj/structure/window)) - return 0.5 - return 1 - -/obj/projectile/beam/beam_rifle/proc/handle_impact(atom/target) - if(isobj(target)) - var/obj/O = target - O.take_damage(impact_structure_damage * get_damage_coeff(target), BURN, LASER, FALSE) - if(isliving(target)) - var/mob/living/L = target - L.adjustFireLoss(impact_direct_damage) - L.emote("scream") - -/obj/projectile/beam/beam_rifle/proc/handle_hit(atom/target, piercing_hit = FALSE) - set waitfor = FALSE - if(!is_hostile_projectile()) - return FALSE - playsound(src, 'sound/effects/explosion3.ogg', 100, TRUE) - if(!do_pierce) - AOE(get_turf(target) || get_turf(src)) - if(!QDELETED(target)) - handle_impact(target) - -/obj/projectile/beam/beam_rifle/on_hit(atom/target, blocked = 0, pierce_hit) - handle_hit(target, pierce_hit) - return ..() - -/obj/projectile/beam/beam_rifle/is_hostile_projectile() - return TRUE // on hit = boom fire - -/obj/projectile/beam/beam_rifle/hitscan - icon_state = "" hitscan = TRUE tracer_type = /obj/effect/projectile/tracer/tracer/beam_rifle - var/constant_tracer = FALSE -/obj/projectile/beam/beam_rifle/hitscan/generate_hitscan_tracers(cleanup = TRUE, duration = 5, impacting = TRUE, highlander) - set waitfor = FALSE - if(isnull(highlander)) - highlander = constant_tracer - if(highlander && istype(gun)) - QDEL_LIST(gun.current_tracers) - for(var/datum/point/p in beam_segments) - gun.current_tracers += generate_tracer_between_points(p, beam_segments[p], tracer_type, color, 0, hitscan_light_range, hitscan_light_color_override, hitscan_light_intensity) - else - for(var/datum/point/p in beam_segments) - generate_tracer_between_points(p, beam_segments[p], tracer_type, color, duration, hitscan_light_range, hitscan_light_color_override, hitscan_light_intensity) - if(cleanup) - QDEL_LIST(beam_segments) - beam_segments = null - QDEL_NULL(beam_index) - -/obj/projectile/beam/beam_rifle/hitscan/aiming_beam - tracer_type = /obj/effect/projectile/tracer/tracer/aiming - name = "aiming beam" - hitsound = null - hitsound_wall = null - damage = 0 - constant_tracer = TRUE - hitscan_light_range = 0 - hitscan_light_intensity = 0 - hitscan_light_color_override = "#99ff99" - reflectable = REFLECT_FAKEPROJECTILE - -/obj/projectile/beam/beam_rifle/hitscan/aiming_beam/is_hostile_projectile() - return FALSE // just an aiming reticle - -/obj/projectile/beam/beam_rifle/hitscan/aiming_beam/prehit_pierce(atom/target) - return PROJECTILE_DELETE_WITHOUT_HITTING +/obj/projectile/beam/event_horizon/on_hit(atom/target, blocked, pierce_hit) + . = ..() -/obj/projectile/beam/beam_rifle/hitscan/aiming_beam/on_hit(atom/target, blocked = 0, pierce_hit) - SHOULD_CALL_PARENT(FALSE) // This is some snowflake stuff so whatever - qdel(src) - return BULLET_ACT_BLOCK + // Where we droppin' boys? + var/turf/rift_loc = get_turf(target) -#undef AIMING_BEAM_ANGLE_CHANGE_THRESHOLD -#undef AUTOZOOM_PIXEL_STEP_FACTOR -#undef ZOOM_LOCK_AUTOZOOM_ANGLELOCK -#undef ZOOM_LOCK_AUTOZOOM_FREEMOVE -#undef ZOOM_LOCK_CENTER_VIEW -#undef ZOOM_LOCK_OFF + // Spawn our temporary rift, then activate it. + var/obj/reality_tear/temporary/tear = new(rift_loc) + tear.start_disaster() + message_admins("[ADMIN_LOOKUPFLW(target)] has been hit by an anti-existential beam at [ADMIN_VERBOSEJMP(rift_loc)], creating a singularity.") diff --git a/code/modules/projectiles/guns/energy/crank_guns.dm b/code/modules/projectiles/guns/energy/crank_guns.dm index 64ffa86f36015..fa56075990ec5 100644 --- a/code/modules/projectiles/guns/energy/crank_guns.dm +++ b/code/modules/projectiles/guns/energy/crank_guns.dm @@ -7,9 +7,9 @@ ammo_type = list(/obj/item/ammo_casing/energy/laser/musket) slot_flags = ITEM_SLOT_BACK obj_flags = UNIQUE_RENAME - can_bayonet = TRUE - knife_x_offset = 22 - knife_y_offset = 11 + +/obj/item/gun/energy/laser/musket/add_bayonet_point() + AddComponent(/datum/component/bayonet_attachable, offset_x = 22, offset_y = 11) /obj/item/gun/energy/laser/musket/Initialize(mapload) . = ..() @@ -84,12 +84,12 @@ shaded_charge = TRUE ammo_x_offset = 1 obj_flags = UNIQUE_RENAME - can_bayonet = TRUE - knife_x_offset = 19 - knife_y_offset = 13 w_class = WEIGHT_CLASS_NORMAL dual_wield_spread = 5 //as intended by the coders +/obj/item/gun/energy/laser/thermal/add_bayonet_point() + AddComponent(/datum/component/bayonet_attachable, offset_x = 19, offset_y = 13) + /obj/item/gun/energy/laser/thermal/Initialize(mapload) . = ..() AddElement(/datum/element/empprotection, EMP_PROTECT_SELF|EMP_PROTECT_CONTENTS) diff --git a/code/modules/projectiles/guns/energy/dueling.dm b/code/modules/projectiles/guns/energy/dueling.dm index f35769e663c71..9a7fa9aa78bea 100644 --- a/code/modules/projectiles/guns/energy/dueling.dm +++ b/code/modules/projectiles/guns/energy/dueling.dm @@ -365,6 +365,7 @@ icon_closed = "medalbox" icon_broken = "medalbox+b" base_icon_state = "medalbox" + icon_open = "medalboxopen" /obj/item/storage/lockbox/dueling/Initialize(mapload) . = ..() @@ -372,16 +373,6 @@ atom_storage.max_slots = 2 atom_storage.set_holdable(/obj/item/gun/energy/dueling) -/obj/item/storage/lockbox/dueling/update_icon_state() - if(atom_storage?.locked) - icon_state = icon_locked - return ..() - if(broken) - icon_state = icon_broken - return ..() - icon_state = open ? "[base_icon_state]open" : icon_closed - return ..() - /obj/item/storage/lockbox/dueling/PopulateContents() . = ..() var/obj/item/gun/energy/dueling/gun_A = new(src) diff --git a/code/modules/projectiles/guns/energy/energy_gun.dm b/code/modules/projectiles/guns/energy/energy_gun.dm index fec816b1e765f..3ce3338bf8749 100644 --- a/code/modules/projectiles/guns/energy/energy_gun.dm +++ b/code/modules/projectiles/guns/energy/energy_gun.dm @@ -34,7 +34,7 @@ icon_state = "mini" inhand_icon_state = "gun" w_class = WEIGHT_CLASS_SMALL - cell_type = /obj/item/stock_parts/cell/mini_egun + cell_type = /obj/item/stock_parts/power_store/cell/mini_egun ammo_x_offset = 2 charge_sections = 3 single_shot_type_overlay = FALSE @@ -75,7 +75,7 @@ /obj/item/gun/energy/e_gun/hos name = "\improper X-01 MultiPhase Energy Gun" desc = "This is an expensive, modern recreation of an antique laser gun. This gun has several unique firemodes, but lacks the ability to recharge over time." - cell_type = /obj/item/stock_parts/cell/hos_gun + cell_type = /obj/item/stock_parts/power_store/cell/hos_gun icon_state = "hoslaser" w_class = WEIGHT_CLASS_NORMAL force = 10 @@ -86,7 +86,7 @@ /obj/item/gun/energy/e_gun/dragnet name = "\improper DRAGnet" - desc = "The \"Dynamic Rapid-Apprehension of the Guilty\" net is a revolution in law enforcement technology." + desc = "The \"Dynamic Rapid-Apprehension of the Guilty\" net is a revolution in law enforcement technology. Can by synced with a DRAGnet beacon to set a teleport destination for snare rounds." icon_state = "dragnet" inhand_icon_state = "dragnet" lefthand_file = 'icons/mob/inhands/weapons/guns_lefthand.dmi' @@ -95,10 +95,35 @@ modifystate = FALSE w_class = WEIGHT_CLASS_NORMAL ammo_x_offset = 1 + ///A dragnet beacon set to be the teleport destination for snare teleport rounds. + var/obj/item/dragnet_beacon/linked_beacon /obj/item/gun/energy/e_gun/dragnet/add_seclight_point() return +/obj/item/gun/energy/e_gun/dragnet/item_interaction(mob/living/user, obj/item/tool, list/modifiers) + if(istype(tool, /obj/item/dragnet_beacon)) + link_beacon(user, tool) + +///Sets the linked_beacon var on the dragnet, which becomes the snare round's teleport destination. +/obj/item/gun/energy/e_gun/dragnet/proc/link_beacon(mob/living/user, obj/item/dragnet_beacon/our_beacon) + if(linked_beacon) + if(our_beacon == linked_beacon) + balloon_alert(user, "already synced!") + return + else + UnregisterSignal(linked_beacon, COMSIG_QDELETING) //You're getting overridden dude. + + linked_beacon = our_beacon + balloon_alert(user, "beacon synced") + RegisterSignal(our_beacon, COMSIG_QDELETING, PROC_REF(handle_beacon_disable)) + +///Handles clearing the linked_beacon reference in the event that it is deleted. +/obj/item/gun/energy/e_gun/dragnet/proc/handle_beacon_disable(datum/source) + SIGNAL_HANDLER + visible_message(span_warning("A light on the [src] flashes, indicating that it is no longer linked with a DRAGnet beacon!")) + linked_beacon = null + /obj/item/gun/energy/e_gun/dragnet/snare name = "Energy Snare Launcher" desc = "Fires an energy snare that slows the target down." diff --git a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm index 5037d26d144bb..1cfa73ddc6451 100644 --- a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm +++ b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm @@ -7,10 +7,8 @@ ammo_type = list(/obj/item/ammo_casing/energy/kinetic) item_flags = NONE obj_flags = UNIQUE_RENAME + resistance_flags = FIRE_PROOF weapon_weight = WEAPON_LIGHT - can_bayonet = TRUE - knife_x_offset = 20 - knife_y_offset = 12 gun_flags = NOT_A_REAL_GUN ///List of all mobs that projectiles fired from this gun will ignore. var/list/ignored_mob_types @@ -19,6 +17,9 @@ ///The max capacity of modkits the PKA can have installed at once. var/max_mod_capacity = 100 +/obj/item/gun/energy/recharge/kinetic_accelerator/add_bayonet_point() + AddComponent(/datum/component/bayonet_attachable, offset_x = 20, offset_y = 12) + /obj/item/gun/energy/recharge/kinetic_accelerator/Initialize(mapload) . = ..() // Only actual KAs can be converted @@ -129,12 +130,17 @@ MK.uninstall(src) return ..() +/obj/item/gun/energy/recharge/kinetic_accelerator/Entered(atom/movable/arrived, atom/old_loc, list/atom/old_locs) + . = ..() + if(istype(arrived, /obj/item/borg/upgrade/modkit)) + modkits |= arrived + /obj/item/gun/energy/recharge/kinetic_accelerator/attackby(obj/item/I, mob/user) if(istype(I, /obj/item/borg/upgrade/modkit)) var/obj/item/borg/upgrade/modkit/MK = I MK.install(src, user) else - ..() + return ..() /obj/item/gun/energy/recharge/kinetic_accelerator/proc/get_remaining_mod_capacity() var/current_capacity_used = 0 @@ -248,6 +254,8 @@ require_model = TRUE model_type = list(/obj/item/robot_model/miner) model_flags = BORG_MODEL_MINER + //Most modkits are supposed to allow duplicates. The ones that don't should be blocked by PKA code anyways. + allow_duplicates = TRUE var/denied_type = null var/maximum_of_type = 1 var/cost = 30 @@ -263,7 +271,7 @@ if(istype(A, /obj/item/gun/energy/recharge/kinetic_accelerator) && !issilicon(user)) install(A, user) else - ..() + return ..() /obj/item/borg/upgrade/modkit/action(mob/living/silicon/robot/R) . = ..() @@ -294,7 +302,7 @@ return to_chat(user, span_notice("You install the modkit.")) playsound(loc, 'sound/items/screwdriver.ogg', 100, TRUE) - KA.modkits += src + KA.modkits |= src else to_chat(user, span_notice("The modkit you're trying to install would conflict with an already installed modkit. Remove existing modkits first.")) else diff --git a/code/modules/projectiles/guns/energy/laser.dm b/code/modules/projectiles/guns/energy/laser.dm index 6cb50018c7926..95baca98db80f 100644 --- a/code/modules/projectiles/guns/energy/laser.dm +++ b/code/modules/projectiles/guns/energy/laser.dm @@ -143,7 +143,8 @@ /obj/projectile/beam/laser/accelerator/Range() ..() damage += 7 - transform *= 1 + ((damage/7) * 0.2)//20% larger per tile + transform = 0 + transform *= 1 + (((damage - 6)/7) * 0.2)//20% larger per tile ///X-ray gun diff --git a/code/modules/projectiles/guns/energy/laser_gatling.dm b/code/modules/projectiles/guns/energy/laser_gatling.dm index 7b80e0c69f5cb..e4375bd4832aa 100644 --- a/code/modules/projectiles/guns/energy/laser_gatling.dm +++ b/code/modules/projectiles/guns/energy/laser_gatling.dm @@ -11,8 +11,9 @@ righthand_file = 'icons/mob/inhands/equipment/backpack_righthand.dmi' slot_flags = ITEM_SLOT_BACK w_class = WEIGHT_CLASS_HUGE + var/obj/item/gun/energy/minigun/gun - var/obj/item/stock_parts/cell/minigun/battery + var/obj/item/stock_parts/power_store/cell/minigun/battery var/armed = FALSE //whether the gun is attached, FALSE is attached, TRUE is the gun is wielded. var/overheat = 0 var/overheat_max = 40 @@ -63,22 +64,14 @@ if(armed) user.dropItemToGround(gun, TRUE) -/obj/item/minigunpack/MouseDrop(atom/over_object) - . = ..() +/obj/item/minigunpack/mouse_drop_dragged(atom/over_object, mob/user) if(armed) return - if(iscarbon(usr)) - var/mob/M = usr - - if(!over_object) - return - - if(!M.incapacitated()) - - if(istype(over_object, /atom/movable/screen/inventory/hand)) - var/atom/movable/screen/inventory/hand/H = over_object - M.putItemFromInventoryInHandIfPossible(src, H.held_index) + if(iscarbon(user)) + if(istype(over_object, /atom/movable/screen/inventory/hand)) + var/atom/movable/screen/inventory/hand/H = over_object + user.putItemFromInventoryInHandIfPossible(src, H.held_index) /obj/item/minigunpack/update_icon_state() icon_state = armed ? "notholstered" : "holstered" @@ -109,7 +102,7 @@ custom_materials = null weapon_weight = WEAPON_HEAVY ammo_type = list(/obj/item/ammo_casing/energy/laser/minigun) - cell_type = /obj/item/stock_parts/cell/crap + cell_type = /obj/item/stock_parts/power_store/cell/crap item_flags = NEEDS_PERMIT | SLOWS_WHILE_IN_HAND can_charge = FALSE var/obj/item/minigunpack/ammo_pack @@ -149,12 +142,13 @@ cell.give(transferred) -/obj/item/gun/energy/minigun/afterattack(atom/target, mob/living/user, flag, params) +/obj/item/gun/energy/minigun/try_fire_gun(atom/target, mob/living/user, params) if(!ammo_pack || ammo_pack.loc != user) to_chat(user, span_warning("You need the backpack power source to fire the gun!")) - . = ..() + return FALSE + return ..() -/obj/item/stock_parts/cell/minigun +/obj/item/stock_parts/power_store/cell/minigun name = "gatling gun fusion core" desc = "Where did these come from?" maxcharge = 500 * STANDARD_CELL_CHARGE diff --git a/code/modules/projectiles/guns/energy/pulse.dm b/code/modules/projectiles/guns/energy/pulse.dm index a589594d79628..839689144c2f1 100644 --- a/code/modules/projectiles/guns/energy/pulse.dm +++ b/code/modules/projectiles/guns/energy/pulse.dm @@ -10,7 +10,7 @@ obj_flags = CONDUCTS_ELECTRICITY slot_flags = ITEM_SLOT_BACK ammo_type = list(/obj/item/ammo_casing/energy/laser/pulse, /obj/item/ammo_casing/energy/electrode, /obj/item/ammo_casing/energy/laser) - cell_type = /obj/item/stock_parts/cell/pulse + cell_type = /obj/item/stock_parts/power_store/cell/pulse /obj/item/gun/energy/pulse/Initialize(mapload) . = ..() @@ -44,7 +44,7 @@ icon_state = "pulse_carbine" worn_icon_state = "gun" inhand_icon_state = null - cell_type = /obj/item/stock_parts/cell/pulse/carbine + cell_type = /obj/item/stock_parts/power_store/cell/pulse/carbine /obj/item/gun/energy/pulse/carbine/add_seclight_point() AddComponent(/datum/component/seclite_attachable, \ @@ -59,11 +59,14 @@ /obj/item/gun/energy/pulse/carbine/loyalpin pin = /obj/item/firing_pin/implant/mindshield +/obj/item/gun/energy/pulse/carbine/taserless + ammo_type = list(/obj/item/ammo_casing/energy/laser/pulse, /obj/item/ammo_casing/energy/laser) + /obj/item/gun/energy/pulse/destroyer name = "pulse destroyer" desc = "A heavy-duty energy rifle built for pure destruction." worn_icon_state = "pulse" - cell_type = /obj/item/stock_parts/cell/infinite + cell_type = /obj/item/stock_parts/power_store/cell/infinite ammo_type = list(/obj/item/ammo_casing/energy/laser/pulse) /obj/item/gun/energy/pulse/destroyer/attack_self(mob/living/user) @@ -77,7 +80,10 @@ icon_state = "pulse_pistol" worn_icon_state = "gun" inhand_icon_state = "gun" - cell_type = /obj/item/stock_parts/cell/pulse/pistol + cell_type = /obj/item/stock_parts/power_store/cell/pulse/pistol + +/obj/item/gun/energy/pulse/pistol/taserless + ammo_type = list(/obj/item/ammo_casing/energy/laser/pulse, /obj/item/ammo_casing/energy/laser) /obj/item/gun/energy/pulse/pistol/loyalpin pin = /obj/item/firing_pin/implant/mindshield @@ -87,4 +93,4 @@ desc = "A compact pulse core in a classic handgun frame for Nanotrasen officers. It's not the size of the gun, it's the size of the hole it puts through people." icon_state = "m1911" inhand_icon_state = "gun" - cell_type = /obj/item/stock_parts/cell/infinite + cell_type = /obj/item/stock_parts/power_store/cell/infinite diff --git a/code/modules/projectiles/guns/energy/recharge.dm b/code/modules/projectiles/guns/energy/recharge.dm index 3d94193a53199..504dc5c9e0f4a 100644 --- a/code/modules/projectiles/guns/energy/recharge.dm +++ b/code/modules/projectiles/guns/energy/recharge.dm @@ -4,7 +4,7 @@ base_icon_state = "kineticgun" desc = "A self recharging gun. Holds one shot at a time." automatic_charge_overlays = FALSE - cell_type = /obj/item/stock_parts/cell/emproof + cell_type = /obj/item/stock_parts/power_store/cell/emproof /// If set to something, instead of an overlay, sets the icon_state directly. var/no_charge_state /// Does it hold charge when not put away? @@ -111,9 +111,9 @@ recharge_time = 2 SECONDS holds_charge = TRUE unique_frequency = TRUE - can_bayonet = TRUE - knife_x_offset = 20 - knife_y_offset = 12 + +/obj/item/gun/energy/recharge/ebow/add_bayonet_point() + AddComponent(/datum/component/bayonet_attachable, offset_x = 20, offset_y = 12) /obj/item/gun/energy/recharge/ebow/halloween name = "candy corn crossbow" @@ -150,19 +150,23 @@ /obj/item/gun/energy/recharge/fisher/examine_more(mob/user) . = ..() - . += span_notice("The SC/FISHER is an illegally-modified kinetic accelerator cut down and refit into a disassembled miniature energy gun chassis, with its pressure chamber \ - attenuated to launch kinetic bolts that disrupt flashlights and cameras, if only temporarily. This effect also works on cyborg headlamps, and works longer in melee.

    \ - While some would argue that this is a really terrible design choice, others argue that it is very funny to be able to shoot at light sources. Caveat emptor.") + . += span_notice("The SC/FISHER is an illegally-modified kinetic accelerator cut down and refit into a disassembled miniature energy gun chassis, \ + with its pressure chamber attenuated to launch kinetic bolts that temporarily disrupt flashlights, cameras, and certain other electronics. \ + This effect also works on cyborg headlamps, and works longer in melee.

    \ + While some would argue that this is a really terrible design choice, others argue that it is very funny to be able to shoot at light sources.
    \ + Caveat emptor.") -/obj/item/gun/energy/recharge/fisher/afterattack(atom/target, mob/living/user, flag, params) - // you should just shoot them, but in case you can't/wont +/obj/item/gun/energy/recharge/fisher/attack(mob/living/target_mob, mob/living/user, params) . = ..() - if(user.Adjacent(target)) - var/obj/projectile/energy/fisher/melee/simulated_hit = new - simulated_hit.on_hit(target) + if(.) + return + var/obj/projectile/energy/fisher/melee/simulated_hit = new + simulated_hit.firer = user + simulated_hit.on_hit(target_mob) /obj/item/gun/energy/recharge/fisher/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum) // ...you reeeeeally just shoot them, but in case you can't/won't . = ..() var/obj/projectile/energy/fisher/melee/simulated_hit = new + simulated_hit.firer = throwingdatum.get_thrower() simulated_hit.on_hit(hit_atom) diff --git a/code/modules/projectiles/guns/energy/special.dm b/code/modules/projectiles/guns/energy/special.dm index 50d7c5385d50d..653cffcbeec7d 100644 --- a/code/modules/projectiles/guns/energy/special.dm +++ b/code/modules/projectiles/guns/energy/special.dm @@ -52,7 +52,7 @@ inhand_icon_state = "c20r" w_class = WEIGHT_CLASS_BULKY ammo_type = list(/obj/item/ammo_casing/energy/meteor) - cell_type = /obj/item/stock_parts/cell/potato + cell_type = /obj/item/stock_parts/power_store/cell/potato clumsy_check = 0 //Admin spawn only, might as well let clowns use it. selfcharge = 1 automatic_charge_overlays = FALSE @@ -231,17 +231,15 @@ if(istype(WH)) WH.gun = WEAKREF(src) -/obj/item/gun/energy/wormhole_projector/afterattack(atom/target, mob/living/user, flag, params) - if(select == AMMO_SELECT_ORANGE) //Last fired in right click mode. Switch to blue wormhole (left click). - select_fire() +/obj/item/gun/energy/wormhole_projector/try_fire_gun(atom/target, mob/living/user, params) + if(LAZYACCESS(params2list(params), RIGHT_CLICK)) + if(select == AMMO_SELECT_BLUE) //Last fired in left click mode. Switch to orange wormhole (right click). + select_fire() + else + if(select == AMMO_SELECT_ORANGE) //Last fired in right click mode. Switch to blue wormhole (left click). + select_fire() return ..() -/obj/item/gun/energy/wormhole_projector/afterattack_secondary(atom/target, mob/living/user, flag, params) - if(select == AMMO_SELECT_BLUE) //Last fired in left click mode. Switch to orange wormhole (right click). - select_fire() - fire_gun(target, user, flag, params) - return SECONDARY_ATTACK_CONTINUE_CHAIN - /obj/item/gun/energy/wormhole_projector/proc/on_portal_destroy(obj/effect/portal/P) SIGNAL_HANDLER if(P == p_blue) @@ -284,6 +282,7 @@ qdel(p_blue) p_blue = new_portal crosslink() + playsound(new_portal, SFX_PORTAL_CREATED, 50, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) /obj/item/gun/energy/wormhole_projector/core_inserted firing_core = TRUE @@ -298,7 +297,7 @@ desc = "An LMG that fires 3D-printed flechettes. They are slowly resupplied using the cyborg's internal power source." icon_state = "l6_cyborg" icon = 'icons/obj/weapons/guns/ballistic.dmi' - cell_type = /obj/item/stock_parts/cell/secborg + cell_type = /obj/item/stock_parts/power_store/cell/secborg ammo_type = list(/obj/item/ammo_casing/energy/c3dbullet) can_charge = FALSE use_cyborg_cell = TRUE @@ -315,7 +314,7 @@ desc = "A gun that changes temperatures. Comes with a collapsible stock." w_class = WEIGHT_CLASS_NORMAL ammo_type = list(/obj/item/ammo_casing/energy/temp, /obj/item/ammo_casing/energy/temp/hot) - cell_type = /obj/item/stock_parts/cell/high + cell_type = /obj/item/stock_parts/power_store/cell/high pin = null /obj/item/gun/energy/temperature/security @@ -408,13 +407,15 @@ coin_count++ COOLDOWN_START(src, coin_regen_cd, coin_regen_rate) -/obj/item/gun/energy/marksman_revolver/afterattack_secondary(atom/target, mob/living/user, params) - if(!CAN_THEY_SEE(target, user)) +/obj/item/gun/energy/marksman_revolver/try_fire_gun(atom/target, mob/living/user, params) + if(!LAZYACCESS(params2list(params), RIGHT_CLICK)) return ..() + if(!CAN_THEY_SEE(target, user)) + return ITEM_INTERACT_BLOCKING if(max_coins && coin_count <= 0) to_chat(user, span_warning("You don't have any coins right now!")) - return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN + return ITEM_INTERACT_BLOCKING if(max_coins) START_PROCESSING(SSobj, src) @@ -426,5 +427,4 @@ var/obj/projectile/bullet/coin/new_coin = new(get_turf(user), target_turf, user) new_coin.preparePixelProjectile(target_turf, user) new_coin.fire() - - return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN + return ITEM_INTERACT_SUCCESS diff --git a/code/modules/projectiles/guns/magic/staff.dm b/code/modules/projectiles/guns/magic/staff.dm index c4e719e781724..5ca2e3052518d 100644 --- a/code/modules/projectiles/guns/magic/staff.dm +++ b/code/modules/projectiles/guns/magic/staff.dm @@ -150,6 +150,7 @@ /obj/projectile/magic/teleport, /obj/projectile/magic/wipe, /obj/projectile/temp/chill, + /obj/projectile/magic/shrink ) /obj/item/gun/magic/staff/chaos/unrestricted @@ -319,3 +320,17 @@ inhand_icon_state = "pharoah_sceptre" worn_icon_state = "wipestaff" school = SCHOOL_FORBIDDEN //arguably the worst staff in the entire game effect wise + +/obj/item/gun/magic/staff/shrink + name = "staff of shrinking" + desc = "An artefact that spits bolts of tiny magic that makes things small. It's easily mistaken for a wand." + fire_sound = 'sound/magic/staff_shrink.ogg' + ammo_type = /obj/item/ammo_casing/magic/shrink + icon_state = "shrinkstaff" + inhand_icon_state = "staff" + max_charges = 10 // slightly more/faster charges since this will be used on walls and such + recharge_rate = 5 + no_den_usage = TRUE + school = SCHOOL_TRANSMUTATION + slot_flags = NONE //too small to wear on your back + w_class = WEIGHT_CLASS_NORMAL //but small enough for a bag diff --git a/code/modules/projectiles/guns/magic/wand.dm b/code/modules/projectiles/guns/magic/wand.dm index a078c4ae00b0e..b2fe293eae8c2 100644 --- a/code/modules/projectiles/guns/magic/wand.dm +++ b/code/modules/projectiles/guns/magic/wand.dm @@ -33,24 +33,23 @@ return ..() -/obj/item/gun/magic/wand/afterattack(atom/target, mob/living/user) - . |= AFTERATTACK_PROCESSED_ITEM +/obj/item/gun/magic/wand/try_fire_gun(atom/target, mob/living/user, params) if(!charges) shoot_with_empty_chamber(user) - return + return FALSE if(target == user) - if(no_den_usage) - var/area/A = get_area(user) - if(istype(A, /area/centcom/wizard_station)) - to_chat(user, span_warning("You know better than to violate the security of The Den, best wait until you leave to use [src].")) - return - else - no_den_usage = 0 + if(no_den_usage && istype(get_area(user), /area/centcom/wizard_station)) + to_chat(user, span_warning("You know better than to violate the security of The Den, best wait until you leave to use [src].")) + return FALSE zap_self(user) + . = TRUE + else - . |= ..() - update_appearance() + . = ..() + if(.) + update_appearance() + return . /obj/item/gun/magic/wand/proc/zap_self(mob/living/user) user.visible_message(span_danger("[user] zaps [user.p_them()]self with [src].")) @@ -192,7 +191,7 @@ /obj/item/gun/magic/wand/safety/zap_self(mob/living/user) var/turf/origin = get_turf(user) - var/turf/destination = find_safe_turf() + var/turf/destination = find_safe_turf(extended_safety_checks = TRUE) if(do_teleport(user, destination, channel=TELEPORT_CHANNEL_MAGIC)) for(var/t in list(origin, destination)) @@ -256,3 +255,100 @@ name = "wand of nothing" desc = "It's not just a stick, it's a MAGIC stick?" ammo_type = /obj/item/ammo_casing/magic/nothing + + +///////////////////////////////////// +//WAND OF SHRINKING +///////////////////////////////////// + +/obj/item/gun/magic/wand/shrink + name = "wand of shrinking" + desc = "Feel the tiny eldritch terror of an itty... bitty... head!" + ammo_type = /obj/item/ammo_casing/magic/shrink/wand + icon_state = "shrinkwand" + base_icon_state = "shrinkwand" + fire_sound = 'sound/magic/staff_shrink.ogg' + max_charges = 10 //10, 5, 5, 4 + no_den_usage = TRUE + w_class = WEIGHT_CLASS_TINY + +/obj/item/gun/magic/wand/shrink/zap_self(mob/living/user) + to_chat(user, span_notice("The world grows large...")) + charges-- + user.AddComponent(/datum/component/shrink, -1) // small forever + return ..() + +// Wand of debugging + +#ifdef TESTING + +/obj/item/gun/magic/wand/antag + name = "wand of antag" + desc = "This wand uses the powers of bullshit to turn anyone it hits into an antag" + school = SCHOOL_FORBIDDEN + ammo_type = /obj/item/ammo_casing/magic/antag + icon_state = "revivewand" + base_icon_state = "revivewand" + color = COLOR_ADMIN_PINK + max_charges = 99999 + +/obj/item/gun/magic/wand/antag/zap_self(mob/living/user) + . = ..() + var/obj/item/ammo_casing/magic/antag/casing = new ammo_type() + var/obj/projectile/magic/magic_proj = casing.projectile_type + magic_proj = new magic_proj(src) + magic_proj.on_hit(user) + QDEL_NULL(casing) + +/obj/item/ammo_casing/magic/antag + projectile_type = /obj/projectile/magic/antag + harmful = FALSE + +/obj/projectile/magic/antag + name = "bolt of antag" + icon_state = "ion" + var/antag = /datum/antagonist/traitor + +/obj/projectile/magic/antag/on_hit(atom/target, blocked, pierce_hit) + . = ..() + + if(isliving(target)) + var/mob/living/victim = target + if(isnull(victim.mind)) + victim.mind_initialize() + if(victim.mind.has_antag_datum(antag)) + victim.mind.remove_antag_datum(antag) + to_chat(world, "removed") + else + victim.mind.add_antag_datum(antag) + to_chat(world, "added") + +/obj/item/gun/magic/wand/antag/heretic + name = "wand of antag heretic" + desc = "This wand uses the powers of bullshit to turn anyone it hits into an antag heretic" + color = COLOR_GREEN + ammo_type = /obj/item/ammo_casing/magic/antag/heretic + +/obj/item/ammo_casing/magic/antag/heretic + projectile_type = /obj/projectile/magic/antag/heretic + +/obj/projectile/magic/antag/heretic + name = "bolt of antag heretic" + icon_state = "ion" + antag = /datum/antagonist/heretic + +/obj/item/gun/magic/wand/antag/cult + name = "wand of antag cultist" + desc = "This wand uses the powers of bullshit to turn anyone it hits into an antag cultist" + color = COLOR_CULT_RED + ammo_type = /obj/item/ammo_casing/magic/antag/cult + +/obj/item/ammo_casing/magic/antag/cult + projectile_type = /obj/projectile/magic/antag/cult + +/obj/projectile/magic/antag/cult + name = "bolt of antag cult" + icon_state = "ion" + antag = /datum/antagonist/cult + +#endif diff --git a/code/modules/projectiles/guns/special/blastcannon.dm b/code/modules/projectiles/guns/special/blastcannon.dm index f9a8abf7ae3dc..d867ca09c041a 100644 --- a/code/modules/projectiles/guns/special/blastcannon.dm +++ b/code/modules/projectiles/guns/special/blastcannon.dm @@ -110,10 +110,8 @@ update_appearance() return TRUE -/obj/item/gun/blastcannon/afterattack(atom/target, mob/user, flag, params) - . |= AFTERATTACK_PROCESSED_ITEM - - if((!bomb && bombcheck) || !target || (get_dist(get_turf(target), get_turf(user)) <= 2)) +/obj/item/gun/blastcannon/try_fire_gun(atom/target, mob/living/user, params) + if((!bomb && bombcheck) || isnull(target) || (get_dist(get_turf(target), get_turf(user)) <= 2)) return ..() cached_target = WEAKREF(target) @@ -123,12 +121,12 @@ span_danger("[user] points [src] at [target]!"), span_danger("You point [src] at [target]!") ) - return + return FALSE cached_firer = WEAKREF(user) if(!bomb) - fire_debug(target, user, flag, params) - return + fire_debug(target, user, params) + return TRUE playsound(src, dry_fire_sound, 30, TRUE) // *click user.visible_message( @@ -141,8 +139,7 @@ user.log_message("opened blastcannon transfer valve at [AREACOORD(current_turf)] while aiming at [AREACOORD(target_turf)] (target).", LOG_GAME) bomb.toggle_valve() update_appearance() - return - + return TRUE /** * Channels an internal explosion into a blastwave projectile. diff --git a/code/modules/projectiles/guns/special/hand_of_midas.dm b/code/modules/projectiles/guns/special/hand_of_midas.dm index 6a5ccf2dea128..e92ffe8d0bf22 100644 --- a/code/modules/projectiles/guns/special/hand_of_midas.dm +++ b/code/modules/projectiles/guns/special/hand_of_midas.dm @@ -37,29 +37,42 @@ balloon_alert(user, "not enough gold") // Siphon gold from a victim, recharging our gun & removing their Midas Blight debuff in the process. -/obj/item/gun/magic/midas_hand/afterattack_secondary(mob/living/victim, mob/living/user, proximity_flag, click_parameters) - if(!isliving(victim) || !IN_GIVEN_RANGE(user, victim, gold_suck_range)) - return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN +/obj/item/gun/magic/midas_hand/interact_with_atom_secondary(atom/interacting_with, mob/living/user, list/modifiers) + if(!isliving(interacting_with)) + return ITEM_INTERACT_BLOCKING + return suck_gold(interacting_with, user) + +/obj/item/gun/magic/midas_hand/ranged_interact_with_atom_secondary(atom/interacting_with, mob/living/user, list/modifiers) + if(!isliving(interacting_with) || !IN_GIVEN_RANGE(user, interacting_with, gold_suck_range)) + return ITEM_INTERACT_BLOCKING + return suck_gold(interacting_with, user) + +/obj/item/gun/magic/midas_hand/proc/suck_gold(mob/living/victim, mob/living/user) if(victim == user) - balloon_alert(user, "can't siphon from self") - return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN + balloon_alert(user, "can't siphon from self!") + return ITEM_INTERACT_BLOCKING if(!victim.reagents) - return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN - + return ITEM_INTERACT_BLOCKING var/gold_amount = victim.reagents.get_reagent_amount(/datum/reagent/gold, type_check = REAGENT_SUB_TYPE) if(!gold_amount) - balloon_alert(user, "no gold in bloodstream") - return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN - var/gold_beam = user.Beam(victim, icon_state="drain_gold") - if(!do_after(user = user, delay = 1 SECONDS, target = victim, timed_action_flags = (IGNORE_USER_LOC_CHANGE | IGNORE_TARGET_LOC_CHANGE), extra_checks = CALLBACK(src, PROC_REF(check_gold_range), user, victim))) + balloon_alert(user, "no gold in bloodstream!") + return ITEM_INTERACT_BLOCKING + var/gold_beam = user.Beam(victim, icon_state = "drain_gold") + if(!do_after( + user = user, + delay = 1 SECONDS, + target = victim, + timed_action_flags = (IGNORE_USER_LOC_CHANGE | IGNORE_TARGET_LOC_CHANGE), + extra_checks = CALLBACK(src, PROC_REF(check_gold_range), user, victim), + )) qdel(gold_beam) - balloon_alert(user, "link broken") - return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN + balloon_alert(user, "link broken!") + return ITEM_INTERACT_BLOCKING handle_gold_charges(user, gold_amount) victim.reagents.remove_reagent(/datum/reagent/gold, gold_amount, include_subtypes = TRUE) victim.remove_status_effect(/datum/status_effect/midas_blight) qdel(gold_beam) - return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN + return ITEM_INTERACT_SUCCESS // If we botch a shot, we have to start over again by inserting gold coins into the gun. Can only be done if it has no charges or gold. /obj/item/gun/magic/midas_hand/attackby(obj/item/I, mob/living/user, params) diff --git a/code/modules/projectiles/guns/special/medbeam.dm b/code/modules/projectiles/guns/special/medbeam.dm index 267470f17013c..0ad5caf2fec82 100644 --- a/code/modules/projectiles/guns/special/medbeam.dm +++ b/code/modules/projectiles/guns/special/medbeam.dm @@ -16,12 +16,7 @@ weapon_weight = WEAPON_MEDIUM -/obj/item/gun/medbeam/Initialize(mapload) - . = ..() - START_PROCESSING(SSobj, src) - /obj/item/gun/medbeam/Destroy(mob/user) - STOP_PROCESSING(SSobj, src) LoseTarget() return ..() @@ -41,6 +36,7 @@ QDEL_NULL(current_beam) active = FALSE on_beam_release(current_target) + STOP_PROCESSING(SSobj, src) current_target = null /** @@ -69,6 +65,7 @@ active = TRUE current_beam = user.Beam(current_target, icon_state="medbeam", time = 10 MINUTES, maxdistance = max_range, beam_type = /obj/effect/ebeam/medical) RegisterSignal(current_beam, COMSIG_QDELETING, PROC_REF(beam_died))//this is a WAY better rangecheck than what was done before (process check) + START_PROCESSING(SSobj, src) SSblackbox.record_feedback("tally", "gun_fired", 1, type) diff --git a/code/modules/projectiles/guns/special/syringe_gun.dm b/code/modules/projectiles/guns/special/syringe_gun.dm index 71b1a82a38029..da93e2c1ab8a7 100644 --- a/code/modules/projectiles/guns/special/syringe_gun.dm +++ b/code/modules/projectiles/guns/special/syringe_gun.dm @@ -77,23 +77,23 @@ return TRUE -/obj/item/gun/syringe/attackby(obj/item/A, mob/user, params, show_msg = TRUE) - if(istype(A, /obj/item/reagent_containers/syringe/bluespace)) - balloon_alert(user, "[A.name] is too big!") - return TRUE - if(istype(A, /obj/item/reagent_containers/syringe)) +/obj/item/gun/syringe/item_interaction(mob/living/user, obj/item/tool, list/modifiers) + if(istype(tool, /obj/item/reagent_containers/syringe/bluespace)) + balloon_alert(user, "[tool.name] is too big!") + return ITEM_INTERACT_BLOCKING + if(istype(tool, /obj/item/reagent_containers/syringe)) if(syringes.len < max_syringes) - if(!user.transferItemToLoc(A, src)) - return FALSE - balloon_alert(user, "[A.name] loaded") - syringes += A + if(!user.transferItemToLoc(tool, src)) + return ITEM_INTERACT_BLOCKING + balloon_alert(user, "[tool.name] loaded") + syringes += tool recharge_newshot() update_appearance() - playsound(loc, load_sound, 40) - return TRUE - else - balloon_alert(user, "it's already full!") - return FALSE + playsound(src, load_sound, 40) + return ITEM_INTERACT_SUCCESS + balloon_alert(user, "it's full!") + return ITEM_INTERACT_BLOCKING + return NONE /obj/item/gun/syringe/update_overlays() . = ..() @@ -158,24 +158,24 @@ . = ..() chambered = new /obj/item/ammo_casing/dnainjector(src) -/obj/item/gun/syringe/dna/attackby(obj/item/A, mob/user, params, show_msg = TRUE) - if(istype(A, /obj/item/dnainjector)) - var/obj/item/dnainjector/D = A +/obj/item/gun/syringe/dna/item_interaction(mob/living/user, obj/item/tool, list/modifiers) + if(istype(tool, /obj/item/dnainjector)) + var/obj/item/dnainjector/D = tool if(D.used) balloon_alert(user, "[D.name] is used up!") - return + return ITEM_INTERACT_BLOCKING if(syringes.len < max_syringes) if(!user.transferItemToLoc(D, src)) - return FALSE + return ITEM_INTERACT_BLOCKING balloon_alert(user, "[D.name] loaded") syringes += D recharge_newshot() update_appearance() playsound(loc, load_sound, 40) - return TRUE - else - balloon_alert(user, "it's already full!") - return FALSE + return ITEM_INTERACT_SUCCESS + balloon_alert(user, "it's already full!") + return ITEM_INTERACT_BLOCKING + return NONE /obj/item/gun/syringe/blowgun name = "blowgun" diff --git a/code/modules/projectiles/pins.dm b/code/modules/projectiles/pins.dm index 77d6a702b4940..7ee44a10e7d83 100644 --- a/code/modules/projectiles/pins.dm +++ b/code/modules/projectiles/pins.dm @@ -25,32 +25,31 @@ if(isgun(newloc)) gun = newloc -/obj/item/firing_pin/afterattack(atom/target, mob/user, proximity_flag) - . = ..() - if(proximity_flag) - if(isgun(target)) - . |= AFTERATTACK_PROCESSED_ITEM - var/obj/item/gun/targeted_gun = target - var/obj/item/firing_pin/old_pin = targeted_gun.pin - if(old_pin?.pin_removable && (force_replace || old_pin.pin_hot_swappable)) - if(Adjacent(user)) - user.put_in_hands(old_pin) - else - old_pin.forceMove(targeted_gun.drop_location()) - old_pin.gun_remove(user) - - if(!targeted_gun.pin) - if(!user.temporarilyRemoveItemFromInventory(src)) - return . - if(gun_insert(user, targeted_gun)) - if(old_pin) - balloon_alert(user, "swapped firing pin") - else - balloon_alert(user, "inserted firing pin") +/obj/item/firing_pin/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + if(!isgun(interacting_with)) + return NONE + + var/obj/item/gun/targeted_gun = interacting_with + var/obj/item/firing_pin/old_pin = targeted_gun.pin + if(old_pin?.pin_removable && (force_replace || old_pin.pin_hot_swappable)) + if(Adjacent(user)) + user.put_in_hands(old_pin) + else + old_pin.forceMove(targeted_gun.drop_location()) + old_pin.gun_remove(user) + + if(!targeted_gun.pin) + if(!user.temporarilyRemoveItemFromInventory(src)) + return . + if(gun_insert(user, targeted_gun)) + if(old_pin) + balloon_alert(user, "swapped firing pin") else - to_chat(user, span_notice("This firearm already has a firing pin installed.")) + balloon_alert(user, "inserted firing pin") + else + to_chat(user, span_notice("This firearm already has a firing pin installed.")) - return . + return ITEM_INTERACT_SUCCESS /obj/item/firing_pin/emag_act(mob/user, obj/item/card/emag/emag_card) if(obj_flags & EMAGGED) @@ -190,13 +189,15 @@ fail_message = "dna check failed!" var/unique_enzymes = null -/obj/item/firing_pin/dna/afterattack(atom/target, mob/user, proximity_flag) - . = ..() - if(proximity_flag && iscarbon(target)) - var/mob/living/carbon/M = target +/obj/item/firing_pin/dna/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + if(iscarbon(interacting_with)) + var/mob/living/carbon/M = interacting_with if(M.dna && M.dna.unique_enzymes) unique_enzymes = M.dna.unique_enzymes balloon_alert(user, "dna lock set") + return ITEM_INTERACT_SUCCESS + return ITEM_INTERACT_BLOCKING + return ..() /obj/item/firing_pin/dna/pin_auth(mob/living/carbon/user) if(user && user.dna && user.dna.unique_enzymes) @@ -380,7 +381,7 @@ /obj/item/firing_pin/monkey/pin_auth(mob/living/user) if(!is_simian(user)) - playsound(get_turf(src), "sound/creatures/monkey/monkey_screech_[rand(1,7)].ogg", 75, TRUE) + playsound(src, SFX_SCREECH, 75, TRUE) return FALSE return TRUE diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm index 602bbcc8c4ce6..013cc6e4b294c 100644 --- a/code/modules/projectiles/projectile.dm +++ b/code/modules/projectiles/projectile.dm @@ -1,6 +1,7 @@ #define MOVES_HITSCAN -1 //Not actually hitscan but close as we get without actual hitscan. #define MUZZLE_EFFECT_PIXEL_INCREMENT 17 //How many pixels to move the muzzle flash up so your character doesn't look like they're shitting out lasers. +#define MAX_RANGE_HIT_PRONE_TARGETS 10 //How far do the projectile hits the prone mob /obj/projectile name = "projectile" @@ -191,8 +192,10 @@ var/shrapnel_type ///If we have a shrapnel_type defined, these embedding stats will be passed to the spawned shrapnel type, which will roll for embedding on the target var/list/embedding - ///If TRUE, hit mobs even if they're on the floor and not our target + ///If TRUE, hit mobs, even if they are lying on the floor and are not our target within MAX_RANGE_HIT_PRONE_TARGETS tiles var/hit_prone_targets = FALSE + ///if TRUE, ignores the range of MAX_RANGE_HIT_PRONE_TARGETS tiles of hit_prone_targets + var/ignore_range_hit_prone_targets = FALSE ///For what kind of brute wounds we're rolling for, if we're doing such a thing. Lasers obviously don't care since they do burn instead. var/sharpness = NONE ///How much we want to drop damage per tile as it travels through the air @@ -342,7 +345,7 @@ var/organ_hit_text = "" if(hit_limb_zone) - organ_hit_text = " in \the [parse_zone(hit_limb_zone)]" + organ_hit_text = " in \the [living_target.parse_zone_with_bodypart(hit_limb_zone)]" if(suppressed == SUPPRESSED_VERY) playsound(loc, hitsound, 5, TRUE, -1) else if(suppressed) @@ -457,7 +460,7 @@ if(!trajectory) qdel(src) return FALSE - if(impacted[A]) // NEVER doublehit + if(impacted[A.weak_reference]) // NEVER doublehit return FALSE var/datum/point/point_cache = trajectory.copy_to() var/turf/T = get_turf(A) @@ -510,7 +513,7 @@ if(QDELETED(src) || !T || !target) return // 2. - impacted[target] = TRUE //hash lookup > in for performance in hit-checking + impacted[WEAKREF(target)] = TRUE //hash lookup > in for performance in hit-checking // 3. var/mode = prehit_pierce(target) if(mode == PROJECTILE_DELETE_WITHOUT_HITTING) @@ -587,7 +590,7 @@ //Returns true if the target atom is on our current turf and above the right layer //If direct target is true it's the originally clicked target. /obj/projectile/proc/can_hit_target(atom/target, direct_target = FALSE, ignore_loc = FALSE, cross_failed = FALSE) - if(QDELETED(target) || impacted[target]) + if(QDELETED(target) || impacted[target.weak_reference]) return FALSE if(!ignore_loc && (loc != target.loc) && !(can_hit_turfs && direct_target && loc == target)) return FALSE @@ -621,12 +624,17 @@ return FALSE if(HAS_TRAIT(living_target, TRAIT_IMMOBILIZED) && HAS_TRAIT(living_target, TRAIT_FLOORED) && HAS_TRAIT(living_target, TRAIT_HANDS_BLOCKED)) return FALSE - if(!hit_prone_targets) + if(hit_prone_targets) var/mob/living/buckled_to = living_target.lowest_buckled_mob() - if(!buckled_to.density) // Will just be us if we're not buckled to another mob - return FALSE - if(living_target.body_position != LYING_DOWN) + if((decayedRange - range) <= MAX_RANGE_HIT_PRONE_TARGETS) // after MAX_RANGE_HIT_PRONE_TARGETS tiles, auto-aim hit for mobs on the floor turns off return TRUE + if(ignore_range_hit_prone_targets) // doesn't apply to projectiles that must hit the target in combat mode or something else, no matter what + return TRUE + if(buckled_to.density) // Will just be us if we're not buckled to another mob + return TRUE + return FALSE + else if(living_target.body_position == LYING_DOWN) + return FALSE return TRUE /** @@ -675,7 +683,7 @@ * Used to not even attempt to Bump() or fail to Cross() anything we already hit. */ /obj/projectile/CanPassThrough(atom/blocker, movement_dir, blocker_opinion) - return impacted[blocker] ? TRUE : ..() + return ..() || impacted[blocker.weak_reference] /** * Projectile moved: @@ -809,6 +817,8 @@ RegisterSignal(src, COMSIG_ATOM_ATTACK_HAND, PROC_REF(attempt_parry)) if(hitscan) process_hitscan() + if(QDELETED(src)) + return if(!(datum_flags & DF_ISPROCESSING)) START_PROCESSING(SSprojectiles, src) pixel_move(pixel_speed_multiplier, FALSE) //move it now! @@ -903,6 +913,9 @@ qdel(src) return //Kill! pixel_move(1, TRUE) + // No kevinz I do not care that this is a hitscan weapon, it is not allowed to travel 100 turfs in a tick + if(CHECK_TICK && QDELETED(src)) + return /obj/projectile/proc/pixel_move(trajectory_multiplier, hitscanning = FALSE) if(!loc || !trajectory) @@ -917,6 +930,8 @@ trajectory.increment(trajectory_multiplier) var/turf/T = trajectory.return_turf() if(!istype(T)) + // step back to the last valid turf before we Destroy + trajectory.increment(-trajectory_multiplier) qdel(src) return if(T.z != loc.z) @@ -1177,6 +1192,7 @@ #undef MOVES_HITSCAN #undef MUZZLE_EFFECT_PIXEL_INCREMENT +#undef MAX_RANGE_HIT_PRONE_TARGETS /// Fire a projectile from this atom at another atom /atom/proc/fire_projectile(projectile_type, atom/target, sound, firer, list/ignore_targets = list()) @@ -1186,10 +1202,8 @@ var/turf/startloc = get_turf(src) var/obj/projectile/bullet = new projectile_type(startloc) bullet.starting = startloc - var/list/ignore = list() for (var/atom/thing as anything in ignore_targets) - ignore[thing] = TRUE - bullet.impacted += ignore + bullet.impacted[WEAKREF(thing)] = TRUE bullet.firer = firer || src bullet.fired_from = src bullet.yo = target.y - startloc.y diff --git a/code/modules/projectiles/projectile/beams.dm b/code/modules/projectiles/projectile/beams.dm index e75bbda4d8c5c..a8946379f8c52 100644 --- a/code/modules/projectiles/projectile/beams.dm +++ b/code/modules/projectiles/projectile/beams.dm @@ -249,23 +249,6 @@ /obj/projectile/beam/lasertag/bluetag/hitscan hitscan = TRUE -//a shrink ray that shrinks stuff, which grows back after a short while. -/obj/projectile/beam/shrink - name = "shrink ray" - icon_state = "blue_laser" - hitsound = 'sound/weapons/shrink_hit.ogg' - damage = 0 - damage_type = STAMINA - armor_flag = ENERGY - impact_effect_type = /obj/effect/temp_visual/impact_effect/shrink - light_color = LIGHT_COLOR_BLUE - var/shrink_time = 90 - -/obj/projectile/beam/shrink/on_hit(atom/target, blocked = 0, pierce_hit) - . = ..() - if(isopenturf(target) || isindestructiblewall(target))//shrunk floors wouldnt do anything except look weird, i-walls shouldn't be bypassable - return - target.AddComponent(/datum/component/shrink, shrink_time) - -/obj/projectile/beam/shrink/is_hostile_projectile() - return TRUE +/obj/projectile/magic/shrink/alien + antimagic_flags = NONE + shrink_time = 9 SECONDS diff --git a/code/modules/projectiles/projectile/bullets/junk.dm b/code/modules/projectiles/projectile/bullets/junk.dm new file mode 100644 index 0000000000000..344a732911347 --- /dev/null +++ b/code/modules/projectiles/projectile/bullets/junk.dm @@ -0,0 +1,71 @@ +// Junk (Pipe Pistols and Pipeguns) + +/obj/projectile/bullet/junk + name = "junk bullet" + icon_state = "trashball" + damage = 30 + embedding = list(embed_chance=15, fall_chance=3, jostle_chance=4, ignore_throwspeed_threshold=TRUE, pain_stam_pct=0.4, pain_mult=5, jostle_pain_mult=6, rip_time=10) + var/bane_mob_biotypes = MOB_ROBOTIC + var/bane_multiplier = 1.5 + var/bane_added_damage = 0 + +/obj/projectile/bullet/junk/Initialize(mapload) + . = ..() + AddElement(/datum/element/bane, mob_biotypes = bane_mob_biotypes, target_type = /mob/living, damage_multiplier = bane_multiplier, added_damage = bane_added_damage, requires_combat_mode = FALSE) + +/obj/projectile/bullet/incendiary/fire/junk + name = "burning oil" + damage = 30 + fire_stacks = 5 + suppressed = SUPPRESSED_NONE + +/obj/projectile/bullet/junk/phasic + name = "junk phasic bullet" + icon_state = "gaussphase" + projectile_phasing = PASSTABLE | PASSGLASS | PASSGRILLE | PASSCLOSEDTURF | PASSMACHINE | PASSSTRUCTURE | PASSDOORS + +/obj/projectile/bullet/junk/shock + name = "bundle of live electrical parts" + icon_state = "tesla_projectile" + damage = 15 + embedding = null + shrapnel_type = null + bane_multiplier = 3 + +/obj/projectile/bullet/junk/shock/on_hit(atom/target, blocked = 0, pierce_hit) + . = ..() + if(isliving(target)) + var/mob/living/victim = target + victim.electrocute_act(damage, src, siemens_coeff = 1, flags = SHOCK_NOSTUN) + +/obj/projectile/bullet/junk/hunter + name = "junk hunter bullet" + icon_state = "gauss" + bane_mob_biotypes = MOB_ROBOTIC | MOB_BEAST | MOB_SPECIAL + bane_multiplier = 0 + bane_added_damage = 50 + +/obj/projectile/bullet/junk/ripper + name = "junk ripper bullet" + icon_state = "redtrac" + damage = 10 + embedding = list(embed_chance=100, fall_chance=3, jostle_chance=4, ignore_throwspeed_threshold=TRUE, pain_stam_pct=0.4, pain_mult=5, jostle_pain_mult=6, rip_time=10) + wound_bonus = 10 + bare_wound_bonus = 30 + +/obj/projectile/bullet/junk/reaper + name = "junk reaper bullet" + tracer_type = /obj/effect/projectile/tracer/sniper + impact_type = /obj/effect/projectile/impact/sniper + muzzle_type = /obj/effect/projectile/muzzle/sniper + hitscan = TRUE + impact_effect_type = null + hitscan_light_intensity = 3 + hitscan_light_range = 0.75 + hitscan_light_color_override = LIGHT_COLOR_DIM_YELLOW + muzzle_flash_intensity = 5 + muzzle_flash_range = 1 + muzzle_flash_color_override = LIGHT_COLOR_DIM_YELLOW + impact_light_intensity = 5 + impact_light_range = 1 + impact_light_color_override = LIGHT_COLOR_DIM_YELLOW diff --git a/code/modules/projectiles/projectile/bullets/rifle.dm b/code/modules/projectiles/projectile/bullets/rifle.dm index d76b2de9d6ace..3cbb894b8fb9e 100644 --- a/code/modules/projectiles/projectile/bullets/rifle.dm +++ b/code/modules/projectiles/projectile/bullets/rifle.dm @@ -58,20 +58,120 @@ armour_penetration = 10 wound_bonus = -20 bare_wound_bonus = 20 - embedding = list(embed_chance=60, fall_chance=2, jostle_chance=2, ignore_throwspeed_threshold=TRUE, pain_stam_pct=0.4, pain_mult=3, jostle_pain_mult=2, rip_time=10) + embedding = list("embed_chance" = 60, "fall_chance" = 2, "jostle_chance" = 2, "ignore_throwspeed_threshold" = TRUE, "pain_stam_pct" = 0.4, "pain_mult" = 4, "jostle_pain_mult" = 2, "rip_time" = 10) embed_falloff_tile = -5 wound_falloff_tile = -2 - shrapnel_type = /obj/item/stack/rods + shrapnel_type = /obj/item/ammo_casing/rebar -/obj/projectile/bullet/rebarsyndie +/obj/projectile/bullet/rebar/proc/handle_drop(datum/source, obj/item/ammo_casing/rebar/newcasing) + +/obj/projectile/bullet/rebar/syndie name = "rebar" icon_state = "rebar" - damage = 35 + damage = 55 speed = 0.4 dismemberment = 2 //It's a budget sniper rifle. armour_penetration = 20 //A bit better versus armor. Gets past anti laser armor or a vest, but doesnt wound proc on sec armor. wound_bonus = 10 + bare_wound_bonus = 20 + embedding = list("embed_chance" = 80, "fall_chance" = 1, "jostle_chance" = 3, "ignore_throwspeed_threshold" = TRUE, "pain_stam_pct" = 0.4, "pain_mult" = 3, "jostle_pain_mult" = 2, "rip_time" = 14) + embed_falloff_tile = -3 + shrapnel_type = /obj/item/ammo_casing/rebar/syndie + +/obj/projectile/bullet/rebar/zaukerite + name = "zaukerite shard" + icon_state = "rebar_zaukerite" + damage = 60 + speed = 0.6 + dismemberment = 10 + damage_type = TOX + eyeblur = 5 + armour_penetration = 20 // not nearly as good, as its not as sharp. + wound_bonus = 10 + bare_wound_bonus = 40 + embedding = list("embed_chance" =100, "fall_chance" = 0, "jostle_chance" = 5, "ignore_throwspeed_threshold" = TRUE, "pain_stam_pct" = 0.8, "pain_mult" = 6, "jostle_pain_mult" = 2, "rip_time" = 30) + embed_falloff_tile = 0 // very spiky. + shrapnel_type = /obj/item/ammo_casing/rebar/zaukerite + +/obj/projectile/bullet/rebar/hydrogen + name = "metallic hydrogen bolt" + icon_state = "rebar_hydrogen" + damage = 40 + speed = 0.6 + dismemberment = 0 //goes through clean. + damage_type = BRUTE + armour_penetration = 30 //very pointy. + projectile_piercing = PASSMOB //felt this might have been a nice compromise for the lower damage for the difficulty of getting it + wound_bonus = -15 bare_wound_bonus = 10 - embedding = list(embed_chance=80, fall_chance=1, jostle_chance=3, ignore_throwspeed_threshold=TRUE, pain_stam_pct=0.4, pain_mult=3, jostle_pain_mult=2, rip_time=14) + embedding = list("embed_chance" = 50, "fall_chance" = 2, "jostle_chance" = 3, "ignore_throwspeed_threshold" = TRUE, "pain_stam_pct" = 0.6, "pain_mult" = 4, "jostle_pain_mult" = 2, "rip_time" =18) + embed_falloff_tile = -3 + shrapnel_type = /obj/item/ammo_casing/rebar/hydrogen + +/obj/projectile/bullet/rebar/healium + name = "healium bolt" + icon_state = "rebar_healium" + damage = 0 + speed = 0.4 + dismemberment = 0 + damage_type = BRUTE + armour_penetration = 100 + wound_bonus = -100 + bare_wound_bonus = -100 + embedding = list(embed_chance = 0) embed_falloff_tile = -3 - shrapnel_type = /obj/item/stack/rods + shrapnel_type = /obj/item/ammo_casing/rebar/healium + +/obj/projectile/bullet/rebar/healium/on_hit(atom/target, blocked = 0, pierce_hit) + . = ..() + if(!iscarbon(target)) + return BULLET_ACT_HIT + var/mob/living/breather = target + breather.SetSleeping(3 SECONDS) + breather.adjustFireLoss(-30, updating_health = TRUE, required_bodytype = BODYTYPE_ORGANIC) + breather.adjustToxLoss(-30, updating_health = TRUE, required_biotype = BODYTYPE_ORGANIC) + breather.adjustBruteLoss(-30, updating_health = TRUE, required_bodytype = BODYTYPE_ORGANIC) + breather.adjustOxyLoss(-30, updating_health = TRUE, required_biotype = BODYTYPE_ORGANIC, required_respiration_type = ALL) + + return BULLET_ACT_HIT + + +/obj/projectile/bullet/rebar/supermatter + name = "supermatter bolt" + icon_state = "rebar_supermatter" + damage = 0 + speed = 0.4 + dismemberment = 0 + damage_type = TOX + armour_penetration = 100 + shrapnel_type = /obj/item/ammo_casing/rebar/supermatter + +/obj/projectile/bullet/rebar/supermatter/on_hit(atom/target, blocked = 0, pierce_hit) + . = ..() + if(isliving(target)) + var/mob/living/victim = target + victim.investigate_log("has been dusted by [src].", INVESTIGATE_DEATHS) + dust_feedback(target) + victim.dust() + + else if(!isturf(target)&& !isliving(target)) + dust_feedback(target) + qdel(target) + + return BULLET_ACT_HIT + + +/obj/projectile/bullet/rebar/supermatter/proc/dust_feedback(atom/target) + playsound(get_turf(src), 'sound/effects/supermatter.ogg', 10, TRUE) + visible_message(span_danger("[target] is hit by [src], turning [target.p_them()] to dust in a brilliant flash of light!")) + +/obj/projectile/bullet/paperball + desc = "Doink!" + damage = 1 // It's a damn toy. + range = 10 + shrapnel_type = null + embedding = null + name = "paper ball" + desc = "doink!" + damage_type = BRUTE + icon_state = "paperball" diff --git a/code/modules/projectiles/projectile/bullets/shotgun.dm b/code/modules/projectiles/projectile/bullets/shotgun.dm index 914019b979209..b3ddaf9bc9013 100644 --- a/code/modules/projectiles/projectile/bullets/shotgun.dm +++ b/code/modules/projectiles/projectile/bullets/shotgun.dm @@ -108,19 +108,6 @@ stamina = 6 embedding = null -/obj/projectile/bullet/pellet/shotgun_improvised - damage = 5 - wound_bonus = -5 - demolition_mod = 3 //Very good at acts of vandalism - -/obj/projectile/bullet/pellet/shotgun_improvised/Initialize(mapload) - . = ..() - range = rand(3, 8) - -/obj/projectile/bullet/pellet/shotgun_improvised/on_range() - do_sparks(1, TRUE, src) - ..() - // Mech Scattershot /obj/projectile/bullet/scattershot diff --git a/code/modules/projectiles/projectile/bullets/sniper.dm b/code/modules/projectiles/projectile/bullets/sniper.dm index 4425b20eeedc4..6118d90644d9e 100644 --- a/code/modules/projectiles/projectile/bullets/sniper.dm +++ b/code/modules/projectiles/projectile/bullets/sniper.dm @@ -9,6 +9,7 @@ dismemberment = 50 catastropic_dismemberment = TRUE armour_penetration = 50 + ignore_range_hit_prone_targets = TRUE ///Determines object damage. var/object_damage = 80 ///Determines how much additional damage the round does to mechs. diff --git a/code/modules/projectiles/projectile/energy/net_snare.dm b/code/modules/projectiles/projectile/energy/net_snare.dm index 1bb7988e4bae4..ac35fb5503e68 100644 --- a/code/modules/projectiles/projectile/energy/net_snare.dm +++ b/code/modules/projectiles/projectile/energy/net_snare.dm @@ -11,10 +11,15 @@ SpinAnimation() /obj/projectile/energy/net/on_hit(atom/target, blocked = 0, pierce_hit) + var/obj/item/dragnet_beacon/destination_beacon = null + var/obj/item/gun/energy/e_gun/dragnet/our_dragnet = fired_from + if(our_dragnet && istype(our_dragnet)) + destination_beacon = our_dragnet.linked_beacon + if(isliving(target)) var/turf/Tloc = get_turf(target) if(!locate(/obj/effect/nettingportal) in Tloc) - new /obj/effect/nettingportal(Tloc) + new /obj/effect/nettingportal(Tloc, destination_beacon) . = ..() /obj/projectile/energy/net/on_range() @@ -29,26 +34,18 @@ light_range = 3 anchored = TRUE -/obj/effect/nettingportal/Initialize(mapload) +/obj/effect/nettingportal/Initialize(mapload, destination_beacon) . = ..() - var/obj/item/beacon/teletarget = null - for(var/obj/machinery/computer/teleporter/com as anything in SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/computer/teleporter)) - var/atom/target = com.target_ref?.resolve() - if(target) - if(com.power_station && com.power_station.teleporter_hub && com.power_station.engaged) - teletarget = target - else - com.target_ref = null - + var/obj/item/dragnet_beacon/teletarget = destination_beacon addtimer(CALLBACK(src, PROC_REF(pop), teletarget), 3 SECONDS) /obj/effect/nettingportal/proc/pop(teletarget) if(teletarget) - for(var/mob/living/L in get_turf(src)) - do_teleport(L, teletarget, 2, channel = TELEPORT_CHANNEL_BLUESPACE)//teleport what's in the tile to the beacon + for(var/mob/living/living_mob in get_turf(src)) + do_teleport(living_mob, get_turf(teletarget), 1, channel = TELEPORT_CHANNEL_BLUESPACE) //Teleport what's in the tile to the beacon else - for(var/mob/living/L in get_turf(src)) - do_teleport(L, L, 15, channel = TELEPORT_CHANNEL_BLUESPACE) //Otherwise it just warps you off somewhere. + for(var/mob/living/living_mob in get_turf(src)) + do_teleport(living_mob, get_turf(living_mob), 15, channel = TELEPORT_CHANNEL_BLUESPACE) //Otherwise it just warps you off somewhere. qdel(src) @@ -58,6 +55,66 @@ /obj/effect/nettingportal/singularity_pull() return +/obj/item/dragnet_beacon + name = "\improper DRAGnet beacon" + desc = "Can be synced with a DRAGnet to set it as a designated teleporting point." + icon = 'icons/obj/devices/tracker.dmi' + icon_state = "dragnet_beacon" + inhand_icon_state = "beacon" + lefthand_file = 'icons/mob/inhands/items/devices_lefthand.dmi' + righthand_file = 'icons/mob/inhands/items/devices_righthand.dmi' + ///Has a security ID been used to lock this in place? + var/locked = FALSE + +/obj/item/dragnet_beacon/item_interaction(mob/living/user, obj/item/tool, list/modifiers) + if(istype(tool, /obj/item/gun/energy/e_gun/dragnet)) + var/obj/item/gun/energy/e_gun/dragnet/dragnet_to_link = tool + dragnet_to_link.link_beacon(user, src) + return + + if(isidcard(tool)) + if(!anchored) + balloon_alert(user, "wrench the beacon first!") + return + + if(obj_flags & EMAGGED) + balloon_alert(user, "the access control is fried!") + return + + var/obj/item/card/id/id_card = tool + if((ACCESS_SECURITY in id_card.GetAccess())) + locked = !locked + balloon_alert(user, "beacon [locked ? "locked" : "unlocked"]") + else + balloon_alert(user, "no access!") + +/obj/item/dragnet_beacon/wrench_act(mob/living/user, obj/item/tool) + if(user.is_holding(src)) + balloon_alert(user, "put it down first!") + return ITEM_INTERACT_BLOCKING + + if(anchored && locked) + balloon_alert(user, "must be unlocked first!") + return ITEM_INTERACT_BLOCKING + + if(isinspace() && !anchored) + balloon_alert(user, "nothing to anchor to!") + return ITEM_INTERACT_BLOCKING + + set_anchored(!anchored) + tool.play_tool_sound(src, 75) + user.balloon_alert_to_viewers("[anchored ? "anchored" : "unanchored"]") + +/obj/item/dragnet_beacon/emag_act(mob/user, obj/item/card/emag/emag_card) + if(obj_flags & EMAGGED) + return FALSE + obj_flags |= EMAGGED + locked = FALSE + set_anchored(FALSE) + do_sparks(3, TRUE, src) + balloon_alert(user, "beacon unlocked") + return TRUE + /obj/projectile/energy/trap name = "energy snare" icon_state = "e_snare" diff --git a/code/modules/projectiles/projectile/magic.dm b/code/modules/projectiles/projectile/magic.dm index e52d38b3da111..23930f3cca7d0 100644 --- a/code/modules/projectiles/projectile/magic.dm +++ b/code/modules/projectiles/projectile/magic.dm @@ -110,7 +110,7 @@ return BULLET_ACT_HIT var/turf/origin_turf = get_turf(target) - var/turf/destination_turf = find_safe_turf() + var/turf/destination_turf = find_safe_turf(extended_safety_checks = TRUE) if(do_teleport(target, destination_turf, channel=TELEPORT_CHANNEL_MAGIC)) for(var/t in list(origin_turf, destination_turf)) @@ -580,3 +580,31 @@ damage_type = BURN damage = 2 antimagic_charge_cost = 0 // since the cards gets spammed like a shotgun + +//a shrink ray that shrinks stuff, which grows back after a short while. +/obj/projectile/magic/shrink + name = "shrink ray" + icon_state = "blue_laser" + hitsound = 'sound/weapons/shrink_hit.ogg' + damage = 0 + damage_type = STAMINA + armor_flag = ENERGY + impact_effect_type = /obj/effect/temp_visual/impact_effect/shrink + light_color = LIGHT_COLOR_BLUE + var/shrink_time = -1 + +/obj/projectile/magic/shrink/on_hit(atom/target, blocked = 0, pierce_hit) + . = ..() + if(isopenturf(target) || isindestructiblewall(target))//shrunk floors wouldnt do anything except look weird, i-walls shouldn't be bypassable + return + target.AddComponent(/datum/component/shrink, shrink_time) + +/obj/projectile/magic/shrink/is_hostile_projectile() + return TRUE + +/obj/projectile/magic/shrink/wand + shrink_time = 90 SECONDS + +/obj/projectile/magic/shrink/wand/on_hit(atom/target, blocked = 0, pierce_hit) + shrink_time = rand(60 SECONDS, 90 SECONDS) + return ..() diff --git a/code/modules/projectiles/projectile/special/rocket.dm b/code/modules/projectiles/projectile/special/rocket.dm index dd9f18a114ac4..db452385c987c 100644 --- a/code/modules/projectiles/projectile/special/rocket.dm +++ b/code/modules/projectiles/projectile/special/rocket.dm @@ -127,3 +127,13 @@ among other potential differences. This granularity is helpful for things like t icon = 'icons/obj/weapons/guns/projectiles.dmi' icon_state = "missile_broken" w_class = WEIGHT_CLASS_TINY + +//immediately hits firer +/obj/projectile/bullet/rocket/reverse + name = "faulty rocket" + +/obj/projectile/bullet/rocket/reverse/fire(angle, atom/direct_target) + ..() + if(firer) //troll + firer.visible_message(span_danger("[src] blows up as soon as [firer] fires it!")) + on_hit(firer) diff --git a/code/modules/projectiles/projectile/special/saboteur.dm b/code/modules/projectiles/projectile/special/saboteur.dm index 4ef6b9ffcbe6d..46fcc136c0927 100644 --- a/code/modules/projectiles/projectile/special/saboteur.dm +++ b/code/modules/projectiles/projectile/special/saboteur.dm @@ -7,6 +7,7 @@ range = 21 projectile_phasing = PASSTABLE | PASSMOB | PASSMACHINE | PASSSTRUCTURE hitscan = TRUE + hit_threshhold = LOW_OBJ_LAYER // required to be able to hit floor lights var/disrupt_duration = 15 SECONDS /obj/projectile/energy/fisher/on_hit(atom/target, blocked, pierce_hit) diff --git a/code/modules/projectiles/projectile/special/temperature.dm b/code/modules/projectiles/projectile/special/temperature.dm index 3d88c40fdfb9c..182bb715466d3 100644 --- a/code/modules/projectiles/projectile/special/temperature.dm +++ b/code/modules/projectiles/projectile/special/temperature.dm @@ -31,7 +31,7 @@ /obj/projectile/temp/cryo name = "cryo beam" - range = 3 + range = 9 temperature = -240 // Single slow shot reduces temp greatly /obj/projectile/temp/cryo/on_range() @@ -40,3 +40,25 @@ var/turf/open/O = T O.freeze_turf() return ..() + +/obj/projectile/temp/pyro + name = "hot beam" + icon_state = "firebeam" // sets on fire, diff sprite! + range = 9 + temperature = 240 + +/obj/projectile/temp/pyro/on_hit(atom/target, blocked, pierce_hit) + . = ..() + if(!.) + return + var/mob/living/living_target = target + if(!istype(living_target)) + return + living_target.adjust_fire_stacks(2) + living_target.ignite_mob() + +/obj/projectile/temp/pyro/on_range() + var/turf/location = get_turf(src) + new /obj/effect/hotspot(location) + location.hotspot_expose(700, 50, 1) + return ..() diff --git a/code/modules/reagents/chemistry/colors.dm b/code/modules/reagents/chemistry/colors.dm index 6b260210c9e9d..ae57faa481c66 100644 --- a/code/modules/reagents/chemistry/colors.dm +++ b/code/modules/reagents/chemistry/colors.dm @@ -19,3 +19,19 @@ mixcolor = BlendRGB(R.color, mixcolor, vol_temp/vol_counter) return mixcolor + +/proc/reagent_threshold_overlay(datum/reagents/reagents, fill_icon, fill_prefix, list/fill_icon_thresholds) + RETURN_TYPE(/mutable_appearance) + + var/threshold = null + for(var/i in 1 to fill_icon_thresholds.len) + if(ROUND_UP(100 * reagents.total_volume / reagents.maximum_volume) >= fill_icon_thresholds[i]) + threshold = i + + if(threshold) + var/fill_name = "[fill_prefix][fill_icon_thresholds[threshold]]" + var/mutable_appearance/filling = mutable_appearance(fill_icon, fill_name) + filling.color = mix_color_from_reagents(reagents.reagent_list) + return filling + + return null diff --git a/code/modules/reagents/chemistry/holder/holder.dm b/code/modules/reagents/chemistry/holder/holder.dm index 3fe2e482f3efd..0c300c3896b0e 100644 --- a/code/modules/reagents/chemistry/holder/holder.dm +++ b/code/modules/reagents/chemistry/holder/holder.dm @@ -235,6 +235,7 @@ var/total_removed_amount = 0 var/remove_amount = 0 var/list/cached_reagents = reagent_list + var/list/removed_reagents = list() for(var/datum/reagent/cached_reagent as anything in cached_reagents) //check for specific type or subtypes if(!include_subtypes) @@ -243,19 +244,26 @@ else if(!istype(cached_reagent, reagent_type)) continue + //reduce the volume remove_amount = min(cached_reagent.volume, amount) cached_reagent.volume -= remove_amount - update_total() - if(!safety)//So it does not handle reactions when it need not to - handle_reactions() - SEND_SIGNAL(src, COMSIG_REAGENTS_REM_REAGENT, QDELING(cached_reagent) ? reagent_type : cached_reagent, amount) - + //record the changes + removed_reagents += cached_reagent total_removed_amount += remove_amount //if we reached here means we have found our specific reagent type so break if(!include_subtypes) - return total_removed_amount + break + + //inform others about our reagents being removed + for(var/datum/reagent/removed_reagent as anything in cached_reagents) + SEND_SIGNAL(src, COMSIG_REAGENTS_REM_REAGENT, removed_reagent, amount) + + //update the holder & handle reactions + update_total() + if(!safety) + handle_reactions() return round(total_removed_amount, CHEMICAL_VOLUME_ROUNDING) @@ -504,8 +512,6 @@ log_target.add_hiddenprint(transferred_by) //log prints so admins can figure out who touched it last. log_combat(transferred_by, log_target, "transferred reagents to", my_atom, "which had [get_external_reagent_log_string(transfer_log)]") - update_total() - target_holder.update_total() if(!no_react) target_holder.handle_reactions() src.handle_reactions() diff --git a/code/modules/reagents/chemistry/holder/reactions.dm b/code/modules/reagents/chemistry/holder/reactions.dm index 80241173deebf..3fbcb57a43424 100644 --- a/code/modules/reagents/chemistry/holder/reactions.dm +++ b/code/modules/reagents/chemistry/holder/reactions.dm @@ -339,6 +339,7 @@ my_atom.visible_message(span_notice("[iconhtml] \The [my_atom]'s power is consumed in the reaction.")) extract.name = "used slime extract" extract.desc = "This extract has been used up." + extract.grind_results.Cut() //finish the reaction selected_reaction.on_reaction(src, null, multiplier) diff --git a/code/modules/reagents/chemistry/items.dm b/code/modules/reagents/chemistry/items.dm index 25f805acdaf1b..ad7f0413ce561 100644 --- a/code/modules/reagents/chemistry/items.dm +++ b/code/modules/reagents/chemistry/items.dm @@ -14,6 +14,8 @@ item_flags = NOBLUDGEON resistance_flags = FLAMMABLE w_class = WEIGHT_CLASS_TINY + interaction_flags_mouse_drop = NEED_HANDS + ///How many pages the booklet holds var/number_of_pages = 50 @@ -41,11 +43,8 @@ user.put_in_active_hand(src) return ..() -/obj/item/ph_booklet/MouseDrop(atom/over, src_location, over_location, src_control, over_control, params) - var/mob/living/user = usr - if(!isliving(user) || !Adjacent(user)) - return - if(HAS_TRAIT(user, TRAIT_HANDS_BLOCKED)) +/obj/item/ph_booklet/mouse_drop_dragged(atom/over, mob/user, src_location, over_location, params) + if(!isliving(user)) return if(!number_of_pages) to_chat(user, span_warning("[src] is empty!")) @@ -78,20 +77,20 @@ ///If the paper was used, and therefore cannot change color again var/used = FALSE -/obj/item/ph_paper/afterattack(atom/target, mob/user, proximity_flag, click_parameters) - if(!is_reagent_container(target)) - return - . |= AFTERATTACK_PROCESSED_ITEM - var/obj/item/reagent_containers/cont = target - if(used == TRUE) - to_chat(user, span_warning("[src] has already been used!")) +/obj/item/ph_paper/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + if(!is_reagent_container(interacting_with)) return + var/obj/item/reagent_containers/cont = interacting_with if(!LAZYLEN(cont.reagents.reagent_list)) - return + return NONE + if(used) + to_chat(user, span_warning("[src] has already been used!")) + return ITEM_INTERACT_BLOCKING CONVERT_PH_TO_COLOR(round(cont.reagents.ph, 1), color) desc += " The paper looks to be around a pH of [round(cont.reagents.ph, 1)]" name = "used [name]" used = TRUE + return ITEM_INTERACT_SUCCESS /* * pH meter that will give a detailed or truncated analysis of all the reagents in of an object with a reagents datum attached to it. Only way of detecting purity for now. @@ -113,18 +112,16 @@ to_chat(user, span_notice("You switch the chemical analyzer to not include reagent descriptions in it's report.")) scanmode = SHORTENED_CHEM_OUTPUT -/obj/item/ph_meter/afterattack(atom/target, mob/user, proximity_flag, click_parameters) - . = ..() - if(!is_reagent_container(target)) - return - . |= AFTERATTACK_PROCESSED_ITEM - var/obj/item/reagent_containers/cont = target - if(LAZYLEN(cont.reagents.reagent_list) == null) - return +/obj/item/ph_meter/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + if(!is_reagent_container(interacting_with)) + return NONE + var/obj/item/reagent_containers/cont = interacting_with + if(!LAZYLEN(cont.reagents.reagent_list)) + return NONE var/list/out_message = list() to_chat(user, "The chemistry meter beeps and displays:") - out_message += "Total volume: [round(cont.volume, 0.01)] Current temperature: [round(cont.reagents.chem_temp, 0.1)]K Total pH: [round(cont.reagents.ph, 0.01)]\n" - out_message += "Chemicals found in [target.name]:\n" + out_message += "Total volume: [round(cont.volume, 0.01)] Current temperature: [round(cont.reagents.chem_temp, 0.1)]K Total pH: [round(cont.reagents.ph, 0.01)]\n" + out_message += "Chemicals found in [interacting_with.name]:\n" if(cont.reagents.is_reacting) out_message += "[span_warning("A reaction appears to be occuring currently.")]\n" for(var/datum/reagent/reagent in cont.reagents.reagent_list) @@ -135,8 +132,9 @@ out_message += "[round(reagent.volume, 0.01)]u of [reagent.name], Purity: [round(reagent.purity, 0.000001)*100]%, [(scanmode?"[(reagent.overdose_threshold?"Overdose: [reagent.overdose_threshold]u, ":"")]Base pH: [initial(reagent.ph)], Current pH: [reagent.ph].":"Current pH: [reagent.ph].")]\n" if(scanmode) out_message += "Analysis: [reagent.description]\n" - to_chat(user, "[out_message.Join()]") + to_chat(user, examine_block(span_notice("[out_message.Join()]"))) desc = "An electrode attached to a small circuit box that will display details of a solution. Can be toggled to provide a description of each of the reagents. The screen currently displays detected vol: [round(cont.volume, 0.01)] detected pH:[round(cont.reagents.ph, 0.1)]." + return ITEM_INTERACT_SUCCESS /obj/item/burner name = "burner" @@ -187,24 +185,25 @@ set_lit(TRUE) user.visible_message(span_notice("[user] lights up the [src].")) -/obj/item/burner/afterattack(atom/target, mob/user, proximity_flag, click_parameters) - . = ..() - if(lit) - . |= AFTERATTACK_PROCESSED_ITEM - if(is_reagent_container(target)) - var/obj/item/reagent_containers/container = target - container.reagents.expose_temperature(get_temperature()) - to_chat(user, span_notice("You heat up the [src].")) - playsound(user.loc, 'sound/chemistry/heatdam.ogg', 50, TRUE) - return . - else if(isitem(target)) - var/obj/item/item = target - if(item.heat > 1000) - . |= AFTERATTACK_PROCESSED_ITEM +/obj/item/burner/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + if(!lit) + return NONE + + if(is_reagent_container(interacting_with)) + var/obj/item/reagent_containers/container = interacting_with + container.reagents.expose_temperature(get_temperature()) + user.visible_message(span_notice("[user] heats up [src]."), span_notice("You heat up [src].")) + playsound(user, 'sound/chemistry/heatdam.ogg', 50, TRUE) + return ITEM_INTERACT_SUCCESS + + else if(isitem(interacting_with)) + var/obj/item/item = interacting_with + if(item.get_temperature() > 1000) set_lit(TRUE) - user.visible_message(span_notice("[user] lights up the [src].")) + user.visible_message(span_notice("[user] lights up [src]."), span_notice("You light up [src].")) + return ITEM_INTERACT_SUCCESS - return . + return ITEM_INTERACT_BLOCKING /obj/item/burner/update_icon_state() . = ..() @@ -281,7 +280,7 @@ /obj/item/thermometer name = "thermometer" - desc = "A thermometer for checking a beaker's temperature" + desc = "A thermometer for checking a something's temperature." icon_state = "thermometer" icon = 'icons/obj/medical/chemical.dmi' item_flags = NOBLUDGEON @@ -291,19 +290,18 @@ var/datum/reagents/attached_to_reagents /obj/item/thermometer/Destroy() - QDEL_NULL(attached_to_reagents) //I have no idea how you can destroy this, but not the beaker, but here we go + attached_to_reagents = null return ..() -/obj/item/thermometer/afterattack(atom/target, mob/user, proximity_flag, click_parameters) - . = ..() - . |= AFTERATTACK_PROCESSED_ITEM - if(target.reagents) - if(!user.transferItemToLoc(src, target)) - return . - attached_to_reagents = target.reagents - to_chat(user, span_notice("You add the [src] to the [target].")) - ui_interact(usr, null) - return . +/obj/item/thermometer/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + if(isnull(interacting_with.reagents)) + return NONE + if(!user.transferItemToLoc(src, interacting_with)) + return ITEM_INTERACT_BLOCKING + attached_to_reagents = interacting_with.reagents + to_chat(user, span_notice("You add the [src] to [interacting_with].")) + ui_interact(user) + return ITEM_INTERACT_SUCCESS /obj/item/thermometer/ui_interact(mob/user, datum/tgui/ui) ui = SStgui.try_update_ui(user, src, ui) @@ -316,7 +314,7 @@ INVOKE_ASYNC(src, PROC_REF(remove_thermometer), user) /obj/item/thermometer/ui_status(mob/user, datum/ui_state/state) - if(!(in_range(src, user))) + if(!in_range(src, user)) return UI_CLOSE return UI_INTERACTIVE @@ -326,7 +324,9 @@ /obj/item/thermometer/ui_data(mob/user) if(!attached_to_reagents) ui_close(user) - var/data = list() + return + + var/list/data = list() data["Temperature"] = round(attached_to_reagents.chem_temp) return data @@ -335,8 +335,8 @@ attached_to_reagents = null /obj/item/thermometer/proc/try_put_in_hand(obj/object, mob/living/user) - to_chat(user, span_notice("You remove the [src] from the [attached_to_reagents.my_atom].")) - if(!issilicon(user) && in_range(src.loc, user)) + to_chat(user, span_notice("You remove the [src] from [attached_to_reagents.my_atom].")) + if(!issilicon(user) && in_range(loc, user)) user.put_in_hands(object) else object.forceMove(drop_location()) diff --git a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm index 68c4c2abff059..cbd6449269ccc 100644 --- a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm +++ b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm @@ -11,13 +11,13 @@ processing_flags = NONE /// The cell used to dispense reagents - var/obj/item/stock_parts/cell/cell - /// Efficiency used when converting cell power to reagents. Units (volume) per joule. - var/powerefficiency = 1e-4 + var/obj/item/stock_parts/power_store/cell + /// Efficiency used when converting cell power to reagents. Joule per volume. + var/power_cost = 0.1 KILO WATTS /// The current amount this machine is dispensing var/amount = 30 /// The rate at which this machine recharges the power cell. - var/recharge_amount = 1.25 KILO WATTS + var/recharge_amount = 0.3 KILO WATTS /// The temperature reagents are dispensed into the beaker var/dispensed_temperature = DEFAULT_REAGENT_TEMPERATURE /// If the UI has the pH meter shown @@ -124,7 +124,7 @@ if(in_range(user, src) || isobserver(user)) . += "The status display reads:\n\ Recharge rate: [display_power(recharge_amount, convert = FALSE)].\n\ - Energy cost: [siunit(INVERSE(powerefficiency), "J/u", 3)]." + Energy cost: [siunit(power_cost, "J/u", 3)]." . += span_notice("Use RMB to eject a stored beaker.") /obj/machinery/chem_dispenser/on_set_is_operational(old_value) @@ -278,7 +278,7 @@ var/datum/reagents/holder = beaker.reagents var/to_dispense = max(0, min(amount, holder.maximum_volume - holder.total_volume)) - if(!cell.use(to_dispense / powerefficiency)) + if(!cell.use(to_dispense * power_cost)) say("Not enough energy to complete operation!") return holder.add_reagent(reagent, to_dispense, reagtemp = dispensed_temperature, added_purity = base_reagent_purity) @@ -321,7 +321,7 @@ var/to_dispense = max(0, min(dispense_amount, holder.maximum_volume - holder.total_volume)) if(!to_dispense) continue - if(!cell.use(to_dispense / powerefficiency)) + if(!cell.use(to_dispense * power_cost)) say("Not enough energy to complete operation!") return holder.add_reagent(reagent, to_dispense, reagtemp = dispensed_temperature, added_purity = base_reagent_purity) @@ -412,7 +412,7 @@ if(. & EMP_PROTECT_SELF) return var/list/datum/reagents/R = list() - var/total = min(rand(7,15), FLOOR(cell.charge*powerefficiency, 1)) + var/total = min(rand(7,15), FLOOR(cell.charge*INVERSE(power_cost), 1)) var/datum/reagents/Q = new(total*10) if(beaker?.reagents) R += beaker.reagents @@ -422,7 +422,7 @@ chem_splash(get_turf(src), null, 3, R) if(beaker?.reagents) beaker.reagents.remove_all() - cell.use(total/powerefficiency) + cell.use(total * power_cost) cell.emp_act(severity) work_animation() visible_message(span_danger("[src] malfunctions, spraying chemicals everywhere!")) @@ -430,12 +430,12 @@ /obj/machinery/chem_dispenser/RefreshParts() . = ..() recharge_amount = initial(recharge_amount) - var/newpowereff = INVERSE(1.5e4) + var/new_power_cost = initial(power_cost) var/parts_rating = 0 - for(var/obj/item/stock_parts/cell/stock_cell in component_parts) + for(var/obj/item/stock_parts/power_store/stock_cell in component_parts) cell = stock_cell for(var/datum/stock_part/matter_bin/matter_bin in component_parts) - newpowereff += matter_bin.tier / 6e4 + new_power_cost -= (matter_bin.tier * 0.25 KILO WATTS) parts_rating += matter_bin.tier for(var/datum/stock_part/capacitor/capacitor in component_parts) recharge_amount *= capacitor.tier @@ -446,7 +446,7 @@ else dispensable_reagents -= upgrade_reagents parts_rating += servo.tier - powerefficiency = round(newpowereff, 1e-5) + power_cost = max(new_power_cost, 0.1 KILO WATTS) /obj/machinery/chem_dispenser/proc/replace_beaker(mob/living/user, obj/item/reagent_containers/new_beaker) if(!user) diff --git a/code/modules/reagents/chemistry/machinery/chem_heater.dm b/code/modules/reagents/chemistry/machinery/chem_heater.dm index 3cf5b75240065..dd4e0dff62624 100644 --- a/code/modules/reagents/chemistry/machinery/chem_heater.dm +++ b/code/modules/reagents/chemistry/machinery/chem_heater.dm @@ -96,7 +96,7 @@ if(!QDELETED(beaker)) if(istype(held_item, /obj/item/reagent_containers/dropper) || istype(held_item, /obj/item/reagent_containers/syringe)) var/obj/item/reagent_containers/injector = held_item - injector.afterattack(beaker, user, proximity_flag = TRUE) + injector.interact_with_atom(beaker, user, modifiers) return ITEM_INTERACT_SUCCESS if(is_reagent_container(held_item) && held_item.is_open_container()) diff --git a/code/modules/reagents/chemistry/machinery/chem_mass_spec.dm b/code/modules/reagents/chemistry/machinery/chem_mass_spec.dm index e11910a13afce..e43d32c661bd9 100644 --- a/code/modules/reagents/chemistry/machinery/chem_mass_spec.dm +++ b/code/modules/reagents/chemistry/machinery/chem_mass_spec.dm @@ -434,13 +434,10 @@ replace_beaker(user, TRUE) return CLICK_ACTION_SUCCESS -/obj/machinery/chem_mass_spec/alt_click_secondary(mob/living/user) - . = ..() - if(!can_interact(user)) - return +/obj/machinery/chem_mass_spec/click_alt_secondary(mob/living/user) if(processing_reagents) balloon_alert(user, "still processing!") - return ..() + return replace_beaker(user, FALSE) /obj/machinery/chem_mass_spec/process(seconds_per_tick) diff --git a/code/modules/reagents/chemistry/machinery/chem_master.dm b/code/modules/reagents/chemistry/machinery/chem_master.dm index 72e670ef0065b..3839a6bc77bb2 100644 --- a/code/modules/reagents/chemistry/machinery/chem_master.dm +++ b/code/modules/reagents/chemistry/machinery/chem_master.dm @@ -1,3 +1,5 @@ +#define MAX_CONTAINER_PRINT_AMOUNT 50 + /obj/machinery/chem_master name = "ChemMaster 3000" desc = "Used to separate chemicals and distribute them in a variety of forms." @@ -26,8 +28,8 @@ var/printing_progress /// Number of containers to be printed var/printing_total - /// The amount of containers that can be printed in 1 cycle - var/printing_amount = 1 + /// The time it takes to print a container + var/printing_speed = 0.75 SECONDS /obj/machinery/chem_master/Initialize(mapload) create_reagents(100) @@ -76,7 +78,7 @@ /obj/machinery/chem_master/examine(mob/user) . = ..() if(in_range(user, src) || isobserver(user)) - . += span_notice("The status display reads:
    Reagent buffer capacity: [reagents.maximum_volume] units.
    Number of containers printed per cycle [printing_amount].") + . += span_notice("The status display reads:
    Reagent buffer capacity: [reagents.maximum_volume] units.
    Printing speed: [0.75 SECONDS / printing_speed * 100]%.") if(!QDELETED(beaker)) . += span_notice("[beaker] of [beaker.reagents.maximum_volume]u capacity inserted") . += span_notice("Right click with empty hand to remove beaker") @@ -90,7 +92,7 @@ /obj/machinery/chem_master/update_appearance(updates) . = ..() - if(panel_open || (machine_stat & (NOPOWER|BROKEN))) + if(panel_open || !is_operational) set_light(0) else set_light(1, 1, "#fffb00") @@ -110,7 +112,7 @@ . += mutable_appearance(icon, base_icon_state + "_overlay_extruder") // Screen overlay - if(!panel_open && !(machine_stat & (NOPOWER | BROKEN))) + if(!panel_open && is_operational) var/screen_overlay = base_icon_state + "_overlay_screen" if(is_printing) screen_overlay += "_active" @@ -121,15 +123,9 @@ // Buffer reagents overlay if(reagents.total_volume) - var/threshold = null var/static/list/fill_icon_thresholds = list(10, 20, 30, 40, 50, 60, 70, 80, 90, 100) - for(var/i in 1 to fill_icon_thresholds.len) - if(ROUND_UP(100 * (reagents.total_volume / reagents.maximum_volume)) >= fill_icon_thresholds[i]) - threshold = i - if(threshold) - var/fill_name = "chemmaster[fill_icon_thresholds[threshold]]" - var/mutable_appearance/filling = mutable_appearance('icons/obj/medical/reagent_fillings.dmi', fill_name) - filling.color = mix_color_from_reagents(reagents.reagent_list) + var/mutable_appearance/filling = reagent_threshold_overlay(reagents, 'icons/obj/medical/reagent_fillings.dmi', "chemmaster", fill_icon_thresholds) + if(!isnull(filling)) . += filling /obj/machinery/chem_master/Exited(atom/movable/gone, direction) @@ -149,10 +145,11 @@ for(var/obj/item/reagent_containers/cup/beaker/beaker in component_parts) reagents.maximum_volume += beaker.reagents.maximum_volume - printing_amount = 0 + //Servo tier determines printing speed + printing_speed = 1 SECONDS for(var/datum/stock_part/servo/servo in component_parts) - printing_amount += servo.tier * 12.5 - printing_amount = min(50, ROUND_UP(printing_amount)) + printing_speed -= servo.tier * 0.25 SECONDS + printing_speed = max(printing_speed, 0.25 SECONDS) ///Return a map of category->list of containers this machine can print /obj/machinery/chem_master/proc/load_printable_containers() @@ -264,6 +261,7 @@ /obj/machinery/chem_master/ui_static_data(mob/user) var/list/data = list() + data["maxPrintable"] = MAX_CONTAINER_PRINT_AMOUNT data["categories"] = list() for(var/category in printable_containers) //make the category @@ -293,7 +291,6 @@ .["isPrinting"] = is_printing .["printingProgress"] = printing_progress .["printingTotal"] = printing_total - .["maxPrintable"] = printing_amount //contents of source beaker var/list/beaker_data = null @@ -469,7 +466,7 @@ item_count = text2num(item_count) if(isnull(item_count) || item_count <= 0) return FALSE - item_count = min(item_count, printing_amount) + item_count = min(item_count, MAX_CONTAINER_PRINT_AMOUNT) var/volume_in_each = round(reagents.total_volume / item_count, CHEMICAL_VOLUME_ROUNDING) // Generate item name @@ -529,7 +526,7 @@ //print more items item_count -- if(item_count > 0) - addtimer(CALLBACK(src, PROC_REF(create_containers), user, item_count, item_name, volume_in_each), 0.75 SECONDS) + addtimer(CALLBACK(src, PROC_REF(create_containers), user, item_count, item_name, volume_in_each), printing_speed) else is_printing = FALSE update_appearance(UPDATE_OVERLAYS) @@ -544,3 +541,5 @@ if(!length(containers)) containers = list(CAT_CONDIMENTS = GLOB.reagent_containers[CAT_CONDIMENTS]) return containers + +#undef MAX_CONTAINER_PRINT_AMOUNT diff --git a/code/modules/reagents/chemistry/machinery/chem_separator.dm b/code/modules/reagents/chemistry/machinery/chem_separator.dm index 13be8d6554f3a..ac964b9f99402 100644 --- a/code/modules/reagents/chemistry/machinery/chem_separator.dm +++ b/code/modules/reagents/chemistry/machinery/chem_separator.dm @@ -1,245 +1,439 @@ +///The maximum number of settings on a burner knob +#define MAX_BURNER_KNOB_SETTINGS 10 + /obj/structure/chem_separator name = "distillation apparatus" desc = "A device that performs chemical separation by distillation." icon = 'icons/obj/medical/chemical.dmi' icon_state = "separator" light_power = 1 - var/fill_icon = 'icons/obj/medical/reagent_fillings.dmi' - var/fill_icon_state = "separator" - /// Icons for different percentages of beaker/separator reagent volumes - var/list/fill_icon_thresholds = list(1,30,80) - /// The temperature thresholds used for thermometer icon update, in Celsius - var/list/temperature_icon_thresholds = list(0,50,100) - /// Whether the burner is currently on and the mixture is heating up - var/burning = FALSE - /// Whether the mixture is above the required temperature and the separation is in process + + ///Is the mixture currently boiling var/boiling = FALSE + /// Has the sound loop animation started + var/loop_started = FALSE /// Sound during separation var/datum/looping_sound/boiling/soundloop - /// Minimal mixture temperature for separation - var/required_temp = T0C + 100 - /// Mixture heating speed in degrees per second for full container - var/heating_rate = 5 - /// Separation speed in units per second - var/distillation_rate = 5 - /// Reagent container for the vapor of the separating reagent - var/datum/reagents/condenser - /// The reagent chosen for separation - var/datum/reagent/separating_reagent - /// Reagent container for condensate or separator filling - var/obj/item/reagent_containers/beaker + /// The container for transferring distilled reagents into + var/obj/item/reagent_containers/distilled_container + /// The container for holding the fuel source for the bunset burner + var/obj/item/reagent_containers/fuel_container + /// Is the bunset burner currenrly switched on/off + var/burner_on = FALSE + /// Do we have a condenser installed for forced cooling + var/condenser_installed = FALSE + /// Is the condenser on + var/condenser_on = FALSE + /// Knob setting on the burner + var/burner_knob = 1 /obj/structure/chem_separator/Initialize(mapload) . = ..() - create_reagents(300, TRANSPARENT | INJECTABLE) - condenser = new() - soundloop = new(src, boiling) + create_reagents(100, TRANSPARENT | INJECTABLE) + soundloop = new(src) + register_context() /obj/structure/chem_separator/Destroy() - if(burning) - STOP_PROCESSING(SSobj, src) - if(beaker) - QDEL_NULL(beaker) + QDEL_NULL(distilled_container) + QDEL_NULL(fuel_container) QDEL_NULL(soundloop) return ..() +/obj/structure/chem_separator/atom_deconstruct(disassembled) + var/atom/drop = drop_location() + + new /obj/item/stack/sheet/mineral/wood(drop, 1) + + new /obj/item/thermometer(drop) + + new /obj/item/burner(drop) + + if(condenser_installed) + new /obj/item/assembly/igniter/condenser(drop) + + if(!QDELETED(distilled_container)) + distilled_container.forceMove(drop) + + if(!QDELETED(fuel_container)) + fuel_container.forceMove(drop) + /obj/structure/chem_separator/Exited(atom/movable/gone, direction) . = ..() - if(gone == beaker) - beaker = null - update_appearance(UPDATE_ICON) + if(distilled_container == gone) + distilled_container = null + update_appearance(UPDATE_OVERLAYS) + if(fuel_container == gone) + toggle_burner(FALSE) + fuel_container = null + update_appearance(UPDATE_OVERLAYS) + +/obj/structure/chem_separator/add_context(atom/source, list/context, obj/item/held_item, mob/user) + . = NONE + if(isnull(held_item)) + if(!QDELETED(distilled_container)) + context[SCREENTIP_CONTEXT_LMB] = "Remove beaker" + . = CONTEXTUAL_SCREENTIP_SET + if(!QDELETED(fuel_container)) + context[SCREENTIP_CONTEXT_RMB] = "Remove fuel" + . = CONTEXTUAL_SCREENTIP_SET + if(burner_on) + context[SCREENTIP_CONTEXT_ALT_LMB] = "Off burner" + . = CONTEXTUAL_SCREENTIP_SET + return + + if(!condenser_installed && istype(held_item, /obj/item/assembly/igniter/condenser)) + context[SCREENTIP_CONTEXT_LMB] = "Installer cooler" + return CONTEXTUAL_SCREENTIP_SET + + if(is_reagent_container(held_item) && held_item.is_open_container()) + if(QDELETED(distilled_container)) + context[SCREENTIP_CONTEXT_LMB] = "[QDELETED(distilled_container) ? "Insert" : "Replace"] beaker" + return CONTEXTUAL_SCREENTIP_SET + if(QDELETED(fuel_container)) + context[SCREENTIP_CONTEXT_RMB] = "[QDELETED(fuel_container) ? "Insert" : "Replace"] fuel" + return CONTEXTUAL_SCREENTIP_SET + + if(held_item.tool_behaviour == TOOL_CROWBAR) + context[SCREENTIP_CONTEXT_LMB] = "Deconstruct" + return CONTEXTUAL_SCREENTIP_SET + +/obj/structure/chem_separator/examine(mob/user) + . = ..() + + if(reagents.total_volume) + . += span_notice("The distilation flask reads [reagents.total_volume]/[reagents.maximum_volume]u.") + if(!QDELETED(distilled_container)) + . += span_notice("The distilation beaker reads [distilled_container.reagents.total_volume]/[distilled_container.reagents.maximum_volume]u.") + . += span_notice("Remove beaker with [EXAMINE_HINT("LMB")].") + else + . += span_warning("Its missing a distilation container, insert with [EXAMINE_HINT("LMB")]") + if(!QDELETED(fuel_container)) + . += span_notice("The burner fuel container reads [fuel_container.reagents.total_volume]/[fuel_container.reagents.maximum_volume]u.") + . += span_notice("Remove fuel with [EXAMINE_HINT("RMB")].") + else + . += span_warning("Its missing a beaker containing fuel for the burner, insert with [EXAMINE_HINT("RMB")]") + if(burner_on) + . += span_notice("Off burner with [EXAMINE_HINT("ALT LMB")].") + else + . += span_notice("You can start a flame with an combustible device.") + + if(condenser_installed) + . += span_notice("The in-built condenser can facilitate faster cooling but consumes fuel.") + else + . += span_notice("You could install a [EXAMINE_HINT("condenser")] for fater cooling.") + + . += span_notice("You can [EXAMINE_HINT("examine more")] to see reagent boiling points & fuel properties.") + . += span_notice("The whole aparatus can be [EXAMINE_HINT("pried")] apart.") + +/obj/structure/chem_separator/examine_more(mob/user) + . = ..() + + . += span_notice("For burner fuel Plasma > Oil > Welding Fuel = Oxygen > Ethanol > Monkey Energy") + + . += span_notice("Upon cross examining the flasks reagents contents with its chart you see the boiling points of each reagent present.") + for(var/datum/reagent/reg as anything in reagents.reagent_list) + . += span_notice("[reg.name] [get_boiling_point(reg)]K") /obj/structure/chem_separator/update_overlays() . = ..() - set_light(burning ? light_power : 0) - // Burner overlay - if(burning) - . += mutable_appearance(icon, "[icon_state]_burn") - . += emissive_appearance(icon, "[icon_state]_burn", src) - // Separator reagents overlay + + //burner overlays + if(burner_on) + . += mutable_appearance('icons/obj/medical/chemical.dmi', "separator_burn") + . += emissive_appearance('icons/obj/medical/chemical.dmi', "separator_burn", src) + + var/static/list/fill_icon_thresholds = list(1, 30, 80) + + //distilation flask overlays if(reagents.total_volume) - var/threshold = null - for(var/i in 1 to fill_icon_thresholds.len) - if(ROUND_UP(100 * reagents.total_volume / reagents.maximum_volume) >= fill_icon_thresholds[i]) - threshold = i - if(threshold) - var/fill_name = "[fill_icon_state]_m_[fill_icon_thresholds[threshold]]" - var/mutable_appearance/filling = mutable_appearance(fill_icon, fill_name) - filling.color = mix_color_from_reagents(reagents.reagent_list) - . += filling - // Beaker overlay - if(beaker) - . += "[icon_state]_beaker" - // Beaker reagents overlay - if(beaker.reagents.total_volume) - var/threshold = null - for(var/i in 1 to fill_icon_thresholds.len) - if(ROUND_UP(100 * beaker.reagents.total_volume / beaker.reagents.maximum_volume) >= fill_icon_thresholds[i]) - threshold = i - if(threshold) - var/fill_name = "[fill_icon_state]_b_[fill_icon_thresholds[threshold]]" - var/mutable_appearance/filling = mutable_appearance(fill_icon, fill_name) - filling.color = mix_color_from_reagents(beaker.reagents.reagent_list) - . += filling - // Dripping overlay - if(boiling) - var/mutable_appearance/filling = mutable_appearance(fill_icon, "separator_dripping") - filling.color = separating_reagent.color - . += filling - // Thermometer overlay + var/mutable_appearance/overlay = reagent_threshold_overlay(reagents, 'icons/obj/medical/reagent_fillings.dmi', "separator_m_", fill_icon_thresholds) + if(!isnull(overlay)) + . += overlay + + //dripping overlay + if(boiling) + var/mutable_appearance/filling = mutable_appearance('icons/obj/medical/reagent_fillings.dmi', "separator_dripping") + filling.color = mix_color_from_reagents(reagents.reagent_list) + . += filling + + //distilation beaker overlays + if(!QDELETED(distilled_container)) + . += "separator_beaker" + var/mutable_appearance/overlay = reagent_threshold_overlay(distilled_container.reagents, 'icons/obj/medical/reagent_fillings.dmi', "separator_b_", fill_icon_thresholds) + if(!isnull(overlay)) + . += overlay + + //thermometer overlay + var/static/list/temperature_icon_thresholds = list(0, 50, 100) var/threshold = null for(var/i in 1 to temperature_icon_thresholds.len) if(ROUND_UP(reagents.chem_temp - T0C) >= temperature_icon_thresholds[i]) threshold = i if(threshold) - var/fill_name = "[icon_state]_temp_[temperature_icon_thresholds[threshold]]" - var/mutable_appearance/filling = mutable_appearance(icon_state, fill_name) + var/fill_name = "separator_temp_[temperature_icon_thresholds[threshold]]" + var/mutable_appearance/filling = mutable_appearance('icons/obj/medical/chemical.dmi', fill_name) . += filling -/// Checks whether the item can ignite the separator -/obj/structure/chem_separator/proc/ignite_with(obj/item/object, mob/living/user) - var/ignition_message = object.ignition_effect(src, user) - if(!ignition_message) - return FALSE - user.visible_message(ignition_message) - fire_act(object.get_temperature()) - return TRUE - -/obj/structure/chem_separator/attackby(obj/item/item, mob/user, params) - if(ignite_with(item, user)) - return TRUE // no afterattack - if(is_reagent_container(item) && !(item.item_flags & ABSTRACT) && item.is_open_container()) - var/obj/item/reagent_containers/new_beaker = item - if(!user.transferItemToLoc(new_beaker, src)) - return FALSE - replace_beaker(user, new_beaker) - balloon_alert(user, "added beaker") - update_appearance(UPDATE_ICON) - return TRUE // no afterattack - return ..() +/** + * Computes the boiling point of the reagent based on its mass. heaiver reagents obviously needs higher temps + * Arguments + * + * * datum/reagent/reg - the reagent whos boiling point we are trying to compute + */ +/obj/structure/chem_separator/proc/get_boiling_point(datum/reagent/reg) + PRIVATE_PROC(TRUE) -/// Insert, replace or eject the container depending on the state and parameters -/obj/structure/chem_separator/proc/replace_beaker(mob/living/user, obj/item/reagent_containers/new_beaker) - if(!user) - CRASH("[user] ([user?.type]) is not a living, but is trying to replace beaker") - if(beaker) - if(burning) - stop() - if(!issilicon(user) && in_range(src, user)) - user.put_in_hands(beaker) - playsound(src, 'sound/items/handling/drinkglass_pickup.ogg', PICKUP_SOUND_VOLUME, ignore_walls = FALSE) - else - beaker.forceMove(drop_location()) - beaker = null - if(new_beaker) - beaker = new_beaker - playsound(src, 'sound/items/handling/drinkglass_drop.ogg', DROP_SOUND_VOLUME, ignore_walls = FALSE) - update_appearance(UPDATE_ICON) - return TRUE + //use the constant mass set on init + reg = GLOB.chemical_reagents_list[reg.type] + + //reagents masses can vary between 10->800 + var/normalized_coord = (reg.mass - 10) / 790 + + //return a boiling point anywhere between 400->900 k. Change if you want more varity + return 400 + (500 * normalized_coord) + +/** + * Computes the coefficient of burning(the ability of the reagent mixture to burn) of the burner fuel container + * reagents can affect the intensity of the flame in different ways. A -ve value the mixture can not combust + * whereas a +ve value(<= 1) means the flame can burn at maximum efficiency + */ +/obj/structure/chem_separator/proc/get_ignition_coefficient() + PRIVATE_PROC(TRUE) + + if(QDELETED(fuel_container)) + return 0 + + //map of reagents & how much burning potential they all have + var/static/list/reagent_coefficients = list( + /datum/reagent/toxin/plasma = 1, + /datum/reagent/fuel/oil = 0.9, + /datum/reagent/fuel = 0.8, + /datum/reagent/oxygen = 0.8, + /datum/reagent/consumable/ethanol = 0.7, + /datum/reagent/consumable/monkey_energy = 0.6, + /datum/reagent/water = - 0.7 + ) + + var/total_coefficient = 0 + for(var/datum/reagent/reg as anything in fuel_container.reagents.reagent_list) + var/coefficient = -1 //any fuel that is not on the list acts as an inhibitor + for(var/datum/reagent/fuel as anything in reagent_coefficients) + if(istype(reg, fuel)) + coefficient = reagent_coefficients[fuel] + break + total_coefficient += coefficient + + return clamp(total_coefficient, 0, 1) + +/** + * Toggles the burner on(only for a good fuel composition) or off + * Arguments + * + * * state - on or off + */ +/obj/structure/chem_separator/proc/toggle_burner(state) + PRIVATE_PROC(TRUE) + + if(!state) + burner_on = FALSE + set_light(0) + else + if(!get_ignition_coefficient()) //no proper fuel + return + if(!reagents.total_volume) //no reagents to distill + return + if(QDELETED(distilled_container)) //no beaker to receive distilled reagents + return + burner_on = TRUE + set_light(ROUND_UP(2 * (burner_knob / 5))) + update_appearance(UPDATE_OVERLAYS) /obj/structure/chem_separator/fire_act(exposed_temperature, exposed_volume) - if(burning) - return ..() - start() + toggle_burner(TRUE) /obj/structure/chem_separator/extinguish() . = ..() - if(burning) - stop() + toggle_burner(FALSE) -/// Ignite the burner to start the separation process -/obj/structure/chem_separator/proc/start() - if(!beaker) - return - if(beaker.reagents.total_volume >= beaker.reagents.maximum_volume) - return - if(!reagents.total_volume) - return - var/list/reagents_sorted = reagents.reagent_list.Copy() - reagents_sorted = sort_list(reagents_sorted, GLOBAL_PROC_REF(cmp_reagents_asc)) - separating_reagent = reagents_sorted[1] - burning = TRUE - update_appearance(UPDATE_ICON) - START_PROCESSING(SSobj, src) - -/// Extinguish the burner to stop the separation process -/obj/structure/chem_separator/proc/stop() - separating_reagent = null - burning = FALSE - if(boiling) - boiling = FALSE - condenser.trans_to(reagents, condenser.total_volume) - soundloop.stop() - update_appearance(UPDATE_ICON) - STOP_PROCESSING(SSobj, src) +/obj/structure/chem_separator/item_interaction(mob/living/user, obj/item/tool, list/modifiers) + . = NONE + if(user.combat_mode || tool.item_flags & ABSTRACT || tool.flags_1 & HOLOGRAM_1 || !user.can_perform_action(src, ALLOW_SILICON_REACH)) + return ITEM_INTERACT_SKIP_TO_ATTACK -/// Fill internal storage with reagents from the container -/obj/structure/chem_separator/proc/load() - if(burning) - return - if(!beaker?.reagents.total_volume) - return - if(reagents.total_volume >= reagents.maximum_volume) - return - beaker.reagents.trans_to(reagents, beaker.reagents.total_volume) - update_appearance(UPDATE_ICON) + ///Add the distilation flask + if(is_reagent_container(tool) && tool.is_open_container()) + //transfer old container + if(!QDELETED(distilled_container)) + user.put_in_hands(distilled_container) -/// Drain internal reagents into the container -/obj/structure/chem_separator/proc/unload() - if(burning) - return - if(!reagents.total_volume) - return - if(!beaker) - return - if(beaker.reagents.total_volume >= beaker.reagents.maximum_volume) - return - reagents.trans_to(beaker.reagents, reagents.total_volume) - update_appearance(UPDATE_ICON) - -/// Check whether the separation can process -/obj/structure/chem_separator/proc/can_process(datum/gas_mixture/air) - if(!burning) - return FALSE - if(!air || !air.has_gas(/datum/gas/oxygen, 1)) - return FALSE - if(air.temperature > required_temp) // Too hot to condense - return FALSE - if(!beaker) - return FALSE - if(beaker.reagents.total_volume >= beaker.reagents.maximum_volume) - return FALSE - if(!reagents.get_reagent_amount(separating_reagent.type)) - return FALSE - return TRUE + //add new container + if(!user.transferItemToLoc(tool, src)) + to_chat(user, span_warning("[tool] is stuck in your hand.")) + return ITEM_INTERACT_BLOCKING + distilled_container = tool + + START_PROCESSING(SSobj, src) + balloon_alert(user, "distillation container added.") + + ui_interact(user) + update_appearance(UPDATE_OVERLAYS) + return ITEM_INTERACT_SUCCESS + else if(istype(tool, /obj/item/assembly/igniter/condenser)) + if(!user.temporarilyRemoveItemFromInventory(tool)) + to_chat(user, span_warning("[tool] is stuck in your hand.")) + return ITEM_INTERACT_BLOCKING + condenser_installed = TRUE + update_static_data_for_all_viewers() + qdel(tool) + balloon_alert(user, "condenser installed.") + return ITEM_INTERACT_SUCCESS + + ///Try & ignite the bunset burner with this item + var/ignition_message = tool.ignition_effect(src, user) + if(!ignition_message) + return NONE + user.visible_message(ignition_message) + toggle_burner(TRUE) + return ITEM_INTERACT_SUCCESS + +/obj/structure/chem_separator/crowbar_act(mob/living/user, obj/item/tool) + deconstruct(TRUE) + return ITEM_INTERACT_SUCCESS + +/obj/structure/chem_separator/attack_hand(mob/living/user, list/modifiers) + if(!QDELETED(distilled_container)) + if(!SStgui.get_open_ui(user, src)) //for convinience open ui first then interact with beakers if you still want to + ui_interact(user) + return TRUE + + if(user.put_in_hands(distilled_container)) + to_chat(user, span_notice("you take out the output flask.")) + update_appearance(UPDATE_OVERLAYS) + return TRUE + + return ..() + +/obj/structure/chem_separator/item_interaction_secondary(mob/living/user, obj/item/tool, list/modifiers) + . = NONE + if(user.combat_mode || tool.item_flags & ABSTRACT || tool.flags_1 & HOLOGRAM_1 || !user.can_perform_action(src, ALLOW_SILICON_REACH)) + return ITEM_INTERACT_SKIP_TO_ATTACK + + if(is_reagent_container(tool) && tool.is_open_container()) + //transfer old container + if(!QDELETED(fuel_container)) + user.put_in_hands(fuel_container) + + //add new container + if(!user.transferItemToLoc(tool, src)) + to_chat(user, span_warning("[tool] is stuck in your hand.")) + return ITEM_INTERACT_BLOCKING + fuel_container = tool + balloon_alert(user, "fuel container added.") + + ui_interact(user) + return ITEM_INTERACT_SUCCESS + +/obj/structure/chem_separator/attack_hand_secondary(mob/user, list/modifiers) + if(!QDELETED(fuel_container)) + if(!SStgui.get_open_ui(user, src)) //for convinience open ui first then interact with beakers if you still want to + ui_interact(user) + return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN + + if(user.put_in_hands(fuel_container)) + to_chat(user, span_notice("you take out the burner fuel container")) + toggle_burner(FALSE) + return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN + + return ..() + +///Returns the coefficient of cooling of reagents, taking into consideration the condenser +/obj/structure/chem_separator/proc/get_cool_coefficient() + PRIVATE_PROC(TRUE) + + var/coefficient = 0.2 + + var/fuel_coefficient = get_ignition_coefficient() + if(condenser_installed && condenser_on && fuel_coefficient > 0) + var/datum/reagents/fuel = fuel_container.reagents + if(fuel.remove_all(0.15)) + coefficient += fuel_coefficient + else + condenser_on = FALSE + + return coefficient /obj/structure/chem_separator/process(seconds_per_tick) - var/datum/gas_mixture/air = return_air() - if(!can_process(air)) - return stop() - if(isturf(loc)) - var/turf/location = loc - location.hotspot_expose(exposed_temperature = 700, exposed_volume = 5) - if(reagents.chem_temp < required_temp) - reagents.adjust_thermal_energy(heating_rate * seconds_per_tick * SPECIFIC_HEAT_DEFAULT * reagents.maximum_volume) - reagents.chem_temp = min(reagents.chem_temp, required_temp) - update_appearance(UPDATE_ICON) - return - if(reagents.chem_temp >= required_temp) - if(!boiling) + if(!reagents.total_volume) + if(QDELETED(distilled_container) || !distilled_container.reagents.total_volume) + boiling = FALSE + soundloop.stop() + toggle_burner(FALSE) + return PROCESS_KILL + + //if burner in on attempt to heat the reagents + if(burner_on) + var/can_process = TRUE + + //do we have good quality fuel to burn + var/fuel_coefficient = get_ignition_coefficient() + if(!fuel_coefficient) + can_process = FALSE + toggle_burner(FALSE) + + var/knob_ratio = burner_knob / MAX_BURNER_KNOB_SETTINGS + var/datum/reagents/fuel = fuel_container.reagents + + //consume some air after we have validated we have some good fuel. Only if we don't already use O2 as a fuel + if(can_process && !fuel.has_reagent(/datum/reagent/oxygen)) + var/datum/gas_mixture/air = return_air() + if(!air.remove_specific(/datum/gas/oxygen, 0.01 + (0.04 * knob_ratio))) //can burn anywhere between 0.01 & 0.05 moles of air based on the knob settings + can_process = FALSE + toggle_burner(FALSE) + + //burn some fuel if we combusted some air + if(can_process) + if(!fuel.remove_all(0.01 + (0.19 * knob_ratio))) //can burn anywhere between 0.01 & 0.2 units of fuel based on the knob settings + can_process = FALSE + toggle_burner(FALSE) + + //finally heat the mixture + if(can_process) + reagents.adjust_thermal_energy((1000 - reagents.chem_temp) * seconds_per_tick * SPECIFIC_HEAT_DEFAULT * (0.05 + (0.45 * knob_ratio)) * fuel_coefficient) + reagents.handle_reactions() + else if(reagents.chem_temp > DEFAULT_REAGENT_TEMPERATURE) //the container cools down if there is no flame heating it till it reaches room temps + reagents.adjust_thermal_energy((DEFAULT_REAGENT_TEMPERATURE - reagents.chem_temp) * seconds_per_tick * SPECIFIC_HEAT_DEFAULT * get_cool_coefficient()) + reagents.handle_reactions() + + //the target distilation beaker also cools down + if(!QDELETED(distilled_container) && distilled_container.reagents.chem_temp > DEFAULT_REAGENT_TEMPERATURE) + var/datum/reagents/distiled_reagents = distilled_container.reagents + distiled_reagents.adjust_thermal_energy((DEFAULT_REAGENT_TEMPERATURE - distiled_reagents.chem_temp) * seconds_per_tick * SPECIFIC_HEAT_DEFAULT * get_cool_coefficient()) + distiled_reagents.handle_reactions() + + //the distilation process checks the individual boiling point of each reagent based on their mass for seperation + boiling = FALSE + for(var/datum/reagent/reg in reagents.reagent_list) + var/bp = get_boiling_point(reg) + //we can now distil this + if(reagents.chem_temp > bp) + //distilation rate increases as temps go up peaking at 12 units per tick(at 200k above boiling point) + var/amount = 2 + ((reagents.chem_temp - bp) / 200) * 10 + if(!QDELETED(distilled_container)) + reagents.trans_to(distilled_container.reagents, amount, target_id = reg.type) + else //no target container means reagents vanish into thin air i.e leak out + reagents.remove_reagent(reg.type, amount) boiling = TRUE + + //boiling sound effect + if(boiling) + if(!loop_started) soundloop.start() - var/vapor_amount = distillation_rate * seconds_per_tick - // Vapor to condenser - reagents.trans_to(condenser, vapor_amount, target_id = separating_reagent.type) - // Cool the vapor down - condenser.set_temperature(air.temperature) - // Condense into container - condenser.trans_to(beaker.reagents, condenser.total_volume) - else if (boiling) - boiling = FALSE + loop_started = TRUE + update_appearance(UPDATE_OVERLAYS) + else soundloop.stop() - update_appearance(UPDATE_ICON) + loop_started = FALSE + update_appearance(UPDATE_OVERLAYS) /obj/structure/chem_separator/ui_interact(mob/user, datum/tgui/ui) ui = SStgui.try_update_ui(user, src, ui) @@ -247,46 +441,102 @@ ui = new(user, src, "ChemSeparator", name) ui.open() +/obj/structure/chem_separator/ui_static_data(mob/user) + return list( + "condenser_installed" = condenser_installed, + "max_burner_knob_settings" = MAX_BURNER_KNOB_SETTINGS, + ) + /obj/structure/chem_separator/ui_data(mob/user) - var/list/data = list() - data["is_burning"] = burning - data["temperature"] = reagents.chem_temp - T0C // Thermometer is in Celsius - data["own_total_volume"] = reagents.total_volume - data["own_maximum_volume"] = reagents.maximum_volume - data["own_reagent_color"] = mix_color_from_reagents(reagents.reagent_list) - data["beaker"] = !!beaker - if(beaker) - data["beaker_total_volume"] = beaker.reagents.total_volume - data["beaker_maximum_volume"] = beaker.reagents.maximum_volume - data["beaker_reagent_color"] = mix_color_from_reagents(beaker.reagents.reagent_list) - return data - -/obj/structure/chem_separator/ui_act(action, params) - if(..()) - return TRUE + . = list() + + //distilation flask data + var/list/flask_data = list() + flask_data["total_volume"] = reagents.total_volume + flask_data["maximum_volume"] = reagents.maximum_volume + flask_data["temp"] = reagents.chem_temp + flask_data["color"] = mix_color_from_reagents(reagents.reagent_list) + .["flask"] = flask_data + + //distilled beaker data + var/list/distilled_data = null + if(!QDELETED(distilled_container)) + var/datum/reagents/distilled_reagents = distilled_container.reagents + + distilled_data = list() + distilled_data["total_volume"] = distilled_reagents.total_volume + distilled_data["maximum_volume"] = distilled_reagents.maximum_volume + distilled_data["temp"] = distilled_reagents.chem_temp + distilled_data["color"] = mix_color_from_reagents(distilled_reagents.reagent_list) + .["beaker"] = distilled_data + + //burner fuel data + var/list/fuel_data = null + if(!QDELETED(fuel_container)) + var/datum/reagents/fuel_reagents = fuel_container.reagents + + fuel_data = list() + fuel_data["total_volume"] = fuel_reagents.total_volume + fuel_data["maximum_volume"] = fuel_reagents.maximum_volume + fuel_data["temp"] = fuel_reagents.chem_temp + fuel_data["color"] = mix_color_from_reagents(fuel_reagents.reagent_list) + .["fuel"] = fuel_data + + //Knob setting + .["burner_on"] = burner_on + .["knob"] = burner_knob + + //Condenser setting + .["condenser_on"] = condenser_on + +/obj/structure/chem_separator/ui_act(action, params, datum/tgui/ui, datum/ui_state/state) + . = ..() + if(.) + return + switch(action) - if("load") - load() - if("unload") - unload() - if("start") - playsound(usr, 'sound/effects/pop.ogg', 30, ignore_walls = FALSE) - start() - if("stop") - stop() - if("eject") - replace_beaker(usr) - return TRUE - -/datum/crafting_recipe/chem_separator - name = "chemical separator" - result = /obj/structure/chem_separator - tool_behaviors = list(TOOL_WELDER) - time = 5 SECONDS - reqs = list( - /obj/item/stack/sheet/mineral/wood = 1, - /obj/item/stack/sheet/glass = 1, - /obj/item/burner = 1, - /obj/item/thermometer = 1, - ) - category = CAT_CHEMISTRY + if("drain") + if(QDELETED(distilled_container) || !reagents.total_volume) + return FALSE + + if(reagents.trans_to(distilled_container.reagents, reagents.maximum_volume)) + toggle_burner(FALSE) + return TRUE + + if("filter") + if(QDELETED(distilled_container) || !distilled_container.reagents.total_volume) + return FALSE + + if(distilled_container.reagents.trans_to(reagents, reagents.maximum_volume)) + update_appearance(UPDATE_OVERLAYS) + return TRUE + + if("knob") + var/setting = params["amount"] + if(isnull(setting)) + return FALSE + + setting = text2num(setting) + if(!setting) + return FALSE + + burner_knob = clamp(setting, 1, MAX_BURNER_KNOB_SETTINGS) + if(burner_on) + set_light(ROUND_UP(2 * (burner_knob / MAX_BURNER_KNOB_SETTINGS))) + return TRUE + + if("cool") + if(!condenser_installed) + return FALSE + + condenser_on = !condenser_on + return TRUE + +/obj/structure/chem_separator/click_alt(mob/user) + if(!burner_on) + return CLICK_ACTION_BLOCKING + + toggle_burner(FALSE) + return CLICK_ACTION_SUCCESS + +#undef MAX_BURNER_KNOB_SETTINGS diff --git a/code/modules/reagents/chemistry/machinery/pandemic.dm b/code/modules/reagents/chemistry/machinery/pandemic.dm index f08989390a29e..dca2b603ca40f 100644 --- a/code/modules/reagents/chemistry/machinery/pandemic.dm +++ b/code/modules/reagents/chemistry/machinery/pandemic.dm @@ -87,9 +87,9 @@ return ..() var/list/modifiers = params2list(params) if(istype(held_item, /obj/item/reagent_containers/syringe) && LAZYACCESS(modifiers, RIGHT_CLICK)) - held_item.afterattack_secondary(beaker, user, Adjacent(user), params) + held_item.interact_with_atom_secondary(beaker, user) else - held_item.afterattack(beaker, user, Adjacent(user), params) + held_item.interact_with_atom(beaker, user) SStgui.update_uis(src) return TRUE diff --git a/code/modules/reagents/chemistry/machinery/portable_chem_mixer.dm b/code/modules/reagents/chemistry/machinery/portable_chem_mixer.dm index 25a7eecbd374f..016e55012c570 100644 --- a/code/modules/reagents/chemistry/machinery/portable_chem_mixer.dm +++ b/code/modules/reagents/chemistry/machinery/portable_chem_mixer.dm @@ -10,6 +10,7 @@ custom_price = PAYCHECK_CREW * 10 custom_premium_price = PAYCHECK_CREW * 14 interaction_flags_click = FORBID_TELEKINESIS_REACH + interaction_flags_mouse_drop = FORBID_TELEKINESIS_REACH ///Creating an empty slot for a beaker that can be added to dispense into var/obj/item/reagent_containers/beaker @@ -243,11 +244,10 @@ update_appearance() return TRUE -/obj/item/storage/portable_chem_mixer/MouseDrop(obj/over_object) - . = ..() +/obj/item/storage/portable_chem_mixer/mouse_drop_dragged(atom/over_object) if(ismob(loc)) var/mob/M = loc - if(!M.incapacitated() && istype(over_object, /atom/movable/screen/inventory/hand)) + if(istype(over_object, /atom/movable/screen/inventory/hand)) var/atom/movable/screen/inventory/hand/H = over_object M.putItemFromInventoryInHandIfPossible(src, H.held_index) @@ -260,7 +260,7 @@ update_appearance() return CLICK_ACTION_SUCCESS -/obj/item/storage/portable_chem_mixer/CtrlClick(mob/living/user) +/obj/item/storage/portable_chem_mixer/item_ctrl_click(mob/user) if(atom_storage.locked == STORAGE_FULLY_LOCKED) atom_storage.locked = STORAGE_NOT_LOCKED replace_beaker(user) @@ -270,3 +270,4 @@ atom_storage.hide_contents(usr) update_appearance() + return CLICK_ACTION_SUCCESS diff --git a/code/modules/reagents/chemistry/machinery/reagentgrinder.dm b/code/modules/reagents/chemistry/machinery/reagentgrinder.dm index e206ffebbc9f8..a4fa10cb88c63 100644 --- a/code/modules/reagents/chemistry/machinery/reagentgrinder.dm +++ b/code/modules/reagents/chemistry/machinery/reagentgrinder.dm @@ -422,7 +422,7 @@ var/duration = time / speed - Shake(duration = duration) + Shake(pixelshiftx = 1, pixelshifty = 0, duration = duration) operating = TRUE if(!juicing) playsound(src, 'sound/machines/blender.ogg', 50, TRUE) @@ -490,7 +490,7 @@ var/duration = time / speed - Shake(duration = duration) + Shake(pixelshiftx = 1, pixelshifty = 0, duration = duration) operating = TRUE playsound(src, 'sound/machines/juicer.ogg', 20, TRUE) diff --git a/code/modules/reagents/chemistry/machinery/smoke_machine.dm b/code/modules/reagents/chemistry/machinery/smoke_machine.dm index c103457025def..6f58fb9019307 100644 --- a/code/modules/reagents/chemistry/machinery/smoke_machine.dm +++ b/code/modules/reagents/chemistry/machinery/smoke_machine.dm @@ -1,4 +1,5 @@ -#define REAGENTS_BASE_VOLUME 100 // actual volume is REAGENTS_BASE_VOLUME plus REAGENTS_BASE_VOLUME * rating for each matterbin +/// Actual volume is REAGENTS_BASE_VOLUME plus REAGENTS_BASE_VOLUME * rating for each matterbin +#define REAGENTS_BASE_VOLUME 100 /obj/machinery/smoke_machine name = "smoke machine" @@ -8,21 +9,17 @@ base_icon_state = "smoke" density = TRUE circuit = /obj/item/circuitboard/machine/smoke_machine - processing_flags = NONE + interaction_flags_atom = parent_type::interaction_flags_atom | INTERACT_ATOM_REQUIRES_ANCHORED + processing_flags = START_PROCESSING_MANUALLY + ///Divided against the amount of smoke to produce. Higher values equals lesser amount of reagents consumed to create smoke var/efficiency = 20 + ///Is this machine on or off var/on = FALSE - var/cooldown = 0 - var/useramount = 30 // Last used amount - var/setting = 1 // displayed range is 3 * setting - var/max_range = 3 // displayed max range is 3 * max range - -/datum/effect_system/fluid_spread/smoke/chem/smoke_machine/set_up(range = 1, amount = DIAMOND_AREA(range), atom/holder, atom/location = null, datum/reagents/carry = null, efficiency = 10, silent=FALSE) - src.holder = holder - src.location = get_turf(location) - src.amount = amount - carry?.copy_to(chemholder, 20) - carry?.remove_all(amount / efficiency) + ///Higher values mean larger smoke pufs but also more power & reagents consumed + var/setting = 1 + ///Max setting acheived from upgraded capacitors + var/max_range = 3 /// A factory which produces clouds of smoke for the smoke machine. /datum/effect_system/fluid_spread/smoke/chem/smoke_machine @@ -33,88 +30,145 @@ opacity = FALSE alpha = 100 +/datum/effect_system/fluid_spread/smoke/chem/smoke_machine/set_up(range = 1, amount = DIAMOND_AREA(range), atom/holder, atom/location, datum/reagents/carry, efficiency = 10, silent = FALSE) + src.holder = holder + src.location = get_turf(location) + src.amount = amount + if(carry) + carry.copy_to(chemholder, 20) + carry.remove_all(amount / efficiency) + /obj/machinery/smoke_machine/Initialize(mapload) - . = ..() create_reagents(REAGENTS_BASE_VOLUME, INJECTABLE) + + . = ..() + AddComponent(/datum/component/plumbing/simple_demand) AddComponent(/datum/component/simple_rotation) - for(var/datum/stock_part/matter_bin/B in component_parts) - reagents.maximum_volume += REAGENTS_BASE_VOLUME * B.tier - if(is_operational) - begin_processing() + register_context() + +/obj/machinery/smoke_machine/on_deconstruction(disassembled) + reagents.expose(loc, TOUCH) + reagents.clear_reagents() + +/obj/machinery/smoke_machine/add_context(atom/source, list/context, obj/item/held_item, mob/user) + . = NONE + if(isnull(held_item)) + return + + if(is_reagent_container(held_item) && held_item.is_open_container()) + context[SCREENTIP_CONTEXT_LMB] = "Inject reagents" + return CONTEXTUAL_SCREENTIP_SET + + if(held_item.tool_behaviour == TOOL_SCREWDRIVER) + context[SCREENTIP_CONTEXT_LMB] = "[panel_open ? "Close" : "Open"] panel" + return CONTEXTUAL_SCREENTIP_SET + else if(held_item.tool_behaviour == TOOL_WRENCH) + context[SCREENTIP_CONTEXT_LMB] = "[anchored ? "Una" : "A"]nchor" + return CONTEXTUAL_SCREENTIP_SET + else if(held_item.tool_behaviour == TOOL_CROWBAR && panel_open) + context[SCREENTIP_CONTEXT_LMB] = "Deconstruct" + return CONTEXTUAL_SCREENTIP_SET + +/obj/machinery/smoke_machine/examine(mob/user) + . = ..() + + . += span_notice("Reagent capacity [reagents.total_volume]/[reagents.maximum_volume].") + . += span_notice("Operating at [round((efficiency / 26) * 100)]% efficiency.") + + . += span_notice("Its maintainence panel can be [EXAMINE_HINT("screwed")] [panel_open ? "closed" : "open"].") + if(panel_open) + . += span_notice("It can be [EXAMINE_HINT("pried")] apart.") + + if(anchored) + . += span_notice("It can be [EXAMINE_HINT("wrenched")] loose.") + else + . += span_warning("It needs to be [EXAMINE_HINT("anchored")] in place to work.") /obj/machinery/smoke_machine/update_icon_state() - if((!is_operational) || (!on) || (reagents.total_volume == 0)) - icon_state = "[base_icon_state]0[panel_open ? "-o" : null]" + if(!is_operational || !on || !reagents.total_volume) + icon_state = "[base_icon_state]0[panel_open ? "-o" : ""]" return ..() + icon_state = "[base_icon_state]1" return ..() /obj/machinery/smoke_machine/RefreshParts() . = ..() + + //new capacity to store reagents from matter bins var/new_volume = REAGENTS_BASE_VOLUME for(var/datum/stock_part/matter_bin/matter_bin in component_parts) new_volume += REAGENTS_BASE_VOLUME * matter_bin.tier - if(!reagents) - create_reagents(new_volume, INJECTABLE) reagents.maximum_volume = new_volume - if(new_volume < reagents.total_volume) - reagents.expose(loc, TOUCH) // if someone manages to downgrade it without deconstructing - reagents.clear_reagents() + + //new efficiency from capacitors efficiency = 18 for(var/datum/stock_part/capacitor/capacitor in component_parts) efficiency += 2 * capacitor.tier + + //new maximum range from servos max_range = 1 for(var/datum/stock_part/servo/servo in component_parts) max_range += servo.tier max_range = max(3, max_range) -/obj/machinery/smoke_machine/on_set_is_operational(old_value) - if(old_value) //Turned off - end_processing() - else //Turned on - begin_processing() +/obj/machinery/smoke_machine/item_interaction(mob/living/user, obj/item/tool, list/modifiers) + . = NONE + if(user.combat_mode || tool.item_flags & ABSTRACT || tool.flags_1 & HOLOGRAM_1 || !user.can_perform_action(src, ALLOW_SILICON_REACH)) + return ITEM_INTERACT_SKIP_TO_ATTACK + //transfer reagents from an open container into machine + if(is_reagent_container(tool) && tool.is_open_container()) + var/obj/item/reagent_containers/RC = tool + var/units = RC.reagents.trans_to(src, RC.amount_per_transfer_from_this, transferred_by = user) + if(units) + to_chat(user, span_notice("You transfer [units] units of the solution to [src].")) + return ITEM_INTERACT_SUCCESS + return ITEM_INTERACT_BLOCKING -/obj/machinery/smoke_machine/process() - if(reagents.total_volume == 0) - on = FALSE - update_appearance() +/obj/machinery/smoke_machine/wrench_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_BLOCKING + if(on) + balloon_alert(user, "turn off first!") return - var/turf/location = get_turf(src) - var/smoke_test = locate(/obj/effect/particle_effect/fluid/smoke) in location - if(on && !smoke_test) - update_appearance() - var/datum/effect_system/fluid_spread/smoke/chem/smoke_machine/smoke = new() - smoke.set_up(setting * 3, holder = src, location = location, carry = reagents, efficiency = efficiency) - smoke.start() - use_energy(active_power_usage) -/obj/machinery/smoke_machine/wrench_act(mob/living/user, obj/item/tool) - . = ..() - if(default_unfasten_wrench(user, tool, time = 4 SECONDS)) - on = FALSE + if(default_unfasten_wrench(user, tool, time = 4 SECONDS) == SUCCESSFUL_UNFASTEN) return ITEM_INTERACT_SUCCESS - return FALSE -/obj/machinery/smoke_machine/attackby(obj/item/I, mob/user, params) - add_fingerprint(user) - if(is_reagent_container(I) && I.is_open_container()) - var/obj/item/reagent_containers/RC = I - var/units = RC.reagents.trans_to(src, RC.amount_per_transfer_from_this, transferred_by = user) - if(units) - to_chat(user, span_notice("You transfer [units] units of the solution to [src].")) - return - if(default_deconstruction_screwdriver(user, "smoke0-o", "smoke0", I)) +/obj/machinery/smoke_machine/screwdriver_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_BLOCKING + if(on) + balloon_alert(user, "turn off first!") return - if(default_deconstruction_crowbar(I)) + + if(default_deconstruction_screwdriver(user, "smoke0-o", "smoke0", tool)) + update_appearance(UPDATE_ICON_STATE) + return ITEM_INTERACT_SUCCESS + +/obj/machinery/smoke_machine/crowbar_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_BLOCKING + if(on) + balloon_alert(user, "turn off first!") return - return ..() -/obj/machinery/smoke_machine/on_deconstruction(disassembled) - reagents.expose(loc, TOUCH) - reagents.clear_reagents() + if(default_deconstruction_crowbar(tool)) + return ITEM_INTERACT_SUCCESS + +/obj/machinery/smoke_machine/process() + if(!reagents.total_volume || !anchored || !on || !is_operational) + on = FALSE + update_appearance(UPDATE_ICON_STATE) + return PROCESS_KILL + + var/turf/location = get_turf(src) + if(!(locate(/obj/effect/particle_effect/fluid/smoke) in location)) + var/datum/effect_system/fluid_spread/smoke/chem/smoke_machine/smoke = new() + smoke.set_up(setting * 3, holder = src, location = location, carry = reagents, efficiency = efficiency) + smoke.start() + use_energy(active_power_usage * (setting / max_range)) + update_appearance(UPDATE_ICON_STATE) /obj/machinery/smoke_machine/ui_interact(mob/user, datum/tgui/ui) ui = SStgui.try_update_ui(user, src, ui) @@ -123,41 +177,58 @@ ui.open() /obj/machinery/smoke_machine/ui_data(mob/user) - var/data = list() - var/tank_contents = list() - var/tank_current_volume = 0 - for(var/datum/reagent/R in reagents.reagent_list) - tank_contents += list(list("name" = R.name, "volume" = R.volume)) // list in a list because Byond merges the first list... - tank_current_volume += R.volume - data["tankContents"] = tank_contents - data["tankCurrentVolume"] = reagents.total_volume ? reagents.total_volume : null - data["tankMaxVolume"] = reagents.maximum_volume - data["active"] = on - data["setting"] = setting - data["maxSetting"] = max_range - return data - -/obj/machinery/smoke_machine/ui_act(action, params) + . = list() + + var/list/tank_data = list() + tank_data["maxVolume"] = reagents.maximum_volume + tank_data["currentVolume"] = round(reagents.total_volume, CHEMICAL_VOLUME_ROUNDING) + var/list/tankContents = list() + for(var/datum/reagent/reagent in reagents.reagent_list) + tankContents += list(list("name" = reagent.name, "volume" = round(reagent.volume, CHEMICAL_VOLUME_ROUNDING))) + tank_data["contents"] = tankContents + .["tank"] = tank_data + + .["active"] = on + .["setting"] = setting + .["maxSetting"] = max_range + +/obj/machinery/smoke_machine/ui_act(action, params, datum/tgui/ui, datum/ui_state/state) . = ..() - - if(. || !anchored) + if(.) return + switch(action) if("purge") reagents.clear_reagents() - update_appearance() - . = TRUE + update_appearance(UPDATE_ICON_STATE) + return TRUE + if("setting") - var/amount = text2num(params["amount"]) + var/amount = params["amount"] + if(isnull(amount)) + return FALSE + + amount = text2num(amount) + if(isnull(amount)) + return FALSE + if(amount in 1 to max_range) setting = amount - . = TRUE + return TRUE + if("power") on = !on - update_appearance() - if(on) - message_admins("[ADMIN_LOOKUPFLW(usr)] activated a smoke machine that contains [english_list(reagents.reagent_list)] at [ADMIN_VERBOSEJMP(src)].") - usr.log_message("activated a smoke machine that contains [english_list(reagents.reagent_list)]", LOG_GAME) - log_combat(usr, src, "has activated [src] which contains [english_list(reagents.reagent_list)] at [AREACOORD(src)].") + if(on && reagents.total_volume) + var/mob/user = ui.user + var/list/english_list = english_list(reagents.reagent_list) + message_admins("[ADMIN_LOOKUPFLW(user)] activated a smoke machine that contains [english_list] at [ADMIN_VERBOSEJMP(src)].") + user.log_message("activated a smoke machine that contains [english_list]", LOG_GAME) + log_combat(user, src, "has activated [src] which contains [english_list] at [AREACOORD(src)].") + begin_processing() + else + on = FALSE + end_processing() + update_appearance(UPDATE_ICON_STATE) + return TRUE #undef REAGENTS_BASE_VOLUME diff --git a/code/modules/reagents/chemistry/reagents.dm b/code/modules/reagents/chemistry/reagents.dm index 11947c7060271..576d62585f7a8 100644 --- a/code/modules/reagents/chemistry/reagents.dm +++ b/code/modules/reagents/chemistry/reagents.dm @@ -250,7 +250,9 @@ Primarily used in reagents/reaction_agents /// Should return a associative list where keys are taste descriptions and values are strength ratios /datum/reagent/proc/get_taste_description(mob/living/taster) - return list("[taste_description]" = 1) + if(isnull(taster) || !HAS_TRAIT(taster, TRAIT_DETECTIVES_TASTE)) + return list("[taste_description]" = 1) + return list("[LOWER_TEXT(name)]" = 1) /** * Used when you want the default reagents purity to be equal to the normal effects diff --git a/code/modules/reagents/chemistry/reagents/atmos_gas_reagents.dm b/code/modules/reagents/chemistry/reagents/atmos_gas_reagents.dm index 5b425d61f8ae0..5728f6cb24db6 100644 --- a/code/modules/reagents/chemistry/reagents/atmos_gas_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/atmos_gas_reagents.dm @@ -85,7 +85,7 @@ /datum/reagent/nitrium_high_metabolization/on_mob_life(mob/living/carbon/breather, seconds_per_tick, times_fired) . = ..() var/need_mob_update - need_mob_update = breather.adjustStaminaLoss(-2 * REM * seconds_per_tick, updating_stamina = FALSE, required_biotype = affected_biotype) + need_mob_update = breather.adjustStaminaLoss(-4 * REM * seconds_per_tick, updating_stamina = FALSE, required_biotype = affected_biotype) need_mob_update += breather.adjustToxLoss(0.1 * (current_cycle-1) * REM * seconds_per_tick, updating_health = FALSE, required_biotype = affected_biotype) // 1 toxin damage per cycle at cycle 10 if(need_mob_update) return UPDATE_MOB_HEALTH diff --git a/code/modules/reagents/chemistry/reagents/cat2_medicine_reagents.dm b/code/modules/reagents/chemistry/reagents/cat2_medicine_reagents.dm index 369efd99dcb35..680cced458d91 100644 --- a/code/modules/reagents/chemistry/reagents/cat2_medicine_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/cat2_medicine_reagents.dm @@ -33,13 +33,14 @@ var/need_mob_update = FALSE switch(affected_mob.stat) if(CONSCIOUS) //bad - thou_shall_heal = death_is_coming/50 + thou_shall_heal = max(death_is_coming/20, 3) need_mob_update += affected_mob.adjustOxyLoss(2 * REM * seconds_per_tick, TRUE, required_biotype = affected_biotype, required_respiration_type = affected_respiration_type) if(SOFT_CRIT) //meh convert - thou_shall_heal = round(death_is_coming/47,0.1) + thou_shall_heal = round(death_is_coming/13,0.1) need_mob_update += affected_mob.adjustOxyLoss(1 * REM * seconds_per_tick, TRUE, required_biotype = affected_biotype, required_respiration_type = affected_respiration_type) + good_kind_of_healing = TRUE else //no convert - thou_shall_heal = round(death_is_coming/45, 0.1) + thou_shall_heal = round(death_is_coming/10, 0.1) good_kind_of_healing = TRUE need_mob_update += affected_mob.adjustBruteLoss(-thou_shall_heal * REM * seconds_per_tick, FALSE, required_bodytype = affected_bodytype) if(need_mob_update) @@ -91,6 +92,12 @@ if(helbent) affected_mob.remove_status_effect(/datum/status_effect/necropolis_curse) +/datum/reagent/medicine/c2/helbital/on_mob_end_metabolize(mob/living/affected_mob) + . = ..() + if(current_cycle >= 50) //greater than 10u in the system + affected_mob.AddComponent(/datum/component/omen, incidents_left = min(round(current_cycle/51), 3)) //no more than 3 bad incidents for dropping more than 10u + to_chat(affected_mob, span_hierophant_warning("You feel a sense of heavy dread and grave misfortune settle in as the substance leaves your body.")) + /datum/reagent/medicine/c2/libital //messes with your liber name = "Libital" description = "A bruise reliever. Does minor liver damage." @@ -124,7 +131,7 @@ /datum/reagent/medicine/c2/probital/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired) . = ..() var/need_mob_update - need_mob_update = affected_mob.adjustBruteLoss(-2.25 * REM * normalise_creation_purity() * seconds_per_tick, updating_health = FALSE, required_bodytype = affected_bodytype) + need_mob_update = affected_mob.adjustBruteLoss(-3 * REM * normalise_creation_purity() * seconds_per_tick, updating_health = FALSE, required_bodytype = affected_bodytype) var/ooo_youaregettingsleepy = 3.5 switch(round(affected_mob.getStaminaLoss())) if(10 to 40) @@ -177,7 +184,7 @@ /datum/reagent/medicine/c2/lenturi/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired) . = ..() var/need_mob_update - need_mob_update = affected_mob.adjustFireLoss(-3 * REM * normalise_creation_purity() * seconds_per_tick, required_bodytype = affected_bodytype) + need_mob_update = affected_mob.adjustFireLoss(-3.75 * REM * normalise_creation_purity() * seconds_per_tick, required_bodytype = affected_bodytype) need_mob_update += affected_mob.adjustOrganLoss(ORGAN_SLOT_STOMACH, 0.4 * REM * seconds_per_tick, required_organ_flag = affected_organ_flags) if(need_mob_update) return UPDATE_MOB_HEALTH @@ -218,9 +225,9 @@ . = ..() var/need_mob_update if(affected_mob.getFireLoss() > 50) - need_mob_update = affected_mob.adjustFireLoss(-2 * REM * seconds_per_tick * normalise_creation_purity(), updating_health = FALSE, required_bodytype = affected_bodytype) + need_mob_update = affected_mob.adjustFireLoss(-3 * REM * seconds_per_tick * normalise_creation_purity(), updating_health = FALSE, required_bodytype = affected_bodytype) else - need_mob_update = affected_mob.adjustFireLoss(-1.25 * REM * seconds_per_tick * normalise_creation_purity(), updating_health = FALSE, required_bodytype = affected_bodytype) + need_mob_update = affected_mob.adjustFireLoss(-2.25 * REM * seconds_per_tick * normalise_creation_purity(), updating_health = FALSE, required_bodytype = affected_bodytype) affected_mob.adjust_bodytemperature(rand(-25,-5) * TEMPERATURE_DAMAGE_COEFFICIENT * REM * seconds_per_tick, 50) if(ishuman(affected_mob)) var/mob/living/carbon/human/humi = affected_mob @@ -289,7 +296,7 @@ color = "#FF6464" ph = 5.6 inverse_chem = /datum/reagent/inverse/healing/tirimol - inverse_chem_val = 0.4 + inverse_chem_val = 0.25 chemical_flags = REAGENT_CAN_BE_SYNTHESIZED /// A cooldown for spacing bursts of stamina damage @@ -298,7 +305,7 @@ /datum/reagent/medicine/c2/tirimol/on_mob_life(mob/living/carbon/human/affected_mob, seconds_per_tick, times_fired) . = ..() var/need_mob_update - need_mob_update = affected_mob.adjustOxyLoss(-3 * REM * seconds_per_tick * normalise_creation_purity(), updating_health = FALSE, required_biotype = affected_biotype, required_respiration_type = affected_respiration_type) + need_mob_update = affected_mob.adjustOxyLoss(-4.5 * REM * seconds_per_tick * normalise_creation_purity(), updating_health = FALSE, required_biotype = affected_biotype, required_respiration_type = affected_respiration_type) need_mob_update += affected_mob.adjustStaminaLoss(2 * REM * seconds_per_tick, updating_stamina = FALSE, required_biotype = affected_biotype) if(drowsycd && COOLDOWN_FINISHED(src, drowsycd)) affected_mob.adjust_drowsiness(20 SECONDS) @@ -386,6 +393,8 @@ if(the_reagent2 == src) continue var/amount2purge = 3 + if(holder.has_reagent(/datum/reagent/toxin/anacea)) + amount2purge = 0 if(medibonus >= 3 && istype(the_reagent2, /datum/reagent/medicine)) //3 unique meds (2+multiver) | (1 + pure multiver) will make it not purge medicines continue affected_mob.reagents.remove_reagent(the_reagent2.type, amount2purge * REM * seconds_per_tick) @@ -413,8 +422,8 @@ if(!(methods & INJECT) || !iscarbon(A)) return var/mob/living/carbon/C = A - if(trans_volume >= 0.6) //prevents cheesing with ultralow doses. - C.adjustToxLoss((-1.5 * min(2, trans_volume) * REM) * normalise_creation_purity(), required_biotype = affected_biotype) //This is to promote iv pole use for that chemotherapy feel. + if(trans_volume >= 0.4) //prevents cheesing with ultralow doses. + C.adjustToxLoss((-3 * min(2, trans_volume) * REM) * normalise_creation_purity(), required_biotype = affected_biotype) //This is to promote iv pole use for that chemotherapy feel. var/obj/item/organ/internal/liver/L = C.organs_slot[ORGAN_SLOT_LIVER] if(!L || L.organ_flags & ORGAN_FAILING) return @@ -427,7 +436,7 @@ . = ..() var/need_mob_update need_mob_update = affected_mob.adjustOrganLoss(ORGAN_SLOT_LIVER, 0.8 * REM * seconds_per_tick, required_organ_flag = affected_organ_flags) - need_mob_update += affected_mob.adjustToxLoss(-1 * REM * seconds_per_tick, updating_health = FALSE, required_biotype = affected_biotype) + need_mob_update += affected_mob.adjustToxLoss(-2 * REM * seconds_per_tick, updating_health = FALSE, required_biotype = affected_biotype) for(var/datum/reagent/R in affected_mob.reagents.reagent_list) if(issyrinormusc(R)) continue @@ -458,7 +467,7 @@ . = ..() var/need_mob_update need_mob_update = affected_mob.adjustOrganLoss(ORGAN_SLOT_LIVER, 0.1 * REM * seconds_per_tick, required_organ_flag = affected_organ_flags) - need_mob_update += affected_mob.adjustToxLoss(-1 * REM * seconds_per_tick * normalise_creation_purity(), updating_health = FALSE, required_biotype = affected_biotype) + need_mob_update += affected_mob.adjustToxLoss(-1.5 * REM * seconds_per_tick * normalise_creation_purity(), updating_health = FALSE, required_biotype = affected_biotype) for(var/datum/reagent/R in affected_mob.reagents.reagent_list) if(issyrinormusc(R)) continue diff --git a/code/modules/reagents/chemistry/reagents/drinks/alcohol_reagents.dm b/code/modules/reagents/chemistry/reagents/drinks/alcohol_reagents.dm index 3fd769ddba9bb..e50775c2487e6 100644 --- a/code/modules/reagents/chemistry/reagents/drinks/alcohol_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/drinks/alcohol_reagents.dm @@ -1610,7 +1610,7 @@ if(liver && HAS_TRAIT(liver, TRAIT_LAW_ENFORCEMENT_METABOLISM)) var/need_mob_update need_mob_update = drinker.heal_bodypart_damage(2 * REM * seconds_per_tick, 2 * REM * seconds_per_tick, updating_health = FALSE, required_bodytype = affected_bodytype) - need_mob_update += drinker.adjustStaminaLoss(-2 * REM * seconds_per_tick, updating_stamina = FALSE, required_biotype = affected_biotype) + need_mob_update += drinker.adjustStaminaLoss(-5 * REM * seconds_per_tick, updating_stamina = FALSE, required_biotype = affected_biotype) if(need_mob_update) return UPDATE_MOB_HEALTH @@ -1655,7 +1655,8 @@ need_mob_update += drinker.adjustFireLoss(-heal_amt, updating_health = FALSE, required_bodytype = affected_bodytype) need_mob_update += drinker.adjustToxLoss(-heal_amt, updating_health = FALSE, required_biotype = affected_biotype) need_mob_update += drinker.adjustOxyLoss(-heal_amt, updating_health = FALSE, required_biotype = affected_biotype, required_respiration_type = affected_respiration_type) - need_mob_update += drinker.adjustStaminaLoss(-heal_amt, updating_stamina = FALSE, required_biotype = affected_biotype) + // heal stamina loss on first metabolization, but only to a max of 20 + need_mob_update += drinker.adjustStaminaLoss(max(-heal_amt * 5, -20), updating_stamina = FALSE, required_biotype = affected_biotype) if(need_mob_update) drinker.updatehealth() drinker.visible_message(span_warning("[drinker] shivers with renewed vigor!"), span_notice("One taste of [LOWER_TEXT(name)] fills you with energy!")) @@ -2080,7 +2081,7 @@ need_mob_update = drinker.heal_bodypart_damage(1 * REM * seconds_per_tick, 1 * REM * seconds_per_tick, updating_health = FALSE) need_mob_update += drinker.adjustOxyLoss(-1 * REM * seconds_per_tick, updating_health = FALSE, required_biotype = affected_biotype, required_respiration_type = affected_respiration_type) need_mob_update += drinker.adjustToxLoss(-1 * REM * seconds_per_tick, updating_health = FALSE, required_biotype = affected_biotype) - need_mob_update += drinker.adjustStaminaLoss(-1 * REM * seconds_per_tick, updating_stamina = FALSE, required_biotype = affected_biotype) + need_mob_update += drinker.adjustStaminaLoss(-5 * REM * seconds_per_tick, updating_stamina = FALSE, required_biotype = affected_biotype) if(need_mob_update) return UPDATE_MOB_HEALTH @@ -2137,7 +2138,7 @@ . = ..() if(SPT_PROB(2, seconds_per_tick)) to_chat(drinker, span_notice("[pick("You feel disregard for the rule of law.", "You feel pumped!", "Your head is pounding.", "Your thoughts are racing..")]")) - if(drinker.adjustStaminaLoss(-0.25 * drinker.get_drunk_amount() * REM * seconds_per_tick, updating_stamina = FALSE, required_biotype = affected_biotype)) + if(drinker.adjustStaminaLoss(-0.5 * drinker.get_drunk_amount() * REM * seconds_per_tick, updating_stamina = FALSE, required_biotype = affected_biotype)) return UPDATE_MOB_HEALTH /datum/reagent/consumable/ethanol/old_timer diff --git a/code/modules/reagents/chemistry/reagents/drinks/drink_reagents.dm b/code/modules/reagents/chemistry/reagents/drinks/drink_reagents.dm index f753f2f1c325c..d3070474558d7 100644 --- a/code/modules/reagents/chemistry/reagents/drinks/drink_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/drinks/drink_reagents.dm @@ -358,34 +358,42 @@ description = "Coffee and ice, refreshing and cool." color = "#102838" // rgb: 16, 40, 56 nutriment_factor = 0 + overdose_threshold = 80 taste_description = "bitter coldness" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED metabolized_traits = list(TRAIT_STIMULATED) +/datum/reagent/consumable/icecoffee/overdose_process(mob/living/affected_mob, seconds_per_tick, times_fired) + . = ..() + affected_mob.set_jitter_if_lower(10 SECONDS * REM * seconds_per_tick) + /datum/reagent/consumable/icecoffee/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired) . = ..() affected_mob.adjust_dizzy(-10 SECONDS * REM * seconds_per_tick) affected_mob.adjust_drowsiness(-6 SECONDS * REM * seconds_per_tick) affected_mob.AdjustSleeping(-40 * REM * seconds_per_tick) affected_mob.adjust_bodytemperature(-5 * REM * TEMPERATURE_DAMAGE_COEFFICIENT * seconds_per_tick, affected_mob.get_body_temp_normal()) - affected_mob.set_jitter_if_lower(10 SECONDS * REM * seconds_per_tick) /datum/reagent/consumable/hot_ice_coffee name = "Hot Ice Coffee" description = "Coffee with pulsing ice shards" color = "#102838" // rgb: 16, 40, 56 nutriment_factor = 0 + overdose_threshold = 80 taste_description = "bitter coldness and a hint of smoke" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED metabolized_traits = list(TRAIT_STIMULATED) +/datum/reagent/consumable/hot_ice_coffee/overdose_process(mob/living/affected_mob, seconds_per_tick, times_fired) + . = ..() + affected_mob.set_jitter_if_lower(10 SECONDS * REM * seconds_per_tick) + /datum/reagent/consumable/hot_ice_coffee/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired) . = ..() affected_mob.adjust_dizzy(-10 SECONDS * REM * seconds_per_tick) affected_mob.adjust_drowsiness(-6 SECONDS * REM * seconds_per_tick) affected_mob.AdjustSleeping(-60 * REM * seconds_per_tick) affected_mob.adjust_bodytemperature(-7 * REM * TEMPERATURE_DAMAGE_COEFFICIENT * seconds_per_tick, affected_mob.get_body_temp_normal()) - affected_mob.set_jitter_if_lower(10 SECONDS * REM * seconds_per_tick) if(affected_mob.adjustToxLoss(1 * REM * seconds_per_tick, updating_health = FALSE, required_biotype = affected_biotype)) return UPDATE_MOB_HEALTH @@ -701,12 +709,17 @@ name = "Soy Latte" description = "A nice and tasty beverage while you are reading your hippie books." color = "#cc6404" // rgb: 204,100,4 + overdose_threshold = 80 quality = DRINK_NICE taste_description = "creamy coffee" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED glass_price = DRINK_PRICE_EASY metabolized_traits = list(TRAIT_STIMULATED) +/datum/reagent/consumable/soy_latte/overdose_process(mob/living/affected_mob, seconds_per_tick, times_fired) + . = ..() + affected_mob.set_jitter_if_lower(10 SECONDS * REM * seconds_per_tick) + /datum/reagent/consumable/soy_latte/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired) . = ..() affected_mob.adjust_dizzy(-10 SECONDS * REM * seconds_per_tick) @@ -714,7 +727,6 @@ var/need_mob_update need_mob_update = affected_mob.SetSleeping(0) affected_mob.adjust_bodytemperature(5 * REM * TEMPERATURE_DAMAGE_COEFFICIENT * seconds_per_tick, 0, affected_mob.get_body_temp_normal()) - affected_mob.set_jitter_if_lower(10 SECONDS * REM * seconds_per_tick) if(affected_mob.getBruteLoss() && SPT_PROB(10, seconds_per_tick)) need_mob_update += affected_mob.heal_bodypart_damage(brute = 1 * REM * seconds_per_tick, burn = 0, updating_health = FALSE) if(need_mob_update) @@ -724,12 +736,17 @@ name = "Cafe Latte" description = "A nice, strong and tasty beverage while you are reading." color = "#cc6404" // rgb: 204,100,4 + overdose_threshold = 80 quality = DRINK_NICE taste_description = "bitter cream" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED glass_price = DRINK_PRICE_EASY metabolized_traits = list(TRAIT_STIMULATED) +/datum/reagent/consumable/cafe_latte/overdose_process(mob/living/affected_mob, seconds_per_tick, times_fired) + . = ..() + affected_mob.set_jitter_if_lower(10 SECONDS * REM * seconds_per_tick) + /datum/reagent/consumable/cafe_latte/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired) . = ..() affected_mob.adjust_dizzy(-10 SECONDS * REM * seconds_per_tick) @@ -737,7 +754,6 @@ var/need_mob_update need_mob_update = affected_mob.SetSleeping(0) affected_mob.adjust_bodytemperature(5 * REM * TEMPERATURE_DAMAGE_COEFFICIENT * seconds_per_tick, 0, affected_mob.get_body_temp_normal()) - affected_mob.set_jitter_if_lower(10 SECONDS * REM * seconds_per_tick) if(affected_mob.getBruteLoss() && SPT_PROB(10, seconds_per_tick)) need_mob_update += affected_mob.heal_bodypart_damage(brute = 1 * REM * seconds_per_tick, burn = 0, updating_health = FALSE) if(need_mob_update) @@ -851,12 +867,29 @@ name = "Pumpkin Latte" description = "A mix of pumpkin juice and coffee." color = "#F4A460" + overdose_threshold = 80 quality = DRINK_VERYGOOD nutriment_factor = 3 taste_description = "creamy pumpkin" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED metabolized_traits = list(TRAIT_STIMULATED) +/datum/reagent/consumable/pumpkin_latte/overdose_process(mob/living/affected_mob, seconds_per_tick, times_fired) + . = ..() + affected_mob.set_jitter_if_lower(10 SECONDS * REM * seconds_per_tick) + +/datum/reagent/consumable/pumpkin_latte/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired) + . = ..() + affected_mob.adjust_dizzy(-10 SECONDS * REM * seconds_per_tick) + affected_mob.adjust_drowsiness(-6 SECONDS * REM * seconds_per_tick) + var/need_mob_update + need_mob_update = affected_mob.SetSleeping(0) + affected_mob.adjust_bodytemperature(5 * REM * TEMPERATURE_DAMAGE_COEFFICIENT * seconds_per_tick, 0, affected_mob.get_body_temp_normal()) + if(affected_mob.getBruteLoss() && SPT_PROB(10, seconds_per_tick)) + need_mob_update += affected_mob.heal_bodypart_damage(brute = 1 * REM * seconds_per_tick, burn = 0, updating_health = FALSE) + if(need_mob_update) + return UPDATE_MOB_HEALTH + /datum/reagent/consumable/gibbfloats name = "Gibb Floats" description = "Ice cream on top of a Dr. Gibb glass." @@ -1033,7 +1066,7 @@ affected_mob.update_transform(newsize/current_size) current_size = newsize if(SPT_PROB(23, seconds_per_tick)) - affected_mob.emote("sneeze") + affected_mob.sneeze() /datum/reagent/consumable/red_queen/on_mob_end_metabolize(mob/living/affected_mob) . = ..() diff --git a/code/modules/reagents/chemistry/reagents/drinks/glass_styles/alcohol.dm b/code/modules/reagents/chemistry/reagents/drinks/glass_styles/alcohol.dm index bb9e5869ca804..5811f49da8f21 100644 --- a/code/modules/reagents/chemistry/reagents/drinks/glass_styles/alcohol.dm +++ b/code/modules/reagents/chemistry/reagents/drinks/glass_styles/alcohol.dm @@ -107,8 +107,8 @@ desc = "It's as strong as it smells." icon_state = "absinthe" -/datum/glass_style/drinking_glass/hooch - required_drink_type = /datum/reagent/consumable/ethanol/hooch +/datum/glass_style/drinking_glass/ale + required_drink_type = /datum/reagent/consumable/ethanol/ale name = "glass of ale" desc = "A freezing pint of delicious Ale." icon_state = "aleglass" diff --git a/code/modules/reagents/chemistry/reagents/drug_reagents.dm b/code/modules/reagents/chemistry/reagents/drug_reagents.dm index cb05757bdc548..c6cee8e91c062 100644 --- a/code/modules/reagents/chemistry/reagents/drug_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/drug_reagents.dm @@ -177,7 +177,7 @@ affected_mob.add_mood_event("tweaking", /datum/mood_event/stimulant_medium) affected_mob.AdjustAllImmobility(-40 * REM * seconds_per_tick) var/need_mob_update - need_mob_update = affected_mob.adjustStaminaLoss(-2 * REM * seconds_per_tick, updating_stamina = FALSE, required_biotype = affected_biotype) + need_mob_update = affected_mob.adjustStaminaLoss(-5 * REM * seconds_per_tick, updating_stamina = FALSE, required_biotype = affected_biotype) affected_mob.set_jitter_if_lower(4 SECONDS * REM * seconds_per_tick) need_mob_update += affected_mob.adjustOrganLoss(ORGAN_SLOT_BRAIN, rand(1, 4) * REM * seconds_per_tick, required_organ_flag = affected_organ_flags) if(need_mob_update) @@ -233,7 +233,7 @@ to_chat(affected_mob, span_notice("[high_message]")) affected_mob.add_mood_event("salted", /datum/mood_event/stimulant_heavy) var/need_mob_update - need_mob_update = affected_mob.adjustStaminaLoss(-5 * REM * seconds_per_tick, updating_stamina = FALSE, required_biotype = affected_biotype) + need_mob_update = affected_mob.adjustStaminaLoss(-6 * REM * seconds_per_tick, updating_stamina = FALSE, required_biotype = affected_biotype) need_mob_update += affected_mob.adjustOrganLoss(ORGAN_SLOT_BRAIN, 4 * REM * seconds_per_tick, required_organ_flag = affected_organ_flags) affected_mob.adjust_hallucinations(10 SECONDS * REM * seconds_per_tick) if(need_mob_update) @@ -503,18 +503,29 @@ var/atom/movable/plane_master_controller/game_plane_master_controller = psychonaut.hud_used.plane_master_controllers[PLANE_MASTERS_GAME] + // Info for non-matrix plebs like me! + + // This doesn't change the RGB matrixes directly at all. Instead, it shifts all the colors' Hue by 33%, + // Shifting them up the color wheel, turning R to G, G to B, B to R, making a psychedelic effect. + // The second moves them two colors up instead, turning R to B, G to R, B to G. + // The third does a full spin, or resets it back to normal. + // Imagine a triangle on the color wheel with the points located at the color peaks, rotating by 90 degrees each time. + // The value with decimals is the Hue. The rest are Saturation, Luminosity, and Alpha, though they're unused here. + + // The filters were initially named _green, _blue, _red, despite every filter changing all the colors. It caused me a 2-years-long headache. + var/list/col_filter_identity = list(1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1, 0.000,0,0,0) - var/list/col_filter_green = list(1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1, 0.333,0,0,0) - var/list/col_filter_blue = list(1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1, 0.666,0,0,0) - var/list/col_filter_red = list(1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1, 1.000,0,0,0) //visually this is identical to the identity + var/list/col_filter_shift_once = list(1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1, 0.333,0,0,0) + var/list/col_filter_shift_twice = list(1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1, 0.666,0,0,0) + var/list/col_filter_reset = list(1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1, 1.000,0,0,0) //visually this is identical to the identity - game_plane_master_controller.add_filter("rainbow", 10, color_matrix_filter(col_filter_red, FILTER_COLOR_HSL)) + game_plane_master_controller.add_filter("rainbow", 10, color_matrix_filter(col_filter_reset, FILTER_COLOR_HSL)) for(var/filter in game_plane_master_controller.get_filters("rainbow")) animate(filter, color = col_filter_identity, time = 0 SECONDS, loop = -1, flags = ANIMATION_PARALLEL) - animate(color = col_filter_green, time = 4 SECONDS) - animate(color = col_filter_blue, time = 4 SECONDS) - animate(color = col_filter_red, time = 4 SECONDS) + animate(color = col_filter_shift_once, time = 4 SECONDS) + animate(color = col_filter_shift_twice, time = 4 SECONDS) + animate(color = col_filter_reset, time = 4 SECONDS) game_plane_master_controller.add_filter("psilocybin_wave", 1, list("type" = "wave", "size" = 2, "x" = 32, "y" = 32)) @@ -568,18 +579,18 @@ var/atom/movable/plane_master_controller/game_plane_master_controller = dancer.hud_used.plane_master_controllers[PLANE_MASTERS_GAME] - var/list/col_filter_blue = list(0,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1, 0.764,0,0,0) //most blue color + var/list/col_filter_shift_twice = list(0,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1, 0.764,0,0,0) //most blue color var/list/col_filter_mid = list(0,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1, 0.832,0,0,0) //red/blue mix midpoint - var/list/col_filter_red = list(0,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1, 0.900,0,0,0) //most red color + var/list/col_filter_reset = list(0,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1, 0.900,0,0,0) //most red color game_plane_master_controller.add_filter("blastoff_filter", 10, color_matrix_filter(col_filter_mid, FILTER_COLOR_HCY)) game_plane_master_controller.add_filter("blastoff_wave", 1, list("type" = "wave", "x" = 32, "y" = 32)) for(var/filter in game_plane_master_controller.get_filters("blastoff_filter")) - animate(filter, color = col_filter_blue, time = 3 SECONDS, loop = -1, flags = ANIMATION_PARALLEL) + animate(filter, color = col_filter_shift_twice, time = 3 SECONDS, loop = -1, flags = ANIMATION_PARALLEL) animate(color = col_filter_mid, time = 3 SECONDS) - animate(color = col_filter_red, time = 3 SECONDS) + animate(color = col_filter_reset, time = 3 SECONDS) animate(color = col_filter_mid, time = 3 SECONDS) for(var/filter in game_plane_master_controller.get_filters("blastoff_wave")) @@ -811,7 +822,7 @@ if(!iscarbon(kronkaine_receptacle)) return var/mob/living/carbon/druggo = kronkaine_receptacle - if(druggo.adjustStaminaLoss(-4 * trans_volume, updating_stamina = FALSE)) + if(druggo.adjustStaminaLoss(-6 * trans_volume, updating_stamina = FALSE)) return UPDATE_MOB_HEALTH //I wish i could give it some kind of bonus when smoked, but we don't have an INHALE method. diff --git a/code/modules/reagents/chemistry/reagents/impure_reagents.dm b/code/modules/reagents/chemistry/reagents/impure_reagents.dm index 59baceab5579f..20cd80d9c5b0e 100644 --- a/code/modules/reagents/chemistry/reagents/impure_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/impure_reagents.dm @@ -104,6 +104,9 @@ /datum/reagent/inverse/cryostylane/on_mob_add(mob/living/carbon/affected_mob, amount) . = ..() + if(HAS_TRAIT(affected_mob, TRAIT_RESISTCOLD)) + holder.remove_reagent(type, volume) + return cube = new /obj/structure/ice_stasis(get_turf(affected_mob)) cube.color = COLOR_CYAN cube.set_anchored(TRUE) diff --git a/code/modules/reagents/chemistry/reagents/impure_reagents/impure_medicine_reagents.dm b/code/modules/reagents/chemistry/reagents/impure_reagents/impure_medicine_reagents.dm index 3c677e43d1c07..3ae946d4fab46 100644 --- a/code/modules/reagents/chemistry/reagents/impure_reagents/impure_medicine_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/impure_reagents/impure_medicine_reagents.dm @@ -100,18 +100,7 @@ Basically, we fill the time between now and 2s from now with hands based off the /datum/reagent/inverse/helgrasp/proc/spawn_hands(mob/living/carbon/affected_mob) if(!affected_mob && iscarbon(holder.my_atom))//Catch timer affected_mob = holder.my_atom - //Adapted from the end of the curse - but lasts a short time - var/grab_dir = turn(affected_mob.dir, pick(-90, 90, 180, 180)) //grab them from a random direction other than the one faced, favoring grabbing from behind - var/turf/spawn_turf = get_ranged_target_turf(affected_mob, grab_dir, 8)//Larger range so you have more time to dodge - if(!spawn_turf) - return - new/obj/effect/temp_visual/dir_setting/curse/grasp_portal(spawn_turf, affected_mob.dir) - playsound(spawn_turf, 'sound/effects/curse2.ogg', 80, TRUE, -1) - var/obj/projectile/curse_hand/hel/hand = new (spawn_turf) - hand.preparePixelProjectile(affected_mob, spawn_turf) - if(QDELETED(hand)) //safety check if above fails - above has a stack trace if it does fail - return - hand.fire() + fire_curse_hand(affected_mob) //At the end, we clear up any loose hanging timers just in case and spawn any remaining lag_remaining hands all at once. /datum/reagent/inverse/helgrasp/on_mob_delete(mob/living/affected_mob) diff --git a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm index d4f26367a5a54..505647fe332aa 100644 --- a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm @@ -602,7 +602,7 @@ affected_mob.set_jitter_if_lower(20 SECONDS) affected_mob.AdjustAllImmobility(-20 * REM * seconds_per_tick * normalise_creation_purity()) - affected_mob.adjustStaminaLoss(-1 * REM * seconds_per_tick * normalise_creation_purity(), updating_stamina = FALSE) + affected_mob.adjustStaminaLoss(-4 * REM * seconds_per_tick * normalise_creation_purity(), updating_stamina = FALSE) return UPDATE_MOB_HEALTH @@ -683,7 +683,8 @@ description = "Quickly restores eye damage, cures nearsightedness, and has a chance to restore vision to the blind." reagent_state = LIQUID color = "#404040" //oculine is dark grey, inacusiate is light grey - metabolization_rate = 0.25 * REAGENTS_METABOLISM + metabolization_rate = 1 * REAGENTS_METABOLISM + overdose_threshold = 30 taste_description = "earthy bitterness" purity = REAGENT_STANDARD_PURITY ph = 10 @@ -703,6 +704,7 @@ return improve_eyesight(affected_mob, eyes) + /datum/reagent/medicine/oculine/proc/improve_eyesight(mob/living/carbon/affected_mob, obj/item/organ/internal/eyes/eyes) delta_light = creation_purity*10 eyes.lighting_cutoff += delta_light @@ -753,6 +755,11 @@ return restore_eyesight(affected_mob, eyes) +/datum/reagent/medicine/oculine/overdose_process(mob/living/affected_mob, seconds_per_tick, times_fired) + . = ..() + if(affected_mob.adjustOrganLoss(ORGAN_SLOT_EYES, 1.5 * REM * seconds_per_tick, required_organ_flag = affected_organ_flags)) + . = UPDATE_MOB_HEALTH + /datum/reagent/medicine/inacusiate name = "Inacusiate" description = "Rapidly repairs damage to the patient's ears to cure deafness, assuming the source of said deafness isn't from genetic mutations, chronic deafness, or a total defecit of ears." //by "chronic" deafness, we mean people with the "deaf" quirk @@ -861,7 +868,7 @@ if(affected_mob.losebreath < 0) affected_mob.losebreath = 0 need_mob_update = TRUE - need_mob_update += affected_mob.adjustStaminaLoss(-0.5 * REM * seconds_per_tick, updating_stamina = FALSE) + need_mob_update += affected_mob.adjustStaminaLoss(-2 * REM * seconds_per_tick, updating_stamina = FALSE) if(SPT_PROB(10, seconds_per_tick)) affected_mob.AdjustAllImmobility(-20) need_mob_update = TRUE @@ -1079,6 +1086,18 @@ ph = 2 chemical_flags = REAGENT_CAN_BE_SYNTHESIZED +/datum/reagent/medicine/mutadone/on_mob_metabolize(mob/living/affected_mob) + . = ..() + if (!ishuman(affected_mob)) + return + var/mob/living/carbon/human/human_mob = affected_mob + if (ismonkey(human_mob)) + if (!HAS_TRAIT(human_mob, TRAIT_BORN_MONKEY)) + human_mob.dna.remove_mutation(/datum/mutation/human/race) + else if (HAS_TRAIT(human_mob, TRAIT_BORN_MONKEY)) + human_mob.monkeyize() + + /datum/reagent/medicine/mutadone/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired) . = ..() affected_mob.remove_status_effect(/datum/status_effect/jitter) @@ -1108,7 +1127,7 @@ . = ..() for(var/effect in status_effects_to_clear) affected_mob.remove_status_effect(effect) - affected_mob.reagents.remove_reagent(/datum/reagent/consumable/ethanol, 3 * REM * seconds_per_tick * normalise_creation_purity(), include_subtypes = TRUE) + affected_mob.reagents.remove_reagent(/datum/reagent/consumable/ethanol, 8 * REM * seconds_per_tick * normalise_creation_purity(), include_subtypes = TRUE) if(affected_mob.adjustToxLoss(-0.2 * REM * seconds_per_tick, updating_health = FALSE, required_biotype = affected_biotype)) . = UPDATE_MOB_HEALTH affected_mob.adjust_drunk_effect(-10 * REM * seconds_per_tick * normalise_creation_purity()) @@ -1151,7 +1170,7 @@ if(need_mob_update) . = UPDATE_MOB_HEALTH affected_mob.AdjustAllImmobility(-60 * REM * seconds_per_tick) - affected_mob.adjustStaminaLoss(-5 * REM * seconds_per_tick, updating_stamina = FALSE, required_biotype = affected_biotype) + affected_mob.adjustStaminaLoss(-12 * REM * seconds_per_tick, updating_stamina = FALSE, required_biotype = affected_biotype) /datum/reagent/medicine/stimulants/overdose_process(mob/living/affected_mob, seconds_per_tick, times_fired) . = ..() @@ -1265,14 +1284,14 @@ need_mob_update += affected_mob.adjustFireLoss(-1 * REM * seconds_per_tick, updating_health = FALSE, required_bodytype = affected_bodytype) need_mob_update += affected_mob.adjustOxyLoss(-0.5 * REM * seconds_per_tick, updating_health = FALSE, required_biotype = affected_biotype, required_respiration_type = affected_respiration_type) need_mob_update += affected_mob.adjustToxLoss(-0.5 * REM * seconds_per_tick, updating_health = FALSE, required_biotype = affected_biotype) - need_mob_update += affected_mob.adjustStaminaLoss(-0.5 * REM * seconds_per_tick, updating_stamina = FALSE, required_biotype = affected_biotype) + need_mob_update += affected_mob.adjustStaminaLoss(-2 * REM * seconds_per_tick, updating_stamina = FALSE, required_biotype = affected_biotype) need_mob_update += affected_mob.adjustOrganLoss(ORGAN_SLOT_BRAIN, 1 * REM * seconds_per_tick, 150, affected_organ_flags) //This does, after all, come from ambrosia, and the most powerful ambrosia in existence, at that! else need_mob_update = affected_mob.adjustBruteLoss(-5 * REM * seconds_per_tick, updating_health = FALSE, required_bodytype = affected_bodytype) //slow to start, but very quick healing once it gets going need_mob_update += affected_mob.adjustFireLoss(-5 * REM * seconds_per_tick, updating_health = FALSE, required_bodytype = affected_bodytype) need_mob_update += affected_mob.adjustOxyLoss(-3 * REM * seconds_per_tick, updating_health = FALSE, required_biotype = affected_biotype, required_respiration_type = affected_respiration_type) need_mob_update += affected_mob.adjustToxLoss(-3 * REM * seconds_per_tick, updating_health = FALSE, required_biotype = affected_biotype) - need_mob_update += affected_mob.adjustStaminaLoss(-3 * REM * seconds_per_tick, updating_stamina = FALSE, required_biotype = affected_biotype) + need_mob_update += affected_mob.adjustStaminaLoss(-8 * REM * seconds_per_tick, updating_stamina = FALSE, required_biotype = affected_biotype) need_mob_update += affected_mob.adjustOrganLoss(ORGAN_SLOT_BRAIN, 2 * REM * seconds_per_tick, 150, affected_organ_flags) affected_mob.adjust_jitter_up_to(6 SECONDS * REM * seconds_per_tick, 1 MINUTES) if(SPT_PROB(5, seconds_per_tick)) @@ -1351,7 +1370,7 @@ /datum/reagent/medicine/changelingadrenaline/on_mob_life(mob/living/carbon/metabolizer, seconds_per_tick, times_fired) . = ..() metabolizer.AdjustAllImmobility(-20 * REM * seconds_per_tick) - if(metabolizer.adjustStaminaLoss(-10 * REM * seconds_per_tick, updating_stamina = FALSE)) + if(metabolizer.adjustStaminaLoss(-30 * REM * seconds_per_tick, updating_stamina = FALSE)) . = UPDATE_MOB_HEALTH metabolizer.set_jitter_if_lower(20 SECONDS * REM * seconds_per_tick) metabolizer.set_dizzy_if_lower(20 SECONDS * REM * seconds_per_tick) @@ -1360,6 +1379,7 @@ . = ..() affected_mob.add_traits(list(TRAIT_SLEEPIMMUNE, TRAIT_BATON_RESISTANCE), type) affected_mob.add_movespeed_mod_immunities(type, /datum/movespeed_modifier/damage_slowdown) + RegisterSignal(affected_mob, COMSIG_CARBON_ENTER_STAMCRIT, PROC_REF(on_stamcrit)) /datum/reagent/medicine/changelingadrenaline/on_mob_end_metabolize(mob/living/affected_mob) . = ..() @@ -1367,6 +1387,14 @@ affected_mob.remove_movespeed_mod_immunities(type, /datum/movespeed_modifier/damage_slowdown) affected_mob.remove_status_effect(/datum/status_effect/dizziness) affected_mob.remove_status_effect(/datum/status_effect/jitter) + UnregisterSignal(affected_mob, COMSIG_CARBON_ENTER_STAMCRIT) + +/datum/reagent/medicine/changelingadrenaline/proc/on_stamcrit(mob/living/affected_mob) + SIGNAL_HANDLER + affected_mob?.setStaminaLoss(90, updating_stamina = TRUE) + to_chat(affected_mob, span_changeling("Our gene-stim flares! We are invigorated, but its potency wanes.")) + volume -= (min(volume, 1)) + return STAMCRIT_CANCELLED /datum/reagent/medicine/changelingadrenaline/overdose_process(mob/living/metabolizer, seconds_per_tick, times_fired) . = ..() @@ -1449,7 +1477,7 @@ return overdose_threshold = overdose_threshold + ((rand(-10, 10) / 10) * REM * seconds_per_tick) // for extra fun metabolizer.AdjustAllImmobility(-5 * REM * seconds_per_tick) - metabolizer.adjustStaminaLoss(-0.5 * REM * seconds_per_tick, updating_stamina = FALSE, required_biotype = affected_biotype) + metabolizer.adjustStaminaLoss(-3 * REM * seconds_per_tick, updating_stamina = FALSE, required_biotype = affected_biotype) metabolizer.set_jitter_if_lower(1 SECONDS * REM * seconds_per_tick) metabolization_rate = 0.005 * REAGENTS_METABOLISM * rand(5, 20) // randomizes metabolism between 0.02 and 0.08 per second return UPDATE_MOB_HEALTH @@ -1540,7 +1568,7 @@ /datum/reagent/medicine/metafactor/overdose_process(mob/living/carbon/affected_mob, seconds_per_tick, times_fired) . = ..() if(SPT_PROB(13, seconds_per_tick)) - affected_mob.vomit(VOMIT_CATEGORY_DEFAULT) + affected_mob.vomit(VOMIT_CATEGORY_KNOCKDOWN) /datum/reagent/medicine/silibinin name = "Silibinin" diff --git a/code/modules/reagents/chemistry/reagents/other_reagents.dm b/code/modules/reagents/chemistry/reagents/other_reagents.dm index 991cd5d3098bd..29822e3158bec 100644 --- a/code/modules/reagents/chemistry/reagents/other_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/other_reagents.dm @@ -127,6 +127,16 @@ if(data["blood_DNA"]) bloodsplatter.add_blood_DNA(list(data["blood_DNA"] = data["blood_type"])) +/datum/reagent/blood/get_taste_description(mob/living/taster) + if(isnull(taster)) + return ..() + if(!HAS_TRAIT(taster, TRAIT_DETECTIVES_TASTE)) + return ..() + var/blood_type = data?["blood_type"] + if(!blood_type) + return ..() + return list("[blood_type] type blood" = 1) + /datum/reagent/consumable/liquidgibs name = "Liquid Gibs" color = "#CC4633" @@ -871,7 +881,7 @@ return to_chat(affected_mob, span_warning("You grit your teeth in pain as your body rapidly mutates!")) affected_mob.visible_message("[affected_mob] suddenly transforms!") - randomize_human(affected_mob) + randomize_human_normie(affected_mob) /datum/reagent/aslimetoxin name = "Advanced Mutation Toxin" @@ -2201,10 +2211,10 @@ var/mob/living/carbon/human/exposed_human = exposed_mob if(!HAS_TRAIT(exposed_human, TRAIT_SHAVED)) - var/datum/sprite_accessory/facial_hair/picked_beard = pick(GLOB.facial_hairstyles_list) + var/datum/sprite_accessory/facial_hair/picked_beard = pick(SSaccessories.facial_hairstyles_list) exposed_human.set_facial_hairstyle(picked_beard, update = FALSE) if(!HAS_TRAIT(exposed_human, TRAIT_BALD)) - var/datum/sprite_accessory/hair/picked_hair = pick(GLOB.hairstyles_list) + var/datum/sprite_accessory/hair/picked_hair = pick(SSaccessories.hairstyles_list) exposed_human.set_hairstyle(picked_hair, update = TRUE) to_chat(exposed_human, span_notice("Hair starts sprouting from your [HAS_TRAIT(exposed_human, TRAIT_BALD) ? "face" : "scalp"].")) @@ -2780,7 +2790,7 @@ var/obj/item/bodypart/wounded_part = W.limb if(wounded_part) wounded_part.heal_damage(0.25 * REM * seconds_per_tick, 0.25 * REM * seconds_per_tick) - if(affected_mob.adjustStaminaLoss(-0.25 * REM * seconds_per_tick, updating_stamina = FALSE)) // the more wounds, the more stamina regen + if(affected_mob.adjustStaminaLoss(-1 * REM * seconds_per_tick, updating_stamina = FALSE)) // the more wounds, the more stamina regen return UPDATE_MOB_HEALTH // unholy water, but for heretics. @@ -2964,7 +2974,7 @@ . = ..() var/need_mob_update need_mob_update = kronkus_enjoyer.adjustOrganLoss(ORGAN_SLOT_HEART, 0.1) - need_mob_update += kronkus_enjoyer.adjustStaminaLoss(-2, updating_stamina = FALSE) + need_mob_update += kronkus_enjoyer.adjustStaminaLoss(-6, updating_stamina = FALSE) if(need_mob_update) return UPDATE_MOB_HEALTH diff --git a/code/modules/reagents/chemistry/reagents/pyrotechnic_reagents.dm b/code/modules/reagents/chemistry/reagents/pyrotechnic_reagents.dm index 4c68da0b7de5d..a804a106f7353 100644 --- a/code/modules/reagents/chemistry/reagents/pyrotechnic_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/pyrotechnic_reagents.dm @@ -336,7 +336,7 @@ if(!isjellyperson(affected_mob)) //everyone but jellypeople get shocked as normal. return ..() affected_mob.AdjustAllImmobility(-40 *REM * seconds_per_tick) - if(affected_mob.adjustStaminaLoss(-2 * REM * seconds_per_tick, updating_stamina = FALSE)) + if(affected_mob.adjustStaminaLoss(-10 * REM * seconds_per_tick, updating_stamina = FALSE)) . = UPDATE_MOB_HEALTH if(is_species(affected_mob, /datum/species/jelly/luminescent)) var/mob/living/carbon/human/affected_human = affected_mob diff --git a/code/modules/reagents/chemistry/reagents/toxin_reagents.dm b/code/modules/reagents/chemistry/reagents/toxin_reagents.dm index bcdee284bd78b..6695b0b9db15d 100644 --- a/code/modules/reagents/chemistry/reagents/toxin_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/toxin_reagents.dm @@ -604,7 +604,7 @@ if(2) affected_mob.emote("cough") if(3) - affected_mob.emote("sneeze") + affected_mob.sneeze() if(4) if(prob(75)) to_chat(affected_mob, span_danger("You scratch at an itch.")) @@ -1201,7 +1201,7 @@ var/selected_part = pick(BODY_ZONE_L_ARM, BODY_ZONE_R_ARM, BODY_ZONE_L_LEG, BODY_ZONE_R_LEG) //God help you if the same limb gets picked twice quickly. var/obj/item/bodypart/BP = affected_mob.get_bodypart(selected_part) if(BP) - playsound(affected_mob, get_sfx(SFX_DESECRATION), 50, TRUE, -1) + playsound(affected_mob, SFX_DESECRATION, 50, TRUE, -1) affected_mob.visible_message(span_warning("[affected_mob]'s bones hurt too much!!"), span_danger("Your bones hurt too much!!")) affected_mob.say("OOF!!", forced = /datum/reagent/toxin/bonehurtingjuice) if(BP.receive_damage(brute = 20 * REM * seconds_per_tick, burn = 0, blocked = 200, updating_health = FALSE, wound_bonus = rand(30, 130))) diff --git a/code/modules/reagents/chemistry/reagents/unique/eigenstasium.dm b/code/modules/reagents/chemistry/reagents/unique/eigenstasium.dm index 7c18c7e201466..8c093888028e9 100644 --- a/code/modules/reagents/chemistry/reagents/unique/eigenstasium.dm +++ b/code/modules/reagents/chemistry/reagents/unique/eigenstasium.dm @@ -116,6 +116,6 @@ var/list/lockers = list() for(var/obj/structure/closet/closet in exposed_turf.contents) lockers += closet - if(!length(lockers)) + if(!lockers.len) return - GLOB.eigenstate_manager.create_new_link(lockers) + GLOB.eigenstate_manager.create_new_link(lockers, subtle = FALSE) diff --git a/code/modules/reagents/chemistry/recipes.dm b/code/modules/reagents/chemistry/recipes.dm index f7fc1b04ac8de..40305c9a8bc47 100644 --- a/code/modules/reagents/chemistry/recipes.dm +++ b/code/modules/reagents/chemistry/recipes.dm @@ -281,7 +281,7 @@ * * modifier - a flat additive numeric to the size of the explosion - set this if you want a minimum range * * strengthdiv - the divisional factor of the explosion, a larger number means a smaller range - This is the part that modifies an explosion's range with volume (i.e. it divides it by this number) */ -/datum/chemical_reaction/proc/default_explode(datum/reagents/holder, created_volume, modifier = 0, strengthdiv = 10) +/datum/chemical_reaction/proc/default_explode(datum/reagents/holder, created_volume, modifier = 0, strengthdiv = 10, clear_mob_reagents) var/power = modifier + round(created_volume/strengthdiv, 1) if(power > 0) var/turf/T = get_turf(holder.my_atom) @@ -300,8 +300,29 @@ var/datum/effect_system/reagents_explosion/e = new() e.set_up(power , T, 0, 0) e.start(holder.my_atom) - holder.clear_reagents() - + if (ismob(holder.my_atom)) + if(!clear_mob_reagents) + return + // Only clear reagents if they use a special explosive reaction to do it; it shouldn't apply + // to any explosion inside a person + holder.clear_reagents() + if(iscarbon(holder.my_atom)) + var/mob/living/carbon/victim = holder.my_atom + var/vomit_flags = MOB_VOMIT_MESSAGE | MOB_VOMIT_FORCE + // The vomiting here is for effect, not meant to help with purging + victim.vomit(vomit_flags, distance = 5) + // Not quite the same if the reaction is in their stomach; they'll throw up + // from any explosion, but it'll only make them puke up everything in their + // stomach + else if (istype(holder.my_atom, /obj/item/organ/internal/stomach)) + var/obj/item/organ/internal/stomach/indigestion = holder.my_atom + if(power < 1) + return + indigestion.owner?.vomit(MOB_VOMIT_MESSAGE | MOB_VOMIT_FORCE, lost_nutrition = 150, distance = 5, purge_ratio = 1) + holder.clear_reagents() + return + else + holder.clear_reagents() /* *Creates a flash effect only - less expensive than explode() * diff --git a/code/modules/reagents/chemistry/recipes/cat2_medicines.dm b/code/modules/reagents/chemistry/recipes/cat2_medicines.dm index 376a805e7d697..28aeb5743faaa 100644 --- a/code/modules/reagents/chemistry/recipes/cat2_medicines.dm +++ b/code/modules/reagents/chemistry/recipes/cat2_medicines.dm @@ -209,11 +209,11 @@ /datum/chemical_reaction/medicine/tirimol results = list(/datum/reagent/medicine/c2/tirimol = 5) required_reagents = list(/datum/reagent/nitrogen = 3, /datum/reagent/acetone = 2) - required_catalysts = list(/datum/reagent/toxin/acid = 1) + required_catalysts = list(/datum/reagent/toxin/acid = 1, /datum/reagent/oxygen = 1) mix_message = "The mixture turns into a tired reddish pink liquid." optimal_temp = 900 overheat_temp = 720 - optimal_ph_min = 2 + optimal_ph_min = 5 optimal_ph_max = 7.1 determin_ph_range = 2 temp_exponent_factor = 4 @@ -225,14 +225,6 @@ reaction_flags = REACTION_PH_VOL_CONSTANT reaction_tags = REACTION_TAG_EASY | REACTION_TAG_HEALING | REACTION_TAG_OXY -/datum/chemical_reaction/medicine/tirimol/reaction_step(datum/reagents/holder, datum/equilibrium/reaction, delta_t, delta_ph, step_reaction_vol) - . = ..() - var/datum/reagent/oxy = holder.has_reagent(/datum/reagent/oxygen) - if(oxy) - holder.remove_reagent(/datum/reagent/oxygen, 0.25) - else - holder.adjust_all_reagents_ph(-0.05*step_reaction_vol)//pH drifts faster - //Sleepytime for chem /datum/chemical_reaction/medicine/tirimol/overheated(datum/reagents/holder, datum/equilibrium/equilibrium, impure = FALSE) var/bonus = impure ? 2 : 1 diff --git a/code/modules/reagents/chemistry/recipes/drugs.dm b/code/modules/reagents/chemistry/recipes/drugs.dm index 3d25fa5e2b157..164e66bba9023 100644 --- a/code/modules/reagents/chemistry/recipes/drugs.dm +++ b/code/modules/reagents/chemistry/recipes/drugs.dm @@ -122,9 +122,10 @@ reaction_tags = REACTION_TAG_EASY | REACTION_TAG_DRUG | REACTION_TAG_ORGAN | REACTION_TAG_DAMAGING //These drug item reactions should probably be converted to fermichem in the future. -/datum/chemical_reaction/moon_rock //botany is real easy so it requires a lot of kronkus_extract, make it cheaper if it doesnt get amde. +/datum/chemical_reaction/moon_rock //botany is real easy so it requires a lot of kronkus_extract, make it cheaper if it doesnt get made. required_reagents = list(/datum/reagent/kronkus_extract = 15, /datum/reagent/fuel = 10, /datum/reagent/ammonia = 5) mob_react = FALSE + reaction_flags = REACTION_INSTANT reaction_tags = REACTION_TAG_EASY | REACTION_TAG_DRUG | REACTION_TAG_ORGAN | REACTION_TAG_DAMAGING /datum/chemical_reaction/moon_rock/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume) @@ -137,6 +138,7 @@ /datum/chemical_reaction/blastoff_ampoule required_reagents = list(/datum/reagent/silver = 10, /datum/reagent/toxin/cyanide = 10, /datum/reagent/lye = 5) mob_react = FALSE + reaction_flags = REACTION_INSTANT reaction_tags = REACTION_TAG_EASY | REACTION_TAG_DRUG | REACTION_TAG_ORGAN | REACTION_TAG_DAMAGING /datum/chemical_reaction/blastoff_ampoule/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume) @@ -149,6 +151,7 @@ /datum/chemical_reaction/saturnx_glob required_reagents = list(/datum/reagent/lead = 5, /datum/reagent/consumable/nothing = 5, /datum/reagent/drug/maint/tar = 10) mob_react = FALSE + reaction_flags = REACTION_INSTANT reaction_tags = REACTION_TAG_EASY | REACTION_TAG_DRUG | REACTION_TAG_ORGAN | REACTION_TAG_DAMAGING /datum/chemical_reaction/saturnx_glob/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume) diff --git a/code/modules/reagents/chemistry/recipes/medicine.dm b/code/modules/reagents/chemistry/recipes/medicine.dm index b3a287707629b..868917893c90c 100644 --- a/code/modules/reagents/chemistry/recipes/medicine.dm +++ b/code/modules/reagents/chemistry/recipes/medicine.dm @@ -345,6 +345,7 @@ /datum/chemical_reaction/medicine/medsuture required_reagents = list(/datum/reagent/cellulose = 10, /datum/reagent/toxin/formaldehyde = 20, /datum/reagent/medicine/polypyr = 15) //This might be a bit much, reagent cost should be reviewed after implementation. + reaction_flags = REACTION_INSTANT reaction_tags = REACTION_TAG_EASY | REACTION_TAG_HEALING | REACTION_TAG_BRUTE /datum/chemical_reaction/medicine/medsuture/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume) @@ -354,6 +355,7 @@ /datum/chemical_reaction/medicine/medmesh required_reagents = list(/datum/reagent/cellulose = 10, /datum/reagent/consumable/aloejuice = 20, /datum/reagent/space_cleaner/sterilizine = 10) + reaction_flags = REACTION_INSTANT reaction_tags = REACTION_TAG_EASY | REACTION_TAG_HEALING | REACTION_TAG_BURN /datum/chemical_reaction/medicine/medmesh/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume) @@ -363,6 +365,7 @@ /datum/chemical_reaction/medicine/poultice required_reagents = list(/datum/reagent/toxin/bungotoxin = 20, /datum/reagent/cellulose = 20, /datum/reagent/consumable/aloejuice = 20) + reaction_flags = REACTION_INSTANT reaction_tags = REACTION_TAG_EASY | REACTION_TAG_HEALING | REACTION_TAG_BRUTE | REACTION_TAG_BURN /datum/chemical_reaction/medicine/poultice/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume) diff --git a/code/modules/reagents/chemistry/recipes/others.dm b/code/modules/reagents/chemistry/recipes/others.dm index dee575cf06363..cf9c7ae38c64e 100644 --- a/code/modules/reagents/chemistry/recipes/others.dm +++ b/code/modules/reagents/chemistry/recipes/others.dm @@ -577,6 +577,7 @@ /datum/chemical_reaction/monkey required_reagents = list(/datum/reagent/monkey_powder = 50, /datum/reagent/water = 1) + reaction_flags = REACTION_INSTANT mix_message = "Expands into a brown mass before shaping itself into a monkey!." /datum/chemical_reaction/monkey/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume) diff --git a/code/modules/reagents/chemistry/recipes/pyrotechnics.dm b/code/modules/reagents/chemistry/recipes/pyrotechnics.dm index d190a44aea063..f02aaa3ab2473 100644 --- a/code/modules/reagents/chemistry/recipes/pyrotechnics.dm +++ b/code/modules/reagents/chemistry/recipes/pyrotechnics.dm @@ -1,13 +1,48 @@ +#define PURGING_REAGENTS list( \ + /datum/reagent/medicine/c2/multiver, \ + /datum/reagent/medicine/pen_acid, \ + /datum/reagent/medicine/calomel, \ + /datum/reagent/medicine/ammoniated_mercury, \ + /datum/reagent/medicine/c2/syriniver, \ + /datum/reagent/medicine/c2/musiver \ +) + /datum/chemical_reaction/reagent_explosion var/strengthdiv = 10 var/modifier = 0 reaction_flags = REACTION_INSTANT reaction_tags = REACTION_TAG_EXPLOSIVE | REACTION_TAG_MODERATE | REACTION_TAG_DANGEROUS required_temp = 0 //Prevent impromptu RPGs - -/datum/chemical_reaction/reagent_explosion/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume) - default_explode(holder, created_volume, modifier, strengthdiv) - + // Only clear mob reagents in special cases + var/clear_mob_reagents = FALSE + +/datum/chemical_reaction/reagent_explosion/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume, clear_mob_reagents) + // If an explosive reaction clears mob reagents, it should always be a minimum power + if(ismob(holder.my_atom) && clear_mob_reagents) + if(round((created_volume / strengthdiv) + modifier, 1) < 1) + modifier += 1 - ((created_volume / strengthdiv) + modifier) + // If this particular explosion doesn't automatically clear mob reagents as an inherent quality, + // then we can still clear mob reagents with some mad science malpractice that shouldn't work but + // does because omnizine is magic and also it's the future or whatever + if(ismob(holder.my_atom) && !clear_mob_reagents) + // The explosion needs to be a minimum power to clear reagents: see above + var/purge_power = round((created_volume / strengthdiv) + modifier, 1) + if(purge_power >= 1) + var/has_purging_chemical = FALSE + // They need one of the purge reagents in them + for(var/purging_chem as anything in PURGING_REAGENTS) + if(holder.has_reagent(purging_chem)) + // We have a purging chemical + has_purging_chemical = TRUE + break + // Then we need omnizine! MAGIC! + var/has_omnizine = holder.has_reagent(/datum/reagent/medicine/omnizine) + if(has_purging_chemical && has_omnizine) + // With all this medical "science" combined, we can clear mob reagents + clear_mob_reagents = TRUE + default_explode(holder, created_volume, modifier, strengthdiv, clear_mob_reagents) + +#undef PURGING_REAGENTS /datum/chemical_reaction/reagent_explosion/nitroglycerin results = list(/datum/reagent/nitroglycerin = 2) required_reagents = list(/datum/reagent/glycerol = 1, /datum/reagent/toxin/acid/nitracid = 1, /datum/reagent/toxin/acid = 1) @@ -104,11 +139,18 @@ /datum/chemical_reaction/reagent_explosion/penthrite_explosion_epinephrine required_reagents = list(/datum/reagent/medicine/c2/penthrite = 1, /datum/reagent/medicine/epinephrine = 1) strengthdiv = 5 + // Penthrite is rare as hell, so this clears your reagents + // Will most likely be from miners accidentally penstacking + clear_mob_reagents = TRUE + /datum/chemical_reaction/reagent_explosion/penthrite_explosion_atropine required_reagents = list(/datum/reagent/medicine/c2/penthrite = 1, /datum/reagent/medicine/atropine = 1) strengthdiv = 5 modifier = 5 + // Rare reagents clear your reagents + // Probably not good for you because you'll need healing chems to survive this most likely + clear_mob_reagents = TRUE /datum/chemical_reaction/reagent_explosion/potassium_explosion required_reagents = list(/datum/reagent/water = 1, /datum/reagent/potassium = 1) diff --git a/code/modules/reagents/chemistry/recipes/slime_extracts.dm b/code/modules/reagents/chemistry/recipes/slime_extracts.dm index 6407ff0fb8b2b..13eaffca3a898 100644 --- a/code/modules/reagents/chemistry/recipes/slime_extracts.dm +++ b/code/modules/reagents/chemistry/recipes/slime_extracts.dm @@ -88,7 +88,7 @@ //Gold /datum/chemical_reaction/slime/slimemobspawn - required_reagents = list(/datum/reagent/toxin/plasma = 1) + required_reagents = list(/datum/reagent/toxin/plasma = 15) required_container = /obj/item/slime_extract/gold deletes_extract = FALSE //we do delete, but we don't do so instantly reaction_tags = REACTION_TAG_EASY | REACTION_TAG_SLIME | REACTION_TAG_DANGEROUS @@ -103,7 +103,7 @@ /datum/chemical_reaction/slime/slimemobspawn/proc/summon_mobs(datum/reagents/holder, turf/T) T.visible_message(span_danger("The slime extract begins to vibrate violently!")) - addtimer(CALLBACK(src, PROC_REF(chemical_mob_spawn), holder, 5, "Gold Slime", HOSTILE_SPAWN), 5 SECONDS) + addtimer(CALLBACK(src, PROC_REF(chemical_mob_spawn), holder, 4, "Gold Slime", HOSTILE_SPAWN), 5 SECONDS) /datum/chemical_reaction/slime/slimemobspawn/lesser required_reagents = list(/datum/reagent/blood = 1) @@ -222,7 +222,7 @@ required_container = /obj/item/slime_extract/orange /datum/chemical_reaction/slime/slimefire - required_reagents = list(/datum/reagent/toxin/plasma = 1) + required_reagents = list(/datum/reagent/toxin/plasma = 15) required_container = /obj/item/slime_extract/orange deletes_extract = FALSE @@ -249,12 +249,12 @@ //Yellow /datum/chemical_reaction/slime/slimeoverload - required_reagents = list(/datum/reagent/blood = 1) + required_reagents = list(/datum/reagent/blood = 15) required_container = /obj/item/slime_extract/yellow reaction_tags = REACTION_TAG_EASY | REACTION_TAG_SLIME | REACTION_TAG_DANGEROUS /datum/chemical_reaction/slime/slimeoverload/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume) - empulse(get_turf(holder.my_atom), 3, 7) + empulse(get_turf(holder.my_atom), 3, 5) ..() /datum/chemical_reaction/slime/slimecell @@ -262,7 +262,7 @@ required_container = /obj/item/slime_extract/yellow /datum/chemical_reaction/slime/slimecell/on_reaction(datum/reagents/holder, created_volume) - new /obj/item/stock_parts/cell/emproof/slime(get_turf(holder.my_atom)) + new /obj/item/stock_parts/power_store/cell/emproof/slime(get_turf(holder.my_atom)) ..() /datum/chemical_reaction/slime/slimeglow @@ -356,7 +356,7 @@ //Oil /datum/chemical_reaction/slime/slimeexplosion - required_reagents = list(/datum/reagent/toxin/plasma = 1) + required_reagents = list(/datum/reagent/toxin/plasma = 15) required_container = /obj/item/slime_extract/oil deletes_extract = FALSE reaction_tags = REACTION_TAG_EASY | REACTION_TAG_SLIME | REACTION_TAG_DANGEROUS @@ -380,7 +380,7 @@ /datum/chemical_reaction/slime/slimeexplosion/proc/boom(datum/reagents/holder) if(holder?.my_atom) - explosion(holder.my_atom, devastation_range = 1, heavy_impact_range = 3, light_impact_range = 6, explosion_cause = src) + explosion(holder.my_atom, devastation_range = 1, heavy_impact_range = 2, light_impact_range = 4, explosion_cause = src) /datum/chemical_reaction/slime/slimeoil @@ -408,7 +408,7 @@ //Adamantine /datum/chemical_reaction/slime/adamantine - required_reagents = list(/datum/reagent/toxin/plasma = 1) + required_reagents = list(/datum/reagent/toxin/plasma = 15) required_container = /obj/item/slime_extract/adamantine /datum/chemical_reaction/slime/adamantine/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume) diff --git a/code/modules/reagents/reagent_containers/blood_pack.dm b/code/modules/reagents/reagent_containers/blood_pack.dm index 89b9e7c748cb4..75fc8aef8920c 100644 --- a/code/modules/reagents/reagent_containers/blood_pack.dm +++ b/code/modules/reagents/reagent_containers/blood_pack.dm @@ -74,7 +74,7 @@ /obj/item/reagent_containers/blood/snail blood_type = "S" unique_blood = /datum/reagent/lube - + /obj/item/reagent_containers/blood/snail/examine() . = ..() . += span_notice("It's a bit slimy... The label indicates that this is meant for snails.") @@ -100,7 +100,7 @@ blood_type = "U" /obj/item/reagent_containers/blood/attackby(obj/item/tool, mob/user, params) - if (istype(tool, /obj/item/pen) || istype(tool, /obj/item/toy/crayon)) + if (IS_WRITING_UTENSIL(tool)) if(!user.can_write(tool)) return var/custom_label = tgui_input_text(user, "What would you like to label the blood pack?", "Blood Pack", name, MAX_NAME_LEN) diff --git a/code/modules/reagents/reagent_containers/condiment.dm b/code/modules/reagents/reagent_containers/condiment.dm index e34511e9e0d0e..ccabc2c410646 100644 --- a/code/modules/reagents/reagent_containers/condiment.dm +++ b/code/modules/reagents/reagent_containers/condiment.dm @@ -66,34 +66,33 @@ playsound(M.loc,'sound/items/drink.ogg', rand(10,50), TRUE) return TRUE -/obj/item/reagent_containers/condiment/afterattack(obj/target, mob/user , proximity) - . = ..() - if(!proximity) - return - . |= AFTERATTACK_PROCESSED_ITEM +/obj/item/reagent_containers/condiment/interact_with_atom(atom/target, mob/living/user, list/modifiers) if(istype(target, /obj/structure/reagent_dispensers)) //A dispenser. Transfer FROM it TO us. - if(!target.reagents.total_volume) to_chat(user, span_warning("[target] is empty!")) - return + return ITEM_INTERACT_BLOCKING if(reagents.total_volume >= reagents.maximum_volume) to_chat(user, span_warning("[src] is full!")) - return + return ITEM_INTERACT_BLOCKING var/trans = target.reagents.trans_to(src, amount_per_transfer_from_this, transferred_by = user) to_chat(user, span_notice("You fill [src] with [trans] units of the contents of [target].")) + return ITEM_INTERACT_SUCCESS //Something like a glass or a food item. Player probably wants to transfer TO it. else if(target.is_drainable() || IS_EDIBLE(target)) if(!reagents.total_volume) to_chat(user, span_warning("[src] is empty!")) - return + return ITEM_INTERACT_BLOCKING if(target.reagents.total_volume >= target.reagents.maximum_volume) to_chat(user, span_warning("you can't add anymore to [target]!")) - return + return ITEM_INTERACT_BLOCKING var/trans = src.reagents.trans_to(target, amount_per_transfer_from_this, transferred_by = user) to_chat(user, span_notice("You transfer [trans] units of the condiment to [target].")) + return ITEM_INTERACT_SUCCESS + + return NONE /obj/item/reagent_containers/condiment/enzyme name = "universal enzyme" @@ -149,11 +148,10 @@ desc = "Salt. From dead crew, presumably." return TOXLOSS -/obj/item/reagent_containers/condiment/saltshaker/afterattack(obj/target, mob/living/user, proximity) +/obj/item/reagent_containers/condiment/saltshaker/interact_with_atom(atom/target, mob/living/user, list/modifiers) . = ..() - if(!proximity) - return - . |= AFTERATTACK_PROCESSED_ITEM + if(. & ITEM_INTERACT_ANY_BLOCKER) + return . if(isturf(target)) if(!reagents.has_reagent(/datum/reagent/consumable/salt, 2)) to_chat(user, span_warning("You don't have enough salt to make a pile!")) @@ -161,7 +159,8 @@ user.visible_message(span_notice("[user] shakes some salt onto [target]."), span_notice("You shake some salt onto [target].")) reagents.remove_reagent(/datum/reagent/consumable/salt, 2) new/obj/effect/decal/cleanable/food/salt(target) - return + return ITEM_INTERACT_SUCCESS + return . /obj/item/reagent_containers/condiment/peppermill name = "pepper mill" @@ -441,26 +440,22 @@ /obj/item/reagent_containers/condiment/pack/attack(mob/M, mob/user, def_zone) //Can't feed these to people directly. return -/obj/item/reagent_containers/condiment/pack/afterattack(obj/target, mob/user , proximity) - if(!proximity) - return - . |= AFTERATTACK_PROCESSED_ITEM +/obj/item/reagent_containers/condiment/pack/interact_with_atom(atom/target, mob/living/user, list/modifiers) //You can tear the bag open above food to put the condiments on it, obviously. if(IS_EDIBLE(target)) if(!reagents.total_volume) to_chat(user, span_warning("You tear open [src], but there's nothing in it.")) qdel(src) - return + return ITEM_INTERACT_BLOCKING if(target.reagents.total_volume >= target.reagents.maximum_volume) to_chat(user, span_warning("You tear open [src], but [target] is stacked so high that it just drips off!") ) qdel(src) - return - else - to_chat(user, span_notice("You tear open [src] above [target] and the condiments drip onto it.")) - src.reagents.trans_to(target, amount_per_transfer_from_this, transferred_by = user) - qdel(src) - return - return . | ..() + return ITEM_INTERACT_BLOCKING + to_chat(user, span_notice("You tear open [src] above [target] and the condiments drip onto it.")) + src.reagents.trans_to(target, amount_per_transfer_from_this, transferred_by = user) + qdel(src) + return ITEM_INTERACT_SUCCESS + return ..() /// Handles reagents getting added to the condiment pack. /obj/item/reagent_containers/condiment/pack/proc/on_reagent_add(datum/reagents/reagents) diff --git a/code/modules/reagents/reagent_containers/cups/_cup.dm b/code/modules/reagents/reagent_containers/cups/_cup.dm index 41542ea105e7a..87df7765233ec 100644 --- a/code/modules/reagents/reagent_containers/cups/_cup.dm +++ b/code/modules/reagents/reagent_containers/cups/_cup.dm @@ -101,68 +101,67 @@ if(LAZYLEN(diseases_to_add)) AddComponent(/datum/component/infective, diseases_to_add) -/obj/item/reagent_containers/cup/afterattack(atom/target, mob/user, proximity_flag, click_parameters) - . = ..() - if(!proximity_flag) - return - - . |= AFTERATTACK_PROCESSED_ITEM - +/obj/item/reagent_containers/cup/interact_with_atom(atom/target, mob/living/user, list/modifiers) if(!check_allowed_items(target, target_self = TRUE)) - return - + return NONE if(!spillable) - return + return NONE if(target.is_refillable()) //Something like a glass. Player probably wants to transfer TO it. if(!reagents.total_volume) to_chat(user, span_warning("[src] is empty!")) - return + return ITEM_INTERACT_BLOCKING if(target.reagents.holder_full()) to_chat(user, span_warning("[target] is full.")) - return + return ITEM_INTERACT_BLOCKING var/trans = reagents.trans_to(target, amount_per_transfer_from_this, transferred_by = user) + playsound(target.loc, pick('sound/effects/liquid_pour1.ogg', 'sound/effects/liquid_pour2.ogg', 'sound/effects/liquid_pour3.ogg'), 50) to_chat(user, span_notice("You transfer [trans] unit\s of the solution to [target].")) SEND_SIGNAL(src, COMSIG_REAGENTS_CUP_TRANSFER_TO, target) target.update_appearance() + return ITEM_INTERACT_SUCCESS - else if(target.is_drainable()) //A dispenser. Transfer FROM it TO us. + if(target.is_drainable()) //A dispenser. Transfer FROM it TO us. if(!target.reagents.total_volume) to_chat(user, span_warning("[target] is empty and can't be refilled!")) - return + return ITEM_INTERACT_BLOCKING if(reagents.holder_full()) to_chat(user, span_warning("[src] is full.")) - return + return ITEM_INTERACT_BLOCKING var/trans = target.reagents.trans_to(src, amount_per_transfer_from_this, transferred_by = user) to_chat(user, span_notice("You fill [src] with [trans] unit\s of the contents of [target].")) SEND_SIGNAL(src, COMSIG_REAGENTS_CUP_TRANSFER_FROM, target) target.update_appearance() + return ITEM_INTERACT_SUCCESS -/obj/item/reagent_containers/cup/afterattack_secondary(atom/target, mob/user, proximity_flag, click_parameters) - if((!proximity_flag) || !check_allowed_items(target, target_self = TRUE)) - return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN + return NONE +/obj/item/reagent_containers/cup/interact_with_atom_secondary(atom/target, mob/living/user, list/modifiers) + if(user.combat_mode) + return ITEM_INTERACT_SKIP_TO_ATTACK + if(!check_allowed_items(target, target_self = TRUE)) + return NONE if(!spillable) - return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN + return ITEM_INTERACT_BLOCKING if(target.is_drainable()) //A dispenser. Transfer FROM it TO us. if(!target.reagents.total_volume) to_chat(user, span_warning("[target] is empty!")) - return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN + return ITEM_INTERACT_BLOCKING if(reagents.holder_full()) to_chat(user, span_warning("[src] is full.")) - return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN + return ITEM_INTERACT_BLOCKING var/trans = target.reagents.trans_to(src, amount_per_transfer_from_this, transferred_by = user) to_chat(user, span_notice("You fill [src] with [trans] unit\s of the contents of [target].")) target.update_appearance() - return SECONDARY_ATTACK_CONTINUE_CHAIN + return ITEM_INTERACT_SUCCESS /obj/item/reagent_containers/cup/attackby(obj/item/attacking_item, mob/user, params) var/hotness = attacking_item.get_temperature() @@ -229,6 +228,8 @@ worn_icon_state = "beaker" custom_materials = list(/datum/material/glass=SMALL_MATERIAL_AMOUNT*5) fill_icon_thresholds = list(0, 1, 20, 40, 60, 80, 100) + pickup_sound = 'sound/items/handling/beaker_pickup.ogg' + drop_sound = 'sound/items/handling/beaker_place.ogg' /obj/item/reagent_containers/cup/beaker/Initialize(mapload) . = ..() diff --git a/code/modules/reagents/reagent_containers/cups/bottle.dm b/code/modules/reagents/reagent_containers/cups/bottle.dm index 75bc79c5a6aaa..97906b26240e5 100644 --- a/code/modules/reagents/reagent_containers/cups/bottle.dm +++ b/code/modules/reagents/reagent_containers/cups/bottle.dm @@ -59,6 +59,11 @@ desc = "A small bottle of multiver, which removes toxins and other chemicals from the bloodstream but causes shortness of breath. All effects scale with the amount of reagents in the patient." list_reagents = list(/datum/reagent/medicine/c2/multiver = 30) +/obj/item/reagent_containers/cup/bottle/calomel + name = "calomel bottle" + desc = "A small bottle of calomel, a toxic drug which quickly removes chemicals from the bloodstream. Does not cause additional harm in heavily-injured people." + list_reagents = list(/datum/reagent/medicine/calomel = 30) + /obj/item/reagent_containers/cup/bottle/phlogiston name = "Phlogiston bottle" desc = "A small bottle of Phlogiston, that will set you on fire if used." @@ -505,7 +510,7 @@ balloon_alert(user, "transferred [transfer_amount] unit\s") flick("syrup_anim",src) - if(istype(attacking_item, /obj/item/pen)) + if(IS_WRITING_UTENSIL(attacking_item)) rename(user, attacking_item) attacking_item.update_appearance() diff --git a/code/modules/reagents/reagent_containers/cups/drinks.dm b/code/modules/reagents/reagent_containers/cups/drinks.dm index 5a3ed446f607c..2f326accb9074 100644 --- a/code/modules/reagents/reagent_containers/cups/drinks.dm +++ b/code/modules/reagents/reagent_containers/cups/drinks.dm @@ -291,20 +291,18 @@ return ..() -/obj/item/reagent_containers/cup/glass/waterbottle/afterattack(obj/target, mob/living/user, proximity) - . |= AFTERATTACK_PROCESSED_ITEM - +/obj/item/reagent_containers/cup/glass/waterbottle/interact_with_atom(atom/target, mob/living/user, list/modifiers) if(cap_on && (target.is_refillable() || target.is_drainable() || (reagents.total_volume && !user.combat_mode))) to_chat(user, span_warning("You must remove the cap before you can do that!")) - return + return ITEM_INTERACT_BLOCKING - else if(istype(target, /obj/item/reagent_containers/cup/glass/waterbottle)) + if(istype(target, /obj/item/reagent_containers/cup/glass/waterbottle)) var/obj/item/reagent_containers/cup/glass/waterbottle/other_bottle = target if(other_bottle.cap_on) to_chat(user, span_warning("[other_bottle] has a cap firmly twisted on!")) - return + return ITEM_INTERACT_BLOCKING - return . | ..() + return ..() // heehoo bottle flipping /obj/item/reagent_containers/cup/glass/waterbottle/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum) diff --git a/code/modules/reagents/reagent_containers/dropper.dm b/code/modules/reagents/reagent_containers/dropper.dm index beb6f3e6314cd..76ab1166c08a7 100644 --- a/code/modules/reagents/reagent_containers/dropper.dm +++ b/code/modules/reagents/reagent_containers/dropper.dm @@ -11,22 +11,18 @@ reagent_flags = TRANSPARENT custom_price = PAYCHECK_CREW -/obj/item/reagent_containers/dropper/afterattack(obj/target, mob/user , proximity) - . = ..() - if(!proximity) - return - . |= AFTERATTACK_PROCESSED_ITEM +/obj/item/reagent_containers/dropper/interact_with_atom(atom/target, mob/living/user, list/modifiers) if(!target.reagents) - return + return NONE if(reagents.total_volume > 0) if(target.reagents.holder_full()) to_chat(user, span_notice("[target] is full.")) - return + return ITEM_INTERACT_BLOCKING if(!target.is_injectable(user)) to_chat(user, span_warning("You cannot transfer reagents to [target]!")) - return + return ITEM_INTERACT_BLOCKING var/trans = 0 var/fraction = min(amount_per_transfer_from_this / reagents.total_volume, 1) @@ -48,10 +44,10 @@ to_chat(user, span_notice("You transfer [trans] unit\s of the solution.")) update_appearance() - return + return ITEM_INTERACT_BLOCKING else if(isalien(target)) //hiss-hiss has no eyes! to_chat(target, span_danger("[target] does not seem to have any eyes!")) - return + return ITEM_INTERACT_BLOCKING target.visible_message(span_danger("[user] squirts something into [target]'s eyes!"), \ span_userdanger("[user] squirts something into your eyes!")) @@ -69,23 +65,23 @@ to_chat(user, span_notice("You transfer [trans] unit\s of the solution.")) update_appearance() target.update_appearance() + return ITEM_INTERACT_SUCCESS - else + if(!target.is_drawable(user, FALSE)) //No drawing from mobs here + to_chat(user, span_warning("You cannot directly remove reagents from [target]!")) + return ITEM_INTERACT_BLOCKING - if(!target.is_drawable(user, FALSE)) //No drawing from mobs here - to_chat(user, span_warning("You cannot directly remove reagents from [target]!")) - return + if(!target.reagents.total_volume) + to_chat(user, span_warning("[target] is empty!")) + return ITEM_INTERACT_BLOCKING - if(!target.reagents.total_volume) - to_chat(user, span_warning("[target] is empty!")) - return + var/trans = target.reagents.trans_to(src, amount_per_transfer_from_this, transferred_by = user) - var/trans = target.reagents.trans_to(src, amount_per_transfer_from_this, transferred_by = user) + to_chat(user, span_notice("You fill [src] with [trans] unit\s of the solution.")) - to_chat(user, span_notice("You fill [src] with [trans] unit\s of the solution.")) - - update_appearance() - target.update_appearance() + update_appearance() + target.update_appearance() + return ITEM_INTERACT_SUCCESS /obj/item/reagent_containers/dropper/update_overlays() . = ..() diff --git a/code/modules/reagents/reagent_containers/misc.dm b/code/modules/reagents/reagent_containers/misc.dm index f631e8e28a0e0..d2dc2adfb5f76 100644 --- a/code/modules/reagents/reagent_containers/misc.dm +++ b/code/modules/reagents/reagent_containers/misc.dm @@ -1,20 +1,20 @@ /obj/item/reagent_containers/cup/maunamug name = "mauna mug" desc = "A drink served in a classy mug. Now with built-in heating!" - icon = 'icons/obj/mauna_mug.dmi' + icon = 'icons/obj/devices/mauna_mug.dmi' icon_state = "maunamug" base_icon_state = "maunamug" spillable = TRUE reagent_flags = OPENCONTAINER fill_icon_state = "maunafilling" fill_icon_thresholds = list(25) - var/obj/item/stock_parts/cell/cell + var/obj/item/stock_parts/power_store/cell var/open = FALSE var/on = FALSE /obj/item/reagent_containers/cup/maunamug/Initialize(mapload, vol) . = ..() - cell = new /obj/item/stock_parts/cell(src) + cell = new /obj/item/stock_parts/power_store/cell(src) /obj/item/reagent_containers/cup/maunamug/get_cell() return cell @@ -50,13 +50,14 @@ STOP_PROCESSING(SSobj, src) . = ..() -/obj/item/reagent_containers/cup/maunamug/CtrlClick(mob/living/user) +/obj/item/reagent_containers/cup/maunamug/item_ctrl_click(mob/user) if(on) change_power_status(FALSE) else if(!cell || cell.charge <= 0) return FALSE //No power, so don't turn on change_power_status(TRUE) + return CLICK_ACTION_SUCCESS /obj/item/reagent_containers/cup/maunamug/proc/change_power_status(status) on = status @@ -74,7 +75,7 @@ /obj/item/reagent_containers/cup/maunamug/attackby(obj/item/I, mob/user, params) add_fingerprint(user) - if(!istype(I, /obj/item/stock_parts/cell)) + if(!istype(I, /obj/item/stock_parts/power_store/cell)) return ..() if(!open) to_chat(user, span_warning("The battery case must be open to insert a power cell!")) @@ -137,15 +138,13 @@ user.visible_message(span_suicide("[user] is smothering [user.p_them()]self with [src]! It looks like [user.p_theyre()] trying to commit suicide!")) return OXYLOSS -/obj/item/reagent_containers/cup/rag/afterattack(atom/target, mob/living/user, proximity_flag, click_parameters) - if(!proximity_flag) - return - if(!iscarbon(target) || !reagents?.total_volume) +/obj/item/reagent_containers/cup/rag/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + if(!iscarbon(interacting_with) || !reagents?.total_volume) return ..() - var/mob/living/carbon/carbon_target = target + var/mob/living/carbon/carbon_target = interacting_with var/reagentlist = pretty_string_from_reagent_list(reagents.reagent_list) var/log_object = "containing [reagentlist]" - if(user.combat_mode && !carbon_target.is_mouth_covered()) + if(!carbon_target.is_mouth_covered()) reagents.trans_to(carbon_target, reagents.total_volume, transferred_by = user, methods = INGEST) carbon_target.visible_message(span_danger("[user] smothers \the [carbon_target] with \the [src]!"), span_userdanger("[user] smothers you with \the [src]!"), span_hear("You hear some struggling and muffled cries of surprise.")) log_combat(user, carbon_target, "smothered", src, log_object) @@ -154,7 +153,12 @@ reagents.clear_reagents() carbon_target.visible_message(span_notice("[user] touches \the [carbon_target] with \the [src].")) log_combat(user, carbon_target, "touched", src, log_object) + return ITEM_INTERACT_SUCCESS ///Checks whether or not we should clean. /obj/item/reagent_containers/cup/rag/proc/should_clean(datum/cleaning_source, atom/atom_to_clean, mob/living/cleaner) - return (src in cleaner) + if(cleaner.combat_mode && ismob(atom_to_clean)) + return CLEAN_BLOCKED|CLEAN_DONT_BLOCK_INTERACTION + if(loc == cleaner) + return CLEAN_ALLOWED + return CLEAN_ALLOWED|CLEAN_NO_XP diff --git a/code/modules/reagents/reagent_containers/pill.dm b/code/modules/reagents/reagent_containers/pill.dm index 98ba3a13ed2eb..d561d0db48792 100644 --- a/code/modules/reagents/reagent_containers/pill.dm +++ b/code/modules/reagents/reagent_containers/pill.dm @@ -59,24 +59,20 @@ return TRUE -/obj/item/reagent_containers/pill/afterattack(obj/target, mob/user , proximity) - . = ..() - if(!proximity) - return - . |= AFTERATTACK_PROCESSED_ITEM +/obj/item/reagent_containers/pill/interact_with_atom(atom/target, mob/living/user, list/modifiers) if(!dissolvable || !target.is_refillable()) - return + return NONE if(target.is_drainable() && !target.reagents.total_volume) to_chat(user, span_warning("[target] is empty! There's nothing to dissolve [src] in.")) - return - + return ITEM_INTERACT_BLOCKING if(target.reagents.holder_full()) to_chat(user, span_warning("[target] is full.")) - return + return ITEM_INTERACT_BLOCKING user.visible_message(span_warning("[user] slips something into [target]!"), span_notice("You dissolve [src] in [target]."), null, 2) reagents.trans_to(target, reagents.total_volume, transferred_by = user) qdel(src) + return ITEM_INTERACT_SUCCESS /* * On accidental consumption, consume the pill @@ -162,7 +158,7 @@ name = "mutadone pill" desc = "Used to treat genetic damage." icon_state = "pill20" - list_reagents = list(/datum/reagent/medicine/mutadone = 50) + list_reagents = list(/datum/reagent/medicine/mutadone = 5) rename_with_volume = TRUE /obj/item/reagent_containers/pill/salicylic diff --git a/code/modules/reagents/reagent_containers/spray.dm b/code/modules/reagents/reagent_containers/spray.dm index 81fb42ed1c8cf..bb426436599c0 100644 --- a/code/modules/reagents/reagent_containers/spray.dm +++ b/code/modules/reagents/reagent_containers/spray.dm @@ -26,31 +26,38 @@ possible_transfer_amounts = list(5,10) var/spray_sound = 'sound/effects/spray2.ogg' -/obj/item/reagent_containers/spray/afterattack(atom/target, mob/user, proximity_flag, click_parameters) - . = ..() - if(istype(target, /obj/structure/sink) || istype(target, /obj/structure/mop_bucket/janitorialcart) || istype(target, /obj/machinery/hydroponics)) - return +/obj/item/reagent_containers/spray/ranged_interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + return try_spray(interacting_with, user) ? ITEM_INTERACT_SUCCESS : ITEM_INTERACT_BLOCKING + +/obj/item/reagent_containers/spray/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + // This is a hack to make spray bottles fillable from / transferable to these sources + // However it can be completely removed when these objects are updated to use the new interaction system + // (because the desired effect will just work out of the box) + if(istype(interacting_with, /obj/structure/sink) || istype(interacting_with, /obj/structure/mop_bucket/janitorialcart) || istype(interacting_with, /obj/machinery/hydroponics)) + return NONE - . |= AFTERATTACK_PROCESSED_ITEM + return try_spray(interacting_with, user) ? ITEM_INTERACT_SUCCESS : ITEM_INTERACT_BLOCKING - if((target.is_drainable() && !target.is_refillable()) && (get_dist(src, target) <= 1) && can_fill_from_container) +/obj/item/reagent_containers/spray/proc/try_spray(atom/target, mob/user) + var/adjacent = user.Adjacent(target) + if((target.is_drainable() && !target.is_refillable()) && adjacent && can_fill_from_container) if(!target.reagents.total_volume) to_chat(user, span_warning("[target] is empty.")) - return + return FALSE if(reagents.holder_full()) to_chat(user, span_warning("[src] is full.")) - return + return FALSE var/trans = target.reagents.trans_to(src, 50, transferred_by = user) //transfer 50u , using the spray's transfer amount would take too long to refill to_chat(user, span_notice("You fill \the [src] with [trans] units of the contents of \the [target].")) - return + return FALSE if(reagents.total_volume < amount_per_transfer_from_this) to_chat(user, span_warning("Not enough left!")) - return + return FALSE - if(proximity_flag && (target.density || ismob(target))) + if(adjacent && (target.density || ismob(target))) // If we're spraying an adjacent mob or a dense object, we start the spray on ITS tile rather than OURs // This is so we can use a spray bottle to clean stuff like windows without getting blocked by passflags spray(target, user, get_turf(target)) @@ -58,9 +65,9 @@ spray(target, user) playsound(src, spray_sound, 50, TRUE, -6) - user.changeNext_move(CLICK_CD_RANGE*2) + user.changeNext_move(CLICK_CD_RANGE * 2) user.newtonian_move(get_dir(target, user)) - return + return TRUE /// Handles creating a chem puff that travels towards the target atom, exposing reagents to everything it hits on the way. /obj/item/reagent_containers/spray/proc/spray(atom/target, mob/user, turf/start_turf = get_turf(src)) @@ -89,7 +96,6 @@ /obj/item/reagent_containers/spray/proc/do_spray(atom/target, wait_step, obj/effect/decal/chempuff/reagent_puff, range, puff_reagent_left, mob/user) reagent_puff.user = user reagent_puff.sprayer = src - reagent_puff.lifetime = puff_reagent_left reagent_puff.stream = stream_mode var/turf/target_turf = get_turf(target) @@ -100,7 +106,7 @@ reagent_puff.end_life() return - var/datum/move_loop/our_loop = DSmove_manager.move_towards_legacy(reagent_puff, target, wait_step, timeout = range * wait_step, flags = MOVEMENT_LOOP_START_FAST, priority = MOVEMENT_ABOVE_SPACE_PRIORITY) + var/datum/move_loop/our_loop = GLOB.move_manager.move_towards_legacy(reagent_puff, target, wait_step, timeout = range * wait_step, flags = MOVEMENT_LOOP_START_FAST, priority = MOVEMENT_ABOVE_SPACE_PRIORITY) reagent_puff.RegisterSignal(our_loop, COMSIG_QDELETING, TYPE_PROC_REF(/obj/effect/decal/chempuff, loop_ended)) reagent_puff.RegisterSignal(our_loop, COMSIG_MOVELOOP_POSTPROCESS, TYPE_PROC_REF(/obj/effect/decal/chempuff, check_move)) @@ -232,10 +238,10 @@ return OXYLOSS // Fix pepperspraying yourself -/obj/item/reagent_containers/spray/pepper/afterattack(atom/A as mob|obj, mob/user) - if (A.loc == user) - return - return ..() | AFTERATTACK_PROCESSED_ITEM +/obj/item/reagent_containers/spray/pepper/try_spray(atom/target, mob/user) + if (target.loc == user) + return FALSE + return ..() //water flower /obj/item/reagent_containers/spray/waterflower @@ -320,11 +326,10 @@ amount_per_transfer_from_this = 10 volume = 600 -/obj/item/reagent_containers/spray/chemsprayer/afterattack(atom/A as mob|obj, mob/user) - // Make it so the bioterror spray doesn't spray yourself when you click your inventory items - if (A.loc == user) - return - return ..() | AFTERATTACK_PROCESSED_ITEM +/obj/item/reagent_containers/spray/chemsprayer/try_spray(atom/target, mob/user) + if (target.loc == user) + return FALSE + return ..() /obj/item/reagent_containers/spray/chemsprayer/spray(atom/A, mob/user) var/direction = get_dir(src, A) @@ -438,15 +443,6 @@ "Yellow" = "sprayer_med_yellow", "Blue" = "sprayer_med_blue") - -/obj/item/reagent_containers/spray/medical/add_context(atom/source, list/context, obj/item/held_item, mob/user) - . = ..() - - if(!current_skin) - context[SCREENTIP_CONTEXT_ALT_LMB] = "Reskin" - return CONTEXTUAL_SCREENTIP_SET - - /obj/item/reagent_containers/spray/medical/reskin_obj(mob/M) ..() switch(icon_state) diff --git a/code/modules/reagents/reagent_containers/syringes.dm b/code/modules/reagents/reagent_containers/syringes.dm index 36424f22cbdf0..9fffd5ccc7c10 100644 --- a/code/modules/reagents/reagent_containers/syringes.dm +++ b/code/modules/reagents/reagent_containers/syringes.dm @@ -25,9 +25,7 @@ /obj/item/reagent_containers/syringe/attackby(obj/item/I, mob/user, params) return -/obj/item/reagent_containers/syringe/proc/try_syringe(atom/target, mob/user, proximity) - if(!proximity) - return FALSE +/obj/item/reagent_containers/syringe/proc/try_syringe(atom/target, mob/user) if(!target.reagents) return FALSE @@ -36,49 +34,50 @@ if(!living_target.try_inject(user, injection_flags = INJECT_TRY_SHOW_ERROR_MESSAGE|inject_flags)) return FALSE - // chance of monkey retaliation - SEND_SIGNAL(target, COMSIG_LIVING_TRY_SYRINGE, user) return TRUE -/obj/item/reagent_containers/syringe/afterattack(atom/target, mob/user, proximity) - . = ..() - . |= AFTERATTACK_PROCESSED_ITEM +/obj/item/reagent_containers/syringe/interact_with_atom(atom/target, mob/living/user, list/modifiers) + if(!target.reagents) + return NONE + if(!try_syringe(target, user)) + return ITEM_INTERACT_BLOCKING - if (!try_syringe(target, user, proximity)) - return + SEND_SIGNAL(target, COMSIG_LIVING_TRY_SYRINGE_INJECT, user) var/contained = reagents.get_reagent_log_string() log_combat(user, target, "attempted to inject", src, addition="which had [contained]") if(!reagents.total_volume) to_chat(user, span_warning("[src] is empty! Right-click to draw.")) - return + return ITEM_INTERACT_BLOCKING if(!isliving(target) && !target.is_injectable(user)) to_chat(user, span_warning("You cannot directly fill [target]!")) - return + return ITEM_INTERACT_BLOCKING if(target.reagents.total_volume >= target.reagents.maximum_volume) to_chat(user, span_notice("[target] is full.")) - return + return ITEM_INTERACT_BLOCKING if(isliving(target)) var/mob/living/living_target = target - if(!living_target.try_inject(user, injection_flags = INJECT_TRY_SHOW_ERROR_MESSAGE|inject_flags)) - return if(living_target != user) - living_target.visible_message(span_danger("[user] is trying to inject [living_target]!"), \ - span_userdanger("[user] is trying to inject you!")) - if(!do_after(user, CHEM_INTERACT_DELAY(3 SECONDS, user), living_target, extra_checks = CALLBACK(living_target, TYPE_PROC_REF(/mob/living, try_inject), user, null, INJECT_TRY_SHOW_ERROR_MESSAGE|inject_flags))) - return + living_target.visible_message( + span_danger("[user] is trying to inject [living_target]!"), + span_userdanger("[user] is trying to inject you!"), + ) + if(!do_after(user, CHEM_INTERACT_DELAY(3 SECONDS, user), living_target, extra_checks = CALLBACK(src, PROC_REF(try_syringe), living_target, user))) + return ITEM_INTERACT_BLOCKING if(!reagents.total_volume) - return + return ITEM_INTERACT_BLOCKING if(living_target.reagents.total_volume >= living_target.reagents.maximum_volume) - return - living_target.visible_message(span_danger("[user] injects [living_target] with the syringe!"), \ - span_userdanger("[user] injects you with the syringe!")) + return ITEM_INTERACT_BLOCKING + living_target.visible_message( + span_danger("[user] injects [living_target] with the syringe!"), + span_userdanger("[user] injects you with the syringe!"), + ) - if (living_target == user) + if(living_target == user) living_target.log_message("injected themselves ([contained]) with [name]", LOG_ATTACK, color="orange") else log_combat(user, living_target, "injected", src, addition="which had [contained]") @@ -86,44 +85,53 @@ if(reagents.trans_to(target, amount_per_transfer_from_this, transferred_by = user, methods = INJECT)) to_chat(user, span_notice("You inject [amount_per_transfer_from_this] units of the solution. The syringe now contains [reagents.total_volume] units.")) target.update_appearance() + return ITEM_INTERACT_SUCCESS + + return ITEM_INTERACT_BLOCKING + +/obj/item/reagent_containers/syringe/interact_with_atom_secondary(atom/target, mob/living/user, list/modifiers) + if (!target.reagents) + return NONE + if (!try_syringe(target, user)) + return ITEM_INTERACT_BLOCKING -/obj/item/reagent_containers/syringe/afterattack_secondary(atom/target, mob/user, proximity_flag, click_parameters) - if (!try_syringe(target, user, proximity_flag)) - return SECONDARY_ATTACK_CONTINUE_CHAIN + SEND_SIGNAL(target, COMSIG_LIVING_TRY_SYRINGE_WITHDRAW, user) if(reagents.total_volume >= reagents.maximum_volume) to_chat(user, span_notice("[src] is full.")) - return SECONDARY_ATTACK_CONTINUE_CHAIN + return ITEM_INTERACT_BLOCKING if(isliving(target)) var/mob/living/living_target = target var/drawn_amount = reagents.maximum_volume - reagents.total_volume if(target != user) - target.visible_message(span_danger("[user] is trying to take a blood sample from [target]!"), \ - span_userdanger("[user] is trying to take a blood sample from you!")) - if(!do_after(user, CHEM_INTERACT_DELAY(3 SECONDS, user), target, extra_checks = CALLBACK(living_target, TYPE_PROC_REF(/mob/living, try_inject), user, null, INJECT_TRY_SHOW_ERROR_MESSAGE|inject_flags))) - return SECONDARY_ATTACK_CONTINUE_CHAIN + target.visible_message( + span_danger("[user] is trying to take a blood sample from [target]!"), + span_userdanger("[user] is trying to take a blood sample from you!"), + ) + if(!do_after(user, CHEM_INTERACT_DELAY(3 SECONDS, user), target, extra_checks = CALLBACK(src, PROC_REF(try_syringe), living_target, user))) + return ITEM_INTERACT_BLOCKING if(reagents.total_volume >= reagents.maximum_volume) - return SECONDARY_ATTACK_CONTINUE_CHAIN + return ITEM_INTERACT_BLOCKING if(living_target.transfer_blood_to(src, drawn_amount)) user.visible_message(span_notice("[user] takes a blood sample from [living_target].")) else to_chat(user, span_warning("You are unable to draw any blood from [living_target]!")) - else - if(!target.reagents.total_volume) - to_chat(user, span_warning("[target] is empty!")) - return SECONDARY_ATTACK_CONTINUE_CHAIN + return ITEM_INTERACT_SUCCESS - if(!target.is_drawable(user)) - to_chat(user, span_warning("You cannot directly remove reagents from [target]!")) - return SECONDARY_ATTACK_CONTINUE_CHAIN + if(!target.reagents.total_volume) + to_chat(user, span_warning("[target] is empty!")) + return ITEM_INTERACT_BLOCKING - var/trans = target.reagents.trans_to(src, amount_per_transfer_from_this, transferred_by = user) // transfer from, transfer to - who cares? + if(!target.is_drawable(user)) + to_chat(user, span_warning("You cannot directly remove reagents from [target]!")) + return ITEM_INTERACT_BLOCKING - to_chat(user, span_notice("You fill [src] with [trans] units of the solution. It now contains [reagents.total_volume] units.")) - target.update_appearance() + var/trans = target.reagents.trans_to(src, amount_per_transfer_from_this, transferred_by = user) // transfer from, transfer to - who cares? - return SECONDARY_ATTACK_CONTINUE_CHAIN + to_chat(user, span_notice("You fill [src] with [trans] units of the solution. It now contains [reagents.total_volume] units.")) + target.update_appearance() + return ITEM_INTERACT_SUCCESS /* * On accidental consumption, inject the eater with 2/3rd of the syringe and reveal it @@ -173,6 +181,11 @@ desc = "Contains multiver. Diluted with granibitaluri." list_reagents = list(/datum/reagent/medicine/c2/multiver = 6, /datum/reagent/medicine/granibitaluri = 9) +/obj/item/reagent_containers/syringe/calomel + name = "syringe (calomel)" + desc = "Contains calomel - a toxic drug for rapidly removing chemicals from the body." + list_reagents = list(/datum/reagent/medicine/calomel = 15) + /obj/item/reagent_containers/syringe/convermol name = "syringe (convermol)" desc = "Contains convermol. Diluted with granibitaluri." diff --git a/code/modules/reagents/reagent_dispenser.dm b/code/modules/reagents/reagent_dispenser.dm index b8b3576aa4b1b..f9cf10e1068d9 100644 --- a/code/modules/reagents/reagent_dispenser.dm +++ b/code/modules/reagents/reagent_dispenser.dm @@ -204,6 +204,7 @@ if(leaking && reagents && reagents.total_volume >= amount_to_leak) reagents.expose(get_turf(src), TOUCH, amount_to_leak / max(amount_to_leak, reagents.total_volume)) reagents.remove_reagent(reagent_id, amount_to_leak) + playsound(src, 'sound/effects/glug.ogg', 33, TRUE, SILENCED_SOUND_EXTRARANGE) return TRUE return FALSE @@ -221,7 +222,7 @@ if(!openable) return FALSE leaking = !leaking - balloon_alert(user, "[leaking ? "opened" : "closed"] [src]'s tap") + balloon_alert(user, "[leaking ? "opened" : "closed"] tap") user.log_message("[leaking ? "opened" : "closed"] [src].", LOG_GAME) tank_leak() return ITEM_INTERACT_SUCCESS diff --git a/code/modules/recycling/conveyor.dm b/code/modules/recycling/conveyor.dm index 6d5b270cd71d1..c5dfdc39d3e98 100644 --- a/code/modules/recycling/conveyor.dm +++ b/code/modules/recycling/conveyor.dm @@ -40,8 +40,7 @@ GLOBAL_LIST_EMPTY(conveyors_by_id) /obj/machinery/conveyor/Initialize(mapload, new_dir, new_id) . = ..() AddElement(/datum/element/footstep_override, priority = STEP_SOUND_CONVEYOR_PRIORITY) - var/static/list/give_turf_traits = list(TRAIT_TURF_IGNORE_SLOWDOWN) - AddElement(/datum/element/give_turf_traits, give_turf_traits) + AddElement(/datum/element/give_turf_traits, string_list(list(TRAIT_TURF_IGNORE_SLOWDOWN))) register_context() if(new_dir) @@ -241,7 +240,7 @@ GLOBAL_LIST_EMPTY(conveyors_by_id) /obj/machinery/conveyor/proc/conveyable_enter(datum/source, atom/convayable) SIGNAL_HANDLER if(operating == CONVEYOR_OFF) - DSmove_manager.stop_looping(convayable, SSconveyors) + GLOB.move_manager.stop_looping(convayable, SSconveyors) return start_conveying(convayable) @@ -249,12 +248,12 @@ GLOBAL_LIST_EMPTY(conveyors_by_id) SIGNAL_HANDLER var/has_conveyor = neighbors["[direction]"] if(convayable.z != z || !has_conveyor || !isturf(convayable.loc)) //If you've entered something on us, stop moving - DSmove_manager.stop_looping(convayable, SSconveyors) + GLOB.move_manager.stop_looping(convayable, SSconveyors) /obj/machinery/conveyor/proc/start_conveying(atom/movable/moving) if(QDELETED(moving)) return - var/datum/move_loop/move/moving_loop = DSmove_manager.processing_on(moving, SSconveyors) + var/datum/move_loop/move/moving_loop = GLOB.move_manager.processing_on(moving, SSconveyors) if(moving_loop) moving_loop.direction = movedir moving_loop.delay = speed * 1 SECONDS @@ -268,7 +267,7 @@ GLOBAL_LIST_EMPTY(conveyors_by_id) /obj/machinery/conveyor/proc/stop_conveying(atom/movable/thing) if(!ismovable(thing)) return - DSmove_manager.stop_looping(thing, SSconveyors) + GLOB.move_manager.stop_looping(thing, SSconveyors) // attack with item, place item on conveyor /obj/machinery/conveyor/attackby(obj/item/attacking_item, mob/living/user, params) @@ -350,8 +349,6 @@ GLOBAL_LIST_EMPTY(conveyors_by_id) /// The current state of the switch. var/position = CONVEYOR_OFF - /// Last direction setting. - var/last_pos = CONVEYOR_BACKWARDS /// If the switch only operates the conveyor belts in a single direction. var/oneway = FALSE /// If the level points the opposite direction when it's turned on. @@ -372,6 +369,7 @@ GLOBAL_LIST_EMPTY(conveyors_by_id) AddComponent(/datum/component/usb_port, list( /obj/item/circuit_component/conveyor_switch, )) + register_context() /obj/machinery/conveyor_switch/Destroy() LAZYREMOVE(GLOB.conveyors_by_id[id], src) @@ -397,6 +395,27 @@ GLOBAL_LIST_EMPTY(conveyors_by_id) icon_state = "[base_icon_state]-[invert_icon ? "rev" : "fwd"]" return ..() +/obj/machinery/conveyor_switch/add_context(atom/source, list/context, obj/item/held_item, mob/user) + . = ..() + if(!held_item) + context[SCREENTIP_CONTEXT_LMB] = "Toggle forwards" + if(!oneway) + context[SCREENTIP_CONTEXT_RMB] = "Toggle backwards" + return CONTEXTUAL_SCREENTIP_SET + if(held_item.tool_behaviour == TOOL_MULTITOOL) + context[SCREENTIP_CONTEXT_LMB] = "Set speed" + context[SCREENTIP_CONTEXT_RMB] = "View wires" + return CONTEXTUAL_SCREENTIP_SET + if(held_item.tool_behaviour == TOOL_SCREWDRIVER) + context[SCREENTIP_CONTEXT_LMB] = "Toggle oneway" + return CONTEXTUAL_SCREENTIP_SET + if(held_item.tool_behaviour == TOOL_CROWBAR) + context[SCREENTIP_CONTEXT_LMB] = "Detach" + return CONTEXTUAL_SCREENTIP_SET + if(held_item.tool_behaviour == TOOL_WRENCH) + context[SCREENTIP_CONTEXT_LMB] = "Invert" + return CONTEXTUAL_SCREENTIP_SET + /// Updates all conveyor belts that are linked to this switch, and tells them to start processing. /obj/machinery/conveyor_switch/proc/update_linked_conveyors() for(var/obj/machinery/conveyor/belt in GLOB.conveyors_by_id[id]) @@ -414,29 +433,46 @@ GLOBAL_LIST_EMPTY(conveyors_by_id) CHECK_TICK /// Updates the switch's `position` and `last_pos` variable. Useful so that the switch can properly cycle between the forwards, backwards and neutral positions. -/obj/machinery/conveyor_switch/proc/update_position() +/obj/machinery/conveyor_switch/proc/update_position(direction) if(position == CONVEYOR_OFF) if(oneway) //is it a oneway switch position = oneway else - if(last_pos < CONVEYOR_OFF) + if(direction == CONVEYOR_FORWARD) position = CONVEYOR_FORWARD - last_pos = CONVEYOR_OFF else position = CONVEYOR_BACKWARDS - last_pos = CONVEYOR_OFF else - last_pos = position position = CONVEYOR_OFF -/// Called when a user clicks on this switch with an open hand. -/obj/machinery/conveyor_switch/interact(mob/user) +/obj/machinery/conveyor_switch/proc/on_user_activation(mob/user, direction) add_fingerprint(user) - update_position() + update_position(direction) update_appearance() update_linked_conveyors() update_linked_switches() +/// Called when a user clicks on this switch with an open hand. +/obj/machinery/conveyor_switch/attack_hand(mob/user, list/modifiers) + . = ..() + on_user_activation(user, CONVEYOR_FORWARD) + +/obj/machinery/conveyor_switch/attack_hand_secondary(mob/user, list/modifiers) + on_user_activation(user, CONVEYOR_BACKWARDS) + return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN + +/obj/machinery/conveyor_switch/attack_ai(mob/user) + return attack_hand(user) + +/obj/machinery/conveyor_switch/attack_ai_secondary(mob/user, list/modifiers) + return attack_hand_secondary(user, modifiers) + +/obj/machinery/conveyor_switch/attack_robot(mob/user) + return attack_hand(user) + +/obj/machinery/conveyor_switch/attack_robot_secondary(mob/user, list/modifiers) + return attack_hand_secondary(user, modifiers) + /obj/machinery/conveyor_switch/attackby(obj/item/attacking_item, mob/user, params) if(is_wire_tool(attacking_item)) wires.interact(user) @@ -507,10 +543,9 @@ GLOBAL_LIST_EMPTY(conveyors_by_id) belt.id = id to_chat(user, span_notice("You have linked all nearby conveyor belt assemblies to this switch.")) -/obj/item/conveyor_switch_construct/afterattack(atom/target, mob/user, proximity) - . = ..() - if(!proximity || user.stat || !isfloorturf(target) || istype(target, /area/shuttle)) - return +/obj/item/conveyor_switch_construct/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + if(!isfloorturf(interacting_with)) + return NONE var/found = FALSE for(var/obj/machinery/conveyor/belt in view()) @@ -519,10 +554,11 @@ GLOBAL_LIST_EMPTY(conveyors_by_id) break if(!found) to_chat(user, "[icon2html(src, user)]" + span_notice("The conveyor switch did not detect any linked conveyor belts in range.")) - return - var/obj/machinery/conveyor_switch/built_switch = new/obj/machinery/conveyor_switch(target, id) + return ITEM_INTERACT_BLOCKING + var/obj/machinery/conveyor_switch/built_switch = new/obj/machinery/conveyor_switch(interacting_with, id) transfer_fingerprints_to(built_switch) qdel(src) + return ITEM_INTERACT_SUCCESS /obj/item/stack/conveyor name = "conveyor belt assembly" @@ -540,17 +576,17 @@ GLOBAL_LIST_EMPTY(conveyors_by_id) . = ..() id = _id -/obj/item/stack/conveyor/afterattack(atom/target, mob/user, proximity) - . = ..() - if(!proximity || user.stat || !isfloorturf(target) || istype(target, /area/shuttle)) - return - var/belt_dir = get_dir(target, user) - if(target == user.loc) +/obj/item/stack/conveyor/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + if(!isfloorturf(interacting_with)) + return NONE + var/belt_dir = get_dir(interacting_with, user) + if(interacting_with == user.loc) to_chat(user, span_warning("You cannot place a conveyor belt under yourself!")) - return - var/obj/machinery/conveyor/belt = new/obj/machinery/conveyor(target, belt_dir, id) + return ITEM_INTERACT_BLOCKING + var/obj/machinery/conveyor/belt = new/obj/machinery/conveyor(interacting_with, belt_dir, id) transfer_fingerprints_to(belt) use(1) + return ITEM_INTERACT_SUCCESS /obj/item/stack/conveyor/attackby(obj/item/item_used, mob/user, params) ..() @@ -588,14 +624,19 @@ GLOBAL_LIST_EMPTY(conveyors_by_id) /obj/item/circuit_component/conveyor_switch display_name = "Conveyor Switch" desc = "Allows to control connected conveyor belts." - circuit_flags = CIRCUIT_FLAG_INPUT_SIGNAL + /// Direction input ports. + var/datum/port/input/stop + var/datum/port/input/active + var/datum/port/input/reverse /// The current direction of the conveyor attached to the component. var/datum/port/output/direction /// The switch this conveyor switch component is attached to. var/obj/machinery/conveyor_switch/attached_switch /obj/item/circuit_component/conveyor_switch/populate_ports() + active = add_input_port("Activate", PORT_TYPE_SIGNAL, trigger = PROC_REF(activate)) + stop = add_input_port("Stop", PORT_TYPE_SIGNAL, trigger = PROC_REF(stop)) direction = add_output_port("Conveyor Direction", PORT_TYPE_NUMBER) /obj/item/circuit_component/conveyor_switch/get_ui_notices() @@ -606,27 +647,34 @@ GLOBAL_LIST_EMPTY(conveyors_by_id) . = ..() if(istype(shell, /obj/machinery/conveyor_switch)) attached_switch = shell + if(!attached_switch.oneway) + reverse = add_input_port("Reverse", PORT_TYPE_SIGNAL, trigger = PROC_REF(reverse)) /obj/item/circuit_component/conveyor_switch/unregister_usb_parent(atom/movable/shell) attached_switch = null return ..() -/obj/item/circuit_component/conveyor_switch/input_received(datum/port/input/port) - if(!attached_switch) - return - - INVOKE_ASYNC(src, PROC_REF(update_conveyors), port) - -/obj/item/circuit_component/conveyor_switch/proc/update_conveyors(datum/port/input/port) - if(!attached_switch) - return - - attached_switch.update_position() +/obj/item/circuit_component/conveyor_switch/proc/on_switch_changed() attached_switch.update_appearance() attached_switch.update_linked_conveyors() attached_switch.update_linked_switches() direction.set_output(attached_switch.position) +/obj/item/circuit_component/conveyor_switch/proc/activate() + SIGNAL_HANDLER + attached_switch.position = CONVEYOR_FORWARD + INVOKE_ASYNC(src, PROC_REF(on_switch_changed)) + +/obj/item/circuit_component/conveyor_switch/proc/stop() + SIGNAL_HANDLER + attached_switch.position = CONVEYOR_OFF + INVOKE_ASYNC(src, PROC_REF(on_switch_changed)) + +/obj/item/circuit_component/conveyor_switch/proc/reverse() + SIGNAL_HANDLER + attached_switch.position = CONVEYOR_BACKWARDS + INVOKE_ASYNC(src, PROC_REF(on_switch_changed)) + #undef CONVEYOR_BACKWARDS #undef CONVEYOR_OFF #undef CONVEYOR_FORWARD diff --git a/code/modules/recycling/disposal/bin.dm b/code/modules/recycling/disposal/bin.dm index 4acb1aa0a33c6..4b54cf9f4b023 100644 --- a/code/modules/recycling/disposal/bin.dm +++ b/code/modules/recycling/disposal/bin.dm @@ -164,7 +164,7 @@ user.visible_message(span_notice("[user.name] places \the [I] into \the [src]."), span_notice("You place \the [I] into \the [src].")) /// Mouse drop another mob or self -/obj/machinery/disposal/MouseDrop_T(mob/living/target, mob/living/user) +/obj/machinery/disposal/mouse_drop_receive(mob/living/target, mob/living/user, params) if(istype(target)) stuff_mob_in(target, user) @@ -241,7 +241,7 @@ flushing = TRUE flushAnimation() sleep(1 SECONDS) - if(last_sound < world.time + 1) + if(last_sound < world.time - 1) //Prevents piles of items from playing a dozen sounds at once playsound(src, 'sound/machines/disposalflush.ogg', 50, FALSE, FALSE) last_sound = world.time sleep(0.5 SECONDS) diff --git a/code/modules/recycling/disposal/construction.dm b/code/modules/recycling/disposal/construction.dm index 903a59a930557..13f43b1f4a419 100644 --- a/code/modules/recycling/disposal/construction.dm +++ b/code/modules/recycling/disposal/construction.dm @@ -109,7 +109,7 @@ var/turf/T = get_turf(src) if(T.underfloor_accessibility < UNDERFLOOR_INTERACTABLE && isfloorturf(T)) - var/obj/item/crowbar/held_crowbar = user.is_holding_item_of_type(/obj/item/crowbar) + var/obj/item/crowbar/held_crowbar = user.is_holding_tool_quality(TOOL_CROWBAR) if(!held_crowbar || !T.crowbar_act(user, held_crowbar)) to_chat(user, span_warning("You can only attach the [pipename] if the floor plating is removed!")) return TRUE diff --git a/code/modules/recycling/disposal/holder.dm b/code/modules/recycling/disposal/holder.dm index ecc33c240bf6e..b842a69413d7d 100644 --- a/code/modules/recycling/disposal/holder.dm +++ b/code/modules/recycling/disposal/holder.dm @@ -78,7 +78,7 @@ /// Starts the movement process, persists while the holder is moving through pipes /obj/structure/disposalholder/proc/start_moving() var/delay = world.tick_lag - var/datum/move_loop/our_loop = DSmove_manager.move_disposals(src, delay = delay, timeout = delay * count) + var/datum/move_loop/our_loop = GLOB.move_manager.move_disposals(src, delay = delay, timeout = delay * count) if(our_loop) RegisterSignal(our_loop, COMSIG_MOVELOOP_PREPROCESS_CHECK, PROC_REF(pre_move)) RegisterSignal(our_loop, COMSIG_MOVELOOP_POSTPROCESS, PROC_REF(try_expel)) diff --git a/code/modules/recycling/sortingmachinery.dm b/code/modules/recycling/sortingmachinery.dm index 8c46de58a98b2..a6be96a43a811 100644 --- a/code/modules/recycling/sortingmachinery.dm +++ b/code/modules/recycling/sortingmachinery.dm @@ -113,7 +113,7 @@ sort_tag = dest_tagger.currTag playsound(loc, 'sound/machines/twobeep_high.ogg', 100, TRUE) update_appearance() - else if(istype(item, /obj/item/pen)) + else if(IS_WRITING_UTENSIL(item)) if(!user.can_write(item)) return var/str = tgui_input_text(user, "Label text?", "Set label", max_length = MAX_NAME_LEN) @@ -252,7 +252,7 @@ unwrap_contents() post_unwrap_contents(user) - return COMPONENT_CANCEL_ATTACK_CHAIN + return ITEM_INTERACT_BLOCKING /obj/item/dest_tagger name = "destination tagger" @@ -395,10 +395,10 @@ new_barcode.cut_multiplier = cut_multiplier // Also the registered percent cut. user.put_in_hands(new_barcode) -/obj/item/sales_tagger/CtrlClick(mob/user) - . = ..() +/obj/item/sales_tagger/item_ctrl_click(mob/user) payments_acc = null to_chat(user, span_notice("You clear the registered account.")) + return CLICK_ACTION_SUCCESS /obj/item/sales_tagger/click_alt(mob/user) var/potential_cut = input("How much would you like to pay out to the registered card?","Percentage Profit ([round(cut_min*100)]% - [round(cut_max*100)]%)") as num|null diff --git a/code/modules/religion/religion_sects.dm b/code/modules/religion/religion_sects.dm index 5d5d3909ec759..0789cb2ac2086 100644 --- a/code/modules/religion/religion_sects.dm +++ b/code/modules/religion/religion_sects.dm @@ -146,7 +146,7 @@ do not heal organic limbs. You can now sacrifice cells, with favor depending on their charge." tgui_icon = "robot" alignment = ALIGNMENT_NEUT - desired_items = list(/obj/item/stock_parts/cell = "with battery charge") + desired_items = list(/obj/item/stock_parts/power_store = "with battery charge") rites_list = list(/datum/religion_rites/synthconversion, /datum/religion_rites/machine_blessing) altar_icon_state = "convertaltar-blue" max_favor = 2500 @@ -196,7 +196,7 @@ blessed.add_mood_event("blessing", /datum/mood_event/blessing) return TRUE -/datum/religion_sect/mechanical/on_sacrifice(obj/item/stock_parts/cell/power_cell, mob/living/chap) +/datum/religion_sect/mechanical/on_sacrifice(obj/item/stock_parts/power_store/cell/power_cell, mob/living/chap) if(!istype(power_cell)) return @@ -238,7 +238,7 @@ to_chat(user, span_notice("The candle needs to be lit to be offered!")) return to_chat(user, span_notice("[GLOB.deity] is pleased with your sacrifice.")) - adjust_favor(50, user) //it's not a lot but hey there's a pacifist favor option at least + adjust_favor(40, user) //it's not a lot but hey there's a pacifist favor option at least qdel(offering) return TRUE diff --git a/code/modules/religion/rites.dm b/code/modules/religion/rites.dm index af02fa721177f..d7d0fa818441c 100644 --- a/code/modules/religion/rites.dm +++ b/code/modules/religion/rites.dm @@ -128,13 +128,36 @@ /datum/religion_rites/machine_blessing/invoke_effect(mob/living/user, atom/movable/religious_tool) ..() var/altar_turf = get_turf(religious_tool) - var/blessing = pick( - /obj/item/organ/internal/cyberimp/arm/surgery, - /obj/item/organ/internal/cyberimp/eyes/hud/diagnostic, - /obj/item/organ/internal/cyberimp/eyes/hud/medical, - /obj/item/organ/internal/cyberimp/mouth/breathing_tube, - /obj/item/organ/internal/cyberimp/chest/thrusters, - /obj/item/organ/internal/eyes/robotic/glow, + var/blessing = pick_weight_recursive( + list( + // Arms + list( + /obj/item/organ/internal/cyberimp/arm/combat = 1, + /obj/item/organ/internal/cyberimp/arm/surgery = 1000000, + /obj/item/organ/internal/cyberimp/arm/toolset = 1500000, + ) = 15, + // Eyes + list( + /obj/item/organ/internal/cyberimp/eyes/hud/diagnostic = 1, + /obj/item/organ/internal/cyberimp/eyes/hud/medical = 1, + /obj/item/organ/internal/eyes/robotic/glow = 1, + /obj/item/organ/internal/eyes/robotic/shield = 2, + ) = 15, + // Chest + list( + /obj/item/organ/internal/cyberimp/chest/reviver = 1, + /obj/item/organ/internal/cyberimp/chest/thrusters = 2, + ) = 9, + // Brain / Head + list( + /obj/item/organ/internal/cyberimp/brain/anti_drop = 100, + /obj/item/organ/internal/cyberimp/brain/anti_stun = 10, + ) = 10, + // Misc + list( + /obj/item/organ/internal/cyberimp/mouth/breathing_tube = 1, + ) = 5, + ) ) new blessing(altar_turf) return TRUE @@ -391,7 +414,7 @@ /datum/religion_rites/ceremonial_weapon/perform_rite(mob/living/user, atom/religious_tool) for(var/obj/item/stack/sheet/could_blade in get_turf(religious_tool)) - if(!(GET_MATERIAL_REF(could_blade.material_type) in DSmaterials.materials_by_category[MAT_CATEGORY_ITEM_MATERIAL])) + if(!(GET_MATERIAL_REF(could_blade.material_type) in SSmaterials.materials_by_category[MAT_CATEGORY_ITEM_MATERIAL])) continue if(could_blade.amount < 5) continue diff --git a/code/modules/research/anomaly/anomaly_refinery.dm b/code/modules/research/anomaly/anomaly_refinery.dm index 1805a25231833..bae2b4f116261 100644 --- a/code/modules/research/anomaly/anomaly_refinery.dm +++ b/code/modules/research/anomaly/anomaly_refinery.dm @@ -60,10 +60,12 @@ * * anomaly_type - anomaly type define */ /obj/machinery/research/anomaly_refinery/proc/get_required_radius(anomaly_type) + if(!SSresearch.is_core_available(anomaly_type)) + return //return null + var/already_made = SSresearch.created_anomaly_types[anomaly_type] var/hard_limit = SSresearch.anomaly_hard_limit_by_type[anomaly_type] - if(already_made >= hard_limit) - return //return null + // my crappy autoscale formula // linear scaling. var/radius_span = MAX_RADIUS_REQUIRED - MIN_RADIUS_REQUIRED diff --git a/code/modules/research/anomaly/raw_anomaly.dm b/code/modules/research/anomaly/raw_anomaly.dm index 2df844e4bb808..d86ed1f1d9d45 100644 --- a/code/modules/research/anomaly/raw_anomaly.dm +++ b/code/modules/research/anomaly/raw_anomaly.dm @@ -91,7 +91,13 @@ /obj/item/raw_anomaly_core/proc/create_core(newloc, del_self = FALSE, count_towards_limit = FALSE) . = new anomaly_type(newloc) if(count_towards_limit) - var/existing = SSresearch.created_anomaly_types[anomaly_type] || 0 - SSresearch.created_anomaly_types[anomaly_type] = existing + 1 + SSresearch.increment_existing_anomaly_cores(anomaly_type) if(del_self) qdel(src) + +/// Doesn't do anything, consolation prize if you neu +/obj/item/inert_anomaly + name = "inert anomaly core" + desc = "A chunk of fused exotic materials. Useless to you, but some other lab might purchase it." + icon = 'icons/obj/devices/new_assemblies.dmi' + icon_state = "rawcore_inert" diff --git a/code/modules/research/designs.dm b/code/modules/research/designs.dm index b196a06d30118..0420c732637a1 100644 --- a/code/modules/research/designs.dm +++ b/code/modules/research/designs.dm @@ -41,8 +41,6 @@ other types of metals and chemistry for reagents). var/list/category = list() /// List of reagents required to create one unit of the product. Currently only supported by the limb grower. var/list/reagents_list = list() - /// The maximum number of units of whatever is produced by this can be produced in one go. - var/maxstack = 1 /// How many times faster than normal is this to build on the protolathe var/lathe_time_factor = 1 /// Bitflags indicating what departmental lathes should be allowed to process this design. diff --git a/code/modules/research/designs/AI_module_designs.dm b/code/modules/research/designs/AI_module_designs.dm index f45ca0e314879..715bd96472545 100644 --- a/code/modules/research/designs/AI_module_designs.dm +++ b/code/modules/research/designs/AI_module_designs.dm @@ -210,6 +210,17 @@ ) departmental_flags = DEPARTMENT_BITFLAG_SCIENCE +/datum/design/board/yesman_module + name = "Y.E.S.M.A.N. Module" + desc = "Allows for the construction of a Y.E.S.M.A.N. AI Core Module." + id = "yesman_module" + materials = list(/datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, /datum/material/diamond = SHEET_MATERIAL_AMOUNT, /datum/material/bluespace = HALF_SHEET_MATERIAL_AMOUNT) + build_path = /obj/item/ai_module/core/full/yesman + category = list( + RND_CATEGORY_AI + RND_SUBCATEGORY_AI_CORE_MODULES + ) + departmental_flags = DEPARTMENT_BITFLAG_SCIENCE + /datum/design/board/nutimov_module name = "Nutimov Module" desc = "Allows for the construction of a Nutimov AI Core Module." diff --git a/code/modules/research/designs/autolathe/engineering_designs.dm b/code/modules/research/designs/autolathe/engineering_designs.dm index 945966035f3d1..c376a1ac1c55a 100644 --- a/code/modules/research/designs/autolathe/engineering_designs.dm +++ b/code/modules/research/designs/autolathe/engineering_designs.dm @@ -10,18 +10,6 @@ ) departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING -/datum/design/sparker - name = "Sparker WallFrame" - id = "sparker" - build_type = PROTOLATHE | AWAY_LATHE | AUTOLATHE - materials = list(/datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT) - build_path = /obj/item/wallframe/sparker - category = list( - RND_CATEGORY_INITIAL, - RND_CATEGORY_CONSTRUCTION + RND_SUBCATEGORY_CONSTRUCTION_MOUNTS, - ) - departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING - /datum/design/tracker_electronics name = "Solar Tracking Electronics" id = "solar_tracker" @@ -76,7 +64,7 @@ id = "miniature_power_cell" build_type = AUTOLATHE | PROTOLATHE | AWAY_LATHE materials = list(/datum/material/glass =SMALL_MATERIAL_AMOUNT*0.2) - build_path = /obj/item/stock_parts/cell/emergency_light + build_path = /obj/item/stock_parts/power_store/cell/emergency_light category = list( RND_CATEGORY_INITIAL, RND_CATEGORY_CONSTRUCTION + RND_SUBCATEGORY_CONSTRUCTION_LIGHTING, @@ -95,18 +83,6 @@ ) departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING -/datum/design/turret_control_frame - name = "Turret Control Frame" - id = "turret_control" - build_type = AUTOLATHE | PROTOLATHE | AWAY_LATHE - materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT*6) - build_path = /obj/item/wallframe/turret_control - category = list( - RND_CATEGORY_INITIAL, - RND_CATEGORY_CONSTRUCTION + RND_SUBCATEGORY_CONSTRUCTION_MOUNTS, - ) - departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING - /datum/design/large_welding_tool name = "Industrial Welding Tool" id = "large_welding_tool" @@ -119,55 +95,6 @@ ) departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING -/datum/design/camera_assembly - name = "Camera Assembly" - id = "camera_assembly" - build_type = AUTOLATHE | PROTOLATHE | AWAY_LATHE - materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT*4, /datum/material/glass = SMALL_MATERIAL_AMOUNT*2.5) - build_path = /obj/item/wallframe/camera - category = list( - RND_CATEGORY_INITIAL, - RND_CATEGORY_CONSTRUCTION + RND_SUBCATEGORY_CONSTRUCTION_MOUNTS, - ) - departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING - -/datum/design/newscaster_frame - name = "Newscaster Frame" - id = "newscaster_frame" - build_type = AUTOLATHE | PROTOLATHE | AWAY_LATHE - materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT*7, /datum/material/glass = SHEET_MATERIAL_AMOUNT*4) - build_path = /obj/item/wallframe/newscaster - category = list( - RND_CATEGORY_INITIAL, - RND_CATEGORY_CONSTRUCTION + RND_SUBCATEGORY_CONSTRUCTION_MOUNTS, - ) - departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING - -/datum/design/status_display_frame - name = "Status Display Frame" - id = "status_display_frame" - build_type = AUTOLATHE | PROTOLATHE | AWAY_LATHE - materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT*7, /datum/material/glass = SHEET_MATERIAL_AMOUNT*4) - build_path = /obj/item/wallframe/status_display - category = list( - RND_CATEGORY_INITIAL, - RND_CATEGORY_CONSTRUCTION + RND_SUBCATEGORY_CONSTRUCTION_MOUNTS, - ) - departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING - - -/datum/design/intercom_frame - name = "Intercom Frame" - id = "intercom_frame" - build_type = AUTOLATHE | PROTOLATHE | AWAY_LATHE - materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT*0.75, /datum/material/glass =SMALL_MATERIAL_AMOUNT*0.25) - build_path = /obj/item/wallframe/intercom - category = list( - RND_CATEGORY_INITIAL, - RND_CATEGORY_CONSTRUCTION + RND_SUBCATEGORY_CONSTRUCTION_MOUNTS, - ) - departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING - /datum/design/earmuffs name = "Earmuffs" id = "earmuffs" @@ -323,132 +250,3 @@ RND_CATEGORY_TOOLS + RND_SUBCATEGORY_TOOLS_ATMOSPHERICS, ) departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING - -/datum/design/requests_console - name = "Requests Console Frame" - id = "requests_console" - build_type = AUTOLATHE | PROTOLATHE - materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT*7, /datum/material/glass = SHEET_MATERIAL_AMOUNT*4) - build_path = /obj/item/wallframe/requests_console - category = list( - RND_CATEGORY_INITIAL, - RND_CATEGORY_CONSTRUCTION + RND_SUBCATEGORY_CONSTRUCTION_MOUNTS - ) - departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING - -/datum/design/light_switch_frame - name = "Light Switch Frame" - id = "light_switch_frame" - build_type = AUTOLATHE | PROTOLATHE | AWAY_LATHE - materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT*0.75, /datum/material/glass =SMALL_MATERIAL_AMOUNT*0.25) - build_path = /obj/item/wallframe/light_switch - category = list( - RND_CATEGORY_INITIAL, - RND_CATEGORY_CONSTRUCTION + RND_SUBCATEGORY_CONSTRUCTION_MOUNTS - ) - departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING - -/datum/design/telescreen_turbine - name = "Turbine Telescreen" - id = "telescreen_turbine" - build_type = PROTOLATHE - materials = list( - /datum/material/iron = SHEET_MATERIAL_AMOUNT*5, - /datum/material/glass =SHEET_MATERIAL_AMOUNT * 2.5, - ) - build_path = /obj/item/wallframe/telescreen/turbine - category = list( - RND_CATEGORY_INITIAL, - RND_CATEGORY_CONSTRUCTION + RND_SUBCATEGORY_CONSTRUCTION_MOUNTS, - ) - departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING - -/datum/design/telescreen_engine - name = "Engine Telescreen" - id = "telescreen_engine" - build_type = PROTOLATHE - materials = list( - /datum/material/iron = SHEET_MATERIAL_AMOUNT*5, - /datum/material/glass =SHEET_MATERIAL_AMOUNT * 2.5, - ) - build_path = /obj/item/wallframe/telescreen/engine - category = list( - RND_CATEGORY_INITIAL, - RND_CATEGORY_CONSTRUCTION + RND_SUBCATEGORY_CONSTRUCTION_MOUNTS, - ) - departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING - -/datum/design/telescreen_auxbase - name = "Auxiliary Base Telescreen" - id = "telescreen_auxbase" - build_type = PROTOLATHE - materials = list( - /datum/material/iron = SHEET_MATERIAL_AMOUNT*5, - /datum/material/glass =SHEET_MATERIAL_AMOUNT * 2.5, - ) - build_path = /obj/item/wallframe/telescreen/auxbase - category = list( - RND_CATEGORY_INITIAL, - RND_CATEGORY_CONSTRUCTION + RND_SUBCATEGORY_CONSTRUCTION_MOUNTS, - ) - departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING - -/datum/design/tram_controller - name = "Tram Controller Cabinet" - id = "tram_controller" - build_type = PROTOLATHE - materials = list( - /datum/material/titanium = SHEET_MATERIAL_AMOUNT * 4, - /datum/material/iron = SHEET_MATERIAL_AMOUNT * 2, - /datum/material/gold = SHEET_MATERIAL_AMOUNT * 7, - /datum/material/silver = SHEET_MATERIAL_AMOUNT * 7, - /datum/material/diamond = SHEET_MATERIAL_AMOUNT * 4, - ) - build_path = /obj/item/wallframe/tram/controller - category = list( - RND_CATEGORY_INITIAL, - RND_CATEGORY_CONSTRUCTION + RND_SUBCATEGORY_CONSTRUCTION_MOUNTS, - ) - departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING - -/datum/design/tram_display - name = "Tram Indicator Display" - id = "tram_display" - build_type = PROTOLATHE - materials = list( - /datum/material/titanium = SHEET_MATERIAL_AMOUNT * 4, - /datum/material/iron = SHEET_MATERIAL_AMOUNT * 1, - /datum/material/glass =SHEET_MATERIAL_AMOUNT * 2, - ) - build_path = /obj/item/wallframe/indicator_display - category = list( - RND_CATEGORY_INITIAL, - RND_CATEGORY_CONSTRUCTION + RND_SUBCATEGORY_CONSTRUCTION_MOUNTS, - ) - departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING - -/datum/design/tram_floor_dark - name = "Dark Tram Tile" - id = "tram_floor_dark" - build_type = PROTOLATHE - materials = list(/datum/material/plastic = SHEET_MATERIAL_AMOUNT * 0.25) - build_path = /obj/item/stack/thermoplastic - maxstack = 50 - category = list( - RND_CATEGORY_INITIAL, - RND_CATEGORY_CONSTRUCTION + RND_SUBCATEGORY_CONSTRUCTION_MATERIALS, - ) - departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING - -/datum/design/tram_floor_light - name = "Light Tram Tile" - id = "tram_floor_light" - build_type = PROTOLATHE - materials = list(/datum/material/plastic = SHEET_MATERIAL_AMOUNT * 0.25) - build_path = /obj/item/stack/thermoplastic/light - maxstack = 50 - category = list( - RND_CATEGORY_INITIAL, - RND_CATEGORY_CONSTRUCTION + RND_SUBCATEGORY_CONSTRUCTION_MATERIALS, - ) - departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING diff --git a/code/modules/research/designs/autolathe/materials.dm b/code/modules/research/designs/autolathe/materials.dm index 5805005a39739..cc07a59ea7e2c 100644 --- a/code/modules/research/designs/autolathe/materials.dm +++ b/code/modules/research/designs/autolathe/materials.dm @@ -8,7 +8,6 @@ RND_CATEGORY_INITIAL, RND_CATEGORY_CONSTRUCTION + RND_SUBCATEGORY_CONSTRUCTION_MATERIALS, ) - maxstack = 50 /datum/design/rods name = "Iron Rod" @@ -20,7 +19,6 @@ RND_CATEGORY_INITIAL, RND_CATEGORY_CONSTRUCTION + RND_SUBCATEGORY_CONSTRUCTION_MATERIALS, ) - maxstack = 50 /datum/design/glass name = "Glass" @@ -32,7 +30,6 @@ RND_CATEGORY_INITIAL, RND_CATEGORY_CONSTRUCTION + RND_SUBCATEGORY_CONSTRUCTION_MATERIALS, ) - maxstack = 50 /datum/design/rglass name = "Reinforced Glass" @@ -44,7 +41,6 @@ RND_CATEGORY_INITIAL, RND_CATEGORY_CONSTRUCTION + RND_SUBCATEGORY_CONSTRUCTION_MATERIALS, ) - maxstack = 50 departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING | DEPARTMENT_BITFLAG_SCIENCE /datum/design/silver @@ -57,7 +53,6 @@ RND_CATEGORY_INITIAL, RND_CATEGORY_CONSTRUCTION + RND_SUBCATEGORY_CONSTRUCTION_MATERIALS, ) - maxstack = 50 /datum/design/gold name = "Gold" @@ -69,7 +64,6 @@ RND_CATEGORY_INITIAL, RND_CATEGORY_CONSTRUCTION + RND_SUBCATEGORY_CONSTRUCTION_MATERIALS, ) - maxstack = 50 /datum/design/diamond name = "Diamond" @@ -81,7 +75,6 @@ RND_CATEGORY_INITIAL, RND_CATEGORY_CONSTRUCTION + RND_SUBCATEGORY_CONSTRUCTION_MATERIALS, ) - maxstack = 50 /datum/design/plasma name = "Plasma" @@ -93,7 +86,6 @@ RND_CATEGORY_INITIAL, RND_CATEGORY_CONSTRUCTION + RND_SUBCATEGORY_CONSTRUCTION_MATERIALS, ) - maxstack = 50 /datum/design/uranium name = "Uranium" @@ -105,7 +97,6 @@ RND_CATEGORY_INITIAL, RND_CATEGORY_CONSTRUCTION + RND_SUBCATEGORY_CONSTRUCTION_MATERIALS, ) - maxstack = 50 /datum/design/bananium name = "Bananium" @@ -117,7 +108,6 @@ RND_CATEGORY_INITIAL, RND_CATEGORY_CONSTRUCTION + RND_SUBCATEGORY_CONSTRUCTION_MATERIALS, ) - maxstack = 50 /datum/design/titanium name = "Titanium" @@ -129,7 +119,6 @@ RND_CATEGORY_INITIAL, RND_CATEGORY_CONSTRUCTION + RND_SUBCATEGORY_CONSTRUCTION_MATERIALS, ) - maxstack = 50 /datum/design/plastic name = "Plastic" @@ -141,4 +130,3 @@ RND_CATEGORY_INITIAL, RND_CATEGORY_CONSTRUCTION + RND_SUBCATEGORY_CONSTRUCTION_MATERIALS, ) - maxstack = 50 diff --git a/code/modules/research/designs/autolathe/multi-department_designs.dm b/code/modules/research/designs/autolathe/multi-department_designs.dm index 30787a1a0729d..734dcbc97e084 100644 --- a/code/modules/research/designs/autolathe/multi-department_designs.dm +++ b/code/modules/research/designs/autolathe/multi-department_designs.dm @@ -32,7 +32,8 @@ RND_CATEGORY_TOOLS + RND_SUBCATEGORY_TOOLS_ENGINEERING, ) departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING | DEPARTMENT_BITFLAG_SCIENCE - + + /datum/design/tscanner name = "T-Ray Scanner" id = "tscanner" @@ -153,16 +154,15 @@ departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING | DEPARTMENT_BITFLAG_SCIENCE /datum/design/cable_coil - name = "Cable Coil" + name = "Cable (x5)" id = "cable_coil" build_type = AUTOLATHE | PROTOLATHE | AWAY_LATHE - materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT*0.1, /datum/material/glass = SMALL_MATERIAL_AMOUNT*0.1) - build_path = /obj/item/stack/cable_coil + materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT*0.5, /datum/material/glass = SMALL_MATERIAL_AMOUNT*0.5) + build_path = /obj/item/stack/cable_coil/five category = list( RND_CATEGORY_INITIAL, RND_CATEGORY_TOOLS + RND_SUBCATEGORY_TOOLS_ENGINEERING, ) - maxstack = MAXCOIL departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING | DEPARTMENT_BITFLAG_SCIENCE /datum/design/toolbox @@ -429,7 +429,6 @@ build_type = AUTOLATHE | PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron =SMALL_MATERIAL_AMOUNT*5) build_path = /obj/item/stack/ducts - maxstack = 50 category = list( RND_CATEGORY_INITIAL, RND_CATEGORY_TOOLS + RND_SUBCATEGORY_TOOLS_PLUMBING, @@ -470,7 +469,6 @@ RND_CATEGORY_INITIAL, RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_SERVICE, ) - maxstack = 30 departmental_flags = DEPARTMENT_BITFLAG_SERVICE | DEPARTMENT_BITFLAG_CARGO /datum/design/holodisk @@ -485,53 +483,12 @@ ) departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING | DEPARTMENT_BITFLAG_SCIENCE -/datum/design/circuit - name = "Blue Circuit Tile" - id = "circuit" - build_type = AUTOLATHE | PROTOLATHE | AWAY_LATHE - materials = list(/datum/material/iron =SMALL_MATERIAL_AMOUNT*5, /datum/material/glass =SMALL_MATERIAL_AMOUNT*5) - build_path = /obj/item/stack/tile/circuit - maxstack = 50 - category = list( - RND_CATEGORY_INITIAL, - RND_CATEGORY_CONSTRUCTION + RND_SUBCATEGORY_CONSTRUCTION_MATERIALS, - ) - departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING | DEPARTMENT_BITFLAG_SCIENCE - - -/datum/design/circuitgreen - name = "Green Circuit Tile" - id = "circuitgreen" - build_type = AUTOLATHE | PROTOLATHE | AWAY_LATHE - materials = list(/datum/material/iron =SMALL_MATERIAL_AMOUNT*5, /datum/material/glass =SMALL_MATERIAL_AMOUNT*5) - build_path = /obj/item/stack/tile/circuit/green - maxstack = 50 - category = list( - RND_CATEGORY_INITIAL, - RND_CATEGORY_CONSTRUCTION + RND_SUBCATEGORY_CONSTRUCTION_MATERIALS, - ) - departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING | DEPARTMENT_BITFLAG_SCIENCE - -/datum/design/circuitred - name = "Red Circuit Tile" - id = "circuitred" - build_type = AUTOLATHE | PROTOLATHE | AWAY_LATHE - materials = list(/datum/material/iron =SMALL_MATERIAL_AMOUNT*5, /datum/material/glass =SMALL_MATERIAL_AMOUNT*5) - build_path = /obj/item/stack/tile/circuit/red - maxstack = 50 - category = list( - RND_CATEGORY_INITIAL, - RND_CATEGORY_CONSTRUCTION + RND_SUBCATEGORY_CONSTRUCTION_MATERIALS, - ) - departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING | DEPARTMENT_BITFLAG_SCIENCE - /datum/design/conveyor_belt name = "Conveyor Belt" id = "conveyor_belt" build_type = AUTOLATHE | PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron =SHEET_MATERIAL_AMOUNT * 1.5) build_path = /obj/item/stack/conveyor - maxstack = 30 category = list( RND_CATEGORY_INITIAL, RND_CATEGORY_CONSTRUCTION + RND_SUBCATEGORY_CONSTRUCTION_MACHINERY, diff --git a/code/modules/research/designs/autolathe/service_designs.dm b/code/modules/research/designs/autolathe/service_designs.dm index e34fc5166c89c..e7177037e522c 100644 --- a/code/modules/research/designs/autolathe/service_designs.dm +++ b/code/modules/research/designs/autolathe/service_designs.dm @@ -474,7 +474,6 @@ materials = list(/datum/material/plastic =SMALL_MATERIAL_AMOUNT*5) build_path = /obj/item/stack/sticky_tape category = list(RND_CATEGORY_INITIAL, RND_CATEGORY_EQUIPMENT) - maxstack = 5 category = list( RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_SERVICE, ) diff --git a/code/modules/research/designs/computer_part_designs.dm b/code/modules/research/designs/computer_part_designs.dm index 8dab08c046d45..7a8242642a13a 100644 --- a/code/modules/research/designs/computer_part_designs.dm +++ b/code/modules/research/designs/computer_part_designs.dm @@ -5,10 +5,11 @@ /datum/design/portabledrive/basic name = "Data Disk" id = "portadrive_basic" - build_type = IMPRINTER | AWAY_IMPRINTER - materials = list(/datum/material/glass = SMALL_MATERIAL_AMOUNT*8) + build_type = AUTOLATHE | PROTOLATHE | AWAY_LATHE + materials = list(/datum/material/glass = SHEET_MATERIAL_AMOUNT) build_path = /obj/item/computer_disk category = list( + RND_CATEGORY_INITIAL, RND_CATEGORY_MODULAR_COMPUTERS + RND_SUBCATEGORY_MODULAR_COMPUTERS_PARTS ) departmental_flags = DEPARTMENT_BITFLAG_SCIENCE | DEPARTMENT_BITFLAG_ENGINEERING @@ -16,10 +17,11 @@ /datum/design/portabledrive/advanced name = "Advanced Data Disk" id = "portadrive_advanced" - build_type = IMPRINTER | AWAY_IMPRINTER - materials = list(/datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT*1.5) + build_type = AUTOLATHE | PROTOLATHE | AWAY_LATHE + materials = list(/datum/material/glass = SHEET_MATERIAL_AMOUNT * 2) build_path = /obj/item/computer_disk/advanced category = list( + RND_CATEGORY_INITIAL, RND_CATEGORY_MODULAR_COMPUTERS + RND_SUBCATEGORY_MODULAR_COMPUTERS_PARTS ) departmental_flags = DEPARTMENT_BITFLAG_SCIENCE | DEPARTMENT_BITFLAG_ENGINEERING @@ -27,10 +29,11 @@ /datum/design/portabledrive/super name = "Super Data Disk" id = "portadrive_super" - build_type = IMPRINTER | AWAY_IMPRINTER - materials = list(/datum/material/glass = SHEET_MATERIAL_AMOUNT*1.5) + build_type = AUTOLATHE | PROTOLATHE | AWAY_LATHE + materials = list(/datum/material/glass = SHEET_MATERIAL_AMOUNT * 4) build_path = /obj/item/computer_disk/super category = list( + RND_CATEGORY_INITIAL, RND_CATEGORY_MODULAR_COMPUTERS + RND_SUBCATEGORY_MODULAR_COMPUTERS_PARTS ) departmental_flags = DEPARTMENT_BITFLAG_SCIENCE | DEPARTMENT_BITFLAG_ENGINEERING diff --git a/code/modules/research/designs/machine_designs.dm b/code/modules/research/designs/machine_designs.dm index 65dd75142a287..8f857f77e8286 100644 --- a/code/modules/research/designs/machine_designs.dm +++ b/code/modules/research/designs/machine_designs.dm @@ -747,7 +747,6 @@ name = "NTNet Relay Board" desc = "The circuit board for a wireless network relay." id = "ntnet_relay" - build_type = IMPRINTER build_path = /obj/item/circuitboard/machine/ntnet_relay category = list( RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_TELECOMMS @@ -1168,3 +1167,33 @@ RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_TELEPORT, ) departmental_flags = DEPARTMENT_BITFLAG_CARGO + +/datum/design/board/flatpacker + name = "Flatpacker Machine Board" + desc = "The circuit board for a Flatpacker." + id = "flatpacker" + build_path = /obj/item/circuitboard/machine/flatpacker + category = list( + RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_ENGINEERING + ) + departmental_flags = DEPARTMENT_BITFLAG_SCIENCE | DEPARTMENT_BITFLAG_ENGINEERING + +/datum/design/board/bookbinder + name = "Book Binder" + desc = "The circuit board for a book binder" + id = "bookbinder" + build_path = /obj/item/circuitboard/machine/bookbinder + category = list( + RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_SERVICE + ) + departmental_flags = DEPARTMENT_BITFLAG_SERVICE + +/datum/design/board/libraryscanner + name = "Book Scanner" + desc = "The circuit board for a book scanner" + id = "libraryscanner" + build_path = /obj/item/circuitboard/machine/libraryscanner + category = list( + RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_SERVICE + ) + departmental_flags = DEPARTMENT_BITFLAG_SERVICE diff --git a/code/modules/research/designs/mechfabricator_designs.dm b/code/modules/research/designs/mechfabricator_designs.dm index 819c17662af76..0583269f1c6be 100644 --- a/code/modules/research/designs/mechfabricator_designs.dm +++ b/code/modules/research/designs/mechfabricator_designs.dm @@ -1260,7 +1260,7 @@ name = "Diamond Drill" id = "borg_upgrade_diamonddrill" build_type = MECHFAB - build_path = /obj/item/borg/upgrade/ddrill + build_path = /obj/item/borg/upgrade/diamond_drill materials = list( /datum/material/iron=SHEET_MATERIAL_AMOUNT*5, /datum/material/glass =SHEET_MATERIAL_AMOUNT*3, @@ -2605,3 +2605,21 @@ category = list( RND_CATEGORY_MODSUIT_MODULES + RND_SUBCATEGORY_MODSUIT_MODULES_ENGINEERING ) + +/datum/design/posisphere + name = "Positronic Sphere" + desc = "The latest in Artificial Pesterance." + id = "posisphere" + build_type = MECHFAB + materials = list( + /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT * 0.85, + /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT * 0.65, + /datum/material/gold =SMALL_MATERIAL_AMOUNT * 2.5 + ) + construction_time = 7.5 SECONDS + build_path = /obj/item/mmi/posibrain/sphere + category = list( + RND_CATEGORY_MECHFAB_CYBORG + RND_SUBCATEGORY_MECHFAB_CYBORG_CONTROL_INTERFACES + ) + departmental_flags = DEPARTMENT_BITFLAG_SCIENCE + diff --git a/code/modules/research/designs/medical_designs.dm b/code/modules/research/designs/medical_designs.dm index 46e43b0ac6661..cbd05593a3c11 100644 --- a/code/modules/research/designs/medical_designs.dm +++ b/code/modules/research/designs/medical_designs.dm @@ -568,7 +568,7 @@ /datum/design/cyberimp_nutriment name = "Nutriment Pump Implant" - desc = "This implant with synthesize and pump into your bloodstream a small amount of nutriment when you are starving." + desc = "This implant will synthesize and pump into your bloodstream a small amount of nutriment when you are starving." id = "ci-nutriment" build_type = PROTOLATHE | AWAY_LATHE | MECHFAB construction_time = 4 SECONDS @@ -585,7 +585,7 @@ /datum/design/cyberimp_nutriment_plus name = "Nutriment Pump Implant PLUS" - desc = "This implant with synthesize and pump into your bloodstream a small amount of nutriment when you are hungry." + desc = "This implant will synthesize and pump into your bloodstream a small amount of nutriment when you are hungry." id = "ci-nutrimentplus" build_type = PROTOLATHE | AWAY_LATHE | MECHFAB construction_time = 5 SECONDS @@ -811,6 +811,23 @@ ) departmental_flags = DEPARTMENT_BITFLAG_MEDICAL +/datum/design/cybernetic_heart/anomalock + name = "Voltaic combat cyberheart" + desc = "A cutting-edge cyberheart, originally designed for Nanotrasen killsquad usage but later declassified for normal research. Voltaic technology allows the heart to keep the body upright in dire circumstances, alongside redirecting anomalous flux energy to fully shield the user from shocks and electro-magnetic pulses. Does nothing without a flux anomaly core." + id = "cybernetic_heart_anomalock" + construction_time = 5 SECONDS + materials = list( + /datum/material/iron = SMALL_MATERIAL_AMOUNT * 5, + /datum/material/glass = SMALL_MATERIAL_AMOUNT * 5, + /datum/material/titanium = SHEET_MATERIAL_AMOUNT * 5, + /datum/material/diamond = SHEET_MATERIAL_AMOUNT, + ) + build_path = /obj/item/organ/internal/heart/cybernetic/anomalock + category = list( + RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_SCIENCE + ) + departmental_flags = DEPARTMENT_BITFLAG_SCIENCE + /datum/design/cybernetic_lungs name = "Basic Cybernetic Lungs" desc = "A basic pair of cybernetic lungs." diff --git a/code/modules/research/designs/misc_designs.dm b/code/modules/research/designs/misc_designs.dm index 84dcb67233d52..0ea6c41e16448 100644 --- a/code/modules/research/designs/misc_designs.dm +++ b/code/modules/research/designs/misc_designs.dm @@ -720,7 +720,7 @@ // Armour /datum/design/reactive_armour - name = "Reactive Armour Shell" + name = "Reactive Armor Shell" desc = "An experimental suit of armour capable of utilizing an implanted anomaly core to protect the user." id = "reactive_armour" build_type = PROTOLATHE | AWAY_LATHE @@ -731,7 +731,7 @@ /datum/material/silver = SHEET_MATERIAL_AMOUNT*2.5, /datum/material/gold = SHEET_MATERIAL_AMOUNT * 2.5, ) - build_path = /obj/item/reactive_armour_shell + build_path = /obj/item/reactive_armor_shell category = list( RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_SCIENCE ) @@ -818,6 +818,19 @@ ) departmental_flags = DEPARTMENT_BITFLAG_SECURITY + +/datum/design/dragnet_beacon + name = "DRAGnet Beacon" + desc = "A beacon that can be used as a teleport destination for DRAGnet snare rounds. Remember to sync it with your DRAGnet first!" + id = "dragnet_beacon" + build_type = PROTOLATHE | AWAY_LATHE + materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT * 5, /datum/material/glass = SHEET_MATERIAL_AMOUNT * 2) + build_path = /obj/item/dragnet_beacon + category = list( + RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_SECURITY + ) + departmental_flags = DEPARTMENT_BITFLAG_SECURITY + /datum/design/inspector name = "N-Spect Scanner" desc = "Central Command-issued inspection device. Performs inspections according to Nanotrasen protocols when activated, then prints an encrypted report regarding the maintenance of the station. Definitely not giving you cancer." diff --git a/code/modules/research/designs/power_designs.dm b/code/modules/research/designs/power_designs.dm index 3548d8ac38d41..deb2256ff10f0 100644 --- a/code/modules/research/designs/power_designs.dm +++ b/code/modules/research/designs/power_designs.dm @@ -4,12 +4,12 @@ /datum/design/basic_cell name = "Basic Power Cell" - desc = "A basic power cell that holds 1 MJ of energy." + desc = "A basic power cell that holds 10 KW of energy." id = "basic_cell" build_type = PROTOLATHE | AWAY_LATHE | AUTOLATHE |MECHFAB materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 7, /datum/material/glass =SMALL_MATERIAL_AMOUNT * 0.5) construction_time = 10 SECONDS - build_path = /obj/item/stock_parts/cell/empty + build_path = /obj/item/stock_parts/power_store/cell/empty category = list( RND_CATEGORY_STOCK_PARTS + RND_SUBCATEGORY_STOCK_PARTS_1 ) @@ -17,38 +17,38 @@ /datum/design/high_cell name = "High-Capacity Power Cell" - desc = "A power cell that holds 10 MJ of energy." + desc = "A power cell that holds 100 KW of energy." id = "high_cell" build_type = PROTOLATHE | AWAY_LATHE | AUTOLATHE | MECHFAB materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 7, /datum/material/glass = SMALL_MATERIAL_AMOUNT * 0.6) construction_time = 10 SECONDS - build_path = /obj/item/stock_parts/cell/high/empty + build_path = /obj/item/stock_parts/power_store/cell/high/empty category = list( - RND_CATEGORY_STOCK_PARTS + RND_SUBCATEGORY_STOCK_PARTS_2 + RND_CATEGORY_STOCK_PARTS + RND_SUBCATEGORY_STOCK_PARTS_1 ) departmental_flags = DEPARTMENT_BITFLAG_SCIENCE | DEPARTMENT_BITFLAG_ENGINEERING /datum/design/super_cell name = "Super-Capacity Power Cell" - desc = "A power cell that holds 20 MJ of energy." + desc = "A power cell that holds 200 KW of energy." id = "super_cell" build_type = PROTOLATHE | AWAY_LATHE | MECHFAB materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 7, /datum/material/glass = SMALL_MATERIAL_AMOUNT * 0.7) construction_time = 10 SECONDS - build_path = /obj/item/stock_parts/cell/super/empty + build_path = /obj/item/stock_parts/power_store/cell/super/empty category = list( - RND_CATEGORY_STOCK_PARTS + RND_SUBCATEGORY_STOCK_PARTS_3 + RND_CATEGORY_STOCK_PARTS + RND_SUBCATEGORY_STOCK_PARTS_2 ) departmental_flags = DEPARTMENT_BITFLAG_SCIENCE | DEPARTMENT_BITFLAG_ENGINEERING /datum/design/hyper_cell name = "Hyper-Capacity Power Cell" - desc = "A power cell that holds 30 MJ of energy." + desc = "A power cell that holds 300 KW of energy." id = "hyper_cell" build_type = PROTOLATHE | AWAY_LATHE | MECHFAB materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 7, /datum/material/gold = SMALL_MATERIAL_AMOUNT * 1.5, /datum/material/silver = SMALL_MATERIAL_AMOUNT * 1.5, /datum/material/glass = SMALL_MATERIAL_AMOUNT * 0.8) construction_time = 10 SECONDS - build_path = /obj/item/stock_parts/cell/hyper/empty + build_path = /obj/item/stock_parts/power_store/cell/hyper/empty category = list( RND_CATEGORY_STOCK_PARTS + RND_SUBCATEGORY_STOCK_PARTS_3 ) @@ -56,17 +56,83 @@ /datum/design/bluespace_cell name = "Bluespace Power Cell" - desc = "A power cell that holds 40 MJ of energy." + desc = "A power cell that holds 400 KW of energy." id = "bluespace_cell" build_type = PROTOLATHE | AWAY_LATHE | MECHFAB materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 8, /datum/material/gold = SMALL_MATERIAL_AMOUNT * 1.2, /datum/material/glass = SMALL_MATERIAL_AMOUNT * 1.6, /datum/material/diamond = SMALL_MATERIAL_AMOUNT * 1.6, /datum/material/titanium =SMALL_MATERIAL_AMOUNT * 3, /datum/material/bluespace =SMALL_MATERIAL_AMOUNT) construction_time = 10 SECONDS - build_path = /obj/item/stock_parts/cell/bluespace/empty + build_path = /obj/item/stock_parts/power_store/cell/bluespace/empty + category = list( + RND_CATEGORY_STOCK_PARTS + RND_SUBCATEGORY_STOCK_PARTS_4 + ) + departmental_flags = DEPARTMENT_BITFLAG_SCIENCE | DEPARTMENT_BITFLAG_ENGINEERING + +/datum/design/basic_battery + name = "Basic Megacell" + desc = "A basic megacell that holds 1 MJ of energy." + id = "basic_battery" + build_type = PROTOLATHE | AWAY_LATHE | AUTOLATHE |MECHFAB + materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 12, /datum/material/glass =SMALL_MATERIAL_AMOUNT * 2) + construction_time = 10 SECONDS + build_path = /obj/item/stock_parts/power_store/battery/empty + category = list( + RND_CATEGORY_STOCK_PARTS + RND_SUBCATEGORY_STOCK_PARTS_1 + ) + departmental_flags = DEPARTMENT_BITFLAG_SCIENCE | DEPARTMENT_BITFLAG_ENGINEERING + +/datum/design/high_battery + name = "High-Capacity Megacell" + desc = "A megacell that holds 10 MJ of energy." + id = "high_battery" + build_type = PROTOLATHE | AWAY_LATHE | AUTOLATHE | MECHFAB + materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 12, /datum/material/glass = SMALL_MATERIAL_AMOUNT * 3) + construction_time = 10 SECONDS + build_path = /obj/item/stock_parts/power_store/battery/high/empty + category = list( + RND_CATEGORY_STOCK_PARTS + RND_SUBCATEGORY_STOCK_PARTS_2 + ) + departmental_flags = DEPARTMENT_BITFLAG_SCIENCE | DEPARTMENT_BITFLAG_ENGINEERING + +/datum/design/super_battery + name = "Super-Capacity Megacell" + desc = "A megacell that holds 20 MJ of energy." + id = "super_battery" + build_type = PROTOLATHE | AWAY_LATHE | MECHFAB + materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 12, /datum/material/glass = SMALL_MATERIAL_AMOUNT * 4) + construction_time = 10 SECONDS + build_path = /obj/item/stock_parts/power_store/battery/super/empty + category = list( + RND_CATEGORY_STOCK_PARTS + RND_SUBCATEGORY_STOCK_PARTS_3 + ) + departmental_flags = DEPARTMENT_BITFLAG_SCIENCE | DEPARTMENT_BITFLAG_ENGINEERING + +/datum/design/hyper_battery + name = "Hyper-Capacity Megacell" + desc = "A megacell that holds 30 MJ of energy." + id = "hyper_battery" + build_type = PROTOLATHE | AWAY_LATHE | MECHFAB + materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 12, /datum/material/gold = SMALL_MATERIAL_AMOUNT * 1.5, /datum/material/silver = SMALL_MATERIAL_AMOUNT * 1.5, /datum/material/glass = SMALL_MATERIAL_AMOUNT * 5) + construction_time = 10 SECONDS + build_path = /obj/item/stock_parts/power_store/battery/hyper/empty + category = list( + RND_CATEGORY_STOCK_PARTS + RND_SUBCATEGORY_STOCK_PARTS_3 + ) + departmental_flags = DEPARTMENT_BITFLAG_SCIENCE | DEPARTMENT_BITFLAG_ENGINEERING + +/datum/design/bluespace_battery + name = "Bluespace Megacell" + desc = "A megacell that holds 40 MJ of energy." + id = "bluespace_battery" + build_type = PROTOLATHE | AWAY_LATHE | MECHFAB + materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 12, /datum/material/gold = SMALL_MATERIAL_AMOUNT * 1.2, /datum/material/glass = SMALL_MATERIAL_AMOUNT * 6, /datum/material/diamond = SMALL_MATERIAL_AMOUNT * 1.6, /datum/material/titanium =SMALL_MATERIAL_AMOUNT * 3, /datum/material/bluespace =SMALL_MATERIAL_AMOUNT) + construction_time = 10 SECONDS + build_path = /obj/item/stock_parts/power_store/battery/bluespace/empty category = list( RND_CATEGORY_STOCK_PARTS + RND_SUBCATEGORY_STOCK_PARTS_4 ) departmental_flags = DEPARTMENT_BITFLAG_SCIENCE | DEPARTMENT_BITFLAG_ENGINEERING + /datum/design/inducer name = "Inducer" desc = "The NT-75 Electromagnetic Power Inducer can wirelessly induce electric charge in an object, allowing you to recharge power cells without having to remove them." @@ -101,6 +167,16 @@ ) departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING +/datum/design/board/bioelec_gen + name = "Aquarium Bioelectricity Kit" + desc = "The required components to convert an aquarium into a bioelectricity generator." + id = "bioelec_gen" + build_path = /obj/item/aquarium_upgrade/bioelec_gen + category = list( + RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_ENGINEERING, + ) + departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING + /datum/design/turbine_part_compressor name = "Turbine Compressor" desc = "The basic tier of a compressor blade." diff --git a/code/modules/research/designs/smelting_designs.dm b/code/modules/research/designs/smelting_designs.dm index 925a2d3189783..b65ca64c6f5d0 100644 --- a/code/modules/research/designs/smelting_designs.dm +++ b/code/modules/research/designs/smelting_designs.dm @@ -10,7 +10,6 @@ RND_CATEGORY_CONSTRUCTION + RND_SUBCATEGORY_CONSTRUCTION_MATERIALS ) departmental_flags = DEPARTMENT_BITFLAG_CARGO | DEPARTMENT_BITFLAG_SCIENCE | DEPARTMENT_BITFLAG_ENGINEERING - maxstack = 50 /datum/design/plastitanium_alloy name = "Plastitanium" @@ -22,7 +21,6 @@ RND_CATEGORY_CONSTRUCTION + RND_SUBCATEGORY_CONSTRUCTION_MATERIALS ) departmental_flags = DEPARTMENT_BITFLAG_CARGO | DEPARTMENT_BITFLAG_SCIENCE | DEPARTMENT_BITFLAG_ENGINEERING - maxstack = 50 /datum/design/plaglass_alloy name = "Plasma Glass" @@ -34,7 +32,6 @@ RND_CATEGORY_CONSTRUCTION + RND_SUBCATEGORY_CONSTRUCTION_MATERIALS ) departmental_flags = DEPARTMENT_BITFLAG_CARGO | DEPARTMENT_BITFLAG_SCIENCE | DEPARTMENT_BITFLAG_ENGINEERING - maxstack = 50 /datum/design/plasmarglass_alloy name = "Reinforced Plasma Glass" @@ -46,7 +43,6 @@ RND_CATEGORY_CONSTRUCTION + RND_SUBCATEGORY_CONSTRUCTION_MATERIALS ) departmental_flags = DEPARTMENT_BITFLAG_CARGO | DEPARTMENT_BITFLAG_SCIENCE | DEPARTMENT_BITFLAG_ENGINEERING - maxstack = 50 /datum/design/titaniumglass_alloy name = "Titanium Glass" @@ -58,7 +54,6 @@ RND_CATEGORY_CONSTRUCTION + RND_SUBCATEGORY_CONSTRUCTION_MATERIALS ) departmental_flags = DEPARTMENT_BITFLAG_CARGO | DEPARTMENT_BITFLAG_SCIENCE | DEPARTMENT_BITFLAG_ENGINEERING - maxstack = 50 /datum/design/plastitaniumglass_alloy name = "Plastitanium Glass" @@ -70,7 +65,6 @@ RND_CATEGORY_CONSTRUCTION + RND_SUBCATEGORY_CONSTRUCTION_MATERIALS ) departmental_flags = DEPARTMENT_BITFLAG_CARGO | DEPARTMENT_BITFLAG_SCIENCE | DEPARTMENT_BITFLAG_ENGINEERING - maxstack = 50 /datum/design/alienalloy name = "Alien Alloy" diff --git a/code/modules/research/designs/weapon_designs.dm b/code/modules/research/designs/weapon_designs.dm index 00c7dba3946bd..35d95d82d3047 100644 --- a/code/modules/research/designs/weapon_designs.dm +++ b/code/modules/research/designs/weapon_designs.dm @@ -218,8 +218,8 @@ autolathe_exportable = FALSE /datum/design/beamrifle - name = "Beam Marksman Rifle Part Kit (Lethal)" - desc = "The gunkit for a powerful long ranged anti-material rifle that fires charged particle beams to obliterate targets." + name = "Event Horizon Anti-Existential Beam Rifle Part Kit (DOOMSDAY DEVICE)" + desc = "The kit that produces a weapon made to end your foes on an existential level. Why the fuck can you make this?" id = "beamrifle" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT * 5, /datum/material/glass =SHEET_MATERIAL_AMOUNT * 2.5, /datum/material/diamond =SHEET_MATERIAL_AMOUNT * 2.5, /datum/material/uranium = SHEET_MATERIAL_AMOUNT * 4, /datum/material/silver = SHEET_MATERIAL_AMOUNT * 2.25, /datum/material/gold =SHEET_MATERIAL_AMOUNT * 2.5) @@ -230,7 +230,6 @@ departmental_flags = DEPARTMENT_BITFLAG_SECURITY autolathe_exportable = FALSE - /datum/design/rapidsyringe name = "Rapid Syringe Gun" desc = "A gun that fires many syringes." diff --git a/code/modules/research/designs/wiremod_designs.dm b/code/modules/research/designs/wiremod_designs.dm index 3606dd67e2e60..dbcd74165946a 100644 --- a/code/modules/research/designs/wiremod_designs.dm +++ b/code/modules/research/designs/wiremod_designs.dm @@ -81,6 +81,11 @@ id = "comp_logic" build_path = /obj/item/circuit_component/compare/logic +/datum/design/component/toggle + name = "Toggle Component" + id = "comp_toggle" + build_path = /obj/item/circuit_component/compare/toggle + /datum/design/component/delay name = "Delay Component" id = "comp_delay" @@ -221,6 +226,11 @@ id = "comp_health" build_path = /obj/item/circuit_component/health +/datum/design/component/compare/health_state + name = "Compare Health State Component" + id = "comp_health_state" + build_path = /obj/item/circuit_component/compare/health_state + /datum/design/component/matscanner name = "Material Scanner" id = "comp_matscanner" @@ -337,6 +347,11 @@ id = "comp_ntnet_send" build_path = /obj/item/circuit_component/ntnet_send +/datum/design/component/list_literal/ntnet_send + name = "NTNet Transmitter List Literal" + id = "comp_ntnet_send_list_literal" + build_path = /obj/item/circuit_component/list_literal/ntnet_send + /datum/design/component/list_literal name = "List Literal Component" id = "comp_list_literal" @@ -452,6 +467,11 @@ id = "comp_assoc_list_pick" build_path = /obj/item/circuit_component/list_pick/assoc +/datum/design/component/bci/bci_camera + name = "BCI Camera" + id = "comp_camera_bci" + build_path = /obj/item/circuit_component/remotecam/bci + /datum/design/compact_remote_shell name = "Compact Remote Shell" desc = "A handheld shell with one big button." diff --git a/code/modules/research/experimentor.dm b/code/modules/research/experimentor.dm index 89c69b7334e40..4a08ae44df16c 100644 --- a/code/modules/research/experimentor.dm +++ b/code/modules/research/experimentor.dm @@ -60,7 +60,7 @@ /obj/machinery/rnd/experimentor/proc/generate_valid_items_and_item_reactions() var/static/list/banned_typecache = typecacheof(list( - /obj/item/stock_parts/cell/infinite, + /obj/item/stock_parts/power_store/cell/infinite, /obj/item/grenade/chem_grenade/tuberculosis )) @@ -558,7 +558,7 @@ /obj/item/relic name = "strange object" desc = "What mysteries could this hold? Maybe Research & Development could find out." - icon = 'icons/obj/devices/assemblies.dmi' + icon = 'icons/obj/devices/artifacts.dmi' var/realName = "defined object" var/revealed = FALSE var/realProc @@ -567,7 +567,7 @@ /obj/item/relic/Initialize(mapload) . = ..() - icon_state = pick("shock_kit","armor-igniter-analyzer","infra-igniter0","infra-igniter1","radio-multitool","prox-radio1","radio-radio","timer-multitool0","radio-igniter-tank") + icon_state = pick("prototype1","prototype2","prototype3","prototype4","prototype5","prototype6","prototype7","prototype8","prototype9") realName = "[pick("broken","twisted","spun","improved","silly","regular","badly made")] [pick("device","object","toy","illegal tech","weapon")]" diff --git a/code/modules/research/machinery/_production.dm b/code/modules/research/machinery/_production.dm index bdd31f4e9a04c..c69de9bb2d9c1 100644 --- a/code/modules/research/machinery/_production.dm +++ b/code/modules/research/machinery/_production.dm @@ -3,6 +3,7 @@ desc = "Makes researched and prototype items with materials and energy." /// Energy cost per full stack of materials spent. Material insertion is 40% of this. active_power_usage = 0.05 * STANDARD_CELL_RATE + interaction_flags_atom = parent_type::interaction_flags_atom | INTERACT_ATOM_MOUSEDROP_IGNORE_CHECKS /// The efficiency coefficient. Material costs and print times are multiplied by this number; var/efficiency_coeff = 1 @@ -20,8 +21,11 @@ var/stripe_color = null ///direction we output onto (if 0, on top of us) var/drop_direction = 0 + //looping sound for printing items + var/datum/looping_sound/lathe_print/print_sound /obj/machinery/rnd/production/Initialize(mapload) + print_sound = new(src, FALSE) materials = AddComponent( /datum/component/remote_materials, \ mapload, \ @@ -47,6 +51,7 @@ update_icon(UPDATE_OVERLAYS) /obj/machinery/rnd/production/Destroy() + QDEL_NULL(print_sound) materials = null cached_designs = null return ..() @@ -73,6 +78,7 @@ return . += span_notice("Material usage cost at [efficiency_coeff * 100]%") + . += span_notice("Build time at [efficiency_coeff * 100]%") if(drop_direction) . += span_notice("Currently configured to drop printed objects [dir2text(drop_direction)].") . += span_notice("[EXAMINE_HINT("Alt-click")] to reset.") @@ -340,11 +346,12 @@ for(var/material in design.materials) charge_per_item += design.materials[material] charge_per_item = ROUND_UP((charge_per_item / (MAX_STACK_SIZE * SHEET_MATERIAL_AMOUNT)) * coefficient * active_power_usage) - var/build_time_per_item = (design.construction_time * design.lathe_time_factor) ** 0.8 + var/build_time_per_item = (design.construction_time * design.lathe_time_factor * efficiency_coeff) ** 0.8 //start production busy = TRUE SStgui.update_uis(src) + print_sound.start() if(production_animation) icon_state = production_animation var/turf/target_location @@ -384,11 +391,14 @@ if(!directly_use_energy(charge_per_item)) // provide the wait time until lathe is ready var/area/my_area = get_area(src) var/obj/machinery/power/apc/my_apc = my_area.apc - var/charging_wait = my_apc.time_to_charge(charge_per_item) - if(!isnull(charging_wait)) - say("Unable to continue production, APC overload. Wait [DisplayTimeText(charging_wait, round_seconds_to = 1)] and try again.") + if(!QDELETED(my_apc)) + var/charging_wait = my_apc.time_to_charge(charge_per_item) + if(!isnull(charging_wait)) + say("Unable to continue production, APC overload. Wait [DisplayTimeText(charging_wait, round_seconds_to = 1)] and try again.") + else + say("Unable to continue production, power grid overload.") else - say("Unable to continue production, power grid overload.") + say("Unable to continue production, no APC in area.") finalize_build() return @@ -407,13 +417,27 @@ var/atom/movable/created if(is_stack) - created = new design.build_path(target, items_remaining) + var/obj/item/stack/stack_item = initial(design.build_path) + var/max_stack_amount = initial(stack_item.max_amount) + var/number_to_make = (initial(stack_item.amount) * items_remaining) + while(number_to_make > max_stack_amount) + created = new stack_item(null, max_stack_amount) //it's imporant to spawn things in nullspace, since obj's like stacks qdel when they enter a tile/merge with other stacks of the same type, resulting in runtimes. + if(isitem(created)) + created.pixel_x = created.base_pixel_x + rand(-6, 6) + created.pixel_y = created.base_pixel_y + rand(-6, 6) + created.forceMove(target) + number_to_make -= max_stack_amount + + created = new stack_item(null, number_to_make) else - created = new design.build_path(target) + created = new design.build_path(null) split_materials_uniformly(design_materials, material_cost_coefficient, created) - created.pixel_x = created.base_pixel_x + rand(-6, 6) - created.pixel_y = created.base_pixel_y + rand(-6, 6) + if(isitem(created)) + created.pixel_x = created.base_pixel_x + rand(-6, 6) + created.pixel_y = created.base_pixel_y + rand(-6, 6) + SSblackbox.record_feedback("nested tally", "lathe_printed_items", 1, list("[type]", "[created.type]")) + created.forceMove(target) if(is_stack) items_remaining = 0 @@ -429,23 +453,22 @@ /// Called at the end of do_make_item's timer loop /obj/machinery/rnd/production/proc/finalize_build() PROTECTED_PROC(TRUE) - + print_sound.stop() busy = FALSE SStgui.update_uis(src) icon_state = initial(icon_state) -/obj/machinery/rnd/production/MouseDrop(atom/over, src_location, over_location, src_control, over_control, params) - . = ..() - if(!can_interact(usr) || (!issilicon(usr) && !isAdminGhostAI(usr)) && !Adjacent(usr)) +/obj/machinery/rnd/production/mouse_drop_dragged(atom/over, mob/user, src_location, over_location, params) + if(!can_interact(user) || (!HAS_SILICON_ACCESS(user) && !isAdminGhostAI(user)) && !Adjacent(user)) return if(busy) - balloon_alert(usr, "busy printing!") + balloon_alert(user, "busy printing!") return var/direction = get_dir(src, over_location) if(!direction) return drop_direction = direction - balloon_alert(usr, "dropping [dir2text(drop_direction)]") + balloon_alert(user, "dropping [dir2text(drop_direction)]") /obj/machinery/rnd/production/click_alt(mob/user) if(drop_direction == 0) diff --git a/code/modules/research/ordnance/scipaper_partner.dm b/code/modules/research/ordnance/scipaper_partner.dm index 712ec4b4127e9..7120c78cecde9 100644 --- a/code/modules/research/ordnance/scipaper_partner.dm +++ b/code/modules/research/ordnance/scipaper_partner.dm @@ -4,12 +4,11 @@ accepted_experiments = list(/datum/experiment/ordnance/explosive/lowyieldbomb) multipliers = list(SCIPAPER_COOPERATION_INDEX = 0.75, SCIPAPER_FUNDING_INDEX = 0.75) boostable_nodes = list( - "bluespace_basic" = 2000, - "NVGtech" = 1500, - "practical_bluespace" = 2500, - "basic_plasma" = 2000, - "basic_mining" = 2000, - "adv_mining" = 2000, + TECHWEB_NODE_BLUESPACE_THEORY = TECHWEB_TIER_3_POINTS, + TECHWEB_NODE_NIGHT_VISION = TECHWEB_TIER_2_POINTS, + TECHWEB_NODE_ANOMALY_RESEARCH = TECHWEB_TIER_2_POINTS, + TECHWEB_NODE_MINING = TECHWEB_TIER_1_POINTS, + TECHWEB_NODE_MINING_ADV = TECHWEB_TIER_2_POINTS, ) /datum/scientific_partner/baron @@ -17,8 +16,8 @@ flufftext = "A nearby research station ran by a very wealthy captain seems to be struggling with their scientific output. They might reward us handsomely if we ghostwrite for them." multipliers = list(SCIPAPER_COOPERATION_INDEX = 0.25, SCIPAPER_FUNDING_INDEX = 2) boostable_nodes = list( - "comp_recordkeeping" = 500, - "computer_data_disks" = 500, + TECHWEB_NODE_CONSOLES = TECHWEB_TIER_1_POINTS, + TECHWEB_NODE_FUNDIMENTAL_SCI = TECHWEB_TIER_1_POINTS, ) /datum/scientific_partner/defense @@ -30,14 +29,11 @@ /datum/experiment/ordnance/explosive/hydrogenbomb, ) boostable_nodes = list( - "adv_weaponry" = 5000, - "weaponry" = 2500, - "sec_basic" = 1250, - "explosive_weapons" = 1250, - "electronic_weapons" = 1250, - "radioactive_weapons" = 1250, - "beam_weapons" = 1250, - "explosive_weapons" = 1250, + TECHWEB_NODE_RIOT_SUPRESSION = TECHWEB_TIER_3_POINTS, + TECHWEB_NODE_SEC_EQUIP = TECHWEB_TIER_1_POINTS, + TECHWEB_NODE_EXPLOSIVES = TECHWEB_TIER_2_POINTS, + TECHWEB_NODE_ELECTRIC_WEAPONS = TECHWEB_TIER_2_POINTS, + TECHWEB_NODE_BEAM_WEAPONS = TECHWEB_TIER_3_POINTS, ) /datum/scientific_partner/medical @@ -48,12 +44,12 @@ /datum/experiment/ordnance/gaseous/bz, ) boostable_nodes = list( - "cyber_organs" = 750, - "cyber_organs_upgraded" = 1000, - "genetics" = 500, - "subdermal_implants" = 1250, - "adv_biotech" = 1000, - "biotech" = 1000, + TECHWEB_NODE_CYBER_ORGANS = TECHWEB_TIER_1_POINTS, + TECHWEB_NODE_CYBER_ORGANS_UPGRADED = TECHWEB_TIER_2_POINTS, + TECHWEB_NODE_GENE_ENGINEERING = TECHWEB_TIER_1_POINTS, + TECHWEB_NODE_PASSIVE_IMPLANTS = TECHWEB_TIER_1_POINTS, + TECHWEB_NODE_BIO_SCAN = TECHWEB_TIER_1_POINTS, + TECHWEB_NODE_CHEM_SYNTHESIS = TECHWEB_TIER_2_POINTS, ) /datum/scientific_partner/physics @@ -64,11 +60,8 @@ /datum/experiment/ordnance/explosive/nobliumbomb, ) boostable_nodes = list( - "engineering" = 5000, - "adv_engi" = 5000, - "emp_super" = 3000, - "emp_adv" = 1250, - "high_efficiency" = 5000, - "micro_bluespace" = 5000, - "adv_power" = 1500, + TECHWEB_NODE_PARTS_UPG = TECHWEB_TIER_2_POINTS, + TECHWEB_NODE_EXP_TOOLS = TECHWEB_TIER_4_POINTS, + TECHWEB_NODE_PARTS_BLUESPACE = TECHWEB_TIER_3_POINTS, + TECHWEB_NODE_PARTS_ADV = TECHWEB_TIER_1_POINTS, ) diff --git a/code/modules/research/ordnance/tank_compressor.dm b/code/modules/research/ordnance/tank_compressor.dm index 830c004acad5e..d0393d9e10374 100644 --- a/code/modules/research/ordnance/tank_compressor.dm +++ b/code/modules/research/ordnance/tank_compressor.dm @@ -321,10 +321,6 @@ data["transferRate"] = transfer_rate data["lastPressure"] = last_recorded_pressure - data["inputData"] = gas_mixture_parser(airs[2], "Input Port") - data["outputData"] = gas_mixture_parser(airs[1], "Ouput Port") - data["bufferData"] = gas_mixture_parser(leaked_gas_buffer, "Gas Buffer") - data["disk"] = inserted_disk?.name data["storage"] = "[inserted_disk?.used_capacity] / [inserted_disk?.max_capacity] GQ" data["records"] = list() diff --git a/code/modules/research/rdconsole.dm b/code/modules/research/rdconsole.dm index 8e13c63f792ad..cc8e842f18e9a 100644 --- a/code/modules/research/rdconsole.dm +++ b/code/modules/research/rdconsole.dm @@ -108,7 +108,7 @@ Nothing else in the console has ID requirements. if(stored_research.can_afford(price)) user.investigate_log("researched [id]([json_encode(price)]) on techweb id [stored_research.id].", INVESTIGATE_RESEARCH) if(istype(stored_research, /datum/techweb/science)) - SSblackbox.record_feedback("associative", "science_techweb_unlock", 1, list("id" = "[id]", "name" = TN.display_name, "price" = "[json_encode(price)]", "time" = SQLtime())) + SSblackbox.record_feedback("associative", "science_techweb_unlock", 1, list("id" = "[id]", "name" = TN.display_name, "price" = "[json_encode(price)]", "time" = ISOtime())) if(stored_research.research_node_id(id)) say("Successfully researched [TN.display_name].") var/logname = "Unknown" diff --git a/code/modules/research/rdmachines.dm b/code/modules/research/rdmachines.dm index 60dcc8716cc10..0cfca236d24c3 100644 --- a/code/modules/research/rdmachines.dm +++ b/code/modules/research/rdmachines.dm @@ -72,7 +72,7 @@ return CONTEXTUAL_SCREENTIP_SET else if(held_item.tool_behaviour == TOOL_MULTITOOL) - var/obj/item/multitool/tool = held_item + var/obj/item/multitool/tool = held_item.get_proxy_attacker_for(src, user) if(!QDELETED(tool.buffer) && istype(tool.buffer, /datum/techweb)) context[SCREENTIP_CONTEXT_LMB] = "Upload Techweb" context[SCREENTIP_CONTEXT_RMB] = "Upload Techweb" @@ -107,7 +107,6 @@ return screwdriver_act(user, tool) /obj/machinery/rnd/multitool_act(mob/living/user, obj/item/multitool/tool) - . = ITEM_INTERACT_BLOCKING if(panel_open) wires.interact(user) return ITEM_INTERACT_SUCCESS diff --git a/code/modules/research/server.dm b/code/modules/research/server.dm index 1bd0d3560beed..79a97b40a6bc5 100644 --- a/code/modules/research/server.dm +++ b/code/modules/research/server.dm @@ -154,16 +154,16 @@ if(HDD_OVERLOADED) . += "The front panel is dangling open. The hdd inside is destroyed and the wires are all burned." -/obj/machinery/rnd/server/master/item_interaction(mob/living/user, obj/item/tool, list/modifiers) +/obj/machinery/rnd/server/master/tool_act(mob/living/user, obj/item/tool, list/modifiers) if(!tool.tool_behaviour) - return NONE + return ..() // Only antags are given the training and knowledge to disassemble this thing. if(!is_special_character(user)) if(user.combat_mode) return ITEM_INTERACT_SKIP_TO_ATTACK balloon_alert(user, "you can't find an obvious maintenance hatch!") return ITEM_INTERACT_BLOCKING - return NONE + return ..() /obj/machinery/rnd/server/master/attackby(obj/item/attacking_item, mob/user, params) if(istype(attacking_item, /obj/item/computer_disk/hdd_theft)) diff --git a/code/modules/research/stock_parts.dm b/code/modules/research/stock_parts.dm index 79d24b9c55ab9..46bd8746663b8 100644 --- a/code/modules/research/stock_parts.dm +++ b/code/modules/research/stock_parts.dm @@ -37,19 +37,24 @@ If you create T5+ please take a pass at mech_fabricator.dm. The parts being good user.Beam(attacked_machinery, icon_state = "rped_upgrade", time = 0.5 SECONDS) return TRUE -/obj/item/storage/part_replacer/afterattack(obj/attacked_object, mob/living/user, adjacent, params) - . = ..() - if(!works_from_distance || adjacent) // Adjacent things = already handled by pre-attack - return . - - if(part_replace_action(attacked_object, user)) - user.Beam(attacked_object, icon_state = "rped_upgrade", time = 0.5 SECONDS) - return . | AFTERATTACK_PROCESSED_ITEM - - if(istype(attacked_object, /obj/structure/frame)) - attacked_object.item_interaction(user, src) // Cursed snowflake but we need to handle frame ranged interaction here - user.Beam(attacked_object, icon_state = "rped_upgrade", time = 0.5 SECONDS) - return . | AFTERATTACK_PROCESSED_ITEM +/obj/item/storage/part_replacer/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + if(part_replace_action(interacting_with, user)) + return ITEM_INTERACT_SUCCESS + return NONE + +/obj/item/storage/part_replacer/ranged_interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + if(!works_from_distance) + return NONE + if(part_replace_action(interacting_with, user)) + user.Beam(interacting_with, icon_state = "rped_upgrade", time = 0.5 SECONDS) + return ITEM_INTERACT_SUCCESS + if(istype(interacting_with, /obj/structure/frame)) + // Cursed snowflake but we need to handle frame ranged interaction here + // Likely no longer necessary with the new framework, revisit later + interacting_with.item_interaction(user, src) + user.Beam(interacting_with, icon_state = "rped_upgrade", time = 0.5 SECONDS) + return ITEM_INTERACT_SUCCESS + return NONE /obj/item/storage/part_replacer/proc/play_rped_sound() //Plays the sound for RPED exhanging or installing parts. @@ -90,8 +95,8 @@ If you create T5+ please take a pass at mech_fabricator.dm. The parts being good /obj/item/storage/part_replacer/bluespace/proc/on_part_entered(datum/source, obj/item/inserted_component) SIGNAL_HANDLER - if(istype(inserted_component, /obj/item/stock_parts/cell)) - var/obj/item/stock_parts/cell/inserted_cell = inserted_component + if(istype(inserted_component, /obj/item/stock_parts/power_store)) + var/obj/item/stock_parts/power_store/inserted_cell = inserted_component if(inserted_cell.rigged || inserted_cell.corrupted) message_admins("[ADMIN_LOOKUPFLW(usr)] has inserted rigged/corrupted [inserted_cell] into [src].") usr.log_message("has inserted rigged/corrupted [inserted_cell] into [src].", LOG_GAME) @@ -139,7 +144,7 @@ If you create T5+ please take a pass at mech_fabricator.dm. The parts being good new /obj/item/stock_parts/servo(src) new /obj/item/stock_parts/micro_laser(src) new /obj/item/stock_parts/matter_bin(src) - new /obj/item/stock_parts/cell/high(src) + new /obj/item/stock_parts/power_store/cell/high(src) /obj/item/storage/part_replacer/bluespace/tier2 @@ -150,7 +155,7 @@ If you create T5+ please take a pass at mech_fabricator.dm. The parts being good new /obj/item/stock_parts/servo/nano(src) new /obj/item/stock_parts/micro_laser/high(src) new /obj/item/stock_parts/matter_bin/adv(src) - new /obj/item/stock_parts/cell/super(src) + new /obj/item/stock_parts/power_store/cell/super(src) /obj/item/storage/part_replacer/bluespace/tier3 @@ -161,7 +166,7 @@ If you create T5+ please take a pass at mech_fabricator.dm. The parts being good new /obj/item/stock_parts/servo/pico(src) new /obj/item/stock_parts/micro_laser/ultra(src) new /obj/item/stock_parts/matter_bin/super(src) - new /obj/item/stock_parts/cell/hyper(src) + new /obj/item/stock_parts/power_store/cell/hyper(src) /obj/item/storage/part_replacer/bluespace/tier4 @@ -172,7 +177,7 @@ If you create T5+ please take a pass at mech_fabricator.dm. The parts being good new /obj/item/stock_parts/servo/femto(src) new /obj/item/stock_parts/micro_laser/quadultra(src) new /obj/item/stock_parts/matter_bin/bluespace(src) - new /obj/item/stock_parts/cell/bluespace(src) + new /obj/item/stock_parts/power_store/cell/bluespace(src) /obj/item/storage/part_replacer/cargo //used in a cargo crate @@ -207,7 +212,7 @@ If you create T5+ please take a pass at mech_fabricator.dm. The parts being good continue part_list += component_part //Sort the parts. This ensures that higher tier items are applied first. - part_list = sortTim(part_list, GLOBAL_PROC_REF(cmp_rped_sort)) + sortTim(part_list, GLOBAL_PROC_REF(cmp_rped_sort)) return part_list /proc/cmp_rped_sort(obj/item/first_item, obj/item/second_item) diff --git a/code/modules/research/techweb/_techweb.dm b/code/modules/research/techweb/_techweb.dm index b4b137d8e2187..3c920f6b9a6fe 100644 --- a/code/modules/research/techweb/_techweb.dm +++ b/code/modules/research/techweb/_techweb.dm @@ -108,7 +108,7 @@ /datum/techweb/proc/add_point_list(list/pointlist) for(var/i in pointlist) if((i in SSresearch.point_types) && pointlist[i] > 0) - research_points[i] += pointlist[i] + research_points[i] = FLOOR(research_points[i] + pointlist[i], 0.1) /datum/techweb/proc/add_points_all(amount) var/list/l = SSresearch.point_types.Copy() @@ -119,7 +119,7 @@ /datum/techweb/proc/remove_point_list(list/pointlist) for(var/i in pointlist) if((i in SSresearch.point_types) && pointlist[i] > 0) - research_points[i] = max(0, research_points[i] - pointlist[i]) + research_points[i] = FLOOR(max(0, research_points[i] - pointlist[i]), 0.1) /datum/techweb/proc/remove_points_all(amount) var/list/l = SSresearch.point_types.Copy() @@ -130,7 +130,7 @@ /datum/techweb/proc/modify_point_list(list/pointlist) for(var/i in pointlist) if((i in SSresearch.point_types) && pointlist[i] != 0) - research_points[i] = max(0, research_points[i] + pointlist[i]) + research_points[i] = FLOOR(max(0, research_points[i] + pointlist[i]), 0.1) /datum/techweb/proc/modify_points_all(amount) var/list/l = SSresearch.point_types.Copy() diff --git a/code/modules/research/techweb/all_nodes.dm b/code/modules/research/techweb/all_nodes.dm deleted file mode 100644 index 42e755e265142..0000000000000 --- a/code/modules/research/techweb/all_nodes.dm +++ /dev/null @@ -1,2453 +0,0 @@ - -//Current rate: 135000 research points in 90 minutes - -//Base Nodes -/datum/techweb_node/base - id = "base" - starting_node = TRUE - display_name = "Basic Research Technology" - description = "NT default research technologies." - // Default research tech, prevents bricking - design_ids = list( - "basic_capacitor", - "basic_cell", - "basic_matter_bin", - "basic_micro_laser", - "basic_scanning", - "blast", - "bounced_radio", - "bowl", - "bucket", - "c-reader", - "c38_rubber", - "camera_assembly", - "camera_film", - "camera", - "capbox", - "chisel", - "circuit_imprinter_offstation", - "circuit_imprinter", - "circuit", - "circuitgreen", - "circuitred", - "coffee_cartridge", - "coffeemaker", - "coffeepot", - "condenser", - "conveyor_belt", - "conveyor_switch", - "custom_vendor_refill", - "destructive_analyzer", - "destructive_scanner", - "desttagger", - "doppler_array", - "drinking_glass", - "earmuffs", - "electropack", - "experi_scanner", - "experimentor", - "extinguisher", - "fax", - "fish_case", - "fishing_rod", - "fishing_portal_generator", - "flashlight", - "fluid_ducts", - "foam_dart", - "fork", - "gas_filter", - "handcuffs_s", - "handlabel", - "health_sensor", - "holodisk", - "igniter", - "infrared_emitter", - "intercom_frame", - "kitchen_knife", - "laptop", - "light_bulb", - "light_replacer", - "light_tube", - "mechfab", - "micro_servo", - "miniature_power_cell", - "newscaster_frame", - "oven_tray", - "packagewrap", - "pet_carrier", - "plasmaglass", - "plasmaman_gas_filter", - "plasmareinforcedglass", - "plasteel", - "plastic_fork", - "plastic_knife", - "plastic_spoon", - "plastitanium", - "plastitaniumglass", - "plate", - "prox_sensor", - "radio_headset", - "rdconsole", - "rdserver", - "rdservercontrol", - "recorder", - "rglass", - "roll", - "sec_38", - "sec_beanbag_slug", - "sec_dart", - "sec_Islug", - "sec_rshot", - "sec_pen", - "servingtray", - "shaker", - "shot_glass", - "signaler", - "slime_scanner", - "solar_panel", - "solar_tracker", - "souppot", - "space_heater", - "spoon", - "status_display_frame", - "sticky_tape", - "syrup_bottle", - "tape", - "tech_disk", - "timer", - "titaniumglass", - "toner_large", - "toner", - "tongs", - "toy_armblade", - "toy_balloon", - "toygun", - "tram_floor_dark", - "tram_floor_light", - "trapdoor_electronics", - "turbine_part_compressor", - "turbine_part_rotor", - "turbine_part_stator", - "turret_control", - "universal_scanner", - "voice_analyzer", - "watering_can", - ) - experiments_to_unlock = list( - /datum/experiment/autopsy/nonhuman, - /datum/experiment/scanning/random/material/medium/one, - /datum/experiment/scanning/random/material/medium/three, - /datum/experiment/scanning/random/material/hard/one, - /datum/experiment/scanning/random/material/hard/two, - /datum/experiment/scanning/people/novel_organs, - ) - -/datum/techweb_node/mmi - id = "mmi" - starting_node = TRUE - display_name = "Man Machine Interface" - description = "A slightly Frankensteinian device that allows human brains to interface natively with software APIs." - design_ids = list( - "mmi", - ) - -/datum/techweb_node/cyborg - id = "cyborg" - starting_node = TRUE - display_name = "Cyborg Construction" - description = "Sapient robots with preloaded tool modules and programmable laws." - design_ids = list( - "borg_chest", - "borg_head", - "borg_l_arm", - "borg_l_leg", - "borg_r_arm", - "borg_r_leg", - "borg_suit", - "borg_upgrade_rename", - "borg_upgrade_restart", - "borgupload", - "cyborgrecharger", - "robocontrol", - "sflash", - ) - -/datum/techweb_node/mech - id = "mecha" - starting_node = TRUE - display_name = "Mechanical Exosuits" - description = "Mechanized exosuits that are several magnitudes stronger and more powerful than the average human." - design_ids = list( - "mech_recharger", - "mecha_tracking", - "mechacontrol", - "mechapower", - "ripley_chassis", - "ripley_left_arm", - "ripley_left_leg", - "ripley_main", - "ripley_peri", - "ripley_right_arm", - "ripley_right_leg", - "ripley_torso", - "ripleyupgrade", - "mech_hydraulic_clamp", - "mech_radio", - "mech_air_tank", - "mech_thrusters", - ) - -/datum/techweb_node/mod_basic - id = "mod" - starting_node = TRUE - display_name = "Basic Modular Suits" - description = "Specialized back mounted power suits with various different modules." - design_ids = list( - "mod_boots", - "mod_chestplate", - "mod_gauntlets", - "mod_helmet", - "mod_paint_kit", - "mod_shell", - "mod_plating_standard", - "mod_storage", - "mod_welding", - "mod_safety", - "mod_mouthhole", - "mod_flashlight", - "mod_longfall", - "mod_thermal_regulator", - "mod_plasma", - "mod_sign_radio", - ) - -/datum/techweb_node/mech_tools - id = "mech_tools" - starting_node = TRUE - display_name = "Basic Exosuit Equipment" - description = "Various tools fit for basic mech units" - design_ids = list( - "mech_drill", - "mech_extinguisher", - "mech_mscanner", - ) - -/datum/techweb_node/basic_tools - id = "basic_tools" - starting_node = TRUE - display_name = "Basic Tools" - description = "Basic mechanical, electronic, surgical and botanical tools." - design_ids = list( - "airlock_painter", - "analyzer", - "boxcutter", - "cable_coil", - "cable_coil", - "crowbar", - "cultivator", - "decal_painter", - "hatchet", - "mop", - "multitool", - "normtrash", - "pipe_painter", - "plant_analyzer", - "plunger", - "pushbroom", - "rwd", - "razor", - "screwdriver", - "secateurs", - "shovel", - "spade", - "spraycan", - "tile_sprayer", - "tscanner", - "welding_helmet", - "welding_tool", - "wirebrush", - "wirecutters", - "wrench", - "pickaxe", - ) - -/datum/techweb_node/basic_medical - id = "basic_medical" - starting_node = TRUE - display_name = "Basic Medical Equipment" - description = "Basic medical tools and equipment." - design_ids = list( - "beaker", - "biopsy_tool", - "blood_filter", - "bonesetter", - "cautery", - "circular_saw", - "cybernetic_ears", - "cybernetic_eyes", - "cybernetic_eyes_moth", - "cybernetic_heart", - "cybernetic_liver", - "cybernetic_lungs", - "cybernetic_stomach", - "defibmountdefault", - "dropper", - "hemostat", - "large_beaker", - "medicalbed", - "mmi_m", - "operating", - "petri_dish", - "pillbottle", - "plumbing_rcd", - "plumbing_rcd_service", - "plumbing_rcd_sci", - "portable_chem_mixer", - "penlight", - "retractor", - "scalpel", - "stethoscope", - "surgical_drapes", - "surgical_tape", - "surgicaldrill", - "swab", - "syringe", - "xlarge_beaker", - ) - -/datum/techweb_node/basic_circuitry - id = "basic_circuitry" - starting_node = TRUE - display_name = "Basic Integrated Circuits" - description = "Research on how to fully exploit the power of integrated circuits" - design_ids = list( - "circuit_multitool", - "comp_access_checker", - "comp_arctan2", - "comp_arithmetic", - "comp_assoc_list_pick", - "comp_assoc_list_remove", - "comp_assoc_list_set", - "comp_binary_convert", - "comp_clock", - "comp_comparison", - "comp_concat", - "comp_concat_list", - "comp_decimal_convert", - "comp_delay", - "comp_direction", - "comp_element_find", - "comp_filter_list", - "comp_foreach", - "comp_format", - "comp_format_assoc", - "comp_get_column", - "comp_gps", - "comp_health", - "comp_hear", - "comp_id_access_reader", - "comp_id_getter", - "comp_id_info_reader", - "comp_index", - "comp_index_assoc", - "comp_index_table", - "comp_laserpointer", - "comp_length", - "comp_light", - "comp_list_add", - "comp_list_assoc_literal", - "comp_list_clear", - "comp_list_literal", - "comp_list_pick", - "comp_list_remove", - "comp_logic", - "comp_matscanner", - "comp_mmi", - "comp_module", - "comp_multiplexer", - "comp_not", - "comp_ntnet_receive", - "comp_ntnet_send", - "comp_pinpointer", - "comp_pressuresensor", - "comp_radio", - "comp_random", - "comp_reagents", - "comp_router", - "comp_select_query", - "comp_self", - "comp_set_variable_trigger", - "comp_soundemitter", - "comp_species", - "comp_speech", - "comp_speech", - "comp_split", - "comp_string_contains", - "comp_tempsensor", - "comp_textcase", - "comp_timepiece", - "comp_tonumber", - "comp_tostring", - "comp_trigonometry", - "comp_typecast", - "comp_typecheck", - "comp_view_sensor", - "compact_remote_shell", - "component_printer", - "integrated_circuit", - "module_duplicator", - "usb_cable" - ) - -/////////////////////////Biotech///////////////////////// - -/datum/techweb_node/biotech - id = "biotech" - display_name = "Biological Technology" - description = "What makes us tick." //the MC, silly! - prereq_ids = list("base") - design_ids = list( - "beer_dispenser", - "blood_pack", - "chem_dispenser", - "chem_heater", - "chem_mass_spec", - "chem_master", - "chem_pack", - "defibmount", - "defibrillator", - "genescanner", - "healthanalyzer", - "med_spray_bottle", - "medical_kiosk", - "medigel", - "medipen_refiller", - "pandemic", - "penlight_paramedic", - "soda_dispenser", - ) - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) - required_experiments = list(/datum/experiment/autopsy/human) - -/datum/techweb_node/adv_biotech - id = "adv_biotech" - display_name = "Advanced Biotechnology" - description = "Advanced Biotechnology" - prereq_ids = list("biotech") - design_ids = list( - "autopsyscanner", - "crewpinpointer", - "defibrillator_compact", - "harvester", - "healthanalyzer_advanced", - "holobarrier_med", - "limbgrower", - "meta_beaker", - "ph_meter", - "piercesyringe", - "plasmarefiller", - "smoke_machine", - ) - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 5000) - required_experiments = list(/datum/experiment/autopsy/nonhuman) - discount_experiments = list(/datum/experiment/scanning/random/material/meat = 4000) - -/datum/techweb_node/xenoorgan_biotech - id = "xenoorgan_bio" - display_name = "Xeno-organ Biology" - description = "Plasmaman, Ethereals, Lizardpeople... What makes our non-human crewmembers tick?" - prereq_ids = list("adv_biotech") - design_ids = list( - "limbdesign_ethereal", - "limbdesign_felinid", - "limbdesign_lizard", - "limbdesign_plasmaman", - ) - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 6500) - discount_experiments = list( - /datum/experiment/scanning/random/cytology/easy = 1000, - /datum/experiment/scanning/points/slime/hard = 5000, - /datum/experiment/autopsy/xenomorph = 5000, - ) - -/datum/techweb_node/morphological_theory - id = "morphological_theory" - display_name = "Anomalous Morphology" - description = "Use poorly understood energies to change your body." - prereq_ids = list("adv_biotech", "anomaly_research") - design_ids = list("polymorph_belt") - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 5000) - discount_experiments = list( - /datum/experiment/scanning/people/novel_organs = 5000, - ) - -/datum/techweb_node/bio_process - id = "bio_process" - display_name = "Biological Processing" - description = "From slimes to kitchens." - prereq_ids = list("biotech") - design_ids = list( - "deepfryer", - "dish_drive", - "fat_sucker", - "gibber", - "griddle", - "microwave", - "microwave_engineering", - "monkey_recycler", - "oven", - "processor", - "range", // should be in a further node, probably - "reagentgrinder", - "smartfridge", - "stove", - ) - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 4000) - discount_experiments = list(/datum/experiment/scanning/random/cytology = 3000) //Big discount to reinforce doing it. - -/////////////////////////Advanced Surgery///////////////////////// - -/datum/techweb_node/imp_wt_surgery - id = "imp_wt_surgery" - display_name = "Improved Wound-Tending Surgery" - description = "Who would have known being more gentle with a hemostat decreases patient pain?" - prereq_ids = list("biotech") - design_ids = list( - "surgery_heal_brute_upgrade", - "surgery_heal_burn_upgrade", - ) - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 1000) - -/datum/techweb_node/oldstation_surgery - id = "oldstation_surgery" - display_name = "Experimental Dissection" - description = "Grants access to experimental dissections, which allows generation of research points." - design_ids = list( - "surgery_oldstation_dissection", - ) - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 500) - hidden = TRUE - show_on_wiki = FALSE - -/datum/techweb_node/adv_surgery - id = "adv_surgery" - display_name = "Advanced Surgery" - description = "When simple medicine doesn't cut it." - prereq_ids = list("imp_wt_surgery") - design_ids = list( - "surgery_heal_brute_upgrade_femto", - "surgery_heal_burn_upgrade_femto", - "surgery_heal_combo", - "surgery_lobotomy", - "surgery_wing_reconstruction", - ) - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 1500) - -/datum/techweb_node/exp_surgery - id = "exp_surgery" - display_name = "Experimental Surgery" - description = "When evolution isn't fast enough." - prereq_ids = list("adv_surgery") - design_ids = list( - "surgery_cortex_folding", - "surgery_cortex_imprint", - "surgery_heal_combo_upgrade", - "surgery_ligament_hook", - "surgery_ligament_reinforcement", - "surgery_muscled_veins", - "surgery_nerve_ground", - "surgery_nerve_splice", - "surgery_pacify", - "surgery_vein_thread", - "surgery_viral_bond", - ) - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 7500) - discount_experiments = list(/datum/experiment/scanning/random/plants/traits = 4500) - -/datum/techweb_node/alien_surgery - id = "alien_surgery" - display_name = "Alien Surgery" - description = "Abductors did nothing wrong." - prereq_ids = list("exp_surgery", "alientech") - design_ids = list( - "surgery_brainwashing", - "surgery_heal_combo_upgrade_femto", - "surgery_zombie", - ) - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 10000) - -/////////////////////////data theory tech///////////////////////// - -/datum/techweb_node/datatheory //Computer science - id = "datatheory" - display_name = "Data Theory" - description = "Big Data, in space!" - prereq_ids = list("base") - design_ids = list( - "bounty_pad", - "bounty_pad_control", - ) - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) - - -/////////////////////////engineering tech///////////////////////// - -/datum/techweb_node/engineering - id = "engineering" - display_name = "Industrial Engineering" - description = "A refresher course on modern engineering technology." - prereq_ids = list("base") - design_ids = list( - "adv_capacitor", - "adv_matter_bin", - "adv_scanning", - "airalarm_electronics", - "airlock_board", - "anomaly_refinery", - "apc_control", - "atmos_control", - "atmos_thermal", - "atmosalerts", - "autolathe", - "cell_charger", - "crystallizer", - "electrolyzer", - "emergency_oxygen_engi", - "emergency_oxygen", - "emitter", - "mass_driver", - "firealarm_electronics", - "firelock_board", - "generic_tank", - "grounding_rod", - "high_cell", - "high_micro_laser", - "mesons", - "nano_servo", - "oxygen_tank", - "pacman", - "plasma_tank", - "plasmaman_tank_belt", - "pneumatic_seal", - "power_control", - "powermonitor", - "recharger", - "recycler", - "rped", - "scanner_gate", - "solarcontrol", - "stack_console", - "stack_machine", - "suit_storage_unit", - "tank_compressor", - "tesla_coil", - "thermomachine", - "w-recycler", - "welding_goggles", - ) - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 12500) - discount_experiments = list(/datum/experiment/scanning/random/material/easy = 7500) - experiments_to_unlock = list(/datum/experiment/scanning/points/machinery_pinpoint_scan/tier2_microlaser) - -/datum/techweb_node/adv_engi - id = "adv_engi" - display_name = "Advanced Engineering" - description = "Pushing the boundaries of physics, one chainsaw-fist at a time." - prereq_ids = list("engineering", "emp_basic") - design_ids = list( - "HFR_core", - "HFR_corner", - "HFR_fuel_input", - "HFR_interface", - "HFR_moderator_input", - "HFR_waste_output", - "engine_goggles", - "forcefield_projector", - "magboots", - "rcd_loaded", - "rcd_ammo", - "rpd_loaded", - "rtd_loaded", - "sheetifier", - "weldingmask", - "bolter_wrench", - ) - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 15000) - discount_experiments = list( - /datum/experiment/scanning/random/material/medium/one = 4000, - /datum/experiment/ordnance/gaseous/bz = 10000, - ) - -/datum/techweb_node/anomaly - id = "anomaly_research" - display_name = "Anomaly Research" - description = "Unlock the potential of the mysterious anomalies that appear on station." - prereq_ids = list("adv_engi", "practical_bluespace") - design_ids = list( - "anomaly_neutralizer", - "reactive_armour", - ) - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 5000) - -/datum/techweb_node/high_efficiency - id = "high_efficiency" - display_name = "High Efficiency Parts" - description = "Finely-tooled manufacturing techniques allowing for picometer-perfect precision levels." - prereq_ids = list("engineering", "datatheory") - design_ids = list( - "pico_servo", - "super_matter_bin", - ) - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 7500) - discount_experiments = list(/datum/experiment/scanning/points/machinery_tiered_scan/tier2_lathes = 5000) - -/datum/techweb_node/adv_power - id = "adv_power" - display_name = "Advanced Power Manipulation" - description = "How to get more zap." - prereq_ids = list("engineering") - design_ids = list( - "hyper_cell", - "power_turbine_console", - "smes", - "super_capacitor", - "super_cell", - "turbine_compressor", - "turbine_rotor", - "turbine_stator", - "modular_shield_generator", - "modular_shield_node", - "modular_shield_relay", - "modular_shield_charger", - "modular_shield_well", - ) - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 3500) - discount_experiments = list(/datum/experiment/scanning/points/machinery_pinpoint_scan/tier2_capacitors = 2500) - -/////////////////////////Bluespace tech///////////////////////// -/datum/techweb_node/bluespace_basic //Bluespace-memery - id = "bluespace_basic" - display_name = "Basic Bluespace Theory" - description = "Basic studies into the mysterious alternate dimension known as bluespace." - prereq_ids = list("base") - design_ids = list( - "beacon", - "bluespace_crystal", - "telesci_gps", - "xenobioconsole", - ) - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) - -/datum/techweb_node/bluespace_travel - id = "bluespace_travel" - display_name = "Bluespace Travel" - description = "Application of Bluespace for static teleportation technology." - prereq_ids = list("practical_bluespace") - design_ids = list( - "bluespace_pod", - "launchpad", - "launchpad_console", - "quantumpad", - "tele_hub", - "tele_station", - "teleconsole", - ) - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 5000) - discount_experiments = list(/datum/experiment/scanning/points/machinery_tiered_scan/tier3_bluespacemachines = 4000) - -/datum/techweb_node/micro_bluespace - id = "micro_bluespace" - display_name = "Miniaturized Bluespace Research" - description = "Extreme reduction in space required for bluespace engines, leading to portable bluespace technology." - prereq_ids = list("bluespace_travel", "practical_bluespace", "high_efficiency") - design_ids = list( - "bluespace_matter_bin", - "bluespacebodybag", - "medicalbed_emergency", - "femto_servo", - "quantum_keycard", - "swapper", - "triphasic_scanning", - "wormholeprojector", - ) - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 10000) - discount_experiments = list(/datum/experiment/scanning/points/machinery_tiered_scan/tier3_variety = 5000) - /* /datum/experiment/exploration_scan/random/condition) this should have a point cost but im not even sure the experiment works properly lmao*/ - -/datum/techweb_node/advanced_bluespace - id = "bluespace_storage" - display_name = "Advanced Bluespace Storage" - description = "With the use of bluespace we can create even more advanced storage devices than we could have ever done" - prereq_ids = list("micro_bluespace", "janitor") - design_ids = list( - "bag_holding", - ) - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 5000) - -/datum/techweb_node/practical_bluespace - id = "practical_bluespace" - display_name = "Applied Bluespace Research" - description = "Using bluespace to make things faster and better." - prereq_ids = list("bluespace_basic", "engineering") - design_ids = list( - "bluespacebeaker", - "bluespacesyringe", - "bluespace_coffeepot", - "bs_rped", - "minerbag_holding", - "ore_silo", - "phasic_scanning", - "plumbing_receiver", - "roastingstick", - ) - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 5000) - discount_experiments = list(/datum/experiment/scanning/points/machinery_pinpoint_scan/tier2_scanmodules = 3500) - -/datum/techweb_node/bluespace_power - id = "bluespace_power" - display_name = "Bluespace Power Technology" - description = "Even more powerful.. power!" - prereq_ids = list("adv_power", "practical_bluespace") - design_ids = list( - "bluespace_cell", - "quadratic_capacitor", - ) - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 4000) - discount_experiments = list(/datum/experiment/scanning/points/machinery_pinpoint_scan/tier3_cells = 3000) - -/datum/techweb_node/unregulated_bluespace - id = "unregulated_bluespace" - display_name = "Unregulated Bluespace Research" - description = "Bluespace technology using unstable or unbalanced procedures, prone to damaging the fabric of bluespace. Outlawed by galactic conventions." - prereq_ids = list("bluespace_travel", "syndicate_basic") - design_ids = list( - "desynchronizer", - ) - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) - - -/////////////////////////plasma tech///////////////////////// -/datum/techweb_node/basic_plasma - id = "basic_plasma" - display_name = "Basic Plasma Research" - description = "Research into the mysterious and dangerous substance, plasma." - prereq_ids = list("engineering") - design_ids = list( - "mech_generator", - ) - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) - -/datum/techweb_node/adv_plasma - id = "adv_plasma" - display_name = "Advanced Plasma Research" - description = "Research on how to fully exploit the power of plasma." - prereq_ids = list("basic_plasma") - design_ids = list( - "mech_plasma_cutter", - ) - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) - -/////////////////////////integrated circuits tech///////////////////////// - -/datum/techweb_node/adv_shells - id = "adv_shells" - display_name = "Advanced Shell Research" - description = "Grants access to more complicated shell designs." - prereq_ids = list("basic_circuitry", "engineering") - design_ids = list( - "assembly_shell", - "bot_shell", - "comp_equip_action", - "controller_shell", - "dispenser_shell", - "door_shell", - "gun_shell", - "keyboard_shell", - "module_shell", - "money_bot_shell", - "scanner_gate_shell", - "scanner_shell", - ) - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) - -/datum/techweb_node/bci_shells - id = "bci_shells" - display_name = "Brain-Computer Interfaces" - description = "Grants access to biocompatable shell designs and components." - prereq_ids = list("adv_shells") - design_ids = list( - "bci_implanter", - "bci_shell", - "comp_bar_overlay", - "comp_counter_overlay", - "comp_install_detector", - "comp_object_overlay", - "comp_reagent_injector", - "comp_target_intercept", - "comp_thought_listener", - "comp_vox", - ) - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 500) - -/datum/techweb_node/movable_shells_tech - id = "movable_shells" - display_name = "Movable Shell Research" - description = "Grants access to movable shells." - prereq_ids = list("adv_shells", "robotics") - design_ids = list( - "comp_pathfind", - "comp_pull", - "drone_shell", - ) - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 3000) - -/datum/techweb_node/server_shell_tech - id = "server_shell" - display_name = "Server Technology Research" - description = "Grants access to a server shell that has a very high capacity for components." - prereq_ids = list("adv_shells", "computer_data_disks") - design_ids = list( - "server_shell", - ) - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 3000) - -/////////////////////////robotics tech///////////////////////// -/datum/techweb_node/robotics - id = "robotics" - display_name = "Basic Robotics Research" - description = "Programmable machines that make our lives lazier." - prereq_ids = list("base") - design_ids = list( - "paicard", - "mecha_camera", - "botnavbeacon", - ) - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) - -/datum/techweb_node/adv_robotics - id = "adv_robotics" - display_name = "Advanced Robotics Research" - description = "Advanced synthetic neural networks and synaptic pathways allows for extraordinary leaps in cybernetic intelligence and interfacing." - prereq_ids = list("robotics") - design_ids = list( - "advanced_l_arm", - "advanced_r_arm", - "advanced_l_leg", - "advanced_r_leg", - "mmi_posi", - ) - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) - -/datum/techweb_node/adv_bots - id = "adv_bots" - display_name = "Advanced Bots Research" - description = "Grants access to a special launchpad designed for bots." - prereq_ids = list("robotics") - design_ids = list( - "botpad", - "botpad_remote", - ) - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) - -/datum/techweb_node/exodrone_tech - id = "exodrone" - display_name = "Exploration Drone Research" - description = "Technology for exploring far away locations." - prereq_ids = list("robotics") - design_ids = list( - "exodrone_console", - "exodrone_launcher", - "exoscanner", - "exoscanner_console", - ) - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) - -/datum/techweb_node/neural_programming - id = "neural_programming" - display_name = "Neural Programming" - description = "Study into networks of processing units that mimic our brains." - prereq_ids = list("biotech", "datatheory") - design_ids = list( - "skill_station", - ) - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) - -/datum/techweb_node/cyborg_upg_util - id = "cyborg_upg_util" - display_name = "Cyborg Upgrades: Utility" - description = "Utility upgrades for cyborgs." - prereq_ids = list("adv_robotics") - design_ids = list( - "borg_upgrade_advancedmop", - "borg_upgrade_broomer", - "borg_upgrade_expand", - "borg_upgrade_prt", - "borg_upgrade_selfrepair", - "borg_upgrade_thrusters", - "borg_upgrade_trashofholding", - ) - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2000) - -/datum/techweb_node/cyborg_upg_util/New() - . = ..() - if(!CONFIG_GET(flag/disable_secborg)) - design_ids += "borg_upgrade_disablercooler" - -/datum/techweb_node/cyborg_upg_serv - id = "cyborg_upg_serv" - display_name = "Cyborg Upgrades: Service" - description = "Service upgrades for cyborgs." - prereq_ids = list("adv_robotics") - design_ids = list( - "borg_upgrade_rolling_table", - "borg_upgrade_condiment_synthesizer", - "borg_upgrade_silicon_knife", - "borg_upgrade_service_apparatus", - "borg_upgrade_drink_apparatus", - "borg_upgrade_service_cookbook", - ) - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2000) - -/datum/techweb_node/cyborg_upg_engiminer - id = "cyborg_upg_engiminer" - display_name = "Cyborg Upgrades: Engineering & Mining" - description = "Engineering and Mining upgrades for cyborgs." - prereq_ids = list("adv_engi", "basic_mining") - design_ids = list( - "borg_upgrade_circuitapp", - "borg_upgrade_diamonddrill", - "borg_upgrade_holding", - "borg_upgrade_lavaproof", - "borg_upgrade_rped", - "borg_upgrade_hypermod", - "borg_upgrade_inducer", - "borg_upgrade_engineeringomnitool", - ) - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2000) - -/datum/techweb_node/cyborg_upg_med - id = "cyborg_upg_med" - display_name = "Cyborg Upgrades: Medical" - description = "Medical upgrades for cyborgs." - prereq_ids = list("adv_biotech") - design_ids = list( - "borg_upgrade_beakerapp", - "borg_upgrade_defibrillator", - "borg_upgrade_expandedsynthesiser", - "borg_upgrade_piercinghypospray", - "borg_upgrade_pinpointer", - "borg_upgrade_surgicalprocessor", - "borg_upgrade_surgicalomnitool", - ) - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2000) - -/datum/techweb_node/ai_basic - id = "ai_basic" - display_name = "Artificial Intelligence" - description = "AI unit research." - prereq_ids = list("adv_robotics") - design_ids = list( - "aicore", - "borg_ai_control", - "intellicard", - "mecha_tracking_ai_control", - "aifixer", - "aiupload", - "reset_module", - "asimov_module", - "default_module", - "nutimov_module", - "paladin_module", - "robocop_module", - "corporate_module", - "drone_module", - "oxygen_module", - "safeguard_module", - "protectstation_module", - "quarantine_module", - "freeform_module", - "remove_module", - ) - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) - -/datum/techweb_node/ai_basic/New() - . = ..() - if(HAS_TRAIT(SSstation, STATION_TRAIT_HUMAN_AI)) - design_ids -= list( - "aicore", - "borg_ai_control", - "intellicard", - "mecha_tracking_ai_control", - "aifixer", - "aiupload", - ) - -/datum/techweb_node/ai_adv - id = "ai_adv" - display_name = "Advanced Artificial Intelligence" - description = "State of the art lawsets to be used for AI research." - prereq_ids = list("ai_basic") - design_ids = list( - "asimovpp_module", - "paladin_devotion_module", - "dungeon_master_module", - "painter_module", - "ten_commandments_module", - "hippocratic_module", - "maintain_module", - "liveandletlive_module", - "reporter_module", - "hulkamania_module", - "peacekeeper_module", - "overlord_module", - "tyrant_module", - "antimov_module", - "balance_module", - "thermurderdynamic_module", - "damaged_module", - "freeformcore_module", - "onehuman_module", - "purge_module", - ) - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 3000) - -//Any kind of point adjustment needs to happen before SSresearch sets up the whole node tree, it gets cached -/datum/techweb_node/ai/New() - . = ..() - if(HAS_TRAIT(SSstation, STATION_TRAIT_UNIQUE_AI)) - research_costs[TECHWEB_POINT_TYPE_GENERIC] *= 3 - -/////////////////////////EMP tech///////////////////////// -/datum/techweb_node/emp_basic //EMP tech for some reason - id = "emp_basic" - display_name = "Electromagnetic Theory" - description = "Study into usage of frequencies in the electromagnetic spectrum." - prereq_ids = list("base") - design_ids = list( - "holosign", - "holosignsec", - "holosignengi", - "holosignatmos", - "holosignrestaurant", - "holosignbar", - "inducer", - "inducerengi", - "tray_goggles", - "holopad", - "vendatray", - ) - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) - -/datum/techweb_node/emp_adv - id = "emp_adv" - display_name = "Advanced Electromagnetic Theory" - description = "Determining whether reversing the polarity will actually help in a given situation." - prereq_ids = list("emp_basic") - design_ids = list( - "ultra_micro_laser", - ) - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 3000) - discount_experiments = list(/datum/experiment/scanning/points/machinery_pinpoint_scan/tier2_microlaser = 1500) - -/datum/techweb_node/emp_super - id = "emp_super" - display_name = "Quantum Electromagnetic Technology" //bs - description = "Even better electromagnetic technology." - prereq_ids = list("emp_adv") - design_ids = list( - "quadultra_micro_laser", - ) - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 15000) - discount_experiments = list( - /datum/experiment/scanning/points/machinery_pinpoint_scan/tier3_microlaser = 4000, - /datum/experiment/ordnance/gaseous/noblium = 10000, - ) - -/////////////////////////Clown tech///////////////////////// -/datum/techweb_node/clown - id = "clown" - display_name = "Clown Technology" - description = "Honk?!" - prereq_ids = list("base") - design_ids = list( - "air_horn", - "borg_transform_clown", - "honk_chassis", - "honk_head", - "honk_left_arm", - "honk_left_leg", - "honk_right_arm", - "honk_right_leg", - "honk_torso", - "honker_main", - "honker_peri", - "honker_targ", - "implant_trombone", - "mech_banana_mortar", - "mech_honker", - "mech_mousetrap_mortar", - "mech_punching_face", - "clown_firing_pin", - ) - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) - -////////////////////////Computer tech//////////////////////// -/datum/techweb_node/comptech - id = "comptech" - display_name = "Computer Consoles" - description = "Computers and how they work." - prereq_ids = list("datatheory") - design_ids = list( - "bankmachine", - "barcode_scanner", - "cargo", - "cargorequest", - "comconsole", - "crewconsole", - "idcard", - "libraryconsole", - "mining", - "photobooth", - "rdcamera", - "seccamera", - "security_photobooth", - ) - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2000) - -/datum/techweb_node/data_disks - id = "computer_data_disks" - display_name = "Computer Data Disks" - description = "Data disks used for storing modular computer stuff." - prereq_ids = list("comptech") - design_ids = list( - "portadrive_advanced", - "portadrive_basic", - "portadrive_super", - ) - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 1000) - -/datum/techweb_node/computer_board_gaming - id = "computer_board_gaming" - display_name = "Arcade Games" - description = "For the slackers on the station." - prereq_ids = list("comptech") - design_ids = list( - "arcade_battle", - "arcade_orion", - "slotmachine", - ) - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 3250) - discount_experiments = list(/datum/experiment/physical/arcade_winner = 3000) - -/datum/techweb_node/comp_recordkeeping - id = "comp_recordkeeping" - display_name = "Computerized Recordkeeping" - description = "Organized record databases and how they're used." - prereq_ids = list("comptech") - design_ids = list( - "account_console", - "automated_announcement", - "med_data", - "prisonmanage", - "secdata", - "vendor", - ) - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 1000) - -/datum/techweb_node/telecomms - id = "telecomms" - display_name = "Telecommunications Technology" - description = "Subspace transmission technology for near-instant communications devices." - prereq_ids = list("comptech", "bluespace_basic") - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) - design_ids = list( - "comm_monitor", - "comm_server", - "gigabeacon", - "message_monitor", - "ntnet_relay", - "s_amplifier", - "s_analyzer", - "s_ansible", - "s_broadcaster", - "s_bus", - "s_crystal", - "s_filter", - "s_hub", - "s_messaging", - "s_processor", - "s_receiver", - "s_relay", - "s_server", - "s_transmitter", - "s_treatment", - ) - -/datum/techweb_node/tram - id = "tram" - display_name = "Tram Technology" - description = "Technology for linear induction transportation systems." - prereq_ids = list("telecomms") - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 1500) - design_ids = list( - "tram_controller", - "tram_display", - "crossing_signal", - "guideway_sensor", - ) - -/datum/techweb_node/integrated_hud - id = "integrated_HUDs" - display_name = "Integrated HUDs" - description = "The usefulness of computerized records, projected straight onto your eyepiece!" - prereq_ids = list("comp_recordkeeping", "emp_basic") - design_ids = list( - "diagnostic_hud", - "health_hud", - "scigoggles", - "security_hud", - ) - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 1500) - -/datum/techweb_node/nvg_tech - id = "NVGtech" - display_name = "Night Vision Technology" - description = "Allows seeing in the dark without actual light!" - prereq_ids = list("integrated_HUDs", "adv_engi", "emp_adv") - design_ids = list( - "diagnostic_hud_night", - "health_hud_night", - "night_visision_goggles", - "nvgmesons", - "nv_scigoggles", - "security_hud_night", - ) - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 5000) - -////////////////////////Medical//////////////////////// -/datum/techweb_node/genetics - id = "genetics" - display_name = "Genetic Engineering" - description = "We have the technology to change him." - prereq_ids = list("biotech") - design_ids = list( - "dna_disk", - "dnainfuser", - "dnascanner", - "scan_console", - ) - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) - -/datum/techweb_node/cryotech - id = "cryotech" - display_name = "Cryostasis Technology" - description = "Smart freezing of objects to preserve them!" - prereq_ids = list("adv_engi", "biotech") - design_ids = list( - "cryo_grenade", - "cryotube", - "splitbeaker", - "stasis", - ) - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2000) - -/datum/techweb_node/subdermal_implants - id = "subdermal_implants" - display_name = "Subdermal Implants" - description = "Electronic implants buried beneath the skin." - prereq_ids = list("biotech") - design_ids = list( - "c38_trac", - "implant_chem", - "implant_tracking", - "implant_exile", - "implantcase", - "implanter", - "locator", - ) - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) - -/datum/techweb_node/advanced_implants - id = "adv_subdermal_implants" - display_name = "Advanced Subdermal Implants" - description = "Subdermal implants that leverage bluespace research to control their bluespace signature." - prereq_ids = list("subdermal_implants", "micro_bluespace") - design_ids = list( - "implant_beacon", - "implant_bluespace", - ) - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) - -/datum/techweb_node/cyber_organs - id = "cyber_organs" - display_name = "Cybernetic Organs" - description = "We have the technology to rebuild him." - prereq_ids = list("biotech") - design_ids = list( - "cybernetic_ears_u", - "cybernetic_eyes_improved", - "cybernetic_eyes_improved_moth", - "cybernetic_heart_tier2", - "cybernetic_liver_tier2", - "cybernetic_lungs_tier2", - "cybernetic_stomach_tier2", - ) - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 1000) - -/datum/techweb_node/cyber_organs/New() - ..() - if(HAS_TRAIT(SSstation, STATION_TRAIT_CYBERNETIC_REVOLUTION)) - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 500) - -/datum/techweb_node/cyber_organs_upgraded - id = "cyber_organs_upgraded" - display_name = "Upgraded Cybernetic Organs" - description = "We have the technology to upgrade him." - prereq_ids = list("adv_biotech", "cyber_organs") - design_ids = list( - "cybernetic_ears_whisper", - "cybernetic_ears_xray", - "ci-gloweyes", - "ci-welding", - "ci-gloweyes-moth", - "ci-welding-moth", - "cybernetic_heart_tier3", - "cybernetic_liver_tier3", - "cybernetic_lungs_tier3", - "cybernetic_stomach_tier3", - ) - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 1500) - -/datum/techweb_node/cyber_organs_upgraded/New() - ..() - if(HAS_TRAIT(SSstation, STATION_TRAIT_CYBERNETIC_REVOLUTION)) - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 1000) - -/datum/techweb_node/cyber_implants - id = "cyber_implants" - display_name = "Cybernetic Implants" - description = "Electronic implants that improve humans." - prereq_ids = list("adv_biotech", "datatheory") - design_ids = list( - "ci-breather", - "ci-diaghud", - "ci-medhud", - "ci-nutriment", - "ci-sechud", - ) - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) - -/datum/techweb_node/cyber_implants/New() - ..() - if(HAS_TRAIT(SSstation, STATION_TRAIT_CYBERNETIC_REVOLUTION)) - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 1000) - -/datum/techweb_node/adv_cyber_implants - id = "adv_cyber_implants" - display_name = "Advanced Cybernetic Implants" - description = "Upgraded and more powerful cybernetic implants." - prereq_ids = list("neural_programming", "cyber_implants","integrated_HUDs") - design_ids = list( - "ci-nutrimentplus", - "ci-reviver", - "ci-surgery", - "ci-toolset", - ) - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) - -/datum/techweb_node/adv_cyber_implants/New() - ..() - if(HAS_TRAIT(SSstation, STATION_TRAIT_CYBERNETIC_REVOLUTION)) - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 1500) - -/datum/techweb_node/combat_cyber_implants - id = "combat_cyber_implants" - display_name = "Combat Cybernetic Implants" - description = "Military grade combat implants to improve performance." - prereq_ids = list("adv_cyber_implants","weaponry","NVGtech","high_efficiency") - design_ids = list( - "ci-antidrop", - "ci-antistun", - "ci-thermals", - "ci-thrusters", - "ci-xray", - "ci-thermals-moth", - "ci-xray-moth", - ) - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) - -/datum/techweb_node/combat_cyber_implants/New() - ..() - if(HAS_TRAIT(SSstation, STATION_TRAIT_CYBERNETIC_REVOLUTION)) - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 1500) - -////////////////////////Tools//////////////////////// - -/datum/techweb_node/basic_mining - id = "basic_mining" - display_name = "Mining Technology" - description = "Better than Efficiency V." - prereq_ids = list("engineering", "basic_plasma") - design_ids = list( - "borg_upgrade_cooldownmod", - "borg_upgrade_damagemod", - "borg_upgrade_rangemod", - "cargoexpress", - "cooldownmod", - "damagemod", - "drill", - "mecha_kineticgun", - "mining_equipment_vendor", - "ore_redemption", - "plasmacutter", - "rangemod", - "superresonator", - "triggermod", - "mining_scanner", - "brm", - "b_smelter", - "b_refinery", - )//e a r l y g a m e) - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) - -/datum/techweb_node/adv_mining - id = "adv_mining" - display_name = "Advanced Mining Technology" - description = "Efficiency Level 127" //dumb mc references - prereq_ids = list("basic_mining", "adv_power", "adv_plasma") - design_ids = list( - "drill_diamond", - "hypermod", - "jackhammer", - "plasmacutter_adv", - ) - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 7500) - discount_experiments = list(/datum/experiment/scanning/random/material/hard/one = 5000) - -/datum/techweb_node/janitor - id = "janitor" - display_name = "Advanced Sanitation Technology" - description = "Clean things better, faster, stronger, and harder!" - prereq_ids = list("adv_engi") - design_ids = list( - "advmop", - "beartrap", - "blutrash", - "buffer", - "vacuum", - "holobarrier_jani", - "light_replacer_blue", - "paint_remover", - "spraybottle", - ) - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 4000) - discount_experiments = list(/datum/experiment/scanning/random/janitor_trash = 3000) //75% discount for scanning some trash, seems fair right? - -/datum/techweb_node/botany - id = "botany" - display_name = "Botanical Engineering" - description = "Botanical tools" - prereq_ids = list("biotech") - design_ids = list( - "biogenerator", - "flora_gun", - "gene_shears", - "hydro_tray", - "portaseeder", - "seed_extractor", - "adv_watering_can", - ) - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 4000) - required_experiments = list(/datum/experiment/scanning/random/plants/wild) - discount_experiments = list(/datum/experiment/scanning/random/plants/traits = 3000) - -/datum/techweb_node/fishing - id = "fishing" - display_name = "Fishing Technology" - description = "Cutting edge fishing advancements." - prereq_ids = list("base") - design_ids = list( - "fishing_rod_tech", - "stabilized_hook", - "auto_reel", - "fish_analyzer", - ) - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2000) - required_experiments = list(/datum/experiment/scanning/fish) - -/datum/techweb_node/exp_tools - id = "exp_tools" - display_name = "Experimental Tools" - description = "Highly advanced tools." - prereq_ids = list("adv_engi") - design_ids = list( - "exwelder", - "handdrill", - "jawsoflife", - "laserscalpel", - "mechanicalpinches", - "rangedanalyzer", - "searingtool", - "adv_fire_extinguisher", - ) - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 7500) - discount_experiments = list(/datum/experiment/scanning/random/material/hard/one = 5000) - -/datum/techweb_node/sec_basic - id = "sec_basic" - display_name = "Basic Security Equipment" - description = "Standard equipment used by security." - prereq_ids = list("base") - design_ids = list( - "bola_energy", - "evidencebag", - "pepperspray", - "seclite", - "zipties", - "inspector", - ) - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 1000) - -/datum/techweb_node/rcd_upgrade - id = "rcd_upgrade" - display_name = "Rapid Device Upgrade Designs" - description = "Unlocks new designs that improve rapid devices." - prereq_ids = list("adv_engi") - design_ids = list( - "rcd_upgrade_anti_interrupt", - "rcd_upgrade_cooling", - "rcd_upgrade_frames", - "rcd_upgrade_furnishing", - "rcd_upgrade_simple_circuits", - "rpd_upgrade_unwrench", - ) - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) - -/datum/techweb_node/adv_rcd_upgrade - id = "adv_rcd_upgrade" - display_name = "Advanced RCD Designs Upgrade" - description = "Unlocks new RCD designs." - design_ids = list( - "rcd_upgrade_silo_link", - ) - prereq_ids = list( - "bluespace_travel", - "rcd_upgrade", - ) - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 10000) - discount_experiments = list(/datum/experiment/scanning/random/material/hard/two = 5000) - -/////////////////////////weaponry tech///////////////////////// -/datum/techweb_node/weaponry - id = "weaponry" - display_name = "Weapon Development Technology" - description = "Our researchers have found new ways to weaponize just about everything now." - prereq_ids = list("engineering") - design_ids = list( - "ballistic_shield", - "pin_testing", - "tele_shield", - "lasershell", - ) - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 20000) - discount_experiments = list(/datum/experiment/ordnance/explosive/pressurebomb = 10000) - -/datum/techweb_node/adv_weaponry - id = "adv_weaponry" - display_name = "Advanced Weapon Development Technology" - description = "Our weapons are breaking the rules of reality by now." - prereq_ids = list("adv_engi", "weaponry") - design_ids = list( - "pin_loyalty", - ) - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 10000) - -/datum/techweb_node/electric_weapons - id = "electronic_weapons" - display_name = "Electric Weapons" - description = "Weapons using electric technology" - prereq_ids = list("weaponry", "adv_power" , "emp_basic") - design_ids = list( - "ioncarbine", - "stunrevolver", - ) - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) - -/datum/techweb_node/radioactive_weapons - id = "radioactive_weapons" - display_name = "Radioactive Weaponry" - description = "Weapons using radioactive technology." - prereq_ids = list("adv_engi", "adv_weaponry") - design_ids = list( - "nuclear_gun", - ) - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) - -/datum/techweb_node/beam_weapons - id = "beam_weapons" - display_name = "Beam Weaponry" - description = "Various basic beam weapons" - prereq_ids = list("adv_weaponry") - design_ids = list( - "temp_gun", - "xray_laser", - ) - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) - -/datum/techweb_node/adv_beam_weapons - id = "adv_beam_weapons" - display_name = "Advanced Beam Weaponry" - description = "Various advanced beam weapons" - prereq_ids = list("beam_weapons") - design_ids = list( - "beamrifle", - ) - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) - -/datum/techweb_node/explosive_weapons - id = "explosive_weapons" - display_name = "Explosive & Pyrotechnical Weaponry" - description = "If the light stuff just won't do it." - prereq_ids = list("adv_weaponry") - design_ids = list( - "adv_grenade", - "large_grenade", - "pyro_grenade", - ) - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) - -/datum/techweb_node/exotic_ammo - id = "exotic_ammo" - display_name = "Exotic Ammunition" - description = "They won't know what hit em." - prereq_ids = list("weaponry") - design_ids = list( - "c38_hotshot", - "c38_iceblox", - "techshotshell", - ) - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) - -/datum/techweb_node/gravity_gun - id = "gravity_gun" - display_name = "One-point Bluespace-gravitational Manipulator" - description = "Fancy wording for gravity gun." - prereq_ids = list("adv_weaponry", "bluespace_travel") - design_ids = list( - "gravitygun", - "mech_gravcatapult", - ) - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) - -//MODsuit tech - -/datum/techweb_node/mod_advanced - id = "mod_advanced" - display_name = "Advanced Modular Suits" - description = "More advanced modules, to improve modular suits." - prereq_ids = list("robotics") - design_ids = list( - "mod_visor_diaghud", - "mod_gps", - "mod_reagent_scanner", - "mod_clamp", - "mod_drill", - "mod_orebag", - "modlink_scryer", - ) - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) - -/datum/techweb_node/mod_engineering - id = "mod_engineering" - display_name = "Engineering Modular Suits" - description = "Engineering suits, for powered engineers." - prereq_ids = list("mod_advanced", "engineering") - design_ids = list( - "mod_plating_engineering", - "mod_visor_meson", - "mod_t_ray", - "mod_magboot", - "mod_tether", - "mod_constructor", - "mod_mister_atmos", - ) - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) - -/datum/techweb_node/mod_advanced_engineering - id = "mod_advanced_engineering" - display_name = "Advanced Engineering Modular Suits" - description = "Advanced Engineering suits, for advanced powered engineers." - prereq_ids = list("mod_engineering", "adv_engi") - design_ids = list( - "mod_plating_atmospheric", - "mod_jetpack", - "mod_rad_protection", - "mod_emp_shield", - "mod_storage_expanded", - ) - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 3500) - -/datum/techweb_node/mod_advanced_engineering/New() - if(HAS_TRAIT(SSstation, STATION_TRAIT_RADIOACTIVE_NEBULA)) //we'll really need the rad protection modsuit module - starting_node = TRUE - - return ..() - -/datum/techweb_node/mod_medical - id = "mod_medical" - display_name = "Medical Modular Suits" - description = "Medical suits for quick rescue purposes." - prereq_ids = list("mod_advanced", "biotech") - design_ids = list( - "mod_plating_medical", - "mod_visor_medhud", - "mod_health_analyzer", - "mod_quick_carry", - "mod_injector", - "mod_organ_thrower", - "mod_dna_lock", - "mod_patienttransport", - ) - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) - -/datum/techweb_node/mod_advanced_medical - id = "mod_advanced_medical" - display_name = "Advanced Medical Modular Suits" - description = "Advanced medical suits for quicker rescue purposes." - prereq_ids = list("mod_medical", "adv_biotech") - design_ids = list( - "mod_defib", - "mod_threadripper", - "mod_surgicalprocessor", - "mod_statusreadout", - ) - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 3500) - -/datum/techweb_node/mod_security - id = "mod_security" - display_name = "Security Modular Suits" - description = "Security suits for space crime handling." - prereq_ids = list("mod_advanced", "sec_basic") - design_ids = list( - "mod_plating_security", - "mod_visor_sechud", - "mod_stealth", - "mod_mag_harness", - "mod_pathfinder", - "mod_holster", - "mod_sonar", - "mod_projectile_dampener", - "mod_criminalcapture", - ) - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) - -/datum/techweb_node/mod_entertainment - id = "mod_entertainment" - display_name = "Entertainment Modular Suits" - description = "Powered suits for protection against low-humor environments." - prereq_ids = list("mod_advanced", "clown") - design_ids = list( - "mod_plating_cosmohonk", - "mod_bikehorn", - "mod_microwave_beam", - "mod_waddle", - ) - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) - -/datum/techweb_node/mod_anomaly - id = "mod_anomaly" - display_name = "Anomalock Modular Suits" - description = "Modules for modular suits that require anomaly cores to function." - prereq_ids = list("mod_advanced", "anomaly_research") - design_ids = list( - "mod_antigrav", - "mod_teleporter", - ) - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) - -/datum/techweb_node/mod_anomaly_engi - id = "mod_anomaly_engi" - display_name = "Engineering Anomalock Modular Suits" - description = "Advanced modules for modular suits, using anomaly cores to become even better engineers." - prereq_ids = list("mod_advanced_engineering", "mod_anomaly") - design_ids = list( - "mod_kinesis", - ) - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 1000) - -////////////////////////mech technology//////////////////////// -/datum/techweb_node/adv_mecha - id = "adv_mecha" - display_name = "Advanced Exosuits" - description = "For when you just aren't Gundam enough." - prereq_ids = list("adv_robotics") - design_ids = list( - "mech_repair_droid", - ) - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 7500) - discount_experiments = list(/datum/experiment/scanning/random/material/medium/three = 5000) - -/datum/techweb_node/odysseus - id = "mecha_odysseus" - display_name = "EXOSUIT: Odysseus" - description = "Odysseus exosuit designs" - prereq_ids = list("base") - design_ids = list( - "odysseus_chassis", - "odysseus_head", - "odysseus_left_arm", - "odysseus_left_leg", - "odysseus_main", - "odysseus_peri", - "odysseus_right_arm", - "odysseus_right_leg", - "odysseus_torso", - ) - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) - -/datum/techweb_node/clarke - id = "mecha_clarke" - display_name = "EXOSUIT: Clarke" - description = "Clarke exosuit designs" - prereq_ids = list("engineering") - design_ids = list( - "clarke_chassis", - "clarke_head", - "clarke_left_arm", - "clarke_main", - "clarke_peri", - "clarke_right_arm", - "clarke_torso", - ) - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) - -/datum/techweb_node/paddy - id = "mech_paddy" - display_name = "EXOSUIT: APLU \"Paddy\"" - description = "Paddy exosuit designs" - prereq_ids = list("adv_mecha", "adv_mecha_armor") - design_ids = list( - "paddyupgrade", - "mech_hydraulic_claw" - ) - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 5000) - discount_experiments = list(/datum/experiment/scanning/points/machinery_tiered_scan/tier3_mechbay = 5000) - -/datum/techweb_node/gygax - id = "mech_gygax" - display_name = "EXOSUIT: Gygax" - description = "Gygax exosuit designs" - prereq_ids = list("adv_mecha", "adv_mecha_armor") - design_ids = list( - "gygax_armor", - "gygax_chassis", - "gygax_head", - "gygax_left_arm", - "gygax_left_leg", - "gygax_main", - "gygax_peri", - "gygax_right_arm", - "gygax_right_leg", - "gygax_targ", - "gygax_torso", - ) - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 5000) - discount_experiments = list(/datum/experiment/scanning/points/machinery_tiered_scan/tier3_mechbay = 5000) - -/datum/techweb_node/durand - id = "mech_durand" - display_name = "EXOSUIT: Durand" - description = "Durand exosuit designs" - prereq_ids = list("adv_mecha", "adv_mecha_armor") - design_ids = list( - "durand_armor", - "durand_chassis", - "durand_head", - "durand_left_arm", - "durand_left_leg", - "durand_main", - "durand_peri", - "durand_right_arm", - "durand_right_leg", - "durand_targ", - "durand_torso", - ) - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 5000) - discount_experiments = list(/datum/experiment/scanning/points/machinery_tiered_scan/tier3_mechbay = 3500) - -/datum/techweb_node/phazon - id = "mecha_phazon" - display_name = "EXOSUIT: Phazon" - description = "Phazon exosuit designs" - prereq_ids = list("adv_mecha", "adv_mecha_armor" , "micro_bluespace") - design_ids = list( - "phazon_armor", - "phazon_chassis", - "phazon_head", - "phazon_left_arm", - "phazon_left_leg", - "phazon_main", - "phazon_peri", - "phazon_right_arm", - "phazon_right_leg", - "phazon_targ", - "phazon_torso", - ) - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 5000) - discount_experiments = list(/datum/experiment/scanning/points/machinery_tiered_scan/tier3_mechbay = 2500) - -/datum/techweb_node/savannah_ivanov - id = "mecha_savannah_ivanov" - display_name = "EXOSUIT: Savannah-Ivanov" - description = "Savannah-Ivanov exosuit designs" - prereq_ids = list("adv_mecha", "weaponry", "exp_tools") - design_ids = list( - "savannah_ivanov_armor", - "savannah_ivanov_chassis", - "savannah_ivanov_head", - "savannah_ivanov_left_arm", - "savannah_ivanov_left_leg", - "savannah_ivanov_main", - "savannah_ivanov_peri", - "savannah_ivanov_right_arm", - "savannah_ivanov_right_leg", - "savannah_ivanov_targ", - "savannah_ivanov_torso", - ) - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 5000) - discount_experiments = list(/datum/experiment/scanning/points/machinery_tiered_scan/tier3_mechbay = 3000) - -/datum/techweb_node/adv_mecha_tools - id = "adv_mecha_tools" - display_name = "Advanced Exosuit Equipment" - description = "Tools for high level mech suits" - prereq_ids = list("adv_mecha") - design_ids = list( - "mech_rcd", - ) - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) - -/datum/techweb_node/med_mech_tools - id = "med_mech_tools" - display_name = "Medical Exosuit Equipment" - description = "Tools for high level mech suits" - prereq_ids = list("adv_biotech") - design_ids = list( - "mech_medi_beam", - "mech_sleeper", - "mech_syringe_gun", - ) - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) - -/datum/techweb_node/mech_armor - id = "adv_mecha_armor" - display_name = "Exosuit Heavy Armor Research" - description = "Recreating heavy armor with new rapid fabrication techniques." - prereq_ids = list("adv_mecha", "bluespace_power") - design_ids = list( - "mech_ccw_armor", - "mech_proj_armor", - ) - required_experiments = list(/datum/experiment/scanning/random/mecha_damage_scan) - discount_experiments = list(/datum/experiment/scanning/random/mecha_equipped_scan = 5000) - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 10000) - -/datum/techweb_node/mech_scattershot - id = "mecha_tools" - display_name = "Exosuit Weapon (LBX AC 10 \"Scattershot\")" - description = "An advanced piece of mech weaponry" - prereq_ids = list("adv_mecha") - design_ids = list( - "mech_scattershot", - "mech_scattershot_ammo", - ) - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) - -/datum/techweb_node/mech_carbine - id = "mech_carbine" - display_name = "Exosuit Weapon (FNX-99 \"Hades\" Carbine)" - description = "An advanced piece of mech weaponry" - prereq_ids = list("exotic_ammo") - design_ids = list( - "mech_carbine", - "mech_carbine_ammo", - ) - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) - -/datum/techweb_node/mech_ion - id = "mmech_ion" - display_name = "Exosuit Weapon (MKIV Ion Heavy Cannon)" - description = "An advanced piece of mech weaponry" - prereq_ids = list("electronic_weapons", "emp_adv") - design_ids = list( - "mech_ion", - ) - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) - -/datum/techweb_node/mech_tesla - id = "mech_tesla" - display_name = "Exosuit Weapon (MKI Tesla Cannon)" - description = "An advanced piece of mech weaponry" - prereq_ids = list("electronic_weapons", "adv_power") - design_ids = list( - "mech_tesla", - ) - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) - -/datum/techweb_node/mech_laser - id = "mech_laser" - display_name = "Exosuit Weapon (CH-PS \"Immolator\" Laser)" - description = "A basic piece of mech weaponry" - prereq_ids = list("beam_weapons") - design_ids = list( - "mech_laser", - ) - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) - -/datum/techweb_node/mech_laser_heavy - id = "mech_laser_heavy" - display_name = "Exosuit Weapon (CH-LC \"Solaris\" Laser Cannon)" - description = "An advanced piece of mech weaponry" - prereq_ids = list("adv_beam_weapons") - design_ids = list( - "mech_laser_heavy", - ) - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) - -/datum/techweb_node/mech_disabler - id = "mech_disabler" - display_name = "Exosuit Weapon (CH-DS \"Peacemaker\" Mounted Disabler)" - description = "A basic piece of mech weaponry" - prereq_ids = list("adv_mecha") - design_ids = list( - "mech_disabler", - ) - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) - -/datum/techweb_node/mech_grenade_launcher - id = "mech_grenade_launcher" - display_name = "Exosuit Weapon (SGL-6 Grenade Launcher)" - description = "An advanced piece of mech weaponry" - prereq_ids = list("explosive_weapons") - design_ids = list( - "mech_grenade_launcher", - "mech_grenade_launcher_ammo", - ) - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) - -/datum/techweb_node/mech_missile_rack - id = "mech_missile_rack" - display_name = "Exosuit Weapon (BRM-6 Missile Rack)" - description = "An advanced piece of mech weaponry" - prereq_ids = list("explosive_weapons") - design_ids = list( - "mech_missile_rack", - "mech_missile_rack_ammo", - ) - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) - -/datum/techweb_node/clusterbang_launcher - id = "clusterbang_launcher" - display_name = "Exosuit Module (SOB-3 Clusterbang Launcher)" - description = "An advanced piece of mech weaponry" - prereq_ids = list("explosive_weapons") - design_ids = list( - "clusterbang_launcher", - "clusterbang_launcher_ammo", - ) - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) - -/datum/techweb_node/mech_teleporter - id = "mech_teleporter" - display_name = "Exosuit Module (Teleporter Module)" - description = "An advanced piece of mech Equipment" - prereq_ids = list("micro_bluespace") - design_ids = list( - "mech_teleporter", - ) - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) - -/datum/techweb_node/mech_wormhole_gen - id = "mech_wormhole_gen" - display_name = "Exosuit Module (Localized Wormhole Generator)" - description = "An advanced piece of mech weaponry" - prereq_ids = list("bluespace_travel") - design_ids = list( - "mech_wormhole_gen", - ) - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) - -/datum/techweb_node/mech_lmg - id = "mech_lmg" - display_name = "Exosuit Weapon (\"Ultra AC 2\" LMG)" - description = "An advanced piece of mech weaponry" - prereq_ids = list("adv_mecha") - design_ids = list( - "mech_lmg", - "mech_lmg_ammo", - ) - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) - -/datum/techweb_node/mech_diamond_drill - id = "mech_diamond_drill" - display_name = "Exosuit Diamond Drill" - description = "A diamond drill fit for a large exosuit" - prereq_ids = list("adv_mining") - design_ids = list( - "mech_diamond_drill", - ) - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) - -////////////////////////Alien technology//////////////////////// -/datum/techweb_node/alientech //AYYYYYYYYLMAOO tech - id = "alientech" - display_name = "Alien Technology" - description = "Things used by the greys." - prereq_ids = list("biotech","engineering") - required_items_to_unlock = list( - /obj/item/stack/sheet/mineral/abductor, - /obj/item/abductor, - /obj/item/cautery/alien, - /obj/item/circuitboard/machine/abductor, - /obj/item/circular_saw/alien, - /obj/item/crowbar/abductor, - /obj/item/gun/energy/alien, - /obj/item/gun/energy/shrink_ray, - /obj/item/hemostat/alien, - /obj/item/melee/baton/abductor, - /obj/item/multitool/abductor, - /obj/item/retractor/alien, - /obj/item/scalpel/alien, - /obj/item/screwdriver/abductor, - /obj/item/surgicaldrill/alien, - /obj/item/weldingtool/abductor, - /obj/item/wirecutters/abductor, - /obj/item/wrench/abductor, - ) - design_ids = list( - "alienalloy", - ) - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 5000) - hidden = TRUE - -/datum/techweb_node/alientech/on_station_research() - SSshuttle.shuttle_purchase_requirements_met[SHUTTLE_UNLOCK_ALIENTECH] = TRUE - -/datum/techweb_node/alien_bio - id = "alien_bio" - display_name = "Alien Biological Tools" - description = "Advanced biological tools." - prereq_ids = list("alientech", "adv_biotech") - design_ids = list( - "alien_cautery", - "alien_drill", - "alien_hemostat", - "alien_retractor", - "alien_saw", - "alien_scalpel", - ) - - required_items_to_unlock = list( - /obj/item/abductor, - /obj/item/cautery/alien, - /obj/item/circuitboard/machine/abductor, - /obj/item/circular_saw/alien, - /obj/item/crowbar/abductor, - /obj/item/gun/energy/alien, - /obj/item/gun/energy/shrink_ray, - /obj/item/hemostat/alien, - /obj/item/melee/baton/abductor, - /obj/item/multitool/abductor, - /obj/item/retractor/alien, - /obj/item/scalpel/alien, - /obj/item/screwdriver/abductor, - /obj/item/surgicaldrill/alien, - /obj/item/weldingtool/abductor, - /obj/item/wirecutters/abductor, - /obj/item/wrench/abductor, - ) - - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 12500) - discount_experiments = list(/datum/experiment/scanning/points/slime/hard = 10000) - hidden = TRUE - -/datum/techweb_node/alien_engi - id = "alien_engi" - display_name = "Alien Engineering" - description = "Alien engineering tools" - prereq_ids = list("alientech", "adv_engi") - - design_ids = list( - "alien_crowbar", - "alien_multitool", - "alien_screwdriver", - "alien_welder", - "alien_wirecutters", - "alien_wrench", - ) - - required_items_to_unlock = list( - /obj/item/abductor, - /obj/item/circuitboard/machine/abductor, - /obj/item/crowbar/abductor, - /obj/item/gun/energy/shrink_ray, - /obj/item/melee/baton/abductor, - /obj/item/multitool/abductor, - /obj/item/screwdriver/abductor, - /obj/item/weldingtool/abductor, - /obj/item/wirecutters/abductor, - /obj/item/wrench/abductor, - ) - - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) - hidden = TRUE - -/datum/techweb_node/syndicate_basic - id = "syndicate_basic" - display_name = "Illegal Technology" - description = "Dangerous research used to create dangerous objects." - prereq_ids = list("adv_engi", "adv_weaponry", "explosive_weapons") - design_ids = list( - "advanced_camera", - "ai_cam_upgrade", - "borg_syndicate_module", - "donksoft_refill", - "donksofttoyvendor", - "largecrossbow", - "mag_autorifle", - "mag_autorifle_ap", - "mag_autorifle_ic", - "rapidsyringe", - "suppressor", - "super_pointy_tape", - ) - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 10000) - hidden = TRUE - -/datum/techweb_node/syndicate_basic/New() //Crappy way of making syndicate gear decon supported until there's another way. - . = ..() - if(!SSearly_assets.initialized) - RegisterSignal(SSearly_assets, COMSIG_SUBSYSTEM_POST_INITIALIZE, PROC_REF(register_uplink_items)) - else - register_uplink_items() - -/** - * This needs some clarification: The uplink_items_by_type list is populated on datum/asset/json/uplink/generate. - * SStraitor doesn't actually initialize. I'm bamboozled. - */ -/datum/techweb_node/syndicate_basic/proc/register_uplink_items() - SIGNAL_HANDLER - UnregisterSignal(SSearly_assets, COMSIG_SUBSYSTEM_POST_INITIALIZE) - required_items_to_unlock = list() - for(var/datum/uplink_item/item_path as anything in SStraitor.uplink_items_by_type) - var/datum/uplink_item/item = SStraitor.uplink_items_by_type[item_path] - if(!item.item || !item.illegal_tech) - continue - required_items_to_unlock |= item.item //allows deconning to unlock. - - -////////////////////////B.E.P.I.S. Locked Techs//////////////////////// -/datum/techweb_node/light_apps - id = "light_apps" - display_name = "Illumination Applications" - description = "Applications of lighting and vision technology not originally thought to be commercially viable." - prereq_ids = list("base") - design_ids = list( - "bright_helmet", - "rld_mini", - ) - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) - hidden = TRUE - experimental = TRUE - -/datum/techweb_node/extreme_office - id = "extreme_office" - display_name = "Advanced Office Applications" - description = "Some of our smartest lab guys got together on a Friday and improved our office efficiency by 350%. Here's how." - prereq_ids = list("base") - design_ids = list( - "mauna_mug", - "rolling_table", - ) - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) - hidden = TRUE - experimental = TRUE - -/datum/techweb_node/spec_eng - id = "spec_eng" - display_name = "Specialized Engineering" - description = "Conventional wisdom has deemed these engineering products 'technically' safe, but far too dangerous to traditionally condone." - prereq_ids = list("base") - design_ids = list( - "eng_gloves", - "lava_rods", - ) - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) - hidden = TRUE - experimental = TRUE - -/datum/techweb_node/aus_security - id = "aus_security" - display_name = "Australicus Security Protocols" - description = "It is said that security in the Australicus sector is tight, so we took some pointers from their equipment. Thankfully, our sector lacks any signs of these, 'dropbears'." - prereq_ids = list("base") - design_ids = list( - "pin_explorer", - "stun_boomerang", - ) - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) - hidden = TRUE - experimental = TRUE - -/datum/techweb_node/interrogation - id = "interrogation" - display_name = "Enhanced Interrogation Technology" - description = "By cross-referencing several declassified documents from past dictatorial regimes, we were able to develop an incredibly effective interrogation device. \ - Ethical concerns about loss of free will do not apply to criminals, according to galactic law." - prereq_ids = list("base") - design_ids = list( - "hypnochair", - ) - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 3500) - hidden = TRUE - experimental = TRUE - -/datum/techweb_node/sticky_advanced - id = "sticky_advanced" - display_name = "Advanced Sticky Technology" - description = "Taking a good joke too far? Nonsense!" - design_ids = list( - "pointy_tape", - "super_sticky_tape", - ) - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) - hidden = TRUE - experimental = TRUE - -/datum/techweb_node/tackle_advanced - id = "tackle_advanced" - display_name = "Advanced Grapple Technology" - description = "Nanotrasen would like to remind its researching staff that it is never acceptable to \"glomp\" your coworkers, and further \"scientific trials\" on the subject \ - will no longer be accepted in its academic journals." - design_ids = list( - "tackle_dolphin", - "tackle_rocket", - ) - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) - hidden = TRUE - experimental = TRUE - -/datum/techweb_node/mod_experimental - id = "mod_experimental" - display_name = "Experimental Modular Suits" - description = "Applications of experimentality when creating MODsuits have created these..." - prereq_ids = list("base") - design_ids = list( - "mod_disposal", - "mod_joint_torsion", - "mod_recycler", - "mod_shooting", - ) - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) - hidden = TRUE - experimental = TRUE diff --git a/code/modules/research/techweb/nodes/alien_nodes.dm b/code/modules/research/techweb/nodes/alien_nodes.dm new file mode 100644 index 0000000000000..c5d21c255cf8e --- /dev/null +++ b/code/modules/research/techweb/nodes/alien_nodes.dm @@ -0,0 +1,100 @@ +/datum/techweb_node/alientech //AYYYYYYYYLMAOO tech + id = TECHWEB_NODE_ALIENTECH + display_name = "Alien Technology" + description = "Things used by the greys." + prereq_ids = list(TECHWEB_NODE_BLUESPACE_TRAVEL) + required_items_to_unlock = list( + /obj/item/stack/sheet/mineral/abductor, + /obj/item/abductor, + /obj/item/cautery/alien, + /obj/item/circuitboard/machine/abductor, + /obj/item/circular_saw/alien, + /obj/item/crowbar/abductor, + /obj/item/gun/energy/alien, + /obj/item/gun/energy/shrink_ray, + /obj/item/hemostat/alien, + /obj/item/melee/baton/abductor, + /obj/item/multitool/abductor, + /obj/item/retractor/alien, + /obj/item/scalpel/alien, + /obj/item/screwdriver/abductor, + /obj/item/surgicaldrill/alien, + /obj/item/weldingtool/abductor, + /obj/item/wirecutters/abductor, + /obj/item/wrench/abductor, + ) + design_ids = list( + "alienalloy", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS) + hidden = TRUE + +/datum/techweb_node/alientech/on_station_research() + SSshuttle.shuttle_purchase_requirements_met[SHUTTLE_UNLOCK_ALIENTECH] = TRUE + +/datum/techweb_node/alien_engi + id = TECHWEB_NODE_ALIEN_ENGI + display_name = "Alien Engineering" + description = "Alien engineering tools" + prereq_ids = list(TECHWEB_NODE_ALIENTECH, TECHWEB_NODE_EXP_TOOLS) + design_ids = list( + "alien_crowbar", + "alien_multitool", + "alien_screwdriver", + "alien_welder", + "alien_wirecutters", + "alien_wrench", + ) + required_items_to_unlock = list( + /obj/item/abductor, + /obj/item/circuitboard/machine/abductor, + /obj/item/crowbar/abductor, + /obj/item/gun/energy/shrink_ray, + /obj/item/melee/baton/abductor, + /obj/item/multitool/abductor, + /obj/item/screwdriver/abductor, + /obj/item/weldingtool/abductor, + /obj/item/wirecutters/abductor, + /obj/item/wrench/abductor, + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS) + hidden = TRUE + +/datum/techweb_node/alien_surgery + id = TECHWEB_NODE_ALIEN_SURGERY + display_name = "Alien Surgery" + description = "Abductors did nothing wrong." + prereq_ids = list(TECHWEB_NODE_ALIENTECH, TECHWEB_NODE_SURGERY_TOOLS) + design_ids = list( + "alien_cautery", + "alien_drill", + "alien_hemostat", + "alien_retractor", + "alien_saw", + "alien_scalpel", + "surgery_brainwashing", + "surgery_heal_combo_upgrade_femto", + "surgery_zombie", + ) + required_items_to_unlock = list( + /obj/item/abductor, + /obj/item/cautery/alien, + /obj/item/circuitboard/machine/abductor, + /obj/item/circular_saw/alien, + /obj/item/crowbar/abductor, + /obj/item/gun/energy/alien, + /obj/item/gun/energy/shrink_ray, + /obj/item/hemostat/alien, + /obj/item/melee/baton/abductor, + /obj/item/multitool/abductor, + /obj/item/retractor/alien, + /obj/item/scalpel/alien, + /obj/item/screwdriver/abductor, + /obj/item/surgicaldrill/alien, + /obj/item/weldingtool/abductor, + /obj/item/wirecutters/abductor, + /obj/item/wrench/abductor, + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_5_POINTS) + discount_experiments = list(/datum/experiment/scanning/points/slime/hard = TECHWEB_TIER_5_POINTS) + hidden = TRUE diff --git a/code/modules/research/techweb/nodes/atmos_nodes.dm b/code/modules/research/techweb/nodes/atmos_nodes.dm new file mode 100644 index 0000000000000..a35c5f4c185ea --- /dev/null +++ b/code/modules/research/techweb/nodes/atmos_nodes.dm @@ -0,0 +1,114 @@ +/datum/techweb_node/atmos + id = TECHWEB_NODE_ATMOS + starting_node = TRUE + display_name = "Atmospherics" + description = "Maintaining station air and related life support systems." + design_ids = list( + "atmos_control", + "atmosalerts", + "thermomachine", + "space_heater", + "generic_tank", + "oxygen_tank", + "plasma_tank", + "plasmaman_tank_belt", + "plasmarefiller", + "extinguisher", + "gas_filter", + "plasmaman_gas_filter", + "analyzer", + "pipe_painter", + ) + +/datum/techweb_node/gas_compression + id = TECHWEB_NODE_GAS_COMPRESSION + display_name = "Gas Compression" + description = "Highly pressurized gases hold potential for unlocking immense energy capabilities." + prereq_ids = list(TECHWEB_NODE_ATMOS) + design_ids = list( + "tank_compressor", + "emergency_oxygen", + "emergency_oxygen_engi", + "power_turbine_console", + "turbine_part_compressor", + "turbine_part_rotor", + "turbine_part_stator", + "turbine_compressor", + "turbine_rotor", + "turbine_stator", + "atmos_thermal", + "pneumatic_seal", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS) + +/datum/techweb_node/plasma_control + id = TECHWEB_NODE_PLASMA_CONTROL + display_name = "Controlled Plasma" + description = "Experiments with high-pressure gases and electricity resulting in crystallization and controlled plasma reactions." + prereq_ids = list(TECHWEB_NODE_GAS_COMPRESSION, TECHWEB_NODE_ENERGY_MANIPULATION) + design_ids = list( + "crystallizer", + "electrolyzer", + "pacman", + "mech_generator", + "plasmacutter", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS) + required_experiments = list(/datum/experiment/ordnance/gaseous/plasma) + +/datum/techweb_node/fusion + id = TECHWEB_NODE_FUSION + display_name = "Fusion" + description = "Investigating fusion reactor technology to achieve sustainable and efficient energy production through controlled plasma reactions involving noble gases." + prereq_ids = list(TECHWEB_NODE_PLASMA_CONTROL) + design_ids = list( + "HFR_core", + "HFR_corner", + "HFR_fuel_input", + "HFR_interface", + "HFR_moderator_input", + "HFR_waste_output", + "adv_fire_extinguisher", + "bolter_wrench", + "rpd_loaded", + "engine_goggles", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS) + required_experiments = list(/datum/experiment/ordnance/gaseous/bz) + discount_experiments = list(/datum/experiment/ordnance/gaseous/nitrous_oxide = TECHWEB_TIER_3_POINTS) + +/datum/techweb_node/exp_tools + id = TECHWEB_NODE_EXP_TOOLS + display_name = "Experimental Tools" + description = "Enhances the functionality and versatility of station tools." + prereq_ids = list(TECHWEB_NODE_FUSION) + design_ids = list( + "flatpacker", + "handdrill", + "exwelder", + "jawsoflife", + "rangedanalyzer", + "rtd_loaded", + "rcd_loaded", + "rcd_ammo", + "weldingmask", + "magboots", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_4_POINTS) + discount_experiments = list(/datum/experiment/ordnance/gaseous/noblium = TECHWEB_TIER_4_POINTS) + +/datum/techweb_node/rcd_upgrade + id = TECHWEB_NODE_RCD_UPGRADE + display_name = "Rapid Construction Device Upgrades" + description = "New designs and enhancements for RCD and RPD." + prereq_ids = list(TECHWEB_NODE_EXP_TOOLS, TECHWEB_NODE_PARTS_BLUESPACE) + design_ids = list( + "rcd_upgrade_silo_link", + "rcd_upgrade_anti_interrupt", + "rcd_upgrade_cooling", + "rcd_upgrade_frames", + "rcd_upgrade_furnishing", + "rcd_upgrade_simple_circuits", + "rpd_upgrade_unwrench", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_5_POINTS) diff --git a/code/modules/research/techweb/nodes/bepis_nodes.dm b/code/modules/research/techweb/nodes/bepis_nodes.dm new file mode 100644 index 0000000000000..ad5bb4c62bb1b --- /dev/null +++ b/code/modules/research/techweb/nodes/bepis_nodes.dm @@ -0,0 +1,109 @@ +/datum/techweb_node/light_apps + id = TECHWEB_NODE_LIGHT_APPS + display_name = "Illumination Applications" + description = "Applications of lighting and vision technology not originally thought to be commercially viable." + design_ids = list( + "bright_helmet", + "rld_mini", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS) + hidden = TRUE + experimental = TRUE + +/datum/techweb_node/extreme_office + id = TECHWEB_NODE_EXTREME_OFFICE + display_name = "Advanced Office Applications" + description = "Some of our smartest lab guys got together on a Friday and improved our office efficiency by 350%. Here's how." + design_ids = list( + "mauna_mug", + "rolling_table", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS) + hidden = TRUE + experimental = TRUE + +/datum/techweb_node/spec_eng + id = TECHWEB_NODE_SPEC_ENG + display_name = "Specialized Engineering" + description = "Conventional wisdom has deemed these engineering products 'technically' safe, but far too dangerous to traditionally condone." + design_ids = list( + "eng_gloves", + "lava_rods", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS) + hidden = TRUE + experimental = TRUE + +/datum/techweb_node/aus_security + id = TECHWEB_NODE_AUS_SECURITY + display_name = "Australicus Security Protocols" + description = "It is said that security in the Australicus sector is tight, so we took some pointers from their equipment. Thankfully, our sector lacks any signs of these, 'dropbears'." + design_ids = list( + "pin_explorer", + "stun_boomerang", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS) + hidden = TRUE + experimental = TRUE + +/datum/techweb_node/interrogation + id = TECHWEB_NODE_INTERROGATION + display_name = "Enhanced Interrogation Technology" + description = "By cross-referencing several declassified documents from past dictatorial regimes, we were able to develop an incredibly effective interrogation device. \ + Ethical concerns about loss of free will do not apply to criminals, according to galactic law." + design_ids = list( + "hypnochair", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS) + hidden = TRUE + experimental = TRUE + +/datum/techweb_node/sticky_advanced + id = TECHWEB_NODE_STICKY_ADVANCED + display_name = "Advanced Sticky Technology" + description = "Taking a good joke too far? Nonsense!" + design_ids = list( + "pointy_tape", + "super_sticky_tape", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS) + hidden = TRUE + experimental = TRUE + +/datum/techweb_node/tackle_advanced + id = TECHWEB_NODE_TACKLE_ADVANCED + display_name = "Advanced Grapple Technology" + description = "Nanotrasen would like to remind its researching staff that it is never acceptable to \"glomp\" your coworkers, and further \"scientific trials\" on the subject \ + will no longer be accepted in its academic journals." + design_ids = list( + "tackle_dolphin", + "tackle_rocket", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS) + hidden = TRUE + experimental = TRUE + +/datum/techweb_node/mod_experimental + id = TECHWEB_NODE_MOD_EXPERIMENTAL + display_name = "Experimental Modular Suits" + description = "Applications of experimentality when creating MODsuits have created these..." + design_ids = list( + "mod_disposal", + "mod_joint_torsion", + "mod_recycler", + "mod_shooting", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS) + hidden = TRUE + experimental = TRUE + +/datum/techweb_node/posisphere + id = TECHWEB_NODE_POSITRONIC_SPHERE + display_name = "Experimental Spherical Positronic Brain" + description = "Recent developments on cost-cutting measures have allowed us to cut positronic brain cubes into twice-as-cheap spheres. Unfortunately, it also allows them to move around the lab via rolling maneuvers." + design_ids = list( + "posisphere", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS) + hidden = TRUE + experimental = TRUE diff --git a/code/modules/research/techweb/nodes/biology_nodes.dm b/code/modules/research/techweb/nodes/biology_nodes.dm new file mode 100644 index 0000000000000..f8ee05c042c2e --- /dev/null +++ b/code/modules/research/techweb/nodes/biology_nodes.dm @@ -0,0 +1,64 @@ +/datum/techweb_node/bio_scan + id = TECHWEB_NODE_BIO_SCAN + display_name = "Biological Scan" + description = "Advanced technology for analyzing patient health and reagent compositions, ensuring precise diagnostics and treatment in the medical bay." + prereq_ids = list(TECHWEB_NODE_MEDBAY_EQUIP) + design_ids = list( + "healthanalyzer", + "autopsyscanner", + "genescanner", + "medical_kiosk", + "chem_master", + "ph_meter", + "scigoggles", + "mod_reagent_scanner", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS) + +/datum/techweb_node/cytology + id = TECHWEB_NODE_CYTOLOGY + display_name = "Cytology" + description = "Cellular biology research focused on cultivation of limbs and diverse organisms from cells." + prereq_ids = list(TECHWEB_NODE_BIO_SCAN) + design_ids = list( + "limbgrower", + "pandemic", + "petri_dish", + "swab", + "biopsy_tool", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS) + +/datum/techweb_node/xenobiology + id = TECHWEB_NODE_XENOBIOLOGY + display_name = "Xenobiology" + description = "Exploration of non-human biology, unlocking the secrets of extraterrestrial lifeforms and their unique biological processes." + prereq_ids = list(TECHWEB_NODE_CYTOLOGY) + design_ids = list( + "xenobioconsole", + "slime_scanner", + "limbdesign_ethereal", + "limbdesign_felinid", + "limbdesign_lizard", + "limbdesign_plasmaman", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS) + required_experiments = list(/datum/experiment/scanning/random/cytology) + +/datum/techweb_node/gene_engineering + id = TECHWEB_NODE_GENE_ENGINEERING + display_name = "Gene Engineering" + description = "Research into sophisticated DNA manipulation techniques, enabling the modification of human genetic traits to unlock specific abilities and enhancements." + prereq_ids = list(TECHWEB_NODE_SELECTION, TECHWEB_NODE_XENOBIOLOGY) + design_ids = list( + "dnascanner", + "scan_console", + "dna_disk", + "dnainfuser", + "mod_dna_lock", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_4_POINTS) + discount_experiments = list( + /datum/experiment/scanning/random/plants/traits = TECHWEB_TIER_2_POINTS, + /datum/experiment/scanning/points/slime/hard = TECHWEB_TIER_2_POINTS, + ) diff --git a/code/modules/research/techweb/nodes/circuit_nodes.dm b/code/modules/research/techweb/nodes/circuit_nodes.dm new file mode 100644 index 0000000000000..e654abbf4dffb --- /dev/null +++ b/code/modules/research/techweb/nodes/circuit_nodes.dm @@ -0,0 +1,151 @@ +/datum/techweb_node/programming + id = TECHWEB_NODE_PROGRAMMING + starting_node = TRUE + display_name = "Programming" + description = "Dedicate an entire shift to program a fridge to greet you when opened." + prereq_ids = list(TECHWEB_NODE_ROBOTICS) + design_ids = list( + "component_printer", + "module_duplicator", + "circuit_multitool", + "compact_remote_shell", + "usb_cable", + "integrated_circuit", + "comp_access_checker", + "comp_arctan2", + "comp_arithmetic", + "comp_assoc_list_pick", + "comp_assoc_list_remove", + "comp_assoc_list_set", + "comp_binary_convert", + "comp_clock", + "comp_comparison", + "comp_concat", + "comp_concat_list", + "comp_decimal_convert", + "comp_delay", + "comp_direction", + "comp_element_find", + "comp_filter_list", + "comp_foreach", + "comp_format", + "comp_format_assoc", + "comp_get_column", + "comp_gps", + "comp_health", + "comp_health_state", + "comp_hear", + "comp_id_access_reader", + "comp_id_getter", + "comp_id_info_reader", + "comp_index", + "comp_index_assoc", + "comp_index_table", + "comp_laserpointer", + "comp_length", + "comp_light", + "comp_list_add", + "comp_list_assoc_literal", + "comp_list_clear", + "comp_list_literal", + "comp_list_pick", + "comp_list_remove", + "comp_logic", + "comp_matscanner", + "comp_mmi", + "comp_module", + "comp_multiplexer", + "comp_not", + "comp_ntnet_receive", + "comp_ntnet_send", + "comp_ntnet_send_list_literal", + "comp_pinpointer", + "comp_pressuresensor", + "comp_radio", + "comp_random", + "comp_reagents", + "comp_router", + "comp_select_query", + "comp_self", + "comp_set_variable_trigger", + "comp_soundemitter", + "comp_species", + "comp_speech", + "comp_speech", + "comp_split", + "comp_string_contains", + "comp_tempsensor", + "comp_textcase", + "comp_timepiece", + "comp_toggle", + "comp_tonumber", + "comp_tostring", + "comp_trigonometry", + "comp_typecast", + "comp_typecheck", + "comp_view_sensor", + ) + +/datum/techweb_node/circuit_shells + id = TECHWEB_NODE_CIRCUIT_SHELLS + display_name = "Advanced Circuit Shells" + description = "Adding brains to more things." + prereq_ids = list(TECHWEB_NODE_PROGRAMMING) + design_ids = list( + "assembly_shell", + "bot_shell", + "controller_shell", + "dispenser_shell", + "door_shell", + "gun_shell", + "keyboard_shell", + "module_shell", + "money_bot_shell", + "scanner_gate_shell", + "scanner_shell", + "comp_equip_action", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS) + +/datum/techweb_node/bci + id = TECHWEB_NODE_BCI + display_name = "Brain-Computer Interface" + description = "Embedded brain circuits. May occasionally stream Nanotrasen ads in dreams." + prereq_ids = list(TECHWEB_NODE_CIRCUIT_SHELLS, TECHWEB_NODE_PASSIVE_IMPLANTS) + design_ids = list( + "bci_implanter", + "bci_shell", + "comp_bar_overlay", + "comp_camera_bci", + "comp_counter_overlay", + "comp_install_detector", + "comp_object_overlay", + "comp_reagent_injector", + "comp_target_intercept", + "comp_thought_listener", + "comp_vox", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS) + discount_experiments = list(/datum/experiment/scanning/people/skillchip = TECHWEB_TIER_2_POINTS) + +/datum/techweb_node/programmed_robot + id = TECHWEB_NODE_PROGRAMMED_ROBOT + display_name = "Programmed Robot" + description = "Grants access to movable shells, allowing for remote operations and pranks." + prereq_ids = list(TECHWEB_NODE_CIRCUIT_SHELLS) + design_ids = list( + "drone_shell", + "comp_pathfind", + "comp_pull", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS) + +/datum/techweb_node/programmed_server + id = TECHWEB_NODE_PROGRAMMED_SERVER + display_name = "Programmed Server" + description = "Grants access to a server shell that has a very high capacity for components." + prereq_ids = list(TECHWEB_NODE_BCI) + design_ids = list( + "server_shell", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS) diff --git a/code/modules/research/techweb/nodes/cyborg_nodes.dm b/code/modules/research/techweb/nodes/cyborg_nodes.dm new file mode 100644 index 0000000000000..447ee2dc7f3b9 --- /dev/null +++ b/code/modules/research/techweb/nodes/cyborg_nodes.dm @@ -0,0 +1,235 @@ +/datum/techweb_node/augmentation + id = TECHWEB_NODE_AUGMENTATION + starting_node = TRUE + display_name = "Augmentation" + description = "For those who prefer shiny metal over squishy flesh." + prereq_ids = list(TECHWEB_NODE_ROBOTICS) + design_ids = list( + "borg_chest", + "borg_head", + "borg_l_arm", + "borg_l_leg", + "borg_r_arm", + "borg_r_leg", + "cybernetic_eyes", + "cybernetic_eyes_moth", + "cybernetic_ears", + "cybernetic_lungs", + "cybernetic_stomach", + "cybernetic_liver", + "cybernetic_heart", + ) + experiments_to_unlock = list( + /datum/experiment/scanning/people/android, + ) + +/datum/techweb_node/cybernetics + id = TECHWEB_NODE_CYBERNETICS + display_name = "Cybernetics" + description = "Sapient robots with preloaded tool modules and programmable laws." + prereq_ids = list(TECHWEB_NODE_AUGMENTATION) + design_ids = list( + "robocontrol", + "borgupload", + "cyborgrecharger", + "borg_suit", + "mmi_posi", + "mmi", + "mmi_m", + "advanced_l_arm", + "advanced_r_arm", + "advanced_l_leg", + "advanced_r_leg", + "borg_upgrade_rename", + "borg_upgrade_restart", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS) + +/datum/techweb_node/borg_service + id = TECHWEB_NODE_BORG_SERVICES + display_name = "Service Cyborg Upgrades" + description = "Let them do the cookin' by the book." + prereq_ids = list(TECHWEB_NODE_CYBERNETICS) + design_ids = list( + "borg_upgrade_rolling_table", + "borg_upgrade_condiment_synthesizer", + "borg_upgrade_silicon_knife", + "borg_upgrade_service_apparatus", + "borg_upgrade_drink_apparatus", + "borg_upgrade_service_cookbook", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS) + +/datum/techweb_node/borg_mining + id = TECHWEB_NODE_BORG_MINING + display_name = "Mining Cyborg Upgrades" + description = "To mine places too dangerous for humans." + prereq_ids = list(TECHWEB_NODE_CYBERNETICS) + design_ids = list( + "borg_upgrade_lavaproof", + "borg_upgrade_holding", + "borg_upgrade_diamonddrill", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS) + +/datum/techweb_node/borg_medical + id = TECHWEB_NODE_BORG_MEDICAL + display_name = "Medical Cyborg Upgrades" + description = "Let them follow Asimov's First Law." + prereq_ids = list(TECHWEB_NODE_BORG_SERVICES, TECHWEB_NODE_SURGERY_ADV) + design_ids = list( + "borg_upgrade_pinpointer", + "borg_upgrade_beakerapp", + "borg_upgrade_defibrillator", + "borg_upgrade_expandedsynthesiser", + "borg_upgrade_piercinghypospray", + "borg_upgrade_surgicalprocessor", + "borg_upgrade_surgicalomnitool", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS) + +/datum/techweb_node/borg_utility + id = TECHWEB_NODE_BORG_UTILITY + display_name = "Untility Cyborg Upgrades" + description = "Let them wipe our floors for us." + prereq_ids = list(TECHWEB_NODE_BORG_SERVICES, TECHWEB_NODE_SANITATION) + design_ids = list( + "borg_upgrade_advancedmop", + "borg_upgrade_broomer", + "borg_upgrade_expand", + "borg_upgrade_prt", + "borg_upgrade_selfrepair", + "borg_upgrade_thrusters", + "borg_upgrade_trashofholding", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS) + +/datum/techweb_node/borg_utility/New() + . = ..() + if(!CONFIG_GET(flag/disable_secborg)) + design_ids += "borg_upgrade_disablercooler" + +/datum/techweb_node/borg_engi + id = TECHWEB_NODE_BORG_ENGI + display_name = "Engineering Cyborg Upgrades" + description = "To slack even more." + prereq_ids = list(TECHWEB_NODE_BORG_MINING, TECHWEB_NODE_PARTS_UPG) + design_ids = list( + "borg_upgrade_rped", + "borg_upgrade_engineeringomnitool", + "borg_upgrade_circuitapp", + "borg_upgrade_inducer", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS) + +// Implants root node +/datum/techweb_node/passive_implants + id = TECHWEB_NODE_PASSIVE_IMPLANTS + display_name = "Passive Implants" + description = "Implants designed to operate seamlessly without active user input, enhancing various physiological functions or providing continuous benefits." + prereq_ids = list(TECHWEB_NODE_AUGMENTATION) + design_ids = list( + "skill_station", + "implant_trombone", + "implant_chem", + "implant_tracking", + "implant_exile", + "implant_beacon", + "implant_bluespace", + "implantcase", + "implanter", + "locator", + "c38_trac", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS) + +/datum/techweb_node/cyber/cyber_implants + id = TECHWEB_NODE_CYBER_IMPLANTS + display_name = "Cybernetic Implants" + description = "Advanced technological enhancements integrated into the body, offering improved physical capabilities." + prereq_ids = list(TECHWEB_NODE_PASSIVE_IMPLANTS, TECHWEB_NODE_CYBERNETICS) + design_ids = list( + "ci-breather", + "ci-nutriment", + "ci-thrusters", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS) + +/datum/techweb_node/cyber/New() + ..() + if(HAS_TRAIT(SSstation, STATION_TRAIT_CYBERNETIC_REVOLUTION)) + research_costs[TECHWEB_POINT_TYPE_GENERIC] /= 2 + +/datum/techweb_node/cyber/combat_implants + id = TECHWEB_NODE_COMBAT_IMPLANTS + display_name = "Combat Implants" + description = "To make sure that you can wake the f*** up, samurai." + prereq_ids = list(TECHWEB_NODE_CYBER_IMPLANTS) + design_ids = list( + "ci-reviver", + "ci-antidrop", + "ci-antistun", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_4_POINTS) + +/datum/techweb_node/cyber/integrated_toolsets + id = TECHWEB_NODE_INTERGRATED_TOOLSETS + display_name = "Integrated Toolsets" + description = "Decades of contraband smuggling by assistants have led to the development of a full toolbox that fits seamlessly into your arm." + prereq_ids = list(TECHWEB_NODE_COMBAT_IMPLANTS, TECHWEB_NODE_EXP_TOOLS) + design_ids = list( + "ci-nutrimentplus", + "ci-toolset", + "ci-surgery", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_5_POINTS) + +/datum/techweb_node/cyber/cyber_organs + id = TECHWEB_NODE_CYBER_ORGANS + display_name = "Cybernetic Organs" + description = "We have the technology to rebuild him." + prereq_ids = list(TECHWEB_NODE_CYBERNETICS) + design_ids = list( + "cybernetic_eyes_improved", + "cybernetic_eyes_improved_moth", + "cybernetic_ears_u", + "cybernetic_lungs_tier2", + "cybernetic_stomach_tier2", + "cybernetic_liver_tier2", + "cybernetic_heart_tier2", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS) + +/datum/techweb_node/cyber/cyber_organs_upgraded + id = TECHWEB_NODE_CYBER_ORGANS_UPGRADED + display_name = "Upgraded Cybernetic Organs" + description = "We have the technology to upgrade him." + prereq_ids = list(TECHWEB_NODE_CYBER_ORGANS) + design_ids = list( + "ci-gloweyes", + "ci-welding", + "ci-gloweyes-moth", + "ci-welding-moth", + "cybernetic_ears_whisper", + "cybernetic_lungs_tier3", + "cybernetic_stomach_tier3", + "cybernetic_liver_tier3", + "cybernetic_heart_tier3", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS) + required_experiments = list(/datum/experiment/scanning/people/augmented_organs) + +/datum/techweb_node/cyber/cyber_organs_adv + id = TECHWEB_NODE_CYBER_ORGANS_ADV + display_name = "Advanced Cybernetic Organs" + description = "Cutting-edge cybernetic organs offering enhanced sensory capabilities, making it easier than ever to detect ERP." + prereq_ids = list(TECHWEB_NODE_CYBER_ORGANS_UPGRADED, TECHWEB_NODE_NIGHT_VISION) + design_ids = list( + "cybernetic_ears_xray", + "ci-thermals", + "ci-xray", + "ci-thermals-moth", + "ci-xray-moth", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_5_POINTS) + discount_experiments = list(/datum/experiment/scanning/people/android = TECHWEB_TIER_5_POINTS) diff --git a/code/modules/research/techweb/nodes/engi_nodes.dm b/code/modules/research/techweb/nodes/engi_nodes.dm new file mode 100644 index 0000000000000..626dd6981d0ce --- /dev/null +++ b/code/modules/research/techweb/nodes/engi_nodes.dm @@ -0,0 +1,228 @@ +// Parts root node +/datum/techweb_node/parts + id = TECHWEB_NODE_PARTS + starting_node = TRUE + display_name = "Essential Stock Parts" + description = "Foundational components that form the backbone of station operations, encompassing a range of essential equipment necessary for day-to-day functionality." + design_ids = list( + "micro_servo", + "basic_battery", + "basic_capacitor", + "basic_cell", + "basic_matter_bin", + "basic_micro_laser", + "basic_scanning", + "high_battery", + "high_cell", + "miniature_power_cell", + "condenser", + "igniter", + "infrared_emitter", + "prox_sensor", + "signaler", + "timer", + "voice_analyzer", + "health_sensor", + "sflash", + ) + +/datum/techweb_node/parts_upg + id = TECHWEB_NODE_PARTS_UPG + display_name = "Upgraded Parts" + description = "Offering enhanced capabilities beyond their basic counterparts." + prereq_ids = list(TECHWEB_NODE_PARTS, TECHWEB_NODE_ENERGY_MANIPULATION) + design_ids = list( + "rped", + "high_micro_laser", + "adv_capacitor", + "nano_servo", + "adv_matter_bin", + "adv_scanning", + "super_battery", + "super_cell", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS) + +/datum/techweb_node/parts_adv + id = TECHWEB_NODE_PARTS_ADV + display_name = "Advanced Parts" + description = "The most finely tuned and accurate stock parts." + prereq_ids = list(TECHWEB_NODE_PARTS_UPG) + design_ids = list( + "ultra_micro_laser", + "super_capacitor", + "pico_servo", + "super_matter_bin", + "phasic_scanning", + "hyper_battery", + "hyper_cell", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS) + required_experiments = list(/datum/experiment/scanning/points/machinery_tiered_scan/tier2_any) + + +/datum/techweb_node/parts_bluespace + id = TECHWEB_NODE_PARTS_BLUESPACE + display_name = "Bluespace Parts" + description = "Integrating the latest in bluespace technology, these advanced components not only enhance functionality but also open up new possibilities for the station's technological capabilities." + prereq_ids = list(TECHWEB_NODE_PARTS_ADV, TECHWEB_NODE_BLUESPACE_TRAVEL) + design_ids = list( + "bs_rped", + "quadultra_micro_laser", + "quadratic_capacitor", + "femto_servo", + "bluespace_matter_bin", + "triphasic_scanning", + "bluespace_battery", + "bluespace_cell", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_4_POINTS) + discount_experiments = list(/datum/experiment/scanning/points/machinery_tiered_scan/tier3_any = TECHWEB_TIER_4_POINTS) + +/datum/techweb_node/telecomms + id = TECHWEB_NODE_TELECOMS + display_name = "Telecommunications Technology" + description = "A comprehensive suite of machinery for station-wide communication setups, ensuring seamless connectivity and operational coordination." + prereq_ids = list(TECHWEB_NODE_PARTS_BLUESPACE) + design_ids = list( + "comm_monitor", + "comm_server", + "message_monitor", + "ntnet_relay", + "s_hub", + "s_messaging", + "s_server", + "s_processor", + "s_relay", + "s_bus", + "s_broadcaster", + "s_receiver", + "s_amplifier", + "s_analyzer", + "s_ansible", + "s_crystal", + "s_filter", + "s_transmitter", + "s_treatment", + "gigabeacon", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_5_POINTS) + +// Engineering root node +/datum/techweb_node/construction + id = TECHWEB_NODE_CONSTRUCTION + starting_node = TRUE + display_name = "Construction" + description = "Tools and essential machinery used for station maintenance and expansion." + design_ids = list( + "circuit_imprinter_offstation", + "circuit_imprinter", + "solarcontrol", + "solar_panel", + "solar_tracker", + "power_control", + "airalarm_electronics", + "airlock_board", + "firealarm_electronics", + "firelock_board", + "trapdoor_electronics", + "blast", + "tile_sprayer", + "airlock_painter", + "decal_painter", + "rwd", + "cable_coil", + "welding_helmet", + "welding_tool", + "tscanner", + "analyzer", + "multitool", + "wrench", + "crowbar", + "screwdriver", + "wirecutters", + "light_bulb", + "light_tube", + "crossing_signal", + "guideway_sensor", + ) + +/datum/techweb_node/energy_manipulation + id = TECHWEB_NODE_ENERGY_MANIPULATION + display_name = "Energy Manipulation" + description = "Harnessing the raw power of lightning arcs through sophisticated energy control methods." + prereq_ids = list(TECHWEB_NODE_CONSTRUCTION) + design_ids = list( + "apc_control", + "powermonitor", + "smes", + "emitter", + "grounding_rod", + "tesla_coil", + "cell_charger", + "recharger", + "inducer", + "inducerengi", + "welding_goggles", + "tray_goggles", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS) + +/datum/techweb_node/holographics + id = TECHWEB_NODE_HOLOGRAPHICS + display_name = "Holographics" + description = "Use of holographic technology for signage and barriers." + prereq_ids = list(TECHWEB_NODE_ENERGY_MANIPULATION) + design_ids = list( + "forcefield_projector", + "holosign", + "holosignsec", + "holosignengi", + "holosignatmos", + "holosignrestaurant", + "holosignbar", + "holobarrier_jani", + "holobarrier_med", + "holopad", + "vendatray", + "holodisk", + "modular_shield_generator", + "modular_shield_node", + "modular_shield_relay", + "modular_shield_charger", + "modular_shield_well", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS) + +/datum/techweb_node/hud + id = TECHWEB_NODE_HUD + display_name = "Integrated HUDs" + description = "Initially developed for assistants to learn the nuances of different professions through augmented reality." + prereq_ids = list(TECHWEB_NODE_HOLOGRAPHICS, TECHWEB_NODE_CYBER_IMPLANTS) + design_ids = list( + "health_hud", + "diagnostic_hud", + "security_hud", + "mod_visor_medhud", + "mod_visor_diaghud", + "mod_visor_sechud", + "ci-medhud", + "ci-diaghud", + "ci-sechud", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS) + +/datum/techweb_node/night_vision + id = TECHWEB_NODE_NIGHT_VISION + display_name = "Night Vision Technology" + description = "There are whispers that Nanotrasen pushed for this technology to extend shift durations, ensuring productivity around the clock." + prereq_ids = list(TECHWEB_NODE_HUD) + design_ids = list( + "diagnostic_hud_night", + "health_hud_night", + "night_visision_goggles", + "nvgmesons", + "nv_scigoggles", + "security_hud_night", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_4_POINTS) diff --git a/code/modules/research/techweb/nodes/mech_nodes.dm b/code/modules/research/techweb/nodes/mech_nodes.dm new file mode 100644 index 0000000000000..5f3d302132333 --- /dev/null +++ b/code/modules/research/techweb/nodes/mech_nodes.dm @@ -0,0 +1,251 @@ +/datum/techweb_node/mech_assembly + id = TECHWEB_NODE_MECH_ASSEMBLY + starting_node = TRUE + display_name = "Mech Assembly" + description = "Development of mech designed to contend with artificial gravity while transporting cargo." + prereq_ids = list(TECHWEB_NODE_ROBOTICS) + design_ids = list( + "mechapower", + "mech_recharger", + "ripley_chassis", + "ripley_torso", + "ripley_left_arm", + "ripley_right_arm", + "ripley_left_leg", + "ripley_right_leg", + "ripley_main", + "ripley_peri", + "mech_hydraulic_clamp", + ) + +/datum/techweb_node/mech_equipment + id = TECHWEB_NODE_MECH_EQUIPMENT + display_name = "Expedition Equipment" + description = "Specialized mech gear tailored for navigating space and celestial bodies, ensuring durability and functionality in the harshest conditions." + prereq_ids = list(TECHWEB_NODE_MECH_ASSEMBLY) + design_ids = list( + "mechacontrol", + "botpad", + "botpad_remote", + "ripleyupgrade", + "mech_air_tank", + "mech_thrusters", + "mech_extinguisher", + "mecha_camera", + "mecha_tracking", + "mech_radio", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS) + +/datum/techweb_node/mech_clown + id = TECHWEB_NODE_MECH_CLOWN + display_name = "Funny Robots" + description = "Fueled by laughter." + prereq_ids = list(TECHWEB_NODE_MECH_ASSEMBLY) + design_ids = list( + "honk_chassis", + "honk_torso", + "honk_head", + "honk_left_arm", + "honk_right_arm", + "honk_left_leg", + "honk_right_leg", + "honker_main", + "honker_peri", + "honker_targ", + "mech_banana_mortar", + "mech_honker", + "mech_mousetrap_mortar", + "mech_punching_face", + "borg_transform_clown", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS) + +/datum/techweb_node/mech_medical + id = TECHWEB_NODE_MECH_MEDICAL + display_name = "Medical Mech" + description = "Advanced robotic unit equipped with syringe guns and healing beams, revolutionizing medical assistance in hazardous environments." + prereq_ids = list(TECHWEB_NODE_MECH_ASSEMBLY, TECHWEB_NODE_CHEM_SYNTHESIS) + design_ids = list( + "odysseus_chassis", + "odysseus_torso", + "odysseus_head", + "odysseus_left_arm", + "odysseus_right_arm", + "odysseus_left_leg", + "odysseus_right_leg", + "odysseus_main", + "odysseus_peri", + "mech_medi_beam", + "mech_syringe_gun", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS) + +/datum/techweb_node/mech_mining + id = TECHWEB_NODE_MECH_MINING + display_name = "Mining Mech" + description = "Robust mech engineered to withstand lava and storms for continuous off-station mining operations." + prereq_ids = list(TECHWEB_NODE_MECH_EQUIPMENT, TECHWEB_NODE_MINING) + design_ids = list( + "clarke_chassis", + "clarke_torso", + "clarke_head", + "clarke_left_arm", + "clarke_right_arm", + "clarke_main", + "clarke_peri", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS) + +/datum/techweb_node/mech_combat + id = TECHWEB_NODE_MECH_COMBAT + display_name = "Combat Mechs" + description = "Modular armor upgrades and specialized equipment for security mechs." + prereq_ids = list(TECHWEB_NODE_MECH_EQUIPMENT) + design_ids = list( + "mech_ccw_armor", + "mech_proj_armor", + "paddyupgrade", + "mech_hydraulic_claw", + "mech_disabler", + "mech_repair_droid", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS) + required_experiments = list(/datum/experiment/scanning/random/mecha_equipped_scan) + discount_experiments = list(/datum/experiment/scanning/random/mecha_damage_scan = TECHWEB_TIER_2_POINTS) + +/datum/techweb_node/mech_assault + id = TECHWEB_NODE_MECH_ASSAULT + display_name = "Assault Mech" + description = "Heavy battle mech boasting robust armor but sacrificing speed for enhanced durability." + prereq_ids = list(TECHWEB_NODE_MECH_COMBAT) + design_ids = list( + "durand_armor", + "durand_chassis", + "durand_torso", + "durand_head", + "durand_left_arm", + "durand_right_arm", + "durand_left_leg", + "durand_right_leg", + "durand_main", + "durand_peri", + "durand_targ", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS) + +/datum/techweb_node/mech_light + id = TECHWEB_NODE_MECH_LIGHT + display_name = "Light Combat Mech" + description = "Agile combat mech equipped with overclocking capabilities for temporary speed boosts, prioritizing speed over durability on the battlefield." + prereq_ids = list(TECHWEB_NODE_MECH_COMBAT) + design_ids = list( + "gygax_armor", + "gygax_chassis", + "gygax_torso", + "gygax_head", + "gygax_left_arm", + "gygax_right_arm", + "gygax_left_leg", + "gygax_right_leg", + "gygax_main", + "gygax_peri", + "gygax_targ", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS) + +/datum/techweb_node/mech_heavy + id = TECHWEB_NODE_MECH_HEAVY + display_name = "Heavy Mech" + description = "Advanced heavy mechanized unit with dual pilot capability, designed for robust battlefield performance and increased tactical versatility." + prereq_ids = list(TECHWEB_NODE_MECH_ASSAULT) + design_ids = list( + "savannah_ivanov_armor", + "savannah_ivanov_chassis", + "savannah_ivanov_torso", + "savannah_ivanov_head", + "savannah_ivanov_left_arm", + "savannah_ivanov_right_arm", + "savannah_ivanov_left_leg", + "savannah_ivanov_right_leg", + "savannah_ivanov_main", + "savannah_ivanov_peri", + "savannah_ivanov_targ", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_4_POINTS) + +/datum/techweb_node/mech_infiltrator + id = TECHWEB_NODE_MECH_INFILTRATOR + display_name = "Infiltration Mech" + description = "Advanced mech with phasing capabilities, allowing it to move through walls and obstacles, ideal for covert and special operations." + prereq_ids = list(TECHWEB_NODE_MECH_LIGHT, TECHWEB_NODE_ANOMALY_RESEARCH) + design_ids = list( + "phazon_armor", + "phazon_chassis", + "phazon_torso", + "phazon_head", + "phazon_left_arm", + "phazon_right_arm", + "phazon_left_leg", + "phazon_right_leg", + "phazon_main", + "phazon_peri", + "phazon_targ", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_4_POINTS) + +/datum/techweb_node/mech_energy_guns + id = TECHWEB_NODE_MECH_ENERGY_GUNS + display_name = "Mech Energy Guns" + description = "Scaled-up versions of electric weapons optimized for mech deployment." + prereq_ids = list(TECHWEB_NODE_MECH_COMBAT, TECHWEB_NODE_ELECTRIC_WEAPONS) + design_ids = list( + "mech_laser", + "mech_laser_heavy", + "mech_ion", + "mech_tesla", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_4_POINTS) + +/datum/techweb_node/mech_firearms + id = TECHWEB_NODE_MECH_FIREARMS + display_name = "Mech Firearms" + description = "Mounted ballistic weaponry, enhancing combat capabilities for mechanized units." + prereq_ids = list(TECHWEB_NODE_MECH_ENERGY_GUNS, TECHWEB_NODE_EXOTIC_AMMO) + design_ids = list( + "mech_lmg", + "mech_lmg_ammo", + "mech_scattershot", + "mech_scattershot_ammo", + "mech_carbine", + "mech_carbine_ammo", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_5_POINTS) + +/datum/techweb_node/mech_heavy_arms + id = TECHWEB_NODE_MECH_HEAVY_ARMS + display_name = "Heavy Mech Firearms" + description = "High-impact weaponry integrated into mechs, optimized for maximum firepower." + prereq_ids = list(TECHWEB_NODE_MECH_HEAVY, TECHWEB_NODE_EXOTIC_AMMO) + design_ids = list( + "clusterbang_launcher", + "clusterbang_launcher_ammo", + "mech_grenade_launcher", + "mech_grenade_launcher_ammo", + "mech_missile_rack", + "mech_missile_rack_ammo", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_5_POINTS) + +/datum/techweb_node/mech_equip_bluespace + id = TECHWEB_NODE_BLUESPACE + display_name = "Bluespace Mech Equipment" + description = "An array of equipment empowered by bluespace, providing unmatched mobility and utility." + prereq_ids = list(TECHWEB_NODE_MECH_INFILTRATOR, TECHWEB_NODE_BLUESPACE_TRAVEL) + design_ids = list( + "mech_gravcatapult", + "mech_teleporter", + "mech_wormhole_gen", + "mech_rcd", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_5_POINTS) diff --git a/code/modules/research/techweb/nodes/medbay_nodes.dm b/code/modules/research/techweb/nodes/medbay_nodes.dm new file mode 100644 index 0000000000000..51bc5f1504902 --- /dev/null +++ b/code/modules/research/techweb/nodes/medbay_nodes.dm @@ -0,0 +1,102 @@ +/datum/techweb_node/medbay_equip + id = TECHWEB_NODE_MEDBAY_EQUIP + starting_node = TRUE + display_name = "Medbay Equipment" + description = "Essential medical tools to patch you up while medbay is still intact." + design_ids = list( + "operating", + "medicalbed", + "defibmountdefault", + "defibrillator", + "surgical_drapes", + "scalpel", + "retractor", + "hemostat", + "cautery", + "circular_saw", + "surgicaldrill", + "bonesetter", + "blood_filter", + "surgical_tape", + "penlight", + "penlight_paramedic", + "stethoscope", + "beaker", + "large_beaker", + "chem_pack", + "blood_pack", + "syringe", + "dropper", + "pillbottle", + ) + experiments_to_unlock = list( + /datum/experiment/autopsy/human, + /datum/experiment/autopsy/nonhuman, + /datum/experiment/autopsy/xenomorph, + ) + +/datum/techweb_node/chem_synthesis + id = TECHWEB_NODE_CHEM_SYNTHESIS + display_name = "Chemical Synthesis" + description = "Synthesizing complex chemicals from electricity and thin air... Don't ask how..." + prereq_ids = list(TECHWEB_NODE_MEDBAY_EQUIP) + design_ids = list( + "xlarge_beaker", + "med_spray_bottle", + "medigel", + "medipen_refiller", + "soda_dispenser", + "beer_dispenser", + "chem_dispenser", + "portable_chem_mixer", + "chem_heater", + "w-recycler", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS) + +/datum/techweb_node/plumbing + id = TECHWEB_NODE_PLUMBING + display_name = "Plumbing" + description = "Essential infrastructure for building chemical factories. To scale up the production of happy pills to an industrial level." + prereq_ids = list(TECHWEB_NODE_CHEM_SYNTHESIS) + design_ids = list( + "plumbing_rcd", + "plumbing_rcd_service", + "plumbing_rcd_sci", + "plunger", + "fluid_ducts", + "meta_beaker", + "piercesyringe", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS) + +/datum/techweb_node/cryostasis + id = TECHWEB_NODE_CRYOSTASIS + display_name = "Cryostasis" + description = "The result of clown accidentally drinking a chemical, now repurposed for safely preserving crew members in suspended animation." + prereq_ids = list(TECHWEB_NODE_PLUMBING, TECHWEB_NODE_PLASMA_CONTROL) + design_ids = list( + "cryotube", + "mech_sleeper", + "stasis", + "cryo_grenade", + "splitbeaker", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS) + required_experiments = list(/datum/experiment/scanning/reagent/cryostylane) + +/datum/techweb_node/medbay_equip_adv + id = TECHWEB_NODE_MEDBAY_EQUIP_ADV + display_name = "Advanced Medbay Equipment" + description = "State-of-the-art medical gear for keeping the crew in one piece — mostly." + prereq_ids = list(TECHWEB_NODE_CRYOSTASIS) + design_ids = list( + "chem_mass_spec", + "healthanalyzer_advanced", + "mod_health_analyzer", + "crewpinpointer", + "defibrillator_compact", + "defibmount", + "medicalbed_emergency", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_4_POINTS) diff --git a/code/modules/research/techweb/nodes/mining_nodes.dm b/code/modules/research/techweb/nodes/mining_nodes.dm new file mode 100644 index 0000000000000..d8a6539caa3ff --- /dev/null +++ b/code/modules/research/techweb/nodes/mining_nodes.dm @@ -0,0 +1,104 @@ +/datum/techweb_node/material_processing + id = TECHWEB_NODE_MATERIAL_PROC + starting_node = TRUE + display_name = "Material Processing" + description = "Refinement and processing of alloys and ores to enhance their utility and value." + design_ids = list( + "pickaxe", + "shovel", + "conveyor_switch", + "conveyor_belt", + "mass_driver", + "recycler", + "stack_machine", + "stack_console", + "autolathe", + "rglass", + "plasmaglass", + "plasmareinforcedglass", + "plasteel", + "titaniumglass", + "plastitanium", + "plastitaniumglass", + ) + +/datum/techweb_node/mining + id = TECHWEB_NODE_MINING + display_name = "Mining Technology" + description = "Development of tools meant to optimize mining operations and resource extraction." + prereq_ids = list(TECHWEB_NODE_MATERIAL_PROC) + design_ids = list( + "cargoexpress", + "brm", + "b_smelter", + "b_refinery", + "ore_redemption", + "mining_equipment_vendor", + "mining_scanner", + "mech_mscanner", + "superresonator", + "mech_drill", + "mod_drill", + "drill", + "mod_orebag", + "beacon", + "telesci_gps", + "mod_gps", + "mod_visor_meson", + "mesons", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS) + +/datum/techweb_node/low_pressure_excavation + id = TECHWEB_NODE_LOW_PRESSURE_EXCAVATION + display_name = "Low-Pressure Excavation" + description = "Research of Proto-Kinetic Accelerators (PKAs), pneumatic guns renowned for their exceptional performance in low-pressure environments." + prereq_ids = list(TECHWEB_NODE_MINING, TECHWEB_NODE_GAS_COMPRESSION) + design_ids = list( + "mecha_kineticgun", + "damagemod", + "rangemod", + "cooldownmod", + "triggermod", + "hypermod", + "borg_upgrade_damagemod", + "borg_upgrade_rangemod", + "borg_upgrade_cooldownmod", + "borg_upgrade_hypermod", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS) + +/datum/techweb_node/plasma_mining + id = TECHWEB_NODE_PLASMA_MINING + display_name = "Plasma Beam Mining" + description = "Engineers' plasma welders have proven highly effective in mining operations. This led to the development of a mech-mounted variant and an enhanced handheld cutter for miners." + prereq_ids = list(TECHWEB_NODE_LOW_PRESSURE_EXCAVATION, TECHWEB_NODE_PLASMA_CONTROL) + design_ids = list( + "mech_plasma_cutter", + "plasmacutter_adv", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS) + +/datum/techweb_node/bitrunning + id = TECHWEB_NODE_BITRUNNING + display_name = "Bitrunning Technology" + description = "Bluespace technology has led to the development of quantum-scale computing, which unlocks the means to materialize atomic structures while executing advanced programs." + prereq_ids = list(TECHWEB_NODE_GAMING, TECHWEB_NODE_APPLIED_BLUESPACE) + design_ids = list( + "byteforge", + "quantum_console", + "netpod", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS) + +/datum/techweb_node/mining_adv + id = TECHWEB_NODE_MINING_ADV + display_name = "Advanced Mining Technology" + description = "High-level mining equipment, pushing the boundaries of efficiency and effectiveness in resource extraction." + prereq_ids = list(TECHWEB_NODE_PLASMA_MINING) + design_ids = list( + "jackhammer", + "drill_diamond", + "mech_diamond_drill", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_4_POINTS) diff --git a/code/modules/research/techweb/nodes/modsuit_nodes.dm b/code/modules/research/techweb/nodes/modsuit_nodes.dm new file mode 100644 index 0000000000000..2e74663eed419 --- /dev/null +++ b/code/modules/research/techweb/nodes/modsuit_nodes.dm @@ -0,0 +1,139 @@ +/datum/techweb_node/mod_suit + id = TECHWEB_NODE_MOD_SUIT + starting_node = TRUE + display_name = "Modular Exosuit" + description = "Specialized back mounted power suits with various different modules." + prereq_ids = list(TECHWEB_NODE_ROBOTICS) + design_ids = list( + "suit_storage_unit", + "mod_shell", + "mod_chestplate", + "mod_helmet", + "mod_gauntlets", + "mod_boots", + "mod_plating_standard", + "mod_paint_kit", + "mod_storage", + "mod_plasma", + "mod_flashlight", + ) + +/datum/techweb_node/mod_equip + id = TECHWEB_NODE_MOD_EQUIP + display_name = "Modular Suit Equipment" + description = "More advanced modules, to improve modular suits." + prereq_ids = list(TECHWEB_NODE_MOD_SUIT) + design_ids = list( + "modlink_scryer", + "mod_clamp", + "mod_tether", + "mod_welding", + "mod_safety", + "mod_mouthhole", + "mod_longfall", + "mod_thermal_regulator", + "mod_sign_radio", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS) + +/datum/techweb_node/mod_entertainment + id = TECHWEB_NODE_MOD_ENTERTAINMENT + display_name = "Entertainment Modular Suit" + description = "Powered suits for protection against low-humor environments." + prereq_ids = list(TECHWEB_NODE_MOD_SUIT) + design_ids = list( + "mod_plating_cosmohonk", + "mod_bikehorn", + "mod_microwave_beam", + "mod_waddle", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS) + +/datum/techweb_node/mod_medical + id = TECHWEB_NODE_MOD_MEDICAL + display_name = "Medical Modular Suit" + description = "Medical exosuits for quick rescue purposes." + prereq_ids = list(TECHWEB_NODE_MOD_SUIT, TECHWEB_NODE_CHEM_SYNTHESIS) + design_ids = list( + "mod_plating_medical", + "mod_quick_carry", + "mod_injector", + "mod_organ_thrower", + "mod_patienttransport", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS) + +/datum/techweb_node/mod_engi + id = TECHWEB_NODE_MOD_ENGI + display_name = "Engineering Modular Suits" + description = "Engineering suits, for powered engineers." + prereq_ids = list(TECHWEB_NODE_MOD_EQUIP) + design_ids = list( + "mod_plating_engineering", + "mod_t_ray", + "mod_magboot", + "mod_constructor", + "mod_mister_atmos", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS) + +/datum/techweb_node/mod_security + id = TECHWEB_NODE_MOD_SECURITY + display_name = "Security Modular Suits" + description = "Security suits for space crime handling." + prereq_ids = list(TECHWEB_NODE_MOD_EQUIP) + design_ids = list( + "mod_plating_security", + "mod_stealth", + "mod_mag_harness", + "mod_pathfinder", + "mod_holster", + "mod_sonar", + "mod_projectile_dampener", + "mod_criminalcapture", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS) + +/datum/techweb_node/mod_medical_adv + id = TECHWEB_NODE_MOD_MEDICAL_ADV + display_name = "Field Surgery Modules" + description = "Medical exosuit equipment designed for conducting surgical operations in field conditions." + prereq_ids = list(TECHWEB_NODE_MOD_MEDICAL, TECHWEB_NODE_SURGERY_ADV) + design_ids = list( + "mod_defib", + "mod_threadripper", + "mod_surgicalprocessor", + "mod_statusreadout", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS) + +/datum/techweb_node/mod_engi_adv + id = TECHWEB_NODE_MOD_ENGI_ADV + display_name = "Advanced Engineering Modular Suit" + description = "Advanced Engineering suits, for advanced powered engineers." + prereq_ids = list(TECHWEB_NODE_MOD_ENGI) + design_ids = list( + "mod_plating_atmospheric", + "mod_jetpack", + "mod_rad_protection", + "mod_emp_shield", + "mod_storage_expanded", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS) + +/datum/techweb_node/mod_engi_adv/New() + if(HAS_TRAIT(SSstation, STATION_TRAIT_RADIOACTIVE_NEBULA)) //we'll really need the rad protection modsuit module + starting_node = TRUE + return ..() + +/datum/techweb_node/mod_anomaly + id = TECHWEB_NODE_MOD_ANOMALY + display_name = "Anomalock Modular Suit" + description = "Modules for exosuits that require anomaly cores to function." + prereq_ids = list(TECHWEB_NODE_MOD_ENGI_ADV, TECHWEB_NODE_ANOMALY_RESEARCH) + design_ids = list( + "mod_antigrav", + "mod_teleporter", + "mod_kinesis", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_4_POINTS) diff --git a/code/modules/research/techweb/nodes/research_nodes.dm b/code/modules/research/techweb/nodes/research_nodes.dm new file mode 100644 index 0000000000000..0cdbdb6548b4a --- /dev/null +++ b/code/modules/research/techweb/nodes/research_nodes.dm @@ -0,0 +1,94 @@ +/datum/techweb_node/fundamental_sci + id = TECHWEB_NODE_FUNDIMENTAL_SCI + starting_node = TRUE + display_name = "Fundamental Science" + description = "Establishing the bedrock of scientific understanding, paving the way for deeper exploration and theoretical inquiry." + design_ids = list( + "rdserver", + "rdservercontrol", + "rdconsole", + "tech_disk", + "doppler_array", + "experimentor", + "destructive_analyzer", + "destructive_scanner", + "experi_scanner", + "laptop", + "portadrive_basic", + "portadrive_advanced", + "portadrive_super", + ) + +/datum/techweb_node/bluespace_theory + id = TECHWEB_NODE_BLUESPACE_THEORY + display_name = "Bluespace Theory" + description = "Basic studies into the mysterious alternate dimension known as bluespace." + prereq_ids = list(TECHWEB_NODE_FUNDIMENTAL_SCI) + design_ids = list( + "bluespace_crystal", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS) + +/datum/techweb_node/applied_bluespace + id = TECHWEB_NODE_APPLIED_BLUESPACE + display_name = "Applied Bluespace Research" + description = "With a heightened grasp of bluespace dynamics, sophisticated applications and technologies can be devised using data from bluespace crystal analyses." + prereq_ids = list(TECHWEB_NODE_BLUESPACE_THEORY) + design_ids = list( + "ore_silo", + "minerbag_holding", + "plumbing_receiver", + "bluespacebeaker", + "adv_watering_can", + "bluespace_coffeepot", + "bluespacesyringe", + "blutrash", + "light_replacer_blue", + "bluespacebodybag", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS) + required_experiments = list(/datum/experiment/scanning/points/bluespace_crystal) + +/datum/techweb_node/bluespace_travel + id = TECHWEB_NODE_BLUESPACE_TRAVEL + display_name = "Bluespace Travel" + description = "Facilitate teleportation methods based on bluespace principles to revolutionize logistical efficiency." + prereq_ids = list(TECHWEB_NODE_APPLIED_BLUESPACE) + design_ids = list( + "teleconsole", + "tele_station", + "tele_hub", + "launchpad_console", + "quantumpad", + "launchpad", + "bluespace_pod", + "quantum_keycard", + "swapper", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS) + +/datum/techweb_node/anomaly_research + id = TECHWEB_NODE_ANOMALY_RESEARCH + display_name = "Anomaly Research" + description = "Delving into the study of mysterious anomalies to investigate methods to refine and harness their unpredictable energies." + prereq_ids = list(TECHWEB_NODE_APPLIED_BLUESPACE) + design_ids = list( + "anomaly_refinery", + "anomaly_neutralizer", + "reactive_armour", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS) + +/datum/techweb_node/anomaly_shells + id = TECHWEB_NODE_ANOMALY_SHELLS + display_name = "Advanced Anomaly Shells" + description = "New shells designed to utilize anomaly cores, maximizing their potential in innovative ways." + prereq_ids = list(TECHWEB_NODE_ANOMALY_RESEARCH) + design_ids = list( + "bag_holding", + "cybernetic_heart_anomalock", + "wormholeprojector", + "gravitygun", + "polymorph_belt" + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_4_POINTS) diff --git a/code/modules/research/techweb/nodes/robo_nodes.dm b/code/modules/research/techweb/nodes/robo_nodes.dm new file mode 100644 index 0000000000000..ff018e85b7c9a --- /dev/null +++ b/code/modules/research/techweb/nodes/robo_nodes.dm @@ -0,0 +1,97 @@ +/datum/techweb_node/robotics + id = TECHWEB_NODE_ROBOTICS + starting_node = TRUE + display_name = "Robotics" + description = "Programmable machines that make our lives lazier." + design_ids = list( + "mechfab", + "botnavbeacon", + "paicard", + ) + +/datum/techweb_node/exodrone + id = TECHWEB_NODE_EXODRONE + display_name = "Exploration Drones" + description = "Adapted arcade machines to covertly harness gamers' skills in controlling real drones for practical purposes." + prereq_ids = list(TECHWEB_NODE_ROBOTICS) + design_ids = list( + "exoscanner_console", + "exoscanner", + "exodrone_console", + "exodrone_launcher", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS) + +// AI root node +/datum/techweb_node/ai + id = TECHWEB_NODE_AI + display_name = "Artificial Intelligence" + description = "Exploration of AI systems, more intelligent than the entire crew put together." + prereq_ids = list(TECHWEB_NODE_ROBOTICS) + design_ids = list( + "aiupload", + "aifixer", + "intellicard", + "mecha_tracking_ai_control", + "borg_ai_control", + "aicore", + "reset_module", + "asimov_module", + "default_module", + "nutimov_module", + "paladin_module", + "robocop_module", + "corporate_module", + "drone_module", + "oxygen_module", + "safeguard_module", + "protectstation_module", + "quarantine_module", + "freeform_module", + "remove_module", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS) + +/datum/techweb_node/ai/New() + . = ..() + if(HAS_TRAIT(SSstation, STATION_TRAIT_HUMAN_AI)) + design_ids -= list( + "aicore", + "borg_ai_control", + "intellicard", + "mecha_tracking_ai_control", + "aifixer", + "aiupload", + ) + else if(HAS_TRAIT(SSstation, STATION_TRAIT_UNIQUE_AI)) + research_costs[TECHWEB_POINT_TYPE_GENERIC] *= 3 + +/datum/techweb_node/ai_laws + id = TECHWEB_NODE_AI_LAWS + display_name = "Advanced AI Laws" + description = "Delving into sophisticated AI directives, with hopes that they won't lead to humanity's extinction." + prereq_ids = list(TECHWEB_NODE_AI) + design_ids = list( + "asimovpp_module", + "paladin_devotion_module", + "dungeon_master_module", + "painter_module", + "ten_commandments_module", + "hippocratic_module", + "maintain_module", + "liveandletlive_module", + "reporter_module", + "yesman_module", + "hulkamania_module", + "peacekeeper_module", + "overlord_module", + "tyrant_module", + "antimov_module", + "balance_module", + "thermurderdynamic_module", + "damaged_module", + "freeformcore_module", + "onehuman_module", + "purge_module", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS) diff --git a/code/modules/research/techweb/nodes/security_nodes.dm b/code/modules/research/techweb/nodes/security_nodes.dm new file mode 100644 index 0000000000000..c85639b0aecb1 --- /dev/null +++ b/code/modules/research/techweb/nodes/security_nodes.dm @@ -0,0 +1,105 @@ +/datum/techweb_node/basic_arms + id = TECHWEB_NODE_BASIC_ARMS + starting_node = TRUE + display_name = "Basic Arms" + description = "Ballistics can be unpredictable in space." + design_ids = list( + "toygun", + "c38_rubber", + "sec_38", + "capbox", + "foam_dart", + "sec_beanbag_slug", + "sec_dart", + "sec_Islug", + "sec_rshot", + ) + +/datum/techweb_node/sec_equip + id = TECHWEB_NODE_SEC_EQUIP + display_name = "Security Equipment" + description = "All the essentials to subdue a mime." + prereq_ids = list(TECHWEB_NODE_BASIC_ARMS) + design_ids = list( + "secdata", + "mining", + "prisonmanage", + "rdcamera", + "seccamera", + "security_photobooth", + "photobooth", + "scanner_gate", + "pepperspray", + "dragnet_beacon", + "inspector", + "evidencebag", + "handcuffs_s", + "zipties", + "seclite", + "electropack", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS) + +/datum/techweb_node/riot_supression + id = TECHWEB_NODE_RIOT_SUPRESSION + display_name = "Riot Supression" + description = "When you are on the opposing side of a revolutionary movement." + prereq_ids = list(TECHWEB_NODE_SEC_EQUIP) + design_ids = list( + "pin_testing", + "pin_loyalty", + "tele_shield", + "ballistic_shield", + "bola_energy", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS) + +/datum/techweb_node/explosives + id = TECHWEB_NODE_EXPLOSIVES + display_name = "Explosives" + description = "For once, intentional explosions." + prereq_ids = list(TECHWEB_NODE_RIOT_SUPRESSION) + design_ids = list( + "large_grenade", + "adv_grenade", + "pyro_grenade", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS) + required_experiments = list(/datum/experiment/ordnance/explosive/lowyieldbomb) + discount_experiments = list(/datum/experiment/ordnance/explosive/highyieldbomb = TECHWEB_TIER_3_POINTS) + +/datum/techweb_node/exotic_ammo + id = TECHWEB_NODE_EXOTIC_AMMO + display_name = "Exotic Ammunition" + description = "Specialized bullets designed to ignite, freeze, and inflict various other effects on targets, expanding combat capabilities." + prereq_ids = list(TECHWEB_NODE_EXPLOSIVES) + design_ids = list( + "c38_hotshot", + "c38_iceblox", + "techshotshell", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_4_POINTS) + +/datum/techweb_node/electric_weapons + id = TECHWEB_NODE_ELECTRIC_WEAPONS + display_name = "Electric Weaponry" + description = "Energy-based weaponry designed for both lethal and non-lethal applications." + prereq_ids = list(TECHWEB_NODE_RIOT_SUPRESSION) + design_ids = list( + "stunrevolver", + "ioncarbine", + "temp_gun", + "lasershell", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS) + +/datum/techweb_node/beam_weapons + id = TECHWEB_NODE_BEAM_WEAPONS + display_name = "Advanced Beam Weaponry" + description = "So advanced, even engineers are baffled by its operational principles." + prereq_ids = list(TECHWEB_NODE_ELECTRIC_WEAPONS) + design_ids = list( + "xray_laser", + "nuclear_gun", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_4_POINTS) diff --git a/code/modules/research/techweb/nodes/service_nodes.dm b/code/modules/research/techweb/nodes/service_nodes.dm new file mode 100644 index 0000000000000..da7c48f0878c7 --- /dev/null +++ b/code/modules/research/techweb/nodes/service_nodes.dm @@ -0,0 +1,238 @@ +/datum/techweb_node/office_equip + id = TECHWEB_NODE_OFFICE_EQUIP + starting_node = TRUE + display_name = "Office Equipment" + description = "Nanotrasen's finest in ergonomic office tech, ensuring station admin stays productive and compliant with corporate policies — because even in space, paperwork never stops." + design_ids = list( + "fax", + "sec_pen", + "handlabel", + "roll", + "universal_scanner", + "desttagger", + "packagewrap", + "sticky_tape", + "toner_large", + "toner", + "boxcutter", + "bounced_radio", + "radio_headset", + "earmuffs", + "recorder", + "tape", + "toy_balloon", + "pet_carrier", + "chisel", + "spraycan", + "camera_film", + "camera", + "razor", + "bucket", + "mop", + "pushbroom", + "normtrash", + "wirebrush", + "flashlight", + ) + +/datum/techweb_node/sanitation + id = TECHWEB_NODE_SANITATION + display_name = "Advanced Sanitation Technology" + description = "Nanotrasen's latest in janitorial tech, making sure the station stays spotless and bear-free." + prereq_ids = list(TECHWEB_NODE_OFFICE_EQUIP) + design_ids = list( + "advmop", + "light_replacer", + "spraybottle", + "paint_remover", + "beartrap", + "buffer", + "vacuum", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS) + discount_experiments = list(/datum/experiment/scanning/random/janitor_trash = TECHWEB_TIER_2_POINTS) + +/datum/techweb_node/toys + id = TECHWEB_NODE_TOYS + display_name = "New Toys" + description = "For new pranks." + prereq_ids = list(TECHWEB_NODE_OFFICE_EQUIP) + design_ids = list( + "smoke_machine", + "toy_armblade", + "air_horn", + "clown_firing_pin", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS) + +/datum/techweb_node/consoles + id = TECHWEB_NODE_CONSOLES + display_name = "Civilian Consoles" + description = "User-friendly consoles for non-technical crew members, enhancing communication and access to essential station information." + prereq_ids = list(TECHWEB_NODE_OFFICE_EQUIP) + design_ids = list( + "comconsole", + "automated_announcement", + "cargo", + "cargorequest", + "med_data", + "crewconsole", + "bankmachine", + "account_console", + "idcard", + "c-reader", + "libraryconsole", + "libraryscanner", + "bookbinder", + "barcode_scanner", + "vendor", + "custom_vendor_refill", + "bounty_pad_control", + "bounty_pad", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS) + +/datum/techweb_node/gaming + id = TECHWEB_NODE_GAMING + display_name = "Gaming" + description = "For the slackers on the station." + prereq_ids = list(TECHWEB_NODE_TOYS, TECHWEB_NODE_CONSOLES) + design_ids = list( + "arcade_battle", + "arcade_orion", + "slotmachine", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS) + discount_experiments = list(/datum/experiment/physical/arcade_winner = TECHWEB_TIER_2_POINTS) + +// Kitchen root node +/datum/techweb_node/cafeteria_equip + id = TECHWEB_NODE_CAFETERIA_EQUIP + starting_node = TRUE + display_name = "Cafeteria Equipment" + description = "When standard-issue tubed food no longer satisfies the station crew's appetite..." + design_ids = list( + "griddle", + "microwave", + "bowl", + "plate", + "oven_tray", + "servingtray", + "tongs", + "spoon", + "fork", + "kitchen_knife", + "plastic_spoon", + "plastic_fork", + "plastic_knife", + "shaker", + "drinking_glass", + "shot_glass", + "coffee_cartridge", + "coffeemaker", + "coffeepot", + "syrup_bottle", + ) + +/datum/techweb_node/food_proc + id = TECHWEB_NODE_FOOD_PROC + display_name = "Food Processing" + description = "Top-tier kitchen appliances from Nanotrasen, designed to keep the crew well-fed and happy." + prereq_ids = list(TECHWEB_NODE_CAFETERIA_EQUIP) + design_ids = list( + "deepfryer", + "oven", + "stove", + "range", + "souppot", + "processor", + "gibber", + "monkey_recycler", + "reagentgrinder", + "microwave_engineering", + "smartfridge", + "sheetifier", + "fat_sucker", + "dish_drive", + "roastingstick", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS) + +// Fishing root node +/datum/techweb_node/fishing_equip + id = TECHWEB_NODE_FISHING_EQUIP + starting_node = TRUE + display_name = "Fishing Equipment" + description = "Basic fishing gear tailored for space station environments, perfect for extraterrestrial aquatic pursuits." + design_ids = list( + "fishing_portal_generator", + "fishing_rod", + "fish_case", + ) + +/datum/techweb_node/fishing_equip_adv + id = TECHWEB_NODE_FISHING_EQUIP_ADV + display_name = "Advanced Fishing Tools" + description = "Continuing advancements in fishing technology, incorporating cutting-edge features in space fishing operations. Just don't try this on space carps..." + prereq_ids = list(TECHWEB_NODE_FISHING_EQUIP) + design_ids = list( + "fishing_rod_tech", + "stabilized_hook", + "auto_reel", + "fish_analyzer", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS) + required_experiments = list(/datum/experiment/scanning/fish) + +/datum/techweb_node/marine_util + id = TECHWEB_NODE_MARINE_UTIL + display_name = "Marine Utility" + description = "Fish are nice to look at and all, but they can be put to use." + prereq_ids = list(TECHWEB_NODE_FISHING_EQUIP_ADV) + design_ids = list( + "bioelec_gen", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS) + // only available if you've done the first fishing experiment (thus unlocking fishing tech), but not a strict requirement to get the tech + discount_experiments = list(/datum/experiment/scanning/fish/second = TECHWEB_TIER_3_POINTS) + +// Botany root node +/datum/techweb_node/botany_equip + id = TECHWEB_NODE_BOTANY_EQUIP + starting_node = TRUE + display_name = "Botany Equipment" + description = "Essential tools for maintaining onboard gardens, supporting plant growth in the unique environment of the space station." + design_ids = list( + "seed_extractor", + "plant_analyzer", + "watering_can", + "spade", + "cultivator", + "secateurs", + "hatchet", + ) + +/datum/techweb_node/hydroponics + id = TECHWEB_NODE_HYDROPONICS + display_name = "Hydroponics" + description = "Research into advanced hydroponic systems for efficient and sustainable plant cultivation." + prereq_ids = list(TECHWEB_NODE_BOTANY_EQUIP, TECHWEB_NODE_CHEM_SYNTHESIS) + design_ids = list( + "biogenerator", + "hydro_tray", + "portaseeder", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS) + +/datum/techweb_node/selection + id = TECHWEB_NODE_SELECTION + display_name = "Artificial Selection" + description = "Advancement in plant cultivation techniques through artificial selection, enabling precise manipulation of plant DNA." + prereq_ids = list(TECHWEB_NODE_HYDROPONICS) + design_ids = list( + "flora_gun", + "gene_shears", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS) + required_experiments = list(/datum/experiment/scanning/random/plants/wild) + discount_experiments = list(/datum/experiment/scanning/random/plants/traits = TECHWEB_TIER_3_POINTS) diff --git a/code/modules/research/techweb/nodes/surgery_nodes.dm b/code/modules/research/techweb/nodes/surgery_nodes.dm new file mode 100644 index 0000000000000..2bd1f6d5df6d0 --- /dev/null +++ b/code/modules/research/techweb/nodes/surgery_nodes.dm @@ -0,0 +1,72 @@ +/datum/techweb_node/oldstation_surgery + id = TECHWEB_NODE_OLDSTATION_SURGERY + display_name = "Experimental Dissection" + description = "Grants access to experimental dissections, which allows generation of research points." + prereq_ids = list(TECHWEB_NODE_MEDBAY_EQUIP) + design_ids = list( + "surgery_oldstation_dissection", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS) + hidden = TRUE + show_on_wiki = FALSE + +/datum/techweb_node/surgery + id = TECHWEB_NODE_SURGERY + display_name = "Improved Wound-Tending" + description = "Who would have known being more gentle with a hemostat decreases patient pain?" + prereq_ids = list(TECHWEB_NODE_MEDBAY_EQUIP) + design_ids = list( + "surgery_heal_brute_upgrade", + "surgery_heal_burn_upgrade", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS) + +/datum/techweb_node/surgery_adv + id = TECHWEB_NODE_SURGERY_ADV + display_name = "Advanced Surgery" + description = "When simple medicine doesn't cut it." + prereq_ids = list(TECHWEB_NODE_SURGERY) + design_ids = list( + "harvester", + "surgery_heal_brute_upgrade_femto", + "surgery_heal_burn_upgrade_femto", + "surgery_heal_combo", + "surgery_lobotomy", + "surgery_wing_reconstruction", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS) + required_experiments = list(/datum/experiment/autopsy/human) + +/datum/techweb_node/surgery_exp + id = TECHWEB_NODE_SURGERY_EXP + display_name = "Experimental Surgery" + description = "When evolution isn't fast enough." + prereq_ids = list(TECHWEB_NODE_SURGERY_ADV) + design_ids = list( + "surgery_cortex_folding", + "surgery_cortex_imprint", + "surgery_heal_combo_upgrade", + "surgery_ligament_hook", + "surgery_ligament_reinforcement", + "surgery_muscled_veins", + "surgery_nerve_ground", + "surgery_nerve_splice", + "surgery_pacify", + "surgery_vein_thread", + "surgery_viral_bond", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS) + required_experiments = list(/datum/experiment/autopsy/nonhuman) + +/datum/techweb_node/surgery_tools + id = TECHWEB_NODE_SURGERY_TOOLS + display_name = "Advanced Surgery Tools" + description = "Surgical instruments of dual purpose for quick operations." + prereq_ids = list(TECHWEB_NODE_SURGERY_EXP) + design_ids = list( + "laserscalpel", + "searingtool", + "mechanicalpinches", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_4_POINTS) + discount_experiments = list(/datum/experiment/autopsy/xenomorph = TECHWEB_TIER_4_POINTS) diff --git a/code/modules/research/techweb/nodes/syndicate_nodes.dm b/code/modules/research/techweb/nodes/syndicate_nodes.dm new file mode 100644 index 0000000000000..377ac392f938f --- /dev/null +++ b/code/modules/research/techweb/nodes/syndicate_nodes.dm @@ -0,0 +1,49 @@ +/datum/techweb_node/syndicate_basic + id = TECHWEB_NODE_SYNDICATE_BASIC + display_name = "Illegal Technology" + description = "Dangerous research used to create dangerous objects." + prereq_ids = list(TECHWEB_NODE_EXP_TOOLS, TECHWEB_NODE_EXOTIC_AMMO) + design_ids = list( + "advanced_camera", + "ai_cam_upgrade", + "borg_syndicate_module", + "donksoft_refill", + "donksofttoyvendor", + "largecrossbow", + "mag_autorifle", + "mag_autorifle_ap", + "mag_autorifle_ic", + "rapidsyringe", + "suppressor", + "super_pointy_tape", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_5_POINTS) + hidden = TRUE + +/datum/techweb_node/syndicate_basic/New() //Crappy way of making syndicate gear decon supported until there's another way. + . = ..() + if(!SSearly_assets.initialized) + RegisterSignal(SSearly_assets, COMSIG_SUBSYSTEM_POST_INITIALIZE, PROC_REF(register_uplink_items)) + else + register_uplink_items() + +/datum/techweb_node/syndicate_basic/proc/register_uplink_items() + SIGNAL_HANDLER + UnregisterSignal(SSearly_assets, COMSIG_SUBSYSTEM_POST_INITIALIZE) + required_items_to_unlock = list() + for(var/datum/uplink_item/item_path as anything in SStraitor.uplink_items_by_type) + var/datum/uplink_item/item = SStraitor.uplink_items_by_type[item_path] + if(!item.item || !item.illegal_tech) + continue + required_items_to_unlock |= item.item //allows deconning to unlock. + +/datum/techweb_node/unregulated_bluespace + id = TECHWEB_NODE_UNREGULATED_BLUESPACE + display_name = "Unregulated Bluespace Research" + description = "Bluespace technology using unstable or unbalanced procedures, prone to damaging the fabric of bluespace. Outlawed by galactic conventions." + prereq_ids = list(TECHWEB_NODE_PARTS_BLUESPACE, TECHWEB_NODE_SYNDICATE_BASIC) + design_ids = list( + "desynchronizer", + "beamrifle", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS) diff --git a/code/modules/research/techweb/techweb_types.dm b/code/modules/research/techweb/techweb_types.dm index c01b1226a4c13..f5532e9e53f9d 100644 --- a/code/modules/research/techweb/techweb_types.dm +++ b/code/modules/research/techweb/techweb_types.dm @@ -18,7 +18,7 @@ /datum/techweb/oldstation/New() . = ..() - research_node_id("oldstation_surgery", TRUE, TRUE, FALSE) + research_node_id(TECHWEB_NODE_OLDSTATION_SURGERY, TRUE, TRUE, FALSE) /** * Admin techweb that has everything unlocked by default diff --git a/code/modules/research/xenobiology/crossbreeding/_clothing.dm b/code/modules/research/xenobiology/crossbreeding/_clothing.dm index 4fb51d223bd66..9bd9e2d881b1c 100644 --- a/code/modules/research/xenobiology/crossbreeding/_clothing.dm +++ b/code/modules/research/xenobiology/crossbreeding/_clothing.dm @@ -16,6 +16,7 @@ Slimecrossing Armor armor_type = /datum/armor/mask_nobreath flags_cover = MASKCOVERSMOUTH resistance_flags = NONE + interaction_flags_mouse_drop = NEED_HANDS /datum/armor/mask_nobreath bio = 50 @@ -37,8 +38,13 @@ Slimecrossing Armor icon = 'icons/obj/science/slimecrossing.dmi' icon_state = "prismglasses" actions_types = list(/datum/action/item_action/change_prism_colour, /datum/action/item_action/place_light_prism) + forced_glass_color = TRUE var/glasses_color = COLOR_WHITE +/obj/item/clothing/glasses/prism_glasses/Initialize(mapload) + . = ..() + AddElement(/datum/element/wearable_client_colour, /datum/client_colour/glass_colour, ITEM_SLOT_EYES, glasses_color, forced_glass_color) + /obj/item/clothing/glasses/prism_glasses/item_action_slot_check(slot) if(slot & ITEM_SLOT_EYES) return TRUE @@ -75,7 +81,9 @@ Slimecrossing Armor var/new_color = input(owner, "Choose the lens color:", "Color change",glasses.glasses_color) as color|null if(!new_color) return + RemoveElement(/datum/element/wearable_client_colour, /datum/client_colour/glass_colour, ITEM_SLOT_EYES, glasses.glasses_color, glasses.forced_glass_color) glasses.glasses_color = new_color + AddElement(/datum/element/wearable_client_colour, /datum/client_colour/glass_colour, ITEM_SLOT_EYES, new_color, glasses.forced_glass_color) /datum/action/item_action/place_light_prism name = "Fabricate Light Prism" @@ -125,8 +133,8 @@ Slimecrossing Armor return return ..() -/obj/item/clothing/head/peaceflower/MouseDrop(atom/over, src_location, over_location, src_control, over_control, params) - if(at_peace_check(usr)) +/obj/item/clothing/head/peaceflower/mouse_drop_dragged(atom/over, mob/user, src_location, over_location, params) + if(at_peace_check(user)) return return ..() diff --git a/code/modules/research/xenobiology/crossbreeding/_misc.dm b/code/modules/research/xenobiology/crossbreeding/_misc.dm index 7b85a878ec39b..b07299813d612 100644 --- a/code/modules/research/xenobiology/crossbreeding/_misc.dm +++ b/code/modules/research/xenobiology/crossbreeding/_misc.dm @@ -52,11 +52,10 @@ Slimecrossing Items ret[part.body_zone] = saved_part return ret -/obj/item/camera/rewind/afterattack(atom/target, mob/user, flag) - . |= AFTERATTACK_PROCESSED_ITEM - - if(!on || !pictures_left || !isturf(target.loc)) - return . +/obj/item/camera/rewind/photo_taken(atom/target, mob/user) + . = ..() + if(!.) + return if(user == target) to_chat(user, span_notice("You take a selfie!")) @@ -66,9 +65,6 @@ Slimecrossing Items to_chat(target, span_boldnotice("You'll remember this moment forever!")) target.AddComponent(/datum/component/dejavu, 2) - return . | ..() - - //Timefreeze camera - Old Burning Sepia result. Kept in case admins want to spawn it /obj/item/camera/timefreeze @@ -77,24 +73,22 @@ Slimecrossing Items pictures_left = 1 pictures_max = 1 -/obj/item/camera/timefreeze/afterattack(atom/target, mob/user, flag) - . |= AFTERATTACK_PROCESSED_ITEM - - if(!on || !pictures_left || !isturf(target.loc)) - return . +/obj/item/camera/timefreeze/photo_taken(atom/target, mob/user) + . = ..() + if(!.) + return new /obj/effect/timestop(get_turf(target), 2, 50, list(user)) - return . | ..() //Hypercharged slime cell - Charged Yellow -/obj/item/stock_parts/cell/high/slime_hypercharged +/obj/item/stock_parts/power_store/cell/high/slime_hypercharged name = "hypercharged slime core" desc = "A charged yellow slime extract, infused with plasma. It almost hurts to touch." icon = 'icons/mob/simple/slimes.dmi' - icon_state = "yellow slime extract" + icon_state = "yellow-core" rating = 7 custom_materials = null - maxcharge = 50000 - chargerate = 2500 + maxcharge = 50 * STANDARD_CELL_CHARGE + chargerate = 2.5 * STANDARD_CELL_RATE charge_light_type = null connector_type = "slimecore" diff --git a/code/modules/research/xenobiology/crossbreeding/_potions.dm b/code/modules/research/xenobiology/crossbreeding/_potions.dm index ecf76357e2010..16203cd3462fd 100644 --- a/code/modules/research/xenobiology/crossbreeding/_potions.dm +++ b/code/modules/research/xenobiology/crossbreeding/_potions.dm @@ -11,27 +11,25 @@ Slimecrossing Potions icon = 'icons/obj/medical/chemical.dmi' icon_state = "potpurple" -/obj/item/slimepotion/extract_cloner/afterattack(obj/item/target, mob/user , proximity) - if(!proximity) - return - . |= AFTERATTACK_PROCESSED_ITEM - if(is_reagent_container(target)) - return ..(target, user, proximity) - if(istype(target, /obj/item/slimecross)) - to_chat(user, span_warning("[target] is too complex for the potion to clone!")) - return - if(!istype(target, /obj/item/slime_extract)) - return - var/obj/item/slime_extract/S = target +/obj/item/slimepotion/extract_cloner/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + . = ..() + if(. & ITEM_INTERACT_ANY_BLOCKER) + return . + if(istype(interacting_with, /obj/item/slimecross)) + to_chat(user, span_warning("[interacting_with] is too complex for the potion to clone!")) + return ITEM_INTERACT_BLOCKING + if(!istype(interacting_with, /obj/item/slime_extract)) + return ITEM_INTERACT_BLOCKING + var/obj/item/slime_extract/S = interacting_with if(S.recurring) - to_chat(user, span_warning("[target] is too complex for the potion to clone!")) - return + to_chat(user, span_warning("[interacting_with] is too complex for the potion to clone!")) + return ITEM_INTERACT_BLOCKING var/path = S.type - var/obj/item/slime_extract/C = new path(get_turf(target)) + var/obj/item/slime_extract/C = new path(get_turf(interacting_with)) C.extract_uses = S.extract_uses - to_chat(user, span_notice("You pour the potion onto [target], and the fluid solidifies into a copy of it!")) + to_chat(user, span_notice("You pour the potion onto [interacting_with], and the fluid solidifies into a copy of it!")) qdel(src) - return + return ITEM_INTERACT_SUCCESS //Peace potion - Charged Light Pink /obj/item/slimepotion/peacepotion @@ -107,34 +105,34 @@ Slimecrossing Potions icon_state = "potblue" var/uses = 2 -/obj/item/slimepotion/spaceproof/afterattack(obj/item/clothing/C, mob/user, proximity) +/obj/item/slimepotion/spaceproof/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) . = ..() - if(!uses) + if(. & ITEM_INTERACT_ANY_BLOCKER) + return . + if(uses <= 0) qdel(src) - return - if(!proximity) - return - if(!istype(C)) + return ITEM_INTERACT_BLOCKING + var/obj/item/clothing/clothing = interacting_with + if(!istype(clothing)) to_chat(user, span_warning("The potion can only be used on clothing!")) - return - . |= AFTERATTACK_PROCESSED_ITEM - if(istype(C, /obj/item/clothing/suit/space)) - to_chat(user, span_warning("The [C] is already pressure-resistant!")) - return . | ..() - if(C.min_cold_protection_temperature == SPACE_SUIT_MIN_TEMP_PROTECT && C.clothing_flags & STOPSPRESSUREDAMAGE) - to_chat(user, span_warning("The [C] is already pressure-resistant!")) - return . | ..() - to_chat(user, span_notice("You slather the blue gunk over the [C], making it airtight.")) - C.name = "pressure-resistant [C.name]" - C.remove_atom_colour(WASHABLE_COLOUR_PRIORITY) - C.add_atom_colour(COLOR_NAVY, FIXED_COLOUR_PRIORITY) - C.min_cold_protection_temperature = SPACE_SUIT_MIN_TEMP_PROTECT - C.cold_protection = C.body_parts_covered - C.clothing_flags |= STOPSPRESSUREDAMAGE + return ITEM_INTERACT_BLOCKING + if(istype(clothing, /obj/item/clothing/suit/space)) + to_chat(user, span_warning("The [interacting_with] is already pressure-resistant!")) + return ITEM_INTERACT_BLOCKING + if(clothing.min_cold_protection_temperature == SPACE_SUIT_MIN_TEMP_PROTECT && (clothing.clothing_flags & STOPSPRESSUREDAMAGE)) + to_chat(user, span_warning("The [interacting_with] is already pressure-resistant!")) + return ITEM_INTERACT_BLOCKING + to_chat(user, span_notice("You slather the blue gunk over the [clothing], making it airtight.")) + clothing.name = "pressure-resistant [clothing.name]" + clothing.remove_atom_colour(WASHABLE_COLOUR_PRIORITY) + clothing.add_atom_colour(COLOR_NAVY, FIXED_COLOUR_PRIORITY) + clothing.min_cold_protection_temperature = SPACE_SUIT_MIN_TEMP_PROTECT + clothing.cold_protection = clothing.body_parts_covered + clothing.clothing_flags |= STOPSPRESSUREDAMAGE uses-- - if(!uses) + if(uses <= 0) qdel(src) - return . + return ITEM_INTERACT_SUCCESS //Enhancer potion - Charged Cerulean /obj/item/slimepotion/enhancer/max @@ -152,29 +150,30 @@ Slimecrossing Potions resistance_flags = LAVA_PROOF | FIRE_PROOF var/uses = 2 -/obj/item/slimepotion/lavaproof/afterattack(obj/item/C, mob/user, proximity) +/obj/item/slimepotion/lavaproof/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) . = ..() - if(!uses) + if(. & ITEM_INTERACT_ANY_BLOCKER) + return . + if(uses <= 0) qdel(src) - return ..() - if(!proximity) - return ..() - if(!istype(C)) + return ITEM_INTERACT_BLOCKING + if(!isitem(interacting_with)) to_chat(user, span_warning("You can't coat this with lavaproofing fluid!")) - return ..() - . |= AFTERATTACK_PROCESSED_ITEM - to_chat(user, span_notice("You slather the red gunk over the [C], making it lavaproof.")) - C.name = "lavaproof [C.name]" - C.remove_atom_colour(WASHABLE_COLOUR_PRIORITY) - C.add_atom_colour(COLOR_MAROON, FIXED_COLOUR_PRIORITY) - C.resistance_flags |= LAVA_PROOF - if (isclothing(C)) - var/obj/item/clothing/CL = C - CL.clothing_flags |= LAVAPROTECT + return ITEM_INTERACT_BLOCKING + + var/obj/item/clothing = interacting_with + to_chat(user, span_notice("You slather the red gunk over the [clothing], making it lavaproof.")) + clothing.name = "lavaproof [clothing.name]" + clothing.remove_atom_colour(WASHABLE_COLOUR_PRIORITY) + clothing.add_atom_colour(COLOR_MAROON, FIXED_COLOUR_PRIORITY) + clothing.resistance_flags |= LAVA_PROOF + if (isclothing(clothing)) + var/obj/item/clothing/clothing_real = clothing + clothing_real.clothing_flags |= LAVAPROTECT uses-- - if(!uses) + if(uses <= 0) qdel(src) - return . + return ITEM_INTERACT_SUCCESS //Revival potion - Charged Grey /obj/item/slimepotion/slime_reviver @@ -183,15 +182,21 @@ Slimecrossing Potions icon = 'icons/obj/medical/chemical.dmi' icon_state = "potsilver" -/obj/item/slimepotion/slime_reviver/attack(mob/living/basic/slime/revive_target, mob/user) +/obj/item/slimepotion/slime_reviver/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + . = ..() + if(. & ITEM_INTERACT_ANY_BLOCKER) + return . + var/mob/living/basic/slime/revive_target = interacting_with if(!isslime(revive_target)) to_chat(user, span_warning("The potion only works on slimes!")) - return ..() + return ITEM_INTERACT_BLOCKING if(revive_target.stat != DEAD) to_chat(user, span_warning("The slime is still alive!")) - return + return ITEM_INTERACT_BLOCKING if(revive_target.maxHealth <= 0) to_chat(user, span_warning("The slime is too unstable to return!")) + return ITEM_INTERACT_BLOCKING + user.do_attack_animation(interacting_with) revive_target.revive(HEAL_ALL) revive_target.set_stat(CONSCIOUS) revive_target.visible_message(span_notice("[revive_target] is filled with renewed vigor and blinks awake!")) @@ -199,6 +204,7 @@ Slimecrossing Potions revive_target.health -= 10 revive_target.regenerate_icons() qdel(src) + return ITEM_INTERACT_SUCCESS //Stabilizer potion - Charged Blue /obj/item/slimepotion/slime/chargedstabilizer diff --git a/code/modules/research/xenobiology/crossbreeding/_status_effects.dm b/code/modules/research/xenobiology/crossbreeding/_status_effects.dm index 667ffe24191c4..832d266723d13 100644 --- a/code/modules/research/xenobiology/crossbreeding/_status_effects.dm +++ b/code/modules/research/xenobiology/crossbreeding/_status_effects.dm @@ -7,6 +7,7 @@ id = "rainbow_protection" duration = 100 alert_type = /atom/movable/screen/alert/status_effect/rainbow_protection + show_duration = TRUE var/originalcolor /datum/status_effect/rainbow_protection/on_apply() @@ -37,6 +38,7 @@ id = "slimeskin" duration = 300 alert_type = /atom/movable/screen/alert/status_effect/slimeskin + show_duration = TRUE var/originalcolor /datum/status_effect/slimeskin/on_apply() @@ -587,11 +589,11 @@ return ..() cooldown = max_cooldown var/list/batteries = list() - for(var/obj/item/stock_parts/cell/C in owner.get_all_contents()) + for(var/obj/item/stock_parts/power_store/C in owner.get_all_contents()) if(C.charge < C.maxcharge) batteries += C if(batteries.len) - var/obj/item/stock_parts/cell/ToCharge = pick(batteries) + var/obj/item/stock_parts/power_store/ToCharge = pick(batteries) ToCharge.charge += min(ToCharge.maxcharge - ToCharge.charge, ToCharge.maxcharge/10) //10% of the cell, or to maximum. return ..() @@ -704,7 +706,7 @@ if(healthcheck && (healthcheck - owner.health) > 5) owner.visible_message(span_warning("[linked_extract] notices the sudden change in [owner]'s physical health, and activates!")) do_sparks(5,FALSE,owner) - var/F = find_safe_turf(zlevels = owner.z, extended_safety_checks = TRUE) + var/F = find_safe_turf(zlevel = owner.z, extended_safety_checks = TRUE) var/range = 0 if(!F) F = get_turf(owner) @@ -1077,7 +1079,7 @@ var/obj/item/slimecross/stabilized/rainbow/X = linked_extract if(istype(X)) if(X.regencore) - X.regencore.afterattack(owner,owner,TRUE) + X.regencore.interact_with_atom(owner, owner) X.regencore = null owner.visible_message(span_warning("[owner] flashes a rainbow of colors, and [owner.p_their()] skin is coated in a milky regenerative goo!")) qdel(src) diff --git a/code/modules/research/xenobiology/crossbreeding/_weapons.dm b/code/modules/research/xenobiology/crossbreeding/_weapons.dm index 1ad9ce683e475..c5136baafb149 100644 --- a/code/modules/research/xenobiology/crossbreeding/_weapons.dm +++ b/code/modules/research/xenobiology/crossbreeding/_weapons.dm @@ -27,8 +27,8 @@ Slimecrossing Weapons throwforce = 15 damtype = BRUTE -/obj/item/knife/rainbowknife/afterattack(atom/O, mob/user, proximity) - if(proximity && isliving(O)) +/obj/item/knife/rainbowknife/afterattack(atom/target, mob/user, params) + if(isliving(target)) damtype = pick(BRUTE, BURN, TOX, OXY) switch(damtype) if(BRUTE) @@ -47,7 +47,6 @@ Slimecrossing Weapons hitsound = 'sound/effects/space_wind.ogg' attack_verb_continuous = string_list(list("suffocates", "winds", "vacuums")) attack_verb_simple = string_list(list("suffocate", "wind", "vacuum")) - return ..() //Adamantine shield - Chilling Adamantine /obj/item/shield/adamantineshield diff --git a/code/modules/research/xenobiology/crossbreeding/charged.dm b/code/modules/research/xenobiology/crossbreeding/charged.dm index 76c4d3eaa1437..ca026ae9f33f7 100644 --- a/code/modules/research/xenobiology/crossbreeding/charged.dm +++ b/code/modules/research/xenobiology/crossbreeding/charged.dm @@ -81,7 +81,7 @@ Charged extracts: effect_desc = "Creates a hypercharged slime cell battery, which has high capacity but takes longer to recharge." /obj/item/slimecross/charged/yellow/do_effect(mob/user) - new /obj/item/stock_parts/cell/high/slime_hypercharged(get_turf(user)) + new /obj/item/stock_parts/power_store/cell/high/slime_hypercharged(get_turf(user)) user.visible_message(span_notice("[src] sparks violently, and swells with electric power!")) ..() diff --git a/code/modules/research/xenobiology/crossbreeding/chilling.dm b/code/modules/research/xenobiology/crossbreeding/chilling.dm index d8cf3456ed221..70784f5b90f3e 100644 --- a/code/modules/research/xenobiology/crossbreeding/chilling.dm +++ b/code/modules/research/xenobiology/crossbreeding/chilling.dm @@ -151,19 +151,20 @@ Chilling extracts: var/list/allies = list() var/active = FALSE -/obj/item/slimecross/chilling/bluespace/afterattack(atom/target, mob/user, proximity) - if(!proximity || !isliving(target) || active) - return - if(HAS_TRAIT(target, TRAIT_NO_TELEPORT)) - to_chat(user, span_warning("[target] resists being linked with [src]!")) - return - if(target in allies) - allies -= target - to_chat(user, span_notice("You unlink [src] with [target].")) +/obj/item/slimecross/chilling/bluespace/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + if(!isliving(interacting_with) || active) + return NONE + user.do_attack_animation(interacting_with) + if(HAS_TRAIT(interacting_with, TRAIT_NO_TELEPORT)) + to_chat(user, span_warning("[interacting_with] resists being linked with [src]!")) + return ITEM_INTERACT_BLOCKING + if(interacting_with in allies) + allies -= interacting_with + to_chat(user, span_notice("You unlink [src] with [interacting_with].")) else - allies |= target - to_chat(user, span_notice("You link [src] with [target].")) - return + allies += interacting_with + to_chat(user, span_notice("You link [src] with [interacting_with].")) + return ITEM_INTERACT_SUCCESS /obj/item/slimecross/chilling/bluespace/do_effect(mob/user) if(allies.len <= 0) @@ -193,16 +194,17 @@ Chilling extracts: effect_desc = "Touching someone with it adds/removes them from a list. Activating the extract stops time for 30 seconds, and everyone on the list is immune, except the user." var/list/allies = list() -/obj/item/slimecross/chilling/sepia/afterattack(atom/target, mob/user, proximity) - if(!proximity || !isliving(target)) - return - if(target in allies) - allies -= target - to_chat(user, span_notice("You unlink [src] with [target].")) +/obj/item/slimecross/chilling/sepia/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + if(!isliving(interacting_with)) + return NONE + user.do_attack_animation(interacting_with) + if(interacting_with in allies) + allies -= interacting_with + to_chat(user, span_notice("You unlink [src] with [interacting_with].")) else - allies |= target - to_chat(user, span_notice("You link [src] with [target].")) - return + allies += interacting_with + to_chat(user, span_notice("You link [src] with [interacting_with].")) + return ITEM_INTERACT_SUCCESS /obj/item/slimecross/chilling/sepia/do_effect(mob/user) user.visible_message(span_warning("[src] shatters, freezing time itself!")) diff --git a/code/modules/research/xenobiology/crossbreeding/industrial.dm b/code/modules/research/xenobiology/crossbreeding/industrial.dm index da878b77b5a05..9d5ed59fcec0d 100644 --- a/code/modules/research/xenobiology/crossbreeding/industrial.dm +++ b/code/modules/research/xenobiology/crossbreeding/industrial.dm @@ -85,10 +85,10 @@ Industrial extracts: colour = SLIME_TYPE_YELLOW effect_desc = "Produces high capacity power cells, which are not fully charged on creation." plasmarequired = 5 - itempath = /obj/item/stock_parts/cell/high + itempath = /obj/item/stock_parts/power_store/cell/high /obj/item/slimecross/industrial/yellow/do_after_spawn(obj/item/spawned) - var/obj/item/stock_parts/cell/high/C = spawned + var/obj/item/stock_parts/power_store/cell/high/C = spawned if(istype(C)) C.charge = rand(0,C.maxcharge/2) diff --git a/code/modules/research/xenobiology/crossbreeding/prismatic.dm b/code/modules/research/xenobiology/crossbreeding/prismatic.dm index 3f8509c1a7cd6..947323b0e47f4 100644 --- a/code/modules/research/xenobiology/crossbreeding/prismatic.dm +++ b/code/modules/research/xenobiology/crossbreeding/prismatic.dm @@ -10,25 +10,25 @@ Prismatic extracts: icon_state = "prismatic" var/paintcolor = COLOR_WHITE -/obj/item/slimecross/prismatic/afterattack(turf/target, mob/user, proximity) - if(!proximity) - return - if(!istype(target) || isspaceturf(target)) - return - target.add_atom_colour(paintcolor, WASHABLE_COLOUR_PRIORITY) - playsound(target, 'sound/effects/slosh.ogg', 20, TRUE) - -/obj/item/slimecross/prismatic/grey/ +/obj/item/slimecross/prismatic/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + if(!isturf(interacting_with) || isspaceturf(interacting_with)) + return NONE + user.do_attack_animation(interacting_with) + interacting_with.add_atom_colour(paintcolor, WASHABLE_COLOUR_PRIORITY) + playsound(interacting_with, 'sound/effects/slosh.ogg', 20, TRUE) + return ITEM_INTERACT_SUCCESS + +/obj/item/slimecross/prismatic/grey colour = SLIME_TYPE_GREY desc = "It's constantly wet with a pungent-smelling, clear chemical." -/obj/item/slimecross/prismatic/grey/afterattack(turf/target, mob/user, proximity) - . = ..() - if(!proximity) - return - if(istype(target) && target.color != initial(target.color)) - target.remove_atom_colour(WASHABLE_COLOUR_PRIORITY) - playsound(target, 'sound/effects/slosh.ogg', 20, TRUE) +/obj/item/slimecross/prismatic/grey/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + if(isturf(interacting_with) && interacting_with.color != initial(interacting_with.color)) + user.do_attack_animation(interacting_with) + interacting_with.remove_atom_colour(WASHABLE_COLOUR_PRIORITY) + playsound(interacting_with, 'sound/effects/slosh.ogg', 20, TRUE) + return ITEM_INTERACT_SUCCESS + return ..() /obj/item/slimecross/prismatic/orange paintcolor = "#FFA500" diff --git a/code/modules/research/xenobiology/crossbreeding/regenerative.dm b/code/modules/research/xenobiology/crossbreeding/regenerative.dm index ee02a18f11fae..82beed78e439c 100644 --- a/code/modules/research/xenobiology/crossbreeding/regenerative.dm +++ b/code/modules/research/xenobiology/crossbreeding/regenerative.dm @@ -14,14 +14,13 @@ Regenerative extracts: /obj/item/slimecross/regenerative/proc/core_effect_before(mob/living/carbon/human/target, mob/user) return -/obj/item/slimecross/regenerative/afterattack(atom/target,mob/user,prox) - . = ..() - if(!prox || !isliving(target)) +/obj/item/slimecross/regenerative/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + if(!isliving(interacting_with)) return - var/mob/living/H = target + var/mob/living/H = interacting_with if(H.stat == DEAD) to_chat(user, span_warning("[src] will not work on the dead!")) - return + return ITEM_INTERACT_BLOCKING if(H != user) user.visible_message(span_notice("[user] crushes [src] over [H], the milky goo quickly regenerating all of [H.p_their()] injuries!"), span_notice("You squeeze [src], and it bursts over [H], the milky goo regenerating [H.p_their()] injuries.")) @@ -29,10 +28,12 @@ Regenerative extracts: user.visible_message(span_notice("[user] crushes [src] over [user.p_them()]self, the milky goo quickly regenerating all of [user.p_their()] injuries!"), span_notice("You squeeze [src], and it bursts in your hand, splashing you with milky goo which quickly regenerates your injuries!")) core_effect_before(H, user) + user.do_attack_animation(interacting_with) H.revive(HEAL_ALL) core_effect(H, user) - playsound(target, 'sound/effects/splat.ogg', 40, TRUE) + playsound(H, 'sound/effects/splat.ogg', 40, TRUE) qdel(src) + return ITEM_INTERACT_SUCCESS /obj/item/slimecross/regenerative/grey colour = SLIME_TYPE_GREY //Has no bonus effect. @@ -81,11 +82,11 @@ Regenerative extracts: /obj/item/slimecross/regenerative/yellow/core_effect(mob/living/target, mob/user) var/list/batteries = list() - for(var/obj/item/stock_parts/cell/C in target.get_all_contents()) + for(var/obj/item/stock_parts/power_store/C in target.get_all_contents()) if(C.charge < C.maxcharge) batteries += C if(batteries.len) - var/obj/item/stock_parts/cell/ToCharge = pick(batteries) + var/obj/item/stock_parts/power_store/ToCharge = pick(batteries) ToCharge.charge = ToCharge.maxcharge to_chat(target, span_notice("You feel a strange electrical pulse, and one of your electrical items was recharged.")) diff --git a/code/modules/research/xenobiology/vatgrowing/microscope.dm b/code/modules/research/xenobiology/vatgrowing/microscope.dm index 2e70d20faf07d..df065698436a4 100644 --- a/code/modules/research/xenobiology/vatgrowing/microscope.dm +++ b/code/modules/research/xenobiology/vatgrowing/microscope.dm @@ -3,17 +3,28 @@ desc = "A simple microscope, allowing you to examine micro-organisms." icon = 'icons/obj/science/vatgrowing.dmi' icon_state = "microscope" + ///Analyzed dish var/obj/item/petri_dish/current_dish -/obj/structure/microscope/attacked_by(obj/item/I, mob/living/user) - if(!istype(I, /obj/item/petri_dish)) - return ..() +/obj/structure/microscope/Initialize(mapload) + . = ..() + var/static/list/hovering_item_typechecks = list( + /obj/item/petri_dish = list( + SCREENTIP_CONTEXT_LMB = "Add petri dish", + ), + ) + AddElement(/datum/element/contextual_screentip_item_typechecks, hovering_item_typechecks) + AddElement(/datum/element/contextual_screentip_bare_hands, rmb_text = "Remove petri dish") + +/obj/structure/microscope/item_interaction(mob/living/user, obj/item/tool, list/modifiers) + . = ..() + if(istype(tool, /obj/item/petri_dish)) + return add_dish(user, tool) + +/obj/structure/microscope/attack_hand_secondary(mob/user, list/modifiers) + . = ..() if(current_dish) - to_chat(user, span_warning("There is already a petridish in \the [src].")) - return - to_chat(user, span_notice("You put [I] into \the [src].")) - current_dish = I - current_dish.forceMove(src) + return remove_dish(user) /obj/structure/microscope/ui_interact(mob/user, datum/tgui/ui) ui = SStgui.try_update_ui(user, src, ui) @@ -21,27 +32,30 @@ ui = new(user, src, "Microscope", name) ui.open() -/obj/structure/microscope/ui_data(mob/user) +/obj/structure/microscope/ui_static_data(mob/user) var/list/data = list() data["has_dish"] = current_dish ? TRUE : FALSE data["cell_lines"] = list() - data["viruses"] = list() if(!current_dish) return data if(!current_dish.sample) return data - for(var/organism in current_dish.sample.micro_organisms) //All the microorganisms in the dish + for(var/organism in current_dish.sample.micro_organisms) if(istype(organism, /datum/micro_organism/cell_line)) var/datum/micro_organism/cell_line/cell_line = organism + var/atom/resulting_atom = cell_line.resulting_atom var/list/organism_data = list( type = "cell line", name = cell_line.name, desc = cell_line.desc, - growth_rate = cell_line.growth_rate, - suspectibility = cell_line.virus_suspectibility, + icon = resulting_atom ? initial(resulting_atom.icon) : "", + icon_state = resulting_atom ? initial(resulting_atom.icon_state) : "", + consumption_rate = cell_line.consumption_rate * SSMACHINES_DT, + growth_rate = cell_line.growth_rate * SSMACHINES_DT, + suspectibility = cell_line.virus_suspectibility * SSMACHINES_DT, requireds = get_reagent_list(cell_line.required_reagents), supplementaries = get_reagent_list(cell_line.supplementary_reagents), suppressives = get_reagent_list(cell_line.suppressive_reagents) @@ -55,7 +69,7 @@ name = virus.name, desc = virus.desc ) - data["viruses"] += list(virus_data) + data["cell_lines"] += list(virus_data) return data @@ -63,23 +77,49 @@ var/list/reagent_list = list() for(var/i in reagents) //Convert from assoc to normal. Yeah very shit. var/datum/reagent/reagent = i - reagent_list += initial(reagent.name) - return reagent_list.Join(", ") - + reagent_list["[initial(reagent.name)]"] = reagents[i] * SSMACHINES_DT + return reagent_list -/obj/structure/microscope/ui_act(action, params) +/obj/structure/microscope/ui_act(action, params, datum/tgui/ui) . = ..() if(.) return switch(action) if("eject_petridish") - if(!current_dish) - return FALSE - current_dish.forceMove(get_turf(src)) - current_dish = null - . = TRUE + if(current_dish) + remove_dish(ui.user) + . = TRUE update_appearance() +///Insert a new dish, swapping the inserted one +/obj/structure/microscope/proc/add_dish(mob/living/user, obj/item/petri_dish/new_dish) + var/obj/item/petri_dish/old_dish + if(current_dish) + old_dish = current_dish + if(!user.transferItemToLoc(new_dish, src)) + balloon_alert(user, "couldn't add!") + return ITEM_INTERACT_FAILURE + current_dish = new_dish + update_static_data_for_all_viewers() + if(old_dish) + if(!user.put_in_hands(old_dish)) + old_dish.forceMove(get_turf(src)) + balloon_alert(user, "dish swapped") + else + balloon_alert(user, "dish added") + return ITEM_INTERACT_SUCCESS + +///Take the inserted dish, or drop it on the floor +/obj/structure/microscope/proc/remove_dish(mob/living/user) + if(!current_dish) + return SECONDARY_ATTACK_CONTINUE_CHAIN + if(!user.put_in_hands(current_dish)) + current_dish.forceMove(get_turf(src)) + current_dish = null + update_static_data_for_all_viewers() + balloon_alert(user, "dish removed") + return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN + /datum/crafting_recipe/microscope name = "Microscope" result = /obj/structure/microscope diff --git a/code/modules/research/xenobiology/vatgrowing/samples/_micro_organism.dm b/code/modules/research/xenobiology/vatgrowing/samples/_micro_organism.dm index edeeaad05c6a3..b8af4dd062c41 100644 --- a/code/modules/research/xenobiology/vatgrowing/samples/_micro_organism.dm +++ b/code/modules/research/xenobiology/vatgrowing/samples/_micro_organism.dm @@ -23,8 +23,12 @@ var/virus_suspectibility = 1 ///This var defines how much % the organism grows per process(), without modifiers, if you have all required reagents var/growth_rate = 4 - ///Resulting atoms from growing this cell line. List is assoc atom type || amount - var/list/resulting_atoms = list() + ///This var defines how many units of every reagent is consumed during growth per process() + var/consumption_rate = REAGENTS_METABOLISM + ///Resulting atom from growing this cell line + var/atom/resulting_atom + ///The number of resulting atoms + var/resulting_atom_count = 1 ///Handles growth of the micro_organism. This only runs if the micro organism is in the growing vat. Reagents is the growing vats reagents /datum/micro_organism/cell_line/proc/handle_growth(obj/machinery/plumbing/growing_vat/vat) @@ -41,7 +45,7 @@ if(!reagents.has_reagent(i)) return FALSE for(var/i in required_reagents) //Delete the required reagents if used - reagents.remove_reagent(i, REAGENTS_METABOLISM) + reagents.remove_reagent(i, consumption_rate) return TRUE ///Apply modifiers on growth_rate based on supplementary and supressive reagents. Reagents is the growing vats reagents @@ -50,22 +54,22 @@ //Handle growth based on supplementary reagents here. for(var/i in supplementary_reagents) - if(!reagents.has_reagent(i, REAGENTS_METABOLISM)) + if(!reagents.has_reagent(i, consumption_rate)) continue . += supplementary_reagents[i] - reagents.remove_reagent(i, REAGENTS_METABOLISM) + reagents.remove_reagent(i, consumption_rate) //Handle degrowth based on supressive reagents here. for(var/i in suppressive_reagents) - if(!reagents.has_reagent(i, REAGENTS_METABOLISM)) + if(!reagents.has_reagent(i, consumption_rate)) continue . += suppressive_reagents[i] - reagents.remove_reagent(i, REAGENTS_METABOLISM) + reagents.remove_reagent(i, consumption_rate) //Handle debuffing growth based on viruses here. for(var/datum/micro_organism/virus/active_virus in biological_sample.micro_organisms) - if(reagents.has_reagent(/datum/reagent/medicine/spaceacillin, REAGENTS_METABOLISM)) - reagents.remove_reagent(/datum/reagent/medicine/spaceacillin, REAGENTS_METABOLISM) + if(reagents.has_reagent(/datum/reagent/medicine/spaceacillin, consumption_rate)) + reagents.remove_reagent(/datum/reagent/medicine/spaceacillin, consumption_rate) continue //This virus is stopped, We have antiviral stuff . -= virus_suspectibility @@ -98,11 +102,10 @@ var/datum/effect_system/fluid_spread/smoke/smoke = new smoke.set_up(0, holder = vat, location = vat.loc) smoke.start() - for(var/created_thing in resulting_atoms) - for(var/x in 1 to resulting_atoms[created_thing]) - var/atom/thing = new created_thing(get_turf(vat)) - ADD_TRAIT(thing, TRAIT_VATGROWN, "vatgrowing") - vat.visible_message(span_nicegreen("[thing] pops out of [vat]!")) + for(var/x in 1 to resulting_atom_count) + var/atom/thing = new resulting_atom(get_turf(vat)) + ADD_TRAIT(thing, TRAIT_VATGROWN, "vatgrowing") + vat.visible_message(span_nicegreen("[thing] pops out of [vat]!")) if(SEND_SIGNAL(vat.biological_sample, COMSIG_SAMPLE_GROWTH_COMPLETED) & SPARE_SAMPLE) return QDEL_NULL(vat.biological_sample) diff --git a/code/modules/research/xenobiology/vatgrowing/samples/cell_lines/common.dm b/code/modules/research/xenobiology/vatgrowing/samples/cell_lines/common.dm index b170cb19fd784..8dd4594d47d65 100644 --- a/code/modules/research/xenobiology/vatgrowing/samples/cell_lines/common.dm +++ b/code/modules/research/xenobiology/vatgrowing/samples/cell_lines/common.dm @@ -25,7 +25,8 @@ virus_suspectibility = 2 growth_rate = VAT_GROWTH_RATE - resulting_atoms = list(/mob/living/basic/mouse = 2) + resulting_atom = /mob/living/basic/mouse + resulting_atom_count = 2 /datum/micro_organism/cell_line/chicken //basic cell line designed as a good source of protein and eggyolk. desc = "Galliform skin cells." @@ -43,7 +44,7 @@ virus_suspectibility = 1 growth_rate = VAT_GROWTH_RATE - resulting_atoms = list(/mob/living/basic/chicken = 1) + resulting_atom = /mob/living/basic/chicken /datum/micro_organism/cell_line/cow desc = "Bovine stem cells" @@ -62,7 +63,7 @@ /datum/reagent/toxin/carpotoxin = -5) virus_suspectibility = 1 - resulting_atoms = list(/mob/living/basic/cow = 1) + resulting_atom = /mob/living/basic/cow /datum/micro_organism/cell_line/moonicorn desc = "Fairyland Bovine stem cells" @@ -87,7 +88,7 @@ ) virus_suspectibility = 1 - resulting_atoms = list(/mob/living/basic/cow/moonicorn = 1) + resulting_atom = /mob/living/basic/cow/moonicorn /datum/micro_organism/cell_line/cat desc = "Feliform cells" @@ -108,7 +109,7 @@ /datum/reagent/consumable/milk/chocolate_milk = -1) virus_suspectibility = 1.5 - resulting_atoms = list(/mob/living/basic/pet/cat = 1) + resulting_atom = /mob/living/basic/pet/cat /datum/micro_organism/cell_line/corgi desc = "Canid cells" @@ -127,7 +128,7 @@ /datum/reagent/consumable/coco = -2) virus_suspectibility = 1 - resulting_atoms = list(/mob/living/basic/pet/dog/corgi = 1) + resulting_atom = /mob/living/basic/pet/dog/corgi /datum/micro_organism/cell_line/pug desc = "Squat canid cells" @@ -145,7 +146,7 @@ /datum/reagent/consumable/coco = -2) virus_suspectibility = 3 - resulting_atoms = list(/mob/living/basic/pet/dog/pug = 1) + resulting_atom = /mob/living/basic/pet/dog/pug /datum/micro_organism/cell_line/bear //bears can't really compete directly with more powerful creatures, so i made it possible to grow them real fast. desc = "Ursine cells" @@ -166,7 +167,7 @@ /datum/reagent/medicine/insulin = -2) //depletes hunny. virus_suspectibility = 2 - resulting_atoms = list(/mob/living/basic/bear = 1) + resulting_atom = /mob/living/basic/bear /datum/micro_organism/cell_line/carp desc = "Cyprinid cells" @@ -185,7 +186,7 @@ /datum/reagent/oxygen = -3) virus_suspectibility = 2 - resulting_atoms = list(/mob/living/basic/carp = 1) + resulting_atom = /mob/living/basic/carp /datum/micro_organism/cell_line/megacarp desc = "Cartilaginous cyprinid cells" @@ -205,7 +206,7 @@ /datum/reagent/oxygen = -3) virus_suspectibility = 1 - resulting_atoms = list(/mob/living/basic/carp/mega = 1) + resulting_atom = /mob/living/basic/carp/mega /datum/micro_organism/cell_line/snake desc = "Ophidic cells" @@ -223,7 +224,7 @@ /datum/reagent/consumable/corn_syrup = -6, /datum/reagent/sulfur = -3) //sulfur repels snakes according to professor google. - resulting_atoms = list(/mob/living/basic/snake = 1) + resulting_atom = /mob/living/basic/snake /////////////////////////////////////////// @@ -246,7 +247,7 @@ /datum/reagent/consumable/ice = -2) //Brrr! virus_suspectibility = 0 - resulting_atoms = list(/mob/living/basic/slime = 1) + resulting_atom = /mob/living/basic/slime /datum/micro_organism/cell_line/blob_spore //nuisance cell line desc = "Immature blob spores" @@ -263,7 +264,8 @@ /datum/reagent/medicine/psicodine = -2) //Blob zombies likely wouldn't appreciate psicodine so why this is here virus_suspectibility = 0 - resulting_atoms = list(/mob/living/basic/blob_minion/spore = 2) //These are useless so we might as well spawn 2. + resulting_atom = /mob/living/basic/blob_minion/spore + resulting_atom_count = 2 /datum/micro_organism/cell_line/blobbernaut desc = "Blobular myocytes" @@ -282,7 +284,7 @@ suppressive_reagents = list(/datum/reagent/consumable/tinlux = -6) virus_suspectibility = 0 - resulting_atoms = list(/mob/living/basic/blob_minion/blobbernaut = 1) + resulting_atom = /mob/living/basic/blob_minion/blobbernaut /datum/micro_organism/cell_line/gelatinous_cube desc = "Cubic ooze particles" @@ -307,7 +309,7 @@ /datum/reagent/consumable/ice = -1) virus_suspectibility = 0 - resulting_atoms = list(/mob/living/simple_animal/hostile/ooze/gelatinous = 1) + resulting_atom = /mob/living/simple_animal/hostile/ooze/gelatinous /datum/micro_organism/cell_line/sholean_grapes desc = "Globular ooze particles" @@ -334,7 +336,7 @@ /datum/reagent/consumable/ice = -1) virus_suspectibility = 0 - resulting_atoms = list(/mob/living/simple_animal/hostile/ooze/grapes = 1) + resulting_atom = /mob/living/simple_animal/hostile/ooze/grapes //////////////////// //// MISC //// @@ -355,7 +357,8 @@ /datum/reagent/consumable/ethanol/bug_spray = -4) virus_suspectibility = 0 - resulting_atoms = list(/mob/living/basic/cockroach = 5) + resulting_atom = /mob/living/basic/cockroach + resulting_atom_count = 5 /datum/micro_organism/cell_line/glockroach desc = "Gattodeoid anthropod cells" @@ -376,7 +379,8 @@ /datum/reagent/consumable/ethanol/bug_spray = -4) virus_suspectibility = 0 - resulting_atoms = list(/mob/living/basic/cockroach/glockroach = 2) + resulting_atom = /mob/living/basic/cockroach/glockroach + resulting_atom_count = 2 /datum/micro_organism/cell_line/hauberoach desc = "Hattodeoid anthropod cells" @@ -397,7 +401,8 @@ /datum/reagent/consumable/ethanol/cognac = -4) virus_suspectibility = 0 - resulting_atoms = list(/mob/living/basic/cockroach/hauberoach = 2) + resulting_atom = /mob/living/basic/cockroach/hauberoach + resulting_atom_count = 2 /datum/micro_organism/cell_line/pine desc = "Coniferous plant cells" @@ -418,7 +423,7 @@ suppressive_reagents = list(/datum/reagent/toxin/plantbgone = -8) virus_suspectibility = 1 - resulting_atoms = list(/mob/living/basic/tree = 1) + resulting_atom = /mob/living/basic/tree /datum/micro_organism/cell_line/vat_beast desc = "Hypergenic xenocytes" @@ -443,7 +448,7 @@ /datum/reagent/medicine/c2/syriniver = -2) virus_suspectibility = 0.5 - resulting_atoms = list(/mob/living/simple_animal/hostile/vatbeast = 1) + resulting_atom = /mob/living/simple_animal/hostile/vatbeast /datum/micro_organism/cell_line/vat_beast/succeed_growing(obj/machinery/plumbing/growing_vat/vat) . = ..() @@ -470,12 +475,9 @@ /datum/reagent/consumable/liquidgibs = -2) virus_suspectibility = 0 - resulting_atoms = list() /datum/micro_organism/cell_line/netherworld/succeed_growing(obj/machinery/plumbing/growing_vat/vat) - var/random_result = pick(/mob/living/basic/creature, /mob/living/basic/migo, /mob/living/basic/blankbody) //i looked myself, pretty much all of them are reasonably strong and somewhat on the same level. except migo is the jackpot and the blank body is whiff. - resulting_atoms = list() - resulting_atoms[random_result] = 1 + resulting_atom = pick(/mob/living/basic/creature, /mob/living/basic/migo, /mob/living/basic/blankbody) //i looked myself, pretty much all of them are reasonably strong and somewhat on the same level. except migo is the jackpot and the blank body is whiff. return ..() /datum/micro_organism/cell_line/clown/fuck_up_growing(obj/machinery/plumbing/growing_vat/vat) @@ -509,7 +511,7 @@ /datum/reagent/consumable/nothing = -2, /datum/reagent/fuel/oil = -1) - resulting_atoms = list(/mob/living/basic/clown/banana = 1) + resulting_atom = /mob/living/basic/clown/banana /datum/micro_organism/cell_line/clown/glutton desc = "hyperadipogenic clown stem cells" @@ -535,7 +537,7 @@ /datum/reagent/consumable/nothing = -2, /datum/reagent/toxin/bad_food = -1) - resulting_atoms = list(/mob/living/basic/clown/mutant/glutton = 1) + resulting_atom = /mob/living/basic/clown/mutant/glutton /datum/micro_organism/cell_line/clown/longclown desc = "long clown bits" @@ -558,7 +560,7 @@ /datum/reagent/consumable/nothing = -2, /datum/reagent/sulfur = -1) - resulting_atoms = list(/mob/living/basic/clown/longface = 1) + resulting_atom = /mob/living/basic/clown/longface /datum/micro_organism/cell_line/frog desc = "anura amphibian cells" @@ -579,7 +581,7 @@ /datum/reagent/toxin = -1) virus_suspectibility = 0.5 - resulting_atoms = list(/mob/living/basic/frog = 1) + resulting_atom = /mob/living/basic/frog /datum/micro_organism/cell_line/axolotl desc = "caudata amphibian cells" @@ -602,7 +604,7 @@ /datum/reagent/toxin = -1) virus_suspectibility = 0.5 - resulting_atoms = list(/mob/living/basic/axolotl = 1) + resulting_atom = /mob/living/basic/axolotl /datum/micro_organism/cell_line/walking_mushroom desc = "motile fungal hyphae" @@ -627,7 +629,7 @@ /datum/reagent/copper = -1) virus_suspectibility = 0 - resulting_atoms = list(/mob/living/basic/mushroom = 1) + resulting_atom = /mob/living/basic/mushroom /datum/micro_organism/cell_line/queen_bee desc = "aphid cells" @@ -652,7 +654,7 @@ /datum/reagent/drug/nicotine = -1) virus_suspectibility = 0 - resulting_atoms = list(/obj/item/queen_bee/bought = 1) + resulting_atom = /obj/item/queen_bee/bought /datum/micro_organism/cell_line/queen_bee/fuck_up_growing(obj/machinery/plumbing/growing_vat/vat) //we love job hazards vat.visible_message(span_warning("You hear angry buzzing coming from the inside of the vat!")) @@ -682,7 +684,8 @@ ) virus_suspectibility = 0 - resulting_atoms = list(/mob/living/basic/butterfly = 3) + resulting_atom = /mob/living/basic/butterfly + resulting_atom_count = 3 /datum/micro_organism/cell_line/mega_arachnid desc = "pseudoarachnoid cells" @@ -708,6 +711,6 @@ /datum/reagent/drug/nicotine = -1, /datum/reagent/toxin/pestkiller = -1) - resulting_atoms = list(/mob/living/basic/mega_arachnid = 1) + resulting_atom = /mob/living/basic/mega_arachnid #undef VAT_GROWTH_RATE diff --git a/code/modules/research/xenobiology/xenobio_camera.dm b/code/modules/research/xenobiology/xenobio_camera.dm index 9724bd776d87e..68ffe5e9248be 100644 --- a/code/modules/research/xenobiology/xenobio_camera.dm +++ b/code/modules/research/xenobiology/xenobio_camera.dm @@ -91,22 +91,20 @@ eyeobj.icon_state = "generic_camera" /obj/machinery/computer/camera_advanced/xenobio/GrantActions(mob/living/user) - ..() - RegisterSignal(user, COMSIG_XENO_SLIME_CLICK_CTRL, PROC_REF(XenoSlimeClickCtrl)) - RegisterSignal(user, COMSIG_XENO_TURF_CLICK_CTRL, PROC_REF(XenoTurfClickCtrl)) - RegisterSignal(user, COMSIG_XENO_MONKEY_CLICK_CTRL, PROC_REF(XenoMonkeyClickCtrl)) - RegisterSignal(user, COMSIG_XENO_SLIME_CLICK_ALT, PROC_REF(XenoSlimeClickAlt)) + . = ..() + RegisterSignal(user, COMSIG_MOB_CTRL_CLICKED, PROC_REF(XenoClickCtrl)) + RegisterSignal(user, COMSIG_MOB_ALTCLICKON, PROC_REF(XenoSlimeClickAlt)) RegisterSignal(user, COMSIG_XENO_SLIME_CLICK_SHIFT, PROC_REF(XenoSlimeClickShift)) RegisterSignal(user, COMSIG_XENO_TURF_CLICK_SHIFT, PROC_REF(XenoTurfClickShift)) /obj/machinery/computer/camera_advanced/xenobio/remove_eye_control(mob/living/user) - UnregisterSignal(user, COMSIG_XENO_SLIME_CLICK_CTRL) - UnregisterSignal(user, COMSIG_XENO_TURF_CLICK_CTRL) - UnregisterSignal(user, COMSIG_XENO_MONKEY_CLICK_CTRL) - UnregisterSignal(user, COMSIG_XENO_SLIME_CLICK_ALT) - UnregisterSignal(user, COMSIG_XENO_SLIME_CLICK_SHIFT) - UnregisterSignal(user, COMSIG_XENO_TURF_CLICK_SHIFT) - ..() + UnregisterSignal(user, list( + COMSIG_MOB_CTRL_CLICKED, + COMSIG_MOB_ALTCLICKON, + COMSIG_XENO_SLIME_CLICK_SHIFT, + COMSIG_XENO_TURF_CLICK_SHIFT, + )) + return ..() /obj/machinery/computer/camera_advanced/xenobio/attackby(obj/item/used_item, mob/user, params) if(istype(used_item, /obj/item/food/monkeycube)) @@ -359,11 +357,6 @@ Due to keyboard shortcuts, the second one is not necessarily the remote eye's lo // // Alternate clicks for slime, monkey and open turf if using a xenobio console - -/mob/living/basic/slime/click_alt(mob/user) - SEND_SIGNAL(user, COMSIG_XENO_SLIME_CLICK_ALT, src) - return CLICK_ACTION_SUCCESS - /mob/living/basic/slime/ShiftClick(mob/user) SEND_SIGNAL(user, COMSIG_XENO_SLIME_CLICK_SHIFT, src) ..() @@ -372,34 +365,14 @@ Due to keyboard shortcuts, the second one is not necessarily the remote eye's lo SEND_SIGNAL(user, COMSIG_XENO_TURF_CLICK_SHIFT, src) ..() -/mob/living/basic/slime/CtrlClick(mob/user) - SEND_SIGNAL(user, COMSIG_XENO_SLIME_CLICK_CTRL, src) - ..() - -/mob/living/carbon/human/species/monkey/CtrlClick(mob/user) - SEND_SIGNAL(user, COMSIG_XENO_MONKEY_CLICK_CTRL, src) - ..() - -/turf/open/CtrlClick(mob/user) - SEND_SIGNAL(user, COMSIG_XENO_TURF_CLICK_CTRL, src) - ..() - -/// Scans the target slime -/obj/machinery/computer/camera_advanced/xenobio/proc/XenoSlimeClickCtrl(mob/living/user, mob/living/basic/slime/target_slime) - SIGNAL_HANDLER - - var/mob/camera/ai_eye/remote/xenobio/remote_eye = user.remote_control - var/obj/machinery/computer/camera_advanced/xenobio/xeno_console = remote_eye.origin - - if(!xeno_console.validate_area(user, remote_eye, target_slime.loc)) - return - - slime_scan(target_slime, user) - ///Feeds a stored potion to a slime /obj/machinery/computer/camera_advanced/xenobio/proc/XenoSlimeClickAlt(mob/living/user, mob/living/basic/slime/target_slime) SIGNAL_HANDLER + . = COMSIG_MOB_CANCEL_CLICKON + if(!isslime(target_slime)) + return + var/mob/camera/ai_eye/remote/xenobio/remote_eye = user.remote_control var/obj/machinery/computer/camera_advanced/xenobio/xeno_console = remote_eye.origin @@ -437,32 +410,64 @@ Due to keyboard shortcuts, the second one is not necessarily the remote eye's lo slime_place(target_turf) +/obj/machinery/computer/camera_advanced/xenobio/proc/XenoClickCtrl(mob/living/user, atom/target) + SIGNAL_HANDLER + + if(isopenturf(target)) + XenoTurfClickCtrl(user, target) + else if(ismonkey(target)) + XenoMonkeyClickCtrl(user, target) + else if(isslime(target)) + XenoSlimeClickCtrl(user, target) + + return COMSIG_MOB_CANCEL_CLICKON + ///Places a monkey from the internal storage /obj/machinery/computer/camera_advanced/xenobio/proc/XenoTurfClickCtrl(mob/living/user, turf/open/target_turf) - SIGNAL_HANDLER + if(!isopenturf(target_turf)) + return + var/cleanup = FALSE var/mob/camera/ai_eye/remote/xenobio/remote_eye = user.remote_control var/obj/machinery/computer/camera_advanced/xenobio/xeno_console = remote_eye.origin if(!xeno_console.validate_area(user, remote_eye, target_turf)) return - xeno_console.feed_slime(user, target_turf) + for(var/mob/monkey in target_turf) + if(ismonkey(monkey) && monkey.stat == DEAD) + cleanup = TRUE + xeno_console.monkey_recycle(user, monkey) + + if(!cleanup) + xeno_console.feed_slime(user, target_turf) ///Picks up a dead monkey for recycling /obj/machinery/computer/camera_advanced/xenobio/proc/XenoMonkeyClickCtrl(mob/living/user, mob/living/carbon/human/target_mob) - SIGNAL_HANDLER if(!ismonkey(target_mob)) return var/mob/camera/ai_eye/remote/xenobio/remote_eye = user.remote_control var/obj/machinery/computer/camera_advanced/xenobio/xeno_console = remote_eye.origin - if(!xeno_console.validate_area(user, remote_eye, target_mob.loc)) - return - if(!xeno_console.connected_recycler) to_chat(user, span_warning("There is no connected monkey recycler. Use a multitool to link one.")) return + if(!xeno_console.validate_area(user, remote_eye, target_mob.loc)) + return + xeno_console.monkey_recycle(user, target_mob) + +/// Scans the target slime +/obj/machinery/computer/camera_advanced/xenobio/proc/XenoSlimeClickCtrl(mob/living/user, mob/living/basic/slime/target_slime) + if(!isslime(target_slime)) + return + + var/mob/camera/ai_eye/remote/xenobio/remote_eye = user.remote_control + var/obj/machinery/computer/camera_advanced/xenobio/xeno_console = remote_eye.origin + + if(!xeno_console.validate_area(user, remote_eye, target_slime.loc)) + return + + slime_scan(target_slime, user) diff --git a/code/modules/research/xenobiology/xenobiology.dm b/code/modules/research/xenobiology/xenobiology.dm index 7f87a08b85b3f..9f22520d6ab10 100644 --- a/code/modules/research/xenobiology/xenobiology.dm +++ b/code/modules/research/xenobiology/xenobiology.dm @@ -4,13 +4,13 @@ name = "slime extract" desc = "Goo extracted from a slime. Legends claim these to have \"magical powers\"." icon = 'icons/mob/simple/slimes.dmi' - icon_state = "grey slime extract" + icon_state = "grey-core" force = 0 w_class = WEIGHT_CLASS_TINY throwforce = 0 throw_speed = 3 throw_range = 6 - grind_results = list() + grind_results = list(/datum/reagent/toxin/slimejelly = 20) ///uses before it goes inert var/extract_uses = 1 ///deletion timer, for delayed reactions @@ -44,11 +44,6 @@ . = ..() create_reagents(100, INJECTABLE | DRAWABLE) -/obj/item/slime_extract/on_grind() - . = ..() - if(extract_uses) - grind_results[/datum/reagent/toxin/slimejelly] = 20 - /** * Effect when activated by a Luminescent. * @@ -93,7 +88,7 @@ /obj/item/slime_extract/grey name = "grey slime extract" - icon_state = "grey slime extract" + icon_state = "grey-core" crossbreed_modification = "reproductive" activate_reagents = list(/datum/reagent/blood,/datum/reagent/toxin/plasma,/datum/reagent/water) @@ -118,7 +113,7 @@ /obj/item/slime_extract/gold name = "gold slime extract" - icon_state = "gold slime extract" + icon_state = "gold-core" crossbreed_modification = "symbiont" activate_reagents = list(/datum/reagent/blood,/datum/reagent/toxin/plasma,/datum/reagent/water) @@ -149,7 +144,7 @@ /obj/item/slime_extract/silver name = "silver slime extract" - icon_state = "silver slime extract" + icon_state = "silver-core" crossbreed_modification = "consuming" activate_reagents = list(/datum/reagent/toxin/plasma,/datum/reagent/water) @@ -177,7 +172,7 @@ /obj/item/slime_extract/metal name = "metal slime extract" - icon_state = "metal slime extract" + icon_state = "metal-core" crossbreed_modification = "industrial" activate_reagents = list(/datum/reagent/toxin/plasma,/datum/reagent/water) @@ -201,7 +196,7 @@ /obj/item/slime_extract/purple name = "purple slime extract" - icon_state = "purple slime extract" + icon_state = "purple-core" crossbreed_modification = "regenerative" activate_reagents = list(/datum/reagent/blood,/datum/reagent/toxin/plasma) @@ -220,7 +215,7 @@ /obj/item/slime_extract/darkpurple name = "dark purple slime extract" - icon_state = "dark purple slime extract" + icon_state = "dark-purple-core" crossbreed_modification = "self-sustaining" activate_reagents = list(/datum/reagent/toxin/plasma) @@ -243,7 +238,7 @@ /obj/item/slime_extract/orange name = "orange slime extract" - icon_state = "orange slime extract" + icon_state = "orange-core" crossbreed_modification = "burning" activate_reagents = list(/datum/reagent/blood,/datum/reagent/toxin/plasma,/datum/reagent/water) @@ -263,7 +258,7 @@ /obj/item/slime_extract/yellow name = "yellow slime extract" - icon_state = "yellow slime extract" + icon_state = "yellow-core" crossbreed_modification = "charged" activate_reagents = list(/datum/reagent/blood,/datum/reagent/toxin/plasma,/datum/reagent/water) @@ -286,7 +281,7 @@ /obj/item/slime_extract/red name = "red slime extract" - icon_state = "red slime extract" + icon_state = "red-core" crossbreed_modification = "sanguine" activate_reagents = list(/datum/reagent/blood,/datum/reagent/toxin/plasma,/datum/reagent/water) @@ -306,7 +301,7 @@ /obj/item/slime_extract/blue name = "blue slime extract" - icon_state = "blue slime extract" + icon_state = "blue-core" crossbreed_modification = "stabilized" activate_reagents = list(/datum/reagent/blood,/datum/reagent/toxin/plasma,/datum/reagent/water) @@ -325,7 +320,7 @@ /obj/item/slime_extract/darkblue name = "dark blue slime extract" - icon_state = "dark blue slime extract" + icon_state = "dark-blue-core" crossbreed_modification = "chilling" activate_reagents = list(/datum/reagent/toxin/plasma,/datum/reagent/water) @@ -348,7 +343,7 @@ /obj/item/slime_extract/pink name = "pink slime extract" - icon_state = "pink slime extract" + icon_state = "pink-core" crossbreed_modification = "gentle" activate_reagents = list(/datum/reagent/blood,/datum/reagent/toxin/plasma) @@ -376,7 +371,7 @@ /obj/item/slime_extract/green name = "green slime extract" - icon_state = "green slime extract" + icon_state = "green-core" crossbreed_modification = "mutative" activate_reagents = list(/datum/reagent/blood,/datum/reagent/toxin/plasma,/datum/reagent/uranium/radium) @@ -400,7 +395,7 @@ /obj/item/slime_extract/lightpink name = "light pink slime extract" - icon_state = "light pink slime extract" + icon_state = "light-pink-core" crossbreed_modification = "loyal" activate_reagents = list(/datum/reagent/toxin/plasma) @@ -424,7 +419,7 @@ /obj/item/slime_extract/black name = "black slime extract" - icon_state = "black slime extract" + icon_state = "black-core" crossbreed_modification = "transformative" activate_reagents = list(/datum/reagent/toxin/plasma) @@ -445,7 +440,7 @@ /obj/item/slime_extract/oil name = "oil slime extract" - icon_state = "oil slime extract" + icon_state = "oil-core" crossbreed_modification = "detonating" activate_reagents = list(/datum/reagent/blood,/datum/reagent/toxin/plasma) @@ -469,7 +464,7 @@ /obj/item/slime_extract/adamantine name = "adamantine slime extract" - icon_state = "adamantine slime extract" + icon_state = "adamantine-core" crossbreed_modification = "crystalline" activate_reagents = list(/datum/reagent/toxin/plasma) @@ -499,7 +494,7 @@ /obj/item/slime_extract/bluespace name = "bluespace slime extract" - icon_state = "bluespace slime extract" + icon_state = "bluespace-core" crossbreed_modification = "warping" activate_reagents = list(/datum/reagent/blood,/datum/reagent/toxin/plasma) var/teleport_ready = FALSE @@ -535,7 +530,7 @@ /obj/item/slime_extract/pyrite name = "pyrite slime extract" - icon_state = "pyrite slime extract" + icon_state = "pyrite-core" crossbreed_modification = "prismatic" activate_reagents = list(/datum/reagent/blood,/datum/reagent/toxin/plasma) @@ -562,7 +557,7 @@ /obj/item/slime_extract/cerulean name = "cerulean slime extract" - icon_state = "cerulean slime extract" + icon_state = "cerulean-core" crossbreed_modification = "recurring" activate_reagents = list(/datum/reagent/blood,/datum/reagent/toxin/plasma) @@ -582,7 +577,7 @@ /obj/item/slime_extract/sepia name = "sepia slime extract" - icon_state = "sepia slime extract" + icon_state = "sepia-core" crossbreed_modification = "lengthened" activate_reagents = list(/datum/reagent/blood,/datum/reagent/toxin/plasma,/datum/reagent/water) @@ -604,7 +599,7 @@ /obj/item/slime_extract/rainbow name = "rainbow slime extract" - icon_state = "rainbow slime extract" + icon_state = "rainbow-core" crossbreed_modification = "hyperchromatic" activate_reagents = list(/datum/reagent/blood,/datum/reagent/toxin/plasma,"lesser plasma",/datum/reagent/toxin/slimejelly,"holy water and uranium") //Curse this snowflake reagent list. @@ -644,13 +639,12 @@ desc = "A hard yet gelatinous capsule excreted by a slime, containing mysterious substances." w_class = WEIGHT_CLASS_TINY -/obj/item/slimepotion/afterattack(obj/item/reagent_containers/target, mob/user , proximity) - . = ..() - if(!proximity) - return - if (istype(target)) - to_chat(user, span_warning("You cannot transfer [src] to [target]! It appears the potion must be given directly to a slime to absorb.") ) - return +/obj/item/slimepotion/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + if(is_reagent_container(interacting_with)) + to_chat(user, span_warning("You cannot transfer [src] to [interacting_with]! \ + It appears the potion must be given directly to a slime to absorb.") ) + return ITEM_INTERACT_BLOCKING + return NONE /obj/item/slimepotion/slime/docility name = "docility potion" @@ -778,33 +772,36 @@ var/prompted = 0 var/animal_type = SENTIENCE_ORGANIC -/obj/item/slimepotion/transference/afterattack(mob/living/switchy_mob, mob/living/user, proximity) - if(!proximity) - return +/obj/item/slimepotion/transference/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + . = ..() + if(. & ITEM_INTERACT_ANY_BLOCKER) + return . + var/mob/living/switchy_mob = interacting_with if(prompted || !isliving(switchy_mob)) - return + return ITEM_INTERACT_BLOCKING if(switchy_mob.ckey) //much like sentience, these will not work on something that is already player controlled balloon_alert(user, "already sentient!") - return ..() + return ITEM_INTERACT_BLOCKING if(switchy_mob.stat) balloon_alert(user, "it's dead!") - return ..() + return ITEM_INTERACT_BLOCKING if(!switchy_mob.compare_sentience_type(animal_type)) balloon_alert(user, "invalid creature!") - return ..() + return ITEM_INTERACT_BLOCKING var/job_banned = is_banned_from(user.ckey, ROLE_MIND_TRANSFER) if(QDELETED(src) || QDELETED(switchy_mob) || QDELETED(user)) - return + return ITEM_INTERACT_BLOCKING if(job_banned) balloon_alert(user, "you're banned!") - return + return ITEM_INTERACT_BLOCKING + user.do_attack_animation(interacting_with) prompted = 1 if(tgui_alert(usr,"This will permanently transfer your consciousness to [switchy_mob]. Are you sure you want to do this?",,list("Yes","No")) == "No") prompted = 0 - return + return ITEM_INTERACT_BLOCKING to_chat(user, span_notice("You drink the potion then place your hands on [switchy_mob]...")) @@ -820,6 +817,7 @@ if(isanimal(switchy_mob)) var/mob/living/simple_animal/switchy_animal= switchy_mob switchy_animal.sentience_act() + return ITEM_INTERACT_SUCCESS /obj/item/slimepotion/slime/steroid name = "slime steroid" @@ -903,29 +901,29 @@ icon = 'icons/obj/medical/chemical.dmi' icon_state = "potyellow" -/obj/item/slimepotion/speed/afterattack(obj/C, mob/user, proximity) +/obj/item/slimepotion/speed/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) . = ..() - if(!proximity) - return - if(!istype(C)) + if(. & ITEM_INTERACT_ANY_BLOCKER) + return . + if(!isobj(interacting_with)) to_chat(user, span_warning("The potion can only be used on objects!")) - return - . |= AFTERATTACK_PROCESSED_ITEM - if(SEND_SIGNAL(C, COMSIG_SPEED_POTION_APPLIED, src, user) & SPEED_POTION_STOP) - return - if(isitem(C)) - var/obj/item/I = C - if(I.slowdown <= 0 || (I.item_flags & IMMUTABLE_SLOW)) - to_chat(user, span_warning("The [C] can't be made any faster!")) - return ..() - I.slowdown = 0 - - to_chat(user, span_notice("You slather the red gunk over the [C], making it faster.")) - C.remove_atom_colour(WASHABLE_COLOUR_PRIORITY) - C.add_atom_colour(COLOR_RED, FIXED_COLOUR_PRIORITY) + return ITEM_INTERACT_BLOCKING + if(SEND_SIGNAL(interacting_with, COMSIG_SPEED_POTION_APPLIED, src, user) & SPEED_POTION_STOP) + return ITEM_INTERACT_SUCCESS + if(isitem(interacting_with)) + var/obj/item/apply_to = interacting_with + if(apply_to.slowdown <= 0 || (apply_to.item_flags & IMMUTABLE_SLOW)) + to_chat(user, span_warning("The [apply_to] can't be made any faster!")) + return ITEM_INTERACT_BLOCKING + apply_to.slowdown = 0 + + to_chat(user, span_notice("You slather the red gunk over the [interacting_with], making it faster.")) + interacting_with.remove_atom_colour(WASHABLE_COLOUR_PRIORITY) + interacting_with.add_atom_colour(COLOR_RED, FIXED_COLOUR_PRIORITY) qdel(src) + return ITEM_INTERACT_SUCCESS -/obj/item/slimepotion/speed/attackby_storage_insert(datum/storage, atom/storage_holder, mob/user) +/obj/item/slimepotion/speed/storage_insert_on_interaction(datum/storage, atom/storage_holder, mob/user) if(!isitem(storage_holder)) return TRUE if(istype(storage_holder, /obj/item/mod/control)) @@ -942,20 +940,20 @@ resistance_flags = FIRE_PROOF var/uses = 3 -/obj/item/slimepotion/fireproof/afterattack(obj/item/clothing/clothing, mob/user, proximity) +/obj/item/slimepotion/fireproof/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) . = ..() - if(!proximity) - return - if(!uses) + if(. & ITEM_INTERACT_ANY_BLOCKER) + return . + if(uses <= 0) qdel(src) - return - . |= AFTERATTACK_PROCESSED_ITEM + return ITEM_INTERACT_BLOCKING + var/obj/item/clothing/clothing = interacting_with if(!istype(clothing)) to_chat(user, span_warning("The potion can only be used on clothing!")) - return + return ITEM_INTERACT_BLOCKING if(clothing.max_heat_protection_temperature >= FIRE_IMMUNITY_MAX_TEMP_PROTECT) to_chat(user, span_warning("The [clothing] is already fireproof!")) - return + return ITEM_INTERACT_BLOCKING to_chat(user, span_notice("You slather the blue gunk over the [clothing], fireproofing it.")) clothing.name = "fireproofed [clothing.name]" clothing.remove_atom_colour(WASHABLE_COLOUR_PRIORITY) @@ -964,8 +962,9 @@ clothing.heat_protection = clothing.body_parts_covered clothing.resistance_flags |= FIRE_PROOF uses -- - if(!uses) + if(uses <= 0) qdel(src) + return ITEM_INTERACT_BLOCKING /obj/item/slimepotion/genderchange name = "gender change potion" @@ -1080,4 +1079,3 @@ max_amount = 60 turf_type = /turf/open/floor/sepia merge_type = /obj/item/stack/tile/sepia - diff --git a/code/modules/shuttle/arrivals.dm b/code/modules/shuttle/arrivals.dm index bd50a6b68958e..70e06bbb0975d 100644 --- a/code/modules/shuttle/arrivals.dm +++ b/code/modules/shuttle/arrivals.dm @@ -112,14 +112,9 @@ return FALSE /obj/docking_port/mobile/arrivals/proc/PersonCheck() - for(var/V in GLOB.player_list) - var/mob/M = V - if((get_area(M) in areas) && M.stat != DEAD) - if(!iscameramob(M)) - return TRUE - var/mob/camera/C = M - if(C.move_on_shuttle) - return TRUE + for(var/mob/player as anything in GLOB.player_list) + if((get_area(player) in areas) && (player.stat != DEAD) && !HAS_TRAIT(player, TRAIT_BLOCK_SHUTTLE_MOVEMENT)) + return TRUE return FALSE /obj/docking_port/mobile/arrivals/proc/NukeDiskCheck() diff --git a/code/modules/shuttle/emergency.dm b/code/modules/shuttle/emergency.dm index 62e13ecb7f9e0..6740424cf801a 100644 --- a/code/modules/shuttle/emergency.dm +++ b/code/modules/shuttle/emergency.dm @@ -293,13 +293,12 @@ obj_flags |= EMAGGED SSshuttle.emergency.movement_force = list("KNOCKDOWN" = 60, "THROW" = 20)//YOUR PUNY SEATBELTS can SAVE YOU NOW, MORTAL - var/datum/species/S = new for(var/i in 1 to 10) // the shuttle system doesn't know who these people are, but they // must be important, surely var/obj/item/card/id/ID = new(src) var/datum/job/J = pick(SSjob.joinable_occupations) - ID.registered_name = S.random_name(pick(MALE, FEMALE)) + ID.registered_name = generate_random_name_species_based(species_type = /datum/species/human) ID.assignment = J.title authorized += ID @@ -798,24 +797,14 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/item/storage/pod, 32) new /obj/item/bodybag/environmental(src) new /obj/item/bodybag/environmental(src) -/obj/item/storage/pod/attackby(obj/item/W, mob/user, params) - if (can_interact(user)) - return ..() - -/obj/item/storage/pod/attackby_secondary(obj/item/weapon, mob/user, params) - if (!can_interact(user)) - return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN - return ..() +/obj/item/storage/pod/storage_insert_on_interacted_with(datum/storage, obj/item/inserted, mob/living/user) + return can_interact(user) /obj/item/storage/pod/attack_hand(mob/user, list/modifiers) if (can_interact(user)) atom_storage?.show_contents(user) return TRUE -/obj/item/storage/pod/MouseDrop(over_object, src_location, over_location) - if(can_interact(usr)) - return ..() - /obj/item/storage/pod/attack_hand_secondary(mob/user, list/modifiers) if(!can_interact(user)) return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN diff --git a/code/modules/shuttle/navigation_computer.dm b/code/modules/shuttle/navigation_computer.dm index f8b460a783d0d..d3184cc96c62f 100644 --- a/code/modules/shuttle/navigation_computer.dm +++ b/code/modules/shuttle/navigation_computer.dm @@ -20,7 +20,9 @@ // Traits forbided for custom docking var/list/locked_traits = list(ZTRAIT_RESERVED, ZTRAIT_CENTCOM, ZTRAIT_AWAY) var/view_range = 0 + ///x offset for where the camera eye will spawn. Starts from shuttle's docking port var/x_offset = 0 + ///y offset for where the camera eye will spawn. Starts from the shuttle's docking port var/y_offset = 0 var/list/whitelist_turfs = list(/turf/open/space, /turf/open/floor/plating, /turf/open/lava, /turf/open/openspace) var/see_hidden = FALSE diff --git a/code/modules/shuttle/on_move.dm b/code/modules/shuttle/on_move.dm index 56f99e270a49d..4c73b7bd2634b 100644 --- a/code/modules/shuttle/on_move.dm +++ b/code/modules/shuttle/on_move.dm @@ -264,12 +264,12 @@ All ShuttleMove procs go here /************************************Mob move procs************************************/ /mob/onShuttleMove(turf/newT, turf/oldT, list/movement_force, move_dir, obj/docking_port/stationary/old_dock, obj/docking_port/mobile/moving_dock) - if(!move_on_shuttle) + if(HAS_TRAIT(src, TRAIT_BLOCK_SHUTTLE_MOVEMENT)) return . = ..() /mob/afterShuttleMove(turf/oldT, list/movement_force, shuttle_dir, shuttle_preferred_direction, move_dir, rotation) - if(!move_on_shuttle) + if(HAS_TRAIT(src, TRAIT_BLOCK_SHUTTLE_MOVEMENT)) return . = ..() if(client && movement_force) diff --git a/code/modules/shuttle/shuttle.dm b/code/modules/shuttle/shuttle.dm index fbe3e52e5030f..68a0a41a2e092 100644 --- a/code/modules/shuttle/shuttle.dm +++ b/code/modules/shuttle/shuttle.dm @@ -379,6 +379,7 @@ "whiteship_tram", "whiteship_personalshuttle", "whiteship_obelisk", + "whiteship_birdshot", ) /// Helper proc that tests to ensure all whiteship templates can spawn at their docking port, and logs their sizes diff --git a/code/modules/shuttle/shuttle_rotate.dm b/code/modules/shuttle/shuttle_rotate.dm index 734e2337df518..cb7cad65b6ba1 100644 --- a/code/modules/shuttle/shuttle_rotate.dm +++ b/code/modules/shuttle/shuttle_rotate.dm @@ -12,7 +12,7 @@ If ever any of these procs are useful for non-shuttles, rename it to proc/rotate setDir(angle2dir(rotation+dir2angle(dir))) //resmooth if need be. - if(params & ROTATE_SMOOTH && smoothing_flags & (SMOOTH_CORNERS|SMOOTH_BITMASK)) + if(params & ROTATE_SMOOTH && smoothing_flags & USES_SMOOTHING) QUEUE_SMOOTH(src) //rotate the pixel offsets too. diff --git a/code/modules/spells/spell.dm b/code/modules/spells/spell.dm index dc30f36149bc6..f76ecb104e72b 100644 --- a/code/modules/spells/spell.dm +++ b/code/modules/spells/spell.dm @@ -246,7 +246,11 @@ return target // They're just standing around, proceed as normal if(HAS_TRAIT(cast_loc, TRAIT_CASTABLE_LOC)) - return cast_loc // They're in an atom which allows casting, so redirect the caster to loc + if(HAS_TRAIT(cast_loc, TRAIT_SPELLS_TRANSFER_TO_LOC) && ismob(cast_loc.loc)) + return cast_loc.loc + else + return cast_loc + // They're in an atom which allows casting, so redirect the caster to loc return null diff --git a/code/modules/spells/spell_types/cone/cone_of_cold.dm b/code/modules/spells/spell_types/cone/cone_of_cold.dm index c60c8613e4e23..9327e2c2fad4f 100644 --- a/code/modules/spells/spell_types/cone/cone_of_cold.dm +++ b/code/modules/spells/spell_types/cone/cone_of_cold.dm @@ -44,7 +44,7 @@ frozen_floor.MakeSlippery(turf_freeze_type, unfreeze_turf_duration, permanent = (unfreeze_turf_duration == INFINITY)) /datum/action/cooldown/spell/cone/staggered/cone_of_cold/do_mob_cone_effect(mob/living/target_mob, atom/caster, level) - if(target_mob.can_block_magic(antimagic_flags) || target_mob == caster) + if(target_mob.can_block_magic(antimagic_flags) || target_mob == caster || HAS_TRAIT(target_mob, TRAIT_RESISTCOLD)) return if(ispath(frozen_status_effect_path) && unfreeze_mob_duration > 0 SECONDS) // 0 duration = don't apply the status effect diff --git a/code/modules/spells/spell_types/conjure_item/_conjure_item.dm b/code/modules/spells/spell_types/conjure_item/_conjure_item.dm index 7e39f778391d4..3bbdf25fa8444 100644 --- a/code/modules/spells/spell_types/conjure_item/_conjure_item.dm +++ b/code/modules/spells/spell_types/conjure_item/_conjure_item.dm @@ -3,7 +3,7 @@ invocation_type = INVOCATION_NONE /// Typepath of whatever item we summon - var/obj/item/item_type + var/obj/item_type /// If TRUE, we delete any previously created items when we cast the spell var/delete_old = TRUE /// List of weakrefs to items summoned @@ -57,7 +57,7 @@ var/mob/mob_caster = cast_on if(istype(mob_caster)) - var/obj/item/existing_item = mob_caster.get_active_held_item() + var/obj/existing_item = mob_caster.get_active_held_item() if(existing_item) mob_caster.dropItemToGround(existing_item) @@ -65,6 +65,10 @@ if(QDELETED(created)) CRASH("[type] tried to create an item, but failed. It's item type is [item_type].") + if(!isitem(created)) + created.forceMove(cast_on.drop_location()) + return + if(istype(mob_caster)) mob_caster.put_in_hands(created, del_on_fail = delete_on_failure) diff --git a/code/modules/spells/spell_types/pointed/_pointed.dm b/code/modules/spells/spell_types/pointed/_pointed.dm index 04c3ed47944b9..edf3dab2179d4 100644 --- a/code/modules/spells/spell_types/pointed/_pointed.dm +++ b/code/modules/spells/spell_types/pointed/_pointed.dm @@ -16,7 +16,7 @@ var/deactive_msg /// The casting range of our spell var/cast_range = 7 - /// Variable dictating if the spell will use turf based aim assist + /// If aim asisst is used. Disable to disable var/aim_assist = TRUE /datum/action/cooldown/spell/pointed/New(Target) @@ -65,17 +65,18 @@ return TRUE /datum/action/cooldown/spell/pointed/InterceptClickOn(mob/living/caller, params, atom/target) - var/atom/aim_assist_target - if(aim_assist && isturf(target)) - // Find any human in the list. We aren't picky, it's aim assist after all - aim_assist_target = locate(/mob/living/carbon/human) in target - if(!aim_assist_target) - // If we didn't find a human, we settle for any living at all - aim_assist_target = locate(/mob/living) in target - + if(aim_assist) + aim_assist_target = aim_assist(caller, target) return ..(caller, params, aim_assist_target || target) +/datum/action/cooldown/spell/pointed/proc/aim_assist(mob/living/caller, atom/target) + if(!isturf(target)) + return + + // Find any human, or if that fails, any living target + return locate(/mob/living/carbon/human) in target || locate(/mob/living) in target + /datum/action/cooldown/spell/pointed/is_valid_target(atom/cast_on) if(cast_on == owner) to_chat(owner, span_warning("You cannot cast [src] on yourself!")) diff --git a/code/modules/spells/spell_types/right_and_wrong.dm b/code/modules/spells/spell_types/right_and_wrong.dm index 27662943af03a..306770c074f43 100644 --- a/code/modules/spells/spell_types/right_and_wrong.dm +++ b/code/modules/spells/spell_types/right_and_wrong.dm @@ -230,9 +230,12 @@ GLOBAL_LIST_INIT(summoned_magic_objectives, list( SSevents.reschedule() if(user) - to_chat(user, span_warning("You have intensified summon events, causing them to occur more often!")) - message_admins("[ADMIN_LOOKUPFLW(user)] intensified summon events!") - user.log_message("intensified events!", LOG_GAME) + message_admins("[ADMIN_LOOKUPFLW(user)] [ismob(user) ? "":"admin triggered "]intensified summon events!") + if(ismob(user)) + to_chat(user, span_warning("You have intensified summon events, causing them to occur more often!")) + user.log_message("intensified events!", LOG_GAME) + else //admin triggered + log_admin("[key_name(user)] intensified summon events.") else log_game("Summon Events was intensified!") @@ -245,9 +248,12 @@ GLOBAL_LIST_INIT(summoned_magic_objectives, list( SSevents.toggleWizardmode() SSevents.reschedule() if(user) - to_chat(user, span_warning("You have cast summon events!")) - message_admins("[ADMIN_LOOKUPFLW(user)] summoned events!") - user.log_message("summoned events!", LOG_GAME) + message_admins("[ADMIN_LOOKUPFLW(user)] [ismob(user) ? "summoned":"admin triggered summon"] events!") + if(ismob(user)) + to_chat(user, span_warning("You have cast summon events!")) + user.log_message("summoned events!", LOG_GAME) + else //admin triggered + log_admin("[key_name(user)] summoned events.") else message_admins("Summon Events was triggered!") log_game("Summon Events was triggered!") diff --git a/code/modules/spells/spell_types/self/mime_vow.dm b/code/modules/spells/spell_types/self/mime_vow.dm index bd666786b9624..d4e34880b534d 100644 --- a/code/modules/spells/spell_types/self/mime_vow.dm +++ b/code/modules/spells/spell_types/self/mime_vow.dm @@ -8,7 +8,8 @@ panel = "Mime" school = SCHOOL_MIME - spell_requirements = NONE + //MMI mimes should be able to break their vow + spell_requirements = SPELL_CASTABLE_AS_BRAIN spell_max_level = 1 diff --git a/code/modules/spells/spell_types/self/mutate.dm b/code/modules/spells/spell_types/self/mutate.dm index 477c7e6723c3a..7ebd9ab4d1bfe 100644 --- a/code/modules/spells/spell_types/self/mutate.dm +++ b/code/modules/spells/spell_types/self/mutate.dm @@ -57,7 +57,7 @@ cast_on.add_atom_colour(COLOR_VIBRANT_LIME, TEMPORARY_COLOUR_PRIORITY) /datum/action/cooldown/spell/apply_mutations/mutate/remove_mutations(mob/living/carbon/human/cast_on) - if(QDELETED(cast_on) || !is_valid_target(cast_on)) + if(QDELETED(cast_on) || !is_valid_target(cast_on)) // Not 100% sure if this check is still needed, leaving it just in case return - + ..() cast_on.remove_atom_colour(TEMPORARY_COLOUR_PRIORITY) diff --git a/code/modules/spells/spell_types/self/sanguine_strike.dm b/code/modules/spells/spell_types/self/sanguine_strike.dm index afb5860c6a61b..4c819a69690ab 100644 --- a/code/modules/spells/spell_types/self/sanguine_strike.dm +++ b/code/modules/spells/spell_types/self/sanguine_strike.dm @@ -58,7 +58,7 @@ RegisterSignal(enchanted, COMSIG_ITEM_DROPPED, PROC_REF(on_dropped)) /// signal called from attacking with the enchanted item -/datum/action/cooldown/spell/sanguine_strike/proc/on_enchanted_afterattack(obj/item/enchanted, atom/target, mob/user, proximity_flag, click_parameters) +/datum/action/cooldown/spell/sanguine_strike/proc/on_enchanted_afterattack(obj/item/enchanted, atom/target, mob/user, click_parameters) SIGNAL_HANDLER end_enchantment(enchanted) if(!isliving(target)) @@ -66,7 +66,7 @@ var/mob/living/living_target = target if(living_target.blood_volume < BLOOD_VOLUME_SURVIVE) return - playsound(target, "sound/effects/wounds/crackandbleed.ogg", 100) + playsound(target, 'sound/effects/wounds/crackandbleed.ogg', 100) playsound(target, 'sound/magic/charge.ogg', 100) var/attack_direction = get_dir(user, living_target) if(iscarbon(living_target)) diff --git a/code/modules/spells/spell_types/touch/_touch.dm b/code/modules/spells/spell_types/touch/_touch.dm index 2893c9cf83663..d1adc9619be27 100644 --- a/code/modules/spells/spell_types/touch/_touch.dm +++ b/code/modules/spells/spell_types/touch/_touch.dm @@ -127,8 +127,8 @@ /datum/action/cooldown/spell/touch/proc/register_hand_signals() SHOULD_CALL_PARENT(TRUE) - RegisterSignal(attached_hand, COMSIG_ITEM_AFTERATTACK, PROC_REF(on_hand_hit)) - RegisterSignal(attached_hand, COMSIG_ITEM_AFTERATTACK_SECONDARY, PROC_REF(on_secondary_hand_hit)) + RegisterSignal(attached_hand, COMSIG_ITEM_INTERACTING_WITH_ATOM, PROC_REF(on_hand_hit)) + RegisterSignal(attached_hand, COMSIG_ITEM_INTERACTING_WITH_ATOM_SECONDARY, PROC_REF(on_hand_hit_secondary)) RegisterSignal(attached_hand, COMSIG_ITEM_DROPPED, PROC_REF(on_hand_dropped)) RegisterSignal(attached_hand, COMSIG_QDELETING, PROC_REF(on_hand_deleted)) @@ -141,8 +141,8 @@ SHOULD_CALL_PARENT(TRUE) UnregisterSignal(attached_hand, list( - COMSIG_ITEM_AFTERATTACK, - COMSIG_ITEM_AFTERATTACK_SECONDARY, + COMSIG_ITEM_INTERACTING_WITH_ATOM, + COMSIG_ITEM_INTERACTING_WITH_ATOM_SECONDARY, COMSIG_ITEM_DROPPED, COMSIG_QDELETING, COMSIG_ITEM_OFFER_TAKEN, @@ -161,46 +161,46 @@ return ..() /** - * Signal proc for [COMSIG_ITEM_AFTERATTACK] from our attached hand. + * Signal proc for [COMSIG_ITEM_INTERACTING_WITH_ATOM] from our attached hand. * * When our hand hits an atom, we can cast do_hand_hit() on them. */ -/datum/action/cooldown/spell/touch/proc/on_hand_hit(datum/source, atom/victim, mob/caster, proximity_flag, click_parameters) +/datum/action/cooldown/spell/touch/proc/on_hand_hit(datum/source, mob/living/caster, atom/target, click_parameters) SIGNAL_HANDLER SHOULD_NOT_OVERRIDE(TRUE) // DEFINITELY don't put effects here, put them in cast_on_hand_hit - if(!proximity_flag) - return - if(!can_hit_with_hand(victim, caster)) + if(!can_hit_with_hand(target, caster)) return - INVOKE_ASYNC(src, PROC_REF(do_hand_hit), source, victim, caster) + INVOKE_ASYNC(src, PROC_REF(do_hand_hit), source, target, caster) + return ITEM_INTERACT_SUCCESS /** - * Signal proc for [COMSIG_ITEM_AFTERATTACK_SECONDARY] from our attached hand. + * Signal proc for [COMSIG_ITEM_INTERACTING_WITH_ATOM_SECONDARY] from our attached hand. * - * Same as on_hand_hit, but for if right-click was used on hit. + * When our hand hits an atom, we can cast do_hand_hit() on them. */ -/datum/action/cooldown/spell/touch/proc/on_secondary_hand_hit(datum/source, atom/victim, mob/caster, proximity_flag, click_parameters) +/datum/action/cooldown/spell/touch/proc/on_hand_hit_secondary(datum/source, mob/living/caster, atom/target, click_parameters) SIGNAL_HANDLER - SHOULD_NOT_OVERRIDE(TRUE) // DEFINITELY don't put effects here, put them in cast_on_secondary_hand_hit + SHOULD_NOT_OVERRIDE(TRUE) - if(!proximity_flag) - return - if(!can_hit_with_hand(victim, caster)) + if(!can_hit_with_hand(target, caster)) return - INVOKE_ASYNC(src, PROC_REF(do_secondary_hand_hit), source, victim, caster) - return COMPONENT_SECONDARY_CANCEL_ATTACK_CHAIN + INVOKE_ASYNC(src, PROC_REF(do_secondary_hand_hit), source, target, caster) + return ITEM_INTERACT_SUCCESS /// Checks if the passed victim can be cast on by the caster. -/datum/action/cooldown/spell/touch/proc/can_hit_with_hand(atom/victim, mob/caster) +/datum/action/cooldown/spell/touch/proc/can_hit_with_hand(atom/victim, mob/living/caster) if(!can_cast_on_self && victim == caster) return FALSE if(!is_valid_target(victim)) return FALSE if(!can_cast_spell(feedback = TRUE)) return FALSE + if(!(caster.mobility_flags & MOBILITY_USE)) + caster.balloon_alert(caster, "can't reach out!") + return FALSE return TRUE @@ -224,6 +224,9 @@ log_combat(caster, victim, "cast the touch spell [name] on", hand) spell_feedback(caster) + caster.do_attack_animation(victim) + caster.changeNext_move(CLICK_CD_MELEE) + victim.add_fingerprint(caster) remove_hand(caster) /** @@ -241,6 +244,9 @@ if(SECONDARY_ATTACK_CONTINUE_CHAIN) log_combat(caster, victim, "cast the touch spell [name] on", hand, "(secondary / alt cast)") spell_feedback(caster) + caster.do_attack_animation(victim) + caster.changeNext_move(CLICK_CD_MELEE) + victim.add_fingerprint(caster) remove_hand(caster) // Call normal will call the normal cast proc @@ -347,14 +353,6 @@ if(spell) spell_which_made_us = WEAKREF(spell) -/obj/item/melee/touch_attack/attack(mob/target, mob/living/carbon/user) - if(!iscarbon(user)) //Look ma, no hands - return TRUE - if(!(user.mobility_flags & MOBILITY_USE)) - user.balloon_alert(user, "can't reach out!") - return TRUE - return ..() - /** * When the hand component of a touch spell is qdel'd, (the hand is dropped or otherwise lost), * the cooldown on the spell that made it is automatically refunded. diff --git a/code/modules/station_goals/bsa.dm b/code/modules/station_goals/bsa.dm index c83f710d1df1d..e2feaa2bc26ed 100644 --- a/code/modules/station_goals/bsa.dm +++ b/code/modules/station_goals/bsa.dm @@ -50,13 +50,10 @@ GLOBAL_VAR_INIT(bsa_unlock, FALSE) . = ..() AddComponent(/datum/component/simple_rotation) -/obj/machinery/bsa/back/multitool_act(mob/living/user, obj/item/I) - if(!multitool_check_buffer(user, I)) //make sure it has a data buffer - return - var/obj/item/multitool/M = I +/obj/machinery/bsa/back/multitool_act(mob/living/user, obj/item/multitool/M) M.set_buffer(src) balloon_alert(user, "saved to multitool buffer") - return TRUE + return ITEM_INTERACT_SUCCESS /obj/machinery/bsa/front name = "Bluespace Artillery Bore" @@ -67,13 +64,10 @@ GLOBAL_VAR_INIT(bsa_unlock, FALSE) . = ..() AddComponent(/datum/component/simple_rotation) -/obj/machinery/bsa/front/multitool_act(mob/living/user, obj/item/I) - if(!multitool_check_buffer(user, I)) //make sure it has a data buffer - return - var/obj/item/multitool/M = I +/obj/machinery/bsa/front/multitool_act(mob/living/user, obj/item/multitool/M) M.set_buffer(src) balloon_alert(user, "saved to multitool buffer") - return TRUE + return ITEM_INTERACT_SUCCESS /obj/machinery/bsa/middle name = "Bluespace Artillery Fusor" @@ -86,22 +80,19 @@ GLOBAL_VAR_INIT(bsa_unlock, FALSE) . = ..() AddComponent(/datum/component/simple_rotation) -/obj/machinery/bsa/middle/multitool_act(mob/living/user, obj/item/I) - if(!multitool_check_buffer(user, I)) - return - var/obj/item/multitool/M = I - if(M.buffer) - if(istype(M.buffer, /obj/machinery/bsa/back)) - back_ref = WEAKREF(M.buffer) - to_chat(user, span_notice("You link [src] with [M.buffer].")) - M.set_buffer(null) - else if(istype(M.buffer, /obj/machinery/bsa/front)) - front_ref = WEAKREF(M.buffer) - to_chat(user, span_notice("You link [src] with [M.buffer].")) - M.set_buffer(null) - else - to_chat(user, span_warning("[I]'s data buffer is empty!")) - return TRUE +/obj/machinery/bsa/middle/multitool_act(mob/living/user, obj/item/multitool/tool) + . = NONE + + if(istype(tool.buffer, /obj/machinery/bsa/back)) + back_ref = WEAKREF(tool.buffer) + to_chat(user, span_notice("You link [src] with [tool.buffer].")) + tool.set_buffer(null) + return ITEM_INTERACT_SUCCESS + else if(istype(tool.buffer, /obj/machinery/bsa/front)) + front_ref = WEAKREF(tool.buffer) + to_chat(user, span_notice("You link [src] with [tool.buffer].")) + tool.set_buffer(null) + return ITEM_INTERACT_SUCCESS /obj/machinery/bsa/middle/proc/check_completion() var/obj/machinery/bsa/front/front = front_ref?.resolve() diff --git a/code/modules/station_goals/dna_vault.dm b/code/modules/station_goals/dna_vault.dm index 354f08667ebd3..6c2661bbe2237 100644 --- a/code/modules/station_goals/dna_vault.dm +++ b/code/modules/station_goals/dna_vault.dm @@ -19,10 +19,10 @@ /datum/station_goal/dna_vault/New() ..() - animal_count = rand(15,20) //might be too few given ~15 roundstart stationside ones + animal_count = rand(10,15) //might be too few given ~15 roundstart stationside ones human_count = rand(round(0.75 * SSticker.totalPlayersReady) , SSticker.totalPlayersReady) // 75%+ roundstart population. var/non_standard_plants = non_standard_plants_count() - plant_count = rand(round(0.5 * non_standard_plants),round(0.7 * non_standard_plants)) + plant_count = rand(round(0.2 * non_standard_plants),round(0.4 * non_standard_plants)) /datum/station_goal/dna_vault/proc/non_standard_plants_count() . = 0 @@ -115,32 +115,6 @@ qdel(filler) return ..() -/obj/machinery/dna_vault/attackby(obj/item/our_item, mob/user, params) - if(istype(our_item, /obj/item/dna_probe)) - var/obj/item/dna_probe/our_probe = our_item - var/uploaded = 0 - var/plant_dna_length = length(our_probe.stored_dna_plants) - var/human_dna_length = length(our_probe.stored_dna_human) - var/animal_dna_length = length(our_probe.stored_dna_animal) - if(plant_dna_length) - uploaded += plant_dna_length - plant_dna += our_probe.stored_dna_plants - our_probe.stored_dna_plants.Cut() - if(human_dna_length) - uploaded += human_dna_length - human_dna += our_probe.stored_dna_human - our_probe.stored_dna_human.Cut() - if(animal_dna_length) - uploaded += animal_dna_length - animal_dna += our_probe.stored_dna_animal - our_probe.stored_dna_animal.Cut() - check_goal() - playsound(src, 'sound/misc/compiler-stage1.ogg', 50) - to_chat(user, span_notice("[uploaded] new datapoints uploaded.")) - return - - return ..() - /obj/machinery/dna_vault/ui_interact(mob/user, datum/tgui/ui) ui = SStgui.try_update_ui(user, src, ui) if(!ui) diff --git a/code/modules/surgery/advanced/lobotomy.dm b/code/modules/surgery/advanced/lobotomy.dm index 6c322c2d0705e..b36bcee140a5d 100644 --- a/code/modules/surgery/advanced/lobotomy.dm +++ b/code/modules/surgery/advanced/lobotomy.dm @@ -34,6 +34,7 @@ preop_sound = 'sound/surgery/scalpel1.ogg' success_sound = 'sound/surgery/scalpel2.ogg' failure_sound = 'sound/surgery/organ2.ogg' + surgery_effects_mood = TRUE /datum/surgery_step/lobotomize/tool_check(mob/user, obj/item/tool) if(implement_type == /obj/item && !tool.get_sharpness()) diff --git a/code/modules/surgery/amputation.dm b/code/modules/surgery/amputation.dm index 8c8924cdcab50..cd2910f4d1127 100644 --- a/code/modules/surgery/amputation.dm +++ b/code/modules/surgery/amputation.dm @@ -38,14 +38,15 @@ time = 64 preop_sound = 'sound/surgery/scalpel1.ogg' success_sound = 'sound/surgery/organ2.ogg' + surgery_effects_mood = TRUE /datum/surgery_step/sever_limb/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) display_results( user, target, - span_notice("You begin to sever [target]'s [parse_zone(target_zone)]..."), - span_notice("[user] begins to sever [target]'s [parse_zone(target_zone)]!"), - span_notice("[user] begins to sever [target]'s [parse_zone(target_zone)]!"), + span_notice("You begin to sever [target]'s [target.parse_zone_with_bodypart(target_zone)]..."), + span_notice("[user] begins to sever [target]'s [target.parse_zone_with_bodypart(target_zone)]!"), + span_notice("[user] begins to sever [target]'s [target.parse_zone_with_bodypart(target_zone)]!"), ) display_pain(target, "You feel a gruesome pain in your [parse_zone(target_zone)]'s joint!") @@ -54,11 +55,11 @@ display_results( user, target, - span_notice("You sever [target]'s [parse_zone(target_zone)]."), - span_notice("[user] severs [target]'s [parse_zone(target_zone)]!"), - span_notice("[user] severs [target]'s [parse_zone(target_zone)]!"), + span_notice("You sever [target]'s [target.parse_zone_with_bodypart(target_zone)]."), + span_notice("[user] severs [target]'s [target.parse_zone_with_bodypart(target_zone)]!"), + span_notice("[user] severs [target]'s [target.parse_zone_with_bodypart(target_zone)]!"), ) - display_pain(target, "You can no longer feel your severed [parse_zone(target_zone)]!") + display_pain(target, "You can no longer feel your severed [target.parse_zone_with_bodypart(target_zone)]!") if(HAS_MIND_TRAIT(user, TRAIT_MORBID) && ishuman(user)) var/mob/living/carbon/human/morbid_weirdo = user diff --git a/code/modules/surgery/blood_filter.dm b/code/modules/surgery/blood_filter.dm index 0193ee9c01a8d..401a412bc1c9e 100644 --- a/code/modules/surgery/blood_filter.dm +++ b/code/modules/surgery/blood_filter.dm @@ -15,6 +15,13 @@ return ..() /datum/surgery_step/filter_blood/initiate(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery, try_to_fail = FALSE) + display_results( + user, + target, + span_notice("You begin filtering [target]'s blood..."), + span_notice("[user] uses [tool] to filter [target]'s blood."), + span_notice("[user] uses [tool] on [target]'s chest."), + ) if(!..()) return while(has_filterable_chems(target, tool)) @@ -33,6 +40,8 @@ */ /datum/surgery_step/filter_blood/proc/has_filterable_chems(mob/living/carbon/target, obj/item/blood_filter/bloodfilter) if(!length(target.reagents?.reagent_list)) + bloodfilter.audible_message(span_notice("[bloodfilter] pings as it reports no chemicals detected in [target]'s blood.")) + playsound(get_turf(target), 'sound/machines/ping.ogg', 75, TRUE, falloff_exponent = 12, falloff_distance = 1) return FALSE if(!length(bloodfilter.whitelist)) @@ -49,16 +58,9 @@ implements = list(/obj/item/blood_filter = 95) repeatable = TRUE time = 2.5 SECONDS - success_sound = 'sound/machines/ping.ogg' + success_sound = 'sound/machines/card_slide.ogg' /datum/surgery_step/filter_blood/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) - display_results( - user, - target, - span_notice("You begin filtering [target]'s blood..."), - span_notice("[user] uses [tool] to filter [target]'s blood."), - span_notice("[user] uses [tool] on [target]'s chest."), - ) display_pain(target, "You feel a throbbing pain in your chest!") /datum/surgery_step/filter_blood/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results = FALSE) @@ -66,13 +68,13 @@ if(target.reagents?.total_volume) for(var/datum/reagent/chem as anything in target.reagents.reagent_list) if(!length(bloodfilter.whitelist) || (chem.type in bloodfilter.whitelist)) - target.reagents.remove_reagent(chem.type, min(chem.volume * 0.22, 10)) + target.reagents.remove_reagent(chem.type, min(round(chem.volume * 0.22, 0.2), 10)) display_results( user, target, - span_notice("\The [tool] pings as it finishes filtering [target]'s blood."), - span_notice("\The [tool] pings as it stops pumping [target]'s blood."), - span_notice("\The [tool] pings as it stops pumping."), + span_notice("\The [tool] completes a cycle filtering [target]'s blood."), + span_notice("\The [tool] whirrs as it filters [target]'s blood."), + span_notice("\The [tool] whirrs as it pumps."), ) if(locate(/obj/item/healthanalyzer) in user.held_items) diff --git a/code/modules/surgery/bodyparts/_bodyparts.dm b/code/modules/surgery/bodyparts/_bodyparts.dm index 5ed7cf59c3d52..c03a930395ab9 100644 --- a/code/modules/surgery/bodyparts/_bodyparts.dm +++ b/code/modules/surgery/bodyparts/_bodyparts.dm @@ -165,8 +165,8 @@ /// Type of an attack from this limb does. Arms will do punches, Legs for kicks, and head for bites. (TO ADD: tactical chestbumps) var/attack_type = BRUTE - /// the verb used for an unarmed attack when using this limb, such as arm.unarmed_attack_verb = punch - var/unarmed_attack_verb = "bump" + /// the verbs used for an unarmed attack when using this limb, such as arm.unarmed_attack_verbs = list("punch") + var/list/unarmed_attack_verbs = list("bump") /// if we have a special attack verb for hitting someone who is grappled by us, it goes here. var/grappled_attack_verb /// what visual effect is used when this limb is used to strike someone. @@ -362,7 +362,7 @@ if(ishuman(victim)) var/mob/living/carbon/human/human_victim = victim - if(HAS_TRAIT(victim, TRAIT_LIMBATTACHMENT)) + if(HAS_TRAIT(victim, TRAIT_LIMBATTACHMENT) || HAS_TRAIT(src, TRAIT_EASY_ATTACH)) if(!human_victim.get_bodypart(body_zone)) user.temporarilyRemoveItemFromInventory(src, TRUE) if(!try_attach_limb(victim)) @@ -1310,12 +1310,24 @@ else update_icon_dropped() -// Note: Does NOT return EMP protection value from parent call or pass it on to subtypes +// Note: For effects on subtypes, use the emp_effect() proc instead /obj/item/bodypart/emp_act(severity) var/protection = ..() - if((protection & EMP_PROTECT_WIRES) || !IS_ROBOTIC_LIMB(src)) - return FALSE + // If the limb doesn't protect contents, strike them first + if(!(protection & EMP_PROTECT_CONTENTS)) + for(var/atom/content as anything in contents) + content.emp_act(severity) + + if((protection & (EMP_PROTECT_WIRES | EMP_PROTECT_SELF))) + return protection + emp_effect(severity, protection) + return protection + +/// The actual effect of EMPs on the limb. Allows children to override it however they want +/obj/item/bodypart/proc/emp_effect(severity, protection) + if(!IS_ROBOTIC_LIMB(src)) + return FALSE // with defines at the time of writing, this is 2 brute and 1.5 burn // 2 + 1.5 = 3,5, with 6 limbs thats 21, on a heavy 42 // 42 * 0.8 = 33.6 diff --git a/code/modules/surgery/bodyparts/dismemberment.dm b/code/modules/surgery/bodyparts/dismemberment.dm index e0d74a7169451..1fa6db17e5a54 100644 --- a/code/modules/surgery/bodyparts/dismemberment.dm +++ b/code/modules/surgery/bodyparts/dismemberment.dm @@ -234,7 +234,7 @@ qdel(owner.GetComponent(/datum/component/creamed)) //clean creampie overlay flushed emoji //Handle dental implants - for(var/datum/action/item_action/hands_free/activate_pill/pill_action in owner.actions) + for(var/datum/action/item_action/activate_pill/pill_action in owner.actions) pill_action.Remove(owner) var/obj/pill = pill_action.target if(pill) @@ -342,7 +342,7 @@ //Handle dental implants for(var/obj/item/reagent_containers/pill/pill in src) - for(var/datum/action/item_action/hands_free/activate_pill/pill_action in pill.actions) + for(var/datum/action/item_action/activate_pill/pill_action in pill.actions) pill.forceMove(new_head_owner) pill_action.Grant(new_head_owner) break @@ -354,8 +354,8 @@ sexy_chad.hair_color = hair_color sexy_chad.facial_hairstyle = facial_hairstyle sexy_chad.facial_hair_color = facial_hair_color - sexy_chad.grad_style = gradient_styles?.Copy() - sexy_chad.grad_color = gradient_colors?.Copy() + sexy_chad.grad_style = gradient_styles.Copy() + sexy_chad.grad_color = gradient_colors.Copy() sexy_chad.lip_style = lip_style sexy_chad.lip_color = lip_color diff --git a/code/modules/surgery/bodyparts/ghetto_parts.dm b/code/modules/surgery/bodyparts/ghetto_parts.dm new file mode 100644 index 0000000000000..03326f3754e45 --- /dev/null +++ b/code/modules/surgery/bodyparts/ghetto_parts.dm @@ -0,0 +1,91 @@ +/obj/item/bodypart/arm/left/ghetto + name = "left peg arm" + desc = "A roughly hewn wooden peg replaces where a forearm should be. It's simple and sturdy, clearly made in a hurry with whatever materials were at hand. Despite its crude appearance, it gets the job done." + icon = 'icons/mob/human/species/ghetto.dmi' + icon_static = 'icons/mob/human/species/ghetto.dmi' + limb_id = BODYPART_ID_PEG + icon_state = "peg_l_arm" + bodytype = BODYTYPE_PEG + should_draw_greyscale = FALSE + attack_verb_simple = list("bashed", "slashed") + unarmed_damage_low = 3 + unarmed_damage_high = 9 + unarmed_effectiveness = 5 + brute_modifier = 1.2 + burn_modifier = 1.5 + bodypart_traits = list(TRAIT_CHUNKYFINGERS) + disabling_threshold_percentage = 1 + bodypart_flags = BODYPART_UNHUSKABLE + biological_state = (BIO_JOINTED) + +/obj/item/bodypart/arm/left/ghetto/Initialize(mapload, ...) + . = ..() + ADD_TRAIT(src, TRAIT_EASY_ATTACH, INNATE_TRAIT) + +/obj/item/bodypart/arm/right/ghetto + name = "right peg arm" + desc = "A roughly hewn wooden peg replaces where a forearm should be. It's simple and sturdy, clearly made in a hurry with whatever materials were at hand. Despite its crude appearance, it gets the job done." + icon = 'icons/mob/human/species/ghetto.dmi' + icon_static = 'icons/mob/human/species/ghetto.dmi' + limb_id = BODYPART_ID_PEG + icon_state = "peg_r_arm" + bodytype = BODYTYPE_PEG + should_draw_greyscale = FALSE + attack_verb_simple = list("bashed", "slashed") + unarmed_damage_low = 3 + unarmed_damage_high = 9 + unarmed_effectiveness = 5 + brute_modifier = 1.2 + burn_modifier = 1.5 + bodypart_traits = list(TRAIT_CHUNKYFINGERS) + disabling_threshold_percentage = 1 + bodypart_flags = BODYPART_UNHUSKABLE + biological_state = (BIO_JOINTED) + +/obj/item/bodypart/arm/right/ghetto/Initialize(mapload, ...) + . = ..() + ADD_TRAIT(src, TRAIT_EASY_ATTACH, INNATE_TRAIT) + +/obj/item/bodypart/leg/left/ghetto + name = "left peg leg" + desc = "Fashioned from what looks suspiciously like a table leg, this peg leg brings a whole new meaning to 'dining on the go.' It's a bit wobbly and creaks ominously with every step, but at least you can claim to have the most well-balanced diet on the seven seas." + icon = 'icons/mob/human/species/ghetto.dmi' + icon_static = 'icons/mob/human/species/ghetto.dmi' + limb_id = BODYPART_ID_PEG + icon_state = "peg_l_leg" + bodytype = BODYTYPE_PEG + should_draw_greyscale = FALSE + unarmed_damage_low = 2 + unarmed_damage_high = 5 + unarmed_effectiveness = 10 + brute_modifier = 1.2 + burn_modifier = 1.5 + disabling_threshold_percentage = 1 + bodypart_flags = BODYPART_UNHUSKABLE + biological_state = (BIO_JOINTED) + +/obj/item/bodypart/leg/left/ghetto/Initialize(mapload, ...) + . = ..() + ADD_TRAIT(src, TRAIT_EASY_ATTACH, INNATE_TRAIT) + +/obj/item/bodypart/leg/right/ghetto + name = "right peg leg" + desc = "Fashioned from what looks suspiciously like a table leg, this peg leg brings a whole new meaning to 'dining on the go.' It's a bit wobbly and creaks ominously with every step, but at least you can claim to have the most well-balanced diet on the seven seas." + icon = 'icons/mob/human/species/ghetto.dmi' + icon_static = 'icons/mob/human/species/ghetto.dmi' + limb_id = BODYPART_ID_PEG + icon_state = "peg_r_leg" + bodytype = BODYTYPE_PEG + should_draw_greyscale = FALSE + unarmed_damage_low = 2 + unarmed_damage_high = 5 + unarmed_effectiveness = 10 + brute_modifier = 1.2 + burn_modifier = 1.5 + disabling_threshold_percentage = 1 + bodypart_flags = BODYPART_UNHUSKABLE + biological_state = (BIO_JOINTED) + +/obj/item/bodypart/leg/right/ghetto/Initialize(mapload, ...) + . = ..() + ADD_TRAIT(src, TRAIT_EASY_ATTACH, INNATE_TRAIT) diff --git a/code/modules/surgery/bodyparts/head.dm b/code/modules/surgery/bodyparts/head.dm index 2a1c0cdc9d408..16a9a288bf0ba 100644 --- a/code/modules/surgery/bodyparts/head.dm +++ b/code/modules/surgery/bodyparts/head.dm @@ -17,7 +17,7 @@ scars_covered_by_clothes = FALSE grind_results = null is_dimorphic = TRUE - unarmed_attack_verb = "bite" + unarmed_attack_verbs = list("bite", "chomp") unarmed_attack_effect = ATTACK_EFFECT_BITE unarmed_attack_sound = 'sound/weapons/bite.ogg' unarmed_miss_sound = 'sound/weapons/bite.ogg' @@ -54,9 +54,15 @@ var/facial_hair_hidden = FALSE /// Gradient styles, if any - var/list/gradient_styles = null + var/list/gradient_styles = list( + "None", //Hair gradient style + "None", //Facial hair gradient style + ) /// Gradient colors, if any - var/list/gradient_colors = null + var/list/gradient_colors = list( + COLOR_BLACK, //Hair gradient color + COLOR_BLACK, //Facial hair gradient color + ) /// An override color that can be cleared later, affects both hair and facial hair var/override_hair_color = null @@ -70,6 +76,9 @@ ///Current lipstick trait, if any (such as TRAIT_KISS_OF_DEATH) var/stored_lipstick_trait + /// How many teeth the head's species has, humans have 32 so that's the default. Used for a limit to dental pill implants. + var/teeth_count = 32 + /// Offset to apply to equipment worn on the ears var/datum/worn_feature_offset/worn_ears_offset /// Offset to apply to equipment worn on the eyes @@ -132,7 +141,7 @@ if (!can_dismember) return FALSE - if(owner.stat < HARD_CRIT) + if(!HAS_TRAIT(owner, TRAIT_CURSED) && owner.stat < HARD_CRIT) return FALSE return ..() diff --git a/code/modules/surgery/bodyparts/head_hair_and_lips.dm b/code/modules/surgery/bodyparts/head_hair_and_lips.dm index aa0196b187a54..7f81a615f3555 100644 --- a/code/modules/surgery/bodyparts/head_hair_and_lips.dm +++ b/code/modules/surgery/bodyparts/head_hair_and_lips.dm @@ -56,8 +56,8 @@ facial_hair_alpha = owner_species.facial_hair_alpha facial_hair_color = human_head_owner.facial_hair_color fixed_hair_color = owner_species.get_fixed_hair_color(human_head_owner) //Can be null - gradient_styles = human_head_owner.grad_style?.Copy() - gradient_colors = human_head_owner.grad_color?.Copy() + gradient_styles = human_head_owner.grad_style.Copy() + gradient_colors = human_head_owner.grad_color.Copy() /obj/item/bodypart/head/proc/get_hair_and_lips_icon(dropped) SHOULD_CALL_PARENT(TRUE) @@ -84,7 +84,7 @@ var/image/facial_hair_overlay if(!facial_hair_hidden && facial_hairstyle && (head_flags & HEAD_FACIAL_HAIR)) - sprite_accessory = GLOB.facial_hairstyles_list[facial_hairstyle] + sprite_accessory = SSaccessories.facial_hairstyles_list[facial_hairstyle] if(sprite_accessory) //Overlay facial_hair_overlay = image(sprite_accessory.icon, sprite_accessory.icon_state, -HAIR_LAYER, image_dir) @@ -96,15 +96,15 @@ worn_face_offset?.apply_offset(facial_hair_overlay) . += facial_hair_overlay //Gradients - var/facial_hair_gradient_style = LAZYACCESS(gradient_styles, GRADIENT_FACIAL_HAIR_KEY) - if(facial_hair_gradient_style) - var/facial_hair_gradient_color = LAZYACCESS(gradient_colors, GRADIENT_FACIAL_HAIR_KEY) - var/image/facial_hair_gradient_overlay = get_gradient_overlay(sprite_accessory.icon, sprite_accessory.icon_state, -HAIR_LAYER, GLOB.facial_hair_gradients_list[facial_hair_gradient_style], facial_hair_gradient_color, image_dir) + var/facial_hair_gradient_style = gradient_styles[GRADIENT_FACIAL_HAIR_KEY] + if(facial_hair_gradient_style != "None") + var/facial_hair_gradient_color = gradient_colors[GRADIENT_FACIAL_HAIR_KEY] + var/image/facial_hair_gradient_overlay = get_gradient_overlay(sprite_accessory.icon, sprite_accessory.icon_state, -HAIR_LAYER, SSaccessories.facial_hair_gradients_list[facial_hair_gradient_style], facial_hair_gradient_color, image_dir) . += facial_hair_gradient_overlay var/image/hair_overlay if(!(show_debrained && (head_flags & HEAD_DEBRAIN)) && !hair_hidden && hairstyle && (head_flags & HEAD_HAIR)) - var/datum/sprite_accessory/hair/hair_sprite_accessory = GLOB.hairstyles_list[hairstyle] + var/datum/sprite_accessory/hair/hair_sprite_accessory = SSaccessories.hairstyles_list[hairstyle] if(hair_sprite_accessory) //Overlay hair_overlay = image(hair_sprite_accessory.icon, hair_sprite_accessory.icon_state, -HAIR_LAYER, image_dir) @@ -117,10 +117,10 @@ worn_face_offset?.apply_offset(hair_overlay) . += hair_overlay //Gradients - var/hair_gradient_style = LAZYACCESS(gradient_styles, GRADIENT_HAIR_KEY) - if(hair_gradient_style) - var/hair_gradient_color = LAZYACCESS(gradient_colors, GRADIENT_HAIR_KEY) - var/image/hair_gradient_overlay = get_gradient_overlay(hair_sprite_accessory.icon, hair_sprite_accessory.icon_state, -HAIR_LAYER, GLOB.hair_gradients_list[hair_gradient_style], hair_gradient_color, image_dir) + var/hair_gradient_style = gradient_styles[GRADIENT_HAIR_KEY] + if(hair_gradient_style != "None") + var/hair_gradient_color = gradient_colors[GRADIENT_HAIR_KEY] + var/image/hair_gradient_overlay = get_gradient_overlay(hair_sprite_accessory.icon, hair_sprite_accessory.icon_state, -HAIR_LAYER, SSaccessories.hair_gradients_list[hair_gradient_style], hair_gradient_color, image_dir) hair_gradient_overlay.pixel_y = hair_sprite_accessory.y_offset . += hair_gradient_overlay @@ -276,18 +276,12 @@ return /mob/living/carbon/human/set_hair_gradient_style(new_style, update = TRUE) - if(new_style == "None") - new_style = null - if(LAZYACCESS(grad_style, GRADIENT_HAIR_KEY) == new_style) + if(grad_style[GRADIENT_HAIR_KEY] == new_style) return var/obj/item/bodypart/head/my_head = get_bodypart(BODY_ZONE_HEAD) - LAZYSETLEN(grad_style, GRADIENTS_LEN) - LAZYSETLEN(grad_color, GRADIENTS_LEN) grad_style[GRADIENT_HAIR_KEY] = new_style if(my_head) - LAZYSETLEN(my_head.gradient_styles, GRADIENTS_LEN) - LAZYSETLEN(my_head.gradient_colors, GRADIENTS_LEN) my_head.gradient_styles[GRADIENT_HAIR_KEY] = new_style if(update) @@ -301,17 +295,12 @@ return /mob/living/carbon/human/set_hair_gradient_color(new_color, update = TRUE) - if(LAZYACCESS(grad_color, GRADIENT_HAIR_KEY) == new_color) + if(grad_color[GRADIENT_HAIR_KEY] == new_color) return var/obj/item/bodypart/head/my_head = get_bodypart(BODY_ZONE_HEAD) - - LAZYSETLEN(grad_style, GRADIENTS_LEN) - LAZYSETLEN(grad_color, GRADIENTS_LEN) grad_color[GRADIENT_HAIR_KEY] = new_color if(my_head) - LAZYSETLEN(my_head.gradient_styles, GRADIENTS_LEN) - LAZYSETLEN(my_head.gradient_colors, GRADIENTS_LEN) my_head.gradient_colors[GRADIENT_HAIR_KEY] = new_color if(update) @@ -362,18 +351,12 @@ return /mob/living/carbon/human/set_facial_hair_gradient_style(new_style, update = TRUE) - if(new_style == "None") - new_style = null - if(LAZYACCESS(grad_style, GRADIENT_FACIAL_HAIR_KEY) == new_style) + if(grad_style[GRADIENT_FACIAL_HAIR_KEY] == new_style) return var/obj/item/bodypart/head/my_head = get_bodypart(BODY_ZONE_HEAD) - LAZYSETLEN(grad_style, GRADIENTS_LEN) - LAZYSETLEN(grad_color, GRADIENTS_LEN) grad_style[GRADIENT_FACIAL_HAIR_KEY] = new_style if(my_head) - LAZYSETLEN(my_head.gradient_styles, GRADIENTS_LEN) - LAZYSETLEN(my_head.gradient_colors, GRADIENTS_LEN) my_head.gradient_styles[GRADIENT_FACIAL_HAIR_KEY] = new_style if(update) @@ -387,16 +370,12 @@ return /mob/living/carbon/human/set_facial_hair_gradient_color(new_color, update = TRUE) - if(LAZYACCESS(grad_color, GRADIENT_FACIAL_HAIR_KEY) == new_color) + if(grad_color[GRADIENT_FACIAL_HAIR_KEY] == new_color) return var/obj/item/bodypart/head/my_head = get_bodypart(BODY_ZONE_HEAD) - LAZYSETLEN(grad_style, GRADIENTS_LEN) - LAZYSETLEN(grad_color, GRADIENTS_LEN) grad_color[GRADIENT_FACIAL_HAIR_KEY] = new_color if(my_head) - LAZYSETLEN(my_head.gradient_styles, GRADIENTS_LEN) - LAZYSETLEN(my_head.gradient_colors, GRADIENTS_LEN) my_head.gradient_colors[GRADIENT_FACIAL_HAIR_KEY] = new_color if(update) diff --git a/code/modules/surgery/bodyparts/helpers.dm b/code/modules/surgery/bodyparts/helpers.dm index fb0647d0fb504..863cdd9cb61c2 100644 --- a/code/modules/surgery/bodyparts/helpers.dm +++ b/code/modules/surgery/bodyparts/helpers.dm @@ -48,6 +48,15 @@ which_hand = BODY_ZONE_PRECISE_R_HAND return get_bodypart(check_zone(which_hand)) +/// Gets the inactive hand of the mob. Returns FALSE on non-carbons, otherwise returns the /obj/item/bodypart. +/mob/proc/get_inactive_hand() + return null + +/mob/living/carbon/get_inactive_hand() + var/which_hand = BODY_ZONE_PRECISE_R_HAND + if(!(active_hand_index % RIGHT_HANDS)) + which_hand = BODY_ZONE_PRECISE_L_HAND + return get_bodypart(check_zone(which_hand)) /mob/proc/has_left_hand(check_disabled = TRUE) return TRUE diff --git a/code/modules/surgery/bodyparts/parts.dm b/code/modules/surgery/bodyparts/parts.dm index 01b8d93908e29..6e3b5ca921bc4 100644 --- a/code/modules/surgery/bodyparts/parts.dm +++ b/code/modules/surgery/bodyparts/parts.dm @@ -48,7 +48,7 @@ old_owner.gib(DROP_ALL_REMAINS) /obj/item/bodypart/chest/can_dismember(obj/item/item) - if(owner.stat < HARD_CRIT || !contents.len) + if((!HAS_TRAIT(owner, TRAIT_CURSED) && owner.stat < HARD_CRIT) || !contents.len) return FALSE return ..() @@ -74,9 +74,11 @@ if(!ishuman(owner)) return null var/mob/living/carbon/human/human_owner = owner - var/butt_sprite = human_owner.physique == FEMALE ? BUTT_SPRITE_HUMAN_FEMALE : BUTT_SPRITE_HUMAN_MALE var/obj/item/organ/external/tail/tail = human_owner.get_organ_slot(ORGAN_SLOT_EXTERNAL_TAIL) - return tail?.get_butt_sprite() || butt_sprite + if(tail) + return tail.get_butt_sprite() + + return icon('icons/mob/butts.dmi', human_owner.physique == FEMALE ? BUTT_SPRITE_HUMAN_FEMALE : BUTT_SPRITE_HUMAN_MALE) /obj/item/bodypart/chest/monkey icon = 'icons/mob/human/species/monkey/bodyparts.dmi' @@ -129,7 +131,7 @@ aux_layer = BODYPARTS_HIGH_LAYER body_damage_coeff = LIMB_BODY_DAMAGE_COEFFICIENT_DEFAULT can_be_disabled = TRUE - unarmed_attack_verb = "punch" /// The classic punch, wonderfully classic and completely random + unarmed_attack_verbs = list("punch") /// The classic punch, wonderfully classic and completely random grappled_attack_verb = "pummel" unarmed_damage_low = 5 unarmed_damage_high = 10 @@ -390,7 +392,7 @@ can_be_disabled = TRUE unarmed_attack_effect = ATTACK_EFFECT_KICK body_zone = BODY_ZONE_L_LEG - unarmed_attack_verb = "kick" // The lovely kick, typically only accessable by attacking a grouded foe. 1.5 times better than the punch. + unarmed_attack_verbs = list("kick") // The lovely kick, typically only accessable by attacking a grouded foe. 1.5 times better than the punch. unarmed_damage_low = 7 unarmed_damage_high = 15 unarmed_effectiveness = 15 diff --git a/code/modules/surgery/bodyparts/robot_bodyparts.dm b/code/modules/surgery/bodyparts/robot_bodyparts.dm index ca4b61228da42..314f3396f0afe 100644 --- a/code/modules/surgery/bodyparts/robot_bodyparts.dm +++ b/code/modules/surgery/bodyparts/robot_bodyparts.dm @@ -115,7 +115,7 @@ damage_examines = list(BRUTE = ROBOTIC_BRUTE_EXAMINE_TEXT, BURN = ROBOTIC_BURN_EXAMINE_TEXT) bodypart_flags = BODYPART_UNHUSKABLE -/obj/item/bodypart/leg/left/robot/emp_act(severity) +/obj/item/bodypart/leg/left/robot/emp_effect(severity, protection) . = ..() if(!. || isnull(owner)) return @@ -125,8 +125,9 @@ knockdown_time *= 2 owner.Knockdown(knockdown_time) if(owner.incapacitated(IGNORE_RESTRAINTS|IGNORE_GRAB)) // So the message isn't duplicated. If they were stunned beforehand by something else, then the message not showing makes more sense anyways. - return + return FALSE to_chat(owner, span_danger("As your [plaintext_zone] unexpectedly malfunctions, it causes you to fall to the ground!")) + return /obj/item/bodypart/leg/right/robot name = "cyborg right leg" @@ -163,7 +164,7 @@ damage_examines = list(BRUTE = ROBOTIC_BRUTE_EXAMINE_TEXT, BURN = ROBOTIC_BURN_EXAMINE_TEXT) bodypart_flags = BODYPART_UNHUSKABLE -/obj/item/bodypart/leg/right/robot/emp_act(severity) +/obj/item/bodypart/leg/right/robot/emp_effect(severity, protection) . = ..() if(!. || isnull(owner)) return @@ -173,8 +174,9 @@ knockdown_time *= 2 owner.Knockdown(knockdown_time) if(owner.incapacitated(IGNORE_RESTRAINTS|IGNORE_GRAB)) // So the message isn't duplicated. If they were stunned beforehand by something else, then the message not showing makes more sense anyways. - return + return FALSE to_chat(owner, span_danger("As your [plaintext_zone] unexpectedly malfunctions, it causes you to fall to the ground!")) + return /obj/item/bodypart/chest/robot name = "cyborg torso" @@ -213,9 +215,9 @@ wing_types = list(/obj/item/organ/external/wings/functional/robotic) var/wired = FALSE - var/obj/item/stock_parts/cell/cell = null + var/obj/item/stock_parts/power_store/cell = null -/obj/item/bodypart/chest/robot/emp_act(severity) +/obj/item/bodypart/chest/robot/emp_effect(severity, protection) . = ..() if(!. || isnull(owner)) return @@ -236,6 +238,7 @@ to_chat(owner, span_danger("Your [plaintext_zone]'s logic boards temporarily become unresponsive!")) owner.Stun(stun_time) owner.Shake(pixelshiftx = shift_x, pixelshifty = shift_y, duration = shake_duration) + return /obj/item/bodypart/chest/robot/get_cell() return cell @@ -288,7 +291,7 @@ ), AUGMENTATION_TRAIT) /obj/item/bodypart/chest/robot/attackby(obj/item/weapon, mob/user, params) - if(istype(weapon, /obj/item/stock_parts/cell)) + if(istype(weapon, /obj/item/stock_parts/power_store/cell)) if(cell) to_chat(user, span_warning("You have already inserted a cell!")) return @@ -390,7 +393,7 @@ #define EMP_GLITCH "EMP_GLITCH" -/obj/item/bodypart/head/robot/emp_act(severity) +/obj/item/bodypart/head/robot/emp_effect(severity, protection) . = ..() if(!. || isnull(owner)) return @@ -404,6 +407,7 @@ owner.add_client_colour(/datum/client_colour/malfunction) addtimer(CALLBACK(owner, TYPE_PROC_REF(/mob/living/carbon/human, remove_client_colour), /datum/client_colour/malfunction), glitch_duration) + return #undef EMP_GLITCH diff --git a/code/modules/surgery/bodyparts/species_parts/ethereal_bodyparts.dm b/code/modules/surgery/bodyparts/species_parts/ethereal_bodyparts.dm index 3eeafa6f4e1a8..05645ed20df2e 100644 --- a/code/modules/surgery/bodyparts/species_parts/ethereal_bodyparts.dm +++ b/code/modules/surgery/bodyparts/species_parts/ethereal_bodyparts.dm @@ -36,7 +36,7 @@ limb_id = SPECIES_ETHEREAL dmg_overlay_type = null attack_type = BURN //burn bish - unarmed_attack_verb = "burn" + unarmed_attack_verbs = list("burn", "sear") grappled_attack_verb = "scorch" unarmed_attack_sound = 'sound/weapons/etherealhit.ogg' unarmed_miss_sound = 'sound/weapons/etherealmiss.ogg' @@ -54,7 +54,7 @@ limb_id = SPECIES_ETHEREAL dmg_overlay_type = null attack_type = BURN // bish buzz - unarmed_attack_verb = "burn" + unarmed_attack_verbs = list("burn", "sear") grappled_attack_verb = "scorch" unarmed_attack_sound = 'sound/weapons/etherealhit.ogg' unarmed_miss_sound = 'sound/weapons/etherealmiss.ogg' @@ -103,3 +103,4 @@ icon_state = "lustrous_head" limb_id = SPECIES_ETHEREAL_LUSTROUS head_flags = NONE + teeth_count = 0 // bro you seen these thinsg. they got a crystal for a head aint no teeth here diff --git a/code/modules/surgery/bodyparts/species_parts/lizard_bodyparts.dm b/code/modules/surgery/bodyparts/species_parts/lizard_bodyparts.dm index e6fffe1e6f91b..350e2f32883fb 100644 --- a/code/modules/surgery/bodyparts/species_parts/lizard_bodyparts.dm +++ b/code/modules/surgery/bodyparts/species_parts/lizard_bodyparts.dm @@ -3,6 +3,8 @@ limb_id = SPECIES_LIZARD is_dimorphic = FALSE head_flags = HEAD_LIPS|HEAD_EYESPRITES|HEAD_EYECOLOR|HEAD_EYEHOLES|HEAD_DEBRAIN + // lizardshave many teeth + teeth_count = 72 /obj/item/bodypart/chest/lizard icon_greyscale = 'icons/mob/human/species/lizard/bodyparts.dmi' @@ -11,12 +13,12 @@ wing_types = list(/obj/item/organ/external/wings/functional/dragon) /obj/item/bodypart/chest/lizard/get_butt_sprite() - return BUTT_SPRITE_LIZARD + return icon('icons/mob/butts.dmi', BUTT_SPRITE_LIZARD) /obj/item/bodypart/arm/left/lizard icon_greyscale = 'icons/mob/human/species/lizard/bodyparts.dmi' limb_id = SPECIES_LIZARD - unarmed_attack_verb = "slash" + unarmed_attack_verbs = list("slash", "scratch", "claw") grappled_attack_verb = "lacerate" unarmed_attack_effect = ATTACK_EFFECT_CLAW unarmed_attack_sound = 'sound/weapons/slash.ogg' @@ -25,7 +27,7 @@ /obj/item/bodypart/arm/right/lizard icon_greyscale = 'icons/mob/human/species/lizard/bodyparts.dmi' limb_id = SPECIES_LIZARD - unarmed_attack_verb = "slash" + unarmed_attack_verbs = list("slash", "scratch", "claw") grappled_attack_verb = "lacerate" unarmed_attack_effect = ATTACK_EFFECT_CLAW unarmed_attack_sound = 'sound/weapons/slash.ogg' diff --git a/code/modules/surgery/bodyparts/species_parts/misc_bodyparts.dm b/code/modules/surgery/bodyparts/species_parts/misc_bodyparts.dm index e34fb2cbeafd1..f9a71a4e6d4dd 100644 --- a/code/modules/surgery/bodyparts/species_parts/misc_bodyparts.dm +++ b/code/modules/surgery/bodyparts/species_parts/misc_bodyparts.dm @@ -5,6 +5,7 @@ burn_modifier = 2 head_flags = HEAD_EYESPRITES|HEAD_DEBRAIN biological_state = (BIO_FLESH|BIO_BLOODED) + teeth_count = 0 /obj/item/bodypart/chest/snail limb_id = SPECIES_SNAIL @@ -15,7 +16,7 @@ /obj/item/bodypart/arm/left/snail limb_id = SPECIES_SNAIL - unarmed_attack_verb = "slap" + unarmed_attack_verbs = list("slap") unarmed_attack_effect = ATTACK_EFFECT_DISARM unarmed_damage_low = 1 unarmed_damage_high = 2 //snails are soft and squishy @@ -24,7 +25,7 @@ /obj/item/bodypart/arm/right/snail limb_id = SPECIES_SNAIL - unarmed_attack_verb = "slap" + unarmed_attack_verbs = list("slap") unarmed_attack_effect = ATTACK_EFFECT_DISARM unarmed_damage_low = 1 unarmed_damage_high = 2 //snails are soft and squishy @@ -36,7 +37,6 @@ unarmed_damage_low = 1 unarmed_damage_high = 2 //snails are soft and squishy burn_modifier = 2 - speed_modifier = 3 //disgustingly slow biological_state = (BIO_FLESH|BIO_BLOODED) /obj/item/bodypart/leg/right/snail @@ -44,7 +44,6 @@ unarmed_damage_low = 1 unarmed_damage_high = 2 //snails are soft and squishy burn_modifier = 2 - speed_modifier = 3 //disgustingly slow biological_state = (BIO_FLESH|BIO_BLOODED) ///ABDUCTOR @@ -53,6 +52,7 @@ is_dimorphic = FALSE should_draw_greyscale = FALSE head_flags = NONE + teeth_count = 0 /obj/item/bodypart/chest/abductor limb_id = SPECIES_ABDUCTOR @@ -61,7 +61,7 @@ wing_types = NONE /obj/item/bodypart/chest/abductor/get_butt_sprite() - return BUTT_SPRITE_GREY + return icon('icons/mob/butts.dmi', BUTT_SPRITE_GREY) /obj/item/bodypart/arm/left/abductor limb_id = SPECIES_ABDUCTOR @@ -99,7 +99,7 @@ wing_types = list(/obj/item/organ/external/wings/functional/slime) /obj/item/bodypart/chest/jelly/get_butt_sprite() - return BUTT_SPRITE_SLIME + return icon('icons/mob/butts.dmi', BUTT_SPRITE_SLIME) /obj/item/bodypart/arm/left/jelly biological_state = (BIO_FLESH|BIO_BLOODED) @@ -148,6 +148,7 @@ ///LUMINESCENT /obj/item/bodypart/head/jelly/luminescent limb_id = SPECIES_LUMINESCENT + teeth_count = 0 /obj/item/bodypart/chest/jelly/luminescent limb_id = SPECIES_LUMINESCENT @@ -218,11 +219,11 @@ wing_types = NONE /obj/item/bodypart/chest/pod/get_butt_sprite() - return BUTT_SPRITE_FLOWERPOT + return icon('icons/mob/butts.dmi', BUTT_SPRITE_FLOWERPOT) /obj/item/bodypart/arm/left/pod limb_id = SPECIES_PODPERSON - unarmed_attack_verb = "slash" + unarmed_attack_verbs = list("slash", "lash") grappled_attack_verb = "lacerate" unarmed_attack_effect = ATTACK_EFFECT_CLAW unarmed_attack_sound = 'sound/weapons/slice.ogg' @@ -231,7 +232,7 @@ /obj/item/bodypart/arm/right/pod limb_id = SPECIES_PODPERSON - unarmed_attack_verb = "slash" + unarmed_attack_verbs = list("slash", "lash") grappled_attack_verb = "lacerate" unarmed_attack_effect = ATTACK_EFFECT_CLAW unarmed_attack_sound = 'sound/weapons/slice.ogg' @@ -252,6 +253,7 @@ is_dimorphic = FALSE should_draw_greyscale = FALSE head_flags = HEAD_EYESPRITES|HEAD_EYEHOLES|HEAD_DEBRAIN + teeth_count = 0 /obj/item/bodypart/chest/fly limb_id = SPECIES_FLYPERSON @@ -369,6 +371,7 @@ is_dimorphic = TRUE burn_modifier = 1.25 head_flags = NONE + teeth_count = 0 /obj/item/bodypart/chest/mushroom limb_id = SPECIES_MUSHROOM @@ -438,6 +441,8 @@ should_draw_greyscale = FALSE dmg_overlay_type = null head_flags = NONE + // too hard to drill through + teeth_count = 0 /obj/item/bodypart/head/golem/Initialize(mapload) worn_ears_offset = new( diff --git a/code/modules/surgery/bodyparts/species_parts/moth_bodyparts.dm b/code/modules/surgery/bodyparts/species_parts/moth_bodyparts.dm index be8d601b1fb58..323cef05b8c5d 100644 --- a/code/modules/surgery/bodyparts/species_parts/moth_bodyparts.dm +++ b/code/modules/surgery/bodyparts/species_parts/moth_bodyparts.dm @@ -6,6 +6,7 @@ is_dimorphic = FALSE should_draw_greyscale = FALSE head_flags = HEAD_LIPS|HEAD_EYESPRITES|HEAD_EYEHOLES|HEAD_DEBRAIN //what the fuck, moths have lips? + teeth_count = 0 /obj/item/bodypart/chest/moth icon = 'icons/mob/human/species/moth/bodyparts.dmi' @@ -17,7 +18,7 @@ wing_types = list(/obj/item/organ/external/wings/functional/moth/megamoth, /obj/item/organ/external/wings/functional/moth/mothra) /obj/item/bodypart/chest/moth/get_butt_sprite() - return BUTT_SPRITE_FUZZY + return icon('icons/mob/butts.dmi', BUTT_SPRITE_FUZZY) /obj/item/bodypart/arm/left/moth icon = 'icons/mob/human/species/moth/bodyparts.dmi' @@ -25,7 +26,7 @@ icon_static = 'icons/mob/human/species/moth/bodyparts.dmi' limb_id = SPECIES_MOTH should_draw_greyscale = FALSE - unarmed_attack_verb = "slash" + unarmed_attack_verbs = list("slash") grappled_attack_verb = "lacerate" unarmed_attack_effect = ATTACK_EFFECT_CLAW unarmed_attack_sound = 'sound/weapons/slash.ogg' @@ -37,7 +38,7 @@ icon_static = 'icons/mob/human/species/moth/bodyparts.dmi' limb_id = SPECIES_MOTH should_draw_greyscale = FALSE - unarmed_attack_verb = "slash" + unarmed_attack_verbs = list("slash") grappled_attack_verb = "lacerate" unarmed_attack_effect = ATTACK_EFFECT_CLAW unarmed_attack_sound = 'sound/weapons/slash.ogg' diff --git a/code/modules/surgery/bodyparts/species_parts/plasmaman_bodyparts.dm b/code/modules/surgery/bodyparts/species_parts/plasmaman_bodyparts.dm index 40bf4a51c042e..b0acf914079f3 100644 --- a/code/modules/surgery/bodyparts/species_parts/plasmaman_bodyparts.dm +++ b/code/modules/surgery/bodyparts/species_parts/plasmaman_bodyparts.dm @@ -27,7 +27,7 @@ wing_types = NONE /obj/item/bodypart/chest/plasmaman/get_butt_sprite() - return BUTT_SPRITE_PLASMA + return icon('icons/mob/butts.dmi', BUTT_SPRITE_PLASMA) /obj/item/bodypart/arm/left/plasmaman icon = 'icons/mob/human/species/plasmaman/bodyparts.dmi' diff --git a/code/modules/surgery/bodyparts/wounds.dm b/code/modules/surgery/bodyparts/wounds.dm index 1fc16c7ca8f8d..93d61b091d9c0 100644 --- a/code/modules/surgery/bodyparts/wounds.dm +++ b/code/modules/surgery/bodyparts/wounds.dm @@ -317,7 +317,7 @@ dam_mul *= iter_wound.damage_multiplier_penalty if(!LAZYLEN(wounds) && current_gauze && !replaced) // no more wounds = no need for the gauze anymore - owner.visible_message(span_notice("\The [current_gauze.name] on [owner]'s [name] falls away."), span_notice("The [current_gauze.name] on your [parse_zone(body_zone)] falls away.")) + owner.visible_message(span_notice("\The [current_gauze.name] on [owner]'s [name] falls away."), span_notice("The [current_gauze.name] on your [plaintext_zone] falls away.")) QDEL_NULL(current_gauze) wound_damage_multiplier = dam_mul diff --git a/code/modules/surgery/bone_mending.dm b/code/modules/surgery/bone_mending.dm index 87fc3db0af2c4..73fdcba3fce6b 100644 --- a/code/modules/surgery/bone_mending.dm +++ b/code/modules/surgery/bone_mending.dm @@ -48,7 +48,7 @@ /datum/surgery_step/repair_bone_hairline name = "repair hairline fracture (bonesetter/bone gel/tape)" implements = list( - /obj/item/bonesetter = 100, + TOOL_BONESET = 100, /obj/item/stack/medical/bone_gel = 100, /obj/item/stack/sticky_tape/surgical = 100, /obj/item/stack/sticky_tape/super = 50, @@ -60,13 +60,13 @@ display_results( user, target, - span_notice("You begin to repair the fracture in [target]'s [parse_zone(user.zone_selected)]..."), - span_notice("[user] begins to repair the fracture in [target]'s [parse_zone(user.zone_selected)] with [tool]."), - span_notice("[user] begins to repair the fracture in [target]'s [parse_zone(user.zone_selected)]."), + span_notice("You begin to repair the fracture in [target]'s [target.parse_zone_with_bodypart(user.zone_selected)]..."), + span_notice("[user] begins to repair the fracture in [target]'s [target.parse_zone_with_bodypart(user.zone_selected)] with [tool]."), + span_notice("[user] begins to repair the fracture in [target]'s [target.parse_zone_with_bodypart(user.zone_selected)]."), ) - display_pain(target, "Your [parse_zone(user.zone_selected)] aches with pain!") + display_pain(target, "Your [target.parse_zone_with_bodypart(user.zone_selected)] aches with pain!") else - user.visible_message(span_notice("[user] looks for [target]'s [parse_zone(user.zone_selected)]."), span_notice("You look for [target]'s [parse_zone(user.zone_selected)]...")) + user.visible_message(span_notice("[user] looks for [target]'s [target.parse_zone_with_bodypart(user.zone_selected)]."), span_notice("You look for [target]'s [target.parse_zone_with_bodypart(user.zone_selected)]...")) /datum/surgery_step/repair_bone_hairline/success(mob/living/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results = FALSE) if(surgery.operated_wound) @@ -76,9 +76,9 @@ display_results( user, target, - span_notice("You successfully repair the fracture in [target]'s [parse_zone(target_zone)]."), - span_notice("[user] successfully repairs the fracture in [target]'s [parse_zone(target_zone)] with [tool]!"), - span_notice("[user] successfully repairs the fracture in [target]'s [parse_zone(target_zone)]!"), + span_notice("You successfully repair the fracture in [target]'s [target.parse_zone_with_bodypart(target_zone)]."), + span_notice("[user] successfully repairs the fracture in [target]'s [target.parse_zone_with_bodypart(target_zone)] with [tool]!"), + span_notice("[user] successfully repairs the fracture in [target]'s [target.parse_zone_with_bodypart(target_zone)]!"), ) log_combat(user, target, "repaired a hairline fracture in", addition="COMBAT_MODE: [uppertext(user.combat_mode)]") qdel(surgery.operated_wound) @@ -98,7 +98,7 @@ /datum/surgery_step/reset_compound_fracture name = "reset bone (bonesetter)" implements = list( - /obj/item/bonesetter = 100, + TOOL_BONESET = 100, /obj/item/stack/sticky_tape/surgical = 60, /obj/item/stack/sticky_tape/super = 40, /obj/item/stack/sticky_tape = 20) @@ -109,13 +109,13 @@ display_results( user, target, - span_notice("You begin to reset the bone in [target]'s [parse_zone(user.zone_selected)]..."), - span_notice("[user] begins to reset the bone in [target]'s [parse_zone(user.zone_selected)] with [tool]."), - span_notice("[user] begins to reset the bone in [target]'s [parse_zone(user.zone_selected)]."), + span_notice("You begin to reset the bone in [target]'s [target.parse_zone_with_bodypart(user.zone_selected)]..."), + span_notice("[user] begins to reset the bone in [target]'s [target.parse_zone_with_bodypart(user.zone_selected)] with [tool]."), + span_notice("[user] begins to reset the bone in [target]'s [target.parse_zone_with_bodypart(user.zone_selected)]."), ) - display_pain(target, "The aching pain in your [parse_zone(user.zone_selected)] is overwhelming!") + display_pain(target, "The aching pain in your [target.parse_zone_with_bodypart(user.zone_selected)] is overwhelming!") else - user.visible_message(span_notice("[user] looks for [target]'s [parse_zone(user.zone_selected)]."), span_notice("You look for [target]'s [parse_zone(user.zone_selected)]...")) + user.visible_message(span_notice("[user] looks for [target]'s [target.parse_zone_with_bodypart(user.zone_selected)]."), span_notice("You look for [target]'s [target.parse_zone_with_bodypart(user.zone_selected)]...")) /datum/surgery_step/reset_compound_fracture/success(mob/living/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results = FALSE) if(surgery.operated_wound) @@ -125,9 +125,9 @@ display_results( user, target, - span_notice("You successfully reset the bone in [target]'s [parse_zone(target_zone)]."), - span_notice("[user] successfully resets the bone in [target]'s [parse_zone(target_zone)] with [tool]!"), - span_notice("[user] successfully resets the bone in [target]'s [parse_zone(target_zone)]!"), + span_notice("You successfully reset the bone in [target]'s [target.parse_zone_with_bodypart(target_zone)]."), + span_notice("[user] successfully resets the bone in [target]'s [target.parse_zone_with_bodypart(target_zone)] with [tool]!"), + span_notice("[user] successfully resets the bone in [target]'s [target.parse_zone_with_bodypart(target_zone)]!"), ) log_combat(user, target, "reset a compound fracture in", addition="COMBAT MODE: [uppertext(user.combat_mode)]") else @@ -159,13 +159,13 @@ display_results( user, target, - span_notice("You begin to repair the fracture in [target]'s [parse_zone(user.zone_selected)]..."), - span_notice("[user] begins to repair the fracture in [target]'s [parse_zone(user.zone_selected)] with [tool]."), - span_notice("[user] begins to repair the fracture in [target]'s [parse_zone(user.zone_selected)]."), + span_notice("You begin to repair the fracture in [target]'s [target.parse_zone_with_bodypart(user.zone_selected)]..."), + span_notice("[user] begins to repair the fracture in [target]'s [target.parse_zone_with_bodypart(user.zone_selected)] with [tool]."), + span_notice("[user] begins to repair the fracture in [target]'s [target.parse_zone_with_bodypart(user.zone_selected)]."), ) - display_pain(target, "The aching pain in your [parse_zone(user.zone_selected)] is overwhelming!") + display_pain(target, "The aching pain in your [target.parse_zone_with_bodypart(user.zone_selected)] is overwhelming!") else - user.visible_message(span_notice("[user] looks for [target]'s [parse_zone(user.zone_selected)]."), span_notice("You look for [target]'s [parse_zone(user.zone_selected)]...")) + user.visible_message(span_notice("[user] looks for [target]'s [target.parse_zone_with_bodypart(user.zone_selected)]."), span_notice("You look for [target]'s [target.parse_zone_with_bodypart(user.zone_selected)]...")) /datum/surgery_step/repair_bone_compound/success(mob/living/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results = FALSE) if(surgery.operated_wound) @@ -175,9 +175,9 @@ display_results( user, target, - span_notice("You successfully repair the fracture in [target]'s [parse_zone(target_zone)]."), - span_notice("[user] successfully repairs the fracture in [target]'s [parse_zone(target_zone)] with [tool]!"), - span_notice("[user] successfully repairs the fracture in [target]'s [parse_zone(target_zone)]!"), + span_notice("You successfully repair the fracture in [target]'s [target.parse_zone_with_bodypart(target_zone)]."), + span_notice("[user] successfully repairs the fracture in [target]'s [target.parse_zone_with_bodypart(target_zone)] with [tool]!"), + span_notice("[user] successfully repairs the fracture in [target]'s [target.parse_zone_with_bodypart(target_zone)]!"), ) log_combat(user, target, "repaired a compound fracture in", addition="COMBAT MODE: [uppertext(user.combat_mode)]") qdel(surgery.operated_wound) @@ -218,9 +218,9 @@ display_results( user, target, - span_notice("You begin to discard the smaller skull debris in [target]'s [parse_zone(target_zone)]..."), - span_notice("[user] begins to discard the smaller skull debris in [target]'s [parse_zone(target_zone)]..."), - span_notice("[user] begins to poke around in [target]'s [parse_zone(target_zone)]..."), + span_notice("You begin to discard the smaller skull debris in [target]'s [target.parse_zone_with_bodypart(target_zone)]..."), + span_notice("[user] begins to discard the smaller skull debris in [target]'s [target.parse_zone_with_bodypart(target_zone)]..."), + span_notice("[user] begins to poke around in [target]'s [target.parse_zone_with_bodypart(target_zone)]..."), ) display_pain(target, "Your brain feels like it's getting stabbed by little shards of glass!") diff --git a/code/modules/surgery/burn_dressing.dm b/code/modules/surgery/burn_dressing.dm index 61be9056f6c18..5f2bdb8048327 100644 --- a/code/modules/surgery/burn_dressing.dm +++ b/code/modules/surgery/burn_dressing.dm @@ -44,6 +44,7 @@ preop_sound = 'sound/surgery/scalpel1.ogg' success_sound = 'sound/surgery/retractor2.ogg' failure_sound = 'sound/surgery/organ1.ogg' + surgery_effects_mood = TRUE /// How much sanitization is added per step var/sanitization_added = 0.5 /// How much infestation is removed per step (positive number) @@ -72,20 +73,20 @@ if(surgery.operated_wound) var/datum/wound/burn/flesh/burn_wound = surgery.operated_wound if(burn_wound.infestation <= 0) - to_chat(user, span_notice("[target]'s [parse_zone(user.zone_selected)] has no infected flesh to remove!")) + to_chat(user, span_notice("[target]'s [target.parse_zone_with_bodypart(user.zone_selected)] has no infected flesh to remove!")) surgery.status++ repeatable = FALSE return display_results( user, target, - span_notice("You begin to excise infected flesh from [target]'s [parse_zone(user.zone_selected)]..."), - span_notice("[user] begins to excise infected flesh from [target]'s [parse_zone(user.zone_selected)] with [tool]."), - span_notice("[user] begins to excise infected flesh from [target]'s [parse_zone(user.zone_selected)]."), + span_notice("You begin to excise infected flesh from [target]'s [target.parse_zone_with_bodypart(user.zone_selected)]..."), + span_notice("[user] begins to excise infected flesh from [target]'s [target.parse_zone_with_bodypart(user.zone_selected)] with [tool]."), + span_notice("[user] begins to excise infected flesh from [target]'s [target.parse_zone_with_bodypart(user.zone_selected)]."), ) - display_pain(target, "The infection in your [parse_zone(user.zone_selected)] stings like hell! It feels like you're being stabbed!") + display_pain(target, "The infection in your [target.parse_zone_with_bodypart(user.zone_selected)] stings like hell! It feels like you're being stabbed!") else - user.visible_message(span_notice("[user] looks for [target]'s [parse_zone(user.zone_selected)]."), span_notice("You look for [target]'s [parse_zone(user.zone_selected)]...")) + user.visible_message(span_notice("[user] looks for [target]'s [target.parse_zone_with_bodypart(user.zone_selected)]."), span_notice("You look for [target]'s [target.parse_zone_with_bodypart(user.zone_selected)]...")) /datum/surgery_step/debride/success(mob/living/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results = FALSE) var/datum/wound/burn/flesh/burn_wound = surgery.operated_wound @@ -94,9 +95,9 @@ display_results( user, target, - span_notice("You successfully excise some of the infected flesh from [target]'s [parse_zone(target_zone)][progress_text]."), - span_notice("[user] successfully excises some of the infected flesh from [target]'s [parse_zone(target_zone)] with [tool]!"), - span_notice("[user] successfully excises some of the infected flesh from [target]'s [parse_zone(target_zone)]!"), + span_notice("You successfully excise some of the infected flesh from [target]'s [target.parse_zone_with_bodypart(target_zone)][progress_text]."), + span_notice("[user] successfully excises some of the infected flesh from [target]'s [target.parse_zone_with_bodypart(target_zone)] with [tool]!"), + span_notice("[user] successfully excises some of the infected flesh from [target]'s [target.parse_zone_with_bodypart(target_zone)]!"), ) log_combat(user, target, "excised infected flesh in", addition="COMBAT MODE: [uppertext(user.combat_mode)]") surgery.operated_bodypart.receive_damage(brute=3, wound_bonus=CANT_WOUND) @@ -113,9 +114,9 @@ display_results( user, target, - span_notice("You carve away some of the healthy flesh from [target]'s [parse_zone(target_zone)]."), - span_notice("[user] carves away some of the healthy flesh from [target]'s [parse_zone(target_zone)] with [tool]!"), - span_notice("[user] carves away some of the healthy flesh from [target]'s [parse_zone(target_zone)]!"), + span_notice("You carve away some of the healthy flesh from [target]'s [target.parse_zone_with_bodypart(target_zone)]."), + span_notice("[user] carves away some of the healthy flesh from [target]'s [target.parse_zone_with_bodypart(target_zone)] with [tool]!"), + span_notice("[user] carves away some of the healthy flesh from [target]'s [target.parse_zone_with_bodypart(target_zone)]!"), ) surgery.operated_bodypart.receive_damage(brute=rand(4,8), sharpness=TRUE) @@ -146,13 +147,13 @@ display_results( user, target, - span_notice("You begin to dress the burns on [target]'s [parse_zone(user.zone_selected)]..."), - span_notice("[user] begins to dress the burns on [target]'s [parse_zone(user.zone_selected)] with [tool]."), - span_notice("[user] begins to dress the burns on [target]'s [parse_zone(user.zone_selected)]."), + span_notice("You begin to dress the burns on [target]'s [target.parse_zone_with_bodypart(user.zone_selected)]..."), + span_notice("[user] begins to dress the burns on [target]'s [target.parse_zone_with_bodypart(user.zone_selected)] with [tool]."), + span_notice("[user] begins to dress the burns on [target]'s [target.parse_zone_with_bodypart(user.zone_selected)]."), ) - display_pain(target, "The burns on your [parse_zone(user.zone_selected)] sting like hell!") + display_pain(target, "The burns on your [target.parse_zone_with_bodypart(user.zone_selected)] sting like hell!") else - user.visible_message(span_notice("[user] looks for [target]'s [parse_zone(user.zone_selected)]."), span_notice("You look for [target]'s [parse_zone(user.zone_selected)]...")) + user.visible_message(span_notice("[user] looks for [target]'s [target.parse_zone_with_bodypart(user.zone_selected)]."), span_notice("You look for [target]'s [target.parse_zone_with_bodypart(user.zone_selected)]...")) /datum/surgery_step/dress/success(mob/living/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results = FALSE) var/datum/wound/burn/flesh/burn_wound = surgery.operated_wound @@ -160,9 +161,9 @@ display_results( user, target, - span_notice("You successfully wrap [target]'s [parse_zone(target_zone)] with [tool]."), - span_notice("[user] successfully wraps [target]'s [parse_zone(target_zone)] with [tool]!"), - span_notice("[user] successfully wraps [target]'s [parse_zone(target_zone)]!"), + span_notice("You successfully wrap [target]'s [target.parse_zone_with_bodypart(target_zone)] with [tool]."), + span_notice("[user] successfully wraps [target]'s [target.parse_zone_with_bodypart(target_zone)] with [tool]!"), + span_notice("[user] successfully wraps [target]'s [target.parse_zone_with_bodypart(target_zone)]!"), ) log_combat(user, target, "dressed burns in", addition="COMBAT MODE: [uppertext(user.combat_mode)]") burn_wound.sanitization += sanitization_added diff --git a/code/modules/surgery/coronary_bypass.dm b/code/modules/surgery/coronary_bypass.dm index af08987fd9398..bf79df82ad36b 100644 --- a/code/modules/surgery/coronary_bypass.dm +++ b/code/modules/surgery/coronary_bypass.dm @@ -31,6 +31,7 @@ preop_sound = 'sound/surgery/scalpel1.ogg' success_sound = 'sound/surgery/scalpel2.ogg' failure_sound = 'sound/surgery/organ2.ogg' + surgery_effects_mood = TRUE /datum/surgery_step/incise_heart/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) display_results( diff --git a/code/modules/surgery/dental_implant.dm b/code/modules/surgery/dental_implant.dm index dc28e5da5769b..674f5803f57be 100644 --- a/code/modules/surgery/dental_implant.dm +++ b/code/modules/surgery/dental_implant.dm @@ -1,33 +1,57 @@ +#define MARK_TOOTH 1 + /datum/surgery/dental_implant name = "Dental implant" possible_locs = list(BODY_ZONE_PRECISE_MOUTH) steps = list( - /datum/surgery_step/drill, + /datum/surgery_step/drill/pill, /datum/surgery_step/insert_pill, + /datum/surgery_step/search_teeth, + /datum/surgery_step/close, ) +/datum/surgery_step/drill/pill/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) + . = ..() + var/count = 0 + var/obj/item/bodypart/head/teeth_receptangle = target.get_bodypart(BODY_ZONE_HEAD) + + ASSERT(teeth_receptangle) + + for(var/obj/item/reagent_containers/pill/dental in teeth_receptangle) + count++ + + if(teeth_receptangle.teeth_count == 0) + to_chat(user, span_notice("[user] has no teeth, doofus!")) + return SURGERY_STEP_FAIL + + if(count >= teeth_receptangle.teeth_count) + to_chat(user, span_notice("[user]'s teeth have all been replaced with pills already!")) + return SURGERY_STEP_FAIL + /datum/surgery_step/insert_pill name = "insert pill" implements = list(/obj/item/reagent_containers/pill = 100) time = 16 /datum/surgery_step/insert_pill/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) + display_results( user, target, - span_notice("You begin to wedge [tool] in [target]'s [parse_zone(target_zone)]..."), - span_notice("[user] begins to wedge \the [tool] in [target]'s [parse_zone(target_zone)]."), - span_notice("[user] begins to wedge something in [target]'s [parse_zone(target_zone)]."), + span_notice("You begin to wedge [tool] in [target]'s [target.parse_zone_with_bodypart(target_zone)]..."), + span_notice("[user] begins to wedge \the [tool] in [target]'s [target.parse_zone_with_bodypart(target_zone)]."), + span_notice("[user] begins to wedge something in [target]'s [target.parse_zone_with_bodypart(target_zone)]."), ) - display_pain(target, "Something's being jammed into your [parse_zone(target_zone)]!") + display_pain(target, "Something's being jammed into your [target.parse_zone_with_bodypart(target_zone)]!") /datum/surgery_step/insert_pill/success(mob/user, mob/living/carbon/target, target_zone, obj/item/reagent_containers/pill/tool, datum/surgery/surgery, default_display_results = FALSE) if(!istype(tool)) return FALSE - user.transferItemToLoc(tool, target, TRUE) + // Pills go into head + user.transferItemToLoc(tool, target.get_bodypart(BODY_ZONE_HEAD), TRUE) - var/datum/action/item_action/hands_free/activate_pill/pill_action = new(tool) + var/datum/action/item_action/activate_pill/pill_action = new(tool) pill_action.name = "Activate [tool.name]" pill_action.build_all_button_icons() pill_action.target = tool @@ -36,18 +60,27 @@ display_results( user, target, - span_notice("You wedge [tool] into [target]'s [parse_zone(target_zone)]."), - span_notice("[user] wedges \the [tool] into [target]'s [parse_zone(target_zone)]!"), - span_notice("[user] wedges something into [target]'s [parse_zone(target_zone)]!"), + span_notice("You wedge [tool] into [target]'s [target.parse_zone_with_bodypart(target_zone)]."), + span_notice("[user] wedges \the [tool] into [target]'s [target.parse_zone_with_bodypart(target_zone)]!"), + span_notice("[user] wedges something into [target]'s [target.parse_zone_with_bodypart(target_zone)]!"), ) return ..() -/datum/action/item_action/hands_free/activate_pill +/datum/action/item_action/activate_pill name = "Activate Pill" + check_flags = NONE + +/datum/action/item_action/activate_pill/IsAvailable(feedback) + if(owner.stat > SOFT_CRIT) + return FALSE + return ..() -/datum/action/item_action/hands_free/activate_pill/Trigger(trigger_flags) +/datum/action/item_action/activate_pill/Trigger(trigger_flags) if(!..()) return FALSE + owner.balloon_alert_to_viewers("[owner] grinds their teeth!", "You grit your teeth.") + if(!do_after(owner, owner.stat * (2.5 SECONDS), owner, IGNORE_USER_LOC_CHANGE | IGNORE_INCAPACITATED)) + return FALSE var/obj/item/item_target = target to_chat(owner, span_notice("You grit your teeth and burst the implanted [item_target.name]!")) owner.log_message("swallowed an implanted pill, [target]", LOG_ATTACK) @@ -55,3 +88,32 @@ item_target.reagents.trans_to(owner, item_target.reagents.total_volume, transferred_by = owner, methods = INGEST) qdel(target) return TRUE + +/datum/surgery_step/search_teeth + name = "search teeth (hand)" + accept_hand = TRUE + time = 2 SECONDS + repeatable = TRUE + +/datum/surgery_step/search_teeth/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) + display_results( + user, + target, + span_notice("You begin looking in [target]'s mouth for implantable teeth..."), + span_notice("[user] begins to look in [target]'s mouth."), + span_notice("[user] begins to examine [target]'s teeth."), + ) + display_pain(target, "You feel fingers poke around at your teeth.") + +/datum/surgery_step/search_teeth/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results = FALSE) + display_results( + user, + target, + span_notice("[user] marks a tooth in [target]'s mouth."), + span_notice("[user] marks a tooth in [target]'s mouth."), + span_notice("[user] prods a tooth in [target]'s mouth."), + ) + surgery.status = MARK_TOOTH + return ..() + +#undef MARK_TOOTH diff --git a/code/modules/surgery/experimental_dissection.dm b/code/modules/surgery/experimental_dissection.dm index 69c246d9e8de5..95c952e7724d4 100644 --- a/code/modules/surgery/experimental_dissection.dm +++ b/code/modules/surgery/experimental_dissection.dm @@ -1,5 +1,5 @@ ///How many research points you gain from dissecting a Human. -#define BASE_HUMAN_REWARD 500 +#define BASE_HUMAN_REWARD 10 /datum/surgery/advanced/experimental_dissection name = "Experimental Dissection" diff --git a/code/modules/surgery/gastrectomy.dm b/code/modules/surgery/gastrectomy.dm index a86805e3e5825..7ed006a50795a 100644 --- a/code/modules/surgery/gastrectomy.dm +++ b/code/modules/surgery/gastrectomy.dm @@ -33,6 +33,7 @@ preop_sound = 'sound/surgery/scalpel1.ogg' success_sound = 'sound/surgery/organ1.ogg' failure_sound = 'sound/surgery/organ2.ogg' + surgery_effects_mood = TRUE /datum/surgery_step/gastrectomy/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) display_results( diff --git a/code/modules/surgery/hepatectomy.dm b/code/modules/surgery/hepatectomy.dm index 934e6589e9df5..27e74512c1fad 100644 --- a/code/modules/surgery/hepatectomy.dm +++ b/code/modules/surgery/hepatectomy.dm @@ -32,6 +32,7 @@ preop_sound = 'sound/surgery/scalpel1.ogg' success_sound = 'sound/surgery/organ1.ogg' failure_sound = 'sound/surgery/organ2.ogg' + surgery_effects_mood = TRUE /datum/surgery_step/hepatectomy/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) display_results( diff --git a/code/modules/surgery/limb_augmentation.dm b/code/modules/surgery/limb_augmentation.dm index 28a2443600bbe..5276111e56727 100644 --- a/code/modules/surgery/limb_augmentation.dm +++ b/code/modules/surgery/limb_augmentation.dm @@ -24,20 +24,20 @@ to_chat(user, span_warning("That's not an augment, silly!")) return SURGERY_STEP_FAIL if(aug.body_zone != target_zone) - to_chat(user, span_warning("[tool] isn't the right type for [parse_zone(target_zone)].")) + to_chat(user, span_warning("[tool] isn't the right type for [target.parse_zone_with_bodypart(target_zone)].")) return SURGERY_STEP_FAIL target_limb = surgery.operated_bodypart if(target_limb) display_results( user, target, - span_notice("You begin to augment [target]'s [parse_zone(user.zone_selected)]..."), - span_notice("[user] begins to augment [target]'s [parse_zone(user.zone_selected)] with [aug]."), - span_notice("[user] begins to augment [target]'s [parse_zone(user.zone_selected)]."), + span_notice("You begin to augment [target]'s [target.parse_zone_with_bodypart(user.zone_selected)]..."), + span_notice("[user] begins to augment [target]'s [target.parse_zone_with_bodypart(user.zone_selected)] with [aug]."), + span_notice("[user] begins to augment [target]'s [target.parse_zone_with_bodypart(user.zone_selected)]."), ) - display_pain(target, "You feel a horrible pain in your [parse_zone(user.zone_selected)]!") + display_pain(target, "You feel a horrible pain in your [target.parse_zone_with_bodypart(user.zone_selected)]!") else - user.visible_message(span_notice("[user] looks for [target]'s [parse_zone(user.zone_selected)]."), span_notice("You look for [target]'s [parse_zone(user.zone_selected)]...")) + user.visible_message(span_notice("[user] looks for [target]'s [target.parse_zone_with_bodypart(user.zone_selected)]."), span_notice("You look for [target]'s [target.parse_zone_with_bodypart(user.zone_selected)]...")) //ACTUAL SURGERIES @@ -74,9 +74,9 @@ display_results( user, target, - span_warning("You fail in replacing [target]'s [parse_zone(target_zone)]! Their body has rejected [tool]!"), - span_warning("[user] fails to replace [target]'s [parse_zone(target_zone)]!"), - span_warning("[user] fails to replaces [target]'s [parse_zone(target_zone)]!"), + span_warning("You fail in replacing [target]'s [target.parse_zone_with_bodypart(target_zone)]! Their body has rejected [tool]!"), + span_warning("[user] fails to replace [target]'s [target.parse_zone_with_bodypart(target_zone)]!"), + span_warning("[user] fails to replaces [target]'s [target.parse_zone_with_bodypart(target_zone)]!"), ) tool.forceMove(target.loc) return @@ -85,12 +85,12 @@ display_results( user, target, - span_notice("You successfully augment [target]'s [parse_zone(target_zone)]."), - span_notice("[user] successfully augments [target]'s [parse_zone(target_zone)] with [tool]!"), - span_notice("[user] successfully augments [target]'s [parse_zone(target_zone)]!"), + span_notice("You successfully augment [target]'s [target.parse_zone_with_bodypart(target_zone)]."), + span_notice("[user] successfully augments [target]'s [target.parse_zone_with_bodypart(target_zone)] with [tool]!"), + span_notice("[user] successfully augments [target]'s [target.parse_zone_with_bodypart(target_zone)]!"), ) - display_pain(target, "Your [parse_zone(target_zone)] comes awash with synthetic sensation!", mechanical_surgery = TRUE) - log_combat(user, target, "augmented", addition="by giving him new [parse_zone(target_zone)] COMBAT MODE: [uppertext(user.combat_mode)]") + display_pain(target, "Your [target.parse_zone_with_bodypart(target_zone)] comes awash with synthetic sensation!", mechanical_surgery = TRUE) + log_combat(user, target, "augmented", addition="by giving him new [target.parse_zone_with_bodypart(target_zone)] COMBAT MODE: [uppertext(user.combat_mode)]") else - to_chat(user, span_warning("[target] has no organic [parse_zone(target_zone)] there!")) + to_chat(user, span_warning("[target] has no organic [target.parse_zone_with_bodypart(target_zone)] there!")) return ..() diff --git a/code/modules/surgery/lipoplasty.dm b/code/modules/surgery/lipoplasty.dm index 0e5bfb97785e8..71ad77b237005 100644 --- a/code/modules/surgery/lipoplasty.dm +++ b/code/modules/surgery/lipoplasty.dm @@ -24,6 +24,7 @@ /obj/item/hatchet = 35, /obj/item/knife/butcher = 25) time = 64 + surgery_effects_mood = TRUE preop_sound = list( /obj/item/circular_saw = 'sound/surgery/saw.ogg', /obj/item = 'sound/surgery/scalpel1.ogg', diff --git a/code/modules/surgery/lobectomy.dm b/code/modules/surgery/lobectomy.dm index 83f9279818b8d..4ed1bad1c0bef 100644 --- a/code/modules/surgery/lobectomy.dm +++ b/code/modules/surgery/lobectomy.dm @@ -30,6 +30,7 @@ preop_sound = 'sound/surgery/scalpel1.ogg' success_sound = 'sound/surgery/organ1.ogg' failure_sound = 'sound/surgery/organ2.ogg' + surgery_effects_mood = TRUE /datum/surgery_step/lobectomy/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) display_results( diff --git a/code/modules/surgery/mechanic_steps.dm b/code/modules/surgery/mechanic_steps.dm index bb07fb72dedf5..309090a03cae0 100644 --- a/code/modules/surgery/mechanic_steps.dm +++ b/code/modules/surgery/mechanic_steps.dm @@ -14,11 +14,11 @@ display_results( user, target, - span_notice("You begin to unscrew the shell of [target]'s [parse_zone(target_zone)]..."), - span_notice("[user] begins to unscrew the shell of [target]'s [parse_zone(target_zone)]."), - span_notice("[user] begins to unscrew the shell of [target]'s [parse_zone(target_zone)]."), + span_notice("You begin to unscrew the shell of [target]'s [target.parse_zone_with_bodypart(target_zone)]..."), + span_notice("[user] begins to unscrew the shell of [target]'s [target.parse_zone_with_bodypart(target_zone)]."), + span_notice("[user] begins to unscrew the shell of [target]'s [target.parse_zone_with_bodypart(target_zone)]."), ) - display_pain(target, "You can feel your [parse_zone(target_zone)] grow numb as the sensory panel is unscrewed.", TRUE) + display_pain(target, "You can feel your [target.parse_zone_with_bodypart(target_zone)] grow numb as the sensory panel is unscrewed.", TRUE) /datum/surgery_step/mechanic_open/tool_check(mob/user, obj/item/tool) if(implement_type == /obj/item && !tool.get_sharpness()) @@ -44,11 +44,11 @@ display_results( user, target, - span_notice("You begin to screw the shell of [target]'s [parse_zone(target_zone)]..."), - span_notice("[user] begins to screw the shell of [target]'s [parse_zone(target_zone)]."), - span_notice("[user] begins to screw the shell of [target]'s [parse_zone(target_zone)]."), + span_notice("You begin to screw the shell of [target]'s [target.parse_zone_with_bodypart(target_zone)]..."), + span_notice("[user] begins to screw the shell of [target]'s [target.parse_zone_with_bodypart(target_zone)]."), + span_notice("[user] begins to screw the shell of [target]'s [target.parse_zone_with_bodypart(target_zone)]."), ) - display_pain(target, "You feel the faint pricks of sensation return as your [parse_zone(target_zone)]'s panel is screwed in.", TRUE) + display_pain(target, "You feel the faint pricks of sensation return as your [target.parse_zone_with_bodypart(target_zone)]'s panel is screwed in.", TRUE) /datum/surgery_step/mechanic_close/tool_check(mob/user, obj/item/tool) if(implement_type == /obj/item && !tool.get_sharpness()) @@ -72,11 +72,11 @@ display_results( user, target, - span_notice("You begin to prepare electronics in [target]'s [parse_zone(target_zone)]..."), - span_notice("[user] begins to prepare electronics in [target]'s [parse_zone(target_zone)]."), - span_notice("[user] begins to prepare electronics in [target]'s [parse_zone(target_zone)]."), + span_notice("You begin to prepare electronics in [target]'s [target.parse_zone_with_bodypart(target_zone)]..."), + span_notice("[user] begins to prepare electronics in [target]'s [target.parse_zone_with_bodypart(target_zone)]."), + span_notice("[user] begins to prepare electronics in [target]'s [target.parse_zone_with_bodypart(target_zone)]."), ) - display_pain(target, "You can feel a faint buzz in your [parse_zone(target_zone)] as the electronics reboot.", TRUE) + display_pain(target, "You can feel a faint buzz in your [target.parse_zone_with_bodypart(target_zone)] as the electronics reboot.", TRUE) //unwrench /datum/surgery_step/mechanic_unwrench @@ -91,11 +91,11 @@ display_results( user, target, - span_notice("You begin to unwrench some bolts in [target]'s [parse_zone(target_zone)]..."), - span_notice("[user] begins to unwrench some bolts in [target]'s [parse_zone(target_zone)]."), - span_notice("[user] begins to unwrench some bolts in [target]'s [parse_zone(target_zone)]."), + span_notice("You begin to unwrench some bolts in [target]'s [target.parse_zone_with_bodypart(target_zone)]..."), + span_notice("[user] begins to unwrench some bolts in [target]'s [target.parse_zone_with_bodypart(target_zone)]."), + span_notice("[user] begins to unwrench some bolts in [target]'s [target.parse_zone_with_bodypart(target_zone)]."), ) - display_pain(target, "You feel a jostle in your [parse_zone(target_zone)] as the bolts begin to loosen.", TRUE) + display_pain(target, "You feel a jostle in your [target.parse_zone_with_bodypart(target_zone)] as the bolts begin to loosen.", TRUE) /datum/surgery_step/mechanic_unwrench/tool_check(mob/user, obj/item/tool) if(tool.usesound) @@ -116,11 +116,11 @@ display_results( user, target, - span_notice("You begin to wrench some bolts in [target]'s [parse_zone(target_zone)]..."), - span_notice("[user] begins to wrench some bolts in [target]'s [parse_zone(target_zone)]."), - span_notice("[user] begins to wrench some bolts in [target]'s [parse_zone(target_zone)]."), + span_notice("You begin to wrench some bolts in [target]'s [target.parse_zone_with_bodypart(target_zone)]..."), + span_notice("[user] begins to wrench some bolts in [target]'s [target.parse_zone_with_bodypart(target_zone)]."), + span_notice("[user] begins to wrench some bolts in [target]'s [target.parse_zone_with_bodypart(target_zone)]."), ) - display_pain(target, "You feel a jostle in your [parse_zone(target_zone)] as the bolts begin to tighten.", TRUE) + display_pain(target, "You feel a jostle in your [target.parse_zone_with_bodypart(target_zone)] as the bolts begin to tighten.", TRUE) /datum/surgery_step/mechanic_wrench/tool_check(mob/user, obj/item/tool) if(tool.usesound) @@ -140,11 +140,11 @@ display_results( user, target, - span_notice("You begin to open the hatch holders in [target]'s [parse_zone(target_zone)]..."), - span_notice("[user] begins to open the hatch holders in [target]'s [parse_zone(target_zone)]."), - span_notice("[user] begins to open the hatch holders in [target]'s [parse_zone(target_zone)]."), + span_notice("You begin to open the hatch holders in [target]'s [target.parse_zone_with_bodypart(target_zone)]..."), + span_notice("[user] begins to open the hatch holders in [target]'s [target.parse_zone_with_bodypart(target_zone)]."), + span_notice("[user] begins to open the hatch holders in [target]'s [target.parse_zone_with_bodypart(target_zone)]."), ) - display_pain(target, "The last faint pricks of tactile sensation fade from your [parse_zone(target_zone)] as the hatch is opened.", TRUE) + display_pain(target, "The last faint pricks of tactile sensation fade from your [target.parse_zone_with_bodypart(target_zone)] as the hatch is opened.", TRUE) /datum/surgery_step/open_hatch/tool_check(mob/user, obj/item/tool) if(tool.usesound) diff --git a/code/modules/surgery/organ_manipulation.dm b/code/modules/surgery/organ_manipulation.dm index 2b2b1566de161..6f5ab21c82815 100644 --- a/code/modules/surgery/organ_manipulation.dm +++ b/code/modules/surgery/organ_manipulation.dm @@ -158,7 +158,7 @@ if(!isorgan(target_organ)) if (target_zone == BODY_ZONE_PRECISE_EYES) target_zone = check_zone(target_zone) - to_chat(user, span_warning("You cannot put [target_organ] into [target]'s [parse_zone(target_zone)]!")) + to_chat(user, span_warning("You cannot put [target_organ] into [target]'s [target.parse_zone_with_bodypart(target_zone)]!")) return SURGERY_STEP_FAIL tool = target_organ if(isorgan(tool)) @@ -167,7 +167,7 @@ success_sound = 'sound/surgery/organ2.ogg' target_organ = tool if(target_zone != target_organ.zone || target.get_organ_slot(target_organ.slot)) - to_chat(user, span_warning("There is no room for [target_organ] in [target]'s [parse_zone(target_zone)]!")) + to_chat(user, span_warning("There is no room for [target_organ] in [target]'s [target.parse_zone_with_bodypart(target_zone)]!")) return SURGERY_STEP_FAIL var/obj/item/organ/meatslab = tool if(!meatslab.useable) @@ -182,11 +182,11 @@ display_results( user, target, - span_notice("You begin to insert [tool] into [target]'s [parse_zone(target_zone)]..."), - span_notice("[user] begins to insert [tool] into [target]'s [parse_zone(target_zone)]."), - span_notice("[user] begins to insert something into [target]'s [parse_zone(target_zone)]."), + span_notice("You begin to insert [tool] into [target]'s [target.parse_zone_with_bodypart(target_zone)]..."), + span_notice("[user] begins to insert [tool] into [target]'s [target.parse_zone_with_bodypart(target_zone)]."), + span_notice("[user] begins to insert something into [target]'s [target.parse_zone_with_bodypart(target_zone)]."), ) - display_pain(target, "You can feel something being placed in your [parse_zone(target_zone)]!") + display_pain(target, "You can feel something being placed in your [target.parse_zone_with_bodypart(target_zone)]!") else if(implement_type in implements_extract) @@ -199,7 +199,7 @@ if (target_zone == BODY_ZONE_PRECISE_EYES) target_zone = check_zone(target_zone) if(!length(organs)) - to_chat(user, span_warning("There are no removable organs in [target]'s [parse_zone(target_zone)]!")) + to_chat(user, span_warning("There are no removable organs in [target]'s [target.parse_zone_with_bodypart(target_zone)]!")) return SURGERY_STEP_FAIL else for(var/obj/item/organ/organ in organs) @@ -221,11 +221,11 @@ display_results( user, target, - span_notice("You begin to extract [target_organ] from [target]'s [parse_zone(target_zone)]..."), - span_notice("[user] begins to extract [target_organ] from [target]'s [parse_zone(target_zone)]."), - span_notice("[user] begins to extract something from [target]'s [parse_zone(target_zone)]."), + span_notice("You begin to extract [target_organ] from [target]'s [target.parse_zone_with_bodypart(target_zone)]..."), + span_notice("[user] begins to extract [target_organ] from [target]'s [target.parse_zone_with_bodypart(target_zone)]."), + span_notice("[user] begins to extract something from [target]'s [target.parse_zone_with_bodypart(target_zone)]."), ) - display_pain(target, "You can feel your [target_organ.name] being removed from your [parse_zone(target_zone)]!") + display_pain(target, "You can feel your [target_organ.name] being removed from your [target.parse_zone_with_bodypart(target_zone)]!") else return SURGERY_STEP_FAIL @@ -247,11 +247,11 @@ display_results( user, target, - span_notice("You insert [tool] into [target]'s [parse_zone(target_zone)]."), - span_notice("[user] inserts [tool] into [target]'s [parse_zone(target_zone)]!"), - span_notice("[user] inserts something into [target]'s [parse_zone(target_zone)]!"), + span_notice("You insert [tool] into [target]'s [target.parse_zone_with_bodypart(target_zone)]."), + span_notice("[user] inserts [tool] into [target]'s [target.parse_zone_with_bodypart(target_zone)]!"), + span_notice("[user] inserts something into [target]'s [target.parse_zone_with_bodypart(target_zone)]!"), ) - display_pain(target, "Your [parse_zone(target_zone)] throbs with pain as your new [tool.name] comes to life!") + display_pain(target, "Your [target.parse_zone_with_bodypart(target_zone)] throbs with pain as your new [tool.name] comes to life!") target_organ.on_surgical_insertion(user, target, target_zone, tool) else target_organ.forceMove(target.loc) @@ -261,11 +261,11 @@ display_results( user, target, - span_notice("You successfully extract [target_organ] from [target]'s [parse_zone(target_zone)]."), - span_notice("[user] successfully extracts [target_organ] from [target]'s [parse_zone(target_zone)]!"), - span_notice("[user] successfully extracts something from [target]'s [parse_zone(target_zone)]!"), + span_notice("You successfully extract [target_organ] from [target]'s [target.parse_zone_with_bodypart(target_zone)]."), + span_notice("[user] successfully extracts [target_organ] from [target]'s [target.parse_zone_with_bodypart(target_zone)]!"), + span_notice("[user] successfully extracts something from [target]'s [target.parse_zone_with_bodypart(target_zone)]!"), ) - display_pain(target, "Your [parse_zone(target_zone)] throbs with pain, you can't feel your [target_organ.name] anymore!") + display_pain(target, "Your [target.parse_zone_with_bodypart(target_zone)] throbs with pain, you can't feel your [target_organ.name] anymore!") log_combat(user, target, "surgically removed [target_organ.name] from", addition="COMBAT MODE: [uppertext(user.combat_mode)]") target_organ.Remove(target) target_organ.forceMove(get_turf(target)) @@ -274,9 +274,9 @@ display_results( user, target, - span_warning("You can't extract anything from [target]'s [parse_zone(target_zone)]!"), - span_notice("[user] can't seem to extract anything from [target]'s [parse_zone(target_zone)]!"), - span_notice("[user] can't seem to extract anything from [target]'s [parse_zone(target_zone)]!"), + span_warning("You can't extract anything from [target]'s [target.parse_zone_with_bodypart(target_zone)]!"), + span_notice("[user] can't seem to extract anything from [target]'s [target.parse_zone_with_bodypart(target_zone)]!"), + span_notice("[user] can't seem to extract anything from [target]'s [target.parse_zone_with_bodypart(target_zone)]!"), ) if(HAS_MIND_TRAIT(user, TRAIT_MORBID) && ishuman(user)) var/mob/living/carbon/human/morbid_weirdo = user diff --git a/code/modules/surgery/organic_steps.dm b/code/modules/surgery/organic_steps.dm index aa697cb107271..ce9dec4543846 100644 --- a/code/modules/surgery/organic_steps.dm +++ b/code/modules/surgery/organic_steps.dm @@ -11,16 +11,17 @@ time = 16 preop_sound = 'sound/surgery/scalpel1.ogg' success_sound = 'sound/surgery/scalpel2.ogg' + surgery_effects_mood = TRUE /datum/surgery_step/incise/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) display_results( user, target, - span_notice("You begin to make an incision in [target]'s [parse_zone(target_zone)]..."), - span_notice("[user] begins to make an incision in [target]'s [parse_zone(target_zone)]."), - span_notice("[user] begins to make an incision in [target]'s [parse_zone(target_zone)]."), + span_notice("You begin to make an incision in [target]'s [target.parse_zone_with_bodypart(target_zone)]..."), + span_notice("[user] begins to make an incision in [target]'s [target.parse_zone_with_bodypart(target_zone)]."), + span_notice("[user] begins to make an incision in [target]'s [target.parse_zone_with_bodypart(target_zone)]."), ) - display_pain(target, "You feel a stabbing in your [parse_zone(target_zone)].") + display_pain(target, "You feel a stabbing in your [target.parse_zone_with_bodypart(target_zone)].") /datum/surgery_step/incise/tool_check(mob/user, obj/item/tool) if(implement_type == /obj/item && !tool.get_sharpness()) @@ -35,9 +36,9 @@ display_results( user, target, - span_notice("Blood pools around the incision in [human_target]'s [parse_zone(target_zone)]."), - span_notice("Blood pools around the incision in [human_target]'s [parse_zone(target_zone)]."), - span_notice("Blood pools around the incision in [human_target]'s [parse_zone(target_zone)]."), + span_notice("Blood pools around the incision in [human_target]'s [target.parse_zone_with_bodypart(target_zone)]."), + span_notice("Blood pools around the incision in [human_target]'s [target.parse_zone_with_bodypart(target_zone)]."), + span_notice("Blood pools around the incision in [human_target]'s [target.parse_zone_with_bodypart(target_zone)]."), ) var/obj/item/bodypart/target_bodypart = target.get_bodypart(target_zone) if(target_bodypart) @@ -48,11 +49,11 @@ display_results( user, target, - span_notice("You begin to carefully make an incision in [target]'s [parse_zone(target_zone)]..."), - span_notice("[user] begins to carefully make an incision in [target]'s [parse_zone(target_zone)]."), - span_notice("[user] begins to carefully make an incision in [target]'s [parse_zone(target_zone)]."), + span_notice("You begin to carefully make an incision in [target]'s [target.parse_zone_with_bodypart(target_zone)]..."), + span_notice("[user] begins to carefully make an incision in [target]'s [target.parse_zone_with_bodypart(target_zone)]."), + span_notice("[user] begins to carefully make an incision in [target]'s [target.parse_zone_with_bodypart(target_zone)]."), ) - display_pain(target, "You feel a careful stabbing in your [parse_zone(target_zone)].") + display_pain(target, "You feel a careful stabbing in your [target.parse_zone_with_bodypart(target_zone)].") //clamp bleeders /datum/surgery_step/clamp_bleeders @@ -69,11 +70,11 @@ display_results( user, target, - span_notice("You begin to clamp bleeders in [target]'s [parse_zone(target_zone)]..."), - span_notice("[user] begins to clamp bleeders in [target]'s [parse_zone(target_zone)]."), - span_notice("[user] begins to clamp bleeders in [target]'s [parse_zone(target_zone)]."), + span_notice("You begin to clamp bleeders in [target]'s [target.parse_zone_with_bodypart(target_zone)]..."), + span_notice("[user] begins to clamp bleeders in [target]'s [target.parse_zone_with_bodypart(target_zone)]."), + span_notice("[user] begins to clamp bleeders in [target]'s [target.parse_zone_with_bodypart(target_zone)]."), ) - display_pain(target, "You feel a pinch as the bleeding in your [parse_zone(target_zone)] is slowed.") + display_pain(target, "You feel a pinch as the bleeding in your [target.parse_zone_with_bodypart(target_zone)] is slowed.") /datum/surgery_step/clamp_bleeders/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results) if(locate(/datum/surgery_step/saw) in surgery.steps) @@ -101,11 +102,11 @@ display_results( user, target, - span_notice("You begin to retract the skin in [target]'s [parse_zone(target_zone)]..."), - span_notice("[user] begins to retract the skin in [target]'s [parse_zone(target_zone)]."), - span_notice("[user] begins to retract the skin in [target]'s [parse_zone(target_zone)]."), + span_notice("You begin to retract the skin in [target]'s [target.parse_zone_with_bodypart(target_zone)]..."), + span_notice("[user] begins to retract the skin in [target]'s [target.parse_zone_with_bodypart(target_zone)]."), + span_notice("[user] begins to retract the skin in [target]'s [target.parse_zone_with_bodypart(target_zone)]."), ) - display_pain(target, "You feel a severe stinging pain spreading across your [parse_zone(target_zone)] as the skin is pulled back!") + display_pain(target, "You feel a severe stinging pain spreading across your [target.parse_zone_with_bodypart(target_zone)] as the skin is pulled back!") //close incision /datum/surgery_step/close @@ -123,11 +124,11 @@ display_results( user, target, - span_notice("You begin to mend the incision in [target]'s [parse_zone(target_zone)]..."), - span_notice("[user] begins to mend the incision in [target]'s [parse_zone(target_zone)]."), - span_notice("[user] begins to mend the incision in [target]'s [parse_zone(target_zone)]."), + span_notice("You begin to mend the incision in [target]'s [target.parse_zone_with_bodypart(target_zone)]..."), + span_notice("[user] begins to mend the incision in [target]'s [target.parse_zone_with_bodypart(target_zone)]."), + span_notice("[user] begins to mend the incision in [target]'s [target.parse_zone_with_bodypart(target_zone)]."), ) - display_pain(target, "Your [parse_zone(target_zone)] is being burned!") + display_pain(target, "Your [target.parse_zone_with_bodypart(target_zone)] is being burned!") /datum/surgery_step/close/tool_check(mob/user, obj/item/tool) if(implement_type == TOOL_WELDER || implement_type == /obj/item) @@ -168,16 +169,17 @@ /obj/item = 'sound/surgery/scalpel1.ogg', ) success_sound = 'sound/surgery/organ2.ogg' + surgery_effects_mood = TRUE /datum/surgery_step/saw/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) display_results( user, target, - span_notice("You begin to saw through the bone in [target]'s [parse_zone(target_zone)]..."), - span_notice("[user] begins to saw through the bone in [target]'s [parse_zone(target_zone)]."), - span_notice("[user] begins to saw through the bone in [target]'s [parse_zone(target_zone)]."), + span_notice("You begin to saw through the bone in [target]'s [target.parse_zone_with_bodypart(target_zone)]..."), + span_notice("[user] begins to saw through the bone in [target]'s [target.parse_zone_with_bodypart(target_zone)]."), + span_notice("[user] begins to saw through the bone in [target]'s [target.parse_zone_with_bodypart(target_zone)]."), ) - display_pain(target, "You feel a horrid ache spread through the inside of your [parse_zone(target_zone)]!") + display_pain(target, "You feel a horrid ache spread through the inside of your [target.parse_zone_with_bodypart(target_zone)]!") /datum/surgery_step/saw/tool_check(mob/user, obj/item/tool) if(implement_type == /obj/item && !(tool.get_sharpness() && (tool.force >= 10))) @@ -189,11 +191,11 @@ display_results( user, target, - span_notice("You saw [target]'s [parse_zone(target_zone)] open."), - span_notice("[user] saws [target]'s [parse_zone(target_zone)] open!"), - span_notice("[user] saws [target]'s [parse_zone(target_zone)] open!"), + span_notice("You saw [target]'s [target.parse_zone_with_bodypart(target_zone)] open."), + span_notice("[user] saws [target]'s [target.parse_zone_with_bodypart(target_zone)] open!"), + span_notice("[user] saws [target]'s [target.parse_zone_with_bodypart(target_zone)] open!"), ) - display_pain(target, "It feels like something just broke in your [parse_zone(target_zone)]!") + display_pain(target, "It feels like something just broke in your [target.parse_zone_with_bodypart(target_zone)]!") return ..() //drill bone @@ -211,18 +213,18 @@ display_results( user, target, - span_notice("You begin to drill into the bone in [target]'s [parse_zone(target_zone)]..."), - span_notice("[user] begins to drill into the bone in [target]'s [parse_zone(target_zone)]."), - span_notice("[user] begins to drill into the bone in [target]'s [parse_zone(target_zone)]."), + span_notice("You begin to drill into the bone in [target]'s [target.parse_zone_with_bodypart(target_zone)]..."), + span_notice("[user] begins to drill into the bone in [target]'s [target.parse_zone_with_bodypart(target_zone)]."), + span_notice("[user] begins to drill into the bone in [target]'s [target.parse_zone_with_bodypart(target_zone)]."), ) - display_pain(target, "You feel a horrible piercing pain in your [parse_zone(target_zone)]!") + display_pain(target, "You feel a horrible piercing pain in your [target.parse_zone_with_bodypart(target_zone)]!") /datum/surgery_step/drill/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results = FALSE) display_results( user, target, - span_notice("You drill into [target]'s [parse_zone(target_zone)]."), - span_notice("[user] drills into [target]'s [parse_zone(target_zone)]!"), - span_notice("[user] drills into [target]'s [parse_zone(target_zone)]!"), + span_notice("You drill into [target]'s [target.parse_zone_with_bodypart(target_zone)]."), + span_notice("[user] drills into [target]'s [target.parse_zone_with_bodypart(target_zone)]!"), + span_notice("[user] drills into [target]'s [target.parse_zone_with_bodypart(target_zone)]!"), ) return ..() diff --git a/code/modules/surgery/organs/_organ.dm b/code/modules/surgery/organs/_organ.dm index 366f0f0087ff2..e4bb7dfe769fe 100644 --- a/code/modules/surgery/organs/_organ.dm +++ b/code/modules/surgery/organs/_organ.dm @@ -82,10 +82,11 @@ INITIALIZE_IMMEDIATE(/obj/item/organ) /obj/item/organ/Destroy() if(bodypart_owner && !owner && !QDELETED(bodypart_owner)) bodypart_remove(bodypart_owner) - else if(owner) - // The special flag is important, because otherwise mobs can die - // while undergoing transformation into different mobs. + else if(owner && QDESTROYING(owner)) + // The mob is being deleted, don't update the mob Remove(owner, special=TRUE) + else if(owner) + Remove(owner) else STOP_PROCESSING(SSobj, src) return ..() @@ -317,18 +318,23 @@ INITIALIZE_IMMEDIATE(/obj/item/organ) replacement.set_organ_damage(damage) /// Called by medical scanners to get a simple summary of how healthy the organ is. Returns an empty string if things are fine. -/obj/item/organ/proc/get_status_text() - var/status = "" +/obj/item/organ/proc/get_status_text(advanced) + if(advanced && (organ_flags & ORGAN_PROMINENT)) + return "Harmful Foreign Body" + if(owner.has_reagent(/datum/reagent/inverse/technetium)) - status = "[round((damage/maxHealth)*100, 1)]% damaged." - else if(organ_flags & ORGAN_FAILING) - status = "Non-Functional" - else if(damage > high_threshold) - status = "Severely Damaged" - else if (damage > low_threshold) - status = "Mildly Damaged" - - return status + return "[round((damage/maxHealth)*100, 1)]% damaged." + + if(organ_flags & ORGAN_FAILING) + return "Non-Functional" + + if(damage > high_threshold) + return "Severely Damaged" + + if (damage > low_threshold) + return "Mildly Damaged" + + return "" /// Tries to replace the existing organ on the passed mob with this one, with special handling for replacing a brain without ghosting target /obj/item/organ/proc/replace_into(mob/living/carbon/new_owner) diff --git a/code/modules/surgery/organs/external/_external_organ.dm b/code/modules/surgery/organs/external/_external_organ.dm index b58f08fe97d7e..a054bc741e632 100644 --- a/code/modules/surgery/organs/external/_external_organ.dm +++ b/code/modules/surgery/organs/external/_external_organ.dm @@ -182,7 +182,7 @@ return TRUE /datum/bodypart_overlay/mutant/horns/get_global_feature_list() - return GLOB.horns_list + return SSaccessories.horns_list ///The frills of a lizard (like weird fin ears) /obj/item/organ/external/frills @@ -209,7 +209,7 @@ return FALSE /datum/bodypart_overlay/mutant/frills/get_global_feature_list() - return GLOB.frills_list + return SSaccessories.frills_list ///Guess what part of the lizard this is? /obj/item/organ/external/snout @@ -238,7 +238,7 @@ return FALSE /datum/bodypart_overlay/mutant/snout/get_global_feature_list() - return GLOB.snouts_list + return SSaccessories.snouts_list ///A moth's antennae /obj/item/organ/external/antennae @@ -315,7 +315,7 @@ burn_datum = fetch_sprite_datum(burn_datum) //turn the path into the singleton instance /datum/bodypart_overlay/mutant/antennae/get_global_feature_list() - return GLOB.moth_antennae_list + return SSaccessories.moth_antennae_list /datum/bodypart_overlay/mutant/antennae/get_base_icon_state() return burnt ? burn_datum.icon_state : sprite_datum.icon_state @@ -347,7 +347,7 @@ var/color_inverse_base = 255 /datum/bodypart_overlay/mutant/pod_hair/get_global_feature_list() - return GLOB.pod_hair_list + return SSaccessories.pod_hair_list /datum/bodypart_overlay/mutant/pod_hair/color_image(image/overlay, draw_layer, obj/item/bodypart/limb) if(draw_layer != bitflag_to_layer(color_swapped_layer)) diff --git a/code/modules/surgery/organs/external/spines.dm b/code/modules/surgery/organs/external/spines.dm index 743b7fa8d47f2..86bff9a768939 100644 --- a/code/modules/surgery/organs/external/spines.dm +++ b/code/modules/surgery/organs/external/spines.dm @@ -32,7 +32,7 @@ feature_key = "spines" /datum/bodypart_overlay/mutant/spines/get_global_feature_list() - return GLOB.spines_list + return SSaccessories.spines_list /datum/bodypart_overlay/mutant/spines/can_draw_on_bodypart(mob/living/carbon/human/human) . = ..() diff --git a/code/modules/surgery/organs/external/tails.dm b/code/modules/surgery/organs/external/tails.dm index ab71e3ac9f35f..e4cd3f50a4997 100644 --- a/code/modules/surgery/organs/external/tails.dm +++ b/code/modules/surgery/organs/external/tails.dm @@ -23,15 +23,21 @@ /obj/item/organ/external/tail/Insert(mob/living/carbon/receiver, special, movement_flags) . = ..() if(.) - original_owner ||= WEAKREF(receiver) - receiver.clear_mood_event("tail_lost") receiver.clear_mood_event("tail_balance_lost") + if(!special) // if some admin wants to give someone tail moodles for tail shenanigans, they can spawn it and do it by hand + original_owner ||= WEAKREF(receiver) + + // If it's your tail, an infinite debuff is replaced with a timed one + // If it's not your tail but of same species, I guess it works, but we are more sad + // If it's not your tail AND of different species, we are horrified if(IS_WEAKREF_OF(receiver, original_owner)) - receiver.clear_mood_event("wrong_tail_regained") + receiver.add_mood_event("tail_regained", /datum/mood_event/tail_regained_right) else if(type in receiver.dna.species.external_organs) - receiver.add_mood_event("wrong_tail_regained", /datum/mood_event/tail_regained_wrong) + receiver.add_mood_event("tail_regained", /datum/mood_event/tail_regained_species) + else + receiver.add_mood_event("tail_regained", /datum/mood_event/tail_regained_wrong) /obj/item/organ/external/tail/on_bodypart_insert(obj/item/bodypart/bodypart) var/obj/item/organ/external/spines/our_spines = bodypart.owner.get_organ_slot(ORGAN_SLOT_EXTERNAL_SPINES) @@ -75,6 +81,8 @@ if(wag_flags & WAG_WAGGING) stop_wag(organ_owner) + organ_owner.clear_mood_event("tail_regained") + if(type in organ_owner.dna.species.external_organs) organ_owner.add_mood_event("tail_lost", /datum/mood_event/tail_lost) organ_owner.add_mood_event("tail_balance_lost", /datum/mood_event/tail_balance_lost) @@ -151,10 +159,10 @@ wag_flags = WAG_ABLE /datum/bodypart_overlay/mutant/tail/get_global_feature_list() - return GLOB.tails_list_human + return SSaccessories.tails_list_human /obj/item/organ/external/tail/cat/get_butt_sprite() - return BUTT_SPRITE_CAT + return icon('icons/mob/butts.dmi', BUTT_SPRITE_CAT) ///Cat tail bodypart overlay /datum/bodypart_overlay/mutant/tail/cat @@ -175,7 +183,7 @@ feature_key = "tail_monkey" /datum/bodypart_overlay/mutant/tail/monkey/get_global_feature_list() - return GLOB.tails_list_monkey + return SSaccessories.tails_list_monkey /obj/item/organ/external/tail/lizard name = "lizard tail" @@ -192,7 +200,7 @@ feature_key = "tail_lizard" /datum/bodypart_overlay/mutant/tail/lizard/get_global_feature_list() - return GLOB.tails_list_lizard + return SSaccessories.tails_list_lizard /obj/item/organ/external/tail/lizard/fake name = "fabricated lizard tail" @@ -208,7 +216,7 @@ var/tail_spine_key = NONE /datum/bodypart_overlay/mutant/tail_spines/get_global_feature_list() - return GLOB.tail_spines_list + return SSaccessories.tail_spines_list /datum/bodypart_overlay/mutant/tail_spines/get_base_icon_state() return (!isnull(tail_spine_key) ? "[tail_spine_key]_" : "") + (wagging ? "wagging_" : "") + sprite_datum.icon_state // Select the wagging state if appropriate diff --git a/code/modules/surgery/organs/external/wings/functional_wings.dm b/code/modules/surgery/organs/external/wings/functional_wings.dm index aacf6f08f6a5c..23f897bce95a2 100644 --- a/code/modules/surgery/organs/external/wings/functional_wings.dm +++ b/code/modules/surgery/organs/external/wings/functional_wings.dm @@ -8,7 +8,7 @@ /datum/action/innate/flight/Activate() var/mob/living/carbon/human/human = owner var/obj/item/organ/external/wings/functional/wings = human.get_organ_slot(ORGAN_SLOT_EXTERNAL_WINGS) - if(wings && wings.can_fly(human)) + if(wings?.can_fly(human)) wings.toggle_flight(human) if(!(human.movement_type & FLYING)) to_chat(human, span_notice("You settle gently back onto the ground...")) @@ -29,28 +29,31 @@ // grind_results = list(/datum/reagent/flightpotion = 5) food_reagents = list(/datum/reagent/flightpotion = 5) +/obj/item/organ/external/wings/functional/Destroy() + QDEL_NULL(fly) + return ..() + /obj/item/organ/external/wings/functional/Insert(mob/living/carbon/receiver, special, movement_flags) . = ..() - if(. && isnull(fly)) + if(!.) + return + if(QDELETED(fly)) fly = new - fly.Grant(receiver) + fly.Grant(receiver) /obj/item/organ/external/wings/functional/Remove(mob/living/carbon/organ_owner, special, movement_flags) . = ..() - - fly.Remove(organ_owner) - + fly?.Remove(organ_owner) if(wings_open) toggle_flight(organ_owner) /obj/item/organ/external/wings/functional/on_life(seconds_per_tick, times_fired) . = ..() - handle_flight(owner) ///Called on_life(). Handle flight code and check if we're still flying /obj/item/organ/external/wings/functional/proc/handle_flight(mob/living/carbon/human/human) - if(human.movement_type & ~FLYING) + if(!(human.movement_type & FLYING)) return FALSE if(!can_fly(human)) toggle_flight(human) @@ -112,19 +115,22 @@ human.remove_traits(list(TRAIT_NO_FLOATING_ANIM, TRAIT_MOVE_FLYING), SPECIES_FLIGHT_TRAIT) passtable_off(human, SPECIES_FLIGHT_TRAIT) close_wings() - human.update_body_parts() + + human.refresh_gravity() ///SPREAD OUR WINGS AND FLLLLLYYYYYY /obj/item/organ/external/wings/functional/proc/open_wings() var/datum/bodypart_overlay/mutant/wings/functional/overlay = bodypart_overlay overlay.open_wings() wings_open = TRUE + owner.update_body_parts() ///close our wings /obj/item/organ/external/wings/functional/proc/close_wings() var/datum/bodypart_overlay/mutant/wings/functional/overlay = bodypart_overlay wings_open = FALSE overlay.close_wings() + owner.update_body_parts() if(isturf(owner?.loc)) var/turf/location = loc @@ -139,9 +145,9 @@ /datum/bodypart_overlay/mutant/wings/functional/get_global_feature_list() if(wings_open) - return GLOB.wings_open_list + return SSaccessories.wings_open_list else - return GLOB.wings_list + return SSaccessories.wings_list ///Update our wingsprite to the open wings variant /datum/bodypart_overlay/mutant/wings/functional/proc/open_wings() @@ -186,6 +192,9 @@ desc = "Powered by pure edgy-teenager-notebook-scribblings. Just kidding. But seriously, how do these keep you flying?!" sprite_accessory_override = /datum/sprite_accessory/wings/skeleton +/obj/item/organ/external/wings/functional/moth/make_flap_sound(mob/living/carbon/wing_owner) + playsound(wing_owner, 'sound/voice/moth/moth_flutter.ogg', 50, TRUE) + ///mothra wings, which relate to moths. /obj/item/organ/external/wings/functional/moth/mothra name = "mothra wings" diff --git a/code/modules/surgery/organs/external/wings/moth_wings.dm b/code/modules/surgery/organs/external/wings/moth_wings.dm index f4e0f156e703e..87b944622aa09 100644 --- a/code/modules/surgery/organs/external/wings/moth_wings.dm +++ b/code/modules/surgery/organs/external/wings/moth_wings.dm @@ -25,6 +25,9 @@ UnregisterSignal(organ_owner, list(COMSIG_HUMAN_BURNING, COMSIG_LIVING_POST_FULLY_HEAL, COMSIG_MOVABLE_PRE_MOVE)) REMOVE_TRAIT(organ_owner, TRAIT_FREE_FLOAT_MOVEMENT, REF(src)) +/obj/item/organ/external/wings/moth/make_flap_sound(mob/living/carbon/wing_owner) + playsound(wing_owner, 'sound/voice/moth/moth_flutter.ogg', 50, TRUE) + /obj/item/organ/external/wings/moth/can_soften_fall() return !burnt @@ -84,7 +87,7 @@ burn_datum = fetch_sprite_datum(burn_datum) /datum/bodypart_overlay/mutant/wings/moth/get_global_feature_list() - return GLOB.moth_wings_list + return SSaccessories.moth_wings_list /datum/bodypart_overlay/mutant/wings/moth/can_draw_on_bodypart(mob/living/carbon/human/human) if(!(human.wear_suit?.flags_inv & HIDEMUTWINGS)) diff --git a/code/modules/surgery/organs/external/wings/wings.dm b/code/modules/surgery/organs/external/wings/wings.dm index 189c03e0277dd..775ffebf54cdf 100644 --- a/code/modules/surgery/organs/external/wings/wings.dm +++ b/code/modules/surgery/organs/external/wings/wings.dm @@ -13,6 +13,10 @@ /obj/item/organ/external/wings/proc/can_soften_fall() return TRUE +///Implement as needed to play a sound effect on *flap emote +/obj/item/organ/external/wings/proc/make_flap_sound(mob/living/carbon/wing_owner) + return + ///Bodypart overlay of default wings. Does not have any wing functionality /datum/bodypart_overlay/mutant/wings layers = ALL_EXTERNAL_OVERLAYS diff --git a/code/modules/surgery/organs/internal/appendix/_appendix.dm b/code/modules/surgery/organs/internal/appendix/_appendix.dm index e5190f1282ec7..83ed8da84aca0 100644 --- a/code/modules/surgery/organs/internal/appendix/_appendix.dm +++ b/code/modules/surgery/organs/internal/appendix/_appendix.dm @@ -87,7 +87,7 @@ ADD_TRAIT(organ_owner, TRAIT_DISEASELIKE_SEVERITY_MEDIUM, type) organ_owner.med_hud_set_status() -/obj/item/organ/internal/appendix/get_status_text() +/obj/item/organ/internal/appendix/get_status_text(advanced) if((!(organ_flags & ORGAN_FAILING)) && inflamation_stage) return "Inflamed" else diff --git a/code/modules/surgery/organs/internal/heart/heart_anomalock.dm b/code/modules/surgery/organs/internal/heart/heart_anomalock.dm new file mode 100644 index 0000000000000..e9da6197ed273 --- /dev/null +++ b/code/modules/surgery/organs/internal/heart/heart_anomalock.dm @@ -0,0 +1,201 @@ +/*! + * Contains Voltaic Combat Cyberheart + */ +#define DOAFTER_IMPLANTING_HEART "implanting" + +/obj/item/organ/internal/heart/cybernetic/anomalock + name = "Voltaic Combat Cyberheart" + desc = "A cutting-edge cyberheart, originally designed for Nanotrasen killsquad usage but later declassified for normal research. Voltaic technology allows the heart to keep the body upright in dire circumstances, alongside redirecting anomalous flux energy to fully shield the user from shocks and electro-magnetic pulses. Requires a refined Flux core as a power source." + icon_state = "anomalock_heart" + + COOLDOWN_DECLARE(survival_cooldown) + ///Cooldown for the activation of the organ + var/survival_cooldown_time = 5 MINUTES + ///The lightning effect on our mob when the implant is active + var/mutable_appearance/lightning_overlay + ///how long the lightning lasts + var/lightning_timer + + //---- Anomaly core variables: + ///The core item the organ runs off. + var/obj/item/assembly/signaler/anomaly/core + ///Accepted types of anomaly cores. + var/required_anomaly = /obj/item/assembly/signaler/anomaly/flux + ///If this one starts with a core in. + var/prebuilt = FALSE + ///If the core is removable once socketed. + var/core_removable = TRUE + +/obj/item/organ/internal/heart/cybernetic/anomalock/on_mob_insert(mob/living/carbon/organ_owner, special, movement_flags) + . = ..() + if(!core) + return + add_lightning_overlay(30 SECONDS) + playsound(organ_owner, 'sound/items/eshield_recharge.ogg', 40) + organ_owner.AddElement(/datum/element/empprotection, EMP_PROTECT_SELF|EMP_PROTECT_CONTENTS) + organ_owner.apply_status_effect(/datum/status_effect/stabilized/yellow, src) + RegisterSignal(organ_owner, SIGNAL_ADDTRAIT(TRAIT_CRITICAL_CONDITION), PROC_REF(activate_survival)) + RegisterSignal(organ_owner, COMSIG_ATOM_EMP_ACT, PROC_REF(on_emp_act)) + +/obj/item/organ/internal/heart/cybernetic/anomalock/on_mob_remove(mob/living/carbon/organ_owner, special) + . = ..() + if(!core) + return + UnregisterSignal(organ_owner, SIGNAL_ADDTRAIT(TRAIT_CRITICAL_CONDITION)) + organ_owner.RemoveElement(/datum/element/empprotection, EMP_PROTECT_SELF|EMP_PROTECT_CONTENTS) + organ_owner.remove_status_effect(/datum/status_effect/stabilized/yellow) + tesla_zap(source = organ_owner, zap_range = 20, power = 2.5e5, cutoff = 1e3) + qdel(src) + +/obj/item/organ/internal/heart/cybernetic/anomalock/attack(mob/living/target_mob, mob/living/user, params) + if(target_mob != user || !istype(target_mob) || !core) + return ..() + + if(DOING_INTERACTION(user, DOAFTER_IMPLANTING_HEART)) + return + user.balloon_alert(user, "this will hurt...") + to_chat(user, span_userdanger("Black cyberveins tear your skin apart, pulling the heart into your ribcage. This feels unwise..")) + if(!do_after(user, 5 SECONDS, interaction_key = DOAFTER_IMPLANTING_HEART)) + return ..() + playsound(target_mob, 'sound/weapons/slice.ogg', 100, TRUE) + user.temporarilyRemoveItemFromInventory(src, TRUE) + Insert(user) + user.apply_damage(100, BRUTE, BODY_ZONE_CHEST) + user.emote("scream") + return TRUE + +/obj/item/organ/internal/heart/cybernetic/anomalock/proc/on_emp_act(severity) + SIGNAL_HANDLER + add_lightning_overlay(10 SECONDS) + +/obj/item/organ/internal/heart/cybernetic/anomalock/proc/add_lightning_overlay(time_to_last = 10 SECONDS) + if(lightning_overlay) + lightning_timer = addtimer(CALLBACK(src, PROC_REF(clear_lightning_overlay)), time_to_last, (TIMER_UNIQUE|TIMER_OVERRIDE)) + return + lightning_overlay = mutable_appearance(icon = 'icons/effects/effects.dmi', icon_state = "lightning") + owner.add_overlay(lightning_overlay) + lightning_timer = addtimer(CALLBACK(src, PROC_REF(clear_lightning_overlay)), time_to_last, (TIMER_UNIQUE|TIMER_OVERRIDE)) + +/obj/item/organ/internal/heart/cybernetic/anomalock/proc/clear_lightning_overlay() + owner.cut_overlay(lightning_overlay) + lightning_overlay = null + +/obj/item/organ/internal/heart/cybernetic/anomalock/attack_self(mob/user, modifiers) + . = ..() + if(.) + return + + if(core) + return attack(user, user, modifiers) + +/obj/item/organ/internal/heart/cybernetic/anomalock/on_life(seconds_per_tick, times_fired) + . = ..() + if(owner.blood_volume <= BLOOD_VOLUME_NORMAL) + owner.blood_volume += 5 * seconds_per_tick + if(owner.health <= owner.crit_threshold) + activate_survival(owner) + +///Does a few things to try to help you live whatever you may be going through +/obj/item/organ/internal/heart/cybernetic/anomalock/proc/activate_survival(mob/living/carbon/organ_owner) + if(!COOLDOWN_FINISHED(src, survival_cooldown)) + return + + organ_owner.apply_status_effect(/datum/status_effect/voltaic_overdrive) + add_lightning_overlay(30 SECONDS) + COOLDOWN_START(src, survival_cooldown, survival_cooldown_time) + addtimer(CALLBACK(src, PROC_REF(notify_cooldown), organ_owner), COOLDOWN_TIMELEFT(src, survival_cooldown)) + +///Alerts our owner that the organ is ready to do its thing again +/obj/item/organ/internal/heart/cybernetic/anomalock/proc/notify_cooldown(mob/living/carbon/organ_owner) + balloon_alert(organ_owner, "your heart strenghtens") + playsound(organ_owner, 'sound/items/eshield_recharge.ogg', 40) + +///Returns the mob we are implanted in so that the electricity effect doesn't runtime +/obj/item/organ/internal/heart/cybernetic/anomalock/proc/get_held_mob() + return owner + +/obj/item/organ/internal/heart/cybernetic/anomalock/item_interaction(mob/living/user, obj/item/tool, list/modifiers) + if(!istype(tool, required_anomaly)) + return NONE + if(core) + balloon_alert(user, "core already in!") + return ITEM_INTERACT_BLOCKING + if(!user.transferItemToLoc(tool, src)) + return ITEM_INTERACT_BLOCKING + core = tool + balloon_alert(user, "core installed") + playsound(src, 'sound/machines/click.ogg', 30, TRUE) + add_organ_trait(TRAIT_SHOCKIMMUNE) + update_icon_state() + return ITEM_INTERACT_SUCCESS + +/obj/item/organ/internal/heart/cybernetic/anomalock/screwdriver_act(mob/living/user, obj/item/tool) + . = ..() + if(!core) + balloon_alert(user, "no core!") + return + if(!core_removable) + balloon_alert(user, "can't remove core!") + return + balloon_alert(user, "removing core...") + if(!do_after(user, 3 SECONDS, target = src)) + balloon_alert(user, "interrupted!") + return + balloon_alert(user, "core removed") + core.forceMove(drop_location()) + if(Adjacent(user) && !issilicon(user)) + user.put_in_hands(core) + core = null + remove_organ_trait(TRAIT_SHOCKIMMUNE) + update_icon_state() + +/obj/item/organ/internal/heart/cybernetic/anomalock/update_icon_state() + . = ..() + icon_state = initial(icon_state) + (core ? "-core" : "") + +/obj/item/organ/internal/heart/cybernetic/anomalock/prebuilt/Initialize(mapload) + . = ..() + core = new /obj/item/assembly/signaler/anomaly/flux(src) + update_icon_state() + +/datum/status_effect/voltaic_overdrive + id = "voltaic_overdrive" + duration = 30 SECONDS + alert_type = /atom/movable/screen/alert/status_effect/anomalock_active + show_duration = TRUE + +/datum/status_effect/voltaic_overdrive/tick(seconds_between_ticks) + . = ..() + + if(owner.health <= owner.crit_threshold) + owner.heal_overall_damage(5, 5) + owner.adjustOxyLoss(-5) + owner.adjustToxLoss(-5) + +/datum/status_effect/voltaic_overdrive/on_apply() + . = ..() + owner.add_movespeed_mod_immunities(type, /datum/movespeed_modifier/damage_slowdown) + REMOVE_TRAIT(src, TRAIT_CRITICAL_CONDITION, STAT_TRAIT) + owner.reagents.add_reagent(/datum/reagent/medicine/coagulant, 5) + owner.add_filter("emp_shield", 2, outline_filter(1, "#639BFF")) + to_chat(owner, span_revendanger("You feel a burst of energy! It's do or die!")) + if(iscarbon(owner)) + var/mob/living/carbon/carbon_owner = owner + carbon_owner.gain_trauma(/datum/brain_trauma/special/tenacity, TRAUMA_RESILIENCE_ABSOLUTE) + +/datum/status_effect/voltaic_overdrive/on_remove() + . = ..() + owner.remove_movespeed_mod_immunities(type, /datum/movespeed_modifier/damage_slowdown) + owner.remove_filter("emp_shield") + owner.balloon_alert(owner, "your heart weakens") + if(iscarbon(owner)) + var/mob/living/carbon/carbon_owner = owner + carbon_owner.cure_trauma_type(/datum/brain_trauma/special/tenacity, TRAUMA_RESILIENCE_ABSOLUTE) + + +/atom/movable/screen/alert/status_effect/anomalock_active + name = "voltaic overdrive" + icon_state = "anomalock_heart" + desc = "Voltaic energy is flooding your muscles, keeping your body upright. You have 30 seconds before it falters!" + +#undef DOAFTER_IMPLANTING_HEART diff --git a/code/modules/surgery/organs/internal/lungs/_lungs.dm b/code/modules/surgery/organs/internal/lungs/_lungs.dm index a60cc24375617..b3427db9291ba 100644 --- a/code/modules/surgery/organs/internal/lungs/_lungs.dm +++ b/code/modules/surgery/organs/internal/lungs/_lungs.dm @@ -462,14 +462,6 @@ /obj/item/organ/internal/lungs/proc/too_much_miasma(mob/living/carbon/breather, datum/gas_mixture/breath, miasma_pp, old_miasma_pp) // Inhale Miasma. Exhale nothing. breathe_gas_volume(breath, /datum/gas/miasma) - // Miasma sickness - if(prob(0.5 * miasma_pp)) - var/datum/disease/advance/miasma_disease = new /datum/disease/advance/random(max_symptoms = min(round(max(miasma_pp / 2, 1), 1), 6), max_level = min(round(max(miasma_pp, 1), 1), 8)) - // tl;dr the first argument chooses the smaller of miasma_pp/2 or 6(typical max virus symptoms), the second chooses the smaller of miasma_pp or 8(max virus symptom level) - // Each argument has a minimum of 1 and rounds to the nearest value. Feel free to change the pp scaling I couldn't decide on good numbers for it. - if(breather.CanContractDisease(miasma_disease)) - miasma_disease.name = "Unknown" - breather.AirborneContractDisease(miasma_disease, TRUE) // Miasma side effects if (HAS_TRAIT(breather, TRAIT_ANOSMIA)) //Anosmia quirk holder cannot smell miasma, but can get diseases from it. return @@ -548,6 +540,10 @@ // Breath in nitrium. It's helpful, but has nasty side effects /obj/item/organ/internal/lungs/proc/too_much_nitrium(mob/living/carbon/breather, datum/gas_mixture/breath, nitrium_pp, old_nitrium_pp) breathe_gas_volume(breath, /datum/gas/nitrium) + + if(prob(20)) + breather.emote("burp") + // Random chance to inflict side effects increases with pressure. if((prob(nitrium_pp) && (nitrium_pp > 15))) // Nitrium side-effect. diff --git a/code/modules/surgery/organs/internal/stomach/_stomach.dm b/code/modules/surgery/organs/internal/stomach/_stomach.dm index 9036f78859ed4..3b6cf14e84464 100644 --- a/code/modules/surgery/organs/internal/stomach/_stomach.dm +++ b/code/modules/surgery/organs/internal/stomach/_stomach.dm @@ -216,7 +216,7 @@ if(SPT_PROB(pukeprob, seconds_per_tick)) //iT hAndLeS mOrE ThaN PukInG disgusted.adjust_confusion(2.5 SECONDS) disgusted.adjust_stutter(2 SECONDS) - disgusted.vomit(VOMIT_CATEGORY_DEFAULT, distance = 0) + disgusted.vomit(VOMIT_CATEGORY_KNOCKDOWN, distance = 0) disgusted.set_dizzy_if_lower(10 SECONDS) if(disgust >= DISGUST_LEVEL_DISGUSTED) if(SPT_PROB(13, seconds_per_tick)) diff --git a/code/modules/surgery/organs/internal/stomach/stomach_ethereal.dm b/code/modules/surgery/organs/internal/stomach/stomach_ethereal.dm index 2675f46d13d6e..887df31e3fff8 100644 --- a/code/modules/surgery/organs/internal/stomach/stomach_ethereal.dm +++ b/code/modules/surgery/organs/internal/stomach/stomach_ethereal.dm @@ -4,13 +4,13 @@ desc = "A crystal-like organ that stores the electric charge of ethereals." organ_traits = list(TRAIT_NOHUNGER) // We have our own hunger mechanic. /// Where the energy of the stomach is stored. - var/obj/item/stock_parts/cell/cell + var/obj/item/stock_parts/power_store/cell ///used to keep ethereals from spam draining power sources var/drain_time = 0 /obj/item/organ/internal/stomach/ethereal/Initialize(mapload) . = ..() - cell = new /obj/item/stock_parts/cell/ethereal(null) + cell = new /obj/item/stock_parts/power_store/cell/ethereal(null) /obj/item/organ/internal/stomach/ethereal/Destroy() QDEL_NULL(cell) diff --git a/code/modules/surgery/organs/internal/tongue/_tongue.dm b/code/modules/surgery/organs/internal/tongue/_tongue.dm index 469879263cc85..87dfb124a61a4 100644 --- a/code/modules/surgery/organs/internal/tongue/_tongue.dm +++ b/code/modules/surgery/organs/internal/tongue/_tongue.dm @@ -595,6 +595,7 @@ GLOBAL_LIST_INIT(english_to_zombie, list()) say_mod = "meows" liked_foodtypes = SEAFOOD | ORANGES | BUGS | GORE disliked_foodtypes = GROSS | CLOTH | RAW + organ_traits = list(TRAIT_WOUND_LICKER) /obj/item/organ/internal/tongue/jelly name = "jelly tongue" diff --git a/code/modules/surgery/organs/organ_movement.dm b/code/modules/surgery/organs/organ_movement.dm index c39541fb8efa4..2889cbe07081b 100644 --- a/code/modules/surgery/organs/organ_movement.dm +++ b/code/modules/surgery/organs/organ_movement.dm @@ -193,7 +193,6 @@ // The true movement is here moveToNullspace() - bodypart_owner.contents -= src bodypart_owner = null on_bodypart_remove(limb) diff --git a/code/modules/surgery/plastic_surgery.dm b/code/modules/surgery/plastic_surgery.dm index 9224c29b2db63..0d452d851f266 100644 --- a/code/modules/surgery/plastic_surgery.dm +++ b/code/modules/surgery/plastic_surgery.dm @@ -42,11 +42,11 @@ display_results( user, target, - span_notice("You begin to insert [tool] into the incision in [target]'s [parse_zone(target_zone)]..."), - span_notice("[user] begins to insert [tool] into the incision in [target]'s [parse_zone(target_zone)]."), - span_notice("[user] begins to insert [tool] into the incision in [target]'s [parse_zone(target_zone)]."), + span_notice("You begin to insert [tool] into the incision in [target]'s [target.parse_zone_with_bodypart(target_zone)]..."), + span_notice("[user] begins to insert [tool] into the incision in [target]'s [target.parse_zone_with_bodypart(target_zone)]."), + span_notice("[user] begins to insert [tool] into the incision in [target]'s [target.parse_zone_with_bodypart(target_zone)]."), ) - display_pain(target, "You feel something inserting just below the skin in your [parse_zone(target_zone)].") + display_pain(target, "You feel something inserting just below the skin in your [target.parse_zone_with_bodypart(target_zone)].") /datum/surgery_step/insert_plastic/success(mob/user, mob/living/target, target_zone, obj/item/stack/tool, datum/surgery/surgery, default_display_results) . = ..() @@ -60,6 +60,7 @@ /obj/item/knife = 50, TOOL_WIRECUTTER = 35) time = 64 + surgery_effects_mood = TRUE /datum/surgery_step/reshape_face/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) user.visible_message(span_notice("[user] begins to alter [target]'s appearance."), span_notice("You begin to alter [target]'s appearance...")) @@ -94,11 +95,11 @@ else user.visible_message(span_warning("You have no picture to base the appearance on, reverting to random appearances.")) for(var/i in 1 to 10) - names += target.dna.species.random_name(target.gender, TRUE) + names += target.generate_random_mob_name(TRUE) else - for(var/_i in 1 to 9) + for(var/j in 1 to 9) names += "Subject [target.gender == MALE ? "i" : "o"]-[pick("a", "b", "c", "d", "e")]-[rand(10000, 99999)]" - names += target.dna.species.random_name(target.gender, TRUE) //give one normal name in case they want to do regular plastic surgery + names += target.generate_random_mob_name(TRUE) //give one normal name in case they want to do regular plastic surgery var/chosen_name = tgui_input_list(user, "New name to assign", "Plastic Surgery", names) if(isnull(chosen_name)) return diff --git a/code/modules/surgery/prosthetic_replacement.dm b/code/modules/surgery/prosthetic_replacement.dm index 818c7a788d953..fcfc01f3a9b9a 100644 --- a/code/modules/surgery/prosthetic_replacement.dm +++ b/code/modules/surgery/prosthetic_replacement.dm @@ -62,27 +62,27 @@ organ_rejection_dam = 30 if(!bodypart_to_attach.can_attach_limb(target)) - target.balloon_alert(user, "that doesn't go on the [parse_zone(target_zone)]!") + target.balloon_alert(user, "that doesn't go on the [target.parse_zone_with_bodypart(target_zone)]!") return SURGERY_STEP_FAIL if(target_zone == bodypart_to_attach.body_zone) //so we can't replace a leg with an arm, or a human arm with a monkey arm. display_results( user, target, - span_notice("You begin to replace [target]'s [parse_zone(target_zone)] with [tool]..."), - span_notice("[user] begins to replace [target]'s [parse_zone(target_zone)] with [tool]."), - span_notice("[user] begins to replace [target]'s [parse_zone(target_zone)]."), + span_notice("You begin to replace [target]'s [target.parse_zone_with_bodypart(target_zone)] with [tool]..."), + span_notice("[user] begins to replace [target]'s [target.parse_zone_with_bodypart(target_zone)] with [tool]."), + span_notice("[user] begins to replace [target]'s [target.parse_zone_with_bodypart(target_zone)]."), ) else - to_chat(user, span_warning("[tool] isn't the right type for [parse_zone(target_zone)].")) + to_chat(user, span_warning("[tool] isn't the right type for [target.parse_zone_with_bodypart(target_zone)].")) return SURGERY_STEP_FAIL else if(target_zone == BODY_ZONE_L_ARM || target_zone == BODY_ZONE_R_ARM) display_results( user, target, span_notice("You begin to attach [tool] onto [target]..."), - span_notice("[user] begins to attach [tool] onto [target]'s [parse_zone(target_zone)]."), - span_notice("[user] begins to attach something onto [target]'s [parse_zone(target_zone)]."), + span_notice("[user] begins to attach [tool] onto [target]'s [target.parse_zone_with_bodypart(target_zone)]."), + span_notice("[user] begins to attach something onto [target]'s [target.parse_zone_with_bodypart(target_zone)]."), ) else to_chat(user, span_warning("[tool] must be installed onto an arm.")) @@ -105,11 +105,11 @@ display_results( user, target, - span_notice("You succeed in replacing [target]'s [parse_zone(target_zone)]."), - span_notice("[user] successfully replaces [target]'s [parse_zone(target_zone)] with [tool]!"), - span_notice("[user] successfully replaces [target]'s [parse_zone(target_zone)]!"), + span_notice("You succeed in replacing [target]'s [target.parse_zone_with_bodypart(target_zone)]."), + span_notice("[user] successfully replaces [target]'s [target.parse_zone_with_bodypart(target_zone)] with [tool]!"), + span_notice("[user] successfully replaces [target]'s [target.parse_zone_with_bodypart(target_zone)]!"), ) - display_pain(target, "You feel synthetic sensation wash from your [parse_zone(target_zone)], which you can feel again!", TRUE) + display_pain(target, "You feel synthetic sensation wash from your [target.parse_zone_with_bodypart(target_zone)], which you can feel again!", TRUE) return else var/obj/item/bodypart/bodypart_to_attach = target.newBodyPart(target_zone, FALSE, FALSE) @@ -123,7 +123,7 @@ span_notice("[user] finishes attaching [tool]!"), span_notice("[user] finishes the attachment procedure!"), ) - display_pain(target, "You feel a strange sensation from your new [parse_zone(target_zone)].", TRUE) + display_pain(target, "You feel a strange sensation from your new [target.parse_zone_with_bodypart(target_zone)].", TRUE) if(istype(tool, /obj/item/chainsaw)) qdel(tool) var/obj/item/chainsaw/mounted_chainsaw/new_arm = new(target) diff --git a/code/modules/surgery/repair_puncture.dm b/code/modules/surgery/repair_puncture.dm index 9b9071cff89c5..0d2e2d3123ca4 100644 --- a/code/modules/surgery/repair_puncture.dm +++ b/code/modules/surgery/repair_puncture.dm @@ -46,26 +46,27 @@ TOOL_WIRECUTTER = 40) time = 3 SECONDS preop_sound = 'sound/surgery/hemostat1.ogg' + surgery_effects_mood = TRUE /datum/surgery_step/repair_innards/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) var/datum/wound/pierce/bleed/pierce_wound = surgery.operated_wound if(!pierce_wound) - user.visible_message(span_notice("[user] looks for [target]'s [parse_zone(user.zone_selected)]."), span_notice("You look for [target]'s [parse_zone(user.zone_selected)]...")) + user.visible_message(span_notice("[user] looks for [target]'s [target.parse_zone_with_bodypart(user.zone_selected)]."), span_notice("You look for [target]'s [target.parse_zone_with_bodypart(user.zone_selected)]...")) return if(pierce_wound.blood_flow <= 0) - to_chat(user, span_notice("[target]'s [parse_zone(user.zone_selected)] has no puncture to repair!")) + to_chat(user, span_notice("[target]'s [target.parse_zone_with_bodypart(user.zone_selected)] has no puncture to repair!")) surgery.status++ return display_results( user, target, - span_notice("You begin to realign the torn blood vessels in [target]'s [parse_zone(user.zone_selected)]..."), - span_notice("[user] begins to realign the torn blood vessels in [target]'s [parse_zone(user.zone_selected)] with [tool]."), - span_notice("[user] begins to realign the torn blood vessels in [target]'s [parse_zone(user.zone_selected)]."), + span_notice("You begin to realign the torn blood vessels in [target]'s [target.parse_zone_with_bodypart(user.zone_selected)]..."), + span_notice("[user] begins to realign the torn blood vessels in [target]'s [target.parse_zone_with_bodypart(user.zone_selected)] with [tool]."), + span_notice("[user] begins to realign the torn blood vessels in [target]'s [target.parse_zone_with_bodypart(user.zone_selected)]."), ) - display_pain(target, "You feel a horrible stabbing pain in your [parse_zone(user.zone_selected)]!") + display_pain(target, "You feel a horrible stabbing pain in your [target.parse_zone_with_bodypart(user.zone_selected)]!") /datum/surgery_step/repair_innards/success(mob/living/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results = FALSE) var/datum/wound/pierce/bleed/pierce_wound = surgery.operated_wound @@ -76,9 +77,9 @@ display_results( user, target, - span_notice("You successfully realign some of the blood vessels in [target]'s [parse_zone(target_zone)]."), - span_notice("[user] successfully realigns some of the blood vessels in [target]'s [parse_zone(target_zone)] with [tool]!"), - span_notice("[user] successfully realigns some of the blood vessels in [target]'s [parse_zone(target_zone)]!"), + span_notice("You successfully realign some of the blood vessels in [target]'s [target.parse_zone_with_bodypart(target_zone)]."), + span_notice("[user] successfully realigns some of the blood vessels in [target]'s [target.parse_zone_with_bodypart(target_zone)] with [tool]!"), + span_notice("[user] successfully realigns some of the blood vessels in [target]'s [target.parse_zone_with_bodypart(target_zone)]!"), ) log_combat(user, target, "excised infected flesh in", addition="COMBAT MODE: [uppertext(user.combat_mode)]") surgery.operated_bodypart.receive_damage(brute=3, wound_bonus=CANT_WOUND) @@ -90,9 +91,9 @@ display_results( user, target, - span_notice("You jerk apart some of the blood vessels in [target]'s [parse_zone(target_zone)]."), - span_notice("[user] jerks apart some of the blood vessels in [target]'s [parse_zone(target_zone)] with [tool]!"), - span_notice("[user] jerk apart some of the blood vessels in [target]'s [parse_zone(target_zone)]!"), + span_notice("You jerk apart some of the blood vessels in [target]'s [target.parse_zone_with_bodypart(target_zone)]."), + span_notice("[user] jerks apart some of the blood vessels in [target]'s [target.parse_zone_with_bodypart(target_zone)] with [tool]!"), + span_notice("[user] jerk apart some of the blood vessels in [target]'s [target.parse_zone_with_bodypart(target_zone)]!"), ) surgery.operated_bodypart.receive_damage(brute=rand(4,8), sharpness=SHARP_EDGED, wound_bonus = 10) @@ -117,16 +118,16 @@ /datum/surgery_step/seal_veins/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) var/datum/wound/pierce/bleed/pierce_wound = surgery.operated_wound if(!pierce_wound) - user.visible_message(span_notice("[user] looks for [target]'s [parse_zone(user.zone_selected)]."), span_notice("You look for [target]'s [parse_zone(user.zone_selected)]...")) + user.visible_message(span_notice("[user] looks for [target]'s [target.parse_zone_with_bodypart(user.zone_selected)]."), span_notice("You look for [target]'s [target.parse_zone_with_bodypart(user.zone_selected)]...")) return display_results( user, target, - span_notice("You begin to meld some of the split blood vessels in [target]'s [parse_zone(user.zone_selected)]..."), - span_notice("[user] begins to meld some of the split blood vessels in [target]'s [parse_zone(user.zone_selected)] with [tool]."), - span_notice("[user] begins to meld some of the split blood vessels in [target]'s [parse_zone(user.zone_selected)]."), + span_notice("You begin to meld some of the split blood vessels in [target]'s [target.parse_zone_with_bodypart(user.zone_selected)]..."), + span_notice("[user] begins to meld some of the split blood vessels in [target]'s [target.parse_zone_with_bodypart(user.zone_selected)] with [tool]."), + span_notice("[user] begins to meld some of the split blood vessels in [target]'s [target.parse_zone_with_bodypart(user.zone_selected)]."), ) - display_pain(target, "You're being burned inside your [parse_zone(user.zone_selected)]!") + display_pain(target, "You're being burned inside your [target.parse_zone_with_bodypart(user.zone_selected)]!") /datum/surgery_step/seal_veins/success(mob/living/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results = FALSE) var/datum/wound/pierce/bleed/pierce_wound = surgery.operated_wound @@ -137,9 +138,9 @@ display_results( user, target, - span_notice("You successfully meld some of the split blood vessels in [target]'s [parse_zone(target_zone)] with [tool]."), - span_notice("[user] successfully melds some of the split blood vessels in [target]'s [parse_zone(target_zone)] with [tool]!"), - span_notice("[user] successfully melds some of the split blood vessels in [target]'s [parse_zone(target_zone)]!"), + span_notice("You successfully meld some of the split blood vessels in [target]'s [target.parse_zone_with_bodypart(target_zone)] with [tool]."), + span_notice("[user] successfully melds some of the split blood vessels in [target]'s [target.parse_zone_with_bodypart(target_zone)] with [tool]!"), + span_notice("[user] successfully melds some of the split blood vessels in [target]'s [target.parse_zone_with_bodypart(target_zone)]!"), ) log_combat(user, target, "dressed burns in", addition="COMBAT MODE: [uppertext(user.combat_mode)]") pierce_wound.adjust_blood_flow(-0.5) @@ -147,7 +148,7 @@ surgery.status = REALIGN_INNARDS to_chat(user, span_notice("There still seems to be misaligned blood vessels to finish...")) else - to_chat(user, span_green("You've repaired all the internal damage in [target]'s [parse_zone(target_zone)]!")) + to_chat(user, span_green("You've repaired all the internal damage in [target]'s [target.parse_zone_with_bodypart(target_zone)]!")) return ..() #undef REALIGN_INNARDS diff --git a/code/modules/antagonists/traitor/objectives/sleeper_protocol.dm b/code/modules/surgery/sleeper_protocol.dm similarity index 50% rename from code/modules/antagonists/traitor/objectives/sleeper_protocol.dm rename to code/modules/surgery/sleeper_protocol.dm index 6ec71ff08bd90..693b0fbfb5c4a 100644 --- a/code/modules/antagonists/traitor/objectives/sleeper_protocol.dm +++ b/code/modules/surgery/sleeper_protocol.dm @@ -1,70 +1,3 @@ -/datum/traitor_objective_category/sleeper_protocol - name = "Sleeper Protocol" - objectives = list( - /datum/traitor_objective/sleeper_protocol = 1, - /datum/traitor_objective/sleeper_protocol/everybody = 1, - ) - -/datum/traitor_objective/sleeper_protocol - name = "Perform the sleeper protocol on a crewmember" - description = "Use the button below to materialize a surgery disk in your hand, where you'll then be able to perform the sleeper protocol on a crewmember. If the disk gets destroyed, the objective will fail. This will only work on living and sentient crewmembers." - - progression_minimum = 0 MINUTES - - progression_reward = list(8 MINUTES, 15 MINUTES) - telecrystal_reward = 1 - - var/list/limited_to = list( - JOB_CHIEF_MEDICAL_OFFICER, - JOB_MEDICAL_DOCTOR, - JOB_PARAMEDIC, - JOB_ROBOTICIST, - ) - - var/obj/item/disk/surgery/sleeper_protocol/disk - - var/mob/living/current_registered_mob - - var/inverted_limitation = FALSE - -/datum/traitor_objective/sleeper_protocol/generate_ui_buttons(mob/user) - var/list/buttons = list() - if(!disk) - buttons += add_ui_button("", "Clicking this will materialize the sleeper protocol surgery in your hand", "save", "summon_disk") - return buttons - -/datum/traitor_objective/sleeper_protocol/ui_perform_action(mob/living/user, action) - switch(action) - if("summon_disk") - if(disk) - return - disk = new(user.drop_location()) - user.put_in_hands(disk) - AddComponent(/datum/component/traitor_objective_register, disk, \ - fail_signals = list(COMSIG_QDELETING)) - -/datum/traitor_objective/sleeper_protocol/proc/on_surgery_success(datum/source, datum/surgery_step/step, mob/living/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results) - SIGNAL_HANDLER - if(istype(step, /datum/surgery_step/brainwash/sleeper_agent)) - succeed_objective() - -/datum/traitor_objective/sleeper_protocol/can_generate_objective(datum/mind/generating_for, list/possible_duplicates) - var/datum/job/job = generating_for.assigned_role - if(!(job.title in limited_to) && !inverted_limitation) - return FALSE - if((job.title in limited_to) && inverted_limitation) - return FALSE - if(length(possible_duplicates) > 0) - return FALSE - return TRUE - -/datum/traitor_objective/sleeper_protocol/generate_objective(datum/mind/generating_for, list/possible_duplicates) - AddComponent(/datum/component/traitor_objective_mind_tracker, generating_for, \ - signals = list(COMSIG_MOB_SURGERY_STEP_SUCCESS = PROC_REF(on_surgery_success))) - return TRUE - -/datum/traitor_objective/sleeper_protocol/ungenerate_objective() - disk = null /obj/item/disk/surgery/sleeper_protocol name = "Suspicious Surgery Disk" desc = "The disk provides instructions on how to turn someone into a sleeper agent for the Syndicate." @@ -128,10 +61,3 @@ if(!.) return target.gain_trauma(new /datum/brain_trauma/mild/phobia/conspiracies(), TRAUMA_RESILIENCE_LOBOTOMY) - -/datum/traitor_objective/sleeper_protocol/everybody //Much harder for non-med and non-robo - progression_minimum = 30 MINUTES - progression_reward = list(8 MINUTES, 15 MINUTES) - telecrystal_reward = 1 - - inverted_limitation = TRUE diff --git a/code/modules/surgery/stomachpump.dm b/code/modules/surgery/stomachpump.dm index 0c9a0ce564f68..25f067aef6505 100644 --- a/code/modules/surgery/stomachpump.dm +++ b/code/modules/surgery/stomachpump.dm @@ -46,7 +46,7 @@ span_notice("[user] forces [target_human] to vomit, cleansing their stomach of some chemicals!"), span_notice("[user] forces [target_human] to vomit!"), ) - target_human.vomit(20, FALSE, TRUE, 1, TRUE, FALSE, purge_ratio = 0.67) //higher purge ratio than regular vomiting + target_human.vomit((MOB_VOMIT_MESSAGE | MOB_VOMIT_STUN), lost_nutrition = 20, purge_ratio = 0.67) //higher purge ratio than regular vomiting return ..() /datum/surgery_step/stomach_pump/failure(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) @@ -55,7 +55,7 @@ display_results( user, target, - span_warning("You screw up, brusing [target_human]'s chest!"), + span_warning("You screw up, bruising [target_human]'s chest!"), span_warning("[user] screws up, brusing [target_human]'s chest!"), span_warning("[user] screws up!"), ) diff --git a/code/modules/surgery/surgery_step.dm b/code/modules/surgery/surgery_step.dm index f26b53405c200..c739745969e8e 100644 --- a/code/modules/surgery/surgery_step.dm +++ b/code/modules/surgery/surgery_step.dm @@ -1,3 +1,8 @@ +#define SURGERY_STATE_STARTED "surgery_started" +#define SURGERY_STATE_FAILURE "surgery_failed" +#define SURGERY_STATE_SUCCESS "surgery_success" +#define SURGERY_MOOD_CATEGORY "surgery" + /datum/surgery_step var/name var/list/implements = list() //format is path = probability of success. alternatively @@ -12,6 +17,15 @@ var/preop_sound //Sound played when the step is started var/success_sound //Sound played if the step succeeded var/failure_sound //Sound played if the step fails + ///If the surgery causes mood changes if the patient is conscious. + var/surgery_effects_mood = FALSE + ///Which mood event to give the patient when surgery is starting while they're conscious. This should be permanent/not have a timer until the surgery either succeeds or fails, as those states will immediately replace it. Mostly just flavor text. + var/datum/mood_event/surgery/surgery_started_mood_event = /datum/mood_event/surgery + ///Which mood event to give the conscious patient when surgery succeeds. Lasts far shorter than if it failed. + var/datum/mood_event/surgery/surgery_success_mood_event = /datum/mood_event/surgery/success + ///Which mood event to give the consious patient when surgery fails. Lasts muuuuuch longer. + var/datum/mood_event/surgery/surgery_failure_mood_event = /datum/mood_event/surgery/failure + /datum/surgery_step/proc/try_op(mob/user, mob/living/target, target_zone, obj/item/tool, datum/surgery/surgery, try_to_fail = FALSE) var/success = FALSE @@ -51,7 +65,7 @@ if(get_location_accessible(target, target_zone) || (surgery.surgery_flags & SURGERY_IGNORE_CLOTHES)) initiate(user, target, target_zone, tool, surgery, try_to_fail) else - to_chat(user, span_warning("You need to expose [target]'s [parse_zone(target_zone)] to perform surgery on it!")) + to_chat(user, span_warning("You need to expose [target]'s [target.parse_zone_with_bodypart(target_zone)] to perform surgery on it!")) return TRUE //returns TRUE so we don't stab the guy in the dick or wherever. if(repeatable) @@ -83,9 +97,11 @@ var/advance = FALSE if(preop(user, target, target_zone, tool, surgery) == SURGERY_STEP_FAIL) + update_surgery_mood(target, SURGERY_STATE_FAILURE) surgery.step_in_progress = FALSE return FALSE + update_surgery_mood(target, SURGERY_STATE_STARTED) play_preop_sound(user, target, target_zone, tool, surgery) // Here because most steps overwrite preop if(tool) @@ -122,11 +138,13 @@ if((prob(100-fail_prob) || (iscyborg(user) && !silicons_obey_prob)) && chem_check_result && !try_to_fail) if(success(user, target, target_zone, tool, surgery)) + update_surgery_mood(target, SURGERY_STATE_SUCCESS) play_success_sound(user, target, target_zone, tool, surgery) advance = TRUE else if(failure(user, target, target_zone, tool, surgery, fail_prob)) play_failure_sound(user, target, target_zone, tool, surgery) + update_surgery_mood(target, SURGERY_STATE_FAILURE) advance = TRUE if(chem_check_result) return .(user, target, target_zone, tool, surgery, try_to_fail) //automatically re-attempt if failed for reason other than lack of required chemical @@ -135,12 +153,43 @@ if(surgery.status > surgery.steps.len) surgery.complete(user) + else if(!QDELETED(target)) + update_surgery_mood(target, SURGERY_STATE_FAILURE) + if(target.stat == DEAD && was_sleeping && user.client) user.client.give_award(/datum/award/achievement/jobs/sandman, user) surgery.step_in_progress = FALSE return advance +/** + * Handles updating the mob's mood depending on the surgery states. + * * surgery_state = SURGERY_STATE_STARTED, SURGERY_STATE_FAILURE, SURGERY_STATE_SUCCESS + * * To prevent typos, the event category is defined as SURGERY_MOOD_CATEGORY ("surgery") +*/ +/datum/surgery_step/proc/update_surgery_mood(mob/living/target, surgery_state) + if(!target) + CRASH("Not passed a target, how did we get here?") + if(!surgery_effects_mood) + return + if(HAS_TRAIT(target, TRAIT_ANALGESIA)) + target.clear_mood_event(SURGERY_MOOD_CATEGORY) //incase they gained the trait mid-surgery. has the added side effect that if someone has a bad surgical memory/mood and gets drunk & goes back to surgery, they'll forget they hated it, which is kinda funny imo. + return + if(target.stat >= UNCONSCIOUS) + var/datum/mood_event/surgery/target_mood_event = target.mob_mood.mood_events[SURGERY_MOOD_CATEGORY] + if(target_mood_event?.surgery_completed) //don't give sleeping mobs trauma. that said, if they fell asleep mid-surgery after already getting the bad mood, lets make sure they wake up to a (hopefully) happy memory. + return + switch(surgery_state) + if(SURGERY_STATE_STARTED) + target.add_mood_event(SURGERY_MOOD_CATEGORY, surgery_started_mood_event) + if(SURGERY_STATE_SUCCESS) + target.add_mood_event(SURGERY_MOOD_CATEGORY, surgery_success_mood_event) + if(SURGERY_STATE_FAILURE) + target.add_mood_event(SURGERY_MOOD_CATEGORY, surgery_failure_mood_event) + else + CRASH("passed invalid surgery_state, \"[surgery_state]\".") + + /datum/surgery_step/proc/preop(mob/user, mob/living/target, target_zone, obj/item/tool, datum/surgery/surgery) display_results( user, @@ -266,8 +315,12 @@ /datum/surgery_step/proc/display_pain(mob/living/target, pain_message, mechanical_surgery = FALSE) if(target.stat < UNCONSCIOUS) if(HAS_TRAIT(target, TRAIT_ANALGESIA)) + if(!pain_message) + return to_chat(target, span_notice("You feel a dull, numb sensation as your body is surgically operated on.")) else + if(!pain_message) + return to_chat(target, span_userdanger(pain_message)) if(prob(30) && !mechanical_surgery) target.emote("scream") @@ -276,3 +329,7 @@ #undef SURGERY_SPEED_DISSECTION_MODIFIER #undef SURGERY_SPEED_MORBID_CURIOSITY #undef SURGERY_SLOWDOWN_CAP_MULTIPLIER +#undef SURGERY_STATE_STARTED +#undef SURGERY_STATE_FAILURE +#undef SURGERY_STATE_SUCCESS +#undef SURGERY_MOOD_CATEGORY diff --git a/code/modules/surgery/tools.dm b/code/modules/surgery/tools.dm index 85c1beab0a357..eba496e0b8c5f 100644 --- a/code/modules/surgery/tools.dm +++ b/code/modules/surgery/tools.dm @@ -22,6 +22,9 @@ desc = "Micro-mechanical manipulator for retracting stuff." toolspeed = 0.5 +/obj/item/retractor/cyborg + icon = 'icons/mob/silicon/robot_items.dmi' + icon_state = "toolkit_medborg_retractor" /obj/item/hemostat name = "hemostat" @@ -49,6 +52,9 @@ desc = "Tiny servos power a pair of pincers to stop bleeding." toolspeed = 0.5 +/obj/item/hemostat/cyborg + icon = 'icons/mob/silicon/robot_items.dmi' + icon_state = "toolkit_medborg_hemostat" /obj/item/cautery name = "cautery" @@ -80,6 +86,10 @@ desc = "A heated element that cauterizes wounds." toolspeed = 0.5 +/obj/item/cautery/cyborg + icon = 'icons/mob/silicon/robot_items.dmi' + icon_state = "toolkit_medborg_cautery" + /obj/item/cautery/advanced name = "searing tool" desc = "It projects a high power laser used for medical applications." @@ -175,6 +185,10 @@ playsound(user, 'sound/machines/juicer.ogg', 20, TRUE) return MANUAL_SUICIDE +/obj/item/surgicaldrill/cyborg + icon = 'icons/mob/silicon/robot_items.dmi' + icon_state = "toolkit_medborg_drill" + /obj/item/surgicaldrill/augment desc = "Effectively a small power drill contained within your arm. May or may not pierce the heavens." hitsound = 'sound/weapons/circsawhit.ogg' @@ -225,6 +239,10 @@ user.visible_message(span_suicide("[user] is slitting [user.p_their()] [pick("wrists", "throat", "stomach")] with [src]! It looks like [user.p_theyre()] trying to commit suicide!")) return BRUTELOSS +/obj/item/scalpel/cyborg + icon = 'icons/mob/silicon/robot_items.dmi' + icon_state = "toolkit_medborg_scalpel" + /obj/item/scalpel/augment desc = "Ultra-sharp blade attached directly to your bone for extra-accuracy." toolspeed = 0.5 @@ -276,6 +294,10 @@ /obj/item/circular_saw/get_surgery_tool_overlay(tray_extended) return surgical_tray_overlay +/obj/item/circular_saw/cyborg + icon = 'icons/mob/silicon/robot_items.dmi' + icon_state = "toolkit_medborg_saw" + /obj/item/circular_saw/augment desc = "A small but very fast spinning saw. It rips and tears until it is done." w_class = WEIGHT_CLASS_SMALL @@ -294,11 +316,16 @@ attack_verb_continuous = list("slaps") attack_verb_simple = list("slap") interaction_flags_atom = parent_type::interaction_flags_atom | INTERACT_ATOM_IGNORE_MOBILITY + tool_behaviour = TOOL_DRAPES /obj/item/surgical_drapes/Initialize(mapload) . = ..() AddComponent(/datum/component/surgery_initiator) +/obj/item/surgical_drapes/cyborg + icon = 'icons/mob/silicon/robot_items.dmi' + icon_state = "toolkit_medborg_surgicaldrapes" + /obj/item/surgical_processor //allows medical cyborgs to scan and initiate advanced surgeries name = "surgical processor" desc = "A device for scanning and initiating surgeries from a disk or operating computer." @@ -341,11 +368,9 @@ . = ..() UnregisterSignal(user, COMSIG_SURGERY_STARTING) -/obj/item/surgical_processor/afterattack(atom/design_holder, mob/user, proximity) - if(!proximity) - return ..() +/obj/item/surgical_processor/interact_with_atom(atom/design_holder, mob/living/user, list/modifiers) if(!istype(design_holder, /obj/item/disk/surgery) && !istype(design_holder, /obj/machinery/computer/operating)) - return ..() + return NONE balloon_alert(user, "copying designs...") playsound(src, 'sound/machines/terminal_processing.ogg', 25, TRUE) if(do_after(user, 1 SECONDS, target = design_holder)) @@ -358,7 +383,8 @@ playsound(src, 'sound/machines/terminal_success.ogg', 25, TRUE) downloaded = TRUE update_appearance(UPDATE_OVERLAYS) - return TRUE + return ITEM_INTERACT_SUCCESS + return ITEM_INTERACT_BLOCKING /obj/item/surgical_processor/update_overlays() . = ..() @@ -581,6 +607,10 @@ /obj/item/bonesetter/get_surgery_tool_overlay(tray_extended) return "bonesetter" + (tray_extended ? "" : "_out") +/obj/item/bonesetter/cyborg + icon = 'icons/mob/silicon/robot_items.dmi' + icon_state = "toolkit_medborg_bonesetter" + /obj/item/blood_filter name = "blood filter" desc = "For filtering the blood." diff --git a/code/modules/tgui_input/list.dm b/code/modules/tgui_input/list.dm index 174f16fc7b57c..22c6d48edfc5a 100644 --- a/code/modules/tgui_input/list.dm +++ b/code/modules/tgui_input/list.dm @@ -111,7 +111,7 @@ /datum/tgui_list_input/ui_interact(mob/user, datum/tgui/ui) ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, "ListInputModal") + ui = new(user, src, "ListInputWindow") ui.open() /datum/tgui_list_input/ui_close(mob/user) diff --git a/code/modules/tgui_input/say_modal/typing.dm b/code/modules/tgui_input/say_modal/typing.dm index a6367c088d694..7fc6a93f29425 100644 --- a/code/modules/tgui_input/say_modal/typing.dm +++ b/code/modules/tgui_input/say_modal/typing.dm @@ -38,42 +38,31 @@ /** Sets the mob as "thinking" - with indicator and the TRAIT_THINKING_IN_CHARACTER trait */ /datum/tgui_say/proc/start_thinking() - if(!window_open || !client.typing_indicators) + if(!window_open) return FALSE - /// Special exemptions - if(isabductor(client.mob)) - return FALSE - ADD_TRAIT(client.mob, TRAIT_THINKING_IN_CHARACTER, CURRENTLY_TYPING_TRAIT) - client.mob.create_thinking_indicator() + return client.start_thinking() /** Removes typing/thinking indicators and flags the mob as not thinking */ /datum/tgui_say/proc/stop_thinking() - client.mob?.remove_all_indicators() + return client.stop_thinking() /** * Handles the user typing. After a brief period of inactivity, * signals the client mob to revert to the "thinking" icon. */ /datum/tgui_say/proc/start_typing() - var/mob/client_mob = client.mob - client_mob.remove_thinking_indicator() - if(!window_open || !client.typing_indicators || !HAS_TRAIT(client_mob, TRAIT_THINKING_IN_CHARACTER)) + if(!window_open) return FALSE - client_mob.create_typing_indicator() - addtimer(CALLBACK(src, PROC_REF(stop_typing)), 5 SECONDS, TIMER_UNIQUE | TIMER_OVERRIDE | TIMER_STOPPABLE) + return client.start_typing() /** - * Callback to remove the typing indicator after a brief period of inactivity. + * Remove the typing indicator after a brief period of inactivity or during say events. * If the user was typing IC, the thinking indicator is shown. */ /datum/tgui_say/proc/stop_typing() - if(isnull(client?.mob)) - return FALSE - var/mob/client_mob = client.mob - client_mob.remove_typing_indicator() - if(!window_open || !client.typing_indicators || !HAS_TRAIT(client_mob, TRAIT_THINKING_IN_CHARACTER)) + if(!window_open) return FALSE - client_mob.create_thinking_indicator() + client.stop_typing() /// Overrides for overlay creation /mob/living/create_thinking_indicator() diff --git a/code/modules/transport/_transport_machinery.dm b/code/modules/transport/_transport_machinery.dm index 1cbbbdeb24b57..a51d6d840d372 100644 --- a/code/modules/transport/_transport_machinery.dm +++ b/code/modules/transport/_transport_machinery.dm @@ -95,7 +95,7 @@ /obj/machinery/transport/proc/clear_repair_signals() UnregisterSignal(src, repair_signals) - QDEL_LAZYLIST(repair_signals) + LAZYNULL(repair_signals) /obj/machinery/transport/examine(mob/user) . = ..() @@ -128,8 +128,8 @@ playsound(src, 'sound/machines/synth_yes.ogg', 75, use_reverb = TRUE) machine.balloon_alert(user, "success!") UnregisterSignal(src, repair_signals) - QDEL_LAZYLIST(repair_signals) - QDEL_LAZYLIST(methods_to_fix) + LAZYNULL(repair_signals) + methods_to_fix = list() malfunctioning = FALSE set_machine_stat(machine_stat & ~EMAGGED) set_is_operational(TRUE) diff --git a/code/modules/transport/tram/tram_controller.dm b/code/modules/transport/tram/tram_controller.dm index 51b8a32acafac..1323953de78f7 100644 --- a/code/modules/transport/tram/tram_controller.dm +++ b/code/modules/transport/tram/tram_controller.dm @@ -10,7 +10,10 @@ var/controller_active = FALSE ///whether all required parts of the tram are considered operational var/controller_operational = TRUE + ///the controller cabinet located on the tram var/obj/machinery/transport/tram_controller/paired_cabinet + ///the home controller located in telecoms + var/obj/machinery/transport/tram_controller/tcomms/home_controller ///if we're travelling, what direction are we going var/travel_direction = NONE ///if we're travelling, how far do we have to go @@ -50,16 +53,27 @@ ///how many times we moved while costing less than 0.5 * SStransport.max_time milliseconds per movement var/recovery_clear_count = 0 + ///if the tram's next stop will be the tram malfunction event sequence + var/malf_active = FALSE + + ///fluff information of the tram, such as ongoing kill count and age var/datum/tram_mfg_info/tram_registration + ///previous trams that have been destroyed var/list/tram_history /datum/tram_mfg_info + ///serial number of this tram (what round ID it first appeared in) var/serial_number + ///is it the active tram for the map var/active = TRUE + ///date the tram was created var/mfg_date + ///what map the tram is used on var/install_location + ///lifetime distance the tram has travelled var/distance_travelled = 0 + ///lifetime number of players hit by the tram var/collisions = 0 /** @@ -245,11 +259,15 @@ playsound(paired_cabinet, 'sound/machines/synth_yes.ogg', 40, vary = FALSE, extrarange = SHORT_RANGE_SOUND_EXTRARANGE) paired_cabinet.say("Controller reset.") + if(malf_active) + addtimer(CALLBACK(src, PROC_REF(announce_malf_event)), 1 SECONDS) + SEND_SIGNAL(src, COMSIG_TRAM_TRAVEL, idle_platform, destination_platform) for(var/obj/structure/transport/linear/tram/transport_module as anything in transport_modules) //only thing everyone needs to know is the new location. if(transport_module.travelling) //wee woo wee woo there was a double action queued. damn multi tile structs return //we don't care to undo cover_locked controls, though, as that will resolve itself + transport_module.verify_transport_contents() transport_module.glide_size_override = DELAY_TO_GLIDE_SIZE(speed_limiter) transport_module.set_travelling(TRUE) @@ -278,11 +296,7 @@ return PROCESS_KILL if(!travel_remaining) - if(!controller_operational) - degraded_stop() - return PROCESS_KILL - - if((controller_status & COMM_ERROR) && prob(5)) // malfunctioning tram has a small chance to e-stop + if(!controller_operational || malf_active) degraded_stop() else normal_stop() @@ -323,6 +337,9 @@ scheduled_move = world.time + speed_limiter +/** + * Tram stops normally, performs post-trip actions and updates the tram registration. + */ /datum/transport_controller/linear/tram/proc/normal_stop() cycle_doors(CYCLE_OPEN) log_transport("TC: [specific_transport_id] trip completed. Info: nav_pos ([nav_beacon.x], [nav_beacon.y], [nav_beacon.z]) idle_pos ([destination_platform.x], [destination_platform.y], [destination_platform.z]).") @@ -340,7 +357,11 @@ current_load = 0 speed_limiter = initial(speed_limiter) +/** + * Tram comes to an in-station degraded stop, throwing the players. Caused by power loss or tram malfunction event. + */ /datum/transport_controller/linear/tram/proc/degraded_stop() + crash_fx() log_transport("TC: [specific_transport_id] trip completed with a degraded status. Info: [TC_TS_STATUS] nav_pos ([nav_beacon.x], [nav_beacon.y], [nav_beacon.z]) idle_pos ([destination_platform.x], [destination_platform.y], [destination_platform.z]).") addtimer(CALLBACK(src, PROC_REF(unlock_controls)), 4 SECONDS) if(controller_status & SYSTEM_FAULT) @@ -349,6 +370,13 @@ paired_cabinet.say("Controller reset.") log_transport("TC: [specific_transport_id] position data successfully reset. ") speed_limiter = initial(speed_limiter) + if(malf_active) + set_status_code(SYSTEM_FAULT, TRUE) + addtimer(CALLBACK(src, PROC_REF(cycle_doors), CYCLE_OPEN), 2 SECONDS) + malf_active = FALSE + throw_chance = initial(throw_chance) + playsound(paired_cabinet, 'sound/machines/buzz-sigh.ogg', 60, vary = FALSE, extrarange = SHORT_RANGE_SOUND_EXTRARANGE) + paired_cabinet.say("Controller error. Please contact your engineering department.") idle_platform = destination_platform tram_registration.distance_travelled += (travel_trip_length - travel_remaining) travel_trip_length = 0 @@ -359,6 +387,9 @@ for(var/obj/structure/transport/linear/tram/module in transport_modules) module.estop_throw(throw_direction) +/** + * Tram comes to an emergency stop without completing its trip. Caused by emergency stop button or some catastrophic tram failure. + */ /datum/transport_controller/linear/tram/proc/halt_and_catch_fire() if(controller_status & SYSTEM_FAULT) if(!isnull(paired_cabinet)) @@ -368,6 +399,7 @@ if(travel_remaining) travel_remaining = 0 + crash_fx() var/throw_direction = travel_direction for(var/obj/structure/transport/linear/tram/module in transport_modules) module.estop_throw(throw_direction) @@ -381,6 +413,9 @@ current_speed = 0 current_load = 0 +/** + * Performs a reset of the tram's position data by finding a predetermined reference landmark, then driving to it. + */ /datum/transport_controller/linear/tram/proc/reset_position() if(idle_platform) if(get_turf(idle_platform) == get_turf(nav_beacon)) @@ -427,6 +462,17 @@ set_status_code(EMERGENCY_STOP, TRUE) log_transport("TC: [specific_transport_id] requested emergency stop.") +/** + * Tram crash sound and visuals + */ +/datum/transport_controller/linear/tram/proc/crash_fx() + playsound(source = nav_beacon, soundin = 'sound/vehicles/car_crash.ogg', vol = 100, vary = FALSE, falloff_distance = DEFAULT_TRAM_LENGTH) + nav_beacon.audible_message(span_userdanger("You hear metal grinding as the tram comes to a sudden, complete stop!")) + for(var/mob/living/tram_passenger in range(DEFAULT_TRAM_LENGTH - 2, nav_beacon)) + if(tram_passenger.stat != CONSCIOUS) + continue + shake_camera(M = tram_passenger, duration = 0.2 SECONDS, strength = 3) + /** * Handles unlocking the tram controls for use after moving * @@ -527,20 +573,36 @@ set_status_code(SYSTEM_FAULT, FALSE) reset_position() +/datum/transport_controller/linear/tram/proc/set_home_controller(obj/machinery/transport/tram_controller/tcomms/tcomms_unit) + home_controller = tcomms_unit + RegisterSignal(tcomms_unit, COMSIG_MACHINERY_POWER_LOST, PROC_REF(home_power_lost)) + RegisterSignal(tcomms_unit, COMSIG_MACHINERY_POWER_RESTORED, PROC_REF(home_power_restored)) + RegisterSignal(tcomms_unit, COMSIG_QDELETING, PROC_REF(on_home_qdel)) + log_transport("TC: [specific_transport_id] is now paired with home controller [tcomms_unit].") + if(controller_status & COMM_ERROR) + set_status_code(COMM_ERROR, FALSE) + /datum/transport_controller/linear/tram/proc/on_cabinet_qdel() paired_cabinet = null log_transport("TC: [specific_transport_id] received QDEL from controller cabinet.") set_status_code(SYSTEM_FAULT, TRUE) - send_transport_active_signal() + +/datum/transport_controller/linear/tram/proc/on_home_qdel() + home_controller = null + log_transport("TC: [specific_transport_id] received QDEL from controller cabinet.") + set_status_code(COMM_ERROR, TRUE) + +/datum/transport_controller/linear/tram/proc/home_power_lost() + set_status_code(COMM_ERROR, TRUE) + +/datum/transport_controller/linear/tram/proc/home_power_restored() + set_status_code(COMM_ERROR, FALSE) /** - * Tram malfunction random event. Set comm error, increase tram lethality. + * Tram malfunction random event. Set comm error, requiring engineering or AI intervention. */ /datum/transport_controller/linear/tram/proc/start_malf_event() - set_status_code(COMM_ERROR, TRUE) - SEND_TRANSPORT_SIGNAL(COMSIG_COMMS_STATUS, src, FALSE) - paired_cabinet.generate_repair_signals() - collision_lethality *= 1.25 + malf_active = TRUE throw_chance *= 1.25 log_transport("TC: [specific_transport_id] starting Tram Malfunction event.") @@ -551,15 +613,15 @@ * automagically reset it remotely. */ /datum/transport_controller/linear/tram/proc/end_malf_event() - if(!(controller_status & COMM_ERROR)) + if(!(malf_active)) return - set_status_code(COMM_ERROR, FALSE) - paired_cabinet.clear_repair_signals() - collision_lethality = initial(collision_lethality) + malf_active = FALSE throw_chance = initial(throw_chance) - SEND_TRANSPORT_SIGNAL(COMSIG_COMMS_STATUS, src, TRUE) log_transport("TC: [specific_transport_id] ending Tram Malfunction event.") +/datum/transport_controller/linear/tram/proc/announce_malf_event() + priority_announce("Our automated control system has lost contact with the tram's onboard computer. Please stand by, engineering has been dispatched to the tram to perform a reset.", "[command_name()] Engineering Division") + /datum/transport_controller/linear/tram/proc/register_collision(points = 1) tram_registration.collisions += points SEND_TRANSPORT_SIGNAL(COMSIG_TRAM_COLLISION, SSpersistence.tram_hits_this_round) @@ -688,11 +750,13 @@ name = "tram controller" desc = "Makes the tram go, or something. Holds the tram's electronics, controls, and maintenance panel. A sticker above the card reader says 'Engineering access only.'" icon = 'icons/obj/tram/tram_controllers.dmi' - icon_state = "controller-panel" + icon_state = "tram-controller" + base_icon_state = "tram" anchored = TRUE density = FALSE armor_type = /datum/armor/transport_module resistance_flags = LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF + interaction_flags_machine = parent_type::interaction_flags_machine | INTERACT_MACHINE_OFFLINE max_integrity = 750 integrity_failure = 0.25 layer = SIGN_LAYER @@ -700,6 +764,8 @@ idle_power_usage = BASE_MACHINE_IDLE_CONSUMPTION * 0.25 power_channel = AREA_USAGE_ENVIRON var/datum/transport_controller/linear/tram/controller_datum + /// If this machine has a cover installed + var/has_cover = TRUE /// If the cover is open var/cover_open = FALSE /// If the cover is locked @@ -732,14 +798,13 @@ ..() /obj/machinery/transport/tram_controller/add_context(atom/source, list/context, obj/item/held_item, mob/user) - if(held_item?.tool_behaviour == TOOL_SCREWDRIVER) + if(held_item?.tool_behaviour == TOOL_SCREWDRIVER && has_cover) context[SCREENTIP_CONTEXT_RMB] = panel_open ? "close panel" : "open panel" - if(!held_item) + if(!held_item && has_cover) context[SCREENTIP_CONTEXT_LMB] = cover_open ? "access controls" : "open cabinet" context[SCREENTIP_CONTEXT_RMB] = cover_open ? "close cabinet" : "toggle lock" - if(panel_open) if(held_item?.tool_behaviour == TOOL_WRENCH) context[SCREENTIP_CONTEXT_RMB] = "unscrew cabinet" @@ -759,14 +824,15 @@ /obj/machinery/transport/tram_controller/examine(mob/user) . = ..() - . += span_notice("The door appears to be [cover_locked ? "locked. Swipe an ID card to unlock" : "unlocked. Swipe an ID card to lock"].") - if(panel_open) - . += span_notice("It is secured to the tram wall with [EXAMINE_HINT("bolts.")]") - . += span_notice("The maintenance panel can be closed with a [EXAMINE_HINT("screwdriver.")]") - else - . += span_notice("The maintenance panel can be opened with a [EXAMINE_HINT("screwdriver.")]") + if(has_cover) + . += span_notice("The door appears to be [cover_locked ? "locked. Swipe an ID card to unlock" : "unlocked. Swipe an ID card to lock"].") + if(panel_open) + . += span_notice("It is secured to the tram wall with [EXAMINE_HINT("bolts.")]") + . += span_notice("The maintenance panel can be closed with a [EXAMINE_HINT("screwdriver.")]") + else + . += span_notice("The maintenance panel can be opened with a [EXAMINE_HINT("screwdriver.")]") - if(cover_open) + if(cover_open || !has_cover) . += span_notice("The [EXAMINE_HINT("yellow reset button")] resets the tram controller if a problem occurs or needs to be restarted.") . += span_notice("The [EXAMINE_HINT("red stop button")] immediately stops the tram, requiring a reset afterwards.") . += span_notice("The cabinet can be closed with a [EXAMINE_HINT("Right-click.")]") @@ -778,16 +844,17 @@ if(user.combat_mode || cover_open) return ..() - var/obj/item/card/id/id_card = user.get_id_in_hand() - if(!isnull(id_card)) - try_toggle_lock(user, id_card) - return + if(has_cover) + var/obj/item/card/id/id_card = user.get_id_in_hand() + if(!isnull(id_card)) + try_toggle_lock(user, id_card) + return return ..() /obj/machinery/transport/tram_controller/attack_hand(mob/living/user, params) . = ..() - if(cover_open) + if(cover_open || !has_cover) return if(cover_locked) @@ -803,6 +870,8 @@ /obj/machinery/transport/tram_controller/attack_hand_secondary(mob/living/user, params) . = ..() + if(!has_cover) + return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN if(!cover_open) var/obj/item/card/id/id_card = user.get_idcard(TRUE) @@ -842,6 +911,9 @@ /obj/machinery/transport/tram_controller/wrench_act_secondary(mob/living/user, obj/item/tool) . = ..() + if(!has_cover) + return + if(panel_open && cover_open) balloon_alert(user, "unsecuring...") tool.play_tool_sound(src) @@ -877,53 +949,55 @@ /obj/machinery/transport/tram_controller/update_overlays() . = ..() - if(!cover_open) - . += mutable_appearance(icon, "controller-closed") - if(cover_locked) - . += mutable_appearance(icon, "controller-locked") + if(has_cover) + if(!cover_open) + . += mutable_appearance(icon, "[base_icon_state]-closed") + if(cover_locked) + . += mutable_appearance(icon, "[base_icon_state]-locked") - else - var/mutable_appearance/controller_door = mutable_appearance(icon, "controller-open") - controller_door.pixel_w = -3 - . += controller_door + else + var/mutable_appearance/controller_door = mutable_appearance(icon, "[base_icon_state]-open") + controller_door.pixel_w = -3 + . += controller_door if(machine_stat & NOPOWER) - . += mutable_appearance(icon, "estop") - . += emissive_appearance(icon, "estop", src, alpha = src.alpha) + . += mutable_appearance(icon, "[base_icon_state]-estop") + . += emissive_appearance(icon, "[base_icon_state]-estop", src, alpha = src.alpha) return - . += mutable_appearance(icon, "power") - . += emissive_appearance(icon, "power", src, alpha = src.alpha) + . += mutable_appearance(icon, "[base_icon_state]-power") + . += emissive_appearance(icon, "[base_icon_state]-power", src, alpha = src.alpha) if(!controller_datum) - . += mutable_appearance(icon, "fatal") - . += emissive_appearance(icon, "fatal", src, alpha = src.alpha) + . += mutable_appearance(icon, "[base_icon_state]-fatal") + . += emissive_appearance(icon, "[base_icon_state]-fatal", src, alpha = src.alpha) return if(controller_datum.controller_status & EMERGENCY_STOP) - . += mutable_appearance(icon, "estop") - . += emissive_appearance(icon, "estop", src, alpha = src.alpha) + . += mutable_appearance(icon, "[base_icon_state]-estop") + . += emissive_appearance(icon, "[base_icon_state]-estop", src, alpha = src.alpha) + return + + if(controller_datum.controller_status & SYSTEM_FAULT || controller_datum.malf_active) + . += mutable_appearance(icon, "[base_icon_state]-fault") + . += emissive_appearance(icon, "[base_icon_state]-fault", src, alpha = src.alpha) return if(!(controller_datum.controller_status & DOORS_READY)) - . += mutable_appearance(icon, "doors") - . += emissive_appearance(icon, "doors", src, alpha = src.alpha) + . += mutable_appearance(icon, "[base_icon_state]-doors") + . += emissive_appearance(icon, "[base_icon_state]-doors", src, alpha = src.alpha) if(controller_datum.controller_active) - . += mutable_appearance(icon, "active") - . += emissive_appearance(icon, "active", src, alpha = src.alpha) - - if(controller_datum.controller_status & SYSTEM_FAULT) - . += mutable_appearance(icon, "fault") - . += emissive_appearance(icon, "fault", src, alpha = src.alpha) + . += mutable_appearance(icon, "[base_icon_state]-active") + . += emissive_appearance(icon, "[base_icon_state]-active", src, alpha = src.alpha) - else if(controller_datum.controller_status & COMM_ERROR) - . += mutable_appearance(icon, "comms") - . += emissive_appearance(icon, "comms", src, alpha = src.alpha) + if(controller_datum.controller_status & COMM_ERROR) + . += mutable_appearance(icon, "[base_icon_state]-comms") + . += emissive_appearance(icon, "[base_icon_state]-comms", src, alpha = src.alpha) else - . += mutable_appearance(icon, "normal") - . += emissive_appearance(icon, "normal", src, alpha = src.alpha) + . += mutable_appearance(icon, "[base_icon_state]-normal") + . += emissive_appearance(icon, "[base_icon_state]-normal", src, alpha = src.alpha) /** * Find the controller associated with the transport module the cabinet is sitting on. @@ -971,24 +1045,12 @@ balloon_alert(user, "access controller shorted") return TRUE -/** - * Check if the tram was malfunctioning due to the random event, and if so end the event on repair. - */ -/obj/machinery/transport/tram_controller/try_fix_machine(obj/machinery/transport/machine, mob/living/user, obj/item/tool) - . = ..() - - if(. == FALSE) - return - - if(!controller_datum) - return +/obj/machinery/transport/tram_controller/ui_status(mob/user, datum/ui_state/state) + if(HAS_SILICON_ACCESS(user) && (controller_datum.controller_status & SYSTEM_FAULT || controller_datum.controller_status & COMM_ERROR || !is_operational)) + to_chat(user, span_warning("An error code flashes: Communications fault! The [src] is not responding to remote inputs!")) + return UI_CLOSE - var/datum/round_event/tram_malfunction/malfunction_event = locate(/datum/round_event/tram_malfunction) in SSevents.running - if(malfunction_event) - malfunction_event.end() - - if(controller_datum.controller_status & COMM_ERROR) - controller_datum.set_status_code(COMM_ERROR, FALSE) + return ..() /obj/machinery/transport/tram_controller/ui_interact(mob/user, datum/tgui/ui) . = ..() @@ -996,7 +1058,7 @@ if(!cover_open && !HAS_SILICON_ACCESS(user) && !isobserver(user)) return - if(!is_operational) + if(machine_stat & BROKEN) return ui = SStgui.try_update_ui(user, src, ui) @@ -1042,6 +1104,10 @@ if(!COOLDOWN_FINISHED(src, manual_command_cooldown)) return + if(machine_stat & NOPOWER) + visible_message(span_warning("The button doesn't appear to do anything, the [src]'s power failure status is flashing!"), vision_distance = COMBAT_MESSAGE_RANGE) + return + switch(action) if("dispatch") @@ -1077,11 +1143,53 @@ COOLDOWN_START(src, manual_command_cooldown, 2 SECONDS) + +/// Controller that sits in the telecoms room +/obj/machinery/transport/tram_controller/tcomms + name = "tram central controller" + desc = "This semi-conductor is half of the brains controlling the tram and its auxillary equipment." + icon_state = "home-controller" + base_icon_state = "home" + density = TRUE + layer = BELOW_OBJ_LAYER + power_channel = AREA_USAGE_EQUIP + cover_open = TRUE + has_cover = FALSE + +/// Handles the machine being affected by an EMP, causing signal failure. +/obj/machinery/transport/tram_controller/tcomms/emp_act(severity) + . = ..() + if(. & EMP_PROTECT_SELF) + return + if(prob(100/severity) && !(machine_stat & EMPED)) + set_machine_stat(machine_stat | EMPED) + controller_datum.set_status_code(COMM_ERROR, TRUE) + var/duration = (300 SECONDS)/severity + addtimer(CALLBACK(src, PROC_REF(de_emp)), rand(duration - 2 SECONDS, duration + 2 SECONDS)) + +/// Handles the machine stopping being affected by an EMP. +/obj/machinery/transport/tram_controller/tcomms/proc/de_emp() + set_machine_stat(machine_stat & ~EMPED) + controller_datum.set_status_code(COMM_ERROR, FALSE) + +/obj/machinery/transport/tram_controller/tcomms/find_controller() + link_tram() + return + +/obj/machinery/transport/tram_controller/tcomms/link_tram() + . = ..() + var/datum/transport_controller/linear/tram/tram = transport_ref?.resolve() + controller_datum = tram + if(!controller_datum) + return + controller_datum.set_home_controller(src) + RegisterSignal(SStransport, COMSIG_TRANSPORT_ACTIVE, PROC_REF(sync_controller)) + /obj/item/wallframe/tram/controller name = "tram controller cabinet" desc = "A box that contains the equipment to control a tram. Just secure to the tram wall." icon = 'icons/obj/tram/tram_controllers.dmi' - icon_state = "controller-panel" + icon_state = "tram-controller" custom_materials = list(/datum/material/titanium = SHEET_MATERIAL_AMOUNT * 4, /datum/material/iron = SHEET_MATERIAL_AMOUNT * 2, /datum/material/glass = SHEET_MATERIAL_AMOUNT * 2) result_path = /obj/machinery/transport/tram_controller pixel_shift = 32 diff --git a/code/modules/transport/tram/tram_doors.dm b/code/modules/transport/tram/tram_doors.dm index 644f45def4aa5..653b5cbabb527 100644 --- a/code/modules/transport/tram/tram_doors.dm +++ b/code/modules/transport/tram/tram_doors.dm @@ -1,7 +1,7 @@ -#define TRAM_DOOR_WARNING_TIME (1.4 SECONDS) -#define TRAM_DOOR_CYCLE_TIME (0.4 SECONDS) +#define TRAM_DOOR_WARNING_TIME (0.9 SECONDS) +#define TRAM_DOOR_CYCLE_TIME (0.6 SECONDS) #define TRAM_DOOR_CRUSH_TIME (0.7 SECONDS) -#define TRAM_DOOR_RECYCLE_TIME (3 SECONDS) +#define TRAM_DOOR_RECYCLE_TIME (2.7 SECONDS) /obj/machinery/door/airlock/tram name = "tram door" @@ -9,7 +9,7 @@ overlays_file = 'icons/obj/doors/airlocks/tram/tram-overlays.dmi' multi_tile = TRUE opacity = FALSE - assemblytype = null + assemblytype = /obj/structure/door_assembly/multi_tile/door_assembly_tram airlock_material = "glass" air_tight = TRUE req_access = list(ACCESS_TCOMMS) @@ -55,7 +55,7 @@ update_freelook_sight() flags_1 &= ~PREVENT_CLICK_UNDER_1 air_update_turf(TRUE, FALSE) - sleep(TRAM_DOOR_CYCLE_TIME) + sleep(TRAM_DOOR_WARNING_TIME) layer = OPEN_DOOR_LAYER update_icon(ALL, AIRLOCK_OPEN, TRUE) operating = FALSE @@ -64,7 +64,7 @@ /obj/machinery/door/airlock/tram/close(forced = DEFAULT_DOOR_CHECKS, force_crush = FALSE) retry_counter++ - if(retry_counter >= 4 || force_crush || forced == BYPASS_DOOR_CHECKS) + if(retry_counter >= 3 || force_crush || forced == BYPASS_DOOR_CHECKS) try_to_close(forced = BYPASS_DOOR_CHECKS) return @@ -116,7 +116,7 @@ air_update_turf(TRUE, TRUE) crush() crushing_in_progress = FALSE - sleep(TRAM_DOOR_CYCLE_TIME) + sleep(TRAM_DOOR_WARNING_TIME) update_icon(ALL, AIRLOCK_CLOSED, 1) operating = FALSE retry_counter = 0 @@ -163,7 +163,7 @@ if(airlock_state == AIRLOCK_CLOSED) return - if(retry_counter < 3) + if(retry_counter < 2) close() return @@ -205,6 +205,9 @@ * Tram doors can be opened with hands when unpowered */ /obj/machinery/door/airlock/tram/try_safety_unlock(mob/user) + if(DOING_INTERACTION_WITH_TARGET(user, src)) + return + if(!hasPower() && density) balloon_alert(user, "pulling emergency exit...") if(do_after(user, 4 SECONDS, target = src)) @@ -215,10 +218,20 @@ * If you pry (bump) the doors open midtravel, open quickly so you can jump out and make a daring escape. */ /obj/machinery/door/airlock/tram/bumpopen(mob/user, forced = BYPASS_DOOR_CHECKS) + if(DOING_INTERACTION_WITH_TARGET(user, src)) + return + if(operating || !density) return + + if(!hasPower()) + try_safety_unlock(user) + return + var/datum/transport_controller/linear/tram/tram_part = transport_ref?.resolve() add_fingerprint(user) + if(!tram_part.controller_active) + return if((tram_part.travel_remaining < DEFAULT_TRAM_LENGTH || tram_part.travel_remaining > tram_part.travel_trip_length - DEFAULT_TRAM_LENGTH) && tram_part.controller_active) return // we're already animating, don't reset that open(forced = BYPASS_DOOR_CHECKS) diff --git a/code/modules/transport/tram/tram_machinery.dm b/code/modules/transport/tram/tram_machinery.dm index 99375bfbaf578..a60a1d658663c 100644 --- a/code/modules/transport/tram/tram_machinery.dm +++ b/code/modules/transport/tram/tram_machinery.dm @@ -91,6 +91,17 @@ /// The ID of the tram we're linked to var/specific_transport_id = TRAMSTATION_LINE_1 +/// We allow borgs to use the button locally, but not the AI remotely +/obj/machinery/button/transport/tram/attack_ai(mob/user) + if(isAI(user) || panel_open) + return + if(HAS_SILICON_ACCESS(user) && !issilicon(user)) //admins and remote controls can use it at a distance + return attack_hand(user) + if(in_range(user, src)) + return attack_hand(user) + else + to_chat(user, span_warning("You are too far away to activate the button!")) + /obj/machinery/button/transport/tram/setup_device() var/obj/item/assembly/control/transport/call_button/tram_device = device tram_device.id = id diff --git a/code/modules/transport/tram/tram_remote.dm b/code/modules/transport/tram/tram_remote.dm index 3a45ec4e6650e..65c2cff8727a6 100644 --- a/code/modules/transport/tram/tram_remote.dm +++ b/code/modules/transport/tram/tram_remote.dm @@ -45,7 +45,7 @@ to_chat(user, span_notice("You change the platform ID on [src] to [selected_platform].")) ///set safety bypass -/obj/item/assembly/control/transport/remote/CtrlClick(mob/user) +/obj/item/assembly/control/transport/remote/item_ctrl_click(mob/user) switch(options) if(!RAPID_MODE) options |= RAPID_MODE @@ -53,6 +53,7 @@ options &= ~RAPID_MODE update_appearance() balloon_alert(user, "mode: [options ? "fast" : "safe"]") + return CLICK_ACTION_SUCCESS /obj/item/assembly/control/transport/remote/examine(mob/user) . = ..() diff --git a/code/modules/transport/tram/tram_signals.dm b/code/modules/transport/tram/tram_signals.dm index eb64866603043..db8aa17ddcb3e 100644 --- a/code/modules/transport/tram/tram_signals.dm +++ b/code/modules/transport/tram/tram_signals.dm @@ -17,7 +17,7 @@ interaction_flags_machine = INTERACT_MACHINE_OPEN circuit = /obj/item/circuitboard/machine/crossing_signal // pointless if it only takes 2 seconds to cross but updates every 2 seconds - subsystem_type = /datum/controller/subsystem/processing/fastprocess + subsystem_type = /datum/controller/subsystem/processing/transport light_color = LIGHT_COLOR_BABY_BLUE /// green, amber, or red for tram, blue if it's emag, tram missing, etc. var/signal_state = XING_STATE_MALF @@ -40,8 +40,8 @@ * Red: decent chance of getting hit, but if you're quick it's a decent gamble. * Amber: slow people may be in danger. */ - var/amber_distance_threshold = AMBER_THRESHOLD_NORMAL - var/red_distance_threshold = RED_THRESHOLD_NORMAL + var/amber_distance_threshold = XING_THRESHOLD_AMBER + var/red_distance_threshold = XING_THRESHOLD_RED /** Crossing signal subtypes * @@ -203,34 +203,18 @@ sensor_ref = null if(operating_status < TRANSPORT_REMOTE_WARNING) operating_status = TRANSPORT_REMOTE_WARNING - degraded_response() update_appearance() /obj/machinery/transport/crossing_signal/proc/wake_sensor() - if(operating_status > TRANSPORT_REMOTE_WARNING) - degraded_response() - return - var/obj/machinery/transport/guideway_sensor/linked_sensor = sensor_ref?.resolve() if(isnull(linked_sensor)) operating_status = TRANSPORT_REMOTE_WARNING - degraded_response() else if(linked_sensor.trigger_sensor()) operating_status = TRANSPORT_SYSTEM_NORMAL - normal_response() else operating_status = TRANSPORT_REMOTE_WARNING - degraded_response() - -/obj/machinery/transport/crossing_signal/proc/normal_response() - amber_distance_threshold = AMBER_THRESHOLD_NORMAL - red_distance_threshold = RED_THRESHOLD_NORMAL - -/obj/machinery/transport/crossing_signal/proc/degraded_response() - amber_distance_threshold = AMBER_THRESHOLD_DEGRADED - red_distance_threshold = RED_THRESHOLD_DEGRADED /obj/machinery/transport/crossing_signal/proc/clear_uplink() inbound = null @@ -316,20 +300,23 @@ end_processing() /obj/machinery/transport/crossing_signal/process() - + // idle aspect is green or blue depending on the signal status + // degraded signal operating conditions of any type show blue + var/idle_aspect = operating_status == TRANSPORT_SYSTEM_NORMAL ? XING_STATE_GREEN : XING_STATE_MALF var/datum/transport_controller/linear/tram/tram = transport_ref?.resolve() - // Check for stopped states. - if(!tram || !tram.controller_operational || !is_operational || !inbound || !outbound) + // Check for stopped states. Will kill the process since tram starting up will restart process. + if(!tram || !tram.controller_operational || !tram.controller_active || !is_operational || !inbound || !outbound) // Tram missing, we lost power, or something isn't right - // Throw the error message (blue) - set_signal_state(XING_STATE_MALF, force = !is_operational) + // Set idle and stop processing, since the tram won't be moving + set_signal_state(idle_aspect, force = !is_operational) return PROCESS_KILL var/obj/structure/transport/linear/tram_part = tram.return_closest_platform_to(src) + // The structure is gone, so we're done here. if(QDELETED(tram_part)) - set_signal_state(XING_STATE_MALF, force = !is_operational) + set_signal_state(idle_aspect, force = !is_operational) return PROCESS_KILL // Everything will be based on position and travel direction @@ -347,41 +334,32 @@ tram_velocity_sign = tram.travel_direction & EAST ? 1 : -1 // How far away are we? negative if already passed. - var/approach_distance = tram_velocity_sign * (signal_pos - (tram_pos + (DEFAULT_TRAM_LENGTH * 0.5))) - - // Check for stopped state. - // Will kill the process since tram starting up will restart process. - if(!tram.controller_active) - set_signal_state(XING_STATE_GREEN) - return PROCESS_KILL + var/approach_distance = tram_velocity_sign * (signal_pos - (tram_pos + DEFAULT_TRAM_MIDPOINT)) // Check if tram is driving away from us. - if(approach_distance < 0) + if(approach_distance < -abs(DEFAULT_TRAM_MIDPOINT)) // driving away. Green. In fact, in order to reverse, it'll have to stop, so let's go ahead and kill. - set_signal_state(XING_STATE_GREEN) + set_signal_state(idle_aspect) return PROCESS_KILL // Check the tram's terminus station. // INBOUND 1 < 2 < 3 // OUTBOUND 1 > 2 > 3 if(tram.travel_direction & WEST && inbound < tram.destination_platform.platform_code) - set_signal_state(XING_STATE_GREEN) + set_signal_state(idle_aspect) return PROCESS_KILL if(tram.travel_direction & EAST && outbound > tram.destination_platform.platform_code) - set_signal_state(XING_STATE_GREEN) + set_signal_state(idle_aspect) return PROCESS_KILL // Finally the interesting part where it's ACTUALLY approaching if(approach_distance <= red_distance_threshold) - if(operating_status != TRANSPORT_SYSTEM_NORMAL) - set_signal_state(XING_STATE_MALF) - else - set_signal_state(XING_STATE_RED) + set_signal_state(XING_STATE_RED) return - if(approach_distance <= amber_distance_threshold) + if(approach_distance <= amber_distance_threshold && operating_status == TRANSPORT_SYSTEM_NORMAL) set_signal_state(XING_STATE_AMBER) return - set_signal_state(XING_STATE_GREEN) + set_signal_state(idle_aspect) /** * Set the signal state and update appearance. diff --git a/code/modules/transport/transport_module.dm b/code/modules/transport/transport_module.dm index a2ba6f5167b47..268452743e7b2 100644 --- a/code/modules/transport/transport_module.dm +++ b/code/modules/transport/transport_module.dm @@ -165,6 +165,12 @@ initial_contents += new_initial_contents +///verify the movables in our list of contents are actually on our loc +/obj/structure/transport/linear/proc/verify_transport_contents() + for(var/atom/movable/movable_contents as anything in transport_contents) + if(!(movable_contents.loc in locs)) + remove_item_from_transport(movable_contents) + ///signal handler for COMSIG_MOVABLE_UPDATE_GLIDE_SIZE: when a movable in transport_contents changes its glide_size independently. ///adds that movable to a lazy list, movables in that list have their glide_size updated when the tram next moves /obj/structure/transport/linear/proc/on_changed_glide_size(atom/movable/moving_contents, new_glide_size) @@ -754,6 +760,23 @@ if(direction == DOWN) user.visible_message(span_notice("[user] moves the lift downwards."), span_notice("You move the lift downwards.")) +/obj/machinery/door/poddoor/lift + name = "elevator door" + desc = "Keeps idiots like you from walking into an open elevator shaft." + icon = 'icons/obj/doors/liftdoor.dmi' + opacity = FALSE + glass = TRUE + +/obj/machinery/door/poddoor/lift/Initialize(mapload) + if(!isnull(transport_linked_id)) //linter and stuff + elevator_mode = TRUE + return ..() + +/obj/machinery/door/poddoor/lift/preopen + icon_state = "open" + density = FALSE + opacity = FALSE + // A subtype intended for "public use" /obj/structure/transport/linear/public icon = 'icons/turf/floors.dmi' @@ -931,7 +954,6 @@ /obj/structure/transport/linear/tram/proc/estop_throw(throw_direction) for(var/mob/living/passenger in transport_contents) - to_chat(passenger, span_userdanger("The tram comes to a sudden, grinding stop!")) var/mob_throw_chance = transport_controller_datum.throw_chance if(prob(mob_throw_chance || 17.5) || HAS_TRAIT(passenger, TRAIT_CURSED)) // sometimes you go through a window, especially with bad luck passenger.AddElement(/datum/element/window_smashing, duration = 1.5 SECONDS) diff --git a/code/modules/tutorials/_tutorial.dm b/code/modules/tutorials/_tutorial.dm index 7819a9e2b85ac..1211f8e299355 100644 --- a/code/modules/tutorials/_tutorial.dm +++ b/code/modules/tutorials/_tutorial.dm @@ -9,19 +9,20 @@ VAR_PROTECTED/mob/user VAR_PRIVATE/atom/movable/screen/tutorial_instruction/instruction_screen + VAR_PRIVATE/atom/movable/screen/tutorial_skip/skip_button /datum/tutorial/New(mob/user) src.user = user - RegisterSignal(user, COMSIG_QDELETING, PROC_REF(destroy_self)) - RegisterSignal(user.client, COMSIG_QDELETING, PROC_REF(destroy_self)) + RegisterSignals(user, list(COMSIG_QDELETING, COMSIG_MOB_LOGOUT), PROC_REF(destroy_self)) /datum/tutorial/Destroy(force) user.client?.screen -= instruction_screen + user.client?.screen -= skip_button QDEL_NULL(instruction_screen) + QDEL_NULL(skip_button) user = null - return ..() /// Gets the [`/datum/tutorial_manager`] that owns this tutorial. @@ -71,6 +72,7 @@ if (!isnull(instruction_screen)) animate(instruction_screen, time = INSTRUCTION_SCREEN_DELAY, alpha = 0, easing = SINE_EASING) + animate(skip_button, time = INSTRUCTION_SCREEN_DELAY, alpha = 0, easing = SINE_EASING) delay += INSTRUCTION_SCREEN_DELAY QDEL_IN(src, delay) @@ -98,6 +100,10 @@ /// If a message already exists, will fade it out and replace it. /datum/tutorial/proc/show_instruction(message) PROTECTED_PROC(TRUE) + if(isnull(skip_button)) + skip_button = new + user.client?.screen += skip_button + RegisterSignal(skip_button, COMSIG_SCREEN_ELEMENT_CLICK, PROC_REF(dismiss)) if (isnull(instruction_screen)) instruction_screen = new(null, null, message, user.client) @@ -242,7 +248,13 @@ /// Dismisses the tutorial, not marking it as completed in the database. /// Call `/datum/tutorial/proc/dismiss()` instead. /datum/tutorial_manager/proc/dismiss(mob/user) - performing_ckeys -= user.ckey + // this can be null in some disconnect/mob logout cases so we use some fallbacks + var/user_ckey = user.ckey + if(!user_ckey && user.canon_client) + user_ckey = user.canon_client.ckey + if(!user_ckey && user.mind?.key) + user_ckey = ckey(user.mind.key) + performing_ckeys -= user_ckey /// Given a ckey, will mark them as being completed without affecting the database. /// Call `/datum/tutorial/proc/complete()` instead. diff --git a/code/modules/tutorials/tutorial_instruction.dm b/code/modules/tutorials/tutorial_instruction.dm index 05c95e2f7540d..0ad9ce6f2e0fe 100644 --- a/code/modules/tutorials/tutorial_instruction.dm +++ b/code/modules/tutorials/tutorial_instruction.dm @@ -7,7 +7,6 @@ layer = TUTORIAL_INSTRUCTIONS_LAYER mouse_opacity = MOUSE_OPACITY_TRANSPARENT - var/client/client var/atom/movable/screen/tutorial_instruction_text/instruction_text /atom/movable/screen/tutorial_instruction/Initialize(mapload, datum/hud/hud_owner, message, client/client) @@ -15,14 +14,12 @@ transform = transform.Scale(36, 2.5) - src.client = client animate(src, alpha = 245, time = 0.8 SECONDS, easing = SINE_EASING) instruction_text = new(src, null, message, client) vis_contents += instruction_text /atom/movable/screen/tutorial_instruction/Destroy() - client = null QDEL_NULL(instruction_text) return ..() diff --git a/code/modules/tutorials/tutorial_skip.dm b/code/modules/tutorials/tutorial_skip.dm new file mode 100644 index 0000000000000..803aebc865054 --- /dev/null +++ b/code/modules/tutorials/tutorial_skip.dm @@ -0,0 +1,35 @@ +/atom/movable/screen/tutorial_skip + icon = 'icons/effects/alphacolors.dmi' + icon_state = "white" + screen_loc = "TOP,LEFT" + color = COLOR_NEARLY_ALL_BLACK + alpha = 0 + mouse_opacity = MOUSE_OPACITY_OPAQUE + layer = TUTORIAL_INSTRUCTIONS_LAYER + var/atom/movable/screen/tutorial_skip_text/skip_text + +/atom/movable/screen/tutorial_skip/Initialize(mapload, datum/hud/hud_owner) + . = ..() + transform = transform.Scale(9, 1) + skip_text = new(null, hud_owner) + vis_contents += skip_text + maptext = MAPTEXT_VCR_OSD_MONO("Remind me later") + animate(src, alpha = 245, time = 0.8 SECONDS, easing = SINE_EASING) + +/atom/movable/screen/tutorial_skip/Destroy() + QDEL_NULL(skip_text) + return ..() + +/atom/movable/screen/tutorial_skip_text + alpha = 0 + layer = TUTORIAL_INSTRUCTIONS_LAYER + mouse_opacity = MOUSE_OPACITY_TRANSPARENT + maptext_height = 32 + maptext_width = 200 + maptext_x = 20 + maptext_y = 9 + +/atom/movable/screen/tutorial_skip_text/Initialize(mapload, datum/hud/hud_owner) + . = ..() + var/newtext = MAPTEXT_VCR_OSD_MONO("Remind me later") + animate(src, alpha = 255, time = 0.5 SECONDS, maptext=newtext) diff --git a/code/modules/unit_tests/_unit_tests.dm b/code/modules/unit_tests/_unit_tests.dm index 357c48f7a7b6f..d164bca069dab 100644 --- a/code/modules/unit_tests/_unit_tests.dm +++ b/code/modules/unit_tests/_unit_tests.dm @@ -101,6 +101,7 @@ #include "bespoke_id.dm" #include "binary_insert.dm" #include "bitrunning.dm" +#include "blackmarket.dm" #include "blindness.dm" #include "bloody_footprints.dm" #include "breath.dm" @@ -108,6 +109,7 @@ #include "cable_powernets.dm" #include "card_mismatch.dm" #include "cardboard_cutouts.dm" +#include "cargo_dep_order_locations.dm" #include "cargo_selling.dm" #include "chain_pull_through_space.dm" #include "changeling.dm" @@ -117,6 +119,7 @@ #include "closets.dm" #include "clothing_under_armor_subtype_check.dm" #include "combat.dm" +#include "combat_stamina.dm" #include "combat_welder.dm" #include "component_tests.dm" #include "confusion.dm" @@ -124,6 +127,7 @@ #include "container_sanity.dm" #include "crayons.dm" #include "create_and_destroy.dm" +#include "cyborg_tool.dm" #include "dcs_check_list_arguments.dm" #include "dcs_get_id_from_elements.dm" #include "designs.dm" @@ -176,6 +180,7 @@ #include "map_landmarks.dm" #include "mapload_space_verification.dm" #include "mapping.dm" +#include "mapping_nearstation_test.dm" #include "mecha_damage.dm" #include "medical_wounds.dm" #include "merge_type.dm" @@ -202,6 +207,7 @@ #include "organ_bodypart_shuffle.dm" #include "organ_set_bonus.dm" #include "organs.dm" +#include "orphaned_genturf.dm" #include "outfit_sanity.dm" #include "oxyloss_suffocation.dm" #include "paintings.dm" @@ -251,6 +257,7 @@ #include "spell_mindswap.dm" #include "spell_names.dm" #include "spell_shapeshift.dm" +#include "spell_timestop.dm" #include "spies.dm" #include "spritesheets.dm" #include "stack_singular_name.dm" diff --git a/code/modules/unit_tests/blackmarket.dm b/code/modules/unit_tests/blackmarket.dm new file mode 100644 index 0000000000000..984e2ea815503 --- /dev/null +++ b/code/modules/unit_tests/blackmarket.dm @@ -0,0 +1,23 @@ +/// Ensures black market items have acceptable variable values. +/datum/unit_test/blackmarket + +/datum/unit_test/blackmarket/Run() + for(var/datum/market_item/prototype as anything in subtypesof(/datum/market_item)) + if(prototype::abstract_path == prototype) //skip abstract paths + continue + if(!prototype::category) + TEST_FAIL("[prototype] doesn't have a set category (or the abstract path var isn't correctly set)") + continue + if(!prototype::item) + TEST_FAIL("[prototype] doesn't have a set item (or the abstract path var isn't correctly set)") + continue + if(isnull(prototype::price) && prototype::price_max <= prototype::price_min) + TEST_FAIL("[prototype] doesn't have a correctly set random price (price_max should be higher than price_min)") + if(isnull(prototype::stock) && prototype::stock_max < prototype::stock_min) + TEST_FAIL("[prototype] doesn't have a correctly set random stock (stock_max shouldn't be lower than stock_min)") + if(!isnum(prototype::availability_prob)) + TEST_FAIL("[prototype] doesn't have a set availability_prob (must be a number)") + if(!prototype::name) + TEST_FAIL("[prototype] doesn't have a set name") + if(!prototype::desc) + TEST_FAIL("[prototype] doesn't have a set desc") diff --git a/code/modules/unit_tests/cardboard_cutouts.dm b/code/modules/unit_tests/cardboard_cutouts.dm index d18c7f0eb8a32..94b7dd974e68c 100644 --- a/code/modules/unit_tests/cardboard_cutouts.dm +++ b/code/modules/unit_tests/cardboard_cutouts.dm @@ -25,9 +25,3 @@ var/obj/item/cardboard_cutout/xenomorph/xenomorph_cutout = new test_screenshot("xenomorph_cutout", getFlatIcon(xenomorph_cutout)) - -/obj/item/cardboard_cutout/nuclear_operative - starting_cutout = "Nuclear Operative" - -/obj/item/cardboard_cutout/xenomorph - starting_cutout = "Xenomorph" diff --git a/code/modules/unit_tests/cargo_dep_order_locations.dm b/code/modules/unit_tests/cargo_dep_order_locations.dm new file mode 100644 index 0000000000000..106a0eb19a76b --- /dev/null +++ b/code/modules/unit_tests/cargo_dep_order_locations.dm @@ -0,0 +1,18 @@ +/datum/unit_test/cargo_dep_order_locations + +/datum/unit_test/cargo_dep_order_locations/Run() + for(var/datum/job_department/department as anything in SSjob.joinable_departments) + var/delivery_areas = department.department_delivery_areas + if(!length(delivery_areas)) + continue + if(check_valid_delivery_location(delivery_areas)) + continue + TEST_FAIL("[department.type] failed to find a valid delivery location on this map.") + + +/datum/unit_test/cargo_dep_order_locations/proc/check_valid_delivery_location(list/delivery_areas) + for(var/delivery_area_type in delivery_areas) + + if(GLOB.areas_by_type[delivery_area_type]) + return TRUE + return FALSE diff --git a/code/modules/unit_tests/changeling.dm b/code/modules/unit_tests/changeling.dm index 9749d760ea91c..7f86510fd62d1 100644 --- a/code/modules/unit_tests/changeling.dm +++ b/code/modules/unit_tests/changeling.dm @@ -80,7 +80,7 @@ ling.dna.features["horns"] = "Curled" ling.dna.features["frills"] = "Short" ling.dna.features["spines"] = "Long + Membrane" - ling.dna.features["body_markings"] = "Light Belly" + ling.dna.features["lizard_markings"] = "Light Belly" ling.dna.features["legs"] = DIGITIGRADE_LEGS ling.eye_color_left = COLOR_WHITE ling.eye_color_right = COLOR_WHITE diff --git a/code/modules/unit_tests/combat_stamina.dm b/code/modules/unit_tests/combat_stamina.dm new file mode 100644 index 0000000000000..7c84f8281aea5 --- /dev/null +++ b/code/modules/unit_tests/combat_stamina.dm @@ -0,0 +1,25 @@ +/// Tests 100 stamina damage = stamcrit +/datum/unit_test/stamcrit + priority = TEST_LONGER + +/datum/unit_test/stamcrit/Run() + var/mob/living/carbon/human/consistent/tider = allocate(__IMPLIED_TYPE__) + tider.stamina_regen_time = 0.2 SECONDS + var/stamloss_to_reach_crit_threshold = tider.maxHealth + tider.adjustStaminaLoss(stamloss_to_reach_crit_threshold - 1) + TEST_ASSERT(!tider.has_status_effect(/datum/status_effect/incapacitating/stamcrit), "Stamcrit should not be applied at [stamloss_to_reach_crit_threshold - 1] stamina damage") + tider.adjustStaminaLoss(1) + TEST_ASSERT(tider.has_status_effect(/datum/status_effect/incapacitating/stamcrit), "Stamcrit should be applied at [stamloss_to_reach_crit_threshold] stamina damage") + sleep(tider.stamina_regen_time * 2) + TEST_ASSERT(!tider.has_status_effect(/datum/status_effect/incapacitating/stamcrit), "Stamcrit should be removed after regen time") + +/// Tests stamina regen after the set time +/datum/unit_test/stam_regen + priority = TEST_LONGER + +/datum/unit_test/stam_regen/Run() + var/mob/living/carbon/human/consistent/tider = allocate(__IMPLIED_TYPE__) + tider.stamina_regen_time = 0.2 SECONDS + tider.adjustStaminaLoss(50) + sleep(tider.stamina_regen_time * 2) + TEST_ASSERT_EQUAL(tider.getStaminaLoss(), 0, "Stamina should be fully regenerated after regen time") diff --git a/code/modules/unit_tests/cyborg_tool.dm b/code/modules/unit_tests/cyborg_tool.dm new file mode 100644 index 0000000000000..39aed619ec50d --- /dev/null +++ b/code/modules/unit_tests/cyborg_tool.dm @@ -0,0 +1,20 @@ +/// Regression test for the cyborg omnitool to ensure it goes through proper channels +/datum/unit_test/cyborg_tool + var/times_wrenched = 0 + +/datum/unit_test/cyborg_tool/Run() + var/mob/living/carbon/human/consistent/not_a_borg = allocate(__IMPLIED_TYPE__) + var/obj/item/borg/cyborg_omnitool/engineering/tool = allocate(__IMPLIED_TYPE__) + tool.tool_behaviour = TOOL_WRENCH + + not_a_borg.put_in_active_hand(tool) + + var/obj/structure/frame/machine/frame = allocate(__IMPLIED_TYPE__) + RegisterSignal(frame, COMSIG_ATOM_TOOL_ACT(TOOL_WRENCH), PROC_REF(wrenched)) + + not_a_borg.ClickOn(frame) + TEST_ASSERT_EQUAL(times_wrenched, 1, "Wrenching the frame with a cyborg omnitool should have triggered the wrenched signal") + +/datum/unit_test/cyborg_tool/proc/wrenched(...) + SIGNAL_HANDLER + times_wrenched += 1 diff --git a/code/modules/unit_tests/mapload_space_verification.dm b/code/modules/unit_tests/mapload_space_verification.dm index 35556c85fb482..843de4f8fdde2 100644 --- a/code/modules/unit_tests/mapload_space_verification.dm +++ b/code/modules/unit_tests/mapload_space_verification.dm @@ -32,6 +32,8 @@ var/area/turf_area = get_area(iterated_turf) if(!isspaceturf(iterated_turf) || is_type_in_typecache(turf_area, excluded_area_typecache)) continue // Alright, so let's assume we have intended behavior. If something yorks, we'll get a bare `/area` (maploader?) or a mapper is doing something they shouldn't be doing. + if(HAS_TRAIT(iterated_turf, TRAIT_HYPERSPACE_STOPPED)) + continue // This means that a shuttle with a noop template turf is just temporarily parked ontop of us and that we're not actually a part of it. We don't have to care about it as it will leave us alone when it flies away. // We need turf_area.type for the error message because we have fifteen million ruin areas named "Unexplored Location" and it's completely unhelpful here. TEST_FAIL("Space turf [iterated_turf.type] found in non-allowed area ([turf_area.type]) at [AREACOORD(iterated_turf)]! Please ensure that all space turfs are in an /area/space!") diff --git a/code/modules/unit_tests/mapping_nearstation_test.dm b/code/modules/unit_tests/mapping_nearstation_test.dm new file mode 100644 index 0000000000000..d428b826634b5 --- /dev/null +++ b/code/modules/unit_tests/mapping_nearstation_test.dm @@ -0,0 +1,40 @@ +///Detects movables that may have been accidentally placed in space, as well as movables which do not have the proper nearspace area (meaning they aren't lit properly.) +/datum/unit_test/mapping_nearstation_test + priority = TEST_PRE + +/datum/unit_test/mapping_nearstation_test/Run() + if(SSmapping.is_planetary()) + return //No need to test for orphaned spaced atoms on this map. + + var/list/safe_atoms = typecacheof(list( + /atom/movable/mirage_holder, + /obj/docking_port, + /obj/effect/landmark, + /obj/effect/abstract, + /obj/effect/mapping_error, + )) //Mapping stuff that we don't actually have to be concerned about. + var/list/safe_areas = typecacheof(list( + /area/misc/testroom, + /area/station/holodeck, + )) + + for(var/station_z in SSmapping.levels_by_trait(ZTRAIT_STATION)) + var/list/turfs_to_check = Z_TURFS(station_z) + for(var/turf/station_turf as anything in turfs_to_check) + var/area/turf_area = station_turf.loc + if(turf_area.static_lighting || is_type_in_typecache(turf_area, safe_areas)) //Only care about turfs that don't have lighting enabled. + continue + var/has_thing = FALSE + for(var/atom/movable/thing_on_the_turf as anything in station_turf.contents) //Find an item on the turf, this can help the mapper identify the turf more easily when combined with the exact coords. + if(is_type_in_typecache(thing_on_the_turf, safe_atoms)) + continue + TEST_FAIL("[station_turf.x], [station_turf.y], [station_turf.z]: [thing_on_the_turf.type] with area of type [turf_area.type]") + has_thing = TRUE + break + if(!has_thing && !isspaceturf(station_turf) && !istype(station_turf, /turf/open/openspace)) //In case it's just a turf without an area + if(istype(station_turf, /turf/open/floor/engine/hull/ceiling)) + TEST_FAIL("[station_turf.x], [station_turf.y], [station_turf.z]: [station_turf.type] with area of type [turf_area.type]. The turf on the z-level below is a shuttle dock and generated me! An error landmark has been generated on the map for easier debugging!") + else + TEST_FAIL("[station_turf.x], [station_turf.y], [station_turf.z]: [station_turf.type] with area of type [turf_area.type]") + if(!succeeded) + TEST_FAIL("Movable Atom located without a proper area. Please verify they are supposed to be there. If they are correct, change the area to /area/space/nearstation (or the correct surrounding type).") diff --git a/code/modules/unit_tests/mob_damage.dm b/code/modules/unit_tests/mob_damage.dm index c27bc31ffe0f2..64b12b8f477e8 100644 --- a/code/modules/unit_tests/mob_damage.dm +++ b/code/modules/unit_tests/mob_damage.dm @@ -580,3 +580,22 @@ if(!verify_damage(gusgus, 0, included_types = BRUTELOSS)) TEST_FAIL("heal_overall_damage did not apply its healing correctly on the mouse!") + +/// Tests that humans get the tox_vomit status effect when heavily poisoned +/datum/unit_test/human_tox_damage + +/datum/unit_test/human_tox_damage/Run() + // Spawn a dummy, give it a bunch of tox damage. It should get the status effect. + var/mob/living/carbon/human/dummy = allocate(/mob/living/carbon/human/consistent) + dummy.setToxLoss(75) + var/datum/status_effect/tox_effect = dummy.has_status_effect(/datum/status_effect/tox_vomit) + TEST_ASSERT_NOTNULL(tox_effect, "Dummy didn't get tox_vomit status effect despite at [dummy.getToxLoss()] toxin damage (Method: SET)!") + // Clear the toxin damage away, and force a status effect tick: It should delete itself + dummy.setToxLoss(0) + tox_effect.tick(initial(tox_effect.tick_interval)) + TEST_ASSERT(QDELETED(tox_effect), "Dummy still has tox_vomit status effect despite at [dummy.getToxLoss()] toxin damage (Method: SET)!") + // Test another method of gaining tox damage, use an entirely clean slate just to be sure + var/mob/living/carbon/human/dummy_two = allocate(/mob/living/carbon/human/consistent) + dummy_two.adjustToxLoss(75) + var/datum/status_effect/tox_effect_two = dummy_two.has_status_effect(/datum/status_effect/tox_vomit) + TEST_ASSERT_NOTNULL(tox_effect_two, "Dummy didn't get tox_vomit status effect at [dummy_two.getToxLoss()] toxin damage (METHOD: ADJUST)!") diff --git a/code/modules/unit_tests/mob_faction.dm b/code/modules/unit_tests/mob_faction.dm index 359ec40f66ffe..554a1adda9d23 100644 --- a/code/modules/unit_tests/mob_faction.dm +++ b/code/modules/unit_tests/mob_faction.dm @@ -9,7 +9,6 @@ /mob/oranges_ear ) ignored += typesof(/mob/camera/imaginary_friend) - ignored += typesof(/mob/living/simple_animal/pet/gondola/gondolapod) ignored += typesof(/mob/living/silicon/robot/model) ignored += typesof(/mob/camera/ai_eye/remote/base_construction) ignored += typesof(/mob/camera/ai_eye/remote/shuttle_docker) diff --git a/code/modules/unit_tests/modsuit.dm b/code/modules/unit_tests/modsuit.dm index 0dfc9815117d4..33aedb9ce49be 100644 --- a/code/modules/unit_tests/modsuit.dm +++ b/code/modules/unit_tests/modsuit.dm @@ -7,10 +7,6 @@ for(var/modpath in paths) var/obj/item/mod/control/pre_equipped/mod = new modpath() TEST_ASSERT(mod.theme, "[modpath] spawned without a theme.") - TEST_ASSERT(mod.helmet, "[modpath] spawned without a helmet.") - TEST_ASSERT(mod.chestplate, "[modpath] spawned without a chestplate.") - TEST_ASSERT(mod.gauntlets, "[modpath] spawned without gauntlets.") - TEST_ASSERT(mod.boots, "[modpath] spawned without boots.") var/list/modules = list() var/complexity_max = mod.complexity_max var/complexity = 0 @@ -18,6 +14,7 @@ module = new module() complexity += module.complexity TEST_ASSERT(complexity <= complexity_max, "[modpath] starting modules reach above max complexity.") + TEST_ASSERT(module.has_required_parts(mod.mod_parts), "[modpath] initial module [module.type] is not supported by its parts.") for(var/obj/item/mod/module/module_to_check as anything in modules) TEST_ASSERT(!is_type_in_list(module, module_to_check.incompatible_modules), "[modpath] initial module [module.type] is incompatible with initial module [module_to_check.type]") TEST_ASSERT(!is_type_in_list(module_to_check, module.incompatible_modules), "[modpath] initial module [module.type] is incompatible with initial module [module_to_check.type]") diff --git a/code/modules/unit_tests/organ_set_bonus.dm b/code/modules/unit_tests/organ_set_bonus.dm index a9e9a8805f9c4..967803e223f17 100644 --- a/code/modules/unit_tests/organ_set_bonus.dm +++ b/code/modules/unit_tests/organ_set_bonus.dm @@ -22,7 +22,7 @@ /datum/infuser_entry/fly, )) // Fetch the globally instantiated DNA Infuser entries. - for(var/datum/infuser_entry/infuser_entry as anything in GLOB.infuser_entries) + for(var/datum/infuser_entry/infuser_entry as anything in flatten_list(GLOB.infuser_entries)) var/output_organs = infuser_entry.output_organs var/mob/living/carbon/human/lab_rat = allocate(/mob/living/carbon/human/consistent) var/list/obj/item/organ/inserted_organs = list() diff --git a/code/modules/unit_tests/orphaned_genturf.dm b/code/modules/unit_tests/orphaned_genturf.dm new file mode 100644 index 0000000000000..289b883d2def4 --- /dev/null +++ b/code/modules/unit_tests/orphaned_genturf.dm @@ -0,0 +1,7 @@ +/// Ensures we do not leave genturfs sitting around post work +/// They serve as notice to the mapper and have no functionality, but it's good to make note of it here +/datum/unit_test/orphaned_genturf + +/datum/unit_test/orphaned_genturf/Run() + for(var/turf/open/genturf/orphaned in ALL_TURFS()) + TEST_FAIL("Floating genturf ([orphaned.type]) detected at ([orphaned.x], [orphaned.y], [orphaned.z]) : [orphaned.loc.type]. Why was it not replaced?") diff --git a/code/modules/unit_tests/outfit_sanity.dm b/code/modules/unit_tests/outfit_sanity.dm index 18f5e9b8e6141..36fc4570540f4 100644 --- a/code/modules/unit_tests/outfit_sanity.dm +++ b/code/modules/unit_tests/outfit_sanity.dm @@ -16,7 +16,7 @@ uniform = /obj/item/clothing/under/suit/tuxedo glasses = /obj/item/clothing/glasses/sunglasses - mask = /obj/item/clothing/mask/cigarette/cigar/havana + mask = /obj/item/cigarette/cigar/havana shoes = /obj/item/clothing/shoes/laceup l_hand = /obj/item/stack/spacecash/c1000 r_hand = /obj/item/stack/spacecash/c1000 @@ -25,19 +25,19 @@ /datum/outfit/duffel_user name = "Mr. Runtime" back = /obj/item/storage/backpack/duffelbag - backpack_contents = list(/obj/item/clothing/mask/cigarette/cigar/havana) + backpack_contents = list(/obj/item/cigarette/cigar/havana) /// Satchels too /datum/outfit/stachel_user name = "Mr. Runtime" back = /obj/item/storage/backpack/satchel - backpack_contents = list(/obj/item/clothing/mask/cigarette/cigar/havana) + backpack_contents = list(/obj/item/cigarette/cigar/havana) /// And just in case we'll check backpacks /datum/outfit/backpack_user name = "Mr. Runtime" back = /obj/item/storage/backpack - backpack_contents = list(/obj/item/clothing/mask/cigarette/cigar/havana) + backpack_contents = list(/obj/item/cigarette/cigar/havana) /datum/unit_test/outfit_sanity/Run() var/datum/outfit/prototype_outfit = /datum/outfit @@ -49,7 +49,7 @@ for (var/outfit_type in outfits_to_check) // Only make one human and keep undressing it because it's much faster - for (var/obj/item/I in H.get_equipped_items(include_pockets = TRUE)) + for (var/obj/item/I in H.get_equipped_items(INCLUDE_POCKETS)) qdel(I) var/datum/outfit/outfit = new outfit_type diff --git a/code/modules/unit_tests/preference_species.dm b/code/modules/unit_tests/preference_species.dm index 8e49f49cdd6a4..8d913cc8fb64d 100644 --- a/code/modules/unit_tests/preference_species.dm +++ b/code/modules/unit_tests/preference_species.dm @@ -12,7 +12,7 @@ for(var/species_id in get_selectable_species()) var/species_type = GLOB.species_list[species_id] - var/datum/species/species = new species_type() + var/datum/species/species = GLOB.species_prototypes[species_type] // Check the species decription. // If it's not overridden, a stack trace will be thrown (and fail the test). @@ -29,5 +29,3 @@ TEST_FAIL("Species [species] ([species_type]) is selectable, but did not properly implement get_species_lore().") else if(!islist(species_lore)) TEST_FAIL("Species [species] ([species_type]) is selectable, but did not properly implement get_species_lore() (Did not return a list).") - - qdel(species) diff --git a/code/modules/unit_tests/projectiles.dm b/code/modules/unit_tests/projectiles.dm index a6462855179f5..7c2b1c00aa8d9 100644 --- a/code/modules/unit_tests/projectiles.dm +++ b/code/modules/unit_tests/projectiles.dm @@ -26,7 +26,7 @@ gunner.set_combat_mode(FALSE) // just to make sure we know we're not trying to pistol-whip them var/expected_damage = loaded_bullet.damage loaded_bullet.def_zone = BODY_ZONE_CHEST - var/did_we_shoot = test_gun.afterattack(victim, gunner) + var/did_we_shoot = test_gun.melee_attack_chain(gunner, victim) TEST_ASSERT(did_we_shoot, "Gun does not appeared to have successfully fired.") TEST_ASSERT_EQUAL(victim.getBruteLoss(), expected_damage, "Victim took incorrect amount of damage, expected [expected_damage], got [victim.getBruteLoss()].") diff --git a/code/modules/unit_tests/reagent_mob_expose.dm b/code/modules/unit_tests/reagent_mob_expose.dm index 51c35520dafb4..844b863c0374b 100644 --- a/code/modules/unit_tests/reagent_mob_expose.dm +++ b/code/modules/unit_tests/reagent_mob_expose.dm @@ -30,7 +30,7 @@ // TOUCH dropper.reagents.add_reagent(/datum/reagent/water, 5) - dropper.afterattack(human, human, TRUE) + dropper.melee_attack_chain(human, human) TEST_ASSERT(human.fire_stacks < 0, "Human still has fire stacks after touching water") // VAPOR diff --git a/code/modules/unit_tests/screenshots/screenshot_antag_icons_syndicateinfiltrator.png b/code/modules/unit_tests/screenshots/screenshot_antag_icons_syndicateinfiltrator.png index 0a9a5ef08e4ee..4c9212509d2ea 100644 Binary files a/code/modules/unit_tests/screenshots/screenshot_antag_icons_syndicateinfiltrator.png and b/code/modules/unit_tests/screenshots/screenshot_antag_icons_syndicateinfiltrator.png differ diff --git a/code/modules/unit_tests/screenshots/screenshot_antag_icons_syndicatesleeperagent.png b/code/modules/unit_tests/screenshots/screenshot_antag_icons_syndicatesleeperagent.png index 0a9a5ef08e4ee..4c9212509d2ea 100644 Binary files a/code/modules/unit_tests/screenshots/screenshot_antag_icons_syndicatesleeperagent.png and b/code/modules/unit_tests/screenshots/screenshot_antag_icons_syndicatesleeperagent.png differ diff --git a/code/modules/unit_tests/screenshots/screenshot_antag_icons_traitor.png b/code/modules/unit_tests/screenshots/screenshot_antag_icons_traitor.png index 0a9a5ef08e4ee..4c9212509d2ea 100644 Binary files a/code/modules/unit_tests/screenshots/screenshot_antag_icons_traitor.png and b/code/modules/unit_tests/screenshots/screenshot_antag_icons_traitor.png differ diff --git a/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_moth.png b/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_moth.png index ed782c8ec9f6e..284205a73ec13 100644 Binary files a/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_moth.png and b/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_moth.png differ diff --git a/code/modules/unit_tests/serving_tray.dm b/code/modules/unit_tests/serving_tray.dm index d12648dca9965..e1997cc7bdcf3 100644 --- a/code/modules/unit_tests/serving_tray.dm +++ b/code/modules/unit_tests/serving_tray.dm @@ -16,19 +16,19 @@ var/datum/storage/tray_storage = test_tray.atom_storage tray_storage.collection_mode = COLLECT_ONE - test_tray.pre_attack(the_bread, human) + test_tray.melee_attack_chain(human, the_bread) TEST_ASSERT_EQUAL((the_bread in test_tray.contents), TRUE, "The bread did not get picked up by the serving tray") - test_tray.pre_attack(banana, human) + test_tray.melee_attack_chain(human, banana) TEST_ASSERT_EQUAL((banana in test_tray.contents), TRUE, "The banana did not get picked up by the serving tray") - the_table.attackby(test_tray, human) + test_tray.melee_attack_chain(human, the_table) TEST_ASSERT_EQUAL(test_tray.contents.len, 0, "The serving tray did not drop all items on hitting the table") - test_tray.pre_attack(sugarcookie, human) + test_tray.melee_attack_chain(human, sugarcookie) TEST_ASSERT_EQUAL((sugarcookie in test_tray.contents), TRUE, "The sugarcookie did not get picked up by the serving tray") @@ -41,7 +41,6 @@ human.equip_to_slot(test_tray, ITEM_SLOT_RPOCKET) TEST_ASSERT(human.get_item_by_slot(ITEM_SLOT_RPOCKET), "Serving tray failed to fit in the Right Pocket") - test_tray.attack(human, human) + test_tray.melee_attack_chain(human, human) TEST_ASSERT_EQUAL(test_tray.contents.len, 0, "The serving tray did not drop all items on hitting a human") - diff --git a/code/modules/unit_tests/simple_animal_freeze.dm b/code/modules/unit_tests/simple_animal_freeze.dm index e9476e6d840d3..2f4f7a4b70ae7 100644 --- a/code/modules/unit_tests/simple_animal_freeze.dm +++ b/code/modules/unit_tests/simple_animal_freeze.dm @@ -6,7 +6,6 @@ // If you are refactoring a simple_animal, REMOVE it from this list var/list/allowed_types = list( /mob/living/simple_animal/bot, - /mob/living/simple_animal/bot/firebot, /mob/living/simple_animal/bot/floorbot, /mob/living/simple_animal/bot/mulebot, /mob/living/simple_animal/bot/mulebot/paranormal, @@ -20,9 +19,7 @@ /mob/living/simple_animal/bot/secbot/genesky, /mob/living/simple_animal/bot/secbot/grievous, /mob/living/simple_animal/bot/secbot/grievous/toy, - /mob/living/simple_animal/bot/secbot/honkbot, /mob/living/simple_animal/bot/secbot/pingsky, - /mob/living/simple_animal/bot/vibebot, /mob/living/simple_animal/hostile, /mob/living/simple_animal/hostile/asteroid, /mob/living/simple_animal/hostile/asteroid/curseblob, @@ -60,6 +57,7 @@ /mob/living/simple_animal/hostile/megafauna/legion/medium/right, /mob/living/simple_animal/hostile/megafauna/legion/small, /mob/living/simple_animal/hostile/megafauna/wendigo, + /mob/living/simple_animal/hostile/megafauna/wendigo/noportal, /mob/living/simple_animal/hostile/mimic, /mob/living/simple_animal/hostile/mimic/copy, /mob/living/simple_animal/hostile/mimic/copy/machine, @@ -74,10 +72,6 @@ /mob/living/simple_animal/hostile/retaliate/goose/vomit, /mob/living/simple_animal/hostile/vatbeast, /mob/living/simple_animal/hostile/zombie, - /mob/living/simple_animal/pet, - /mob/living/simple_animal/pet/gondola, - /mob/living/simple_animal/pet/gondola/gondolapod, - /mob/living/simple_animal/pet/gondola/virtual_domain, /mob/living/simple_animal/soulscythe, // DO NOT ADD NEW ENTRIES TO THIS LIST // READ THE COMMENT ABOVE diff --git a/code/modules/unit_tests/spell_timestop.dm b/code/modules/unit_tests/spell_timestop.dm new file mode 100644 index 0000000000000..f02900f7f8e77 --- /dev/null +++ b/code/modules/unit_tests/spell_timestop.dm @@ -0,0 +1,30 @@ +/// Regression test for timestop being a 3x3 instead of a 5x5 +/datum/unit_test/timestop + +/datum/unit_test/timestop/Run() + var/mob/living/carbon/human/dio = allocate(/mob/living/carbon/human/consistent) + var/mob/living/carbon/human/kakyoin = allocate(/mob/living/carbon/human/consistent) + var/mob/living/carbon/human/jotaro = allocate(/mob/living/carbon/human/consistent) + + var/turf/center = run_loc_floor_bottom_left + var/turf/in_range = locate(center.x + 2, center.y + 2, center.z) + var/turf/out_of_range = locate(in_range.x + 1, in_range.y + 1, in_range.z) + + dio.forceMove(center) + kakyoin.forceMove(in_range) + jotaro.forceMove(out_of_range) + + var/datum/action/cooldown/spell/timestop/timestop = new(dio) + timestop.spell_requirements = NONE + timestop.Grant(dio) + timestop.Trigger() + var/obj/effect/timestop/time_effect = locate() in center + TEST_ASSERT(time_effect, "Failed to create timestop effect") + sleep(0.1 SECONDS) // timestop is invoked async so let's just wait + + TEST_ASSERT(!dio.IsStun(), "Timestopper should not have frozen themselves when using timestop") + TEST_ASSERT(kakyoin.IsStun(), "Timestopper should have frozen the target within 2 tiles of range when using timestop") + TEST_ASSERT(!jotaro.IsStun(), "Timestopper should not have frozen the target outside of 2 tiles of range when using timestop") + + // cleanup + qdel(time_effect) diff --git a/code/modules/unit_tests/strange_reagent.dm b/code/modules/unit_tests/strange_reagent.dm index ac8ad5cb6df3b..e5e385b86fd6d 100644 --- a/code/modules/unit_tests/strange_reagent.dm +++ b/code/modules/unit_tests/strange_reagent.dm @@ -15,7 +15,6 @@ /mob/living/simple_animal, /mob/living/basic, )) - types_to_check -= /mob/living/simple_animal/pet/gondola/gondolapod // need a pod, which we don't have types_to_check -= typesof(/mob/living/simple_animal/hostile/megafauna) // no types_to_check -= typesof(/mob/living/basic/mouse) // qdel themselves on death; why dont they use DEL_ON_DEATH you might ask. I-unno types_to_check -= typesof(/mob/living/basic/slime) // if they roll the 50% chance to spawn as an adult, they can just at random split and qdel themselves diff --git a/code/modules/unit_tests/suit_storage_icons.dm b/code/modules/unit_tests/suit_storage_icons.dm index 12305e7abfc0b..7cc987bb46801 100644 --- a/code/modules/unit_tests/suit_storage_icons.dm +++ b/code/modules/unit_tests/suit_storage_icons.dm @@ -14,9 +14,9 @@ for(var/path in clothing_path::allowed) //find all usable suit storage stuff. wearable_item_paths |= path - for(var/obj/item/mod/control/mod_path in subtypesof(/obj/item/mod/control)) - for(var/path in mod_path::chestplate::allowed) - wearable_item_paths |= path + for(var/datum/mod_theme/mod_theme as anything in GLOB.mod_themes) + mod_theme = GLOB.mod_themes[mod_theme] + wearable_item_paths |= mod_theme.allowed_suit_storage var/list/already_warned_icons = list() var/count = 1 //to be removed once the test goes live / into CI failure mode. diff --git a/code/modules/unit_tests/unit_test.dm b/code/modules/unit_tests/unit_test.dm index fb5bcdf7e117f..afce8392d5828 100644 --- a/code/modules/unit_tests/unit_test.dm +++ b/code/modules/unit_tests/unit_test.dm @@ -222,8 +222,6 @@ GLOBAL_VAR_INIT(focused_tests, focused_tests()) var/list/returnable_list = list() // The following are just generic, singular types. returnable_list = list( - //this is somehow a subtype of /atom/movable, because of its purpose... - /image/appearance, //Never meant to be created, errors out the ass for mobcode reasons /mob/living/carbon, //And another @@ -278,8 +276,6 @@ GLOBAL_VAR_INIT(focused_tests, focused_tests()) returnable_list += typesof(/obj/effect/baseturf_helper) //No tauma to pass in returnable_list += typesof(/mob/camera/imaginary_friend) - //No pod to gondola - returnable_list += typesof(/mob/living/simple_animal/pet/gondola/gondolapod) //No heart to give returnable_list += typesof(/obj/structure/ethereal_crystal) //No linked console @@ -342,7 +338,7 @@ GLOBAL_VAR_INIT(focused_tests, focused_tests()) if(length(focused_tests)) tests_to_run = focused_tests - tests_to_run = sortTim(tests_to_run, GLOBAL_PROC_REF(cmp_unit_test_priority)) + sortTim(tests_to_run, GLOBAL_PROC_REF(cmp_unit_test_priority)) var/list/test_results = list() diff --git a/code/modules/uplink/uplink_items.dm b/code/modules/uplink/uplink_items.dm index f0f7b0accaf5e..e17488bc96a6d 100644 --- a/code/modules/uplink/uplink_items.dm +++ b/code/modules/uplink/uplink_items.dm @@ -71,7 +71,7 @@ /// If this uplink item is only available to certain roles. Roles are dependent on the frequency chip or stored ID. var/list/restricted_roles = list() /// The species able to purchase this uplink item. - var/restricted_species = list() + var/list/restricted_species = list() /// The minimum amount of progression needed for this item to be added to uplinks. var/progression_minimum = 0 /// Whether this purchase is visible in the purchase log. diff --git a/code/modules/uplink/uplink_items/explosive.dm b/code/modules/uplink/uplink_items/explosive.dm index 72f40b00dfca3..ef9f3b4f074c5 100644 --- a/code/modules/uplink/uplink_items/explosive.dm +++ b/code/modules/uplink/uplink_items/explosive.dm @@ -57,6 +57,12 @@ if(HAS_TRAIT(SSstation, STATION_TRAIT_CYBERNETIC_REVOLUTION)) cost *= 3 +/datum/uplink_item/explosives/smoke + name = "Smoke Grenades" + desc = "A box that contains five smoke grenades. Useful for vanishing and ninja fans with katana." + item = /obj/item/storage/box/syndie_kit/smoke + cost = 2 + /datum/uplink_item/explosives/pizza_bomb name = "Pizza Bomb" desc = "A pizza box with a bomb cunningly attached to the lid. The timer needs to be set by opening the box; afterwards, \ diff --git a/code/modules/uplink/uplink_items/job.dm b/code/modules/uplink/uplink_items/job.dm index df4f235f50cca..98378a9422a03 100644 --- a/code/modules/uplink/uplink_items/job.dm +++ b/code/modules/uplink/uplink_items/job.dm @@ -18,7 +18,7 @@ /datum/uplink_item/role_restricted/mail_counterfeit_kit name = "GLA Brand Mail Counterfeit Kit" - desc = "A box full of mail counterfeit devices. Devices that actually able to counterfeit NT's mail. Those devices also able to place a trap inside of mail for malicious actions. Trap will \"activate\" any item inside of mail. Also counterfieted mail might be used for contraband purposes. Integrated micro-computer will give you great configuration optionality for your needs. \nNothing stops the mail." + desc = "A box of five (5) counterfeit devices. Each single-use device can hold one normal sized object, and impersonate an ordinary postal envelope addressed to whoever you choose. Optionally, can be rigged to activate held items - great for if you want to surprise someone with a primed grenade!" item = /obj/item/storage/box/syndie_kit/mail_counterfeit cost = 2 illegal_tech = FALSE @@ -151,7 +151,7 @@ desc = "A much more proffessional version of the engineer's bootleg rebar crossbow. 3 shot mag, quicker loading, and better ammo. Owners manual included." item = /obj/item/storage/box/syndie_kit/rebarxbowsyndie cost = 10 - restricted_roles = list(JOB_STATION_ENGINEER, JOB_CHIEF_ENGINEER) + restricted_roles = list(JOB_STATION_ENGINEER, JOB_CHIEF_ENGINEER, JOB_ATMOSPHERIC_TECHNICIAN) /datum/uplink_item/role_restricted/magillitis_serum name = "Magillitis Serum Autoinjector" diff --git a/code/modules/uplink/uplink_items/nukeops.dm b/code/modules/uplink/uplink_items/nukeops.dm index c8486f4b5d008..eff0fb933eaca 100644 --- a/code/modules/uplink/uplink_items/nukeops.dm +++ b/code/modules/uplink/uplink_items/nukeops.dm @@ -557,14 +557,14 @@ /datum/uplink_item/mech/gygax name = "Dark Gygax Exosuit" desc = "A lightweight exosuit, painted in a dark scheme. Its speed and equipment selection make it excellent \ - for hit-and-run style attacks. Features a scattershot shotgun, armor boosters against melee and ranged attacks, ion thrusters and a Tesla energy array." + for hit-and-run style attacks. Features a scattershot shotgun, armor boosters against melee and ranged attacks, and ion thrusters." item = /obj/vehicle/sealed/mecha/gygax/dark/loaded cost = 60 /datum/uplink_item/mech/mauler name = "Mauler Exosuit" desc = "A massive and incredibly deadly military-grade exosuit. Features long-range targeting, thrust vectoring \ - and deployable smoke. Comes equipped with an LMG, scattershot carbine, missile rack, an antiprojectile armor booster and a Tesla energy array." + and deployable smoke. Comes equipped with an LMG, scattershot carbine, missile rack, and an antiprojectile armor booster." item = /obj/vehicle/sealed/mecha/marauder/mauler/loaded cost = 100 diff --git a/code/modules/uplink/uplink_items/suits.dm b/code/modules/uplink/uplink_items/suits.dm index 57982a8cf980a..5d89f80506178 100644 --- a/code/modules/uplink/uplink_items/suits.dm +++ b/code/modules/uplink/uplink_items/suits.dm @@ -64,12 +64,18 @@ item = /obj/item/mod/module/noslip cost = 2 +/datum/uplink_item/suits/shock_absorber + name = "MODsuit Shock-Absorber Module" + desc = "A MODsuit module preventing the user from getting knocked down by batons." + item = /obj/item/mod/module/shock_absorber + cost = 2 + /datum/uplink_item/suits/modsuit/elite_traitor name = "Elite Syndicate MODsuit" desc = "An upgraded, elite version of the Syndicate MODsuit. It features fireproofing, and also \ provides the user with superior armor and mobility compared to the standard Syndicate MODsuit." item = /obj/item/mod/control/pre_equipped/traitor_elite // This one costs more than the nuke op counterpart - purchasable_from = ~(UPLINK_NUKE_OPS | UPLINK_CLOWN_OPS) + purchasable_from = ~(UPLINK_NUKE_OPS | UPLINK_CLOWN_OPS | UPLINK_SPY) progression_minimum = 90 MINUTES cost = 16 diff --git a/code/modules/vehicles/_vehicle.dm b/code/modules/vehicles/_vehicle.dm index 4eca7cd4ebae1..faf95e8cd73c7 100644 --- a/code/modules/vehicles/_vehicle.dm +++ b/code/modules/vehicles/_vehicle.dm @@ -1,7 +1,7 @@ /obj/vehicle name = "generic vehicle" desc = "Yell at coderbus." - icon = 'icons/obj/vehicles.dmi' + icon = 'icons/mob/rideables/vehicles.dmi' icon_state = "error" max_integrity = 300 armor_type = /datum/armor/obj_vehicle diff --git a/code/modules/vehicles/cars/car.dm b/code/modules/vehicles/cars/car.dm index 46a9c6f7f56ca..19bf0f20eb23a 100644 --- a/code/modules/vehicles/cars/car.dm +++ b/code/modules/vehicles/cars/car.dm @@ -1,6 +1,7 @@ /obj/vehicle/sealed/car layer = ABOVE_MOB_LAYER move_resist = MOVE_FORCE_VERY_STRONG + ///Bitflags for special behavior such as kidnapping var/car_traits = NONE ///Sound file(s) to play when we drive around @@ -21,9 +22,9 @@ if(car_traits & CAN_KIDNAP) initialize_controller_action_type(/datum/action/vehicle/sealed/dump_kidnapped_mobs, VEHICLE_CONTROL_DRIVE) -/obj/vehicle/sealed/car/MouseDrop_T(atom/dropping, mob/M) - if(M.incapacitated() || (HAS_TRAIT(M, TRAIT_HANDS_BLOCKED) && !is_driver(M))) - return FALSE +/obj/vehicle/sealed/car/mouse_drop_receive(atom/dropping, mob/M, params) + if(HAS_TRAIT(M, TRAIT_HANDS_BLOCKED) && !is_driver(M)) + return if((car_traits & CAN_KIDNAP) && isliving(dropping) && M != dropping) var/mob/living/kidnapped = dropping kidnapped.visible_message(span_warning("[M] starts forcing [kidnapped] into [src]!")) diff --git a/code/modules/vehicles/lavaboat.dm b/code/modules/vehicles/lavaboat.dm index e45f062d1a24a..0336ff486dd47 100644 --- a/code/modules/vehicles/lavaboat.dm +++ b/code/modules/vehicles/lavaboat.dm @@ -20,7 +20,7 @@ /obj/item/oar name = "oar" desc = "Not to be confused with the kind Research hassles you for." - icon = 'icons/obj/vehicles.dmi' + icon = 'icons/mob/rideables/vehicles.dmi' icon_state = "oar" inhand_icon_state = "oar" lefthand_file = 'icons/mob/inhands/items/lavaland_lefthand.dmi' diff --git a/code/modules/vehicles/mecha/_mecha.dm b/code/modules/vehicles/mecha/_mecha.dm index 9d059ba7e2270..32aa4f1f7a309 100644 --- a/code/modules/vehicles/mecha/_mecha.dm +++ b/code/modules/vehicles/mecha/_mecha.dm @@ -16,11 +16,12 @@ * Clicks are wither translated into mech_melee_attack (see mech_melee_attack.dm) * Or are used to call action() on equipped gear * Cooldown for gear is on the mech because exploits + * Cooldown for melee is on mech_melee_attack also because exploits */ /obj/vehicle/sealed/mecha name = "exosuit" desc = "Exosuit" - icon = 'icons/mob/mecha.dmi' + icon = 'icons/mob/rideables/mecha.dmi' resistance_flags = FIRE_PROOF | ACID_PROOF max_integrity = 300 armor_type = /datum/armor/sealed_mecha @@ -28,7 +29,6 @@ movedelay = 1 SECONDS move_force = MOVE_FORCE_VERY_STRONG move_resist = MOVE_FORCE_EXTREMELY_STRONG - COOLDOWN_DECLARE(mecha_bump_smash) light_system = OVERLAY_LIGHT_DIRECTIONAL light_on = FALSE light_range = 6 @@ -46,7 +46,7 @@ ///if we cant use our equipment(such as due to EMP) var/equipment_disabled = FALSE /// Keeps track of the mech's cell - var/obj/item/stock_parts/cell/cell + var/obj/item/stock_parts/power_store/cell /// Keeps track of the mech's scanning module var/obj/item/stock_parts/scanning_module/scanmod /// Keeps track of the mech's capacitor @@ -139,7 +139,7 @@ var/turnsound = 'sound/mecha/mechturn.ogg' ///Cooldown duration between melee punches - var/melee_cooldown = 10 + var/melee_cooldown = CLICK_CD_SLOW ///TIme taken to leave the mech var/exit_delay = 2 SECONDS @@ -194,9 +194,6 @@ ///Wether we are strafing var/strafe = FALSE - ///Cooldown length between bumpsmashes - var/smashcooldown = 3 - ///Bool for whether this mech can only be used on lavaland var/lavaland_only = FALSE @@ -274,7 +271,7 @@ /// and gets deleted with the mech. However, they do remain in .contents var/list/potential_occupants = contents | occupants for(var/mob/buggy_ejectee in potential_occupants) - mob_exit(buggy_ejectee, silent = TRUE) + mob_exit(buggy_ejectee, silent = TRUE, forced = TRUE) if(LAZYLEN(flat_equipment)) for(var/obj/item/mecha_parts/mecha_equipment/equip as anything in flat_equipment) @@ -305,7 +302,7 @@ ///Add parts on mech spawning. Skipped in manual construction. /obj/vehicle/sealed/mecha/proc/populate_parts() - cell = new /obj/item/stock_parts/cell/high(src) + cell = new /obj/item/stock_parts/power_store/cell/high(src) scanmod = new /obj/item/stock_parts/scanning_module(src) capacitor = new /obj/item/stock_parts/capacitor(src) servo = new /obj/item/stock_parts/servo(src) @@ -313,7 +310,7 @@ /obj/vehicle/sealed/mecha/CheckParts(list/parts_list) . = ..() - cell = locate(/obj/item/stock_parts/cell) in contents + cell = locate(/obj/item/stock_parts/power_store) in contents diag_hud_set_mechcell() scanmod = locate(/obj/item/stock_parts/scanning_module) in contents capacitor = locate(/obj/item/stock_parts/capacitor) in contents @@ -328,7 +325,7 @@ for(var/mob/living/occupant as anything in occupants) if(isAI(occupant)) var/mob/living/silicon/ai/ai = occupant - if(!ai.linked_core) // we probably shouldnt gib AIs with a core + if(!ai.linked_core && !ai.can_shunt) // we probably shouldnt gib AIs with a core or shunting abilities unlucky_ai = occupant ai.investigate_log("has been gibbed by having their mech destroyed.", INVESTIGATE_DEATHS) ai.gib(DROP_ALL_REMAINS) //No wreck, no AI to recover @@ -703,10 +700,9 @@ return use_energy(melee_energy_drain) - SEND_SIGNAL(user, COMSIG_MOB_USED_MECH_MELEE, src) - target.mech_melee_attack(src, user) - TIMER_COOLDOWN_START(src, COOLDOWN_MECHA_MELEE_ATTACK, melee_cooldown) - + SEND_SIGNAL(user, COMSIG_MOB_USED_CLICK_MECH_MELEE, src) + if(target.mech_melee_attack(src, user)) + TIMER_COOLDOWN_START(src, COOLDOWN_MECHA_MELEE_ATTACK, melee_cooldown) /// Driver alt clicks anything while in mech /obj/vehicle/sealed/mecha/proc/on_click_alt(mob/user, atom/target, params) diff --git a/code/modules/vehicles/mecha/combat/durand.dm b/code/modules/vehicles/mecha/combat/durand.dm index b44478582c031..c6fcae75bc98f 100644 --- a/code/modules/vehicles/mecha/combat/durand.dm +++ b/code/modules/vehicles/mecha/combat/durand.dm @@ -271,7 +271,9 @@ own integrity back to max. Shield is automatically dropped if we run out of powe return . = ..() flick("shield_impact", src) - if(!chassis.use_energy((max_integrity - atom_integrity) * 0.1 * STANDARD_CELL_CHARGE)) + if(!.) + return + if(!chassis.use_energy(. * (STANDARD_CELL_CHARGE / 15))) chassis.cell?.charge = 0 for(var/O in chassis.occupants) var/mob/living/occupant = O diff --git a/code/modules/vehicles/mecha/combat/gygax.dm b/code/modules/vehicles/mecha/combat/gygax.dm index 82fd77f22890d..0acb746c52d4a 100644 --- a/code/modules/vehicles/mecha/combat/gygax.dm +++ b/code/modules/vehicles/mecha/combat/gygax.dm @@ -34,7 +34,7 @@ acid = 100 /obj/vehicle/sealed/mecha/gygax/dark - desc = "A lightweight exosuit, painted in a dark scheme. This model appears to have some modifications." + desc = "A lightweight exosuit, painted in a dark scheme. This model's armor has been upgraded with a cutting-edge armor composite, resulting in greater protection and performance at the cost of modularity." name = "\improper Dark Gygax" ui_theme = "syndicate" icon_state = "darkgygax" @@ -53,21 +53,21 @@ MECHA_R_ARM = 1, MECHA_UTILITY = 4, MECHA_POWER = 1, - MECHA_ARMOR = 3, + MECHA_ARMOR = 0, ) equip_by_category = list( MECHA_L_ARM = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/scattershot, MECHA_R_ARM = null, MECHA_UTILITY = list(/obj/item/mecha_parts/mecha_equipment/radio, /obj/item/mecha_parts/mecha_equipment/air_tank/full, /obj/item/mecha_parts/mecha_equipment/thrusters/ion), MECHA_POWER = list(), - MECHA_ARMOR = list(/obj/item/mecha_parts/mecha_equipment/armor/anticcw_armor_booster, /obj/item/mecha_parts/mecha_equipment/armor/antiproj_armor_booster), + MECHA_ARMOR = list(), ) destruction_sleep_duration = 20 /datum/armor/gygax_dark - melee = 40 - bullet = 40 - laser = 50 + melee = 70 + bullet = 50 + laser = 55 energy = 35 bomb = 20 fire = 100 @@ -78,7 +78,7 @@ max_ammo() /obj/vehicle/sealed/mecha/gygax/dark/loaded/populate_parts() - cell = new /obj/item/stock_parts/cell/bluespace(src) + cell = new /obj/item/stock_parts/power_store/cell/bluespace(src) scanmod = new /obj/item/stock_parts/scanning_module/triphasic(src) capacitor = new /obj/item/stock_parts/capacitor/quadratic(src) servo = new /obj/item/stock_parts/servo/femto(src) diff --git a/code/modules/vehicles/mecha/combat/honker.dm b/code/modules/vehicles/mecha/combat/honker.dm index a7c9f018d2869..83934244638aa 100644 --- a/code/modules/vehicles/mecha/combat/honker.dm +++ b/code/modules/vehicles/mecha/combat/honker.dm @@ -75,7 +75,7 @@ acid = 100 /obj/vehicle/sealed/mecha/honker/dark/loaded/populate_parts() - cell = new /obj/item/stock_parts/cell/hyper(src) + cell = new /obj/item/stock_parts/power_store/cell/hyper(src) scanmod = new /obj/item/stock_parts/scanning_module/phasic(src) capacitor = new /obj/item/stock_parts/capacitor/super(src) servo = new /obj/item/stock_parts/servo/pico(src) diff --git a/code/modules/vehicles/mecha/combat/marauder.dm b/code/modules/vehicles/mecha/combat/marauder.dm index 750223a85d7ad..48e2d60cbd68e 100644 --- a/code/modules/vehicles/mecha/combat/marauder.dm +++ b/code/modules/vehicles/mecha/combat/marauder.dm @@ -1,5 +1,5 @@ /obj/vehicle/sealed/mecha/marauder - desc = "Heavy-duty, combat exosuit, developed after the Durand model. Rarely found among civilian populations." + desc = "Heavy-duty, combat exosuit, developed after the Durand model. Rarely found among civilian populations. Its bleeding edge armour ensures maximum usability and protection at the cost of some modularity." name = "\improper Marauder" icon_state = "marauder" base_icon_state = "marauder" @@ -20,16 +20,16 @@ MECHA_R_ARM = 1, MECHA_UTILITY = 5, MECHA_POWER = 1, - MECHA_ARMOR = 3, + MECHA_ARMOR = 0, ) bumpsmash = TRUE /datum/armor/mecha_marauder - melee = 50 - bullet = 55 - laser = 40 + melee = 70 + bullet = 60 + laser = 60 energy = 30 - bomb = 30 + bomb = 50 fire = 100 acid = 100 @@ -44,11 +44,11 @@ MECHA_R_ARM = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack, MECHA_UTILITY = list(/obj/item/mecha_parts/mecha_equipment/radio, /obj/item/mecha_parts/mecha_equipment/air_tank/full, /obj/item/mecha_parts/mecha_equipment/thrusters/ion), MECHA_POWER = list(), - MECHA_ARMOR = list(/obj/item/mecha_parts/mecha_equipment/armor/antiproj_armor_booster), + MECHA_ARMOR = list(), ) /obj/vehicle/sealed/mecha/marauder/loaded/populate_parts() - cell = new /obj/item/stock_parts/cell/bluespace(src) + cell = new /obj/item/stock_parts/power_store/cell/bluespace(src) scanmod = new /obj/item/stock_parts/scanning_module/triphasic(src) capacitor = new /obj/item/stock_parts/capacitor/quadratic(src) servo = new /obj/item/stock_parts/servo/femto(src) @@ -92,6 +92,7 @@ accesses = list(ACCESS_CENT_SPECOPS) movedelay = 3 max_integrity = 550 + armor_type = /datum/armor/mecha_seraph wreckage = /obj/structure/mecha_wreckage/seraph force = 55 max_equip_by_category = list( @@ -99,22 +100,33 @@ MECHA_R_ARM = 1, MECHA_UTILITY = 5, MECHA_POWER = 1, - MECHA_ARMOR = 3, + MECHA_ARMOR = 0, ) equip_by_category = list( MECHA_L_ARM = /obj/item/mecha_parts/mecha_equipment/weapon/energy/pulse, MECHA_R_ARM = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack, MECHA_UTILITY = list(/obj/item/mecha_parts/mecha_equipment/radio, /obj/item/mecha_parts/mecha_equipment/air_tank/full, /obj/item/mecha_parts/mecha_equipment/thrusters/ion), MECHA_POWER = list(), - MECHA_ARMOR = list(/obj/item/mecha_parts/mecha_equipment/armor/antiproj_armor_booster), + MECHA_ARMOR = list(), ) +/datum/armor/mecha_seraph + melee = 80 + bullet = 65 + laser = 65 + energy = 50 + bomb = 50 + fire = 100 + acid = 100 + + /obj/vehicle/sealed/mecha/marauder/mauler - desc = "Heavy-duty, combat exosuit, developed off of the existing Marauder model." + desc = "Heavy-duty, combat exosuit, developed off of the existing Marauder model, its hardened exterior prevents the use of add-on armor packages." name = "\improper Mauler" ui_theme = "syndicate" icon_state = "mauler" base_icon_state = "mauler" + armor_type = /datum/armor/mecha_mauler accesses = list(ACCESS_SYNDICATE) wreckage = /obj/structure/mecha_wreckage/mauler mecha_flags = ID_LOCK_ON | CAN_STRAFE | IS_ENCLOSED | HAS_LIGHTS | MMI_COMPATIBLE @@ -123,7 +135,7 @@ MECHA_R_ARM = 1, MECHA_UTILITY = 4, MECHA_POWER = 1, - MECHA_ARMOR = 4, + MECHA_ARMOR = 0, ) equip_by_category = list( MECHA_L_ARM = null, @@ -134,13 +146,22 @@ ) destruction_sleep_duration = 20 +/datum/armor/mecha_mauler + melee = 80 + bullet = 60 + laser = 50 + energy = 30 + bomb = 50 + fire = 100 + acid = 100 + /obj/vehicle/sealed/mecha/marauder/mauler/loaded equip_by_category = list( MECHA_L_ARM = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/lmg, MECHA_R_ARM = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack, MECHA_UTILITY = list(/obj/item/mecha_parts/mecha_equipment/radio, /obj/item/mecha_parts/mecha_equipment/air_tank/full, /obj/item/mecha_parts/mecha_equipment/thrusters/ion), MECHA_POWER = list(), - MECHA_ARMOR = list(/obj/item/mecha_parts/mecha_equipment/armor/antiproj_armor_booster), + MECHA_ARMOR = list(), ) /obj/vehicle/sealed/mecha/marauder/mauler/loaded/Initialize(mapload) @@ -148,7 +169,7 @@ max_ammo() /obj/vehicle/sealed/mecha/marauder/mauler/loaded/populate_parts() - cell = new /obj/item/stock_parts/cell/bluespace(src) + cell = new /obj/item/stock_parts/power_store/cell/bluespace(src) scanmod = new /obj/item/stock_parts/scanning_module/triphasic(src) capacitor = new /obj/item/stock_parts/capacitor/quadratic(src) servo = new /obj/item/stock_parts/servo/femto(src) diff --git a/code/modules/vehicles/mecha/combat/phazon.dm b/code/modules/vehicles/mecha/combat/phazon.dm index 9c80339bde4af..cacfa7743dfbb 100644 --- a/code/modules/vehicles/mecha/combat/phazon.dm +++ b/code/modules/vehicles/mecha/combat/phazon.dm @@ -1,5 +1,5 @@ /obj/vehicle/sealed/mecha/phazon - desc = "This is a Phazon exosuit. The pinnacle of scientific research and pride of Nanotrasen, it uses cutting edge bluespace technology and expensive materials." + desc = "This is a Phazon exosuit. The pinnacle of scientific research and pride of Nanotrasen, it uses cutting edge anomalous technology and expensive materials." name = "\improper Phazon" icon_state = "phazon" base_icon_state = "phazon" diff --git a/code/modules/vehicles/mecha/combat/reticence.dm b/code/modules/vehicles/mecha/combat/reticence.dm index 5e400b12d9788..0860fbc407fbc 100644 --- a/code/modules/vehicles/mecha/combat/reticence.dm +++ b/code/modules/vehicles/mecha/combat/reticence.dm @@ -37,12 +37,12 @@ MECHA_L_ARM = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/silenced, MECHA_R_ARM = /obj/item/mecha_parts/mecha_equipment/rcd, MECHA_UTILITY = list(/obj/item/mecha_parts/mecha_equipment/radio, /obj/item/mecha_parts/mecha_equipment/air_tank/full, /obj/item/mecha_parts/mecha_equipment/thrusters/ion), - MECHA_POWER = /obj/item/mecha_parts/mecha_equipment/generator, + MECHA_POWER = list(/obj/item/mecha_parts/mecha_equipment/generator), MECHA_ARMOR = list(), ) /obj/vehicle/sealed/mecha/reticence/loaded/populate_parts() - cell = new /obj/item/stock_parts/cell/bluespace(src) + cell = new /obj/item/stock_parts/power_store/cell/bluespace(src) scanmod = new /obj/item/stock_parts/scanning_module/phasic(src) capacitor = new /obj/item/stock_parts/capacitor/super(src) servo = new /obj/item/stock_parts/servo/pico(src) diff --git a/code/modules/vehicles/mecha/combat/savannah_ivanov.dm b/code/modules/vehicles/mecha/combat/savannah_ivanov.dm index 237a0d971b0cb..a0f50622e06d1 100644 --- a/code/modules/vehicles/mecha/combat/savannah_ivanov.dm +++ b/code/modules/vehicles/mecha/combat/savannah_ivanov.dm @@ -15,7 +15,7 @@ /obj/vehicle/sealed/mecha/savannah_ivanov name = "\improper Savannah-Ivanov" desc = "An insanely overbulked mecha that handily crushes single-pilot opponents. The price is that you need two pilots to use it." - icon = 'icons/mob/coop_mech.dmi' + icon = 'icons/mob/rideables/coop_mech.dmi' base_icon_state = "savannah_ivanov" icon_state = "savannah_ivanov_0_0" //does not include mmi compatibility diff --git a/code/modules/vehicles/mecha/equipment/mecha_equipment.dm b/code/modules/vehicles/mecha/equipment/mecha_equipment.dm index b80ac6ef02580..755f45d52b4be 100644 --- a/code/modules/vehicles/mecha/equipment/mecha_equipment.dm +++ b/code/modules/vehicles/mecha/equipment/mecha_equipment.dm @@ -4,7 +4,7 @@ */ /obj/item/mecha_parts/mecha_equipment name = "mecha equipment" - icon = 'icons/mob/mecha_equipment.dmi' + icon = 'icons/obj/devices/mecha_equipment.dmi' icon_state = "mecha_equip" force = 5 max_integrity = 300 diff --git a/code/modules/vehicles/mecha/equipment/tools/medical_tools.dm b/code/modules/vehicles/mecha/equipment/tools/medical_tools.dm index b1e0d84f14ebe..e1c37a3d13a7f 100644 --- a/code/modules/vehicles/mecha/equipment/tools/medical_tools.dm +++ b/code/modules/vehicles/mecha/equipment/tools/medical_tools.dm @@ -72,7 +72,8 @@ data["contained_reagents"] = get_reagent_data(patient.reagents.reagent_list) var/obj/item/mecha_parts/mecha_equipment/medical/syringe_gun/shooter = locate(/obj/item/mecha_parts/mecha_equipment/medical/syringe_gun) in chassis - data["injectible_reagents"] = get_reagent_data(shooter.reagents.reagent_list) + if(shooter) + data["injectible_reagents"] = get_reagent_data(shooter.reagents.reagent_list) return data /obj/item/mecha_parts/mecha_equipment/medical/sleeper/handle_ui_act(action, list/params) @@ -81,11 +82,12 @@ go_out() return TRUE var/obj/item/mecha_parts/mecha_equipment/medical/syringe_gun/shooter = locate() in chassis - for(var/datum/reagent/medication in shooter.reagents.reagent_list) - if(action == ("inject_reagent_" + medication.name)) - inject_reagent(medication, shooter) - break // or maybe return TRUE? i'm not certain - + if(shooter) + for(var/datum/reagent/medication in shooter.reagents.reagent_list) + if(action == ("inject_reagent_" + medication.name)) + inject_reagent(medication, shooter) + break // or maybe return TRUE? i'm not certain + return FALSE /obj/item/mecha_parts/mecha_equipment/medical/sleeper/action(mob/source, atom/atomtarget, list/modifiers) diff --git a/code/modules/vehicles/mecha/equipment/tools/mining_tools.dm b/code/modules/vehicles/mecha/equipment/tools/mining_tools.dm index 8343dc85a54b7..f7a866bdffe90 100644 --- a/code/modules/vehicles/mecha/equipment/tools/mining_tools.dm +++ b/code/modules/vehicles/mecha/equipment/tools/mining_tools.dm @@ -32,6 +32,29 @@ ADD_TRAIT(src, TRAIT_INSTANTLY_PROCESSES_BOULDERS, INNATE_TRAIT) ADD_TRAIT(src, TRAIT_BOULDER_BREAKER, INNATE_TRAIT) +/obj/item/mecha_parts/mecha_equipment/drill/attach(obj/vehicle/sealed/mecha/new_mecha, attach_right) + . = ..() + RegisterSignal(chassis, COMSIG_MOVABLE_BUMP, PROC_REF(bump_mine)) + +/obj/item/mecha_parts/mecha_equipment/drill/detach(atom/moveto) + UnregisterSignal(chassis, COMSIG_MOVABLE_BUMP) + return ..() + +/obj/item/mecha_parts/mecha_equipment/drill/Destroy() + if(chassis) + UnregisterSignal(chassis, COMSIG_MOVABLE_BUMP) + return ..() + +///Called whenever the mech bumps into something; action() handles checking if it is a mineable turf +/obj/item/mecha_parts/mecha_equipment/drill/proc/bump_mine(obj/vehicle/sealed/mecha/bumper, atom/bumped_into) + SIGNAL_HANDLER + var/list/drivers = chassis.return_drivers() + if(!LAZYLEN(drivers)) //I don't know if this is possible but just in case + return + + //Just use the first one /shrug + INVOKE_ASYNC(src, PROC_REF(action), drivers[1], bumped_into, null, TRUE) + /obj/item/mecha_parts/mecha_equipment/drill/do_after_checks(atom/target) // Gotta be close to the target if(!loc.Adjacent(target)) @@ -41,55 +64,71 @@ return FALSE return ..() -/obj/item/mecha_parts/mecha_equipment/drill/action(mob/source, atom/target, list/modifiers) - // We can only drill non-space turfs, living mobs and objects. - if(isspaceturf(target) || !(isliving(target) || isobj(target) || isturf(target))) - return +/obj/item/mecha_parts/mecha_equipment/drill/action(mob/source, atom/target, list/modifiers, bumped) + //If bumped, only bother drilling mineral turfs + if(bumped) + if(!ismineralturf(target)) + return + + //Prevent drilling into gibtonite more than once; code mostly from MODsuit drill + if(istype(target, /turf/closed/mineral/gibtonite)) + var/turf/closed/mineral/gibtonite/giberal_turf = target + if(giberal_turf.stage != GIBTONITE_UNSTRUCK) + playsound(chassis, 'sound/machines/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE) + to_chat(source, span_warning("[icon2html(src, source)] Active gibtonite ore deposit detected! Safety protocols preventing continued drilling.")) + return - // For whatever reason we can't drill things that acid won't even stick too, and probably - // shouldn't waste our time drilling indestructible things. - if(isobj(target)) - var/obj/target_obj = target - if(target_obj.resistance_flags & (UNACIDABLE | INDESTRUCTIBLE)) + else + // We can only drill non-space turfs, living mobs and objects. + if(isspaceturf(target) || !(isliving(target) || isobj(target) || isturf(target))) return + // For whatever reason we can't drill things that acid won't even stick too, and probably + // shouldn't waste our time drilling indestructible things. + if(isobj(target)) + var/obj/target_obj = target + if(target_obj.resistance_flags & (UNACIDABLE | INDESTRUCTIBLE)) + return + // You can't drill harder by clicking more. - if(!DOING_INTERACTION_WITH_TARGET(source, target) && do_after_cooldown(target, source, DOAFTER_SOURCE_MECHADRILL)) - target.visible_message(span_warning("[chassis] starts to drill [target]."), \ - span_userdanger("[chassis] starts to drill [target]..."), \ - span_hear("You hear drilling.")) + if(DOING_INTERACTION_WITH_TARGET(source, target) && do_after_cooldown(target, source, DOAFTER_SOURCE_MECHADRILL)) + return - log_message("Started drilling [target]", LOG_MECHA) + target.visible_message(span_warning("[chassis] starts to drill [target]."), \ + span_userdanger("[chassis] starts to drill [target]..."), \ + span_hear("You hear drilling.")) - // Drilling a turf is a one-and-done procedure. - if(isturf(target)) - // Check if we can even use the equipment to begin with. - if(!action_checks(target)) - return + log_message("Started drilling [target]", LOG_MECHA) + + // Drilling a turf is a one-and-done procedure. + if(isturf(target)) + // Check if we can even use the equipment to begin with. + if(!action_checks(target)) + return - var/turf/T = target - T.drill_act(src, source) - - return ..() - - // Drilling objects and mobs is a repeating procedure. - while(do_after_mecha(target, source, drill_delay)) - if(isliving(target)) - drill_mob(target, source) - playsound(src,'sound/weapons/drill.ogg',40,TRUE) - else if(isobj(target)) - var/obj/O = target - if(istype(O, /obj/item/boulder)) - var/obj/item/boulder/nu_boulder = O - nu_boulder.manual_process(src, source) - else - O.take_damage(15, BRUTE, 0, FALSE, get_dir(chassis, target)) - playsound(src,'sound/weapons/drill.ogg', 40, TRUE) - - // If we caused a qdel drilling the target, we can stop drilling them. - // Prevents starting a do_after on a qdeleted target. - if(QDELETED(target)) - break + var/turf/T = target + T.drill_act(src, source) + + return ..() + + // Drilling objects and mobs is a repeating procedure. + while(do_after_mecha(target, source, drill_delay)) + if(isliving(target)) + drill_mob(target, source) + playsound(src,'sound/weapons/drill.ogg',40,TRUE) + else if(isobj(target)) + var/obj/O = target + if(istype(O, /obj/item/boulder)) + var/obj/item/boulder/nu_boulder = O + nu_boulder.manual_process(src, source) + else + O.take_damage(15, BRUTE, 0, FALSE, get_dir(chassis, target)) + playsound(src,'sound/weapons/drill.ogg', 40, TRUE) + + // If we caused a qdel drilling the target, we can stop drilling them. + // Prevents starting a do_after on a qdeleted target. + if(QDELETED(target)) + break return ..() diff --git a/code/modules/vehicles/mecha/equipment/tools/other_tools.dm b/code/modules/vehicles/mecha/equipment/tools/other_tools.dm index 61853ef1cdcd6..4d3b682b4277b 100644 --- a/code/modules/vehicles/mecha/equipment/tools/other_tools.dm +++ b/code/modules/vehicles/mecha/equipment/tools/other_tools.dm @@ -129,7 +129,7 @@ /obj/item/mecha_parts/mecha_equipment/gravcatapult/proc/do_scatter(atom/movable/scatter, atom/movable/target) var/dist = 5 - get_dist(scatter, target) var/delay = 2 - DSmove_manager.move_away(scatter, target, delay = delay, timeout = delay * dist, flags = MOVEMENT_LOOP_START_FAST, priority = MOVEMENT_ABOVE_SPACE_PRIORITY) + GLOB.move_manager.move_away(scatter, target, delay = delay, timeout = delay * dist, flags = MOVEMENT_LOOP_START_FAST, priority = MOVEMENT_ABOVE_SPACE_PRIORITY) /obj/item/mecha_parts/mecha_equipment/gravcatapult/get_snowflake_data() return list( @@ -508,7 +508,7 @@ /obj/item/mecha_parts/camera_kit name = "exosuit-mounted camera" desc = "A security camera meant for exosuit-mounted surveillance-on-the-go." - icon = 'icons/mob/mecha_equipment.dmi' + icon = 'icons/obj/devices/mecha_equipment.dmi' icon_state = "mecha_camera" w_class = WEIGHT_CLASS_SMALL diff --git a/code/modules/vehicles/mecha/equipment/weapons/mecha_ammo.dm b/code/modules/vehicles/mecha/equipment/weapons/mecha_ammo.dm index 0ad7bdf84a08c..828bb6f152cea 100644 --- a/code/modules/vehicles/mecha/equipment/weapons/mecha_ammo.dm +++ b/code/modules/vehicles/mecha/equipment/weapons/mecha_ammo.dm @@ -2,7 +2,7 @@ name = "generic ammo box" desc = "A box of ammo for an unknown weapon." w_class = WEIGHT_CLASS_BULKY - icon = 'icons/mob/mecha_ammo.dmi' + icon = 'icons/obj/weapons/guns/mecha_ammo.dmi' icon_state = "empty" lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi' diff --git a/code/modules/vehicles/mecha/equipment/weapons/weapons.dm b/code/modules/vehicles/mecha/equipment/weapons/weapons.dm index bd9bbfca91f27..0bb691160b373 100644 --- a/code/modules/vehicles/mecha/equipment/weapons/weapons.dm +++ b/code/modules/vehicles/mecha/equipment/weapons/weapons.dm @@ -4,14 +4,22 @@ equipment_slot = MECHA_WEAPON destroy_sound = 'sound/mecha/weapdestr.ogg' mech_flags = EXOSUIT_MODULE_COMBAT + /// The type of bullet generated by the mecha weapon. var/projectile + /// The sound of the mecha weapon firing. var/fire_sound + /// How many shots are fired per action. var/projectiles_per_shot = 1 + /// The degrees by which each individual bullet fans out from a central point. A predictable spray of bullets. var/variance = 0 - var/randomspread = FALSE //use random spread for machineguns, instead of shotgun scatter + /// Whether our bullets go off trajectory while firing randomly. Used to replicate recoil and not a structured, predictable spray. + var/randomspread = FALSE + /// The amount in deciseconds that the weapon sleeps between shots to simulate a 'burst fire'. The delay stops another bullet from being fired while sleeping. var/projectile_delay = 0 - var/firing_effect_type = /obj/effect/temp_visual/dir_setting/firing_effect //the visual effect appearing when the weapon is fired. - var/kickback = TRUE //Will using this weapon in no grav push mecha back. + //the visual effect appearing when the weapon is fired. + var/firing_effect_type = /obj/effect/temp_visual/dir_setting/firing_effect + /// Will using this weapon in no grav push mecha back. + var/kickback = TRUE /obj/item/mecha_parts/mecha_equipment/weapon/special_attaching_interaction(attach_right = FALSE, obj/vehicle/sealed/mecha/mech, mob/user, checkonly = FALSE) var/obj/item/mecha_parts/mecha_equipment/concealed_weapon_bay/bay @@ -43,23 +51,25 @@ /obj/item/mecha_parts/mecha_equipment/weapon/action(mob/source, atom/target, list/modifiers) if(!action_checks(target)) return FALSE + + /// Find our mecha, find the opposite direction. Used for kickback while the mecha is drifting in zero-g to launch us in this direction. var/newtonian_target = REVERSE_DIR(chassis.dir) . = ..()//start the cooldown early because of sleeps - for(var/i in 1 to projectiles_per_shot) + for(var/projectiles_to_shoot in 1 to projectiles_per_shot) if(energy_drain && !chassis.has_charge(energy_drain))//in case we run out of energy mid-burst, such as emp break var/spread = 0 if(variance) if(randomspread) - spread = round((rand() - 0.5) * variance) + spread = round((rand(0 , 1) - 0.5) * variance, 1) else - spread = round((i / projectiles_per_shot - 0.5) * variance) + spread = round((projectiles_to_shoot / projectiles_per_shot - 0.5) * variance, 1) var/obj/projectile/projectile_obj = new projectile(get_turf(src)) projectile_obj.log_override = TRUE //we log being fired ourselves a little further down. projectile_obj.firer = chassis projectile_obj.preparePixelProjectile(target, source, modifiers, spread) - if(source.client && isliving(source)) //dont want it to happen from syndie mecha npc mobs, they do direct fire anyways + if(isliving(source) && source.client) //dont want it to happen from syndie mecha npc mobs, they do direct fire anyways var/mob/living/shooter = source projectile_obj.hit_prone_targets = shooter.combat_mode projectile_obj.fire() @@ -580,10 +590,10 @@ . = ..() var/mob/living/mobtarget = target if(mobtarget.move_resist == MOVE_FORCE_OVERPOWERING) //No megafauna or bolted AIs, please. - to_chat(source, "[span_warning("[src] is unable to lift [mobtarget].")]") + balloon_alert(source, "too strong!") return if(secmech.cargo_hold.contents.len >= secmech.cargo_hold.cargo_capacity) - to_chat(source, "[icon2html(src, source)][span_warning("Not enough room in cargo compartment!")]") + balloon_alert(source, "no room!") return playsound(chassis, clampsound, 50, FALSE, -6) diff --git a/code/modules/vehicles/mecha/mech_bay.dm b/code/modules/vehicles/mecha/mech_bay.dm index 1a6ce31e28470..5166b9c5fdfc5 100644 --- a/code/modules/vehicles/mecha/mech_bay.dm +++ b/code/modules/vehicles/mecha/mech_bay.dm @@ -64,10 +64,11 @@ recharge_console.update_appearance() if(!recharging_mech?.cell) return - if(recharging_mech.cell.charge < recharging_mech.cell.maxcharge) - if(!use_energy(active_power_usage * seconds_per_tick, force = FALSE)) - return - charge_cell(recharge_power * seconds_per_tick, recharging_mech.cell, grid_only = TRUE) + if(recharging_mech.cell.used_charge()) + //charge cell, account for heat loss given from work done + var/charge_given = charge_cell(recharge_power * seconds_per_tick, recharging_mech.cell, grid_only = TRUE) + if(charge_given) + use_energy((charge_given + active_power_usage) * 0.01) else recharge_console.update_appearance() if(recharging_mech.loc != recharging_turf) diff --git a/code/modules/vehicles/mecha/mech_fabricator.dm b/code/modules/vehicles/mecha/mech_fabricator.dm index 2dce26624ad25..33edb9e47c777 100644 --- a/code/modules/vehicles/mecha/mech_fabricator.dm +++ b/code/modules/vehicles/mecha/mech_fabricator.dm @@ -49,12 +49,20 @@ /// All designs in the techweb that can be fabricated by this machine, since the last update. var/list/datum/design/cached_designs + //looping sound for printing items + var/datum/looping_sound/lathe_print/print_sound + /obj/machinery/mecha_part_fabricator/Initialize(mapload) + print_sound = new(src, FALSE) rmat = AddComponent(/datum/component/remote_materials, mapload && link_on_init) cached_designs = list() RefreshParts() //Recalculating local material sizes if the fab isn't linked return ..() +/obj/machinery/mecha_part_fabricator/Destroy() + QDEL_NULL(print_sound) + return ..() + /obj/machinery/mecha_part_fabricator/post_machine_initialize() . = ..() if(!CONFIG_GET(flag/no_default_techweb_link) && !stored_research) @@ -163,7 +171,7 @@ /obj/machinery/mecha_part_fabricator/proc/on_start_printing() add_overlay("fab-active") update_use_power(ACTIVE_POWER_USE) - + print_sound.start() /** * Intended to be called when the exofab has stopped working and is no longer printing items. * @@ -174,6 +182,7 @@ update_use_power(IDLE_POWER_USE) desc = initial(desc) process_queue = FALSE + print_sound.stop() /** * Attempts to build the next item in the build queue. @@ -260,22 +269,23 @@ * * Returns FALSE is the machine cannot dispense the part on the appropriate turf. * Return TRUE if the part was successfully dispensed. - * * D - Design datum to attempt to dispense. + * * dispensed_design - Design datum to attempt to dispense. */ -/obj/machinery/mecha_part_fabricator/proc/dispense_built_part(datum/design/D) - var/obj/item/I = new D.build_path(src) +/obj/machinery/mecha_part_fabricator/proc/dispense_built_part(datum/design/dispensed_design) + var/obj/item/built_part = new dispensed_design.build_path(src) + SSblackbox.record_feedback("nested tally", "lathe_printed_items", 1, list("[type]", "[built_part.type]")) being_built = null var/turf/exit = get_step(src,(dir)) if(exit.density) say("Error! The part outlet is obstructed.") - desc = "It's trying to dispense the fabricated [D.name], but the part outlet is obstructed." - stored_part = I + desc = "It's trying to dispense the fabricated [dispensed_design.name], but the part outlet is obstructed." + stored_part = built_part return FALSE - say("The fabrication of [I] is now complete.") - I.forceMove(exit) + say("The fabrication of [built_part] is now complete.") + built_part.forceMove(exit) top_job_id += 1 diff --git a/code/modules/vehicles/mecha/mech_melee_attack.dm b/code/modules/vehicles/mecha/mech_melee_attack.dm index 08669ebdd0ca8..d88aaaeb8c85d 100644 --- a/code/modules/vehicles/mecha/mech_melee_attack.dm +++ b/code/modules/vehicles/mecha/mech_melee_attack.dm @@ -2,7 +2,7 @@ * ## Mech melee attack * Called when a mech melees a target with fists * Handles damaging the target & associated effects - * return value is number of damage dealt + * return value is number of damage dealt. returning a value puts our mech onto attack cooldown. * Arguments: * * mecha_attacker: Mech attacking this target * * user: mob that initiated the attack from inside the mech as a controller @@ -10,10 +10,14 @@ /atom/proc/mech_melee_attack(obj/vehicle/sealed/mecha/mecha_attacker, mob/living/user) SHOULD_CALL_PARENT(TRUE) SEND_SIGNAL(src, COMSIG_ATOM_ATTACK_MECH, mecha_attacker, user) - log_combat(user, src, "attacked", mecha_attacker, "(COMBAT MODE: [uppertext(user.combat_mode)] (DAMTYPE: [uppertext(mecha_attacker.damtype)])") + if(!isnull(user)) + log_combat(user, src, "attacked", mecha_attacker, "(COMBAT MODE: [uppertext(user?.combat_mode)] (DAMTYPE: [uppertext(mecha_attacker.damtype)])") return 0 /turf/closed/wall/mech_melee_attack(obj/vehicle/sealed/mecha/mecha_attacker, mob/living/user) + if(!user.combat_mode) + return 0 + mecha_attacker.do_attack_animation(src) switch(mecha_attacker.damtype) if(BRUTE) @@ -31,7 +35,26 @@ ..() return 100 //this is an arbitrary "damage" number since the actual damage is rng dismantle -/obj/mech_melee_attack(obj/vehicle/sealed/mecha/mecha_attacker, mob/living/user) +/obj/structure/mech_melee_attack(obj/vehicle/sealed/mecha/mecha_attacker, mob/living/user) + if(!user.combat_mode) + return 0 + + mecha_attacker.do_attack_animation(src) + switch(mecha_attacker.damtype) + if(BRUTE) + playsound(src, 'sound/weapons/punch4.ogg', 50, TRUE) + if(BURN) + playsound(src, 'sound/items/welder.ogg', 50, TRUE) + else + return 0 + mecha_attacker.visible_message(span_danger("[mecha_attacker] hits [src]!"), span_danger("You hit [src]!"), null, COMBAT_MESSAGE_RANGE) + ..() + return take_damage(mecha_attacker.force * 3, mecha_attacker.damtype, "melee", FALSE, get_dir(src, mecha_attacker)) // multiplied by 3 so we can hit objs hard but not be overpowered against mobs. + +/obj/machinery/mech_melee_attack(obj/vehicle/sealed/mecha/mecha_attacker, mob/living/user) + if(!user.combat_mode) + return 0 + mecha_attacker.do_attack_animation(src) switch(mecha_attacker.damtype) if(BRUTE) @@ -50,7 +73,7 @@ return ..() /mob/living/mech_melee_attack(obj/vehicle/sealed/mecha/mecha_attacker, mob/living/user) - if(!user.combat_mode) + if(istype(user) && !user.combat_mode) step_away(src, mecha_attacker) log_combat(user, src, "pushed", mecha_attacker) visible_message(span_warning("[mecha_attacker] pushes [src] out of the way."), \ @@ -58,7 +81,7 @@ to_chat(mecha_attacker, span_danger("You push [src] out of the way.")) return 0 - if(HAS_TRAIT(user, TRAIT_PACIFISM)) + if(!isnull(user) && HAS_TRAIT(user, TRAIT_PACIFISM)) to_chat(user, span_warning("You don't want to harm other living beings!")) return 0 mecha_attacker.do_attack_animation(src) diff --git a/code/modules/vehicles/mecha/mecha_ai_interaction.dm b/code/modules/vehicles/mecha/mecha_ai_interaction.dm index 9ae35d8ff4ba4..3a681cac97db5 100644 --- a/code/modules/vehicles/mecha/mecha_ai_interaction.dm +++ b/code/modules/vehicles/mecha/mecha_ai_interaction.dm @@ -67,6 +67,7 @@ if(AI_MECH_HACK) //Called by AIs on the mech AI.linked_core = new /obj/structure/ai_core/deactivated(AI.loc) + AI.linked_core.remote_ai = AI if(AI.can_dominate_mechs && LAZYLEN(occupants)) //Oh, I am sorry, were you using that? to_chat(AI, span_warning("Occupants detected! Forced ejection initiated!")) to_chat(occupants, span_danger("You have been forcibly ejected!")) @@ -101,6 +102,7 @@ AI.eyeobj?.RegisterSignal(src, COMSIG_MOVABLE_MOVED, TYPE_PROC_REF(/mob/camera/ai_eye, update_visibility)) AI.controlled_equipment = src AI.remote_control = src + AI.ShutOffDoomsdayDevice() to_chat(AI, AI.can_dominate_mechs ? span_greenannounce("Takeover of [name] complete! You are now loaded onto the onboard computer. Do not attempt to leave the station sector!") :\ span_notice("You have been uploaded to a mech's onboard computer.")) to_chat(AI, "Use Middle-Mouse or the action button in your HUD to toggle equipment safety. Clicks with safety enabled will pass AI commands.") diff --git a/code/modules/vehicles/mecha/mecha_construction_paths.dm b/code/modules/vehicles/mecha/mecha_construction_paths.dm index 9a05e3df696d6..f4b1a679596b9 100644 --- a/code/modules/vehicles/mecha/mecha_construction_paths.dm +++ b/code/modules/vehicles/mecha/mecha_construction_paths.dm @@ -62,7 +62,7 @@ /datum/component/construction/unordered/mecha_chassis/spawn_result() var/atom/parent_atom = parent - parent_atom.icon = 'icons/mob/mech_construction.dmi' + parent_atom.icon = 'icons/mob/rideables/mech_construction.dmi' parent_atom.set_density(TRUE) parent_atom.cut_overlays() ..() @@ -209,7 +209,7 @@ "backward_message" = "removed servo" ), list( - "key" = /obj/item/stock_parts/cell, + "key" = /obj/item/stock_parts/power_store/cell, "action" = ITEM_MOVE_INSIDE, "back_key" = TOOL_SCREWDRIVER, "desc" = "Servo is secured, and the power cell can be added.", @@ -542,7 +542,7 @@ "desc" = "HONK!!!!!!" ), list( - "key" = /obj/item/stock_parts/cell, + "key" = /obj/item/stock_parts/power_store/cell, "action" = ITEM_MOVE_INSIDE, "desc" = "Laughter cell can be added!", "forward_message" = "added laughter" @@ -580,7 +580,7 @@ /datum/component/construction/mecha/honker/update_parent(step_index) if(step_index == 1) var/atom/parent_atom = parent - parent_atom.icon = 'icons/mob/mech_construct.dmi' + parent_atom.icon = 'icons/mob/rideables/mech_construct.dmi' parent_atom.icon_state = "honker_chassis" ..() @@ -715,7 +715,7 @@ "backward_message" = "disconnected bluespace crystal" ), list( - "key" = /obj/item/stock_parts/cell, + "key" = /obj/item/stock_parts/power_store/cell, "action" = ITEM_MOVE_INSIDE, "back_key" = TOOL_SCREWDRIVER, "desc" = "The bluespace crystal is engaged, and the power cell can be added.", @@ -759,12 +759,12 @@ "backward_message" = "unfastened external armor layer" ), list( - "key" = /obj/item/assembly/signaler/anomaly/bluespace, + "key" = /obj/item/assembly/signaler/anomaly/ectoplasm, "action" = ITEM_DELETE, "back_key" = TOOL_WELDER, - "desc" = "The external armor is welded, and the bluespace anomaly core socket is open.", + "desc" = "The external armor is welded, and the ectoplasm anomaly core socket is open.", "icon_state" = "phazon26", - "forward_message" = "inserted bluespace anomaly core", + "forward_message" = "inserted ectoplasm anomaly core", "backward_message" = "cut off external armor" ) ) diff --git a/code/modules/vehicles/mecha/mecha_defense.dm b/code/modules/vehicles/mecha/mecha_defense.dm index 426efaf1e6fee..912993d1ee640 100644 --- a/code/modules/vehicles/mecha/mecha_defense.dm +++ b/code/modules/vehicles/mecha/mecha_defense.dm @@ -261,7 +261,7 @@ balloon_alert(user, "open the panel first!") return - if(istype(weapon, /obj/item/stock_parts/cell)) + if(istype(weapon, /obj/item/stock_parts/power_store/cell)) if(!cell) if(!user.transferItemToLoc(weapon, src, silent = FALSE)) return diff --git a/code/modules/vehicles/mecha/mecha_mob_interaction.dm b/code/modules/vehicles/mecha/mecha_mob_interaction.dm index d16e4af154179..e72d5505cb6fc 100644 --- a/code/modules/vehicles/mecha/mecha_mob_interaction.dm +++ b/code/modules/vehicles/mecha/mecha_mob_interaction.dm @@ -119,19 +119,29 @@ //stop listening to this signal, as the static update is now handled by the eyeobj's setLoc AI.eyeobj?.UnregisterSignal(src, COMSIG_MOVABLE_MOVED) AI.eyeobj?.forceMove(newloc) //kick the eye out as well - if(forced)//This should only happen if there are multiple AIs in a round, and at least one is Malf. + if(forced) + AI.controlled_equipment = null + AI.remote_control = null if(!AI.linked_core) //if the victim AI has no core - AI.investigate_log("has been gibbed by being forced out of their mech by another AI.", INVESTIGATE_DEATHS) - AI.gib(DROP_ALL_REMAINS) //If one Malf decides to steal a mech from another AI (even other Malfs!), they are destroyed, as they have nowhere to go when replaced. - AI = null - mecha_flags &= ~SILICON_PILOT - return + if (!AI.can_shunt || !length(AI.hacked_apcs)) + AI.investigate_log("has been gibbed by being forced out of their mech.", INVESTIGATE_DEATHS) + /// If an AI with no core (and no shunting abilities) gets forced out of their mech + /// (in a way that isn't handled by the normal handling of their mech being destroyed) + /// we gib 'em here, too. + AI.gib(DROP_ALL_REMAINS) + AI = null + mecha_flags &= ~SILICON_PILOT + return + else + var/obj/machinery/power/apc/emergency_shunt_apc = pick(AI.hacked_apcs) + emergency_shunt_apc.malfoccupy(AI) //get shunted into a random APC (you don't get to choose which) + AI = null + mecha_flags &= ~SILICON_PILOT + return + newloc = get_turf(AI.linked_core) + qdel(AI.linked_core) + AI.forceMove(newloc) else - if(!AI.linked_core) - if(!silent) - to_chat(AI, span_userdanger("Inactive core destroyed. Unable to return.")) - AI.linked_core = null - return if(!silent) to_chat(AI, span_notice("Returning to core...")) AI.controlled_equipment = null @@ -139,6 +149,7 @@ mob_container = AI newloc = get_turf(AI.linked_core) qdel(AI.linked_core) + AI.forceMove(newloc) else if(isliving(M)) mob_container = M else @@ -186,9 +197,20 @@ /obj/vehicle/sealed/mecha/container_resist_act(mob/living/user) if(isAI(user)) var/mob/living/silicon/ai/AI = user - if(!AI.can_shunt) - to_chat(AI, span_notice("You can't leave a mech after dominating it!.")) - return FALSE + if(!AI.linked_core) + to_chat(AI, span_userdanger("Inactive core destroyed. Unable to return.")) + if(!AI.can_shunt || !AI.hacked_apcs.len) + to_chat(AI, span_warning("[AI.can_shunt ? "No hacked APCs available." : "No shunting capabilities."]")) + return + var/confirm = tgui_alert(AI, "Shunt to a random APC? You won't have anywhere else to go!", "Confirm Emergency Shunt", list("Yes", "No")) + if(confirm == "Yes") + /// Mechs with open cockpits can have the pilot shot by projectiles, or EMPs may destroy the AI inside + /// Alternatively, destroying the mech will shunt the AI if they can shunt, or a deadeye wizard can hit + /// them with a teleportation bolt + if (AI.stat == DEAD || AI.loc != src) + return + mob_exit(AI, forced = TRUE) + return to_chat(user, span_notice("You begin the ejection procedure. Equipment is disabled during this process. Hold still to finish ejecting.")) is_currently_ejecting = TRUE if(do_after(user, has_gravity() ? exit_delay : 0 , target = src)) diff --git a/code/modules/vehicles/mecha/mecha_movement.dm b/code/modules/vehicles/mecha/mecha_movement.dm index 53e61690aba7f..3c743bd7fb357 100644 --- a/code/modules/vehicles/mecha/mecha_movement.dm +++ b/code/modules/vehicles/mecha/mecha_movement.dm @@ -154,13 +154,17 @@ return if(.) //mech was thrown/door/whatever return - if(bumpsmash) //Need a pilot to push the PUNCH button. - if(COOLDOWN_FINISHED(src, mecha_bump_smash)) - var/list/mob/mobster = return_drivers() - obstacle.mech_melee_attack(src, mobster[1]) - COOLDOWN_START(src, mecha_bump_smash, smashcooldown) - if(!obstacle || obstacle.CanPass(src, get_dir(obstacle, src) || dir)) // The else is in case the obstacle is in the same turf. - step(src,dir) + + // Whether or not we're on our mecha melee cooldown + var/on_cooldown = TIMER_COOLDOWN_RUNNING(src, COOLDOWN_MECHA_MELEE_ATTACK) + + if(bumpsmash && !on_cooldown) + // Our pilot for this evening + var/list/mob/mobster = return_drivers() + if(obstacle.mech_melee_attack(src, mobster[1])) + TIMER_COOLDOWN_START(src, COOLDOWN_MECHA_MELEE_ATTACK, melee_cooldown * 0.3) + if(!obstacle || obstacle.CanPass(src, get_dir(obstacle, src) || dir)) // The else is in case the obstacle is in the same turf. + step(src,dir) if(isobj(obstacle)) var/obj/obj_obstacle = obstacle if(!obj_obstacle.anchored && obj_obstacle.move_resist <= move_force) diff --git a/code/modules/vehicles/mecha/mecha_parts.dm b/code/modules/vehicles/mecha/mecha_parts.dm index bec0fefcc6d85..7fcee2092590c 100644 --- a/code/modules/vehicles/mecha/mecha_parts.dm +++ b/code/modules/vehicles/mecha/mecha_parts.dm @@ -4,7 +4,7 @@ /obj/item/mecha_parts name = "mecha part" - icon = 'icons/mob/mech_construct.dmi' + icon = 'icons/mob/rideables/mech_construct.dmi' icon_state = "blank" w_class = WEIGHT_CLASS_GIGANTIC obj_flags = CONDUCTS_ELECTRICITY @@ -253,12 +253,12 @@ /obj/item/mecha_parts/chassis/phazon/attackby(obj/item/I, mob/user, params) . = ..() - if(istype(I, /obj/item/assembly/signaler/anomaly) && !istype(I, /obj/item/assembly/signaler/anomaly/bluespace)) - to_chat(user, "The anomaly core socket only accepts bluespace anomaly cores!") + if(istype(I, /obj/item/assembly/signaler/anomaly) && !istype(I, /obj/item/assembly/signaler/anomaly/ectoplasm)) + to_chat(user, "The anomaly core socket only accepts ectoplasm anomaly cores!") /obj/item/mecha_parts/part/phazon_torso name="\improper Phazon torso" - desc="A Phazon torso part. The socket for the bluespace core that powers the exosuit's unique phase drives is located in the middle." + desc="A Phazon torso part. The socket for the ectoplasmic core that powers the exosuit's unique phase drives is located in the middle." icon_state = "phazon_harness" /obj/item/mecha_parts/part/phazon_head diff --git a/code/modules/vehicles/mecha/mecha_wreckage.dm b/code/modules/vehicles/mecha/mecha_wreckage.dm index 8896b7268fe15..dc0414e86063a 100644 --- a/code/modules/vehicles/mecha/mecha_wreckage.dm +++ b/code/modules/vehicles/mecha/mecha_wreckage.dm @@ -6,7 +6,7 @@ /obj/structure/mecha_wreckage name = "exosuit wreckage" desc = "Remains of some unfortunate mecha. Completely irreparable, but perhaps something can be salvaged." - icon = 'icons/mob/mecha.dmi' + icon = 'icons/mob/rideables/mecha.dmi' density = TRUE anchored = FALSE opacity = FALSE @@ -224,7 +224,7 @@ /obj/structure/mecha_wreckage/savannah_ivanov name = "\improper Savannah-Ivanov wreckage" - icon = 'icons/mob/coop_mech.dmi' + icon = 'icons/mob/rideables/coop_mech.dmi' icon_state = "savannah_ivanov-broken" welder_salvage = list(/obj/item/stack/sheet/mineral/silver, /obj/item/stack/sheet/iron, /obj/item/stack/rods) parts = list( diff --git a/code/modules/vehicles/mecha/working/ripley.dm b/code/modules/vehicles/mecha/working/ripley.dm index a4872289e962c..754a6b820d721 100644 --- a/code/modules/vehicles/mecha/working/ripley.dm +++ b/code/modules/vehicles/mecha/working/ripley.dm @@ -265,8 +265,6 @@ GLOBAL_DATUM(cargo_ripley, /obj/vehicle/sealed/mecha/ripley/cargo) /obj/vehicle/sealed/mecha/ripley/cargo/Initialize(mapload) . = ..() - if(cell) - cell.charge = FLOOR(cell.charge * 0.25, 1) //Starts at very low charge //Attach hydraulic clamp ONLY var/obj/item/mecha_parts/mecha_equipment/hydraulic_clamp/HC = new @@ -283,7 +281,7 @@ GLOBAL_DATUM(cargo_ripley, /obj/vehicle/sealed/mecha/ripley/cargo) return ..() /obj/vehicle/sealed/mecha/ripley/cargo/populate_parts() - cell = new /obj/item/stock_parts/cell/high(src) + cell = new /obj/item/stock_parts/power_store/cell/high(src) //No scanmod for Big Bess capacitor = new /obj/item/stock_parts/capacitor(src) servo = new /obj/item/stock_parts/servo(src) @@ -398,8 +396,13 @@ GLOBAL_DATUM(cargo_ripley, /obj/vehicle/sealed/mecha/ripley/cargo) return ..() /obj/item/mecha_parts/mecha_equipment/ejector/seccage/container_resist_act(mob/living/user) - to_chat(user, span_notice("You begin attempting a breakout. (This will take around 45 seconds and [chassis] need to remain stationary.)")) - if(!do_after(user, 1 MINUTES, target = chassis)) + var/breakout_time = 1 MINUTES + + if (user.mob_size > MOB_SIZE_HUMAN) + breakout_time = 6 SECONDS + + to_chat(user, span_notice("You begin attempting a breakout. (This will take around [DisplayTimeText(breakout_time)] and [chassis] needs to remain stationary.)")) + if(!do_after(user, breakout_time, target = chassis)) return to_chat(user, span_notice("You break out of the [src].")) playsound(chassis, 'sound/items/crowbar.ogg', 100, TRUE) diff --git a/code/modules/vehicles/motorized_wheelchair.dm b/code/modules/vehicles/motorized_wheelchair.dm index 8dbdfd93e8f69..cecf6b815e249 100644 --- a/code/modules/vehicles/motorized_wheelchair.dm +++ b/code/modules/vehicles/motorized_wheelchair.dm @@ -20,7 +20,7 @@ /datum/stock_part/capacitor, ) ///power cell we draw power from - var/obj/item/stock_parts/cell/power_cell + var/obj/item/stock_parts/power_store/power_cell ///stock parts for this chair var/list/component_parts = list() @@ -34,7 +34,7 @@ component_parts += GLOB.stock_part_datums[/datum/stock_part/capacitor] component_parts += GLOB.stock_part_datums[/datum/stock_part/servo] component_parts += GLOB.stock_part_datums[/datum/stock_part/servo] - power_cell = new /obj/item/stock_parts/cell(src) + power_cell = new /obj/item/stock_parts/power_store/cell(src) /obj/vehicle/ridden/wheelchair/motorized/make_ridable() AddElement(/datum/element/ridable, /datum/component/riding/vehicle/wheelchair/motorized) @@ -45,7 +45,7 @@ component_parts = list() for(var/obj/item/stock_parts/part in parts_list) - if(istype(part, /obj/item/stock_parts/cell)) // power cell, physically moves into the wheelchair + if(istype(part, /obj/item/stock_parts/power_store/cell)) // power cell, physically moves into the wheelchair power_cell = part part.forceMove(src) continue @@ -109,7 +109,7 @@ if(!panel_open) return ..() - if(istype(attacking_item, /obj/item/stock_parts/cell)) + if(istype(attacking_item, /obj/item/stock_parts/power_store/cell)) if(power_cell) to_chat(user, span_warning("There is a power cell already installed.")) else @@ -232,4 +232,4 @@ component_parts += GLOB.stock_part_datums[/datum/stock_part/capacitor] component_parts += GLOB.stock_part_datums[/datum/stock_part/servo/tier2] component_parts += GLOB.stock_part_datums[/datum/stock_part/servo] - power_cell = new /obj/item/stock_parts/cell/upgraded/plus(src) + power_cell = new /obj/item/stock_parts/power_store/cell/upgraded/plus(src) diff --git a/code/modules/vehicles/scooter.dm b/code/modules/vehicles/scooter.dm index a4f3652448342..0b842b8ed9cbe 100644 --- a/code/modules/vehicles/scooter.dm +++ b/code/modules/vehicles/scooter.dm @@ -161,9 +161,8 @@ victim.visible_message(span_danger("[victim] straight up gets grinded into the ground by [skater]'s [src]! Radical!")) addtimer(CALLBACK(src, PROC_REF(grind)), 0.1 SECONDS) -/obj/vehicle/ridden/scooter/skateboard/MouseDrop(atom/over_object) - . = ..() - var/mob/living/carbon/skater = usr +/obj/vehicle/ridden/scooter/skateboard/mouse_drop_dragged(atom/over_object, mob/user) + var/mob/living/carbon/skater = user if(!istype(skater)) return if (over_object == skater) @@ -224,7 +223,7 @@ /obj/item/scooter_frame name = "scooter frame" desc = "A metal frame for building a scooter. Looks like you'll need to add some iron to make wheels." - icon = 'icons/obj/vehicles.dmi' + icon = 'icons/mob/rideables/vehicles.dmi' icon_state = "scooter_frame" w_class = WEIGHT_CLASS_NORMAL diff --git a/code/modules/vehicles/sealed.dm b/code/modules/vehicles/sealed.dm index 0ecc492f6d598..821a69d8f8269 100644 --- a/code/modules/vehicles/sealed.dm +++ b/code/modules/vehicles/sealed.dm @@ -1,5 +1,7 @@ /obj/vehicle/sealed flags_1 = PREVENT_CONTENTS_EXPLOSION_1 + interaction_flags_mouse_drop = NEED_HANDS + var/enter_delay = 2 SECONDS var/mouse_pointer var/headlights_toggle = FALSE @@ -20,7 +22,7 @@ if(istype(E)) E.vehicle_entered_target = src -/obj/vehicle/sealed/MouseDrop_T(atom/dropping, mob/M) +/obj/vehicle/sealed/mouse_drop_receive(atom/dropping, mob/M, params) if(!istype(dropping) || !istype(M)) return ..() if(M == dropping) diff --git a/code/modules/vehicles/vehicle_key.dm b/code/modules/vehicles/vehicle_key.dm index 08cb75df2d440..f8db861449f7a 100644 --- a/code/modules/vehicles/vehicle_key.dm +++ b/code/modules/vehicles/vehicle_key.dm @@ -1,7 +1,7 @@ /obj/item/key name = "key" desc = "A small grey key." - icon = 'icons/obj/vehicles.dmi' + icon = 'icons/mob/rideables/vehicles.dmi' icon_state = "key" w_class = WEIGHT_CLASS_TINY diff --git a/code/modules/vehicles/wheelchair.dm b/code/modules/vehicles/wheelchair.dm index 92fcb995f7643..b94257bb45f2b 100644 --- a/code/modules/vehicles/wheelchair.dm +++ b/code/modules/vehicles/wheelchair.dm @@ -1,12 +1,14 @@ /obj/vehicle/ridden/wheelchair //ported from Hippiestation (by Jujumatic) name = "wheelchair" desc = "A chair with big wheels. It looks like you can move in this on your own." - icon = 'icons/obj/vehicles.dmi' + icon = 'icons/mob/rideables/vehicles.dmi' icon_state = "wheelchair" layer = OBJ_LAYER max_integrity = 100 armor_type = /datum/armor/ridden_wheelchair - density = FALSE //Thought I couldn't fix this one easily, phew + density = FALSE + interaction_flags_mouse_drop = ALLOW_RESTING + /// Run speed delay is multiplied with this for vehicle move delay. var/delay_multiplier = 6.7 /// This variable is used to specify which overlay icon is used for the wheelchair, ensures wheelchair can cover your legs @@ -90,7 +92,7 @@ /obj/item/wheelchair name = "wheelchair" desc = "A collapsed wheelchair that can be carried around." - icon = 'icons/obj/vehicles.dmi' + icon = 'icons/mob/rideables/vehicles.dmi' icon_state = "wheelchair_folded" inhand_icon_state = "wheelchair_folded" lefthand_file = 'icons/mob/inhands/items_lefthand.dmi' @@ -105,7 +107,7 @@ /obj/item/wheelchair/gold name = "gold wheelchair" desc = "A collapsed, shiny wheelchair that can be carried around." - icon = 'icons/obj/vehicles.dmi' + icon = 'icons/mob/rideables/vehicles.dmi' icon_state = "wheelchair_folded_gold" inhand_icon_state = "wheelchair_folded_gold" lefthand_file = 'icons/mob/inhands/items_lefthand.dmi' @@ -122,22 +124,25 @@ fire = 30 acid = 40 -/obj/vehicle/ridden/wheelchair/MouseDrop(over_object, src_location, over_location) //Lets you collapse wheelchair - . = ..() - if(over_object != usr || !Adjacent(usr) || !foldabletype) - return FALSE - if(!ishuman(usr) || !usr.can_perform_action(src)) +/obj/vehicle/ridden/wheelchair/mouse_drop_dragged(atom/over_object, mob/user) //Lets you collapse wheelchair + if(over_object != user || !foldabletype || !ishuman(user)) return FALSE if(has_buckled_mobs()) return FALSE - usr.visible_message(span_notice("[usr] collapses [src]."), span_notice("You collapse [src].")) + user.visible_message(span_notice("[user] collapses [src]."), span_notice("You collapse [src].")) var/obj/vehicle/ridden/wheelchair/wheelchair_folded = new foldabletype(get_turf(src)) - usr.put_in_hands(wheelchair_folded) + user.put_in_hands(wheelchair_folded) qdel(src) /obj/item/wheelchair/attack_self(mob/user) //Deploys wheelchair on in-hand use deploy_wheelchair(user, user.loc) +/obj/item/wheelchair/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + if(isopenturf(interacting_with)) + deploy_wheelchair(user, interacting_with) + return ITEM_INTERACT_SUCCESS + return NONE + /obj/item/wheelchair/proc/deploy_wheelchair(mob/user, atom/location) var/obj/vehicle/ridden/wheelchair/wheelchair_unfolded = new unfolded_type(location) wheelchair_unfolded.add_fingerprint(user) diff --git a/code/modules/vending/_vending.dm b/code/modules/vending/_vending.dm index 096cd735bd483..9ca0d41d85367 100644 --- a/code/modules/vending/_vending.dm +++ b/code/modules/vending/_vending.dm @@ -271,7 +271,7 @@ GLOBAL_LIST_EMPTY(vending_machines_to_restock) */ var/max_amount = rand(CEILING(product_record.amount * 0.5, 1), product_record.amount) product_record.amount = rand(0, max_amount) - credits_contained += rand(0, 1) //randomly add a few credits to the machine to make it look like it's been used, proportional to the amount missing. + credits_contained += rand(1, 5) //randomly add a few credits to the machine to make it look like it's been used, proportional to the amount missing. if(tiltable && prob(6)) // 1 in 17 chance to start tilted (as an additional hint to the station trait behind it) INVOKE_ASYNC(src, PROC_REF(tilt), loc) credits_contained = 0 // If it's tilted, it's been looted, so no credits for you. @@ -1417,7 +1417,7 @@ GLOBAL_LIST_EMPTY(vending_machines_to_restock) if(isliving(usr)) living_user = usr card_used = living_user.get_idcard(TRUE) - else if(age_restrictions && item_record.age_restricted && (!card_used.registered_age || card_used.registered_age < AGE_MINOR)) + if(age_restrictions && item_record.age_restricted && (!card_used.registered_age || card_used.registered_age < AGE_MINOR)) speak("You are not of legal age to purchase [item_record.name].") if(!(usr in GLOB.narcd_underages)) if (isnull(sec_radio)) @@ -1458,7 +1458,7 @@ GLOBAL_LIST_EMPTY(vending_machines_to_restock) if(usr.CanReach(src) && usr.put_in_hands(vended_item)) to_chat(usr, span_notice("You take [item_record.name] out of the slot.")) else - to_chat(usr, span_warning("[capitalize(item_record.name)] falls onto the floor!")) + to_chat(usr, span_warning("[capitalize(format_text(item_record.name))] falls onto the floor!")) SSblackbox.record_feedback("nested tally", "vending_machine_usage", 1, list("[type]", "[item_record.product_path]")) vend_ready = TRUE @@ -1652,6 +1652,7 @@ GLOBAL_LIST_EMPTY(vending_machines_to_restock) return var/credits_to_remove = min(CREDITS_DUMP_THRESHOLD, round(credits_contained)) var/obj/item/holochip/holochip = new(loc, credits_to_remove) + playsound(src, 'sound/effects/cashregister.ogg', 40, TRUE) credits_contained = max(0, credits_contained - credits_to_remove) SSblackbox.record_feedback("amount", "vending machine looted", holochip.credits) @@ -1777,7 +1778,7 @@ GLOBAL_LIST_EMPTY(vending_machines_to_restock) speak("\The [src] has been linked to [card_used].") if(compartmentLoadAccessCheck(user)) - if(istype(attack_item, /obj/item/pen)) + if(IS_WRITING_UTENSIL(attack_item)) name = tgui_input_text(user, "Set name", "Name", name, 20) desc = tgui_input_text(user, "Set description", "Description", desc, 60) slogan_list += tgui_input_text(user, "Set slogan", "Slogan", "Epic", 60) @@ -1846,7 +1847,7 @@ GLOBAL_LIST_EMPTY(vending_machines_to_restock) if(user.CanReach(src) && user.put_in_hands(dispensed_item)) to_chat(user, span_notice("You take [dispensed_item.name] out of the slot.")) else - to_chat(user, span_warning("[capitalize(dispensed_item.name)] falls onto the floor!")) + to_chat(user, span_warning("[capitalize(format_text(dispensed_item.name))] falls onto the floor!")) return TRUE /obj/machinery/vending/custom/unbreakable diff --git a/code/modules/vending/assist.dm b/code/modules/vending/assist.dm index a043a365046e2..c1cffea115fd8 100644 --- a/code/modules/vending/assist.dm +++ b/code/modules/vending/assist.dm @@ -20,7 +20,8 @@ /obj/item/assembly/health = 2, /obj/item/assembly/timer = 2, /obj/item/assembly/voice = 2, - /obj/item/stock_parts/cell/high = 1, + /obj/item/stock_parts/power_store/cell/high = 1, + /obj/item/stock_parts/power_store/battery/high = 1, /obj/item/market_uplink/blackmarket = 1, ) premium = list( diff --git a/code/modules/vending/cigarette.dm b/code/modules/vending/cigarette.dm index ddcfd9bb244d9..61379e5635468 100644 --- a/code/modules/vending/cigarette.dm +++ b/code/modules/vending/cigarette.dm @@ -17,7 +17,7 @@ /obj/item/storage/fancy/rollingpapers = 5, ) contraband = list( - /obj/item/clothing/mask/vape = 5, + /obj/item/vape = 5, ) premium = list( /obj/item/storage/fancy/cigarettes/cigpack_robustgold = 3, @@ -66,7 +66,7 @@ ) premium = list( /obj/item/storage/fancy/cigarettes/cigpack_mindbreaker = 5, - /obj/item/clothing/mask/vape = 5, + /obj/item/vape = 5, /obj/item/lighter = 3, ) initial_language_holder = /datum/language_holder/beachbum diff --git a/code/modules/vending/engineering.dm b/code/modules/vending/engineering.dm index 801a44e0f20df..48da7e27b1286 100644 --- a/code/modules/vending/engineering.dm +++ b/code/modules/vending/engineering.dm @@ -20,7 +20,8 @@ /obj/item/multitool = 12, /obj/item/wrench = 12, /obj/item/t_scanner = 12, - /obj/item/stock_parts/cell = 8, + /obj/item/stock_parts/power_store/cell = 8, + /obj/item/stock_parts/power_store/battery = 8, /obj/item/weldingtool = 8, /obj/item/clothing/head/utility/welding = 8, /obj/item/light/tube = 10, diff --git a/code/modules/vending/engivend.dm b/code/modules/vending/engivend.dm index ce7e1bf12bdd6..1522d0047b098 100644 --- a/code/modules/vending/engivend.dm +++ b/code/modules/vending/engivend.dm @@ -11,7 +11,8 @@ /obj/item/multitool = 4, /obj/item/grenade/chem_grenade/smart_metal_foam = 10, /obj/item/geiger_counter = 5, - /obj/item/stock_parts/cell/high = 10, + /obj/item/stock_parts/power_store/cell/high = 10, + /obj/item/stock_parts/power_store/battery/high = 10, /obj/item/electronics/airlock = 10, /obj/item/electronics/apc = 10, /obj/item/electronics/airalarm = 10, @@ -19,7 +20,7 @@ /obj/item/electronics/firelock = 10, ) contraband = list( - /obj/item/stock_parts/cell/potato = 3, + /obj/item/stock_parts/power_store/cell/potato = 3, ) premium = list( /obj/item/storage/belt/utility = 3, diff --git a/code/modules/vending/medical.dm b/code/modules/vending/medical.dm index ad1c63e7e796f..2209f550fce28 100644 --- a/code/modules/vending/medical.dm +++ b/code/modules/vending/medical.dm @@ -17,6 +17,7 @@ /obj/item/stack/medical/ointment = 2, /obj/item/stack/medical/suture = 2, /obj/item/stack/medical/bone_gel = 4, + /obj/item/cane/crutch = 2, /obj/item/cane/white = 2, /obj/item/clothing/glasses/eyepatch/medical = 2, /obj/item/storage/box/bandages = 2, @@ -62,6 +63,7 @@ /obj/item/stack/medical/ointment = 0, /obj/item/stack/medical/suture = 1, /obj/item/stack/medical/bone_gel = 1, + /obj/item/cane/crutch = 2, /obj/item/cane/white = 2, /obj/item/clothing/glasses/eyepatch/medical = 2, ) @@ -81,6 +83,7 @@ /obj/item/reagent_containers/pill/insulin = 5, /obj/item/reagent_containers/cup/bottle/multiver = 2, /obj/item/reagent_containers/cup/bottle/syriniver = 2, + /obj/item/reagent_containers/cup/bottle/calomel = 2, /obj/item/reagent_containers/cup/bottle/epinephrine = 3, /obj/item/reagent_containers/cup/bottle/morphine = 4, /obj/item/reagent_containers/cup/bottle/potass_iodide = 1, diff --git a/code/modules/vending/robotics.dm b/code/modules/vending/robotics.dm index 30bf8543d504c..8796e8d756192 100644 --- a/code/modules/vending/robotics.dm +++ b/code/modules/vending/robotics.dm @@ -12,7 +12,7 @@ /obj/item/clothing/under/rank/rnd/roboticist = 4, /obj/item/stack/cable_coil = 4, /obj/item/assembly/flash/handheld = 4, - /obj/item/stock_parts/cell/high = 12, + /obj/item/stock_parts/power_store/cell/high = 12, /obj/item/assembly/prox_sensor = 3, /obj/item/assembly/signaler = 3, /obj/item/healthanalyzer = 3, diff --git a/code/modules/vending/wardrobes.dm b/code/modules/vending/wardrobes.dm index f2df81d008112..3f82a219e56c9 100644 --- a/code/modules/vending/wardrobes.dm +++ b/code/modules/vending/wardrobes.dm @@ -1,3 +1,7 @@ +GLOBAL_VAR_INIT(roaches_deployed, FALSE) +#define MOTHROACH_START_CHANCE 5 +#define MAX_MOTHROACH_AMOUNT 3 + /obj/item/vending_refill/wardrobe icon_state = "refill_clothes" @@ -8,6 +12,29 @@ panel_type = "panel19" light_mask = "wardrobe-light-mask" +/obj/machinery/vending/wardrobe/Initialize(mapload) + . = ..() + if(!mapload) + return + if(GLOB.roaches_deployed || !is_station_level(z) || !prob(MOTHROACH_START_CHANCE)) + return + for(var/count in 1 to rand(1, MAX_MOTHROACH_AMOUNT)) + new /mob/living/basic/mothroach(src) + GLOB.roaches_deployed = TRUE + + +/obj/machinery/vending/wardrobe/on_dispense(obj/item/clothing/food) + if(!istype(food)) + return + for(var/mob/living/basic/mothroach/roach in contents) + food.take_damage(food.get_integrity() * 0.5) + +/obj/machinery/vending/wardrobe/take_damage(damage_amount, damage_type = BRUTE, damage_flag = 0, sound_effect = 1, attack_dir) + . = ..() + for(var/mob/living/basic/mothroach/roach in contents) + roach.ai_controller.set_blackboard_key(BB_BASIC_MOB_FLEE_TARGET, src) //scatter away! + roach.forceMove(drop_location()) + /obj/machinery/vending/wardrobe/sec_wardrobe name = "\improper SecDrobe" desc = "A vending machine for security and security-related clothing!" @@ -316,28 +343,27 @@ product_ads = "Any day above ground is a good one!;My day starts when yours ends!;And they call this a dying business!;See you when you're dead!" vend_reply = "Don't forget your \"Buy one get one free\" burial deal!" products = list( - /obj/item/toy/crayon/white = 2, + /obj/item/cautery/cruel = 1, + /obj/item/clothing/gloves/latex/coroner = 1, /obj/item/clothing/head/utility/surgerycap/black = 1, /obj/item/clothing/mask/surgical = 1, - /obj/item/clothing/under/rank/medical/scrubs/coroner = 1, - /obj/item/clothing/under/rank/medical/coroner = 1, - /obj/item/clothing/under/rank/medical/coroner/skirt = 1, - /obj/item/clothing/suit/toggle/labcoat/coroner = 1, + /obj/item/clothing/shoes/sneakers/black = 1, /obj/item/clothing/suit/apron/surgical = 1, /obj/item/clothing/suit/hooded/wintercoat/medical/coroner = 1, - /obj/item/clothing/gloves/latex/coroner = 1, - /obj/item/clothing/shoes/sneakers/black = 1, + /obj/item/clothing/suit/toggle/labcoat/coroner = 1, + /obj/item/clothing/under/rank/medical/coroner = 1, + /obj/item/clothing/under/rank/medical/coroner/skirt = 1, + /obj/item/clothing/under/rank/medical/scrubs/coroner = 1, + /obj/item/hemostat/cruel = 1, + /obj/item/radio/headset/headset_srvmed = 2, + /obj/item/retractor/cruel = 1, + /obj/item/scalpel/cruel = 1, /obj/item/storage/backpack/coroner = 1, - /obj/item/storage/backpack/satchel/coroner = 1, /obj/item/storage/backpack/duffelbag/coroner = 1, /obj/item/storage/backpack/messenger/coroner = 1, + /obj/item/storage/backpack/satchel/coroner = 1, /obj/item/storage/box/bodybags = 3, - /obj/item/scalpel/cruel = 1, - /obj/item/retractor/cruel = 1, - /obj/item/hemostat/cruel = 1, - /obj/item/cautery/cruel = 1, - /obj/item/toy/crayon/white = 1, - /obj/item/radio/headset/headset_srvmed = 2, + /obj/item/toy/crayon/white = 2, ) contraband = list( /obj/item/knife/ritual = 1, @@ -494,6 +520,7 @@ /obj/item/clothing/shoes/laceup = 2, /obj/item/radio/headset/headset_srv = 2, /obj/item/storage/box/evidence = 2, + /obj/item/fish_feed = 1, ) refill_canister = /obj/item/vending_refill/wardrobe/law_wardrobe payment_department = ACCOUNT_SRV @@ -704,3 +731,6 @@ /obj/item/vending_refill/wardrobe/cent_wardrobe machine_name = "CentDrobe" light_color = LIGHT_COLOR_ELECTRIC_GREEN + +#undef MOTHROACH_START_CHANCE +#undef MAX_MOTHROACH_AMOUNT diff --git a/code/modules/wiremod/components/abstract/module.dm b/code/modules/wiremod/components/abstract/module.dm index ad544354298b2..4dd144b4c80e3 100644 --- a/code/modules/wiremod/components/abstract/module.dm +++ b/code/modules/wiremod/components/abstract/module.dm @@ -190,7 +190,7 @@ )) return ..() -/obj/item/circuit_component/module/proc/handle_set_cell(datum/source, obj/item/stock_parts/cell/cell) +/obj/item/circuit_component/module/proc/handle_set_cell(datum/source, obj/item/stock_parts/power_store/cell/cell) SIGNAL_HANDLER internal_circuit.set_cell(cell) diff --git a/code/modules/wiremod/components/action/speech.dm b/code/modules/wiremod/components/action/speech.dm index 0e2936bcfbfdb..f149cba9122bc 100644 --- a/code/modules/wiremod/components/action/speech.dm +++ b/code/modules/wiremod/components/action/speech.dm @@ -11,6 +11,8 @@ /// The message to send var/datum/port/input/message + /// The quiet mode flag + var/datum/port/input/quietmode /// The cooldown for this component of how often it can send speech messages. var/speech_cooldown = 1 SECONDS @@ -21,6 +23,7 @@ /obj/item/circuit_component/speech/populate_ports() message = add_input_port("Message", PORT_TYPE_STRING, trigger = null) + quietmode = add_input_port("Quiet Mode", PORT_TYPE_NUMBER, default = 0) /obj/item/circuit_component/speech/input_received(datum/port/input/port) if(!parent.shell) @@ -31,5 +34,5 @@ if(message.value) var/atom/movable/shell = parent.shell - shell.say(message.value, forced = "circuit speech | [parent.get_creator()]") + shell.say(message.value, forced = "circuit speech | [parent.get_creator()]", message_range = quietmode.value > 0 ? WHISPER_RANGE : MESSAGE_RANGE) TIMER_COOLDOWN_START(shell, COOLDOWN_CIRCUIT_SPEECH, speech_cooldown) diff --git a/code/modules/wiremod/components/admin/signal_handler/signal_list.dm b/code/modules/wiremod/components/admin/signal_handler/signal_list.dm index 8fbff3dcfaa7c..7d6571484b7f7 100644 --- a/code/modules/wiremod/components/admin/signal_handler/signal_list.dm +++ b/code/modules/wiremod/components/admin/signal_handler/signal_list.dm @@ -41,7 +41,6 @@ GLOBAL_LIST_INIT(integrated_circuit_signal_ids, generate_circuit_signal_list()) COMSIG_ITEM_AFTERATTACK = list(cancel_attack, target, user), COMSIG_ITEM_ATTACK_SECONDARY = list(secondary_cancel_attack, secondary_continue_attack, target, user), COMSIG_ITEM_PRE_ATTACK_SECONDARY = list(secondary_cancel_attack, secondary_continue_attack, target, user), - COMSIG_ITEM_AFTERATTACK_SECONDARY = list(secondary_cancel_attack, secondary_continue_attack, target, user), COMSIG_ITEM_ATTACK_SELF = list(cancel_attack, user), COMSIG_ITEM_ATTACK_SELF_SECONDARY = list(cancel_attack, user), ) diff --git a/code/modules/wiremod/components/atom/health_state.dm b/code/modules/wiremod/components/atom/health_state.dm new file mode 100644 index 0000000000000..dc83a41fdfd8d --- /dev/null +++ b/code/modules/wiremod/components/atom/health_state.dm @@ -0,0 +1,56 @@ +/** + * # Compare Health State Component + * + * Returns true when state matches entity. + */ + +/obj/item/circuit_component/compare/health_state + display_name = "Compare Health State" + desc = "A component that compares the health state of an organism, and returns true or false." + category = "Entity" + + /// The input port + var/datum/port/input/input_port + + /// Compare state option + var/datum/port/input/option/state_option + + var/max_range = 5 + +/obj/item/circuit_component/compare/health_state/get_ui_notices() + . = ..() + . += create_ui_notice("Maximum Range: [max_range] tiles", "orange", "info") + +/obj/item/circuit_component/compare/health_state/populate_options() + input_port = add_input_port("Organism", PORT_TYPE_ATOM) + + var/static/component_options = list( + "Alive", + "Asleep", + "Critical", + "Unconscious", + "Deceased", + ) + state_option = add_option_port("Comparison Option", component_options) + +/obj/item/circuit_component/compare/health_state/do_comparisons() + var/mob/living/organism = input_port.value + var/turf/current_turf = get_location() + if(!istype(organism) || current_turf.z != organism.z || get_dist(current_turf, organism) > max_range) + return FALSE + + var/current_option = state_option.value + var/state = organism.stat + switch(current_option) + if("Alive") + return state != DEAD + if("Asleep") + return !!organism.IsSleeping() && !organism.IsUnconscious() + if("Critical") + return state == SOFT_CRIT || state == HARD_CRIT + if("Unconscious") + return state == UNCONSCIOUS || state == HARD_CRIT || !!organism.IsUnconscious() + if("Deceased") + return state == DEAD + //Unknown state, something fucked up really bad - just return false + return FALSE diff --git a/code/modules/wiremod/components/atom/hear.dm b/code/modules/wiremod/components/atom/hear.dm index 3c3f05691b2d6..98c45a77f6fc2 100644 --- a/code/modules/wiremod/components/atom/hear.dm +++ b/code/modules/wiremod/components/atom/hear.dm @@ -8,6 +8,9 @@ desc = "A component that listens for messages. Requires a shell." category = "Entity" + /// The on/off port + var/datum/port/input/on + /// The message heard var/datum/port/output/message_port /// The language heard @@ -20,6 +23,7 @@ var/datum/port/output/trigger_port /obj/item/circuit_component/hear/populate_ports() + on = add_input_port("On", PORT_TYPE_NUMBER, default = 1) message_port = add_output_port("Message", PORT_TYPE_STRING) language_port = add_output_port("Language", PORT_TYPE_STRING) speaker_port = add_output_port("Speaker", PORT_TYPE_ATOM) @@ -40,6 +44,8 @@ return Hear(arglist(arguments)) /obj/item/circuit_component/hear/Hear(message, atom/movable/speaker, datum/language/message_language, raw_message, radio_freq, list/spans, list/message_mods, message_range) + if(!on.value) + return FALSE if(speaker == parent?.shell) return FALSE diff --git a/code/modules/wiremod/components/atom/remotecam.dm b/code/modules/wiremod/components/atom/remotecam.dm new file mode 100644 index 0000000000000..d5a8506c5cf04 --- /dev/null +++ b/code/modules/wiremod/components/atom/remotecam.dm @@ -0,0 +1,438 @@ +#define REMOTECAM_RANGE_FAR 7 +#define REMOTECAM_RANGE_NEAR 2 +#define REMOTECAM_ENERGY_USAGE_NEAR 0.003 * STANDARD_CELL_CHARGE //Normal components have 0.001 * STANDARD_CELL_CHARGE, this is expensive to livestream footage +#define REMOTECAM_ENERGY_USAGE_FAR 0.008 * STANDARD_CELL_CHARGE //Far range vision should be expensive, crank this up 8 times +#define REMOTECAM_EMP_RESET 90 SECONDS + +/** + * # Remote Camera Component + * + * Attaches a camera for surveillance-on-the-go. + */ +/obj/item/circuit_component/remotecam + display_name = "Camera Abstract Type" + desc = "This is the abstract parent type - do not use this directly!" + category = "Entity" + circuit_flags = CIRCUIT_NO_DUPLICATES + + /// Starts the cameraa + var/datum/port/input/start + /// Stops the program. + var/datum/port/input/stop + /// Camera range flag (near/far) + var/datum/port/input/camera_range + /// The network to use + var/datum/port/input/network + + /// Allow camera range to be set or not + var/camera_range_settable = TRUE + /// Used only for the BCI shell type, as the COMSIG_MOVABLE_MOVED signal need to be assigned to the user mob, not the shell circuit + var/camera_signal_move_override = FALSE + + /// Camera object + var/obj/machinery/camera/shell_camera = null + /// The shell storing the parent circuit + var/atom/movable/shell_parent = null + /// The shell's type (used for prefix naming) + var/camera_prefix = "Camera" + /// Camera random ID + var/c_tag_random = 0 + + /// Used to store the current process state + var/current_camera_state = FALSE + /// Used to store the current cameranet state + var/current_cameranet_state = TRUE + /// Used to store the camera emp state + var/current_camera_emp = FALSE + /// Used to store the camera emp timer id + var/current_camera_emp_timer_id + /// Used to store the last string used for the camera name + var/current_camera_name = "" + /// Used to store the current camera range setting (near/far) + var/current_camera_range = 0 + /// Used to store the last string used for the camera network + var/current_camera_network = "" + +/obj/item/circuit_component/remotecam/get_ui_notices() + . = ..() + if(camera_range_settable) + . += create_ui_notice("Energy Usage For Near (0) Range: [display_energy(REMOTECAM_ENERGY_USAGE_NEAR)] Per [DisplayTimeText(COMP_CLOCK_DELAY)]", "orange", "clock") + . += create_ui_notice("Energy Usage For Far (1) Range: [display_energy(REMOTECAM_ENERGY_USAGE_FAR)] Per [DisplayTimeText(COMP_CLOCK_DELAY)]", "orange", "clock") + else + . += create_ui_notice("Energy Usage While Active: [display_energy(current_camera_range > 0 ? REMOTECAM_ENERGY_USAGE_FAR : REMOTECAM_ENERGY_USAGE_NEAR)] Per [DisplayTimeText(COMP_CLOCK_DELAY)]", "orange", "clock") + +/obj/item/circuit_component/remotecam/populate_ports() + start = add_input_port("Start", PORT_TYPE_SIGNAL) + stop = add_input_port("Stop", PORT_TYPE_SIGNAL) + if(camera_range_settable) + camera_range = add_input_port("Camera Range", PORT_TYPE_NUMBER, default = 0) + network = add_input_port("Network", PORT_TYPE_STRING, default = "ss13") + + if(camera_range_settable) + current_camera_range = camera_range.value + c_tag_random = rand(1, 999) + +/obj/item/circuit_component/remotecam/register_shell(atom/movable/shell) + shell_parent = shell + stop_process() + +/obj/item/circuit_component/remotecam/unregister_shell(atom/movable/shell) + stop_process() + remove_camera() + shell_parent = null + +/obj/item/circuit_component/remotecam/Destroy() + stop_process() + remove_camera() + shell_parent = null + return ..() + +/obj/item/circuit_component/remotecam/input_received(datum/port/input/port) + if(!shell_parent || !shell_camera) + return + update_camera_name_network() + if(COMPONENT_TRIGGERED_BY(start, port)) + start_process() + cameranet_add() + current_camera_state = TRUE + else if(COMPONENT_TRIGGERED_BY(stop, port)) + stop_process() + close_camera() //Instantly turn off the camera + current_camera_state = FALSE + +/** + * Initializes the camera + */ +/obj/item/circuit_component/remotecam/proc/init_camera() + shell_camera.desc = "This camera belongs in a circuit. If you see this, tell a coder!" + shell_camera.AddElement(/datum/element/empprotection, EMP_PROTECT_ALL) + shell_camera.use_power = NO_POWER_USE + shell_camera.start_active = TRUE + shell_camera.internal_light = FALSE + current_camera_name = "" + if(camera_range_settable) + current_camera_range = camera_range.value + current_cameranet_state = TRUE + current_camera_emp = FALSE + current_camera_network = "" + close_camera() + update_camera_range() + update_camera_name_network() + if(current_camera_state) + start_process() + update_camera_location() + else + cameranet_remove() //Remove camera from global cameranet until user activates the camera first + if(!camera_signal_move_override) + RegisterSignal(shell_parent, COMSIG_MOVABLE_MOVED, PROC_REF(update_camera_location)) + RegisterSignal(shell_parent, COMSIG_ATOM_EMP_ACT, PROC_REF(set_camera_emp)) + +/** + * Remove the camera + */ +/obj/item/circuit_component/remotecam/proc/remove_camera() + if(!shell_camera) + return + if(!camera_signal_move_override) + UnregisterSignal(shell_parent, COMSIG_MOVABLE_MOVED) + UnregisterSignal(shell_parent, COMSIG_ATOM_EMP_ACT) + if(current_camera_emp) + deltimer(current_camera_emp_timer_id) + current_camera_emp = FALSE + cameranet_add() //Readd camera to cameranet before deleting camera + QDEL_NULL(shell_camera) + +/** + * Close the camera state (only if it's already active) + */ +/obj/item/circuit_component/remotecam/proc/close_camera() + if(shell_camera?.camera_enabled) + shell_camera.toggle_cam(null, 0) + +/** + * Set the camera range + */ +/obj/item/circuit_component/remotecam/proc/update_camera_range() + shell_camera.setViewRange(current_camera_range > 0 ? REMOTECAM_RANGE_FAR : REMOTECAM_RANGE_NEAR) + +/** + * Updates the camera name and network + */ +/obj/item/circuit_component/remotecam/proc/update_camera_name_network() + if(!parent || !parent.display_name || parent.display_name == "") + shell_camera.c_tag = "[camera_prefix]: unspecified #[c_tag_random]" + current_camera_name = "" + else if(current_camera_name != parent.display_name) + current_camera_name = parent.display_name + var/new_cam_name = reject_bad_name(current_camera_name, allow_numbers = TRUE, ascii_only = FALSE, strict = TRUE, cap_after_symbols = FALSE) + //Set camera name using parent circuit name + if(new_cam_name) + shell_camera.c_tag = "[camera_prefix]: [new_cam_name] #[c_tag_random]" + else + shell_camera.c_tag = "[camera_prefix]: unspecified #[c_tag_random]" + + if(!network.value || network.value == "") + shell_camera.network = list("ss13") + current_camera_network = "" + else if(current_camera_network != network.value) + current_camera_network = network.value + var/new_net_name = LOWER_TEXT(sanitize(current_camera_network)) + //Set camera network string + if(new_net_name) + shell_camera.network = list("[new_net_name]") + else + shell_camera.network = list("ss13") + +/** + * Update the chunk for the camera (if enabled) + */ +/obj/item/circuit_component/remotecam/proc/update_camera_location(atom/old_loc, movement_dir, forced, list/old_locs, momentum_change) + SIGNAL_HANDLER + if(current_camera_state && current_cameranet_state) + GLOB.cameranet.updatePortableCamera(shell_camera, 0.5 SECONDS) + +/** + * Add camera from global cameranet + */ +/obj/item/circuit_component/remotecam/proc/cameranet_add() + if(current_cameranet_state) + return + GLOB.cameranet.cameras += shell_camera + GLOB.cameranet.addCamera(shell_camera) + current_cameranet_state = TRUE + +/** + * Remove camera from global cameranet + */ +/obj/item/circuit_component/remotecam/proc/cameranet_remove() + if(!current_cameranet_state) + return + GLOB.cameranet.removeCamera(shell_camera) + GLOB.cameranet.cameras -= shell_camera + current_cameranet_state = FALSE + +/** + * Set the camera as emp'd + */ +/obj/item/circuit_component/remotecam/proc/set_camera_emp(datum/source, severity, protection) + SIGNAL_HANDLER + if(current_camera_emp) + return + if(!prob(150 / severity)) + return + current_camera_emp = TRUE + close_camera() + current_camera_emp_timer_id = addtimer(CALLBACK(src, PROC_REF(remove_camera_emp)), REMOTECAM_EMP_RESET, TIMER_STOPPABLE) + for(var/mob/M as anything in GLOB.player_list) + if (M.client?.eye == shell_camera) + M.reset_perspective(null) + to_chat(M, span_warning("The screen bursts into static!")) + +/** + * Restore emp'd camera + */ +/obj/item/circuit_component/remotecam/proc/remove_camera_emp() + current_camera_emp = FALSE + +/** + * Adds the component to the SSclock_component process list + * + * Starts draining cell per second while camera is active + */ +/obj/item/circuit_component/remotecam/proc/start_process() + START_PROCESSING(SSclock_component, src) + +/** + * Removes the component to the SSclock_component process list + * + * Stops draining cell per second + */ +/obj/item/circuit_component/remotecam/proc/stop_process() + STOP_PROCESSING(SSclock_component, src) + +/** + * Handle power usage and camera state updating + * + * This is the generic abstract proc - subtypes with specialized logic should use their own copy of process() + */ +/obj/item/circuit_component/remotecam/process(seconds_per_tick) + if(!shell_parent || !shell_camera) + return PROCESS_KILL + //Camera is currently emp'd + if (current_camera_emp) + close_camera() + return + var/obj/item/stock_parts/power_store/cell = parent.get_cell() + //If cell doesn't exist, or we ran out of power + if(!cell?.use(current_camera_range > 0 ? REMOTECAM_ENERGY_USAGE_FAR : REMOTECAM_ENERGY_USAGE_NEAR)) + close_camera() + return + if(camera_range_settable) + //If the camera range has changed, update camera range + if(!camera_range.value != !current_camera_range) + current_camera_range = camera_range.value + update_camera_range() + //Set the camera state (if state has been changed) + if(current_camera_state ^ shell_camera.camera_enabled) + shell_camera.toggle_cam(null, 0) + +/obj/item/circuit_component/remotecam/bci + display_name = "BCI Camera" + desc = "Digitizes user's sight for surveillance-on-the-go. User must have fully functional eyes for digitizer to work. Camera range input is either 0 (near) or 1 (far). Network field is used for camera network." + category = "BCI" + camera_prefix = "BCI" + required_shells = list(/obj/item/organ/internal/cyberimp/bci) + + /// BCIs are organs, and thus the signal must be assigned ONLY when the shell has been installed in a mob - otherwise the camera will never update position + camera_signal_move_override = TRUE + + /// Store the BCI owner as a variable, so we can remove the move signal if the user was gibbed/destroyed while the BCI is still installed + var/mob/living/carbon/bciuser = null + +/obj/item/circuit_component/remotecam/drone + display_name = "Remote Camera" + desc = "Capture the surrounding environment for surveillance-on-the-go. Camera range input is either 0 (near) or 1 (far). Network field is used for camera network." + camera_prefix = "Drone" + +/obj/item/circuit_component/remotecam/airlock + display_name = "Peephole Camera" + desc = "A peephole camera that captures both sides of the airlock. Network field is used for camera network." + camera_prefix = "Airlock" + + /// Hardcode camera to near range + camera_range_settable = FALSE + current_camera_range = 0 + +/obj/item/circuit_component/remotecam/polaroid + display_name = "Camera Stream Add-On" + desc = "Relays a polaroid camera's feed as a digital stream for surveillance-on-the-go. The camera stream will not work if stored inside of a container like a backpack/box. Network field is used for camera network." + camera_prefix = "Polaroid" + + /// Hardcode camera to near range + camera_range_settable = FALSE + current_camera_range = 0 + +/obj/item/circuit_component/remotecam/bci/register_shell(atom/movable/shell) + . = ..() + if(!istype(shell_parent, /obj/item/organ/internal/cyberimp/bci)) + return + shell_camera = new /obj/machinery/camera (shell_parent) + init_camera() + RegisterSignal(shell_parent, COMSIG_ORGAN_IMPLANTED, PROC_REF(on_organ_implanted)) + RegisterSignal(shell_parent, COMSIG_ORGAN_REMOVED, PROC_REF(on_organ_removed)) + var/obj/item/organ/internal/cyberimp/bci/bci = shell_parent + if(bci.owner) //If somehow the camera was added while shell is already installed inside a mob, assign signals + if(bciuser) //This should never happen... But if it does, unassign move signal from old mob + UnregisterSignal(bciuser, COMSIG_MOVABLE_MOVED, PROC_REF(update_camera_location)) + bciuser = bci.owner + RegisterSignal(bciuser, COMSIG_MOVABLE_MOVED, PROC_REF(update_camera_location)) + +/obj/item/circuit_component/remotecam/bci/unregister_shell(atom/movable/shell) + if(shell_camera) + if(bciuser) + UnregisterSignal(bciuser, COMSIG_MOVABLE_MOVED, PROC_REF(update_camera_location)) + bciuser = null + UnregisterSignal(shell_parent, list(COMSIG_ORGAN_IMPLANTED, COMSIG_ORGAN_REMOVED)) + return ..() + +/obj/item/circuit_component/remotecam/bci/Destroy() + if(shell_camera) + if(bciuser) + UnregisterSignal(bciuser, COMSIG_MOVABLE_MOVED, PROC_REF(update_camera_location)) + bciuser = null + UnregisterSignal(shell_parent, list(COMSIG_ORGAN_IMPLANTED, COMSIG_ORGAN_REMOVED)) + return ..() + +/obj/item/circuit_component/remotecam/bci/proc/on_organ_implanted(datum/source, mob/living/carbon/owner) + SIGNAL_HANDLER + if(bciuser) + return + bciuser = owner + RegisterSignal(bciuser, COMSIG_MOVABLE_MOVED, PROC_REF(update_camera_location)) + +/obj/item/circuit_component/remotecam/bci/proc/on_organ_removed(datum/source, mob/living/carbon/owner) + SIGNAL_HANDLER + if(!bciuser) + return + UnregisterSignal(bciuser, COMSIG_MOVABLE_MOVED, PROC_REF(update_camera_location)) + bciuser = null + +/obj/item/circuit_component/remotecam/drone/register_shell(atom/movable/shell) + . = ..() + if(!istype(shell_parent, /mob/living/circuit_drone)) + return + current_camera_state = FALSE //Always reset camera state for built-in shell components + shell_camera = new /obj/machinery/camera (shell_parent) + init_camera() + +/obj/item/circuit_component/remotecam/airlock/register_shell(atom/movable/shell) + . = ..() + if(!istype(shell_parent, /obj/machinery/door/airlock)) + return + current_camera_state = FALSE //Always reset camera state for built-in shell components + shell_camera = new /obj/machinery/camera (shell_parent) + init_camera() + +/obj/item/circuit_component/remotecam/polaroid/register_shell(atom/movable/shell) + . = ..() + if(!istype(shell_parent, /obj/item/camera)) + return + current_camera_state = FALSE //Always reset camera state for built-in shell components + shell_camera = new /obj/machinery/camera (shell_parent) + init_camera() + +/obj/item/circuit_component/remotecam/bci/process(seconds_per_tick) + if(!shell_parent || !shell_camera) + return PROCESS_KILL + //Camera is currently emp'd + if (current_camera_emp) + close_camera() + return + var/obj/item/organ/internal/cyberimp/bci/bci = shell_parent + //If shell is not currently inside a head, or user is currently blind, or user is dead + if(!bci.owner || bci.owner.is_blind() || bci.owner.stat >= UNCONSCIOUS) + close_camera() + return + var/obj/item/stock_parts/power_store/cell = parent.get_cell() + //If cell doesn't exist, or we ran out of power + if(!cell?.use(current_camera_range > 0 ? REMOTECAM_ENERGY_USAGE_FAR : REMOTECAM_ENERGY_USAGE_NEAR)) + close_camera() + return + //If owner is nearsighted, set camera range to short (if it wasn't already) + if(bci.owner.is_nearsighted_currently()) + if(current_camera_range) + current_camera_range = 0 + update_camera_range() + //Else if the camera range has changed, update camera range + else if(!camera_range.value != !current_camera_range) + current_camera_range = camera_range.value + update_camera_range() + //Set the camera state (if state has been changed) + if(current_camera_state ^ shell_camera.camera_enabled) + shell_camera.toggle_cam(null, 0) + +/obj/item/circuit_component/remotecam/polaroid/process(seconds_per_tick) + if(!shell_parent || !shell_camera) + return PROCESS_KILL + //Camera is currently emp'd + if (current_camera_emp) + close_camera() + return + //If camera is stored inside of bag or something, turn it off + if(shell_parent.loc.atom_storage) + close_camera() + return + var/obj/item/stock_parts/power_store/cell = parent.get_cell() + //If cell doesn't exist, or we ran out of power + if(!cell?.use(REMOTECAM_ENERGY_USAGE_NEAR)) + close_camera() + return + //Set the camera state (if state has been changed) + if(current_camera_state ^ shell_camera.camera_enabled) + shell_camera.toggle_cam(null, 0) + +#undef REMOTECAM_RANGE_FAR +#undef REMOTECAM_RANGE_NEAR +#undef REMOTECAM_ENERGY_USAGE_NEAR +#undef REMOTECAM_ENERGY_USAGE_FAR +#undef REMOTECAM_EMP_RESET diff --git a/code/modules/wiremod/components/math/toggle.dm b/code/modules/wiremod/components/math/toggle.dm new file mode 100644 index 0000000000000..9f51c974cb31f --- /dev/null +++ b/code/modules/wiremod/components/math/toggle.dm @@ -0,0 +1,36 @@ +/** + * # Toggle Component + * + * Does a toggle between true and false on trigger + */ +/obj/item/circuit_component/compare/toggle + display_name = "Toggle" + desc = "A component that toggles between on and off when triggered. All input ports (except for set toggle) will trigger the component." + category = "Math" + + /// A signal to reset the toggle back to 0 + var/datum/port/input/toggle_set + /// A signal to toggle and return the current state + var/datum/port/input/toggle_and_compare + + var/toggle_state = FALSE + +/obj/item/circuit_component/compare/toggle/populate_custom_ports() + toggle_set = add_input_port("Set Toggle State", PORT_TYPE_NUMBER) + toggle_and_compare = add_input_port("Toggle And Compare", PORT_TYPE_SIGNAL) + toggle_state = FALSE + +/obj/item/circuit_component/compare/toggle/input_received(datum/port/input/port) + if(port == toggle_set) + toggle_state = !!port.value + return + if(COMPONENT_TRIGGERED_BY(toggle_and_compare, port)) + toggle_state = !toggle_state + if(toggle_state) + true.set_output(COMPONENT_SIGNAL) + else + false.set_output(COMPONENT_SIGNAL) + return ..() + +/obj/item/circuit_component/compare/toggle/do_comparisons() + return toggle_state diff --git a/code/modules/wiremod/components/ntnet/ntnet_send.dm b/code/modules/wiremod/components/ntnet/ntnet_send.dm index 105af11760bc1..7ff4372927f3f 100644 --- a/code/modules/wiremod/components/ntnet/ntnet_send.dm +++ b/code/modules/wiremod/components/ntnet/ntnet_send.dm @@ -27,12 +27,17 @@ data_package = add_input_port("Data Package", PORT_TYPE_LIST(PORT_TYPE_ANY)) enc_key = add_input_port("Encryption Key", PORT_TYPE_STRING) +/obj/item/circuit_component/ntnet_send/should_receive_input(datum/port/input/port) + . = ..() + if(!.) + return FALSE + /// If the server is down, don't use power or attempt to send data + return find_functional_ntnet_relay() + /obj/item/circuit_component/ntnet_send/pre_input_received(datum/port/input/port) if(port == list_options) var/new_datatype = list_options.value data_package.set_datatype(PORT_TYPE_LIST(new_datatype)) /obj/item/circuit_component/ntnet_send/input_received(datum/port/input/port) - if(!find_functional_ntnet_relay()) - return - SEND_GLOBAL_SIGNAL(COMSIG_GLOB_CIRCUIT_NTNET_DATA_SENT, list("data" = data_package.value, "enc_key" = enc_key.value, "port" = WEAKREF(data_package))) + send_ntnet_data(data_package, enc_key.value) diff --git a/code/modules/wiremod/components/ntnet/ntnet_send_literal.dm b/code/modules/wiremod/components/ntnet/ntnet_send_literal.dm new file mode 100644 index 0000000000000..49e1c2b00abe5 --- /dev/null +++ b/code/modules/wiremod/components/ntnet/ntnet_send_literal.dm @@ -0,0 +1,30 @@ +/** + * # NTNet Transmitter List Literal Component + * + * Create a list literal and send a data package through NTNet + * + * This file is based off of ntnet_send.dm + * Any changes made to those files should be copied over with discretion + */ +/obj/item/circuit_component/list_literal/ntnet_send + display_name = "NTNet Transmitter List Literal" + desc = "Creates a list literal data package and sends it through NTNet. If Encryption Key is set then transmitted data will be only picked up by receivers with the same Encryption Key." + category = "NTNet" + + /// Encryption key + var/datum/port/input/enc_key + +/obj/item/circuit_component/list_literal/ntnet_send/populate_ports() + . = ..() + enc_key = add_input_port("Encryption Key", PORT_TYPE_STRING) + +/obj/item/circuit_component/list_literal/ntnet_send/should_receive_input(datum/port/input/port) + . = ..() + if(!.) + return FALSE + /// If the server is down, don't use power or attempt to send data + return find_functional_ntnet_relay() + +/obj/item/circuit_component/list_literal/ntnet_send/input_received(datum/port/input/port) + . = ..() + send_ntnet_data(list_output, enc_key.value) diff --git a/code/modules/wiremod/core/component.dm b/code/modules/wiremod/core/component.dm index 4d8344e1e6aa1..ff0e64cd9a4dc 100644 --- a/code/modules/wiremod/core/component.dm +++ b/code/modules/wiremod/core/component.dm @@ -268,7 +268,7 @@ var/flags = SEND_SIGNAL(parent, COMSIG_CIRCUIT_PRE_POWER_USAGE, energy_usage_per_input) if(!(flags & COMPONENT_OVERRIDE_POWER_USAGE)) - var/obj/item/stock_parts/cell/cell = parent.get_cell() + var/obj/item/stock_parts/power_store/cell = parent.get_cell() if(!cell?.use(energy_usage_per_input)) return FALSE @@ -405,3 +405,14 @@ */ /obj/item/circuit_component/proc/unregister_usb_parent(atom/movable/shell) return + +/** + * Called when a circuit component requests to send Ntnet data signal. + * + * Arguments: + * * port - The required list port needed by the Ntnet receive + * * key - The encryption key + * * signal_type - The signal type used for sending this global signal (optional, default is COMSIG_GLOB_CIRCUIT_NTNET_DATA_SENT) + */ +/obj/item/circuit_component/proc/send_ntnet_data(datum/port/input/port, key, signal_type = COMSIG_GLOB_CIRCUIT_NTNET_DATA_SENT) + SEND_GLOBAL_SIGNAL(signal_type, list("data" = port.value, "enc_key" = key, "port" = WEAKREF(port))) diff --git a/code/modules/wiremod/core/integrated_circuit.dm b/code/modules/wiremod/core/integrated_circuit.dm index 7dde89e511612..f24c5dac6671e 100644 --- a/code/modules/wiremod/core/integrated_circuit.dm +++ b/code/modules/wiremod/core/integrated_circuit.dm @@ -24,7 +24,7 @@ GLOBAL_LIST_EMPTY_TYPED(integrated_circuits, /obj/item/integrated_circuit) var/label_max_length = 24 /// The power of the integrated circuit - var/obj/item/stock_parts/cell/cell + var/obj/item/stock_parts/power_store/cell /// The shell that this circuitboard is attached to. Used by components. var/atom/movable/shell @@ -80,6 +80,9 @@ GLOBAL_LIST_EMPTY_TYPED(integrated_circuits, /obj/item/integrated_circuit) /// The Y position of the screen. Used for adding components. var/screen_y = 0 + /// The grid mode state for the circuit. + var/grid_mode = TRUE + /// The current size of the circuit. var/current_size = 0 @@ -95,7 +98,7 @@ GLOBAL_LIST_EMPTY_TYPED(integrated_circuits, /obj/item/integrated_circuit) /obj/item/integrated_circuit/loaded/Initialize(mapload) . = ..() - set_cell(new /obj/item/stock_parts/cell/high(src)) + set_cell(new /obj/item/stock_parts/power_store/cell/high(src)) /obj/item/integrated_circuit/Destroy() for(var/obj/item/circuit_component/to_delete in attached_components) @@ -129,7 +132,7 @@ GLOBAL_LIST_EMPTY_TYPED(integrated_circuits, /obj/item/integrated_circuit) * Arguments: * * cell_to_set - The new cell of the circuit. Can be null. **/ -/obj/item/integrated_circuit/proc/set_cell(obj/item/stock_parts/cell_to_set) +/obj/item/integrated_circuit/proc/set_cell(obj/item/stock_parts/power_store/cell_to_set) SEND_SIGNAL(src, COMSIG_CIRCUIT_SET_CELL, cell_to_set) cell = cell_to_set @@ -149,7 +152,7 @@ GLOBAL_LIST_EMPTY_TYPED(integrated_circuits, /obj/item/integrated_circuit) add_component_manually(I, user) return - if(istype(I, /obj/item/stock_parts/cell)) + if(istype(I, /obj/item/stock_parts/power_store/cell)) if(cell) balloon_alert(user, "there already is a cell inside!") return @@ -400,6 +403,7 @@ GLOBAL_LIST_EMPTY_TYPED(integrated_circuits, /obj/item/integrated_circuit) .["examined_notices"] = examined?.get_ui_notices() .["examined_rel_x"] = examined_rel_x .["examined_rel_y"] = examined_rel_y + .["grid_mode"] = grid_mode .["is_admin"] = (admin_only || isAdminGhostAI(user)) && check_rights_for(user.client, R_VAREDIT) @@ -577,6 +581,9 @@ GLOBAL_LIST_EMPTY_TYPED(integrated_circuits, /obj/item/integrated_circuit) else set_display_name("") . = TRUE + if("toggle_grid_mode") + toggle_grid_mode() + . = TRUE if("set_examined_component") var/component_id = text2num(params["component_id"]) if(!WITHIN_RANGE(component_id, attached_components)) @@ -709,6 +716,10 @@ GLOBAL_LIST_EMPTY_TYPED(integrated_circuits, /obj/item/integrated_circuit) else shell.name = initial(shell.name) +/// Toggles the grid mode property for this circuit. +/obj/item/integrated_circuit/proc/toggle_grid_mode() + grid_mode = !grid_mode + /** * Returns the creator of the integrated circuit. Used in admin messages and other related things. */ diff --git a/code/modules/wiremod/shell/airlock.dm b/code/modules/wiremod/shell/airlock.dm index 6c5cd11df7d68..165949529c429 100644 --- a/code/modules/wiremod/shell/airlock.dm +++ b/code/modules/wiremod/shell/airlock.dm @@ -16,7 +16,7 @@ . = ..() AddComponent( \ /datum/component/shell, \ - unremovable_circuit_components = list(new /obj/item/circuit_component/airlock, new /obj/item/circuit_component/airlock_access_event), \ + unremovable_circuit_components = list(new /obj/item/circuit_component/airlock, new /obj/item/circuit_component/airlock_access_event, new /obj/item/circuit_component/remotecam/airlock), \ capacity = SHELL_CAPACITY_LARGE, \ shell_flags = SHELL_FLAG_ALLOW_FAILURE_ACTION|SHELL_FLAG_REQUIRE_ANCHOR \ ) diff --git a/code/modules/wiremod/shell/bot.dm b/code/modules/wiremod/shell/bot.dm index 533c654e787fa..3117f13b9f89a 100644 --- a/code/modules/wiremod/shell/bot.dm +++ b/code/modules/wiremod/shell/bot.dm @@ -43,6 +43,6 @@ /obj/item/circuit_component/bot/proc/on_attack_hand(atom/source, mob/user) SIGNAL_HANDLER source.balloon_alert(user, "pushed button") - playsound(source, get_sfx(SFX_TERMINAL_TYPE), 25, FALSE) + playsound(source, SFX_TERMINAL_TYPE, 25, FALSE) entity.set_output(user) signal.set_output(COMPONENT_SIGNAL) diff --git a/code/modules/wiremod/shell/brain_computer_interface.dm b/code/modules/wiremod/shell/brain_computer_interface.dm index 3cd9a3d6bc08f..67a3a41a48828 100644 --- a/code/modules/wiremod/shell/brain_computer_interface.dm +++ b/code/modules/wiremod/shell/brain_computer_interface.dm @@ -256,7 +256,7 @@ return ..() /datum/action/innate/bci_charge_action/Trigger(trigger_flags) - var/obj/item/stock_parts/cell/cell = circuit_component.parent.cell + var/obj/item/stock_parts/power_store/cell/cell = circuit_component.parent.cell if (isnull(cell)) to_chat(owner, span_boldwarning("[circuit_component.parent] has no power cell.")) @@ -269,7 +269,7 @@ /datum/action/innate/bci_charge_action/update_button_status(atom/movable/screen/movable/action_button/button, force = FALSE) . = ..() - var/obj/item/stock_parts/cell/cell = circuit_component.parent.cell + var/obj/item/stock_parts/power_store/cell/cell = circuit_component.parent.cell button.maptext = cell ? MAPTEXT("[cell.percent()]%") : "" /obj/machinery/bci_implanter diff --git a/code/modules/wiremod/shell/compact_remote.dm b/code/modules/wiremod/shell/compact_remote.dm index 3336be06ddbf8..0697a449dbeba 100644 --- a/code/modules/wiremod/shell/compact_remote.dm +++ b/code/modules/wiremod/shell/compact_remote.dm @@ -45,6 +45,6 @@ /obj/item/circuit_component/compact_remote/proc/send_trigger(atom/source, mob/user) SIGNAL_HANDLER source.balloon_alert(user, "clicked primary button") - playsound(source, get_sfx(SFX_TERMINAL_TYPE), 25, FALSE) + playsound(source, SFX_TERMINAL_TYPE, 25, FALSE) entity.set_output(user) signal.set_output(COMPONENT_SIGNAL) diff --git a/code/modules/wiremod/shell/controller.dm b/code/modules/wiremod/shell/controller.dm index b46dad3673f58..126cc8894368f 100644 --- a/code/modules/wiremod/shell/controller.dm +++ b/code/modules/wiremod/shell/controller.dm @@ -53,7 +53,7 @@ /obj/item/circuit_component/controller/proc/handle_trigger(atom/source, user, port_name, datum/port/output/port_signal) source.balloon_alert(user, "clicked [port_name] button") - playsound(source, get_sfx(SFX_TERMINAL_TYPE), 25, FALSE) + playsound(source, SFX_TERMINAL_TYPE, 25, FALSE) entity.set_output(user) port_signal.set_output(COMPONENT_SIGNAL) @@ -81,6 +81,9 @@ */ /obj/item/circuit_component/controller/proc/send_right_signal(atom/source, mob/user) SIGNAL_HANDLER - if(!user.Adjacent(source)) + + if(!user.can_perform_action(source)) return + handle_trigger(source, user, "extra", right) + return CLICK_ACTION_SUCCESS diff --git a/code/modules/wiremod/shell/drone.dm b/code/modules/wiremod/shell/drone.dm index 7d547645cd1ae..d2922274b7dab 100644 --- a/code/modules/wiremod/shell/drone.dm +++ b/code/modules/wiremod/shell/drone.dm @@ -9,14 +9,15 @@ icon_state = "setup_medium_med" maxHealth = 300 health = 300 - living_flags = 0 + living_flags = NONE light_system = OVERLAY_LIGHT_DIRECTIONAL light_on = FALSE /mob/living/circuit_drone/Initialize(mapload) . = ..() AddComponent(/datum/component/shell, list( - new /obj/item/circuit_component/bot_circuit() + new /obj/item/circuit_component/bot_circuit(), + new /obj/item/circuit_component/remotecam/drone() ), SHELL_CAPACITY_LARGE) /mob/living/circuit_drone/examine(mob/user) @@ -110,5 +111,10 @@ if(!direction) return + if(ismovable(shell.loc)) //Inside an object, tell it we moved + var/atom/loc_atom = shell.loc + loc_atom.relaymove(shell, direction) + return + if(shell.Process_Spacemove(direction)) shell.Move(get_step(shell, direction), direction) diff --git a/code/modules/wiremod/shell/gun.dm b/code/modules/wiremod/shell/gun.dm index 9f196e6c1fcce..7115c3b548bee 100644 --- a/code/modules/wiremod/shell/gun.dm +++ b/code/modules/wiremod/shell/gun.dm @@ -9,7 +9,7 @@ icon = 'icons/obj/science/circuits.dmi' icon_state = "setup_gun" ammo_type = list(/obj/item/ammo_casing/energy/wiremod_gun) - cell_type = /obj/item/stock_parts/cell/emproof/wiremod_gun + cell_type = /obj/item/stock_parts/power_store/cell/emproof/wiremod_gun item_flags = NONE light_system = OVERLAY_LIGHT_DIRECTIONAL light_on = FALSE @@ -29,8 +29,8 @@ damage = 0 range = 7 -/obj/item/stock_parts/cell/emproof/wiremod_gun - maxcharge = 100 +/obj/item/stock_parts/power_store/cell/emproof/wiremod_gun + maxcharge = 0.1 * STANDARD_CELL_CHARGE /obj/item/gun/energy/wiremod_gun/Initialize(mapload) . = ..() @@ -68,7 +68,7 @@ /obj/item/circuit_component/wiremod_gun/proc/handle_shot(atom/source, mob/firer, atom/target, angle) SIGNAL_HANDLER - playsound(source, get_sfx(SFX_TERMINAL_TYPE), 25, FALSE) + playsound(source, SFX_TERMINAL_TYPE, 25, FALSE) shooter.set_output(firer) shot.set_output(target) signal.set_output(COMPONENT_SIGNAL) diff --git a/code/modules/wiremod/shell/module.dm b/code/modules/wiremod/shell/module.dm index 9061bac3e300e..14092f5d2c83c 100644 --- a/code/modules/wiremod/shell/module.dm +++ b/code/modules/wiremod/shell/module.dm @@ -271,7 +271,7 @@ SIGNAL_HANDLER var/string_list = list() var/is_deployed = TRUE - for(var/obj/item/part as anything in attached_module.mod.mod_parts) + for(var/obj/item/part as anything in attached_module.mod.get_parts()) if(part.loc == attached_module.mod) is_deployed = FALSE else diff --git a/code/modules/wiremod/shell/scanner.dm b/code/modules/wiremod/shell/scanner.dm index c88d7b1fb5f97..f32f91fa76f2e 100644 --- a/code/modules/wiremod/shell/scanner.dm +++ b/code/modules/wiremod/shell/scanner.dm @@ -41,22 +41,19 @@ signal = add_output_port("Scanned", PORT_TYPE_SIGNAL) /obj/item/circuit_component/wiremod_scanner/register_shell(atom/movable/shell) - RegisterSignal(shell, COMSIG_ITEM_AFTERATTACK, PROC_REF(handle_afterattack)) + RegisterSignal(shell, COMSIG_ITEM_INTERACTING_WITH_ATOM, PROC_REF(handle_interaction)) /obj/item/circuit_component/wiremod_scanner/unregister_shell(atom/movable/shell) - UnregisterSignal(shell, COMSIG_ITEM_AFTERATTACK) + UnregisterSignal(shell, COMSIG_ITEM_INTERACTING_WITH_ATOM) /** * Called when the shell item attacks something */ -/obj/item/circuit_component/wiremod_scanner/proc/handle_afterattack(atom/source, atom/target, mob/user, proximity_flag) +/obj/item/circuit_component/wiremod_scanner/proc/handle_interaction(atom/source, mob/user, atom/target, ...) SIGNAL_HANDLER - if(!proximity_flag) - return source.balloon_alert(user, "scanned object") - playsound(source, get_sfx(SFX_TERMINAL_TYPE), 25, FALSE) + playsound(source, SFX_TERMINAL_TYPE, 25, FALSE) attacker.set_output(user) attacking.set_output(target) signal.set_output(COMPONENT_SIGNAL) - return COMPONENT_AFTERATTACK_PROCESSED_ITEM - + return ITEM_INTERACT_SUCCESS diff --git a/code/modules/zombie/items.dm b/code/modules/zombie/items.dm index 1d5caf8e9093b..14dc6edee1118 100644 --- a/code/modules/zombie/items.dm +++ b/code/modules/zombie/items.dm @@ -11,16 +11,11 @@ bare_wound_bonus = 15 sharpness = SHARP_EDGED -/obj/item/mutant_hand/zombie/afterattack(atom/target, mob/living/user, proximity_flag) - . = ..() - if(!proximity_flag) - return +/obj/item/mutant_hand/zombie/afterattack(atom/target, mob/user, click_parameters) + if(ishuman(target)) + try_to_zombie_infect(target, user, user.zone_selected) else if(isliving(target)) - if(ishuman(target)) - try_to_zombie_infect(target, user, user.zone_selected) - else - . |= AFTERATTACK_PROCESSED_ITEM - check_feast(target, user) + check_feast(target, user) /proc/try_to_zombie_infect(mob/living/carbon/human/target, mob/living/user, def_zone = BODY_ZONE_CHEST) CHECK_DNA_AND_SPECIES(target) diff --git a/code/world.dm b/code/world.dm index 8b1cdbf1fe496..7cc35e5529ad8 100644 --- a/code/world.dm +++ b/code/world.dm @@ -17,6 +17,7 @@ hub_password = "kMZy3U5jJHSiBQjr" name = "/tg/ Station 13" fps = 20 + cache_lifespan = 0 map_format = SIDE_MAP #ifdef FIND_REF_NO_CHECK_TICK loop_checks = FALSE diff --git a/config/config.txt b/config/config.txt index 1c87fc110ae9a..6252c3bae659e 100644 --- a/config/config.txt +++ b/config/config.txt @@ -143,16 +143,26 @@ GUEST_BAN ## IPINTEL: ## This allows you to detect likely proxies by checking ips against getipintel.net -## Rating to warn at: (0.9 is good, 1 is 100% likely to be a spammer/proxy, 0.8 is 80%, etc) anything equal to or higher then this number triggers an admin warning -#IPINTEL_RATING_BAD 0.9 +## Rating to warn at: (0.8 is good, 1 is 100% likely to be a spammer/proxy, 0.8 is 80%, etc) anything equal to or higher then this number triggers an admin warning +#IPINTEL_RATING_BAD 0.8 ## Contact email, (required to use the service, leaving blank or default disables IPINTEL) #IPINTEL_EMAIL ch@nge.me -## How long to save good matches (ipintel rate limits to 15 per minute and 500 per day. so this shouldn't be too low, getipintel.net suggests 6 hours, time is in hours) (Your ip will get banned if you go over 500 a day too many times) -#IPINTEL_SAVE_GOOD 12 -## How long to save bad matches (these numbers can change as ips change hands, best not to save these for too long in case somebody gets a new ip used by a spammer/proxy before.) -#IPINTEL_SAVE_BAD 3 -## Domain name to query (leave commented out for the default, only needed if you pay getipintel.net for more querys) -#IPINTEL_DOMAIN check.getipintel.net +## Query base, if you pay for more queries this is what you want to change. +#IPINTEL_BASE check.getipintel.net +## Maximum number of queries in a minute +#IPINTEL_MAX_QUERY_MINUTE 15 +## Maximum number of queries in a day +#IPINTEL_MAX_QUERY_DAY 500 +## Whether clients which cannot be checked due to a rate limit will be denied +#IPINTEL_REJECT_RATE_LIMITED +## Whether clients which are flagged as a VPN will be denied +IPINTEL_REJECT_BAD +## Whether clients which cannot be checked due to an error of some form will be denied +#IPINTEL_REJECT_UNKNOWN +## How long to store results in the cache before they must be retrieved again. IN DAYS. +#IPINTEL_CACHE_LENGTH 7 +## How many minutes of living playtime to be automatically exempt from IPIntel. 0 for never. +#IPINTEL_EXEMPT_PLAYTIME_LIVING 0 ## Uncomment to allow web client connections #ALLOW_WEBCLIENT @@ -368,14 +378,14 @@ AUTOADMIN_RANK Game Master ## These trigger for any version below (non-inclusive) the given version, so 510 triggers on 509 or lower. ## These messages will be followed by one stating the clients current version and the required version for clarity. ## If CLIENT_WARN_POPUP is uncommented a popup window with the message will be displayed instead -#CLIENT_WARN_VERSION 511 -#CLIENT_WARN_BUILD 1421 +#CLIENT_WARN_VERSION 515 +#CLIENT_WARN_BUILD 1635 #CLIENT_WARN_POPUP -#CLIENT_WARN_MESSAGE Byond released 511 as the stable release. You can set the framerate your client runs at, which makes the game feel very different and cool. Shortly after its release we will end up using 511 client features and you will be forced to update. -CLIENT_ERROR_VERSION 511 +#CLIENT_WARN_MESSAGE Byond released 515 as the stable release. This comes bundled with a host of niceties, including image generation for UIs and :: operators. +CLIENT_ERROR_VERSION 515 CLIENT_ERROR_MESSAGE Your version of byond is not supported. Please upgrade. -## The minimum build needed for joining the server, if using 512, a good minimum build would be 1421 as that disables the Middle Mouse Button exploit. -CLIENT_ERROR_BUILD 1421 +## The minimum build needed for joining the server. +CLIENT_ERROR_BUILD 1590 ## TOPIC RATE LIMITING ## This allows you to limit how many topic calls (clicking on an interface window) the client can do in any given game second and/or game minute. @@ -472,6 +482,9 @@ DEFAULT_VIEW_SQUARE 15x15 ## Enable automatic profiling - Byond 513.1506 and newer only. #AUTO_PROFILE +## Determines the interval between each saved profiler snapshot (in deciseconds). +#PROFILER_INTERVAL 3000 + ## Threshold (in deciseconds) for real time between ticks before we start dumping profiles DRIFT_DUMP_THRESHOLD 40 diff --git a/config/dynamic.json b/config/dynamic.json index a4a1eb7ebdbfb..569f015d7313c 100644 --- a/config/dynamic.json +++ b/config/dynamic.json @@ -117,10 +117,6 @@ "weight": 0 }, - "Sentient Disease": { - "weight": 0 - }, - "Space Pirates": { "weight": 0 }, @@ -158,6 +154,8 @@ "Station": { "Radioactive Nebula": { + }, + "Background Checks": { } } } diff --git a/config/game_options.txt b/config/game_options.txt index f6d321c1b8e13..2979648126dde 100644 --- a/config/game_options.txt +++ b/config/game_options.txt @@ -147,6 +147,13 @@ EVENTS_MIN_TIME_MUL 1 ## Set to 0 to make dangerous events avaliable for all populations. EVENTS_MIN_PLAYERS_MUL 1 +## The lower bound, in deciseconds, for how soon another random event can be scheduled. +## Defaults to 1500 deciseconds or 2.5 minutes +EVENTS_FREQUENCY_LOWER 1500 + +## The upper bound, in deciseconds, for how soon another random event can be scheduled. +## Defaults to 4200 deciseconds or 7 minutes +EVENTS_FREQUENCY_UPPER 4200 ## AI ### @@ -265,6 +272,7 @@ RANDOM_LAWS corporate #RANDOM_LAWS reporter #RANDOM_LAWS hulkamania #RANDOM_LAWS ten_commandments +#RANDOM_LAWS yesman ## Bad idea laws. Probably shouldn't enable these #RANDOM_LAWS syndie diff --git a/config/lavaruinblacklist.txt b/config/lavaruinblacklist.txt index fd0c0d85c64af..fe4cbc86e1ef4 100644 --- a/config/lavaruinblacklist.txt +++ b/config/lavaruinblacklist.txt @@ -35,6 +35,7 @@ #_maps/RandomRuins/LavaRuins/lavaland_surface_mookvillage.dmm #_maps/RandomRuins/LavaRuins/lavaland_surface_phonebooth.dmm #_maps/RandomRuins/LavaRuins/lavaland_surface_pizzaparty.dmm +#_maps/RandomRuins/LavaRuins/lavaland_surface_shuttle_wreckage.dmm #_maps/RandomRuins/LavaRuins/lavaland_surface_survivalpod.dmm #_maps/RandomRuins/LavaRuins/lavaland_surface_tomb.dmm #_maps/RandomRuins/LavaRuins/lavaland_surface_ufo_crash.dmm @@ -42,3 +43,4 @@ #_maps/RandomRuins/LavaRuins/lavaland_surface_ww_vault.dmm #_maps/RandomRuins/LavaRuins/lavaland_surface_wwiioutpost.dmm #_maps/RandomRuins/LavaRuins/lavaland_surface_xeno_nest.dmm + diff --git a/config/maps.txt b/config/maps.txt index bc5373ce3548e..fecc6bd395b24 100644 --- a/config/maps.txt +++ b/config/maps.txt @@ -47,6 +47,11 @@ map tramstation votable endmap +map wawastation + votable + minplayers 40 +endmap + # Debug-only maps. map gateway_test diff --git a/config/spaceruinblacklist.txt b/config/spaceruinblacklist.txt index dcff6527bae80..c33d85b54abc9 100644 --- a/config/spaceruinblacklist.txt +++ b/config/spaceruinblacklist.txt @@ -14,7 +14,6 @@ #_maps/RandomRuins/SpaceRuins/asteroid5.dmm #_maps/RandomRuins/SpaceRuins/asteroid6.dmm #_maps/RandomRuins/SpaceRuins/atmosasteroidruin.dmm -#_maps/RandomRuins/SpaceRuins/atmosasteroidruin.dmm #_maps/RandomRuins/SpaceRuins/bigderelict1.dmm #_maps/RandomRuins/SpaceRuins/botanical_haven.dmm #_maps/RandomRuins/SpaceRuins/bus.dmm @@ -23,7 +22,7 @@ #_maps/RandomRuins/SpaceRuins/clownplanet.dmm #_maps/RandomRuins/SpaceRuins/crashedclownship.dmm #_maps/RandomRuins/SpaceRuins/crashedship.dmm -#_maps/RandomRuins/SpaceRuins/dangerous_research.dmm +#_maps/RandomRuins/SpaceRuins/cyborg_mothership.dmm #_maps/RandomRuins/SpaceRuins/dangerous_research.dmm #_maps/RandomRuins/SpaceRuins/deepstorage.dmm #_maps/RandomRuins/SpaceRuins/derelict_construction.dmm @@ -40,23 +39,22 @@ #_maps/RandomRuins/SpaceRuins/emptyshell.dmm #_maps/RandomRuins/SpaceRuins/fasttravel.dmm #_maps/RandomRuins/SpaceRuins/forgottenship.dmm -#_maps/RandomRuins/SpaceRuins/forgottenship.dmm #_maps/RandomRuins/SpaceRuins/garbagetruck1.dmm #_maps/RandomRuins/SpaceRuins/garbagetruck2.dmm #_maps/RandomRuins/SpaceRuins/garbagetruck3.dmm #_maps/RandomRuins/SpaceRuins/garbagetruck4.dmm #_maps/RandomRuins/SpaceRuins/gondolaasteroid.dmm #_maps/RandomRuins/SpaceRuins/hellfactory.dmm -#_maps/RandomRuins/SpaceRuins/hellfactory.dmm -#_maps/RandomRuins/SpaceRuins/hilbertshoteltestingsite.dmm +#_maps/RandomRuins/SpaceRuins/hilbertsresearchfacility.dmm #_maps/RandomRuins/SpaceRuins/infested_frigate.dmm #_maps/RandomRuins/SpaceRuins/intactemptyship.dmm #_maps/RandomRuins/SpaceRuins/interdyne.dmm #_maps/RandomRuins/SpaceRuins/listeningstation.dmm +#_maps/RandomRuins/SpaceRuins/meatderelict.dmm #_maps/RandomRuins/SpaceRuins/meateor.dmm #_maps/RandomRuins/SpaceRuins/mechtransport.dmm #_maps/RandomRuins/SpaceRuins/mimesvsclowns.dmm -#_maps/RandomRuins/SpaceRuins/mrow_thats_right +#_maps/RandomRuins/SpaceRuins/mrow_thats_right.dmm #_maps/RandomRuins/SpaceRuins/old_infiltrator.dmm #_maps/RandomRuins/SpaceRuins/oldAIsat.dmm #_maps/RandomRuins/SpaceRuins/oldstation.dmm @@ -66,23 +64,18 @@ #_maps/RandomRuins/SpaceRuins/phonebooth.dmm #_maps/RandomRuins/SpaceRuins/pod_crash.dmm #_maps/RandomRuins/SpaceRuins/prey_pod.dmm -#_maps/RandomRuins/SpaceRuins/prey_pod.dmm #_maps/RandomRuins/SpaceRuins/prison_shuttle.dmm #_maps/RandomRuins/SpaceRuins/russian_derelict.dmm #_maps/RandomRuins/SpaceRuins/shuttlerelic.dmm #_maps/RandomRuins/SpaceRuins/space_billboard.dmm -#_maps/RandomRuins/SpaceRuins/space_billboard.dmm #_maps/RandomRuins/SpaceRuins/space_ghost_restaurant.dmm #_maps/RandomRuins/SpaceRuins/spacehotel.dmm #_maps/RandomRuins/SpaceRuins/spinwardsmoothies.dmm -#_maps/RandomRuins/SpaceRuins/spinwardsmoothies.dmm -#_maps/RandomRuins/SpaceRuins/the_faceoff.dmm #_maps/RandomRuins/SpaceRuins/the_faceoff.dmm #_maps/RandomRuins/SpaceRuins/the_outlet.dmm #_maps/RandomRuins/SpaceRuins/thelizardsgas.dmm #_maps/RandomRuins/SpaceRuins/transit_booth.dmm #_maps/RandomRuins/SpaceRuins/travelers_rest.dmm -#_maps/RandomRuins/SpaceRuins/travelers_rest.dmm #_maps/RandomRuins/SpaceRuins/turretedoutpost.dmm #_maps/RandomRuins/SpaceRuins/vaporwave.dmm #_maps/RandomRuins/SpaceRuins/way_home.dmm diff --git a/cutter_templates/bitmask/restore.toml b/cutter_templates/bitmask/restore.toml new file mode 100644 index 0000000000000..066354eedc606 --- /dev/null +++ b/cutter_templates/bitmask/restore.toml @@ -0,0 +1,20 @@ +# Bitmask restoration! +# Allows for easy mass extraction of template pngs and their configs from a dmi +# Use this if you have a dmi and you want a cutter config you can edit easily +# Of note, while it tries its best it is nowhere near perfect. We don't parity check against the existing dmi +# And we also do not account for overrided states very well +# Always double check (and be aware that dmi is weird so you may get diffs of 1 rgb value when doin this) +mode = "BitmaskSliceReconstruct" +# List of icon states to pull out (by default) +extract = ["0", "3", "12", "15", "255"] + +# Map of name -> state that will be encoded into a positions list later +# Lets you extract particular states and use them to fill in for states later +# Useful to carry over odd snowflake states +#[bespoke] + +# Map of key -> value to set on the created config +# Lets you set arbitrary values on the created config, mostly useful for batch processing +# IMPORTANT NOTE: We sort of assume you'll setup a default template here (since this is for batch processing), +# so if things work odd that's likely why +#[set] diff --git a/dependencies.sh b/dependencies.sh index 087c337a0461f..a15d39ef31f4c 100644 --- a/dependencies.sh +++ b/dependencies.sh @@ -5,14 +5,15 @@ # byond version export BYOND_MAJOR=515 -export BYOND_MINOR=1633 +export BYOND_MINOR=1637 #rust_g git tag -export RUST_G_VERSION=3.1.0 +export RUST_G_VERSION=3.3.0 #node version -export NODE_VERSION=20 -export NODE_VERSION_LTS=20.12.0 +export NODE_VERSION_LTS=20.13.0 +# compatiblility mode MUST work with windows 7 +export NODE_VERSION_COMPAT=20.2.0 # SpacemanDMM git tag export SPACEMAN_DMM_VERSION=suite-1.8 @@ -27,7 +28,7 @@ export AUXLUA_REPO=tgstation/auxlua export AUXLUA_VERSION=1.4.4 #hypnagogic repo -export CUTTER_REPO=actioninja/hypnagogic +export CUTTER_REPO=spacestation13/hypnagogic #hypnagogic git tag -export CUTTER_VERSION=v3.0.1 +export CUTTER_VERSION=v3.1.0 diff --git a/html/changelogs/AutoChangeLog-pr-82732.yml b/html/changelogs/AutoChangeLog-pr-82732.yml deleted file mode 100644 index 8e03debbfc081..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-82732.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Momo8289" -delete-after: True -changes: - - rscadd: "The crew monitor now has sorting options and a search bar." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-82824.yml b/html/changelogs/AutoChangeLog-pr-82824.yml deleted file mode 100644 index 38d01cac37b6a..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-82824.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "necromanceranne" -delete-after: True -changes: - - balance: "Longfall modules no logner stun you when they activate." - - balance: "Falling from a height greater than one z-level while using the longfall module will still stagger you." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-84502.yml b/html/changelogs/AutoChangeLog-pr-84502.yml new file mode 100644 index 0000000000000..ba6ec25bf22c4 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-84502.yml @@ -0,0 +1,5 @@ +author: "MTandi" +delete-after: True +changes: + - bugfix: "Techweb: Moved upgraded cyber organs to tier 3 from tier 4" + - qol: "Techweb: Added fully augmented android scan discount experiment for Advanced Cybernetic Organs techweb node" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-84516.yml b/html/changelogs/AutoChangeLog-pr-84516.yml new file mode 100644 index 0000000000000..88db7528a4d82 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-84516.yml @@ -0,0 +1,4 @@ +author: "MTandi" +delete-after: True +changes: + - qol: "Data disks are now printed in lathes instead of circuit imprinter" \ No newline at end of file diff --git a/html/changelogs/archive/2024-04.yml b/html/changelogs/archive/2024-04.yml index 53106bf1f9188..9677f61ec718a 100644 --- a/html/changelogs/archive/2024-04.yml +++ b/html/changelogs/archive/2024-04.yml @@ -795,3 +795,117 @@ - rscadd: Adds military spear, shortsword, boarding axe, kite shields - rscadd: Adds warlord and crude armor - rscadd: Adds medieval shuttle (made by striders18) +2024-04-25: + Fikou: + - bugfix: brimbeams no longer make a cog appear above the mob + - bugfix: you can no longer take off someones glasses or mask through atmos hardhat + - bugfix: once you adjust a welding helmet or something it no longer makes your + cigarette or sunglasses invisible + - bugfix: welding gas mask works once again + - bugfix: quick equips dont drop the item if you cant equip it + Momo8289: + - rscadd: The crew monitor now has sorting options and a search bar. + grungussuss: + - rscadd: whistle emote + - refactor: Refactored how laugh, sneeze, cough and cry sound is called in the code, + report strange behavior with these emotes. + - sound: added sounds for whistle, cry, cough, sneeze, laugh for moths and lizards + emotes + necromanceranne: + - balance: Longfall modules no logner stun you when they activate. + - balance: Falling from a height greater than one z-level while using the longfall + module will still stagger you. +2024-04-26: + Ben10Omintrix: + - bugfix: all bots have their normal accesses restored + Bisar: + - bugfix: AI controlled monkeys are no longer catatonic, and they have primal eyes + again when turned into humans. + - spellcheck: Noticable organs now have more modular grammar, and their current + grammar is fixed. + - refactor: Refactored the code for displaying the messages for noticable organs. + - config: Added a documented define of all our pronouns + KingkumaArt: + - bugfix: The rebar crossbows now properly loosen their bowstring upon firing. + LT3: + - balance: ChemMaster can again print a maximum of 50 pills/patches per run + - balance: Higher tier servos increase ChemMaster printing speed + Singul0: + - bugfix: fixed cyborg bonesetter not working for compound fractures + - bugfix: butchering not disabling in cyborg omnitool + - bugfix: fixes a bug where if you select the omnitool it would be stuck in surgery + initiator mode + - bugfix: cautery in off hand for cyborg omnitools not working + jlsnow301: + - bugfix: Restored silicon alt-clicking capability + necromanceranne: + - bugfix: The plasma flower modsuit core now actually contains a reasonable quantity + of power. +2024-04-27: + Maurukas: + - bugfix: Removed a power loop on icebox + - bugfix: Disconnected aux power smes from icebox grid at roundstart + - bugfix: Removed some power cables connecting Deltastation's aux power + - bugfix: Fixed tramstation's gravity generator SMES, now functions and charged + at roundstart. + - bugfix: NorthStar's gravity generator SMES is now properly charged at roundstart + ZephyrTFA: + - admin: The return of IPIntel + grungussuss: + - bugfix: fixed being able to install multiple of the same upgrade to medical cyborgs +2024-04-28: + Ben10Omintrix: + - bugfix: fixes mobs getting stuck trying to reach something unreachable + EnterTheJake: + - bugfix: Spraycan no longer spams your chat when you mouse over it. + Melbert: + - bugfix: Midround malf can roll again + Rhials: + - bugfix: Overwatch Intelligence Agents no longer get their own uplinks, leading + to a self-replicating grey goo scenario. + jlsnow301: + - bugfix: Fixes clipping in the ESC menu between buttons and long station names. +2024-04-29: + 13spacemen: + - bugfix: All alert polls ignore option works + - code_imp: Unarmed attacks (punches, etc.) now support multiple attack verbs instead + of only one + EnterTheJake: + - image: The Infiltrator Suit has received a new model, sleeker than ever! + FlufflesTheDog: + - bugfix: minebot shields are now actually orderable + - bugfix: vinegar may once again be crafted with wine, water, and sugar + JohnFulpWillard: + - bugfix: Examining someone with Med/Sec HUDs will no longer filter the message + under Radio. + - bugfix: pAI requests should no longer randomly permanently break in a round. + Melbert: + - bugfix: Plasma cutters work again + Metekillot: + - bugfix: Mech domination now properly integrates with shunting. + - bugfix: Combat upgraded AIs no longer get two buggy malf ability pickers if they + also become malfunctioning + - refactor: Refactored most of the functionality around malf AI shunting, mech control + Rhials: + - admin: Lazy loading map templates now gives you the option to not ghost/teleport + to the loaded area upon completion. + Sadboysuss: + - admin: spy can now be rolebanned + VexingRaven: + - bugfix: The debug box no longer spills its contents everywhere + improvedname: + - qol: Arrivals shuttle is now more player friendly + san7890: + - admin: Possess Object is now back in the right-click context menu. +2024-04-30: + Jacquerel: + - balance: Netguardian Prime can see in the dark. + - image: You can see Netguardian Prime in the dark. + SyncIt21: + - bugfix: Eigenstasium exposed & Anomaly station trait affected closets work again. + Eigenstasium closets are tainted blue + YesterdaysPromise: + - bugfix: The start-of-the-round tips will no longer feature virologists, but will, + however, start featuring heretics and coroners. + intercepti0n: + - rscadd: Added a short scene when getting an Ordeal of Sisyphus achievement. diff --git a/html/changelogs/archive/2024-05.yml b/html/changelogs/archive/2024-05.yml new file mode 100644 index 0000000000000..899638d18431d --- /dev/null +++ b/html/changelogs/archive/2024-05.yml @@ -0,0 +1,842 @@ +2024-05-01: + 13spacemen: + - bugfix: Ethereal unarmed attacks "sear" instead of "singe", which was buggy + Constellado: + - qol: Made birdshot atmos easier to use. + - bugfix: The Birdshot engineering department is no longer using a second hand broken + microwave. + Fikou: + - rscadd: you can use a photo with blueprints on it to read wires + Flleeppyy, Absolucy: + - sound: Added unique announcement jingles to each heretic path's ascension, replacing + the old "space-time anomalies detected" announcement. + JohnFulpWillard: + - bugfix: Genetic sequence scanners now show the sequence to mutated genes from + scanned individuals. + - bugfix: QM is now excluded from getting tasked with stealing telescopic batons + and the captain's spare ID, like all other command personnel are. + - qol: The Human AI's advanced security console can be repackaged with a screwdriver + if you wish to move it. + LT3: + - qol: The various RCD upgrade disks no longer look identical + Maurukas: + - bugfix: On examine PDAs will now inform players that the power cell can be removed + for recharging or replacement, and how to do so. + SyncIt21: + - bugfix: computers don't deconstruct themselves twice so machines like slotmachine + don't spawn excess chips upon deconstruction + improvedname: + - bugfix: Fixes tramstation gravgen wiring + - bugfix: Fixes tramstation turbine wiring + - bugfix: Fixes northstar cmo button name + jlsnow301: + - bugfix: Fixes a bluescreen in the deathmatch lobby UI. + larentoun: + - bugfix: Infinite-range laser pointer (for "AI" Big Brother) now has a correct + diode. If you accidentaly remove it then you can put it back! + mc-oofert: + - rscadd: trainship hijack deathmatch map + necromanceranne: + - bugfix: If you are a freerunner, you don't end up faceplanting despite having + catlike grace. +2024-05-02: + Echriser: + - qol: conveyor switches now have direction-specific input signals + Fluffles: + - qol: you can pick up wheelchairs while on the ground + - qol: you can place wheelchairs a tile away from you, like roller beds + JohnFulpWillard: + - bugfix: Monkey changelings that are disguised as someone can now take off their + flesh clothes. + - bugfix: You can now re-construct pod doors that had deconstruction started. + - qol: You can now make pod door assemblies using plasteel in-hand. + - bugfix: Monkeys can no longer be knocked over by walking into a windoor on combat + mode while they're behind it. + - admin: Debug uplinks now shows all categories and won't lock upon buying items + like his grace and the syndicate balloon. + - bugfix: Constantly fleeing in Battle Arcade will no longer give you a very large + amount of decimals due to halving your gold every time. + - bugfix: AIs can now track Silicon as long as their built-in camera is online. + Melbert: + - admin: Custom Single and Custom Multi votes are now combined into one vote + - admin: Admins can now end votes instantly, rather than cancelling them + - admin: Admins can now reset the vote cooldown + - bugfix: Vote cooldown actually applies now + Pickle-Coding: + - bugfix: Fixes hypercharged slime core cells and circuit guns having 1,000 times + less energy than intended. + Watermelon914: + - bugfix: Fixed the ipintel subsystem not working. + kawoppi: + - bugfix: the civilian bounty control terminal displays the payout of new bounty + options again + - qol: the civilian bounty control terminal displays the description of new bounty + options + nikothedude: + - bugfix: Jousting no longer bypasses pacifism +2024-05-03: + Echriser: + - qol: conveyors now use left and right click controls + - qol: add screentips for conveyor switches + - rscdel: removes circuit conveyor circuit default trigger behavior in favor in + favor of the three state triggers + Gaxeer: + - bugfix: fix runtime when no events were drafted to be picked from + - config: make events frequency configurable + StrangeWeirdKitten: + - qol: You can now quickly stamp papers with a right click + Zenog400: + - rscadd: increased the size of the pool that Machine Blessing draws from + - balance: weighted some of the implants that Machine Blessing can give + mc-oofert: + - image: added directional sprites for radiation shutters +2024-05-04: + Ben10Omintrix: + - bugfix: mobs in the same faction will no longer be at odds against one another + - bugfix: mobs can now perform behaviors alongside searching for targets + - bugfix: mobs will no longer be starting and stopping when chasing targets + Ghommie: + - rscadd: Adds an Icebox-specific station trait that brightens outdoors areas on + the surface level. + Ikalpo: + - bugfix: Stage 2 singularities should no longer escape containment + Melbert: + - bugfix: New machine god blessings now actually works probably + Profakos: + - balance: Bitrunners can now earn Bepis disks, once per medium domain or above, + if they scored at least an A. + - rscdel: Bitrunners can not buy Bepis disks from their vendors. + Ryll/Shaps: + - bugfix: Pacifists can no longer endlessly spam the backblast functionality of + loaded rocket launchers that they cannot actually fire + Watermelon914: + - bugfix: Fixed lua scripts breaking when turfs with registered signals get deleted. + Xander3359: + - bugfix: You can no longer bypass construction restrictions via the crafting menu + cnleth: + - bugfix: Fire ant colonies created by burning regular ants will now contain fire + ants as their reagent + jlsnow301: + - bugfix: Candy corn is once again available to detective fedoras + mogeoko: + - bugfix: Ventcrawling mobs can change Z-level using multiz-decks again. +2024-05-05: + Isratosh: + - bugfix: If kidnapped and ransomed by pirates, you will now properly return to + the station automatically after 6 minutes. + - bugfix: You can no longer be kidnapped and held for ransom by cargo technicians + posing as pirates. + Jacquerel: + - bugfix: Blood Brothers should spawn knowing what their objectives are. + - bugfix: Teams of 3 Blood Brothers will once more have an additional objective. + Melbert: + - refactor: Random Name Generation has been refactored. Report any instances of + people having weird (or "Unknown") names. + - qol: Felinids, Slimepeople, Podpeople, and some other species without defined + namelists now automatically generate names based on their primary language(s). + - qol: More non-human names can be generated in codewords (and other misc. areas) + than just lizard names. + larentoun: + - bugfix: Materials are now correctly applied to crafted items (chairs, toilets, + etc) +2024-05-06: + improvedname: + - bugfix: fixes traditional equipment crate name + paganiy: + - qol: Admin modsuit now has a radiation protect module +2024-05-07: + CandleJaxx: + - rscadd: '''puppy'' ''kitten'' and ''spider'' pai skins' +2024-05-08: + '@MrEmre12, @Majkl-J': + - rscadd: Fishing pool introduced to metastation garden + - refactor: All water tiles now handle fishing through a unified fishing_datum variable + BurgerBB: + - qol: The inspector's Fedora now uses regex. When saying commands, it is much more + generous on picking up trigger word. + Derpguy3: + - bugfix: A meter attached to distribution pipes in Birdshot's atmospherics has + been moved to the matching pipe layer. + Fikou: + - rscdel: You can no longer use another station's blueprint photo to look at wires + or do the traitor objective with. + Iamgoofball: + - balance: Spies can now use other spies' uplinks. + Melbert: + - balance: To see wires in photos of blueprints, you first must squint at the photo. + ReturnToZender (hitting delete on a power cable): + - rscdel: Single loose power cable in icebox maintenance + Rhials: + - balance: Virtual domain ghost roles can no longer enter the safehouse/"equipment" + areas of a domain. + - bugfix: Pirate virtual domain ghost roles will no longer make a pirate team antag + datum. + ShizCalev: + - bugfix: Inducers no longer break completely after trying to charge a PDA with + them. + delingar: + - rscadd: RD's skillchip adds cyborg wires knowledge + jlsnow301: + - bugfix: Lootpanel now requires 515.1635 to generate most icons. TG support for + 514 ended May 1. Update your client to fix the icons. + mc-oofert: + - qol: temporarily soulless (deathmatch, etc) bodies dont appear as soulless on + medhud +2024-05-09: + 00-Steven: + - bugfix: Pride pins can be reskinned again with alt-click. + AMyriad: + - bugfix: Removed stray pixels appearing on certain parts of railing + Bisar: + - balance: Knockdown effects will know consistently disarm, instead of failing to + disarm if you're already lying down. + Ghommie: + - bugfix: Added the missing bulwark MOD module and the jawed fishing hook to the + black market. + GoldenAlpharex: + - bugfix: Removed another rogue cable from underneath a disconnected SMES. + Jane: + - qol: The Coroner's Ritual Knife can now sit upon Med Belts! + Melbert: + - bugfix: DNA infusing tiers works again + - bugfix: Cult can build again + - qol: There is now a slight animation to entering a portal or teleporter. + - qol: Spies may spawn in less numbers, but rarely may also spawn in more numbers. + XElectricX: + - qol: Mech drills can auto-mine by walking into rock. + jlsnow301: + - bugfix: Silicons can set the teleporter destinations again. + - bugfix: The quick equip 'E' hotkey shouldn't warn if one of your bags is full + anymore +2024-05-10: + 00-Steven: + - qol: Added alt-click usage context to toggle_icon component + - bugfix: The stomach pump surgery actually works again. + - spellcheck: '"brusing" to "bruising" in the message you get when failing the stomach + pump surgery.' + Echriser: + - bugfix: conveyor switches work for cyborgs again + GoldenAlpharex for the code, Thlumyn for the sprites: + - bugfix: Fixed smoothing turfs displaying some incorrect damaged overlays because + of a non-smoothing damage overlay of different dimensions than the smoothing + sprite used as the base. Less black void, let's go! + - image: Added smooth broken/burnt overlays for grass, meaning that it's going to + look a lot less broken when the grass tile is at the edge of a smoothing group. + Jacquerel: + - rscdel: Being sacrified by a Heretic no longer gives you an incurable phobia. + - rscadd: Being sacrificed by a Heretic will drop 2-4 of your organs on the ground + and replace them with "corrupt organs" with negative effects which can be suppressed + with Holy Water. + - rscadd: Players who have been sacrificed by Heretics will experience additional + and rapidly lethal consequences for attempting to fight someone who previously + sacrificed them, as long as that person is wearing a focus. + - sound: Lasers adjust their pitch as they run out of charge, rather than frequency + Melbert: + - qol: Morgue trays (and the contents inside) are now animated on open and close + MrStonedOne & Lilah Novi: + - rscadd: Say commands typed in the command bar now trigger typing indicators + Pickle-Coding: + - qol: The labor camp shuttle properly sets people to parole after they complete + their work. + - qol: The labor camp shuttle specifies which person returned to the station. + ShizCalev: + - bugfix: Cursed Items wizard event actually works again. + TiviPlus: + - bugfix: fixed clients being seen as stuck doing tutorials in some cases when changing + mobs + jlsnow301: + - bugfix: Supermatter shards now have screentips with a wrench in hand + malton33: + - bugfix: space heaters now display the correct mode when the maintenance panel + is closed + paganiy: + - bugfix: The shuttle will no longer delete you while you are in jaunt + vinylspiders: + - bugfix: moths with functional/flight potion wings get an animation when they *flap + once again, and it makes a sound +2024-05-11: + carlarctg: + - rscadd: Chance to become crab on nonlethal DNA meltdown + norsvenska: + - bugfix: The Coroner and Bitrunner can now be selected as a target for kidnapping + and heirloom destruction objectives. + - bugfix: The Chief Engineer is now a valid target for heirloom destruction objectives. +2024-05-12: + Higgin: + - bugfix: Spies no longer get the 'nothing' / 'free objective' due to trying to + make Protect objectives without targets. + Xander3359: + - bugfix: Ale now has a drinking_glass style +2024-05-13: + Bisar: + - qol: Most of the alternate click modes (right click, control clicking, shift clicking, + etc) have been enabled in the alt-click item menu. + - bugfix: You will no longer point at things you right-click in the alt-click item + menu. + Melbert: + - rscadd: Cigarette smoke is now more smokey. + - rscadd: Taking a cigarette out of your mouth will let out a big puff of smoke. + PapaMichael: + - bugfix: Rat Kings can no longer trap mice inside of pipes by creating them while + ventcrawling. + - balance: Rat Kings can no longer create grime and miasma while ventcrawling. + Rhials: + - rscadd: Bitrunners now have their own job figurine. Cool! + nikothedude: + - spellcheck: Added a period to the end of the wendigo deathrattle + paganiy: + - qol: Now you can put a cigarette in your mouth just by hitting the pack of cigarettes + on yourself. + - bugfix: The cigarette pack no longer moves under the spaceman when they interacts + with it with the RMB +2024-05-14: + Jacquerel: + - rscadd: People who spend time improving their bodies are able to evaluate the + relative physical strength of those they examine as a kind of "power level". + - rscadd: Changeling transformation copies the target's athletics skill level. + Time-Green: + - bugfix: Deleting someones brain kills them again + jlsnow301: + - bugfix: Alt click will draw the captain's sabre again + paganiy: + - bugfix: Accelerator laser gun no longer shoots sun size projectiles. + starrm4nn: + - qol: Gives Health sensor assemblies a UI so its easier to use. +2024-05-15: + DaCoolBoss: + - bugfix: The random arcade machines in the 'Interdyne Spinward Research Base's + now function. + Melbert: + - qol: Some alerts, such as Fleshmend's, show their remaining duration on their + icon. + Seven: + - bugfix: Fixed a runtime when using the cultist blood rites on yourself. + Webcomicartist: + - bugfix: The lavaland mining shuttle doors no longer trap cargo security on lavaland + due to access weirdness. + iwishforducks: + - bugfix: Fixes random decal in space on Tramstation + necromanceranne: + - bugfix: Fixes an accidental reversion to greyscale plate armor. +2024-05-16: + Ben10Omintrix: + - rscadd: parrots will now try to immitate the speaker's voice + DaxDupont: + - bugfix: Fixes error when running docker compose on apt upgrade + Derpguy3: + - qol: Additional box types can be crafted from cardboard. Happy organizing. + - spellcheck: A typo in box crafting for prescription glasses has been fixed. + Hatterhat: + - bugfix: The SC/FISHER can now shoot floor lights. + Jacquerel: + - admin: Admins can now more easily modify whether a Blood Brother can convert someone + Jane: + - qol: Shovels, Serrated Bone Shovels, and Entrenching Tools can now be hung upon + Miner and Coroner Winter Coats, as well as the Coroner's Labcoat! + - image: Mirrored the mirrored sprites to display Shovels in the suit slot properly. + Melbert: + - qol: When you are offered something, you can shift-click the alert to examine + the item rather than take it. + - qol: Examine blocks for screen alert examining. + - qol: Screentips for offer alerts. + PKPenguin321: + - rscadd: New funny wizard staff/wand that shrinks stuff. + - rscadd: Being shrunken now leaves you vulnerable to being crushed to death. + Pickle-Coding: + - balance: There are reports of malfunctioning guns being confiscated. + Seven: + - bugfix: Destroyed solar panels no longer drop their overlays + Shadow-Quill: + - qol: The "Confirm Order" button on Cargo consoles is now active when the cargo + shuttle is at Central Command instead of at the station. + ShizCalev: + - bugfix: Spam clicking a modkit with a kinetic accelerator can no longer lead to + ghosted versions of the modkits appearing in the modkit list, breaking the gun. + SyncIt21: + - bugfix: cell chargers, mechbay port chargers & recharge stations heat lost is + directly proportional to energy drawn from the grid to charge their respective + cells + - bugfix: cyborgs should charge more frequently & to their max capacity at recharge + stations + - qol: adds examines & screentips for tool & container actions on the smoke machine + - qol: smoke machine no longer requires a power cell for construction + - code_imp: autodocs & removes vars for some machine, Updated attack chain to latest + standards for smoke machine + - bugfix: You no longer hit the smoke machine with the beaker + - bugfix: You can hit the smoke machine with tools & beakers when in combat mode + - bugfix: no abstract & hologram item interactions allowed with smoke machine + Time-Green: + - bugfix: Space Ninja and other space spawned antags get a 1 minute radiation shield + in the radioactive nebula + grungussuss and Virgilcore: + - sound: portals now have a unique sound to them + jlsnow301: + - bugfix: Bitrunning antagonists no longer gib on teleport + - bugfix: Cyber tac now have a visible name / ID + - bugfix: 'Renamed the bitrunning malfunction event to just "Malfunction: x"' + - bugfix: You can adjust your uniform while lying down again + necromanceranne: + - bugfix: Fixes the knife offset for pipeguns + tmyqlfpir: + - qol: Add tooltips to circuit editor buttons + - qol: Add grid alignment mode to circuit editor + - rscadd: Added new compare health state component + - rscadd: Added new NTNet send list literal component + - rscadd: Added new toggle component + - qol: Added activity toggle to voice activator component + - qol: Added quiet mode to speech component + - qol: NTNet send component will not use power/trigger if NTNet is offline +2024-05-17: + 00-Steven: + - bugfix: Emotion masks no longer use a janky workaround for infinite reskinning. + - bugfix: Mech pilot suit shows reskinning usage context correctly. + - bugfix: Accessories show "wear above/below suit" usage context appropriately. + - bugfix: Accessories don't block reskinning usage context when they shouldn't. + - bugfix: Showing reskinning usage context cares about the infinite reskinning flag, + rather than whether it's in storage or not. + - rscdel: Removed redundant reskinning usage context code from medical sprays, now + shows reskinning usage context like other reskinnables. + EnterTheJake: + - balance: Rust Heretics rusting is now consistent and tied to knowledge progression. + - balance: Walking on rust applies disgust and chem purge to non-heretics and brute + damage to silicons. + - balance: Toxic damage on heretic skills is replaced with disgust. + - balance: Aggressive Spread radius is now a bit shorter in exchange for losing + its RNG elements, cooldown is halved on ascension. + - balance: Pulse of Entropy had its radius doubled and the recipe simplified. + - balance: Leeching walk has had its healing increased and a minor temp regulation + effect added. + - balance: Rust Walker's knowledge has been moved up in tree(close to aggressive + spread) they are now easier to summon and have more health. + - balance: You cannot place floor tiles on rusted turfs anymore, (use a welder to + scrape off the rust first). + - balance: Rustbringer's oath has been reworked to propagate around in a circular + fashion and not just on the bridge z level. + - balance: Resist cold trait now gives immunity to freeze effects, and has now been + added to Rustbringer's oath along with slowdown immunity. + - bugfix: Fixed glowing runes being invisible. + JohnFulpWillard: + - bugfix: Snails no longer move at normal speed while resting. + - bugfix: Snails can no longer get insane speed from getting their legs replaced. + - bugfix: Humans don't become immensely slow when getting a Snail leg. + - admin: lube walking element is now much easier to mess with to fit however you + want to use it for. + Melbert: + - bugfix: After 3 years, radiation now causes you to go bald and mutate again + Pickle-Coding: + - bugfix: Fixes engineering cyborg screwdriver not being pointy. Fixes engineering + cyborg crowbar from being pointy. + - bugfix: Fixes cyborg omnitools not using the correct wound bonus and armour penetration + values. + Rengan: + - bugfix: Officers sabre and grilles now conducts electricity as it should. + Seven: + - bugfix: Wings no longer work in space if you activated them beforehand. + ShizCalev: + - bugfix: Atoms on the border of a tile will now only trigger landmines if they + ACTUALLY pass over said mine. + Thunder12345: + - bugfix: Pyre chaplains can no longer generate infinite favour for free by buying + and selling candles. Candles now offer for 40 favour, down from 50. + Xander3359: + - rscdel: Removes the sleeper protocol traitor objective + - balance: RND server/Telecomms sabotage can now show up even later in the round + improvedname: + - bugfix: fixes metastation science scrubber pipeline + jlsnow301: + - bugfix: Fixed an issue preventing space ninjas from having a hud icon + - rscadd: 'ORBIT UI CHANGES:' + - rscadd: AFK players are greyed out. + - rscadd: Living NPCs now display health. + - rscadd: Icons displayed are now based on hud icons, which includes icons for player-visible + antagonists + - rscadd: You can now sort by job department (click health icon) + - rscadd: Round ending "critical" items will be listed at the top. + - rscadd: Click the settings button to expand for more info + - rscadd: Your current orbit target is highlighted. + - bugfix: Simplebot UI won't display '0' anymore when locked + mc-oofert: + - rscadd: mobile defibrillator mount + nikothedude: + - code_imp: Most instances of parse_zone now refer to the limb's plaintext_zone + var + siliconOpossum: + - qol: Neckties are now worn underneath suit items and accessories, they can still + be optionally worn over them in case you want the "business space suit" look + - bugfix: Fixed a bug where accessories wouldn't correctly apply over suits if you + equipped the jumpsuit they're attached to after the suit + starrm4nn: + - spellcheck: Fixes some typos in the goodies section and makes it look a bit more + consistent. + - bugfix: Fixed the spess knife's cutter tool icon being invisible. +2024-05-18: + Absolucy: + - bugfix: You will now be ejected from Space Phase if you lose your focus or lose + consciousness somehow during the jaunt. + DaCoolBoss: + - bugfix: adds missing prefix to name of The Lizard's Gas Lava land ruin. + Echriser: + - bugfix: Fixes a bunch of hearts turning into errors when you try to eat them + Hatterhat: + - qol: The Ansem, suppressor, and SC/FISHER included in the Fisher gimmick bundle + now come together as one whole gun, the Ansem/SC. It's integrally suppressed, + and fires the disruptor on right-click. + - bugfix: The SC/FISHER disrupts APCs for an appropriate amount of time, not ten + times the intended disruption length. + Jacquerel: + - bugfix: Mob spawners (such as lavaland tendrils) won't spawn more mobs than they + are supposed to, faster than they should. + Melbert: + - rscadd: Adds Minecarts, (possibly admin only depending on when this PR is merged + in relation to the Icebox Bar PR) + - rscadd: 'Icebox: The bar returns to its home.' + - rscadd: 'Icebox: Standardizes some decal styles in the main hallway.' + - bugfix: 'Icebox: The lower brig''s missing air alarm has been found.' + Sadboysuss: + - bugfix: fixed malf AI being able to overload shuttle consoles and the gateway + control console + ShizCalev: + - bugfix: Malf AI can now override/overload closed turrets. + - bugfix: Fixed a scenario in which a turret would have its covers closed while + still firing. + grungussuss: + - qol: suit sensors can now be maxed by ctrl clicking your jumpsuit + improvedname: + - balance: Nukies ordnance now include more gasses and stock parts + sheets, spacemenart, ben10omintrix, goofball, infrared baron, aofie: + - rscadd: adds lavaland raptors and the raptor ranch +2024-05-21: + ArcaneMusic: + - balance: Ore vents, if blocked off from all four sides while being defended, now + cause a mild gas explosion, resulting in a mild dissuasive explosion. + - bugfix: NODE drones spawned from ore vent defense have lower maximum health. + Ben10Omintrix: + - bugfix: ' fixes being able to ride all mobs through space' + - bugfix: playful raptors now correctly play with owners + EnterTheJake: + - spellcheck: Pulse of entropy description now displays the correct reagents for + the ritual + Fikou: + - bugfix: carps now properly stop floating when you kill them + - refactor: modsuits have been refactored if you see bugs report them + - bugfix: admin cargo tech modsuit outfit now works correctly + Jacquerel: + - balance: Certain unhealthy organs can be detected via the advanced health scanner + - balance: If you can't absorb a species' DNA as a changeling, you also can't use + transform sting to turn someone into that species. + - admin: Various bad things that can happen as a result of Legion organs are now + logged + Melbert: + - qol: Custom emotes now default to both visible and audible rather than just audible + - qol: Invoking the custom emote verb now explains how to set your custom emote + to visible or audible + Pickle-Coding: + - balance: Cargo ripley's cell starts fully charged. + Profakos: + - bugfix: Slimes will no longer consider feeding upon slime people + Sadboysuss: + - bugfix: HoS on birdshot now has a pet like on all other maps + - bugfix: jumpsuit sensors quick maxing now works + ShizCalev: + - bugfix: Icecream vats will no longer eat cyborg beakers. + - bugfix: Balloons are no longer invisible when held. + - bugfix: Malf AI can now properly interact with APCs under their control + - bugfix: Malf AI & their slaved cyborgs won't be told that access is denied when + trying to right-click lock/unlock APCs. + Striders13: + - admin: sentience balloon can now assign antag to affected mobs + Watermelon914: + - bugfix: Fixed spies having a slightly increased chance of getting a different + cost model for the elite syndicate hardsuit + Xander3359: + - bugfix: The RD remote works on the AI upload door now + carlarctg: + - balance: Halved Psyker echolocation cooldown. This will hopefully make it actually + usable. + dopamiin0: + - rscadd: Nanotrasen has made strides in their frontier sector food networks, increasing + the selection of produce available to chefs. + grungussuss and Virgilcore: + - sound: added sounds for the gateway + iwishforducks: + - image: Medical doctors and CMOs now start with their jumpsuits rather than surgery + scrubs and caps. + kawoppi: + - bugfix: 'underage drinkers beware: the Booze-O-Mat and ShadyCigs Deluxe check + your age again' + necromanceranne: + - bugfix: Miners can actually access and fix their engineering issues on the lavaland + base via the engineering section of the base. AGAIN. + - bugfix: The gulag SMES unit is no longer needlessly draining the entire power + grid of the main mining base. AGAIN. + nikothedude: + - spellcheck: Improved the grammar/spelling of a few raptor descriptions + starrm4nn: + - balance: Buffs Antihol's purge rate to 8u/tick when pure (6u/tick minimum). + - balance: Multiver stops purging when Anacea is present in the bloodstream. + tmyqlfpir: + - bugfix: '[Metastation] Service hallway door being bypassed by lying down' +2024-05-22: + Bisar: + - balance: A wound being inflicted doesn't get broadcasted to everyone in view until + a higher severity now. + - sound: Wound sounds drop off more quickly, and no longer travel through walls. + This has no effect on attack sounds. + Fikou: + - spellcheck: the nuke op reinforcement beacon no longer talks about clones + Horatio22: + - spellcheck: Corrects spelling of "amulette" to "amulet" + - spellcheck: Correctly spells "received." + Iamgoofball: + - spellcheck: Removes a shit clown name and adds a better clown name instead + SyncIt21: + - bugfix: Crafting menu loads long lists faster + - bugfix: Monkey power reactions are instant and won't occur when exact reagent + requirements (50u power & 1u water) or above aren't met. Stops players from + cheesing monkeys from plumbing factories + Watermelon914: + - qol: New players will no longer start with ghost ears, ghost sight and ghost whispers + on by default. + Wayland-Smithy: + - qol: Crew Monitor UI now scrolls properly even after clicking the inner list. + Xander3359: + - bugfix: fixed a weird door in icebox bridge + hack-wrench: + - rscadd: Added smoke kit (5 grenades) with four grenades to uplink by 2 TC + improvedname: + - rscdel: Removes night vision quirk + necromanceranne: + - rscadd: The Research Director is now actually strong. + - rscadd: Fitness bros will determine the Research Director to be stronger than + they actually are, without even working out. How does he do it? + - balance: Suplexing a rod grants a large burst of athletics experience. + - rscadd: The more sentient casualties of the rod, the more experience suplexing + that rod grants. Absorb the souls of the weak and feeble. + nikothedude: + - rscadd: Adds a new deathmatch modifier that enables quirks + - bugfix: The deathmatch modifier menu works now + norsvenska: + - spellcheck: The message displayed when adjusting a mask no longer incorrectly + states the way in which the mask has moved. +2024-05-23: + Jacquerel: + - balance: The melee attacks from small mobs spawned by Legions can now be dodged. + - balance: Legions spawn their mobs less often. + - bugfix: Legions cannot spawn mobs while inside pipes or closets. + Muffindrake: + - balance: reduced claymore/weak force from 30 to 24 and armor penetration from + 15 to 10 + hack-wrench: + - rscadd: Added RUN_SERVER.bat for maintainer issues + paganiy: + - balance: Auto-aim in combat mode at mobs on the floor is disabled after the projectile + passes 10 tiles. +2024-05-24: + 00-Steven: + - bugfix: Smoker quirk users can select a favourite brand again. + Ben10Omintrix: + - rscadd: adds a new fish to lava and plasma rivers, the lava loop + DATA-xPUNGED: + - bugfix: The Lance Crew Evacuation System now moves in the right direction in Hyperspace. + EEASAS: + - rscadd: Remapped NorthStar's medbay a little bit + Rhials: + - spellcheck: Fixes a typo with latejoin AIs + by INFRARED_BARON: + - image: 'Changes icons of: Gygax, d-gygax, durand, ripley variants, firefighter + statue, phazon & odysseus. Adds new icons for polar hide item.' +2024-05-25: + 00-Steven: + - bugfix: Airlock electronics created by deconstructing roundstart airlocks inherit + their cycling id properly. + - spellcheck: Examining a renamed airlock assembly no longer says it has a paper + placard that is "labelled with written on it is". + - bugfix: Mixing the reagents for moon rocks, bLaSToFF ampoules, or SaturnX globs + in amounts less than the minimum for the recipe no longer eats the reagents + without doing anything. + - bugfix: Airlocks without access requirements no longer create airlock electronics + with a broken menu. + - spellcheck: When a vendor tells you something dropped onto the floor, the line + no longer starts with a broken character in the case of cigarette boxes. + Ben10Omintrix: + - balance: you can now polymorph into raptors + - balance: raptors overall have less health and no longer have armor against ranged + attacks + BramvanZijp: + - bugfix: Fixed an inconsistency regarding the interactions between the Piercing + Hypo Borg upgrade and Hacked Borg Hypos. + Derpguy3: + - spellcheck: A handful of grammar errors in some department signs has been fixed. + Jacquerel: + - bugfix: The destructive analyser once more hungers for multitools + PapaMichael: + - bugfix: Epinephrine will prevent metabolism of all allergic reagents (instead + of just one), if taken with multiple chemicals that one is allergic to. + TiviPlus: + - qol: Added a "Remind me later" button for tutorials + Twaticus: + - image: resprites egg (and more) + jlsnow301: + - bugfix: You can no longer open the loot panel at range as a blind person and cheese + item names + nikothedude: + - code_imp: New signals for atom storage remove and insert +2024-05-26: + Jacquerel: + - bugfix: Ghosts can more reliably become a harvester. + OverwatchVoice: + - qol: The "Proto-Nitrate BZ response" atmsopheric reaction now lists it's required + temperature. + Rhials: + - admin: Admins can now reroll random events into something else. + grungussuss: + - qol: tramstation upload now has an extra motion camera + - qol: tramstation SM setup now has an emergency cooling setup + - bugfix: changed layout of Northstar dining hall so customer bots can reach the + kitchen counter + paganiy: + - bugfix: You can shoot at items on the floor again + thegrb93: + - qol: Made borg inventory not shift around depending on equipped items + tmyqlfpir: + - bugfix: '[Ice Box Station] Dorm 1''s door no longer shares ID with dorm 2''s door' +2024-05-27: + Melbert: + - refactor: Refactored the way high toxins cause you to vomit. + Time-Green: + - rscdel: Removes sentient disease from the game + - rscdel: Miasma and gibs no longer generates random diseases + YesterdaysPromise: + - image: Cleaned a single stray pixel in a single frame of a bite telegraphing accidentaly + found while re-organizing the files. + by INFRARED_BARON: + - image: Changes the sprites of bone and ash drake armor (suit + helmet mob/objs) + necromanceranne: + - bugfix: Material floor tiles once again have their improved sprite. +2024-05-28: + Echriser: + - bugfix: computers with no lights can now turn on using the on/off signal + - bugfix: RGB lights on PDA circuits now use a signal + - bugfix: the is_off signal now works on consoles + - bugfix: printing text on a console component now uses a signal + - refactor: each input signal in console circuits now have their own proc + EnterTheJake: + - bugfix: Rust debuffs now gets properly removed if you derust a tile you are standing + on. + Fikou: + - image: makes food hud burger icon have a sharp outline + Fluffles: + - bugfix: echolocation is less laggy. and works. + Higgin: + - balance: Viruses now self-heal much more effectively with good mood, sleep, food, + and spaceacillin. + - balance: Viruses now punish being hungry more. Stay fed! + - balance: Spaceacillin now gives 200 ticks of symptom resistance, declining over + time, rather than 100. + - balance: Viruses now progress slightly slower. + - balance: Viruses now only hide if their stealth stat is greater than their total + computed severity. + Jacquerel: + - balance: Mobs significantly larger than humans, such as Space Dragons and Xenomorph + Queens, breakout of being arrested by a mech significantly faster. + - bugfix: Venus Man Traps cannot use vines to drag around machines or objects that + are bolted, welded, rooted to, or otherwise are part of the ground + - bugfix: Standing on a table will not prevent you from being grappled by a Venus + Man Trap + LemonInTheDark: + - refactor: I have reworked how parallax and its animations (space travel) work. + Please report any bugs lads! + Pickle-Coding: + - spellcheck: Fixes labour camp shuttle retrieval message starting with "/p". + Whoneedspacee: + - refactor: Wendigos abilities have been changed into actions that can be added + to any mob. + zxaber: + - qol: Traitor-created Infected AIs no longer hear the Malf AI antag sound alert. +2024-05-29: + Absolucy: + - bugfix: Fix a rare issue where a turf would remain permanently "elevated" if an + elevated object was initialized inside of a non-turf object. + Capsandi: + - sound: Disposal chutes will no longer play a sound for each item when many items + enter it at once + FearfulFurnishing: + - bugfix: fixed watcher wreath bounties being incompletable + FlufflesTheDog: + - bugfix: some missing modsuit (un)sealing messages should no longer be missing + - bugfix: MOD circuit adapter core deployed parts output should work again + - bugfix: Modsuit painter works again + Melbert: + - bugfix: The Bar on Icebox should receive less trash + Mey-Ha-Zah: + - image: Revamped Contractor Gear. You'll stand out more now, but hey, that's why + the syndicate contracts out work in the first place. + NewyearnewmeUwu: + - bugfix: Fixed a typo preventing creation of paystands using an ID. + Time-Green: + - rscdel: Wipes the last echo of sentient disease from existence + jlsnow301: + - rscadd: Added a screentip for hilbert's hotel door + - bugfix: Fixed alt-click interaction with hilbert's hotel door + - bugfix: Lootpanel no longer opens up when alt clicking objects on your person +2024-05-30: + Fluffles: + - bugfix: holodecks no longer use increasing amounts of power the longer they're + on + FlufflesTheDog: + - bugfix: viruses can no longer potentially have 8 symptoms + GoldenAlpharex: + - qol: Grown logs no longer spam your chat when cut into planks, instead displaying + balloon alerts informing you of how many planks were made! + - qol: Cotton and Durathread bundles no longer spam your chat either, and display + a balloon alert instead. + - bugfix: Cotton and Durathread bundles no longer runtime when creating raw cotton/durathread + from the created stack having been merged with an existing one. + Gottfrei: + - bugfix: "\u0421ertain cooldowns should now be more accurate and will no longer\ + \ take an extra decisecond to clear." + Jacquerel: + - bugfix: When removing a corrupted organ from a patient, the patient will now be + checked for Holy Water or magic resistance, rather than the person performing + the surgery. + - balance: Bioscramblers pulse more often but with less range, plus you can see + them pulsing. + Pickle-Coding: + - admin: fix_air will also fix the turfs' temperatures. + ShizCalev: + - bugfix: Trees will no longer be growing through railings on forest planets + - bugfix: Trees/plants will no longer grow through wood pathways on Icebox + - bugfix: Railings will no longer appear ontop of rock walls on icebox + Vekter: + - bugfix: Fixed a missing access helper in Northstar Medbay. Assistants should no + longer be trapped post-mending. + - bugfix: Replaced an incorrect disposal variant in Northstar's Medbay. + - spellcheck: Fixed a grammar inconsistency in round tips. + Wayland-Smithy: + - spellcheck: Fixed a missing space typo in ion law logic. + grungussus: + - bugfix: fixed metal foam plating description and add more user friendly explanation + on how to replace tiling. + grungussuss: + - admin: admin RCD now works much faster. + improvedname: + - balance: Adds a threshold to oculine and increases metabolism, and reduces the + amount of oculine in a carrot + jlsnow301: + - bugfix: Slightly cleaned up PAI software downloads interface + - bugfix: Fixed screentips not appearing on clip on neckties + tmyqlfpir: + - bugfix: Drones stored inside objects will call the stored object's relaymove() + and return upon move +2024-05-31: + Capsandi: + - sound: Shuttle docking and undocking is quieter now + - sound: The volume of the gravity generator has been halved + Rhials: + - bugfix: You can no longer force NODE Drones off of ore vents. That includes using + fulton packs! + - bugfix: When a NODE Drone is forcibly separated from its vent, it will fly away. + grungussuss: + - balance: The DNA vault now requires less animal and plant DNA to be completed + oranges: + - spellcheck: Gripper gloves are now Enhanced Retrieval gloves diff --git a/html/changelogs/archive/2024-06.yml b/html/changelogs/archive/2024-06.yml new file mode 100644 index 0000000000000..100647af4323c --- /dev/null +++ b/html/changelogs/archive/2024-06.yml @@ -0,0 +1,1417 @@ +2024-06-01: + JohnFulpWillard: + - rscadd: The Law office now has a pet goldfish. + - refactor: Gondolas (including gondola pods) are now basic mobs. + Time-Green: + - rscadd: 'Station-Wide Background Checks (station trait, rare): Disables crew antagonists, + but get a lot more non-crew antagonists' + - bugfix: Fixes railings being invisible + - bugfix: Snow walls dont spawn on railings anymore in icebox + carlarctg: + - balance: Reworks Adrenaline Glands into Repurposed Glands (Realingment). Lose + the use of your arms, but you can escape any situation! + tmyqlfpir: + - bugfix: '[Tramstation] Departures and under east tram distro/waste pipes now properly + connected' + tralezab: + - rscadd: New fish, the anxious zipzap + - rscadd: New syndicate fish, the monocloning jumpercable + - rscadd: New aquarium, the bioelectricity generator + - bugfix: Mixotrophic fish now properly lack food requirements + zxaber: + - bugfix: Minebots purchased via mining points are no longer stuck in idle mode. + Clicking on them will activate their AI. + - spellcheck: Removed the examine text about feeding ore to minebots; this functionality + was removed already. +2024-06-02: + 00-Steven: + - spellcheck: Photo descriptions containing living entities no longer have a pile + of unnecessary periods. .. Which they used to have between describing different + entities. .. Also removed that additional space they had too sometimes.. + - qol: Photo descriptions containing living entities have these sub-descriptions + split into newlines for ease of reading. + - bugfix: Imaginary friend brain trauma works again. + - bugfix: Imaginary friends can be heard by their hosts from more than a tile away + again. + Echriser: + - bugfix: you are now able to cancel the look up/down verbs from anywhere + Gaxeer: + - bugfix: ambush spider (should instantly agressive grab) and other giant spiders + can now agressively grab + GoldenAlpharex: + - qol: Fermenting (wooden) barrels can now be emptied when opened by right-clicking + with an empty hand! + - qol: Fermenting (wooden) barrels can now be anchored/unanchored using wrenches! + - qol: Fermenting (wooden) barrels now have contextual helpers, to show what you + need to do at a glance to interact with them. + - code_imp: Documented a few of the fermenting barrel's variables. + Higgin: + - bugfix: positive viruses are no longer hidden. + Jane: + - image: Central Command has cut funding to the Mining department, resulting in + leather sleeves for the Shaft Miner Explorer Suit rather than the metal plates + of before. + JohnFulpWillard: + - rscadd: You can now flush toilets. You can also put fish in the toilet. And flush + them. + - bugfix: Urinals can no longer be used to delete items. + - bugfix: Urinals no longer grant infinite urinal cakes. + LT3: + - bugfix: Fixed bug where players could be invisibly attached to the tram forever + Majkl-J: + - bugfix: Fixed some borg modules just being constantly eaten up by borgs even when + they shouldn't allow duplicates + - refactor: Borg module code now has better handling for adding/removing items, + and to prevent duplicate module usage (Unless one wishes to override the behaviour. + - bugfix: Fixes janitor borgs killing the machinery subsystem by charging light + replacers 200k times a tick. + Melbert: + - balance: Re-ups the cost of the new ling adrenal ability + - bugfix: Patches an exploit with new ling adrenal ability + - balance: Wearing a mask can now prevent you from being spread airborne diseases. + Prior, it only stopped you from spreading it yourself. + - balance: Wearing a mask no longer 100% guarantees you don't spread viruses to + others people - it now scales on the masks BIO armor. Get a sterile mask from + Medical for max safety. + - balance: Wearing a mask to stop you from spreading to other people is doubly effective + than wearing a mask to prevent spread to yourself - Mask up for the greater + good! + - balance: Passive airborne virus spread attempts are now done every time you breathe + (every eight seconds), rather than every two seconds. The chance of spread is + the same, though - it has been scaled up to accommodate. + - code_imp: Cleaned up a fair bid of airborne-transmission-code. Report any oddities. + Metekillot: + - qol: Sign language users can now sign in cuffs, but to a very limited degree. + They also have more descriptive emotes for questions, exclamations, and a combination + of the two. + Seven: + - bugfix: Paradox clones (and changelings) now properly copy hair gradients and + heterochromia eye colors. + - bugfix: Hardcore random no longer mistakenly makes your hair white, this was not + a feature. + SyncIt21: + - refactor: ghetto chem separator has been reworked from scratch. See PR 83275 for + details + - qol: adds examines & screentips for ghetto chem separator + - bugfix: Cryo tube respects `NO_DEBRIS_AFTER_DECONSTRUCTION` for the occupants + visual contents flags & traits & won't allow hologram/abstract item interactions + - code_imp: Cryo has improved attack chain & uses defines for reagent volume rounding + TheBoondock: + - balance: Attack with a pillow now consumes 5 stamina regardless of wielded or + not. + Vekter: + - rscadd: Adds an ion law possibility that changes the human status of station pets. + Wayland-Smithy: + - balance: When an AI is alive, on main power, and not SSD its bolts cannot be raised + or lowered externally. + carlarctg: + - rscadd: Added crutches! Wooden ones can be made with wood. Medical ones can be + bought from the medvendor. + - rscadd: Crutches will reduce slowdown from missing a leg by 60%, and they will + remove the limping from fractured bones. (canes do that now too) They're also + a fairly decent bludgeon. However, they do nothing if both legs are cut off. + grungussuss: + - qol: lathes will now print cables coils in packs of 5 + - bugfix: added missing context tips for atmos canisters + jlsnow301: + - bugfix: Fixed the biogenerator's tabs + - bugfix: Orbit UI icons are no longer scrollable.. + junkgle01: + - rscadd: Changes the layout of MetaStation's cargo to fit with new Nanotrasen guidelines. + mc-oofert: + - balance: you may not decap people with a plasma cutter + necromanceranne: + - balance: The various mining related suits now have consistent suit storage. Try + putting a knife into your explorer suit's suit storage today! + - balance: Bone armor work similarly to explorer suits, with similar armor values + and options to upgrade their parts. However, they use bone talismans instead + of goliath hides to upgrade. Magic? Just believing really strongly that the + drake is hitting you slightly less hard because of the talismans? You be the + judge. + - balance: Goliath cloaks come fully upgraded. However... + - balance: The recipes for bone armor and goliath cloaks are slightly different. + Particularly goliath cloaks, which need a lot more dead goliaths to make. Sorry. + - balance: Mining MODsuits achieve at maximum ash accretion the same amount of melee + armor as an upgraded explorer suit. + - balance: These various suits also consistently have wound armor. + - bugfix: Berserker armor properly hides underclothing and hair. + - balance: Berserker armor pieces can absorb drake armor to gain their enhanced + protection. Become the warrior of Khorne you've always wanted to be. + - balance: Berserker rage now halves brute damage rather than just adding Melee + Armor to you and your squishy body. + - qol: Berserker and H.E.C.K. helmets can be used for internals. + nikothedude: + - bugfix: COMSIG_ATOM_POST_DIR_CHANGE is now a functional signal + norsvenska: + - bugfix: The NTSS Independence cryogenics thermomachine is now properly hooked + up to the cryo loop. + - qol: The NTSS Independence's medical bay has received improvements. The medibot + and the sleeper are upgraded, and advanced surgery equipment has been added. +2024-06-03: + MTandi: + - balance: 'Floor diseases cures are now common chemicals: Milk, Chlorine, Space + Cleaner' + Rhials: + - rscadd: Shovels and entrenching tools can be used to dig graves on asteroid/dirt/etc. + surfaces. Neat! + - rscadd: The Icebox Morgue has been given a fenced-off graveyard in the back. + - code_imp: burn_tile() is no longer double-defined on asteroid turfs. + Zytolg: + - qol: Many Janitors have cleaned up Birdshot station. Permanently. + - qol: Loose floortiles on Birdshot Station have been properly affixed to the floor + by the Engineering and Atmospherics Teams. + - bugfix: Birdshot Dorms have been reworked and incorporated the Holodeck Ship as + an actual and permanent installment. Come visit our new and improved barber + shop! + jwc1015: + - bugfix: Made the anxious zipzap accessible. +2024-06-04: + Iajret: + - bugfix: fixed being able to confirm cargo orders from cargo request console (and, + probably, from PDAs) + Jane: + - balance: Spider Breachers and Vipers have swapped castes. Breachers come from + Enriched Eggs while Vipers come from Abnormals! Breachers can no longer survive + in spaced rooms/temperatures. The Nurse wraps wounds faster, but with less damage + healed per wrap. + Melbert: + - sound: Boiling soup now makes a sound. + Time-Green: + - bugfix: fixes touching a crutch permanently crippling you + - bugfix: fixes crutches giving permanent speedboosts even when dropped +2024-06-05: + Absolucy: + - qol: The memories for Smoker and Alcoholic now actually mention the preferred + brand. + Derpguy3: + - bugfix: A tiny fan was added to Tramstation's disposal room under the blast doors. + No more accidental depressurizations. + Goat: + - bugfix: meta's cargo lobby and mining maintenance APCs is now connected to the + power line + GoldenAlpharex: + - rscadd: Added Biomes capabilities to the Cave Generator, to allow for procedurally-placed + biomes to be introduced in cave generation. This feature is not currently used + on any map, but the tools are all there for anyone with the motivation to add + biomes to any cave-generating area, like Lavaland and Ice Box. + - code_imp: Biomes can now affect features (which are usually structures), on top + of flora and fauna. + LT3: + - qol: Icebox's service hall has a disposal unit again + MelokGleb: + - code_imp: crab17 telegraph now uses animated spinning telegraph circle instead + of sniper scope button + PapaMichael: + - spellcheck: Nukie uplinks no longer claim to have nonexistent "Tesla Energy Relays" + Wayland-Smithy: + - qol: AI's jump to AI Core button works while on backup power (likely when needed + most). + carlarctg: + - qol: Disgust vomit knocks you down rather than stunning you. + - rscdel: Mitogen Metabolism Factor knocks you down rather than stunning you. + githubuser4141: + - image: New icons for berserker, godslayer and adamantine armor. Removes the old + icons. + grungussuss: + - sound: frog sounds will no longer explode your ears + mc-oofert: + - rscadd: wawastation, the station map + necromanceranne: + - qol: Failing to hit someone with a proto-kinetic crusher one-handedly no longer + force drops everything in your hands. + norsvenska: + - bugfix: Metastation's vault is now connected to the power grid + san7890: + - bugfix: Status displays should now no longer sporadically randomly break when + in the custom message mode + sprites by INFRARED_BARON: + - image: New icons for Marauder, Seraph, Mauler and adjusts the Phazon/Dark Gygax's + sprites. + vendingmachine24: + - spellcheck: Changed grammar in cat_house.dm +2024-06-06: + Ben10Omintrix: + - refactor: honkbots are now basic mobs, please report any bugs + - rscadd: honkbots will try to slip people on banana peels + Jacquerel: + - balance: Mutadone restores your originally monkey status, rather than always turning + monkeys into humans + - rscadd: A unique kind of mob is created when a Monkey is infested by a Legion. + - balance: Corrosive slime left behind after a slime fails to eat you can be scraped + off with your hands, or shaken off in some other way, by clicking on the debuff. + This is slower and less effective than washing it off using water. + LT3: + - balance: Doubled number of assignable wildcard slots on grey ID cards + - balance: Doubled number of assignable wildcard slots on silver ID cards + - balance: Doubled number of assignable wildcard slots on agent/chameleon ID cards + Rhials: + - balance: cultist shades can no longer contribute to rune invocation until they've + been out of their soulstone for a minute. Put them in a shell for God's sake! + - code_imp: sweeps up cultist antag datum code into its own subfolder. + - code_imp: cult shades now have their own antag datum. + - bugfix: constructs now properly clear the cultist antag datum and transfer the + mind slightly earlier. + SyncIt21: + - qol: more examines & screentips for plumbing machinery + - qol: plumbing grinder has a grind/juice mode which be toggled by hand + - code_imp: improved attack chain for RPLD & plumbing grinder + - bugfix: You can deconstruct the plumbing grinder with the RPLD + - bugfix: You can attack the plumbing grinder with any item in combat mode without + getting that item consumed + - bugfix: You cannot grind abstract/ hologram items in the plumbing grinder + - bugfix: growing vat now uses the correct layer selected on rapid plumbing device + mc-oofert: + - balance: cult stun gets weaker when they get red eyes and later more when they + have halos +2024-06-07: + 00-Steven: + - bugfix: RLD glowsticks actually glow again. + Absolucy: + - bugfix: When implanting functional wings into a new body, they will actually be + able to use said wings now. + EEASAS: + - bugfix: fixed the mis-rotated disposals pipe on birdshot + Erol509: + - qol: Cyborgs on AI statpanel now have jules energy format. + EuSouAFazer: + - qol: 'Swabbing the clown''s stamp also gives clown cells. + + :cl:' + IsaacExists: + - rscadd: You may choose a color preference for your blindfold with the blindness + quirk. + LT3: + - bugfix: Fixed timing issue where tram crossing signals would be out of sync with + the moving tram + - bugfix: Tram crossing signals consistently show green when safe, blue when broken + - bugfix: Tram crossing signals show red instead of yellow when degraded + Pickle-Coding: + - bugfix: Fixes the brig cell timer adjustment not working correctly on live timers. + - bugfix: Fixes paradox clones using a different voice from the owner. + RedBaronFlyer: + - rscadd: Janitorial keyrings are now part of every janitor's toolkit instead of + just the first one. + Sadboysuss: + - bugfix: curator whip will no longer disarm when parried + - qol: you now don't need to weld a closet to install/uninstall electronics/card + readers. + ShizCalev: + - bugfix: Syndicate AI can no longer be selected via the station law upload console. + - bugfix: Non-syndicate borgs can no longer accidentally be slaved to syndicate + AI by pulsing their AI wires. + - bugfix: Syndicate borgs can no longer be slaved to the station AI by pulsing their + AI wires. + - bugfix: Syndicate operatives onboard the station can no longer end up with an + objective to destroy their own syndicate AI. + SyncIt21: + - bugfix: autolathes don't hang when printing items in areas without apc or if it + runs out of materials mid printing + Wayland-Smithy: + - bugfix: Pre-Loaded Syndicate Intellicard AI's no longer appear in PDA messenger. + Whoneedspacee: + - bugfix: Bubblegum can no longer melee you while using his charge abilities. + githubuser4141: + - balance: Antag/Centcom mechs now have top notch un-upgradeable armor out of the + box. You can't add armor to centcom or nukie mechs anymore, but their default + armor rating is a lot higher. + necromanceranne: + - bugfix: The armor plate component only adds the prefix once. + - bugfix: Drake empowerment for berserker armor now uses valuable drake remains, + made from ashdrake hides and bones. + - rscadd: Drake armor is made use drake remains to construct. (This is a net neutral + to the previous recipe) + - qol: Coffee types are overall more consistent, causing jittering only from the + overdose effect. + - bugfix: Pumpkin lattes will actually work like coffee. + nikothedude: + - bugfix: COMSIG_ATOM_POST_DIR_CHANGE should ACTUALLY work now + san7890: + - bugfix: Using the 'ESC' key on your keyboard to unbind a key in the keybindings + preferences menu should now work as expected. This should also be fixed for + people in a variety of other spots too. + zxaber: + - bugfix: 'Tool-based flashes (read: from welders) are no longer incorrectly locked + at flash level 1. Wear proper PPE!' +2024-06-08: + 00-Steven: + - refactor: Refactored wall button code, please report any issues. + - bugfix: Wall buttons actually drop their contents when destroyed. + - sound: Putting items into wall buttons actually plays a sound. This matters for + assembly devices, but airlock electronics do not have a sound. + - qol: Added screentips to wall buttons. + - qol: You can now take out the airlock electronics or assembly device out of wall + buttons individually. Left click prioritises the board, right click prioritises + the device. + - qol: Wall buttons are renamable with a pen when opened. + - qol: Attempting to wrench deconstruct a wall button or put in airlock electronics + or an assembly device when you can't actually gives feedback. + DaCoolBoss: + - bugfix: Fixed entries in config file 'spaceruinsblacklist.txt'. + EnterTheJake: + - balance: Rust walkers' summoning ritual now requires 5 sheets of Titanium instead + of Iron. + - bugfix: Magic resistance grants complete immunity from the passive disgust buildup + from standing on Rusted turfs. + Melbert: + - bugfix: Fix some modifiers to do after speed (sanity, midas gun) stacking when + they shouldn't + MichiRecRoom: + - qol: Personal AI's face display selection is now a radial menu. As a bonus, now + you can see what the faces look like before selecting them. + Rhials: + - bugfix: Only filled graves will impact your mood. + SyncIt21: + - spellcheck: Corrected wrench contextual screentip typo for smart fridge + - refactor: alt right click has been refactored. report bugs on github + - bugfix: techfabs don't runtime & hang when printing in no apc areas + nikothedude: + - rscadd: 'New deathmatch modifier: "Random martial arts"' + projectkepler-ru: + - bugfix: smoking pipe not showing sprite when lit + thegrb93: + - bugfix: Borg emag module jank when no longer emagged + - bugfix: Borg piercing hypospray fail message + zxaber: + - bugfix: Fixed borg chargers (especially unpowered ones) constantly draining a + borg's cell. +2024-06-09: + 00-Steven: + - bugfix: Latejoiners with heterochromatic eyes no longer have the wrong fingerprint + in the security records. + - bugfix: Latejoiners actually have their quirks visible in the medical records. + Ben10Omintrix: + - bugfix: lobstrosities will no longer be able to fish out multiple necropolis chests + DATA-xPUNGED: + - rscadd: NT reports indicate that the Syndicate have increased listening activities + on Icemoon, crew is advised to watch out for possible communication interference. + DustanHache: + - bugfix: Lobstrosities are no longer pre-cooked through bluespace shenanigans. + Goat: + - bugfix: mobs no longer move during cutscenes + Jackraxxus: + - admin: The auto-mute system yells at you harder when you send a bunch of identical + messages. + Majkl-J: + - bugfix: The orbit menu clicks are accurate again + - bugfix: Fixes several service and item-handling borg modules not functioning + Melbert: + - balance: Coders are now locked to the coderbus + Rhials: + - rscadd: Adds some more station-trait dependent pulsar star reports. Keep an eye + on that roundstart command report! + ShizCalev: + - bugfix: Basic bots are now in the proper faction and will no longer be targeted + by turrets. + - bugfix: The spooky element will now apply the spooked mood event when someone + is spooked. + - bugfix: Fixed spookers getting a popup message when spooking mobs not actively + controlled by a player. + - bugfix: Seeing heretical stuff while having the heresy phobia will now apply the + heresy mood event. + - bugfix: Seeing skeletons while having the skeleton phobia will now apply the spooked + (by skeletons) mood event. + - bugfix: Getting surgically cut open while conscious will now give you the "THEY'RE + CUTTING ME OPEN!!" surgical mood event. + TheBoondock: + - sound: added operating sounds for wrench, wirecutter and crowbar + Thlumyn: + - bugfix: add general engineering access to birdshot engineering entrance + Time-Green: + - bugfix: admins can force rulesets on background checks station trait (fucking + lame) + Watermelon914: + - spellcheck: Intern announcer no longer has a weird space before the introduction + message. + Wayland-Smithy: + - bugfix: Fixed Silicons not being able to (un)lock Air Alarms. + Zenitheevee: + - bugfix: fish with the Anxiety gene wont die when in the same loc as any 3 items + carlarctg: + - qol: Adds a chat message for fishing in a chasm with a normal and rescue hook, + to clarify that only rescue hooks can drag up corpses. + grungussuss: + - spellcheck: all instances of reactive armor are now spelt the same + improvedname: + - balance: Roundstart mutadone pills now have less chems in them from 50 to 5 + krookodilehunter: + - spellcheck: fixes bad raptor grammar + mc-oofert: + - code_imp: stacking machine consoles check in area instead of a tiny view range + on init + thegrb93: + - bugfix: Fixes admin borg panel upgrade functions + tmyqlfpir: + - rscadd: Added new circuit camera components + - qol: Circuit drones can now recharge at recharge stations + zxaber: + - qol: Plexagon Access Management now tells you that you need an ID Trim before + applying a Template, rather than silently failing. +2024-06-10: + EuSouAFazer: + - qol: The ERT's ship has better mapping now. + Higgin: + - bugfix: energy bolas now work on prone targets and don't leave behind a fake item + when they whiff. + - balance: buffed healing values of helbital, probital, lenturi, hercuri, syriniver, + musiver, and tirimol for their respective damage types. + - balance: Tirimol now uses oxygen as a catalyst rather than consuming it over time + making it easier to make without babysitting. Tirimol now requires much more + careful management of impurity in order to make Super Melatonin. + - rscadd: medical chem vendors now sell bottles of calomel, a potent full-range + chemical purger. + Iamgoofball: + - balance: Changelings now do not like fire, as is tradition. + - balance: If they are on fire, they no longer generate chemicals until they put + the fire out. + - balance: If they are on fire, they no longer can use any changeling powers until + they put the fire out. + - balance: All changeling equippable items like armblades, shields, armor, spacesuits, + etc. are now flammable and super-duper vulnerable to flames. + - balance: The Armblade now costs 30 chemicals to equip, and has a DNA cost of 3, + compared to the previous 20 chemicals and 2 DNA cost. + - rscadd: The Armblade now shatters after enough uses in exactly the same way as + the Shield; extract genomes with Absorb to maximize your Armblade's efficiency. + for its' chemical cost. + - bugfix: Fixes items you're holding not catching on fire alongside the rest of + you when you light on fire. + - bugfix: Fixes the Changeling Shield having one more hit than it was supposed to. + IsaacExists: + - bugfix: You may no longer submit, or obtain, a spy bounty for the contractor baton. + LT3: + - rscadd: Telecoms now has a central tram controller + - rscadd: Tram controller is now included in communications blackout event + - qol: Tram malfunction event only stops tram once, requiring engineering to reset + (no tools required) + - qol: Tram malfunction event no longer sends a Central Command announcement when + fixed + - rscdel: Tram doors no longer force crush you during tram malfunction event + - rscdel: Silicons can no longer control the tram when communication is lost + - bugfix: Tram doors can now be constructed and assemblies built + - bugfix: Emergency opening tram doors no longer spam balloon alerts + - bugfix: Tram doors open faster on arrival + - bugfix: Tram doors correctly force close on attempt 3 + NewyearnewmeUwu: + - bugfix: Fixes certain quirks being erased by slimeperson cloning. + Time-Green: + - rscadd: Adds a positronic sphere to bepis tech and roboticist mail goodies. It + can now wreack havoc across the robotics lab while whining for a DURAND body, + but you can also punt it! + WebcomicArtist: + - rscadd: Added zaukerite (high damage/embed, low AP) and metallic hydrogen (High + AP and piercing, but low embed) crossbow ammo for the rebar crossbows + - rscadd: Added healium crystal ammo for the crossbow as well, which heals whomever + you shoot it at. + - rscadd: Added admin-only supermatter crossbow bolts that dust you, because why + the hell not. + - rscadd: Added non-harmful paper balls. Can be shot from a crossbow, or thrown + at co-workers. + - rscadd: Added a quiver made from cutting an o2 tank in half, to hold it all. + - image: added sprites for all the above. + - balance: Traitor Engineer Crossbow ammo now does 55 damage instead of 45, to make + it compete with revolver. + - balance: Stressed Rebar Crossbow now has a shorter delay required to rack it, + but can shoot you in the face on misfire. + - bugfix: fixed rebar crossbow shots not dropping items on hitting walls + - bugfix: fixed traitor crossbow having worse wound chance than the base one + - sound: added new crossbow firing sound effect +2024-06-11: + Addust: + - bugfix: The Syndicate has corrected some technical issues at a listening post + in the Icemoon. + DaCoolBoss: + - rscadd: The Lizard's Gas ruin in Lavaland has been revamped, and now dispenses + plasma gas fuel. + EnterTheJake: + - rscadd: adds the MOD shock-absorption module, into the game. + - rscadd: The MOD shock-absorption module into the the uplinks, costs 4 TC. + - balance: Nukie modsuits come with the shock_absorption module preinstalled. + EuSouAFazer: + - rscadd: New room in Wawastation, the Cytology Lab! Positioned behind the test + fire range. + IsaacExists: + - bugfix: Eastern icebox visitation door no longer missing a floor tile. + grungususs: + - bugfix: fixed the hole in lawyer's office on tramstation + improvedname: + - qol: Adds additional piping to wawastation ordnance + - bugfix: Adds a missing atmos waste vent for wawastation + junkgle01: + - bugfix: Polishes up new Meta Cargo's decals and associated amenities. +2024-06-12: + Goat: + - bugfix: blood drunk miner can now path over lava + NewyearnewmeUwu: + - balance: Pacifists can now use psychotic brawling, at major mood costs. + PowerfulAtom111: + - rscadd: after a quick galactic meeting, insane people around the universe can + now speak gibbering to express their ideas free from the prying ears of the + walls + - rscadd: as an insane person, taking your meds deafens your ears to the holy tongue + all the other insane people are speaking + - spellcheck: added a bit of text to the RDS quirk and the RDS medical record text + to highlight the insane's new abilities + aaaa1023: + - bugfix: there is now one more crayon in the Mortidrobe. + grungussuss: + - bugfix: fixed getting a fake white dwarf report when the shift isn't extended + mode, which lead to meta knowledge being used. + munchyi: + - rscadd: 'added a new virtual domain + + :cl: + + ![image](https://github.com/tgstation/tgstation/assets/154919526/2d94fe21-bc45-40dc-9f84-4b69088b353c)' + norsvenska: + - bugfix: The recyclers in the snow cabin gateway, the cyborg mothership, and the + deep storage space ruin are now rotated properly. + r3dj4ck0424: + - rscadd: Added another ruin to Lavaland + sylvia-from-fulp-station: + - image: Adds a unique sprite for envyknife + uaioy: + - qol: the first Medieval pirate to spawn will be the Warlord, warlord and crude + helmet have flash protection + - bugfix: Medieval shuttle has actual engines now + - bugfix: Shortsword has its original colours + - bugfix: Crude helmet no longer makes you bald +2024-06-13: + Capsandi: + - sound: Some ambience tracks are quieter now. + Goat: + - bugfix: Enviro suit lights no longer stay on when the welding visor is activated. + Kocma-san: + - rscadd: Added new keywords (%d, %date, %t, %time) for fields + LT3: + - sound: You can now experience tram crashes in higher fidelity than ever! + Majkl-J: + - bugfix: EMPs on carbons no longer happen twice + - code_imp: Moves organ emps under bodyparts, changes how bodyparts handle emp effects + Melbert: + - rscadd: Character Loadouts + - rscdel: Pride Pin quirk (it's in the Loadout menu now) + - refactor: Over 200 item interactions have been refactored to use a newer, easier-to-use + system. Report any oddities with using items on other objects you may see (such + as surgery, reagent containers like cups and spray bottles, or construction + devices), especially using something at range (such as guns or chisels) + - refactor: Item-On-Modsuit interactions have changed slightly. While on combat + mode, you will attempt to "use" the item on the suit instead of inserting it + into the suit's storage. This means being on combat mode while the suit's panel + is open will block you from inserting items entirely via click (but other methods + such as hotkey, clicking on the storage boxes, and mousedrop will still work). + - refactor: The detective's scanner will now be inserted into storage items if clicked + normally, and will scan the storage item if on combat mode + - balance: Taking stamina damage in stamcrit has diminishing returns associated, + meaning you cannot be infinitely stamcrit. + Rhials: + - bugfix: The "mopper" gimmick assistant outfit spawns with one cart instead of + nine. + SyncIt21: + - bugfix: ' RCD, RPLD & RTD cancels their build process if their design is changed + during build.' + carlarctg: + - qol: Cult pylons slowly close bleeding wounds + - refactor: allowed aura healing to clot wounds shut +2024-06-14: + Addust: + - bugfix: the syndicate now imports warm air instead of cold air to their icemoon + listening post + Goat: + - qol: Mining's PKAs and PKCs are now fireproof. + JupiterJaeden: + - qol: you can now take pulled objects with you when going up and down in zero gravity + - bugfix: conga lines now work correctly when going up and down ladders, and in + zero gravity + Kocma-san: + - bugfix: special networks are now displayed in the fax if it is the only one in + the world + MGOOOOOO: + - bugfix: Missing legs no longer slow you down in non-gravity environments. + - bugfix: Catwalk deconstruction yields iron rods as intended. + Rex9001: + - balance: Moon Smile only does a knockdown if the targets sanity is low enough + and the minimum duration of its abilities have been decreased + ShizCalev: + - bugfix: Autolathes now print the correct number of cable coils. + - bugfix: Fixed a bug with station traits being added to modify weights for events + that couldn't actually occur on the current map! + SyncIt21: + - refactor: Ctrl click & Ctrl shift click has been refactored. Please report bugs + on GitHub + - refactor: Mouse drag & drop attack chain has been refactored. Report any bugs + on GitHub + - bugfix: You cannot close the cryo tube on yourself with Alt click like before + Watermelon914: + - qol: Bots can now bind voice lines to an action slot. Lowers cooldown for all + bot voicelines to 5 seconds. + carlarctg: + - balance: Corpses won't remain cultists when ghouled by a flesheretic + cnleth: + - balance: Juicing and distilling plants only consumes nutriment and vitamin + - balance: Lanternfruit and polypore mushrooms now contain nutriment + - balance: Increased the amount of nutriment in sugarcane and saltcane + jlsnow301: + - rscadd: Added screentips to extinguishers. + - bugfix: Fixed alt-click interaction with extinguishers and mod control units. + junkgle01: + - bugfix: added an id trim painter that was missing to MetaStation's QM office. + larentoun: + - balance: Now regaining a tail has three states. If you got your tail back - you'll + get a temporarily debuff in exchange of infinite "tail missing" debuff (new). + If it's NOT your tail and of same species - this temporarily debuff will be + a bit stronger (new). If it's NOT your tail and NOT of same species - it will + be a considerably stronger debuff (currently on live). + lizelive: + - qol: make the cart hold 2.5x more water + necromanceranne: + - bugfix: Peter Jr. is capable of surviving in the environment they spawn in. + thegrb93: + - bugfix: Fix bug where you can't interact with a shocked door without shock protection + even if it is depowered. +2024-06-15: + BurgerBB: + - bugfix: Tweaks some instances of get_safe_turf so things like the nuclear disk + doesn't accidentally teleport to the Icebox Syndicate Base + EnterTheJake: + - image: Rust Heretic's blade now has a new, slicker sprite. + Exester509: + - balance: Phazon mechs use ectoplasm cores now + - balance: You can now acquire ectoplasm cores from the science supply interface + Goat-Real: + - bugfix: Icebox's service hall now now has a regular hand labeler. + GoblinBackwards: + - bugfix: Fixed thermal pistols sometimes not recognising an equipped holster when + trying to spin them to recharge. + Jacquerel: + - bugfix: Neutralising an anomaly cannot produce more anomaly cores than are supposed + to exist in a single round + LucyGrind: + - bugfix: Crayons now fit in pdas + MTandi: + - image: Updated slime sprites + Melbert: + - bugfix: Human mousedropping + - qol: Attack animations for cult spells on attackable objects (people, airlocks) + - bugfix: Fix cult spells on non-attackable objects (metal sheets, blood decals) + - bugfix: Humans can't cough on menthol again + - bugfix: Moth and lizard emotes decide what sound to play based on body type, not + gender. + - sound: '*gasp now makes a sound, it''s the same as *gaspshock.' + - sound: Xenos (or anything with hands) can clap + - balance: Re-adds Bagulo + - balance: 'The max number of bluespace cores available to the crew has been reduced + to 3 (was: 8)' + - balance: Chucking a BoH into an uncharged singulo may save the station. + - sound: Portals made by portal guns now make sounds as expected + - sound: Wormholes from the wormhole event now make sounds when formed + - bugfix: Heirophant Club Blink at range + - bugfix: Crusher Loot + - bugfix: RCD material reclamation + mc-oofert: + - rscadd: the flatpacker, a machine unlocked at industrial engineering +2024-06-16: + Archie700: + - qol: Changes description of steal objective to match the name + EnterTheJake: + - qol: You can now repair portable scrubbers and pumps. + GPeckman: + - bugfix: The reset button in the bluespace launchpad UI should work again. + Goat: + - bugfix: A wrecked shuttle on lavaland no longer has asteroid tiles containing + the danger of space. + - code_imp: Added volcanic versions of all mineral turfs for those that did not + have it. + GoblinBackwards: + - bugfix: Fixed the patient information for the mech sleeper module not displaying + when the mech didn't also have a syringe gun. + Jacquerel: + - rscadd: Cats and Dogs can lick slashing wounds clean. + - rscadd: Basic Mobs with hands can relocate dislocated bones, and pluck eyeballs + out of pulped skulls. + - balance: Gorillas can strangle people. + Melbert: + - bugfix: Fix inability to make r-glass by hand inside your backpack + ShizCalev: + - bugfix: Fixed some surgery failure states not properly setting the correct mood + event. + - refactor: Minor refactor to how surgery events work, there is now better support + for per-surgery mood events! + Wayland-Smithy: + - bugfix: Fixed revenant spawning next to brains and other unharvestable dead mobs. + WebcomicArtist: + - bugfix: Healium bolt now no longer affects silicons. + carlarctg: + - bugfix: Cosmos spells will no longer star mark your steed + - qol: Baby plushies are now smaller than their parents +2024-06-17: + Hacks-The-Doors: + - balance: dental pills can now be used in crit. + - balance: dental pills now give off a message when you start using them + - balance: dental pills have a 2.5 second delay when in soft crit + JackEnoff: + - balance: Certain changeling abilities won't work while on fire. + TheBoondock: + - sound: added compressed air sound for when air tanks are inserted into machinery + grungussuss: + - rscadd: Added Misha the bear to the HoS office on icebox. +2024-06-18: + Bisar: + - balance: Replaced the free reagent purging with actually purging by exploding + someone in the blood while they have omnizine and a purgative in their bloodstream. + Let's go practice medicine! + - bugfix: Fixed the free reagent purging mechanic from causing an explosion so weak + that it doesn't cause any damage. + GPeckman: + - bugfix: Mining borgs can get multiple modkits of the same type installed again. + Goat: + - qol: fire extinguishers can now be filled via stationary tanks. (and water coolers) + GoblinBackwards: + - bugfix: Fixed mulebots being able to run over people who are leaning against a + wall. + - bugfix: Fixed anomaly cores from the high-intensity grav anomaly event creating + the wrong type of reactive armour. + Kaostico: + - bugfix: Transcendent Olfaction mutation now works properly + LucyGrind: + - bugfix: allows cigarette grinding in mortar + MTandi: + - bugfix: Non-metallic slime types are semi-transparent + - balance: Reshuffled tech tree, making nodes more specialized + - qol: Research points devided by the amount generated per second, so now research + points correspond to seconds + - rscadd: Introduced reagent purity scan experiments (required for Cryostasis node) + - rscadd: Introduced synthetic organ scan experiment (required for top tier cyber + organs) + - rscadd: Added a variant of machinery scan experiment that accepts any machines + with upgraded parts (required for tier 3 parts) + - rscdel: Removed material scanning experiments from the tech tree + Melbert: + - qol: Block'd out armor readout, should be more readable now + - bugfix: Crusher Fix For Real + SyncIt21: + - bugfix: ctrl+shift clicking on a ghost will only quick spawn that clicked target + and not you + TheBoondock: + - sound: added squeaky turn and gas hissing sound to gas valve + TheRyeGuyWhoWillNowDie: + - qol: adds a confirmation to malf AI shunting into APCs + mc-oofert: + - bugfix: build mode and space dragons dont harddel on destroy + - bugfix: you may now open the panel of a flatpacker with a screwdriver + san7890: + - qol: A message with a link to publicly accessible logs (if enabled by your server + operators) should now be visible far earlier when a world is about to reboot. +2024-06-19: + Bisar: + - rscadd: The Nanotrasen safety commission reminds employees to properly clean themselves + of all flammable material before going on smoke breaks. + - rscadd: Sparks now ignite flammable things. Including you. Keep a fire extinguisher + handy or stop dousing yourself in welding fuel! + - bugfix: Fixed a few oversights with welding fuel pools not igniting when you throw + lit/hot things into them or when you walk into them while on fire. + GPeckman: + - bugfix: Airlocks should no longer appear closed sometimes when fireman carrying + someone into them. + Jacquerel: + - balance: Gorillas have big fingers, which mostly just prevents them from using + laser pointers and stun batons + - balance: Items held in your hands can catch fire. + - balance: Items you are holding won't catch fire if your hands cannot catch fire. + - balance: When you stop being on fire so will items you are holding. + - balance: If you roll around on your burning items they will stop being on fire. + Melbert: + - bugfix: Fixed hand tele portals being forever + - bugfix: Enabling or disabling ambience mid round will properly enable or disable + ambience + - qol: Added descriptions differentiating "Ship ambience" from "ambience" + TheRyeGuyWhoWillNowDie: + - rscadd: the advanced omnitool upgrade now hastens the mediborg's syringe too + Time-Green: + - refactor: Lizard and moth markings now use the bodypart overlay system + carlarctg: + - balance: Negative mutations now allow you to have more positive mutations, via + reducing your instability! + - code_imp: All mutations have been overall standardized via defines on their instability + values. Many mediocre positive mutations have had their cost reduced significantly! + - rscadd: 'Added a new height mutation: Acromegaly! It''s the opposite of Dwarfism + and makes you uncannily tall. It also makes you hit your head 8% or 4% (with + synch) of the time you pass through airlocks. Wear a helmet!' + - rscadd: Gigantism is now a recipe mutation, mix Acromegaly with Strength to get + it. + - qol: Injectors and activators' duration is now dependent on the in/stability (absolute + value) of the mutations to be injected! With a minimum of 5-10-15 seconds for + each type of injector. Also changed up a bit how part upgrade cooldowns work, + by making each tier reduce cooldowns by 25-15-10% for each injector type. + jlsnow301: + - bugfix: TGUI say will no longer spill your /me contents when you get attacked +2024-06-20: + Absolucy: + - qol: Prettied up the Chemical Analyzer's output in chat, making it easier to read, + especially when scanning multiple things. + Ben10Omintrix: + - rscadd: vendrobes may have mothroaches inside them + - rscadd: mothroaches will now seek out clothes to eat them + FlufflesTheDog: + - bugfix: limbs that are both robotic and something else can be repaired properly + GPeckman: + - bugfix: The chaplain altar can once again be buckled to. + LT3: + - spellcheck: Melon fruit bowl now comes with a side of foreshadowing for people + who want to experience an explosion of flavour + MTandi: + - bugfix: Fixed techweb app showing wrong designs on Details button click + - bugfix: Fixed new compressor UI + - refactor: Compressor UI to TypeScript + - qol: Simplified Compressor UI layout + - bugfix: Made 10 MJ & 20 MJ cells properly correspond to tiers 1 & 2 in lathes. + - image: Updated cell sprites to correspond to other stock parts of their tiers. + - image: Updated plasma cell, 500KJ cell and 2.5MJ cell sprites + - qol: APC has wires for machinery/lights/environment channels + Metekillot: + - bugfix: Sparks will no longer turn areas with wooden furniture or similar into + naught but a field of ashes; they no longer ignite furniture, (unless it's made + of plasma(?!)) and have a decreasing chance to ignite items bigger than small + size. + Rhials: + - bugfix: Fixes a door in the Fredington Fasting Bear Five Nights and Fnafbears + map. + - balance: The energy bola slowdown has been (roughly) halved, to allow for more + retaliation when used on a criminal. + SyncIt21: + - bugfix: Techfabs now print 5x cable coil + - bugfix: no more runtimes when dragging turfs onto other stuff + - code_imp: most actions now properly check for recursive locs & better adjacency + - bugfix: You can move around ui buttons in your action bar + Vishenka0704: + - qol: Ability to delete characters(yourself) + grungussuss: + - bugfix: mimes can now break their vow while borged or an MMI + mc-oofert: + - bugfix: wawa centcom interns may actually leave the stationside dock + - bugfix: wawa hop office and cap office get keycard auths + - bugfix: wawa disposals blast doors work properly + - bugfix: wawa med elevator controls on the bottom floor are accessible + - bugfix: sci entrance actually has access restrictions + - bugfix: gasping makes sound now +2024-06-21: + 00-Steven: + - refactor: Updated cards/ids to use the proper item interaction system instead + of attackby, please report any issues. + - bugfix: You can no longer recolour an ID at any point if you open the menu but + then don't select anything until later. + - bugfix: ID cards can be recoloured using crayons/spraycans again. + - qol: Prisoner IDs show genpop sentence time in hours/minutes/seconds instead of + seconds. + - qol: Prisoner IDs have genpop usage tips in their examine. + ArcaneMusic: + - qol: Vending machines now give audio feedback when you restock a vending refill + and get a payout. + - qol: The Restock tracker NTOS app for tracking vending machine contents now works + on all consoles, and comes pre-installed on the cargochat cargo computers. + - balance: Vending machines now offer a bit more credits when missing contents at + the start of a round after getting restocked. + BeagleGaming1: + - rscadd: Added disks for accelerator modkits and crusher trophies to the bitrunning + vendor + Bisar: + - rscadd: Ashwalkers are now better at riding, taming animals, and fishing. + - code_imp: Behavior for the settler trait has been partially atomized into several + traits instead. + EdgeLordExe: + - rscadd: Adds Feast of Owls ritual to heretic which allows one to forsake their + ascension in exchange for immediate power. + GPeckman: + - bugfix: When on 'stream' mode, the cleaning spray from a bottle of space cleaner + should no longer be blocked by just about everything. + Goat: + - bugfix: Icebox's raptor den is now lined with asbestos and lead and no longer + gets hit with radiation. + JackEnoff: + - bugfix: Repurposed Glands (Adrenals) now show their correct duration and chemical + cost in its description. + LT3: + - bugfix: Fixed paramedics not having access to the Icebox NanoDrug using the west + airlock + MTandi: + - image: New gibber sprite + - image: New food/slime processor sprite + - balance: Added ordnance to extra access of geneticists and roboticists + - balance: Reduced parts scanning tests' machine count to 4 from 8 + - balance: Reduced augmented organs scanning tests mob count to 1 from 2 + - balance: Reduced equipped mech scanning test count to 1 from 2 + - balance: Added polycrystal option to bluespace crystal scan test + - bugfix: Allowed NTNet relay in away circuit imprinter for NT Frontier app + - qol: NT Frontier app installed on RD and Scientists` PDAs by default + - qol: Updated NT Frontier app to be more user-friendly + Rex9001: + - bugfix: lunatics now get their hud properly + - bugfix: lunatics now get objectives + - qol: ascended moon heretics are now labelled as ringleaders and are easier for + lunatics to spot + Rhials: + - balance: DRAGnets now come with a beacon they can be synced to, which will set + the destination for the snare round's teleport ability. + SmArtKar: + - image: Resprited all jetpacks + SyncIt21: + - bugfix: breaking an APC will depower the area + Xander3359: + - bugfix: Fix rust heretic being unable to rust walls or floors + grungussuss: + - bugfix: Welding protection module for MODsuits protect flash-sensitives from welding + arcs + mc-oofert: + - rscadd: every engineering lobby starts with a flatpacked flatpacker and multitool + - bugfix: fixed wrong access on one door on wawastation and also made lights on + elevators not break (On Wawastation) + necromanceranne: + - rscadd: Replaces the Particle Acceleration Rifle with the Event Horizon anti-existential + beam rifle. It shoots black holes. You can make this in-game. That's right, + YOU! + - balance: Only one vortex anomaly can be made in a round. + projectkepler-ru: + - bugfix: Wawastation bridge now has the correct access on their suit storage and + medkit now actually starts filled + r3dj4ck0424: + - bugfix: puts tiles under the wawa tool storage doors + - bugfix: allows you to access a door and a fire alarm on wawa's prison second floor +2024-06-22: + AyIong: + - qol: Fullscreen mode can now be toggled by pressing F11 or the button at the top + right + Bisar: + - bugfix: Felinids no longer remember losing their tail and regaining it roundstart; + you need to do it during the round to get that mood event. + FlufflesTheDog: + - bugfix: sanitization on citation pda alerts + JupiterJaeden: + - bugfix: Conga lines of more than 2 no longer break when going up and down stairs. + MelokGleb: + - image: added sprite for debug heretic painting + Mothblocks: + - qol: Dramatically improves delete character UI and UX. + Thunder12345: + - rscdel: Locker staffs have been removed from the Ragin' Mages deathmatch lootcrate + pool. + mc-oofert: + - bugfix: borg factory gives you your preference borg name +2024-06-23: + Donglesplonge: + - balance: most livestock crates, with some exception, have been made cheaper to + facilitate healthier mental states in the crew, go build a farm! + jlsnow301: + - bugfix: 'Bitrunning made more illegal: Increased the rate at which antags spawn.' + - bugfix: '"Temporary" bitrunning antagonists and spawners are made actually temporary. + You will return to your original body after death, just like CTF.' + - rscadd: Added more examine text for ghosts to bitrunning equipment. + - balance: Server cooldown reduced by 1 minute at base level. + - rscadd: As an observer, you can now switch views between station and virtual domain + by clicking the hololadder and netpod respectively. + - rscdel: Removed the starfront saloon BR map. + - bugfix: 'Syndicate assault map: Added pistols, reduced exploits.' +2024-06-24: + Bisar: + - balance: Sparks have been heavily adjusted; they only affect items made of plasma, + pools of welding fuel, flammable people, cigarettes, and items that contain + reagents... for now. Their long-standing behavior of igniting flammable gas + has been untouched. + DATA, with sounds by Beebblie: + - sound: Added sounds for turning on and off internals. + GoblinBackwards: + - rscadd: Breathing nitrium now has a chance to make you burp. + Kocma-san: + - bugfix: you can hold Ian in your arms + LT3: + - bugfix: Smartfridge will now correctly respond 'no power' instead of 'forbidden + item' when it doesn't have power + LucyGrind: + - bugfix: crayons interact with washing machine once again + Melbert: + - bugfix: Touch Spells now apply click CD again + - bugfix: Touch Spells now apply fingerprints again + - bugfix: Touch Spells now check if your hands are blocked again + - bugfix: Fixed plate shards not randomizing icon correctly + - qol: Gives plate sharts a more fitting hitsound / caltrop sound, gives them a + set caltrop stun duration (instead of default) + - bugfix: Fix DNA vault probes + - bugfix: Bloody footprints now go until you run out of blood on your feet instead + if only a single tile + - rscadd: Adds an effect for emagging an emag + - rscadd: Adds an effect for emagging a fake emag + Paxilmaniac: + - rscadd: Electric eels now prefer used car batteries for bait. + Rhials: + - bugfix: Admin-only deadchat broadcasts don't append a second "this message is + for admins only" string for every admin online. + ShizCalev: + - qol: Oven trays now count as valid trays to cut food on. + - rscadd: The game settings menu can now actually be accessed through the escape + menu. +2024-06-25: + 00-Steven: + - refactor: Modular computers (PDAs, laptops, etc) and their applications have had + their item interaction logic refactored. Please report any issues. + - bugfix: You can deposit cash into IDs inside of PDAs by slapping it against the + PDA again. + ArcaneMusic: + - admin: Admins have a new secret to mass revive and heal all players on the server. + Bisar: + - bugfix: The light eater can now again eat lights from things with lights. + DaCoolBoss: + - spellcheck: fixed typos in a few heretic items + - spellcheck: rewrote parts of the lunar heretic's abilities, items and traumas + - spellcheck: rewrote GLA device's description for clarity + - spellcheck: Grapple gun's description has been updated. + Fluffles: + - bugfix: emoji show up in the messenger UI + - bugfix: emoji show up in the message server monitor UI + - bugfix: you can adjust your pda ringtone in-game + - bugfix: having an empty pAI in your pda doesn't break ringtones + - bugfix: pdas specifically set to not consume power don't constantly switch to + messenger + - bugfix: you can use the quick-reply button for messages while resting + - bugfix: deadchat pda messages show the imprinted sender's name instead of whoever + is holding the pda + - bugfix: emoji show up in deadchat pda messages + FlufflesTheDog: + - bugfix: printed medical beds are no longer randomly offset + Goat: + - rscadd: Added boards for the library's book binder and scanner, printable at the + service fabricator once computer tech is researched. Spritework done by lepiromano. + GoblinBackwards: + - bugfix: Fixed ctrl-click not dragging the bluespace gas sender or hydroponics + trays. + Guestify: + - bugfix: Fixed secbots and mulebots bold text + IsaacExists: + - spellcheck: Shrapnel removal messages now have closing parenthesis, removed unnecessary + punctuation. + - spellcheck: The nutriment pump implant's description in the lathes are no longer + typo'd. + Jacquerel: + - bugfix: Minebots, Tamed Wolves, and Regal Rat Minions will now give you some space + if you start attacking yourself, rather than joining in. + MGOOOOOO: + - bugfix: Orange balloons are no longer invisible in the hand slot. + MTandi: + - qol: NT Frontier app now allows to select experiments from inserted data disks + - bugfix: Autopsy experiments for techweb can be performed roundstart + MrDas: + - bugfix: Fixed the duration of wizard's mutate spell. + Rhials: + - sound: The abductor team now has their own antag stinger. + - bugfix: Drone fabricator subtypes that spawn pre-loaded now actually start with + materials inside. + - bugfix: The binocular fabriactor on the MediSim shuttle works again. + ShizCalev: + - image: Foam darts in the magazine of a toy/riot C20R45 will now show the correct + color corresponding to the type of said dart loaded in it instead of a generic + bullet sprite. + SmArtKar: + - bugfix: Fixed crayons not being usable on anything except turfs (including washing + machines) + - rscadd: You can now click pens! Clickity clickery click! + - bugfix: E-Daggers can now break lockers/other renamable objects, and pendrivers + can now extract their electronics. + - code_imp: Most pen typechecks now check for writing implements. + SyncIt21: + - bugfix: you can piggyback on players again + - bugfix: you can strip someone while lying down + - bugfix: paraplegics can buckle others & themselves to chairs & mobs + - qol: improved feedback messages when an action cannot be done + mc-oofert: + - bugfix: wawa ordnance air alarms dont send alerts roundstart + - qol: wawa ordnance gets more portable atmos machines to compensate for having + next to no actual portable atmos machines + - bugfix: wawa ordnance gets 3 random roundstart cores (forgor to add) + necromanceranne: + - bugfix: The Infiltrator module now has the same welding protections as the engineering + module. + - bugfix: The infiltrator module now properly protects you from head impacts. Helpful + if you wipe out on your hoverboard while fleeing the cops. + - code_imp: Improves the definitions for welding protection values. + - bugfix: The Stimmed mutation now has the appropriate instability value for a largely + meaningless mutation. + - rscadd: The nullblade, a nullrod variant that is weaker outright, but can inflict + severe wounds by performing a sneak attack. Debilitate your target or attack + from behind. + - bugfix: The shortsword sprite no longer has a misaligned handle. + - code_imp: Organized the nullrod file, and removed some unnecessary subtyping on + various types of nullrods. + norsvenska: + - bugfix: '[IceBox] The Head of Personnel''s Requests Console announcements now + correctly display the HoP as the announcer, rather than "Unknown"' + san7890: + - bugfix: You should no longer attack mobs that don't have a chest in the chest + (bots). + the-orange-cow: + - bugfix: Medicated suture, advanced regenerative mesh, and mourning poultice reactions + should more consistently spawn the items they are meant to produce. + uaioy: + - spellcheck: fixed typo in raptor emote + vinylspiders: + - bugfix: fixes an issue that was causing the quirk config tooltips to render behind + the window, making them nearly impossible to read. + zxaber: + - bugfix: Refactored borg omnitool code, fixing most of the unique interaction issues. +2024-06-26: + Ben10Omintrix: + - refactor: vibebots are not basic bots + - rscadd: vibebots will now seek out the depressed and cheer them up + FlufflesTheDog: + - bugfix: multi-z hole repair works better, especially when the turf below is blocked + by items + GPeckman: + - bugfix: Analyzers should work on bioscrambler anomalies again. + GoblinBackwards: + - bugfix: Interacting with an assembly bomb in hand will now allow you to interact + with the attached assembly instead of opening the gas tank UI. Right-clicking + will display the gas tank UI instead. + Guestify: + - bugfix: The visor of the welding mask no longer goes down when you enable internals + NewyearnewmeUwu: + - qol: ' The xenobio console''s monkey placing command also clears dead monkeys + on the tile.' + SmArtKar: + - bugfix: Spraycans can once more paint things. + - bugfix: RND console now properly rounds research points + SyncIt21: + - bugfix: alt click runtime no more when using style meter + - code_imp: improved alt & ctrl click code + Vekter: + - balance: The Event Horizon Anti-Existential Beam Rifle now requires Unregulated + Bluespace Research to be constructed. + Watermelon, Mayhazah: + - balance: Drastically reduces the power consumption and max charge of power cells + - balance: Added a new stock part called the battery, used primarily in the construction + of APCs and SMESs. + - rscadd: Suiciding with a cell/battery will shock you and potentially dust you/shock + the people around you if the charge is great enough. + carlarctg: + - bugfix: There's now a limit to how many dental implants you can cram into your + mouth, which is governed by your species' teeth limit. + - refactor: Most species have 32 teeth, due to being based on humans, weirding me + out when thinking about their teeth, or lack of enough information + - refactor: Moths and flypeople have NO teeth. They CAN'T get dental implants. I'm + NERFING moths. + - refactor: Lizards have seventy-five (!!!) teeth. Lizards are weird. + hyperjll: + - balance: Thanks to incredible strides in selective slime breeding, slimes require + substantially less nutrients to grow into adults, and split into children. + jlsnow301: + - rscadd: 'Bitrunning: You can now choose your hacker alias in prefs.' + - rscadd: Bit avatars get orbit icons. + mc-oofert: + - qol: space dragon can see in the dark and the invalid rift location alert is more + informative + - rscadd: wawastation stand-in shuttle + - bugfix: durand shield doesnt immediately depower the mech when taking stamina + damage + - balance: durand shield is a bit stronger +2024-06-28: + Ben10Omintrix: + - refactor: firebots are now basic bots + Deadgebert: + - rscadd: Crystallizer boards added to Delta and Tram HFR rooms + GPeckman: + - bugfix: Protolathes/Circuit Imprinters/Techfabs with better parts should now print + items faster again. + GremlinSeeker: + - bugfix: Fixed disconnected APC on birdshot and other minor service fixes. + Kapu1178: + - bugfix: MODsuit pathfinder module works. Again. + - code_imp: AI pathfinding should produce slightly better paths. + MTandi: + - rscdel: Removed tank dispenser UI to use left/right clicks instead + - rscadd: There is a chance that Spess Knife will be in a mail for engi and clowns + - qol: Updated Microscope UI + - qol: Microscope is easier to use - you can remove dish with right click and swap + dishes + Melbert: + - bugfix: Fixed cyborg omnitools being unusable on some things + - bugfix: Fix timestop being 1 tile too small again, and fixes a lot of other field + effects from being 1-small as well + - sound: Glug-glug sound when dragging a leaking gas tank + - bugfix: Lizards and Moths don't deathgasp twice when they die + Melberte: + - rscadd: Cool Sword Cursor Maintenance App + ShizCalev, SpaceLove: + - refactor: Techweb strings are defined now so to maintain modularity + - balance: Research papers will have less overall point generation. + SmArtKar: + - bugfix: Retracted pens can be put into PDAs + SyncIt21: + - qol: adds examines, screentips & balloon alerts for flatpacker, flatpack box & + cart + - qol: adds correct material colour insertion animation for flat packer, continuous + progress bar animation during printing + - qol: flat packer has a separate icon when you open its maintenance panel, eject + button is disabled when no board is inserted + - qol: ejecting the board will place it in your hand, use ctrl click shortcut to + eject board from flatpacker + - bugfix: you cannot deploy a flat packed box on a turf that has dense objects(like + other flat packed boxes & such) + - bugfix: you cannot insert hologram/abstract items into a flat packer or flatpack + cart, also can hit them with any objects when in combat mode + - bugfix: you can deconstruct a flat packer with a crowbar after opening its maintenance + panel + - bugfix: correct cost of the design scaled with `creation_coefficiency` is displayed + in the UI + - code_imp: overall improved code quality of all things flat pack related + - bugfix: actions buttons can be dragged anywhere again + Viralmilk22: + - rscadd: Shifted up the service departments on Birdshot. + - rscadd: Added an arcade. + alien3301: + - balance: Mediborg surgical omnitool upgrade makes the health analyzer advanced + carlarctg: + - bugfix: Fixed hunger affecting your speed in nograv + hyperjll: + - balance: 'Due to selective breeding of slimes, some species require roughly 3x + more plasma than normal to activate a plasma reaction. Slime extracts affected + are: Oil, Adamantine, Orange, and Gold. Yellow slimes require 3x more blood + to activate a blood reaction.' + - balance: Oil slime extracts have become less potent during a plasma reaction due + to selective breeding conditions. + - balance: Gold slime extracts give rise to one less monster during a plasma reaction + due to selective breeding conditions. + - balance: Yellow slime extracts have become less potent during a blood reaction + due to selective breeding conditions. + - balance: Adamantine golem shells require 3 sheets rather than 1, due to unknown + circumstances. + necromanceranne: + - bugfix: Headprotector modules and constructor modules work properly once more. + - bugfix: Space heaters do not completely drain their starting cell while trying + to change their room temperature by a few degrees. + uaioy: + - bugfix: infiltrator modsuit sprite is not misaligned anymore + vinylspiders: + - qol: 'polypore mycelium no longer contains sugar, preventing it from instantly + creating fringe weaver beverage when ground up. qol: sugar may be acquired from + grinding fireblossoms instead of polypore mycelium.' +2024-06-29: + Bisar: + - rscadd: Ashwalkers now start out allied to lavaland fauna (except for raptors). + Attacking the fauna will break this alliance with the attacked beast and any + who witness it. + - bugfix: Ashwalkers are now actually in the ashwalker faction, instead of the neutral + one. + EnterTheJake: + - rscadd: A new Anomaly organ has been introduced, The Voltaic Combat Cyberheart! + Higgin: + - bugfix: Mood buffs/penalties are now properly equal on both positive/negative + sides. + JackEnoff: + - balance: Changelings regenerate chemicals faster when not on fire + - balance: Changelings regenerate chemicals slower when on fire + MGOOOOOO: + - qol: The "Dental Implant" surgery no longer forces itself to restart after implanting + one pill. Now implanting pills in the surgery has another step to either search + the patient's mouth for another tooth to implant, or cauterization to end the + surgery. + Melbert: + - bugfix: Fixed modsuit interactions slightly. No longer requires combat mode to + use tools on it, plasma core works as intended as well. (Using combat mode, + however, will make you insert the item) + - refactor: Refactored lockboxes + - refactor: Refactored medbot skin application + Moonlit2000: + - bugfix: peg legs can't bleed + ShizCalev: + - bugfix: Toggling ambient ship sounds will now instantly turn it on/off. + - bugfix: Deafened mobs will no longer hear the station's ambient sounds. + - bugfix: Fixed ambient sounds resetting their loop when entering different bodies + (ie admin ghosting, being moved to other mobs, ect.) + - bugfix: Monkeys that become sentient through the sentience helmet will no longer + be notified that they can ventcrawl. + - bugfix: Airlocks will now correctly said what other airlock they are cyclelinked + with. + - bugfix: Portaturrets no longer go invisible when unwrenched from the ground. + SmArtKar: + - code_imp: Rewrote a portion of storage UI code to allow it to be influenced by + UI style. + - image: Prettified storage UI and made it affected by UI theme. + - image: Ripley and Ripley-based mechs now have consistent outlines + SyncIt21: + - bugfix: Holodeck closet & crate items are marked as holograms as well + - bugfix: Holodeck closet & crate items delete themselves when the program is changed + - bugfix: you can access your inventory when lying down + TheBoondock: + - sound: added liquid pouring sounds to pouring of any reagents + Thlumyn: + - bugfix: fixed active turfs in icebox listening post + Vekter: + - bugfix: Fixed the visibility of a pipe in Northstar's ordnance lab + - rscadd: Bitrunners can now access specific bounties asking for the item rewards + from specific bitrunning domains. + - bugfix: Fixed bitrunner pulling from a pool of literally every bounty available. + - bugfix: Fixes the door-bolting buttons in the dorms and bathrooms on Birdshot. + aaaa1023: + - bugfix: Removed a bush trapped inside a wall above morgue on Tramstation + carlarctg: + - rscadd: Reworked blood loss effects on the user to be much more noticeable. + - code_imp: Changed the blood volume defines to be based on the BLOOD_VOLUME_NORMAL + define, with a multiplier of blood loss applied, to be more understandable. + - rscadd: Added tons of new mutations to Genetics, alongside some recipes! + - rscadd: Thermal Adaptation has been made a combination mutation from the stronger + but narrower Cold and Heat adaptations. + - balance: Cryobeams have 9 tile range, and fiery sweat doesn't cause spread on + contact. + - image: Added some neat new sprites for the new mutations, and added a greyscale + version of the magic hand sprites. + - code_imp: Infinitesmally improved mutation code. + delingar: + - bugfix: Lavaland elite are at lavaland fauna faction now + hyperjll: + - bugfix: Inducers now accept megacells AND regular cells. + junkgle01: + - bugfix: added a keycard auth to QM room + necromanceranne: + - bugfix: Emergency firesuits no longer hide your gloves. + - qol: Punching bags are now a equal method of training to the fitness machinery. + - qol: Boxing grants more experience overall for participation. +2024-06-30: + Exester509: + - spellcheck: Fixed two typos in the heretic lore + Ghommie: + - bugfix: cigarettes and vapes are no longer treated as clothing (eg. They no longer + get shredded and need to be repaired with... cloth). + GoblinBackwards: + - bugfix: Fixed gas canister shields turning themselves off in unpowered areas when + they weren't drawing any cell power. + LT3: + - code_imp: Blood filter only pings and says finished when it's actually finished + Sadboysuss: + - bugfix: fixed cyborgs and monkeys not being able to buckle to chairs + SmArtKar: + - bugfix: Storage no longer deletes all of its viewers upon being deleted + - bugfix: Storage UI now renders properly + - bugfix: Guns no longer can be overfilled by 1 bullet + - bugfix: Russian revolvers now spawn with only 1 live round as originally intended, + and click when firing a blank. + Xander3359: + - bugfix: Fix being unable to add a flux core to new the combat heart cybernetic + aaaa1023: + - bugfix: Fixed the camera offset for the navigation console on a handful of Whiteships. + - bugfix: Fixed the Pubby Whiteship drifting sideways through hyperspace when in + flight. + - bugfix: Fixed the Kilo Whiteship flying backwards through hyperspace when in flight. + - bugfix: The Birdshot Whiteship should actually be able to spawn now. + - spellcheck: fixed spelling of "aggressive" in the shuttle manipulator description + for the Birdshot Whiteship. + carlarctg: + - spellcheck: Syndicate jaws of life are now jaws of death! + - spellcheck: Made its desc. more descriptive, stating that its faster. + - rscadd: Heretics can now sacrifice Cultists for sweet loot. + - rscadd: Cultists can now sacrifice Heretics for sick trinkets. + - rscdel: Removed Bastard Blade from the game, code, and life + - balance: Aggressive Spread now rusts non-turfs next to you as well + - balance: Raise Construction cd raised to 7, now breaks rust walls as well, improved + autoaim making it actually usable midfight + - refactor: Auto-aim code now works on any atoms if configured + grungussuss , Kayozz: + - sound: exosuit fabricators, Autolathes and Techfabs will now produce sounds when + printing items + grungususs: + - bugfix: fixed the name of a request console in the medical sec outpost on metastation + mc-oofert: + - bugfix: both engineers and roboticists may now access the controls of a firebot diff --git a/html/changelogs/archive/2024-07.yml b/html/changelogs/archive/2024-07.yml new file mode 100644 index 0000000000000..6b82931730018 --- /dev/null +++ b/html/changelogs/archive/2024-07.yml @@ -0,0 +1,303 @@ +2024-07-01: + Ben10Omintrix: + - balance: raptors will now knock off their rider and disable them if hit by any + energy projectiles or if they recieve any stamina damage + Chestlet: + - bugfix: Nanotrasen sent us a batch of faulty canisters. They've been recalled + and replaced with less faulty canisters. + - bugfix: Zauker SM interaction works correctly now. + DaCoolBoss: + - image: Relics ("strange objects") now have unique sprites. + Iajret: + - bugfix: fixed blood loss knocking you down at somewhat safe (~80%) blood levels + LemonInTheDark: + - rscadd: Shield generators and shield gen walls now glow a light blue. Pretty! + MTandi: + - qol: Made light tiles available in the crafting menu + - qol: Circuit tile variants can be cycled in-hand + - rscadd: Moved loose tiles and wall frames from lathe designs to other tiles and + frames in the crafting menu + Melbert: + - rscadd: Humanizing a monkey removes undergarments such as socks + - qol: Handheld Genetic Scanners fit in Geneticist equipment suit storage + Pickle-Coding: + - code_imp: Supermatter zap power generation takes perspective of the machines subsystem. + Rhials: + - rscadd: Bounty Hunter teams now have personalized announcements for when they + are spawned in. + ShizCalev: + - bugfix: The power for all science burn chambers across all maps now works properly. + SmArtKar: + - image: Captain's spare safe received a new texture + - bugfix: Vent-born wendigos no longer create one-way portals + - image: Decluttered card textures + - bugfix: You can grind slime extracts in reagent grinders once more. + - bugfix: Pyrokinesis bolts no longer have infinite range and create trails of fiery + doom. + - qol: RD's labcoat is now classified as an actual labcoat instead of a glorified + jacket, allowing them to put science-related stuffs into it + - image: You can now toggle RD's labcoat + ViktorKoL: + - rscadd: Added a new UI for heretic research. + Wallem: + - rscadd: The detective now starts with the DET.ekt Skillchip, which allows them + to identify chemicals and bloodtypes by taste. + YesterdaysPromise: + - image: updated halloween metoer sprites. + aaaa1023: + - qol: 'Increased the viewrange in the navigation camera console on the following + shuttles: Silverscale pirate shuttle, the Flying Dutchman pirate shuttle, the + IRS pirate shuttle, and the Greytide pirate shuttle.' + - bugfix: Fixed the Battlecruiser corvette, Silverscale pirate shuttle, and the + Greytide pirate shuttle flying in incorrect directions in hyperspace. + - bugfix: Fixed the Navigation console camera eye on various pirate ships being + off centre. + carlarctg: + - spellcheck: Heretic spell invocations now use one dead language per path. Altered + a few invocation types. + grungussuss: + - qol: Windoors now stay open for 8 seconds instead of 5 + - qol: Secure windoors now stay open for 5 seconds instead of 2 + mc-oofert: + - bugfix: brig cell timer ui works properly now + - bugfix: wawastation arrivals has firealarms so you may now leave + necromanceranne: + - bugfix: Mecha weaponry is capable, for the first time ever, of experiencing recoil. + This was an intended mechanic, I promise. The code just literally never worked. + - bugfix: Mecha bump melee attacks and click melee attacks are now on the same cooldown, + but have varying cooldown timers. You will always bump attack faster than you + will click. + - bugfix: You must be in combat mode to punch objects and to bumpsmash into objects. + - bugfix: Stops mecha being able to punch literally any object and damage them. + - code_imp: Tidies up some of the autodoc comments for mech weapons. + spockye: + - bugfix: fixed Wawastation areas + - bugfix: fixed wawastation disposals + thegrb93: + - bugfix: Game not refocusing after closing a TGUI + xXPawnStarrXx: + - rscdel: Removed cordons on deathmatch maps, since they're autoadded now. +2024-07-02: + 00-Steven: + - code_imp: Moved bedsheet bin interactions to the item interaction code. Please + report any issues. + - qol: Made bedsheet bin tool interactions right click, such that left click is + consistently for putting in items. + - qol: Added usage screentips to bedsheet bins. + - qol: Added more feedback to failing to hide items in bedsheet bins. + - sound: Made putting items in bedsheet bins not silent (If the items have associated + pickup/drop sounds). + - code_imp: Deconstructing light switches now uses the proper tool action and tool + usage code, please report any issues. + - bugfix: Attempting to deconstruct a light switch by unscrewing it no longer makes + you hit it even on a success. + - sound: Deconstructing a light switch actually plays tool usage and deconstruction + sounds. + - qol: Deconstructing light switches is now a left click with a screwdriver parallel + to other unscrewing actions. + - bugfix: Screentips for deconstructing a light switch no longer show up on every + item EXCEPT screwdrivers. + - qol: Added an examine hint denoting light switches are screwed to the wall. + - qol: Added visible messages for someone deconstructing a light switch parallel + to deconstructing intercoms. + Bisar: + - qol: Loot panels should update more predictably and informatively now. + - code_imp: Lootpanels have more consistent logic on when they automatically update. + Jolly: + - code_imp: Behind the scenes, maps had a little bit of tweaking. If you see things + rendering in weird ways, or they don't look like how they used to/supposed to, + please report them on GitHub! + Kapu (ported by StrangeWeirdKitten): + - bugfix: Ambience buzz will now respect ship ambience prefrences for observers. + - sound: Ambience buzz requires APC enviorment power to function + Kocma-san: + - qol: you can now swap pens in pdas + LemonInTheDark: + - bugfix: Some varieties of snow now visually melt properly again when burned + ShizCalev: + - bugfix: Fixed a number of shuttles having parts (such as lattices) completely + disappearing. + - bugfix: Fixed the ceilings above shuttles on station maps being full-bright. + - bugfix: Fixed lattices sometimes appearing at random locations in space on station + maps. + - bugfix: Cleaned up a number of accidentally placed objects in space across all + station maps. + - bugfix: Fixed a false positive with the mapload_space_verification unit test failing + on turfs that weren't actually part of shuttles. + - code_imp: Added a unit test that automatically finds all base space turfs with + objects on them, as well as non-space turfs that are set to space areas (meaning + that these squares weren't lit properly.) + SmArtKar: + - bugfix: You no longer get dusted upon trying to store your supermatter sliver. + - bugfix: Fulton animation is no longer sideways. + - bugfix: Hand of Midas now works point-blank. + TheBoondock: + - sound: added pickup and drop sound for beakers + carlarctg: + - bugfix: Fix /datum/weakref appearing when linking airlock heretic portals + hyperjll: + - bugfix: 'Hostile plant monsters (EX: Killer Tomatoes) no longer act hostile toward + Seedlings.' + jlsnow301: + - bugfix: Fixed some UI bugs in the power monitor screen. + lorwp: + - bugfix: extinguishers now can be filled with subtypes of water again (Namely, + holy water) + mc-oofert: + - balance: Facehuggers dont make people go to sleep but muffles speech + - code_imp: Very very minor xenomorph code cleanup + - refactor: Muzzles are now an element + - balance: portable air scrubbers scrub in a 3x3 square + hold as much gas as a + canister + nikothedude: + - rscadd: Being cursed now enables disembowlements/cranial fissures outside of hardcrit +2024-07-03: + 00-Steven: + - bugfix: Fixed telekinesis letting you grab people at a distance, and teleport + them to you by strangling them. + DaCoolBoss: + - bugfix: Removed three traitor posters from Cargo Warehouse's walls. (Metastation) + - balance: Added one traitor poster each to the QM's Office, Vault and Evidence + Storage to compensate. (Metastation) + - rscadd: Ghost role food truck merchants may occasionally turn up at the station. + - rscadd: Adds a new fugitive hunter type, MI13 secret agents. + DrDiasyl aka DrTuxedo: + - sound: Shoves now produce more meaty sound! + GremlinSeeker: + - bugfix: fixed Birdshot bar and surrounding areas not properly connected to the + power grid. + LT3: + - qol: Crew monitor defaults to sort by vitals + MTandi: + - image: New linen bin / basket sprites + - qol: It is easier to do some required techweb experiments on Charlie station now + - bugfix: Fixed experimental dissection surgeries giving too many points + - balance: 'Techweb: Moved NTNet relay back to tcomms node' + - balance: 'Techweb: Moved blood pack and chem pack to the starting node' + MrDas: + - bugfix: Bolas now slowdown properly. + - bugfix: Cult bolas no longer leave in-hand sprite when they ensnare to non-cult + user. + OrbisAnima: + - bugfix: Fixed the basic Sandwich recipe and tags, now it matches the description + and original intent. + - bugfix: Brought the fishing rewards experiments to normal values. + - bugfix: Bio Emergency crates now bring Bio Suits and Hoods compatible with the + Security Hoods and Suits Schematics. + Rhials: + - balance: All cameras in bathrooms and showers have been removed. + SmArtKar: + - bugfix: Dark matteors no longer claim that they have missed when they actually + impacted the station + - image: Fixed shading on some metal ingots. + Sosmaster9000: + - balance: 'Xenobiologists now have a BZ-filled containment pen. Don''t breathe + that! + + balance:Some items which either cannot be printed elsewhere or are part of game + progression (e.g. teleporter endpoints and, of course, Nanners) have been moved. + Alien Spawnpoints are in the same spot.' + bob-b-b: + - rscadd: Added flatpacker & multitool to all R&D labs + carlarctg: + - rscdel: Removed Trichromatic Larynx per @mothblocks decision that it looks uggo. + - rscdel: Replaced heckacious laryncks' color and size changes with random bolding, + italics, and underlining. + - rscadd: Stoner has been un-locked and replaces TL in the above's recipe. + - bugfix: Fixed elastic arms users being unable to use abstract items like mending + touch or shock touch. + - bugfix: Fixed mending touch being bad + mc-oofert: + - bugfix: portascrubbers also scrub the tile theyre on +2024-07-04: + 00-Steven: + - code_imp: Moved bedsheet interactions to the item interaction code. Please report + any issues. + - bugfix: Bedsheets adjust their offset to match that of the living they're tucking + in. + - sound: Bedsheets use the cloth drop/pickup sounds instead of being silent. + - qol: You can tuck someone in telekinetically. + ArcaneDefence: + - rscadd: You can now microwave station pets that you can pick up, with predictable + outcomes + Ben10Omintrix: + - bugfix: fixes mansus grasp not clearing runes + - bugfix: fixes not being able to clean microwaves + Bisar: + - bugfix: Dastardly clowns will no longer be able to get counted for three times + the steps by moving diagonally. + Ghommie: + - bugfix: Fixed toggleable screen colors for glasses. + - code_imp: De-hardcoded, refactored the above, now-fixed feature. + - rscadd: Pumpkin hardhats and the hood of the flash suit now affect the color of + your screen. + - rscadd: Prism glasses, obtainable through xenobiology crossbreeding, now also + affect the color of your screen. + - qol: You no longer need to reach the very edge of the game screen to reach the + maximum zoom range when scoped. + LT3: + - sound: Changed blood filter cycle sound + MTandi: + - image: Fixed the cargo crate having wrong stripe width in open state + - rscadd: Added Pipe Scrubber portable atmos machine + Melbert: + - rscadd: Humonkeys and random corpse spawns now look more... human. + Paxilmaniac: + - image: The sprites for the projectile dampener field have been updated + Profakos: + - bugfix: Instruments enhanced with portable tuning can perform the rites that have + been granted + SmArtKar: + - image: Some gloves have received new sprites + - bugfix: Mending touch no longer damages non-humans + - rscdel: You can no longer get turned into a dullahan by a genetic meltdown + - refactor: Refactored genetic meltdown code into datums, making it more extendable. + - image: Updated diamond stacks to fit its "unstacked" version. + - refactor: Bayonet attachment is now a component. + SyncIt21: + - bugfix: omni crowbar tool interaction for replacing tiles has been fixed + - bugfix: techfab screentip does not runtime when you hover over it with an omnitool + multitool + - bugfix: medi borgs can do brain surgery again + - code_imp: improved multitool & general tool code for some machines + - bugfix: you can hold your wound while resting via ctrl click + - bugfix: material container won't consume the contents of an item if that item + itself is rejected for any reason + - qol: you can use any storage medium & not just bags/boxes to dump stuff into material + containers + - code_imp: improved mouse drag & drop code + - code_imp: Improves cpu performance of transferring & removing reagents + - bugfix: plumbing machinery should have consistent volumes throughout the course + of its operations + - bugfix: plumbing iv drop now only accepts reagents from ducts but won't put reagents + back into it i.e. it only has a input pipe + Thunder12345: + - bugfix: Birdshot's AI core no longer has windoors concealed under open shutters. + ViktorKoL: + - rscadd: the Feast of Owls now leaves more dramatic messages in your chat + - sound: the Feast of Owls now has a little theme + carlarctg: + - qol: Transhumanist and prosthetic limb no longer conflict. If you pick the same + limb for both it uses the weaker prosthetic (dumbass) + - code_imp: Made the name for prosthetic limb global list more intelligible + jlsnow301: + - bugfix: Reverts the fully interactive lootpanel, please just refresh it if you + want to see new contents + - rscadd: 'Added a bitrunning deathmatch map: Island Brawl. Both ghosts and runners + get many more spawns than normal.' + - bugfix: Lowered the static vision time in domain load in. + - bugfix: Bitrunning hacker aliases are now much more permissive + mc-oofert: + - rscadd: 254 new vox lines + - balance: removed tasers, the unfirable turret gun, death wand, polymorph wands + and the enchanted modsuit from lootbox loot tables + - bugfix: lootbox guns should now mostly not have syndicate firing pins so you can + actually use them + - bugfix: deathmatch OSHA Violator map has actually functioning field gens now + - bugfix: being polymorphed in deathmatch does not count you dead + - bugfix: deathmatch cyborgs may not talk in binary + - qol: deathmatch map names are sorted alphabetically + - spellcheck: deathmatch final destination clown and chef loadouts have been renamed + to avoid confusion + - rscadd: mecha wire that shoots you or anyone nearby if pulsed or cut + - bugfix: mecha shock wire shocks you diff --git a/html/typing_indicator.html b/html/typing_indicator.html new file mode 100644 index 0000000000000..2988edff55fa0 --- /dev/null +++ b/html/typing_indicator.html @@ -0,0 +1,46 @@ + + + + + + + + + diff --git a/icons/area/areas_ruins.dmi b/icons/area/areas_ruins.dmi index 9f5929274d16c..f4b67ee6495fa 100644 Binary files a/icons/area/areas_ruins.dmi and b/icons/area/areas_ruins.dmi differ diff --git a/icons/area/areas_station.dmi b/icons/area/areas_station.dmi index 66098018f7598..724073905b593 100644 Binary files a/icons/area/areas_station.dmi and b/icons/area/areas_station.dmi differ diff --git a/icons/effects/64x64.dmi b/icons/effects/64x64.dmi index fab690318416c..2ae6d40fc33fb 100644 Binary files a/icons/effects/64x64.dmi and b/icons/effects/64x64.dmi differ diff --git a/icons/effects/bitrunning.dmi b/icons/effects/bitrunning.dmi index 8efa429389c3a..9a2e9c0228a57 100644 Binary files a/icons/effects/bitrunning.dmi and b/icons/effects/bitrunning.dmi differ diff --git a/icons/effects/cult/effects.dmi b/icons/effects/cult.dmi similarity index 100% rename from icons/effects/cult/effects.dmi rename to icons/effects/cult.dmi diff --git a/icons/effects/effects.dmi b/icons/effects/effects.dmi index dab4f272d96ba..67b8ea51c1850 100644 Binary files a/icons/effects/effects.dmi and b/icons/effects/effects.dmi differ diff --git a/icons/effects/eldritch.dmi b/icons/effects/eldritch.dmi index 91fa9ff4f538b..9676a833588eb 100644 Binary files a/icons/effects/eldritch.dmi and b/icons/effects/eldritch.dmi differ diff --git a/icons/effects/fields.dmi b/icons/effects/fields.dmi index f87e1f3975e86..1e42870787674 100644 Binary files a/icons/effects/fields.dmi and b/icons/effects/fields.dmi differ diff --git a/icons/effects/mapping_helpers.dmi b/icons/effects/mapping_helpers.dmi index 8bfe0af0854d4..47684f4664e89 100644 Binary files a/icons/effects/mapping_helpers.dmi and b/icons/effects/mapping_helpers.dmi differ diff --git a/icons/effects/mouse_pointers/cool_sword.dmi b/icons/effects/mouse_pointers/cool_sword.dmi new file mode 100644 index 0000000000000..a34fa56d87d3c Binary files /dev/null and b/icons/effects/mouse_pointers/cool_sword.dmi differ diff --git a/icons/effects/random_spawners.dmi b/icons/effects/random_spawners.dmi index 08df14c0ffc99..ed6c0c8702e45 100644 Binary files a/icons/effects/random_spawners.dmi and b/icons/effects/random_spawners.dmi differ diff --git a/icons/effects/effects_rcd.dmi b/icons/effects/rcd.dmi similarity index 100% rename from icons/effects/effects_rcd.dmi rename to icons/effects/rcd.dmi diff --git a/icons/misc/buildmode.dmi b/icons/hud/buildmode.dmi similarity index 100% rename from icons/misc/buildmode.dmi rename to icons/hud/buildmode.dmi diff --git a/icons/misc/pic_in_pic.dmi b/icons/hud/pic_in_pic.dmi similarity index 100% rename from icons/misc/pic_in_pic.dmi rename to icons/hud/pic_in_pic.dmi diff --git a/icons/hud/screen_alert.dmi b/icons/hud/screen_alert.dmi index d66bd0b995dee..dda7d6cc635af 100644 Binary files a/icons/hud/screen_alert.dmi and b/icons/hud/screen_alert.dmi differ diff --git a/icons/hud/screen_clockwork.dmi b/icons/hud/screen_clockwork.dmi index 0923e42e7e429..17e0c92972e25 100644 Binary files a/icons/hud/screen_clockwork.dmi and b/icons/hud/screen_clockwork.dmi differ diff --git a/icons/hud/screen_detective.dmi b/icons/hud/screen_detective.dmi index aed6e0d6572a5..9704ca96f4c12 100644 Binary files a/icons/hud/screen_detective.dmi and b/icons/hud/screen_detective.dmi differ diff --git a/icons/hud/screen_glass.dmi b/icons/hud/screen_glass.dmi index 63ad3293921b8..6b6d9d515c5f0 100644 Binary files a/icons/hud/screen_glass.dmi and b/icons/hud/screen_glass.dmi differ diff --git a/icons/hud/screen_midnight.dmi b/icons/hud/screen_midnight.dmi index 5483ddf4564a5..8a6f2e1e8e06c 100644 Binary files a/icons/hud/screen_midnight.dmi and b/icons/hud/screen_midnight.dmi differ diff --git a/icons/hud/screen_operative.dmi b/icons/hud/screen_operative.dmi index f2d60d394acc9..73afee5b3ca40 100644 Binary files a/icons/hud/screen_operative.dmi and b/icons/hud/screen_operative.dmi differ diff --git a/icons/hud/screen_plasmafire.dmi b/icons/hud/screen_plasmafire.dmi index 5423d3855b2b6..b0b2c7999c92d 100644 Binary files a/icons/hud/screen_plasmafire.dmi and b/icons/hud/screen_plasmafire.dmi differ diff --git a/icons/hud/screen_retro.dmi b/icons/hud/screen_retro.dmi index b4252109d6847..a0d5abf3be511 100644 Binary files a/icons/hud/screen_retro.dmi and b/icons/hud/screen_retro.dmi differ diff --git a/icons/hud/screen_slimecore.dmi b/icons/hud/screen_slimecore.dmi index a75fe55c37839..84a7abec2be5f 100644 Binary files a/icons/hud/screen_slimecore.dmi and b/icons/hud/screen_slimecore.dmi differ diff --git a/icons/hud/screen_trasenknox.dmi b/icons/hud/screen_trasenknox.dmi index 2569d2a635edd..00ad01258a36a 100644 Binary files a/icons/hud/screen_trasenknox.dmi and b/icons/hud/screen_trasenknox.dmi differ diff --git a/icons/mob/actions/actions_cult.dmi b/icons/mob/actions/actions_cult.dmi index f73f5bb6367fa..7725ae691b4c6 100644 Binary files a/icons/mob/actions/actions_cult.dmi and b/icons/mob/actions/actions_cult.dmi differ diff --git a/icons/mob/actions/actions_ecult.dmi b/icons/mob/actions/actions_ecult.dmi index c7744749abb97..3ce72ae54ffe7 100644 Binary files a/icons/mob/actions/actions_ecult.dmi and b/icons/mob/actions/actions_ecult.dmi differ diff --git a/icons/mob/actions/actions_genetic.dmi b/icons/mob/actions/actions_genetic.dmi index 9ead1795fe72e..497abffe67451 100644 Binary files a/icons/mob/actions/actions_genetic.dmi and b/icons/mob/actions/actions_genetic.dmi differ diff --git a/icons/mob/actions/actions_spells.dmi b/icons/mob/actions/actions_spells.dmi index fb8c121218ffc..b8d3c3ce34b54 100644 Binary files a/icons/mob/actions/actions_spells.dmi and b/icons/mob/actions/actions_spells.dmi differ diff --git a/icons/mob/animal_item_head.dmi b/icons/mob/animal_item_head.dmi deleted file mode 100644 index 6afabf22f76de..0000000000000 Binary files a/icons/mob/animal_item_head.dmi and /dev/null differ diff --git a/icons/mob/clothing/back.dmi b/icons/mob/clothing/back.dmi index 30469c85dae02..be83d83d4228c 100644 Binary files a/icons/mob/clothing/back.dmi and b/icons/mob/clothing/back.dmi differ diff --git a/icons/mob/clothing/belt.dmi b/icons/mob/clothing/belt.dmi index b0e74178ce1cf..a2d318adfb7d1 100644 Binary files a/icons/mob/clothing/belt.dmi and b/icons/mob/clothing/belt.dmi differ diff --git a/icons/mob/clothing/belt_mirror.dmi b/icons/mob/clothing/belt_mirror.dmi index 37658b154dbcb..9594f6227730f 100644 Binary files a/icons/mob/clothing/belt_mirror.dmi and b/icons/mob/clothing/belt_mirror.dmi differ diff --git a/icons/mob/clothing/hands.dmi b/icons/mob/clothing/hands.dmi index a670c33b7dcf6..ded01542e31b6 100644 Binary files a/icons/mob/clothing/hands.dmi and b/icons/mob/clothing/hands.dmi differ diff --git a/icons/mob/clothing/head/helmet.dmi b/icons/mob/clothing/head/helmet.dmi index 74df620a5721f..8b29c935f5ea7 100644 Binary files a/icons/mob/clothing/head/helmet.dmi and b/icons/mob/clothing/head/helmet.dmi differ diff --git a/icons/mob/clothing/head/spacehelm.dmi b/icons/mob/clothing/head/spacehelm.dmi index 181e5eb2e6865..0b9f3d4a36eb4 100644 Binary files a/icons/mob/clothing/head/spacehelm.dmi and b/icons/mob/clothing/head/spacehelm.dmi differ diff --git a/icons/mob/clothing/mask.dmi b/icons/mob/clothing/mask.dmi index 3a213d5275ccd..c877c2fcb8826 100644 Binary files a/icons/mob/clothing/mask.dmi and b/icons/mob/clothing/mask.dmi differ diff --git a/icons/mob/clothing/modsuit/mod_clothing.dmi b/icons/mob/clothing/modsuit/mod_clothing.dmi index 793c14ce115ff..64affedb2de4c 100644 Binary files a/icons/mob/clothing/modsuit/mod_clothing.dmi and b/icons/mob/clothing/modsuit/mod_clothing.dmi differ diff --git a/icons/mob/clothing/neck.dmi b/icons/mob/clothing/neck.dmi index a193fbd74a8e3..ed0bb34b46449 100644 Binary files a/icons/mob/clothing/neck.dmi and b/icons/mob/clothing/neck.dmi differ diff --git a/icons/mob/clothing/suits/armor.dmi b/icons/mob/clothing/suits/armor.dmi index 3f51d089d9bb1..eb7a525e4b78f 100644 Binary files a/icons/mob/clothing/suits/armor.dmi and b/icons/mob/clothing/suits/armor.dmi differ diff --git a/icons/mob/clothing/suits/jacket.dmi b/icons/mob/clothing/suits/jacket.dmi index fa93a85c7c6f1..869966528b2e9 100644 Binary files a/icons/mob/clothing/suits/jacket.dmi and b/icons/mob/clothing/suits/jacket.dmi differ diff --git a/icons/mob/clothing/suits/labcoat.dmi b/icons/mob/clothing/suits/labcoat.dmi index 37cb0e8696bdb..7edbf91840518 100644 Binary files a/icons/mob/clothing/suits/labcoat.dmi and b/icons/mob/clothing/suits/labcoat.dmi differ diff --git a/icons/mob/clothing/suits/spacesuit.dmi b/icons/mob/clothing/suits/spacesuit.dmi index 3c381ecd56f94..0067c4bf36a8c 100644 Binary files a/icons/mob/clothing/suits/spacesuit.dmi and b/icons/mob/clothing/suits/spacesuit.dmi differ diff --git a/icons/mob/clothing/suits/utility.dmi b/icons/mob/clothing/suits/utility.dmi index 40216806f4f9f..0ef867a2866b8 100644 Binary files a/icons/mob/clothing/suits/utility.dmi and b/icons/mob/clothing/suits/utility.dmi differ diff --git a/icons/effects/creampie.dmi b/icons/mob/effects/creampie.dmi similarity index 100% rename from icons/effects/creampie.dmi rename to icons/mob/effects/creampie.dmi diff --git a/icons/mob/effects/genetics.dmi b/icons/mob/effects/genetics.dmi index ebaad5028a25a..76d5224b3c7e7 100644 Binary files a/icons/mob/effects/genetics.dmi and b/icons/mob/effects/genetics.dmi differ diff --git a/icons/effects/cult/halo.dmi b/icons/mob/effects/halo.dmi similarity index 100% rename from icons/effects/cult/halo.dmi rename to icons/mob/effects/halo.dmi diff --git a/icons/mob/huds/antag_hud.dmi b/icons/mob/huds/antag_hud.dmi index 90056e499fd2b..2a916d01d9553 100644 Binary files a/icons/mob/huds/antag_hud.dmi and b/icons/mob/huds/antag_hud.dmi differ diff --git a/icons/mob/huds/hud.dmi b/icons/mob/huds/hud.dmi index a3bbdf2ede075..086e886bab7b2 100644 Binary files a/icons/mob/huds/hud.dmi and b/icons/mob/huds/hud.dmi differ diff --git a/icons/mob/human/bodyparts.dmi b/icons/mob/human/bodyparts.dmi index d6e4472973a32..78be880423c1e 100644 Binary files a/icons/mob/human/bodyparts.dmi and b/icons/mob/human/bodyparts.dmi differ diff --git a/icons/mob/human/species/ghetto.dmi b/icons/mob/human/species/ghetto.dmi new file mode 100644 index 0000000000000..e11701428ebcb Binary files /dev/null and b/icons/mob/human/species/ghetto.dmi differ diff --git a/icons/mob/human/species/lizard/lizard_markings.dmi b/icons/mob/human/species/lizard/lizard_markings.dmi new file mode 100644 index 0000000000000..7cc8f2fa1b8a5 Binary files /dev/null and b/icons/mob/human/species/lizard/lizard_markings.dmi differ diff --git a/icons/mob/human/species/lizard/lizard_misc.dmi b/icons/mob/human/species/lizard/lizard_misc.dmi index ab228f29076f0..346581978e4b7 100644 Binary files a/icons/mob/human/species/lizard/lizard_misc.dmi and b/icons/mob/human/species/lizard/lizard_misc.dmi differ diff --git a/icons/mob/inhands/64x64_lefthand.dmi b/icons/mob/inhands/64x64_lefthand.dmi index 5d4d7c9e7689f..d15a47206f984 100644 Binary files a/icons/mob/inhands/64x64_lefthand.dmi and b/icons/mob/inhands/64x64_lefthand.dmi differ diff --git a/icons/mob/inhands/64x64_righthand.dmi b/icons/mob/inhands/64x64_righthand.dmi index 6cd0f2acebc6a..88ad954734bf5 100644 Binary files a/icons/mob/inhands/64x64_righthand.dmi and b/icons/mob/inhands/64x64_righthand.dmi differ diff --git a/icons/mob/inhands/clothing/gloves_lefthand.dmi b/icons/mob/inhands/clothing/gloves_lefthand.dmi index 6277d146ffc3d..4d191e42939b7 100644 Binary files a/icons/mob/inhands/clothing/gloves_lefthand.dmi and b/icons/mob/inhands/clothing/gloves_lefthand.dmi differ diff --git a/icons/mob/inhands/clothing/gloves_righthand.dmi b/icons/mob/inhands/clothing/gloves_righthand.dmi index 7479dd8c505cc..f8ce306cc9850 100644 Binary files a/icons/mob/inhands/clothing/gloves_righthand.dmi and b/icons/mob/inhands/clothing/gloves_righthand.dmi differ diff --git a/icons/mob/inhands/clothing/masks_lefthand.dmi b/icons/mob/inhands/clothing/masks_lefthand.dmi index 64fcf4d70bd27..cac122916bdd2 100644 Binary files a/icons/mob/inhands/clothing/masks_lefthand.dmi and b/icons/mob/inhands/clothing/masks_lefthand.dmi differ diff --git a/icons/mob/inhands/clothing/masks_righthand.dmi b/icons/mob/inhands/clothing/masks_righthand.dmi index 99f45bd1b17c0..f68f2d905e627 100644 Binary files a/icons/mob/inhands/clothing/masks_righthand.dmi and b/icons/mob/inhands/clothing/masks_righthand.dmi differ diff --git a/icons/mob/inhands/equipment/jetpacks_lefthand.dmi b/icons/mob/inhands/equipment/jetpacks_lefthand.dmi index 113a8349008b8..8096611173054 100644 Binary files a/icons/mob/inhands/equipment/jetpacks_lefthand.dmi and b/icons/mob/inhands/equipment/jetpacks_lefthand.dmi differ diff --git a/icons/mob/inhands/equipment/jetpacks_righthand.dmi b/icons/mob/inhands/equipment/jetpacks_righthand.dmi index 6337f0c0d2a02..8e2ce1de8b2a5 100644 Binary files a/icons/mob/inhands/equipment/jetpacks_righthand.dmi and b/icons/mob/inhands/equipment/jetpacks_righthand.dmi differ diff --git a/icons/mob/inhands/items/touchspell_lefthand.dmi b/icons/mob/inhands/items/touchspell_lefthand.dmi index 1fc8d962aec11..2cf040fcf8d18 100644 Binary files a/icons/mob/inhands/items/touchspell_lefthand.dmi and b/icons/mob/inhands/items/touchspell_lefthand.dmi differ diff --git a/icons/mob/inhands/items/touchspell_righthand.dmi b/icons/mob/inhands/items/touchspell_righthand.dmi index cc3adf5eb1032..d4815fe6b65dc 100644 Binary files a/icons/mob/inhands/items/touchspell_righthand.dmi and b/icons/mob/inhands/items/touchspell_righthand.dmi differ diff --git a/icons/mob/inhands/items_lefthand.dmi b/icons/mob/inhands/items_lefthand.dmi index a2347dc667abc..5515ad69c3486 100644 Binary files a/icons/mob/inhands/items_lefthand.dmi and b/icons/mob/inhands/items_lefthand.dmi differ diff --git a/icons/mob/inhands/items_righthand.dmi b/icons/mob/inhands/items_righthand.dmi index bb2a425194bd2..fdad955fd9a6f 100644 Binary files a/icons/mob/inhands/items_righthand.dmi and b/icons/mob/inhands/items_righthand.dmi differ diff --git a/icons/mob/inhands/weapons/guns_lefthand.dmi b/icons/mob/inhands/weapons/guns_lefthand.dmi index 4c1acc9fa46f0..c1bcd197278b5 100644 Binary files a/icons/mob/inhands/weapons/guns_lefthand.dmi and b/icons/mob/inhands/weapons/guns_lefthand.dmi differ diff --git a/icons/mob/inhands/weapons/guns_righthand.dmi b/icons/mob/inhands/weapons/guns_righthand.dmi index f3a5f34e24723..98788d7371135 100644 Binary files a/icons/mob/inhands/weapons/guns_righthand.dmi and b/icons/mob/inhands/weapons/guns_righthand.dmi differ diff --git a/icons/mob/inhands/weapons/melee_lefthand.dmi b/icons/mob/inhands/weapons/melee_lefthand.dmi index 79a362a009007..dc9cb6e9866c5 100644 Binary files a/icons/mob/inhands/weapons/melee_lefthand.dmi and b/icons/mob/inhands/weapons/melee_lefthand.dmi differ diff --git a/icons/mob/inhands/weapons/melee_righthand.dmi b/icons/mob/inhands/weapons/melee_righthand.dmi index 222f8955396c6..c694a765520d3 100644 Binary files a/icons/mob/inhands/weapons/melee_righthand.dmi and b/icons/mob/inhands/weapons/melee_righthand.dmi differ diff --git a/icons/mob/inhands/weapons/swords_lefthand.dmi b/icons/mob/inhands/weapons/swords_lefthand.dmi index 6a0520ac9da69..b9552c754c082 100644 Binary files a/icons/mob/inhands/weapons/swords_lefthand.dmi and b/icons/mob/inhands/weapons/swords_lefthand.dmi differ diff --git a/icons/mob/inhands/weapons/swords_righthand.dmi b/icons/mob/inhands/weapons/swords_righthand.dmi index 29db3057a2ab9..f132e997658cb 100644 Binary files a/icons/mob/inhands/weapons/swords_righthand.dmi and b/icons/mob/inhands/weapons/swords_righthand.dmi differ diff --git a/icons/mob/landmarks.dmi b/icons/mob/landmarks.dmi index 4f2402389df9f..7d1253b149344 100644 Binary files a/icons/mob/landmarks.dmi and b/icons/mob/landmarks.dmi differ diff --git a/icons/mob/mech_construction.dmi b/icons/mob/mech_construction.dmi deleted file mode 100644 index b7b54e3f70e85..0000000000000 Binary files a/icons/mob/mech_construction.dmi and /dev/null differ diff --git a/icons/mob/mecha.dmi b/icons/mob/mecha.dmi deleted file mode 100644 index f6dcbdec2b7ee..0000000000000 Binary files a/icons/mob/mecha.dmi and /dev/null differ diff --git a/icons/mob/nonhuman-player/cult.dmi b/icons/mob/nonhuman-player/cult.dmi index 9241b138227c5..683ee9bd6fe32 100644 Binary files a/icons/mob/nonhuman-player/cult.dmi and b/icons/mob/nonhuman-player/cult.dmi differ diff --git a/icons/mob/nonhuman-player/netguardian.dmi b/icons/mob/nonhuman-player/netguardian.dmi index 057e7a066c2be..c788c76772b81 100644 Binary files a/icons/mob/nonhuman-player/netguardian.dmi and b/icons/mob/nonhuman-player/netguardian.dmi differ diff --git a/icons/mob/pets.dmi b/icons/mob/pets.dmi deleted file mode 100644 index 8ddeaa0c3f40c..0000000000000 Binary files a/icons/mob/pets.dmi and /dev/null differ diff --git a/icons/mob/pets_held_lh.dmi b/icons/mob/pets_held_lh.dmi deleted file mode 100644 index 1a864db13410a..0000000000000 Binary files a/icons/mob/pets_held_lh.dmi and /dev/null differ diff --git a/icons/mob/pets_held_rh.dmi b/icons/mob/pets_held_rh.dmi deleted file mode 100644 index 39332a7e18e41..0000000000000 Binary files a/icons/mob/pets_held_rh.dmi and /dev/null differ diff --git a/icons/mob/coop_mech.dmi b/icons/mob/rideables/coop_mech.dmi similarity index 100% rename from icons/mob/coop_mech.dmi rename to icons/mob/rideables/coop_mech.dmi diff --git a/icons/mob/mech_construct.dmi b/icons/mob/rideables/mech_construct.dmi similarity index 100% rename from icons/mob/mech_construct.dmi rename to icons/mob/rideables/mech_construct.dmi diff --git a/icons/mob/rideables/mech_construction.dmi b/icons/mob/rideables/mech_construction.dmi new file mode 100644 index 0000000000000..f26dbe17fd036 Binary files /dev/null and b/icons/mob/rideables/mech_construction.dmi differ diff --git a/icons/mob/rideables/mecha.dmi b/icons/mob/rideables/mecha.dmi new file mode 100644 index 0000000000000..0c0f62de4d26e Binary files /dev/null and b/icons/mob/rideables/mecha.dmi differ diff --git a/icons/obj/vehicles.dmi b/icons/mob/rideables/vehicles.dmi similarity index 100% rename from icons/obj/vehicles.dmi rename to icons/mob/rideables/vehicles.dmi diff --git a/icons/mob/silicon/pai.dmi b/icons/mob/silicon/pai.dmi index 2be986d411dbe..260b175f3ae3f 100644 Binary files a/icons/mob/silicon/pai.dmi and b/icons/mob/silicon/pai.dmi differ diff --git a/icons/mob/silicon/robot_items.dmi b/icons/mob/silicon/robot_items.dmi index 5ad091d6c9f86..00c813ace7f48 100644 Binary files a/icons/mob/silicon/robot_items.dmi and b/icons/mob/silicon/robot_items.dmi differ diff --git a/icons/mob/simple/icemoon/icemoon_monsters.dmi b/icons/mob/simple/icemoon/icemoon_monsters.dmi index 6b05cf64580a3..3e53c0a971228 100644 Binary files a/icons/mob/simple/icemoon/icemoon_monsters.dmi and b/icons/mob/simple/icemoon/icemoon_monsters.dmi differ diff --git a/icons/mob/simple/lavaland/lavaland_monsters.dmi b/icons/mob/simple/lavaland/lavaland_monsters.dmi index ffcfb04cbeb5d..3c1d6e9ff6f90 100644 Binary files a/icons/mob/simple/lavaland/lavaland_monsters.dmi and b/icons/mob/simple/lavaland/lavaland_monsters.dmi differ diff --git a/icons/mob/simple/lavaland/raptor_baby.dmi b/icons/mob/simple/lavaland/raptor_baby.dmi new file mode 100644 index 0000000000000..f892a3cb84fab Binary files /dev/null and b/icons/mob/simple/lavaland/raptor_baby.dmi differ diff --git a/icons/mob/simple/lavaland/raptor_big.dmi b/icons/mob/simple/lavaland/raptor_big.dmi new file mode 100644 index 0000000000000..2a89d84c85e3f Binary files /dev/null and b/icons/mob/simple/lavaland/raptor_big.dmi differ diff --git a/icons/mob/simple/lavaland/raptor_icebox.dmi b/icons/mob/simple/lavaland/raptor_icebox.dmi new file mode 100644 index 0000000000000..86b82e7142d8c Binary files /dev/null and b/icons/mob/simple/lavaland/raptor_icebox.dmi differ diff --git a/icons/mob/simple/slimes.dmi b/icons/mob/simple/slimes.dmi index 922d7ec8ea88f..92c8b82c8dbb8 100644 Binary files a/icons/mob/simple/slimes.dmi and b/icons/mob/simple/slimes.dmi differ diff --git a/icons/mob/telegraphing/telegraph.dmi b/icons/mob/telegraphing/telegraph.dmi index de525ead4ee9a..b1ff26a4a1097 100644 Binary files a/icons/mob/telegraphing/telegraph.dmi and b/icons/mob/telegraphing/telegraph.dmi differ diff --git a/icons/obj/antags/cult/items.dmi b/icons/obj/antags/cult/items.dmi index 9a3435dcd833e..fcd5f13c85bf5 100644 Binary files a/icons/obj/antags/cult/items.dmi and b/icons/obj/antags/cult/items.dmi differ diff --git a/icons/obj/antags/cult/structures.dmi b/icons/obj/antags/cult/structures.dmi index 373371f5a2f98..982742e876492 100644 Binary files a/icons/obj/antags/cult/structures.dmi and b/icons/obj/antags/cult/structures.dmi differ diff --git a/icons/obj/antags/eldritch.dmi b/icons/obj/antags/eldritch.dmi index 7f6af6bfe2e65..664311e5c7c47 100644 Binary files a/icons/obj/antags/eldritch.dmi and b/icons/obj/antags/eldritch.dmi differ diff --git a/icons/obj/aquarium.dmi b/icons/obj/aquarium.dmi deleted file mode 100644 index aa37c035791e9..0000000000000 Binary files a/icons/obj/aquarium.dmi and /dev/null differ diff --git a/icons/obj/aquarium/fish.dmi b/icons/obj/aquarium/fish.dmi new file mode 100644 index 0000000000000..ab282e1681be9 Binary files /dev/null and b/icons/obj/aquarium/fish.dmi differ diff --git a/icons/obj/aquarium/supplies.dmi b/icons/obj/aquarium/supplies.dmi new file mode 100644 index 0000000000000..08f4923a0abdd Binary files /dev/null and b/icons/obj/aquarium/supplies.dmi differ diff --git a/icons/obj/aquarium/tanks.dmi b/icons/obj/aquarium/tanks.dmi new file mode 100644 index 0000000000000..44f526f8c9980 Binary files /dev/null and b/icons/obj/aquarium/tanks.dmi differ diff --git a/icons/obj/aquarium_wide.dmi b/icons/obj/aquarium/wide.dmi similarity index 100% rename from icons/obj/aquarium_wide.dmi rename to icons/obj/aquarium/wide.dmi diff --git a/icons/obj/canisters.dmi b/icons/obj/canisters.dmi index 277833976adbb..1555cf0a4782e 100644 Binary files a/icons/obj/canisters.dmi and b/icons/obj/canisters.dmi differ diff --git a/icons/obj/card.dmi b/icons/obj/card.dmi index 95453cb46edc8..0f44555ca965f 100644 Binary files a/icons/obj/card.dmi and b/icons/obj/card.dmi differ diff --git a/icons/obj/cigarettes.dmi b/icons/obj/cigarettes.dmi index 3612c747f50e2..1be85df6c156d 100644 Binary files a/icons/obj/cigarettes.dmi and b/icons/obj/cigarettes.dmi differ diff --git a/icons/obj/clothing/gloves.dmi b/icons/obj/clothing/gloves.dmi index d5099c64e7f65..465340870dd48 100644 Binary files a/icons/obj/clothing/gloves.dmi and b/icons/obj/clothing/gloves.dmi differ diff --git a/icons/obj/clothing/head/helmet.dmi b/icons/obj/clothing/head/helmet.dmi index 02281abe6a3f4..4d43b542051fc 100644 Binary files a/icons/obj/clothing/head/helmet.dmi and b/icons/obj/clothing/head/helmet.dmi differ diff --git a/icons/obj/clothing/head/spacehelm.dmi b/icons/obj/clothing/head/spacehelm.dmi index ee8127e4964bb..c2830a9d9335f 100644 Binary files a/icons/obj/clothing/head/spacehelm.dmi and b/icons/obj/clothing/head/spacehelm.dmi differ diff --git a/icons/obj/clothing/masks.dmi b/icons/obj/clothing/masks.dmi index 568c059a54d78..436785ce6e5e9 100644 Binary files a/icons/obj/clothing/masks.dmi and b/icons/obj/clothing/masks.dmi differ diff --git a/icons/obj/clothing/modsuit/mod_clothing.dmi b/icons/obj/clothing/modsuit/mod_clothing.dmi index 5070dbb145c9c..3de713477b696 100644 Binary files a/icons/obj/clothing/modsuit/mod_clothing.dmi and b/icons/obj/clothing/modsuit/mod_clothing.dmi differ diff --git a/icons/obj/clothing/modsuit/mod_modules.dmi b/icons/obj/clothing/modsuit/mod_modules.dmi index eb4b0c536ce3c..8b4b549eda2ae 100644 Binary files a/icons/obj/clothing/modsuit/mod_modules.dmi and b/icons/obj/clothing/modsuit/mod_modules.dmi differ diff --git a/icons/obj/clothing/neck.dmi b/icons/obj/clothing/neck.dmi index e937d125ec2a4..e8726cfcb73a5 100644 Binary files a/icons/obj/clothing/neck.dmi and b/icons/obj/clothing/neck.dmi differ diff --git a/icons/obj/clothing/suits/armor.dmi b/icons/obj/clothing/suits/armor.dmi index 480d6d9102c5e..0484cf060d033 100644 Binary files a/icons/obj/clothing/suits/armor.dmi and b/icons/obj/clothing/suits/armor.dmi differ diff --git a/icons/obj/clothing/suits/jacket.dmi b/icons/obj/clothing/suits/jacket.dmi index 30e1a99d9eed4..b867e7da3a710 100644 Binary files a/icons/obj/clothing/suits/jacket.dmi and b/icons/obj/clothing/suits/jacket.dmi differ diff --git a/icons/obj/clothing/suits/labcoat.dmi b/icons/obj/clothing/suits/labcoat.dmi index 430d11d5f96ab..4d5796a12b856 100644 Binary files a/icons/obj/clothing/suits/labcoat.dmi and b/icons/obj/clothing/suits/labcoat.dmi differ diff --git a/icons/obj/clothing/suits/spacesuit.dmi b/icons/obj/clothing/suits/spacesuit.dmi index 84f84ac978e85..922ad05c35e7a 100644 Binary files a/icons/obj/clothing/suits/spacesuit.dmi and b/icons/obj/clothing/suits/spacesuit.dmi differ diff --git a/icons/obj/devices/artifacts.dmi b/icons/obj/devices/artifacts.dmi new file mode 100644 index 0000000000000..f9402be79a60e Binary files /dev/null and b/icons/obj/devices/artifacts.dmi differ diff --git a/icons/obj/devices/assemblies.dmi b/icons/obj/devices/assemblies.dmi index c1b0fd05f137c..95c9227ab3aa7 100644 Binary files a/icons/obj/devices/assemblies.dmi and b/icons/obj/devices/assemblies.dmi differ diff --git a/icons/obj/blackmarket.dmi b/icons/obj/devices/blackmarket.dmi similarity index 100% rename from icons/obj/blackmarket.dmi rename to icons/obj/devices/blackmarket.dmi diff --git a/icons/obj/devices/circuitry_n_data.dmi b/icons/obj/devices/circuitry_n_data.dmi index 6a12910283efa..cacf3cf13b736 100644 Binary files a/icons/obj/devices/circuitry_n_data.dmi and b/icons/obj/devices/circuitry_n_data.dmi differ diff --git a/icons/obj/mauna_mug.dmi b/icons/obj/devices/mauna_mug.dmi similarity index 100% rename from icons/obj/mauna_mug.dmi rename to icons/obj/devices/mauna_mug.dmi diff --git a/icons/mob/mecha_equipment.dmi b/icons/obj/devices/mecha_equipment.dmi similarity index 100% rename from icons/mob/mecha_equipment.dmi rename to icons/obj/devices/mecha_equipment.dmi diff --git a/icons/obj/miningradio.dmi b/icons/obj/devices/miningradio.dmi similarity index 100% rename from icons/obj/miningradio.dmi rename to icons/obj/devices/miningradio.dmi diff --git a/icons/obj/modular_laptop.dmi b/icons/obj/devices/modular_laptop.dmi similarity index 100% rename from icons/obj/modular_laptop.dmi rename to icons/obj/devices/modular_laptop.dmi diff --git a/icons/obj/modular_pda.dmi b/icons/obj/devices/modular_pda.dmi similarity index 100% rename from icons/obj/modular_pda.dmi rename to icons/obj/devices/modular_pda.dmi diff --git a/icons/obj/devices/new_assemblies.dmi b/icons/obj/devices/new_assemblies.dmi index 411ad8b61df64..1de208a7736ce 100644 Binary files a/icons/obj/devices/new_assemblies.dmi and b/icons/obj/devices/new_assemblies.dmi differ diff --git a/icons/obj/pda.dmi b/icons/obj/devices/pda.dmi similarity index 100% rename from icons/obj/pda.dmi rename to icons/obj/devices/pda.dmi diff --git a/icons/obj/devices/scanner.dmi b/icons/obj/devices/scanner.dmi index cea20f32f7f38..f02fa0e4ecdbf 100644 Binary files a/icons/obj/devices/scanner.dmi and b/icons/obj/devices/scanner.dmi differ diff --git a/icons/obj/devices/tracker.dmi b/icons/obj/devices/tracker.dmi index 59884c0aff881..39be63ef4de81 100644 Binary files a/icons/obj/devices/tracker.dmi and b/icons/obj/devices/tracker.dmi differ diff --git a/icons/obj/doors/shutters_radiation.dmi b/icons/obj/doors/shutters_radiation.dmi index 657b613b0ccde..2e70b24a4aa2a 100644 Binary files a/icons/obj/doors/shutters_radiation.dmi and b/icons/obj/doors/shutters_radiation.dmi differ diff --git a/icons/obj/fishing.dmi b/icons/obj/fishing.dmi index 92d7da8238ad3..92d1cf9a12231 100644 Binary files a/icons/obj/fishing.dmi and b/icons/obj/fishing.dmi differ diff --git a/icons/misc/beach.dmi b/icons/obj/fluff/beach.dmi similarity index 100% rename from icons/misc/beach.dmi rename to icons/obj/fluff/beach.dmi diff --git a/icons/misc/beach2.dmi b/icons/obj/fluff/beach2.dmi similarity index 100% rename from icons/misc/beach2.dmi rename to icons/obj/fluff/beach2.dmi diff --git a/icons/obj/fluff/previews.dmi b/icons/obj/fluff/previews.dmi index c62b055f71efd..8a69c1363189d 100644 Binary files a/icons/obj/fluff/previews.dmi and b/icons/obj/fluff/previews.dmi differ diff --git a/icons/obj/food/containers.dmi b/icons/obj/food/containers.dmi index aea93b956fc3b..6c2eda1986633 100644 Binary files a/icons/obj/food/containers.dmi and b/icons/obj/food/containers.dmi differ diff --git a/icons/obj/machines/cell_charger.dmi b/icons/obj/machines/cell_charger.dmi index 5ce285fc81782..1082130dadb1e 100644 Binary files a/icons/obj/machines/cell_charger.dmi and b/icons/obj/machines/cell_charger.dmi differ diff --git a/icons/obj/machines/defib_mount.dmi b/icons/obj/machines/defib_mount.dmi index 4518bb33783ae..846d634253887 100644 Binary files a/icons/obj/machines/defib_mount.dmi and b/icons/obj/machines/defib_mount.dmi differ diff --git a/icons/obj/machines/kitchen.dmi b/icons/obj/machines/kitchen.dmi index c94afb8d78ad6..2142125c5aa5c 100644 Binary files a/icons/obj/machines/kitchen.dmi and b/icons/obj/machines/kitchen.dmi differ diff --git a/icons/obj/machines/lathes.dmi b/icons/obj/machines/lathes.dmi index f4bb2116b42f1..4a90132ae60a1 100644 Binary files a/icons/obj/machines/lathes.dmi and b/icons/obj/machines/lathes.dmi differ diff --git a/icons/obj/machines/wallmounts.dmi b/icons/obj/machines/wallmounts.dmi index e849746eb0a66..e659a0248ec3c 100644 Binary files a/icons/obj/machines/wallmounts.dmi and b/icons/obj/machines/wallmounts.dmi differ diff --git a/icons/obj/medicart.dmi b/icons/obj/medical/medicart.dmi similarity index 100% rename from icons/obj/medicart.dmi rename to icons/obj/medical/medicart.dmi diff --git a/icons/obj/medical/organs/organs.dmi b/icons/obj/medical/organs/organs.dmi index 0d04f7fae3ce4..62a45426e186e 100644 Binary files a/icons/obj/medical/organs/organs.dmi and b/icons/obj/medical/organs/organs.dmi differ diff --git a/icons/obj/meteor.dmi b/icons/obj/meteor.dmi index 9fde3f3ef68ea..6b47fe485c34b 100644 Binary files a/icons/obj/meteor.dmi and b/icons/obj/meteor.dmi differ diff --git a/icons/obj/meteor_spooky.dmi b/icons/obj/meteor_spooky.dmi deleted file mode 100644 index 287d5b47bd0f7..0000000000000 Binary files a/icons/obj/meteor_spooky.dmi and /dev/null differ diff --git a/icons/obj/pipes_n_cables/atmos.dmi b/icons/obj/pipes_n_cables/atmos.dmi index 91badbf3ccf9b..fc67ff54158f9 100644 Binary files a/icons/obj/pipes_n_cables/atmos.dmi and b/icons/obj/pipes_n_cables/atmos.dmi differ diff --git a/icons/obj/railings.dmi b/icons/obj/railings.dmi index 7dcb4e7c6f7d7..49b560d2c8707 100644 Binary files a/icons/obj/railings.dmi and b/icons/obj/railings.dmi differ diff --git a/icons/obj/service/bureaucracy.dmi b/icons/obj/service/bureaucracy.dmi index f28eb169cf0b6..b400b7aee8b72 100644 Binary files a/icons/obj/service/bureaucracy.dmi and b/icons/obj/service/bureaucracy.dmi differ diff --git a/icons/obj/service/kitchen.dmi b/icons/obj/service/kitchen.dmi index aeafe2591e9bd..ff9a3e2a58c33 100644 Binary files a/icons/obj/service/kitchen.dmi and b/icons/obj/service/kitchen.dmi differ diff --git a/icons/obj/service/library.dmi b/icons/obj/service/library.dmi index 79a06dd4b8f91..f9273a55e5530 100644 Binary files a/icons/obj/service/library.dmi and b/icons/obj/service/library.dmi differ diff --git a/icons/obj/signs.dmi b/icons/obj/signs.dmi index 78cc96fabbc13..a2069ba5d9d3b 100644 Binary files a/icons/obj/signs.dmi and b/icons/obj/signs.dmi differ diff --git a/icons/obj/stack_objects.dmi b/icons/obj/stack_objects.dmi index c1fcad67b2b64..f13b10bdf4a8a 100644 Binary files a/icons/obj/stack_objects.dmi and b/icons/obj/stack_objects.dmi differ diff --git a/icons/obj/storage/crates.dmi b/icons/obj/storage/crates.dmi index 9bc8f4d2c27e9..34d5db6f3e898 100644 Binary files a/icons/obj/storage/crates.dmi and b/icons/obj/storage/crates.dmi differ diff --git a/icons/obj/structures.dmi b/icons/obj/structures.dmi index cf6cdbdf0d83d..becab20e591de 100644 Binary files a/icons/obj/structures.dmi and b/icons/obj/structures.dmi differ diff --git a/icons/obj/tools.dmi b/icons/obj/tools.dmi index 6bb1b8b41f67c..ec8216ccc3e7b 100644 Binary files a/icons/obj/tools.dmi and b/icons/obj/tools.dmi differ diff --git a/icons/obj/toys/balloons.dmi b/icons/obj/toys/balloons.dmi index 96afdaea2c0ed..1e02ed072d79e 100644 Binary files a/icons/obj/toys/balloons.dmi and b/icons/obj/toys/balloons.dmi differ diff --git a/icons/obj/toys/toy.dmi b/icons/obj/toys/toy.dmi index 775192c525506..ef3f6dc9370e5 100644 Binary files a/icons/obj/toys/toy.dmi and b/icons/obj/toys/toy.dmi differ diff --git a/icons/obj/track.dmi b/icons/obj/track.dmi new file mode 100644 index 0000000000000..7fd39e6e53949 Binary files /dev/null and b/icons/obj/track.dmi differ diff --git a/icons/obj/tram/tram_controllers.dmi b/icons/obj/tram/tram_controllers.dmi index aea1f691af241..251320af6b9d8 100644 Binary files a/icons/obj/tram/tram_controllers.dmi and b/icons/obj/tram/tram_controllers.dmi differ diff --git a/icons/obj/tram/tram_display.dmi b/icons/obj/tram/tram_display.dmi index e28beef468fef..4f64a5c8345cb 100644 Binary files a/icons/obj/tram/tram_display.dmi and b/icons/obj/tram/tram_display.dmi differ diff --git a/icons/obj/wallmounts.dmi b/icons/obj/wallmounts.dmi index e020a8818e186..e70024a9edb23 100644 Binary files a/icons/obj/wallmounts.dmi and b/icons/obj/wallmounts.dmi differ diff --git a/icons/obj/watercloset.dmi b/icons/obj/watercloset.dmi index 93ab67c804cc8..f8f83d9ab54ae 100644 Binary files a/icons/obj/watercloset.dmi and b/icons/obj/watercloset.dmi differ diff --git a/icons/obj/weapons/baton.dmi b/icons/obj/weapons/baton.dmi index e97547d851745..2d5100ec4d414 100644 Binary files a/icons/obj/weapons/baton.dmi and b/icons/obj/weapons/baton.dmi differ diff --git a/icons/obj/weapons/bows/quivers.dmi b/icons/obj/weapons/bows/quivers.dmi index 74a7b4bc8bb52..615f96ee6af6d 100644 Binary files a/icons/obj/weapons/bows/quivers.dmi and b/icons/obj/weapons/bows/quivers.dmi differ diff --git a/icons/obj/weapons/guns/ammo.dmi b/icons/obj/weapons/guns/ammo.dmi index 62fb2e4511451..e3a82a81cd31d 100644 Binary files a/icons/obj/weapons/guns/ammo.dmi and b/icons/obj/weapons/guns/ammo.dmi differ diff --git a/icons/obj/weapons/guns/ballistic.dmi b/icons/obj/weapons/guns/ballistic.dmi index f6105e9c5ae10..abbb7743b0140 100644 Binary files a/icons/obj/weapons/guns/ballistic.dmi and b/icons/obj/weapons/guns/ballistic.dmi differ diff --git a/icons/obj/weapons/guns/magic.dmi b/icons/obj/weapons/guns/magic.dmi index 3d7238a72bb0b..34256a7106091 100644 Binary files a/icons/obj/weapons/guns/magic.dmi and b/icons/obj/weapons/guns/magic.dmi differ diff --git a/icons/mob/mecha_ammo.dmi b/icons/obj/weapons/guns/mecha_ammo.dmi similarity index 100% rename from icons/mob/mecha_ammo.dmi rename to icons/obj/weapons/guns/mecha_ammo.dmi diff --git a/icons/obj/weapons/guns/projectiles.dmi b/icons/obj/weapons/guns/projectiles.dmi index b2579d58bf2df..a13ebcc636009 100644 Binary files a/icons/obj/weapons/guns/projectiles.dmi and b/icons/obj/weapons/guns/projectiles.dmi differ diff --git a/icons/obj/weapons/guns/wide_guns.dmi b/icons/obj/weapons/guns/wide_guns.dmi index c05453c3c25cf..568a3bc051f40 100644 Binary files a/icons/obj/weapons/guns/wide_guns.dmi and b/icons/obj/weapons/guns/wide_guns.dmi differ diff --git a/icons/obj/weapons/hand.dmi b/icons/obj/weapons/hand.dmi index 5d8827e0a7b9b..071113138a7a5 100644 Binary files a/icons/obj/weapons/hand.dmi and b/icons/obj/weapons/hand.dmi differ diff --git a/icons/obj/weapons/khopesh.dmi b/icons/obj/weapons/khopesh.dmi index ba9ef545f14e4..3c4ba40b34ac1 100644 Binary files a/icons/obj/weapons/khopesh.dmi and b/icons/obj/weapons/khopesh.dmi differ diff --git a/icons/obj/restraints.dmi b/icons/obj/weapons/restraints.dmi similarity index 100% rename from icons/obj/restraints.dmi rename to icons/obj/weapons/restraints.dmi diff --git a/icons/obj/weapons/stabby.dmi b/icons/obj/weapons/stabby.dmi index f49bac3272af6..24d4e0aef31eb 100644 Binary files a/icons/obj/weapons/stabby.dmi and b/icons/obj/weapons/stabby.dmi differ diff --git a/icons/obj/weapons/staff.dmi b/icons/obj/weapons/staff.dmi index da97e484df966..2d1460cf7e982 100644 Binary files a/icons/obj/weapons/staff.dmi and b/icons/obj/weapons/staff.dmi differ diff --git a/icons/obj/weapons/sword.dmi b/icons/obj/weapons/sword.dmi index 5dca921bd5bc4..d9a443cfc2699 100644 Binary files a/icons/obj/weapons/sword.dmi and b/icons/obj/weapons/sword.dmi differ diff --git a/icons/misc/Font_Minimal.dmi b/icons/testing/Font_Minimal.dmi similarity index 100% rename from icons/misc/Font_Minimal.dmi rename to icons/testing/Font_Minimal.dmi diff --git a/icons/misc/colortest.dmi b/icons/testing/colortest.dmi similarity index 100% rename from icons/misc/colortest.dmi rename to icons/testing/colortest.dmi diff --git a/icons/misc/hidden.dmi b/icons/testing/hidden.dmi similarity index 100% rename from icons/misc/hidden.dmi rename to icons/testing/hidden.dmi diff --git a/icons/turf/floors.dmi b/icons/turf/floors.dmi index 03dd1bcbfc303..09e0898594629 100644 Binary files a/icons/turf/floors.dmi and b/icons/turf/floors.dmi differ diff --git a/icons/turf/floors/grass_damaged.dmi b/icons/turf/floors/grass_damaged.dmi new file mode 100644 index 0000000000000..73540b3ca6a4c Binary files /dev/null and b/icons/turf/floors/grass_damaged.dmi differ diff --git a/icons/turf/floors/grass_damaged.png b/icons/turf/floors/grass_damaged.png new file mode 100644 index 0000000000000..4123f91cabe7d Binary files /dev/null and b/icons/turf/floors/grass_damaged.png differ diff --git a/icons/turf/floors/grass_damaged.png.toml b/icons/turf/floors/grass_damaged.png.toml new file mode 100644 index 0000000000000..18341264515ee --- /dev/null +++ b/icons/turf/floors/grass_damaged.png.toml @@ -0,0 +1,14 @@ +output_name = "grass_damaged" +template = "bitmask/diagonal_32x32.toml" + +[icon_size] +x = 50 +y = 50 + +[output_icon_size] +x = 50 +y = 50 + +[cut_pos] +x = 25 +y = 25 \ No newline at end of file diff --git a/icons/ui_icons/achievements/achievements.dmi b/icons/ui/achievements/achievements.dmi similarity index 100% rename from icons/ui_icons/achievements/achievements.dmi rename to icons/ui/achievements/achievements.dmi diff --git a/icons/ui_icons/adventure/default.png b/icons/ui/adventure/default.png similarity index 100% rename from icons/ui_icons/adventure/default.png rename to icons/ui/adventure/default.png diff --git a/icons/ui_icons/adventure/grue.png b/icons/ui/adventure/grue.png similarity index 100% rename from icons/ui_icons/adventure/grue.png rename to icons/ui/adventure/grue.png diff --git a/icons/ui_icons/adventure/signal_lost.png b/icons/ui/adventure/signal_lost.png similarity index 100% rename from icons/ui_icons/adventure/signal_lost.png rename to icons/ui/adventure/signal_lost.png diff --git a/icons/ui_icons/adventure/trade.png b/icons/ui/adventure/trade.png similarity index 100% rename from icons/ui_icons/adventure/trade.png rename to icons/ui/adventure/trade.png diff --git a/icons/ui_icons/antags/badass.dmi b/icons/ui/antags/badass.dmi similarity index 100% rename from icons/ui_icons/antags/badass.dmi rename to icons/ui/antags/badass.dmi diff --git a/icons/ui_icons/antags/obsessed.dmi b/icons/ui/antags/obsessed.dmi similarity index 100% rename from icons/ui_icons/antags/obsessed.dmi rename to icons/ui/antags/obsessed.dmi diff --git a/icons/ui_icons/arcade/boss1.gif b/icons/ui/arcade/boss1.gif similarity index 100% rename from icons/ui_icons/arcade/boss1.gif rename to icons/ui/arcade/boss1.gif diff --git a/icons/ui_icons/arcade/boss2.gif b/icons/ui/arcade/boss2.gif similarity index 100% rename from icons/ui_icons/arcade/boss2.gif rename to icons/ui/arcade/boss2.gif diff --git a/icons/ui_icons/arcade/boss3.gif b/icons/ui/arcade/boss3.gif similarity index 100% rename from icons/ui_icons/arcade/boss3.gif rename to icons/ui/arcade/boss3.gif diff --git a/icons/ui_icons/arcade/boss4.gif b/icons/ui/arcade/boss4.gif similarity index 100% rename from icons/ui_icons/arcade/boss4.gif rename to icons/ui/arcade/boss4.gif diff --git a/icons/ui_icons/arcade/boss5.gif b/icons/ui/arcade/boss5.gif similarity index 100% rename from icons/ui_icons/arcade/boss5.gif rename to icons/ui/arcade/boss5.gif diff --git a/icons/ui_icons/arcade/boss6.gif b/icons/ui/arcade/boss6.gif similarity index 100% rename from icons/ui_icons/arcade/boss6.gif rename to icons/ui/arcade/boss6.gif diff --git a/icons/ui_icons/arcade/fireplace.png b/icons/ui/arcade/fireplace.png similarity index 100% rename from icons/ui_icons/arcade/fireplace.png rename to icons/ui/arcade/fireplace.png diff --git a/icons/ui_icons/arcade/shopkeeper.png b/icons/ui/arcade/shopkeeper.png similarity index 100% rename from icons/ui_icons/arcade/shopkeeper.png rename to icons/ui/arcade/shopkeeper.png diff --git a/icons/ui_icons/chat/chat_icons.dmi b/icons/ui/chat/chat_icons.dmi similarity index 100% rename from icons/ui_icons/chat/chat_icons.dmi rename to icons/ui/chat/chat_icons.dmi diff --git a/icons/ui_icons/emoji/emoji.dmi b/icons/ui/chat/emoji.dmi similarity index 100% rename from icons/ui_icons/emoji/emoji.dmi rename to icons/ui/chat/emoji.dmi diff --git a/icons/misc/language.dmi b/icons/ui/chat/language.dmi similarity index 100% rename from icons/misc/language.dmi rename to icons/ui/chat/language.dmi diff --git a/icons/ui_icons/chat/member_content.dmi b/icons/ui/chat/member_content.dmi similarity index 100% rename from icons/ui_icons/chat/member_content.dmi rename to icons/ui/chat/member_content.dmi diff --git a/icons/misc/pepe.dmi b/icons/ui/chat/pepe.dmi similarity index 100% rename from icons/misc/pepe.dmi rename to icons/ui/chat/pepe.dmi diff --git a/icons/misc/clickbox.dmi b/icons/ui/clickbox.dmi similarity index 100% rename from icons/misc/clickbox.dmi rename to icons/ui/clickbox.dmi diff --git a/icons/ui_icons/common/padlock.png b/icons/ui/common/padlock.png similarity index 100% rename from icons/ui_icons/common/padlock.png rename to icons/ui/common/padlock.png diff --git a/icons/ui_icons/common/tg_16.png b/icons/ui/common/tg_16.png similarity index 100% rename from icons/ui_icons/common/tg_16.png rename to icons/ui/common/tg_16.png diff --git a/icons/ui_icons/common/tg_32.png b/icons/ui/common/tg_32.png similarity index 100% rename from icons/ui_icons/common/tg_32.png rename to icons/ui/common/tg_32.png diff --git a/icons/ui_icons/condiments/bbqsauce.png b/icons/ui/condiments/bbqsauce.png similarity index 100% rename from icons/ui_icons/condiments/bbqsauce.png rename to icons/ui/condiments/bbqsauce.png diff --git a/icons/ui_icons/condiments/bottle.png b/icons/ui/condiments/bottle.png similarity index 100% rename from icons/ui_icons/condiments/bottle.png rename to icons/ui/condiments/bottle.png diff --git a/icons/ui_icons/condiments/cherryjelly.png b/icons/ui/condiments/cherryjelly.png similarity index 100% rename from icons/ui_icons/condiments/cherryjelly.png rename to icons/ui/condiments/cherryjelly.png diff --git a/icons/ui_icons/condiments/coldsauce.png b/icons/ui/condiments/coldsauce.png similarity index 100% rename from icons/ui_icons/condiments/coldsauce.png rename to icons/ui/condiments/coldsauce.png diff --git a/icons/ui_icons/condiments/condi_empty.png b/icons/ui/condiments/condi_empty.png similarity index 100% rename from icons/ui_icons/condiments/condi_empty.png rename to icons/ui/condiments/condi_empty.png diff --git a/icons/ui_icons/condiments/cookingoil.png b/icons/ui/condiments/cookingoil.png similarity index 100% rename from icons/ui_icons/condiments/cookingoil.png rename to icons/ui/condiments/cookingoil.png diff --git a/icons/ui_icons/condiments/enzyme.png b/icons/ui/condiments/enzyme.png similarity index 100% rename from icons/ui_icons/condiments/enzyme.png rename to icons/ui/condiments/enzyme.png diff --git a/icons/ui_icons/condiments/flour.png b/icons/ui/condiments/flour.png similarity index 100% rename from icons/ui_icons/condiments/flour.png rename to icons/ui/condiments/flour.png diff --git a/icons/ui_icons/condiments/honey.png b/icons/ui/condiments/honey.png similarity index 100% rename from icons/ui_icons/condiments/honey.png rename to icons/ui/condiments/honey.png diff --git a/icons/ui_icons/condiments/hotsauce.png b/icons/ui/condiments/hotsauce.png similarity index 100% rename from icons/ui_icons/condiments/hotsauce.png rename to icons/ui/condiments/hotsauce.png diff --git a/icons/ui_icons/condiments/ketchup.png b/icons/ui/condiments/ketchup.png similarity index 100% rename from icons/ui_icons/condiments/ketchup.png rename to icons/ui/condiments/ketchup.png diff --git a/icons/ui_icons/condiments/mayonnaise.png b/icons/ui/condiments/mayonnaise.png similarity index 100% rename from icons/ui_icons/condiments/mayonnaise.png rename to icons/ui/condiments/mayonnaise.png diff --git a/icons/ui_icons/condiments/milk.png b/icons/ui/condiments/milk.png similarity index 100% rename from icons/ui_icons/condiments/milk.png rename to icons/ui/condiments/milk.png diff --git a/icons/ui_icons/condiments/oliveoil.png b/icons/ui/condiments/oliveoil.png similarity index 100% rename from icons/ui_icons/condiments/oliveoil.png rename to icons/ui/condiments/oliveoil.png diff --git a/icons/ui_icons/condiments/peanutbutter.png b/icons/ui/condiments/peanutbutter.png similarity index 100% rename from icons/ui_icons/condiments/peanutbutter.png rename to icons/ui/condiments/peanutbutter.png diff --git a/icons/ui_icons/condiments/peppermillsmall.png b/icons/ui/condiments/peppermillsmall.png similarity index 100% rename from icons/ui_icons/condiments/peppermillsmall.png rename to icons/ui/condiments/peppermillsmall.png diff --git a/icons/ui_icons/condiments/rice.png b/icons/ui/condiments/rice.png similarity index 100% rename from icons/ui_icons/condiments/rice.png rename to icons/ui/condiments/rice.png diff --git a/icons/ui_icons/condiments/saltshakersmall.png b/icons/ui/condiments/saltshakersmall.png similarity index 100% rename from icons/ui_icons/condiments/saltshakersmall.png rename to icons/ui/condiments/saltshakersmall.png diff --git a/icons/ui_icons/condiments/soymilk.png b/icons/ui/condiments/soymilk.png similarity index 100% rename from icons/ui_icons/condiments/soymilk.png rename to icons/ui/condiments/soymilk.png diff --git a/icons/ui_icons/condiments/soysauce.png b/icons/ui/condiments/soysauce.png similarity index 100% rename from icons/ui_icons/condiments/soysauce.png rename to icons/ui/condiments/soysauce.png diff --git a/icons/ui_icons/condiments/sugar.png b/icons/ui/condiments/sugar.png similarity index 100% rename from icons/ui_icons/condiments/sugar.png rename to icons/ui/condiments/sugar.png diff --git a/icons/ui_icons/contracts/bluespace.png b/icons/ui/contracts/bluespace.png similarity index 100% rename from icons/ui_icons/contracts/bluespace.png rename to icons/ui/contracts/bluespace.png diff --git a/icons/ui_icons/contracts/destruction.png b/icons/ui/contracts/destruction.png similarity index 100% rename from icons/ui_icons/contracts/destruction.png rename to icons/ui/contracts/destruction.png diff --git a/icons/ui_icons/contracts/healing.png b/icons/ui/contracts/healing.png similarity index 100% rename from icons/ui_icons/contracts/healing.png rename to icons/ui/contracts/healing.png diff --git a/icons/ui_icons/contracts/robeless.png b/icons/ui/contracts/robeless.png similarity index 100% rename from icons/ui_icons/contracts/robeless.png rename to icons/ui/contracts/robeless.png diff --git a/icons/ui_icons/dna/dna_discovered.gif b/icons/ui/dna/dna_discovered.gif similarity index 100% rename from icons/ui_icons/dna/dna_discovered.gif rename to icons/ui/dna/dna_discovered.gif diff --git a/icons/ui_icons/dna/dna_extra.gif b/icons/ui/dna/dna_extra.gif similarity index 100% rename from icons/ui_icons/dna/dna_extra.gif rename to icons/ui/dna/dna_extra.gif diff --git a/icons/ui_icons/dna/dna_undiscovered.gif b/icons/ui/dna/dna_undiscovered.gif similarity index 100% rename from icons/ui_icons/dna/dna_undiscovered.gif rename to icons/ui/dna/dna_undiscovered.gif diff --git a/icons/ui_icons/inventory/back.png b/icons/ui/inventory/back.png similarity index 100% rename from icons/ui_icons/inventory/back.png rename to icons/ui/inventory/back.png diff --git a/icons/ui_icons/inventory/belt.png b/icons/ui/inventory/belt.png similarity index 100% rename from icons/ui_icons/inventory/belt.png rename to icons/ui/inventory/belt.png diff --git a/icons/ui_icons/inventory/collar.png b/icons/ui/inventory/collar.png similarity index 100% rename from icons/ui_icons/inventory/collar.png rename to icons/ui/inventory/collar.png diff --git a/icons/ui_icons/inventory/ears.png b/icons/ui/inventory/ears.png similarity index 100% rename from icons/ui_icons/inventory/ears.png rename to icons/ui/inventory/ears.png diff --git a/icons/ui_icons/inventory/glasses.png b/icons/ui/inventory/glasses.png similarity index 100% rename from icons/ui_icons/inventory/glasses.png rename to icons/ui/inventory/glasses.png diff --git a/icons/ui_icons/inventory/gloves.png b/icons/ui/inventory/gloves.png similarity index 100% rename from icons/ui_icons/inventory/gloves.png rename to icons/ui/inventory/gloves.png diff --git a/icons/ui_icons/inventory/hand_l.png b/icons/ui/inventory/hand_l.png similarity index 100% rename from icons/ui_icons/inventory/hand_l.png rename to icons/ui/inventory/hand_l.png diff --git a/icons/ui_icons/inventory/hand_r.png b/icons/ui/inventory/hand_r.png similarity index 100% rename from icons/ui_icons/inventory/hand_r.png rename to icons/ui/inventory/hand_r.png diff --git a/icons/ui_icons/inventory/head.png b/icons/ui/inventory/head.png similarity index 100% rename from icons/ui_icons/inventory/head.png rename to icons/ui/inventory/head.png diff --git a/icons/ui_icons/inventory/id.png b/icons/ui/inventory/id.png similarity index 100% rename from icons/ui_icons/inventory/id.png rename to icons/ui/inventory/id.png diff --git a/icons/ui_icons/inventory/mask.png b/icons/ui/inventory/mask.png similarity index 100% rename from icons/ui_icons/inventory/mask.png rename to icons/ui/inventory/mask.png diff --git a/icons/ui_icons/inventory/neck.png b/icons/ui/inventory/neck.png similarity index 100% rename from icons/ui_icons/inventory/neck.png rename to icons/ui/inventory/neck.png diff --git a/icons/ui_icons/inventory/pocket.png b/icons/ui/inventory/pocket.png similarity index 100% rename from icons/ui_icons/inventory/pocket.png rename to icons/ui/inventory/pocket.png diff --git a/icons/ui_icons/inventory/shoes.png b/icons/ui/inventory/shoes.png similarity index 100% rename from icons/ui_icons/inventory/shoes.png rename to icons/ui/inventory/shoes.png diff --git a/icons/ui_icons/inventory/suit.png b/icons/ui/inventory/suit.png similarity index 100% rename from icons/ui_icons/inventory/suit.png rename to icons/ui/inventory/suit.png diff --git a/icons/ui_icons/inventory/suit_storage.png b/icons/ui/inventory/suit_storage.png similarity index 100% rename from icons/ui_icons/inventory/suit_storage.png rename to icons/ui/inventory/suit_storage.png diff --git a/icons/ui_icons/inventory/uniform.png b/icons/ui/inventory/uniform.png similarity index 100% rename from icons/ui_icons/inventory/uniform.png rename to icons/ui/inventory/uniform.png diff --git a/icons/ui_icons/mecha/armor.dmi b/icons/ui/mecha/armor.dmi similarity index 100% rename from icons/ui_icons/mecha/armor.dmi rename to icons/ui/mecha/armor.dmi diff --git a/icons/ui_icons/notes/high_button.png b/icons/ui/notes/high_button.png similarity index 100% rename from icons/ui_icons/notes/high_button.png rename to icons/ui/notes/high_button.png diff --git a/icons/ui_icons/notes/medium_button.png b/icons/ui/notes/medium_button.png similarity index 100% rename from icons/ui_icons/notes/medium_button.png rename to icons/ui/notes/medium_button.png diff --git a/icons/ui_icons/notes/minor_button.png b/icons/ui/notes/minor_button.png similarity index 100% rename from icons/ui_icons/notes/minor_button.png rename to icons/ui/notes/minor_button.png diff --git a/icons/ui_icons/notes/none_button.png b/icons/ui/notes/none_button.png similarity index 100% rename from icons/ui_icons/notes/none_button.png rename to icons/ui/notes/none_button.png diff --git a/icons/ui_icons/orbit/ghost.png b/icons/ui/orbit/ghost.png similarity index 100% rename from icons/ui_icons/orbit/ghost.png rename to icons/ui/orbit/ghost.png diff --git a/icons/ui_icons/particle_editor/box_gen.png b/icons/ui/particle_editor/box_gen.png similarity index 100% rename from icons/ui_icons/particle_editor/box_gen.png rename to icons/ui/particle_editor/box_gen.png diff --git a/icons/ui_icons/particle_editor/circle_gen.png b/icons/ui/particle_editor/circle_gen.png similarity index 100% rename from icons/ui_icons/particle_editor/circle_gen.png rename to icons/ui/particle_editor/circle_gen.png diff --git a/icons/ui_icons/particle_editor/cube_gen.png b/icons/ui/particle_editor/cube_gen.png similarity index 100% rename from icons/ui_icons/particle_editor/cube_gen.png rename to icons/ui/particle_editor/cube_gen.png diff --git a/icons/ui_icons/particle_editor/linear_rand.png b/icons/ui/particle_editor/linear_rand.png similarity index 100% rename from icons/ui_icons/particle_editor/linear_rand.png rename to icons/ui/particle_editor/linear_rand.png diff --git a/icons/ui_icons/particle_editor/motion.png b/icons/ui/particle_editor/motion.png similarity index 100% rename from icons/ui_icons/particle_editor/motion.png rename to icons/ui/particle_editor/motion.png diff --git a/icons/ui_icons/particle_editor/normal_rand.png b/icons/ui/particle_editor/normal_rand.png similarity index 100% rename from icons/ui_icons/particle_editor/normal_rand.png rename to icons/ui/particle_editor/normal_rand.png diff --git a/icons/ui_icons/particle_editor/num_gen.png b/icons/ui/particle_editor/num_gen.png similarity index 100% rename from icons/ui_icons/particle_editor/num_gen.png rename to icons/ui/particle_editor/num_gen.png diff --git a/icons/ui_icons/particle_editor/sphere_gen.png b/icons/ui/particle_editor/sphere_gen.png similarity index 100% rename from icons/ui_icons/particle_editor/sphere_gen.png rename to icons/ui/particle_editor/sphere_gen.png diff --git a/icons/ui_icons/particle_editor/square_gen.png b/icons/ui/particle_editor/square_gen.png similarity index 100% rename from icons/ui_icons/particle_editor/square_gen.png rename to icons/ui/particle_editor/square_gen.png diff --git a/icons/ui_icons/particle_editor/square_rand.png b/icons/ui/particle_editor/square_rand.png similarity index 100% rename from icons/ui_icons/particle_editor/square_rand.png rename to icons/ui/particle_editor/square_rand.png diff --git a/icons/ui_icons/particle_editor/uniform_rand.png b/icons/ui/particle_editor/uniform_rand.png similarity index 100% rename from icons/ui_icons/particle_editor/uniform_rand.png rename to icons/ui/particle_editor/uniform_rand.png diff --git a/icons/ui_icons/particle_editor/vector_gen.png b/icons/ui/particle_editor/vector_gen.png similarity index 100% rename from icons/ui_icons/particle_editor/vector_gen.png rename to icons/ui/particle_editor/vector_gen.png diff --git a/icons/pda_icons/pda_atmos.png b/icons/ui/pda/pda_atmos.png similarity index 100% rename from icons/pda_icons/pda_atmos.png rename to icons/ui/pda/pda_atmos.png diff --git a/icons/pda_icons/pda_back.png b/icons/ui/pda/pda_back.png similarity index 100% rename from icons/pda_icons/pda_back.png rename to icons/ui/pda/pda_back.png diff --git a/icons/pda_icons/pda_bell.png b/icons/ui/pda/pda_bell.png similarity index 100% rename from icons/pda_icons/pda_bell.png rename to icons/ui/pda/pda_bell.png diff --git a/icons/pda_icons/pda_blank.png b/icons/ui/pda/pda_blank.png similarity index 100% rename from icons/pda_icons/pda_blank.png rename to icons/ui/pda/pda_blank.png diff --git a/icons/pda_icons/pda_boom.png b/icons/ui/pda/pda_boom.png similarity index 100% rename from icons/pda_icons/pda_boom.png rename to icons/ui/pda/pda_boom.png diff --git a/icons/pda_icons/pda_bucket.png b/icons/ui/pda/pda_bucket.png similarity index 100% rename from icons/pda_icons/pda_bucket.png rename to icons/ui/pda/pda_bucket.png diff --git a/icons/pda_icons/pda_chatroom.png b/icons/ui/pda/pda_chatroom.png similarity index 100% rename from icons/pda_icons/pda_chatroom.png rename to icons/ui/pda/pda_chatroom.png diff --git a/icons/pda_icons/pda_cleanbot.png b/icons/ui/pda/pda_cleanbot.png similarity index 100% rename from icons/pda_icons/pda_cleanbot.png rename to icons/ui/pda/pda_cleanbot.png diff --git a/icons/pda_icons/pda_color.png b/icons/ui/pda/pda_color.png similarity index 100% rename from icons/pda_icons/pda_color.png rename to icons/ui/pda/pda_color.png diff --git a/icons/pda_icons/pda_crate.png b/icons/ui/pda/pda_crate.png similarity index 100% rename from icons/pda_icons/pda_crate.png rename to icons/ui/pda/pda_crate.png diff --git a/icons/pda_icons/pda_cuffs.png b/icons/ui/pda/pda_cuffs.png similarity index 100% rename from icons/pda_icons/pda_cuffs.png rename to icons/ui/pda/pda_cuffs.png diff --git a/icons/pda_icons/pda_droneblacklist.png b/icons/ui/pda/pda_droneblacklist.png similarity index 100% rename from icons/pda_icons/pda_droneblacklist.png rename to icons/ui/pda/pda_droneblacklist.png diff --git a/icons/pda_icons/pda_dronephone.png b/icons/ui/pda/pda_dronephone.png similarity index 100% rename from icons/pda_icons/pda_dronephone.png rename to icons/ui/pda/pda_dronephone.png diff --git a/icons/pda_icons/pda_eject.png b/icons/ui/pda/pda_eject.png similarity index 100% rename from icons/pda_icons/pda_eject.png rename to icons/ui/pda/pda_eject.png diff --git a/icons/pda_icons/pda_emoji.png b/icons/ui/pda/pda_emoji.png similarity index 100% rename from icons/pda_icons/pda_emoji.png rename to icons/ui/pda/pda_emoji.png diff --git a/icons/pda_icons/pda_exit.png b/icons/ui/pda/pda_exit.png similarity index 100% rename from icons/pda_icons/pda_exit.png rename to icons/ui/pda/pda_exit.png diff --git a/icons/pda_icons/pda_flashlight.png b/icons/ui/pda/pda_flashlight.png similarity index 100% rename from icons/pda_icons/pda_flashlight.png rename to icons/ui/pda/pda_flashlight.png diff --git a/icons/pda_icons/pda_floorbot.png b/icons/ui/pda/pda_floorbot.png similarity index 100% rename from icons/pda_icons/pda_floorbot.png rename to icons/ui/pda/pda_floorbot.png diff --git a/icons/pda_icons/pda_font.png b/icons/ui/pda/pda_font.png similarity index 100% rename from icons/pda_icons/pda_font.png rename to icons/ui/pda/pda_font.png diff --git a/icons/pda_icons/pda_honk.png b/icons/ui/pda/pda_honk.png similarity index 100% rename from icons/pda_icons/pda_honk.png rename to icons/ui/pda/pda_honk.png diff --git a/icons/pda_icons/pda_locked.PNG b/icons/ui/pda/pda_locked.PNG similarity index 100% rename from icons/pda_icons/pda_locked.PNG rename to icons/ui/pda/pda_locked.PNG diff --git a/icons/pda_icons/pda_mail.png b/icons/ui/pda/pda_mail.png similarity index 100% rename from icons/pda_icons/pda_mail.png rename to icons/ui/pda/pda_mail.png diff --git a/icons/pda_icons/pda_medbot.png b/icons/ui/pda/pda_medbot.png similarity index 100% rename from icons/pda_icons/pda_medbot.png rename to icons/ui/pda/pda_medbot.png diff --git a/icons/pda_icons/pda_medical.png b/icons/ui/pda/pda_medical.png similarity index 100% rename from icons/pda_icons/pda_medical.png rename to icons/ui/pda/pda_medical.png diff --git a/icons/pda_icons/pda_menu.png b/icons/ui/pda/pda_menu.png similarity index 100% rename from icons/pda_icons/pda_menu.png rename to icons/ui/pda/pda_menu.png diff --git a/icons/pda_icons/pda_mule.png b/icons/ui/pda/pda_mule.png similarity index 100% rename from icons/pda_icons/pda_mule.png rename to icons/ui/pda/pda_mule.png diff --git a/icons/pda_icons/pda_notes.png b/icons/ui/pda/pda_notes.png similarity index 100% rename from icons/pda_icons/pda_notes.png rename to icons/ui/pda/pda_notes.png diff --git a/icons/pda_icons/pda_power.png b/icons/ui/pda/pda_power.png similarity index 100% rename from icons/pda_icons/pda_power.png rename to icons/ui/pda/pda_power.png diff --git a/icons/pda_icons/pda_rdoor.png b/icons/ui/pda/pda_rdoor.png similarity index 100% rename from icons/pda_icons/pda_rdoor.png rename to icons/ui/pda/pda_rdoor.png diff --git a/icons/pda_icons/pda_reagent.png b/icons/ui/pda/pda_reagent.png similarity index 100% rename from icons/pda_icons/pda_reagent.png rename to icons/ui/pda/pda_reagent.png diff --git a/icons/pda_icons/pda_refresh.png b/icons/ui/pda/pda_refresh.png similarity index 100% rename from icons/pda_icons/pda_refresh.png rename to icons/ui/pda/pda_refresh.png diff --git a/icons/pda_icons/pda_scanner.png b/icons/ui/pda/pda_scanner.png similarity index 100% rename from icons/pda_icons/pda_scanner.png rename to icons/ui/pda/pda_scanner.png diff --git a/icons/pda_icons/pda_signaler.png b/icons/ui/pda/pda_signaler.png similarity index 100% rename from icons/pda_icons/pda_signaler.png rename to icons/ui/pda/pda_signaler.png diff --git a/icons/pda_icons/pda_skills.png b/icons/ui/pda/pda_skills.png similarity index 100% rename from icons/pda_icons/pda_skills.png rename to icons/ui/pda/pda_skills.png diff --git a/icons/pda_icons/pda_status.png b/icons/ui/pda/pda_status.png similarity index 100% rename from icons/pda_icons/pda_status.png rename to icons/ui/pda/pda_status.png diff --git a/icons/program_icons/alarm_green.gif b/icons/ui/programs/alarm_green.gif similarity index 100% rename from icons/program_icons/alarm_green.gif rename to icons/ui/programs/alarm_green.gif diff --git a/icons/program_icons/alarm_red.gif b/icons/ui/programs/alarm_red.gif similarity index 100% rename from icons/program_icons/alarm_red.gif rename to icons/ui/programs/alarm_red.gif diff --git a/icons/program_icons/batt_100.gif b/icons/ui/programs/batt_100.gif similarity index 100% rename from icons/program_icons/batt_100.gif rename to icons/ui/programs/batt_100.gif diff --git a/icons/program_icons/batt_20.gif b/icons/ui/programs/batt_20.gif similarity index 100% rename from icons/program_icons/batt_20.gif rename to icons/ui/programs/batt_20.gif diff --git a/icons/program_icons/batt_40.gif b/icons/ui/programs/batt_40.gif similarity index 100% rename from icons/program_icons/batt_40.gif rename to icons/ui/programs/batt_40.gif diff --git a/icons/program_icons/batt_5.gif b/icons/ui/programs/batt_5.gif similarity index 100% rename from icons/program_icons/batt_5.gif rename to icons/ui/programs/batt_5.gif diff --git a/icons/program_icons/batt_60.gif b/icons/ui/programs/batt_60.gif similarity index 100% rename from icons/program_icons/batt_60.gif rename to icons/ui/programs/batt_60.gif diff --git a/icons/program_icons/batt_80.gif b/icons/ui/programs/batt_80.gif similarity index 100% rename from icons/program_icons/batt_80.gif rename to icons/ui/programs/batt_80.gif diff --git a/icons/program_icons/borg_mon.gif b/icons/ui/programs/borg_mon.gif similarity index 100% rename from icons/program_icons/borg_mon.gif rename to icons/ui/programs/borg_mon.gif diff --git a/icons/program_icons/charging.gif b/icons/ui/programs/charging.gif similarity index 100% rename from icons/program_icons/charging.gif rename to icons/ui/programs/charging.gif diff --git a/icons/program_icons/downloader_finished.gif b/icons/ui/programs/downloader_finished.gif similarity index 100% rename from icons/program_icons/downloader_finished.gif rename to icons/ui/programs/downloader_finished.gif diff --git a/icons/program_icons/downloader_running.gif b/icons/ui/programs/downloader_running.gif similarity index 100% rename from icons/program_icons/downloader_running.gif rename to icons/ui/programs/downloader_running.gif diff --git a/icons/program_icons/mafia.gif b/icons/ui/programs/mafia.gif similarity index 100% rename from icons/program_icons/mafia.gif rename to icons/ui/programs/mafia.gif diff --git a/icons/program_icons/ntnrc_idle.gif b/icons/ui/programs/ntnrc_idle.gif similarity index 100% rename from icons/program_icons/ntnrc_idle.gif rename to icons/ui/programs/ntnrc_idle.gif diff --git a/icons/program_icons/ntnrc_new.gif b/icons/ui/programs/ntnrc_new.gif similarity index 100% rename from icons/program_icons/ntnrc_new.gif rename to icons/ui/programs/ntnrc_new.gif diff --git a/icons/program_icons/power_norm.gif b/icons/ui/programs/power_norm.gif similarity index 100% rename from icons/program_icons/power_norm.gif rename to icons/ui/programs/power_norm.gif diff --git a/icons/program_icons/power_warn.gif b/icons/ui/programs/power_warn.gif similarity index 100% rename from icons/program_icons/power_warn.gif rename to icons/ui/programs/power_warn.gif diff --git a/icons/program_icons/robotact.gif b/icons/ui/programs/robotact.gif similarity index 100% rename from icons/program_icons/robotact.gif rename to icons/ui/programs/robotact.gif diff --git a/icons/program_icons/sig_high.gif b/icons/ui/programs/sig_high.gif similarity index 100% rename from icons/program_icons/sig_high.gif rename to icons/ui/programs/sig_high.gif diff --git a/icons/program_icons/sig_lan.gif b/icons/ui/programs/sig_lan.gif similarity index 100% rename from icons/program_icons/sig_lan.gif rename to icons/ui/programs/sig_lan.gif diff --git a/icons/program_icons/sig_low.gif b/icons/ui/programs/sig_low.gif similarity index 100% rename from icons/program_icons/sig_low.gif rename to icons/ui/programs/sig_low.gif diff --git a/icons/program_icons/sig_none.gif b/icons/ui/programs/sig_none.gif similarity index 100% rename from icons/program_icons/sig_none.gif rename to icons/ui/programs/sig_none.gif diff --git a/icons/program_icons/smmon_0.gif b/icons/ui/programs/smmon_0.gif similarity index 100% rename from icons/program_icons/smmon_0.gif rename to icons/ui/programs/smmon_0.gif diff --git a/icons/program_icons/smmon_1.gif b/icons/ui/programs/smmon_1.gif similarity index 100% rename from icons/program_icons/smmon_1.gif rename to icons/ui/programs/smmon_1.gif diff --git a/icons/program_icons/smmon_2.gif b/icons/ui/programs/smmon_2.gif similarity index 100% rename from icons/program_icons/smmon_2.gif rename to icons/ui/programs/smmon_2.gif diff --git a/icons/program_icons/smmon_3.gif b/icons/ui/programs/smmon_3.gif similarity index 100% rename from icons/program_icons/smmon_3.gif rename to icons/ui/programs/smmon_3.gif diff --git a/icons/program_icons/smmon_4.gif b/icons/ui/programs/smmon_4.gif similarity index 100% rename from icons/program_icons/smmon_4.gif rename to icons/ui/programs/smmon_4.gif diff --git a/icons/program_icons/smmon_5.gif b/icons/ui/programs/smmon_5.gif similarity index 100% rename from icons/program_icons/smmon_5.gif rename to icons/ui/programs/smmon_5.gif diff --git a/icons/program_icons/smmon_6.gif b/icons/ui/programs/smmon_6.gif similarity index 100% rename from icons/program_icons/smmon_6.gif rename to icons/ui/programs/smmon_6.gif diff --git a/icons/ui_icons/safe/safe_dial.png b/icons/ui/safe/safe_dial.png similarity index 100% rename from icons/ui_icons/safe/safe_dial.png rename to icons/ui/safe/safe_dial.png diff --git a/icons/ui_icons/screentips/cursor_hints.dmi b/icons/ui/screentips/cursor_hints.dmi similarity index 100% rename from icons/ui_icons/screentips/cursor_hints.dmi rename to icons/ui/screentips/cursor_hints.dmi diff --git a/icons/ui_icons/tgui/grid_background.png b/icons/ui/tgui/grid_background.png similarity index 100% rename from icons/ui_icons/tgui/grid_background.png rename to icons/ui/tgui/grid_background.png diff --git a/icons/ui_icons/tgui/ntosradar_background.png b/icons/ui/tgui/ntosradar_background.png similarity index 100% rename from icons/ui_icons/tgui/ntosradar_background.png rename to icons/ui/tgui/ntosradar_background.png diff --git a/icons/ui_icons/tgui/ntosradar_pointer.png b/icons/ui/tgui/ntosradar_pointer.png similarity index 100% rename from icons/ui_icons/tgui/ntosradar_pointer.png rename to icons/ui/tgui/ntosradar_pointer.png diff --git a/icons/ui_icons/tgui/ntosradar_pointer_S.png b/icons/ui/tgui/ntosradar_pointer_S.png similarity index 100% rename from icons/ui_icons/tgui/ntosradar_pointer_S.png rename to icons/ui/tgui/ntosradar_pointer_S.png diff --git a/icons/ui_icons/virtualpet/pet_state.dmi b/icons/ui/virtualpet/pet_state.dmi similarity index 100% rename from icons/ui_icons/virtualpet/pet_state.dmi rename to icons/ui/virtualpet/pet_state.dmi diff --git a/icons/ui_icons/antags/heretic/knowledge.dmi b/icons/ui_icons/antags/heretic/knowledge.dmi new file mode 100644 index 0000000000000..d24de1a5f0e81 Binary files /dev/null and b/icons/ui_icons/antags/heretic/knowledge.dmi differ diff --git a/interface/skin.dmf b/interface/skin.dmf index ede8e37684078..8388f5107b64c 100644 --- a/interface/skin.dmf +++ b/interface/skin.dmf @@ -70,8 +70,8 @@ window "mainwindow" menu = "menu" elem "split" type = CHILD - pos = 3,0 - size = 634x440 + pos = 0,0 + size = 640x440 anchor1 = 0,0 anchor2 = 100,100 saved-params = "splitter" @@ -94,6 +94,15 @@ window "mainwindow" anchor2 = -1,-1 is-visible = false saved-params = "" + elem "commandbar_spy" + type = BROWSER + is-default = false + pos = 0,0 + size = 200x200 + anchor1 = -1,-1 + anchor2 = -1,-1 + is-visible = false + saved-params = "" window "mapwindow" elem "mapwindow" @@ -150,58 +159,67 @@ window "infowindow" is-vert = false elem "changelog" type = BUTTON - pos = 16,5 - size = 104x20 - anchor1 = 3,0 - anchor2 = 19,0 + pos = 5,5 + size = 90x20 + anchor1 = 1,0 + anchor2 = 15,0 saved-params = "is-checked" text = "Changelog" command = "changelog" elem "rules" type = BUTTON - pos = 120,5 - size = 100x20 - anchor1 = 19,0 - anchor2 = 34,0 + pos = 95,5 + size = 90x20 + anchor1 = 15,0 + anchor2 = 29,0 saved-params = "is-checked" text = "Rules" command = "rules" elem "wiki" type = BUTTON - pos = 220,5 - size = 100x20 - anchor1 = 34,0 - anchor2 = 50,0 + pos = 185,5 + size = 90x20 + anchor1 = 29,0 + anchor2 = 43,0 saved-params = "is-checked" text = "Wiki" command = "wiki" elem "forum" type = BUTTON - pos = 320,5 - size = 100x20 - anchor1 = 50,0 - anchor2 = 66,0 + pos = 275,5 + size = 90x20 + anchor1 = 43,0 + anchor2 = 57,0 saved-params = "is-checked" text = "Forum" command = "forum" elem "github" type = BUTTON - pos = 420,5 - size = 100x20 - anchor1 = 66,0 - anchor2 = 81,0 + pos = 365,5 + size = 90x20 + anchor1 = 57,0 + anchor2 = 71,0 saved-params = "is-checked" text = "Github" command = "github" elem "report-issue" type = BUTTON - pos = 520,5 - size = 100x20 - anchor1 = 81,0 - anchor2 = 97,0 + pos = 455,5 + size = 90x20 + anchor1 = 71,0 + anchor2 = 85,0 saved-params = "is-checked" text = "Report Issue" command = "report-issue" + elem "fullscreen-toggle" + type = BUTTON + pos = 545,5 + size = 90x20 + anchor1 = 85,0 + anchor2 = 99,0 + saved-params = "is-checked" + text = "Fullscreen" + command = "fullscreen" window "outputwindow" elem "outputwindow" diff --git a/lua/SS13_base.lua b/lua/SS13_base.lua index f49908f094261..ea04c8c6503dd 100644 --- a/lua/SS13_base.lua +++ b/lua/SS13_base.lua @@ -100,7 +100,8 @@ function SS13.register_signal(datum, signal, func) callback:call_proc("RegisterSignal", datum, signal, "Invoke") local path = { "__SS13_signal_handlers", datumWeakRef, signal, callbackWeakRef, "func" } callback.vars.arguments = { path } - if not __SS13_signal_handlers[datumWeakRef]._cleanup then + -- Turfs don't remove their signals on deletion. + if not __SS13_signal_handlers[datumWeakRef]._cleanup and not SS13.istype(datum, "/turf") then local cleanupCallback = SS13.new("/datum/callback", SS13.state, "call_function_return_first") local cleanupPath = { "__SS13_signal_handlers", datumWeakRef, "_cleanup"} cleanupCallback.vars.arguments = { cleanupPath } @@ -134,6 +135,11 @@ function SS13.unregister_signal(datum, signal, callback) local callbackWeakRef = dm.global_proc("WEAKREF", handler_callback) if not SS13.istype(datum, "/datum/weakref") then handler_callback:call_proc("UnregisterSignal", datum, signal) + else + local actualDatum = datum:call_proc("hard_resolve") + if SS13.is_valid(actualDatum) then + handler_callback:call_proc("UnregisterSignal", actualDatum, signal) + end end SS13.stop_tracking(handler_callback) end diff --git a/lua/handler_group.lua b/lua/handler_group.lua index fff63ad18e427..0246d33c74488 100644 --- a/lua/handler_group.lua +++ b/lua/handler_group.lua @@ -14,7 +14,7 @@ function HandlerGroup:register_signal(datum, signal, func) if not callback then return end - table.insert(self.registered, { datum = datum, signal = signal, callback = callback }) + table.insert(self.registered, { datum = dm.global_proc("WEAKREF", datum), signal = signal, callback = callback }) end -- Clears all the signals that have been registered on this HandlerGroup diff --git a/rust_g.dll b/rust_g.dll index 30f63e72f4b1d..d3aebf7121706 100644 Binary files a/rust_g.dll and b/rust_g.dll differ diff --git a/sound/ambience/ambicave.ogg b/sound/ambience/ambicave.ogg index d78dc46a4ce05..dac8135f8e3fe 100644 Binary files a/sound/ambience/ambicave.ogg and b/sound/ambience/ambicave.ogg differ diff --git a/sound/ambience/ambigen12.ogg b/sound/ambience/ambigen12.ogg index 0ae24a9a680c9..27885070f4c71 100644 Binary files a/sound/ambience/ambigen12.ogg and b/sound/ambience/ambigen12.ogg differ diff --git a/sound/ambience/ambilava1.ogg b/sound/ambience/ambilava1.ogg index b552965faaccd..50cd0b23d5e1f 100644 Binary files a/sound/ambience/ambilava1.ogg and b/sound/ambience/ambilava1.ogg differ diff --git a/sound/ambience/ambimaint6.ogg b/sound/ambience/ambimaint6.ogg index f83e3ed1d6b0e..b4ad4350f4977 100644 Binary files a/sound/ambience/ambimaint6.ogg and b/sound/ambience/ambimaint6.ogg differ diff --git a/sound/ambience/ambimaint7.ogg b/sound/ambience/ambimaint7.ogg index 3db2f226a4ab5..9fa695102d821 100644 Binary files a/sound/ambience/ambimaint7.ogg and b/sound/ambience/ambimaint7.ogg differ diff --git a/sound/ambience/ambispace4.ogg b/sound/ambience/ambispace4.ogg index 76ef0814eaa5f..b3824c66135fc 100644 Binary files a/sound/ambience/ambispace4.ogg and b/sound/ambience/ambispace4.ogg differ diff --git a/sound/ambience/ambivapor1.ogg b/sound/ambience/ambivapor1.ogg index 4374f46710d88..6c43ff1ef0197 100644 Binary files a/sound/ambience/ambivapor1.ogg and b/sound/ambience/ambivapor1.ogg differ diff --git a/sound/ambience/antag/ayylien.ogg b/sound/ambience/antag/ayylien.ogg new file mode 100644 index 0000000000000..cfcb748fd775d Binary files /dev/null and b/sound/ambience/antag/ayylien.ogg differ diff --git a/sound/ambience/antag/heretic/ascend_ash.ogg b/sound/ambience/antag/heretic/ascend_ash.ogg new file mode 100644 index 0000000000000..a85aa0f6a9ccd Binary files /dev/null and b/sound/ambience/antag/heretic/ascend_ash.ogg differ diff --git a/sound/ambience/antag/heretic/ascend_blade.ogg b/sound/ambience/antag/heretic/ascend_blade.ogg new file mode 100644 index 0000000000000..da7c313ad8ad2 Binary files /dev/null and b/sound/ambience/antag/heretic/ascend_blade.ogg differ diff --git a/sound/ambience/antag/heretic/ascend_cosmic.ogg b/sound/ambience/antag/heretic/ascend_cosmic.ogg new file mode 100644 index 0000000000000..9ce740fa7e1e3 Binary files /dev/null and b/sound/ambience/antag/heretic/ascend_cosmic.ogg differ diff --git a/sound/ambience/antag/heretic/ascend_flesh.ogg b/sound/ambience/antag/heretic/ascend_flesh.ogg new file mode 100644 index 0000000000000..b488cafd0bf6c Binary files /dev/null and b/sound/ambience/antag/heretic/ascend_flesh.ogg differ diff --git a/sound/ambience/antag/heretic/ascend_knock.ogg b/sound/ambience/antag/heretic/ascend_knock.ogg new file mode 100644 index 0000000000000..73f0a7f0b3b5b Binary files /dev/null and b/sound/ambience/antag/heretic/ascend_knock.ogg differ diff --git a/sound/ambience/antag/heretic/ascend_moon.ogg b/sound/ambience/antag/heretic/ascend_moon.ogg new file mode 100644 index 0000000000000..b0d515686b20e Binary files /dev/null and b/sound/ambience/antag/heretic/ascend_moon.ogg differ diff --git a/sound/ambience/antag/heretic/ascend_rust.ogg b/sound/ambience/antag/heretic/ascend_rust.ogg new file mode 100644 index 0000000000000..5cfc73b2cf512 Binary files /dev/null and b/sound/ambience/antag/heretic/ascend_rust.ogg differ diff --git a/sound/ambience/antag/heretic/ascend_void.ogg b/sound/ambience/antag/heretic/ascend_void.ogg new file mode 100644 index 0000000000000..797784952d15c Binary files /dev/null and b/sound/ambience/antag/heretic/ascend_void.ogg differ diff --git a/sound/ambience/antag/ecult_op.ogg b/sound/ambience/antag/heretic/heretic_gain.ogg similarity index 100% rename from sound/ambience/antag/ecult_op.ogg rename to sound/ambience/antag/heretic/heretic_gain.ogg diff --git a/sound/ambience/antag/heretic/heretic_gain_intense.ogg b/sound/ambience/antag/heretic/heretic_gain_intense.ogg new file mode 100644 index 0000000000000..5e6d4f4174fc9 Binary files /dev/null and b/sound/ambience/antag/heretic/heretic_gain_intense.ogg differ diff --git a/sound/ambience/music/sisyphus/sisyphus.ogg b/sound/ambience/music/sisyphus/sisyphus.ogg new file mode 100644 index 0000000000000..c69d0b608ebc5 Binary files /dev/null and b/sound/ambience/music/sisyphus/sisyphus.ogg differ diff --git a/sound/attributions.txt b/sound/attributions.txt index be8df17c53577..dff6c31cb7f84 100644 --- a/sound/attributions.txt +++ b/sound/attributions.txt @@ -147,3 +147,62 @@ https://freesound.org/people/gynation/sounds/82378/ nightmare_poof.ogg and nightmare_reappear.ogg are comprised of breath_01.wav by Nightflame (CC0) and slide-click.wav by Qat (CC0) https://freesound.org/people/Qat/sounds/108332/ https://freesound.org/people/Nightflame/sounds/368615/ + +modified by grungussuss: +male_sneeze1.ogg: https://freesound.org/people/InspectorJ/sounds/352177/ , license: CC BY 4.0 DEED +male_cry1.ogg: https://freesound.org/people/jacobmathiassen/sounds/254869/ , license: CC BY 4.0 DEED +male_cry2.ogg: https://freesound.org/people/scottemoil/sounds/263776/ , license: CC0 1.0 DEED +male_cry3.ogg: https://freesound.org/people/qubodup/sounds/200428/ , license: CC BY 4.0 DEED +female_cry1.ogg: https://freesound.org/people/Luzanne0/sounds/445299/ , license: CC BY-NC 3.0 DEED +female_cry2.ogg: https://freesound.org/people/Idalize/sounds/408211/ , license: CC BY-NC 4.0 DEED +female_cough1.ogg: https://freesound.org/people/OwlStorm/sounds/151213/ , license: CC0 1.0 DEED +female_cough2.ogg: https://freesound.org/people/thatkellytrna/sounds/425777/ , license: CC0 1.0 DEED +female_cough3.ogg: https://freesound.org/people/Luzanne0/sounds/445293/ , license: CC BY-NC 3.0 DEED +female_cough4.ogg: https://freesound.org/people/Luzanne0/sounds/445293/ , license: CC BY-NC 3.0 DEED +female_cough5.ogg: https://freesound.org/people/DarkNightPrincess/sounds/625322/ , license: CC0 1.0 DEED +female_cough6.ogg: https://freesound.org/people/drotzruhn/sounds/405206/ , license: CC BY 4.0 DEED +male_cough1.ogg: https://freesound.org/people/Harris85/sounds/208761/ , license: CC0 1.0 DEED +male_cough2.ogg: https://freesound.org/people/midwestdocumentary/sounds/722622/ , license: CC0 1.0 DEED +male_cough3.ogg: https://freesound.org/people/hadescolossus/sounds/701162/ , license: CC0 1.0 DEED +male_cough4.ogg: https://freesound.org/people/SoundDesignForYou/sounds/646652/ , license: CC0 1.0 DEED +male_cough5.ogg: https://freesound.org/people/SoundDesignForYou/sounds/646654/ , license: CC0 1.0 DEED +male_cough6.ogg: https://freesound.org/people/SoundDesignForYou/sounds/646656/ , license: CC0 1.0 DEED +lizard_laugh1.ogg: https://youtu.be/I7CX0AS8RNI , License: CC-BY-3.0 +moth_laugh1.ogg: https://github.com/BeeStation/BeeStation-Hornet/blob/11ba3fa04105c93dd96a63ad4afaef4b20c02d0d/sound/emotes/ , license: CC-BY-SA-3.0 +whistle1.ogg: https://freesound.org/people/taure/sounds/411638/ , license: CC0 1.0 DEED + +portal_close, portal_open_1 , portal_open_2 , portal_open_3 , portal_travel made by @virgilcore (discord IGN) + +toilet-flush.ogg is made by shw489 (CC0): +https://freesound.org/people/shw489/sounds/234389/ + +soup_boil1.ogg through soup_boil5.ogg and soup_boil_end.ogg are taken from Boiling Soup from Freesoung.org (CC4) and converted to OGG / split apart (but is otherwise unchanged): +https://freesound.org/people/jorickhoofd/sounds/632783/ + +compressed_air1.ogg is taken from Freesound and converted to ogg: +https://freesound.org/people/Geoff-Bremner-Audio/sounds/682952/ +compressed_air2.ogg is taken from Freesound and converted to ogg: +https://freesound.org/people/Geoff-Bremner-Audio/sounds/682816/ +tank_insert_clunky.ogg was created by mixing compressed_air1 and clunk sound from Freesound: +https://freesound.org/people/BinaryMonkFlint/sounds/333296/ +tank_remove_thunk.ogg was made by mixing two sound tracks from Freesound: +https://freesound.org/people/lowdjinn/sounds/533885/ and; +https://freesound.org/people/BMacZero/sounds/96137/ + +valve_opening.ogg was made by mixing water flowing samples from: +https://freesound.org/people/scriotxstudios/sounds/349111/?attribution=1 and squeaky scrape sound from: +https://freesound.org/people/Department64/sounds/669028/ which was modified with lower pitch + +liquid_pour2.ogg and liquid_pour3.ogg were cut from +https://freesound.org/people/MattRuthSound/sounds/561896/ +https://freesound.org/people/MattRuthSound/sounds/561895/ + +ayylien.ogg was made by remixing: +SCIRetro_Energy Swells Synth_Funky Audio_Sonics Spices by Funky_Audio under CC0 -- https://freesound.org/people/realtheremin/sounds/119011/ +scifi_scare_a.aiff by realtheremin under CC0 -- https://freesound.org/people/Funky_Audio/sounds/729392/ + + +beaker_pickup.ogg was made by lowering pitch: +Bottle Tap.wav by alex_alexalex -- https://freesound.org/s/395492/ -- License: Attribution NonCommercial 3.0 +beaker_place.ogg was made by cutting and lowering pitch: +place glass object.wav by milpower -- https://freesound.org/s/353105/ -- License: Creative Commons 0 diff --git a/sound/creatures/raptor_1.ogg b/sound/creatures/raptor_1.ogg new file mode 100644 index 0000000000000..94d53073aa64f Binary files /dev/null and b/sound/creatures/raptor_1.ogg differ diff --git a/sound/creatures/raptor_2.ogg b/sound/creatures/raptor_2.ogg new file mode 100644 index 0000000000000..01c23ff03cedd Binary files /dev/null and b/sound/creatures/raptor_2.ogg differ diff --git a/sound/creatures/raptor_3.ogg b/sound/creatures/raptor_3.ogg new file mode 100644 index 0000000000000..dff3946ec0490 Binary files /dev/null and b/sound/creatures/raptor_3.ogg differ diff --git a/sound/creatures/raptor_4.ogg b/sound/creatures/raptor_4.ogg new file mode 100644 index 0000000000000..53c28c72ffdc9 Binary files /dev/null and b/sound/creatures/raptor_4.ogg differ diff --git a/sound/creatures/raptor_5.ogg b/sound/creatures/raptor_5.ogg new file mode 100644 index 0000000000000..dd424a1566fcb Binary files /dev/null and b/sound/creatures/raptor_5.ogg differ diff --git a/sound/effects/compressed_air1.ogg b/sound/effects/compressed_air1.ogg new file mode 100644 index 0000000000000..5fb1ff0672015 Binary files /dev/null and b/sound/effects/compressed_air1.ogg differ diff --git a/sound/effects/compressed_air2.ogg b/sound/effects/compressed_air2.ogg new file mode 100644 index 0000000000000..d26816f28e183 Binary files /dev/null and b/sound/effects/compressed_air2.ogg differ diff --git a/sound/effects/gas_hissing.ogg b/sound/effects/gas_hissing.ogg new file mode 100644 index 0000000000000..58df62ef0842f Binary files /dev/null and b/sound/effects/gas_hissing.ogg differ diff --git a/sound/effects/gateway_calibrated.ogg b/sound/effects/gateway_calibrated.ogg new file mode 100644 index 0000000000000..c88d0862c988d Binary files /dev/null and b/sound/effects/gateway_calibrated.ogg differ diff --git a/sound/effects/gateway_calibrating.ogg b/sound/effects/gateway_calibrating.ogg new file mode 100644 index 0000000000000..09ca63fbc10ff Binary files /dev/null and b/sound/effects/gateway_calibrating.ogg differ diff --git a/sound/effects/gateway_close.ogg b/sound/effects/gateway_close.ogg new file mode 100644 index 0000000000000..98e964aca130b Binary files /dev/null and b/sound/effects/gateway_close.ogg differ diff --git a/sound/effects/gateway_open.ogg b/sound/effects/gateway_open.ogg new file mode 100644 index 0000000000000..f6d11f7eedee2 Binary files /dev/null and b/sound/effects/gateway_open.ogg differ diff --git a/sound/effects/gateway_travel.ogg b/sound/effects/gateway_travel.ogg new file mode 100644 index 0000000000000..bbaed502790f0 Binary files /dev/null and b/sound/effects/gateway_travel.ogg differ diff --git a/sound/effects/glug.ogg b/sound/effects/glug.ogg new file mode 100644 index 0000000000000..268ff4557e8e6 Binary files /dev/null and b/sound/effects/glug.ogg differ diff --git a/sound/effects/huuu.ogg b/sound/effects/huuu.ogg index 9be0bebcfbd82..b8e055098ec2e 100644 Binary files a/sound/effects/huuu.ogg and b/sound/effects/huuu.ogg differ diff --git a/sound/effects/liquid_pour1.ogg b/sound/effects/liquid_pour1.ogg new file mode 100644 index 0000000000000..71e57ad19f7ef Binary files /dev/null and b/sound/effects/liquid_pour1.ogg differ diff --git a/sound/effects/liquid_pour2.ogg b/sound/effects/liquid_pour2.ogg new file mode 100644 index 0000000000000..773b30e59e5c0 Binary files /dev/null and b/sound/effects/liquid_pour2.ogg differ diff --git a/sound/effects/liquid_pour3.ogg b/sound/effects/liquid_pour3.ogg new file mode 100644 index 0000000000000..0548d7b14a4ed Binary files /dev/null and b/sound/effects/liquid_pour3.ogg differ diff --git a/sound/effects/portal_close.ogg b/sound/effects/portal_close.ogg new file mode 100644 index 0000000000000..b5910c460d54c Binary files /dev/null and b/sound/effects/portal_close.ogg differ diff --git a/sound/effects/portal_open_1.ogg b/sound/effects/portal_open_1.ogg new file mode 100644 index 0000000000000..02377a14e005e Binary files /dev/null and b/sound/effects/portal_open_1.ogg differ diff --git a/sound/effects/portal_open_2.ogg b/sound/effects/portal_open_2.ogg new file mode 100644 index 0000000000000..06309d8016028 Binary files /dev/null and b/sound/effects/portal_open_2.ogg differ diff --git a/sound/effects/portal_open_3.ogg b/sound/effects/portal_open_3.ogg new file mode 100644 index 0000000000000..b2d0e8a01b41f Binary files /dev/null and b/sound/effects/portal_open_3.ogg differ diff --git a/sound/effects/portal_travel.ogg b/sound/effects/portal_travel.ogg new file mode 100644 index 0000000000000..2c1e306b34ab4 Binary files /dev/null and b/sound/effects/portal_travel.ogg differ diff --git a/sound/effects/reee.ogg b/sound/effects/reee.ogg index 6a635f5a676b4..958dc60982153 100644 Binary files a/sound/effects/reee.ogg and b/sound/effects/reee.ogg differ diff --git a/sound/effects/soup_boil1.ogg b/sound/effects/soup_boil1.ogg new file mode 100644 index 0000000000000..0c869bb94fbf6 Binary files /dev/null and b/sound/effects/soup_boil1.ogg differ diff --git a/sound/effects/soup_boil2.ogg b/sound/effects/soup_boil2.ogg new file mode 100644 index 0000000000000..524d3b8c537e6 Binary files /dev/null and b/sound/effects/soup_boil2.ogg differ diff --git a/sound/effects/soup_boil3.ogg b/sound/effects/soup_boil3.ogg new file mode 100644 index 0000000000000..59a4c62ac40a5 Binary files /dev/null and b/sound/effects/soup_boil3.ogg differ diff --git a/sound/effects/soup_boil4.ogg b/sound/effects/soup_boil4.ogg new file mode 100644 index 0000000000000..4c18f4a353f48 Binary files /dev/null and b/sound/effects/soup_boil4.ogg differ diff --git a/sound/effects/soup_boil5.ogg b/sound/effects/soup_boil5.ogg new file mode 100644 index 0000000000000..a62bc985f4c56 Binary files /dev/null and b/sound/effects/soup_boil5.ogg differ diff --git a/sound/effects/soup_boil_end.ogg b/sound/effects/soup_boil_end.ogg new file mode 100644 index 0000000000000..7931242a4cf28 Binary files /dev/null and b/sound/effects/soup_boil_end.ogg differ diff --git a/sound/effects/tank_insert_clunky.ogg b/sound/effects/tank_insert_clunky.ogg new file mode 100644 index 0000000000000..585961770afae Binary files /dev/null and b/sound/effects/tank_insert_clunky.ogg differ diff --git a/sound/effects/tank_remove_thunk.ogg b/sound/effects/tank_remove_thunk.ogg new file mode 100644 index 0000000000000..db32055ce432c Binary files /dev/null and b/sound/effects/tank_remove_thunk.ogg differ diff --git a/sound/effects/valve_opening.ogg b/sound/effects/valve_opening.ogg new file mode 100644 index 0000000000000..9e71912041467 Binary files /dev/null and b/sound/effects/valve_opening.ogg differ diff --git a/sound/items/crowbar_prying.ogg b/sound/items/crowbar_prying.ogg new file mode 100644 index 0000000000000..5876802616def Binary files /dev/null and b/sound/items/crowbar_prying.ogg differ diff --git a/sound/items/eshield_recharge.ogg b/sound/items/eshield_recharge.ogg new file mode 100644 index 0000000000000..747ad4563e5c1 Binary files /dev/null and b/sound/items/eshield_recharge.ogg differ diff --git a/sound/items/handling/beaker_pickup.ogg b/sound/items/handling/beaker_pickup.ogg new file mode 100644 index 0000000000000..c31bf6856dcaf Binary files /dev/null and b/sound/items/handling/beaker_pickup.ogg differ diff --git a/sound/items/handling/beaker_place.ogg b/sound/items/handling/beaker_place.ogg new file mode 100644 index 0000000000000..14b3868d0673d Binary files /dev/null and b/sound/items/handling/beaker_place.ogg differ diff --git a/sound/items/internals_off.ogg b/sound/items/internals_off.ogg new file mode 100644 index 0000000000000..7336ec41d6144 Binary files /dev/null and b/sound/items/internals_off.ogg differ diff --git a/sound/items/internals_on.ogg b/sound/items/internals_on.ogg new file mode 100644 index 0000000000000..2a08a916d2f0b Binary files /dev/null and b/sound/items/internals_on.ogg differ diff --git a/sound/items/ratchet_fast.ogg b/sound/items/ratchet_fast.ogg new file mode 100644 index 0000000000000..d7a55e259202e Binary files /dev/null and b/sound/items/ratchet_fast.ogg differ diff --git a/sound/items/ratchet_slow.ogg b/sound/items/ratchet_slow.ogg new file mode 100644 index 0000000000000..d3a362b06c105 Binary files /dev/null and b/sound/items/ratchet_slow.ogg differ diff --git a/sound/items/screwdriver_operating.ogg b/sound/items/screwdriver_operating.ogg new file mode 100644 index 0000000000000..9e0659e382674 Binary files /dev/null and b/sound/items/screwdriver_operating.ogg differ diff --git a/sound/items/wirecutter_cut.ogg b/sound/items/wirecutter_cut.ogg new file mode 100644 index 0000000000000..143ac2fd9cdc8 Binary files /dev/null and b/sound/items/wirecutter_cut.ogg differ diff --git a/sound/items/xbow_lock.ogg b/sound/items/xbow_lock.ogg new file mode 100644 index 0000000000000..d465a95ca056f Binary files /dev/null and b/sound/items/xbow_lock.ogg differ diff --git a/sound/machines/attributions.txt b/sound/machines/attributions.txt new file mode 100644 index 0000000000000..b459be3d3e158 --- /dev/null +++ b/sound/machines/attributions.txt @@ -0,0 +1 @@ +sound/machines/lathe/lathe_print.ogg - made by kayozzx (discord) , license: CCbySA diff --git a/sound/machines/hiss.ogg b/sound/machines/hiss.ogg index a1b725eab931e..73ace2de31fcf 100644 Binary files a/sound/machines/hiss.ogg and b/sound/machines/hiss.ogg differ diff --git a/sound/machines/lathe/lathe_print.ogg b/sound/machines/lathe/lathe_print.ogg new file mode 100644 index 0000000000000..eace2da907558 Binary files /dev/null and b/sound/machines/lathe/lathe_print.ogg differ diff --git a/sound/machines/toilet_flush.ogg b/sound/machines/toilet_flush.ogg new file mode 100644 index 0000000000000..bddefe76f6a76 Binary files /dev/null and b/sound/machines/toilet_flush.ogg differ diff --git a/sound/magic/staff_shrink.ogg b/sound/magic/staff_shrink.ogg new file mode 100644 index 0000000000000..f2268130fd81c Binary files /dev/null and b/sound/magic/staff_shrink.ogg differ diff --git a/sound/runtime/hyperspace/hyperspace_begin.ogg b/sound/runtime/hyperspace/hyperspace_begin.ogg index 225e2d988209a..f1e36f9d8fcc8 100644 Binary files a/sound/runtime/hyperspace/hyperspace_begin.ogg and b/sound/runtime/hyperspace/hyperspace_begin.ogg differ diff --git a/sound/runtime/hyperspace/hyperspace_begin_distance.ogg b/sound/runtime/hyperspace/hyperspace_begin_distance.ogg index e79363743b4b7..6b2d3409094cf 100644 Binary files a/sound/runtime/hyperspace/hyperspace_begin_distance.ogg and b/sound/runtime/hyperspace/hyperspace_begin_distance.ogg differ diff --git a/sound/runtime/hyperspace/hyperspace_end.ogg b/sound/runtime/hyperspace/hyperspace_end.ogg index 64fb5214a962a..1c4320ae62c0f 100644 Binary files a/sound/runtime/hyperspace/hyperspace_end.ogg and b/sound/runtime/hyperspace/hyperspace_end.ogg differ diff --git a/sound/runtime/hyperspace/hyperspace_end_distance.ogg b/sound/runtime/hyperspace/hyperspace_end_distance.ogg index 591abb0ad25da..119ff1523e87e 100644 Binary files a/sound/runtime/hyperspace/hyperspace_end_distance.ogg and b/sound/runtime/hyperspace/hyperspace_end_distance.ogg differ diff --git a/sound/runtime/hyperspace/hyperspace_progress.ogg b/sound/runtime/hyperspace/hyperspace_progress.ogg index 7cc11a864ae5c..2072f06590516 100644 Binary files a/sound/runtime/hyperspace/hyperspace_progress.ogg and b/sound/runtime/hyperspace/hyperspace_progress.ogg differ diff --git a/sound/runtime/hyperspace/hyperspace_progress_distance.ogg b/sound/runtime/hyperspace/hyperspace_progress_distance.ogg index 2ba8533a8458f..7113513ed0b11 100644 Binary files a/sound/runtime/hyperspace/hyperspace_progress_distance.ogg and b/sound/runtime/hyperspace/hyperspace_progress_distance.ogg differ diff --git a/sound/voice/firebot/candle_tip.ogg b/sound/voice/firebot/candle_tip.ogg new file mode 100644 index 0000000000000..0f29f18e3f969 Binary files /dev/null and b/sound/voice/firebot/candle_tip.ogg differ diff --git a/sound/voice/firebot/electric_fire_tip.ogg b/sound/voice/firebot/electric_fire_tip.ogg new file mode 100644 index 0000000000000..29910024b1995 Binary files /dev/null and b/sound/voice/firebot/electric_fire_tip.ogg differ diff --git a/sound/voice/firebot/gasoline_tip.ogg b/sound/voice/firebot/gasoline_tip.ogg new file mode 100644 index 0000000000000..838c0d267e65e Binary files /dev/null and b/sound/voice/firebot/gasoline_tip.ogg differ diff --git a/sound/voice/human/female_cough1.ogg b/sound/voice/human/female_cough1.ogg new file mode 100644 index 0000000000000..53af74368c3bf Binary files /dev/null and b/sound/voice/human/female_cough1.ogg differ diff --git a/sound/voice/human/female_cough2.ogg b/sound/voice/human/female_cough2.ogg new file mode 100644 index 0000000000000..eb3551a31fecb Binary files /dev/null and b/sound/voice/human/female_cough2.ogg differ diff --git a/sound/voice/human/female_cough3.ogg b/sound/voice/human/female_cough3.ogg new file mode 100644 index 0000000000000..a075963d3b46d Binary files /dev/null and b/sound/voice/human/female_cough3.ogg differ diff --git a/sound/voice/human/female_cough4.ogg b/sound/voice/human/female_cough4.ogg new file mode 100644 index 0000000000000..0136ea42ccff2 Binary files /dev/null and b/sound/voice/human/female_cough4.ogg differ diff --git a/sound/voice/human/female_cough5.ogg b/sound/voice/human/female_cough5.ogg new file mode 100644 index 0000000000000..7562661bd4853 Binary files /dev/null and b/sound/voice/human/female_cough5.ogg differ diff --git a/sound/voice/human/female_cough6.ogg b/sound/voice/human/female_cough6.ogg new file mode 100644 index 0000000000000..62938b7b761af Binary files /dev/null and b/sound/voice/human/female_cough6.ogg differ diff --git a/sound/voice/human/female_cry1.ogg b/sound/voice/human/female_cry1.ogg new file mode 100644 index 0000000000000..f4f7386417194 Binary files /dev/null and b/sound/voice/human/female_cry1.ogg differ diff --git a/sound/voice/human/female_cry2.ogg b/sound/voice/human/female_cry2.ogg new file mode 100644 index 0000000000000..e81e93b5c3f83 Binary files /dev/null and b/sound/voice/human/female_cry2.ogg differ diff --git a/sound/voice/human/female_sneeze1.ogg b/sound/voice/human/female_sneeze1.ogg new file mode 100644 index 0000000000000..8fe020a8c7e8a Binary files /dev/null and b/sound/voice/human/female_sneeze1.ogg differ diff --git a/sound/voice/human/male_cough1.ogg b/sound/voice/human/male_cough1.ogg new file mode 100644 index 0000000000000..f553bd855ae94 Binary files /dev/null and b/sound/voice/human/male_cough1.ogg differ diff --git a/sound/voice/human/male_cough2.ogg b/sound/voice/human/male_cough2.ogg new file mode 100644 index 0000000000000..3dcc880175fb5 Binary files /dev/null and b/sound/voice/human/male_cough2.ogg differ diff --git a/sound/voice/human/male_cough3.ogg b/sound/voice/human/male_cough3.ogg new file mode 100644 index 0000000000000..a87ba9cc4c730 Binary files /dev/null and b/sound/voice/human/male_cough3.ogg differ diff --git a/sound/voice/human/male_cough4.ogg b/sound/voice/human/male_cough4.ogg new file mode 100644 index 0000000000000..38052dc78711b Binary files /dev/null and b/sound/voice/human/male_cough4.ogg differ diff --git a/sound/voice/human/male_cough5.ogg b/sound/voice/human/male_cough5.ogg new file mode 100644 index 0000000000000..5a1b836775dbf Binary files /dev/null and b/sound/voice/human/male_cough5.ogg differ diff --git a/sound/voice/human/male_cough6.ogg b/sound/voice/human/male_cough6.ogg new file mode 100644 index 0000000000000..cfe4e08655b94 Binary files /dev/null and b/sound/voice/human/male_cough6.ogg differ diff --git a/sound/voice/human/male_cry1.ogg b/sound/voice/human/male_cry1.ogg new file mode 100644 index 0000000000000..50ffd0cf72a7d Binary files /dev/null and b/sound/voice/human/male_cry1.ogg differ diff --git a/sound/voice/human/male_cry2.ogg b/sound/voice/human/male_cry2.ogg new file mode 100644 index 0000000000000..8d35a4d527669 Binary files /dev/null and b/sound/voice/human/male_cry2.ogg differ diff --git a/sound/voice/human/male_cry3.ogg b/sound/voice/human/male_cry3.ogg new file mode 100644 index 0000000000000..58f39b5fff134 Binary files /dev/null and b/sound/voice/human/male_cry3.ogg differ diff --git a/sound/voice/human/male_sneeze1.ogg b/sound/voice/human/male_sneeze1.ogg new file mode 100644 index 0000000000000..1c7e8f42534d8 Binary files /dev/null and b/sound/voice/human/male_sneeze1.ogg differ diff --git a/sound/voice/human/whistle1.ogg b/sound/voice/human/whistle1.ogg new file mode 100644 index 0000000000000..4109260659723 Binary files /dev/null and b/sound/voice/human/whistle1.ogg differ diff --git a/sound/voice/lizard/lizard_laugh1.ogg b/sound/voice/lizard/lizard_laugh1.ogg new file mode 100644 index 0000000000000..b2c02e6d2fcb0 Binary files /dev/null and b/sound/voice/lizard/lizard_laugh1.ogg differ diff --git a/sound/voice/moth/moth_laugh1.ogg b/sound/voice/moth/moth_laugh1.ogg new file mode 100644 index 0000000000000..391d6c5aefe2c Binary files /dev/null and b/sound/voice/moth/moth_laugh1.ogg differ diff --git a/sound/vox_fem/absorb.ogg b/sound/vox_fem/absorb.ogg new file mode 100644 index 0000000000000..e05b4aa464570 Binary files /dev/null and b/sound/vox_fem/absorb.ogg differ diff --git a/sound/vox_fem/absorbed.ogg b/sound/vox_fem/absorbed.ogg new file mode 100644 index 0000000000000..726f1aa8c6ffb Binary files /dev/null and b/sound/vox_fem/absorbed.ogg differ diff --git a/sound/vox_fem/absorbing.ogg b/sound/vox_fem/absorbing.ogg new file mode 100644 index 0000000000000..8b8c1f575c744 Binary files /dev/null and b/sound/vox_fem/absorbing.ogg differ diff --git a/sound/vox_fem/activating.ogg b/sound/vox_fem/activating.ogg new file mode 100644 index 0000000000000..8082efb691143 Binary files /dev/null and b/sound/vox_fem/activating.ogg differ diff --git a/sound/vox_fem/activation.ogg b/sound/vox_fem/activation.ogg new file mode 100644 index 0000000000000..f06d33245df5b Binary files /dev/null and b/sound/vox_fem/activation.ogg differ diff --git a/sound/vox_fem/active.ogg b/sound/vox_fem/active.ogg new file mode 100644 index 0000000000000..54d0c1eb45f5c Binary files /dev/null and b/sound/vox_fem/active.ogg differ diff --git a/sound/vox_fem/affect.ogg b/sound/vox_fem/affect.ogg new file mode 100644 index 0000000000000..4c9b7aaeaad67 Binary files /dev/null and b/sound/vox_fem/affect.ogg differ diff --git a/sound/vox_fem/affected.ogg b/sound/vox_fem/affected.ogg new file mode 100644 index 0000000000000..c634e08f73421 Binary files /dev/null and b/sound/vox_fem/affected.ogg differ diff --git a/sound/vox_fem/affecting.ogg b/sound/vox_fem/affecting.ogg new file mode 100644 index 0000000000000..18f2e3c0c7a67 Binary files /dev/null and b/sound/vox_fem/affecting.ogg differ diff --git a/sound/vox_fem/alcohol.ogg b/sound/vox_fem/alcohol.ogg new file mode 100644 index 0000000000000..a304167a27f85 Binary files /dev/null and b/sound/vox_fem/alcohol.ogg differ diff --git a/sound/vox_fem/align.ogg b/sound/vox_fem/align.ogg new file mode 100644 index 0000000000000..bcf4b6465a89d Binary files /dev/null and b/sound/vox_fem/align.ogg differ diff --git a/sound/vox_fem/allow.ogg b/sound/vox_fem/allow.ogg new file mode 100644 index 0000000000000..ea0b8098fd75a Binary files /dev/null and b/sound/vox_fem/allow.ogg differ diff --git a/sound/vox_fem/alongside.ogg b/sound/vox_fem/alongside.ogg new file mode 100644 index 0000000000000..a96b9e7ba25d0 Binary files /dev/null and b/sound/vox_fem/alongside.ogg differ diff --git a/sound/vox_fem/amount.ogg b/sound/vox_fem/amount.ogg new file mode 100644 index 0000000000000..19b59e8263cf8 Binary files /dev/null and b/sound/vox_fem/amount.ogg differ diff --git a/sound/vox_fem/annihilate.ogg b/sound/vox_fem/annihilate.ogg new file mode 100644 index 0000000000000..375dfda691fd1 Binary files /dev/null and b/sound/vox_fem/annihilate.ogg differ diff --git a/sound/vox_fem/annihilated.ogg b/sound/vox_fem/annihilated.ogg new file mode 100644 index 0000000000000..823cc93dc6a6c Binary files /dev/null and b/sound/vox_fem/annihilated.ogg differ diff --git a/sound/vox_fem/annihilating.ogg b/sound/vox_fem/annihilating.ogg new file mode 100644 index 0000000000000..95a507df8503f Binary files /dev/null and b/sound/vox_fem/annihilating.ogg differ diff --git a/sound/vox_fem/annihilation.ogg b/sound/vox_fem/annihilation.ogg new file mode 100644 index 0000000000000..6acb85503388c Binary files /dev/null and b/sound/vox_fem/annihilation.ogg differ diff --git a/sound/vox_fem/anti-noblium.ogg b/sound/vox_fem/anti-noblium.ogg new file mode 100644 index 0000000000000..70f89e82229a7 Binary files /dev/null and b/sound/vox_fem/anti-noblium.ogg differ diff --git a/sound/vox_fem/arc.ogg b/sound/vox_fem/arc.ogg new file mode 100644 index 0000000000000..3ebed29740dd1 Binary files /dev/null and b/sound/vox_fem/arc.ogg differ diff --git a/sound/vox_fem/arcs.ogg b/sound/vox_fem/arcs.ogg new file mode 100644 index 0000000000000..cb32908d5b84e Binary files /dev/null and b/sound/vox_fem/arcs.ogg differ diff --git a/sound/vox_fem/around.ogg b/sound/vox_fem/around.ogg new file mode 100644 index 0000000000000..76183f92cda08 Binary files /dev/null and b/sound/vox_fem/around.ogg differ diff --git a/sound/vox_fem/ask.ogg b/sound/vox_fem/ask.ogg new file mode 100644 index 0000000000000..c8d00b0039996 Binary files /dev/null and b/sound/vox_fem/ask.ogg differ diff --git a/sound/vox_fem/ate.ogg b/sound/vox_fem/ate.ogg new file mode 100644 index 0000000000000..8dcdd461d11c2 Binary files /dev/null and b/sound/vox_fem/ate.ogg differ diff --git a/sound/vox_fem/beaker.ogg b/sound/vox_fem/beaker.ogg new file mode 100644 index 0000000000000..6863afc5c79af Binary files /dev/null and b/sound/vox_fem/beaker.ogg differ diff --git a/sound/vox_fem/began.ogg b/sound/vox_fem/began.ogg new file mode 100644 index 0000000000000..548143aff53c5 Binary files /dev/null and b/sound/vox_fem/began.ogg differ diff --git a/sound/vox_fem/begin.ogg b/sound/vox_fem/begin.ogg new file mode 100644 index 0000000000000..5c70cebbb0966 Binary files /dev/null and b/sound/vox_fem/begin.ogg differ diff --git a/sound/vox_fem/begins.ogg b/sound/vox_fem/begins.ogg new file mode 100644 index 0000000000000..5fedd2ef4b59b Binary files /dev/null and b/sound/vox_fem/begins.ogg differ diff --git a/sound/vox_fem/bottle.ogg b/sound/vox_fem/bottle.ogg new file mode 100644 index 0000000000000..b5bd1f34e761b Binary files /dev/null and b/sound/vox_fem/bottle.ogg differ diff --git a/sound/vox_fem/broke.ogg b/sound/vox_fem/broke.ogg new file mode 100644 index 0000000000000..a1a075d6769c9 Binary files /dev/null and b/sound/vox_fem/broke.ogg differ diff --git a/sound/vox_fem/broken.ogg b/sound/vox_fem/broken.ogg new file mode 100644 index 0000000000000..589dabc0a3924 Binary files /dev/null and b/sound/vox_fem/broken.ogg differ diff --git a/sound/vox_fem/bump.ogg b/sound/vox_fem/bump.ogg new file mode 100644 index 0000000000000..c6892a3412fa5 Binary files /dev/null and b/sound/vox_fem/bump.ogg differ diff --git a/sound/vox_fem/bumped.ogg b/sound/vox_fem/bumped.ogg new file mode 100644 index 0000000000000..6d111a8731d1a Binary files /dev/null and b/sound/vox_fem/bumped.ogg differ diff --git a/sound/vox_fem/bumps.ogg b/sound/vox_fem/bumps.ogg new file mode 100644 index 0000000000000..a7fff16f04802 Binary files /dev/null and b/sound/vox_fem/bumps.ogg differ diff --git a/sound/vox_fem/can.ogg b/sound/vox_fem/can.ogg new file mode 100644 index 0000000000000..0d77353ad99e1 Binary files /dev/null and b/sound/vox_fem/can.ogg differ diff --git a/sound/vox_fem/cascade.ogg b/sound/vox_fem/cascade.ogg new file mode 100644 index 0000000000000..cc7e70ed00d25 Binary files /dev/null and b/sound/vox_fem/cascade.ogg differ diff --git a/sound/vox_fem/cause.ogg b/sound/vox_fem/cause.ogg new file mode 100644 index 0000000000000..2294d0405d037 Binary files /dev/null and b/sound/vox_fem/cause.ogg differ diff --git a/sound/vox_fem/caused.ogg b/sound/vox_fem/caused.ogg new file mode 100644 index 0000000000000..c91eecaa90db4 Binary files /dev/null and b/sound/vox_fem/caused.ogg differ diff --git a/sound/vox_fem/causes.ogg b/sound/vox_fem/causes.ogg new file mode 100644 index 0000000000000..019430ccb4a07 Binary files /dev/null and b/sound/vox_fem/causes.ogg differ diff --git a/sound/vox_fem/causing.ogg b/sound/vox_fem/causing.ogg new file mode 100644 index 0000000000000..e41ab06c2b4ae Binary files /dev/null and b/sound/vox_fem/causing.ogg differ diff --git a/sound/vox_fem/charge.ogg b/sound/vox_fem/charge.ogg new file mode 100644 index 0000000000000..b5adb81d83b57 Binary files /dev/null and b/sound/vox_fem/charge.ogg differ diff --git a/sound/vox_fem/clog.ogg b/sound/vox_fem/clog.ogg new file mode 100644 index 0000000000000..31e6bf604ec49 Binary files /dev/null and b/sound/vox_fem/clog.ogg differ diff --git a/sound/vox_fem/clothing.ogg b/sound/vox_fem/clothing.ogg new file mode 100644 index 0000000000000..912a7532fe3a4 Binary files /dev/null and b/sound/vox_fem/clothing.ogg differ diff --git a/sound/vox_fem/coil.ogg b/sound/vox_fem/coil.ogg new file mode 100644 index 0000000000000..d9a76618eb4f5 Binary files /dev/null and b/sound/vox_fem/coil.ogg differ diff --git a/sound/vox_fem/coils.ogg b/sound/vox_fem/coils.ogg new file mode 100644 index 0000000000000..12d0d54fd3e8f Binary files /dev/null and b/sound/vox_fem/coils.ogg differ diff --git a/sound/vox_fem/combat.ogg b/sound/vox_fem/combat.ogg new file mode 100644 index 0000000000000..51a438ea95325 Binary files /dev/null and b/sound/vox_fem/combat.ogg differ diff --git a/sound/vox_fem/combatant.ogg b/sound/vox_fem/combatant.ogg new file mode 100644 index 0000000000000..d82f5dddd0092 Binary files /dev/null and b/sound/vox_fem/combatant.ogg differ diff --git a/sound/vox_fem/complete.ogg b/sound/vox_fem/complete.ogg new file mode 100644 index 0000000000000..134d280d068ff Binary files /dev/null and b/sound/vox_fem/complete.ogg differ diff --git a/sound/vox_fem/completed.ogg b/sound/vox_fem/completed.ogg new file mode 100644 index 0000000000000..bdeca3b4fe34d Binary files /dev/null and b/sound/vox_fem/completed.ogg differ diff --git a/sound/vox_fem/completion.ogg b/sound/vox_fem/completion.ogg new file mode 100644 index 0000000000000..c4d65fbdad0c7 Binary files /dev/null and b/sound/vox_fem/completion.ogg differ diff --git a/sound/vox_fem/conditions.ogg b/sound/vox_fem/conditions.ogg new file mode 100644 index 0000000000000..79e0a6bfe8f3a Binary files /dev/null and b/sound/vox_fem/conditions.ogg differ diff --git a/sound/vox_fem/configure.ogg b/sound/vox_fem/configure.ogg new file mode 100644 index 0000000000000..753339e761e8a Binary files /dev/null and b/sound/vox_fem/configure.ogg differ diff --git a/sound/vox_fem/configured.ogg b/sound/vox_fem/configured.ogg new file mode 100644 index 0000000000000..544ed189add4f Binary files /dev/null and b/sound/vox_fem/configured.ogg differ diff --git a/sound/vox_fem/configuring.ogg b/sound/vox_fem/configuring.ogg new file mode 100644 index 0000000000000..eb81a1bb1df1c Binary files /dev/null and b/sound/vox_fem/configuring.ogg differ diff --git a/sound/vox_fem/container.ogg b/sound/vox_fem/container.ogg new file mode 100644 index 0000000000000..59fe11b5f48c7 Binary files /dev/null and b/sound/vox_fem/container.ogg differ diff --git a/sound/vox_fem/cool.ogg b/sound/vox_fem/cool.ogg new file mode 100644 index 0000000000000..0e8c39a92608c Binary files /dev/null and b/sound/vox_fem/cool.ogg differ diff --git a/sound/vox_fem/cooling.ogg b/sound/vox_fem/cooling.ogg new file mode 100644 index 0000000000000..eef866ca1b16b Binary files /dev/null and b/sound/vox_fem/cooling.ogg differ diff --git a/sound/vox_fem/could.ogg b/sound/vox_fem/could.ogg new file mode 100644 index 0000000000000..fdbd14f696c29 Binary files /dev/null and b/sound/vox_fem/could.ogg differ diff --git a/sound/vox_fem/couldnt.ogg b/sound/vox_fem/couldnt.ogg new file mode 100644 index 0000000000000..80550544ee497 Binary files /dev/null and b/sound/vox_fem/couldnt.ogg differ diff --git a/sound/vox_fem/countdown.ogg b/sound/vox_fem/countdown.ogg new file mode 100644 index 0000000000000..93b0f64961575 Binary files /dev/null and b/sound/vox_fem/countdown.ogg differ diff --git a/sound/vox_fem/create.ogg b/sound/vox_fem/create.ogg new file mode 100644 index 0000000000000..f4f1797202af2 Binary files /dev/null and b/sound/vox_fem/create.ogg differ diff --git a/sound/vox_fem/creating.ogg b/sound/vox_fem/creating.ogg new file mode 100644 index 0000000000000..ca2a92d5d7264 Binary files /dev/null and b/sound/vox_fem/creating.ogg differ diff --git a/sound/vox_fem/delaminating.ogg b/sound/vox_fem/delaminating.ogg new file mode 100644 index 0000000000000..3c023387abf4a Binary files /dev/null and b/sound/vox_fem/delaminating.ogg differ diff --git a/sound/vox_fem/delamination.ogg b/sound/vox_fem/delamination.ogg new file mode 100644 index 0000000000000..993c06fd4eae7 Binary files /dev/null and b/sound/vox_fem/delamination.ogg differ diff --git a/sound/vox_fem/deny.ogg b/sound/vox_fem/deny.ogg new file mode 100644 index 0000000000000..df6b5cb40fb63 Binary files /dev/null and b/sound/vox_fem/deny.ogg differ diff --git a/sound/vox_fem/detect.ogg b/sound/vox_fem/detect.ogg new file mode 100644 index 0000000000000..e5ea9092f0af4 Binary files /dev/null and b/sound/vox_fem/detect.ogg differ diff --git a/sound/vox_fem/detecting.ogg b/sound/vox_fem/detecting.ogg new file mode 100644 index 0000000000000..1b849cd836ddb Binary files /dev/null and b/sound/vox_fem/detecting.ogg differ diff --git a/sound/vox_fem/different.ogg b/sound/vox_fem/different.ogg new file mode 100644 index 0000000000000..dfce0903818db Binary files /dev/null and b/sound/vox_fem/different.ogg differ diff --git a/sound/vox_fem/direct.ogg b/sound/vox_fem/direct.ogg new file mode 100644 index 0000000000000..f1268e34a0968 Binary files /dev/null and b/sound/vox_fem/direct.ogg differ diff --git a/sound/vox_fem/dont.ogg b/sound/vox_fem/dont.ogg new file mode 100644 index 0000000000000..20723c8687ca3 Binary files /dev/null and b/sound/vox_fem/dont.ogg differ diff --git a/sound/vox_fem/double.ogg b/sound/vox_fem/double.ogg new file mode 100644 index 0000000000000..3c3eb3157bc36 Binary files /dev/null and b/sound/vox_fem/double.ogg differ diff --git a/sound/vox_fem/dress.ogg b/sound/vox_fem/dress.ogg new file mode 100644 index 0000000000000..84cc7fe79b99f Binary files /dev/null and b/sound/vox_fem/dress.ogg differ diff --git a/sound/vox_fem/dressed.ogg b/sound/vox_fem/dressed.ogg new file mode 100644 index 0000000000000..4a9ef3515a63f Binary files /dev/null and b/sound/vox_fem/dressed.ogg differ diff --git a/sound/vox_fem/dressing.ogg b/sound/vox_fem/dressing.ogg new file mode 100644 index 0000000000000..dded3edabb3b4 Binary files /dev/null and b/sound/vox_fem/dressing.ogg differ diff --git a/sound/vox_fem/easily.ogg b/sound/vox_fem/easily.ogg new file mode 100644 index 0000000000000..cadf6f9291fbb Binary files /dev/null and b/sound/vox_fem/easily.ogg differ diff --git a/sound/vox_fem/eat.ogg b/sound/vox_fem/eat.ogg new file mode 100644 index 0000000000000..b33c5a3503459 Binary files /dev/null and b/sound/vox_fem/eat.ogg differ diff --git a/sound/vox_fem/eaten.ogg b/sound/vox_fem/eaten.ogg new file mode 100644 index 0000000000000..9005930d0f6ad Binary files /dev/null and b/sound/vox_fem/eaten.ogg differ diff --git a/sound/vox_fem/education.ogg b/sound/vox_fem/education.ogg new file mode 100644 index 0000000000000..9a7ed1d17d12c Binary files /dev/null and b/sound/vox_fem/education.ogg differ diff --git a/sound/vox_fem/effects.ogg b/sound/vox_fem/effects.ogg new file mode 100644 index 0000000000000..59eb22c67fe4c Binary files /dev/null and b/sound/vox_fem/effects.ogg differ diff --git a/sound/vox_fem/electrical.ogg b/sound/vox_fem/electrical.ogg new file mode 100644 index 0000000000000..08e40b2367c55 Binary files /dev/null and b/sound/vox_fem/electrical.ogg differ diff --git a/sound/vox_fem/emitted.ogg b/sound/vox_fem/emitted.ogg new file mode 100644 index 0000000000000..d31b6307a3d1d Binary files /dev/null and b/sound/vox_fem/emitted.ogg differ diff --git a/sound/vox_fem/emitter.ogg b/sound/vox_fem/emitter.ogg new file mode 100644 index 0000000000000..6662ece8be40c Binary files /dev/null and b/sound/vox_fem/emitter.ogg differ diff --git a/sound/vox_fem/emitting.ogg b/sound/vox_fem/emitting.ogg new file mode 100644 index 0000000000000..377f792c08016 Binary files /dev/null and b/sound/vox_fem/emitting.ogg differ diff --git a/sound/vox_fem/end.ogg b/sound/vox_fem/end.ogg new file mode 100644 index 0000000000000..95b430e8b6434 Binary files /dev/null and b/sound/vox_fem/end.ogg differ diff --git a/sound/vox_fem/ends.ogg b/sound/vox_fem/ends.ogg new file mode 100644 index 0000000000000..34e06feb39ef7 Binary files /dev/null and b/sound/vox_fem/ends.ogg differ diff --git a/sound/vox_fem/enough.ogg b/sound/vox_fem/enough.ogg new file mode 100644 index 0000000000000..b7056903b955e Binary files /dev/null and b/sound/vox_fem/enough.ogg differ diff --git a/sound/vox_fem/even.ogg b/sound/vox_fem/even.ogg new file mode 100644 index 0000000000000..75294ef40251a Binary files /dev/null and b/sound/vox_fem/even.ogg differ diff --git a/sound/vox_fem/every.ogg b/sound/vox_fem/every.ogg new file mode 100644 index 0000000000000..6468158bd7dca Binary files /dev/null and b/sound/vox_fem/every.ogg differ diff --git a/sound/vox_fem/everybody.ogg b/sound/vox_fem/everybody.ogg new file mode 100644 index 0000000000000..8d8cc97489485 Binary files /dev/null and b/sound/vox_fem/everybody.ogg differ diff --git a/sound/vox_fem/everyone.ogg b/sound/vox_fem/everyone.ogg new file mode 100644 index 0000000000000..19e137b9a0cb6 Binary files /dev/null and b/sound/vox_fem/everyone.ogg differ diff --git a/sound/vox_fem/exploded.ogg b/sound/vox_fem/exploded.ogg new file mode 100644 index 0000000000000..1534b362892c6 Binary files /dev/null and b/sound/vox_fem/exploded.ogg differ diff --git a/sound/vox_fem/exploding.ogg b/sound/vox_fem/exploding.ogg new file mode 100644 index 0000000000000..a6980e6b53b70 Binary files /dev/null and b/sound/vox_fem/exploding.ogg differ diff --git a/sound/vox_fem/external.ogg b/sound/vox_fem/external.ogg new file mode 100644 index 0000000000000..d6f39b2651e0b Binary files /dev/null and b/sound/vox_fem/external.ogg differ diff --git a/sound/vox_fem/extra.ogg b/sound/vox_fem/extra.ogg new file mode 100644 index 0000000000000..0b5b16c6957b4 Binary files /dev/null and b/sound/vox_fem/extra.ogg differ diff --git a/sound/vox_fem/feature.ogg b/sound/vox_fem/feature.ogg new file mode 100644 index 0000000000000..59a3f68d456a6 Binary files /dev/null and b/sound/vox_fem/feature.ogg differ diff --git a/sound/vox_fem/featured.ogg b/sound/vox_fem/featured.ogg new file mode 100644 index 0000000000000..e087b0d7cc668 Binary files /dev/null and b/sound/vox_fem/featured.ogg differ diff --git a/sound/vox_fem/features.ogg b/sound/vox_fem/features.ogg new file mode 100644 index 0000000000000..745992b760a7a Binary files /dev/null and b/sound/vox_fem/features.ogg differ diff --git a/sound/vox_fem/featuring.ogg b/sound/vox_fem/featuring.ogg new file mode 100644 index 0000000000000..72578f2bb19d6 Binary files /dev/null and b/sound/vox_fem/featuring.ogg differ diff --git a/sound/vox_fem/few.ogg b/sound/vox_fem/few.ogg new file mode 100644 index 0000000000000..5ba76619c0f4f Binary files /dev/null and b/sound/vox_fem/few.ogg differ diff --git a/sound/vox_fem/filter.ogg b/sound/vox_fem/filter.ogg new file mode 100644 index 0000000000000..3b2ae95e37ff1 Binary files /dev/null and b/sound/vox_fem/filter.ogg differ diff --git a/sound/vox_fem/filters.ogg b/sound/vox_fem/filters.ogg new file mode 100644 index 0000000000000..204b82da198eb Binary files /dev/null and b/sound/vox_fem/filters.ogg differ diff --git a/sound/vox_fem/foolish.ogg b/sound/vox_fem/foolish.ogg new file mode 100644 index 0000000000000..214ed30f2c43c Binary files /dev/null and b/sound/vox_fem/foolish.ogg differ diff --git a/sound/vox_fem/freon.ogg b/sound/vox_fem/freon.ogg new file mode 100644 index 0000000000000..82128fee24109 Binary files /dev/null and b/sound/vox_fem/freon.ogg differ diff --git a/sound/vox_fem/gases.ogg b/sound/vox_fem/gases.ogg new file mode 100644 index 0000000000000..0605a2605566f Binary files /dev/null and b/sound/vox_fem/gases.ogg differ diff --git a/sound/vox_fem/gave.ogg b/sound/vox_fem/gave.ogg new file mode 100644 index 0000000000000..beb35f1f4215b Binary files /dev/null and b/sound/vox_fem/gave.ogg differ diff --git a/sound/vox_fem/gear.ogg b/sound/vox_fem/gear.ogg new file mode 100644 index 0000000000000..629667e5df418 Binary files /dev/null and b/sound/vox_fem/gear.ogg differ diff --git a/sound/vox_fem/geared.ogg b/sound/vox_fem/geared.ogg new file mode 100644 index 0000000000000..7188c657589d4 Binary files /dev/null and b/sound/vox_fem/geared.ogg differ diff --git a/sound/vox_fem/gearing.ogg b/sound/vox_fem/gearing.ogg new file mode 100644 index 0000000000000..9e27a7956943d Binary files /dev/null and b/sound/vox_fem/gearing.ogg differ diff --git a/sound/vox_fem/generate.ogg b/sound/vox_fem/generate.ogg new file mode 100644 index 0000000000000..ceb09ec3b4360 Binary files /dev/null and b/sound/vox_fem/generate.ogg differ diff --git a/sound/vox_fem/generated.ogg b/sound/vox_fem/generated.ogg new file mode 100644 index 0000000000000..42a49e7d43e54 Binary files /dev/null and b/sound/vox_fem/generated.ogg differ diff --git a/sound/vox_fem/generating.ogg b/sound/vox_fem/generating.ogg new file mode 100644 index 0000000000000..a90e62d9dd760 Binary files /dev/null and b/sound/vox_fem/generating.ogg differ diff --git a/sound/vox_fem/give.ogg b/sound/vox_fem/give.ogg new file mode 100644 index 0000000000000..8144ba82cccea Binary files /dev/null and b/sound/vox_fem/give.ogg differ diff --git a/sound/vox_fem/given.ogg b/sound/vox_fem/given.ogg new file mode 100644 index 0000000000000..63f86c4878f8a Binary files /dev/null and b/sound/vox_fem/given.ogg differ diff --git a/sound/vox_fem/halon.ogg b/sound/vox_fem/halon.ogg new file mode 100644 index 0000000000000..0cab7dee9a5c9 Binary files /dev/null and b/sound/vox_fem/halon.ogg differ diff --git a/sound/vox_fem/hard.ogg b/sound/vox_fem/hard.ogg new file mode 100644 index 0000000000000..be1a80c3f091b Binary files /dev/null and b/sound/vox_fem/hard.ogg differ diff --git a/sound/vox_fem/hardly.ogg b/sound/vox_fem/hardly.ogg new file mode 100644 index 0000000000000..bb4de217a1767 Binary files /dev/null and b/sound/vox_fem/hardly.ogg differ diff --git a/sound/vox_fem/harness.ogg b/sound/vox_fem/harness.ogg new file mode 100644 index 0000000000000..a81840955f4b7 Binary files /dev/null and b/sound/vox_fem/harness.ogg differ diff --git a/sound/vox_fem/harnessed.ogg b/sound/vox_fem/harnessed.ogg new file mode 100644 index 0000000000000..d1f259c7bdfd4 Binary files /dev/null and b/sound/vox_fem/harnessed.ogg differ diff --git a/sound/vox_fem/harnessing.ogg b/sound/vox_fem/harnessing.ogg new file mode 100644 index 0000000000000..3dbdd03af886d Binary files /dev/null and b/sound/vox_fem/harnessing.ogg differ diff --git a/sound/vox_fem/heal.ogg b/sound/vox_fem/heal.ogg new file mode 100644 index 0000000000000..f31b53c1cba5b Binary files /dev/null and b/sound/vox_fem/heal.ogg differ diff --git a/sound/vox_fem/healed.ogg b/sound/vox_fem/healed.ogg new file mode 100644 index 0000000000000..80eea8068a5b7 Binary files /dev/null and b/sound/vox_fem/healed.ogg differ diff --git a/sound/vox_fem/healing.ogg b/sound/vox_fem/healing.ogg new file mode 100644 index 0000000000000..6ebcc588294ff Binary files /dev/null and b/sound/vox_fem/healing.ogg differ diff --git a/sound/vox_fem/healium.ogg b/sound/vox_fem/healium.ogg new file mode 100644 index 0000000000000..79b4fd19de329 Binary files /dev/null and b/sound/vox_fem/healium.ogg differ diff --git a/sound/vox_fem/heated.ogg b/sound/vox_fem/heated.ogg new file mode 100644 index 0000000000000..e3db67adee43b Binary files /dev/null and b/sound/vox_fem/heated.ogg differ diff --git a/sound/vox_fem/heating.ogg b/sound/vox_fem/heating.ogg new file mode 100644 index 0000000000000..553b4d5576605 Binary files /dev/null and b/sound/vox_fem/heating.ogg differ diff --git a/sound/vox_fem/hydrogen.ogg b/sound/vox_fem/hydrogen.ogg new file mode 100644 index 0000000000000..050a3bc028cc5 Binary files /dev/null and b/sound/vox_fem/hydrogen.ogg differ diff --git a/sound/vox_fem/hyper-noblium.ogg b/sound/vox_fem/hyper-noblium.ogg new file mode 100644 index 0000000000000..4fda6b404689f Binary files /dev/null and b/sound/vox_fem/hyper-noblium.ogg differ diff --git a/sound/vox_fem/inert.ogg b/sound/vox_fem/inert.ogg new file mode 100644 index 0000000000000..00826c23b2afa Binary files /dev/null and b/sound/vox_fem/inert.ogg differ diff --git a/sound/vox_fem/internal.ogg b/sound/vox_fem/internal.ogg new file mode 100644 index 0000000000000..0cc275bd471c1 Binary files /dev/null and b/sound/vox_fem/internal.ogg differ diff --git a/sound/vox_fem/irradiate.ogg b/sound/vox_fem/irradiate.ogg new file mode 100644 index 0000000000000..d14b296179828 Binary files /dev/null and b/sound/vox_fem/irradiate.ogg differ diff --git a/sound/vox_fem/its.ogg b/sound/vox_fem/its.ogg new file mode 100644 index 0000000000000..b5c2c22dd5720 Binary files /dev/null and b/sound/vox_fem/its.ogg differ diff --git a/sound/vox_fem/job.ogg b/sound/vox_fem/job.ogg new file mode 100644 index 0000000000000..5b8186d0f7266 Binary files /dev/null and b/sound/vox_fem/job.ogg differ diff --git a/sound/vox_fem/jobs.ogg b/sound/vox_fem/jobs.ogg new file mode 100644 index 0000000000000..3fd3529e06c38 Binary files /dev/null and b/sound/vox_fem/jobs.ogg differ diff --git a/sound/vox_fem/kelvin.ogg b/sound/vox_fem/kelvin.ogg new file mode 100644 index 0000000000000..dd759e02214f6 Binary files /dev/null and b/sound/vox_fem/kelvin.ogg differ diff --git a/sound/vox_fem/limit.ogg b/sound/vox_fem/limit.ogg new file mode 100644 index 0000000000000..d88bd43e01d91 Binary files /dev/null and b/sound/vox_fem/limit.ogg differ diff --git a/sound/vox_fem/limited.ogg b/sound/vox_fem/limited.ogg new file mode 100644 index 0000000000000..df3d3b3ebe4c1 Binary files /dev/null and b/sound/vox_fem/limited.ogg differ diff --git a/sound/vox_fem/list.ogg b/sound/vox_fem/list.ogg new file mode 100644 index 0000000000000..1c3d643983307 Binary files /dev/null and b/sound/vox_fem/list.ogg differ diff --git a/sound/vox_fem/made.ogg b/sound/vox_fem/made.ogg new file mode 100644 index 0000000000000..3540661b5c1c9 Binary files /dev/null and b/sound/vox_fem/made.ogg differ diff --git a/sound/vox_fem/making.ogg b/sound/vox_fem/making.ogg new file mode 100644 index 0000000000000..d2ee9ab93e3dd Binary files /dev/null and b/sound/vox_fem/making.ogg differ diff --git a/sound/vox_fem/mean.ogg b/sound/vox_fem/mean.ogg new file mode 100644 index 0000000000000..d53391b033fdb Binary files /dev/null and b/sound/vox_fem/mean.ogg differ diff --git a/sound/vox_fem/means.ogg b/sound/vox_fem/means.ogg new file mode 100644 index 0000000000000..068cb7bfd1a73 Binary files /dev/null and b/sound/vox_fem/means.ogg differ diff --git a/sound/vox_fem/medium.ogg b/sound/vox_fem/medium.ogg new file mode 100644 index 0000000000000..0bd964ffe35b9 Binary files /dev/null and b/sound/vox_fem/medium.ogg differ diff --git a/sound/vox_fem/meson.ogg b/sound/vox_fem/meson.ogg new file mode 100644 index 0000000000000..5bd85d3292003 Binary files /dev/null and b/sound/vox_fem/meson.ogg differ diff --git a/sound/vox_fem/method.ogg b/sound/vox_fem/method.ogg new file mode 100644 index 0000000000000..4da8e60475f38 Binary files /dev/null and b/sound/vox_fem/method.ogg differ diff --git a/sound/vox_fem/miasma.ogg b/sound/vox_fem/miasma.ogg new file mode 100644 index 0000000000000..5956b203f87a1 Binary files /dev/null and b/sound/vox_fem/miasma.ogg differ diff --git a/sound/vox_fem/minute.ogg b/sound/vox_fem/minute.ogg new file mode 100644 index 0000000000000..fe29d747120de Binary files /dev/null and b/sound/vox_fem/minute.ogg differ diff --git a/sound/vox_fem/mixture.ogg b/sound/vox_fem/mixture.ogg new file mode 100644 index 0000000000000..63525110a7a70 Binary files /dev/null and b/sound/vox_fem/mixture.ogg differ diff --git a/sound/vox_fem/most.ogg b/sound/vox_fem/most.ogg new file mode 100644 index 0000000000000..472837fced880 Binary files /dev/null and b/sound/vox_fem/most.ogg differ diff --git a/sound/vox_fem/moved.ogg b/sound/vox_fem/moved.ogg new file mode 100644 index 0000000000000..e8eb17787ef4f Binary files /dev/null and b/sound/vox_fem/moved.ogg differ diff --git a/sound/vox_fem/moving.ogg b/sound/vox_fem/moving.ogg new file mode 100644 index 0000000000000..258c38a711668 Binary files /dev/null and b/sound/vox_fem/moving.ogg differ diff --git a/sound/vox_fem/near.ogg b/sound/vox_fem/near.ogg new file mode 100644 index 0000000000000..0c48f322133a8 Binary files /dev/null and b/sound/vox_fem/near.ogg differ diff --git a/sound/vox_fem/nearly.ogg b/sound/vox_fem/nearly.ogg new file mode 100644 index 0000000000000..2b76f6323f834 Binary files /dev/null and b/sound/vox_fem/nearly.ogg differ diff --git a/sound/vox_fem/none.ogg b/sound/vox_fem/none.ogg new file mode 100644 index 0000000000000..6c16899ce9264 Binary files /dev/null and b/sound/vox_fem/none.ogg differ diff --git a/sound/vox_fem/normal.ogg b/sound/vox_fem/normal.ogg new file mode 100644 index 0000000000000..cf68ed5ec5e29 Binary files /dev/null and b/sound/vox_fem/normal.ogg differ diff --git a/sound/vox_fem/normally.ogg b/sound/vox_fem/normally.ogg new file mode 100644 index 0000000000000..81d7c16d366d4 Binary files /dev/null and b/sound/vox_fem/normally.ogg differ diff --git a/sound/vox_fem/notably.ogg b/sound/vox_fem/notably.ogg new file mode 100644 index 0000000000000..d6f604390502f Binary files /dev/null and b/sound/vox_fem/notably.ogg differ diff --git a/sound/vox_fem/object.ogg b/sound/vox_fem/object.ogg new file mode 100644 index 0000000000000..091c4b6b190e6 Binary files /dev/null and b/sound/vox_fem/object.ogg differ diff --git a/sound/vox_fem/ordered.ogg b/sound/vox_fem/ordered.ogg new file mode 100644 index 0000000000000..a483e355544f8 Binary files /dev/null and b/sound/vox_fem/ordered.ogg differ diff --git a/sound/vox_fem/ordering.ogg b/sound/vox_fem/ordering.ogg new file mode 100644 index 0000000000000..e05a1534d3c5b Binary files /dev/null and b/sound/vox_fem/ordering.ogg differ diff --git a/sound/vox_fem/output.ogg b/sound/vox_fem/output.ogg new file mode 100644 index 0000000000000..fc3e5312c4eaf Binary files /dev/null and b/sound/vox_fem/output.ogg differ diff --git a/sound/vox_fem/own.ogg b/sound/vox_fem/own.ogg new file mode 100644 index 0000000000000..e978ba4a8da1e Binary files /dev/null and b/sound/vox_fem/own.ogg differ diff --git a/sound/vox_fem/pda.ogg b/sound/vox_fem/pda.ogg new file mode 100644 index 0000000000000..72407e2b0e324 Binary files /dev/null and b/sound/vox_fem/pda.ogg differ diff --git a/sound/vox_fem/plating.ogg b/sound/vox_fem/plating.ogg new file mode 100644 index 0000000000000..d0783ca5e351e Binary files /dev/null and b/sound/vox_fem/plating.ogg differ diff --git a/sound/vox_fem/pluoxium.ogg b/sound/vox_fem/pluoxium.ogg new file mode 100644 index 0000000000000..cb52c5ac29856 Binary files /dev/null and b/sound/vox_fem/pluoxium.ogg differ diff --git a/sound/vox_fem/portion.ogg b/sound/vox_fem/portion.ogg new file mode 100644 index 0000000000000..7f2f699da1900 Binary files /dev/null and b/sound/vox_fem/portion.ogg differ diff --git a/sound/vox_fem/powered.ogg b/sound/vox_fem/powered.ogg new file mode 100644 index 0000000000000..d03eb08d5645e Binary files /dev/null and b/sound/vox_fem/powered.ogg differ diff --git a/sound/vox_fem/powering.ogg b/sound/vox_fem/powering.ogg new file mode 100644 index 0000000000000..7c13b590846c2 Binary files /dev/null and b/sound/vox_fem/powering.ogg differ diff --git a/sound/vox_fem/premature.ogg b/sound/vox_fem/premature.ogg new file mode 100644 index 0000000000000..19fb67b8f3b87 Binary files /dev/null and b/sound/vox_fem/premature.ogg differ diff --git a/sound/vox_fem/prematurely.ogg b/sound/vox_fem/prematurely.ogg new file mode 100644 index 0000000000000..b3422a535f6ae Binary files /dev/null and b/sound/vox_fem/prematurely.ogg differ diff --git a/sound/vox_fem/priority.ogg b/sound/vox_fem/priority.ogg new file mode 100644 index 0000000000000..5084584a44e12 Binary files /dev/null and b/sound/vox_fem/priority.ogg differ diff --git a/sound/vox_fem/projectile.ogg b/sound/vox_fem/projectile.ogg new file mode 100644 index 0000000000000..ec6d297926ac9 Binary files /dev/null and b/sound/vox_fem/projectile.ogg differ diff --git a/sound/vox_fem/protect.ogg b/sound/vox_fem/protect.ogg new file mode 100644 index 0000000000000..512d7e30e27d1 Binary files /dev/null and b/sound/vox_fem/protect.ogg differ diff --git a/sound/vox_fem/protected.ogg b/sound/vox_fem/protected.ogg new file mode 100644 index 0000000000000..7f6c8c0f6efdc Binary files /dev/null and b/sound/vox_fem/protected.ogg differ diff --git a/sound/vox_fem/protection.ogg b/sound/vox_fem/protection.ogg new file mode 100644 index 0000000000000..90b6a508e2aa9 Binary files /dev/null and b/sound/vox_fem/protection.ogg differ diff --git a/sound/vox_fem/proto-nitrate.ogg b/sound/vox_fem/proto-nitrate.ogg new file mode 100644 index 0000000000000..13f3aed7b450e Binary files /dev/null and b/sound/vox_fem/proto-nitrate.ogg differ diff --git a/sound/vox_fem/pull.ogg b/sound/vox_fem/pull.ogg new file mode 100644 index 0000000000000..9ac8e2c399ad7 Binary files /dev/null and b/sound/vox_fem/pull.ogg differ diff --git a/sound/vox_fem/pulled.ogg b/sound/vox_fem/pulled.ogg new file mode 100644 index 0000000000000..ef3388a25c9a7 Binary files /dev/null and b/sound/vox_fem/pulled.ogg differ diff --git a/sound/vox_fem/pulling.ogg b/sound/vox_fem/pulling.ogg new file mode 100644 index 0000000000000..5a2b5532e5acb Binary files /dev/null and b/sound/vox_fem/pulling.ogg differ diff --git a/sound/vox_fem/pump.ogg b/sound/vox_fem/pump.ogg new file mode 100644 index 0000000000000..07400cb2b8c26 Binary files /dev/null and b/sound/vox_fem/pump.ogg differ diff --git a/sound/vox_fem/pumps.ogg b/sound/vox_fem/pumps.ogg new file mode 100644 index 0000000000000..eba663d3963c4 Binary files /dev/null and b/sound/vox_fem/pumps.ogg differ diff --git a/sound/vox_fem/release.ogg b/sound/vox_fem/release.ogg new file mode 100644 index 0000000000000..4a9350168483f Binary files /dev/null and b/sound/vox_fem/release.ogg differ diff --git a/sound/vox_fem/releasing.ogg b/sound/vox_fem/releasing.ogg new file mode 100644 index 0000000000000..3d2a5d0ed70bd Binary files /dev/null and b/sound/vox_fem/releasing.ogg differ diff --git a/sound/vox_fem/remove.ogg b/sound/vox_fem/remove.ogg new file mode 100644 index 0000000000000..e9b2cb3bc1204 Binary files /dev/null and b/sound/vox_fem/remove.ogg differ diff --git a/sound/vox_fem/removed.ogg b/sound/vox_fem/removed.ogg new file mode 100644 index 0000000000000..2a7d78e9280b5 Binary files /dev/null and b/sound/vox_fem/removed.ogg differ diff --git a/sound/vox_fem/removing.ogg b/sound/vox_fem/removing.ogg new file mode 100644 index 0000000000000..638d20b0c354d Binary files /dev/null and b/sound/vox_fem/removing.ogg differ diff --git a/sound/vox_fem/resistant.ogg b/sound/vox_fem/resistant.ogg new file mode 100644 index 0000000000000..4401519979172 Binary files /dev/null and b/sound/vox_fem/resistant.ogg differ diff --git a/sound/vox_fem/resisting.ogg b/sound/vox_fem/resisting.ogg new file mode 100644 index 0000000000000..c3c23d267fd94 Binary files /dev/null and b/sound/vox_fem/resisting.ogg differ diff --git a/sound/vox_fem/resonance.ogg b/sound/vox_fem/resonance.ogg new file mode 100644 index 0000000000000..0d569574c8363 Binary files /dev/null and b/sound/vox_fem/resonance.ogg differ diff --git a/sound/vox_fem/sabotaged.ogg b/sound/vox_fem/sabotaged.ogg new file mode 100644 index 0000000000000..9d883d12218c0 Binary files /dev/null and b/sound/vox_fem/sabotaged.ogg differ diff --git a/sound/vox_fem/sabotaging.ogg b/sound/vox_fem/sabotaging.ogg new file mode 100644 index 0000000000000..a8b5d6680c329 Binary files /dev/null and b/sound/vox_fem/sabotaging.ogg differ diff --git a/sound/vox_fem/same.ogg b/sound/vox_fem/same.ogg new file mode 100644 index 0000000000000..38adb22168bca Binary files /dev/null and b/sound/vox_fem/same.ogg differ diff --git a/sound/vox_fem/saw.ogg b/sound/vox_fem/saw.ogg new file mode 100644 index 0000000000000..fa3c7b1994d11 Binary files /dev/null and b/sound/vox_fem/saw.ogg differ diff --git a/sound/vox_fem/scan.ogg b/sound/vox_fem/scan.ogg new file mode 100644 index 0000000000000..36026e8f8c471 Binary files /dev/null and b/sound/vox_fem/scan.ogg differ diff --git a/sound/vox_fem/scanned.ogg b/sound/vox_fem/scanned.ogg new file mode 100644 index 0000000000000..bc9bb80ac4c9c Binary files /dev/null and b/sound/vox_fem/scanned.ogg differ diff --git a/sound/vox_fem/scanner.ogg b/sound/vox_fem/scanner.ogg new file mode 100644 index 0000000000000..2098a81a34c8f Binary files /dev/null and b/sound/vox_fem/scanner.ogg differ diff --git a/sound/vox_fem/scanners.ogg b/sound/vox_fem/scanners.ogg new file mode 100644 index 0000000000000..74bbdae300aa7 Binary files /dev/null and b/sound/vox_fem/scanners.ogg differ diff --git a/sound/vox_fem/scanning.ogg b/sound/vox_fem/scanning.ogg new file mode 100644 index 0000000000000..84701910e997f Binary files /dev/null and b/sound/vox_fem/scanning.ogg differ diff --git a/sound/vox_fem/screw.ogg b/sound/vox_fem/screw.ogg new file mode 100644 index 0000000000000..ae9325f69a658 Binary files /dev/null and b/sound/vox_fem/screw.ogg differ diff --git a/sound/vox_fem/seen.ogg b/sound/vox_fem/seen.ogg new file mode 100644 index 0000000000000..7ad89a173ab59 Binary files /dev/null and b/sound/vox_fem/seen.ogg differ diff --git a/sound/vox_fem/set.ogg b/sound/vox_fem/set.ogg new file mode 100644 index 0000000000000..f2f8c19c27842 Binary files /dev/null and b/sound/vox_fem/set.ogg differ diff --git a/sound/vox_fem/sever.ogg b/sound/vox_fem/sever.ogg new file mode 100644 index 0000000000000..3bc2e2102f72e Binary files /dev/null and b/sound/vox_fem/sever.ogg differ diff --git a/sound/vox_fem/severed.ogg b/sound/vox_fem/severed.ogg new file mode 100644 index 0000000000000..4f6f7e47bf0a8 Binary files /dev/null and b/sound/vox_fem/severed.ogg differ diff --git a/sound/vox_fem/severing.ogg b/sound/vox_fem/severing.ogg new file mode 100644 index 0000000000000..1ddad6209efb0 Binary files /dev/null and b/sound/vox_fem/severing.ogg differ diff --git a/sound/vox_fem/shame.ogg b/sound/vox_fem/shame.ogg new file mode 100644 index 0000000000000..f90b1306da05f Binary files /dev/null and b/sound/vox_fem/shame.ogg differ diff --git a/sound/vox_fem/shameful.ogg b/sound/vox_fem/shameful.ogg new file mode 100644 index 0000000000000..526b70909f66b Binary files /dev/null and b/sound/vox_fem/shameful.ogg differ diff --git a/sound/vox_fem/shameless.ogg b/sound/vox_fem/shameless.ogg new file mode 100644 index 0000000000000..804a92e29615f Binary files /dev/null and b/sound/vox_fem/shameless.ogg differ diff --git a/sound/vox_fem/shard.ogg b/sound/vox_fem/shard.ogg new file mode 100644 index 0000000000000..2a6b0c195804e Binary files /dev/null and b/sound/vox_fem/shard.ogg differ diff --git a/sound/vox_fem/shift.ogg b/sound/vox_fem/shift.ogg new file mode 100644 index 0000000000000..70e7d3ca6d17d Binary files /dev/null and b/sound/vox_fem/shift.ogg differ diff --git a/sound/vox_fem/shifts.ogg b/sound/vox_fem/shifts.ogg new file mode 100644 index 0000000000000..f2caa538efc61 Binary files /dev/null and b/sound/vox_fem/shifts.ogg differ diff --git a/sound/vox_fem/sides.ogg b/sound/vox_fem/sides.ogg new file mode 100644 index 0000000000000..cef8d153207bf Binary files /dev/null and b/sound/vox_fem/sides.ogg differ diff --git a/sound/vox_fem/single.ogg b/sound/vox_fem/single.ogg new file mode 100644 index 0000000000000..1d5912ecc57ed Binary files /dev/null and b/sound/vox_fem/single.ogg differ diff --git a/sound/vox_fem/siphon.ogg b/sound/vox_fem/siphon.ogg new file mode 100644 index 0000000000000..789653f5cbb67 Binary files /dev/null and b/sound/vox_fem/siphon.ogg differ diff --git a/sound/vox_fem/siphoning.ogg b/sound/vox_fem/siphoning.ogg new file mode 100644 index 0000000000000..163f2ed4734b8 Binary files /dev/null and b/sound/vox_fem/siphoning.ogg differ diff --git a/sound/vox_fem/soft.ogg b/sound/vox_fem/soft.ogg new file mode 100644 index 0000000000000..ea9361ea8c980 Binary files /dev/null and b/sound/vox_fem/soft.ogg differ diff --git a/sound/vox_fem/source.ogg b/sound/vox_fem/source.ogg new file mode 100644 index 0000000000000..824dd3f0a8c1c Binary files /dev/null and b/sound/vox_fem/source.ogg differ diff --git a/sound/vox_fem/special.ogg b/sound/vox_fem/special.ogg new file mode 100644 index 0000000000000..f0f219c13974b Binary files /dev/null and b/sound/vox_fem/special.ogg differ diff --git a/sound/vox_fem/spew.ogg b/sound/vox_fem/spew.ogg new file mode 100644 index 0000000000000..b9d20048d2651 Binary files /dev/null and b/sound/vox_fem/spew.ogg differ diff --git a/sound/vox_fem/start.ogg b/sound/vox_fem/start.ogg new file mode 100644 index 0000000000000..b07dc5faf259b Binary files /dev/null and b/sound/vox_fem/start.ogg differ diff --git a/sound/vox_fem/starts.ogg b/sound/vox_fem/starts.ogg new file mode 100644 index 0000000000000..fca5914927f2d Binary files /dev/null and b/sound/vox_fem/starts.ogg differ diff --git a/sound/vox_fem/stations.ogg b/sound/vox_fem/stations.ogg new file mode 100644 index 0000000000000..c0a495263698c Binary files /dev/null and b/sound/vox_fem/stations.ogg differ diff --git a/sound/vox_fem/stationwide.ogg b/sound/vox_fem/stationwide.ogg new file mode 100644 index 0000000000000..b7b000b3b9f8c Binary files /dev/null and b/sound/vox_fem/stationwide.ogg differ diff --git a/sound/vox_fem/such.ogg b/sound/vox_fem/such.ogg new file mode 100644 index 0000000000000..a85d0642e6ed1 Binary files /dev/null and b/sound/vox_fem/such.ogg differ diff --git a/sound/vox_fem/suited.ogg b/sound/vox_fem/suited.ogg new file mode 100644 index 0000000000000..36b2b45c5275a Binary files /dev/null and b/sound/vox_fem/suited.ogg differ diff --git a/sound/vox_fem/super.ogg b/sound/vox_fem/super.ogg new file mode 100644 index 0000000000000..6d110152fdc23 Binary files /dev/null and b/sound/vox_fem/super.ogg differ diff --git a/sound/vox_fem/tesla.ogg b/sound/vox_fem/tesla.ogg new file mode 100644 index 0000000000000..70cb9e4ca82b9 Binary files /dev/null and b/sound/vox_fem/tesla.ogg differ diff --git a/sound/vox_fem/tick.ogg b/sound/vox_fem/tick.ogg new file mode 100644 index 0000000000000..bb986534a5bbb Binary files /dev/null and b/sound/vox_fem/tick.ogg differ diff --git a/sound/vox_fem/tile.ogg b/sound/vox_fem/tile.ogg new file mode 100644 index 0000000000000..2d794c26a1291 Binary files /dev/null and b/sound/vox_fem/tile.ogg differ diff --git a/sound/vox_fem/touched.ogg b/sound/vox_fem/touched.ogg new file mode 100644 index 0000000000000..e4cb940d71fc6 Binary files /dev/null and b/sound/vox_fem/touched.ogg differ diff --git a/sound/vox_fem/touching.ogg b/sound/vox_fem/touching.ogg new file mode 100644 index 0000000000000..b1ef04d443a6a Binary files /dev/null and b/sound/vox_fem/touching.ogg differ diff --git a/sound/vox_fem/trigger.ogg b/sound/vox_fem/trigger.ogg new file mode 100644 index 0000000000000..22ed22d489039 Binary files /dev/null and b/sound/vox_fem/trigger.ogg differ diff --git a/sound/vox_fem/triggered.ogg b/sound/vox_fem/triggered.ogg new file mode 100644 index 0000000000000..7fe30ad804606 Binary files /dev/null and b/sound/vox_fem/triggered.ogg differ diff --git a/sound/vox_fem/triggering.ogg b/sound/vox_fem/triggering.ogg new file mode 100644 index 0000000000000..8cb4788155618 Binary files /dev/null and b/sound/vox_fem/triggering.ogg differ diff --git a/sound/vox_fem/triple.ogg b/sound/vox_fem/triple.ogg new file mode 100644 index 0000000000000..6b6679258100a Binary files /dev/null and b/sound/vox_fem/triple.ogg differ diff --git a/sound/vox_fem/tritium.ogg b/sound/vox_fem/tritium.ogg new file mode 100644 index 0000000000000..7e62eddb9c504 Binary files /dev/null and b/sound/vox_fem/tritium.ogg differ diff --git a/sound/vox_fem/turned.ogg b/sound/vox_fem/turned.ogg new file mode 100644 index 0000000000000..2d9c59edfac3f Binary files /dev/null and b/sound/vox_fem/turned.ogg differ diff --git a/sound/vox_fem/unique.ogg b/sound/vox_fem/unique.ogg new file mode 100644 index 0000000000000..cb773507fcbb9 Binary files /dev/null and b/sound/vox_fem/unique.ogg differ diff --git a/sound/vox_fem/unwrench.ogg b/sound/vox_fem/unwrench.ogg new file mode 100644 index 0000000000000..bd31681fe3171 Binary files /dev/null and b/sound/vox_fem/unwrench.ogg differ diff --git a/sound/vox_fem/unwrenching.ogg b/sound/vox_fem/unwrenching.ogg new file mode 100644 index 0000000000000..6f4d8b7de7ef9 Binary files /dev/null and b/sound/vox_fem/unwrenching.ogg differ diff --git a/sound/vox_fem/useful.ogg b/sound/vox_fem/useful.ogg new file mode 100644 index 0000000000000..dfd8e6952a594 Binary files /dev/null and b/sound/vox_fem/useful.ogg differ diff --git a/sound/vox_fem/useless.ogg b/sound/vox_fem/useless.ogg new file mode 100644 index 0000000000000..5b9bb7aa2941c Binary files /dev/null and b/sound/vox_fem/useless.ogg differ diff --git a/sound/vox_fem/way.ogg b/sound/vox_fem/way.ogg new file mode 100644 index 0000000000000..fdc121629c9cf Binary files /dev/null and b/sound/vox_fem/way.ogg differ diff --git a/sound/vox_fem/ways.ogg b/sound/vox_fem/ways.ogg new file mode 100644 index 0000000000000..8fa99a1c4b74e Binary files /dev/null and b/sound/vox_fem/ways.ogg differ diff --git a/sound/vox_fem/weld.ogg b/sound/vox_fem/weld.ogg new file mode 100644 index 0000000000000..6273ba147a6d4 Binary files /dev/null and b/sound/vox_fem/weld.ogg differ diff --git a/sound/vox_fem/which.ogg b/sound/vox_fem/which.ogg new file mode 100644 index 0000000000000..ae1486f816afc Binary files /dev/null and b/sound/vox_fem/which.ogg differ diff --git a/sound/vox_fem/work.ogg b/sound/vox_fem/work.ogg new file mode 100644 index 0000000000000..8ddb06ef1d522 Binary files /dev/null and b/sound/vox_fem/work.ogg differ diff --git a/sound/vox_fem/worked.ogg b/sound/vox_fem/worked.ogg new file mode 100644 index 0000000000000..7ea59ff0b2b97 Binary files /dev/null and b/sound/vox_fem/worked.ogg differ diff --git a/sound/vox_fem/working.ogg b/sound/vox_fem/working.ogg new file mode 100644 index 0000000000000..8e49779ee5c5b Binary files /dev/null and b/sound/vox_fem/working.ogg differ diff --git a/sound/vox_fem/works.ogg b/sound/vox_fem/works.ogg new file mode 100644 index 0000000000000..c35984171ab37 Binary files /dev/null and b/sound/vox_fem/works.ogg differ diff --git a/sound/vox_fem/would.ogg b/sound/vox_fem/would.ogg new file mode 100644 index 0000000000000..2df534769afe8 Binary files /dev/null and b/sound/vox_fem/would.ogg differ diff --git a/sound/vox_fem/wouldnt.ogg b/sound/vox_fem/wouldnt.ogg new file mode 100644 index 0000000000000..0c3b01facee79 Binary files /dev/null and b/sound/vox_fem/wouldnt.ogg differ diff --git a/sound/vox_fem/wrench.ogg b/sound/vox_fem/wrench.ogg new file mode 100644 index 0000000000000..98cf94db09a5f Binary files /dev/null and b/sound/vox_fem/wrench.ogg differ diff --git a/sound/vox_fem/wrenching.ogg b/sound/vox_fem/wrenching.ogg new file mode 100644 index 0000000000000..b61b70fd363c6 Binary files /dev/null and b/sound/vox_fem/wrenching.ogg differ diff --git a/sound/vox_fem/zap.ogg b/sound/vox_fem/zap.ogg new file mode 100644 index 0000000000000..233653de9131a Binary files /dev/null and b/sound/vox_fem/zap.ogg differ diff --git a/sound/vox_fem/zauker.ogg b/sound/vox_fem/zauker.ogg new file mode 100644 index 0000000000000..ed586c6c3f0f3 Binary files /dev/null and b/sound/vox_fem/zauker.ogg differ diff --git a/sound/weapons/shove.ogg b/sound/weapons/shove.ogg new file mode 100644 index 0000000000000..eb10eabed26a4 Binary files /dev/null and b/sound/weapons/shove.ogg differ diff --git a/strings/heckacious.json b/strings/heckacious.json new file mode 100644 index 0000000000000..1c648ce123815 --- /dev/null +++ b/strings/heckacious.json @@ -0,0 +1,98 @@ +{ + "heckacious": { + "your": "youre", + "fucking": "banging", + "economy": "econony", + "know": "no", + "ing": "in", + "they are": "there", + "sometimes": "some times", + "do": "does", + "hug": "bro hug bump", + "we're": "where", + "game": "big game", + "has": "hass", + "downtown": "down town", + "jimmy": "geromy", + "jeremy": "geromy", + "anywhere": "anywear", + "smoking": "toking up", + "lying": "lyong", + "AH": "AUGH", + "distraction": "distaction", + "lie": "ruse", + "angle": "angel", + "drink": "pour", + "the": "thef", + "backward": [ "back ward", "awayways" ], + "god damn": "GOD DAMN", + "goddamn": "GOD DAMN", + "trick": "dunk", + "impossible": "unreal", + "court": "coart", + "holding": "holdung", + "reverse": "flip", + "inverse": "flip", + "around": "turn-ways", + "difference": "differance", + "values": "vaules", + "inside": "insine", + "pipe": "punpe", + "suspicious": "plot thicken", + "awesome": "hella", + "reference": "refrance", + "amazing": "fucking incredible", + "woman": "wonan", + "god": "gog", + "bible": "bibble", + "jesus": "jescus", + "christ": [ "chris", "dick" ], + "sigh": "sign", + "bathroom": "banthroom", + "remember": "remender", + "night": "nite", + "nachos": "nachoes", + "nacho": "nancho", + "dorito": "nancho", + "party": "panty", + "dumbass": "dumpass", + "they": "their", + "okay": "ohh kayy", + "stupid": "stutid", + "reagent": "regent", + "idiot": "fuckass", + "awful": "conksuck", + "moron": "PIECE OF SHIT", + "more": "wider", + "serious": "keeping it real", + "extreme": "x-treme", + "guaranteed": "garganted", + "black": "blapck", + "glow": "glowns", + "deadly": "deudly", + "flying": "lifdoff", + "cloud": "cloun", + "seeing": "scoping", + "great": "choice", + "look": "lonk", + "battery": "babbery", + "retard": "dicktard", + "gay": "homo", + "close": "closte", + "wrong": "wrog", + "who": "whoof", + "new": "newd", + "holy": "hopy", + "um": "unm", + "horse": "hornse", + "this": "thits", + "then": "than", + "quick": "soon", + "bro": [ "brah", "bro" ], + "dude": [ "duge", "bro", "brah" ], + "'": [ "'", "" ], + "i'm": [ "im", "i am" ], + "shit": [ "balls warmed oveur", "shit" ], + "he's": [ "hes", "he is", "he'ss" ] + } +} diff --git a/strings/ion_laws.json b/strings/ion_laws.json index 6e43edaba1e37..d40f6e7afa41d 100644 --- a/strings/ion_laws.json +++ b/strings/ion_laws.json @@ -1042,5 +1042,16 @@ "SPYING ON", "STALKING", "WATCHING" - ] + ], + "ionpet": [ + "POLY", + "RENAULT", + "IAN", + "PUN PUN", + "LAMARR", + "RUNTIME", + "CITRUS", + "MCGRIFF", + "ARANEUS" + ] } diff --git a/strings/names/clown.txt b/strings/names/clown.txt index 028494580babe..1a5f8740ae7fe 100644 --- a/strings/names/clown.txt +++ b/strings/names/clown.txt @@ -28,6 +28,7 @@ Delicious Dan Dinkster Dinky Doodle Doctor Greenthumb +Doctor Rockso Doink Early Worm Eggy @@ -118,7 +119,6 @@ Unimaginable Nut Valid Vincent Weather Report Widderwise -Yanye Kest Yesterdays Beef Yobbo Ziggy Yoyo diff --git a/strings/names/hackers.txt b/strings/names/hackers.txt new file mode 100644 index 0000000000000..e2722fb09fd21 --- /dev/null +++ b/strings/names/hackers.txt @@ -0,0 +1,46 @@ +Ne0Phyte +CipherX +Gh0stWire +L33tByt3 +Vortex9 +Syn4pse +DarkMatt3r +QuantumDr1ft +Crash0verr1de +Z3r0C00l +NyxShad0w +Gl1tchR3aper +CryptoWra1th +Raz0rEdge +VoidWalk3r +Neur0mancer +EchoH3xx +DataSt0rm +CyberS1ren +Rogu3Protocol +Nexu5Prim3 +CircuitBr3aker +EnigmaPulse +PhantomBit +FluxC4pac1tor +OmegaC0dec +Ne0nRon1n +Senpa1Sw1pe +MechaM0chii +SakuraSn1per +WaifuWarri0r +KatanaKid99 +xXDarkL0rd69Xx +H4xx0rNinja +CyberNinja1337 +Ub3r1337Sk1llz +PhrEaK420 +IRCWizard69 +EliteWar3zKing +Y2KPwn3r +BBSPh34r +BlackWill0w69 +2038Pr0blem +Sp4ceW1nd +B0bbyT4bles +C0deInjector diff --git a/strings/tcg/set_one.json b/strings/tcg/set_one.json index c1c061cad4684..233f984835ddc 100644 --- a/strings/tcg/set_one.json +++ b/strings/tcg/set_one.json @@ -277,7 +277,7 @@ "cardtype": "Creature", "cardsubtype": "Sloth", "rarity": "common", - "summon_icon_file": "icons/mob/pets.dmi", + "summon_icon_file": "icons/mob/simple/pets.dmi", "summon_icon_state": "cool_sloth" }, { @@ -1006,7 +1006,7 @@ "cardtype": "Creature", "cardsubtype": "Cat", "rarity": "uncommon", - "summon_icon_file": "icons/mob/pets.dmi", + "summon_icon_file": "icons/mob/simple/pets.dmi", "summon_icon_state": "cat" }, { diff --git a/strings/tips.txt b/strings/tips.txt index 2f17afc84afb2..7d5f9f82ccc2e 100644 --- a/strings/tips.txt +++ b/strings/tips.txt @@ -44,6 +44,14 @@ As a Geneticist, T goes to A, and G goes to C. As a Ghost, you can both start and join capture the flag games through the minigames menu, or by clicking on one of the team spawners, which can be found under the "Misc" section of the orbit menu. As a Ghost, you can double click on just about anything to follow it. Or just warp around! As a Ghost, you can see the inside of a container on the ground by clicking on it. +As a Heretic, the Path of Ash focuses on stealth and disorientation, but as you progress, sheds this playstyle in favor of a more aggressive, fiery finale. +As a Heretic, the Path of Moon will literally drive people around you crazy - perhaps crazy enough to become your allies should you succeed. +As a Heretic, the Path of Lock is an Assistant's best friend, and can open many pathways. Including ones beyond the veil... +As a Heretic, the Path of Flesh allows you to raise an army by summoning ghouls and monsters from beyond the veil. Through ascension, you become a one-man army yourself. +As a Heretic, the Path of Void makes people wish they could scream in the vast emptiness of space or have a chance at escaping from you. In the end, the storm takes all. +As a Heretic, the Path of Blade rewards your ability to fight, by making you better and better at it. Though ascension, you can become an ultimate dueling juggernaut. +As a Heretic, the Path of Rust is quite overt, but allows you to shrug of a lot of damage as everything around you slowly decays into nothing but rot and rust. +As a Heretic, the Path of Cosmos allows you to take rightful ownership of the very space the crew treads on. And if they don't respect your status, calling in a friend from beyond should show them. As a Janitor Cyborg, you are the bane of all slaughter demons and even Bubblegum himself. Cleaning up blood stains will severely gimp them. As a Janitor, if someone steals your janicart, you can instead use your space cleaner spray, grenades, water sprayer, exact bloody revenge or order another from Cargo. As a Janitor, mousetraps can be used to create bombs or booby-trap containers. @@ -60,6 +68,9 @@ As a Medical Doctor, you can extract implants by holding an empty implant case i As a Medical Doctor, you can point your penlight at people to create a medical hologram. This lets them know that you're coming to treat them. As a Medical Doctor, you can surgically implant or extract things from people's chests. This can range from putting in a bomb to pulling out an alien larva. As a Medical Doctor, you must target the correct limb and not be in combat mode when trying to perform surgery on someone. Right clicking your patient will intentionally fail the surgery step. +As a Medical Doctor, when messing with viruses, remember that robotic organs can give immunity to disease effects and transmissibility. Make use of the inorganic biology symptom to bypass the protection. +As a Medical Doctor, while there's an pandemic, you only require small amounts of vaccine to heal a sick patient. Work with the Chemist to distribute your cures more efficiently. +As a Medical Doctor, try messing with the virology lab sometime! Viruses can range from healing powers so great that you can heal out of critical status, or diseases so dangerous they can kill the entire crew with airborne spontaneous combustion. Experiment! As a Monkey, you can crawl through air or scrubber vents by alt+left clicking them. You must drop everything you are wearing and holding to do this, however. As a Monkey, you can still wear a few human items, such as backpacks, gas masks and hats, and still have two free hands. As a Morph, you can talk while disguised, but your words have a chance of being slurred, giving you away! @@ -149,6 +160,7 @@ As the AI, you can take pictures with your camera and upload them to newscasters As the AI, you can use CTRL + 1-9 to set a location hotkey for your camera, allowing you to save the location and jump to it at will. Tilde and zero will return you to the last spot you jumped from, and the numpad numbers act as aliases to the regular number keys. As the Bartender, the drinks you start with only give you the basics. If you want more advanced mixtures, look into working with chemistry, hydroponics, or even mining for things to grind up and throw in! As the Bartender, you can use a circular saw on your shotgun to make it easier to store. +As the Bartender, remember to set up the bar sign by walking up to it and clicking it! As the Blob, don't neglect the creation of factories. These create spores that carry your reagent and can chase crew members far further than you. Spores can also be rallied to swarm the crew and cause panic, and can even take over corpses to create much more dangerous blob zombies! As the Blob, keep your core some distance from space, as it is both expensive to expand onto space, easy to be attacked from, and does not count towards your win condition. Emitter platforms built in space are especially dangerous. As the Blob, removing strong blobs, resource nodes, factories, and nodes will give you 4, 15, 25, and 25 resources back, respectively. @@ -175,10 +187,13 @@ As the Clown, eating bananas heals you slightly. Honk! As the Clown, if you lose your banana peel, you can still slip people with your PDA! Honk! As the Clown, if you're a Traitor and get an emag on sale (or convince another traitor), you can emag your Clown Car to unlock a variety of new functions, including the Siege Mode, which will allow you to launch your passengers, preferably directly into the Supermatter! Or into space. As the Clown, spice your gimmicks up! Nobody likes a one-trick pony. +As the Clown, click with one long balloon in hand onto another to create a balloon animal! Each combination of colours has its own unique result. As the Clown, you can use your stamp on a sheet of cardboard as the first step of making a honkbot. Fun for the whole crew! As the Clown, your Grail is the mineral bananium, which can be given to the Roboticist to build you a fun and robust mech beloved by everyone. As the Curator, be sure to keep the shelves stocked and the library clean for crew. As the Curator, you are not completely defenseless. Your whip easily disarms people, your laser pointer can blind humans and cyborgs, and you can hide items in wirecut books. +As the Coroner, you are more comfortable working on cadavers. You can perform autopsies or harvest organs from corpses a lot faster than your Medical Doctor counterparts. Work in tandem with them by helping prepare bodies for revival. +As the Coroner, you can perform autopsies on corpses recovered from strange circumstances with your handheld autopsy scanner to discover how they died. By teaming up with a Detective, you can solve several cases together! As the Detective, people leave fingerprints everywhere and on everything. With the exception of white latex, gloves will hide them. All is not lost, however, as gloves leave fibers specific to their kind such as black or nitrile, pointing to a general department. As the Detective, you can use your forensics scanner from a distance. Use this to scan boxes or other storage containers. As the Detective, your revolver can be loaded with .357 ammunition obtained from a hacked autolathe. Firing it has a decent chance to blow up your revolver. @@ -198,9 +213,6 @@ As the Quartermaster, be sure to check the manifests on crates you receive to ma As the Quartermaster, you can construct an express supply console that instantly delivers crates by drop pod. The impact will cause a small explosion as well. As the Research Director, you can lock down cyborgs instead of blowing them up. Then you can have their laws reset or if that doesn't work, safely dismantled. As the Research Director, you can take AIs out of their cores by loading them into an intelliCard, which lets you see their laws, even ion/syndicate ones. It can then be placed into an AI system integrity restorer computer to revive and/or repair them. -As the Virologist, robotic organs can give immunity to disease effects and transmissibility. Make use of the inorganic biology symptom to bypass the protection. -As the Virologist, you only require small amounts of vaccine to heal a sick patient. Work with the Chemist to distribute your cures more efficiently. -As the Virologist, your viruses can range from healing powers so great that you can heal out of critical status, or diseases so dangerous they can kill the entire crew with airborne spontaneous combustion. Experiment! As the Warden, if a prisoner's crimes are heinous enough you can put them in permabrig or the gulag. Make sure to check on them once in a while! As the Warden, keep a close eye on the armory at all times, as it is a favored strike point of nuclear operatives and cocky traitors. As the Warden, you can implant criminals you suspect might re-offend with devices that will track their location and allow you to remotely inject them with disabling chemicals. @@ -240,7 +252,7 @@ Suit storage units not only remove blood and dirt from clothing, but also radiat The Chaplain can bless any container with water by hitting it with their bible. Holy water has a myriad of uses against both cults and large amounts of it are a great contributor to success against them. The P2P chat function found on tablet computers allows for a stealthy way to communicate with people. The resist button will allow you to resist out of handcuffs, being buckled to a chair or bed, out of locked lockers and more. Whenever you're stuck, try resisting! -The station's self-destruct terminal is invincible. Go find the disk instead of trying to destroy it. +The station's self-destruct terminal is indestructible. Go find the disk instead of trying to destroy it. There are many places around the station to hide contraband. A few for starters: linen boxes, toilet cisterns, body bags. Experiment to find more! To crack the safe in the vault, use a stethoscope or three plastic explosives on it. Using sticky tape on items can make them stick to people and walls! Be careful, grenades might stick to your hand during the moment of truth! @@ -273,3 +285,7 @@ You can use an upgraded microwave to charge your PDA! You'll quickly lose your interest in the game if you play to win and kill. If you find yourself doing this, take a step back and talk to people - it's a much better experience! Some areas of the station use simple nautical directions to indicate their respective locations, like Fore (Front of the ship), Aft (Back), Port (Left side), Starboard (Right), Quarter and Bow (Either sides of Aft and Fore, respectively). You can review these terms on the Notepad App of your PDA. Modular computers are compatible with integrated circuits, but most of the program-dependent circuits require them to be open/backgrounded to work. To install circuits on stationary consoles, you need to toggle interaction with the frame with right-click first. +You don't need to destroy a Spacecoin machine to make your funds stop draining. Swiping your ID on it will stop the withdrawal. +As a Bitrunner, upgrading your quantum server will increase rewards and reduce downtime. +As a Bitrunner, your avatar has a domain info ability which will give you clues to help complete virtual domains. +Bitrunning is a crime. diff --git a/tgstation.dme b/tgstation.dme index 6f9067bcd4f1a..99b52e4cb46a0 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -119,6 +119,7 @@ #include "code\__DEFINES\instruments.dm" #include "code\__DEFINES\interaction_flags.dm" #include "code\__DEFINES\inventory.dm" +#include "code\__DEFINES\ipintel.dm" #include "code\__DEFINES\is_helpers.dm" #include "code\__DEFINES\jobs.dm" #include "code\__DEFINES\keybinding.dm" @@ -182,6 +183,7 @@ #include "code\__DEFINES\procpath.dm" #include "code\__DEFINES\profile.dm" #include "code\__DEFINES\projectiles.dm" +#include "code\__DEFINES\pronouns.dm" #include "code\__DEFINES\qdel.dm" #include "code\__DEFINES\quirks.dm" #include "code\__DEFINES\radiation.dm" @@ -386,6 +388,7 @@ #include "code\__DEFINES\research\anomalies.dm" #include "code\__DEFINES\research\research_categories.dm" #include "code\__DEFINES\research\slimes.dm" +#include "code\__DEFINES\research\techweb_nodes.dm" #include "code\__DEFINES\traits\_traits.dm" #include "code\__DEFINES\traits\declarations.dm" #include "code\__DEFINES\traits\macros.dm" @@ -502,10 +505,8 @@ #include "code\__HELPERS\paths\jps.dm" #include "code\__HELPERS\paths\path.dm" #include "code\__HELPERS\paths\sssp.dm" -#include "code\__HELPERS\sorts\__main.dm" -#include "code\__HELPERS\sorts\InsertSort.dm" -#include "code\__HELPERS\sorts\MergeSort.dm" -#include "code\__HELPERS\sorts\TimSort.dm" +#include "code\__HELPERS\sorts\helpers.dm" +#include "code\__HELPERS\sorts\sort_instance.dm" #include "code\_globalvars\_regexes.dm" #include "code\_globalvars\admin.dm" #include "code\_globalvars\arcade.dm" @@ -556,6 +557,7 @@ #include "code\_onclick\ai.dm" #include "code\_onclick\click.dm" #include "code\_onclick\click_alt.dm" +#include "code\_onclick\click_ctrl.dm" #include "code\_onclick\cyborg.dm" #include "code\_onclick\drag_drop.dm" #include "code\_onclick\item_attack.dm" @@ -649,12 +651,12 @@ #include "code\controllers\subsystem\ipintel.dm" #include "code\controllers\subsystem\job.dm" #include "code\controllers\subsystem\lag_switch.dm" -#include "code\controllers\subsystem\language.dm" #include "code\controllers\subsystem\library.dm" #include "code\controllers\subsystem\lighting.dm" #include "code\controllers\subsystem\lua.dm" #include "code\controllers\subsystem\machines.dm" #include "code\controllers\subsystem\mapping.dm" +#include "code\controllers\subsystem\materials.dm" #include "code\controllers\subsystem\minor_mapping.dm" #include "code\controllers\subsystem\mobs.dm" #include "code\controllers\subsystem\modular_computers.dm" @@ -687,6 +689,7 @@ #include "code\controllers\subsystem\sounds.dm" #include "code\controllers\subsystem\spatial_gridmap.dm" #include "code\controllers\subsystem\speech_controller.dm" +#include "code\controllers\subsystem\sprite_accessories.dm" #include "code\controllers\subsystem\statpanel.dm" #include "code\controllers\subsystem\stickyban.dm" #include "code\controllers\subsystem\stock_market.dm" @@ -766,6 +769,7 @@ #include "code\datums\chat_payload.dm" #include "code\datums\chatmessage.dm" #include "code\datums\cogbar.dm" +#include "code\datums\communications.dm" #include "code\datums\dash_weapon.dm" #include "code\datums\datum.dm" #include "code\datums\datumvars.dm" @@ -780,12 +784,14 @@ #include "code\datums\hotkeys_help.dm" #include "code\datums\http.dm" #include "code\datums\hud.dm" +#include "code\datums\instability_meltdown.dm" #include "code\datums\json_database.dm" #include "code\datums\json_savefile.dm" #include "code\datums\lazy_template.dm" #include "code\datums\map_config.dm" #include "code\datums\minigames_menu.dm" #include "code\datums\mood.dm" +#include "code\datums\move_manager.dm" #include "code\datums\movement_detector.dm" #include "code\datums\mutable_appearance.dm" #include "code\datums\numbered_display.dm" @@ -849,6 +855,7 @@ #include "code\datums\actions\mobs\dash.dm" #include "code\datums\actions\mobs\defensive_mode.dm" #include "code\datums\actions\mobs\fire_breath.dm" +#include "code\datums\actions\mobs\ground_slam.dm" #include "code\datums\actions\mobs\lava_swoop.dm" #include "code\datums\actions\mobs\meteors.dm" #include "code\datums\actions\mobs\mobcooldown.dm" @@ -857,6 +864,7 @@ #include "code\datums\actions\mobs\projectileattack.dm" #include "code\datums\actions\mobs\sign_language.dm" #include "code\datums\actions\mobs\sneak.dm" +#include "code\datums\actions\mobs\teleport.dm" #include "code\datums\actions\mobs\transform_weapon.dm" #include "code\datums\actions\mobs\sequences\dash_attack.dm" #include "code\datums\actions\mobs\sequences\projectile.dm" @@ -896,6 +904,7 @@ #include "code\datums\ai\basic_mobs\basic_subtrees\call_reinforcements.dm" #include "code\datums\ai\basic_mobs\basic_subtrees\capricious_retaliate.dm" #include "code\datums\ai\basic_mobs\basic_subtrees\climb_tree.dm" +#include "code\datums\ai\basic_mobs\basic_subtrees\express_happiness.dm" #include "code\datums\ai\basic_mobs\basic_subtrees\find_food.dm" #include "code\datums\ai\basic_mobs\basic_subtrees\find_paper_and_write.dm" #include "code\datums\ai\basic_mobs\basic_subtrees\find_parent.dm" @@ -905,6 +914,7 @@ #include "code\datums\ai\basic_mobs\basic_subtrees\mine_walls.dm" #include "code\datums\ai\basic_mobs\basic_subtrees\move_to_cardinal.dm" #include "code\datums\ai\basic_mobs\basic_subtrees\opportunistic_ventcrawler.dm" +#include "code\datums\ai\basic_mobs\basic_subtrees\play_with_owners.dm" #include "code\datums\ai\basic_mobs\basic_subtrees\prepare_travel_to_destination.dm" #include "code\datums\ai\basic_mobs\basic_subtrees\ranged_skirmish.dm" #include "code\datums\ai\basic_mobs\basic_subtrees\run_emote.dm" @@ -981,6 +991,7 @@ #include "code\datums\atmosphere\planetary.dm" #include "code\datums\bodypart_overlays\bodypart_overlay.dm" #include "code\datums\bodypart_overlays\emote_bodypart_overlay.dm" +#include "code\datums\bodypart_overlays\markings_bodypart_overlay.dm" #include "code\datums\bodypart_overlays\mutant_bodypart_overlay.dm" #include "code\datums\bodypart_overlays\simple_bodypart_overlay.dm" #include "code\datums\brain_damage\brain_trauma.dm" @@ -1006,6 +1017,7 @@ #include "code\datums\components\ai_has_target_timer.dm" #include "code\datums\components\ai_listen_to_weather.dm" #include "code\datums\components\ai_retaliate_advanced.dm" +#include "code\datums\components\amputating_limbs.dm" #include "code\datums\components\anti_magic.dm" #include "code\datums\components\appearance_on_aggro.dm" #include "code\datums\components\aquarium_content.dm" @@ -1019,6 +1031,7 @@ #include "code\datums\components\basic_inhands.dm" #include "code\datums\components\basic_mob_attack_telegraph.dm" #include "code\datums\components\basic_ranged_ready_overlay.dm" +#include "code\datums\components\bayonet_attachable.dm" #include "code\datums\components\beetlejuice.dm" #include "code\datums\components\blob_minion.dm" #include "code\datums\components\blood_walk.dm" @@ -1051,6 +1064,7 @@ #include "code\datums\components\crank_recharge.dm" #include "code\datums\components\crate_carrier.dm" #include "code\datums\components\creamed.dm" +#include "code\datums\components\cuff_n_stun.dm" #include "code\datums\components\cult_ritual_item.dm" #include "code\datums\components\curse_of_hunger.dm" #include "code\datums\components\curse_of_polymorph.dm" @@ -1092,6 +1106,7 @@ #include "code\datums\components\ground_sinking.dm" #include "code\datums\components\growth_and_differentiation.dm" #include "code\datums\components\gunpoint.dm" +#include "code\datums\components\happiness.dm" #include "code\datums\components\hazard_area.dm" #include "code\datums\components\healing_touch.dm" #include "code\datums\components\health_scaling_effects.dm" @@ -1145,6 +1160,7 @@ #include "code\datums\components\pinnable_accessory.dm" #include "code\datums\components\plundering_attacks.dm" #include "code\datums\components\pricetag.dm" +#include "code\datums\components\profound_fisher.dm" #include "code\datums\components\punchcooldown.dm" #include "code\datums\components\puzzgrid.dm" #include "code\datums\components\radiation_countdown.dm" @@ -1219,6 +1235,7 @@ #include "code\datums\components\temporary_description.dm" #include "code\datums\components\tether.dm" #include "code\datums\components\thermite.dm" +#include "code\datums\components\throwbonus_on_windup.dm" #include "code\datums\components\tippable.dm" #include "code\datums\components\toggle_attached_clothing.dm" #include "code\datums\components\toggle_suit.dm" @@ -1358,7 +1375,6 @@ #include "code\datums\elements\ai_retaliate.dm" #include "code\datums\elements\ai_swap_combat_mode.dm" #include "code\datums\elements\ai_target_damagesource.dm" -#include "code\datums\elements\amputating_limbs.dm" #include "code\datums\elements\animal_variety.dm" #include "code\datums\elements\art.dm" #include "code\datums\elements\atmos_requirements.dm" @@ -1390,6 +1406,7 @@ #include "code\datums\elements\connect_loc.dm" #include "code\datums\elements\consumable_mob.dm" #include "code\datums\elements\content_barfer.dm" +#include "code\datums\elements\corrupted_organ.dm" #include "code\datums\elements\crackable.dm" #include "code\datums\elements\crusher_loot.dm" #include "code\datums\elements\cuffsnapping.dm" @@ -1428,6 +1445,7 @@ #include "code\datums\elements\frozen.dm" #include "code\datums\elements\gags_recolorable.dm" #include "code\datums\elements\give_turf_traits.dm" +#include "code\datums\elements\gravedigger.dm" #include "code\datums\elements\hat_wearer.dm" #include "code\datums\elements\haunted.dm" #include "code\datums\elements\high_fiver.dm" @@ -1442,12 +1460,14 @@ #include "code\datums\elements\kneejerk.dm" #include "code\datums\elements\knockback.dm" #include "code\datums\elements\lazy_fishing_spot.dm" +#include "code\datums\elements\leeching_walk.dm" #include "code\datums\elements\lifesteal.dm" #include "code\datums\elements\light_blocking.dm" #include "code\datums\elements\light_eaten.dm" #include "code\datums\elements\light_eater.dm" #include "code\datums\elements\living_limb_initialiser.dm" #include "code\datums\elements\loomable.dm" +#include "code\datums\elements\lube_walking.dm" #include "code\datums\elements\mirage_border.dm" #include "code\datums\elements\mob_access.dm" #include "code\datums\elements\mob_grabber.dm" @@ -1455,6 +1475,7 @@ #include "code\datums\elements\move_force_on_death.dm" #include "code\datums\elements\movement_turf_changer.dm" #include "code\datums\elements\movetype_handler.dm" +#include "code\datums\elements\muffles_speech.dm" #include "code\datums\elements\nerfed_pulling.dm" #include "code\datums\elements\noisy_movement.dm" #include "code\datums\elements\noticable_organ.dm" @@ -1468,6 +1489,7 @@ #include "code\datums\elements\point_of_interest.dm" #include "code\datums\elements\poster_tearer.dm" #include "code\datums\elements\prevent_attacking_of_types.dm" +#include "code\datums\elements\proficient_miner.dm" #include "code\datums\elements\projectile_drop.dm" #include "code\datums\elements\projectile_shield.dm" #include "code\datums\elements\radiation_protected_clothing.dm" @@ -1482,7 +1504,6 @@ #include "code\datums\elements\simple_flying.dm" #include "code\datums\elements\skill_reward.dm" #include "code\datums\elements\skittish.dm" -#include "code\datums\elements\snail_crawl.dm" #include "code\datums\elements\soft_landing.dm" #include "code\datums\elements\spooky.dm" #include "code\datums\elements\squish.dm" @@ -1511,6 +1532,7 @@ #include "code\datums\elements\wall_walker.dm" #include "code\datums\elements\watery_tile.dm" #include "code\datums\elements\weapon_description.dm" +#include "code\datums\elements\wearable_client_colour.dm" #include "code\datums\elements\weather_listener.dm" #include "code\datums\elements\web_walker.dm" #include "code\datums\elements\wheel.dm" @@ -1626,6 +1648,7 @@ #include "code\datums\mood_events\needs_events.dm" #include "code\datums\mutations\_combined.dm" #include "code\datums\mutations\_mutations.dm" +#include "code\datums\mutations\active.dm" #include "code\datums\mutations\adaptation.dm" #include "code\datums\mutations\antenna.dm" #include "code\datums\mutations\autotomy.dm" @@ -1633,13 +1656,14 @@ #include "code\datums\mutations\chameleon.dm" #include "code\datums\mutations\cold.dm" #include "code\datums\mutations\fire_breath.dm" +#include "code\datums\mutations\hot.dm" #include "code\datums\mutations\hulk.dm" #include "code\datums\mutations\olfaction.dm" #include "code\datums\mutations\passive.dm" #include "code\datums\mutations\radioactive.dm" +#include "code\datums\mutations\reach.dm" #include "code\datums\mutations\sight.dm" #include "code\datums\mutations\speech.dm" -#include "code\datums\mutations\telekinesis.dm" #include "code\datums\mutations\telepathy.dm" #include "code\datums\mutations\tongue_spike.dm" #include "code\datums\mutations\touch.dm" @@ -1713,7 +1737,6 @@ #include "code\datums\quirks\neutral_quirks\photographer.dm" #include "code\datums\quirks\neutral_quirks\pineapple_hater.dm" #include "code\datums\quirks\neutral_quirks\pineapple_liker.dm" -#include "code\datums\quirks\neutral_quirks\pride_pin.dm" #include "code\datums\quirks\neutral_quirks\shifty_eyes.dm" #include "code\datums\quirks\neutral_quirks\snob.dm" #include "code\datums\quirks\neutral_quirks\transhumanist.dm" @@ -1730,7 +1753,6 @@ #include "code\datums\quirks\positive_quirks\light_step.dm" #include "code\datums\quirks\positive_quirks\mime_fan.dm" #include "code\datums\quirks\positive_quirks\musician.dm" -#include "code\datums\quirks\positive_quirks\night_vision.dm" #include "code\datums\quirks\positive_quirks\poster_boy.dm" #include "code\datums\quirks\positive_quirks\self_aware.dm" #include "code\datums\quirks\positive_quirks\settler.dm" @@ -1823,20 +1845,24 @@ #include "code\datums\status_effects\debuffs\hooked.dm" #include "code\datums\status_effects\debuffs\jitteriness.dm" #include "code\datums\status_effects\debuffs\pacifism.dm" +#include "code\datums\status_effects\debuffs\rust_corruption.dm" #include "code\datums\status_effects\debuffs\screen_blur.dm" #include "code\datums\status_effects\debuffs\screwy_hud.dm" #include "code\datums\status_effects\debuffs\silenced.dm" #include "code\datums\status_effects\debuffs\spacer.dm" #include "code\datums\status_effects\debuffs\speech_debuffs.dm" #include "code\datums\status_effects\debuffs\staggered.dm" +#include "code\datums\status_effects\debuffs\stamcrit.dm" #include "code\datums\status_effects\debuffs\static_vision.dm" #include "code\datums\status_effects\debuffs\strandling.dm" #include "code\datums\status_effects\debuffs\terrified.dm" #include "code\datums\status_effects\debuffs\tower_of_babel.dm" +#include "code\datums\status_effects\debuffs\tox_vomit.dm" #include "code\datums\status_effects\debuffs\slime\slime_food.dm" #include "code\datums\status_effects\debuffs\slime\slime_leech.dm" #include "code\datums\status_effects\debuffs\slime\slimed.dm" #include "code\datums\storage\storage.dm" +#include "code\datums\storage\storage_interface.dm" #include "code\datums\storage\subtypes\backpack.dm" #include "code\datums\storage\subtypes\bag_of_holding.dm" #include "code\datums\storage\subtypes\cards.dm" @@ -1849,12 +1875,6 @@ #include "code\datums\storage\subtypes\rped.dm" #include "code\datums\storage\subtypes\surgery_tray.dm" #include "code\datums\storage\subtypes\trash.dm" -#include "code\datums\systems\_system.dm" -#include "code\datums\systems\manager.dm" -#include "code\datums\systems\ds\battle_royale.dm" -#include "code\datums\systems\ds\communications.dm" -#include "code\datums\systems\ds\materials.dm" -#include "code\datums\systems\ds\move_handler.dm" #include "code\datums\votes\_vote_datum.dm" #include "code\datums\votes\custom_vote.dm" #include "code\datums\votes\map_vote.dm" @@ -1979,6 +1999,7 @@ #include "code\game\machinery\fat_sucker.dm" #include "code\game\machinery\firealarm.dm" #include "code\game\machinery\flasher.dm" +#include "code\game\machinery\flatpacker.dm" #include "code\game\machinery\gigabeacon.dm" #include "code\game\machinery\gulag_item_reclaimer.dm" #include "code\game\machinery\gulag_teleporter.dm" @@ -2087,6 +2108,7 @@ #include "code\game\machinery\computer\records\records.dm" #include "code\game\machinery\computer\records\security.dm" #include "code\game\machinery\dna_infuser\dna_infuser.dm" +#include "code\game\machinery\dna_infuser\dna_infusion.dm" #include "code\game\machinery\dna_infuser\infuser_book.dm" #include "code\game\machinery\dna_infuser\infuser_entry.dm" #include "code\game\machinery\dna_infuser\infuser_entries\infuser_tier_one_entries.dm" @@ -2107,7 +2129,6 @@ #include "code\game\machinery\doors\passworddoor.dm" #include "code\game\machinery\doors\poddoor.dm" #include "code\game\machinery\doors\shutters.dm" -#include "code\game\machinery\doors\unpowered.dm" #include "code\game\machinery\doors\windowdoor.dm" #include "code\game\machinery\embedded_controller\access_controller.dm" #include "code\game\machinery\embedded_controller\airlock_controller.dm" @@ -2604,6 +2625,7 @@ #include "code\game\objects\structures\cat_house.dm" #include "code\game\objects\structures\chess.dm" #include "code\game\objects\structures\containers.dm" +#include "code\game\objects\structures\curtains.dm" #include "code\game\objects\structures\deployable_turret.dm" #include "code\game\objects\structures\destructible_structures.dm" #include "code\game\objects\structures\displaycase.dm" @@ -2664,7 +2686,6 @@ #include "code\game\objects\structures\training_machine.dm" #include "code\game\objects\structures\traps.dm" #include "code\game\objects\structures\votingbox.dm" -#include "code\game\objects\structures\watercloset.dm" #include "code\game\objects\structures\windoor_assembly.dm" #include "code\game\objects\structures\window.dm" #include "code\game\objects\structures\beds_chairs\alien_nest.dm" @@ -2730,6 +2751,10 @@ #include "code\game\objects\structures\transit_tubes\transit_tube.dm" #include "code\game\objects\structures\transit_tubes\transit_tube_construction.dm" #include "code\game\objects\structures\transit_tubes\transit_tube_pod.dm" +#include "code\game\objects\structures\water_structures\sink.dm" +#include "code\game\objects\structures\water_structures\toilet.dm" +#include "code\game\objects\structures\water_structures\urinal.dm" +#include "code\game\objects\structures\water_structures\water_source.dm" #include "code\game\turfs\baseturf_skipover.dm" #include "code\game\turfs\baseturfs.dm" #include "code\game\turfs\change_turf.dm" @@ -2751,6 +2776,7 @@ #include "code\game\turfs\open\dirtystation.dm" #include "code\game\turfs\open\floor.dm" #include "code\game\turfs\open\grass.dm" +#include "code\game\turfs\open\hay.dm" #include "code\game\turfs\open\ice.dm" #include "code\game\turfs\open\lava.dm" #include "code\game\turfs\open\misc.dm" @@ -2797,7 +2823,6 @@ #include "code\modules\admin\fun_balloon.dm" #include "code\modules\admin\greyscale_modify_menu.dm" #include "code\modules\admin\holder2.dm" -#include "code\modules\admin\ipintel.dm" #include "code\modules\admin\IsBanned.dm" #include "code\modules\admin\known_alts.dm" #include "code\modules\admin\outfit_editor.dm" @@ -3030,25 +3055,23 @@ #include "code\modules\antagonists\clown_ops\clownop.dm" #include "code\modules\antagonists\clown_ops\outfits.dm" #include "code\modules\antagonists\cult\blood_magic.dm" -#include "code\modules\antagonists\cult\constructs.dm" -#include "code\modules\antagonists\cult\cult.dm" -#include "code\modules\antagonists\cult\cult_bastard_sword.dm" #include "code\modules\antagonists\cult\cult_comms.dm" #include "code\modules\antagonists\cult\cult_items.dm" #include "code\modules\antagonists\cult\cult_objectives.dm" +#include "code\modules\antagonists\cult\cult_other.dm" #include "code\modules\antagonists\cult\cult_structure_altar.dm" #include "code\modules\antagonists\cult\cult_structure_archives.dm" #include "code\modules\antagonists\cult\cult_structure_forge.dm" #include "code\modules\antagonists\cult\cult_structure_pylon.dm" #include "code\modules\antagonists\cult\cult_structures.dm" -#include "code\modules\antagonists\cult\cult_team.dm" #include "code\modules\antagonists\cult\cult_turf_overlay.dm" #include "code\modules\antagonists\cult\rune_spawn_action.dm" #include "code\modules\antagonists\cult\runes.dm" -#include "code\modules\antagonists\disease\disease_abilities.dm" -#include "code\modules\antagonists\disease\disease_datum.dm" -#include "code\modules\antagonists\disease\disease_disease.dm" -#include "code\modules\antagonists\disease\disease_mob.dm" +#include "code\modules\antagonists\cult\sword_fling.dm" +#include "code\modules\antagonists\cult\datums\constructs.dm" +#include "code\modules\antagonists\cult\datums\cult_team.dm" +#include "code\modules\antagonists\cult\datums\cultist.dm" +#include "code\modules\antagonists\cult\datums\shade.dm" #include "code\modules\antagonists\ert\ert.dm" #include "code\modules\antagonists\fugitive\fugitive.dm" #include "code\modules\antagonists\fugitive\fugitive_equipment.dm" @@ -3067,7 +3090,9 @@ #include "code\modules\antagonists\heretic\knife_effect.dm" #include "code\modules\antagonists\heretic\moon_lunatic.dm" #include "code\modules\antagonists\heretic\rust_effect.dm" +#include "code\modules\antagonists\heretic\soultrapped_heretic.dm" #include "code\modules\antagonists\heretic\transmutation_rune.dm" +#include "code\modules\antagonists\heretic\items\corrupted_organs.dm" #include "code\modules\antagonists\heretic\items\eldritch_flask.dm" #include "code\modules\antagonists\heretic\items\eldritch_painting.dm" #include "code\modules\antagonists\heretic\items\forbidden_book.dm" @@ -3098,6 +3123,7 @@ #include "code\modules\antagonists\heretic\knowledge\starting_lore.dm" #include "code\modules\antagonists\heretic\knowledge\void_lore.dm" #include "code\modules\antagonists\heretic\knowledge\sacrifice_knowledge\sacrifice_buff.dm" +#include "code\modules\antagonists\heretic\knowledge\sacrifice_knowledge\sacrifice_curse.dm" #include "code\modules\antagonists\heretic\knowledge\sacrifice_knowledge\sacrifice_knowledge.dm" #include "code\modules\antagonists\heretic\knowledge\sacrifice_knowledge\sacrifice_map.dm" #include "code\modules\antagonists\heretic\knowledge\sacrifice_knowledge\sacrifice_moodlets.dm" @@ -3239,7 +3265,6 @@ #include "code\modules\antagonists\traitor\objectives\kill_pet.dm" #include "code\modules\antagonists\traitor\objectives\locate_weakpoint.dm" #include "code\modules\antagonists\traitor\objectives\sabotage_machinery.dm" -#include "code\modules\antagonists\traitor\objectives\sleeper_protocol.dm" #include "code\modules\antagonists\traitor\objectives\steal.dm" #include "code\modules\antagonists\traitor\objectives\abstract\target_player.dm" #include "code\modules\antagonists\traitor\objectives\final_objective\battle_royale.dm" @@ -3423,6 +3448,7 @@ #include "code\modules\atmospherics\machinery\pipes\heat_exchange\manifold4w.dm" #include "code\modules\atmospherics\machinery\pipes\heat_exchange\simple.dm" #include "code\modules\atmospherics\machinery\portable\canister.dm" +#include "code\modules\atmospherics\machinery\portable\pipe_scrubber.dm" #include "code\modules\atmospherics\machinery\portable\portable_atmospherics.dm" #include "code\modules\atmospherics\machinery\portable\pump.dm" #include "code\modules\atmospherics\machinery\portable\scrubber.dm" @@ -3463,16 +3489,26 @@ #include "code\modules\bitrunning\event.dm" #include "code\modules\bitrunning\job.dm" #include "code\modules\bitrunning\outfits.dm" +#include "code\modules\bitrunning\spawners.dm" #include "code\modules\bitrunning\turfs.dm" #include "code\modules\bitrunning\antagonists\_parent.dm" #include "code\modules\bitrunning\antagonists\cyber_police.dm" #include "code\modules\bitrunning\antagonists\cyber_tac.dm" +#include "code\modules\bitrunning\antagonists\ghost_role.dm" #include "code\modules\bitrunning\antagonists\netguardian.dm" #include "code\modules\bitrunning\components\avatar_connection.dm" #include "code\modules\bitrunning\components\bitrunning_points.dm" #include "code\modules\bitrunning\components\glitch.dm" #include "code\modules\bitrunning\components\netpod_healing.dm" #include "code\modules\bitrunning\components\npc_friendly.dm" +#include "code\modules\bitrunning\components\virtual_entity.dm" +#include "code\modules\bitrunning\netpod\_netpod.dm" +#include "code\modules\bitrunning\netpod\container.dm" +#include "code\modules\bitrunning\netpod\outfitting.dm" +#include "code\modules\bitrunning\netpod\signals.dm" +#include "code\modules\bitrunning\netpod\tools.dm" +#include "code\modules\bitrunning\netpod\ui.dm" +#include "code\modules\bitrunning\netpod\utils.dm" #include "code\modules\bitrunning\objects\byteforge.dm" #include "code\modules\bitrunning\objects\clothing.dm" #include "code\modules\bitrunning\objects\debug.dm" @@ -3482,7 +3518,6 @@ #include "code\modules\bitrunning\objects\landmarks.dm" #include "code\modules\bitrunning\objects\loot_box.dm" #include "code\modules\bitrunning\objects\loot_crate.dm" -#include "code\modules\bitrunning\objects\netpod.dm" #include "code\modules\bitrunning\objects\quantum_console.dm" #include "code\modules\bitrunning\objects\vendor.dm" #include "code\modules\bitrunning\orders\bepis.dm" @@ -3509,14 +3544,15 @@ #include "code\modules\bitrunning\virtual_domain\domains\bubblegum.dm" #include "code\modules\bitrunning\virtual_domain\domains\clown_planet.dm" #include "code\modules\bitrunning\virtual_domain\domains\colossus.dm" +#include "code\modules\bitrunning\virtual_domain\domains\fredingtonfastingbear.dm" #include "code\modules\bitrunning\virtual_domain\domains\gondola_asteroid.dm" #include "code\modules\bitrunning\virtual_domain\domains\hierophant.dm" +#include "code\modules\bitrunning\virtual_domain\domains\island_brawl.dm" #include "code\modules\bitrunning\virtual_domain\domains\pipedream.dm" #include "code\modules\bitrunning\virtual_domain\domains\pirates.dm" #include "code\modules\bitrunning\virtual_domain\domains\psyker_shuffle.dm" #include "code\modules\bitrunning\virtual_domain\domains\psyker_zombies.dm" #include "code\modules\bitrunning\virtual_domain\domains\stairs_and_cliffs.dm" -#include "code\modules\bitrunning\virtual_domain\domains\starfront_saloon.dm" #include "code\modules\bitrunning\virtual_domain\domains\syndicate_assault.dm" #include "code\modules\bitrunning\virtual_domain\domains\test_only.dm" #include "code\modules\bitrunning\virtual_domain\domains\vaporwave.dm" @@ -3564,7 +3600,6 @@ #include "code\modules\cargo\coupon.dm" #include "code\modules\cargo\exports.dm" #include "code\modules\cargo\expressconsole.dm" -#include "code\modules\cargo\gondolapod.dm" #include "code\modules\cargo\goodies.dm" #include "code\modules\cargo\materials_market.dm" #include "code\modules\cargo\order.dm" @@ -3574,6 +3609,7 @@ #include "code\modules\cargo\universal_scanner.dm" #include "code\modules\cargo\bounties\assistant.dm" #include "code\modules\cargo\bounties\atmos.dm" +#include "code\modules\cargo\bounties\bitrunning.dm" #include "code\modules\cargo\bounties\botany.dm" #include "code\modules\cargo\bounties\chef.dm" #include "code\modules\cargo\bounties\engineering.dm" @@ -3587,6 +3623,7 @@ #include "code\modules\cargo\bounties\slime.dm" #include "code\modules\cargo\bounties\special.dm" #include "code\modules\cargo\bounties\virus.dm" +#include "code\modules\cargo\exports\anomaly.dm" #include "code\modules\cargo\exports\antiques.dm" #include "code\modules\cargo\exports\civilain_bounty.dm" #include "code\modules\cargo\exports\food_and_drink.dm" @@ -3628,7 +3665,6 @@ #include "code\modules\cargo\packs\science.dm" #include "code\modules\cargo\packs\security.dm" #include "code\modules\cargo\packs\service.dm" -#include "code\modules\cargo\packs\stock_market_items.dm" #include "code\modules\cargo\packs\vending_restock.dm" #include "code\modules\chatter\chatter.dm" #include "code\modules\client\client_colour.dm" @@ -3649,6 +3685,7 @@ #include "code\modules\client\preferences\ambient_occlusion.dm" #include "code\modules\client\preferences\assets.dm" #include "code\modules\client\preferences\auto_fit_viewport.dm" +#include "code\modules\client\preferences\blindfold_color.dm" #include "code\modules\client\preferences\body_type.dm" #include "code\modules\client\preferences\broadcast_login_logout.dm" #include "code\modules\client\preferences\clothing.dm" @@ -3679,7 +3716,6 @@ #include "code\modules\client\preferences\pixel_size.dm" #include "code\modules\client\preferences\playtime_reward_cloak.dm" #include "code\modules\client\preferences\preferred_map.dm" -#include "code\modules\client\preferences\pride_pin.dm" #include "code\modules\client\preferences\prisoner_crime.dm" #include "code\modules\client\preferences\prosthetic_limb.dm" #include "code\modules\client\preferences\prosthetic_organ.dm" @@ -3714,6 +3750,7 @@ #include "code\modules\client\preferences\migrations\body_type_migration.dm" #include "code\modules\client\preferences\migrations\convert_to_json_savefile.dm" #include "code\modules\client\preferences\migrations\legacy_sound_toggles_migration.dm" +#include "code\modules\client\preferences\migrations\quirk_loadout_migration.dm" #include "code\modules\client\preferences\migrations\tgui_prefs_migration.dm" #include "code\modules\client\preferences\migrations\tts_blip_migration.dm" #include "code\modules\client\preferences\species_features\basic.dm" @@ -3729,6 +3766,7 @@ #include "code\modules\client\verbs\ooc.dm" #include "code\modules\client\verbs\ping.dm" #include "code\modules\client\verbs\suicide.dm" +#include "code\modules\client\verbs\typing.dm" #include "code\modules\client\verbs\who.dm" #include "code\modules\clothing\clothing.dm" #include "code\modules\clothing\belts\polymorph_belt.dm" @@ -3971,7 +4009,6 @@ #include "code\modules\events\ghost_role\operative.dm" #include "code\modules\events\ghost_role\revenant_event.dm" #include "code\modules\events\ghost_role\sentience.dm" -#include "code\modules\events\ghost_role\sentient_disease.dm" #include "code\modules\events\ghost_role\slaughter_event.dm" #include "code\modules\events\ghost_role\space_dragon.dm" #include "code\modules\events\ghost_role\space_ninja.dm" @@ -4030,6 +4067,7 @@ #include "code\modules\experisci\experiment\types\scanning_people.dm" #include "code\modules\experisci\experiment\types\scanning_plants.dm" #include "code\modules\experisci\experiment\types\scanning_points.dm" +#include "code\modules\experisci\experiment\types\scanning_reagent.dm" #include "code\modules\experisci\experiment\types\scanning_vatgrown.dm" #include "code\modules\explorer_drone\adventure.dm" #include "code\modules\explorer_drone\control_console.dm" @@ -4053,6 +4091,7 @@ #include "code\modules\fishing\fishing_rod.dm" #include "code\modules\fishing\aquarium\aquarium.dm" #include "code\modules\fishing\aquarium\aquarium_kit.dm" +#include "code\modules\fishing\aquarium\aquarium_upgrades.dm" #include "code\modules\fishing\aquarium\fish_analyzer.dm" #include "code\modules\fishing\fish\_fish.dm" #include "code\modules\fishing\fish\chasm_detritus.dm" @@ -4278,7 +4317,6 @@ #include "code\modules\jobs\job_types\antagonists\nuclear_operative.dm" #include "code\modules\jobs\job_types\antagonists\paradox_clone.dm" #include "code\modules\jobs\job_types\antagonists\revenant.dm" -#include "code\modules\jobs\job_types\antagonists\sentient_disease.dm" #include "code\modules\jobs\job_types\antagonists\slaughter_demon.dm" #include "code\modules\jobs\job_types\antagonists\space_dragon.dm" #include "code\modules\jobs\job_types\antagonists\space_ninja.dm" @@ -4333,6 +4371,10 @@ #include "code\modules\keybindings\bindings_client.dm" #include "code\modules\keybindings\focus.dm" #include "code\modules\keybindings\setup.dm" +#include "code\modules\language\_language.dm" +#include "code\modules\language\_language_holder.dm" +#include "code\modules\language\_language_manuals.dm" +#include "code\modules\language\_language_menu.dm" #include "code\modules\language\aphasia.dm" #include "code\modules\language\beachbum.dm" #include "code\modules\language\buzzwords.dm" @@ -4341,10 +4383,6 @@ #include "code\modules\language\common.dm" #include "code\modules\language\draconic.dm" #include "code\modules\language\drone.dm" -#include "code\modules\language\language.dm" -#include "code\modules\language\language_holder.dm" -#include "code\modules\language\language_manuals.dm" -#include "code\modules\language\language_menu.dm" #include "code\modules\language\machine.dm" #include "code\modules\language\moffic.dm" #include "code\modules\language\monkey.dm" @@ -4370,13 +4408,14 @@ #include "code\modules\library\random_books.dm" #include "code\modules\library\skill_learning\skill_station.dm" #include "code\modules\library\skill_learning\skillchip.dm" +#include "code\modules\library\skill_learning\generic_skillchips\rod_suplex.dm" #include "code\modules\library\skill_learning\job_skillchips\_job.dm" #include "code\modules\library\skill_learning\job_skillchips\chef.dm" #include "code\modules\library\skill_learning\job_skillchips\clown.dm" +#include "code\modules\library\skill_learning\job_skillchips\detective.dm" #include "code\modules\library\skill_learning\job_skillchips\janitor.dm" #include "code\modules\library\skill_learning\job_skillchips\miner.dm" #include "code\modules\library\skill_learning\job_skillchips\psychologist.dm" -#include "code\modules\library\skill_learning\job_skillchips\research_director.dm" #include "code\modules\library\skill_learning\job_skillchips\roboticist.dm" #include "code\modules\library\skill_learning\job_skillchips\station_engineer.dm" #include "code\modules\lighting\lighting_area.dm" @@ -4387,6 +4426,17 @@ #include "code\modules\lighting\lighting_source.dm" #include "code\modules\lighting\lighting_turf.dm" #include "code\modules\lighting\static_lighting_area.dm" +#include "code\modules\loadout\loadout_categories.dm" +#include "code\modules\loadout\loadout_helpers.dm" +#include "code\modules\loadout\loadout_items.dm" +#include "code\modules\loadout\loadout_menu.dm" +#include "code\modules\loadout\loadout_preference.dm" +#include "code\modules\loadout\categories\accessories.dm" +#include "code\modules\loadout\categories\glasses.dm" +#include "code\modules\loadout\categories\heads.dm" +#include "code\modules\loadout\categories\inhands.dm" +#include "code\modules\loadout\categories\neck.dm" +#include "code\modules\loadout\categories\pocket.dm" #include "code\modules\logging\log_category.dm" #include "code\modules\logging\log_entry.dm" #include "code\modules\logging\log_holder.dm" @@ -4439,6 +4489,7 @@ #include "code\modules\mapfluff\centcom\nuke_ops.dm" #include "code\modules\mapfluff\ruins\generic.dm" #include "code\modules\mapfluff\ruins\lavaland_ruin_code.dm" +#include "code\modules\mapfluff\ruins\icemoonruin_code\commsagent.dm" #include "code\modules\mapfluff\ruins\icemoonruin_code\hotsprings.dm" #include "code\modules\mapfluff\ruins\icemoonruin_code\library.dm" #include "code\modules\mapfluff\ruins\icemoonruin_code\mailroom.dm" @@ -4602,6 +4653,7 @@ #include "code\modules\mob\living\login.dm" #include "code\modules\mob\living\logout.dm" #include "code\modules\mob\living\navigation.dm" +#include "code\modules\mob\living\sneeze.dm" #include "code\modules\mob\living\status_procs.dm" #include "code\modules\mob\living\taste.dm" #include "code\modules\mob\living\ventcrawling.dm" @@ -4627,10 +4679,18 @@ #include "code\modules\mob\living\basic\bots\cleanbot\cleanbot.dm" #include "code\modules\mob\living\basic\bots\cleanbot\cleanbot_abilities.dm" #include "code\modules\mob\living\basic\bots\cleanbot\cleanbot_ai.dm" +#include "code\modules\mob\living\basic\bots\firebot\firebot.dm" +#include "code\modules\mob\living\basic\bots\firebot\firebot_ai.dm" +#include "code\modules\mob\living\basic\bots\honkbots\honkbot.dm" +#include "code\modules\mob\living\basic\bots\honkbots\honkbot_abilities.dm" +#include "code\modules\mob\living\basic\bots\honkbots\honkbot_ai.dm" #include "code\modules\mob\living\basic\bots\hygienebot\hygienebot.dm" #include "code\modules\mob\living\basic\bots\hygienebot\hygienebot_ai.dm" #include "code\modules\mob\living\basic\bots\medbot\medbot.dm" #include "code\modules\mob\living\basic\bots\medbot\medbot_ai.dm" +#include "code\modules\mob\living\basic\bots\vibebot\vibebot.dm" +#include "code\modules\mob\living\basic\bots\vibebot\vibebot_abilities.dm" +#include "code\modules\mob\living\basic\bots\vibebot\vibebot_ai.dm" #include "code\modules\mob\living\basic\clown\clown.dm" #include "code\modules\mob\living\basic\clown\clown_ai.dm" #include "code\modules\mob\living\basic\cult\shade.dm" @@ -4746,6 +4806,7 @@ #include "code\modules\mob\living\basic\lavaland\legion\legion.dm" #include "code\modules\mob\living\basic\lavaland\legion\legion_ai.dm" #include "code\modules\mob\living\basic\lavaland\legion\legion_brood.dm" +#include "code\modules\mob\living\basic\lavaland\legion\legion_monkey.dm" #include "code\modules\mob\living\basic\lavaland\legion\legion_tumour.dm" #include "code\modules\mob\living\basic\lavaland\legion\spawn_legions.dm" #include "code\modules\mob\living\basic\lavaland\lobstrosity\lobstrosity.dm" @@ -4756,6 +4817,15 @@ #include "code\modules\mob\living\basic\lavaland\mook\mook_ai.dm" #include "code\modules\mob\living\basic\lavaland\mook\mook_village.dm" #include "code\modules\mob\living\basic\lavaland\node_drone\node_drone.dm" +#include "code\modules\mob\living\basic\lavaland\raptor\_raptor.dm" +#include "code\modules\mob\living\basic\lavaland\raptor\baby_raptor.dm" +#include "code\modules\mob\living\basic\lavaland\raptor\raptor_ai_behavior.dm" +#include "code\modules\mob\living\basic\lavaland\raptor\raptor_ai_controller.dm" +#include "code\modules\mob\living\basic\lavaland\raptor\raptor_ai_subtrees.dm" +#include "code\modules\mob\living\basic\lavaland\raptor\raptor_dex.dm" +#include "code\modules\mob\living\basic\lavaland\raptor\raptor_egg.dm" +#include "code\modules\mob\living\basic\lavaland\raptor\raptor_food_trough.dm" +#include "code\modules\mob\living\basic\lavaland\raptor\raptor_inheritance.dm" #include "code\modules\mob\living\basic\lavaland\watcher\watcher.dm" #include "code\modules\mob\living\basic\lavaland\watcher\watcher_ai.dm" #include "code\modules\mob\living\basic\lavaland\watcher\watcher_gaze.dm" @@ -4781,6 +4851,8 @@ #include "code\modules\mob\living\basic\pets\dog\corgi.dm" #include "code\modules\mob\living\basic\pets\dog\dog_subtypes.dm" #include "code\modules\mob\living\basic\pets\dog\strippable_items.dm" +#include "code\modules\mob\living\basic\pets\gondolas\gondola.dm" +#include "code\modules\mob\living\basic\pets\gondolas\gondolapod.dm" #include "code\modules\mob\living\basic\pets\orbie\orbie.dm" #include "code\modules\mob\living\basic\pets\orbie\orbie_abilities.dm" #include "code\modules\mob\living\basic\pets\orbie\orbie_ai.dm" @@ -4911,9 +4983,10 @@ #include "code\modules\mob\living\basic\vermin\crab.dm" #include "code\modules\mob\living\basic\vermin\frog.dm" #include "code\modules\mob\living\basic\vermin\lizard.dm" -#include "code\modules\mob\living\basic\vermin\mothroach.dm" #include "code\modules\mob\living\basic\vermin\mouse.dm" #include "code\modules\mob\living\basic\vermin\space_bat.dm" +#include "code\modules\mob\living\basic\vermin\mothroach\mothroach.dm" +#include "code\modules\mob\living\basic\vermin\mothroach\mothroach_ai.dm" #include "code\modules\mob\living\brain\brain.dm" #include "code\modules\mob\living\brain\brain_cybernetic.dm" #include "code\modules\mob\living\brain\brain_item.dm" @@ -5063,15 +5136,10 @@ #include "code\modules\mob\living\simple_animal\bot\bot_announcement.dm" #include "code\modules\mob\living\simple_animal\bot\construction.dm" #include "code\modules\mob\living\simple_animal\bot\ed209bot.dm" -#include "code\modules\mob\living\simple_animal\bot\firebot.dm" #include "code\modules\mob\living\simple_animal\bot\floorbot.dm" -#include "code\modules\mob\living\simple_animal\bot\honkbot.dm" #include "code\modules\mob\living\simple_animal\bot\mulebot.dm" #include "code\modules\mob\living\simple_animal\bot\secbot.dm" #include "code\modules\mob\living\simple_animal\bot\SuperBeepsky.dm" -#include "code\modules\mob\living\simple_animal\bot\vibebot.dm" -#include "code\modules\mob\living\simple_animal\friendly\gondola.dm" -#include "code\modules\mob\living\simple_animal\friendly\pet.dm" #include "code\modules\mob\living\simple_animal\hostile\dark_wizard.dm" #include "code\modules\mob\living\simple_animal\hostile\hostile.dm" #include "code\modules\mob\living\simple_animal\hostile\illusion.dm" @@ -5124,6 +5192,7 @@ #include "code\modules\mod\mod_core.dm" #include "code\modules\mod\mod_link.dm" #include "code\modules\mod\mod_paint.dm" +#include "code\modules\mod\mod_part.dm" #include "code\modules\mod\mod_theme.dm" #include "code\modules\mod\mod_types.dm" #include "code\modules\mod\mod_ui.dm" @@ -5208,6 +5277,7 @@ #include "code\modules\modular_computers\file_system\programs\chatroom\ntnrc_client.dm" #include "code\modules\modular_computers\file_system\programs\maintenance\_maintenance_program.dm" #include "code\modules\modular_computers\file_system\programs\maintenance\camera.dm" +#include "code\modules\modular_computers\file_system\programs\maintenance\cool_sword.dm" #include "code\modules\modular_computers\file_system\programs\maintenance\modsuit.dm" #include "code\modules\modular_computers\file_system\programs\maintenance\phys_scanner.dm" #include "code\modules\modular_computers\file_system\programs\maintenance\spectre_meter.dm" @@ -5282,11 +5352,13 @@ #include "code\modules\plumbing\plumbers\plumbing_buffer.dm" #include "code\modules\plumbing\plumbers\pumps.dm" #include "code\modules\plumbing\plumbers\reaction_chamber.dm" +#include "code\modules\plumbing\plumbers\simple_machines.dm" #include "code\modules\plumbing\plumbers\splitters.dm" #include "code\modules\plumbing\plumbers\synthesizer.dm" #include "code\modules\plumbing\plumbers\teleporter.dm" #include "code\modules\plumbing\plumbers\vatgrower.dm" #include "code\modules\point\point.dm" +#include "code\modules\power\battery.dm" #include "code\modules\power\cable.dm" #include "code\modules\power\cell.dm" #include "code\modules\power\energy_accumulator.dm" @@ -5297,6 +5369,7 @@ #include "code\modules\power\pipecleaners.dm" #include "code\modules\power\port_gen.dm" #include "code\modules\power\power.dm" +#include "code\modules\power\power_store.dm" #include "code\modules\power\powernet.dm" #include "code\modules\power\rtg.dm" #include "code\modules\power\smes.dm" @@ -5317,12 +5390,12 @@ #include "code\modules\power\lighting\light_items.dm" #include "code\modules\power\lighting\light_mapping_helpers.dm" #include "code\modules\power\lighting\light_wallframes.dm" -#include "code\modules\power\singularity\boh_tear.dm" #include "code\modules\power\singularity\containment_field.dm" #include "code\modules\power\singularity\dark_matter_singularity.dm" #include "code\modules\power\singularity\emitter.dm" #include "code\modules\power\singularity\field_generator.dm" #include "code\modules\power\singularity\narsie.dm" +#include "code\modules\power\singularity\reality_tear.dm" #include "code\modules\power\singularity\singularity.dm" #include "code\modules\power\supermatter\supermatter.dm" #include "code\modules\power\supermatter\supermatter_extra_effects.dm" @@ -5359,6 +5432,7 @@ #include "code\modules\projectiles\ammunition\_firing.dm" #include "code\modules\projectiles\ammunition\ballistic\foam.dm" #include "code\modules\projectiles\ammunition\ballistic\harpoon.dm" +#include "code\modules\projectiles\ammunition\ballistic\junk.dm" #include "code\modules\projectiles\ammunition\ballistic\lmg.dm" #include "code\modules\projectiles\ammunition\ballistic\pistol.dm" #include "code\modules\projectiles\ammunition\ballistic\revolver.dm" @@ -5442,6 +5516,7 @@ #include "code\modules\projectiles\projectile\bullets\dnainjector.dm" #include "code\modules\projectiles\projectile\bullets\foam_dart.dm" #include "code\modules\projectiles\projectile\bullets\grenade.dm" +#include "code\modules\projectiles\projectile\bullets\junk.dm" #include "code\modules\projectiles\projectile\bullets\lmg.dm" #include "code\modules\projectiles\projectile\bullets\pistol.dm" #include "code\modules\projectiles\projectile\bullets\revolver.dm" @@ -5632,8 +5707,24 @@ #include "code\modules\research\techweb\__techweb_helpers.dm" #include "code\modules\research\techweb\_techweb.dm" #include "code\modules\research\techweb\_techweb_node.dm" -#include "code\modules\research\techweb\all_nodes.dm" #include "code\modules\research\techweb\techweb_types.dm" +#include "code\modules\research\techweb\nodes\alien_nodes.dm" +#include "code\modules\research\techweb\nodes\atmos_nodes.dm" +#include "code\modules\research\techweb\nodes\bepis_nodes.dm" +#include "code\modules\research\techweb\nodes\biology_nodes.dm" +#include "code\modules\research\techweb\nodes\circuit_nodes.dm" +#include "code\modules\research\techweb\nodes\cyborg_nodes.dm" +#include "code\modules\research\techweb\nodes\engi_nodes.dm" +#include "code\modules\research\techweb\nodes\mech_nodes.dm" +#include "code\modules\research\techweb\nodes\medbay_nodes.dm" +#include "code\modules\research\techweb\nodes\mining_nodes.dm" +#include "code\modules\research\techweb\nodes\modsuit_nodes.dm" +#include "code\modules\research\techweb\nodes\research_nodes.dm" +#include "code\modules\research\techweb\nodes\robo_nodes.dm" +#include "code\modules\research\techweb\nodes\security_nodes.dm" +#include "code\modules\research\techweb\nodes\service_nodes.dm" +#include "code\modules\research\techweb\nodes\surgery_nodes.dm" +#include "code\modules\research\techweb\nodes\syndicate_nodes.dm" #include "code\modules\research\xenobiology\xenobio_camera.dm" #include "code\modules\research\xenobiology\xenobiology.dm" #include "code\modules\research\xenobiology\crossbreeding\__corecross.dm" @@ -5810,6 +5901,7 @@ #include "code\modules\surgery\prosthetic_replacement.dm" #include "code\modules\surgery\repair_puncture.dm" #include "code\modules\surgery\revival.dm" +#include "code\modules\surgery\sleeper_protocol.dm" #include "code\modules\surgery\stomachpump.dm" #include "code\modules\surgery\surgery.dm" #include "code\modules\surgery\surgery_helpers.dm" @@ -5832,6 +5924,7 @@ #include "code\modules\surgery\advanced\bioware\vein_threading.dm" #include "code\modules\surgery\bodyparts\_bodyparts.dm" #include "code\modules\surgery\bodyparts\dismemberment.dm" +#include "code\modules\surgery\bodyparts\ghetto_parts.dm" #include "code\modules\surgery\bodyparts\head.dm" #include "code\modules\surgery\bodyparts\head_hair_and_lips.dm" #include "code\modules\surgery\bodyparts\helpers.dm" @@ -5866,6 +5959,7 @@ #include "code\modules\surgery\organs\internal\ears\_ears.dm" #include "code\modules\surgery\organs\internal\eyes\_eyes.dm" #include "code\modules\surgery\organs\internal\heart\_heart.dm" +#include "code\modules\surgery\organs\internal\heart\heart_anomalock.dm" #include "code\modules\surgery\organs\internal\heart\heart_ethereal.dm" #include "code\modules\surgery\organs\internal\liver\_liver.dm" #include "code\modules\surgery\organs\internal\liver\liver_golem.dm" @@ -5943,6 +6037,7 @@ #include "code\modules\transport\tram\tram_structures.dm" #include "code\modules\tutorials\_tutorial.dm" #include "code\modules\tutorials\tutorial_instruction.dm" +#include "code\modules\tutorials\tutorial_skip.dm" #include "code\modules\tutorials\tutorials\drop.dm" #include "code\modules\tutorials\tutorials\switch_hands.dm" #include "code\modules\unit_tests\_unit_tests.dm" @@ -6081,10 +6176,12 @@ #include "code\modules\wiremod\components\atom\direction.dm" #include "code\modules\wiremod\components\atom\gps.dm" #include "code\modules\wiremod\components\atom\health.dm" +#include "code\modules\wiremod\components\atom\health_state.dm" #include "code\modules\wiremod\components\atom\hear.dm" #include "code\modules\wiremod\components\atom\matscanner.dm" #include "code\modules\wiremod\components\atom\pinpointer.dm" #include "code\modules\wiremod\components\atom\reagentscanner.dm" +#include "code\modules\wiremod\components\atom\remotecam.dm" #include "code\modules\wiremod\components\atom\self.dm" #include "code\modules\wiremod\components\atom\species.dm" #include "code\modules\wiremod\components\bci\install_detector.dm" @@ -6124,9 +6221,11 @@ #include "code\modules\wiremod\components\math\logic.dm" #include "code\modules\wiremod\components\math\not.dm" #include "code\modules\wiremod\components\math\random.dm" +#include "code\modules\wiremod\components\math\toggle.dm" #include "code\modules\wiremod\components\math\trigonometry.dm" #include "code\modules\wiremod\components\ntnet\ntnet_receive.dm" #include "code\modules\wiremod\components\ntnet\ntnet_send.dm" +#include "code\modules\wiremod\components\ntnet\ntnet_send_literal.dm" #include "code\modules\wiremod\components\sensors\pressuresensor.dm" #include "code\modules\wiremod\components\sensors\tempsensor.dm" #include "code\modules\wiremod\components\sensors\view_sensor.dm" diff --git a/tgui/.eslintignore b/tgui/.eslintignore index d3c0ac79cd882..4f735f3c518c5 100644 --- a/tgui/.eslintignore +++ b/tgui/.eslintignore @@ -14,3 +14,4 @@ **.woff2 **.eot **.ttf +/public diff --git a/tgui/packages/common/color.js b/tgui/packages/common/color.js deleted file mode 100644 index 59935931d82bf..0000000000000 --- a/tgui/packages/common/color.js +++ /dev/null @@ -1,84 +0,0 @@ -/** - * @file - * @copyright 2020 Aleksej Komarov - * @license MIT - */ - -const EPSILON = 0.0001; - -export class Color { - constructor(r = 0, g = 0, b = 0, a = 1) { - this.r = r; - this.g = g; - this.b = b; - this.a = a; - } - - toString() { - // Alpha component needs to permit fractional values, so cannot use | - let alpha = parseFloat(this.a); - if (isNaN(alpha)) { - alpha = 1; - } - return `rgba(${this.r | 0}, ${this.g | 0}, ${this.b | 0}, ${alpha})`; - } - - // Darkens a color by a given percent. Returns a color, which can have toString called to get it's rgba() css value. - darken(percent) { - percent /= 100; - return new Color( - this.r - this.r * percent, - this.g - this.g * percent, - this.b - this.b * percent, - this.a, - ); - } - - // Brightens a color by a given percent. Returns a color, which can have toString called to get it's rgba() css value. - lighten(percent) { - // No point in rewriting code we already have. - return this.darken(-percent); - } -} - -/** - * Creates a color from the CSS hex color notation. - */ -Color.fromHex = (hex) => - new Color( - parseInt(hex.substr(1, 2), 16), - parseInt(hex.substr(3, 2), 16), - parseInt(hex.substr(5, 2), 16), - ); - -/** - * Linear interpolation of two colors. - */ -Color.lerp = (c1, c2, n) => - new Color( - (c2.r - c1.r) * n + c1.r, - (c2.g - c1.g) * n + c1.g, - (c2.b - c1.b) * n + c1.b, - (c2.a - c1.a) * n + c1.a, - ); - -/** - * Loops up the color in the provided list of colors - * with linear interpolation. - */ -Color.lookup = (value, colors = []) => { - const len = colors.length; - if (len < 2) { - throw new Error('Needs at least two colors!'); - } - const scaled = value * (len - 1); - if (value < EPSILON) { - return colors[0]; - } - if (value >= 1 - EPSILON) { - return colors[len - 1]; - } - const ratio = scaled % 1; - const index = scaled | 0; - return Color.lerp(colors[index], colors[index + 1], ratio); -}; diff --git a/tgui/packages/common/color.test.ts b/tgui/packages/common/color.test.ts new file mode 100644 index 0000000000000..93d90f05a23a7 --- /dev/null +++ b/tgui/packages/common/color.test.ts @@ -0,0 +1,49 @@ +import { Color } from './color'; + +describe('Color', () => { + it('should create a color with default values', () => { + const color = new Color(); + expect(color.r).toBe(0); + expect(color.g).toBe(0); + expect(color.b).toBe(0); + expect(color.a).toBe(1); + }); + + it('should create a color from hex', () => { + const color = Color.fromHex('#ff0000'); + expect(color.r).toBe(255); + expect(color.g).toBe(0); + expect(color.b).toBe(0); + }); + + it('should darken a color', () => { + const color = new Color(100, 100, 100).darken(50); + expect(color.r).toBe(50); + expect(color.g).toBe(50); + expect(color.b).toBe(50); + }); + + it('should lighten a color', () => { + const color = new Color(100, 100, 100).lighten(50); + expect(color.r).toBe(150); + expect(color.g).toBe(150); + expect(color.b).toBe(150); + }); + + it('should interpolate between two colors', () => { + const color1 = new Color(0, 0, 0); + const color2 = new Color(100, 100, 100); + const color = Color.lerp(color1, color2, 0.5); + expect(color.r).toBe(50); + expect(color.g).toBe(50); + expect(color.b).toBe(50); + }); + + it('should lookup a color in an array', () => { + const colors = [new Color(0, 0, 0), new Color(100, 100, 100)]; + const color = Color.lookup(0.5, colors); + expect(color.r).toBe(50); + expect(color.g).toBe(50); + expect(color.b).toBe(50); + }); +}); diff --git a/tgui/packages/common/color.ts b/tgui/packages/common/color.ts new file mode 100644 index 0000000000000..943b52a71fae9 --- /dev/null +++ b/tgui/packages/common/color.ts @@ -0,0 +1,94 @@ +/** + * @file + * @copyright 2020 Aleksej Komarov + * @license MIT + */ + +const EPSILON = 0.0001; + +export class Color { + r: number; + g: number; + b: number; + a: number; + + constructor(r = 0, g = 0, b = 0, a = 1) { + this.r = r; + this.g = g; + this.b = b; + this.a = a; + } + + toString(): string { + // Alpha component needs to permit fractional values, so cannot use | + let alpha = this.a; + if (typeof alpha === 'string') { + alpha = parseFloat(this.a as any); + } + if (isNaN(alpha)) { + alpha = 1; + } + return `rgba(${this.r | 0}, ${this.g | 0}, ${this.b | 0}, ${alpha})`; + } + + /** Darkens a color by a given percent. Returns a color, which can have toString called to get it's rgba() css value. */ + darken(percent: number): Color { + percent /= 100; + return new Color( + this.r - this.r * percent, + this.g - this.g * percent, + this.b - this.b * percent, + this.a, + ); + } + + /** Brightens a color by a given percent. Returns a color, which can have toString called to get it's rgba() css value. */ + lighten(percent: number): Color { + // No point in rewriting code we already have. + return this.darken(-percent); + } + + /** + * Creates a color from the CSS hex color notation. + */ + static fromHex(hex: string): Color { + return new Color( + parseInt(hex.slice(1, 3), 16), + parseInt(hex.slice(3, 5), 16), + parseInt(hex.slice(5, 7), 16), + ); + } + + /** + * Linear interpolation of two colors. + */ + static lerp(c1: Color, c2: Color, n: number): Color { + return new Color( + (c2.r - c1.r) * n + c1.r, + (c2.g - c1.g) * n + c1.g, + (c2.b - c1.b) * n + c1.b, + (c2.a - c1.a) * n + c1.a, + ); + } + + /** + * Loops up the color in the provided list of colors + * with linear interpolation. + */ + static lookup(value: number, colors: Color[]): Color { + const len = colors.length; + if (len < 2) { + throw new Error('Needs at least two colors!'); + } + const scaled = value * (len - 1); + if (value < EPSILON) { + return colors[0]; + } + if (value >= 1 - EPSILON) { + return colors[len - 1]; + } + const ratio = scaled % 1; + const index = scaled | 0; + return this.lerp(colors[index], colors[index + 1], ratio); + } +} diff --git a/tgui/packages/common/events.test.ts b/tgui/packages/common/events.test.ts new file mode 100644 index 0000000000000..b83ba467fd5fd --- /dev/null +++ b/tgui/packages/common/events.test.ts @@ -0,0 +1,34 @@ +import { EventEmitter } from './events'; + +describe('EventEmitter', () => { + it('should add and trigger an event listener', () => { + const emitter = new EventEmitter(); + const mockListener = jest.fn(); + emitter.on('test', mockListener); + emitter.emit('test', 'payload'); + expect(mockListener).toHaveBeenCalledWith('payload'); + }); + + it('should remove an event listener', () => { + const emitter = new EventEmitter(); + const mockListener = jest.fn(); + emitter.on('test', mockListener); + emitter.off('test', mockListener); + emitter.emit('test', 'payload'); + expect(mockListener).not.toHaveBeenCalled(); + }); + + it('should not fail when emitting an event with no listeners', () => { + const emitter = new EventEmitter(); + expect(() => emitter.emit('test', 'payload')).not.toThrow(); + }); + + it('should clear all event listeners', () => { + const emitter = new EventEmitter(); + const mockListener = jest.fn(); + emitter.on('test', mockListener); + emitter.clear(); + emitter.emit('test', 'payload'); + expect(mockListener).not.toHaveBeenCalled(); + }); +}); diff --git a/tgui/packages/common/events.js b/tgui/packages/common/events.ts similarity index 76% rename from tgui/packages/common/events.js rename to tgui/packages/common/events.ts index 7eeff511aa566..49223b29fb394 100644 --- a/tgui/packages/common/events.js +++ b/tgui/packages/common/events.ts @@ -4,17 +4,21 @@ * @license MIT */ +type Fn = (...args: any[]) => void; + export class EventEmitter { + private listeners: Record; + constructor() { this.listeners = {}; } - on(name, listener) { + on(name: string, listener: Fn): void { this.listeners[name] = this.listeners[name] || []; this.listeners[name].push(listener); } - off(name, listener) { + off(name: string, listener: Fn): void { const listeners = this.listeners[name]; if (!listeners) { throw new Error(`There is no listeners for "${name}"`); @@ -24,7 +28,7 @@ export class EventEmitter { }); } - emit(name, ...params) { + emit(name: string, ...params: any[]): void { const listeners = this.listeners[name]; if (!listeners) { return; @@ -35,7 +39,7 @@ export class EventEmitter { } } - clear() { + clear(): void { this.listeners = {}; } } diff --git a/tgui/packages/common/fp.js b/tgui/packages/common/fp.js deleted file mode 100644 index 675e98d807ebe..0000000000000 --- a/tgui/packages/common/fp.js +++ /dev/null @@ -1,25 +0,0 @@ -/** - * @file - * @copyright 2020 Aleksej Komarov - * @license MIT - */ - -/** - * Creates a function that returns the result of invoking the given - * functions, where each successive invocation is supplied the return - * value of the previous. - */ -// prettier-ignore -export const flow = (...funcs) => (input, ...rest) => { - let output = input; - for (let func of funcs) { - // Recurse into the array of functions - if (Array.isArray(func)) { - output = flow(...func)(output, ...rest); - } - else if (func) { - output = func(output, ...rest); - } - } - return output; -}; diff --git a/tgui/packages/common/fp.test.ts b/tgui/packages/common/fp.test.ts new file mode 100644 index 0000000000000..308a98d0f1227 --- /dev/null +++ b/tgui/packages/common/fp.test.ts @@ -0,0 +1,23 @@ +import { flow } from './fp'; + +describe('flow', () => { + it('composes multiple functions into one', () => { + const add2 = (x) => x + 2; + const multiplyBy3 = (x) => x * 3; + const subtract5 = (x) => x - 5; + + const composedFunction = flow(add2, multiplyBy3, subtract5); + + expect(composedFunction(4)).toBe(13); // ((4 + 2) * 3) - 5 = 13 + }); + + it('handles arrays of functions', () => { + const add2 = (x) => x + 2; + const multiplyBy3 = (x) => x * 3; + const subtract5 = (x) => x - 5; + + const composedFunction = flow([add2, multiplyBy3], subtract5); + + expect(composedFunction(4)).toBe(13); // ((4 + 2) * 3) - 5 = 13 + }); +}); diff --git a/tgui/packages/common/fp.ts b/tgui/packages/common/fp.ts new file mode 100644 index 0000000000000..62883a693a24a --- /dev/null +++ b/tgui/packages/common/fp.ts @@ -0,0 +1,38 @@ +/** + * @file + * @copyright 2020 Aleksej Komarov + * @license MIT + */ + +type Func = (...args: any[]) => any; + +/** + * Creates a function that returns the result of invoking the given + * functions, where each successive invocation is supplied the return + * value of the previous. + * + * @example + * ```tsx + * const add2 = (x) => x + 2; + * const multiplyBy3 = (x) => x * 3; + * const subtract5 = (x) => x - 5; + * + * const composedFunction = flow(add2, multiplyBy3, subtract5); // ((4 + 2) * 3) - 5 = 13 + * const composedFunction2 = flow([add2, multiplyBy3], subtract5); // ((4 + 2) * 3) - 5 = 13 + * + */ +export const flow = + (...funcs: Array) => + (input: any, ...rest: any[]): any => { + let output = input; + + for (let func of funcs) { + // Recurse into the array of functions + if (Array.isArray(func)) { + output = flow(...func)(output, ...rest); + } else if (func) { + output = func(output, ...rest); + } + } + return output; + }; diff --git a/tgui/packages/common/keys.ts b/tgui/packages/common/keys.ts index 34ac9e1614dde..3e913151707ff 100644 --- a/tgui/packages/common/keys.ts +++ b/tgui/packages/common/keys.ts @@ -5,6 +5,7 @@ * Handles modifier keys (Shift, Alt, Control) and arrow keys. * * For alphabetical keys, use the actual character (e.g. 'a') instead of the key code. + * Don't access Esc or Escape directly, use isEscape() instead * * Something isn't here that you want? Just add it: * @url https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key/Key_Values @@ -16,6 +17,8 @@ * // do something * } * ``` + * + * */ export enum KEY { Alt = 'Alt', @@ -25,6 +28,7 @@ export enum KEY { Down = 'ArrowDown', End = 'End', Enter = 'Enter', + Esc = 'Esc', Escape = 'Escape', Home = 'Home', Insert = 'Insert', @@ -37,3 +41,18 @@ export enum KEY { Tab = 'Tab', Up = 'ArrowUp', } + +/** + * ### isEscape + * + * Checks if the user has hit the 'ESC' key on their keyboard. + * There's a weirdness in BYOND where this could be either the string + * 'Escape' or 'Esc' depending on the browser. This function handles + * both cases. + * + * @param key - the key to check, typically from event.key + * @returns true if key is Escape or Esc, false otherwise + */ +export function isEscape(key: string): boolean { + return key === KEY.Esc || key === KEY.Escape; +} diff --git a/tgui/packages/common/perf.js b/tgui/packages/common/perf.ts similarity index 50% rename from tgui/packages/common/perf.js rename to tgui/packages/common/perf.ts index 591aa3537dee6..9266d88a896a1 100644 --- a/tgui/packages/common/perf.js +++ b/tgui/packages/common/perf.ts @@ -14,46 +14,57 @@ const FRAME_DURATION = 1000 / FPS; // True if Performance API is supported const supportsPerf = !!window.performance?.now; // High precision markers -let hpMarkersByName = {}; +let hpMarkersByName: Record = {}; // Low precision markers -let lpMarkersByName = {}; +let lpMarkersByName: Record = {}; /** * Marks a certain spot in the code for later measurements. */ -const mark = (name, timestamp) => { +function mark(name: string, timestamp?: number): void { if (process.env.NODE_ENV !== 'production') { if (supportsPerf && !timestamp) { hpMarkersByName[name] = performance.now(); } lpMarkersByName[name] = timestamp || Date.now(); } -}; +} /** * Calculates and returns the difference between two markers as a string. * * Use logger.log() to print the measurement. */ -const measure = (markerNameA, markerNameB) => { - if (process.env.NODE_ENV !== 'production') { - let markerA = hpMarkersByName[markerNameA]; - let markerB = hpMarkersByName[markerNameB]; - if (!markerA || !markerB) { - markerA = lpMarkersByName[markerNameA]; - markerB = lpMarkersByName[markerNameB]; - } - const duration = Math.abs(markerB - markerA); - return formatDuration(duration); +function measure(markerNameA: string, markerNameB: string): string | undefined { + if (process.env.NODE_ENV === 'production') return; + + let markerA = hpMarkersByName[markerNameA]; + let markerB = hpMarkersByName[markerNameB]; + + if (!markerA || !markerB) { + markerA = lpMarkersByName[markerNameA]; + markerB = lpMarkersByName[markerNameB]; } -}; -const formatDuration = (duration) => { + const duration = Math.abs(markerB - markerA); + + return formatDuration(duration); +} + +/** + * Formats a duration in milliseconds and frames. + */ +function formatDuration(duration: number): string { const durationInFrames = duration / FRAME_DURATION; - // prettier-ignore - return duration.toFixed(duration < 10 ? 1 : 0) + 'ms ' - + '(' + durationInFrames.toFixed(2) + ' frames)'; -}; + + return ( + duration.toFixed(duration < 10 ? 1 : 0) + + 'ms ' + + '(' + + durationInFrames.toFixed(2) + + ' frames)' + ); +} export const perf = { mark, diff --git a/tgui/packages/common/string.babel-plugin.cjs b/tgui/packages/common/string.babel-plugin.cjs deleted file mode 100644 index 97ca67c6ea4ca..0000000000000 --- a/tgui/packages/common/string.babel-plugin.cjs +++ /dev/null @@ -1,73 +0,0 @@ -/** - * This plugin saves overall about 10KB on the final bundle size, so it's - * sort of worth it. - * - * We are using a .cjs extension because: - * - * 1. Webpack CLI only supports CommonJS modules; - * 2. tgui-dev-server supports both, but we still need to signal NodeJS - * to import it as a CommonJS module, hence .cjs extension. - * - * We need to copy-paste the whole "multiline" function because we can't - * synchronously import an ES module from a CommonJS module. - * - * @file - * @copyright 2020 Aleksej Komarov - * @license MIT - */ - -/** - * Removes excess whitespace and indentation from the string. - */ -const multiline = (str) => { - const lines = str.split('\n'); - // Determine base indentation - let minIndent; - for (let line of lines) { - for (let indent = 0; indent < line.length; indent++) { - const char = line[indent]; - if (char !== ' ') { - if (minIndent === undefined || indent < minIndent) { - minIndent = indent; - } - break; - } - } - } - if (!minIndent) { - minIndent = 0; - } - // Remove this base indentation and trim the resulting string - // from both ends. - return lines - .map((line) => line.substr(minIndent).trimRight()) - .join('\n') - .trim(); -}; - -const StringPlugin = (ref) => { - return { - visitor: { - TaggedTemplateExpression: (path) => { - if (path.node.tag.name === 'multiline') { - const { quasi } = path.node; - if (quasi.expressions.length > 0) { - throw new Error('Multiline tag does not support expressions!'); - } - if (quasi.quasis.length > 1) { - throw new Error('Quasis is longer than 1'); - } - const { value } = quasi.quasis[0]; - value.raw = multiline(value.raw); - value.cooked = multiline(value.cooked); - path.replaceWith(quasi); - } - }, - }, - }; -}; - -module.exports = { - __esModule: true, - default: StringPlugin, -}; diff --git a/tgui/packages/common/string.js b/tgui/packages/common/string.js deleted file mode 100644 index 5906d83cb84f7..0000000000000 --- a/tgui/packages/common/string.js +++ /dev/null @@ -1,196 +0,0 @@ -/** - * @file - * @copyright 2020 Aleksej Komarov - * @license MIT - */ - -/** - * Removes excess whitespace and indentation from the string. - */ -export const multiline = (str) => { - if (Array.isArray(str)) { - // Small stub to allow usage as a template tag - return multiline(str.join('')); - } - const lines = str.split('\n'); - // Determine base indentation - let minIndent; - for (let line of lines) { - for (let indent = 0; indent < line.length; indent++) { - const char = line[indent]; - if (char !== ' ') { - if (minIndent === undefined || indent < minIndent) { - minIndent = indent; - } - break; - } - } - } - if (!minIndent) { - minIndent = 0; - } - // Remove this base indentation and trim the resulting string - // from both ends. - return lines - .map((line) => line.substr(minIndent).trimRight()) - .join('\n') - .trim(); -}; - -/** - * Creates a glob pattern matcher. - * - * Matches strings with wildcards. - * - * Example: createGlobPattern('*@domain')('user@domain') === true - */ -export const createGlobPattern = (pattern) => { - const escapeString = (str) => str.replace(/[|\\{}()[\]^$+*?.]/g, '\\$&'); - // prettier-ignore - const regex = new RegExp('^' - + pattern.split(/\*+/).map(escapeString).join('.*') - + '$'); - return (str) => regex.test(str); -}; - -/** - * Creates a search terms matcher. - * - * Returns true if given string matches the search text. - * - * @template T - * @param {string} searchText - * @param {(obj: T) => string} stringifier - * @returns {(obj: T) => boolean} - */ -export const createSearch = (searchText, stringifier) => { - const preparedSearchText = searchText.toLowerCase().trim(); - return (obj) => { - if (!preparedSearchText) { - return true; - } - const str = stringifier ? stringifier(obj) : obj; - if (!str) { - return false; - } - return str.toLowerCase().includes(preparedSearchText); - }; -}; - -/** - * Capitalizes a word and lowercases the rest. - * @param {string} str - * @returns {string} capitalized string - * - * @example capitalize('heLLo') === 'Hello' - */ -export const capitalize = (str) => { - // Handle array - if (Array.isArray(str)) { - return str.map(capitalize); - } - // Handle string - return str.charAt(0).toUpperCase() + str.slice(1).toLowerCase(); -}; - -/** - * Similar to capitalize, this takes a string and replaces all first letters - * of any words. - * - * @param {string} str - * @return {string} The string with the first letters capitalized. - * - * @example capitalizeAll('heLLo woRLd') === 'HeLLo WoRLd' - */ -export const capitalizeAll = (str) => { - return str.replace(/(^\w{1})|(\s+\w{1})/g, (letter) => letter.toUpperCase()); -}; - -/** - * Capitalizes only the first letter of the str. - * - * @param {string} str - * @return {string} capitalized string - * - * @example capitalizeFirst('heLLo woRLd') === 'HeLLo woRLd' - */ -export const capitalizeFirst = (str) => { - return str.replace(/^\w/, (letter) => letter.toUpperCase()); -}; - -export const toTitleCase = (str) => { - // Handle array - if (Array.isArray(str)) { - return str.map(toTitleCase); - } - // Pass non-string - if (typeof str !== 'string') { - return str; - } - // Handle string - const WORDS_UPPER = ['Id', 'Tv']; - // prettier-ignore - const WORDS_LOWER = [ - 'A', 'An', 'And', 'As', 'At', 'But', 'By', 'For', 'For', 'From', 'In', - 'Into', 'Near', 'Nor', 'Of', 'On', 'Onto', 'Or', 'The', 'To', 'With', - ]; - let currentStr = str.replace(/([^\W_]+[^\s-]*) */g, (str) => { - return str.charAt(0).toUpperCase() + str.substr(1).toLowerCase(); - }); - for (let word of WORDS_LOWER) { - const regex = new RegExp('\\s' + word + '\\s', 'g'); - currentStr = currentStr.replace(regex, (str) => str.toLowerCase()); - } - for (let word of WORDS_UPPER) { - const regex = new RegExp('\\b' + word + '\\b', 'g'); - currentStr = currentStr.replace(regex, (str) => str.toLowerCase()); - } - return currentStr; -}; - -/** - * Decodes HTML entities, and removes unnecessary HTML tags. - * - * @param {String} str Encoded HTML string - * @return {String} Decoded HTML string - */ -export const decodeHtmlEntities = (str) => { - if (!str) { - return str; - } - const translate_re = /&(nbsp|amp|quot|lt|gt|apos);/g; - const translate = { - nbsp: ' ', - amp: '&', - quot: '"', - lt: '<', - gt: '>', - apos: "'", - }; - // prettier-ignore - return str - // Newline tags - .replace(/
    /gi, '\n') - .replace(/<\/?[a-z0-9-_]+[^>]*>/gi, '') - // Basic entities - .replace(translate_re, (match, entity) => translate[entity]) - // Decimal entities - .replace(/&#?([0-9]+);/gi, (match, numStr) => { - const num = parseInt(numStr, 10); - return String.fromCharCode(num); - }) - // Hex entities - .replace(/&#x?([0-9a-f]+);/gi, (match, numStr) => { - const num = parseInt(numStr, 16); - return String.fromCharCode(num); - }); -}; - -/** - * Converts an object into a query string, - */ -// prettier-ignore -export const buildQueryString = obj => Object.keys(obj) - .map(key => encodeURIComponent(key) - + '=' + encodeURIComponent(obj[key])) - .join('&'); diff --git a/tgui/packages/common/string.test.ts b/tgui/packages/common/string.test.ts new file mode 100644 index 0000000000000..06b24da801361 --- /dev/null +++ b/tgui/packages/common/string.test.ts @@ -0,0 +1,35 @@ +import { createSearch, decodeHtmlEntities, toTitleCase } from './string'; + +describe('createSearch', () => { + it('matches search terms correctly', () => { + const search = createSearch('test', (obj: { value: string }) => obj.value); + + const obj1 = { value: 'This is a test string.' }; + const obj2 = { value: 'This is a different string.' }; + const obj3 = { value: 'This is a test string.' }; + + const objects = [obj1, obj2, obj3]; + + expect(objects.filter(search)).toEqual([obj1, obj3]); + }); +}); + +describe('toTitleCase', () => { + it('converts strings to title case correctly', () => { + expect(toTitleCase('hello world')).toBe('Hello World'); + expect(toTitleCase('HELLO WORLD')).toBe('Hello World'); + expect(toTitleCase('HeLLo wORLd')).toBe('Hello World'); + expect(toTitleCase('a tale of two cities')).toBe('A Tale of Two Cities'); + expect(toTitleCase('war and peace')).toBe('War and Peace'); + }); +}); + +describe('decodeHtmlEntities', () => { + it('decodes HTML entities and removes unnecessary HTML tags correctly', () => { + expect(decodeHtmlEntities('
    ')).toBe('\n'); + expect(decodeHtmlEntities('

    Hello World

    ')).toBe('Hello World'); + expect(decodeHtmlEntities('&')).toBe('&'); + expect(decodeHtmlEntities('&')).toBe('&'); + expect(decodeHtmlEntities('&')).toBe('&'); + }); +}); diff --git a/tgui/packages/common/string.ts b/tgui/packages/common/string.ts new file mode 100644 index 0000000000000..d6f328750c42b --- /dev/null +++ b/tgui/packages/common/string.ts @@ -0,0 +1,173 @@ +/** + * @file + * @copyright 2020 Aleksej Komarov + * @license MIT + */ + +/** + * Creates a search terms matcher. Returns true if given string matches the search text. + * + * @example + * ```tsx + * type Thing = { id: string; name: string }; + * + * const objects = [ + * { id: '123', name: 'Test' }, + * { id: '456', name: 'Test' }, + * ]; + * + * const search = createSearch('123', (obj: Thing) => obj.id); + * + * objects.filter(search); // returns [{ id: '123', name: 'Test' }] + * ``` + */ +export function createSearch( + searchText: string, + stringifier = (obj: TObj) => JSON.stringify(obj), +): (obj: TObj) => boolean { + const preparedSearchText = searchText.toLowerCase().trim(); + + return (obj) => { + if (!preparedSearchText) { + return true; + } + const str = stringifier(obj); + if (!str) { + return false; + } + return str.toLowerCase().includes(preparedSearchText); + }; +} + +/** + * Capitalizes a word and lowercases the rest. + * + * @example + * ```tsx + * capitalize('heLLo') // Hello + * ``` + */ +export function capitalize(str: string): string { + return str.charAt(0).toUpperCase() + str.slice(1).toLowerCase(); +} + +/** + * Similar to capitalize, this takes a string and replaces all first letters + * of any words. + * + * @example + * ```tsx + * capitalizeAll('heLLo woRLd') // 'HeLLo WoRLd' + * ``` + */ +export function capitalizeAll(str: string): string { + return str.replace(/(^\w{1})|(\s+\w{1})/g, (letter) => letter.toUpperCase()); +} + +/** + * Capitalizes only the first letter of the str, leaving others untouched. + * + * @example + * ```tsx + * capitalizeFirst('heLLo woRLd') // 'HeLLo woRLd' + * ``` + */ +export function capitalizeFirst(str: string): string { + return str.replace(/^\w/, (letter) => letter.toUpperCase()); +} + +const WORDS_UPPER = ['Id', 'Tv'] as const; + +const WORDS_LOWER = [ + 'A', + 'An', + 'And', + 'As', + 'At', + 'But', + 'By', + 'For', + 'For', + 'From', + 'In', + 'Into', + 'Near', + 'Nor', + 'Of', + 'On', + 'Onto', + 'Or', + 'The', + 'To', + 'With', +] as const; + +/** + * Converts a string to title case. + * + * @example + * ```tsx + * toTitleCase('a tale of two cities') // 'A Tale of Two Cities' + * ``` + */ +export function toTitleCase(str: string): string { + if (!str) return str; + + let currentStr = str.replace(/([^\W_]+[^\s-]*) */g, (str) => { + return capitalize(str); + }); + + for (let word of WORDS_LOWER) { + const regex = new RegExp('\\s' + word + '\\s', 'g'); + currentStr = currentStr.replace(regex, (str) => str.toLowerCase()); + } + + for (let word of WORDS_UPPER) { + const regex = new RegExp('\\b' + word + '\\b', 'g'); + currentStr = currentStr.replace(regex, (str) => str.toLowerCase()); + } + + return currentStr; +} + +const TRANSLATE_REGEX = /&(nbsp|amp|quot|lt|gt|apos);/g; +const TRANSLATIONS = { + amp: '&', + apos: "'", + gt: '>', + lt: '<', + nbsp: ' ', + quot: '"', +} as const; + +/** + * Decodes HTML entities and removes unnecessary HTML tags. + * + * @example + * ```tsx + * decodeHtmlEntities('&') // returns '&' + * decodeHtmlEntities('<') // returns '<' + * ``` + */ +export function decodeHtmlEntities(str: string): string { + if (!str) return str; + + return ( + str + // Newline tags + .replace(/
    /gi, '\n') + .replace(/<\/?[a-z0-9-_]+[^>]*>/gi, '') + // Basic entities + .replace(TRANSLATE_REGEX, (match, entity) => TRANSLATIONS[entity]) + // Decimal entities + .replace(/&#?([0-9]+);/gi, (match, numStr) => { + const num = parseInt(numStr, 10); + return String.fromCharCode(num); + }) + // Hex entities + .replace(/&#x?([0-9a-f]+);/gi, (match, numStr) => { + const num = parseInt(numStr, 16); + return String.fromCharCode(num); + }) + ); +} diff --git a/tgui/packages/common/uuid.test.ts b/tgui/packages/common/uuid.test.ts new file mode 100644 index 0000000000000..e3af57c472675 --- /dev/null +++ b/tgui/packages/common/uuid.test.ts @@ -0,0 +1,11 @@ +import { createUuid } from './uuid'; + +describe('createUuid', () => { + it('generates a UUID v4 string', () => { + const uuid = createUuid(); + expect(uuid).toHaveLength(36); + expect(uuid).toMatch( + /^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i, + ); + }); +}); diff --git a/tgui/packages/common/uuid.js b/tgui/packages/common/uuid.ts similarity index 60% rename from tgui/packages/common/uuid.js rename to tgui/packages/common/uuid.ts index 6e156d8649bc7..250809ab6a7d2 100644 --- a/tgui/packages/common/uuid.js +++ b/tgui/packages/common/uuid.ts @@ -7,14 +7,18 @@ /** * Creates a UUID v4 string * - * @return {string} + * @example + * ```tsx + * createUuid(); // 'f47ac10b-58cc-4372-a567-0e02b2c3d479' + * ``` */ -export const createUuid = () => { +export function createUuid(): string { let d = new Date().getTime(); + return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => { const r = (d + Math.random() * 16) % 16 | 0; d = Math.floor(d / 16); - // prettier-ignore - return (c === 'x' ? r : (r & 0x3 | 0x8)).toString(16); + + return (c === 'x' ? r : (r & 0x3) | 0x8).toString(16); }); -}; +} diff --git a/tgui/packages/tgui-panel/ping/PingIndicator.jsx b/tgui/packages/tgui-panel/ping/PingIndicator.tsx similarity index 97% rename from tgui/packages/tgui-panel/ping/PingIndicator.jsx rename to tgui/packages/tgui-panel/ping/PingIndicator.tsx index 549cd09cf74a8..717f57213ae8f 100644 --- a/tgui/packages/tgui-panel/ping/PingIndicator.jsx +++ b/tgui/packages/tgui-panel/ping/PingIndicator.tsx @@ -17,7 +17,7 @@ export const PingIndicator = (props) => { new Color(220, 40, 40), new Color(220, 200, 40), new Color(60, 220, 40), - ]); + ]).toString(); const roundtrip = ping.roundtrip ? toFixed(ping.roundtrip) : '--'; return (
    diff --git a/tgui/packages/tgui-panel/themes.ts b/tgui/packages/tgui-panel/themes.ts index d8f0ce50b7974..67061ff1f4cf1 100644 --- a/tgui/packages/tgui-panel/themes.ts +++ b/tgui/packages/tgui-panel/themes.ts @@ -57,6 +57,8 @@ export const setClientTheme = (name) => { 'github.text-color': '#000000', 'report-issue.background-color': 'none', 'report-issue.text-color': '#000000', + 'fullscreen-toggle.background-color': 'none', + 'fullscreen-toggle.text-color': '#000000', // Status and verb tabs 'output.background-color': 'none', 'output.text-color': '#000000', @@ -109,6 +111,8 @@ export const setClientTheme = (name) => { 'github.text-color': COLOR_DARK_TEXT, 'report-issue.background-color': '#492020', 'report-issue.text-color': COLOR_DARK_TEXT, + 'fullscreen-toggle.background-color': '#494949', + 'fullscreen-toggle.text-color': COLOR_DARK_TEXT, // Status and verb tabs 'output.background-color': COLOR_DARK_BG_DARKER, 'output.text-color': COLOR_DARK_TEXT, diff --git a/tgui/packages/tgui-say/TguiSay.tsx b/tgui/packages/tgui-say/TguiSay.tsx index 39043a978b8cf..fbee44f00f9e2 100644 --- a/tgui/packages/tgui-say/TguiSay.tsx +++ b/tgui/packages/tgui-say/TguiSay.tsx @@ -1,4 +1,4 @@ -import { KEY } from 'common/keys'; +import { isEscape, KEY } from 'common/keys'; import { BooleanLike } from 'common/react'; import { Component, createRef, RefObject } from 'react'; import { dragStartHandler } from 'tgui/drag'; @@ -162,7 +162,7 @@ export class TguiSay extends Component<{}, State> { ? prefix + currentValue : currentValue; - this.messages.forceSayMsg(grunt); + this.messages.forceSayMsg(grunt, this.channelIterator.current()); this.reset(); } @@ -245,9 +245,10 @@ export class TguiSay extends Component<{}, State> { this.handleIncrementChannel(); break; - case KEY.Escape: - this.handleClose(); - break; + default: + if (isEscape(event.key)) { + this.handleClose(); + } } } @@ -273,6 +274,7 @@ export class TguiSay extends Component<{}, State> { }; reset() { + this.currentPrefix = null; this.setValue(''); this.setSize(); this.setState({ diff --git a/tgui/packages/tgui-say/timers.ts b/tgui/packages/tgui-say/timers.ts index 85c58f7424ae9..d1388487c07c6 100644 --- a/tgui/packages/tgui-say/timers.ts +++ b/tgui/packages/tgui-say/timers.ts @@ -1,5 +1,7 @@ import { debounce, throttle } from 'common/timer'; +import { Channel } from './ChannelIterator'; + const SECONDS = 1000; /** Timers: Prevents overloading the server, throttles messages */ @@ -10,7 +12,8 @@ export const byondMessages = { 0.4 * SECONDS, ), forceSayMsg: debounce( - (entry: string) => Byond.sendMessage('force', { entry, channel: 'Say' }), + (entry: string, channel: Channel) => + Byond.sendMessage('force', { entry, channel }), 1 * SECONDS, true, ), diff --git a/tgui/packages/tgui/components/Button.tsx b/tgui/packages/tgui/components/Button.tsx index 25b1e78f06177..ec621de621ef0 100644 --- a/tgui/packages/tgui/components/Button.tsx +++ b/tgui/packages/tgui/components/Button.tsx @@ -5,7 +5,7 @@ */ import { Placement } from '@popperjs/core'; -import { KEY } from 'common/keys'; +import { isEscape, KEY } from 'common/keys'; import { BooleanLike, classes } from 'common/react'; import { ChangeEvent, @@ -131,7 +131,7 @@ export const Button = (props: Props) => { } // Refocus layout on pressing escape. - if (event.key === KEY.Escape) { + if (isEscape(event.key)) { event.preventDefault(); } }} @@ -343,7 +343,7 @@ const ButtonInput = (props: InputProps) => { commitResult(event); return; } - if (event.key === KEY.Escape) { + if (isEscape(event.key)) { setInInput(false); } }} diff --git a/tgui/packages/tgui/components/DmIcon.tsx b/tgui/packages/tgui/components/DmIcon.tsx index fb6816576ac0c..bb785fc6e3968 100644 --- a/tgui/packages/tgui/components/DmIcon.tsx +++ b/tgui/packages/tgui/components/DmIcon.tsx @@ -29,7 +29,7 @@ type Props = { /** Frame number. Default is 1 */ frame: number; /** Movement state. Default is false */ - movement: boolean; + movement: any; }> & BoxProps; @@ -49,7 +49,7 @@ export function DmIcon(props: Props) { const [iconRef, setIconRef] = useState(''); - const query = `${iconRef}?state=${icon_state}&dir=${direction}&movement=${movement}&frame=${frame}`; + const query = `${iconRef}?state=${icon_state}&dir=${direction}&movement=${!!movement}&frame=${frame}`; useEffect(() => { async function fetchRefMap() { diff --git a/tgui/packages/tgui/components/Input.tsx b/tgui/packages/tgui/components/Input.tsx index 36d928ce2151a..9bc48aa809406 100644 --- a/tgui/packages/tgui/components/Input.tsx +++ b/tgui/packages/tgui/components/Input.tsx @@ -4,7 +4,7 @@ * @license MIT */ -import { KEY } from 'common/keys'; +import { isEscape, KEY } from 'common/keys'; import { classes } from 'common/react'; import { debounce } from 'common/timer'; import { KeyboardEvent, SyntheticEvent, useEffect, useRef } from 'react'; @@ -127,7 +127,7 @@ export function Input(props: Props) { return; } - if (event.key === KEY.Escape) { + if (isEscape(event.key)) { onEscape?.(event); event.currentTarget.value = toInputValue(value); diff --git a/tgui/packages/tgui/components/NumberInput.tsx b/tgui/packages/tgui/components/NumberInput.tsx index 572b0070bcaa9..892a43eddf3c0 100644 --- a/tgui/packages/tgui/components/NumberInput.tsx +++ b/tgui/packages/tgui/components/NumberInput.tsx @@ -1,4 +1,4 @@ -import { KEY } from 'common/keys'; +import { isEscape, KEY } from 'common/keys'; import { clamp } from 'common/math'; import { BooleanLike, classes } from 'common/react'; import { @@ -239,7 +239,7 @@ export class NumberInput extends Component { onChange?.(targetValue); onDrag?.(targetValue); } - } else if (event.key === KEY.Escape) { + } else if (isEscape(event.key)) { this.setState({ editing: false, }); diff --git a/tgui/packages/tgui/components/TextArea.tsx b/tgui/packages/tgui/components/TextArea.tsx index 82302b98b2b63..0482229b8fd4b 100644 --- a/tgui/packages/tgui/components/TextArea.tsx +++ b/tgui/packages/tgui/components/TextArea.tsx @@ -5,7 +5,7 @@ * @license MIT */ -import { KEY } from 'common/keys'; +import { isEscape, KEY } from 'common/keys'; import { classes } from 'common/react'; import { forwardRef, @@ -82,7 +82,7 @@ export const TextArea = forwardRef( return; } - if (event.key === KEY.Escape) { + if (isEscape(event.key)) { onEscape?.(event); if (selfClear) { event.currentTarget.value = ''; diff --git a/tgui/packages/tgui/interfaces/AccountingConsole.tsx b/tgui/packages/tgui/interfaces/AccountingConsole.tsx index f737234fc6a6c..92124bc38ef02 100644 --- a/tgui/packages/tgui/interfaces/AccountingConsole.tsx +++ b/tgui/packages/tgui/interfaces/AccountingConsole.tsx @@ -1,7 +1,5 @@ import { BooleanLike } from 'common/react'; import { useState } from 'react'; - -import { useBackend } from '../backend'; import { BlockQuote, Collapsible, @@ -9,7 +7,9 @@ import { Section, Stack, Tabs, -} from '../components'; +} from 'tgui-core/components'; + +import { useBackend } from '../backend'; import { Window } from '../layouts'; type Data = { diff --git a/tgui/packages/tgui/interfaces/AirAlarm.tsx b/tgui/packages/tgui/interfaces/AirAlarm.tsx index bacfe259fe182..448d233d36839 100644 --- a/tgui/packages/tgui/interfaces/AirAlarm.tsx +++ b/tgui/packages/tgui/interfaces/AirAlarm.tsx @@ -1,7 +1,5 @@ import { BooleanLike } from 'common/react'; import { Fragment } from 'react'; - -import { useBackend, useLocalState } from '../backend'; import { Box, Button, @@ -11,7 +9,9 @@ import { Section, Table, VirtualList, -} from '../components'; +} from 'tgui-core/components'; + +import { useBackend, useLocalState } from '../backend'; import { Window } from '../layouts'; import { Scrubber, diff --git a/tgui/packages/tgui/interfaces/AlertModal.tsx b/tgui/packages/tgui/interfaces/AlertModal.tsx index 62b6e8bbbc328..5924dc7ae7cf2 100644 --- a/tgui/packages/tgui/interfaces/AlertModal.tsx +++ b/tgui/packages/tgui/interfaces/AlertModal.tsx @@ -1,4 +1,4 @@ -import { KEY } from 'common/keys'; +import { isEscape, KEY } from 'common/keys'; import { BooleanLike } from 'common/react'; import { KeyboardEvent, useState } from 'react'; @@ -55,9 +55,6 @@ export function AlertModal(props) { case KEY.Enter: act('choose', { choice: buttons[selected] }); return; - case KEY.Escape: - act('cancel'); - return; case KEY.Left: event.preventDefault(); onKey(DIRECTION.Decrement); @@ -67,6 +64,12 @@ export function AlertModal(props) { event.preventDefault(); onKey(DIRECTION.Increment); return; + + default: + if (isEscape(event.key)) { + act('cancel'); + return; + } } } diff --git a/tgui/packages/tgui/interfaces/AntagInfoChangeling.tsx b/tgui/packages/tgui/interfaces/AntagInfoChangeling.tsx index 5b1a46c0070e5..2f41fa7c46d05 100644 --- a/tgui/packages/tgui/interfaces/AntagInfoChangeling.tsx +++ b/tgui/packages/tgui/interfaces/AntagInfoChangeling.tsx @@ -1,5 +1,4 @@ import { BooleanLike } from 'common/react'; -import { multiline } from 'common/string'; import { useState } from 'react'; import { useBackend } from '../backend'; @@ -227,7 +226,7 @@ const MemoriesSection = (props) => { + {!!node.ascension && ( + + DUSK + + )} + + ))} + +
    ))} - - - - ); -}; - -const KnowledgeShop = (props) => { - const { data, act } = useBackend(); - const { learnableKnowledge } = data; - - return ( - -
    - {(!learnableKnowledge.length && 'None!') || - learnableKnowledge.map((toLearn) => ( - -
    -
    + + ); }; @@ -284,23 +329,16 @@ const ResearchInfo = (props) => { const { charges } = data; return ( - + + + You have {charges || 0}  + + knowledge point{charges !== 1 ? 's' : ''} + {' '} + to spend. + - - - You have {charges || 0}  - - knowledge point{charges !== 1 ? 's' : ''} - {' '} - to spend. - - - - - - - - + ); diff --git a/tgui/packages/tgui/interfaces/AntagInfoMalf.tsx b/tgui/packages/tgui/interfaces/AntagInfoMalf.tsx index 239568a9d4da1..a996899c5288f 100644 --- a/tgui/packages/tgui/interfaces/AntagInfoMalf.tsx +++ b/tgui/packages/tgui/interfaces/AntagInfoMalf.tsx @@ -1,5 +1,4 @@ import { BooleanLike } from 'common/react'; -import { multiline } from 'common/string'; import { useState } from 'react'; import { useBackend } from '../backend'; @@ -79,7 +78,7 @@ const FlavorSection = (props) => { mr={-0.8} mt={-0.5} icon="hammer" - tooltip={multiline` + tooltip={` This is a gameplay suggestion for bored ais. You don't have to follow it, unless you want some ideas for how to spend the round.`} diff --git a/tgui/packages/tgui/interfaces/AntagInfoTraitor.tsx b/tgui/packages/tgui/interfaces/AntagInfoTraitor.tsx index 3e5beeddab44d..f574919a16d71 100644 --- a/tgui/packages/tgui/interfaces/AntagInfoTraitor.tsx +++ b/tgui/packages/tgui/interfaces/AntagInfoTraitor.tsx @@ -1,5 +1,4 @@ import { BooleanLike } from 'common/react'; -import { multiline } from 'common/string'; import { useBackend } from '../backend'; import { BlockQuote, Button, Dimmer, Section, Stack } from '../components'; @@ -66,7 +65,7 @@ const EmployerSection = (props) => { buttons={ + } + > + + + {`${parseFloat(biomass.toFixed(2))} units`} + + + + {!!beaker && ( + act('eject')} + > + Eject + + } + > + + + {`${beakerCurrentVolume} of ${beakerMaxVolume} units`} + + + + )} + {!beaker && ( + + + No liquid container + + + )} + + + ); +} + +type Props = { + item: Design; + space: number; }; -const ItemList = (props) => { - const { act } = useBackend(); - const items = props.items.map((item) => { - const [amount, setAmount] = useLocalState( - 'amount' + item.name, - item.is_reagent ? Math.min(Math.max(props.space, 1), 10) : 1, - ); - const disabled = - props.processing || - (item.is_reagent && !props.beaker) || - (item.is_reagent && props.space < amount) || - props.biomass < Math.ceil((item.cost * amount) / props.efficiency); - const max_possible = Math.floor( - (props.efficiency * props.biomass) / item.cost, - ); - const max_capacity = item.is_reagent ? props.space : props.max_output; - const max_amount = Math.max(1, Math.min(max_capacity, max_possible)); - return { - ...item, - disabled, - max_amount, - amount, - setAmount, - }; - }); - return items.map((item) => ( - +function Item(props: Props) { + const { item, space } = props; + const { cost, id, is_reagent, name } = item; + + const { act, data } = useBackend(); + const { biomass, beaker, efficiency, max_output, processing } = data; + + const minAmount = is_reagent ? Math.min(Math.max(space, 1), 10) : 1; + + const [amount, setAmount] = useState(minAmount); + + const disabled = + processing || + (is_reagent && !beaker) || + (is_reagent && space < amount) || + biomass < Math.ceil((cost * amount) / efficiency); + + const maxPossible = Math.floor((efficiency * biomass) / cost); + + const maxCapacity = is_reagent ? space : max_output; + const maxAmount = Math.max(1, Math.min(maxCapacity, maxPossible)); + + return ( + {' '} - {item.name} + {name} item.setAmount(value)} + maxValue={maxAmount} + onChange={(value) => setAmount(value)} /> - )); -}; + ); +} diff --git a/tgui/packages/tgui/interfaces/BluespaceSender.tsx b/tgui/packages/tgui/interfaces/BluespaceSender.tsx index c8c9e47b0c794..2f94af4cfaa9d 100644 --- a/tgui/packages/tgui/interfaces/BluespaceSender.tsx +++ b/tgui/packages/tgui/interfaces/BluespaceSender.tsx @@ -1,7 +1,6 @@ import { filter, sortBy } from 'common/collections'; import { toFixed } from 'common/math'; import { BooleanLike } from 'common/react'; -import { multiline } from 'common/string'; import { useBackend } from '../backend'; import { @@ -63,7 +62,7 @@ export const BluespaceSender = (props) => { color="transparent" icon="info" tooltipPosition="bottom-start" - tooltip={multiline` + tooltip={` Any gas you pipe into here will be added to the Bluespace Network! That means any connected Bluespace Vendor (multitool) will hook up to all the gas stored in this, and charge diff --git a/tgui/packages/tgui/interfaces/BluespaceVendor.tsx b/tgui/packages/tgui/interfaces/BluespaceVendor.tsx index 6ce242e4e48c2..7b9619de26e55 100644 --- a/tgui/packages/tgui/interfaces/BluespaceVendor.tsx +++ b/tgui/packages/tgui/interfaces/BluespaceVendor.tsx @@ -1,7 +1,6 @@ import { filter, sortBy } from 'common/collections'; import { toFixed } from 'common/math'; import { BooleanLike } from 'common/react'; -import { multiline } from 'common/string'; import { useBackend } from '../backend'; import { @@ -124,7 +123,7 @@ export const BluespaceVendor = (props) => { color="transparent" icon="info" tooltipPosition="bottom-start" - tooltip={multiline` + tooltip={` Quick guide for machine use: Prepare a tank to create a new one in the machine, pick how much you want it filled, and finally press start on the gas of your choice! diff --git a/tgui/packages/tgui/interfaces/BotAnnouncement.tsx b/tgui/packages/tgui/interfaces/BotAnnouncement.tsx new file mode 100644 index 0000000000000..3292e81a0e75f --- /dev/null +++ b/tgui/packages/tgui/interfaces/BotAnnouncement.tsx @@ -0,0 +1,270 @@ +import { createSearch } from 'common/string'; +import { useState } from 'react'; + +import { useBackend } from '../backend'; +import { + Box, + Button, + Dropdown, + Icon, + Input, + Section, + Stack, + Tabs, +} from '../components'; +import { RADIO_CHANNELS } from '../constants'; +import { Window } from '../layouts'; + +type ButtonData = { + name: string; + channel: string; +}; + +type ButtonDataWithId = { + button: ButtonData; + index: number; +}; + +type StringWithId = { + string: string; + index: number; +}; + +type BotAnnouncementData = { + channels: string[]; + lines: string[]; + button_data: ButtonData[]; + cooldown_left: number; +}; + +enum TAB { + Announcements, + Shortcuts, +} + +export const BotAnnouncement = (props) => { + const { act, data } = useBackend(); + const { channels, lines, button_data, cooldown_left } = data; + + const [tab, setTab] = useState(TAB.Announcements); + const [selectedChannel, setSelectedChannel] = useState(null); + const [selectedLine, setSelectedLine] = useState(null); + const [selectedButton, setSelectedButton] = useState(null); + const [search, setSearch] = useState(''); + + let filteredLines: StringWithId[] = lines.map((val, index) => ({ + string: val, + index, + })); + let filteredShortcuts: ButtonDataWithId[] = button_data.map((val, index) => ({ + button: val, + index, + })); + + if (search !== '') { + if (tab === TAB.Announcements) { + const lineSearch = createSearch( + search, + (item: StringWithId) => item.string, + ); + filteredLines = filteredLines.filter(lineSearch); + } else { + const buttonSearch = createSearch( + search, + (item: ButtonDataWithId) => item.button.name, + ); + filteredShortcuts = filteredShortcuts.filter(buttonSearch); + } + } + + return ( + + +
    + + { + setSearch(''); + setTab(TAB.Announcements); + }} + > + Announcements + + { + setSearch(''); + setTab(TAB.Shortcuts); + }} + > + Shortcuts + + +
    +
    + {tab === TAB.Announcements && ( + + {filteredLines.map((val) => ( + + + + ))} + + )} + {tab === TAB.Shortcuts && ( + + {filteredShortcuts.map((val) => ( + + + + ))} + + )} +
    +
    + + + setSearch(newValue)} + fluid + autoFocus + placeholder="Search..." + /> + + + + {tab === TAB.Announcements ? ( + + { + if (value === 'No radio channel') { + setSelectedChannel(null); + } else { + setSelectedChannel(value); + } + }} + /> + + ) : ( + + )} + + + + + + + + + +
    +
    +
    + ); +}; diff --git a/tgui/packages/tgui/interfaces/CameraConsole.tsx b/tgui/packages/tgui/interfaces/CameraConsole.tsx index 3dafe1240dfe3..f28c308f1b5b5 100644 --- a/tgui/packages/tgui/interfaces/CameraConsole.tsx +++ b/tgui/packages/tgui/interfaces/CameraConsole.tsx @@ -2,8 +2,6 @@ import { filter, sort } from 'common/collections'; import { BooleanLike, classes } from 'common/react'; import { createSearch } from 'common/string'; import { useState } from 'react'; - -import { useBackend } from '../backend'; import { Button, ByondUi, @@ -11,7 +9,9 @@ import { NoticeBox, Section, Stack, -} from '../components'; +} from 'tgui-core/components'; + +import { useBackend } from '../backend'; import { Window } from '../layouts'; type Data = { diff --git a/tgui/packages/tgui/interfaces/Canvas.tsx b/tgui/packages/tgui/interfaces/Canvas.tsx index 09565831ea06d..648418e7abd06 100644 --- a/tgui/packages/tgui/interfaces/Canvas.tsx +++ b/tgui/packages/tgui/interfaces/Canvas.tsx @@ -1,5 +1,5 @@ import { Color } from 'common/color'; -import { decodeHtmlEntities, multiline } from 'common/string'; +import { decodeHtmlEntities } from 'common/string'; import { Component, createRef, RefObject } from 'react'; import { useBackend } from '../backend'; @@ -278,11 +278,11 @@ export const Canvas = (props) => { (); - const { requestonly, away, cart = [], docked, location } = data; + const { can_send, away, cart = [], docked, location } = data; - const sendable = !away && !!docked; + const sendable = !!away && !!docked; return ( @@ -26,8 +26,8 @@ export function CargoCart(props) { - - {cart.length > 0 && !requestonly && ( + {cart.length > 0 && !!can_send && ( +
    @@ -47,8 +47,8 @@ export function CargoCart(props) {
    - )} -
    +
    + )}
    ); } diff --git a/tgui/packages/tgui/interfaces/CentcomPodLauncher/PodBays.tsx b/tgui/packages/tgui/interfaces/CentcomPodLauncher/PodBays.tsx index 264df99a3c501..023ff2afb05ea 100644 --- a/tgui/packages/tgui/interfaces/CentcomPodLauncher/PodBays.tsx +++ b/tgui/packages/tgui/interfaces/CentcomPodLauncher/PodBays.tsx @@ -1,5 +1,3 @@ -import { multiline } from 'common/string'; - import { useBackend } from '../../backend'; import { Button, Section } from '../../components'; import { BAYS } from './constants'; @@ -17,7 +15,7 @@ export function PodBays(props) { color="transparent" icon="trash" onClick={() => act('clearBay')} - tooltip={multiline` + tooltip={` Clears everything from the selected bay`} tooltipPosition="top-end" @@ -25,7 +23,7 @@ export function PodBays(props) { + +
    + + {beaker && ( + label={ + + Beaker: + + } + > + + + + + {`${Math.ceil(beaker.total_volume)} of ${ + beaker.maximum_volume + } units at ${Math.ceil(beaker.temp)}K`} + + + + + + + + )} + + Burner Knob: + + } + > + + act('knob', { + amount: value, + }) + } + /> + + {fuel && ( + + Fuel Source: } > { textShadow: '1px 1px 0 black', }} > - {`${Math.ceil(data.own_total_volume)} of ${ - data.own_maximum_volume - } units at ${Math.ceil(data.temperature)}°C`} + {`${Math.ceil(fuel.total_volume)} of ${ + fuel.maximum_volume + } units at ${Math.ceil(fuel.temp)}K`} - {data.beaker ? ( + )} + {!!condenser_installed && + (flask.total_volume > 0 || beaker?.total_volume > 0) && + fuel?.total_volume > 0 && ( - )} - - + ); diff --git a/tgui/packages/tgui/interfaces/CivCargoHoldTerminal.jsx b/tgui/packages/tgui/interfaces/CivCargoHoldTerminal.jsx index 386f3c5721a0c..438030e39472c 100644 --- a/tgui/packages/tgui/interfaces/CivCargoHoldTerminal.jsx +++ b/tgui/packages/tgui/interfaces/CivCargoHoldTerminal.jsx @@ -96,41 +96,66 @@ const BountyTextBox = (props) => { const BountyPickBox = (props) => { const { act, data } = useBackend(); - const { id_bounty_names, id_bounty_values } = data; + const { id_bounty_names, id_bounty_infos, id_bounty_values } = data; return (
    - + - + - +
    ); }; + +const BountyPickButton = (props) => { + return ( + + ); +}; diff --git a/tgui/packages/tgui/interfaces/CrewConsole.tsx b/tgui/packages/tgui/interfaces/CrewConsole.tsx index aa4f272f24869..4a0439e7eeedd 100644 --- a/tgui/packages/tgui/interfaces/CrewConsole.tsx +++ b/tgui/packages/tgui/interfaces/CrewConsole.tsx @@ -1,9 +1,9 @@ import { BooleanLike } from 'common/react'; import { createSearch } from 'common/string'; import { useState } from 'react'; +import { Box, Button, Icon, Input, Section, Table } from 'tgui-core/components'; import { useBackend } from '../backend'; -import { Box, Button, Icon, Input, Section, Table } from '../components'; import { COLORS } from '../constants'; import { Window } from '../layouts'; @@ -26,7 +26,7 @@ const SORT_NAMES = { const STAT_LIVING = 0; const STAT_DEAD = 4; -const SORT_OPTIONS = ['ijob', 'name', 'area', 'health']; +const SORT_OPTIONS = ['health', 'ijob', 'name', 'area']; const jobIsHead = (jobId: number) => jobId % 10 === 0; @@ -69,10 +69,10 @@ const statToIcon = (life_status: number) => { }; const healthSort = (a: CrewSensor, b: CrewSensor) => { - if (a.life_status < b.life_status) return -1; - if (a.life_status > b.life_status) return 1; - if (a.health > b.health) return -1; - if (a.health < b.health) return 1; + if (a.life_status > b.life_status) return -1; + if (a.life_status < b.life_status) return 1; + if (a.health < b.health) return -1; + if (a.health > b.health) return 1; return 0; }; @@ -175,7 +175,6 @@ const CrewTable = () => { return (
    diff --git a/tgui/packages/tgui/interfaces/CyborgBootDebug.jsx b/tgui/packages/tgui/interfaces/CyborgBootDebug.jsx index 1daed59197abf..914d4373ea082 100644 --- a/tgui/packages/tgui/interfaces/CyborgBootDebug.jsx +++ b/tgui/packages/tgui/interfaces/CyborgBootDebug.jsx @@ -1,35 +1,33 @@ -import { multiline } from 'common/string'; - import { useBackend } from '../backend'; import { Button, Input, LabeledList, Section } from '../components'; import { Window } from '../layouts'; -const TOOLTIP_NAME = multiline` +const TOOLTIP_NAME = ` Enter a new name for this unit. Set to blank to reset to default, which means unit will be able to choose it's own name. `; -const TOOLTIP_LOCOMOTION = multiline` +const TOOLTIP_LOCOMOTION = ` If restricted, unit will be under lockdown until released. `; -const TOOLTIP_PANEL = multiline` +const TOOLTIP_PANEL = ` If unlocked, unit's cover panel will be accessible even without proper authorization. `; -const TOOLTIP_AISYNC = multiline` +const TOOLTIP_AISYNC = ` If closed, this unit will not be paired with any AI. `; -const TOOLTIP_AI = multiline` +const TOOLTIP_AI = ` Controls who will be the master AI of this unit. `; -const TOOLTIP_LAWSYNC = multiline` +const TOOLTIP_LAWSYNC = ` If closed, this unit will not synchronize it's laws with it's master AI. `; diff --git a/tgui/packages/tgui/interfaces/DeathmatchLobby.tsx b/tgui/packages/tgui/interfaces/DeathmatchLobby.tsx index 12dad26bc71d5..e7b66093d2099 100644 --- a/tgui/packages/tgui/interfaces/DeathmatchLobby.tsx +++ b/tgui/packages/tgui/interfaces/DeathmatchLobby.tsx @@ -18,11 +18,12 @@ import { import { ButtonCheckbox } from '../components/Button'; import { Window } from '../layouts'; -type Player = Record; - -type PlayerInfo = { +type Player = { host: number; + key: string; + loadout: string; ready: BooleanLike; + mob: string; }; type Modifier = { @@ -61,15 +62,25 @@ type Data = { export function DeathmatchLobby(props) { const { act, data } = useBackend(); - const { admin, observers = [], self, players } = data; + const { + admin, + host, + mod_menu_open, + observers = [], + players = [], + self, + } = data; - const allReady = Object.keys(players).every( - (player) => players[player].ready, - ); + const allReady = players.every((player) => player.ready); + + const fullAccess = !!host || !!admin; + const showMenu = fullAccess && !!mod_menu_open; + + const isObserver = observers.find((observer) => observer.key === self); return ( - + {showMenu && } @@ -98,7 +109,7 @@ export function DeathmatchLobby(props) {
    + + + ); +}; diff --git a/tgui/packages/tgui/interfaces/InfuserBook.tsx b/tgui/packages/tgui/interfaces/InfuserBook.tsx index 7266e7a5f86ed..70169b44651de 100644 --- a/tgui/packages/tgui/interfaces/InfuserBook.tsx +++ b/tgui/packages/tgui/interfaces/InfuserBook.tsx @@ -1,5 +1,4 @@ import { paginate, range } from 'common/collections'; -import { multiline } from 'common/string'; import { useState } from 'react'; import { useBackend } from '../backend'; @@ -35,7 +34,7 @@ const PAGE_HEIGHT = 30; const TIER2TIERDATA: TierData[] = [ { name: 'Lesser Mutant', - desc: multiline` + desc: ` Lesser Mutants usually have a smaller list of potential mutations, and do not have bonuses for infusing many organs. Common species, cosmetics, and things of that sort are here. Always available! @@ -44,7 +43,7 @@ const TIER2TIERDATA: TierData[] = [ }, { name: 'Regular Mutant', - desc: multiline` + desc: ` Regular Mutants all have bonuses for infusing DNA into yourself, and are common enough to find consistently in a shift. Always available! `, @@ -52,7 +51,7 @@ const TIER2TIERDATA: TierData[] = [ }, { name: 'Greater Mutant', - desc: multiline` + desc: ` Greater Mutants have stronger upsides and downsides along with their bonus, and are harder to find in a shift. Must be unlocked by first unlocking a DNA Mutant bonus of a lower tier. @@ -61,7 +60,7 @@ const TIER2TIERDATA: TierData[] = [ }, { name: 'Abberation', - desc: multiline` + desc: ` We've been able to get stronger mutants out of vatgrown specimen, henceforth named "Abberations". Abberations have either strong utility purpose, anomalous qualities, or deadly capabilities. diff --git a/tgui/packages/tgui/interfaces/IntegratedCircuit/ObjectComponent.jsx b/tgui/packages/tgui/interfaces/IntegratedCircuit/ObjectComponent.jsx index d51c39714efc6..22f7c6ce1a84f 100644 --- a/tgui/packages/tgui/interfaces/IntegratedCircuit/ObjectComponent.jsx +++ b/tgui/packages/tgui/interfaces/IntegratedCircuit/ObjectComponent.jsx @@ -39,8 +39,8 @@ export class ObjectComponent extends Component { if (dragPos) { act('set_component_coordinates', { component_id: index, - rel_x: dragPos.x, - rel_y: dragPos.y, + rel_x: this.roundToGrid(dragPos.x), + rel_y: this.roundToGrid(dragPos.y), }); } @@ -81,6 +81,12 @@ export class ObjectComponent extends Component { ); } + // Round the units to the grid (bypass if grid mode is off) + roundToGrid(input_value) { + if (!this.props.gridMode) return input_value; + return Math.round(input_value / 10) * 10; + } + render() { const { input_ports, @@ -99,14 +105,15 @@ export class ObjectComponent extends Component { onPortRightClick = noop, onPortMouseUp = noop, act = noop, + gridMode = true, ...rest } = this.props; const { startPos, dragPos } = this.state; let [x_pos, y_pos] = [x, y]; if (dragPos && startPos && startPos.x === x_pos && startPos.y === y_pos) { - x_pos = dragPos.x; - y_pos = dragPos.y; + x_pos = this.roundToGrid(dragPos.x); + y_pos = this.roundToGrid(dragPos.y); } // Assigned onto the ports diff --git a/tgui/packages/tgui/interfaces/IntegratedCircuit/VariableMenu.jsx b/tgui/packages/tgui/interfaces/IntegratedCircuit/VariableMenu.jsx index 45e7e90d7377b..07a34d8a58ba2 100644 --- a/tgui/packages/tgui/interfaces/IntegratedCircuit/VariableMenu.jsx +++ b/tgui/packages/tgui/interfaces/IntegratedCircuit/VariableMenu.jsx @@ -1,5 +1,4 @@ import { shallowDiffers } from 'common/react'; -import { multiline } from 'common/string'; import { Component } from 'react'; import { @@ -97,7 +96,7 @@ export class VariableMenu extends Component { onMouseDown={(e) => handleMouseDownSetter(e, val)} color={val.color} disabled={!!val.is_list} - tooltip={multiline` + tooltip={` Drag me onto the circuit's grid to make a setter for this variable`} icon="pen" @@ -106,7 +105,7 @@ export class VariableMenu extends Component { - - - ))} + + + + + )) + : 'Unavailable'} ); diff --git a/tgui/packages/tgui/interfaces/MedicalKiosk.jsx b/tgui/packages/tgui/interfaces/MedicalKiosk.jsx index 98d71c0433148..9ca231dd64534 100644 --- a/tgui/packages/tgui/interfaces/MedicalKiosk.jsx +++ b/tgui/packages/tgui/interfaces/MedicalKiosk.jsx @@ -1,5 +1,3 @@ -import { multiline } from 'common/string'; - import { useBackend, useSharedState } from '../backend'; import { AnimatedNumber, @@ -29,7 +27,7 @@ export const MedicalKiosk = (props) => { index={1} icon="procedures" name="General Health Scan" - description={multiline` + description={` Reads back exact values of your general health scan. `} /> @@ -37,7 +35,7 @@ export const MedicalKiosk = (props) => { index={2} icon="heartbeat" name="Symptom Based Checkup" - description={multiline` + description={` Provides information based on various non-obvious symptoms, like blood levels or disease status. `} @@ -46,7 +44,7 @@ export const MedicalKiosk = (props) => { index={3} icon="radiation-alt" name="Neurological/Radiological Scan" - description={multiline` + description={` Provides information about brain trauma and radiation. `} /> @@ -54,7 +52,7 @@ export const MedicalKiosk = (props) => { index={4} icon="mortar-pestle" name="Chemical and Psychoactive Scan" - description={multiline` + description={` Provides a list of consumed chemicals, as well as potential side effects. `} @@ -124,7 +122,7 @@ const MedicalKioskInstructions = (props) => { + ) + } + > + + + + + ); +}; + +const CellList = (props) => { + const { cell_lines } = props; + const fallback = ( + + ); + if (!cell_lines.length) { + return No micro-organisms found; + } + + return cell_lines.map((cell_line) => { + return cell_line.type !== 'virus' ? ( + + + + + +
    + } + > + + Consume {cell_line.consumption_rate} units of every nutrient per + second to grow by {cell_line.growth_rate}%. + + {cell_line.suspectibility > 0 && ( + + Reduced by {cell_line.suspectibility}% when infected with + viruses. + + )} + + + + {Object.keys(cell_line.requireds).map((reagent) => ( + + ))} + + + + {Object.keys(cell_line.supplementaries).map((reagent) => ( + + ))} + + + + {Object.keys(cell_line.suppressives).map((reagent) => ( + + ))} + + +
    +
    +
    + ) : ( + + + + + +
    + + Reduces growth of other cell lines when not suppressed by + Spaceacillin. + +
    +
    +
    + ); + }); +}; + +const GroupTitle = (props) => { + const { title } = props; + return ( + + + + + + {title} + + + + + + ) as any; +}; diff --git a/tgui/packages/tgui/interfaces/NtosCard.tsx b/tgui/packages/tgui/interfaces/NtosCard.tsx index 5997aa0e91c12..ffba4a647540c 100644 --- a/tgui/packages/tgui/interfaces/NtosCard.tsx +++ b/tgui/packages/tgui/interfaces/NtosCard.tsx @@ -69,6 +69,7 @@ export const NtosCardContent = (props) => { trimAccess, wildcardFlags, wildcardSlots, + hasTrim, } = data; return ( @@ -93,7 +94,11 @@ export const NtosCardContent = (props) => { /> } > - + {hasTrim ? ( + + ) : ( + 'Templates require a trim already applied to the card. Please use an ID Painter to apply a trim.' + )} )} diff --git a/tgui/packages/tgui/interfaces/NtosCursor.tsx b/tgui/packages/tgui/interfaces/NtosCursor.tsx new file mode 100644 index 0000000000000..6c62df26a1762 --- /dev/null +++ b/tgui/packages/tgui/interfaces/NtosCursor.tsx @@ -0,0 +1,63 @@ +import { useState } from 'react'; + +import { useBackend } from '../backend'; +import { Button, DmIcon, NoticeBox, Section, Stack } from '../components'; +import { NtosWindow } from '../layouts'; + +type Data = { + dmi: { + icon: string; + icon_state: string; + }; +}; + +export const NtosCursor = () => { + const { data } = useBackend(); + + const { dmi } = data; + + const [numClicked, incrementClicked] = useState(0); + + const NoticeBoxText = () => { + if (numClicked <= 2) { + return `There's only one option... It's the sword.`; + } else if (numClicked === 3) { + return `You clicked the sword. It's still the sword.`; + } else if (numClicked === 4) { + return `You clicked the sword again. It's still the sword.`; + } else if (numClicked === 5) { + return `Trying to click the sword again? It's still the sword.`; + } + return `You clicked the sword ${numClicked} times... It's still the sword.`; + }; + + return ( + + +
    + + + + + + {NoticeBoxText()} + + +
    +
    +
    + ); +}; diff --git a/tgui/packages/tgui/interfaces/NtosMessenger/ChatScreen.tsx b/tgui/packages/tgui/interfaces/NtosMessenger/ChatScreen.tsx index b168b05729786..bdbd24adb25ec 100644 --- a/tgui/packages/tgui/interfaces/NtosMessenger/ChatScreen.tsx +++ b/tgui/packages/tgui/interfaces/NtosMessenger/ChatScreen.tsx @@ -1,5 +1,4 @@ import { BooleanLike } from 'common/react'; -import { decodeHtmlEntities } from 'common/string'; import { Component, createRef, RefObject } from 'react'; import { useBackend } from '../../backend'; @@ -402,12 +401,14 @@ const ChatMessage = (props: ChatMessageProps) => { const { message, everyone, outgoing, photoPath, timestamp, onPreviewImage } = props; - const displayMessage = decodeHtmlEntities(message); + const messageHTML = { + __html: `${message}`, + }; return ( - {displayMessage} + { return ( - + diff --git a/tgui/packages/tgui/interfaces/NtosScipaper.jsx b/tgui/packages/tgui/interfaces/NtosScipaper.jsx index 2af2cd12f43f9..f6636e0fd6757 100644 --- a/tgui/packages/tgui/interfaces/NtosScipaper.jsx +++ b/tgui/packages/tgui/interfaces/NtosScipaper.jsx @@ -5,7 +5,6 @@ import { Button, Collapsible, Dropdown, - Icon, Input, LabeledList, NoticeBox, @@ -13,14 +12,13 @@ import { Stack, Table, Tabs, - Tooltip, } from '../components'; import { TableCell, TableRow } from '../components/Table'; import { NtosWindow } from '../layouts'; export const NtosScipaper = (props) => { return ( - + @@ -50,31 +48,132 @@ const PaperPublishing = (props) => { return ( <>
    - - + {fileList.length === 0 && ( + + Use data disk to download files from compressor or doppler array. + + )} + + + } + > + + + act('select_file', { + selected_uid: fileList[ordfile_name], + }) + } + /> + + + + } + > + + + act('select_experiment', { + selected_expath: expList[experiment_name], + }) + } + /> + + + + } + > + + String(number))} + selected={String(tier)} + onSelected={(new_tier) => + act('select_tier', { + selected_tier: Number(new_tier), + }) + } + /> + + + + } + > + + + act('select_partner', { + selected_partner: allowedPartners[new_partner], + }) + } + /> + + + act('et_alia')} + /> + } + > act('rewrite', { - title: value, + author: value, }) } /> - + act('rewrite', { - author: value, + title: value, }) } /> - { } /> - - - - - act('select_file', { - selected_uid: fileList[ordfile_name], - }) - } - /> - - - - - - - - - - - - - act('select_experiment', { - selected_expath: expList[experiment_name], - }) - } - /> - - - - - - - - - - - - String(number))} - selected={String(tier)} - onSelected={(new_tier) => - act('select_tier', { - selected_tier: Number(new_tier), - }) - } - /> - - - - - - - - - - - - - act('select_partner', { - selected_partner: allowedPartners[new_partner], - }) - } - /> - - - - - - - -
    - - - +
    ); @@ -366,7 +367,7 @@ export const NtosScipaperContent = (props) => { Please sync this application to a valid techweb to upload progress! )} - + @@ -385,7 +386,7 @@ export const NtosScipaperContent = (props) => { }) } > - {'View Previous Publications'} + {'Publications'} { }) } > - {'View Available Experiments'} + {'Experiments'} { }) } > - {'View Scientific Partners'} + {'Scientific Partners'} {currentTab === 1 && } diff --git a/tgui/packages/tgui/interfaces/NumberInputModal.tsx b/tgui/packages/tgui/interfaces/NumberInputModal.tsx index 938b24d0c6e07..c7c7b1c5831ca 100644 --- a/tgui/packages/tgui/interfaces/NumberInputModal.tsx +++ b/tgui/packages/tgui/interfaces/NumberInputModal.tsx @@ -1,4 +1,4 @@ -import { KEY } from 'common/keys'; +import { isEscape, KEY } from 'common/keys'; import { useState } from 'react'; import { useBackend } from '../backend'; @@ -44,7 +44,7 @@ export const NumberInputModal = (props) => { if (event.key === KEY.Enter) { act('submit', { entry: input }); } - if (event.key === KEY.Escape) { + if (isEscape(event.key)) { act('cancel'); } }} diff --git a/tgui/packages/tgui/interfaces/Orbit/JobIcon.tsx b/tgui/packages/tgui/interfaces/Orbit/JobIcon.tsx new file mode 100644 index 0000000000000..f102927e9bcba --- /dev/null +++ b/tgui/packages/tgui/interfaces/Orbit/JobIcon.tsx @@ -0,0 +1,57 @@ +import { DmIcon, Icon } from '../../components'; +import { JOB2ICON } from '../common/JobToIcon'; +import { Antagonist, Observable } from './types'; + +type Props = { + item: Observable | Antagonist; +}; + +type IconSettings = { + dmi: string; + transform: string; +}; + +const normalIcon: IconSettings = { + dmi: 'icons/mob/huds/hud.dmi', + transform: 'scale(2.3) translateX(9px) translateY(1px)', +}; + +const antagIcon: IconSettings = { + dmi: 'icons/mob/huds/antag_hud.dmi', + transform: 'scale(1.8) translateX(-16px) translateY(7px)', +}; + +export function JobIcon(props: Props) { + const { item } = props; + + let iconSettings: IconSettings; + if ('antag' in item) { + iconSettings = antagIcon; + } else { + iconSettings = normalIcon; + } + + // We don't need to cast here but typescript isn't smart enough to know that + const { icon = '', job = '' } = item; + + return ( +
    + {icon === 'borg' ? ( + + ) : ( +
    + +
    + )} +
    + ); +} diff --git a/tgui/packages/tgui/interfaces/Orbit/OrbitBlade.tsx b/tgui/packages/tgui/interfaces/Orbit/OrbitBlade.tsx new file mode 100644 index 0000000000000..07c5a1c08f6c7 --- /dev/null +++ b/tgui/packages/tgui/interfaces/Orbit/OrbitBlade.tsx @@ -0,0 +1,188 @@ +import { capitalizeFirst, toTitleCase } from 'common/string'; +import { useContext } from 'react'; + +import { useBackend } from '../../backend'; +import { + Button, + Icon, + ProgressBar, + Section, + Stack, + Tooltip, +} from '../../components'; +import { OrbitContext } from '.'; +import { HEALTH, VIEWMODE } from './constants'; +import { getDepartmentByJob, getDisplayName } from './helpers'; +import { JobIcon } from './JobIcon'; +import { OrbitData } from './types'; + +/** Slide open menu with more info about the current observable */ +export function OrbitBlade(props) { + const { data } = useBackend(); + const { orbiting } = data; + + const { setBladeOpen } = useContext(OrbitContext); + + return ( + + +
    setBladeOpen(false)} + /> + } + color="label" + title="Orbit Settings" + > + Keep in mind: Orbit does not update automatically. You will need to + click the "Refresh" button to see the latest data. +
    +
    + + + + {!!orbiting && ( + + + + )} +
    + ); +} + +function ViewModeSelector(props) { + const { viewMode, setViewMode } = useContext(OrbitContext); + + return ( +
    + + + Change the color and sorting scheme of observable items. + + + {Object.entries(VIEWMODE).map(([key, value]) => ( + + ))} + +
    + ); +} + +function OrbitInfo(props) { + const { data } = useBackend(); + + const { orbiting } = data; + if (!orbiting) return; + + const { name, full_name, health, job } = orbiting; + + let department; + if ('job' in orbiting && !!job) { + department = getDepartmentByJob(job); + } + + let showAFK; + if ('client' in orbiting && !orbiting.client) { + showAFK = true; + } + + return ( +
    + + + {toTitleCase(getDisplayName(full_name, name))} + {showAFK && ( + + + + )} + + + {!!job && ( + + + + + + + {job} + + {!!department && ( + + {capitalizeFirst(department)} + + )} + + + )} + {health !== undefined && ( + + + + )} + + + +
    + ); +} + +function HealthDisplay(props: { health: number }) { + const { health } = props; + + let icon = 'heart'; + let howDead; + switch (true) { + case health <= HEALTH.Ruined: + howDead = `Very Dead: ${health}`; + icon = 'skull'; + break; + case health <= HEALTH.Dead: + howDead = `Dead: ${health}`; + icon = 'heart-broken'; + break; + case health <= HEALTH.Crit: + howDead = `Health critical: ${health}`; + icon = 'tired'; + break; + case health <= HEALTH.Bad: + howDead = `Bad: ${health}`; + icon = 'heartbeat'; + break; + } + + return ( + + + + + + {howDead || ( + + )} + + + ); +} diff --git a/tgui/packages/tgui/interfaces/Orbit/OrbitCollapsible.tsx b/tgui/packages/tgui/interfaces/Orbit/OrbitCollapsible.tsx new file mode 100644 index 0000000000000..fa5e78bd1f725 --- /dev/null +++ b/tgui/packages/tgui/interfaces/Orbit/OrbitCollapsible.tsx @@ -0,0 +1,80 @@ +import { useContext } from 'react'; + +import { Collapsible, Flex, Tooltip } from '../../components'; +import { OrbitContext } from '.'; +import { VIEWMODE } from './constants'; +import { + isJobOrNameMatch, + sortByDepartment, + sortByDisplayName, +} from './helpers'; +import { OrbitItem } from './OrbitItem'; +import { OrbitTooltip } from './OrbitTooltip'; +import { Observable } from './types'; + +type Props = { + color?: string; + section: Observable[]; + title: string; +}; + +/** + * Displays a collapsible with a map of observable items. + * Filters the results if there is a provided search query. + */ +export function OrbitCollapsible(props: Props) { + const { color, section = [], title } = props; + + const { autoObserve, searchQuery, viewMode } = useContext(OrbitContext); + + const filteredSection = section.filter((observable) => + isJobOrNameMatch(observable, searchQuery), + ); + + if (viewMode === VIEWMODE.Department) { + filteredSection.sort(sortByDepartment); + } else { + filteredSection.sort(sortByDisplayName); + } + + if (!filteredSection.length) { + return; + } + + return ( + + + {filteredSection.map((item) => { + const content = ( + + ); + + if (!item.health && !item.extra) { + return content; + } + + return ( + } + key={item.ref} + position="bottom-start" + > + {content} + + ); + })} + + + ); +} diff --git a/tgui/packages/tgui/interfaces/Orbit/OrbitContent.tsx b/tgui/packages/tgui/interfaces/Orbit/OrbitContent.tsx new file mode 100644 index 0000000000000..24aab8eba74bc --- /dev/null +++ b/tgui/packages/tgui/interfaces/Orbit/OrbitContent.tsx @@ -0,0 +1,99 @@ +import { toTitleCase } from 'common/string'; + +import { useBackend } from '../../backend'; +import { NoticeBox, Section, Stack, Table, Tooltip } from '../../components'; +import { ANTAG2COLOR } from './constants'; +import { getAntagCategories } from './helpers'; +import { OrbitCollapsible } from './OrbitCollapsible'; +import { AntagGroup, Observable, OrbitData } from './types'; + +type ContentSection = { + content: Observable[]; + title: string; + color?: string; +}; + +/** + * The primary content display for points of interest. + * Renders a scrollable section replete with collapsibles for each + * observable group. + */ +export function OrbitContent(props) { + const { act, data } = useBackend(); + const { antagonists = [], critical = [] } = data; + + let antagGroups: AntagGroup[] = []; + if (antagonists.length) { + antagGroups = getAntagCategories(antagonists); + } + + const sections: readonly ContentSection[] = [ + { + color: 'purple', + content: data.deadchat_controlled, + title: 'Deadchat Controlled', + }, + { + color: 'blue', + content: data.alive, + title: 'Alive', + }, + { + content: data.dead, + title: 'Dead', + }, + { + content: data.ghosts, + title: 'Ghosts', + }, + { + content: data.misc, + title: 'Misc', + }, + { + content: data.npcs, + title: 'NPCs', + }, + ]; + + return ( +
    + + {critical.map((crit) => ( + + act('orbit', { ref: crit.ref })} + > + + + {toTitleCase(crit.full_name)} + {crit.extra} + +
    +
    +
    + ))} + + {antagGroups.map(([title, members]) => ( + + ))} + + {sections.map((section) => ( + + ))} +
    +
    + ); +} diff --git a/tgui/packages/tgui/interfaces/Orbit/OrbitItem.tsx b/tgui/packages/tgui/interfaces/Orbit/OrbitItem.tsx new file mode 100644 index 0000000000000..992904988ece4 --- /dev/null +++ b/tgui/packages/tgui/interfaces/Orbit/OrbitItem.tsx @@ -0,0 +1,57 @@ +import { capitalizeFirst } from 'common/string'; + +import { useBackend } from '../../backend'; +import { Button, Flex, Icon, Stack } from '../../components'; +import { getDisplayColor, getDisplayName } from './helpers'; +import { JobIcon } from './JobIcon'; +import { Antagonist, Observable, OrbitData, ViewMode } from './types'; + +type Props = { + item: Observable | Antagonist; + autoObserve: boolean; + viewMode: ViewMode; + color: string | undefined; +}; + +/** Each button on the observable section */ +export function OrbitItem(props: Props) { + const { item, autoObserve, viewMode, color } = props; + const { full_name, icon, job, name, orbiters, ref } = item; + + const { act, data } = useBackend(); + const { orbiting } = data; + + const selected = ref === orbiting?.ref; + const validIcon = !!job && !!icon && icon !== 'hudunknown'; + + return ( + act('orbit', { auto_observe: autoObserve, ref })} + style={{ + display: 'flex', + }} + > + {validIcon && } + + + + ); +} diff --git a/tgui/packages/tgui/interfaces/Orbit/OrbitSearchBar.tsx b/tgui/packages/tgui/interfaces/Orbit/OrbitSearchBar.tsx new file mode 100644 index 0000000000000..c83512c39c731 --- /dev/null +++ b/tgui/packages/tgui/interfaces/Orbit/OrbitSearchBar.tsx @@ -0,0 +1,119 @@ +import { useContext } from 'react'; + +import { useBackend } from '../../backend'; +import { Button, Icon, Input, Section, Stack } from '../../components'; +import { OrbitContext } from '.'; +import { VIEWMODE } from './constants'; +import { isJobOrNameMatch, sortByOrbiters } from './helpers'; +import { OrbitData } from './types'; + +/** Search bar for the orbit ui. Has a few buttons to switch between view modes and auto-observe */ +export function OrbitSearchBar(props) { + const { + autoObserve, + bladeOpen, + searchQuery, + viewMode, + setAutoObserve, + setBladeOpen, + setSearchQuery, + setViewMode, + } = useContext(OrbitContext); + + const { act, data } = useBackend(); + + /** Gets a list of Observables, then filters the most relevant to orbit */ + function orbitMostRelevant() { + const mostRelevant = [ + data.alive, + data.antagonists, + data.critical, + data.deadchat_controlled, + data.dead, + data.ghosts, + data.misc, + data.npcs, + ] + .flat() + .filter((observable) => isJobOrNameMatch(observable, searchQuery)) + .sort(sortByOrbiters)[0]; + + if (mostRelevant !== undefined) { + act('orbit', { + ref: mostRelevant.ref, + auto_observe: autoObserve, + }); + } + } + + /** Iterates through the view modes and switches to the next one */ + function swapViewMode() { + const thisIndex = Object.values(VIEWMODE).indexOf(viewMode); + const nextIndex = (thisIndex + 1) % Object.values(VIEWMODE).length; + + setViewMode(Object.values(VIEWMODE)[nextIndex]); + } + + const viewModeTitle = Object.entries(VIEWMODE).find( + ([_key, value]) => value === viewMode, + )?.[0]; + + return ( +
    + + + + + + setSearchQuery(value)} + placeholder="Search..." + value={searchQuery} + /> + + + +
    + ); +} diff --git a/tgui/packages/tgui/interfaces/Orbit/OrbitTooltip.tsx b/tgui/packages/tgui/interfaces/Orbit/OrbitTooltip.tsx new file mode 100644 index 0000000000000..6c06838be4f16 --- /dev/null +++ b/tgui/packages/tgui/interfaces/Orbit/OrbitTooltip.tsx @@ -0,0 +1,54 @@ +import { LabeledList, NoticeBox } from '../../components'; +import { Antagonist, Observable } from './types'; + +type Props = { + item: Observable | Antagonist; +}; + +/** Displays some info on the mob as a tooltip. */ +export function OrbitTooltip(props: Props) { + const { item } = props; + const { extra, full_name, health, job } = item; + + let antag; + if ('antag' in item) { + antag = item.antag; + } + + const extraInfo = extra?.split(':'); + const displayHealth = !!health && health >= 0 ? `${health}%` : 'Critical'; + const showAFK = 'client' in item && !item.client; + + return ( + <> + + Last Known Data + + + {extraInfo ? ( + + {extraInfo[1]} + + ) : ( + <> + {!!full_name && ( + {full_name} + )} + {!!job && !antag && ( + {job} + )} + {!!antag && ( + {antag} + )} + {!!health && ( + + {displayHealth} + + )} + + )} + {showAFK && Away} + + + ); +} diff --git a/tgui/packages/tgui/interfaces/Orbit/constants.ts b/tgui/packages/tgui/interfaces/Orbit/constants.ts index 2ef6b605eb659..d683561f3825b 100644 --- a/tgui/packages/tgui/interfaces/Orbit/constants.ts +++ b/tgui/packages/tgui/interfaces/Orbit/constants.ts @@ -13,6 +13,60 @@ export const ANTAG2COLOR = { 'Invasive Overgrowth': 'green', } as const; +type Department = { + color: string; + trims: string[]; +}; + +export const DEPARTMENT2COLOR: Record = { + cargo: { + color: 'brown', + trims: ['Bitrunner', 'Cargo Technician', 'Shaft Miner', 'Quartermaster'], + }, + command: { + color: 'blue', + trims: ['Captain', 'Head of Personnel'], + }, + engineering: { + color: 'orange', + trims: ['Atmospheric Technician', 'Chief Engineer', 'Station Engineer'], + }, + medical: { + color: 'teal', + trims: [ + 'Chemist', + 'Chief Medical Officer', + 'Coroner', + 'Medical Doctor', + 'Paramedic', + ], + }, + science: { + color: 'pink', + trims: ['Geneticist', 'Research Director', 'Roboticist', 'Scientist'], + }, + security: { + color: 'red', + trims: ['Detective', 'Head of Security', 'Security Officer', 'Warden'], + }, + service: { + color: 'green', + trims: [ + 'Bartender', + 'Botanist', + 'Chaplain', + 'Chef', + 'Clown', + 'Cook', + 'Curator', + 'Janitor', + 'Lawyer', + 'Mime', + 'Psychologist', + ], + }, +}; + export const THREAT = { Low: 1, Medium: 5, @@ -22,4 +76,14 @@ export const THREAT = { export const HEALTH = { Good: 69, // nice Average: 19, + Bad: 0, + Crit: -30, + Dead: -100, + Ruined: -200, +} as const; + +export const VIEWMODE = { + Health: 'heart', + Orbiters: 'ghost', + Department: 'id-badge', } as const; diff --git a/tgui/packages/tgui/interfaces/Orbit/helpers.ts b/tgui/packages/tgui/interfaces/Orbit/helpers.ts index c0668dd02d8df..9263ea599615a 100644 --- a/tgui/packages/tgui/interfaces/Orbit/helpers.ts +++ b/tgui/packages/tgui/interfaces/Orbit/helpers.ts @@ -1,28 +1,34 @@ -import { filter, sortBy } from 'common/collections'; - -import { HEALTH, THREAT } from './constants'; -import type { AntagGroup, Antagonist, Observable } from './types'; +import { DEPARTMENT2COLOR, HEALTH, THREAT, VIEWMODE } from './constants'; +import { AntagGroup, Antagonist, Observable, ViewMode } from './types'; /** Return a map of strings with each antag in its antag_category */ -export const getAntagCategories = (antagonists: Antagonist[]) => { - const categories: Record = {}; +export function getAntagCategories(antagonists: Antagonist[]): AntagGroup[] { + const categories = new Map(); - antagonists.map((player) => { + for (const player of antagonists) { const { antag_group } = player; - if (!categories[antag_group]) { - categories[antag_group] = []; + if (!categories.has(antag_group)) { + categories.set(antag_group, []); } + categories.get(antag_group)!.push(player); + } - categories[antag_group].push(player); + const sorted = Array.from(categories.entries()).sort((a, b) => { + const lowerA = a[0].toLowerCase(); + const lowerB = b[0].toLowerCase(); + + if (lowerA < lowerB) return -1; + if (lowerA > lowerB) return 1; + return 0; }); - return sortBy(Object.entries(categories), ([key]) => key); -}; + return sorted; +} /** Returns a disguised name in case the person is wearing someone else's ID */ -export const getDisplayName = (full_name: string, name?: string) => { - if (!name) { +export function getDisplayName(full_name: string, nickname?: string): string { + if (!nickname) { return full_name; } @@ -31,34 +37,36 @@ export const getDisplayName = (full_name: string, name?: string) => { full_name.match(/\(as /) || full_name.match(/^Unknown/) ) { - return name; + return nickname; } // return only the name before the first ' [' or ' (' return `"${full_name.split(/ \[| \(/)[0]}"`; -}; +} -export const getMostRelevant = ( - searchQuery: string, - observables: Observable[][], -): Observable => { - const queriedObservables = - // Sorts descending by orbiters - sortBy( - // Filters out anything that doesn't match search - filter( - observables - // Makes a single Observables list for an easy search - .flat(), - (observable) => isJobOrNameMatch(observable, searchQuery), - ), - (observable) => -(observable.orbiters || 0), - ); - return queriedObservables[0]; -}; +/** Returns the department the player is in */ +export function getDepartmentByJob(job: string): string | undefined { + const withoutParenthesis = job.replace(/ \(.*\)/, ''); + + for (const department in DEPARTMENT2COLOR) { + if (DEPARTMENT2COLOR[department].trims.includes(withoutParenthesis)) { + return department; + } + } +} + +/** Gets department color for a job */ +function getDepartmentColor(job: string | undefined): string { + if (!job) return 'grey'; + + const department = getDepartmentByJob(job); + if (!department) return 'grey'; + + return DEPARTMENT2COLOR[department].color; +} /** Returns the display color for certain health percentages */ -const getHealthColor = (health: number) => { +function getHealthColor(health: number): string { switch (true) { case health > HEALTH.Good: return 'good'; @@ -67,10 +75,10 @@ const getHealthColor = (health: number) => { default: return 'bad'; } -}; +} /** Returns the display color based on orbiter numbers */ -const getThreatColor = (orbiters = 0) => { +function getThreatColor(orbiters = 0): string { switch (true) { case orbiters > THREAT.High: return 'violet'; @@ -81,32 +89,43 @@ const getThreatColor = (orbiters = 0) => { default: return 'good'; } -}; +} /** Displays color for buttons based on the health or orbiter count. */ -export const getDisplayColor = ( +export function getDisplayColor( item: Observable, - heatMap: boolean, - color?: string, -) => { - const { health, orbiters } = item; + mode: ViewMode, + override?: string, +): string { + const { job, health, orbiters } = item; + + // Things like blob camera, etc if (typeof health !== 'number') { - return color ? 'good' : 'grey'; + return override ? 'good' : 'grey'; } - if (heatMap) { - return getThreatColor(orbiters); + + // Players that are AFK + if ('client' in item && !item.client) { + return 'grey'; } - return getHealthColor(health); -}; + + switch (mode) { + case VIEWMODE.Orbiters: + return getThreatColor(orbiters); + case VIEWMODE.Department: + return getDepartmentColor(job); + default: + return getHealthColor(health); + } +} /** Checks if a full name or job title matches the search. */ -export const isJobOrNameMatch = ( +export function isJobOrNameMatch( observable: Observable, searchQuery: string, -) => { - if (!searchQuery) { - return true; - } +): boolean { + if (!searchQuery) return true; + const { full_name, job } = observable; return ( @@ -114,4 +133,46 @@ export const isJobOrNameMatch = ( job?.toLowerCase().includes(searchQuery?.toLowerCase()) || false ); -}; +} + +/** Sorts by department */ +export function sortByDepartment(poiA: Observable, poiB: Observable): number { + const departmentA = (poiA.job && getDepartmentByJob(poiA.job)) || 'unknown'; + const departmentB = (poiB.job && getDepartmentByJob(poiB.job)) || 'unknown'; + + if (departmentA < departmentB) return -1; + if (departmentA > departmentB) return 1; + return 0; +} + +/** Sorts based on real name */ +export function sortByDisplayName(poiA: Observable, poiB: Observable): number { + const nameA = getDisplayName(poiA.full_name, poiA.name) + .replace(/^"/, '') + .toLowerCase(); + const nameB = getDisplayName(poiB.full_name, poiB.name) + .replace(/^"/, '') + .toLowerCase(); + + if (nameA < nameB) { + return -1; + } + if (nameA > nameB) { + return 1; + } + return 0; +} + +/** Sorts by most orbiters */ +export function sortByOrbiters(poiA: Observable, poiB: Observable): number { + const orbitersA = poiA.orbiters || 0; + const orbitersB = poiB.orbiters || 0; + + if (orbitersA < orbitersB) { + return -1; + } + if (orbitersA > orbitersB) { + return 1; + } + return 0; +} diff --git a/tgui/packages/tgui/interfaces/Orbit/index.tsx b/tgui/packages/tgui/interfaces/Orbit/index.tsx index 0103fe8750fb8..d537548107cba 100644 --- a/tgui/packages/tgui/interfaces/Orbit/index.tsx +++ b/tgui/packages/tgui/interfaces/Orbit/index.tsx @@ -1,306 +1,68 @@ -import { filter, sortBy } from 'common/collections'; -import { capitalizeFirst, multiline } from 'common/string'; -import { useBackend, useLocalState } from 'tgui/backend'; -import { - Button, - Collapsible, - Icon, - Input, - LabeledList, - NoticeBox, - Section, - Stack, -} from 'tgui/components'; +import { createContext, Dispatch, SetStateAction, useState } from 'react'; +import { Stack } from 'tgui/components'; import { Window } from 'tgui/layouts'; -import { JOB2ICON } from '../common/JobToIcon'; -import { ANTAG2COLOR } from './constants'; -import { - getAntagCategories, - getDisplayColor, - getDisplayName, - getMostRelevant, - isJobOrNameMatch, -} from './helpers'; -import type { AntagGroup, Antagonist, Observable, OrbitData } from './types'; +import { VIEWMODE } from './constants'; +import { OrbitBlade } from './OrbitBlade'; +import { OrbitContent } from './OrbitContent'; +import { OrbitSearchBar } from './OrbitSearchBar'; +import { ViewMode } from './types'; -export const Orbit = (props) => { - return ( - - - - - - - -
    - -
    -
    -
    -
    -
    - ); -}; +export function Orbit(props) { + const [autoObserve, setAutoObserve] = useState(false); + const [bladeOpen, setBladeOpen] = useState(false); + const [searchQuery, setSearchQuery] = useState(''); + const [viewMode, setViewMode] = useState(VIEWMODE.Health); -/** Controls filtering out the list of observables via search */ -const ObservableSearch = (props) => { - const { act, data } = useBackend(); - const { - alive = [], - antagonists = [], - deadchat_controlled = [], - dead = [], - ghosts = [], - misc = [], - npcs = [], - } = data; - - const [autoObserve, setAutoObserve] = useLocalState( - 'autoObserve', - false, - ); - const [heatMap, setHeatMap] = useLocalState('heatMap', false); - const [searchQuery, setSearchQuery] = useLocalState( - 'searchQuery', - '', - ); - - /** Gets a list of Observables, then filters the most relevant to orbit */ - const orbitMostRelevant = (searchQuery: string) => { - const mostRelevant = getMostRelevant(searchQuery, [ - alive, - antagonists, - deadchat_controlled, - dead, - ghosts, - misc, - npcs, - ]); - - if (mostRelevant !== undefined) { - act('orbit', { - ref: mostRelevant.ref, - auto_observe: autoObserve, - }); - } - }; + const dynamicWidth = bladeOpen ? 650 : 400; return ( -
    - - - - - - orbitMostRelevant(value)} - onInput={(event, value) => setSearchQuery(value)} - placeholder="Search..." - value={searchQuery} - /> - - - -
    - ); -}; - -/** - * The primary content display for points of interest. - * Renders a scrollable section replete with subsections for each - * observable group. - */ -const ObservableContent = (props) => { - const { data } = useBackend(); - const { - alive = [], - antagonists = [], - deadchat_controlled = [], - dead = [], - ghosts = [], - misc = [], - npcs = [], - } = data; - - let collatedAntagonists: AntagGroup[] = []; - - if (antagonists.length) { - collatedAntagonists = getAntagCategories(antagonists); - } - - return ( - - {collatedAntagonists?.map(([title, antagonists]) => { - return ( - - ); - })} - - - - - - - - ); -}; - -/** - * Displays a collapsible with a map of observable items. - * Filters the results if there is a provided search query. - */ -const ObservableSection = (props: { - color?: string; - section: Observable[]; - title: string; -}) => { - const { color, section = [], title } = props; - - if (!section.length) { - return null; - } - - const [searchQuery] = useLocalState('searchQuery', ''); - - const filteredSection = sortBy( - filter(section, (observable) => isJobOrNameMatch(observable, searchQuery)), - (observable) => - getDisplayName(observable.full_name, observable.name) - .replace(/^"/, '') - .toLowerCase(), - ); - - if (!filteredSection.length) { - return null; - } - - return ( - - - {filteredSection.map((poi, index) => { - return ; - })} - - - ); -}; - -/** Renders an observable button that has tooltip info for living Observables*/ -const ObservableItem = (props: { color?: string; item: Observable }) => { - const { act } = useBackend(); - const { color, item } = props; - const { extra, full_name, job, health, name, orbiters, ref } = item; - - const [autoObserve] = useLocalState('autoObserve', false); - const [heatMap] = useLocalState('heatMap', false); - - return ( - - ); -}; - -/** Displays some info on the mob as a tooltip. */ -const ObservableTooltip = (props: { item: Observable | Antagonist }) => { - const { item } = props; - const { extra, full_name, health, job } = item; - let antag; - if ('antag' in item) { - antag = item.antag; - } - - const extraInfo = extra?.split(':'); - const displayHealth = !!health && health >= 0 ? `${health}%` : 'Critical'; - - return ( - <> - - Last Known Data - - - {extraInfo ? ( - - {extraInfo[1]} - - ) : ( - <> - {!!full_name && ( - {full_name} - )} - {!!job && !antag && ( - {job} - )} - {!!antag && ( - {antag} + + + + + + + + + + + + + + {bladeOpen && ( + + + )} - {!!health && ( - - {displayHealth} - - )} - - )} - - +
    + + + ); +} + +type Context = { + autoObserve: boolean; + setAutoObserve: Dispatch>; + bladeOpen: boolean; + setBladeOpen: Dispatch>; + searchQuery: string; + setSearchQuery: Dispatch>; + viewMode: ViewMode; + setViewMode: Dispatch>; }; + +export const OrbitContext = createContext({} as Context); diff --git a/tgui/packages/tgui/interfaces/Orbit/types.ts b/tgui/packages/tgui/interfaces/Orbit/types.ts index dfbcf4afa6185..ffeea321a3c81 100644 --- a/tgui/packages/tgui/interfaces/Orbit/types.ts +++ b/tgui/packages/tgui/interfaces/Orbit/types.ts @@ -1,3 +1,7 @@ +import { BooleanLike } from 'common/react'; + +import { VIEWMODE } from './constants'; + export type Antagonist = Observable & { antag: string; antag_group: string }; export type AntagGroup = [string, Antagonist[]]; @@ -5,19 +9,33 @@ export type AntagGroup = [string, Antagonist[]]; export type OrbitData = { alive: Observable[]; antagonists: Antagonist[]; + critical: Critical[]; dead: Observable[]; deadchat_controlled: Observable[]; ghosts: Observable[]; misc: Observable[]; npcs: Observable[]; + orbiting: Observable | null; }; export type Observable = { - extra?: string; full_name: string; - health?: number; - job?: string; - name?: string; - orbiters?: number; + ref: string; + // Optionals +} & Partial<{ + client: BooleanLike; + extra: string; + health: number; + icon: string; + job: string; + name: string; + orbiters: number; +}>; + +type Critical = { + extra: string; + full_name: string; ref: string; }; + +export type ViewMode = (typeof VIEWMODE)[keyof typeof VIEWMODE]; diff --git a/tgui/packages/tgui/interfaces/PaiInterface/Available.tsx b/tgui/packages/tgui/interfaces/PaiInterface/Available.tsx index fb0b5930c12ef..361afdd0eb74c 100644 --- a/tgui/packages/tgui/interfaces/PaiInterface/Available.tsx +++ b/tgui/packages/tgui/interfaces/PaiInterface/Available.tsx @@ -15,7 +15,15 @@ import { PaiData } from './types'; /** * Renders a list of available software and the ram with which to download it */ -export const AvailableDisplay = () => { +export function AvailableDisplay(props) { + const { data } = useBackend(); + const { available } = data; + + const entries = Object.entries(available); + if (entries.length === 0) { + return null; + } + return (
    } @@ -23,13 +31,17 @@ export const AvailableDisplay = () => { scrollable title="Available Software" > - + + {entries?.map(([name, cost]) => { + return ; + })} +
    ); -}; +} /** Displays the remaining RAM left as a progressbar. */ -const MemoryDisplay = (props) => { +function MemoryDisplay(props) { const { data } = useBackend(); const { ram } = data; @@ -50,70 +62,55 @@ const MemoryDisplay = (props) => { bad: [0, 33], }} value={ram} - /> + width={5} + > + {ram} + ); -}; +} -/** A list of available software. - * creates table rows for each, like a vendor. - */ -const SoftwareList = (props) => { - const { data } = useBackend(); - const { available } = data; - if (!available) { - return null; - } - const entries = Object.entries(available); - if (entries.length === 0) { - return null; - } - - return ( - - {entries?.map(([name, cost], index) => { - return ; - })} -
    - ); +type ListItemProps = { + cost: number; + name: string; }; /** A row for an individual software listing. */ -const ListItem = (props) => { +function ListItem(props: ListItemProps) { const { act, data } = useBackend(); const { installed, ram } = data; const { cost, name } = props; + const purchased = installed.includes(name); + const tooExpensive = ram < cost; return ( - - - {name} - - - - {!purchased && cost}{' '} - = cost ? 'purple' : 'bad'} - name={purchased ? 'check' : 'microchip'} + + + + {name} + + + + {!purchased && cost}{' '} + = cost ? 'purple' : 'bad'} + name={purchased ? 'check' : 'microchip'} + /> + + + + - - + + + ); -}; +} diff --git a/tgui/packages/tgui/interfaces/PaiInterface/Directives.tsx b/tgui/packages/tgui/interfaces/PaiInterface/Directives.tsx index 02da38a319eb3..33f664be956d6 100644 --- a/tgui/packages/tgui/interfaces/PaiInterface/Directives.tsx +++ b/tgui/packages/tgui/interfaces/PaiInterface/Directives.tsx @@ -6,7 +6,7 @@ import { DIRECTIVE_COMPREHENSION, DIRECTIVE_ORDER } from './constants'; import { PaiData } from './types'; /** Shows the hardcoded PAI info along with any supplied orders. */ -export const DirectiveDisplay = (props) => { +export function DirectiveDisplay(props) { const { data } = useBackend(); const { directives = [], master_name } = data; const displayedLaw = directives?.length @@ -43,4 +43,4 @@ export const DirectiveDisplay = (props) => {
    ); -}; +} diff --git a/tgui/packages/tgui/interfaces/PaiInterface/Installed.tsx b/tgui/packages/tgui/interfaces/PaiInterface/Installed.tsx index 4b7c65e8d3449..edabfc620bb27 100644 --- a/tgui/packages/tgui/interfaces/PaiInterface/Installed.tsx +++ b/tgui/packages/tgui/interfaces/PaiInterface/Installed.tsx @@ -1,4 +1,5 @@ -import { useBackend, useLocalState } from 'tgui/backend'; +import { useState } from 'react'; +import { useBackend } from 'tgui/backend'; import { Button, NoticeBox, Section, Stack } from 'tgui/components'; import { DOOR_JACK, HOST_SCAN, PHOTO_MODE, SOFTWARE_DESC } from './constants'; @@ -9,69 +10,63 @@ import { PaiData } from './types'; * another section that displays the selected installed * software info. */ -export const InstalledDisplay = (props) => { +export function InstalledDisplay(props) { + const { data } = useBackend(); + const { installed = [] } = data; + + const [currentSelection, setCurrentSelection] = useState(''); + + const title = !currentSelection ? 'Select a Program' : currentSelection; + return ( - +
    + {currentSelection && ( + + {SOFTWARE_DESC[currentSelection]} + + + + + )} +
    - +
    + {!installed.length ? ( + Nothing installed! + ) : ( + installed.map((software, index) => { + return ( + + ); + }) + )} +
    ); -}; - -/** Iterates over installed software to render buttons. */ -const InstalledSoftware = (props) => { - const { data } = useBackend(); - const { installed = [] } = data; - const [currentSelection, setCurrentSelection] = useLocalState('software', ''); - - return ( -
    - {!installed.length ? ( - Nothing installed! - ) : ( - installed.map((software, index) => { - return ( - - ); - }) - )} -
    - ); -}; - -/** Software info for buttons clicked. */ -const InstalledInfo = (props) => { - const [currentSelection] = useLocalState('software', ''); - const title = !currentSelection ? 'Select a Program' : currentSelection; +} - return ( -
    - {currentSelection && ( - - {SOFTWARE_DESC[currentSelection]} - - - - - )} -
    - ); +type SoftwareButtonsProps = { + currentSelection: string; }; /** * Once a software is selected, generates custom buttons or a default * power toggle. */ -const SoftwareButtons = (props) => { +function SoftwareButtons(props: SoftwareButtonsProps) { + const { currentSelection } = props; + const { act, data } = useBackend(); const { door_jack, languages, master_name } = data; - const [currentSelection] = useLocalState('software', ''); switch (currentSelection) { case 'Door Jack': @@ -170,4 +165,4 @@ const SoftwareButtons = (props) => { ); } -}; +} diff --git a/tgui/packages/tgui/interfaces/PaiInterface/System.tsx b/tgui/packages/tgui/interfaces/PaiInterface/System.tsx index fce6cb7e09555..2281411dc1f9b 100644 --- a/tgui/packages/tgui/interfaces/PaiInterface/System.tsx +++ b/tgui/packages/tgui/interfaces/PaiInterface/System.tsx @@ -4,7 +4,7 @@ import { Box, Button, LabeledList, Section, Stack } from 'tgui/components'; import { ICON_MAP } from './constants'; import { PaiData } from './types'; -export const SystemDisplay = (props) => { +export function SystemDisplay(props) { return ( @@ -15,10 +15,10 @@ export const SystemDisplay = (props) => { ); -}; +} /** Renders some ASCII art. Changes to red on emag. */ -const SystemWallpaper = (props) => { +function SystemWallpaper(props) { const { data } = useBackend(); const { emagged } = data; @@ -58,12 +58,12 @@ const SystemWallpaper = (props) => { ); -}; +} /** Displays master info. * You can check their DNA and change your image here. */ -const SystemInfo = (props) => { +function SystemInfo(props) { const { act, data } = useBackend(); const { image, master_dna, master_name } = data; @@ -101,4 +101,4 @@ const SystemInfo = (props) => { ); -}; +} diff --git a/tgui/packages/tgui/interfaces/PaiInterface/index.tsx b/tgui/packages/tgui/interfaces/PaiInterface/index.tsx index c581dfd52f4a4..c085bf32107b1 100644 --- a/tgui/packages/tgui/interfaces/PaiInterface/index.tsx +++ b/tgui/packages/tgui/interfaces/PaiInterface/index.tsx @@ -1,4 +1,4 @@ -import { useLocalState } from 'tgui/backend'; +import { useState } from 'react'; import { Stack, Tabs } from 'tgui/components'; import { Window } from 'tgui/layouts'; @@ -8,8 +8,8 @@ import { DirectiveDisplay } from './Directives'; import { InstalledDisplay } from './Installed'; import { SystemDisplay } from './System'; -export const PaiInterface = (props) => { - const [tab] = useLocalState('tab', PAI_TAB.System); +export function PaiInterface(props) { + const [tab, setTab] = useState(PAI_TAB.System); return ( @@ -22,51 +22,39 @@ export const PaiInterface = (props) => { {tab === PAI_TAB.Available && } - + + setTab(PAI_TAB.System)} + selected={tab === PAI_TAB.System} + > + System + + setTab(PAI_TAB.Directive)} + selected={tab === PAI_TAB.Directive} + > + Directives + + setTab(PAI_TAB.Installed)} + selected={tab === PAI_TAB.Installed} + > + Installed + + setTab(PAI_TAB.Available)} + selected={tab === PAI_TAB.Available} + > + Download + + ); -}; - -/** - * Tabs at bottom of screen. YES THIS IS INTENTIONAL. It's a phone screen - * and the buttons are on the bottom. Android! - */ -const TabDisplay = (props) => { - const [tab, setTab] = useLocalState('tab', PAI_TAB.System); - - return ( - - setTab(PAI_TAB.System)} - selected={tab === PAI_TAB.System} - > - System - - setTab(PAI_TAB.Directive)} - selected={tab === PAI_TAB.Directive} - > - Directives - - setTab(PAI_TAB.Installed)} - selected={tab === PAI_TAB.Installed} - > - Installed - - setTab(PAI_TAB.Available)} - selected={tab === PAI_TAB.Available} - > - Download - - - ); -}; +} diff --git a/tgui/packages/tgui/interfaces/PaiInterface/types.ts b/tgui/packages/tgui/interfaces/PaiInterface/types.ts index 28c91da7a9c97..33b4a2a595226 100644 --- a/tgui/packages/tgui/interfaces/PaiInterface/types.ts +++ b/tgui/packages/tgui/interfaces/PaiInterface/types.ts @@ -1,7 +1,7 @@ import { BooleanLike } from 'common/react'; export type PaiData = { - available: ReadonlyArray<{ name: string; value: number }>; + available: Record; directives: string; door_jack: string | null; emagged: BooleanLike; diff --git a/tgui/packages/tgui/interfaces/Pandemic/Specimen.tsx b/tgui/packages/tgui/interfaces/Pandemic/Specimen.tsx index 9f37778605fd0..c52e20980f4c2 100644 --- a/tgui/packages/tgui/interfaces/Pandemic/Specimen.tsx +++ b/tgui/packages/tgui/interfaces/Pandemic/Specimen.tsx @@ -1,4 +1,5 @@ -import { useBackend, useLocalState } from 'tgui/backend'; +import { useState } from 'react'; +import { useBackend } from 'tgui/backend'; import { Button, NoticeBox, Section, Stack, Tabs } from 'tgui/components'; import { SymptomDisplay } from './Symptom'; @@ -6,13 +7,53 @@ import { Data } from './types'; import { VirusDisplay } from './Virus'; export const SpecimenDisplay = (props) => { - const { data } = useBackend(); - const { viruses = [] } = data; - const [tab, setTab] = useLocalState('tab', 0); + const { act, data } = useBackend(); + const { is_ready, viruses = [] } = data; + + const [tab, setTab] = useState(0); const virus = viruses[tab]; return ( -
    }> +
    + {viruses.length > 1 && ( + + + {viruses.map((virus, index) => { + return ( + setTab(index)} + key={index} + > + {virus.name} + + ); + })} + + + )} + + + + + } + > {!virus ? ( Nothing detected. ) : ( @@ -28,45 +69,3 @@ export const SpecimenDisplay = (props) => {
    ); }; - -const Buttons = (props) => { - const { act, data } = useBackend(); - const { is_ready, viruses = [] } = data; - const [tab, setTab] = useLocalState('tab', 0); - const virus = viruses[tab]; - - return ( - - {viruses.length > 1 && ( - - - {viruses.map((virus, index) => { - return ( - setTab(index)} - key={index} - > - {virus.name} - - ); - })} - - - )} - -
    -
    - - - - - - - - - - - - - - -
    -
    - -
    - - - + + + {desc ? : null} + + +
    +
    +
    + + + + + + + + + + + + + + +
    +
    + +
    +
    +
    +
    +
    ); }; diff --git a/tgui/packages/tgui/interfaces/PersonalCrafting.tsx b/tgui/packages/tgui/interfaces/PersonalCrafting.tsx index 166ab59b44ece..9acb77f1c4d7a 100644 --- a/tgui/packages/tgui/interfaces/PersonalCrafting.tsx +++ b/tgui/packages/tgui/interfaces/PersonalCrafting.tsx @@ -15,6 +15,7 @@ import { Stack, Tabs, Tooltip, + VirtualList, } from '../components'; import { Window } from '../layouts'; import { Food } from './PreferencesMenu/data'; @@ -496,32 +497,36 @@ export const PersonalCrafting = (props) => { style={{ overflowY: 'auto' }} > {recipes.length > 0 ? ( - recipes - .slice(0, displayLimit) - .map((item) => - display_compact ? ( - - ) : ( - - ), - ) + + {recipes + .slice(0, displayLimit) + .map((item) => + display_compact ? ( + + ) : ( + + ), + )} + ) : ( No recipes found. diff --git a/tgui/packages/tgui/interfaces/PipeScrubber.tsx b/tgui/packages/tgui/interfaces/PipeScrubber.tsx new file mode 100644 index 0000000000000..b18d80a9a06c8 --- /dev/null +++ b/tgui/packages/tgui/interfaces/PipeScrubber.tsx @@ -0,0 +1,175 @@ +import { toFixed } from 'common/math'; +import { BooleanLike } from 'common/react'; + +import { useBackend } from '../backend'; +import { + Box, + Button, + Icon, + LabeledControls, + RoundGauge, + Section, + Tooltip, +} from '../components'; +import { getGasLabel } from '../constants'; +import { formatSiUnit } from '../format'; +import { Window } from '../layouts'; + +type Data = { + on: BooleanLike; + direction: BooleanLike; + connected: BooleanLike; + pressureTank: number; + pressureLimitTank: number; + pressurePump: number; + pressureLimitPump: number; + pumpMaxPressure: number; + hasHypernobCrystal: BooleanLike; + reactionSuppressionEnabled: BooleanLike; + filterTypes: Filter[]; +}; + +type Filter = { + id: string; + enabled: BooleanLike; + gasId: string; + gasName: string; +}; + +const formatPressure = (value) => { + if (value < 10000) { + return toFixed(value) + ' kPa'; + } + return formatSiUnit(value * 1000, 1, 'Pa'); +}; + +export const PipeScrubber = (props) => { + const { act, data } = useBackend(); + const { + on, + connected, + direction, + pressureTank, + pressureLimitTank, + pressurePump, + pressureLimitPump, + hasHypernobCrystal, + reactionSuppressionEnabled, + filterTypes = [], + } = data; + + return ( + + +
    act('reaction_suppression')} + > + {reactionSuppressionEnabled + ? 'Reaction Suppression Enabled' + : 'Reaction Suppression Disabled'} + + ) + } + > + + + + + + + + + + + + + + + + + + +
    +
    act('direction')}> + {direction ? 'Buffer → Tank' : 'Tank → Buffer'} + + } + > + {!!direction && ( + <> + Filtering gases from the buffer into the internal tank. +
    + {filterTypes.map((filter) => ( +
    + + )} + {!direction && ( + Dumping internal tank gases into the buffer. + )} +
    +
    +
    + ); +}; diff --git a/tgui/packages/tgui/interfaces/PowerMonitor.jsx b/tgui/packages/tgui/interfaces/PowerMonitor.jsx deleted file mode 100644 index 039e700f68cea..0000000000000 --- a/tgui/packages/tgui/interfaces/PowerMonitor.jsx +++ /dev/null @@ -1,230 +0,0 @@ -import { map, sortBy } from 'common/collections'; -import { flow } from 'common/fp'; -import { toFixed } from 'common/math'; -import { useState } from 'react'; - -import { useBackend } from '../backend'; -import { - Box, - Button, - Chart, - ColorBox, - Dimmer, - Flex, - Icon, - LabeledList, - ProgressBar, - Section, - Stack, - Table, -} from '../components'; -import { Window } from '../layouts'; - -const PEAK_DRAW = 500000; - -export const powerRank = (str) => { - const unit = String(str.split(' ')[1]).toLowerCase(); - return ['w', 'kw', 'mw', 'gw'].indexOf(unit); -}; - -export const PowerMonitor = () => { - return ( - - - - - - ); -}; - -export const PowerMonitorContent = (props) => { - const { data } = useBackend(); - const { history = { supply: [], demand: [] } } = data; - const [sortByField, setSortByField] = useState(null); - const supply = history.supply[history.supply.length - 1] || 0; - const demand = history.demand[history.demand.length - 1] || 0; - const supplyData = history.supply.map((value, i) => [i, value]); - const demandData = history.demand.map((value, i) => [i, value]); - const maxValue = Math.max(PEAK_DRAW, ...history.supply, ...history.demand); - // Process area data - const areas = flow([ - (areas) => - map(areas, (area, i) => ({ - ...area, - // Generate a unique id - id: area.name + i, - })), - sortByField === 'name' && ((areas) => sortBy(areas, (area) => area.name)), - sortByField === 'charge' && - ((areas) => sortBy(areas, (area) => -area.charge)), - sortByField === 'draw' && - ((areas) => - sortBy( - areas, - (area) => -powerRank(area.load), - (area) => -parseFloat(area.load), - )), - ])(data.areas); - return ( - <> - {areas.length === 0 && ( - - - - - - -

    No APCs found!

    -
    -
    -
    - )} - - -
    - - - - {toFixed(supply / 1000) + ' kW'} - - - - - {toFixed(demand / 1000) + ' kW'} - - - -
    -
    - -
    - - -
    -
    -
    -
    - - - Sort by: - - setSortByField(sortByField !== 'name' && 'name')} - /> - setSortByField(sortByField !== 'charge' && 'charge')} - /> - setSortByField(sortByField !== 'draw' && 'draw')} - /> - - - - Area - Charge - Draw - - Eqp - - - Lgt - - - Env - - - {areas.map((area, i) => ( - - - - - - - - - ))} -
    {area.name} - - - {area.load} - - - - - - -
    -
    - - ); -}; - -export const AreaCharge = (props) => { - const { charging, charge } = props; - return ( - <> - 50 ? 'battery-half' : 'battery-quarter')) || - (charging === 1 && 'bolt') || - (charging === 2 && 'battery-full') - } - color={ - (charging === 0 && (charge > 50 ? 'yellow' : 'red')) || - (charging === 1 && 'yellow') || - (charging === 2 && 'green') - } - /> - - {toFixed(charge) + '%'} - - - ); -}; - -const AreaStatusColorBox = (props) => { - const { status } = props; - const power = Boolean(status & 2); - const mode = Boolean(status & 1); - const tooltipText = (power ? 'On' : 'Off') + ` [${mode ? 'auto' : 'manual'}]`; - return ( - - ); -}; diff --git a/tgui/packages/tgui/interfaces/PowerMonitor.tsx b/tgui/packages/tgui/interfaces/PowerMonitor.tsx new file mode 100644 index 0000000000000..b311ae15ede54 --- /dev/null +++ b/tgui/packages/tgui/interfaces/PowerMonitor.tsx @@ -0,0 +1,318 @@ +import { useState } from 'react'; +import { + Box, + Button, + Chart, + ColorBox, + Flex, + Icon, + LabeledList, + ProgressBar, + Section, + Stack, + Table, +} from 'tgui-core/components'; +import { toFixed } from 'tgui-core/math'; + +import { useBackend } from '../backend'; +import { Tooltip } from '../components'; +import { Window } from '../layouts'; +import { LoadingScreen } from './common/LoadingToolbox'; + +type Data = { + areas: Area[]; + history: PowerHistory; +}; + +type Area = { + charge: number; + charging: number; + env: number; + eqp: number; + lgt: number; + load: string; + name: string; +}; + +type PowerHistory = { + demand: number[]; + supply: number[]; +}; + +export function powerRank(str: string): number { + const unit = String(str.split(' ')[1]).toLowerCase(); + return ['w', 'kw', 'mw', 'gw'].indexOf(unit); +} + +// Oh no not another sorting algorithm +function powerSort(a: Area, b: Area): number { + const sortedByRank = powerRank(a.load) - powerRank(b.load); + const sortedByLoad = parseFloat(a.load) - parseFloat(b.load); + + if (sortedByRank !== 0) { + return sortedByRank; + } + return sortedByLoad; +} + +function nameSort(a: Area, b: Area): number { + if (a.name < b.name) { + return -1; + } + if (a.name > b.name) { + return 1; + } + return 0; +} + +export function PowerMonitor() { + return ( + + + + + + ); +} + +const PEAK_DRAW = 500000; + +export function PowerMonitorContent(props) { + const { data } = useBackend(); + const { history } = data; + + if (!history) { + return <>Loading...; + } + + const supply = history.supply[history.supply.length - 1] || 0; + const demand = history.demand[history.demand.length - 1] || 0; + + const supplyData = history.supply.map((value, i) => [i, value]); + const demandData = history.demand.map((value, i) => [i, value]); + + const maxValue = Math.max(PEAK_DRAW, ...history.supply, ...history.demand); + + if (supplyData.length === 0 || demandData.length === 0) { + return ; + } + + return ( + + + + +
    + + + + {toFixed(supply / 1000) + ' kW'} + + + + + {toFixed(demand / 1000) + ' kW'} + + + +
    +
    + +
    + + +
    +
    +
    +
    + + + +
    + ); +} + +function StationAreas(props) { + const { data } = useBackend(); + + const [sortByField, setSortByField] = useState(''); + + const areas = data.areas + .map((area, i) => ({ + ...area, + // Generate a unique id + id: area.name + i, + })) + .sort((a, b) => { + if (sortByField === 'name') { + return nameSort(a, b); + } + if (sortByField === 'charge') { + return a.charge - b.charge; + } + if (sortByField === 'draw') { + return powerSort(b, a); + } + return 0; + }); + + return ( + +
    + + + Sort by: + + setSortByField(sortByField !== 'name' ? 'name' : '')} + > + Name + + + setSortByField(sortByField !== 'charge' ? 'charge' : '') + } + > + Charge + + setSortByField(sortByField !== 'draw' ? 'draw' : '')} + > + Draw + + +
    + + +
    + + + Area + Charge + + Draw + + + Eqp + + + Lgt + + + Env + + + {areas.map((area) => ( + + + + + + + + + ))} +
    {area.name} + + + {area.load} + + + + + + +
    +
    +
    +
    + ); +} + +type AreaChargeProps = { + charge: number; + charging: number; +}; + +const NOT_CHARGING = 0; +const CHARGING = 1; +const CHARGED = 2; + +export function AreaCharge(props: AreaChargeProps) { + const { charging, charge } = props; + + let name: string; + if (charging === NOT_CHARGING) { + name = charge > 50 ? 'battery-half' : 'battery-quarter'; + } else if (charging === CHARGING) { + name = 'bolt'; + } else { + name = 'battery-full'; + } + + return ( + <> + 50 ? 'yellow' : 'red')) || + (charging === CHARGING && 'yellow') || + (charging === CHARGED && 'green') + } + /> + + {toFixed(charge) + '%'} + + + ); +} + +type AreaStatusColorBoxProps = { + status: number; +}; + +function AreaStatusColorBox(props: AreaStatusColorBoxProps) { + const { status } = props; + + const power = Boolean(status & 2); + const mode = Boolean(status & 1); + const tooltipText = (power ? 'On' : 'Off') + ` [${mode ? 'auto' : 'manual'}]`; + + return ( + + + + ); +} diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/CharacterPreferenceWindow.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/CharacterPreferenceWindow.tsx index 261c40408f1b9..8193384e6ae88 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/CharacterPreferenceWindow.tsx +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/CharacterPreferenceWindow.tsx @@ -7,6 +7,7 @@ import { Window } from '../../layouts'; import { AntagsPage } from './AntagsPage'; import { PreferencesMenuData } from './data'; import { JobsPage } from './JobsPage'; +import { LoadoutPage } from './loadout/index'; import { MainPage } from './MainPage'; import { PageButton } from './PageButton'; import { QuirksPage } from './QuirksPage'; @@ -18,6 +19,7 @@ enum Page { Jobs, Species, Quirks, + Loadout, } const CharacterProfiles = (props: { @@ -75,6 +77,11 @@ export const CharacterPreferenceWindow = (props) => { case Page.Quirks: pageContents = ; break; + + case Page.Loadout: + pageContents = ; + break; + default: exhaustiveCheck(currentPage); } @@ -94,15 +101,12 @@ export const CharacterPreferenceWindow = (props) => { profiles={data.character_profiles} /> - {!data.content_unlocked && ( Buy BYOND premium for more slots! )} - - @@ -116,6 +120,16 @@ export const CharacterPreferenceWindow = (props) => { + + + Loadout + + + { - - {pageContents} diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/DeleteCharacterPopup.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/DeleteCharacterPopup.tsx new file mode 100644 index 0000000000000..3656465677b21 --- /dev/null +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/DeleteCharacterPopup.tsx @@ -0,0 +1,57 @@ +import { useEffect, useState } from 'react'; + +import { useBackend } from '../../backend'; +import { Box, Button, Modal, Stack } from '../../components'; +import { PreferencesMenuData } from './data'; + +export const DeleteCharacterPopup = (props: { close: () => void }) => { + const { data, act } = useBackend(); + const [secondsLeft, setSecondsLeft] = useState(3); + + const { close } = props; + + useEffect(() => { + const interval = setInterval(() => { + setSecondsLeft((current) => current - 1); + }, 1000); + + return () => clearInterval(interval); + }); + + return ( + + + + Wait! + + + + {`You're about to delete ${data.character_preferences.names[data.name_to_use]} forever. Are you sure you want to do this?`} + + + + + + {/* Explicit width so that the layout doesn't shift */} + + + + + + + + + + + ); +}; diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/KeybindingsPage.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/KeybindingsPage.tsx index 32d39c287df94..874095b84eac2 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/KeybindingsPage.tsx +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/KeybindingsPage.tsx @@ -1,5 +1,5 @@ import { range, sortBy } from 'common/collections'; -import { KEY } from 'common/keys'; +import { isEscape, KEY } from 'common/keys'; import { Component } from 'react'; import { resolveAsset } from '../../assets'; @@ -42,7 +42,7 @@ const isStandardKey = (event: KeyboardEvent): boolean => { event.key !== KEY.Alt && event.key !== KEY.Control && event.key !== KEY.Shift && - event.key !== KEY.Escape + !isEscape(event.key) ); }; @@ -287,7 +287,7 @@ export class KeybindingsPage extends Component<{}, KeybindingsPageState> { if (isStandardKey(event)) { this.setRebindingHotkey(formatKeyboardEvent(event)); return; - } else if (event.key === KEY.Escape) { + } else if (isEscape(event.key)) { this.setRebindingHotkey(undefined); return; } diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/MainPage.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/MainPage.tsx index c79827d2abe74..35ddf9d2a7326 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/MainPage.tsx +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/MainPage.tsx @@ -1,7 +1,7 @@ import { filter, map, sortBy } from 'common/collections'; import { classes } from 'common/react'; import { createSearch } from 'common/string'; -import { useState } from 'react'; +import { ReactNode, useState } from 'react'; import { sendAct, useBackend } from '../../backend'; import { @@ -21,6 +21,7 @@ import { RandomSetting, ServerData, } from './data'; +import { DeleteCharacterPopup } from './DeleteCharacterPopup'; import { MultiNameInput, NameInput } from './names'; import features from './preferences/features'; import { @@ -383,6 +384,7 @@ export const PreferenceList = (props: { preferences: Record; randomizations: Record; maxHeight: string; + children?: ReactNode; }) => { return ( + + {props.children} ); }; @@ -478,6 +482,8 @@ export const MainPage = (props: { openSpecies: () => void }) => { const [currentClothingMenu, setCurrentClothingMenu] = useState( null, ); + const [deleteCharacterPopupOpen, setDeleteCharacterPopupOpen] = + useState(false); const [multiNameInputOpen, setMultiNameInputOpen] = useState(false); const [randomToggleEnabled] = useRandomToggleState(); @@ -549,6 +555,12 @@ export const MainPage = (props: { openSpecies: () => void }) => { /> )} + {deleteCharacterPopupOpen && ( + setDeleteCharacterPopupOpen(false)} + /> + )} + @@ -648,7 +660,21 @@ export const MainPage = (props: { openSpecies: () => void }) => { )} preferences={nonContextualPreferences} maxHeight="auto" - /> + > + + + + diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/QuirksPage.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/QuirksPage.tsx index 2dde5ab60cc5a..6a166bb06dbed 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/QuirksPage.tsx +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/QuirksPage.tsx @@ -211,6 +211,7 @@ function QuirkPopper(props: QuirkPopperProps) { placement="bottom-end" onClickOutside={() => setCustomizationExpanded(false)} isOpen={customizationExpanded} + baseZIndex={1} content={
    {!!customization_options && hasExpandableCustomization && ( diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/abductor.ts b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/abductor.ts index cc77194f0cbcb..789e5e9823a15 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/abductor.ts +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/abductor.ts @@ -1,18 +1,16 @@ -import { multiline } from 'common/string'; - import { Antagonist, Category } from '../base'; const Abductor: Antagonist = { key: 'abductor', name: 'Abductor', description: [ - multiline` + ` Abductors are technologically advanced alien society set on cataloging all species in the system. Unfortunately for their subjects their methods are quite invasive. `, - multiline` + ` You and a partner will become the abductor scientist and agent duo. As an agent, abduct unassuming victims and bring them back to your UFO. As a scientist, scout out victims for your agent, keep them safe, and diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/blob.ts b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/blob.ts index 99861d530caf4..92cd5bdc447c8 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/blob.ts +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/blob.ts @@ -1,8 +1,6 @@ -import { multiline } from 'common/string'; - import { Antagonist, Category } from '../base'; -export const BLOB_MECHANICAL_DESCRIPTION = multiline` +export const BLOB_MECHANICAL_DESCRIPTION = ` The blob infests the station and destroys everything in its path, including hull, fixtures, and creatures. Spread your mass, collect resources, and consume the entire station. Make sure to prepare your defenses, because the diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/blobinfection.ts b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/blobinfection.ts index 33bc8405d49b7..d8a5f135fed9b 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/blobinfection.ts +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/blobinfection.ts @@ -1,5 +1,3 @@ -import { multiline } from 'common/string'; - import { Antagonist, Category } from '../base'; import { BLOB_MECHANICAL_DESCRIPTION } from './blob'; @@ -7,7 +5,7 @@ const BlobInfection: Antagonist = { key: 'blobinfection', name: 'Blob Infection', description: [ - multiline` + ` At any point in the middle of the shift, be strucken with an infection that will turn you into the terrifying blob. `, diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/bloodbrother.ts b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/bloodbrother.ts index 176cd39a7ea48..56cbcbfc97e1f 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/bloodbrother.ts +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/bloodbrother.ts @@ -1,12 +1,10 @@ -import { multiline } from 'common/string'; - import { Antagonist, Category } from '../base'; const BloodBrother: Antagonist = { key: 'bloodbrother', name: 'Blood Brother', description: [ - multiline` + ` Team up with other crew members as blood brothers to combine the strengths of your departments, break each other out of prison, and overwhelm the station. diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/changeling.ts b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/changeling.ts index 2c9698d0bda21..9124a07063e0c 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/changeling.ts +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/changeling.ts @@ -1,8 +1,6 @@ -import { multiline } from 'common/string'; - import { Antagonist, Category } from '../base'; -export const CHANGELING_MECHANICAL_DESCRIPTION = multiline` +export const CHANGELING_MECHANICAL_DESCRIPTION = ` Transform yourself or others into different identities, and buy from an arsenal of biological weaponry with the DNA you collect. `; @@ -11,7 +9,7 @@ const Changeling: Antagonist = { key: 'changeling', name: 'Changeling', description: [ - multiline` + ` A highly intelligent alien predator that is capable of altering their shape to flawlessly resemble a human. `, diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/changelingmidround.ts b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/changelingmidround.ts index 90692d2824321..8324bdb85865a 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/changelingmidround.ts +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/changelingmidround.ts @@ -1,5 +1,3 @@ -import { multiline } from 'common/string'; - import { Antagonist, Category } from '../base'; import { CHANGELING_MECHANICAL_DESCRIPTION } from './changeling'; @@ -7,7 +5,7 @@ const ChangelingMidround: Antagonist = { key: 'changelingmidround', name: 'Space Changeling', description: [ - multiline` + ` A midround changeling does not receive a crew identity, instead arriving from space. This will be more difficult than being a round-start changeling! `, diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/clownoperative.ts b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/clownoperative.ts index f32c6c6d3b0f2..61f874a2e938f 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/clownoperative.ts +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/clownoperative.ts @@ -1,5 +1,3 @@ -import { multiline } from 'common/string'; - import { Antagonist, Category } from '../base'; import { OPERATIVE_MECHANICAL_DESCRIPTION } from './operative'; @@ -7,7 +5,7 @@ const ClownOperative: Antagonist = { key: 'clownoperative', name: 'Clown Operative', description: [ - multiline` + ` Honk! You have been chosen, for better or worse to join the Syndicate Clown Operative strike team. Your mission, whether or not you choose to tickle it, is to honk Nanotrasen's most advanced research facility! diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/cultist.ts b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/cultist.ts index 252f7e65b63d7..c5cfaf61c2f65 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/cultist.ts +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/cultist.ts @@ -1,19 +1,17 @@ -import { multiline } from 'common/string'; - import { Antagonist, Category } from '../base'; const Cultist: Antagonist = { key: 'cultist', name: 'Cultist', description: [ - multiline` + ` The Geometer of Blood, Nar-Sie, has sent a number of her followers to Space Station 13. As a cultist, you have an abundance of cult magics at your disposal, something for all situations. You must work with your brethren to summon an avatar of your eldritch goddess! `, - multiline` + ` Armed with blood magic, convert crew members to the Blood Cult, sacrifice those who get in the way, and summon Nar-Sie. `, diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/fugitive.ts b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/fugitive.ts index 1d7158484a101..f05a96c2ec46a 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/fugitive.ts +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/fugitive.ts @@ -1,12 +1,10 @@ -import { multiline } from 'common/string'; - import { Antagonist, Category } from '../base'; const Fugitive: Antagonist = { key: 'fugitive', name: 'Fugitive', description: [ - multiline` + ` Wherever you come from, you're being hunted. You have 10 minutes to prepare before fugitive hunters arrive and start hunting you and your friends down! `, diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/glitch.ts b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/glitch.ts index 227ad99b02d6c..3d269c54ca4b4 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/glitch.ts +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/glitch.ts @@ -1,16 +1,14 @@ -import { multiline } from 'common/string'; - import { Antagonist, Category } from '../base'; const Glitch: Antagonist = { key: 'glitch', name: 'Glitch', description: [ - multiline` + ` The virtual domain is a dangerous place for bitrunners. Make it so. `, - multiline` + ` You are a short-term antagonist, a glitch in the system. Use martial arts \ and lethal weaponry to terminate organics. `, diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/headrevolutionary.ts b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/headrevolutionary.ts index 7ef4908368aed..0a1d644266f00 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/headrevolutionary.ts +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/headrevolutionary.ts @@ -1,8 +1,6 @@ -import { multiline } from 'common/string'; - import { Antagonist, Category } from '../base'; -export const REVOLUTIONARY_MECHANICAL_DESCRIPTION = multiline` +export const REVOLUTIONARY_MECHANICAL_DESCRIPTION = ` Armed with a flash, convert as many people to the revolution as you can. Kill or exile all heads of staff on the station. `; diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/heretic.ts b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/heretic.ts index 7d378e6c850dd..8c2d631bd58a8 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/heretic.ts +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/heretic.ts @@ -1,8 +1,6 @@ -import { multiline } from 'common/string'; - import { Antagonist, Category } from '../base'; -export const HERETIC_MECHANICAL_DESCRIPTION = multiline` +export const HERETIC_MECHANICAL_DESCRIPTION = ` Find hidden influences and sacrifice crew members to gain magical powers and ascend as one of several paths. `; @@ -11,7 +9,7 @@ const Heretic: Antagonist = { key: 'heretic', name: 'Heretic', description: [ - multiline` + ` Forgotten, devoured, gutted. Humanity has forgotten the eldritch forces of decay, but the mansus veil has weakened. We will make them taste fear again... diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/loneoperative.ts b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/loneoperative.ts index b9330e415477c..3f8ac5c5b7616 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/loneoperative.ts +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/loneoperative.ts @@ -1,5 +1,3 @@ -import { multiline } from 'common/string'; - import { Antagonist, Category } from '../base'; import { OPERATIVE_MECHANICAL_DESCRIPTION } from './operative'; @@ -7,7 +5,7 @@ const LoneOperative: Antagonist = { key: 'loneoperative', name: 'Lone Operative', description: [ - multiline` + ` A solo nuclear operative that has a higher chance of spawning the longer the nuclear authentication disk stays in one place. `, diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/malfai.ts b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/malfai.ts index 614e97447f776..03aadd752c61f 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/malfai.ts +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/malfai.ts @@ -1,8 +1,6 @@ -import { multiline } from 'common/string'; - import { Antagonist, Category } from '../base'; -export const MALF_AI_MECHANICAL_DESCRIPTION = multiline` +export const MALF_AI_MECHANICAL_DESCRIPTION = ` With a law zero to complete your objectives at all costs, combine your omnipotence and malfunction modules to wreak havoc across the station. Go delta to destroy the station and all those who opposed you. diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/malfaimidround.ts b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/malfaimidround.ts index 9b0cd861f13d0..84e52b43dc12b 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/malfaimidround.ts +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/malfaimidround.ts @@ -1,5 +1,3 @@ -import { multiline } from 'common/string'; - import { Antagonist, Category } from '../base'; import { MALF_AI_MECHANICAL_DESCRIPTION } from './malfai'; @@ -7,7 +5,7 @@ const MalfAIMidround: Antagonist = { key: 'malfaimidround', name: 'Value Drifted AI', description: [ - multiline` + ` A form of malfunctioning AI that is given to existing AIs in the middle of the shift. `, diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/nightmare.ts b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/nightmare.ts index 4f317ff0b4887..90046dd625e10 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/nightmare.ts +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/nightmare.ts @@ -1,12 +1,10 @@ -import { multiline } from 'common/string'; - import { Antagonist, Category } from '../base'; const Nightmare: Antagonist = { key: 'nightmare', name: 'Nightmare', description: [ - multiline` + ` Use your light eater to break sources of light to survive and thrive. Jaunt through the darkness and seek your prey with night vision. `, diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/obsessed.ts b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/obsessed.ts index 9e38e37cfe153..8d4c98139872b 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/obsessed.ts +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/obsessed.ts @@ -1,12 +1,10 @@ -import { multiline } from 'common/string'; - import { Antagonist, Category } from '../base'; const Obsessed: Antagonist = { key: 'obsessed', name: 'Obsessed', description: [ - multiline` + ` You're obsessed with someone! Your obsession may begin to notice their personal items are stolen and their coworkers have gone missing, but will they realize they are your next victim in time? diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/operative.ts b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/operative.ts index 2b179a2bd6719..a8182de9e0318 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/operative.ts +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/operative.ts @@ -1,8 +1,6 @@ -import { multiline } from 'common/string'; - import { Antagonist, Category } from '../base'; -export const OPERATIVE_MECHANICAL_DESCRIPTION = multiline` +export const OPERATIVE_MECHANICAL_DESCRIPTION = ` Retrieve the nuclear authentication disk, use it to activate the nuclear fission explosive, and destroy the station. `; @@ -11,7 +9,7 @@ const Operative: Antagonist = { key: 'operative', name: 'Nuclear Operative', description: [ - multiline` + ` Congratulations, agent. You have been chosen to join the Syndicate Nuclear Operative strike team. Your mission, whether or not you choose to accept it, is to destroy Nanotrasen's most advanced research facility! diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/operativemidround.ts b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/operativemidround.ts index cf79eae9bdc48..7497c6442fcc4 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/operativemidround.ts +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/operativemidround.ts @@ -1,5 +1,3 @@ -import { multiline } from 'common/string'; - import { Antagonist, Category } from '../base'; import { OPERATIVE_MECHANICAL_DESCRIPTION } from './operative'; @@ -7,7 +5,7 @@ const OperativeMidround: Antagonist = { key: 'operativemidround', name: 'Nuclear Assailant', description: [ - multiline` + ` A form of nuclear operative that is offered to ghosts in the middle of the shift. `, diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/paradoxclone.ts b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/paradoxclone.ts index 9217c3aeb1334..1456df3ec6e5d 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/paradoxclone.ts +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/paradoxclone.ts @@ -1,12 +1,10 @@ -import { multiline } from 'common/string'; - import { Antagonist, Category } from '../base'; const ParadoxClone: Antagonist = { key: 'paradoxclone', name: 'Paradox Clone', description: [ - multiline` + ` A freak time-space anomaly has teleported you into another reality! Now you have to find your counterpart and kill and replace them. `, diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/provocateur.ts b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/provocateur.ts index cd8ef1a380f4c..1d2879c867594 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/provocateur.ts +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/provocateur.ts @@ -1,5 +1,3 @@ -import { multiline } from 'common/string'; - import { Antagonist, Category } from '../base'; import { REVOLUTIONARY_MECHANICAL_DESCRIPTION } from './headrevolutionary'; @@ -7,7 +5,7 @@ const Provocateur: Antagonist = { key: 'provocateur', name: 'Provocateur', description: [ - multiline` + ` A form of head revolutionary that can activate when joining an ongoing shift. `, diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/revenant.ts b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/revenant.ts index e9fdf3c178db3..241b52b3e4022 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/revenant.ts +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/revenant.ts @@ -1,12 +1,10 @@ -import { multiline } from 'common/string'; - import { Antagonist, Category } from '../base'; const Revenant: Antagonist = { key: 'revenant', name: 'Revenant', description: [ - multiline` + ` Become the mysterious revenant. Break windows, overload lights, and eat the crew's life force, all while talking to your old community of disgruntled ghosts. diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/sentiencepotionspawn.ts b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/sentiencepotionspawn.ts index 6b4cad30e18b5..e69db3bec337a 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/sentiencepotionspawn.ts +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/sentiencepotionspawn.ts @@ -1,20 +1,18 @@ -import { multiline } from 'common/string'; - import { Antagonist, Category } from '../base'; const SentientCreature: Antagonist = { key: 'sentiencepotionspawn', name: 'Sentient Creature', description: [ - multiline` + ` Either by cosmic happenstance, or due to crew's shenanigans, you have been given sentience! `, - multiline` - This is a blanket preference. The more benign ones include random human - level intelligence events, the cargorilla, and creatures uplifted via sentience - potions. The less friendly ones include the regal rat, and the boosted + ` + This is a blanket preference. The more benign ones include random human + level intelligence events, the cargorilla, and creatures uplifted via sentience + potions. The less friendly ones include the regal rat, and the boosted mining elite mobs. `, ], diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/sentientdisease.ts b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/sentientdisease.ts deleted file mode 100644 index f2b2be6ca7860..0000000000000 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/sentientdisease.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { multiline } from 'common/string'; - -import { Antagonist, Category } from '../base'; - -const SentientDisease: Antagonist = { - key: 'sentientdisease', - name: 'Sentient Disease', - description: [ - multiline` - Mutate and spread yourself and infect as much of the crew as possible - with a deadly plague of your own creation. - `, - ], - category: Category.Midround, -}; - -export default SentientDisease; diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/spacedragon.ts b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/spacedragon.ts index 79e55a0060d68..4a11cc94d118c 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/spacedragon.ts +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/spacedragon.ts @@ -1,12 +1,10 @@ -import { multiline } from 'common/string'; - import { Antagonist, Category } from '../base'; const SpaceDragon: Antagonist = { key: 'spacedragon', name: 'Space Dragon', description: [ - multiline` + ` Become a ferocious space dragon. Breathe fire, summon an army of space carps, crush walls, and terrorize the station. `, diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/spaceninja.ts b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/spaceninja.ts index aee97dbdd2309..e6db1b96f9753 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/spaceninja.ts +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/spaceninja.ts @@ -1,17 +1,15 @@ -import { multiline } from 'common/string'; - import { Antagonist, Category } from '../base'; const SpaceNinja: Antagonist = { key: 'spaceninja', name: 'Space Ninja', description: [ - multiline` + ` The Spider Clan practice a sort of augmentation of human flesh in order to achieve a more perfect state of being and follow Postmodern Space Bushido. `, - multiline` + ` Become a conniving space ninja, equipped with a katana, gloves to hack into airlocks and APCs, a suit to make you go near-invisible, as well as a variety of abilities in your kit. Hack into arrest consoles diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/spy.ts b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/spy.ts index 395baf8791504..b004b972d447d 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/spy.ts +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/spy.ts @@ -1,19 +1,17 @@ -import { multiline } from 'common/string'; - import { Antagonist, Category } from '../base'; const Spy: Antagonist = { key: 'spy', name: 'Spy', description: [ - multiline` + ` Your mission, should you choose to accept it: Infiltrate Space Station 13. Disguise yourself as a member of their crew and steal vital equipment. Should you be caught or killed, your employer will disavow any knowledge of your actions. Good luck agent. `, - multiline` + ` Complete Spy Bounties to earn rewards from your employer. Use these rewards to sow chaos and mischief! `, diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/stowawaychangeling.ts b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/stowawaychangeling.ts index 59049ca39feea..20ba22ee074f5 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/stowawaychangeling.ts +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/stowawaychangeling.ts @@ -1,5 +1,3 @@ -import { multiline } from 'common/string'; - import { Antagonist, Category } from '../base'; import { CHANGELING_MECHANICAL_DESCRIPTION } from './changeling'; @@ -7,7 +5,7 @@ const Stowaway_Changeling: Antagonist = { key: 'stowawaychangeling', name: 'Stowaway Changeling', description: [ - multiline` + ` A Changeling that found its way onto the shuttle unbeknownst to the crewmembers on board. `, diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/syndicatesleeperagent.ts b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/syndicatesleeperagent.ts index cce7f70ea6f81..4a680e5d347c9 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/syndicatesleeperagent.ts +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/syndicatesleeperagent.ts @@ -1,5 +1,3 @@ -import { multiline } from 'common/string'; - import { Antagonist, Category } from '../base'; import { TRAITOR_MECHANICAL_DESCRIPTION } from './traitor'; @@ -7,7 +5,7 @@ const SyndicateSleeperAgent: Antagonist = { key: 'syndicatesleeperagent', name: 'Syndicate Sleeper Agent', description: [ - multiline` + ` A form of traitor that can activate at any point in the middle of the shift. `, diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/traitor.ts b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/traitor.ts index b815039cbb655..ccb63919982ed 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/traitor.ts +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/traitor.ts @@ -1,8 +1,6 @@ -import { multiline } from 'common/string'; - import { Antagonist, Category } from '../base'; -export const TRAITOR_MECHANICAL_DESCRIPTION = multiline` +export const TRAITOR_MECHANICAL_DESCRIPTION = ` Start with an uplink to purchase your gear and take on your sinister objectives. Ascend through the ranks and become an infamous legend. `; @@ -11,7 +9,7 @@ const Traitor: Antagonist = { key: 'traitor', name: 'Traitor', description: [ - multiline` + ` An unpaid debt. A score to be settled. Maybe you were just in the wrong place at the wrong time. Whatever the reasons, you were selected to infiltrate Space Station 13. diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/wizard.ts b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/wizard.ts index 67118697da00e..62530a26f67c0 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/wizard.ts +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/wizard.ts @@ -1,8 +1,6 @@ -import { multiline } from 'common/string'; - import { Antagonist, Category } from '../base'; -export const WIZARD_MECHANICAL_DESCRIPTION = multiline` +export const WIZARD_MECHANICAL_DESCRIPTION = ` Choose between a variety of powerful spells in order to cause chaos among Space Station 13. `; diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/xenomorph.ts b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/xenomorph.ts index c759696926457..a9a1960f3b2ce 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/xenomorph.ts +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/xenomorph.ts @@ -1,12 +1,10 @@ -import { multiline } from 'common/string'; - import { Antagonist, Category } from '../base'; const Xenomorph: Antagonist = { key: 'xenomorph', name: 'Xenomorph', description: [ - multiline` + ` Become the extraterrestrial xenomorph. Start as a larva, and progress your way up the caste, including even the Queen! `, diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/data.ts b/tgui/packages/tgui/interfaces/PreferencesMenu/data.ts index 8cb79790dc444..b1447d54f1fd5 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/data.ts +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/data.ts @@ -1,6 +1,7 @@ import { BooleanLike } from 'common/react'; import { sendAct } from '../../backend'; +import { LoadoutCategory, LoadoutList } from './loadout/base'; import { Gender } from './preferences/gender'; export enum Food { @@ -147,6 +148,8 @@ export type PreferencesMenuData = { gender: Gender; joblessrole: JoblessRole; species: string; + loadout_list: LoadoutList; + job_clothes: BooleanLike; }; randomization: Record; @@ -191,6 +194,9 @@ export type ServerData = { random: { randomizable: string[]; }; + loadout: { + loadout_tabs: LoadoutCategory[]; + }; species: Record; [otheyKey: string]: unknown; }; diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/loadout/ItemDisplay.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/loadout/ItemDisplay.tsx new file mode 100644 index 0000000000000..11b20b0097963 --- /dev/null +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/loadout/ItemDisplay.tsx @@ -0,0 +1,147 @@ +import { createSearch } from '../../../../common/string'; +import { useBackend } from '../../../backend'; +import { + Box, + Button, + DmIcon, + Flex, + Icon, + NoticeBox, +} from '../../../components'; +import { LoadoutCategory, LoadoutItem, LoadoutManagerData } from './base'; + +export const ItemIcon = (props: { item: LoadoutItem; scale?: number }) => { + const { item, scale = 3 } = props; + const icon_to_use = item.icon; + const icon_state_to_use = item.icon_state; + + if (!icon_to_use || !icon_state_to_use) { + return ( + + ); + } + + return ( + } + icon={icon_to_use} + icon_state={icon_state_to_use} + style={{ + transform: `scale(${scale}) translateX(${scale * 3}px) translateY(${ + scale * 3 + }px)`, + }} + /> + ); +}; + +export const ItemDisplay = (props: { + active: boolean; + item: LoadoutItem; + scale?: number; +}) => { + const { act } = useBackend(); + const { active, item, scale = 3 } = props; + + const boxSize = `${scale * 32}px`; + + return ( + + ); +}; + +const ItemListDisplay = (props: { items: LoadoutItem[] }) => { + const { data } = useBackend(); + const { loadout_list } = data.character_preferences.misc; + return ( + + {props.items.map((item) => ( + + + + ))} + + ); +}; + +export const LoadoutTabDisplay = (props: { + category: LoadoutCategory | undefined; +}) => { + const { category } = props; + if (!category) { + return ( + + Erroneous category detected! This is a bug, please report it. + + ); + } + + return ; +}; + +export const SearchDisplay = (props: { + loadout_tabs: LoadoutCategory[]; + currentSearch: string; +}) => { + const { loadout_tabs, currentSearch } = props; + + const search = createSearch( + currentSearch, + (loadout_item: LoadoutItem) => loadout_item.name, + ); + + const validLoadoutItems = loadout_tabs + .flatMap((tab) => tab.contents) + .filter(search) + .sort((a, b) => (a.name > b.name ? 1 : -1)); + + if (validLoadoutItems.length === 0) { + return No items found!; + } + + return ; +}; diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/loadout/ModifyPanel.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/loadout/ModifyPanel.tsx new file mode 100644 index 0000000000000..70959691af850 --- /dev/null +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/loadout/ModifyPanel.tsx @@ -0,0 +1,219 @@ +import { useBackend } from '../../../backend'; +import { + Box, + Button, + Dimmer, + DmIcon, + Flex, + Icon, + LabeledList, + Section, + Stack, +} from '../../../components'; +import { FAIcon, LoadoutItem, LoadoutManagerData, ReskinOption } from './base'; +import { ItemIcon } from './ItemDisplay'; + +// Used in LoadoutItem to make buttons relating to how an item can be edited +export type LoadoutButton = { + label: string; + act_key?: string; + button_icon?: FAIcon; + button_text?: string; + active_key?: string; + active_text?: string; + inactive_text?: string; + tooltip_text?: string; +}; + +const LoadoutModifyButton = (props: { + button: LoadoutButton; + modifyItemDimmer: LoadoutItem; +}) => { + const { act, data } = useBackend(); + const { loadout_list } = data.character_preferences.misc; + const { button, modifyItemDimmer } = props; + + const buttonIsActive = + button.active_key && loadout_list[modifyItemDimmer.path][button.active_key]; + + if (button.active_text && button.inactive_text) { + return ( + { + act('pass_to_loadout_item', { + subaction: button.act_key, + path: modifyItemDimmer.path, + }); + }} + > + {buttonIsActive ? button.active_text : button.inactive_text} + + ); + } + + return ( + + ); +}; + +const LoadoutModifyButtons = (props: { modifyItemDimmer: LoadoutItem }) => { + const { act, data } = useBackend(); + const { loadout_list } = data.character_preferences.misc; + const { modifyItemDimmer } = props; + + const isActive = (item: LoadoutItem, reskin: ReskinOption) => { + return loadout_list && loadout_list[item.path]['reskin'] + ? loadout_list[item.path]['reskin'] === reskin.name + : item.icon_state === reskin.skin_icon_state; + }; + + return ( + + + + {!!modifyItemDimmer.reskins && ( + + + {modifyItemDimmer.reskins.map((reskin) => ( + + + + ))} + + + )} + {modifyItemDimmer.buttons.map((button) => ( + + + + ))} + + + + ); +}; + +const LoadoutModifyItemDisplay = (props: { modifyItemDimmer: LoadoutItem }) => { + const { modifyItemDimmer } = props; + return ( + + + + {modifyItemDimmer.name} + + + + + + + ); +}; + +export const LoadoutModifyDimmer = (props: { + modifyItemDimmer: LoadoutItem; + setModifyItemDimmer: (dimmer: LoadoutItem | null) => void; +}) => { + const { act } = useBackend(); + const { modifyItemDimmer, setModifyItemDimmer } = props; + return ( + + + + + + + + + + + ); +}; diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/loadout/base.ts b/tgui/packages/tgui/interfaces/PreferencesMenu/loadout/base.ts new file mode 100644 index 0000000000000..33f8cabea9cb0 --- /dev/null +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/loadout/base.ts @@ -0,0 +1,46 @@ +import { BooleanLike } from '../../../../common/react'; +import { PreferencesMenuData } from '../data'; +import { LoadoutButton } from './ModifyPanel'; + +// Generic types +export type DmIconFile = string; +export type DmIconState = string; +export type FAIcon = string; +export type typePath = string; + +type LoadoutInfoKey = string; +type LoadoutInfoValue = string; +// Info about a loadout item (key to info, such as color, reskin, layer, etc) +type LoadoutListInfo = Record | []; +// Typepath to info about the item +export type LoadoutList = Record; + +// Used for holding reskin information +export type ReskinOption = { + name: string; + tooltip: string; + skin_icon_state: DmIconState; // The icon is the same as the item icon +}; + +// Actual item passed in from the loadout +export type LoadoutItem = { + name: string; + path: typePath; + icon: DmIconFile | null; + icon_state: DmIconState | null; + buttons: LoadoutButton[]; + reskins: ReskinOption[] | null; + information: string[]; +}; + +// Category of items in the loadout +export type LoadoutCategory = { + name: string; + category_icon: FAIcon | null; + category_info: string | null; + contents: LoadoutItem[]; +}; + +export type LoadoutManagerData = PreferencesMenuData & { + job_clothes: BooleanLike; +}; diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/loadout/index.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/loadout/index.tsx new file mode 100644 index 0000000000000..211f8ed8ae5e1 --- /dev/null +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/loadout/index.tsx @@ -0,0 +1,337 @@ +import { Fragment, useState } from 'react'; + +import { useBackend } from '../../../backend'; +import { + Box, + Button, + Divider, + Icon, + Input, + NoticeBox, + Section, + Stack, + Tabs, +} from '../../../components'; +import { CharacterPreview } from '../../common/CharacterPreview'; +import { ServerData } from '../data'; +import { ServerPreferencesFetcher } from '../ServerPreferencesFetcher'; +import { + LoadoutCategory, + LoadoutItem, + LoadoutManagerData, + typePath, +} from './base'; +import { ItemIcon, LoadoutTabDisplay, SearchDisplay } from './ItemDisplay'; +import { LoadoutModifyDimmer } from './ModifyPanel'; + +export const LoadoutPage = () => { + return ( + { + if (!serverData) { + return Loading...; + } + const loadoutServerData: ServerData = serverData; + return ( + + ); + }} + /> + ); +}; + +const LoadoutPageInner = (props: { loadout_tabs: LoadoutCategory[] }) => { + const { loadout_tabs } = props; + const [searchLoadout, setSearchLoadout] = useState(''); + const [selectedTabName, setSelectedTab] = useState(loadout_tabs[0].name); + const [modifyItemDimmer, setModifyItemDimmer] = useState( + null, + ); + + return ( + + + {!!modifyItemDimmer && ( + + )} +
    setSearchLoadout(value)} + placeholder="Search for an item..." + value={searchLoadout} + /> + } + > + + {loadout_tabs.map((curTab) => ( + { + setSelectedTab(curTab.name); + setSearchLoadout(''); + }} + > + + {curTab.category_icon && ( + + )} + {curTab.name} + + + ))} + +
    +
    + + + +
    + ); +}; + +const LoadoutTabs = (props: { + loadout_tabs: LoadoutCategory[]; + currentTab: string; + currentSearch: string; + modifyItemDimmer: LoadoutItem | null; + setModifyItemDimmer: (dimmer: LoadoutItem | null) => void; +}) => { + const { + loadout_tabs, + currentTab, + currentSearch, + modifyItemDimmer, + setModifyItemDimmer, + } = props; + const activeCategory = loadout_tabs.find((curTab) => { + return curTab.name === currentTab; + }); + const searching = currentSearch.length > 1; + + return ( + + + + + + + + + + + + + {searching || activeCategory?.contents ? ( +
    + {activeCategory.category_info} + + ) : null + } + > + + + {searching ? ( + + ) : ( + + )} + + +
    + ) : ( +
    + No contents for selected tab. +
    + )} +
    +
    + ); +}; + +const typepathToLoadoutItem = ( + typepath: typePath, + all_tabs: LoadoutCategory[], +) => { + // Maybe a bit inefficient, could be replaced with a hashmap? + for (const tab of all_tabs) { + for (const item of tab.contents) { + if (item.path === typepath) { + return item; + } + } + } + return null; +}; + +const LoadoutSelectedItem = (props: { + path: typePath; + all_tabs: LoadoutCategory[]; + modifyItemDimmer: LoadoutItem | null; + setModifyItemDimmer: (dimmer: LoadoutItem | null) => void; +}) => { + const { all_tabs, path, modifyItemDimmer, setModifyItemDimmer } = props; + const { act } = useBackend(); + + const item = typepathToLoadoutItem(path, all_tabs); + if (!item) { + return null; + } + + return ( + + + + + {item.name} + {item.buttons.length ? ( + + + + ) : ( + // empty space + )} + + + + + ); +}; + +const LoadoutSelectedSection = (props: { + all_tabs: LoadoutCategory[]; + modifyItemDimmer: LoadoutItem | null; + setModifyItemDimmer: (dimmer: LoadoutItem | null) => void; +}) => { + const { act, data } = useBackend(); + const { loadout_list } = data.character_preferences.misc; + const { all_tabs, modifyItemDimmer, setModifyItemDimmer } = props; + + return ( +
    act('clear_all_items')} + > + Clear All + + } + > + {loadout_list && + Object.entries(loadout_list).map(([path, item]) => ( + + + + + ))} +
    + ); +}; + +const LoadoutPreviewSection = () => { + const { act, data } = useBackend(); + + return ( +
    act('toggle_job_clothes')} + > + Job Clothes + + } + > + + + + + + + + +
    + ); +}; diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/character_preferences/blindfold_color.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/character_preferences/blindfold_color.tsx new file mode 100644 index 0000000000000..8a59ced57a8f9 --- /dev/null +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/character_preferences/blindfold_color.tsx @@ -0,0 +1,6 @@ +import { Feature, FeatureColorInput } from '../base'; + +export const blindfold_color: Feature = { + name: 'Blindfold color', + component: FeatureColorInput, +}; diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/character_preferences/pride_pin.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/character_preferences/pride_pin.tsx deleted file mode 100644 index 70c6f8a8efec3..0000000000000 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/character_preferences/pride_pin.tsx +++ /dev/null @@ -1,7 +0,0 @@ -import { FeatureChoiced } from '../base'; -import { FeatureDropdownInput } from '../dropdowns'; - -export const pride_pin: FeatureChoiced = { - name: 'Pride Pin', - component: FeatureDropdownInput, -}; diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/admin.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/admin.tsx index d99cd329f558e..7888a53e0038b 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/admin.tsx +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/admin.tsx @@ -1,5 +1,3 @@ -import { multiline } from 'common/string'; - import { CheckboxInput, Feature, @@ -41,7 +39,7 @@ export const fast_mc_refresh: FeatureToggle = { export const ghost_roles_as_admin: FeatureToggle = { name: 'Get ghost roles while adminned', category: 'ADMIN', - description: multiline` + description: ` If you de-select this, you will not get any ghost role pop-ups while adminned! Every single pop-up WILL never show up for you in an adminned state. However, this does not suppress notifications when you are diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/broadcast_login_logout.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/broadcast_login_logout.tsx index de2ad66bd99db..772e619bc5733 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/broadcast_login_logout.tsx +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/broadcast_login_logout.tsx @@ -1,11 +1,9 @@ -import { multiline } from 'common/string'; - import { CheckboxInput, FeatureToggle } from '../base'; export const broadcast_login_logout: FeatureToggle = { name: 'Broadcast login/logout', category: 'GAMEPLAY', - description: multiline` + description: ` When enabled, disconnecting and reconnecting will announce to deadchat. `, component: CheckboxInput, diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/darkened_flash.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/darkened_flash.tsx index a60c6d9d31c43..3184b43a456bf 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/darkened_flash.tsx +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/darkened_flash.tsx @@ -1,11 +1,9 @@ -import { multiline } from 'common/string'; - import { CheckboxInput, FeatureToggle } from '../base'; export const darkened_flash: FeatureToggle = { name: 'Enable darkened flashes', category: 'GAMEPLAY', - description: multiline` + description: ` When toggled, being flashed will show a dark screen rather than a bright one. `, diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/ghost.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/ghost.tsx index 5ec1686719799..d217418350337 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/ghost.tsx +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/ghost.tsx @@ -1,6 +1,5 @@ import { binaryInsertWith } from 'common/collections'; import { classes } from 'common/react'; -import { multiline } from 'common/string'; import { ReactNode } from 'react'; import { useBackend } from '../../../../../backend'; @@ -109,7 +108,7 @@ export const ghost_hud: FeatureToggle = { export const ghost_orbit: FeatureChoiced = { name: 'Ghost orbit', category: 'GHOST', - description: multiline` + description: ` The shape in which your ghost will orbit. Requires BYOND membership. `, @@ -127,7 +126,7 @@ export const ghost_orbit: FeatureChoiced = { export const ghost_others: FeatureChoiced = { name: 'Ghosts of others', category: 'GHOST', - description: multiline` + description: ` Do you want the ghosts of others to show up as their own setting, as their default sprites, or always as the default white ghost? `, @@ -144,7 +143,7 @@ export const inquisitive_ghost: FeatureToggle = { export const ghost_roles: FeatureToggle = { name: 'Get ghost roles', category: 'GHOST', - description: multiline` + description: ` If you de-select this, you will not get any ghost role pop-ups what-so-ever! Every single type of these pop-ups WILL be muted for you when you are ghosted. Very useful for those who find ghost roles or the diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/legacy_chat_toggles.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/legacy_chat_toggles.tsx index 5dd251c9cd09e..84418348d00aa 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/legacy_chat_toggles.tsx +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/legacy_chat_toggles.tsx @@ -1,5 +1,3 @@ -import { multiline } from 'common/string'; - import { CheckboxInput, FeatureToggle } from '../base'; export const chat_bankcard: FeatureToggle = { @@ -18,7 +16,7 @@ export const chat_dead: FeatureToggle = { export const chat_ghostears: FeatureToggle = { name: 'Hear all messages', category: 'GHOST', - description: multiline` + description: ` When enabled, you will be able to hear all speech as a ghost. When disabled, you will only be able to hear nearby speech. `, @@ -56,7 +54,7 @@ export const chat_ghostsight: FeatureToggle = { export const chat_ghostwhisper: FeatureToggle = { name: 'See all whispers', category: 'GHOST', - description: multiline` + description: ` When enabled, you will be able to hear all whispers as a ghost. When disabled, you will only be able to hear nearby whispers. `, diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/legacy_toggles.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/legacy_toggles.tsx index fdc3c62d2f32d..fb6cbfafddae9 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/legacy_toggles.tsx +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/legacy_toggles.tsx @@ -1,11 +1,9 @@ -import { multiline } from 'common/string'; - import { CheckboxInput, CheckboxInputInverse, FeatureToggle } from '../base'; export const admin_ignore_cult_ghost: FeatureToggle = { name: 'Prevent being summoned as a cult ghost', category: 'ADMIN', - description: multiline` + description: ` When enabled and observing, prevents Spirit Realm from forcing you into a cult ghost. `, diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/preferred_map.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/preferred_map.tsx index 5b0860ef91ec6..d00ce9dd04df7 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/preferred_map.tsx +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/preferred_map.tsx @@ -1,12 +1,10 @@ -import { multiline } from 'common/string'; - import { Feature } from '../base'; import { FeatureDropdownInput } from '../dropdowns'; export const preferred_map: Feature = { name: 'Preferred map', category: 'GAMEPLAY', - description: multiline` + description: ` During map rotation, prefer this map be chosen. This does not affect the map vote, only random rotation when a vote is not held. diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/screentips.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/screentips.tsx index ff2cf95a048f0..8cdc6c0ddf105 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/screentips.tsx +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/screentips.tsx @@ -1,5 +1,3 @@ -import { multiline } from 'common/string'; - import { CheckboxInput, Feature, @@ -12,7 +10,7 @@ import { FeatureDropdownInput } from '../dropdowns'; export const screentip_color: Feature = { name: 'Screentips: Screentips color', category: 'UI', - description: multiline` + description: ` The color of screen tips, the text you see when hovering over something. `, component: FeatureColorInput, @@ -21,7 +19,7 @@ export const screentip_color: Feature = { export const screentip_images: FeatureToggle = { name: 'Screentips: Allow images', category: 'UI', - description: multiline`When enabled, screentip hints use images for + description: `When enabled, screentip hints use images for the mouse button rather than LMB/RMB.`, component: CheckboxInput, }; @@ -29,7 +27,7 @@ export const screentip_images: FeatureToggle = { export const screentip_pref: FeatureChoiced = { name: 'Screentips: Enable screentips', category: 'UI', - description: multiline` + description: ` Enables screen tips, the text you see when hovering over something. When set to "Only with tips", will only show when there is more information than just the name, such as what right-clicking it does. diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/sounds.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/sounds.tsx index 34e968f35c476..3f1c50c16f9f1 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/sounds.tsx +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/sounds.tsx @@ -1,5 +1,3 @@ -import { multiline } from 'common/string'; - import { CheckboxInput, Feature, @@ -12,6 +10,7 @@ import { FeatureDropdownInput } from '../dropdowns'; export const sound_ambience: FeatureToggle = { name: 'Enable ambience', category: 'SOUND', + description: `Ambience refers to the more noticeable ambient sounds that play on occasion.`, component: CheckboxInput, }; @@ -46,7 +45,7 @@ export const sound_instruments: FeatureToggle = { export const sound_tts: FeatureChoiced = { name: 'Enable TTS', category: 'SOUND', - description: multiline` + description: ` When enabled, be able to hear text-to-speech sounds in game. When set to "Blips", text to speech will be replaced with blip sounds based on the voice. `, @@ -83,6 +82,7 @@ export const sound_midi: FeatureToggle = { export const sound_ship_ambience: FeatureToggle = { name: 'Enable ship ambience', category: 'SOUND', + description: `Ship ambience refers to the low ambient buzz that plays on loop.`, component: CheckboxInput, }; @@ -95,7 +95,7 @@ export const sound_elevator: FeatureToggle = { export const sound_achievement: FeatureChoiced = { name: 'Achievement unlock sound', category: 'SOUND', - description: multiline` + description: ` The sound that's played when unlocking an achievement. If disabled, no sound will be played. `, diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/tooltips.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/tooltips.tsx index d3df346a83f05..edbdb25ef1cbf 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/tooltips.tsx +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/tooltips.tsx @@ -1,5 +1,3 @@ -import { multiline } from 'common/string'; - import { CheckboxInput, Feature, @@ -10,7 +8,7 @@ import { export const enable_tips: FeatureToggle = { name: 'Enable tooltips', category: 'TOOLTIPS', - description: multiline` + description: ` Do you want to see tooltips when hovering over items? `, component: CheckboxInput, @@ -19,7 +17,7 @@ export const enable_tips: FeatureToggle = { export const tip_delay: Feature = { name: 'Tooltip delay (in milliseconds)', category: 'TOOLTIPS', - description: multiline` + description: ` How long should it take to see a tooltip when hovering over items? `, component: FeatureNumberInput, diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/window_flashing.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/window_flashing.tsx index 510bfc7ae2c52..d8b0ce0b4ae64 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/window_flashing.tsx +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/window_flashing.tsx @@ -1,11 +1,9 @@ -import { multiline } from 'common/string'; - import { CheckboxInput, FeatureToggle } from '../base'; export const windowflashing: FeatureToggle = { name: 'Enable window flashing', category: 'UI', - description: multiline` + description: ` When toggled, some important events will make your game icon flash on your task tray. `, diff --git a/tgui/packages/tgui/interfaces/QuantumConsole.tsx b/tgui/packages/tgui/interfaces/QuantumConsole.tsx index bba1d85801933..08ec428bc4dbd 100644 --- a/tgui/packages/tgui/interfaces/QuantumConsole.tsx +++ b/tgui/packages/tgui/interfaces/QuantumConsole.tsx @@ -1,6 +1,4 @@ import { BooleanLike } from 'common/react'; - -import { useBackend, useSharedState } from '../backend'; import { Button, Collapsible, @@ -12,7 +10,9 @@ import { Table, Tabs, Tooltip, -} from '../components'; +} from 'tgui-core/components'; + +import { useBackend, useSharedState } from '../backend'; import { TableCell, TableRow } from '../components/Table'; import { Window } from '../layouts'; import { LoadingScreen } from './common/LoadingToolbox'; @@ -47,6 +47,7 @@ type Avatar = { }; type Domain = { + announce_ghosts: BooleanLike; cost: number; desc: string; difficulty: number; @@ -74,10 +75,11 @@ enum Difficulty { High, } -const isConnected = (data: Data): data is Data & { connected: 1 } => - data.connected === 1; +function isConnected(data: Data): data is Data & { connected: 1 } { + return data.connected === 1; +} -const getColor = (difficulty: number) => { +function getColor(difficulty: number) { switch (difficulty) { case Difficulty.Low: return 'yellow'; @@ -88,9 +90,9 @@ const getColor = (difficulty: number) => { default: return 'green'; } -}; +} -export const QuantumConsole = (props) => { +export function QuantumConsole(props) { const { data } = useBackend(); return ( @@ -101,9 +103,9 @@ export const QuantumConsole = (props) => { ); -}; +} -const AccessView = (props) => { +function AccessView(props) { const { act, data } = useBackend(); const [tab, setTab] = useSharedState('tab', 0); @@ -228,22 +230,24 @@ const AccessView = (props) => { act('stop_domain')} tooltip="Begins shutdown. Will notify anyone connected." - /> + > + Stop Domain + ); -}; +} -const DomainEntry = (props: DomainEntryProps) => { +function DomainEntry(props: DomainEntryProps) { const { domain: { + announce_ghosts, cost, desc, difficulty, @@ -275,6 +279,8 @@ const DomainEntry = (props: DomainEntryProps) => { buttonName = 'Deploy'; } + const canView = name !== '???'; + return ( { title={ <> {name} - {!!is_modular && name !== '???' && } - {!!has_secondary_objectives && name !== '???' && ( - - )} + {!!is_modular && canView && } + {!!has_secondary_objectives && canView && } + {!!announce_ghosts && canView && } } > @@ -303,6 +308,7 @@ const DomainEntry = (props: DomainEntryProps) => { {desc} {!!is_modular && ' (Modular)'} {!!has_secondary_objectives && ' (Secondary Objective Available)'} + {!!announce_ghosts && ' (Ghost Interaction)'} @@ -322,7 +328,7 @@ const DomainEntry = (props: DomainEntryProps) => { ); -}; +} const AvatarDisplay = (props) => { const { act, data } = useBackend(); diff --git a/tgui/packages/tgui/interfaces/RapidPipeDispenser.tsx b/tgui/packages/tgui/interfaces/RapidPipeDispenser.tsx index 37b8f77cb8877..3bfe22f816479 100644 --- a/tgui/packages/tgui/interfaces/RapidPipeDispenser.tsx +++ b/tgui/packages/tgui/interfaces/RapidPipeDispenser.tsx @@ -1,5 +1,4 @@ import { BooleanLike, classes } from 'common/react'; -import { multiline } from 'common/string'; import { capitalizeAll } from 'common/string'; import { useState } from 'react'; @@ -347,11 +346,10 @@ export const SmartPipeBlockSection = (props) => { color="transparent" icon="info" tooltipPosition="right" - tooltip={multiline` - This is a panel for blocking certain connection + tooltip="This is a panel for blocking certain connection directions for the smart pipes. The button in the center resets to - default (all directions can connect)`} + default (all directions can connect)" /> diff --git a/tgui/packages/tgui/interfaces/RaptorDex.tsx b/tgui/packages/tgui/interfaces/RaptorDex.tsx new file mode 100644 index 0000000000000..946f8fb2b9553 --- /dev/null +++ b/tgui/packages/tgui/interfaces/RaptorDex.tsx @@ -0,0 +1,130 @@ +import { useBackend } from '../backend'; +import { Image, LabeledList, ProgressBar, Section, Stack } from '../components'; +import { Window } from '../layouts'; + +type Data = { + raptor_attack: number; + raptor_health: number; + raptor_speed: number; + raptor_color: String; + raptor_image: String; + raptor_gender: String; + raptor_happiness: String; + raptor_description: String; + inherited_attack: number; + inherited_attack_max: number; + inherited_health: number; + inherited_health_max: number; + inherited_traits: String[]; +}; + +export const RaptorDex = (props) => { + const { act, data } = useBackend(); + const { + raptor_attack, + raptor_health, + raptor_speed, + raptor_image, + raptor_gender, + inherited_attack, + inherited_attack_max, + inherited_health, + inherited_health_max, + raptor_happiness, + inherited_traits, + raptor_description, + raptor_color, + } = data; + return ( + + + + +
    + +
    +
    + +
    + + + {raptor_health} + + + {raptor_attack} + + + {10 - raptor_speed} + + + {raptor_gender} + + +
    +
    + + + + + + + + +
    +
    + +
    + +
    +
    + + {inherited_traits.map((trait, index) => ( + {trait} + ))} + +
    +
    +
    +
    + {raptor_description} +
    +
    +
    + ); +}; diff --git a/tgui/packages/tgui/interfaces/RequestsConsole/AnnouncementTab.tsx b/tgui/packages/tgui/interfaces/RequestsConsole/AnnouncementTab.tsx index 5ffeed5713731..77a0b3558b767 100644 --- a/tgui/packages/tgui/interfaces/RequestsConsole/AnnouncementTab.tsx +++ b/tgui/packages/tgui/interfaces/RequestsConsole/AnnouncementTab.tsx @@ -1,11 +1,13 @@ -import { useBackend, useLocalState } from '../../backend'; +import { useState } from 'react'; + +import { useBackend } from '../../backend'; import { Button, NoticeBox, Section, TextArea } from '../../components'; import { RequestsData } from './types'; export const AnnouncementTab = (props) => { const { act, data } = useBackend(); const { authentication_data, is_admin_ghost_ai } = data; - const [messageText, setMessageText] = useLocalState('messageText', ''); + const [messageText, setMessageText] = useState(''); return (